From d096da02e6e88e4956345f68d974ac2a5c97d444 Mon Sep 17 00:00:00 2001 From: naskya Date: Sun, 28 Jul 2024 23:40:22 +0000 Subject: [PATCH] :tada: First Commit release: v20240729 Co-authored-by: Laura Hausmann Co-authored-by: GitLab CI Co-authored-by: Hosted Weblate Co-authored-by: Saamkhaih Kyakya <70475761+hiohlan@users.noreply.github.com> See merge request firefish/firefish!11214 --- .config/LICENSE | 13 + .config/ci.yml | 11 + .config/devenv.yml | 20 + .config/docker_ci.env | 4 + .config/docker_example.env | 4 + .config/example.yml | 238 + .config/helm_values_example.yml | 82 + .dockerignore | 62 + .editorconfig | 14 + .gitattributes | 7 + .gitignore | 79 + .gitlab-ci.yml | 366 + .gitlab/issue_templates/default.md | 99 + .gitlab/issue_templates/discussion.md | 82 + .gitlab/issue_templates/feature.md | 67 + .gitlab/issue_templates/refactor.md | 67 + .gitlab/merge_request_templates/default.md | 18 + .gitlab/merge_request_templates/release.md | 18 + .vscode/extensions.json | 22 + .vscode/launch.json | 20 + .weblate | 3 + CODE_OF_CONDUCT.md | 136 + CONTRIBUTING.md | 80 + COPYING | 60 + Cargo.lock | 4481 ++++++ Cargo.toml | 64 + Dockerfile | 52 + LICENSE | 661 + Makefile | 44 + README.md | 36 + SECURITY.md | 5 + animated.svg | 153 + biome.json | 416 + ci/.gitignore | 2 + ci/cargo/config.toml | 3 + custom/LICENSE | 13 + custom/assets/badges/error.webp | Bin 0 -> 41872 bytes custom/assets/badges/info.webp | Bin 0 -> 36030 bytes custom/assets/badges/not-found.webp | Bin 0 -> 33816 bytes custom/assets/instance.css | 7 + custom/assets/robots.txt | 14 + custom/locales/.gitkeep | 0 dev/config.example.env | 4 + dev/container/docker-compose.yml | 49 + dev/container/docker-entrypoint.sh | 65 + dev/db-container/Makefile | 14 + dev/db-container/docker-compose.yml | 24 + dev/db-container/install.sql | 1 + dev/docs/container.md | 34 + dev/docs/db-container.md | 105 + dev/docs/local-installation.md | 182 + docker-compose.example.yml | 77 + docs/activitypub-extensions.md | 10 + docs/api-change.md | 282 + docs/api-doc.md | 5 + docs/changelog.md | 263 + docs/downgrade.md | 78 + docs/downgrade.sql | 844 + docs/firefish.nginx.conf | 72 + docs/install-container.md | 54 + docs/install.md | 482 + docs/notice-for-admins.md | 410 + docs/upgrade.md | 41 + locales/ar-SA.yml | 1582 ++ locales/bg-BG.yml | 958 ++ locales/bn-BD.yml | 1771 +++ locales/ca-ES.yml | 2329 +++ locales/cs-CZ.yml | 1008 ++ locales/da-DK.yml | 236 + locales/de-DE.yml | 2344 +++ locales/el-GR.yml | 815 + locales/en-US.yml | 2270 +++ locales/eo.yml | 11 + locales/es-ES.yml | 2223 +++ locales/fi.yml | 966 ++ locales/fr-FR.yml | 2353 +++ locales/gl.yml | 378 + locales/hi.yml | 3 + locales/hu.yml | 1 + locales/id-ID.yml | 2306 +++ locales/index.d.ts | 3 + locales/index.mjs | 90 + locales/it-IT.yml | 2205 +++ locales/ja-JP.yml | 2092 +++ locales/ja-KS.yml | 1467 ++ locales/kab.yml | 124 + locales/kn-IN.yml | 85 + locales/ko-KR.yml | 2004 +++ locales/nl-NL.yml | 709 + locales/no-NO.yml | 1906 +++ locales/pl-PL.yml | 2031 +++ locales/pt-BR.yml | 254 + locales/pt-PT.yml | 767 + locales/ro-RO.yml | 776 + locales/ru-RU.yml | 2150 +++ locales/sk-SK.yml | 1828 +++ locales/sv-SE.yml | 781 + locales/th-TH.yml | 1411 ++ locales/tr-TR.yml | 2130 +++ locales/ug-CN.yml | 5 + locales/uk-UA.yml | 2128 +++ locales/vi-VN.yml | 2109 +++ locales/zh-CN.yml | 2089 +++ locales/zh-TW.yml | 2058 +++ package.json | 54 + packages/README.md | 10 + packages/backend-rs/.gitignore | 199 + packages/backend-rs/Cargo.toml | 60 + packages/backend-rs/Makefile | 35 + packages/backend-rs/README.md | 114 + packages/backend-rs/build.rs | 8 + packages/backend-rs/index.d.ts | 1674 ++ packages/backend-rs/index.js | 462 + packages/backend-rs/package.json | 17 + packages/backend-rs/src/config/meta.rs | 94 + packages/backend-rs/src/config/mod.rs | 7 + packages/backend-rs/src/config/server.rs | 353 + packages/backend-rs/src/database/cache.rs | 320 + packages/backend-rs/src/database/mod.rs | 11 + .../backend-rs/src/database/postgresql.rs | 93 + packages/backend-rs/src/database/redis.rs | 169 + packages/backend-rs/src/federation/acct.rs | 106 + .../src/federation/activitypub/mod.rs | 1 + .../src/federation/activitypub/object/mod.rs | 9 + .../federation/activitypub/object/relay.rs | 28 + .../src/federation/internal_actor/instance.rs | 50 + .../src/federation/internal_actor/mod.rs | 4 + .../src/federation/internal_actor/relay.rs | 45 + packages/backend-rs/src/federation/mod.rs | 6 + .../src/federation/nodeinfo/fetch.rs | 176 + .../src/federation/nodeinfo/generate.rs | 179 + .../backend-rs/src/federation/nodeinfo/mod.rs | 7 + .../src/federation/nodeinfo/schema.rs | 286 + packages/backend-rs/src/init/greet.rs | 21 + packages/backend-rs/src/init/log.rs | 52 + packages/backend-rs/src/init/mod.rs | 5 + packages/backend-rs/src/init/system_info.rs | 50 + packages/backend-rs/src/lib.rs | 10 + .../backend-rs/src/misc/check_server_block.rs | 87 + .../backend-rs/src/misc/check_word_mute.rs | 189 + packages/backend-rs/src/misc/convert_host.rs | 48 + packages/backend-rs/src/misc/emoji.rs | 6 + packages/backend-rs/src/misc/escape_sql.rs | 46 + .../src/misc/format_milliseconds.rs | 51 + .../backend-rs/src/misc/get_image_size.rs | 239 + packages/backend-rs/src/misc/is_quote.rs | 12 + packages/backend-rs/src/misc/is_safe_url.rs | 42 + .../backend-rs/src/misc/latest_version.rs | 117 + packages/backend-rs/src/misc/mod.rs | 21 + .../backend-rs/src/misc/note/elaborate.rs | 134 + packages/backend-rs/src/misc/note/mod.rs | 5 + .../backend-rs/src/misc/note/summarize.rs | 145 + packages/backend-rs/src/misc/nyaify.rs | 127 + packages/backend-rs/src/misc/password.rs | 75 + packages/backend-rs/src/misc/reaction.rs | 198 + .../misc/remove_old_attestation_challenges.rs | 18 + packages/backend-rs/src/misc/should_nyaify.rs | 45 + packages/backend-rs/src/misc/system_info.rs | 88 + packages/backend-rs/src/misc/translate.rs | 282 + packages/backend-rs/src/misc/user/count.rs | 17 + packages/backend-rs/src/misc/user/mod.rs | 1 + .../src/model/entity/abuse_user_report.rs | 58 + .../src/model/entity/access_token.rs | 80 + packages/backend-rs/src/model/entity/ad.rs | 29 + .../src/model/entity/announcement.rs | 39 + .../src/model/entity/announcement_read.rs | 53 + .../backend-rs/src/model/entity/antenna.rs | 85 + packages/backend-rs/src/model/entity/app.rs | 59 + .../src/model/entity/attestation_challenge.rs | 40 + .../src/model/entity/auth_session.rs | 54 + .../backend-rs/src/model/entity/blocking.rs | 41 + .../backend-rs/src/model/entity/channel.rs | 85 + .../src/model/entity/channel_following.rs | 53 + .../src/model/entity/channel_note_pining.rs | 53 + packages/backend-rs/src/model/entity/clip.rs | 49 + .../backend-rs/src/model/entity/clip_note.rs | 51 + .../backend-rs/src/model/entity/drive_file.rs | 123 + .../src/model/entity/drive_folder.rs | 56 + packages/backend-rs/src/model/entity/emoji.rs | 33 + .../src/model/entity/follow_request.rs | 63 + .../backend-rs/src/model/entity/following.rs | 53 + .../src/model/entity/gallery_like.rs | 53 + .../src/model/entity/gallery_post.rs | 56 + .../backend-rs/src/model/entity/hashtag.rs | 43 + .../backend-rs/src/model/entity/instance.rs | 61 + .../src/model/entity/messaging_message.rs | 78 + packages/backend-rs/src/model/entity/meta.rs | 197 + .../backend-rs/src/model/entity/migrations.rs | 20 + packages/backend-rs/src/model/entity/mod.rs | 74 + .../src/model/entity/moderation_log.rs | 40 + .../backend-rs/src/model/entity/muted_note.rs | 53 + .../backend-rs/src/model/entity/muting.rs | 43 + packages/backend-rs/src/model/entity/note.rs | 241 + .../backend-rs/src/model/entity/note_edit.rs | 43 + .../src/model/entity/note_favorite.rs | 53 + .../backend-rs/src/model/entity/note_file.rs | 51 + .../src/model/entity/note_reaction.rs | 54 + .../src/model/entity/note_thread_muting.rs | 39 + .../src/model/entity/note_unread.rs | 59 + .../src/model/entity/note_watching.rs | 55 + .../src/model/entity/notification.rs | 117 + packages/backend-rs/src/model/entity/page.rs | 92 + .../backend-rs/src/model/entity/page_like.rs | 53 + .../model/entity/password_reset_request.rs | 38 + packages/backend-rs/src/model/entity/poll.rs | 45 + .../backend-rs/src/model/entity/poll_vote.rs | 54 + .../backend-rs/src/model/entity/prelude.rs | 71 + .../backend-rs/src/model/entity/promo_note.rs | 37 + .../backend-rs/src/model/entity/promo_read.rs | 53 + .../src/model/entity/registration_ticket.rs | 21 + .../src/model/entity/registry_item.rs | 44 + packages/backend-rs/src/model/entity/relay.rs | 21 + .../src/model/entity/renote_muting.rs | 24 + .../src/model/entity/reply_muting.rs | 24 + .../src/model/entity/sea_orm_active_enums.rs | 237 + .../backend-rs/src/model/entity/signin.rs | 41 + .../src/model/entity/sw_subscription.rs | 61 + .../src/model/entity/used_username.rs | 20 + packages/backend-rs/src/model/entity/user.rs | 432 + .../backend-rs/src/model/entity/user_group.rs | 72 + .../src/model/entity/user_group_invitation.rs | 61 + .../src/model/entity/user_group_invite.rs | 53 + .../src/model/entity/user_group_joining.rs | 61 + .../backend-rs/src/model/entity/user_ip.rs | 23 + .../src/model/entity/user_keypair.rs | 37 + .../backend-rs/src/model/entity/user_list.rs | 54 + .../src/model/entity/user_list_joining.rs | 53 + .../src/model/entity/user_note_pining.rs | 53 + .../src/model/entity/user_pending.rs | 24 + .../src/model/entity/user_profile.rs | 112 + .../src/model/entity/user_publickey.rs | 37 + .../src/model/entity/user_security_key.rs | 40 + .../backend-rs/src/model/entity/webhook.rs | 46 + packages/backend-rs/src/model/mod.rs | 3 + .../backend-rs/src/service/antenna/cache.rs | 26 + .../src/service/antenna/check_hit.rs | 171 + .../backend-rs/src/service/antenna/mod.rs | 4 + .../src/service/antenna/process_new_note.rs | 77 + .../backend-rs/src/service/antenna/update.rs | 7 + packages/backend-rs/src/service/mod.rs | 6 + packages/backend-rs/src/service/note/mod.rs | 1 + packages/backend-rs/src/service/note/watch.rs | 42 + .../src/service/push_notification.rs | 400 + packages/backend-rs/src/service/stream.rs | 124 + .../backend-rs/src/service/stream/antenna.rs | 13 + .../backend-rs/src/service/stream/channel.rs | 11 + .../backend-rs/src/service/stream/chat.rs | 29 + .../src/service/stream/chat_index.rs | 29 + .../src/service/stream/custom_emoji.rs | 28 + .../backend-rs/src/service/stream/drive.rs | 58 + .../src/service/stream/group_chat.rs | 25 + .../backend-rs/src/service/stream/internal.rs | 45 + .../backend-rs/src/service/stream/main.rs | 87 + .../src/service/stream/moderation.rs | 22 + .../backend-rs/src/service/stream/note.rs | 43 + .../src/service/stream/note_edit.rs | 18 + .../backend-rs/src/service/stream/notes.rs | 13 + .../backend-rs/src/service/stream/user.rs | 41 + packages/backend-rs/src/util/error_chain.rs | 82 + packages/backend-rs/src/util/http_client.rs | 52 + packages/backend-rs/src/util/id.rs | 120 + packages/backend-rs/src/util/mod.rs | 6 + packages/backend-rs/src/util/random.rs | 37 + packages/backend/.idea/.gitignore | 8 + packages/backend/.vscode/settings.json | 10 + packages/backend/assets/LICENSE | 13 + packages/backend/assets/api-doc.png | Bin 0 -> 73089 bytes packages/backend/assets/apple-touch-icon.png | Bin 0 -> 170287 bytes packages/backend/assets/avatar.png | Bin 0 -> 14059 bytes packages/backend/assets/badges/error.webp | Bin 0 -> 41872 bytes packages/backend/assets/badges/info.webp | Bin 0 -> 36030 bytes packages/backend/assets/badges/not-found.webp | Bin 0 -> 33816 bytes packages/backend/assets/favicon.ico | Bin 0 -> 10286 bytes packages/backend/assets/favicon.png | Bin 0 -> 1259 bytes packages/backend/assets/favicon.svg | 33 + ...hyperlegible-v11-latin_latin-ext-700.woff2 | Bin 0 -> 21004 bytes ...egible-v11-latin_latin-ext-700italic.woff2 | Bin 0 -> 22424 bytes ...erlegible-v11-latin_latin-ext-italic.woff2 | Bin 0 -> 21948 bytes ...rlegible-v11-latin_latin-ext-regular.woff2 | Bin 0 -> 20668 bytes packages/backend/assets/icons/192.png | Bin 0 -> 6244 bytes packages/backend/assets/icons/512.png | Bin 0 -> 19838 bytes packages/backend/assets/icons/maskable.png | Bin 0 -> 15650 bytes packages/backend/assets/icons/monochrome.png | Bin 0 -> 8163 bytes packages/backend/assets/mi-white.png | Bin 0 -> 5607 bytes .../assets/notification-badges/LICENSE | 24 + .../backend/assets/notification-badges/at.png | Bin 0 -> 2412 bytes .../assets/notification-badges/boost.png | Bin 0 -> 1902 bytes .../assets/notification-badges/check.png | Bin 0 -> 1183 bytes .../notification-badges/clipboard-check.png | Bin 0 -> 1047 bytes .../assets/notification-badges/clock.png | Bin 0 -> 2101 bytes .../assets/notification-badges/comments.png | Bin 0 -> 1843 bytes .../assets/notification-badges/id-card.png | Bin 0 -> 1445 bytes .../assets/notification-badges/null.png | Bin 0 -> 174 bytes .../assets/notification-badges/plus.png | Bin 0 -> 816 bytes .../assets/notification-badges/poll.png | Bin 0 -> 889 bytes .../assets/notification-badges/quote.png | Bin 0 -> 1383 bytes .../assets/notification-badges/reaction.png | Bin 0 -> 2418 bytes .../assets/notification-badges/reply.png | Bin 0 -> 1194 bytes .../assets/notification-badges/user-plus.png | Bin 0 -> 1972 bytes packages/backend/assets/redoc.html | 19 + packages/backend/assets/robots.txt | 14 + packages/backend/assets/screenshots/1.webp | Bin 0 -> 68030 bytes packages/backend/assets/screenshots/2.webp | Bin 0 -> 86264 bytes packages/backend/assets/sounds/aisha/1.mp3 | Bin 0 -> 34480 bytes packages/backend/assets/sounds/aisha/2.mp3 | Bin 0 -> 24031 bytes packages/backend/assets/sounds/aisha/3.mp3 | Bin 0 -> 29256 bytes .../assets/sounds/noizenecio/kick_gaba.mp3 | Bin 0 -> 18866 bytes .../assets/sounds/noizenecio/kick_gaba2.mp3 | Bin 0 -> 27144 bytes .../backend/assets/sounds/syuilo/down.mp3 | Bin 0 -> 18240 bytes .../backend/assets/sounds/syuilo/kick.mp3 | Bin 0 -> 15672 bytes .../sounds/syuilo/pirori-square-wet.mp3 | Bin 0 -> 139200 bytes .../assets/sounds/syuilo/pirori-wet.mp3 | Bin 0 -> 139200 bytes .../backend/assets/sounds/syuilo/pirori.mp3 | Bin 0 -> 19200 bytes .../backend/assets/sounds/syuilo/poi1.mp3 | Bin 0 -> 18240 bytes .../backend/assets/sounds/syuilo/poi2.mp3 | Bin 0 -> 18240 bytes .../backend/assets/sounds/syuilo/pope1.mp3 | Bin 0 -> 18240 bytes .../backend/assets/sounds/syuilo/pope2.mp3 | Bin 0 -> 18240 bytes .../backend/assets/sounds/syuilo/popo.mp3 | Bin 0 -> 18240 bytes .../assets/sounds/syuilo/queue-jammed.mp3 | Bin 0 -> 351466 bytes .../backend/assets/sounds/syuilo/reverved.mp3 | Bin 0 -> 276480 bytes .../backend/assets/sounds/syuilo/ryukyu.mp3 | Bin 0 -> 139200 bytes .../backend/assets/sounds/syuilo/snare.mp3 | Bin 0 -> 26121 bytes .../assets/sounds/syuilo/square-pico.mp3 | Bin 0 -> 19200 bytes .../backend/assets/sounds/syuilo/triple.mp3 | Bin 0 -> 18240 bytes packages/backend/assets/sounds/syuilo/up.mp3 | Bin 0 -> 18240 bytes .../backend/assets/sounds/syuilo/waon.mp3 | Bin 0 -> 18240 bytes packages/backend/assets/splash.png | Bin 0 -> 431866 bytes packages/backend/assets/splash.svg | 153 + packages/backend/assets/transparent.png | Bin 0 -> 68 bytes packages/backend/assets/user-unknown.png | Bin 0 -> 3518 bytes packages/backend/assets/woozy.png | Bin 0 -> 18990 bytes packages/backend/jsconfig.json | 8 + packages/backend/package.json | 173 + packages/backend/scripts/create-migration.mjs | 11 + packages/backend/src/@types/hcaptcha.d.ts | 14 + .../backend/src/@types/http-signature.d.ts | 98 + .../backend/src/@types/koa-json-body.d.ts | 15 + .../koa-remove-trailing-slashes/index.d.ts | 1 + packages/backend/src/@types/langdetect.d.ts | 7 + packages/backend/src/@types/package.json.d.ts | 10 + packages/backend/src/boot/index.ts | 96 + packages/backend/src/boot/master.ts | 148 + packages/backend/src/boot/worker.ts | 30 + packages/backend/src/config.ts | 3 + packages/backend/src/const.ts | 97 + packages/backend/src/daemons/queue-stats.ts | 60 + packages/backend/src/daemons/server-stats.ts | 32 + packages/backend/src/db/logger.ts | 3 + packages/backend/src/db/postgre.ts | 239 + packages/backend/src/db/redis.ts | 24 + packages/backend/src/global.d.ts | 2 + packages/backend/src/index.ts | 14 + packages/backend/src/mfm/from-html.ts | 255 + packages/backend/src/mfm/to-html.ts | 196 + .../src/migration/1000000000000-Init.ts | 1070 ++ .../src/migration/1556348509290-Pages.ts | 52 + .../migration/1556746559567-UserProfile.ts | 23 + .../migration/1557476068003-PinnedUsers.ts | 12 + .../migration/1557761316509-AddSomeUrls.ts | 20 + .../1557932705754-ObjectStorageSetting.ts | 68 + .../src/migration/1558072954435-PageLike.ts | 36 + .../src/migration/1558103093633-UserGroup.ts | 84 + .../1558257926829-UserGroupInvite.ts | 40 + .../1558266512381-UserListJoining.ts | 12 + .../src/migration/1561706992953-webauthn.ts | 50 + .../migration/1561873850023-ChartIndexes.ts | 378 + .../1562422242907-PasswordLessLogin.ts | 14 + .../src/migration/1562444565093-PinnedPage.ts | 26 + .../1562448332510-PageTitleHideOption.ts | 14 + .../migration/1562869971568-ModerationLog.ts | 22 + .../migration/1563757595828-UsedUsername.ts | 12 + .../src/migration/1565634203341-room.ts | 12 + .../1571220798684-CustomEmojiCategory.ts | 16 + .../src/migration/1572760203493-nodeinfo.ts | 80 + .../1576269851876-TalkFederationId.ts | 16 + .../1576869585998-ProxyRemoteFiles.ts | 16 + .../src/migration/1579267006611-v12.ts | 90 + .../src/migration/1579270193251-v12-2.ts | 16 + .../src/migration/1579282808087-v12-3.ts | 16 + .../src/migration/1579544426412-v12-4.ts | 24 + .../src/migration/1579977526288-v12-5.ts | 155 + .../src/migration/1579993013959-v12-6.ts | 32 + .../src/migration/1580069531114-v12-7.ts | 50 + .../src/migration/1580148575182-v12-8.ts | 24 + .../src/migration/1580154400017-v12-9.ts | 16 + .../src/migration/1580276619901-v12-10.ts | 30 + .../src/migration/1580331224276-v12-11.ts | 32 + .../src/migration/1580508795118-v12-12.ts | 144 + .../src/migration/1580543501339-v12-13.ts | 13 + .../src/migration/1580864313253-v12-14.ts | 40 + .../1581526429287-user-group-invitation.ts | 106 + .../1581695816408-user-group-antenna.ts | 66 + ...581708415836-drive-user-folder-id-index.ts | 16 + .../src/migration/1581979837262-promo.ts | 66 + .../1582019042083-featured-injecttion.ts | 16 + .../1582210532752-antenna-exclude.ts | 16 + .../1582875306439-note-reaction-length.ts | 16 + .../src/migration/1585361548360-miauth.ts | 104 + .../1585385921215-custom-notification.ts | 149 + .../src/migration/1585772678853-ap-url.ts | 13 + .../1586624197029-AddObjectStorageUseProxy.ts | 18 + .../1586641139527-remote-reaction.ts | 16 + .../migration/1586708940386-pageAiScript.ts | 16 + .../src/migration/1588044505511-hCaptcha.ts | 32 + .../src/migration/1589023282116-pubRelay.ts | 26 + .../src/migration/1595075960584-blurhash.ts | 12 + ...595077605646-blurhash-for-avatar-banner.ts | 26 + .../1595676934834-instance-icon-url.ts | 12 + .../src/migration/1595771249699-word-mute.ts | 52 + .../src/migration/1595782306083-word-mute2.ts | 20 + .../src/migration/1596548170836-channel.ts | 114 + .../src/migration/1596786425167-channel2.ts | 14 + ...597230137744-objectStorageSetPublicRead.ts | 16 + ...597236229720-IncludingNotificationTypes.ts | 22 + .../1597385880794-add-sensitive-index.ts | 12 + .../migration/1597459042300-channel-unread.ts | 43 + .../1597893996136-ChannelNoteIdDescIndex.ts | 16 + .../1600353287890-mutingNotificationTypes.ts | 34 + .../1603094348345-refine-abuse-user-report.ts | 62 + ...1603095701770-refine-abuse-user-report2.ts | 28 + .../1603776877564-instance-theme-color.ts | 12 + .../1603781553011-instance-favicon.ts | 12 + .../1604821689616-delete-auto-watch.ts | 14 + .../1605408848373-clip-description.ts | 12 + .../src/migration/1605408971051-comments.ts | 1066 ++ .../1605585339718-instance-pinned-pages.ts | 12 + .../1605965516823-instance-images.ts | 18 + .../src/migration/1606191203881-no-crawle.ts | 20 + .../1607151207216-instance-pinned-clip.ts | 12 + .../migration/1607353487793-isExplorable.ts | 22 + .../src/migration/1610277136869-registry.ts | 30 + .../src/migration/1610277585759-registry2.ts | 18 + .../src/migration/1610283021566-registry3.ts | 14 + .../migration/1611354329133-followersUri.ts | 18 + .../src/migration/1611397665007-gallery.ts | 70 + ...547387175-objectStorageS3ForcePathStyle.ts | 16 + .../1612619156584-announcement-email.ts | 14 + .../1613155914446-emailNotificationTypes.ts | 14 + .../src/migration/1613181457597-user-lang.ts | 12 + ...1613503367223-use-bigint-for-driveUsage.ts | 15 + .../src/migration/1615965918224-chart-v2.ts | 507 + .../src/migration/1615966519402-chart-v2-2.ts | 38 + .../1618637372000-user-last-active-date.ts | 16 + .../1618639857000-user-hide-online-status.ts | 14 + .../migration/1619942102890-password-reset.ts | 26 + .../backend/src/migration/1620019354680-ad.ts | 20 + .../src/migration/1620364649428-ad2.ts | 12 + .../1621479946000-add-note-indexes.ts | 21 + ...9304522-user-profile-description-length.ts | 18 + .../1622681548499-log-message-length.ts | 16 + .../1626509500668-fix-remote-file-proxy.ts | 30 + .../1626733991004-allowlist-secure-mode.ts | 21 + .../migration/1629004542760-chart-reindex.ts | 356 + .../1629024377804-deepl-integration.ts | 12 + .../1629288472000-fix-channel-userId.ts | 14 + .../1629512953000-user-is-deleted.ts | 15 + .../1629778475000-deepl-integration2.ts | 12 + .../1629833361000-AddShowTLReplies.ts | 17 + .../1629968054000_userInstanceBlocks.ts | 17 + ...1633068642000-email-required-for-signup.ts | 14 + .../migration/1633071909016-user-pending.ts | 16 + .../1634486652000-user-public-reactions.ts | 14 + .../src/migration/1634902659689-delete-log.ts | 8 + .../1635500777168-note-thread-mute.ts | 46 + .../migration/1636197624383-ff-visibility.ts | 20 + .../1636697408073-remove-via-mobile.ts | 13 + .../1637320813000-forwarded-report.ts | 15 + .../src/migration/1639325650583-chart-v3.ts | 511 + .../src/migration/1642611822809-emoji-url.ts | 19 + ...1642613870898-drive-file-webpublic-type.ts | 15 + .../src/migration/1643963705770-chart-v4.ts | 165 + .../src/migration/1643966656277-chart-v5.ts | 57 + .../src/migration/1643967331284-chart-v6.ts | 1005 ++ .../1644010796173-convert-hard-mutes.ts | 68 + .../src/migration/1644058404077-chart-v7.ts | 1470 ++ .../src/migration/1644059847460-chart-v8.ts | 46 + .../src/migration/1644060125705-chart-v9.ts | 46 + .../src/migration/1644073149413-chart-v10.ts | 77 + .../src/migration/1644095659741-chart-v11.ts | 249 + .../src/migration/1644328606241-chart-v12.ts | 57 + .../src/migration/1644331238153-chart-v13.ts | 33 + .../src/migration/1644344266289-chart-v14.ts | 117 + .../1644395759931-instance-theme-color.ts | 13 + .../src/migration/1644481657998-chart-v15.ts | 69 + .../1644551208096-following-indexes.ts | 21 + ...45340161439-remove-max-note-text-length.ts | 17 + .../1645599900873-federation-chart-pubsub.ts | 21 + .../1646143552768-instance-default-theme.ts | 21 + .../1646387162108-mute-expires-at.ts | 19 + .../1646549089451-poll-ended-notification.ts | 29 + .../1646633030285-chart-federation-active.ts | 21 + ...655454495-remove-instance-drive-columns.ts | 19 + ...2390560-chart-federation-active-sub-pub.ts | 47 + .../src/migration/1648548247382-webhook.ts | 37 + .../src/migration/1648816172177-webhook-2.ts | 15 + .../migration/1651224615271-foreign-key.ts | 187 + .../1652859567549-uniform-themecolor.ts | 51 + .../migration/1655368940105-nsfw-detection.ts | 51 + .../1655371960534-nsfw-detection-2.ts | 27 + .../1655388169582-nsfw-detection-3.ts | 45 + .../1655393015659-nsfw-detection-4.ts | 57 + .../1655813815729-driveCapacityOverrideMb.ts | 23 + .../src/migration/1655918165614-user-ip.ts | 31 + .../src/migration/1656122560740-file-ip.ts | 19 + .../1656251734807-nsfw-detection-5.ts | 79 + .../src/migration/1656328812281-ip-2.ts | 19 + .../1656408772602-nsfw-detection-6.ts | 15 + .../1656772790599-user-moderation-note.ts | 15 + .../1657346559800-active-email-validation.ts | 15 + .../src/migration/1658203170545firefish.ts | 21 + .../1658656633972-note-replies-function.ts | 52 + .../src/migration/1658939464003CustomMOTD.ts | 12 + .../1658941974648CustomSplashIcons.ts | 14 + .../src/migration/1658981842728FixCalckey.ts | 27 + .../1659042130648RecommendedTimeline.ts | 20 + .../migration/1660068273737GuestTimeline.ts | 14 + .../1665091090561-add-renote-muting.ts | 20 + .../src/migration/1668828368510PageDraft.ts | 12 + .../migration/1668831378728FixCalckeyAgain.ts | 15 + ...6634-whetherPushNotifyToSendReadMessage.ts | 17 + .../1669288094000-AddMovedToAndKnownAs.ts | 21 + ...ddFkAbuseUserReportTargetUserIdToUserId.ts | 20 + .../1671388343000-CalckeyRepoMove.ts | 23 + .../1672882664294-DefaultReaction.ts | 16 + .../1673336077243-PollChoiceLength.ts | 15 + .../1676093997212-AntennaInstances.ts | 27 + .../migration/1677935903517-DriveComment.ts | 15 + .../1678426061773-tweak-varchar-length.ts | 16 + ...678945242650-add-props-for-custom-emoji.ts | 13 + .../src/migration/1679269929000-fix-repo.ts | 21 + .../migration/1680375641101-clean-charts.ts | 24 + .../src/migration/1680426269172-SpeakAsCat.ts | 20 + .../src/migration/1682753227899-NoteEdit.ts | 53 + .../migration/1682777547198-LibreTranslate.ts | 23 + .../1682891890317-InstanceSilence.ts | 13 + .../migration/1682891891317-AddHiddenPosts.ts | 15 + .../1683682889948-PreventAiLearning.ts | 15 + .../1683980686995-ExperimentalFeatures.ts | 16 + ...684206886988-remove-showTimelineReplies.ts | 17 + .../src/migration/1684494870830-EmojiSize.ts | 19 + .../1688280713783-add-meta-options.ts | 21 + .../1688845537045-announcement-popup.ts | 21 + .../migration/1689136347561-donation-link.ts | 15 + .../migration/1689739513827-firefish-repo.ts | 21 + .../migration/1689957674000-firefish-repo.ts | 21 + .../1692374635734-IncreaseHostCharLimit.ts | 119 + .../1692825433698-emoji-moderator.ts | 17 + .../migration/1695334243217-add-post-lang.ts | 13 + .../src/migration/1698420787202-pgroonga.ts | 21 + .../src/migration/1699305365258-more-urls.ts | 13 + .../1704851359889-add-reply-muting.ts | 21 + .../1705848938166-remove-nsfw-detection.ts | 64 + ...877093218-remove-native-utils-migration.ts | 154 + .../1705944717480-rename-meta-columns.ts | 27 + ...9-separate-hard-mute-words-and-patterns.ts | 34 + .../1707850084123-firefish-url-move.ts | 21 + ...708452631156-drop-user-profile-language.ts | 15 + .../1708872574733-index-alt-text-and-cw.ts | 17 + .../migration/1709047957489-remove-charts.ts | 618 + .../1709129810501-fix-note-url-index.ts | 11 + .../1709251460718-change-default-configs.ts | 27 + ...09305200000-markLocalFilesNsfwByDefault.ts | 18 + ...1709395223612-swSubscriptionAccessToken.ts | 28 + .../src/migration/1710304584214-note-file.ts | 41 + .../1710690239308-fix-muting-indices.ts | 57 + .../1711075007936-userProfileMentions.ts | 17 + .../1711936358554-expand-note-edit.ts | 15 + .../migration/1712425488543-drop-time-zone.ts | 459 + .../1712855579316-fix-chat-file-constraint.ts | 21 + .../migration/1712937600000-antennaLimit.ts | 19 + .../1713108561474-clientCredentials.ts | 17 + ...713225866247-convert-cw-varchar-to-text.ts | 21 + .../1713451569342-AddDriveFileUsage.ts | 17 + .../migration/1714099399879-alter-aka-type.ts | 36 + .../1714192520471-antenna-jsonb-to-array.ts | 118 + ...9023878-drop-unused-userprofile-columns.ts | 27 + ...714270605574-userprofile-jsonb-to-array.ts | 71 + .../1714643926317-drop-unused-indexes.ts | 65 + .../1714728200194-create-scheduled-note.ts | 39 + ...1714888400293-add-user-profile-language.ts | 13 + ...15181461692-addMastodonSubscriptionType.ts | 28 + .../1715351290096-add-back-timezone.ts | 459 + ...16462794927-remove-enum-typename-suffix.ts | 76 + .../1716804636187-refactor-scheduled-posts.ts | 81 + .../1720107645050-turn-off-cat-language.ts | 16 + .../1720618854585-create-system-actors.ts | 96 + .../1722134626110-set-access-token-name.ts | 16 + packages/backend/src/misc/api-permissions.ts | 35 + packages/backend/src/misc/app-lock.ts | 49 + packages/backend/src/misc/before-shutdown.ts | 103 + packages/backend/src/misc/cache.ts | 131 + packages/backend/src/misc/captcha.ts | 74 + packages/backend/src/misc/clone.ts | 24 + .../backend/src/misc/content-disposition.ts | 9 + .../backend/src/misc/count-same-renotes.ts | 19 + packages/backend/src/misc/create-temp.ts | 24 + packages/backend/src/misc/detect-url-mime.ts | 15 + .../backend/src/misc/download-text-file.ts | 24 + packages/backend/src/misc/download-url.ts | 111 + .../misc/extract-custom-emojis-from-mfm.ts | 10 + packages/backend/src/misc/extract-hashtags.ts | 9 + packages/backend/src/misc/extract-mentions.ts | 13 + .../backend/src/misc/fetch-proxy-account.ts | 11 + packages/backend/src/misc/fetch.ts | 207 + packages/backend/src/misc/gen-identicon.ts | 114 + packages/backend/src/misc/get-file-info.ts | 213 + packages/backend/src/misc/get-ip-hash.ts | 14 + packages/backend/src/misc/i18n.ts | 29 + .../backend/src/misc/identifiable-error.ts | 13 + .../src/misc/is-duplicate-key-value-error.ts | 4 + packages/backend/src/misc/is-filtered.ts | 36 + .../backend/src/misc/is-instance-muted.ts | 26 + packages/backend/src/misc/is-mime-image.ts | 20 + packages/backend/src/misc/is-user-related.ts | 7 + packages/backend/src/misc/keypair-store.ts | 14 + .../backend/src/misc/normalize-for-search.ts | 6 + packages/backend/src/misc/populate-emojis.ts | 189 + .../backend/src/misc/process-masto-notes.ts | 148 + packages/backend/src/misc/schema.ts | 7 + packages/backend/src/misc/search.ts | 90 + .../backend/src/misc/skipped-instances.ts | 62 + packages/backend/src/misc/truncate.ts | 17 + packages/backend/src/misc/webhook-cache.ts | 49 + .../src/models/entities/abuse-user-report.ts | 92 + .../src/models/entities/access-token.ts | 104 + packages/backend/src/models/entities/ad.ts | 65 + .../src/models/entities/announcement-read.ts | 46 + .../src/models/entities/announcement.ts | 56 + .../backend/src/models/entities/antenna.ts | 131 + packages/backend/src/models/entities/app.ts | 71 + .../models/entities/attestation-challenge.ts | 56 + .../src/models/entities/auth-session.ts | 52 + .../backend/src/models/entities/blocking.ts | 52 + .../src/models/entities/channel-following.ts | 53 + .../models/entities/channel-note-pining.ts | 45 + .../backend/src/models/entities/channel.ts | 86 + .../backend/src/models/entities/clip-note.ts | 47 + packages/backend/src/models/entities/clip.ts | 55 + .../backend/src/models/entities/drive-file.ts | 236 + .../src/models/entities/drive-folder.ts | 62 + packages/backend/src/models/entities/emoji.ts | 83 + .../src/models/entities/follow-request.ts | 102 + .../backend/src/models/entities/following.ts | 98 + .../src/models/entities/gallery-like.ts | 43 + .../src/models/entities/gallery-post.ts | 93 + .../backend/src/models/entities/hashtag.ts | 84 + .../backend/src/models/entities/instance.ts | 186 + .../src/models/entities/messaging-message.ts | 106 + packages/backend/src/models/entities/meta.ts | 519 + .../src/models/entities/moderation-log.ts | 42 + .../backend/src/models/entities/muted-note.ts | 58 + .../backend/src/models/entities/muting.ts | 58 + .../backend/src/models/entities/note-edit.ts | 62 + .../src/models/entities/note-favorite.ts | 45 + .../backend/src/models/entities/note-file.ts | 45 + .../src/models/entities/note-reaction.ts | 53 + .../src/models/entities/note-thread-muting.ts | 41 + .../src/models/entities/note-unread.ts | 73 + .../src/models/entities/note-watching.ts | 62 + packages/backend/src/models/entities/note.ts | 322 + .../src/models/entities/notification.ts | 191 + .../backend/src/models/entities/page-like.ts | 43 + packages/backend/src/models/entities/page.ts | 136 + .../models/entities/password-reset-request.ts | 40 + .../backend/src/models/entities/poll-vote.ts | 50 + packages/backend/src/models/entities/poll.ts | 83 + .../backend/src/models/entities/promo-note.ts | 38 + .../backend/src/models/entities/promo-read.ts | 45 + .../models/entities/registration-tickets.ts | 17 + .../src/models/entities/registry-item.ts | 72 + packages/backend/src/models/entities/relay.ts | 20 + .../src/models/entities/renote-muting.ts | 54 + .../src/models/entities/reply-muting.ts | 54 + .../backend/src/models/entities/signin.ts | 45 + .../src/models/entities/sw-subscription.ts | 98 + .../src/models/entities/used-username.ts | 20 + .../models/entities/user-group-invitation.ts | 52 + .../src/models/entities/user-group-joining.ts | 52 + .../backend/src/models/entities/user-group.ts | 56 + .../backend/src/models/entities/user-ip.ts | 22 + .../src/models/entities/user-keypair.ts | 42 + .../src/models/entities/user-list-joining.ts | 52 + .../backend/src/models/entities/user-list.ts | 43 + .../src/models/entities/user-note-pining.ts | 45 + .../src/models/entities/user-pending.ts | 32 + .../src/models/entities/user-profile.ts | 267 + .../src/models/entities/user-publickey.ts | 44 + .../src/models/entities/user-security-key.ts | 58 + packages/backend/src/models/entities/user.ts | 322 + .../backend/src/models/entities/webhook.ts | 94 + packages/backend/src/models/id.ts | 4 + packages/backend/src/models/index.ts | 137 + .../models/repositories/abuse-user-report.ts | 41 + .../src/models/repositories/antenna.ts | 35 + .../backend/src/models/repositories/app.ts | 45 + .../src/models/repositories/auth-session.ts | 21 + .../src/models/repositories/blocking.ts | 29 + .../src/models/repositories/channel.ts | 56 + .../backend/src/models/repositories/clip.ts | 26 + .../src/models/repositories/drive-file.ts | 254 + .../src/models/repositories/drive-folder.ts | 50 + .../backend/src/models/repositories/emoji.ts | 27 + .../src/models/repositories/follow-request.ts | 20 + .../src/models/repositories/following.ts | 90 + .../src/models/repositories/gallery-like.ts | 19 + .../src/models/repositories/gallery-post.ts | 43 + .../src/models/repositories/hashtag.ts | 21 + .../src/models/repositories/instance.ts | 43 + .../models/repositories/messaging-message.ts | 48 + .../models/repositories/moderation-logs.ts | 26 + .../backend/src/models/repositories/muting.ts | 30 + .../src/models/repositories/note-edit.ts | 44 + .../src/models/repositories/note-favorite.ts | 31 + .../src/models/repositories/note-file.ts | 4 + .../src/models/repositories/note-reaction.ts | 56 + .../backend/src/models/repositories/note.ts | 394 + .../src/models/repositories/notification.ts | 184 + .../src/models/repositories/page-like.ts | 23 + .../backend/src/models/repositories/page.ts | 99 + .../backend/src/models/repositories/relay.ts | 4 + .../src/models/repositories/renote-muting.ts | 29 + .../src/models/repositories/reply-muting.ts | 29 + .../backend/src/models/repositories/signin.ts | 8 + .../repositories/user-group-invitation.ts | 23 + .../src/models/repositories/user-group.ts | 23 + .../src/models/repositories/user-list.ts | 22 + .../src/models/repositories/user-profile.ts | 87 + .../backend/src/models/repositories/user.ts | 636 + packages/backend/src/ormconfig.ts | 15 + packages/backend/src/prelude/README.md | 3 + packages/backend/src/prelude/array.ts | 167 + packages/backend/src/prelude/await-all.ts | 45 + packages/backend/src/prelude/math.ts | 3 + packages/backend/src/prelude/maybe.ts | 20 + packages/backend/src/prelude/promise.ts | 13 + packages/backend/src/prelude/relation.ts | 5 + packages/backend/src/prelude/string.ts | 15 + packages/backend/src/prelude/symbol.ts | 1 + packages/backend/src/prelude/time.ts | 62 + .../backend/src/prelude/undefined-to-null.ts | 86 + packages/backend/src/prelude/unsafe-cast.ts | 4 + packages/backend/src/prelude/url.ts | 15 + packages/backend/src/prelude/xml.ts | 38 + packages/backend/src/queue/get-job-info.ts | 18 + packages/backend/src/queue/index.ts | 603 + packages/backend/src/queue/initialize.ts | 41 + packages/backend/src/queue/logger.ts | 3 + .../src/queue/processors/db/delete-account.ts | 100 + .../queue/processors/db/delete-drive-files.ts | 59 + .../queue/processors/db/export-blocking.ts | 107 + .../processors/db/export-custom-emojis.ts | 130 + .../queue/processors/db/export-followers.ts | 115 + .../queue/processors/db/export-following.ts | 117 + .../src/queue/processors/db/export-mute.ts | 108 + .../src/queue/processors/db/export-notes.ts | 135 + .../queue/processors/db/export-user-lists.ts | 83 + .../queue/processors/db/import-blocking.ts | 80 + .../processors/db/import-custom-emojis.ts | 179 + .../processors/db/import-firefish-post.ts | 139 + .../queue/processors/db/import-following.ts | 118 + .../queue/processors/db/import-masto-post.ts | 185 + .../src/queue/processors/db/import-muting.ts | 91 + .../src/queue/processors/db/import-posts.ts | 109 + .../queue/processors/db/import-user-lists.ts | 97 + .../backend/src/queue/processors/db/index.ts | 51 + .../src/queue/processors/db/scheduled-note.ts | 97 + .../backend/src/queue/processors/deliver.ts | 68 + .../processors/ended-poll-notification.ts | 40 + .../backend/src/queue/processors/inbox.ts | 196 + .../object-storage/clean-remote-files.ts | 53 + .../processors/object-storage/delete-file.ts | 11 + .../queue/processors/object-storage/index.ts | 19 + .../system/check-expired-mutings.ts | 35 + .../queue/processors/system/clean-charts.ts | 16 + .../src/queue/processors/system/clean.ts | 21 + .../src/queue/processors/system/index.ts | 24 + .../processors/system/local-emoji-size.ts | 42 + .../queue/processors/system/verify-links.ts | 45 + .../src/queue/processors/webhook-deliver.ts | 65 + packages/backend/src/queue/queues.ts | 41 + packages/backend/src/queue/types.ts | 97 + .../src/remote/activitypub/ap-request.ts | 153 + .../src/remote/activitypub/audience.ts | 103 + .../src/remote/activitypub/check-fetch.ts | 157 + .../src/remote/activitypub/db-resolver.ts | 217 + .../src/remote/activitypub/deliver-manager.ts | 185 + .../activitypub/kernel/accept/follow.ts | 32 + .../remote/activitypub/kernel/accept/index.ts | 28 + .../remote/activitypub/kernel/add/index.ts | 26 + .../activitypub/kernel/announce/index.ts | 21 + .../activitypub/kernel/announce/note.ts | 84 + .../remote/activitypub/kernel/block/index.ts | 29 + .../remote/activitypub/kernel/create/index.ts | 51 + .../remote/activitypub/kernel/create/note.ts | 51 + .../remote/activitypub/kernel/delete/actor.ts | 30 + .../remote/activitypub/kernel/delete/index.ts | 55 + .../remote/activitypub/kernel/delete/note.ts | 42 + .../remote/activitypub/kernel/flag/index.ts | 39 + .../src/remote/activitypub/kernel/follow.ts | 23 + .../src/remote/activitypub/kernel/index.ts | 118 + .../src/remote/activitypub/kernel/like.ts | 28 + .../remote/activitypub/kernel/move/index.ts | 69 + .../src/remote/activitypub/kernel/read.ts | 33 + .../activitypub/kernel/reject/follow.ts | 33 + .../remote/activitypub/kernel/reject/index.ts | 30 + .../remote/activitypub/kernel/remove/index.ts | 26 + .../remote/activitypub/kernel/undo/accept.ts | 29 + .../activitypub/kernel/undo/announce.ts | 22 + .../remote/activitypub/kernel/undo/block.ts | 24 + .../remote/activitypub/kernel/undo/follow.ts | 44 + .../remote/activitypub/kernel/undo/index.ts | 47 + .../remote/activitypub/kernel/undo/like.ts | 22 + .../remote/activitypub/kernel/update/index.ts | 52 + .../backend/src/remote/activitypub/logger.ts | 3 + .../src/remote/activitypub/misc/contexts.ts | 573 + .../remote/activitypub/misc/get-note-html.ts | 8 + .../remote/activitypub/misc/html-to-mfm.ts | 11 + .../remote/activitypub/misc/ld-signature.ts | 149 + .../src/remote/activitypub/models/icon.ts | 5 + .../remote/activitypub/models/identifier.ts | 5 + .../src/remote/activitypub/models/image.ts | 85 + .../src/remote/activitypub/models/mention.ts | 35 + .../src/remote/activitypub/models/note.ts | 803 + .../src/remote/activitypub/models/person.ts | 741 + .../src/remote/activitypub/models/question.ts | 101 + .../src/remote/activitypub/models/tag.ts | 25 + .../backend/src/remote/activitypub/perform.ts | 23 + .../src/remote/activitypub/renderer/accept.ts | 8 + .../src/remote/activitypub/renderer/add.ts | 9 + .../remote/activitypub/renderer/announce.ts | 37 + .../src/remote/activitypub/renderer/block.ts | 20 + .../src/remote/activitypub/renderer/create.ts | 17 + .../src/remote/activitypub/renderer/delete.ts | 9 + .../remote/activitypub/renderer/document.ts | 9 + .../src/remote/activitypub/renderer/emoji.ts | 17 + .../src/remote/activitypub/renderer/flag.ts | 17 + .../activitypub/renderer/follow-user.ts | 12 + .../src/remote/activitypub/renderer/follow.ts | 22 + .../remote/activitypub/renderer/hashtag.ts | 7 + .../src/remote/activitypub/renderer/image.ts | 9 + .../src/remote/activitypub/renderer/index.ts | 36 + .../src/remote/activitypub/renderer/key.ts | 14 + .../src/remote/activitypub/renderer/like.ts | 31 + .../remote/activitypub/renderer/mention.ts | 13 + .../src/remote/activitypub/renderer/note.ts | 193 + .../renderer/ordered-collection-page.ts | 30 + .../renderer/ordered-collection.ts | 34 + .../src/remote/activitypub/renderer/person.ts | 107 + .../remote/activitypub/renderer/question.ts | 27 + .../src/remote/activitypub/renderer/read.ts | 12 + .../src/remote/activitypub/renderer/reject.ts | 8 + .../src/remote/activitypub/renderer/remove.ts | 9 + .../remote/activitypub/renderer/tombstone.ts | 4 + .../src/remote/activitypub/renderer/undo.ts | 17 + .../src/remote/activitypub/renderer/update.ts | 15 + .../src/remote/activitypub/renderer/vote.ts | 29 + .../backend/src/remote/activitypub/request.ts | 129 + .../src/remote/activitypub/resolver.ts | 219 + .../backend/src/remote/activitypub/type.ts | 357 + packages/backend/src/remote/logger.ts | 3 + packages/backend/src/remote/resolve-user.ts | 430 + packages/backend/src/remote/webfinger.ts | 41 + packages/backend/src/server/activitypub.ts | 557 + .../src/server/activitypub/featured.ts | 67 + .../src/server/activitypub/followers.ts | 119 + .../src/server/activitypub/following.ts | 119 + .../backend/src/server/activitypub/outbox.ts | 147 + packages/backend/src/server/api/2fa.ts | 417 + .../backend/src/server/api/api-handler.ts | 128 + .../backend/src/server/api/authenticate.ts | 107 + packages/backend/src/server/api/call.ts | 209 + .../server/api/common/generate-block-query.ts | 54 + .../api/common/generate-channel-query.ts | 35 + .../api/common/generate-following-query.ts | 59 + .../server/api/common/generate-fts-query.ts | 430 + .../server/api/common/generate-list-query.ts | 25 + .../api/common/generate-muted-note-query.ts | 16 + .../generate-muted-note-thread-query.ts | 24 + .../api/common/generate-muted-user-query.ts | 69 + .../api/common/generate-replies-query.ts | 44 + .../api/common/generate-visibility-query.ts | 61 + .../common/generated-muted-renote-query.ts | 28 + .../api/common/generated-muted-reply-query.ts | 25 + .../backend/src/server/api/common/getters.ts | 72 + .../src/server/api/common/inject-featured.ts | 53 + .../src/server/api/common/inject-promo.ts | 36 + .../src/server/api/common/is-native-token.ts | 1 + .../api/common/make-pagination-query.ts | 42 + .../api/common/read-messaging-message.ts | 183 + .../server/api/common/read-notification.ts | 60 + .../backend/src/server/api/common/signin.ts | 44 + .../backend/src/server/api/common/signup.ts | 139 + .../backend/src/server/api/compatibility.ts | 20 + packages/backend/src/server/api/define.ts | 104 + packages/backend/src/server/api/endpoints.ts | 803 + .../api/endpoints/admin/abuse-user-reports.ts | 83 + .../api/endpoints/admin/accounts/create.ts | 52 + .../api/endpoints/admin/accounts/delete.ts | 58 + .../api/endpoints/admin/accounts/hosted.ts | 127 + .../server/api/endpoints/admin/ad/create.ts | 48 + .../server/api/endpoints/admin/ad/delete.ts | 34 + .../src/server/api/endpoints/admin/ad/list.ts | 32 + .../server/api/endpoints/admin/ad/update.ts | 58 + .../endpoints/admin/announcements/create.ts | 93 + .../endpoints/admin/announcements/delete.ts | 34 + .../api/endpoints/admin/announcements/list.ts | 116 + .../endpoints/admin/announcements/update.ts | 46 + .../server/api/endpoints/admin/delete-2fa.ts | 40 + .../api/endpoints/admin/delete-account.ts | 29 + .../admin/delete-all-files-of-a-user.ts | 28 + .../api/endpoints/admin/delete-passkeys.ts | 42 + .../admin/drive-capacity-override.ts | 43 + .../admin/drive/clean-remote-files.ts | 19 + .../api/endpoints/admin/drive/cleanup.ts | 27 + .../server/api/endpoints/admin/drive/files.ts | 89 + .../api/endpoints/admin/drive/show-file.ts | 225 + .../endpoints/admin/emoji/add-aliases-bulk.ts | 66 + .../server/api/endpoints/admin/emoji/add.ts | 121 + .../server/api/endpoints/admin/emoji/copy.ts | 115 + .../api/endpoints/admin/emoji/delete-bulk.ts | 55 + .../api/endpoints/admin/emoji/delete.ts | 51 + .../api/endpoints/admin/emoji/import-zip.ts | 37 + .../api/endpoints/admin/emoji/list-remote.ts | 130 + .../server/api/endpoints/admin/emoji/list.ts | 131 + .../admin/emoji/remove-aliases-bulk.ts | 61 + .../endpoints/admin/emoji/set-aliases-bulk.ts | 69 + .../admin/emoji/set-category-bulk.ts | 67 + .../endpoints/admin/emoji/set-license-bulk.ts | 67 + .../api/endpoints/admin/emoji/update.ts | 78 + .../admin/federation/delete-all-files.ts | 28 + .../refresh-remote-instance-metadata.ts | 29 + .../admin/federation/remove-all-following.ts | 37 + .../admin/federation/update-instance.ts | 34 + .../api/endpoints/admin/get-index-stats.ts | 27 + .../api/endpoints/admin/get-table-stats.ts | 49 + .../api/endpoints/admin/get-user-ips.ts | 30 + .../src/server/api/endpoints/admin/invite.ts | 52 + .../src/server/api/endpoints/admin/meta.ts | 567 + .../api/endpoints/admin/moderators/add.ts | 39 + .../api/endpoints/admin/moderators/remove.ts | 35 + .../api/endpoints/admin/promo/create.ts | 54 + .../server/api/endpoints/admin/queue/clear.ts | 22 + .../endpoints/admin/queue/deliver-delayed.ts | 57 + .../endpoints/admin/queue/inbox-delayed.ts | 57 + .../server/api/endpoints/admin/queue/stats.ts | 70 + .../server/api/endpoints/admin/relays/add.ts | 65 + .../server/api/endpoints/admin/relays/list.ts | 51 + .../api/endpoints/admin/relays/remove.ts | 21 + .../api/endpoints/admin/reset-password.ts | 64 + .../admin/resolve-abuse-user-report.ts | 48 + .../server/api/endpoints/admin/send-email.ts | 23 + .../api/endpoints/admin/send-mod-mail.ts | 68 + .../server/api/endpoints/admin/server-info.ts | 121 + .../endpoints/admin/set-emoji-moderator.ts | 38 + .../endpoints/admin/show-moderation-logs.ts | 79 + .../server/api/endpoints/admin/show-user.ts | 74 + .../server/api/endpoints/admin/show-users.ts | 150 + .../api/endpoints/admin/silence-user.ts | 44 + .../api/endpoints/admin/suspend-user.ts | 87 + .../api/endpoints/admin/unsilence-user.ts | 40 + .../api/endpoints/admin/unsuspend-user.ts | 37 + .../server/api/endpoints/admin/update-meta.ts | 588 + .../api/endpoints/admin/update-user-note.ts | 33 + .../src/server/api/endpoints/announcements.ts | 113 + .../server/api/endpoints/antennas/create.ts | 184 + .../server/api/endpoints/antennas/delete.ts | 48 + .../src/server/api/endpoints/antennas/list.ts | 36 + .../server/api/endpoints/antennas/markread.ts | 41 + .../server/api/endpoints/antennas/notes.ts | 127 + .../src/server/api/endpoints/antennas/show.ts | 48 + .../server/api/endpoints/antennas/update.ts | 176 + .../src/server/api/endpoints/ap/get.ts | 36 + .../src/server/api/endpoints/ap/show.ts | 180 + .../src/server/api/endpoints/app/create.ts | 67 + .../src/server/api/endpoints/app/show.ts | 46 + .../src/server/api/endpoints/auth/accept.ts | 75 + .../api/endpoints/auth/session/generate.ts | 75 + .../server/api/endpoints/auth/session/show.ts | 63 + .../api/endpoints/auth/session/userkey.ts | 99 + .../server/api/endpoints/blocking/create.ts | 91 + .../server/api/endpoints/blocking/delete.ts | 87 + .../src/server/api/endpoints/blocking/list.ts | 45 + .../server/api/endpoints/channels/create.ts | 70 + .../server/api/endpoints/channels/featured.ts | 37 + .../server/api/endpoints/channels/follow.ts | 49 + .../server/api/endpoints/channels/followed.ts | 59 + .../server/api/endpoints/channels/owned.ts | 45 + .../server/api/endpoints/channels/search.ts | 67 + .../src/server/api/endpoints/channels/show.ts | 45 + .../server/api/endpoints/channels/timeline.ts | 84 + .../server/api/endpoints/channels/unfollow.ts | 45 + .../server/api/endpoints/channels/update.ts | 90 + .../api/endpoints/charts/active-users.ts | 31 + .../server/api/endpoints/clips/add-note.ts | 74 + .../src/server/api/endpoints/clips/create.ts | 47 + .../src/server/api/endpoints/clips/delete.ts | 40 + .../src/server/api/endpoints/clips/list.ts | 36 + .../src/server/api/endpoints/clips/notes.ts | 94 + .../server/api/endpoints/clips/remove-note.ts | 57 + .../src/server/api/endpoints/clips/show.ts | 52 + .../src/server/api/endpoints/clips/update.ts | 62 + .../endpoints/compatibility/custom-emojis.ts | 37 + .../api/endpoints/compatibility/peers.ts | 25 + .../src/server/api/endpoints/custom-motd.ts | 33 + .../api/endpoints/custom-splash-icons.ts | 33 + .../backend/src/server/api/endpoints/drive.ts | 50 + .../src/server/api/endpoints/drive/files.ts | 72 + .../endpoints/drive/files/attached-notes.ts | 61 + .../endpoints/drive/files/caption-image.ts | 41 + .../endpoints/drive/files/check-existence.ts | 33 + .../api/endpoints/drive/files/create.ts | 131 + .../api/endpoints/drive/files/delete.ts | 55 + .../api/endpoints/drive/files/find-by-hash.ts | 41 + .../server/api/endpoints/drive/files/find.ts | 51 + .../server/api/endpoints/drive/files/show.ts | 89 + .../api/endpoints/drive/files/update.ts | 117 + .../endpoints/drive/files/upload-from-url.ts | 59 + .../src/server/api/endpoints/drive/folders.ts | 57 + .../api/endpoints/drive/folders/create.ts | 71 + .../api/endpoints/drive/folders/delete.ts | 60 + .../api/endpoints/drive/folders/find.ts | 47 + .../api/endpoints/drive/folders/show.ts | 50 + .../api/endpoints/drive/folders/update.ts | 119 + .../src/server/api/endpoints/drive/stream.ts | 59 + .../api/endpoints/email-address/available.ts | 38 + .../backend/src/server/api/endpoints/emoji.ts | 51 + .../src/server/api/endpoints/emojis.ts | 50 + .../src/server/api/endpoints/endpoint.ts | 27 + .../src/server/api/endpoints/endpoints.ts | 35 + .../api/endpoints/export-custom-emojis.ts | 22 + .../api/endpoints/federation/followers.ts | 46 + .../api/endpoints/federation/following.ts | 46 + .../api/endpoints/federation/instances.ts | 187 + .../api/endpoints/federation/show-instance.ts | 36 + .../server/api/endpoints/federation/stats.ts | 69 + .../federation/update-remote-user.ts | 22 + .../server/api/endpoints/federation/users.ts | 45 + .../src/server/api/endpoints/fetch-rss.ts | 38 + .../server/api/endpoints/following/create.ts | 107 + .../server/api/endpoints/following/delete.ts | 84 + .../api/endpoints/following/invalidate.ts | 84 + .../endpoints/following/requests/accept.ts | 50 + .../endpoints/following/requests/cancel.ts | 64 + .../api/endpoints/following/requests/list.ts | 55 + .../endpoints/following/requests/reject.ts | 41 + .../api/endpoints/following/requests/sent.ts | 55 + .../server/api/endpoints/gallery/featured.ts | 40 + .../server/api/endpoints/gallery/popular.ts | 37 + .../src/server/api/endpoints/gallery/posts.ts | 42 + .../api/endpoints/gallery/posts/create.ts | 82 + .../api/endpoints/gallery/posts/delete.ts | 40 + .../api/endpoints/gallery/posts/like.ts | 63 + .../api/endpoints/gallery/posts/show.ts | 45 + .../api/endpoints/gallery/posts/unlike.ts | 54 + .../api/endpoints/gallery/posts/update.ts | 82 + .../api/endpoints/get-online-users-count.ts | 27 + .../src/server/api/endpoints/get-sounds.ts | 30 + .../src/server/api/endpoints/hashtags/list.ts | 112 + .../server/api/endpoints/hashtags/search.ts | 45 + .../src/server/api/endpoints/hashtags/show.ts | 45 + .../server/api/endpoints/hashtags/trend.ts | 177 + .../server/api/endpoints/hashtags/users.ts | 92 + .../backend/src/server/api/endpoints/i.ts | 31 + .../src/server/api/endpoints/i/2fa/done.ts | 51 + .../server/api/endpoints/i/2fa/key-done.ts | 149 + .../api/endpoints/i/2fa/password-less.ts | 61 + .../api/endpoints/i/2fa/register-key.ts | 57 + .../server/api/endpoints/i/2fa/register.ts | 56 + .../server/api/endpoints/i/2fa/remove-key.ts | 66 + .../server/api/endpoints/i/2fa/unregister.ts | 41 + .../server/api/endpoints/i/2fa/update-key.ts | 58 + .../src/server/api/endpoints/i/apps.ts | 56 + .../server/api/endpoints/i/authorized-apps.ts | 40 + .../server/api/endpoints/i/change-password.ts | 36 + .../server/api/endpoints/i/delete-account.ts | 35 + .../server/api/endpoints/i/export-blocking.ts | 22 + .../api/endpoints/i/export-followers.ts | 25 + .../api/endpoints/i/export-following.ts | 25 + .../src/server/api/endpoints/i/export-mute.ts | 22 + .../server/api/endpoints/i/export-notes.ts | 22 + .../api/endpoints/i/export-user-lists.ts | 22 + .../src/server/api/endpoints/i/favorites.ts | 47 + .../server/api/endpoints/i/gallery/likes.ts | 60 + .../server/api/endpoints/i/gallery/posts.ts | 45 + .../endpoints/i/get-word-muted-notes-count.ts | 38 + .../server/api/endpoints/i/import-blocking.ts | 60 + .../api/endpoints/i/import-following.ts | 59 + .../server/api/endpoints/i/import-muting.ts | 60 + .../server/api/endpoints/i/import-posts.ts | 55 + .../api/endpoints/i/import-user-lists.ts | 59 + .../src/server/api/endpoints/i/known-as.ts | 108 + .../src/server/api/endpoints/i/move.ts | 160 + .../server/api/endpoints/i/notifications.ts | 187 + .../src/server/api/endpoints/i/page-likes.ts | 58 + .../src/server/api/endpoints/i/pages.ts | 45 + .../backend/src/server/api/endpoints/i/pin.ts | 63 + .../i/read-all-messaging-messages.ts | 48 + .../api/endpoints/i/read-all-unread-notes.ts | 28 + .../api/endpoints/i/read-announcement.ts | 63 + .../api/endpoints/i/regenerate-token.ts | 59 + .../api/endpoints/i/registry/get-all.ts | 40 + .../api/endpoints/i/registry/get-detail.ts | 52 + .../api/endpoints/i/registry/get-unsecure.ts | 50 + .../server/api/endpoints/i/registry/get.ts | 49 + .../endpoints/i/registry/keys-with-type.ts | 54 + .../server/api/endpoints/i/registry/keys.ts | 35 + .../server/api/endpoints/i/registry/remove.ts | 49 + .../server/api/endpoints/i/registry/scopes.ts | 32 + .../server/api/endpoints/i/registry/set.ts | 62 + .../server/api/endpoints/i/revoke-token.ts | 31 + .../server/api/endpoints/i/signin-history.ts | 31 + .../src/server/api/endpoints/i/unpin.ts | 47 + .../server/api/endpoints/i/update-email.ts | 94 + .../src/server/api/endpoints/i/update.ts | 369 + .../api/endpoints/i/user-group-invites.ts | 60 + .../server/api/endpoints/i/webhooks/create.ts | 46 + .../server/api/endpoints/i/webhooks/delete.ts | 43 + .../server/api/endpoints/i/webhooks/list.ts | 24 + .../server/api/endpoints/i/webhooks/show.ts | 40 + .../server/api/endpoints/i/webhooks/update.ts | 61 + .../server/api/endpoints/latest-version.ts | 22 + .../server/api/endpoints/messaging/history.ts | 112 + .../api/endpoints/messaging/messages.ts | 182 + .../endpoints/messaging/messages/create.ts | 164 + .../endpoints/messaging/messages/delete.ts | 48 + .../api/endpoints/messaging/messages/read.ts | 57 + .../backend/src/server/api/endpoints/meta.ts | 538 + .../server/api/endpoints/miauth/gen-token.ts | 68 + .../src/server/api/endpoints/mute/create.ts | 96 + .../src/server/api/endpoints/mute/delete.ts | 74 + .../src/server/api/endpoints/mute/list.ts | 45 + .../src/server/api/endpoints/my/apps.ts | 49 + .../backend/src/server/api/endpoints/notes.ts | 91 + .../server/api/endpoints/notes/children.ts | 63 + .../src/server/api/endpoints/notes/clips.ts | 59 + .../api/endpoints/notes/conversation.ts | 86 + .../src/server/api/endpoints/notes/create.ts | 380 + .../src/server/api/endpoints/notes/delete.ts | 57 + .../src/server/api/endpoints/notes/edit.ts | 692 + .../api/endpoints/notes/favorites/create.ts | 64 + .../api/endpoints/notes/favorites/delete.ts | 56 + .../server/api/endpoints/notes/featured.ts | 82 + .../api/endpoints/notes/global-timeline.ts | 138 + .../src/server/api/endpoints/notes/history.ts | 67 + .../api/endpoints/notes/hybrid-timeline.ts | 195 + .../api/endpoints/notes/local-timeline.ts | 170 + .../api/endpoints/notes/make-private.ts | 67 + .../server/api/endpoints/notes/mentions.ts | 110 + .../endpoints/notes/polls/recommendation.ts | 85 + .../server/api/endpoints/notes/polls/vote.ts | 179 + .../server/api/endpoints/notes/reactions.ts | 82 + .../api/endpoints/notes/reactions/create.ts | 64 + .../api/endpoints/notes/reactions/delete.ts | 54 + .../endpoints/notes/recommended-timeline.ts | 173 + .../src/server/api/endpoints/notes/renotes.ts | 117 + .../src/server/api/endpoints/notes/replies.ts | 78 + .../api/endpoints/notes/search-by-tag.ts | 165 + .../src/server/api/endpoints/notes/search.ts | 134 + .../src/server/api/endpoints/notes/show.ts | 52 + .../src/server/api/endpoints/notes/state.ts | 78 + .../endpoints/notes/thread-muting/create.ts | 60 + .../endpoints/notes/thread-muting/delete.ts | 41 + .../server/api/endpoints/notes/timeline.ts | 195 + .../server/api/endpoints/notes/translate.ts | 48 + .../server/api/endpoints/notes/unrenote.ts | 56 + .../api/endpoints/notes/user-list-timeline.ts | 175 + .../api/endpoints/notes/watching/create.ts | 38 + .../api/endpoints/notes/watching/delete.ts | 38 + .../api/endpoints/notifications/create.ts | 31 + .../notifications/mark-all-as-read.ts | 34 + .../api/endpoints/notifications/read.ts | 49 + .../src/server/api/endpoints/page-push.ts | 48 + .../src/server/api/endpoints/pages/create.ts | 125 + .../src/server/api/endpoints/pages/delete.ts | 45 + .../server/api/endpoints/pages/featured.ts | 38 + .../src/server/api/endpoints/pages/like.ts | 63 + .../src/server/api/endpoints/pages/show.ts | 75 + .../src/server/api/endpoints/pages/unlike.ts | 54 + .../src/server/api/endpoints/pages/update.ts | 134 + .../backend/src/server/api/endpoints/ping.ts | 32 + .../src/server/api/endpoints/pinned-users.ts | 49 + .../src/server/api/endpoints/promo/read.ts | 53 + .../api/endpoints/recommended-instances.ts | 35 + .../api/endpoints/renote-mute/create.ts | 70 + .../api/endpoints/renote-mute/delete.ts | 63 + .../server/api/endpoints/renote-mute/list.ts | 46 + .../server/api/endpoints/reply-mute/create.ts | 70 + .../server/api/endpoints/reply-mute/delete.ts | 63 + .../server/api/endpoints/reply-mute/list.ts | 46 + .../api/endpoints/request-reset-password.ts | 75 + .../server/api/endpoints/reset-password.ts | 42 + .../src/server/api/endpoints/server-info.ts | 53 + .../backend/src/server/api/endpoints/stats.ts | 85 + .../src/server/api/endpoints/sw/register.ts | 98 + .../api/endpoints/sw/show-registration.ts | 59 + .../src/server/api/endpoints/sw/unregister.ts | 25 + .../api/endpoints/sw/update-registration.ts | 44 + .../backend/src/server/api/endpoints/test.ts | 25 + .../api/endpoints/username/available.ts | 51 + .../backend/src/server/api/endpoints/users.ts | 134 + .../src/server/api/endpoints/users/clips.ts | 47 + .../server/api/endpoints/users/followers.ts | 127 + .../server/api/endpoints/users/following.ts | 126 + .../api/endpoints/users/gallery/posts.ts | 45 + .../users/get-frequently-replied-users.ts | 124 + .../api/endpoints/users/groups/create.ts | 51 + .../api/endpoints/users/groups/delete.ts | 42 + .../users/groups/invitations/accept.ts | 58 + .../users/groups/invitations/reject.ts | 47 + .../api/endpoints/users/groups/invite.ts | 110 + .../api/endpoints/users/groups/joined.ts | 48 + .../api/endpoints/users/groups/leave.ts | 53 + .../api/endpoints/users/groups/owned.ts | 38 + .../server/api/endpoints/users/groups/pull.ts | 73 + .../server/api/endpoints/users/groups/show.ts | 58 + .../api/endpoints/users/groups/transfer.ts | 85 + .../api/endpoints/users/groups/update.ts | 55 + .../api/endpoints/users/lists/create.ts | 41 + .../api/endpoints/users/lists/delete-all.ts | 35 + .../api/endpoints/users/lists/delete.ts | 42 + .../server/api/endpoints/users/lists/list.ts | 38 + .../server/api/endpoints/users/lists/pull.ts | 58 + .../server/api/endpoints/users/lists/push.ts | 93 + .../server/api/endpoints/users/lists/show.ts | 50 + .../api/endpoints/users/lists/update.ts | 55 + .../src/server/api/endpoints/users/notes.ts | 144 + .../src/server/api/endpoints/users/pages.ts | 48 + .../server/api/endpoints/users/reactions.ts | 76 + .../api/endpoints/users/recommendation.ts | 68 + .../server/api/endpoints/users/relation.ts | 161 + .../api/endpoints/users/report-abuse.ts | 108 + .../users/search-by-username-and-host.ts | 140 + .../src/server/api/endpoints/users/search.ts | 152 + .../src/server/api/endpoints/users/show.ts | 159 + .../src/server/api/endpoints/users/stats.ts | 225 + packages/backend/src/server/api/error.ts | 36 + packages/backend/src/server/api/index.ts | 145 + packages/backend/src/server/api/limiter.ts | 88 + packages/backend/src/server/api/logger.ts | 3 + .../api/mastodon/converters/announcement.ts | 55 + .../server/api/mastodon/converters/emoji.ts | 13 + .../server/api/mastodon/converters/file.ts | 54 + .../server/api/mastodon/converters/mention.ts | 28 + .../src/server/api/mastodon/converters/mfm.ts | 9 + .../server/api/mastodon/converters/note.ts | 669 + .../api/mastodon/converters/notification.ts | 290 + .../server/api/mastodon/converters/poll.ts | 58 + .../server/api/mastodon/converters/user.ts | 237 + .../api/mastodon/converters/visibility.ts | 37 + .../server/api/mastodon/endpoints/account.ts | 284 + .../src/server/api/mastodon/endpoints/auth.ts | 31 + .../server/api/mastodon/endpoints/filter.ts | 23 + .../src/server/api/mastodon/endpoints/list.ts | 116 + .../server/api/mastodon/endpoints/media.ts | 34 + .../src/server/api/mastodon/endpoints/misc.ts | 70 + .../api/mastodon/endpoints/notifications.ts | 107 + .../server/api/mastodon/endpoints/search.ts | 43 + .../server/api/mastodon/endpoints/status.ts | 378 + .../api/mastodon/endpoints/streaming.ts | 7 + .../server/api/mastodon/endpoints/timeline.ts | 188 + .../server/api/mastodon/entities/account.ts | 40 + .../server/api/mastodon/entities/activity.ts | 8 + .../api/mastodon/entities/announcement.ts | 34 + .../api/mastodon/entities/application.ts | 7 + .../api/mastodon/entities/async_attachment.ts | 14 + .../api/mastodon/entities/attachment.ts | 49 + .../src/server/api/mastodon/entities/card.ts | 22 + .../server/api/mastodon/entities/context.ts | 8 + .../api/mastodon/entities/conversation.ts | 11 + .../src/server/api/mastodon/entities/emoji.ts | 9 + .../api/mastodon/entities/featured_tag.ts | 8 + .../src/server/api/mastodon/entities/field.ts | 7 + .../src/server/api/mastodon/entities/files.ts | 5 + .../server/api/mastodon/entities/filter.ts | 18 + .../api/mastodon/entities/filter_keyword.ts | 7 + .../api/mastodon/entities/filter_result.ts | 7 + .../api/mastodon/entities/filter_status.ts | 6 + .../server/api/mastodon/entities/history.ts | 7 + .../api/mastodon/entities/identity_proof.ts | 9 + .../server/api/mastodon/entities/instance.ts | 109 + .../src/server/api/mastodon/entities/list.ts | 7 + .../server/api/mastodon/entities/marker.ts | 15 + .../server/api/mastodon/entities/mention.ts | 8 + .../api/mastodon/entities/notification.ts | 25 + .../api/mastodon/entities/oauth/oauth.ts | 89 + .../src/server/api/mastodon/entities/poll.ts | 15 + .../api/mastodon/entities/poll_option.ts | 6 + .../api/mastodon/entities/preferences.ts | 9 + .../mastodon/entities/push_subscription.ts | 27 + .../server/api/mastodon/entities/reaction.ts | 12 + .../api/mastodon/entities/relationship.ts | 17 + .../server/api/mastodon/entities/report.ts | 9 + .../server/api/mastodon/entities/results.ts | 11 + .../api/mastodon/entities/scheduled_status.ts | 10 + .../server/api/mastodon/entities/source.ts | 10 + .../src/server/api/mastodon/entities/stats.ts | 7 + .../server/api/mastodon/entities/status.ts | 93 + .../api/mastodon/entities/status_edit.ts | 22 + .../api/mastodon/entities/status_params.ts | 20 + .../api/mastodon/entities/status_source.ts | 8 + .../src/server/api/mastodon/entities/tag.ts | 10 + .../src/server/api/mastodon/entities/token.ts | 8 + .../src/server/api/mastodon/entities/urls.ts | 5 + .../backend/src/server/api/mastodon/entity.ts | 38 + .../src/server/api/mastodon/helpers/auth.ts | 335 + .../src/server/api/mastodon/helpers/list.ts | 238 + .../src/server/api/mastodon/helpers/media.ts | 115 + .../src/server/api/mastodon/helpers/mfm.ts | 246 + .../src/server/api/mastodon/helpers/misc.ts | 409 + .../src/server/api/mastodon/helpers/note.ts | 827 + .../api/mastodon/helpers/notification.ts | 294 + .../server/api/mastodon/helpers/pagination.ts | 68 + .../src/server/api/mastodon/helpers/poll.ts | 151 + .../src/server/api/mastodon/helpers/search.ts | 305 + .../server/api/mastodon/helpers/timeline.ts | 384 + .../src/server/api/mastodon/helpers/user.ts | 763 + .../backend/src/server/api/mastodon/index.ts | 63 + .../server/api/mastodon/middleware/auth.ts | 84 + .../server/api/mastodon/middleware/cache.ts | 10 + .../api/mastodon/middleware/catch-errors.ts | 55 + .../api/mastodon/middleware/filter-context.ts | 11 + .../api/mastodon/middleware/koa-body.ts | 17 + .../mastodon/middleware/normalize-query.ts | 15 + .../api/mastodon/middleware/pagination.ts | 43 + .../api/mastodon/middleware/set-headers.ts | 14 + .../server/api/mastodon/streaming/channel.ts | 52 + .../api/mastodon/streaming/channels/direct.ts | 80 + .../api/mastodon/streaming/channels/list.ts | 103 + .../api/mastodon/streaming/channels/public.ts | 97 + .../api/mastodon/streaming/channels/tag.ts | 93 + .../api/mastodon/streaming/channels/user.ts | 144 + .../server/api/mastodon/streaming/index.ts | 294 + .../backend/src/server/api/openapi/errors.ts | 70 + .../src/server/api/openapi/gen-spec.ts | 226 + .../backend/src/server/api/openapi/schemas.ts | 66 + .../backend/src/server/api/private/signin.ts | 278 + .../src/server/api/private/signup-pending.ts | 38 + .../backend/src/server/api/private/signup.ts | 128 + .../src/server/api/private/verify-email.ts | 38 + .../backend/src/server/api/stream/channel.ts | 103 + .../src/server/api/stream/channels/admin.ts | 14 + .../src/server/api/stream/channels/antenna.ts | 64 + .../src/server/api/stream/channels/channel.ts | 85 + .../src/server/api/stream/channels/drive.ts | 14 + .../api/stream/channels/global-timeline.ts | 91 + .../src/server/api/stream/channels/hashtag.ts | 53 + .../api/stream/channels/home-timeline.ts | 89 + .../api/stream/channels/hybrid-timeline.ts | 105 + .../src/server/api/stream/channels/index.ts | 35 + .../api/stream/channels/local-timeline.ts | 83 + .../src/server/api/stream/channels/main.ts | 46 + .../api/stream/channels/messaging-index.ts | 14 + .../server/api/stream/channels/messaging.ts | 130 + .../server/api/stream/channels/queue-stats.ts | 42 + .../stream/channels/recommended-timeline.ts | 103 + .../api/stream/channels/server-stats.ts | 42 + .../server/api/stream/channels/user-list.ts | 82 + .../backend/src/server/api/stream/index.ts | 472 + .../backend/src/server/api/stream/types.ts | 293 + packages/backend/src/server/api/streaming.ts | 118 + .../src/server/file/assets/bad-egg.png | Bin 0 -> 1676 bytes .../src/server/file/assets/cache-expired.png | Bin 0 -> 6048 bytes .../backend/src/server/file/assets/dummy.png | Bin 0 -> 6285 bytes .../src/server/file/assets/not-an-image.png | Bin 0 -> 2780 bytes .../file/assets/thumbnail-not-available.png | Bin 0 -> 5705 bytes .../src/server/file/assets/tombstone.png | Bin 0 -> 5028 bytes .../src/server/file/byte-range-readable.ts | 221 + packages/backend/src/server/file/index.ts | 43 + .../src/server/file/send-drive-file.ts | 225 + packages/backend/src/server/index.ts | 193 + packages/backend/src/server/nodeinfo.ts | 33 + packages/backend/src/server/proxy/index.ts | 29 + .../backend/src/server/proxy/proxy-media.ts | 145 + packages/backend/src/server/web/bios.css | 147 + packages/backend/src/server/web/bios.js | 89 + packages/backend/src/server/web/boot.js | 333 + packages/backend/src/server/web/cli.css | 92 + packages/backend/src/server/web/cli.js | 72 + packages/backend/src/server/web/feed.ts | 190 + packages/backend/src/server/web/index.ts | 752 + packages/backend/src/server/web/manifest.ts | 88 + packages/backend/src/server/web/style.css | 137 + .../backend/src/server/web/url-preview.ts | 89 + .../backend/src/server/web/views/base.pug | 85 + .../backend/src/server/web/views/bios.pug | 21 + .../backend/src/server/web/views/channel.pug | 20 + packages/backend/src/server/web/views/cli.pug | 23 + .../backend/src/server/web/views/clip.pug | 39 + .../backend/src/server/web/views/flush.pug | 72 + .../src/server/web/views/gallery-post.pug | 39 + .../backend/src/server/web/views/note.pug | 59 + .../backend/src/server/web/views/page.pug | 37 + .../backend/src/server/web/views/user.pug | 46 + packages/backend/src/server/well-known.ts | 175 + .../backend/src/services/blocking/create.ts | 169 + .../backend/src/services/blocking/delete.ts | 38 + .../src/services/chart/charts/active-users.ts | 49 + .../chart/charts/entities/active-users.ts | 17 + packages/backend/src/services/chart/core.ts | 860 + .../backend/src/services/chart/entities.ts | 3 + packages/backend/src/services/chart/index.ts | 7 + .../src/services/create-notification.ts | 134 + .../backend/src/services/delete-account.ts | 23 + .../backend/src/services/drive/add-file.ts | 681 + .../backend/src/services/drive/delete-file.ts | 95 + .../drive/generate-video-thumbnail.ts | 28 + .../src/services/drive/image-processor.ts | 44 + .../src/services/drive/internal-storage.ts | 40 + packages/backend/src/services/drive/logger.ts | 3 + packages/backend/src/services/drive/s3.ts | 34 + .../src/services/drive/upload-from-url.ts | 99 + .../src/services/fetch-instance-metadata.ts | 279 + packages/backend/src/services/fetch-rel-me.ts | 39 + .../backend/src/services/following/create.ts | 282 + .../backend/src/services/following/delete.ts | 110 + .../backend/src/services/following/reject.ts | 138 + .../services/following/requests/accept-all.ts | 24 + .../src/services/following/requests/accept.ts | 48 + .../src/services/following/requests/cancel.ts | 50 + .../src/services/following/requests/create.ts | 93 + packages/backend/src/services/i/pin.ts | 128 + packages/backend/src/services/i/update.ts | 106 + .../src/services/insert-moderation-log.ts | 18 + packages/backend/src/services/logger.ts | 228 + .../backend/src/services/messages/create.ts | 198 + .../backend/src/services/messages/delete.ts | 49 + packages/backend/src/services/note/create.ts | 935 ++ packages/backend/src/services/note/delete.ts | 228 + packages/backend/src/services/note/edit.ts | 246 + .../backend/src/services/note/polls/update.ts | 23 + .../backend/src/services/note/polls/vote.ts | 87 + .../src/services/note/reaction/create.ts | 176 + .../src/services/note/reaction/delete.ts | 69 + packages/backend/src/services/note/read.ts | 118 + packages/backend/src/services/note/unread.ts | 58 + .../register-or-fetch-instance-doc.ts | 45 + packages/backend/src/services/relay.ts | 106 + .../src/services/send-email-notification.ts | 36 + packages/backend/src/services/send-email.ts | 75 + packages/backend/src/services/suspend-user.ts | 47 + .../backend/src/services/unsuspend-user.ts | 45 + .../backend/src/services/update-hashtag.ts | 153 + packages/backend/src/services/user-cache.ts | 70 + .../backend/src/services/user-list/push.ts | 26 + .../services/validate-email-for-account.ts | 45 + packages/backend/src/types.ts | 26 + packages/backend/tsconfig.json | 33 + packages/client/.prettierrc | 15 + packages/client/.vscode/settings.json | 15 + packages/client/@types/global.d.ts | 11 + packages/client/@types/theme.d.ts | 7 + packages/client/@types/vue.d.ts | 7 + packages/client/@types/window.d.ts | 6 + packages/client/assets/about-icon.png | Bin 0 -> 126736 bytes packages/client/assets/dummy.png | Bin 0 -> 14059 bytes packages/client/assets/dummy_original.png | Bin 0 -> 69675 bytes packages/client/assets/label-red.svg | 1 + packages/client/assets/label.svg | 1 + packages/client/assets/misskey.svg | 1 + packages/client/assets/prismjs/components | 1 + packages/client/assets/tagcanvas.min.js | 2554 +++ packages/client/package.json | 94 + packages/client/src/account.ts | 320 + packages/client/src/cold-store.ts | 121 + .../client/src/components/MkAbuseReport.vue | 149 + .../src/components/MkAbuseReportWindow.vue | 87 + .../src/components/MkActiveUsersHeatmap.vue | 204 + .../client/src/components/MkAnalogClock.vue | 275 + .../client/src/components/MkAnnouncement.vue | 92 + .../client/src/components/MkAutocomplete.vue | 560 + packages/client/src/components/MkAvatars.vue | 45 + packages/client/src/components/MkButton.vue | 266 + packages/client/src/components/MkCaptcha.vue | 138 + .../src/components/MkChannelFollowButton.vue | 137 + .../client/src/components/MkChannelList.vue | 45 + .../src/components/MkChannelPreview.vue | 177 + packages/client/src/components/MkChart.vue | 461 + .../client/src/components/MkChartTooltip.vue | 67 + .../client/src/components/MkChatPreview.vue | 187 + .../src/components/MkCheatSheetDialog.vue | 37 + .../client/src/components/MkCode.core.vue | 46 + packages/client/src/components/MkCode.vue | 17 + .../client/src/components/MkContainer.vue | 308 + .../client/src/components/MkContextMenu.vue | 92 + .../client/src/components/MkCropperDialog.vue | 197 + packages/client/src/components/MkCwButton.vue | 121 + .../src/components/MkDateSeparatedList.vue | 170 + packages/client/src/components/MkDialog.vue | 462 + .../client/src/components/MkDigitalClock.vue | 88 + packages/client/src/components/MkDonation.vue | 193 + .../client/src/components/MkDrive.file.vue | 389 + .../client/src/components/MkDrive.folder.vue | 349 + .../src/components/MkDrive.navFolder.vue | 127 + packages/client/src/components/MkDrive.vue | 912 ++ .../src/components/MkDriveFileThumbnail.vue | 109 + .../src/components/MkDriveSelectDialog.vue | 78 + .../client/src/components/MkDriveWindow.vue | 29 + .../src/components/MkEmojiPicker.section.vue | 89 + .../client/src/components/MkEmojiPicker.vue | 711 + .../src/components/MkEmojiPickerDialog.vue | 90 + .../src/components/MkFeaturedPhotos.vue | 26 + .../src/components/MkFileListForAdmin.vue | 141 + .../client/src/components/MkFileTypeIcon.vue | 18 + packages/client/src/components/MkFolder.vue | 183 + .../client/src/components/MkFollowButton.vue | 279 + .../src/components/MkForgotPassword.vue | 113 + .../client/src/components/MkFormDialog.vue | 235 + packages/client/src/components/MkFormula.vue | 25 + .../client/src/components/MkFormulaCore.vue | 34 + .../src/components/MkGalleryPostPreview.vue | 137 + .../client/src/components/MkImageViewer.vue | 93 + .../src/components/MkImgWithBlurhash.vue | 130 + packages/client/src/components/MkInfo.vue | 90 + .../src/components/MkInstanceCardMini.vue | 150 + .../src/components/MkInstanceSelectDialog.vue | 185 + .../client/src/components/MkInstanceStats.vue | 240 + .../src/components/MkInstanceTicker.vue | 129 + packages/client/src/components/MkKeyValue.vue | 69 + .../client/src/components/MkLaunchPad.vue | 197 + packages/client/src/components/MkLink.vue | 64 + .../src/components/MkManyAnnouncements.vue | 56 + packages/client/src/components/MkMarquee.vue | 106 + packages/client/src/components/MkMedia.vue | 297 + .../client/src/components/MkMediaBanner.vue | 140 + .../client/src/components/MkMediaCaption.vue | 301 + .../client/src/components/MkMediaList.vue | 343 + packages/client/src/components/MkMention.vue | 99 + .../client/src/components/MkMenu.child.vue | 85 + packages/client/src/components/MkMenu.vue | 557 + .../client/src/components/MkMiniChart.vue | 75 + .../client/src/components/MkModPlayer.vue | 510 + packages/client/src/components/MkModal.vue | 630 + .../src/components/MkModalPageWindow.vue | 226 + .../client/src/components/MkModalWindow.vue | 181 + packages/client/src/components/MkMoved.vue | 33 + packages/client/src/components/MkNote.vue | 620 + .../client/src/components/MkNoteDetailed.vue | 659 + .../client/src/components/MkNotePreview.vue | 99 + .../client/src/components/MkNoteSimple.vue | 100 + packages/client/src/components/MkNoteSub.vue | 632 + packages/client/src/components/MkNotes.vue | 119 + .../client/src/components/MkNotification.vue | 549 + .../src/components/MkNotificationFolded.vue | 264 + .../MkNotificationSettingWindow.vue | 106 + .../src/components/MkNotificationToast.vue | 81 + .../client/src/components/MkNotifications.vue | 186 + packages/client/src/components/MkNumber.vue | 27 + .../client/src/components/MkNumberDiff.vue | 48 + .../src/components/MkObjectView.value.vue | 190 + .../client/src/components/MkObjectView.vue | 13 + .../client/src/components/MkPagePreview.vue | 172 + .../client/src/components/MkPageWindow.vue | 163 + .../client/src/components/MkPagination.vue | 563 + packages/client/src/components/MkPoll.vue | 213 + .../client/src/components/MkPollEditor.vue | 257 + .../client/src/components/MkPopupMenu.vue | 62 + packages/client/src/components/MkPostForm.vue | 1805 +++ .../src/components/MkPostFormAttaches.vue | 217 + .../src/components/MkPostFormDialog.vue | 68 + .../client/src/components/MkPostSearch.vue | 250 + .../client/src/components/MkPullToRefresh.vue | 284 + .../MkPushNotificationAllowButton.vue | 209 + packages/client/src/components/MkQrCode.vue | 80 + .../client/src/components/MkQuoteButton.vue | 108 + .../client/src/components/MkReactedUsers.vue | 104 + .../client/src/components/MkReactionIcon.vue | 19 + .../src/components/MkReactionTooltip.vue | 53 + .../components/MkReactionsViewer.details.vue | 99 + .../components/MkReactionsViewer.reaction.vue | 173 + .../src/components/MkReactionsViewer.vue | 76 + .../client/src/components/MkRemoteCaution.vue | 35 + .../client/src/components/MkRenoteButton.vue | 290 + packages/client/src/components/MkRipple.vue | 136 + packages/client/src/components/MkSample.vue | 130 + .../client/src/components/MkSearchBar.vue | 63 + .../src/components/MkShowMoreButton.vue | 77 + packages/client/src/components/MkSignin.vue | 364 + .../client/src/components/MkSigninDialog.vue | 49 + packages/client/src/components/MkSignup.vue | 535 + .../client/src/components/MkSignupDialog.vue | 53 + .../src/components/MkSimpleTextWindow.vue | 49 + packages/client/src/components/MkSparkle.vue | 143 + .../client/src/components/MkStarButton.vue | 75 + .../src/components/MkStarButtonNoEmoji.vue | 118 + .../client/src/components/MkSuperMenu.vue | 178 + packages/client/src/components/MkTab.vue | 152 + packages/client/src/components/MkTagCloud.vue | 112 + packages/client/src/components/MkTimeline.vue | 396 + packages/client/src/components/MkToast.vue | 78 + .../src/components/MkTokenGenerateWindow.vue | 111 + packages/client/src/components/MkTooltip.vue | 117 + .../src/components/MkTutorialDialog.vue | 330 + packages/client/src/components/MkUpdated.vue | 59 + .../client/src/components/MkUrlPreview.vue | 314 + .../src/components/MkUrlPreviewPopup.vue | 54 + .../client/src/components/MkUserCardMini.vue | 151 + packages/client/src/components/MkUserInfo.vue | 331 + packages/client/src/components/MkUserList.vue | 53 + .../src/components/MkUserOnlineIndicator.vue | 49 + .../client/src/components/MkUserPreview.vue | 96 + .../src/components/MkUserSelectDialog.vue | 227 + .../components/MkUserSelectLocalDialog.vue | 222 + .../client/src/components/MkUsersTooltip.vue | 59 + .../client/src/components/MkVisibility.vue | 89 + .../src/components/MkVisibilityPicker.vue | 261 + .../client/src/components/MkWaitingDialog.vue | 98 + packages/client/src/components/MkWidgets.vue | 230 + packages/client/src/components/MkWindow.vue | 683 + .../client/src/components/form/checkbox.vue | 148 + .../client/src/components/form/folder.vue | 93 + packages/client/src/components/form/input.vue | 297 + packages/client/src/components/form/link.vue | 101 + packages/client/src/components/form/radio.vue | 135 + .../client/src/components/form/radios.vue | 124 + packages/client/src/components/form/range.vue | 234 + .../client/src/components/form/section.vue | 43 + .../client/src/components/form/select.vue | 326 + packages/client/src/components/form/slot.vue | 41 + packages/client/src/components/form/split.vue | 30 + .../client/src/components/form/suspense.vue | 119 + .../client/src/components/form/switch.vue | 135 + .../client/src/components/form/textarea.vue | 285 + packages/client/src/components/global/MkA.vue | 122 + .../client/src/components/global/MkAcct.vue | 32 + .../client/src/components/global/MkAd.vue | 224 + .../client/src/components/global/MkAvatar.vue | 307 + .../src/components/global/MkEllipsis.vue | 36 + .../client/src/components/global/MkEmoji.vue | 94 + .../client/src/components/global/MkError.vue | 47 + .../src/components/global/MkLoading.vue | 130 + .../global/MkMisskeyFlavoredMarkdown.vue | 374 + .../src/components/global/MkPageHeader.vue | 591 + .../client/src/components/global/MkSpacer.vue | 87 + .../components/global/MkStickyContainer.vue | 82 + .../client/src/components/global/MkTime.vue | 142 + .../client/src/components/global/MkUrl.vue | 117 + .../src/components/global/MkUserName.vue | 29 + .../src/components/global/RouterView.vue | 71 + packages/client/src/components/global/i18n.ts | 51 + packages/client/src/components/index.ts | 61 + packages/client/src/components/mfm.ts | 610 + .../src/components/note/MkNoteContent.vue | 445 + .../src/components/note/MkNoteFooter.vue | 295 + .../src/components/note/MkNoteFooterInfo.vue | 44 + .../src/components/note/MkNoteHeader.vue | 187 + .../src/components/note/MkNoteHeaderInfo.vue | 104 + .../src/components/note/MkNoteMedia.vue | 291 + .../src/components/note/MkNoteMediaList.vue | 24 + .../src/components/note/MkNoteTranslation.vue | 110 + .../src/components/note/MkRenoteBar.vue | 165 + .../client/src/components/page/page.block.vue | 65 + .../src/components/page/page.button.vue | 71 + .../src/components/page/page.canvas.vue | 49 + .../src/components/page/page.counter.vue | 57 + .../client/src/components/page/page.if.vue | 38 + .../client/src/components/page/page.image.vue | 35 + .../client/src/components/page/page.note.vue | 55 + .../src/components/page/page.number-input.vue | 60 + .../client/src/components/page/page.post.vue | 119 + .../src/components/page/page.radio-button.vue | 52 + .../src/components/page/page.section.vue | 66 + .../src/components/page/page.switch.vue | 59 + .../src/components/page/page.text-input.vue | 60 + .../client/src/components/page/page.text.vue | 68 + .../components/page/page.textarea-input.vue | 49 + .../src/components/page/page.textarea.vue | 28 + packages/client/src/components/page/page.vue | 101 + packages/client/src/config.ts | 19 + packages/client/src/const.ts | 113 + .../client/src/directives/adaptive-border.ts | 29 + packages/client/src/directives/anim.ts | 18 + packages/client/src/directives/appear.ts | 22 + packages/client/src/directives/click-anime.ts | 31 + packages/client/src/directives/focus.ts | 3 + .../client/src/directives/follow-append.ts | 39 + packages/client/src/directives/get-size.ts | 57 + packages/client/src/directives/hotkey.ts | 24 + packages/client/src/directives/index.ts | 32 + packages/client/src/directives/panel.ts | 31 + packages/client/src/directives/ripple.ts | 19 + packages/client/src/directives/size.ts | 122 + packages/client/src/directives/tooltip.ts | 122 + .../client/src/directives/user-preview.ts | 124 + packages/client/src/directives/vibrate.ts | 11 + packages/client/src/events.ts | 4 + packages/client/src/filters/bytes.ts | 13 + packages/client/src/filters/note.ts | 16 + packages/client/src/filters/number.ts | 1 + packages/client/src/filters/user.ts | 13 + packages/client/src/i18n.ts | 37 + packages/client/src/init.ts | 540 + packages/client/src/instance.ts | 112 + packages/client/src/me.ts | 14 + packages/client/src/navbar.ts | 140 + packages/client/src/nirax.ts | 295 + packages/client/src/os.ts | 1047 ++ packages/client/src/pages/_empty_.vue | 3 + packages/client/src/pages/_error_.vue | 110 + packages/client/src/pages/_loading_.vue | 3 + packages/client/src/pages/about-firefish.vue | 211 + packages/client/src/pages/about.emojis.vue | 161 + .../client/src/pages/about.federation.vue | 172 + packages/client/src/pages/about.vue | 345 + packages/client/src/pages/admin-file.vue | 295 + packages/client/src/pages/admin/_header_.vue | 330 + packages/client/src/pages/admin/abuses.vue | 142 + .../client/src/pages/admin/announcements.vue | 158 + .../client/src/pages/admin/bot-protection.vue | 124 + .../client/src/pages/admin/custom-css.vue | 51 + packages/client/src/pages/admin/database.vue | 59 + .../client/src/pages/admin/email-settings.vue | 178 + .../src/pages/admin/emoji-edit-dialog.vue | 124 + packages/client/src/pages/admin/emojis.vue | 536 + .../client/src/pages/admin/experiments.vue | 77 + .../client/src/pages/admin/federation.vue | 34 + packages/client/src/pages/admin/files.vue | 146 + packages/client/src/pages/admin/hashtags.vue | 63 + packages/client/src/pages/admin/index.vue | 459 + .../client/src/pages/admin/instance-block.vue | 87 + .../client/src/pages/admin/object-storage.vue | 230 + .../client/src/pages/admin/other-settings.vue | 50 + .../src/pages/admin/overview.active-users.vue | 171 + .../src/pages/admin/overview.federation.vue | 166 + .../src/pages/admin/overview.heatmap.vue | 15 + .../src/pages/admin/overview.instances.vue | 62 + .../src/pages/admin/overview.metrics.vue | 116 + .../src/pages/admin/overview.moderators.vue | 67 + .../client/src/pages/admin/overview.pie.vue | 83 + .../src/pages/admin/overview.queue-chart.vue | 213 + .../src/pages/admin/overview.queue.chart.vue | 145 + .../client/src/pages/admin/overview.queue.vue | 138 + .../client/src/pages/admin/overview.stats.vue | 201 + .../client/src/pages/admin/overview.user.vue | 74 + .../client/src/pages/admin/overview.users.vue | 66 + packages/client/src/pages/admin/overview.vue | 176 + .../client/src/pages/admin/promotions.vue | 160 + .../client/src/pages/admin/proxy-account.vue | 95 + .../src/pages/admin/queue.chart.chart.vue | 189 + .../client/src/pages/admin/queue.chart.vue | 175 + packages/client/src/pages/admin/queue.vue | 55 + packages/client/src/pages/admin/relays.vue | 133 + packages/client/src/pages/admin/security.vue | 210 + packages/client/src/pages/admin/settings.vue | 682 + packages/client/src/pages/admin/users.vue | 250 + packages/client/src/pages/announcements.vue | 118 + .../client/src/pages/antenna-timeline.vue | 105 + packages/client/src/pages/api-console.vue | 122 + packages/client/src/pages/attached-files.vue | 39 + packages/client/src/pages/auth.form.vue | 67 + packages/client/src/pages/auth.vue | 135 + .../src/pages/authorize_interaction.vue | 38 + packages/client/src/pages/channel-editor.vue | 169 + packages/client/src/pages/channel.vue | 260 + packages/client/src/pages/channels.vue | 234 + packages/client/src/pages/clip.vue | 160 + packages/client/src/pages/drive.vue | 27 + packages/client/src/pages/emojis.emoji.vue | 90 + .../client/src/pages/explore.featured.vue | 43 + packages/client/src/pages/explore.users.vue | 263 + packages/client/src/pages/explore.vue | 97 + packages/client/src/pages/favorites.vue | 67 + packages/client/src/pages/follow-me.vue | 78 + .../client/src/pages/follow-requests-sent.vue | 163 + packages/client/src/pages/follow-requests.vue | 206 + packages/client/src/pages/follow.vue | 60 + packages/client/src/pages/gallery/edit.vue | 202 + packages/client/src/pages/gallery/index.vue | 223 + packages/client/src/pages/gallery/post.vue | 359 + packages/client/src/pages/instance-info.vue | 473 + packages/client/src/pages/messaging/index.vue | 296 + .../pages/messaging/messaging-room.form.vue | 414 + .../messaging/messaging-room.message.vue | 382 + .../src/pages/messaging/messaging-room.vue | 478 + packages/client/src/pages/mfm-cheat-sheet.vue | 568 + packages/client/src/pages/miauth.vue | 158 + .../client/src/pages/my-antennas/create.vue | 43 + .../client/src/pages/my-antennas/edit.vue | 42 + .../client/src/pages/my-antennas/editor.vue | 254 + .../client/src/pages/my-antennas/index.vue | 153 + packages/client/src/pages/my-clips/index.vue | 115 + packages/client/src/pages/my-groups/group.vue | 203 + packages/client/src/pages/my-groups/index.vue | 137 + packages/client/src/pages/my-lists/index.vue | 121 + packages/client/src/pages/my-lists/list.vue | 199 + packages/client/src/pages/no-graze.vue | 39 + packages/client/src/pages/not-found.vue | 23 + packages/client/src/pages/note-history.vue | 142 + packages/client/src/pages/note.vue | 237 + packages/client/src/pages/notifications.vue | 192 + packages/client/src/pages/oauth.vue | 278 + .../page-editor/els/page-editor.el.button.vue | 130 + .../page-editor/els/page-editor.el.canvas.vue | 51 + .../els/page-editor.el.counter.vue | 47 + .../page-editor/els/page-editor.el.if.vue | 90 + .../page-editor/els/page-editor.el.image.vue | 72 + .../page-editor/els/page-editor.el.note.vue | 85 + .../els/page-editor.el.number-input.vue | 47 + .../page-editor/els/page-editor.el.post.vue | 48 + .../els/page-editor.el.radio-button.vue | 67 + .../els/page-editor.el.section.vue | 80 + .../page-editor/els/page-editor.el.switch.vue | 53 + .../els/page-editor.el.text-input.vue | 46 + .../page-editor/els/page-editor.el.text.vue | 50 + .../els/page-editor.el.textarea-input.vue | 47 + .../els/page-editor.el.textarea.vue | 50 + .../pages/page-editor/page-editor.blocks.vue | 105 + .../page-editor/page-editor.container.vue | 184 + .../page-editor/page-editor.script-block.vue | 390 + .../src/pages/page-editor/page-editor.vue | 642 + packages/client/src/pages/page.vue | 468 + packages/client/src/pages/pages.vue | 196 + packages/client/src/pages/preview.vue | 26 + packages/client/src/pages/registry.keys.vue | 110 + packages/client/src/pages/registry.value.vue | 135 + packages/client/src/pages/registry.vue | 83 + packages/client/src/pages/reset-password.vue | 76 + packages/client/src/pages/scratchpad.vue | 160 + packages/client/src/pages/search.vue | 163 + .../src/pages/settings/2fa.qrdialog.vue | 100 + packages/client/src/pages/settings/2fa.vue | 291 + .../src/pages/settings/accessibility.vue | 195 + .../src/pages/settings/account-info.vue | 201 + .../client/src/pages/settings/accounts.vue | 184 + packages/client/src/pages/settings/api.vue | 59 + packages/client/src/pages/settings/apps.vue | 110 + .../client/src/pages/settings/custom-css.vue | 49 + .../src/pages/settings/custom-katex-macro.vue | 67 + packages/client/src/pages/settings/deck.vue | 39 + .../src/pages/settings/delete-account.vue | 62 + packages/client/src/pages/settings/drive.vue | 140 + packages/client/src/pages/settings/email.vue | 155 + .../client/src/pages/settings/general.vue | 513 + .../src/pages/settings/import-export.vue | 320 + packages/client/src/pages/settings/index.vue | 365 + .../src/pages/settings/instance-mute.vue | 62 + .../client/src/pages/settings/migration.vue | 117 + .../client/src/pages/settings/mute-block.vue | 70 + packages/client/src/pages/settings/navbar.vue | 186 + .../src/pages/settings/notifications.vue | 130 + packages/client/src/pages/settings/other.vue | 33 + .../src/pages/settings/plugin.install.vue | 173 + packages/client/src/pages/settings/plugin.vue | 122 + .../pages/settings/preferences-backups.vue | 548 + .../client/src/pages/settings/privacy.vue | 212 + .../client/src/pages/settings/profile.vue | 319 + .../client/src/pages/settings/reaction.vue | 259 + .../client/src/pages/settings/security.vue | 177 + packages/client/src/pages/settings/sounds.vue | 124 + .../pages/settings/statusbar.statusbar.vue | 208 + .../client/src/pages/settings/statusbar.vue | 49 + .../src/pages/settings/theme.install.vue | 94 + .../src/pages/settings/theme.manage.vue | 110 + packages/client/src/pages/settings/theme.vue | 522 + .../src/pages/settings/webhook.edit.vue | 112 + .../client/src/pages/settings/webhook.new.vue | 100 + .../client/src/pages/settings/webhook.vue | 70 + .../client/src/pages/settings/word-mute.vue | 256 + packages/client/src/pages/share.vue | 204 + packages/client/src/pages/signup-complete.vue | 34 + packages/client/src/pages/tag.vue | 121 + packages/client/src/pages/theme-editor.vue | 411 + packages/client/src/pages/timeline.vue | 344 + packages/client/src/pages/user-info.vue | 746 + .../client/src/pages/user-list-timeline.vue | 101 + packages/client/src/pages/user/clips.vue | 59 + .../client/src/pages/user/follow-list.vue | 61 + packages/client/src/pages/user/followers.vue | 72 + packages/client/src/pages/user/following.vue | 74 + packages/client/src/pages/user/gallery.vue | 45 + packages/client/src/pages/user/home.vue | 864 + .../client/src/pages/user/index.photos.vue | 122 + .../client/src/pages/user/index.timeline.vue | 44 + packages/client/src/pages/user/index.vue | 159 + packages/client/src/pages/user/media-list.vue | 50 + packages/client/src/pages/user/pages.vue | 31 + packages/client/src/pages/user/reactions.vue | 71 + packages/client/src/pages/verify-email.vue | 36 + .../client/src/pages/welcome.entrance.a.vue | 395 + .../client/src/pages/welcome.entrance.b.vue | 302 + .../client/src/pages/welcome.entrance.c.vue | 360 + packages/client/src/pages/welcome.setup.vue | 118 + .../client/src/pages/welcome.timeline.vue | 111 + packages/client/src/pages/welcome.vue | 28 + packages/client/src/pizzax.ts | 255 + packages/client/src/plugin.ts | 235 + packages/client/src/router.ts | 759 + packages/client/src/scripts/2fa.ts | 26 + packages/client/src/scripts/aiscript/api.ts | 62 + packages/client/src/scripts/array.ts | 152 + packages/client/src/scripts/autocomplete.ts | 292 + packages/client/src/scripts/chart-vline.ts | 24 + .../client/src/scripts/check-word-mute.ts | 134 + packages/client/src/scripts/chiptune2.ts | 372 + packages/client/src/scripts/clone.ts | 24 + .../client/src/scripts/collect-page-vars.ts | 50 + packages/client/src/scripts/color.ts | 7 + packages/client/src/scripts/consts.ts | 6 + packages/client/src/scripts/contains.ts | 9 + .../client/src/scripts/copy-to-clipboard.ts | 49 + packages/client/src/scripts/device-kind.ts | 15 + packages/client/src/scripts/emojilist.ts | 58 + .../extract-avg-color-from-blurhash.ts | 16 + .../client/src/scripts/extract-mentions.ts | 16 + packages/client/src/scripts/extract-mfm.ts | 23 + .../src/scripts/extract-url-from-mfm.ts | 26 + packages/client/src/scripts/focus.ts | 29 + packages/client/src/scripts/fold.ts | 193 + packages/client/src/scripts/form.ts | 11 + .../client/src/scripts/format-time-string.ts | 81 + .../client/src/scripts/get-account-from-id.ts | 7 + packages/client/src/scripts/get-note-menu.ts | 576 + .../client/src/scripts/get-note-summary.ts | 57 + .../src/scripts/get-static-image-url.ts | 16 + packages/client/src/scripts/get-user-menu.ts | 455 + packages/client/src/scripts/get-user-name.ts | 6 + packages/client/src/scripts/helpMenu.ts | 105 + packages/client/src/scripts/hotkey.ts | 104 + packages/client/src/scripts/hpml/block.ts | 128 + packages/client/src/scripts/hpml/evaluator.ts | 260 + packages/client/src/scripts/hpml/expr.ts | 88 + packages/client/src/scripts/hpml/index.ts | 150 + packages/client/src/scripts/hpml/lib.ts | 556 + .../client/src/scripts/hpml/type-checker.ts | 198 + packages/client/src/scripts/icon.ts | 5 + packages/client/src/scripts/idb-proxy.ts | 32 + packages/client/src/scripts/init-chart.ts | 58 + packages/client/src/scripts/initialize-sw.ts | 13 + packages/client/src/scripts/intl-const.ts | 12 + .../client/src/scripts/is-device-darkmode.ts | 3 + packages/client/src/scripts/katex-macro.ts | 315 + packages/client/src/scripts/keycode.ts | 35 + packages/client/src/scripts/langmap.ts | 131 + packages/client/src/scripts/language-utils.ts | 54 + packages/client/src/scripts/login-id.ts | 11 + packages/client/src/scripts/lookup-file.ts | 27 + .../client/src/scripts/lookup-instance.ts | 25 + packages/client/src/scripts/lookup-user.ts | 36 + packages/client/src/scripts/media-proxy.ts | 18 + packages/client/src/scripts/mfm-tags.ts | 25 + packages/client/src/scripts/note.ts | 20 + packages/client/src/scripts/page-metadata.ts | 51 + packages/client/src/scripts/physics.ts | 165 + packages/client/src/scripts/please-login.ts | 28 + packages/client/src/scripts/popout.ts | 32 + packages/client/src/scripts/popup-position.ts | 168 + packages/client/src/scripts/preprocess.ts | 27 + packages/client/src/scripts/prism.ts | 27 + .../client/src/scripts/reaction-picker.ts | 52 + packages/client/src/scripts/reduced-motion.ts | 3 + .../client/src/scripts/safe-uri-decode.ts | 7 + packages/client/src/scripts/scroll.ts | 103 + packages/client/src/scripts/search.ts | 101 + packages/client/src/scripts/select-file.ts | 141 + .../client/src/scripts/share-available.ts | 6 + .../src/scripts/show-note-context-menu.ts | 89 + packages/client/src/scripts/shuffle.ts | 22 + packages/client/src/scripts/sound.ts | 62 + packages/client/src/scripts/theme-editor.ts | 115 + packages/client/src/scripts/theme.ts | 172 + packages/client/src/scripts/time.ts | 62 + packages/client/src/scripts/timezones.ts | 62 + packages/client/src/scripts/touch.ts | 23 + packages/client/src/scripts/twemoji-base.ts | 16 + packages/client/src/scripts/unison-reload.ts | 15 + packages/client/src/scripts/upload.ts | 164 + packages/client/src/scripts/url.ts | 15 + .../client/src/scripts/use-chart-tooltip.ts | 71 + packages/client/src/scripts/use-interval.ts | 28 + .../client/src/scripts/use-leave-guard.ts | 47 + .../client/src/scripts/use-note-capture.ts | 193 + packages/client/src/scripts/use-tooltip.ts | 95 + packages/client/src/scripts/vibrate.ts | 6 + packages/client/src/store.ts | 477 + packages/client/src/stream.ts | 47 + packages/client/src/style.scss | 1001 ++ packages/client/src/theme-store.ts | 46 + packages/client/src/themes/_dark.json5 | 100 + packages/client/src/themes/_light.json5 | 100 + packages/client/src/themes/d-astro.json5 | 78 + packages/client/src/themes/d-botanical.json5 | 26 + .../src/themes/d-catppuccin-frappe.json5 | 94 + .../src/themes/d-catppuccin-mocha.json5 | 94 + packages/client/src/themes/d-cherry.json5 | 20 + packages/client/src/themes/d-dark.json5 | 26 + packages/client/src/themes/d-future.json5 | 27 + packages/client/src/themes/d-green-lime.json5 | 24 + .../client/src/themes/d-green-orange.json5 | 24 + packages/client/src/themes/d-gruvbox.json5 | 30 + packages/client/src/themes/d-ice.json5 | 13 + packages/client/src/themes/d-nord.json5 | 94 + packages/client/src/themes/d-persimmon.json5 | 25 + packages/client/src/themes/d-rosepine.json5 | 86 + .../client/src/themes/d-rosepinemoon.json5 | 86 + packages/client/src/themes/d-u0.json5 | 87 + packages/client/src/themes/l-apricot.json5 | 22 + .../src/themes/l-catppuccin-latte.json5 | 94 + packages/client/src/themes/l-cherry.json5 | 21 + packages/client/src/themes/l-coffee.json5 | 21 + packages/client/src/themes/l-gruvbox.json5 | 30 + packages/client/src/themes/l-light.json5 | 20 + packages/client/src/themes/l-nord.json5 | 94 + packages/client/src/themes/l-rainy.json5 | 21 + .../client/src/themes/l-rosepinedawn.json5 | 89 + packages/client/src/themes/l-sushi.json5 | 18 + packages/client/src/themes/l-u0.json5 | 87 + packages/client/src/themes/l-vivid.json5 | 82 + packages/client/src/types/form.ts | 138 + packages/client/src/types/menu.ts | 95 + packages/client/src/types/note.ts | 30 + packages/client/src/types/notification.ts | 37 + packages/client/src/types/page.ts | 78 + packages/client/src/types/post-form.ts | 12 + packages/client/src/types/relation.ts | 5 + packages/client/src/ui/_common_/common.vue | 130 + .../src/ui/_common_/navbar-for-mobile.vue | 399 + packages/client/src/ui/_common_/navbar.vue | 656 + .../src/ui/_common_/statusbar-federation.vue | 130 + .../client/src/ui/_common_/statusbar-rss.vue | 104 + .../src/ui/_common_/statusbar-user-list.vue | 128 + .../client/src/ui/_common_/statusbars.vue | 126 + .../src/ui/_common_/stream-indicator.vue | 73 + packages/client/src/ui/_common_/sw-inject.ts | 33 + packages/client/src/ui/_common_/upload.vue | 168 + packages/client/src/ui/deck.vue | 614 + .../client/src/ui/deck/antenna-column.vue | 87 + .../client/src/ui/deck/channel-column.vue | 76 + packages/client/src/ui/deck/column-core.vue | 80 + packages/client/src/ui/deck/column.vue | 472 + packages/client/src/ui/deck/deck-store.ts | 338 + packages/client/src/ui/deck/direct-column.vue | 41 + packages/client/src/ui/deck/list-column.vue | 76 + packages/client/src/ui/deck/main-column.vue | 92 + .../client/src/ui/deck/mentions-column.vue | 35 + .../src/ui/deck/notifications-column.vue | 63 + packages/client/src/ui/deck/tl-column.vue | 170 + .../client/src/ui/deck/widgets-column.vue | 101 + packages/client/src/ui/universal.vue | 838 + packages/client/src/ui/universal.widgets.vue | 114 + packages/client/src/ui/visitor.vue | 19 + packages/client/src/ui/visitor/a.vue | 291 + packages/client/src/ui/visitor/b.vue | 282 + packages/client/src/ui/visitor/header.vue | 299 + packages/client/src/ui/visitor/kanban.vue | 317 + packages/client/src/ui/zen.vue | 40 + packages/client/src/widgets/aiscript.vue | 202 + packages/client/src/widgets/button.vue | 106 + packages/client/src/widgets/calendar.vue | 243 + packages/client/src/widgets/clock.vue | 294 + packages/client/src/widgets/digital-clock.vue | 123 + packages/client/src/widgets/federation.vue | 182 + packages/client/src/widgets/index.ts | 118 + .../client/src/widgets/instance-cloud.vue | 98 + packages/client/src/widgets/job-queue.vue | 286 + packages/client/src/widgets/memo.vue | 129 + packages/client/src/widgets/notifications.vue | 101 + packages/client/src/widgets/online-users.vue | 94 + packages/client/src/widgets/photos.vue | 140 + packages/client/src/widgets/post-form.vue | 41 + packages/client/src/widgets/rss-ticker.vue | 174 + packages/client/src/widgets/rss.vue | 119 + packages/client/src/widgets/server-info.vue | 107 + .../src/widgets/server-metric/cpu-mem.vue | 194 + .../client/src/widgets/server-metric/cpu.vue | 66 + .../client/src/widgets/server-metric/disk.vue | 64 + .../src/widgets/server-metric/index.vue | 121 + .../client/src/widgets/server-metric/mem.vue | 73 + .../client/src/widgets/server-metric/pie.vue | 64 + packages/client/src/widgets/slideshow.vue | 173 + packages/client/src/widgets/timeline.vue | 201 + packages/client/src/widgets/trends.vue | 144 + packages/client/src/widgets/unix-clock.vue | 131 + packages/client/src/widgets/user-list.vue | 123 + packages/client/src/widgets/widget.ts | 79 + packages/client/tsconfig.json | 34 + packages/client/vite.config.ts | 93 + packages/client/vite.json5.ts | 49 + packages/firefish-js/.gitignore | 113 + packages/firefish-js/LICENSE | 21 + packages/firefish-js/README.md | 9 + packages/firefish-js/jest.config.ts | 195 + packages/firefish-js/package.json | 42 + packages/firefish-js/src/acct.ts | 14 + packages/firefish-js/src/api.ts | 135 + packages/firefish-js/src/api.types.ts | 1129 ++ packages/firefish-js/src/consts.ts | 174 + packages/firefish-js/src/entities.ts | 641 + packages/firefish-js/src/index.ts | 41 + packages/firefish-js/src/misc/langmap.ts | 382 + packages/firefish-js/src/misc/schema.ts | 241 + .../src/schema/abuse-user-report.ts | 69 + packages/firefish-js/src/schema/antenna.ts | 118 + packages/firefish-js/src/schema/app.ts | 40 + packages/firefish-js/src/schema/blocking.ts | 30 + packages/firefish-js/src/schema/channel.ts | 73 + packages/firefish-js/src/schema/clip.ts | 45 + packages/firefish-js/src/schema/drive-file.ts | 133 + .../firefish-js/src/schema/drive-folder.ts | 46 + packages/firefish-js/src/schema/emoji.ts | 59 + .../src/schema/federation-instance.ts | 136 + packages/firefish-js/src/schema/following.ts | 42 + .../firefish-js/src/schema/gallery-post.ts | 93 + packages/firefish-js/src/schema/hashtag.ts | 41 + .../src/schema/messaging-message.ts | 87 + packages/firefish-js/src/schema/muting.ts | 36 + packages/firefish-js/src/schema/note-edit.ts | 65 + .../firefish-js/src/schema/note-favorite.ts | 30 + packages/firefish-js/src/schema/note-file.ts | 24 + .../firefish-js/src/schema/note-reaction.ts | 29 + packages/firefish-js/src/schema/note.ts | 218 + .../firefish-js/src/schema/notification.ts | 79 + packages/firefish-js/src/schema/page.ts | 66 + packages/firefish-js/src/schema/queue.ts | 30 + .../firefish-js/src/schema/renote-muting.ts | 30 + .../firefish-js/src/schema/reply-muting.ts | 30 + packages/firefish-js/src/schema/user-group.ts | 40 + packages/firefish-js/src/schema/user-list.ts | 34 + packages/firefish-js/src/schema/user.ts | 603 + packages/firefish-js/src/streaming.ts | 397 + packages/firefish-js/src/streaming.types.ts | 206 + packages/firefish-js/src/type-utils.ts | 9 + packages/firefish-js/test-d/api.ts | 48 + packages/firefish-js/test-d/streaming.ts | 32 + packages/firefish-js/test/api.test.ts | 222 + packages/firefish-js/test/streaming.test.ts | 181 + packages/firefish-js/tsconfig.json | 20 + packages/macro-rs/LICENSE-APACHE | 201 + packages/macro-rs/LICENSE-MIT | 21 + packages/macro-rs/macros-impl/Cargo.toml | 13 + packages/macro-rs/macros-impl/src/error.rs | 75 + packages/macro-rs/macros-impl/src/lib.rs | 5 + packages/macro-rs/macros-impl/src/napi.rs | 457 + packages/macro-rs/macros-impl/src/util/mod.rs | 3 + .../macro-rs/macros-impl/src/util/tester.rs | 122 + packages/macro-rs/macros/Cargo.toml | 22 + packages/macro-rs/macros/src/helper.rs | 91 + packages/macro-rs/macros/src/lib.rs | 113 + packages/sw/package.json | 18 + packages/sw/src/@types/global.d.ts | 8 + .../sw/src/scripts/create-notification.ts | 363 + .../sw/src/scripts/get-account-from-id.ts | 12 + packages/sw/src/scripts/get-user-name.ts | 6 + packages/sw/src/scripts/i18n.ts | 34 + packages/sw/src/scripts/lang.ts | 45 + packages/sw/src/scripts/login-id.ts | 5 + packages/sw/src/scripts/notification-read.ts | 62 + packages/sw/src/scripts/operations.ts | 120 + packages/sw/src/scripts/twemoji-base.ts | 8 + packages/sw/src/sw.ts | 281 + packages/sw/src/types.ts | 52 + packages/sw/tsconfig.json | 32 + packages/sw/vite.config.ts | 53 + pnpm-lock.yaml | 13277 ++++++++++++++++ pnpm-workspace.yaml | 6 + renovate.json | 31 + scripts/clean-built.mjs | 29 + scripts/clean-npm.mjs | 42 + scripts/copy-assets.mjs | 40 + scripts/copy-index-dev.mjs | 27 + scripts/copy-index.mjs | 16 + scripts/dev.mjs | 46 + title.svg | 39 + 2161 files changed, 286465 insertions(+) create mode 100644 .config/LICENSE create mode 100644 .config/ci.yml create mode 100644 .config/devenv.yml create mode 100644 .config/docker_ci.env create mode 100644 .config/docker_example.env create mode 100644 .config/example.yml create mode 100644 .config/helm_values_example.yml create mode 100644 .dockerignore create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .gitlab-ci.yml create mode 100644 .gitlab/issue_templates/default.md create mode 100644 .gitlab/issue_templates/discussion.md create mode 100644 .gitlab/issue_templates/feature.md create mode 100644 .gitlab/issue_templates/refactor.md create mode 100644 .gitlab/merge_request_templates/default.md create mode 100644 .gitlab/merge_request_templates/release.md create mode 100644 .vscode/extensions.json create mode 100644 .vscode/launch.json create mode 100644 .weblate create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 COPYING create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 README.md create mode 100644 SECURITY.md create mode 100644 animated.svg create mode 100644 biome.json create mode 100644 ci/.gitignore create mode 100644 ci/cargo/config.toml create mode 100644 custom/LICENSE create mode 100644 custom/assets/badges/error.webp create mode 100644 custom/assets/badges/info.webp create mode 100644 custom/assets/badges/not-found.webp create mode 100644 custom/assets/instance.css create mode 100644 custom/assets/robots.txt create mode 100644 custom/locales/.gitkeep create mode 100644 dev/config.example.env create mode 100644 dev/container/docker-compose.yml create mode 100755 dev/container/docker-entrypoint.sh create mode 100644 dev/db-container/Makefile create mode 100644 dev/db-container/docker-compose.yml create mode 100644 dev/db-container/install.sql create mode 100644 dev/docs/container.md create mode 100644 dev/docs/db-container.md create mode 100644 dev/docs/local-installation.md create mode 100644 docker-compose.example.yml create mode 100644 docs/activitypub-extensions.md create mode 100644 docs/api-change.md create mode 100644 docs/api-doc.md create mode 100644 docs/changelog.md create mode 100644 docs/downgrade.md create mode 100644 docs/downgrade.sql create mode 100644 docs/firefish.nginx.conf create mode 100644 docs/install-container.md create mode 100644 docs/install.md create mode 100644 docs/notice-for-admins.md create mode 100644 docs/upgrade.md create mode 100644 locales/ar-SA.yml create mode 100644 locales/bg-BG.yml create mode 100644 locales/bn-BD.yml create mode 100644 locales/ca-ES.yml create mode 100644 locales/cs-CZ.yml create mode 100644 locales/da-DK.yml create mode 100644 locales/de-DE.yml create mode 100644 locales/el-GR.yml create mode 100644 locales/en-US.yml create mode 100644 locales/eo.yml create mode 100644 locales/es-ES.yml create mode 100644 locales/fi.yml create mode 100644 locales/fr-FR.yml create mode 100644 locales/gl.yml create mode 100644 locales/hi.yml create mode 100644 locales/hu.yml create mode 100644 locales/id-ID.yml create mode 100644 locales/index.d.ts create mode 100644 locales/index.mjs create mode 100644 locales/it-IT.yml create mode 100644 locales/ja-JP.yml create mode 100644 locales/ja-KS.yml create mode 100644 locales/kab.yml create mode 100644 locales/kn-IN.yml create mode 100644 locales/ko-KR.yml create mode 100644 locales/nl-NL.yml create mode 100644 locales/no-NO.yml create mode 100644 locales/pl-PL.yml create mode 100644 locales/pt-BR.yml create mode 100644 locales/pt-PT.yml create mode 100644 locales/ro-RO.yml create mode 100644 locales/ru-RU.yml create mode 100644 locales/sk-SK.yml create mode 100644 locales/sv-SE.yml create mode 100644 locales/th-TH.yml create mode 100644 locales/tr-TR.yml create mode 100644 locales/ug-CN.yml create mode 100644 locales/uk-UA.yml create mode 100644 locales/vi-VN.yml create mode 100644 locales/zh-CN.yml create mode 100644 locales/zh-TW.yml create mode 100644 package.json create mode 100644 packages/README.md create mode 100644 packages/backend-rs/.gitignore create mode 100644 packages/backend-rs/Cargo.toml create mode 100644 packages/backend-rs/Makefile create mode 100644 packages/backend-rs/README.md create mode 100644 packages/backend-rs/build.rs create mode 100644 packages/backend-rs/index.d.ts create mode 100644 packages/backend-rs/index.js create mode 100644 packages/backend-rs/package.json create mode 100644 packages/backend-rs/src/config/meta.rs create mode 100644 packages/backend-rs/src/config/mod.rs create mode 100644 packages/backend-rs/src/config/server.rs create mode 100644 packages/backend-rs/src/database/cache.rs create mode 100644 packages/backend-rs/src/database/mod.rs create mode 100644 packages/backend-rs/src/database/postgresql.rs create mode 100644 packages/backend-rs/src/database/redis.rs create mode 100644 packages/backend-rs/src/federation/acct.rs create mode 100644 packages/backend-rs/src/federation/activitypub/mod.rs create mode 100644 packages/backend-rs/src/federation/activitypub/object/mod.rs create mode 100644 packages/backend-rs/src/federation/activitypub/object/relay.rs create mode 100644 packages/backend-rs/src/federation/internal_actor/instance.rs create mode 100644 packages/backend-rs/src/federation/internal_actor/mod.rs create mode 100644 packages/backend-rs/src/federation/internal_actor/relay.rs create mode 100644 packages/backend-rs/src/federation/mod.rs create mode 100644 packages/backend-rs/src/federation/nodeinfo/fetch.rs create mode 100644 packages/backend-rs/src/federation/nodeinfo/generate.rs create mode 100644 packages/backend-rs/src/federation/nodeinfo/mod.rs create mode 100644 packages/backend-rs/src/federation/nodeinfo/schema.rs create mode 100644 packages/backend-rs/src/init/greet.rs create mode 100644 packages/backend-rs/src/init/log.rs create mode 100644 packages/backend-rs/src/init/mod.rs create mode 100644 packages/backend-rs/src/init/system_info.rs create mode 100644 packages/backend-rs/src/lib.rs create mode 100644 packages/backend-rs/src/misc/check_server_block.rs create mode 100644 packages/backend-rs/src/misc/check_word_mute.rs create mode 100644 packages/backend-rs/src/misc/convert_host.rs create mode 100644 packages/backend-rs/src/misc/emoji.rs create mode 100644 packages/backend-rs/src/misc/escape_sql.rs create mode 100644 packages/backend-rs/src/misc/format_milliseconds.rs create mode 100644 packages/backend-rs/src/misc/get_image_size.rs create mode 100644 packages/backend-rs/src/misc/is_quote.rs create mode 100644 packages/backend-rs/src/misc/is_safe_url.rs create mode 100644 packages/backend-rs/src/misc/latest_version.rs create mode 100644 packages/backend-rs/src/misc/mod.rs create mode 100644 packages/backend-rs/src/misc/note/elaborate.rs create mode 100644 packages/backend-rs/src/misc/note/mod.rs create mode 100644 packages/backend-rs/src/misc/note/summarize.rs create mode 100644 packages/backend-rs/src/misc/nyaify.rs create mode 100644 packages/backend-rs/src/misc/password.rs create mode 100644 packages/backend-rs/src/misc/reaction.rs create mode 100644 packages/backend-rs/src/misc/remove_old_attestation_challenges.rs create mode 100644 packages/backend-rs/src/misc/should_nyaify.rs create mode 100644 packages/backend-rs/src/misc/system_info.rs create mode 100644 packages/backend-rs/src/misc/translate.rs create mode 100644 packages/backend-rs/src/misc/user/count.rs create mode 100644 packages/backend-rs/src/misc/user/mod.rs create mode 100644 packages/backend-rs/src/model/entity/abuse_user_report.rs create mode 100644 packages/backend-rs/src/model/entity/access_token.rs create mode 100644 packages/backend-rs/src/model/entity/ad.rs create mode 100644 packages/backend-rs/src/model/entity/announcement.rs create mode 100644 packages/backend-rs/src/model/entity/announcement_read.rs create mode 100644 packages/backend-rs/src/model/entity/antenna.rs create mode 100644 packages/backend-rs/src/model/entity/app.rs create mode 100644 packages/backend-rs/src/model/entity/attestation_challenge.rs create mode 100644 packages/backend-rs/src/model/entity/auth_session.rs create mode 100644 packages/backend-rs/src/model/entity/blocking.rs create mode 100644 packages/backend-rs/src/model/entity/channel.rs create mode 100644 packages/backend-rs/src/model/entity/channel_following.rs create mode 100644 packages/backend-rs/src/model/entity/channel_note_pining.rs create mode 100644 packages/backend-rs/src/model/entity/clip.rs create mode 100644 packages/backend-rs/src/model/entity/clip_note.rs create mode 100644 packages/backend-rs/src/model/entity/drive_file.rs create mode 100644 packages/backend-rs/src/model/entity/drive_folder.rs create mode 100644 packages/backend-rs/src/model/entity/emoji.rs create mode 100644 packages/backend-rs/src/model/entity/follow_request.rs create mode 100644 packages/backend-rs/src/model/entity/following.rs create mode 100644 packages/backend-rs/src/model/entity/gallery_like.rs create mode 100644 packages/backend-rs/src/model/entity/gallery_post.rs create mode 100644 packages/backend-rs/src/model/entity/hashtag.rs create mode 100644 packages/backend-rs/src/model/entity/instance.rs create mode 100644 packages/backend-rs/src/model/entity/messaging_message.rs create mode 100644 packages/backend-rs/src/model/entity/meta.rs create mode 100644 packages/backend-rs/src/model/entity/migrations.rs create mode 100644 packages/backend-rs/src/model/entity/mod.rs create mode 100644 packages/backend-rs/src/model/entity/moderation_log.rs create mode 100644 packages/backend-rs/src/model/entity/muted_note.rs create mode 100644 packages/backend-rs/src/model/entity/muting.rs create mode 100644 packages/backend-rs/src/model/entity/note.rs create mode 100644 packages/backend-rs/src/model/entity/note_edit.rs create mode 100644 packages/backend-rs/src/model/entity/note_favorite.rs create mode 100644 packages/backend-rs/src/model/entity/note_file.rs create mode 100644 packages/backend-rs/src/model/entity/note_reaction.rs create mode 100644 packages/backend-rs/src/model/entity/note_thread_muting.rs create mode 100644 packages/backend-rs/src/model/entity/note_unread.rs create mode 100644 packages/backend-rs/src/model/entity/note_watching.rs create mode 100644 packages/backend-rs/src/model/entity/notification.rs create mode 100644 packages/backend-rs/src/model/entity/page.rs create mode 100644 packages/backend-rs/src/model/entity/page_like.rs create mode 100644 packages/backend-rs/src/model/entity/password_reset_request.rs create mode 100644 packages/backend-rs/src/model/entity/poll.rs create mode 100644 packages/backend-rs/src/model/entity/poll_vote.rs create mode 100644 packages/backend-rs/src/model/entity/prelude.rs create mode 100644 packages/backend-rs/src/model/entity/promo_note.rs create mode 100644 packages/backend-rs/src/model/entity/promo_read.rs create mode 100644 packages/backend-rs/src/model/entity/registration_ticket.rs create mode 100644 packages/backend-rs/src/model/entity/registry_item.rs create mode 100644 packages/backend-rs/src/model/entity/relay.rs create mode 100644 packages/backend-rs/src/model/entity/renote_muting.rs create mode 100644 packages/backend-rs/src/model/entity/reply_muting.rs create mode 100644 packages/backend-rs/src/model/entity/sea_orm_active_enums.rs create mode 100644 packages/backend-rs/src/model/entity/signin.rs create mode 100644 packages/backend-rs/src/model/entity/sw_subscription.rs create mode 100644 packages/backend-rs/src/model/entity/used_username.rs create mode 100644 packages/backend-rs/src/model/entity/user.rs create mode 100644 packages/backend-rs/src/model/entity/user_group.rs create mode 100644 packages/backend-rs/src/model/entity/user_group_invitation.rs create mode 100644 packages/backend-rs/src/model/entity/user_group_invite.rs create mode 100644 packages/backend-rs/src/model/entity/user_group_joining.rs create mode 100644 packages/backend-rs/src/model/entity/user_ip.rs create mode 100644 packages/backend-rs/src/model/entity/user_keypair.rs create mode 100644 packages/backend-rs/src/model/entity/user_list.rs create mode 100644 packages/backend-rs/src/model/entity/user_list_joining.rs create mode 100644 packages/backend-rs/src/model/entity/user_note_pining.rs create mode 100644 packages/backend-rs/src/model/entity/user_pending.rs create mode 100644 packages/backend-rs/src/model/entity/user_profile.rs create mode 100644 packages/backend-rs/src/model/entity/user_publickey.rs create mode 100644 packages/backend-rs/src/model/entity/user_security_key.rs create mode 100644 packages/backend-rs/src/model/entity/webhook.rs create mode 100644 packages/backend-rs/src/model/mod.rs create mode 100644 packages/backend-rs/src/service/antenna/cache.rs create mode 100644 packages/backend-rs/src/service/antenna/check_hit.rs create mode 100644 packages/backend-rs/src/service/antenna/mod.rs create mode 100644 packages/backend-rs/src/service/antenna/process_new_note.rs create mode 100644 packages/backend-rs/src/service/antenna/update.rs create mode 100644 packages/backend-rs/src/service/mod.rs create mode 100644 packages/backend-rs/src/service/note/mod.rs create mode 100644 packages/backend-rs/src/service/note/watch.rs create mode 100644 packages/backend-rs/src/service/push_notification.rs create mode 100644 packages/backend-rs/src/service/stream.rs create mode 100644 packages/backend-rs/src/service/stream/antenna.rs create mode 100644 packages/backend-rs/src/service/stream/channel.rs create mode 100644 packages/backend-rs/src/service/stream/chat.rs create mode 100644 packages/backend-rs/src/service/stream/chat_index.rs create mode 100644 packages/backend-rs/src/service/stream/custom_emoji.rs create mode 100644 packages/backend-rs/src/service/stream/drive.rs create mode 100644 packages/backend-rs/src/service/stream/group_chat.rs create mode 100644 packages/backend-rs/src/service/stream/internal.rs create mode 100644 packages/backend-rs/src/service/stream/main.rs create mode 100644 packages/backend-rs/src/service/stream/moderation.rs create mode 100644 packages/backend-rs/src/service/stream/note.rs create mode 100644 packages/backend-rs/src/service/stream/note_edit.rs create mode 100644 packages/backend-rs/src/service/stream/notes.rs create mode 100644 packages/backend-rs/src/service/stream/user.rs create mode 100644 packages/backend-rs/src/util/error_chain.rs create mode 100644 packages/backend-rs/src/util/http_client.rs create mode 100644 packages/backend-rs/src/util/id.rs create mode 100644 packages/backend-rs/src/util/mod.rs create mode 100644 packages/backend-rs/src/util/random.rs create mode 100644 packages/backend/.idea/.gitignore create mode 100644 packages/backend/.vscode/settings.json create mode 100644 packages/backend/assets/LICENSE create mode 100644 packages/backend/assets/api-doc.png create mode 100644 packages/backend/assets/apple-touch-icon.png create mode 100644 packages/backend/assets/avatar.png create mode 100644 packages/backend/assets/badges/error.webp create mode 100644 packages/backend/assets/badges/info.webp create mode 100644 packages/backend/assets/badges/not-found.webp create mode 100644 packages/backend/assets/favicon.ico create mode 100644 packages/backend/assets/favicon.png create mode 100644 packages/backend/assets/favicon.svg create mode 100644 packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-700.woff2 create mode 100644 packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-700italic.woff2 create mode 100644 packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-italic.woff2 create mode 100644 packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-regular.woff2 create mode 100644 packages/backend/assets/icons/192.png create mode 100644 packages/backend/assets/icons/512.png create mode 100644 packages/backend/assets/icons/maskable.png create mode 100644 packages/backend/assets/icons/monochrome.png create mode 100644 packages/backend/assets/mi-white.png create mode 100644 packages/backend/assets/notification-badges/LICENSE create mode 100644 packages/backend/assets/notification-badges/at.png create mode 100644 packages/backend/assets/notification-badges/boost.png create mode 100644 packages/backend/assets/notification-badges/check.png create mode 100644 packages/backend/assets/notification-badges/clipboard-check.png create mode 100644 packages/backend/assets/notification-badges/clock.png create mode 100644 packages/backend/assets/notification-badges/comments.png create mode 100644 packages/backend/assets/notification-badges/id-card.png create mode 100644 packages/backend/assets/notification-badges/null.png create mode 100644 packages/backend/assets/notification-badges/plus.png create mode 100644 packages/backend/assets/notification-badges/poll.png create mode 100644 packages/backend/assets/notification-badges/quote.png create mode 100644 packages/backend/assets/notification-badges/reaction.png create mode 100644 packages/backend/assets/notification-badges/reply.png create mode 100644 packages/backend/assets/notification-badges/user-plus.png create mode 100644 packages/backend/assets/redoc.html create mode 100644 packages/backend/assets/robots.txt create mode 100644 packages/backend/assets/screenshots/1.webp create mode 100644 packages/backend/assets/screenshots/2.webp create mode 100644 packages/backend/assets/sounds/aisha/1.mp3 create mode 100644 packages/backend/assets/sounds/aisha/2.mp3 create mode 100644 packages/backend/assets/sounds/aisha/3.mp3 create mode 100644 packages/backend/assets/sounds/noizenecio/kick_gaba.mp3 create mode 100644 packages/backend/assets/sounds/noizenecio/kick_gaba2.mp3 create mode 100644 packages/backend/assets/sounds/syuilo/down.mp3 create mode 100644 packages/backend/assets/sounds/syuilo/kick.mp3 create mode 100644 packages/backend/assets/sounds/syuilo/pirori-square-wet.mp3 create mode 100644 packages/backend/assets/sounds/syuilo/pirori-wet.mp3 create mode 100644 packages/backend/assets/sounds/syuilo/pirori.mp3 create mode 100644 packages/backend/assets/sounds/syuilo/poi1.mp3 create mode 100644 packages/backend/assets/sounds/syuilo/poi2.mp3 create mode 100644 packages/backend/assets/sounds/syuilo/pope1.mp3 create mode 100644 packages/backend/assets/sounds/syuilo/pope2.mp3 create mode 100644 packages/backend/assets/sounds/syuilo/popo.mp3 create mode 100644 packages/backend/assets/sounds/syuilo/queue-jammed.mp3 create mode 100644 packages/backend/assets/sounds/syuilo/reverved.mp3 create mode 100644 packages/backend/assets/sounds/syuilo/ryukyu.mp3 create mode 100644 packages/backend/assets/sounds/syuilo/snare.mp3 create mode 100644 packages/backend/assets/sounds/syuilo/square-pico.mp3 create mode 100644 packages/backend/assets/sounds/syuilo/triple.mp3 create mode 100644 packages/backend/assets/sounds/syuilo/up.mp3 create mode 100644 packages/backend/assets/sounds/syuilo/waon.mp3 create mode 100644 packages/backend/assets/splash.png create mode 100644 packages/backend/assets/splash.svg create mode 100644 packages/backend/assets/transparent.png create mode 100644 packages/backend/assets/user-unknown.png create mode 100644 packages/backend/assets/woozy.png create mode 100644 packages/backend/jsconfig.json create mode 100644 packages/backend/package.json create mode 100644 packages/backend/scripts/create-migration.mjs create mode 100644 packages/backend/src/@types/hcaptcha.d.ts create mode 100644 packages/backend/src/@types/http-signature.d.ts create mode 100644 packages/backend/src/@types/koa-json-body.d.ts create mode 100644 packages/backend/src/@types/koa-remove-trailing-slashes/index.d.ts create mode 100644 packages/backend/src/@types/langdetect.d.ts create mode 100644 packages/backend/src/@types/package.json.d.ts create mode 100644 packages/backend/src/boot/index.ts create mode 100644 packages/backend/src/boot/master.ts create mode 100644 packages/backend/src/boot/worker.ts create mode 100644 packages/backend/src/config.ts create mode 100644 packages/backend/src/const.ts create mode 100644 packages/backend/src/daemons/queue-stats.ts create mode 100644 packages/backend/src/daemons/server-stats.ts create mode 100644 packages/backend/src/db/logger.ts create mode 100644 packages/backend/src/db/postgre.ts create mode 100644 packages/backend/src/db/redis.ts create mode 100644 packages/backend/src/global.d.ts create mode 100644 packages/backend/src/index.ts create mode 100644 packages/backend/src/mfm/from-html.ts create mode 100644 packages/backend/src/mfm/to-html.ts create mode 100644 packages/backend/src/migration/1000000000000-Init.ts create mode 100644 packages/backend/src/migration/1556348509290-Pages.ts create mode 100644 packages/backend/src/migration/1556746559567-UserProfile.ts create mode 100644 packages/backend/src/migration/1557476068003-PinnedUsers.ts create mode 100644 packages/backend/src/migration/1557761316509-AddSomeUrls.ts create mode 100644 packages/backend/src/migration/1557932705754-ObjectStorageSetting.ts create mode 100644 packages/backend/src/migration/1558072954435-PageLike.ts create mode 100644 packages/backend/src/migration/1558103093633-UserGroup.ts create mode 100644 packages/backend/src/migration/1558257926829-UserGroupInvite.ts create mode 100644 packages/backend/src/migration/1558266512381-UserListJoining.ts create mode 100644 packages/backend/src/migration/1561706992953-webauthn.ts create mode 100644 packages/backend/src/migration/1561873850023-ChartIndexes.ts create mode 100644 packages/backend/src/migration/1562422242907-PasswordLessLogin.ts create mode 100644 packages/backend/src/migration/1562444565093-PinnedPage.ts create mode 100644 packages/backend/src/migration/1562448332510-PageTitleHideOption.ts create mode 100644 packages/backend/src/migration/1562869971568-ModerationLog.ts create mode 100644 packages/backend/src/migration/1563757595828-UsedUsername.ts create mode 100644 packages/backend/src/migration/1565634203341-room.ts create mode 100644 packages/backend/src/migration/1571220798684-CustomEmojiCategory.ts create mode 100644 packages/backend/src/migration/1572760203493-nodeinfo.ts create mode 100644 packages/backend/src/migration/1576269851876-TalkFederationId.ts create mode 100644 packages/backend/src/migration/1576869585998-ProxyRemoteFiles.ts create mode 100644 packages/backend/src/migration/1579267006611-v12.ts create mode 100644 packages/backend/src/migration/1579270193251-v12-2.ts create mode 100644 packages/backend/src/migration/1579282808087-v12-3.ts create mode 100644 packages/backend/src/migration/1579544426412-v12-4.ts create mode 100644 packages/backend/src/migration/1579977526288-v12-5.ts create mode 100644 packages/backend/src/migration/1579993013959-v12-6.ts create mode 100644 packages/backend/src/migration/1580069531114-v12-7.ts create mode 100644 packages/backend/src/migration/1580148575182-v12-8.ts create mode 100644 packages/backend/src/migration/1580154400017-v12-9.ts create mode 100644 packages/backend/src/migration/1580276619901-v12-10.ts create mode 100644 packages/backend/src/migration/1580331224276-v12-11.ts create mode 100644 packages/backend/src/migration/1580508795118-v12-12.ts create mode 100644 packages/backend/src/migration/1580543501339-v12-13.ts create mode 100644 packages/backend/src/migration/1580864313253-v12-14.ts create mode 100644 packages/backend/src/migration/1581526429287-user-group-invitation.ts create mode 100644 packages/backend/src/migration/1581695816408-user-group-antenna.ts create mode 100644 packages/backend/src/migration/1581708415836-drive-user-folder-id-index.ts create mode 100644 packages/backend/src/migration/1581979837262-promo.ts create mode 100644 packages/backend/src/migration/1582019042083-featured-injecttion.ts create mode 100644 packages/backend/src/migration/1582210532752-antenna-exclude.ts create mode 100644 packages/backend/src/migration/1582875306439-note-reaction-length.ts create mode 100644 packages/backend/src/migration/1585361548360-miauth.ts create mode 100644 packages/backend/src/migration/1585385921215-custom-notification.ts create mode 100644 packages/backend/src/migration/1585772678853-ap-url.ts create mode 100644 packages/backend/src/migration/1586624197029-AddObjectStorageUseProxy.ts create mode 100644 packages/backend/src/migration/1586641139527-remote-reaction.ts create mode 100644 packages/backend/src/migration/1586708940386-pageAiScript.ts create mode 100644 packages/backend/src/migration/1588044505511-hCaptcha.ts create mode 100644 packages/backend/src/migration/1589023282116-pubRelay.ts create mode 100644 packages/backend/src/migration/1595075960584-blurhash.ts create mode 100644 packages/backend/src/migration/1595077605646-blurhash-for-avatar-banner.ts create mode 100644 packages/backend/src/migration/1595676934834-instance-icon-url.ts create mode 100644 packages/backend/src/migration/1595771249699-word-mute.ts create mode 100644 packages/backend/src/migration/1595782306083-word-mute2.ts create mode 100644 packages/backend/src/migration/1596548170836-channel.ts create mode 100644 packages/backend/src/migration/1596786425167-channel2.ts create mode 100644 packages/backend/src/migration/1597230137744-objectStorageSetPublicRead.ts create mode 100644 packages/backend/src/migration/1597236229720-IncludingNotificationTypes.ts create mode 100644 packages/backend/src/migration/1597385880794-add-sensitive-index.ts create mode 100644 packages/backend/src/migration/1597459042300-channel-unread.ts create mode 100644 packages/backend/src/migration/1597893996136-ChannelNoteIdDescIndex.ts create mode 100644 packages/backend/src/migration/1600353287890-mutingNotificationTypes.ts create mode 100644 packages/backend/src/migration/1603094348345-refine-abuse-user-report.ts create mode 100644 packages/backend/src/migration/1603095701770-refine-abuse-user-report2.ts create mode 100644 packages/backend/src/migration/1603776877564-instance-theme-color.ts create mode 100644 packages/backend/src/migration/1603781553011-instance-favicon.ts create mode 100644 packages/backend/src/migration/1604821689616-delete-auto-watch.ts create mode 100644 packages/backend/src/migration/1605408848373-clip-description.ts create mode 100644 packages/backend/src/migration/1605408971051-comments.ts create mode 100644 packages/backend/src/migration/1605585339718-instance-pinned-pages.ts create mode 100644 packages/backend/src/migration/1605965516823-instance-images.ts create mode 100644 packages/backend/src/migration/1606191203881-no-crawle.ts create mode 100644 packages/backend/src/migration/1607151207216-instance-pinned-clip.ts create mode 100644 packages/backend/src/migration/1607353487793-isExplorable.ts create mode 100644 packages/backend/src/migration/1610277136869-registry.ts create mode 100644 packages/backend/src/migration/1610277585759-registry2.ts create mode 100644 packages/backend/src/migration/1610283021566-registry3.ts create mode 100644 packages/backend/src/migration/1611354329133-followersUri.ts create mode 100644 packages/backend/src/migration/1611397665007-gallery.ts create mode 100644 packages/backend/src/migration/1611547387175-objectStorageS3ForcePathStyle.ts create mode 100644 packages/backend/src/migration/1612619156584-announcement-email.ts create mode 100644 packages/backend/src/migration/1613155914446-emailNotificationTypes.ts create mode 100644 packages/backend/src/migration/1613181457597-user-lang.ts create mode 100644 packages/backend/src/migration/1613503367223-use-bigint-for-driveUsage.ts create mode 100644 packages/backend/src/migration/1615965918224-chart-v2.ts create mode 100644 packages/backend/src/migration/1615966519402-chart-v2-2.ts create mode 100644 packages/backend/src/migration/1618637372000-user-last-active-date.ts create mode 100644 packages/backend/src/migration/1618639857000-user-hide-online-status.ts create mode 100644 packages/backend/src/migration/1619942102890-password-reset.ts create mode 100644 packages/backend/src/migration/1620019354680-ad.ts create mode 100644 packages/backend/src/migration/1620364649428-ad2.ts create mode 100644 packages/backend/src/migration/1621479946000-add-note-indexes.ts create mode 100644 packages/backend/src/migration/1622679304522-user-profile-description-length.ts create mode 100644 packages/backend/src/migration/1622681548499-log-message-length.ts create mode 100644 packages/backend/src/migration/1626509500668-fix-remote-file-proxy.ts create mode 100644 packages/backend/src/migration/1626733991004-allowlist-secure-mode.ts create mode 100644 packages/backend/src/migration/1629004542760-chart-reindex.ts create mode 100644 packages/backend/src/migration/1629024377804-deepl-integration.ts create mode 100644 packages/backend/src/migration/1629288472000-fix-channel-userId.ts create mode 100644 packages/backend/src/migration/1629512953000-user-is-deleted.ts create mode 100644 packages/backend/src/migration/1629778475000-deepl-integration2.ts create mode 100644 packages/backend/src/migration/1629833361000-AddShowTLReplies.ts create mode 100644 packages/backend/src/migration/1629968054000_userInstanceBlocks.ts create mode 100644 packages/backend/src/migration/1633068642000-email-required-for-signup.ts create mode 100644 packages/backend/src/migration/1633071909016-user-pending.ts create mode 100644 packages/backend/src/migration/1634486652000-user-public-reactions.ts create mode 100644 packages/backend/src/migration/1634902659689-delete-log.ts create mode 100644 packages/backend/src/migration/1635500777168-note-thread-mute.ts create mode 100644 packages/backend/src/migration/1636197624383-ff-visibility.ts create mode 100644 packages/backend/src/migration/1636697408073-remove-via-mobile.ts create mode 100644 packages/backend/src/migration/1637320813000-forwarded-report.ts create mode 100644 packages/backend/src/migration/1639325650583-chart-v3.ts create mode 100644 packages/backend/src/migration/1642611822809-emoji-url.ts create mode 100644 packages/backend/src/migration/1642613870898-drive-file-webpublic-type.ts create mode 100644 packages/backend/src/migration/1643963705770-chart-v4.ts create mode 100644 packages/backend/src/migration/1643966656277-chart-v5.ts create mode 100644 packages/backend/src/migration/1643967331284-chart-v6.ts create mode 100644 packages/backend/src/migration/1644010796173-convert-hard-mutes.ts create mode 100644 packages/backend/src/migration/1644058404077-chart-v7.ts create mode 100644 packages/backend/src/migration/1644059847460-chart-v8.ts create mode 100644 packages/backend/src/migration/1644060125705-chart-v9.ts create mode 100644 packages/backend/src/migration/1644073149413-chart-v10.ts create mode 100644 packages/backend/src/migration/1644095659741-chart-v11.ts create mode 100644 packages/backend/src/migration/1644328606241-chart-v12.ts create mode 100644 packages/backend/src/migration/1644331238153-chart-v13.ts create mode 100644 packages/backend/src/migration/1644344266289-chart-v14.ts create mode 100644 packages/backend/src/migration/1644395759931-instance-theme-color.ts create mode 100644 packages/backend/src/migration/1644481657998-chart-v15.ts create mode 100644 packages/backend/src/migration/1644551208096-following-indexes.ts create mode 100644 packages/backend/src/migration/1645340161439-remove-max-note-text-length.ts create mode 100644 packages/backend/src/migration/1645599900873-federation-chart-pubsub.ts create mode 100644 packages/backend/src/migration/1646143552768-instance-default-theme.ts create mode 100644 packages/backend/src/migration/1646387162108-mute-expires-at.ts create mode 100644 packages/backend/src/migration/1646549089451-poll-ended-notification.ts create mode 100644 packages/backend/src/migration/1646633030285-chart-federation-active.ts create mode 100644 packages/backend/src/migration/1646655454495-remove-instance-drive-columns.ts create mode 100644 packages/backend/src/migration/1646732390560-chart-federation-active-sub-pub.ts create mode 100644 packages/backend/src/migration/1648548247382-webhook.ts create mode 100644 packages/backend/src/migration/1648816172177-webhook-2.ts create mode 100644 packages/backend/src/migration/1651224615271-foreign-key.ts create mode 100644 packages/backend/src/migration/1652859567549-uniform-themecolor.ts create mode 100644 packages/backend/src/migration/1655368940105-nsfw-detection.ts create mode 100644 packages/backend/src/migration/1655371960534-nsfw-detection-2.ts create mode 100644 packages/backend/src/migration/1655388169582-nsfw-detection-3.ts create mode 100644 packages/backend/src/migration/1655393015659-nsfw-detection-4.ts create mode 100644 packages/backend/src/migration/1655813815729-driveCapacityOverrideMb.ts create mode 100644 packages/backend/src/migration/1655918165614-user-ip.ts create mode 100644 packages/backend/src/migration/1656122560740-file-ip.ts create mode 100644 packages/backend/src/migration/1656251734807-nsfw-detection-5.ts create mode 100644 packages/backend/src/migration/1656328812281-ip-2.ts create mode 100644 packages/backend/src/migration/1656408772602-nsfw-detection-6.ts create mode 100644 packages/backend/src/migration/1656772790599-user-moderation-note.ts create mode 100644 packages/backend/src/migration/1657346559800-active-email-validation.ts create mode 100644 packages/backend/src/migration/1658203170545firefish.ts create mode 100644 packages/backend/src/migration/1658656633972-note-replies-function.ts create mode 100644 packages/backend/src/migration/1658939464003CustomMOTD.ts create mode 100644 packages/backend/src/migration/1658941974648CustomSplashIcons.ts create mode 100644 packages/backend/src/migration/1658981842728FixCalckey.ts create mode 100644 packages/backend/src/migration/1659042130648RecommendedTimeline.ts create mode 100644 packages/backend/src/migration/1660068273737GuestTimeline.ts create mode 100644 packages/backend/src/migration/1665091090561-add-renote-muting.ts create mode 100644 packages/backend/src/migration/1668828368510PageDraft.ts create mode 100644 packages/backend/src/migration/1668831378728FixCalckeyAgain.ts create mode 100644 packages/backend/src/migration/1669138716634-whetherPushNotifyToSendReadMessage.ts create mode 100644 packages/backend/src/migration/1669288094000-AddMovedToAndKnownAs.ts create mode 100644 packages/backend/src/migration/1671199573000-AddFkAbuseUserReportTargetUserIdToUserId.ts create mode 100644 packages/backend/src/migration/1671388343000-CalckeyRepoMove.ts create mode 100644 packages/backend/src/migration/1672882664294-DefaultReaction.ts create mode 100644 packages/backend/src/migration/1673336077243-PollChoiceLength.ts create mode 100644 packages/backend/src/migration/1676093997212-AntennaInstances.ts create mode 100644 packages/backend/src/migration/1677935903517-DriveComment.ts create mode 100644 packages/backend/src/migration/1678426061773-tweak-varchar-length.ts create mode 100644 packages/backend/src/migration/1678945242650-add-props-for-custom-emoji.ts create mode 100644 packages/backend/src/migration/1679269929000-fix-repo.ts create mode 100644 packages/backend/src/migration/1680375641101-clean-charts.ts create mode 100644 packages/backend/src/migration/1680426269172-SpeakAsCat.ts create mode 100644 packages/backend/src/migration/1682753227899-NoteEdit.ts create mode 100644 packages/backend/src/migration/1682777547198-LibreTranslate.ts create mode 100644 packages/backend/src/migration/1682891890317-InstanceSilence.ts create mode 100644 packages/backend/src/migration/1682891891317-AddHiddenPosts.ts create mode 100644 packages/backend/src/migration/1683682889948-PreventAiLearning.ts create mode 100644 packages/backend/src/migration/1683980686995-ExperimentalFeatures.ts create mode 100644 packages/backend/src/migration/1684206886988-remove-showTimelineReplies.ts create mode 100644 packages/backend/src/migration/1684494870830-EmojiSize.ts create mode 100644 packages/backend/src/migration/1688280713783-add-meta-options.ts create mode 100644 packages/backend/src/migration/1688845537045-announcement-popup.ts create mode 100644 packages/backend/src/migration/1689136347561-donation-link.ts create mode 100644 packages/backend/src/migration/1689739513827-firefish-repo.ts create mode 100644 packages/backend/src/migration/1689957674000-firefish-repo.ts create mode 100644 packages/backend/src/migration/1692374635734-IncreaseHostCharLimit.ts create mode 100644 packages/backend/src/migration/1692825433698-emoji-moderator.ts create mode 100644 packages/backend/src/migration/1695334243217-add-post-lang.ts create mode 100644 packages/backend/src/migration/1698420787202-pgroonga.ts create mode 100644 packages/backend/src/migration/1699305365258-more-urls.ts create mode 100644 packages/backend/src/migration/1704851359889-add-reply-muting.ts create mode 100644 packages/backend/src/migration/1705848938166-remove-nsfw-detection.ts create mode 100644 packages/backend/src/migration/1705877093218-remove-native-utils-migration.ts create mode 100644 packages/backend/src/migration/1705944717480-rename-meta-columns.ts create mode 100644 packages/backend/src/migration/1706413792769-separate-hard-mute-words-and-patterns.ts create mode 100644 packages/backend/src/migration/1707850084123-firefish-url-move.ts create mode 100644 packages/backend/src/migration/1708452631156-drop-user-profile-language.ts create mode 100644 packages/backend/src/migration/1708872574733-index-alt-text-and-cw.ts create mode 100644 packages/backend/src/migration/1709047957489-remove-charts.ts create mode 100644 packages/backend/src/migration/1709129810501-fix-note-url-index.ts create mode 100644 packages/backend/src/migration/1709251460718-change-default-configs.ts create mode 100644 packages/backend/src/migration/1709305200000-markLocalFilesNsfwByDefault.ts create mode 100644 packages/backend/src/migration/1709395223612-swSubscriptionAccessToken.ts create mode 100644 packages/backend/src/migration/1710304584214-note-file.ts create mode 100644 packages/backend/src/migration/1710690239308-fix-muting-indices.ts create mode 100644 packages/backend/src/migration/1711075007936-userProfileMentions.ts create mode 100644 packages/backend/src/migration/1711936358554-expand-note-edit.ts create mode 100644 packages/backend/src/migration/1712425488543-drop-time-zone.ts create mode 100644 packages/backend/src/migration/1712855579316-fix-chat-file-constraint.ts create mode 100644 packages/backend/src/migration/1712937600000-antennaLimit.ts create mode 100644 packages/backend/src/migration/1713108561474-clientCredentials.ts create mode 100644 packages/backend/src/migration/1713225866247-convert-cw-varchar-to-text.ts create mode 100644 packages/backend/src/migration/1713451569342-AddDriveFileUsage.ts create mode 100644 packages/backend/src/migration/1714099399879-alter-aka-type.ts create mode 100644 packages/backend/src/migration/1714192520471-antenna-jsonb-to-array.ts create mode 100644 packages/backend/src/migration/1714259023878-drop-unused-userprofile-columns.ts create mode 100644 packages/backend/src/migration/1714270605574-userprofile-jsonb-to-array.ts create mode 100644 packages/backend/src/migration/1714643926317-drop-unused-indexes.ts create mode 100644 packages/backend/src/migration/1714728200194-create-scheduled-note.ts create mode 100644 packages/backend/src/migration/1714888400293-add-user-profile-language.ts create mode 100644 packages/backend/src/migration/1715181461692-addMastodonSubscriptionType.ts create mode 100644 packages/backend/src/migration/1715351290096-add-back-timezone.ts create mode 100644 packages/backend/src/migration/1716462794927-remove-enum-typename-suffix.ts create mode 100644 packages/backend/src/migration/1716804636187-refactor-scheduled-posts.ts create mode 100644 packages/backend/src/migration/1720107645050-turn-off-cat-language.ts create mode 100644 packages/backend/src/migration/1720618854585-create-system-actors.ts create mode 100644 packages/backend/src/migration/1722134626110-set-access-token-name.ts create mode 100644 packages/backend/src/misc/api-permissions.ts create mode 100644 packages/backend/src/misc/app-lock.ts create mode 100644 packages/backend/src/misc/before-shutdown.ts create mode 100644 packages/backend/src/misc/cache.ts create mode 100644 packages/backend/src/misc/captcha.ts create mode 100644 packages/backend/src/misc/clone.ts create mode 100644 packages/backend/src/misc/content-disposition.ts create mode 100644 packages/backend/src/misc/count-same-renotes.ts create mode 100644 packages/backend/src/misc/create-temp.ts create mode 100644 packages/backend/src/misc/detect-url-mime.ts create mode 100644 packages/backend/src/misc/download-text-file.ts create mode 100644 packages/backend/src/misc/download-url.ts create mode 100644 packages/backend/src/misc/extract-custom-emojis-from-mfm.ts create mode 100644 packages/backend/src/misc/extract-hashtags.ts create mode 100644 packages/backend/src/misc/extract-mentions.ts create mode 100644 packages/backend/src/misc/fetch-proxy-account.ts create mode 100644 packages/backend/src/misc/fetch.ts create mode 100644 packages/backend/src/misc/gen-identicon.ts create mode 100644 packages/backend/src/misc/get-file-info.ts create mode 100644 packages/backend/src/misc/get-ip-hash.ts create mode 100644 packages/backend/src/misc/i18n.ts create mode 100644 packages/backend/src/misc/identifiable-error.ts create mode 100644 packages/backend/src/misc/is-duplicate-key-value-error.ts create mode 100644 packages/backend/src/misc/is-filtered.ts create mode 100644 packages/backend/src/misc/is-instance-muted.ts create mode 100644 packages/backend/src/misc/is-mime-image.ts create mode 100644 packages/backend/src/misc/is-user-related.ts create mode 100644 packages/backend/src/misc/keypair-store.ts create mode 100644 packages/backend/src/misc/normalize-for-search.ts create mode 100644 packages/backend/src/misc/populate-emojis.ts create mode 100644 packages/backend/src/misc/process-masto-notes.ts create mode 100644 packages/backend/src/misc/schema.ts create mode 100644 packages/backend/src/misc/search.ts create mode 100644 packages/backend/src/misc/skipped-instances.ts create mode 100644 packages/backend/src/misc/truncate.ts create mode 100644 packages/backend/src/misc/webhook-cache.ts create mode 100644 packages/backend/src/models/entities/abuse-user-report.ts create mode 100644 packages/backend/src/models/entities/access-token.ts create mode 100644 packages/backend/src/models/entities/ad.ts create mode 100644 packages/backend/src/models/entities/announcement-read.ts create mode 100644 packages/backend/src/models/entities/announcement.ts create mode 100644 packages/backend/src/models/entities/antenna.ts create mode 100644 packages/backend/src/models/entities/app.ts create mode 100644 packages/backend/src/models/entities/attestation-challenge.ts create mode 100644 packages/backend/src/models/entities/auth-session.ts create mode 100644 packages/backend/src/models/entities/blocking.ts create mode 100644 packages/backend/src/models/entities/channel-following.ts create mode 100644 packages/backend/src/models/entities/channel-note-pining.ts create mode 100644 packages/backend/src/models/entities/channel.ts create mode 100644 packages/backend/src/models/entities/clip-note.ts create mode 100644 packages/backend/src/models/entities/clip.ts create mode 100644 packages/backend/src/models/entities/drive-file.ts create mode 100644 packages/backend/src/models/entities/drive-folder.ts create mode 100644 packages/backend/src/models/entities/emoji.ts create mode 100644 packages/backend/src/models/entities/follow-request.ts create mode 100644 packages/backend/src/models/entities/following.ts create mode 100644 packages/backend/src/models/entities/gallery-like.ts create mode 100644 packages/backend/src/models/entities/gallery-post.ts create mode 100644 packages/backend/src/models/entities/hashtag.ts create mode 100644 packages/backend/src/models/entities/instance.ts create mode 100644 packages/backend/src/models/entities/messaging-message.ts create mode 100644 packages/backend/src/models/entities/meta.ts create mode 100644 packages/backend/src/models/entities/moderation-log.ts create mode 100644 packages/backend/src/models/entities/muted-note.ts create mode 100644 packages/backend/src/models/entities/muting.ts create mode 100644 packages/backend/src/models/entities/note-edit.ts create mode 100644 packages/backend/src/models/entities/note-favorite.ts create mode 100644 packages/backend/src/models/entities/note-file.ts create mode 100644 packages/backend/src/models/entities/note-reaction.ts create mode 100644 packages/backend/src/models/entities/note-thread-muting.ts create mode 100644 packages/backend/src/models/entities/note-unread.ts create mode 100644 packages/backend/src/models/entities/note-watching.ts create mode 100644 packages/backend/src/models/entities/note.ts create mode 100644 packages/backend/src/models/entities/notification.ts create mode 100644 packages/backend/src/models/entities/page-like.ts create mode 100644 packages/backend/src/models/entities/page.ts create mode 100644 packages/backend/src/models/entities/password-reset-request.ts create mode 100644 packages/backend/src/models/entities/poll-vote.ts create mode 100644 packages/backend/src/models/entities/poll.ts create mode 100644 packages/backend/src/models/entities/promo-note.ts create mode 100644 packages/backend/src/models/entities/promo-read.ts create mode 100644 packages/backend/src/models/entities/registration-tickets.ts create mode 100644 packages/backend/src/models/entities/registry-item.ts create mode 100644 packages/backend/src/models/entities/relay.ts create mode 100644 packages/backend/src/models/entities/renote-muting.ts create mode 100644 packages/backend/src/models/entities/reply-muting.ts create mode 100644 packages/backend/src/models/entities/signin.ts create mode 100644 packages/backend/src/models/entities/sw-subscription.ts create mode 100644 packages/backend/src/models/entities/used-username.ts create mode 100644 packages/backend/src/models/entities/user-group-invitation.ts create mode 100644 packages/backend/src/models/entities/user-group-joining.ts create mode 100644 packages/backend/src/models/entities/user-group.ts create mode 100644 packages/backend/src/models/entities/user-ip.ts create mode 100644 packages/backend/src/models/entities/user-keypair.ts create mode 100644 packages/backend/src/models/entities/user-list-joining.ts create mode 100644 packages/backend/src/models/entities/user-list.ts create mode 100644 packages/backend/src/models/entities/user-note-pining.ts create mode 100644 packages/backend/src/models/entities/user-pending.ts create mode 100644 packages/backend/src/models/entities/user-profile.ts create mode 100644 packages/backend/src/models/entities/user-publickey.ts create mode 100644 packages/backend/src/models/entities/user-security-key.ts create mode 100644 packages/backend/src/models/entities/user.ts create mode 100644 packages/backend/src/models/entities/webhook.ts create mode 100644 packages/backend/src/models/id.ts create mode 100644 packages/backend/src/models/index.ts create mode 100644 packages/backend/src/models/repositories/abuse-user-report.ts create mode 100644 packages/backend/src/models/repositories/antenna.ts create mode 100644 packages/backend/src/models/repositories/app.ts create mode 100644 packages/backend/src/models/repositories/auth-session.ts create mode 100644 packages/backend/src/models/repositories/blocking.ts create mode 100644 packages/backend/src/models/repositories/channel.ts create mode 100644 packages/backend/src/models/repositories/clip.ts create mode 100644 packages/backend/src/models/repositories/drive-file.ts create mode 100644 packages/backend/src/models/repositories/drive-folder.ts create mode 100644 packages/backend/src/models/repositories/emoji.ts create mode 100644 packages/backend/src/models/repositories/follow-request.ts create mode 100644 packages/backend/src/models/repositories/following.ts create mode 100644 packages/backend/src/models/repositories/gallery-like.ts create mode 100644 packages/backend/src/models/repositories/gallery-post.ts create mode 100644 packages/backend/src/models/repositories/hashtag.ts create mode 100644 packages/backend/src/models/repositories/instance.ts create mode 100644 packages/backend/src/models/repositories/messaging-message.ts create mode 100644 packages/backend/src/models/repositories/moderation-logs.ts create mode 100644 packages/backend/src/models/repositories/muting.ts create mode 100644 packages/backend/src/models/repositories/note-edit.ts create mode 100644 packages/backend/src/models/repositories/note-favorite.ts create mode 100644 packages/backend/src/models/repositories/note-file.ts create mode 100644 packages/backend/src/models/repositories/note-reaction.ts create mode 100644 packages/backend/src/models/repositories/note.ts create mode 100644 packages/backend/src/models/repositories/notification.ts create mode 100644 packages/backend/src/models/repositories/page-like.ts create mode 100644 packages/backend/src/models/repositories/page.ts create mode 100644 packages/backend/src/models/repositories/relay.ts create mode 100644 packages/backend/src/models/repositories/renote-muting.ts create mode 100644 packages/backend/src/models/repositories/reply-muting.ts create mode 100644 packages/backend/src/models/repositories/signin.ts create mode 100644 packages/backend/src/models/repositories/user-group-invitation.ts create mode 100644 packages/backend/src/models/repositories/user-group.ts create mode 100644 packages/backend/src/models/repositories/user-list.ts create mode 100644 packages/backend/src/models/repositories/user-profile.ts create mode 100644 packages/backend/src/models/repositories/user.ts create mode 100644 packages/backend/src/ormconfig.ts create mode 100644 packages/backend/src/prelude/README.md create mode 100644 packages/backend/src/prelude/array.ts create mode 100644 packages/backend/src/prelude/await-all.ts create mode 100644 packages/backend/src/prelude/math.ts create mode 100644 packages/backend/src/prelude/maybe.ts create mode 100644 packages/backend/src/prelude/promise.ts create mode 100644 packages/backend/src/prelude/relation.ts create mode 100644 packages/backend/src/prelude/string.ts create mode 100644 packages/backend/src/prelude/symbol.ts create mode 100644 packages/backend/src/prelude/time.ts create mode 100644 packages/backend/src/prelude/undefined-to-null.ts create mode 100644 packages/backend/src/prelude/unsafe-cast.ts create mode 100644 packages/backend/src/prelude/url.ts create mode 100644 packages/backend/src/prelude/xml.ts create mode 100644 packages/backend/src/queue/get-job-info.ts create mode 100644 packages/backend/src/queue/index.ts create mode 100644 packages/backend/src/queue/initialize.ts create mode 100644 packages/backend/src/queue/logger.ts create mode 100644 packages/backend/src/queue/processors/db/delete-account.ts create mode 100644 packages/backend/src/queue/processors/db/delete-drive-files.ts create mode 100644 packages/backend/src/queue/processors/db/export-blocking.ts create mode 100644 packages/backend/src/queue/processors/db/export-custom-emojis.ts create mode 100644 packages/backend/src/queue/processors/db/export-followers.ts create mode 100644 packages/backend/src/queue/processors/db/export-following.ts create mode 100644 packages/backend/src/queue/processors/db/export-mute.ts create mode 100644 packages/backend/src/queue/processors/db/export-notes.ts create mode 100644 packages/backend/src/queue/processors/db/export-user-lists.ts create mode 100644 packages/backend/src/queue/processors/db/import-blocking.ts create mode 100644 packages/backend/src/queue/processors/db/import-custom-emojis.ts create mode 100644 packages/backend/src/queue/processors/db/import-firefish-post.ts create mode 100644 packages/backend/src/queue/processors/db/import-following.ts create mode 100644 packages/backend/src/queue/processors/db/import-masto-post.ts create mode 100644 packages/backend/src/queue/processors/db/import-muting.ts create mode 100644 packages/backend/src/queue/processors/db/import-posts.ts create mode 100644 packages/backend/src/queue/processors/db/import-user-lists.ts create mode 100644 packages/backend/src/queue/processors/db/index.ts create mode 100644 packages/backend/src/queue/processors/db/scheduled-note.ts create mode 100644 packages/backend/src/queue/processors/deliver.ts create mode 100644 packages/backend/src/queue/processors/ended-poll-notification.ts create mode 100644 packages/backend/src/queue/processors/inbox.ts create mode 100644 packages/backend/src/queue/processors/object-storage/clean-remote-files.ts create mode 100644 packages/backend/src/queue/processors/object-storage/delete-file.ts create mode 100644 packages/backend/src/queue/processors/object-storage/index.ts create mode 100644 packages/backend/src/queue/processors/system/check-expired-mutings.ts create mode 100644 packages/backend/src/queue/processors/system/clean-charts.ts create mode 100644 packages/backend/src/queue/processors/system/clean.ts create mode 100644 packages/backend/src/queue/processors/system/index.ts create mode 100644 packages/backend/src/queue/processors/system/local-emoji-size.ts create mode 100644 packages/backend/src/queue/processors/system/verify-links.ts create mode 100644 packages/backend/src/queue/processors/webhook-deliver.ts create mode 100644 packages/backend/src/queue/queues.ts create mode 100644 packages/backend/src/queue/types.ts create mode 100644 packages/backend/src/remote/activitypub/ap-request.ts create mode 100644 packages/backend/src/remote/activitypub/audience.ts create mode 100644 packages/backend/src/remote/activitypub/check-fetch.ts create mode 100644 packages/backend/src/remote/activitypub/db-resolver.ts create mode 100644 packages/backend/src/remote/activitypub/deliver-manager.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/accept/follow.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/accept/index.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/add/index.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/announce/index.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/announce/note.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/block/index.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/create/index.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/create/note.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/delete/actor.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/delete/index.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/delete/note.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/flag/index.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/follow.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/index.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/like.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/move/index.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/read.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/reject/follow.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/reject/index.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/remove/index.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/undo/accept.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/undo/announce.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/undo/block.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/undo/follow.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/undo/index.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/undo/like.ts create mode 100644 packages/backend/src/remote/activitypub/kernel/update/index.ts create mode 100644 packages/backend/src/remote/activitypub/logger.ts create mode 100644 packages/backend/src/remote/activitypub/misc/contexts.ts create mode 100644 packages/backend/src/remote/activitypub/misc/get-note-html.ts create mode 100644 packages/backend/src/remote/activitypub/misc/html-to-mfm.ts create mode 100644 packages/backend/src/remote/activitypub/misc/ld-signature.ts create mode 100644 packages/backend/src/remote/activitypub/models/icon.ts create mode 100644 packages/backend/src/remote/activitypub/models/identifier.ts create mode 100644 packages/backend/src/remote/activitypub/models/image.ts create mode 100644 packages/backend/src/remote/activitypub/models/mention.ts create mode 100644 packages/backend/src/remote/activitypub/models/note.ts create mode 100644 packages/backend/src/remote/activitypub/models/person.ts create mode 100644 packages/backend/src/remote/activitypub/models/question.ts create mode 100644 packages/backend/src/remote/activitypub/models/tag.ts create mode 100644 packages/backend/src/remote/activitypub/perform.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/accept.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/add.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/announce.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/block.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/create.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/delete.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/document.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/emoji.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/flag.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/follow-user.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/follow.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/hashtag.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/image.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/index.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/key.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/like.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/mention.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/note.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/ordered-collection-page.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/ordered-collection.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/person.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/question.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/read.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/reject.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/remove.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/tombstone.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/undo.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/update.ts create mode 100644 packages/backend/src/remote/activitypub/renderer/vote.ts create mode 100644 packages/backend/src/remote/activitypub/request.ts create mode 100644 packages/backend/src/remote/activitypub/resolver.ts create mode 100644 packages/backend/src/remote/activitypub/type.ts create mode 100644 packages/backend/src/remote/logger.ts create mode 100644 packages/backend/src/remote/resolve-user.ts create mode 100644 packages/backend/src/remote/webfinger.ts create mode 100644 packages/backend/src/server/activitypub.ts create mode 100644 packages/backend/src/server/activitypub/featured.ts create mode 100644 packages/backend/src/server/activitypub/followers.ts create mode 100644 packages/backend/src/server/activitypub/following.ts create mode 100644 packages/backend/src/server/activitypub/outbox.ts create mode 100644 packages/backend/src/server/api/2fa.ts create mode 100644 packages/backend/src/server/api/api-handler.ts create mode 100644 packages/backend/src/server/api/authenticate.ts create mode 100644 packages/backend/src/server/api/call.ts create mode 100644 packages/backend/src/server/api/common/generate-block-query.ts create mode 100644 packages/backend/src/server/api/common/generate-channel-query.ts create mode 100644 packages/backend/src/server/api/common/generate-following-query.ts create mode 100644 packages/backend/src/server/api/common/generate-fts-query.ts create mode 100644 packages/backend/src/server/api/common/generate-list-query.ts create mode 100644 packages/backend/src/server/api/common/generate-muted-note-query.ts create mode 100644 packages/backend/src/server/api/common/generate-muted-note-thread-query.ts create mode 100644 packages/backend/src/server/api/common/generate-muted-user-query.ts create mode 100644 packages/backend/src/server/api/common/generate-replies-query.ts create mode 100644 packages/backend/src/server/api/common/generate-visibility-query.ts create mode 100644 packages/backend/src/server/api/common/generated-muted-renote-query.ts create mode 100644 packages/backend/src/server/api/common/generated-muted-reply-query.ts create mode 100644 packages/backend/src/server/api/common/getters.ts create mode 100644 packages/backend/src/server/api/common/inject-featured.ts create mode 100644 packages/backend/src/server/api/common/inject-promo.ts create mode 100644 packages/backend/src/server/api/common/is-native-token.ts create mode 100644 packages/backend/src/server/api/common/make-pagination-query.ts create mode 100644 packages/backend/src/server/api/common/read-messaging-message.ts create mode 100644 packages/backend/src/server/api/common/read-notification.ts create mode 100644 packages/backend/src/server/api/common/signin.ts create mode 100644 packages/backend/src/server/api/common/signup.ts create mode 100644 packages/backend/src/server/api/compatibility.ts create mode 100644 packages/backend/src/server/api/define.ts create mode 100644 packages/backend/src/server/api/endpoints.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/abuse-user-reports.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/accounts/create.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/accounts/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/accounts/hosted.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/ad/create.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/ad/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/ad/list.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/ad/update.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/announcements/create.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/announcements/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/announcements/list.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/announcements/update.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/delete-2fa.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/delete-account.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/delete-all-files-of-a-user.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/delete-passkeys.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/drive-capacity-override.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/drive/clean-remote-files.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/drive/cleanup.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/drive/files.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/drive/show-file.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/emoji/add-aliases-bulk.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/emoji/add.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/emoji/copy.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/emoji/delete-bulk.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/emoji/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/emoji/import-zip.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/emoji/list-remote.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/emoji/list.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/emoji/remove-aliases-bulk.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/emoji/set-aliases-bulk.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/emoji/set-category-bulk.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/emoji/set-license-bulk.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/emoji/update.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/federation/delete-all-files.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/federation/refresh-remote-instance-metadata.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/federation/remove-all-following.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/federation/update-instance.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/get-index-stats.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/get-table-stats.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/get-user-ips.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/invite.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/meta.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/moderators/add.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/moderators/remove.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/promo/create.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/queue/clear.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/queue/deliver-delayed.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/queue/inbox-delayed.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/queue/stats.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/relays/add.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/relays/list.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/relays/remove.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/reset-password.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/resolve-abuse-user-report.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/send-email.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/send-mod-mail.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/server-info.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/set-emoji-moderator.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/show-moderation-logs.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/show-user.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/show-users.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/silence-user.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/suspend-user.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/unsilence-user.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/unsuspend-user.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/update-meta.ts create mode 100644 packages/backend/src/server/api/endpoints/admin/update-user-note.ts create mode 100644 packages/backend/src/server/api/endpoints/announcements.ts create mode 100644 packages/backend/src/server/api/endpoints/antennas/create.ts create mode 100644 packages/backend/src/server/api/endpoints/antennas/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/antennas/list.ts create mode 100644 packages/backend/src/server/api/endpoints/antennas/markread.ts create mode 100644 packages/backend/src/server/api/endpoints/antennas/notes.ts create mode 100644 packages/backend/src/server/api/endpoints/antennas/show.ts create mode 100644 packages/backend/src/server/api/endpoints/antennas/update.ts create mode 100644 packages/backend/src/server/api/endpoints/ap/get.ts create mode 100644 packages/backend/src/server/api/endpoints/ap/show.ts create mode 100644 packages/backend/src/server/api/endpoints/app/create.ts create mode 100644 packages/backend/src/server/api/endpoints/app/show.ts create mode 100644 packages/backend/src/server/api/endpoints/auth/accept.ts create mode 100644 packages/backend/src/server/api/endpoints/auth/session/generate.ts create mode 100644 packages/backend/src/server/api/endpoints/auth/session/show.ts create mode 100644 packages/backend/src/server/api/endpoints/auth/session/userkey.ts create mode 100644 packages/backend/src/server/api/endpoints/blocking/create.ts create mode 100644 packages/backend/src/server/api/endpoints/blocking/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/blocking/list.ts create mode 100644 packages/backend/src/server/api/endpoints/channels/create.ts create mode 100644 packages/backend/src/server/api/endpoints/channels/featured.ts create mode 100644 packages/backend/src/server/api/endpoints/channels/follow.ts create mode 100644 packages/backend/src/server/api/endpoints/channels/followed.ts create mode 100644 packages/backend/src/server/api/endpoints/channels/owned.ts create mode 100644 packages/backend/src/server/api/endpoints/channels/search.ts create mode 100644 packages/backend/src/server/api/endpoints/channels/show.ts create mode 100644 packages/backend/src/server/api/endpoints/channels/timeline.ts create mode 100644 packages/backend/src/server/api/endpoints/channels/unfollow.ts create mode 100644 packages/backend/src/server/api/endpoints/channels/update.ts create mode 100644 packages/backend/src/server/api/endpoints/charts/active-users.ts create mode 100644 packages/backend/src/server/api/endpoints/clips/add-note.ts create mode 100644 packages/backend/src/server/api/endpoints/clips/create.ts create mode 100644 packages/backend/src/server/api/endpoints/clips/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/clips/list.ts create mode 100644 packages/backend/src/server/api/endpoints/clips/notes.ts create mode 100644 packages/backend/src/server/api/endpoints/clips/remove-note.ts create mode 100644 packages/backend/src/server/api/endpoints/clips/show.ts create mode 100644 packages/backend/src/server/api/endpoints/clips/update.ts create mode 100644 packages/backend/src/server/api/endpoints/compatibility/custom-emojis.ts create mode 100644 packages/backend/src/server/api/endpoints/compatibility/peers.ts create mode 100644 packages/backend/src/server/api/endpoints/custom-motd.ts create mode 100644 packages/backend/src/server/api/endpoints/custom-splash-icons.ts create mode 100644 packages/backend/src/server/api/endpoints/drive.ts create mode 100644 packages/backend/src/server/api/endpoints/drive/files.ts create mode 100644 packages/backend/src/server/api/endpoints/drive/files/attached-notes.ts create mode 100644 packages/backend/src/server/api/endpoints/drive/files/caption-image.ts create mode 100644 packages/backend/src/server/api/endpoints/drive/files/check-existence.ts create mode 100644 packages/backend/src/server/api/endpoints/drive/files/create.ts create mode 100644 packages/backend/src/server/api/endpoints/drive/files/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/drive/files/find-by-hash.ts create mode 100644 packages/backend/src/server/api/endpoints/drive/files/find.ts create mode 100644 packages/backend/src/server/api/endpoints/drive/files/show.ts create mode 100644 packages/backend/src/server/api/endpoints/drive/files/update.ts create mode 100644 packages/backend/src/server/api/endpoints/drive/files/upload-from-url.ts create mode 100644 packages/backend/src/server/api/endpoints/drive/folders.ts create mode 100644 packages/backend/src/server/api/endpoints/drive/folders/create.ts create mode 100644 packages/backend/src/server/api/endpoints/drive/folders/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/drive/folders/find.ts create mode 100644 packages/backend/src/server/api/endpoints/drive/folders/show.ts create mode 100644 packages/backend/src/server/api/endpoints/drive/folders/update.ts create mode 100644 packages/backend/src/server/api/endpoints/drive/stream.ts create mode 100644 packages/backend/src/server/api/endpoints/email-address/available.ts create mode 100644 packages/backend/src/server/api/endpoints/emoji.ts create mode 100644 packages/backend/src/server/api/endpoints/emojis.ts create mode 100644 packages/backend/src/server/api/endpoints/endpoint.ts create mode 100644 packages/backend/src/server/api/endpoints/endpoints.ts create mode 100644 packages/backend/src/server/api/endpoints/export-custom-emojis.ts create mode 100644 packages/backend/src/server/api/endpoints/federation/followers.ts create mode 100644 packages/backend/src/server/api/endpoints/federation/following.ts create mode 100644 packages/backend/src/server/api/endpoints/federation/instances.ts create mode 100644 packages/backend/src/server/api/endpoints/federation/show-instance.ts create mode 100644 packages/backend/src/server/api/endpoints/federation/stats.ts create mode 100644 packages/backend/src/server/api/endpoints/federation/update-remote-user.ts create mode 100644 packages/backend/src/server/api/endpoints/federation/users.ts create mode 100644 packages/backend/src/server/api/endpoints/fetch-rss.ts create mode 100644 packages/backend/src/server/api/endpoints/following/create.ts create mode 100644 packages/backend/src/server/api/endpoints/following/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/following/invalidate.ts create mode 100644 packages/backend/src/server/api/endpoints/following/requests/accept.ts create mode 100644 packages/backend/src/server/api/endpoints/following/requests/cancel.ts create mode 100644 packages/backend/src/server/api/endpoints/following/requests/list.ts create mode 100644 packages/backend/src/server/api/endpoints/following/requests/reject.ts create mode 100644 packages/backend/src/server/api/endpoints/following/requests/sent.ts create mode 100644 packages/backend/src/server/api/endpoints/gallery/featured.ts create mode 100644 packages/backend/src/server/api/endpoints/gallery/popular.ts create mode 100644 packages/backend/src/server/api/endpoints/gallery/posts.ts create mode 100644 packages/backend/src/server/api/endpoints/gallery/posts/create.ts create mode 100644 packages/backend/src/server/api/endpoints/gallery/posts/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/gallery/posts/like.ts create mode 100644 packages/backend/src/server/api/endpoints/gallery/posts/show.ts create mode 100644 packages/backend/src/server/api/endpoints/gallery/posts/unlike.ts create mode 100644 packages/backend/src/server/api/endpoints/gallery/posts/update.ts create mode 100644 packages/backend/src/server/api/endpoints/get-online-users-count.ts create mode 100644 packages/backend/src/server/api/endpoints/get-sounds.ts create mode 100644 packages/backend/src/server/api/endpoints/hashtags/list.ts create mode 100644 packages/backend/src/server/api/endpoints/hashtags/search.ts create mode 100644 packages/backend/src/server/api/endpoints/hashtags/show.ts create mode 100644 packages/backend/src/server/api/endpoints/hashtags/trend.ts create mode 100644 packages/backend/src/server/api/endpoints/hashtags/users.ts create mode 100644 packages/backend/src/server/api/endpoints/i.ts create mode 100644 packages/backend/src/server/api/endpoints/i/2fa/done.ts create mode 100644 packages/backend/src/server/api/endpoints/i/2fa/key-done.ts create mode 100644 packages/backend/src/server/api/endpoints/i/2fa/password-less.ts create mode 100644 packages/backend/src/server/api/endpoints/i/2fa/register-key.ts create mode 100644 packages/backend/src/server/api/endpoints/i/2fa/register.ts create mode 100644 packages/backend/src/server/api/endpoints/i/2fa/remove-key.ts create mode 100644 packages/backend/src/server/api/endpoints/i/2fa/unregister.ts create mode 100644 packages/backend/src/server/api/endpoints/i/2fa/update-key.ts create mode 100644 packages/backend/src/server/api/endpoints/i/apps.ts create mode 100644 packages/backend/src/server/api/endpoints/i/authorized-apps.ts create mode 100644 packages/backend/src/server/api/endpoints/i/change-password.ts create mode 100644 packages/backend/src/server/api/endpoints/i/delete-account.ts create mode 100644 packages/backend/src/server/api/endpoints/i/export-blocking.ts create mode 100644 packages/backend/src/server/api/endpoints/i/export-followers.ts create mode 100644 packages/backend/src/server/api/endpoints/i/export-following.ts create mode 100644 packages/backend/src/server/api/endpoints/i/export-mute.ts create mode 100644 packages/backend/src/server/api/endpoints/i/export-notes.ts create mode 100644 packages/backend/src/server/api/endpoints/i/export-user-lists.ts create mode 100644 packages/backend/src/server/api/endpoints/i/favorites.ts create mode 100644 packages/backend/src/server/api/endpoints/i/gallery/likes.ts create mode 100644 packages/backend/src/server/api/endpoints/i/gallery/posts.ts create mode 100644 packages/backend/src/server/api/endpoints/i/get-word-muted-notes-count.ts create mode 100644 packages/backend/src/server/api/endpoints/i/import-blocking.ts create mode 100644 packages/backend/src/server/api/endpoints/i/import-following.ts create mode 100644 packages/backend/src/server/api/endpoints/i/import-muting.ts create mode 100644 packages/backend/src/server/api/endpoints/i/import-posts.ts create mode 100644 packages/backend/src/server/api/endpoints/i/import-user-lists.ts create mode 100644 packages/backend/src/server/api/endpoints/i/known-as.ts create mode 100644 packages/backend/src/server/api/endpoints/i/move.ts create mode 100644 packages/backend/src/server/api/endpoints/i/notifications.ts create mode 100644 packages/backend/src/server/api/endpoints/i/page-likes.ts create mode 100644 packages/backend/src/server/api/endpoints/i/pages.ts create mode 100644 packages/backend/src/server/api/endpoints/i/pin.ts create mode 100644 packages/backend/src/server/api/endpoints/i/read-all-messaging-messages.ts create mode 100644 packages/backend/src/server/api/endpoints/i/read-all-unread-notes.ts create mode 100644 packages/backend/src/server/api/endpoints/i/read-announcement.ts create mode 100644 packages/backend/src/server/api/endpoints/i/regenerate-token.ts create mode 100644 packages/backend/src/server/api/endpoints/i/registry/get-all.ts create mode 100644 packages/backend/src/server/api/endpoints/i/registry/get-detail.ts create mode 100644 packages/backend/src/server/api/endpoints/i/registry/get-unsecure.ts create mode 100644 packages/backend/src/server/api/endpoints/i/registry/get.ts create mode 100644 packages/backend/src/server/api/endpoints/i/registry/keys-with-type.ts create mode 100644 packages/backend/src/server/api/endpoints/i/registry/keys.ts create mode 100644 packages/backend/src/server/api/endpoints/i/registry/remove.ts create mode 100644 packages/backend/src/server/api/endpoints/i/registry/scopes.ts create mode 100644 packages/backend/src/server/api/endpoints/i/registry/set.ts create mode 100644 packages/backend/src/server/api/endpoints/i/revoke-token.ts create mode 100644 packages/backend/src/server/api/endpoints/i/signin-history.ts create mode 100644 packages/backend/src/server/api/endpoints/i/unpin.ts create mode 100644 packages/backend/src/server/api/endpoints/i/update-email.ts create mode 100644 packages/backend/src/server/api/endpoints/i/update.ts create mode 100644 packages/backend/src/server/api/endpoints/i/user-group-invites.ts create mode 100644 packages/backend/src/server/api/endpoints/i/webhooks/create.ts create mode 100644 packages/backend/src/server/api/endpoints/i/webhooks/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/i/webhooks/list.ts create mode 100644 packages/backend/src/server/api/endpoints/i/webhooks/show.ts create mode 100644 packages/backend/src/server/api/endpoints/i/webhooks/update.ts create mode 100644 packages/backend/src/server/api/endpoints/latest-version.ts create mode 100644 packages/backend/src/server/api/endpoints/messaging/history.ts create mode 100644 packages/backend/src/server/api/endpoints/messaging/messages.ts create mode 100644 packages/backend/src/server/api/endpoints/messaging/messages/create.ts create mode 100644 packages/backend/src/server/api/endpoints/messaging/messages/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/messaging/messages/read.ts create mode 100644 packages/backend/src/server/api/endpoints/meta.ts create mode 100644 packages/backend/src/server/api/endpoints/miauth/gen-token.ts create mode 100644 packages/backend/src/server/api/endpoints/mute/create.ts create mode 100644 packages/backend/src/server/api/endpoints/mute/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/mute/list.ts create mode 100644 packages/backend/src/server/api/endpoints/my/apps.ts create mode 100644 packages/backend/src/server/api/endpoints/notes.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/children.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/clips.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/conversation.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/create.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/edit.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/favorites/create.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/favorites/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/featured.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/global-timeline.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/history.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/local-timeline.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/make-private.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/mentions.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/polls/recommendation.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/polls/vote.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/reactions.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/reactions/create.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/reactions/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/recommended-timeline.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/renotes.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/replies.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/search-by-tag.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/search.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/show.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/state.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/thread-muting/create.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/thread-muting/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/timeline.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/translate.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/unrenote.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/watching/create.ts create mode 100644 packages/backend/src/server/api/endpoints/notes/watching/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/notifications/create.ts create mode 100644 packages/backend/src/server/api/endpoints/notifications/mark-all-as-read.ts create mode 100644 packages/backend/src/server/api/endpoints/notifications/read.ts create mode 100644 packages/backend/src/server/api/endpoints/page-push.ts create mode 100644 packages/backend/src/server/api/endpoints/pages/create.ts create mode 100644 packages/backend/src/server/api/endpoints/pages/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/pages/featured.ts create mode 100644 packages/backend/src/server/api/endpoints/pages/like.ts create mode 100644 packages/backend/src/server/api/endpoints/pages/show.ts create mode 100644 packages/backend/src/server/api/endpoints/pages/unlike.ts create mode 100644 packages/backend/src/server/api/endpoints/pages/update.ts create mode 100644 packages/backend/src/server/api/endpoints/ping.ts create mode 100644 packages/backend/src/server/api/endpoints/pinned-users.ts create mode 100644 packages/backend/src/server/api/endpoints/promo/read.ts create mode 100644 packages/backend/src/server/api/endpoints/recommended-instances.ts create mode 100644 packages/backend/src/server/api/endpoints/renote-mute/create.ts create mode 100644 packages/backend/src/server/api/endpoints/renote-mute/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/renote-mute/list.ts create mode 100644 packages/backend/src/server/api/endpoints/reply-mute/create.ts create mode 100644 packages/backend/src/server/api/endpoints/reply-mute/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/reply-mute/list.ts create mode 100644 packages/backend/src/server/api/endpoints/request-reset-password.ts create mode 100644 packages/backend/src/server/api/endpoints/reset-password.ts create mode 100644 packages/backend/src/server/api/endpoints/server-info.ts create mode 100644 packages/backend/src/server/api/endpoints/stats.ts create mode 100644 packages/backend/src/server/api/endpoints/sw/register.ts create mode 100644 packages/backend/src/server/api/endpoints/sw/show-registration.ts create mode 100644 packages/backend/src/server/api/endpoints/sw/unregister.ts create mode 100644 packages/backend/src/server/api/endpoints/sw/update-registration.ts create mode 100644 packages/backend/src/server/api/endpoints/test.ts create mode 100644 packages/backend/src/server/api/endpoints/username/available.ts create mode 100644 packages/backend/src/server/api/endpoints/users.ts create mode 100644 packages/backend/src/server/api/endpoints/users/clips.ts create mode 100644 packages/backend/src/server/api/endpoints/users/followers.ts create mode 100644 packages/backend/src/server/api/endpoints/users/following.ts create mode 100644 packages/backend/src/server/api/endpoints/users/gallery/posts.ts create mode 100644 packages/backend/src/server/api/endpoints/users/get-frequently-replied-users.ts create mode 100644 packages/backend/src/server/api/endpoints/users/groups/create.ts create mode 100644 packages/backend/src/server/api/endpoints/users/groups/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/users/groups/invitations/accept.ts create mode 100644 packages/backend/src/server/api/endpoints/users/groups/invitations/reject.ts create mode 100644 packages/backend/src/server/api/endpoints/users/groups/invite.ts create mode 100644 packages/backend/src/server/api/endpoints/users/groups/joined.ts create mode 100644 packages/backend/src/server/api/endpoints/users/groups/leave.ts create mode 100644 packages/backend/src/server/api/endpoints/users/groups/owned.ts create mode 100644 packages/backend/src/server/api/endpoints/users/groups/pull.ts create mode 100644 packages/backend/src/server/api/endpoints/users/groups/show.ts create mode 100644 packages/backend/src/server/api/endpoints/users/groups/transfer.ts create mode 100644 packages/backend/src/server/api/endpoints/users/groups/update.ts create mode 100644 packages/backend/src/server/api/endpoints/users/lists/create.ts create mode 100644 packages/backend/src/server/api/endpoints/users/lists/delete-all.ts create mode 100644 packages/backend/src/server/api/endpoints/users/lists/delete.ts create mode 100644 packages/backend/src/server/api/endpoints/users/lists/list.ts create mode 100644 packages/backend/src/server/api/endpoints/users/lists/pull.ts create mode 100644 packages/backend/src/server/api/endpoints/users/lists/push.ts create mode 100644 packages/backend/src/server/api/endpoints/users/lists/show.ts create mode 100644 packages/backend/src/server/api/endpoints/users/lists/update.ts create mode 100644 packages/backend/src/server/api/endpoints/users/notes.ts create mode 100644 packages/backend/src/server/api/endpoints/users/pages.ts create mode 100644 packages/backend/src/server/api/endpoints/users/reactions.ts create mode 100644 packages/backend/src/server/api/endpoints/users/recommendation.ts create mode 100644 packages/backend/src/server/api/endpoints/users/relation.ts create mode 100644 packages/backend/src/server/api/endpoints/users/report-abuse.ts create mode 100644 packages/backend/src/server/api/endpoints/users/search-by-username-and-host.ts create mode 100644 packages/backend/src/server/api/endpoints/users/search.ts create mode 100644 packages/backend/src/server/api/endpoints/users/show.ts create mode 100644 packages/backend/src/server/api/endpoints/users/stats.ts create mode 100644 packages/backend/src/server/api/error.ts create mode 100644 packages/backend/src/server/api/index.ts create mode 100644 packages/backend/src/server/api/limiter.ts create mode 100644 packages/backend/src/server/api/logger.ts create mode 100644 packages/backend/src/server/api/mastodon/converters/announcement.ts create mode 100644 packages/backend/src/server/api/mastodon/converters/emoji.ts create mode 100644 packages/backend/src/server/api/mastodon/converters/file.ts create mode 100644 packages/backend/src/server/api/mastodon/converters/mention.ts create mode 100644 packages/backend/src/server/api/mastodon/converters/mfm.ts create mode 100644 packages/backend/src/server/api/mastodon/converters/note.ts create mode 100644 packages/backend/src/server/api/mastodon/converters/notification.ts create mode 100644 packages/backend/src/server/api/mastodon/converters/poll.ts create mode 100644 packages/backend/src/server/api/mastodon/converters/user.ts create mode 100644 packages/backend/src/server/api/mastodon/converters/visibility.ts create mode 100644 packages/backend/src/server/api/mastodon/endpoints/account.ts create mode 100644 packages/backend/src/server/api/mastodon/endpoints/auth.ts create mode 100644 packages/backend/src/server/api/mastodon/endpoints/filter.ts create mode 100644 packages/backend/src/server/api/mastodon/endpoints/list.ts create mode 100644 packages/backend/src/server/api/mastodon/endpoints/media.ts create mode 100644 packages/backend/src/server/api/mastodon/endpoints/misc.ts create mode 100644 packages/backend/src/server/api/mastodon/endpoints/notifications.ts create mode 100644 packages/backend/src/server/api/mastodon/endpoints/search.ts create mode 100644 packages/backend/src/server/api/mastodon/endpoints/status.ts create mode 100644 packages/backend/src/server/api/mastodon/endpoints/streaming.ts create mode 100644 packages/backend/src/server/api/mastodon/endpoints/timeline.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/account.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/activity.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/announcement.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/application.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/async_attachment.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/attachment.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/card.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/context.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/conversation.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/emoji.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/featured_tag.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/field.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/files.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/filter.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/filter_keyword.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/filter_result.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/filter_status.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/history.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/identity_proof.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/instance.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/list.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/marker.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/mention.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/notification.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/oauth/oauth.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/poll.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/poll_option.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/preferences.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/push_subscription.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/reaction.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/relationship.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/report.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/results.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/scheduled_status.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/source.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/stats.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/status.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/status_edit.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/status_params.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/status_source.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/tag.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/token.ts create mode 100644 packages/backend/src/server/api/mastodon/entities/urls.ts create mode 100644 packages/backend/src/server/api/mastodon/entity.ts create mode 100644 packages/backend/src/server/api/mastodon/helpers/auth.ts create mode 100644 packages/backend/src/server/api/mastodon/helpers/list.ts create mode 100644 packages/backend/src/server/api/mastodon/helpers/media.ts create mode 100644 packages/backend/src/server/api/mastodon/helpers/mfm.ts create mode 100644 packages/backend/src/server/api/mastodon/helpers/misc.ts create mode 100644 packages/backend/src/server/api/mastodon/helpers/note.ts create mode 100644 packages/backend/src/server/api/mastodon/helpers/notification.ts create mode 100644 packages/backend/src/server/api/mastodon/helpers/pagination.ts create mode 100644 packages/backend/src/server/api/mastodon/helpers/poll.ts create mode 100644 packages/backend/src/server/api/mastodon/helpers/search.ts create mode 100644 packages/backend/src/server/api/mastodon/helpers/timeline.ts create mode 100644 packages/backend/src/server/api/mastodon/helpers/user.ts create mode 100644 packages/backend/src/server/api/mastodon/index.ts create mode 100644 packages/backend/src/server/api/mastodon/middleware/auth.ts create mode 100644 packages/backend/src/server/api/mastodon/middleware/cache.ts create mode 100644 packages/backend/src/server/api/mastodon/middleware/catch-errors.ts create mode 100644 packages/backend/src/server/api/mastodon/middleware/filter-context.ts create mode 100644 packages/backend/src/server/api/mastodon/middleware/koa-body.ts create mode 100644 packages/backend/src/server/api/mastodon/middleware/normalize-query.ts create mode 100644 packages/backend/src/server/api/mastodon/middleware/pagination.ts create mode 100644 packages/backend/src/server/api/mastodon/middleware/set-headers.ts create mode 100644 packages/backend/src/server/api/mastodon/streaming/channel.ts create mode 100644 packages/backend/src/server/api/mastodon/streaming/channels/direct.ts create mode 100644 packages/backend/src/server/api/mastodon/streaming/channels/list.ts create mode 100644 packages/backend/src/server/api/mastodon/streaming/channels/public.ts create mode 100644 packages/backend/src/server/api/mastodon/streaming/channels/tag.ts create mode 100644 packages/backend/src/server/api/mastodon/streaming/channels/user.ts create mode 100644 packages/backend/src/server/api/mastodon/streaming/index.ts create mode 100644 packages/backend/src/server/api/openapi/errors.ts create mode 100644 packages/backend/src/server/api/openapi/gen-spec.ts create mode 100644 packages/backend/src/server/api/openapi/schemas.ts create mode 100644 packages/backend/src/server/api/private/signin.ts create mode 100644 packages/backend/src/server/api/private/signup-pending.ts create mode 100644 packages/backend/src/server/api/private/signup.ts create mode 100644 packages/backend/src/server/api/private/verify-email.ts create mode 100644 packages/backend/src/server/api/stream/channel.ts create mode 100644 packages/backend/src/server/api/stream/channels/admin.ts create mode 100644 packages/backend/src/server/api/stream/channels/antenna.ts create mode 100644 packages/backend/src/server/api/stream/channels/channel.ts create mode 100644 packages/backend/src/server/api/stream/channels/drive.ts create mode 100644 packages/backend/src/server/api/stream/channels/global-timeline.ts create mode 100644 packages/backend/src/server/api/stream/channels/hashtag.ts create mode 100644 packages/backend/src/server/api/stream/channels/home-timeline.ts create mode 100644 packages/backend/src/server/api/stream/channels/hybrid-timeline.ts create mode 100644 packages/backend/src/server/api/stream/channels/index.ts create mode 100644 packages/backend/src/server/api/stream/channels/local-timeline.ts create mode 100644 packages/backend/src/server/api/stream/channels/main.ts create mode 100644 packages/backend/src/server/api/stream/channels/messaging-index.ts create mode 100644 packages/backend/src/server/api/stream/channels/messaging.ts create mode 100644 packages/backend/src/server/api/stream/channels/queue-stats.ts create mode 100644 packages/backend/src/server/api/stream/channels/recommended-timeline.ts create mode 100644 packages/backend/src/server/api/stream/channels/server-stats.ts create mode 100644 packages/backend/src/server/api/stream/channels/user-list.ts create mode 100644 packages/backend/src/server/api/stream/index.ts create mode 100644 packages/backend/src/server/api/stream/types.ts create mode 100644 packages/backend/src/server/api/streaming.ts create mode 100644 packages/backend/src/server/file/assets/bad-egg.png create mode 100644 packages/backend/src/server/file/assets/cache-expired.png create mode 100644 packages/backend/src/server/file/assets/dummy.png create mode 100644 packages/backend/src/server/file/assets/not-an-image.png create mode 100644 packages/backend/src/server/file/assets/thumbnail-not-available.png create mode 100644 packages/backend/src/server/file/assets/tombstone.png create mode 100644 packages/backend/src/server/file/byte-range-readable.ts create mode 100644 packages/backend/src/server/file/index.ts create mode 100644 packages/backend/src/server/file/send-drive-file.ts create mode 100644 packages/backend/src/server/index.ts create mode 100644 packages/backend/src/server/nodeinfo.ts create mode 100644 packages/backend/src/server/proxy/index.ts create mode 100644 packages/backend/src/server/proxy/proxy-media.ts create mode 100644 packages/backend/src/server/web/bios.css create mode 100644 packages/backend/src/server/web/bios.js create mode 100644 packages/backend/src/server/web/boot.js create mode 100644 packages/backend/src/server/web/cli.css create mode 100644 packages/backend/src/server/web/cli.js create mode 100644 packages/backend/src/server/web/feed.ts create mode 100644 packages/backend/src/server/web/index.ts create mode 100644 packages/backend/src/server/web/manifest.ts create mode 100644 packages/backend/src/server/web/style.css create mode 100644 packages/backend/src/server/web/url-preview.ts create mode 100644 packages/backend/src/server/web/views/base.pug create mode 100644 packages/backend/src/server/web/views/bios.pug create mode 100644 packages/backend/src/server/web/views/channel.pug create mode 100644 packages/backend/src/server/web/views/cli.pug create mode 100644 packages/backend/src/server/web/views/clip.pug create mode 100644 packages/backend/src/server/web/views/flush.pug create mode 100644 packages/backend/src/server/web/views/gallery-post.pug create mode 100644 packages/backend/src/server/web/views/note.pug create mode 100644 packages/backend/src/server/web/views/page.pug create mode 100644 packages/backend/src/server/web/views/user.pug create mode 100644 packages/backend/src/server/well-known.ts create mode 100644 packages/backend/src/services/blocking/create.ts create mode 100644 packages/backend/src/services/blocking/delete.ts create mode 100644 packages/backend/src/services/chart/charts/active-users.ts create mode 100644 packages/backend/src/services/chart/charts/entities/active-users.ts create mode 100644 packages/backend/src/services/chart/core.ts create mode 100644 packages/backend/src/services/chart/entities.ts create mode 100644 packages/backend/src/services/chart/index.ts create mode 100644 packages/backend/src/services/create-notification.ts create mode 100644 packages/backend/src/services/delete-account.ts create mode 100644 packages/backend/src/services/drive/add-file.ts create mode 100644 packages/backend/src/services/drive/delete-file.ts create mode 100644 packages/backend/src/services/drive/generate-video-thumbnail.ts create mode 100644 packages/backend/src/services/drive/image-processor.ts create mode 100644 packages/backend/src/services/drive/internal-storage.ts create mode 100644 packages/backend/src/services/drive/logger.ts create mode 100644 packages/backend/src/services/drive/s3.ts create mode 100644 packages/backend/src/services/drive/upload-from-url.ts create mode 100644 packages/backend/src/services/fetch-instance-metadata.ts create mode 100644 packages/backend/src/services/fetch-rel-me.ts create mode 100644 packages/backend/src/services/following/create.ts create mode 100644 packages/backend/src/services/following/delete.ts create mode 100644 packages/backend/src/services/following/reject.ts create mode 100644 packages/backend/src/services/following/requests/accept-all.ts create mode 100644 packages/backend/src/services/following/requests/accept.ts create mode 100644 packages/backend/src/services/following/requests/cancel.ts create mode 100644 packages/backend/src/services/following/requests/create.ts create mode 100644 packages/backend/src/services/i/pin.ts create mode 100644 packages/backend/src/services/i/update.ts create mode 100644 packages/backend/src/services/insert-moderation-log.ts create mode 100644 packages/backend/src/services/logger.ts create mode 100644 packages/backend/src/services/messages/create.ts create mode 100644 packages/backend/src/services/messages/delete.ts create mode 100644 packages/backend/src/services/note/create.ts create mode 100644 packages/backend/src/services/note/delete.ts create mode 100644 packages/backend/src/services/note/edit.ts create mode 100644 packages/backend/src/services/note/polls/update.ts create mode 100644 packages/backend/src/services/note/polls/vote.ts create mode 100644 packages/backend/src/services/note/reaction/create.ts create mode 100644 packages/backend/src/services/note/reaction/delete.ts create mode 100644 packages/backend/src/services/note/read.ts create mode 100644 packages/backend/src/services/note/unread.ts create mode 100644 packages/backend/src/services/register-or-fetch-instance-doc.ts create mode 100644 packages/backend/src/services/relay.ts create mode 100644 packages/backend/src/services/send-email-notification.ts create mode 100644 packages/backend/src/services/send-email.ts create mode 100644 packages/backend/src/services/suspend-user.ts create mode 100644 packages/backend/src/services/unsuspend-user.ts create mode 100644 packages/backend/src/services/update-hashtag.ts create mode 100644 packages/backend/src/services/user-cache.ts create mode 100644 packages/backend/src/services/user-list/push.ts create mode 100644 packages/backend/src/services/validate-email-for-account.ts create mode 100644 packages/backend/src/types.ts create mode 100644 packages/backend/tsconfig.json create mode 100644 packages/client/.prettierrc create mode 100644 packages/client/.vscode/settings.json create mode 100644 packages/client/@types/global.d.ts create mode 100644 packages/client/@types/theme.d.ts create mode 100644 packages/client/@types/vue.d.ts create mode 100644 packages/client/@types/window.d.ts create mode 100644 packages/client/assets/about-icon.png create mode 100644 packages/client/assets/dummy.png create mode 100644 packages/client/assets/dummy_original.png create mode 100644 packages/client/assets/label-red.svg create mode 100644 packages/client/assets/label.svg create mode 100644 packages/client/assets/misskey.svg create mode 120000 packages/client/assets/prismjs/components create mode 100644 packages/client/assets/tagcanvas.min.js create mode 100644 packages/client/package.json create mode 100644 packages/client/src/account.ts create mode 100644 packages/client/src/cold-store.ts create mode 100644 packages/client/src/components/MkAbuseReport.vue create mode 100644 packages/client/src/components/MkAbuseReportWindow.vue create mode 100644 packages/client/src/components/MkActiveUsersHeatmap.vue create mode 100644 packages/client/src/components/MkAnalogClock.vue create mode 100644 packages/client/src/components/MkAnnouncement.vue create mode 100644 packages/client/src/components/MkAutocomplete.vue create mode 100644 packages/client/src/components/MkAvatars.vue create mode 100644 packages/client/src/components/MkButton.vue create mode 100644 packages/client/src/components/MkCaptcha.vue create mode 100644 packages/client/src/components/MkChannelFollowButton.vue create mode 100644 packages/client/src/components/MkChannelList.vue create mode 100644 packages/client/src/components/MkChannelPreview.vue create mode 100644 packages/client/src/components/MkChart.vue create mode 100644 packages/client/src/components/MkChartTooltip.vue create mode 100644 packages/client/src/components/MkChatPreview.vue create mode 100644 packages/client/src/components/MkCheatSheetDialog.vue create mode 100644 packages/client/src/components/MkCode.core.vue create mode 100644 packages/client/src/components/MkCode.vue create mode 100644 packages/client/src/components/MkContainer.vue create mode 100644 packages/client/src/components/MkContextMenu.vue create mode 100644 packages/client/src/components/MkCropperDialog.vue create mode 100644 packages/client/src/components/MkCwButton.vue create mode 100644 packages/client/src/components/MkDateSeparatedList.vue create mode 100644 packages/client/src/components/MkDialog.vue create mode 100644 packages/client/src/components/MkDigitalClock.vue create mode 100644 packages/client/src/components/MkDonation.vue create mode 100644 packages/client/src/components/MkDrive.file.vue create mode 100644 packages/client/src/components/MkDrive.folder.vue create mode 100644 packages/client/src/components/MkDrive.navFolder.vue create mode 100644 packages/client/src/components/MkDrive.vue create mode 100644 packages/client/src/components/MkDriveFileThumbnail.vue create mode 100644 packages/client/src/components/MkDriveSelectDialog.vue create mode 100644 packages/client/src/components/MkDriveWindow.vue create mode 100644 packages/client/src/components/MkEmojiPicker.section.vue create mode 100644 packages/client/src/components/MkEmojiPicker.vue create mode 100644 packages/client/src/components/MkEmojiPickerDialog.vue create mode 100644 packages/client/src/components/MkFeaturedPhotos.vue create mode 100644 packages/client/src/components/MkFileListForAdmin.vue create mode 100644 packages/client/src/components/MkFileTypeIcon.vue create mode 100644 packages/client/src/components/MkFolder.vue create mode 100644 packages/client/src/components/MkFollowButton.vue create mode 100644 packages/client/src/components/MkForgotPassword.vue create mode 100644 packages/client/src/components/MkFormDialog.vue create mode 100644 packages/client/src/components/MkFormula.vue create mode 100644 packages/client/src/components/MkFormulaCore.vue create mode 100644 packages/client/src/components/MkGalleryPostPreview.vue create mode 100644 packages/client/src/components/MkImageViewer.vue create mode 100644 packages/client/src/components/MkImgWithBlurhash.vue create mode 100644 packages/client/src/components/MkInfo.vue create mode 100644 packages/client/src/components/MkInstanceCardMini.vue create mode 100644 packages/client/src/components/MkInstanceSelectDialog.vue create mode 100644 packages/client/src/components/MkInstanceStats.vue create mode 100644 packages/client/src/components/MkInstanceTicker.vue create mode 100644 packages/client/src/components/MkKeyValue.vue create mode 100644 packages/client/src/components/MkLaunchPad.vue create mode 100644 packages/client/src/components/MkLink.vue create mode 100644 packages/client/src/components/MkManyAnnouncements.vue create mode 100644 packages/client/src/components/MkMarquee.vue create mode 100644 packages/client/src/components/MkMedia.vue create mode 100644 packages/client/src/components/MkMediaBanner.vue create mode 100644 packages/client/src/components/MkMediaCaption.vue create mode 100644 packages/client/src/components/MkMediaList.vue create mode 100644 packages/client/src/components/MkMention.vue create mode 100644 packages/client/src/components/MkMenu.child.vue create mode 100644 packages/client/src/components/MkMenu.vue create mode 100644 packages/client/src/components/MkMiniChart.vue create mode 100644 packages/client/src/components/MkModPlayer.vue create mode 100644 packages/client/src/components/MkModal.vue create mode 100644 packages/client/src/components/MkModalPageWindow.vue create mode 100644 packages/client/src/components/MkModalWindow.vue create mode 100644 packages/client/src/components/MkMoved.vue create mode 100644 packages/client/src/components/MkNote.vue create mode 100644 packages/client/src/components/MkNoteDetailed.vue create mode 100644 packages/client/src/components/MkNotePreview.vue create mode 100644 packages/client/src/components/MkNoteSimple.vue create mode 100644 packages/client/src/components/MkNoteSub.vue create mode 100644 packages/client/src/components/MkNotes.vue create mode 100644 packages/client/src/components/MkNotification.vue create mode 100644 packages/client/src/components/MkNotificationFolded.vue create mode 100644 packages/client/src/components/MkNotificationSettingWindow.vue create mode 100644 packages/client/src/components/MkNotificationToast.vue create mode 100644 packages/client/src/components/MkNotifications.vue create mode 100644 packages/client/src/components/MkNumber.vue create mode 100644 packages/client/src/components/MkNumberDiff.vue create mode 100644 packages/client/src/components/MkObjectView.value.vue create mode 100644 packages/client/src/components/MkObjectView.vue create mode 100644 packages/client/src/components/MkPagePreview.vue create mode 100644 packages/client/src/components/MkPageWindow.vue create mode 100644 packages/client/src/components/MkPagination.vue create mode 100644 packages/client/src/components/MkPoll.vue create mode 100644 packages/client/src/components/MkPollEditor.vue create mode 100644 packages/client/src/components/MkPopupMenu.vue create mode 100644 packages/client/src/components/MkPostForm.vue create mode 100644 packages/client/src/components/MkPostFormAttaches.vue create mode 100644 packages/client/src/components/MkPostFormDialog.vue create mode 100644 packages/client/src/components/MkPostSearch.vue create mode 100644 packages/client/src/components/MkPullToRefresh.vue create mode 100644 packages/client/src/components/MkPushNotificationAllowButton.vue create mode 100644 packages/client/src/components/MkQrCode.vue create mode 100644 packages/client/src/components/MkQuoteButton.vue create mode 100644 packages/client/src/components/MkReactedUsers.vue create mode 100644 packages/client/src/components/MkReactionIcon.vue create mode 100644 packages/client/src/components/MkReactionTooltip.vue create mode 100644 packages/client/src/components/MkReactionsViewer.details.vue create mode 100644 packages/client/src/components/MkReactionsViewer.reaction.vue create mode 100644 packages/client/src/components/MkReactionsViewer.vue create mode 100644 packages/client/src/components/MkRemoteCaution.vue create mode 100644 packages/client/src/components/MkRenoteButton.vue create mode 100644 packages/client/src/components/MkRipple.vue create mode 100644 packages/client/src/components/MkSample.vue create mode 100644 packages/client/src/components/MkSearchBar.vue create mode 100644 packages/client/src/components/MkShowMoreButton.vue create mode 100644 packages/client/src/components/MkSignin.vue create mode 100644 packages/client/src/components/MkSigninDialog.vue create mode 100644 packages/client/src/components/MkSignup.vue create mode 100644 packages/client/src/components/MkSignupDialog.vue create mode 100644 packages/client/src/components/MkSimpleTextWindow.vue create mode 100644 packages/client/src/components/MkSparkle.vue create mode 100644 packages/client/src/components/MkStarButton.vue create mode 100644 packages/client/src/components/MkStarButtonNoEmoji.vue create mode 100644 packages/client/src/components/MkSuperMenu.vue create mode 100644 packages/client/src/components/MkTab.vue create mode 100644 packages/client/src/components/MkTagCloud.vue create mode 100644 packages/client/src/components/MkTimeline.vue create mode 100644 packages/client/src/components/MkToast.vue create mode 100644 packages/client/src/components/MkTokenGenerateWindow.vue create mode 100644 packages/client/src/components/MkTooltip.vue create mode 100644 packages/client/src/components/MkTutorialDialog.vue create mode 100644 packages/client/src/components/MkUpdated.vue create mode 100644 packages/client/src/components/MkUrlPreview.vue create mode 100644 packages/client/src/components/MkUrlPreviewPopup.vue create mode 100644 packages/client/src/components/MkUserCardMini.vue create mode 100644 packages/client/src/components/MkUserInfo.vue create mode 100644 packages/client/src/components/MkUserList.vue create mode 100644 packages/client/src/components/MkUserOnlineIndicator.vue create mode 100644 packages/client/src/components/MkUserPreview.vue create mode 100644 packages/client/src/components/MkUserSelectDialog.vue create mode 100644 packages/client/src/components/MkUserSelectLocalDialog.vue create mode 100644 packages/client/src/components/MkUsersTooltip.vue create mode 100644 packages/client/src/components/MkVisibility.vue create mode 100644 packages/client/src/components/MkVisibilityPicker.vue create mode 100644 packages/client/src/components/MkWaitingDialog.vue create mode 100644 packages/client/src/components/MkWidgets.vue create mode 100644 packages/client/src/components/MkWindow.vue create mode 100644 packages/client/src/components/form/checkbox.vue create mode 100644 packages/client/src/components/form/folder.vue create mode 100644 packages/client/src/components/form/input.vue create mode 100644 packages/client/src/components/form/link.vue create mode 100644 packages/client/src/components/form/radio.vue create mode 100644 packages/client/src/components/form/radios.vue create mode 100644 packages/client/src/components/form/range.vue create mode 100644 packages/client/src/components/form/section.vue create mode 100644 packages/client/src/components/form/select.vue create mode 100644 packages/client/src/components/form/slot.vue create mode 100644 packages/client/src/components/form/split.vue create mode 100644 packages/client/src/components/form/suspense.vue create mode 100644 packages/client/src/components/form/switch.vue create mode 100644 packages/client/src/components/form/textarea.vue create mode 100644 packages/client/src/components/global/MkA.vue create mode 100644 packages/client/src/components/global/MkAcct.vue create mode 100644 packages/client/src/components/global/MkAd.vue create mode 100644 packages/client/src/components/global/MkAvatar.vue create mode 100644 packages/client/src/components/global/MkEllipsis.vue create mode 100644 packages/client/src/components/global/MkEmoji.vue create mode 100644 packages/client/src/components/global/MkError.vue create mode 100644 packages/client/src/components/global/MkLoading.vue create mode 100644 packages/client/src/components/global/MkMisskeyFlavoredMarkdown.vue create mode 100644 packages/client/src/components/global/MkPageHeader.vue create mode 100644 packages/client/src/components/global/MkSpacer.vue create mode 100644 packages/client/src/components/global/MkStickyContainer.vue create mode 100644 packages/client/src/components/global/MkTime.vue create mode 100644 packages/client/src/components/global/MkUrl.vue create mode 100644 packages/client/src/components/global/MkUserName.vue create mode 100644 packages/client/src/components/global/RouterView.vue create mode 100644 packages/client/src/components/global/i18n.ts create mode 100644 packages/client/src/components/index.ts create mode 100644 packages/client/src/components/mfm.ts create mode 100644 packages/client/src/components/note/MkNoteContent.vue create mode 100644 packages/client/src/components/note/MkNoteFooter.vue create mode 100644 packages/client/src/components/note/MkNoteFooterInfo.vue create mode 100644 packages/client/src/components/note/MkNoteHeader.vue create mode 100644 packages/client/src/components/note/MkNoteHeaderInfo.vue create mode 100644 packages/client/src/components/note/MkNoteMedia.vue create mode 100644 packages/client/src/components/note/MkNoteMediaList.vue create mode 100644 packages/client/src/components/note/MkNoteTranslation.vue create mode 100644 packages/client/src/components/note/MkRenoteBar.vue create mode 100644 packages/client/src/components/page/page.block.vue create mode 100644 packages/client/src/components/page/page.button.vue create mode 100644 packages/client/src/components/page/page.canvas.vue create mode 100644 packages/client/src/components/page/page.counter.vue create mode 100644 packages/client/src/components/page/page.if.vue create mode 100644 packages/client/src/components/page/page.image.vue create mode 100644 packages/client/src/components/page/page.note.vue create mode 100644 packages/client/src/components/page/page.number-input.vue create mode 100644 packages/client/src/components/page/page.post.vue create mode 100644 packages/client/src/components/page/page.radio-button.vue create mode 100644 packages/client/src/components/page/page.section.vue create mode 100644 packages/client/src/components/page/page.switch.vue create mode 100644 packages/client/src/components/page/page.text-input.vue create mode 100644 packages/client/src/components/page/page.text.vue create mode 100644 packages/client/src/components/page/page.textarea-input.vue create mode 100644 packages/client/src/components/page/page.textarea.vue create mode 100644 packages/client/src/components/page/page.vue create mode 100644 packages/client/src/config.ts create mode 100644 packages/client/src/const.ts create mode 100644 packages/client/src/directives/adaptive-border.ts create mode 100644 packages/client/src/directives/anim.ts create mode 100644 packages/client/src/directives/appear.ts create mode 100644 packages/client/src/directives/click-anime.ts create mode 100644 packages/client/src/directives/focus.ts create mode 100644 packages/client/src/directives/follow-append.ts create mode 100644 packages/client/src/directives/get-size.ts create mode 100644 packages/client/src/directives/hotkey.ts create mode 100644 packages/client/src/directives/index.ts create mode 100644 packages/client/src/directives/panel.ts create mode 100644 packages/client/src/directives/ripple.ts create mode 100644 packages/client/src/directives/size.ts create mode 100644 packages/client/src/directives/tooltip.ts create mode 100644 packages/client/src/directives/user-preview.ts create mode 100644 packages/client/src/directives/vibrate.ts create mode 100644 packages/client/src/events.ts create mode 100644 packages/client/src/filters/bytes.ts create mode 100644 packages/client/src/filters/note.ts create mode 100644 packages/client/src/filters/number.ts create mode 100644 packages/client/src/filters/user.ts create mode 100644 packages/client/src/i18n.ts create mode 100644 packages/client/src/init.ts create mode 100644 packages/client/src/instance.ts create mode 100644 packages/client/src/me.ts create mode 100644 packages/client/src/navbar.ts create mode 100644 packages/client/src/nirax.ts create mode 100644 packages/client/src/os.ts create mode 100644 packages/client/src/pages/_empty_.vue create mode 100644 packages/client/src/pages/_error_.vue create mode 100644 packages/client/src/pages/_loading_.vue create mode 100644 packages/client/src/pages/about-firefish.vue create mode 100644 packages/client/src/pages/about.emojis.vue create mode 100644 packages/client/src/pages/about.federation.vue create mode 100644 packages/client/src/pages/about.vue create mode 100644 packages/client/src/pages/admin-file.vue create mode 100644 packages/client/src/pages/admin/_header_.vue create mode 100644 packages/client/src/pages/admin/abuses.vue create mode 100644 packages/client/src/pages/admin/announcements.vue create mode 100644 packages/client/src/pages/admin/bot-protection.vue create mode 100644 packages/client/src/pages/admin/custom-css.vue create mode 100644 packages/client/src/pages/admin/database.vue create mode 100644 packages/client/src/pages/admin/email-settings.vue create mode 100644 packages/client/src/pages/admin/emoji-edit-dialog.vue create mode 100644 packages/client/src/pages/admin/emojis.vue create mode 100644 packages/client/src/pages/admin/experiments.vue create mode 100644 packages/client/src/pages/admin/federation.vue create mode 100644 packages/client/src/pages/admin/files.vue create mode 100644 packages/client/src/pages/admin/hashtags.vue create mode 100644 packages/client/src/pages/admin/index.vue create mode 100644 packages/client/src/pages/admin/instance-block.vue create mode 100644 packages/client/src/pages/admin/object-storage.vue create mode 100644 packages/client/src/pages/admin/other-settings.vue create mode 100644 packages/client/src/pages/admin/overview.active-users.vue create mode 100644 packages/client/src/pages/admin/overview.federation.vue create mode 100644 packages/client/src/pages/admin/overview.heatmap.vue create mode 100644 packages/client/src/pages/admin/overview.instances.vue create mode 100644 packages/client/src/pages/admin/overview.metrics.vue create mode 100644 packages/client/src/pages/admin/overview.moderators.vue create mode 100644 packages/client/src/pages/admin/overview.pie.vue create mode 100644 packages/client/src/pages/admin/overview.queue-chart.vue create mode 100644 packages/client/src/pages/admin/overview.queue.chart.vue create mode 100644 packages/client/src/pages/admin/overview.queue.vue create mode 100644 packages/client/src/pages/admin/overview.stats.vue create mode 100644 packages/client/src/pages/admin/overview.user.vue create mode 100644 packages/client/src/pages/admin/overview.users.vue create mode 100644 packages/client/src/pages/admin/overview.vue create mode 100644 packages/client/src/pages/admin/promotions.vue create mode 100644 packages/client/src/pages/admin/proxy-account.vue create mode 100644 packages/client/src/pages/admin/queue.chart.chart.vue create mode 100644 packages/client/src/pages/admin/queue.chart.vue create mode 100644 packages/client/src/pages/admin/queue.vue create mode 100644 packages/client/src/pages/admin/relays.vue create mode 100644 packages/client/src/pages/admin/security.vue create mode 100644 packages/client/src/pages/admin/settings.vue create mode 100644 packages/client/src/pages/admin/users.vue create mode 100644 packages/client/src/pages/announcements.vue create mode 100644 packages/client/src/pages/antenna-timeline.vue create mode 100644 packages/client/src/pages/api-console.vue create mode 100644 packages/client/src/pages/attached-files.vue create mode 100644 packages/client/src/pages/auth.form.vue create mode 100644 packages/client/src/pages/auth.vue create mode 100644 packages/client/src/pages/authorize_interaction.vue create mode 100644 packages/client/src/pages/channel-editor.vue create mode 100644 packages/client/src/pages/channel.vue create mode 100644 packages/client/src/pages/channels.vue create mode 100644 packages/client/src/pages/clip.vue create mode 100644 packages/client/src/pages/drive.vue create mode 100644 packages/client/src/pages/emojis.emoji.vue create mode 100644 packages/client/src/pages/explore.featured.vue create mode 100644 packages/client/src/pages/explore.users.vue create mode 100644 packages/client/src/pages/explore.vue create mode 100644 packages/client/src/pages/favorites.vue create mode 100644 packages/client/src/pages/follow-me.vue create mode 100644 packages/client/src/pages/follow-requests-sent.vue create mode 100644 packages/client/src/pages/follow-requests.vue create mode 100644 packages/client/src/pages/follow.vue create mode 100644 packages/client/src/pages/gallery/edit.vue create mode 100644 packages/client/src/pages/gallery/index.vue create mode 100644 packages/client/src/pages/gallery/post.vue create mode 100644 packages/client/src/pages/instance-info.vue create mode 100644 packages/client/src/pages/messaging/index.vue create mode 100644 packages/client/src/pages/messaging/messaging-room.form.vue create mode 100644 packages/client/src/pages/messaging/messaging-room.message.vue create mode 100644 packages/client/src/pages/messaging/messaging-room.vue create mode 100644 packages/client/src/pages/mfm-cheat-sheet.vue create mode 100644 packages/client/src/pages/miauth.vue create mode 100644 packages/client/src/pages/my-antennas/create.vue create mode 100644 packages/client/src/pages/my-antennas/edit.vue create mode 100644 packages/client/src/pages/my-antennas/editor.vue create mode 100644 packages/client/src/pages/my-antennas/index.vue create mode 100644 packages/client/src/pages/my-clips/index.vue create mode 100644 packages/client/src/pages/my-groups/group.vue create mode 100644 packages/client/src/pages/my-groups/index.vue create mode 100644 packages/client/src/pages/my-lists/index.vue create mode 100644 packages/client/src/pages/my-lists/list.vue create mode 100644 packages/client/src/pages/no-graze.vue create mode 100644 packages/client/src/pages/not-found.vue create mode 100644 packages/client/src/pages/note-history.vue create mode 100644 packages/client/src/pages/note.vue create mode 100644 packages/client/src/pages/notifications.vue create mode 100644 packages/client/src/pages/oauth.vue create mode 100644 packages/client/src/pages/page-editor/els/page-editor.el.button.vue create mode 100644 packages/client/src/pages/page-editor/els/page-editor.el.canvas.vue create mode 100644 packages/client/src/pages/page-editor/els/page-editor.el.counter.vue create mode 100644 packages/client/src/pages/page-editor/els/page-editor.el.if.vue create mode 100644 packages/client/src/pages/page-editor/els/page-editor.el.image.vue create mode 100644 packages/client/src/pages/page-editor/els/page-editor.el.note.vue create mode 100644 packages/client/src/pages/page-editor/els/page-editor.el.number-input.vue create mode 100644 packages/client/src/pages/page-editor/els/page-editor.el.post.vue create mode 100644 packages/client/src/pages/page-editor/els/page-editor.el.radio-button.vue create mode 100644 packages/client/src/pages/page-editor/els/page-editor.el.section.vue create mode 100644 packages/client/src/pages/page-editor/els/page-editor.el.switch.vue create mode 100644 packages/client/src/pages/page-editor/els/page-editor.el.text-input.vue create mode 100644 packages/client/src/pages/page-editor/els/page-editor.el.text.vue create mode 100644 packages/client/src/pages/page-editor/els/page-editor.el.textarea-input.vue create mode 100644 packages/client/src/pages/page-editor/els/page-editor.el.textarea.vue create mode 100644 packages/client/src/pages/page-editor/page-editor.blocks.vue create mode 100644 packages/client/src/pages/page-editor/page-editor.container.vue create mode 100644 packages/client/src/pages/page-editor/page-editor.script-block.vue create mode 100644 packages/client/src/pages/page-editor/page-editor.vue create mode 100644 packages/client/src/pages/page.vue create mode 100644 packages/client/src/pages/pages.vue create mode 100644 packages/client/src/pages/preview.vue create mode 100644 packages/client/src/pages/registry.keys.vue create mode 100644 packages/client/src/pages/registry.value.vue create mode 100644 packages/client/src/pages/registry.vue create mode 100644 packages/client/src/pages/reset-password.vue create mode 100644 packages/client/src/pages/scratchpad.vue create mode 100644 packages/client/src/pages/search.vue create mode 100644 packages/client/src/pages/settings/2fa.qrdialog.vue create mode 100644 packages/client/src/pages/settings/2fa.vue create mode 100644 packages/client/src/pages/settings/accessibility.vue create mode 100644 packages/client/src/pages/settings/account-info.vue create mode 100644 packages/client/src/pages/settings/accounts.vue create mode 100644 packages/client/src/pages/settings/api.vue create mode 100644 packages/client/src/pages/settings/apps.vue create mode 100644 packages/client/src/pages/settings/custom-css.vue create mode 100644 packages/client/src/pages/settings/custom-katex-macro.vue create mode 100644 packages/client/src/pages/settings/deck.vue create mode 100644 packages/client/src/pages/settings/delete-account.vue create mode 100644 packages/client/src/pages/settings/drive.vue create mode 100644 packages/client/src/pages/settings/email.vue create mode 100644 packages/client/src/pages/settings/general.vue create mode 100644 packages/client/src/pages/settings/import-export.vue create mode 100644 packages/client/src/pages/settings/index.vue create mode 100644 packages/client/src/pages/settings/instance-mute.vue create mode 100644 packages/client/src/pages/settings/migration.vue create mode 100644 packages/client/src/pages/settings/mute-block.vue create mode 100644 packages/client/src/pages/settings/navbar.vue create mode 100644 packages/client/src/pages/settings/notifications.vue create mode 100644 packages/client/src/pages/settings/other.vue create mode 100644 packages/client/src/pages/settings/plugin.install.vue create mode 100644 packages/client/src/pages/settings/plugin.vue create mode 100644 packages/client/src/pages/settings/preferences-backups.vue create mode 100644 packages/client/src/pages/settings/privacy.vue create mode 100644 packages/client/src/pages/settings/profile.vue create mode 100644 packages/client/src/pages/settings/reaction.vue create mode 100644 packages/client/src/pages/settings/security.vue create mode 100644 packages/client/src/pages/settings/sounds.vue create mode 100644 packages/client/src/pages/settings/statusbar.statusbar.vue create mode 100644 packages/client/src/pages/settings/statusbar.vue create mode 100644 packages/client/src/pages/settings/theme.install.vue create mode 100644 packages/client/src/pages/settings/theme.manage.vue create mode 100644 packages/client/src/pages/settings/theme.vue create mode 100644 packages/client/src/pages/settings/webhook.edit.vue create mode 100644 packages/client/src/pages/settings/webhook.new.vue create mode 100644 packages/client/src/pages/settings/webhook.vue create mode 100644 packages/client/src/pages/settings/word-mute.vue create mode 100644 packages/client/src/pages/share.vue create mode 100644 packages/client/src/pages/signup-complete.vue create mode 100644 packages/client/src/pages/tag.vue create mode 100644 packages/client/src/pages/theme-editor.vue create mode 100644 packages/client/src/pages/timeline.vue create mode 100644 packages/client/src/pages/user-info.vue create mode 100644 packages/client/src/pages/user-list-timeline.vue create mode 100644 packages/client/src/pages/user/clips.vue create mode 100644 packages/client/src/pages/user/follow-list.vue create mode 100644 packages/client/src/pages/user/followers.vue create mode 100644 packages/client/src/pages/user/following.vue create mode 100644 packages/client/src/pages/user/gallery.vue create mode 100644 packages/client/src/pages/user/home.vue create mode 100644 packages/client/src/pages/user/index.photos.vue create mode 100644 packages/client/src/pages/user/index.timeline.vue create mode 100644 packages/client/src/pages/user/index.vue create mode 100644 packages/client/src/pages/user/media-list.vue create mode 100644 packages/client/src/pages/user/pages.vue create mode 100644 packages/client/src/pages/user/reactions.vue create mode 100644 packages/client/src/pages/verify-email.vue create mode 100644 packages/client/src/pages/welcome.entrance.a.vue create mode 100644 packages/client/src/pages/welcome.entrance.b.vue create mode 100644 packages/client/src/pages/welcome.entrance.c.vue create mode 100644 packages/client/src/pages/welcome.setup.vue create mode 100644 packages/client/src/pages/welcome.timeline.vue create mode 100644 packages/client/src/pages/welcome.vue create mode 100644 packages/client/src/pizzax.ts create mode 100644 packages/client/src/plugin.ts create mode 100644 packages/client/src/router.ts create mode 100644 packages/client/src/scripts/2fa.ts create mode 100644 packages/client/src/scripts/aiscript/api.ts create mode 100644 packages/client/src/scripts/array.ts create mode 100644 packages/client/src/scripts/autocomplete.ts create mode 100644 packages/client/src/scripts/chart-vline.ts create mode 100644 packages/client/src/scripts/check-word-mute.ts create mode 100644 packages/client/src/scripts/chiptune2.ts create mode 100644 packages/client/src/scripts/clone.ts create mode 100644 packages/client/src/scripts/collect-page-vars.ts create mode 100644 packages/client/src/scripts/color.ts create mode 100644 packages/client/src/scripts/consts.ts create mode 100644 packages/client/src/scripts/contains.ts create mode 100644 packages/client/src/scripts/copy-to-clipboard.ts create mode 100644 packages/client/src/scripts/device-kind.ts create mode 100644 packages/client/src/scripts/emojilist.ts create mode 100644 packages/client/src/scripts/extract-avg-color-from-blurhash.ts create mode 100644 packages/client/src/scripts/extract-mentions.ts create mode 100644 packages/client/src/scripts/extract-mfm.ts create mode 100644 packages/client/src/scripts/extract-url-from-mfm.ts create mode 100644 packages/client/src/scripts/focus.ts create mode 100644 packages/client/src/scripts/fold.ts create mode 100644 packages/client/src/scripts/form.ts create mode 100644 packages/client/src/scripts/format-time-string.ts create mode 100644 packages/client/src/scripts/get-account-from-id.ts create mode 100644 packages/client/src/scripts/get-note-menu.ts create mode 100644 packages/client/src/scripts/get-note-summary.ts create mode 100644 packages/client/src/scripts/get-static-image-url.ts create mode 100644 packages/client/src/scripts/get-user-menu.ts create mode 100644 packages/client/src/scripts/get-user-name.ts create mode 100644 packages/client/src/scripts/helpMenu.ts create mode 100644 packages/client/src/scripts/hotkey.ts create mode 100644 packages/client/src/scripts/hpml/block.ts create mode 100644 packages/client/src/scripts/hpml/evaluator.ts create mode 100644 packages/client/src/scripts/hpml/expr.ts create mode 100644 packages/client/src/scripts/hpml/index.ts create mode 100644 packages/client/src/scripts/hpml/lib.ts create mode 100644 packages/client/src/scripts/hpml/type-checker.ts create mode 100644 packages/client/src/scripts/icon.ts create mode 100644 packages/client/src/scripts/idb-proxy.ts create mode 100644 packages/client/src/scripts/init-chart.ts create mode 100644 packages/client/src/scripts/initialize-sw.ts create mode 100644 packages/client/src/scripts/intl-const.ts create mode 100644 packages/client/src/scripts/is-device-darkmode.ts create mode 100644 packages/client/src/scripts/katex-macro.ts create mode 100644 packages/client/src/scripts/keycode.ts create mode 100644 packages/client/src/scripts/langmap.ts create mode 100644 packages/client/src/scripts/language-utils.ts create mode 100644 packages/client/src/scripts/login-id.ts create mode 100644 packages/client/src/scripts/lookup-file.ts create mode 100644 packages/client/src/scripts/lookup-instance.ts create mode 100644 packages/client/src/scripts/lookup-user.ts create mode 100644 packages/client/src/scripts/media-proxy.ts create mode 100644 packages/client/src/scripts/mfm-tags.ts create mode 100644 packages/client/src/scripts/note.ts create mode 100644 packages/client/src/scripts/page-metadata.ts create mode 100644 packages/client/src/scripts/physics.ts create mode 100644 packages/client/src/scripts/please-login.ts create mode 100644 packages/client/src/scripts/popout.ts create mode 100644 packages/client/src/scripts/popup-position.ts create mode 100644 packages/client/src/scripts/preprocess.ts create mode 100644 packages/client/src/scripts/prism.ts create mode 100644 packages/client/src/scripts/reaction-picker.ts create mode 100644 packages/client/src/scripts/reduced-motion.ts create mode 100644 packages/client/src/scripts/safe-uri-decode.ts create mode 100644 packages/client/src/scripts/scroll.ts create mode 100644 packages/client/src/scripts/search.ts create mode 100644 packages/client/src/scripts/select-file.ts create mode 100644 packages/client/src/scripts/share-available.ts create mode 100644 packages/client/src/scripts/show-note-context-menu.ts create mode 100644 packages/client/src/scripts/shuffle.ts create mode 100644 packages/client/src/scripts/sound.ts create mode 100644 packages/client/src/scripts/theme-editor.ts create mode 100644 packages/client/src/scripts/theme.ts create mode 100644 packages/client/src/scripts/time.ts create mode 100644 packages/client/src/scripts/timezones.ts create mode 100644 packages/client/src/scripts/touch.ts create mode 100644 packages/client/src/scripts/twemoji-base.ts create mode 100644 packages/client/src/scripts/unison-reload.ts create mode 100644 packages/client/src/scripts/upload.ts create mode 100644 packages/client/src/scripts/url.ts create mode 100644 packages/client/src/scripts/use-chart-tooltip.ts create mode 100644 packages/client/src/scripts/use-interval.ts create mode 100644 packages/client/src/scripts/use-leave-guard.ts create mode 100644 packages/client/src/scripts/use-note-capture.ts create mode 100644 packages/client/src/scripts/use-tooltip.ts create mode 100644 packages/client/src/scripts/vibrate.ts create mode 100644 packages/client/src/store.ts create mode 100644 packages/client/src/stream.ts create mode 100644 packages/client/src/style.scss create mode 100644 packages/client/src/theme-store.ts create mode 100644 packages/client/src/themes/_dark.json5 create mode 100644 packages/client/src/themes/_light.json5 create mode 100644 packages/client/src/themes/d-astro.json5 create mode 100644 packages/client/src/themes/d-botanical.json5 create mode 100644 packages/client/src/themes/d-catppuccin-frappe.json5 create mode 100644 packages/client/src/themes/d-catppuccin-mocha.json5 create mode 100644 packages/client/src/themes/d-cherry.json5 create mode 100644 packages/client/src/themes/d-dark.json5 create mode 100644 packages/client/src/themes/d-future.json5 create mode 100644 packages/client/src/themes/d-green-lime.json5 create mode 100644 packages/client/src/themes/d-green-orange.json5 create mode 100644 packages/client/src/themes/d-gruvbox.json5 create mode 100644 packages/client/src/themes/d-ice.json5 create mode 100644 packages/client/src/themes/d-nord.json5 create mode 100644 packages/client/src/themes/d-persimmon.json5 create mode 100644 packages/client/src/themes/d-rosepine.json5 create mode 100644 packages/client/src/themes/d-rosepinemoon.json5 create mode 100644 packages/client/src/themes/d-u0.json5 create mode 100644 packages/client/src/themes/l-apricot.json5 create mode 100644 packages/client/src/themes/l-catppuccin-latte.json5 create mode 100644 packages/client/src/themes/l-cherry.json5 create mode 100644 packages/client/src/themes/l-coffee.json5 create mode 100644 packages/client/src/themes/l-gruvbox.json5 create mode 100644 packages/client/src/themes/l-light.json5 create mode 100644 packages/client/src/themes/l-nord.json5 create mode 100644 packages/client/src/themes/l-rainy.json5 create mode 100644 packages/client/src/themes/l-rosepinedawn.json5 create mode 100644 packages/client/src/themes/l-sushi.json5 create mode 100644 packages/client/src/themes/l-u0.json5 create mode 100644 packages/client/src/themes/l-vivid.json5 create mode 100644 packages/client/src/types/form.ts create mode 100644 packages/client/src/types/menu.ts create mode 100644 packages/client/src/types/note.ts create mode 100644 packages/client/src/types/notification.ts create mode 100644 packages/client/src/types/page.ts create mode 100644 packages/client/src/types/post-form.ts create mode 100644 packages/client/src/types/relation.ts create mode 100644 packages/client/src/ui/_common_/common.vue create mode 100644 packages/client/src/ui/_common_/navbar-for-mobile.vue create mode 100644 packages/client/src/ui/_common_/navbar.vue create mode 100644 packages/client/src/ui/_common_/statusbar-federation.vue create mode 100644 packages/client/src/ui/_common_/statusbar-rss.vue create mode 100644 packages/client/src/ui/_common_/statusbar-user-list.vue create mode 100644 packages/client/src/ui/_common_/statusbars.vue create mode 100644 packages/client/src/ui/_common_/stream-indicator.vue create mode 100644 packages/client/src/ui/_common_/sw-inject.ts create mode 100644 packages/client/src/ui/_common_/upload.vue create mode 100644 packages/client/src/ui/deck.vue create mode 100644 packages/client/src/ui/deck/antenna-column.vue create mode 100644 packages/client/src/ui/deck/channel-column.vue create mode 100644 packages/client/src/ui/deck/column-core.vue create mode 100644 packages/client/src/ui/deck/column.vue create mode 100644 packages/client/src/ui/deck/deck-store.ts create mode 100644 packages/client/src/ui/deck/direct-column.vue create mode 100644 packages/client/src/ui/deck/list-column.vue create mode 100644 packages/client/src/ui/deck/main-column.vue create mode 100644 packages/client/src/ui/deck/mentions-column.vue create mode 100644 packages/client/src/ui/deck/notifications-column.vue create mode 100644 packages/client/src/ui/deck/tl-column.vue create mode 100644 packages/client/src/ui/deck/widgets-column.vue create mode 100644 packages/client/src/ui/universal.vue create mode 100644 packages/client/src/ui/universal.widgets.vue create mode 100644 packages/client/src/ui/visitor.vue create mode 100644 packages/client/src/ui/visitor/a.vue create mode 100644 packages/client/src/ui/visitor/b.vue create mode 100644 packages/client/src/ui/visitor/header.vue create mode 100644 packages/client/src/ui/visitor/kanban.vue create mode 100644 packages/client/src/ui/zen.vue create mode 100644 packages/client/src/widgets/aiscript.vue create mode 100644 packages/client/src/widgets/button.vue create mode 100644 packages/client/src/widgets/calendar.vue create mode 100644 packages/client/src/widgets/clock.vue create mode 100644 packages/client/src/widgets/digital-clock.vue create mode 100644 packages/client/src/widgets/federation.vue create mode 100644 packages/client/src/widgets/index.ts create mode 100644 packages/client/src/widgets/instance-cloud.vue create mode 100644 packages/client/src/widgets/job-queue.vue create mode 100644 packages/client/src/widgets/memo.vue create mode 100644 packages/client/src/widgets/notifications.vue create mode 100644 packages/client/src/widgets/online-users.vue create mode 100644 packages/client/src/widgets/photos.vue create mode 100644 packages/client/src/widgets/post-form.vue create mode 100644 packages/client/src/widgets/rss-ticker.vue create mode 100644 packages/client/src/widgets/rss.vue create mode 100644 packages/client/src/widgets/server-info.vue create mode 100644 packages/client/src/widgets/server-metric/cpu-mem.vue create mode 100644 packages/client/src/widgets/server-metric/cpu.vue create mode 100644 packages/client/src/widgets/server-metric/disk.vue create mode 100644 packages/client/src/widgets/server-metric/index.vue create mode 100644 packages/client/src/widgets/server-metric/mem.vue create mode 100644 packages/client/src/widgets/server-metric/pie.vue create mode 100644 packages/client/src/widgets/slideshow.vue create mode 100644 packages/client/src/widgets/timeline.vue create mode 100644 packages/client/src/widgets/trends.vue create mode 100644 packages/client/src/widgets/unix-clock.vue create mode 100644 packages/client/src/widgets/user-list.vue create mode 100644 packages/client/src/widgets/widget.ts create mode 100644 packages/client/tsconfig.json create mode 100644 packages/client/vite.config.ts create mode 100644 packages/client/vite.json5.ts create mode 100644 packages/firefish-js/.gitignore create mode 100644 packages/firefish-js/LICENSE create mode 100644 packages/firefish-js/README.md create mode 100644 packages/firefish-js/jest.config.ts create mode 100644 packages/firefish-js/package.json create mode 100644 packages/firefish-js/src/acct.ts create mode 100644 packages/firefish-js/src/api.ts create mode 100644 packages/firefish-js/src/api.types.ts create mode 100644 packages/firefish-js/src/consts.ts create mode 100644 packages/firefish-js/src/entities.ts create mode 100644 packages/firefish-js/src/index.ts create mode 100644 packages/firefish-js/src/misc/langmap.ts create mode 100644 packages/firefish-js/src/misc/schema.ts create mode 100644 packages/firefish-js/src/schema/abuse-user-report.ts create mode 100644 packages/firefish-js/src/schema/antenna.ts create mode 100644 packages/firefish-js/src/schema/app.ts create mode 100644 packages/firefish-js/src/schema/blocking.ts create mode 100644 packages/firefish-js/src/schema/channel.ts create mode 100644 packages/firefish-js/src/schema/clip.ts create mode 100644 packages/firefish-js/src/schema/drive-file.ts create mode 100644 packages/firefish-js/src/schema/drive-folder.ts create mode 100644 packages/firefish-js/src/schema/emoji.ts create mode 100644 packages/firefish-js/src/schema/federation-instance.ts create mode 100644 packages/firefish-js/src/schema/following.ts create mode 100644 packages/firefish-js/src/schema/gallery-post.ts create mode 100644 packages/firefish-js/src/schema/hashtag.ts create mode 100644 packages/firefish-js/src/schema/messaging-message.ts create mode 100644 packages/firefish-js/src/schema/muting.ts create mode 100644 packages/firefish-js/src/schema/note-edit.ts create mode 100644 packages/firefish-js/src/schema/note-favorite.ts create mode 100644 packages/firefish-js/src/schema/note-file.ts create mode 100644 packages/firefish-js/src/schema/note-reaction.ts create mode 100644 packages/firefish-js/src/schema/note.ts create mode 100644 packages/firefish-js/src/schema/notification.ts create mode 100644 packages/firefish-js/src/schema/page.ts create mode 100644 packages/firefish-js/src/schema/queue.ts create mode 100644 packages/firefish-js/src/schema/renote-muting.ts create mode 100644 packages/firefish-js/src/schema/reply-muting.ts create mode 100644 packages/firefish-js/src/schema/user-group.ts create mode 100644 packages/firefish-js/src/schema/user-list.ts create mode 100644 packages/firefish-js/src/schema/user.ts create mode 100644 packages/firefish-js/src/streaming.ts create mode 100644 packages/firefish-js/src/streaming.types.ts create mode 100644 packages/firefish-js/src/type-utils.ts create mode 100644 packages/firefish-js/test-d/api.ts create mode 100644 packages/firefish-js/test-d/streaming.ts create mode 100644 packages/firefish-js/test/api.test.ts create mode 100644 packages/firefish-js/test/streaming.test.ts create mode 100644 packages/firefish-js/tsconfig.json create mode 100644 packages/macro-rs/LICENSE-APACHE create mode 100644 packages/macro-rs/LICENSE-MIT create mode 100644 packages/macro-rs/macros-impl/Cargo.toml create mode 100644 packages/macro-rs/macros-impl/src/error.rs create mode 100644 packages/macro-rs/macros-impl/src/lib.rs create mode 100644 packages/macro-rs/macros-impl/src/napi.rs create mode 100644 packages/macro-rs/macros-impl/src/util/mod.rs create mode 100644 packages/macro-rs/macros-impl/src/util/tester.rs create mode 100644 packages/macro-rs/macros/Cargo.toml create mode 100644 packages/macro-rs/macros/src/helper.rs create mode 100644 packages/macro-rs/macros/src/lib.rs create mode 100644 packages/sw/package.json create mode 100644 packages/sw/src/@types/global.d.ts create mode 100644 packages/sw/src/scripts/create-notification.ts create mode 100644 packages/sw/src/scripts/get-account-from-id.ts create mode 100644 packages/sw/src/scripts/get-user-name.ts create mode 100644 packages/sw/src/scripts/i18n.ts create mode 100644 packages/sw/src/scripts/lang.ts create mode 100644 packages/sw/src/scripts/login-id.ts create mode 100644 packages/sw/src/scripts/notification-read.ts create mode 100644 packages/sw/src/scripts/operations.ts create mode 100644 packages/sw/src/scripts/twemoji-base.ts create mode 100644 packages/sw/src/sw.ts create mode 100644 packages/sw/src/types.ts create mode 100644 packages/sw/tsconfig.json create mode 100644 packages/sw/vite.config.ts create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml create mode 100644 renovate.json create mode 100644 scripts/clean-built.mjs create mode 100644 scripts/clean-npm.mjs create mode 100644 scripts/copy-assets.mjs create mode 100644 scripts/copy-index-dev.mjs create mode 100644 scripts/copy-index.mjs create mode 100644 scripts/dev.mjs create mode 100644 title.svg diff --git a/.config/LICENSE b/.config/LICENSE new file mode 100644 index 0000000..cb57aef --- /dev/null +++ b/.config/LICENSE @@ -0,0 +1,13 @@ +Copyright 2023 Firefish + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/.config/ci.yml b/.config/ci.yml new file mode 100644 index 0000000..b3578fb --- /dev/null +++ b/.config/ci.yml @@ -0,0 +1,11 @@ +url: http://localhost:3000 +port: 3000 +db: + host: postgres + port: 5432 + db: firefish_db + user: firefish + pass: password +redis: + host: redis + port: 6379 diff --git a/.config/devenv.yml b/.config/devenv.yml new file mode 100644 index 0000000..3c98091 --- /dev/null +++ b/.config/devenv.yml @@ -0,0 +1,20 @@ +url: http://localhost:3030 +port: 3030 + +db: + host: firefish_db + port: 5432 + + db: firefish_db + user: firefish + pass: password + +redis: + host: firefish_redis + port: 6379 + +#allowedPrivateNetworks: [ +# '10.69.1.0/24' +#] + +maxLogLevel: 'debug' diff --git a/.config/docker_ci.env b/.config/docker_ci.env new file mode 100644 index 0000000..437b8eb --- /dev/null +++ b/.config/docker_ci.env @@ -0,0 +1,4 @@ +# db settings +POSTGRES_PASSWORD=test +POSTGRES_USER=postgres +POSTGRES_DB=postgres diff --git a/.config/docker_example.env b/.config/docker_example.env new file mode 100644 index 0000000..25314d7 --- /dev/null +++ b/.config/docker_example.env @@ -0,0 +1,4 @@ +# db settings +POSTGRES_PASSWORD=example-firefish-pass +POSTGRES_USER=example-firefish-user +POSTGRES_DB=firefish diff --git a/.config/example.yml b/.config/example.yml new file mode 100644 index 0000000..75ee713 --- /dev/null +++ b/.config/example.yml @@ -0,0 +1,238 @@ +#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +# Firefish configuration +#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +# After starting your server, please don't change the URL! Doing so will break federation. + +# ┌─────┐ +#───┘ URL └───────────────────────────────────────────────────── + +# Final accessible URL seen by a user. +url: https://example.com/ + +# ┌───────────────────────┐ +#───┘ Port and TLS settings └─────────────────────────────────── + +# +# Firefish requires a reverse proxy to support HTTPS connections. +# +# +----- https://example.com/ ------------+ +# +------+ |+-------------+ +----------------+| +# | User | ---> || Proxy (443) | ---> | Firefish (3000) || +# +------+ |+-------------+ +----------------+| +# +---------------------------------------+ +# +# You need to set up a reverse proxy. (e.g. nginx, caddy) +# An encrypted connection with HTTPS is highly recommended +# because tokens may be transferred in GET requests. + +# The port that your Firefish server should listen on. +port: 3000 + +# The bind host your Firefish server should listen on. +# If unspecified, the wildcard address will be used. +#bind: 127.0.0.1 + +# ┌──────────────────────────┐ +#───┘ PostgreSQL configuration └──────────────────────────────── + +db: + host: localhost + port: 5432 + #ssl: false + # Database name + db: firefish_db + + # Auth + user: firefish + pass: password + + # Whether disable Caching queries + #disableCache: true + + # Extra Connection options + #extra: + # ssl: + # host: localhost + # rejectUnauthorized: false + +# ┌─────────────────────┐ +#───┘ Redis configuration └───────────────────────────────────── + +redis: + host: localhost + port: 6379 + #tls: + # host: localhost + # rejectUnauthorized: false + #family: 0 # 0=Both, 4=IPv4, 6=IPv6 + #pass: example-pass + #prefix: example-prefix + #db: 1 + #user: default + +# ┌─────────────────────────────┐ +#───┘ Cache server configuration └───────────────────────────────────── + +# A Redis-compatible server (DragonflyDB, Keydb, Redis) for caching +# If left blank, it will use the Redis server from above + +#cacheServer: + #host: localhost + #port: 6379 + #family: 0 # 0=Both, 4=IPv4, 6=IPv6 + #pass: example-pass + #prefix: example-prefix + #db: 1 + +# ┌───────────────┐ +#───┘ ID generation └─────────────────────────────────────────── + +# No need to uncomment in most cases, but you may want to change +# these settings if you plan to run a large and/or distributed server. + +# cuid: +# # Min 16, Max 24 +# length: 16 +# +# # Set this to a unique string across workers (e.g., machine's hostname) +# # if your workers are running in multiple hosts. +# fingerprint: my-fingerprint + + +# ┌─────────────────────┐ +#───┘ Other configuration └───────────────────────────────────── + +# Maximum length of a post (default 3000, max 100000) +#maxNoteLength: 3000 + +# Maximum length of an image caption (default 1500, max 8192) +#maxCaptionLength: 1500 + +# Reserved usernames that only the administrator can register with +reservedUsernames: [ + 'root', + 'admin', + 'administrator', + 'me', + 'system' +] + +# Whether disable HSTS +#disableHsts: true + +# Number of worker processes by type. +# The sum must not exceed the number of available cores. +#clusterLimits: +# web: 1 +# queue: 1 + +# Job concurrency per worker +# deliverJobConcurrency: 128 +# inboxJobConcurrency: 16 + +# Job rate limiter +# deliverJobPerSec: 128 +# inboxJobPerSec: 16 + +# Job attempts +# deliverJobMaxAttempts: 12 +# inboxJobMaxAttempts: 8 + +# Local address used for outgoing requests +#outgoingAddress: 127.0.0.1 + +# IP address family used for outgoing request (ipv4, ipv6 or dual) +#outgoingAddressFamily: ipv4 + +# Log level (error, warning, info, debug, trace) +# Production env: info +# Production env whose storage space or IO is tight: warning +# Debug/Test env or Troubleshooting: debug (or trace) +maxLogLevel: info + +# Syslog option +#syslog: +# host: localhost +# port: 514 + +# Proxy for HTTP/HTTPS +#proxy: http://127.0.0.1:3128 + +#proxyBypassHosts: [ +# 'web.kaiteki.app', +# 'example.com', +# '192.0.2.8' +#] + +# Proxy for SMTP/SMTPS +#proxySmtp: http://127.0.0.1:3128 # use HTTP/1.1 CONNECT +#proxySmtp: socks4://127.0.0.1:1080 # use SOCKS4 +#proxySmtp: socks5://127.0.0.1:1080 # use SOCKS5 + +# Media Proxy +#mediaProxy: https://example.com/proxy + +# Proxy remote files (default: true) +#proxyRemoteFiles: true + +#allowedPrivateNetworks: [ +# '127.0.0.1/32' +#] + +# Upload or download file size limits (bytes) +#maxFileSize: 262144000 + +#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +# Congrats, you've reached the end of the config file needed for most deployments! +# Enjoy your Firefish server! +#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + + + +#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +# Managed hosting settings +# >>> NORMAL SELF-HOSTERS, STAY AWAY! <<< +# >>> YOU DON'T NEED THIS! <<< +# Each category is optional, but if each item in each category is mandatory! +# If you mess this up, that's on you, you've been warned... +#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +#maxUserSignups: 100 +#isManagedHosting: true +#deepl: +# managed: true +# authKey: '' +# isPro: false +# +#email: +# managed: true +# address: 'example@email.com' +# host: 'email.com' +# port: 587 +# user: 'example@email.com' +# pass: '' +# useImplicitSslTls: false +# +#objectStorage: +# managed: true +# baseUrl: '' +# bucket: '' +# prefix: '' +# endpoint: '' +# region: '' +# accessKey: '' +# secretKey: '' +# useSsl: true +# connnectOverProxy: false +# setPublicReadOnUpload: true +# s3ForcePathStyle: true + +# !!!!!!!!!! +# >>>>>> AGAIN, NORMAL SELF-HOSTERS, STAY AWAY! <<<<<< +# >>>>>> YOU DON'T NEED THIS, ABOVE SETTINGS ARE FOR MANAGED HOSTING ONLY! <<<<<< +# !!!!!!!!!! + +# Seriously. Do NOT fill out the above settings if you're self-hosting. +# They're much better off being set from the control panel. diff --git a/.config/helm_values_example.yml b/.config/helm_values_example.yml new file mode 100644 index 0000000..5c86acc --- /dev/null +++ b/.config/helm_values_example.yml @@ -0,0 +1,82 @@ +replicaCount: 1 + +resources: + requests: + cpu: 0.5 + memory: 512Mi + limits: + cpu: 1 + memory: 1Gi + +firefish: + domain: example.tld + smtp: + from_address: noreply@example.tld + port: 587 + server: smtp.gmail.com + useImplicitSslTls: false + login: me@example.tld + password: CHANGEME + objectStorage: + baseUrl: https://example-bucket.nyc3.cdn.digitaloceanspaces.com + access_key: CHANGEME + access_secret: CHANGEME + bucket: example-bucket + endpoint: nyc3.digitaloceanspaces.com:443 + region: nyc3 + allowedPrivateNetworks: [] + +ingress: + enabled: true + annotations: + cert-manager.io/cluster-issuer: letsencrypt + hosts: + - host: example.tld + paths: + - path: / + pathType: ImplementationSpecific + tls: + - secretName: example-tld-certificate + hosts: + - example.tld + +elasticsearch: + enabled: false + +postgresql: + auth: + password: CHANGEME + postgresPassword: CHANGEME + primary: + persistence: + enabled: true + storageClass: vultr-block-storage + size: 25Gi + resources: + requests: + cpu: 0.25 + memory: 256Mi + limits: + cpu: 0.5 + memory: 512Mi + metrics: + enabled: true + +redis: + auth: + password: CHANGEME + master: + resources: + requests: + cpu: 0.25 + memory: 256Mi + limits: + cpu: 0.5 + memory: 256Mi + persistence: + storageclass: vultr-block-storage + size: 10Gi + replica: + replicaCount: 0 + metrics: + enabled: true diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3345168 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,62 @@ +# Visual Studio Code +.vscode + +# Intelij-IDEA +.idea + +# Node.js +node_modules +**/node_modules +report.*.json + +# Rust +/target + +# Coverage +coverage + +# config +/.config + +# misskey +built +db +elasticsearch +redis +npm-debug.log +*.pem +run.bat +api-docs.json +*.log +*.code-workspace +.DS_Store +files +ormconfig.json +packages/backend/assets/instance.css + +# dockerignore custom +.git +.gitignore +.gitattributes +.weblate +animated.svg +compose.yml +docker-compose.yml +docker-compose.example.yml +title.svg +/.gitlab +/ci +/dev +/docs +/scripts +!/scripts/copy-index.mjs +!/scripts/copy-assets.mjs +biome.json +CODE_OF_CONDUCT.md +CONTRIBUTING.md +Dockerfile +Makefile +README.md +SECURITY.md +patrons.json +renovate.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..fc36346 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +root = true + +[*] +indent_style = tab +indent_size = 2 +charset = utf-8 +insert_final_newline = true + +[*.rs] +indent_style = space +indent_size = 4 + +[*.yml] +indent_style = space diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..a175917 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,7 @@ +*.svg -diff -text +*.psd -diff -text +*.ai -diff -text +*.mqo -diff -text +*.glb -diff -text +*.blend -diff -text +*.afdesign -diff -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bb4aadf --- /dev/null +++ b/.gitignore @@ -0,0 +1,79 @@ +# Visual Studio Code +/.vscode +!/.vscode/extensions.json +!/.vscode/launch.json +/.history/ + +# Intelij-IDEA +/.idea +packages/backend/.idea/backend.iml +packages/backend/.idea/modules.xml +packages/backend/.idea/vcs.xml + +# Node.js +node_modules +report.*.json + +# Cargo +/.cargo +/target + +# Cypress +cypress/screenshots +cypress/videos + +# Coverage +coverage + +# config +/.config/* +!/.config/example.yml +!/.config/devenv.yml +!/.config/docker_example.env +!/.config/docker_ci.env +!/.config/helm_values_example.yml +!/.config/LICENSE +/docker-compose.yml +/compose.yml +/custom/* +!/custom/LICENSE + +# ESLint +.eslintcache + +# misskey +built +/db +/redis +npm-debug.log +*.pem +run.bat +api-docs.json +*.log +*.code-workspace +.DS_Store +/files +ormconfig.json +packages/backend/assets/instance.css +packages/backend/assets/sounds/None.mp3 +packages/backend/assets/LICENSE + +dev/container/firefish +dev/container/db +dev/container/redis +dev/config.env + +# blender backups +*.blend1 +*.blend2 +*.blend3 +*.blend4 +*.blend5 + +# old yarn +.yarn +yarn* + +# Cargo cache for Docker +/.cargo-cache +/.cargo-target diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..d8275a7 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,366 @@ +image: docker.io/rust:slim-bookworm + +services: + - name: docker.io/groonga/pgroonga:latest-alpine-12-slim + alias: postgres + pull_policy: if-not-present + - name: docker.io/redis:7-alpine + alias: redis + pull_policy: if-not-present + +workflow: + rules: + - if: $CI_PROJECT_PATH == 'firefish/firefish' || $CI_MERGE_REQUEST_PROJECT_PATH == 'firefish/firefish' + changes: + paths: + - packages/**/* + - locales/**/* + - scripts/**/* + - package.json + - Cargo.toml + - Cargo.lock + - Dockerfile + - .dockerignore + when: always + - when: never + +stages: + - test + - doc + - build + - dependency + - clean + - manage + +variables: + POSTGRES_DB: 'firefish_db' + POSTGRES_USER: 'firefish' + POSTGRES_PASSWORD: 'password' + POSTGRES_HOST_AUTH_METHOD: 'trust' + DEBIAN_FRONTEND: 'noninteractive' + NODE_OPTIONS: '--max_old_space_size=3072' + CARGO_PROFILE_DEV_OPT_LEVEL: '0' + CARGO_PROFILE_DEV_LTO: 'off' + CARGO_PROFILE_DEV_DEBUG: 'none' + CARGO_TERM_COLOR: 'always' + GIT_CLEAN_FLAGS: -ffdx -e node_modules/ -e built/ -e target/ -e packages/backend-rs/built/ -e ci/target-msrv/ + +default: + before_script: + - apt-get update && apt-get -y upgrade + - apt-get -y --no-install-recommends install curl + - curl -fsSL 'https://deb.nodesource.com/setup_18.x' | bash - + - apt-get install -y --no-install-recommends build-essential clang mold python3 perl nodejs postgresql-client + - corepack enable + - corepack prepare pnpm@latest --activate + - cp .config/ci.yml .config/default.yml + - cp ci/cargo/config.toml /usr/local/cargo/config.toml + - export PGPASSWORD="${POSTGRES_PASSWORD}" + - psql --host postgres --user "${POSTGRES_USER}" --dbname "${POSTGRES_DB}" --command 'CREATE EXTENSION pgroonga' + +test:build: + stage: test + rules: + - if: $TEST == 'true' + when: always + - if: $TEST == 'false' + when: never + - if: $CI_COMMIT_BRANCH == 'develop' || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'develop' + changes: + paths: + - packages/backend-rs/**/* + - packages/macro-rs/**/* + - scripts/**/* + - package.json + - Cargo.toml + - Cargo.lock + when: always + needs: + - job: cargo:clippy + optional: true + - job: cargo:test + optional: true + script: + - pnpm install --frozen-lockfile + - pnpm run build:debug + - pnpm run migrate + - psql --host postgres --user "${POSTGRES_USER}" --dbname "${POSTGRES_DB}" --command "$(cat docs/downgrade.sql)" + +test:build:backend_ts: + stage: test + rules: + - if: $TEST == 'true' + when: always + - if: $TEST == 'false' + when: never + - if: $CI_COMMIT_BRANCH == 'develop' || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'develop' + changes: + paths: + - packages/backend-rs/**/* + - packages/macro-rs/**/* + - scripts/**/* + - package.json + - Cargo.toml + - Cargo.lock + - docs/downgrade.sql + when: never + - if: $CI_COMMIT_BRANCH == 'develop' || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'develop' + changes: + paths: + - packages/backend/**/* + - packages/firefish-js/**/* + when: always + before_script: + - apt-get update && apt-get -y upgrade + - apt-get -y --no-install-recommends install curl + - curl -fsSL 'https://deb.nodesource.com/setup_18.x' | bash - + - apt-get install -y --no-install-recommends build-essential clang mold python3 perl nodejs postgresql-client + - corepack enable + - corepack prepare pnpm@latest --activate + - mkdir -p packages/backend-rs/built + - cp packages/backend-rs/index.js packages/backend-rs/built/index.js + - cp packages/backend-rs/index.d.ts packages/backend-rs/built/index.d.ts + - cp ci/cargo/config.toml /usr/local/cargo/config.toml + - test -f packages/backend-rs/built/backend-rs.linux-x64-gnu.node || pnpm install --frozen-lockfile + - test -f packages/backend-rs/built/backend-rs.linux-x64-gnu.node || pnpm --filter 'backend-rs' run build:debug + - cp .config/ci.yml .config/default.yml + - export PGPASSWORD="${POSTGRES_PASSWORD}" + - psql --host postgres --user "${POSTGRES_USER}" --dbname "${POSTGRES_DB}" --command 'CREATE EXTENSION pgroonga' + script: + - pnpm install --frozen-lockfile + - pnpm --filter 'backend' --filter 'firefish-js' run build:debug + - pnpm run migrate + - psql --host postgres --user "${POSTGRES_USER}" --dbname "${POSTGRES_DB}" --command "$(cat docs/downgrade.sql)" + +test:build:client: + stage: test + rules: + - if: $TEST == 'true' + when: always + - if: $TEST == 'false' + when: never + - if: $CI_COMMIT_BRANCH == 'develop' || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'develop' + changes: + paths: + - packages/backend-rs/**/* + - packages/macro-rs/**/* + - scripts/**/* + - package.json + - Cargo.toml + - Cargo.lock + when: never + - if: $CI_COMMIT_BRANCH == 'develop' || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'develop' + changes: + paths: + - packages/client/**/* + - packages/firefish-js/**/* + - packages/sw/**/* + - locales/**/* + when: always + services: [] + before_script: + - apt-get update && apt-get -y upgrade + - apt-get -y --no-install-recommends install curl + - curl -fsSL 'https://deb.nodesource.com/setup_18.x' | bash - + - apt-get install -y --no-install-recommends build-essential python3 perl nodejs + - corepack enable + - corepack prepare pnpm@latest --activate + - cp .config/ci.yml .config/default.yml + script: + - pnpm install --frozen-lockfile + - pnpm --filter 'firefish-js' --filter 'client' --filter 'sw' run build:debug + +build:container: + stage: build + image: docker.io/debian:trixie-slim + services: [] + rules: + - if: $BUILD && $CI_PIPELINE_SOURCE == 'schedule' + variables: + STORAGE_DRIVER: overlay + before_script: + - apt-get update && apt-get -y upgrade + - |- + sed -i -r 's/"version": "([-0-9]+)",/"version": "\1-dev",/' package.json + - apt-get install -y --no-install-recommends ca-certificates fuse-overlayfs buildah + - echo "${CI_REGISTRY_PASSWORD}" | buildah login --username "${CI_REGISTRY_USER}" --password-stdin "${CI_REGISTRY}" + - export IMAGE_TAG_1="${CI_REGISTRY}/${CI_PROJECT_PATH}/develop:not-for-production" + - export IMAGE_TAG_2="${CI_REGISTRY}/${CI_PROJECT_PATH}/develop:not-for-production-$(date +%Y%m%d)" + - buildah version + script: + - |- + buildah build \ + --isolation chroot \ + --device=/dev/fuse:rw \ + --security-opt seccomp=unconfined \ + --security-opt apparmor=unconfined \ + --cap-add all \ + --platform linux/amd64 \ + --tag "${IMAGE_TAG_1}" \ + --tag "${IMAGE_TAG_2}" \ + . + - buildah inspect "${IMAGE_TAG_1}" + - buildah push "${IMAGE_TAG_1}" + - buildah push "${IMAGE_TAG_2}" + +cargo:check:msrv: + stage: test + image: docker.io/rust:1.74-slim-bookworm + rules: + - if: $TEST == 'true' + when: always + - if: $TEST == 'false' + when: never + - if: $CI_COMMIT_BRANCH == 'develop' || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'develop' + changes: + paths: + - packages/backend-rs/**/* + - packages/macro-rs/**/* + - Cargo.toml + - Cargo.lock + when: always + services: [] + before_script: + - apt-get update && apt-get -y upgrade + - apt-get install -y --no-install-recommends build-essential clang mold python3 perl nodejs postgresql-client + - cp ci/cargo/config.toml /usr/local/cargo/config.toml + - export CARGO_TARGET_DIR='ci/target-msrv' + script: + - cargo fetch --locked --manifest-path Cargo.toml + - cargo check --locked --frozen --all-features + +cargo:test: + stage: test + rules: + - if: $TEST == 'true' + when: always + - if: $TEST == 'false' + when: never + - if: $CI_COMMIT_BRANCH == 'develop' || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'develop' + changes: + paths: + - packages/backend-rs/**/* + - packages/macro-rs/**/* + - Cargo.toml + - Cargo.lock + when: always + script: + - curl -LsSf https://get.nexte.st/latest/linux | tar zxf - -C /usr/local/cargo/bin + - cargo test --doc + - cargo nextest run + +cargo:clippy: + stage: test + rules: + - if: $TEST == 'true' + when: always + - if: $TEST == 'false' + when: never + - if: $CI_COMMIT_BRANCH == 'develop' || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'develop' + changes: + paths: + - packages/backend-rs/**/* + - packages/macro-rs/**/* + when: always + services: [] + before_script: + - apt-get update && apt-get -y upgrade + - apt-get install -y --no-install-recommends build-essential clang mold perl + - cp ci/cargo/config.toml /usr/local/cargo/config.toml + - rustup component add clippy + script: + - cargo clippy -- -D warnings + +cargo:doc: + stage: doc + rules: + - if: $DOC == 'true' + when: always + - if: $DOC == 'false' + when: never + - if: $CI_COMMIT_BRANCH == 'develop' + changes: + paths: + - packages/backend-rs/**/* + - packages/macro-rs/**/* + - Cargo.toml + - Cargo.lock + - package.json + when: always + services: [] + before_script: + - apt-get update + - apt-get install -y --no-install-recommends build-essential clang mold nodejs npm + - cp ci/cargo/config.toml /usr/local/cargo/config.toml + script: + - cargo doc --document-private-items + - printf 'window.ALL_CRATES = ["backend_rs", "macros", "macros_impl"];' > target/doc/crates.js + - printf '' 'backend_rs' > target/doc/index.html + - cd target/doc + - npx --yes netlify-cli deploy --prod --site="${CARGO_DOC_SITE_ID}" --dir=. + +cargo:test:miri: + stage: test + rules: + - if: $MIRI + script: + - export RUST_BACKTRACE=1 + - export CARGO_TARGET_DIR='ci/target-miri' + - export MIRI_NIGHTLY=nightly-$(curl -s https://rust-lang.github.io/rustup-components-history/x86_64-unknown-linux-gnu/miri) + - curl -LsSf https://get.nexte.st/latest/linux | tar zxf - -C /usr/local/cargo/bin + - rustup set profile minimal + - rustup override set "${MIRI_NIGHTLY}" + - rustup component add miri + - MIRIFLAGS='-Zmiri-disable-isolation' cargo miri nextest run -j$(nproc --all) + +renovate: + stage: dependency + image: + name: docker.io/renovate/renovate:37-slim + entrypoint: [""] + rules: + - if: $RENOVATE && $CI_PIPELINE_SOURCE == 'schedule' + services: [] + before_script: [] + script: + - renovate --platform gitlab --token "${API_TOKEN}" --endpoint "${CI_SERVER_URL}/api/v4" "${CI_PROJECT_PATH}" + +clean: + stage: clean + rules: + - if: $CLEAN && $CI_PIPELINE_SOURCE == 'schedule' + services: [] + before_script: + - apt-get update && apt-get -y upgrade + - apt-get -y --no-install-recommends install curl + - curl -fsSL 'https://deb.nodesource.com/setup_18.x' | bash - + - apt-get install -y --no-install-recommends nodejs + - corepack enable + - corepack prepare pnpm@latest --activate + - pnpm install --frozen-lockfile + script: + - pnpm run clean-all + +add-issue-labels: + stage: manage + rules: + - if: $ADD_LABEL && $CI_PIPELINE_SOURCE == 'schedule' + image: registry.firefish.dev/firefish/gitlab-issue-labels + variables: + GITLAB_HOST: "firefish.dev" + services: [] + before_script: [] + script: + - gitlab-issue-labels + +close-stalled-issues: + stage: manage + rules: + - if: $CLOSE_STALLED && $CI_PIPELINE_SOURCE == 'schedule' + image: registry.firefish.dev/firefish/gitlab-issue-labels + variables: + GITLAB_HOST: "firefish.dev" + services: [] + before_script: [] + script: + - gitlab-issue-labels diff --git a/.gitlab/issue_templates/default.md b/.gitlab/issue_templates/default.md new file mode 100644 index 0000000..b606d65 --- /dev/null +++ b/.gitlab/issue_templates/default.md @@ -0,0 +1,99 @@ + + + + +## What type of issue is this? + + + + + + + + + + + + + + + +* label: Bug + +## What happened? + + + +## What did you expect to happen? + + + +## Steps to reproduce the issue + + + +## Reproduces how often + + + +## What did you try to solve the issue / Do you have any insights + + + +## Version + + + +
+ +### Instance + + + +### What browser are you using? (client-side issues only) + + +### What operating system are you using? (client-side issues only) + + +### How do you deploy Firefish on your server? (server-side issues only) + + +### What operating system are you using? (Server-side issues only) + + +### Relevant log output + + + +
+ +## Contribution Guidelines +By submitting this issue, you agree to follow our [Contribution Guidelines](https://firefish.dev/firefish/firefish/-/blob/develop/CONTRIBUTING.md) +- [ ] I agree to follow this project's Contribution Guidelines +- [ ] I have searched the issue tracker for similar issues, and this is not a duplicate. + +## Are you willing to fix this bug? (optional) +- [ ] Yes, I will open a merge request that closes this ticket. + + + diff --git a/.gitlab/issue_templates/discussion.md b/.gitlab/issue_templates/discussion.md new file mode 100644 index 0000000..bc930f3 --- /dev/null +++ b/.gitlab/issue_templates/discussion.md @@ -0,0 +1,82 @@ + + + + +## What type of issue is this? + + + + + + + + + + + + + + + +* label: Discussion + +## What do you think needs to be discussed? + + + +## Relevant information (optional) + + +## Version + + + +
+ +### Instance + + + +### What browser are you using? (client-side issues only) + + +### What operating system are you using? (client-side issues only) + + +### How do you deploy Firefish on your server? (server-side issues only) + + +### What operating system are you using? (Server-side issues only) + + +
+ +## Contribution Guidelines +By submitting this issue, you agree to follow our [Contribution Guidelines](https://firefish.dev/firefish/firefish/-/blob/develop/CONTRIBUTING.md) +- [ ] I agree to follow this project's Contribution Guidelines +- [ ] I have searched the issue tracker for similar issues, and this is not a duplicate. + +## Are you willing to open a merge request? (optional) +- [ ] Yes, I will open a merge request that closes this ticket. + + + diff --git a/.gitlab/issue_templates/feature.md b/.gitlab/issue_templates/feature.md new file mode 100644 index 0000000..1eb2a71 --- /dev/null +++ b/.gitlab/issue_templates/feature.md @@ -0,0 +1,67 @@ + + + + +## What type of feature is this? + + + + + + + + + + + + + + + +* label: Feature + +## What feature would you like implemented? + + + +## Why should we add this feature? + + + +## Version + + + +## Instance + + + +## Contribution Guidelines +By submitting this issue, you agree to follow our [Contribution Guidelines](https://firefish.dev/firefish/firefish/-/blob/develop/CONTRIBUTING.md) +- [ ] I agree to follow this project's Contribution Guidelines +- [ ] I have searched the issue tracker for similar requests, and this is not a duplicate. + +## Are you willing to implement this feature? (optional) +- [ ] Yes, I will open a merge request that closes this ticket. + + + diff --git a/.gitlab/issue_templates/refactor.md b/.gitlab/issue_templates/refactor.md new file mode 100644 index 0000000..ab9a544 --- /dev/null +++ b/.gitlab/issue_templates/refactor.md @@ -0,0 +1,67 @@ + + + + +## What type of refactoring is this? + + + + + + + + + + + + + + + +* label: Refactor + +## What parts of the code do you think should be refactored? + + + +## Why should the code be refactored that way? + + + +## Version + + + +## Instance + + + +## Contribution Guidelines +By submitting this issue, you agree to follow our [Contribution Guidelines](https://firefish.dev/firefish/firefish/-/blob/develop/CONTRIBUTING.md) +- [ ] I agree to follow this project's Contribution Guidelines +- [ ] I have searched the issue tracker for similar requests, and this is not a duplicate. + +## Are you willing to refactor the code? (optional) +- [ ] Yes, I will open a merge request that closes this ticket. + + + diff --git a/.gitlab/merge_request_templates/default.md b/.gitlab/merge_request_templates/default.md new file mode 100644 index 0000000..7a37db2 --- /dev/null +++ b/.gitlab/merge_request_templates/default.md @@ -0,0 +1,18 @@ + + +## What does this merge request do? + + + +## Contribution Guidelines +By submitting this merge request, you agree to follow our [Contribution Guidelines](https://firefish.dev/firefish/firefish/-/blob/develop/CONTRIBUTING.md) +- [ ] This closes #0000 (please substitute the issue number or open a new one unless this is a minor fix/refactor) +- [ ] I agree to follow this project's Contribution Guidelines +- [ ] I have made sure to test this merge request +- [ ] I have made sure to run `pnpm run format` before submitting this merge request + +If this merge request makes changes to API, please update `docs/api-change.md` +- [ ] I updated the document / This merge request doesn't include API changes + + + diff --git a/.gitlab/merge_request_templates/release.md b/.gitlab/merge_request_templates/release.md new file mode 100644 index 0000000..6b83d5f --- /dev/null +++ b/.gitlab/merge_request_templates/release.md @@ -0,0 +1,18 @@ + +/label Release + +## Checklist + +- [ ] There are no pending changes on Weblate + +I have updated... + +- [ ] `package.json` +- [ ] `docs/changelog.md` +- [ ] `docs/notice-for-admins.md` +- [ ] `docs/api-change.md` +- [ ] `packages/backend-rs/index.js` +- [ ] OCI container image + +## Remarks + diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..3820527 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,22 @@ +{ + "recommendations": [ + "editorconfig.editorconfig", + "vue.volar", + "arcanis.vscode-zipfs", + "orta.vscode-twoslash-queries", + "antfu.iconify", + "vivaxy.vscode-conventional-commits", + "ms-azuretools.vscode-docker", + "gitlab.gitlab-workflow", + "mrmlnc.vscode-json5", + "esbenp.prettier-vscode", + "redhat.vscode-yaml", + "yoavbls.pretty-ts-errors", + "biomejs.biome", + "rust-lang.rust-analyzer", + "vadimcn.vscode-lldb", + "fill-labs.dependi", + "tamasfe.even-better-toml", + "aaron-bond.better-comments" + ] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..84ce986 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,20 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Launch PNPM Debug Script", + "skipFiles": [ + "/**" + ], + "runtimeExecutable": "pnpm", + "runtimeArgs": [ + "run", "debug" + ] + } + ] +} diff --git a/.weblate b/.weblate new file mode 100644 index 0000000..56430a1 --- /dev/null +++ b/.weblate @@ -0,0 +1,3 @@ +[weblate] +url = https://hosted.weblate.org/api/ +translation = firefish/locales diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..4f215e8 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,136 @@ + +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, caste, color, religion, or sexual +identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the overall + community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or advances of + any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email address, + without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +@thatonecalculator on Codeberg, +`@kainoa@firefish.social` on the Fediverse, +or kainoa@t1c.dev via email. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of +actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or permanent +ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the +community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.1, available at +[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. + +Community Impact Guidelines were inspired by +[Mozilla's code of conduct enforcement ladder][Mozilla CoC]. + +For answers to common questions about this code of conduct, see the FAQ at +[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at +[https://www.contributor-covenant.org/translations][translations]. + +[homepage]: https://www.contributor-covenant.org +[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html +[Mozilla CoC]: https://github.com/mozilla/diversity +[FAQ]: https://www.contributor-covenant.org/faq +[translations]: https://www.contributor-covenant.org/translations + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..f6e3ff4 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,80 @@ +# Contribution guide +We're glad you're interested in contributing Firefish! In this document you will find the information you need to contribute to the project. + +## Translation (i18n) +Firefish uses [Weblate](https://hosted.weblate.org/engage/firefish/) for translation and internationalization management. + +If your language is not listed in Weblate, please open an issue. + +You can contribute without knowing how to code by helping translate here: + +[![Translation status](https://hosted.weblate.org/widgets/firefish/-/287x66-grey.png)](https://hosted.weblate.org/engage/firefish/) + +[![Translation bars](https://hosted.weblate.org/widgets/firefish/-/multi-auto.svg)](https://hosted.weblate.org/engage/firefish/) + +## Issues +Before creating an issue, please check the following: +- To avoid duplication, please search for similar issues before creating a new issue. +- Do not use Issues to ask questions or troubleshooting. + - Issues should only be used to feature requests, suggestions, and bug tracking. + - Please ask questions or troubleshooting in the [Matrix room](https://matrix.to/#/#firefish-community:nitro.chat). + +> **Warning** +> Do not close issues that are about to be resolved. It should remain open until a commit that actually resolves it is merged. + +## Coding + +### Preparing a development environment + +You can prepare your local Firefish environment in multiple ways: + +- [Run Firefish and databases on your host](../dev/docs/local-installation.md) +- [Run Firefish on your host and databases in containers](../dev/docs/db-container.md) +- [Run Firefish and databases in containers](../dev/docs/container.md) + +### Before implementation +When you want to add a feature or fix a bug, **first have the design and policy reviewed in an Issue** (if it is not there, please make one). Without this step, there is a high possibility that the MR will not be merged even if it is implemented. + +At this point, you also need to clarify the goals of the MR you will create, and make sure that the other members of the team are aware of them. +MRs that do not have a clear set of do's and don'ts tend to be bloated and difficult to review. + +Also, when you start implementation, assign yourself to the Issue (if you cannot do it yourself, ask another member to assign you). By expressing your intention to work the Issue, you can prevent conflicts in the work. + +### Well-known branches +- The **`main`** branch is tracking the latest release and used for production purposes. +- The **`develop`** branch is where we work for the next release. + - When you create a MR, basically target it to this branch. **But create a different branch** +- The **`l10n_develop`** branch is reserved for localization management. +- **`feature/*`** branches are reserved for the development of a specific feature + +### Creating a merge request (MR) +Thank you for your MR! Before creating a MR, please check the following: +- If possible, prefix the title with a keyword that identifies the type of this MR, as shown below. + - `fix` / `refactor` / `feat` / `enhance` / `perf` / `chore` etc. You are also welcome to use gitmoji. This is important as we use these to A) easier read the git history and B) generate our changelog. Without propper prefixing it is possible that your MR is rejected. + - Also, make sure that the granularity of this MR is appropriate. Please do not include more than one type of change or interest in a single MR. +- If there is an Issue which will be resolved by this MR, please include a reference to the Issue in the text. Good examples include `Closing: #21` or `Resolves: #21` +- Check if there are any documents that need to be created or updated due to this change. + - For example, you need to update `docs/api-change.md` if the MR includes API changes. +- If you have added a feature or fixed a bug, please add a test case if possible. +- Please make sure that formatting, tests and Lint are passed in advance. + - You can run it with `pnpm run format`, `pnpm run test` and `pnpm run lint`. [See more info](#testing) +- If this MR includes UI changes, please attach a screenshot in the text. + +Thanks for your cooperation 🤗 + +## Reviewers guide +Be willing to comment on the good points and not just the things you want fixed 💯 + +### Review perspective +- Scope + - Are the goals of the MR clear? + - Is the granularity of the MR appropriate? +- Security + - Does merging this MR create a vulnerability? +- Performance + - Will merging this MR cause unexpected performance degradation? + - Is there a more efficient way? +- Testing + - Does the test ensure the expected behavior? + - Are there any omissions or gaps? + - Does it check for anomalies? diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..1a9296e --- /dev/null +++ b/COPYING @@ -0,0 +1,60 @@ +Unless specified otherwise, the entirety of this repository is subject to the following: +Copyright (c) 2014-2023 syuilo and contributors +Copyright (c) 2022-2023 Kainoa Kanter and contributors +Copyright (c) 2024 Firefish contributors + +And is distributed under The GNU Affero General Public License Version 3, you should have received a copy of the license file as LICENSE. + +--- + +The packages/macro-rs directory and their contents are +Copyright (c) 2024 Firefish contributors + +And are distributed under either of The Apache Licence, Version 2.0 +or The MIT License at your option. See these files for details: + +- packages/macro-rs/LICENSE-MIT +- packages/macro-rs/LICENSE-APACHE + +--- + +The packages/firefish-js directory and their contents are +Copyright (c) 2021-2022 syuilo and contributors +Copyright (c) 2022-2023 Kainoa Kanter and contributors +Copyright (c) 2024 Firefish contributors + +And are distributed under The MIT License. +See packages/firefish-js/LICENSE for details. + +--- + +These specific configuration directories: + +- .config/ +- custom/ + +and their contents are +Copyright (c) 2022-2023 Kainoa Kanter and contributors +Copyright (c) 2024 Firefish contributors + +And are distributed under The Apache License, Version 2.0, you should have received a copy of the license file as LICENSE in each specified directory. + +--- + +Firefish includes several third-party open-source softwares and software libraries. + +RsaSignature2017 implementation by Transmute Industries Inc +License: MIT +https://github.com/transmute-industries/RsaSignature2017/blob/master/LICENSE + +Chiptune2.js by Simon Gündling +License: MIT +https://github.com/deskjet/chiptune2.js#license + +bb8-redis by Kyle Huey +License: MIT +https://github.com/djc/bb8/blob/62597aa45ac1746780b08cb6a68cf7d65452a23a/LICENSE + +Licenses for all softwares and software libraries installed via the Node Package Manager ("npm") can be found by running the following shell command in the root directory of this repository: + +pnpm licenses list diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..974715a --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,4481 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "aliasable" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" + +[[package]] +name = "aligned-vec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" + +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" + +[[package]] +name = "arc-swap" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" + +[[package]] +name = "arg_enum_proc_macro" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "argon2" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" +dependencies = [ + "base64ct", + "blake2", + "cpufeatures", + "password-hash", +] + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener", + "futures-core", +] + +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "async-trait" +version = "0.1.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "av1-grain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf" +dependencies = [ + "anyhow", + "arrayvec", + "log", + "nom", + "num-rational", + "v_frame", +] + +[[package]] +name = "avif-serialize" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876c75a42f6364451a033496a14c44bffe41f5f4a8236f697391f11024e596d2" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "backend-rs" +version = "0.0.0" +dependencies = [ + "argon2", + "async-trait", + "basen", + "bb8", + "bcrypt", + "chrono", + "cuid2", + "emojis", + "futures-util", + "idna 1.0.2", + "image", + "isahc", + "macros", + "napi", + "napi-build", + "napi-derive", + "nom-exif", + "once_cell", + "openssl", + "pretty_assertions", + "rand", + "redis", + "regex", + "rmp-serde", + "sea-orm", + "serde", + "serde_json", + "serde_yaml", + "sysinfo", + "thiserror", + "tokio", + "tokio-test", + "tracing", + "tracing-subscriber", + "url", + "urlencoding", + "web-push", + "zhconv", +] + +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "basen" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dbe4bb73fd931c4d1aaf53b35d1286c8a948ad00ec92c8e3c856f15fd027f43" + +[[package]] +name = "bb8" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b10cf871f3ff2ce56432fddc2615ac7acc3aa22ca321f8fea800846fbb32f188" +dependencies = [ + "async-trait", + "futures-util", + "tokio", +] + +[[package]] +name = "bcrypt" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e65938ed058ef47d92cf8b346cc76ef48984572ade631927e9937b5ffc7662c7" +dependencies = [ + "base64 0.22.1", + "blowfish", + "getrandom", + "subtle", +] + +[[package]] +name = "binstring" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e0d60973d9320722cb1206f412740e162a33b8547ea8d6be75d7cff237c7a85" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +dependencies = [ + "serde", +] + +[[package]] +name = "bitstream-io" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c12d1856e42f0d817a835fe55853957c85c8c8a470114029143d3f12671446e" + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blowfish" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7" +dependencies = [ + "byteorder", + "cipher", +] + +[[package]] +name = "built" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "236e6289eda5a812bc6b53c3b024039382a2895fbbeef2d748b2931546d392c4" + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "bytemuck" +version = "1.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + +[[package]] +name = "bytes" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" + +[[package]] +name = "castaway" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" + +[[package]] +name = "cc" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-targets 0.52.6", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "coarsetime" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b3839cf01bb7960114be3ccf2340f541b6d0c81f8690b007b2b39f750f7e5d" +dependencies = [ + "libc", + "wasix", + "wasm-bindgen", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", + "tokio-util", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "const-oid" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6f2aa4d0537bcc1c74df8755072bd31c1ef1a3a1b85a68e8404a8c353b7b8b" + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "ct-codecs" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3b7eb4404b8195a9abb6356f4ac07d8ba267045c8d6d220ac4dc992e6cc75df" + +[[package]] +name = "ctor" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" +dependencies = [ + "quote", + "syn 2.0.72", +] + +[[package]] +name = "cuid-util" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ea2bfe0336ff1b7ca74819b2df8dfae9afea358aff6b1688baa5c181d8c3713" + +[[package]] +name = "cuid2" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d99cacd52fd67db7490ad051c8c1973fb75520174d69aabbae08c534c9d0e8" +dependencies = [ + "cuid-util", + "num", + "rand", + "sha3", +] + +[[package]] +name = "curl" +version = "0.4.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e2161dd6eba090ff1594084e95fd67aeccf04382ffea77999ea94ed42ec67b6" +dependencies = [ + "curl-sys", + "libc", + "openssl-probe", + "openssl-sys", + "schannel", + "socket2", + "windows-sys 0.52.0", +] + +[[package]] +name = "curl-sys" +version = "0.4.73+curl-8.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "450ab250ecf17227c39afb9a2dd9261dc0035cb80f2612472fc0c4aac2dcb84d" +dependencies = [ + "cc", + "libc", + "libnghttp2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", + "windows-sys 0.52.0", +] + +[[package]] +name = "daachorse" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b7ef7a4be509357f4804d0a22e830daddb48f19fd604e4ad32ddce04a94c36" + +[[package]] +name = "der" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79b71cca7d95d7681a4b3b9cdf63c8dbc3730d0584c2c74e31416d64a90493f4" +dependencies = [ + "const-oid 0.6.2", + "der_derive", +] + +[[package]] +name = "der" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" +dependencies = [ + "const-oid 0.9.6", + "pem-rfc7468 0.6.0", + "zeroize", +] + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid 0.9.6", + "pem-rfc7468 0.7.0", + "zeroize", +] + +[[package]] +name = "der_derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8aed3b3c608dc56cf36c45fe979d04eda51242e6703d8d0bb03426ef7c41db6a" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "synstructure 0.12.6", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid 0.9.6", + "crypto-common", + "subtle", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der 0.7.9", + "digest", + "elliptic-curve", + "rfc6979", + "signature 2.2.0", + "spki 0.7.3", +] + +[[package]] +name = "ece" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2ea1d2f2cc974957a4e2575d8e5bb494549bab66338d6320c2789abcfff5746" +dependencies = [ + "base64 0.21.7", + "byteorder", + "hex", + "hkdf", + "lazy_static", + "once_cell", + "openssl", + "serde", + "sha2", + "thiserror", +] + +[[package]] +name = "ed25519-compact" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9b3460f44bea8cd47f45a0c70892f1eff856d97cd55358b2f73f663789f6190" +dependencies = [ + "ct-codecs", + "getrandom", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +dependencies = [ + "serde", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "hkdf", + "pem-rfc7468 0.7.0", + "pkcs8 0.10.2", + "rand_core", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "emojis" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e72f23d65b46527e461b161ab9a126c378aa2249d8a8d15718d23ab1fb4d8786" +dependencies = [ + "phf", +] + +[[package]] +name = "encoding_rs" +version = "0.8.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "etcetera" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +dependencies = [ + "cfg-if", + "home", + "windows-sys 0.48.0", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" + +[[package]] +name = "fdeflate" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core", + "subtle", +] + +[[package]] +name = "flate2" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "flume" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +dependencies = [ + "futures-core", + "futures-sink", + "spin", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-intrusive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +dependencies = [ + "futures-core", + "lock_api", + "parking_lot", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "gif" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "gimli" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core", + "subtle", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "hashlink" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +dependencies = [ + "hashbrown", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "hmac-sha1-compact" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9d405ec732fa3fcde87264e54a32a84956a377b3e3107de96e59b798c84a7" + +[[package]] +name = "hmac-sha256" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3688e69b38018fec1557254f64c8dc2cc8ec502890182f395dbb0aa997aa5735" +dependencies = [ + "digest", +] + +[[package]] +name = "hmac-sha512" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ce1f4656bae589a3fab938f9f09bf58645b7ed01a2c5f8a3c238e01a4ef78a" +dependencies = [ + "digest", +] + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd69211b9b519e98303c015e21a007e293db403b6c85b9b124e133d25e242cdd" +dependencies = [ + "icu_normalizer", + "icu_properties", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "image" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99314c8a2152b8ddb211f924cdae532d8c5e4c8bb54728e12fff1b0cd5963a10" +dependencies = [ + "bytemuck", + "byteorder-lite", + "color_quant", + "gif", + "image-webp", + "num-traits", + "png", + "ravif", + "rgb", + "tiff", + "zune-core", + "zune-jpeg", +] + +[[package]] +name = "image-webp" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f79afb8cbee2ef20f59ccd477a218c12a93943d075b492015ecb1bb81f8ee904" +dependencies = [ + "byteorder-lite", + "quick-error", +] + +[[package]] +name = "imgref" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44feda355f4159a7c757171a77de25daf6411e217b4cabd03bd6650690468126" + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "inherent" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0122b7114117e64a63ac49f752a5ca4624d534c7b1c7de796ac196381cd2d947" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "interpolate_name" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "isahc" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9" +dependencies = [ + "async-channel", + "castaway", + "crossbeam-utils", + "curl", + "curl-sys", + "encoding_rs", + "event-listener", + "futures-lite", + "http", + "log", + "mime", + "once_cell", + "polling", + "serde", + "serde_json", + "slab", + "sluice", + "tracing", + "tracing-futures", + "url", + "waker-fn", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + +[[package]] +name = "jpeg-decoder" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "jwt-simple" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357892bb32159d763abdea50733fadcb9a8e1c319a9aa77592db8555d05af83e" +dependencies = [ + "anyhow", + "binstring", + "coarsetime", + "ct-codecs", + "ed25519-compact", + "hmac-sha1-compact", + "hmac-sha256", + "hmac-sha512", + "k256", + "p256", + "p384", + "rand", + "rsa 0.7.2", + "serde", + "serde_json", + "spki 0.6.0", + "thiserror", + "zeroize", +] + +[[package]] +name = "k256" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2", + "signature 2.2.0", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libfuzzer-sys" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a96cfd5557eb82f2b83fed4955246c988d331975a002961b07c81584d107e7f7" +dependencies = [ + "arbitrary", + "cc", + "once_cell", +] + +[[package]] +name = "libloading" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +dependencies = [ + "cfg-if", + "windows-targets 0.52.6", +] + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libnghttp2-sys" +version = "0.1.10+1.61.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "959c25552127d2e1fa72f0e52548ec04fc386e827ba71a7bd01db46a447dc135" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "libsqlite3-sys" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libz-sys" +version = "1.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c15da26e5af7e25c90b37a2d75cdbf940cf4a55316de9d84c679c9b8bfabf82e" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "litemap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "loop9" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" +dependencies = [ + "imgref", +] + +[[package]] +name = "macros" +version = "0.0.0" +dependencies = [ + "macros-impl", + "proc-macro2", + "quote", + "serde", + "serde_json", + "syn 2.0.72", + "thiserror", +] + +[[package]] +name = "macros-impl" +version = "0.0.0" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "maybe-rayon" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" +dependencies = [ + "cfg-if", + "rayon", +] + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" +dependencies = [ + "hermit-abi", + "libc", + "wasi", + "windows-sys 0.52.0", +] + +[[package]] +name = "napi" +version = "3.0.0-alpha.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "743b5a7769f54c95e20a26d9e66d1b43d5622b7dc8ec8f97b51ed8c58633841f" +dependencies = [ + "bitflags 2.6.0", + "chrono", + "ctor", + "napi-build", + "napi-sys", + "once_cell", + "serde", + "serde_json", + "tokio", +] + +[[package]] +name = "napi-build" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1c0f5d67ee408a4685b61f5ab7e58605c8ae3f2b4189f0127d804ff13d5560a" + +[[package]] +name = "napi-derive" +version = "3.0.0-alpha.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7619cfcc3985e1ed73d147d6950caabaedabcf5c98133502f9d18c3d0061320" +dependencies = [ + "cfg-if", + "convert_case", + "napi-derive-backend", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "napi-derive-backend" +version = "2.0.0-alpha.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "584f6a91c05e8c6bf80622fcc2675c7d27934754d4f1141cfd422d531a3f51fb" +dependencies = [ + "convert_case", + "once_cell", + "proc-macro2", + "quote", + "regex", + "semver", + "syn 2.0.72", +] + +[[package]] +name = "napi-sys" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "427802e8ec3a734331fec1035594a210ce1ff4dc5bc1950530920ab717964ea3" +dependencies = [ + "libloading", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nom-exif" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab35c38930e837f191de96c6f23e8dee7547916fbae0ce25e4d5fad405bbc2d2" +dependencies = [ + "chrono", + "nom", + "regex", + "thiserror", + "tracing", +] + +[[package]] +name = "noop_proc_macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" + +[[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand", + "smallvec", + "zeroize", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] +name = "object" +version = "0.36.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f203fa8daa7bb185f760ae12bd8e097f63d17041dcdcaf675ac54cdf863170e" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "openssl" +version = "0.10.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-src" +version = "300.3.1+3.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7259953d42a81bf137fbbd73bd30a8e1914d6dce43c2b90ed575783a22608b91" +dependencies = [ + "cc", +] + +[[package]] +name = "openssl-sys" +version = "0.9.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +dependencies = [ + "cc", + "libc", + "openssl-src", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "ordered-float" +version = "3.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1e1c390732d15f1d48471625cd92d154e66db2c56645e29a9cd26f4699f72dc" +dependencies = [ + "num-traits", +] + +[[package]] +name = "ouroboros" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2ba07320d39dfea882faa70554b4bd342a5f273ed59ba7c1c6b4c840492c954" +dependencies = [ + "aliasable", + "ouroboros_macro", + "static_assertions", +] + +[[package]] +name = "ouroboros_macro" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec4c6225c69b4ca778c0aea097321a64c421cf4577b331c61b229267edabb6f8" +dependencies = [ + "heck 0.4.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + +[[package]] +name = "p384" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.5.3", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +dependencies = [ + "base64ct", + "rand_core", + "subtle", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pem" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb" +dependencies = [ + "base64 0.13.1", + "once_cell", + "regex", +] + +[[package]] +name = "pem" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +dependencies = [ + "base64 0.13.1", +] + +[[package]] +name = "pem-rfc7468" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac" +dependencies = [ + "base64ct", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_shared", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs1" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eff33bdbdfc54cc98a2eca766ebdec3e1b8fb7387523d5c9c9a2891da856f719" +dependencies = [ + "der 0.6.1", + "pkcs8 0.9.0", + "spki 0.6.0", + "zeroize", +] + +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der 0.7.9", + "pkcs8 0.10.2", + "spki 0.7.3", +] + +[[package]] +name = "pkcs8" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +dependencies = [ + "der 0.6.1", + "spki 0.6.0", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der 0.7.9", + "spki 0.7.3", +] + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "png" +version = "0.17.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "pretty_assertions" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66" +dependencies = [ + "diff", + "yansi", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "profiling" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58" +dependencies = [ + "profiling-procmacros", +] + +[[package]] +name = "profiling-procmacros" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd" +dependencies = [ + "quote", + "syn 2.0.72", +] + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rav1e" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" +dependencies = [ + "arbitrary", + "arg_enum_proc_macro", + "arrayvec", + "av1-grain", + "bitstream-io", + "built", + "cfg-if", + "interpolate_name", + "itertools 0.12.1", + "libc", + "libfuzzer-sys", + "log", + "maybe-rayon", + "new_debug_unreachable", + "noop_proc_macro", + "num-derive", + "num-traits", + "once_cell", + "paste", + "profiling", + "rand", + "rand_chacha", + "simd_helpers", + "system-deps", + "thiserror", + "v_frame", + "wasm-bindgen", +] + +[[package]] +name = "ravif" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc13288f5ab39e6d7c9d501759712e6969fcc9734220846fc9ed26cae2cc4234" +dependencies = [ + "avif-serialize", + "imgref", + "loop9", + "quick-error", + "rav1e", + "rayon", + "rgb", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redis" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cc5b667390cb038bc65fc4b18c06e2550469f7e06a02d886f1a018a11f63563" +dependencies = [ + "arc-swap", + "async-trait", + "bytes", + "combine", + "futures-util", + "itoa", + "num-bigint", + "percent-encoding", + "pin-project-lite", + "ryu", + "tokio", + "tokio-util", + "url", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "regex" +version = "1.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "rgb" +version = "0.8.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade4539f42266ded9e755c605bdddf546242b2c961b03b06a7375260788a0523" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rmp" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "rmp-serde" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" +dependencies = [ + "byteorder", + "rmp", + "serde", +] + +[[package]] +name = "rsa" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "094052d5470cbcef561cb848a7209968c9f12dfa6d668f4bca048ac5de51099c" +dependencies = [ + "byteorder", + "digest", + "num-bigint-dig", + "num-integer", + "num-iter", + "num-traits", + "pkcs1 0.4.1", + "pkcs8 0.9.0", + "rand_core", + "signature 1.6.4", + "smallvec", + "subtle", + "zeroize", +] + +[[package]] +name = "rsa" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" +dependencies = [ + "const-oid 0.9.6", + "digest", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1 0.7.5", + "pkcs8 0.10.2", + "rand_core", + "signature 2.2.0", + "spki 0.7.3", + "subtle", + "zeroize", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "ring", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + +[[package]] +name = "ruzstd" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3ffab8f9715a0d455df4bbb9d21e91135aab3cd3ca187af0cd0c3c3f868fdc" +dependencies = [ + "byteorder", + "thiserror-core", + "twox-hash", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "schannel" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "sea-bae" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bd3534a9978d0aa7edd2808dc1f8f31c4d0ecd31ddf71d997b3c98e9f3c9114" +dependencies = [ + "heck 0.4.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "sea-orm" +version = "0.12.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8814e37dc25de54398ee62228323657520b7f29713b8e238649385dbe473ee0" +dependencies = [ + "async-stream", + "async-trait", + "chrono", + "futures", + "log", + "ouroboros", + "sea-orm-macros", + "sea-query", + "sea-query-binder", + "serde", + "serde_json", + "sqlx", + "strum 0.25.0", + "thiserror", + "time", + "tracing", + "url", + "uuid", +] + +[[package]] +name = "sea-orm-macros" +version = "0.12.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e115c6b078e013aa963cc2d38c196c2c40b05f03d0ac872fe06b6e0d5265603" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "sea-bae", + "syn 2.0.72", + "unicode-ident", +] + +[[package]] +name = "sea-query" +version = "0.30.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4166a1e072292d46dc91f31617c2a1cdaf55a8be4b5c9f4bf2ba248e3ac4999b" +dependencies = [ + "chrono", + "derivative", + "inherent", + "ordered-float", + "serde_json", +] + +[[package]] +name = "sea-query-binder" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36bbb68df92e820e4d5aeb17b4acd5cc8b5d18b2c36a4dd6f4626aabfa7ab1b9" +dependencies = [ + "chrono", + "sea-query", + "serde_json", + "sqlx", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der 0.7.9", + "generic-array", + "pkcs8 0.10.2", + "subtle", + "zeroize", +] + +[[package]] +name = "sec1_decode" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6326ddc956378a0739200b2c30892dccaf198992dfd7323274690b9e188af23" +dependencies = [ + "der 0.4.5", + "pem 0.8.3", + "thiserror", +] + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + +[[package]] +name = "serde" +version = "1.0.204" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.204" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "serde_json" +version = "1.0.120" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest", + "keccak", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" +dependencies = [ + "digest", + "rand_core", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "simd_helpers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" +dependencies = [ + "quote", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "sluice" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5" +dependencies = [ + "async-channel", + "futures-core", + "futures-io", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" +dependencies = [ + "base64ct", + "der 0.6.1", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der 0.7.9", +] + +[[package]] +name = "sqlformat" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f895e3734318cc55f1fe66258926c9b910c124d47520339efecbb6c59cec7c1f" +dependencies = [ + "nom", + "unicode_categories", +] + +[[package]] +name = "sqlx" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9a2ccff1a000a5a59cd33da541d9f2fdcd9e6e8229cc200565942bff36d0aaa" +dependencies = [ + "sqlx-core", + "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", +] + +[[package]] +name = "sqlx-core" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24ba59a9342a3d9bab6c56c118be528b27c9b60e490080e9711a04dccac83ef6" +dependencies = [ + "ahash", + "atoi", + "byteorder", + "bytes", + "chrono", + "crc", + "crossbeam-queue", + "either", + "event-listener", + "futures-channel", + "futures-core", + "futures-intrusive", + "futures-io", + "futures-util", + "hashlink", + "hex", + "indexmap", + "log", + "memchr", + "once_cell", + "paste", + "percent-encoding", + "rustls", + "rustls-pemfile", + "serde", + "serde_json", + "sha2", + "smallvec", + "sqlformat", + "thiserror", + "tokio", + "tokio-stream", + "tracing", + "url", + "webpki-roots", +] + +[[package]] +name = "sqlx-macros" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea40e2345eb2faa9e1e5e326db8c34711317d2b5e08d0d5741619048a803127" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn 1.0.109", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8" +dependencies = [ + "dotenvy", + "either", + "heck 0.4.1", + "hex", + "once_cell", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2", + "sqlx-core", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", + "syn 1.0.109", + "tempfile", + "tokio", + "url", +] + +[[package]] +name = "sqlx-mysql" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418" +dependencies = [ + "atoi", + "base64 0.21.7", + "bitflags 2.6.0", + "byteorder", + "bytes", + "chrono", + "crc", + "digest", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array", + "hex", + "hkdf", + "hmac", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "percent-encoding", + "rand", + "rsa 0.9.6", + "serde", + "sha1", + "sha2", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-postgres" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e" +dependencies = [ + "atoi", + "base64 0.21.7", + "bitflags 2.6.0", + "byteorder", + "chrono", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "hex", + "hkdf", + "hmac", + "home", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "rand", + "serde", + "serde_json", + "sha2", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-sqlite" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b244ef0a8414da0bed4bb1910426e890b19e5e9bccc27ada6b797d05c55ae0aa" +dependencies = [ + "atoi", + "chrono", + "flume", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", + "serde", + "sqlx-core", + "tracing", + "url", + "urlencoding", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "stringprep" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", + "unicode-properties", +] + +[[package]] +name = "strum" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" + +[[package]] +name = "strum_macros" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 1.0.109", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "unicode-xid", +] + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "sysinfo" +version = "0.30.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a5b4ddaee55fb2bea2bf0e5000747e5f5c0de765e5a5ff87f4cd106439f4bb3" +dependencies = [ + "cfg-if", + "core-foundation-sys", + "libc", + "ntapi", + "once_cell", + "windows", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck 0.5.0", + "pkg-config", + "toml", + "version-compare", +] + +[[package]] +name = "target-lexicon" +version = "0.12.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4873307b7c257eddcb50c9bedf158eb669578359fb28428bef438fec8e6ba7c2" + +[[package]] +name = "tempfile" +version = "3.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +dependencies = [ + "cfg-if", + "fastrand 2.1.0", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "thiserror" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-core" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c001ee18b7e5e3f62cbf58c7fe220119e68d902bb7443179c0c8aef30090e999" +dependencies = [ + "thiserror-core-impl", +] + +[[package]] +name = "thiserror-core-impl" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4c60d69f36615a077cc7663b9cb8e42275722d23e58a7fa3d2c7f2915d09d04" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "tiff" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.39.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-macros" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "tokio-stream" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-test" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2468baabc3311435b55dd935f702f42cd1b8abb7e754fb7dfb16bd36aa88f9f7" +dependencies = [ + "async-stream", + "bytes", + "futures-core", + "tokio", + "tokio-stream", +] + +[[package]] +name = "tokio-util" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81967dd0dd2c1ab0bc3468bd7caecc32b8a4aa47d0c8c695d8c2b2108168d62c" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fb9f64314842840f1d940ac544da178732128f1c78c21772e876579e0da1db" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d9f8729f5aea9562aac1cc0441f5d6de3cff1ee0c5d67293eeca5eb36ee7c16" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "nu-ansi-term", + "sharded-slab", + "thread_local", + "tracing-core", +] + +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "static_assertions", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-properties" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4259d9d4425d9f0661581b804cb85fe66a4c631cadd8f490d1c13a35d5d9291" + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "unicode_categories" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +dependencies = [ + "form_urlencoded", + "idna 0.5.0", + "percent-encoding", +] + +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "uuid" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +dependencies = [ + "serde", +] + +[[package]] +name = "v_frame" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b" +dependencies = [ + "aligned-vec", + "num-traits", + "wasm-bindgen", +] + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "vergen" +version = "8.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2990d9ea5967266ea0ccf413a4aa5c42a93dbcfda9cb49a97de6931726b12566" +dependencies = [ + "anyhow", + "cfg-if", + "rustversion", + "time", +] + +[[package]] +name = "version-compare" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + +[[package]] +name = "wasix" +version = "0.12.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1fbb4ef9bbca0c1170e0b00dd28abc9e3b68669821600cad1caaed606583c6d" +dependencies = [ + "wasi", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.72", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "web-push" +version = "0.10.1" +source = "git+https://github.com/pimeys/rust-web-push.git?rev=40febe4085e3cef9cdfd539c315e3e945aba0656#40febe4085e3cef9cdfd539c315e3e945aba0656" +dependencies = [ + "async-trait", + "base64 0.13.1", + "chrono", + "ece", + "futures-lite", + "http", + "isahc", + "jwt-simple", + "log", + "pem 1.1.1", + "sec1_decode", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + +[[package]] +name = "weezl" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" + +[[package]] +name = "whoami" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" +dependencies = [ + "redox_syscall 0.4.1", + "wasite", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +dependencies = [ + "windows-core", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.6.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b480ae9340fc261e6be3e95a1ba86d54ae3f9171132a73ce8d4bbaf68339507c" +dependencies = [ + "memchr", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "yansi" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" + +[[package]] +name = "yoke" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", + "synstructure 0.13.1", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "zerofrom" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", + "synstructure 0.13.1", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "zhconv" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a5764e8c3c48dce7dd281cdae65c785536d1da3078b484c2254e7bea7b42323" +dependencies = [ + "console_error_panic_hook", + "daachorse", + "hex-literal", + "itertools 0.10.5", + "lazy_static", + "once_cell", + "regex", + "ruzstd", + "sha2", + "strum 0.24.1", + "vergen", + "wasm-bindgen", + "zstd", +] + +[[package]] +name = "zstd" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "6.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.12+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a4e40c320c3cb459d9a9ff6de98cff88f4751ee9275d140e2be94a2b74e4c13" +dependencies = [ + "cc", + "pkg-config", +] + +[[package]] +name = "zune-core" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + +[[package]] +name = "zune-jpeg" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16099418600b4d8f028622f73ff6e3deaabdff330fb9a2a131dea781ee8b0768" +dependencies = [ + "zune-core", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..421ae8b --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,64 @@ +[workspace] +members = ["packages/backend-rs", "packages/macro-rs/macros", "packages/macro-rs/macros-impl"] +resolver = "2" + +[workspace.package] +edition = "2021" +rust-version = "1.74" + +[workspace.dependencies] +macros = { path = "packages/macro-rs/macros" } +macros-impl = { path = "packages/macro-rs/macros-impl" } + +napi = "3.0.0-alpha.8" +napi-derive = "3.0.0-alpha.7" +napi-build = "2.1.3" + +argon2 = { version = "0.5.3", default-features = false } +async-trait = { version = "0.1.81", default-features = false } +basen = { version = "0.1.0", default-features = false } +bb8 = { version = "0.8.5", default-features = false } +bcrypt = { version = "0.15.1", default-features = false } +chrono = { version = "0.4.38", default-features = false } +convert_case = { version = "0.6.0", default-features = false } +cuid2 = { version = "0.1.2", default-features = false } +emojis = { version = "0.6.3", default-features = false } +futures-util = { version = "0.3.30", default-features = false } +idna = { version = "1.0.2", default-features = false } +image = { version = "0.25.2", default-features = false } +isahc = { version = "1.7.2", default-features = false } +nom-exif = { version = "1.3.0", default-features = false } +once_cell = { version = "1.19.0", default-features = false } +pretty_assertions = { version = "1.4.0", default-features = false } +proc-macro2 = { version = "1.0.86", default-features = false } +quote = { version = "1.0.36", default-features = false } +rand = { version = "0.8.5", default-features = false } +redis = { version = "0.26.0", default-features = false } +regex = { version = "1.10.5", default-features = false } +rmp-serde = { version = "1.3.0", default-features = false } +sea-orm = { version = "0.12.15", default-features = false } +serde = { version = "1.0.204", default-features = false } +serde_json = { version = "1.0.120", default-features = false } +serde_yaml = { version = "0.9.34", default-features = false } +syn = { version = "2.0.72", default-features = false } +sysinfo = { version = "0.30.13", default-features = false } +thiserror = { version = "1.0.63", default-features = false } +tokio = { version = "1.39.2", default-features = false } +tokio-test = { version = "0.4.4", default-features = false } +tracing = { version = "0.1.40", default-features = false } +tracing-subscriber = { version = "0.3.18", default-features = false } +url = { version = "2.5.2", default-features = false } +urlencoding = { version = "2.1.3", default-features = false } +web-push = { git = "https://github.com/pimeys/rust-web-push.git", rev = "40febe4085e3cef9cdfd539c315e3e945aba0656", default-features = false } +zhconv = "0.3.1" + +# subdependencies +## explicitly list OpenSSL to use the vendored version +openssl = "0.10.66" + +## some subdependencies require higher Rust version than 1.74 (our MSRV) +## cargo update && cargo update ravif --precise 0.11.5 && cargo update bitstream-io --precise 2.3.0 +## to pin their versions if needed + +[profile.release] +lto = true diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f9087b9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,52 @@ +# Install dev and compilation dependencies, build files +FROM docker.io/node:20-alpine AS build +WORKDIR /firefish + +# Install build tools and work around the linker name issue +RUN apk update && apk add --no-cache build-base linux-headers curl ca-certificates python3 perl +RUN ln -s $(which gcc) /usr/bin/aarch64-linux-musl-gcc + +# Install Rust toolchain +RUN curl --proto '=https' --tlsv1.2 --silent --show-error --fail https://sh.rustup.rs | sh -s -- -y +ENV PATH="/root/.cargo/bin:${PATH}" + +# Configure pnpm +RUN corepack enable && corepack prepare pnpm@latest --activate + +# Build +COPY . ./ +RUN pnpm install --frozen-lockfile +RUN cargo fetch --locked --manifest-path Cargo.toml +RUN NODE_ENV='production' NODE_OPTIONS='--max_old_space_size=3072' pnpm run build + +# Trim down the dependencies to only those for production +RUN find . -path '*/node_modules/*' -delete && pnpm install --prod --frozen-lockfile + +# Runtime container +FROM docker.io/node:20-alpine +WORKDIR /firefish + +# Install runtime dependencies +RUN apk update && apk add --no-cache zip unzip tini ffmpeg curl + +COPY . ./ + +# Copy node modules +COPY --from=build /firefish/node_modules /firefish/node_modules +COPY --from=build /firefish/packages/backend/node_modules /firefish/packages/backend/node_modules +# COPY --from=build /firefish/packages/sw/node_modules /firefish/packages/sw/node_modules +# COPY --from=build /firefish/packages/client/node_modules /firefish/packages/client/node_modules +COPY --from=build /firefish/packages/firefish-js/node_modules /firefish/packages/firefish-js/node_modules + +# Copy the build artifacts +COPY --from=build /firefish/built /firefish/built +COPY --from=build /firefish/packages/backend/built /firefish/packages/backend/built +COPY --from=build /firefish/packages/backend/assets/instance.css /firefish/packages/backend/assets/instance.css +COPY --from=build /firefish/packages/backend-rs/built /firefish/packages/backend-rs/built +COPY --from=build /firefish/packages/firefish-js/built /firefish/packages/firefish-js/built + +RUN corepack enable && corepack prepare pnpm@latest --activate +ENV NODE_ENV=production +VOLUME "/firefish/files" +ENTRYPOINT [ "/sbin/tini", "--" ] +CMD [ "pnpm", "run", "start:container" ] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..dba13ed --- /dev/null +++ b/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e3635b0 --- /dev/null +++ b/Makefile @@ -0,0 +1,44 @@ +include ./dev/config.env +export + + +.PHONY: pre-commit +pre-commit: format entities napi + +.PHONY: format +format: + pnpm run format + +.PHONY: entities +entities: + rm --recursive --force ./packages/backend/built + pnpm --filter=backend run build:debug + pnpm run migrate + $(MAKE) -C ./packages/backend-rs regenerate-entities + +.PHONY: napi +napi: + $(MAKE) -C ./packages/backend-rs update-index + + +.PHONY: build +build: + corepack prepare pnpm@latest --activate + pnpm install + NODE_OPTIONS='--max_old_space_size=3072' pnpm run build:debug + pnpm run migrate + + +.PHONY: db.up db.down db.init +db.up: + $(MAKE) -C ./dev/db-container up +db.down: + $(MAKE) -C ./dev/db-container down +db.init: + $(MAKE) -C ./dev/db-container init + +.PHONY: psql redis-cli +psql: + $(MAKE) -C ./dev/db-container psql +redis-cli: + $(MAKE) -C ./dev/db-container redis-cli diff --git a/README.md b/README.md new file mode 100644 index 0000000..cf308b6 --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +
+Firefish logo + +**🌎 Firefish is an open source, decentralized social media platform that's free forever! 🚀** + +
+ +
+ + + +Firefish is based off of Misskey, a powerful microblogging server on ActivityPub with features such as emoji reactions, a customizable web UI, rich chatting, and much more! + +
+ +
+ +# Documents + +- [Installation guide](https://firefish.dev/firefish/firefish/-/blob/main/docs/install.md) +- [Contributing guide](./CONTRIBUTING.md) +- [Changelog](https://firefish.dev/firefish/firefish/-/blob/main/docs/changelog.md) + +# Links + +- Donations: +- Matrix space: +- Official account: `@firefish@info.firefish.dev` +- Weblate: + +# Want to get involved? Great! + +- If you know how to program in TypeScript, Vue, or Rust, please read the [contributing guide](./CONTRIBUTING.md). +- If you have the means to, [donations](https://opencollective.com/firefish) are a great way to keep us going. +- If you know a non-English language, translating Firefish on [Weblate](https://hosted.weblate.org/engage/firefish/) help bring Firefish to more people. No technical experience needed! + diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..415d9ca --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,5 @@ +# Reporting Security Issues + +If you discover a security issue, please report it as a confidential issue. You can create a confidential issue by checking the "This issue is confidential and should only be visible to team members with at least Reporter access." checkbox in . + +Thanks for helping make Firefish safe for everyone. diff --git a/animated.svg b/animated.svg new file mode 100644 index 0000000..7b36f4d --- /dev/null +++ b/animated.svg @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..e0a7174 --- /dev/null +++ b/biome.json @@ -0,0 +1,416 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.8.2/schema.json", + "organizeImports": { "enabled": false }, + "linter": { + "enabled": true, + "rules": { + "recommended": false, + "complexity": { + "noBannedTypes": "error", + "noExtraBooleanCast": "error", + "noMultipleSpacesInRegularExpressionLiterals": "error", + "noUselessCatch": "error", + "noUselessConstructor": "off", + "noUselessLoneBlockStatements": "error", + "noUselessRename": "error", + "noUselessTernary": "error", + "noUselessThisAlias": "error", + "noUselessTypeConstraint": "error", + "noVoid": "error", + "noWith": "error", + "useLiteralKeys": "error", + "useRegexLiterals": "error" + }, + "correctness": { + "noConstAssign": "error", + "noConstantCondition": "error", + "noEmptyCharacterClassInRegex": "error", + "noEmptyPattern": "error", + "noGlobalObjectCalls": "error", + "noInvalidConstructorSuper": "error", + "noInvalidUseBeforeDeclaration": "error", + "noNewSymbol": "error", + "noPrecisionLoss": "error", + "noSelfAssign": "error", + "noSwitchDeclarations": "error", + "noUndeclaredVariables": "error", + "noUnreachable": "error", + "noUnreachableSuper": "error", + "noUnsafeFinally": "error", + "noUnusedVariables": "off", + "useArrayLiterals": "off", + "useIsNan": "error" + }, + "security": { "noGlobalEval": "error" }, + "style": { + "noCommaOperator": "error", + "noInferrableTypes": "error", + "noNonNullAssertion": "warn", + "noUselessElse": "off", + "noVar": "error", + "useAsConstAssertion": "error", + "useBlockStatements": "off", + "useConst": "error", + "useImportType": "error", + "useSingleVarDeclarator": "warn" + }, + "suspicious": { + "noAssignInExpressions": "error", + "noAsyncPromiseExecutor": "error", + "noCatchAssign": "error", + "noClassAssign": "error", + "noCompareNegZero": "error", + "noConfusingLabels": "off", + "noConsoleLog": "warn", + "noControlCharactersInRegex": "error", + "noDebugger": "warn", + "noDoubleEquals": "error", + "noDuplicateCase": "error", + "noDuplicateClassMembers": "error", + "noDuplicateObjectKeys": "error", + "noDuplicateParameters": "error", + "noEmptyBlockStatements": "error", + "noEmptyInterface": "error", + "noExplicitAny": "warn", + "noExtraNonNullAssertion": "error", + "noFallthroughSwitchClause": "error", + "noFunctionAssign": "error", + "noGlobalAssign": "error", + "noImportAssign": "error", + "noMisleadingCharacterClass": "error", + "noMisleadingInstantiator": "error", + "noPrototypeBuiltins": "off", + "noRedeclare": "error", + "noSelfCompare": "error", + "noShadowRestrictedNames": "error", + "noUnsafeNegation": "error", + "useAwait": "off", + "useDefaultSwitchClauseLast": "error", + "useNamespaceKeyword": "error", + "useValidTypeof": "error" + } + }, + "ignore": [ + "**/*.json5", + "**/*.min.*", + "**/dist", + "**/LICENSE*", + "**/output", + "**/coverage", + "**/public", + "**/temp", + "**/packages-lock.json", + "**/pnpm-lock.yaml", + "**/yarn.lock", + "**/__snapshots__" + ] + }, + "javascript": { + "globals": [ + "jest", + "withDefaults", + "$computed", + "$shallowRef", + "defineExpose", + "$toRef", + "h", + "$customRef", + "navigator", + "window", + "defineEmits", + "$ref", + "defineProps", + "document" + ] + }, + "overrides": [ + { + "include": ["**/__tests__/*.{j,t}s?(x)", "**/*.spec.{j,t}s?(x)"], + "linter": { "rules": { "suspicious": { "noConsoleLog": "off" } } } + }, + { + "include": ["*.vue"], + "linter": { "rules": { "correctness": { "noUnusedVariables": "off" } } } + }, + { + "include": ["**/__tests__/*.{j,t}s?(x)", "**/*.spec.{j,t}s?(x)"], + "linter": { "rules": { "suspicious": { "noConsoleLog": "off" } } } + }, + { "include": ["*.vue"], "linter": { "rules": {} } }, + { "include": ["*.json", "*.json5"], "linter": { "rules": {} } }, + { "include": ["*.yaml", "*.yml"], "linter": { "rules": {} } }, + { "include": ["package.json"], "linter": { "rules": {} } }, + { "include": ["*.d.ts"], "linter": { "rules": {} } }, + { "include": ["*.js"] }, + { + "include": ["scripts/**/*.*", "cli.*"], + "linter": { "rules": { "suspicious": { "noConsoleLog": "off" } } } + }, + { + "include": ["*.test.ts", "*.test.js", "*.spec.ts", "*.spec.js"], + "linter": { "rules": {} } + }, + { + "include": ["**/*.md/*.*"], + "linter": { + "rules": { + "correctness": { + "noUndeclaredVariables": "off", + "noUnusedVariables": "off" + }, + "suspicious": { "noConsoleLog": "off" } + } + } + }, + { "include": ["*.js"], "linter": { "rules": {} } }, + { + "include": ["**/*.md/*.*"], + "linter": { + "rules": { + "correctness": { + "noInvalidUseBeforeDeclaration": "off", + "noUnusedVariables": "off" + }, + "suspicious": { "noRedeclare": "off" } + } + } + }, + { "include": ["*.json", "*.json5"], "linter": { "rules": {} } }, + { "include": ["*.yaml", "*.yml"], "linter": { "rules": {} } }, + { "include": ["package.json"], "linter": { "rules": {} } }, + { "include": ["*.d.ts"], "linter": { "rules": {} } }, + { "include": ["*.js"] }, + { + "include": ["scripts/**/*.*", "cli.*"], + "linter": { "rules": { "suspicious": { "noConsoleLog": "off" } } } + }, + { + "include": ["*.test.ts", "*.test.js", "*.spec.ts", "*.spec.js"], + "linter": { "rules": {} } + }, + { + "include": ["**/*.md/*.*"], + "linter": { + "rules": { + "correctness": { + "noUndeclaredVariables": "off", + "noUnusedVariables": "off" + }, + "suspicious": { "noConsoleLog": "off" } + } + } + }, + { "include": ["*.js"], "linter": { "rules": {} } }, + { + "include": ["**/*.md/*.*"], + "linter": { + "rules": { + "correctness": { + "noInvalidUseBeforeDeclaration": "off", + "noUnusedVariables": "off" + }, + "suspicious": { "noRedeclare": "off" } + } + } + }, + { + "include": ["*.ts", "*.tsx", "*.mts", "*.cts"], + "linter": { + "rules": { + "correctness": { + "noConstAssign": "off", + "noGlobalObjectCalls": "off", + "noInvalidConstructorSuper": "off", + "noNewSymbol": "off", + "noSetterReturn": "off", + "noUndeclaredVariables": "off", + "noUnreachable": "off", + "noUnreachableSuper": "off" + }, + "style": { + "noArguments": "error", + "noVar": "error", + "useConst": "error" + }, + "suspicious": { + "noDuplicateClassMembers": "off", + "noDuplicateObjectKeys": "off", + "noDuplicateParameters": "off", + "noFunctionAssign": "off", + "noImportAssign": "off", + "noRedeclare": "off", + "noUnsafeNegation": "off", + "useGetterReturn": "off", + "useValidTypeof": "off" + } + } + } + }, + { "include": ["*.json", "*.json5"], "linter": { "rules": {} } }, + { "include": ["*.yaml", "*.yml"], "linter": { "rules": {} } }, + { "include": ["package.json"], "linter": { "rules": {} } }, + { "include": ["*.d.ts"], "linter": { "rules": {} } }, + { "include": ["*.js"], "linter": { "rules": {} } }, + { + "include": ["*.ts", "*.tsx", "*.mts", "*.cts"], + "linter": { "rules": { "complexity": { "noVoid": "error" } } } + }, + { + "include": ["script/**/*.*", "scripts/**/*.*", "cli.*"], + "linter": { "rules": { "suspicious": { "noConsoleLog": "off" } } } + }, + { + "include": ["*.test.ts", "*.test.js", "*.spec.ts", "*.spec.js"], + "linter": { "rules": {} } + }, + { + "include": ["**/*.md/*.*"], + "linter": { + "rules": { + "correctness": { + "noInvalidUseBeforeDeclaration": "off", + "noUndeclaredVariables": "off", + "noUnusedVariables": "off" + }, + "style": { "useImportType": "off" }, + "suspicious": { "noConsoleLog": "off", "noRedeclare": "off" } + } + } + }, + { "include": ["*.json", "*.json5"], "linter": { "rules": {} } }, + { "include": ["*.yaml", "*.yml"], "linter": { "rules": {} } }, + { "include": ["package.json"], "linter": { "rules": {} } }, + { "include": ["*.d.ts"], "linter": { "rules": {} } }, + { "include": ["*.js"], "linter": { "rules": {} } }, + { + "include": ["*.ts", "*.tsx", "*.mts", "*.cts"], + "linter": { "rules": { "complexity": { "noVoid": "error" } } } + }, + { + "include": ["script/**/*.*", "scripts/**/*.*", "cli.*"], + "linter": { "rules": { "suspicious": { "noConsoleLog": "off" } } } + }, + { + "include": ["*.test.ts", "*.test.js", "*.spec.ts", "*.spec.js"], + "linter": { "rules": {} } + }, + { + "include": ["**/*.md/*.*"], + "linter": { + "rules": { + "correctness": { + "noInvalidUseBeforeDeclaration": "off", + "noUndeclaredVariables": "off", + "noUnusedVariables": "off" + }, + "style": { "useImportType": "off" }, + "suspicious": { "noConsoleLog": "off", "noRedeclare": "off" } + } + } + }, + { "include": ["*.md"] }, + { + "include": ["**/*.md/**"], + "linter": { + "rules": { + "correctness": { + "noUndeclaredVariables": "off", + "noUnusedVariables": "off" + } + } + } + }, + { + "include": ["*.ts", "*.tsx", "*.mts", "*.cts"], + "linter": { + "rules": { + "correctness": { + "noConstAssign": "off", + "noGlobalObjectCalls": "off", + "noInvalidConstructorSuper": "off", + "noNewSymbol": "off", + "noSetterReturn": "off", + "noUndeclaredVariables": "off", + "noUnreachable": "off", + "noUnreachableSuper": "off" + }, + "style": { + "noArguments": "error", + "noVar": "error", + "useConst": "error" + }, + "suspicious": { + "noDuplicateClassMembers": "off", + "noDuplicateObjectKeys": "off", + "noDuplicateParameters": "off", + "noFunctionAssign": "off", + "noImportAssign": "off", + "noRedeclare": "off", + "noUnsafeNegation": "off", + "useGetterReturn": "off", + "useValidTypeof": "off" + } + } + } + }, + { "include": ["*.md"] }, + { + "include": ["**/*.md/**"], + "linter": { + "rules": { + "correctness": { + "noUndeclaredVariables": "off", + "noUnusedVariables": "off" + } + } + } + }, + { + "include": ["*.ts", "*.tsx", "*.mts", "*.cts"], + "linter": { + "rules": { + "correctness": { + "noConstAssign": "off", + "noGlobalObjectCalls": "off", + "noInvalidConstructorSuper": "off", + "noNewSymbol": "off", + "noSetterReturn": "off", + "noUndeclaredVariables": "off", + "noUnreachable": "off", + "noUnreachableSuper": "off" + }, + "style": { + "noArguments": "error", + "noVar": "error", + "useConst": "error" + }, + "suspicious": { + "noDuplicateClassMembers": "off", + "noDuplicateObjectKeys": "off", + "noDuplicateParameters": "off", + "noFunctionAssign": "off", + "noImportAssign": "off", + "noRedeclare": "off", + "noUnsafeNegation": "off", + "useGetterReturn": "off", + "useValidTypeof": "off" + } + } + } + }, + { + "include": ["packages/backend/src/server/api/mastodon/**/*.ts"], + "linter": { + "rules": { + "style": { + "noParameterAssign": "off" + }, + "complexity": { + "noStaticOnlyClass": "off", + "noThisInStatic": "off" + } + } + } + } + ] +} diff --git a/ci/.gitignore b/ci/.gitignore new file mode 100644 index 0000000..1e50174 --- /dev/null +++ b/ci/.gitignore @@ -0,0 +1,2 @@ +target-msrv/ +target-miri/ diff --git a/ci/cargo/config.toml b/ci/cargo/config.toml new file mode 100644 index 0000000..b0de924 --- /dev/null +++ b/ci/cargo/config.toml @@ -0,0 +1,3 @@ +[target.x86_64-unknown-linux-gnu] +linker = "/usr/bin/clang" +rustflags = ["-C", "link-arg=--ld-path=/usr/bin/mold"] diff --git a/custom/LICENSE b/custom/LICENSE new file mode 100644 index 0000000..cb57aef --- /dev/null +++ b/custom/LICENSE @@ -0,0 +1,13 @@ +Copyright 2023 Firefish + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/custom/assets/badges/error.webp b/custom/assets/badges/error.webp new file mode 100644 index 0000000000000000000000000000000000000000..ccdf7ebcbbbbe2b0b48e6fd976a0224a8e3a6f5c GIT binary patch literal 41872 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

=E*=Nk%*3iTqM){u0&#{pEIf|6v9uh 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 literal 0 HcmV?d00001 diff --git a/custom/assets/badges/info.webp b/custom/assets/badges/info.webp new file mode 100644 index 0000000000000000000000000000000000000000..cce0a32d74d9c80abad2b0fea4dec4c6ca5b659e GIT binary patch literal 36030 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%0AQ7%&9L3$hiqJ zQ%Uw9NiytG(2Jioi!Z{i+a!MQeiKs3F6SdkE4!g?FuXe37a;*P_811*DsU!T4gHe2 zR@jN)oh2XFpaP(~q?GCF}@R#BxGG6`YajOxcRE znCBIB9Y{dE-Lq=7u<-gh^19M$jbKO3p}NlV_A?YXqMzsH>o}yr5OeqfUU@uw*s#|0 zjj;l0M)q7A8A3P>wIxD751oe7U=&RJSE)w_Ox>LYl3TW znWlrx#_xiqlg@XRcfXc_2c-EMjRpBd6pRB*YO|TcVPYl;tI37|dbJb)ip#zx&b5J5G zsagk+tq!ZeSToHOZLU&0&(!5c1+_;Fnw-a$>mM|Tj z%l^6|d6qcF&y!hAQ5o?#3&N%DL?5FOiUBGCg0b<2pqzPY*vuyX4)T;=gAEgG!{CC>^FsGH{Br+<+p>(spbMF!+aW<5pZ>?$NLp00v8oxtk2Z=Dt3n}CkV z^{2XD2zZ2dq-rGQ_fCQo;;=KtNAiBOhrc6&*(e#|>4*`6FEF)Cq7`TD$K!HV97Z>6 z2dU{kg9ghHA}IiNtm0*NRp(5PbZ>mdaEIaias32y?6`BBzHT> zJy{=~c4q^}yYQRcfNQ(b$0?W`Spw4ZcU>Q za9TIQhN3z)$jml;I~@J-8vHqkIHk)I1-#}{1hczu&OwE&=F zZ94qkp2$N@A1t(k>Qpncf5e`w%+l{dfPC~;&K=gsJbd|PgRm%2ci1F^d#W_FwNQQ#D5CiR9!IM%P6k1wn?pV`{y~=bCx5Z51Z*aTvahh zmtiHoyERgVG9%Lh-@CgK?3f3>Uxqnb{VVgg9J(_^b3%j;eUM^h-HMO%s>-XOerEao z%J;l({QkXAc5VKAeqxAU5L8Tz6u^Wf14A*vR9ZdaOc)o_E12{57Z!tm!Z-m%hStUCnlL)1z=1pPxT_-~W`n@ZPiwS#CFC_VAbQko` zRg?2`tA_-;#z~InJpbbM{KhK|xyr+`YUB_GTe?dMv&)38gG!llO{i)Y?XG1iZSo9r z@>C-B=S?M3x#9utvx~N%NsP7oOxVj&KIBw_Y7#I}v@1}>oLY*->YiU8Nc<&(r@s^nt>AY&VDi F001@Zy1@Vd literal 0 HcmV?d00001 diff --git a/custom/assets/instance.css b/custom/assets/instance.css new file mode 100644 index 0000000..9a70e66 --- /dev/null +++ b/custom/assets/instance.css @@ -0,0 +1,7 @@ +/* +* !!! WARNING !!! +* Editing this file may cause your instance to break for EVERYONE. +* Please know what you're doing and test it out with regular user custom CSS. +* With that said, GLHF! +* This may eventuallly be replaced with a function in the admin panel. + */ diff --git a/custom/assets/robots.txt b/custom/assets/robots.txt new file mode 100644 index 0000000..cedb5b6 --- /dev/null +++ b/custom/assets/robots.txt @@ -0,0 +1,14 @@ +User-agent: * +Allow: / + +# Uncomment the following to block CommonCrawl +# +# User-agent: CCBot +# User-agent: CCBot/2.0 +# User-agent: CCBot/3.1 +# Disallow: / + +# Uncomment the following to block ChatGPT +# +# User-agent: GPTBot +# Disallow: / diff --git a/custom/locales/.gitkeep b/custom/locales/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/dev/config.example.env b/dev/config.example.env new file mode 100644 index 0000000..e11580e --- /dev/null +++ b/dev/config.example.env @@ -0,0 +1,4 @@ +COMPOSE='podman-compose' +POSTGRES_PASSWORD=password +POSTGRES_USER=firefish +POSTGRES_DB=firefish_db diff --git a/dev/container/docker-compose.yml b/dev/container/docker-compose.yml new file mode 100644 index 0000000..8768a09 --- /dev/null +++ b/dev/container/docker-compose.yml @@ -0,0 +1,49 @@ +version: "3" + +services: + web: + image: docker.io/node:18.19.0-bookworm + container_name: firefish_web + restart: unless-stopped + depends_on: + - db + - redis + ports: + - "3030:3030" + networks: + - firefishnet + environment: + NODE_ENV: production + PGPASSWORD: password + URL: http://localhost:3030 + volumes: + - ./firefish:/firefish:rw + - ./docker-entrypoint.sh:/docker-entrypoint.sh:ro + entrypoint: /docker-entrypoint.sh + + redis: + restart: unless-stopped + image: docker.io/redis:7.0-alpine + container_name: firefish_redis + networks: + - firefishnet + ports: + - "26379:6379" + volumes: + - ./redis:/data + + db: + restart: unless-stopped + image: docker.io/groonga/pgroonga:3.1.8-alpine-12 + container_name: firefish_db + networks: + - firefishnet + env_file: + - ../config.env + ports: + - "25432:5432" + volumes: + - ./db:/var/lib/postgresql/data + +networks: + firefishnet: diff --git a/dev/container/docker-entrypoint.sh b/dev/container/docker-entrypoint.sh new file mode 100755 index 0000000..6f60427 --- /dev/null +++ b/dev/container/docker-entrypoint.sh @@ -0,0 +1,65 @@ +#!/bin/sh + +set -xeu +node --version + +# Check Environment Initialized Flag +if [ ! -f '/.firefish_env_initialized' ]; then + + # Install entrypoint dependencies + apt-get update + DEBIAN_FRONTEND='noninteractive' apt-get install -y --no-install-recommends wget curl ca-certificates lsb-release gnupg + + # Create the PostgreSQL file repository configuration + sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' + + # Import the PostgreSQL repository signing key + wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - + + # Install compilation dependencies + apt-get update + DEBIAN_FRONTEND='noninteractive' apt-get install -y --no-install-recommends build-essential python3 ffmpeg git postgresql-client-12 + curl -vvv --proto '=https' --tlsv1.2 --show-error --fail https://sh.rustup.rs | sh -s -- -y + + # Add Cargo PATH + PATH="/root/.cargo/bin:${PATH}" + + # If Firefish not exist + if [ ! -f '/firefish/README.md' ]; then + + # Clone Firefish + cd / + git clone -v https://firefish.dev/firefish/firefish.git + + # Configuring a new server + cd /firefish + cp .config/devenv.yml .config/default.yml + + URL="$(echo "${URL}" | sed 's#/#\\/#g')" + sed -i'.bak' "s/http:\/\/localhost:3030/${URL}/" .config/default.yml + + fi + + # Configure postgres, add pgroonga search + psql --user=firefish --host=firefish_db --dbname=firefish_db --command='CREATE EXTENSION IF NOT EXISTS pgroonga;' + + # Configure pnpm, and install dev mode dependencies for compilation + cd /firefish + corepack enable + corepack prepare pnpm@latest --activate + pnpm install --prod false + +fi + +# Add Environment Initialized Flag +touch /.firefish_env_initialized + +# Add Cargo PATH +PATH="/root/.cargo/bin:${PATH}" + +# Start a new server +cd /firefish +pnpm install --prod false +pnpm run build:debug +pnpm run migrate +pnpm run start diff --git a/dev/db-container/Makefile b/dev/db-container/Makefile new file mode 100644 index 0000000..a762e95 --- /dev/null +++ b/dev/db-container/Makefile @@ -0,0 +1,14 @@ +.PHONY: up down init +up: + $(COMPOSE) up --detach +down: + $(COMPOSE) down +init: + $(COMPOSE) down --volumes + $(COMPOSE) up --detach + +.PHONY: psql redis-cli +psql: + $(COMPOSE) exec db psql --user=$(POSTGRES_USER) --dbname=$(POSTGRES_DB) +redis-cli: + $(COMPOSE) exec redis redis-cli diff --git a/dev/db-container/docker-compose.yml b/dev/db-container/docker-compose.yml new file mode 100644 index 0000000..770d8fb --- /dev/null +++ b/dev/db-container/docker-compose.yml @@ -0,0 +1,24 @@ +version: "3" + +services: + redis: + image: docker.io/redis:7-alpine + ports: + - "26379:6379" + volumes: + - "redis-data:/data" + db: + image: docker.io/groonga/pgroonga:3.1.8-alpine-12 + env_file: + - ../config.env + ports: + - "25432:5432" + volumes: + - "./install.sql:/docker-entrypoint-initdb.d/install.sql:ro" + - "postgres-data:/var/lib/postgresql/data" + +volumes: + redis-data: + name: redis-data + postgres-data: + name: postgres-data diff --git a/dev/db-container/install.sql b/dev/db-container/install.sql new file mode 100644 index 0000000..11418be --- /dev/null +++ b/dev/db-container/install.sql @@ -0,0 +1 @@ +CREATE EXTENSION pgroonga; diff --git a/dev/docs/container.md b/dev/docs/container.md new file mode 100644 index 0000000..4b21afb --- /dev/null +++ b/dev/docs/container.md @@ -0,0 +1,34 @@ +# Set up a fully-containerized development environment + +## Prerequisites + +- Container runtime installation + - [Docker](https://docs.docker.com/get-docker/) + - [Podman](https://podman.io/docs/installation) and [Podman Compose](https://github.com/containers/podman-compose) + - [containerd](https://github.com/containerd/containerd) and [nerdctl](https://github.com/containerd/nerdctl) + - or whatever you want to use +- The following ports are not in use + - 3030 + - 25432 + - 26379 + +## Start up the environment + +1. Download the [`dev/container` directory](./dev/container) and execute `chmod +x docker-entrypoint.sh` + - Alternatively, you can use `git clone https://firefish.dev/firefish/firefish.git && cd firefish/dev/container`, although this will clone the entire repository. +1. Copy the example config file + ```sh + cp config.example.env config.env + ``` +1. Edit `docker-compose.yml` and set `URL` to the URL you want to use (or leave it as `http://localhost:3030`) +1. Run `docker compose up` + - This will build the environment, install dependencies and prepare the needed config files. + - If you use Podman, you should run `podman-compose up` instead. +1. Wait until the following message shows up + ```log + DONE * [core boot] All workers started + DONE * [core boot] Now listening on port 3030 on https://your_firefish_url.example.com + ``` +1. A fresh Firefish environment is created on the URL you have set! + +When you want to restart the dev server, you just need to terminate the process (a.k.a. press `Ctrl+C`) and run `docker compose up` again. diff --git a/dev/docs/db-container.md b/dev/docs/db-container.md new file mode 100644 index 0000000..ae6c394 --- /dev/null +++ b/dev/docs/db-container.md @@ -0,0 +1,105 @@ +# Set up database containers and run Firefish locally + +## Prerequisites + +- Dependencies + - git + - Node.js + - pnpm + - Rust toolchain and [cargo-nextest](https://nexte.st/) + - Python 3 + - Perl + - FFmpeg + - Container runtime + - [Docker](https://docs.docker.com/get-docker/) + - [Podman](https://podman.io/docs/installation) and [Podman Compose](https://github.com/containers/podman-compose) + - [containerd](https://github.com/containerd/containerd) and [nerdctl](https://github.com/containerd/nerdctl) + - or whatever you want to use + - GNU Make +- The following ports are not in use + - 25432 + - 26379 + +You can refer to [local-installation.md](./local-installation.md) to install the dependencies. + +## Configure the environment + +1. Fork the Firefish repository on GitLab +1. Clone your Firefish repository + ```sh + git clone https://firefish.dev/your-user-name/firefish.git + cd firefish + ``` +1. Copy example config file + ```sh + cp dev/config.example.env dev/config.env + # If you use container runtime other than Podman, you need to modify the "COMPOSE" variable + # vim dev/config.env + ``` +1. Create `.config/default.yml` with the following content + ```yaml + # You can change the port if 3000 is already used + url: http://localhost:3000 + port: 3000 + + db: + host: localhost + port: 25432 + db: firefish_db + user: firefish + pass: password + + redis: + host: localhost + port: 26379 + + maxlogLevel: 'debug' # or 'trace' + ``` +1. Start database containers + ```sh + make db.up + ``` + +## Build and start Firefish + +1. Build Firefish + ```sh + pnpm install + pnpm run build:debug + ``` +1. Execute database migrations + ```sh + pnpm run migrate + ``` +1. Start Firefish + ```sh + pnpm run start + ``` + You can access to the local Firefish server on http://localhost:3000 after this message shows up! + ``` + DONE * [core boot] All workers started + DONE * [core boot] Now listening on port 3000 on http://localhost:3000 + ``` + +## Update auto-generated files in `package/backend-rs` + +You need to install `sea-orm-cli` to regenerate database entities. + +```sh +cargo install sea-orm-cli +``` + +```sh +make entities +make napi +``` + +## Reset the environment + +You can recreate a fresh local Firefish environment by recreating the database containers: + +```sh +make db.init +pnpm run migrate +pnpm run start +``` diff --git a/dev/docs/local-installation.md b/dev/docs/local-installation.md new file mode 100644 index 0000000..70f1d4c --- /dev/null +++ b/dev/docs/local-installation.md @@ -0,0 +1,182 @@ +# Set up a development environment by installing all dependencies locally + +This document demonstrates an example procedure to set up a Firefish development environment on Debian 12. You can refer to this document if you prefer to install all dependencies (Node.js, PostgreSQL, Redis, etc.) locally. + +Make sure that you can use the `sudo` command before proceeding. + +## 1. Install dependencies + +### Utilities + +```sh +sudo apt update +sudo apt install build-essential python3 curl wget git lsb-release +``` + +### Node.js + +Firefish requires Node.js v18.19.0 or later. While you can choose any versions between v18.19.0 and the latest version (v22.2.0 as of writing), we recommend that you install v18.x so as not to use new features inadvertently and introduce incompatibility issues. + +Instructions can be found at [this repository](https://github.com/nodesource/distributions). + +```sh +NODE_MAJOR=18 +curl -fsSL "https://deb.nodesource.com/setup_${NODE_MAJOR}.x" | sudo -E bash - +sudo apt install nodejs + +# check version +node --version +``` + +### Rust toolchain + +Instructions can be found at [this page](https://www.rust-lang.org/tools/install). + +```sh +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +. "${HOME}/.cargo/env" + +# check version +cargo --version +``` + +### Cargo nextest + +Instructions can be found at [this page](https://nexte.st/book/pre-built-binaries). + +```sh +curl -LsSf https://get.nexte.st/latest/linux | tar zxf - -C ${CARGO_HOME:-~/.cargo}/bin +``` + +### PostgreSQL and PGroonga + +Firefish requires PostgreSQL v12 or later. We recommend that you install v12.x for the same reason as Node.js. + +PostgreSQL install instructions can be found at [this page](https://www.postgresql.org/download/). + +```sh +sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' +wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - +sudo apt update +sudo apt install postgresql-12 + +sudo systemctl enable --now postgresql + +# check version +psql --version +``` + +PGroonga install instructions can be found at [this page](https://pgroonga.github.io/install/). + +```sh +wget "https://apache.jfrog.io/artifactory/arrow/$(lsb_release --id --short | tr 'A-Z' 'a-z')/apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb" +sudo apt install "./apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb" +wget "https://packages.groonga.org/debian/groonga-apt-source-latest-$(lsb_release --codename --short).deb" +sudo apt install "./groonga-apt-source-latest-$(lsb_release --codename --short).deb" +sudo apt update +sudo apt install postgresql-12-pgdg-pgroonga + +rm "apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb" "groonga-apt-source-latest-$(lsb_release --codename --short).deb" +``` + +### Redis + +Instructions can be found at [this page](https://redis.io/docs/install/install-redis/). + +```sh +curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg +echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list +sudo apt update +sudo apt install redis + +sudo systemctl enable --now redis-server + +# check version +redis-cli --version +``` + +### FFmpeg + +```sh +sudo apt install ffmpeg +``` + +## 2. Set up a database + +1. Create a database user + ```sh + sudo -u postgres createuser --no-createdb --no-createrole --no-superuser --encrypted --pwprompt firefish + ``` + If you forgot the password you typed, you can reset it by executing `sudo -u postgres psql -c "ALTER USER firefish PASSWORD 'password';"`. +2. Create a database + ```sh + sudo -u postgres createdb --encoding='UTF8' --owner=firefish firefish_db + ``` +3. Enable PGronnga extension + ```sh + sudo -u postgres psql --command='CREATE EXTENSION pgroonga;' --dbname=firefish_db + ``` + +## 3. Configure Firefish + +1. Fork the Firefish repository on GitLab +1. Clone your Firefish repository + ```sh + git clone https://firefish.dev/your-user-name/firefish.git + ``` +1. Copy the example database config file + ```sh + cp dev/config.example.env dev/config.env + ``` +1. Create a config file for Firefish + ```sh + cd firefish + vim .config/default.yml + ``` + + ```yaml + url: http://localhost:3000 + port: 3000 + + db: + host: localhost + port: 5432 + db: firefish_db + user: firefish + pass: password + + redis: + host: localhost + port: 6379 + + maxLogLevel: 'debug' # or 'trace' + ``` + +## 4. Build and start Firefish + +1. Install pnpm + ```sh + sudo corepack enable + corepack prepare pnpm@latest --activate + + # check version + pnpm --version + ``` +1. Build + ```sh + pnpm install + pnpm run build:debug + ``` +1. Execute database migrations + ```sh + pnpm run migrate + ``` +1. Start Firefish + ```sh + pnpm run start + ``` + You can access to the local Firefish server on http://localhost:3000 after this message shows up! + ``` + DONE * [core boot] All workers started + DONE * [core boot] Now listening on port 3000 on http://localhost:3000 + ``` diff --git a/docker-compose.example.yml b/docker-compose.example.yml new file mode 100644 index 0000000..4903205 --- /dev/null +++ b/docker-compose.example.yml @@ -0,0 +1,77 @@ +version: "3" + +services: + web: + image: registry.firefish.dev/firefish/firefish:latest + container_name: firefish_web + restart: unless-stopped + depends_on: + db: + condition: service_healthy + redis: + condition: service_healthy + ports: + - "3000:3000" + networks: + - calcnet +# - web + environment: + NODE_ENV: production + NODE_OPTIONS: --max-old-space-size=3072 + volumes: + - ./custom:/firefish/custom:ro + - ./files:/firefish/files + - ./.config:/firefish/.config:ro + healthcheck: + test: curl -f http://localhost:3000 || exit 1 + interval: 5s + timeout: 5s + retries: 5 + # deploy: + # resources: + # limits: + # memory: 2048M + + redis: + restart: unless-stopped + image: docker.io/redis:7.0-alpine + container_name: firefish_redis + networks: + - calcnet + volumes: + - ./redis:/data + healthcheck: + test: redis-cli ping + interval: 5s + timeout: 5s + retries: 5 + # deploy: + # resources: + # limits: + # memory: 256M + + db: + restart: unless-stopped + image: docker.io/groonga/pgroonga:3.1.8-alpine-16-slim + container_name: firefish_db + networks: + - calcnet + env_file: + - .config/docker.env + volumes: + - ./db:/var/lib/postgresql/data + healthcheck: + test: pg_isready --user="$${POSTGRES_USER}" --dbname="$${POSTGRES_DB}" + interval: 5s + timeout: 5s + retries: 5 + # deploy: + # resources: + # limits: + # memory: 2048M + +networks: + calcnet: + # web: + # external: + # name: web diff --git a/docs/activitypub-extensions.md b/docs/activitypub-extensions.md new file mode 100644 index 0000000..7c1e35a --- /dev/null +++ b/docs/activitypub-extensions.md @@ -0,0 +1,10 @@ +# Firefish's ActivityPub extensions + +These are the extensions to ActivityPub that Firefish implements. This page uses [compact IRIs](https://www.w3.org/TR/json-ld/#dfn-compact-iri). The `firefish` prefix is used to refer to `https://firefish.dev/ns#`. + +## speakAsCat + +- Compact IRI: `firefish:speakAsCat` +- Canonical IRI: `https://firefish.dev/ns#speakAsCat` + +Used on actors to indicate that they not only identify as a cat, but also want to have their text be transformed to speak like one, expressed as a boolean value. If this property is set to true, displaying the actor’s posts will make them speak with “nya” instead of “na” and other cat-related text mannerisms. Used in combination with [misskey:isCat](https://misskey-hub.net/ns/#iscat). diff --git a/docs/api-change.md b/docs/api-change.md new file mode 100644 index 0000000..15fd311 --- /dev/null +++ b/docs/api-change.md @@ -0,0 +1,282 @@ +# Changes to the Firefish API + +Breaking changes are indicated by the :warning: icon. + +## v20240728 + +- Added `name`, `category`, `aliases`, `license` optional parameters to `admin/emoji/add` endpoint. +- Added `name` optional parameter to `drive/files/upload-from-url` endpoint. + +## v20240725 + +- Added `i/export-followers` endpoint. + +## v20240714 + +- The old Mastodon API has been replaced with a new implementation based on Iceshrimp’s. + - :warning: The new API uses a new format to manage Mastodon sessions in the database, whereas old implementation uses Misskey sessions. All previous client app and token registrations will not work with the new API. All clients need to be re-registered and all users need to re-authenticate. + - :warning: All IDs (of statuses/notes, notifications, users, etc.) will be using the alphanumerical format, aligning with the Firefish/Misskey API. The old numerical IDs will not work when queried against the new API. + +

+ +Available endpoints (under https://instance-domain/api/) + +| method | endpoint | note | +|----------|------------------------------------|--------------------------------------------| +| `POST` | `oauth/token` | | +| `POST` | `oauth/revoke` | | +| `POST` | `v1/apps` | | +| `GET` | `v1/apps/verify_credentials` | | +| `POST` | `v1/firefish/apps/info` | Firefish extension, uses MiAuth | +| `POST` | `v1/firefish/auth/code` | Firefish extension, uses MiAuth | +| | | | +| `GET` | `v1/accounts/verify_credentials` | | +| `PATCH` | `v1/accounts/update_credentials` | | +| `GET` | `v1/accounts/lookup` | | +| `GET` | `v1/accounts/relationships` | | +| `GET` | `v1/accounts/search` | | +| `GET` | `v1/accounts/:id` | | +| `GET` | `v1/accounts/:id/statuses` | | +| `GET` | `v1/accounts/:id/featured_tags` | | +| `GET` | `v1/accounts/:id/followers` | | +| `GET` | `v1/accounts/:id/following` | | +| `GET` | `v1/accounts/:id/lists` | | +| `POST` | `v1/accounts/:id/follow` | | +| `POST` | `v1/accounts/:id/unfollow` | | +| `POST` | `v1/accounts/:id/block` | | +| `POST` | `v1/accounts/:id/unblock` | | +| `POST` | `v1/accounts/:id/mute` | | +| `POST` | `v1/accounts/:id/unmute` | | +| | | | +| `GET` | `v1/featured_tags` | always returns an empty list | +| `GET` | `v1/followed_tags` | always returns an empty list | +| `GET` | `v1/bookmarks` | | +| `GET` | `v1/favourites` | | +| | | | +| `GET` | `v1/mutes` | | +| `GET` | `v1/blocks` | | +| `GET` | `v1/follow_requests` | | +| `POST` | `v1/follow_requests/:id/authorize` | | +| `POST` | `v1/follow_requests/:id/reject` | | +| | | | +| `GET` | `v1/filters` | | +| `POST` | `v1/filters` | | +| `GET` | `v2/filters` | | +| `POST` | `v2/filters` | | +| | | | +| `GET` | `v1/lists` | | +| `POST` | `v1/lists` | | +| `GET` | `v1/lists/:id` | | +| `PUT` | `v1/lists/:id` | | +| `DELETE` | `v1/lists/:id` | | +| `GET` | `v1/lists/:id/accounts` | | +| `POST` | `v1/lists/:id/accounts` | | +| `DELETE` | `v1/lists/:id/accounts` | | +| | | | +| `GET` | `v1/media/:id` | | +| `PUT` | `v1/media/:id` | | +| `POST` | `v1/media` | | +| `POST` | `v2/media` | | +| | | | +| `GET` | `v1/custom_emojis` | | +| `GET` | `v1/instance` | | +| `GET` | `v2/instance` | | +| `GET` | `v1/announcements` | | +| `POST` | `v1/announcements/:id/dismiss` | | +| `GET` | `v1/trends` | pagination is unimplemented | +| `GET` | `v1/trends/tags` | pagination is unimplemented | +| `GET` | `v1/trends/statuses` | | +| `GET` | `v1/trends/links` | always returns an empty list | +| `GET` | `v1/preferences` | | +| `GET` | `v2/suggestions` | | +| | | | +| `GET` | `v1/notifications` | | +| `GET` | `v1/notifications/:id` | | +| `POST` | `v1/notifications/clear` | | +| `POST` | `v1/notifications/:id/dismiss` | | +| `POST` | `v1/conversations/:id/read` | | +| `GET` | `v1/push/subscription` | | +| `POST` | `v1/push/subscription` | | +| `DELETE` | `v1/push/subscription` | | +| | | | +| `GET` | `v1/search` | | +| `GET` | `v2/search` | | +| | | | +| `POST` | `v1/statuses` | | +| `PUT` | `v1/statuses/:id` | | +| `GET` | `v1/statuses/:id` | | +| `DELETE` | `v1/statuses/:id` | | +| `GET` | `v1/statuses/:id/context` | | +| `GET` | `v1/statuses/:id/history` | | +| `GET` | `v1/statuses/:id/source` | | +| `GET` | `v1/statuses/:id/reblogged_by` | | +| `GET` | `v1/statuses/:id/favourited_by` | | +| `POST` | `v1/statuses/:id/favourite` | | +| `POST` | `v1/statuses/:id/unfavourite` | | +| `POST` | `v1/statuses/:id/reblog` | | +| `POST` | `v1/statuses/:id/unreblog` | | +| `POST` | `v1/statuses/:id/bookmark` | | +| `POST` | `v1/statuses/:id/unbookmark` | | +| `POST` | `v1/statuses/:id/pin` | | +| `POST` | `v1/statuses/:id/unpin` | | +| `POST` | `v1/statuses/:id/react/:name` | | +| `POST` | `v1/statuses/:id/unreact/:name` | | +| `POST` | `v1/statuses/:id/translate` | | +| | | | +| `GET` | `v1/polls/:id` | | +| `POST` | `v1/polls/:id/votes` | | +| | | | +| `GET` | `v1/scheduled_statuses` | | +| `GET` | `v1/scheduled_statuses/:id` | reschedule (`PUT` method) is unimplemented | +| `DELETE` | `v1/scheduled_statuses/:id` | | +| | | | +| `GET` | `v1/streaming/health` | | +| | | | +| `GET` | `v1/timelines/public` | | +| `GET` | `v1/timelines/tag/:hashtag` | | +| `GET` | `v1/timelines/home` | | +| `GET` | `v1/timelines/list/:listId` | | +| `GET` | `v1/conversations` | | +| `GET` | `v1/markers` | | +| `POST` | `v1/markers` | | + +
+ +## v20240710 + +- Added `readCatLanguage` field to the response of `i` and request of `i/update` (optional). + +## v20240607 + +- `GET` request is now allowed for the `latest-version` endpoint. + +## v20240523 + +- Added `scheduledAt` optional parameter to `notes/create` (!10789) + +## v20240516 + +- :warning: `server-info` (an endpoint to get server hardware information) now requires credentials. +- :warning: `net` (server's default network interface) has been removed from `admin/server-info`. +- Adding `lang` to the response of `i` and the request parameter of `i/update`. + +## v20240504 + +- :warning: Removed `release` endpoint. + +## v20240424 + +- Added `antennaLimit` field to the response of `meta` and `admin/meta`, and the request of `admin/update-meta` (optional). +- Added `filter` optional parameter to `notes/renotes` endpoint to filter the types of renotes. It can take the following values: + - `all` (default) + - `renote` + - `quote` +- :warning: Removed the following optional parameters in `notes/reactions`, as they were never taken into account due to a bug: + - `sinceId` + - `untilId` + +## v20240413 + +- :warning: Removed `patrons` endpoint. + +## v20240405 + +- Added `notes/history` endpoint. + +## v20240319 + +- :warning: `followingCount` and `followersCount` in `users/show` will be `null` (instead of 0) if these values are unavailable. +- :warning: `admin/search/index-all` is removed since posts are now indexed automatically. +- New optional parameters are added to `notes/search` endpoint: + - `sinceDate` + - `untilDate` + - `withFiles` + - `searchCwAndAlt` +- Added `enableGuestTimeline` field to the response of `meta` and `admin/meta`, and the request of `admin/update-meta` (optional). + +## v20240301 + +- With the addition of new features, the following endpoints are added: + - check your follow requests that haven't been approved + - `following/requests/sent` + - per-user reply mutes + - `reply-mute/create` + - `reply-mute/delete` + - `reply-mute/list` +- :warning: The following (horrible) endpoints are removed: + - `admin/vacuum` + - `reset-db` + +## v20240228 + +- :warning: The following endpoints are removed: + - `charts/ap-request` + - `charts/drive` + - `charts/federation` + - `charts/hashtag` + - `charts/instance` + - `charts/notes` + - `charts/user/drive` + - `charts/user/following` + - `charts/user/notes` + - `charts/user/reactions` + - `charts/users` + +## v20240221 + +- Added `admin/set-emoji-moderator` endpoint, where moderators can give these permissions to regular users: + - `add`: Add new custom emojis, set tag/category/license to newly added custom emojis + - `mod`: `add` permission + edit the name/category/tag/license of the existing custom emojis + - `full`: `mod` permission + delete existing custom emojis +- Emoji moderators are able to access to the endpoints under `admin/emoji/` +- Removed `lang` from the response of `i` and the request parameter of `i/update`. +- Added `notes/make-private` endpoint. + +## v20240217 + +- :warning: Since the auto NSFW media detection has been removed, these endpoints are affected: + - `admin/meta` + - These parameter(s) are removed from the response field: + - `sensitiveMediaDetection` + - `sensitiveMediaDetectionSensitivity` + - `setSensitiveFlagAutomatically` + - `enableSensitiveMediaDetectionForVideos` + - `admin/update-meta` + - These parameter(s) are removed from the request field: + - `sensitiveMediaDetection` + - `sensitiveMediaDetectionSensitivity` + - `setSensitiveFlagAutomatically` + - `enableSensitiveMediaDetectionForVideos` + - `admin/show-user` + - These parameter(s) are removed from the response field: + - `autoSensitive` + - `i/update` + - These parameter(s) are removed from the request field: + - `autoSensitive` +- `/api/emojis` endpoint has been added. + +## v20240212 + +- :warning: The field name of the response of `latest-version` has been changed from `tag_name` to `latest_version`. + +## v1.0.5-rc + +- `admin/update-meta` can now take `moreUrls` parameter, and response of `admin/meta` now includes `moreUrls` + - These URLs are used for the help menu ([related merge request](https://firefish.dev/firefish/firefish/-/merge_requests/10640)) +- :warning: response of `meta` no longer includes the following: + - `enableTwitterIntegration` + - `enableGithubIntegration` + - `enableDiscordIntegration` +- :warning: parameter of `admin/update-meta` and response of `admin/meta` no longer include the following: + - `enableTwitterIntegration` + - `enableGithubIntegration` + - `enableDiscordIntegration` + - `twitterConsumerKey` + - `twitterConsumerSecret` + - `githubClientId` + - `githubClientSecret` + - `discordClientId` + - `discordClientSecret` +- :warning: response of `admin/show-user` no longer includes `integrations`. +- Added `lang` parameter to `notes/create` and `notes/edit`. +- :warning: `notes/translate` now requires credentials. diff --git a/docs/api-doc.md b/docs/api-doc.md new file mode 100644 index 0000000..67ca892 --- /dev/null +++ b/docs/api-doc.md @@ -0,0 +1,5 @@ +# API Documentation + +You can find interactive API documentation at any Firefish instance /api-doc endpoint. By the way, API console can be found at /api-console endpoint. + +You can also find more about firefish-js [here](../packages/firefish-js/README.md). diff --git a/docs/changelog.md b/docs/changelog.md new file mode 100644 index 0000000..1f4729f --- /dev/null +++ b/docs/changelog.md @@ -0,0 +1,263 @@ +# Changelog + +Critical security updates are indicated by the :warning: icon. + +This changelog is not an exhaustive list. Code refactorings, minor bug fixes, documentation/dependency updates, etc. are usually not listed here. If you want to see all changes, click on the version number and check the commit history. + +- Server administrators must check [notice-for-admins.md](https://firefish.dev/firefish/firefish/-/blob/main/docs/notice-for-admins.md) as well. +- Third-party client/bot developers may want to check [api-change.md](https://firefish.dev/firefish/firefish/-/blob/main/docs/api-change.md) as well. + +## [v20240729](https://firefish.dev/firefish/firefish/-/merge_requests/11214/commits) + +- Fix bugs (including a medium severity security issue) + - We are very thankful to Laura Hausmann for kindly sharing the information about the security issue. + +## [v20240728](https://firefish.dev/firefish/firefish/-/merge_requests/11211/commits) + +- Improve `admin/emoji/add` API +- Fix bugs + +## [v20240725](https://firefish.dev/firefish/firefish/-/merge_requests/11196/commits) + +- Add followers list export feature +- Add description about excluding conditions (e.g., 'firefish -info.firefish.dev', '(sleepy OR eepy) -morning') in post search + - Technically this is not a new feature +- Fix bugs + +## [v20240714](https://firefish.dev/firefish/firefish/-/merge_requests/11146/commits) + +- Mastodon API implementation was ported from Iceshrimp, with added Firefish extensions including push notifications, post languages, schedule post support, and more. (#10880) +- Fix bugs + +### Acknowledgement + +The new Mastodon API support would not have been possible without the significant dedication of Laura Hausmann (Iceshrimp lead developer). We thank her and other Iceshrimp contributors from the bottom of our hearts. + +### Breaking changes + +- The new Mastodon API uses a new format to manage Mastodon sessions in the database, whereas old implementation uses Misskey sessions. All previous client app and token registrations will not work with the new API. All clients need to be re-registered and all users need to re-authenticate. +- All IDs (of statuses/notes, notifications, users, etc.) will be using the alphanumerical format, aligning with the Firefish/Misskey API. The old numerical IDs will not work when queried against the new API. + +### Important Notice + +The new Mastodon API support still contains some incompatibilities and unimplemented features, so please keep in mind that you may experience glitchy behavior, and please do NOT report such issues to Mastodon client apps. Such a “bug” is likely due to our implementation, and Mastodon client developers should not be bothered by such an invalid bug report. In the worst scenario, they may simply block non-Mastodon implementations (some clients already do that). + +If you find an incompatibility issue (a bug not reproducible with a vanilla Mastodon server), file it to the Firefish repository instead. However, please remember that it is impossible to achieve 100% compatibility, given that Mastodon servers don’t behave exactly like its own documentation. + +## [v20240710](https://firefish.dev/firefish/firefish/-/merge_requests/11110/commits) + +- Add ability to disable the cat language conversion (nyaification) +- Fix bugs + +## [v20240630](https://firefish.dev/firefish/firefish/-/merge_requests/11072/commits) + +- Add ability to automatically append #Alt4Me hashtag when posting a file without an alt text ([What is #Alt4Me?](https://social.growyourown.services/@FediTips/112055775451305236)) +- Fix a build issue on some environments +- Fix bugs + +## [v20240623](https://firefish.dev/firefish/firefish/-/merge_requests/11049/commits) + +- Fix bugs + +## [v20240613](https://firefish.dev/firefish/firefish/-/merge_requests/11003/commits) + +This update contains code refactoring and dependency updates, with no major user-facing changes. + +## [v20240607](https://firefish.dev/firefish/firefish/-/merge_requests/10978/commits) + +- Add the ability to share posts via QR code +- Update the API document page (`/api-doc`) +- Fix bugs + +## [v20240601](https://firefish.dev/firefish/firefish/-/merge_requests/10943/commits) + +- Fix bugs + +## [v20240523](https://firefish.dev/firefish/firefish/-/merge_requests/10898/commits) + +- Add scheduled posts +- Fix bugs + +## [v20240516](https://firefish.dev/firefish/firefish/-/merge_requests/10854/commits) + +- Improve timeline UX (you can restore the original appearance by settings) +- Remove `$[center]` MFM function + - This function was suddenly added last year (https://firefish.dev/firefish/firefish/-/commit/1a971efa689323d54eebb4d3646e102fb4d1d95a), but according to the [MFM spec](https://github.com/misskey-dev/mfm.js/blob/6aaf68089023c6adebe44123eebbc4dcd75955e0/docs/syntax.md#fn), `$[something]` must be an inline element (while `center` is a block element), so such a syntax is not expected by MFM renderers. Please use `
` instead. +- Fix bugs + +## [v20240504](https://firefish.dev/firefish/firefish/-/merge_requests/10790/commits) + +- Fix bugs + +## :warning: [v20240430](https://firefish.dev/firefish/firefish/-/merge_requests/10781/commits) + +- Add ability to group similar notifications +- Add features to share links to an account in the three dots menu on the profile page +- Improve server logs +- Fix bugs (including a critical security issue) + - We are very thankful to @tesaguri and Laura Hausmann for helping to fix the security issue. + +## [v20240424](https://firefish.dev/firefish/firefish/-/merge_requests/10765/commits) + +- Improve the usability of the feature to prevent forgetting to write alt texts +- Add a server-wide setting for the maximum number of antennas each user can create +- Fix bugs (including a medium severity security issue) + - We are very thankful to @mei23 for kindly sharing the information about the security issue. + +## [v20240421](https://firefish.dev/firefish/firefish/-/merge_requests/10756/commits) + +- Fix bugs + +## [v20240413](https://firefish.dev/firefish/firefish/-/merge_requests/10741/commits) + +- Add "Media" tab to user page +- Improve federation and rendering of mathematical expressions +- Remove donor information from the web client + - See also: https://info.firefish.dev/notes/9s1n283sb10rh869 +- Fix bugs + +## [v20240405](https://firefish.dev/firefish/firefish/-/merge_requests/10733/commits) + +- Add ability to view the history of post edits (!10714) +- Fix bugs + +## [v20240401](https://firefish.dev/firefish/firefish/-/merge_requests/10724/commits) + +- Fix bugs + +## :warning: [v20240330](https://firefish.dev/firefish/firefish/-/merge_requests/10719/commits) + +- Fix bugs (including a critical security issue) + - We are very thankful to Oneric (the reporter of the security issue) and Laura Hausmann (Iceshrimp maintainer) for kindly and securely sharing the information to fix the issue. + +## [v20240326](https://firefish.dev/firefish/firefish/-/merge_requests/10713/commits) + +- Fix bugs +- Add an icon in the posting form to indicate that attached files have alt text +- Add a toggleable setting to show a warning if the post language setting might be incorrect + +## [v20240319](https://firefish.dev/firefish/firefish/-/compare/v20240301...v20240319?from_project_id=7&straight=false) + +- Introduce new full-text search engine and post search filters +- Refactoring +- Show unlisted posts from following users in antennas (similar to [Fedibird](https://github.com/fedibird/mastodon/tree/fedibird) and [kmyblue](https://github.com/kmycode/mastodon), unlisted posts from people you don't follow won't be shown) +- Add ability to publish the Local and Global timelines on `/timeline` page +- Add langage annotation to post contents (!10687) +- Add a toggleable setting to show a warning when you attempt to post files without alt text +- Fix bugs +- Update documents and example config files +- Added `/authorize_interaction` page, allowing users to jump from a remote Mastodon post/user page to the corresponding page in Firefish (!10702) + +## [v20240301](https://firefish.dev/firefish/firefish/-/compare/v20240229...v20240301?from_project_id=7&straight=false) + +- Add a page (`/my/follow-requests/sent`) to check your follow requests that haven't been approved +- Add ability to hide replies from certain users in timelines +- Admins are now allowed to migrate their account + - This was requested by personal server admins +- Change default client settings (you can restore the previous settings) + - Use system's font + - This is for accessibility reasons (related discussion: ) + - Disable vibrations + - Don't show gaps between posts in timelines + - Show the instance ticker on local posts +- Change default user settings (existing users are not affected) + - Reject crawler indexing + - Set reaction history to public +- Change default server settings (existing servers are not affected) + - Disable new user registration +- Fix bugs + +## [v20240229](https://firefish.dev/firefish/firefish/-/compare/v20240228...v20240229?from_project_id=7&straight=false) + +- Add ability to pull-down-to-refresh timelines in PWA +- Make passkey/security key independent of TOTP (!10670) +- Fix bugs + +## [v20240228](https://firefish.dev/firefish/firefish/-/compare/v20240225...v20240228?from_project_id=7&straight=false) + +- Update "About Firefish" page (!10673) +- Fix bugs (!10675 !10676 !10678 !10679) +- Remove charts generation to improve performance (#10611) + +## [v20240225](https://firefish.dev/firefish/firefish/-/compare/v20240222...v20240225?from_project_id=7&straight=false) + +- Fix bugs +- Add syntax highlighting in MFM code blocks in various programming languages + +## [v20240222](https://firefish.dev/firefish/firefish/-/compare/v20240221-1...v20240222?from_project_id=7&straight=false) + +- Enhance Mastodon post import feature (!10652) +- Minor style change in the web client +- Refactoring + +## [v20240221-1](https://firefish.dev/firefish/firefish/-/compare/v20240221...v20240221-1?from_project_id=7&straight=false) + +- Fix a bug + +## [v20240221](https://firefish.dev/firefish/firefish/-/compare/v20240217-1...v20240221?from_project_id=7&straight=false) + +- Add the ability to give regular (non-moderator) users permission to manage custom emojis +- Fix a bug that made impossible to update user profiles under some conditions +- Add "private" (only me) post visibility + - It's just a paraphrase of DMs without recipients + - You can also convert your existing public posts to private posts + +## :warning: [v20240217-1](https://firefish.dev/firefish/firefish/-/compare/v20240217...v20240217-1?from_project_id=7&straight=false) + +- Fix a [security issue](https://github.com/misskey-dev/misskey/security/advisories/GHSA-qqrm-9grj-6v32) + +## [v20240217](https://firefish.dev/firefish/firefish/-/compare/v20240216...v20240217?from_project_id=7&straight=false) + +- Add ability to specify the search engine used in the search bar MFM +- Remove auto NSFW media detection +- The "Hide NSFW media" config is now per device and per account +- Increase the max number of pinned posts from 5 to 15 +- Change the second tab on the notifications page from "unread" to "reactions" +- Add ability to show a huge post button on the posting form + - This is a joke feature inspired by https://mstdn.poyo.me/@prime/110668364208741253 +- Fix bugs +- Add `/api/emojis` endpoint (compatible with Misskey v13) for better experiences with Misskey clients + - This does not mean we will continue to maintain API compatibility with Misskey. Instead, we plan to improve the compatibility with the Mastodon API. + +## [v20240216](https://firefish.dev/firefish/firefish/-/compare/v20240215...v20240216?from_project_id=7&straight=false) + +- Style changes in the web client (a770ef4314e21f17fdce1f19feb3758953b04486 ab39ff5954a392cc6688a02f1723e1702df5e35c 4eefd534d8150e2cd5cf31dddd327edceb5b84dc) +- Clicking the "like" button now sends the actual emoji reaction (star, good, heart, etc.) instead of an empty "like" + +## [v20240215](https://firefish.dev/firefish/firefish/-/compare/v20240214...v20240215?from_project_id=7&straight=false) + +- Separate settings for displaying rounded avatars for cat and non-cat accounts +- Add a toggleable setting to replace the chat button with account menu on mobile +- Reduce the size of the container image (!10667) + +## [v20240214](https://firefish.dev/firefish/firefish/-/compare/v20240213...v20240214?from_project_id=7&straight=false) + +- Fix container images + +## [v20240213](https://firefish.dev/firefish/firefish/-/compare/v20240212...v20240213?from_project_id=7&straight=false) + +- Fix bugs +- Refactoring + +## [v20240212](https://firefish.dev/firefish/firefish/-/compare/v20240210...v20240212?from_project_id=7&straight=false) + +- Refactoring +- Add a toggleable setting to hide follow buttons in a misclickable position +- Add a toggleable setting to show preview in posting form by default + +## [v20240210](https://firefish.dev/firefish/firefish/-/compare/v20240208...v20240210?from_project_id=7&straight=false) + +- Security update (cf5b42a160ae8a4d94bf3dcea04ce12935ca4f76) +- Refactoring + +## [v20240208](https://firefish.dev/firefish/firefish/-/compare/v20240206...v20240208?from_project_id=7&straight=false) + +- Fix bugs (!10654 !10665) +- Enlarge profile picture by clicking it (!10659) +- Support Pleroma chat (!10660) +- [Add documentation about downgrading](./docs/downgrade.md) + +## [v20240206](https://firefish.dev/firefish/firefish/-/compare/v1.0.5-rc...v20240206?from_project_id=7&straight=false) + +- Fix many bugs +- Per-post language selector (!10616) diff --git a/docs/downgrade.md b/docs/downgrade.md new file mode 100644 index 0000000..1a87af8 --- /dev/null +++ b/docs/downgrade.md @@ -0,0 +1,78 @@ +# Downgrading to `v20240206` + +## systemd/pm2 + +1. Stop the Firefish service + ```sh + sudo systemctl stop your-firefish-service.service + # or pm2 stop firefish + ``` +1. Take a backup +1. Revert database migrations + ```sh + sudo --user=postgres psql --file=docs/downgrade.sql --dbname=database_name + ``` + + The database name can be found in `.config/default.yml`. + ```yaml + db: + port: 5432 + db: database_name # this one + user: firefish + pass: password + ``` +1. Switch back to the `v20240206` tag + ```sh + git switch --detach v20240206 + ``` +1. Rebuild Firefish + ```sh + pnpm install --frozen-lockfile + NODE_ENV='production' NODE_OPTIONS='--max_old_space_size=3072' pnpm run rebuild + ``` +1. Start the Firefish service and confirm that Firefish is downgraded + ```sh + sudo systemctl start your-firefish-service.service + # or pm2 start firefish + ``` + +## Docker/Podman + +1. Stop the container + ```sh + docker-compose down + # or podman-compose down + ``` +1. Take a backup +1. Revert database migrations + ```sh + docker-compose exec db psql --command="$(cat docs/downgrade.sql)" --user=user_name --dbname=database_name + # or podman-compose exec db psql --command="$(cat docs/revert.sql)" --user=user_name --dbname=database_name + ``` + + The user and database name can be found in `.config/docker.env`. + ```env + POSTGRES_PASSWORD=password + POSTGRES_USER=user_name # user name + POSTGRES_DB=database_name # database name + ``` +1. Change Firefish image tag from `latest` to `v20240206` + ```sh + vim docker-compose.yml + ``` + + ```yaml + version: "3" + + services: + web: + image: registry.firefish.dev/firefish/firefish:v20240206 # here + ``` +1. Change database image from `docker.io/groonga/pgroonga` to `docker.io/postgres` + + Please make sure to use the same PostgreSQL version. For example, if you are using `docker.io/groonga/pgroonga:3.1.8-alpine-16`, you should change it to `docker.io/postgres:16-alpine`. PGroonga images are tagged as `{PGroonga version}-{alpine or debian}-{PostgreSQL major version}`. PostgreSQL image tags can be found at . +1. Start the container and confirm that Firefish is downgraded + ```sh + docker-compose up --detach + # or podman-compose up --detach + ``` diff --git a/docs/downgrade.sql b/docs/downgrade.sql new file mode 100644 index 0000000..24f0f4b --- /dev/null +++ b/docs/downgrade.sql @@ -0,0 +1,844 @@ +BEGIN; + +DELETE FROM "migrations" WHERE name IN ( + 'SetAccessTokenName1722134626110', + 'CreateSystemActors1720618854585', + 'AddMastodonSubscriptionType1715181461692', + 'SwSubscriptionAccessToken1709395223611', + 'UserProfileMentions1711075007936', + 'ClientCredentials1713108561474', + 'TurnOffCatLanguage1720107645050', + 'RefactorScheduledPosts1716804636187', + 'RemoveEnumTypenameSuffix1716462794927', + 'CreateScheduledNote1714728200194', + 'AddBackTimezone1715351290096', + 'UserprofileJsonbToArray1714270605574', + 'DropUnusedUserprofileColumns1714259023878', + 'AntennaJsonbToArray1714192520471', + 'AddUserProfileLanguage1714888400293', + 'DropUnusedIndexes1714643926317', + 'AlterAkaType1714099399879', + 'AddDriveFileUsage1713451569342', + 'ConvertCwVarcharToText1713225866247', + 'FixChatFileConstraint1712855579316', + 'DropTimeZone1712425488543', + 'ExpandNoteEdit1711936358554', + 'markLocalFilesNsfwByDefault1709305200000', + 'FixMutingIndices1710690239308', + 'NoteFile1710304584214', + 'RenameMetaColumns1705944717480', + 'SeparateHardMuteWordsAndPatterns1706413792769', + 'IndexAltTextAndCw1708872574733', + 'Pgroonga1698420787202', + 'ChangeDefaultConfigs1709251460718', + 'AddReplyMuting1704851359889', + 'FixNoteUrlIndex1709129810501', + 'RemoveCharts1709047957489', + 'DropUserProfileLanguage1708452631156', + 'EmojiModerator1692825433698', + 'RemoveNsfwDetection1705848938166', + 'FirefishUrlMove1707850084123', + 'RemoveNativeUtilsMigration1705877093218' +); + +-- addMastodonSubscriptionType +ALTER TABLE "sw_subscription" DROP COLUMN "subscriptionTypes"; +DROP TYPE "push_subscription_type"; + +-- sw-subscription-per-access-token +ALTER TABLE "sw_subscription" DROP CONSTRAINT "FK_98a1aa2db2a5253924f42f38767"; +ALTER TABLE "sw_subscription" DROP COLUMN "appAccessTokenId"; + +-- user-profile-mentions +ALTER TABLE "user_profile" DROP COLUMN "mentions"; + +-- client-credential-support +ALTER TABLE "access_token" ALTER COLUMN "userId" SET NOT NULL; + +-- turn-off-cat-language +ALTER TABLE "user" DROP COLUMN "readCatLanguage"; + +-- refactor-scheduled-post +CREATE TABLE "scheduled_note" ( + "id" character varying(32) NOT NULL PRIMARY KEY, + "noteId" character varying(32) NOT NULL, + "userId" character varying(32) NOT NULL, + "scheduledAt" TIMESTAMP WITH TIME ZONE NOT NULL +); +COMMENT ON COLUMN "scheduled_note"."noteId" IS 'The ID of the temporarily created note that corresponds to the schedule.'; +CREATE EXTENSION pgcrypto; +CREATE FUNCTION generate_scheduled_note_id(size int) RETURNS text AS $$ DECLARE + characters text := 'abcdefghijklmnopqrstuvwxyz0123456789'; + bytes bytea := gen_random_bytes(size); + l int := length(characters); + i int := 0; + output text := ''; + BEGIN + WHILE i < size LOOP + output := output || substr(characters, get_byte(bytes, i) % l + 1, 1); + i := i + 1; + END LOOP; + RETURN output; + END; +$$ LANGUAGE plpgsql VOLATILE; +INSERT INTO "scheduled_note" ("id", "noteId", "userId", "scheduledAt") (SELECT generate_scheduled_note_id(16), "id", "userId", "scheduledAt" FROM "note" WHERE "note"."scheduledAt" IS NOT NULL); +DROP EXTENSION pgcrypto; +DROP FUNCTION "generate_scheduled_note_id"; +CREATE INDEX "IDX_noteId_ScheduledNote" ON "scheduled_note" ("noteId"); +CREATE INDEX "IDX_userId_ScheduledNote" ON "scheduled_note" ("userId"); +ALTER TABLE "scheduled_note" ADD FOREIGN KEY ("noteId") REFERENCES "note"("id") ON DELETE CASCADE ON UPDATE NO ACTION; +ALTER TABLE "scheduled_note" ADD FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION; +ALTER TABLE "note" DROP COLUMN "scheduledAt"; + +-- remove-enum-typename-suffix +ALTER TYPE "antenna_src" RENAME TO "antenna_src_enum"; +ALTER TYPE "drive_file_usage_hint" RENAME TO "drive_file_usage_hint_enum"; +ALTER TYPE "muted_note_reason" RENAME TO "muted_note_reason_enum"; +ALTER TYPE "note_visibility" RENAME TO "note_visibility_enum"; +ALTER TYPE "notification_type" RENAME TO "notification_type_enum"; +ALTER TYPE "page_visibility" RENAME TO "page_visibility_enum"; +ALTER TYPE "poll_note_visibility" RENAME TO "poll_notevisibility_enum"; +ALTER TYPE "relay_status" RENAME TO "relay_status_enum"; +ALTER TYPE "user_emoji_mod_perm" RENAME TO "user_emojimodperm_enum"; +ALTER TYPE "user_profile_ffvisibility" RENAME TO "user_profile_ffvisibility_enum"; +ALTER TYPE "user_profile_muting_notification_types" RENAME TO "user_profile_mutingnotificationtypes_enum"; + +-- create-scheduled-note +DROP TABLE "scheduled_note"; + +-- userprofile-jsonb-to-array +ALTER TABLE "user_profile" RENAME COLUMN "mutedInstances" TO "mutedInstances_old"; +ALTER TABLE "user_profile" ADD COLUMN "mutedInstances" jsonb NOT NULL DEFAULT '[]'; +UPDATE "user_profile" SET "mutedInstances" = to_jsonb("mutedInstances_old"); +ALTER TABLE "user_profile" DROP COLUMN "mutedInstances_old"; +ALTER TABLE "user_profile" RENAME COLUMN "mutedWords" TO "mutedWords_old"; +ALTER TABLE "user_profile" ADD COLUMN "mutedWords" jsonb NOT NULL DEFAULT '[]'; +CREATE TEMP TABLE "BCrsGgLCUeMMLARy" ("userId" character varying(32), "kws" jsonb NOT NULL DEFAULT '[]'); +INSERT INTO "BCrsGgLCUeMMLARy" ("userId", "kws") SELECT "userId", jsonb_agg("X"."w") FROM (SELECT "userId", to_jsonb(string_to_array(unnest("mutedWords_old"), ' ')) AS "w" FROM "user_profile") AS "X" GROUP BY "userId"; +UPDATE "user_profile" SET "mutedWords" = "kws" FROM "BCrsGgLCUeMMLARy" WHERE "user_profile"."userId" = "BCrsGgLCUeMMLARy"."userId"; +ALTER TABLE "user_profile" DROP COLUMN "mutedWords_old"; + +-- drop-unused-userprofile-columns +ALTER TABLE "user_profile" ADD "room" jsonb NOT NULL DEFAULT '{}'; +COMMENT ON COLUMN "user_profile"."room" IS 'The room data of the User.'; +ALTER TABLE "user_profile" ADD "clientData" jsonb NOT NULL DEFAULT '{}'; +COMMENT ON COLUMN "user_profile"."clientData" IS 'The client-specific data of the User.'; + +-- antenna-jsonb-to-array +UPDATE "antenna" SET "instances" = '{""}' WHERE "instances" = '{}'; +ALTER TABLE "antenna" RENAME COLUMN "instances" TO "instances_old"; +ALTER TABLE "antenna" ADD COLUMN "instances" jsonb NOT NULL DEFAULT '[]'; +UPDATE "antenna" SET "instances" = to_jsonb("instances_old"); +ALTER TABLE "antenna" DROP COLUMN "instances_old"; +UPDATE "antenna" SET "keywords" = '{""}' WHERE "keywords" = '{}'; +ALTER TABLE "antenna" RENAME COLUMN "keywords" TO "keywords_old"; +ALTER TABLE "antenna" ADD COLUMN "keywords" jsonb NOT NULL DEFAULT '[]'; +CREATE TEMP TABLE "QvPNcMitBFkqqBgm" ("id" character varying(32), "kws" jsonb NOT NULL DEFAULT '[]'); +INSERT INTO "QvPNcMitBFkqqBgm" ("id", "kws") SELECT "id", jsonb_agg("X"."w") FROM (SELECT "id", to_jsonb(string_to_array(unnest("keywords_old"), ' ')) AS "w" FROM "antenna") AS "X" GROUP BY "id"; +UPDATE "antenna" SET "keywords" = "kws" FROM "QvPNcMitBFkqqBgm" WHERE "antenna"."id" = "QvPNcMitBFkqqBgm"."id"; +ALTER TABLE "antenna" DROP COLUMN "keywords_old"; +UPDATE "antenna" SET "excludeKeywords" = '{""}' WHERE "excludeKeywords" = '{}'; +ALTER TABLE "antenna" RENAME COLUMN "excludeKeywords" TO "excludeKeywords_old"; +ALTER TABLE "antenna" ADD COLUMN "excludeKeywords" jsonb NOT NULL DEFAULT '[]'; +CREATE TEMP TABLE "MZvVSjHzYcGXmGmz" ("id" character varying(32), "kws" jsonb NOT NULL DEFAULT '[]'); +INSERT INTO "MZvVSjHzYcGXmGmz" ("id", "kws") SELECT "id", jsonb_agg("X"."w") FROM (SELECT "id", to_jsonb(string_to_array(unnest("excludeKeywords_old"), ' ')) AS "w" FROM "antenna") AS "X" GROUP BY "id"; +UPDATE "antenna" SET "excludeKeywords" = "kws" FROM "MZvVSjHzYcGXmGmz" WHERE "antenna"."id" = "MZvVSjHzYcGXmGmz"."id"; +ALTER TABLE "antenna" DROP COLUMN "excludeKeywords_old"; + +-- drop-unused-indexes +CREATE INDEX "IDX_01f4581f114e0ebd2bbb876f0b" ON "note_reaction" ("createdAt"); +CREATE INDEX "IDX_0610ebcfcfb4a18441a9bcdab2" ON "poll" ("userId"); +CREATE INDEX "IDX_25dfc71b0369b003a4cd434d0b" ON "note" ("attachedFileTypes"); +CREATE INDEX "IDX_2710a55f826ee236ea1a62698f" ON "hashtag" ("mentionedUsersCount"); +CREATE INDEX "IDX_4c02d38a976c3ae132228c6fce" ON "hashtag" ("mentionedRemoteUsersCount"); +CREATE INDEX "IDX_51c063b6a133a9cb87145450f5" ON "note" ("fileIds"); +CREATE INDEX "IDX_54ebcb6d27222913b908d56fd8" ON "note" ("mentions"); +CREATE INDEX "IDX_7fa20a12319c7f6dc3aed98c0a" ON "poll" ("userHost"); +CREATE INDEX "IDX_88937d94d7443d9a99a76fa5c0" ON "note" ("tags"); +CREATE INDEX "IDX_b11a5e627c41d4dc3170f1d370" ON "notification" ("createdAt"); +CREATE INDEX "IDX_c8dfad3b72196dd1d6b5db168a" ON "drive_file" ("createdAt"); +CREATE INDEX "IDX_d57f9030cd3af7f63ffb1c267c" ON "hashtag" ("attachedUsersCount"); +CREATE INDEX "IDX_e5848eac4940934e23dbc17581" ON "drive_file" ("uri"); +CREATE INDEX "IDX_fa99d777623947a5b05f394cae" ON "user" ("tags"); + +-- alter-aka-type +ALTER TABLE "user" RENAME COLUMN "alsoKnownAs" TO "alsoKnownAsOld"; +ALTER TABLE "user" ADD COLUMN "alsoKnownAs" text; +UPDATE "user" SET "alsoKnownAs" = array_to_string("alsoKnownAsOld", ','); +COMMENT ON COLUMN "user"."alsoKnownAs" IS 'URIs the user is known as too'; +ALTER TABLE "user" DROP COLUMN "alsoKnownAsOld"; + +-- AddDriveFileUsage +ALTER TABLE "drive_file" DROP COLUMN "usageHint"; +DROP TYPE "drive_file_usage_hint_enum"; + +-- convert-cw-varchar-to-text +DROP INDEX "IDX_8e3bbbeb3df04d1a8105da4c8f"; +ALTER TABLE "note" ALTER COLUMN "cw" TYPE character varying(512); +CREATE INDEX "IDX_8e3bbbeb3df04d1a8105da4c8f" ON "note" USING "pgroonga" ("cw" pgroonga_varchar_full_text_search_ops_v2); + +-- fix-chat-file-constraint +ALTER TABLE "messaging_message" DROP CONSTRAINT "FK_535def119223ac05ad3fa9ef64b"; +ALTER TABLE "messaging_message" ADD CONSTRAINT "FK_535def119223ac05ad3fa9ef64b" FOREIGN KEY ("fileId") REFERENCES "drive_file"("id") ON DELETE CASCADE ON UPDATE NO ACTION; + +-- expand-note-edit +ALTER TABLE "note_edit" DROP COLUMN "emojis"; + +-- markLocalFilesNsfwByDefault +ALTER TABLE "meta" DROP COLUMN "markLocalFilesNsfwByDefault"; + +-- fix-muting-indices +DROP INDEX "IDX_renote_muting_createdAt"; +DROP INDEX "IDX_renote_muting_muteeId"; +DROP INDEX "IDX_renote_muting_muterId"; +DROP INDEX "IDX_reply_muting_createdAt"; +DROP INDEX "IDX_reply_muting_muteeId"; +DROP INDEX "IDX_reply_muting_muterId"; +CREATE INDEX "IDX_renote_muting_createdAt" ON "muting" ("createdAt"); +CREATE INDEX "IDX_renote_muting_muteeId" ON "muting" ("muteeId"); +CREATE INDEX "IDX_renote_muting_muterId" ON "muting" ("muterId"); + +-- note-file +DROP TABLE "note_file"; + +-- rename-meta-columns +ALTER TABLE "meta" RENAME COLUMN "tosUrl" TO "ToSUrl"; +ALTER TABLE "meta" RENAME COLUMN "objectStorageUseSsl" TO "objectStorageUseSSL"; +ALTER TABLE "meta" RENAME COLUMN "customMotd" TO "customMOTD"; + +-- separate-hard-mute-words-and-patterns +UPDATE "user_profile" SET "mutedWords" = "mutedWords" || array_to_json("mutedPatterns")::jsonb; +ALTER TABLE "user_profile" DROP "mutedPatterns"; + +-- index-alt-text-and-cw +DROP INDEX "IDX_f4f7b93d05958527300d79ac82"; +DROP INDEX "IDX_8e3bbbeb3df04d1a8105da4c8f"; + +-- pgroonga +DROP INDEX "IDX_f27f5d88941e57442be75ba9c8"; +DROP INDEX "IDX_065d4d8f3b5adb4a08841eae3c"; +DROP INDEX "IDX_fcb770976ff8240af5799e3ffc"; +DROP EXTENSION pgroonga CASCADE; + +-- change-default-configs +ALTER TABLE "user_profile" ALTER COLUMN "noCrawle" SET DEFAULT false; +ALTER TABLE "user_profile" ALTER COLUMN "publicReactions" SET DEFAULT false; +ALTER TABLE "meta" ALTER COLUMN "disableRegistration" SET DEFAULT false; + +-- reply-muting +DROP TABLE "reply_muting"; + +-- remove-charts +CREATE TABLE public.__chart__ap_request ( + id integer NOT NULL, + date integer NOT NULL, + "___deliverFailed" integer DEFAULT 0 NOT NULL, + "___deliverSucceeded" integer DEFAULT 0 NOT NULL, + "___inboxReceived" integer DEFAULT 0 NOT NULL +); +CREATE SEQUENCE public.__chart__ap_request_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart__ap_request_id_seq OWNED BY public.__chart__ap_request.id; + +CREATE TABLE public.__chart__drive ( + id integer NOT NULL, + date integer NOT NULL, + "___local_incCount" integer DEFAULT '0'::bigint NOT NULL, + "___local_incSize" integer DEFAULT '0'::bigint NOT NULL, + "___local_decCount" integer DEFAULT '0'::bigint NOT NULL, + "___local_decSize" integer DEFAULT '0'::bigint NOT NULL, + "___remote_incCount" integer DEFAULT '0'::bigint NOT NULL, + "___remote_incSize" integer DEFAULT '0'::bigint NOT NULL, + "___remote_decCount" integer DEFAULT '0'::bigint NOT NULL, + "___remote_decSize" integer DEFAULT '0'::bigint NOT NULL +); +CREATE SEQUENCE public.__chart__drive_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart__drive_id_seq OWNED BY public.__chart__drive.id; + +CREATE TABLE public.__chart__federation ( + id integer NOT NULL, + date integer NOT NULL, + "unique_temp___deliveredInstances" character varying[] DEFAULT '{}'::character varying[] NOT NULL, + "___deliveredInstances" smallint DEFAULT '0'::smallint NOT NULL, + "unique_temp___inboxInstances" character varying[] DEFAULT '{}'::character varying[] NOT NULL, + "___inboxInstances" smallint DEFAULT '0'::smallint NOT NULL, + unique_temp___stalled character varying[] DEFAULT '{}'::character varying[] NOT NULL, + ___stalled smallint DEFAULT '0'::smallint NOT NULL, + ___sub smallint DEFAULT '0'::smallint NOT NULL, + ___pub smallint DEFAULT '0'::smallint NOT NULL, + ___pubsub smallint DEFAULT '0'::smallint NOT NULL, + "___subActive" smallint DEFAULT '0'::smallint NOT NULL, + "___pubActive" smallint DEFAULT '0'::smallint NOT NULL +); +CREATE SEQUENCE public.__chart__federation_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart__federation_id_seq OWNED BY public.__chart__federation.id; + +CREATE TABLE public.__chart__hashtag ( + id integer NOT NULL, + date integer NOT NULL, + "group" character varying(128) NOT NULL, + ___local_users integer DEFAULT 0 NOT NULL, + ___remote_users integer DEFAULT 0 NOT NULL, + unique_temp___local_users character varying[] DEFAULT '{}'::character varying[] NOT NULL, + unique_temp___remote_users character varying[] DEFAULT '{}'::character varying[] NOT NULL +); +CREATE SEQUENCE public.__chart__hashtag_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart__hashtag_id_seq OWNED BY public.__chart__hashtag.id; + +CREATE TABLE public.__chart__instance ( + id integer NOT NULL, + date integer NOT NULL, + "group" character varying(128) NOT NULL, + ___requests_failed smallint DEFAULT '0'::bigint NOT NULL, + ___requests_succeeded smallint DEFAULT '0'::bigint NOT NULL, + ___requests_received smallint DEFAULT '0'::bigint NOT NULL, + ___notes_total integer DEFAULT '0'::bigint NOT NULL, + ___notes_inc integer DEFAULT '0'::bigint NOT NULL, + ___notes_dec integer DEFAULT '0'::bigint NOT NULL, + ___notes_diffs_normal integer DEFAULT '0'::bigint NOT NULL, + ___notes_diffs_reply integer DEFAULT '0'::bigint NOT NULL, + ___notes_diffs_renote integer DEFAULT '0'::bigint NOT NULL, + ___users_total integer DEFAULT '0'::bigint NOT NULL, + ___users_inc smallint DEFAULT '0'::bigint NOT NULL, + ___users_dec smallint DEFAULT '0'::bigint NOT NULL, + ___following_total integer DEFAULT '0'::bigint NOT NULL, + ___following_inc smallint DEFAULT '0'::bigint NOT NULL, + ___following_dec smallint DEFAULT '0'::bigint NOT NULL, + ___followers_total integer DEFAULT '0'::bigint NOT NULL, + ___followers_inc smallint DEFAULT '0'::bigint NOT NULL, + ___followers_dec smallint DEFAULT '0'::bigint NOT NULL, + "___drive_totalFiles" integer DEFAULT '0'::bigint NOT NULL, + "___drive_incFiles" integer DEFAULT '0'::bigint NOT NULL, + "___drive_incUsage" integer DEFAULT '0'::bigint NOT NULL, + "___drive_decFiles" integer DEFAULT '0'::bigint NOT NULL, + "___drive_decUsage" integer DEFAULT '0'::bigint NOT NULL, + "___notes_diffs_withFile" integer DEFAULT 0 NOT NULL +); +CREATE SEQUENCE public.__chart__instance_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart__instance_id_seq OWNED BY public.__chart__instance.id; + +CREATE TABLE public.__chart__network ( + id integer NOT NULL, + date integer NOT NULL, + "___incomingRequests" integer DEFAULT '0'::bigint NOT NULL, + "___outgoingRequests" integer DEFAULT '0'::bigint NOT NULL, + "___totalTime" integer DEFAULT '0'::bigint NOT NULL, + "___incomingBytes" integer DEFAULT '0'::bigint NOT NULL, + "___outgoingBytes" integer DEFAULT '0'::bigint NOT NULL +); +CREATE SEQUENCE public.__chart__network_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart__network_id_seq OWNED BY public.__chart__network.id; + +CREATE TABLE public.__chart__notes ( + id integer NOT NULL, + date integer NOT NULL, + ___local_total integer DEFAULT '0'::bigint NOT NULL, + ___local_inc integer DEFAULT '0'::bigint NOT NULL, + ___local_dec integer DEFAULT '0'::bigint NOT NULL, + ___local_diffs_normal integer DEFAULT '0'::bigint NOT NULL, + ___local_diffs_reply integer DEFAULT '0'::bigint NOT NULL, + ___local_diffs_renote integer DEFAULT '0'::bigint NOT NULL, + ___remote_total integer DEFAULT '0'::bigint NOT NULL, + ___remote_inc integer DEFAULT '0'::bigint NOT NULL, + ___remote_dec integer DEFAULT '0'::bigint NOT NULL, + ___remote_diffs_normal integer DEFAULT '0'::bigint NOT NULL, + ___remote_diffs_reply integer DEFAULT '0'::bigint NOT NULL, + ___remote_diffs_renote integer DEFAULT '0'::bigint NOT NULL, + "___local_diffs_withFile" integer DEFAULT 0 NOT NULL, + "___remote_diffs_withFile" integer DEFAULT 0 NOT NULL +); +CREATE SEQUENCE public.__chart__notes_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart__notes_id_seq OWNED BY public.__chart__notes.id; + +CREATE TABLE public.__chart__per_user_drive ( + id integer NOT NULL, + date integer NOT NULL, + "group" character varying(128) NOT NULL, + "___totalCount" integer DEFAULT '0'::bigint NOT NULL, + "___totalSize" integer DEFAULT '0'::bigint NOT NULL, + "___incCount" smallint DEFAULT '0'::bigint NOT NULL, + "___incSize" integer DEFAULT '0'::bigint NOT NULL, + "___decCount" smallint DEFAULT '0'::bigint NOT NULL, + "___decSize" integer DEFAULT '0'::bigint NOT NULL +); +CREATE SEQUENCE public.__chart__per_user_drive_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart__per_user_drive_id_seq OWNED BY public.__chart__per_user_drive.id; + +CREATE TABLE public.__chart__per_user_following ( + id integer NOT NULL, + date integer NOT NULL, + "group" character varying(128) NOT NULL, + ___local_followings_total integer DEFAULT '0'::bigint NOT NULL, + ___local_followings_inc smallint DEFAULT '0'::bigint NOT NULL, + ___local_followings_dec smallint DEFAULT '0'::bigint NOT NULL, + ___local_followers_total integer DEFAULT '0'::bigint NOT NULL, + ___local_followers_inc smallint DEFAULT '0'::bigint NOT NULL, + ___local_followers_dec smallint DEFAULT '0'::bigint NOT NULL, + ___remote_followings_total integer DEFAULT '0'::bigint NOT NULL, + ___remote_followings_inc smallint DEFAULT '0'::bigint NOT NULL, + ___remote_followings_dec smallint DEFAULT '0'::bigint NOT NULL, + ___remote_followers_total integer DEFAULT '0'::bigint NOT NULL, + ___remote_followers_inc smallint DEFAULT '0'::bigint NOT NULL, + ___remote_followers_dec smallint DEFAULT '0'::bigint NOT NULL +); +CREATE SEQUENCE public.__chart__per_user_following_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart__per_user_following_id_seq OWNED BY public.__chart__per_user_following.id; + +CREATE TABLE public.__chart__per_user_notes ( + id integer NOT NULL, + date integer NOT NULL, + "group" character varying(128) NOT NULL, + ___total integer DEFAULT '0'::bigint NOT NULL, + ___inc smallint DEFAULT '0'::bigint NOT NULL, + ___dec smallint DEFAULT '0'::bigint NOT NULL, + ___diffs_normal smallint DEFAULT '0'::bigint NOT NULL, + ___diffs_reply smallint DEFAULT '0'::bigint NOT NULL, + ___diffs_renote smallint DEFAULT '0'::bigint NOT NULL, + "___diffs_withFile" smallint DEFAULT '0'::smallint NOT NULL +); +CREATE SEQUENCE public.__chart__per_user_notes_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart__per_user_notes_id_seq OWNED BY public.__chart__per_user_notes.id; + +CREATE TABLE public.__chart__per_user_reaction ( + id integer NOT NULL, + date integer NOT NULL, + "group" character varying(128) NOT NULL, + ___local_count smallint DEFAULT '0'::bigint NOT NULL, + ___remote_count smallint DEFAULT '0'::bigint NOT NULL +); +CREATE SEQUENCE public.__chart__per_user_reaction_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart__per_user_reaction_id_seq OWNED BY public.__chart__per_user_reaction.id; + +CREATE TABLE public.__chart__test ( + id integer NOT NULL, + date integer NOT NULL, + "group" character varying(128), + ___foo_total bigint NOT NULL, + ___foo_inc bigint NOT NULL, + ___foo_dec bigint NOT NULL +); +CREATE TABLE public.__chart__test_grouped ( + id integer NOT NULL, + date integer NOT NULL, + "group" character varying(128), + ___foo_total bigint NOT NULL, + ___foo_inc bigint NOT NULL, + ___foo_dec bigint NOT NULL +); +CREATE SEQUENCE public.__chart__test_grouped_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart__test_grouped_id_seq OWNED BY public.__chart__test_grouped.id; + +CREATE SEQUENCE public.__chart__test_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart__test_id_seq OWNED BY public.__chart__test.id; + +CREATE TABLE public.__chart__test_unique ( + id integer NOT NULL, + date integer NOT NULL, + "group" character varying(128), + ___foo character varying[] DEFAULT '{}'::character varying[] NOT NULL +); +CREATE SEQUENCE public.__chart__test_unique_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart__test_unique_id_seq OWNED BY public.__chart__test_unique.id; + +CREATE TABLE public.__chart__users ( + id integer NOT NULL, + date integer NOT NULL, + ___local_total integer DEFAULT '0'::bigint NOT NULL, + ___local_inc smallint DEFAULT '0'::bigint NOT NULL, + ___local_dec smallint DEFAULT '0'::bigint NOT NULL, + ___remote_total integer DEFAULT '0'::bigint NOT NULL, + ___remote_inc smallint DEFAULT '0'::bigint NOT NULL, + ___remote_dec smallint DEFAULT '0'::bigint NOT NULL +); +CREATE SEQUENCE public.__chart__users_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart__users_id_seq OWNED BY public.__chart__users.id; + +CREATE TABLE public.__chart_day__ap_request ( + id integer NOT NULL, + date integer NOT NULL, + "___deliverFailed" integer DEFAULT 0 NOT NULL, + "___deliverSucceeded" integer DEFAULT 0 NOT NULL, + "___inboxReceived" integer DEFAULT 0 NOT NULL +); +CREATE SEQUENCE public.__chart_day__ap_request_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart_day__ap_request_id_seq OWNED BY public.__chart_day__ap_request.id; + +CREATE TABLE public.__chart_day__drive ( + id integer NOT NULL, + date integer NOT NULL, + "___local_incCount" integer DEFAULT '0'::bigint NOT NULL, + "___local_incSize" integer DEFAULT '0'::bigint NOT NULL, + "___local_decCount" integer DEFAULT '0'::bigint NOT NULL, + "___local_decSize" integer DEFAULT '0'::bigint NOT NULL, + "___remote_incCount" integer DEFAULT '0'::bigint NOT NULL, + "___remote_incSize" integer DEFAULT '0'::bigint NOT NULL, + "___remote_decCount" integer DEFAULT '0'::bigint NOT NULL, + "___remote_decSize" integer DEFAULT '0'::bigint NOT NULL +); +CREATE SEQUENCE public.__chart_day__drive_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart_day__drive_id_seq OWNED BY public.__chart_day__drive.id; + +CREATE TABLE public.__chart_day__federation ( + id integer NOT NULL, + date integer NOT NULL, + "unique_temp___deliveredInstances" character varying[] DEFAULT '{}'::character varying[] NOT NULL, + "___deliveredInstances" smallint DEFAULT '0'::smallint NOT NULL, + "unique_temp___inboxInstances" character varying[] DEFAULT '{}'::character varying[] NOT NULL, + "___inboxInstances" smallint DEFAULT '0'::smallint NOT NULL, + unique_temp___stalled character varying[] DEFAULT '{}'::character varying[] NOT NULL, + ___stalled smallint DEFAULT '0'::smallint NOT NULL, + ___sub smallint DEFAULT '0'::smallint NOT NULL, + ___pub smallint DEFAULT '0'::smallint NOT NULL, + ___pubsub smallint DEFAULT '0'::smallint NOT NULL, + "___subActive" smallint DEFAULT '0'::smallint NOT NULL, + "___pubActive" smallint DEFAULT '0'::smallint NOT NULL +); +CREATE SEQUENCE public.__chart_day__federation_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart_day__federation_id_seq OWNED BY public.__chart_day__federation.id; + +CREATE TABLE public.__chart_day__hashtag ( + id integer NOT NULL, + date integer NOT NULL, + "group" character varying(128) NOT NULL, + ___local_users integer DEFAULT 0 NOT NULL, + ___remote_users integer DEFAULT 0 NOT NULL, + unique_temp___local_users character varying[] DEFAULT '{}'::character varying[] NOT NULL, + unique_temp___remote_users character varying[] DEFAULT '{}'::character varying[] NOT NULL +); +CREATE SEQUENCE public.__chart_day__hashtag_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart_day__hashtag_id_seq OWNED BY public.__chart_day__hashtag.id; + +CREATE TABLE public.__chart_day__instance ( + id integer NOT NULL, + date integer NOT NULL, + "group" character varying(128) NOT NULL, + ___requests_failed smallint DEFAULT '0'::bigint NOT NULL, + ___requests_succeeded smallint DEFAULT '0'::bigint NOT NULL, + ___requests_received smallint DEFAULT '0'::bigint NOT NULL, + ___notes_total integer DEFAULT '0'::bigint NOT NULL, + ___notes_inc integer DEFAULT '0'::bigint NOT NULL, + ___notes_dec integer DEFAULT '0'::bigint NOT NULL, + ___notes_diffs_normal integer DEFAULT '0'::bigint NOT NULL, + ___notes_diffs_reply integer DEFAULT '0'::bigint NOT NULL, + ___notes_diffs_renote integer DEFAULT '0'::bigint NOT NULL, + ___users_total integer DEFAULT '0'::bigint NOT NULL, + ___users_inc smallint DEFAULT '0'::bigint NOT NULL, + ___users_dec smallint DEFAULT '0'::bigint NOT NULL, + ___following_total integer DEFAULT '0'::bigint NOT NULL, + ___following_inc smallint DEFAULT '0'::bigint NOT NULL, + ___following_dec smallint DEFAULT '0'::bigint NOT NULL, + ___followers_total integer DEFAULT '0'::bigint NOT NULL, + ___followers_inc smallint DEFAULT '0'::bigint NOT NULL, + ___followers_dec smallint DEFAULT '0'::bigint NOT NULL, + "___drive_totalFiles" integer DEFAULT '0'::bigint NOT NULL, + "___drive_incFiles" integer DEFAULT '0'::bigint NOT NULL, + "___drive_incUsage" integer DEFAULT '0'::bigint NOT NULL, + "___drive_decFiles" integer DEFAULT '0'::bigint NOT NULL, + "___drive_decUsage" integer DEFAULT '0'::bigint NOT NULL, + "___notes_diffs_withFile" integer DEFAULT 0 NOT NULL +); +CREATE SEQUENCE public.__chart_day__instance_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart_day__instance_id_seq OWNED BY public.__chart_day__instance.id; + +CREATE TABLE public.__chart_day__network ( + id integer NOT NULL, + date integer NOT NULL, + "___incomingRequests" integer DEFAULT '0'::bigint NOT NULL, + "___outgoingRequests" integer DEFAULT '0'::bigint NOT NULL, + "___totalTime" integer DEFAULT '0'::bigint NOT NULL, + "___incomingBytes" integer DEFAULT '0'::bigint NOT NULL, + "___outgoingBytes" integer DEFAULT '0'::bigint NOT NULL +); +CREATE SEQUENCE public.__chart_day__network_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart_day__network_id_seq OWNED BY public.__chart_day__network.id; + +CREATE TABLE public.__chart_day__notes ( + id integer NOT NULL, + date integer NOT NULL, + ___local_total integer DEFAULT '0'::bigint NOT NULL, + ___local_inc integer DEFAULT '0'::bigint NOT NULL, + ___local_dec integer DEFAULT '0'::bigint NOT NULL, + ___local_diffs_normal integer DEFAULT '0'::bigint NOT NULL, + ___local_diffs_reply integer DEFAULT '0'::bigint NOT NULL, + ___local_diffs_renote integer DEFAULT '0'::bigint NOT NULL, + ___remote_total integer DEFAULT '0'::bigint NOT NULL, + ___remote_inc integer DEFAULT '0'::bigint NOT NULL, + ___remote_dec integer DEFAULT '0'::bigint NOT NULL, + ___remote_diffs_normal integer DEFAULT '0'::bigint NOT NULL, + ___remote_diffs_reply integer DEFAULT '0'::bigint NOT NULL, + ___remote_diffs_renote integer DEFAULT '0'::bigint NOT NULL, + "___local_diffs_withFile" integer DEFAULT 0 NOT NULL, + "___remote_diffs_withFile" integer DEFAULT 0 NOT NULL +); +CREATE SEQUENCE public.__chart_day__notes_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart_day__notes_id_seq OWNED BY public.__chart_day__notes.id; + +CREATE TABLE public.__chart_day__per_user_drive ( + id integer NOT NULL, + date integer NOT NULL, + "group" character varying(128) NOT NULL, + "___totalCount" integer DEFAULT '0'::bigint NOT NULL, + "___totalSize" integer DEFAULT '0'::bigint NOT NULL, + "___incCount" smallint DEFAULT '0'::bigint NOT NULL, + "___incSize" integer DEFAULT '0'::bigint NOT NULL, + "___decCount" smallint DEFAULT '0'::bigint NOT NULL, + "___decSize" integer DEFAULT '0'::bigint NOT NULL +); +CREATE SEQUENCE public.__chart_day__per_user_drive_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart_day__per_user_drive_id_seq OWNED BY public.__chart_day__per_user_drive.id; + +CREATE TABLE public.__chart_day__per_user_following ( + id integer NOT NULL, + date integer NOT NULL, + "group" character varying(128) NOT NULL, + ___local_followings_total integer DEFAULT '0'::bigint NOT NULL, + ___local_followings_inc smallint DEFAULT '0'::bigint NOT NULL, + ___local_followings_dec smallint DEFAULT '0'::bigint NOT NULL, + ___local_followers_total integer DEFAULT '0'::bigint NOT NULL, + ___local_followers_inc smallint DEFAULT '0'::bigint NOT NULL, + ___local_followers_dec smallint DEFAULT '0'::bigint NOT NULL, + ___remote_followings_total integer DEFAULT '0'::bigint NOT NULL, + ___remote_followings_inc smallint DEFAULT '0'::bigint NOT NULL, + ___remote_followings_dec smallint DEFAULT '0'::bigint NOT NULL, + ___remote_followers_total integer DEFAULT '0'::bigint NOT NULL, + ___remote_followers_inc smallint DEFAULT '0'::bigint NOT NULL, + ___remote_followers_dec smallint DEFAULT '0'::bigint NOT NULL +); +CREATE SEQUENCE public.__chart_day__per_user_following_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart_day__per_user_following_id_seq OWNED BY public.__chart_day__per_user_following.id; + +CREATE TABLE public.__chart_day__per_user_notes ( + id integer NOT NULL, + date integer NOT NULL, + "group" character varying(128) NOT NULL, + ___total integer DEFAULT '0'::bigint NOT NULL, + ___inc smallint DEFAULT '0'::bigint NOT NULL, + ___dec smallint DEFAULT '0'::bigint NOT NULL, + ___diffs_normal smallint DEFAULT '0'::bigint NOT NULL, + ___diffs_reply smallint DEFAULT '0'::bigint NOT NULL, + ___diffs_renote smallint DEFAULT '0'::bigint NOT NULL, + "___diffs_withFile" smallint DEFAULT '0'::smallint NOT NULL +); +CREATE SEQUENCE public.__chart_day__per_user_notes_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart_day__per_user_notes_id_seq OWNED BY public.__chart_day__per_user_notes.id; + +CREATE TABLE public.__chart_day__per_user_reaction ( + id integer NOT NULL, + date integer NOT NULL, + "group" character varying(128) NOT NULL, + ___local_count smallint DEFAULT '0'::bigint NOT NULL, + ___remote_count smallint DEFAULT '0'::bigint NOT NULL +); +CREATE SEQUENCE public.__chart_day__per_user_reaction_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart_day__per_user_reaction_id_seq OWNED BY public.__chart_day__per_user_reaction.id; + +CREATE TABLE public.__chart_day__users ( + id integer NOT NULL, + date integer NOT NULL, + ___local_total integer DEFAULT '0'::bigint NOT NULL, + ___local_inc smallint DEFAULT '0'::bigint NOT NULL, + ___local_dec smallint DEFAULT '0'::bigint NOT NULL, + ___remote_total integer DEFAULT '0'::bigint NOT NULL, + ___remote_inc smallint DEFAULT '0'::bigint NOT NULL, + ___remote_dec smallint DEFAULT '0'::bigint NOT NULL +); +CREATE SEQUENCE public.__chart_day__users_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE public.__chart_day__users_id_seq OWNED BY public.__chart_day__users.id; + +-- emoji-moderator +ALTER TABLE "user" DROP COLUMN "emojiModPerm"; +DROP TYPE "public"."user_emojimodperm_enum"; + +-- remove-nsfw-detection +ALTER TABLE "user_profile" ADD "autoSensitive" boolean NOT NULL DEFAULT false; +ALTER TABLE "meta" ADD "enableSensitiveMediaDetectionForVideos" boolean NOT NULL DEFAULT false; +ALTER TABLE "meta" ADD "setSensitiveFlagAutomatically" boolean NOT NULL DEFAULT false; +CREATE TYPE "public"."meta_sensitivemediadetectionsensitivity_enum" AS ENUM('medium', 'low', 'high', 'veryLow', 'veryHigh'); +ALTER TABLE "meta" ADD "sensitiveMediaDetectionSensitivity" "public"."meta_sensitivemediadetectionsensitivity_enum" NOT NULL DEFAULT 'medium'; +CREATE TYPE "public"."meta_sensitivemediadetection_enum" AS ENUM('none', 'all', 'local', 'remote'); +ALTER TABLE "meta" ADD "sensitiveMediaDetection" "public"."meta_sensitivemediadetection_enum" NOT NULL DEFAULT 'none'; +ALTER TABLE "drive_file" ADD "maybePorn" boolean NOT NULL DEFAULT false; +ALTER TABLE "drive_file" ADD "maybeSensitive" boolean NOT NULL DEFAULT false; +COMMENT ON COLUMN "drive_file"."maybeSensitive" IS 'Whether the DriveFile is NSFW. (predict)'; + +-- firefish-url-move +UPDATE "meta" SET "repositoryUrl" = 'https://git.joinfirefish.org/firefish/firefish'; +UPDATE "meta" SET "feedbackUrl" = 'https://git.joinfirefish.org/firefish/firefish/issues'; + +-- remove-native-utils-migration +CREATE TABLE "seaql_migrations" ( + version character varying NOT NULL, + applied_at bigint NOT NULL +); +INSERT INTO "seaql_migrations" (version, applied_at) +VALUES + ('m20230531_180824_drop_reversi', 1705876632), + ('m20230627_185451_index_note_url', 1705876632), + ('m20230709_000510_move_antenna_to_cache', 1705876632), + ('m20230806_170616_fix_antenna_stream_ids', 1705876632), + ('m20230904_013244_is_indexable', 1705876632), + ('m20231002_143323_remove_integrations', 1705876632) +; + +COMMIT; diff --git a/docs/firefish.nginx.conf b/docs/firefish.nginx.conf new file mode 100644 index 0000000..def7fe3 --- /dev/null +++ b/docs/firefish.nginx.conf @@ -0,0 +1,72 @@ +# Replace example.tld with your domain + +# For WebSocket +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} + +proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=cache1:16m max_size=1g inactive=720m use_temp_path=off; + +server { + listen 80; + listen [::]:80; + server_name example.tld; + + # For SSL domain validation + root /var/www/html; + location /.well-known/acme-challenge/ { allow all; } + location /.well-known/pki-validation/ { allow all; } + location / { return 301 https://$server_name$request_uri; } +} + +server { + listen 443 ssl http2; + listen [::]:443 ssl http2; + server_name example.tld; + + ssl_session_timeout 1d; + ssl_session_cache shared:ssl_session_cache:10m; + ssl_session_tickets off; + + # To use Let's Encrypt certificate + ssl_certificate /etc/letsencrypt/live/example.tld/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/example.tld/privkey.pem; + + # To use Debian/Ubuntu's self-signed certificate (For testing or before issuing a certificate) + #ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem; + #ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key; + + # SSL protocol settings + ssl_protocols TLSv1.2 TLSv1.3; + ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; + ssl_prefer_server_ciphers off; + ssl_stapling on; + ssl_stapling_verify on; + + # Change to your upload limit + client_max_body_size 80m; + + # Proxy to Node + location / { + proxy_pass http://127.0.0.1:3000; + proxy_set_header Host $host; + proxy_http_version 1.1; + proxy_redirect off; + + # If it's behind another reverse proxy or CDN, remove the following. + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto https; + + # For WebSocket + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + + # Cache settings + proxy_cache cache1; + proxy_cache_lock on; + proxy_cache_use_stale updating; + add_header X-Cache $upstream_cache_status; + } +} diff --git a/docs/install-container.md b/docs/install-container.md new file mode 100644 index 0000000..731eb32 --- /dev/null +++ b/docs/install-container.md @@ -0,0 +1,54 @@ +# Running a Firefish server with containers + +## Prerequisites + +- Latest [Docker](https://docs.docker.com/get-docker/) installation + - You can also use [Podman](https://podman.io/docs/installation) and [Podman Compose](https://github.com/containers/podman-compose). + +## Configuration + +Copy the example config files: + +```sh +cp docker-compose.example.yml docker-compose.yml +cp .config/example.yml .config/default.yml +cp .config/docker_example.env .config/docker.env +``` + +then edit them according to your environment. +You can configure `docker.env` with anything you like, but you will have to pay attention to the `default.yml` file: + +- `url` should be set to the URL you will be hosting the web interface for the server at. +- `host`, `db`, `user`, `pass` will have to be configured in the `PostgreSQL configuration` section - `host` is the name of the postgres container (eg: *firefish_db_1*), and the others should match your `docker.env`. +- `host`will need to be configured in the *Redis configuration* section - it is the name of the redis container (eg: *firefish_redis_1*) + +Everything else can be left as-is. + +## Pull the container image + +The image tag is [`registry.firefish.dev/firefish/firefish:latest`](https://firefish.dev/firefish/firefish/container_registry/1). + +```sh +docker pull registry.firefish.dev/firefish/firefish:latest +# or podman pull registry.firefish.dev/firefish/firefish:latest +``` + +## Enable database extension + +```sh +docker-compose up db --detach && sleep 5 && docker-compose exec db sh -c 'psql --user="${POSTGRES_USER}" --dbname="${POSTGRES_DB}" --command="CREATE EXTENSION pgroonga;"' +# or podman-compose up db --detach && sleep 5 && podman-compose exec db sh -c 'psql --user="${POSTGRES_USER}" --dbname="${POSTGRES_DB}" --command="CREATE EXTENSION pgroonga;"' +``` + +## Run + +```sh +docker compose up --detach +# or podman-compose up --detach +``` + +NOTE: This will take some time to come fully online, even after download and extracting the container images, and it may emit some error messages before completing successfully. Specifically, the `db` container needs to initialize and so isn't available to the `web` container right away. Only once the `db` container comes online does the `web` container start building and initializing the firefish tables. + +Once the server is up you can use a web browser to access the web interface at `http://serverip:3000` (where `serverip` is the IP of the server you are running the firefish server on). + +To publish your server, please follow the instructions in [section 5 of this installation guide](https://firefish.dev/firefish/firefish/-/blob/main/docs/install.md#5-preparation-for-publishing-a-server). diff --git a/docs/install.md b/docs/install.md new file mode 100644 index 0000000..4ed2268 --- /dev/null +++ b/docs/install.md @@ -0,0 +1,482 @@ +# Install Firefish + +Please check the [v20240206 release note](https://firefish.dev/firefish/firefish/-/releases/v20240206) first. This project is barely maintained for those who really want to keep using Firefish. Please understand this before proceeding. + +## Dependencies + +Firefish depends on the following software. + +### Runtime dependencies + +- At least [NodeJS](https://nodejs.org/en/) v18.19.0 (v20/v22 recommended) +- At least [PostgreSQL](https://www.postgresql.org/) v12 (v16 recommended) with [PGroonga](https://pgroonga.github.io/) extension +- At least [Redis](https://redis.io/) v7 or [Valkey](https://valkey.io/) v7 +- Web Proxy (one of the following) + - Caddy (recommended) + - Nginx (recommended) + - Apache +- [FFmpeg](https://ffmpeg.org/) for video transcoding (**optional**) +- Caching server (**optional**, one of the following) + - [DragonflyDB](https://www.dragonflydb.io/) + - [KeyDB](https://keydb.dev/) + - Another [Redis](https://redis.io/) / [Valkey](https://valkey.io/) server + +### Build dependencies + +- At least [Rust](https://www.rust-lang.org/) v1.74 +- C/C++ compiler & build tools (like [GNU Make](https://www.gnu.org/software/make/)) + - `build-essential` on Debian/Ubuntu Linux + - `base-devel` on Arch Linux + - `"Development Tools"` on Fedora/Red Hat Linux +- [Python 3](https://www.python.org/) +- [Perl](https://www.perl.org/) + +This document shows an example procedure for installing these dependencies and Firefish on Debian 12. Note that there is much room for customizing the server setup; this document merely demonstrates a simple installation. + +### Install on non-Linux systems + +We don't test Firefish on non-Linux systems, so please install Firefish on such an environment **only if you can address any problems yourself**. There is absolutely no support. That said, it is possible to install Firefish on some non-Linux systems. + +
+ +Possible setup on FreeBSD (as of version 20240725) + +You can install Firefish on FreeBSD by adding these extra steps to the standard instructions: + +1. Install `vips` package +2. Add the following block to [`package.json`](../package.json) + ```json + "pnpm": { + "overrides": { + "rollup": "npm:@rollup/wasm-node + } + } + ``` +3. Create an rc script for Firefish + ```sh + #!/bin/sh + + # PROVIDE: firefish + # REQUIRE: DAEMON redis caddy postgresql + # KEYWORD: shutdown + + . /etc/rc.subr + + name=firefish + rcvar=firefish_enable + + desc="Firefish daemon" + + load_rc_config ${name} + + : ${firefish_chdir:="/path/to/firefish/local/repository"} + : ${firefish_env:="npm_config_cache=/tmp NODE_ENV=production NODE_OPTIONS=--max-old-space-size=3072"} + + pidfile="/var/run/${name}.pid" + command=/usr/sbin/daemon + command_args="-f -S -u firefish -P ${pidfile} /usr/local/bin/pnpm run start" + + run_rc_command "$1" + ``` + +
+ +Please let us know if you deployed Firefish on a curious environment :smile: + +### Use Docker/Podman containers + +If you want to use the pre-built container image, please refer to [`install-container.md`](./install-container.md). + +## 1. Install dependencies + +Make sure that you can use the `sudo` command before proceeding. + +### Utilities + +```sh +sudo apt update +sudo apt install build-essential python3 curl wget git lsb-release +``` + +### Node.js and pnpm + +Instructions can be found at [this repository](https://github.com/nodesource/distributions). + +```sh +NODE_MAJOR=20 +curl -fsSL "https://deb.nodesource.com/setup_${NODE_MAJOR}.x" | sudo -E bash - +sudo apt install nodejs + +# check version +node --version +``` + +You also need to enable `pnpm`. +```sh +sudo corepack enable +corepack prepare pnpm@latest --activate + +# check version +pnpm --version +``` + +### PostgreSQL and PGroonga + +PostgreSQL install instructions can be found at [this page](https://www.postgresql.org/download/). + +```sh +sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' +wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - +sudo apt update +sudo apt install postgresql-16 + +sudo systemctl enable --now postgresql + +# check version +psql --version +``` + +PGroonga install instructions can be found at [this page](https://pgroonga.github.io/install/). + +```sh +wget "https://apache.jfrog.io/artifactory/arrow/$(lsb_release --id --short | tr 'A-Z' 'a-z')/apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb" +sudo apt install "./apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb" +wget "https://packages.groonga.org/debian/groonga-apt-source-latest-$(lsb_release --codename --short).deb" +sudo apt install "./groonga-apt-source-latest-$(lsb_release --codename --short).deb" +sudo apt update +sudo apt install postgresql-16-pgdg-pgroonga + +rm "apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb" "groonga-apt-source-latest-$(lsb_release --codename --short).deb" +``` + +### Redis + +Instructions can be found at [this page](https://redis.io/docs/install/install-redis/). + +```sh +curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg +echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list +sudo apt update +sudo apt install redis + +sudo systemctl enable --now redis-server + +# check version +redis-cli --version +``` + +### FFmpeg + +```sh +sudo apt install ffmpeg +``` + +## 2. Set up a database + +1. Create a database user + ```sh + sudo -u postgres createuser --no-createdb --no-createrole --no-superuser --encrypted --pwprompt firefish + ``` + If you forgot the password you typed, you can reset it by executing `sudo -u postgres psql -c "ALTER USER firefish PASSWORD 'password';"`. +2. Create a database + ```sh + sudo -u postgres createdb --encoding='UTF8' --owner=firefish firefish_db + ``` +3. Enable PGronnga extension + ```sh + sudo -u postgres psql --command='CREATE EXTENSION pgroonga;' --dbname=firefish_db + ``` + +## 3. Configure Firefish + +1. Create an user for Firefish and switch user + ```sh + sudo useradd --create-home --user-group --shell /bin/bash firefish + sudo su --login firefish + + # check the current working directory + # the result should be /home/firefish + pwd + ``` +1. Install Rust toolchain + + Instructions can be found at [this page](https://www.rust-lang.org/tools/install). + + ```sh + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh + . "${HOME}/.cargo/env" + + # check version + cargo --version + ``` +3. Clone the Firefish repository + ```sh + git clone --branch=main https://firefish.dev/firefish/firefish.git + ``` +1. Copy and edit the config file + ```sh + cd firefish + cp .config/example.yml .config/default.yml + nano .config/default.yml + ``` + + ```yaml + url: https://your-server-domain.example.com # change here + port: 3000 + + db: + host: localhost + port: 5432 + db: firefish_db + user: firefish + pass: your-database-password # and here + ``` + +## 4. Build Firefish + +1. Build + ```sh + pnpm install --frozen-lockfile + NODE_ENV=production NODE_OPTIONS='--max-old-space-size=3072' pnpm run build + ``` +1. Execute database migrations + ```sh + pnpm run migrate + ``` +1. Logout from `firefish` user + ```sh + exit + ``` + +## 5. Preparation for publishing a server + +### 1. Set up a firewall + +To expose your server securely, you may want to set up a firewall. We use [ufw](https://launchpad.net/ufw) in this instruction. + +```sh +sudo apt install ufw +# if you use SSH +# SSH_PORT=22 +# sudo ufw limit "${SSH_PORT}/tcp" +sudo ufw default deny +sudo ufw allow 80 +sudo ufw allow 443 +sudo ufw --force enable + +# check status +sudo ufw status +``` + +### 2. Set up a reverse proxy + +In this instruction, we use [Caddy](https://caddyserver.com/) to make the Firefish server accesible from internet. However, you can also use [Nginx](https://nginx.org/en/) if you want ([example Nginx config file](./firefish.nginx.conf)). + +1. Install Caddy + ```sh + sudo apt install debian-keyring debian-archive-keyring apt-transport-https + curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg + curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list + sudo apt update + sudo apt install caddy + + # check version + caddy version + ``` +1. Replace the config file + ```sh + sudo mv /etc/caddy/Caddyfile /etc/caddy/Caddyfile.bak + sudo nano /etc/caddy/Caddyfile + ``` + + ```Caddyfile + your-server-domain.example.com { + reverse_proxy http://127.0.0.1:3000 + + log { + output file /var/log/caddy/firefish.log + } + } + ``` +1. Restart Caddy + ```sh + sudo systemctl restart caddy + ``` + +## 6. Publish your Firefish server + +1. Create a service file + ```sh + sudo nano /etc/systemd/system/firefish.service + ``` + + ```service + [Unit] + Description=Firefish daemon + Requires=redis.service caddy.service postgresql.service + After=redis.service caddy.service postgresql.service network-online.target + + [Service] + Type=simple + User=firefish + Group=firefish + UMask=0027 + ExecStart=/usr/bin/pnpm run start + WorkingDirectory=/home/firefish/firefish + Environment="NODE_ENV=production" + Environment="npm_config_cache=/tmp" + Environment="NODE_OPTIONS=--max-old-space-size=3072" + # uncomment the following line if you use jemalloc (note that the path varies on different environments) + # Environment="LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2" + StandardOutput=journal + StandardError=journal + SyslogIdentifier=firefish + TimeoutSec=60 + Restart=always + + CapabilityBoundingSet= + DevicePolicy=closed + NoNewPrivileges=true + LockPersonality=true + PrivateDevices=true + PrivateIPC=true + PrivateMounts=true + PrivateUsers=true + ProtectClock=true + ProtectControlGroups=true + ProtectHostname=true + ProtectKernelTunables=true + ProtectKernelModules=true + ProtectKernelLogs=true + ProtectProc=invisible + RestrictNamespaces=true + RestrictRealtime=true + RestrictSUIDSGID=true + SecureBits=noroot-locked + SystemCallArchitectures=native + SystemCallFilter=~@chown @clock @cpu-emulation @debug @ipc @keyring @memlock @module @mount @obsolete @privileged @raw-io @reboot @resources @setuid @swap + SystemCallFilter=capset pipe pipe2 setpriority + + [Install] + WantedBy=multi-user.target + ``` +1. Start Firefish + ```sh + sudo systemctl enable --now firefish + ``` + +# Maintain the server + +## Upgrade Firefish version + +Please refer to the [upgrade instruction](https://firefish.dev/firefish/firefish/-/blob/main/docs/upgrade.md). Be sure to switch to `firefish` user and go to the Firefish directory before executing the `git` command: + +```sh +sudo su --login firefish +cd ~/firefish +``` + +## Rotate logs + +As the server runs longer and longer, the size of the log files increases, filling up the disk space. To prevent this, you should set up a log rotation (removing old logs automatically). + +You can edit the `SystemMaxUse` value in the `[journal]` section of `/etc/systemd/journald.conf` to do it: + +```conf +[journal] +... (omitted) +SystemMaxUse=500M +... +``` + +Make sure to remove the leading `#` to uncomment the line. After editing the config file, you need to restart `systemd-journald` service. + +```sh +sudo systemctl restart systemd-journald +``` + +It is also recommended that you change the [PGroonga log level](https://pgroonga.github.io/reference/parameters/log-level.html). The default level is `notice`, but this is too verbose for daily use. + +To control the log level, add this line to your `postgresql.conf`: + +```conf +pgroonga.log_level = error +``` + +You can check the `postgresql.conf` location by this command: + +```sh +sudo --user=postgres psql --command='SHOW config_file' +``` + +The PGroonga log file (`pgroonga.log`) is located under this directory: + +```sh +sudo --user=postgres psql --command='SHOW data_directory' +``` + +## Tune database configuration + +The default PostgreSQL configuration is not suitable for running a Firefish server. So, it is highly recommended that you use [PGTune](https://pgtune.leopard.in.ua/) to tweak the configuration. + +Here is an example set of parameters you can provide to PGTune: + +| Parameter | Value | +|----------------------:|---------------------------------------------------------| +| DB version | 16 (your PostgreSQL major version) | +| OS Type | Linux | +| DB Type | Data warehouse | +| Total Memory | [total physical memory] minus 700 MB | +| Number of CPUs | number of CPU threads (or lower value if you have many) | +| Number of connections | 200 | +| Data storage | SSD storage | + +Since a Firefish server is not a dedicated database server, be sure to leave some memory space for other software such as Firefish, Redis, and reverse proxy. + +Once you have entered the appropriate values for your environment, click the "Generate" button to generate a configuration and replace the values in `postgresql.conf` with the suggested values. + +After that, you need to restart the PostgreSQL service. + +```sh +sudo systemctl stop firefish +sudo systemctl restart postgresql +sudo systemctl start firefish +``` + +## VACUUM your database + +If the database runs long, accumulated "garbage" can degrade its performance or cause problems. To prevent this, you should `VACUUM` your database regularly. + +```sh +sudo systemctl stop firefish +sudo --user=postgres psql --dbname=firefish_db --command='VACUUM FULL VERBOSE ANALYZE' +sudo systemctl start firefish +``` + +Note that this operation takes some time. + +## Customize + +- To add custom CSS for all users, edit `./custom/assets/instance.css`. +- To add static assets (such as images for the splash screen), place them in the `./custom/assets/` directory. They'll then be available on `https://yourserver.tld/static-assets/filename.ext`. +- To add custom locales, place them in the `./custom/locales/` directory. If you name your custom locale the same as an existing locale, it will overwrite it. If you give it a unique name, it will be added to the list. Also make sure that the first part of the filename matches the locale you're basing it on. (Example: `en-FOO.yml`) +- To add custom error images, place them in the `./custom/assets/badges` directory, replacing the files already there. +- To add custom sounds, place only mp3 files in the `./custom/assets/sounds` directory. +- To update custom assets without rebuilding, just run `pnpm run build:assets`. +- To block ChatGPT, CommonCrawl, or other crawlers from indexing your instance, uncomment the respective rules in `./custom/robots.txt`. + +## Tips & Tricks + +- When editing the config file, please don't fill out the settings at the bottom. They're designed *only* for managed hosting, not self hosting. Those settings are much better off being set in Firefish's control panel. +- Port 3000 (used in the default config) might be already used on your server for something else. To find an open port for Firefish, run `for p in {3000..4000}; do ss -tlnH | tr -s ' ' | cut -d" " -sf4 | grep -q "${p}$" || echo "${p}"; done | head -n 1`. Replace 3000 with the minimum port and 4000 with the maximum port if you need it. +- We'd recommend you use a S3 Bucket/CDN for Object Storage, especially if you use containers. +- When using object storage, setting a proper `Access-Control-Allow-Origin` response header is highly recommended. +- We'd recommend against using CloudFlare, but if you do, make sure to turn code minification off. +- For push notifications, run `npx web-push generate-vapid-keys`, then put the public and private keys into Control Panel > General > ServiceWorker. +- For translations, make a [DeepL](https://deepl.com) account and generate an API key, then put it into Control Panel > General > DeepL Translation. +- To add another admin account: + - Go to the user's page > 3 Dots > About > Moderation > turn on "Moderator" + - Go back to Overview > click the clipboard icon next to the ID + - Run `psql -d firefish` (or whatever the database name is) + - Run `UPDATE "user" SET "isAdmin" = true WHERE id='999999';` (replace `999999` with the copied ID) + - Restart your Firefish server diff --git a/docs/notice-for-admins.md b/docs/notice-for-admins.md new file mode 100644 index 0000000..366b026 --- /dev/null +++ b/docs/notice-for-admins.md @@ -0,0 +1,410 @@ +# Notice for server administrators + +You can skip intermediate versions when upgrading from an old version, but please read the notices and follow the instructions for each intermediate version before [upgrading](https://firefish.dev/firefish/firefish/-/blob/main/docs/upgrade.md). + +## Upcoming breaking change (unreleased) + +Please take a look at #10947. + +## v20240725 + +### For LibreTranslate self-hosters + +Previously, neither the DeepL API nor the LibreTranslate API provided traditional Chinese translations, so we used to provide traditional Chinese post translations using manual conversion from simplified Chinese translations. + +However, now that LibreTranslate API supports traditional Chinese translations, we have removed the manual conversion process for LibreTranslate. So, if you are hosting your LibreTranslate instance, please ensure your LibreTranslate version is new enough to support traditional Chinese. + +## v20240714 + +### For systemd/pm2 users + +You can remove the `packages/megalodon` directory after pulling the latest source code (`git pull --ff origin main`). + +```sh +rm --recursive --force packages/megalodon +``` + +## v20240710 + +### For all users + +This is not related to the recent changes, but we have added a new section called "[Maintain the server](https://firefish.dev/firefish/firefish/-/blob/v20240710/docs/install.md#maintain-the-server)" in the installation guide. We suggest that you take a look at it (and we welcome your docs contributions)! + +### For systemd/pm2 users + +It is highly recommended that you upgrade Node.js, since [there is a new security release](). + +The new versions are: + - Node v18.20.4 (v18.x LTS) + - Node v20.15.1 (v20.x LTS) + - Node v22.4.1 (v22.x) + +[Node v21.x is end-of-life](). + +### :warning: For Docker/Podman users + +This is a security release for you, since the container image for this version is based on the updated Node.js image. + +## v20240607 + +The following environment variables are deprecated and no longer have any effect: +- `MK_ONLY_QUEUE` +- `MK_ONLY_SERVER` +- `MK_NO_DAEMONS` +- `MK_DISABLE_CLUSTERING` +- `MK_VERBOSE` +- `MK_WITH_LOG_TIME` +- `MK_SLOW` + +## v20240601 + +### For systemd/pm2 users + +Required Node.js version has been bumped from v18.17.0 to v18.19.0. Also, as written in the [v20240430 note](https://firefish.dev/firefish/firefish/-/blob/d3394b97f021dea323ec3ae36e39930680242482/docs/notice-for-admins.md#v20240430), it is highly recommended that you use an even newer version since v18.19.0 has known vulnerabilities. + +## v20240523 + +### For all users + +We regret to inform you that the upgrade may take a long time to fix a regression we have introduced. The time required to upgrade should be the same as [v20240413](). This is not a security fix, so please upgrade your server when you have enough time. We are sorry for the inconvenience. + +
+ +There are two data types in PostgreSQL to store time: `timestamptz` (`timestamp with time zone`) and `timestamp` (`timestamp without time zone`) [[ref]](). + +In Node.js, we manipulate the database using [TypeORM](). TypeORM handles time data as a JavaScript `Date` object. Since `Date` doesn't have timezone information [[ref]](), we don't use the timezone information in the Node.js backend, and both `timestamptz` and `timestamp` behave in the same way. (Technically, the type names are a little confusing, and `timestamptz` (`timestamp with time zone`) doesn't store the timezone data either. Please read PostgreSQL documentation for more information.) + +In Rust, we manipulate the database using [SeaORM](), which does distinguish between `timestamptz` and `timestamp`. `timestamptz` is converted to [`DateTime`]() type, whereas `timestamp` is converted to [`NaiveDateTime`](). + +We are using [napi-rs]() to implement some of the backend features in Rust, which did not support `DateTime`. We used to store time data as `timestamptz`, but we converted them to `timestamp` for this reason. As we don't use timezone data, we thought this was okay, and indeed it worked fine. + +However, we did not consider the case of migrating a server (hardware) to another timezone. With `timestamp`, there may be inconsistencies in the time data if you migrate your server to another system with a different timezone setting (Docker/Podman users should not be affected by this, as UTC is always used in containers unless you explicitly set one). + +Therefore, we have contributed to napi-rs to add support for `DateTime` () and decided to migrate back from `timestamp` to `timestamptz` to properly address this problem. The migration process takes time roughly proportional to the number of stored posts. + +
+ +### For systemd/pm2 users + +There is a bug where `pnpm install --frozen-lockfile` may fail on Linux 6.9.0, 6.9.1, and 6.9.2 ([GitHub issue]()). + +To check your Linux kernel version, run: + +```sh +uname --kernel-release +``` + +## v20240516 + +### For all users + +Firefish is now compatible with [Node v22](https://nodejs.org/en/blog/announcements/v22-release-announce). The pre-built OCI container image will still be using the latest LTS version (v20.13.1 as of now). + +## v20240430 + +### For all users + +You can control the verbosity of the server log by adding `maxLogLevel` in `.config/default.yml`. `logLevels` has been deprecated in favor of this setting. (see also: ) + +### For systemd/pm2 users + +- You need to install Perl to build Firefish. Since Git depends on Perl in many packaging systems, you probably already have Perl installed on your system. You can check the Perl version by this command: + ```sh + perl --version + ``` +- Not only Firefish but also Node.js has recently fixed a few security issues: + - https://nodejs.org/en/blog/vulnerability/april-2024-security-releases + - https://nodejs.org/en/blog/vulnerability/april-2024-security-releases-2 + + So, it is highly recommended that you upgrade your Node.js version as well. The new versions are + - Node v18.20.2 (v18.x LTS) + - Node v20.12.2 (v20.x LTS) + - Node v21.7.3 (v21.x) + + You can check your Node.js version by this command: + ```sh + node --version + ``` + [Node v22](https://nodejs.org/en/blog/announcements/v22-release-announce) was also released several days ago, but we have not yet tested Firefish with this version. + +## v20240413 + +### For all users + +Upgrading may take a long time due to the large changes in the database. Please make sure to perform the operations when you have time. + +The time required to upgrade varies greatly depending on the database size and the environment. For reference, we have checked that the database migration takes + +- 70 seconds if the database stores 600,000 posts +- 28 minutes if the database stores 12,000,000 posts + +(i.e., it takes roughly (𝑛 / 470,000) minutes where 𝑛 is the number of posts) on a server with 2 GB of RAM. You may want to tweak your database configuration (`postgres.conf`) if the process is significantly slower than our experimental result. + +The number of posts stored on your database can be found at `https://yourserver.example.com/admin/database` (or `notesCount` of `stats` API response). + +### For systemd/pm2 users + +- Please remove `packages/backend-rs/target` before building Firefish. + ```sh + rm --recursive --force packages/backend-rs/target + ``` +- Please do not terminate `pnpm run migrate` even if it appears to be frozen. + +### For Docker/Podman users + +You may not be able to access your server for a while after starting the container. + +## v20240326 + +### For Docker/Podman users + +The Firefish OCI container image is now based on [`docker.io/node:20-alpine`](https://hub.docker.com/layers/library/node/20-alpine/images/sha256-121edf6661770d20483818426b32042da33323b6fd30fc1ad4cd6890a817e240) (migrated from Debian to Alpine). This is a notification only and no action is required. + +## v20240319 + +The full-text search engine used in Firefish has been changed to [PGroonga](https://pgroonga.github.io/). This is no longer an optional feature, so please enable PGroonga on your system. If you are using Sonic, Meilisearch, or Elasticsearch, you can also uninstall it from your system and remove the settings from `.config/default.yml`. + +### For systemd/pm2 users + +- Required Node.js version has been bumped from v18.16.0 to v18.17.0. +- You need to install PGroonga on your system. Please follow the instructions below. + +[Edit (2024/03/23 23:55 UTC+9)] ~~**Warning**: You may fail to install PGroonga, since the package registry of Apache Arrow (one of the subdependencies of PGroonga) is currently down ([GitHub issue](https://github.com/apache/arrow/issues/40759)). We recommend that you hold off on upgrading until this problem is resolved.~~ + +[Edit (2024/03/25 22:31 UTC+9)] The Apache Arrow repository is now back up and running again. + +#### 1. Install PGroonga + +Please execute `psql --version` to check your PostgreSQL major version. This will print a message like this: + +```text +psql (PostgreSQL) 16.1 +``` + +In this case, your PostgreSQL major version is `16`. + +There are official installation instructions for many operating systems on , so please follow the instructions on this page. However, since many users are using Ubuntu LTS or Debian, and there are no instructions for Arch Linux and Fedora, we explicitly list the instructions for Ubuntu LTS, Debian, Arch Linux and Fedora here. Please keep in mind that this is not official information and the procedures may change. + +##### Ubuntu LTS + +1. Install subdependencies + ```sh + sudo apt install -y software-properties-common + sudo add-apt-repository -y universe + sudo add-apt-repository -y ppa:groonga/ppa + sudo apt install -y wget lsb-release + wget https://packages.groonga.org/ubuntu/groonga-apt-source-latest-$(lsb_release --codename --short).deb + sudo apt install -y -V ./groonga-apt-source-latest-$(lsb_release --codename --short).deb + ``` +2. Install PGroonga (replace `16` with your PostgreSQL version) + ```sh + sudo apt install postgresql-16-pgdg-pgroonga + + # Depending on your PostgreSQL installation method, + # the above command may fail and you need to run + # the following instead: + # sudo apt install postgresql-16-pgroonga + ``` + +##### Debian + +1. Install subdependencies + ```sh + sudo apt install -y -V ca-certificates lsb-release wget + wget https://apache.jfrog.io/artifactory/arrow/$(lsb_release --id --short | tr 'A-Z' 'a-z')/apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb + sudo apt install -y -V ./apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb + wget https://packages.groonga.org/debian/groonga-apt-source-latest-$(lsb_release --codename --short).deb + sudo apt install -y -V ./groonga-apt-source-latest-$(lsb_release --codename --short).deb + ``` +2. Install PGroonga (replace `16` with your PostgreSQL version) + ```sh + sudo apt install postgresql-16-pgdg-pgroonga + + # Depending on your PostgreSQL installation method, + # the above command may fail and you need to run + # the following instead: + # sudo apt install postgresql-16-pgroonga + ``` + +##### Arch Linux + +You can install PGroonga from the Arch User Repository. + +```sh +git clone https://aur.archlinux.org/pgroonga.git && cd pgroonga && makepkg -si +# or paru -S pgroonga +# or yay -S pgroonga +``` + +##### Fedora + +You need to build PGroonga from source and create a policy package. + +```sh +sudo dnf install make groonga-devel postgresql-server-devel redhat-rpm-config +wget https://packages.groonga.org/source/pgroonga/pgroonga-3.1.8.tar.gz +tar xvf pgroonga-3.1.8.tar.gz +cd pgroonga-3.1.8 +make +sudo make install +``` + +```sh +cat > pgroonga.te << EOF +module pgroonga 1.0; + +require { + type postgresql_t; + type postgresql_db_t; + class file map; +} + +allow postgresql_t postgresql_db_t:file map; +EOF +``` + +```sh +checkmodule -M -m -o pgroonga.mod pgroonga.te +semodule_package -o pgroonga.pp -m pgroonga.mod +sudo semodule -i pgroonga.pp +``` + +#### 2. Enable PGroonga + +After the instllation, please execute this command to enable PGroonga: + +```sh +sudo --user=postgres psql --dbname=your_database_name --command='CREATE EXTENSION pgroonga;' +``` + +The database name can be found in `.config/default.yml`. +```yaml +db: + port: 5432 + db: database_name # substitute your_database_name with this + user: firefish + pass: password +``` + +### For Docker/Podman users + +Please edit your `docker-compose.yml` to replace the database container image from `docker.io/postgres` to `docker.io/groonga/pgroonga`. + +The list of tags can be found on . Tags are named as `{PGroonga version}-{alpine or debian}-{PostgreSQL major version}`. + +Please make sure to use the same PostgreSQL version. If you are using `docker.io/postgres:16-alpine` (PostgreSQL v16), the corresponding image is `docker.io/groonga/pgroonga:3.1.8-alpine-16` (or `docker.io/groonga/pgroonga:3.1.8-alpine-16-slim`). There are also tags called `latest-alpine-16` and `latest-alpine-16-slim`, but please be careful if you use these tags since [PGroonga may introduce breaking changes](https://pgroonga.github.io/upgrade/), similar to PostgreSQL. + +```yaml +db: + restart: unless-stopped + image: docker.io/groonga/pgroonga:3.1.8-alpine-16-slim # change here + container_name: firefish_db +``` + +After that, execute this command to enable PGroonga: + +```sh +docker-compose up db --detach && sleep 5 && docker-compose exec db sh -c 'psql --user="${POSTGRES_USER}" --dbname="${POSTGRES_DB}" --command="CREATE EXTENSION pgroonga;"' +# or podman-compose up db --detach && sleep 5 && podman-compose exec db sh -c 'psql --user="${POSTGRES_USER}" --dbname="${POSTGRES_DB}" --command="CREATE EXTENSION pgroonga;"' +``` + +Once this is done, you can start Firefish as usual. + +```sh +docker pull registry.firefish.dev/firefish/firefish && docker-compose up --detach +# or podman pull registry.firefish.dev/firefish/firefish && podman-compose up --detach +``` + +## v20240301 + +### For all users + +A new setting item has been added to control the log levels, so please consider updating your `.config/default.yml`. ([example settings](https://firefish.dev/firefish/firefish/-/blob/e7689fb302a0eed192b9515162258a39800f838a/.config/example.yml#L170-179)) + +## v20240225 + +### For Docker/Podman users + +- The bug where `custom` directory was not working has (finally) been fixed. Please add the `custom` directory to `volumes` in your `docker-compose.yml`: + ```yaml + services: + web: + image: registry.firefish.dev/firefish/firefish:latest + # and so on ... + + volumes: + - ./custom:/firefish/custom:ro # <- Please add this line + - ./files:/firefish/files + - ./.config:/firefish/.config:ro + ``` + +## v20240222 + +### For Docker/Podman users + +- You only need to pull the new container image (`docker/podman pull`) to upgrade your server, so we assume that many of you don't update the code (`git pull --ff`), but it's still worth noting here that we have renamed `docker-compose.yml` to `docker-compose.example.yml` in the repository, and `docker-compose.yml` is now set to be untracked by git. + - Since `docker-compose.yml` may be edited by users (e.g., change port number, add reverse proxy), it shouldn't have been tracked by git in the first place. + - If you want to update the repository (`git pull --ff`), please take the following steps to keep your `docker-compose.yml`: + 1. Backup (make a copy) your `docker-compose.yml` + ```sh + cp docker-compose.yml /tmp/my-docker-compose.yml # or somewhere else + ``` + 2. Restore the original `docker-compose.yml` so it doesn't conflict with the upstream changes + ```sh + git checkout -- docker-compose.yml + ``` + 3. Pull the new code + ```sh + git switch main + git pull --ff + ``` + 4. Bring back your `docker-compose.yml` + ```sh + mv /tmp/my-docker-compose.yml docker-compose.yml + ``` + - If any modifications are needed to `docker-compose.yml` in the future, we will provide a notice. + - Also, PostgreSQL v12.2 (`docker.io/postgres:12.2-alpine`) has been used in this compose file, but we highly recommend that you upgrade it to a newer version (e.g., `docker.io/postgres:16-alpine`). + - Note: some manual (painful) operations are needed to upgrade the PostgreSQL major version, so please be careful when performing upgrades: + +## v20240214 + +### For systemd/pm2 users + +- Required Rust version has been bumped from v1.70 to v1.74. + ```sh + cargo --version # check version + rustup update # update version + ``` + +## v20240213 + +### For systemd/pm2 users + +- `packages/backend/native-utils` can be removed. + - This directory was removed in the repository, but it's not completely removed from your system by `git pull --ff`, because some folders like `packages/backend/native-utils/built` are not tracked by git. + + ```sh + rm --recursive --force packages/backend/native-utils + ``` + +## v20240206 + +### For all users + +- The git repository has been moved, so please update the `git remote` url. + ```sh + git remote set-url origin https://firefish.dev/firefish/firefish.git + ``` + +### For systemd/pm2 users + +- Required Rust version has been bumped from v1.68 to v1.70. +- `libvips` is no longer required (unless your server OS is *BSD), so you may uninstall it from your system. Make sure to execute the following commands after that: + ```sh + pnpm clean-npm + pnpm install + ``` + +### For Docker/Podman users + +- The image tag has been changed to `registry.firefish.dev/firefish/firefish:latest`, so please update `docker-compose.yml`. diff --git a/docs/upgrade.md b/docs/upgrade.md new file mode 100644 index 0000000..8f602cf --- /dev/null +++ b/docs/upgrade.md @@ -0,0 +1,41 @@ +# Upgrade instruction + +## For systemd/pm2 users + +1. Check [`docs/notice-for-admins.md`](https://firefish.dev/firefish/firefish/-/blob/main/docs/notice-for-admins.md) +1. Stop the server + ```sh + sudo systemctl stop your-firefish-service.service + # or pm2 stop firefish + ``` +1. Pull the latest source code + ```sh + git checkout -- packages/backend/assets + git pull --ff origin main + ``` +1. Build Firefish and apply changes to the database + ```sh + corepack prepare pnpm@latest --activate + pnpm install --frozen-lockfile + NODE_ENV='production' NODE_OPTIONS='--max_old_space_size=3072' pnpm run rebuild + pnpm run migrate + ``` +1. Start the server + ```sh + sudo systemctl start your-firefish-service.service + # or pm2 start firefish + ``` + +## For Docker/Podman users + +1. Check [`docs/notice-for-admins.md`](https://firefish.dev/firefish/firefish/-/blob/main/docs/notice-for-admins.md) +1. Pull the latest container image + ```sh + docker pull registry.firefish.dev/firefish/firefish:latest + # or podman pull registry.firefish.dev/firefish/firefish:latest + ``` +1. Start the container + ```sh + docker compose up --detach + # or podman-compose up --detach + ``` diff --git a/locales/ar-SA.yml b/locales/ar-SA.yml new file mode 100644 index 0000000..6329fbb --- /dev/null +++ b/locales/ar-SA.yml @@ -0,0 +1,1582 @@ +_lang_: "العربية" +headlineFirefish: "شبكة مرتبطة بالملاحظات" +introFirefish: "اهلا بك! ميسكي هو منصة تدوين مصغر لا مركزية ومفتوحة المصدر.\nيمكنك + مشاركة \"ملاحظات\" عن ما يجري حولك، وإخبار الجميع عن نفسك 📡\nتسمح لك \"الانفعالات\"\ + \ بتعبير عن شعورك حول ملاحظات الآخرين 👍\nاكتشف عالمًا جديدًا 🚀" +monthAndDay: "{day}/{month}" +search: "البحث" +notifications: "الإشعارات" +username: "اسم المستخدم" +password: "الكلمة السرية" +forgotPassword: "نسيتَ كلمة السر" +fetchingAsApObject: "جارٍ جلبه مِن الفديفرس" +ok: " حسناً" +gotIt: "فهِمت" +cancel: " إلغاء" +enterUsername: "أدخِل إسم مسخدم" +renotedBy: "أعاد نشرها {user}" +noNotes: "لم يُعثر على أية ملاحظات" +noNotifications: "ليس هناك أية اشعارات" +instance: "مثيل الخادم" +settings: "الاعدادات" +basicSettings: "الاعدادات الأساسية" +otherSettings: "إعدادات أخرى" +openInWindow: "افتح في نافذة جديدة" +profile: "الملف التعريفي" +timeline: "الخيط الزمني" +noAccountDescription: "لم يكتب هذا المستخدم سيرته بعد." +login: "لِج" +loggingIn: "جارٍ تسجيل الدخول" +logout: "الخروج" +signup: "أنشئ حسابًا" +uploading: "يرفع..." +save: "حفظ" +users: "المستخدمون" +addUser: "اضافة مستخدم" +favorite: "أضفها للمفضلة" +favorites: "المفضلات" +unfavorite: "إزالة من المفضلة" +favorited: "أُضيف إلى المفضلة." +alreadyFavorited: "تمت إضافته بالفعل إلى المفضلة." +cantFavorite: "تعذرت الإضافة إلى المفضلة." +pin: "دبّسها على الصفحة الشخصية" +unpin: "ألغ تدبيسها من ملفك الشخصي" +copyContent: "انسخ المحتوى" +copyLink: "انسخ الرابط" +delete: "حذف" +deleteAndEdit: "إزالة وإعادة الصياغة" +deleteAndEditConfirm: "أمتأكد من حذف الملاحظة؟ ستفقد كل مشاركاتها، والتفاعلات، والردود + عليها." +addToList: "أضفه إلى قائمة" +sendMessage: "أرسل رسالة" +copyUsername: "انسخ اسم المستخدم" +searchUser: "ابحث عن مستخدمين" +reply: "رد" +loadMore: "عرض المزيد" +showMore: "عرض المزيد" +showLess: "اغلق" +youGotNewFollower: "يتابعك" +receiveFollowRequest: "تلقيت طلب متابعة" +followRequestAccepted: "قُبل طلب المتابعة" +mention: "أشر الى" +mentions: "الإشارات" +directNotes: "الملاحظات المباشرة" +importAndExport: "إستورد / صدر" +import: "استيراد" +export: "تصدير" +files: "الملفات" +download: "تنزيل" +driveFileDeleteConfirm: "أمتأكد من حذف ملف {name}؟ كل الملاحظات المُرفق بها هذا الملف + ستحذف." +unfollowConfirm: "أمتأكد من إلغاء متابعة {name}؟" +exportRequested: "قد تستغرق عملية التصدير بعض الوقت. بمجرد الانتهاء سيضاف الملف الناتج + إلى قرص التخزين." +importRequested: "يستغرق الاستيراد بعض الوقت" +lists: "القوائم" +noLists: "ليس لديك أية قائمة" +note: "ملاحظة" +notes: "الملاحظات" +following: "المتابَعون" +followers: "المتابِعون" +followsYou: "يتابعك" +createList: "إنشاء قائمة" +manageLists: "إدارة القوائم" +error: "خطأ" +somethingHappened: "حدث خطأ" +retry: "حاول مجددًا" +pageLoadError: "فشل تحميل الصفحة" +pageLoadErrorDescription: "عادة ما يكون السبب خطأ في الشبكة أو التخزين المؤقت للمتصفح. + امسح التخزين المؤقت ثم أعد المحاولة لاحقًا." +serverIsDead: "الخادم لا يستجيب، حاول بعد قليل" +youShouldUpgradeClient: "حدّث الصفحة لعرضها." +enterListName: "اسم القائمة" +privacy: "الخصوصية" +makeFollowManuallyApprove: "قبول طلبات الإشتراك يدويا" +defaultNoteVisibility: "مدى الرؤية الافتراضي" +follow: "تابِع" +followRequest: "طلب اشتراك" +followRequests: "طلبات الإشتراك" +unfollow: "إلغاء الاشتراك" +followRequestPending: "طلبات الإشتراك المعلّقة" +enterEmoji: "أدخل إيموجي" +renote: "أعد النشر" +unrenote: "إلغاء مشاركة الملاحظة" +renoted: "أُعيد نشره" +cantRenote: "لا يمكن إعادة نشر الملاحظة" +cantReRenote: "لا يمكنك إعادة نشر ملاحظة معاد نشرها" +quote: "اقتبس" +pinnedNote: "ملاحظة مدبسة" +pinned: "دبّسها على الصفحة الشخصية" +you: "أنت" +clickToShow: "اضغط للعرض" +sensitive: "محتوى حساس" +add: "إضافة" +reaction: "التفاعلات" +reactionSetting: "التفاعلات المراد عرضها في منتقي التفاعلات." +reactionSettingDescription2: "اسحب لترتيب ، انقر للحذف ، استخدم \"+\" للإضافة." +rememberNoteVisibility: "تذكر إعدادت مدى رؤية الملاحظات" +attachCancel: "أزل المرفق" +markAsSensitive: "علّمه كمحتوى حساس" +unmarkAsSensitive: "ألغ تعيينه كمحتوى حساس" +enterFileName: "ادخل اسم الملف" +mute: "اكتم" +unmute: "إلغاء الكتم" +block: "احجب" +unblock: "إلغاء الحجب" +suspend: "علِق" +unsuspend: "ألغ التعليق" +blockConfirm: "أمتأكد من حجب هذا الحساب؟" +unblockConfirm: "أمتأكد من إلغاء حجب هذا الحساب؟" +suspendConfirm: "أمتأكد من تعليق الحساب؟" +unsuspendConfirm: "أمتأكد من إلغاء تعليق؟" +selectList: "اختر قائمة" +selectAntenna: "اختر هوائيًا" +selectWidget: "اختر ودجة" +editWidgets: "عدّل الودجات" +editWidgetsExit: "تم" +customEmojis: "إيموجي مخصص" +emoji: "إيموجي" +emojis: "إيموجي" +emojiName: "اسم الإيموجي" +emojiUrl: "رابط الإيموجي" +addEmoji: "إضافة إيموجي" +settingGuide: "الإعدادات المستحسنة" +cacheRemoteFiles: "خزن مؤقتا الملفات البعيدة" +flagAsBot: "علّمه كحساب آلي" +flagAsBotDescription: "فعّل هذا الخيار إذا كان هذا الحساب يُدار عبر برمجية. إذا فُعل + فسيكون بمثابة علامة للمطورين الآخرين لتجنب سلاسل لا متناهية من التفاعل بين حسابات + الآلية وضبط أنظمة ميسكي للتعامل مع هذا الحساب كآلي." +flagAsCat: "علّم هذا الحساب كحساب قط" +flagAsCatDescription: "فعّل هذا الخيار لوضع علامة على الحساب لتوضيح أنه حساب قط." +flagShowTimelineReplies: "أظهر التعليقات في الخيط الزمني" +flagShowTimelineRepliesDescription: "يظهر الردود في الخيط الزمني" +autoAcceptFollowed: "اقبل طلبات المتابعة تلقائيا من الحسابات المتابَعة" +addAccount: "أضف حساباً" +loginFailed: "فشل الولوج" +showOnRemote: "رؤيته على مثيل الخادم البُعدي" +general: "الرئيسية" +wallpaper: "الخلفية" +setWallpaper: "عيّن خلفية" +removeWallpaper: "أزل الخلفية" +searchWith: "البحث: {q}" +youHaveNoLists: "لا تمتلك أية قائمة" +followConfirm: "أتريد متابعة {name}؟" +proxyAccount: "حساب وكيل البروكسي" +proxyAccountDescription: "يتصرف حساب الوكيل كمتابع بعيد لمستخدمين تحت ظروف معينة. + على سبيل المثال ، عندما يضيف مستخدم مستخدمًا بعيدًا إلى قائمة فإن ملاحظاته لن تُرسل + إلى المثيل ما لم يُتابعه مستخدم محلي. وبالتالي فإن حساب الوكيل سوف يتابع هذا المستخدم + لكي تُرسل ملاحظاته." +host: "المضيف" +selectUser: "حدّد مستخدمًا" +recipient: "المرسَل إليه·ها" +annotation: "التعليقات" +federation: "الفديرالية" +instances: "مثيل الخادم" +registeredAt: "مسجل منذ" +latestRequestSentAt: "آخر طلب أرسِل في" +latestRequestReceivedAt: "آخر طلب تُلقي في" +latestStatus: "الحالات الأخيرة" +storageUsage: "مساحة التخزين المستخدمة" +charts: "المنحنيات البيانية" +perHour: "في الساعة" +perDay: "في اليوم" +stopActivityDelivery: "وقف إرسال النشاط" +blockThisInstance: "احجب مثيل الخادم هذا" +operations: "الإجراءات" +software: "البرمجية" +version: "الإصدار" +metadata: "البيانات الوصفية" +monitor: "شاشة التحكم" +jobQueue: "قائمة الانتظار" +cpuAndMemory: "وحدة المعالجة المركزية والذاكرة" +network: "الشبكة" +disk: "قرص التخزين" +instanceInfo: "معلومات مثيل الخادم" +statistics: "الإحصائيات" +clearQueue: "تفريغ قائمة الإنتظار" +clearQueueConfirmTitle: "أتريد مسح الطابور؟" +clearCachedFiles: "امسح التخزين المؤقت" +clearCachedFilesConfirm: "أتريد حذف التخزين المؤقت للملفات البعيدة؟" +blockedInstances: "المثلاء المحجوبون" +blockedInstancesDescription: "قائمة بالمثلاء التي تريد حظرها بحيث كل نطاق في سطر لوحده. + بعد إدراجهم لن يتمكنوا من التفاعل مع هذا المثيل." +muteAndBlock: "المكتومون والمحجوبون" +mutedUsers: "الحسابات المكتومة" +blockedUsers: "الحسابات المحجوبة" +noUsers: "ليس هناك مستخدمون" +editProfile: "تعديل الملف التعريفي" +noteDeleteConfirm: "هل تريد حذف هذه الملاحظة؟" +pinLimitExceeded: "لا يمكنك تدبيس الملاحظات بعد الآن." +intro: "لقد انتهت عملية تنصيب Firefish. الرجاء إنشاء حساب إداري." +done: "تمّ" +processing: "المعالجة جارية" +preview: "معاينة" +default: "افتراضي" +noCustomEmojis: "ليس هناك إيموجي" +noJobs: "لا توجد مهام" +federating: "الفديرالية جارية" +blocked: "محجوب" +suspended: "مُعلّق" +all: "الكل" +notResponding: "لا يستجيب" +instanceFollowing: "المثلاء المتابَعون" +instanceFollowers: "المثلاء المتابِعون" +instanceUsers: "مستخدمو المثيل" +changePassword: "تغيير الكلمة السرية" +security: "الأمان" +retypedNotMatch: "المدخلات لا تتطابق" +currentPassword: "كلمة المرور الحالية" +newPassword: "كلمة المرور الجديدة" +newPasswordRetype: "كرّر كلمة المرور الجديدة:" +attachFile: "أرفق ملفات" +more: "المزيد!" +featured: "المتداولة" +usernameOrUserId: "اسم المستخدم أو معرّفه" +noSuchUser: "لم يُعثَر على المستخدم" +lookup: "البحث" +announcements: "الإعلانات" +imageUrl: "رابط الصورة" +remove: "حذف" +removed: "حُذف بنجاح" +removeAreYouSure: "متأكد من أنك تريد حذف {x}؟" +deleteAreYouSure: "متأكد من أنك تريد حذف {x}؟" +resetAreYouSure: "هل تريد إعادة التعيين؟" +saved: "حُفظ" +messaging: "المحادثة" +upload: "ارفع" +keepOriginalUploading: "ابق الصورة الأصلية" +keepOriginalUploadingDescription: "يحفظ الصور المرفوعة على حالتها الأصلية، وان عطّل + ستولد نسخة مخصصة من الصورة." +fromDrive: "من المخزن" +fromUrl: "عبر رابط" +uploadFromUrl: "ارفع عبر رابط" +uploadFromUrlDescription: "رابط الملف المراد رفعه" +uploadFromUrlRequested: "الرفع مطلوب" +uploadFromUrlMayTakeTime: "سيستغرق بعض الوقت لاتمام الرفع " +explore: "استكشاف" +messageRead: "مقروءة" +noMoreHistory: "لا يوجد المزيد من التاريخ" +startMessaging: "ابدأ محادثة" +nUsersRead: "قرأه {n}" +agreeTo: "اوافق على {0}" +tos: "شروط الخدمة" +start: "البداية" +home: "الرئيسي" +remoteUserCaution: "هذه المعلومات قد لا تكون مكتملة بما أن المستخدم من مثيل بعيد." +activity: "النشاط" +images: "الصور" +birthday: "تاريخ الميلاد" +yearsOld: "{age} سنة" +registeredDate: "انضم في" +location: "الموقع الجغرافي" +theme: "المظهر" +themeForLightMode: "الحلة في الوضع الفاتح" +themeForDarkMode: "الحلة في الوضع الداكن" +light: "فاتح" +dark: "داكن" +lightThemes: "الحلة الفاتحة" +darkThemes: "الحلة الداكنة" +syncDeviceDarkMode: "مطابقة الوضع المضلمومع اعدادات الجهاز" +drive: "قرص التخرين" +fileName: "اسم الملف" +selectFile: "اختر ملفًا" +selectFiles: "اختر ملفات" +selectFolder: "اختر مجلدًا" +selectFolders: "اختر مجلدات" +renameFile: "إعادة تسمية الملف" +folderName: "اسم المجلد" +createFolder: "أنشئ مجلدًا" +renameFolder: "إعادة تسمية المجلد" +deleteFolder: "احذف هذا المجلد" +addFile: "إضافة ملف" +emptyDrive: "قرص التخزين فارغ" +emptyFolder: "هذا المجلد فارغ" +unableToDelete: "لا يمكن حذفه" +inputNewFileName: "ادخل الإسم الجديد للملف" +inputNewDescription: "أدخل تعليقًا توضيحيًا" +inputNewFolderName: "ادخل الإسم الجديد للمجلد" +circularReferenceFolder: "المجلد المستهدف ينتمي للمجلد الذي تريد حذفه" +hasChildFilesOrFolders: "الان الملف غير فارغ. لا يمكن حذفه" +copyUrl: "انسخ الرابط" +rename: "إعادة التسمية" +avatar: "الصورة الرمزية" +banner: "الصورة الرأسية" +nsfw: "محتوى حساس" +whenServerDisconnected: "عند فقدان الاتصال بالخادم" +disconnectedFromServer: "قُطِع الإتصال بالخادم" +reload: "انعش" +doNothing: "تجاهل" +reloadConfirm: "هل ترغب في تحديث الجدول الزمني؟" +watch: "راقب" +unwatch: "إلغاء المراقبة" +accept: "السماح" +reject: "رفض" +normal: "عادي" +instanceName: "اسم مثيل الخادم" +instanceDescription: "وصف مثيل الخادم" +maintainerName: "المدير" +maintainerEmail: "عنوان بريد المدير الإلكتروني" +tosUrl: "رابط صفحة شروط الخدمة" +thisYear: "هذا العام" +thisMonth: "هذا الشهر" +today: "اليوم" +dayX: "{day}" +monthX: "{month}" +yearX: "{year}" +pages: "الصفحات" +enableLocalTimeline: "تفعيل الخيط المحلي" +enableGlobalTimeline: "تفعيل الخيط الزمني الشامل" +disablingTimelinesInfo: "سيتمكن المديرون والمشرفون من الوصول إلى كل الخيوط الزمنية + حتى وإن لم تفعّل." +registration: "إنشاء حساب" +enableRegistration: "تفعيل إنشاء الحسابات الجديدة" +invite: "دعوة" +driveCapacityPerLocalAccount: "حصة التخزين لكل مستخدم محلي" +driveCapacityPerRemoteAccount: "حصة التخزين لكل مستخدم بعيد" +inMb: "بالميغابايت" +iconUrl: "رابط الأيقونة" +bannerUrl: "رابط صورة اللافتة" +backgroundImageUrl: "رابط صورة الخلفية" +basicInfo: "المعلومات الأساسية " +pinnedUsers: "المستخدمون المدبسون" +pinnedUsersDescription: "قائمة المستخدمين المدبسين في لسان \"استكشف\" ، اجعل كل اسم + مستخدم في سطر لوحده." +pinnedPages: "الصفحات المدبسة" +pinnedPagesDescription: "أدخل مسار الصفحات التي تريد تدبيسها في أعلى هذا الموقع، اجعل + كل مسار في سطر لوحده." +pinnedClipId: "معرّف المشبك المدبس" +pinnedNotes: "ملاحظة مدبسة" +hcaptcha: "hCaptcha" +enableHcaptcha: "فعّل hCaptcha" +hcaptchaSiteKey: "مفتاح الموقع" +hcaptchaSecretKey: "المفتاح السري" +recaptcha: "reCAPTCHA" +enableRecaptcha: "تمكين reCAPTCHA" +recaptchaSiteKey: "مفتاح الموقع" +recaptchaSecretKey: "المفتاح السري" +avoidMultiCaptchaConfirm: "يمكن أن يتسبب استخدام عدة خدمات لكلمات التحقق في حدوث تداخل. + هل ترغب في إلغاء تنشيط الخدمات الأخرى؟ يمكنك ترك هذه الخدمات نشطة بالضغط على \"\ + ألغ\"." +antennas: "الهوائيات" +manageAntennas: "إدارة الهوائيات" +name: "الإسم" +antennaSource: "مصدر الهوائي" +antennaKeywords: "الكلمات المفتاحية للإستقبال" +antennaExcludeKeywords: "الكلمات المفتاحية المستثناة" +antennaKeywordsDescription: "افصل بينهم بمسافة لاستخدام معامل \"و\" أو بسطر لاستخدام + معامل \"أو\"" +notifyAntenna: "نبهني بصول ملاحظات جديدة" +withFileAntenna: "ملاحظات تحوي ملفات فقط" +antennaUsersDescription: "اكتب اسم مستخدم لكل سطر" +caseSensitive: "حساسية حالة الأحرف" +withReplies: "بالردود" +connectedTo: "الحسابات التالية متصلة" +notesAndReplies: "الملاحظات والردود" +withFiles: "ذات مرفقات" +silence: "اكتم" +silenceConfirm: "أمتأكد من كتم هذا المستخدم؟" +unsilence: "إلغاء الكتم" +unsilenceConfirm: "أمتأكد من إلغاء كتم هذا المستخدم؟" +popularUsers: "المستخدمون الرائدون" +recentlyUpdatedUsers: "أصحاب النشاطات الأخيرة" +recentlyRegisteredUsers: "المستخدمون المنضمون حديثًا" +recentlyDiscoveredUsers: "المستخدمون المكتشفون حديثًا" +exploreUsersCount: "يوجد {count} مستخدم(ا)" +exploreFediverse: "استكشف الفديفرس" +popularTags: "الوسوم الرائجة" +userList: "القوائم" +about: "عن" +aboutFirefish: "عن Firefish" +administrator: "المدير" +token: "الرمز المميز" +twoStepAuthentication: "الإستيثاق بعاملَيْن" +moderator: "مشرِف" +nUsersMentioned: "{n} مستخدمين أُشير إليهم" +securityKey: "مفتاح الأمان" +securityKeyName: "اسم المفتاح" +registerSecurityKey: "سجل مفتاح أمان" +lastUsed: "آخر استخدام" +unregister: "إلغاء التسجيل" +passwordLessLogin: "لِج مِن دون كلمة سرية" +resetPassword: "أعد تعيين كلمتك السرية" +newPasswordIs: "كلمتك السرية الجديدة هي {password}" +reduceUiAnimation: "قلص تأثيرات الواجهة" +share: "شارِك" +notFound: "غير موجود" +notFoundDescription: "تعذر العثور على صفحة يقود إليها هذا الرابط." +uploadFolder: "المجلد الافتراضي للرفع" +cacheClear: "مسح ذاكرة التخزين المؤقت" +markAsReadAllNotifications: "وضع جميع الإشعارات كأنها مقروءة" +markAsReadAllUnreadNotes: "علّم جميع الملاحظات كمقروءة" +markAsReadAllTalkMessages: "علّم جميع الرسائل كمقروءة" +help: "المساعدة" +inputMessageHere: "اكتب رسالتك هنا" +close: "اغلق" +group: "الفريق" +groups: "الفِرَق" +createGroup: "انشئ فريقًا" +ownedGroups: "فِرقي" +joinedGroups: "الفِرق المُنضم إليها" +invites: "دعوة" +groupName: "اسم الفريق" +members: "الأعضاء" +transfer: "نقل" +messagingWithUser: "تحدث مع مستخدم" +messagingWithGroup: "محادثة جماعية" +title: "العنوان" +text: "النص" +enable: "تشغيل" +next: "التالية" +retype: "أعد الكتابة" +noteOf: "ملاحظات {user}" +inviteToGroup: "دعوة إلى فريق" +quoteAttached: "اِقتُبسَ" +quoteQuestion: "أتريد تضمينها كاقتباس" +noMessagesYet: "ليس هناك رسائل بعد" +newMessageExists: "لقد تلقيت رسالة جديدة" +onlyOneFileCanBeAttached: "يمكنك إرفاق ملف واحد بالرسالة" +signinRequired: "رجاءً لِج" +invitations: "دعوة" +invitationCode: "رمز الدعوة" +checking: "التحقق جارٍ" +available: "متوفر" +unavailable: "غير متوفر" +usernameInvalidFormat: "يمكنك استخدام A-z، a-z، 0-9، _" +tooShort: "قصير جدًا" +tooLong: "طويل جدًا" +weakPassword: "الكلمة السرية ضعيفة" +normalPassword: "الكلمة السرية جيدة" +veryStrongPassword: "الكلمة السرية قوية" +passwordMatched: "التطابق صحيح!" +passwordNotMatched: "غير متطابقتان" +signinWith: "الولوج عبر {x}" +signinFailed: "فشل الولوج، خطأ في اسم المستخدم أو كلمة المرور." +tapSecurityKey: "أنقر مفتاح الأمان" +or: "أو" +language: "اللغة" +uiLanguage: "لغة واجهة المستخدم" +groupInvited: "دُعيت إلى فريقٍ" +aboutX: "عن {x}" +useOsNativeEmojis: "استخدم الإيموجي الخاصة بنظام التشغيل" +youHaveNoGroups: "لا تمتلك أية فِرَق" +joinOrCreateGroup: "احصل على دعوة لفريق أو أنشئ واحدًا." +noHistory: "السجل فارغ" +signinHistory: "تاريخ تسجيل الدخول" +doing: "انتظر لحظة" +category: "الفئات" +tags: "الوسوم" +docSource: "مصدر هذا المستند" +createAccount: "أنشئ حسابًا" +existingAccount: "الحسابات الموجودة" +regenerate: "أعِد التوليد" +fontSize: "حجم الخط" +noFollowRequests: "ليس لديك طلبات متابعة معلقة" +openImageInNewTab: "إفتح الصورة بصفحة جديدة" +dashboard: "لوحة التحكم" +local: "المحلي" +remote: "بُعدي" +total: "المجموع" +weekOverWeekChanges: "أسبوعيا" +dayOverDayChanges: "يوميا" +appearance: "المظهر" +clientSettings: "إعدادات العميل" +accountSettings: "إعدادات الحساب" +promotion: "ترقية" +promote: "روِّج" +numberOfDays: "عدد الأيام" +hideThisNote: "إخفاء هذه الملاحظة" +showFeaturedNotesInTimeline: "أظهر الملاحظات الشائعة في الخيط الزمني" +objectStorageBaseUrl: "الرابط الأساسي" +objectStoragePrefix: "البادئة" +objectStoragePrefixDesc: "ستُحفظ الملفات في مجلدات تحوي اسماءها هذه البادئة." +objectStorageEndpoint: "نقطة النهاية" +objectStorageRegion: "المنطقة" +objectStorageUseSSL: "استخدم SSL" +objectStorageUseSSLDesc: "عطل هذا الخيار إذا لم ترد استخدام API عبر HTTPS" +objectStorageUseProxy: "اتصل عبر وكيل" +objectStorageUseProxyDesc: "عطل هذا الخيار إذا لم ترد استخدام API عبر وكيل" +serverLogs: "سجلات الخادم" +deleteAll: "حذف الكل" +showFixedPostForm: "أظهر نموذج الكتابة في أعلى الصفحة" +newNoteRecived: "هناك ملاحظات جديدة" +sounds: "الرنات" +listen: "استمع" +none: "لا شيء" +showInPage: "اعرض في الصفحة" +popout: "منبثقة" +volume: "مستوى الصوت" +masterVolume: "حجم الصوت الرئيس" +details: "التفاصيل" +chooseEmoji: "اختر إيموجي" +unableToProcess: "يتعذر إكمال العملية" +recentUsed: "المستخدمة مؤخرا" +install: "ثبّت" +uninstall: "إلغاء التثبيت" +installedApps: "التطبيقات المُخوّلة" +nothing: "لا يوجد شيء هنا" +installedDate: "تاريخ التثبيت" +lastUsedDate: "آخر استخدام" +state: "الحالة" +sort: "ترتيب حسب" +ascendingOrder: "تصاعدي" +descendingOrder: "تنازلي" +output: "الخارجة" +disablePagesScript: "عطّل AiScript في الصفحات" +updateRemoteUser: "تحديث المعلومات عن المستخدم البعيد" +deleteAllFiles: "حذف كافة الملفات" +deleteAllFilesConfirm: "أتريد حذف كل الملفات؟" +removeAllFollowing: "ألغ متابعة كل المتابَعين" +removeAllFollowingDescription: "تنفيذه سيلغي متابعة المستخدمين المتواجدين على {host}. + يمكنك استخدامه إذا فُقد الخادم." +userSuspended: "عُلق هذا المستخدم." +userSilenced: "كُتم هذا المستخدم." +yourAccountSuspendedTitle: "هذا الحساب معلق" +yourAccountSuspendedDescription: "عُلق الحساب بسبب انتهاك شروط خدمة المثيل و ما شابه. + إذا أردت معرفة التفصيل تواصل مع مدير المثيل. رجاءً لا تنشئ حساب جديد." +menu: "القائمة" +divider: "فاصل" +addItem: "إضافة عنصر" +relays: "المُرَحلات" +addRelay: "إضافة مُرحّل" +inboxUrl: "رابط صندوق الوارد" +addedRelays: "المرحلات المضافة" +serviceworkerInfo: "يجب أن يفعل لإرسال الإشعارات." +deletedNote: "ملاحظة محذوفة" +invisibleNote: "ملاحظة مخفية" +enableInfiniteScroll: "فعّل التمرير المتواصل" +visibility: "الظهور" +poll: "استطلاع رأي" +useCw: "إخفاء المحتوى" +enablePlayer: "افتح مشغل الفيديو" +disablePlayer: "أغلق مشغل الفيديو" +expandTweet: "وسّع التغريدة" +themeEditor: "مصمم القوالب" +description: "الوصف" +describeFile: "أضف تعليقًا توضيحيًا" +enterFileDescription: "أدخل تعليقًا توضيحيًا" +author: "الكاتب" +leaveConfirm: "لديك تغييرات غير محفوظة. أتريد المتابعة دون حفظها؟" +manage: "إدارة " +plugins: "الإضافات" +useFullReactionPicker: "استخدم الحجم الكامل لمنتقي التفاعلات" +width: "العرض" +height: "الإرتفاع" +large: "كبير" +medium: "متوسط" +small: "صغير" +generateAccessToken: "ولّد رمز الوصول" +permission: "أذونات" +enableAll: "تشغيل الكل" +disableAll: "تعطيل الكل" +tokenRequested: "منح حق الوصول إلى الحساب" +pluginTokenRequestedDescription: "ستتمكن الإضافة من استخدام هذه الأذونات." +notificationType: "أنواع الإشعارات" +edit: "التعديل" +emailServer: "خادم البريد الإلكتروني" +emailConfigInfo: "يستخدم لتأكيد عنوان بريدك الإلكتروني ولإعادة تعيين كلمة المرور إن + نسيتها." +email: "البريد الإلكتروني " +emailAddress: "عنوان البريد الالكتروني" +smtpConfig: "إعدادات خادم SMTP" +smtpHost: "المضيف" +smtpPort: "المنفذ" +smtpUser: "اسم المستخدم" +smtpPass: "الكلمة السرية" +emptyToDisableSmtpAuth: "اترك اسم المستخدم وكلمة المرور فارغين لتعطيل التحقق من SMTP" +smtpSecureInfo: "عطل هذا الخيار عند استخدام STARTTLS" +wordMute: "حظر الكلمات" +regexpError: "خطأ في التعبير النمطي" +instanceMute: "المثلاء المكتومون" +userSaysSomething: "كتب {name} شيءً" +makeActive: "تفعيل" +display: "المظهر" +copy: "نسخ" +metrics: "المقاييس" +overview: "ملخص عام" +logs: "السِجلّات" +delayed: "متأخر" +database: "قاعدة البيانات" +channel: "القنوات" +create: "أنشئ" +notificationSetting: "إعدادات التنبيهات" +notificationSettingDesc: "اختر نوع التنبيهات المراد عرضها" +useGlobalSetting: "استخدم الإعدادات العامة" +useGlobalSettingDesc: "اذا فعّل ستطبق إعدادات إشعارات حسابك. إذا عطّل يمكن إجراء تكوينات + مخصصة." +other: "منوعات" +regenerateLoginToken: "أعد توليد الرمز" +regenerateLoginTokenDescription: "ينشئ رمز استيثاق جديد في العادة هذا ليس ضروريًا + ؛ عند إنشاء رمز جديد ستُخرج جميع الأجهزة." +setMultipleBySeparatingWithSpace: "يمكنك ادخال أكثر من مدخل واحد وذلك بفصلها بمسافات." +fileIdOrUrl: "معرف الملف أو رابط" +behavior: "السلوك" +sample: "مثال" +abuseReports: "البلاغات" +reportAbuse: "أبلغ" +reportAbuseOf: "أبلغ عن {name}" +fillAbuseReportDescription: "أكتب بالتفصيل سبب البلاغ، إذا كنت تبلغ عن ملاحظة أرفق + رابط لها." +abuseReported: "أُرسل البلاغ، شكرًا لك" +reporter: "المُبلّغ" +reporteeOrigin: "أصل البلاغ" +reporterOrigin: "أصل المُبلّغ" +forwardReport: "وجّه البلاغ إلى المثيل البعيد" +forwardReportIsAnonymous: "في المثيل البعيد سيظهر المبلّغ كحساب مجهول." +send: "أرسل" +abuseMarkAsResolved: "علّم البلاغ كمحلول" +openInNewTab: "افتح في لسان جديد" +defaultNavigationBehaviour: "سلوك الملاحة الافتراضي" +editTheseSettingsMayBreakAccount: "تعديل هذه الإعدادات قد يسبب عطبًا لحسابك" +instanceTicker: "معلومات المثيل الأصلي للملاحظات" +waitingFor: "في انتظار {x}" +random: "عشوائي" +system: "النظام" +switchUi: "بدّل واجهة المستخدم" +desktop: "سطح المكتب" +clip: "مِشبك" +createNew: "أنشِئ جديد" +optional: "اختياري" +createNewClip: "أنشئ مِشبكَا جديدًا" +public: "علني" +i18nInfo: "يترجم متطوعون ميسكي إلى عدة لغات، يمكنك المساعدة عبر {link}" +manageAccessTokens: "إدارة رموز الوصول" +accountInfo: "معلومات الحساب" +notesCount: "عدد الملاحظات" +repliesCount: "عدد الردود المرسلة" +renotesCount: "عدد الملاحظات المعاد نشرها (المرسلة)" +repliedCount: "عدد الردود المتلقاة" +renotedCount: "عدد الملاحظات المعاد نشرها (المتلقاة)" +followingCount: "عدد الحسابات المتابَعة" +followersCount: "عدد المتابِعين" +sentReactionsCount: "عدد الانفعالات المرسلة" +receivedReactionsCount: "عدد الانفعالات المتلقاة" +pollVotesCount: "عدد الاستطلاعات المرسلة" +pollVotedCount: "عدد الاستطلاعات المتلقاة" +yes: "نعم" +no: "لا" +driveFilesCount: "عدد الملفات في قرص التخزين" +driveUsage: "المستغل من قرص التخزين" +noCrawle: "ارفض فهرسة زاحف الويب" +noCrawleDescription: "يطلب من محركات البحث ألّا يُفهرسوا ملفك الشخصي وملاحظات وصفحاتك + وما شابه." +alwaysMarkSensitive: "علّم افتراضيًا جميع ملاحظاتي كذات محتوى حساس" +loadRawImages: "حمّل الصور الأصلية بدلًا من المصغرات" +disableShowingAnimatedImages: "لا تشغّل الصور المتحركة" +verificationEmailSent: "أُرسل بريد التحقق. أنقر على الرابط المضمن لإكمال التحقق." +notSet: "لم يعيّن" +emailVerified: "تُحقّق من بريدك الإلكتروني" +noteFavoritesCount: "عدد الملاحظات المفضلة" +pageLikesCount: "عدد الصفحات التي أعجبت بها" +pageLikedCount: "عدد صفحاتك المُعجب بها" +contact: "التواصل" +useSystemFont: "استخدم الخط الافتراضية للنظام" +clips: "مشابك" +experimentalFeatures: "ميّزات اختبارية" +developer: "المطور" +makeExplorable: "أظهر الحساب في صفحة \"استكشاف\"" +makeExplorableDescription: "بتعطيل هذا الخيار لن يظهر حسابك في صفحة \"استكشاف\"" +showGapBetweenNotesInTimeline: "أظهر فجوات بين المشاركات في الخيط الزمني" +wide: "عريض" +narrow: "رفيع" +reloadToApplySetting: "سيُطبق هذا الإعداد بعد إعادة تحميل الصفحة، أتريد إعادة تحميلها + الآن؟" +needReloadToApply: "سيطبق هذا بعد إعادة التحميل." +showTitlebar: "اعرض شريط العنوان" +clearCache: "امسح التخزين المؤقت" +onlineUsersCount: "{n} مستخدم متصل" +nUsers: "{n} مستخدم" +nNotes: "{n} ملاحظة" +sendErrorReports: "أرسل تقارير الأخطاء" +sendErrorReportsDescription: "إذا فعّلته ستساعد في تحسين ميسكي وذلك عبر مشاركة معلومات + تفصيلية عن الخطأ.\nومما تحتويه التقارير: نسخة نظام التشغيل ونوع المتصفح وسجل نشاطك + إلخ." +myTheme: "سماتي" +backgroundColor: "لون الخلفية" +accentColor: "طابع لوني" +textColor: "لون النص" +saveAs: "احفظ كـ..." +advanced: "متقدم" +value: "القيمة" +createdAt: "أُنشئ في" +updatedAt: "حُدّث في" +saveConfirm: "أتريد خفظ التغييرات؟" +deleteConfirm: "أمتأكد من الحذف؟" +invalidValue: "قيمة غير صالحة." +registry: "السجل" +closeAccount: "اختر حسبًا" +currentVersion: "الإصدار الحالي" +latestVersion: "آخر نسخة مستقرة" +youAreRunningUpToDateClient: "أنت تستخدم أحدث نسخة من العميل." +newVersionOfClientAvailable: "تتوفر نسخة أحدث للعميل" +usageAmount: "الإستخدام" +capacity: "السعة" +inUse: "مستخدم" +editCode: "حرر الشفرة" +apply: "تطبيق" +receiveAnnouncementFromInstance: "استلم إشعارات من هذا المثيل" +emailNotification: "إشعارات البريد الكتروني" +inChannelSearch: "ابحث عن قناة" +useReactionPickerForContextMenu: "افتح منتقي التفاعلات عند النقر بالزر الأيمن" +typingUsers: "{users} يكتب(ون)" +jumpToSpecifiedDate: "انتقل إلى تاريخ محدد" +showingPastTimeline: "أنت تستعرض حاليًا خيطًا زمنيًا قديمًا" +clear: "عودة" +markAllAsRead: "علّم الكل كمقروء" +goBack: "رجوع" +unlikeConfirm: "أتريد إلغاء إعجابك؟" +fullView: "ملء الشاشة" +quitFullView: "اخرج من وضع ملء للشاشة" +addDescription: "أضف وصفًا" +userPagePinTip: "لعرض ملاحظة هنا اختر \"دبسها على الصفحة الشخصية\" من قائمة تلك الملاحظة." +notSpecifiedMentionWarning: "في الملاحظة ذكر لمستخدمين لن يستلموها." +info: "عن" +userInfo: "معلومات المستخدم" +unknown: "مجهول" +onlineStatus: "الحالة" +hideOnlineStatus: "اخف الحالة" +hideOnlineStatusDescription: "قد يؤدي جعل اخفاء حالتك إلى تعطيل أداء بعض الميزات ، + مثل البحث." +online: "متصل" +active: "نشط" +offline: "غير متصل" +notRecommended: "غير مستحسن" +botProtection: "الحماية من الحسابات الآلية" +instanceBlocking: "المثيلات المحجوبة" +selectAccount: "اختر حسابًا" +switchAccount: "تغيير الحساب" +enabled: "مفعّل" +disabled: "معطّل" +quickAction: "الإجراءات السّريعة" +user: "المستخدمون" +administration: "إدارة " +accounts: "الحسابات" +switch: "بدّل" +noMaintainerInformationWarning: "لم تُضبط معلومات المدير" +noBotProtectionWarning: "لم تضبط الحماية من الحسابات الآلية" +configure: "اضبط" +postToGallery: "انشر في المعرض" +gallery: "المعرض" +recentPosts: "المشاركات الحديثة" +popularPosts: "المشاركات المتداولة" +shareWithNote: "شاركه في ملاحظة" +ads: "الإعلانات" +expiration: "ينتهي استطلاع الرأي في" +memo: "تذكير" +priority: "الأولوية" +high: "عالية" +middle: "متوسط" +low: "منخفضة" +emailNotConfiguredWarning: "لم تعيّن بريدًا إلكترونيًا" +ratio: "النسبة" +previewNoteText: "اعرض معاينة" +customCss: "CSS مخصصة" +customCssWarn: "استخدم هذه الإعداد فقط إن كان لك علم بماهيّته. إدخال قيمة غير مناسبة + سيسسب ضررًا للعميل." +global: "الشامل" +squareAvatars: "اعرض شكل الصور الرمزية كمربعات" +sent: "أرسل" +received: "اُستلم" +searchResult: "نتائج البحث" +hashtags: "الوسوم" +troubleshooting: "استكشاف الأخطاء وإصلاحها" +useBlurEffect: "استخدم تأثير الطمس في الواجهة" +learnMore: "راجع المزيد" +misskeyUpdated: "حُدث ميسكي!" +whatIsNew: "اعرض التغييرات" +translate: "ترجم" +translatedFrom: "تُرجم من {x}" +accountDeletionInProgress: "حذف الحساب جارٍ" +usernameInfo: "الاسم الذي يميزك عن بافي مستخدمي هذا الخادم، يمكنك استخدام الحروف اللاتينية + (a~z, A~Z) والأرقام (0~9) والشرطة السفلية (_). لا يمكنك تغييره بعد تسجيله." +keepCw: "أبقِ على تحذيرات المحتوى" +lastCommunication: "آخر تواصل" +resolved: "عولج" +unresolved: "لم يعالج" +breakFollow: "إلغاء الاشتراك" +itsOn: "مفعّل" +itsOff: "معطّل" +emailRequiredForSignup: "عنوان البريد الإلكتروني إلزامي للتسجيل" +unread: "غير مقروءة" +filter: "رشّح" +controlPanel: "لوحة التحكم" +manageAccounts: "إدارة الحسابات" +makeReactionsPublic: "اجعل سجل التفاعلات علنيًا" +makeReactionsPublicDescription: "هذا سيجعل قائمة تفاعلاتك مرئية للعلن." +classic: "تقليدي" +muteThread: "اكتم النقاش" +unmuteThread: "ارفع الكتم عن النقاش" +ffVisibility: "مرئية المتابِعين/المتابَعين" +ffVisibilityDescription: "يسمح لك بتحديد من يمكنهم رؤية متابِعيك ومتابَعيك." +deleteAccountConfirm: "سيحذف حسابك نهائيًا، أتريد المتابعة؟" +incorrectPassword: "كلمة السر خاطئة." +voteConfirm: "متيقِّن من تصويتك لـ {choice}؟" +hide: "إخفاء" +leaveGroup: "مغادرة الفريق" +leaveGroupConfirm: "متيقن من مغادرة \"{name}\"؟" +welcomeBackWithName: "مرحبًا بك مجددًا {name}" +clickToFinishEmailVerification: "انقر [{ok}] لاستيثاق بريدك الإلكتروني." +overridedDeviceKind: "نوع الجهاز" +smartphone: "هاتف ذكي" +tablet: "جهاز لوحي" +auto: "تلقائي" +themeColor: "لون السمة" +size: "الحجم" +numberOfColumn: "عدد الأعمدة" +mutePeriod: "مدة الكتم" +indefinitely: "أبدًا" +tenMinutes: "10 دقائق" +oneHour: "ساعة" +oneDay: "يوم" +oneWeek: "أسبوع" +failedToFetchAccountInformation: "تعذر جلب معلومات الحساب" +file: "الملفات" +reverse: "اقلب" +colored: "ملوّن" +label: "التسمية" +localOnly: "المحلي فقط" +account: "الحسابات" +_emailUnavailable: + used: "هذا البريد الإلكتروني مستخدم" + format: "صيغة البريد الإلكتروني غير صالحة" + mx: "خادم البريد الإلكتروني غير صالح" + smtp: "خادم البريد الإلكتروتي لا يستجيب" +_ffVisibility: + public: "علني" + followers: "مرئية لمتابِعيك فقط" + private: "خاص" +_signup: + almostThere: "كدت تنتهي" + emailAddressInfo: "رجاءً أدخل بريدك الإلكتروني." + emailSent: "أرسلت رسالة تأكيد إلى بريدك الإلكتروني ({email})، أنقر على الرابط الموجود + فيها لإكمال التسجيل." +_accountDelete: + accountDelete: "احذف الحساب" + mayTakeTime: "نظرًا لأن حذف الحساب يحتاج موارد كثيرة فقد يستغرق وقتًا طويلاً ليكتمل + وذلك بناءً على كمية المحتوى الموجود في الحساب وعدد الملفات المرفوعة." + sendEmail: "عند إنتهاء الحذف سترسل رسالة إلى البريد الإلكتروني المرتبط بهذا الحساب." + requestAccountDelete: "أرسل طلبًا لحذف الحساب" + started: "بدأت عملية الحذف." + inProgress: "عملية الحذف جارية" +_ad: + back: "رجوع" + reduceFrequencyOfThisAd: "قلل عرض هذا الإعلان" +_forgotPassword: + enterEmail: "أدخل البريد الإلكتروني المرتبط بحسابك لكي يرسل إليك رابط لإعادة تعيين + كلمة المرور." + ifNoEmail: "إذا لم تربط حسابك ببريد إلكتروني سيتوجب عليك التواصل مع مدير الموقع." + contactAdmin: "هذا المثيل لا يدعم استخدام البريد الإلكتروني، إن أردت إعادة تعيين + كلمة المرور تواصل مع المدير." +_gallery: + my: "معرضي" + liked: "المشاركات المُعجب بها" + like: "أعجبني" + unlike: "أزل الإعجاب" +_email: + _follow: + title: "يتابعك" + _receiveFollowRequest: + title: "استلمت طلب متابعة" +_plugin: + install: "ثبّت إضافات" + installWarn: "رجاءً لا تثبت إضافات غير موثوقة." + manage: "إدارة الإضافات" +_registry: + scope: "الحيّز" + key: "مفتاح" + keys: "المفاتيح" + domain: "النّطاق" + createKey: "أنشئ مفتاحًا" +_aboutFirefish: + about: "ميسكي هو برمجية مفتوحة المصدر يطورها syuilo منذ 2014." + contributors: "المساهمون الرئيسيون" + allContributors: "كل المساهمين" + source: "الشفرة المصدرية" + translation: "ترجم ميسكي" + donate: "تبرع لميسكي" +_nsfw: + respect: "اخف الوسائط ذات المحتوى الحساس" + ignore: "اعرض الوسائط ذات المحتوى الحساس" + force: "اخف كل الوسائط" +_mfm: + cheatSheet: "مرجع ملخص عن MFM" + intro: "MFM هي لغة ترميزية مخصصة يمكن استخدامها في عدّة أماكن في ميسكي. يمكنك مراجعة + كل تعابيرها مع كيفية استخدامها هنا." + mention: "أشر الى" + mentionDescription: "يمكنك الإشارة لمستخدم معيّن من خلال كتابة @ متبوعة باسم مستخدم." + hashtag: "الوسوم" + hashtagDescription: "يمكنك تعيين وسم من خلال كتابة # متبوعة بالنص المطلوب." + url: "الرابط" + urlDescription: "يمكن عرض الروابط" + link: "رابط" + bold: "عريض" + boldDescription: "جعل الحروف أثخن لإبرازها." + small: "صغير" + smallDescription: "يعرض المحتوى صغيرًا ورفيعًا." + center: "وسط" + centerDescription: "يمركز المحتوى في الوَسَط." + quote: "اقتبس" + quoteDescription: "يعرض المحتوى كاقتباس" + emoji: "إيموجي مخصص" + emojiDescription: "إحاطة اسم الإيموجي بنقطتي تفسير سيستبدله بصورة الإيموجي." + search: "البحث" + searchDescription: "يعرض نصًا في صندوق البحث" + flip: "اقلب" + flipDescription: "يقلب المحتوى عموديًا أو أفقيًا" + jelly: "تأثير (هلام)" + jellyDescription: "يمنح المحتوى حركة هلامية." + tada: "تأثير (تادا)" + tadaDescription: "يمنح للمحتوى تأثير تادا" + jump: "تأثير (قفز)" + jumpDescription: "يمنح للمحتوى حركة قفز." + bounce: "تأثير (ارتداد)" + bounceDescription: "يمنح للمحتوى حركة ارتدادية" + shake: "تأثير (اهتزاز)" + shakeDescription: "يمنح المحتوى حركة اهتزازية." + spin: "تأثير (دوران)" + spinDescription: "يمنح المحتوى حركة دورانية." + x2: "كبير" + x2Description: "يُكبر المحتوى" + x3: "كبير جداً" + x3Description: "يُضخم المحتوى" + x4: "هائل" + x4Description: "يُضخم المحتوى أكثر مما سبق." + blur: "طمس" + blurDescription: "يطمس المحتوى، لكن بالتمرير فوقه سيظهر بوضوح." + font: "الخط" + fontDescription: "الخط المستخدم لعرض المحتوى." + rainbow: "قوس قزح" + rainbowDescription: "اجعل المحتوى يظهر بألوان الطيف" + rotate: "تدوير" + rotateDescription: "يُدير المحتوى بزاوية معيّنة." +_instanceTicker: + none: "لا تظهره بتاتًا" + remote: "أظهر للمستخدمين البِعاد" + always: "أظهره دائمًا" +_serverDisconnectedBehavior: + reload: "إعادة تحميل تلقائية" + dialog: "أظهر مربع حوار التحذيرات" +_channel: + create: "أنشئ قناة" + edit: "عدّل قناة" + setBanner: "عيّن اللافتة" + removeBanner: "أزل اللافتة" + featured: "المتداوَلة" + owned: "قنواتي" + following: "متابَع" + usersCount: "{n} منتسب" + notesCount: "{n} ملاحظة" +_menuDisplay: + sideFull: "جانبي" + top: "الأعلى" + hide: "إخفاء" +_wordMute: + muteWords: "الكلمات المحظورة" + muteWordsDescription: "افصل بينهم بمسافة لاستخدام معامل \"و\" أو بسطر لاستخدام معامل + \"أو\"." + muteWordsDescription2: "احصر الكلمات المفتاحية بين بين شرطتين مائلتين لاستخدامها + كتعابير نمطية" + softDescription: "اخف الملاحظات التي تستوف الشروط من الخيط الزمني." + hardDescription: "اخف الملاحظات التي تستوف الشروط من الخيط الزمني.بالإضافة إلى أن + هذه الملاحظات ستبقى مخفية حتى وإن تغيرت الشروط." + soft: "لينة" + hard: "قاسية" + mutedNotes: "الملاحظات المكتومة" +_instanceMute: + instanceMuteDescription: "هذه سيحجب كل ملاحظات الخوادم المحجوبة ومشاركاتها والردود + على تلك الملاحظات حتى وإن كانت من خادم غير محجوب." + instanceMuteDescription2: "مدخلة لكل سطر" + title: "يخفي ملاحظات الخوادم المسرودة." + heading: "قائمة الخوادم المحجوبة" +_theme: + explore: "استكشف قوالب المظهر" + install: "تنصيب قالب" + manage: "إدارة القوالب" + code: "شيفرة القالب" + description: "الوصف" + installed: "تم تنصيب {name}" + installedThemes: "السمات المثبتة" + builtinThemes: "السمات المدمجة" + alreadyInstalled: "هذه السمة مثبتة سلفًا" + invalid: "تنسيق السمة غير صالح" + make: "إنشاء قالب" + addConstant: "أضف ثابتًا" + constant: "ثابت" + defaultValue: "القيمة الافتراضية" + color: "اللون" + key: "مفتاح" + func: "دوال" + funcKind: "نوع الدالة" + argument: "معامل" + alpha: "الشفافية" + inputConstantName: "أدخل اسمًا للثابت" + deleteConstantConfirm: "أمتأكد من حذف الثابت {const}؟" + keys: + accent: "طابع لوني" + bg: "الخلفية" + fg: "النص" + indicator: "المؤشر" + panel: "اللوحة" + shadow: "الظل" + navBg: "خلفية الشريط الجانبي" + navFg: "نص الشريط الجانبي" + navHoverFg: "نص الشريط الجانبي (عند التمرير فوقه)" + link: "رابط" + hashtag: "وسم" + mention: "أشر الى" + renote: "أعد النشر" + divider: "فاصل" + scrollbarHandle: "مقبض شريط التمرير" + scrollbarHandleHover: "مقبض شريط التمرير (عند التمرير فوقه)" + infoWarnBg: "خلفية التحذير" + infoWarnFg: "نص التحذير" + toastBg: "خلفية الإشعارات" + toastFg: "نص الإشعارات" + buttonBg: "خلفية الأزرار" + buttonHoverBg: "خلفية الأزرار (عند التمرير فوقها)" + inputBorder: "حواف حقل الإدخال" + listItemHoverBg: "خلفية عناصر القائمة (عند التمرير فوقها)" + driveFolderBg: "خلفية مجلد قرص التخزين" + messageBg: "خلفية المحادثة" +_sfx: + note: "الملاحظات" + noteMy: "ملاحظتي" + notification: "الإشعارات" + chat: "المحادثة" + chatBg: "المحادثة (الخلفية)" + antenna: "الهوائيات" + channel: "إشعارات القنات" +_ago: + future: "المستقبَل" + justNow: "اللحظة" + secondsAgo: "منذ {n} ثوانٍ" + minutesAgo: "منذ {n} دقائق" + hoursAgo: "منذ {n} ساعة" + daysAgo: "منذ {n} أيام" + weeksAgo: "منذ {n} أسابيع" + monthsAgo: "منذ {n} أشهر" + yearsAgo: "منذ {n} سنوات" +_time: + second: "ثا" + minute: "د" + hour: "سا" + day: "ي" +_tutorial: + title: "How to use Firefish" + step1_1: "Welcome!" + step1_2: "Let's get you set up. You'll be up and running in no time!" + step2_1: "First, please fill out your profile." + step2_2: "Providing some information about who you are will make it easier for others + to tell if they want to see your notes or follow you." + step3_1: "Now time to follow some people!" + step3_2: "Your home and social timelines are based off of who you follow, so try + following a couple accounts to get started.\nClick the plus circle on the top + right of a profile to follow them." + step4_1: "Let's get you out there." + step4_2: "For your first post, some people like to made a {introduction} post or + a simple \"Hello world!\"" + step5_1: "Timelines, timelines everywhere!" + step5_2: "Your instance has {timelines} different timelines enabled." + step5_3: "The Home {icon} timeline is where you can see posts from your followers." + step5_4: "The Local {icon} timeline is where you can see posts from everyone else + on this instance." + step5_5: "The Recommended {icon} timeline is where you can see posts from instances + the admins recommend." + step5_6: "The Social {icon} timeline is where you can see posts from friends of + your followers." + step5_7: "The Global {icon} timeline is where you can see posts from every other + connected instance." + step6_1: "So, what is this place?" + step6_2: "Well, you didn't just join Firefish. You joined a portal to the Fediverse, + an interconnected network of thousands of servers, called \"instances\"." + step6_3: "Each server works in different ways, and not all servers run Firefish. + This one does though! It's a bit complicated, but you'll get the hang of it in + no time." + step6_4: "Now go, explore, and have fun!" +_2fa: + alreadyRegistered: "سجلت سلفًا جهازًا للاستيثاق بعاملين." + registerTOTP: "سجّل جهازًا جديدًا" + registerSecurityKey: "تسجيل مفتاح أمان جديد" + step1: "أولًا ثبّت تطبيق استيثاق على جهازك (مثل {a} و{b})." + step2: "امسح رمز الاستجابة السريعة الموجد على الشاشة." + step3: "أدخل الرمز الموجود في تطبيقك لإكمال التثبيت." + step4: "من هذه اللحظة أثناء ولوجك سيُطلب منك الرمز." +_permissions: + "read:account": "اعرض معلومات حسابك" + "write:account": "تعديل معلومات حسابك" + "read:blocks": "اعرض قائمة المستخدمين المحجوبين" + "write:blocks": "عدّل قائمة المستخدمين المحجوبين" + "read:drive": "تصفح قرص التخزين" + "write:drive": "احذف أو عدّل محتويات قرص التخزين" + "read:favorites": "اعرض المفضلة" + "write:favorites": "عدّل المفضلة" + "read:following": "اعرض معلومات متابَعيك" + "write:following": "تابع أو ألغ متابعة حسابات" + "read:messaging": "اعرض المحادثات" + "write:messaging": "اكتب أو احذف رسائل محادثة" + "read:mutes": "اعرض قائمة المستخدمين المكتومين" + "write:mutes": "عدّل قائمة المستخدمين المكتومين" + "write:notes": "أنشئ أو احذف ملاحظات" + "read:notifications": "اظهر الإشعارات" + "write:notifications": "إدارة الإشعارات" + "read:reactions": "اعرض تفاعلاتك" + "write:reactions": "عدّل تفاعلاتك" + "write:votes": "صوّت" + "read:pages": "اعرض صفحاتك" + "write:pages": "عدّل أو احذف صفحاتك" + "read:page-likes": "يعرض ما أعجبك من ملاحظات في صفحات" + "read:user-groups": "اعرض فِرق المستخدمين" + "write:user-groups": "عدّل أو احذف فِرق المستخدمين" + "read:channels": "طالع قنواتك" + "write:channels": "عدّل القنوات" + "read:gallery": "اعرض المعرض" + "write:gallery": "عدّل المعرض" + "read:gallery-likes": "يعرض ما أعجبك من مشاركات المعرض" +_auth: + shareAccess: "أتريد التفويض لـ \"{name}\" بالوصول لحسابك؟" + shareAccessAsk: "هل تخول لهذا التطبيق الوصول لحسابك؟" + permissionAsk: "يطلب التطبيق الأذون التالية" + pleaseGoBack: "رجاءً عد للتطبيق" + callback: "العودة للتطبيق" + denied: "رُفض الوصول" +_antennaSources: + all: "كل الملاحظات" + homeTimeline: "ملاحظات المستخدمين المتابَعين" + users: "ملاحظات مستخدمين محددين" +_weekday: + sunday: "الأحد" + monday: "الإثنين" + tuesday: "الثلاثاء" + wednesday: "الأربعاء" + thursday: "الخميس" + friday: "الجمعة" + saturday: "السبت" +_widgets: + memo: "ملاحظة لاصقة" + notifications: "الإشعارات" + timeline: "الخيط الزمني" + calendar: "التقويم" + trends: "المتداوَلة" + clock: "الساعة" + rss: "تدفق RSS" + activity: "النشاط" + photos: "الصور" + digitalClock: "ساعة رقمية" + federation: "الفديرالية" + postForm: "أنشئ ملاحظة" + slideshow: "عرض الشرائح" + button: "زر" + onlineUsers: "المتّصلون" + jobQueue: "قائمة الانتظار" + serverMetric: "إحصائيات الخادم" +_cw: + hide: "إخفاء" + show: "عرض المزيد" + chars: "{count} أحرف" + files: "{count} ملفات" +_poll: + noOnlyOneChoice: "تحتاج إلى خيارَين على الأقل" + choiceN: "الخيار {n}" + noMore: "لا يمكنك إضافة خيارات أخرى" + canMultipleVote: "السماح بالإجابات المتعددة" + expiration: "ينتهي استطلاع الرأي في" + infinite: "أبدًا" + at: "تاريخ الإنتهاء" + after: "ينتهي بعد…" + deadlineDate: "تاريخ الانتهاء" + deadlineTime: "سا" + duration: "المدة" + votesCount: "{n} أصوات" + totalVotes: "المجموع {n} أصوات" + vote: "قم بالتصويت" + showResult: "اعرض النتائج" + voted: "تم التصويت" + closed: "انتهى" + remainingDays: "{d} أيام و {h} ساعات متبقية" + remainingHours: "{h} ساعات و {m} دقائق متبقية" + remainingMinutes: "{m} دقائق و {s} ثوانٍ متبقية" + remainingSeconds: "{s} ثوانٍ متبقية" +_visibility: + public: "علني" + publicDescription: "ستكون ملاحظتك مرئية لكل المستخدمين" + home: "الرئيسي" + homeDescription: "انشر في الخيط الزمني الرئيسي فقط" + followers: "المتابِعون" + followersDescription: "اجعلها مرئية لمتابِعيك فقط" + specified: "مباشرة" + specifiedDescription: "اجعلها مرئية لمستخدمين محددين" + localOnly: "المحلي فقط" + localOnlyDescription: "ليس مرئيًا للمستخدمين البِعاد" +_postForm: + replyPlaceholder: "رد على هذه الملاحظة…" + quotePlaceholder: "اقتبس هذه الملاحظة…" + channelPlaceholder: "انشر في قناة..." + _placeholders: + a: "ما الذي تنوي فعله؟" + b: "ماذا يحدث حولك ؟" + c: "ما الذي تفكر فيه؟" + d: "ما الذي تريد قوله؟" + e: "أكتب..." + f: "بانتظارك لتكتب..." +_profile: + name: "الإسم" + username: "اسم المستخدم" + description: "السيرة" + youCanIncludeHashtags: "يمكنك أيضًا إضافة وسوم إلى سيرتك التعريفية." + metadata: "معلومات إضافية" + metadataEdit: "عدّل المعلومات الإضافية" + metadataLabel: "التسمية" + metadataContent: "المحتوى" + changeAvatar: "غيّر الصورة الرمزية" + changeBanner: "غيّر اللافتة" +_exportOrImport: + allNotes: "كل الملاحظات" + followingList: "المتابَعون" + muteList: "المستخدمون المكتومون" + blockingList: "المستخدمون المحجوبون" + userLists: "القوائم" + excludeMutingUsers: "استثن الحسابات المكتومة" + excludeInactiveUsers: "استثن المستخدمين الخاملين" +_charts: + federation: "الفديرالية" + apRequest: "الطلبات" + usersIncDec: "تباين عدد المستخدمين" + usersTotal: "مجموع عدد المستخدمين والمستخدمات" + activeUsers: "المستخدمون النشطون" + notesIncDec: "تباين عدد الملاحظات" + localNotesIncDec: "تباين عدد الملاحظات المحلية" + remoteNotesIncDec: "تباين عدد الملاحظات البعيدة" + notesTotal: "إجمالي الملاحظات" + filesIncDec: "تباين عدد الملفات" + filesTotal: "العدد الإجمالي للملفات" +_instanceCharts: + requests: "الطلبات" + users: "تباين عدد المستخدمين" + usersTotal: "تباين عدد المستخدمين" + notes: "تباين عدد الملاحظات" + notesTotal: "تباين عدد الملاحظات" + ff: "تباين عدد حسابات المتابَعة/المتابِعة" + ffTotal: "تباين عدد حسابات المتابَعة/المتابِعة" + files: "تباين عدد الملفات" + filesTotal: "تباين عدد الملفات" +_timelines: + home: "الرئيسي" + local: "المحلي" + social: "الاجتماعي" + global: "الشامل" +_pages: + newPage: "أنشئ صفحة جديدة" + editPage: "عدّل الصفحة" + readPage: "نُشّط عرض المصدر" + created: "نجح إنشاء الصفحة" + updated: "نجح تعديل الصفحة" + deleted: "نجح حذف الصفحة" + pageSetting: "إعدادات الصفحة" + nameAlreadyExists: "رابط الصفحة موجود مسبقًا" + invalidNameTitle: "رابط الصفحة ليس صالحًا" + invalidNameText: "تأكد أن عنوان الصفحة ليس فارغًا" + editThisPage: "عدّل هذه الصفحة" + viewSource: "اظهر المصدر" + viewPage: "اعرض صفحاتك" + like: "أعجبني" + unlike: "أزل الإعجاب" + my: "صفحاتي" + liked: "الصفحات المُعجب بها" + featured: "الأكثر شعبية" + contents: "المحتوى" + variables: "متغيّرات" + title: "العنوان" + url: "رابط الصفحة" + summary: "ملخص الصفحة" + alignCenter: "توسيط العناصر" + hideTitleWhenPinned: "اخف عنوان الصفحة عند تدبيسها في ملف الشخصي" + font: "الخط" + fontSerif: "Serif" + fontSansSerif: "Sans Serif" + eyeCatchingImageSet: "عيّن صورة مصغّرة" + eyeCatchingImageRemove: "احذف صورة مصغّرة" + chooseBlock: "إضافة كتلة" + selectType: "اختر النوع" + enterVariableName: "أدخل اسم المتغيّر" + variableNameIsAlreadyUsed: "هذا الاسم محجوز" + contentBlocks: "المحتوى" + inputBlocks: "مُدخل" + specialBlocks: "خاص" + blocks: + text: "نص" + textarea: "حقل نصي" + section: "قسم" + image: "الصور" + button: "زرّ" + _if: + variable: "متغيّر" + post: "أنشئ ملاحظة" + _post: + text: "المحتوى" + textInput: "مُدخل نصي" + _textInput: + name: "اسم المتغير" + text: "العنوان" + default: "القيمة الافتراضية" + textareaInput: "مدخل نصي متعدد الأسطر" + _textareaInput: + name: "اسم المتغير" + text: "العنوان" + default: "القيمة الافتراضية" + numberInput: "مُدخل رقمي" + _numberInput: + name: "اسم المتغير" + text: "العنوان" + default: "القيمة الافتراضية" + _canvas: + width: "العُرض" + height: "الإرتفاع" + note: "ملاحظة مضمّنة" + _note: + id: "معرّف الملاحظة" + idDescription: "كبديل يمكنك إدخال رابك الملاحظة هنا" + detailed: "عرض مفصّل" + switch: "بدّل" + _switch: + name: "اسم المتغير" + text: "العنوان" + default: "القيمة الافتراضية" + counter: "العداد" + _counter: + name: "اسم المتغير" + text: "العنوان" + inc: "زِد" + _button: + text: "العنوان" + colored: "ملوّن" + action: "الإجراء عند ضغط الزّر" + _action: + dialog: "أظهر مربع حوار" + _dialog: + content: "المحتوى" + resetRandom: "صفِّر البذرة" + pushEvent: "أرسل حدثًا" + _pushEvent: + event: "اسم الحدث" + message: "إظهار رسالة عند التفعيل" + variable: "أرسل المتغيّر" + no-variable: "لا شيء" + _callAiScript: + functionName: "اسم الدالة" + radioButton: "الخيار " + _radioButton: + name: "اسم المتغير" + title: "العنوان" + values: "قائمة الخيارات (كل خيار في سطر لوحده)" + default: "القيمة الافتراضية" + script: + categories: + logical: "عمليّة منطقيّة" + operation: "حساب" + comparison: "مقارنة" + random: "عشوائي" + value: "القيم" + fn: "دوال" + text: "إجراءات على النصوص" + convert: "تحويل" + list: "القوائم" + blocks: + text: "نص" + textList: "قائمة نصية" + _textList: + info: "اجعل كل مدخل في سطر لوحده" + strLen: "طول النص" + _strLen: + arg1: "نص" + strPick: "استخرج محرفًا" + _strPick: + arg1: "نص" + arg2: "موضع المحرف" + strReplace: "استبدال النّص" + _strReplace: + arg1: "نص" + arg2: "استُبدِل بـ" + arg3: "استُبدِل بـ" + strReverse: "اقلب النص" + _strReverse: + arg1: "نص" + _join: + arg1: "القوائم" + arg2: "فاصل" + add: "إضافة" + _add: + arg1: "أ" + arg2: "ب" + subtract: "اطرح" + _subtract: + arg1: "أ" + arg2: "ب" + multiply: "اضرب" + _multiply: + arg1: "أ" + arg2: "ب" + divide: "اقسم" + _divide: + arg1: "أ" + arg2: "ب" + mod: "الباقي" + _mod: + arg1: "أ" + arg2: "ب" + round: "تقريب عدد عشري" + _round: + arg1: "رقم" + eq: "أ و ب متساويان" + _eq: + arg1: "أ" + arg2: "ب" + notEq: "أ و ب مختلفان" + _notEq: + arg1: "أ" + arg2: "ب" + and: "أ و ب" + _and: + arg1: "أ" + arg2: "ب" + or: "أ أو ب" + _or: + arg1: "أ" + arg2: "ب" + lt: "أ أصغر من ب" + _lt: + arg1: "أ" + arg2: "ب" + gt: "أ أكبر من ب" + _gt: + arg1: "أ" + arg2: "ب" + ltEq: "أ أصغر من أو يساوي ب" + _ltEq: + arg1: "أ" + arg2: "ب" + gtEq: "أ أكبر من أو يساوي ب" + _gtEq: + arg1: "أ" + arg2: "ب" + if: "فرع" + random: "عشوائي" + rannum: "رقم عشوائي" + _rannum: + arg1: "أدنى قيمة" + arg2: "أقصى قيمة" + randomPick: "اختر عشوائيًا من القائمة" + _randomPick: + arg1: "القوائم" + dailyRandom: "عشوائي (يتغير مرة يوميًا لكل مستخدم)" + dailyRannum: "رقم عشوائي (يتغير مرة يوميًا لكل مستخدم)" + _dailyRannum: + arg1: "أدنى قيمة" + arg2: "أقصى قيمة" + dailyRandomPick: "اختيار عشوائي من قائمة (يتغير مرة يوميًا لكل مستخدم)" + _dailyRandomPick: + arg1: "القوائم" + seedRandom: "عشوائي (عبر بذرة)" + _seedRandom: + arg1: "البذرة" + seedRannum: "رقم عشوائي (عبر بذرة)" + _seedRannum: + arg1: "البذرة" + arg2: "أدنى قيمة" + arg3: "أقصى قيمة" + seedRandomPick: "اختيار عشوائي من القائمة (عبر بذرة)" + _seedRandomPick: + arg1: "البذرة" + arg2: "القوائم" + DRPWPM: "اختيار عشوائي من قائمة الاحتمالات (تتغير مرة يوميًا لكل مستخدم)" + _DRPWPM: + arg1: "قائمة نصية" + pick: "اختر من القائمة" + _pick: + arg1: "القوائم" + arg2: "الموضع" + listLen: "طول القائمة" + _listLen: + arg1: "القوائم" + number: "رقم" + stringToNumber: "حوّل نصًا إلى رقم" + _stringToNumber: + arg1: "نص" + numberToString: "حوّل رقمًا إلى نص" + _numberToString: + arg1: "رقم" + _splitStrByLine: + arg1: "نص" + ref: "متغيّر" + aiScriptVar: "متغيّر AiScript" + fn: "دالة" + _fn: + slots: "خانات" + arg1: "المُخرج" + for: "حلقة تكرار" + _for: + arg1: "عدد مرات التكرار" + arg2: "الإجراء" + typeError: "الخانة {slot} تقبل \"{expect}\" لكن القيمة المعطاة هي \"{actual}\"\ + !" + thereIsEmptySlot: "الخانة {slot} فارغة!" + types: + string: "نص" + number: "رقم" + array: "القوائم" + stringArray: "قائمة نصية" + emptySlot: "خانة فارغة" + enviromentVariables: "متغيرات البيئة" + pageVariables: "متغيرات الصفحة" + argVariables: "خانة إدخال" +_relayStatus: + requesting: "مُعلّق" + accepted: "مقبول" + rejected: "مرفوض" +_notification: + fileUploaded: "نجح رفع الملف" + youGotMention: "{name} أشار إليك" + youGotReply: "ردّ عليك {name}" + youGotQuote: "اقتبس منك {name}" + youRenoted: "إعادت نشر من {name}" + youGotPoll: "شارك {name} في استطلاع الرأي" + youGotMessagingMessageFromUser: "لقد تلقيت رسالة مِن {name}" + youGotMessagingMessageFromGroup: "لقد أرسِلَت رسالة إلى الفريق {name}" + youWereFollowed: "يتابعك" + youReceivedFollowRequest: "تلقيتَ طلب متابعة" + yourFollowRequestAccepted: "قُبل طلب المتابعة" + youWereInvitedToGroup: "دُعيت إلى فريقٍ" + pollEnded: "ظهرت نتائج الاستطلاع" + _types: + all: "الكل" + follow: "متابِعون جدد" + mention: "الإشارات" + reply: "الردود" + renote: "أعد النشر" + quote: "الاقتباسات" + reaction: "التفاعلات" + pollVote: "مصوِت شارك في الاستطلاع" + receiveFollowRequest: "طلبات المتابعة المتلقاة" + followRequestAccepted: "طلبات المتابعة المقبولة" + groupInvited: "دعوات الفريق" + app: "إشعارات التطبيقات المرتبطة" + _actions: + followBack: "تابعك بالمثل" + reply: "رد" + renote: "أعد النشر" +_deck: + alwaysShowMainColumn: "أظهر العمود الرئيسي دائمًا" + columnAlign: "حاذِ الأعمدة" + addColumn: "أضف عمودًا" + swapLeft: "حرّك لليسار" + swapRight: "حرّك لليمين" + swapUp: "حرّك لأعلى" + swapDown: "حرّك لأسفل" + profile: "الملف الشخصي" + _columns: + main: "الرئيسي" + widgets: "الودجات" + notifications: "الإشعارات" + tl: "الخيط الزمني" + antenna: "الهوائيات" + list: "القوائم" + mentions: "الإشارات" + direct: "مباشرة" diff --git a/locales/bg-BG.yml b/locales/bg-BG.yml new file mode 100644 index 0000000..03009bf --- /dev/null +++ b/locales/bg-BG.yml @@ -0,0 +1,958 @@ +_lang_: Български +cancel: Отказ +noNotes: Няма публикации +settings: Настройки +headlineFirefish: Децентрализирана социална медийна платформа с отворен код, която + е свободна завинаги! 🚀 +notifications: Известия +forgotPassword: Забравена парола +uploading: Качване... +addInstance: Добавяне на сървър +favorite: Добавяне към отметките +delete: Изтриване +unpin: Откачане от профила +copyLink: Копиране на връзката +pin: Закачане в профила +deleted: Изтрито +deleteAndEditConfirm: Сигурни ли сте, че искате да изтриете тази публикация и да я + редактирате? Ще загубите всички реакции, подсилвания и отговори към нея. +copyUsername: Копиране на потребителското име +searchUser: Търсене на потребител +reply: Отговор +showMore: Показване на повече +loadMore: Зареди още +followRequestAccepted: Заявката за последване е приета +importAndExport: Импорт/експорт на данни +import: Импортиране +download: Изтегляне +export: Експортиране +files: Файлове +unblock: Отблокиране +_sensitiveMediaDetection: + setSensitiveFlagAutomatically: Маркиране като деликатно +searchWith: 'Търсене: {q}' +smtpUser: Потребителско име +notificationType: Тип известие +searchResult: Резултати от търсенето +markAsReadAllNotifications: Маркиране на всички известия като прочетени +settingGuide: Препоръчителни настройки +smtpPass: Парола +newPasswordIs: Новата парола е "{password}" +members: Членове +help: Помощ +hide: Скриване +group: Група +groups: Групи +incorrectPassword: Грешна парола. +leaveGroup: Напускане на групата +numberOfColumn: Брой колони +passwordLessLogin: Влизане без парола +newPasswordRetype: Повтори новата парола +saveAs: Запазване като... +resetPassword: Нулиране на паролата +saveConfirm: Запазване на промените? +inputNewFolderName: Въведи ново име на папка +upload: Качване +retypedNotMatch: Въвежданията не съвпадат. +_ago: + weeksAgo: пр. {n}сед + secondsAgo: пр. {n}сек + hoursAgo: пр. {n}ч + minutesAgo: пр. {n}мин + daysAgo: пр. {n}д + monthsAgo: пр. {n}мес + yearsAgo: пр. {n}г + future: Бъдеще + justNow: Току-що +folderName: Име на папка +renameFile: Преименуване на файла +_widgets: + activity: Дейност + notifications: Известия + timeline: Хронология + clock: Часовник + trends: Актуални + photos: Снимки + unixClock: UNIX часовник + calendar: Календар + digitalClock: Дигитален часовник + button: Бутон + slideshow: Слайдшоу + _userList: + chooseList: Избор на списък +instanceSecurity: Сигурност на сървъра +uploadFolder: Папка по подразбиране за качвания +instanceInfo: Информация за сървъра +statistics: Статистика +fileName: Име на файл +selectFile: Избор на файл +editProfile: Редактиране на профила +instances: Сървъри +selectUser: Избор на потребител +createNew: Създаване на ново +blockThisInstance: Блокиране на този сървър +_profile: + metadata: Допълнителна информация + username: Потребителско име + name: Име + description: Биография + metadataContent: Съдържание + metadataLabel: Етикет + metadataEdit: Редактиране на допълнителната информация + changeAvatar: Промяна на профилната снимка + youCanIncludeHashtags: Можеш също да включиш хаштагове в биографията си. + changeBanner: Промяна на банера +addAccount: Добавяне на акаунт +followRequestPending: Заявка за последване в изчакване +signinHistory: История на вписванията +or: Или +noUsers: Няма потребители +notes: Публикации +newNoteRecived: Има нови публикации +note: Публикация +instanceFollowing: Последвани на сървъра +_filters: + followersOnly: Само последователи + notesAfter: Публикации след + fromDomain: От домейн + fromUser: От потребител + withFile: С файл + notesBefore: Публикации преди + followingOnly: Само последвани +_notification: + _types: + follow: Нови последователи + mention: Споменавания + reaction: Реакции + reply: Отговора + all: Всички + quote: Цитирания + pollEnded: Приключване на анкети + app: Известия от свързани приложения + renote: Подсилвания + pollVote: Гласувания в анкети + receiveFollowRequest: Получени заявки за следване + followRequestAccepted: Приети заявки за следване + groupInvited: Покани в групи + youGotReply: '{name} ти отговори' + fileUploaded: Файлът е качен успешно + youWereFollowed: те последва + _actions: + reply: Отговор + renote: Подсилвания + youGotQuote: '{name} те цитира' + youGotMention: '{name} те спомена' + youGotMessagingMessageFromUser: '{name} ти изпрати чат съобщение' +_channel: + notesCount: '{n} Публикации' + nameOnly: Само име + nameAndDescription: Име и описание + create: Създаване на канал +unfollow: Отследване +noLists: Нямаш никакви списъци +markAsReadAllUnreadNotes: Маркиране на всички публикации като прочетени +markAsReadAllTalkMessages: Маркиране на всички съобщения като прочетени +_time: + second: Секунди + hour: Часа + day: Дни + minute: Минути +create: Създаване +lists: Списъци +reportAbuseOf: Докладване на {name} +reporter: Докладчик +abuseReports: Доклади +logoImageUrl: URL на лого изображение +reportAbuse: Докладване +latestRequestReceivedAt: Последно получена заявка +location: Местоположение +keepOriginalUploading: Запазване на оригиналното изображение +renotesCount: Брой изпратени подсилвания +license: Лиценз +lastUsedDate: Последно използвано на +rename: Преименуване +customEmojis: Персон. емоджита +emoji: Емоджи +_aboutFirefish: + translation: Преведи Firefish + source: Програмен код + contributors: Основни сътрудници + allContributors: Всички сътрудници +translatedFrom: Преведено от {x} +i18nInfo: Firefish се превежда на различни езици от доброволци. Можете да помогнете + на адрес {link}. +image: Изображение +recipient: Получател(и) +notesAndReplies: Публикации и отговори +noSuchUser: Потребителят не е намерен +pinnedPages: Закачени страници +pinLimitExceeded: Не може да закачаш повече публикации +flagShowTimelineReplies: Показване на отговори в хронологията +followersCount: Брой последователи +receivedReactionsCount: Брой получени реакции +federation: Федерация +today: Днес +yearX: '{year}' +registeredAt: Регистриран на +monthX: '{month}' +dayX: '{day}' +registration: Регистрация +popularUsers: Популярни потребители +details: Подробности +tenMinutes: 10 минути +oneDay: Един ден +file: Файл +oneHour: Един час +video: Видео +createNewClip: Създаване на нова подборка +clips: Подборки +active: Активен +menu: Меню +itsOff: Изключено +remindMeLater: Може би по-късно +removed: Успешно изтриване +deleteAllFiles: Изтриване на всички файлове +deletedNote: Изтрита публикация +deleteConfirm: Потвърждавате ли изтриването? +hasChildFilesOrFolders: Тъй като тази папка не е празна, тя не може да бъде изтрита. +nsfw: Деликатно +default: По подразбиране +_theme: + defaultValue: Стойност по подразбиране + keys: + mention: Споменаване + renote: Подсилване + link: Връзка + hashtag: Хаштаг + fg: Текст + color: Цвят + explore: Разглеждане на темите + description: Описание + manage: Управление на темите + install: Инсталиране на тема + code: Код на темата + builtinThemes: Вградени теми + func: Функции + key: Ключ + argument: Аргумент + installedThemes: Инсталирани теми + constant: Константа + addConstant: Добавяне на константа + make: Направа на тема +_pages: + script: + blocks: + _dailyRannum: + arg1: Минимална стойност + arg2: Максимална стойност + _join: + arg1: Списъци + add: Добави + _rannum: + arg1: Минимална стойност + arg2: Максимална стойност + _seedRannum: + arg3: Максимална стойност + arg2: Минимална стойност + _strPick: + arg1: Текст + _if: + arg3: Иначе + arg2: Тогава + arg1: Ако + _randomPick: + arg1: Списък + fn: Функция + _strLen: + arg1: Текст + _strReplace: + arg1: Текст + _strReverse: + arg1: Текст + _stringToNumber: + arg1: Текст + text: Текст + _splitStrByLine: + arg1: Текст + _listLen: + arg1: Списък + _dailyRandomPick: + arg1: Списък + _seedRandomPick: + arg2: Списък + _pick: + arg1: Списък + categories: + value: Стойности + list: Списъци + fn: Функции + types: + string: Текст + array: Списък + blocks: + _textInput: + default: Стойност по подразбиране + text: Заглавие + _switch: + default: Стойност по подразбиране + text: Заглавие + _textareaInput: + default: Стойност по подразбиране + text: Заглавие + _numberInput: + default: Стойност по подразбиране + text: Заглавие + _radioButton: + default: Стойност по подразбиране + title: Заглавие + _if: + variable: Променлива + _counter: + text: Заглавие + inc: Стъпка + button: Бутон + if: Ако + image: Изображения + text: Текст + _post: + text: Съдържание + _button: + _action: + _dialog: + content: Съдържание + text: Заглавие + created: Страницата е създадена успешно + editPage: Редактиране на тази страница + editThisPage: Редактиране на тази страница + updated: Страницата е редактирана успешно + featured: Популярни + liked: Харесани страници + contentBlocks: Съдържание + contents: Съдържание + deleted: Страницата е изтрита успешно + newPage: Създаване на нова страница + like: Харесване + font: Шрифт + title: Заглавие + my: Моите страници + pageSetting: Настройки на страницата + url: Адрес на страницата + summary: Кратко обобщение + alignCenter: Центриране на елементите + variables: Променливи +_deck: + _columns: + notifications: Известия + mentions: Споменавания + tl: Хронология + direct: Директни съобщения + list: Списък + antenna: Антена + addColumn: Добавяне на колона +_mfm: + mention: Споменаване + search: Търсене + link: Връзка + hashtag: Хаштаг + url: URL адрес + font: Шрифт +_messaging: + groups: Групи + dms: Лични +apps: Приложения +introFirefish: Добре дошли! Firefish е децентрализирана социална медийна платформа + с отворен код, която е свободна завинаги! 🚀 +monthAndDay: '{day}/{month}' +search: Търсене +searchPlaceholder: Търсене във Firefish +username: Потребителско име +password: Парола +fetchingAsApObject: Извличане от Федивселената +ok: Добре +gotIt: Разбрах! +noThankYou: Не, благодаря +enterUsername: Въведи потребителско име +renotedBy: Подсилено от {user} +noNotifications: Няма известия +instance: Сървър +basicSettings: Основни настройки +otherSettings: Други настройки +openInWindow: Отваряне в прозорец +profile: Профил +timeline: Хронология +noAccountDescription: Този потребител все още не е написал своята биография. +login: Вход +loggingIn: Вписване +logout: Изход +signup: Регистрация +save: Запазване +users: Потребители +addUser: Добавяне на потребител +favorites: Отметки +unfavorite: Премахване от отметките +favorited: Добавено към отметките. +alreadyFavorited: Вече е добавено към отметките. +cantFavorite: Неуспешно добавяне към отметките. +copyContent: Копиране на съдържанието +deleteAndEdit: Изтриване и редактиране +editNote: Редактиране на публикацията +edited: Редактирано на {date} {time} +addToList: Добавяне към списък +sendMessage: Изпращане на съобщение +jumpToPrevious: Премини към предишно +newer: по-ново +older: по-старо +showLess: Показване на по-малко +youGotNewFollower: те последва +receiveFollowRequest: Заявка за последване получена +mention: Споменаване +mentions: Споменавания +directNotes: Директни съобщения +cw: Предупреждение за съдържание +followers: Последователи +following: Последвани +followsYou: Следва те +createList: Създаване на списък +error: Грешка +manageLists: Управление на списъците +retry: Повторен опит +follow: Последване +followRequest: Заявка за последване +followRequests: Заявки за последване +defaultNoteVisibility: Видимост по подразбиране +unrenote: Отмяна на подсилването +renoted: Подсилено. +cantRenote: Тази публикация не може да бъде подсилена. +renote: Подсилване +enterEmoji: Въведи емоджи +sensitive: Деликатно +add: Добавяне +pinned: Закачено в профила +quote: Цитат +pinnedNote: Закачена публикация +cantReRenote: Подсилване не може да бъде подсилено. +clickToShow: Щракни за показване +you: Ти +reaction: Реакции +removeReaction: Премахване на реакцията +enterFileName: Въведи име на файл +unmarkAsSensitive: Отмаркиране като деликатно +markAsSensitive: Маркиране като деликатно +block: Блокиране +emojis: Емоджита +addEmoji: Добавяне +emojiName: Име на емоджи +emojiUrl: URL адрес на емоджи +loginFailed: Неуспешно вписване +flagAsCat: Котка ли си? 😺 +flagSpeakAsCat: Говорене като котка +youHaveNoLists: Нямаш никакви списъци +selectInstance: Избор на сървър +annotation: Коментари +latestRequestSentAt: Последно изпратена заявка +stopActivityDelivery: Спиране на изпращането на дейности +version: Версия +clearCachedFiles: Изчистване на кеша +noInstances: Няма сървъри +federating: Федериране +defaultValueIs: 'По подразбиране: {value}' +noCustomEmojis: Няма емоджи +changePassword: Промяна на паролата +currentPassword: Текуща парола +instanceUsers: Потребители на този сървър +security: Сигурност +instanceFollowers: Последователи на сървъра +newPassword: Нова парола +more: Още! +remove: Изтриване +saved: Запазени +messaging: Чат +birthday: Рожден ден +images: Изображения +activity: Дейност +createFolder: Създаване на папка +renameFolder: Преименуване на тази папка +selectFolders: Избор на папки +selectFolder: Избор на папка +selectFiles: Избор на файлове +addFile: Добавяне на файл +inputNewFileName: Въведи ново име на файл +deleteFolder: Изтриване на тази папка +emptyFolder: Тази папка е празна +copyUrl: Копиране на URL адреса +pages: Страници +thisYear: Година +thisMonth: Месец +pinnedNotes: Закачени публикации +pinnedUsers: Закачени потребители +hcaptcha: hCaptcha +recaptcha: reCAPTCHA +name: Име +enableRecaptcha: Включване на reCAPTCHA +enableHcaptcha: Включване на hCaptcha +exploreUsersCount: Има {count} потребители +userList: Списъци +moderator: Модератор +moderation: Модерация +administrator: Администратор +lastUsed: Последно използвано +unregister: Отрегистрация +share: Споделяне +notFound: Не е намерено +inputMessageHere: Въведи съобщение тук +createGroup: Създаване на група +close: Затваряне +next: Следващо +title: Заглавие +messagingWithGroup: Групов чат +enable: Включване +retype: Въведи отново +noteOf: Публикация от {user} +quoteAttached: Цитат +newMessageExists: Има нови съобщения +noMessagesYet: Все още няма съобщения +language: Език +createAccount: Създаване на акаунт +existingAccount: Съществуващ акаунт +deleteAll: Изтриване на всички +enableAll: Включване на всички +disableAll: Изключване на всички +copy: Копиране +reporteeOrigin: Произход на докладвания +reporterOrigin: Произход на докладчика +clip: Подборка +unclip: Премахни от подборка +followingCount: Брой последвани акаунти +renotedCount: Брой получени подсилвания +notesCount: Брой публикации +repliesCount: Брой изпратени отговори +repliedCount: Брой получени отговори +sentReactionsCount: Брой изпратени реакции +yes: Да +no: Не +alwaysMarkSensitive: Маркиране като деликатно по подразбиране +noteFavoritesCount: Брой публикации с отметки +left: Ляво +nNotes: '{n} Публикации' +value: Стойност +createdAt: Създадено на +invalidValue: Невалидна стойност. +currentVersion: Настояща версия +latestVersion: Най-нова версия +typingUsers: '{users} пише' +user: Потребител +enabled: Включено +disabled: Изключено +whatIsNew: Показване на промените +translate: Превеждане +itsOn: Включено +oneWeek: Една седмица +audio: Звук +removeQuote: Премахване на цитата +_sfx: + notification: Известия + chat: Чат + antenna: Антени + note: Нова публикация +_permissions: + "read:favorites": Преглед на списъка ви с отметки + "write:favorites": Редактиране на списъка ви с отметки +_visibility: + followers: Последователи + specified: Директна + localOnly: Само местни + public: Общодостъпна + publicDescription: Публикацията ще бъде видима във всички публични хронологии + home: Скрита + localOnlyDescription: Не е видима за отдалечени потребители + specifiedDescription: Видима само за определени потребители + followersDescription: Видима само за последователите ти и споменатите потребители + homeDescription: Публикуване само в началната хронология +explore: Разглеждане +theme: Теми +wallpaper: Тапет +setWallpaper: Задаване на тапет +removeWallpaper: Премахване на тапета +themeForLightMode: Тема за използване в светъл режим +themeForDarkMode: Тема за използване в тъмен режим +light: Светла +dark: Тъмна +darkThemes: Тъмни теми +invitations: Покани +invitationCode: Код на поканата +checking: Проверка... +available: Свободно +unavailable: Не е свободно +tooShort: Твърде кратко +tooLong: Твърде дълго +weakPassword: Слаба парола +veryStrongPassword: Силна парола +passwordMatched: Съвпада +passwordNotMatched: Не съвпада +signinWith: Вход с {x} +aboutX: Относно {x} +openInNewTab: Отваряне в нов раздел +_tutorial: + step2_1: Първо, моля, попълнете своя профил. + step2_2: Предоставянето на известна информация за това кой сте вие ще улесни другите + да разберат дали искат да видят вашите публикации или да ви следват. + title: Как се използва Firefish + step1_1: Добре дошли! + step5_1: Хронологии, хронологии навсякъде! + step3_1: Сега е време да последвате няколко хора! + step1_2: Нека да ви настроим. Ще бъдете готови за нула време! + step5_3: Началната {icon} хронология е мястото, където можете да видите публикации + от акаунтите, които следвате. + step6_1: И така, какво е това място? + step5_7: Глобалната {icon} хронология е мястото, където можете да видите публикации + от всеки друг свързан сървър. + step4_2: За първата си публикация някои хора обичат да правят публикация {introduction} + или просто „Здравей свят!“ + step5_2: Вашият сървър има активирани {timelines} различни хронологии. + step5_4: Местната {icon} хронология е мястото, където можете да видите публикации + от всички останали на този сървър. + step5_5: Социалната {icon} хронология е комбинация от Началната и Местната хронология. + step5_6: Препоръчаната {icon} хронология е мястото, където можете да видите публикации + от сървъри, препоръчани от администраторите. + step6_4: Сега отидете, изследвайте и се забавлявайте! + step6_3: Всеки сървър работи по различни начини и не всички сървъри работят с Firefish. + Този обаче го прави! Малко е сложно, но ще разберете за нула време. +openImageInNewTab: Отваряне на изображенията в нов раздел +showOnRemote: Отваряне на първообразната страница +lightThemes: Светли теми +syncDeviceDarkMode: Синхронизиране на тъмния режим с настройките на устройството +text: Текст +normalPassword: Средна парола +usernameInvalidFormat: Можете да използвате главни и малки букви, цифри и долни черти. +signinFailed: Неуспешно вписване. Въведените потребителско име или парола са неправилни. +signinRequired: Моля, регистрирайте се или се впишете, преди да продължите +start: Започване +confirm: Потвърждаване +failedToUpload: Неуспешно качване +_preferencesBackups: + cannotSave: Неуспешно запазване + cannotLoad: Неуспешно зареждане + saveNew: Запазване на ново резервно копие + inputName: Моля, въведи име за това резервно копие + deleteConfirm: Изтриване на резервното копие {name}? + loadFile: Зареждане от файл + save: Запазване на промените + apply: Прилагане към това устройство + list: Създадени резервни копия + saveConfirm: Запазване на резервното копие като {name}? + createdAt: 'Създадено на: {date} {time}' + updatedAt: 'Обновено на: {date} {time}' +editWidgetsExit: Готово +done: Готово +emailRequiredForSignup: Изискване на адрес за ел. поща за регистриране +preview: Преглед +privacy: Поверителност +about: Относно +aboutFirefish: Относно Firefish +author: Автор +software: Софтуер +category: Категория +renotes: Подсилвания +quotes: Цитирания +reactions: Реакции +attachCancel: Премахване на прикачен файл +mute: Заглушаване +unmute: Отмяна на заглушаването +selectAntenna: Избор на антена +selectList: Избор на списък +editWidgets: Редактиране на джаджите +flagAsCatDescription: Ще получиш котешки уши и ще говориш като котка! +host: Хост +perHour: За час +perDay: За ден +operations: Операции +mutedUsers: Заглушени потребители +imageUrl: URL адрес на изображение +announcements: Оповестявания +removeAreYouSure: Сигурни ли сте, че искате да премахнете "{x}"? +fromUrl: От URL адрес +manageGroups: Управление на групите +nUsersRead: прочетено от {n} +home: Начало +registeredDate: Присъединяване +avatar: Профилна снимка +watch: Наблюдаване +antennas: Антени +manageAntennas: Управление на антените +popularTags: Популярни тагове +cacheClear: Изчистване на кеша +groupName: Име на групата +local: Местни +total: Общо +remote: Отдалечени +accountSettings: Настройки на акаунта +showInPage: Показване в страницата +install: Инсталиране +uninstall: Деинсталиране +invisibleNote: Невидима публикация +poll: Анкета +useCw: Скриване на съдържание +smtpHost: Хост +preferencesBackups: Резервни копия +emailServer: Ел. пощенски сървър +overview: Обзор +reloadToApplySetting: Тази настройка ще се приложи само след презареждане на страницата. + Презареждане сега? +markAllAsRead: Маркиране на всички като прочетени +addDescription: Добавяне на описание +userInfo: Информация за потребителя +switchAccount: Превключване на акаунт +gallery: Галерия +priority: Приоритет +unread: Непрочетени +filter: Филтриране +manageAccounts: Управление на акаунтите +deleteAccount: Изтриване на акаунта +fast: Бърза +remoteOnly: Само отдалечени +move: Преместване +navbar: Навигационна лента +moveTo: Преместване на текущия акаунт в нов акаунт +moveAccount: Преместване на акаунта! +_gallery: + my: Моята галерия + like: Харесване + liked: Харесани публикации +_registry: + keys: Ключове + key: Ключ + createKey: Създаване на ключ + domain: Домейн +_weekday: + tuesday: Вторник + wednesday: Сряда + thursday: Четвъртък + saturday: Събота + monday: Понеделник + friday: Петък + sunday: Неделя +_antennaSources: + users: Публикации от конкретни потребители + userGroup: Публикации от потребители в конкретна група + instances: Публикации от всички потребители на сървър + all: Всички публикации + homeTimeline: Публикации от последвани потребители + userList: Публикации от конкретен списък с потребители +_poll: + choiceN: Избор {n} + infinite: Никога + totalVotes: '{n} гласа общо' + votesCount: '{n} гласа' + expiration: Приключване на анкетата +_timelines: + local: Местни + home: Начало + global: Глобални + recommended: Препоръчани + social: Социални +_feeds: + copyFeed: Копиране на емисия + rss: RSS + atom: Atom + jsonFeed: JSON feed +general: Общи +metadata: Метаданни +disk: Диск +featured: Препоръчано +yearsOld: на {age} години +reload: Опресняване +invites: Покани +blockedInstances: Блокирани сървъри +inMb: В мегабайти +unfollowConfirm: Сигурни ли сте, че искате да прекратите следването на {name}? +somethingHappened: Възникна грешка +pageLoadError: Възникна грешка при зареждането на страницата. +enterListName: Въведи име за списъка +shareWithNote: Споделяне чрез публикация +flagAsBot: Маркиране на този акаунт като автоматизиран +selectChannel: Избор на канал +all: Всичко +muteAndBlock: Заглушени и блокирани +blockedUsers: Блокирани потребители +noteDeleteConfirm: Сигурни ли сте, че искате да изтриете тази публикация? +hiddenTags: Скрити хаштагове +deleteAreYouSure: Сигурни ли сте, че искате да изтриете "{x}"? +startMessaging: Започване на нов чат +uploadFromUrl: Качване от URL адрес +instanceName: Име на сървъра +instanceDescription: Описание на сървъра +accept: Приемане +enableLocalTimeline: Включване на местната хронология +enableGlobalTimeline: Включване на глобалната хронология +removeMember: Премахване на член +isAdmin: Администратор +isModerator: Модератор +_menuDisplay: + hide: Скриване +_exportOrImport: + allNotes: Всички публикации + followingList: Следвани потребители + blockingList: Блокирани потребители + muteList: Заглушени потребители +exploreFediverse: Разглеждане на Федивселената +recentlyUpdatedUsers: Последно активни потребители +uiLanguage: Език на потребителския интерфейс +dashboard: Табло +tags: Тагове +youHaveNoGroups: Нямаш групи +accessibility: Достъпност +email: Ел. поща +emailAddress: Адрес за ел. поща +addItem: Добавяне на елемент +visibility: Видимост +description: Описание +_relayStatus: + accepted: Прието +other: Други +channel: Канали +accountInfo: Информация за акаунта +send: Изпращане +clearCache: Изчистване на кеша +closeAccount: Затваряне на акаунта +onlineUsersCount: '{n} потребители на линия' +nUsers: '{n} Потребители' +developer: Разработчик +popularPosts: Популярни страници +info: Относно +recentPosts: Последни страници +offline: Извън линия +onlineStatus: Онлайн състояние +online: На линия +goBack: Назад +editCode: Редактиране на кода +publish: Публикувай +breakFollow: Премахване на последовател +learnMore: Научи повече +hashtags: Хаштагове +document: Документация +accounts: Акаунти +smartphone: Смартфон +isBot: Този акаунт е автоматизиран +size: Размер +tablet: Таблет +numberOfPageCache: Брой кеширани страници +localOnly: Само местни +beta: Бета +slow: Бавна +speed: Скорост +account: Акаунт +migration: Прехвърляне +moveToLabel: 'Акаунт, към който се местиш:' +withFiles: С прикачени файлове +renoteUnmute: Отмяна на заглушаването на подсилванията +selectWidget: Избор на джаджа +remoteUserCaution: Информацията от отдалечени потребители може да е непълна. +attachFile: Прикачване на файлове +unwatch: Спиране на наблюдаването +invite: Поканване +_wordMute: + mutedNotes: Заглушени публикации +_postForm: + _placeholders: + b: Какво се случва около теб? +recentlyDiscoveredUsers: Новооткрити потребители +recentlyRegisteredUsers: Новоприсъединени потребители +inviteToGroup: Поканване в група +nothing: Няма нищо за гледане тук +chooseEmoji: Избор на емоджи +switchUi: Оформление +previewNoteText: Показване на преглед +apply: Прилагане +selectAccount: Избор на акаунт +muteThread: Заглушаване на нишката +ffVisibility: Видимост на Последвани/Последователи +renoteMute: Заглуш. на подсилванията в хронолог. +replyMute: Заглуш. на отговорите в хронолог. +blockConfirm: Сигурни ли сте, че искате да блокирате този акаунт? +appearance: Облик +fontSize: Размер на шрифта +describeFile: Добавяне на описание +unblockConfirm: Сигурни ли сте, че искате да отблокирате този акаунт? +followConfirm: Сигурни ли сте, че искате да последвате {name}? +accountMoved: 'Потребителят се премести на нов акаунт:' +inputNewDescription: Въведете ново описание +tos: Условия за ползване +agreeTo: Съгласен съм с {0} +withFileAntenna: Само публикации с файлове +updateRemoteUser: Обновяване на инфо. за отдалечения потребител +receiveAnnouncementFromInstance: Получаване на известия от този сървър +userPagePinTip: Можеш да показваш публикации тук, като избереш "Закачане в профила" + от менюто на отделните публикации. +_ffVisibility: + public: Общодостъпна + private: Частна + followers: Видима само за последователи +_charts: + activeUsers: Дейни потребители +edit: Редактиране +toReply: Отговаряне +toPost: Публикуване +toQuote: Цитиране +charts: Диаграми +disablePagesScript: Изключване на AiScript в Страниците +updatedAt: Обновено на +privateDescription: Видима само за теб +enableTimelineStreaming: Автоматично обновяване на хронологиите +toEdit: Редактиране +showEmojisInReactionNotifications: Показване на емоджита в известията за реакции +rememberNoteVisibility: Запомняне на настройките за видимост на публикациите +drive: Диск +banner: Банер +public: Общодостъпна +makeExplorable: Акаунтът да е видим в "Разглеждане" +hideOnlineStatus: Скриване на онлайн състоянието +customCss: Персонализиран CSS +keepCw: Запазване на предупрежденията за съдържание +makeReactionsPublic: Историята на реакциите да е общодостъпна +noEmailServerWarning: Сървърът за ел. поща не е конфигуриран. +languageForTranslation: Език за превеждане на публикации +private: Частна +replies: Отговори +wordMute: Заглушаване на думи и езици +instanceMute: Заглушаване на сървъри +notificationSettingDesc: Избиране на какви известия да се показват. +preventAiLearning: Предотвратяване на ИИ scraping +indexable: Индексируем +showPreviewByDefault: Показване на преглед при публикуване по подразбиране +showNoAltTextWarning: Показване на предупреждение при опит за публикуване на файлове + без описание +makeFollowManuallyApprove: Заявките за последване да изискват одобряване +enableEmojiReactions: Включване на реакциите с емоджи +autoAcceptFollowed: Автоматично одобряване на заявките за последване от последвани + потребители +expandOnNoteClick: Отваряне на публикацията при кликване +enableInfiniteScroll: Автоматично зареждане на повече +noCrawle: Предотвратяване на индексирането от търсачки +misskeyUpdated: Firefish бе обновен! +emailNotConfiguredWarning: Адресът за ел. поща не е зададен. +notificationSetting: Настройки за известията +emailNotification: Известия по ел. поща +clientSettings: Настройки за устройството +behavior: Поведение +detectPostLanguage: Автоматично откриване на езика и показване на бутон за превеждане + за публикации на чужди езици +replyUnmute: Отмяна на заглушаването на отговорите +searchWords: Думи за търсене / ID или URL за поглеждане +reloadConfirm: Искате ли да опресните хронологията? +enableRecommendedTimeline: Включване на препоръчаната хронология +showGapBetweenNotesInTimeline: Показване на празнина между публикациите в хронологията +lookup: Поглеждане +media: Мултимедия +welcomeBackWithName: Добре дошли отново, {name} +reduceUiAnimation: Намаляване на UI анимациите +clickToFinishEmailVerification: Моля, натиснете [{ok}], за да завършите потвърждаването + на ел. поща. +_cw: + show: Показване на съдържанието +remoteFollow: Отдалечено последване +messagingUnencryptedInfo: Чатовете във Firefish не са шифровани от край до край. Не + споделяйте чувствителна информация през Firefish. +noteEditHistory: История на редакциите на публик. +withReplies: Включително отговори +getQrCode: Показване на QR код +copyRemoteFollowUrl: Копиране на адреса за отдалечено последване diff --git a/locales/bn-BD.yml b/locales/bn-BD.yml new file mode 100644 index 0000000..db3874c --- /dev/null +++ b/locales/bn-BD.yml @@ -0,0 +1,1771 @@ +_lang_: "বাংলা" +headlineFirefish: "নোট ব্যাবহার করে সংযুক্ত নেটওয়ার্ক" +introFirefish: "স্বাগতম! মিসকি একটি ওপেন সোর্স, ডিসেন্ট্রালাইজড মাইক্রোব্লগিং পরিষেবা। + \n\"নোট\" তৈরির মাধ্যমে যা ঘটছে তা সবার সাথে শেয়ার করুন 📡\n\"রিঅ্যাকশন\" গুলির মাধ্যমে + যেকোনো নোট সম্পর্কে আপনার অনুভূতি ব্যাক্ত করতে পারেন 👍\nএকটি নতুন দুনিয়া ঘুরে দেখুন + 🚀\n" +monthAndDay: "{day}/{month}" +search: "খুঁজুন" +notifications: "বিজ্ঞপ্তি" +username: "ব্যবহারকারীর নাম" +password: "পাসওয়ার্ড" +forgotPassword: "পাসওয়ার্ড ভুলে গেছেন" +fetchingAsApObject: "ফেডিভার্স থেকে খবর আনা হচ্ছে" +ok: "ঠিক" +gotIt: "বুঝেছি" +cancel: "বাতিল" +enterUsername: "ইউজারনেম লিখুন" +renotedBy: "{user} দ্বারা বুস্ট করা হয়েছে" +noNotes: "No posts" +noNotifications: "কোনো বিজ্ঞপ্তি নেই" +instance: "সার্ভার" +settings: "সেটিংস" +basicSettings: "সাধারণ সেটিংস" +otherSettings: "অন্যান্য সেটিংস" +openInWindow: "নতুন উইন্ডোতে খুলা" +profile: "প্রোফাইল" +timeline: "টাইমলাইন" +noAccountDescription: "এই ব্যাবহারকারীর কোন বায়ো নেই" +login: "প্রবেশ করুন" +loggingIn: "প্রবেশ করা হচ্ছে..." +logout: "লগআউট" +signup: "নিবন্ধন করুন" +uploading: "আপলোড হচ্ছ …" +save: "সংরক্ষণ" +users: "ব্যবহারকারীগণ" +addUser: "ব্যবহারকারী যোগ করুন" +favorite: "পছন্দ" +favorites: "পছন্দগুলি" +unfavorite: "পছন্দ না" +favorited: "পছন্দ করা হয়েছে" +alreadyFavorited: "ইতিমধ্যে পছন্দ করা হয়েছে" +cantFavorite: "পছন্দ করা যায়নি" +pin: "পিন করা" +unpin: "পিন সরান" +copyContent: "বিষয়বস্তু কপি করুন" +copyLink: "লিঙ্ক কপি করুন" +delete: "মুছুন" +deleteAndEdit: "মুছুন এবং সম্পাদনা করুন" +deleteAndEditConfirm: "আপনি কি এই পোস্টটি মুছে ফেলার এবং এটি সম্পাদনা করার বিষয়ে + নিশ্চিত? আপনি এটির সমস্ত প্রতিক্রিয়া, বুস্ট এবং উত্তর হারাবেন।" +addToList: "লিস্ট এ যোগ করুন" +sendMessage: "একটি বার্তা পাঠান" +copyUsername: "ব্যবহারকারীর নাম কপি করুন" +searchUser: "ব্যবহারকারী খুঁজুন..." +reply: "জবাব" +loadMore: "আরও দেখুন" +showMore: "আরও দেখুন" +showLess: "বন্ধ" +youGotNewFollower: "আপনাকে অনুসরণ করছে" +receiveFollowRequest: "অনুসরণ করার জন্য অনুরোধ পাওয়া গেছে" +followRequestAccepted: "অনুসরণ করার অনুরোধ গৃহীত হয়েছে" +mention: "উল্লেখ" +mentions: "উল্লেখসমূহ" +directNotes: "প্রত্যক্ষ বার্তা" +importAndExport: "ডেটা ইমপোর্ট/এক্সপোর্ট" +import: "ইমপোর্ট করুণ" +export: "এক্সপোর্ট করুন" +files: "ফাইলগুলি" +download: "ডাউনলোড" +driveFileDeleteConfirm: "আপনি কি নিশ্চিত যে আপনি \"{name}\" ডিলিট করতে চান? যে সকল + পোস্ট এর সাথে এই ফাইলটি সংযুক্ত সেগুলোও ডিলিট করা হবে।" +unfollowConfirm: "{name} কে আনফলোও করার ব্যাপারে নিশ্চিত?" +exportRequested: "আপনার তথ্যসমূহ এক্সপোর্ট জন্য অনুরোধ করেছেন। এতে কিছু সময় লাগতে + পারে। এক্সপোর্ট সম্পন্ন হলে তা আপনার ড্রাইভে সংরক্ষিত হবে।" +importRequested: "আপনার তথ্যসমূহ আমদানির জন্য অনুরোধ করেছেন। এতে কিছু সময় লাগতে পারে।" +lists: "লিস্ট" +noLists: "কোন লিস্ট নেই" +note: "নোট" +notes: "নোটগুলি" +following: "অনুসরণ করা হচ্ছে" +followers: "অনুসরণকারী" +followsYou: "আপনাকে অনুসরণ করে" +createList: "লিস্ট তৈরি করুন" +manageLists: "লিস্ট ব্যাবস্থাপনা" +error: "সমস্যা" +somethingHappened: "একটি ত্রুটি হয়েছে" +retry: "আবার চেষ্টা করুন" +pageLoadError: "পেজ লোড করা যায়নি" +pageLoadErrorDescription: "এটি সাধারনত নেটওয়ার্কের সমস্যার বা ব্রাউজার ক্যাশের কারণে + ঘটে থাকে। ব্রাউজার এর ক্যাশ পরিষ্কার করুন এবং একটু পর আবার চেষ্টা করুন।" +serverIsDead: "এই সার্ভার বর্তমানে সাড়া দিচ্ছে না। একটু পরে আবার চেষ্টা করুন।" +youShouldUpgradeClient: "এই পেজ দেখার জন্য আপনার ব্রাউজার রিফ্রেশ করে ক্লায়েন্ট আপডেট + করুন। " +enterListName: "লিস্টের নাম লিখুন" +privacy: "গোপনীয়তা" +makeFollowManuallyApprove: "অনুসরণ করার অনুরোধগুলি গৃহীত হওয়ার জন্য আপনার অনুমতি লাগবে" +defaultNoteVisibility: "ডিফল্ট দৃশ্যমান্যতা" +follow: "অনুসরণ" +followRequest: "অনুসরণ করার অনুরোধ" +followRequests: "অনুসরণ করার অনুরোধসমূহ" +unfollow: "অনুসরণ বাতিল" +followRequestPending: "অনুসরণ করার অনুরোধ বিচারাধীন" +enterEmoji: "ইমোজি প্রবেশ করান" +renote: "রিনোট" +unrenote: "বুস্ট ফিরিয়ে নিন" +renoted: "বুস্ট করা হয়েছে।" +cantRenote: "এই পোস্টটি বুস্ট করা যাবে না।" +cantReRenote: "বুস্টকে বুস্ট করা যাবে না।" +quote: "উক্তি" +pinnedNote: "পিন করা পোস্ট" +pinned: "প্রোফাইলে পিন করুন" +you: "আপনি" +clickToShow: "দেখার জন্য ক্লিক করুন" +sensitive: "সংবেদনশীল বিষয়বস্তু" +add: "যুক্ত করুন" +reaction: "প্রতিক্রিয়া" +reactionSetting: "রিঅ্যাকশন পিকারে যেসকল প্রতিক্রিয়া দেখানো হবে" +reactionSettingDescription2: "পুনরায় সাজাতে টেনে আনুন, মুছতে ক্লিক করুন, যোগ করতে + + টিপুন।" +rememberNoteVisibility: "নোটের দৃশ্যমান্যতার সেটিংস মনে রাখুন" +attachCancel: "অ্যাটাচমেন্ট সরান " +markAsSensitive: "সংবেদনশীল হিসাবে চিহ্নিত করুন" +unmarkAsSensitive: "সংবেদনশীল চিহ্ন সরান" +enterFileName: "ফাইলের নাম লিখুন" +mute: "মিউট" +unmute: "আনমিউট" +block: "ব্লক" +unblock: "ব্লক সরান" +suspend: "স্থগিত করা" +unsuspend: "অস্থগিত করা" +blockConfirm: "ব্লক করতে চান?" +unblockConfirm: "ব্লক সরাতে চান?" +suspendConfirm: "স্থগিত করতে চান?" +unsuspendConfirm: "অস্থগিত করতে চান?" +selectList: "লিস্ট নির্বাচন করুন" +selectAntenna: "অ্যান্টেনা নির্বাচন করুন" +selectWidget: "উইজেট নির্বাচন করুন" +editWidgets: "উইজেট সম্পাদনা করুন" +editWidgetsExit: "সম্পাদনা শেষ করুন" +customEmojis: "স্বনির্ধারিত ইমোজিগুলি" +emoji: "ইমোজি" +emojis: "ইমোজিগুলি" +emojiName: "ইমোজির নাম" +emojiUrl: "ইমোজির URL" +addEmoji: "ইমোজি যুক্ত করুন" +settingGuide: "সুপারিশকৃত সেটিংস" +cacheRemoteFiles: "রিমোট ফাইলসমুহ ক্যাশ করুন" +cacheRemoteFilesDescription: "যখন এই অপশনটি বন্ধ থাকে তখন রিমোট ফাইল সমূহ সরাসরি রিমোট + ইন্সট্যান্স থেকে লোড করা হয়। এই অপশনটি বন্ধ করলে স্টোরেজ এর ব্যাবহার কমবে তবে থাম্বনেইল + তৈরি না করার কারণে নেটওয়ার্ক ব্যান্ডউইথ বেশী লাগবে। " +flagAsBot: "বট হিসাবে চিহ্নিত করুন" +flagAsBotDescription: "এই অ্যাকাউন্টটি যদি একটি প্রোগ্রাম দ্বারা পরিচালিত হয়, তাহলে + এই অপশনটি চালু করুন। ইন্টারঅ্যাকশান চেইনিং রোধ করতে, মিস্কির সিস্টেম পরিচালনাকে + বট-বান্ধব করতে এবং অন্যান্য ডেভেলপারদের সাহায্য করতে আপনার বট এ এই অপশনটি চালু করুন৷" +flagAsCat: "বিড়াল হিসাবে চিহ্নিত করুন" +flagAsCatDescription: "অ্যাকাউন্টটিকে বিড়াল হিসাবে চিহ্নিত করার জন্য অপশনটি চালু করুন।" +flagShowTimelineReplies: "টাইমলাইনে নোটগুলির রিপ্লাই দেখান" +flagShowTimelineRepliesDescription: "চালু করলে, টাইমলাইন ব্যবহারকারীর নোট ছাড়াও ব্যবহারকারীর + অন্যান্য নোটের জবাবগুলো দেখায়।" +autoAcceptFollowed: "আপনি যেসব অ্যাকাউন্ট অনুসরণ করেন, স্বয়ংক্রিয়ভাবে তাদের অনুসরণের + অনুরধ স্বীকার করুন" +addAccount: "অ্যাকাউন্ট যোগ করুন" +loginFailed: "প্রবেশ করা যায়নি" +showOnRemote: "রিমোট সার্ভারে দেখুন" +general: "সাধারণ" +wallpaper: "ওয়ালপেপার" +setWallpaper: "ওয়ালপেপার সেট করুন" +removeWallpaper: "ওয়ালপেপার সরান" +searchWith: "খুঁজুন: {q}" +youHaveNoLists: "আপনার কোন লিস্ট নেই" +followConfirm: "{name} কে ফলোও করার ব্যাপারে নিশ্চিত?" +proxyAccount: "প্রক্সি অ্যাকাউন্ট" +proxyAccountDescription: "একটি প্রক্সি অ্যাকাউন্ট এমন একটি অ্যাকাউন্ট যা নির্দিষ্ট + শর্তে ব্যবহারকারীদের জন্য রিমোট অনুসরণকারী হিসাবে কাজ করে। উদাহরণস্বরূপ, যখন একজন + ব্যবহারকারী একটি রিমোট ব্যবহারকারীকে তালিকাভুক্ত করে, তখন ক্রিয়াকলাপের দৃষ্টান্তে + বিতরণ করা হবে না যদি না কেউ তালিকাভুক্ত ব্যবহারকারীকে অনুসরণ করে, তাই প্রক্সি অ্যাকাউন্ট + দ্বারা তাকে অনুসরণ করা হবে।" +host: "হোস্ট" +selectUser: "ব্যবহারকারী নির্বাচন করুন" +recipient: "প্রতি" +annotation: "মন্তব্য" +federation: "ফেডিভার্স" +instances: "ইন্সট্যান্স" +registeredAt: "যোগ দিয়েছেন" +latestRequestSentAt: "শেষ রিকুয়েস্ট পাঠানো হয়েছে" +latestRequestReceivedAt: "শেষ রিকুয়েস্ট গৃহীত হয়েছে" +latestStatus: "সর্বশেষ অবস্থা" +storageUsage: "স্টোরেজের ব্যাবহার" +charts: "চার্ট" +perHour: "ঘন্টা প্রতি" +perDay: "দৈনিক" +stopActivityDelivery: "অ্যাক্টিভিটি পাঠানো বন্ধ করুন" +blockThisInstance: "ইন্সট্যান্স ব্লক করুন" +operations: "ক্রিয়াকলাপ" +software: "সফটওয়্যার" +version: "সংস্করণ" +metadata: "মেটাডাটা" +monitor: "মনিটর" +jobQueue: "জব কিউ" +cpuAndMemory: "সিপিউ এবং মেমরি" +network: "নেটওয়ার্ক" +disk: "ডিস্ক" +instanceInfo: "ইন্সট্যান্সের তথ্য" +statistics: "পরিসংখ্যান" +clearQueue: "কিউ পরিষ্কার করুন" +clearQueueConfirmTitle: "আপনি কি কিউ পরিষ্কার করার ব্যাপারে নিশ্চিত?" +clearQueueConfirmText: "বিতরণ না করা নোট আর বিতরণ করা হবে না। সাধারণত আপনার এটি করার + দরকার নেই।" +clearCachedFiles: "ক্যাশ পরিষ্কার করুন" +clearCachedFilesConfirm: "আপনি কি ক্যাশ পরিষ্কার করার ব্যাপারে নিশ্চিত?" +blockedInstances: "ব্লককৃত ইন্সট্যান্সসমুহ" +blockedInstancesDescription: "আপনি যে ইন্সট্যান্সগুলি ব্লক করতে চান তার হোস্টনেমগুলি + প্রত্যেকটি আলাদা লাইনে লিখুন। ব্লককৃত ইন্সট্যান্সগুলি এই ইন্সট্যান্সের সাথে যোগাযোগ + করতে পারবেনা৷" +muteAndBlock: "মিউট এবং ব্লকগুলি" +mutedUsers: "নিঃশব্দকৃত ব্যবহারকারী" +blockedUsers: "যাদের ব্লক করা হয়েছে" +noUsers: "কোন ব্যাবহারকারী নেই" +editProfile: "প্রোফাইল সম্পাদনা করুন" +noteDeleteConfirm: "আপনি কি নোট ডিলিট করার ব্যাপারে নিশ্চিত?" +pinLimitExceeded: "আপনি আর কোন নোট পিন করতে পারবেন না" +intro: "Firefish এর ইন্সটলেশন সম্পন্ন হয়েছে!দয়া করে অ্যাডমিন ইউজার তৈরি করুন।" +done: "সম্পন্ন" +processing: "প্রক্রিয়াধীন" +preview: "পূর্বরূপ দেখুন" +default: "পূর্বনির্ধারিত" +noCustomEmojis: "কোন ইমোজি নাই" +noJobs: "কোন জব নাই" +federating: "ফেডারেট করা হচ্ছে" +blocked: "ব্লক করা হয়েছে" +suspended: "স্থগিত করা হয়েছে" +all: "সবগুলো" +subscribing: "সদস্যতা নেয়া হচ্ছে" +publishing: "প্রকাশ করা হচ্ছে" +notResponding: "সাড়া নেই" +instanceFollowing: "ইন্সট্যান্স অনুসরণ করা হচ্ছে" +instanceFollowers: "ইন্সট্যান্স অনুসরণকারী" +instanceUsers: "ইন্সট্যান্স ব্যাবহারকারী" +changePassword: "পাসওয়ার্ড পরিবর্তন করুন" +security: "নিরাপত্তা" +retypedNotMatch: "ইনপুট মেলে না।" +currentPassword: "বর্তমান পাসওয়ার্ড" +newPassword: "নতুন পাসওয়ার্ড" +newPasswordRetype: "নতুন পাসওয়ার্ড (পুনরায় লিখুন)" +attachFile: "ফাইল সংযুক্ত করুন" +more: "আরও!" +featured: "হাইলাইট" +usernameOrUserId: "ব্যাবহারকারীর নাম বা ব্যাবহারকারী ID" +noSuchUser: "কোন ব্যবহারকারী খুঁজে পাওয়া যায়নি" +lookup: "খুঁজে দেখো" +announcements: "ঘোষণা" +imageUrl: "চিত্রের URL" +remove: "মুছুন" +removed: "সরানো হয়েছে" +removeAreYouSure: "আপনি কি \"{x}\" সরানোর ব্যাপারে নিশ্চিত?" +deleteAreYouSure: "আপনি কি \"{x}\" সরানোর ব্যাপারে নিশ্চিত?" +resetAreYouSure: "রিসেট করার ব্যাপারে নিশ্চিত?" +saved: "সংরক্ষিত হয়েছে" +messaging: "চ্যাট" +upload: "আপলোড" +keepOriginalUploading: "আসল ছবি রাখুন" +keepOriginalUploadingDescription: "ছবিটি আপলোড করার সময় আসল সংস্করণটি রাখুন। অপশনটি + বন্ধ থাকলে, আপলোডের সময় ওয়েব প্রকাশনার জন্য ছবি ব্রাউজারে তৈরি করা হবে।" +fromDrive: "ড্রাইভ হতে" +fromUrl: "URL হতে" +uploadFromUrl: "URL হতে আপলোড" +uploadFromUrlDescription: "যে ফাইলটি আপলোড করতে চান, সেটির URL" +uploadFromUrlRequested: "আপলোড অনুরোধ করা হয়েছে" +uploadFromUrlMayTakeTime: "URL হতে আপলোড হতে কিছু সময় লাগতে পারে।" +explore: "ঘুরে দেখুন" +messageRead: "পড়া" +noMoreHistory: "আর কোন ইতিহাস নেই" +startMessaging: "চ্যাট শুরু করুন" +nUsersRead: "{n} জন পড়েছেন" +agreeTo: "{0} এর প্রতি আমি সম্মত" +tos: "পরিষেবার শর্তাদি" +start: "শুরু করুন" +home: "মূল পাতা" +remoteUserCaution: "এই ব্যাবহারকারী রিমোট ইন্সট্যান্সের, নিম্নক্ত তথ্য অসম্পূর্ণ হতে + পারে।" +activity: "কার্যকলাপ" +images: "ছবি" +birthday: "জন্মদিন" +yearsOld: "{age} বছর" +registeredDate: "যোগদানের তারিখ" +location: "অবস্থান" +theme: "থিম" +themeForLightMode: "লাইট মোডের থিম" +themeForDarkMode: "ডার্ক মোডের থিম" +light: "আলোকিত" +dark: "অন্ধকার" +lightThemes: "আলোকিত থিম" +darkThemes: "অন্ধকার থিম" +syncDeviceDarkMode: "ডিভাইসের সেটিং অনুযায়ী ডার্ক মোড সেট করুন" +drive: "ড্রাইভ" +fileName: "ফাইলের নাম" +selectFile: "ফাইল নির্বাচন করুন" +selectFiles: "ফাইল নির্বাচন করুন" +selectFolder: "ফোল্ডার নির্বাচন করুন" +selectFolders: "ফোল্ডার নির্বাচন করুন" +renameFile: "ফাইল পুনঃনামকরন" +folderName: "ফোল্ডারের নাম" +createFolder: "ফোল্ডার তৈরি করুন" +renameFolder: "ফোল্ডার পুনঃনামকরন" +deleteFolder: "ফোল্ডার মুছুন" +addFile: "ফাইল যোগ করুন" +emptyDrive: "আপনার ড্রাইভ খালি" +emptyFolder: "এই ফোল্ডার খালি" +unableToDelete: "মুছে ফেলা যায়নি" +inputNewFileName: "ফাইলের নতুন নাম লিখুন" +inputNewDescription: "নতুন ক্যাপশন লিখুন" +inputNewFolderName: "ফোল্ডারের নতুন নাম লিখুন" +circularReferenceFolder: "গন্তব্য ফোল্ডারটি আপনি যে ফোল্ডারটি সরাতে চান তার একটি সাবফোল্ডার।" +hasChildFilesOrFolders: "এই ফোল্ডারটি খালি না হওয়ায় ডিলিট করা যায়নি।" +copyUrl: "URL কপি করুন" +rename: "পুনঃনামকরণ" +avatar: "প্রোফাইল ছবি" +banner: "ব্যানার" +nsfw: "সংবেদনশীল বিষয়বস্তু" +whenServerDisconnected: "সার্ভারের সাথে সংযোগ বিচ্ছিন্ন হয়ে গেলে" +disconnectedFromServer: "সার্ভার থেকে সংযোগ বিচ্ছিন্ন হয়েছে" +reload: "আবার লোড করুন" +doNothing: "কিছু করবেন না" +reloadConfirm: "আপনি কি রিলোড করতে চান?" +watch: "বিজ্ঞপ্তি পান" +unwatch: "বিজ্ঞপ্তি পাওয়া বন্ধ করুন " +accept: "অনুমোদন" +reject: "প্রত্যাখ্যান" +normal: "স্বাভাবিক" +instanceName: "ইন্সট্যান্সের নাম" +instanceDescription: "ইন্সট্যান্সের বর্ণনা" +maintainerName: "মেইনটেইনার" +maintainerEmail: "মেইনটেইনারের ইমেইল" +tosUrl: "ব্যবহারের শর্তাবলীর URL" +thisYear: "বছর" +thisMonth: "মাস" +today: "আজ" +dayX: "{day}" +monthX: "{month}" +yearX: "{year}" +pages: "পৃষ্ঠা" +enableLocalTimeline: "স্থানীয় টাইমলাইন চালু করুন" +enableGlobalTimeline: "গ্লোবাল টাইমলাইন চালু করুন" +disablingTimelinesInfo: "আপনি এই টাইমলাইনগুলি বন্ধ করলেও প্রশাসক এবং মডারেটররা এই + টাইমলাইনগুলি ব্যাবহার করতে পারবে" +registration: "নিবন্ধন" +enableRegistration: "নতুন ব্যাবহারকারী নিবন্ধন চালু করুন" +invite: "আমন্ত্রণ" +driveCapacityPerLocalAccount: "প্রত্যেক স্থানীয় ব্যাবহারকারীর জন্য ড্রাইভের জায়গা" +driveCapacityPerRemoteAccount: "প্রত্যেক রিমোট ব্যাবহারকারীর জন্য ড্রাইভের জায়গা" +inMb: "মেগাবাইটে লিখুন" +iconUrl: "আইকনের URL (ফ্যাভিকন, ইত্যাদি)" +bannerUrl: "ব্যানার ছবির URL" +backgroundImageUrl: "পটভূমির চিত্রের URL" +basicInfo: "আপনার ব্যক্তিগত তথ্য" +pinnedUsers: "পিন করা ব্যাবহারকারীগণ" +pinnedUsersDescription: "আপনি যেসব ব্যবহারকারীদের \"ঘুরে দেখুন\" পৃষ্ঠায় পিন করতে + চান তাদের বর্ণনা করুন, প্রত্যেকের বর্ণনা আলাদা লাইনে লিখুন" +pinnedPages: "পিন করা পৃষ্ঠাসুমহ" +pinnedPagesDescription: "আপনি যেসকল পৃষ্ঠাসমূহকে \"ঘুরে দেখুন\" পৃষ্ঠায় পিন করতে + চান তাদের বর্ণনা করুন, প্রত্যেকের বর্ণনা আলাদা লাইনে লিখুন" +pinnedClipId: "পিনকৃত ক্লিপের ID" +pinnedNotes: "পিন করা নোট" +hcaptcha: "hCaptcha" +enableHcaptcha: "hCaptcha চালু করুন" +hcaptchaSiteKey: "সাইট কী" +hcaptchaSecretKey: "সিক্রেট কী" +recaptcha: "reCAPTCHA" +enableRecaptcha: "reCAPTCHA চালু করুন" +recaptchaSiteKey: "সাইট কী" +recaptchaSecretKey: "সিক্রেট কী" +avoidMultiCaptchaConfirm: "একাধিক Captcha ব্যবহার করলে তারা পরস্পরের কাজে বাধা দিতে + পারে। আপনি কি অন্যান্য Captcha নিষ্ক্রিয় করতে চান? আপনি 'বাতিল' ক্লিক করার মাধ্যমে + একাধিক Captcha চালু রাখতে পারেন।" +antennas: "অ্যান্টেনা" +manageAntennas: "অ্যান্টেনা ব্যবস্থাপনা" +name: "নাম" +antennaSource: "অ্যান্টেনার উৎস" +antennaKeywords: "যেসব কীওয়ার্ড দেখা হবে" +antennaExcludeKeywords: "যেসব কীওয়ার্ড দেখা হবে না" +antennaKeywordsDescription: "স্পেস দিয়ে আলাদা করলে AND শর্ত তৈরি হবে এবং আলাদা লাইনে + লিখলে OR শর্ত তৈরি হবে।" +notifyAntenna: "নতুন নোট সম্পর্কে অবহিত করুন" +withFileAntenna: "শুধুমাত্র ফাইলযুক্ত নোট" +enableServiceworker: "ServiceWorker চালু করুন" +antennaUsersDescription: "প্রত্যেক লাইনে একজন ব্যবহারকারীর নাম লিখুন" +caseSensitive: "ছোট হাতের এবং বড় হাতের অক্ষর নির্দিষ্ট করুন" +withReplies: "জবাবসমুহ যুক্ত করুন" +connectedTo: "আপনি নিম্নলিখিত অ্যাকাউন্টের সাথে সংযুক্ত" +notesAndReplies: "নোটসমূহ এবং জবাবগুলি" +withFiles: "ফাইলগুলি যুক্ত করুন" +silence: "নীরব" +silenceConfirm: "আপনি কি এই ব্যাবহারকারীকের নীরব করতে চান?" +unsilence: "সরব" +unsilenceConfirm: "আপনি কি এই ব্যাবহারকারীকের সরব করতে চান?" +popularUsers: "জনপ্রিয় ব্যবহারকারীগন" +recentlyUpdatedUsers: "সম্প্রতি পোস্ট করা ব্যবহারকারীগন" +recentlyRegisteredUsers: "নতুন যোগ দেওয়া ব্যবহারকারীগন" +recentlyDiscoveredUsers: "নতুন খুঁজে পাওয়া ব্যবহারকারীগন" +exploreUsersCount: "{count} জন ব্যাবহারকারী" +exploreFediverse: "Fediverse ঘুরে দেখুন" +popularTags: "জনপ্রিয় ট্যাগগুলি" +userList: "লিস্ট" +about: "আপনার সম্পর্কে" +aboutFirefish: "Firefish সম্পর্কে" +administrator: "প্রশাসক" +token: "টোকেন" +twoStepAuthentication: "২-ধাপ প্রমাণীকরণ" +moderator: "মডারেটর" +nUsersMentioned: "{n} জনকে উল্লেখ করা হয়েছে" +securityKey: "সিকিউরিটি কী" +securityKeyName: "কী'র নাম" +registerSecurityKey: "সিকিউরিটি কী নিবন্ধন করুন" +lastUsed: "শেষ ব্যাবহার করা হয়েছে" +unregister: "নিবন্ধনমুক্ত হন" +passwordLessLogin: "পাসওয়ার্ড-বিহীন লগইন সেট আপ করুন" +resetPassword: "পাসওয়ার্ড রিসেট করুন" +newPasswordIs: "নতুন পাসওয়ার্ড হচ্ছে \"{password}\"" +reduceUiAnimation: "UI অ্যানিমেশন কমান" +share: "শেয়ার" +notFound: "পাওয়া যায়নি" +notFoundDescription: "এই URL-এর সাথে সম্পর্কিত কোনো পৃষ্ঠা নেই।" +uploadFolder: "আপলোডের জন্য ডিফল্ট ফোল্ডার" +cacheClear: "ক্যাশ পরিষ্কার করুন" +markAsReadAllNotifications: "সমস্ত বিজ্ঞপ্তিগুলি পঠিত হিসাবে চিহ্নিত করুন" +markAsReadAllUnreadNotes: "সমস্ত নোটগুলি পঠিত হিসাবে চিহ্নিত করুন" +markAsReadAllTalkMessages: "সমস্ত মেসেজ পঠিত হিসাবে চিহ্নিত করুন" +help: "সহায়তা" +inputMessageHere: "এখানে মেসেজ লিখুন" +close: "বন্ধ" +group: "গ্রুপ" +groups: "গ্রুপসমূহ" +createGroup: "গ্রুপ তৈরী করুন" +ownedGroups: "আপনার গ্রুপগুলি" +joinedGroups: "যেসব গ্রুপে আপনি আছেন" +invites: "আমন্ত্রণ" +groupName: "গ্রুপের নাম" +members: "সদস্যবৃন্দ" +transfer: "হস্তান্তর" +messagingWithUser: "প্রাইভেট চ্যাট" +messagingWithGroup: "গ্রুপ চ্যাট" +title: "শিরোনাম" +text: "পাঠ্য" +enable: "সক্রিয়" +next: "পরবর্তী" +retype: "পুনঃ প্রবেশ" +noteOf: "{user} এর নোট" +inviteToGroup: "গ্রুপে আমন্ত্রণ জানান" +quoteAttached: "উদ্ধৃত" +quoteQuestion: "উদ্ধৃতি হিসাবে সংযুক্ত করবেন?" +noMessagesYet: "কোন মেসেজ নেই" +newMessageExists: "নতুন মেসেজ পেয়েছেন" +onlyOneFileCanBeAttached: "আপনি মেসেজের সাথে সর্বোচ্চ একটি ফাইল যুক্ত করতে পারবেন" +signinRequired: "দয়া করে লগ ইন করুন" +invitations: "আমন্ত্রণ" +invitationCode: "ইনভাইট কোড" +checking: "পরীক্ষা করা হচ্ছে..." +available: "উপলব্ধ" +unavailable: "অনুপলব্ধ" +usernameInvalidFormat: "আপনি কেবলমাত্র a-z, A-Z, 0-9, _ ব্যবহার করতে পারেন" +tooShort: "খুব ছোট" +tooLong: "খুব বড়" +weakPassword: "দুর্বল পাসওয়ার্ড" +normalPassword: "সাধারণ পাসওয়ার্ড" +veryStrongPassword: "শক্তিশালী পাসওয়ার্ড" +passwordMatched: "মিলেছে" +passwordNotMatched: "মিলেনি" +signinWith: "{x} এর সাহায্যে সাইন ইন করুন" +signinFailed: "লগ ইন করা যায়নি। আপনার ব্যবহারকারীর নাম এবং পাসওয়ার্ড চেক করুন." +tapSecurityKey: "সিকিউরিটি কী স্পর্শ করুন" +or: "অথবা" +language: "ভাষা" +uiLanguage: "UI এর ভাষা" +groupInvited: "আপনি একটি গ্রুপে আমন্ত্রিত হয়েছেন" +aboutX: "{x} সম্পর্কে" +useOsNativeEmojis: "অপারেটিং সিস্টেমের নেটিভ ইমোজি ব্যবহার করুন" +disableDrawer: "ড্রয়ার মেনু প্রদর্শন করবেন না" +youHaveNoGroups: "আপনার কোন গ্রুপ নেই " +joinOrCreateGroup: "একটি বিদ্যমান গ্রুপের আমন্ত্রণ পান বা একটি নতুন গ্রুপ তৈরি করুন৷" +noHistory: "কোনো ইতিহাস নেই" +signinHistory: "প্রবেশ করার ইতিহাস" +disableAnimatedMfm: "অ্যানিমেটেড MFM অক্ষম করুন" +doing: "প্রক্রিয়া করছে..." +category: "বিভাগ" +tags: "ট‍্যাগসমূহ" +docSource: "ডকুমেন্টের উৎস" +createAccount: "অ্যাকাউন্ট তৈরি করুন" +existingAccount: "বিদ্যমান অ্যাকাউন্ট" +regenerate: "আবারও তৈরি করুন" +fontSize: "ফন্টের আকার" +noFollowRequests: "আপনার কোন ফলোও রিকুয়েস্ট নেই" +openImageInNewTab: "ছবি নতুন ট্যাবে খুলুন" +dashboard: "ড্যাশবোর্ড" +local: "স্থানীয়" +remote: "রিমোট" +total: "মোট" +weekOverWeekChanges: "গত সপ্তাহে" +dayOverDayChanges: "গতকাল" +appearance: "অবয়ব" +clientSettings: "ক্লায়েন্ট সেটিংস" +accountSettings: "অ্যাকাউন্ট সেটিংস" +promotion: "প্রমোশন" +promote: "প্রচার করুন" +numberOfDays: "দিনের সংখ্যা" +hideThisNote: "নোটটি লুকান" +showFeaturedNotesInTimeline: "টাইমলাইনে সুপারিশকৃত নোটগুলি দেখান" +objectStorage: "অবজেক্ট স্টোরেজ" +useObjectStorage: "অবজেক্ট স্টোরেজ ব্যাবহার করুন" +objectStorageBaseUrl: "Base URL" +objectStorageBaseUrlDesc: "রেফারেন্স হিসাবে ব্যবহৃত URL। আপনি একটি CDN বা প্রক্সি + ব্যবহার করলে URL, S3: 'https://.s3.amazonaws.com', GCS: 'https://storage.googleapis.com/'।" +objectStorageBucket: "Bucket" +objectStorageBucketDesc: "ব্যবহার করা পরিষেবার bucket এর নাম লিখুন। " +objectStoragePrefix: "Prefix" +objectStoragePrefixDesc: "ফাইলসমূহ এই prefix যুক্ত ফোল্ডারের অধীনে সংরক্ষণ করা হবে।" +objectStorageEndpoint: "এন্ডপয়েন্ট" +objectStorageEndpointDesc: "S3 এর জন্য ফাঁকা রাখুন, অন্যথায় প্রতিটি পরিষেবার এন্ডপয়েন্ট + নির্দিষ্ট করুন। ''বা': ' হিসেবে লিখুন।" +objectStorageRegion: "Region" +objectStorageRegionDesc: "'xx-east-1'-এর মতো একটি region নির্দিষ্ট করুন। যদি আপনার + পরিষেবাতে region এর ধারণা না থাকে, তাহলে এটি খালি বা 'us-east-1' হওয়া উচিত।" +objectStorageUseSSL: "SSL ব্যাবহার করুন" +objectStorageUseSSLDesc: "API কানেকশনগুলির জন্য যদি https ব্যাবহার না করেন, তাহলে + এই অপশনটি বন্ধ করুন" +objectStorageUseProxy: "Proxy ব্যাবহার করুন" +objectStorageUseProxyDesc: "আপনি API সংযোগের জন্য proxy ব্যবহার না করলে, এটি বন্ধ + করুন।" +objectStorageSetPublicRead: "আপলোডের উপর ''public-read' সেট করুন" +serverLogs: "সার্ভার লগ" +deleteAll: "সব মুছুন" +showFixedPostForm: "টাইমলাইনের শীর্ষে পোস্ট করার ফর্মটি দেখান" +newNoteRecived: "নতুন নোট আছে" +sounds: "শব্দ" +listen: "শুনুন" +none: "কিছুই না" +showInPage: "পেজে দেখান" +popout: "পপ-আউট" +volume: "আওয়াজের মাত্রা" +masterVolume: "মাস্টার আওয়াজের মাত্রা" +details: "আরও জানুন" +chooseEmoji: "ইমোজি নির্বাচন করুন" +unableToProcess: "কাজটি সম্পন্ন করা যায়নি" +recentUsed: "সম্প্রতি ব্যবহৃত" +install: "ইন্সটল" +uninstall: "আনইন্সটল" +installedApps: "ইন্সটল করা অ্যাপসমূহ" +nothing: "এখানে কিছুই নাই" +installedDate: "ইন্সটল করার তারিখ" +lastUsedDate: "সর্বশেষ ব্যাবহৃত" +state: "অবস্থা" +sort: "সাজান" +ascendingOrder: "ঊর্ধ্বক্রমে" +descendingOrder: "নিম্নক্রমে" +scratchpad: "স্ক্র্যাচপ্যাড" +scratchpadDescription: "স্ক্র্যাচপ্যাড AiScript-এর জন্য একটি পরীক্ষামূলক পরিবেশ প্রদান + করে। আপনি মিস্কির সাথে ইন্টারঅ্যাক্ট করে এমন কোড লিখতে, চালাতে এবং তার ফলাফল দেখতে + পারেন।" +output: "আউটপুট" +script: "স্ক্রিপ্ট" +disablePagesScript: "পেজগুলোতে AiScript অক্ষম করুন" +updateRemoteUser: "রিমোট ব্যবহারকারীর তথ্য আপডেট করুন" +deleteAllFiles: "সকল ফাইল ডিলিট করুন" +deleteAllFilesConfirm: "সকল ফাইল ডিলিট করতে চান?" +removeAllFollowing: "সকল অনুসরণ বাতিল করুন" +removeAllFollowingDescription: "{host} এর সকল ব্যাবহারকারীকে আর ফলোও করবেন না । যদি + ইন্সত্যান্সটির কোন সমস্যা (যেমনঃ ইন্সত্যান্সটি আর নেই) হয়ে থাকে তবে এটি ব্যাবহার + করুন । " +userSuspended: "এই ব্যাবহারকারির অ্যাকাউন্ট স্থগিত করা হয়েছে" +userSilenced: "এই ব্যাবহারকারিকে মিউট করা হয়েছে" +yourAccountSuspendedTitle: "এই অ্যাকাউন্টটি স্থগিত করা হয়েছে" +yourAccountSuspendedDescription: "সার্ভারের ব্যবহারের শর্তাবলী লঙ্ঘনের মতো কারণে এই + অ্যাকাউন্টটি স্থগিত করা হয়েছে৷ বিস্তারিত জানার জন্য প্রশাসকের সাথে যোগাযোগ করুন + । একটি নতুন অ্যাকাউন্ট তৈরি করবেন না দয়া করে ।" +menu: "মেনু" +divider: "খন্ডক" +addItem: "আইটেম যোগ করুন" +relays: "রিলেগুলি" +addRelay: "রিলে যোগ করুন" +inboxUrl: "inbox এর URL" +addedRelays: "যোগকৃত রিলেগুলি" +serviceworkerInfo: "পুশ বিজ্ঞপ্তির জন্য চালু করা লাগবে।" +deletedNote: "ডিলিট করা নোট" +invisibleNote: "অদৃশ্য নোট" +enableInfiniteScroll: "ইনফিনিট স্ক্রল চালু করুন" +visibility: "দৃশ্যমানতা" +poll: "জরিপ" +useCw: "কন্টেন্ট লুকান" +enablePlayer: "ভিডিও প্লেয়ার খুলুন" +disablePlayer: "ভিডিও প্লেয়ার বন্ধ করুন" +expandTweet: "টুইট বিস্তারিত করুন" +themeEditor: "থিম সম্পাদক" +description: "বর্ণনা" +describeFile: "ক্যাপশন যোগ করুন" +enterFileDescription: "ক্যাপশন যোগ করুন" +author: "লেখক" +leaveConfirm: "কিছু পরিবর্তন সেভ করা হয়নি। আপনি কি চলে যেতে চান?" +manage: "পরিচালনা" +plugins: "প্লাগইনসমূহ" +deck: "ডেক" +undeck: "ডেকমুক্ত করুন" +useBlurEffectForModal: "মোডালের জন্য ব্লার ইফেক্ট ব্যবহার করুন" +useFullReactionPicker: "সম্পূর্ণ বৈশিষ্ট্যযুক্ত রিঅ্যাকশন পিকার ব্যবহার করুন" +width: "প্রস্থ" +height: "উচ্চতা" +large: "বড়" +medium: "মাঝারি" +small: "ছোট" +generateAccessToken: "অ্যাক্সেস টোকেন তৈরি করুন" +permission: "অনুমতি" +enableAll: "সবগুলি সক্রিয় করুন" +disableAll: "সবগুলি নিষ্ক্রিয় করুন" +tokenRequested: "অ্যাকাউন্টে অ্যাক্সেস প্রদান করবেন" +pluginTokenRequestedDescription: "এই প্লাগইনটি এখানে দেওয়া অনুমুতিসমূহ ব্যাবহার করবে" +notificationType: "বিজ্ঞপ্তির ধরন" +edit: "সম্পাদনা" +emailServer: "ইমেইল সার্ভার" +enableEmail: "ইমেইল বিতরণ চালু করুন" +emailConfigInfo: "আপনার ইমেল ঠিকানা নিশ্চিত করতে এবং আপনার পাসওয়ার্ড পুনরায় সেট + করতে ব্যবহৃত হয়" +email: "ইমেইল" +emailAddress: "ইমেইল ঠিকানা" +smtpConfig: "SMTP সার্ভার কনফিগারেশন" +smtpHost: "হোস্ট" +smtpPort: "পোর্ট" +smtpUser: "ব্যবহারকারীর নাম" +smtpPass: "পাসওয়ার্ড" +emptyToDisableSmtpAuth: "আপনি ব্যবহারকারীর নাম এবং পাসওয়ার্ড ফাঁকা রেখে SMTP প্রমাণীকরণ + নিষ্ক্রিয় করতে পারেন।" +smtpSecure: "SMTP সংযোগের জন্য SSL/TLS ব্যবহার করুন" +smtpSecureInfo: "STARTTLS ব্যবহার করার সময় এটি বন্ধ করুন।" +testEmail: "ইমেল বিতরণ পরীক্ষা করুন" +wordMute: "বিশেষ কোন শব্দকে মিউট করুন" +regexpError: "রেগুলার এক্সপ্রেশন ত্রুটি" +regexpErrorDescription: "{tab} ওয়ার্ড মিউটের {line} লাইনে রেগুলার এক্সপ্রেশনে একটি + ত্রুটি ছিল:" +instanceMute: "মিউট করা ইন্সত্যান্সগুলি" +userSaysSomething: "{name} কিছু বলেছে" +makeActive: "সক্রিয় করা" +display: "প্রদর্শন" +copy: "অনুলিপি" +metrics: "মেট্রিক্স" +overview: "সারাংশ" +logs: "লগ" +delayed: "দেরি করুন" +database: "ডেটাবেজ" +channel: "চ্যানেলগুলি" +create: "তৈরি করুন" +notificationSetting: "বিজ্ঞপ্তির সেটিংস" +notificationSettingDesc: "কি ধরনের বিজ্ঞপ্তি পাবেন তা নির্ধারণ করুন" +useGlobalSetting: "গ্লোবাল সেটিংস ব্যাবহার করুন" +useGlobalSettingDesc: "চালু করলে, আপনার অ্যাকাউন্টের বিজ্ঞপ্তি সেটিংস ব্যবহার করা + হবে। বন্ধ করলে, এটি পৃথকভাবে সেট করা যেতে পারে।" +other: "অন্যান্য" +regenerateLoginToken: "লগইন টোকেন আবার বানান" +regenerateLoginTokenDescription: "লগ ইন করার জন্য ব্যবহৃত অভ্যন্তরীণ টোকেন পুনরায় + তৈরি করে। সাধারণত আপনার এটি করার দরকার নেই। এটি করলে, আপনি সমস্ত ডিভাইসে লগ আউট + হয়ে যাবেন৷" +setMultipleBySeparatingWithSpace: "আপনি একটি স্পেস দিয়ে আলাদা করে একাধিক এন্ট্রি + দিতে পারেন।" +fileIdOrUrl: "ফাইল ID অথবা URL" +behavior: "আচরণ" +sample: "উদাহরণ" +abuseReports: "অভিযোগ" +reportAbuse: "অভিযোগ" +reportAbuseOf: "{name} এ অভিযোগ করুন" +fillAbuseReportDescription: "রিপোর্টের কারণ বর্ণনা করুন. একটি বিশেষ নোট এর জন্য রিপোর্টটি + হয়ে থাকে তবে তার URL টি অন্তর্ভুক্ত করুন। " +abuseReported: "আপনার অভিযোগটি দাখিল করা হয়েছে। আপনাকে ধন্যবাদ।" +reporter: "অভিযোগকারী" +reporteeOrigin: "অভিযোগটির উৎস" +reporterOrigin: "অভিযোগকারীর উৎস" +forwardReport: "রিমোট ইন্সত্যান্সে অভিযোগটি পাঠান" +forwardReportIsAnonymous: "আপনার তথ্য রিমোট ইন্সত্যান্সে পাঠানো হবে না এবং একটি বেনামী + সিস্টেম অ্যাকাউন্ট হিসাবে প্রদর্শিত হবে।" +send: "পাঠান" +abuseMarkAsResolved: "অভিযোগটিকে সমাধাকৃত হিসাবে চিহ্নিত করুন" +openInNewTab: "নতুন ট্যাবে খুলুন" +openInSideView: "সাইড ভিউতে খুলুন" +defaultNavigationBehaviour: "ডিফল্ট নেভিগেশন" +editTheseSettingsMayBreakAccount: "এসব সেটিংস সম্পাদনা করলে আপনার অ্যাকাউন্টের ক্ষতি + হতে পারে। " +instanceTicker: "ইন্সত্যান্সে নোটের তথ্য" +waitingFor: "{x} এর জন্য অপেক্ষা করা হচ্ছে" +random: "র‍্যান্ডম" +system: "সিস্টেম" +switchUi: "UI পরিবর্তন করুন" +desktop: "ডেস্কটপ" +clip: "ক্লিপ" +createNew: "নতুন" +optional: "প্রয়োজনীয় নয়" +createNewClip: "নতুন ক্লিপ তৈরি করুন" +public: "সর্বজনীন" +i18nInfo: "Firefish স্বেচ্ছাসেবকদের দ্বারা বিভিন্ন ভাষায় অনুবাদ করা হচ্ছে। আপনি {link} + এ গিয়ে অনুবাদে সহযোগিতা করতে পারেন।" +manageAccessTokens: "অ্যাক্সেস টোকেন পরিচালনা করুন" +accountInfo: "অ্যাকাউন্টের তথ্য" +notesCount: "নোটের সংখ্যা" +repliesCount: "জবাবের সংখ্যা" +renotesCount: "রিনোটের সংখ্যা" +repliedCount: "জবাব গ্রহন করা হয়েছে" +renotedCount: "রিনোট পেয়েছেন" +followingCount: "যাদেরকে অনুসরণ করেন, তাদের সংখ্যা" +followersCount: "অনুসরণকারীদের সংখ্যা" +sentReactionsCount: "রিঅ্যাকশন পাঠানো হয়েছে" +receivedReactionsCount: "রিঅ্যাকশন পেয়েছেন" +pollVotesCount: "পোল ভোট দিয়েছেন" +pollVotedCount: "পোল ভোট পেয়েছেন" +yes: "হ্যাঁ" +no: "না" +driveFilesCount: "ড্রাইভে ফাইল এর সংখ্যা" +driveUsage: "ড্রাইভ এর ব্যাবহার" +noCrawle: "ক্রলার ইন্ডেক্সিং বন্ধ করুন" +noCrawleDescription: "সার্চ ইঞ্জিনগুলিকে আপনার প্রোফাইল, নোট, পেজ ইত্যাদি ইনডেক্স + করতে নিষেধ করুন। " +lockedAccountInfo: "এমনকি আপনি আপনার অনুসরণকারীদের বেছে বেছে অনুমোদন করলেও, যে কেউ + আপনার নোটগুলি দেখতে পাবে, যতক্ষণ না আপনি আপনার নোটগুলিকে \"অনুসারীদের জন্য\" হিসাবে + সেট না করেন৷" +alwaysMarkSensitive: "সর্বদা স্পর্শকাতর হিসাবে চিহ্নিত করুন" +loadRawImages: "সংযুক্ত ছবির থাম্বনেইলটি দেখানর পরিবর্তে আসল ছবি দেখান" +disableShowingAnimatedImages: "অ্যানিমেটেড চিত্র দেখানো বন্ধ করুন" +verificationEmailSent: "নিশ্চিতকরণ ইমেল পাঠানো হয়েছে। সেটআপ সম্পূর্ণ করতে ইমেল এর + লিঙ্ক অনুসরণ করুন।" +notSet: "সেট করা হয়নি" +emailVerified: "ইমেইল নিশ্চিত করা হয়েছে" +noteFavoritesCount: "পছন্দ করা নোটের সংখ্যা" +pageLikesCount: "পেজ লাইক করেছেন" +pageLikedCount: "পেজ লাইক পেয়েছেন" +contact: "পরিচিতি সমূহ" +useSystemFont: "সিস্টেম ফন্ট ব্যাবহার করুন" +clips: "ক্লিপগুলি " +experimentalFeatures: "পরীক্ষামূলক বৈশিষ্ট্যগুলি" +developer: "ডেভেলপার" +makeExplorable: "অ্যাকাউন্ট \"ঘুরে দেখুন\" পৃষ্ঠায় দেখান" +makeExplorableDescription: "আপনি এটি বন্ধ করলে, আপনার অ্যাকাউন্ট \"ঘুরে দেখুন\" পৃষ্ঠায় + প্রদর্শিত হবে না।" +showGapBetweenNotesInTimeline: "টাইমলাইন এবং নোটের মাঝে ফাকা জায়গা রাখুন" +duplicate: "প্রতিরূপ" +left: "বাম" +center: "মাঝখান" +wide: "চওড়া" +narrow: "সংকীর্ণ" +reloadToApplySetting: "পৃষ্ঠাটি রিলোড করার পর সেটিংসটি প্রয়োগ করা হবে। আপনি কি এখন + রিলোড করতে চান?" +needReloadToApply: "পৃষ্ঠাটি রিলোড করার পর সেটিংসটি প্রয়োগ করা হবে।" +showTitlebar: "টাইটেল বার দেখান" +clearCache: "ক্যাশ পরিষ্কার করুন" +onlineUsersCount: "{n} জন ব্যাবহারকারী অনলাইন" +nUsers: "{n} জন ব্যাবহারকারী" +nNotes: "{n} টি নোট" +sendErrorReports: "ক্রুটি প্রতিবেদন পাঠান" +sendErrorReportsDescription: "চালু থাকলে, বিস্তারিত ত্রুটির তথ্য Firefish-এর সাথে + শেয়ার করা হয়। যা সফ্টওয়্যারটির গুণমান উন্নত করতে সাহায্য করে। ত্রুটির তথ্যের + মধ্যে রয়েছে OS সংস্করণ, ব্রাউজারের ধরন, কর্মের ইতিহাস ইত্যাদি।" +myTheme: "আমার থিম" +backgroundColor: "পটভূমির রং" +accentColor: "এক্সেন্টের রং" +textColor: "লেখার রং" +saveAs: "এইরূপে সংরক্ষণ করুন" +advanced: "উন্নত" +value: "মান" +createdAt: "তৈরি হয়েছে" +updatedAt: "শেষ হালনাগাদ হয়েছে" +saveConfirm: "পরিবর্তনগুলি সংরক্ষণ করতে চান?" +deleteConfirm: "আসলেই মুছে ফেলতে চান?" +invalidValue: "অগ্রহণযোগ্য মান" +registry: "রেজিস্ট্রি" +closeAccount: "অ্যাকাউন্ট বন্ধ করুন" +currentVersion: "বর্তমান সংস্করণ" +latestVersion: "সর্বশেষ সংস্করণ" +youAreRunningUpToDateClient: "আপনি সবচেয়ে নতুন ক্লায়েন্ট ব্যাবহার করছেন" +newVersionOfClientAvailable: "আপনার ক্লায়েন্টের একটি নতুন ভার্সন চলে এসেছে" +usageAmount: "ব্যাবহার" +capacity: "ধারণক্ষমতা" +inUse: "ব্যবহৃত" +editCode: "কোড সম্পাদনা করুন" +apply: "প্রয়োগ করুন" +receiveAnnouncementFromInstance: "এই ইন্সট্যান্স থেকে বিজ্ঞপ্তি পান" +emailNotification: "ইমেইল বিজ্ঞপ্তি" +publish: "প্রকাশ" +inChannelSearch: "চ্যানেলে খুঁজুন" +useReactionPickerForContextMenu: "রাইট ক্লিকের মাধ্যমে রিঅ্যাকশন পিকার খুলুন" +typingUsers: "{users} লেখছে" +jumpToSpecifiedDate: "একটি নির্দিষ্ট তারিখে যান" +showingPastTimeline: "অতীতের টাইমলাইন দেখানো হচ্ছে" +clear: "পরিষ্কার" +markAllAsRead: "সব পঠিত হিসেবে চিহ্নিত করুন" +goBack: "পিছনে" +unlikeConfirm: "আসলেই লাইক সরিয়ে নিবেন?" +fullView: "ফুল ভিউ" +quitFullView: "ফুল ভিউ বন্ধ করুন" +addDescription: "বর্ণনা যোগ করুন" +userPagePinTip: "আপনি প্রতিটি নোটের জন্য মেনু থেকে \"প্রোফাইলে পিন করুন\" নির্বাচন + করে আপনার নোটগুলি এখানে প্রদর্শন করতে পারেন।" +notSpecifiedMentionWarning: "প্রাপক ছাড়াও এই নোটে অন্য ব্যাবহারকারীদের উল্লেখ্য করা + হয়েছে" +info: "আপনার সম্পর্কে" +userInfo: "ব্যবহারকারীর তথ্য" +unknown: "অজানা" +onlineStatus: "অনলাইন স্ট্যাটাস" +hideOnlineStatus: "অনলাইন স্ট্যাটাস লুকান" +hideOnlineStatusDescription: "অনলাইন স্ট্যাটাস লুকিয়ে রাখলে সার্চের মতো কিছু ফাংশনের + সুবিধা কমে যায়।" +online: "অনলাইন" +active: "অ্যাকটিভ" +offline: "অফলাইন" +notRecommended: "সুপারিশ করা হয় না" +botProtection: "বট প্রোটেকশন" +instanceBlocking: "ব্লক করা ইন্সট্যান্সগুলি" +selectAccount: "অ্যাকাউন্ট নির্বাচন" +switchAccount: "অ্যাকাউন্ট পাল্টান" +enabled: "চালু" +disabled: "বন্ধ" +quickAction: "কুইক অ্যাকশন" +user: "ব্যবহারকারীগণ" +administration: "পরিচালনা" +accounts: "অ্যাকাউন্টগুলি" +switch: "পাল্টান" +noMaintainerInformationWarning: "প্রশাসকের তথ্য সেট করা হয়নি।" +noBotProtectionWarning: "বট প্রোটেকশন সেট করা হয়নি।" +configure: "কনফিগার করুন" +postToGallery: "গ্যালারী পোস্ট তৈরি করুন" +gallery: "গ্যালারী" +recentPosts: "নতুন পোস্ট" +popularPosts: "জনপ্রিয় পোস্ট" +shareWithNote: "নোটের মাধ্যমে শেয়ার করুন" +ads: "বিজ্ঞাপন" +expiration: "নির্দিষ্ট সময়সীমা" +memo: "মেমো" +priority: "অগ্রাধিকার" +high: "উচ্চ" +middle: "মাঝারি" +low: "নিম্ন" +emailNotConfiguredWarning: "ইমেইল অ্যাড্রেস সেট করা হয়নি।" +ratio: "অনুপাত" +previewNoteText: "প্রিভিউ দেখান" +customCss: "কাস্টম CSS" +customCssWarn: "এই ব্যাপারে অভিজ্ঞতা না থাকলে এই সেটিংটি ব্যাবহার করবেন না। অনুপযুক্ত + সেটিংস ক্লায়েন্টকে স্বাভাবিকভাবে ব্যবহার করতে বাধা দিতে পারে।" +global: "গ্লোবাল" +squareAvatars: "চারকোনা প্রোফাইল পিকচার দেখান " +sent: "পাঠান" +received: "প্রাপ্ত" +searchResult: "অনুসন্ধানের ফলাফল" +hashtags: "হ্যাশট্যাগ" +troubleshooting: "ট্রাবলশুটিং" +useBlurEffect: "UI তে ব্লার ইফেক্ট ব্যাবহার করুন" +learnMore: "আরও জানুন" +misskeyUpdated: "Firefish আপডেট করা হয়েছে!" +whatIsNew: "পরিবর্তনগুলি দেখান" +translate: "অনুবাদ" +translatedFrom: "{x} হতে অনুবাদ করা" +accountDeletionInProgress: "অ্যাকাউন্ট মুছে ফেলা হচ্ছে" +usernameInfo: "একটি নাম যা সার্ভারে আপনার অ্যাকাউন্টটিকে অনন্যভাবে সনাক্ত করে। আপনি + বর্ণমালা (a ~ z, A ~ Z), সংখ্যা (0 ~ 9), এবং আন্ডারস্কোর (_) ব্যবহার করতে পারেন। + ব্যবহারকারীর নাম পরে পরিবর্তন করা যাবে না।" +aiChanMode: "Ai মোড" +keepCw: "CW রাখুন" +pubSub: "Pub/Sub অ্যাকাউন্টগুলো" +lastCommunication: "শেষ যোগাযোগ" +resolved: "সমাধান হয়েছে" +unresolved: "সমাধান হয়নি" +breakFollow: "অনুসরণ করা বন্ধ" +itsOn: "চালু" +itsOff: "বন্ধ" +emailRequiredForSignup: "অ্যাকাউন্ট তৈরির জন্য ইমেইল এর দরকার পড়বে" +unread: "অপঠিত" +filter: "ফিল্টার" +controlPanel: "নিয়ন্ত্রন কেন্দ্র" +manageAccounts: "অ্যাকাউন্টগুলি পরিচালনা করুন" +makeReactionsPublic: "রিঅ্যাকশনের ইতিহাস উন্মুক্ত করুন" +makeReactionsPublicDescription: "আপনার পূর্ববর্তী রিঅ্যাকশনগুলির তালিকা যে কারও কাছে + দৃশ্যমান হবে।" +classic: "ক্লাসিক" +muteThread: "থ্রেড মিউট করুন" +unmuteThread: "থ্রেড আনমিউট করুন" +ffVisibility: "অনুসরণ/অনুসরণকারীদের দৃশ্যমান্যতা" +ffVisibilityDescription: "আপনি কাকে অনুসরণ করেন এবং কে আপনাকে অনুসরণ করে, সেটা কারা + দেখতে পাবে তা নির্ধারণ করে।" +continueThread: "আরো থ্রেড দেখুন" +deleteAccountConfirm: "আপনার অ্যাকাউন্ট মুছে ফেলা হবে। ঠিক আছে?" +incorrectPassword: "আপনার দেওয়া পাসওয়ার্ডটি ভুল।" +voteConfirm: "\"{choice}\" এ ভোট দিতে চান?" +hide: "লুকান" +leaveGroup: "গ্রুপ ছেড়ে চলে যান" +leaveGroupConfirm: "\"{name}\" গ্রুপ ছেড়ে চলে যেতে চান?" +useDrawerReactionPickerForMobile: "মোবাইলে রিঅ্যাকশন পিকারকে ড্রয়ারে প্রদর্শন করুন" +welcomeBackWithName: "আবার স্বাগতম, {name}" +clickToFinishEmailVerification: " [{ok}] ক্লিক করার মাধ্যমে আপনার ইমেল ঠিকানা নিশ্চিত + করুন।" +overridedDeviceKind: "ডিভাইসের ধরন" +smartphone: "স্মার্টফোন" +tablet: "ট্যাবলেট" +auto: "স্বয়ংক্রিয়" +themeColor: "থিমের রং" +size: "আকার" +numberOfColumn: "কলামের সংখ্যা" +instanceDefaultLightTheme: "ইন্সট্যান্সের ডিফল্ট লাইট থিম" +instanceDefaultDarkTheme: "ইন্সট্যান্সের ডিফল্ট ডার্ক থিম" +instanceDefaultThemeDescription: "অবজেক্ট ফরম্যাটে থিম কোড লিখুন" +mutePeriod: "মিউটের সময়কাল" +indefinitely: "অনির্দিষ্ট" +tenMinutes: "১০ মিনিট" +oneHour: "১ ঘণ্টা" +oneDay: "একদিন" +oneWeek: "এক সপ্তাহ" +reflectMayTakeTime: "এটির কাজ দেখা যেতে কিছুটা সময় লাগতে পারে।" +failedToFetchAccountInformation: "অ্যাকাউন্টের তথ্য উদ্ধার করা যায়নি" +rateLimitExceeded: "রেট লিমিট ছাড়িয়ে গেছে " +file: "ফাইলগুলি" +reverse: "উল্টান" +colored: "রঙ্গিন" +label: "লেবেল" +localOnly: "শুধুমাত্র লোকাল" +account: "অ্যাকাউন্টগুলি" +_emailUnavailable: + used: "এই ইমেইল ঠিকানাটি ইতোমধ্যে ব্যবহৃত হয়েছে" + format: "এই ইমেল ঠিকানাটি সঠিকভাবে লিখা হয়নি" + disposable: "অস্থায়ী ইমেইল ঠিকানা ব্যাবহার করা যাবে না" + mx: "ইমেইল ​​সার্ভারটি ঠিক নাই" + smtp: "ইমেইল সার্ভারটি সাড়া দিচ্ছে না" +_ffVisibility: + public: "প্রকাশ" + followers: "শুধুমাত্র অনুসরণকারীদের কাছে দৃশ্যমান" + private: "ব্যাক্তিগত" +_signup: + almostThere: "প্রায় শেষ" + emailAddressInfo: "আপনি যে ইমেল ঠিকানাটি ব্যবহার করবেন সেটি লিখুন। আপনার ইমেইল ঠিকানা + প্রকাশ করা হবে না।" + emailSent: "আপনার দেওয়া ইমেল ঠিকানায় ({email}) একটি নিশ্চিতকরণ ইমেল পাঠানো হয়েছে। + অ্যাকাউন্ট তৈরি সম্পূর্ণ করতে ইমেলের লিঙ্কটি অ্যাক্সেস করুন।" +_accountDelete: + accountDelete: "অ্যাকাউন্ট মুছে ফেলুন" + mayTakeTime: "একটি অ্যাকাউন্ট মুছে ফেলা একটি দীর্ঘ প্রক্রিয়া এবং আপনি যদি প্রচুর + পরিমাণে সামগ্রী তৈরি করে থাকেন বা ফাইল আপলোড করেন তবে এটি সম্পূর্ণ হতে দীর্ঘ সময় + নিতে পারে।" + sendEmail: "অ্যাকাউন্ট মুছে ফেলা সম্পূর্ণ হলে, নিবন্ধিত ইমেল ঠিকানায় একটি বিজ্ঞপ্তি + পাঠানো হবে।" + requestAccountDelete: "অ্যাকাউন্ট মুছে ফেলার অনুরোধ করুন" + started: "মুছে ফেলার প্রক্রিয়া শুরু হয়েছে।" + inProgress: "মুছে ফেলার কাজ চলছে" +_ad: + back: "পিছনে" + reduceFrequencyOfThisAd: "এই বিজ্ঞাপনটি কম দেখান" +_forgotPassword: + enterEmail: "আপনি আপনার অ্যাকাউন্টের জন্য নিবন্ধিত ইমেল ঠিকানা লিখুন. সেই ঠিকানায় + একটি পাসওয়ার্ড রিসেট লিঙ্ক পাঠানো হবে।" + ifNoEmail: "আপনি যদি নিবন্ধনের সময় ই-মেইল ঠিকানা না দিয়ে থাকেন, তাহলে অনুগ্রহ করে + প্রশাসকের সাথে যোগাযোগ করুন।" + contactAdmin: "এই ইন্সট্যান্সটি ইমেইল ব্যাবহার করে না, তাই আপনার পাসওয়ার্ড পুনরায় + সেট করতে প্রশাসকের সাথে যোগাযোগ করুন৷" +_gallery: + my: "আমার গ্যালারী" + liked: "পছন্দ করা পোস্ট" + like: "পছন্দ করা" + unlike: "পছন্দ সরান" +_email: + _follow: + title: "আপনাকে অনুসরণ করছে" + _receiveFollowRequest: + title: "অনুসরণ করার অনুরোধ পেয়েছেন" +_plugin: + install: "প্লাগইন ইন্সটল করুন" + installWarn: "অবিশ্বস্ত প্লাগইন ইনস্টল করবেন না।" + manage: "প্লাগইন ম্যানেজ করুন" +_registry: + scope: "স্কোপ" + key: "কী" + keys: "কী - সমূহ" + domain: "ডোমেন" + createKey: "কী বানান" +_aboutFirefish: + about: "Misskey, একটি ওপেন সোর্স সফ্টওয়্যার যা 2014 সাল থেকে syuilo তৈরি করছেন।" + contributors: "প্রধান কন্ট্রিবিউটারগণ" + allContributors: "সকল কন্ট্রিবিউটারগণ" + source: "সোর্স কোড" + translation: "Firefish অনুবাদ করুন" + donate: "Firefish তে দান করুন" +_nsfw: + respect: "স্পর্শকাতর মিডিয়া লুকান" + ignore: "স্পর্শকাতর মিডিয়া লুকাবেন না" + force: "সকল মিডিয়া লুকান" +_mfm: + cheatSheet: "MFM চিটশিট" + intro: "MFM একটি মার্কআপ ভাষা যা Firefish-এর মধ্যে বিভিন্ন জায়গায় ব্যবহার করা + যেতে পারে। এখানে আপনি MFM-এর সিনট্যাক্সগুলির একটি তালিকা দেখতে পারবেন।" + dummy: "মিসকি ফেডিভার্সের বিশ্বকে প্রসারিত করে" + mention: "উল্লেখ" + mentionDescription: "@ চিহ্ন + ব্যবহারকারীর নাম একটি নির্দিষ্ট ব্যবহারকারীকে নির্দেশ + করতে ব্যবহার করা যায়।" + hashtag: "হ্যাশট্যাগ" + hashtagDescription: "আপনি একটি # চিহ্ন + ট্যাগ সহ একটি হ্যাশট্যাগ নির্দেশ করতে পারেন।" + url: "URL" + urlDescription: "URL দেখানো সম্ভব।" + link: "লিংক" + linkDescription: "আপনি পাঠ্যের একটি নির্দিষ্ট অংশকে URL হিসাবে দেখাতে পারেন৷" + bold: "গাঢ়" + boldDescription: "অক্ষরগুলিকে মোটাকরে প্রদর্শন করা হবে।" + small: "ছোট" + smallDescription: "লেখা ছোট এবং পাতলা করে দেখানো হবে।" + center: "সেন্টার" + centerDescription: "লেখা মাঝ বরাবর দেখানো হবে" + inlineCode: "কোড (ইনলাইন)" + inlineCodeDescription: " প্রোগ্রামের কোডের জন্য ইনলাইন সিনট্যাক্স হাইলাইটিং করা + হবে" + blockCode: "কোড (ব্লক)" + blockCodeDescription: "মাল্টি-লাইন প্রোগ্রামের কোডের জন্য সিনট্যাক্স হাইলাইট করে।" + inlineMath: "গাণিতিক সূত্র (ইনলাইন)" + inlineMathDescription: "গাণিতিক সূত্র প্রদর্শন করুন (KaTeX) ইনলাইন।" + blockMath: "গাণিতিক সূত্র (ব্লক)" + blockMathDescription: "একটি ব্লকে একাধিক লাইনের গাণিতিক সূত্র প্রদর্শন করুন (KaTeX)।" + quote: "উদ্ধৃতি" + quoteDescription: "বিষয়বস্তুকে একটি উদ্ধৃতি হিসাবে দেখানো হবে।" + emoji: "স্বনির্ধারিত ইমোজিগুলি" + emojiDescription: "আপনি একটি কাস্টম ইমোজির নাম কোলনে আবদ্ধ করে কাস্টম ইমোজিটি দেখাতে + পারেন৷" + search: "খুঁজুন" + searchDescription: "পূর্ব-টাইপ করা পাঠ্য সহ একটি অনুসন্ধান বাক্স প্রদর্শন করে।" + flip: "উল্টান" + flipDescription: "বিষয়বস্তু উপরে/নীচে বা বাম/ডানে উল্টান।" + jelly: "অ্যানিমেশন (জেলি)" + jellyDescription: "জেলির মত অ্যানিমেশন দেখায়।" + tada: "অ্যানিমেশন (টাডা)" + tadaDescription: "\"টাডা!\" এর মত অ্যানিমেশন দেখায়।" + jump: "অ্যানিমেশন (লাফ)" + jumpDescription: "বিষয়বস্তুতে লাফ মারার মত অ্যানিমেশন দেখায়।" + bounce: "অ্যানিমেশন (তিড়িং বিড়িং)" + bounceDescription: "তিড়িং বিড়িং করার মত অ্যানিমেশন দেখায়।" + shake: "অ্যানিমেশন (ঝাঁকি)" + shakeDescription: "ঝাঁকির মত অ্যানিমেশন দেখায়।" + twitch: "অ্যানিমেশন (মোচড়ানো)" + twitchDescription: "মোচড়ানোর মত অ্যানিমেশন দেখায়।" + spin: "অ্যানিমেশন (ঘুরা)" + spinDescription: "ঘুরার মত অ্যানিমেশন দেখায়।" + x2: "বড়" + x2Description: "বিষয়বস্তু বড় করে দেখায়।" + x3: "অনেক বড়" + x3Description: "বিষয়বস্তু আরও বড় করে দেখায়।" + x4: "অস্বাভাবিক বড়" + x4Description: "বিষয়বস্তুকে আগের থেকেও আরও বড় করে দেখায়।" + blur: "ব্লার" + blurDescription: "বিষয়বস্তুকে ব্লার করতে পারেন। আপনি এর উপর মাউস কার্সার রাখলে, + এটি পরিষ্কারভাবে দেখতে পাবেন।" + font: "ফন্ট" + fontDescription: "বিষয়বস্তুকে কোন ফন্টে দেখানো হবে তা নির্ধারণ করে।" + rainbow: "রেইনবো" + rainbowDescription: "বিষয়বস্তুকে রংধনুর রং গুলিতে প্রদর্শন করে।" + sparkle: "চিক চিক" + sparkleDescription: "বিষয়বস্তুকে একটি চিকচিকে কণা প্রভাব দেয়।" + rotate: "ঘুরান" + rotateDescription: "বিষয়বস্তুকে একটি নির্দিষ্ট কোনে ঘুরায়।" +_instanceTicker: + none: "দেখাবেন না" + remote: "রিমোট ব্যাবহারকারীদের জন্য দেখান" + always: "সর্বদা দেখান" +_serverDisconnectedBehavior: + reload: "স্বয়ংক্রিয়ভাবে রিলোড" + dialog: "সতর্কতা ডায়ালগ দেখান" + quiet: "অগচরী সতর্কতা দেখান" +_channel: + create: "চ্যানেল বানান" + edit: "চ্যানেল সম্পাদনা করুন" + setBanner: "ব্যানার সেট করুন" + removeBanner: "ব্যানার সরান" + featured: "বর্তমানে জনপ্রিয়" + owned: "নিজের" + following: "অনুসরণ করা হচ্ছে" + usersCount: "{n} জন অংশগ্রহণকারী" + notesCount: "{n} টি নোট" +_menuDisplay: + sideFull: "পাশে" + sideIcon: "পাশে (আইকন)" + top: "শীর্ষে" + hide: "লুকান" +_wordMute: + muteWords: "নিঃশব্দ করা শব্দগুলি" + muteWordsDescription: "স্পেস দিয়ে আলাদা করলে AND শর্ত তৈরি হবে এবং আলাদা লাইনে + লিখলে OR শর্ত তৈরি হবে।" + muteWordsDescription2: "রেগুলার এক্সপ্রেশন ব্যবহার করতে স্ল্যাশ দিয়ে কীওয়ার্ডকে + ঘিরে রাখুন।" + softDescription: "টাইমলাইন থেকে নির্দিষ্ট শর্তানুযায়ী নোট লুকিয়ে রাখে।" + hardDescription: "নির্দিষ্ট শর্তানুযায়ী নোটগুলিকে টাইমলাইন থেকে বাদ দেয়। আপনি শর্ত + পরিবর্তন করলেও যে নোটগুলি যোগ করা হয়নি সেগুলি বাদ দেওয়া হবে।" + soft: "নমনীয়" + hard: "কঠোর" + mutedNotes: "মিউট করা নোটগুলি" +_instanceMute: + instanceMuteDescription: "কনফিগার করা ইন্সট্যান্সের সব নোট এবং রিনোট মিউট করুন, + মিউট করা ইন্সট্যান্সের ব্যবহারকারীদের উত্তর সহ।" + instanceMuteDescription2: "প্রতিটিকে আলাদা লাইনে লিখুন" + title: "কনফিগার করা ইন্সট্যান্সের নোটগুলিকে লুকিয়ে রাখে।" + heading: "মিউট করা ইন্সত্যান্সের তালিকা" +_theme: + explore: "থিমগুলি ঘুরে দেখুন" + install: "থিম ইনস্টল করুন" + manage: "থিম ব্যাবস্থাপনা" + code: "থিম কোড" + description: "বর্ণনা" + installed: "{name} ইন্সটল করা হয়েছে" + installedThemes: "ইন্সটল করা থিমসমূহ" + builtinThemes: "বিল্ট-ইন থিমসমূহ" + alreadyInstalled: "এই থিমটি ইতিমধ্যে ইন্সটল করা হয়েছে" + invalid: "থিমটির ফরম্যাট সঠিক নয়" + make: "থিম বানান" + base: "বেস" + addConstant: "ধ্রুবক যোগ করুন" + constant: "ধ্রুবক" + defaultValue: "ডিফল্ট মান" + color: "রং" + refProp: "প্রোপার্টি রেফারেন্স করুন" + refConst: "ধ্রুবক রেফারেন্স করুন" + key: "কী" + func: "ফাংশন" + funcKind: "ফাংশনের ধরন" + argument: "আর্গুমেন্ট" + basedProp: "রেফারেন্স করা প্রোপার্টি" + alpha: "অস্বচ্ছতা" + darken: "অন্ধকার করুন" + lighten: "উজ্জ্বল করুন" + inputConstantName: "ধ্রুবকটির নাম লিখুন" + importInfo: "আপনি এখানে থিম কোড পেস্ট করতে পারেন এবং সেটিকে এডিটরে ইম্পোর্ট করতে + পারেন" + deleteConstantConfirm: "আপনি কি ধ্রুবক {const} মুছে ফেলতে চান?" + keys: + accent: "অ্যাকসেন্ট" + bg: "পটভূমি" + fg: "লেখা" + focus: "ফোকাস" + indicator: "ইনডিকেটর" + panel: "প্যানেল" + shadow: "ছায়া" + header: "হেডার" + navBg: "সাইডবারের পটভূমি" + navFg: "সাইডবারের পাঠ্য" + navHoverFg: "সাইডবারের পাঠ্য (হভার)" + navActive: "সাইডবারের পাঠ্য (অ্যাকটিভ)" + navIndicator: "সাইডবারের ইনডিকেটর" + link: "লিংক" + hashtag: "হ্যাশট্যাগ" + mention: "উল্লেখ" + mentionMe: "আপনাকে উল্লেখ্য করা" + renote: "রিনোট" + modalBg: "মোডালের পটভূমি" + divider: "খন্ডক" + scrollbarHandle: "স্ক্রলবার হ্যান্ডেল" + scrollbarHandleHover: "স্ক্রলবার হ্যান্ডেল (হভার)" + dateLabelFg: "তারিখ লেবেলের পাঠ্য" + infoBg: "তথ্যের পটভূমি" + infoFg: "তথ্যের পাঠ্য" + infoWarnBg: "ওয়ার্নিং এর পটভূমি" + infoWarnFg: "ওয়ার্নিং এর পাঠ্য" + cwBg: "CW বাটনের পটভূমি" + cwFg: "CW বাটনের পাঠ্য" + cwHoverBg: "CW বাটনের পটভূমি (হভার)" + toastBg: "বিজ্ঞপ্তির পটভূমি" + toastFg: "বিজ্ঞপ্তির পাঠ্য" + buttonBg: "বাটনের পটভূমি" + buttonHoverBg: "বাটনের পটভূমি (হভার)" + inputBorder: "ইনপুট ফিল্ডের বর্ডার" + listItemHoverBg: "লিস্ট আইটেমের পটভূমি (হোভার)" + driveFolderBg: "ড্রাইভ ফোল্ডারের পটভূমি" + wallpaperOverlay: "ওয়ালপেপার ওভারলে" + badge: "ব্যাজ" + messageBg: "চ্যাটের পটভূমি" + accentDarken: "অ্যাকসেন্ট (গাঢ়)" + accentLighten: "অ্যাকসেন্ট (হাল্কা)" + fgHighlighted: "হাইলাইট করা পাঠ্য" +_sfx: + note: "নোটগুলি" + noteMy: "নোট (আপনার)" + notification: "বিজ্ঞপ্তি" + chat: "চ্যাট" + chatBg: "চ্যাট (ব্যাকগ্রাউন্ড)" + antenna: "অ্যান্টেনাগুলি" + channel: "চ্যানেলের বিজ্ঞপ্তি" +_ago: + future: "ভবিষ্যৎ" + justNow: "এইমাত্র" + secondsAgo: "{n} সেকেন্ড আগে" + minutesAgo: "{n} মিনিট আগে" + hoursAgo: "{n} ঘণ্টা আগে" + daysAgo: "{n} দিন আগে" + weeksAgo: "{n} সপ্তাহ আগে" + monthsAgo: "{n} মাস আগে" + yearsAgo: "{n} বছর আগে" +_time: + second: "সেকেন্ড" + minute: "মিনিট" + hour: "ঘণ্টা" + day: "দিন" +_tutorial: + title: "How to use Firefish" + step1_1: "Welcome!" + step1_2: "Let's get you set up. You'll be up and running in no time!" + step2_1: "First, please fill out your profile." + step2_2: "Providing some information about who you are will make it easier for others + to tell if they want to see your notes or follow you." + step3_1: "Now time to follow some people!" + step3_2: "Your home and social timelines are based off of who you follow, so try + following a couple accounts to get started.\nClick the plus circle on the top + right of a profile to follow them." + step4_1: "Let's get you out there." + step4_2: "For your first post, some people like to made a {introduction} post or + a simple \"Hello world!\"" + step5_1: "Timelines, timelines everywhere!" + step5_2: "Your instance has {timelines} different timelines enabled." + step5_3: "The Home {icon} timeline is where you can see posts from your followers." + step5_4: "The Local {icon} timeline is where you can see posts from everyone else + on this instance." + step5_5: "The Recommended {icon} timeline is where you can see posts from instances + the admins recommend." + step5_6: "The Social {icon} timeline is where you can see posts from friends of + your followers." + step5_7: "The Global {icon} timeline is where you can see posts from every other + connected instance." + step6_1: "So, what is this place?" + step6_2: "Well, you didn't just join Firefish. You joined a portal to the Fediverse, + an interconnected network of thousands of servers, called \"instances\"." + step6_3: "Each server works in different ways, and not all servers run Firefish. + This one does though! It's a bit complicated, but you'll get the hang of it in + no time." + step6_4: "Now go, explore, and have fun!" +_2fa: + alreadyRegistered: "আপনি ইতিমধ্যে একটি 2-ফ্যাক্টর অথেনটিকেশন ডিভাইস নিবন্ধন করেছেন৷" + registerTOTP: "নতুন ডিভাইস নিবন্ধন করুন" + registerSecurityKey: "সিকিউরিটি কী নিবন্ধন করুন" + step1: "প্রথমে, আপনার ডিভাইসে {a} বা {b} এর মতো একটি অথেনটিকেশন অ্যাপ ইনস্টল করুন৷" + step2: "এরপরে, অ্যাপের সাহায্যে প্রদর্শিত QR কোডটি স্ক্যান করুন।" + step2Url: "ডেস্কটপ অ্যাপে, নিম্নলিখিত URL লিখুন:" + step3: "অ্যাপে প্রদর্শিত টোকেনটি লিখুন এবং আপনার কাজ শেষ।" + step4: "আপনাকে এখন থেকে লগ ইন করার সময়, এইভাবে টোকেন লিখতে হবে।" + securityKeyInfo: "আপনি একটি হার্ডওয়্যার সিকিউরিটি কী ব্যবহার করে লগ ইন করতে পারেন + যা FIDO2 বা ডিভাইসের ফিঙ্গারপ্রিন্ট সেন্সর বা পিন সমর্থন করে৷" +_permissions: + "read:account": "অ্যাকাউন্টের তথ্য দেখুন" + "write:account": "অ্যাকাউন্টের তথ্য সম্পাদন করুন" + "read:blocks": "ব্লক করা ব্যাবহারকারীদের তালিকা দেখুন" + "write:blocks": "ব্লক করা ব্যাবহারকারীদের তালিকা সম্পাদনা করুন" + "read:drive": "ড্রাইভের ফাইল এবং ফোল্ডারসমূহ পড়া" + "write:drive": "ড্রাইভের ফাইল এবং ফোল্ডারসমূহ সম্পাদনা করা" + "read:favorites": "পছন্দের তালিকা পড়া" + "write:favorites": "পছন্দের তালিকা সম্পাদনা করা" + "read:following": "অনুসরণ তথ্য দেখুন" + "write:following": "অনুসরণ তথ্য সম্পাদনা করা" + "read:messaging": "চ্যাটগুলি দেখুন" + "write:messaging": "চ্যাটগুলি সম্পাদনা করুন" + "read:mutes": "মিউটের লিস্ট দেখুন" + "write:mutes": "মিউটের লিস্ট সম্পাদনা করুন" + "write:notes": "নোট লিখা" + "read:notifications": "বিজ্ঞপ্তিগুলি দেখুন" + "write:notifications": "বিজ্ঞপ্তি নিয়ে কাজ করে" + "read:reactions": "রিঅ্যাকশনগুলি দেখুন" + "write:reactions": "রিঅ্যাকশনগুলি সম্পাদনা করুন" + "write:votes": "ভোট দিন" + "read:pages": "আপনার পেজগুলি দেখুন" + "write:pages": "পেজগুলি সম্পাদনা বা ডিলিট করুন" + "read:page-likes": "পৃষ্ঠায় দেয়া পছন্দগুলি দেখুন" + "write:page-likes": "পৃষ্ঠায় দেয়া পছন্দগুলি সম্পাদনা করুন" + "read:user-groups": "ব্যাবহারকারী গ্রুপগুলি দেখুন" + "write:user-groups": "ব্যাবহারকারী গ্রুপগুলি সম্পাদনা করুন" + "read:channels": "চ্যানেলগুলি দেখুন" + "write:channels": "চ্যানেলগুলি সম্পাদনা করুন" + "read:gallery": "গ্যালারী দেখুন" + "write:gallery": "গ্যালারী সম্পাদনা করুন" + "read:gallery-likes": "গ্যালারীর পছন্দগুলি দেখুন" + "write:gallery-likes": "গ্যালারীর পছন্দগুলি সম্পাদনা করুন" +_auth: + shareAccess: "\"{name}\" কে অ্যাকাউন্টের অ্যাক্সেস দিবেন?" + shareAccessAsk: "অ্যাপ্লিকেশনটিকে অ্যাকাউন্টের অ্যাক্সেস দিবেন?" + permissionAsk: "এই অ্যাপ্লিকেশনটি নিম্নলিখিত অনুমতি চাই" + pleaseGoBack: "দয়া করে অ্যাপ্লিকেশনে ফিরে যান" + callback: "অ্যাপ্লিকেশনে ফিরে যাচ্ছি" + denied: "প্রবেশ নিষেধ" +_antennaSources: + all: "সকল নোট" + homeTimeline: "আপনি অনুসরণ করছেন, এমন ব্যবহারকারীদের নোট" + users: "এক বা একাধিক নির্দিষ্ট ব্যবহারকারীর নোট" + userList: "নির্দিষ্ট তালিকায় নাম থাকা ব্যবহারকারীদের নোট" + userGroup: "নির্দিষ্ট গ্রুপে থাকা ব্যবহারকারীদের নোট" +_weekday: + sunday: "রবিবার" + monday: "সোমবার" + tuesday: "মঙ্গলবার" + wednesday: "বুধবার" + thursday: "বৃহস্পতিবার" + friday: "শুক্রবার" + saturday: "শনিবার" +_widgets: + memo: "স্টিকি নোট" + notifications: "বিজ্ঞপ্তি" + timeline: "টাইমলাইন" + calendar: "ক্যালেন্ডার" + trends: "বর্তমানে জনপ্রিয়" + clock: "ঘড়ি" + rss: "RSS রিডার" + activity: "কার্যকলাপ" + photos: "ফটোগুলি" + digitalClock: "ডিজিটাল ঘড়ি" + federation: "ফেডিভার্স" + postForm: "নোট লিখুন" + slideshow: "স্লাইডশো" + button: "বাটন" + onlineUsers: "অনলাইনে থাকা ব্যবহারকারীগণ" + jobQueue: "জব কিউ" + serverMetric: "সার্ভার মেট্রিক্স" + aiscript: "AiScript কনসোল" + aichan: "আই চান" +_cw: + hide: "লুকান" + show: "আরও দেখুন" + chars: "{count} টি অক্ষর" + files: "{count} টি ফাইল" +_poll: + noOnlyOneChoice: "সর্বনিম্ন 2 টি অপশন বেছে নিতে হবে" + choiceN: "বিকল্পগুলি {n}" + noMore: "আপনি আর কোন বিকল্প যোগ করতে পারবেন না" + canMultipleVote: "একাধিক বিকল্প বাছাই করা যাবে" + expiration: "পোলের সময়সীমা" + infinite: "অনির্দিষ্ট" + at: "শেষ হবে" + after: "শেষ হবে" + deadlineDate: "শেষ হওয়ার তারিখ" + deadlineTime: "ঘণ্টা" + duration: "ব্যাপ্তিকাল" + votesCount: "{n} টি ভোট" + totalVotes: "সর্বমোট {n} টি ভোট" + vote: "ভোট দিন" + showResult: "রেজাল্ট দেখান" + voted: "ভোট দিয়েছেন" + closed: "শেষ হয়ে গেছে" + remainingDays: "আর {d} দিন {h} ঘণ্টা বাকি আছে" + remainingHours: "আর {h} ঘণ্টা {m} মিনিট বাকি আছে" + remainingMinutes: "আর বাকি আছে {m} মিনিট {s} সেকেন্ড" + remainingSeconds: "আর বাকি আছে {s} সেকেন্ড" +_visibility: + public: "সর্বজনীন" + publicDescription: "সবাই আপনার নোটগুলি দেখতে পাবে" + home: "মূল পাতা" + homeDescription: "শুধুমাত্র হোম টাইমলাইনে আপনার নোটগুলি পোস্ট করুন" + followers: "অনুসরণকারী" + followersDescription: "শুধুমাত্র আপনার অনুসরণকারীদের নিকট পোস্ট করুন" + specified: "ডাইরেক্ট নোট" + specifiedDescription: "শুধুমাত্র নির্দিষ্ট ব্যাবহারকারীর নিকট পাঠান" + localOnly: "শুধুমাত্র লোকাল" + localOnlyDescription: "রিমোট ব্যাবহারকারীদের নিকট দৃশ্যমান নয়" +_postForm: + replyPlaceholder: "নোটটির জবাব দিন..." + quotePlaceholder: "নোটটিকে উদ্ধৃত করুন..." + channelPlaceholder: "চ্যানেলে পোস্ট করুন..." + _placeholders: + a: "আপনি এখন কি করছেন?" + b: "আপনার আশে পাশে কি হচ্ছে?" + c: "আপনি কি ভাবছেন?" + d: "আপনি কি বলতে চান?" + e: "লেখা শুরু করুন..." + f: "আপনার লেখার জন্য অপেক্ষা করছি..." +_profile: + name: "নাম" + username: "ব্যবহারকারীর নাম" + description: "আপনার সম্পর্কে" + youCanIncludeHashtags: "হ্যাশট্যাগ অন্তর্ভুক্ত করা যেতে পারে।" + metadata: "অতিরিক্ত তথ্য" + metadataEdit: "অতিরিক্ত তথ্য সম্পাদনা করুন" + metadataDescription: "আপনি আপনার প্রোফাইলে একটি টেবিল হিসাবে চারটি অতিরিক্ত তথ্য + দেখাতে পারেন।. আপনি আপনার প্রোফাইলে লিঙ্কটি যাচাই করতে {rel} এর সাথে একটি {a} + ট্যাগ বা {l} ট্যাগ যোগ করতে পারেন!" + metadataLabel: "লেবেল" + metadataContent: "বিষয়বস্তু" + changeAvatar: "অ্যাভাটার পরিবর্তন করুন" + changeBanner: "ব্যানার পরিবর্তন করুন" +_exportOrImport: + allNotes: "সকল নোট" + followingList: "অনুসরণ করা হচ্ছে" + muteList: "মিউট" + blockingList: "ব্লক" + userLists: "লিস্ট" + excludeMutingUsers: "মিউটকৃত ব্যবহারকারীদের বাদ দিন" + excludeInactiveUsers: "অব্যাবহৃত অ্যাকাউন্ট বাদ দিন" +_charts: + federation: "ফেডিভার্স" + apRequest: "অনুরোধসমূহ" + usersIncDec: "ব্যবহারকারীদের সংখ্যার পরিবর্তন" + usersTotal: "ব্যবহারকারীদের সংখ্যা" + activeUsers: "সক্রিয় ব্যাবহারকারী" + notesIncDec: "নোটের সংখ্যার পরিবর্তন" + localNotesIncDec: "লোকাল নোটের সংখ্যার পরিবর্তন" + remoteNotesIncDec: "রিমোট নোটের সংখ্যার পরিবর্তন" + notesTotal: "নোটের সংখ্যা" + filesIncDec: "ফাইলের সংখ্যার পরিবর্তন" + filesTotal: "ফাইলের সংখ্যা" + storageUsageIncDec: "স্টোরেজের ব্যাবহারের পরিবর্তন" + storageUsageTotal: "মোট স্টোরেজের ব্যাবহার" +_instanceCharts: + requests: "অনুরোধসমূহ" + users: "ব্যবহারকারীদের সংখ্যার পরিবর্তন" + usersTotal: "ক্রমবর্ধমান ব্যবহারকারীদের সংখ্যা" + notes: "নোটের সংখ্যার পরিবর্তন" + notesTotal: "ক্রমবর্ধমান নোটের সংখ্যা" + ff: "অনুসরণকারী / অনুসরণ করা ব্যাবহারকারীদের সংখ্যার পরিবর্তন" + ffTotal: "অনুসরণকারী / অনুসরণ করা ব্যাবহারকারীদের ক্রমবর্ধমান সংখ্যা" + cacheSize: "ক্যাশ সাইজের পরিবর্তন" + cacheSizeTotal: "ক্রমবর্ধমান ক্যাশ সাইজ" + files: "ফাইলের সংখ্যার পরিবর্তন" + filesTotal: "ক্রমবর্ধমান ফাইলের সংখ্যা" +_timelines: + home: "মূল পাতা" + local: "স্থানীয়" + social: "সামাজিক" + global: "গ্লোবাল" +_pages: + newPage: "নতুন পৃষ্ঠা বানান" + editPage: "পৃষ্ঠাটি সম্পাদনা করুন" + readPage: "উৎস দেখছেন" + created: "পৃষ্ঠা তৈরি করা হয়েছে" + updated: "পৃষ্ঠা সম্পাদনা করা হয়েছে" + deleted: "পৃষ্ঠা মুছে ফেলা হয়েছে" + pageSetting: "পৃষ্ঠার সেটিংস" + nameAlreadyExists: "পৃষ্ঠার URLটি ইতিমধ্যেই ব্যাবহার করা হয়েছে" + invalidNameTitle: "পৃষ্ঠার URL অবৈধ" + invalidNameText: "নিশ্চিত করুন যে এটি ফাঁকা নয়" + editThisPage: "পৃষ্ঠাটি সম্পাদনা করুন" + viewSource: "উৎস দেখুন" + viewPage: "আপনার পেজগুলি দেখুন" + like: "পছন্দ" + unlike: "পছন্দ সরান" + my: "আমার পৃষ্ঠাগুলি" + liked: "পছন্দ করা পৃষ্ঠাগুলি" + featured: "জনপ্রিয়" + inspector: "ইনিস্পেক্টর" + contents: "বিষয়বস্তু" + content: "পৃষ্ঠার ব্লক" + variables: "চলকগুলি" + title: "শিরোনাম" + url: "পৃষ্ঠার URL" + summary: "পৃষ্ঠার বর্ণনা" + alignCenter: "সেন্টার" + hideTitleWhenPinned: "পিন করা হলে টাইটেল লুকান" + font: "ফন্ট" + fontSerif: "সেরিফ" + fontSansSerif: "স্যান্স সেরিফ" + eyeCatchingImageSet: "থাম্বনেইল সেট করুন" + eyeCatchingImageRemove: "থাম্বনেইল সরান" + chooseBlock: "ব্লক যোগ করুন" + selectType: "ধরন নির্বাচন করুন" + enterVariableName: "চলকের নাম লিখুন" + variableNameIsAlreadyUsed: "চলকের নামটি ইতিপূর্বে ব্যাবহৃত হয়েছে" + contentBlocks: "বিষয়বস্তু" + inputBlocks: "ইনপুট" + specialBlocks: "বিশেষ" + blocks: + text: "লেখা" + textarea: "টেক্সট এরিয়া" + section: "বিভাগ" + image: "ছবি" + button: "বাটন" + if: "যদি" + _if: + variable: "চলকগুলি" + post: "নোট লিখুন" + _post: + text: "বিষয়বস্তু" + attachCanvasImage: "ক্যানভাস ছবিসহ পোস্ট করুন" + canvasId: "ক্যানভাস ID" + textInput: "টেক্সট ইনপুট" + _textInput: + name: "চলকের নাম" + text: "শিরোনাম" + default: "ডিফল্ট মান" + textareaInput: "একাধিক লাইনের টেক্সট ইনপুট" + _textareaInput: + name: "চলকের নাম" + text: "শিরোনাম" + default: "ডিফল্ট মান" + numberInput: "সংখ্যা ইনপুট" + _numberInput: + name: "চলকের নাম" + text: "শিরোনাম" + default: "ডিফল্ট মান" + canvas: "ক্যানভাস" + _canvas: + id: "ক্যানভাস ID" + width: "প্রস্থ" + height: "উচ্চতা" + note: "এম্বেড নোট" + _note: + id: "নোট ID" + idDescription: "আপনি এর বদলে নোটের URL পেস্ট করতে পারেন." + detailed: "বিস্তারিত দেখুন" + switch: "সুইচ" + _switch: + name: "চলকের নাম" + text: "শিরোনাম" + default: "ডিফল্ট মান" + counter: "কাউন্টার" + _counter: + name: "চলকের নাম" + text: "শিরোনাম" + inc: "এভাবে মান বাড়ান" + _button: + text: "শিরোনাম" + colored: "রঙ্গিন" + action: "বাটনে ক্লিক করলে যা হবে" + _action: + dialog: "ডায়ালগ দেখান " + _dialog: + content: "বিষয়বস্তু" + resetRandom: "র‍্যানডম সিড রিসেট করুন" + pushEvent: "ইভেন্ট পাঠান" + _pushEvent: + event: "ইভেন্টের নাম" + message: "চালু হলে প্রদর্শনের জন্য বার্তা" + variable: "পাঠানো চলক" + no-variable: "কিছুই না" + callAiScript: "AiScript চালান" + _callAiScript: + functionName: "ফাংশনের নাম" + radioButton: "বহুনির্বাচনী" + _radioButton: + name: "চলকের নাম" + title: "শিরোনাম" + values: "বিকল্পগুলিকে আলাদা লাইনে লিখুন" + default: "ডিফল্ট মান" + script: + categories: + flow: "নিয়ন্ত্রণ" + logical: "লজিক্যাল অপারেশন" + operation: "হিসাব-নিকাশ" + comparison: "তুলনা" + random: "র‍্যান্ডম" + value: "মান" + fn: "ফাংশন" + text: "টেক্সট ম্যানিপুলেশন" + convert: "রুপান্তর" + list: "লিস্ট" + blocks: + text: "লেখা" + multiLineText: "লেখা (একাধিক লাইন)" + textList: "লেখার লিস্ট" + _textList: + info: "প্রতিটি এন্ট্রিকে আলাদা লাইনে লিখুন" + strLen: "লেখার দৈর্ঘ্য" + _strLen: + arg1: "লেখা" + strPick: "অক্ষর বের করে আনুন" + _strPick: + arg1: "লেখা" + arg2: "অক্ষরের অবস্থান" + strReplace: "লেখা প্রতিস্থাপন" + _strReplace: + arg1: "লেখা" + arg2: "যে লেখা প্রতিস্থাপন করা হবে" + arg3: "যা দ্বারা প্রতিস্থাপন করা হবে" + strReverse: "লেখা উল্টান" + _strReverse: + arg1: "লেখা" + join: "লেখা যুক্ত করুন" + _join: + arg1: "লিস্ট" + arg2: "বিভাজক" + add: "যোগ" + _add: + arg1: "A" + arg2: "B" + subtract: "বিয়োগ" + _subtract: + arg1: "A" + arg2: "B" + multiply: "গুন" + _multiply: + arg1: "A" + arg2: "B" + divide: "ভাগ" + _divide: + arg1: "A" + arg2: "B" + mod: "ভাগশেষ" + _mod: + arg1: "A" + arg2: "B" + round: "দশমিক রাউন্ড করুন" + _round: + arg1: "সংখ্যা" + eq: "A ও B সমান" + _eq: + arg1: "A" + arg2: "B" + notEq: "A ও B সমান না" + _notEq: + arg1: "A" + arg2: "B" + and: "A এবং B" + _and: + arg1: "A" + arg2: "B" + or: "A অথবা B" + _or: + arg1: "A" + arg2: "B" + lt: "< A , B হতে কম" + _lt: + arg1: "A" + arg2: "B" + gt: "> A , B হতে বেশী" + _gt: + arg1: "A" + arg2: "B" + ltEq: "<= A , B হতে কম বা সমান" + _ltEq: + arg1: "A" + arg2: "B" + gtEq: ">= A , B হতে বেশী বা সমান" + _gtEq: + arg1: "A" + arg2: "B" + if: "যদি" + _if: + arg1: "যদি" + arg2: "তাহলে" + arg3: "তাছাড়া" + not: "না" + _not: + arg1: "না" + random: "র‍্যান্ডম" + _random: + arg1: "সম্ভাব্যতা" + rannum: "র‍্যানডম সংখ্যা" + _rannum: + arg1: "ন্যূনতম মান" + arg2: "সর্বোচ্চ মান" + randomPick: "তালিকা থেকে দৈবচয়ন করুন" + _randomPick: + arg1: "লিস্ট" + dailyRandom: "র‍্যান্ডম সংখ্যা (প্রতিটি ব্যবহারকারীর জন্য প্রতিদিন পরিবর্তীত + হয়)" + _dailyRandom: + arg1: "সম্ভাব্যতা" + dailyRannum: "র‍্যান্ডম সংখ্যা (প্রতিটি ব্যবহারকারীর জন্য প্রতিদিন পরিবর্তীত + হয়)" + _dailyRannum: + arg1: "ন্যূনতম মান" + arg2: "সর্বোচ্চ মান" + dailyRandomPick: "তালিকা থেকে এলোমেলোভাবে নির্বাচন করুন (প্রতিটি ব্যবহারকারীর + জন্য প্রতিদিন পরিবর্তীত হয়)" + _dailyRandomPick: + arg1: "লিস্ট" + seedRandom: "র‍্যানডম (সীড দ্বারা)" + _seedRandom: + arg1: "সীড" + arg2: "সম্ভাব্যতা" + seedRannum: "র‍্যানডম সংখ্যা (সীড দ্বারা)" + _seedRannum: + arg1: "সীড" + arg2: "ন্যূনতম মান" + arg3: "সর্বোচ্চ মান" + seedRandomPick: "তালিকা থেকে দৈবচয়ন করুন (সীড দ্বারা)" + _seedRandomPick: + arg1: "সীড" + arg2: "লিস্ট" + DRPWPM: "সম্ভাব্যতা সহ একটি তালিকা থেকে এলোমেলোভাবে নির্বাচন করুন (প্রতিটি ব্যবহারকারীর + জন্য প্রতিদিন)" + _DRPWPM: + arg1: "লেখার লিস্ট" + pick: "তালিকা থেকে নির্বাচন করুন" + _pick: + arg1: "লিস্ট" + arg2: "অবস্থান" + listLen: "লিস্টের দৈর্ঘ্য পান" + _listLen: + arg1: "লিস্ট" + number: "সংখ্যা" + stringToNumber: "পাঠ্য থেকে সংখ্যা" + _stringToNumber: + arg1: "লেখা" + numberToString: "সংখ্যা থেকে পাঠ্য" + _numberToString: + arg1: "সংখ্যা" + splitStrByLine: "পাঠ্যকে লাইনে বিভক্ত করুন" + _splitStrByLine: + arg1: "লেখা" + ref: "চলক" + aiScriptVar: "AiScript চলক" + fn: "ফাংশন" + _fn: + slots: "স্লটগুলি" + slots-info: "প্রতিটি স্লটকে আলাদা লাইনে লিখুন" + arg1: "আউটপুট" + for: "for-লুপ" + _for: + arg1: "কতবার চলবে" + arg2: "অ্যাকশন" + typeError: "স্লট {slot}, {expect} ধরনের মান গ্রহণ করে, কিন্তু {actual} ধরনের মান + দেওয়া হয়েছে!" + thereIsEmptySlot: "স্লট {slot} খালি!" + types: + string: "লেখা" + number: "সংখ্যা" + boolean: "ফ্ল্যাগ" + array: "লিস্ট" + stringArray: "লেখার লিস্ট" + emptySlot: "খালি স্লট" + enviromentVariables: "এনভাইরনমেন্ট ভ্যারিয়েবল" + pageVariables: "পেজের চলক" + argVariables: "ইনপুটের জায়গা" +_relayStatus: + requesting: "অপেক্ষমান" + accepted: "অনুমোদিত" + rejected: "প্রত্যাখিত" +_notification: + fileUploaded: "ফাইল সফলভাবে আপলোড করা হয়েছে" + youGotMention: "{name} আপনাকে উল্লেখ্য করেছে" + youGotReply: "{name} আপনাকে জবাব দিয়েছে" + youGotQuote: "{name} আপনাকে উদ্ধৃত করেছে" + youRenoted: "{name} এর Renote" + youGotPoll: "{name} আপনার পোলে ভোট দিয়েছে" + youGotMessagingMessageFromUser: "{name} আপনাকে মেসেজ করেছে" + youGotMessagingMessageFromGroup: "{name} গ্রুপে একটি নতুন মেসেজ আছে" + youWereFollowed: "আপনাকে অনুসরণ করছে" + youReceivedFollowRequest: "অনুসরণ করার জন্য অনুরোধ পাওয়া গেছে" + yourFollowRequestAccepted: "আপনার অনুসরণ করার অনুরোধ গৃহীত হয়েছে" + youWereInvitedToGroup: "আপনি একটি গ্রুপে আমন্ত্রিত হয়েছেন" + pollEnded: "পোলের ফলাফল দেখা যাবে" + emptyPushNotificationMessage: "আপডেট করা পুশ বিজ্ঞপ্তি" + _types: + all: "সকল" + follow: "অনুসরণ করা হচ্ছে" + mention: "উল্লেখ" + reply: "উত্তর দিন" + renote: "রিনোট" + quote: "উদ্ধৃতি" + reaction: "প্রতিক্রিয়া" + pollVote: "পোলে ভোট আছে" + pollEnded: "পোল শেষ" + receiveFollowRequest: "প্রাপ্ত অনুসরণের অনুরোধসমূহ" + followRequestAccepted: "গৃহীত অনুসরণের অনুরোধসমূহ" + groupInvited: "গ্রুপের আমন্ত্রনসমূহ" + app: "লিঙ্ক করা অ্যাপ থেকে বিজ্ঞপ্তি" + _actions: + followBack: "ফলো ব্যাক করেছে" + reply: "জবাব" + renote: "রিনোট" +_deck: + alwaysShowMainColumn: "সর্বদা মেইন কলাম দেখান" + columnAlign: "কলাম সাজান" + addColumn: "কলাম যুক্ত করুন" + configureColumn: "কলাম সেটিংস" + swapLeft: "বামে সরান" + swapRight: "ডানে সরান" + swapUp: "উপরে উঠান" + swapDown: "নিচে নামান" + stackLeft: "বাম কলামে সাজান" + popRight: "ডানদিকে রাখুন" + profile: "প্রোফাইল" + _columns: + main: "প্রধান" + widgets: "উইজেটগুলি" + notifications: "বিজ্ঞপ্তি" + tl: "টাইমলাইন" + antenna: "অ্যান্টেনা" + list: "লিস্ট" + mentions: "উল্লেখসমূহ" + direct: "ডাইরেক্ট নোটগুলি" +removeReaction: আপনার প্রতিক্রিয়া সরান +addInstance: একটি সার্ভার যোগ করুন +deleted: মুছে ফেলা হয়েছে +editNote: পোস্ট এডিট করুন +edited: '{date} {time} এ সম্পাদিত' +searchPlaceholder: ফায়ারফিশে খুঁজুন +noThankYou: না, ধন্যবাদ +cw: সতর্কবার্তা +replies: উত্তর +quotes: উক্তি গুলো +reactions: প্রতিক্রিয়াগুলি diff --git a/locales/ca-ES.yml b/locales/ca-ES.yml new file mode 100644 index 0000000..89aede8 --- /dev/null +++ b/locales/ca-ES.yml @@ -0,0 +1,2329 @@ +_lang_: "Català" +headlineFirefish: "Una xarxa social de codi obert, descentralitzada i gratuïta per + a sempre! 🚀" +introFirefish: "Benvinguts! Firefish és una plataforma social de codi obert, descentralitzada + i gratuïta per a sempre! 🚀" +monthAndDay: "{day}/{month}" +search: "Cerca" +notifications: "Notificacions" +username: "Nom d'usuari" +password: "Contrasenya" +forgotPassword: "Contrasenya oblidada" +fetchingAsApObject: "Obtenint des de el Fediverse" +ok: "D'acord" +gotIt: "Ho he entès!" +cancel: "Cancel·la" +enterUsername: "Introdueix el teu nom d'usuari" +renotedBy: "Impulsat per {user}" +noNotes: "Sense publicacions" +noNotifications: "Sense notificacions" +instance: "Servidor" +settings: "Preferències" +basicSettings: "Configuració bàsica" +otherSettings: "Altres opcions" +openInWindow: "Obre en una finestra" +profile: "Perfil" +timeline: "Línia de temps" +noAccountDescription: "Aquest usuari encara no ha escrit la seva biografia." +login: "Inicia sessió" +loggingIn: "Iniciant sessió" +logout: "Tanca la sessió" +signup: "Registra'm" +uploading: "S'està pujant…" +save: "Desa" +users: "Usuaris" +addUser: "Afegeix un usuari" +favorite: "Afegeix a les adreces d'interès" +favorites: "Adreces d'interès" +unfavorite: "Suprimeix de les adreces d'interès" +favorited: "S'ha afegit a les adreces d'interès." +alreadyFavorited: "Ja s'ha afegit a les adreces d'interès." +cantFavorite: "No s'ha pogut afegir a les adreces d'interès." +pin: "Fixa al perfil" +unpin: "No fixis al perfil" +copyContent: "Copia el contingut" +copyLink: "Copia l'enllaç" +delete: "Suprimeix" +deleteAndEdit: "Suprimeix i edita" +deleteAndEditConfirm: "Segur que vols suprimir aquesta publicació i editar-la? Perdràs + totes les reaccions, impulsos i respostes." +addToList: "Afegeix a la llista" +sendMessage: "Envia un missatge" +copyUsername: "Copia el nom d'usuari" +searchUser: "Cerca un usuari" +reply: "Resposta" +loadMore: "Carrega'n més" +showMore: "Mostra'n més" +youGotNewFollower: "t'ha seguit" +receiveFollowRequest: "Sol·licitud de seguiment rebuda" +followRequestAccepted: "Sol·licitud de seguiment acceptada" +mention: "Menció" +mentions: "Mencions" +directNotes: "Missatges directes" +importAndExport: "Importa/exporta dades" +import: "Importa" +export: "Exporta" +files: "Fitxers" +download: "Baixa" +driveFileDeleteConfirm: "Segur que vols eliminar el fitxer «{name}»? S'eliminarà de + totes les publicacions que el continguin com a fitxer adjunt." +unfollowConfirm: "Segur que vols deixar de seguir a {name}?" +exportRequested: "Has sol·licitat una exportació. Això pot trigar una estona. S'afegirà + al teu Disc un cop finalitzada." +importRequested: "Has sol·licitat una importació de dades. Això pot trigar una estona." +lists: "Llistes" +noLists: "No tens cap llista" +note: "Publicació" +notes: "Publicacions" +following: "Seguint" +followers: "Seguidors" +followsYou: "Et segueix" +createList: "Crea una llista" +manageLists: "Gestiona les llistes" +error: "Error" +somethingHappened: "S'ha produït un error" +retry: "Torna-ho a intentar" +pageLoadError: "S'ha produït un error en carregar la pàgina." +pageLoadErrorDescription: "Això normalment es degut a errors de xarxa o a la memòria + cau del navegador. Prova d'esborrar la memòria cau i torna-ho a provar després d'esperar + una estona." +serverIsDead: "Aquest servidor no respon. Espera una estona i torna-ho a provar." +youShouldUpgradeClient: "Per veure aquesta pàgina, actualitzeu-la per actualitzar + el vostre client." +enterListName: "Introdueix un nom per a la llista" +privacy: "Privacitat" +makeFollowManuallyApprove: "Les sol·licituds de seguiment requereixen aprovació" +defaultNoteVisibility: "Visibilitat per defecte" +follow: "Segueix" +followRequest: "Sol·licitud de Seguiment" +followRequests: "Sol·licituds de seguiment" +unfollow: "Deixa de seguir" +followRequestPending: "Sol·licituds de seguiment pendents" +enterEmoji: "Introdueix un emoji" +renote: "Impulsa" +unrenote: "Anul·la l'impuls" +renoted: "Impulsat." +cantRenote: "Aquesta publicació no pot ser impulsada." +cantReRenote: "Un impuls no es pot impulsar." +quote: "Cita" +pinnedNote: "Publicació fixada" +pinned: "Fixa al perfil" +you: "Tu" +clickToShow: "Fes clic per mostrar" +sensitive: "NSFW" +add: "Afegeix" +reaction: "Reacció" +reactionSetting: "Reaccions per mostrar al selector de reaccions" +reactionSettingDescription2: "Arrossega per reordenar, fes clic per suprimir, prem + \"+\" per afegir." +rememberNoteVisibility: "Recorda la configuració de visibilitat de les publicacions" +attachCancel: "Elimina el fitxer adjunt" +markAsSensitive: "Marca com a NSFW" +unmarkAsSensitive: "Desmarca com a NSFW" +enterFileName: "Introdueix un nom de fitxer" +mute: "Silencia" +unmute: "Deixar de silenciar" +block: "Bloqueja" +unblock: "Desbloqueja" +suspend: "Suspèn" +unsuspend: "Treu la suspensió" +instances: "Servidors" +remove: "Elimina" +nsfw: "NSFW" +pinnedNotes: "Publicacions fixades" +userList: "Llistes" +smtpUser: "Nom d'usuari" +smtpPass: "Contrasenya" +user: "Usuari" +file: "Fitxer" +_email: + _follow: + title: "Tens un nou seguidor" + _receiveFollowRequest: + title: Heu rebut una sol·licitud de seguiment +_mfm: + mention: "Menció" + quote: "Citar" + search: "Cerca" + dummy: Firefish amplia el món del Fediverse + hashtag: Etiqueta + intro: MFM és un llenguatge de marques utilitzat a Misskey, Firefish, Akkoma i més + que es pot utilitzar en molts llocs. Aquí podeu veure una llista de tota la sintaxi + MFM disponible. + hashtagDescription: Podeu especificar una etiqueta mitjançant un coixinet i un text. + url: URL + urlDescription: Es poden mostrar URLS. + link: Enllaç + linkDescription: Parts específiques del text es poden mostrar com a URL. + bold: Negreta + boldDescription: Ressalta les lletres fent-les més gruixudes. + smallDescription: Mostra contingut petit i prim. + small: Petit + centerDescription: Mostra el contingut centrat. + inlineCode: Codi (en línia) + inlineMathDescription: Mostra fórmules matemàtiques (KaTeX) en línia + blockCode: Codi (Bloc) + blockCodeDescription: Mostra el ressaltat de sintaxi per al codi de diverses línies + (programa) en un bloc. + inlineMath: Matemàtiques (en línia) + jellyDescription: Dóna al contingut una animació semblant a una gelatina. + bounceDescription: Ofereix al contingut una animació de rebot. + jumpDescription: Dóna al contingut una animació de salt. + shake: Animació (Shake) + shakeDescription: Dóna al contingut una animació tremolosa. + bounce: Animació (Bounce) + x3Description: Mostra contingut encara més gran. + x2Description: Mostra contingut més gran. + twitchDescription: Ofereix al contingut una animació fortament convulsa. + spin: Animació (Spin) + spinDescription: Dóna al contingut una animació giratòria. + x2: Gran + x3: Molt gran + x4: Increïblement gran + blur: Desenfocament + x4Description: Mostra contingut fins i tot més gran que gran que gran. + rainbowDescription: Fa que el contingut aparegui en colors de l'arc de Sant Martí. + sparkle: Brillantor + sparkleDescription: Dóna al contingut un efecte de partícula brillant. + rotate: Girar + rotateDescription: Gira el contingut en un angle especificat. + positionDescription: Mou el contingut en una quantitat especificada. + fontDescription: Estableix el tipus de lletra en què voleu mostrar el contingut. + position: Posició + rainbow: Arc de Sant Martí + jelly: Animació (Jelly) + tada: Animació (Tada) + tadaDescription: Dóna al contingut una animació tipus "Tada!". + jump: Animació (Jump) + twitch: Animació (Twitch) + blurDescription: Desenfoca el contingut. Es mostrarà clarament quan passeu el cursor + per sobre. + font: Tipus de lletra + cheatSheet: Full de trucs de MFM + mentionDescription: Podeu especificar un usuari mitjançant un arrova i un nom d'usuari. + center: Centre + inlineCodeDescription: Mostra el ressaltat de sintaxi en línia per al codi (de programa). + blockMath: Matemàtiques (Bloc) + blockMathDescription: Mostra fórmules matemàtiques (KaTeX) en un bloc + quoteDescription: Mostra el contingut com una cita. + emoji: Emoji personalitzat + emojiDescription: Un emoji personalitzat és pot mostrar envoltant el nom amb dos + punts. + searchDescription: Mostra un quadre de cerca amb el text introduït prèviament. + flip: Capgirar + flipDescription: Capgira el contingut horitzontalment o verticalment. + plainDescription: Desactiva els efectes de tots els MFM continguts en aquest efecte + MFM. + scale: Escala + foreground: Color de primer pla + background: Color de fons + backgroundDescription: Canvia el color de fons del text. + scaleDescription: Escala el contingut en una quantitat especificada. + foregroundDescription: Canvia el color de primer pla del text. + plain: Pla + stop: Parar MFM + play: Posar en marxa MFM + warn: MFM pot contenir animacions cridaneres o que es mouen ràpidament + alwaysPlay: Reprodueix automàticament tots els MFM animats + fade: Esvair + fadeDescription: Esvaeix el contingut cap a dintre i cap en fora. + crop: Retallar + advanced: MFM avançat + advancedDescription: Si està desactivat, només permet l'etiquetatge bàsic tret que + es reproduïnt un MFM animat + cropDescription: Retalla el contingut. +_theme: + keys: + mention: "Menció" + renote: "Impulsar" + fg: Text + navBg: Fons de la barra lateral + navFg: Text de la barra lateral + navHoverFg: Text de la barra lateral (Hover) + hashtag: Etiquetes + mentionMe: Mencions (Jo) + infoBg: Fons de l'informació + infoFg: Text informatiu + toastBg: Fons de notificació + listItemHoverBg: Fons de la llista d'elements (Hover) + driveFolderBg: Fons de la carpeta Disc + wallpaperOverlay: Superposició de fons de pantalla + badge: Distintiu + accentLighten: Accent (Lluminós) + accentDarken: Accent (enfosquit) + fgHighlighted: Text ressaltat + indicator: Indicador + focus: Centrar-se + panel: Panell + navIndicator: Indicador de la barra lateral + accent: Accent + header: Encapçalament + navActive: Text de la barra lateral (Active) + link: Enllaç + modalBg: Fons del modal + divider: Divisor + scrollbarHandle: Mànec de la barra de desplaçament + scrollbarHandleHover: Mànec de la barra de desplaçament (Hover) + dateLabelFg: Text de l'etiqueta de data + infoWarnBg: Fons d'advertència + cwBg: Fons del botó CW + cwFg: Text del botó CW + messageBg: Fons del xat + infoWarnFg: Text d'advertència + bg: Fons + shadow: Ombra + cwHoverBg: Fons del botó CW (Hover) + toastFg: Text de notificació + buttonHoverBg: Fons del botó (Hover) + inputBorder: Vora del camp d'entrada + buttonBg: Fons del botó + description: Descripció + installed: "{name} s'ha instal·lat" + installedThemes: Temes instal·lats + builtinThemes: Temes integrats + alreadyInstalled: Aquest tema ja està instal·lat + invalid: El format d'aquest tema no és vàlid + make: Fes un tema + defaultValue: 'Per defecte: {value}' + color: Color + refProp: Fes referència a una propietat + refConst: Fes referència a una constant + key: Clau + func: Funcions + funcKind: Tipus de funció + argument: Argument + basedProp: Propietat de referència + importInfo: Si introdueixes el codi de tema aquí, podeu importar-lo a l'editor de + temes + inputConstantName: Introdueix un nom per a aquesta constant + addConstant: Afegir una constant + code: Codi del tema + alpha: Opacitat + deleteConstantConfirm: De debò vols esborrar la constant {const}? + manage: Gestionar temes + explore: Explora Temes + darken: Enfosquir + base: Fundament + constant: Constant + lighten: Clar + install: Instal·lar un tema +_sfx: + note: "Publicació nova" + notification: "Notificacions" + antenna: Antenes + channel: Notificacions del canal + noteMy: Publicació propia + chat: Xat + chatBg: Fons del xat +_2fa: + step2Url: "També pots inserir aquest enllaç i utilitzes una aplicació d'escriptori:" + alreadyRegistered: Ja heu registrat un dispositiu d'autenticació de dos factors. + registerTOTP: Registrar un dispositiu nou + securityKeyInfo: A més de l'autenticació d'empremta digital o PIN, també podeu configurar + l'autenticació mitjançant claus de seguretat de maquinari compatibles amb FIDO2 + per protegir encara més el vostre compte. + step4: A partir d'ara, qualsevol intent d'inici de sessió futur demanarà aquesta + clau d'inici de sessió. + registerSecurityKey: Registrar una clau de seguretat o d'accés + step1: En primer lloc, instal·la una aplicació d'autenticació (com ara {a} o {b}) + al dispositiu. + step2: A continuació, escaneja el codi QR que es mostra en aquesta pantalla. + step3: Introdueix el token que t'ha proporcionat l'aplicació per finalitzar la configuració. + step3Title: Introduïu un codi d'autenticació + chromePasskeyNotSupported: Les claus de pas de Chrome actualment no s'admeten. + securityKeyName: Introduïu un nom de clau + removeKey: Suprimeix la clau de seguretat + removeKeyConfirm: Vols suprimir la clau {name}? + step2Click: Fer clic en aquest codi QR us permetrà registrar 2FA a la vostra clau + de seguretat o aplicació d'autenticació del telèfon. + securityKeyNotSupported: El vostre navegador no admet claus de seguretat. + tapSecurityKey: Si us plau, seguiu el vostre navegador per registrar la clau de + seguretat o d'accés + token: Token 2FA +_widgets: + notifications: "Notificacions" + timeline: "Línia de temps" + unixClock: Rellotge d'UNIX + federation: Federació + instanceCloud: Núvol de servidors + trends: Tendència + clock: Rellotge + calendar: Calendari + activity: Activitat + photos: Fotos + rssTicker: Teletip RSS + onlineUsers: Usuaris en línia + memo: Notes adhesives + digitalClock: Rellotge digital + postForm: Formulari per publicar + slideshow: Presentació de diapositives + serverMetric: Estadístiques del servidor + userList: Llista d'usuaris + rss: Lector d'RSS + jobQueue: Cua de treball + _userList: + chooseList: Selecciona una llista + aiscript: Consola AiScript + button: Botó + serverInfo: Informació del servidor + meiliStatus: Estat del servidor + meiliSize: Mida de l'índex + meiliIndexCount: Publicacions indexades +_cw: + show: "Carregar més" + files: '{count} fitxers' + hide: Amaga + chars: '{count} caràcters' +_visibility: + followers: "Seguidors" + publicDescription: La teva publicació serà visible en totes les línies de temps + públiques + localOnly: Només Local + specified: Directe + home: Sense llistar + homeDescription: Publica només a la línia de temps local + followersDescription: Fes visible només per als teus seguidors i usuaris mencionats + specifiedDescription: Fer visible només per a usuaris determinats + public: Públic + localOnlyDescription: No és visible per als usuaris remots +_profile: + username: "Nom d'usuari" + metadataEdit: Editar informació addicional + youCanIncludeHashtags: També pots incloure etiquetes al teu perfil. + metadata: Informació adicional + description: Perfil + metadataLabel: Etiqueta + metadataContent: Contingut + changeAvatar: Canvia l'avatar + changeBanner: Canvia el bàner + locationDescription: Si primer introduïu la vostra ciutat, es mostrarà l'hora local + a altres usuaris. + name: Nom + metadataDescription: "Fent servir això, podràs mostrar camps d'informació addicionals + al vostre perfil. Podeu afegir una etiqueta {a} o una etiqueta {l} amb {rel} per + verificar l'enllaç al vostre perfil!" +_exportOrImport: + followingList: "Usuaris que segueixes" + muteList: "Silencia" + blockingList: "Bloqueja" + userLists: "Llistes" + excludeMutingUsers: Exclou els usuaris silenciats + allNotes: Totes les publicacions + excludeInactiveUsers: Exclou usuaris inactius +_pages: + script: + categories: + list: "Llistes" + flow: Control de flux + random: Aleatori + value: Valors + fn: Funcions + text: Operacions de text + convert: Transformacions + logical: Operació lògica + operation: Càlcul + comparison: Comparació + blocks: + _join: + arg1: "Llistes" + arg2: Separador + _randomPick: + arg1: "Llistes" + _dailyRandomPick: + arg1: "Llistes" + _seedRandomPick: + arg2: "Llistes" + arg1: Llavor + _pick: + arg1: "Llistes" + arg2: Posició + _listLen: + arg1: "Llistes" + add: Afegir + _subtract: + arg1: A + arg2: B + subtract: Restar + _round: + arg1: Número + eq: A i B són iguals + _mod: + arg2: B + arg1: A + round: Arrodoniment decimal + _and: + arg1: A + arg2: B + or: A O B + _or: + arg1: A + arg2: B + lt: < A és menor que B + _lt: + arg1: A + arg2: B + gt: '> A és més gran que B' + _gt: + arg1: A + arg2: B + seedRannum: Nombre aleatori (amb llavor) + _seedRannum: + arg1: Llavor + arg2: Valor mínim + arg3: Valor màxim + _eq: + arg1: A + arg2: B + ltEq: <= A és menor o igual que B + _multiply: + arg2: B + arg1: A + divide: Dividir + notEq: A i B són diferents + _notEq: + arg1: A + arg2: B + and: A I B + _ltEq: + arg2: B + arg1: A + gtEq: '>= A és més gran o igual que B' + _gtEq: + arg1: A + arg2: B + if: Branca + _if: + arg1: Si + arg2: Aleshores + arg3: Altrament + not: NO + random: Aleatori + _dailyRandom: + arg1: Probabilitat + dailyRannum: Nombre aleatori (canvia un cop al dia per a cada usuari) + _add: + arg1: A + arg2: B + _divide: + arg1: A + arg2: B + mod: Resta + _not: + arg1: NO + _random: + arg1: Probabilitat + rannum: Nombre aleatori + _rannum: + arg1: Valor mínim + arg2: Valor màxim + randomPick: Tria aleatòriament de la llista + dailyRandom: Aleatori (canvia un cop al dia per a cada usuari) + _dailyRannum: + arg2: Valor màxim + arg1: Valor mínim + dailyRandomPick: Tria aleatòriament d'una llista (Canvis un cop al dia per a + cada usuari) + seedRandom: Aleatori (amb llavor) + _seedRandom: + arg1: Llavor + arg2: Probabilitat + seedRandomPick: Tria aleatòriament de la llista (amb llavor) + multiply: Multiplicar + text: Text + _strPick: + arg1: Text + arg2: Ubicació de la cadena + strPick: Extreure cadena + strReplace: Cadena de substitució + _strReplace: + arg1: Text + arg3: Substitueix per + arg2: Text a substituir + strReverse: Voltejar text + _strReverse: + arg1: Text + join: Concatenació de textos + pick: Selecciona de la llista + listLen: Obtenir la longitud de la llista + stringToNumber: Text a número + number: Número + _stringToNumber: + arg1: Text + splitStrByLine: Dividir el text per salts de línia + _fn: + slots: Ranures + slots-info: Separa cada ranura amb un salt de línia + arg1: Sortida + aiScriptVar: Variable AiScript + fn: Funció + for: Repetir + _numberToString: + arg1: Número + _DRPWPM: + arg1: Llista de text + numberToString: Número a text + _splitStrByLine: + arg1: Text + ref: Variable + DRPWPM: Tria aleatòriament d'una llista ponderada (Canvis un cop al dia per + a cada usuari) + _for: + arg1: Nombre de vegades a repetir + arg2: Acció + strLen: Longitud del text + multiLineText: Text (multilínia) + _strLen: + arg1: Text + textList: Llista de text + _textList: + info: Separa cada ranura amb un salt de línia + types: + array: "Llistes" + stringArray: Llista de text + boolean: Bandera + string: Text + number: Número + emptySlot: Ranura buida + enviromentVariables: Variables d'entorn + pageVariables: Variables de pàgina + argVariables: Ranures d'entrada + thereIsEmptySlot: L'espai {slot} està buit! + typeError: L'espai {slot} accepta valors del tipus "{expect}", però el valor proporcionat + és del tipus "{actual}"! + newPage: Crea una pàgina nova + editPage: Edita aquesta pàgina + readPage: S'està veient la font d'aquesta pàgina + created: Pàgina creada correctament + updated: Pàgina editada correctament + invalidNameText: Assegurat que el títol de la pàgina no estigui buit + editThisPage: Edita aquesta pàgina + deleted: Pàgina suprimida correctament + pageSetting: Configuració de la pàgina + nameAlreadyExists: L'URL de la pàgina especificat ja existeix + invalidNameTitle: L'URL de la pàgina especificat no és vàlid + viewPage: Consulta la teva pàgina + like: M'agrada + viewSource: Veure la font + summary: Resum de la pàgina + alignCenter: Centrar elements + hideTitleWhenPinned: Amaga el títol de la pàgina quan estigui fixat al perfil + font: Tipus de lletra + fontSerif: Serif + fontSansSerif: Sans Serif + eyeCatchingImageSet: Estableix una miniatura + eyeCatchingImageRemove: Suprimeix la miniatura + chooseBlock: Afegeix un bloc + selectType: Selecciona un tipus + enterVariableName: Introduïu un nom de variable + blocks: + section: Secció + text: Text + textarea: Àrea de text + image: Imatges + if: Si + _if: + variable: Variable + post: Formulari de publicació + _post: + text: Contingut + attachCanvasImage: Adjuntar imatge de llenç + canvasId: ID del llenç + _textInput: + name: Nom de la variable + text: Títol + default: Valor per defecte + textInput: Entrada de text + _textareaInput: + name: Nom de la variable + text: Títol + default: Valor per defecte + textareaInput: Entrada de text multilínia + numberInput: Entrada numèrica + _note: + id: ID de la publicació + idDescription: També podeu enganxar l'URL de la publicació aquí. + detailed: Vista detallada + switch: Canviar + canvas: Llenç + _canvas: + id: Identificador de llenç + width: Amplada + height: Alçada + note: Publicació incrustada + _counter: + name: Nom de la variable + text: Títol + inc: Pas + _button: + text: Títol + colored: De colors + action: Comportament quan es prem el botó + _action: + _dialog: + content: Contingut + resetRandom: Restableix la llavor aleatòria + pushEvent: Envia un esdeveniment + _pushEvent: + event: Nom de l'esdeveniment + message: Missatge que s'ha de mostrar quan s'activa + variable: Variable per enviar + no-variable: Cap + dialog: Mostra un diàleg + callAiScript: Invoca AiScript + _callAiScript: + functionName: Nom de la funció + _switch: + default: Valor per defecte + name: Nom de la variable + text: Títol + counter: Comptador + _numberInput: + name: Nom de la variable + text: Títol + default: Valor per defecte + button: Botó + _radioButton: + name: Nom de la variable + title: Títol + values: Llista d'opcions separades per salts de línia + default: Valor per defecte + radioButton: Elecció + variableNameIsAlreadyUsed: Aquest nom de variable ja està en ús + contentBlocks: Contingut + inputBlocks: Entrada + specialBlocks: Especial + variables: Variables + title: Títol + url: URL de la pàgina + unlike: Elimina m'agrada + my: Les meves pàgines + liked: Pàgines que m'han agradat + content: Bloc de pàgines + featured: Popular + inspector: Inspector + contents: Contingut +_notification: + youWereFollowed: "t'ha seguit" + _types: + follow: "Nous seguidors" + mention: "Menció" + renote: "Impulsos" + quote: "Citar" + reaction: "Reaccions" + all: Tots + reply: Respostes + pollEnded: S'acaben les enquestes + receiveFollowRequest: S'han rebut peticions de seguiment + followRequestAccepted: Sol·licituds de seguiment acceptades + groupInvited: Invitacions per a grups + app: Notificacions d'aplicacions enllaçades + pollVote: Votacions a les enquestes + _actions: + reply: "Respondre" + renote: "Impulsos" + followBack: t'ha tornat el seguiment + youGotQuote: "{name} t'ha citat" + fileUploaded: El fitxer s'ha penjat correctament + youGotMention: "{nom} t'ha esmentat" + youGotReply: "{name} t'ha respost" + youRenoted: Impuls de {name} + youGotPoll: '{name} ha votat a la teva enquesta' + youGotMessagingMessageFromUser: "{name} t'ha enviat un missatge de xat" + youGotMessagingMessageFromGroup: S'ha enviat un missatge de xat al grup {name} + youReceivedFollowRequest: Has rebut una sol·licitud de seguiment + yourFollowRequestAccepted: S'ha acceptat la vostra sol·licitud de seguiment + pollEnded: Es resultat de la enquesta ja està disponible + emptyPushNotificationMessage: Les notificacions push s'han actualitzat + youWereInvitedToGroup: "{userName} t'ha convidat a un grup" + reacted: Ha reaccionat a la teva publicació + renoted: Ha impulsat la teva publicació + voted: Ha votat a la teva enquesta + andCountUsers: I {count} usuaris més {acted} +_deck: + _columns: + notifications: "Notificacions" + tl: "Línia de temps" + list: "Llistes" + mentions: "Mencions" + widgets: Ginys + main: Principal + antenna: Antena + direct: Missatges directes + channel: Canal + alwaysShowMainColumn: Mostra sempre la columna principal + columnAlign: Alinear columnes + introduction: Crea la interfície perfecta per a tu organitzant columnes lliurement! + swapRight: Canvia amb la columna de la dreta + swapUp: Canvia amb la columna de d'alt + swapDown: Canvia amb la columna de sota + stackLeft: Apilar amb la columna de l'esquerra + popRight: Treu a la dreta + profile: Espai de treball + newProfile: Nou espai de treball + deleteProfile: Suprimir l'espai de treball + introduction2: Feu clic al + a la dreta de la pantalla per afegir noves columnes + sempre que vulgueu. + widgetsIntroduction: Selecciona "Editar ginys" al menú de columnes i afegeix un + giny. + addColumn: Afegeix una columna + configureColumn: Configuració de columnes + swapLeft: Canvia amb la columna de l'esquerra + renameProfile: Canvia el nom de l'espai de treball + nameAlreadyExists: Aquest nom d'espai de treball ja existeix. +blockConfirm: Segur que vols bloquejar aquest compte? +unsuspendConfirm: Segur que vols treure la suspensió d'aquest compte? +unblockConfirm: Segur que vols treure el bloqueig d'aquest compte? +suspendConfirm: Segur que vols suspendre aquest compte? +selectList: Selecciona una llista +selectAntenna: Selecciona una antena +selectWidget: Selecciona un giny +editWidgets: Edita els ginys +editWidgetsExit: Fet +customEmojis: Emojis personalitzats +cacheRemoteFilesDescription: Quan aquesta opció està desactivada, els fitxers remots + es carreguen directament del servidor remot. Desactivar-la farà que baixi l'ús d'emmagatzematge, + però incrementa el tràfic, perquè les miniatures no es generaran. +flagAsBot: Marca aquest compte com automatitzat +flagAsBotDescription: Activa aquesta opció si aquest compte és controlat per un programa. + Si s'activa, això actuarà com una bandera per a altres desenvolupadors i ajuda a + prevenir cadenes de interaccions infinites amb altres comptes automatitzats a més + d'ajustar els sistemes interns de Firefish per tractar aquest compte com automatitzat. +flagAsCat: Ets un gat? 🐱 +flagShowTimelineReplies: Mostra respostes a la línia de temps +flagAsCatDescription: Guanyaràs unes orelles de gat i parlares com un gat! +flagShowTimelineRepliesDescription: Si s'activa, es mostraran les respostes d'usuaris + a publicacions d'altres usuaris. +general: General +autoAcceptFollowed: Aprova automàticament les peticions de seguiment d'usuaris que + segueixes +accountMoved: "L'usuari s'ha mogut a un compte nou:" +addAccount: Afegeix un compte +loginFailed: No s'ha pogut iniciar sessió +showOnRemote: Obre la pàgina original +wallpaper: Fons de pantalla +setWallpaper: Estableix un fons de pantalla +removeWallpaper: Elimina el fons de pantalla +followConfirm: Segur que vols seguir a {name}? +proxyAccount: Compte proxy +proxyAccountDescription: Un compte proxy es un compte que actua com un seguidor remot + per a usuaris sota determinades condicions. Per exemple, quant un usuari afegeix + un usuari remot a la llista, l'activitat de l'usuari remot no serà entregada al + servidor si cap usuari local el segueix, així el compte proxy el seguirà. +host: Amfitrió +selectUser: Selecciona un usuari +latestStatus: Últim estat +storageUsage: Ús del emmagatzematge +metadata: Metadades +monitor: Seguiment +software: Programari +version: Versió +jobQueue: Cua de feina +cpuAndMemory: CPU i memòria +network: Xarxa +disk: Disc +instanceInfo: Informació del servidor +statistics: Estadístiques +clearCachedFiles: Esborra la memòria cau +clearQueueConfirmText: Qualsevol publicació que continuï a la cua sense entregar no + será federada. Normalment aquesta operació no es necessària. +clearCachedFilesConfirm: Segur que vols esborrar els fitxers remots de la memòria + cau? +blockedUsers: Usuaris blocats +noUsers: No hi ha cap usuari +editProfile: Edita el perfil +noteDeleteConfirm: Segur que vols eliminar la publicació? +pinLimitExceeded: No pots fixar més publicacions +muteAndBlock: Silenciats i blocats +mutedUsers: Usuaris silenciats +done: Fet +preview: Vista prèvia +default: Per defecte +intro: La instal·lació de Firefish ha acabat! Crea un compte d'usuari d'administració. +processing: S'està processant +noCustomEmojis: No hi ha cap emoji +noJobs: No hi ha res a la cua de feines +federating: Federant +blocked: Bloquejat +subscribing: Subscrivint +publishing: Publicant +notResponding: Sense resposta +instanceUsers: Usuaris d'aquest servidor +instanceFollowing: Seguint al servidor +instanceFollowers: Seguidors del servidor +security: Seguretat +newPasswordRetype: Torna a entrar la nova contrasenya +more: Més! +featured: Destacat +usernameOrUserId: Nom o ID d'usuari +noSuchUser: No s'ha trobat l'usuari +lookup: Ves a +attachFile: Afegeix fitxers +currentPassword: Contrasenya actual +newPassword: Nova contrasenya +announcements: Avisos +imageUrl: URL de la imatge +removed: S'ha eliminat correctament +removeAreYouSure: Segur que vols eliminar «{x}»? +deleteAreYouSure: Segur que vols eliminar «{x}»? +resetAreYouSure: Segur que vols restablir? +fromUrl: Des d'una URL +saved: S'ha desat +messaging: Xat +upload: Puja +keepOriginalUploading: Desa la imatge original +keepOriginalUploadingDescription: Desa la imatge original pujada tal com es. Si es + desactiva, es generarà una versió per mostrar en la web al pujar. +fromDrive: Des del Disc +uploadFromUrl: Puja des d'una adreça URL +uploadFromUrlDescription: Adreça URL del fitxer que vols pujar +uploadFromUrlRequested: Pujada demanada +noMoreHistory: No hi ha més historial +tos: Condicions d'ús +start: Comença +startMessaging: Comença una conversa +manageGroups: Gestiona els grups +nUsersRead: llegit per {n} +agreeTo: Estic d'acord amb {0} +activity: Activitat +home: Inici +remoteUserCaution: La informació dels usuaris remots és incompleta. +themeForDarkMode: Tema a fer servir en mode fosc +light: Clar +registeredDate: Data de registre +dark: Fosc +lightThemes: Temes clars +location: Ubicació +theme: Temes +themeForLightMode: Tema a fer servir en mode clar +drive: Disc +selectFile: Tria un fitxer +selectFiles: Tria fitxers +darkThemes: Temes foscos +syncDeviceDarkMode: Sincronitza el mode fosc amb la configuració del teu dispositiu +fileName: Nom del fitxer +createFolder: Crea una carpeta +renameFolder: Canvia-li el nom a la carpeta +deleteFolder: Elimina la carpeta +selectFolder: Tria una carpeta +selectFolders: Tria carpetes +renameFile: Canvia el nom del fitxer +folderName: Nom de la carpeta +inputNewFolderName: Escriu un nom de carpeta nou +addFile: Afegeix un fitxer +emptyDrive: El teu Disc és buit +emptyFolder: Aquesta carpeta és buida +unableToDelete: No es pot eliminar +inputNewFileName: Escriu un nom nou per al fitxer +inputNewDescription: Escriu una descripció nova +circularReferenceFolder: La carpeta de destí és una subcarpeta de la carpeta que vols + moure. +hasChildFilesOrFolders: Aquesta carpeta no es pot eliminar perquè no és buida. +whenServerDisconnected: Quant es perd la conexió amb el servidor +disconnectedFromServer: S'ha perdut la conexió al servidor +reload: Torna a carregar +avatar: Avatar +banner: Bàner +doNothing: Ignora +reloadConfirm: Vols tornar a carregar la línia de temps? +watch: Veure +maintainerName: Administrador +maintainerEmail: Correu electrònic de l'administrador +instanceName: Nom del servidor +instanceDescription: Descripció del servidor +today: Avui +dayX: '{day}' +tosUrl: URL de les Condicions d'ús +thisYear: Any +thisMonth: Mes +driveCapacityPerRemoteAccount: Capacitat del Disc per usuari remot +inMb: En megabytes +iconUrl: Adreça URL de la icona +enableRegistration: Activa el registre d'usuaris nous +invite: Convida +driveCapacityPerLocalAccount: Capacitat del Disc per usuari local +bannerUrl: Adreça URL del bàner +backgroundImageUrl: Adreça URL del fons de pantalla +basicInfo: Informació bàsica +pinnedPages: Pàgines fixades +pinnedUsersDescription: Llista de noms d'usuaris per fixar a la pestanya "Explora" + Un nom per línea. +pinnedPagesDescription: Introdueix la ruta a les pàgines que vols fixar a la página + principal d'aquest servidor, una ruta per línea. +pinnedUsers: Usuaris fixats +enableHcaptcha: Activa hCaptcha +hcaptchaSiteKey: Clau del lloc +hcaptchaSecretKey: Clau secreta +recaptcha: reCAPTCHA +enableGlobalTimeline: Activa la línia de temps global +disablingTimelinesInfo: Els Administradors i Moderadors sempre tenen accés a totes + les líneas temporals, inclòs si hi són desactivades. +showLess: Tanca +clearQueue: Esborra la cua +uploadFromUrlMayTakeTime: Pot trigar un temps fins que la pujada es completi. +noThankYou: No, gràcies +addInstance: Afegeix un servidor +emoji: Emoji +emojis: Emoji +emojiName: Nom del emoji +emojiUrl: URL de l'emoji +addEmoji: Afegeix +settingGuide: Configuració recomenada +searchWith: 'Cerca: {q}' +youHaveNoLists: No tens cap llista +flagSpeakAsCat: Parla com un gat +selectInstance: Selecciona un servidor +flagSpeakAsCatDescription: Les teves publicacions es transformaran en miols quan estiguis + en mode gat +recipient: Destinatari(s) +annotation: Comentaris +blockedInstances: Servidors bloquejats +blockedInstancesDescription: Llista les adreces dels servidors que vols bloquejar. + Els servidors de la llista no podrán comunicarse amb aquests servidors. +hiddenTags: Etiquetes amagades +hiddenTagsDescription: 'Enumereu les etiquetes (sense el #) que voleu ocultar de tendències + i explorar. Les etiquetes ocultes encara es poden descobrir per altres mitjans.' +noInstances: No hi ha cap servidor +defaultValueIs: 'Per defecte: {value}' +suspended: Suspès +all: Tot +changePassword: Canvia la contrasenya +clearQueueConfirmTitle: Segur que vols esborrar la cua? +retypedNotMatch: Els camps no coincideixen. +normal: Normal +monthX: '{month}' +enableRecaptcha: Activa reCAPTCHA +recaptchaSiteKey: Clau del lloc +recaptchaSecretKey: Clau secreta +avoidMultiCaptchaConfirm: Fent servir diferents sistemes de Captcha pot causar interferències + entre ells. Vols desactivar els altres sistemes que es troben activats? Si vols + deixar-los activats fes clic a cancelar. +antennas: Antenes +enableEmojiReactions: Activa reaccions amb emojis +blockThisInstance: Bloqueja aquest servidor +registration: Registra't +showEmojisInReactionNotifications: Mostrar els emojis a les notificacions de les reaccions +renoteMute: Silencia els impulsos a les línies de temps +renoteUnmute: Treu el silenci als impulsos a les línies de temps +cacheRemoteFiles: Desa fitxers remots a la memòria cau +federation: Federació +registeredAt: Registrat a +latestRequestSentAt: Última petició enviada +latestRequestReceivedAt: Última petició rebuda +charts: Gràfics +perHour: Per hora +perDay: Per dia +stopActivityDelivery: Para d'enviar activitats +operations: Operacions +explore: Explora +messageRead: Llegit +images: Imatges +birthday: Aniversari +yearsOld: '{age} anys' +copyUrl: Copia l'adreça URL +rename: Renombra +unwatch: Deixa de veure +accept: Acceptar +reject: Rebutja +yearX: '{year}' +pages: Pàgines +enableLocalTimeline: Activa la línia de temps local +enableRecommendedTimeline: Activa la línia de temps de recomanacions +pinnedClipId: ID del retall que vols fixar +hcaptcha: hCaptcha +manageAntennas: Gestiona les Antenes +name: Nom +notesAndReplies: Publicacions i respostes +silence: Posa en silenci +withFiles: Amb fitxers +popularUsers: Usuaris populars +exploreUsersCount: Hi han {count} usuaris +exploreFediverse: Explora el Fediverse +popularTags: Etiquetes populars +about: Sobre +recentlyUpdatedUsers: Usuaris actius fa poc +recentlyRegisteredUsers: Usuaris registrats fa poc +recentlyDiscoveredUsers: Nous usuaris descoberts +administrator: Administrador +token: Token +registerSecurityKey: Registra una clau de seguretat +securityKeyName: Nom de la clau +lastUsed: Feta servir per última vegada +unregister: Anul·lar el registra +passwordLessLogin: Identificació sense contrasenya +share: Comparteix +notFound: No s'ha trobat +newPasswordIs: La nova contrasenya és "{password}" +notFoundDescription: No es pot trobar cap pàgina que correspongui a aquesta adreça + URL. +uploadFolder: Carpeta per defecte per pujar arxius +cacheClear: Neteja la memòria cau +markAsReadAllNotifications: Marca totes les notificacions com llegides +markAsReadAllUnreadNotes: Marca totes les publicacions com a llegides +markAsReadAllTalkMessages: Marca tots els missatges com llegits +help: Ajuda +inputMessageHere: Escriu aquí el missatge +close: Tanca +group: Grup +groups: Grups +createGroup: Crea un grup +ownedGroups: Grups que et pertanyen +joinedGroups: Grups als que t'has unit +groupName: Nom del grup +members: Membres +transfer: Transfereix +messagingWithUser: Conversa privada +title: Títol +text: Text +enable: Activa +next: Següent +retype: Torna a entrar +noteOf: Publicat per {user} +inviteToGroup: Invita a un grup +quoteAttached: Cita +quoteQuestion: Adjunta com a cita? +noMessagesYet: Encara no hi han missatges +signinRequired: Si us plau registrat o inicia sessió per continuar +invitations: Invitacions +invitationCode: Codi d'invitació +checking: Comprovant... +usernameInvalidFormat: Pots fer servir lletres en majúscules o minúscules, nombres + i guions baixos. +tooShort: Massa curt +tooLong: Massa llarg +weakPassword: Contrasenya amb seguretat feble +veryStrongPassword: Contrasenya amb seguretat forta +passwordMatched: Coincidències +signinWith: Inicia sessió com {x} +signinFailed: No es pot iniciar sessió. El nom d'usuari o la contrasenya són incorrectes. +or: O +language: Idioma +uiLanguage: Idioma de la interfície d'usuari +groupInvited: T'han invitat a un grup +aboutX: Sobre {x} +youHaveNoGroups: No tens grups +disableDrawer: No facis servir els menús amb estil de calaix +noHistory: No hi ha historial disponible +signinHistory: Historial d'inicis de sessió +disableAnimatedMfm: Desactiva les animacions amb MFM +doing: Processant... +category: Categoría +existingAccount: El compte ja existeix +regenerate: Regenera +docSource: Codi font d'aquest document +createAccount: Crea un compte +fontSize: Mida del text +noFollowRequests: No tens cap sol·licitud de seguiment per aprovar +openImageInNewTab: Obre les imatges a una pestanya nova +dashboard: Taulell +local: Local +remote: Remot +total: Total +weekOverWeekChanges: Canvis d'ençà la passada setmana +dayOverDayChanges: Canvis des d'ahir +appearance: Aparença +clientSettings: Configuració del client +accountSettings: Configuració del compte +promotion: Promogut +promote: Promoure +numberOfDays: Nombre de dies +objectStorageBaseUrl: Adreça URL base +hideThisNote: Amaga aquesta publicació +showFeaturedNotesInTimeline: Mostra les publicacions destacades a les línies de temps +objectStorage: Emmagatzematge d'objectes +useObjectStorage: Fes servir l'emmagatzematge d'objectes +expandTweet: Amplia el tuit +themeEditor: Editor de temes +description: Descripció +leaveConfirm: Hi han canvis que no s'han desat. Els vols descartar? +manage: Administració +plugins: Afegits +preferencesBackups: Preferències de còpies de seguretat +undeck: Sortir del taulell +useBlurEffectForModal: Fes servir efectes de difuminació en les finestres modals +useFullReactionPicker: Fes servir el selector de reaccions a tamany complert +deck: Taulell +width: Amplada +generateAccessToken: Genera una clau d'accés +medium: Mitja +small: Petit +permission: Permisos +enableAll: Activa tots +tokenRequested: Garantir accés al compte +pluginTokenRequestedDescription: Aquest afegit podrà fer servir els permisos configurats + aquí. +emailServer: Servidor de correu electrònic +notificationType: Tipus de notificació +edit: Editar +emailAddress: Adreça de Correu electrònic +smtpConfig: Configuració del servidor SMTP +smtpHost: Host +enableEmail: Activa la distribució de correu electrònic +smtpPort: Port +emailConfigInfo: Fet servir per confirmar les adreces de correu electrònic al registrar-se + o si s'oblida la contrasenya +email: Correu electrònic +smtpSecure: Fes servir SSL/TLS implícit per connectar-se per SMTP +emptyToDisableSmtpAuth: Deixa el nom d'usuari i la contrasenya sense emplenar per + desactivar la verificació SMTP +smtpSecureInfo: Desactiva això quant facis servir STARTTLS +testEmail: Envia un correu electrònic de verificació +wordMute: Paraules i llenguatge silenciats +regexpError: Error a la Expressió Regular +regexpErrorDescription: 'Hi ha un error a la expressió regular a la línea {line} de + la teva {tab} de paraules silenciades:' +userSaysSomething: '{name} va dir alguna cosa' +instanceMute: Silenciar servidor +logs: Registres +copy: Copiar +delayed: Posposat +metrics: Mètriques +overview: Vista general +database: Base de dades +regenerateLoginToken: Regenera la clau d'inici de sessió +reduceUiAnimation: Redueix les animacions de la UI +messagingWithGroup: Conversa en grup +invites: Invitacions +unavailable: No disponible +newMessageExists: Tens missatges nous +onlyOneFileCanBeAttached: Només pots adjuntar un fitxer per missatge +normalPassword: Contrasenya amb seguretat mitjana +passwordNotMatched: No hi han coincidències +useOsNativeEmojis: Fes servir els emojis per defecte del Sistema Operatiu +joinOrCreateGroup: Fes que et convidin a un grup o crea el teu propi. +objectStorageBaseUrlDesc: "Es l'adreça URL que serveix com a referència. Específica + la adreça URL del CDN o Proxy si fas servir.\nPer fer servir S3 'https://.s3.amazonaws.com' + i per GCS o serveis semblants 'https://storage.googleapis.com/', etc." +height: Alçada +large: Gran +notificationSetting: Preferències de notificacions +makeActive: Activar +notificationSettingDesc: Tria el tipus de notificació que es mostrarà. +notifyAntenna: Notifica publicacions noves +withFileAntenna: Només publicacions amb fitxers +enableServiceworker: Activa les notificacions push al teu navegador +antennaUsersDescription: Escriu un nom d'usuari per línea +antennaInstancesDescription: Escriu l'adreça d'un servidor per línea +tags: Etiquetes +antennaSource: Font de la antena +antennaKeywords: Paraules claus a escoltar +antennaExcludeKeywords: Paraules clau a excluir +antennaKeywordsDescription: Separades amb espais per fer una condició AND i amb una + línea nova per fer una condició OR. +caseSensitive: Diferència majúscules i minúscules +withReplies: Inclou respostes +connectedTo: Aquest(s) compte(s) estan conectats +silenceConfirm: Segur que vols posar en silenci aquest usuari? +unsilence: Desfés posar en silenci +unsilenceConfirm: Segur que vols treure el silenci a aquest usuari? +aboutFirefish: Sobre Firefish +twoStepAuthentication: Autentificació de doble factor +moderator: Moderador +moderation: Moderació +available: Disponible +tapSecurityKey: Escriu la teva clau de seguretat +nUsersMentioned: Esmentat per {n} usuari(s) +securityKey: Clau de seguretat +resetPassword: Restablir contrasenya +describeFile: Afegeix una descripció +enterFileDescription: Escriu una descripció +author: Autor +disableAll: Desactiva tots +userSaysSomethingReason: '{name} va dir {reason}' +display: Visualització +channel: Canals +create: Crear +useGlobalSetting: Fes servir els ajustos globals +useGlobalSettingDesc: Si s'activa, es faran servir els ajustos de notificacions del + teu compte. Si es desactiva, es poden fer configuracions individuals. +other: Altres +menu: Menú +addItem: Afegeix un element +divider: Divisor +relays: Relés +addRelay: Afegeix un Relé +inboxUrl: Adreça de la safata d'entrada +addedRelays: Relés afegits +serviceworkerInfo: Ha de estar activat per les notificacions emergents. +poll: Enquesta +deletedNote: Publicació esborrada +disablePlayer: Tancar el reproductor de vídeo +fileIdOrUrl: ID o adreça URL del fitxer +behavior: Comportament +regenerateLoginTokenDescription: Regenera la clau que es fa servir de manera interna + durant l'inici de sessió. Normalment això no és necessari. Si la clau és torna a + generar, es tancarà la sessió a tots els dispositius. +setMultipleBySeparatingWithSpace: Separa diferents entrades amb espais. +reportAbuseOf: Informa d'un abús de {name} +sample: Exemple +abuseReports: Informes +reportAbuse: Informe +reporter: Informador +reporterOrigin: Origen informador +forwardReport: Envia l'informe a un servidor remot +abuseReported: El teu informe s'ha enviat. Moltes gràcies. +reporteeOrigin: Origen de l'informe +send: Enviar +abuseMarkAsResolved: Marcar l'informe com a resolt +visibility: Visibilitat +useCw: Amaga el contingut +enablePlayer: Obre el reproductor de vídeo +yourAccountSuspendedDescription: Aquest compte ha sigut suspès per no seguir els termes + de servei d'aquest servidor o quelcom similar. Contacte amb l'administrador si vols + conèixer la raó amb més detall. Si us plau no facis un compte nou. +invisibleNote: Publicació oculta +enableInfiniteScroll: Carrega més de forma automàtica +fillAbuseReportDescription: Si us plau omple els detalls sobre aquest informe. Si + es sobre una publicació en concret, si us plau, inclou l'adreça URL. +forwardReportIsAnonymous: Com a informador el servidor remot no veure el teu compte, + si no un compte anònim. +openInNewTab: Obrir en una pestanya nova +openInSideView: Obrir a la vista lateral +defaultNavigationBehaviour: Navegació per defecte +editTheseSettingsMayBreakAccount: Si edites aquestes configuracions pots fer mal bé + el teu compte. +userSilenced: Aquest usuari ha sigut silenciat. +instanceTicker: Informació de publicacions del servidor +waitingFor: Esperant a {x} +random: Aleatori +system: Sistema +switchUi: Interfície d'usuari +createNewClip: Crea un retall nou +unclip: Desfés el retall +public: Públic +renotesCount: Nombre d'impulsos fets +sentReactionsCount: Nombre de reaccions fetes +receivedReactionsCount: Nombre de reaccions rebudes +pollVotesCount: Nombre de vots fets en enquestes +pollVotedCount: Nombre de vots rebuts en enquestes +yes: Sí +no: No +noCrawle: Rebutjar la indexació dels restrejadors +driveUsage: Espai fet servir al Disk +noCrawleDescription: Demanar als motors de cerca externs no indexar el teu contingut. +alwaysMarkSensitive: Marcar per defecte com a NSFW +lockedAccountInfo: Si has configurat la visibilitat del compte per "Només seguidors" + les teves publicacions no serien visibles per a ningú més, inclús si has d'aprovar + els teus seguidors manualment. +disableShowingAnimatedImages: No reproduir les imatges animades +verificationEmailSent: S'ha enviat correu electrònic de verificació. Si us plau segueix + les instruccions per completar la verificació. +notSet: Sense especificar +emailVerified: El correu electrònic s'ha verificat +loadRawImages: Carregar les imatges originals en comptes de mostrar les miniatures +noteFavoritesCount: Nombre de publicacions afegides a favorits +useSystemFont: Fes servir la font per defecte del sistema +contact: Contacte +clips: Retalls +experimentalFeatures: Característiques experimentals +developer: Desenvolupador +makeExplorableDescription: Si desactives aquesta funció el teu compte no sortirà a + la secció "Explora". +showGapBetweenNotesInTimeline: Mostra un espai entre publicacions a la línea de temps +makeExplorable: Fes el compte visible a "Explora" +duplicate: Duplicar +left: Esquerra +wide: Ample +narrow: Estret +reloadToApplySetting: Aquesta configuració només sortirà efecte després de recarregar + la pàgina. Vols fer-ho ara? +needReloadToApply: Es requereix recarregar la pàgina perquè això surti efecte. +showTitlebar: Mostrar la barra de títol +onlineUsersCount: Hi han {n} usuaris connectats +nUsers: '{n} Usuaris' +nNotes: '{n} Publicacions' +sendErrorReports: Enviar informe d'error +clearCache: Netejar memòria cau +switchAccount: Canvia de compte +enabled: Activat +configure: Configurar +noBotProtectionWarning: La protecció contra bots no està configurada. +ads: Bàners comunitaris +ratio: Ràtio +global: Global +sent: Enviat +received: Rebut +whatIsNew: Mostra els canvis +usernameInfo: Un nom que identifica el vostre compte d'altres en aquest servidor. + Podeu utilitzar l'alfabet (a~z, A~Z), els dígits (0~9) o el guió baix (_). Els noms + d'usuari no es poden canviar més tard. +breakFollow: Suprimeix el seguidor +makeReactionsPublicDescription: Això farà que la llista de totes les vostres reaccions + passades sigui visible públicament. +hide: Amagar +leaveGroupConfirm: Estàs segur que vols deixar "{name}"? +voteConfirm: Vols confirmar el teu vot per a "{choice}"? +leaveGroup: Sortir del grup +rateLimitExceeded: S'ha excedit el límit proporcionat +cropImage: Retalla la imatge +cropImageAsk: Vols retallar aquesta imatge? +failedToFetchAccountInformation: No s'ha pogut obtenir la informació del compte +driveCapOverrideCaption: Restableix la capacitat per defecte introduint un valor de + 0 o inferior. +type: Tipus +label: Etiqueta +beta: Beta +navbar: Barra de navegació +adminCustomCssWarn: Aquesta configuració només s'ha d'utilitzar si sabeu què fa. La + introducció de valors inadequats pot fer que els clients de TOTS deixin de funcionar + amb normalitat. Assegureu-vos que el vostre CSS funcioni correctament provant-lo + a la configuració de l'usuari. +showUpdates: Mostra una finestra emergent quan Firefish s'actualitzi +recommendedInstances: Servidors recomanats +recommendedInstancesDescription: Servidors recomanats separats per salts de línia + que apareixen a la línia de temps recomanada. +caption: Descripció Automàtica +splash: Pantalla de Benvinguda +swipeOnDesktop: Permet lliscar a l'estil del mòbil a l'escriptori +updateAvailable: Pot ser que hi hagi una actualització disponible! +logoImageUrl: URL de la imatge del logotip +showAdminUpdates: Indica que hi ha disponible una versió nova de Firefish (només per + a administradors) +replayTutorial: Repetició del tutorial +migration: Migració +moveAccountDescription: Aquest procés és irreversible. Assegureu-vos que hàgiu configurat + un àlies per a aquest compte al vostre compte nou abans de moure's. Introduïu l'etiqueta + del compte amb el format @persona@servidor.com +moveToLabel: 'Compte al qual us moveu:' +moveAccount: Mou el compte! +moveFromDescription: Això establirà un àlies del vostre compte antic perquè pugueu + passar d'aquest compte a aquest actual. Feu això ABANS de moure's del vostre compte + anterior. Introduïu l'etiqueta del compte amb el format @persona@servidor.com +_sensitiveMediaDetection: + description: Redueix l'esforç de moderació del servidor mitjançant el reconeixement + automàtic dels mitjans NSFW mitjançant l'aprenentatge automàtic. Això augmentarà + lleugerament la càrrega al servidor. + setSensitiveFlagAutomaticallyDescription: Els resultats de la detecció interna es + conservaran encara que aquesta opció estigui desactivada. + analyzeVideos: Activa l'anàlisi de vídeos + analyzeVideosDescription: Analitza vídeos a més d'imatges. Això augmentarà lleugerament + la càrrega al servidor. + setSensitiveFlagAutomatically: Marca com a NSFW + sensitivity: Sensibilitat de detecció + sensitivityDescription: La reducció de la sensibilitat comportarà menys deteccions + errònies (falsos positius), mentre que augmentar-la comportarà menys deteccions + falses (falsos negatius). +_emailUnavailable: + used: Aquesta adreça de correu electrònic ja s'està utilitzant + format: El format d'aquesta adreça de correu electrònic no és vàlid + disposable: Les adreces de correu electrònic d'un sol ús no es poden utilitzar + mx: Aquest servidor de correu electrònic no és vàlid + smtp: Aquest servidor de correu electrònic no respon +_ffVisibility: + public: Públic + followers: Visible només per als seguidors + private: Privat +_signup: + emailAddressInfo: Introduïu la vostra adreça de correu electrònic. No es farà públic. + almostThere: Gairebé està + emailSent: S'ha enviat un correu electrònic de confirmació a la vostra adreça electrònica + ({email}). Feu clic a l'enllaç inclòs per completar la creació del compte. +_accountDelete: + started: S'ha iniciat la supressió. + accountDelete: Suprimeix el compte + mayTakeTime: Com que la supressió del compte és un procés que requereix molts recursos, + pot ser que trigui algun temps a completar-se en funció de la quantitat de contingut + que hàgiu creat i de quants fitxers hàgiu penjat. + sendEmail: Un cop s'hagi completat la supressió del compte, s'enviarà un correu + electrònic a l'adreça de correu electrònic registrada en aquest compte. + inProgress: La supressió del compte està en curs + requestAccountDelete: Sol·licitar la supressió del compte +_ad: + back: Enrera + reduceFrequencyOfThisAd: Mostrar menys aquest anunci + adsBy: Anunci comunitari per {by} +_gallery: + my: La meva Galeria + liked: Publicacions que m'han agradat + unlike: Elimina m'agrada + like: M'agrada +_forgotPassword: + contactAdmin: Aquest servidor no admet l'ús d'adreces de correu electrònic; poseu-vos + en contacte amb l'administrador del servidor per restablir la contrasenya. + ifNoEmail: Si no heu utilitzat cap correu electrònic durant el registre, poseu-vos + en contacte amb l'administrador del servidor. + enterEmail: Introduïu l'adreça de correu electrònic que heu utilitzat per registrar-vos. + A continuació, se li enviarà un enllaç amb el qual podeu restablir la vostra contrasenya. +_plugin: + install: Instal·leu connectors + installWarn: Si us plau, no instal·leu connectors que no siguin fiables. + manage: Gestionar els connectors +_preferencesBackups: + saveNew: Desa una còpia de seguretat nova + apply: Aplicar a aquest dispositiu + loadFile: Carrega des del fitxer + save: Desa els canvis + nameAlreadyExists: Ja existeix una còpia de seguretat anomenada "{name}". Introduïu + un nom diferent. + renameConfirm: Canviar el nom d'aquesta còpia de seguretat de "{old}" a "{new}"? + noBackups: No existeixen còpies de seguretat. Podeu fer una còpia de seguretat de + la configuració del vostre client en aquest servidor utilitzant "Crea una còpia + de seguretat nova". + deleteConfirm: Vols suprimir la còpia de seguretat anomanada {name}? + updatedAt: 'Actualitzat el: {time} {date}' + createdAt: 'Creat el: {time} {date}' + cannotLoad: No s'ha pogut carregar + inputName: Introduïu un nom per a aquesta còpia de seguretat + saveConfirm: Deseu la còpia de seguretat com a {name}? + invalidFile: Format de fitxer no vàlid + applyConfirm: Realment voleu aplicar la còpia de seguretat "{name}" a aquest dispositiu? + La configuració existent d'aquest dispositiu es sobreescriurà. + list: Còpies de seguretat creades + cannotSave: S'ha produït un error en desar +_registry: + domain: Domini + createKey: Crea la clau + scope: Àmbit + key: Clau + keys: Claus +silenced: Silenciat +objectStorageUseSSL: Fes servir SSL +yourAccountSuspendedTitle: Aquest compte està suspès +i18nInfo: Firefish està sent traduït a diversos idiomes per voluntaris. Pots ajudar + {link}. +manageAccessTokens: Administrar claus d'accés +accountInfo: Informació del compte +pageLikedCount: Nombre de m'agrada rebuts a Pàgines +center: Centre +registry: Registre +closeAccount: Tancar el compte +currentVersion: Versió actual +latestVersion: Versió més nova +newVersionOfClientAvailable: Aquesta és la versió del client més nova disponible. +usageAmount: Ús +capacity: Capacitat +editCode: Editar codi +apply: Aplicar +repliesCount: Nombre de contestacions fetes +repliedCount: Nombre de respostes rebudes +renotedCount: Nombre d'impulsos rebuts +followingCount: Nombre de comptes seguits +followersCount: Nombre de seguidors +goBack: Enrera +quitFullView: Sortí de la vista complerta +addDescription: Afegeix una descripció +notSpecifiedMentionWarning: Aquesta publicació conté mencions a usuaris no inclosos + com a destinataris +info: Sobre +hideOnlineStatus: Amagar l'estat de conexió +onlineStatus: Estat de conexió +online: En línea +offline: Desconectat +notRecommended: No recomanat +botProtection: Protecció contra Bots +instanceBlocking: Gestió de la federació +selectAccount: Seleccionar un compte +disabled: Desactivat +quickAction: Accions ràpides +administration: Administració +switch: Canviar +gallery: Galeria +popularPosts: Pàgines populars +shareWithNote: Comparteix amb una publicació +expiration: Data límit +memo: Recordatori +priority: Prioritat +high: Alta +middle: Mitjana +low: Baixa +emailNotConfiguredWarning: L'adreça de correu electrònic no està definida. +instanceSecurity: Seguretat del servidor +privateMode: Mode Privat +allowedInstances: Servidors permesos +allowedInstancesDescription: Llista permesa de Hosts amb qui federar, cadascún separat + per una línia nova (només s'aplica en mode privat). +previewNoteText: Mostra la vista prèvia +customCss: CSS personalitzat +recommended: Recomanat +seperateRenoteQuote: Botons d'impuls i de citació separats +searchResult: Resultats de la cerca +hashtags: Etiquetes +troubleshooting: Resolució de problemes +learnMore: Més informació +misskeyUpdated: Firefish s'ha actualitzat! +translate: Tradueix +translatedFrom: Traduït del {x} +aiChanMode: Ai-chan a la interfície d'usuari clàssica +keepCw: Mantenir els avisos de contingut +pubSub: Comptes Pub/Sub +lastCommunication: Última comunicació +breakFollowConfirm: Confirmes que vols eliminar el seguidor? +itsOn: Activat +itsOff: Desactivat +emailRequiredForSignup: Requereix una adreça de correu electrònic per registrar-te +unread: Sense llegir +controlPanel: Taulell de control +manageAccounts: Gestionar comptes +makeReactionsPublic: Estableix l'historial de reaccions com a públic +classic: Centrat +muteThread: Silenciar el fil +ffVisibility: Visibilitat dels Seguiments/Seguidors +incorrectPassword: Contrasenya incorrecta. +clickToFinishEmailVerification: Feu clic a [{ok}] per completar la verificació del + correu electrònic. +overridedDeviceKind: Tipus de dispositiu +smartphone: Telèfon intel·ligent +tablet: Tauleta +auto: Automàtic +recentNHours: Últimes {n} hores +recentNDays: Últims {n} dies +noEmailServerWarning: El servidor de correu electrònic no està configurat. +check: Comprovar +fast: Ràpida +sensitiveMediaDetection: Detecció de mitjans NSFW +remoteOnly: Només remotes +failedToUpload: S'ha produït un error en la càrrega +cannotUploadBecauseInappropriate: Aquest fitxer no s'ha pogut carregar perquè s'han + detectat parts d'aquest com a potencialment NSFW. +cannotUploadBecauseNoFreeSpace: La pujada ha fallat a causa de la manca d'espai al + Disc. +enableAutoSensitive: Marcatge automàtic NSFW +moveTo: Mou aquest compte a un compte nou +customKaTeXMacro: Macros KaTeX personalitzats +_aboutFirefish: + contributors: Col·laboradors principals + allContributors: Tots els col·laboradors + donate: Fes una donació a Firefish + source: Codi font + translation: Tradueix Firefish + about: Firefish és una bifurcació de Misskey feta per ThatOneCalculator, que està + en desenvolupament des del 2022. + donateTitle: T'agrada Firefish? + pleaseDonateToFirefish: Penseu en fer una donació a Firefish per donar suport al + seu desenvolupament. + pleaseDonateToHost: Penseu també en fer una donació a la vostre instància, {host}, + per ajudar-lo a suportar els costos de funcionament. + donateHost: Fes una donació a {host} + misskeyContributors: Col·laboradors de Misskey +unknown: Desconegut +pageLikesCount: Nombre de pàgines amb M'agrada +youAreRunningUpToDateClient: Estás fent servir la versió del client més nova. +unlikeConfirm: Vols treure el teu m'agrada? +fullView: Vista complerta +desktop: Escritori +notesCount: Nombre de publicacions +confirmToUnclipAlreadyClippedNote: Aquesta publicació ja la tens als retalls "{name}". + La vols treure d'aquest retall? +driveFilesCount: Nombre de fitxers al Disk +silencedInstances: Servidors silenciats +silenceThisInstance: Silencia el servidor +silencedInstancesDescription: Llista amb els noms dels servidors que vols silenciar. + Els comptes als servidors silenciats seran tractades com "Silenciades", només poden + fer sol·licituds de seguiments, i no poden mencionar comptes locals si no les segueixen. + Això no afectarà els servidors bloquejats. +objectStorageEndpointDesc: Deixa això buit si fas servir AWS, S3, d'una altre manera + específica un extrem com a '' o ':', dependrà del proveïdor que + facis servir. +objectStorageRegionDesc: Especifica una regió com a 'xx-east-1'. Si el teu proveïdor + no distingeix entre regions, deixa això buit o pots escriure 'us-east-1'. +userPagePinTip: Pots mostrar publicacions aquí escollint "Fixar al perfil" dintre + del menú de cada publicació. +userInfo: Informació d'usuari +hideOnlineStatusDescription: Amagant el teu estat en línea redueix la comoditat d'ús + d'algunes característiques com ara la recerca. +active: Actiu +accounts: Comptes +postToGallery: Crea una publicació nova a la galeria +secureMode: Mode segur (Recuperació Autoritzada) +customCssWarn: Aquesta configuració només s'ha d'utilitzar si sabeu què fa. La introducció + de valors indeguts pot provocar que el client deixi de funcionar amb normalitat. +squareAvatars: Mostrar avatars quadrats +secureModeInfo: Quan es faci una solicitut d'altres servidors no contestar sense una + prova. +privateModeInfo: Quan està activat, només els servidors a la llista es poden federar + amb el vostre servidor. Totes les publicacions s'amagaran al públic. +useBlurEffect: Utilitzeu efectes de desenfocament a la interfície d'usuari +accountDeletionInProgress: La supressió del compte està en curs +unmuteThread: Desfés el silenci al fil +deleteAccountConfirm: Això suprimirà aquest compte de manera irreversible. Procedir? +requireAdminForView: Heu d'iniciar sessió amb un compte d'administrador per veure-ho. +enableAutoSensitiveDescription: Permet la detecció i el marcatge automàtics dels mitjans + NSFW mitjançant Machine Learning sempre que sigui possible. Fins i tot si aquesta + opció està desactivada, és possible que estigui habilitada a tot el servidor. +localOnly: Només local +customKaTeXMacroDescription: "Configura macros per escriure expressions matemàtiques + fàcilment! La notació s'ajusta a les definicions de l'ordre LaTeX i s'escriu com + a \\newcommand{\\ name}{content} o \\newcommand{\\name}[nombre d'arguments]{content}. + Per exemple, \\newcommand{\\add}[2]{#1 + #2} ampliarà \\add{3}{foo} a 3 + foo. Els + claudàtors que envolten el nom de la macro es poden canviar per claudàtors rodons + o quadrats. Això afecta els claudàtors utilitzats per als arguments. Es pot definir + una (i només una) macro per línia, i no podeu trencar la línia al mig de la definició. + Les línies no vàlides simplement s'ignoren. Només s'admeten funcions de substitució + de cadenes senzilles; La sintaxi avançada, com ara la ramificació condicional, no + es pot utilitzar aquí." +objectStorageRegion: Regió +objectStoragePrefix: Prefix +objectStoragePrefixDesc: Els fitxers es guardaran dins de carpetes amb aquest prefix. +objectStorageEndpoint: Extrem +newNoteRecived: Hi han publicacions noves +sounds: Sons +listen: Escoltar +none: Res +showInPage: Mostrar a la pàgina +popout: Apareix +volume: Volum +objectStorageUseSSLDesc: Desactiva això si no fas servir HTTPS per les connexions + API +objectStorageUseProxy: Connectar-se mitjançant un Proxy +objectStorageUseProxyDesc: Desactiva això si no faràs servir un servidor Proxy per + connexions amb l'API +objectStorageSetPublicRead: Fixar com a "public-read" al pujar +serverLogs: Registres del servidor +deleteAll: Esborrar tot +showFixedPostForm: Mostrar el formulari de publicacions al principi de la línia de + temps +unableToProcess: Aquesta operació no es pot acabar +recentUsed: Fet servir fa poc +install: Instal·lar +masterVolume: Volum principal +uninstall: Desinstal·lar +installedApps: Aplicacions autoritzades +nothing: No hi a res per veure +installedDate: Data d'autorització +details: Detalls +chooseEmoji: Selecciona un emoji +removeAllFollowingDescription: Fent això deixes de seguir tots els comptes de {host}. + Si us plau fes servir això sí, per exemple, el servidor deixa d'existir. +userSuspended: Aquest usuari ha sigut suspès. +lastUsedDate: Data d'últim ús +state: Estat +sort: Ordenar +ascendingOrder: Ascendent +descendingOrder: Descendent +scratchpad: Bloc de notes +scratchpadDescription: El bloc de notes proporciona un entorn per experiments amb + AiScript. Pots escriure, executar i comprovar els resultats interactuant amb Firefish. +output: Sortida +script: Script +disablePagesScript: Desactivar AiScript a les pàgines +updateRemoteUser: Actualitzar la informació de l'usuari remot +deleteAllFiles: Esborrar tots els fitxers +deleteAllFilesConfirm: Segur que vols esborrar tots els fitxers? +removeAllFollowing: Deixar de seguir a tots els usuaris que segueixes +accentColor: Color principal +textColor: Color del text +value: Valor +sendErrorReportsDescription: "Quan està activat, quan es produeixi un problema la + informació detallada d'errors es compartirà amb Firefish, ajudant a millorar la + qualitat de Firefish.\nAixò inclourà informació com la versió del vostre sistema + operatiu, quin navegador utilitzeu, la vostra activitat a Firefish, etc." +myTheme: El meu tema +backgroundColor: Color de fons +saveAs: Desa com... +advanced: Avançat +invalidValue: Valor invàlid. +createdAt: Data de creació +updatedAt: Data d'actualització +saveConfirm: Desa canvis? +deleteConfirm: De veritat ho vols esborrar? +receiveAnnouncementFromInstance: Rep notificacions d'aquest servidor +emailNotification: Notificacions per correu electrònic +publish: Publicar +inChannelSearch: Cerca al canal +useReactionPickerForContextMenu: Obrir el selector de reaccions al fer click esquerra +typingUsers: L'{users} està escrivint +oneDay: Un dia +instanceDefaultLightTheme: Tema de llum predeterminat per a tot el servidor +instanceDefaultDarkTheme: Tema fosc predeterminat per tot el servidor +instanceDefaultThemeDescription: Introduïu el codi del tema en format d'objecte. +mutePeriod: Durada del silenci +indefinitely: Permanentment +tenMinutes: 10 minuts +oneHour: Una hora +oneWeek: Una setmana +reflectMayTakeTime: Pot trigar una mica a reflectir-se. +thereIsUnresolvedAbuseReportWarning: Hi ha informes sense resoldre. +driveCapOverrideLabel: Canvieu la capacitat del disc per a aquest usuari +isSystemAccount: Aquest compte és creat i operat automàticament pel sistema. Si us + plau, no modereu, editeu, suprimiu o modifiqueu aquest compte de cap forma, o podria + trencar el vostre servidor. +typeToConfirm: Introduïu {x} per confirmar +deleteAccount: Suprimeix el compte +document: Documentació +sendPushNotificationReadMessage: Suprimeix les notificacions push un cop s'hagin llegit + les notificacions o missatges rellevants +sendPushNotificationReadMessageCaption: Es mostrarà una notificació amb el text "{emptyPushNotificationMessage}" + durant un breu temps. Això pot augmentar l'ús de la bateria del vostre dispositiu, + si escau. +showAds: Mostrar bàners de la comunitat +enterSendsMessage: Pren retorn al formulari del missatge per enviar (quant no s'activa + es Ctrl + Return) +customMOTD: MOTD personalitzat (missatges de la pantalla de benvinguda) +customMOTDDescription: Missatges personalitzats per al MOTD (pantalla de benvinguda) + separats per salts de línia, es mostraran aleatòriament cada vegada que un usuari + carrega/recarrega la pàgina. +customSplashIcons: Icones personalitzades de la pantalla de benvinguda (urls) +customSplashIconsDescription: Les URLS de les icones personalitzades a la pantalla + de benvinguda separades per salts de línia. Es mostraran aleatòriament cada vegada + que un usuari carrega/recarrega la pàgina. Si us plau, assegureu-vos que les imatges + estiguin en una URL estàtica, preferiblement amb imatges amb la de 192 x 192. +moveFrom: Mou-te a aquest compte des d'un compte anterior +moveFromLabel: 'Compte des del qual us moveu:' +migrationConfirm: "Esteu absolutament segur que voleu migrar el vostre compte a {account}? + Un cop ho feu, no podreu revertir-ho i no podreu tornar a utilitzar el vostre compte + amb normalitat.\nA més, assegureu-vos d'haver configurat aquest compte actual com + el compte del qual us moveu." +defaultReaction: Reacció d'emoji predeterminades per a publicacions sortints i entrants +enableCustomKaTeXMacro: Activa les macros KaTeX personalitzades +noteId: ID de la publicació +_nsfw: + respect: Amaga els mitjans NSFW + ignore: No amagueu els mitjans NSFW + force: Amaga tots els mitjans +inUse: Utilitzat +ffVisibilityDescription: Et permet configurar qui pot veure a qui segueixes i qui + et segueix. +continueThread: Continuar el fil +reverse: Revés +objectStorageBucket: Cubell +objectStorageBucketDesc: Si us plau específica el nom del cubell que faràs servir + al teu proveïdor. +clip: Retall +createNew: Crear una nova +optional: Opcional +jumpToSpecifiedDate: Vés a una data concreta +showingPastTimeline: Ara es mostra un línea de temps antiga +clear: Netejar +markAllAsRead: Marcar tot com a llegit +recentPosts: Pàgines recents +noMaintainerInformationWarning: La informació de l'administrador no està configurada. +resolved: Resolt +unresolved: Sense resoldre +filter: Filtre +slow: Lenta +useDrawerReactionPickerForMobile: Mostra el selector de reaccions com a calaix al + mòbil +welcomeBackWithName: Benvingut de nou, {name} +showLocalPosts: 'Mostra les notes locals a:' +homeTimeline: Línea de temps Inicial +socialTimeline: Línea de temps Social +themeColor: Color del Teletip del servidor +size: Mida +numberOfColumn: Nombre de columnes +numberOfPageCache: Nombre de pàgines emmagatzemades a la memòria cau +numberOfPageCacheDescription: L'augment d'aquest nombre millorarà la comoditat dels + usuaris, però provocarà més càrrega del servidor i utilitzarà més memòria. +logoutConfirm: Vols tancar la sessió? +lastActiveDate: Data d'últim ús +statusbar: Barra d'estat +pleaseSelect: Selecciona una opció +colored: Color +refreshInterval: "Interval d'actualització " +speed: Velocitat +cannotUploadBecauseExceedsFileSizeLimit: Aquest fitxer no s'ha pogut carregar perquè + supera la mida màxima permesa. +activeEmailValidationDescription: Permet una validació més estricta de les adreces + de correu electrònic, que inclou la comprovació d'adreces d'un sol ús i si realment + es pot comunicar amb elles. Quan no està marcat, només es valida el format del correu + electrònic. +shuffle: Barrejar +account: Compte +move: Moure +pushNotification: Notificacions push +subscribePushNotification: Activar les notificacions push +unsubscribePushNotification: Desactivar les notificacions push +pushNotificationAlreadySubscribed: Les notificacions push ja estan activades +pushNotificationNotSupported: El vostre navegador o servidor no admet notificacions + push +license: Llicència +_instanceTicker: + none: No mostrar mai + remote: Mostra per a usuaris remots + always: Mostra sempre +_serverDisconnectedBehavior: + nothing: No fer res + quiet: Mostra un avís discret + reload: Torna a carregar automàticament + dialog: Mostra el diàleg d'avís +_channel: + create: Crea un canal + edit: Edita el canal + setBanner: Establir bàner + removeBanner: Suprimeix el bàner + featured: Tendència + owned: Propietari + usersCount: '{n} Participants' + following: Seguit per + notesCount: '{n} Publicacions' + nameAndDescription: Nom i descripció + nameOnly: Només nom +_instanceMute: + instanceMuteDescription: Això silenciara les publicacions o els impulsos dels servidors + indicats, incloses les dels usuaris que responguin a un usuari des d'un servidor + silenciat. + title: Amaga les publicacions dels servidors a la llista. + instanceMuteDescription2: Separar amb noves línies + heading: Llista de servidors que cal silenciar +_ago: + future: futur + justNow: ara mateix + minutesAgo: Fa {n}m + hoursAgo: Fa {n}h + daysAgo: Fa {n}d + secondsAgo: Fa {n}s + weeksAgo: Fa {n}set + monthsAgo: Fa {n}me + yearsAgo: Fa {n}a +_time: + second: Segon(s) + minute: Minut(s) + hour: Hora(s) + day: Dia(s) +_tutorial: + step5_4: La línia de temps Local {icon} és on pots veure les publicacions de tots + els altres usuaris d'aquest servidor. + step5_2: El teu servidor té activades {timelines} diferents. + step5_3: La línia de temps d'inici {icon} es on pots veure les publicacions dels + comptes que segueixes. + step5_6: La línia de temps de Recomanats {icon} és on pots veure les publicacions + dels servidors que recomanen els administradors. + step5_7: La línia de temps Global {icon} és on pots veure les publicacions de tots + els servidors connectats. + step6_1: Aleshores, què és aquest lloc? + step6_4: Ara ves, explora i diverteix-te! + step1_2: Anem a fer la configuració. Estaràs en funcionament en un tres i no res! + title: Com utilitzar Firefish + step1_1: Benvingut! + step2_1: En primer lloc, empleneu el vostre perfil. + step4_1: Anem a treure't allà fora. + step5_5: La línia de temps Social {icon} és una combinació de les línies de temps + d'Inici i Local. + step6_3: Cada servidor funciona de diferents maneres, i no tots els servidors executen + Firefish. Aquest sí que sí! És una mica complicat, però ho aconseguiràs en poc + temps. + step2_2: Proporcionar informació sobre qui sou facilitarà que altres puguin saber + si volen veure les vostres publicacions o seguir-vos. + step3_1: Ara toca seguir a algunes persones! + step3_2: "Les teves línies de temps d'inici i social es basen en qui seguiu, així + que proveu de seguir un parell de comptes per començar.\nFeu clic al cercle més + situat a la part superior dreta d'un perfil per seguir-los." + step4_2: A algunes persones els agrada fer una publicació de {introduction} o un + senzill "Hola món!" + step5_1: Línies de temps, línies de temps a tot arreu! + step6_2: Bé, no només t'has unit a Firefish. T'has unit a un portal al Fediverse, + una xarxa interconnectada de milers de servidors. +_permissions: + "read:account": Consulta la informació del teu compte + "read:blocks": Consulta la teva llista d'usuaris bloquejats + "write:account": Editar la informació del compte + "read:drive": Accedir als fitxers i carpetes del Disc + "read:messaging": Consulta els teus xats + "write:following": Segueix o deixa de seguir altres comptes + "write:mutes": Editar la teva llista d'usuaris silenciats + "read:notifications": Consulta les teves notificacions + "write:notifications": Gestiona les teves notificacions + "write:user-groups": Editar o suprimir grups d'usuaris + "write:blocks": Editar la llista d'usuaris bloquejats + "write:notes": Redactar o suprimir publicacions + "write:channels": Editar els teus canals + "read:gallery-likes": Consulta la llista de publicacions que t'agraden de la galeria + "write:drive": Editar o suprimir fitxers i carpetes del Disc + "read:favorites": Consulta la teva llista d'adreces d'interès + "write:favorites": Editeu la teva llista d'adreces d'interès + "write:messaging": Escriu o suprimeix missatges de xat + "read:mutes": Consulta la teva llista d'usuaris silenciats + "write:reactions": Edita les teves reaccions + "write:votes": Vota en una enquesta + "write:pages": Edita o suprimeix la teva pàgina + "write:page-likes": Editar les pàgines que t'agraden + "read:user-groups": Consulta els teus grups d'usuaris + "read:channels": Consulta els teus canals + "read:gallery": Consulta la teva galeria + "write:gallery": Edita la teva galeria + "write:gallery-likes": Edita la llista de publicacions que t'agraden de la galeria + "read:following": Consulta la informació sobre a qui segueixes + "read:reactions": Consulta les teves reaccions + "read:pages": Consulta la teva pàgina + "read:page-likes": Veure les pàgines que t'agraden +_poll: + noOnlyOneChoice: Calen almenys dues opcions + canMultipleVote: Permet seleccionar diverses opcions + expiration: Finalitzar l'enquesta + after: Acaba després... + duration: Durada + votesCount: '{n} vots' + totalVotes: '{n} vots en total' + showResult: Veure resultats + choiceN: Opció {n} + noMore: No es poden afegir més opcions + infinite: Mai + at: Acaba el... + deadlineDate: Data de finalització + deadlineTime: Hora + remainingHours: Queden {h} hora(s) {m} minut(s) + remainingDays: Queden {d} dia(s) {h} hores + remainingMinutes: Queden {m} minut(s) {s} segons + voted: Votat + closed: S'ha acabat + remainingSeconds: Queden {s} segons + vote: Vota +_postForm: + _placeholders: + d: Què vols dir? + e: Comença a escriure... + f: Esperant que escriguis... + b: Què passa al teu voltant? + c: En què penses? + a: Què et portes entre mans? + quotePlaceholder: Cita aquesta publicació... + replyPlaceholder: Respon a aquesta publicació... + channelPlaceholder: Publica en un canal... +_charts: + federation: Federació + usersIncDec: Diferència en el nombre d'usuaris + apRequest: Sol·licituds + usersTotal: Nombre total d'usuaris + activeUsers: Usuaris actius + notesIncDec: Diferència en el nombre de publicacions + localNotesIncDec: Diferència en el nombre de publicacions locals + remoteNotesIncDec: Diferència en el nombre de publicacions remotes + notesTotal: Nombre total de publicacions + filesIncDec: Diferència en el nombre de fitxers + filesTotal: Nombre total de fitxers + storageUsageTotal: Ús total d'emmagatzematge + storageUsageIncDec: Diferència en l'ús d'emmagatzematge +_instanceCharts: + requests: Sol·licituds + users: Diferència en el nombre d'usuaris + usersTotal: Nombre acumulat d'usuaris + notes: Diferència en el nombre de publicacions + ffTotal: Nombre acumulat d'usuaris que segueixes/et segueixen + cacheSize: Diferència en la mida de la memòria cau + cacheSizeTotal: Mida total acumulada de la memòria cau + files: Diferència en el nombre de fitxers + filesTotal: Nombre acumulat de fitxers + notesTotal: Nombre acumulat de publicacions + ff: "Diferència en el nombre d'usuaris que segueixes/que et segueixen " +_timelines: + home: Inici + local: Local + recommended: Recomanat + social: Social + global: Global +_menuDisplay: + hide: Amagar + top: Superior + sideFull: Costat + sideIcon: Costat (Icones) +_wordMute: + muteWords: Paraules silenciades + muteWordsDescription: Separeu amb espais per a una condició AND o amb salts de línia + per a una condició OR. + soft: Suau + hard: Dur + muteWordsDescription2: Envolta les paraules clau amb barres inclinades per utilitzar + expressions regulars. + softDescription: Amaga les publicacions que compleixen les condicions establertes + de la línia de temps. + hardDescription: Evita que les publicacions que compleixin les condicions establertes + s'afegeixin a la línia de temps. A més, aquestes publicacions no s'afegiran a + la línia de temps encara que es modifiquin les condicions. + mutedNotes: Publicacions silenciades + muteLangsDescription2: Fes servir el codi del l'idioma. Per exemple en, fr, ja, + zh. + lang: Idioma + langDescription: Amagar les publicacions que coincideixin amb l'idioma a la línia + de temps. + muteLangs: Llenguatges silenciats + muteLangsDescription: Separar amb espais o línies no es per una condició OR. + mutePatterns: Patrons per silenciar +_auth: + shareAccessAsk: Estàs segur que vols autoritzar aquesta aplicació per accedir al + teu compte? + shareAccess: Vols autoritzar "{name}" per accedir a aquest compte? + permissionAsk: 'Aquesta aplicació sol·licita els següents permisos:' + callback: Tornant a l'aplicació + denied: Accés denegat + pleaseGoBack: Si us plau, torneu a l'aplicació + copyAsk: "Posa el següent codi d'autorització a l'aplicació:" + allPermissions: Accés complet al compte +_weekday: + wednesday: Dimecres + saturday: Dissabte + monday: Dilluns + tuesday: Dimarts + friday: Divendres + sunday: Diumenge + thursday: Dijous +_messaging: + groups: Grups + dms: Privat +_antennaSources: + all: Totes les publicacions + homeTimeline: Publicacions dels usuaris que segueixes + users: Publicacions d'usuaris concrets + userGroup: Publicacions d'usuaris d'un grup determinat + userList: Publicacions d'una llista determinada d'usuaris + instances: Publicacions de tots els usuaris d'un servidor +_relayStatus: + requesting: Pendent + accepted: Acceptat + rejected: Rebutjat +deleted: Eliminat +editNote: Edita la publicació +edited: 'Editat a les {time} {date}' +signupsDisabled: Actualment, les inscripcions en aquest servidor estan desactivades. + Si teniu un codi d'invitació per a aquest servidor, introduïu-lo a continuació. +userSaysSomethingReasonQuote: '{name} ha citat una publicació que conté {reason}' +userSaysSomethingReasonReply: '{name} ha respost a una publicació que conté {reason}' +userSaysSomethingReasonRenote: '{name} ha impulsat una publicació que conté {reason}' +highlightCw: Ressalta el contingut de les publicacions advertides +apps: Aplicacions +sendModMail: Envia avís de moderació +preventAiLearning: Evita l'indexació dels bots +preventAiLearningDescription: Sol·liciteu que els models de llenguatge d'IA de tercers + no estudiïn el contingut que pengeu, com ara publicacions i imatges. +pwa: Instal·lar PWA +_experiments: + alpha: Alfa + beta: Beta + release: Publicà + title: Experiments + enablePostImports: Activar l'importació de publicacions + postImportsCaption: Permet als usuaris importar publicacions des de comptes de Firefish, + Misskey, Mastodon, Akkoma i Pleroma. Pot fer que el servidor vagi més lent durant + la importació si la teva cua de feina és saturada. +noGraze: Si us plau, desactiva l'extensió del navegador "Graze for Mastodon", ja que + interfereix amb Firefish. +accessibility: Accessibilitat +jumpToReply: Vés a la resposta +newer: Més nou +older: Més antic +silencedWarning: S'està mostrant aquesta pàgina per què aquest usuari és d'un servidor + que l'administrador a silenciat, així que pot ser spam. +jumpToPrevious: Salta a l'anterior +cw: Avís de contingut +antennasDesc: "Les antenes mostren publicacions noves que coincideixen amb els criteris + establerts!\nS'hi pot accedir des de la pàgina de línies de temps." +expandOnNoteClick: Obre la publicació amb un clic +expandOnNoteClickDesc: Si està desactivat, encara pots obrir les publicacions al menú + del botó dret o fent clic a la marca de temps. +channelFederationWarn: Els canals encara no es federen amb altres servidors +searchPlaceholder: Cercar a Firefish +listsDesc: Les llistes et permeten crear línies de temps amb usuaris específics. Es + pot accedir des de la pàgina de línies de temps. +clipsDesc: Els clips són com marcadors categoritzats que es poden compartir. Podeu + crear clips des del menú de publicacions individuals. +selectChannel: Selecciona un canal +isLocked: Aquest compte té les següents aprovacions +isPatron: Mecenes de Firefish +isBot: Aquest es un compte automatitzat +isModerator: Moderador +isAdmin: Administrador +_filters: + fromDomain: Des del domini + notesBefore: Publicacions anteriors + notesAfter: Publicacions posteriors + followingOnly: Només seguint + followersOnly: Només seguidors + withFile: Amb arxiu + fromUser: De l'usuari +image: Imatge +video: Vídeo +audio: Àudio +_dialog: + charactersExceeded: "S'han superat el màxim de caràcters! Actual: {current}/Límit: + {max}" + charactersBelow: 'No hi ha caràcters suficients! Corrent: {current}/Limit: {min}' +removeReaction: Elimina la teva reacció +reactionPickerSkinTone: To de pell d'emoji preferit +alt: ALT +_skinTones: + light: Clar + mediumLight: Clar Mitx + medium: Mitx + mediumDark: Fosc Mitx + dark: Fosc + yellow: Groc +swipeOnMobile: Permet lliscar entre pàgines +enableIdenticonGeneration: Habilitar la generació d'Identicon +enableServerMachineStats: Habilitar les estadístiques del maquinari del servidor +showPopup: Notificar els usuaris amb una finestra emergent +showWithSparkles: Mostra amb espurnes +youHaveUnreadAnnouncements: Tens anuncis sense llegir +xl: XL +donationLink: Enllaç a la pàgina de donacions +neverShow: No tornis a mostrar +remindMeLater: Potser després +removeMember: Elimina el membre +removeQuote: Elimina la cita +removeRecipient: Elimina el destinatari +verifiedLink: Enllaç verificat +_feeds: + rss: RSS + atom: Atom + jsonFeed: Feed JSON + copyFeed: Copiar feed +origin: Origen +objectStorageS3ForcePathStyle: Feu servir rutes URLs per als extrems +objectStorageS3ForcePathStyleDesc: Activeu aquesta opció per crear URL per extrems + en el format "s3.amazonaws.com//" sobre ".s3.amazonaws.com". +deletePasskeys: Suprimeix les contrasenyes +deletePasskeysConfirm: Això suprimirà de manera irreversible totes les contrasenyes + i claus de seguretat d'aquest compte. Procedir? +inputNotMatch: L'entrada no coincideix +delete2fa: Desactivar 2FA +delete2faConfirm: Això suprimirà irreversiblement 2FA en aquest compte. Procedir? +addRe: Afegeix "re:" al començament del comentari quant responguis a un missatge amb + avís de contingut +confirm: Confirmar +importZip: Importar ZIP +exportZip: Exportar ZIP +detectPostLanguage: Detecta l'idioma automàticament i mostra un botó per els articles + en altres idiomes +indexableDescription: Permet al cercador intern mostrar els missatges públics +indexable: Indexable +languageForTranslation: Idioma de traducció d'articles +openServerInfo: Mostra la informació del servidor fent clic al símbol del servidor + en un missatge +vibrate: Activar vibracions +clickToShowPatterns: Fes clic per veure el mòdul de patrons +iconSet: Conjunt d'Icones +_iconSets: + fill: Omplerts + regular: Normals + bold: Negreta + duotone: Bitó + light: Prims +showAttachedNotes: Mostra publicacions que contenen aquest fitxer +reactions: Reaccions +attachedToNotes: Publicacions que contenen aquest fitxer +replies: Respostes +quotes: Cites +renotes: Impulsos +moreUrls: Pàgines fixades +moreUrlsDescription: "Introdueix les pàgines que vols fixar al menú d'ajuda a la part + inferior esquerra fent servir aquesta notació:\n\"Nom a mostrar\": https://example.com/" +suggested: Suggerit +noLanguage: Cap idioma definit +showPreviewByDefault: Per defecte mostrar la previsualització al formulari per publicar +preventMisclick: Prevenció del clic accidental +hideFollowButtons: Amagar els botons que estiguin en una posició on no es poden activar +forMobile: Mòbil +squareCatAvatars: Mostrar avatars quadrats per a comptes de gats +replaceChatButtonWithAccountButton: Canviar el botó de xats amb el botó de canvi de + compte +replaceWidgetsButtonWithReloadButton: Canviar el botó de ginys amb el botó de recarregar +searchEngine: Motor de cerca fet servir a la barra MFM +postSearch: Publicar els resultats en aquest servidor +showBigPostButton: Mostrar un botó gegant al formulari de publicació +_emojiModPerm: + unauthorized: Res + add: Afegir + mod: Afegir i Editar + full: Permet Tot +emojiModPerm: Gestió de permisos específics per a emojis +emojiModPermDescription: "Afegir: Permet a aquest usuari afegir nous emojis i fixar + etiqueta/categoria/llicència als emojis personalitzats afegits nous.\nAfegir i Editar: + Permisos de \"Afegir\" + Permet a aquest usuari editar el nom/categoria/etiqueta/llicència + dels emojis personalitzats existents.\nPermet tot: Permisos de \"Afegir i Editar\"\ + \ + Permet a aquest usuari esborrar els emojis personalitzats existents." +private: Privat +makePrivate: Fer privat +makePrivateConfirm: Aquesta operació enviarà una sol·licitud d'eliminació als servidors + remots i canviarà la visibilitat a privat. Continuar? +privateDescription: Visible només per a tu +useCdn: Aconsegueix els recursos des de el CDN +useCdnDescription: Carrega alguns dels recursos estàtics com ara Twemoji des de el + CDN de JSDeliver en comptes de carregar-los des d'aquest servidor Firefish. +releaseToReload: Deixa anar per actualitzar +reloading: Actualitzant +enableTimelineStreaming: Actualitza les línies de temps automàticament +enablePullToRefresh: Activa "Baixa per actualitzar" +pullDownToReload: Baixa per actualitzar +pullToRefreshThreshold: Distancia de baixada per actualitzar +searchWords: Paraules / ID o adreça URL que vols cercar +noSentFollowRequests: No has enviat cap sol·licitud de seguiment +sentFollowRequests: Enviar sol·licituds de seguiment +replyMute: Silencia les respostes a les línies de temps +replyUnmute: Treu el silencia de les respostes a les línies de temps +searchWordsDescription: "Per cercar publicacions, escriu el terme a buscar. Separa + les paraules amb espais per fer condicions AND o escriules dins de cometes per fer + una cerca OR.\nPer exemple, 'dia nit' trobarà publicacions que continguin tan 'dia' + com 'nit', i 'dia OR nit' trobara publicacions que continguin tant 'dia' com 'nit' + (o ambdues).\nPots filtrar certes paraules en els resultats de la cerca, com 'endormiscat + -matí -esmorzar'. Encara més, pots combinar aquestes condicions AND/OR/exclude d'aquesta + manera '(mati OR nit) endormiscat -esmorzar'.\n Si vols cercar per una seqüencia + de paraules (per exemple una frase) has d'escriure-les entre cometes dobles, per + no fer una cerca amb condicionant AND: \"Avui he aprés\"\n \nSi vols anar a una + pàgina d'usuari o publicació en concret, escriu la adreça URL o la ID en aquest + camp i fes clic al botó 'Ves a'. Fent clic a 'Cerca' trobarà publicacions que, literalment + , continguin la ID/adreça URL." +searchPostsWithFiles: Només publicacions amb fitxers +searchCwAndAlt: Inclou avisos de contingut i arxius amb descripcions +searchUsers: Publicat per (opcional) +searchRange: Publicat entre les dates (opcional) +publishTimelines: Publica línies de temps per visitants +toPost: Publicar +publishTimelinesDescription: Si està activat, les línies de temps Global i Local es + mostraran a {url} fins i tot sense estar registrat. +noAltTextWarning: Alguns fitxers adjunts no tenen una descripció. T'has s oblidat + d'escriure-les? +showNoAltTextWarning: Mostra un avís si públiques un fitxer sense descripció +toReply: Resposta +toQuote: Citar +toEdit: Edita +searchUsersDescription: "Per buscar publicacions concretes d'un usuari/servidor, escriu + la ID (@usuari@exemple.com, o @usuari per un usuari local) o nom del domini (exemple.com).\n + \nSi escrius 'me' (sense cometes), totes les teves publicacions (incloent-hi publicacions + sense llistar, només per a seguidors i secretes) es buscaran.\n\nSi escrius 'local' + (sense cometes), el resultat serà filtrat per mostrar només publicacions d'aquest + servidor." +messagingUnencryptedInfo: Els xats a Firefish no són encriptats d'extrem a extrem. + No comparteixis dades sensibles fent servir Firefish. +searchRangeDescription: "Si vols filtrar per un període de temps, has de fer servir + aquest format: 20220615-20231031\n\nSi no escrius l'any (per exemple 0105-0106 o + 20231105-0110), serà interpretat com l'any en curs.\n\nInclús pots ometre la data + de començament o de finalització. Per exemple, -0102 filtrarà els resultats per + mostrar només publicacions fetes abans del 2 de gener d'aquest any, i 20231026- + filtrarà els resultats per mostrar publicacions fetes després del 26 d'octubre del + 2023." +moderationNote: Nota de moderació +ipFirstAcknowledged: Data en què es va veure la adreça IP per primera vegada +driveCapacityOverride: Capacitat del disc esgotada +incorrectLanguageWarning: "Semblar ser que la teva publicació es troba en {detected}, + però has seleccionat {current}.\nVols canviar l'idioma a {detected}?" +markLocalFilesNsfwByDefault: Marcar tots els fitxers locals nous com a sensibles per + defecte +markLocalFilesNsfwByDefaultDescription: Independentment d'aquest ajust, els usuaris + poden treure l'etiqueta NSFW els mateixos. Els fitxers que ja existeixen no es veuen + afectats. +autocorrectNoteLanguage: Mostra un avís si l'idioma de la publicació no coincideix + amb el resultat de l'idioma detectat automàticament +noteEditHistory: Historial d'edicions +media: Multimèdia +antennaLimit: El nombre màxim d'antenes que pot crear un usuari +showAddFileDescriptionAtFirstPost: Obra de forma automàtica un formulari per escriure + una descripció quant intentes publicar un fitxer que no en té +remoteFollow: Seguiment remot +cannotEditVisibility: No pots canviar la visibilitat +useThisAccountConfirm: Vols continuar amb aquest compte? +inputAccountId: Sisplau introdueix el teu compte (per exemple @firefish@info.firefish.dev) +getQrCode: Mostrar el codi QR +copyRemoteFollowUrl: Còpia la adreça URL del seguidor remot +foldNotification: Agrupar les notificacions similars +slashQuote: Cita encadenada +i18nServerInfo: Els nous clients els trobares en {language} per defecte. +i18nServerChange: Fes servir {language} en comptes. +i18nServerSet: Fes servir {language} per els nous clients. +mergeThreadInTimeline: Fusiona diferents publicacions en un mateix fil a les línies + de temps +mergeRenotesInTimeline: Agrupa diferents impulsos d'una mateixa publicació +_later: + future: futur + justNow: ara mateix + secondsAgo: en {n}s + minutesAgo: en {n}min + daysAgo: en {n}d + weeksAgo: en {n}s + monthsAgo: en {n}me + yearsAgo: en {n}a + hoursAgo: en {n}h +scheduledDate: Publica el +scheduledPost: Programa aquesta publicació +scheduledPostAt: Aquesta publicació s'enviarà {time} +cancelScheduledPost: Elimina la planificació +addAlt4MeTag: "Afegeix automàticament l'etiqueta #Alt4Me a les teves publicacions + que tinguin un fitxer adjunt sense descripció" +strongPassword: Bona contrasenya +turnOffCatLanguage: Desactiva la conversió al llenguatge de gat +announcement: Anunci diff --git a/locales/cs-CZ.yml b/locales/cs-CZ.yml new file mode 100644 index 0000000..8a08c78 --- /dev/null +++ b/locales/cs-CZ.yml @@ -0,0 +1,1008 @@ +_lang_: "Čeština" +headlineFirefish: "Síť propojená poznámkami" +introFirefish: "Vítejte! Firefish je otevřený a decentralizovaný microblogový servis.\n\ + \"Poznámkami\" můžete sdílet co se zrovna děje se všemi ve Vašem okolí. 📡\nPomocí + \"reakcí\" můžete sdílet své názory a pocity na ostatní poznámky. 👍\nPojďte objevovat + nový svět! 🚀" +monthAndDay: "{day}. {month}." +search: "Vyhledávání" +notifications: "Oznámení" +username: "Uživatelské jméno" +password: "Heslo" +forgotPassword: "Zapomenuté heslo" +fetchingAsApObject: "Načítám data z Fediversu" +ok: "Potvrdit" +gotIt: "Rozumím!" +cancel: "Zrušit" +enterUsername: "Zadej uživatelské jméno" +renotedBy: "{user} přeposla/a" +noNotes: "Žádné poznámky" +noNotifications: "Žádná oznámení" +instance: "Server" +settings: "Nastavení" +basicSettings: "Obecná nastavení" +otherSettings: "Rozšířená nastavení" +openInWindow: "Otevřít v novém okně" +profile: "Váš profil" +timeline: "Časová osa" +noAccountDescription: "Tento uživatel zatím nenapsal svou biografii." +login: "Přihlásit se" +loggingIn: "Probíhá přihlašování" +logout: "Odhlásit" +signup: "Registrace" +uploading: "Nahrávám" +save: "Uložit" +users: "Uživatelé" +addUser: "Přidat uživatele" +favorite: "Oblíbené" +favorites: "Oblíbené" +unfavorite: "Odebrat z oblízených" +favorited: "Přidáno do oblíbených" +alreadyFavorited: "Už je mezi oblíbenými" +cantFavorite: "Nepodařilo se přidat mezi oblíbené." +pin: "Připnout" +unpin: "Odepnout" +copyContent: "Zkopírovat obsah" +copyLink: "Kopírovat odkaz" +delete: "Smazat" +deleteAndEdit: "Smazat a upravit" +deleteAndEditConfirm: "Jste si jistí že chcete smazat tuto poznámku a editovat ji? + Ztratíte tím všechny reakce, sdílení a odpovědi na ni." +addToList: "Přidat do seznamu" +sendMessage: "Odeslat zprávu" +copyUsername: "Kopírovat uživatelské jméno" +searchUser: "Vyhledat uživatele" +reply: "Odpovědět" +loadMore: "Zobrazit více" +showMore: "Zobrazit více" +showLess: "Zavřít" +youGotNewFollower: "Máte nového následovníka" +receiveFollowRequest: "Žádost o sledování přijata" +followRequestAccepted: "Žádost o sledování přijata" +mention: "Zmínění" +mentions: "Zmínění" +importAndExport: "Import a export" +import: "Importovat" +export: "Exportovat" +files: "Soubor(ů)" +download: "Stáhnout" +driveFileDeleteConfirm: "Opravdu chcete smazat soubor \"{name}\"? Soubor bude odstraněn + ze všech příspěvků, které ji obsahují jako přílohu." +unfollowConfirm: "Jste si jisti že už nechcete sledovat {name}?" +exportRequested: "Požádali jste o export. To může chvíli trvat. Přidáme ho na váš + Disk až bude dokončen." +importRequested: "Požádali jste o export. To může chvilku trvat." +lists: "Seznamy" +noLists: "Nemáte žádné seznamy" +note: "Poznámka" +notes: "Poznámky" +following: "Sledovaní" +followers: "Sledující" +followsYou: "Sledují vás" +createList: "Vytvořit seznam" +manageLists: "Spravovat seznam" +error: "Chyba" +somethingHappened: "Jejda. Něco se nepovedlo." +retry: "Opakovat" +pageLoadError: "Nepodařilo se načíst stránku" +serverIsDead: "Server neodpovídá. Počkejte chvíli a zkuste to znovu." +youShouldUpgradeClient: "Pro zobrazení této stránky obnovte stránku pro aktualizaci + klienta." +enterListName: "Jméno seznamu" +privacy: "Soukromí" +makeFollowManuallyApprove: "Žádosti o sledování vyžadují potvrzení" +defaultNoteVisibility: "Výchozí viditelnost" +follow: "Sledovaní" +followRequest: "Odeslat žádost o sledování" +followRequests: "Žádosti o sledování" +unfollow: "Přestat sledovat" +followRequestPending: "Čekající žádosti o sledování" +enterEmoji: "Vložte emoji" +renote: "Přeposlat" +unrenote: "Zrušit přeposlání" +renoted: "Přeposláno" +cantRenote: "Tento příspěvek nelze přeposlat." +cantReRenote: "Odpověď nemůže být odstraněna." +quote: "Citovat" +pinnedNote: "Připnutá poznámka" +pinned: "Připnout" +you: "Vy" +clickToShow: "Klikněte pro zobrazení" +sensitive: "NSFW" +add: "Přidat" +reaction: "Reakce" +reactionSettingDescription2: "Přetažením změníte pořadí, kliknutím smažete, zmáčkněte + \"+\" k přidání" +rememberNoteVisibility: "Zapamatovat nastavení zobrazení poznámky" +attachCancel: "Odstranit přílohu" +markAsSensitive: "Označit jako NSFW" +unmarkAsSensitive: "Odznačit jako NSFW" +enterFileName: "Zadejte název souboru" +mute: "Ztlumit" +unmute: "Odmlčet" +block: "Zablokovat" +unblock: "Odblokovat" +suspend: "Zmrazit" +unsuspend: "Odmrazit" +blockConfirm: "Jste si jistí že chcete zablokovat tento účet?" +unblockConfirm: "Jste si jistí že chcete odblokovat tento účet?" +suspendConfirm: "Jste si jistí že chcete suspendovat tenhle účet?" +unsuspendConfirm: "Jste si jistí že chcete obnovit tenhle účet?" +selectList: "Vybrat seznam" +selectAntenna: "Vyberte Anténu" +selectWidget: "Zvolte widget" +editWidgets: "Upravit widget" +editWidgetsExit: "Hotovo" +customEmojis: "Vlastní emoji" +emoji: "Emoji" +emojis: "Emoji" +emojiName: "Jméno emoji" +emojiUrl: "URL obrázku" +addEmoji: "Přidat emoji" +settingGuide: "Doporučené nastavení" +cacheRemoteFiles: "Ukládání vzdálených souborů do mezipaměti" +cacheRemoteFilesDescription: "Zakázání tohoto nastavení způsobí, že vzdálené soubory + budou odkazovány přímo, místo aby byly ukládány do mezipaměti. Tím se ušetří úložiště + na serveru, ale zvýší se provoz, protože se negenerují miniatury." +flagAsBot: "Tento účet je bot" +flagAsBotDescription: "Pokud je tento účet kontrolován programem zaškrtněte tuto možnost. + To označí tento účet jako bot pro ostatní vývojáře a zabrání tak nekonečným interakcím + s ostatními boty a upraví Firefish systém aby se choval k tomuhle účtu jako bot." +flagAsCat: "Tenhle účet je kočka" +flagAsCatDescription: "Vyberte tuto možnost aby tento účet byl označen jako kočka." +flagShowTimelineReplies: "Zobrazovat odpovědi na časové ose" +flagShowTimelineRepliesDescription: "Je-li zapnuto, zobrazí odpovědi uživatelů na + poznámky jiných uživatelů na vaší časové ose." +autoAcceptFollowed: "Automaticky akceptovat následování od účtů které sledujete" +addAccount: "Přidat účet" +loginFailed: "Přihlášení se nezdařilo." +showOnRemote: "Více na původním profilu" +general: "Obecně" +wallpaper: "Obrázek na pozadí" +setWallpaper: "Nastavení obrázku na pozadí" +removeWallpaper: "Odstranit pozadí" +searchWith: "Hledat: {q}" +youHaveNoLists: "Nemáte žádné seznamy" +followConfirm: "Jste si jisti, že chcete sledovat {name}?" +proxyAccount: "Proxy účet" +proxyAccountDescription: "Proxy účet je účet, který za určitých podmínek sleduje uživatele + na dálku vaším jménem. Například když uživatel zařadí vzdáleného uživatele do seznamu, + pokud nikdo nesleduje uživatele na seznamu, aktivita nebude doručena instanci, takže + místo toho bude uživatele sledovat účet proxy." +host: "Hostitel" +selectUser: "Vyberte uživatele" +recipient: "Pro" +annotation: "Komentáře" +federation: "Federace" +instances: "Instance" +registeredAt: "Registrován" +latestRequestSentAt: "Poslední požadavek poslán" +latestRequestReceivedAt: "Poslední požadavek přijat" +latestStatus: "Poslední status" +storageUsage: "Využití úložiště" +charts: "Grafy" +perHour: "za hodinu" +perDay: "za den" +stopActivityDelivery: "Přestat zasílat aktivitu" +blockThisInstance: "Blokovat tuto instanci" +operations: "Operace" +software: "Software" +version: "Verze" +metadata: "Metadata" +monitor: "Monitorovat" +jobQueue: "Fronta úloh" +cpuAndMemory: "CPU a paměť" +network: "Síť" +disk: "Disk" +instanceInfo: "Informace o instanci" +statistics: "Statistiky" +clearQueue: "Vyčistit frontu" +clearQueueConfirmTitle: "Jste si jisti že zrušit všechny úlohy ve frontě?" +clearCachedFiles: "Vyprázdnit mezipaměť" +blockedInstances: "Blokované instance" +noUsers: "Žádní uživatelé" +editProfile: "Upravit můj profil" +pinLimitExceeded: "Nemůžete připnout další poznámky." +intro: "Instalace Firefish byla dokončena! Prosím vytvořte admina." +done: "Hotovo" +processing: "Zpracovávám" +preview: "Náhled" +default: "Výchozí" +noCustomEmojis: "Bez Emoji" +blocked: "Blokováno" +suspended: "Suspendováno" +all: "Vše" +subscribing: "Odebíráte" +publishing: "Publikuji" +notResponding: "Neodpovídá" +instanceFollowing: "Následovníci na instanci" +instanceFollowers: "Následovníci na instanci" +instanceUsers: "Uživatelé této instance" +changePassword: "Změnit heslo" +security: "Zabezpečení" +retypedNotMatch: "Zadané údaje se neshodují." +currentPassword: "Současné heslo" +newPassword: "Nové heslo" +newPasswordRetype: "Nové heslo (znovu)" +attachFile: "Přiložit soubor" +more: "Více!" +featured: "Oblíbené poznámky" +usernameOrUserId: "Uživatelské jméno nebo uživatelské id" +noSuchUser: "Uživatel nebyl nalezen" +announcements: "Oznámení" +imageUrl: "URL obrázku" +remove: "Smazat" +removed: "Smazáno" +removeAreYouSure: "Jste si jistí že chcete smazat \"{x}\"?" +deleteAreYouSure: "Jste si jistí že chcete smazat \"{x}\"?" +resetAreYouSure: "Opravdu resetovat?" +saved: "Uloženo" +messaging: "Zprávy" +upload: "Nahrát soubory" +fromDrive: "Z disku" +fromUrl: "Z URL" +uploadFromUrl: "Nahrát z URL adresy" +uploadFromUrlDescription: "URL adresa souboru, který chcete nahrát" +uploadFromUrlMayTakeTime: "Může trvat nějakou dobu, dokud nebude dokončeno nahrávání." +explore: "Objevovat" +messageRead: "Přečtené" +noMoreHistory: "To je vše" +startMessaging: "Zahájit chat" +nUsersRead: "přečteno {n} uživateli" +agreeTo: "Souhlasím s {0}" +tos: "Podmínky užívání" +start: "Začít" +home: "Domů" +remoteUserCaution: "Tyto informace nemusí být aktuální jelikož uživatel je ze vzdálené + instance." +activity: "Aktivita" +images: "Obrázky" +birthday: "Datum narození" +yearsOld: "{age} let" +registeredDate: "Datum registrace" +location: "Lokace" +theme: "Vzhled" +themeForLightMode: "Vzhled pro použití ve světlém režimu" +themeForDarkMode: "Vzhled k použití v tmavém režimu" +light: "Světlý" +dark: "Tmavý" +lightThemes: "Světlý vzhled" +darkThemes: "Tmavý vzhled" +syncDeviceDarkMode: "Synchronizovat tmavý vzhled s nastavením Vašeho systému" +drive: "Úložiště" +fileName: "Název souboru" +selectFile: "Vybrat soubor" +selectFiles: "Vybrat soubory" +selectFolder: "Vyberte složku" +selectFolders: "Vyberte složky" +renameFile: "Přejmenovat soubor" +folderName: "Název složky" +createFolder: "Vytvořit složku" +renameFolder: "Přejmenovat složku" +deleteFolder: "Odstranit složku" +addFile: "Přidat soubor" +emptyFolder: "Tato složka je prázdná" +unableToDelete: "Nelze smazat" +inputNewFileName: "Zadejte nový název" +inputNewFolderName: "Zadejte název nové složky" +copyUrl: "Kopírovat URL" +rename: "Přejmenovat" +avatar: "Avatar" +banner: "Baner" +nsfw: "NSFW" +disconnectedFromServer: "Spojení bylo přerušeno" +reload: "Aktualizovat" +doNothing: "Ignorovat" +watch: "Sledovat" +unwatch: "Přestat sledovat" +accept: "Souhlasím" +reject: "Odmítnout" +normal: "Normální" +instanceName: "Název instance" +instanceDescription: "Popis instance" +maintainerName: "Správce" +maintainerEmail: "E-mailová adresa správce" +tosUrl: "URL pro smluvní podmínky" +thisYear: "Tento rok" +thisMonth: "Tento měsíc" +today: "Dnes" +dayX: "{day}" +monthX: "{month}" +yearX: "{year}" +pages: "Stránky" +enableLocalTimeline: "Povolit lokální čas" +enableGlobalTimeline: "Povolit globální čas" +registration: "Registrace" +enableRegistration: "Povolit registraci novým uživatelům" +invite: "Pozvat" +inMb: "V megabajtech" +iconUrl: "Favicon URL" +bannerUrl: "Baner URL" +backgroundImageUrl: "Adresa URL obrázku pozadí" +basicInfo: "Základní informace" +pinnedUsers: "Připnutí uživatelé" +pinnedNotes: "Připnutá poznámka" +hcaptcha: "hCaptcha" +enableHcaptcha: "Aktivovat hCaptchu" +hcaptchaSiteKey: "Klíč stránky" +hcaptchaSecretKey: "Tajný Klíč (Secret Key)" +recaptcha: "reCAPTCHA" +enableRecaptcha: "Zapnout ReCAPTCHu" +recaptchaSiteKey: "Klíč stránky" +recaptchaSecretKey: "Tajný Klíč (Secret Key)" +antennas: "Antény" +manageAntennas: "Spravovat Antény" +name: "Jméno" +antennaSource: "Zdroj Antény" +enableServiceworker: "Povolit ServiceWorker" +caseSensitive: "Rozlišuje malá a velká písmena" +connectedTo: "Následující účty jsou připojeny" +notesAndReplies: "Poznámky a odpovědi" +withFiles: "Včetně souborů" +popularUsers: "Populární uživatelé" +recentlyUpdatedUsers: "Nedávno aktívni uživatelé" +popularTags: "Populární tagy" +userList: "Seznamy" +about: "Informace" +aboutFirefish: "O Firefish" +administrator: "Administrátor" +token: "Token" +twoStepAuthentication: "Dvoufaktorová autentikace" +moderator: "Moderátor" +nUsersMentioned: "{n} uživatelů zmínilo" +securityKey: "Bezpečnostní klíč" +securityKeyName: "Název klíče" +registerSecurityKey: "Registrovat bezpečnostní klíč" +lastUsed: "Naposledy použito" +unregister: "Odstranit" +resetPassword: "Resetovat heslo" +newPasswordIs: "Nové heslo je \"{password}\"" +reduceUiAnimation: "Snížit UI animace" +share: "Sdílet" +notFound: "Nenalezeno" +notFoundDescription: "Nebyla nalezená žádná stránka korespondující se zadanou URL." +uploadFolder: "Výchozí lokace pro upload" +cacheClear: "Vymazat cache" +markAsReadAllNotifications: "Označit všechna oznámení za přečtená" +markAsReadAllUnreadNotes: "Označit všechny příspěvky za přečtené" +markAsReadAllTalkMessages: "Označit všechny zprávy za přečtené" +help: "Nápověda" +inputMessageHere: "Sem zadejte zprávu" +close: "Zavřít" +group: "Skupina" +groups: "Skupiny" +createGroup: "Vytvořit skupinu" +ownedGroups: "Vlastněné skupiny" +joinedGroups: "Členství ve skupinách" +invites: "Pozvat" +groupName: "Název skupiny" +members: "Členové" +transfer: "Převod" +title: "Titulek" +text: "Text" +enable: "Povolit" +next: "Další" +retype: "Zadejte znovu" +noteOf: "{user} poznámky" +inviteToGroup: "Pozvat do skupiny" +quoteAttached: "Citace" +quoteQuestion: "Přiložit jako citaci?" +noMessagesYet: "Zatím tu nejsou žádné zprávy" +newMessageExists: "Máte novou zprávu" +onlyOneFileCanBeAttached: "Ke zprávě můžete přiložit jenom jeden soubor" +signinRequired: "Přihlašte se, prosím" +invitations: "Pozvat" +invitationCode: "Kód pozvánky" +checking: "Ověřuji" +available: "K dispozici" +unavailable: "Není k dispozici" +usernameInvalidFormat: "Písmena, čísla a _ jsou povolená." +tooShort: "Příliš krátké" +tooLong: "Příliš dlouhé" +weakPassword: "Slabé heslo" +normalPassword: "Dobré heslo" +veryStrongPassword: "Silné heslo" +passwordMatched: "Hesla se schodují" +passwordNotMatched: "Hesla se neschodují" +signinWith: "Přihlásit se s {x}" +signinFailed: "Nelze se přihlásit. Zkontrolujte prosím své uživatelské jméno a heslo." +tapSecurityKey: "Ťukněte na bezpečnostní klíč" +or: "Nebo" +language: "Jazyk" +uiLanguage: "Jazyk uživatelského rozhraní" +groupInvited: "Pozvat do skupiny" +aboutX: "O {x}" +useOsNativeEmojis: "Použití nativních emoji operačního systému" +youHaveNoGroups: "Nemáte žádné skupiny" +joinOrCreateGroup: "Můžete požádat o pozvání do stávající skupiny nebo vytvořit novou." +noHistory: "Žádná historie" +signinHistory: "Historie přihlášení" +category: "Kategorie" +tags: "Štítky" +createAccount: "Vytvořit účet" +existingAccount: "Existující účet" +regenerate: "Obnovit" +fontSize: "Velikost písma" +openImageInNewTab: "Otevřít obrázek v novém panelu" +dashboard: "Přehled" +local: "Lokální" +remote: "Vzdálené" +total: "Celkem" +weekOverWeekChanges: "Týdně" +dayOverDayChanges: "Denně" +appearance: "Vzhled" +clientSettings: "Nastavení klienta" +accountSettings: "Nastavení účtu" +promotion: "Propagace" +promote: "Propagovat" +numberOfDays: "Počet dní" +objectStorageBaseUrl: "Base URL" +objectStorageBucket: "Bucket" +objectStoragePrefix: "Předpona" +objectStorageEndpoint: "Endpoint" +objectStorageRegion: "Región" +objectStorageUseSSL: "Použít SSL" +deleteAll: "Smazat vše" +showFixedPostForm: "Zobrazit formulář pro nové příspěvky nad časovou osou" +listen: "Poslouchat" +showInPage: "Zobrazit na stránce" +popout: "Pop-out" +volume: "Hlasitost" +masterVolume: "Celková hlasitost" +details: "Detaily" +chooseEmoji: "Vybrat emotikon" +unableToProcess: "Operace nebyla dokončena." +recentUsed: "Naposledy použité" +install: "Nainstalovat" +uninstall: "Odinstalovat" +installedApps: "Autorizované aplikace" +nothing: "Nic nebylo nalezeno" +lastUsedDate: "Poslední použití" +state: "Stav" +sort: "Seřadit" +ascendingOrder: "Vzestupně" +descendingOrder: "Sestupně" +scratchpad: "Zápisník" +output: "Výstup" +script: "Skript" +updateRemoteUser: "Aktualizovat informace o vzdáleném účtu" +deleteAllFiles: "Smazat všechny soubory" +deleteAllFilesConfirm: "Jste si jistí že chcete smazat všechny soubory?" +userSuspended: "Tomuto uživateli byl pozastaven účet." +menu: "Menu" +divider: "Dělící čára" +addItem: "Přidat položku" +relays: "Relay" +addRelay: "Přidat Relay" +inboxUrl: "Inbox URL" +deletedNote: "Odstraněné příspěvky" +invisibleNote: "Skryté příspěvky" +description: "Popis" +author: "Autor" +manage: "Administrace" +width: "Šířka" +height: "Výška" +large: "Velké" +medium: "Střední" +small: "Malé" +generateAccessToken: "Vygenerovat přístupový token" +permission: "Oprávnění" +enableAll: "Povolit vše" +disableAll: "Vypnout vše" +notificationType: "Typy oznámení" +edit: "Upravit" +emailServer: "Mailový server" +enableEmail: "Zapnout email dystribuci" +email: "Email" +emailAddress: "Emailová adresa" +smtpConfig: "Konfigurace SMTP serveru" +smtpHost: "Hostitel" +smtpPort: "Port" +smtpUser: "Uživatelské jméno" +smtpPass: "Heslo" +smtpSecureInfo: "Toto vypněte pokud používáte STARTTLS" +testEmail: "Otestovat doručení emailů" +makeActive: "Aktivovat" +display: "Zobrazit" +copy: "Kopírovat" +metrics: "Metriky" +overview: "Shrnutí" +logs: "Logy" +delayed: "Prodleva" +database: "Databáze" +channel: "Kanály" +create: "Vytvořit" +notificationSetting: "Nastavení oznámení" +useGlobalSetting: "Použít globální nastavení" +other: "Ostatní" +fileIdOrUrl: "ID nebo URL souboru" +behavior: "Chování" +sample: "Ukázka" +send: "Odeslat" +openInNewTab: "Otevřít v nové kartě" +random: "Náhodně" +system: "Systém" +desktop: "Plocha" +clip: "Oříznout" +createNew: "Vytvořit nový" +optional: "Volitelné" +yes: "Ano" +no: "Ne" +notSet: "Není nastaveno" +emailVerified: "Váš e-mail byl ověřen" +contact: "Kontakt" +useSystemFont: "Použít výchozí font systému" +clips: "Oříznout" +experimentalFeatures: "Experimentální funkce" +developer: "Vývojář" +duplicate: "Duplikovat" +left: "Vlevo" +center: "Uprostřed" +wide: "Široké" +narrow: "Úzké" +clearCache: "Vyprázdnit mezipaměť" +nUsers: "{n} užívatelů" +nNotes: "{n} poznámek" +myTheme: "Moje vzhledy" +backgroundColor: "Pozadí" +accentColor: "Akcent" +textColor: "Barva textu" +saveAs: "Uložit jako…" +advanced: "Pokročilé" +value: "Hodnota" +createdAt: "Vytvořeno" +updatedAt: "Upraveno" +saveConfirm: "Uložit změny?" +deleteConfirm: "Opravdu smazat?" +invalidValue: "Neplatná hodnota." +registry: "Registr" +info: "Informace" +unknown: "Neznámý" +onlineStatus: "Online status" +hideOnlineStatus: "Skrýt Váš online status" +hideOnlineStatusDescription: "Skrytí vašeho online stavu může snížit funkcionalitu + některých funkcí, například vyhledávání." +online: "Online" +active: "Aktivní" +offline: "Offline" +notRecommended: "Nedoporučuje se" +botProtection: "Bot ochrana" +instanceBlocking: "Blokované instance" +selectAccount: "Vybrat účet" +switchAccount: "Přepnout účet" +enabled: "Zapnuto" +disabled: "Vypnuto" +quickAction: "Rychlé akce" +user: "Uživatelé" +administration: "Administrace" +accounts: "Účty" +switch: "Přepnout" +configure: "Nastavit" +gallery: "Galerie" +recentPosts: "Poslední příspěvky" +ads: "Reklamy" +memo: "Memo" +priority: "Priorita" +high: "Vysoká" +middle: "Střední" +low: "Nízká" +emailNotConfiguredWarning: "E-mailová adresa není nastavena." +ratio: "Poměr" +global: "Globální" +sent: "Odeslat" +hashtags: "Hashtagy" +troubleshooting: "Poradce při potížích" +whatIsNew: "Zobrazit změny" +translate: "Přeložit" +hide: "Skrýt" +smartphone: "Telefon" +tablet: "Tablet" +auto: "Auto" +size: "Velikost" +numberOfColumn: "Počet sloupců" +indefinitely: "Navždy" +tenMinutes: "10 minut" +oneHour: "1 hodina" +oneDay: "1 den" +oneWeek: "1 týden" +reflectMayTakeTime: "Může trvat nějakou dobu, než se projeví změny." +cropImage: "Oříznout obrázek" +file: "Soubor(ů)" +recentNHours: "Posledních {n} hodin" +recentNDays: "Posledních {n} dnů" +recommended: "Doporučeno" +deleteAccount: "Odstranit účet" +document: "Dokumentace" +logoutConfirm: "Opravdu se chcete odhlásit?" +pleaseSelect: "Vybrat možnost" +reverse: "Otočit" +colored: "Barevné" +type: "Typ" +speed: "Rychlost" +slow: "Pomalá" +fast: "Rychlá" +account: "Účty" +_ad: + back: "Zpět" +_gallery: + my: "Moje galerie" +_email: + _follow: + title: "Máte nového následovníka" +_plugin: + install: "Instalovat plugin" + manage: "Správce pluginů" +_preferencesBackups: + list: "Vytvořit backup" + loadFile: "Načíst ze souboru" + save: "Uložit změny" +_registry: + scope: "Rozsah" + key: "Klíč" + keys: "Klíče" + domain: "Doména" + createKey: "Vytvořit klíč" +_aboutFirefish: + allContributors: "Všichni přispěvatelé" + source: "Zdrojový kód" +_mfm: + mention: "Zmínění" + hashtag: "Hashtag" + link: "Odkaz" + bold: "Tučně" + quote: "Citovat" + emoji: "Vlastní emoji" + search: "Vyhledávání" + flip: "Otočit" + tada: "Animace (tadá)" + blur: "Rozmazání" + font: "Font" + rainbow: "Duha" +_channel: + featured: "Trendy" +_menuDisplay: + top: "Nahoru" + hide: "Skrýt" +_theme: + install: "Nainstalovat vzhled" + manage: "Správa vzhledů" + code: "Kód vzhledu" + description: "Popis" + installedThemes: "Nainstalované vzhledy" + constant: "Konstanta" + defaultValue: "Výchozí hodnota" + color: "Barva" + key: "Klíč" + func: "Funkce " + keys: + shadow: "Stín" + header: "Nadpis" + link: "Odkaz" + hashtag: "Hashtag" + mention: "Zmínění" + renote: "Přeposlat" + divider: "Dělící čára" +_sfx: + note: "Poznámky" + notification: "Oznámení" + chat: "Zprávy" +_ago: + future: "Budoucí" + justNow: "Teď" +_time: + second: "Sekund" + minute: "Minut" + hour: "Hodin" +_2fa: + registerTOTP: "Přidat zařízení" + registerSecurityKey: "Přidat bezpečnostní klíč" +_weekday: + sunday: "Neděle" + monday: "Pondělí" + tuesday: "Úterý" + wednesday: "Středa" + thursday: "Čtvrtek" + friday: "Pátek" + saturday: "Sobota" +_widgets: + notifications: "Oznámení" + timeline: "Časová osa" + calendar: "Kalendář" + trends: "Trendy" + clock: "Hodiny" + rss: "RSS čtečka" + activity: "Aktivita" + photos: "Fotky" + digitalClock: "Digitální hodiny" + federation: "Federace" + slideshow: "Prezentace" + button: "Tlačítko" + onlineUsers: "Online uživatelé" + jobQueue: "Fronta úloh" + aiscript: "AiScript conzole" + aichan: "Ai" +_cw: + hide: "Skrýt" + show: "Zobrazit více" +_poll: + noMore: "Více už přidat nemůžete" + infinite: "Nikdy" + deadlineDate: "Datum ukončení" + deadlineTime: "Hodin" + duration: "Trvání" +_visibility: + home: "Domů" + followers: "Sledující" +_postForm: + _placeholders: + f: "Čekám, až něco napíšete..." +_profile: + name: "Jméno" + username: "Uživatelské jméno" + description: "O mně" + youCanIncludeHashtags: "V popisku o Vás můžete použít i hastagy." + metadata: "Doplňující informace" + metadataContent: "Obsah" +_exportOrImport: + allNotes: "Všechny poznámky" + followingList: "Sledovaní" + muteList: "Ztlumit" + blockingList: "Zablokovat" + userLists: "Seznamy" +_charts: + federation: "Federace" + apRequest: "Požadavek" + usersTotal: "Celkem uživatelů" + activeUsers: "Aktivní uživatelé" + notesTotal: "Celkový počet poznámek" +_timelines: + home: "Domů" + global: "Globální" +_pages: + newPage: "Vytvořit novou stránku" + editPage: "Upravit stránku" + created: "Stránka byla úspěšně vytvořena" + updated: "Stránka byla úspěšně aktualizována" + deleted: "Stránka byla úspěšně smazána" + pageSetting: "Nastavení stránky" + invalidNameText: "Ujistěte se že jméno stránky je vyplněno" + contents: "Obsah" + fontSerif: "Serif" + fontSansSerif: "Sans Serif" + chooseBlock: "Přidat blok" + selectType: "Vyberte typ" + contentBlocks: "Obsah" + inputBlocks: "Vstup" + specialBlocks: "Speciální" + blocks: + text: "Text" + textarea: "Textové pole" + section: "Sekce" + image: "Obrázky" + button: "Tlačítko" + if: "Pokud" + _if: + variable: "Proměnná" + _post: + text: "Obsah" + canvasId: "Canvas ID" + _textInput: + name: "Jméno proměnné" + text: "Titulek" + default: "Výchozí hodnota" + _textareaInput: + name: "Jméno proměnné" + text: "Titulek" + default: "Výchozí hodnota" + _numberInput: + name: "Jméno proměnné" + text: "Titulek" + default: "Výchozí hodnota" + canvas: "Canvas" + _canvas: + id: "Canvas ID" + width: "Šířka" + height: "Výška" + _switch: + name: "Jméno proměnné" + text: "Titulek" + default: "Výchozí hodnota" + _counter: + name: "Jméno proměnné" + text: "Titulek" + inc: "Krok" + _button: + text: "Titulek" + colored: "Barevné" + _action: + _dialog: + content: "Obsah" + _radioButton: + name: "Jméno proměnné" + default: "Výchozí hodnota" + script: + categories: + list: "Seznamy" + blocks: + text: "Text" + _strLen: + arg1: "Text" + _strPick: + arg1: "Text" + _strReplace: + arg1: "Text" + _strReverse: + arg1: "Text" + _join: + arg1: "Seznamy" + _subtract: + arg1: "A" + arg2: "B" + _multiply: + arg1: "A" + arg2: "B" + _divide: + arg1: "A" + arg2: "B" + _mod: + arg1: "A" + arg2: "B" + round: "Zaokrouhlení zlomku" + _round: + arg1: "Číselná hodnota" + eq: "A a B jsou stejné" + _eq: + arg1: "A" + arg2: "B" + notEq: "A a B jsou odlišné" + _notEq: + arg1: "A" + arg2: "B" + _and: + arg1: "A" + arg2: "B" + _or: + arg1: "A" + arg2: "B" + _lt: + arg1: "A" + arg2: "B" + _gt: + arg1: "A" + arg2: "B" + _ltEq: + arg1: "A" + arg2: "B" + _gtEq: + arg1: "A" + arg2: "B" + if: "Větev" + _if: + arg1: "Pokud" + arg2: "Potom" + arg3: "Nebo" + random: "Náhodně" + _random: + arg1: "Pravděpodobnost" + rannum: "Náhodné číslo" + _rannum: + arg1: "Minimální hodnota" + arg2: "Maximální hodnota" + _randomPick: + arg1: "Seznamy" + _dailyRandom: + arg1: "Pravděpodobnost" + _dailyRannum: + arg1: "Minimální hodnota" + arg2: "Maximální hodnota" + _dailyRandomPick: + arg1: "Seznamy" + _seedRandom: + arg2: "Pravděpodobnost" + _seedRannum: + arg2: "Minimální hodnota" + arg3: "Maximální hodnota" + _seedRandomPick: + arg2: "Seznamy" + _pick: + arg1: "Seznamy" + _listLen: + arg1: "Seznamy" + number: "Číselná hodnota" + _stringToNumber: + arg1: "Text" + _numberToString: + arg1: "Číselná hodnota" + _splitStrByLine: + arg1: "Text" + types: + string: "Text" + number: "Číselná hodnota" + array: "Seznamy" +_notification: + youWereFollowed: "Máte nového následovníka" + youWereInvitedToGroup: "Pozvat do skupiny" + _types: + all: "Vše" + follow: "Sledovaní" + mention: "Zmínění" + reply: "Odpovědi" + renote: "Přeposlat" + quote: "Citovat" + reaction: "Reakce" + _actions: + reply: "Odpovědět" + renote: "Přeposlat" +_deck: + _columns: + notifications: "Oznámení" + tl: "Časová osa" + antenna: "Antény" + list: "Seznamy" + mentions: "Zmínění" +noteDeleteConfirm: Chcete opravdu smazat tento příspěvek? +defaultValueIs: 'Výchozí: {value}' +lookup: Hledat +keepOriginalUploading: Ponechat originální obrázek +uploadFromUrlRequested: Vyžádáno nahrání souboru +manageGroups: Spravovat skupiny +reloadConfirm: Znovu načíst časovou osu? +driveCapacityPerRemoteAccount: Místo na disku pro vzdálené uživatele +silenceThisInstance: Ztlumit tuto instance +silencedInstances: Ztlumené instance +blockedInstancesDescription: Zadejte seznam domén instancí, jež chcete blokovat. Uvedené + instance nebudou moci s touto instancí komunikovat. +hiddenTags: Skryté hashtagy +noInstances: Nejsou zde žádné instance +silenced: Ztlumené +disablingTimelinesInfo: Administrátoři a moderátoři budou vždy mít přístup ke všem + časovým osám, i pokud jsou vypnuté. +deleted: Vymazáno +editNote: Upravit poznámku +edited: 'Upraveno dne {date} {time}' +silencedInstancesDescription: Vypište hostnames instancí, které chcete ztlumit. Účty + v uvedených instancích jsou považovány za "ztlumené", mohou pouze zadávat požadavky + na sledování a nemohou zmiňovat místní účty, pokud nejsou sledovány. Na blokované + instance toto nebude mít vliv. +hiddenTagsDescription: 'Vypište hashtagy (bez #), které chcete skrýt před trendy a + prozkoumat. Skryté hashtagy jsou stále zjistitelné jinými způsoby. Blokované případy + nejsou ovlivněny, i když jsou zde uvedeny.' +circularReferenceFolder: Cílová složka je podsložka přesouvané složky. +whenServerDisconnected: Při ztrátě spojení se serverem +pinnedUsersDescription: Uveďte uživatelská jména uživatelů připnutých na stránce "Procházet", + jedno na řádek. +pinnedPagesDescription: Zadejte cesty ke stránkám, které chcete připnout na horní + stránku této instance, oddělené zlomy řádků. +pageLoadErrorDescription: Toto je obvykle způsobeno chybami sítě nebo mezipaměti prohlížeče. + Zkuste vymazat mezipaměť a po chvíli čekání to zkuste znovu. +emptyDrive: Váš disk je prázdný +inputNewDescription: Zadejte nový popisek +hasChildFilesOrFolders: Složka nemůže být smazána, protože není prázdná. +noThankYou: Ne, děkuji +addInstance: Přidat server +selectInstance: Vybrat si instance +blockedUsers: Zablokovaní uživatelé +muteAndBlock: Ztlumení a blokace +noJobs: Žádné úlohy +federating: Federace +clearQueueConfirmText: Nedoručené příspěvky, které zůstanou ve frontě, nebudou federovány. + Obvykle tato operace není potřeba. +clearCachedFilesConfirm: Chcete opravdu vymazat mezipaměť všech vzdálených souborů? +accountMoved: 'Uživatel/ka se přesunul/a na nový účet:' +keepOriginalUploadingDescription: Ponechá originálně nahraný obrázek tak, jak je. + Pokud vypnuto, verze pro zobrazení na webu bude vygenerována při nahrání. +mutedUsers: Ztlumení uživatelé +enableRecommendedTimeline: Povolit doporučenou časovou osu +driveCapacityPerLocalAccount: Místo na disku pro místní uživatele +pinnedPages: Připnuté Stránky +directNotes: Přímé zprávy +enableEmojiReactions: Povolit reakce pomocí emoji +showEmojisInReactionNotifications: Zobrazit emotikony v oznámeních o reakcích +reactionSetting: Reakce, které se mají zobrazit v seznamu reakcí +renoteMute: Ztlumit přeposílání +renoteUnmute: Zrušit ztlumení přeposílání +flagSpeakAsCat: Mluvit jako kočka +flagSpeakAsCatDescription: Vaše příspěvky budou v kočičím režimu nyanifikovány. +newer: novější +older: starší +jumpToPrevious: Skočit na předchozí diff --git a/locales/da-DK.yml b/locales/da-DK.yml new file mode 100644 index 0000000..04f0f8c --- /dev/null +++ b/locales/da-DK.yml @@ -0,0 +1,236 @@ +_lang_: "Dansk" +monthAndDay: '{month}/{day}' +search: Søge +notifications: Notifikationer +username: Brugernavn +password: Adgangskode +forgotPassword: Glemt adgangskode +fetchingAsApObject: Henter fra Fediverset +ok: OK +gotIt: Forstået! +cancel: Annullere +enterUsername: Indtast brugernavn +instance: Instans +renotedBy: Forstærket fra {user} +noNotes: Ingen opslag +otherSettings: Andre Indstillinger +profile: Profil +timeline: Tidslinje +signup: Registrere +logout: Log Ud +login: Log ind +uploading: Uploader... +save: Gem +users: Brugere +favorited: Tilsat til bogmærker. +unfavorite: Fjerne fra bogmærker +alreadyFavorited: Allerede inden i bogmærker. +pin: Fastgøre til profil +unpin: Løse fra profil +delete: Slet +addToList: Tilsæt til liste +deleteAndEdit: Slet og ændre +reply: Svar +loadMore: Indlæs mere +receiveFollowRequest: Følgeanmodning er blevet sendt +import: Importere +export: Eksportere +driveFileDeleteConfirm: Er du sikker på at du vil slette filen "{name}"? Denne vil + blive slettet fra alle tilknyttede opslage. +unfollowConfirm: Er du sikker på at du vil ikke følge {name} længere? +privacy: Privatlivs +enterListName: Indtast navnen for denne list +makeFollowManuallyApprove: Følgeanmodninger kræver godkendelse +unrenote: Fratag forstærkelse +renote: Forstærk +add: Tilsæt +reactionSetting: Reaktioner til at vise i reaktion-vælgeren +reactionSettingDescription2: Bevæg til at flytte om på, tryk til at slette og indtast + "+" til at tilsætte. +rememberNoteVisibility: Husk opslagsynlidhedsindstillinger +emojis: Emoji +flagShowTimelineReplies: Vis svare i tidslinjen +flagAsCatDescription: Du kommer til at få katøre og tale som en kat! +showOnRemote: Vis på fjerninstans +general: Generelt +accountMoved: 'Bruger har flyttet til et nyt konto:' +settings: Indstillinger +basicSettings: Primær Indstillinger +openInWindow: Åben i vindue +noAccountDescription: Denne bruger har ikke skrevet deres bio endnu. +loggingIn: Logger ind +cantFavorite: Kunne ikke tilsætte til bogmærker. +copyUsername: Kopi brugernavn +copyContent: Kopi indholdet +copyLink: Kopi link +searchUser: Søg for en bruger +files: Filer +noLists: Du har ingen liste +lists: Lister +reaction: Reaktioner +sensitive: NSFW +emoji: Emoji +cacheRemoteFilesDescription: Når denne indstilling er deaktiveret, fremmed filer bliver + indlæset direkte fra denne fjerneinstans. Hvis du deaktivere dette så vil det formindske + brugte opbevaringsplads men det vil også få netværktraffic til at stige fordi miniaturebilleder + vil ikke blive skabt. +flagAsBot: Markere denne konto som en robot +flagShowTimelineRepliesDescription: Vis svare af brugere til opslage af andre brugere + i tidslinjen hvis den bliver tændt. +loginFailed: Kunne ikke logge ind +silenceThisInstance: Nedtone denne instans +deleteAndEditConfirm: Er du sikker på at du vil slet denne opslag og ændre det? Du + vil tabe alle reaktioner, forstærkninger og svarer indenfor denne opslag. +editNote: Ændre note +deleted: Slettet +edited: 'Ændret den {date} {time}' +sendMessage: Send en besked +youShouldUpgradeClient: Til at vise denne side, vær sød at refresh til at opdatere + din brugerenhed. +defaultNoteVisibility: Standard synlighed +follow: Følge +followRequest: Følge +followRequests: Følgeanmodninger +unfollow: Følge ikke længere +followRequestPending: Følgeanmodning ventes på +enterEmoji: Indtast en emoji +renoted: Forstærket. +cantRenote: Denne opslag kunne ikke forstærkes. +cantReRenote: En forstærkelse kan ikke forstærkes. +quote: Citere +pinnedNote: Fastgjort opslag +pinned: Fastgøre til profil +you: Dig +clickToShow: Tryk til at vise +unblock: Blokere ikke længere +suspend: Suspendere +unsuspend: Suspendere ikke længere +blockConfirm: Er du sikker på at du vil blokere denne konto? +unblockConfirm: Er du sikker på at du vil ikke blokere denne konto endnu længere? +suspendConfirm: Er du sikker på at du vil suspendere denne konto? +selectAntenna: Vælg en antenne +selectWidget: Vælg en widget +editWidgets: Ændre widgettere +customEmojis: Brugerdefineret emoji +emojiName: Emoji navn +operations: Operationer +software: Software +metadata: Metadata +version: Version +monitor: Vagt +jobQueue: Jobkø +statistics: Statistik +cpuAndMemory: CPU og hukommelse +network: Netværk +disk: Disk +instanceInfo: Instans information +noThankYou: Nej tak +noNotifications: Intet notifikationer +addUser: Indsæt en bruger +addInstance: Indsæt en instans +favorite: Indsæt til bogmærker +favorites: Bogmærker +showMore: Vis mere +showLess: Luk +youGotNewFollower: følgte dig +followRequestAccepted: Følgeanmodning accepteret +mention: Nævne +mentions: Nævnene +directNotes: Direkt beskeder +importAndExport: Importere/Eksporter data +download: Download +exportRequested: Du har bedt om en eksport. Det vil tage noget tid. Den vil blive + tilsæt til din Drev når den er færdig. +importRequested: Du har bedt om en eksport. Det vil tage noget tid. +note: Opslag +notes: Opslage +following: Følger +followers: Følgere +followsYou: Følger dig +createList: Skab en list +manageLists: Administrere lister +error: Fejl +somethingHappened: En fejl har opstået +retry: Gentage +pageLoadError: En fejl har opstået ved indlæsning af siden. +pageLoadErrorDescription: Dette er normalt på grund af netværksproblemer eller din + browser's cache. Prøv at ryd cachen og så gentage efter et styk tid. +serverIsDead: Serveren svarer ikke. Vær sød at vente et styk tid og prøv igen. +editWidgetsExit: Færdig +headlineFirefish: En åben-kildekode, decentraliseret social-media platform som er + frit forevigt! 🚀 +introFirefish: Velkommen! Firefish er en åbent-kildekode, decentraliseret social-media + platform som er frit forevigt!🚀 +enableEmojiReactions: Aktivere emoji reaktioner +unsuspendConfirm: Er du sikker på at du vil ikke suspendere denne konto endnu længere? +selectList: Vælg en list +showEmojisInReactionNotifications: Vis emoji i reaktion notifikationer +attachCancel: Fjern tilknyttelse +markAsSensitive: Markere som NSFW +unmarkAsSensitive: Markere ikke som NSFW længere +enterFileName: Indtast filnavn +mute: Nedtone +unmute: Nedtone ikke længere +renoteMute: Nedtone forstærkninger +renoteUnmute: Nedtone forstærkninger ikke længere +block: Blokere +cacheRemoteFiles: Cachere fremmed filer +flagAsBotDescription: Aktivere denne valgmulighed hvis denne konto er kontrolleret + af en komputerprogram. Hvis den et tændt så vil det signalere til andre udviklere + som arbejder på komputer-kontrolleret social-media kontoer og det vil også adjustere + Firefish's indresystemer til at behandle denne konto som en robot. +flagAsCat: Er du en kat? 😺 +flagSpeakAsCat: Tale som en kat +emojiUrl: Emoji URL +addEmoji: Tilsæt +settingGuide: Anbefalet indstillinger +flagSpeakAsCatDescription: Din opslage vil blive nyaniferet når du er i kat-mode +autoAcceptFollowed: Automatisk godkende følgeanmodninger fra brugere som du selv følger +addAccount: Tilsæt konto +wallpaper: Baggrund +setWallpaper: Sæt baggrund +removeWallpaper: Fjern baggrund +host: Host +selectUser: Vælg en bruger +searchWith: 'Søge: {q}' +youHaveNoLists: Du har ingen liste +followConfirm: Er du sikker på at du vil gerne følge {name}? +proxyAccount: Proxykonto +proxyAccountDescription: En proxykonto er en konto som virker som en fremmed følger + for bruger under særlige konditioner. For eksempel, når en bruger tilsætter en fjernbruger + til denne list, vil denne fjernbruger's aktivitet ikke blive leveret til den instans + hvis ingen lokalebruger følger fjernbrugeren, så denne proxykonto vil følge den + istedetfor. +instances: Instanser +registeredAt: Registreret på +latestRequestSentAt: Sidste anmodning sendt +latestRequestReceivedAt: Sidste anmodning modtaget +selectInstance: Vælg en instans +recipient: Recipient(er) +annotation: Kommentarer +federation: Føderation +latestStatus: Senest status +storageUsage: Opbevaringspladsbrug +charts: Grafer +perHour: Hver time +perDay: Hver dag +stopActivityDelivery: Stop med at sende aktiviteter +blockThisInstance: Blokere denne instans +muteAndBlock: Mutes og blokeringer +mutedUsers: Mutede brugere +newer: nyere +older: ældre +silencedInstances: Nedtonede servere +clearQueue: Ryd kø +clearQueueConfirmTitle: Er du sikker på, at du ønsker at rydde køen? +clearCachedFiles: Ryd cache +clearCachedFilesConfirm: Er du sikker på, at du ønsker at slette alle cachede eksterne + filer? +blockedInstances: Blokerede servere +blockedInstancesDescription: Listen af navne på servere, du ønsker at blokere. Servere + på listen vil ikke længere kunne kommunikere med denne server. +hiddenTags: Skjulte hashtags +clearQueueConfirmText: De indlæg i denne kø, der ikke allerede er leveret, vil ikke + blive federeret. Denne operation er almindeligvis ikke påkrævet. +jumpToPrevious: Spring til tidligere +cw: Advarsel om indhold diff --git a/locales/de-DE.yml b/locales/de-DE.yml new file mode 100644 index 0000000..8d701fd --- /dev/null +++ b/locales/de-DE.yml @@ -0,0 +1,2344 @@ +_lang_: "Deutsch" +headlineFirefish: "Eine dezentralisierte Open-Source Social Media Plattform, die für + immer gratis bleibt! 🚀" +introFirefish: "Willkommen! Firefish ist eine dezentralisierte Open-Source Social + Media Plattform, die für immer gratis bleibt!🚀" +monthAndDay: "{day}.{month}." +search: "Suchen" +notifications: "Benachrichtigungen" +username: "Nutzername" +password: "Passwort" +forgotPassword: "Passwort vergessen" +fetchingAsApObject: "Wird aus dem Fediverse angefragt" +ok: "OK" +gotIt: "Verstanden!" +cancel: "Abbrechen" +enterUsername: "Nutzername eingeben" +renotedBy: "Geteilt von {user}" +noNotes: "Keine Beiträge" +noNotifications: "Keine Benachrichtigungen" +instance: "Server" +settings: "Einstellungen" +basicSettings: "Grundeinstellungen" +otherSettings: "Weitere Einstellungen" +openInWindow: "In einem Fenster öffnen" +profile: "Profil" +timeline: "Timelines" +noAccountDescription: "Dieser Nutzer hat seine Profilbeschreibung noch nicht ausgefüllt." +login: "Login" +loggingIn: "Du wirst angemeldet" +logout: "Logout" +signup: "Registrieren" +uploading: "Wird hochgeladen …" +save: "Speichern" +users: "Nutzer" +addUser: "Nutzer hinzufügen" +favorite: "Zu den Lesezeichen hinzufügen" +favorites: "Lesezeichen" +unfavorite: "Aus den Lesezeichen entfernen" +favorited: "Zu den Lesezeichen hinzugefügt." +alreadyFavorited: "Bereits zu den Lesezeichen hinzugefügt." +cantFavorite: "Hinzufügen zu den Lesezeichen fehlgeschlagen." +pin: "An dein Profil anheften" +unpin: "Von deinem Profil lösen" +copyContent: "Inhalt kopieren" +copyLink: "Link kopieren" +delete: "Löschen" +deleteAndEdit: "Löschen und Bearbeiten" +deleteAndEditConfirm: "Möchtest du diesen Beitrag wirklich löschen und bearbeiten? + Alle Rückmeldungen, Renotes und Antworten dieses Beitrages werden verloren gehen." +addToList: "Zu Liste hinzufügen" +sendMessage: "Eine Mitteilung senden" +copyUsername: "Nutzernamen kopieren" +searchUser: "Nach einem Nutzer suchen" +reply: "Antworten" +loadMore: "Mehr laden" +showMore: "Mehr anzeigen" +showLess: "Schließen" +youGotNewFollower: "folgt dir" +receiveFollowRequest: "Follow-Anfrage erhalten" +followRequestAccepted: "Follow-Anfrage akzeptiert" +mention: "Erwähnung" +mentions: "Erwähnungen" +directNotes: "Direktmitteilungen" +importAndExport: "Daten Im- und Export" +import: "Import" +export: "Export" +files: "Dateien" +download: "Herunterladen" +driveFileDeleteConfirm: "Möchtest du die Datei \"{name}\" wirklich löschen? Es wird + aus allen Beiträgen entfernt, welche die Datei als Anhang enthalten." +unfollowConfirm: "Bist du dir sicher, daß du {name} nicht mehr folgen möchtest?" +exportRequested: "Du hast einen Export angefragt. Dies kann etwas Zeit in Anspruch + nehmen. Sobald der Export abgeschlossen ist, wird er deinem Laufwerk hinzugefügt." +importRequested: "Du hast einen Import angefragt. Dies kann etwas Zeit in Anspruch + nehmen." +lists: "Listen" +noLists: "Du hast keine Listen angelegt" +note: "Beitrag" +notes: "Beiträge" +following: "Folgend" +followers: "Folgen mir" +followsYou: "Folgt dir" +createList: "Liste erstellen" +manageLists: "Listen verwalten" +error: "Fehler" +somethingHappened: "Ein Fehler ist aufgetreten" +retry: "Wiederholen" +pageLoadError: "Beim Laden der Seite ist ein Fehler aufgetreten." +pageLoadErrorDescription: "Dies wird in der Regel durch Netzwerkfehler oder den Cache + des Browsers verursacht. Versuchen Sie, den Cache zu leeren, und versuchen Sie es + dann erneut, nachdem Sie eine Weile gewartet haben." +serverIsDead: "Der Server antwortet nicht. Bitte warte einen Moment und versuche es + dann erneut." +youShouldUpgradeClient: "Bitte aktualisiere diese Seite, um eine neuere Version deines + Clients zu verwenden." +enterListName: "Gib einen Namen für die Liste ein" +privacy: "Privatsphäre" +makeFollowManuallyApprove: "Folgeanfragen müssen akzeptiert werden" +defaultNoteVisibility: "Standard-Sichtbarkeit" +follow: "Folgen" +followRequest: "Follow anfragen" +followRequests: "Follow-Anfragen" +unfollow: "Nicht mehr folgen" +followRequestPending: "Follow-up-Anfrage ausstehend" +enterEmoji: "Ein Emoji eingeben" +renote: "Boost" +unrenote: "Boost zurücknehmen" +renoted: "Geboostet." +cantRenote: "Dieser Beitrag kann nicht geboostet werden." +cantReRenote: "Ein Boost kann nicht geboostet werden." +quote: "Zitieren" +pinnedNote: "Angepinnter Beitrag" +pinned: "An das Profil anheften" +you: "Du" +clickToShow: "Zum Anzeigen anklicken" +sensitive: "NSFW" +add: "Hinzufügen" +reaction: "Reaktion" +reactionSetting: "Reaktionen, die in der Reaktionsauswahl angezeigt werden sollen" +reactionSettingDescription2: "Ziehen Sie, um neu zu ordnen, klicken Sie, um zu löschen, + drücken Sie \"+\", um hinzuzufügen." +rememberNoteVisibility: "Einstellungen für die Sichtbarkeit von Beiträgen speichern" +attachCancel: "Anhang entfernen" +markAsSensitive: "Als NSFW kennzeichnen" +accountMoved: "Der Nutzer ist zu einem neuen Konto umgezogen:" +unmarkAsSensitive: "NSFW Kennzeichnung aufheben" +enterFileName: "Dateiname eingeben" +mute: "Stummschalten" +unmute: "Stummschaltung aufheben" +block: "Blockieren" +unblock: "Blockierung aufheben" +suspend: "Suspendieren" +unsuspend: "Suspendierung aufheben" +blockConfirm: "Sind Sie sicher, dass Sie dieses Konto sperren wollen?" +unblockConfirm: "Sind Sie sicher, dass Sie die Sperrung dieses Kontos aufheben wollen?" +suspendConfirm: "Sind Sie sicher, dass Sie dieses Konto sperren wollen?" +unsuspendConfirm: "Sind Sie sicher, dass Sie dieses Konto entsperren wollen?" +selectList: "Wählen Sie eine Liste aus" +selectAntenna: "News-Picker auswählen" +selectWidget: "Ein Widget auswählen" +editWidgets: "Widgets bearbeiten" +editWidgetsExit: "Erledigt" +customEmojis: "Benutzerdefinierte Emoji" +emoji: "Emoji" +emojis: "Emoji" +emojiName: "Emoji-Name" +emojiUrl: "Emoji-URL" +addEmoji: "Emoji hinzufügen" +settingGuide: "Empfohlene Einstellungen" +cacheRemoteFiles: "Cache für entfernte Dateien" +cacheRemoteFilesDescription: "Ist diese Einstellung deaktiviert, so werden Dateien + von anderen Servern direkt von dort geladen. Hierdurch wird Speicherplatz auf diesem + Server eingespart, aber durch die fehlende Generierung von Vorschaubildern wird + mehr Bandbreite benötigt." +flagAsBot: "Dieses Nutzerkonto als Bot kennzeichnen" +flagAsBotDescription: "Aktiviere diese Option, falls dieses Nutzerkonto durch ein + Programm (Bot) gesteuert wird. Wenn aktiviert, agiert es als Flag für Entwickler + zur Verhinderung von endlosen Kettenreaktionen mit anderen Bots. Firefishs interne + Systeme behandelt dieses Nutzerkonto als Bot." +flagAsCat: "Bist du eine Katze? 😺" +flagAsCatDescription: "Du bekommst Katzenohren und sprichst wie eine Katze!" +flagShowTimelineReplies: "Antworten in der Timeline anzeigen" +flagShowTimelineRepliesDescription: "Zeigt Antworten von Nutzern auf Beiträge anderer + Nutzer in der Timeline an, wenn diese Funktion aktiviert ist." +autoAcceptFollowed: "Automatisches Genehmigen von Folgeanfragen von Benutzern, denen + Sie folgen" +addAccount: "Nutzerkonto hinzufügen" +loginFailed: "Anmeldung fehlgeschlagen" +showOnRemote: "Zur Ansicht auf dem Herkunftsserver" +general: "Allgemein" +wallpaper: "Hintergrundbild" +setWallpaper: "Hintergrundbild festlegen" +removeWallpaper: "Hintergrundbild entfernen" +searchWith: "Suchen: {q}" +youHaveNoLists: "Sie haben keine Listen" +followConfirm: "Sind Sie sicher, dass Sie {name} folgen möchten?" +proxyAccount: "Proxy-Konto" +proxyAccountDescription: "Ein Proxy-Konto ist ein Nutzerkonto, das sich für Nutzer + unter bestimmten Konditionen wie ein Follower von einem anderen Server verhält. + Zum Beispiel wird die Aktivität eines Nutzers von einem anderen Server nicht an + diesen Server übermittelt, falls es keinen Nutzer von diesem Server gibt, der diesem + Nutzer von einem anderen Server folgt. In diesem Fall folgt stattdessen das Proxy-Nutzerkonto." +host: "Host" +selectUser: "Wählen Sie einen Nutzer" +recipient: "Empfänger" +annotation: "Anmerkungen" +federation: "Föderation" +instances: "Server" +registeredAt: "Registriert unter" +latestRequestSentAt: "Letzte Anfrage gesendet" +latestRequestReceivedAt: "Letzte erhaltene Anfrage" +latestStatus: "Aktueller Stand" +storageUsage: "Nutzung des Speichers" +charts: "Diagramme" +perHour: "Pro Stunde" +perDay: "Pro Tag" +stopActivityDelivery: "Sendeaktivitäten einstellen" +blockThisInstance: "Diesen Server blockieren" +operations: "Tätigkeiten" +software: "Software" +version: "Version" +metadata: "Metadaten" +monitor: "Überwachung" +jobQueue: "Auftragswarteschlange" +cpuAndMemory: "CPU und Speicher" +network: "Netzwerk" +disk: "Festplatte" +instanceInfo: "Serverinformationen" +statistics: "Statistiken" +clearQueue: "Warteschlange löschen" +clearQueueConfirmTitle: "Sind Sie sicher, dass Sie die Warteschlange löschen wollen?" +clearQueueConfirmText: "Nicht zugestellte Beiträge, die in der Warteschlange verbleiben, + werden nicht föderiert. Normalerweise ist dieser Vorgang nicht erforderlich." +clearCachedFiles: "Cache leeren" +clearCachedFilesConfirm: "Sind Sie sicher, dass Sie alle im Cache zwischengespeicherten + Dateien löschen wollen?" +blockedInstances: "Blockierte Server" +blockedInstancesDescription: "Geben Sie die Hostnamen der Server, getrennt durch einen + Zeilenumbruch, an, die Sie blockieren möchten. Aufgelistete (blockierte) Server + können nicht mehr mit diesem Server kommunizieren." +muteAndBlock: "Stummschaltungen und Blockierungen" +mutedUsers: "Stummgeschaltete Nutzer" +blockedUsers: "Blockierte Nutzer" +noUsers: "Es sind keine Nutzer vorhanden" +editProfile: "Profil bearbeiten" +noteDeleteConfirm: "Sind Sie sicher, dass Sie diesen Beitrag löschen wollen?" +pinLimitExceeded: "Sie können keine weiteren Beiträge anpinnen" +intro: "Die Installation von Firefish ist abgeschlossen! Bitte erstellen Sie einen + Admin-Benutzer." +done: "Erledigt" +processing: "In Bearbeitung" +preview: "Vorschau" +default: "Standard" +defaultValueIs: "Der Standardwert ist: {value}" +noCustomEmojis: "Es gibt keine benutzerdefinierten Emoji" +noJobs: "Keine Jobs vorhanden" +federating: "Eine Verbindung zum Server wird hergestellt" +blocked: "Blockiert" +suspended: "suspendiert" +all: "Alles" +subscribing: "Registrieren" +publishing: "Veröffentlichen" +notResponding: "Antwortet nicht" +instanceFollowing: "Folgen auf dem Server" +instanceFollowers: "Follower des Servers" +instanceUsers: "Nutzer dieses Servers" +changePassword: "Passwort ändern" +security: "Sicherheit" +retypedNotMatch: "Die Eingaben stimmen nicht überein." +currentPassword: "Aktuelles Passwort" +newPassword: "Neues Passwort" +newPasswordRetype: "Neues Passwort bestätigen" +attachFile: "Dateien anhängen" +more: "Mehr!" +featured: "Besonderheiten" +usernameOrUserId: "Nutzername oder Nutzer-ID" +noSuchUser: "Nutzer nicht gefunden" +lookup: "Suche nach" +announcements: "Bekanntmachungen" +imageUrl: "Bild-URL" +remove: "Löschen" +removed: "Erfolgreich gelöscht" +removeAreYouSure: "Sind Sie sicher, dass Sie \"{x}\" entfernen wollen?" +deleteAreYouSure: "Sind Sie sicher, dass Sie \"{x}\" löschen wollen?" +resetAreYouSure: "Wirklich zurücksetzen?" +saved: "Gespeichert" +messaging: "Chat" +upload: "Hochladen" +keepOriginalUploading: "Originalbild behalten" +keepOriginalUploadingDescription: "Speichert das ursprünglich hochgeladene Bild so, + wie es ist. Wenn diese Option deaktiviert ist, wird beim Hochladen eine Version + für die Anzeige im Web erstellt." +fromDrive: "Vom Laufwerk" +fromUrl: "Von einer URL" +uploadFromUrl: "Von einer URL hochladen" +uploadFromUrlDescription: "URL der Datei, die Sie hochladen wollen" +uploadFromUrlRequested: "Upload angefordert" +uploadFromUrlMayTakeTime: "Es kann einige Zeit dauern, bis das Hochladen abgeschlossen + ist." +explore: "Erkunden" +messageRead: "Gelesen" +noMoreHistory: "Es gibt keine weitere Historie" +startMessaging: "Einen neuen Chat beginnen" +nUsersRead: "Gelesen von {n}" +agreeTo: "Ich stimme {0} zu" +tos: "Nutzungsbedingungen" +start: "Beginnen Sie" +home: "Home" +remoteUserCaution: "Informationen von Nutzern anderer Server sind unvollständig." +activity: "Aktivität" +images: "Bilder" +birthday: "Geburtstag" +yearsOld: "{age} Jahre alt" +registeredDate: "Registriert am" +location: "Ort" +theme: "Farbverwaltung" +themeForLightMode: "Farbkombination zur Verwendung im hellen Modus" +themeForDarkMode: "Farbkombination zur Verwendung im dunklen Modus" +light: "Hell" +dark: "Dunkel" +lightThemes: "Helle Farbkombinationen" +darkThemes: "Dunkle Farbkombinationen" +syncDeviceDarkMode: "Einstellung deines Geräts übernehmen" +drive: "Cloud-Drive" +fileName: "Dateiname" +selectFile: "Datei auswählen" +selectFiles: "Dateien auswählen" +selectFolder: "Ordner auswählen" +selectFolders: "Ordner auswählen" +renameFile: "Datei umbenennen" +folderName: "Ordnername" +createFolder: "Ordner erstellen" +renameFolder: "Ordner umbenennen" +deleteFolder: "Ordner löschen" +addFile: "Datei hinzufügen" +emptyDrive: "Deine Cloud-Drive ist leer" +emptyFolder: "Dieser Ordner ist leer" +unableToDelete: "Nicht löschbar" +inputNewFileName: "Gib einen neuen Dateinamen ein" +inputNewDescription: "Gib eine neue Beschreibung ein" +inputNewFolderName: "Gib einen neuen Ordnernamen ein" +circularReferenceFolder: "Der Zielordner ist ein Unterorder des Ordners, den du verschieben + möchtest." +hasChildFilesOrFolders: "Dieser Ordner kann nicht gelöscht werden, da er nicht leer + ist." +copyUrl: "URL kopieren" +rename: "Umbenennen" +avatar: "Profilbild" +banner: "Banner" +nsfw: "NSFW" +whenServerDisconnected: "Bei Verbindungsverlust zum Server" +disconnectedFromServer: "Die Verbindung zum Server wurde getrennt" +reload: "Aktualisieren" +doNothing: "Ignorieren" +reloadConfirm: "Seite neu laden?" +watch: "Beobachten" +unwatch: "Nicht mehr beobachten" +accept: "Akzeptieren" +reject: "Ablehnen" +normal: "Normal" +instanceName: "Server-Name" +instanceDescription: "Server-Beschreibung" +maintainerName: "Betreiber" +maintainerEmail: "Betreiber-Email" +tosUrl: "URL der Nutzungsbedingungen" +thisYear: "Jahr" +thisMonth: "Monat" +today: "Heute" +dayX: "{day}" +monthX: "{month}" +yearX: "{year}" +pages: "Nutzer-Seiten" +enableLocalTimeline: "Local-Timeline aktivieren" +enableGlobalTimeline: "Global-Timeline aktivieren" +disablingTimelinesInfo: "Administratoren und Moderatoren haben immer Zugriff auf alle + Timelines, auch wenn diese deaktiviert sind." +registration: "Registrieren" +enableRegistration: "Registration neuer Nutzer erlauben" +invite: "Einladen" +driveCapacityPerLocalAccount: "Cloud-Drive-Kapazität pro lokalem Nutzerkonto" +driveCapacityPerRemoteAccount: "Laufwerkskapazität pro Remote-Nutzer" +inMb: "In Megabytes" +iconUrl: "Icon-URL (favicon etc)" +bannerUrl: "Banner-URL" +backgroundImageUrl: "Hintergrundbild-URL" +basicInfo: "Grundlegende Informationen" +pinnedUsers: "Angeheftete Nutzer" +pinnedUsersDescription: "Gib durch Leerzeichen getrennte Nutzer an, die an die \"\ + Erkunden\"-Seite angeheftet werden sollen." +pinnedPages: "Angeheftete Nutzer-Seiten" +pinnedPagesDescription: "Geben Sie die Dateipfade, getrennt durch Zeilenumbrüche, + derjenigen Seiten ein, die Sie an die obere Seitenbegrenzung des Servers anpinnen + möchten." +pinnedClipId: "ID des anzuheftenden Clips" +pinnedNotes: "Angeheftete Beiträge" +hcaptcha: "hCaptcha" +enableHcaptcha: "hCaptcha aktivieren" +hcaptchaSiteKey: "Site key" +hcaptchaSecretKey: "Secret key" +recaptcha: "reCAPTCHA" +enableRecaptcha: "reCAPTCHA aktivieren" +recaptchaSiteKey: "Site key" +recaptchaSecretKey: "Secret key" +avoidMultiCaptchaConfirm: "Das Verwenden von mehreren Captcha-Systemen kann zu Störungen + führen. Sollen die anderen Systeme deaktiviert werden? Durch Abbrechen können mehrere + Systeme aktiviert bleiben." +antennas: "News-Picker" +manageAntennas: "News-Picker verwalten" +name: "Name" +antennaSource: "Quellen der News-Picker" +antennaKeywords: "Zu beobachtende Schlüsselwörter" +antennaExcludeKeywords: "Zu ignorierende Schlüsselwörter" +antennaKeywordsDescription: "Zum Nutzen einer \"UND\"-Verknüpfung Einträge mit Leerzeichen + trennen, zum Nutzen einer \"ODER\"-Verknüpfung Einträge mit einem Zeilenumbruch + trennen." +notifyAntenna: "Über neue Beiträge benachrichtigen" +withFileAntenna: "Nur Beiträge mit Dateien" +enableServiceworker: "Push-Benachrichtigungen im Browser aktivieren" +antennaUsersDescription: "Nutzernamen getrennt durch Zeilenumbrüche angeben" +caseSensitive: "Groß-/Kleinschreibung unterscheiden" +withReplies: "Antworten beinhalten" +connectedTo: "Mit folgenden Nutzerkonten verknüpft" +notesAndReplies: "Beiträge und Antworten" +withFiles: "Beiträge mit Dateien" +attachedToNotes: "Beiträge mit dieser Datei" +showAttachedNotes: "Zeige Beiträge mit dieser Datei" +silence: "stummschalten" +silenceConfirm: "Sind Sie sicher, dass Sie diesen Benutzer Stummschalten möchten?" +unsilence: "Stummschaltung aufheben" +unsilenceConfirm: "Sind Sie sicher, dass Sie die Stummschaltung dieses Benutzers rückgängig + machen wollen?" +popularUsers: "Beliebte Nutzer" +recentlyUpdatedUsers: "Vor kurzem aktive Nutzer" +recentlyRegisteredUsers: "Vor kurzem registrierte Nutzer" +recentlyDiscoveredUsers: "Vor kurzem gefundene Nutzer" +exploreUsersCount: "Es gibt {count} Nutzer" +exploreFediverse: "Das Fediverse erkunden" +popularTags: "Beliebte Schlagwörter" +userList: "Liste" +about: "Über" +aboutFirefish: "Über Firefish" +administrator: "Administrator" +token: "Token" +twoStepAuthentication: "Zwei-Faktor-Authentifizierung" +moderator: "Moderator" +moderation: "Moderation" +nUsersMentioned: "Von {n} Nutzern erwähnt" +securityKey: "Sicherheitsschlüssel" +securityKeyName: "Schlüsselname" +registerSecurityKey: "Sicherheitsschlüssel registrieren" +lastUsed: "Zuletzt benutzt" +unregister: "Deaktivieren" +passwordLessLogin: "Passwortloses Anmelden" +resetPassword: "Passwort zurücksetzen" +newPasswordIs: "Das neue Passwort ist „{password}“" +reduceUiAnimation: "Animationen der Benutzeroberfläche reduzieren" +share: "Teilen" +notFound: "Nicht gefunden" +notFoundDescription: "Es konnte keine Seite unter dieser URL gefunden werden." +uploadFolder: "Standardordner für Uploads" +cacheClear: "Cache leeren" +markAsReadAllNotifications: "Alle Benachrichtigungen als gelesen markieren" +markAsReadAllUnreadNotes: "Alle Beiträge als gelesen markieren" +markAsReadAllTalkMessages: "Alle Chats als gelesen markieren" +help: "Hilfe" +inputMessageHere: "Hier Beitrag eingeben" +close: "Schließen" +group: "Gruppe" +groups: "Gruppen" +createGroup: "Gruppe erstellen" +ownedGroups: "Meine Gruppen" +joinedGroups: "Beigetretene Gruppen" +invites: "Einladungen" +groupName: "Gruppenname" +members: "Mitglieder" +transfer: "Übertragen" +messagingWithUser: "Privatchat" +messagingWithGroup: "Gruppenchat" +title: "Titel" +text: "Text" +enable: "Aktivieren" +next: "Weiter" +retype: "Erneut eingeben" +noteOf: "Beitrag von {user}" +inviteToGroup: "Zu Gruppe einladen" +quoteAttached: "Zitat" +quoteQuestion: "Als Zitat anhängen?" +noMessagesYet: "Noch keine Beiträge vorhanden" +newMessageExists: "Du hast eine neue Nachricht" +onlyOneFileCanBeAttached: "Es kann pro Beitrag nur eine Datei angehängt werden" +signinRequired: "Bitte registriere oder melde dich an, um fortzufahren" +invitations: "Einladungen" +invitationCode: "Einladungscode" +checking: "Wird überprüft …" +available: "Verfügbar" +unavailable: "Nicht verfügbar" +usernameInvalidFormat: "Du kannst Klein- und Großbuchstaben, Zahlen sowie Unterstriche + verwenden." +tooShort: "Zu kurz" +tooLong: "Zu lang" +weakPassword: "Schwaches Passwort" +normalPassword: "Durchschnittliches Passwort" +veryStrongPassword: "Starkes Passwort" +passwordMatched: "Stimmt überein" +passwordNotMatched: "Stimmt nicht überein" +signinWith: "Mit {x} anmelden" +signinFailed: "Anmeldung fehlgeschlagen. Überprüfe Nutzername und Passswort." +tapSecurityKey: "Tippe deinen Sicherheitsschlüssel an" +or: "Oder" +language: "Sprache" +uiLanguage: "Sprache der Benutzeroberfläche" +groupInvited: "Du wurdest in eine Gruppe eingeladen" +aboutX: "Über {x}" +useOsNativeEmojis: "Eingebaute Emojis des Betriebssystems benutzen" +disableDrawer: "Keine ausfahrbaren Menüs verwenden" +youHaveNoGroups: "Keine Gruppen vorhanden" +joinOrCreateGroup: "Lass dich zu einer Gruppe einladen oder erstelle deine eigene." +noHistory: "Kein Verlauf gefunden" +signinHistory: "Anmeldungsverlauf" +disableAnimatedMfm: "MFM, die Animationen enthalten, deaktivieren" +doing: "In Bearbeitung …" +category: "Kategorie" +tags: "Schlagwörter" +docSource: "Quellcode dieses Dokuments" +createAccount: "Nutzerkonto erstellen" +existingAccount: "Bestehendes Nutzerkonto" +regenerate: "Regenerieren" +fontSize: "Schriftgröße" +noFollowRequests: "Keine ausstehenden Follow-Anfragen vorhanden" +openImageInNewTab: "Bilder in neuem Tab öffnen" +dashboard: "Dashboard" +local: "Lokal" +remote: "Fremd" +total: "Gesamt" +weekOverWeekChanges: "Veränderung zu letzter Woche" +dayOverDayChanges: "Veränderung zu Gestern" +appearance: "Aussehen" +clientSettings: "Client-Einstellungen" +accountSettings: "Nutzerkonto-Einstellungen" +promotion: "geworben" +promote: "Werben" +numberOfDays: "Anzahl der Tage" +hideThisNote: "Diesen Beitrag verstecken" +showFeaturedNotesInTimeline: "Beliebte Beiträge in der Timeline anzeigen" +objectStorage: "Objektspeicher" +useObjectStorage: "Object Storage verwenden" +objectStorageBaseUrl: "Basis-URL" +objectStorageBaseUrlDesc: "Die als Referenz verwendete URL. Verwendest du einen CDN + oder Proxy, gib dessen URL an. \nFür S3 verwende 'https://.s3.amazonaws.com'. + Für GCS o.ä. verwende 'https://storage.googleapis.com/'." +objectStorageBucket: "Bucket" +objectStorageBucketDesc: "Bitte gib den Namen des Buckets an, der bei deinem Anbieter + verwendet wird." +objectStoragePrefix: "Prefix" +objectStoragePrefixDesc: "Dateien werden in Ordnern unter diesem Prefix gespeichert." +objectStorageEndpoint: "Endpunkt" +objectStorageEndpointDesc: "Im Falle von S3 leerlassen, für andere Anbieter den relevanten + Endpoint im Format „“ oder „:“ angeben." +objectStorageRegion: "Region" +objectStorageRegionDesc: "Gib eine Region wie z.B. „xx-east-1“ an. Falls dein Anbieter + nicht zwischen Regionen unterscheidet, lass dieses Feld leer oder gib „us-east-1“ + an." +objectStorageUseSSL: "SSL verwenden" +objectStorageUseSSLDesc: "Deaktiviere dies, falls du für API-Verbindungen kein HTTPS + verwenden wirst" +objectStorageUseProxy: "Über Proxy verbinden" +objectStorageUseProxyDesc: "Deaktiviere dies, falls du keinen Proxy für den Objektspeicher + verwenden wirst" +objectStorageSetPublicRead: "Bei Upload auf \"public-read\" stellen" +serverLogs: "Serverprotokolle" +deleteAll: "Alle löschen" +showFixedPostForm: "Bereich zum Schreiben neuer Beiträge am Anfang der Timeline anzeigen" +newNoteRecived: "Es gibt neue Beiträge" +sounds: "Töne" +listen: "Anhören" +none: "Nichts" +showInPage: "In einer Seite anzeigen" +popout: "Pop-Up" +volume: "Lautstärke" +masterVolume: "Gesamtlautstärke" +details: "Details" +chooseEmoji: "Emoji auswählen" +unableToProcess: "Der Vorgang konnte nicht abgeschlossen werden" +recentUsed: "Vor kurzem verwendet" +install: "Installieren" +uninstall: "Uninstallieren" +installedApps: "Authorisierte Anwendungen" +nothing: "Hier gibt es nichts zu sehen" +installedDate: "Authorisiert am" +lastUsedDate: "Zuletzt verwendet am" +state: "Status" +sort: "Sortieren" +ascendingOrder: "Aufsteigende Reihenfolge" +descendingOrder: "Absteigende Reihenfolge" +scratchpad: "Testumgebung" +scratchpadDescription: "Die Testumgebung bietet einen Bereich für AiScript-Experimente. + Dort kannst du AiScript schreiben, ausführen sowie dessen Auswirkungen auf Firefish + überprüfen." +output: "Ausgabe" +script: "Skript" +disablePagesScript: "AiScript auf Seiten deaktivieren" +updateRemoteUser: "Nutzerinformationen aktualisieren" +deleteAllFiles: "Alle Dateien löschen" +deleteAllFilesConfirm: "Möchtest du wirklich alle Dateien löschen?" +removeAllFollowing: "Allen gefolgten Nutzern entfolgen" +removeAllFollowingDescription: "Wenn Sie dies ausführen, werden alle Konten von {host} + entfolgt. Bitte führen Sie dies aus, wenn der Server beispielsweise nicht mehr existiert." +userSuspended: "Dieser Nutzer wurde gesperrt." +userSilenced: "Dieser Nutzer wurde instanzweit stummgeschaltet." +yourAccountSuspendedTitle: "Dieses Nutzerkonto ist gesperrt" +yourAccountSuspendedDescription: "Dieses Nutzerkonto wurde gesperrt, da es gegen die + Nutzungsbedingungen dieses Servers verstoßen hat. Trete mit dem Betreiber in Kontakt, + falls du weitere Details erfahren möchtest. Bitte erstelle kein neues Nutzerkonto." +menu: "Menü" +divider: "Trenner" +addItem: "Element hinzufügen" +relays: "Relais" +addRelay: "Relay hinzufügen" +inboxUrl: "inbox-URL" +addedRelays: "Hinzugefügte Relays" +serviceworkerInfo: "Muss für Push-Benachrichtigungen aktiviert sein." +deletedNote: "Gelöschter Beitrag" +invisibleNote: "Privater Beitrag" +enableInfiniteScroll: "Automatisch mehr laden" +visibility: "Sichtbarkeit" +poll: "Umfrage" +useCw: "Inhaltswarnung verwenden" +enablePlayer: "Video-Player öffnen" +disablePlayer: "Video-Player schließen" +expandTweet: "Tweet ausklappen" +themeEditor: "Farbkombinations-Editor" +description: "Beschreibung" +describeFile: "Beschreibung hinzufügen" +enterFileDescription: "Beschreibung eingeben" +author: "Autor" +leaveConfirm: "Es gibt unspeicherte Änderungen. Möchtest du diese verwerfen?" +manage: "Verwaltung" +plugins: "Plugins" +preferencesBackups: "Einstellungsbackups" +deck: "Deck" +undeck: "Deck verlassen" +useBlurEffectForModal: "Weichzeichnungseffekt für Modals verwenden" +useFullReactionPicker: "Vollständige Reaktionsauswahl verwenden" +width: "Breite" +height: "Höhe" +large: "Groß" +medium: "Mittel" +small: "Klein" +generateAccessToken: "Zugriffstoken generieren" +permission: "Berechtigungen" +enableAll: "Alle aktivieren" +disableAll: "Alle deaktivieren" +tokenRequested: "Zugriff zum Nutzerkonto gewähren" +pluginTokenRequestedDescription: "Dieses Plugin wird die hier konfigurierten Berechtigungen + verwenden können." +notificationType: "Art der Benachrichtigung" +edit: "Bearbeiten" +emailServer: "Email-Server" +enableEmail: "Email-Versand aktivieren" +emailConfigInfo: "Zur Email-Bestätigung bei Registrierung oder zum Zurücksetzen des + Passworts verwendet" +email: "Email" +emailAddress: "Email-Adresse" +smtpConfig: "SMTP-Server Konfiguration" +smtpHost: "Host" +smtpPort: "Port" +smtpUser: "Nutzername" +smtpPass: "Passwort" +emptyToDisableSmtpAuth: "Nutzername und Passwort leer lassen, um SMTP-Verifizierung + zu deaktivieren" +smtpSecure: "Für SMTP-Verbindungen implizit SSL/TLS verwenden" +smtpSecureInfo: "Schalte dies aus, falls du STARTTLS verwendest" +testEmail: "Emailversand testen" +wordMute: "Wort- und Sprache-Filter" +regexpError: "Fehler in einem regulären Ausdruck" +regexpErrorDescription: "Im regulären Ausdruck deines {tab}en Wortfilters ist ein + Fehler aufgetreten:" +instanceMute: "Server-Stummschaltungen" +userSaysSomething: "{name} hat etwas gesagt" +makeActive: "Aktivieren" +display: "Anzeigeart" +copy: "Kopieren" +metrics: "Metriken" +overview: "Übersicht" +logs: "Protokolle" +delayed: "Verzögert" +database: "Datenbank" +channel: "Kanäle" +create: "Erstellen" +notificationSetting: "Benachrichtigungseinstellungen" +notificationSettingDesc: "Wähle die Art der anzuzeigenden Benachrichtigungen." +useGlobalSetting: "Globale Einstellung verwenden" +useGlobalSettingDesc: "Ist diese Option aktiviert, werden die Benachrichtigungseinstellungen + deines Nutzerkontos verwendet. Durch ausschalten dieser Option können individuelle + Einstellungen vorgenommen werden." +other: "Anderes" +regenerateLoginToken: "Anmeldetoken regenerieren" +regenerateLoginTokenDescription: "Den zur Anmeldung intern verwendeten Token regenerieren. + Normalerweise wird dies nicht benötigt. Bei Regeneration werden alle Geräte ausgeloggt." +setMultipleBySeparatingWithSpace: "Trenne Elemente durch ein Leerzeichen um mehrere + Einstellungen zu kofigurieren." +fileIdOrUrl: "Datei-ID oder URL" +behavior: "Verhalten" +sample: "Beispiel" +abuseReports: "Meldungen" +reportAbuse: "Melden" +reportAbuseOf: "{name} melden" +fillAbuseReportDescription: "Bitte gib zusätzliche Informationen zu dieser Meldung + an. Falls es sich um einen ungewöhnlichen Beitrag handelt, gib bitte dessen URL + an." +abuseReported: "Deine Meldung wurde versendet. Vielen Dank." +reporter: "Melder" +reporteeOrigin: "Herkunft des Gemeldeten" +reporterOrigin: "Herkunft des Meldenden" +forwardReport: "Meldung auch an den mit-beteiligten Server weiterleiten" +forwardReportIsAnonymous: "Anstelle deines Nutzerkontos wird ein anonymes Systemkonto + als Hinweisgeber auf dem mit-beteiligten Server angezeigt." +send: "Senden" +abuseMarkAsResolved: "Meldung als gelöst markieren" +openInNewTab: "In neuem Tab öffnen" +openInSideView: "In Seitenansicht öffnen" +defaultNavigationBehaviour: "Standardnavigationsverhalten" +editTheseSettingsMayBreakAccount: "Bei Bearbeitung dieser Einstellungen besteht die + Gefahr, dein Nutzerkonto zu beschädigen." +instanceTicker: "Zeige zu einem Beitrag den Herkunfts-Server an" +waitingFor: "Warte auf {x}" +random: "Zufällig" +system: "System" +switchUi: "Layout" +desktop: "Desktop" +clip: "Clip erstellen" +createNew: "Neu erstellen" +optional: "optional" +createNewClip: "Neuen Clip erstellen" +unclip: "Aus Clip entfernen" +confirmToUnclipAlreadyClippedNote: "Dieser Beitrag ist bereits im \"{name}\" Clip + enthalten. Möchtest du ihn aus diesem Clip entfernen?" +public: "Öffentlich" +i18nInfo: "Firefish wird durch freiwillige Helfer in viele verschiedene Sprachen übersetzt. + Auf {link} kannst du mithelfen." +manageAccessTokens: "Zugriffstokens verwalten" +accountInfo: "Nutzerkonto-Informationen" +notesCount: "Anzahl der Beiträge" +repliesCount: "Anzahl gesendeter Antworten" +renotesCount: "Anzahl getätigter Renotes" +repliedCount: "Anzahl erhaltener Antworten" +renotedCount: "Anzahl erhaltener Renotes" +followingCount: "Anzahl gefolgter Nutzer" +followersCount: "Anzahl an Followern" +sentReactionsCount: "Anzahl gesendeter Reaktionen" +receivedReactionsCount: "Anzahl erhaltener Reaktionen" +pollVotesCount: "Anzahl gesendeter Antworten auf Umfragen" +pollVotedCount: "Anzahl erhaltener Antworten auf Umfragen" +yes: "Ja" +no: "Nein" +driveFilesCount: "Anzahl der Dateien in Cloud-Drive" +driveUsage: "Cloud-Drive-Auslastung" +noCrawle: "Crawler-Indexierung ablehnen" +noCrawleDescription: "Externe Suchmaschinen auffordern, Ihre Inhalte nicht zu indizieren." +lockedAccountInfo: "Auch wenn du Follow-Anfragen auf manuelle Bestätigung setzt, wird + jeder deiner Posts öffentlich sichtbar sein, sofern du ihre Sichtbarkeit nicht auf + \"Nur Follower\" setzt." +alwaysMarkSensitive: "Medien standardmäßig als NSFW markieren" +loadRawImages: "Anstatt Vorschaubilder immer Originalbilder anzeigen" +disableShowingAnimatedImages: "Animierte Bilder nicht abspielen" +verificationEmailSent: "Eine Bestätigungsmail wurde an deine Email-Adresse versendet. + Besuche den dort enthaltenen Link, um die Verifizierung abzuschließen." +notSet: "Nicht konfiguriert" +emailVerified: "Email-Adresse bestätigt" +noteFavoritesCount: "Anzahl der favorisierten Beiträge" +pageLikesCount: "Anzahl an als \"Gefällt mir\" markierter Nutzer-Seiten" +pageLikedCount: "Anzahl erhaltener \"Gefällt mir\" auf Nutzer-Seiten" +contact: "Kontakt" +useSystemFont: "Standardschriftart des Systems verwenden" +clips: "Clips" +experimentalFeatures: "Experimentelle Funktionalitäten" +developer: "Entwickler" +makeExplorable: "Nutzerkonto in „Erkunden“ sichtbar machen" +makeExplorableDescription: "Wenn diese Option deaktiviert ist, ist dein Nutzerkonto + nicht im „Erkunden“-Bereich sichtbar." +showGapBetweenNotesInTimeline: "Abstände zwischen Beiträgen in der Timeline anzeigen" +duplicate: "Duplizieren" +left: "Links" +center: "Mittig" +wide: "Breit" +narrow: "Schmal" +reloadToApplySetting: "Diese Einstellung tritt nach einer Aktualisierung der Seite + in Kraft. Jetzt aktualisieren?" +needReloadToApply: "Diese Einstellung tritt nach einer Aktualisierung der Seite in + Kraft." +showTitlebar: "Titelleiste anzeigen" +clearCache: "Cache leeren" +onlineUsersCount: "{n} Nutzer sind online" +nUsers: "{n} Nutzer" +nNotes: "{n} Beiträge" +sendErrorReports: "Fehlerberichte senden" +sendErrorReportsDescription: "Ist diese Option aktiviert, so werden beim Auftreten + von Fehlern detaillierte Fehlerinformationen an Firefish weitergegeben, was zur + Verbesserung der Qualität von Firefish beiträgt.\nEnthalten in diesen Informationen + sind u.a. die Version deines Betriebssystems, welchen Browser du verwendest und + ein Verlauf deiner Aktivitäten innerhalb Firefish." +myTheme: "Meine Farbkombination" +backgroundColor: "Hintergrundfarbe" +accentColor: "Akzentfarbe" +textColor: "Textfarbe" +saveAs: "Speichern als …" +advanced: "Fortgeschritten" +value: "Wert" +createdAt: "Erstellt am" +updatedAt: "Zuletzt geändert am" +saveConfirm: "Änderungen speichern?" +deleteConfirm: "Wirklich löschen?" +invalidValue: "Dieser Wert ist ungültig." +registry: "Registry" +closeAccount: "Nutzerkonto schließen" +currentVersion: "Momentane Version" +latestVersion: "Neuste Version" +youAreRunningUpToDateClient: "Du verwendest die neuste Version deines Clients." +newVersionOfClientAvailable: "Eine neuere Version deines Clients ist verfügbar." +usageAmount: "Verwendung" +capacity: "Kapazität" +inUse: "Verwendet" +editCode: "Code bearbeiten" +apply: "Anwenden" +receiveAnnouncementFromInstance: "Benachrichtigungen von diesem Server empfangen" +emailNotification: "Email-Benachrichtigungen" +publish: "Veröffentlichen" +inChannelSearch: "In Kanal suchen" +useReactionPickerForContextMenu: "Reaktionsauswahl durch Rechtsklick öffnen" +typingUsers: "{users} ist/sind am schreiben" +jumpToSpecifiedDate: "Zu bestimmtem Datum springen" +showingPastTimeline: "Es wird eine alte Timeline angezeigt" +clear: "Leeren" +markAllAsRead: "Alle als gelesen markieren" +goBack: "Zurück" +unlikeConfirm: "\"Gefällt mir\" wirklich entfernen?" +fullView: "Vollansicht" +quitFullView: "Vollansicht verlassen" +addDescription: "Beschreibung hinzufügen" +userPagePinTip: "Um Beiträge hier erscheinen zu lassen, drücke \"An dein Profil anheften\"\ + \ im Menü individueller Beiträge." +notSpecifiedMentionWarning: "Dieser Beitrag enthält Erwähnungen von Nutzern, die nicht + als Empfänger ausgewählt sind" +info: "Über" +userInfo: "Nutzerinformation" +unknown: "Unbekannt" +onlineStatus: "Onlinestatus" +hideOnlineStatus: "Onlinestatus verbergen" +hideOnlineStatusDescription: "Das Verbergen deines Onlinestatuses reduziert die Nützlichkeit + von Funktionen wie der Suche." +online: "Online" +active: "Aktiv" +offline: "Offline" +notRecommended: "Nicht empfohlen" +botProtection: "Schutz vor Bots" +instanceBlocking: "Föderation verwalten" +selectAccount: "Nutzerkonto auswählen" +switchAccount: "Konto wechseln" +enabled: "Aktiviert" +disabled: "Deaktiviert" +quickAction: "Schnellaktionen" +user: "Nutzer" +administration: "Verwaltung" +accounts: "Nutzerkonten" +switch: "Wechseln" +noMaintainerInformationWarning: "Betreiberinformationen sind nicht konfiguriert." +noBotProtectionWarning: "Schutz vor Bots ist nicht konfiguriert." +configure: "Konfigurieren" +postToGallery: "Erstelle einen neuen Beitrag zur Bilder-Galerie" +gallery: "Bilder-Galerie" +recentPosts: "Neue Beiträge" +popularPosts: "Beliebte Beiträge" +shareWithNote: "Mit Beitrag teilen" +ads: "Community-Banner" +expiration: "Frist" +memo: "Merkzettel" +priority: "Priorität" +high: "Hoch" +middle: "Mittel" +low: "Niedrig" +emailNotConfiguredWarning: "Keine Email-Adresse hinterlegt." +ratio: "Verhältnis" +previewNoteText: "Vorschau anzeigen" +customCss: "Benutzerdefiniertes CSS" +customCssWarn: "Verwende diese Einstellung nur, wenn du weißt, was sie tut. Ungültige + Eingaben können dazu führen, dass der Client nicht mehr normal funktioniert." +global: "Global" +squareAvatars: "Profilbilder für Accounts ohne Katzenohren quadratisch anzeigen" +sent: "Gesendet" +received: "Erhalten" +searchResult: "Suchergebnisse" +hashtags: "Hashtags" +troubleshooting: "Problembehandlung" +useBlurEffect: "Weichzeichnungseffekt in der Benutzeroberfläche verwenden" +learnMore: "Mehr erfahren" +misskeyUpdated: "Firefish wurde aktualisiert!" +whatIsNew: "Änderungen anzeigen" +translate: "Übersetzen" +translatedFrom: "Aus {x} übersetzt" +accountDeletionInProgress: "Die Löschung deines Nutzerkontos ist momentan in Bearbeitung" +usernameInfo: "Ein Name, durch den dein Nutzerkonto auf diesem Server identifiziert + werden kann. Du kannst das Alphabet (a~z, A~Z), Ziffern (0~9) oder Unterstriche + (_) verwenden. Nutzernamen können später nicht geändert werden." +aiChanMode: "Ai-Modus" +keepCw: "Inhaltswarnungen beibehalten" +pubSub: "Pub/Sub Nutzerkonten" +lastCommunication: "Letzte Kommunikation" +resolved: "Gelöst" +unresolved: "Ungelöst" +breakFollow: "Follower entfernen" +itsOn: "Eingeschaltet" +itsOff: "Ausgeschaltet" +emailRequiredForSignup: "Angabe einer Email-Adresse als benötigt markieren" +unread: "Ungelesen" +filter: "Filter" +controlPanel: "Systemsteuerung" +manageAccounts: "Nutzerkonten verwalten" +makeReactionsPublic: "Reaktionsverlauf veröffentlichen" +makeReactionsPublicDescription: "Jeder wird die Liste deiner gesendeten Reaktionen + einsehen können." +classic: "Zentriert" +muteThread: "Thread stummschalten" +unmuteThread: "Threadstummschaltung aufheben" +ffVisibility: "Sichtbarkeit von Gefolgten/Followern" +ffVisibilityDescription: "Konfiguriere wer sehen kann, wem du folgst sowie wer dir + folgt." +continueThread: "Beitrag fortsetzen" +deleteAccountConfirm: "Das Nutzerkonto wird unwiderruflich gelöscht. Trotzdem fortfahren?" +incorrectPassword: "Falsches Passwort." +voteConfirm: "Wirklich für „{choice}“ abstimmen?" +hide: "Inhalt verbergen" +leaveGroup: "Gruppe verlassen" +leaveGroupConfirm: "Möchtest du „{name}“ wirklich verlassen?" +useDrawerReactionPickerForMobile: "Auf mobilen Geräten ausfahrbare Reaktionsauswahl + anzeigen" +welcomeBackWithName: "Willkommen zurück, {name}" +clickToFinishEmailVerification: "Drücke bitte auf [{ok}], um die Email-Bestätigung + abzuschließen." +overridedDeviceKind: "Gerätetyp" +smartphone: "Smartphone" +tablet: "Tablet" +auto: "Automatisch" +themeColor: "Farbe der Ticker-Laufschrift" +size: "Größe" +numberOfColumn: "Spaltenanzahl" +instanceDefaultLightTheme: "Standard-Farbkombination auf diesem Server: \"Hell\"" +instanceDefaultDarkTheme: "Standard-Farbkombination auf diesem Server: \"Dunkel\"" +instanceDefaultThemeDescription: "Gib den Farbschemencode im Objektformat ein." +mutePeriod: "Dauer der Stummschaltung" +indefinitely: "Dauerhaft" +tenMinutes: "10 Minuten" +oneHour: "Eine Stunde" +oneDay: "Einen Tag" +oneWeek: "Eine Woche" +reflectMayTakeTime: "Es kann etwas dauern, bis sich dies widerspiegelt." +failedToFetchAccountInformation: "Nutzerkontoinformationen konnten nicht abgefragt + werden" +rateLimitExceeded: "Anzahl der Versuche überschritten" +cropImage: "Bild zuschneiden" +cropImageAsk: "Möchtest du das Bild zuschneiden?" +file: "Datei" +recentNHours: "Die letzten {n} Stunden" +recentNDays: "Die letzten {n} Tage" +noEmailServerWarning: "Es ist kein Email-Server konfiguriert." +thereIsUnresolvedAbuseReportWarning: "Es liegen ungelöste Meldungen vor." +recommended: "Favoriten" +check: "Überprüfe" +driveCapOverrideLabel: "Die Cloud-Drive-Kapazität dieses Nutzers verändern" +driveCapOverrideCaption: "Gib einen Wert von 0 oder weniger ein, um die Kapazität + auf den Standard zurückzusetzen." +requireAdminForView: "Du musst dich mit einem Administratorkonto anmelden, um dies + zu sehen." +isSystemAccount: "Ein Nutzerkonto, dass durch das System erstellt und automatisch + kontrolliert wird. Jede Anpassung, Veränderung oder Löschung dieses Nutzerkontos, + kann zu schwerwiegenden Fehlern auf diesem Server führen." +typeToConfirm: "Bitte gib zur Bestätigung {x} ein" +deleteAccount: "Nutzerkonto löschen" +document: "Dokumentation" +numberOfPageCache: "Anzahl der zwischengespeicherten Seiten" +numberOfPageCacheDescription: "Das Erhöhen dieses Caches führt zu einer angenehmerern + Nutzererfahrung, erhöht aber Serverlast und Arbeitsspeicherauslastung." +logoutConfirm: "Wirklich abmelden?" +lastActiveDate: "Zuletzt verwendet am" +statusbar: "Statusleiste" +pleaseSelect: "Wähle eine Option" +reverse: "Rückgängig machen" +colored: "Farbig" +refreshInterval: "Aktualisierungsintervall " +label: "Beschriftung" +type: "Art" +speed: "Geschwindigkeit" +slow: "Langsam" +fast: "Schnell" +sensitiveMediaDetection: "Erkennung von NSFW-Medien" +localOnly: "Nur Lokal" +remoteOnly: "Nur für andere/fremde Server" +failedToUpload: "Hochladen fehlgeschlagen" +cannotUploadBecauseInappropriate: "Diese Datei kann nicht hochgeladen werden, da Teile + der Datei möglicherweise NSFW-Inhalt enthalten." +cannotUploadBecauseNoFreeSpace: "Die Datei konnte nicht hochgeladen werden, da dein + Cloud-Drive-Speicherplatz aufgebraucht ist." +beta: "Beta" +enableAutoSensitive: "Automatische NSFW-Kennzeichnung" +enableAutoSensitiveDescription: "Erlaubt, wo möglich, die automatische Erkennung und + Kennzeichnung von NSFW-Medien durch maschinelles Lernen. Auch wenn diese Option + deaktiviert ist, kann sie über den Server aktiviert sein." +activeEmailValidationDescription: "Aktivert strengere Überprüfung von E-Mail-Adressen, + d.h. Testen auf Wegwerfadressen und darauf, ob mit der Adresse tatsächlich kommuniziert + werden kann. Ist dies deaktiviert, so wird nur das Format der E-Mail überprüft." +navbar: "Navigationsleiste" +shuffle: "Mischen" +account: "Nutzerkonto" +move: "Verschieben" +_sensitiveMediaDetection: + description: "Ermöglicht eine Erleichterung der Servermoderation durch die automatische + Erkennungen von NSFW-Medien unter Verwendung von Machine Learning. Hierdurch wird + die Serverlast etwas erhöht." + sensitivity: "Erkennungssensitivität" + sensitivityDescription: "Durch das Senken der Sensitivität kann die Anzahl an Fehlerkennungen + (sog. false positives) reduziert werden. Durch ein Erhöhen dieser kann die Anzahl + an verpassten Erkennungen (sog. false negatives) reduziert werden." + setSensitiveFlagAutomatically: "Als NSFW kennzeichnen" + setSensitiveFlagAutomaticallyDescription: "Die Resultate der internen Erkennung + werden beibehalten, auch wenn diese Option deaktiviert ist." + analyzeVideos: "Videoanalyse aktivieren" + analyzeVideosDescription: "Analysiert zusätzlich zu Bildern auch Videos. Die Serverlast + wird hierdurch etwas erhöht." +_emailUnavailable: + used: "Diese Email-Adresse wird bereits verwendet" + format: "Das Format dieser Email-Adresse ist ungültig" + disposable: "Wegwerf-Email-Adressen können nicht verwendet werden" + mx: "Dieser Email-Server ist ungültig" + smtp: "Dieser Email-Server antwortet nicht" +_ffVisibility: + public: "Öffentlich" + followers: "Nur für Follower sichtbar" + private: "Privat" +_signup: + almostThere: "Fast geschafft" + emailAddressInfo: "Bitte gib deine Email-Adresse ein. Sie wird nicht öffentlich + sichtbar sein." + emailSent: "An deine Email-Adresse ({email}) wurde soeben eine Bestätigungsmail + geschickt. Bitte klicke auf den enthaltenen Link, um die Erstellung deines Nutzerkontos + abzuschließen." +_accountDelete: + accountDelete: "Nutzerkonto löschen" + mayTakeTime: "Da die Löschung eines Nutzerkontos ein aufwendiger Prozess ist, kann + dessen Dauer davon abhängen, wie viel Inhalt von diesem erstellt wurde und wie + viele Dateien von diesem hochgeladen wurden." + sendEmail: "Sobald die Löschung abgeschlossen ist, wird an die registrierte Email-Adresse + eine Benachrichtigung versendet." + requestAccountDelete: "Löschung deines Nutzerkontos anfordern" + started: "Die Löschung wurde eingeleitet." + inProgress: "Löschung in Bearbeitung" +_ad: + back: "Zurück" + reduceFrequencyOfThisAd: "Diese Anzeige weniger anzeigen" + adsBy: Community-Banner von {by} +_forgotPassword: + enterEmail: "Gib die Email-Adresse ein, mit der du dich registriert hast. An diese + wird ein Link gesendet, mit dem du dein Passwort zurücksetzen kannst." + ifNoEmail: "Solltest du bei der Registrierung keine Email-Adresse angegeben haben, + wende dich bitte an den Server-Administrator." + contactAdmin: "Dieser Server unterstützt keine Verwendung von Email-Adressen. Kontaktiere + bitte den Server-Administrator, um dein Passwort zurücksetzen zu lassen." +_gallery: + my: "Meine Bilder-Galerie" + liked: "Mit \"Gefällt mir\" markierte Beiträge" + like: "Gefällt mir" + unlike: "\"Gefällt mir\" entfernen" +_email: + _follow: + title: "Du hast einen neuen Follower" + _receiveFollowRequest: + title: "Du hast eine Follow-Anfrage erhalten" +_plugin: + install: "Plugins installieren" + installWarn: "Bitte nur vertrauenswürdige Plugins installieren." + manage: "Plugins verwalten" +_preferencesBackups: + list: "Erstellte Backups" + saveNew: "Neues Backup speichern" + loadFile: "Von Datei laden" + apply: "Auf dieses Gerät anwenden" + save: "Änderungen speichern" + inputName: "Gib einen Namen für dieses Backup ein" + cannotSave: "Speichern fehlgeschlagen" + nameAlreadyExists: "Es existiert bereits ein Backup unter dem Namen \"{name}\". + Bitte gib einen anderen Namen ein." + applyConfirm: "Wirklich das Backup \"{name}\" auf dieses Gerät anwenden? Bestehende + Einstellungen darauf werden überschrieben." + saveConfirm: "Backup als {name} speichern?" + deleteConfirm: "Das Backup {name} löschen?" + renameConfirm: "Backup von \"{old}\" zu \"{new}\" umbenennen?" + noBackups: "Keine Backups existieren. Backups können über \"Neu erstellen\" erstelllt + werden." + createdAt: "Erstellt am: {date} {time}" + updatedAt: "Aktualisiert am: {date} {time}" + cannotLoad: "Laden fehlgeschlagen" + invalidFile: "Ungültiges Dateiformat" +_registry: + scope: "Scope" + key: "Schlüssel" + keys: "Schlüssel" + domain: "Domain" + createKey: "Schlüssel erstellen" +_aboutFirefish: + about: "Firefish ist ein Fork von Misskey, der seit 2022 von ThatOneCalculator entwickelt + wird." + contributors: "Hauptmitwirkende" + allContributors: "Alle Mitwirkenden" + source: "Quellcode" + translation: "Firefish übersetzen" + donate: "An Firefish spenden" + donateTitle: Gefällt dir Firefish? + pleaseDonateToFirefish: Bitte erwäge eine Spende an Firefish, um dessen Entwicklung + zu unterstützen. + pleaseDonateToHost: Bitte erwäge auch, an deinen Heimatserver {host} zu spenden, + um bei der Deckung der Betriebskosten zu helfen. + donateHost: Spende an {host} + misskeyContributors: Misskey-Mitwirkende +_nsfw: + respect: "Mit NSFW gekennzeichnete Mediendateien verbergen" + ignore: "Mit NSFW gekennzeichnete Mediendateien nicht verbergen" + force: "Alle Mediendateien verbergen" +_mfm: + cheatSheet: "MFM Spickzettel" + intro: "MFM ist eine Markup-Sprache, die in Misskey, Firefish, Akkoma und anderen + Programmen verwendet wird und an vielen Stellen eingesetzt werden kann. Hier können + Sie eine Liste aller verfügbaren MFM-Syntaxe einsehen." + dummy: "Firefish erweitert die Welt des Fediverse" + mention: "Erwähnung" + mentionDescription: "Mit At-Zeichen und Nutzername kann ein individueller Nutzer + angegeben werden." + hashtag: "Hashtag" + hashtagDescription: "Mit einer Raute und Text kann ein Hashtag angegeben werden." + url: "URL" + urlDescription: "Zeigt URLs an." + link: "Link" + linkDescription: "Zeigt spezifische Textabschnitte als URL an." + bold: "Fett" + boldDescription: "Zeichen zur Betonung dicker erscheinen lassen." + small: "Klein" + smallDescription: "Inhalt klein und dünn anzeigen." + center: "Zentrieren" + centerDescription: "Inhalt zentriert anzeigen." + inlineCode: "Code (Eingebettet)" + inlineCodeDescription: "Syntax-Hervorhebung für (Programm-)Code eingebettet anzeigen." + blockCode: "Code (Block)" + blockCodeDescription: "Syntax-Hervorhebung für mehrzeiligen (Programm-)Code als + Block anzeigen." + inlineMath: "Mathe (Eingebettet)" + inlineMathDescription: "Mathematische Formeln (KaTeX) eingebettet anzeigen" + blockMath: "Mathe (Block)" + blockMathDescription: "Mathematische Formeln (KaTeX) als Block einbetten" + quote: "Zitationen" + quoteDescription: "Inhalt als Zitat anzeigen." + emoji: "Benutzerdefinierte Emojis" + emojiDescription: "Durch das Umschließen von Emoji-Namen durch Doppelpunkte können + benutzerdefinierte Emojis angezeigt werden." + search: "Suche" + searchDescription: "Eine vorgefertige Suchanfragebox anzeigen." + flip: "Spiegelung" + flipDescription: "Inhalt horizontal oder vertikal spiegeln." + jelly: "Animation (Dehnen)" + jellyDescription: "Verleiht Inhalt eine sich dehnende Animation." + tada: "Animation (Tada)" + tadaDescription: "Verleiht Inhalt eine Animation mit \"Tada!\"-Gefühl." + jump: "Animation (Sprung)" + jumpDescription: "Verleiht Inhalt eine springende Animation." + bounce: "Animation (Federn)" + bounceDescription: "Verleiht Inhalt eine federnde Animation." + shake: "Animation (Zittern)" + shakeDescription: "Verleiht Inhalt eine zitternde Animation." + twitch: "Animation (Zucken)" + twitchDescription: "Verleiht Inhalt eine sehr stark zuckende Animation." + spin: "Animation (Rotieren)" + spinDescription: "Verleiht Inhalt eine rotierende Animation." + x2: "Groß" + x2Description: "Inhalte größer anzeigen." + x3: "Sehr groß" + x3Description: "Inhalte noch größer anzeigen." + x4: "Unglaublich groß" + x4Description: "Lässt Inhalte noch größer als größer als groß angezeigt werden." + blur: "Weichzeichnen" + blurDescription: "Inhalte durch Weihzeichnung verschwimmen lassen. Durch das Bewegen + des Mauszeigers über den Inhalt wird er klar angezeigt." + font: "Schriftart" + fontDescription: "Setzt die Schriftart des Inhaltes fest." + rainbow: "Regenbogen" + rainbowDescription: "Lässt den Inhalt in Regenbogenfarben erscheinen." + sparkle: "Glitzer" + sparkleDescription: "Verleiht Inhalt einen glitzernden Partikeleffekt." + rotate: "Drehen" + rotateDescription: "Dreht den Inhalt um einen angegebenen Winkel." + fade: "Ein-/Ausblenden" + fadeDescription: "Blended Inhalt ein and aus." + plain: "Unbearbeitet" + plainDescription: "Deaktiviert jegliche MFM-Syntax, die sich innerhalb dieses MFM-Effekts + befindet." + foreground: Vordergrundfarbe + background: Hintergrundfarbe + positionDescription: Inhalt um einen bestimmten Betrag verschieben. + position: Position + cropDescription: Inhalt zuschneiden. + crop: Zuschneiden + scale: Skalieren + scaleDescription: Skaliere den Inhalt um einen bestimmten Betrag. + foregroundDescription: Vordergrundfarbe des Texts ändern. + backgroundDescription: Hintergrundfarbe des Texts ändern. + play: MFM abspielen + stop: MFM anhalten + warn: MFM können schnell bewegte oder anderweitig auffallende Animationen enthalten + alwaysPlay: Alle animierten MFM immer automatisch abspielen + advancedDescription: Wenn diese Funktion deaktiviert ist, können nur einfache Formatierungen + vorgenommen werden, es sei denn, animiertes MFM ist aktiviert + advanced: Erweitertes MFM +_instanceTicker: + none: "Nie anzeigen" + remote: "Für Nutzer eines anderen Servers anzeigen" + always: "Immer anzeigen" +_serverDisconnectedBehavior: + reload: "Automatisch aktualisieren" + dialog: "Warnungsfenster zeigen" + quiet: "Unaufdringlich warnen" + nothing: Nichts ändern +_channel: + create: "Kanal erstellen" + edit: "Kanal bearbeiten" + setBanner: "Kanalbanner festlegen" + removeBanner: "Kanalbanner entfernen" + featured: "Trends" + owned: "In Besitz" + following: "Gefolgt" + usersCount: "{n} Teilnehmer" + notesCount: "{n} Beiträge" + nameAndDescription: Name und Beschreibung + nameOnly: Nur den Namen +_menuDisplay: + sideFull: "Seitlich" + sideIcon: "Seitlich (Icons)" + top: "Oben" + hide: "Ausblenden" +_wordMute: + muteWords: "Stummgeschaltete Wörter" + muteWordsDescription: "Zum Nutzen einer \"UND\"-Verknüpfung Einträge mit Leerzeichen + trennen, zum Nutzen einer \"ODER\"-Verknüpfung Einträge mit einem Zeilenumbruch + trennen." + muteWordsDescription2: "Umgib Schlüsselworter mit Schrägstrichen, um Reguläre Ausdrücke + zu verwenden." + softDescription: "Beiträge, die die angegebenen Konditionen erfüllen, in der Timeline + ausblenden." + hardDescription: "Verhindern, dass Beiträge, die die angegebenen Konditionen erfüllen, + der Timeline hinzugefügt werden. Zudem werden diese Beiträge auch nicht der Timeline + hinzugefügt, falls die Konditionen geändert werden." + soft: "Leicht" + hard: "Schwer" + mutedNotes: "Stummgeschaltete Beiträge" + muteLangs: Stummgeschaltete Sprachen + muteLangsDescription: Mit Leerzeichen oder Zeilenumbrüchen trennen für ODER-Kondition. + muteLangsDescription2: Sprachcode verwenden, z.B. en, fr, ja, zh.. + lang: Sprache + langDescription: Beiträge in der angegebenen Sprache in der Timeline ausblenden. + mutePatterns: Gedämpfte Muster +_instanceMute: + instanceMuteDescription: "Schaltet alle Beiträge/Boosts stumm, die von den gelisteten + Servern stammen, inklusive Antworten von Nutzern an einen Nutzer eines stummgeschalteten + Servers." + instanceMuteDescription2: "Mit Zeilenumbrüchen trennen" + title: "Blendet Beiträge von aufgelisteten Servern aus." + heading: "Liste der Server die stummgeschaltet werden sollen" +_theme: + explore: "Farbkombinationen finden" + install: "Eine Farbkombination installieren" + manage: "Farbkombinationen verwalten" + code: "Farbschemencode" + description: "Beschreibung" + installed: "{name} wurde installiert" + installedThemes: "Installierte Farbkombinationen" + builtinThemes: "Vorinstallierte Farbkombinationen" + alreadyInstalled: "Diese Farbkombination ist bereits installiert" + invalid: "Diese Farbkombination ist nicht möglich" + make: "Erstelle eine Farbkombination" + base: "Vorlage" + addConstant: "Konstante hinzufügen" + constant: "Konstante" + defaultValue: "Standardwert" + color: "Farbe" + refProp: "Eigenschaft referenzieren" + refConst: "Konstante referenzieren" + key: "Schlüssel" + func: "Funktionen" + funcKind: "Funktionsart" + argument: "Parameter" + basedProp: "Referenzierte Eigenschaft" + alpha: "Transparenz" + darken: "Verdunkeln" + lighten: "Erhellen" + inputConstantName: "Name der Konstanten eingeben" + importInfo: "Hier kannst du Farbschemencode einfügen, um ihn in den Editor zu importieren" + deleteConstantConfirm: "Die Konstante {const} wirklich löschen?" + keys: + accent: "Akzentfarbe" + bg: "Hintergrund" + fg: "Text" + focus: "Fokus" + indicator: "Indikator" + panel: "Panel" + shadow: "Schatten" + header: "Kopfzeile" + navBg: "Hintergrund der Seitenleiste" + navFg: "Text der Seitenleiste" + navHoverFg: "Text der Seitenleiste (Mouseover)" + navActive: "Text der Seitenleiste (Aktiv)" + navIndicator: "Indikator der Seitenleiste" + link: "Link" + hashtag: "Hashtag" + mention: "Erwähnung" + mentionMe: "Erwähnung (Ich)" + renote: "Renote" + modalBg: "Modalhintergrund" + divider: "Trenner" + scrollbarHandle: "Griff des Scrollbalkens" + scrollbarHandleHover: "Griff des Scrollbalkens (Mouseover)" + dateLabelFg: "Text von Datumsbeschriftungen" + infoBg: "Hintergrund von Informationen" + infoFg: "Text von Informationen" + infoWarnBg: "Hintergrund von Warnungen" + infoWarnFg: "Text von Warnungen" + cwBg: "Hintergrund des Inhaltswarnungsknopfs" + cwFg: "Text des Inhaltswarnungsknopfs" + cwHoverBg: "Hintergrund des Inhaltswarnungsknopfs (Mouseover)" + toastBg: "Hintergrund von Benachrichtigungen" + toastFg: "Text von Benachrichtigungen" + buttonBg: "Hintergrund von Schaltflächen" + buttonHoverBg: "Hintergrund von Schaltflächen (Mouseover)" + inputBorder: "Rahmen von Eingabefeldern" + listItemHoverBg: "Hintergrund von Listeneinträgen (Mouseover)" + driveFolderBg: "Hintergrund von Cloud-Drive-Ordnern" + wallpaperOverlay: "Hintergrundbild-Overlay" + badge: "Wappen" + messageBg: "Hintergrund von Chats" + accentDarken: "Akzent (Verdunkelt)" + accentLighten: "Akzent (Erhellt)" + fgHighlighted: "Hervorgehobener Text" +_sfx: + note: "Beiträge" + noteMy: "Meine Beiträge" + notification: "Benachrichtigungen" + chat: "Chat" + chatBg: "Chat (Hintergrund)" + antenna: "News-Picker" + channel: "Kanalbenachrichtigung" +_ago: + future: "Zukunft" + justNow: "gerade eben" + secondsAgo: "vor {n} s" + minutesAgo: "vor {n} min" + hoursAgo: "vor {n} h" + daysAgo: "vor {n} T" + weeksAgo: "vor {n} W" + monthsAgo: "vor {n} M" + yearsAgo: "vor {n} J" +_time: + second: "Sekunde(n)" + minute: "Minute(n)" + hour: "Stunde(n)" + day: "Tag(en)" +_tutorial: + title: "Wie man Firefish benutzt" + step1_1: "Willkommen!" + step1_2: "Wir werden Sie einrichten. Sie werden im Handumdrehen einsatzbereit sein!" + step2_1: "Bitte füllen Sie zuerst Ihr Profil aus." + step2_2: "Wenn du ein paar Angaben zu deiner Person machst, können andere leichter + erkennen, ob sie deine Beiträge sehen oder dir folgen wollen." + step3_1: "Jetzt ist es an der Zeit, einigen Leuten zu folgen!" + step3_2: "Deine Home- und Social-Timeline basiert darauf, wem du folgst, also folge + für den Anfang ein paar Nutzerkonten.\nKlicke das Plus Symbol oben links in einem + Profil um ihm zu folgen." + step4_1: "Wir bringen dich nach draußen." + step4_2: "Für Ihren ersten Beitrag machen einige Leute gerne einen {introduction}-Beitrag + oder ein einfaches \"Hallo Welt!\"" + step5_1: "Timelines, Timelines überall!" + step5_2: "Dein Server hat {timelines} verschiedene Timelines aktiviert." + step5_3: "Die {icon} Home-Timeline ist die Timeline, in der du die Beiträge der + Nutzerkonten sehen kannst, denen du folgst." + step5_4: "In der {Icon} Local-Timeline kannst du die Beiträge von jedem/jeder sehen + der/die auf diesem Server registriert ist." + step5_5: "Die Social-Timeline {icon} ist eine Kombination aus der Home-Timeline + und der Local-Timeline." + step5_6: "In der Empfohlen-Timeline {icon} kannst du Posts sehen, die von den Admins + vorgeschlagen wurden." + step5_7: "In der {icon} Global-Timeline können Sie Beiträge von allen verknüpften + Servern aus dem Fediverse sehen." + step6_1: "Also, was ist das hier?" + step6_2: "Mit Deiner Anmeldung zu Firefish bist Du gleichzeitig einem Portal zum + Fediverse beigetreten, einem Netzwerk mit Tausenden von, miteinander verbundenen, + Servern." + step6_3: "Jeder der Server funktioniert auf unterschiedliche Weise, und nicht alle + Server führen Firefish aus. Dieser jedoch schon! Es ist zu Beginn vielleicht ein + wenig kompliziert, aber Sie werden in kürzester Zeit den Dreh raus haben." + step6_4: "Jetzt bist Du startbereit, entdecke die Möglichkeiten und hab Spaß dabei!" +_2fa: + alreadyRegistered: "Du hast bereits ein Gerät für Zwei-Faktor-Authentifizierung + registriert." + registerTOTP: "Neues Gerät registrieren" + registerSecurityKey: "Neuen Sicherheitsschlüssel registrieren" + step1: "Installiere zuerst eine Authentifizierungsapp (z.B. {a} oder {b}) auf deinem + Gerät." + step2: "Dann, scanne den angezeigten QR-Code mit deinem Gerät." + step2Url: "Nutzt du ein Desktopprogramm kannst du alternativ diese URL eingeben:" + step3: "Gib zum Abschluss den Token ein, der von deiner App angezeigt wird." + step4: "Alle folgenden Anmeldungsversuche werden ab sofort die Eingabe eines solchen + Tokens benötigen." + securityKeyInfo: "Du kannst neben Fingerabdruck- oder PIN-Authentifizierung auf + deinem Gerät auch Anmeldung mit Hilfe eines FIDO2-kompatiblen Hardware-Sicherheitsschlüssels + einrichten." + step3Title: Gib deinen Authentifizierungscode ein + securityKeyNotSupported: Dein Browser unterstützt Hardware-Security-Keys nicht. + chromePasskeyNotSupported: Chrome Passkeys werden momentan nicht unterstützt. + tapSecurityKey: Bitte folge den Anweisungen deines Browsers, um einen Hardware-Security-Key + oder einen Passkey zu registrieren + removeKey: Entferne deinen Hardware-Security-Key + removeKeyConfirm: Möchtest du wirklich deinen Key mit der Bezeichnung {name} löschen? + step2Click: Ein Klick auf diesen QR-Code erlaubt es dir eine 2FA-Methode zu deinem + Security Key oder deiner Authenticator App hinzuzufügen. + securityKeyName: Gib einen Namen für den Key ein + token: 2FA Token +_permissions: + "read:account": "Deine Nutzerkontoinformationen lesen" + "write:account": "Deine Nutzerkontoinformationen bearbeiten" + "read:blocks": "Die Liste deiner blockierten Nutzer lesen" + "write:blocks": "Die Liste deiner blockierten Nutzer bearbeiten" + "read:drive": "Deine Cloud-Drive-Dateien und Ordner lesen" + "write:drive": "Deine Cloud-Drive-Dateien und Ordner bearbeiten oder löschen" + "read:favorites": "Deine Lesezeichen-Liste lesen" + "write:favorites": "Deine Lesezeichen-Liste bearbeiten" + "read:following": "Die Liste der Nutzer, denen du folgst, lesen" + "write:following": "Anderen Nutzern folgen oder entfolgen" + "read:messaging": "Chats lesen" + "write:messaging": "Chats bedienen" + "read:mutes": "Stummschaltungen lesen" + "write:mutes": "Stummschaltungen bearbeiten" + "write:notes": "Beiträge schreiben oder löschen" + "read:notifications": "Benachrichtigungen lesen" + "write:notifications": "Benachrichtigungen bedienen" + "read:reactions": "Reaktionen lesen" + "write:reactions": "Reaktionen bedienen" + "write:votes": "Umfragen bedienen" + "read:pages": "Deine Nutzer-Seiten lesen" + "write:pages": "Deine Nutzer-Seiten bearbeiten oder löschen" + "read:page-likes": "Liste der Nutzer-Seiten, die mir gefallen, lesen" + "write:page-likes": "Liste der Nutzer-Seiten, die mir gefallen, bearbeiten" + "read:user-groups": "Nutzergruppen lesen" + "write:user-groups": "Nutzergruppen bearbeiten oder löschen" + "read:channels": "Channels lesen" + "write:channels": "Channels bedienen" + "read:gallery": "Beiträge deiner Bilder-Galerie lesen" + "write:gallery": "Deine Bilder-Galerie bearbeiten" + "read:gallery-likes": "Liste deiner mit \"Gefällt mir\" markierten Bilder-Galerie-Beiträge + lesen" + "write:gallery-likes": "Liste deiner mit \"Gefällt mir\" markierten Bilder-Galerie-Beiträge + bearbeiten" +_auth: + shareAccess: "Möchtest du „{name}“ authorisieren, auf dieses Nutzerkonto zugreifen + zu können?" + shareAccessAsk: "Bist du dir sicher, dass du diese Anwendung authorisieren möchtest, + auf dein Nutzerkonto zugreifen zu können?" + permissionAsk: "Diese Anwendung fordert folgende Berechtigungen:" + pleaseGoBack: "Bitte kehre zur Anwendung zurück" + callback: "Es wird zur Anwendung zurückgekehrt" + denied: "Zugriff verweigert" + copyAsk: 'Bitte fügen Sie den folgenden Autorisierungscode in die Anwendung ein:' + allPermissions: Vollständiger Kontozugriff +_antennaSources: + all: "Alle Beiträge" + homeTimeline: "Beiträge von Nutzern, denen gefolgt wird" + users: "Beiträge von einem oder mehreren angegebenen Nutzern" + userList: "Beiträge von allen Nutzern einer Liste" + userGroup: "Beiträge von allen Nutzern einer Gruppe" + instances: Beiträge von allen Nutzern auf einem Server +_weekday: + sunday: "Sonntag" + monday: "Montag" + tuesday: "Dienstag" + wednesday: "Mittwoch" + thursday: "Donnerstag" + friday: "Freitag" + saturday: "Samstag" +_widgets: + memo: "Merkzettel" + notifications: "Benachrichtigungen" + timeline: "Timeline" + calendar: "Kalender" + trends: "Trends" + clock: "Uhr" + rss: "RSS-Reader" + rssTicker: "RSS Ticker" + activity: "Aktivität" + photos: "Fotos" + digitalClock: "Digitaluhr" + unixClock: "UNIX-Uhr" + federation: "Föderation" + instanceCloud: "Server-Cloud" + postForm: "Beitragsfeld" + slideshow: "Diashow" + button: "Knopf" + onlineUsers: "Nutzer online" + jobQueue: "Job-Warteschlange" + serverMetric: "Servermetriken" + aiscript: "AiScript-Konsole" + aichan: "Ai" + _userList: + chooseList: Wählen Sie eine Liste aus + userList: Benutzerliste + serverInfo: Server-Infos +_cw: + hide: "Verbergen" + show: "Inhalt anzeigen" + chars: "{count} Zeichen" + files: "{count} Datei(en)" +_poll: + noOnlyOneChoice: "Es müssen mindestens zwei Antwortmöglichkeiten vorhanden sein" + choiceN: "Auswahl {n}" + noMore: "Du kannst keine weiteren Auswahlmöglichkeiten hinzufügen" + canMultipleVote: "Auswahl mehrerer Antworten erlauben" + expiration: "Abstimmung beenden" + infinite: "Nie" + at: "Beenden am …" + after: "Beenden nach …" + deadlineDate: "Enddatum" + deadlineTime: "Zeit" + duration: "Dauer" + votesCount: "{n} Stimmen" + totalVotes: "Insgesamt {n} Stimmen" + vote: "Abstimmen" + showResult: "Ergebnis anzeigen" + voted: "Abgestimmt" + closed: "Beendet" + remainingDays: "{d} Tag(e) {h} Stunde(n) verbleibend" + remainingHours: "{h} Stunde(n) {m} Minute(n) verbleibend" + remainingMinutes: "{m} Minute(n) {s} Sekunde(n) verbleibend" + remainingSeconds: "{s} Sekunde(n) verbleibend" +_visibility: + public: "Öffentlich" + publicDescription: "Dein Beitrag wird global in allen öffentlichen Timelines sichtbar + sein" + home: "nicht aufgelistet" + homeDescription: "Beitrag nur auf der Home-Timeline anzeigen" + followers: "Follower" + followersDescription: "Nur für Follower und erwähnte Nutzer sichtbar" + specified: "Direkt" + specifiedDescription: "Nur für bestimmte Nutzer sichtbar" + localOnly: "Nur Lokal" + localOnlyDescription: "Unsichtbar für Nutzer anderer Server" +_postForm: + replyPlaceholder: "Diesem Beitrag antworten …" + quotePlaceholder: "Diesen Beitrag zitieren …" + channelPlaceholder: "In einen Kanal senden..." + _placeholders: + a: "Was machst du momentan?" + b: "Was ist um dich herum los?" + c: "Was geht dir durch den Kopf?" + d: "Was möchtest du sagen?" + e: "Fang an zu schreiben …" + f: "Ich warte darauf, dass du schreibst …" +_profile: + name: "Name" + username: "Benutzername" + description: "Profilbeschreibung" + youCanIncludeHashtags: "Du kannst auch Hashtags in deiner Profilbeschreibung verwenden." + metadata: "Zusätzliche Informationen" + metadataEdit: "Zusätzliche Informationen bearbeiten" + metadataDescription: "Hierdurch kannst du auf deinem Profil zusätzliche Informationsblöcke + anzeigen lassen. Sie können ein {a}-Tag oder ein {l}-Tag mit {rel} hinzufügen, + um den Link in Ihrem Profil zu überprüfen!" + metadataLabel: "Beschriftung" + metadataContent: "Inhalt" + changeAvatar: "Profilbild ändern" + changeBanner: "Banner ändern" + locationDescription: Wenn Sie Ihren Ort zuerst eingeben, wird für andere Benutzer + die Ortszeit angezeigt. +_exportOrImport: + allNotes: "Alle Beiträge" + followingList: "Gefolgte Nutzer" + muteList: "Stummschaltungen" + blockingList: "Blockierungen" + userLists: "Listen" + excludeMutingUsers: "Stummgeschaltete Nutzer aussortieren" + excludeInactiveUsers: "Inaktive Nutzer aussortieren" +_charts: + federation: "Föderation" + apRequest: "Anfragen" + usersIncDec: "Unterschied in der Anzahl von Nutzern" + usersTotal: "Anzahl aller Nutzer" + activeUsers: "Aktive Nutzer" + notesIncDec: "Unterschied bei der Anzahl an Beiträgen" + localNotesIncDec: "Unterschied bei der Anzahl an lokalen Beiträgen" + remoteNotesIncDec: "Differenz bei der Anzahl an Beiträgen von anderen Servern" + notesTotal: "Anzahl aller Beiträge" + filesIncDec: "Unterschied in der Anzahl an Dateien" + filesTotal: "Anzahl aller Dateien" + storageUsageIncDec: "Unterschied in der Höhe der Speichernutzung" + storageUsageTotal: "Gesamte Speichernutzung" +_instanceCharts: + requests: "Anfragen" + users: "Unterschied in der Anzahl an Nutzern" + usersTotal: "Gesamtanzahl an Nutzern" + notes: "Unterschied in der Anzahl an Beiträgen" + notesTotal: "Gesamtanzahl der Beiträge" + ff: "Unterschied in der Anzahl an gefolgten Nutzern und Followern " + ffTotal: "Gesamtanzahl an gefolgten Nutzern und Followern" + cacheSize: "Unterschied in der Größe des Caches" + cacheSizeTotal: "Gesamtgröße des Caches" + files: "Unterschied in der Anzahl an Dateien" + filesTotal: "Gesamtanzahl an Dateien" +_timelines: + home: "Home-TL" + local: "Local-TL" + social: "Social-TL" + global: "Global-TL" + recommended: Admin-Favoriten +_pages: + newPage: "Neue Seite erstellen" + editPage: "Seite bearbeiten" + readPage: "Quelltextansicht" + created: "Seite erfolgreich erstellt" + updated: "Seite erfolgreich aktualisiert" + deleted: "Seite erfolgreich gelöscht" + pageSetting: "Seiteneinstellungen" + nameAlreadyExists: "Die angegebene Seiten-URL existiert bereits" + invalidNameTitle: "Die angegebene Seiten-URL ist ungültig" + invalidNameText: "Überprüfe, ob der Seitentitel nicht leer ist" + editThisPage: "Diese Seite bearbeiten" + viewSource: "Quelltext anzeigen" + viewPage: "Seite anschauen" + like: "Gefällt mir" + unlike: "\"Gefällt mir\" entfernen" + my: "Meine Nutzer-Seiten" + liked: "Nutzer-Seiten, die mir gefallen" + featured: "Beliebt" + inspector: "Inspektor" + contents: "Inhalte" + content: "Seitenblock" + variables: "Variablen" + title: "Titel" + url: "Nutzer-Seiten-URL" + summary: "Zusammenfassung" + alignCenter: "Zentrieren" + hideTitleWhenPinned: "Nutzer-Seitentitel wenn angeheftet ausblenden" + font: "Schriftart" + fontSerif: "Serif" + fontSansSerif: "Sans Serif" + eyeCatchingImageSet: "Vorschaubild festlegen" + eyeCatchingImageRemove: "Vorschaubild entfernen" + chooseBlock: "Block hinzufügen" + selectType: "Typ auswählen" + enterVariableName: "Gib einen Variablennamen ein" + variableNameIsAlreadyUsed: "Dieser Name wird bereits von einer anderen Variable + verwendet" + contentBlocks: "Inhalt" + inputBlocks: "Eingabe" + specialBlocks: "Spezial" + blocks: + text: "Text" + textarea: "Textfeld" + section: "Abschnitt" + image: "Bilder" + button: "Knopf" + if: "Falls" + _if: + variable: "Variable" + post: "Beitragsfeld" + _post: + text: "Inhalt" + attachCanvasImage: "Leinwandbild anfügen" + canvasId: "Leinwand-ID" + textInput: "Texteingabe" + _textInput: + name: "Variablenname" + text: "Titel" + default: "Standardwert" + textareaInput: "Mehrzeiliges Texteingabefeld" + _textareaInput: + name: "Variablenname" + text: "Titel" + default: "Standardwert" + numberInput: "Zahleneingabe" + _numberInput: + name: "Variablenname" + text: "Titel" + default: "Standardwert" + canvas: "Leinwand" + _canvas: + id: "Leinwand-ID" + width: "Breite" + height: "Höhe" + note: "Eingebetteter Beitrag" + _note: + id: "Beitrags-ID" + idDescription: "Du kannst alternativ auch die Beitrags-URL angeben." + detailed: "Detailierte Ansicht" + switch: "Fallunterscheidung" + _switch: + name: "Variablenname" + text: "Titel" + default: "Standardwert" + counter: "Zähler" + _counter: + name: "Variablenname" + text: "Titel" + inc: "Schrittgröße" + _button: + text: "Titel" + colored: "Farbig" + action: "Aktion, die bei Knopfdruck ausgeführt wird" + _action: + dialog: "Dialogfenster anzeigen" + _dialog: + content: "Inhalt" + resetRandom: "Zufallswert zurücksetzen" + pushEvent: "Ein Event senden" + _pushEvent: + event: "Eventname" + message: "Meldung, die bei Aktivierung angezeigt werden soll" + variable: "Variable, die gesendet werden soll" + no-variable: "Keine" + callAiScript: "AiScript ausführen" + _callAiScript: + functionName: "Funktionsname" + radioButton: "Optionsfeld" + _radioButton: + name: "Variablenname" + title: "Titel" + values: "Durch Zeilenümbrüche getrennte Auswahlmöglichkeiten" + default: "Standardwert" + script: + categories: + flow: "Steuerung" + logical: "Logische Operationen" + operation: "Berechnungen" + comparison: "Vergleiche" + random: "Zufällig" + value: "Werte" + fn: "Funktionen" + text: "Textoperationen" + convert: "Konvertierungen" + list: "Listen" + blocks: + text: "Text" + multiLineText: "Text (Mehrzeilig)" + textList: "Textliste" + _textList: + info: "Trenne jeden Eintrag mit einem Zeilenumbruch" + strLen: "Textlänge" + _strLen: + arg1: "Text" + strPick: "Text extrahieren" + _strPick: + arg1: "Text" + arg2: "Textposition" + strReplace: "Textersetzung" + _strReplace: + arg1: "Text" + arg2: "Zu ersetzender Text" + arg3: "Ersetzen mit" + strReverse: "Text umkehren" + _strReverse: + arg1: "Text" + join: "Text zusammenfügen" + _join: + arg1: "Liste" + arg2: "Trennzeichen" + add: "Addieren" + _add: + arg1: "A" + arg2: "B" + subtract: "Subtrahieren" + _subtract: + arg1: "A" + arg2: "B" + multiply: "Multiplizieren" + _multiply: + arg1: "A" + arg2: "B" + divide: "Teilen" + _divide: + arg1: "A" + arg2: "B" + mod: "Rest" + _mod: + arg1: "A" + arg2: "B" + round: "Rundung von Dezimalstellen" + _round: + arg1: "Nummer" + eq: "A und B sind gleich" + _eq: + arg1: "A" + arg2: "B" + notEq: "A und B sind nicht gleich" + _notEq: + arg1: "A" + arg2: "B" + and: "A UND B" + _and: + arg1: "A" + arg2: "B" + or: "A ODER B" + _or: + arg1: "A" + arg2: "B" + lt: "< A ist kleiner als B" + _lt: + arg1: "A" + arg2: "B" + gt: "> A ist größer als B" + _gt: + arg1: "A" + arg2: "B" + ltEq: "<= A ist kleiner als oder gleich B" + _ltEq: + arg1: "A" + arg2: "B" + gtEq: ">= A ist größer als oder gleich B" + _gtEq: + arg1: "A" + arg2: "B" + if: "Kondition" + _if: + arg1: "Falls" + arg2: "Wenn wahr" + arg3: "Sonst" + not: "NICHT" + _not: + arg1: "NICHT" + random: "Zufällig" + _random: + arg1: "Warscheinlichkeit" + rannum: "Zufallsnummer" + _rannum: + arg1: "Minimum" + arg2: "Maximum" + randomPick: "Zufallswahl aus Liste" + _randomPick: + arg1: "Liste" + dailyRandom: "Zufällig (Pro Nutzer jeden Tag verschieden)" + _dailyRandom: + arg1: "Warscheinlichkeit" + dailyRannum: "Zufallsnummer (Pro Nutzer jeden Tag verschieden)" + _dailyRannum: + arg1: "Minimum" + arg2: "Maximum" + dailyRandomPick: "Zufallsauswahl aus einer Liste (Pro Nutzer jeden Tag verschieden)" + _dailyRandomPick: + arg1: "Liste" + seedRandom: "Zufällig (mit Startwert / Seed)" + _seedRandom: + arg1: "Startwert / Seed" + arg2: "Warscheinlichkeit" + seedRannum: "Zufallsnummer (mit Startwert / Seed)" + _seedRannum: + arg1: "Startwert / Seed" + arg2: "Minimum" + arg3: "Maximum" + seedRandomPick: "Zufallsauswahl aus Liste (mit Startwert / Seed)" + _seedRandomPick: + arg1: "Startwert / Seed" + arg2: "Liste" + DRPWPM: "Zufallsauswahl aus gewichteter Liste (Pro Nutzer jeden Tag verschieden)" + _DRPWPM: + arg1: "Textliste" + pick: "Aus einer Liste wählen" + _pick: + arg1: "Liste" + arg2: "Position" + listLen: "Listenlänge abrufen" + _listLen: + arg1: "Liste" + number: "Nummer" + stringToNumber: "Text zu Nummer" + _stringToNumber: + arg1: "Text" + numberToString: "Nummer zu Text" + _numberToString: + arg1: "Nummer" + splitStrByLine: "Text nach Zeilenumbrüchen aufteilen" + _splitStrByLine: + arg1: "Text" + ref: "Variable" + aiScriptVar: "AiScript Variable" + fn: "Funktion" + _fn: + slots: "Slots" + slots-info: "Trenne jeden Slot mit einem Zeilenumbruch" + arg1: "Ausgabe" + for: "for-Schleife" + _for: + arg1: "Anzahl der Schleifendurchläufe" + arg2: "Aktion" + typeError: "Slot {slot} akzeptiert Werte vom Typ „{expect}“, aber es wurde ein + „{actual}“ Wert angegeben!" + thereIsEmptySlot: "Slot {slot} ist leer!" + types: + string: "Text" + number: "Nummer" + boolean: "Wahrheitswert" + array: "Liste" + stringArray: "Textliste" + emptySlot: "Leerer Slot" + enviromentVariables: "Umgebungsvariable" + pageVariables: "Seitenelemente" + argVariables: "Eingabeslots" +_relayStatus: + requesting: "Ausstehend" + accepted: "Akzeptiert" + rejected: "Abgelehnt" +_notification: + fileUploaded: "Datei erfolgreich hochgeladen" + youGotMention: "{name} hat dich erwähnt" + youGotReply: "{name} hat dir geantwortet" + youGotQuote: "{name} hat dich zitiert" + youRenoted: "Renote deines Beitrages von {name}" + youGotPoll: "{name} hat in deiner Umfrage abgestimmt" + youGotMessagingMessageFromUser: "{name} hat dir eine Chatnachricht gesendet" + youGotMessagingMessageFromGroup: "In die Gruppe {name} wurde eine Chatnachricht + gesendet" + youWereFollowed: "folgt dir nun" + youReceivedFollowRequest: "Du hast eine Follow-Anfrage erhalten" + yourFollowRequestAccepted: "Deine Follow-Anfrage wurde akzeptiert" + youWereInvitedToGroup: "{userName} hat dich in eine Gruppe eingeladen" + pollEnded: "Umfrageergebnisse sind verfügbar" + emptyPushNotificationMessage: "Push-Benachrichtigungen wurden aktualisiert" + _types: + all: "Alle" + follow: "Neue Follower" + mention: "Erwähnungen" + reply: "Antworten" + renote: "Renotes" + quote: "Zitationen" + reaction: "Reaktionen" + pollVote: "Antworten auf Umfragen" + pollEnded: "Ende von Umfragen" + receiveFollowRequest: "Erhaltene Follow-Anfragen" + followRequestAccepted: "Akzeptierte Follow-Anfragen" + groupInvited: "Erhaltene Gruppeneinladungen" + app: "Benachrichtigungen von Apps" + _actions: + followBack: "folgt dir nun auch" + reply: "Antworten" + renote: "Renote" + voted: haben bei deiner Umfrage abgestimmt + reacted: hat auf deinen Beitrag reagiert + renoted: hat deinen Beitrag geteilt + andCountUsers: und {count} mehr Nutzer {acted} +_deck: + alwaysShowMainColumn: "Hauptspalte immer zeigen" + columnAlign: "Spaltenausrichtung" + addColumn: "Spalte hinzufügen" + configureColumn: "Spalteneinstellungen" + swapLeft: "Mit linker Spalte tauschen" + swapRight: "Mit rechter Spalte tauschen" + swapUp: "Mit oberer Spalte tauschen" + swapDown: "Mit unterer Spalte tauschen" + stackLeft: "Auf linke Spalte stapeln" + popRight: "Nach rechts vom Stapel nehmen" + profile: "Arbeitsbereich" + newProfile: "Neuer Arbeitsbereich" + deleteProfile: "Arbeitsbereich löschen" + introduction: "Erstelle eine auf dich zugeschneiderte Benutzeroberfläche durch das + Aneinanderreihen von Spalten!" + introduction2: "Klicke auf das + rechts um wann immer du möchtest neue Spalten hinzuzufügen." + widgetsIntroduction: "Drücke bitte \"Widgets bearbeiten\" im Spaltenmenü und füge + ein Widget hinzu." + _columns: + main: "Hauptspalte" + widgets: "Widgets" + notifications: "Benachrichtigungen" + tl: "Timeline" + antenna: "Antenne" + list: "Listen" + mentions: "Erwähnungen" + direct: "Direktnachrichten" + channel: Kanal + renameProfile: Arbeitsbereich umbenennen + nameAlreadyExists: Der Name für den Arbeitsbereich ist bereits vorhanden. +enableRecommendedTimeline: '"Favoriten"-Timeline einschalten' +secureMode: Sicherer Modus (Autorisierter Abruf) +instanceSecurity: Server-Sicherheit +manageGroups: Gruppen verwalten +noThankYou: Nein, danke +privateMode: Privater Modus +enableEmojiReactions: Emoji-Reaktionen aktivieren +flagSpeakAsCat: Wie eine Katze sprechen +showEmojisInReactionNotifications: Emojis in Reaktionsbenachrichtigungen anzeigen +userSaysSomethingReason: '{name} sagte {reason}' +hiddenTagsDescription: 'Liste die Hashtags (ohne #) welche du von Trending und Explore + verstecken möchtest. Versteckte Hashtags sind durch andere Wege weiterhin auffindbar.' +addInstance: Server hinzufügen +flagSpeakAsCatDescription: Deine Beiträge werden im Katzenmodus nyanisiert +hiddenTags: Versteckte Hashtags +antennaInstancesDescription: Geben sie einen Server-Namen pro Zeile ein +secureModeInfo: Bei Anfragen an andere Server nicht ohne Nachweis zurücksenden. +renoteMute: Boosts in Timelines stummschalten +renoteUnmute: Stummschaltung von Boosts in der Timeline aufheben +noInstances: Keine Server gefunden +privateModeInfo: Wenn diese Option aktiviert ist, können nur als vertrauenswürdig + eingestufte Server mit diesem Server föderieren. Alle Beiträge werden für die Öffentlichkeit + verborgen. +allowedInstances: Vertrauenswürdige Server +selectInstance: Wähle einen Server aus +silencedInstancesDescription: Liste die Hostnamen der Server auf, die du stummschalten + möchtest. Nutzerkonten in den aufgelisteten Servern werden als "Stumm" behandelt, + können nur Follow-Anfragen stellen und können keine lokalen Nutzerkonten erwähnen, + wenn sie nicht gefolgt werden. Dies wirkt sich nicht auf die blockierten Server + aus. +editNote: Beitrag bearbeiten +edited: 'Bearbeitet um {date} {time}' +silenceThisInstance: Diesen Server stummschalten +silencedInstances: Stummgeschaltete Server +silenced: Stummgeschaltet +deleted: Gelöscht +breakFollowConfirm: Sind sie sicher, dass sie eine(n) Follower entfernen möchten? +unsubscribePushNotification: Push-Benachrichtigungen deaktivieren +pushNotificationAlreadySubscribed: Push-Benachrichtigungen sind bereits aktiviert +pushNotificationNotSupported: Ihr Browser oder der Server unterstützt keine Push-Benachrichtigungen +pushNotification: Push-Benachrichtigungen +subscribePushNotification: Push-Benachrichtigungen aktivieren +showLocalPosts: 'Zeige lokale Beiträge in:' +homeTimeline: Home-Timeline +cannotUploadBecauseExceedsFileSizeLimit: Die Datei konnte nicht hochgeladen werden, + da sie die maximal zulässige Größe überschreitet. +moveFromLabel: 'Nutzerkonto von dem Sie umziehen:' +moveAccount: Nutzerkonto umziehen! +defaultReaction: Standard-Emoji-Reaktion für ausgehende und eingehende Beiträge +moveTo: Umzug des Nutzerkontos zu einem neuen Nutzerkonto +moveToLabel: 'Nutzerkonto zu dem sie umziehen:' +moveAccountDescription: 'Dieser Vorgang kann nicht rückgängig gemacht werden! Stellen + sie vor dem Umzug dieses Nutzerkontos sicher, dass Sie einen Namen für Ihr neues + Nutzerkonto eingerichtet haben. Bitte geben sie die Bezeichnung des neuen Nutzerkontos + wie folgt ein: @name@server.xyz' +sendPushNotificationReadMessage: Löschung der Push-Benachrichtigungen sobald die entsprechenden + Benachrichtigungen oder Nachrichten gelesen wurden +signupsDisabled: Derzeit sind keine Anmeldungen auf diesem Server möglich. Wenn Sie + einen Einladungscode für diesen Server haben, geben Sie ihn bitte unten ein. +swipeOnDesktop: Am Desktop PC das Wischen wie bei mobilen Geräten zulassen +enterSendsMessage: Drücken sie zum Senden des Beitrages die Eingabetaste (Strg-Taste + ausgeschaltet) +showUpdates: Zeige ein Popup-Fenster an, wenn Firefish aktualisiert wird +socialTimeline: Social-Timeline +moveFrom: Bisheriges Nutzerkonto zu diesem Nutzerkonto umziehen +_messaging: + groups: Gruppen + dms: Privat +recommendedInstances: Empfohlene Server +logoImageUrl: URL des Logo-Bildes +userSaysSomethingReasonReply: '{name} hat auf einen Beitrag geantwortet der {reason} + beinhaltet' +userSaysSomethingReasonRenote: '{name} hat einen Beitrag geteilt der {reason} beinhaltet' +userSaysSomethingReasonQuote: '{name} hat einen Beitrag zitiert der {reason} beinhaltet' +seperateRenoteQuote: Getrennte Boost- und Zitat-Schaltflächen +showAds: Community-Banner anzeigen +splash: Begrüßungsbildschirm +customSplashIconsDescription: URLs für benutzerdefinierte Splash-Screen-Symbole, die + durch Zeilenumbrüche getrennt sind und nach dem Zufallsprinzip jedes Mal angezeigt + werden, wenn ein Benutzer die Seite lädt/neu lädt. Bitte stelle sicher, dass die + Bilder unter einer statischen URL stehen, vorzugsweise alle in der Größe 192x192. +sendPushNotificationReadMessageCaption: Eine Benachrichtigung mit dem Text "{emptyPushNotificationMessage}" + wird für kurze Zeit angezeigt. Dies kann ggf. den Akkuverbrauch Ihres Geräts erhöhen. +customSplashIcons: Benutzerdefinierte Begrüßungsbildschirmsymbole (URLs) +adminCustomCssWarn: Diese Einstellung sollte nur verwendet werden, wenn Sie wissen, + was sie tut. Die Eingabe falscher Werte kann dazu führen, dass ALLE Clients nicht + mehr normal funktionieren. Bitte stellen Sie sicher, dass Ihr CSS ordnungsgemäß + funktioniert, indem Sie es in Ihren Benutzereinstellungen testen. +customMOTD: Benutzerdefinierte Meldung des Tages (Begrüßungsbildschirmmeldungen) +allowedInstancesDescription: Hostnamen von Servern, die auf der Liste vertrauenswürdiger + Server für die Föderation stehen sollen, jeweils getrennt in einer neuen Zeile (tritt + nur im privaten Modus in Kraft). +migration: Migration +updateAvailable: Es könnte ein Update verfügbar sein! +showAdminUpdates: Anzeigen, dass eine neue Firefish-Version verfügbar ist (nur Administrator) +customMOTDDescription: Benutzerdefinierte Meldungen für die Meldung des Tages (Begrüßungsbildschirm), + die durch Zeilenumbrüche getrennt sind und nach dem Zufallsprinzip jedes Mal angezeigt + werden, wenn ein Benutzer die Seite (neu) lädt. +recommendedInstancesDescription: Empfohlene Server, die durch Zeilenumbrüche getrennt + sind, werden in der "Favoriten"-Timeline angezeigt. +sendModMail: Moderation kontaktieren +moveFromDescription: 'Dadurch wird ein Alias Ihres alten Nutzerkontos festgelegt, + sodass Sie von ihrem bisherigen Konto zu diesem Nutzerkonto wechseln können. Tun + Sie dies, BEVOR Sie von Ihrem bisherigen Nutzerkonto hierhin wechseln. Bitte geben + Sie den Namen des Nutzerkontos wie folgt ein: @person@server.xyz' +preventAiLearning: KI gestütztes bot-scraping unterdrücken +preventAiLearningDescription: Fordern Sie KI-Sprachmodelle von Drittanbietern auf, + die von Ihnen hochgeladenen Inhalte, wie z. B. Beiträge und Bilder, nicht zu untersuchen. +license: Lizenz +migrationConfirm: "Sind Sie absolut sicher, dass Sie Ihr Nutzerkonto zu diesem {account} + umziehen möchten? Sobald Sie dies bestätigt haben, kann dies nicht mehr rückgängig + gemacht werden und Ihr Nutzerkonto kann nicht mehr von ihnen genutzt werden.\nStellen + Sie außerdem sicher, dass Sie dieses Nutzerkonto als das Konto festgelegt haben, + von dem Sie umziehen." +noteId: Beitrags-ID +customKaTeXMacro: Individuelle KaTeX Makros +enableCustomKaTeXMacro: Individuelle KaTeX-Makros aktivieren +replayTutorial: Wiederhole die Benutzeranleitung +apps: Apps +caption: Automatische Beschreibung +pwa: PWA installieren +cw: Inhaltswarnung +older: älter +newer: neuer +accessibility: Barrierefreiheit +jumpToPrevious: Zum Vorherigen springen +silencedWarning: Diese Meldung wird angezeigt, weil diese Nutzer von Servern stammen, + die Ihr Administrator abgeschaltet hat, so dass es sich möglicherweise um Spam handelt. +_experiments: + title: Funktionstests + enablePostImports: Beitragsimporte aktivieren + postImportsCaption: Erlaubt es Nutzer:innen ihre Posts von alten Firefish, Misskey, + Mastodon, Akkoma und Pleroma Accounts zu importieren. Bei Engpässen in der Warteschlange + kann es zu Verlangsamungen beim Laden während des Imports kommen. +noGraze: Bitte deaktivieren Sie die Browsererweiterung "Graze for Mastodon", da sie + die Funktion von Firefish stört. +customKaTeXMacroDescription: "Richten Sie Makros ein, um mathematische Ausdrücke einfach + zu schreiben! Die Notation entspricht den LaTeX-Befehlsdefinitionen und wird als + \\newcommand{\\name}{content} oder \\newcommand{\\name}[number of arguments]{content} + geschrieben. Zum Beispiel wird \\newcommand{\\add}[2]{#1 + #2} \\add{3}{foo} erweitern + zu 3 + foo. Die geschweiften Klammern, die den Makro-Namen umgeben, können in runde + oder eckige Klammern geändert werden. Dies hat Auswirkungen auf die Klammern, die + für die Argumente verwendet werden. Pro Zeile kann ein (und nur ein) Makro definiert + werden, und Sie können die Zeile nicht mitten in der Definition umbrechen. Ungültige + Zeilen werden einfach ignoriert. Es werden nur einfache Funktionen zur Substitution + von Zeichenketten unterstützt; erweiterte Syntax, wie z. B. bedingte Verzweigungen, + können hier nicht verwendet werden." +expandOnNoteClickDesc: Wenn deaktiviert, können Sie Beiträge trotzdem über das Rechtsklickmenü + oder durch Anklicken des Zeitstempels öffnen. +selectChannel: Wählen Sie einen Kanal aus +expandOnNoteClick: Beitrag bei Klick öffnen +image: Bild +video: Video +audio: Audio +_filters: + fromUser: Von Benutzer + notesAfter: Beiträge nach + withFile: Mit Datei + fromDomain: Von Domain + notesBefore: Beiträge vor + followingOnly: Nur Folgende + followersOnly: Nur Follower +isBot: Dieses Konto ist ein Bot +isModerator: Moderator +isAdmin: Administrator +_dialog: + charactersExceeded: 'Maximale Anzahl an Zeichen aufgebraucht! Limit: {current} / + {max}' + charactersBelow: Nicht genug Zeichen! Du hast aktuell {current} von {min} Zeichen +searchPlaceholder: Firefish durchsuchen +antennasDesc: "Antennen zeigen neue Posts an, die deinen definierten Kriterien entsprechen!\n + Sie können von der Timeline-Seite aufgerufen werden." +isPatron: Firefish-Patron +removeReaction: Entferne deine Reaktion +listsDesc: Listen lassen dich Timelines mit bestimmten Nutzer:innen erstellen. Sie + können von der Timeline-Seite erreicht werden. +clipsDesc: Clips sind wie teilbare, kategorisierte Lesezeichen. Du kannst Clips vom + Menü individueller Posts aus erstellen. +channelFederationWarn: Kanäle föderieren noch nicht zu anderen Servern +reactionPickerSkinTone: Bevorzugte Emoji-Hautfarbe +swipeOnMobile: Wischen zwischen den Seiten erlauben +enableServerMachineStats: Server-Hardware-Statistik einschalten +enableIdenticonGeneration: Identicon-Generierung einschalten +verifiedLink: Verifizierter Link +_feeds: + copyFeed: Feed kopieren + jsonFeed: JSON-Feed + rss: RSS + atom: Atom +youHaveUnreadAnnouncements: Du hast ungelesene Ankündigungen +donationLink: Link zur Spenden-Seite +remindMeLater: Vielleicht später +neverShow: Nicht wieder zeigen +removeRecipient: Empfänger entfernen +removeMember: Mitglied entfernen +alt: ALT +xl: XL +isLocked: Dieser Account hat Folge-Anfragen aktiviert +_skinTones: + mediumLight: Mittelhell + yellow: Gelb + light: Hell + medium: Mittel + dark: Dunkel + mediumDark: Mitteldunkel +showPopup: Benutzer mit Popup benachrichtigen +showWithSparkles: Mit Glitzer anzeigen +removeQuote: Zitat entfernen +objectStorageS3ForcePathStyle: Verwende pfadbasierte Endpunkt-URLs +objectStorageS3ForcePathStyleDesc: Wenn aktiviert, werden Endpunkt-URLs im Format + 's3.amazonaws.com//' statt '.s3.amazonaws.com' erstellt. +origin: Herkunft +delete2fa: 2FA deaktivieren +deletePasskeys: Passkeys löschen +delete2faConfirm: Passkeys werden unwiderruflich von diesem Account gelöscht. Fortfahren? +deletePasskeysConfirm: Alle Passkeys und Security-Keys werden unwiderruflich von diesem + Account gelöscht. Fortfahren? +inputNotMatch: Eingabe stimmt nicht überein +addRe: Ein "re:" am Anfang des Kommentars hinzufügen, um einem Beitrag mit einer Inhaltswarnung + zu antworten +confirm: Bestätigen +importZip: ZIP Importieren +exportZip: ZIP exportieren +detectPostLanguage: Sprache automatisch erkennen und eine Schaltfläche zum Übersetzen + von Beiträgen in Fremdsprachen anzeigen +indexableDescription: Der integrierten Suche erlauben, Ihre öffentlichen Beiträge + anzuzeigen +indexable: Indexierbar +languageForTranslation: Übersetzungssprache veröffentlichen +openServerInfo: Anzeigen von Serverinformationen durch Anklicken des Server-Tickers + in einem Beitrag +vibrate: Vibrationen abspielen +clickToShowPatterns: Klicken um Modul-Muster anzuzeigen +replies: Antworten +reactions: Reaktionen +_iconSets: + bold: Fett + light: Leicht + fill: Gefüllt + duotone: Zweifarbig + regular: Normal +moreUrls: Angeheftete Seiten +iconSet: Icon Satz +renotes: Boosts +quotes: Zitate +moreUrlsDescription: "Die Seiten, welche angepinnt werde sollen, im Hilfe-Menü in + der unteren linken Ecke in folgender Notation angeben:\n\"Anzeigename\": https://example.com/" +toQuote: Zitat +releaseToReload: Loslassen, um neu zu laden +pullDownToReload: Herunterziehen zum Aktualisieren +antennaLimit: Die maximale Anzahl von Antennen, die jeder Nutzer erstellen kann +toEdit: Bearbeiten +squareCatAvatars: Profilbilder für Accounts mit Katzenohren quadratisch anzeigen +moderationNote: Moderationsnotiz +ipFirstAcknowledged: Das Datum des ersten Erwerbs der IP Adresse +driveCapacityOverride: Benutzerdefinierte Speicherkapazität +searchWordsDescription: "Hier den Suchbegriff für Beiträge eingeben. Mit einem Leerzeichen + getrennte Begriffe werden in einer UND Suche gesucht, um eine ODER Suche auszuführen + 'OR' (ohne Anführungszeichen) zwischen die Begriffe schreiben.\nZum Beispiel findet + die Suche nach \"Morgen Nacht\" Beiträge, die sowohl \"Morgen, als auch \"Nacht\"\ + \ enthalten. Die Suchanfrage \"Morgen OR Nacht\" findet Beiträge, die entweder \"\ + Morgen\" oder \"Nacht\" (oder beides) enthalten.\nDie AND und OR Suche ist zudem + kombinierbar, z.B. so: \"(Morgen OR Nacht) Eule)\".\nUm nach einer Sequenz von Wörtern + (z.B. einem Satz) zu suchen, muss die gesamte Wortsequenz in Anführungszeichen stehen. + Beispiel: \"Nachrichten von heute\"\n\nUm zu einem bestimmten Profil oder Beitrag + zu gelangen, muss die ID oder URL (Webadresse) eingegeben und der Suchknopf gedrückt + werden. Ansonsten wird nach Beiträgen gesucht, die die ID oder URL wörtlich enthalten." +useCdnDescription: Einige statische Ressourcen, wie einen Twemoji, vom JSDelivr CDN + anstatt von diesem Firefish server laden. +suggested: Vorgeschlagen +preventMisclick: Schutz vor versehentlichen Clicks +replaceWidgetsButtonWithReloadButton: Widget-Knopf durch Aktualisierungs-Knopf ersetzen +hideFollowButtons: Folgen-Knopf in einer versehentlich clickbaren Position verstecken +forMobile: Mobil +privateDescription: Nur für Sie sichtbar machen +makePrivate: Als privat markieren +searchUsers: Erstellt von (optional) +searchWords: Suchbegriffe / ID oder URL als Suchanfrage +searchCwAndAlt: Inhaltswarnungen und Beschreibungen von Dateien einbeziehen +searchUsersDescription: "Um nach Beiträgen eines bestimmten Nutzers/ Servers zu suchen, + einfach die ID (@Benutzer@beispiel.de, or @Benutzer für einen lokalen Benutzer) + oder Webadresse (beispiel.de) eingeben.\n\nDie Suche \"me\" (ohne Anführungszeichen) + findet alle Ihre Beiträge (auch nicht-gelistete, direkte, geheime Beiträge und Beiträge, + die nur für Follower sichtbar sind).\n\nDie Suche \"local\" (ohne Anführungszeichen) + sorgt dafür, dass nur Beiträge von diesem Server angezeigt werden." +publishTimelines: Timelines für Besucher veröffentlichen +publishTimelinesDescription: Falls konfiguriert, werden die lokale und globale Timeline + auf {url} auch ohne Anmeldung angezeigt. +showNoAltTextWarning: Eine Warnung beim Hochladen von Dateien ohne Beschreibung anzeigen +_emojiModPerm: + add: Hinzufügen + full: Alles erlauben + unauthorized: Kein(e) + mod: Hinzufügen und bearbeiten +messagingUnencryptedInfo: Unterhaltungen auf Firefish sind nicht Ende-zu-Ende verschlüsselt. + Teilen Sie keine sensiblen Informationen über Firefish. +autocorrectNoteLanguage: Eine Warnung anzeigen, wenn die Beitragssprache nicht mit + der automatisch ermittelten Sprache übereinstimmt +emojiModPerm: Berechtigung, personalisierte Emojis zu verwalten +emojiModPermDescription: "Hinzufügen: Erlauben Sie diesem Benutzer, neue benutzerdefinierte + Emojis hinzuzufügen und Tag/Kategorie/Lizenz für neu hinzugefügte benutzerdefinierte + Emojis einzustellen.\nHinzufügen und Bearbeiten: \"Hinzufügen\" Berechtigung + Erlauben + Sie diesem Benutzer, den Namen/die Kategorie/Tag/die Lizenz der vorhandenen benutzerdefinierten + Emojis zu bearbeiten.\nAlles erlauben: \"Hinzufügen und Bearbeiten\" Berechtigung + + Erlauben Sie diesem Benutzer, bestehende benutzerdefinierte Emojis zu löschen." +reloading: Aktualisiert +markLocalFilesNsfwByDefault: Standardmäßig alle neuen lokalen Dateien als sensibel + markieren +markLocalFilesNsfwByDefaultDescription: Unabhäning von dieser Einstellung lässt sich + eine NSFW-Markierung entfernen. Bereits existierende Dateien sind nicht betroffen. +noLanguage: Keine Sprache +showBigPostButton: Anzeigen eines großen Knopfes zum Teilen des Beitrags im Beitragsformular +private: Privat +searchRange: Veröffentlicht zwischen (optional) +searchPostsWithFiles: Nur Beiträge mit Dateien +noAltTextWarning: Einige der angehängten Dateien haben keine Beschreibung. Haben Sie + vergessen, diese zu schreiben? +toReply: Antworten +toPost: Teilen +sentFollowRequests: Gesendete Follow-Anfragen +replyMute: Antworten in Timelines stummschalten +replyUnmute: Stummschaltung von Antworten in Timelines aufheben +noSentFollowRequests: Keine gesendeten Follow-Anfragen +postSearch: Beitragssuche auf diesem Server +enablePullToRefresh: '"Herunterziehen um zu aktualisieren" aktivieren' +pullToRefreshThreshold: Benötigte heruntergezogene Distanz, um zu Aktualisieren +showAddFileDescriptionAtFirstPost: Öffne automatisch ein Eingabefeld, um fehlende + Dateibeschreibungen beim Hochladen zu ergänßen +searchRangeDescription: "Um eine Zeitspanne zu filtern, geben Sie diese in diesem + Format an: 20220615-20231031 (YYYYMMTT)\n\nDas Auslassen der Jahreszahl (z.B.: 0615-1031 + oder 20220615-1031) wird automatisch wie die aktuelle Jahreszahl interpretiert.\n + \nZudem können das Anfangs- oder Enddatum ausgelassen werden. Zum Beispiel gibt + -1031 an, nach Beiträgen vor dem 31.10 dieses Jahres zu suchen. Umgekehrt führt + 20220615- zu einer Suche nach allen Beiträgen nach dem 15.6.2022." +incorrectLanguageWarning: "Es sieht so aus, als wäre ihr Beitrag auf {detected}, aber + Sie haben {current} ausgewählt.\nMöchten Sie stattdessen die Sprache zu {detected} + ändern?" +noteEditHistory: Bearbeitungsgeschichte des Beitrags +_later: + justNow: gerade eben + secondsAgo: in {n}s + minutesAgo: in {n}min + hoursAgo: in {n}h + daysAgo: in {n}d + weeksAgo: in {n} Woche(n) + monthsAgo: in {n} Monat(en) + yearsAgo: in {n} Jahr(en) + future: zukünftig +scheduledPost: Veröffentlichungszeit manuell festlegen +scheduledDate: Geplantes Datum +mergeRenotesInTimeline: Mehrere Boosts eines Beitrags gruppieren +mergeThreadInTimeline: In der Timeline mehrere Beiträge im gleichen Thread zusammenlegen +cannotEditVisibility: Die Sichtbarkeit lässt sich nicht einstellen +useThisAccountConfirm: Mit diesem Benutzerkonto fortfahren? +inputAccountId: Bitte gib dein Benutzerkonto an (z.B. @firefish@info.firefish.dev) +remoteFollow: Folgen (fremde Instanz) +foldNotification: Ähnliche Benachrichtigungen gruppieren +i18nServerInfo: Neue Clients nutzen standardmäßig {language}. +i18nServerChange: Stattdessen {language} benutzen. +i18nServerSet: Für neue Clients {language} benutzen. +getQrCode: QR Code anzeigen +useCdn: Ressourcen von einem CDN laden +copyRemoteFollowUrl: URL zum Folgen auf einer fremden Instanz kopieren +showPreviewByDefault: Standardmäßig Vorschau in Beitragsform anzeigen +replaceChatButtonWithAccountButton: Unterhaltungen-Knopf durch Knopf zum Wechseln + des Benutzerkontos ersetzen +searchEngine: Verwendete Suchmaschine in der Suchleiste MFM +makePrivateConfirm: Diese Operation sendet eine Löschungsanfrage an fremde Server + und ändert die Sichtbarkeit zu 'privat'. Fortfahren? +enableTimelineStreaming: Timelines automatisch aktualisieren +scheduledPostAt: Der Beitrag wird {time} gesendet +cancelScheduledPost: Zeitplan entfernen +media: Medien +slashQuote: Kettenzitat +addAlt4MeTag: 'Automatisch den Hashtag #Alt4Me am Ende deines Beitrags einfügen, wenn + eine angehängte Datei keine Beschreibung hat' +turnOffCatLanguage: Katzensprache deaktivieren +strongPassword: Gutes Passwort diff --git a/locales/el-GR.yml b/locales/el-GR.yml new file mode 100644 index 0000000..f5fcc86 --- /dev/null +++ b/locales/el-GR.yml @@ -0,0 +1,815 @@ +_lang_: "Ελληνικά" +monthAndDay: "{day}/{month}" +search: "Αναζήτηση" +notifications: "Ειδοποιήσεις" +username: "Όνομα μέλους" +password: "Κωδικός πρόσβασης" +forgotPassword: "Ξέχασα τον κωδικό πρόσβασης" +fetchingAsApObject: "Άντληση από το Fediverse" +ok: "Εντάξει" +gotIt: "Τό'πιασα!" +cancel: "Ακύρωση" +enterUsername: "Εισαγωγή ονόματος μέλους" +renotedBy: "Προωθήθηκε από {user}" +noNotes: "Δεν υπάρχουν δημοσιεύσεις" +noNotifications: "Δεν υπάρχουν ειδοποιήσεις" +settings: "Ρυθμίσεις" +basicSettings: "Βασικές Ρυθμίσεις" +otherSettings: "Άλλες Ρυθμίσεις" +openInWindow: "Άνοιγμα σε παράθυρο" +profile: "Προφίλ" +timeline: "Χρονολόγιο" +noAccountDescription: "Αυτό το μέλος δεν έχει γράψει βιογραφικό ακόμη." +login: "Σύνδεση" +loggingIn: "Συνδέεστε" +logout: "Αποσύνδεση" +signup: "Εγγραφή" +uploading: "Ανέβασμα..." +save: "Αποθήκευση" +users: "Μέλη" +addUser: "Προσθήκη μέλους" +favorite: "Προσθήκη στους σελιδοδείκτες" +favorites: "Σελιδοδείκτες" +unfavorite: "Αφαίρεση από τους σελιδοδείκτες" +favorited: "Προστέθηκε στους σελιδοδείκτες." +alreadyFavorited: "Έχει ήδη προστεθεί στους σελιδοδείκτες." +cantFavorite: "Αδυναμία προσθήκης στους σελιδοδείκτες." +pin: "Καρφίτσωμα στο προφίλ" +unpin: "Ξεκαρφίτσωμα από το προφίλ" +copyContent: "Αντιγραφή περιεχομένων" +copyLink: "Αντιγραφή συνδέσμου" +delete: "Διαγραφή" +deleteAndEdit: "Διαγραφή και επεξεργασία" +deleteAndEditConfirm: "Σίγουρα θέλετε να διαγράψετε αυτή τη δημοσίευση και να την + επεξεργαστείτε; Θα χάσετε όλες τις αντιδράσεις, προωθήσεις και απαντήσεις σε αυτήν." +addToList: "Προσθήκη στη λίστα" +sendMessage: "Αποστολή μηνύματος" +copyUsername: "Αντιγραφή ονόματος μέλους" +searchUser: "Αναζήτηση μέλους" +reply: "Απάντηση" +loadMore: "Φόρτωσε περισσότερα" +showMore: "Δείξε περισσότερα" +showLess: "Κλείσιμο" +youGotNewFollower: "σε ακολούθησε" +receiveFollowRequest: "Λάβατε αίτημα ακολούθησης" +followRequestAccepted: "Το αίτημα ακολούθησης έγινε δεκτό" +mention: "Επισήμανση" +mentions: "Επισημάνσεις" +directNotes: "Απευθείας μηνύματα" +importAndExport: "Εισαγωγή/Εξαγωγή Δεδομένων" +import: "Εισαγωγή" +export: "Εξαγωγή" +files: "Αρχεία" +download: "Κατέβασμα" +driveFileDeleteConfirm: "Θέλετε σίγουρα να διαγράψετε το αρχείο \"{name}\"; Οι δημοσιεύσεις + με αυτό το συνημμένο αρχείο επίσης θα διαγραφούν." +unfollowConfirm: "Θέλετε σίγουρα να σταματήσετε να ακολουθείτε το μέλος {name};" +exportRequested: "Ζητήσατε μία εξαγωγή. Αυτό μπορεί να πάρει κάποιον χρόνο. Θα προστεθεί + στον Αποθηκευτικό Χώρο σας μόλις ολοκληρωθεί." +importRequested: "Ζητήσατε μια εισαγωγή. Αυτό μπορεί να πάρει κάποιον χρόνο." +lists: "Λίστες" +noLists: "Δεν έχετε λίστες" +note: "Δημοσίευση" +notes: "Δημοσιεύσεις" +following: "Ακολουθεί" +followers: "Ακολουθούν" +followsYou: "Σε ακολουθεί" +createList: "Δημιουργία λίστας" +manageLists: "Διαχείριση λιστών" +error: "Σφάλμα" +somethingHappened: "Προέκυψε ένα σφάλμα" +retry: "Προσπάθεια ξανά" +pageLoadError: "Ένα σφάλμα προέκυψε φορτώνοντας τη σελίδα." +pageLoadErrorDescription: "Αυτό κανονικά προκαλείται από σφάλματα δικτύου ή από την + προσωρινή μνήμη του προγράμματος περιήγησης. Δοκιμάστε να σβήσετε την προσωρινή + μνήμη (cache) και να δοκιμάσετε ξανά μετά από λίγο." +serverIsDead: "Αυτός ο διακομιστής (server) δεν αποκρίνεται. Παρακαλώ περιμένετε λίγο + και δοκιμάστε ξανά." +youShouldUpgradeClient: "Για να δείτε αυτή τη σελίδα, παρακαλώ επαναφορτώστε για να + γίνει ενημέρωση." +enterListName: "Πληκτρολογήστε ένα όνομα για τη λίστα" +privacy: "Ιδιωτικότητα" +makeFollowManuallyApprove: "Τα αιτήματα ακολούθησης χρειάζονται έγκριση" +defaultNoteVisibility: "Προεπιλεγμένη ορατότητα" +follow: "Ακολουθήστε" +followRequest: "Ακολουθήστε" +followRequests: "Αιτήματα ακολούθησης" +unfollow: "Να μην ακολουθώ" +followRequestPending: "Το αίτημα ακολούθησης εκκρεμεί" +enterEmoji: "Εισάγετε ένα emoji" +renote: "Προώθηση" +unrenote: "Αναίρεση προώθησης" +renoted: "Προωθήθηκε." +cantRenote: "Αυτή η δημοσίευση δεν μπορεί να προωθηθεί." +cantReRenote: "Μία προώθηση δεν μπορεί να προωθηθεί." +quote: "Παράθεση" +pinnedNote: "Καρφιτσωμένη δημοσίευση" +pinned: "Καρφίτσωμα στο προφίλ" +you: "Εσύ" +clickToShow: "Κάντε κλικ για εμφάνιση" +add: "Προσθήκη" +reaction: "Αντιδράσεις" +reactionSetting: "Αντιδράσεις που θα εμφανίζονται στον επιλογέα" +reactionSettingDescription2: "Σύρετε για να αλλάξετε τη σειρά, κάντε κλικ για να διαγράψετε, + πατήστε \"+\" για να προσθέσετε." +rememberNoteVisibility: "Θυμήσου τις ρυθμίσεις ορατότητας για τις δημοσιεύσεις" +attachCancel: "Αφαίρεση επισυναπτόμενου" +enterFileName: "Πληκτρολογήστε όνομα αρχείου" +mute: "Σίγαση" +unmute: "Διακοπή σίγασης" +block: "Μπλοκάρισμα" +unblock: "Διακοπή μπλοκαρίσματος" +suspend: "Αποβολή" +unsuspend: "Διακοπή αποβολής" +blockConfirm: "Θέλετε σίγουρα να μπλοκάρετε αυτόν τον λογαριασμό;" +unblockConfirm: "Θέλετε σίγουρα να ξεμπλοκάρετε αυτόν τον λογαριασμό;" +suspendConfirm: "Θέλετε σίγουρα να αποβάλετε αυτόν τον λογαριασμό;" +unsuspendConfirm: "Θέλετε σίγουρα να άρετε την αποβολή αυτού του λογαριασμού;" +selectList: "Επιλέξτε μια λίστα" +selectAntenna: "Επιλέξτε μια αντένα" +selectWidget: "Επιλέξτε ένα πρόσθετο" +editWidgets: "Επεξεργασία πρόσθετων" +editWidgetsExit: "Ολοκληρώθηκε" +customEmojis: "Προσαρμοσμένα Emoji" +emojiName: "Όνομα emoji" +addEmoji: "Προσθήκη" +settingGuide: "Προτεινόμενες ρυθμίσεις" +flagAsBot: "Δήλωση αυτού του λογαριασμού ως bot" +flagAsCat: "Είσαι γατί; 😺" +flagShowTimelineReplies: "Εμφάνιση απαντήσεων στο χρονολόγιο" +addAccount: "Προσθήκη λογαριασμού" +general: "Γενικές" +wallpaper: "Ταπετσαρία" +setWallpaper: "Ορισμός ταπετσαρίας" +removeWallpaper: "Αφαίρεση ταπετσαρίας" +searchWith: "Αναζήτηση: {q}" +youHaveNoLists: "Δεν έχετε λίστες" +followConfirm: "Θέλετε σίγουρα να ακολουθήσετε τον λογαριασμό {name};" +host: "Φιλοξενεί (Host)" +selectUser: "Επιλέξτε ένα μέλος" +recipient: "Αποδέκτης-τρια(-ες)" +annotation: "Σχόλια" +federation: "Ομοσπονδία" +storageUsage: "Χρήση χώρου" +version: "Έκδοση" +metadata: "Μεταδεδομένα" +network: "Δίκτυο" +disk: "Δίσκος" +instanceInfo: "Πληροφορίες Instance" +statistics: "Στατιστικά" +clearQueue: "Εκκαθάριση ουράς" +clearQueueConfirmTitle: "Θέλετε να διαγράψετε την ουρά;" +clearCachedFiles: "Εκκαθάριση προσωρινής μνήμης (cache)" +done: "Ολοκληρώθηκε" +attachFile: "Επισύναψη αρχείων" +more: "Περισσότερα!" +noSuchUser: "Το μέλος δεν βρέθηκε" +announcements: "Ανακοινώσεις" +imageUrl: "URL εικόνας" +remove: "Διαγραφή" +removed: "Η διαγραφή ολοκληρώθηκε επιτυχώς" +saved: "Αποθηκεύτηκε" +messaging: "Συνομιλία" +upload: "Ανεβάστε" +fromDrive: "Από τον Αποθηκευτικό Χώρο" +fromUrl: "Από URL" +uploadFromUrl: "Ανέβασμα από URL" +explore: "Εξερεύνηση" +messageRead: "Διαβάστηκε" +startMessaging: "Ξεκινήστε μια νέα συνομιλία" +nUsersRead: "διαβάστηκε από {n}" +tos: "Όροι Χρήσης" +start: "Ας αρχίσουμε" +home: "Κεντρικό" +activity: "Δραστηριότητα" +images: "Εικόνες" +birthday: "Γενέθλια" +registeredDate: "Έγινε μέλος στις" +location: "Τοποθεσία" +theme: "Θέματα" +light: "Φωτεινό" +dark: "Σκοτεινό" +drive: "Αποθηκευτικός Χώρος" +fileName: "Όνομα αρχείου" +selectFile: "Επιλέξτε ένα αρχείο" +selectFiles: "Επιλέξτε αρχεία" +selectFolder: "Επιλέξτε φάκελο" +selectFolders: "Επιλέξτε φακέλους" +renameFile: "Μετονομασία αρχείου" +addFile: "Προσθέστε ένα αρχείο" +emptyDrive: "Ο Αποθηκευτικός Χώρος σας είναι άδειος" +copyUrl: "Αντιγραφή διεύθυνσης URL" +rename: "Μετονομασία" +avatar: "Άβαταρ" +banner: "Εξώφυλλο" +reload: "Ανανέωση" +doNothing: "Αγνόηση" +watch: "Παρακολούθηση" +unwatch: "Διακοπή παρακολούθησης" +accept: "Αποδοχή" +reject: "Απόρριψη" +normal: "Κανονικό" +instanceName: "Όνομα instance" +thisYear: "Έτος" +thisMonth: "Μήνας" +today: "Σήμερα" +dayX: "{day}" +pages: "Σελίδες" +registration: "Εγγραφή" +pinnedPages: "Καρφιτσωμένες Σελίδες" +pinnedNotes: "Καρφιτσωμένες δημοσιεύσεις" +antennas: "Αντένες" +manageAntennas: "Διαχείριση Αντενών" +name: "Όνομα" +antennaSource: "Πηγή Αντένας" +antennaKeywords: "Λέξεις-κλειδιά για παρακολούθηση" +antennaExcludeKeywords: "Λέξεις-κλειδιά για εξαίρεση" +notifyAntenna: "Ειδοποίηση για νέες δημοσιεύσεις" +withFileAntenna: "Μόνο δημοσιεύσεις με αρχεία" +caseSensitive: "Διάκριση Πεζών-Κεφαλαίων" +popularTags: "Δημοφιλείς ετικέτες" +userList: "Λίστες" +about: "Σχετικά με" +moderator: "Συντονιστής/στρια" +moderation: "Συντονισμός" +cacheClear: "Εκκαθάριση προσωρινής μνήμης (cache)" +markAsReadAllNotifications: "Σημειώστε όλες τις ειδοποιήσεις ως διαβασμένες" +group: "Ομάδα" +groups: "Ομάδες" +createGroup: "Δημιουργία ομάδας" +ownedGroups: "Οι ομάδες σας" +groupName: "Όνομα ομάδας" +members: "Μέλη" +transfer: "Μεταφορά" +messagingWithUser: "Προσωπική συνομιλία" +messagingWithGroup: "Ομαδική συνομιλία" +title: "Τίτλος" +text: "Κείμενο" +enable: "Ενεργοποίηση" +next: "Επόμενο" +noteOf: "Δημοσίευση από {user}" +inviteToGroup: "Πρόσκληση στην ομάδα" +quoteAttached: "Παράθεση" +signinRequired: "Παρακαλούμε δημιουργήστε λογαριασμό ή συνδεθείτε πριν συνεχίσετε" +category: "Κατηγορία" +tags: "Ετικέτες" +createAccount: "Δημιουργία λογαριασμού" +local: "Τοπικό" +remote: "Απομακρυσμένο" +total: "Σύνολο" +appearance: "Εμφάνιση" +accountSettings: "Ρυθμίσεις Λογαριασμού" +sounds: "Ήχοι" +sound: "Ήχοι" +listen: "Ακρόαση" +showInPage: "Εμφάνιση στη σελίδα" +volume: "Ένταση" +masterVolume: "Κεντρική ένταση" +details: "Λεπτομέρειες" +install: "Εγκαταστήστε" +uninstall: "Απεγκατάσταση" +manage: "Διαχείριση" +smtpHost: "Φιλοξενεί (Host)" +smtpUser: "Όνομα μέλους" +smtpPass: "Κωδικός" +notificationSetting: "Ρυθμίσεις ειδοποιήσεων" +notificationSettingDesc: "Επιλέξτε τους τύπους ειδοποιήσεων για προβολή." +switchUi: "Διάταξη" +clip: "Κλιπ" +driveFilesCount: "Αριθμός αρχείων Αποθηκευτικού Χώρου" +driveUsage: "Χρήση Αποθηκευτικού Χώρου" +noteFavoritesCount: "Αριθμός αγαπημένων σημειωμάτων" +clips: "Κλιπ" +clearCache: "Εκκαθάριση προσωρινής μνήμης" +emailNotification: "Ειδοποιήσεις μέσω mail" +inChannelSearch: "Αναζήτηση στο κανάλι" +info: "Πληροφορίες" +notRecommended: "Δεν προτείνεται" +switchAccount: "Αλλαγή λογαριασμού" +user: "Μέλη" +administration: "Διαχείριση" +switch: "Εναλλαγή" +gallery: "Γκαλερί" +global: "Παγκόσμιο" +searchResult: "Αποτελέσματα αναζήτησης" +learnMore: "Μάθετε περισσότερα" +controlPanel: "Πίνακας ελέγχου" +manageAccounts: "Διαχείριση Λογαριασμών" +file: "Αρχεία" +recommended: "Προτεινόμενα" +cannotUploadBecauseNoFreeSpace: "Το ανέβασμα απέτυχε λόγω ανεπαρκούς Αποθηκευτικού + Χώρου." +_email: + _follow: + title: "Έχετε ένα νέο ακόλουθο" +_mfm: + mention: "Επισήμανση" + quote: "Παράθεση" + emoji: "Επιπλέον emoji" + search: "Αναζήτηση" +_channel: + featured: "Δημοφιλή" +_theme: + keys: + panel: "Πίνακας" + mention: "Επισήμανση" + renote: "Κοινοποίηση σημειώματος" +_sfx: + note: "Σημειώματα" + notification: "Ειδοποιήσεις" + chat: "Συνομιλία" + chatBg: "Συνομιλία (Παρασκήνιο)" + antenna: "Αντένες" + channel: "Ειδοποιήσεις καναλιών" +_ago: + future: "Μελλοντικό" + justNow: "Μόλις τώρα" + secondsAgo: "{n} δευτερόλεπτο(α) πριν" + minutesAgo: "{n} λεπτό(ά) πριν" + hoursAgo: "{n} ώρα(ες) πριν" + daysAgo: "{n} μέρα(ες) πριν" + weeksAgo: "{n} εβδομάδα(ες) πριν" + monthsAgo: "{n} μήνα(ες) πριν" + yearsAgo: "{n} έτος(η) πριν" +_permissions: + "write:drive": "Επεξεργαστείτε ή διαγράψτε τα αρχεία και τους φακέλους του Αποθηκευτικού + Χώρου σας" + "read:favorites": "Δείτε τη λίστα με τους σελιδοδείκτες σας" + "write:favorites": "Επεξεργαστείτε τη λίστα με τους σελιδοδείκτες σας" + "read:messaging": "Δείτε τις συνομιλίες σας" + "write:messaging": "Γράψτε ή διαγράψτε μηνύματα συνομιλίας" + "read:notifications": "Δείτε τις ειδοποιήσεις σας" + "write:notifications": "Διαχειριστείτε τις ειδοποιήσεις σας" + "read:pages": "Δείτε τις Σελίδες σας" + "write:pages": "Επεξεργαστείτε ή διαγράψτε τις σελίδες σας" + "write:gallery-likes": Επεξεργασία της λίστας των αγαπημένων σας δημοσιεύσεων γκαλερί + "read:gallery": Δείτε την γκαλερί σας + "write:gallery": Επεξεργασία της γκαλερί σας + "read:gallery-likes": Δείτε τη λίστα των αγαπημένων σας δημοσιεύσεων γκαλερί +_antennaSources: + all: "Όλα τα σημειώματα" + homeTimeline: "Σημειώματα από μέλη που ακολουθείτε" + users: "Σημειώματα από συγκεκριμένα μέλη" + userList: "Σημειώματα από καθορισμένη λίστα μελών" + userGroup: "Σημειώματα από μέλη καθορισμένης ομάδας" +_widgets: + profile: "Προφίλ" + instanceInfo: "Πληροφορίες του instance" + notifications: "Ειδοποιήσεις" + timeline: "Χρονολόγιο" + calendar: "Ημερολόγιο" + trends: "Δημοφιλή" + clock: "Ρολόι" + activity: "Δραστηριότητα" + photos: "Φωτογραφίες" + digitalClock: "Ψηφιακό ρολόι" + federation: "Ομοσπονδία" + postForm: "Φόρμα δημοσίευσης" + button: "Κουμπί" + onlineUsers: "Συνδεδεμένα μέλη" + _userList: + chooseList: "Επιλέξτε μία λίστα" +_cw: + show: "Δείτε περισσότερα" +_visibility: + home: "Κεντρικό" + homeDescription: "Δημοσίευση στο κεντρικό χρονολόγιο μόνο" + followers: "Ακολουθούν" +_profile: + name: "Όνομα" + username: "Όνομα μέλους" + changeAvatar: Αλλαγή άβαταρ +_exportOrImport: + allNotes: "Όλα τα σημειώματα" + followingList: "Ακολουθεί" + muteList: "Μέλη σε σίγαση" + blockingList: "Μπλοκαρισμένα μέλη" + userLists: "Λίστες" +_charts: + federation: "Ομοσπονδία" +_timelines: + home: "Κεντρικό" + local: "Τοπικό" + social: "Κοινωνικό" + global: "Παγκόσμιο" +_pages: + viewPage: "Δείτε τις Σελίδες σας" + blocks: + image: "Εικόνες" +_notification: + youGotMessagingMessageFromUser: "{name} σάς έστειλε ένα μήνυμα συνομιλίας" + youWereFollowed: "σε ακολούθησε" + _types: + follow: "Νέοι ακόλουθοι" + mention: "Επισήμανση" + renote: "Κοινοποίηση σημειώματος" + quote: "Παράθεση" + reaction: "Αντιδράσεις" + _actions: + reply: "Απάντηση" + renote: "Κοινοποίηση σημειώματος" +_deck: + widgetsIntroduction: "Παρακαλούμε επιλέξτε \"Επεξεργασία πρόσθετων\" στο μενού και + προσθέστε μαραφέτι." + _columns: + widgets: "Πρόσθετα" + notifications: "Ειδοποιήσεις" + tl: "Χρονολόγιο" + antenna: "Αντένες" + list: "Λίστα" + mentions: "Επισημάνσεις" +sensitive: Ευαίσθητο περιεχόμενο (NSFW) +createFolder: Δημιουργία φακέλου +uploadFromUrlDescription: Το URL του αρχείου που θέλετε να ανεβάσετε +emptyFolder: Αυτός ο φάκελος είναι άδειος +unableToDelete: Αδυναμία διαγραφής +recentlyUpdatedUsers: Πρόσφατα ενεργά μέλη +recentlyRegisteredUsers: Νέα μέλη +exploreUsersCount: Υπάρχουν {count} μέλη +help: Βοήθεια +inputNewFileName: Πληκτρολογήστε ένα νέο όνομα αρχείου +nothing: Δεν υπάρχει τίποτα να δείτε εδώ +newNoteRecived: Υπάρχουν νέες δημοσιεύσεις +passwordMatched: Ταιριάζει +unmarkAsSensitive: Αναίρεση επισήμανσης ως Ευαίσθητο Περιεχόμενο (NSFW) +blockedUsers: Μπλοκαρισμένα μέλη +noteDeleteConfirm: Θέλετε σίγουρα να διαγράψετε αυτή τη δημοσίευση; +preview: Προεπισκόπηση +noCustomEmojis: Δεν υπάρχουν emoji +tosUrl: URL Όρων Χρήσης +monthX: '{month}' +markAsReadAllTalkMessages: Σημειώστε όλα τα μηνύματα ως διαβασμένα +inputMessageHere: Γράψτε εδώ το μήνυμά σας +close: Κλείσιμο +newMessageExists: Υπάρχουν νέα μηνύματα +usernameInvalidFormat: Μπορείτε να χρησιμοποιήσετε κεφαλαία και μικρά γράμματα, αριθμούς, + και κάτω παύλες. +tooShort: Πολύ σύντομο +passwordNotMatched: Δεν ταιριάζει +existingAccount: Υπάρχων λογαριασμός +deleteAll: Διαγραφή όλων +chooseEmoji: Επιλέξτε ένα emoji +sort: Ταξινόμηση +descendingOrder: Φθίνουσα +deleteAllFiles: Διαγραφή όλων των αρχείων +userSuspended: Αυτό το μέλος έχει αποβληθεί. +menu: Μενού +divider: Χώρισμα +deletedNote: Διαγραμμένη δημοσίευση +useCw: Απόκρυψη περιεχομένου +description: Περιγραφή +width: Πλάτος +disableAll: Απενεργοποίηση όλων +notificationType: Τύπος ειδοποίησης +wordMute: Σίγαση λέξεων +userSaysSomething: '{name} είπε κάτι' +metrics: Μετρήσεις +overview: Γενική εικόνα +database: Βάση δεδομένων +channel: Κανάλια +other: Άλλα +abuseReports: Αναφορές +reportAbuse: Αναφορά +unclip: Ακύρωση κλιπ +public: Δημόσιο +renotedCount: Αριθμός προωθήσεων που ελήφθησαν +alwaysMarkSensitive: Επισήμανση ως ευαίσθητο περιεχόμενο (NSFW) ως προεπιλογή +markAllAsRead: Σημειώστε τα όλα ως διαβασμένα +_gallery: + like: Μου αρέσει + liked: Αγαπημένες δημοσιεύσεις + my: Η Γκαλερί μου + unlike: Δεν μου αρέσει +showOnRemote: Δείτε στο απομακρυσμένο instance +perDay: Ανά Ημέρα +software: Λογισμικό +cpuAndMemory: CPU και Μνήμη +noUsers: Δεν υπάρχουν μέλη +processing: Επεξεργασία +changePassword: Αλλαγή κωδικού +security: Ασφάλεια +featured: Προτεινόμενα +keepOriginalUploading: Διατήρηση πρωτότυπης εικόνας +manageGroups: Διαχείριση ομάδων +deleteFolder: Διαγραφή φακέλου +nsfw: Ευαίσθητο περιεχόμενο (NSFW) +nUsersMentioned: Έχει αναφερθεί από {n} μέλη +notFound: Δεν βρέθηκε +markAsReadAllUnreadNotes: Σημειώστε όλες τις δημοσιεύσεις ως διαβασμένες +invites: Προσκλήσεις +quoteQuestion: Να προστεθεί ως Παράθεση; +noMessagesYet: Δεν υπάρχουν μηνύματα ακόμη +onlyOneFileCanBeAttached: Μπορείτε να επισυνάψετε μόνο ένα αρχείο σε ένα μήνυμα +tooLong: Υπερβολικά μακροσκελές +or: Ή +language: Γλώσσα +groupInvited: Προσκληθήκατε σε μία ομάδα +ascendingOrder: Αύξουσα +visibility: Ορατότητα +invisibleNote: Αόρατη δημοσίευση +enableInfiniteScroll: Αυτόματη φόρτωση περισσοτέρων +poll: Ψηφοφορία +enablePlayer: Άνοιγμα προβολής βίντεο +large: Μεγάλο +medium: Μεσαίο +small: Μικρό +postToGallery: Δημιουργία νέας δημοσίευσης γκαλερί +reloadConfirm: Θα θέλατε να ανανεώσετε το χρονολόγιο; +enableAll: Ενεργοποίηση όλων +permission: Εξουσιοδοτήσεις +sample: Δείγμα +copy: Αντιγραφή +display: Προβολή +send: Αποστολή +behavior: Συμπεριφορά +useGlobalSetting: Χρήση παγκόσμιων ρυθμίσεων +abuseMarkAsResolved: Επισήμανση της αναφοράς ως επιλυμένης +openInNewTab: Άνοιγμα σε νέα καρτέλα +_sensitiveMediaDetection: + setSensitiveFlagAutomatically: Επισήμανση ως ευαίσθητο περιεχόμενο (NSFW) +defaultNavigationBehaviour: Προεπιλεγμένη συμπεριφορά περιήγησης +system: Σύστημα +createNew: Δημιουργία νέου +createNewClip: Δημιουργία νέου κλιπ +repliesCount: Αριθμός απεσταλμένων απαντήσεων +optional: Προαιρετικό +renotesCount: Αριθμός προωθήσεων σε δημοσιεύσεις άλλων +addItem: Προσθήκη αντικειμένου +disablePlayer: Κλείσιμο προβολής βίντεο +describeFile: Προσθήκη περιγραφής +enterFileDescription: Πληκτρολογήστε περιγραφή +author: Συντάκτης/τρια +setMultipleBySeparatingWithSpace: Διαχωρίστε πολλαπλές καταχωρήσεις με κενά. +random: Τυχαίο +accountInfo: Πληροφορίες Λογαριασμού +notesCount: Αριθμός δημοσιεύσεων +repliedCount: Αριθμός απαντήσεων που ελήφθησαν +flagAsCatDescription: Θα έχεις γατοαυτιά και θα μιλάς σαν γατί! +muteAndBlock: Σιγάσεις και Μπλοκαρίσματα +mutedUsers: Σιγασμένα μέλη +editProfile: Επεξεργασία προφίλ +pinLimitExceeded: Δεν μπορείτε να καρφιτσώσετε άλλες δημοσιεύσεις +currentPassword: Τρέχων κωδικός +newPassword: Νέος κωδικός +newPasswordRetype: Ξαναπληκτρολογήστε τον νέο κωδικό +notesAndReplies: Δημοσιεύσεις και απαντήσεις +popularUsers: Δημοφιλή μέλη +share: Κοινοποίηση +retype: Πληκτρολογήστε ξανά +invitations: Προσκλήσεις +available: Διαθέσιμο +unavailable: Μη διαθέσιμο +youHaveNoGroups: Δεν έχετε ομάδες +doing: Επεξεργασία... +yourAccountSuspendedTitle: Αυτός ο λογαριασμός έχει αποβληθεί +leaveConfirm: Υπάρχουν αλλαγές που δεν έχουν σωθεί. Θέλετε να τις απορρίψετε; +height: Ύψος +edit: Επεξεργασία +headlineFirefish: Μία ανοιχτού λογισμικού, αποκεντρωμένη πλατφόρμα κοινωνικής δικτύωσης + που θα είναι για πάντα ελεύθερη! 🚀 +introFirefish: Καλώς ήρθατε! Το Firefish είναι μία ανοιχτού λογισμικού, αποκεντρωμένη + πλατφόρμα κοινωνικής δικτύωσης που θα είναι για πάντα ελεύθερη! 🚀 +markAsSensitive: Επισήμανση ως Ευαίσθητο Περιεχόμενο (NSFW) +autoAcceptFollowed: Αυτόματη έγκριση αιτημάτων ακολούθησης από λογαριασμούς που ακολουθείτε +loginFailed: Αποτυχία σύνδεσης +accountMoved: 'Έχει μεταφερθεί σε νέο λογαριασμό:' +perHour: Ανά Ώρα +remoteUserCaution: Οι πληροφορίες από απομακρυσμένους λογαριασμούς μπορεί να είναι + ατελείς. +folderName: Όνομα φακέλου +renameFolder: Μετονομασία φακέλου +recentUsed: Χρησιμοποιήθηκαν πρόσφατα +deleteAllFilesConfirm: Σίγουρα θέλετε να διαγράψετε όλα τα αρχεία; +removeAllFollowing: Διακοπή ακολούθησης όλων των ακολουθούμενων μελών +userSilenced: Αυτό το μέλος είναι υπό σιώπηση. +makeActive: Ενεργοποίηση +create: Δημιουργία +reportAbuseOf: Αναφορά {name} +cacheRemoteFilesDescription: Όταν αυτή η ρύθμιση είναι απενεργοποιημένη, τα απομακρυσμένα + αρχεία φορτώνονται απευθείας από το απομακρυσμένο instance. Η απενεργοποίηση θα + μειώσει τη χρήση του δίσκου σας, αλλά θα αυξήσει την κίνηση δεδομένων, καθώς δεν + θα δημιουργούνται σμικρύνσεις αρχείων (thumbnails). +registeredAt: Εγγράφηκε στις +latestStatus: Τελευταία κατάσταση +charts: Πίνακες +stopActivityDelivery: Σταμάτα να στέλνεις δραστηριότητες +operations: Λειτουργίες +monitor: Παρακολούθηση +jobQueue: Ουρά εργασιών +blockedInstances: Μπλοκαρισμένα Instances +blockedInstancesDescription: Παραθέστε τις διευθύνσεις (hostnames) των instances που + θέλετε να μπλοκάρετε. Τα παρακάτω instances δεν θα μπορούν πλέον να επικοινωνούν + με αυτό το instance. +intro: Η εγκατάσταση του Firefish τελείωσε! Παρακαλώ δημιουργήστε ένα μέλος διαχειριστή/στρια. +noThankYou: Όχι, ευχαριστώ +addInstance: Προσθήκη instance +renoteMute: Σίγαση προωθήσεων +emojiUrl: Διεύθυνση emoji (URL) +cacheRemoteFiles: Προσωρινή αποθήκευση απομακρυσμένων αρχείων +flagSpeakAsCat: Να μιλάς σαν γατί +flagSpeakAsCatDescription: Οι δημοσιεύσεις σου θα nyaοποιούνται όταν είσαι γατί +selectInstance: Επιλέξτε ένα instance +latestRequestSentAt: Τελευταίο αίτημα στάλθηκε +hiddenTags: Κρυμμένες Ετικέτες (Hashtags) +noInstances: Δεν υπάρχουν instances +renoteUnmute: Διακοπή σίγασης προωθήσεων +flagAsBotDescription: Ενεργοποιήστε αυτή την επιλογή αν αυτός ο λογαριασμός ελέγχεται + από ένα πρόγραμμα. Αν ενεργοποιηθεί, θα λειτουργεί σαν σημάδι για τους προγραμματιστές, + ώστε να αποφύγουν ατέρμονη αλληλεπίδραση με άλλα bots και για να ρυθμίσει τα εσωτερικά + συστήματα του Firefish ώστε να αντιμετωπίζουν αυτόν τον λογαριασμό ως bot. +flagShowTimelineRepliesDescription: Εμφάνιση απαντήσεων μελών σε δημοσιεύσεις άλλων + μελών στο χρονολόγιο. +latestRequestReceivedAt: Τελευταίο αίτημα ελήφθη +blockThisInstance: Μπλοκάρισμα αυτού του instance +clearQueueConfirmText: Τυχόν δημοσιεύσεις στην ουρά που δεν έχουν αποσταλεί δεν θα + ομοσπονδοποιηθούν. Συνήθως αυτή η λειτουργία δεν χρειάζεται. +clearCachedFilesConfirm: Σίγουρα θέλετε να διαγράψετε όλα τα προσωρινά αποθηκευμένα + απομακρυσμένα αρχεία; +default: Προεπιλεγμένο +defaultValueIs: 'Προεπιλεγμένο: {value}' +noJobs: Δεν υπάρχουν εργασίες (jobs) +federating: Ομοσπονδοποιείται +blocked: Μπλοκαρισμένο +suspended: Σε αποβολή +instanceFollowing: Ακολουθεί στο instance +instanceFollowers: Ακόλουθοι του instance +instanceUsers: Μέλη αυτού του instance +retypedNotMatch: Οι καταχωρήσεις δεν ταιριάζουν. +usernameOrUserId: Όνομα μέλους ή ταυτότητα μέλους (id) +removeAreYouSure: Θέλετε σίγουρα να αφαιρέσετε το "{x}"; +deleteAreYouSure: Θέλετε σίγουρα να διαγράψετε το "{x}"; +resetAreYouSure: Σίγουρα επανεκκίνηση; +uploadFromUrlMayTakeTime: Ίσως πάρει λίγο χρόνο μέχρι το ανέβασμα να ολοκληρωθεί. +noMoreHistory: Δεν υπάρχει περαιτέρω ιστορικό +agreeTo: Συμφωνώ στο {0} +yearsOld: '{age} ετών' +themeForDarkMode: Θέμα για τη Σκοτεινή Λειτουργία +syncDeviceDarkMode: Συγχρονισμός της Σκοτεινής Λειτουργίας με τις ρυθμίσεις της συσκευής + σας +inputNewDescription: Προσθέστε νέα περιγραφή +whenServerDisconnected: Όταν χάνεται η σύνδεση στον σέρβερ +disconnectedFromServer: Η σύνδεση στον σέρβερ έχει χαθεί +instanceDescription: Περιγραφή instance +maintainerEmail: Διεύθυνση email προγραμματιστή/στριας +yearX: '{year}' +enableGlobalTimeline: Ενεργοποίηση παγκόσμιου χρονολογίου +enableLocalTimeline: Ενεργοποίηση τοπικού χρονολογίου +enableRegistration: Ενεργοποίηση εγγραφής νέων μελών +invite: Πρόσκληση +disablingTimelinesInfo: Οι Διαχειρίστριες-ες και οι Συντονιστές-στριες θα έχουν πάντα + πρόσβαση σε όλα τα χρονολόγια, ακόμα κι αν δεν είναι ενεργοποιημένα. +inMb: Σε megabytes +iconUrl: Διεύθυνση URL εικονιδίου +bannerUrl: Διεύθυνση URL εικόνας Εξώφυλλου +pinnedUsers: Καρφιτσωμένα μέλη +hcaptchaSiteKey: Κλειδί του site +recaptcha: Προστασία reCAPTCHA +enableServiceworker: Ενεργοποίηση Ειδοποιήσεων Push για τον browser σας +recentlyDiscoveredUsers: Μέλη που ανακαλύφθηκαν πρόσφατα +twoStepAuthentication: Επαλήθευση δύο παραγόντων +securityKey: Κλειδί ασφάλειας +registerSecurityKey: Καταχωρήστε ένα κλειδί ασφάλειας +resetPassword: Επαναφορά κωδικού +newPasswordIs: Ο νέος κωδικός είναι "{password}" +uploadFolder: Προεπιλεγμένος φάκελος για ανέβασμα αρχείων +joinedGroups: Οι ομάδες που είστε μέλος +checking: Έλεγχος... +invitationCode: Κωδικός πρόσκλησης +normalPassword: Μέτριος κωδικός +weakPassword: Αδύναμος κωδικός +veryStrongPassword: Δυνατός κωδικός +signinWith: Συνδεθείτε με {x} +tapSecurityKey: Βάλτε το κλειδί ασφάλειας +signinFailed: Αδυναμία σύνδεσης. Το όνομα μέλους ή ο κωδικός είναι λάθος. +aboutX: Σχετικά με {x} +useOsNativeEmojis: Χρήση των Emoji του λειτουργικού συστήματος +uiLanguage: Γλώσσα διεπαφής +disableDrawer: Να μη χρησιμοποιούνται μενού σε στιλ συρταριού +noHistory: Δεν υπάρχει διαθέσιμο ιστορικό +joinOrCreateGroup: Λάβετε πρόσκληση για μία ομάδα ή δημιουργήστε τη δική σας. +docSource: Πηγή αυτού του εγγράφου +regenerate: Επαναδημιουργία +fontSize: Μέγεθος γραμματοσειράς +noFollowRequests: Δεν έχετε αιτήματα ακολούθησης σε αναμονή +dashboard: Ταμπλό +clientSettings: Ρυθμίσεις διεπαφής +numberOfDays: Αριθμός ημερών +hideThisNote: Απόκρυψη αυτής της δημοσίευσης +showFeaturedNotesInTimeline: Εμφάνιση προτεινόμενων δημοσιεύσεων στα χρονολόγια +objectStorage: Αποθήκευση Object Storage +useObjectStorage: Χρήση object storage +objectStorageBucket: '' +showFixedPostForm: Εμφάνιση της φόρμας δημοσίευσης στο πάνω μέρος των χρονολογίων +none: Κανένα +unableToProcess: Η επιχείρηση ήταν αδύνατο να ολοκληρωθεί +installedApps: Εφαρμογές με εξουσιοδότηση +state: Κατάσταση +installedDate: Εξουσιοδοτήθηκε στις +lastUsedDate: Χρησιμοποιήθηκε τελευταία φορά στις +scratchpadDescription: Το σημειωματάριο παρέχει ένα περιβάλλον για πειραματισμό με + AiScript. Σε αυτό μπορείτε να γράψετε, να εκτελέσετε, και να δοκιμάσετε τα αποτελέσματα + της αλληλεπίδρασης του AiScript με το Firefish. +scratchpad: Σημειωματάριο +output: Αποτέλεσμα +updateRemoteUser: Ανανέωση πληροφοριών απομακρυσμένου μέλους +disablePagesScript: Απενεργοποίηση του AiScript στις Σελίδες +removeAllFollowingDescription: Η εκτέλεση θα διακόψη την ακολούθηση όλων των μελών + από {host}. Παρακαλούμε εκτελέστε το αν το instance π.χ. δεν υπάρχει πια. +caption: Αυτόματη Περιγραφή +all: Όλα +subscribing: Εγγραφή σε συνδρομή +publishing: Δημοσιεύεται +notResponding: Δεν αποκρίνεται +keepOriginalUploadingDescription: Αποθηκεύει το πρωτότυπο αρχείο όπως είναι. Αν απενεργοποιηθεί, + μία έκδοση για προβολή στο ίντερνετ θα δημιουργηθεί κατά το ανέβασμα. +lookup: Αναζήτηση +lightThemes: Φωτεινά θέματα +darkThemes: Σκοτεινά θέματα +inputNewFolderName: Πληκτρολογήστε ένα νέο όνομα φακέλου +hasChildFilesOrFolders: Εφόσον αυτός ο φάκελος δεν είναι άδειος, δεν μπορεί να διαγραφεί. +enableRecommendedTimeline: Ενεργοποίηση χρονολογίου προτεινόμενων +driveCapacityPerLocalAccount: Μέγεθος Αποθηκευτικού Χώρου ανά τοπικό μέλος +driveCapacityPerRemoteAccount: Μέγεθος Αποθηκευτικού Χώρου ανά απομακρυσμένο μέλος +basicInfo: Βασικές πληροφορίες +pinnedClipId: Ταυτότητα (id) του κλιπ για καρφίτσωμα +hcaptcha: Προστασία hCaptcha +enableHcaptcha: Ενεργοποίηση hCaptcha +hcaptchaSecretKey: Μυστικό κλειδί +enableRecaptcha: Ενεργοποίηση reCAPTCHA +recaptchaSiteKey: Κλειδί του site +recaptchaSecretKey: Μυστικό κλειδί +antennaKeywordsDescription: Διαχωρίστε με κενά για συνθήκη ΚΑΙ ή με αλλαγή γραμμής + για συνθήκη Ή. +antennaUsersDescription: Παραθέστε ένα όνομα μέλους ανά γραμμή +antennaInstancesDescription: Παραθέστε ένα instance host ανά γραμμή +withReplies: Να περιλαμβάνονται οι απαντήσεις +withFiles: Να περιλαμβάνουν αρχεία +silence: Σιώπηση +silenceConfirm: Θέλετε σίγουρα να σιωπήσετε αυτό το μέλος; +unsilenceConfirm: Σίγουρα θέλετε να αναιρέσετε τη σιώπηση αυτού του μέλους; +securityKeyName: Όνομα κλειδιού +lastUsed: Τελευταία χρήση +unregister: Απεγγραφή +notFoundDescription: Δεν ήταν δυνατό να βρεθεί σελίδα που να ανταποκρίνεται σε αυτή + τη διεύθυνση URL. +signinHistory: Ιστορικό συνδέσεων +disableAnimatedMfm: Απενεργοποίηση του MFM με κίνηση +dayOverDayChanges: Αλλαγές την τελευταία ημέρα +promotion: Προμοταρισμένα +promote: Προμοτάρισμα +squareAvatars: Εμφάνιση τετραγωνισμένων άβαταρ +aboutFirefish: Σχετικά με το Firefish +maintainerName: Προγραμματιστής/στρια +uploadFromUrlRequested: Το ανέβασμα ζητήθηκε +themeForLightMode: Θέμα για τη Φωτεινή Λειτουργία +circularReferenceFolder: Ο φάκελος του προορισμού είναι υποφάκελος του φακέλου που + θέλετε να μετακινήσετε. +backgroundImageUrl: Διεύθυνση URL εικόνας φόντου +pinnedUsersDescription: Παραθέστε τα ονόματα μελών που θα είναι καρφιτσωμένα στην + καρτέλα "Εξερεύνηση" χωρίζοντάς τα με αλλαγή γραμμής. +openImageInNewTab: Άνοιγμα εικόνων σε νέα καρτέλα +weekOverWeekChanges: Αλλαγές την τελευταία εβδομάδα +exploreFediverse: Εξερευνήστε το Fediverse +unsilence: Αναίρεση σιώπησης +administrator: Διαχειριστής/στρια +passwordLessLogin: Σύνδεση χωρίς κωδικό +reduceUiAnimation: Ελάττωση των κινούμενων εικόνων +serviceworkerInfo: Πρέπει να είναι ενεργοποιημένο για ειδοποιήσεις push. +expandTweet: Διεύρυνση τουιτ +themeEditor: Επεξεργασία θεμάτων +deck: Ντεκ +undeck: Έξοδος από το Ντεκ +useFullReactionPicker: Χρήση επιλογέα αντιδράσεων πλήρους μεγέθους +tokenRequested: Παροχή πρόσβασης στον λογαριασμό +emailServer: Σέρβερ email +enableEmail: Ενεργοποίηση του email distribution +emailAddress: Διεύθυνση email +emailConfigInfo: Χρησιμοποιείται για επιβεβαίωση του email σας κατά την εγγραφή ή + αν ξεχάσετε τον κωδικό σας +regenerateLoginToken: Επαναδημιουργία token σύνδεσης +fileIdOrUrl: Ταυτότητα αρχείου (ID) ή διεύθυνση URL +typingUsers: '{users} πληκτρολογεί' +yourAccountSuspendedDescription: Αυτός ο λογαριασμός έχει αποβληθεί λόγω μη συμμόρφωσης + με τους κανόνες του σέρβερ ή κάτι παρόμοιο. Επικοινωνήστε με τον διαχειριστή/στρια + αν θα θέλατε έναν πιο λεπτομερή λόγο. Παρακαλούμε μη δημιουργήσετε νέο λογαριασμό. +inboxUrl: Διεύθυνση URL των Εισερχομένων +generateAccessToken: Δημιουργία token πρόσβασης +emptyToDisableSmtpAuth: Αφήστε το όνομα μέλους και τον κωδικό άδεια για να απενεργοποιήσετε + την επαλήθευση SMTP +instanceMute: Σιγάσεις instance +userSaysSomethingReason: '{name} είπε {reason}' +logs: Αρχεία καταγραφής +abuseReported: Η αναφορά σας στάλθηκε. Ευχαριστούμε πολύ. +reporter: Έκανε την αναφορά +reporteeOrigin: Καταγωγή αναφερόμενου λογαριασμού +reporterOrigin: Καταγωγή λογαριασμού που έκανε την αναφορά +forwardReport: Προώθηση της αναφοράς στο απομακρυσμένο instance +openInSideView: Άνοιγμα σε προβολή παράθεσης +delayed: Με καθυστέρηση +useGlobalSettingDesc: Αν ενεργοποιηθεί, οι ρυθμίσεις ειδοποιήσεων του λογαριασμού + σας θα χρησιμοποιηθούν. Αν απενεργοποιηθεί, μπορούν να γίνουν ανεξάρτητες ρυθμίσεις. +fillAbuseReportDescription: Παρακαλούμε συμπληρώστε λεπτομέρειες σχετικά με αυτή την + αναφορά. Αν πρόκειται για συγκεκριμένη δημοσίευση, παρακαλούμε συμπεριλάβετε τη + διεύθυνση URL της δημοσίευσης. +forwardReportIsAnonymous: Αντί για τον λογαριασμό σας, μία ανώνυμη αναφορά από λογαριασμό + του συστήματος θα εμφανιστεί στο απομακρυσμένο instance. diff --git a/locales/en-US.yml b/locales/en-US.yml new file mode 100644 index 0000000..e3cf890 --- /dev/null +++ b/locales/en-US.yml @@ -0,0 +1,2270 @@ +_lang_: "English" +headlineFirefish: "An open source, decentralized social media platform that's free + forever! 🚀" +introFirefish: "Welcome! Firefish is an open source, decentralized social media platform + that's free forever! 🚀" +monthAndDay: "{month}/{day}" +search: "Search" +searchPlaceholder: "Search Firefish" +notifications: "Notifications" +username: "Username" +password: "Password" +forgotPassword: "Forgot password" +fetchingAsApObject: "Fetching from the Fediverse" +ok: "OK" +gotIt: "Got it!" +cancel: "Cancel" +noThankYou: "No thank you" +enterUsername: "Enter username" +renotedBy: "Boosted by {user}" +noNotes: "No posts" +noNotifications: "No notifications" +instance: "Server" +settings: "Settings" +basicSettings: "Basic Settings" +otherSettings: "Other Settings" +openInWindow: "Open in window" +profile: "Profile" +timeline: "Timeline" +noAccountDescription: "This user has not written their bio yet." +login: "Sign In" +loggingIn: "Signing In" +logout: "Sign Out" +signup: "Sign Up" +uploading: "Uploading..." +save: "Save" +users: "Users" +addUser: "Add a user" +addInstance: "Add a server" +favorite: "Add to bookmarks" +favorites: "Bookmarks" +unfavorite: "Remove from bookmarks" +favorited: "Added to bookmarks." +alreadyFavorited: "Already added to bookmarks." +cantFavorite: "Couldn't add to bookmarks." +pin: "Pin to profile" +unpin: "Unpin from profile" +copyContent: "Copy contents" +copyLink: "Copy link" +delete: "Delete" +deleted: "Deleted" +deleteAndEdit: "Delete and edit" +deleteAndEditConfirm: "Are you sure you want to delete this post and edit it? You + will lose all reactions, boosts and replies to it." +editNote: "Edit post" +edited: "Edited at {date} {time}" +addToList: "Add to list" +sendMessage: "Send a message" +copyUsername: "Copy username" +searchUser: "Search for a user" +reply: "Reply" +replies: "Replies" +toReply: "Reply" +jumpToPrevious: "Jump to previous" +loadMore: "Load more" +showMore: "Show more" +newer: "newer" +older: "older" +showLess: "Close" +youGotNewFollower: "followed you" +receiveFollowRequest: "Follow request received" +followRequestAccepted: "Follow request accepted" +mention: "Mention" +mentions: "Mentions" +directNotes: "Direct messages" +cw: "Content warning" +importAndExport: "Import/Export Data" +import: "Import" +export: "Export" +files: "Files" +download: "Download" +driveFileDeleteConfirm: "Are you sure you want to delete the file \"{name}\"? It will + be removed from all posts that contain it as an attachment." +unfollowConfirm: "Are you sure that you want to unfollow {name}?" +exportRequested: "You've requested an export. This may take a while. It will be added + to your Drive once completed." +importRequested: "You've requested an import. This may take a while." +lists: "Lists" +listsDesc: "Lists let you create timelines with specified users. They can be accessed + from the timelines page." +noLists: "You don't have any lists" +note: "Post" +notes: "Posts" +toPost: "Post" +following: "Following" +followers: "Followers" +followsYou: "Follows you" +createList: "Create list" +manageLists: "Manage lists" +error: "Error" +somethingHappened: "An error has occurred" +retry: "Retry" +pageLoadError: "An error occurred loading the page." +pageLoadErrorDescription: "This is normally caused by network errors or the browser's + cache. Try clearing the cache and then try again after waiting a little while." +serverIsDead: "This server is not responding. Please wait for a while and try again." +youShouldUpgradeClient: "To view this page, please refresh to update your client." +enterListName: "Enter a name for the list" +privacy: "Privacy" +makeFollowManuallyApprove: "Follow requests require approval" +defaultNoteVisibility: "Default visibility" +follow: "Follow" +followRequest: "Follow Request" +followRequests: "Follow requests" +sentFollowRequests: "Sent follow requests" +unfollow: "Unfollow" +followRequestPending: "Follow request pending" +enterEmoji: "Enter an emoji" +renote: "Boost" +renotes: "Boosts" +unrenote: "Take back boost" +renoted: "Boosted." +cantRenote: "This post can't be boosted." +cantReRenote: "A boost can't be boosted." +quote: "Quote" +quotes: "Quotes" +toQuote: "Quote" +pinnedNote: "Pinned post" +pinned: "Pin to profile" +you: "You" +clickToShow: "Click to show" +sensitive: "NSFW" +add: "Add" +reaction: "Reaction" +reactions: "Reactions" +removeReaction: "Remove your reaction" +enableEmojiReactions: "Enable emoji reactions" +showEmojisInReactionNotifications: "Show emojis in reaction notifications" +reactionSetting: "Reactions to show in the reaction picker" +reactionSettingDescription2: "Drag to reorder, click to delete, press \"+\" to add." +rememberNoteVisibility: "Remember post visibility settings" +attachCancel: "Remove attachment" +markAsSensitive: "Mark as NSFW" +unmarkAsSensitive: "Unmark as NSFW" +clickToShowPatterns: "Click to show module patterns" +enterFileName: "Enter filename" +mute: "Mute" +unmute: "Unmute" +renoteMute: "Mute boosts in timelines" +renoteUnmute: "Unmute boosts in timelines" +replyMute: "Mute replies in timelines" +replyUnmute: "Unmute replies in timelines" +block: "Block" +unblock: "Unblock" +suspend: "Suspend" +unsuspend: "Unsuspend" +blockConfirm: "Are you sure that you want to block this account?" +unblockConfirm: "Are you sure that you want to unblock this account?" +suspendConfirm: "Are you sure that you want to suspend this account?" +unsuspendConfirm: "Are you sure that you want to unsuspend this account?" +selectList: "Select a list" +selectAntenna: "Select an antenna" +selectWidget: "Select a widget" +selectChannel: "Select a channel" +editWidgets: "Edit widgets" +editWidgetsExit: "Done" +customEmojis: "Custom Emoji" +emoji: "Emoji" +emojis: "Emoji" +emojiName: "Emoji name" +emojiUrl: "Emoji URL" +addEmoji: "Add" +settingGuide: "Recommended settings" +cacheRemoteFiles: "Cache remote files" +cacheRemoteFilesDescription: "When this setting is disabled, remote files are loaded + directly from the remote server. Disabling this will decrease storage usage, but + increase traffic, as thumbnails will not be generated." +markLocalFilesNsfwByDefault: "Mark all new local file as sensitive by default" +markLocalFilesNsfwByDefaultDescription: "Regardless of this setting, users can remove + the NSFW flag themselves. Existing files are unaffected." +flagAsBot: "Mark this account as automated" +flagAsBotDescription: "Enable this option if this account is controlled by a program. + If enabled, it will act as a flag for other developers to prevent endless interaction + chains with other automated accounts and adjust Firefish's internal systems to treat + this account as an automated account." +flagAsCat: "Are you a cat? 😺" +flagAsCatDescription: "You'll get cat ears and speak like a cat!" +flagSpeakAsCat: "Speak as a cat" +flagSpeakAsCatDescription: "Your posts will get nyanified when in cat mode" +flagShowTimelineReplies: "Show replies in timeline" +flagShowTimelineRepliesDescription: "Shows replies of users to posts of other users + in the timeline if turned on." +autoAcceptFollowed: "Automatically approve follow requests from users you're following" +addAccount: "Add account" +loginFailed: "Failed to sign in" +showOnRemote: "Open original page" +general: "General" +accountMoved: "User has moved to a new account:" +wallpaper: "Wallpaper" +setWallpaper: "Set wallpaper" +removeWallpaper: "Remove wallpaper" +searchWith: "Search: {q}" +youHaveNoLists: "You don't have any lists" +followConfirm: "Are you sure that you want to follow {name}?" +proxyAccount: "Proxy Account" +proxyAccountDescription: "A proxy account is an account that acts as a remote follower + for users under certain conditions. For example, when a user adds a remote user + to the list, the remote user's activity will not be delivered to the server if no + local user is following that user, so the proxy account will follow instead." +host: "Host" +selectUser: "Select a user" +selectInstance: "Select an server" +recipient: "Recipient(s)" +annotation: "Comments" +federation: "Federation" +instances: "Servers" +registeredAt: "Registered at" +latestRequestSentAt: "Last request sent" +latestRequestReceivedAt: "Last request received" +latestStatus: "Latest status" +storageUsage: "Storage usage" +charts: "Charts" +perHour: "Per Hour" +perDay: "Per Day" +stopActivityDelivery: "Stop sending activities" +blockThisInstance: "Block this server" +silenceThisInstance: "Silence this server" +operations: "Operations" +software: "Software" +version: "Version" +metadata: "Metadata" +monitor: "Monitor" +jobQueue: "Job Queue" +cpuAndMemory: "CPU and Memory" +network: "Network" +disk: "Disk" +instanceInfo: "Server Information" +statistics: "Statistics" +clearQueue: "Clear queue" +clearQueueConfirmTitle: "Are you sure that you want to clear the queue?" +clearQueueConfirmText: "Any undelivered posts remaining in the queue will not be federated. + Usually this operation is not needed." +clearCachedFiles: "Clear cache" +clearCachedFilesConfirm: "Are you sure that you want to delete all cached remote files?" +blockedInstances: "Blocked Servers" +blockedInstancesDescription: "List the hostnames of the servers that you want to block. + Listed servers will no longer be able to communicate with this servers." +silencedInstances: "Silenced Servers" +silencedInstancesDescription: "List the hostnames of the servers that you want to + silence. Accounts in the listed servers are treated as \"Silenced\", can only make + follow requests, and cannot mention local accounts if not followed. This will not + affect the blocked servers." +hiddenTags: "Hidden Hashtags" +hiddenTagsDescription: "List the hashtags (without the #) of the hashtags you wish + to hide from trending and explore. Hidden hashtags are still discoverable via other + means." +muteAndBlock: "Mutes and Blocks" +mutedUsers: "Muted users" +blockedUsers: "Blocked users" +noUsers: "There are no users" +noInstances: "There are no servers" +editProfile: "Edit profile" +noteDeleteConfirm: "Are you sure you want to delete this post?" +pinLimitExceeded: "You cannot pin any more posts" +intro: "Installation of Firefish has been finished! Please create an admin user." +done: "Done" +processing: "Processing" +preview: "Preview" +default: "Default" +defaultValueIs: "Default: {value}" +noCustomEmojis: "There are no emoji" +noJobs: "There are no jobs" +federating: "Federating" +blocked: "Blocked" +silenced: "Silenced" +suspended: "Suspended" +all: "All" +subscribing: "Subscribing" +publishing: "Publishing" +notResponding: "Not responding" +instanceFollowing: "Following on server" +instanceFollowers: "Followers of server" +instanceUsers: "Users of this server" +changePassword: "Change password" +security: "Security" +retypedNotMatch: "The inputs do not match." +currentPassword: "Current password" +newPassword: "New password" +newPasswordRetype: "Retype new password" +attachFile: "Attach files" +more: "More!" +featured: "Featured" +usernameOrUserId: "Username or user id" +noSuchUser: "User not found" +lookup: "Lookup" +announcements: "Announcements" +announcement: "Announcement" +imageUrl: "Image URL" +remove: "Delete" +removed: "Successfully deleted" +removeAreYouSure: "Are you sure that you want to remove \"{x}\"?" +deleteAreYouSure: "Are you sure that you want to delete \"{x}\"?" +resetAreYouSure: "Really reset?" +saved: "Saved" +messaging: "Chat" +upload: "Upload" +keepOriginalUploading: "Keep original image" +keepOriginalUploadingDescription: "Saves the originally uploaded image as-is. If turned + off, a version to display on the web will be generated on upload." +fromDrive: "From Drive" +fromUrl: "From URL" +uploadFromUrl: "Upload from a URL" +uploadFromUrlDescription: "URL of the file you want to upload" +uploadFromUrlRequested: "Upload requested" +uploadFromUrlMayTakeTime: "It may take some time until the upload is complete." +explore: "Explore" +messageRead: "Read" +noMoreHistory: "There is no further history" +startMessaging: "Start a new chat" +manageGroups: "Manage groups" +nUsersRead: "read by {n}" +agreeTo: "I agree to {0}" +tos: "Terms of Service" +start: "Begin" +home: "Home" +remoteUserCaution: "Information from remote users are incomplete." +activity: "Activity" +images: "Images" +birthday: "Birthday" +yearsOld: "{age} years old" +registeredDate: "Joined on" +location: "Location" +theme: "Themes" +themeForLightMode: "Theme to use in Light Mode" +themeForDarkMode: "Theme to use in Dark Mode" +light: "Light" +dark: "Dark" +lightThemes: "Light themes" +darkThemes: "Dark themes" +syncDeviceDarkMode: "Sync Dark Mode with your device settings" +drive: "Drive" +fileName: "Filename" +selectFile: "Select a file" +selectFiles: "Select files" +selectFolder: "Select a folder" +selectFolders: "Select folders" +renameFile: "Rename file" +folderName: "Folder name" +createFolder: "Create a folder" +renameFolder: "Rename this folder" +deleteFolder: "Delete this folder" +addFile: "Add a file" +emptyDrive: "Your Drive is empty" +emptyFolder: "This folder is empty" +unableToDelete: "Unable to delete" +inputNewFileName: "Enter a new filename" +inputNewDescription: "Enter new description" +inputNewFolderName: "Enter a new folder name" +circularReferenceFolder: "The destination folder is a subfolder of the folder you + wish to move." +hasChildFilesOrFolders: "Since this folder is not empty, it cannot be deleted." +copyUrl: "Copy URL" +rename: "Rename" +avatar: "Avatar" +banner: "Banner" +nsfw: "NSFW" +whenServerDisconnected: "When losing connection to the server" +disconnectedFromServer: "Connection to server has been lost" +reload: "Refresh" +doNothing: "Ignore" +reloadConfirm: "Would you like to refresh the timeline?" +watch: "Watch" +unwatch: "Stop watching" +accept: "Accept" +reject: "Reject" +normal: "Normal" +instanceName: "Server name" +instanceDescription: "Server description" +maintainerName: "Maintainer" +maintainerEmail: "Maintainer email" +tosUrl: "Terms of Service URL" +thisYear: "Year" +thisMonth: "Month" +today: "Today" +dayX: "{day}" +monthX: "{month}" +yearX: "{year}" +pages: "Pages" +enableLocalTimeline: "Enable local timeline" +enableGlobalTimeline: "Enable global timeline" +enableRecommendedTimeline: "Enable recommended timeline" +disablingTimelinesInfo: "Adminstrators and Moderators will always have access to all + timelines, even if they are not enabled." +registration: "Register" +enableRegistration: "Enable new user registration" +invite: "Invite" +driveCapacityPerLocalAccount: "Drive capacity per local user" +driveCapacityPerRemoteAccount: "Drive capacity per remote user" +antennaLimit: "The maximum number of antennas that each user can create" +inMb: "In megabytes" +iconUrl: "Icon URL" +bannerUrl: "Banner image URL" +backgroundImageUrl: "Background image URL" +basicInfo: "Basic info" +pinnedUsers: "Pinned users" +pinnedUsersDescription: "List usernames separated by line breaks to be pinned in the + \"Explore\" tab." +pinnedPages: "Pinned Pages" +pinnedPagesDescription: "Enter the paths of the Pages you want to pin to the top page + of this server, separated by line breaks." +pinnedClipId: "ID of the clip to pin" +pinnedNotes: "Pinned posts" +hcaptcha: "hCaptcha" +enableHcaptcha: "Enable hCaptcha" +hcaptchaSiteKey: "Site key" +hcaptchaSecretKey: "Secret key" +recaptcha: "reCAPTCHA" +enableRecaptcha: "Enable reCAPTCHA" +recaptchaSiteKey: "Site key" +recaptchaSecretKey: "Secret key" +avoidMultiCaptchaConfirm: "Using multiple Captcha systems may cause interference between + them. Would you like to disable the other Captcha systems currently active? If you + would like them to stay enabled, press cancel." +antennas: "Antennas" +antennasDesc: "Antennas display new posts matching the criteria you set!\n They can + be accessed from the timelines page." +manageAntennas: "Manage Antennas" +name: "Name" +antennaSource: "Antenna source" +antennaKeywords: "Keywords to listen to" +antennaExcludeKeywords: "Keywords to exclude" +antennaKeywordsDescription: "Separate with spaces for an AND condition or with line + breaks for an OR condition." +notifyAntenna: "Notify about new posts" +withFileAntenna: "Only posts with files" +enableServiceworker: "Enable Push-Notifications for your Browser" +antennaUsersDescription: "List one username per line" +antennaInstancesDescription: "List one server host per line" +caseSensitive: "Case sensitive" +withReplies: "Include replies" +connectedTo: "Following account(s) are connected" +notesAndReplies: "Posts and replies" +withFiles: "Including files" +attachedToNotes: "Posts with this file" +showAttachedNotes: "Show posts with this file" +silence: "Silence" +silenceConfirm: "Are you sure that you want to silence this user?" +unsilence: "Undo silencing" +unsilenceConfirm: "Are you sure that you want to undo the silencing of this user?" +popularUsers: "Popular users" +recentlyUpdatedUsers: "Recently active users" +recentlyRegisteredUsers: "Newly joined users" +recentlyDiscoveredUsers: "Newly discovered users" +exploreUsersCount: "There are {count} users" +exploreFediverse: "Explore the Fediverse" +popularTags: "Popular tags" +userList: "Lists" +about: "About" +aboutFirefish: "About Firefish" +administrator: "Administrator" +token: "Token" +twoStepAuthentication: "Two-factor authentication" +moderator: "Moderator" +moderation: "Moderation" +nUsersMentioned: "Mentioned by {n} users" +securityKey: "Security key" +securityKeyName: "Key name" +registerSecurityKey: "Register a security key" +lastUsed: "Last used" +unregister: "Unregister" +passwordLessLogin: "Password-less sign in" +resetPassword: "Reset password" +newPasswordIs: "The new password is \"{password}\"" +reduceUiAnimation: "Reduce UI animations" +share: "Share" +notFound: "Not found" +notFoundDescription: "No page corresponding to this URL could be found." +uploadFolder: "Default folder for uploads" +cacheClear: "Clear cache" +markAsReadAllNotifications: "Mark all notifications as read" +markAsReadAllUnreadNotes: "Mark all posts as read" +markAsReadAllTalkMessages: "Mark all messages as read" +help: "Help" +inputMessageHere: "Enter message here" +close: "Close" +group: "Group" +groups: "Groups" +createGroup: "Create a group" +ownedGroups: "Owned Groups" +joinedGroups: "Joined groups" +invites: "Invites" +groupName: "Group name" +members: "Members" +transfer: "Transfer" +messagingWithUser: "Private chat" +messagingWithGroup: "Group chat" +title: "Title" +text: "Text" +enable: "Enable" +next: "Next" +retype: "Enter again" +noteOf: "Post by {user}" +inviteToGroup: "Invite to group" +quoteAttached: "Quote" +quoteQuestion: "Append as quote?" +noMessagesYet: "No messages yet" +newMessageExists: "There are new messages" +onlyOneFileCanBeAttached: "You can only attach one file to a message" +signinRequired: "Please register or sign in before continuing" +invitations: "Invites" +invitationCode: "Invitation code" +checking: "Checking..." +available: "Available" +unavailable: "Not available" +usernameInvalidFormat: "You can use upper- and lowercase letters, numbers, and underscores." +tooShort: "Too short" +tooLong: "Too long" +weakPassword: "Weak password" +normalPassword: "Medium password" +strongPassword: "Good password" +veryStrongPassword: "Great password" +passwordMatched: "Matches" +passwordNotMatched: "Does not match" +signinWith: "Sign in with {x}" +signinFailed: "Unable to sign in. The entered username or password is incorrect." +tapSecurityKey: "Tap your security key" +or: "Or" +language: "Language" +uiLanguage: "User interface language" +groupInvited: "You've been invited to a group" +aboutX: "About {x}" +useOsNativeEmojis: "Use OS native Emoji" +disableDrawer: "Don't use drawer-style menus" +youHaveNoGroups: "You have no groups" +joinOrCreateGroup: "Get invited to a group or create your own." +noHistory: "No history available" +signinHistory: "Sign in history" +disableAnimatedMfm: "Disable MFM with animation" +doing: "Processing..." +category: "Category" +tags: "Tags" +docSource: "Source of this document" +createAccount: "Create account" +existingAccount: "Existing account" +regenerate: "Regenerate" +fontSize: "Font size" +noFollowRequests: "You don't have any pending follow requests" +noSentFollowRequests: "You haven't sent any follow requests" +openImageInNewTab: "Open images in new tab" +dashboard: "Dashboard" +local: "Local" +remote: "Remote" +total: "Total" +weekOverWeekChanges: "Changes to last week" +dayOverDayChanges: "Changes to yesterday" +appearance: "Appearance" +accessibility: "Accessibility" +clientSettings: "Client Settings" +accountSettings: "Account Settings" +promotion: "Promoted" +promote: "Promote" +numberOfDays: "Number of days" +hideThisNote: "Hide this post" +showFeaturedNotesInTimeline: "Show featured posts in timelines" +objectStorage: "Object Storage" +useObjectStorage: "Use object storage" +objectStorageBaseUrl: "Base URL" +objectStorageBaseUrlDesc: "The URL used as reference. Specify the URL of your CDN + or Proxy if you are using either.\nFor S3 use 'https://.s3.amazonaws.com' + and for GCS or equivalent services use 'https://storage.googleapis.com/', + etc." +objectStorageBucket: "Bucket" +objectStorageBucketDesc: "Please specify the bucket name used at your provider." +objectStoragePrefix: "Prefix" +objectStoragePrefixDesc: "Files will be stored under directories with this prefix." +objectStorageEndpoint: "Endpoint" +objectStorageEndpointDesc: "Leave this empty if you are using AWS S3, otherwise specify + the endpoint as '' or ':', depending on the service you are using." +objectStorageRegion: "Region" +objectStorageRegionDesc: "Specify a region like 'xx-east-1'. If your service does + not distinguish between regions, leave this blank or enter 'us-east-1'." +objectStorageUseSSL: "Use SSL" +objectStorageUseSSLDesc: "Turn this off if you are not going to use HTTPS for API + connections" +objectStorageUseProxy: "Connect over Proxy" +objectStorageUseProxyDesc: "Turn this off if you are not going to use a Proxy for + API connections" +objectStorageSetPublicRead: "Set \"public-read\" on upload" +objectStorageS3ForcePathStyle: "Use path-based endpoint URLs" +objectStorageS3ForcePathStyleDesc: "Turn this on to construct endpoint URLs in the + format of 's3.amazonaws.com//' over '.s3.amazonaws.com'." +serverLogs: "Server logs" +deleteAll: "Delete all" +showFixedPostForm: "Display the posting form at the top of the timeline" +newNoteRecived: "There are new posts" +sounds: "Sounds" +listen: "Listen" +none: "None" +showInPage: "Show in page" +popout: "Pop-out" +volume: "Volume" +masterVolume: "Master volume" +details: "Details" +chooseEmoji: "Select an emoji" +unableToProcess: "The operation could not be completed" +recentUsed: "Recently used" +install: "Install" +uninstall: "Uninstall" +installedApps: "Authorized Applications" +nothing: "There's nothing to see here" +installedDate: "Authorized at" +lastUsedDate: "Last used at" +state: "State" +sort: "Sort" +ascendingOrder: "Ascending" +descendingOrder: "Descending" +scratchpad: "Scratchpad" +scratchpadDescription: "The scratchpad provides an environment for AiScript experiments. + You can write, execute, and check the results of it interacting with Firefish in + it." +output: "Output" +script: "Script" +disablePagesScript: "Disable AiScript on Pages" +expandOnNoteClick: "Open post on click" +expandOnNoteClickDesc: "If disabled, you can still open posts in the right-click menu + or by clicking the timestamp." +updateRemoteUser: "Update remote user information" +deleteAllFiles: "Delete all files" +deleteAllFilesConfirm: "Are you sure that you want to delete all files?" +removeAllFollowing: "Unfollow all followed users" +removeAllFollowingDescription: "Executing this unfollows all accounts from {host}. + Please run this if the server e.g. no longer exists." +userSuspended: "This user has been suspended." +userSilenced: "This user is being silenced." +yourAccountSuspendedTitle: "This account is suspended" +yourAccountSuspendedDescription: "This account has been suspended due to breaking + the server's terms of services or similar. Contact the administrator if you would + like to know a more detailed reason. Please do not create a new account." +menu: "Menu" +divider: "Divider" +addItem: "Add Item" +relays: "Relays" +addRelay: "Add Relay" +inboxUrl: "Inbox URL" +addedRelays: "Added Relays" +serviceworkerInfo: "Must be enabled for push notifications." +deletedNote: "Deleted post" +invisibleNote: "Invisible post" +enableInfiniteScroll: "Automatically load more" +visibility: "Visiblility" +cannotEditVisibility: "You can't edit the visibility" +poll: "Poll" +useCw: "Hide content" +enablePlayer: "Open video player" +disablePlayer: "Close video player" +expandTweet: "Expand tweet" +themeEditor: "Theme editor" +description: "Description" +describeFile: "Add description" +enterFileDescription: "Enter description" +author: "Author" +leaveConfirm: "There are unsaved changes. Do you want to discard them?" +manage: "Management" +plugins: "Plugins" +preferencesBackups: "Preference backups" +deck: "Deck" +undeck: "Leave Deck" +useBlurEffectForModal: "Use blur effect for modals" +useFullReactionPicker: "Use full-size reaction picker" +width: "Width" +height: "Height" +xl: "XL" +large: "Big" +medium: "Medium" +small: "Small" +generateAccessToken: "Generate access token" +permission: "Permissions" +enableAll: "Enable all" +disableAll: "Disable all" +tokenRequested: "Grant access to account" +pluginTokenRequestedDescription: "This plugin will be able to use the permissions + set here." +notificationType: "Notification type" +edit: "Edit" +toEdit: "Edit" +emailServer: "Email server" +enableEmail: "Enable email distribution" +emailConfigInfo: "Used to confirm your email during sign-up or if you forget your + password" +email: "Email" +emailAddress: "Email address" +smtpConfig: "SMTP Server Configuration" +smtpHost: "Host" +smtpPort: "Port" +smtpUser: "Username" +smtpPass: "Password" +emptyToDisableSmtpAuth: "Leave username and password empty to disable SMTP verification" +smtpSecure: "Use implicit SSL/TLS for SMTP connections" +smtpSecureInfo: "Turn this off when using STARTTLS" +testEmail: "Test email delivery" +wordMute: "Word and language mutes" +regexpError: "Regular Expression error" +regexpErrorDescription: "An error occurred in the regular expression on line {line} + of your {tab} word mutes:" +instanceMute: "Server Mutes" +userSaysSomething: "{name} said something" +userSaysSomethingReason: "{name} said {reason}" +userSaysSomethingReasonReply: "{name} replied to a post containing {reason}" +userSaysSomethingReasonRenote: "{name} boosted a post containing {reason}" +userSaysSomethingReasonQuote: "{name} quoted a post containing {reason}" +makeActive: "Activate" +display: "Display" +copy: "Copy" +metrics: "Metrics" +overview: "Overview" +media: "Media" +logs: "Logs" +delayed: "Delayed" +database: "Database" +channel: "Channels" +channelFederationWarn: "Channels do not yet federate to other servers" +create: "Create" +notificationSetting: "Notification settings" +notificationSettingDesc: "Select the types of notification to display." +useGlobalSetting: "Use global settings" +useGlobalSettingDesc: "If turned on, your account's notification settings will be + used. If turned off, individual configurations can be made." +other: "Other" +regenerateLoginToken: "Regenerate sign in token" +regenerateLoginTokenDescription: "Regenerates the token used internally during sign + in. Normally this action is not necessary. If regenerated, all devices will be logged + out." +setMultipleBySeparatingWithSpace: "Separate multiple entries with spaces." +fileIdOrUrl: "File ID or URL" +behavior: "Behavior" +sample: "Sample" +abuseReports: "Reports" +reportAbuse: "Report" +reportAbuseOf: "Report {name}" +fillAbuseReportDescription: "Please fill in details regarding this report. If it is + about a specific post, please include its URL." +abuseReported: "Your report has been sent. Thank you very much." +reporter: "Reporter" +reporteeOrigin: "Reportee Origin" +reporterOrigin: "Reporter Origin" +forwardReport: "Forward report to remote server" +forwardReportIsAnonymous: "Instead of your account, an anonymous system account will + be displayed as reporter at the remote server." +send: "Send" +abuseMarkAsResolved: "Mark report as resolved" +openInNewTab: "Open in new tab" +openInSideView: "Open in side view" +defaultNavigationBehaviour: "Default navigation behavior" +editTheseSettingsMayBreakAccount: "Editing these settings may damage your account." +instanceTicker: "Server information of posts" +waitingFor: "Waiting for {x}" +random: "Random" +system: "System" +switchUi: "Layout" +desktop: "Desktop" +clip: "Clip" +clips: "Clips" +createNew: "Create new" +optional: "Optional" +createNewClip: "Create new clip" +unclip: "Unclip" +confirmToUnclipAlreadyClippedNote: "This post is already part of the \"{name}\" clip. + Do you want to remove it from this clip instead?" +public: "Public" +i18nInfo: "Firefish is being translated into various languages by volunteers. You + can help at {link}." +i18nServerInfo: "New clients will be in {language} by default." +i18nServerChange: "Use {language} instead." +i18nServerSet: "Use {language} for new clients." +manageAccessTokens: "Manage access tokens" +accountInfo: "Account Info" +notesCount: "Number of posts" +repliesCount: "Number of replies sent" +renotesCount: "Number of boosts sent" +repliedCount: "Number of replies received" +renotedCount: "Number of boosts received" +followingCount: "Number of followed accounts" +followersCount: "Number of followers" +sentReactionsCount: "Number of sent reactions" +receivedReactionsCount: "Number of received reactions" +pollVotesCount: "Number of sent poll votes" +pollVotedCount: "Number of received poll votes" +yes: "Yes" +no: "No" +driveFilesCount: "Number of Drive files" +driveUsage: "Drive space usage" +noCrawle: "Reject crawler indexing" +noCrawleDescription: "Ask external search engines to not index your content." +lockedAccountInfo: "Unless you set your post visiblity to \"Followers only\", your + posts will be visible to anyone, even if you require followers to be manually approved." +alwaysMarkSensitive: "Mark as NSFW by default" +loadRawImages: "Load original images instead of showing thumbnails" +disableShowingAnimatedImages: "Don't play animated images" +verificationEmailSent: "A verification email has been sent. Please follow the included + link to complete verification." +notSet: "Not set" +emailVerified: "Email has been verified" +noteFavoritesCount: "Number of bookmarked posts" +pageLikesCount: "Number of liked Pages" +pageLikedCount: "Number of received Page likes" +contact: "Contact" +useSystemFont: "Use the system's default font" +clipsDesc: "Clips are like share-able categorized bookmarks. You can create clips + from the menu of individual posts." +experimentalFeatures: "Experimental features" +developer: "Developer" +makeExplorable: "Make account visible in \"Explore\"" +makeExplorableDescription: "If you turn this off, your account will not show up in + the \"Explore\" section." +showGapBetweenNotesInTimeline: "Show a gap between posts on the timeline" +duplicate: "Duplicate" +left: "Left" +center: "Center" +wide: "Wide" +narrow: "Narrow" +reloadToApplySetting: "This setting will only apply after a page reload. Reload now?" +needReloadToApply: "A reload is required for this to be reflected." +showTitlebar: "Show title bar" +clearCache: "Clear cache" +onlineUsersCount: "{n} users are online" +nUsers: "{n} Users" +nNotes: "{n} Posts" +sendErrorReports: "Send error reports" +sendErrorReportsDescription: "When turned on, detailed error information will be shared + with Firefish when a problem occurs, helping to improve the quality of Firefish.\n + This will include information such the version of your OS, what browser you're using, + your activity in Firefish, etc." +myTheme: "My theme" +backgroundColor: "Background color" +accentColor: "Accent color" +textColor: "Text color" +saveAs: "Save as..." +advanced: "Advanced" +value: "Value" +createdAt: "Created at" +updatedAt: "Updated at" +saveConfirm: "Save changes?" +deleteConfirm: "Really delete?" +invalidValue: "Invalid value." +registry: "Registry" +closeAccount: "Close account" +currentVersion: "Current version" +latestVersion: "Newest version" +youAreRunningUpToDateClient: "You are using the newest version of your client." +newVersionOfClientAvailable: "There is a newer version of your client available." +usageAmount: "Usage" +capacity: "Capacity" +inUse: "Used" +editCode: "Edit code" +apply: "Apply" +receiveAnnouncementFromInstance: "Receive notifications from this server" +emailNotification: "Email notifications" +publish: "Publish" +inChannelSearch: "Search in channel" +useReactionPickerForContextMenu: "Open reaction picker on right-click" +typingUsers: "{users} is typing" +jumpToSpecifiedDate: "Jump to specific date" +showingPastTimeline: "Currently displaying an old timeline" +clear: "Clear" +markAllAsRead: "Mark all as read" +goBack: "Back" +unlikeConfirm: "Really remove your like?" +fullView: "Full view" +quitFullView: "Exit full view" +addDescription: "Add description" +userPagePinTip: "You can display posts here by selecting \"Pin to profile\" from the + menu of individual posts." +notSpecifiedMentionWarning: "This post contains mentions of users not included as + recipients" +info: "About" +userInfo: "User information" +unknown: "Unknown" +onlineStatus: "Online status" +hideOnlineStatus: "Hide online status" +hideOnlineStatusDescription: "Hiding your online status reduces the convenience of + some features such as the search." +online: "Online" +active: "Active" +offline: "Offline" +notRecommended: "Not recommended" +botProtection: "Bot Protection" +instanceBlocking: "Federation Management" +selectAccount: "Select account" +switchAccount: "Switch account" +enabled: "Enabled" +disabled: "Disabled" +quickAction: "Quick actions" +user: "User" +administration: "Management" +accounts: "Accounts" +switch: "Switch" +noMaintainerInformationWarning: "Maintainer information is not configured." +noBotProtectionWarning: "Bot protection is not configured." +configure: "Configure" +postToGallery: "Create new gallery post" +gallery: "Gallery" +recentPosts: "Recent pages" +popularPosts: "Popular pages" +shareWithNote: "Share with post" +ads: "Community banners" +expiration: "Deadline" +memo: "Memo" +priority: "Priority" +high: "High" +middle: "Medium" +low: "Low" +emailNotConfiguredWarning: "Email address not set." +ratio: "Ratio" +secureMode: "Secure Mode (Authorized Fetch)" +instanceSecurity: "Server Security" +secureModeInfo: "When requesting from other servers, do not send back without proof." +privateMode: "Private Mode" +privateModeInfo: "When enabled, only allowlisted servers can federate with your server. + All posts will be hidden from the public." +allowedInstances: "Allowlisted Servers" +allowedInstancesDescription: "Hosts of servers to be allowlisted for federation, each + separated by a new line (only applies in private mode)." +previewNoteText: "Show preview" +customCss: "Custom CSS" +customCssWarn: "This setting should only be used if you know what it does. Entering + improper values may cause the client to stop functioning normally." +global: "Global" +recommended: "Recommended" +squareAvatars: "Display squared avatars for non-cat accounts" +squareCatAvatars: "Display squared avatars for cat accounts" +seperateRenoteQuote: "Separate boost and quote buttons" +sent: "Sent" +received: "Received" +searchResult: "Search results" +hashtags: "Hashtags" +troubleshooting: "Troubleshooting" +useBlurEffect: "Use blur effects in the UI" +learnMore: "Learn more" +misskeyUpdated: "Firefish has been updated!" +whatIsNew: "Show changes" +translate: "Translate" +translatedFrom: "Translated from {x}" +accountDeletionInProgress: "Account deletion is currently in progress" +usernameInfo: "A name that identifies your account from others on this server. You + can use the alphabet (a~z, A~Z), digits (0~9) or underscores (_). Usernames cannot + be changed later." +aiChanMode: "Ai-chan in Classic UI" +keepCw: "Keep content warnings" +pubSub: "Pub/Sub Accounts" +lastCommunication: "Last communication" +resolved: "Resolved" +unresolved: "Unresolved" +breakFollow: "Remove follower" +breakFollowConfirm: "Are you sure want to remove follower?" +itsOn: "Enabled" +itsOff: "Disabled" +emailRequiredForSignup: "Require email address for sign-up" +unread: "Unread" +filter: "Filter" +controlPanel: "Control Panel" +manageAccounts: "Manage Accounts" +makeReactionsPublic: "Set reaction history to public" +makeReactionsPublicDescription: "This will make the list of all your past reactions + publicly visible." +classic: "Centered" +muteThread: "Mute thread" +unmuteThread: "Unmute thread" +ffVisibility: "Follows/Followers Visibility" +ffVisibilityDescription: "Allows you to configure who can see who you follow and who + follows you." +continueThread: "Continue thread" +deleteAccountConfirm: "This will irreversibly delete this account. Proceed?" +incorrectPassword: "Incorrect password." +voteConfirm: "Confirm your vote for \"{choice}\"?" +hide: "Hide" +alt: "ALT" +leaveGroup: "Leave group" +leaveGroupConfirm: "Are you sure you want to leave \"{name}\"?" +useDrawerReactionPickerForMobile: "Display reaction picker as drawer on mobile" +welcomeBackWithName: "Welcome back, {name}" +clickToFinishEmailVerification: "Please click [{ok}] to complete email verification." +overridedDeviceKind: "Device type" +smartphone: "Smartphone" +tablet: "Tablet" +auto: "Auto" +themeColor: "Server Ticker Color" +size: "Size" +numberOfColumn: "Number of columns" +instanceDefaultLightTheme: "Server-wide default light theme" +instanceDefaultDarkTheme: "Server-wide default dark theme" +instanceDefaultThemeDescription: "Enter the theme code in object format." +mutePeriod: "Mute duration" +indefinitely: "Permanently" +tenMinutes: "10 minutes" +oneHour: "One hour" +oneDay: "One day" +oneWeek: "One week" +reflectMayTakeTime: "It may take some time for this to be reflected." +failedToFetchAccountInformation: "Could not fetch account information" +rateLimitExceeded: "Rate limit exceeded" +cropImage: "Crop image" +cropImageAsk: "Do you want to crop this image?" +file: "File" +image: "Image" +video: "Video" +audio: "Audio" +recentNHours: "Last {n} hours" +recentNDays: "Last {n} days" +noEmailServerWarning: "Email server not configured." +thereIsUnresolvedAbuseReportWarning: "There are unsolved reports." +check: "Check" +driveCapOverrideLabel: "Change the drive capacity for this user" +driveCapOverrideCaption: "Reset the capacity to default by inputting a value of 0 + or lower." +requireAdminForView: "You must sign in with an administrator account to view this." +isSystemAccount: "This account is created and automatically operated by the system. + Please do not moderate, edit, delete, or otherwise tamper with this account, or + it may break your server." +typeToConfirm: "Please enter {x} to confirm" +useThisAccountConfirm: "Do you want to continue with this account?" +inputAccountId: "Please input your account (e.g., @firefish@info.firefish.dev)" +deleteAccount: "Delete account" +document: "Documentation" +numberOfPageCache: "Number of cached pages" +numberOfPageCacheDescription: "Increasing this number will improve convenience for + users but cause more server load as well as more memory to be used." +logoutConfirm: "Really sign out?" +lastActiveDate: "Last used at" +statusbar: "Status bar" +pleaseSelect: "Select an option" +reverse: "Reverse" +colored: "Colored" +refreshInterval: "Update interval " +label: "Label" +type: "Type" +speed: "Speed" +slow: "Slow" +fast: "Fast" +sensitiveMediaDetection: "Detection of NSFW media" +localOnly: "Local only" +remoteOnly: "Remote only" +failedToUpload: "Upload failed" +cannotUploadBecauseInappropriate: "This file could not be uploaded because parts of + it have been detected as potentially NSFW." +cannotUploadBecauseNoFreeSpace: "Upload failed due to lack of Drive capacity." +cannotUploadBecauseExceedsFileSizeLimit: "This file could not be uploaded because + it exceeds the maximum allowed size." +beta: "Beta" +enableAutoSensitive: "Automatic NSFW-Marking" +enableAutoSensitiveDescription: "Allows automatic detection and marking of NSFW media + through Machine Learning where possible. Even if this option is disabled, it may + be enabled server-wide." +activeEmailValidationDescription: "Enables stricter validation of email addresses, + which includes checking for disposable addresses and by whether it can actually + be communicated with. When unchecked, only the format of the email is validated." +navbar: "Navigation bar" +shuffle: "Shuffle" +account: "Account" +move: "Move" +pushNotification: "Push notifications" +subscribePushNotification: "Enable push notifications" +unsubscribePushNotification: "Disable push notifications" +pushNotificationAlreadySubscribed: "Push notifications are already enabled" +pushNotificationNotSupported: "Your browser or server does not support push notifications" +sendPushNotificationReadMessage: "Delete push notifications once the relevant notifications + or messages have been read" +sendPushNotificationReadMessageCaption: "A notification containing the text \"{emptyPushNotificationMessage}\"\ + \ will be displayed for a short time. This may increase the battery usage of your + device, if applicable." +showAds: "Show community banners" +enterSendsMessage: "Press Return in Messaging to send message (off is Ctrl + Return)" +adminCustomCssWarn: "This setting should only be used if you know what it does. Entering + improper values may cause EVERYONE'S clients to stop functioning normally. Please + ensure your CSS works properly by testing it in your user settings." +customMOTD: "Custom MOTD (splash screen messages)" +customMOTDDescription: "Custom messages for the MOTD (splash screen) separated by + line breaks to be shown randomly every time a user loads/reloads the page." +customSplashIcons: "Custom splash screen icons (urls)" +customSplashIconsDescription: "URLs for custom splash screen icons separated by line + breaks to be shown randomly every time a user loads/reloads the page. Please make + sure the images are on a static URL, preferably all resized to 192x192." +showUpdates: "Show a popup when Firefish updates" +recommendedInstances: "Recommended servers" +recommendedInstancesDescription: "Recommended servers separated by line breaks to + appear in the recommended timeline." +caption: "Auto description" +splash: "Splash Screen" +updateAvailable: "There might be an update available!" +swipeOnMobile: "Allow swiping between pages" +swipeOnDesktop: "Allow mobile-style swiping on desktop" +logoImageUrl: "Logo image URL" +showAdminUpdates: "Indicate a new Firefish version is avaliable (admin only)" +replayTutorial: "Replay tutorial" +migration: "Migration" +moveTo: "Move current account to new account" +moveToLabel: "Account you're moving to:" +moveAccount: "Move account!" +moveAccountDescription: "This process is irreversible. Make sure you've set up an + alias for this account on your new account before moving. Please enter the tag of + the account formatted like @person@server.com" +moveFrom: "Move to this account from an older account" +moveFromLabel: "Account you're moving from:" +moveFromDescription: "This will set an alias of your old account so that you can move + from that account to this current one. Do this BEFORE moving from your older account. + Please enter the tag of the account formatted like @person@server.com" +migrationConfirm: "Are you absolutely sure you want to migrate your account to {account}? + Once you do this, you won't be able to reverse it, and you won't be able to use + your account normally again.\nAlso, please ensure that you've set this current account + as the account you're moving from." +defaultReaction: "Default emoji reaction for outgoing and incoming posts" +license: "License" +customKaTeXMacro: "Custom KaTeX macros" +customKaTeXMacroDescription: "Set up macros to write mathematical expressions easily! + The notation conforms to the LaTeX command definitions and is written as \\newcommand{\\ + name}{content} or \\newcommand{\\name}[number of arguments]{content}. For example, + \\newcommand{\\add}[2]{#1 + #2} will expand \\add{3}{foo} to 3 + foo. The curly + brackets surrounding the macro name can be changed to round or square brackets. + This affects the brackets used for arguments. One (and only one) macro can be defined + per line, and you can't break the line in the middle of the definition. Invalid + lines are simply ignored. Only simple string substitution functions are supported; + advanced syntax, such as conditional branching, cannot be used here." +enableCustomKaTeXMacro: "Enable custom KaTeX macros" +noteId: "Post ID" +signupsDisabled: "Signups on this server are currently disabled. If you have an invitation + code for this server, please enter it below." +apps: "Apps" +sendModMail: "Send Moderation Notice" +moderationNote: "Moderation Note" +ipFirstAcknowledged: "The date of the first acquisition of the IP address" +driveCapacityOverride: "Drive Capacity Override" +preventAiLearning: "Prevent AI bot scraping" +preventAiLearningDescription: "Request third-party AI language models not to study + content you upload, such as posts and images." +noGraze: "Please disable the \"Graze for Mastodon\" browser extension, as it interferes + with Firefish." +silencedWarning: "This page is showing because these users are from servers your admin + silenced, so they may potentially be spam." +isBot: "This account is automated" +isLocked: "This account has follow approvals" +isModerator: "Moderator" +isAdmin: "Administrator" +isPatron: "Firefish Patron" +reactionPickerSkinTone: "Preferred emoji skin tone" +enableServerMachineStats: "Enable server hardware statistics" +enableIdenticonGeneration: "Enable Identicon generation" +showPopup: "Notify users with popup" +showWithSparkles: "Show with sparkles" +youHaveUnreadAnnouncements: "You have unread announcements" +donationLink: "Link to donation page" +neverShow: "Don't show again" +remindMeLater: "Maybe later" +removeQuote: "Remove quote" +removeRecipient: "Remove recipient" +removeMember: "Remove member" +verifiedLink: "Verified link" +origin: "Origin" +delete2fa: "Disable 2FA" +deletePasskeys: "Delete passkeys" +delete2faConfirm: "This will irreversibly delete 2FA on this account. Proceed?" +deletePasskeysConfirm: "This will irreversibly delete all passkeys and security keys + on this account. Proceed?" +inputNotMatch: "Input does not match" +addRe: "Add \"re:\" at the beginning of comment in reply to a post with a content + warning" +confirm: "Confirm" +importZip: "Import ZIP" +exportZip: "Export ZIP" +getQrCode: "Show QR code" +remoteFollow: "Remote follow" +copyRemoteFollowUrl: "Copy remote follow URL" +indexable: "Indexable" +indexableDescription: "Allow built-in search to show your public posts" +languageForTranslation: "Post translation language" +detectPostLanguage: "Automatically detect the language and show a translate button + for posts in foreign languages" +vibrate: "Play vibrations" +openServerInfo: "Show server information by clicking the server ticker on a post" +iconSet: "Icon set" +useCdn: "Get assets from CDN" +useCdnDescription: "Load some static assets like Twemoji from the JSDelivr CDN instead + of this Firefish server." +suggested: "Suggested" +noLanguage: "No language" +showPreviewByDefault: "Show preview in posting form by default" +preventMisclick: "Accidental click prevention" +hideFollowButtons: "Hide follow buttons in a misclickable position" +forMobile: "Mobile" +replaceChatButtonWithAccountButton: "Replace chat button with account switch button" +replaceWidgetsButtonWithReloadButton: "Replace widgets button with reload button" +searchEngine: "Search engine used in search bar MFM" +postSearch: "Post search on this server" +showBigPostButton: "Show a huge post button on the posting form" +emojiModPerm: "Custom emoji management permission" +emojiModPermDescription: "Add: Allow this user to add new custom emojis and to set + tag/category/license to newly added custom emojis.\nAdd and Edit: \"Add\" Permission + + Allow this user to edit the name/category/tag/license of the existing custom emojis.\n + Allow All: \"Add and Edit\" Permission + Allow this user to delete existing custom + emojis." +private: "Private" +privateDescription: "Make visible for you only" +makePrivate: "Make private" +makePrivateConfirm: "This operation will send a deletion request to remote servers + and change the visibility to private. Proceed?" +enablePullToRefresh: "Enable \"Pull down to refresh\"" +pullToRefreshThreshold: "Pull distance for reloading" +pullDownToReload: "Pull down to reload" +releaseToReload: "Release to reload" +reloading: "Reloading" +enableTimelineStreaming: "Update timelines automatically" +searchWords: "Words to search / ID or URL to lookup" +searchWordsDescription: "Enter the search term here to search for posts. Separate + words with a space for an AND search, or 'OR' (without quotes) between words for + an OR search.\nFor example, 'morning night' will find posts that contain both 'morning' + and 'night', and 'morning OR night' will find posts that contain either 'morning' + or 'night' (or both).\nYou can also filter out certain word(s) from the search results, like + 'sleepy -morning -breakfast'. Moreover, you can combine these AND/OR/exclude conditions like + '(morning OR night) sleepy -breakfast'.\nIf you want to search for a sequence of words (e.g., a sentence), + you must put it in double quotes, not to make it an AND search: \"Today I learned\"\ + \n\nIf you want to go to a specific user page or post page, enter the ID or URL + in this field and click the 'Lookup' button. Clicking 'Search' will search for posts + that literally contain the ID/URL." +searchUsers: "Posted by (optional)" +searchUsersDescription: "To search for posts by a specific user/server, enter the + ID (@user@example.com, or @user for a local user) or domain name (example.com).\n + \nIf you enter 'me' (without quotes), all of your posts (including unlisted, followers-only, + direct, and secret posts) will be searched.\n\nIf you enter 'local' (without quotes), + the results will be filtered to include only posts from this server." +searchRange: "Posted within (optional)" +searchRangeDescription: "If you want to filter the time period, enter it in this format: + 20220615-20231031\n\nIf you leave out the year (like 0105-0106 or 20231105-0110), + it's interpreted as the current year.\n\nYou can also omit either the start or end + date. For example, -0102 will filter the search results to show only posts made + before 2 January this year, and 20231026- will filter the results to show only posts + made after 26 October 2023." +searchPostsWithFiles: "Only posts with files" +searchCwAndAlt: "Include content warnings and file descriptions" +publishTimelines: "Publish timelines for visitors" +publishTimelinesDescription: "If enabled, the Local and Global timelines will be shown + on {url} even when signed out." +noAltTextWarning: "Some attached file(s) have no description. Did you forget to write?" +showNoAltTextWarning: "Show a warning if you attempt to post files without a description" +showAddFileDescriptionAtFirstPost: "Automatically open a form to write a description + when you attempt to post files without a description" +addAlt4MeTag: "Automatically append #Alt4Me hashtag to your post if attached file has no description" +turnOffCatLanguage: "Turn off cat language conversion" + +_emojiModPerm: + unauthorized: "None" + add: "Add" + mod: "Add and Edit" + full: "Allow All" +_sensitiveMediaDetection: + description: "Reduces the effort of server moderation through automatically recognizing + NSFW media via Machine Learning. This will slightly increase the load on the server." + sensitivity: "Detection sensitivity" + sensitivityDescription: "Reducing the sensitivity will lead to fewer misdetections + (false positives) whereas increasing it will lead to fewer missed detections (false + negatives)." + setSensitiveFlagAutomatically: "Mark as NSFW" + setSensitiveFlagAutomaticallyDescription: "The results of the internal detection + will be retained even if this option is turned off." + analyzeVideos: "Enable analysis of videos" + analyzeVideosDescription: "Analyzes videos in addition to images. This will slightly + increase the load on the server." +_emailUnavailable: + used: "This email address is already being used" + format: "The format of this email address is invalid" + disposable: "Disposable email addresses may not be used" + mx: "This email server is invalid" + smtp: "This email server is not responding" +_ffVisibility: + public: "Public" + followers: "Visible to followers only" + private: "Private" +_signup: + almostThere: "Almost there" + emailAddressInfo: "Please enter your email address. It will not be made public." + emailSent: "A confirmation email has been sent to your email address ({email}). + Please click the included link to complete account creation." +_accountDelete: + accountDelete: "Delete account" + mayTakeTime: "As account deletion is a resource-heavy process, it may take some + time to complete depending on how much content you have created and how many files + you have uploaded." + sendEmail: "Once account deletion has been completed, an email will be sent to the + email address registered to this account." + requestAccountDelete: "Request account deletion" + started: "Deletion has been started." + inProgress: "Deletion is currently in progress" +_ad: + back: "Back" + adsBy: "Community banner by {by}" + reduceFrequencyOfThisAd: "Show this banner less" +_forgotPassword: + enterEmail: "Enter the email address you used to register. A link with which you + can reset your password will then be sent to it." + ifNoEmail: "If you did not use an email during registration, please contact the + server administrator instead." + contactAdmin: "This server does not support using email addresses, please contact + the server administrator to reset your password instead." +_gallery: + my: "My Gallery" + liked: "Liked Posts" + like: "Like" + unlike: "Remove like" +_email: + _follow: + title: "You've got a new follower" + _receiveFollowRequest: + title: "You've received a follow request" +_plugin: + install: "Install plugins" + installWarn: "Please do not install untrustworthy plugins." + manage: "Manage plugins" +_preferencesBackups: + list: "Created backups" + saveNew: "Save new backup" + loadFile: "Load from file" + apply: "Apply to this device" + save: "Save changes" + inputName: "Please enter a name for this backup" + cannotSave: "Saving failed" + nameAlreadyExists: "A backup called \"{name}\" already exists. Please enter a different + name." + applyConfirm: "Do you really want to apply the \"{name}\" backup to this device? + Existing settings of this device will be overwritten." + saveConfirm: "Save backup as {name}?" + deleteConfirm: "Delete the {name} backup?" + renameConfirm: "Rename this backup from \"{old}\" to \"{new}\"?" + noBackups: "No backups exist. You may backup your client settings on this server + by using \"Create new backup\"." + createdAt: "Created at: {date} {time}" + updatedAt: "Updated at: {date} {time}" + cannotLoad: "Loading failed" + invalidFile: "Invalid file format" +_registry: + scope: "Scope" + key: "Key" + keys: "Keys" + domain: "Domain" + createKey: "Create key" +_aboutFirefish: + about: "Firefish is a fork of Misskey made by ThatOneCalculator, which has been + in development since 2022." + contributors: "Main contributors" + allContributors: "All contributors" + misskeyContributors: "Misskey contributors" + source: "Source code" + translation: "Translate Firefish" + donate: "Donate to Firefish" + donateTitle: "Enjoying Firefish?" + pleaseDonateToFirefish: "Please consider donating to Firefish to support its development." + pleaseDonateToHost: "Please also consider donating to your home server, {host}, + to help support its operation costs." + donateHost: "Donate to {host}" +_nsfw: + respect: "Hide NSFW media" + ignore: "Don't hide NSFW media" + force: "Hide all media" +_mfm: + play: "Play MFM" + stop: "Stop MFM" + warn: "MFM may contain rapidly moving or flashy animations" + alwaysPlay: "Always autoplay all animated MFM" + cheatSheet: "MFM Cheatsheet" + intro: "MFM is a markup language used on Misskey, Firefish, Akkoma, and more that + can be used in many places. Here you can view a list of all available MFM syntax." + dummy: "Firefish expands the world of the Fediverse" + advanced: "Advanced MFM" + advancedDescription: "If disabled, only allows for basic markup unless animated + MFM is playing" + mention: "Mention" + mentionDescription: "You can specify a user by using an At-Symbol and a username." + hashtag: "Hashtag" + hashtagDescription: "You can specify a hashtag using a number sign and text." + url: "URL" + urlDescription: "URLs can be displayed." + link: "Link" + linkDescription: "Specific parts of text can be displayed as a URL." + bold: "Bold" + boldDescription: "Highlights letters by making them thicker." + small: "Small" + smallDescription: "Displays content small and thin." + center: "Center" + centerDescription: "Displays content centered." + inlineCode: "Code (Inline)" + inlineCodeDescription: "Displays inline syntax highlighting for (program) code." + blockCode: "Code (Block)" + blockCodeDescription: "Displays syntax highlighting for multi-line (program) code + in a block." + inlineMath: "Math (Inline)" + inlineMathDescription: "Display math formulas (KaTeX) in-line" + blockMath: "Math (Block)" + blockMathDescription: "Display math formulas (KaTeX) in a block" + quote: "Quote" + quoteDescription: "Displays content as a quote." + emoji: "Custom Emoji" + emojiDescription: "By surrounding a custom emoji name with colons, custom emoji + can be displayed." + search: "Search" + searchDescription: "Displays a search box with pre-entered text." + flip: "Flip" + flipDescription: "Flips content horizontally or vertically." + jelly: "Animation (Jelly)" + jellyDescription: "Gives content a jelly-like animation." + tada: "Animation (Tada)" + tadaDescription: "Gives content a \"Tada!\"-like animation." + jump: "Animation (Jump)" + jumpDescription: "Gives content a jumping animation." + bounce: "Animation (Bounce)" + bounceDescription: "Gives content a bouncy animation." + shake: "Animation (Shake)" + shakeDescription: "Gives content a shaking animation." + twitch: "Animation (Twitch)" + twitchDescription: "Gives content a strongly twitching animation." + spin: "Animation (Spin)" + spinDescription: "Gives content a spinning animation." + x2: "Big" + x2Description: "Displays content bigger." + x3: "Very big" + x3Description: "Displays content even bigger." + x4: "Unbelievably big" + x4Description: "Displays content even bigger than bigger than big." + blur: "Blur" + blurDescription: "Blurs content. It will be displayed clearly when hovered over." + font: "Font" + fontDescription: "Sets the font to display content in." + rainbow: "Rainbow" + rainbowDescription: "Makes the content appear in rainbow colors." + sparkle: "Sparkle" + sparkleDescription: "Gives content a sparkling particle effect." + rotate: "Rotate" + rotateDescription: "Turns content by a specified angle." + fade: "Fade" + fadeDescription: "Fades content in and out." + position: "Position" + positionDescription: "Move content by a specified amount." + crop: "Crop" + cropDescription: "Crop content." + scale: "Scale" + scaleDescription: "Scale content by a specified amount." + foreground: "Foreground color" + foregroundDescription: "Change the foreground color of text." + background: "Background color" + backgroundDescription: "Change the background color of text." + plain: "Plain" + plainDescription: "Deactivates the effects of all MFM contained within this MFM + effect." +_instanceTicker: + none: "Never show" + remote: "Show for remote users" + always: "Always show" +_serverDisconnectedBehavior: + reload: "Automatically reload" + dialog: "Show warning dialog" + quiet: "Show unobtrusive warning" + nothing: "Do nothing" +_channel: + create: "Create channel" + edit: "Edit channel" + setBanner: "Set banner" + removeBanner: "Remove banner" + featured: "Trending" + owned: "Owned" + following: "Followed" + usersCount: "{n} Participants" + notesCount: "{n} Posts" + nameAndDescription: "Name and description" + nameOnly: "Name only" +_messaging: + dms: "Private" + groups: "Groups" +_menuDisplay: + sideFull: "Side" + sideIcon: "Side (Icons)" + top: "Top" + hide: "Hide" +_wordMute: + muteWords: "Muted words" + mutePatterns: "Muted patterns" + muteLangs: "Muted Languages" + muteWordsDescription: "Separate with spaces for an AND condition or with line breaks + for an OR condition." + muteWordsDescription2: "Surround keywords with slashes to use regular expressions." + muteLangsDescription: "Separate with spaces or line breaks for an OR condition." + muteLangsDescription2: "Use language code e.g. en, fr, ja, zh." + softDescription: "Hide posts that fulfil the set conditions from the timeline." + langDescription: "Hide posts that match set language from the timeline." + hardDescription: "Prevents posts fulfilling the set conditions from being added + to the timeline. In addition, these posts will not be added to the timeline even + if the conditions are changed." + soft: "Soft" + lang: "Language" + hard: "Hard" + mutedNotes: "Muted posts" +_instanceMute: + instanceMuteDescription: "This will mute any posts/boosts from the listed servers, + including those of users replying to a user from a muted server." + instanceMuteDescription2: "Separate with newlines" + title: "Hides posts from listed servers." + heading: "List of servers to be muted" +_theme: + explore: "Explore Themes" + install: "Install a theme" + manage: "Manage themes" + code: "Theme code" + description: "Description" + installed: "{name} has been installed" + installedThemes: "Installed themes" + builtinThemes: "Built-in themes" + alreadyInstalled: "This theme is already installed" + invalid: "The format of this theme is invalid" + make: "Make a theme" + base: "Base" + addConstant: "Add constant" + constant: "Constant" + defaultValue: "Default value" + color: "Color" + refProp: "Reference a property" + refConst: "Reference a constant" + key: "Key" + func: "Functions" + funcKind: "Function type" + argument: "Argument" + basedProp: "Referenced property" + alpha: "Opacity" + darken: "Darken" + lighten: "Lighten" + inputConstantName: "Enter a name for this constant" + importInfo: "If you enter theme code here, you can import it to the theme editor" + deleteConstantConfirm: "Do you really want to delete the constant {const}?" + keys: + accent: "Accent" + bg: "Background" + fg: "Text" + focus: "Focus" + indicator: "Indicator" + panel: "Panel" + shadow: "Shadow" + header: "Header" + navBg: "Sidebar background" + navFg: "Sidebar text" + navHoverFg: "Sidebar text (Hover)" + navActive: "Sidebar text (Active)" + navIndicator: "Sidebar indicator" + link: "Link" + hashtag: "Hashtag" + mention: "Mention" + mentionMe: "Mentions (Me)" + renote: "Boost" + modalBg: "Modal background" + divider: "Divider" + scrollbarHandle: "Scrollbar handle" + scrollbarHandleHover: "Scrollbar handle (Hover)" + dateLabelFg: "Date label text" + infoBg: "Information background" + infoFg: "Information text" + infoWarnBg: "Warning background" + infoWarnFg: "Warning text" + cwBg: "CW button background" + cwFg: "CW button text" + cwHoverBg: "CW button background (Hover)" + toastBg: "Notification background" + toastFg: "Notification text" + buttonBg: "Button background" + buttonHoverBg: "Button background (Hover)" + inputBorder: "Input field border" + listItemHoverBg: "List item background (Hover)" + driveFolderBg: "Drive folder background" + wallpaperOverlay: "Wallpaper overlay" + badge: "Badge" + messageBg: "Chat background" + accentDarken: "Accent (Darkened)" + accentLighten: "Accent (Lightened)" + fgHighlighted: "Highlighted Text" +_sfx: + note: "New post" + noteMy: "Own post" + notification: "Notifications" + chat: "Chat" + chatBg: "Chat (Background)" + antenna: "Antennas" + channel: "Channel notifications" +_ago: + future: "future" + justNow: "just now" + secondsAgo: "{n}s ago" + minutesAgo: "{n}m ago" + hoursAgo: "{n}h ago" + daysAgo: "{n}d ago" + weeksAgo: "{n}w ago" + monthsAgo: "{n}mo ago" + yearsAgo: "{n}y ago" +_later: + future: "future" + justNow: "right now" + secondsAgo: "in {n}s" + minutesAgo: "in {n}min" + hoursAgo: "in {n}h" + daysAgo: "in {n}d" + weeksAgo: "in {n}w" + monthsAgo: "in {n}mo" + yearsAgo: "in {n}y" +_time: + second: "Second(s)" + minute: "Minute(s)" + hour: "Hour(s)" + day: "Day(s)" +_filters: + fromUser: "From user" + withFile: "With file" + fromDomain: "From domain" + notesBefore: "Posts before" + notesAfter: "Posts after" + followingOnly: "Following only" + followersOnly: "Followers only" +_tutorial: + title: "How to use Firefish" + step1_1: "Welcome!" + step1_2: "Let's get you set up. You'll be up and running in no time!" + step2_1: "First, please fill out your profile." + step2_2: "Providing some information about who you are will make it easier for others + to tell if they want to see your posts or follow you." + step3_1: "Now it's time to follow some people!" + step3_2: "Your home and social timelines are based off of who you follow, so try + following a couple accounts to get started.\nClick the plus circle on the top + right of a profile to follow them." + step4_1: "Let's get you out there." + step4_2: "For your first post, some people like to make an {introduction} post or + a simple \"Hello world!\"" + step5_1: "Timelines, timelines everywhere!" + step5_2: "Your server has {timelines} different timelines enabled." + step5_3: "The Home {icon} timeline is where you can see posts from the accounts + you follow." + step5_4: "The Local {icon} timeline is where you can see posts from everyone else + on this server." + step5_5: "The Social {icon} timeline is a combination of the Home and Local timelines." + step5_6: "The Recommended {icon} timeline is where you can see posts from servers + the admins recommend." + step5_7: "The Global {icon} timeline is where you can see posts from every other + connected server." + step6_1: "So, what is this place?" + step6_2: "Well, you didn't just join Firefish. You joined a portal to the Fediverse, + an interconnected network of thousands of servers." + step6_3: "Each server works in different ways, and not all servers run Firefish. + This one does though! It's a bit complicated, but you'll get the hang of it in + no time." + step6_4: "Now go, explore, and have fun!" +_2fa: + alreadyRegistered: "You have already registered a 2-factor authentication device." + registerTOTP: "Register authenticator app" + step1: "First, install an authentication app (such as {a} or {b}) on your device." + step2: "Then, scan the QR code displayed on this screen." + step2Click: "Clicking on this QR code will allow you to register 2FA to your security + key or phone authenticator app." + step2Url: "You can also enter this URL if you're using a desktop program:" + step3Title: "Enter an authentication code" + step3: "Enter the token provided by your app to finish setup." + step4: "From now on, any future sign in attempts will ask for such a token." + securityKeyNotSupported: "Your browser does not support security keys." + securityKeyInfo: "Besides fingerprint or PIN authentication, you can also setup + authentication via hardware security keys that support FIDO2 to further secure + your account." + chromePasskeyNotSupported: "Chrome passkeys are currently not supported." + registerSecurityKey: "Register a security or pass key" + securityKeyName: "Enter a key name" + tapSecurityKey: "Please follow your browser to register the security or pass key" + removeKey: "Remove security key" + removeKeyConfirm: "Really delete the {name} key?" + token: "2FA Token" +_permissions: + read: "Read (read timelines, notifications, reactions, mutes, account information, etc.)" + write: "Write (make posts, react to posts, mute users, edit account information, etc.)" + push: "Send push notifications" + follow: "Follow and unfollow accounts" + "read:account": "View your account information" + "write:account": "Edit your account information" + "read:blocks": "View your list of blocked users" + "write:blocks": "Edit your list of blocked users" + "read:drive": "Access your Drive files and folders" + "write:drive": "Edit or delete your Drive files and folders" + "read:favorites": "View your list of bookmarks" + "write:favorites": "Edit your list of bookmarks" + "read:following": "View information on who you follow" + "write:following": "Follow or unfollow other accounts" + "read:messaging": "View your chats" + "write:messaging": "Compose or delete chat messages" + "read:mutes": "View your list of muted users" + "write:mutes": "Edit your list of muted users" + "write:notes": "Compose or delete posts" + "read:notifications": "View your notifications" + "write:notifications": "Manage your notifications" + "read:reactions": "View your reactions" + "write:reactions": "Edit your reactions" + "write:votes": "Vote on a poll" + "read:pages": "View your page" + "write:pages": "Edit or delete your page" + "read:page-likes": "View your likes on page" + "write:page-likes": "Edit your likes on page" + "read:user-groups": "View your user groups" + "write:user-groups": "Edit or delete your user groups" + "read:channels": "View your channels" + "write:channels": "Edit your channels" + "read:gallery": "View your gallery" + "write:gallery": "Edit your gallery" + "read:gallery-likes": "View your list of liked gallery posts" + "write:gallery-likes": "Edit your list of liked gallery posts" +_auth: + shareAccess: "Would you like to authorize \"{name}\" to access this account?" + shareAccessAsk: "Are you sure you want to authorize this application to access your + account?" + permissionAsk: "This application requests the following permissions:" + pleaseGoBack: "Please go back to the application" + callback: "Returning to the application" + denied: "Access denied" + copyAsk: "Please paste the following authorization code to the application:" + allPermissions: "Full account access" +_antennaSources: + all: "All posts" + homeTimeline: "Posts from followed users" + users: "Posts from specific users" + userList: "Posts from a specified list of users" + userGroup: "Posts from users in a specified group" + instances: "Posts from all users on an server" +_weekday: + sunday: "Sunday" + monday: "Monday" + tuesday: "Tuesday" + wednesday: "Wednesday" + thursday: "Thursday" + friday: "Friday" + saturday: "Saturday" +_widgets: + memo: "Sticky Notes" + notifications: "Notifications" + timeline: "Timeline" + calendar: "Calendar" + trends: "Trending" + clock: "Clock" + rss: "RSS Reader" + rssTicker: "RSS Ticker" + activity: "Activity" + photos: "Photos" + digitalClock: "Digital Clock" + unixClock: "UNIX Clock" + federation: "Federation" + instanceCloud: "Server Cloud" + postForm: "Posting Form" + slideshow: "Slideshow" + button: "Button" + onlineUsers: "Online Users" + jobQueue: "Job Queue" + serverMetric: "Server Metrics" + aiscript: "AiScript Console" + userList: "User List" + serverInfo: "Server Info" + _userList: + chooseList: "Select a list" + +_cw: + hide: "Hide" + show: "Show content" + chars: "{count} characters" + files: "{count} file(s)" +_poll: + noOnlyOneChoice: "At least two choices are needed" + choiceN: "Choice {n}" + noMore: "You cannot add more choices" + canMultipleVote: "Allow selecting multiple choices" + expiration: "End poll" + infinite: "Never" + at: "End at..." + after: "End after..." + deadlineDate: "End date" + deadlineTime: "Time" + duration: "Duration" + votesCount: "{n} votes" + totalVotes: "{n} votes in total" + vote: "Vote" + showResult: "View results" + voted: "Voted" + closed: "Ended" + remainingDays: "{d} day(s) {h} hour(s) remaining" + remainingHours: "{h} hour(s) {m} minute(s) remaining" + remainingMinutes: "{m} minute(s) {s} second(s) remaining" + remainingSeconds: "{s} second(s) remaining" +_visibility: + public: "Public" + publicDescription: "Your post will be visible in all public timelines" + home: "Unlisted" + homeDescription: "Post to home timeline only" + followers: "Followers" + followersDescription: "Make visible to your followers and mentioned users only" + specified: "Direct" + specifiedDescription: "Make visible for specified users only" + localOnly: "Local only" + localOnlyDescription: "Not visible to remote users" +_postForm: + replyPlaceholder: "Reply to this post..." + quotePlaceholder: "Quote this post..." + channelPlaceholder: "Post to a channel..." + _placeholders: + a: "What are you up to?" + b: "What's happening around you?" + c: "What's on your mind?" + d: "What do you want to say?" + e: "Start writing..." + f: "Waiting for you to write..." +_profile: + name: "Name" + username: "Username" + description: "Bio" + youCanIncludeHashtags: "You can also include hashtags in your bio." + metadata: "Additional Information" + metadataEdit: "Edit additional Information" + metadataDescription: "Using these, you can display additional information fields + in your profile. You can add an {a} tag or {l} tag with {rel} to verify the link + on your profile!" + metadataLabel: "Label" + metadataContent: "Content" + changeAvatar: "Change avatar" + changeBanner: "Change banner" + locationDescription: "If you enter your city first, it will display your local time + to other users." +_exportOrImport: + allNotes: "All posts" + followingList: "Followed users" + muteList: "Muted users" + blockingList: "Blocked users" + userLists: "User lists" + excludeMutingUsers: "Exclude muted users" + excludeInactiveUsers: "Exclude inactive users" +_charts: + federation: "Federation" + apRequest: "Requests" + usersIncDec: "Difference in the number of users" + usersTotal: "Total number of users" + activeUsers: "Active users" + notesIncDec: "Difference in the number of posts" + localNotesIncDec: "Difference in the number of local posts" + remoteNotesIncDec: "Difference in the number of remote posts" + notesTotal: "Total number of posts" + filesIncDec: "Difference in the number of files" + filesTotal: "Total number of files" + storageUsageIncDec: "Difference in storage usage" + storageUsageTotal: "Total storage usage" +_instanceCharts: + requests: "Requests" + users: "Difference in the number of users" + usersTotal: "Cumulative number of users" + notes: "Difference in the number of posts" + notesTotal: "Cumulative number of posts" + ff: "Difference in the number of followed users / followers " + ffTotal: "Cumulative number of followed users / followers" + cacheSize: "Difference in cache size" + cacheSizeTotal: "Cumulative total cache size" + files: "Difference in the number of files" + filesTotal: "Cumulative number of files" +_timelines: + home: "Home" + local: "Local" + recommended: "Recommended" + social: "Social" + global: "Global" +_pages: + newPage: "Create a new Page" + editPage: "Edit this Page" + readPage: "Viewing this Page's source" + created: "Page successfully created" + updated: "Page successfully edited" + deleted: "Page successfully deleted" + pageSetting: "Page settings" + nameAlreadyExists: "The specified Page URL already exists" + invalidNameTitle: "The specified Page URL is invalid" + invalidNameText: "Make sure the Page title is not empty" + editThisPage: "Edit this Page" + viewSource: "View source" + viewPage: "View your Pages" + like: "Like" + unlike: "Remove like" + my: "My Pages" + liked: "Liked Pages" + featured: "Popular" + inspector: "Inspector" + contents: "Content" + content: "Page block" + variables: "Variables" + title: "Title" + url: "Page URL" + summary: "Page summary" + alignCenter: "Center elements" + hideTitleWhenPinned: "Hide Page title when pinned to profile" + font: "Font" + fontSerif: "Serif" + fontSansSerif: "Sans Serif" + eyeCatchingImageSet: "Set thumbnail" + eyeCatchingImageRemove: "Delete thumbnail" + chooseBlock: "Add a block" + selectType: "Select a type" + enterVariableName: "Enter a variable name" + variableNameIsAlreadyUsed: "This variable name is already in use" + contentBlocks: "Content" + inputBlocks: "Input" + specialBlocks: "Special" + blocks: + text: "Text" + textarea: "Text area" + section: "Section" + image: "Images" + button: "Button" + if: "If" + _if: + variable: "Variable" + post: "Posting form" + _post: + text: "Content" + attachCanvasImage: "Attach canvas image" + canvasId: "Canvas ID" + textInput: "Text input" + _textInput: + name: "Variable name" + text: "Title" + default: "Default value" + textareaInput: "Multiline text input" + _textareaInput: + name: "Variable name" + text: "Title" + default: "Default value" + numberInput: "Numeric input" + _numberInput: + name: "Variable name" + text: "Title" + default: "Default value" + canvas: "Canvas" + _canvas: + id: "Canvas ID" + width: "Width" + height: "Height" + note: "Embedded post" + _note: + id: "Post ID" + idDescription: "You can alternatively paste the post URL here." + detailed: "Detailed view" + switch: "Switch" + _switch: + name: "Variable name" + text: "Title" + default: "Default value" + counter: "Counter" + _counter: + name: "Variable name" + text: "Title" + inc: "Step" + _button: + text: "Title" + colored: "Colored" + action: "Behavior when the button is pressed" + _action: + dialog: "Show a dialog" + _dialog: + content: "Content" + resetRandom: "Reset the random seed" + pushEvent: "Send an event" + _pushEvent: + event: "Event name" + message: "Message to display when activated" + variable: "Variable to send" + no-variable: "None" + callAiScript: "Invoke AiScript" + _callAiScript: + functionName: "Function name" + radioButton: "Choice" + _radioButton: + name: "Variable name" + title: "Title" + values: "List of choices separated by line breaks" + default: "Default value" + script: + categories: + flow: "Flow control" + logical: "Logical operation" + operation: "Computation" + comparison: "Comparison" + random: "Random" + value: "Values" + fn: "Functions" + text: "Text operations" + convert: "Transformations" + list: "Lists" + blocks: + text: "Text" + multiLineText: "Text (multiline)" + textList: "Text list" + _textList: + info: "Separate each entry with a line break" + strLen: "Text length" + _strLen: + arg1: "Text" + strPick: "Extract string" + _strPick: + arg1: "Text" + arg2: "String location" + strReplace: "Replacement string" + _strReplace: + arg1: "Text" + arg2: "Text to be replaced" + arg3: "Replace with" + strReverse: "Flip text" + _strReverse: + arg1: "Text" + join: "Text concatenation" + _join: + arg1: "Lists" + arg2: "Separator" + add: "Add" + _add: + arg1: "A" + arg2: "B" + subtract: "Subtract" + _subtract: + arg1: "A" + arg2: "B" + multiply: "Multiply" + _multiply: + arg1: "A" + arg2: "B" + divide: "Divide" + _divide: + arg1: "A" + arg2: "B" + mod: "Remainder" + _mod: + arg1: "A" + arg2: "B" + round: "Decimal rounding" + _round: + arg1: "Number" + eq: "A and B are equal" + _eq: + arg1: "A" + arg2: "B" + notEq: "A and B are different" + _notEq: + arg1: "A" + arg2: "B" + and: "A AND B" + _and: + arg1: "A" + arg2: "B" + or: "A OR B" + _or: + arg1: "A" + arg2: "B" + lt: "< A is less than B" + _lt: + arg1: "A" + arg2: "B" + gt: "> A is larger than B" + _gt: + arg1: "A" + arg2: "B" + ltEq: "<= A is less than or equal to B" + _ltEq: + arg1: "A" + arg2: "B" + gtEq: ">= A is greater than or equal to B" + _gtEq: + arg1: "A" + arg2: "B" + if: "Branch" + _if: + arg1: "If" + arg2: "Then" + arg3: "Else" + not: "NOT" + _not: + arg1: "NOT" + random: "Random" + _random: + arg1: "Probability" + rannum: "Random number" + _rannum: + arg1: "Minimum value" + arg2: "Maximum value" + randomPick: "Randomly choose from list" + _randomPick: + arg1: "List" + dailyRandom: "Random (Changes once a day for each user)" + _dailyRandom: + arg1: "Probability" + dailyRannum: "Random number (Changes once a day for each user)" + _dailyRannum: + arg1: "Minimum value" + arg2: "Maximum value" + dailyRandomPick: "Randomly choose from a list (Changes once a day for each user)" + _dailyRandomPick: + arg1: "List" + seedRandom: "Random (with seed)" + _seedRandom: + arg1: "Seed" + arg2: "Probability" + seedRannum: "Random number (with seed)" + _seedRannum: + arg1: "Seed" + arg2: "Minimum value" + arg3: "Maximum value" + seedRandomPick: "Randomly choose from list (with seed)" + _seedRandomPick: + arg1: "Seed" + arg2: "List" + DRPWPM: "Randomly choose from weighted list (Changes once a day for each user)" + _DRPWPM: + arg1: "Text list" + pick: "Select from list" + _pick: + arg1: "List" + arg2: "Position" + listLen: "Get length of list" + _listLen: + arg1: "List" + number: "Number" + stringToNumber: "Text to number" + _stringToNumber: + arg1: "Text" + numberToString: "Number to text" + _numberToString: + arg1: "Number" + splitStrByLine: "Split text by line breaks" + _splitStrByLine: + arg1: "Text" + ref: "Variable" + aiScriptVar: "AiScript Variable" + fn: "Function" + _fn: + slots: "Slots" + slots-info: "Separate each slot with a line break" + arg1: "Output" + for: "for-Loop" + _for: + arg1: "Number of times to repeat" + arg2: "Action" + typeError: "Slot {slot} accepts values of type \"{expect}\", but the provided + value is of type \"{actual}\"!" + thereIsEmptySlot: "Slot {slot} is empty!" + types: + string: "Text" + number: "Number" + boolean: "Flag" + array: "List" + stringArray: "Text list" + emptySlot: "Empty slot" + enviromentVariables: "Environment variables" + pageVariables: "Page variables" + argVariables: "Input slots" +_relayStatus: + requesting: "Pending" + accepted: "Accepted" + rejected: "Rejected" +_notification: + fileUploaded: "File successfully uploaded" + youGotMention: "{name} mentioned you" + youGotReply: "{name} replied to you" + youGotQuote: "{name} quoted you" + youRenoted: "Boost from {name}" + youGotPoll: "{name} voted on your poll" + youGotMessagingMessageFromUser: "{name} sent you a chat message" + youGotMessagingMessageFromGroup: "A chat message was sent to the {name} group" + youWereFollowed: "followed you" + youReceivedFollowRequest: "You've received a follow request" + yourFollowRequestAccepted: "Your follow request was accepted" + youWereInvitedToGroup: "{userName} invited you to a group" + pollEnded: "Poll results have become available" + emptyPushNotificationMessage: "Push notifications have been updated" + reacted: "reacted to your post" + renoted: "boosted your post" + voted: "voted on your poll" + andCountUsers: "and {count} more users {acted}" + _types: + all: "All" + follow: "New followers" + mention: "Mentions" + reply: "Replies" + renote: "Boosts" + quote: "Quotes" + reaction: "Reactions" + pollVote: "Votes on polls" + pollEnded: "Polls ending" + receiveFollowRequest: "Received follow requests" + followRequestAccepted: "Accepted follow requests" + groupInvited: "Group invitations" + app: "Notifications from linked apps" + _actions: + followBack: "followed you back" + reply: "Reply" + renote: "Boosts" +_deck: + alwaysShowMainColumn: "Always show main column" + columnAlign: "Align columns" + addColumn: "Add column" + configureColumn: "Column settings" + swapLeft: "Swap with the left column" + swapRight: "Swap with the right column" + swapUp: "Swap with the above column" + swapDown: "Swap with the below column" + stackLeft: "Stack with the left column" + popRight: "Pop column to the right" + profile: "Workspace" + newProfile: "New workspace" + renameProfile: "Rename workspace" + deleteProfile: "Delete workspace" + nameAlreadyExists: "This workspace name already exists." + introduction: "Create the perfect interface for you by arranging columns freely!" + introduction2: "Click on the + on the right of the screen to add new colums whenever + you want." + widgetsIntroduction: "Please select \"Edit widgets\" in the column menu and add + a widget." + _columns: + main: "Main" + widgets: "Widgets" + notifications: "Notifications" + tl: "Timeline" + antenna: "Antenna" + list: "List" + channel: "Channel" + mentions: "Mentions" + direct: "Direct messages" +_experiments: + title: "Experiments" + enablePostImports: "Enable post imports" + postImportsCaption: "Allows users to import their posts from past Firefish, Misskey, + Mastodon, Akkoma, and Pleroma accounts. It may cause slowdowns during load if + your queue is bottlenecked." +_dialog: + charactersExceeded: "Max characters exceeded! Current: {current}/Limit: {max}" + charactersBelow: "Not enough characters! Current: {current}/Limit: {min}" +_skinTones: + yellow: "Yellow" + light: "Light" + mediumLight: "Medium Light" + medium: "Medium" + mediumDark: "Medium Dark" + dark: "Dark" +_feeds: + copyFeed: "Copy feed" + rss: "RSS" + atom: "Atom" + jsonFeed: "JSON feed" +_iconSets: + bold: "Bold" + light: "Light" + regular: "Regular" + fill: "Filled" + duotone: "Duotone" +moreUrls: "Pinned pages" +moreUrlsDescription: "Enter the pages you want to pin to the help menu in the lower + left corner using this notation:\n\"Display name\": https://example.com/" +messagingUnencryptedInfo: "Chats on Firefish are not end-to-end encrypted. Don't share + any sensitive infomation over Firefish." +autocorrectNoteLanguage: "Show a warning if the post language does not match the auto-detected + result" +incorrectLanguageWarning: "It looks like your post is in {detected}, but you selected + {current}.\nWould you like to set the language to {detected} instead?" +noteEditHistory: "Post edit history" +slashQuote: "Chain quote" +foldNotification: "Group similar notifications" +scheduledPost: "Schedule this post" +scheduledPostAt: "The post will be sent {time}" +cancelScheduledPost: "Remove the schedule" +scheduledDate: "Scheduled date" +mergeThreadInTimeline: "Merge multiple posts in the same thread in timelines" +mergeRenotesInTimeline: "Group multiple boosts of the same post" diff --git a/locales/eo.yml b/locales/eo.yml new file mode 100644 index 0000000..6e9bb18 --- /dev/null +++ b/locales/eo.yml @@ -0,0 +1,11 @@ +_lang_: "Esperanto" +introFirefish: Bonvenon Firefish estas malfermkoda, ne centra socia platformo kiu + estos senpage ĉiam! 🚀 +headlineFirefish: Malfermkoda, ne centra socia platformo kiu estos senpage ĉiam 🚀 +monthAndDay: '{monato}/{tago}' +search: Serĉi +searchPlaceholder: Serĉi Firefish +notifications: Sciigoj +username: Uzantnomo +password: Pasvorto +forgotPassword: Forgesa pasvorto diff --git a/locales/es-ES.yml b/locales/es-ES.yml new file mode 100644 index 0000000..0bdc02e --- /dev/null +++ b/locales/es-ES.yml @@ -0,0 +1,2223 @@ +_lang_: "Español" +headlineFirefish: "¡Un proyecto de código abierto y una plataforma de medios de comunicación + descentralizada que es gratis para siempre! 🚀" +introFirefish: "¡Bienvenido! ¡Firefish es un proyecto de código abierto, plataforma + descentralizado medios de comunicación social que es gratis para siempre! 🚀" +monthAndDay: "{day}/{month}" +search: "Buscar" +notifications: "Notificaciones" +username: "Nombre de usuario" +password: "Contraseña" +forgotPassword: "Olvidé mi Contraseña" +fetchingAsApObject: "Recuperando desde el Fediverso" +ok: "OK" +gotIt: "¡Lo tengo!" +cancel: "Cancelar" +enterUsername: "Introduce el nombre de usuario" +renotedBy: "Impulsado por {user}" +noNotes: "No hay publicaciones" +noNotifications: "No hay notificaciones" +instance: "Servidor" +settings: "Configuración" +basicSettings: "Configuración Básica" +otherSettings: "Configuración avanzada" +openInWindow: "Abrir en una ventana" +profile: "Perfil" +timeline: "Línea de tiempo" +noAccountDescription: "Este usuario no ha escrito su biografía aún." +login: "Iniciar sesión" +loggingIn: "Iniciando sesión" +logout: "Cerrar sesión" +signup: "Registrarse" +uploading: "Cargando..." +save: "Guardar" +users: "Usuarios" +addUser: "Agregar usuario" +favorite: "Añadir a favoritos" +favorites: "Favoritos" +unfavorite: "Quitar de favoritos" +favorited: "Añadido a favoritos." +alreadyFavorited: "Ya había sido añadido a favoritos." +cantFavorite: "No se puede añadir a favoritos." +pin: "Fijar al perfil" +unpin: "Desfijar" +copyContent: "Copiar contenido" +copyLink: "Copiar enlace" +delete: "Borrar" +deleteAndEdit: "Borrar y editar" +deleteAndEditConfirm: "¿Estás seguro de que quieres borrar esta publicación y editarla? + Perderás todas las reacciones, impulsos y respuestas." +addToList: "Agregar a lista" +sendMessage: "Enviar un mensaje" +copyUsername: "Copiar nombre de usuario" +searchUser: "Buscar un usuario" +reply: "Responder" +loadMore: "Ver más" +showMore: "Ver más" +showLess: "Cerrar" +youGotNewFollower: "te ha seguido" +receiveFollowRequest: "Recibiste una solicitud de seguimiento" +followRequestAccepted: "La solicitud de seguimiento fue aceptada" +mention: "Menciones" +mentions: "Menciones" +directNotes: "Mensajes Directos" +importAndExport: "Importar y Exportar" +import: "Importar" +export: "Exportar" +files: "Archivos" +download: "Descargar" +driveFileDeleteConfirm: "¿Desea borrar el archivo \"{name}\"? Será removido de todas + las publicaciones que tengan este archivo adjunto." +unfollowConfirm: "¿Desea dejar de seguir a {name}?" +exportRequested: "Se ha solicitado la exportación. Puede tomar un tiempo. Cuando termine + la exportación, se añadirá en el drive." +importRequested: "Se ha solicitado la importación. Puede tomar un tiempo." +lists: "Listas" +noLists: "No tiene listas" +note: "Publicación" +notes: "Publicaciones" +following: "Siguiendo" +followers: "Seguidores" +followsYou: "Te sigue" +createList: "Crear lista" +manageLists: "Administrar listas" +error: "Error" +somethingHappened: "Ocurrió un error" +retry: "Reintentar" +pageLoadError: "Error al cargar la página." +pageLoadErrorDescription: "Normalmente es debido a la red o al caché del navegador. + Por favor limpie el caché o intente más tarde." +serverIsDead: "No hay respuesta del servidor. Espere un momento y vuelva a intentarlo." +youShouldUpgradeClient: "Para ver esta página, por favor refrezca el navegador y utiliza + una versión más reciente del cliente." +enterListName: "Ingrese nombre de lista" +privacy: "Privacidad" +makeFollowManuallyApprove: "Aprobar manualmente las solicitudes de seguimiento" +defaultNoteVisibility: "Visibilidad por defecto" +follow: "Seguir" +followRequest: "Enviar solicitud de seguimiento" +followRequests: "Solicitudes de seguimiento" +unfollow: "Dejar de seguir" +followRequestPending: "Solicitudes de seguimiento pendiente" +enterEmoji: "Ingresar emojis" +renote: "Impulsar" +unrenote: "Quitar impulso" +renoted: "Impulsado." +cantRenote: "No se puede impulsar esta publicación." +cantReRenote: "No se puede impulsar un impulso." +quote: "Citar" +pinnedNote: "Publicación fijada" +pinned: "Fijar al perfil" +you: "Tú" +clickToShow: "Click para ver" +sensitive: "Marcado como sensible" +add: "Agregar" +reaction: "Reacción" +reactionSetting: "Reacciones para mostrar en el menú de reacciones" +reactionSettingDescription2: "Arrastre para reordenar, click para borrar, apriete + la tecla + para añadir." +rememberNoteVisibility: "Recordar la configuración de visibilidad de la publicación" +attachCancel: "Quitar adjunto" +markAsSensitive: "Marcar como sensible" +unmarkAsSensitive: "Desmarcar como sensible" +enterFileName: "Ingrese el nombre del archivo" +mute: "Silenciar" +unmute: "Dejar de silenciar" +block: "Bloquear" +unblock: "Dejar de bloquear" +suspend: "Suspender" +unsuspend: "Dejar de suspender" +blockConfirm: "¿Quiere bloquear esta cuenta?" +unblockConfirm: "¿Quiere dejar de bloquear esta cuenta?" +suspendConfirm: "¿Quiere suspender esta cuenta?" +unsuspendConfirm: "¿Quiere dejar de suspender esta cuenta?" +selectList: "Seleccione una lista" +selectAntenna: "Seleccionar antena" +selectWidget: "Seleccionar widget" +editWidgets: "Editar widgets" +editWidgetsExit: "Terminar edición" +customEmojis: "Emojis personalizados" +emoji: "Emoji" +emojis: "Emoji" +emojiName: "Nombre del emoji" +emojiUrl: "URL de la imágen del emoji" +addEmoji: "Agregar emoji" +settingGuide: "Configuración sugerida" +cacheRemoteFiles: "Mantener en cache los archivos remotos" +cacheRemoteFilesDescription: "Si desactiva esta configuración, los archivos remotos + se cargarán desde el servidor remoto sin usar la caché. Con eso se puede ahorrar + almacenamiento del servidor, pero eso aumentará el tráfico al no crear miniaturas." +flagAsBot: "Marcar esta cuenta como automatizada / robot" +flagAsBotDescription: "En caso de que esta cuenta fuera usada por un programa automatizado, + active esta opción. Al hacerlo, esta opción servirá para notificar otros desarrolladores + y evitar cadenas infinitas de reacciones con otras cuentas automatizadas, tambien + ayuda ajustar los sistemas internos de Firefish para que trate a esta cuenta como + un bot / automatizada." +flagAsCat: "Esta cuenta es un gato" +flagAsCatDescription: "Vas a tener orejas de gato y hablar como un gato!" +flagShowTimelineReplies: "Mostrar respuestas a las notas en la biografía" +flagShowTimelineRepliesDescription: "Cuando se marca, la línea de tiempo muestra respuestas + a otras publicaciones además de las publicaciones del usuario." +autoAcceptFollowed: "Aceptar automáticamente las solicitudes de seguimiento de los + usuarios que sigues" +addAccount: "Agregar Cuenta" +loginFailed: "Error al iniciar sesión" +showOnRemote: "Abrir página original" +general: "General" +wallpaper: "Fondo de pantalla" +setWallpaper: "Establecer fondo de pantalla" +removeWallpaper: "Quitar fondo de pantalla" +searchWith: "Buscar: {q}" +youHaveNoLists: "No tienes listas" +followConfirm: "¿Desea seguir a {name}?" +proxyAccount: "Cuenta proxy" +proxyAccountDescription: "Una cuenta proxy es una cuenta que actúa como un seguidor + remoto de un usuario bajo ciertas condiciones. Por ejemplo, cuando un usuario añade + un usuario remoto a una lista, si ningún usuario local sigue al usuario agregado + a la lista, el servidor no puede obtener su actividad. Así que la cuenta proxy sigue + al usuario añadido a la lista." +host: "Host" +selectUser: "Elegir usuario" +recipient: "Recipiente" +annotation: "Anotación" +federation: "Federación" +instances: "Servidores" +registeredAt: "Registrado en" +latestRequestSentAt: "Ultimo pedido enviado" +latestRequestReceivedAt: "Ultimo pedido recibido" +latestStatus: "Último status" +storageUsage: "Almacenamiento usado" +charts: "Chat" +perHour: "por hora" +perDay: "por día" +stopActivityDelivery: "Dejar de enviar actividades" +blockThisInstance: "Bloquear este servidor" +operations: "Operaciones" +software: "Software" +version: "Versión" +metadata: "Metadatos" +monitor: "Monitor" +jobQueue: "Cola de trabajos" +cpuAndMemory: "CPU y Memoria" +network: "Red" +disk: "Disco" +instanceInfo: "Información del servidor" +statistics: "Estadísticas" +clearQueue: "Limpiar cola" +clearQueueConfirmTitle: "¿Desea limpiar la cola?" +clearQueueConfirmText: "Las publicaciones aún no entregadas no se federarán. Normalmente + no se necesita ejecutar esta operación." +clearCachedFiles: "Limpiar caché" +clearCachedFilesConfirm: "¿Desea borrar todos los archivos remotos cacheados?" +blockedInstances: "Servidores bloqueados" +blockedInstancesDescription: "Escriba los hosts de los servidores que desea bloquear. + Los servidores bloqueados no podrán comunicarse con este servidor." +muteAndBlock: "Silenciar y bloquear" +mutedUsers: "Usuarios silenciados" +blockedUsers: "Usuarios bloqueados" +noUsers: "No hay usuarios" +editProfile: "Editar perfil" +noteDeleteConfirm: "¿Desea borrar esta publicación?" +pinLimitExceeded: "Ya no se pueden fijar más publicaciones" +intro: "¡La instalación de Firefish ha terminado! Crea el usuario administrador." +done: "Terminado" +processing: "Procesando" +preview: "Vista previa" +default: "Predeterminado" +defaultValueIs: "Predeterminado" +noCustomEmojis: "No hay emojis personalizados" +noJobs: "No hay trabajos" +federating: "Federando" +blocked: "Bloqueando" +suspended: "Suspendido" +all: "Todo" +subscribing: "Suscribiendo" +publishing: "Publicando" +notResponding: "Sin respuestas" +instanceFollowing: "Siguiendo en este servidor" +instanceFollowers: "Seguidores del servidor" +instanceUsers: "Usuarios de este servidor" +changePassword: "Cambiar contraseña" +security: "Seguridad" +retypedNotMatch: "No hay coincidencia." +currentPassword: "Contraseña actual" +newPassword: "Contraseña nueva" +newPasswordRetype: "Contraseña nueva (repetir)" +attachFile: "Añadir archivo" +more: "¡Más!" +featured: "Destacados" +usernameOrUserId: "Nombre o ID del usuario" +noSuchUser: "No se encuentra el usuario" +lookup: "Búsqueda" +announcements: "Anuncios" +imageUrl: "URL de la imágen" +remove: "Borrar" +removed: "Borrado" +removeAreYouSure: "¿Desea borrar \"{x}\"?" +deleteAreYouSure: "¿Desea borrar \"{x}\"?" +resetAreYouSure: "¿Desea reestablecer?" +saved: "Guardado" +messaging: "Chat" +upload: "Subir" +keepOriginalUploading: "Mantener la imagen original" +keepOriginalUploadingDescription: "Mantener la versión original al cargar imágenes. + Si está desactivado, el navegador generará imágenes para la publicación web en el + momento de recargar la página." +fromDrive: "Desde el drive" +fromUrl: "Desde la URL" +uploadFromUrl: "Subir desde una URL" +uploadFromUrlDescription: "URL del fichero que quieres subir" +uploadFromUrlRequested: "Subida solicitada" +uploadFromUrlMayTakeTime: "Subir el fichero puede tardar un tiempo." +explore: "Explorar" +messageRead: "Ya leído" +noMoreHistory: "El historial se ha acabado" +startMessaging: "Iniciar chat" +nUsersRead: "Leído por {n} personas" +agreeTo: "De acuerdo con {0}" +tos: "Términos de uso" +start: "Comenzar" +home: "Inicio" +remoteUserCaution: "La información del usuario remoto esta incompleta." +activity: "Actividad" +images: "Imágenes" +birthday: "Fecha de nacimiento" +yearsOld: "{age} años" +registeredDate: "Fecha de registro" +location: "Lugar" +theme: "Tema" +themeForLightMode: "Tema para usar en Modo Linterna" +themeForDarkMode: "Tema para usar en Modo Oscuro" +light: "Linterna" +dark: "Oscuro" +lightThemes: "Tema claro" +darkThemes: "Tema oscuro" +syncDeviceDarkMode: "Sincronice el Modo Oscuro con la configuración de su dispositivo" +drive: "Drive" +fileName: "Nombre de archivo" +selectFile: "Elegir archivo" +selectFiles: "Elegir archivos" +selectFolder: "Seleccione una carpeta" +selectFolders: "Seleccione carpetas" +renameFile: "Renombrar archivo" +folderName: "Nombre de la carpeta" +createFolder: "Crear carpeta" +renameFolder: "Renombrar carpeta" +deleteFolder: "Borrar carpeta" +addFile: "Agregar archivo" +emptyDrive: "El drive está vacío" +emptyFolder: "La carpeta está vacía" +unableToDelete: "No se puede borrar" +inputNewFileName: "Ingrese un nuevo nombre de archivo" +inputNewDescription: "Ingrese nueva descripción" +inputNewFolderName: "Ingrese un nuevo nombre de la carpeta" +circularReferenceFolder: "La carpeta de destino es una sub-carpeta de la carpeta que + quieres mover." +hasChildFilesOrFolders: "No se puede borrar esta carpeta. No está vacía." +copyUrl: "Copiar URL" +rename: "Renombrar" +avatar: "Avatar" +banner: "Banner" +nsfw: "Marcado como sensible" +whenServerDisconnected: "Cuando se pierda la conexión con el servidor" +disconnectedFromServer: "Desconectado del servidor" +reload: "Recargar" +doNothing: "No hacer nada" +reloadConfirm: "¿Desea recargar?" +watch: "Ver" +unwatch: "Dejar de ver" +accept: "Aceptar" +reject: "Rechazar" +normal: "Normal" +instanceName: "Nombre del servidor" +instanceDescription: "Descripción del servidor" +maintainerName: "Nombre del administrador" +maintainerEmail: "Correo del administrador" +tosUrl: "URL de los términos de uso" +thisYear: "Este año" +thisMonth: "Este mes" +today: "Hoy" +dayX: "Día {day}" +monthX: "Mes {month}" +yearX: "Año {year}" +pages: "Páginas" +enableLocalTimeline: "Habilitar linea de tiempo local" +enableGlobalTimeline: "Habilitar linea de tiempo global" +disablingTimelinesInfo: "Aunque se desactiven estas lineas de tiempo, por conveniencia + el administrador y los moderadores pueden seguir usándolos" +registration: "Registro" +enableRegistration: "Permitir nuevos registros" +invite: "Invitar" +driveCapacityPerLocalAccount: "Capacidad del drive por usuario local" +driveCapacityPerRemoteAccount: "Capacidad del drive por usuario remoto" +inMb: "En megabytes" +iconUrl: "URL de la imagen del avatar" +bannerUrl: "URL de la imagen del banner" +backgroundImageUrl: "URL de la imagen de fondo" +basicInfo: "Información básica" +pinnedUsers: "Usuarios fijados" +pinnedUsersDescription: "Describir los usuarios que quiere fijar en la pestaña \"\ + Explorar\" separados por líneas nuevas." +pinnedPages: "Páginas fijadas" +pinnedPagesDescription: "Describa las rutas de las páginas que desea fijar a la página + principal del servidor, separadas por líneas nuevas." +pinnedClipId: "Id del clip fijado" +pinnedNotes: "Publicación fijada" +hcaptcha: "hCaptcha" +enableHcaptcha: "Habilitar hCaptcha" +hcaptchaSiteKey: "Clave del sitio" +hcaptchaSecretKey: "Clave secreta" +recaptcha: "reCAPTCHA" +enableRecaptcha: "activar reCAPTCHA" +recaptchaSiteKey: "Clave del sitio" +recaptchaSecretKey: "Clave secreta" +avoidMultiCaptchaConfirm: "El uso de múltiples Captchas puede causar interferencia. + ¿Desea desactivar el otro Captcha? Puede dejar múltiples Captchas habilitadas presionando + cancelar." +antennas: "Antenas" +manageAntennas: "Administrar antenas" +name: "Nombre" +antennaSource: "Origen de la antena" +antennaKeywords: "Palabras clave para recibir" +antennaExcludeKeywords: "Palabras clave para excluir" +antennaKeywordsDescription: "Separar con espacios es una declaración AND, separar + con una linea nueva es una declaración OR" +notifyAntenna: "Notificar nueva publicación" +withFileAntenna: "Sólo publicaciones con archivos adjuntados" +enableServiceworker: "Activar ServiceWorker" +antennaUsersDescription: "Elegir nombres de usuarios separados por una linea nueva" +caseSensitive: "Distinguir mayúsculas de minúsculas" +withReplies: "Incluir respuestas" +connectedTo: "Estas cuentas están conectadas" +notesAndReplies: "Publicaciones y respuestas" +withFiles: "Adjuntos" +silence: "Silenciar" +silenceConfirm: "¿Desea silenciar al usuario?" +unsilence: "Dejar de silenciar" +unsilenceConfirm: "¿Desea dejar de silenciar al usuario?" +popularUsers: "Usuarios populares" +recentlyUpdatedUsers: "Usuarios activos recientemente" +recentlyRegisteredUsers: "Usuarios registrados recientemente" +recentlyDiscoveredUsers: "Usuarios descubiertos recientemente" +exploreUsersCount: "Hay {count} usuarios" +exploreFediverse: "Explorar fediverso" +popularTags: "Etiquetas populares" +userList: "Lista" +about: "Información" +aboutFirefish: "Sobre Firefish" +administrator: "Administrador" +token: "Token" +twoStepAuthentication: "Autenticación de dos factores" +moderator: "Moderador" +moderation: "Moderación" +nUsersMentioned: "{n} usuarios mencionados" +securityKey: "Clave de seguridad" +securityKeyName: "Nombre de la Clave" +registerSecurityKey: "Registrar clave de seguridad" +lastUsed: "Última vez usado" +unregister: "Cancelar registro" +passwordLessLogin: "Iniciar sesión sin contraseña" +resetPassword: "Resetear contraseña" +newPasswordIs: "La nueva contraseña es \"{password}\"" +reduceUiAnimation: "Reducir la animación de la UI" +share: "Compartir" +notFound: "No se encuentra" +notFoundDescription: "No se encontró la página correspondiente a la URL elegida" +uploadFolder: "Carpeta de subidas por defecto" +cacheClear: "Borrar caché" +markAsReadAllNotifications: "Marcar todas las notificaciones como leídas" +markAsReadAllUnreadNotes: "Marcar todas las publicaciones como leídas" +markAsReadAllTalkMessages: "Marcar todos los chats como leídos" +help: "Ayuda" +inputMessageHere: "Escribe el mensaje aquí" +close: "Cerrar" +group: "Grupo" +groups: "Grupos" +createGroup: "Crear grupo" +ownedGroups: "Tus" +joinedGroups: "Grupos a los que me uní" +invites: "Invitar" +groupName: "Nombre del grupo" +members: "Miembros" +transfer: "Transferir" +messagingWithUser: "Chatear con usuario" +messagingWithGroup: "Chatear en grupo" +title: "Título" +text: "Texto" +enable: "Activar" +next: "Siguiente" +retype: "Intentar de nuevo" +noteOf: "Publicaciones de {user}" +inviteToGroup: "Invitar al grupo" +quoteAttached: "Cita añadida" +quoteQuestion: "¿Quiere añadir una cita?" +noMessagesYet: "Aún no hay chat" +newMessageExists: "Tienes un mensaje nuevo" +onlyOneFileCanBeAttached: "Solo se puede añadir un archivo al mensaje" +signinRequired: "Iniciar sesión" +invitations: "Invitar" +invitationCode: "Código de invitación" +checking: "Comprobando" +available: "Disponible" +unavailable: "No disponible" +usernameInvalidFormat: "utiliza letras, números y/o -." +tooShort: "Demasiado corto" +tooLong: "Demasiado largo" +weakPassword: "Contraseña débil" +normalPassword: "Buena contraseña" +veryStrongPassword: "Muy buena contraseña" +passwordMatched: "Correcto" +passwordNotMatched: "Las contraseñas no son las mismas" +signinWith: "Inicie sesión con {x}" +signinFailed: "Autenticación fallida. Asegúrate de haber usado el nombre de usuario + y contraseña correctos." +tapSecurityKey: "Toque la clave de seguridad" +or: "O" +language: "Idioma" +uiLanguage: "Idioma de visualización de la interfaz" +groupInvited: "Invitado al grupo" +aboutX: "Acerca de {x}" +useOsNativeEmojis: "Usa los emojis nativos de la plataforma" +disableDrawer: "No mostrar los menús en cajones" +youHaveNoGroups: "Sin grupos" +joinOrCreateGroup: "Obtenga una invitación para unirse al grupos o puede crear su + propio grupo." +noHistory: "No hay datos en el historial" +signinHistory: "Historial de ingresos" +disableAnimatedMfm: "Deshabilitar MFM que tiene animaciones" +doing: "Voy en camino" +category: "Categoría" +tags: "Etiqueta" +docSource: "Fuente de este documento" +createAccount: "Crear cuenta" +existingAccount: "Cuenta existente" +regenerate: "Regenerar" +fontSize: "Tamaño de la letra" +noFollowRequests: "No hay solicitudes de seguimiento" +openImageInNewTab: "Abrir imagen en nueva pestaña" +dashboard: "Panel de control" +local: "Local" +remote: "Remoto" +total: "Total" +weekOverWeekChanges: "Dif semanal" +dayOverDayChanges: "Dif diaria" +appearance: "Apariencia" +clientSettings: "Configuración del cliente" +accountSettings: "Ajustes de cuenta" +promotion: "Promovido" +promote: "Promover" +numberOfDays: "Cantidad de dias" +hideThisNote: "Ocultar esta publicación" +showFeaturedNotesInTimeline: "Mostrar publicaciones destacadas en la línea de tiempo" +objectStorage: "Almacenamiento de objetos" +useObjectStorage: "Usar almacenamiento de objetos" +objectStorageBaseUrl: "Base URL" +objectStorageBaseUrlDesc: "Prefijo de URL utilizado para construir URL para hacer + referencia a objetos (medios). Especifique su URL si está utilizando un CDN o Proxy; + de lo contrario, especifique la dirección a la que se puede acceder públicamente + de acuerdo con la guía de servicio que va a utilizar. i.g 'https://.s3.amazonaws.com' + para AWS S3 y 'https://storage.googleapis.com/' para GCS." +objectStorageBucket: "Bucket" +objectStorageBucketDesc: "Especifique el nombre del depósito utilizado en el servicio + configurado." +objectStoragePrefix: "Prefix" +objectStoragePrefixDesc: "Los archivos se almacenarán en el directorio de este prefijo." +objectStorageEndpoint: "Endpoint" +objectStorageEndpointDesc: "Deje esto en blanco si está utilizando AWS S3; de lo contrario, + especifique el punto final como '' o ': ' de acuerdo con la guía + de servicio que va a utilizar." +objectStorageRegion: "Region" +objectStorageRegionDesc: "Especifique una región como 'xx-east-1'. Si su servicio + no tiene distinción sobre regiones, déjelo en blanco o complete con 'us-east-1'." +objectStorageUseSSL: "Usar SSL" +objectStorageUseSSLDesc: "Desactive esto si no va a usar HTTPS para la conexión API" +objectStorageUseProxy: "Conectarse a través de Proxy" +objectStorageUseProxyDesc: "Desactive esto si no va a usar Proxy para la conexión + de Almacenamiento de objetos" +objectStorageSetPublicRead: "Seleccionar \"public-read\" al subir " +serverLogs: "Registros del servidor" +deleteAll: "Eliminar todos" +showFixedPostForm: "Mostrar el formulario de las entradas encima de la línea de tiempo" +newNoteRecived: "Hay publicaciones nuevas" +sounds: "Sonidos" +listen: "Escuchar" +none: "Ninguna" +showInPage: "Mostrar en la página" +popout: "Popout" +volume: "Volumen" +masterVolume: "Volumen principal" +details: "Detalles" +chooseEmoji: "Elije un emoji" +unableToProcess: "La operación no se puede llevar a cabo" +recentUsed: "Usado recientemente" +install: "Instalación" +uninstall: "Desinstalar" +installedApps: "Aplicaciones Autorizadas" +nothing: "No hay nada que ver aqui" +installedDate: "Autorizado" +lastUsedDate: "Utilizado el" +state: "Estado" +sort: "Ordenar" +ascendingOrder: "Ascendente" +descendingOrder: "Descendente" +scratchpad: "Scratch pad" +scratchpadDescription: "Scratchpad proporciona un entorno experimental para AiScript. + Puede escribir, ejecutar y verificar los resultados que interactúan con Firefish." +output: "Salida" +script: "Script" +disablePagesScript: "Deshabilitar AiScript en Páginas" +updateRemoteUser: "Actualizar información de usuario remoto" +deleteAllFiles: "Borrar todos los archivos" +deleteAllFilesConfirm: "¿Desea borrar todos los archivos?" +removeAllFollowing: "Retener todos los siguientes" +removeAllFollowingDescription: "Al ejecutar esto todas las cuentas de {host} dejarán + de seguirse. Por favor, ejecuta esto si el servidor ya no existe." +userSuspended: "Este usuario ha sido suspendido." +userSilenced: "Este usuario ha sido silenciado." +yourAccountSuspendedTitle: "Esta cuenta ha sido suspendida" +yourAccountSuspendedDescription: "Esta cuenta ha sido suspendida debido a violaciones + de los términos de servicio del servidor y otras razones. Para más información, + póngase en contacto con el administrador. Por favor, no cree una nueva cuenta." +menu: "Menú" +divider: "Divisor" +addItem: "Agregar elemento" +relays: "Relés" +addRelay: "Agregar relé" +inboxUrl: "Inbox URL" +addedRelays: "Relés añadidos" +serviceworkerInfo: "Se necesita activar para usar las notificaciones push" +deletedNote: "Publicación eliminada" +invisibleNote: "Publicación oculta" +enableInfiniteScroll: "Activar scroll infinito" +visibility: "Visibilidad" +poll: "Encuesta" +useCw: "Esconder contenidos" +enablePlayer: "Abrir reproductor" +disablePlayer: "Cerrar reproductor" +expandTweet: "Expandir tweet" +themeEditor: "Editor de temas" +description: "Descripción" +describeFile: "Añade una descripción" +enterFileDescription: "Introducir un título" +author: "Autor" +leaveConfirm: "Hay modificaciones sin guardar. ¿Desea descartarlas?" +manage: "Administrar" +plugins: "Plugins" +preferencesBackups: "Respaldo de preferencias" +deck: "Deck" +undeck: "Quitar deck" +useBlurEffectForModal: "Usar efecto borroso en modales" +useFullReactionPicker: "Reacción" +width: "Ancho" +height: "Altura" +large: "Grande" +medium: "Mediano" +small: "Pequeño" +generateAccessToken: "Generar token de acceso" +permission: "Permisos" +enableAll: "Activar todo" +disableAll: "Desactivar todo" +tokenRequested: "Permiso de acceso a la cuenta" +pluginTokenRequestedDescription: "Este plugin podrá usar los permisos descritos aquí" +notificationType: "Tipo de notificación" +edit: "Editar" +emailServer: "Servidor de correo" +enableEmail: "Activar el envío de correos electrónicos" +emailConfigInfo: "Usar en caso de validación de correo electrónico y pedido de contraseña" +email: "Correo" +emailAddress: "Correo electrónico" +smtpConfig: "Configuración del servidor SMTP" +smtpHost: "Host" +smtpPort: "Puerto" +smtpUser: "Nombre de usuario" +smtpPass: "Contraseña" +emptyToDisableSmtpAuth: "Deje el nombre del usuario y la contraseña en blanco para + deshabilitar la autenticación SMTP" +smtpSecure: "Usar SSL/TLS implícito en la conexión SMTP" +smtpSecureInfo: "Apagar cuando se use STARTTLS" +testEmail: "Prueba de envío" +wordMute: "Silenciar palabras y lenguajes" +regexpError: "Error de la expresión regular" +regexpErrorDescription: "Ocurrió un error en la expresión regular en la linea {line} + de las palabras muteadas {tab}" +instanceMute: "Servidores silenciados" +userSaysSomething: "{name} dijo algo" +makeActive: "Activar" +display: "Apariencia" +copy: "Copiar" +metrics: "Métricas" +overview: "Resumen" +logs: "Registros" +delayed: "atrasado" +database: "Base de datos" +channel: "Canal" +create: "Crear" +notificationSetting: "Ajustes de Notificaciones" +notificationSettingDesc: "Por favor elija el tipo de notificación a mostrar" +useGlobalSetting: "Usar ajustes globales" +useGlobalSettingDesc: "Al activarse, se usará la configuración de notificaciones de + la cuenta, al desactivarse se pueden hacer configuraciones particulares." +other: "Otro" +regenerateLoginToken: "Regenerar token de login" +regenerateLoginTokenDescription: "Regenerar el token usado internamente durante el + login. No siempre es necesario hacerlo. Al hacerlo de nuevo, se deslogueará en todos + los dispositivos." +setMultipleBySeparatingWithSpace: "Puedes añadir mas de uno, separado por espacios." +fileIdOrUrl: "Id del archivo o URL" +behavior: "Comportamiento" +sample: "Muestra" +abuseReports: "Reportes" +reportAbuse: "Reportar" +reportAbuseOf: "Reportar a {name}" +fillAbuseReportDescription: "Ingrese los detalles del reporte. Si hay una publicación + en particular, ingrese la URL de esta." +abuseReported: "Se ha enviado el reporte. Muchas gracias." +reporter: "Reportador" +reporteeOrigin: "Reportar a" +reporterOrigin: "Origen del reporte" +forwardReport: "Transferir reporte a un servidor remoto" +forwardReportIsAnonymous: "No puede ver su información del servidor remoto y aparecerá + como una cuenta anónima del sistema" +send: "Enviar" +abuseMarkAsResolved: "Marcar reporte como resuelto" +openInNewTab: "Abrir en una Nueva Pestaña" +openInSideView: "Abrir en una vista al costado" +defaultNavigationBehaviour: "Navegación por defecto" +editTheseSettingsMayBreakAccount: "Editar estas configuraciones puede dañar su cuenta." +instanceTicker: "Información de publicaciones de el servidor" +waitingFor: "Esperando a {x}" +random: "Aleatorio" +system: "Sistema" +switchUi: "Interfaz" +desktop: "Escritorio" +clip: "Clip" +createNew: "Crear" +optional: "Opcional" +createNewClip: "Crear clip nuevo" +unclip: "Quitar clip" +confirmToUnclipAlreadyClippedNote: "Esta publicación ya está incluida en el clip \"\ + {name}\". ¿Quiere quitar la nota del clip?" +public: "Público" +i18nInfo: "Firefish está siendo traducido a varios idiomas gracias a voluntarios. + Se puede colaborar traduciendo en {link}" +manageAccessTokens: "Administrar tokens de acceso" +accountInfo: "Información de la Cuenta" +notesCount: "Cantidad de publicaciones" +repliesCount: "Cantidad de respuestas hechas" +renotesCount: "Número de impulsos enviados" +repliedCount: "Cantidad de respuestas recibidas" +renotedCount: "Cantidad de impulsos recibidos" +followingCount: "Cantidad de seguidos" +followersCount: "Cantidad de seguidores" +sentReactionsCount: "Cantidad de reacciones hechas" +receivedReactionsCount: "Cantidad de reacciones recibidas" +pollVotesCount: "Cantidad de votaciones hechas" +pollVotedCount: "Cantidad de votaciones recibidas" +yes: "Si" +no: "No" +driveFilesCount: "Cantidad de archivos en el drive" +driveUsage: "Uso del drive" +noCrawle: "Rechazar indexación del crawler" +noCrawleDescription: "Pedir a los motores de búsqueda que no indexen tu perfil, publicaciones, + páginas, etc." +lockedAccountInfo: "A menos que configures la visibilidad de tus publicaciones como + \"Sólo seguidores\", tus publicaciones serán visibles para cualquiera, incluso si + requieres que los seguidores sean aprobados manualmente." +alwaysMarkSensitive: "Marcar los medios de comunicación como contenido sensible por + defecto" +loadRawImages: "Cargar las imágenes originales en lugar de mostrar las miniaturas" +disableShowingAnimatedImages: "No reproducir imágenes animadas" +verificationEmailSent: "Se le ha enviado un correo electrónico de confirmación. Por + favor, acceda al enlace proporcionado en el correo electrónico para completar la + configuración." +notSet: "Sin especificar" +emailVerified: "Su dirección de correo electrónico ha sido verificada." +noteFavoritesCount: "Número de publicaciones favoritas" +pageLikesCount: "Número de favoritos en la página" +pageLikedCount: "Número de favoritos de su página" +contact: "Contacto" +useSystemFont: "Utilizar la tipografía por defecto del sistema" +clips: "Clip" +experimentalFeatures: "Características experimentales" +developer: "Desarrolladores" +makeExplorable: "Hacer visible la cuenta en \"Explorar\"" +makeExplorableDescription: "Si desactiva esta opción, su cuenta no aparecerá en la + sección \"Explorar\"." +showGapBetweenNotesInTimeline: "Mostrar un intervalo entre notas en la línea de tiempo" +duplicate: "Duplicar" +left: "Izquierda" +center: "Centrar" +wide: "Ancho" +narrow: "Estrecho" +reloadToApplySetting: "Esta configuración sólo se aplicará después de recargar la + página. ¿Recargar ahora?" +needReloadToApply: "Se requiere un reinicio para la aplicar los cambios" +showTitlebar: "Mostrar la barra de título" +clearCache: "Limpiar caché" +onlineUsersCount: "{n} usuarios en línea" +nUsers: "{n} Usuarios" +nNotes: "{n} Publicaciones" +sendErrorReports: "Envíar informe de errores" +sendErrorReportsDescription: "Si habilita esta opción, los detalles de los errores + serán compartidos con Firefish cuando ocurra un problema, lo que ayudará a mejorar + la calidad de Firefish. \nEsto incluye información como la versión del sistema operativo, + el tipo de navegador que está utilizando y su historial en Firefish, entre otros + datos." +myTheme: "Mi Tema" +backgroundColor: "Fondo" +accentColor: "Acento" +textColor: "Texto" +saveAs: "Guardar como…" +advanced: "Avanzado" +value: "Valores" +createdAt: "Fecha de creación" +updatedAt: "Actualizado" +saveConfirm: "¿Guardar cambios?" +deleteConfirm: "¿Desea eliminarlo?" +invalidValue: "Este no es un valor válido." +registry: "Registro" +closeAccount: "Cerrar cuenta" +currentVersion: "Versión actual" +latestVersion: "Última versión" +youAreRunningUpToDateClient: "Está utilizando la versión más reciente de su cliente." +newVersionOfClientAvailable: "Hay una versión más nueva de su cliente disponible." +usageAmount: "Uso" +capacity: "Capacidad" +inUse: "Usado" +editCode: "Editar código" +apply: "Aplicar" +receiveAnnouncementFromInstance: "Recibir notificaciones de este servidor" +emailNotification: "Notificaciones por correo electrónico" +publish: "Publicar" +inChannelSearch: "Buscar en el canal" +useReactionPickerForContextMenu: "Haga clic con el botón derecho para abrir el menu + de reacciones" +typingUsers: "{users} está escribiendo" +jumpToSpecifiedDate: "Saltar a una fecha específica" +showingPastTimeline: "Mostrar líneas de tiempo antiguas" +clear: "Limpiar" +markAllAsRead: "Marcar todo como leído" +goBack: "Deseleccionar" +unlikeConfirm: "¿Quitar como favorito?" +fullView: "Vista completa" +quitFullView: "quitar vista completa" +addDescription: "Agregar descripción" +userPagePinTip: "Puede mantener tus publicaciones visibles aquí seleccionando Pin + en el menú de notas individuales." +notSpecifiedMentionWarning: "Esta publicacion contiene menciones a usuarios no incluídos + como destinatarios" +info: "Información" +userInfo: "Información del usuario" +unknown: "Desconocido" +onlineStatus: "En línea" +hideOnlineStatus: "mostrarse como desconectado" +hideOnlineStatusDescription: "Ocultar su estado en línea puede reducir la eficacia + de algunas funciones, como la búsqueda" +online: "En línea" +active: "Activo" +offline: "Sin conexión" +notRecommended: "obsoleto" +botProtection: "Protección contra bots" +instanceBlocking: "Gestión de la Federación" +selectAccount: "Elija una cuenta" +switchAccount: "Cambiar de cuenta" +enabled: "Activado" +disabled: "Desactivado" +quickAction: "Acciones rápidas" +user: "Usuarios" +administration: "Administrar" +accounts: "Cuentas" +switch: "Cambiar" +noMaintainerInformationWarning: "No se ha establecido la información del administrador" +noBotProtectionWarning: "La protección contra los bots no está configurada" +configure: "Configurar" +postToGallery: "Crear una nueva publicación en la galería" +gallery: "Galería" +recentPosts: "Posts recientes" +popularPosts: "Más vistos" +shareWithNote: "Compartir con una publicación" +ads: "Banners de la comunidad" +expiration: "Termina el" +memo: "Notas" +priority: "Prioridad" +high: "Alta" +middle: "Mediano" +low: "Baja" +emailNotConfiguredWarning: "No se ha configurado una dirección de correo electrónico." +ratio: "Proporción" +previewNoteText: "Mostrar vista preliminar" +customCss: "CSS personalizado" +customCssWarn: "Este ajuste sólo debe utilizarse si se sabe lo que hace. Introducir + valores inadecuados puede hacer que el cliente deje de funcionar con normalidad." +global: "Global" +squareAvatars: "Mostrar iconos cuadrados" +sent: "Enviar" +received: "Recibido" +searchResult: "Resultados de búsqueda" +hashtags: "Hashtag" +troubleshooting: "Solución de problemas" +useBlurEffect: "Utilizar efecto de desenfoque en la interfaz de usuario" +learnMore: "Ver más" +misskeyUpdated: "¡Firefish ha sido actualizado!" +whatIsNew: "Mostrar cambios" +translate: "Traducir" +translatedFrom: "Traducido de {x}" +accountDeletionInProgress: "La eliminación de la cuenta está en curso" +usernameInfo: "Un nombre que identifique su cuenta de otras en este servidor. Puede + utilizar el alfabeto (a~z, A~Z), dígitos (0~9) o guiones bajos (_). Los nombres + de usuario no se pueden cambiar posteriormente." +aiChanMode: "Modo Ai" +keepCw: "Mantener la advertencia de contenido" +pubSub: "Cuentas Pub/Sub" +lastCommunication: "Última comunicación" +resolved: "Resuelto" +unresolved: "Sin resolver" +breakFollow: "Quitar seguidor" +itsOn: "¡Está encendido!" +itsOff: "¡Está apagado!" +emailRequiredForSignup: "Se requere una dirección de correo electrónico para el registro + de la cuenta" +unread: "No leído" +filter: "Filtro" +controlPanel: "Panel de control" +manageAccounts: "Administrar cuenta" +makeReactionsPublic: "Hacer el historial de reacciones público" +makeReactionsPublicDescription: "Todas las reacciones que hayas hecho serán públicamente + visibles." +classic: "Centrado" +muteThread: "Ocultar hilo" +unmuteThread: "Mostrar hilo" +ffVisibility: "Visibilidad de seguidores y seguidos" +ffVisibilityDescription: "Puedes configurar quien puede ver a quienes sigues y quienes + te siguen" +continueThread: "Continuar hilo" +deleteAccountConfirm: "La cuenta será borrada irreversiblemente. ¿Está seguro?" +incorrectPassword: "La contraseña es incorrecta" +voteConfirm: "¿Confirma su voto a {choice}?" +hide: "Ocultar" +leaveGroup: "Dejar el grupo" +leaveGroupConfirm: "¿Desea salir de {name}?" +useDrawerReactionPickerForMobile: "Mostrar panel de reacciones en móviles" +welcomeBackWithName: "Bienvenido otra vez, {name}" +clickToFinishEmailVerification: "Cliquée {ok} y verifique su correo" +overridedDeviceKind: "Tipo de dispositivo" +smartphone: "Teléfono smartphone" +tablet: "Tablet" +auto: "Automático" +themeColor: "Color de la marquesina del servidor" +size: "Tamaño" +numberOfColumn: "Cantidad de columnas" +instanceDefaultLightTheme: "Tema claro por defecto del servidor" +instanceDefaultDarkTheme: "Tema oscuro por defecto del servidor" +instanceDefaultThemeDescription: "Ingrese el código del tema en formato objeto" +mutePeriod: "Período de silenciamiento" +indefinitely: "Sin límite de tiempo" +tenMinutes: "10 minutos" +oneHour: "1 hora" +oneDay: "1 día" +oneWeek: "1 semana" +reflectMayTakeTime: "Puede pasar un tiempo hasta que se reflejen los cambios" +failedToFetchAccountInformation: "No se pudo obtener información de la cuenta" +rateLimitExceeded: "Se excedió el límite de peticiones" +cropImage: "Recortar imágen" +cropImageAsk: "¿Desea recortar la imagen?" +file: "Archivos" +recentNHours: "Últimas {n} horas" +recentNDays: "Últimos {n} días" +noEmailServerWarning: "No se ha configurado un servidor de correo electrónico." +thereIsUnresolvedAbuseReportWarning: "Hay reportes sin resolver" +recommended: "Recomendado" +check: "Verificar" +driveCapOverrideLabel: "Cambiar la capacidad de la unidad para este usuario" +driveCapOverrideCaption: "Restablecer la capacidad a su predeterminado ingresando + un valor de 0 o menos" +requireAdminForView: "Necesitas iniciar sesión como administrador para ver esto." +isSystemAccount: "Esta cuenta es creada y operada automaticamente por el sistema. + Porfavor no moderar, editar, borrar o manipular de ninguna forma esta cuenta, o + podría romper tu servidor." +typeToConfirm: "Ingrese {x} para confirmar" +deleteAccount: "Borrar cuenta" +document: "Documento" +numberOfPageCache: "Cantidad de páginas cacheadas" +numberOfPageCacheDescription: "Al aumentar el número mejora la conveniencia pero tambien + puede aumentar la carga y la memoria a usarse" +logoutConfirm: "¿Cerrar sesión?" +lastActiveDate: "Utilizado por última vez el" +statusbar: "Barra de estado" +pleaseSelect: "Selecciona una opción" +reverse: "Echar de un capirotazo" +colored: "Color" +refreshInterval: "Intervalo de actualización" +label: "Etiqueta" +type: "Tipo" +speed: "Velocidad" +slow: "Lento" +fast: "Rápido" +sensitiveMediaDetection: "Detección de contenido NSFW" +localOnly: "Solo local" +remoteOnly: "Sólo remoto" +failedToUpload: "La subida falló" +cannotUploadBecauseInappropriate: "Este archivo no se puede subir debido a que algunas + partes han sido detectadas comoNSFW." +cannotUploadBecauseNoFreeSpace: "La subida falló debido a falta de espacio libre en + la unidad del usuario." +beta: "Beta" +enableAutoSensitive: "Marcar automáticamente contenido NSFW" +enableAutoSensitiveDescription: "Permite la detección y marcado automático de contenido + NSFW usando 'Machine Learning' cuando sea posible. Incluso si esta opción está desactivada, + puede ser activado para todo el servidor." +activeEmailValidationDescription: "Habilita la validación estricta de direcciones + de correo electrónico, lo cual incluye la revisión de direcciones desechables y + si se puede comunicar con éstas. Cuando está deshabilitado, sólo el formato de la + dirección es validado." +navbar: "Barra de navegación" +shuffle: "Aleatorio" +account: "Cuentas" +move: "Mover" +_sensitiveMediaDetection: + description: "Reduce el esfuerzo de la moderación de el servidor a través del reconocimiento + automático de contenido NSFW usando 'Machine Learning'. Esto puede incrementar + ligeramente la carga en el servidor." + sensitivity: "Sensibilidad de detección" + sensitivityDescription: "Reducir la sensibilidad puede acarrear a varios falsos + positivos, mientras que incrementarla puede reducir las detecciones (falsos negativos)." + setSensitiveFlagAutomatically: "Marcar como NSFW" + setSensitiveFlagAutomaticallyDescription: "Los resultados de la detección interna + pueden ser retenidos incluso si la opción está desactivada." + analyzeVideos: "Habilitar el análisis de videos" + analyzeVideosDescription: "Analizar videos en adición a las imágenes. Esto puede + incrementar ligeramente la carga del servidor." +_emailUnavailable: + used: "Ya fue usado" + format: "El formato de este correo electrónico no es válido" + disposable: "No se pueden utilizar direcciones de correo electrónico desechables" + mx: "Servidor de correo inválido" + smtp: "Servidor de correo no disponible" +_ffVisibility: + public: "Público" + followers: "Visible solo para seguidores" + private: "Privado" +_signup: + almostThere: "Ya falta poco" + emailAddressInfo: "Ingrese el correo electrónico que usa. Este no se hará público." + emailSent: "Se envió un correo de verificación a la dirección {email}. Acceda al + link enviado en el correo para completar el ingreso." +_accountDelete: + accountDelete: "Eliminar Cuenta" + mayTakeTime: "La eliminación de la cuenta es un proceso que precisa de carga. Puede + pasar un tiempo hasta que se complete si es mucho el contenido creado y los archivos + subidos." + sendEmail: "Cuando se termine de borrar la cuenta, se enviará un correo a la dirección + usada para el registro." + requestAccountDelete: "Solicitar la eliminación de su cuenta" + started: "El proceso de eliminación ha comenzado." + inProgress: "La eliminación está en proceso" +_ad: + back: "Deseleccionar" + reduceFrequencyOfThisAd: "mostrar este anuncio con menos frecuencia" + adsBy: 'Este Banner de la comunidad fue creado por : {by}' +_forgotPassword: + enterEmail: "Ingrese el correo usado para registrar la cuenta. Se enviará un link + para resetear la contraseña." + ifNoEmail: "Si no utilizó un correo para crear la cuenta, contáctese con el administrador." + contactAdmin: "Este servidor no admite el uso de direcciones de correo electrónico, + póngase en contacto con la persona que administra el servidor para restablecer + su contraseña." +_gallery: + my: "Mi galería" + liked: "Publicaciones que me gustan" + like: "Me gusta" + unlike: "Quitar me gusta" +_email: + _follow: + title: "te ha seguido" + _receiveFollowRequest: + title: "Has recibido una solicitud de seguimiento" +_plugin: + install: "Instalar plugins" + installWarn: "Por favor no instale plugins (Extenciones externales) que no son de + confianza." + manage: "Gestionar plugins" +_preferencesBackups: + list: "Respaldos creados" + saveNew: "Guardar nuevo respaldo" + loadFile: "Cargar desde archivo" + apply: "Aplicar a este dispositivo" + save: "Guardar cambios" + inputName: "Por favor, ingresa un nombre para este respaldo" + cannotSave: "Fallo al guardar" + nameAlreadyExists: "Un respaldo llamado \"{name}\" ya existe. Por favor ingrese + un nombre diferente." + applyConfirm: "¿Estas seguro que quieres aplicar los cambios desde el archivo \"\ + {name}\" a este dispositivo? Las configuraciones existentes serán sobreescritas." + saveConfirm: "¿Guardar respaldo como \"{name}\"?" + deleteConfirm: "¿Borrar el respaldo \"{name}\"?" + renameConfirm: "¿Renombrar este respaldo de \"{old}\" a \"{new}\"?" + noBackups: "No existen respaldos. Puedes respaldar las configuraciones de tu cliente + en este servidor usando el boton,\"Crear nuevo respaldo\"." + createdAt: "Creado: {date} {time}" + updatedAt: "Actualizado: {date} {time}" + cannotLoad: "La carga falló" + invalidFile: "Formato de archivo inválido" +_registry: + scope: "Alcance" + key: "Clave" + keys: "Clave" + domain: "Dominio" + createKey: "Crear una llave" +_aboutFirefish: + about: "Firefish es una bifurcación de Misskey creada por ThatOneCalculator, que + ha estado en desarrollo desde el 2022." + contributors: "Principales colaboradores" + allContributors: "Todos los colaboradores" + source: "Código fuente" + translation: "Traducir Firefish" + donate: "Donar a Firefish" + pleaseDonateToFirefish: Por favor considera donar a Firefish para apoyar su desarrollo. + donateHost: Dona a {host} + donateTitle: ¿Te gusta Firefish? + pleaseDonateToHost: También considera donar a tu propio servidor , {host}, para + ayudar con los costos de operación. + misskeyContributors: Contribuidores de Misskey +_nsfw: + respect: "Ocultar medios NSFW" + ignore: "No esconder medios NSFW " + force: "Ocultar todos los medios" +_mfm: + cheatSheet: "Hoja de referencia de MFM" + intro: "MFM es un lenguaje de marcado dedicado que se puede usar en varios lugares + dentro de Misskey, Firefish, Akkoma, y mucho más. Aquí puede ver una lista de + sintaxis disponibles en MFM." + dummy: "Firefish expande el mundo de la Fediverso" + mention: "Menciones" + mentionDescription: "El signo @ seguido de un nombre de usuario se puede utilizar + para notificar a un usuario en particular." + hashtag: "Hashtag" + hashtagDescription: "Puede especificar un hashtag con un numeral y el texto." + url: "URL" + urlDescription: "Se pueden mostrar las URL" + link: "Vínculo" + linkDescription: "Se pueden asociar partes de texto a la URL" + bold: "Negrita" + boldDescription: "Muestra el texto con las letras más gruesas" + small: "Pequeño" + smallDescription: "Muestra el texto más pequeño y delgado" + center: "Centrar" + centerDescription: "Muestra el texto centrado" + inlineCode: "Código (insertado)" + inlineCodeDescription: "Muestra el código de un programa resaltando su sintaxis" + blockCode: "Código (bloque)" + blockCodeDescription: "Código de resaltado de sintaxis, como programas de varias + líneas con bloques." + inlineMath: "Fórmula (insertado)" + inlineMathDescription: "Muestra fórmulas (KaTeX) insertadas" + blockMath: "Fórmula (bloque)" + blockMathDescription: "Muestra fórmulas matemáticas (KaTeX) en un bloque" + quote: "Citar" + quoteDescription: "Muestra el contenido como una cita" + emoji: "Emojis personalizados" + emojiDescription: "Muestra los emojis personalizados encerrados entre dos puntos." + search: "Buscar" + searchDescription: "Muestra una caja de búsqueda con texto pre-escrito" + flip: "Echar de un capirotazo" + flipDescription: "Voltea el contenido hacia arriba / abajo o hacia la izquierda + / derecha." + jelly: "Animación (gelatina)" + jellyDescription: "Aplica un efecto de animación tipo gelatina" + tada: "Animación (tadá)" + tadaDescription: "Aplica un efecto de animación al estilo \"Tadá\"" + jump: "Animación (saltar)" + jumpDescription: "Aplica un efecto de animación tipo salto" + bounce: "Animación (rebotar)" + bounceDescription: "Aplica un efecto de animación tipo rebote" + shake: "Animación (temblor)" + shakeDescription: "Aplica un efecto de animación tipo temblor" + twitch: "Animación (sacudida)" + twitchDescription: "Aplica un efecto de animación tipo sacudida" + spin: "Animación (giro)" + spinDescription: "Aplica un efecto de animación tipo rotación" + x2: "Grande" + x2Description: "Muestra el contenido más grande" + x3: "Muy grande" + x3Description: "Muestra el contenido mucho más grande" + x4: "Totalmente grande" + x4Description: "Muestra el contenido totalmente grande" + blur: "Desenfoque" + blurDescription: "Para desenfocar el contenido. Se muestra claramente al colocar + el puntero encima." + font: "Fuente" + fontDescription: "Elegir la fuente del contenido" + rainbow: "Arcoíris" + rainbowDescription: "Muestra el contenido con los colores del arcoíris" + sparkle: "Parpadeante" + sparkleDescription: "Aplica un efecto de partículas parpadeantes" + rotate: "Rotar" + rotateDescription: "Rota el contenido a un ángulo especificado." + plain: "Plano" + plainDescription: "Desactiva los efectos de todo el contenido MFM con este efecto + MFM." + position: Posición + warn: MFM podría contener movimientos rápidos o animaciones destellantes + advancedDescription: Si está desactivado, solo permitir markup básico, excepto cuando + un MFM animado se reproduce + scale: Escalar + foreground: Color en primer plano + scaleDescription: Ajustar el contenido según un valor especificado. + stop: Detener MFM + crop: Recortar + cropDescription: Recortar contenido. + backgroundDescription: Cambiar el color de fondo del texto. + alwaysPlay: Siempre reproducir todos los MFM animados + fade: Fundido + advanced: MFM avanzado + play: Reproducir MFM + foregroundDescription: Cambiar el color del texto en primer plano. + background: Color de fondo + positionDescription: Mueve el contenido en una cantidad especificada. + fadeDescription: Funde el contenido dentro y fuera. +_instanceTicker: + none: "No mostrar" + remote: "Mostrar a usuarios remotos" + always: "Mostrar siempre" +_serverDisconnectedBehavior: + reload: "Recargar automáticamente" + dialog: "Mostrar diálogo de advertencia" + quiet: "Advertencia discreta" + nothing: Hacer nada +_channel: + create: "Crear canal" + edit: "Editar canal" + setBanner: "Elegir banner" + removeBanner: "Borrar banner" + featured: "Tendencias" + owned: "Dueño" + following: "Siguiendo" + usersCount: "{n} participantes" + notesCount: "{n} Publicaciones" + nameOnly: Nombre solamente + nameAndDescription: Nombre y descripción +_menuDisplay: + sideFull: "Horizontal" + sideIcon: "Horizontal (ícono)" + top: "Arriba" + hide: "Ocultar" +_wordMute: + muteWords: "Palabras que silenciar" + muteWordsDescription: "Separar con espacios indica una declaracion And, separar + con lineas nuevas indica una declaracion Or。" + muteWordsDescription2: "Encerrar las palabras clave entre numerales para usar expresiones + regulares" + softDescription: "Ocultar en la linea de tiempo las publicaciones que cumplen las + condiciones" + hardDescription: "Evitar que se agreguen a la linea de tiempo las publicaciones + que cumplen las condiciones, estas no serán agregadas a la linea de tiempo incluso + si cambian las condiciones." + soft: "Suave" + hard: "Duro" + mutedNotes: "Publicaciones silenciadas" + muteLangsDescription2: 'Utilizar códigos de idioma, por ejemplo: en, fr, ja, zh.' + lang: Idioma + langDescription: Ocultar publicaciones de linea de tiempo que coincidan con el idioma + seleccionado. + muteLangs: Idiomas silenciados + muteLangsDescription: Separar con espacios o saltos de lineas para una condición + OR +_instanceMute: + instanceMuteDescription: "Silencia todas las publicaciones e impusos de los servidores + seleccionados, incluyendo respuestas a los usuarios de las mismas." + instanceMuteDescription2: "Separar por líneas" + title: "Oculta las publicaciones de los servidores listados." + heading: "Servidores a silenciar" +_theme: + explore: "Explorar temas" + install: "Instalar tema" + manage: "Gestor de temas" + code: "Código del tema" + description: "Descripción" + installed: "{name} ha sido instalado" + installedThemes: "Temas instalados" + builtinThemes: "Temas integrados" + alreadyInstalled: "Este tema ya está instalado" + invalid: "El formato del tema no es válido" + make: "Crear tema" + base: "Base" + addConstant: "Agregar constante" + constant: "Constante" + defaultValue: "Valor predeterminado" + color: "Color" + refProp: "Hacer referencia a propiedad" + refConst: "Hacer referencia a constante" + key: "Clave" + func: "funciones" + funcKind: "Tipo de función" + argument: "Argumento" + basedProp: "Nombre de la propiedad referenciada" + alpha: "Opacidad" + darken: "Oscuridad" + lighten: "Brillo" + inputConstantName: "Por favor ingrese el nombre de la constante" + importInfo: "Pegando el código del tema aquí, puede importarlo al editor" + deleteConstantConfirm: "¿Desea borrar la constante {const}?" + keys: + accent: "Acento" + bg: "Fondo" + fg: "Texto" + focus: "Enfoque" + indicator: "Indicador" + panel: "Panel" + shadow: "Sombra" + header: "Cabezal" + navBg: "Fondo de la barra lateral" + navFg: "Texto de la barra lateral" + navHoverFg: "Texto de la barra lateral (hover)" + navActive: "Texto de la barra lateral (activo)" + navIndicator: "Indicador de la barra lateral" + link: "Vínculo" + hashtag: "Hashtag" + mention: "Menciones" + mentionMe: "Menciones (yo)" + renote: "Impulsar" + modalBg: "Fondo modal" + divider: "Divisor" + scrollbarHandle: "Cuadro de la barra de desplazamiento" + scrollbarHandleHover: "Cuadro de la barra de desplazamiento (hover)" + dateLabelFg: "Texto de la etiqueta de fecha" + infoBg: "Fondo de información" + infoFg: "Texto de información" + infoWarnBg: "Fondo de advertencias" + infoWarnFg: "Texto de advertencias" + cwBg: "Fondo del botón CW" + cwFg: "Texto del botón CW" + cwHoverBg: "Fondo del botón CW (hover)" + toastBg: "Fondo de notificaciones" + toastFg: "Texto de notificaciones" + buttonBg: "Fondo de botón" + buttonHoverBg: "Fondo de botón (hover)" + inputBorder: "Borde de los campos de entrada" + listItemHoverBg: "Fondo de elemento de listas (hover)" + driveFolderBg: "Fondo de capeta del drive" + wallpaperOverlay: "Transparencia del fondo de pantalla" + badge: "Medalla" + messageBg: "Fondo de chat" + accentDarken: "Acento (oscuro)" + accentLighten: "Acento (claro)" + fgHighlighted: "Texto resaltado" +_sfx: + note: "Nueva publicación" + noteMy: "Publicación propia" + notification: "Notificaciones" + chat: "Chat" + chatBg: "Chat (Fondo)" + antenna: "Antenas" + channel: "Notificaciones del canal" +_ago: + future: "Futuro" + justNow: "Recién ahora" + secondsAgo: "Hace {n} s" + minutesAgo: "Hace {n} m" + hoursAgo: "Hace {n} hora(s)" + daysAgo: "Hace {n} d" + weeksAgo: "Hace {n} sem" + monthsAgo: "Hace {n} mes(es)" + yearsAgo: "Hace {n} año(s)" +_time: + second: "Segundos" + minute: "Minutos" + hour: "Horas" + day: "Días" +_tutorial: + title: "Cómo usar Firefish" + step1_1: "¡Bienvenido!" + step1_2: "Vamos a configurarte. ¡Estarás listo y funcionando en poco tiempo!" + step2_1: "En primer lugar, rellena tu perfil" + step2_2: "Proporcionar algo de información sobre quién eres hará que sea más fácil + para los demás saber si quieren ver tus publicaciones o seguirte." + step3_1: "¡Ahora es el momento de seguir a algunas personas!" + step3_2: "Tu página de inicio y tus líneas de tiempo sociales se basan en quién + sigues, así que intenta seguir un par de cuentas para empezar.\nHaz clic en el + círculo más en la parte superior derecha de un perfil para seguirlos." + step4_1: "Vamos a salir a la calle" + step4_2: "Para tu primer publicación, a algunas personas les gusta escribir una + {introduction} o un simple \"¡Hola mundo!\"" + step5_1: "¡Líneas de tiempo, líneas de tiempo por todas partes!" + step5_2: "Tu servidor tiene {timelines} diferentes líneas de tiempo habilitadas." + step5_3: "La línea de tiempo Inicio {icon} es donde puedes ver las publicaciones + de personas que sigues." + step5_4: "La línea de tiempo Local {icon} es donde puedes ver las publicaciones + de todos los demás en este servidor." + step5_5: "La línea de tiempo {icon} social es una combinación de las líneas de tiempo + Inicio y Local." + step5_6: "La línea de tiempo {icon} recomendada es donde puedes ver las publicaciones + de los servidores que los administradores recomiendan." + step5_7: "La línea de tiempo {icon} global es donde puedes ver las publicaciones + de todos los demás servidores a los cuales este servidor conecta." + step6_1: "Entonces, ¿qué es este lugar?" + step6_2: "Bueno, no sólo te has unido a Firefish. Te has unido a un portal del Fediverso, + una red interconectada de miles de servidores, llamada \"instancias\"" + step6_3: "Cada servidor funciona de forma diferente, y no todos los servidores ejecutan + Firefish. Sin embargo, ¡éste lo hace! Es un poco complicado, pero le cogerás el + tranquillo enseguida" + step6_4: "¡Ahora ve, explora y diviértete!" +_2fa: + alreadyRegistered: "Ya has completado la configuración." + registerTOTP: "Registrar dispositivo" + registerSecurityKey: "Registrar clave" + step1: "Primero, instale en su dispositivo la aplicación de autenticación {a} o + {b} u otra." + step2: "Luego, escanee con la aplicación el código QR mostrado en pantalla." + step2Url: "En una aplicación de escritorio se puede ingresar la siguiente URL:" + step3: "Para terminar, ingrese el token mostrado en la aplicación." + step4: "Ahora cuando inicie sesión, ingrese el mismo token" + securityKeyInfo: "Se puede configurar el inicio de sesión usando una clave de seguridad + de hardware que soporte FIDO2 o con un certificado de huella digital o con un + PIN" + chromePasskeyNotSupported: Contraseñas de Chrome no están soportadas. + removeKeyConfirm: ¿Realmente deseas borrar la clave {name}? + step3Title: Ingresa un código de autorización + securityKeyNotSupported: Tu navegador no soporta claves de seguridad. + step2Click: Presionar este código QR te permitirá registrar la autorización 2FA + a tu clave de seguridad o aplicación autorizadora. + securityKeyName: Ingresa el nombre de la clave + tapSecurityKey: Por favor, espera al navegador para registrar la clave de seguridad + o de paso + token: Token 2FA + removeKey: Quitar clave de seguridad +_permissions: + "read:account": "Ver información de la cuenta" + "write:account": "Editar información de la cuenta" + "read:blocks": "Ver usuarios bloqueados" + "write:blocks": "Administrar usuarios bloqueados" + "read:drive": "Ver el drive" + "write:drive": "Administrar drive" + "read:favorites": "Ver favoritos" + "write:favorites": "Addministrar favoritos" + "read:following": "Ver información de seguidor" + "write:following": "Seguir o dejar de seguir" + "read:messaging": "Ver chat" + "write:messaging": "Administrar chat" + "read:mutes": "Ver usuarios silenciados" + "write:mutes": "Administrar usuarios silenciados" + "write:notes": "Crear o borrar publicaciones" + "read:notifications": "Ver notificaciones" + "write:notifications": "Administrar notificaciones" + "read:reactions": "Ver reacciones" + "write:reactions": "Administrar reacciones" + "write:votes": "Votar" + "read:pages": "Ver páginas" + "write:pages": "Administrar páginas" + "read:page-likes": "Ver páginas que te gustan" + "write:page-likes": "Administrar páginas que te gustan" + "read:user-groups": "Ver grupos de usuarios" + "write:user-groups": "Administrar grupos de usuarios" + "read:channels": "Ver canal" + "write:channels": "Modificar canal" + "read:gallery": "Ver galería" + "write:gallery": "Editar galería" + "read:gallery-likes": "Ver favoritos de la galería" + "write:gallery-likes": "Editar favoritos de la galería" +_auth: + shareAccess: "¿Desea permitir el acceso a la cuenta \"{name}\"?" + shareAccessAsk: "¿Está seguro de que desea autorizar esta aplicación para acceder + a su cuenta?" + permissionAsk: "Esta aplicación requiere los siguientes permisos:" + pleaseGoBack: "Por favor, vuelve a la aplicación" + callback: "Volviendo a la aplicación" + denied: "Acceso denegado" + copyAsk: 'Por favor, pega el siguiente código de autorización en la aplicación:' + allPermissions: Acceso completo +_antennaSources: + all: "Todas las publicaciones" + homeTimeline: "Publicaciones de los usuarios que sigues" + users: "Publicaciones de usuarios específicos" + userList: "Publicaciones de una lista de usuarios específica" + userGroup: "Publicaciones de usuarios de un grupo" + instances: Publicaciones de todos los usuarios en un servidor +_weekday: + sunday: "Domingo" + monday: "Lunes" + tuesday: "Martes" + wednesday: "Miércoles" + thursday: "Jueves" + friday: "Viernes" + saturday: "Sábado" +_widgets: + memo: "Nota adhesiva" + notifications: "Notificaciones" + timeline: "Linea de tiempo" + calendar: "Calendario" + trends: "Tendencias" + clock: "Reloj" + rss: "Lector RSS" + rssTicker: "Marquesina RSS" + activity: "Actividad" + photos: "Fotos" + digitalClock: "Reloj digital" + unixClock: "Reloj UNIX" + federation: "Federación" + instanceCloud: "Nube de servidores" + postForm: "Formulario" + slideshow: "Diapositivas" + button: "Botón" + onlineUsers: "Usuarios en línea" + jobQueue: "Cola de trabajos" + serverMetric: "Estadísticas del servidor" + aiscript: "Consola de AiScript" + aichan: "indigo" + userList: Lista de usuarios + _userList: + chooseList: Seleccione una lista + serverInfo: Información del servidor +_cw: + hide: "Ocultar" + show: "Ver más" + chars: "{count} caracteres" + files: "{count} archivos" +_poll: + noOnlyOneChoice: "Se necesitan al menos 2 opciones" + choiceN: "Opción {n}" + noMore: "No se pueden agregar más" + canMultipleVote: "Permitir más de una respuesta" + expiration: "Termina el" + infinite: "Sin límite de tiempo" + at: "Elegir fecha y hora" + after: "Elegir lapso de tiempo" + deadlineDate: "Fecha de fin" + deadlineTime: "Horas" + duration: "Duración" + votesCount: "{n} votos" + totalVotes: "Total {n} votos" + vote: "Votar" + showResult: "Ver resultado" + voted: "Votado" + closed: "Cerrada" + remainingDays: "Quedan {d} días y {h} horas para que finalice" + remainingHours: "Quedan {h} horas y {m} minutos para que finalice" + remainingMinutes: "Quedan {m} minutos y {s} segundos para que finalice" + remainingSeconds: "Quedan {s} segundos para que finalice" +_visibility: + public: "Público" + publicDescription: "Tu publicación será visible en todas las líneas de tiempo" + home: "Sin listar (Inicio)" + homeDescription: "Visible sólo en la linea de tiempo de inicio" + followers: "Seguidores" + followersDescription: "Hacer sólo visible sólo para tus seguidores y usuarios mencionados" + specified: "Mensaje directo" + specifiedDescription: "Visible sólo para los usuarios elegidos" + localOnly: "Solo local" + localOnlyDescription: "Oculto para usuarios remotos" +_postForm: + replyPlaceholder: "Responder a esta publicación..." + quotePlaceholder: "Citar esta publicación..." + channelPlaceholder: "Postear en el canal" + _placeholders: + a: "¿Qué haces?" + b: "¿Te pasó algo?" + c: "¿Qué estás pensando?" + d: "¿Algo que quieras decir?" + e: "Escribe aquí" + f: "Esperando a que escribas algo..." +_profile: + name: "Nombre" + username: "Nombre de usuario" + description: "Descripción" + youCanIncludeHashtags: "Puedes añadir hashtags" + metadata: "información adicional" + metadataEdit: "Editar información adicional" + metadataDescription: "Muestra la información adicional en el perfil. ¡Puede agregar + una etiqueta {a} o una etiqueta {l} con {rel} para verificar el enlace en su perfil!" + metadataLabel: "Etiqueta" + metadataContent: "Contenido" + changeAvatar: "Cambiar avatar" + changeBanner: "Cambiar banner" + locationDescription: Si ingresas tu ciudad primero, el tiempo local tuyo será visible + para otros usuarios. +_exportOrImport: + allNotes: "Todas las publicaciones" + followingList: "Siguiendo" + muteList: "Silenciados" + blockingList: "Bloqueados" + userLists: "Listas" + excludeMutingUsers: "Excluir usuarios silenciados" + excludeInactiveUsers: "Excluir usuarios inactivos" +_charts: + federation: "Federación" + apRequest: "Pedidos" + usersIncDec: "Variación de usuarios" + usersTotal: "Total de usuarios" + activeUsers: "Cantidad de usuarios activos" + notesIncDec: "Diferencia en la cantidad de publicaciones" + localNotesIncDec: "Diferencia en la cantidad de publicaciones locales" + remoteNotesIncDec: "Diferencia en el número de publicaciones remotas" + notesTotal: "Total de publicaciones" + filesIncDec: "Variación de cantidad de archivos" + filesTotal: "Total de archivos" + storageUsageIncDec: "Variación de uso del almacenamiento" + storageUsageTotal: "Total de uso del almacenamiento" +_instanceCharts: + requests: "Pedidos" + users: "Variación de usuarios" + usersTotal: "Total acumulado de usuarios" + notes: "Diferencia en el número de publicaciones" + notesTotal: "Total acumulado de publicaciones" + ff: "Variación de cantidad de seguidos/seguidores" + ffTotal: "Total acumulado de cantidad de seguidos/seguidores" + cacheSize: "Variación del tamaño de la caché" + cacheSizeTotal: "Total acumulado del tamaño de la caché" + files: "Variación de cantidad de archivos" + filesTotal: "Total acumulado de cantidad de archivos" +_timelines: + home: "Inicio" + local: "Local" + social: "Social" + global: "Global" + recommended: Recomendado +_pages: + newPage: "Crear página" + editPage: "Editar página" + readPage: "Viendo la fuente" + created: "La página fue creada" + updated: "La página fue actualizada" + deleted: "La página borrada" + pageSetting: "Configurar página" + nameAlreadyExists: "La URL de la página especificada ya existe" + invalidNameTitle: "URL inválida" + invalidNameText: "Verifique que no tenga espacios en blanco" + editThisPage: "Editar esta página" + viewSource: "Ver la fuente" + viewPage: "Ver página" + like: "Me gusta" + unlike: "Quitar me gusta" + my: "Mis páginas" + liked: "Páginas que me gustan" + featured: "Popular" + inspector: "Inspector" + contents: "Contenido" + content: "Bloque de página" + variables: "Variables" + title: "Título" + url: "URL de la página" + summary: "Resumen de la página" + alignCenter: "Centrar" + hideTitleWhenPinned: "Ocultar el título de la página al fijarse" + font: "Fuente" + fontSerif: "Serif" + fontSansSerif: "Sans Serif" + eyeCatchingImageSet: "Elegir imagen llamativa" + eyeCatchingImageRemove: "Borrar imagen llamativa" + chooseBlock: "Agregar bloque" + selectType: "Elegir tipo" + enterVariableName: "Ingrese el nombre de la variable" + variableNameIsAlreadyUsed: "El nombre de la variable ya está en uso" + contentBlocks: "Contenido" + inputBlocks: "Entrada" + specialBlocks: "Especial" + blocks: + text: "Texto" + textarea: "Área de texto" + section: "Sección" + image: "Imagen" + button: "Botón" + if: "si" + _if: + variable: "Variable" + post: "Formulario" + _post: + text: "Contenido" + attachCanvasImage: "Nota con lienzo como imagen" + canvasId: "Lienzo ID" + textInput: "Entrada de texto" + _textInput: + name: "Nombre de variable" + text: "Título" + default: "Valor predeterminado" + textareaInput: "Entrada de texto en múltiples lineas" + _textareaInput: + name: "Nombre de variable" + text: "Título" + default: "Valor predeterminado" + numberInput: "Entrada numérica" + _numberInput: + name: "Nombre de variable" + text: "Título" + default: "Valor predeterminado" + canvas: "Lienzo" + _canvas: + id: "Lienzo ID" + width: "Ancho" + height: "Altura" + note: "Publicación incrustada" + _note: + id: "ID de la publicación" + idDescription: "Puedes también pegar la URL de la publicación aquí." + detailed: "Ver Detalles" + switch: "Interruptor" + _switch: + name: "Nombre de variable" + text: "Título" + default: "Valor predeterminado" + counter: "Contador" + _counter: + name: "Nombre de variable" + text: "Título" + inc: "Aumentar cantidad" + _button: + text: "Título" + colored: "Color" + action: "Acción al presionar el botón" + _action: + dialog: "Mostrar cuadro de diálogo" + _dialog: + content: "Contenido" + resetRandom: "Resetear número aleatorio" + pushEvent: "Enviar evento" + _pushEvent: + event: "Nombre del evento" + message: "Mensaje mostrado al apretar" + variable: "Variable a enviar" + no-variable: "Ninguna" + callAiScript: "Invocar AiScript" + _callAiScript: + functionName: "Nombre de la función" + radioButton: "Botón de opción" + _radioButton: + name: "Nombre de variable" + title: "Título" + values: "Opciones separadas por una nueva linea" + default: "Valor predeterminado" + script: + categories: + flow: "Control de flujo" + logical: "Operación lógica" + operation: "Cálculo" + comparison: "Comparar" + random: "Aleatorio" + value: "Valores" + fn: "funciones" + text: "Manejo de texto" + convert: "Conversion" + list: "Listas" + blocks: + text: "Texto" + multiLineText: "Texto (multilinea)" + textList: "Lista de texto" + _textList: + info: "Separe cada texto con una linea nueva" + strLen: "Largo del texto" + _strLen: + arg1: "Texto" + strPick: "Extraer caracteres" + _strPick: + arg1: "Texto" + arg2: "Posición del caracter" + strReplace: "Sustituir texto" + _strReplace: + arg1: "Texto" + arg2: "Texto a reemplazar" + arg3: "Texto reemplazado" + strReverse: "Invertir texto" + _strReverse: + arg1: "Texto" + join: "Concatenar texto" + _join: + arg1: "Listas" + arg2: "Separador" + add: "Suma" + _add: + arg1: "A" + arg2: "B" + subtract: "Resta" + _subtract: + arg1: "A" + arg2: "B" + multiply: "Multiplicación" + _multiply: + arg1: "A" + arg2: "B" + divide: "División" + _divide: + arg1: "A" + arg2: "B" + mod: "Resto" + _mod: + arg1: "A" + arg2: "B" + round: "Redondear decimales" + _round: + arg1: "Número" + eq: "A y B son iguales" + _eq: + arg1: "A" + arg2: "B" + notEq: "A y B son distintos" + _notEq: + arg1: "A" + arg2: "B" + and: "A y B" + _and: + arg1: "A" + arg2: "B" + or: "A o B" + _or: + arg1: "A" + arg2: "B" + lt: "< A es menor que B" + _lt: + arg1: "A" + arg2: "B" + gt: "> A es mayor que B" + _gt: + arg1: "A" + arg2: "B" + ltEq: "<= A es menor o igual que B" + _ltEq: + arg1: "A" + arg2: "B" + gtEq: ">= A es mayor o igual que B" + _gtEq: + arg1: "A" + arg2: "B" + if: "Si" + _if: + arg1: "si" + arg2: "Entonces" + arg3: "Si no" + not: "Negación" + _not: + arg1: "Negación" + random: "Aleatorio" + _random: + arg1: "probabilidad" + rannum: "Número aleatorio" + _rannum: + arg1: "Mínimo" + arg2: "Máximo" + randomPick: "Elegir aleatoriamente de la lista" + _randomPick: + arg1: "Listas" + dailyRandom: "Aleatorio (Diariamente para cada usuario)" + _dailyRandom: + arg1: "probabilidad" + dailyRannum: "Número aleatorio (Diariamente para cada usuario)" + _dailyRannum: + arg1: "Mínimo" + arg2: "Máximo" + dailyRandomPick: "Elegir aleatoriamente de la lista (Diariamente para cada usuario)" + _dailyRandomPick: + arg1: "Listas" + seedRandom: "Aleatorio (semilla)" + _seedRandom: + arg1: "Semilla" + arg2: "probabilidad" + seedRannum: "Número aleatorio (semilla)" + _seedRannum: + arg1: "Semilla" + arg2: "Mínimo" + arg3: "Máximo" + seedRandomPick: "Elegir aleatoriamente de la lista (semilla)" + _seedRandomPick: + arg1: "Semilla" + arg2: "Listas" + DRPWPM: "Elegir aleatoriamente de la lista ponderada (Diariamente para cada + usuario)" + _DRPWPM: + arg1: "Lista de texto" + pick: "Elegir de la lista" + _pick: + arg1: "Listas" + arg2: "Posición" + listLen: "Obtener largo de la lista" + _listLen: + arg1: "Listas" + number: "Número" + stringToNumber: "De texto a número" + _stringToNumber: + arg1: "Texto" + numberToString: "De número a texto" + _numberToString: + arg1: "Número" + splitStrByLine: "Separar texto en lineas" + _splitStrByLine: + arg1: "Texto" + ref: "Variable" + aiScriptVar: "Variable de AiScript" + fn: "funciones" + _fn: + slots: "Slots" + slots-info: "Separe cada uno de los slots con una linea nueva" + arg1: "Salida" + for: "Repetir" + _for: + arg1: "Cantidad de repeticiones" + arg2: "Acción" + typeError: "El slot {slot} acepta el tipo \"{expect}\" pero fue ingresado el tipo + \"{actual}\"" + thereIsEmptySlot: "El slot {slot} está vacío" + types: + string: "Texto" + number: "Número" + boolean: "Booleano" + array: "Listas" + stringArray: "Lista de texto" + emptySlot: "Slot vacío" + enviromentVariables: "Variables de entorno" + pageVariables: "Items de la página" + argVariables: "Slot de entrada" +_relayStatus: + requesting: "Pendiente" + accepted: "Aceptar" + rejected: "Rechazada" +_notification: + fileUploaded: "Archivo subido" + youGotMention: "Mención de {name}" + youGotReply: "Respuesta de {name}" + youGotQuote: "Citado por {name}" + youRenoted: "Impulsado por {name}" + youGotPoll: "Encuestado por {name}" + youGotMessagingMessageFromUser: "{name} comenzó un chat contigo" + youGotMessagingMessageFromGroup: "Tienes un chat de {name}" + youWereFollowed: "te ha seguido" + youReceivedFollowRequest: "Has mandado una solicitud de seguimiento" + yourFollowRequestAccepted: "Tu solicitud de seguimiento fue aceptada" + youWereInvitedToGroup: "Invitado al grupo" + pollEnded: "Estan disponibles los resultados de la encuesta" + emptyPushNotificationMessage: "Se han actualizado las notificaciones push" + _types: + all: "Todo" + follow: "Siguiendo" + mention: "Menciones" + reply: "Respuestas" + renote: "Impulsos" + quote: "Citar" + reaction: "Reacción" + pollVote: "Votado en la encuesta" + pollEnded: "La encuesta terminó" + receiveFollowRequest: "Recibió una solicitud de seguimiento" + followRequestAccepted: "El seguimiento fue aceptado" + groupInvited: "Invitado al grupo" + app: "Notificaciones desde aplicaciones" + _actions: + followBack: "Te sigue de vuelta" + reply: "Responder" + renote: "Impulsos" + renoted: impulsó tu publicación + reacted: reaccionó a tu publicación + voted: votó en tu encuesta +_deck: + alwaysShowMainColumn: "Siempre mostrar la columna principal" + columnAlign: "Alinear columnas" + addColumn: "Agregar columna" + configureColumn: "Ajustes de columna" + swapLeft: "Mover a la izquierda" + swapRight: "Mover a la derecha" + swapUp: "Mover arriba" + swapDown: "Mover abajo" + stackLeft: "Apilar a la izquierda" + popRight: "Sacar a la derecha" + profile: "Espacio de trabajo" + newProfile: "Nuevo espacio de trabajo" + deleteProfile: "Eliminar espacio de trabajo" + introduction: "¡Crea la interfaz perfecta para tí organizando las columnas libremente!" + introduction2: "Presiona en la + de la derecha de la pantalla para añadir nuevas + columnas donde quieras." + widgetsIntroduction: "Por favor selecciona \"Editar Widgets\" en el menú columna + y agrega un widget." + _columns: + main: "Principal" + widgets: "Widgets" + notifications: "Notificaciones" + tl: "Linea de tiempo" + antenna: "Antena" + list: "Listas" + mentions: "Menciones" + direct: "Mensajes directos" + channel: Canal + renameProfile: Renombrar espacio de trabajo + nameAlreadyExists: Este nombre de espacio de trabajo ya existe. +manageGroups: Administrar grupos +replayTutorial: Repetir Tutorial +privateMode: Modo privado +addInstance: Añadir un servidor +renoteMute: Silenciar impulsos en la línea de tiempo +renoteUnmute: Dejar de silenciar impulsos +flagSpeakAsCat: Habla como un gato +selectInstance: Selecciona un servidor +flagSpeakAsCatDescription: Tu publicación se "nyanified" cuando esté en modo gato +allowedInstances: Servidores autorizados +breakFollowConfirm: ¿Estás seguro de que quieres eliminar el seguidor? +subscribePushNotification: Habilitar notificaciones +unsubscribePushNotification: Desactivar notificaciones +pushNotificationAlreadySubscribed: Las notificaciones ya están activados +pushNotificationNotSupported: Su navegador o servidor no admite notificaciones +moveAccount: ¡Mover cuenta! +moveFrom: Mueve a esta cuenta de una cuenta antigua +moveFromLabel: 'La cuenta que estás moviendo de:' +moveAccountDescription: 'Este proceso es irreversible. Asegúrate de configurar un + alias para ésta cuenta en tu cuenta nueva antes de comenzar. Por favor, ingresa + la etiqueta de la cuenta en el formato siguiente: @persona@servidor.tld' +license: Licencia +noThankYou: No gracias +userSaysSomethingReason: '{name} dijo {reason}' +hiddenTags: Etiquetas Ocultas +noInstances: No hay servidores +accountMoved: 'Usuario ha movido a una cuenta nueva:' +caption: Auto Subtítulos +showAds: Mostrar banners +enterSendsMessage: Presione "RETORNO" en los mensajes para enviar el mensaje (para + apagarlo es Ctrl + RETORNO) +recommendedInstances: Servidores recomendados +instanceSecurity: Seguridad del servidor +seperateRenoteQuote: Separar botones de Impulsar y Citar +_messaging: + groups: Grupos + dms: Privado +pushNotification: Notificaciones +apps: Aplicaciones +migration: Migración +silenced: Silenciado +deleted: Eliminado +edited: 'Editado a las {date} {time}' +editNote: Editar publicación +silenceThisInstance: Silenciar este servidor +userSaysSomethingReasonRenote: '{name} impulsó una publicación que contiene {reason]' +enableRecommendedTimeline: Habilitar línea de tiempo "Recomendado" +searchPlaceholder: Buscar en Firefish +listsDesc: Las listas te permiten crear líneas de tiempo con usuarios específicos. + Puedes acceder a ellas desde la pestaña "Línea de tiempo". +removeReaction: Quitar tu reacción +selectChannel: Seleccionar canal +showEmojisInReactionNotifications: Mostrar emojis en notificaciones de reacciones +silencedInstancesDescription: Escriba los hosts de los servidores que desea bloquear. + Las cuentas en estos servidores serán tratadas como "silenciadas", solo podrán hacer + solicitudes de seguimiento, y no podrán mencionar a usuarios de este servidor si + no les siguen. Esto no afecta los servidores bloqueados. +silencedInstances: Servidores silenciados +hiddenTagsDescription: 'Escriba los hashtags (sin el #) que desea ocultar de las secciones + de Tendencias y Explorar. Los hashtags ocultos seguirán siendo descubribles por + otros métodos.' +jumpToPrevious: Ver anterior +enableEmojiReactions: Habilitar reacciones de emoji +cw: Aviso de contenido +sendPushNotificationReadMessage: Eliminar notificaciones una vez que la notificación + o mensaje ha sido leído +sendPushNotificationReadMessageCaption: Una notificación con el texto "{emptyPushNotificationMessage}" + será mostrada por un breve período. Esto podría aumentar el uso de batería de tu + dispositivo. +enableServerMachineStats: Permitir estadísticas del hardware del servidor +customMOTD: Mensaje del día personalizado (mensajes de la pantalla de presentación) +antennasDesc: "Las Antennas muestran nuevas publicaciones que conciden con los criterios + que estableciste.\nPueden ser accedidas desde la sección de Lineas de tiempo." +antennaInstancesDescription: Escribe un servidor por cada linea +expandOnNoteClickDesc: Si está desactivado, puedes abrir publicaciones usando el menú + del botón derecho del ratón o presionando sobre la fecha. +channelFederationWarn: Los Canales aún no federan con otras instancias +clipsDesc: Los clips como marcadores categorizados que pueden ser compartidos. Puedes + crear clips desde el menú de publicaciones. +verifiedLink: Vínculo verificado +cannotUploadBecauseExceedsFileSizeLimit: Este archivo no pudo ser cargado porque excede + el tamaño máximo permitido. +accessibility: Accesibilidad +_filters: + fromUser: Del usuario + fromDomain: Desde el dominio + notesAfter: Publicaciones posteriores + followingOnly: Sólo seguidos + withFile: Con archivo + followersOnly: Sólo seguidores + notesBefore: Publicaciones anteriores +userSaysSomethingReasonReply: '{name} respondió a una publicación que contiene {reason}' +userSaysSomethingReasonQuote: '{name} citó una publicación que contiene {reason}' +privateModeInfo: Al activar, solo servidores autorizados podrán federar con tu servidor. + Todas las publicaiones estáran ocultas del público. +customMOTDDescription: Mensajes del día personalizados (MOTD) de la pantalla de presentación, + separados cada salto de linea. Para ser mostrados aleatoriamente cada vez que un + usuario carga/recarga una página. +customSplashIcons: Icono personalizado de la pantalla de presentación (url) +donationLink: Vinculo a página de donación +delete2fa: Desactivar autentificación en dos pasos +delete2faConfirm: Esto eliminara irreversiblemente la autentificación en dos pasos + de esta cuenta. ¿Quieres continuar? +allowedInstancesDescription: Host de los servidores autorizados para federar, cada + uno separado por una nueva linea (solo aplica en modo pivado). +adminCustomCssWarn: Está configuración solo debería ser utilizado si sabes lo que + hace. Ingresar valores erroneos podría causar que TODOS los clientes dejaran de + funcionar normalmente. Porfavor asegurate que tus CSS funcionan adecuadamente al + probar los en tus configuraciones de usuario. +image: Imagen +showPopup: Notificar a los usuarios con una ventana emergente +showWithSparkles: Mostrar con destellos +youHaveUnreadAnnouncements: Tienes anuncios sin leer +neverShow: No mostrar nuevamente +remindMeLater: Recordar nuevamente +removeQuote: Eliminar cita +removeRecipient: Eliminar destinatario +removeMember: Eliminar miembro +_skinTones: + light: Claro + dark: Obscuro + yellow: Amarillo + medium: Medio + mediumLight: Claro medio + mediumDark: Obscuro medio +secureModeInfo: Al pedir a otros servidores, no mandar si no hay prueba de confianza. +enableIdenticonGeneration: Activar la generación de Identicon +sendModMail: Enviar aviso de moderación +reactionPickerSkinTone: Tono de piel preferido en emojis +_dialog: + charactersExceeded: '¡Límite de caracteres excedido! Actual: {current}/Límite: {max}' + charactersBelow: '¡Caracteres insuficientes! Actual: {current}/Límite: {min}' +expandOnNoteClick: Abrir publicación al hacer click +_experiments: + enablePostImports: Habilitar importación de publicaciones + title: Experimentos + postImportsCaption: Permite a los usuarios importar sus publicaciones desde Firefish, + Misskey, Mastodon, Akkoma y Pleroma. Puede causar una bajada en el rendimiento + del servidor si la cola de trabajos está atascada. +showUpdates: Mostrar una notificación emergente cuando Firefish se actualice +recommendedInstancesDescription: Servidores recomendados separador por saltos de línea + para que aparezcan el la línea de tiempo recomendados. +swipeOnMobile: Permitir el pase entre páginas +addRe: Añadir "re:" al comienzo del comentario en una respuesta a una publicación + sin aviso de contenido +showAdminUpdates: Avisar si hay una nueva versión de Firefish disponible (sólo adminsitrador) +_feeds: + rss: RSS + copyFeed: Copiar feed + atom: Atom + jsonFeed: Feed JSON +secureMode: Modo seguro (Recuperación Autorizada) +splash: Pantalla de bienvenida +moveToLabel: 'Cuenta a la cual estás migrando:' +alt: ALT +video: Video +audio: Audio +swipeOnDesktop: Permitir el pase de páginas del estilo móvil en el escritorio +enableCustomKaTeXMacro: Habilitar macros KaTeX personalizadas +noteId: ID de publicación +preventAiLearning: Prevenir el uso por parte de bots de IA +isLocked: Esta cuenta requiere aprobación de seguidores +origin: Origen +newer: reciente +older: antiguo +objectStorageS3ForcePathStyle: Usar URL de punto final basada en rutas +objectStorageS3ForcePathStyleDesc: Activa esto para construir puntos finales URL en + el formato 's3.amazonaws.com//' en lugar de '.s3.amazonaws.com'. +customSplashIconsDescription: URL para los iconos de la pantalla de bienvenida separadas + por saltos de línea para ser mostrados al azar cada vez que el usuario carga/recarga + la página. Por favor, asegúrate que las imágenes sean URL estáticas, preferentemente + a 192x192. +updateAvailable: ¡Quizá hay una actualización disponible! +moveTo: Mover la cuenta actual a una cuenta nueva +moveFromDescription: 'Esto pondrá un alias en tu cuenta antigua para así poder migrar + desde esa cuenta a la nueva. Haz esto ANTES de migrar tu cuenta antigua. Por favor, + ingresa la etiqueta de la cuenta con el formato siguiente: @persona@servidor.tld' +defaultReaction: Emoji por defecto para reaccionar a las publicaciones entrantes y + salientes +deletePasskeys: Borrar claves de paso +deletePasskeysConfirm: Esto borrará irreversiblemente todas las claves de paso y de + seguridad en esta cuenta, ¿Proceder? +inputNotMatch: Las entradas no coinciden +isModerator: Moderador +isAdmin: Administrador +isPatron: Mecenas de Firefish +logoImageUrl: URL de la imagen del logotipo +xl: XL +migrationConfirm: "¿Estás absolutamente seguro de que quieres migrar a tu cuenta a + {account}? Una vez hecho esto, no podrás revertir el cambio, ni tampoco usar tu + cuenta normalmente.\nTambién, asegúrate de que has configurado ésta cuenta como + la cuenta desde la cual estás migrando." +customKaTeXMacro: Macros KaTeX personalizadas +customKaTeXMacroDescription: '¡Configura macros para escribir expresiones matemáticas + fácilmente! La notación es conforme la las definiciones de comandos LaTeX y puede + ser escrita como \nuevocomando{\ nombre}{contenido} o \nuevocomando{\nombre}[número + de argumentos]{contenido}. Por ejemplo, \nuevocomando{\añadir}[2]{#1 + #2} expanderá + \añadir{3}{foo} a 3 + foo. Las llaves que contienen al nombre de la macro serán + cambiadas a paréntesis o corchetes. Esto afecta a los corchetes usados para argumentos. + Una (y sólo una) macro puede ser definida por línea, y no podrás saltar la línea + en medio de la definición. Líneas erróneas son ignoradas. Sólo funciones de sustitución + simple son soportadas; sintaxis avanzada, como ramificación condicional no puede + ser usada aquí.' +signupsDisabled: Los registros en esta instancia están desactivados, pero, ¡siempre + podrás registrarte en otro servidor! Si tienes un código de invitación para este + servidor, por favor, rellena el campo siguiente. +preventAiLearningDescription: Pedir a los modelos de IA no analizar el contenido de + publicas, como publicaciones e imágenes. +noGraze: Por favor desactiva la extensión de navegador "Graze for Mastodon" ya que + interfiere con Firefish. +silencedWarning: Esta página se muestra debido a que estos usuarios son de servidores + que tu administrador ha silenciado, ya que son presumiblemente fuente de spam. +isBot: Esta cuenta es un bot +clickToShowPatterns: Haz clic para mostrar patrones de módulos +detectPostLanguage: Detectar automáticamente el idioma y mostrar el botón de traducción + para publicaciones en otros idiomas +indexableDescription: Permitir que el buscador integrado muestre tus publicaciones +reactions: Reacciones +exportZip: Exportar ZIP +importZip: Importar ZIP +vibrate: Reproducir vibraciones +openServerInfo: Mostrar información del servidor al presionar el simbolo del servidor + en una publicación +languageForTranslation: Traducción de publicaciones +confirm: Confirmar +moreUrls: páginas fijada +attachedToNotes: Publicaciones con este archivo +showAttachedNotes: Mostrar publicaciones con este archivo +indexable: Indexable +_iconSets: + bold: Marcado + regular: Regúlar + fill: Relleno + duotone: Doble tono (Doble color) + light: Brillante +replies: Respuestas +renotes: Impulsos +iconSet: Conjunto de iconos +moreUrlsDescription: 'Ingrese los enlaces de las páginas que desea Fijar en el menú + de ayuda, ubicado en la esquina inferior izquierda, usando este formato de notación: + ["Nombre para mostrar": https://su-enlace.com/]' +quotes: Citaciónes +markLocalFilesNsfwByDefault: Marcar todo nuevo archivo local como sensible por defecto +toReply: Respuesta +toPost: Publicar +sentFollowRequests: Enviar solicitudes de seguimiento +toQuote: Cita +replyMute: Silenciar respuestas en la linea de tiempo +replyUnmute: Anular respuestas en las lineas de tiempo +strongPassword: Buena contraseña +markLocalFilesNsfwByDefaultDescription: Independientemente de este ajuste, los usuarios + pueden eliminar la bandera NSFW por sí mismos. Los archivos existentes no son afectados. +noSentFollowRequests: No has enviado ninguna solicitud de seguimiento +antennaLimit: El número máximo de antenas que cada usuario puede crear +toEdit: Editar +cannotEditVisibility: No puedes editar la visibilidad +i18nServerChange: Use el {language} en su lugar. +i18nServerSet: Use el {language} para nuevos clientes. +squareCatAvatars: Mostrar avatares cuadrados para las cuentas de gatos +useThisAccountConfirm: ¿Quieres continuar con esta cuenta? +i18nServerInfo: Nuevos clientes estarán en {language} por defecto. +media: Medios +ipFirstAcknowledged: Fecha de la primera adquisición de la dirección IP +driveCapacityOverride: Anulación de la capacidad de accionamiento +useCdn: Obtener activos de CDN +replaceChatButtonWithAccountButton: Reemplazar boton del chat con el boton de cambio + de cuenta +forMobile: Móvil +emojiModPerm: Permiso de gestión de emoji personalizado +replaceWidgetsButtonWithReloadButton: Reemplazar botón del los widgets con el boton + de recarga +inputAccountId: Introduce tu cuenta (ej., @firefish@info.firefish.dev) +remoteFollow: Seguimiento remoto +useCdnDescription: Cargar algunos activos estáticos como Twemoji desde JSDelivr CDN + en lugar de este servidor de Firefish. +suggested: Sugerido +noLanguage: Ningún idioma +showPreviewByDefault: Mostrar vista previa en el formulario de publicación por defecto +preventMisclick: Prevención de clic accidental +announcement: Anuncio +moderationNote: Nota de moderación +getQrCode: Mostrar código QR +copyRemoteFollowUrl: Copiar URL de seguimiento remoto +hideFollowButtons: Ocultar botón de seguimiento en una posición en la que se pueda + hacer clic erróneamente +searchEngine: Motor de búsqueda usado en la barra de búsqueda MFM +postSearch: Búsqueda de publicaciones en este servidor +showBigPostButton: Mostrar un gran botón de Publicar en el formulario de publicación diff --git a/locales/fi.yml b/locales/fi.yml new file mode 100644 index 0000000..c333452 --- /dev/null +++ b/locales/fi.yml @@ -0,0 +1,966 @@ +_lang_: "Suomi" +username: Käyttäjänimi +fetchingAsApObject: Hae Fedeversestä +gotIt: Selvä! +cancel: Peruuta +enterUsername: Anna käyttäjänimi +renotedBy: Buustannut {user} +noNotes: Ei lähetyksiä +noNotifications: Ei ilmoituksia +instance: Instanssi +settings: Asetukset +basicSettings: Perusasetukset +otherSettings: Muut asetukset +openInWindow: Avaa ikkunaan +profile: Profiili +timeline: Aikajana +noAccountDescription: Käyttäjä ei ole vielä kirjoittanut kuvaustaan vielä. +login: Kirjaudu sisään +loggingIn: Kirjautuu sisään +logout: Kirjaudu ulos +uploading: Tallentaa ylös... +save: Tallenna +favorites: Kirjanmerkit +unfavorite: Poista kirjanmerkeistä +favorited: Lisätty kirjanmerkkeihin. +alreadyFavorited: Lisätty jo kirjanmerkkeihin. +cantFavorite: Ei voitu lisätä kirjanmerkkeihin. +pin: Kiinnitä profiiliin +unpin: Irroita profiilista +delete: Poista +forgotPassword: Unohtunut salasana +search: Etsi +notifications: Ilmoitukset +password: Salasana +ok: OK +noThankYou: Ei kiitos +signup: Rekisteröidy +users: Käyttäjät +addUser: Lisää käyttäjä +addInstance: Lisää instanssi +favorite: Lisää kirjanmerkkeihin +copyContent: Kopioi sisältö +deleteAndEdit: Poista ja muokkaa +copyLink: Kopioi linkki +makeFollowManuallyApprove: Seuraajapyyntö vaatii hyväksymistä +follow: Seuraa +pinned: Kiinnitä profiiliin +followRequestPending: Seuraajapyyntö odottaa +you: Sinä +unrenote: Peruuta buustaus +reaction: Reaktiot +reactionSettingDescription2: Vedä uudelleenjärjestelläksesi, napsauta poistaaksesi, + paina "+" lisätäksesi. +attachCancel: Poista liite +enterFileName: Anna tiedostonimi +mute: Hiljennä +unmute: Poista hiljennys +headlineFirefish: Avoimen lähdekoodin, hajautettu sosiaalisen median alusta, joka + on ikuisesti ilmainen! 🚀 +monthAndDay: '{day}/{month}' +deleteAndEditConfirm: Oletko varma, että haluat poistaa tämän lähetyksen ja muokata + sitä? Menetät kaikki reaktiot, buustaukset ja vastaukset lähetyksestäsi. +addToList: Lisää listaan +sendMessage: Lähetä viesti +reply: Vastaa +loadMore: Lataa enemmän +showMore: Näytä enemmän +receiveFollowRequest: Seuraajapyyntö vastaanotettu +followRequestAccepted: Seuraajapyyntö hyväksytty +mentions: Maininnat +importAndExport: Tuo/Vie Tietosisältö +import: Tuo +export: Vie +files: Tiedostot +download: Lataa +unfollowConfirm: Oletko varma, ettet halua seurata enää käyttäjää {name}? +noLists: Sinulla ei ole listoja +note: Viesti +notes: Viestit +following: Seuraa +createList: Luo lista +manageLists: Hallitse listoja +error: Virhe +somethingHappened: On tapahtunut virhe +retry: Yritä uudelleen +pageLoadError: Virhe ladattaessa sivua. +serverIsDead: Tämä palvelin ei vastaa. Yritä hetken kuluttua uudelleen. +youShouldUpgradeClient: Nähdäksesi tämän sivun, virkistä päivittääksesi asiakasohjelmasi. +privacy: Tietosuoja +defaultNoteVisibility: Oletusnäkyvyys +followRequest: Seuraajapyyntö +followRequests: Seuraajapyynnöt +unfollow: Poista seuraaminen +enterEmoji: Syötä emoji +renote: Buustaa +renoted: Buustattu. +cantRenote: Tätä lähetystä ei voi buustata. +cantReRenote: Buustausta ei voi buustata. +quote: Lainaus +pinnedNote: Lukittu lähetys +clickToShow: Napsauta nähdäksesi +sensitive: Herkkää sisältöä (NSFW) +add: Lisää +enableEmojiReactions: Ota käyttöön emoji-reaktiot +showEmojisInReactionNotifications: Näytä emojit reaktioilmoituksissa +reactionSetting: Reaktiot näytettäväksi reaktiovalitsimessa +rememberNoteVisibility: Muista lähetyksen näkyvyysasetukset +markAsSensitive: Merkitse herkäksi sisällöksi (NSFW) +unmarkAsSensitive: Poista merkintä herkkää sisältöä (NSFW) +renoteMute: Hiljennä buustit +renoteUnmute: Poista buustien hiljennys +block: Estä +unblock: Poista esto +unsuspend: Poista keskeytys +suspend: Keskeytys +blockConfirm: Oletko varma, että haluat estää tämän tilin? +unblockConfirm: Oletko varma, että haluat poistaa tämän tilin eston? +selectAntenna: Valitse antenni +selectWidget: Valitse vimpain +editWidgets: Muokkaa vimpaimia +editWidgetsExit: Valmis +emoji: Emoji +emojis: Emojit +emojiName: Emojin nimi +emojiUrl: Emojin URL-linkki +cacheRemoteFiles: Taltioi etätiedostot välimuistiin +flagAsBot: Merkitse tili botiksi +flagAsBotDescription: Ota tämä vaihtoehto käyttöön, jos tätä tiliä ohjaa ohjelma. + Jos se on käytössä, se toimii lippuna muille kehittäjille, jotta estetään loputtomat + vuorovaikutusketjut muiden bottien kanssa ja säädetään Firefishn sisäiset järjestelmät + käsittelemään tätä tiliä botina. +flagAsCat: Oletko kissa? 🐱 +flagAsCatDescription: Saat kissan korvat ja puhut kuin kissa! +flagSpeakAsCat: Puhu kuin kissa +flagShowTimelineReplies: Näytä vastaukset aikajanalla +addAccount: Lisää tili +loginFailed: Kirjautuminen epäonnistui +showOnRemote: Katsele etäinstanssilla +general: Yleistä +accountMoved: 'Käyttäjä on muuttanut uuteen tiliin:' +wallpaper: Taustakuva +setWallpaper: Aseta taustakuva +searchWith: 'Etsi: {q}' +youHaveNoLists: Sinulla ei ole listoja +followConfirm: Oletko varma, että haluat seurata käyttäjää {name}? +host: Isäntä +selectUser: Valitse käyttäjä +annotation: Kommentit +registeredAt: Rekisteröity +latestRequestReceivedAt: Viimeisin pyyntö vastaanotettu +latestRequestSentAt: Viimeisin pyyntö lähetetty +storageUsage: Tallennustilan käyttö +charts: Kaaviot +stopActivityDelivery: Lopeta toimintojen lähettäminen +blockThisInstance: Estä tämä instanssi +operations: Toiminnot +metadata: Metatieto +monitor: Seuranta +jobQueue: Työjono +cpuAndMemory: Prosessori ja muisti +network: Verkko +disk: Levy +clearCachedFiles: Tyhjennä välimuisti +clearCachedFilesConfirm: Oletko varma, että haluat tyhjentää kaikki välimuistiin tallennetut + etätiedostot? +blockedInstances: Estetyt instanssit +hiddenTags: Piilotetut asiatunnisteet +mention: Maininta +copyUsername: Kopioi käyttäjänimi +searchUser: Etsi käyttäjää +showLess: Sulje +youGotNewFollower: seurasi sinua +directNotes: Yksityisviestit +driveFileDeleteConfirm: Oletko varma, että haluat poistaa tiedoston " {name}"? Se + poistetaan kaikista viesteistä, jotka sisältävät sen liitetiedostona. +importRequested: Olet pyytänyt viemistä. Tämä voi viedä hetken. +exportRequested: Olet pyytänyt tuomista. Tämä voi viedä hetken. Se lisätään asemaan + kun tuonti valmistuu. +lists: Listat +followers: Seuraajat +followsYou: Seuraa sinua +pageLoadErrorDescription: Tämä yleensä johtuu verkkovirheistä tai selaimen välimuistista. + Kokeile tyhjentämällä välimuisti ja yritä sitten hetken kuluttua uudelleen. +enterListName: Anna listalle nimi +instanceInfo: Instanssin tiedot +clearQueue: Tyhjennä jono +suspendConfirm: Oletko varma, että haluat keskeyttää tämän tilin? +unsuspendConfirm: Oletko varma, että haluat poistaa tämän tilin keskeytyksen? +selectList: Valitse lista +customEmojis: Kustomoitu Emoji +addEmoji: Lisää +settingGuide: Suositellut asetukset +cacheRemoteFilesDescription: Kun tämä asetus ei ole käytössä, etätiedostot on ladattu + suoraan etäinstanssilta. Asetuksen poistaminen käytöstä vähentää tallennustilan + käyttöä, mutta lisää verkkoliikennettä kun pienoiskuvat eivät muodostu. +flagSpeakAsCatDescription: Lähetyksesi nyanifioidaan, kun olet kissatilassa +flagShowTimelineRepliesDescription: Näyttää käyttäjien vastaukset muiden käyttäjien + lähetyksiin aikajanalla, jos se on päällä. +autoAcceptFollowed: Automaattisesti hyväksy seuraamispyynnöt käyttäjiltä, joita seuraat +perHour: Tunnissa +removeWallpaper: Poista taustakuva +recipient: Vastaanottaja(t) +federation: Federaatio +software: Ohjelmisto +proxyAccount: Proxy-tili +proxyAccountDescription: Välitystili (Proxy-tili) on tili, joka toimii käyttäjien + etäseuraajana tietyin edellytyksin. Kun käyttäjä esimerkiksi lisää etäkäyttäjän + luetteloon, etäkäyttäjän toimintaa ei toimiteta instanssiin, jos yksikään paikallinen + käyttäjä ei seuraa kyseistä käyttäjää, joten välitystili seuraa sen sijaan. +latestStatus: Viimeisin tila +selectInstance: Valitse instanssi +instances: Instanssit +perDay: Päivässä +version: Versio +statistics: Tilastot +clearQueueConfirmTitle: Oletko varma, että haluat tyhjentää jonon? +introFirefish: Tervetuloa! Firefish on avoimen lähdekoodin, hajautettu sosiaalisen + median alusta, joka on ikuisesti ilmainen! 🚀 +clearQueueConfirmText: Mitkään välittämättömät lähetykset, jotka ovat jonossa, eivät + federoidu. Yleensä tätä toimintoa ei tarvita. +blockedInstancesDescription: Lista instanssien isäntänimistä, jotka haluat estää. + Listatut instanssit eivät kykene kommunikoimaan enää tämän instanssin kanssa. +security: Turvallisuus +retypedNotMatch: Syöte ei kelpaa. +fromDrive: Asemasta +keepOriginalUploading: Säilytä alkuperäinen kuva +uploadFromUrlDescription: Tiedoston URL, jonka haluat ylösladata +themeForLightMode: Teema vaaleassa tilassa +theme: Teemat +themeForDarkMode: Teema tummassa tilassa +drive: Asema +darkThemes: Tummat teemat +copyUrl: Kopioi URL-linkki +rename: Uudelleennimeä +maintainerName: Ylläpitäjä +maintainerEmail: Ylläpitäjän sähköposti +tosUrl: Palvelun ehdot URL-linkki +thisYear: Vuosi +backgroundImageUrl: Taustakuvan URL-linkki +basicInfo: Perustiedot +pinnedPagesDescription: Kirjoita niiden sivujen polut, jotka haluat liittää tämän + instanssin yläsivulle rivinvaihdoin erotettuna. +hcaptchaSiteKey: Sivuston avain +hcaptchaSecretKey: Salausavain +silencedInstances: Hiljennetyt instanssit +muteAndBlock: Hiljennykset ja estetyt +mutedUsers: Hiljennetyt käyttäjät +blockedUsers: Estetyt käyttäjät +noUsers: Ei yhtään käyttäjää +noInstances: Ei yhtään instanssia +editProfile: Muokkaa profiilia +noteDeleteConfirm: Oletko varma, että haluat poistaa tämän viestin? +pinLimitExceeded: Et voi kiinnittää enempää viestejä +intro: Firefish -asennus valmis! Ole hyvä ja luo admin-käyttäjä. +done: Valmis +processing: Suorittaa +preview: Esikatselu +default: Oletus +defaultValueIs: 'Oletus: {value}' +noCustomEmojis: Ei emojia +noJobs: Ei töitä +federating: Federoi +blocked: Estetty +silenced: Hiljennetty +suspended: Keskeytetty +all: Kaikki +publishing: Julkaisee +subscribing: Tilaa +notResponding: Ei vastaa +instanceFollowing: Seuraa instanssia +instanceFollowers: Instanssin seuraajat +instanceUsers: Instanssin käyttäjät +changePassword: Muuta salasana +newPasswordRetype: Uudelleensyötä uusi salasana +more: Lisää! +featured: Esillä +usernameOrUserId: Käyttäjänimi tai käyttäjä id +noSuchUser: Käyttäjää ei löydy +lookup: Hae +announcements: Tiedoitteet +imageUrl: Kuva URL-linkki +removed: Onnistuneesti poistettu +removeAreYouSure: Oletko varma, että haluat poistaa " {x}"? +resetAreYouSure: Haluatko nollata? +saved: Tallennettu +messaging: Juttele +upload: Lataa ylös +fromUrl: URL:stä +uploadFromUrl: Ylöslataa URL:stä +uploadFromUrlRequested: Ylöslataus pyydetty +uploadFromUrlMayTakeTime: Voi viedä hetki, kun ylöslataus on valmis. +explore: Tutustu +messageRead: Lue +noMoreHistory: Ei lisää historiaa +startMessaging: Aloita uusi juttelu +manageGroups: Hallitse ryhmiä +nUsersRead: lukenut {n} +agreeTo: Hyväksyn {0} +tos: Palvelun ehdot +start: Aloita +home: Koti +remoteUserCaution: Etäkäyttäjän tiedot saattavat olla puutteellisia. +light: Vaalea +dark: Tumma +lightThemes: Vaaleat teemat +syncDeviceDarkMode: Synkronoi tumma tila laitteen asetuksen mukaan +fileName: Tiedostonimi +selectFile: Valitse tiedosto +selectFiles: Valitse tiedostot +selectFolder: Valitse kansio +selectFolders: Valitse kansiot +renameFile: Uudelleennimeä tiedosto +folderName: Kansionimi +createFolder: Luo kansio +renameFolder: Uudelleennimeä kansio +deleteFolder: Poista kansio +addFile: Lisää tiedosto +emptyDrive: Asemasi on tyhjä +emptyFolder: Tämä kansio on tyhjä +unableToDelete: Ei voitu poistaa +inputNewFileName: Syötä uusi tiedostonimi +inputNewDescription: Syötä uusi kuvateksti +inputNewFolderName: Syötä uusi kansionimi +hasChildFilesOrFolders: Koska kansio ei ole tyhjä, sitä ei voi poistaa. +avatar: Kuvake +banner: Banneri +nsfw: Herkkää sisältöä (NSFW) +whenServerDisconnected: Kun yhteys palvelimeen menetetään +disconnectedFromServer: Yhteys palvelimeen katkennut +reload: Päivitä +doNothing: Hylkää +reloadConfirm: Haluaisitko päivittää aikajanan? +unwatch: Lopeta katselu +watch: Katsele +accept: Hyväksy +reject: Hylkää +normal: Normaali +instanceName: Instanssin nimi +thisMonth: Kuukausi +today: Tänään +monthX: '{month}' +enableLocalTimeline: Ota käyttöön paikallinen aikajana +enableGlobalTimeline: Ota käyttöön globaali aikajana +enableRecommendedTimeline: Ota käyttöön suositellut -aikajana +registration: Rekisteröinti +enableRegistration: Ota käyttöön uuden käyttäjän rekisteröinti +driveCapacityPerLocalAccount: Aseman kapasiteetti paikallista käyttäjää kohti +driveCapacityPerRemoteAccount: Aseman kapasiteetti etäkäyttäjää kohti +inMb: megatavuissa +bannerUrl: Bannerikuvan URL-linkki +pinnedUsers: Kiinnitetyt käyttäjät +pinnedPages: Kiinnitetyt sivut +pinnedClipId: Kiinnitettävän leikkeen ID +enableHcaptcha: Ota käyttöön hCaptcha-tunnistus +recaptcha: CAPTCHA uudelleen +enableRecaptcha: Ota käyttöön CAPTCHA uudelleen +recaptchaSiteKey: Sivuston avain +recaptchaSecretKey: Salausavain +silenceThisInstance: Hiljennä tämä instanssi +silencedInstancesDescription: Lista isäntänimistä, joka haluat hiljentää. Tilejä listassa + kohdellaan "hiljennettynä", ne voivat tehdä seuraajapyyntöjä ja eivät voi tehdä + mainintoja paikallistileistä jossei seurattu. Tämä ei vaikuta estettyihin instansseihin. +hiddenTagsDescription: 'Listaa aihetunnisteet (ilman #-merkkiä) aihetunnisteet, jotka + haluat piilottaa trendaavista ja Tutustu-osiosta. Piilotetut aihetunnisteet ovat + kuitenkin löydettävissä muilla keinoilla. Estetyt instanssit eivät vaikuta, vaikka + listattu tähän.' +currentPassword: Nykyinen salasana +newPassword: Uusi salasana +attachFile: Liitetyt tiedostot +keepOriginalUploadingDescription: Tallentaa alkuperäisen kuvan sellaisenaan. Jos kytketty + päältä, webissä näytettävä versio luodaan ylöslatauksen yhteydessä. +remove: Poista +circularReferenceFolder: Kohdekansio on kansion alikansio, jonka haluat siirtää. +deleteAreYouSure: Oletko varma, että haluat poistaa kokonaan" {x}"? +yearsOld: '{age} vuotias' +activity: Aktiivisuus +images: Kuvat +birthday: Syntymäpäivä +registeredDate: Liittynyt +location: Sijainti +disablingTimelinesInfo: Järjestelmänvalvojilla ja moderaattoreilla on aina pääsy kaikille + aikajanoille, vaikka olisikin poistettu käytöstä. +dayX: '{day}' +yearX: '{year}' +pages: Sivut +instanceDescription: Instanssin kuvaus +invite: Kutsu +iconUrl: Ikoni URL-linkki +pinnedUsersDescription: Listaa käyttäjänimet eroteltuna rivivaihdoin kiinnittääksesi + ne "Tutustu" välilehteen. +pinnedNotes: Kiinnitetyt viestit +hcaptcha: hCaptcha-tunnistus +antennaSource: Antennin lähde +invitationCode: Kutsukoodi +checking: Tarkistetaan... +passwordNotMatched: Ei vastaa +doing: Käsittelee... +category: Kategoria +tags: Tagit +disableAnimatedMfm: Poista MFM -animaatiot käytöstä +openImageInNewTab: Avaa kuvat uuteen välilehteen +dashboard: Kojelauta +local: Paikallinen +remote: Etä +total: Yhteensä +weekOverWeekChanges: Muutokset viime viikkoon +objectStorageRegion: Alue +popout: Ulosvedettävä +volume: Äänenvoimakkuus +masterVolume: Master äänenvoimakkuus +details: Yksityiskohdat +chooseEmoji: Valitse emoji +descendingOrder: Laskevasti +scratchpad: Raaputusalusta +output: Ulostulo +invisibleNote: Näkymätön viesti +enableInfiniteScroll: Lataa enemmän automaattisesti +visibility: Näkyvyys +useCw: Piilota sisältö +poll: Kysely +enablePlayer: Avaa videotoistimeen +enterFileDescription: Syötä tiedostokuvaus +author: Kirjoittaja +manage: Hallinta +description: Kuvaus +describeFile: Lisää tiedostokuvaus +height: Korkeus +large: Suuri +medium: Keskikokoinen +small: Pieni +other: Muu +create: Luo +regenerateLoginTokenDescription: Luo uudelleen kirjautumisen aikana sisäisesti käytettävän + tunnuksen. Normaalisti tämä toiminto ei ole tarpeen. Jos tunniste luodaan uudelleen, + kaikki laitteet kirjautuvat ulos. +setMultipleBySeparatingWithSpace: Erottele useat merkinnät välilyönneillä. +fileIdOrUrl: Tiedosto ID tai URL-linkki +behavior: Käytös +instanceTicker: Viestejä koskevat instanssitiedot +waitingFor: Odottaa {x} +random: Satunnainen +system: Järjestelmä +switchUi: Ulkoasu +createNew: Luo uusi +followersCount: Seuraajien määrä +renotedCount: Saatujen buustausten määrä +followingCount: Seurattujen tilien määrä +notSet: Ei asetettu +nUsers: '{n} Käyttäjää' +nNotes: '{n} Viestiä' +sendErrorReports: Lähetä virheraportteja +backgroundColor: Taustaväri +accentColor: Korostusväri +textColor: Tekstin väri +advanced: Edistynyt +saveAs: Tallenna nimellä... +invalidValue: Epäkelpo arvo. +registry: Rekisteri +closeAccount: Sulje tili +currentVersion: Nykyinen versio +capacity: Kapasiteetti +clear: Palaa +_theme: + explore: Tutustu teemoihin +silenceConfirm: Oletko varma, että haluat hiljentää tämän käyttäjän? +notesAndReplies: Viestit ja vastaukset +withFiles: Tiedostot sisältyvät +silence: Hiljennä +popularTags: Suositut tagit +userList: Listat +about: Tietoja +aboutFirefish: Tietoja Firefishstä +exploreFediverse: Tutustu fediverseen +recentlyUpdatedUsers: Vastikään lisätyt käyttäjät +recentlyRegisteredUsers: Uudet liittyneet jäyttäjät +recentlyDiscoveredUsers: Vastikään löydetyt käyttäjät +exploreUsersCount: Täällä on {count} käyttäjää +share: Jaa +moderation: Sisällön valvonta +nUsersMentioned: Mainittu {n} käyttäjältä +securityKey: Turva-avain +securityKeyName: Avainnimi +registerSecurityKey: Rekisteröi turva-avain +lastUsed: Viimeksi käytetty +unregister: Poista rekisteröinti +passwordLessLogin: Salasanaton sisäänkirjautuminen +cacheClear: Tyhjennä välimuisti +markAsReadAllNotifications: Merkitse kaikki ilmoitukset luetuksi +markAsReadAllUnreadNotes: Merkitse kaikki viestit luetuiksi +uploadFolder: Oletuskansio ylöslatauksille +createGroup: Luo ryhmä +group: Ryhmä +groups: Ryhmät +ownedGroups: Omistetut ryhmät +help: Apua +inputMessageHere: Syötä viesti tähän +close: Sulje +joinedGroups: Liittyneet ryhmät +invites: Kutsut +groupName: Ryhmänimi +members: Jäsenet +language: Kieli +signinHistory: Kirjautumishistoria +docSource: Tämän dokumentin lähde +createAccount: Luo tili +existingAccount: Olemassa oleva tili +promotion: Edistetty +promote: Edistää +numberOfDays: Päivien määrä +accountSettings: Tilin asetukset +objectStorage: Objektitallennus +useObjectStorage: Käytä objektitallennusta +objectStorageBaseUrl: Perus URL-linkki +objectStorageBaseUrlDesc: "Viitteenä käytetty URL-linkki. Määritä CDN:n tai välityspalvelimen + URL-linkki, jos käytät kumpaakin.\nKäytä S3:lle 'https://.s3.amazonaws.com' + ja GCS:lle tai vastaaville palveluille 'https://storage.googleapis.com/' + jne." +objectStorageBucket: Kauha +newNoteRecived: Uusia viestejä +smtpPort: Portti +instanceMute: Instanssin mykistys +repliesCount: Lähetettyjen vastausten määrä +updatedAt: Päivitetty +notFound: Ei löydy +useOsNativeEmojis: Käytä käyttöjärjestelmän natiivi-Emojia +joinOrCreateGroup: Tule kutsutuksi ryhmään tai luo oma ryhmä. +text: Teksti +usernameInvalidFormat: Käytä isoja ja pieniä kirjaimia, numeroita ja erikoismerkkejä. +unsilenceConfirm: Oletko varma, että haluat poistaa käyttäjän hiljennyksen? +popularUsers: Suositut käyttäjät +moderator: Moderaattori +twoStepAuthentication: Kaksivaiheinen tunnistus +notFoundDescription: URL-linkkiin liittyvää sivua ei löytynyt. +antennaKeywords: Kuunneltavat avainsanat +antennaExcludeKeywords: Poislasketut avainsanat +antennaKeywordsDescription: Erottele välilyönneillä AND-ehtoa varten tai rivinvaihdolla + OR-ehtoa varten. +notifyAntenna: Ilmoita uusista viesteistä +withFileAntenna: Vain viestit tiedoston kanssa +enableServiceworker: Ota käyttöön Push-notifikaatiot selaimessasi +antennaUsersDescription: Luettele yksi käyttäjänimi rivi kohti +antennaInstancesDescription: Luettele yksi instanssi riviä kohti +caseSensitive: Isot ja pienet kirjaimet +withReplies: Sisällytä vastaukset +connectedTo: Seuraavat tili(t) on yhdistetty +unsilence: Poista hiljennys +administrator: Järjestelmänvalvoja +token: Merkki +resetPassword: Resetoi salasana +reduceUiAnimation: Vähennä käyttöliittymän animaatioita +transfer: Siirrä +messagingWithUser: Yksityisjuttelu +title: Otsikko +enable: Ota käyttöön +next: Seuraava +retype: Syötä uudelleen +noteOf: Lähettänyt {user} +inviteToGroup: Kutsu ryhmään +quoteAttached: Lainaus +quoteQuestion: Liitä lainauksena? +noMessagesYet: Ei vielä viestejä +newMessageExists: Uusia viestejä +onlyOneFileCanBeAttached: Voit liittää vain yhden tiedoston viestiin +signinRequired: Ole hyvä ja rekisteröidy tai kirjaudu sisään jatkaaksesi +invitations: Kutsut +available: Saatavilla +unavailable: Ei saatavissa +tooShort: Liian lyhyt +tooLong: Liian pitkä +weakPassword: Heikko salasana +normalPassword: Kohtalainen salasana +veryStrongPassword: Vahva salasana +passwordMatched: Vastaa +signinWith: Kirjaudu sisään {x} +signinFailed: Ei voitu kirjautua sisään. Annettu käyttäjänimi tai salasana virheellinen. +tapSecurityKey: Napsauta turva-avaintasi +or: Tai +uiLanguage: Anna käyttöliittymän kieli +groupInvited: Sinut on kutsuttu ryhmään +aboutX: Tietoja {x} +disableDrawer: Älä käytä laatikkotyyppisiä valikoita +youHaveNoGroups: Sinulla ei ole ryhmiä +noHistory: Ei historiaa saatavilla +regenerate: Uudelleenluo +fontSize: Kirjasinkoko +dayOverDayChanges: Muutokset eiliseen +clientSettings: Asiakkaan asetukset +hideThisNote: Piilota tämä viesti +showFeaturedNotesInTimeline: Näytä esillä olevat viestit aikajanalla +objectStorageBucketDesc: Määritä palveluntarjoajasi käyttämä kauhan nimi. +objectStoragePrefix: Etuliite +objectStorageEndpoint: Päätepiste +objectStorageRegionDesc: Määritä alue, kuten "xx-east-1". Jos palvelusi ei tee eroa + alueiden välillä, jätä tämä kohta tyhjäksi tai kirjoita "us-east-1". +objectStorageUseSSL: Käytä SSL-salausta +objectStorageUseSSLDesc: Poista tämä käytöstä, jos et aio käyttää HTTPS:ää API-yhteyksissä +objectStorageUseProxy: Yhdistä välityspalvelimen kautta +objectStorageUseProxyDesc: Poista tämä käytöstä, jos et aio käyttää välityspalvelinta + API-yhteyksiä varten +objectStorageSetPublicRead: Aseta "public-read" ylöslataukseen +serverLogs: Palvelimen lokit +deleteAll: Poista kaikki +showFixedPostForm: Näytä viesti-ikkuna aikajanan yläpuolella +sounds: Äänet +listen: Kuuntele +none: Ei mitään +showInPage: Näytä sivulla +recentUsed: Vastikään käytetty +install: Asenna +uninstall: Poista asennus +installedApps: Hyväksytyt sovellukset +nothing: Ei nähtävää täällä +state: Tila +sort: Järjestä +ascendingOrder: Nousevasti +scratchpadDescription: Raaputusalusta tarjoaa ympäristön AiScript-kokeiluja varten. + Voit kirjoittaa, suorittaa ja tarkistaa sen tulokset vuorovaikutuksessa siinä olevan + Firefishn kanssa. +script: Skripti +disablePagesScript: Poista AiScript käytöstä sivuilla +updateRemoteUser: Päivitä etäkäyttäjän tiedot +deleteAllFiles: Poista kaikki tiedostot +deleteAllFilesConfirm: Oletko varma, että haluat poistaa kaikki tiedostot? +removeAllFollowing: Poista seuraaminen kaikista seuratuista käyttäjistä +removeAllFollowingDescription: Tämän suorittaminen poistaa kaikki {host}:n tilit. + Suorita tämä, jos instanssia ei esimerkiksi enää ole olemassa. +userSuspended: Tämä käyttäjä on hyllytetty. +userSilenced: Tämä käyttäjä on hiljennetty. +yourAccountSuspendedTitle: Tämä tili on hyllytetty +yourAccountSuspendedDescription: Tämä tili on hyllytetty palvelimen palveluehtojen + tai vastaavien rikkomisen vuoksi. Ota yhteyttä ylläpitäjään, jos haluat tietää tarkemman + syyn. Älä luo uutta tiliä. +menu: Valikko +divider: Jakaja +addItem: Lisää kohde +relays: Releet +addRelay: Lisää rele +inboxUrl: Saavuneen postin URL +addedRelays: Lisätyt releet +serviceworkerInfo: Pitää ottaa käyttöön Push-notifikaatioissa. +deletedNote: Poistetut viestit +disablePlayer: Sulje videotoistin +expandTweet: Laajenna twiittiä +themeEditor: Teemaeditori +leaveConfirm: Tallentamattomia muutoksia olemassa. Hylätäänkö ne? +plugins: Liitännäiset +preferencesBackups: Asetusten varmuuskopiot +deck: Kansi +undeck: Jätä kansi +useBlurEffectForModal: Käytä blur-efektiä modaaleissa +useFullReactionPicker: Käytä täysikokoista reaktiovalitsinta +width: Leveys +generateAccessToken: Luo käyttöoikeustunniste +enableAll: Ota käyttöön kaikki +disableAll: Poista käytöstä kaikki +tokenRequested: Myönnä oikeus tiliin +notificationType: Ilmoituksen tyyppi +edit: Muokkaa +emailServer: Sähköpostipalvelin +enableEmail: Ota sähköpostin jakelu käyttöön +emailConfigInfo: Käytetään vahvistamaan sähköpostiosoitteesi rekisteröitymisen yhteydessä + tai jos unohdat salasanasi +email: Sähköposti +smtpHost: Isäntä +smtpUser: Käyttäjänimi +smtpPass: Salasana +emptyToDisableSmtpAuth: Jätä käyttäjänimi ja salasana tyhjäksi ohittaaksesi SMTP verifioinnin +smtpSecureInfo: Kytke tämä päältä kun käytät STARTTLS +testEmail: Kokeile email-lähetystä +wordMute: Sanan hiljennys +regexpError: Säännöllinen lausekevirhe +userSaysSomething: '{name} sanoi jotakin' +userSaysSomethingReason: '{name} sanoi {reason}' +makeActive: Aktivoi +display: Näyttö +copy: Kopioi +metrics: Mittarit +overview: Yleiskatsaus +logs: Lokit +delayed: Viivästynyt +database: Tietokanta +channel: Kanavat +notificationSetting: Ilmoitusasetukset +notificationSettingDesc: Valitse näytettävät ilmoitustyypit. +useGlobalSetting: Käytä globaaleja asetuksia +regenerateLoginToken: Luo kirjautumistunniste uudelleen +sample: Näyte +abuseReports: Raportit +reportAbuse: Raportti +reportAbuseOf: Raportti {name} +fillAbuseReportDescription: Täytä tätä raporttia koskevat tiedot. Jos se koskee tiettyä + viestiä, ilmoita sen URL-linkki. +abuseReported: Raporttisi on lähetetty. Kiitoksia paljon. +reporter: Raportoija +reporteeOrigin: Ilmoittajan alkuperä +reporterOrigin: Raportoijan alkuperä +forwardReport: Välitä raportti etäinstanssille +forwardReportIsAnonymous: Tilisi sijasta anonyymi järjestelmätili näytetään toimittajana + etäinstanssissa. +send: Lähetä +abuseMarkAsResolved: Merkitse raportti ratkaistuksi +openInNewTab: Avaa uuteen välilehteen +openInSideView: Avaa sivunäkymään +defaultNavigationBehaviour: Navigoinnin oletuskäyttäytyminen +editTheseSettingsMayBreakAccount: Näiden asetusten muuttaminen voi vahingoittaa tiliäsi. +desktop: Työpöytä +clip: Leike +optional: Vaihtoehtoinen +createNewClip: Luo uusi leike +unclip: Poista leike +confirmToUnclipAlreadyClippedNote: Tämä viesti on jo osa "{name}"-leikettä. Haluatko + sen sijaan poistaa sen tästä leikkeestä? +manageAccessTokens: Hallitse käyttöoikeuskoodeja +accountInfo: Tilin tiedot +notesCount: Viestien määrä +renotesCount: Lähetettyjen buustausten määrä +repliedCount: Saatujen vastausten määrä +sentReactionsCount: Lähetettyjen reaktioiden määrä +receivedReactionsCount: Saatujen reaktioiden määrä +pollVotesCount: Lähetettyjen kyselyäänien määrä +pollVotedCount: Saatujen kyselyäänien määrä +yes: Kyllä +no: Ei +driveFilesCount: Tiedostojen määrä asemalla +driveUsage: Aseman tilankäyttö +noCrawle: Hylkää hakukoneindeksointi +noCrawleDescription: Pyydä hakukoneita olemaan indeksoimatta profiilisivuasi, viestejäsi, + sivujasi jne. +alwaysMarkSensitive: Merkitse oletusarvoisesti herkäksi sisällöksi (NSFW) +loadRawImages: Alkuperäisten kuvien lataaminen pikkukuvien näyttämisen sijaan +disableShowingAnimatedImages: Älä näytä animoituja kuvia +verificationEmailSent: Vahvistussähköposti on lähetetty. Seuraa mukana olevaa linkkiä + suorittaaksesi vahvistuksen loppuun. +emailVerified: Sähköposti on vahvistettu +noteFavoritesCount: Kirjanmerkittyjen viestien määrä +pageLikedCount: Saatujen Sivu-tykkäysten määrä +pageLikesCount: Sivut-tykkäysten määrä +contact: Yhteystieto +useSystemFont: Käytä järjestelmän oletuskirjasinta +clips: Leikkeet +experimentalFeatures: Kokeiluluontoiset ominaisuudet +developer: Kehittäjä +makeExplorable: Tee tili näkyväksi osiossa "Tutustu" +makeExplorableDescription: Jos otat tämän pois käytöstä, tilisi ei näy "Tutustu"-osiossa. +showGapBetweenNotesInTimeline: Näytä väli viestien välissä aikajanalla +duplicate: Monista +left: Vasen +center: Keskellä +wide: Leveä +narrow: Kapea +reloadToApplySetting: Asetus otetaan käyttöön vain uudelleenladattaessa. Ladataanko + uudelleen nyt? +showTitlebar: Näytä otsikkorivi +clearCache: Tyhjennä välimuisti +onlineUsersCount: '{n} käyttäjää online-tilassa' +myTheme: Minun teemani +value: Arvo +saveConfirm: Tallenna muutokset? +deleteConfirm: Poistetaanko tosiaan? +latestVersion: Uusin versio +newVersionOfClientAvailable: Asiakasohjelmiston uudempi versio saatavilla. +usageAmount: Käyttö +inUse: Käytetty +editCode: Muokkaa koodia +apply: Käytä +receiveAnnouncementFromInstance: Vastaanota ilmoituksia tästä instanssista +emailNotification: Sähköposti-ilmoitukset +publish: Julkaise +inChannelSearch: Etsi kanavalta +useReactionPickerForContextMenu: Avaa reaktiovalitsin napsauttamalla oikeaa +typingUsers: '{users} kirjoittaa' +jumpToSpecifiedDate: Hyppää tiettyyn päivään +markAllAsRead: Merkitse kaikki luetuksi +goBack: Takaisin +unlikeConfirm: Poistatko todella tykkäyksesi? +fullView: Täysi koko +quitFullView: Poistu täydestä koosta +addDescription: Lisää kuvaus +markAsReadAllTalkMessages: Merkitse kaikki yksityisviestit luetuiksi +appearance: Ulkonäkö +messagingWithGroup: Ryhmäjuttelu +newPasswordIs: Uusi salasana on "{password}" +noFollowRequests: Sinulla ei ole odottavia seuraajapyyntöjä +objectStoragePrefixDesc: Tiedostot tallennetaan hakemistoihin tällä etuliitteellä. +objectStorageEndpointDesc: Jätä tämä tyhjäksi, jos käytät AWS S3:a. Muuten määritä + päätepisteeksi '' tai ':' käyttämästäsi palvelusta riippuen. +unableToProcess: Toimenpidettä ei voida suorittaa loppuun +installedDate: Hyväksynyt +lastUsedDate: Viimeksi käytetty +pluginTokenRequestedDescription: Tämä litännäinen voi käyttää tässä asetettuja käyttöoikeuksia. +permission: Oikeudet +smtpConfig: Lähtevän sähköpostin palvelimen (SMTP) asetukset +regexpErrorDescription: 'Säännöllisessä lausekkeessa tapahtui virhe rivillä {line} + sanan {tab} sanan mykistäminen rivillä {line}:' +emailAddress: Sähköpostiosoite +smtpSecure: Käytä implisiittistä SSL/TLS:ää SMTP-yhteyksissä +useGlobalSettingDesc: Jos se on päällä, käytetään tilisi ilmoitusasetuksia. Jos se + on pois päältä, voit tehdä yksilöllisiä asetuksia. +public: Julkinen +i18nInfo: Vapaaehtoiset kääntävät Firefishta eri kielille. Voit auttaa osoitteessa + {link}. +lockedAccountInfo: Ellet aseta postauksen näkyvyydeksi "Vain seuraajille", postauksesi + näkyvät kaikille, vaikka vaatisitkin seuraajilta manuaalista hyväksyntää. +sendErrorReportsDescription: "Kun tämä on päällä, yksityiskohtaiset virhetiedot jaetaan + Firefishn kanssa ongelman ilmetessä, mikä auttaa parantamaan Firefishn laatua.\n + Näihin tietoihin sisältyy esimerkiksi käyttöjärjestelmäversio, käyttämäsi selain, + toimintasi Firefishssä jne." +createdAt: Luotu +youAreRunningUpToDateClient: Käytössäsi on asiakasohjelman uusin versio. +needReloadToApply: Uudelleenlataus vaaditaan, jotta tämä näkyy. +showingPastTimeline: Näytetään parhaillaan vanhaa aikajanaa +userPagePinTip: Voit näyttää viestit täällä valitsemalla yksittäisten viestien valikosta + "Kiinnitä profiiliin". +notSpecifiedMentionWarning: Tämä viesti sisältää mainintoja käyttäjistä, joita ei + ole mainittu vastaanottajina +name: Nimi +allowedInstances: Sallitut (whitelisted) instanssit +hashtags: Aihetunnisteet +troubleshooting: Vianetsintä +received: Vastaanotettu +searchResult: Hakutulokset +filter: Suodatin +antennas: Antennit +noMaintainerInformationWarning: Ylläpitäjän tietoja ei ole konfiguroitu. +controlPanel: Hallintapaneeli +manageAccounts: Hallitse tilejä +makeReactionsPublic: Aseta reaktiohistoria julkiseksi +unread: Lukematon +deleted: Poistettu +editNote: Muokkaa viestiä +edited: 'Muokattu klo {date} {time}' +avoidMultiCaptchaConfirm: Useiden Captcha-järjestelmien käyttö voi aiheuttaa häiriöitä + niiden välillä. Haluatko poistaa käytöstä muut tällä hetkellä käytössä olevat Captcha-järjestelmät? + Jos haluat, että ne pysyvät käytössä, paina peruutusnäppäintä. +manageAntennas: Hallitse antenneja +info: Tietoja +userInfo: Käyttäjätiedot +unknown: Tuntematon +onlineStatus: Online-tila +hideOnlineStatus: Piilota Online-tila +hideOnlineStatusDescription: Online-tilasi piilottaminen vähentää joidenkin toimintojen, + kuten haun, käyttömukavuutta. +online: Online +active: Aktiivinen +offline: Offline +botProtection: Botti-suojaus +instanceBlocking: Federaatio Esto/Hiljennys +enabled: Otettu käyttöön +quickAction: Pikatoiminnot +user: Käyttäjä +accounts: Tilit +switch: Vaihda +noBotProtectionWarning: Botti-suojausta ei ole konfiguroitu. +configure: Konfiguroi +postToGallery: Luo uusi galleriaviesti +gallery: Galleria +recentPosts: Viimeaikaiset sivut +popularPosts: Suositut sivut +ads: Mainokset +expiration: Aikaraja +memo: Muistio +priority: Prioriteetti +high: Korkea +middle: Keskitaso +low: Alhainen +emailNotConfiguredWarning: Sähköpostiosoitetta ei ole asetettu. +ratio: Suhde +secureMode: Suojattu moodi (Valtuutettu nouto) +instanceSecurity: Instanssiturvallisuus +allowedInstancesDescription: Federaatiota varten sallitulle listalle (whitelisted) + otettavien instanssien isännät, kukin erotettuna uudella rivillä (sovelletaan vain + yksityisessä tilassa). +previewNoteText: Näytä esikatselu +customCss: Kustomoitu CSS +customCssWarn: Tätä asetusta tulisi käyttää vain, jos tiedät, mitä se tekee. Vääränlaisten + arvojen syöttäminen voi aiheuttaa sen, että asiakasohjelma lakkaa toimimasta normaalisti. +recommended: Suositeltu +squareAvatars: Näytä neliön malliset kuvakkeet +seperateRenoteQuote: Erilliset buustaa ja lainaa -napit +sent: Lähetetty +useBlurEffect: Käytä blur-efektejä käyttöliittymässä +misskeyUpdated: Firefish on päivitetty! +whatIsNew: Näytä muutokset +translate: Käännä +translatedFrom: Käännetty kielestä {x} +accountDeletionInProgress: Tilin poistaminen on parhaillaan menossa +usernameInfo: Nimi, joka erottaa tilisi muista tällä palvelimella olevista tileistä. Voit + käyttää aakkosia (a~z, A~Z), numeroita (0~9) tai alaviivoja (_). Käyttäjätunnuksia + ei voi muuttaa myöhemmin. +aiChanMode: Ai-chan klassisessa käyttöliittymässä +keepCw: Pidä sisältövaroitukset +pubSub: Pub/Sub tilit +lastCommunication: Viimeisin kommunikaatio +unresolved: Ratkaisematon +breakFollow: Poista seuraaja +breakFollowConfirm: Oletko varma, että haluat poistaa seuraajan? +itsOn: Otettu käyttöön +itsOff: Poistettu käytöstä +emailRequiredForSignup: Vaadi sähköpostiosoitetta sisäänkirjautumiseen +makeReactionsPublicDescription: Tämä laittaa viimeisimmät reaktiosi julkisesti näkyväksi. +classic: Klassinen +muteThread: Mykistä lanka +unmuteThread: Poista langan mykistys +ffVisibility: Seurataan/Seurattavien näkyvyys +notRecommended: Ei suositeltu +disabled: Poistettu käytöstä +selectAccount: Valitse tili +switchAccount: Vaihda tili +administration: Hallinta +shareWithNote: Jaa viestin kanssa +secureModeInfo: Kun pyydät muista instansseista, älä lähetä takaisin ilman todisteita. +privateMode: Yksityinen moodi +privateModeInfo: Kun tämä on käytössä, vain sallittujen (whitelisted) luetteloon merkityt + instanssit voivat liittyä instansseihisi. Kaikki viestit piilotetaan yleisöltä. +global: Globaali +resolved: Ratkaistu +learnMore: Opi lisää +continueThread: Jatka lankaa +file: Tiedosto +cropImageAsk: Haluatko rajata tätä kuvaa? +recentNHours: Viimeiset {n} tuntia +rateLimitExceeded: Nopeusraja ylittynyt +cropImage: Rajaa kuvaa +socialTimeline: Sosiaalinen aikajana +themeColor: Instanssi Ticker Väri +check: Tarkista +ffVisibilityDescription: Antaa sinun konfiguroida, kuka voi nähdä ketä seuraat ja + kuka seuraa sinua. +homeTimeline: Koti aikajana +size: Koko +showLocalPosts: 'Näytä paikalliset viestit:' +oneDay: Päivä +instanceDefaultDarkTheme: Instanssikattava tumma oletusteema +recentNDays: Viimeiset {n} päivää +reflectMayTakeTime: Voi kestää jonkin aikaa, ennen kuin tämä näkyy. +failedToFetchAccountInformation: Ei voitu hakea tietoja +requireAdminForView: Sinun tulee kirjautua järjestelmänvalvojana nähdäksesi tämän. +driveCapOverrideCaption: Resetoi oletusarvoon syöttämällä arvo 0 tai alempi. +isSystemAccount: Järjestelmän luoma ja automaattisesti käyttämä tili. +userSaysSomethingReasonReply: '{name} vastasi viestiin sisältäen {reason}' +userSaysSomethingReasonRenote: '{name} buustasi viestiin sisältäen {reason}' +voteConfirm: Vahvista äänesi vaihtoehdolle "{choice}"? +hide: Piilota +leaveGroup: Poistu ryhmästä +leaveGroupConfirm: Oletko varma, että haluat poistua ryhmästä "{name}"? +welcomeBackWithName: Tervetuloa takaisin, {name} +clickToFinishEmailVerification: Klikkaa [{ok}] viimeistelläksesi sähköpostivahvistuksen. +overridedDeviceKind: Laitetyyppi +tablet: Tabletti +numberOfColumn: Sarakkeiden määrä +mutePeriod: Vaiennuksen kesto +indefinitely: Pysyvästi +tenMinutes: 10 minuuttia +oneHour: Tunti +thereIsUnresolvedAbuseReportWarning: On ratkaisemattomia raportteja. +driveCapOverrideLabel: Muuta aseman kapasiteetti tälle käyttäjälle +userSaysSomethingReasonQuote: '{name} lainasi viestiä sisältäen {reason}' +deleteAccountConfirm: Tämä peruuttamattomasti poistaa tilisi. Jatketaanko? +incorrectPassword: Väärä salasana. +useDrawerReactionPickerForMobile: Näytä reaktiovalitsin mobiilissa laatikkomallisena +smartphone: Älypuhelin +auto: Automaattinen +oneWeek: Viikko +instanceDefaultLightTheme: Instanssin kattava vaalea oletusteema +instanceDefaultThemeDescription: Anna teemakoodi objektiformaatille. +noEmailServerWarning: Sähköpostipalvelinta ei konfiguroituna. diff --git a/locales/fr-FR.yml b/locales/fr-FR.yml new file mode 100644 index 0000000..209b103 --- /dev/null +++ b/locales/fr-FR.yml @@ -0,0 +1,2353 @@ +_lang_: "Français" +headlineFirefish: "Une plateforme libre de réseaux sociaux décentralisés qui est gratuite + pour toujours ! 🚀" +introFirefish: "Bienvenue ! Firefish est une plateforme libre de réseaux sociaux décentralisés + qui est gratuite pour toujours ! 🚀" +monthAndDay: "{day}/{month}" +search: "Rechercher" +notifications: "Notifications" +username: "Nom d'utilisateur·rice" +password: "Mot de passe" +forgotPassword: "Mot de passe oublié" +fetchingAsApObject: "Récupération depuis le fédivers" +ok: "OK" +gotIt: "J'ai compris !" +cancel: "Annuler" +enterUsername: "Entrer un nom d'utilisateur·rice" +renotedBy: "Boosté par {user}" +noNotes: "Aucune publication" +noNotifications: "Aucune notification" +instance: "Serveur" +settings: "Paramètres" +basicSettings: "Paramètres généraux" +otherSettings: "Paramètres avancés" +openInWindow: "Ouvrir dans une nouvelle fenêtre" +profile: "Profil" +timeline: "Fil" +noAccountDescription: "L'utilisateur·rice n'a pas encore renseigné de biographie de + présentation sur son profil." +login: "Se connecter" +loggingIn: "Connexion en cours" +logout: "Se déconnecter" +signup: "S'inscrire" +uploading: "Envoi en cours..." +save: "Enregistrer" +users: "Utilisateur·rice·s" +addUser: "Ajouter un·e utilisateur·rice" +favorite: "Ajouter aux favoris" +favorites: "Favoris" +unfavorite: "Retirer des favoris" +favorited: "Ajouté à mes favoris." +alreadyFavorited: "Déjà ajouté aux favoris." +cantFavorite: "Impossible d'ajouter aux favoris." +pin: "Épingler sur le profil" +unpin: "Désépingler" +copyContent: "Copier le contenu" +copyLink: "Copier le lien" +delete: "Supprimer" +deleteAndEdit: "Supprimer et réécrire" +deleteAndEditConfirm: "Êtes-vous sûr·e de vouloir supprimer cette publication et la + reformuler ? Vous perdrez toutes les réactions, boosts et réponses liées." +addToList: "Ajouter à une liste" +sendMessage: "Envoyer un message" +copyUsername: "Copier le nom d'utilisateur·rice" +searchUser: "Chercher un·e utilisateur·rice" +reply: "Répondre" +loadMore: "Charger plus" +showMore: "Afficher plus" +showLess: "Fermer" +youGotNewFollower: "s'est abonné à vous" +receiveFollowRequest: "Demande d'abonnement reçue" +followRequestAccepted: "La demande d'abonnement a été acceptée" +mention: "Mentionner" +mentions: "Mentions" +directNotes: "Messages directs" +importAndExport: "Importation et exportation" +import: "Importer" +export: "Exporter" +files: "Fichiers" +download: "Télécharger" +driveFileDeleteConfirm: "Êtes-vous sûr·e de vouloir supprimer le fichier « {name} » ? + Il sera retiré de toutes les publications qui le contiennent comme pièce-jointe." +unfollowConfirm: "Désirez-vous vous désabonner de {name} ?" +exportRequested: "Vous avez demandé une exportation. L'opération pourrait prendre + un peu de temps. Une fois terminée, le fichier résultant sera ajouté au Drive." +importRequested: "Vous avez initié une importation. Cela pourrait prendre un peu de + temps." +lists: "Listes" +noLists: "Vous n'avez aucune liste" +note: "Publier" +notes: "Publications" +following: "Abonnements" +followers: "Abonné·e·s" +followsYou: "S'abonne à vous" +createList: "Créer une liste" +manageLists: "Gérer les listes" +error: "Erreur" +somethingHappened: "Une erreur est survenue" +retry: "Réessayer" +pageLoadError: "Le chargement de la page a échoué." +pageLoadErrorDescription: "Cela est généralement causé par le cache du navigateur + ou par un problème réseau. Veuillez vider votre cache ou attendre un peu et réessayer." +serverIsDead: "Le serveur ne répond pas. Patientez quelques instants puis essayez + à nouveau." +youShouldUpgradeClient: "Si la page ne s'affiche pas correctement, rechargez-la pour + mettre votre client à jour." +enterListName: "Nom de la liste" +privacy: "Confidentialité" +makeFollowManuallyApprove: "Accepter manuellement les demandes d'abonnement" +defaultNoteVisibility: "Visibilité des publications par défaut" +follow: "S'abonner" +followRequest: "Demande d'abonnement" +followRequests: "Demandes d'abonnement" +unfollow: "Se désabonner" +followRequestPending: "Demande d'abonnement en attente de confirmation" +enterEmoji: "Insérer un émoji" +renote: "Booster" +unrenote: "Annuler le boost" +renoted: "Boosté." +cantRenote: "Cette publication ne peut pas être boosté." +cantReRenote: "Impossible de partager ce boost." +quote: "Citer" +pinnedNote: "Publication épinglée" +pinned: "Épingler sur le profil" +you: "Vous" +clickToShow: "Cliquer pour afficher" +sensitive: "Contenu sensible" +add: "Ajouter" +reaction: "Réaction" +reactionSetting: "Réactions à afficher dans le sélecteur de réactions" +reactionSettingDescription2: "Déplacer pour réorganiser, cliquer pour effacer, utiliser + « + » pour ajouter." +rememberNoteVisibility: "Se souvenir des paramètres de visibilité des publications" +attachCancel: "Supprimer le fichier attaché" +markAsSensitive: "Marquer comme sensible (NSFW)" +unmarkAsSensitive: "Supprimer le marquage comme sensible (NSFW)" +enterFileName: "Entrer le nom du fichier" +mute: "Masquer" +unmute: "Ne plus masquer" +block: "Bloquer" +unblock: "Débloquer" +suspend: "Suspendre" +unsuspend: "Annuler la suspension" +blockConfirm: "Êtes-vous sûr·e de vouloir bloquer ce compte ?" +unblockConfirm: "Êtes-vous sûr·e de vouloir débloquer ce compte ?" +suspendConfirm: "Êtes-vous sûr·e de vouloir suspendre ce compte ?" +unsuspendConfirm: "Êtes-vous sûr·e de vouloir annuler la suspension de ce compte ?" +selectList: "Sélectionner une liste" +selectAntenna: "Sélectionner une antenne" +selectWidget: "Sélectionner un widget" +editWidgets: "Modifier les widgets" +editWidgetsExit: "Valider les modifications" +customEmojis: "Émojis personnalisés" +emoji: "Émoji" +emojis: "Émoji" +emojiName: "Nom de l'émoji" +emojiUrl: "URL de l'émoji" +addEmoji: "Ajouter un émoji" +settingGuide: "Configuration proposée" +cacheRemoteFiles: "Mise en cache des fichiers distants" +cacheRemoteFilesDescription: "Lorsque cette option est désactivée, les fichiers distants + sont chargés directement depuis le serveur distant. La désactiver diminuera certes + l'utilisation de l'espace de stockage local mais augmentera le trafic réseau puisque + les miniatures ne seront plus générées." +flagAsBot: "Ce compte est automatisé" +flagAsBotDescription: "Si ce compte est géré de manière automatisée, choisissez cette + option. Si elle est activée, elle agira comme un marqueur pour les autres développeurs + afin d'éviter des chaînes d'interaction sans fin avec d'autres comptes automatisés + et d'ajuster les systèmes internes de Firefish pour traiter ce compte comme étant + automatisé." +flagAsCat: "Ce compte est un chat" +flagAsCatDescription: "Vous aurez des oreilles de chat et parlerez comme un chat !" +flagShowTimelineReplies: "Afficher les réponses dans le fil" +autoAcceptFollowed: "Accepter automatiquement les demandes d'abonnement venant d'utilisateurs + auxquels vous êtes abonné" +addAccount: "Ajouter un compte" +loginFailed: "Échec de la connexion" +showOnRemote: "Ouvrir la page d'origine" +general: "Général" +wallpaper: "Fond d'écran" +setWallpaper: "Définir le fond d'écran" +removeWallpaper: "Supprimer le fond d'écran" +searchWith: "Recherche : {q}" +youHaveNoLists: "Vous n'avez aucune liste" +followConfirm: "Êtes-vous sûr·e de vouloir vous abonner à {name} ?" +proxyAccount: "Compte proxy" +proxyAccountDescription: "Un compte proxy se comporte, dans certaines conditions, + comme un·e abonné·e distant·e pour les utilisateur·rice·s d'autres serveurs. Par + exemple, quand un·e utilisateur·rice local ajoute un·e utilisateur·rice distant·e + à une liste, ses publications ne seront pas visibles sur le serveur si personne + n'est abonné à cet·te utilisateur·rice. Le compte proxy va donc s'abonner à cet·te + utilisateur·rice pour que ses publications soient acheminées." +host: "Serveur distant" +selectUser: "Sélectionner un·e utilisateur·rice" +recipient: "Destinataire" +annotation: "Commentaires" +federation: "Fédération" +instances: "Serveurs" +registeredAt: "Premier contact le" +latestRequestSentAt: "Dernière requête envoyée" +latestRequestReceivedAt: "Dernière requête reçue" +latestStatus: "Dernier statut" +storageUsage: "Stockage utilisé" +charts: "Graphiques" +perHour: "par heure" +perDay: "par jour" +stopActivityDelivery: "Arrêter l'envoi de l'activité" +blockThisInstance: "Bloquer ce serveur" +operations: "Opérations" +software: "Logiciel" +version: "Version" +metadata: "Métadonnées" +monitor: "Contrôle" +jobQueue: "File d'attente" +cpuAndMemory: "Processeur et mémoire" +network: "Réseau" +disk: "Disque" +instanceInfo: "Informations du serveur" +statistics: "Statistiques" +clearQueue: "Vider la file d'attente" +clearQueueConfirmTitle: "Êtes-vous sûr·e de vouloir vider la file d'attente ?" +clearQueueConfirmText: "Les publications non distribuées ne seront pas délivrées. + Normalement, vous n'avez pas besoin d'effectuer cette opération." +clearCachedFiles: "Vider le cache" +clearCachedFilesConfirm: "Êtes-vous sûr·e de vouloir vider tout le cache de fichiers + distants ?" +blockedInstances: "Serveurs bloqués" +blockedInstancesDescription: "Listez les serveurs que vous désirez bloquer, un par + ligne. Ces serveurs ne seront plus en capacité d'interagir avec votre serveur." +muteAndBlock: "Masqués et bloqués" +mutedUsers: "Utilisateur·rice·s en sourdine" +blockedUsers: "Utilisateur·rice·s bloqué·e·s" +noUsers: "Il n'y a pas d'utilisateur·rice·s" +editProfile: "Modifier votre profil" +noteDeleteConfirm: "Êtes-vous sûr·e de vouloir supprimer cette publication ?" +pinLimitExceeded: "Vous ne pouvez pas épingler plus de publications" +intro: "L'installation de Firefish est terminée ! Veuillez créer un compte administrateur." +done: "Terminé" +processing: "Traitement en cours" +preview: "Aperçu" +default: "Par défaut" +noCustomEmojis: "Il n'y a pas d'émoji" +noJobs: "Il n'y a aucune tâche planifiée" +federating: "En cours de fédération" +blocked: "Bloqué·e" +suspended: "Suspendu·e" +all: "Tous" +subscribing: "Abonné" +publishing: "Publié" +notResponding: "Ne répond pas" +instanceFollowing: "Abonnements d'un serveur" +instanceFollowers: "Abonné·e·s du serveur" +instanceUsers: "Utilisateur·rice·s de ce serveur" +changePassword: "Modifier votre mot de passe" +security: "Sécurité" +retypedNotMatch: "Les saisies ne correspondent pas." +currentPassword: "Mot de passe actuel" +newPassword: "Nouveau mot de passe" +newPasswordRetype: "Répéter le nouveau mot de passe" +attachFile: "Joindre un fichier" +more: "Plus !" +featured: "Tendances" +usernameOrUserId: "Nom d'utilisateur·rice ou ID utilisateur" +noSuchUser: "Utilisateur·rice non trouvé·e" +lookup: "Recherche" +announcements: "Annonces" +imageUrl: "URL de l'image" +remove: "Supprimer" +removed: "Supprimé" +removeAreYouSure: "Êtes-vous sûr·e de vouloir supprimer « {x} » ?" +deleteAreYouSure: "Êtes-vous sûr·e de vouloir supprimer « {x} » ?" +resetAreYouSure: "Voulez-vous réinitialiser ?" +saved: "Enregistré" +messaging: "Discuter" +upload: "Téléverser" +keepOriginalUploading: "Garder l'image d'origine" +fromDrive: "Depuis le Drive" +fromUrl: "Depuis une URL" +uploadFromUrl: "Téléverser via une URL" +uploadFromUrlDescription: "URL du fichier que vous souhaitez téléverser" +uploadFromUrlRequested: "Téléversement demandé" +uploadFromUrlMayTakeTime: "Le téléversement de votre fichier peut prendre un certain + temps." +explore: "Découvrir" +messageRead: "Lu" +noMoreHistory: "Il n'y a plus d'historique" +startMessaging: "Commencer à discuter" +nUsersRead: "Lu par {n} personnes" +agreeTo: "J'accepte {0}" +tos: "Conditions d'utilisation" +start: "Commencer" +home: "Principal" +remoteUserCaution: "Les informations de ce compte risquent d'être incomplètes du fait + que l'utilisateur·rice provient d'une instance distante." +activity: "Activité" +images: "Images" +birthday: "Date de naissance" +yearsOld: "{age} ans" +registeredDate: "Inscrit le" +location: "Localisation" +theme: "Thème" +themeForLightMode: "Thème à utiliser en Mode Clair" +themeForDarkMode: "Thème à utiliser en Mode Sombre" +light: "Clair" +dark: "Sombre" +lightThemes: "Thèmes clairs" +darkThemes: "Thèmes sombres" +syncDeviceDarkMode: "Utiliser le mode sombre de votre appareil" +drive: "Drive" +fileName: "Nom du fichier" +selectFile: "Choisir le fichier" +selectFiles: "Choisir les fichiers" +selectFolder: "Sélectionnez un dossier" +selectFolders: "Sélectionnez des dossiers" +renameFile: "Renommer le fichier" +folderName: "Nom du dossier" +createFolder: "Créer un dossier" +renameFolder: "Renommer le dossier" +deleteFolder: "Supprimer le dossier" +addFile: "Ajouter un fichier" +emptyDrive: "Le Drive est vide" +emptyFolder: "Le dossier est vide" +unableToDelete: "Suppression impossible" +inputNewFileName: "Entrez un nouveau nom de fichier" +inputNewDescription: "Veuillez entrer une nouvelle description au fichier" +inputNewFolderName: "Entrez un nouveau nom de dossier" +circularReferenceFolder: "Le dossier de destination est un sous-dossier du dossier + que vous souhaitez déplacer." +hasChildFilesOrFolders: "Impossible de supprimer ce dossier, car il n'est pas vide." +copyUrl: "Copier l'URL" +rename: "Renommer" +avatar: "Avatar" +banner: "Bannière" +nsfw: "Contenu sensible (NSFW)" +whenServerDisconnected: "Lorsque la connexion au serveur est perdue" +disconnectedFromServer: "Déconnecté·e du serveur" +reload: "Rafraîchir" +doNothing: "Ignorer" +reloadConfirm: "Voulez-vous recharger le fil ?" +watch: "Surveiller" +unwatch: "Ne plus surveiller" +accept: "Autoriser" +reject: "Refuser" +normal: "Normal" +instanceName: "Nom du serveur" +instanceDescription: "Description du serveur" +maintainerName: "L'administrateur·rice" +maintainerEmail: "Email de l'administrateur·rice" +tosUrl: "URL des conditions d'utilisation" +thisYear: "Cette année" +thisMonth: "Ce mois-ci" +today: "Aujourd'hui" +dayX: "{day}" +monthX: "{month}" +yearX: "{year}" +pages: "Pages" +enableLocalTimeline: "Activer le fil local" +enableGlobalTimeline: "Activer le fil global" +disablingTimelinesInfo: "Même si vous désactivez ces fils, les administrateur·rice·s + et les modérateur·rice·s pourront toujours y accéder." +registration: "S'inscrire" +enableRegistration: "Autoriser les nouvelles inscriptions" +invite: "Inviter" +driveCapacityPerLocalAccount: "Volume du Drive par utilisateur local" +driveCapacityPerRemoteAccount: "Volume du Drive par utilisateur distant" +inMb: "en mégaoctets" +iconUrl: "URL de l'icône" +bannerUrl: "URL de l'image de la bannière" +backgroundImageUrl: "URL de l'image d'arrière-plan" +basicInfo: "Informations basiques" +pinnedUsers: "Utilisateur·rice épinglé·e" +pinnedUsersDescription: "Listez les utilisateur·rice·s que vous souhaitez voir épinglé·e·s + sur la page « Découvrir », un·e par ligne." +pinnedPages: "Pages épinglées" +pinnedPagesDescription: "Inscrivez le chemin des Pages que vous souhaitez épingler + en haut de la page du serveur. Séparez les d'un retour à la ligne." +pinnedClipId: "Identifiant du clip épinglé" +pinnedNotes: "Publications épinglées" +hcaptcha: "hCaptcha" +enableHcaptcha: "Activer hCaptcha" +hcaptchaSiteKey: "Clé du site" +hcaptchaSecretKey: "Clé secrète" +recaptcha: "reCAPTCHA" +enableRecaptcha: "Activer reCAPTCHA" +recaptchaSiteKey: "Clé du site" +recaptchaSecretKey: "Clé secrète" +avoidMultiCaptchaConfirm: "L'utilisation de plusieurs Captchas peut provoquer des + interférences. Souhaitez-vous désactiver l'autre Captcha ? Vous pouvez laisser plusieurs + Captcha activés en appuyant sur Annuler." +antennas: "Antennes" +manageAntennas: "Gérer les antennes" +name: "Nom" +antennaSource: "Source de l'antenne" +antennaKeywords: "Mots clés à recevoir" +antennaExcludeKeywords: "Mots clés à exclure" +antennaKeywordsDescription: "Séparer avec des espaces pour la condition AND. Séparer + avec un saut de ligne pour une condition OR." +notifyAntenna: "Je souhaite recevoir les notifications des nouvelles publications" +withFileAntenna: "Publications ayant des pièces-jointes uniquement" +enableServiceworker: "Activer les notifications poussées pour votre navigateur" +antennaUsersDescription: "Saisissez un seul nom d'utilisateur·rice par ligne" +caseSensitive: "Sensible à la casse" +withReplies: "Inclure les réponses" +connectedTo: "Vous êtes connectés aux services suivants" +notesAndReplies: "Publications et Réponses" +withFiles: "Avec fichiers joints" +silence: "Mettre en sourdine" +silenceConfirm: "Êtes-vous sûr·e de vouloir mettre l'utilisateur·rice en sourdine ?" +unsilence: "Annuler la sourdine" +unsilenceConfirm: "Êtes-vous sûr·e de vouloir annuler la mise en sourdine de cet·te + utilisateur·rice ?" +popularUsers: "Utilisateur·rice·s populaires" +recentlyUpdatedUsers: "Utilisateur·rice·s actif·ve·s récemment" +recentlyRegisteredUsers: "Utilisateur·rice·s récemment inscrit·e·s" +recentlyDiscoveredUsers: "Utilisateur·rice·s récemment découvert·e·s" +exploreUsersCount: "Il y a {count} utilisateur·rice·s" +exploreFediverse: "Explorer le fédivers" +popularTags: "Mots-clés populaires" +userList: "Listes" +about: "Informations" +aboutFirefish: "À propos de Firefish" +administrator: "Administrateur" +token: "Jeton" +twoStepAuthentication: "Authentification à deux facteurs" +moderator: "Modérateur·rice·s" +nUsersMentioned: "{n} utilisateur·rice·s mentionné·e·s" +securityKey: "Clé de sécurité" +securityKeyName: "Nom de la clé" +registerSecurityKey: "Enregistrer une clé de sécurité" +lastUsed: "Dernier utilisé" +unregister: "Se désinscrire" +passwordLessLogin: "Se connecter sans mot de passe" +resetPassword: "Réinitialiser le mot de passe" +newPasswordIs: "Votre nouveau mot de passe est « {password} »" +reduceUiAnimation: "Réduire les animations dans l'interface" +share: "Partager" +notFound: "Non trouvé" +notFoundDescription: "Aucune page ne correspond à l'URL spécifiée." +uploadFolder: "Emplacement de téléversement par défaut" +cacheClear: "Vider le cache" +markAsReadAllNotifications: "Marquer toutes les notifications comme lues" +markAsReadAllUnreadNotes: "Marquer toutes les publications comme lues" +markAsReadAllTalkMessages: "Marquer toutes les discussions comme lues" +help: "Aide" +inputMessageHere: "Écrivez votre message ici" +close: "Fermer" +group: "Groupe" +groups: "Groupes" +createGroup: "Créer un groupe" +ownedGroups: "Mes groupes" +joinedGroups: "Groupes rejoints" +invites: "Invitations" +groupName: "Nom du groupe" +members: "Membres" +transfer: "Transférer" +messagingWithUser: "Discuter avec un·e autre utilisateur·rice" +messagingWithGroup: "Discuter avec un groupe" +title: "Titre" +text: "Texte" +enable: "Activer" +next: "Suivant" +retype: "Confirmation" +noteOf: "Publications de {user}" +inviteToGroup: "Inviter dans un groupe" +quoteAttached: "Avec citation" +quoteQuestion: "Souhaitez-vous ajouter une citation ?" +noMessagesYet: "Pas encore de discussion" +newMessageExists: "Vous avez un nouveau message" +onlyOneFileCanBeAttached: "Vous ne pouvez joindre qu'un seul fichier au message" +signinRequired: "Veuillez vous connecter" +invitations: "Invitations" +invitationCode: "Code d'invitation" +checking: "Vérification en cours..." +available: "Disponible" +unavailable: "Non disponible" +usernameInvalidFormat: "Le nom d'utilisateur peut contenir uniquement des lettres + (minuscules et/ou majuscules), des chiffres et des tirets du bas." +tooShort: "Trop court" +tooLong: "Trop long" +weakPassword: "Mot de passe faible" +normalPassword: "Mot de passe acceptable" +veryStrongPassword: "Mot de passe fort" +passwordMatched: "Les mots de passe correspondent" +passwordNotMatched: "Les mots de passe ne correspondent pas" +signinWith: "Se connecter avec {x}" +signinFailed: "Échec d'authentification. Veuillez vérifier que votre nom d'utilisateur + et mot de passe sont corrects." +tapSecurityKey: "Appuyez sur votre clé de sécurité" +or: "OU" +language: "Langue" +uiLanguage: "Langue d'affichage de l'interface" +groupInvited: "Invité au groupe" +aboutX: "À propos de {x}" +useOsNativeEmojis: "Utiliser les émojis natifs du système" +youHaveNoGroups: "Vous n'avez aucun groupe" +joinOrCreateGroup: "Vous pouvez être invité·e à rejoindre des groupes existants ou + créer votre propre nouveau groupe." +noHistory: "Pas d'historique" +signinHistory: "Historique de connexion" +disableAnimatedMfm: "Désactiver MFM ayant des animations" +doing: "En cours..." +category: "Catégorie" +tags: "Étiquettes" +docSource: "Source de ce document" +createAccount: "Créer un compte" +existingAccount: "Compte existant" +regenerate: "Générer à nouveau" +fontSize: "Taille de la police" +noFollowRequests: "Vous n'avez aucune demande d'abonnement en attente" +openImageInNewTab: "Ouvrir les images dans un nouvel onglet" +dashboard: "Tableau de bord" +local: "Local" +remote: "Distant" +total: "Total" +weekOverWeekChanges: "Hebdomadaire" +dayOverDayChanges: "Journalier" +appearance: "Apparence" +clientSettings: "Paramètres du client" +accountSettings: "Paramètres du compte" +promotion: "Promu" +promote: "Promouvoir" +numberOfDays: "Nombre de jours" +hideThisNote: "Masquer cette publication" +showFeaturedNotesInTimeline: "Afficher les publications des Tendances dans le fil + d'actualité" +objectStorage: "Stockage d'objets" +useObjectStorage: "Utiliser le stockage d'objets" +objectStorageBaseUrl: "URL racine" +objectStorageBaseUrlDesc: "Préfixe d'URL utilisé pour construire l'URL vers le référencement + d'objet (média). Spécifiez son URL si vous utilisez un CDN ou un proxy, sinon spécifiez + l'adresse accessible au public selon le guide de service que vous allez utiliser.\n + Ex : 'https://.s3.amazonaws.com' pour AWS S3 et 'https://storage.googleapis.com/' + pour GCS." +objectStorageBucket: "Bucket" +objectStorageBucketDesc: "Veuillez spécifier le nom du compartiment utilisé sur le + service configuré." +objectStoragePrefix: "Prefix" +objectStoragePrefixDesc: "Les fichiers seront stockés sous le répertoire de ce préfixe." +objectStorageEndpoint: "Endpoint" +objectStorageEndpointDesc: "Laissez ce champ vide si vous utilisez AWS S3, sinon spécifiez + le point de terminaison comme '' ou ':' selon le guide de service + que vous allez utiliser." +objectStorageRegion: "Région" +objectStorageRegionDesc: "Spécifiez une région comme 'xx-east-1'. Si votre service + ne fait pas de distinction entre les régions, laissez-le vide ou remplissez 'us-east-1'." +objectStorageUseSSL: "Utiliser SSL" +objectStorageUseSSLDesc: "Désactivez cette option si vous n'utilisez pas HTTPS pour + la connexion API" +objectStorageUseProxy: "Se connecter via proxy" +objectStorageUseProxyDesc: "Désactivez cette option si vous n'utilisez pas de proxy + pour la connexion API" +objectStorageSetPublicRead: "Régler sur « public » lors de l'envoi" +serverLogs: "Journal du serveur" +deleteAll: "Supprimer tout" +showFixedPostForm: "Afficher le formulaire de publication en haut du fil d'actualité" +newNoteRecived: "Voir les nouvelles publications" +sounds: "Sons" +listen: "Écouter" +none: "Rien" +showInPage: "Afficher dans la page" +popout: "Fenêtre contextuelle" +volume: "Volume" +masterVolume: "Volume principal" +details: "Détails" +chooseEmoji: "Choisissez un émoji" +unableToProcess: "L'opération n'a pas pu être complétée" +recentUsed: "Utilisé récemment" +install: "Installation" +uninstall: "Désinstaller" +installedApps: "Applications installées" +nothing: "Il n'y a rien à voir ici" +installedDate: "Date d'installation" +lastUsedDate: "Dernière utilisation" +state: "État" +sort: "Trier" +ascendingOrder: "Ascendant" +descendingOrder: "Descendant" +scratchpad: "ScratchPad" +scratchpadDescription: "ScratchPad fournit un environnement expérimental pour AiScript. + Vous pouvez vérifier la rédaction de votre code, sa bonne exécution et le résultat + de son interaction avec Firefish." +output: "Sortie" +script: "Script" +disablePagesScript: "Désactiver AiScript sur les Pages" +updateRemoteUser: "Mettre à jour les informations de l'utilisateur·rice distant·e" +deleteAllFiles: "Supprimer tous les fichiers" +deleteAllFilesConfirm: "Êtes-vous sûr·e de vouloir supprimer tous les fichiers ?" +removeAllFollowing: "Retenir tous les abonnements" +removeAllFollowingDescription: "Se désabonner de tous les comptes de {host}. Veuillez + lancer cette action uniquement si le serveur n'existe plus." +userSuspended: "Cet·te utilisateur·rice a été suspendu·e." +userSilenced: "Cette utilisateur·trice a été mis·e en sourdine." +yourAccountSuspendedTitle: "Ce compte est suspendu" +yourAccountSuspendedDescription: "Ce compte est suspendu car vous avez enfreint les + conditions d'utilisation du serveur, ou pour un motif similaire. Si vous souhaitez + connaître en détail les raisons de cette suspension, renseignez-vous auprès de l'administrateur·rice + de votre instance. Merci de ne pas créer de nouveau compte." +menu: "Menu" +divider: "Séparateur" +addItem: "Ajouter un élément" +relays: "Relais" +addRelay: "Ajouter un relais" +inboxUrl: "URL de boîte de récéption" +addedRelays: "Relais ajoutés" +serviceworkerInfo: "Devrait être activé pour les notifications poussées." +deletedNote: "Publication supprimée" +invisibleNote: "Publication invisible" +enableInfiniteScroll: "Activer le défilement infini" +visibility: "Visibilité" +poll: "Sondage" +useCw: "Masquer le contenu" +enablePlayer: "Ouvrir dans le lecteur vidéo" +disablePlayer: "Fermer le lecteur vidéo" +expandTweet: "Étendre le tweet" +themeEditor: "Éditeur de thèmes" +description: "Description" +describeFile: "Ajouter une description" +enterFileDescription: "Saisissez une description" +author: "Auteur·rice" +leaveConfirm: "Vous avez des modifications non-sauvegardées. Voulez-vous les ignorer ?" +manage: "Gestion" +plugins: "Extensions" +deck: "Deck" +undeck: "Quitter le deck" +useBlurEffectForModal: "Utiliser un effet de flou pour les modals" +useFullReactionPicker: "Utiliser l'intégralité du panneau de réactions" +width: "Largeur" +height: "Hauteur" +large: "Grand" +medium: "Moyen" +small: "Petit" +generateAccessToken: "Générer un jeton d'accès" +permission: "Autorisations" +enableAll: "Tout activer" +disableAll: "Tout désactiver" +tokenRequested: "Autoriser l'accès au compte" +pluginTokenRequestedDescription: "Cette extension pourra utiliser les autorisations + définies ici." +notificationType: "Type de notifications" +edit: "Editer" +emailServer: "Serveur de courriel" +enableEmail: "Activer la distribution de courriel" +emailConfigInfo: "Utilisé pour confirmer votre adresse de courriel et la réinitialisation + de votre mot de passe en cas d'oubli" +email: "Courriel" +emailAddress: "Adresse de courriel" +smtpConfig: "Paramètres du serveur SMTP" +smtpHost: "Serveur distant" +smtpPort: "Port" +smtpUser: "Nom d'utilisateur·rice" +smtpPass: "Mot de passe" +emptyToDisableSmtpAuth: "Laisser le nom d'utilisateur et le mot de passe vides pour + désactiver la vérification SMTP" +smtpSecure: "Utiliser SSL/TLS implicitement dans les connexions SMTP" +smtpSecureInfo: "Désactiver cette option lorsque STARTTLS est utilisé" +testEmail: "Tester la distribution de courriel" +wordMute: "Filtre de mots et de langues" +regexpError: "Erreur d'expression régulière" +instanceMute: "Serveurs masqués" +userSaysSomething: "{name} a dit quelque chose" +makeActive: "Activer" +display: "Affichage" +copy: "Copier" +metrics: "Métriques" +overview: "Aperçu" +logs: "Journaux" +delayed: "en retard" +database: "Base de données" +channel: "Chaînes" +create: "Créer" +notificationSetting: "Paramètres des notifications" +notificationSettingDesc: "Sélectionnez le type de notification à afficher." +useGlobalSetting: "Utiliser paramètre général" +useGlobalSettingDesc: "S'il est activé, les paramètres de notification de votre compte + seront utilisés. S'il est désactivé, des configurations individuelles peuvent être + effectuées." +other: "Autre" +regenerateLoginToken: "Régénérer le jeton de connexion" +regenerateLoginTokenDescription: "Générer un nouveau jeton d'authentification. Cette + opération ne devrait pas être nécessaire ; lors de la génération d'un nouveau jeton, + tous les appareils seront déconnectés." +setMultipleBySeparatingWithSpace: "Vous pouvez en définir plusieurs, en les séparant + par des espaces." +fileIdOrUrl: "ID du fichier ou URL" +behavior: "Comportement" +sample: "Exemple" +abuseReports: "Signalements" +reportAbuse: "Signaler" +reportAbuseOf: "Signaler {name}" +fillAbuseReportDescription: "Veuillez expliquer les raisons du signalement. S'il s'agit + d'une publication en particulier, veuillez inclure le lien." +abuseReported: "Le rapport est envoyé. Merci." +reporter: "Signalé par" +reporteeOrigin: "Origine du signalé" +reporterOrigin: "Origine du signalement" +forwardReport: "Transférer le signalement à l'instance distante" +send: "Envoyer" +abuseMarkAsResolved: "Marquer le signalement comme résolu" +openInNewTab: "Ouvrir dans un nouvel onglet" +openInSideView: "Ouvrir en vue latérale" +defaultNavigationBehaviour: "Navigation par défaut" +editTheseSettingsMayBreakAccount: "La modification de ces paramètres peut endommager + votre compte." +instanceTicker: "Nom du serveur d'origine des publications" +waitingFor: "En attente de {x}" +random: "Aléatoire" +system: "Système" +switchUi: "Mise en page" +desktop: "Bureau" +clip: "Clip" +createNew: "Créer nouveau" +optional: "Facultatif" +createNewClip: "Créer un nouveau clip" +public: "Public" +i18nInfo: "Firefish est traduit dans différentes langues par des bénévoles. Vous pouvez + contribuer à {link}." +manageAccessTokens: "Gérer les jetons d'accès" +accountInfo: "Informations du compte" +notesCount: "Nombre de publications" +repliesCount: "Nombre de réponses envoyées" +renotesCount: "Nombre de boosts que vous avez envoyé" +repliedCount: "Nombre de réponses reçues" +renotedCount: "Nombre de vos publications boostées" +followingCount: "Mes abonnements" +followersCount: "Nombre d'abonnés" +sentReactionsCount: "Nombre de réactions envoyées" +receivedReactionsCount: "Nombre de réactions reçues" +pollVotesCount: "Nombre de votes envoyés" +pollVotedCount: "Nombre de votes reçus" +yes: "Oui" +no: "Non" +driveFilesCount: "Nombre de fichiers dans le Drive" +driveUsage: "Utilisation du Drive" +noCrawle: "Refuser l'indexation par les robots" +noCrawleDescription: "Demandez aux moteurs de recherche externes de ne pas indexer + votre contenu." +lockedAccountInfo: "À moins que vous ne définissiez la visibilité de votre publication + sur « Abonné-e-s », vos publications sont visibles par tous, même si vous exigez + que les demandes d'abonnement soient approuvées manuellement." +alwaysMarkSensitive: "Marquer les médias comme contenu sensible (NSFW) par défaut" +loadRawImages: "Affichage complet des images jointes au lieu des vignettes" +disableShowingAnimatedImages: "Désactiver l'animation des images" +verificationEmailSent: "Un courriel de vérification a été envoyé. Veuillez accéder + au lien pour compléter la vérification." +notSet: "Non défini" +emailVerified: "Votre adresse de courriel a été vérifiée" +noteFavoritesCount: "Nombre de publications dans les favoris" +pageLikesCount: "Nombre de pages aimées" +pageLikedCount: "Nombre de vos pages aimées" +contact: "Contact" +useSystemFont: "Utiliser la police par défaut du système" +clips: "Clips" +experimentalFeatures: "Fonctionnalités expérimentales" +developer: "Développeur" +makeExplorable: "Rendre le compte visible sur la page « Découvrir »" +makeExplorableDescription: "Si vous désactivez cette option, votre compte n'apparaîtra + pas sur la page « Découvrir »." +showGapBetweenNotesInTimeline: "Afficher un écart entre les publications du fil d'actualité" +duplicate: "Duliquer" +left: "Gauche" +center: "Centrer" +wide: "Large" +narrow: "Condensé" +reloadToApplySetting: "Vos paramètres seront appliqués lorsque vous rechargerez la + page. Souhaitez-vous recharger ?" +needReloadToApply: "Ce paramètre s'appliquera après un rechargement." +showTitlebar: "Afficher la barre de titre" +clearCache: "Vider le cache" +onlineUsersCount: "{n} utilisateur(s) en ligne" +nUsers: "{n} utilisateur·rice·s" +nNotes: "{n} Publications" +sendErrorReports: "Envoyer les rapports d'erreur" +sendErrorReportsDescription: "Si vous activez l'envoi des rapports d'erreur, vous + contribuerez à améliorer la qualité de Firefish grâce au partage d'informations + détaillées sur les erreurs lorsqu'un problème survient.\nCela inclut des informations + telles que la version de votre système d'exploitation, le type de navigateur que + vous utilisez, votre historique d'activité, etc." +myTheme: "Mes thèmes" +backgroundColor: "Arrière-plan" +accentColor: "Accentuation" +textColor: "Texte" +saveAs: "Enregistrer sous ..." +advanced: "Avancé" +value: "Valeur" +createdAt: "Date de création" +updatedAt: "Mis à jour le" +saveConfirm: "Voulez-vous sauvegarder les modifications ?" +deleteConfirm: "Confirmez-vous la suppression ?" +invalidValue: "Cette valeur est invalide." +registry: "Registre" +closeAccount: "Fermer le compte" +currentVersion: "Version actuelle" +latestVersion: "Dernière version " +youAreRunningUpToDateClient: "Votre client est à jour." +newVersionOfClientAvailable: "Une nouvelle version de votre client est disponible." +usageAmount: "Utilisation" +capacity: "Capacité " +inUse: "utilisé" +editCode: "Modifier le code" +apply: "Appliquer" +receiveAnnouncementFromInstance: "Recevoir les messages d'information du serveur" +emailNotification: "Notifications par courriel" +publish: "Public" +inChannelSearch: "Chercher dans la chaîne" +useReactionPickerForContextMenu: "Clic-droit pour ouvrir le panneau de réactions" +typingUsers: "{users} est en train d'écrire" +jumpToSpecifiedDate: "Se rendre à la date" +showingPastTimeline: "Un fil âgé est affiché" +clear: "Effacer" +markAllAsRead: "Tout marquer comme lu" +goBack: "Retour" +unlikeConfirm: "Êtes-vous sûr·e de ne plus vouloir aimer cette publication ?" +fullView: "Plein écran" +quitFullView: "Quitter le plein écran" +addDescription: "Ajouter une description" +userPagePinTip: "Vous pouvez afficher des publications ici en sélectionnant l'option + « Épingler au profil » dans le menu de chaque publication." +notSpecifiedMentionWarning: "Vous avez mentionné des utilisateur·rice·s qui ne font + pas partie de la liste des destinataires" +info: "Informations" +userInfo: "Informations sur l'utilisateur" +unknown: "Inconnu" +onlineStatus: "Statut" +hideOnlineStatus: "Se rendre invisible" +hideOnlineStatusDescription: "Rendre votre statut invisible peut diminuer les performances + de certaines fonctionnalités, telles que la recherche." +online: "En ligne" +active: "Actif·ve" +offline: "Hors ligne" +notRecommended: "Déconseillé" +botProtection: "Protection contre les bots" +instanceBlocking: "Gestion de la Fédération" +selectAccount: "Sélectionner un compte" +switchAccount: "Changer de compte" +enabled: "Activé" +disabled: "Désactivé" +quickAction: "Actions rapides" +user: "Utilisateur·rice·s" +administration: "Gestion" +accounts: "Comptes" +switch: "Remplacer" +noMaintainerInformationWarning: "Informations administrateur non configurées." +noBotProtectionWarning: "La protection contre les bots n'est pas configurée." +configure: "Configurer" +postToGallery: "Publier dans la galerie" +gallery: "Galerie" +recentPosts: "Publications récentes" +popularPosts: "Publications populaires" +shareWithNote: "Partager dans une publication" +ads: "Bannières communautaires" +expiration: "Échéance" +memo: "Pense-bête" +priority: "Priorité" +high: "Haute" +middle: "Moyen" +low: "Basse" +emailNotConfiguredWarning: "Vous n'avez pas configuré votre adresse de courriel." +ratio: "Ratio" +previewNoteText: "Voir l'aperçu" +customCss: "CSS personnalisé" +customCssWarn: "Utilisez cette fonctionnalité uniquement si vous savez exactement + ce que vous faites. Une configuration inadaptée peut empêcher le client de s'exécuter + normalement." +global: "Global" +squareAvatars: "Afficher les avatars carrés pour les comptes sans oreilles de chat" +sent: "Envoyer" +received: "Reçu" +searchResult: "Résultats de la recherche" +hashtags: "Hashtags" +troubleshooting: "Résolution de problèmes" +useBlurEffect: "Utiliser des effets de flou dans l'interface" +learnMore: "Plus d'informations" +misskeyUpdated: "Firefish a été mis à jour !" +whatIsNew: "Voir les derniers changements" +translate: "Traduire" +translatedFrom: "Traduit depuis {x}" +accountDeletionInProgress: "La suppression de votre compte est en cours" +usernameInfo: "C'est un nom qui identifie votre compte sur l'instance de manière unique. + Vous pouvez utiliser des lettres de l'alphabet (minuscules et majuscules), des chiffres + (de 0 à 9), ou bien le tiret « _ ». Vous ne pourrez pas modifier votre nom d'utilisateur·rice + par la suite." +aiChanMode: "Mode Ai" +keepCw: "Garder le CW" +pubSub: "Comptes Pub/Sub" +lastCommunication: "Dernière communication" +resolved: "Résolu" +unresolved: "En attente" +breakFollow: "Retirer l'abonné" +itsOn: "Activé" +itsOff: "Désactivé" +emailRequiredForSignup: "Une adresse de courriel est nécessaire pour créer un compte" +unread: "Non lu" +filter: "Filtre" +controlPanel: "Panneau de contrôle" +manageAccounts: "Gérer les comptes" +makeReactionsPublic: "Rendre les réactions publiques" +makeReactionsPublicDescription: "Ceci rendra public la liste de toutes vos réactions + passées." +classic: "Centré" +muteThread: "Masquer cette discussion" +unmuteThread: "Ne plus masquer le fil" +ffVisibility: "Visibilité des abonnés/abonnements" +ffVisibilityDescription: "Permet de configurer qui peut voir vos abonnements et vos + abonnés." +continueThread: "Continuer le fil" +deleteAccountConfirm: "Ce compte sera définitivement supprimé. Êtes vous certain ?" +incorrectPassword: "Le mot de passe est incorrect." +voteConfirm: "Confirmez-vous votre vote pour « {choice} » ?" +hide: "Masquer" +leaveGroup: "Quitter le groupe" +leaveGroupConfirm: "Êtes vous sûr de vouloir quitter « {name} » ?" +useDrawerReactionPickerForMobile: "Afficher le sélecteur de réactions en tant que + panneau sur mobile" +welcomeBackWithName: "Heureux de vous revoir, {name}" +clickToFinishEmailVerification: "Veuillez cliquer sur [{ok}] afin de compléter la + vérification par courriel." +overridedDeviceKind: "Type d'appareil" +smartphone: "Smartphone" +tablet: "Tablette" +auto: "Automatique" +themeColor: "Couleur du bandeau d'information du serveur" +size: "Taille" +numberOfColumn: "Nombre de colonnes" +instanceDefaultLightTheme: "Thème clair par défaut sur tout le serveur" +instanceDefaultDarkTheme: "Thème sombre par défaut sur tout le serveur" +instanceDefaultThemeDescription: "Saisissez le code du thème en format objet." +mutePeriod: "Durée de mise en sourdine" +indefinitely: "Illimité" +tenMinutes: "10 minutes" +oneHour: "1 heure" +oneDay: "1 jour" +oneWeek: "1 semaine" +rateLimitExceeded: "Limite de taux dépassée" +cropImage: "Recadrer l'image" +cropImageAsk: "Voulez-vous recadrer cette image ?" +file: "Fichier" +reverse: "Inverser" +colored: "Coloré" +label: "Étiquette" +localOnly: "Local seulement" +account: "Comptes" +getQrCode: "Afficher le code QR" + +_emailUnavailable: + used: "Adresse non disponible" + format: "Le format de cette adresse de courriel est invalide" + disposable: "Les adresses de courriel jetables ne peuvent pas être utilisées" + mx: "Ce serveur de courriel est invalide" + smtp: "Ce serveur de courriel ne répond pas" +_ffVisibility: + public: "Public" + followers: "Visible uniquement pour les abonné·e·s" + private: "Privé" +_signup: + almostThere: "Bientôt fini" + emailAddressInfo: "Veuillez saisir votre adresse de courriel. Il ne sera pas rendu + public." + emailSent: "Un courriel de confirmation vient d'être envoyé à l'adresse que vous + avez renseignée ({email}). Cliquez sur le lien contenu dans le message pour terminer + la création de votre compte." +_accountDelete: + accountDelete: "Supprimer le compte" + mayTakeTime: "La suppression de compte nécessitant beaucoup de ressources, l'exécution + du processus peut prendre du temps, en fonction de la quantité de contenus que + vous avez créés et du nombre de fichiers que vous avez téléversés." + sendEmail: "Une fois la suppression de votre compte effectuée, un courriel sera + envoyé à l'adresse que vous aviez enregistrée." + requestAccountDelete: "Demander la suppression de votre compte" + started: "La procédure de suppression a commencé." + inProgress: "Suppression en cours" +_ad: + back: "Retour" + reduceFrequencyOfThisAd: "Voir cette bannière moins souvent" + adsBy: Bannière communautaire par {by} +_forgotPassword: + enterEmail: "Entrez ici l'adresse de courriel que vous avez enregistrée pour votre + compte. Un lien vous permettant de réinitialiser votre mot de passe sera envoyé + à cette adresse." + ifNoEmail: "Si vous n'avez pas enregistré d'adresse de courriel, merci de contacter + l'administrateur·rice de votre serveur." + contactAdmin: "Ce serveur ne permettant pas l'utilisation d'adresses de courriel, + prenez contact avec l'administrateur·rice pour procéder à la réinitialisation + de votre mot de passe." +_gallery: + my: "Mes publications" + liked: "Publications que j'ai aimé" + like: "J'aime" + unlike: "Je n'aime pas" +_email: + _follow: + title: "Vous avez un nouvel abonné" + _receiveFollowRequest: + title: "Vous avez reçu une demande d'abonnement" +_plugin: + install: "Installation des extensions" + installWarn: "N'installez que des extensions provenant de sources fiables." + manage: "Gestion des extensions" +_registry: + scope: "Portée" + key: "Clé" + keys: "Clés" + domain: "Domaine" + createKey: "Créer une clé" +_aboutFirefish: + about: "Firefish est une fourche de Misskey, un logiciel libre et ouvert, développé + depuis 2022." + contributors: "Principaux contributeurs" + allContributors: "Tous les contributeurs" + source: "Code source" + translation: "Traduire Firefish" + donate: "Soutenir Firefish" + pleaseDonateToFirefish: Merci de considérer de faire un don pour soutenir le développement + de Firefish. + donateTitle: Firefish vous plaît ? + pleaseDonateToHost: Également, veuillez envisager de faire un don à votre serveur + d'accueil, {host}, pour contribuer à couvrir ses frais de fonctionnement. + donateHost: Faire un don à {host} + misskeyContributors: Contributeurs Misskey +_nsfw: + respect: "Cacher les médias marqués comme contenu sensible (NSFW)" + ignore: "Afficher les médias sensibles (NSFW)" + force: "Cacher tous les médias" +_mfm: + cheatSheet: "Antisèche MFM" + intro: "MFM est un langage Markdown spécifique utilisable ici et là dans Firefish. + Vous pouvez vérifier ici les structures utilisables avec MFM." + dummy: "Le fédivers s'agrandit avec Firefish" + mention: "Mentionner" + mentionDescription: "Vous pouvez afficher un utilisateur spécifique en indiquant + le symbole d'arobase (@) suivie d'un nom d'utilisateur." + hashtag: "Hashtags" + hashtagDescription: "Vous pouvez afficher les hashtags en utilisant un croisillon + et du texte." + url: "URL" + urlDescription: "L'adresse web peut être affichée." + link: "Lien" + linkDescription: "Une partie précise d'une phrase peut être liée à l'adresse web." + bold: "Gras" + boldDescription: "Mise en évidence du texte en le rendant plus épais." + small: "Diminuer l'emphase" + smallDescription: "Le contenu peut être affiché en petit et fin." + center: "Centrer" + centerDescription: "Centre le contenu sur la page." + inlineCode: "Code (inline)" + inlineCodeDescription: "Affiche la coloration syntaxique des lignes de code." + blockCode: "Bloc de code" + blockCodeDescription: "Afficher la coloration syntaxique de multiples lignes de + code dans un bloc." + inlineMath: "Formule mathématique (inline)" + inlineMathDescription: "Afficher les formules mathématiques (KaTeX)" + blockMath: "Formule mathématique (bloc)" + blockMathDescription: "Afficher les formules mathématiques (KaTeX) dans un bloc" + quote: "Citer" + quoteDescription: "Affiche le contenu sous forme de citation." + emoji: "Émojis personnalisés" + emojiDescription: "Encadrer le nom de l'émoji personnalisé de deux points pour l'afficher." + search: "Rechercher" + searchDescription: "Affiche une boîte de recherche avec du texte pré-saisi." + flip: "Inverser" + flipDescription: "Rotation verticale ou horizontale du contenu." + jelly: "Animation (Gelée)" + jellyDescription: "Donne une animation d'étirement comme de la gelée." + tada: "Animation (Tada)" + tadaDescription: "Donne une animation qui donne une impression de « Tada ! »." + jump: "Animation (Saut)" + jumpDescription: "Donne une animation qui saute." + bounce: "Animation (Rebond)" + bounceDescription: "Donne une animation de rebondissement." + shake: "Animation (Secousse)" + shakeDescription: "Donne une animation tremblante." + twitch: "Animation (Tremblement)" + twitchDescription: "Donne une animation de tremblement intense." + spin: "Animation (Rotation)" + spinDescription: "Donne une animation de rotation." + x2: "Grand" + x2Description: "Afficher le contenu en grand." + x3: "Très grand" + x3Description: "Afficher le contenu en très grand." + x4: "Plus grand" + x4Description: "Afficher le contenu encore plus grand que grand." + blur: "Flou" + blurDescription: "Floutage du contenu. Il sera visible en le survolant avec le curseur." + font: "Police de caractères" + fontDescription: "Choisir la police du contenu." + rainbow: "Arc-en-ciel" + rainbowDescription: "Permet d'afficher le contenu en couleurs arc-en-ciel." + sparkle: "Paillettes" + sparkleDescription: "Ajoute un effet scintillant au contenu." + rotate: "Pivoter" + fade: "Apparaître/Disparaître" + fadeDescription: "Fait apparaître et disparaître le contenu." + plainDescription: Désactiver les effets de tous les MFM contenus dans cet effet + MFM. + rotateDescription: Pivoter le contenu d'un angle spécifique. + position: Position + advanced: MFM avancées + warn: Les MFM peuvent contenir des animations à mouvement rapide ou clignotantes + crop: Rogner + positionDescription: Déplacer le contenu selon une valeur spécifiée. + play: Animer les MFM + stop: Arrêter les MFM + alwaysPlay: Toujours lire automatiquement toutes les MFM animées + advancedDescription: Si désactivé, n'autorise que la mise en forme de base, sauf + si une MFM animée est en cours de lecture + cropDescription: Rogner le contenu. + scale: Mettre à l'échelle + scaleDescription: Mettre le contenu à l'échelle selon une valeur spécifiée. + foreground: Couleur de premier plan + foregroundDescription: Changer la couleur de premier plan d'un texte. + backgroundDescription: Changer la couleur d'arrière-plan d'un texte. + background: Couleur d'arrière-plan + plain: Simple +_instanceTicker: + none: "Cacher" + remote: "Montrer pour les utilisateur·ice·s distant·e·s" + always: "Toujours afficher" +_serverDisconnectedBehavior: + reload: "Rechargement automatique" + dialog: "Ouvrir une boîte de dialogue pour l'avertissement" + quiet: "Afficher un avertissement discret" + nothing: Ne rien faire +_channel: + create: "Créer une chaîne" + edit: "Éditer la chaîne" + setBanner: "Sélectionner la bannière" + removeBanner: "Supprimer la bannière" + featured: "Tendances" + owned: "Mes chaînes" + following: "Abonné·e" + usersCount: "{n} Participant·e·s" + notesCount: "{n} publications" + nameAndDescription: Nom et description + nameOnly: Nom uniquement +_menuDisplay: + sideFull: "Latéral" + sideIcon: "Latéral (icônes)" + top: "Haut de page" + hide: "Masquer" +_wordMute: + muteWords: "Mots à filtrer" + muteWordsDescription: "Séparer avec des espaces pour la condition AND. Séparer avec + un saut de ligne pour une condition OR." + muteWordsDescription2: "Pour utiliser des expressions régulières (regex), mettez + les mots-clés entre barres obliques." + softDescription: "Masquez de votre fil d'actualité les publications qui répondent + aux conditions définies." + hardDescription: "Empêche les publications, qui remplissent les conditions définies, + d'être ajoutées au fil d'actualité. Cette action est irréversible : si vous modifiez + ces conditions plus tard, les publications précédemment filtrées ne seront pas + récupérées." + soft: "Doux" + hard: "Strict" + mutedNotes: "Publications masquées" + muteLangsDescription2: Utiliser les codes de langue (i.e en, fr, ja, zh). + lang: Langue + langDescription: Cachez les publications qui correspondent à la langue définie dans + le fil d'actualité. + muteLangs: Langues filtrées + muteLangsDescription: Séparer avec des espaces ou des retours à la ligne pour une + condition OU (OR). + mutePatterns: Patrons masqués +_instanceMute: + instanceMuteDescription2: "Séparer avec des sauts de lignes" + title: "Masque les publications provenant des serveurs listés." + heading: "Serveurs à mettre en sourdine/masquer" + instanceMuteDescription: Ceci va masquer toute publication ou boost de serveurs + listés, incluant celles des personnes répondant à des personnes des serveurs masqués. +_theme: + explore: "Explorer les thèmes" + install: "Installer un thème" + manage: "Gestion des thèmes" + code: "Code du thème" + description: "Description" + installed: "{name} a été installé" + installedThemes: "Thèmes installés" + builtinThemes: "Thèmes intégrés" + alreadyInstalled: "Ce thème est déjà installé" + invalid: "Le format du thème n'est pas valide" + make: "Créer un thème" + base: "Base" + addConstant: "Ajouter une constante" + constant: "Constante" + defaultValue: "Valeur par défaut" + color: "Couleur" + refProp: "Appeler une propriété" + refConst: "Appeler une constante" + key: "Clé" + func: "Fonction" + funcKind: "Type de fonction" + argument: "Argument" + basedProp: "Nom de la propriété référencée" + alpha: "Transparence" + darken: "Assombrir" + lighten: "Clair" + inputConstantName: "Insérez un nom de constante" + importInfo: "Vous pouvez importer un thème vers l'éditeur de thèmes en saisissant + son code ici" + deleteConstantConfirm: "Êtes-vous sûr·e de vouloir supprimer la constante {const} ?" + keys: + accent: "Accentuation" + bg: "Arrière-plan" + fg: "Texte" + focus: "Mise au point" + indicator: "Indicateur" + panel: "Panneau" + shadow: "Ombre" + header: "Entête" + navBg: "Fond de la barre latérale" + navFg: "Texte de la barre latérale" + navHoverFg: "Texte de la barre latérale (survolé)" + navActive: "Texte de la barre latérale (actif)" + navIndicator: "Indicateur de barre latérale" + link: "Lien" + hashtag: "Hashtags" + mention: "Mentionner" + mentionMe: "Mentions (Moi)" + renote: "Booster" + modalBg: "Modal d'arrière-plan" + divider: "Séparateur" + scrollbarHandle: "Poignée de la barre de navigation" + scrollbarHandleHover: "Poignée de la barre de navigation (survolée)" + dateLabelFg: "Texte de l'étiquette de la date" + infoBg: "Arrière-plan pour les informations" + infoFg: "Texte d'information" + infoWarnBg: "Arrière-plan des avertissements" + infoWarnFg: "Texte d'avertissement" + cwBg: "Arrière-plan du CW" + cwFg: "Texte du bouton CW" + cwHoverBg: "Arrière-plan du bouton CW (survolé)" + toastBg: "Arrière-plan de la bulle de notification" + toastFg: "Texte de la bulle de notification" + buttonBg: "Arrière-plan du bouton" + buttonHoverBg: "Arrière-plan du bouton (survolé)" + inputBorder: "Cadre de la zone de texte" + listItemHoverBg: "Arrière-plan d'item de liste (survolé)" + driveFolderBg: "Arrière-plan du dossier de disque" + wallpaperOverlay: "Superposition de fond d'écran" + badge: "Badge" + messageBg: "Arrière plan de la discussion" + accentDarken: "Plus sombre" + accentLighten: "Plus clair" + fgHighlighted: "Texte mis en évidence" +_sfx: + note: "Nouvelle publication" + noteMy: "Ma publication" + notification: "Notifications" + chat: "Discuter" + chatBg: "Discussion (arrière-plan)" + antenna: "Réception de l'antenne" + channel: "Notifications de chaîne" +_ago: + future: "futur" + justNow: "à l'instant" + secondsAgo: "Il y a {n}s" + minutesAgo: "Il y a {n}min" + hoursAgo: "Il y a {n}h" + daysAgo: "Il y a {n}j" + weeksAgo: "Il y a {n} semaines" + monthsAgo: "Il y a {n} mois" + yearsAgo: "Il y a {n} ans" +_time: + second: "s" + minute: "min" + hour: "h" + day: "j" +_tutorial: + title: "Comment utiliser Firefish" + step1_1: "Bienvenue !" + step1_2: "On va vous installer. Vous serez opérationnel en un rien de temps !" + step2_1: "Tout d'abord, remplissez votre profil." + step2_2: "En fournissant quelques informations sur qui vous êtes, il sera plus facile + pour les autres de savoir s'ils veulent voir vos publcations ou s'abonner à vous." + step3_1: "Maintenant il est temps de vous abonner à des gens !" + step3_2: "Vos fils d'actualité Principal et Social sont basés sur les personnes + que vous êtes abonné, alors essayez de vous abonner à quelques comptes pour commencer.\n + Cliquez sur le cercle « plus » en haut à droite d'un profil pour vous abonner." + step4_1: "On y va." + step4_2: "Pour votre première publication, certaines personnes aiment faire une + {introduction} ou un simple « Bonjour tout le monde ! »" + step5_1: "Des fils, des fils d'actualité partout !" + step5_2: "Votre serveur a {timelines} fils différents activés." + step5_3: "Le fil {icon} Principal est l'endroit où vous pouvez voir les publications + de vos abonnements." + step5_4: "La fil {icon} Local est l'endroit où vous pouvez voir les publications + de tout le monde sur ce serveur." + step5_5: "Le fil {icon} Social est une combinaison des fils Principal et Local." + step5_6: "Le fil {icon} Recommandé est l'endroit où vous pouvez voir les publications + des serveurs recommandés par vos administrateurs." + step5_7: "Le fil {icon} Global est l'endroit où vous pouvez voir les publications + de tout les autres serveurs connectés." + step6_1: "Alors quel est cet endroit ?" + step6_2: "Eh bien, vous ne venez pas de rejoindre Firefish. Vous avez rejoint un + portail vers le fédivers, un réseau interconnecté de milliers de serveurs, appelés + « instances »." + step6_3: "Chaque serveur fonctionne différemment, et tous les serveurs n'utilisent + pas Firefish. Cependant, celui-ci le fait ! C'est un peu délicat, mais vous aurez + le coup de main en un rien de temps." + step6_4: "Maintenant, allez-y, explorez et amusez-vous !" +_2fa: + alreadyRegistered: "Configuration déjà achevée." + registerTOTP: "Ajouter un nouvel appareil" + registerSecurityKey: "Enregistrer une clef" + step1: "Tout d'abord, installez une application d'authentification, telle que {a} + ou {b}, sur votre appareil." + step2: "Ensuite, scannez le code QR affiché sur l'écran." + step2Url: "Vous pouvez également saisir cette URL si vous utilisez un programme + de bureau :" + step3: "Entrez le jeton affiché sur votre application pour compléter la configuration." + step4: "À partir de maintenant, ce même jeton vous sera demandé à chacune de vos + connexions." + securityKeyInfo: "Vous pouvez configurer l'authentification WebAuthN pour sécuriser + davantage le processus de connexion grâce à une clé de sécurité matérielle qui + prend en charge FIDO2, ou bien en configurant l'authentification par empreinte + digitale ou par code PIN sur votre appareil." + token: Jeton 2FA + step3Title: Entrez un code d'authentification + chromePasskeyNotSupported: Les clés de passe Chrome ne sont actuellement pas prises + en charge. + step2Click: En cliquant sur ce QR code, vous pourrez enregistrer l'authentification + à deux facteurs (2FA) sur votre clé de sécurité ou votre application d'authentification + sur téléphone. + securityKeyName: Entrez un nom de clé + removeKeyConfirm: Voulez-vous vraiment supprimer la clé {name} ? + securityKeyNotSupported: Votre navigateur ne prend pas en charge les clés de sécurité. + removeKey: Supprimer la clé de sécurité + tapSecurityKey: Veuillez suivre les instructions de votre navigateur pour enregistrer + la clé de sécurité ou le mot de passe +_permissions: + "read:account": "Afficher les informations du compte" + "write:account": "Mettre à jour les informations de votre compte" + "read:blocks": "Voir les comptes bloqués" + "write:blocks": "Gérer les comptes bloqués" + "read:drive": "Parcourir le Drive" + "write:drive": "Écrire sur le Drive" + "read:favorites": "Afficher les favoris" + "write:favorites": "Gérer les favoris" + "read:following": "Voir les informations de vos abonnements" + "write:following": "S'abonner ou se désabonner d'autres comptes" + "read:messaging": "Voir vos discussions" + "write:messaging": "Gérer les discussions" + "read:mutes": "Voir les comptes masqués" + "write:mutes": "Gérer les comptes masqués" + "write:notes": "Créer / supprimer des publications" + "read:notifications": "Afficher les notifications" + "write:notifications": "Gérer vos notifications" + "read:reactions": "Lire les réactions" + "write:reactions": "Gérer vos réactions" + "write:votes": "Voter" + "read:pages": "Voir vos pages" + "write:pages": "Gérer les pages" + "read:page-likes": "Voir les mentions « J'aime » des pages" + "write:page-likes": "Gérer les mentions « J'aime » sur les pages" + "read:user-groups": "Voir les groupes d'utilisateur·rice·s" + "write:user-groups": "Éditer les groupes des utilisateur·rice·s" + "read:channels": "Lire vos chaînes" + "write:channels": "Gérer vos chaînes" + "read:gallery": "Voir la galerie" + "write:gallery": "Éditer la galerie" + "read:gallery-likes": "Voir vos favoris de la galerie" + "write:gallery-likes": "Gérer vos favoris de la galerie" +_auth: + shareAccess: "Autoriser « {name} » à accéder à votre compte ?" + shareAccessAsk: "Voulez-vous vraiment autoriser cette application à accéder à votre + compte ?" + permissionAsk: "Cette application nécessite les autorisations suivantes :" + pleaseGoBack: "Veuillez retourner à l'application" + callback: "Retour vers l'application" + denied: "Accès refusé" + copyAsk: "Veuillez coller le code d'autorisation suivant dans l'application :" + allPermissions: Accès complet au compte +_antennaSources: + all: "Toutes les publications" + homeTimeline: "Publications provenant de vos abonnements" + users: "Publications venant de la part d'utilisateur·rice·s précis" + userList: "Publications venant d'une liste spécifique" + userGroup: "Publications venant d'utilisateur·rice·s du groupe spécifié" + instances: Publications de tous les utilisateurs d'un serveur +_weekday: + sunday: "Dimanche" + monday: "Lundi" + tuesday: "Mardi" + wednesday: "Mercredi" + thursday: "Jeudi" + friday: "Vendredi" + saturday: "Samedi" +_widgets: + memo: "Post-it" + notifications: "Notifications" + timeline: "Fil d'actualité" + calendar: "Calendrier" + trends: "Tendances" + clock: "Horloge" + rss: "Lecteur de flux RSS" + activity: "Activité" + photos: "Photos" + digitalClock: "Horloge numérique" + federation: "Fédération" + postForm: "Champ de publication" + slideshow: "Diaporama" + button: "Bouton" + onlineUsers: "Utilisateurs en ligne" + jobQueue: "File d'attente" + serverMetric: "Statistiques du serveur" + aiscript: "Console AiScript" + aichan: "Ai" + userList: Liste d'utilisateurs + _userList: + chooseList: Sélectionner une liste + unixClock: Horloge UNIX + serverInfo: Info serveur + instanceCloud: Nuage de serveurs + rssTicker: Bandeau RSS +_cw: + hide: "Masquer" + show: "Afficher contenu" + chars: "{count} caractères" + files: "{count} fichiers" +_poll: + noOnlyOneChoice: "Au moins 2 réponses nécéssaires" + choiceN: "Choix {n}" + noMore: "Vous ne pouvez pas en ajouter davantage" + canMultipleVote: "Autoriser le multi-choix" + expiration: "Fin du sondage" + infinite: "Illimité" + at: "Expire le..." + after: "Expire après..." + deadlineDate: "Date de fin" + deadlineTime: "Heure de fin" + duration: "Durée" + votesCount: "{n} votes" + totalVotes: "{n} votes au total" + vote: "Voter" + showResult: "Voir résultats" + voted: "Déjà voté" + closed: "Terminé" + remainingDays: "{d} jours, {h} heures restantes" + remainingHours: "{h} heures et {m} minutes restantes" + remainingMinutes: "{m} minutes et {s} secondes restantes" + remainingSeconds: "{s} secondes restantes" +_visibility: + public: "Public" + publicDescription: "Publier sur tous les fils publics" + home: "Non-listé" + homeDescription: "Publier uniquement sur le fil principal" + followers: "Abonné·e·s" + followersDescription: "Publier uniquement à vos abonné·e·s et mentions" + specified: "Direct" + specifiedDescription: "Publier uniquement aux utilisateur·rice·s mentionné·e·s" + localOnly: "Local seulement" + localOnlyDescription: "Caché pour les utilisateur·rice·s distant" +_postForm: + replyPlaceholder: "Répondre à cette publication…" + quotePlaceholder: "Citez cette publication…" + channelPlaceholder: "Publier sur une chaîne…" + _placeholders: + a: "Quoi de neuf ?" + b: "Il s'est passé quelque chose ?" + c: "Qu'avez-vous en tête ?" + d: "Désirez-vous publier quelques mots ?" + e: "Commencez à écrire…" + f: "En attente de vos écrits…" +_profile: + name: "Nom" + username: "Nom d'utilisateur·rice" + description: "À propos de moi" + youCanIncludeHashtags: "Vous pouvez également inclure des hashtags." + metadata: "Informations supplémentaires" + metadataEdit: "Éditer les informations supplémentaires" + metadataDescription: "Vous pouvez afficher jusqu'à quatre informations supplémentaires + dans votre profil. Vous pouvez ajouter une balise {a} ou une balise {l} avec {rel} + pour vérifier le lien sur votre profil !" + metadataLabel: "Étiquette" + metadataContent: "Contenu" + changeAvatar: "Changer l'image de profil" + changeBanner: "Changer de bannière" + locationDescription: Si vous entrez votre ville en premier, votre heure locale sera + affichée aux autres utilisateur·rice·s. +_exportOrImport: + allNotes: "Toutes les publications" + followingList: "Abonnements" + muteList: "Comptes masqués" + blockingList: "Comptes bloqués" + userLists: "Listes" + excludeMutingUsers: "Exclure les utilisateur·rice·s mis en sourdine" + excludeInactiveUsers: "Exclure les utilisateur·rice·s inactifs" +_charts: + federation: "Fédération" + apRequest: "Requêtes" + usersIncDec: "Variation du nombre d'utilisateur·rice·s" + usersTotal: "Nombre des utilisateur·rice·s au total" + activeUsers: "Nombre d'utilisateurices actif·ve·s" + notesIncDec: "Variation du nombre de publications" + localNotesIncDec: "Variation du nombre de publications locales" + remoteNotesIncDec: "Variation du nombre de publications distantes" + notesTotal: "Nombre total des publications" + filesIncDec: "Variation du nombre de fichiers" + filesTotal: "Nombre total de fichiers" + storageUsageIncDec: "Variation de l'utilisation du stockage" + storageUsageTotal: "Utilisation totale du stockage" +_instanceCharts: + requests: "Requêtes" + users: "Variation du nombre d'utilisateur·rice·s" + usersTotal: "Total cumulé du nombre d'utilisateur·rice·s" + notes: "Variation du nombre de publications" + notesTotal: "Nombre total cumulé des publications" + ff: "Variation des abonnements / abonné·e·s " + ffTotal: "Total cumulé du nombre d'abonné·e·s / abonnements" + cacheSize: "Variation de la taille du cache" + cacheSizeTotal: "Total cumulé de la taille du cache" + files: "Variation du nombre de fichiers" + filesTotal: "Total cumulé du nombre de fichiers" +_timelines: + home: "Principal" + local: "Local" + social: "Social" + global: "Global" + recommended: Recommandé +_pages: + newPage: "Créer une page" + editPage: "Modifier une page" + readPage: "Affichage de la source en cours" + created: "La page a été créée !" + updated: "La page a été mise à jour !" + deleted: "La page a été supprimée" + pageSetting: "Paramètres de la Page" + nameAlreadyExists: "L'URL de page spécifiée existe déjà" + invalidNameTitle: "L'URL de page spécifiée n'est pas valide" + invalidNameText: "Assurez-vous qu'il n'est pas vide" + editThisPage: "Éditer cette page" + viewSource: "Afficher la source" + viewPage: "Afficher la page" + like: "Favori" + unlike: "Je n'aime pas" + my: "Mes pages" + liked: "Pages favorites" + featured: "Populaire" + inspector: "Inspecteur" + contents: "Contenu" + content: "Bloc de page" + variables: "Variables" + title: "Titre" + url: "URL de la page" + summary: "Résumé de page" + alignCenter: "Centrée" + hideTitleWhenPinned: "Masquer le titre de la page lorsque celle-ci est épinglée + au profil" + font: "Police de caractères" + fontSerif: "Serif" + fontSansSerif: "Sans Serif" + eyeCatchingImageSet: "Définir une image attractive" + eyeCatchingImageRemove: "Supprimer l'image attractive" + chooseBlock: "Ajouter un bloc" + selectType: "Choisir un type" + enterVariableName: "Veuillez entrer un nom pour votre variable" + variableNameIsAlreadyUsed: "Ce nom de variable est déjà utilisé" + contentBlocks: "Contenu" + inputBlocks: "Blocs d'entrée" + specialBlocks: "Spécial" + blocks: + text: "Texte" + textarea: "Zone de texte" + section: "Section" + image: "Images" + button: "Bouton" + if: "Si" + _if: + variable: "Variable" + post: "Champ de publication" + _post: + text: "Contenu" + attachCanvasImage: "Publier une image sur la Toile" + canvasId: "Toile ID" + textInput: "Entrée textuelle" + _textInput: + name: "Nom de la variable" + text: "Titre" + default: "Valeur par défaut" + textareaInput: "Entrée textuelle multi-ligne" + _textareaInput: + name: "Nom de la variable" + text: "Titre" + default: "Valeur par défaut" + numberInput: "Entrée numérique" + _numberInput: + name: "Nom de la variable" + text: "Titre" + default: "Valeur par défaut" + canvas: "Toile" + _canvas: + id: "Toile ID" + width: "Largeur" + height: "Hauteur" + note: "Publication intégrée" + _note: + id: "Identifiant de la publication" + idDescription: "Vous pouvez aussi coller l'URL de la publication ici." + detailed: "Afficher les détails" + switch: "Interrupteur" + _switch: + name: "Nom de la variable" + text: "Titre" + default: "Valeur par défaut" + counter: "Compteur" + _counter: + name: "Nom de la variable" + text: "Titre" + inc: "Augmenter de" + _button: + text: "Titre" + colored: "Coloré" + action: "Opération à effectuer lorsque le bouton est pressé" + _action: + dialog: "Afficher une fenêtre de dialogue" + _dialog: + content: "Contenu" + resetRandom: "Réinitialiser un nombre aléatoire" + pushEvent: "Envoyer un évènement" + _pushEvent: + event: "Nom de l'évènement" + message: "Message à afficher lorsqu'il est activé" + variable: "Variable à envoyer" + no-variable: "Rien" + callAiScript: "Appeler AiScript" + _callAiScript: + functionName: "Nom de la fonction" + radioButton: "Choix" + _radioButton: + name: "Nom de la variable" + title: "Titre" + values: "Liste des choix (un par ligne)" + default: "Valeur par défaut" + script: + categories: + flow: "Contrôle de flux" + logical: "Opération logique" + operation: "Calculer" + comparison: "Comparer" + random: "Aléatoire" + value: "Valeur" + fn: "Fonction" + text: "Manipulation de texte" + convert: "Convertir" + list: "Listes" + blocks: + text: "Texte" + multiLineText: "Texte (multi-ligne)" + textList: "Liste de texte" + _textList: + info: "Veuillez séparer chaque entrée avec un saut de ligne" + strLen: "Longueur du texte" + _strLen: + arg1: "Texte" + strPick: "Extraire un caractère" + _strPick: + arg1: "Texte" + arg2: "Position du joueur" + strReplace: "Remplacement de texte" + _strReplace: + arg1: "Texte" + arg2: "Avant le remplacement" + arg3: "Après le remplacement" + strReverse: "Inverser le texte" + _strReverse: + arg1: "Texte" + join: "Concaténer du texte" + _join: + arg1: "Listes" + arg2: "Séparateur" + add: "Ajouter" + _add: + arg1: "A" + arg2: "B" + subtract: "Soustraire" + _subtract: + arg1: "A" + arg2: "B" + multiply: "Multiplier par" + _multiply: + arg1: "A" + arg2: "B" + divide: "Diviser par" + _divide: + arg1: "A" + arg2: "B" + mod: "Reste" + _mod: + arg1: "A" + arg2: "B" + round: "Arrondir les décimales" + _round: + arg1: "Numérique" + eq: "A et B sont égaux" + _eq: + arg1: "A" + arg2: "B" + notEq: "A et B sont différents" + _notEq: + arg1: "A" + arg2: "B" + and: "A et B" + _and: + arg1: "A" + arg2: "B" + or: "A ou B" + _or: + arg1: "A" + arg2: "B" + lt: "A est inférieur à B" + _lt: + arg1: "A" + arg2: "B" + gt: "A est supérieur à B" + _gt: + arg1: "A" + arg2: "B" + ltEq: "A est inférieur ou égal à B" + _ltEq: + arg1: "A" + arg2: "B" + gtEq: "A est supérieur ou égal à B" + _gtEq: + arg1: "A" + arg2: "B" + if: "Branche" + _if: + arg1: "Si" + arg2: "Si" + arg3: "Sinon" + not: "Nier" + _not: + arg1: "Nier" + random: "Aléatoire" + _random: + arg1: "Probabilité" + rannum: "Nombre aléatoire" + _rannum: + arg1: "Minimum" + arg2: "Maximum" + randomPick: "Sélectionner au hasard dans la liste" + _randomPick: + arg1: "Listes" + dailyRandom: "Aléatoire (Quotidien pour chaque utilisateur)" + _dailyRandom: + arg1: "Probabilité" + dailyRannum: "Numéros aléatoires (Quotidien pour chaque utilisateur)" + _dailyRannum: + arg1: "Minimum" + arg2: "Maximum" + dailyRandomPick: "Sélectionné au hasard dans la liste (Quotidien pour chaque + utilisateur)" + _dailyRandomPick: + arg1: "Listes" + seedRandom: "Aléatoire (graine)" + _seedRandom: + arg1: "Graine" + arg2: "Probabilité" + seedRannum: "Nombre aléatoire (Graine)" + _seedRannum: + arg1: "Graine" + arg2: "Minimum" + arg3: "Maximum" + seedRandomPick: "Sélectionné au hasard dans la liste (graine)" + _seedRandomPick: + arg1: "Graine" + arg2: "Listes" + DRPWPM: "Sélectionné au hasard dans une liste de probabilités (Quotidien pour + chaque utilisateur)" + _DRPWPM: + arg1: "Liste de texte" + pick: "Sélectionner dans la liste" + _pick: + arg1: "Listes" + arg2: "Position" + listLen: "Longueur de la liste" + _listLen: + arg1: "Listes" + number: "Numérique" + stringToNumber: "Convertir du texte en numérique" + _stringToNumber: + arg1: "Texte" + numberToString: "Convertir du numérique en texte" + _numberToString: + arg1: "Numérique" + splitStrByLine: "Séparer le texte par des sauts de lignes" + _splitStrByLine: + arg1: "Texte" + ref: "Variable" + aiScriptVar: "Variable d'AiScript" + fn: "Fonction" + _fn: + slots: "Slots" + slots-info: "Veuillez insérer un seul slot par ligne" + arg1: "Sortie" + for: "Répéter" + _for: + arg1: "Compter" + arg2: "Action" + typeError: "Le slot {slot} accepte « {expect} » mais a « {actual} » !" + thereIsEmptySlot: "Slot {slot} est vide !" + types: + string: "Texte" + number: "Numérique" + boolean: "Marqueur" + array: "Listes" + stringArray: "Liste de texte" + emptySlot: "Slot vide" + enviromentVariables: "Variables d'environnement" + pageVariables: "Élément de page" + argVariables: "Entrée slot" +_relayStatus: + requesting: "En attente" + accepted: "Accepté" + rejected: "Refusée" +_notification: + fileUploaded: "Le fichier a été téléversé" + youGotMention: "{name} vous a mentionné" + youGotReply: "Réponse de {name}" + youGotQuote: "Cité·e par {name}" + youRenoted: "{name} vous a boosté" + youGotPoll: "{name} a participé à votre sondage" + youGotMessagingMessageFromUser: "{name} vous envoyé un message" + youGotMessagingMessageFromGroup: "Un message a été envoyé au groupe {name}" + youWereFollowed: "s'est abonné à vous" + youReceivedFollowRequest: "Vous avez reçu une demande d'abonnement" + yourFollowRequestAccepted: "Votre demande d'abonnement a été accepté" + youWereInvitedToGroup: "{userName} vous a invité à un groupe" + pollEnded: "Les résultats du sondage sont disponibles" + emptyPushNotificationMessage: "Les notifications poussées ont été mises à jour" + _types: + all: "Toutes" + follow: "Nouveaux abonnés" + mention: "Mentions" + reply: "Réponses" + renote: "Boosts" + quote: "Citations" + reaction: "Réactions" + pollVote: "Votes dans des sondages" + receiveFollowRequest: "Demande d'abonnement reçue" + followRequestAccepted: "Demande d'abonnement acceptée" + groupInvited: "Invitation à un groupe" + app: "Notifications provenant des apps" + pollEnded: Fin du sondage + _actions: + followBack: "s'est abonné à vous" + reply: "Répondre" + renote: "Boosts" + reacted: a réagit à votre publication + renoted: a boosté votre publication + voted: a voté pour votre sondage + andCountUsers: et {count} utilisateur(s) de plus {acted} +_deck: + alwaysShowMainColumn: "Toujours afficher la colonne principale" + columnAlign: "Aligner les colonnes" + addColumn: "Ajouter une colonne" + swapLeft: "Déplacer à gauche" + swapRight: "Déplacer à droite" + swapUp: "Déplacer vers le haut" + swapDown: "Déplacer vers le bas" + stackLeft: "Empiler à gauche" + popRight: "Extraire à droite" + profile: "Espace de travail" + _columns: + main: "Principale" + widgets: "Widgets" + notifications: "Notifications" + tl: "Fil d'actualité" + antenna: "Antenne" + list: "Listes" + mentions: "Mentions" + direct: "Direct" + channel: Chaîne + introduction: Créer l'interface parfaite pour vous en arrangeant les colonnes librement + ! + introduction2: Cliquer sur le + sur la droite de l'écran pour ajouter de nouvelles + colonnes à tout moment. + renameProfile: Renommer l'espace de travail + configureColumn: Paramètres de colonne + deleteProfile: Supprimer l'espace de travail + widgetsIntroduction: Sélectionner « Modifier les widgets » dans le menu de la colonne + et ajouter un widget. + nameAlreadyExists: Ce nom d'espace de travail existe déjà. + newProfile: Nouvel espace de travail +keepOriginalUploadingDescription: Enregistrer l'image originale telle quelle. Si désactivé, + une version à afficher sur le web sera générée au chargement. +manageGroups: Gérer les groupes +moderation: Modération +disableDrawer: Ne pas utiliser de menus déroulants +preferencesBackups: Sauvegarde des préférences +confirmToUnclipAlreadyClippedNote: Cette publication fait déjà partie du clip « {name} ». + Voudriez-vous plutôt le supprimer du clip ? +instanceSecurity: Sécurité du serveur +recommended: Recommandé +recentNDays: Les derniers {n} jours +recentNHours: Les dernières {n} heures +check: Vérifier +thereIsUnresolvedAbuseReportWarning: Il y a des signalements non résolus. +numberOfPageCacheDescription: Augmenter ce nombre augmentera le confort des utilisateur⋅rice⋅s + mais augmentera la charge de travail du serveur, plus de mémoire sera utilisée. +logoutConfirm: Confirmer la déconnexion ? +lastActiveDate: Dernière utilisation le +cannotUploadBecauseNoFreeSpace: Mise en ligne échouée faute de place sur le Drive. +remoteOnly: Distant seulement +showUpdates: Afficher une fenêtre en sur-impression quand Firefish se met à jour +recommendedInstances: Serveurs recommandées +caption: Description automatique +migration: Migration +showAdminUpdates: Indiquer qu'une nouvelle version de Firefish est disponible (admin + seulement) +replayTutorial: Relancer le tutoriel +moveTo: Migrer le compte courant vers un nouveau compte +moveFromDescription: Ceci va configurer un alias pour votre ancien compte afin que + vous puissiez migrer de cet ancien compte à l'actuel. Faites ceci AVANT de migrer + de votre ancien compte. Merci d'entrer la mention de l'ancien compte sous ce format + @personne@server.com +_sensitiveMediaDetection: + sensitivityDescription: Réduire la sensibilité conduira à moins de mauvaises détections + (faux positifs) alors que l'augmenter mènera à moins de détection manquées (faux + négatifs). + analyzeVideosDescription: Analyser les vidéos en plus des images. Cela augmentera + légèrement la charge du serveur. + setSensitiveFlagAutomatically: Marquer comme sensible (NSFW) + sensitivity: Sensibilité de la détection + analyzeVideos: Activer l'analyse des vidéos + setSensitiveFlagAutomaticallyDescription: Les résultats de la détection interne + seront conservés même si cette option est désactivée. + description: Réduit potentiellement l'effort de la modération du serveur en reconnaissant + automatiquement les médias sensibles (NSFW) via de l'intelligence artificielle. + Cela va augmenter légèrement la charge du serveur. +_messaging: + dms: Privé + groups: Groupes +cannotUploadBecauseExceedsFileSizeLimit: Le fichier n'a pas pu être chargé car il + dépasse la taille maximum autorisée. +moveAccountDescription: Ce processus est irréversible. Soyez sûr⋅e que vous avez préparé + un alias pour ce compte sur votre nouveau compte avant de migrer. Merci d'entrer + la mention du compte formaté comme ceci @personne@server.com +moveAccount: Déplacer le compte ! +seperateRenoteQuote: Séparer les boutons de boosts et de citation +failedToFetchAccountInformation: Impossible de récupérer les informations de compte +noEmailServerWarning: Serveur de courriel non configuré. +deleteAccount: Supprimer le compte +document: Documentation +numberOfPageCache: Nombre de pages mise en cache +fast: Rapide +failedToUpload: Mise en ligne échouée +enableAutoSensitiveDescription: Permet la détection automatique des médias sensibles + (NSFW) via une intelligence artificielle, lorsque c'est possible. Même si cette + option est désactivée, elle peut être activée au niveau du serveur. +activeEmailValidationDescription: Permet une vérification plus stricte des adresses + de courriel, ce qui inclut de vérifier la présence des adresses jetables et s'il + est possible de communiquer avec ces adresses. Si désactivé, seul le format de l'adresse + de courriel est vérifié. +adminCustomCssWarn: Ce paramètre ne devrait être utilisé que si vous savez ce qu'il + fait. Entrer des valeurs impropres pourraient empêcher les clients de TOUT LE MONDE + de fonctionner. Assurez-vous que votre CSS fonctionne correctement en l'essayant + dans vos paramètres utilisateur. +swipeOnDesktop: Permettre le style de balayage de fenêtre de mobile sur PC +moveFromLabel: 'Compte depuis lequel vous migrez :' +migrationConfirm: "Êtes-vous absolument certain⋅e que vous voulez migrer votre compte + vers {account} ? Une fois fait, vous ne pourrez pas revenir en arrière, et vous + ne pourrez plus utiliser le compte actuel normalement à nouveau.\nAussi, assurez-vous + d'avoir configuré le compte actuel comme le compte depuis lequel vous migrez." +_preferencesBackups: + updatedAt: 'Mis à jour le : {date} {time}' + cannotLoad: Le chargement a échoué + invalidFile: Format de fichier invalide + saveConfirm: Enregistrer la sauvegarde sous le nom {name} ? + deleteConfirm: Supprimer la sauvegarde {name} ? + nameAlreadyExists: Une sauvegarde nommée « {name} » existe déjà. Merci d'entrer + un autre nom. + applyConfirm: Voulez-vous vraiment appliquer la sauvegarde « {name} » à cet appareil ? + Les réglages existants de cet appareil seront écrasés. + noBackups: Aucune sauvegarde n'existe. Vous pouvez sauvegarder les paramètres de + votre client sur ce serveur en utilisant « Créer une nouvelle sauvegarde ». + createdAt: 'Crée le : {date} {time}' + renameConfirm: Renommer la sauvegarde « {old} » en « {new} » ? + list: Sauvegardes créées + saveNew: Faire une nouvelle sauvegarde + loadFile: Charger depuis le fichier + apply: Appliquer à l'appareil + save: Enregistrer les changements + inputName: Merci d'entrer un nom pour cette sauvegarde + cannotSave: La sauvegarde a échoué +privateMode: Mode privé +privateModeInfo: Si activé, seuls les serveurs autorisés peuvent fédérer avec votre + serveur. Toutes les publications seront masquées de la visibilité publique. +allowedInstances: Serveurs Autorisés +driveCapOverrideLabel: Changer la capacité du drive pour cet utilisateur +driveCapOverrideCaption: Réinitialiser la capacité à la valeur par défaut en entrant + 0 ou moins. +pleaseSelect: Sélectionner une option +customMOTD: Message du jour personnalisé (Message d'écran de démarrage) +refreshInterval: 'Intervalle de mise à jour ' +type: Type +speed: Vitesse +slow: Lent +move: Déplacer +showAds: Afficher les bannières communautaire (publicités) +enterSendsMessage: Appuyer sur Entrée pendant la rédaction pour envoyer le message + (sinon Ctrl+Entrée) +allowedInstancesDescription: Noms des serveurs autorisés pour la fédération, chacun + séparé par une nouvelle ligne (s'applique uniquement en mode privé). +enableAutoSensitive: Marquage automatique du contenu sensible (NSFW) +regexpErrorDescription: "Il y a eu une erreur dans l'expression régulière à la ligne + {line} de votre {tab} des mots masqués :" +forwardReportIsAnonymous: À la place de votre compte, un compte système anonyme sera + affiché comme rapporteur au serveur distant. +noThankYou: Non merci +addInstance: Ajouter un serveur +renoteMute: Masquer les boosts dans vos fils d'actualité +flagSpeakAsCat: Parler comme un chat +flagSpeakAsCatDescription: Vos messages seront « nyanifiés » en mode chat +hiddenTags: Hashtags cachés +hiddenTagsDescription: "Lister les hashtags (sans le #) que vous souhaitez cacher + de Tendances et Découvrir. Les hashtags cachés sont toujours découvrables par d'autres + moyens." +antennaInstancesDescription: Lister un nom de serveur par ligne +userSaysSomethingReason: '{name} a dit {reason}' +breakFollowConfirm: Êtes vous sûr de vouloir retirer l'abonné ? +recommendedInstancesDescription: Serveurs recommandés séparés par une nouvelle ligne + pour apparaître dans le fil recommandé. +sendPushNotificationReadMessage: Supprimer les notifications poussées une fois que + les notifications ou messages concernés ont été lus +sendPushNotificationReadMessageCaption: Une notification contenant le texte « {emptyPushNotificationMessage} » + sera affichée pendant un court instant. Cela peut augmenter la consommation de batterie + de votre appareil. +splash: Écran d'Accueil +pushNotificationNotSupported: Votre navigateur ou serveur ne supporte pas les notifications + poussées +customMOTDDescription: Messages personnalisé pour le message du jour (sur l'écran + d'accueil), séparés par des retours à la ligne, affichés au hasard à chaque (re)chargement + de page. +customSplashIcons: Icônes de l'écran d'accueil personnalisées (urls) +customSplashIconsDescription: URLs pour les icônes personnalisées de l'écran d'accueil, + séparés par des retours à la ligne, qui seront affichées aléatoirement à chaque + (re)chargement de page. Assurez-vous que les images sont sur des URL statiques, + de préférence toutes de taille 192x192. +updateAvailable: Une mise à jour peut être disponible ! +accountMoved: "L'utilisateur·rice a migré vers un nouveau compte :" +enableEmojiReactions: Activer les réactions par émojis +showEmojisInReactionNotifications: Montrer les émojis dans les notifications de réactions +renoteUnmute: Ne plus masquer les boosts dans vos fils d'actualité +selectInstance: Choisir un serveur +noInstances: Il n'y a aucun serveur +showLocalPosts: 'Montrer les notes locales dans :' +homeTimeline: Timeline d'Accueil +socialTimeline: Timeline Sociale +requireAdminForView: Vous avez besoin d'un compte d'administration pour voir ceci. +isSystemAccount: Ce compte est créé et géré automatiquement par le système. Veuillez + ne pas modérer, éditer, supprimer ou altérer d'une autre manière ce compte, ou cela + risque de perturber votre serveur. +typeToConfirm: Entrer {x} pour confirmer +statusbar: Barre d'état +sensitiveMediaDetection: Détection des médias sensibles (NSFW) +cannotUploadBecauseInappropriate: Ce fichier n'a pas pu être mis en ligne, car il + a été détecté comme potentiellement sensible (NSFW). +beta: Beta +navbar: Barre de navigation +shuffle: Mélanger +pushNotification: Notifications poussées +subscribePushNotification: Activer les notifications possées +unsubscribePushNotification: Désactiver les notifications poussées +pushNotificationAlreadySubscribed: Notifications poussées déjà activées +logoImageUrl: URL de l'image du logo +moveToLabel: 'Compte vers lequel vous migrez :' +moveFrom: Migrer vers ce compte depuis un ancien compte +defaultReaction: Émoji de réaction par défaut pour les publications entrantes et sortantes +license: Licence +customKaTeXMacro: Macros KaTeX personnalisées +enableCustomKaTeXMacro: Activer les macros KaTeX personnalisées +noteId: ID des publications +customKaTeXMacroDescription: "Définissez des macros pour écrire des expressions mathématiques + simplement ! La notation se conforme aux définitions de commandes LaTeX et s'écrit + \\newcommand{\\·name}{content} ou \\newcommand{\\name}[number of arguments]{content}. + Par exemple, \\newcommand{\\add}[2]{#1 + #2} étendra \\add{3}{foo} en 3 + foo. Les + accolades entourant le nom de la macro peuvent être changés pour des parenthèses + ou des crochets. Cela affectera les types de parenthèses utilisées pour les arguments. + Une (et une seule) macro peut être définie par ligne, et vous ne pouvez pas couper + la ligne au milieu d'une définition. Les lignes invalides sont simplement ignorées. + Seulement de simples fonctions de substitution de chaines sont supportées ; la syntaxe + avancée, telle que la ramification conditionnelle, ne peut pas être utilisée ici." +enableRecommendedTimeline: Activer le fil recommandé +silenceThisInstance: Masquer ce serveur +silencedInstances: Serveurs masqués +silenced: Masqué +deleted: Effacé +editNote: Modifier la publication +edited: 'Modifié à {date} {time}' +flagShowTimelineRepliesDescription: Si activé, affiche dans le fil les réponses des + utilisatieur·rice·s aux publications des autres. +_experiments: + alpha: Alpha + beta: Beta + enablePostImports: Autoriser l'importation de publications + title: Expérimentations + postImportsCaption: Permet aux utilisateurs d'importer leurs publications à partir + de leurs anciens comptes Firefish, Misskey, Mastodon, Akkoma et Pleroma. Cela + peut entraîner des ralentissements lors du chargement si votre file d'attente + est congestionnée. +userSaysSomethingReasonQuote: '{name} a cité une publication contenant {reason}' +signupsDisabled: Les inscriptions sur ce serveur sont actuellement désactivés. Si + vous avez un code d'invitation pour ce serveur, saisissez-le ci-dessous. +apps: Applications +userSaysSomethingReasonReply: '{noms} a répondu à une publication contenant {raison}' +defaultValueIs: 'défaut : {valeur}' +searchPlaceholder: Recherchez sur Firefish +removeReaction: Retirer votre réaction +selectChannel: Sélectionner une chaîne +expandOnNoteClick: Ouvrir la publications en cliquant +preventAiLearning: Empêcher le récupération de données par des IA +listsDesc: Les listes vous laissent créer des fils personnalisés avec des utilisateur·rice·s + spécifié·e·s. Elles sont accessibles depuis la page des fils. +_feeds: + jsonFeed: flux JSON + atom: Atom + copyFeed: Copier le flux + rss: RSS +alt: ALT +swipeOnMobile: Permettre le balayage entre les pages +expandOnNoteClickDesc: Si désactivé, vous pourrez toujours ouvrir les publications + dans le menu du clic droit et en cliquant sur l'horodatage. +older: ancien +newer: récent +accessibility: Accessibilité +silencedInstancesDescription: Listez les noms de domaine de serveurs que vous voulez + masquer. Les comptes des serveurs listés seront traités comme « Masqués », ne pourront + faire que des demandes d'abonnement, et ne pourront pas mentionner les comptes locaux + si non-abonnés. Cela n'affectera en rien les serveurs bloqués. +antennasDesc: "Les Antennes affichent de nouvelles publications selon les critères + que vous indiqués.\nElles peuvent être consultées depuis la page des fils." +image: Image +video: Vidéo +audio: Audio +jumpToPrevious: Passer au précédent +cw: Avertissement de contenu +xl: XL +reflectMayTakeTime: Il pourra s'écouler un certain temps avant que les changements + ne soient reflétés. +userSaysSomethingReasonRenote: '{name} a boosté une publication contenant {reason}' +sendModMail: Envoyer un avis à la modération +clipsDesc: Les clips sont comme des favoris catégorisés pouvant être partagés. Vous + pouvez créer des clips à partir du menu de chaque publication. +unclip: Dé-clipper +secureMode: Mode sécurisé (Authorized Fetch) +secureModeInfo: Quand sollicité depuis d'autres serveurs, ne pas répondre sans preuve. +isModerator: Modérateur +enableServerMachineStats: Activer les statistiques matérielles du serveur +enableIdenticonGeneration: Activer la génération d'Identicon +reactionPickerSkinTone: Couleur de peau des émojis préférée +verifiedLink: Lien vérifié +isBot: Ce compte est automatisé +isLocked: Ce compte nécessite une approbation pour être abonné +origin: Origine +showPopup: Notifier les utilisateurs avec un popup +showWithSparkles: Afficher avec des paillettes +youHaveUnreadAnnouncements: Vous avez des annonces non-lues +donationLink: Lien vers la page de donation +neverShow: Ne plus afficher +remindMeLater: Peut-être plus tard +removeQuote: Retirer la citation +removeRecipient: Retirer le destinataire +removeMember: Retirer un membre +preventAiLearningDescription: Demandez aux modèles d'IA de tiers de ne pas étudier + le contenu que vous téléchargez, tel que les publications et les images. +noGraze: Veuillez désactiver l'extension de navigateur « Graze for Mastodon », car + elle interfère avec Firefish. +silencedWarning: Cette page s'affiche car ces utilisateurs proviennent de serveurs + que votre administrateur a réduits au silence/masqué, il se peut donc qu'ils soient + de potentiels spams. +isAdmin: Administrateur +isPatron: Mécène Firefish +_filters: + fromUser: De l'utilisateur + withFile: Avec fichier + notesBefore: Publications précédentes + notesAfter: Publications suivantes + followersOnly: Abonnés uniquement + followingOnly: Abonnements uniquement + fromDomain: Du domaine +_dialog: + charactersBelow: 'Pas assez de caractères ! Actuel : {current}/Minimum : {min}' + charactersExceeded: 'Nombre maximal de caractères dépassé ! Actuel : {current}/Limite + : {max}' +channelFederationWarn: Les chaînes ne se fédèrent pas encore vers d'autres serveurs +_skinTones: + yellow: Jaune + dark: Peau Foncée + light: Claire + mediumLight: Moyennement Claire + medium: Légèrement Mate + mediumDark: Peau Mate +objectStorageS3ForcePathStyle: Utiliser des URL d'endpoints basées sur le chemin +objectStorageS3ForcePathStyleDesc: Activez cette option pour construire les URL d'endpoints + au format 's3.amazonaws.com//' au lieu de '.s3.amazonaws.com'. +delete2fa: Désativer A2F +deletePasskeys: Supprimer les clés d'accès +delete2faConfirm: Cela supprimera de manière irréversible la double authentification + sur ce compte. Souhaitez-vous continuer ? +inputNotMatch: L'entrée ne correspond pas +deletePasskeysConfirm: Cela supprimera de manière irréversible toutes les clés d'accès + et les clés de sécurité sur ce compte. Souhaitez-vous continuer ? +addRe: Ajouter « re: » au début d'un avertissement de contenu (CW) en réponse à une + publication avec un avertissement de contenu +confirm: Confirmer +importZip: Importer ZIP +exportZip: Exporter ZIP +detectPostLanguage: Détecter automatiquement la langue et afficher un bouton de traduction + pour les publications en langues étrangères +indexableDescription: Permettre à la recherche interne d'afficher vos publications + publiques +openServerInfo: Afficher les informations du serveur en cliquant sur le bandeau de + serveur d'une publication +indexable: Indexable +languageForTranslation: Langue de traduction +vibrate: Jouer les vibrations +clickToShowPatterns: Cliquer pour montrer les patrons de modules +iconSet: Jeu d'icônes +_iconSets: + fill: Rempli + regular: Normal + bold: Gras + duotone: Deux tons + light: Fin +reactions: Réactions +replies: Réponses +quotes: Citations +renotes: Boosts +moreUrls: Pages épinglées +squareCatAvatars: Afficher les avatars carrés pour les comptes avec oreilles de chat +suggested: Suggéré +replaceChatButtonWithAccountButton: Remplacer le bouton de discussion par le bouton + de changement de compte +showBigPostButton: Afficher un gros bouton de publication sur le formulaire de publication +moreUrlsDescription: "Saisir les pages que vous voulez épingler au menu d'aide dans + le coin inférieur gauche en utilisant cette notation :\n« Nom d'affichage » : https://exemple.com/" +attachedToNotes: Publications avec ce fichier +showAttachedNotes: Afficher les publications avec ce fichier +noLanguage: Aucune langue +showPreviewByDefault: Afficher l'aperçu dans le formulaire de publication par défaut +preventMisclick: Protection contre les clics accidentels +hideFollowButtons: Masquer les boutons d'abonnement dans une position où nous ne pouvons + pas cliquer +forMobile: Mobile +replaceWidgetsButtonWithReloadButton: Remplacer le bouton des widgets par le bouton + de rechargement +searchEngine: Moteur de recherche utilisé dans la barre de recherche MFM +postSearch: Recherche de publication sur ce serveur +emojiModPerm: Autorisation de gestion des émojis personnalisés +_emojiModPerm: + mod: Ajouter et modifier + full: Autoriser tout + unauthorized: Aucune + add: Ajouter +emojiModPermDescription: "Ajouter : Autoriser cet utilisateur à ajouter de nouveaux + émojis personnalisés et à définir le nom/la catégorie/le mot-dièse/la licence des + émojis personanalisés ajoutés.\nAjouter et modifier : « Ajouter » + Autoriser cet + utilisateur à modifier le nom/la catégorie/le mot-dièse/la licence des émojis personnalisés + existants.\nAutoriser tout : « Ajouter + Modifier » + Autoriser cet utilisateur + à suppimer des émojis personalisés existants." +makePrivate: Rendre privé +privateDescription: Rendre visible uniquement pour vous +private: Privé +makePrivateConfirm: Cette opération enverra une demande de suppression aux serveurs + distants et changera la visibilité au privé. Voulez-vous continuer ? +useCdn: Obtenir des actifs à partir d'un réseau de diffusion de contenu +useCdnDescription: Obtenir des actifs, tels que Twemoji, à partir du réseau de diffusion + de contenu « JSDelivr » au lieu de ce serveur. +sentFollowRequests: Demandes d'abonnement envoyées +enablePullToRefresh: Activer « Dérouler pour actualiser » +reloading: Rechargement en cours +pullToRefreshThreshold: Distance de traction pour le rechargement +pullDownToReload: Tirer pour actualiser +releaseToReload: Relâcher pour actualiser +searchWords: Mot(s), ID ou URL à rechercher +searchUsers: Publier par (faculatif) +replyMute: Masquer les réponses dans vos fils d'actualité +replyUnmute: Ne plus masquer les réponses dans vos fils d'actualité +noSentFollowRequests: Vous n'avez envoyé aucune demande d'abonnement +enableTimelineStreaming: Actualiser les fils d'actualité automatiquement +searchRange: Publier entre (faculatif) +searchCwAndAlt: Inclure les avertissements de contenu et les descriptions de fichiers +searchPostsWithFiles: Publications uniquement avec fichiers +publishTimelines: Publier les fils d'actualité pour les visiteurs +publishTimelinesDescription: Si cette option est activée, les fils Local et Global + sera affichée sur {url} même en cas de déconnexion. +searchWordsDescription: "Saisissez le terme de recherche ici pour rechercher des publications. + Séparez les mots avec un espace pour une recherche ET, ou « OR » (sans guillemets) + entre des mots pour une recherche OU.\nPar exemple, « matin nuit » trouvera des + publications contenant à la fois « matin » et « nuit », et « matin ou nuit » trouveront + des messages qui contiennent soit « matin » ou « nuit » (ou les deux).\nVous pouvez + également combiner des conditions ET/OU comme « (matin OR nuit) ensommeillé ».\n + Si vous voulez chercher une séquence de mots (par exemple, une phrase), vous devez + le mettre en double citations, pour ne pas en faire une recherche ET : \"Aujourd'hui + j'ai appris\"\n\nSi vous souhaitez accéder à une page d'utilisateur ou à une page + d'affichage spécifique, saisissez l'ID ou l'URL dans ce champ et cliquez sur le + bouton « Rechercher ». Cliquez sur « Rechercher » recherchera des messages qui contiennent + littéralement l'ID/URL." +searchUsersDescription: "Pour rechercher des messages par un utilisateur/serveur spécifique, + saisissez l'ID (@utilisateur@exemple.com, ou @utilisateur pour un utilisateur local) + ou le nom de domaine (exemple.com).\n\nSi vous saisissez « me » (sans guillemets), + tous vos messages (y compris les messages non-listés, abonnés-seulement, directs + et secrets) seront recherchés.\n\nSi vous saisissez « local » (sans guillemets), + les résultats seront filtrés pour inclure seulement des messages de ce serveur." +searchRangeDescription: "Si vous voulez filtrer par période de temps, saisissez-la + dans ce format : 20220615-20231031\n\nSi vous omettez l'année (comme le 0105-0106 + ou le 20231105-0110), elle est interprétée comme l'année en cours.\n\nVous pouvez + également omettre le début ou la fin de la date. Par exemple, -0102 filtrera les + résultats de recherche pour afficher seulement les messages effectués avant le 2 + janvier de cette année, et 20231026- filtrera les résultats pour afficher seulement + les messages effectués après le 26 octobre 2023." +toReply: Répondre +toPost: Publier +toQuote: Citer +toEdit: Modifier +messagingUnencryptedInfo: Les conversations sur Firefish ne sont pas cryptées. Ne + partagez aucune information sensible sur Firefish. +moderationNote: Note de modération +driveCapacityOverride: Limite de stockage personalisée +ipFirstAcknowledged: La date de la première acquisition de l'adresse IP +noAltTextWarning: Certains fichiers joints n'ont aucune description. Avez-vous oublié + de l'écrire ? +showNoAltTextWarning: Afficher un avertissement si vous essayez de publier des fichiers + sans description +autocorrectNoteLanguage: Afficher un avertissement si la langue de publication ne + correspond pas au résultat autodétecté +incorrectLanguageWarning: "Il semble que votre publication est en {detected}, mais + vous avez sélectionné {current}.\nVoulez-vous sélectionner {detected} à la place ?" +markLocalFilesNsfwByDefault: Marquer tous les nouveaux fichiers locaux comme sensibles + par défaut +markLocalFilesNsfwByDefaultDescription: Indépendamment de ce réglage, les utilisateurs + peuvent supprimer le drapeau « sensible » (NSFW) eux-mêmes. Les fichiers existants + ne sont pas affectés. +noteEditHistory: Historique des publications +media: Multimédia +antennaLimit: Le nombre maximal d'antennes que chaque utilisateur peut créer +showAddFileDescriptionAtFirstPost: Ouvrez automatiquement un formulaire pour écrire + une description lorsque vous tentez de publier des fichiers sans description +foldNotification: Grouper les notifications similaires +cannotEditVisibility: Vous ne pouvez pas modifier la visibilité +useThisAccountConfirm: Voulez-vous continuer avec ce compte ? +inputAccountId: Veuillez saisir votre compte (par exemple, @firefish@info.firefish.dev) +remoteFollow: Abonnement à distance +copyRemoteFollowUrl: Copier l'URL d'abonnement à distance +slashQuote: Citation enchaînée +i18nServerInfo: Les nouveaux clients seront en {language} par défaut. +i18nServerChange: Utilisez {language} à la place. +i18nServerSet: Utilisez {language} pour les nouveaux clients. +mergeThreadInTimeline: Fusionner plusieurs publications dans le même fil dans les + fils d'actualité +mergeRenotesInTimeline: Regrouper plusieurs boosts du même publication +_later: + future: futur + weeksAgo: il y a {n} semaine(s) + daysAgo: il y a {n} jour(s) + hoursAgo: il y a {n} heure(s) + minutesAgo: il y a {n} minute(s) + secondsAgo: il y a {n} seconde(s) + yearsAgo: il y a {n} an(s) + justNow: à l'instant + monthsAgo: il y a {n} mois +scheduledPost: Programmez cette publication +scheduledDate: Date programmée +cancelScheduledPost: Annulez la publication programmée +scheduledPostAt: Cette publication sera envoyée {time} diff --git a/locales/gl.yml b/locales/gl.yml new file mode 100644 index 0000000..520cd70 --- /dev/null +++ b/locales/gl.yml @@ -0,0 +1,378 @@ +_lang_: Galego +introFirefish: Benvida! Firefish é unha plataforma de medios sociais de código aberto, + descentralizada e gratuíta para sempre!🚀 +monthAndDay: '{day}/{month}' +notifications: Notificacións +password: Contrasinal +forgotPassword: Esquecín o contrasinal +gotIt: Vale! +cancel: Cancelar +noThankYou: Non, grazas +headlineFirefish: Plataforma de medios sociais de código aberto e descentralizada, + gratuíta para sempre!🚀 +search: Buscar +searchPlaceholder: Buscar en Firefish +username: Identificador +fetchingAsApObject: Descargando desde o Fediverso +ok: OK +youShouldUpgradeClient: Actualiza esta páxina para recibir os últimos contidos no + teu cliente. +privacy: Privacidade +makeFollowManuallyApprove: As solicitudes de seguimento requiren aprobación +defaultNoteVisibility: Visibilidade por defecto +follow: Seguir +followRequests: Solicitudes de seguimento +followRequestPending: Solicitude de seguimento pendente +renote: Promover +unrenote: Retirar promoción +renoted: Promovida. +cantReRenote: Unha promoción non pode ser promovida. +quote: Citar +pinnedNote: Publicación fixada +pinned: Fixar no perfil +you: Ti +clickToShow: Preme para mostrar +sensitive: NSFW +add: Engadir +reaction: Reaccións +removeReaction: Quitar a túa reacción +enableEmojiReactions: Activar as reaccións con emojis +showEmojisInReactionNotifications: Mostrar emojis nas notificacións das reaccións +reactionSetting: Reaccións mostradas no selector de reaccións +reactionSettingDescription2: Arrastra para reordenar, preme para eliminar, preme "+" + para engadir. +rememberNoteVisibility: Lembrar os axustes da visibilidade da publicación +attachCancel: Quitar o anexo +markAsSensitive: Marcar como NSFW +unmarkAsSensitive: Retirar marca NSFW +enterFileName: Escribe nome do ficheiro +mute: Acalar +unmute: Reactivar +renoteMute: Acalar promocións +renoteUnmute: Reactivar promocións +block: Bloquear +unblock: Desbloquear +suspend: Suspender +unsuspend: Retirar suspensión +timeline: Cronoloxía +noAccountDescription: Esta usuaria aínda non escribiu a súa bio. +login: Acceder +loggingIn: Accedendo +logout: Pechar sesión +signup: Crear conta +uploading: Subindo... +save: Gardar +users: Usuarias +addUser: Engadir unha usuaria +addInstance: Engadir un servidor +favorite: Engadir aos marcadores +favorites: Marcadores +unfavorite: Quitar dos marcadores +favorited: Engadido aos marcadores. +alreadyFavorited: Xa está nos marcadores. +cantFavorite: Non se puido engadir aos marcadores. +pin: Fixar no perfil +unpin: Soltar do perfil +copyContent: Copiar contidos +copyLink: Copiar ligazón +delete: Eliminar +deleted: Eliminado +deleteAndEdit: Eliminar e editar +blockConfirm: Tes a certeza de querer bloquear esta conta? +deleteAndEditConfirm: Tes a certeza de querer eliminar esta publicación e editala? + Perderás todas as súas reaccións, promocións e respostas. +editNote: Editar publicación +edited: Editado o {date} {time} +sendMessage: Enviar unha mensaxe +copyUsername: Copiar identificador +searchUser: Buscar unha usuaria +reply: Responder +jumpToPrevious: Ir á anterior +loadMore: Cargar máis +showMore: Mostrar máis +newer: máis novo +older: máis antigo +showLess: Pechar +youGotNewFollower: seguíute +receiveFollowRequest: Recibida solicitude de seguimento +followRequestAccepted: Solicitude de seguimento aceptada +mention: Mención +mentions: Mencións +directNotes: Mensaxes directas +cw: Aviso sobre o contido +importAndExport: Importar/Exportar datos +import: Importar +export: Exportar +files: Ficheiros +download: Descargar +unblockConfirm: Tes a certeza de querer retirarlle o bloqueo a esta conta? +suspendConfirm: Tes a certeza de querer suspender esta conta? +unsuspendConfirm: Tes a certeza de querer retirarlle a suspensión a esta conta? +selectList: Elixe unha lista +selectAntenna: Elixe unha antena +selectWidget: Elixe un widget +selectChannel: Elixe unha canle +editWidgets: Editar widgets +editWidgetsExit: Feito +customEmojis: Emoji personalizado +emoji: Emoji +emojis: Emoji +emojiName: Nome do emoji +emojiUrl: URL do emoji +addEmoji: Engadir +settingGuide: Axustes recomendados +cacheRemoteFiles: Gardar na caché ficheiros remotos +cacheRemoteFilesDescription: Se desactivas este axuste, os ficheiros remotos cárganse + directamente desde o servidor remoto. Ao desactivalo diminuirá a almacenaxe usada, + pero incrementarás o tráfico, xa que non se crearán miniaturas. +flagAsBotDescription: Activa esta opción se esta conta está controlada por un programa. + Se está activada, será unha marca para que outras desenvolvedoras eviten interaccións + en bucle con outros bots e axustará os sistemas internos de Firefish para tratar + esta conta como un bot. +flagAsCat: Es un gato? 😺 +flagAsCatDescription: Vas ter orellas de gato e falar como un gato! +flagSpeakAsCat: Fala como un gato +flagSpeakAsCatDescription: As túas publicacións serán gatificadas ao estar no modo + gato +flagShowTimelineReplies: Mostrar respostas na cronoloxía +flagShowTimelineRepliesDescription: Se está activado mostra as respostas das usuarias + a publicacións de outras usuarias na cronoloxía. +autoAcceptFollowed: Aprobar automáticamente as solicitudes de seguimento das persoas + que ti xa segues +addAccount: Engadir conta +loginFailed: Fallou o inicio de sesión +showOnRemote: Abrir páxina orixinal +general: Xeral +accountMoved: 'A usuaria está nunha nova conta:' +wallpaper: Fondo de pantalla +setWallpaper: Establecer fondo +removeWallpaper: Eliminar fondo +searchWith: 'Buscar: {q}' +youHaveNoLists: Non tes ningunha lista +stopActivityDelivery: Deixar de enviar actividades +perDay: Por día +blockThisInstance: Bloquear este servidor +silenceThisInstance: Acalar este servidor +operations: Operacións +software: Software +version: Versión +metadata: Metadatos +monitor: Monitor +cantRenote: Non se pode promover esta publicación. +clearCachedFiles: Limpar caché +jobQueue: Cola de tarefas +cpuAndMemory: CPU e Memoria +network: Rede +disk: Disco +instanceInfo: Información do servidor +statistics: Estatísticas +clearQueue: Limpar cola +clearQueueConfirmTitle: Tes a certeza de querer limpara a cola? +clearQueueConfirmText: Todas as publicacións que aínda non fosen entregadas non estarán + federadas. Esta operación, normalmente, non é necesaria. +clearCachedFilesConfirm: Tes a certeza de que queres eliminar todos os ficheiros remotos + da caché? +blockedInstances: Servidores bloqueados +blockedInstancesDescription: Lista dos nomes dos servidores que queres bloquear. Os + servidores da lista non poderán comunicarse con este servidor. +silencedInstances: Servidores acalados +silencedInstancesDescription: Lista cos nomes de servidores que queres acalar. As + contas dos servidores acalados serán tratadas como "Silenciadas", só poden facer + solicitudes de seguimento e non poden mencionar contas locais se non a están a seguir. + Isto non afecta aos servidores bloqueados. +hiddenTags: Cancelos agochados +hiddenTagsDescription: 'Lista cos cancelos (sen o #) que queres ocultar das seccións + descubrir e en voga. Os cancelos agochados seguirán sendo accesibles por outros + medios.' +muteAndBlock: Bloquear e Silenciar +mutedUsers: Usuarias acaladas +blockedUsers: Usuarias bloqueadas +noUsers: Sen usuarias +noInstances: Sen servidores +editProfile: Editar perfil +noteDeleteConfirm: Tes a certeza de querer eliminar esta publicación? +pinLimitExceeded: Xa non podes fixar máis publicacións +intro: Rematou a instalación de Fishfox! Por favor crea a usuaria administradora. +done: Feito +processing: Procesando +preview: Vista previa +default: Por defecto +defaultValueIs: 'Por defecto: {value}' +noCustomEmojis: Non hai emojis +noJobs: Non hai tarefas +blocked: Bloqueado +federating: Federación +silenced: Acalado +suspended: Suspendido +all: Todo +subscribing: Subscrición +publishing: Publicar +notResponding: Non responde +instanceFollowing: Seguindo no servidor +instanceFollowers: Seguidoras desde o servidor +instanceUsers: Usuarias neste servidor +security: Seguridade +retypedNotMatch: Os valores escritos non concordan. +changePassword: Cambiar contrasinal +currentPassword: Contrasinal actual +newPassword: Novo contrasinal +newPasswordRetype: Volve escribir o contrasinal +attachFile: Adxunta ficheiros +more: Máis! +featured: Destacado +usernameOrUserId: Identificador ou id de usuaria +noSuchUser: Non se atopa a usuaria +remove: Eliminar +removed: Eliminada correctamente +removeAreYouSure: Tes a certeza de querer eliminar "{x}"? +announcements: Anuncios +imageUrl: URL da imaxe +enterUsername: Escribir identificador +renotedBy: Promovido por {user} +noNotes: Sen publicacións +noNotifications: Sen notificacións +instance: Servidor +settings: Axustes +basicSettings: Axustes básicos +otherSettings: Outros axustes +openInWindow: Abrir na ventá +profile: Perfil +addToList: Engadir á lista +lists: Listas +listsDesc: As listas permítenche crear cronoloxías coas usuarias escollidas. Podes + acceder a elas desde a páxina de cronoloxías. +noLists: Non tes ningunha lista +note: Publicación +notes: Publicacións +following: Seguindo +followers: Seguidoras +followsYou: Séguete +createList: Crear lista +manageLists: Xestionar listas +error: Erro +somethingHappened: Houbo un fallo +retry: Volver a intentar +pageLoadError: Algo fallou ao cargar a páxina. +pageLoadErrorDescription: Normalmente isto débese a problemas na rede ou na caché + do navegador. Intenta limpar a caché e volve a intentalo dentro dun anaco. +serverIsDead: Este servidor non responde. Agarda un anaco e volve intentalo. +enterListName: Dalle un nome á lista +unfollow: Deixar de seguir +enterEmoji: Escribe un emoji +flagAsBot: Marcar a conta como bot +followConfirm: Tes a certeza de querer seguir a {name}? +proxyAccount: Conta proxy +proxyAccountDescription: Unha conta proxy é unha conta que en determinadas situacións + actúa como unha seguidora remota para as usuarias. Por exemplo, cando unha usuaria + engade unha usuaria remota a unha lista, a actividade da usuaria remota non se entrega + ao servidor se a usuaria local non segue a esa outra usuaria, así a conta proxy + fará o seguimento no seu lugar. +host: Hóspede +selectUser: Escolle unha usuaria +selectInstance: Escolle un servidor +recipient: Correpondente(s) +annotation: Comentarios +federation: Federación +instances: Servidores +registeredAt: Data do rexistro +latestRequestSentAt: Última solicitude enviada +latestRequestReceivedAt: Última solicitude recibida +latestStatus: Último estado +storageUsage: Uso da almacenaxe +charts: Gráficas +perHour: Por hora +followRequest: Solicitar seguimento +messageRead: Ler +noMoreHistory: Non hai máis historial +images: Imaxes +manageGroups: Xestionar grupos +unableToDelete: Non se puido eliminar +syncDeviceDarkMode: Syncr Modo Escuro cos axustes do teu dispositivo +uploadFromUrl: Subir desde un URL +emptyDrive: O teu Disco está baleiro +copyUrl: Copiar URL +nUsersRead: lido por {n} +uploadFromUrlRequested: Solicitaches unha subida +circularReferenceFolder: O cartafol de destino é un subcartafol do cartafol que queres + mover. +selectFile: Elexir un ficheiro +inputNewFileName: Escribe o novo nome +agreeTo: Acepto os {0} +whenServerDisconnected: Cando se perda a conexión co servidor +selectFolder: Elexir un cartafol +saved: Gardado +selectFiles: Elexir ficheiros +fileName: Nome do ficheiro +explore: Descubrir +keepOriginalUploadingDescription: Garda a imaxe subida orixinalmente tal como é. Se + o desactivas, a versión que se mostrará na web será creada ao subila. +folderName: Nome do cartafol +lightThemes: Decorados claros +rename: Cambiar nome +activity: Actividade +fromUrl: Desde URL +darkThemes: Decorados escuros +birthday: Aniversario +registeredDate: Conta creada en +fromDrive: Desde Disco +uploadFromUrlMayTakeTime: Podería tardar una anaco en completarse a subida. +theme: Decorados +renameFolder: Cambiar nome a este cartafol +resetAreYouSure: Queres restablecer? +startMessaging: Comezar un novo chat +light: Claro +themeForLightMode: Decorado a usar no Modo Claro +inputNewDescription: Escribe a descrición +start: Comezar +selectFolders: Elexir cartafoles +remoteUserCaution: A información das usuarias remotas podería estar incompleta. +exportRequested: Solicitaches unha exportación. Vainos levar un pouco. Vai ser engadida + ao teu Disco cando estea completa. +deleteFolder: Eliminar este cartafol +drive: Disco +importRequested: Solicitaches unha importación. Vainos levar un anaco. +uploadFromUrlDescription: URL do ficheiro que queres subir +location: Localización +unfollowConfirm: Tes a certeza de que queres deixar de seguir a {name}? +banner: Cabeceira +dark: Escuro +home: Inicio +keepOriginalUploading: Manter imaxe orixinal +upload: Subir +yearsOld: '{age} anos de idade' +emptyFolder: Este cartafol está baleiro +messaging: Chat +nsfw: NSFW +addFile: Engadir un ficheiro +tos: Termos do Servizo +themeForDarkMode: Decorado a usar no Modo Escuro +deleteAreYouSure: Tes a certeza de querer desbotar "{x}"? +createFolder: Crear un cartafol +renameFile: Cambiar nome ao ficheiro +lookup: Buscar +avatar: Avatar +driveFileDeleteConfirm: Tes a certeza de querer eliminar o ficheiro "{name}"? Vai + ser retirado de todas as publicacións nas que estea como anexo. +inputNewFolderName: Escribe o novo nome do cartafol +hasChildFilesOrFolders: Como o cartafol non está baleiro, non pode ser eliminado. +dayX: '{day}' +reloadConfirm: Queres actualizar a cronoloxía? +watch: Ver +normal: Normal +monthX: '{month}' +instanceDescription: Descrición do servidor +disconnectedFromServer: Perdeuse a conexión co servidor +enableLocalTimeline: Activar cronoloxía local +reload: Actualizar +doNothing: Ignorar +instanceName: Nome do servidor +yearX: '{year}' +thisYear: Ano +unwatch: Deixar de ver +tosUrl: URL dos Termos do Servizo +thisMonth: Mes +pages: Páxinas +reject: Rexeitar +accept: Aceptar +maintainerName: Mantido por +today: Hoxe diff --git a/locales/hi.yml b/locales/hi.yml new file mode 100644 index 0000000..5a3bc68 --- /dev/null +++ b/locales/hi.yml @@ -0,0 +1,3 @@ +_lang_: "हिन्दी" +headlineFirefish: एक ओपन सोर्स , डिसेंट्रलाइज़्ड सोशल मीडिया प्लेटफ़ॉर्म जो हमेशा के + लिए मुफ़्त है! 🚀 diff --git a/locales/hu.yml b/locales/hu.yml new file mode 100644 index 0000000..3cb27fb --- /dev/null +++ b/locales/hu.yml @@ -0,0 +1 @@ +_lang_: "Magyar nyelv" diff --git a/locales/id-ID.yml b/locales/id-ID.yml new file mode 100644 index 0000000..1f63d19 --- /dev/null +++ b/locales/id-ID.yml @@ -0,0 +1,2306 @@ +_lang_: "Bahasa Indonesia" +headlineFirefish: "Platform media sosial sumber terbuka dan terdesentralisasi yang + merdeka sepenuhnya! 🚀" +introFirefish: "Selamat datang! Firefish adalah media sosial sumber terbuka dan terdesentralisasi + yang selamanya bebas! 🚀" +monthAndDay: "{day} {month}" +search: "Penelusuran" +notifications: "Pemberitahuan" +username: "Nama Pengguna" +password: "Kata sandi" +forgotPassword: "Lupa Kata Sandi" +fetchingAsApObject: "Mengambil data dari Fediverse" +ok: "OK" +gotIt: "Mengerti!" +cancel: "Batalkan" +enterUsername: "Masukkan nama pengguna" +renotedBy: "Diposting ulang oleh {user}" +noNotes: "Tidak ada postingan" +noNotifications: "Tidak ada pemberitahuan" +instance: "Server" +settings: "Pengaturan" +basicSettings: "Pengaturan umum" +otherSettings: "Pengaturan lainnya" +openInWindow: "Buka di jendela" +profile: "Profil" +timeline: "Linimasa" +noAccountDescription: "Pengguna ini belum menulis bio." +login: "Masuk" +loggingIn: "Sedang masuk" +logout: "Keluar" +signup: "Daftar" +uploading: "Mengunggah..." +save: "Simpan" +users: "Pengguna" +addUser: "Tambah pengguna" +favorite: "Favorit" +favorites: "Favorit" +unfavorite: "Hapus favorit" +favorited: "Ditambahkan ke markah." +alreadyFavorited: "Telah ditambahkan ke markah." +cantFavorite: "Tidak dapat menambahkan ke markah." +pin: "Sematkan ke profil" +unpin: "Lepas sematan dari profil" +copyContent: "Salin konten" +copyLink: "Salin tautan" +delete: "Hapus" +deleteAndEdit: "Hapus dan sunting" +deleteAndEditConfirm: "Kamu yakin ingin menghapus postingan lalu menyuntingnya? Kamu + akan kehilangan semua reaksi, postingan ulang, dan balasan." +addToList: "Tambahkan ke daftar" +sendMessage: "Kirim pesan" +copyUsername: "Salin nama pengguna" +searchUser: "Cari pengguna" +reply: "Balas" +loadMore: "Selebihnya" +showMore: "Selebihnya" +showLess: "Tutup" +youGotNewFollower: "Mengikuti kamu" +receiveFollowRequest: "Ingin mengikuti kamu" +followRequestAccepted: "Permintaan mengikuti telah disetujui" +mention: "Sebut" +mentions: "Sebutan" +directNotes: "Pesan langsung" +importAndExport: "Impor & Ekspor" +import: "Impor" +export: "Ekspor" +files: "Berkas" +download: "Unduh" +driveFileDeleteConfirm: "Kamu yakin ingin menghapus berkas \"{name}\"? Ini akan menghapus + semua postingan yang berisi lampiran tersebut." +unfollowConfirm: "Berhenti mengikuti {name}?" +exportRequested: "Kamu telah meminta ekspor. Ini akan memakan waktu sesaat. Setelah + ekspor selesai, berkas yang dihasilkan akan ditambahkan ke Drive." +importRequested: "Kamu telah meminta impor. Ini akan memakan waktu sesaat." +lists: "Daftar" +noLists: "Kamu tidak memiliki daftar apapun" +note: "Posting" +notes: "Postingan" +following: "Ikuti" +followers: "Pengikut" +followsYou: "Mengikuti kamu" +createList: "Buat daftar" +manageLists: "Sunting daftar" +error: "Galat" +somethingHappened: "Terjadi kesalahan" +retry: "Coba lagi" +pageLoadError: "Gagal memuat halaman." +pageLoadErrorDescription: "Umumnya disebabkan jaringan atau tembolok perambah. Cobalah + bersihkan tembolok peramban lalu tunggu sesaat sebelum mencoba kembali." +serverIsDead: "Tidak ada respon dari peladen. Mohon tunggu dan coba beberapa saat + lagi." +youShouldUpgradeClient: "Untuk melihat halaman ini, mohon muat ulang untuk memutakhirkan + klienmu." +enterListName: "Masukkan nama daftar" +privacy: "Privasi" +makeFollowManuallyApprove: "Permintaan mengikuti membutuhkan persetujuan" +defaultNoteVisibility: "Visibilitas bawaan" +follow: "Ikuti" +followRequest: "Permintaan Mengikuti" +followRequests: "Permintaan mengikuti" +unfollow: "Berhenti mengikuti" +followRequestPending: "Permintaan mengikuti yang menunggu" +enterEmoji: "Masukkan emoji" +renote: "Posting ulang" +unrenote: "Batalkan posting ulang" +renoted: "Diposting ulang." +cantRenote: "Postingan ini tidak dapat diposting ulang." +cantReRenote: "Postingan ulang tidak dapat diposting ulang." +quote: "Kutip" +pinnedNote: "Postingan tersemat" +pinned: "Sematkan ke profil" +you: "Kamu" +clickToShow: "Klik untuk melihat" +sensitive: "Konten sensitif" +add: "Tambahkan" +reaction: "Reaksi" +reactionSetting: "Reaksi untuk dimunculkan di bilah reaksi" +reactionSettingDescription2: "Geser untuk memindah urutan, klik untuk menghapus, tekan + \"+\" untuk menambahkan." +rememberNoteVisibility: "Ingat pengaturan visibilitas postingan" +attachCancel: "Hapus lampiran" +markAsSensitive: "Tandai sebagai konten sensitif" +unmarkAsSensitive: "Hapus tanda konten sensitif" +enterFileName: "Masukkan nama berkas" +mute: "Bisukan" +unmute: "Hapus bisukan" +block: "Blokir" +unblock: "Buka blokir" +suspend: "Bekukan" +unsuspend: "Buka pembekuan" +blockConfirm: "Apakah kamu yakin ingin memblokir akun ini?" +unblockConfirm: "Apakah kamu yakin ingin membuka blokir akun ini?" +suspendConfirm: "Apakah kamu yakin ingin membekukan akun ini?" +unsuspendConfirm: "Apakah kamu yakin ingin membuka pembekuan akun ini?" +selectList: "Pilih daftar" +selectAntenna: "Pilih Antena" +selectWidget: "Pilih gawit" +editWidgets: "Sunting gawit" +editWidgetsExit: "Selesai" +customEmojis: "Emoji kustom" +emoji: "Emoji" +emojis: "Emoji" +emojiName: "Nama emoji" +emojiUrl: "URL Emoji" +addEmoji: "Tambahkan emoji" +settingGuide: "Pengaturan rekomendasi" +cacheRemoteFiles: "Tembolokkan berkas remote" +cacheRemoteFilesDescription: "Ketika pengaturan ini dinonaktifkan, berkas luar akan + dimuat langsung dari server luar. Menonaktifkan ini akan mengurangi penggunaan penyimpanan, + tapi dapat menyebabkan meningkatkan lalu lintas, mengingat keluku tidak akan dihasilkan." +flagAsBot: "Tandai akun ini sebagai akun otomatis" +flagAsBotDescription: "Jika akun ini dikendalikan oleh program, aktifkan opsi ini. + Jika diaktifkan, ini akan berfungsi sebagai tanda bagi pengembang lain untuk mencegah + interaksi berantai dengan akun otomatis lain dan menyesuaikan sistem internal Firefish + untuk memperlakukan akun ini sebagai akun otomatis." +flagAsCat: "Atur akun ini sebagai kucing" +flagAsCatDescription: "Kamu akan mendapatkan telinga kucing dan berbicara seperti + seekor kucing!" +flagShowTimelineReplies: "Tampilkan balasan di linimasa" +flagShowTimelineRepliesDescription: "Menampilkan balasan pengguna pada postingan pengguna + lain di linimasa jika diaktifkan." +autoAcceptFollowed: "Setujui otomatis permintaan mengikuti dari pengguna yang kamu + ikuti" +addAccount: "Tambahkan akun" +loginFailed: "Gagal untuk masuk" +showOnRemote: "Buka halaman asli" +general: "Umum" +wallpaper: "Kertas dinding" +setWallpaper: "Atur wallpaper" +removeWallpaper: "Hapus wallpaper" +searchWith: "Cari: {q}" +youHaveNoLists: "Kamu tidak memiliki daftar apapun" +followConfirm: "Apakah kamu yakin ingin mengikuti {name}?" +proxyAccount: "Akun Proksi" +proxyAccountDescription: "Akun proksi merupakan sebuah akun yang bertindak sebagai + pengikut luar untuk pengguna dalam kondisi tertentu. Sebagai contoh, ketika pengguna + menambahkan pengguna luar ke dalam daftar, aktivitas dari pengguna luar tidak akan + dikirim ke server apabila tidak ada pengguna lokal yang mengikuti pengguna tersebut, + dengan begitu akun proksilah yang akan mengikutinya." +host: "Host" +selectUser: "Pilih pengguna" +recipient: "Penerima" +annotation: "Keterangan konten" +federation: "Federasi" +instances: "Server" +registeredAt: "Terdaftar" +latestRequestSentAt: "Permintaan terakhir dikirim pada" +latestRequestReceivedAt: "Permintaan terakhir diterima pada" +latestStatus: "Status terakhir" +storageUsage: "Penggunaan penyimpanan" +charts: "Grafik" +perHour: "per Jam" +perDay: "per Hari" +stopActivityDelivery: "Berhenti mengirim aktivitas" +blockThisInstance: "Blokir server ini" +operations: "Tindakan" +software: "Perangkat lunak" +version: "Versi" +metadata: "Metadata" +monitor: "Pantau" +jobQueue: "Antrian kerja" +cpuAndMemory: "CPU dan Memori" +network: "Jaringan" +disk: "Diska" +instanceInfo: "Informasi Server" +statistics: "Statistik" +clearQueue: "Bersihkan antrian" +clearQueueConfirmTitle: "Apakah kamu yakin ingin membersihkan antrian?" +clearQueueConfirmText: "Seluruh sisa postingan yang tidak tersampaikan di dalam antrian + tidak akan difederasi. Biasanya operasi ini TIDAK dibutuhkan." +clearCachedFiles: "Hapus tembolok" +clearCachedFilesConfirm: "Apakah kamu yakin ingin menghapus seluruh tembolok berkas + remote?" +blockedInstances: "Server yang Diblokir" +blockedInstancesDescription: "Daftar nama host dari server yang diperlukan untuk diblokir. + Server yang didaftarkan tidak akan dapat berkomunikasi dengan server ini." +muteAndBlock: "Bisukan / Blokir" +mutedUsers: "Pengguna yang dibisukan" +blockedUsers: "Pengguna yang diblokir" +noUsers: "Tidak ada pengguna" +editProfile: "Sunting profil" +noteDeleteConfirm: "Kamu yakin ingin menghapus postingan ini?" +pinLimitExceeded: "Kamu tidak dapat menyematkan postingan lagi" +intro: "Instalasi Firefish telah selesai! Mohon untuk membuat pengguna admin." +done: "Selesai" +processing: "Memproses" +preview: "Pratinjau" +default: "Bawaan" +noCustomEmojis: "Tidak ada emoji kustom" +noJobs: "Tidak ada kerja" +federating: "memfederasi" +blocked: "Diblokir" +suspended: "Diberhentikan" +all: "Semua" +subscribing: "Berlangganan" +publishing: "Sedang menyiarkan langsung" +notResponding: "Tidak ada respon" +instanceFollowing: "Mengikuti di server" +instanceFollowers: "Pengikut server" +instanceUsers: "Pengguna di server ini" +changePassword: "Ubah kata sandi" +security: "Keamanan" +retypedNotMatch: "Masukan tidak cocok." +currentPassword: "Kata sandi saat ini" +newPassword: "Kata sandi baru" +newPasswordRetype: "Ulangi kata sandi baru" +attachFile: "Lampirkan berkas" +more: "Lagi!" +featured: "Sorotan" +usernameOrUserId: "Nama pengguna atau User ID" +noSuchUser: "Pengguna tidak ditemukan" +lookup: "Mencari" +announcements: "Pengumuman" +imageUrl: "URL Gambar" +remove: "Hapus" +removed: "Telah dihapus" +removeAreYouSure: "Apakah kamu yakin ingin menghapus \"{x}\"?" +deleteAreYouSure: "Apakah kamu yakin ingin menghapus \"{x}\"?" +resetAreYouSure: "Yakin mau atur ulang?" +saved: "Telah disimpan" +messaging: "Pesan" +upload: "Unggah" +keepOriginalUploading: "Simpan gambar asli" +keepOriginalUploadingDescription: "Simpan gambar yang diunggah sebagaimana gambar + aslinya. Bila dimatikan, versi tampilan web akan dihasilkan pada saat diunggah." +fromDrive: "Dari Drive" +fromUrl: "Dari URL" +uploadFromUrl: "Unggah dari URL" +uploadFromUrlDescription: "URL berkas yang ingin kamu unggah" +uploadFromUrlRequested: "Pengunggahan telah diminta" +uploadFromUrlMayTakeTime: "Membutuhkan beberapa waktu hingga pengunggahan selesai." +explore: "Jelajahi" +messageRead: "Telah dibaca" +noMoreHistory: "Tidak ada sejarah lagi" +startMessaging: "Mulai mengirim pesan" +nUsersRead: "Dibaca oleh {n}" +agreeTo: "Saya setuju kepada {0}" +tos: "Syarat dan ketentuan" +start: "Mulai" +home: "Beranda" +remoteUserCaution: "Informasi dari pengguna luar tidak lengkap." +activity: "Aktivitas" +images: "Gambar" +birthday: "Tanggal lahir" +yearsOld: "{age} tahun" +registeredDate: "Bergabung pada" +location: "Lokasi" +theme: "Tema" +themeForLightMode: "Tema untuk Mode Terang" +themeForDarkMode: "Tema untuk Mode Gelap" +light: "Terang" +dark: "Gelap" +lightThemes: "Tema Terang" +darkThemes: "Tema gelap" +syncDeviceDarkMode: "Sinkronkan mode gelap dengan pengaturan perangkat" +drive: "Drive" +fileName: "Nama berkas" +selectFile: "Pilih berkas" +selectFiles: "Pilih berkas" +selectFolder: "Pilih folder" +selectFolders: "Pilih folder" +renameFile: "Ubah nama berkas" +folderName: "Nama folder" +createFolder: "Buat folder" +renameFolder: "Ubah nama folder" +deleteFolder: "Hapus folder" +addFile: "Tambahkan berkas" +emptyDrive: "Drive kosong" +emptyFolder: "Folder kosong" +unableToDelete: "Tidak dapat menghapus" +inputNewFileName: "Masukkan nama berkas yang baru" +inputNewDescription: "Masukkan deskripsi baru" +inputNewFolderName: "Masukkan nama folder yang baru" +circularReferenceFolder: "Folder tujuan adalah subfolder dari folder yang ingin kamu + pindahkan." +hasChildFilesOrFolders: "Karena folder ini tidak kosong, maka tidak dapat dihapus." +copyUrl: "Salin tautan" +rename: "Ubah nama" +avatar: "Avatar" +banner: "Banner" +nsfw: "Konten sensitif" +whenServerDisconnected: "Ketika kehilangan koneksi dengan peladen" +disconnectedFromServer: "Terputus koneksi dari peladen" +reload: "Muat ulang" +doNothing: "Abaikan" +reloadConfirm: "Apakah kamu ingin memuat ulang linimasa?" +watch: "Tonton" +unwatch: "Batal tonton" +accept: "Terima" +reject: "Tolak" +normal: "Normal" +instanceName: "Nama server" +instanceDescription: "Deskripsi server" +maintainerName: "Pengelola" +maintainerEmail: "Surel pengelola" +tosUrl: "URL Syarat dan Ketentuan" +thisYear: "Tahun ini" +thisMonth: "Bulan ini" +today: "Hari ini" +dayX: "{day}" +monthX: "{month}" +yearX: "{year}" +pages: "Halaman" +enableLocalTimeline: "Nyalakan linimasa lokal" +enableGlobalTimeline: "Nyalakan linimasa global" +disablingTimelinesInfo: "Admin dan Moderator akan selalu memiliki akses ke semua linimasa + meskipun linimasa tersebut tidak diaktifkan." +registration: "Pendaftaran" +enableRegistration: "Nyalakan pendaftaran pengguna baru" +invite: "Undang" +driveCapacityPerLocalAccount: "Kapasitas drive per pengguna lokal" +driveCapacityPerRemoteAccount: "Kapasitas drive per pengguna remote" +inMb: "dalam Megabytes" +iconUrl: "URL Gambar ikon" +bannerUrl: "URL Banner" +backgroundImageUrl: "URL Gambar latar" +basicInfo: "Informasi Umum" +pinnedUsers: "Pengguna yang disematkan" +pinnedUsersDescription: "Tuliskan satu nama pengguna dalam satu baris. Pengguna yang + dituliskan disini akan disematkan dalam bilah \"Jelajahi\"." +pinnedPages: "Halaman yang disematkan" +pinnedPagesDescription: "Masukkan jalur dari halaman yang kamu ingin sematkan ke halaman + utama dari server ini, dipisah dengan membuat baris baru." +pinnedClipId: "ID dari klip yang disematkan" +pinnedNotes: "Postingan tersemat" +hcaptcha: "hCaptcha" +enableHcaptcha: "Nyalakan hCaptcha" +hcaptchaSiteKey: "Site Key" +hcaptchaSecretKey: "Secret Key" +recaptcha: "reCAPTCHA" +enableRecaptcha: "Nyalakan reCAPTCHA" +recaptchaSiteKey: "Kunci situs" +recaptchaSecretKey: "Secret Key" +avoidMultiCaptchaConfirm: "Menggunakan banyak Captcha dapat menyebabkan gangguan. + Apakah kamu ingin untuk menonaktifkan Captcha yang lain? Kamu dapat membiarkan fitur + ini tetap aktif dengan menekan tombol batal." +antennas: "Antena" +manageAntennas: "Pengelola Antena" +name: "Nama" +antennaSource: "Sumber Antenna" +antennaKeywords: "Kata kunci yang diterima" +antennaExcludeKeywords: "Kata kunci yang dikecualikan" +antennaKeywordsDescription: "Pisahkan dengan spasi untuk kondisi AND. Pisahkan dengan + baris baru untuk kondisi OR." +notifyAntenna: "Beri tahu tentang postingan baru" +withFileAntenna: "Hanya postingan dengan berkas" +enableServiceworker: "Aktifkan ServiceWorker" +antennaUsersDescription: "Tuliskan satu nama pengguna per baris" +caseSensitive: "Peka huruf besar dan huruf kecil" +withReplies: "Termasuk balasan" +connectedTo: "Akun yang mengikuti telah terhubung" +notesAndReplies: "Postingan dan balasan" +withFiles: "Media" +silence: "Bungkam" +silenceConfirm: "Apakah kamu yakin ingin membungkam pengguna ini?" +unsilence: "Hapus bungkam" +unsilenceConfirm: "Apakah kamu ingin untuk batal membungkam pengguna ini?" +popularUsers: "Pengguna populer" +recentlyUpdatedUsers: "Pengguna dengan aktivitas terkini" +recentlyRegisteredUsers: "Pengguna baru saja bergabung" +recentlyDiscoveredUsers: "Pengguna baru saja dilihat" +exploreUsersCount: "Terdapat {count} pengguna" +exploreFediverse: "Jelajahi Fediverse" +popularTags: "Tag populer" +userList: "Daftar" +about: "Informasi" +aboutFirefish: "Tentang Firefish" +administrator: "Admin" +token: "Token" +twoStepAuthentication: "Otentikasi dua faktor" +moderator: "Moderator" +nUsersMentioned: "{n} pengguna disebut" +securityKey: "Kunci keamanan" +securityKeyName: "Nama kunci" +registerSecurityKey: "Daftarkan kunci keamanan" +lastUsed: "Terakhir digunakan" +unregister: "Batalkan pendaftaran" +passwordLessLogin: "Masuk tanpa kata sandi" +resetPassword: "Atur ulang kata sandi" +newPasswordIs: "Kata sandi baru adalah \"{password}\"" +reduceUiAnimation: "Kurangi animasi antarmuka" +share: "Bagikan" +notFound: "Tidak dapat ditemukan" +notFoundDescription: "Tidak ada halaman sesuai dengan URL yang ditentukan." +uploadFolder: "Lokasi unggah folder bawaan" +cacheClear: "Bersihkan tembolok" +markAsReadAllNotifications: "Tandai semua pemberitahuan sudah dibaca" +markAsReadAllUnreadNotes: "Tandai semua postingan sudah dibaca" +markAsReadAllTalkMessages: "Tandai semua pesan sudah dibaca" +help: "Bantuan" +inputMessageHere: "Ketik pesan disini" +close: "Tutup" +group: "Grup" +groups: "Grup" +createGroup: "Buat grup" +ownedGroups: "Grup yang dimiliki" +joinedGroups: "Grup yang diikuti" +invites: "Undang" +groupName: "Nama grup" +members: "Anggota" +transfer: "Transfer" +messagingWithUser: "Obrolan dengan pengguna lain" +messagingWithGroup: "Obrolan di dalam grup" +title: "Judul" +text: "Teks" +enable: "Aktifkan" +next: "Selanjutnya" +retype: "Masukkan ulang" +noteOf: "Diposting oleh {user}" +inviteToGroup: "Undang ke grup" +quoteAttached: "Dikutip" +quoteQuestion: "Apakah kamu ingin menambahkan kutipan?" +noMessagesYet: "Tidak ada pesan" +newMessageExists: "Kamu mendapatkan pesan baru" +onlyOneFileCanBeAttached: "Kamu hanya dapat melampirkan satu berkas ke dalam pesan" +signinRequired: "Silahkan login" +invitations: "Undang" +invitationCode: "Kode undangan" +checking: "Memeriksa..." +available: "Tersedia" +unavailable: "Tidak tersedia" +usernameInvalidFormat: "Hanya dapat menerima karakter a-z, A-Z dan angka 0-9." +tooShort: "Terlalu pendek" +tooLong: "Terlalu panjang" +weakPassword: "Kata sandi lemah" +normalPassword: "Kata sandi sedang" +veryStrongPassword: "Kata sandi kuat" +passwordMatched: "Kata sandi sama" +passwordNotMatched: "Kata sandi tidak sama" +signinWith: "Masuk dengan {x}" +signinFailed: "Tidak dapat masuk. Nama pengguna atau kata sandi yang kamu masukkan + salah." +tapSecurityKey: "Ketuk kunci keamanan kamu" +or: "atau" +language: "Bahasa" +uiLanguage: "Bahasa antarmuka pengguna" +groupInvited: "Telah diundang ke grup" +aboutX: "Tentang {x}" +useOsNativeEmojis: "Gunakan Emoji bawaan sistem operasi" +disableDrawer: "Jangan gunakan menu bergaya laci" +youHaveNoGroups: "Kamu tidak memiliki grup" +joinOrCreateGroup: "Bergabunglah dengan grup atau kamu dapat membuat grupmu sendiri." +noHistory: "Tidak ada riwayat" +signinHistory: "Riwayat masuk" +disableAnimatedMfm: "Nonaktifkan MFM dengan animasi" +doing: "Sedang berkerja..." +category: "Kategori" +tags: "Tag" +docSource: "Sumber dari dokumen ini" +createAccount: "Buat akun" +existingAccount: "Akun yang ada" +regenerate: "Buat ulang" +fontSize: "Ukuran huruf" +noFollowRequests: "Kamu tidak memiliki permintaan mengikuti yang menunggu" +openImageInNewTab: "Buka gambar di tab baru" +dashboard: "Dasbor" +local: "Lokal" +remote: "Luar" +total: "Jumlah" +weekOverWeekChanges: "Mingguan" +dayOverDayChanges: "Harian" +appearance: "Tampilan" +clientSettings: "Pengaturan Klien" +accountSettings: "Pengaturan Akun" +promotion: "Promosi" +promote: "Promosikan" +numberOfDays: "Jumlah hari" +hideThisNote: "Sembunyikan postingan ini" +showFeaturedNotesInTimeline: "Tampilkan postingan yang diunggulkan di linimasa" +objectStorage: "Penyimpanan Objek" +useObjectStorage: "Gunakan object storage" +objectStorageBaseUrl: "URL Dasar" +objectStorageBaseUrlDesc: "URL dipakai sebagai referensi. Tentukan URL CDN atau Proksimu + jika kamu menggunakan salah satunya.\nUntuk S3 gunakan 'https://.s3.amazonaws.com' + dan GCS atau layanan serupa gunakan 'https://storage.googleapis.com/', dll." +objectStorageBucket: "Ember" +objectStorageBucketDesc: "Mohon tentukan nama bucket yang digunakan pada layanan yang + telah dikonfigurasi." +objectStoragePrefix: "Prefix" +objectStoragePrefixDesc: "Berkas tidak akan disimpan dalam direktori dari prefix ini." +objectStorageEndpoint: "Titik akhir" +objectStorageEndpointDesc: "Kosongkan bagian ini jika kamu menggunakan AWS S3, jika + tidak tentukan endpoint sebagai '' atau ':' sesuai dengan panduan + dari layanan yang akan kamu gunakan." +objectStorageRegion: "Region" +objectStorageRegionDesc: "Tentukan region seperti 'xx-east-1'. Jika layanan kamu tidak + memiliki perbedaan mengenai region, kosongkan saja atau isi dengan 'us-east-1'." +objectStorageUseSSL: "Gunakan SSL" +objectStorageUseSSLDesc: "Matikan ini jika kamu tidak akan menggunakan HTTPS untuk + koneksi API" +objectStorageUseProxy: "Hubungkan melalui Proxy" +objectStorageUseProxyDesc: "Matikan ini jika kamu tidak akan menggunakan Proxy untuk + koneksi ObjectStorage" +objectStorageSetPublicRead: "Setel \"public-read\" disaat mengunggah" +serverLogs: "Log Peladen" +deleteAll: "Hapus semua" +showFixedPostForm: "Tampilkan formulir posting di atas linimasa" +newNoteRecived: "Ada postingan baru" +sounds: "Bunyi" +listen: "Dengarkan" +none: "Tidak ada" +showInPage: "Tampilkan di halaman" +popout: "Sembulan" +volume: "Volume" +masterVolume: "Master volume" +details: "Selengkapnya" +chooseEmoji: "Pilih emoji" +unableToProcess: "Tindakan tersebut tidak dapat diselesaikan" +recentUsed: "Baru saja digunakan" +install: "Pasang" +uninstall: "Copot pemasangan" +installedApps: "Aplikasi yang diijinkan" +nothing: "Tidak ada sama sekali disini" +installedDate: "Diijinkan" +lastUsedDate: "Terakhir digunakan" +state: "Kondisi" +sort: "Urutkan" +ascendingOrder: "Urutkan naik" +descendingOrder: "Urutkan menurun" +scratchpad: "Scratchpad" +scratchpadDescription: "Scratchpad menyediakan lingkungan eksperimen untuk AiScript. + Kamu bisa menulis, mengeksekusi, serta mengecek hasil yang berinteraksi dengan Firefish." +output: "Keluaran" +script: "Script" +disablePagesScript: "Nonaktifkan script pada halaman" +updateRemoteUser: "Perbaharui informasi pengguna luar" +deleteAllFiles: "Hapus semua berkas" +deleteAllFilesConfirm: "Apakah kamu yakin ingin menghapus semua berkas?" +removeAllFollowing: "Tahan semua mengikuti" +removeAllFollowingDescription: "Batal mengikuti semua akun dari {host}. Mohon jalankan + ini ketika server sudah tidak ada lagi." +userSuspended: "Pengguna ini telah dibekukan." +userSilenced: "Pengguna ini telah dibungkam." +yourAccountSuspendedTitle: "Akun ini dibekukan" +yourAccountSuspendedDescription: "Akun ini dibekukan karena melanggar ketentuan penggunaan + layanan peladen atau semacamnya. Hubungi admin apabila ingin tahu alasan lebih lanjut. + Mohon untuk tidak membuat akun baru." +menu: "Menu" +divider: "Pembagi" +addItem: "Tambahkan item" +relays: "Relay" +addRelay: "Tambahkan relay" +inboxUrl: "URL Kotak masuk" +addedRelays: "Relay yang ditambahkan" +serviceworkerInfo: "Harus diaktifkan untuk pemberitahuan push." +deletedNote: "Postingan yang dihapus" +invisibleNote: "Postingan tidak terlihat" +enableInfiniteScroll: "Aktifkan gulir tak terbatas" +visibility: "Visibilitas" +poll: "Angket" +useCw: "Sembunyikan konten" +enablePlayer: "Buka pemutar video" +disablePlayer: "Tutup pemutar video" +expandTweet: "Perluas utas" +themeEditor: "Penyunting tema" +description: "Deskripsi" +describeFile: "Tambahkan deskripsi" +enterFileDescription: "Masukkan deskripsi" +author: "Pembuat" +leaveConfirm: "Ada perubahan yang belum disimpan. Apakah kamu ingin membuangnya?" +manage: "Manajemen" +plugins: "Plugin" +deck: "Dek" +undeck: "Keluar dari dek" +useBlurEffectForModal: "Gunakan efek buram untuk modal" +useFullReactionPicker: "Gunakan pemilih reaksi ukuran penuh" +width: "Lebar" +height: "Tinggi" +large: "Besar" +medium: "Sedang" +small: "Kecil" +generateAccessToken: "Buat access token" +permission: "Izin" +enableAll: "Aktifkan semua" +disableAll: "Nonaktifkan semua" +tokenRequested: "Berikan ijin akses ke akun" +pluginTokenRequestedDescription: "Plugin ini dapat menggunakan setelan ijin disini." +notificationType: "Jenis pemberitahuan" +edit: "Sunting" +emailServer: "Peladen surel" +enableEmail: "Nyalakan distribusi surel" +emailConfigInfo: "Digunakan untuk mengonfirmasi surel kamu disaat mendaftar dan lupa + kata sandi" +email: "Surel" +emailAddress: "Alamat surel" +smtpConfig: "Konfigurasi peladen SMTP" +smtpHost: "Host" +smtpPort: "Port" +smtpUser: "Nama Pengguna" +smtpPass: "Kata sandi" +emptyToDisableSmtpAuth: "Kosongkan nama pengguna dan kata sandi untuk menonaktifkan + verifikasi SMTP" +smtpSecure: "Gunakan SSL/TLS implisit untuk koneksi SMTP" +smtpSecureInfo: "Matikan ini ketika menggunakan STARTTLS" +testEmail: "Tes pengiriman surel" +wordMute: "Bisukan kata dan bahasa" +regexpError: "Kesalahan ekspresi reguler" +regexpErrorDescription: "Galat terjadi pada baris {line} ekspresi reguler dari {tab} + kata yang dibisukan:" +instanceMute: "Server Dibisukan" +userSaysSomething: "{name} mengatakan sesuatu" +makeActive: "Aktifkan" +display: "Tampilkan" +copy: "Salin" +metrics: "Metrik" +overview: "Ikhtisar" +logs: "Log" +delayed: "Terlambat" +database: "Basis data" +channel: "Kanal" +create: "Buat" +notificationSetting: "Pengaturan Pemberitahuan" +notificationSettingDesc: "Pilih tipe pemberitahuan untuk ditampilkan." +useGlobalSetting: "Gunakan setelan global" +useGlobalSettingDesc: "Jika dinyalakan, setelan pemberitahuan akun kamu akan digunakan. + Jika dimatikan, konfigurasi secara individu dapat dibuat." +other: "Lainnya" +regenerateLoginToken: "Perbarui token masuk" +regenerateLoginTokenDescription: "Perbarui token yang digunakan secara internal saat + masuk ke akun. Normalnya aksi ini tidak diperlukan. Jika diperbarui, semua perangkat + akan dikeluarkan dari akun." +setMultipleBySeparatingWithSpace: "Kamu dapat menyetel banyak dengan memisahkannya + menggunakan spasi." +fileIdOrUrl: "File-ID atau URL" +behavior: "Perilaku" +sample: "Contoh" +abuseReports: "Laporkan" +reportAbuse: "Laporkan" +reportAbuseOf: "Laporkan {name}" +fillAbuseReportDescription: "Mohon isi rincian laporan. Jika laporan ini mengenai + postingan yang spesifik, mohon lampirkan serta URL postingan tersebut." +abuseReported: "Laporan kamu telah dikirimkan. Terima kasih." +reporter: "Pelapor" +reporteeOrigin: "Yang dilaporkan" +reporterOrigin: "Pelapor" +forwardReport: "Teruskan laporan ke server luar" +forwardReportIsAnonymous: "Untuk melindungi privasi akun kamu, akun anonim dari sistem + akan digunakan sebagai pelapor pada server luar." +send: "Kirim" +abuseMarkAsResolved: "Tandai laporan sebagai selesai" +openInNewTab: "Buka di tab baru" +openInSideView: "Buka di tampilan samping" +defaultNavigationBehaviour: "Navigasi bawaan" +editTheseSettingsMayBreakAccount: "Menyunting pengaturan ini memiliki kemungkinan + untuk merusak akun kamu." +instanceTicker: "Informasi server postingan" +waitingFor: "Menunggu untuk {x}" +random: "Acak" +system: "Sistem" +switchUi: "Tata letak" +desktop: "Desktop" +clip: "Klip" +createNew: "Buat baru" +optional: "Opsional" +createNewClip: "Buat klip baru" +unclip: "Batalkan klip" +confirmToUnclipAlreadyClippedNote: "Postingan ini sudah disertakan di klip \"{name}\"\ + . Yakin ingin menghapus postingan dari klip ini?" +public: "Publik" +i18nInfo: "Firefish diterjemahkan ke dalam banyak bahasa oleh sukarelawan. Kamu dapat + ikut membantu di {link}." +manageAccessTokens: "Kelola access token" +accountInfo: "Informasi akun" +notesCount: "Jumlah postingan" +repliesCount: "Jumlah balasan terkirim" +renotesCount: "Jumlah postingan ulang terkirim" +repliedCount: "Jumlah balasan diterima" +renotedCount: "Jumlah postingan ulang diterima" +followingCount: "Jumlah akun yang diikuti" +followersCount: "Jumlah pengikut" +sentReactionsCount: "Jumlah reaksi yang terkirim" +receivedReactionsCount: "Jumlah reaksi yang diterima" +pollVotesCount: "Jumlah suara yang terkirim" +pollVotedCount: "Jumlah suara yang diterima dalam angket" +yes: "Iya" +no: "Tidak" +driveFilesCount: "Jumlah berkas drive" +driveUsage: "Penggunaan ruang penyimpanan drive" +noCrawle: "Tolak pengindeksan crawler" +noCrawleDescription: "Minta mesin pencari eksternal untuk tidak mengindeks kontenmu." +lockedAccountInfo: "Kecuali kamu mengatur visibilitas postingan milikmu ke \"Hanya + pengikut\", postingan milikmu akan dapat dilihat oleh siapa saja, bahkan jika kamu + memerlukan pengikut untuk disetujui secara manual." +alwaysMarkSensitive: "Tandai sebagai media sensitif secara bawaan" +loadRawImages: "Tampilkan lampiran gambar secara penuh daripada thumbnail" +disableShowingAnimatedImages: "Jangan mainkan gambar bergerak" +verificationEmailSent: "Surel verifikasi telah dikirimkan. Mohon akses tautan yang + telah disertakan untuk menyelesaikan verifikasi." +notSet: "Tidak disetel" +emailVerified: "Surel telah diverifikasi" +noteFavoritesCount: "Jumlah postingan yang dimarkah" +pageLikesCount: "Jumlah suka yang diterima Halaman" +pageLikedCount: "Jumlah Halaman yang disukai" +contact: "Kontak" +useSystemFont: "Gunakan font bawaan sistem operasi" +clips: "Klip" +experimentalFeatures: "Fitur eksperimental" +developer: "Pengembang" +makeExplorable: "Buat akun tampil di \"Jelajahi\"" +makeExplorableDescription: "Jika kamu menonaktifkan ini, akun kamu tidak akan muncul + di bagian \"Jelajahi\"." +showGapBetweenNotesInTimeline: "Tampilkan jarak diantara postingan pada linimasa" +duplicate: "Duplikat" +left: "Kiri" +center: "Tengah" +wide: "Lebar" +narrow: "Sempit" +reloadToApplySetting: "Pengaturan ini akan diterapkan saat memuat halaman kembali. + Apakah kamu ingin memuat halaman kembali sekarang?" +needReloadToApply: "Pengaturan ini hanya akan diterapkan setelah memuat ulang halaman." +showTitlebar: "Tampilkan bilah judul" +clearCache: "Hapus tembolok" +onlineUsersCount: "{n} orang sedang daring" +nUsers: "{n} Pengguna" +nNotes: "{n} Postingan" +sendErrorReports: "Kirim laporan kesalahan" +sendErrorReportsDescription: "Ketika diaktifkan, informasi kesalahan rinci akan dibagikan + dengan Firefish ketika masalah terjadi, hal ini untuk membantu kualitas Firefish.\n + Ini akan memuat informasi antara lain versi sistem operasi yang kamu gunakan, peramban + yang dipakai, riwayat aktivitas kamu di Firefish, dll." +myTheme: "Tema saya" +backgroundColor: "Latar Belakang" +accentColor: "Aksen" +textColor: "Teks" +saveAs: "Simpan sebagai…" +advanced: "Tingkat lanjut" +value: "Nilai" +createdAt: "Dibuat pada" +updatedAt: "Diperbarui pada" +saveConfirm: "Simpan perubahan?" +deleteConfirm: "Yakin hapus?" +invalidValue: "Nilai tidak valid." +registry: "Registri" +closeAccount: "Tutup akun" +currentVersion: "Versi saat ini" +latestVersion: "Versi terkini" +youAreRunningUpToDateClient: "Kamu menggunakan versi terkini dari klienmu." +newVersionOfClientAvailable: "Versi terbaru dari klien kamu telah tersedia." +usageAmount: "Penggunaan" +capacity: "Kapasitas" +inUse: "Digunakan" +editCode: "Sunting kode" +apply: "Terapkan" +receiveAnnouncementFromInstance: "Terima pemberitahuan dari server ini" +emailNotification: "Pemberitahuan surel" +publish: "Terbitkan" +inChannelSearch: "Cari di kanal" +useReactionPickerForContextMenu: "Buka pemilih reaksi dengan klik-kanan" +typingUsers: "{users} sedang mengetik" +jumpToSpecifiedDate: "Loncat ke tanggal spesifik" +showingPastTimeline: "Sedang menampilkan linimasa lama" +clear: "Bersihkan" +markAllAsRead: "Tandai semua sudah dibaca" +goBack: "Kembali" +unlikeConfirm: "Yakin ingin hapus sukamu?" +fullView: "Tampilan penuh" +quitFullView: "Keluar tampilan penuh" +addDescription: "Tambahkan deskripsi" +userPagePinTip: "Kamu dapat menampilkan postingan di sini dengan memilih \"Sematkan + ke profil\" dari menu pada sebuah postingan." +notSpecifiedMentionWarning: "Postingan ini mengandung sebutan dari pengguna yang tidak + disertakan sebagai penerima" +info: "Informasi" +userInfo: "Informasi pengguna" +unknown: "Tidak diketahui" +onlineStatus: "Status daring" +hideOnlineStatus: "Sembunyikan status daring" +hideOnlineStatusDescription: "Menyembunyikan status daring kamu umengurangi kenyamanan + untuk beberapa fungsi seperti contohnya pencarian." +online: "Daring" +active: "Aktif" +offline: "Luring" +notRecommended: "Tidak disarankan" +botProtection: "Perlindungan Bot" +instanceBlocking: "Pengelolaan Federasi" +selectAccount: "Pilih akun" +switchAccount: "Ganti akun" +enabled: "Aktif" +disabled: "Nonaktif" +quickAction: "Aksi cepat" +user: "Pengguna" +administration: "Manajemen" +accounts: "Akun" +switch: "Beralih" +noMaintainerInformationWarning: "Informasi pengelola belum disetel." +noBotProtectionWarning: "Proteksi bot belum disetel." +configure: "Setel" +postToGallery: "Posting ke galeri" +gallery: "Galeri" +recentPosts: "Postingan terbaru" +popularPosts: "Postingan populer" +shareWithNote: "Bagikan dengan postingan" +ads: "Spanduk komunitas" +expiration: "Batas akhir" +memo: "Memo" +priority: "Prioritas" +high: "Tinggi" +middle: "Sedang" +low: "Rendah" +emailNotConfiguredWarning: "Alamat surel tidak disetel." +ratio: "Rasio" +previewNoteText: "Tampilkan pratinjau" +customCss: "CSS khusus" +customCssWarn: "Pengaturan ini seharusnya digunakan jika kamu tahu cara kerjanya. + Memasukkan nilai yang tidak tepat dapat menyebabkan klien tidak berfungsi semestinya." +global: "Global" +squareAvatars: "Tampilkan avatar sebagai persegi untuk akun non-kucing" +sent: "Kirim" +received: "Diterima" +searchResult: "Hasil Penelusuran" +hashtags: "Tagar" +troubleshooting: "Penyelesaian Masalah" +useBlurEffect: "Gunakan efek blur pada antarmuka" +learnMore: "Pelajari lebih lanjut" +misskeyUpdated: "Firefish telah dimutakhirkan!" +whatIsNew: "Lihat perubahan pemutakhiran" +translate: "Terjemahkan" +translatedFrom: "Terjemahkan dari {x}" +accountDeletionInProgress: "Penghapusan akun sedang dalam proses" +usernameInfo: "Nama yang mengidentifikasikan akun kamu dari yang lain pada peladen + ini. Kamu dapat menggunakan alfabet (a~z, A~Z), digit (0~9) atau garis bawah (_). + Username tidak dapat diubah setelahnya." +aiChanMode: "Mode Ai" +keepCw: "Biarkan Peringatan Konten" +pubSub: "Akun Pub/Sub" +lastCommunication: "Komunikasi terakhir" +resolved: "Selesai" +unresolved: "Belum selesai" +breakFollow: "Batalkan mengikuti" +itsOn: "Aktif" +itsOff: "Nonaktif" +emailRequiredForSignup: "Membutuhkan alamat surel untuk mendaftar" +unread: "Belum dibaca" +filter: "Saring" +controlPanel: "Panel kendali" +manageAccounts: "Kelola Akun" +makeReactionsPublic: "Tampilkan riwayat reaksi ke publik" +makeReactionsPublicDescription: "Pengaturan ini akan membuat daftar dari semua reaksi + masa lalu kamu ditampilkan secara publik." +classic: "Tengah" +muteThread: "Bisukan thread" +unmuteThread: "Suarakan thread" +ffVisibility: "Visibilitas Mengikuti/Pengikut" +ffVisibilityDescription: "Mengatur siapa yang dapat melihat pengikutmu dan yang kamu + ikuti." +continueThread: "Lihat lanjutan utas" +deleteAccountConfirm: "Akun ini akan dihapus secara permanen. Lanjutkan?" +incorrectPassword: "Kata sandi salah." +voteConfirm: "Konfirmasi suara kamu untuk ({choice})?" +hide: "Sembunyikan" +leaveGroup: "Keluar grup" +leaveGroupConfirm: "Apakah kamu yakin untuk keluar dari \"{name}\"?" +useDrawerReactionPickerForMobile: "Tampilkan bilah reaksi sebagai laci di ponsel" +welcomeBackWithName: "Selamat datang kembali, {name}" +clickToFinishEmailVerification: "Mohon klik [{ok}] untuk menyelesaikan verifikasi + email." +overridedDeviceKind: "Tipe perangkat" +smartphone: "Ponsel" +tablet: "Tablet" +auto: "Otomatis" +themeColor: "Warna Jam Server" +size: "Ukuran" +numberOfColumn: "Jumlah per kolom" +instanceDefaultLightTheme: "Tema terang bawaan ranah server" +instanceDefaultDarkTheme: "Tema gelap bawaan ranah server" +instanceDefaultThemeDescription: "Masukkan kode tema di format obyek." +mutePeriod: "Batas waktu bisu" +indefinitely: "Selamanya" +tenMinutes: "10 Menit" +oneHour: "1 Jam" +oneDay: "1 Hari" +oneWeek: "1 Bulan" +reflectMayTakeTime: "Mungkin perlu beberapa saat untuk dicerminkan." +failedToFetchAccountInformation: "Gagal untuk mendapatkan informasi akun" +rateLimitExceeded: "Batas sudah terlampaui" +cropImage: "potong gambar" +cropImageAsk: "Ingin memotong gambar?" +file: "Berkas" +reverse: "Balik" +colored: "Diwarnai" +label: "Label" +localOnly: "Hanya lokal" +account: "Akun" +_emailUnavailable: + used: "Alamat surel ini telah digunakan" + format: "Format alamat surel ini tidak valid" + disposable: "Alamat surel temporer tidak dapat digunakan" + mx: "Peladen alamat surel ini tidak valid" + smtp: "Peladen alamat surel ini tidak merespon" +_ffVisibility: + public: "Terbitkan" + followers: "Tampil untuk pengikut saja" + private: "Tersembunyi" +_signup: + almostThere: "Hampir selesai" + emailAddressInfo: "Mohon masukkan alamat surel kamu." + emailSent: "Konfirmasi surel telah dikirimkan ke alamat surel kamu ({email}). Mohon + klik tautan yang tercantum di dalamnya untuk menyelesaikan pembuatan akun." +_accountDelete: + accountDelete: "Hapus akun" + mayTakeTime: "Karena penghapusan akun merupakan proses yang berat dan intensif, + kemungkinan dapat membutuhkan waktu untuk menyelesaikan tergantung daripada berapa + banyak konten yang kamu buat dan berapa banyak berkas yang telah kamu unggah." + sendEmail: "Setelah penghapusan akun selesai, pemberitahuan akan dikirimkan ke alamat + surel yang terdaftarkan pada akun ini." + requestAccountDelete: "Minta penghapusan akun" + started: "Penghapusan telah dimulai." + inProgress: "Penghapusan sedang dalam proses" +_ad: + back: "Kembali" + reduceFrequencyOfThisAd: "Tampilkan banner ini lebih sedikit" + adsBy: Banner komunitas oleh {by} +_forgotPassword: + enterEmail: "Masukkan alamat surel yang kamu gunakan pada saat mendaftar. Sebuah + tautan untuk mengatur ulang kata sandi kamu akan dikirimkan ke alamat surel tersebut." + ifNoEmail: "Apabila kamu tidak menggunakan surel pada saat pendaftaran, mohon hubungi + admin server segera." + contactAdmin: "Server ini tidak mendukung menggunakan alamat surel, mohon kontak + admin untuk mengatur ulang password kamu." +_gallery: + my: "Postingan saya" + liked: "Postingan yang disukai" + like: "Suka" + unlike: "Hapus suka" +_email: + _follow: + title: "Mengikuti kamu" + _receiveFollowRequest: + title: "Kamu menerima permintaan mengikuti" +_plugin: + install: "Memasang plugin" + installWarn: "Mohon jangan memasang plugin yang tidak dapat dipercayai." + manage: "Manajemen plugin" +_registry: + scope: "Lingkup" + key: "Kunci" + keys: "Kunci" + domain: "Domain" + createKey: "Buat kunci" +_aboutFirefish: + about: "Firefish adalah perangkat lunak sumber terbuka yang sedang dikembangkan + oleh syuilo sejak 2014." + contributors: "Kontributor utama" + allContributors: "Seluruh kontributor" + source: "Sumber kode" + translation: "Terjemahkan Firefish" + donate: "Donasi ke Firefish" + donateTitle: Suka Firefish? + pleaseDonateToFirefish: Silakan pertimbangkan berdonasi ke Firefish untuk mendukung + pengembangannya. + pleaseDonateToHost: Silakan pertimbangkan juga berdonasi ke server rumah kamu, {host}, + untuk membantu dengan biaya operasi. + donateHost: Berdonasi ke {host} + misskeyContributors: Kontributor Misskey +_nsfw: + respect: "Sembunyikan media NSFW" + ignore: "Jangan sembunyikan media NSFW" + force: "Sembunyikan semua media" +_mfm: + cheatSheet: "Contekan MFM" + intro: "MFM adalah Firefish-exclusive Markup Language yang dapat digunakan di banyak + tempat. Berikut kamu bisa melihat daftar dari syntax MFM yang ada." + dummy: "Firefish membentangkan dunia Fediverse" + mention: "Sebut" + mentionDescription: "Kamu dapat menentukan pengguna tertentu dengan menggunakan + simbol-At dan nama engguna mereka." + hashtag: "Tagar" + hashtagDescription: "Kamu dapat menentukan tagar dengan menggunakan angka dan teks." + url: "URL" + urlDescription: "URL dapat ditampilkan." + link: "Tautan" + linkDescription: "Bagian tertentu dari teks dapat ditampilka sebagai URL." + bold: "Tebal" + boldDescription: "Sorot tulisan dengan membuatnya tebal." + small: "Kecil" + smallDescription: "Tampilkan konten kecil dan tipis." + center: "Tengah" + centerDescription: "Tampilkan konten di tengah." + inlineCode: "Kode (Dalam baris)" + inlineCodeDescription: "Menampilkan sorotan sintaks dalam baris untuk kode(program-)." + blockCode: "Kode (Blok)" + blockCodeDescription: "Menampilkan sorotan sintaks untuk kode(program-) multi baris + dalam sebuah blok." + inlineMath: "Matematika (Dalam baris)" + inlineMathDescription: "Menampilkan formula matematika (KaTeX) dalam baris" + blockMath: "Matematika (Blok)" + blockMathDescription: "Tampilkan formula matematika (KaTeX) dalam blok" + quote: "Kutip" + quoteDescription: "Menampilkan konten sebagai kutipan." + emoji: "Emoji kustom" + emojiDescription: "Emoji kustom dapat ditampilkan dengan mengurung nama emoji kustom + menggunakan tanda titik dua." + search: "Penelusuran" + searchDescription: "Menampilkan kotak pencarian dengan teks yang sudah dimasukkan." + flip: "Balik" + flipDescription: "Balikkan konten secara horizontal atau vertikal." + jelly: "Animasi (Jelly)" + jellyDescription: "Beri konten dengan animasi seperti jeli." + tada: "Animasi (Tada)" + tadaDescription: "Menerapkan animasi seperti \"Kejutan!\"." + jump: "Animasi (Loncat)" + jumpDescription: "Menerapkan animasi melompat." + bounce: "Animasi (Melambung)" + bounceDescription: "Menerapkan animasi melambung." + shake: "Animasi (Goyang)" + shakeDescription: "Menerapkan animasi bergoyang." + twitch: "Animasi (Cubit)" + twitchDescription: "Terapkan animasi cubit yang kuat." + spin: "Animasi (Putar)" + spinDescription: "Terapkan animasi putar." + x2: "Besar" + x2Description: "Tampilkan konten menjadi besar." + x3: "Lebih besar" + x3Description: "Tampilkan konten menjadi lebih besar." + x4: "Sangat besar" + x4Description: "Tampilka konten menjadi sangat besar." + blur: "Buram" + blurDescription: "Konten dapat diburamkan dengan efek ini. Konten dapat ditampilkan + dengan jelas dengan melayangkan kursor tetikus di atasnya." + font: "Font" + fontDescription: "Setel font yang ditampilkan untuk konten." + rainbow: "Pelangi" + rainbowDescription: "Membuat konten muncul dalam warna pelangi." + sparkle: "Kelap-kelip" + sparkleDescription: "Memberikan konten efek partikel kelap-kelip." + rotate: "Putar" + rotateDescription: "Putar konten sesuai sudut yang ditentukan." + play: Mainkan MFM + stop: Hentikan MFM + warn: MFM dapat berisi animasi yang sangat cepat + advanced: MFM tingkat lanjut + foreground: Warna latar depan + foregroundDescription: Ubah warna depan teks. + backgroundDescription: Ubah warna latar belakang teks. + plainDescription: Menonaktifkan efek dari semua MFM dalam efek MFM ini. + crop: Pangkas + alwaysPlay: Selalu mainkan MFM beranimasi secara otomatis + advancedDescription: Jika dinonaktifkan, hanya memperbolehkan markup dasar kecuali + jika MFM beranimasi dimainkan + positionDescription: Gerakkan konten dengan jumlah yang ditentukan. + scale: Skala + cropDescription: Pangkas konten. + background: Warna latar belakang + plain: Biasa + position: Posisi + scaleDescription: Ubah skala konten dengan jumlah yang ditentukan. + fade: Memudar + fadeDescription: Memudar konten. +_instanceTicker: + none: "Jangan tampilkan" + remote: "Tampilkan untuk pengguna luar" + always: "Selalu tampilkan" +_serverDisconnectedBehavior: + reload: "Muat ulang otomatis" + dialog: "Tampilkan dialog peringatan" + quiet: "Tampilkan peringatan tidak mengganggu" + nothing: Jangan lakukan apa pun +_channel: + create: "Buat saluran" + edit: "Sunting saluran" + setBanner: "Setel banner" + removeBanner: "Hapus banner" + featured: "Tren" + owned: "Dimiliki" + following: "Mengikuti" + usersCount: "{n} Partisipan" + notesCount: "{n} Postingan" + nameOnly: Nama saja + nameAndDescription: Nama dan deskripsi +_menuDisplay: + sideFull: "Horisontal" + sideIcon: "Horisontal (Ikon)" + top: "Atas" + hide: "Sembunyikan" +_wordMute: + muteWords: "Kata yang dibisukan" + muteWordsDescription: "Pisahkan dengan spasi untuk kondisi AND. Pisahkan dengan + baris baru untuk kondisi OR." + muteWordsDescription2: "Kurung kata kunci dengan garis miring untuk menggunakan + regular expressions." + softDescription: "Sembunyikan postingan yang memenuhi aturan kondisi dari lini masa." + hardDescription: "Cegah postingan memenuhi aturan kondisi dari ditambahkan ke lini + masa. Dengan tambahan, postingan berikut tidak akan ditambahkan ke lini masa meskipun + jika kondisi tersebut diubah." + soft: "Lembut" + hard: "Keras" + mutedNotes: "Postingan yang dibisukan" + muteLangsDescription2: Gunakan kode bahasa misalnya en, fr, ja, zh. + lang: Bahasa + langDescription: Sembunyikan postingan yang cocok dengan bahasa yang ditetapkan + dari timeline. + muteLangs: Bahasa yang dibisukan + muteLangsDescription: Pisahkan dengan spasi atau jeda baris untuk kondisi ATAU. + mutePatterns: Pola yang dibisukan +_instanceMute: + instanceMuteDescription: "Pengaturan ini akan membisukan postingan/pembagian apa + saja dari server yang terdaftar, termasuk pengguna yang membalas pengguna lain + dalam server yang dibisukan." + instanceMuteDescription2: "Pisah dengan baris baru" + title: "Sembunyikan note dari server terdaftar." + heading: "Daftar server yang akan dibisukan" +_theme: + explore: "Jelajahi tema" + install: "Pasang tema" + manage: "Manajer tema" + code: "Kode tema" + description: "Deskripsi" + installed: "{name} telah dipasang" + installedThemes: "Tema yang dipasang" + builtinThemes: "Tema bawaan" + alreadyInstalled: "Tema telah dipasang" + invalid: "Format tema tidak valid" + make: "Buat tema" + base: "Dasar" + addConstant: "Tambah konstanta" + constant: "Konstanta" + defaultValue: "Nilai bawaan" + color: "Warna" + refProp: "Referensikan properti" + refConst: "Referensikan konstanta" + key: "Kunci" + func: "Fungsi" + funcKind: "Tipe fungsi" + argument: "Argumen" + basedProp: "Mereferensikan properti" + alpha: "Opasitas" + darken: "Mengelamkan" + lighten: "Menerangkan" + inputConstantName: "Masukkan nama untuk konstanta" + importInfo: "Jika kamu memasukkan kode tema disini, kamu dapat mengimpornya ke penyunting + tema" + deleteConstantConfirm: "apakah kamu ingin menghapus konstanta {const}?" + keys: + accent: "Aksen" + bg: "Latar belakang" + fg: "Teks" + focus: "Fokus" + indicator: "Indikator" + panel: "Panel" + shadow: "Bayangan" + header: "Tajuk" + navBg: "Latar belakang bilah samping" + navFg: "Teks bilah samping" + navHoverFg: "Teks bilah samping (Mengambang)" + navActive: "Teks bilah samping (Aktif)" + navIndicator: "Indikator bilah samping" + link: "Tautan" + hashtag: "Tagar" + mention: "Sebut" + mentionMe: "Sebutan (saya)" + renote: "Bagikan" + modalBg: "Latar belakang modal" + divider: "Pembagi" + scrollbarHandle: "Pegangan bilah gulir" + scrollbarHandleHover: "Pegangan bilah gulir (Mengambang)" + dateLabelFg: "Teks label tanggal" + infoBg: "Latar belakang informasi" + infoFg: "Teks informasi" + infoWarnBg: "Latar belakang peringatan" + infoWarnFg: "Teks peringatan" + cwBg: "Latar belakang tombol Sembunyikan Konten" + cwFg: "Teks tombol Sembunyikan Konten" + cwHoverBg: "Latar belakang tombol Sembunyikan Konten (Mengambang)" + toastBg: "Latar belakang pemberitahuan" + toastFg: "Teks pemberitahuan" + buttonBg: "Latar belakang tombol" + buttonHoverBg: "Latar belakang tombol (Mengambang)" + inputBorder: "Batas bidang masukan" + listItemHoverBg: "Latar belakang daftar item (Mengambang)" + driveFolderBg: "Latar belakang folder drive" + wallpaperOverlay: "Lapisan wallpaper" + badge: "Lencana" + messageBg: "Latar belakang obrolan" + accentDarken: "Aksen (Gelap)" + accentLighten: "Aksen (Terang)" + fgHighlighted: "Teks yang disorot" +_sfx: + note: "Postingan baru" + noteMy: "Postingan sendiri" + notification: "Pemberitahuan" + chat: "Pesan" + chatBg: "Obrolan (Latar Belakang)" + antenna: "Penerimaan Antenna" + channel: "Pemberitahuan saluran" +_ago: + future: "masa depan" + justNow: "baru saja" + secondsAgo: "{n} detik lalu" + minutesAgo: "{n} menit lalu" + hoursAgo: "{n} jam lalu" + daysAgo: "{n} hari lalu" + weeksAgo: "{n} minggu lalu" + monthsAgo: "{n} bulan lalu" + yearsAgo: "{n} tahun lalu" +_time: + second: "detik" + minute: "menit" + hour: "jam" + day: "hari" +_tutorial: + title: "Cara menggunakan Firefish" + step1_1: "Selamat datang!" + step1_2: "Ayo siapkan. Lekas mulai tanpa basa-basi!" + step1_3: "Linimasa kamu kosong, karena kamu belum mencatat catatan apapun atau mengikuti + siapapun." + step2_1: "Pertama, isi profilmu lebih dahulu." + step2_2: "Menyediakan beberapa informasi tentang siapa kamu akan membuatnya lebih + mudah bagi orang lain untuk menentukan jika mereka ingin postinganmu atau mengikutimu." + step3_1: "Sekarang saatnya mengikuti beberapa orang!" + step3_2: "Lini masa beranda dan sosial berdasarkan siapa yang kamu ikuti, jadi coba + ikuti beberapa akun untuk memulai.\nKlik lingkaran plus pada pojok kanan atas + pada profil untuk mengikuti mereka." + step3_3: "Isilah di dalam modal dan tekan tombol pada atas kanan untuk memcatat + catatan kamu." + step3_4: "Bingung tidak berpikiran untuk mengatakan sesuatu? Coba saja \"baru aja + ikutan bikin akun misskey punyaku\"!" + step4_1: "Mari kita lihat kamu di sana." + step4_2: "Untuk postingan pertama kamu, beberapa orang biasanya membuat postingan + {introduction} atau \"Halo dunia!\" yang sederhana." + step5_1: "Linimasa, linimasa di mana-mana!" + step5_2: "Servermu memiliki {timelines} lini masa berbeda yang diaktifkan." + step5_3: "Lini masa Beranda {icon} adalah tempat kamu bisa melihat postingan dari + akun yang kamu ikuti." + step5_4: "Linimasa Lokal {icon} adalah tempat kamu dapat melihat postingan dari + siapa pun di server ini." + step6_1: "Jadi, tempat apa ini?" + step6_2: "Ya, kamu tidak saja bergabung ke Firefish. Kamu telah bergabung ke sebuah + portal ke Fediverse, sebuah jaringan ribuan server yang saling berhubungan." + step6_3: "Setiap server bekerja dalam berbagai cara, dan tidak semua server menjalankan + Firefish. Ini salah satunya! Mungkin sedikit sulit, tetapi lama-lama kamu akan + mengerti." + step7_1: "Yay, Selamat! Kamu sudah menyelesaikan tutorial dasar Firefish." + step7_2: "Jika kamu ingin mempelajari lebih lanjut tentang Firefish, cobalah berkunjung + ke bagian {help}." + step7_3: "Semoga berhasil dan bersenang-senanglah! 🚀" + step5_6: Linimasa Rekomendasi {icon} adalah tempat kamu dapat melihat postingan + dari server yang direkomendasikan admin. + step6_4: Sekarang pergilah, bereksplorasi, dan senang-senang! + step5_5: Lini masa Sosial {icon} adalah kombinasi antara lini masa Beranda dan Lokal. + step5_7: Linimasa Global {icon} adalah tempat kamu dapat melihat postingan orang-orang + dari server yang terkoneksi. +_2fa: + alreadyRegistered: "Kamu telah mendaftarkan perangkat otentikasi dua faktor." + registerTOTP: "Daftarkan perangkat baru" + registerSecurityKey: "Daftarkan kunci keamanan baru" + step1: "Pertama, pasang aplikasi otentikasi (seperti {a} atau {b}) di perangkat + kamu." + step2: "Lalu, pindai kode QR yang ada di layar." + step2Url: "Di aplikasi desktop, masukkan URL berikut:" + step3: "Masukkan token yang telah disediakan oleh aplikasimu untuk menyelesaikan + pemasangan." + step4: "Mulai sekarang, upaya pemasukan akun apa pun akan meminta token masuk dari + aplikasi autentikasi kamu." + securityKeyInfo: "Kamu dapat memasang otentikasi WebAuthN untuk mengamankan proses + login lebih lanjut dengan tidak hanya perangkat keras kunci keamanan yang mendukung + FIDO2, namun juga sidik jari atau otentikasi PIN pada perangkatmu." + token: Token 2FA + chromePasskeyNotSupported: Kunci pas Chrome saat ini tidak didukung. + securityKeyName: Masukkan nama kunci + removeKey: Hapus kunci keamanan + step2Click: Mengklik kode QR ini akan mengizinkanmu mendaftarkan 2FA untuk kunci + keamanan atau apl ontentikasi ponsel. + step3Title: Masukkan kode otentikasi + securityKeyNotSupported: Perambanmu tidak mendukung kunci keamanan. + tapSecurityKey: Silakan ikuti perambanmu untuk mendaftarkan kunci keamanan atau + kunci pas + removeKeyConfirm: Yakin menghapus kunci {name}? +_permissions: + "read:account": "Lihat informasi akun" + "write:account": "Sunting informasi akun" + "read:blocks": "Lihat daftar orang yang diblokir" + "write:blocks": "Sunting daftar orang yang diblokir" + "read:drive": "Akses berkas dan folder drive" + "write:drive": "Sunting atau hapus berkas dan folder drive" + "read:favorites": "Lihat daftar favorit" + "write:favorites": "Sunting daftar favorit" + "read:following": "Lihat informasi mengikuti" + "write:following": "Ikuti atau Stop Ikuti akun lain" + "read:messaging": "Lihat obrolan" + "write:messaging": "Buat atau hapus obrolan" + "read:mutes": "Lihat daftar orang yang dibisukan" + "write:mutes": "Sunting daftar orang yang dibisukan" + "write:notes": "Buat atau hapus postingan" + "read:notifications": "Lihat pemberitahuan" + "write:notifications": "Sunting pemberitahuan" + "read:reactions": "Lihat reaksi" + "write:reactions": "Sunting reaksi" + "write:votes": "Beri suara" + "read:pages": "Lihat halaman" + "write:pages": "Sunting atau hapus halaman" + "read:page-likes": "Lihat suka pada halaman" + "write:page-likes": "Sunting suka pada Halaman" + "read:user-groups": "Lihat grup pengguna" + "write:user-groups": "Sunting atau hapus grup pengguna" + "read:channels": "Lihat saluran" + "write:channels": "Sunting saluran" + "read:gallery": "Lihat galeri" + "write:gallery": "Sunting galeri" + "read:gallery-likes": "Lihat daftar postingan galeri yang disukai" + "write:gallery-likes": "Sunting daftar postingan galeri yang disukai" +_auth: + shareAccess: "Apakah kamu ingin mengijinkan \"{name}\" untuk mengakses akun ini?" + shareAccessAsk: "Apakah kamu ingin mengijinkan aplikasi ini untuk mengakses akun + kamu?" + permissionAsk: "Aplikasi ini membutuhkan izin berikut:" + pleaseGoBack: "Mohon kembali ke aplikasi kamu" + callback: "Mengembalikan kamu ke aplikasi" + denied: "Akses ditolak" + copyAsk: 'Harap tempel kode otorisasi berikut ke aplikasi:' + allPermissions: Akses akun penuh +_antennaSources: + all: "Semua postingan" + homeTimeline: "Postingan dari pengguna yang diikuti" + users: "Postingan dari pengguna tertentu" + userList: "Postingan dari daftar tertentu" + userGroup: "Postingan dari pengguna dalam grup yang ditentukan" + instances: Postingan dari semua pengguna di server +_weekday: + sunday: "Minggu" + monday: "Senin" + tuesday: "Selasa" + wednesday: "Rabu" + thursday: "Kamis" + friday: "Jumat" + saturday: "Sabtu" +_widgets: + memo: "Catatan Tempel" + notifications: "Pemberitahuan" + timeline: "Linimasa" + calendar: "Kalender" + trends: "Tren" + clock: "Jam" + rss: "Pembaca RSS" + activity: "Aktivitas" + photos: "Foto" + digitalClock: "Jam Digital" + federation: "Federasi" + postForm: "Formulir Posting" + slideshow: "Slideshow" + button: "Tombol" + onlineUsers: "Pengguna Daring" + jobQueue: "Antrian kerja" + serverMetric: "Metrik Server" + aiscript: "Konsol AiScript" + aichan: "Ai" + rssTicker: Telegraf RSS + userList: Daftar Pengguna + instanceCloud: Server Awan + unixClock: Jam UNIX + _userList: + chooseList: Pilih daftar + serverInfo: Info Server +_cw: + hide: "Sembunyikan" + show: "Lihat konten" + chars: "{count} karakter" + files: "{count} berkas" +_poll: + noOnlyOneChoice: "Dibutuhkan sedikitnya dua pilihan" + choiceN: "Pilihan {n}" + noMore: "Kamu tidak dapat menambahkan pilihan lagi" + canMultipleVote: "Bolehkan memilih banyak" + expiration: "Batas akhir" + infinite: "Selamanya" + at: "Berakhir pada..." + after: "Berakhir setelah..." + deadlineDate: "Tanggal batas akhir" + deadlineTime: "jam" + duration: "Durasi" + votesCount: "{n} suara" + totalVotes: "Total {n} suara" + vote: "Beri suara" + showResult: "Lihat hasil" + voted: "Telah memilih" + closed: "Telah berakhir" + remainingDays: "Berakhir dalam {d} hari {h} jam" + remainingHours: "Berakhir dalam {h} jam {m} menit" + remainingMinutes: "Berakhir dalam {m} menit {s} detik" + remainingSeconds: "Berakhir dalam {s} detik" +_visibility: + public: "Publik" + publicDescription: "Postinganmu akan terlihat di semua linimasa publik" + home: "Tidak terdaftar" + homeDescription: "Posting ke lini masa beranda saja" + followers: "Pengikut" + followersDescription: "Tampilkan ke pengikut dan pengguna yang disebut saja" + specified: "Langsung" + specifiedDescription: "Catat ke pengguna yang ditentukan saja" + localOnly: "Hanya lokal" + localOnlyDescription: "Hanya dapat dilihat di instansi lokal" +_postForm: + replyPlaceholder: "Balas ke postingan ini..." + quotePlaceholder: "Kutip postingan ini..." + channelPlaceholder: "Posting ke kanal..." + _placeholders: + a: "Sedang apa kamu saat ini?" + b: "Apa yang terjadi di sekitarmu?" + c: "Apa yang sedang kamu pikirkan?" + d: "Yang ingin kamu sampaikan?" + e: "Tuliskan yang kamu ingin sampaikan..." + f: "Menunggu kamu untuk menulis...." +_profile: + name: "Nama" + username: "Nama Pengguna" + description: "Bio" + youCanIncludeHashtags: "Kamu juga dapat menambahkan tagar ke dalam bio." + metadata: "Informasi tambahan" + metadataEdit: "Sunting informasi tambahan" + metadataDescription: "Kamu dapat menampilkan hingga 4 bagian informasi tambahan + ke dalam profilmu. Kamu bisa menambahkan tag {a} atau tag {l} dengan {rel} untuk + memverifikasi tautan di profil kamu!" + metadataLabel: "Label" + metadataContent: "Isi" + changeAvatar: "Ubah avatar" + changeBanner: "Ubah header" + locationDescription: Jika kamu memasukkan kota lebih dahulu, ia akan menampilkan + waktu lokalmu ke pengguna lain. +_exportOrImport: + allNotes: "Semua postingan" + followingList: "Ikuti" + muteList: "Bisukan" + blockingList: "Blokir" + userLists: "Daftar" + excludeMutingUsers: "Kecualikan pengguna yang dibisukan" + excludeInactiveUsers: "Kecualikan pengguna tidak aktif" +_charts: + federation: "Federasi" + apRequest: "Permintaan" + usersIncDec: "Perbedaan dalam # pengguna" + usersTotal: "Jumlah # pengguna" + activeUsers: "Pengguna aktif" + notesIncDec: "Perbedaan pada jumlah postingan" + localNotesIncDec: "Perbedaan di jumlah postingan lokal" + remoteNotesIncDec: "Perbedaan di jumlah postingan luar" + notesTotal: "Total jumlah postingan" + filesIncDec: "Perbedaan # dalam berkas" + filesTotal: "Jumlah # berkas" + storageUsageIncDec: "Perbedaan dalam penggunaan penyimpanan" + storageUsageTotal: "Jumlah penggunaan penyimpanan" +_instanceCharts: + requests: "Permintaan" + users: "Perbedaan dalam # pengguna" + usersTotal: "Jumlah # pengguna kumulatif" + notes: "Perbedaan di jumlah postingan" + notesTotal: "Jumlah kumulatif postingan" + ff: "Perbedaan jumlah pengguna yang diikuti / pengikut " + ffTotal: "Jumlah # pengikut kumulatif" + cacheSize: "Perbedaan dalam ukuran tembolok" + cacheSizeTotal: "Total ukuran tembolok kumulatif" + files: "Perbedaan dalam # berkas" + filesTotal: "Jumlah # berkas kumulatif" +_timelines: + home: "Beranda" + local: "Lokal" + social: "Sosial" + global: "Global" + recommended: Rekomendasi +_pages: + newPage: "Buat halaman baru" + editPage: "Sunting halaman" + readPage: "Lihat sumber kode aktif" + created: "Halaman berhasil dibuat" + updated: "Halaman berhasil disunting" + deleted: "Halaman telah dihapus" + pageSetting: "Pengaturan Halaman" + nameAlreadyExists: "URL Halaman yang ditentukan sudah ada" + invalidNameTitle: "URL Halaman yang ditentukan tidak valid" + invalidNameText: "Cek apabila Halaman tidak kosong" + editThisPage: "Sunting Halaman ini" + viewSource: "Lihat sumber" + viewPage: "Lihat Halaman" + like: "Suka" + unlike: "Hapus suka" + my: "Halaman saya" + liked: "Halaman yang disukai" + featured: "Populer" + inspector: "Inspektor" + contents: "Konten" + content: "Blokir Halaman" + variables: "Variabel" + title: "Judul" + url: "URL Halaman" + summary: "Ringkasan Halaman" + alignCenter: "Tengah" + hideTitleWhenPinned: "Sembunyikan judul halaman saat disematkan ke profil" + font: "Font" + fontSerif: "Serif" + fontSansSerif: "Sans-serif" + eyeCatchingImageSet: "Setel gambar yang menarik" + eyeCatchingImageRemove: "Hapus gambar yang menarik" + chooseBlock: "Tambahkan blokir" + selectType: "Pilih jenis" + enterVariableName: "Mohon masukkan nama untuk variabel kamu" + variableNameIsAlreadyUsed: "Nama ini sudah digunakan oleh variabel lain" + contentBlocks: "Konten" + inputBlocks: "Masukan" + specialBlocks: "Khusus" + blocks: + text: "Teks" + textarea: "Area teks" + section: "Bagian" + image: "Gambar" + button: "Tombol" + if: "Jika" + _if: + variable: "Variabel" + post: "Formulir posting" + _post: + text: "Isi" + attachCanvasImage: "Posting dengan kanvas sebagai gambar" + canvasId: "ID Kanvas" + textInput: "Masukan teks" + _textInput: + name: "Nama variabel" + text: "Judul" + default: "Nilai bawaan" + textareaInput: "Masukan teks multibaris" + _textareaInput: + name: "Nama variabel" + text: "Judul" + default: "Nilai bawaan" + numberInput: "Masukan angka" + _numberInput: + name: "Nama variabel" + text: "Judul" + default: "Nilai bawaan" + canvas: "Kanvas" + _canvas: + id: "ID Kanvas" + width: "Lebar" + height: "Tinggi" + note: "Postingan tertanam" + _note: + id: "ID Postingan" + idDescription: "Kamu dapat menempelkan URL postingan di sini." + detailed: "Tampilan rincian" + switch: "Beralih" + _switch: + name: "Nama variabel" + text: "Judul" + default: "Nilai bawaan" + counter: "Penghitung" + _counter: + name: "Nama variabel" + text: "Judul" + inc: "Meningkat dengan" + _button: + text: "Judul" + colored: "Diwarnai" + action: "Operasi akan dimulai ketika tombol ditekan" + _action: + dialog: "Tampilkan dialog" + _dialog: + content: "Isi" + resetRandom: "Atur ulang benih acak" + pushEvent: "Kirim event" + _pushEvent: + event: "Nama event" + message: "Pesan yang tampil ketika diaktifkan" + variable: "Variable untuk kirim" + no-variable: "Tidak ada" + callAiScript: "Panggil AiScript" + _callAiScript: + functionName: "Nama fungsi" + radioButton: "Pilihan" + _radioButton: + name: "Nama variabel" + title: "Judul" + values: "Daftar pilihan (dipisahkan dengan garis baru)" + default: "Nilai bawaan" + script: + categories: + flow: "Arus kendali" + logical: "Operasi logis" + operation: "Menghitung" + comparison: "Membandingkan" + random: "Acak" + value: "Nilai" + fn: "Fungsi" + text: "Operasi teks" + convert: "Mengubah" + list: "Daftar" + blocks: + text: "Teks" + multiLineText: "Teks (multibaris)" + textList: "Daftar teks" + _textList: + info: "Pisahkan setiap entri dengan baris baru" + strLen: "Panjang teks" + _strLen: + arg1: "Teks" + strPick: "Ekstrak karakter" + _strPick: + arg1: "Teks" + arg2: "Lokasi karakter" + strReplace: "Penggantian teks" + _strReplace: + arg1: "Teks" + arg2: "Teks yang akan diganti" + arg3: "Diganti dengan" + strReverse: "Balikkan teks" + _strReverse: + arg1: "Teks" + join: "Rangkaian teks" + _join: + arg1: "Daftar" + arg2: "Pemisah" + add: "Tambah" + _add: + arg1: "A" + arg2: "B" + subtract: "Kurangi" + _subtract: + arg1: "A" + arg2: "B" + multiply: "Kali" + _multiply: + arg1: "A" + arg2: "B" + divide: "Bagi" + _divide: + arg1: "A" + arg2: "B" + mod: "Sisa" + _mod: + arg1: "A" + arg2: "B" + round: "Bulat desimal" + _round: + arg1: "Angka" + eq: "A dan B adalah sama" + _eq: + arg1: "A" + arg2: "B" + notEq: "A dan B adalah berbeda" + _notEq: + arg1: "A" + arg2: "B" + and: "A DAN B" + _and: + arg1: "A" + arg2: "B" + or: "A ATAU B" + _or: + arg1: "A" + arg2: "B" + lt: "< A ikurang dari B" + _lt: + arg1: "A" + arg2: "B" + gt: "> A lebih dari B" + _gt: + arg1: "A" + arg2: "B" + ltEq: "<= A kurang dari sama dengan B" + _ltEq: + arg1: "A" + arg2: "B" + gtEq: ">= A lebih dari sama dengan B" + _gtEq: + arg1: "A" + arg2: "B" + if: "Cabang" + _if: + arg1: "Jika" + arg2: "Jika benar" + arg3: "Jika salah" + not: "BUKAN" + _not: + arg1: "NOT" + random: "Acak" + _random: + arg1: "Probabilitas" + rannum: "Angka acak" + _rannum: + arg1: "Nilai minimum" + arg2: "Nilai maksimum" + randomPick: "Pilih secara acak dari daftar" + _randomPick: + arg1: "Daftar" + dailyRandom: "Acak (bertahan sehari)" + _dailyRandom: + arg1: "Probabilitas" + dailyRannum: "Angka acak (bertahan sehari)" + _dailyRannum: + arg1: "Nilai minimum" + arg2: "Nilai maksimum" + dailyRandomPick: "Pilih secara acak dari daftar (bertahan sehari)" + _dailyRandomPick: + arg1: "Daftar" + seedRandom: "Acak (dengan seed)" + _seedRandom: + arg1: "Seed" + arg2: "Probabilitas" + seedRannum: "Angka acak (dengan seed)" + _seedRannum: + arg1: "Seed" + arg2: "Nilai minimum" + arg3: "Nilai maksimum" + seedRandomPick: "Pilih secara acak dari daftar (dengan seed)" + _seedRandomPick: + arg1: "Seed" + arg2: "Daftar" + DRPWPM: "Pilih secara acak dari daftar berbobot (bertahan sehari)" + _DRPWPM: + arg1: "Daftar teks" + pick: "Pilih dari daftar" + _pick: + arg1: "Daftar" + arg2: "Posisi" + listLen: "Dapatkan panjangnya dari daftar" + _listLen: + arg1: "Daftar" + number: "Angka" + stringToNumber: "Teks ke angka" + _stringToNumber: + arg1: "Teks" + numberToString: "Angka ke teks" + _numberToString: + arg1: "Angka" + splitStrByLine: "Pisahkan teks dengan baris baru" + _splitStrByLine: + arg1: "Teks" + ref: "Variabel" + aiScriptVar: "Variabel AiScript" + fn: "Fungsi" + _fn: + slots: "Slot" + slots-info: "Pisahkan setiap slot dengan baris baru" + arg1: "Keluaran" + for: "Ulangi" + _for: + arg1: "Jumlah angka untuk diulangi" + arg2: "Aksi" + typeError: "Slot {slot} menerima tipe \"{expect}\", sayangnya nilai yang disediakan + adalah \"{actual}\"!" + thereIsEmptySlot: "Slot {slot} kosong!" + types: + string: "Teks" + number: "Angka" + boolean: "Markah" + array: "Daftar" + stringArray: "Daftar teks" + emptySlot: "Slot kosong" + enviromentVariables: "Variabel Lingkungan" + pageVariables: "Elemen halaman" + argVariables: "Masukan slot" +_relayStatus: + requesting: "Menunggu" + accepted: "Disetujui" + rejected: "Ditolak" +_notification: + fileUploaded: "Berkas telah berhasil diunggah" + youGotMention: "{name} meyebut kamu" + youGotReply: "{name} membalas kamu" + youGotQuote: "{name} mengutip kamu" + youRenoted: "Posting ulang dari {name}" + youGotPoll: "{name} memilih di angket kamu" + youGotMessagingMessageFromUser: "{name} mengirimi kamu pesan" + youGotMessagingMessageFromGroup: "Sebuah pesan telah dikirim ke grup {name}" + youWereFollowed: "Mengikuti kamu" + youReceivedFollowRequest: "Kamu menerima permintaan mengikuti" + yourFollowRequestAccepted: "Permintaan mengikuti kamu telah diterima" + youWereInvitedToGroup: "Telah diundang ke grup" + pollEnded: "Hasil Kuesioner telah keluar" + emptyPushNotificationMessage: "Pembaruan notifikasi dorong" + _types: + all: "Semua" + follow: "Ikuti" + mention: "Sebut" + reply: "Balasan" + renote: "Postingan ulang" + quote: "Kutip" + reaction: "Reaksi" + pollVote: "Memilih di angket" + pollEnded: "Jajak pendapat berakhir" + receiveFollowRequest: "Permintaan mengikuti diterima" + followRequestAccepted: "Permintaan mengikuti disetujui" + groupInvited: "Diundang ke grup" + app: "Pemberitahuan dari aplikasi" + _actions: + followBack: "Ikuti Kembali" + reply: "Balas" + renote: "Posting ulang" + reacted: mereaksi postinganmu + renoted: memposting ulang postinganmu + voted: memilih di angketmu + andCountUsers: dan {count} lebih banyak pengguna {acted} +_deck: + alwaysShowMainColumn: "Selalu tampilkan kolom utama" + columnAlign: "Luruskan kolom" + addColumn: "Tambahkan kolom" + swapLeft: "Pindah ke kiri" + swapRight: "Pindah ke kanan" + swapUp: "Pindah ke atas" + swapDown: "Pindah ke bawah" + stackLeft: "Tumpukkan di kolom kiri" + popRight: "Keluarkan di kanan" + profile: "Ruang Kerja" + _columns: + main: "Utama" + widgets: "Widget" + notifications: "Pemberitahuan" + tl: "Linimasa" + antenna: "Antena" + list: "Daftar" + mentions: "Sebutan" + direct: "Pesan langsung" + channel: Kanal + renameProfile: Ganti nama Ruang Kerja + nameAlreadyExists: Nama ruang kerja sudah ada. + newProfile: Ruang Kerja Baru + introduction: Buat antarmuka sempurna bagimu dengan mengatur kolom sesuka hati! + introduction2: Klik pada + di bagian kanan layar untuk menambah kolom baru yang + kamu inginkan. + deleteProfile: Hapus ruang kerja + configureColumn: Pengaturan kolom + widgetsIntroduction: Silakan pilih "Sunting gawit" pada menu kolom dan tambahkan + gawit. +instanceSecurity: Keamanan Server +removeReaction: Hapus reaksimu +accountMoved: 'Pengguna pindah ke akun baru:' +silencedInstances: Server yang Dibisukan +silencedInstancesDescription: Daftar nama host server yang ingin kamu bisukan. Akun + pada server yang didaftar dianggap sebagai "Dibisukan", dan hanya dapat membuat + permintaan mengikuti, dan tidak dapat menyebut akun lokal jika tidak diikuti. Ini + tidak akan mepengaruhi server yang diblokir. +noInstances: Tidak ada server +expandOnNoteClick: Buka postingan dengan klik +defaultValueIs: 'Bawaan: {value}' +enableRecommendedTimeline: Aktifkan linimasa rekomendasi +searchPlaceholder: Telusuri Firefish +addInstance: Tambah server +older: lebih lama +listsDesc: Daftar mengizinkanmu membuat linimasa berisi pengguna spesifik. Itu dapat + diakses dari halaman linimasa. +enableEmojiReactions: Aktifkan reaksi emoji +showEmojisInReactionNotifications: Tampilkan emoji dalam notifikasi reaksi +renoteMute: Bisukan postingan ulang dalam lini masa +renoteUnmute: Bunyikan postingan ulang dalam lini masa +antennasDesc: "Antena menampilkan postingan baru yang cocok dengan kriteriamu!\n Itu + dapat diakses dari halaman linimasa." +antennaInstancesDescription: Daftarkan satu host server per baris +expandOnNoteClickDesc: Jika nonaktif, kamu masih dapat membuka postingan dengan klik-kanan + menu atau mengklik tanggal waktu. +channelFederationWarn: Kanal belum terfederasi dengan server lain +clipsDesc: Klip seperti markah yang dikategorikan dan bisa dibagikan. Kamu dapat membuat + klip dari menu pada sebuah postingan. +recommended: Direkomendasikan +silenceThisInstance: Bisukan server ini +hiddenTags: Tagar Tersembunyi +preferencesBackups: Preferensi cadangan +editNote: Sunting postingan +deleted: Dihapus +edited: Disunting pada {date} {time} +selectInstance: Pilih server +hiddenTagsDescription: 'Daftar tagar (tanpa #) dari tagar yang ingin kamu sembunyikan + dari tren dan eksplorasi. Tagar tersembunyi tetap dapat ditemukan dari tempat lainnya.' +silenced: Dibisukan +selectChannel: Pilih kanal +accessibility: Aksesibilitas +manageGroups: Kelola grup +moderation: Moderasi +userSaysSomethingReason: '{name} mengatakan {reason}' +secureMode: Mode Aman (Pengambilan Terotorisasi) +secureModeInfo: Saat meminta dari server lain, jangan kirim kembali tanpa bukti. +privateModeInfo: Saat aktif, hanya server yang masuk daftar yang diizinkan yang dapat + terfederasi dengan servermu. Semua postingan akan disembunyikan dari publik. +allowedInstances: Daftar Server Diizinkan +newer: lebih baru +userSaysSomethingReasonReply: '{name} membalas postingan berisi {reason}' +userSaysSomethingReasonRenote: '{name} memposting ulang postingan berisi {reason}' +userSaysSomethingReasonQuote: '{name} mengutip postingan berisi {reason}' +noThankYou: Tidak terima kasih +jumpToPrevious: Lompat ke sebelumnya +flagSpeakAsCatDescription: Postinganmu akan nyampak dalam mode kucing +cw: Peringatan konten +flagSpeakAsCat: Bicara sebagai kucing +allowedInstancesDescription: Server host akan masuk daftar yang diizinkan untuk federasi, + mereka dipisahkan dengan baris baru (hanya diterapkan pada mode pribadi). +xl: XL +privateMode: Mode Pribadi +seperateRenoteQuote: Tombol posting ulang dan kutip terpisah +failedToUpload: Gagal unggah +beta: Beta +move: Pindahkan +navbar: Bilah navigasi +thereIsUnresolvedAbuseReportWarning: Ada laporal yang belum diselesaikan. +statusbar: Bilah status +isSystemAccount: Akun ini dibuat dan dioperasikan secara otomatis oleh sistem. Mohon + jangan memoderasi, menyunting, menghapus, atau mengutak-atik dengan akun ini, atau + itu akan merusak servermu. +lastActiveDate: Terakhir dipakai pada +deleteAccount: Hapus akun +numberOfPageCache: Jumlah halaman yang disinggah +fast: Cepat +cannotUploadBecauseInappropriate: Berkas ini tidak dapat diunggah karena sebagiannya + terdeteksi berpotensi Tidak Aman. +shuffle: Acak +enableAutoSensitive: Otomatis menandai Tidak Aman +enableAutoSensitiveDescription: Mengizinkan deteksi otomatis dan menandai media Tidak + Aman dengan Pembelajaran Mesin. Bahkan saat opsi ini nonaktif, ia bisa diaktifkan + pada ranah server. +activeEmailValidationDescription: Mengaktifkan validasi alamat surel yang lebih ketat, + yang termasuk memeriksa alamat sekali pakai dan memastikan apakah memang bisa berkomunikasi + dengan mereka. Saat tidak dicentang, format surel lah yang hanya akan divalidasi. +alt: ALT +requireAdminForView: Kamu harus masuk dengan akun administrator untuk melihat ini. +recentNHours: '{n} jam terakhir' +typeToConfirm: Harap masukkan {x} untuk konfirmasi +document: Dokumentasi +sensitiveMediaDetection: Deteksi media Tidak Aman +breakFollowConfirm: Yakin ingin menghapus pengikut? +cannotUploadBecauseNoFreeSpace: Gagal unggah karena kapasitas Drive kurang. +unsubscribePushNotification: Nonaktifkan pemberitahuan dorong +image: Gambar +video: Video +pleaseSelect: Pilih opsi +audio: Audio +numberOfPageCacheDescription: Naikkan angka ini akan meningkatkan kenyamanan pengguna + tapi menyebabkan beban server dan penggunaan memori lebih besar. +pushNotification: Pemberitahuan dorong +subscribePushNotification: Aktifkan pemberitahuan dorong +cannotUploadBecauseExceedsFileSizeLimit: Berkas ini tidak dapat diunggah karena melebihi + batas ukuran maksimum yang diizinkan. +recentNDays: '{n} hari terakhir' +noEmailServerWarning: Server surel tidak dikonfigurasi. +check: Cek +driveCapOverrideLabel: Ubah kapasitas drive untuk pengguna ini +driveCapOverrideCaption: Reset kapasitas ke bawaan dengan memasukkan nilai 0 atau + lebih rendah. +logoutConfirm: Yakin keluar? +refreshInterval: 'Perbarui interval ' +type: Tipe +speed: Kecepatan +slow: Pelan +remoteOnly: Jarak jauh saja +moveFrom: Dari akun lama pindahkan ke akun ini +sendPushNotificationReadMessage: Hapus pemberitahuan dorong saat pemberitahuan atau + pesan relevan sudah dibaca +moveAccountDescription: Proses ini permanen. Pastikan kamu sudah mengatur alias dari + akun ini ke akun barumu sebelum pindah. Silakan masukkan tag akun dengan format + seperti @orang@server.com +sendModMail: Kirim Pemberitahuan Moderasi +signupsDisabled: Pendaftaran ke server ini nonaktifkam. Jika kamu memiliki kode undangan + server ini, harap masukkan di bawah ini. +enableCustomKaTeXMacro: Aktifkan makro KaTeX khusus +isBot: Akun ini akun otomatis +customMOTD: MOTD khusus (pesan layar percik) +recommendedInstancesDescription: Server yang direkomendasikan dipisahkan dengan garis + baru untuk tampil di linimasa rekomendasi. +preventAiLearningDescription: Minta model bahasa AI pihak ketiga untuk tidak mempelajari + konten yang kamu unggah, seperti postingan dan gambar. +pushNotificationAlreadySubscribed: Pemberitahuan dorong sudah aktif +pushNotificationNotSupported: Peramban atau servermu tidak mendukung pemberitahuan + dorong +apps: Aplikasi +showAds: Tampilkan spanduk komunitas +enterSendsMessage: Tekan Enter pada Pesan untuk mengirim pesan (matikan dengan Ctrl + + Enter) +showAdminUpdates: Indikasi versi Firefish baru tersedia (hanya admin) +noteId: ID Postingan +caption: Deskripsi itomatis +splash: Layar Percik +migration: Migrasi +moveTo: Pindahkan akun sekarang ke akun baru +moveFromLabel: 'Akun tujuan pindah:' +moveFromDescription: Ini akan mengatur alias akun lamamu jadi kamu dapat pindah dari + akun tersebut ke akun sekarang. Lakukan ini SEBELUM memindahkan akun lama. Silakan + masukkan tag akun dengan format seperti @orang@server.com +defaultReaction: Reaksi emoji bawaan untuk postingan keluar dan masuk +preventAiLearning: Cegah scraping bot AI +customKaTeXMacro: Makro KaTeX khusus +sendPushNotificationReadMessageCaption: Pemberitahuan yang berisi teks "{emptyPushNotificationMessage}" + akan ditampilkan dengan cepat. Ini mungkin meningkatkan penggunaan baterai perangkatmu, + jika berlaku. +adminCustomCssWarn: Pengaturan ini hanya dapat dipakai jika kamu tahu fungsinya. Memasukkan + nilai yang keliru akan membuat klien SIAPA PUN berhenti berfungsi secara normal. + Mohon pastikan CSS-mu bekerja secara benar dengan mengujinya lebih dahulu pada pengaturan + penggunamu. +customMOTDDescription: Pesan khusus untuk MOTD (layar percik) dipisahkan dengan baris + baru untuk ditampilkan secara acak ketika pengguna memuat/muat ulang halaman. +customSplashIcons: Ikon layar percik khusus (url) +customSplashIconsDescription: URL untuk ikon layar percik khusus dipisahkan dengan + garis baru untuk ditampilkan secara acak saat pengguna memuat/muat ulang halaman. + Harap pastikan gambar adalah URL statis, lebih utama berukuran 192x192. +showUpdates: Tampilkan sembulan saat pemutakhiran Firefish +recommendedInstances: Server yang direkomendasikan +updateAvailable: Ada pemutakhiran tersedia! +swipeOnMobile: Izinkan usap antar halaman +swipeOnDesktop: Izinkan usap ala mobile di desktop +logoImageUrl: URL gambar logo +replayTutorial: Ulangi tutorial +moveToLabel: 'Akun yang ingin kamu pindah:' +moveAccount: Pindahkan akun! +migrationConfirm: "Kamu sangat yakin ingin memindahkan akunmu ke {account}? Sekali + pindah, kamu tidak dapat membatalkannya, dan kamu tidak akan dapat menggunakan akunmu + lagi secara normal. \nDan juga, harap pastikan kamu sudah mengatur akun sekarang + sebagai akun yang dipindahkan." +license: Lisensi +noGraze: Harap nonaktifkan ekstensi peramban "Graze for Mastodon", karena akan menganggu + Firefish. +silencedWarning: Halaman ini tampil karena pengguna ini datang dari server yang dibisukan + adminmu, jadi mereka berpotensi spam. +isLocked: Akun ini perlu persetujuan ikuti +_preferencesBackups: + list: Cadangan yang dibuat + saveNew: Simpan cadangan baru + loadFile: Muat dari berkas + save: Simpan perubahan + nameAlreadyExists: Cadangan bernama "{name}" sudah ada. Silakan masukkan nama yang + berbeda. + noBackups: Belum ada cadangan. Kamu bisa mencadangan pengaturan klien kamu di server + ini menggunakan "Buat cadangan baru". + updatedAt: 'Diperbarui pada: {date} {time}' + cannotLoad: Gagal memuat + cannotSave: Gagal menyimpan + invalidFile: Format berkas tidak valid + createdAt: 'Dibuat pada: {date} {time}' + inputName: Silakan masukkan nama untuk cadangan ini + apply: Terapkan ke perangkat ini + saveConfirm: Simpan cadangan sebagai {name}? + deleteConfirm: Hapus cadangan {name}? + renameConfirm: Ubah nama cadangan ini dari "{old}" ke "{new}"? + applyConfirm: Kamu yakin ingin menerapkan cadangan "{name}" di perangkat ini? Pengaturan + yang sudah ada akan ditimpa. +enableServerMachineStats: Aktifkan statistik perangkat keras server +enableIdenticonGeneration: Aktifkan pembuatan Identicon +reactionPickerSkinTone: Warna kulit emoji yang disukai +_sensitiveMediaDetection: + description: Mengurangi upaya moderasi server dengan mengenal media NSFW secara + otomatis melalui Pembelajaran Mesin. Ini akan sedikit menambah beban pada server. + sensitivity: Sensitivitas deteksi + sensitivityDescription: Mengurangi sensitivitas akan mengurangi kesalahan mendeteksi + (positif palsu). + analyzeVideosDescription: Menganalisa video selain gambar. Ini akan sedikit menambah + beban pada server. + setSensitiveFlagAutomatically: Tandai sebagai NSFW + setSensitiveFlagAutomaticallyDescription: Hasil deteksi internal akan disimpan bahkan + jika opsi ini dinonaktifkan. + analyzeVideos: Aktifkan analisa video +_filters: + fromDomain: Dari domain + notesAfter: Postingan setelah + followersOnly: Hanya pengikut + fromUser: Dari pengguna + withFile: Dengan berkas + followingOnly: Hanya mengikuti + notesBefore: Postingan sebelum +_messaging: + dms: Privat + groups: Grup +verifiedLink: Tautan terverifikasi +isPatron: Pendukung Firefish +customKaTeXMacroDescription: 'Siapkan makro untuk menulis ekspresi matematika dengan + mudah! Notasi ini sesuai dengan definisi perintah LaTeX dan ditulis sebagai \newcommand{\ + nama}{konten} atau \newcommand{\nama}[jumlah argumen]{konten}. Sebagai contoh, \newcommand{\add}[2]{#1 + + #2} akan memperluas \add{3}{foo} menjadi 3 + foo. Tanda kurung kurawal yang mengelilingi + nama makro dapat diubah menjadi tanda kurung bulat atau persegi. Hal ini mempengaruhi + tanda kurung yang digunakan untuk argumen. Satu (dan hanya satu) makro dapat didefinisikan + per baris, dan kamu tidak dapat memutus baris di tengah-tengah definisi. Baris yang + tidak valid akan diabaikan. Hanya fungsi substitusi string sederhana yang didukung; + sintaks lanjutan, seperti percabangan bersyarat, tidak dapat digunakan di sini.' +showPopup: Beri tahu pengguna dengan popup +showWithSparkles: Tampilkan dengan kelap-kelip +youHaveUnreadAnnouncements: Anda memiliki pengumuman yang belum dibaca +donationLink: Tautan ke laman donasi +neverShow: Jangan tampilkan lagi +remindMeLater: Mungkin nanti +removeQuote: Hapus kutipan +removeRecipient: Hapus penerima +removeMember: Hapus anggota +isModerator: Moderator +isAdmin: Administrator +_experiments: + title: Eksperimen + enablePostImports: Aktifkan impor postingan + postImportsCaption: Izinkan pengguna mengimpor postingan mereka dari akun Firefish + sebelumnya, Misskey, Mastodon, Akkoma, dan Pleroma. Ini mungkin menyebabkan perlambatan + saat memuat jika antreanmu bottleneck. +_dialog: + charactersExceeded: 'Karakter maksimal terlampaui! Kini: {current}/Batas: {max}' + charactersBelow: 'Karakter kurang! Kini: {current}/Batas: {min}' +_skinTones: + light: Terang + dark: Gelap + mediumDark: Gelap Medium + mediumLight: Terang Medium + medium: Medium + yellow: Kuning +_feeds: + copyFeed: Salin umpan + rss: RSS + atom: Atom + jsonFeed: Umpan JSON +origin: Asal +objectStorageS3ForcePathStyle: Gunakan URL titik akhir berbasis lokasi +objectStorageS3ForcePathStyleDesc: Aktifkan ini untuk membuat URL titik akhir dalam + format 's3.amazonaws.com//' di atas '.s3.amazonaws.com'. +deletePasskeys: Hapus passkeys +inputNotMatch: Masukan tidak cocok +delete2fa: Nonaktifkan 2FA +delete2faConfirm: Ini akan menghapus 2FA secara permanen pada akun ini. Lanjutkan? +deletePasskeysConfirm: Ini akan menghapus semua passkeys dan kunci keamanan pada akun + ini secara permanen. Lanjutkan? +addRe: Tambahkan "re:" pada awal komentar balasan postingan dengan peringatan konten +confirm: Konfirmasi +importZip: Impor ZIP +exportZip: Ekspor ZIP +detectPostLanguage: Deteksi bahasa secara otomatis dan tampilkan tombol terjemahkan + untuk postingan dalam bahasa asing +indexableDescription: Perbolehkan pencarian di sini untuk menampilkan postingan publikmu +indexable: Dapat diindeks +languageForTranslation: Bahasa terjemahan postingan +openServerInfo: Tampilkan informasi server dengan mengeklik ticker server di sebuah + postingan +vibrate: Putar getaran +clickToShowPatterns: Klik untuk menampilkan pola modul +iconSet: Set ikon +_iconSets: + fill: Penuh + regular: Reguler + bold: Tebal + duotone: Duotone + light: Tipis +reactions: Reaksi +replies: Balasan +quotes: Kutipan +renotes: Postingan ulang +showAttachedNotes: Tampilkan postingan dengan berkas ini +attachedToNotes: Posting dengan berkas ini +moreUrls: Halaman tersemat +moreUrlsDescription: "Masukkan halaman yang ingin kamu sematkan ke menu bantuan di + pojok kiri bawah dengan notasi ini:\n\"Nama tampilan\": https://contoh.com/" +squareCatAvatars: Tampilkan avatar kotak untuk akun kucing +emojiModPerm: Perizinan pengelolaan emoji kustom +emojiModPermDescription: "Tambah: Perbolehkan pengguna ini untuk menambahkan emoji + kustom baru dan menetapkan tag/kategori/lisensi untuk semua emoji kustom yang telah + ditambahkan.\nTambah dan Sunting: Perizinan \"Tambah\" + Perbolehkan pengguna ini + untuk menyunting nama/kategori/tag/lisensi emoji kustom yang sudah ada.\n Perbolehkan + Semua: Perizinan \"Tambah dan Sunting\" + Perbolehkan pengguna ini untuk menghapus + semua emoji kustom yang sudah ada." +private: Privat +privateDescription: Buat terlihat pada kamu sendiri +makePrivate: Buat privat +makePrivateConfirm: Tindakan ini akan mengirim permintaan penghapusan ke server jarak + jauh dan mengubah keterlihatannya ke privat. Lanjutkan? +_emojiModPerm: + unauthorized: Tidak ada + add: Tambah + mod: Tambah dan Sunting + full: Perbolehkan Semua +suggested: Disarankan +noLanguage: Tidak ada bahasa +preventMisclick: Pencegahan pengeklikan tidak sengaja +hideFollowButtons: Sembunyikan tombol ikuti dalam posisi yang tidak dapat diklik secara + tidak sengaja +forMobile: Ponsel +replaceChatButtonWithAccountButton: Ganti tombol percakapan dengan tombol ganti akun +replaceWidgetsButtonWithReloadButton: Ganti tombol widget dengan tombol muat ulang +searchEngine: Mesin pencarian yang digunakan dalam bilah pencarian MFM +postSearch: Pencarian postingan di server ini +showBigPostButton: Tampilkan tombol kirim besar di formulir postingan +showPreviewByDefault: Tampilkan pratinjau dalam formulir postingan secara bawaan +useCdn: Dapatkan aset dari CDN +useCdnDescription: Muat aset statis seperti Twemoji dari CDN JSDelivr daripada server + Firefish ini. +sentFollowRequests: Permintaan mengikuti terkirim +replyUnmute: Suarakan balasan dalam lini masa +noSentFollowRequests: Kamu belum mengirim permintaan mengikuti +enablePullToRefresh: Aktifkan "Tarik ke bawah untuk memuat ulang" +pullDownToReload: Tarik ke bawah untuk memuat ulang +enableTimelineStreaming: Perbarui lini masa secara otomatis +searchWords: Kata-kata untuk dicari / ID atau URL untuk dicari +searchUsers: Dikirim oleh (opsional) +searchCwAndAlt: Termasuk peringatan konten dan deskripsi berkas +searchPostsWithFiles: Hanya postingan dengan berkas +publishTimelines: Terbitkan lini masa untuk pengunjung +publishTimelinesDescription: Jika diaktifkan, lini masa Lokal dan Global akan ditampilkan + di {url} bahkan ketika keluar dari akun. +searchWordsDescription: "Masukkan kata kunci di sini untuk mencari postingan. Pisahkan + kata dengan spasi untuk pencarian AND (dan), atau 'OR' ('atau', tanpa tanda kutip) + di antara kata-kata untuk pencarian OR.\nMisalnya, 'pagi malam' akan menemukan postingan + yang mengandung 'pagi' dan 'malam', dan 'pagi OR malam' akan menemukan postingan + yang mengandung 'pagi' atau 'malam' (atau keduanya).\nAnda juga dapat memfilter + kata tertentu dari hasil pencarian, seperti 'mengantuk -pagi -sarapan'. Selain itu, + Anda dapat menggabungkan AND/OR/tidak sertakan ini seperti '(pagi OR malam) mengantuk' + -sarapan.\n\n Jika kamu ingin membuka halaman pengguna atau halaman postingan tertentu, + masukkan ID atau URL pada kolom ini dan klik tombol 'Cari'. Mengeklik 'Cari' akan + mencari postingan yang secara harfiah mengandung ID/URL." +pullToRefreshThreshold: Jarak penarikan untuk memuat ulang +releaseToReload: Lepaskan untuk memuat ulang +reloading: Memuat ulang +replyMute: Bisukan balasan dalam lini masa +searchRange: Dikirim dalam (opsional) +searchUsersDescription: "Untuk mencari postingan oleh pengguna/server tertentu, masukkan + ID (@pengguna@contoh.id, atau @pengguna untuk pengguna lokal) atau nama domain (contoh.id)\n + \nJika kamu memasukkan 'me' ('aku', tanpa tanda kutip), semua postinganmu (termasuk + postingan yang tidak terdaftar, khusus pengikut, langsung, dan rahasia) akan dicari.\n + \nJika Anda memasukkan 'local' (tanpa tanda kutip), hasilnya akan disaring untuk + menyertakan hanya postingan dari server ini." +searchRangeDescription: "Jika kamu ingin memfilter periode waktu, masukkan dalam format + ini: 20220615-20231031\n\nJika kamu menghilangkan tahun (seperti 0105-0106 atau + 20231105-0110), maka akan ditafsirkan sebagai tahun saat ini.\n\nKamu juga bisa + menghilangkan tanggal awal atau akhir. Sebagai contoh, -0102 akan memfilter hasil + pencarian untuk menampilkan hanya postingan yang dibuat sebelum tanggal 2 Januari + tahun ini, dan 20231026- akan memfilter hasil pencarian untuk menampilkan hanya + postingan yang dibuat setelah tanggal 26 Oktober 2023." +toPost: Kirim +toQuote: Kutip +noAltTextWarning: Beberapa berkas yang dilampirkan tidak memiliki deskripsi. Lupa + menulis deskripsinya? +toEdit: Sunting +showNoAltTextWarning: Tampilkan peringatan jika kamu mencoba mengirim berkas tanpa + deskripsi +toReply: Balas +messagingUnencryptedInfo: Percakapan di Firefish tidak terenkripsi secara ujung ke + ujung. Jangan bagikan informasi sensitif apa pun melalui Firefish. +moderationNote: Catatan Moderasi +driveCapacityOverride: Penimpaan Kapasitas Drive +ipFirstAcknowledged: Tanggal akuisisi pertama dari alamat IP +incorrectLanguageWarning: "Sepertinya postinganmu dalam bahasa {detected}, tetapi + Anda memilih {current}.\nApakah kamu ingin ubah bahasanya ke bahasa {detected} saja?" +autocorrectNoteLanguage: Tampilkan peringatan jika bahasa postingan tidak cocok dengan + hasil yang dideteksi secara otomatis +markLocalFilesNsfwByDefault: Tandai semua berkas lokal baru sensitif secara bawaan +markLocalFilesNsfwByDefaultDescription: Terlepas dari pengaturan ini, pengguna dapat + menghapus sendiri tanda NSFW. Berkas yang ada tidak berpengaruh. +noteEditHistory: Riwayat penyuntingan postingan +media: Media +antennaLimit: Jumlah antena maksimum yang dapat dibuat oleh setiap pengguna +showAddFileDescriptionAtFirstPost: Buka formulir secara otomatis untuk menulis deskripsi + ketika mencoba mengirim berkas tanpa deskripsi +remoteFollow: Ikuti jarak jauh +foldNotification: Kelompokkan notifikasi yang sama +getQrCode: Tampilkan kode QR +cannotEditVisibility: Kamu tidak bisa menyunting keterlihatan +useThisAccountConfirm: Apakah kamu ingin melanjutkan dengan akun ini? +inputAccountId: Silakan memasukkan akunmu (misalnya, @firefish@info.firefish.dev) +copyRemoteFollowUrl: Salin URL ikuti jarak jauh +slashQuote: Kutipan rantai +scheduledPostAt: Kiriman akan dikirim {time} +scheduledPost: Jadwalkan postingan ini +_later: + monthsAgo: dalam {n}bln + secondsAgo: dalam {n}d + future: masa depan + justNow: saat ini + daysAgo: dalam {n}hr + hoursAgo: dalam {n}j + minutesAgo: dalam {n}m + weeksAgo: dalam {m}mg + yearsAgo: dalam {n}thn +mergeRenotesInTimeline: Kelompokkan beberapa pembagian postingan yang sama +cancelScheduledPost: Hapus jadwal +scheduledDate: Tanggal terjadwal +mergeThreadInTimeline: Gabungkan beberapa postingan dalam utas yang sama dalam lini + masa +strongPassword: Kata sandi baik +announcement: Pengumuman +i18nServerSet: Gunakan {language} untuk klien baru. +turnOffCatLanguage: Matikan konversi bahasa kucing +i18nServerInfo: Klien baru akan dalam {language} secara bawaan. +i18nServerChange: Gunakan {language} saja. +addAlt4MeTag: 'Tambahkan tagar #Alt4Me secara otomatis pada postinganmu jika berkas + yang dilampirkan tidak ada deskripsi' diff --git a/locales/index.d.ts b/locales/index.d.ts new file mode 100644 index 0000000..fe3edb4 --- /dev/null +++ b/locales/index.d.ts @@ -0,0 +1,3 @@ +declare const locales: { [lang: string]: any }; + +export = locales; diff --git a/locales/index.mjs b/locales/index.mjs new file mode 100644 index 0000000..25e0161 --- /dev/null +++ b/locales/index.mjs @@ -0,0 +1,90 @@ +/** + * Languages Loader + */ + +import fs from "node:fs"; +import yaml from "js-yaml"; + +import { dirname } from "node:path"; +import { fileURLToPath } from "node:url"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); + +const languages = []; +const languages_custom = []; + +const merge = (...args) => + args.reduce( + (a, c) => ({ + ...a, + ...c, + ...Object.entries(a) + .filter(([k]) => c && typeof c[k] === "object") + .reduce((a, [k, v]) => ((a[k] = merge(v, c[k])), a), {}), + }), + {}, + ); + +fs.readdirSync(__dirname).forEach((file) => { + if (file.includes(".yml")) { + file = file.slice(0, file.indexOf(".")); + languages.push(file); + } +}); + +fs.readdirSync(__dirname + "/../custom/locales").forEach((file) => { + if (file.includes(".yml")) { + file = file.slice(0, file.indexOf(".")); + languages_custom.push(file); + } +}); + +const primaries = { + en: "US", + ja: "JP", + zh: "CN", +}; + +// 何故か文字列にバックスペース文字が混入することがあり、YAMLが壊れるので取り除く +const clean = (text) => + text.replace(new RegExp(String.fromCodePoint(0x08), "g"), ""); + +const locales = languages.reduce( + (a, c) => ( + (a[c] = + yaml.load(clean(fs.readFileSync(`${__dirname}/${c}.yml`, "utf-8"))) || + {}), + a + ), + {}, +); +const locales_custom = languages_custom.reduce( + (a, c) => ( + (a[c] = + yaml.load( + clean( + fs.readFileSync(`${__dirname}/../custom/locales/${c}.yml`, "utf-8"), + ), + ) || {}), + a + ), + {}, +); +Object.assign(locales, locales_custom); + +export default Object.entries(locales).reduce( + (a, [k, v]) => ( + (a[k] = (() => { + const [lang] = k.split("-"); + return k === "en-US" + ? v + : merge( + locales["en-US"], + locales[`${lang}-${primaries[lang]}`] || {}, + v, + ); + })()), + a + ), + {}, +); diff --git a/locales/it-IT.yml b/locales/it-IT.yml new file mode 100644 index 0000000..4039e2b --- /dev/null +++ b/locales/it-IT.yml @@ -0,0 +1,2205 @@ +_lang_: "Italiano" +headlineFirefish: "Una piattaforma social open source, decentralizzata che sarà gratuita + per sempre! 🚀" +introFirefish: "Benvenuti! Firefish è una piattaforma social open source, decentralizzata + che sarà sempre gratuita! 🚀" +monthAndDay: "{day}/{month}" +search: "Cerca" +notifications: "Notifiche" +username: "Nome utente" +password: "Password" +forgotPassword: "Password dimenticata" +fetchingAsApObject: "Caricamento dal Fediverso" +ok: "OK" +gotIt: "Ho capito!" +cancel: "Annulla" +enterUsername: "Inserisci un nome utente" +renotedBy: "Boost da {user}" +noNotes: "Nessun post" +noNotifications: "Nessuna notifica" +instance: "Server" +settings: "Impostazioni" +basicSettings: "Impostazioni generali" +otherSettings: "Altre impostazioni" +openInWindow: "Apri in una finestra" +profile: "Profilo" +timeline: "Timeline" +noAccountDescription: "L'utente non ha ancora scritto niente nella biografia di profilo." +login: "Accedi" +loggingIn: "Accesso in corso" +logout: "Esci" +signup: "Iscriviti" +uploading: "Caricamento..." +save: "Salva" +users: "Utenti" +addUser: "Aggiungi utente" +favorite: "Aggiungi ai preferiti" +favorites: "Preferiti" +unfavorite: "Rimuovi post dai preferiti" +favorited: "Aggiunto ai tuoi preferiti." +alreadyFavorited: "Già tra i tuoi preferiti." +cantFavorite: "Impossibile aggiungere il post ai preferiti." +pin: "Fissa sul profilo" +unpin: "Non fissare sul profilo" +copyContent: "Copia il contenuto" +copyLink: "Copia il link" +delete: "Elimina" +deleteAndEdit: "Elimina e modifica" +deleteAndEditConfirm: "Vuoi davvero cancellare questo post e scriverlo di nuovo? Verrano + eliminate anche tutte le reazioni, boost e risposte collegate." +addToList: "Aggiungi alla lista" +sendMessage: "Invia messaggio" +copyUsername: "Copia nome utente" +searchUser: "Cerca utente" +reply: "Rispondi" +loadMore: "Mostra di più" +showMore: "Mostra di più" +showLess: "Chiudi" +youGotNewFollower: "Ha iniziato a seguirti" +receiveFollowRequest: "Hai ricevuto una richiesta di follow" +followRequestAccepted: "Richiesta di follow accettata" +mention: "Menzione" +mentions: "Menzioni" +directNotes: "Messaggi diretti" +importAndExport: "Importa ed esporta" +import: "Importa" +export: "Esporta" +files: "Allegati" +download: "Scarica" +driveFileDeleteConfirm: "Vuoi davvero eliminare il file \"{name}\"? Sarà rimosso da + tutti i post che lo contengono." +unfollowConfirm: "Vuoi davvero smettere di seguire {name}?" +exportRequested: "Hai richiesto un'esportazione, e potrebbe volerci tempo. Quando + sarà compiuta, il file verrà aggiunto direttamente al Drive." +importRequested: "Hai richiesto un'importazione. Potrebbe impiegare del tempo." +lists: "Liste" +noLists: "Nessuna lista" +note: "Post" +notes: "Post" +following: "Chi segui" +followers: "Chi ti segue" +followsYou: "Ti segue" +createList: "Aggiungi una nuova lista" +manageLists: "Gestisci liste" +error: "Errore" +somethingHappened: "Si è verificato un problema" +retry: "Riprova" +pageLoadError: "Errore nel caricamento della pagina." +pageLoadErrorDescription: "Di solito succede per errori di rete o a causa della cache + del browser. Prova a pulire la cache o a riprovare più tardi." +serverIsDead: "Il server non risponde. Attendi e riprova più tardi." +youShouldUpgradeClient: "Per visualizzare la pagina è necessario aggiornare il client + alla nuova versione e ricaricare." +enterListName: "Nome della lista" +privacy: "Privacy" +makeFollowManuallyApprove: "Approva manualmente le richieste di follow" +defaultNoteVisibility: "Privacy predefinita dei post" +follow: "Segui" +followRequest: "Richiesta di follow" +followRequests: "Richieste di follow" +unfollow: "Smetti di seguire" +followRequestPending: "Richiesta di follow in approvazione" +enterEmoji: "Inserisci emoji" +renote: "Boost" +unrenote: "Annulla boost" +renoted: "Boost effettuato." +cantRenote: "È impossibile dare un boost a questo post." +cantReRenote: "È impossibile dare un boost a un boost." +quote: "Cita" +pinnedNote: "Post fissato" +pinned: "Fissa sul profilo" +you: "Tu" +clickToShow: "Clicca per visualizzare" +sensitive: "Contenuto sensibile" +add: "Aggiungi" +reaction: "Reazione" +reactionSetting: "Reazioni visualizzate sul pannello" +reactionSettingDescription2: "Trascina per riorganizzare, clicca per cancellare, usa + il pulsante \"+\" per aggiungere." +rememberNoteVisibility: "Ricorda le impostazioni di visibilità del post" +attachCancel: "Rimuovi allegato" +markAsSensitive: "Segna come sensibile" +unmarkAsSensitive: "Segna come non sensibile" +enterFileName: "Nome del file" +mute: "Silenzia" +unmute: "Non silenziare" +block: "Blocca" +unblock: "Sblocca" +suspend: "Sospendi" +unsuspend: "Annulla la sospensione dell'account" +blockConfirm: "Vuoi davvero bloccare l'account?" +unblockConfirm: "Vuoi davvero sbloccare l'account?" +suspendConfirm: "Vuoi davvero sospendere questo account?" +unsuspendConfirm: "Vuoi annullare la sospensione dell'account?" +selectList: "Seleziona una lista" +selectAntenna: "Scegli un'antenna" +selectWidget: "Seleziona widget" +editWidgets: "Modifica i widget" +editWidgetsExit: "Fine modifica" +customEmojis: "Emoji personalizzati" +emoji: "Emoji" +emojis: "Emoji" +emojiName: "Nome dell'emoji" +emojiUrl: "URL dell'emoji" +addEmoji: "Aggiungi un emoji" +settingGuide: "Impostazioni suggerite" +cacheRemoteFiles: "Mantieni i file remoti nella cache" +cacheRemoteFilesDescription: "Disabilitando questa opzione, i file remoti verranno + scaricati direttamente dal loro server. L'opzione permette di risparmiare spazio + ma aumenta il traffico di rete e non verranno generate anteprime." +flagAsBot: "Questo account è automatizzato" +flagAsBotDescription: "Se l'account esegue principalmente operazioni automatiche, + attiva quest'opzione. Quando attivata, permette agli sviluppatori di prevenire catene + d’interazione senza fine con altri account automatizzati. Inoltre imposta Firefish + perché tratti questo account come automatizzato." +flagAsCat: "Sei un gatto? 😺" +flagAsCatDescription: "Ti compariranno le orecchie e parlerai come un gatto!" +autoAcceptFollowed: "Accetta in automatico i follow dagli account che segui" +addAccount: "Aggiungi account" +loginFailed: "Accesso non riuscito" +showOnRemote: "Visita la pagina di origine" +general: "Generali" +wallpaper: "Sfondo" +setWallpaper: "Imposta sfondo" +removeWallpaper: "Elimina lo sfondo" +searchWith: "Cerca: {q}" +youHaveNoLists: "Non hai ancora creato nessuna lista" +followConfirm: "Confermi di voler seguire {name}?" +proxyAccount: "Account proxy" +proxyAccountDescription: "Un account proxy è un account che funziona da follower remoto + sotto certe condizioni. Ad esempio, quando un utente aggiunge un utente remoto a + una lista, le attività di quell'utente potrebbero comunque non essere visualizzate + in locale se nessun altro utente lo segue su questo server, l'account proxy si occuperà + di seguire e acquisire i post." +host: "Host" +selectUser: "Seleziona utente" +recipient: "Destinatario(i)" +annotation: "Annotazioni" +federation: "Federazione" +instances: "Server" +registeredAt: "Registrato presso" +latestRequestSentAt: "Ultima richiesta inviata" +latestRequestReceivedAt: "Ultima richiesta ricevuta" +latestStatus: "Ultimo stato" +storageUsage: "Spazio occupato" +charts: "Grafici" +perHour: "All'ora" +perDay: "al giorno" +stopActivityDelivery: "Interrompi la distribuzione di attività" +blockThisInstance: "Blocca questo server" +operations: "Operazioni" +software: "Software" +version: "Versione" +metadata: "Metadati" +monitor: "Monitor" +jobQueue: "Coda dei job" +cpuAndMemory: "CPU e Memoria" +network: "Rete" +disk: "Disco" +instanceInfo: "Informazioni sul server" +statistics: "Statistiche" +clearQueue: "Svuota coda" +clearQueueConfirmTitle: "Vuoi davvero svuotare la coda?" +clearQueueConfirmText: "I post ancora in coda non verranno più federati. Solitamente, + non è necessario eseguire questa operazione." +clearCachedFiles: "Svuota cache" +clearCachedFilesConfirm: "Vuoi davvero svuotare la cache di tutti i file remoti?" +blockedInstances: "Server bloccati" +blockedInstancesDescription: "Elenca gli hostname dei server che vuoi bloccare. Non + potranno più comunicare con il tuo server." +muteAndBlock: "Silenziati / Bloccati" +mutedUsers: "Account silenziati" +blockedUsers: "Account bloccati" +noUsers: "Nessun utente trovato" +editProfile: "Modifica profilo" +noteDeleteConfirm: "Vuoi eliminare questo post?" +pinLimitExceeded: "Hai già fissato il massimo possibile di post" +intro: "L'installazione di Firefish è finita! Si prega di creare un account amministratore." +done: "Fine" +processing: "Elaborazione in corso" +preview: "Anteprima" +default: "Predefinito" +noCustomEmojis: "Nessun emoji" +noJobs: "Nessun job" +federating: "Federazione in corso" +blocked: "Bloccato" +suspended: "Sospeso" +all: "Tutti" +subscribing: "Sottoscrizione in corso" +publishing: "Pubblicazione in corso" +notResponding: "Nessuna risposta" +instanceFollowing: "Seguiti da te su questo server" +instanceFollowers: "Chi ti segue su questo server" +instanceUsers: "Utenti del server" +changePassword: "Aggiorna Password" +security: "Sicurezza" +retypedNotMatch: "Le password non corrispondono." +currentPassword: "Password attuale" +newPassword: "Nuova Password" +newPasswordRetype: "Conferma password" +attachFile: "Allega file" +more: "Altro!" +featured: "In primo piano" +usernameOrUserId: "Nome utente o ID utente" +noSuchUser: "Utente non trovato" +lookup: "Cercare" +announcements: "Annunci" +imageUrl: "URL dell'immagine" +remove: "Elimina" +removed: "Rimosso" +removeAreYouSure: "Rimuovere \"{x}\"?" +deleteAreYouSure: "Rimuovere \"{x}\"?" +resetAreYouSure: "Vuoi reimpostare?" +saved: "Salvato" +messaging: "Messaggi" +upload: "Carica" +fromDrive: "Dal Drive" +fromUrl: "Dall'URL" +uploadFromUrl: "Incolla URL immagine" +uploadFromUrlDescription: "URL del file che vuoi caricare" +uploadFromUrlRequested: "Caricamento richiesto" +uploadFromUrlMayTakeTime: "Il caricamento del file può richiedere tempo." +explore: "Esplora" +messageRead: "Letto" +noMoreHistory: "Non c'è altra cronologia da mostrare" +startMessaging: "Nuovo messaggio" +nUsersRead: "Letto da {n} persone" +agreeTo: "Sono d'accordo con {0}" +tos: "Termini d'uso" +start: "Inizia" +home: "Home" +remoteUserCaution: "Le informazioni degli utenti remoti sono incomplete." +activity: "Attività" +images: "Immagini" +birthday: "Compleanno" +yearsOld: "{age} anni" +registeredDate: "Iscrizione il" +location: "Posizione" +theme: "Tema" +themeForLightMode: "Tema per la modalità chiara" +themeForDarkMode: "Tema per la modalità scura" +light: "Chiaro" +dark: "Scuro" +lightThemes: "Temi chiari" +darkThemes: "Temi scuri" +syncDeviceDarkMode: "Sincronizza il tema scuro con le impostazioni del dispositivo" +drive: "Drive" +fileName: "Nome file" +selectFile: "Scelta allegato" +selectFiles: "Scelta allegati" +selectFolder: "Seleziona cartella" +selectFolders: "Seleziona cartelle" +renameFile: "Rinomina file" +folderName: "Nome della cartella" +createFolder: "Nuova cartella" +renameFolder: "Rinomina cartella" +deleteFolder: "Elimina cartella" +addFile: "Allega" +emptyDrive: "Il Drive è vuoto" +emptyFolder: "La cartella è vuota" +unableToDelete: "Impossibile rimuovere" +inputNewFileName: "Nuovo nome del file" +inputNewDescription: "Nuova descrizione" +inputNewFolderName: "Nuovo nome della cartella" +circularReferenceFolder: "La cartella di destinazione è una sottocartella della cartella + che vuoi spostare." +hasChildFilesOrFolders: "La cartella non può essere rimossa perché non è vuota." +copyUrl: "Copia URL" +rename: "Modifica nome" +avatar: "Foto del profilo" +banner: "Intestazione" +nsfw: "Contenuti sensibili" +whenServerDisconnected: "Quando la connessione col server è persa" +disconnectedFromServer: "Server disconnesso" +reload: "Ricarica" +doNothing: "Nessun'azione" +reloadConfirm: "Vuoi ricaricare?" +watch: "Osserva" +unwatch: "Smetti di osservare" +accept: "Accetta" +reject: "Rifiuta" +normal: "Normale" +instanceName: "Nome del server" +instanceDescription: "Descrizione del server" +maintainerName: "Nome dell'Amministratore" +maintainerEmail: "Indirizzo e-mail dell'Amministratore" +tosUrl: "URL Termini d'uso" +thisYear: "Anno" +thisMonth: "Mese" +today: "Oggi" +dayX: "{day}" +monthX: "{month}" +yearX: "{year}" +pages: "Pagine" +enableLocalTimeline: "Abilita timeline locale" +enableGlobalTimeline: "Abilita timeline federata" +disablingTimelinesInfo: "Anche se disabiliti queste timeline, gli amministratori e + i moderatori potranno sempre accederci." +registration: "Iscriviti" +enableRegistration: "Permetti nuove registrazioni" +invite: "Invita" +driveCapacityPerLocalAccount: "Dimensione drive per utenti locali" +driveCapacityPerRemoteAccount: "Dimensione drive per utenti remoti" +inMb: "In megabytes" +iconUrl: "URL icona" +bannerUrl: "URL dell'immagine banner" +backgroundImageUrl: "URL dello sfondo" +basicInfo: "Informazioni di base" +pinnedUsers: "Utenti in fissati" +pinnedUsersDescription: "Elenca gli utenti che vuoi fissare in cima alla pagina \"\ + Esplora\", uno per riga." +pinnedPages: "Pagine in evidenza" +pinnedPagesDescription: "Specifica il percorso delle pagine che vuoi fissare in cima + alla home page del server. Una pagina per riga." +pinnedClipId: "ID della clip in evidenza" +pinnedNotes: "Post fissati" +hcaptcha: "hCaptcha" +enableHcaptcha: "Abilita hCaptcha" +hcaptchaSiteKey: "Chiave del sito" +hcaptchaSecretKey: "Chiave segreta" +recaptcha: "reCAPTCHA" +enableRecaptcha: "Abilita reCAPTCHA" +recaptchaSiteKey: "Chiave del sito" +recaptchaSecretKey: "Chiave segreta" +avoidMultiCaptchaConfirm: "Utilizzare diversi Captcha può causare interferenze. Vuoi + disattivare l'altro Captcha? Puoi lasciare diversi Captcha attivi premendo \"Cancella\"\ + ." +antennas: "Antenne" +manageAntennas: "Gestione antenne" +name: "Nome" +antennaSource: "Origine dell'antenna" +antennaKeywords: "Parole chiavi da ricevere" +antennaExcludeKeywords: "Parole chiavi da escludere" +antennaKeywordsDescription: "Separare con uno spazio indica la condizione \"AND\" + . Separare con un'interruzione riga indica la condizione \"OR\"." +notifyAntenna: "Notifica i nuovi post" +withFileAntenna: "Solo post con allegati" +enableServiceworker: "Abilita ServiceWorker" +antennaUsersDescription: "Inserisci solo un nome utente per riga" +caseSensitive: "Distingui maiuscole e minuscole" +withReplies: "Includi le risposte" +connectedTo: "Stai seguendo questi account" +notesAndReplies: "Post e risposte" +withFiles: "Con file allegati" +silence: "Silenzia" +silenceConfirm: "Vuoi davvero silenziare l'utente?" +unsilence: "Riattiva" +unsilenceConfirm: "Vuoi davvero riattivare l'utente?" +popularUsers: "Utenti popolari" +recentlyUpdatedUsers: "Utenti attivi di recente" +recentlyRegisteredUsers: "Utenti registrati di recente" +recentlyDiscoveredUsers: "Utenti scoperti di recente" +exploreUsersCount: "Ci sono {count} utenti" +exploreFediverse: "Esplora il Fediverso" +popularTags: "Tag di tendenza" +userList: "Liste" +about: "Informazioni" +aboutFirefish: "Informazioni su Firefish" +administrator: "Amministratore" +token: "Token" +twoStepAuthentication: "Autenticazione a due fattori" +moderator: "Moderatore" +nUsersMentioned: "Menzioni da {n} utenti" +securityKey: "Chiave di sicurezza" +securityKeyName: "Nome della chiave" +registerSecurityKey: "Registra una chiave di sicurezza" +lastUsed: "Ultima attività" +unregister: "Annulla l'iscrizione" +passwordLessLogin: "Accedi senza password" +resetPassword: "Reimposta password" +newPasswordIs: "La tua nuova password è「{password}」" +reduceUiAnimation: "Ridurre le animazioni dell'interfaccia" +share: "Condividi" +notFound: "Non trovato" +notFoundDescription: "Nessuna pagina corrisponde all'URL." +uploadFolder: "Cartella predefinita di caricamento" +cacheClear: "Svuota cache" +markAsReadAllNotifications: "Segna tutte le notifiche come lette" +markAsReadAllUnreadNotes: "Segna tutti i post come letti" +markAsReadAllTalkMessages: "Segna tutte le chat come lette" +help: "Guida" +inputMessageHere: "Testo del messaggio" +close: "Chiudi" +group: "Gruppo" +groups: "Gruppi" +createGroup: "Nuovo gruppo" +ownedGroups: "Gruppi che gestisco" +joinedGroups: "Gruppi a cui partecipo" +invites: "Inviti" +groupName: "Nome del gruppo" +members: "Membri" +transfer: "Trasferisci" +messagingWithUser: "Chat privata" +messagingWithGroup: "Chat di gruppo" +title: "Titolo" +text: "Testo" +enable: "Abilita" +next: "Avanti" +retype: "Ritenta" +noteOf: "Post di {user}" +inviteToGroup: "Invita nel gruppo" +quoteAttached: "Citazione" +quoteQuestion: "Vuoi aggiungere una citazione?" +noMessagesYet: "Ancora nessun messaggio" +newMessageExists: "C'è un nuovo messaggio" +onlyOneFileCanBeAttached: "È possibile allegare al messaggio soltanto un file" +signinRequired: "Devi aver fatto login prima di continuare" +invitations: "Inviti" +invitationCode: "Codice di invito" +checking: "Verifica in corso..." +available: "Disponibile" +unavailable: "Nome già in uso" +usernameInvalidFormat: "Puoi usare solo lettere maiuscole, minuscole, numeri e '_'" +tooShort: "Troppo breve" +tooLong: "Troppo lungo" +weakPassword: "Password debole" +normalPassword: "Password buona" +veryStrongPassword: "Password forte" +passwordMatched: "Corretta" +passwordNotMatched: "Le password non corrispondono" +signinWith: "Accedi con {x}" +signinFailed: "Autenticazione non riuscita. Controlla la tua password e nome utente." +tapSecurityKey: "Premi la chiave di sicurezza" +or: "oppure" +language: "Lingua" +uiLanguage: "Lingua dell'interfaccia" +groupInvited: "Hai un invito ad unirti a un gruppo" +aboutX: "Informazioni su {x}" +useOsNativeEmojis: "Usa le emoji native del sistema operativo" +disableDrawer: "Non mostrare il menù sul drawer" +youHaveNoGroups: "Nessun gruppo" +joinOrCreateGroup: "Puoi creare il tuo gruppo o partecipare a gruppi che già esistono." +noHistory: "Nessuna cronologia" +signinHistory: "Cronologia di accesso all'account" +disableAnimatedMfm: "Disabilità i MFM animati" +doing: "In corso..." +category: "Categoria" +tags: "Tag" +docSource: "Origine del documento" +createAccount: "Crea il tuo account" +existingAccount: "Account esistente" +regenerate: "Rigenera" +fontSize: "Dimensione carattere" +noFollowRequests: "Non ci sono richieste di follow" +openImageInNewTab: "Aprire immagini in una nuova scheda" +dashboard: "Dashboard" +local: "Locale" +remote: "Remoto" +total: "Totale" +weekOverWeekChanges: "Settimanale" +dayOverDayChanges: "Giornaliero" +appearance: "Aspetto" +clientSettings: "Impostazioni client" +accountSettings: "Impostazioni account" +promotion: "Promosso" +promote: "Promuovi" +numberOfDays: "Numero di giorni" +hideThisNote: "Nascondi questo post" +showFeaturedNotesInTimeline: "Mostra anche i post in primo piano nella tua timeline" +objectStorage: "Object storage" +useObjectStorage: "Utilizza l'object storage" +objectStorageBaseUrl: "Base URL" +objectStorageBaseUrlDesc: "URL di riferimento. Specifica lo URL della tua CDN o del + Proxy se li stai usando.\nPer S3 usa 'https://.s3.amazonaws.com' e per CGS + o simili usa 'https://storage.googleapis.com/'." +objectStorageBucket: "Bucket" +objectStorageBucketDesc: "Specificare il nome del bucket utilizzato dal provider." +objectStoragePrefix: "Prefix" +objectStoragePrefixDesc: "I file saranno conservati sotto la directory di questo prefisso." +objectStorageEndpoint: "Endpoint" +objectStorageEndpointDesc: "Lasciare vuoto se stai utilizzando S3. In caso contrario + , specifica l'endpoint come '' oppure ':' a seconda del servizio + utilizzato." +objectStorageRegion: "Region" +objectStorageRegionDesc: "Specificate una regione, quale 'xx-east-1'. Se il servizio + in utilizzo non distingue tra regioni, lasciate vuoto o inserite 'us-east-1'." +objectStorageUseSSL: "Usa SSL" +objectStorageUseSSLDesc: "Disabilita quest'opzione se non usi HTTPS per connetterti + alle API" +objectStorageUseProxy: "Usa proxy" +objectStorageUseProxyDesc: "Disabilita quest'opzione se non usi proxy per connetterti + alle API" +objectStorageSetPublicRead: "Imposta \"visibilità pubblica\" al caricamento" +serverLogs: "Log del server" +deleteAll: "Rimuovi tutto" +showFixedPostForm: "Mostra la finestra di pubblicazione sopra la timeline" +newNoteRecived: "Ci sono nuovi post" +sounds: "Suoni" +listen: "Ascolta" +none: "Niente" +showInPage: "Mostra nella pagina" +popout: "Finestra pop-out" +volume: "Volume" +masterVolume: "Volume principale" +details: "Dettagli" +chooseEmoji: "Scegli emoji" +unableToProcess: "Impossibile completare l'operazione" +recentUsed: "Usato di recente" +install: "Installa" +uninstall: "Disinstalla" +installedApps: "Applicazioni autorizzate" +nothing: "Niente da visualizzare" +installedDate: "Data autorizzazione" +lastUsedDate: "Data ultimo utilizzo" +state: "Stato" +sort: "Ordina per" +ascendingOrder: "Ascendente" +descendingOrder: "Discendente" +scratchpad: "Scratchpad" +scratchpadDescription: "Lo Scratchpad offre un ambiente per esperimenti di AiScript. + Puoi scrivere, eseguire e verificare i risultati dell'interazione del codice con + Firefish." +output: "Output" +script: "Script" +disablePagesScript: "Disabilita AiScript nelle pagine" +updateRemoteUser: "Aggiorna le informazioni dell'utente remoto" +deleteAllFiles: "Elimina tutti i file" +deleteAllFilesConfirm: "Vuoi davvero eliminare tutti i file?" +removeAllFollowing: "Smetti di seguire tutti" +removeAllFollowingDescription: "Smetti di seguire tutti gli account del server {host}. + È utile specialmente se il server non esiste più." +userSuspended: "L'utente è sospeso." +userSilenced: "L'utente è silenziato." +yourAccountSuspendedTitle: "Questo account è sospeso" +yourAccountSuspendedDescription: "Questo account è stato sospeso a causa di una violazione + dei termini di servizio del server. Contattare l'amministrazione per i dettagli. + Si prega di non creare un nuovo account." +menu: "Menù" +divider: "Linea di separazione" +addItem: "Aggiungi elemento" +relays: "Relay" +addRelay: "Aggiungi realy" +inboxUrl: "URL Inbox" +addedRelays: "Relay configurati" +serviceworkerInfo: "Deve essere abilitato per le notifiche push." +deletedNote: "Post rimosso" +invisibleNote: "Post invisibile" +enableInfiniteScroll: "Abilita scorrimento infinito" +visibility: "Visibilità" +poll: "Sondaggio" +useCw: "Nascondi il contenuto" +enablePlayer: "Apri nel video player" +disablePlayer: "Chiudi video player" +expandTweet: "Espandi post" +themeEditor: "Editor del tema" +description: "Descrizione" +describeFile: "Aggiungi descrizione" +enterFileDescription: "Inserisci descrizione" +author: "Autore" +leaveConfirm: "Ci sono modifiche ancora non salvate. Vuoi cancellarle?" +manage: "Amministrazione" +plugins: "Plugin" +deck: "Deck" +undeck: "Esci dal deck" +useBlurEffectForModal: "Usa l'effetto sfocatura per le finestre modali" +useFullReactionPicker: "Massimizza il pannello delle reazioni" +width: "Larghezza" +height: "Altezza" +large: "Grande" +medium: "Predefinito" +small: "Piccolo" +generateAccessToken: "Genera token di accesso" +permission: "Autorizzazioni" +enableAll: "Abilita tutto" +disableAll: "Disabilita tutto" +tokenRequested: "Autorizza accesso all'account" +pluginTokenRequestedDescription: "Il plugin potrà utilizzare le autorizzazioni impostate + qui." +notificationType: "Tipo di notifiche" +edit: "Modifica" +emailServer: "Server email" +enableEmail: "Abilita consegna email" +emailConfigInfo: "Utilizzato per verificare il tuo indirizzo di posta elettronica + e per reimpostare la tua password" +email: "Email" +emailAddress: "Indirizzo di posta elettronica" +smtpConfig: "Impostazioni del server SMTP" +smtpHost: "Host" +smtpPort: "Port" +smtpUser: "Username" +smtpPass: "Password" +emptyToDisableSmtpAuth: "Lasciare username e password vuoti per disabilitare la verifica + SMTP" +smtpSecure: "Usa la porta SSL/TLS predefinita per le connessioni SMTP" +smtpSecureInfo: "Disabilita quando è attivo STARTTLS" +testEmail: "Test di consegna email" +wordMute: "Filtro parole e lingua" +instanceMute: "Server silenziati" +userSaysSomething: "{name} ha detto qualcosa" +makeActive: "Attiva" +display: "Mostra" +copy: "Copia" +metrics: "Statistiche" +overview: "Anteprima" +logs: "Log" +delayed: "Ritardo" +database: "Database" +channel: "Canale" +create: "Crea" +notificationSetting: "Impostazioni notifiche" +notificationSettingDesc: "Seleziona il tipo di notifiche da mostrare." +useGlobalSetting: "Usa impostazioni generali" +useGlobalSettingDesc: "Se abilitato, le impostazioni notifiche dell'account verranno + utilizzate. Se disabilitato, si possono definire diverse singole impostazioni." +other: "Altro" +regenerateLoginToken: "Genera di nuovo un token di connessione" +regenerateLoginTokenDescription: "Genera un nuovo token di autenticazione. Solitamente + questa operazione non è necessaria: quando si genera un nuovo token, tutti i dispositivi + vanno disconnessi." +setMultipleBySeparatingWithSpace: "È possibile creare multiple voci separate da spazi." +fileIdOrUrl: "ID o URL del file" +behavior: "Comportamento" +sample: "Esempio" +abuseReports: "Segnalazioni" +reportAbuse: "Segnalazione" +reportAbuseOf: "Segnala {name}" +fillAbuseReportDescription: "Si prega di spiegare il motivo della segnalazione. Se + riguarda un post specifico, inserisci anche l'URL di riferimento." +abuseReported: "La segnalazione è stata inviata. Grazie." +reporter: "Segnalatore" +reporteeOrigin: "Origine del segnalato" +reporterOrigin: "Origine del segnalatore" +send: "Invia" +abuseMarkAsResolved: "Contrassegna la segnalazione come risolta" +openInNewTab: "Apri in una nuova scheda" +openInSideView: "Apri in vista laterale" +defaultNavigationBehaviour: "Navigazione preimpostata" +editTheseSettingsMayBreakAccount: "Modificare queste impostazioni può danneggiare + l'account." +instanceTicker: "Informazioni del server dei post" +waitingFor: "In attesa di {x}" +random: "Casuale" +system: "Sistema" +switchUi: "Interfaccia" +desktop: "Desktop" +clip: "Clip" +createNew: "Crea" +optional: "Opzionale" +createNewClip: "Nuova clip" +public: "Pubblica" +i18nInfo: "Firefish è tradotto in diverse lingue da volontari. Anche tu puoi contribuire + su {link}." +manageAccessTokens: "Gestisci token di accesso" +accountInfo: "Informazioni account" +notesCount: "Numero di post" +repliesCount: "Numero di risposte inviate" +renotesCount: "Numero di boost dati" +repliedCount: "Numero di risposte ricevute" +renotedCount: "Numero dei boost ricevuti" +followingCount: "Numero di account seguiti" +followersCount: "Numero di account che ti seguono" +sentReactionsCount: "Numero di reazioni inviate" +receivedReactionsCount: "Numero di reazioni ricevute" +pollVotesCount: "Numero di voti inviati" +pollVotedCount: "Numero di voti ricevuti" +yes: "Sì" +no: "No" +driveFilesCount: "Numero di file nel drive" +driveUsage: "Spazio occupato nel drive" +noCrawle: "Rifiuta l'indicizzazione dai robot" +noCrawleDescription: "Chiedi ai motori di ricerca di non indicizzare i tuoi contenuti." +lockedAccountInfo: "Se non imposti la visibilità a \"Solo chi ti segue\", i singoli + post saranno visibili a tutti, anche se per seguirti è necessaria la tua approvazione." +alwaysMarkSensitive: "Segna i media come sensibili come impostazione predefinita" +loadRawImages: "Mostra le immagini intere invece delle miniature" +disableShowingAnimatedImages: "Disabilita le immagini animate" +verificationEmailSent: "Una mail di verifica è stata inviata. Clicca sul link per + completare la verifica." +notSet: "Non impostato" +emailVerified: "Il tuo indirizzo email è stato verificato" +noteFavoritesCount: "Numero di post preferiti" +pageLikesCount: "Numero di pagine che ti piacciono" +pageLikedCount: "Numero delle tue pagine che hanno ricevuto \"Mi piace\"" +contact: "Contatti" +useSystemFont: "Usa il font predefinito del sistema" +clips: "Clip" +experimentalFeatures: "Funzioni sperimentali" +developer: "Sviluppatore" +makeExplorable: "Account visibile sulla pagina \"Esplora\"" +makeExplorableDescription: "Se disabiliti l'opzione, il tuo account non verrà mostrato + sulla pagina \"Esplora\"." +showGapBetweenNotesInTimeline: "Mostra uno spazio tra i post sulla timeline" +duplicate: "Duplica" +left: "Sinistra" +center: "Centro" +wide: "Largo" +reloadToApplySetting: "Le tue preferenze verranno impostate dopo il ricaricamento + della pagina. Vuoi ricaricare adesso?" +needReloadToApply: "È necessario riavviare per rendere effettive le modifiche." +showTitlebar: "Mostra la barra del titolo" +clearCache: "Svuota cache" +onlineUsersCount: "{n} utenti online" +nUsers: "{n} utenti" +nNotes: "{n} post" +sendErrorReports: "Invia segnalazioni di errori" +sendErrorReportsDescription: "Quando abilitato, se si verifica un problema, informazioni + dettagliate sugli errori verranno condivise con Firefish in modo da aiutare a migliorare + la qualità del software.\nSaranno inclusi dati come la versione del sistema operativo, + il tipo di navigatore web che usi, la cronologia delle attività, ecc." +myTheme: "Il mio tema" +backgroundColor: "Sfondo" +textColor: "Testo" +saveAs: "Salva con nome..." +value: "Valore" +createdAt: "Data di creazione" +updatedAt: "Aggiornato il" +saveConfirm: "Vuoi salvare le modifiche?" +deleteConfirm: "Rimuovere?" +invalidValue: "Valore non valido." +registry: "Registro" +closeAccount: "Chiudi l'account" +currentVersion: "Versione in uso" +latestVersion: "Ultima versione" +youAreRunningUpToDateClient: "Stai usando la versione più recente del client." +newVersionOfClientAvailable: "Una nuova versione del tuo client è disponibile." +usageAmount: "In uso" +capacity: "Capacità" +inUse: "In utilizzo" +editCode: "Modifica codice" +apply: "Applica" +receiveAnnouncementFromInstance: "Ricevi notifiche da questo server" +emailNotification: "Eventi per notifiche via mail" +publish: "Pubblico" +inChannelSearch: "Cerca nel canale" +useReactionPickerForContextMenu: "Cliccare sul tasto destro per aprire il pannello + di reazioni" +typingUsers: "{users} sta scrivendo" +jumpToSpecifiedDate: "Vai alla data" +showingPastTimeline: "Stai visualizzando una vecchia timeline" +clear: "Pulisci" +markAllAsRead: "Segna tutti come già letti" +goBack: "Indietro" +unlikeConfirm: "Non ti piace più?" +fullView: "Schermo intero" +quitFullView: "Esci dalla modalità a schermo intero" +addDescription: "Aggiungi descrizione" +userPagePinTip: "Puoi fissare i post qui, premendo \"Fissa sul profilo\" nel menù + dei singoli post." +notSpecifiedMentionWarning: "Questo post menziona utenti che non sono inclusi fra + i destinatari" +info: "Informazioni" +userInfo: "Informazioni utente" +unknown: "Sconosciuto" +onlineStatus: "Stato online" +hideOnlineStatus: "Nascondi lo stato online" +hideOnlineStatusDescription: "Nascondere lo stato online può rendere meno efficaci + alcune funzioni, come la ricerca." +online: "Online" +active: "Attivo" +offline: "Offline" +notRecommended: "Sconsigliato" +botProtection: "Protezione contro i bot" +instanceBlocking: "Gestione della federazione" +selectAccount: "Scegli account" +enabled: "Attivo" +disabled: "Inattivo" +quickAction: "Azioni rapide" +user: "Utente" +administration: "Amministrazione" +accounts: "Account" +switch: "Sostituisci" +noMaintainerInformationWarning: "Le informazioni sull'amministratore non sono impostate." +noBotProtectionWarning: "Nessuna protezione impostata contro i bot." +configure: "Imposta" +postToGallery: "Crea nuovo post della galleria" +gallery: "Galleria" +recentPosts: "Pagine più recenti" +popularPosts: "Pagine più visualizzate" +shareWithNote: "Condividi in un post" +ads: "Banner della comunità" +expiration: "Scadenza" +memo: "Promemoria" +priority: "Priorità" +high: "Alta" +middle: "Media" +low: "Bassa" +emailNotConfiguredWarning: "Non hai impostato un indirizzo e-mail." +ratio: "Rapporto" +previewNoteText: "Anteprima del testo" +customCss: "CSS personalizzato" +global: "Globale" +squareAvatars: "Mostra avatar quadrati per gli account tranne che per i gatti" +sent: "Inviato" +received: "Ricevuto" +searchResult: "Risultati della ricerca" +hashtags: "Hashtag" +troubleshooting: "Risoluzione problemi" +useBlurEffect: "Utilizza effetto sfocatura per l'interfaccia utente" +learnMore: "Maggiori informazioni" +misskeyUpdated: "Firefish è stato aggiornato!" +whatIsNew: "Mostra le informazioni sull'aggiornamento" +translate: "Traduzione" +translatedFrom: "Tradotto da {x}" +accountDeletionInProgress: "La cancellazione dell'account è in corso" +usernameInfo: "Un nome per identificare univocamente il tuo account sul server. È + possibile utilizzare caratteri alfanumerici (a~z, A~Z, 0~9) e il trattino basso + (_). Non sarà possibile cambiare il nome utente in seguito." +aiChanMode: "Modalità Ai-chan" +keepCw: "Mantieni i content warning" +resolved: "Risolto" +unresolved: "Non risolto" +breakFollow: "Rimuovi follower" +itsOn: "Abilitato" +itsOff: "Disabilitato" +emailRequiredForSignup: "È necessario un indirizzo mail per registrare un account" +unread: "Non letto" +filter: "Filtri" +controlPanel: "Pannello di controllo" +manageAccounts: "Gestisci gli account" +classic: "Centrato" +muteThread: "Silenzia la discussione" +unmuteThread: "Non silenziare la discussione" +deleteAccountConfirm: "L'account verrà rimosso in modo irreversibile. Procedere?" +incorrectPassword: "La password è errata." +voteConfirm: "Votare per「{choice}」?" +hide: "Nascondi" +leaveGroup: "Esci dal gruppo" +leaveGroupConfirm: "Uscire da「{name}」?" +useDrawerReactionPickerForMobile: "Mostra sul drawer da dispositivo mobile" +welcomeBackWithName: "Ciao {name}" +clickToFinishEmailVerification: "Fai click su [{ok}] per completare la verifica dell'indirizzo + email." +indefinitely: "Senza scadenza" +tenMinutes: "10 minuti" +oneHour: "1 ora" +oneDay: "1 giorno" +oneWeek: "1 settimana" +file: "File" +reverse: "Inverti" +colored: "Colorato" +label: "Etichetta" +localOnly: "Soltanto locale" +account: "Account" +_emailUnavailable: + used: "Email già in uso" + format: "Formato email non valido" + disposable: "Email non riutilizzabile" + mx: "Server email non corretto" + smtp: "Il server email non risponde" +_ffVisibility: + public: "Pubblico" + followers: "Mostra solo a chi ti segue" + private: "Invisibile" +_signup: + almostThere: "Quasi completo" + emailAddressInfo: "Inserisci il tuo indirizzo email. Non verrà reso pubblico." + emailSent: Un messaggio di conferma è stato inviato al tuo indirizzo email ({email}). + Clicca il link incluso per completare la creazione dell'account. +_accountDelete: + accountDelete: "Rimuovi l'account" + sendEmail: "Al termine della cancellazione dell'account, verrà inviata una mail + all'indirizzo a cui era registrato." + requestAccountDelete: "Richiesta di rimozione account" + started: "Il processo di rimozione è iniziato." + inProgress: "Rimozione in corso" + mayTakeTime: La rimozione di un account impiega molte risorse di sistema, potrebbe + durare molto tempo a seconda di quanti contenuti hai creato e quanti file hai + caricato. +_ad: + back: "Indietro" + reduceFrequencyOfThisAd: "Mostra meno spesso questo banner" + adsBy: Banner della comunità da {by} +_forgotPassword: + enterEmail: "Inserisci l'e-mail che hai registrato nel tuo profilo. Il link di ripristino + della password verrà inviato a questo indirizzo." + ifNoEmail: "Se non hai registrato alcun indirizzo e-mail, contatta l'admin del server." + contactAdmin: "Poiché questo server non permette l'uso di indirizzi e-mail, contatta + l'admin per poter ripristinare la password." +_gallery: + my: "La mia galleria" + liked: "Post che mi piacciono" + like: "Mi piace" + unlike: "Non mi piace più" +_email: + _follow: + title: "Hai un nuovo follower" + _receiveFollowRequest: + title: "Hai ricevuto una richiesta di follow" +_plugin: + install: "Installa estensioni" + installWarn: "Si prega di installare soltanto estensioni che provengono da fonti + affidabili." + manage: "Gestisci estensioni" +_registry: + key: "Chiave" + keys: "Chiavi" + domain: "Dominio" + createKey: "Crea chiave" + scope: Ambito +_aboutFirefish: + about: "Firefish è un fork di Misskey creato da ThatOneCalculator, che è in sviluppo + dal 2022." + contributors: "Principali collaboratori" + allContributors: "Tutti i collaboratori" + source: "Codice sorgente" + translation: "Traduzione di Firefish" + donate: "Sostieni Firefish" + misskeyContributors: Contributori di Misskey + donateTitle: Ti piace Firefish? + pleaseDonateToFirefish: Con una donazione puoi supportare lo sviluppo di Firefish. + pleaseDonateToHost: Considera anche una donazione al server che ti ospita, {host}, + per contribuire ai costi che sostiene. + donateHost: Dona a {host} +_nsfw: + respect: "Nascondi i media sensibli (NSFW)" + ignore: "Mostra i media sensibili (NSFW)" + force: "Nascondi tutti i media" +_mfm: + cheatSheet: "Riepilogo comandi MFM" + intro: "MFM è un linguaggio Markdown particolare che si può usare in diverse parti + di Firefish. Qui puoi visualizzare a colpo d'occhio tutta la sintassi MFM utile." + dummy: "Firefish espande il mondo del Fediverso" + mention: "Menzione" + mentionDescription: "Si può menzionare un utente specifico digitando il suo nome + utente subito dopo il segno @." + hashtag: "Hashtag" + url: "URL" + link: "Link" + bold: "Grassetto" + blockCode: "Codice (blocco)" + inlineMath: "Formula matematica (inline)" + blockMath: "Formula matematica (blocco)" + quote: "Citazione" + emoji: "Emoji personalizzati" + search: "Cerca" + flip: "Ribalta" + jump: "Animazione (salto)" + jumpDescription: "Mostra il contenuto che salta su e giù." + bounce: "Animazione (rimbalzo)" + bounceDescription: "Mostra il contenuto che rimbalza." + shake: "Animazione (tremore)" + shakeDescription: "Mostra il contenuto che trema." + twitch: "Animazione (sussulto)" + twitchDescription: "Mostra il contenuto che sussulta con forza." + x2: "Più grande" + x2Description: "Mostra il contenuto ingrandito." + x3: "Molto più grande" + x3Description: "Mostra il contenuto molto più ingrandito." + x4: "Estremamente grande" + x4Description: "Mostra il contenuto estremamente ingrandito." + blur: "Sfocatura" + blurDescription: "È possibile rendere sfocato il contenuto. Diventerà visibile al + passaggio del puntatore." + font: "Tipo di carattere" + fontDescription: "Puoi scegliere il tipo di carattere per il contenuto." + rainbow: "Arcobaleno" + rotate: "Ruota" + fade: "Dissolvenza" + fadeDescription: "Dissolvenza in entrata e in uscita del contenuto." + alwaysPlay: Riproduci automaticamente tutti i MFM + advanced: MFM avanzato + hashtagDescription: Puoi specificare un hashtag usando numeri e testo. + smallDescription: Mostra il contenuto piccolo e sottile. + centerDescription: Mostra il contenuto centrato. + inlineCodeDescription: Mostra il codice di programmazione all'interno di una riga + di testo evidenziando la sintassi. + blockMathDescription: Mostra le formule matematiche (KaTeX) in una riga dedicata + advancedDescription: Se disabilitato, permette solo comandi semplici MFM, a meno + che non sia in corso una animazione + tadaDescription: Mostra il contenuto con l'animazione "tadà". + spin: Animazione (ruotazione) + sparkleDescription: Mostra il contenuto con l'effetto scintille. + scale: Ridimensiona + rotateDescription: Ruota il contenuto di un angolo specificato. + boldDescription: Evidenzia le lettere usando il grassetto. + small: Piccolo + inlineCode: Codice (inline) + position: Posizione + cropDescription: Ritaglia il contenuto. + foreground: Colore in primo piano + backgroundDescription: Cambia il colore di sfondo del testo. + flipDescription: Ribalta il contenuto orizzontalmente o verticalmente. + play: Riproduci MFM + stop: Stop MFM + warn: MFM può avere animazioni veloci o lampeggianti + quoteDescription: Mostra il contenuto come citazione. + emojiDescription: Puoi mostrare un emoji personalizzato racchiudendo il nome tra + due ":" + jelly: Animazione (gelatina) + foregroundDescription: Cambia il colore del testo in primo piano. + background: Colore di sfondo + blockCodeDescription: Mostra il codice di programmazione in un blocco di più righe + evidenziando la sintassi. + urlDescription: Gli URL possono essere mostrati. + tada: Animazione (tadà) + jellyDescription: Mostra il contenuto con l'animazione gelatina. + positionDescription: Sposta il contenuto di quanto specificato. + crop: Ritaglia + scaleDescription: Ridimensiona il contenuto di quanto specificato. + inlineMathDescription: Mostra le formule matematiche (KaTeX) all'interno del testo + spinDescription: Mostra il contenuto che ruota. + plainDescription: Disattiva altri effetti MFM contenuti dentro questo effetto MFM. + plain: Senza effetti + searchDescription: Mostra un box di ricerca con testo già inserito. + linkDescription: Gli URL nel testo sono mostrati come link. + center: Centrato + rainbowDescription: Mostra il contenuto coi colori arcobaleno. + sparkle: Scintillante +_instanceTicker: + none: "Nascondi" + remote: "Mostra solo agli utenti remoti" + always: "Mostra sempre" +_serverDisconnectedBehavior: + reload: "Ricarica automaticamente" + dialog: "Apri avviso in finestra" + quiet: "Mostra un avviso discreto" + nothing: Non fare nulla +_channel: + create: "Nuovo canale" + edit: "Modifica il canale" + setBanner: "Scegli intestazione" + removeBanner: "Rimuovi intestazione" + featured: "Tendenze" + owned: "I miei canali" + following: "Chi segui" + usersCount: "{n} partecipanti" + notesCount: "{n} post" + nameAndDescription: Nome e descrizione + nameOnly: Solo nome +_menuDisplay: + hide: "Nascondi" + top: In alto + sideFull: Laterale + sideIcon: Laterale (icone) +_wordMute: + muteWords: "Parole da filtrare" + muteWordsDescription: "Separa con uno spazio per la condizione \"AND\". Separa con + un'interruzione riga per la condizione \"OR\"." + muteWordsDescription2: "Metti le parole chiave tra \"/\" per usare espressioni regolari + (regexp)." + softDescription: "Nascondi dalla timeline i post che rispondono alle condizioni + specificate." + hardDescription: "Impedisci alla timeline di caricare i post che rispondono alle + condizioni specificate. I post spariranno in modo irreversibile, anche se le condizioni + verranno cambiate successivamente." + soft: "Moderato" + hard: "Severo" + mutedNotes: "Post silenziati" + muteLangsDescription2: 'Usa il codice lingua, esempio: en, fr, ja, zh.' + lang: Lingua + langDescription: Nascondi dalla timeline i post in quest'insieme di lingue. + muteLangs: Lingue da non mostrare + muteLangsDescription: Separa andando a capo o con spazi per la condizione OR. +_theme: + explore: "Esplora temi" + install: "Installa un tema" + manage: "Gerisci temi" + code: "Codice tema" + description: "Descrizione" + installed: "{name} è stato installato" + installedThemes: "Temi installati" + builtinThemes: "Temi integrati" + alreadyInstalled: "Questo tema è già installato" + invalid: "Il formato del tema non è valido" + make: "Crea un tema" + base: "Base" + addConstant: "Aggiungi costante" + constant: "Costante" + defaultValue: "Valore predefinito" + color: "Colore" + refConst: "Valore di una costante" + key: "Chiave" + func: "Funzioni" + funcKind: "Tipo di funzione" + argument: "Argomento" + alpha: "Opacità" + darken: "Scuro" + lighten: "Chiaro" + inputConstantName: "Inserisci un nome per la costante" + deleteConstantConfirm: "Vuoi davvero eliminare la costante {const}?" + keys: + bg: "Sfondo" + fg: "Testo" + focus: "Focus" + indicator: "Indicatore" + panel: "Pannello" + shadow: "Ombra" + header: "Intestazione" + navBg: "Sfondo della barra laterale" + navFg: "Testo della barra laterale" + navHoverFg: "Testo della barra laterale (hover)" + navActive: "Testo della barra laterale (attivo)" + navIndicator: "Indicatore della barra laterale" + link: "Link" + hashtag: "Hashtag" + mention: "Menzione" + mentionMe: "Menzioni (mie)" + renote: "Boost" + divider: "Delimitatore" + infoBg: "Sfondo informazioni" + infoFg: "Testo informazioni" + infoWarnBg: "Sfondo degli avvisi" + infoWarnFg: "Testo dell'avviso" + cwBg: "Sfondo content warning" + cwFg: "Testo bottone content warning" + cwHoverBg: "Sfondo bottone content warning (hover)" + toastBg: "Sfondo di notifica a comparsa" + toastFg: "Testo di notifica a comparsa" + buttonBg: "Sfondo del pulsante" + buttonHoverBg: "Sfondo del pulsante (hover)" + inputBorder: "Inquadra casella di testo" + listItemHoverBg: "Sfondo della voce di un elenco (hover)" + driveFolderBg: "Sfondo della cartella del drive" + badge: "Badge" + messageBg: "Sfondo della chat" + modalBg: Sfondo finestra modale + scrollbarHandle: Barra di scorrimento + scrollbarHandleHover: Barra di scorrimento (hover) + accent: Accento + fgHighlighted: Testo evidenziato + accentLighten: Accento (chiaro) + dateLabelFg: Testo data + accentDarken: Accento (scuro) + wallpaperOverlay: Trasparenza rispetto allo sfondo + importInfo: Se inserisci qui il codice di un tema, potrai importarlo nell'editor + del tema + refProp: Valore di una proprietà + basedProp: Nome proprietà +_sfx: + note: "Nuovo post" + noteMy: "Post scritto da te" + notification: "Notifiche" + chat: "Messaggi" + chatBg: "Chat (sfondo)" + antenna: "Antenne" + channel: "Notifiche canale" +_ago: + future: "Futuro" + justNow: "Ora" + secondsAgo: "{n}s fa" + minutesAgo: "{n}min fa" + hoursAgo: "{n} ore fa" + daysAgo: "{n} giorni fa" + weeksAgo: "{n} settimane fa" + monthsAgo: "{n} mesi fa" + yearsAgo: "{n} anni fa" +_time: + second: "s" + minute: "min" + hour: "ore" + day: "giorni" +_tutorial: + titolo: "Come usare Firefish" + step1_1: "Ciao!" + step1_2: "Impostiamo alcune preferenze. Sarà tutto operativo in men che non si dica!" + step2_1: "Per prima cosa, completa il tuo profilo." + step2_2: "Fornendo alcune informazioni su chi sei, sarà più facile per gli altri + capire se vogliono vedere i tuoi post o seguirti." + step3_1: "Ora è il momento di seguire qualcuno!" + step3_2: "Le tue timeline Home e Social si basano su chi segui, quindi prova a seguire + un paio di account per iniziare.\nClicca sul bottone in alto a destra di un profilo + per seguirlo." + step4_1: "Fatti conoscere." + step4_2: "Per il primo post, alcuni preferiscono fare un {introduction} o un semplice + \"Ciao mondo!\"" + step5_1: "Timeline, le timeline sono dovunque!" + step5_2: "La tua istanza ha attivato {timelines} diverse timeline." + step5_3: "La timeline Home {icon} è quella dove puoi vedere i post degli account + che segui." + step5_4: "La timeline Locale {icon} è dove si possono vedere i post di tutti gli + utenti di questo server." + step5_5: "La timeline Social {icon} è una combinazione delle timeline Home e Locale." + step5_6: "La timeline Suggeriti {icon} è quella in cui si possono vedere i post + dai server suggeriti dagli admin." + step5_7: "La timeline Globale {icon} è quella in cui si possono vedere i post di + ogni altro server collegato." + step6_1: "Allora, cos'è questo posto?" + step6_2: "Beh, adesso non sei semplicemente parte di Firefish. Sei in un portale + del Fediverso, una rete interconnessa di migliaia di server." + step6_3: "Ogni server funziona in modo diverso e non tutti i eseguono Firefish. + Questo sì però! Sembra complicato, ma diventerà subito chiaro con un po' di pratica." + step6_4: "Ora vai, esplora e divertiti!" + title: Come usare Firefish +_2fa: + registerTOTP: "Aggiungi app di autenticazione" + securityKeyName: Scegli un nome per la chiave + step2: Poi, scansiona il QR code mostrato a schermo. + securityKeyInfo: Oltre alle impronte digitali o al PIN, puoi anche autenticarti + con chiavi di sicurezza hardware che supportano FIDO2 per rendere il tuo account + ancora più sicuro. + step3Title: Inserisci un codice di autenticazione + alreadyRegistered: Hai già registrato un dispositivo per l'autenticazione a due + fattori (2FA). + step3: Inserisci il token fornito dalla tua app per terminare. + step4: Da ora in poi i futuri tentativi di login necessiteranno del token. + token: Token 2FA + step2Click: Cliccando sul QR code potrai registrare la 2FA nella tua chiave di sicurezza + o nella app di autenticazione dello smartphone. + step2Url: 'Puoi anche chiamare questo URL se sei su desktop:' + securityKeyNotSupported: Il tuo browser non supporta le chiavi di sicurezza. + chromePasskeyNotSupported: Le passkey di Chrome non sono supportate. + registerSecurityKey: Registra una chiave di sicurezza o pass key + step1: Prima di tutto, installa una app di autenticazione (tipo {a} o {b}) sul tuo + device. + tapSecurityKey: Segui le istruzioni del tuo browser per registrare la chiave di + sicurezza o la pass key + removeKey: Rimuovi la chiave di sicurezza + removeKeyConfirm: Confermi la rimozione della chiave {name} ? +_permissions: + "read:account": "Visualizzare le informazioni dell'account" + "write:account": "Modificare le informazioni dell'account" + "read:blocks": "Visualizza gli account bloccati" + "write:blocks": "Gestisci gli account bloccati" + "read:drive": "Aprire il drive" + "write:drive": "Modifica o elimina file e cartelle sul drive" + "read:favorites": "Visualizza i tuoi preferiti" + "write:favorites": "Gestisci i tuoi preferiti" + "read:following": "Vedi le informazioni su chi segui" + "write:following": "Aggiungi o rimuovi account da seguire" + "read:messaging": "Visualizzare la chat" + "write:messaging": "Gestisci la chat" + "read:mutes": "Vedi account silenziati" + "write:mutes": "Gestisci account silenziati" + "write:notes": "Crea o rimuovi i post" + "read:notifications": "Visualizza notifiche" + "write:notifications": "Gestisci notifiche" + "read:reactions": "Vedi reazioni" + "write:reactions": "Gestisci reazioni" + "write:votes": "Votare" + "read:pages": "Visualizzare pagine" + "write:pages": "Gestisci pagine" + "read:page-likes": "Visualizza i \"Mi piace\" delle pagine" + "write:page-likes": "Gestisci i \"Mi piace\" delle pagine" + "read:user-groups": "Vedi gruppi di utenti" + "write:user-groups": "Gestisci i gruppi di utenti" + "read:channels": "Visualizza canali" + "write:channels": "Gestisci i canali" + "write:gallery": Modifica la galleria + "read:gallery": Vedi nella galleria + "read:gallery-likes": Guarda i preferiti della galleria + "write:gallery-likes": Modifica i preferiti della galleria +_auth: + shareAccess: "Autorizzi \"{name}\" ad accedere al tuo account?" + shareAccessAsk: "Vuoi consentire l'accesso al tuo account a questa app?" + permissionAsk: "Questa app richiede le seguenti autorizzazioni:" + pleaseGoBack: "Si prega di ritornare sulla app" + callback: "Sto ritornando alla app" + denied: "Accesso negato" + copyAsk: "Incolla questo codice di autorizzazione nell'applicazione:" + allPermissions: Accesso completo all'account +_antennaSources: + all: "Tutti i post" + homeTimeline: "Post dagli account che segui" + users: "Post dagli utenti selezionati" + userList: "Post dagli utenti di una lista specifica" + userGroup: "Post dagli utenti in un gruppo specifico" + instances: Post di tutti gli utenti di un server +_weekday: + sunday: "Domenica" + monday: "Lunedì" + tuesday: "Martedì" + wednesday: "Mercoledì" + thursday: "Giovedì" + friday: "Venerdì" + saturday: "Sabato" +_widgets: + memo: "Promemoria" + notifications: "Notifiche" + timeline: "Timeline" + calendar: "Calendario" + trends: "Tendenze" + clock: "Orologio" + rss: "Aggregatore RSS" + activity: "Attività" + photos: "Foto" + digitalClock: "Orologio digitale" + federation: "Federazione" + postForm: "Finestra di pubblicazione" + slideshow: "Slideshow" + button: "Bottone" + onlineUsers: "Utenti online" + jobQueue: "Coda dei job" + serverMetric: "Statistiche server" + aiscript: "Console AiScript" + _userList: + chooseList: Seleziona una lista + rssTicker: Riquadro RSS + instanceCloud: Cloud del server + unixClock: Orologio UNIX + serverInfo: Informazioni sul server + userList: Elenco utenti +_cw: + hide: "Nascondi" + show: "Mostra" + chars: "{count} caratteri" + files: "{count} file" +_poll: + noOnlyOneChoice: "Sono necessarie almeno 2 risposte" + choiceN: "Opzione {n}" + noMore: "Non puoi aggiungere altre opzioni" + canMultipleVote: "Permetti risposte multiple" + expiration: "Scadenza" + infinite: "Senza scadenza" + at: "Seleziona data..." + after: "Seleziona durata..." + deadlineDate: "Data di scadenza" + deadlineTime: "Ora" + duration: "Durata" + votesCount: "{n} voti" + totalVotes: "{n} voti in totale" + vote: "Vota" + showResult: "Visualizza risultati" + voted: "Hai votato" + closed: "Terminato" + remainingDays: "Rimangono {d} giorni e {h} ore" + remainingHours: "Rimangono {h} ore e {m} minuti" + remainingMinutes: "Rimangono {m} minuti e {s} secondi" + remainingSeconds: "Rimangono {s} secondi" +_visibility: + public: "Pubblica" + publicDescription: "Il tuo post sarà visibile in tutte le timeline pubbliche" + home: "Home" + homeDescription: "Visibile solo sulla timeline \"Home\"" + followers: "Chi ti segue" + followersDescription: "Visibile solo a chi ti segue e a chi menzioni" + specified: "Diretto" + specifiedDescription: "Visibile solo per gli account menzionati" + localOnly: "Soltanto locale" + localOnlyDescription: "Non visibile dagli altri server" +_postForm: + replyPlaceholder: "Rispondi a questo post..." + quotePlaceholder: "Citazione da questo post..." + channelPlaceholder: "Visibile in un canale..." + _placeholders: + a: "Che stai facendo?" + b: "È successo qualcosa?" + c: "Che cos'hai in mente?" + d: "Vuoi dire qualcosa?" + e: "Scrivi qualcosa qui..." + f: "Aspetto che tu scriva..." +_profile: + name: "Nome" + username: "Username" + description: "Bio" + youCanIncludeHashtags: "Puoi anche includere hashtag." + metadata: "Informazioni aggiuntive" + metadataEdit: "Modifica informazioni aggiuntive" + metadataDescription: "Puoi pubblicare fino a quattro informazioni aggiuntive sul + profilo. Puoi aggiungere un tag {a} o {l} con {rel} per verificare il link sul + tuo profilo!" + metadataLabel: "Etichetta" + metadataContent: "Contenuto" + changeAvatar: "Modifica immagine profilo" + changeBanner: "Cambia intestazione" + locationDescription: Se inserisci la tua città, agli altri utenti sarà mostrata + l'ora locale in cui ti trovi. +_exportOrImport: + allNotes: "Tutti i post" + followingList: "Account che segui" + muteList: "Account silenziati" + blockingList: "Account bloccati" + userLists: "Liste" + excludeInactiveUsers: Escludi account non attivi + excludeMutingUsers: Escludi account silenziati +_charts: + federation: "Federazione" + apRequest: "Richieste" + usersIncDec: "Variazione del numero di utenti" + usersTotal: "Numero totale di utenti" + activeUsers: "Numero di utenti attivi" + notesIncDec: "Variazione del numero di post" + localNotesIncDec: "Variazione del numero di post locali" + remoteNotesIncDec: "Variazione del numero di post remoti" + notesTotal: "Numero totale di post" + filesIncDec: "Variazione del numero dei file" + filesTotal: "Numero totale di file" + storageUsageIncDec: "Variazione dello spazio occupato" + storageUsageTotal: "Spazio totale occupato" +_instanceCharts: + requests: "Richieste" + users: "Variazione del numero di utenti" + usersTotal: "Numero totale di utenti" + notes: "Differenza nel numero di post" + notesTotal: "Numero totale di post" + ff: "Differenza tra chi segui e chi ti segue " + ffTotal: "Totale tra chi segui e chi ti segue" + cacheSize: "Variazione dello spazio occupato dalla cache" + cacheSizeTotal: "Spazio totale occupato dalla cache" + files: "Variazione del numero di file" + filesTotal: "Numero totale di file" +_timelines: + home: "Home" + local: "Locale" + social: "Sociale" + global: "Federata" + recommended: Suggerito +_pages: + newPage: "Crea pagina" + editPage: "Modifica pagina" + readPage: "Sorgente della pagina" + created: "Pagina creata" + updated: "Pagina aggiornata con successo" + deleted: "Pagina eliminata" + pageSetting: "Impostazioni pagina" + nameAlreadyExists: "Lo URL specificato per la pagina esiste già" + invalidNameTitle: "L'URL scelto per la pagina non è valido" + invalidNameText: "Verifica che il titolo non sia vuoto" + editThisPage: "Modifica questa pagina" + viewSource: "Mostra sorgente" + viewPage: "Visualizza le tue pagine" + like: "Mi piace" + unlike: "Togli \"mi piace\"" + my: "Le mie pagine" + liked: "Pagine che mi piacciono" + featured: "In evidenza" + contents: "Contenuto" + content: "Blocco di contenuti" + variables: "Variabili" + title: "Titolo" + url: "URL della pagina" + summary: "Sommario" + hideTitleWhenPinned: "Nascondi il titolo della pagina quando è fissata in cima al + profilo" + font: "Font" + fontSerif: "Serif" + fontSansSerif: "Sans serif" + eyeCatchingImageSet: "Scegli l'immagine abbinata" + eyeCatchingImageRemove: "Rimuovi l'immagine abbinata" + chooseBlock: "Aggiungi blocco" + selectType: "Seleziona tipo" + enterVariableName: "Digita un nome di variabile" + variableNameIsAlreadyUsed: "Esiste già una variabile con lo stesso nome" + contentBlocks: "Contenuto" + inputBlocks: "Blocchi di input" + specialBlocks: "Speciale" + blocks: + text: "Testo" + textarea: "Area di testo" + section: "Sezione" + image: "Immagini" + button: "Bottone" + if: "Se" + _if: + variable: "Variabile" + post: "Finestra di pubblicazione" + _post: + text: "Contenuto" + canvasId: Canvas ID + attachCanvasImage: Allega una immagine canvas + textInput: "Immissione testo" + _textInput: + name: "Nome della variabile" + text: "Titolo" + default: "Valore predefinito" + textareaInput: "Immissione testo su più righe" + _textareaInput: + name: "Nome della variabile" + text: "Titolo" + default: "Valore predefinito" + numberInput: "Immissione numero" + _numberInput: + name: "Nome della variabile" + text: "Titolo" + default: "Valore predefinito" + _canvas: + width: "Larghezza" + height: "Altezza" + id: Canvas ID + note: "Post integrato" + _note: + id: "Post ID" + idDescription: "In alternativa puoi incollare qui l'URL del post." + detailed: "Vista dettagliata" + switch: "Switch" + _switch: + name: "Nome della variabile" + text: "Titolo" + default: "Default" + counter: "Contatore" + _counter: + name: "Nome della variabile" + text: "Titolo" + inc: "Valore da aggiungere" + _button: + text: "Titolo" + colored: "Colorato" + action: "Azione abbinata al bottone" + _action: + dialog: "Mostra una finestra di dialogo" + _dialog: + content: "Contenuto" + resetRandom: "Reset del seme random" + pushEvent: "Invia un evento" + _pushEvent: + event: "Nome evento" + message: "Messaggio all'attivazione" + variable: "Variabile da inviare" + no-variable: "Nessun contenuto" + callAiScript: "Invoca AiScript" + _callAiScript: + functionName: "Nome della funzione" + radioButton: "Opzione" + _radioButton: + name: "Nome della variabile" + title: "Titolo" + default: "Valore predefinito" + values: Elenco di scelte, una per linea + canvas: Canvas + script: + categories: + comparison: "Comparazione" + random: "Valore casuale" + value: "Valori" + fn: "Funzioni" + list: "Liste" + flow: Controllo del flusso + logical: Operazione logica + text: Operazioni sul testo + convert: Conversioni + operation: Operazione + blocks: + text: "Testo" + multiLineText: "Testo (più righe)" + textList: "Lista di testo" + _strLen: + arg1: "Testo" + _strPick: + arg1: "Testo" + arg2: Posizione della stringa + _strReplace: + arg1: "Testo" + arg3: Sostituisci con + arg2: Testo da sostituire + _strReverse: + arg1: "Testo" + _join: + arg1: "Liste" + arg2: Separatore + _add: + arg1: "A" + arg2: "B" + _subtract: + arg1: "A" + arg2: "B" + _multiply: + arg1: "A" + arg2: "B" + _divide: + arg1: "A" + arg2: "B" + _mod: + arg1: "A" + arg2: "B" + _eq: + arg1: "A" + arg2: "B" + notEq: "A e B sono differenti" + _notEq: + arg1: "A" + arg2: "B" + and: "A AND B" + _and: + arg1: "A" + arg2: "B" + or: "A OR B" + _or: + arg1: "A" + arg2: "B" + _lt: + arg1: "A" + arg2: "B" + _gt: + arg1: "A" + arg2: "B" + _ltEq: + arg1: "A" + arg2: "B" + _gtEq: + arg1: "A" + arg2: "B" + _if: + arg1: "if" + arg2: "then" + arg3: else + random: "Casuale" + _randomPick: + arg1: "Lista" + _dailyRandomPick: + arg1: "Lista" + _seedRandom: + arg2: "Probabilità" + arg1: Seme + _seedRandomPick: + arg2: "Liste" + arg1: Seme + _DRPWPM: + arg1: "Lista di testo" + _pick: + arg1: "Liste" + arg2: Posizione + _listLen: + arg1: "Lista" + _stringToNumber: + arg1: "Testo" + _splitStrByLine: + arg1: "Testo" + ref: "Variabile" + fn: "Funzione" + not: NOT + _not: + arg1: not + _fn: + slots: Slot + arg1: Output + slots-info: Scrivi uno slot per riga + _for: + arg2: Azione + arg1: Numero di ripetizioni + add: Somma + _dailyRandom: + arg1: Probabilità + _dailyRannum: + arg1: Valore minimo + arg2: Valore massimo + strLen: Lunghezza del testo + join: Concatenazione testo + splitStrByLine: Suddividi per riga + subtract: Sottrazione + lt: < A minore di B + gt: '> A maggiore di B' + _seedRannum: + arg1: Seme + arg3: Valora massimo + arg2: Valore minimo + multiply: Moltiplicazione + _round: + arg1: Numero + numberToString: Da numero a testo + _numberToString: + arg1: Numero + strPick: Estrai stringa + _rannum: + arg2: Valore massimo + arg1: Valore minimo + listLen: Calcola la lunghezza della lista + strReverse: Ribalta il testo + _textList: + info: Inserisci un elemento per riga + strReplace: Stringa sostitutiva + ltEq: <= A minore o uguale a B + divide: Divisione + mod: Resto + _random: + arg1: probabilità + randomPick: Scegli a caso da una lista + number: Numero + gtEq: '>= A maggiore o uguale a B' + rannum: Casuale + dailyRannum: Numero casuale (Cambia una volta al giorno per ogni utente) + dailyRandomPick: Scegli a caso da una lista (Cambia una volta al giorno per + ogni utente) + seedRandom: Casuale (con seme) + seedRannum: Numero casuale (con seme) + seedRandomPick: Scegli a caso da una lista (con seme) + aiScriptVar: Variabile AiScript + for: Ciclo for + if: IF + dailyRandom: Casuale (Cambia una volta al giorno per ogni utente) + DRPWPM: Scegli a caso da una lista pesata (Cambia una volta al giorno per ogni + utente) + pick: Seleziona da una lista + stringToNumber: Da testo a numero + round: Arrotondamento decimale + eq: A e B sono uguali + types: + string: "Testo" + array: "Lista" + stringArray: "Lista di testo" + number: Numero + boolean: Vero/Falso + emptySlot: Slot vuoto + typeError: Lo slot {slot} accetta valori di tipo "{expect}", ma il valore fornito + è di tipo "{actual}"! + enviromentVariables: Variabili d'ambiente + thereIsEmptySlot: Lo slot {slot} è vuoto! + pageVariables: Variabili di pagina + argVariables: Slot di input + inspector: Ispettore + alignCenter: Centra gli elementi +_relayStatus: + requesting: "In attesa di approvazione" + accepted: "Approvato" + rejected: "Respinto" +_notification: + fileUploaded: "File caricato correttamente" + youGotMention: "{name} ti ha menzionato" + youGotReply: "{name} ti ha risposto" + youGotQuote: "{name} ti ha citato" + youRenoted: "Boost da {name}" + youGotPoll: "{name} ha votato" + youGotMessagingMessageFromUser: "{name} ti ha mandato un messaggio" + youGotMessagingMessageFromGroup: "{name} ti ha mandato un messaggio nella chat" + youWereFollowed: "ha iniziato a seguirti" + youReceivedFollowRequest: "Hai ricevuto una richiesta di follow" + yourFollowRequestAccepted: "La tua richiesta di follow è stata accettata" + youWereInvitedToGroup: "{userName} ti ha invitato in un gruppo" + _types: + all: "Tutto" + follow: "Nuovi che ti seguono" + mention: "Menzioni" + reply: "Risposte" + renote: "Boost" + quote: "Cita" + reaction: "Reazioni" + pollVote: "Voti ricevuti" + receiveFollowRequest: "Hai una richiesta di follow" + followRequestAccepted: "Richiesta accettata" + groupInvited: "Invito a un gruppo" + app: "Notifiche dalle app collegate" + pollEnded: Fine del sondaggio + _actions: + reply: "Rispondi" + renote: "Boost" + followBack: ha ricambiato il follow e ti segue + reacted: ha aggiunto una reazione al tuo post + renoted: ha dato un boost al tuo post + pollEnded: I risultati del sondaggio sono disponibili + voted: ha votato il tuo sondaggio + emptyPushNotificationMessage: Le notifiche push sono state aggiornate +_deck: + alwaysShowMainColumn: "Mostra sempre la colonna principale" + columnAlign: "Allinea colonne" + addColumn: "Aggiungi colonna" + swapLeft: "Sposta a sinistra" + swapRight: "Sposta a destra" + swapUp: "Sposta in alto" + swapDown: "Sposta in basso" + stackLeft: "Impila a sinistra" + popRight: "Estrai a destra" + profile: "Workspace" + _columns: + main: "Principale" + widgets: "Widget" + notifications: "Notifiche" + tl: "Timeline" + antenna: "Antenna" + list: "Lista" + mentions: "Menzioni" + direct: "Messaggi diretti" + channel: Canale + introduction: Crea l'interfaccia perfetta ordinando liberamente le colonne! + deleteProfile: Rimuovi il workspace + nameAlreadyExists: Esiste già un workspace con questo nome. + widgetsIntroduction: Scegli "Modifica widget" nel menu della colonna per aggiungere + un widget. + newProfile: Nuovo workspace + renameProfile: Rinomina il workspace + introduction2: Fai clic sul + a destra dello schermo per aggiungere nuove colonne + quando vuoi. + configureColumn: Impostazioni della colonna +noThankYou: No grazie +addInstance: Aggiungi un'istanza +deleted: Eliminato +editNote: Modifica post +edited: Modificato {date} {time} +_skinTones: + medium: Medio + yellow: Giallo + light: Chiaro + dark: Scuro + mediumLight: Chiaro medio + mediumDark: Scuro medio +removeReaction: Elimina la tua reazione +showEmojisInReactionNotifications: Mostra le emoji nelle notifiche delle reazioni +flagSpeakAsCatDescription: Il testo dei post sarà "nyanified" quando sei in modalità + gatto +selectInstance: Scegli un server +keepOriginalUploading: Mantieni l'immagine originale +moderation: Moderazione +expandOnNoteClickDesc: Se disabilitato, potrai comunque aprire i post con il tasto + destro del mouse oppure cliccando sull'orario. +userSaysSomethingReasonQuote: '{name} ha citato un post che contiene {reason}' +narrow: Stretto +cropImageAsk: Vuoi ritagliare questa immagine? +recentNDays: Ultimi {n} giorni +noEmailServerWarning: Il server per le email non è configurato. +cannotUploadBecauseInappropriate: Non è stato possibile caricare questo contenuto + perché una o più parti sono state identificate come NSFW. +navbar: Barra di navigazione +activeEmailValidationDescription: Abilita la verifica rigorosa dell'indirizzo email, + che include il controllo di indirizzi usa e getta e dell'effettivo funzionamento. + Se non attivo, viene controllato solo il formato dell'indirizzo email. +customMOTDDescription: Messaggi personalizzati che sono mostrati sullo splash screen + durate il caricamento, uno per riga, saranno scelti a caso ogni volta che l'utente + carica o ricarica la pagina. +recommendedInstances: Server suggeriti +customSplashIconsDescription: Elenco degli URL di icone personalizzate da mostrare + casualmente ogni volta che l'utente carica o ricarica la pagina. Assicurati che + le immagini siano su un URL statico, preferibilmente di dimensioni 192x192. +swipeOnDesktop: Permetti lo swipe su desktop simile alla versione mobile +logoImageUrl: URL del logo +customKaTeXMacro: Macro KaTeX personalizzate +signupsDisabled: Le iscrizioni su questo server al momento non sono possibili, ma + puoi sempre iscriverti su un altro server! Se invece hai un codice di invito per + questo server, inseriscilo qua sotto. +apps: App +expandOnNoteClick: Apri i post con un click +userSaysSomethingReasonReply: '{name} ha risposto a un post che contiene {reason}' +userSaysSomethingReasonRenote: '{name} ha dato un boost al post che contiene {reason}' +forwardReport: Inoltra la segnalazione al server remoto +size: Dimensione +numberOfColumn: Numero di colonne +enableServerMachineStats: Abilita le statistiche hardware del server +enableRecommendedTimeline: Abilita la timeline degli utenti suggeriti +regexpError: Errore nell'espressione regolare +forwardReportIsAnonymous: Al posto del proprio account, nel server remoto verrà mostrato + un account anonimo come autore della segnalazione. +unclip: Togli il clip +instanceSecurity: Sicurezza del server +recommended: Suggerimento +seperateRenoteQuote: Separa i bottoni di boost e citazione +ffVisibility: Visibilità di chi segui e chi ti segue +failedToFetchAccountInformation: Non è possibile ottenere informazioni sull'account +rateLimitExceeded: Limite di richieste superato +document: Documentazione +statusbar: Barra di stato +pleaseSelect: Seleziona un'opzione +cannotUploadBecauseNoFreeSpace: Caricamento fallito per mancanza di spazio sul drive. +migration: Migrazione +moveFromLabel: 'Account remoto da migrare:' +moveFrom: Migra verso questo account da uno vecchio +sendModMail: Invia un avviso di moderazione +isSystemAccount: Questo account è creato e gestito dal sistema. Non modificare, eliminare, + moderare o mettere mano a questo account altrimenti il sistema potrebbe smettere + di funzionare. +speed: Velocità +refreshInterval: 'Intervallo di aggiornamento ' +slow: Lento +customSplashIcons: URL icone personalizzate di caricamento (splash screen) +removeQuote: Rimuovi citazione +removeRecipient: Rimuovi destinatario +removeMember: Rimuovi membro +reactionPickerSkinTone: Tono della pelle preferito negli emoji +_experiments: + postImportsCaption: Permette agli utenti di importare i post da vecchi account Firefish, + Misskey, Mastodon, Akkoma e Pleroma. Potrebbe causare rallentamenti durante il + caricamento. + enablePostImports: Abilita l'importazione di post + title: Esperimenti +moveTo: Migra l'account corrente verso un nuovo account +searchPlaceholder: Cerca in Firefish +listsDesc: Le liste ti permettono di avere delle timeline con utenti specifici. Le + trovi sulla pagina timeline. +flagSpeakAsCat: Parla come un gatto +accountMoved: "L'utente si è trasferito su un nuovo account:" +flagShowTimelineRepliesDescription: Mostra le risposte degli utenti ai post di altri + utenti nella timeline, se attivata. +silencedInstances: Server silenziati +silencedInstancesDescription: Elenca gli hostname dei server che vuoi silenziare. + Tutti gli utenti di questi server saranno trattati come silenziati, possono fare + richieste di follow e non possono menzionare gli account locali che non li seguono. + I server bloccati non sono coinvolti. +hiddenTags: Hashtag nascosti +hiddenTagsDescription: 'Elenca gli hashtag (senza #) che vuoi nascondere da trending + ed esplora. Gli hashtag nascosti restano comunque accessibili in altre condizioni.' +defaultValueIs: 'Predefinito: {value}' +manageGroups: Gestisci i gruppi +antennasDesc: "Le antenne mostrano tutti i nuovi post che rientrano nei criteri che + imposti tu!\nSono visibili dalla pagina della timeline." +advanced: Avanzato +pubSub: Account Pub/Sub +driveCapOverrideLabel: Cambia lo spazio disco per questo utente +typeToConfirm: Inserisci {x} per confermare +check: Verifica +logoutConfirm: Confermi il log out? +lastActiveDate: Ultimo utilizzo +enterSendsMessage: Premi "Invio" nei messaggi per inviare (altrimenti è "Ctrl + Invio") +customMOTD: Messaggi di caricamento personalizzati (splash screen) +replayTutorial: Ripeti il tutorial +enableCustomKaTeXMacro: Abilita le macro KaTeX personalizzate +preventAiLearningDescription: Richiedi ai bot di intelligenza artificiale di terze + parti di non studiare e acquisire il contenuto che carichi, come post e immagini. +preventAiLearning: Impedisci l'acquisizione dei contenuti da parte dei bot IA +confirmToUnclipAlreadyClippedNote: Questo post è già incluso nella clip "{name}". + Vuoi rimuoverlo dalla clip piuttosto? +moveToLabel: 'Account dove vuoi migrare:' +migrationConfirm: "Hai l'assoluta sicurezza di voler migrare il tuo account verso + {account}? Quando lo avrai fatto, non sarai in grado di tornare indietro e non potrai + più usare questo account normalmente.\nInoltre assicurati che l'account su questo + server sia quello da cui vuoi migrare e non il contrario." +moveAccount: Migra l'account! +verifiedLink: Link verificato +_feeds: + copyFeed: Copia il feed + jsonFeed: Feed JSON + rss: RSS + atom: Atom +alt: ALT +themeColor: Colore dell'indicatore del server +instanceDefaultThemeDescription: Inserisci il codice del tema nel formato a oggetti. +failedToUpload: Caricamento fallito +sendPushNotificationReadMessage: Rimuovi le notifiche push dopo che sono state lette +splash: Splash screen di caricamento +noteId: Post ID +noInstances: Non ci sono server +antennaInstancesDescription: Elenca un server per riga +switchAccount: Cambia account +swipeOnMobile: Permetti di fare swipe tra le pagine +showAdminUpdates: Segnala nuove versioni di Firefish (solo admin) +selectChannel: Seleziona un canale +clipsDesc: I clip sono come segnalibri categorizzati e condivisibili. Puoi creare + clip dal menu di ciascun post. +instanceDefaultDarkTheme: Tema scuro predefinito del server +origin: Origine +newer: più recente +older: più vecchio +silenceThisInstance: Silenzia questo server +silenced: Silenziato +keepOriginalUploadingDescription: Salva l'immagine caricata originariamente così com'è. + Se disattivato, al momento del caricamento verrà generata una versione da visualizzare + sul web. +accessibility: Accessibilità +ffVisibilityDescription: Puoi far vedere chi segui e chi ti segue. +continueThread: Continua la conversazione +smartphone: Smartphone +tablet: Tablet +mutePeriod: Durata del silenziamento +updateAvailable: Potrebbe essere disponibile un aggiornamento! +enableAutoSensitive: Riconoscimento automatico contenuto NSFW +enableAutoSensitiveDescription: Permette il riconoscimento dei contenuti NSFW tramite + Machine Learning, quando possibile. Se disattivi questa opzione, considera che potrebbe + essere comunque attiva per tutto il server. +instanceDefaultLightTheme: Tema chiaro predefinito del server +objectStorageS3ForcePathStyle: Usa URL basati sul path per gli endpoint +objectStorageS3ForcePathStyleDesc: Attiva questa opzione per costruire un URL dell'endpoint + nel formato 's3.amazonaws.com//' invece che '.s3.amazonaws.com'. +regexpErrorDescription: "Si è verificato un errore nell'espressione regolare alla + riga {line} del filtro parole {tab}:" +channelFederationWarn: I canali non vengono federati con altri server +secureMode: Modalità sicura (Acquisizione autorizzata) +secureModeInfo: Le richieste dai server remoti non ricevono risposta senza prima una + verifica. +privateMode: Modalità privata +allowedInstancesDescription: Gli host dei server con cui sarà permessa la federazione, + uno per riga (funziona solo in modalità privata). +privateModeInfo: Se abilitata, solo i server nell'elenco potranno essere federati + con questo server. Tutti i post saranno nascosti al pubblico. +allowedInstances: Elenco server permessi +customCssWarn: Questa impostazione dovrebbe essere usata solo se sai cosa stai facendo. + Inserire valori errati potrebbe bloccare il funzionamento del client. +lastCommunication: Ultima comunicazione +breakFollowConfirm: Confermi la rimozione del follower? +makeReactionsPublic: Rendi pubblica la storia di tutte le reazioni +makeReactionsPublicDescription: Questa opzione rende visibile a tutti l'elenco delle + tue reazioni ai post nel passato. +overridedDeviceKind: Tipo di dispositivo +auto: Auto +reflectMayTakeTime: Potrebbe servire del tempo perché il cambiamento abbia effetto. +cropImage: Ritaglia l'immagine +recentNHours: Ultime {n} ore +deleteAccount: Rimuovi l'account +numberOfPageCache: Numero di pagine nella cache +sensitiveMediaDetection: Riconoscimento dei contenuti NSFW +move: Sposta +caption: Descrizione automatica +sendPushNotificationReadMessageCaption: Una notifica con il testo "{emptyPushNotificationMessage}" + sarà mostrata per breve tempo. Potrebbe aumentare il consumo di batteria del tuo + dispositivo. +moveAccountDescription: È un processo irreversibile. Assicurati di aver prima impostato + un alias per questo account sul tuo nuovo server prima di migrare. Inserisci l'account + nel formato @nomeutente@server.com +enableIdenticonGeneration: Abilita la generazione di Identicon +donationLink: Link alla pagina per le donazioni +delete2fa: Disabilita 2FA, autenticazione con 2 passaggi +deletePasskeys: Rimuovi le passkey +pushNotification: Notifiche push +pushNotificationNotSupported: Il tuo browser non supporta le notifiche push +userSaysSomethingReason: '{name} ha detto {reason}' +image: Immagine +video: Video +audio: Audio +thereIsUnresolvedAbuseReportWarning: Ci sono segnalazioni non ancora gestite. +requireAdminForView: Devi avere un account amministratore per vedere questo contenuto. +jumpToPrevious: Vai al precedente +flagShowTimelineReplies: Mostra le risposte nella timeline +cw: Content warning +renoteMute: Silenzia i boost nelle timeline +renoteUnmute: Non silenziare i boost nelle timeline +enableEmojiReactions: Abilita le reazioni con emoji +preferencesBackups: Backup delle preferenze +adminCustomCssWarn: Questa impostazione dovrebbe essere usata solo se ne comprendi + le conseguenze. Valori impropri potrebbero impedire il funzionamento dei client + di TUTTI gli utenti. Assicurati prima che il CSS funzioni correttamente testandolo + nelle tue impostazioni utente. +accentColor: Colore di accento +showPopup: Notifica gli utenti con popup +showWithSparkles: Mostra con le scintille +youHaveUnreadAnnouncements: Hai un annuncio da leggere +_dialog: + charactersBelow: 'La lunghezza in caratteri non è sufficiente! Attuale: {current}/Minimo: + {min}' + charactersExceeded: 'Hai superato il massimo di caratteri! Attuale: {current}/Massimo: + {max}' +cannotUploadBecauseExceedsFileSizeLimit: Il file non è stato caricato perché eccede + lo spazio disponibile. +xl: XL +shuffle: Casuale +subscribePushNotification: Abilita le notifiche push +unsubscribePushNotification: Disabilita le notifiche push +pushNotificationAlreadySubscribed: Le notifiche push sono già abilitate +driveCapOverrideCaption: Reimposta alla capacità predefinita inserendo 0. +numberOfPageCacheDescription: Aumentare questo numero migliorerà l'esperienza degli + utenti ma aumenterà il carico sul server e l'uso di memoria. +type: Tipo +fast: Veloce +remoteOnly: Solo remoto +showAds: Mostra i banner della comunità +showUpdates: Mostra un popup mentre Firefish si aggiorna +recommendedInstancesDescription: Server suggeriti, uno per riga, nell'ordine in cui + saranno mostrati nella timeline dei suggeriti. +beta: Beta +neverShow: Non mostrare più +remindMeLater: Non adesso +noGraze: Per favore disattiva l'estenzione del browser "Graze for Mastodon", perché + interferisce con Firefish. +silencedWarning: Vedi questa pagina perché gli utenti sono su un server che il tuo + admin ha silenziato, quindi potrebbero essere spam. +isBot: Questo account è automatizzato +isLocked: Serve una approvazione per seguire questo account +moveFromDescription: Questa operazione crea un alias del vecchio account in modo che + tu possa migrare su questo nuovo account. Fallo PRIMA di migrare il tuo vecchio + account. Usa il formato @nomeutente@server.com +defaultReaction: Emoji predefinita per le reazioni sui post ricevuti e inviati +license: Licenza +isModerator: Moderatore +isAdmin: Amministratore +isPatron: Firefish Patron +customKaTeXMacroDescription: 'Crea delle macro per scrivere facilmente espressioni + matematiche! La notazione rispetta i comandi definiti in LaTeX ed è scritta come + \newcommand{\ name}{content} oppure \newcommand{\name}[number of arguments]{content}. + Per esempio, \newcommand{\add}[2]{#1 + #2} espanderà \add{3}{foo} come 3 + foo. + Le parentesi graffe che circondano il nome della macro possono essere sostituite + con quelle tonde o quadre. Ciò implica di dover cambiare anche le parentesi degli + argomenti. Una (e solo una) macro può essere definita per ogni riga e non puoi andare + a capo nel mezzo di una definizione. Le linee non valide sono semplicemente ignorate. + Sono supportate solo funzioni semplici di sostituzione nella stringa; sintassi avanzate, + come comandi condizionali, non possono essere usate qui.' +deletePasskeysConfirm: Stai per eliminare in modo irreversibile le passkey e le chiavi + di sicurezza su questo account. Confermi? +delete2faConfirm: Stai per eliminare in modo irreversibile le impostazioni 2FA su + questo account. Confermi? +inputNotMatch: Il valore inserito non corrisponde +_sensitiveMediaDetection: + description: Riduce lo sforzo di moderare il server rilevando automaticamente i + contenuti NSFW tramite Machine Learning. Aumenterà leggermente il carico sul server. + setSensitiveFlagAutomaticallyDescription: Il risultato del riconoscimento verrà + conservato internamente anche quando l'opzione è disattivata. + analyzeVideos: Abilita l'analisi dei video + analyzeVideosDescription: Analizza anche i video oltre che le immagini. Aumenterà + leggermente il carico sul server. + sensitivityDescription: Riducendo l'accuratezza ridurrai i falsi positivi (censura + di contenuti accettabili), aumentandola ridurrai i falsi negativi (approvazione + di contenuti sensibili). + setSensitiveFlagAutomatically: Marca come NSFW + sensitivity: Accuratezza della rilevazione +_preferencesBackups: + nameAlreadyExists: Esiste già un backup con nome "{name}". Scegli un nome diverso. + applyConfirm: Vuoi veramente ripristinare il backup "{name}" su questo dispositivo? + Le impostazioni attuali saranno sovrascritte. + saveConfirm: Salvare in backup come "{name}"? + createdAt: 'Creazione: {date} {time}' + loadFile: Carica da file + list: Backup creati + saveNew: Salva un nuovo backup + apply: Applica a questo dispositivo + save: Salva i cambiamenti + cannotSave: Salvataggio fallito + noBackups: Non esistono backup. Puoi creare un backup delle impostazioni di questo + server usando "Crea un nuovo backup". + inputName: Inserisci il nome del backup + updatedAt: 'Aggiornamento: {date} {time}' + invalidFile: Formato file non valido + cannotLoad: Caricamento fallito + deleteConfirm: Rimuovere il backup "{name}"? + renameConfirm: Rinominare il backup da "{old}" a "{new}"? +_filters: + followersOnly: Solo chi ti segue + fromUser: Dall'utente + withFile: Con file + fromDomain: Dal dominio + notesAfter: Post successivi + notesBefore: Post precedenti + followingOnly: Solo chi segui +_instanceMute: + heading: Elenco di server da silenziare + title: Nascondi i post dai server elencati. + instanceMuteDescription2: Separa andando a capo + instanceMuteDescription: Per silenziare post e boost dai server elencati, saranno + silenziate anche tutte le risposte a quei contenuti. +_messaging: + dms: Privato + groups: Gruppi +confirm: Conferma +importZip: Importa ZIP +exportZip: Esporta ZIP +addRe: Aggiungi "re:" all'inizio di un commento in risposta a un post che ha un content + warning +detectPostLanguage: Riconosci la lingua automaticamente e mostra il bottone per tradurre + verso altre lingue +indexableDescription: Mostra i tuoi post pubblici tramite il sistema di ricerca +indexable: Indicizzabile +languageForTranslation: Linguaggio di traduzione dei post +openServerInfo: Mostra informazioni sul server cliccando sul riquadro del server in + un post +vibrate: Abilita la vibrazione +clickToShowPatterns: Clicca per vedere i pattern del modulo +iconSet: Set di icone +_iconSets: + fill: Con riempimento + regular: Regolare + bold: Grassetto + duotone: Con due toni + light: Sottile +reactions: Reazioni +replies: Risposte +quotes: Citazioni +renotes: Boost +showAttachedNotes: Mostra i post con questo allegato +attachedToNotes: Post con questo allegato +moreUrls: Pagine del menu di aiuto +moreUrlsDescription: "Inserisci con questo formato le pagine che vuoi aggiungere al + menu di aiuto nell'angolo in basso a sinistra:\n\"Nome link\": https://example.com/" +noLanguage: Nessuna lingua +showPreviewByDefault: Mostra sempre l'anteprima del messaggio +replaceWidgetsButtonWithReloadButton: Sostituisci il bottone dei widget con quello + di reload +squareCatAvatars: Mostra avatar quadrati per gli account di gatti +searchEngine: Motore di ricerca della barra MFM +hideFollowButtons: Nascondi i bottoni di follow se sono in una posizione cliccabile + per errore +preventMisclick: Protezione dai click accidentali +forMobile: Mobile +replaceChatButtonWithAccountButton: Sostituisci il bottone chat con quello di cambio + account +postSearch: Ricerca dei post su questo server +showBigPostButton: Mostra un bottone grande per inviare i post +emojiModPerm: Permessi per la gestione delle emoji +_emojiModPerm: + unauthorized: Nessuno + full: Permetti tutto + add: Aggiungi + mod: Aggiungi e modifica +private: Privato +privateDescription: Rendi visibile solo per te +makePrivate: Rendi privato +emojiModPermDescription: "Aggiungi: Permette all'utente di aggiungere emoji personalizzate + con la possibilità di impostare tag/categoria/licenza.\nAggiungi e modifica: Come + \"Aggiungi\", ma in più permette di modificare nome/tag/categoria/licenza delle + emoji personalizzate esistenti.\nPermetti tutto: Come \"Aggiungi e modifica\", ma + in più permette di rimuovere le emoji personalizzate." +makePrivateConfirm: Questa operazione invierà ai server remoti un richiesta di rimozione + e cambierà la visibilità a "Privato". Confermi? +sentFollowRequests: Richieste di follow inviate +searchWords: Parole da cercare / ID o URL da mostrare +enablePullToRefresh: Abilita il "Trascina in basso per aggiornare" +pullToRefreshThreshold: Distanza di trascinamento per ricaricare +pullDownToReload: Trascina in basso per ricaricare +releaseToReload: Rilascia per ricaricare +reloading: Ricaricamento +enableTimelineStreaming: Aggiorna le timeline in automatico +noSentFollowRequests: Non hai inviato richieste di follow +replyMute: Silenzia le risposte nelle timeline +replyUnmute: Non silenziare le risposte nelle timeline +useCdn: Carica gli asset da CDN +useCdnDescription: Carica alcuni asset statici come Twemoji dal CDN JSDelivr invece + che da questo server Firefish. diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml new file mode 100644 index 0000000..4e8c4ed --- /dev/null +++ b/locales/ja-JP.yml @@ -0,0 +1,2092 @@ +_lang_: "日本語" +headlineFirefish: "ずっと無料でオープンソースの非中央集権型ソーシャルメディアプラットフォーム🚀" +introFirefish: "ようこそ!Firefishは、オープンソースの非中央集権型ソーシャルメディアプラットフォームです。\nいま起こっていることを共有したり、あなたについて皆に発信したりしましょう📡\n\ + 「リアクション」機能で、皆の投稿に素早く反応を追加できます👍\n新しい世界を探検しよう🚀" +monthAndDay: "{month}月 {day}日" +search: "検索" +notifications: "通知" +username: "ユーザー名" +password: "パスワード" +forgotPassword: "パスワードを忘れました" +fetchingAsApObject: "連合宇宙から取得中" +ok: "OK" +gotIt: "わかった!" +cancel: "キャンセル" +noThankYou: "やめておく" +enterUsername: "ユーザー名を入力" +renotedBy: "{user}がブースト" +noNotes: "投稿はありません" +noNotifications: "通知はありません" +instance: "サーバー" +settings: "設定" +basicSettings: "基本設定" +otherSettings: "その他の設定" +openInWindow: "ウィンドウで開く" +profile: "プロフィール" +timeline: "タイムライン" +noAccountDescription: "自己紹介はありません" +login: "ログイン" +loggingIn: "ログイン中" +logout: "ログアウト" +signup: "新規登録" +uploading: "アップロード中" +save: "保存" +users: "ユーザー" +addUser: "ユーザーを追加" +addInstance: "サーバーを追加" +favorite: "お気に入り" +favorites: "お気に入り" +unfavorite: "お気に入り解除" +favorited: "お気に入りに登録しました。" +alreadyFavorited: "既にお気に入りに登録されています。" +cantFavorite: "お気に入りに登録できませんでした。" +pin: "ピン留め" +unpin: "ピン留め解除" +copyContent: "内容をコピー" +copyLink: "リンクをコピー" +delete: "削除" +deleteAndEdit: "削除して編集" +deleteAndEditConfirm: "この投稿を削除してもう一度編集しますか?この投稿へのリアクション、ブースト、返信は全て失われます。" +addToList: "リストに追加" +sendMessage: "メッセージを送信" +copyUsername: "ユーザー名をコピー" +searchUser: "ユーザーを検索" +reply: "返信" +replies: "返信" +toReply: "返信" +loadMore: "もっと読み込む" +showMore: "もっと見る" +showLess: "閉じる" +youGotNewFollower: "フォローされました" +receiveFollowRequest: "フォローリクエストされました" +followRequestAccepted: "フォローが承認されました" +mention: "メンション" +mentions: "あなた宛て" +directNotes: "ダイレクト投稿" +importAndExport: "インポートとエクスポート" +import: "インポート" +export: "エクスポート" +files: "ファイル" +download: "ダウンロード" +driveFileDeleteConfirm: "ファイル「{name}」を削除しますか?これにより、添付ファイルとして含まれているすべての投稿から削除されます。" +unfollowConfirm: "{name}さんのフォローを解除しますか?" +exportRequested: "エクスポートをリクエストしました。これには時間がかかる場合があります。エクスポートが終わると、「ドライブ」に追加されます。" +importRequested: "インポートをリクエストしました。これには時間がかかる場合があります。" +lists: "リスト" +noLists: "リストはありません" +note: "投稿" +notes: "投稿" +toPost: "投稿する" +following: "フォロー" +followers: "フォロワー" +followsYou: "フォローされています" +createList: "リスト作成" +manageLists: "リストの管理" +error: "エラー" +somethingHappened: "問題が発生しました" +retry: "再試行" +pageLoadError: "ページの読み込みに失敗しました。" +pageLoadErrorDescription: "これは通常、ネットワークまたはブラウザキャッシュが原因です。キャッシュをクリアするか、しばらく待ってから再度試してください。" +serverIsDead: "サーバーの応答がありません。しばらく待ってから再度試してください。" +youShouldUpgradeClient: "このページを表示するためには、リロードして新しいバージョンのクライアントをご利用ください。" +enterListName: "リスト名を入力" +privacy: "プライバシー" +makeFollowManuallyApprove: "フォローを承認制にする" +defaultNoteVisibility: "デフォルトの公開範囲" +follow: "フォロー" +followRequest: "フォロー申請" +followRequests: "フォロー申請" +unfollow: "フォロー解除" +followRequestPending: "フォロー許可待ち" +enterEmoji: "絵文字を入力" +renote: "ブースト" +renotes: "ブースト" +unrenote: "ブースト解除" +renoted: "ブーストしました。" +cantRenote: "この投稿はブーストできません。" +cantReRenote: "ブーストをブーストすることはできません。" +quote: "引用" +quotes: "引用" +toQuote: "引用する" +pinnedNote: "ピン留めされた投稿" +pinned: "ピン留め" +you: "あなた" +clickToShow: "クリックして表示" +sensitive: "閲覧注意" +add: "追加" +reaction: "リアクション" +reactions: "リアクション" +enableEmojiReactions: "絵文字リアクションを有効にする" +showEmojisInReactionNotifications: "自分の投稿に対するリアクションの通知で絵文字を表示する" +reactionSetting: "ピッカーに表示するリアクション" +reactionSettingDescription2: "ドラッグして並び替え、クリックして削除、+を押して追加します。" +rememberNoteVisibility: "公開範囲を記憶する" +attachCancel: "添付取り消し" +markAsSensitive: "閲覧注意にする" +unmarkAsSensitive: "閲覧注意を解除する" +enterFileName: "ファイル名を入力" +mute: "ミュート" +unmute: "ミュート解除" +renoteMute: "ブーストをミュート" +renoteUnmute: "ブーストのミュートを解除" +replyMute: "リプライをミュート" +replyUnmute: "リプライのミュートを解除" +block: "ブロック" +unblock: "ブロック解除" +suspend: "凍結" +unsuspend: "解凍" +blockConfirm: "ブロックしますか?" +unblockConfirm: "ブロックを解除しますか?" +suspendConfirm: "凍結しますか?" +unsuspendConfirm: "解凍しますか?" +selectList: "リストを選択" +selectAntenna: "アンテナを選択" +selectWidget: "ウィジェットを選択" +selectChannel: "チャンネルを選択" +editWidgets: "ウィジェットを編集" +editWidgetsExit: "編集を終了" +customEmojis: "カスタム絵文字" +emoji: "絵文字" +emojis: "絵文字" +emojiName: "絵文字名" +emojiUrl: "絵文字画像URL" +addEmoji: "絵文字を追加" +settingGuide: "おすすめ設定" +cacheRemoteFiles: "リモートのファイルをキャッシュする" +cacheRemoteFilesDescription: "この設定を無効にすると、リモートファイルをキャッシュせず直リンクします。サーバーのストレージを節約できますが、サムネイルが生成されないので通信量が増加します。" +flagAsBot: "自動化されたアカウントとして設定" +flagAsBotDescription: "このアカウントが自動で投稿する場合は、この設定をオンにします。オンにすると、反応の連鎖を防ぐためのフラグとして他の開発者に役立ったり、Firefishのシステム上での扱いが自動で投稿するアカウントに合ったものになります。" +flagAsCat: "あなたは…猫?😺" +flagAsCatDescription: "このアカウントが猫であることを示す猫モードを有効にするには、このフラグをオンにします。" +flagSpeakAsCat: "猫語で話す" +flagSpeakAsCatDescription: "猫モードが有効の場合にオンにすると、あなたの投稿の「な」を「にゃ」に変換します。" +flagShowTimelineReplies: "タイムラインに投稿の返信を表示する" +flagShowTimelineRepliesDescription: "オンにすると、タイムラインにユーザーの他の投稿への返信も表示されます。" +autoAcceptFollowed: "フォローしているユーザーからのフォロー申請を自動承認" +addAccount: "アカウントを追加" +loginFailed: "ログインに失敗しました" +showOnRemote: "オリジナルのページを開く" +general: "全般" +accountMoved: "このユーザーは新しいアカウントに移行しました" +wallpaper: "壁紙" +setWallpaper: "壁紙を設定" +removeWallpaper: "壁紙を削除" +searchWith: "検索: {q}" +youHaveNoLists: "リストがありません" +followConfirm: "{name}をフォローしますか?" +proxyAccount: "プロキシアカウント" +proxyAccountDescription: "プロキシアカウントは、特定の条件下でユーザーのリモートフォローを代行するアカウントです。例えば、ユーザーがリモートユーザーをリストに入れたとき、リストに入れられたユーザーを誰もフォローしていないとアクティビティがサーバーに配達されないため、代わりにプロキシアカウントがフォローするようにします。" +host: "ホスト" +selectUser: "ユーザーを選択" +selectInstance: "サーバーを選択" +recipient: "宛先" +annotation: "注釈" +federation: "連合" +instances: "サーバー" +registeredAt: "初観測" +latestRequestSentAt: "直近のリクエスト送信" +latestRequestReceivedAt: "直近のリクエスト受信" +latestStatus: "直近のステータス" +storageUsage: "ストレージ使用量" +charts: "チャート" +perHour: "1時間ごと" +perDay: "1日ごと" +stopActivityDelivery: "アクティビティの配送を停止" +blockThisInstance: "このサーバーをブロック" +silenceThisInstance: "このサーバーをサイレンス" +operations: "操作" +software: "ソフトウェア" +version: "バージョン" +metadata: "メタデータ" +monitor: "モニター" +jobQueue: "ジョブキュー" +cpuAndMemory: "CPUとメモリ" +network: "ネットワーク" +disk: "ディスク" +instanceInfo: "サーバー情報" +statistics: "統計" +clearQueue: "キューをクリア" +clearQueueConfirmTitle: "キューをクリアしますか?" +clearQueueConfirmText: "未配達の投稿は配送されなくなります。通常この操作を行う必要はありません。" +clearCachedFiles: "キャッシュをクリア" +clearCachedFilesConfirm: "キャッシュされたリモートファイルをすべて削除しますか?" +blockedInstances: "ブロックしたサーバー" +blockedInstancesDescription: "ブロックしたいサーバーのホストを改行で区切って設定します。ブロックされたサーバーは、このサーバーとやり取りできなくなります。" +silencedInstances: "サイレンスしたサーバー" +silencedInstancesDescription: "サイレンスしたいサーバーのホストを改行で区切って設定します。サイレンスされたサーバーに所属するアカウントはすべて「サイレンス」として扱われ、フォローがすべてリクエストになり、フォロワーでないローカルアカウントにはメンションできなくなります。ブロックしたサーバーには影響しません。" +muteAndBlock: "ミュートとブロック" +mutedUsers: "ミュートしたユーザー" +blockedUsers: "ブロックしたユーザー" +noUsers: "ユーザーはいません" +noInstances: "サーバーがありません" +editProfile: "プロフィールを編集" +noteDeleteConfirm: "この投稿を削除しますか?" +pinLimitExceeded: "これ以上ピン留めできません" +intro: "Firefishのインストールが完了しました!管理者アカウントを作成しましょう。" +done: "完了" +processing: "処理中" +preview: "プレビュー" +default: "デフォルト" +defaultValueIs: "デフォルト: {value}" +noCustomEmojis: "絵文字はありません" +noJobs: "ジョブはありません" +federating: "連合中" +blocked: "ブロック中" +silenced: "サイレンス中" +suspended: "配信停止" +all: "全て" +subscribing: "購読中" +publishing: "配信中" +notResponding: "応答なし" +instanceFollowing: "サーバーのフォロー" +instanceFollowers: "サーバーのフォロワー" +instanceUsers: "このサーバーの利用者" +changePassword: "パスワードを変更" +security: "セキュリティ" +retypedNotMatch: "入力が一致しません。" +currentPassword: "現在のパスワード" +newPassword: "新しいパスワード" +newPasswordRetype: "新しいパスワード(再入力)" +attachFile: "ファイルを添付" +more: "もっと!" +featured: "ハイライト" +usernameOrUserId: "ユーザー名かユーザーID" +noSuchUser: "ユーザーが見つかりません" +lookup: "照会" +announcements: "お知らせ" +announcement: "お知らせ" +imageUrl: "画像URL" +remove: "削除" +removed: "削除しました" +removeAreYouSure: "「{x}」を削除しますか?" +deleteAreYouSure: "「{x}」を削除しますか?" +resetAreYouSure: "リセットしますか?" +saved: "保存しました" +messaging: "チャット" +upload: "アップロード" +keepOriginalUploading: "オリジナル画像を保持" +keepOriginalUploadingDescription: "画像をアップロードする時にオリジナル版を保持します。オフにするとアップロード時にブラウザでWeb公開用画像を生成します。" +fromDrive: "ドライブから" +fromUrl: "URLから" +uploadFromUrl: "URLアップロード" +uploadFromUrlDescription: "アップロードしたいファイルのURL" +uploadFromUrlRequested: "アップロードをリクエストしました" +uploadFromUrlMayTakeTime: "アップロードが完了するまで時間がかかる場合があります。" +explore: "みつける" +messageRead: "既読" +noMoreHistory: "これより過去の履歴はありません" +startMessaging: "チャットを開始" +manageGroups: "グループ管理" +nUsersRead: "{n}人が読みました" +agreeTo: "{0}に同意" +tos: "利用規約" +start: "始める" +home: "ホーム" +remoteUserCaution: "リモートユーザーのため、情報が不完全です。" +activity: "アクティビティ" +images: "画像" +birthday: "誕生日" +yearsOld: "{age}歳" +registeredDate: "登録日" +location: "場所" +theme: "テーマ" +themeForLightMode: "ライトモードで使うテーマ" +themeForDarkMode: "ダークモードで使うテーマ" +light: "ライト" +dark: "ダーク" +lightThemes: "明るいテーマ" +darkThemes: "暗いテーマ" +syncDeviceDarkMode: "デバイスのダークモードと同期する" +drive: "ドライブ" +fileName: "ファイル名" +selectFile: "ファイルを選択" +selectFiles: "ファイルを選択" +selectFolder: "フォルダーを選択" +selectFolders: "フォルダーを選択" +renameFile: "ファイル名を変更" +folderName: "フォルダー名" +createFolder: "フォルダーを作成" +renameFolder: "フォルダー名を変更" +deleteFolder: "フォルダーを削除" +addFile: "ファイルを追加" +emptyDrive: "ドライブは空です" +emptyFolder: "フォルダーは空です" +unableToDelete: "削除できません" +inputNewFileName: "新しいファイル名を入力してください" +inputNewDescription: "新しい説明を入力" +inputNewFolderName: "新しいフォルダ名を入力してください" +circularReferenceFolder: "移動先のフォルダーは、移動するフォルダーのサブフォルダーです。" +hasChildFilesOrFolders: "このフォルダは空でないため、削除できません。" +copyUrl: "URLをコピー" +rename: "名前を変更" +avatar: "アイコン" +banner: "バナー" +nsfw: "閲覧注意" +whenServerDisconnected: "サーバーとの接続が失われたとき" +disconnectedFromServer: "サーバーから切断されました" +reload: "リロード" +doNothing: "なにもしない" +reloadConfirm: "リロードしますか?" +watch: "ウォッチ" +unwatch: "ウォッチ解除" +accept: "許可" +reject: "拒否" +normal: "正常" +instanceName: "サーバー名" +instanceDescription: "サーバーの紹介文" +maintainerName: "管理者の名前" +maintainerEmail: "管理者のメールアドレス" +tosUrl: "利用規約URL" +thisYear: "今年" +thisMonth: "今月" +today: "今日" +dayX: "{day}日" +monthX: "{month}月" +yearX: "{year}年" +pages: "ページ" +enableLocalTimeline: "ローカルタイムラインを有効にする" +enableGlobalTimeline: "グローバルタイムラインを有効にする" +enableRecommendedTimeline: "おすすめタイムラインを有効にする" +disablingTimelinesInfo: "これらのタイムラインを無効化しても、利便性のため管理者およびモデレーターは引き続き利用できます。" +registration: "登録" +enableRegistration: "誰でも新規登録できるようにする" +invite: "招待" +driveCapacityPerLocalAccount: "ローカルユーザーひとりあたりのドライブ容量" +driveCapacityPerRemoteAccount: "リモートユーザーひとりあたりのドライブ容量" +inMb: "メガバイト単位" +iconUrl: "アイコン画像のURL (faviconなど)" +bannerUrl: "バナー画像のURL" +backgroundImageUrl: "背景画像のURL" +basicInfo: "基本情報" +pinnedUsers: "ピン留めユーザー" +pinnedUsersDescription: "「みつける」ページなどにピン留めしたいユーザーを改行で区切って記述します。" +pinnedPages: "ピン留めページ" +pinnedPagesDescription: "サーバーのトップページにピン留めしたいページのパスを改行で区切って記述します。" +pinnedClipId: "ピン留めするクリップのID" +pinnedNotes: "ピン留めされた投稿" +hcaptcha: "hCaptcha" +enableHcaptcha: "hCaptchaを有効にする" +hcaptchaSiteKey: "サイトキー" +hcaptchaSecretKey: "シークレットキー" +recaptcha: "reCAPTCHA" +enableRecaptcha: "reCAPTCHAを有効にする" +recaptchaSiteKey: "サイトキー" +recaptchaSecretKey: "シークレットキー" +avoidMultiCaptchaConfirm: "複数のCaptchaを使用すると干渉を起こす可能性があります。他のCaptchaを無効にしますか?キャンセルして複数のCaptchaを有効化したままにすることも可能です。" +antennas: "アンテナ" +manageAntennas: "アンテナの管理" +name: "名前" +antennaSource: "受信ソース" +antennaKeywords: "受信キーワード" +antennaExcludeKeywords: "除外キーワード" +antennaKeywordsDescription: "スペースで区切るとAND指定になり、改行で区切るとOR指定になります" +notifyAntenna: "新しい投稿を通知する" +withFileAntenna: "ファイルが添付された投稿のみ" +enableServiceworker: "ブラウザへのプッシュ通知を有効にする" +antennaUsersDescription: "ユーザー名を改行で区切って指定します" +antennaInstancesDescription: "サーバーを改行で区切って指定します" +caseSensitive: "大文字小文字を区別する" +withReplies: "返信を含む" +connectedTo: "次のアカウントに接続されています" +notesAndReplies: "投稿と返信" +withFiles: "ファイル付き" +attachedToNotes: "このファイルが添付された投稿" +showAttachedNotes: "このファイルが添付された投稿を見る" +silence: "サイレンス" +silenceConfirm: "サイレンスしますか?" +unsilence: "サイレンス解除" +unsilenceConfirm: "サイレンスを解除しますか?" +popularUsers: "人気のユーザー" +recentlyUpdatedUsers: "最近投稿したユーザー" +recentlyRegisteredUsers: "最近登録したユーザー" +recentlyDiscoveredUsers: "最近発見されたユーザー" +exploreUsersCount: "{count}のユーザーがいます" +exploreFediverse: "Fediverseを探索" +popularTags: "人気のタグ" +userList: "リスト" +about: "情報" +aboutFirefish: "Firefishについて" +administrator: "管理者" +token: "トークン" +twoStepAuthentication: "二段階認証" +moderator: "モデレーター" +moderation: "モデレーション" +nUsersMentioned: "{n}人が投稿" +securityKey: "セキュリティキー" +securityKeyName: "キーの名前" +registerSecurityKey: "セキュリティキーを登録する" +lastUsed: "最後の使用" +unregister: "登録を解除" +passwordLessLogin: "パスワード無しでサインイン" +resetPassword: "パスワードをリセット" +newPasswordIs: "新しいパスワードは「{password}」です" +reduceUiAnimation: "UIのアニメーションを減らす" +share: "共有" +notFound: "見つかりません" +notFoundDescription: "指定されたURLに該当するページはありませんでした。" +uploadFolder: "既定アップロード先" +cacheClear: "キャッシュを削除" +markAsReadAllNotifications: "すべての通知を既読にする" +markAsReadAllUnreadNotes: "すべての投稿を既読にする" +markAsReadAllTalkMessages: "すべてのチャットを既読にする" +help: "ヘルプ" +inputMessageHere: "ここにメッセージを入力" +close: "閉じる" +group: "グループ" +groups: "グループ" +createGroup: "グループを作成" +ownedGroups: "所有グループ" +joinedGroups: "参加しているグループ" +invites: "招待" +groupName: "グループ名" +members: "メンバー" +transfer: "譲渡" +messagingWithUser: "ユーザーとチャット" +messagingWithGroup: "グループでチャット" +title: "タイトル" +text: "テキスト" +enable: "有効にする" +next: "次へ" +retype: "再入力" +noteOf: "{user}の投稿" +inviteToGroup: "グループに招待" +quoteAttached: "引用" +quoteQuestion: "引用として添付しますか?" +noMessagesYet: "まだチャットはありません" +newMessageExists: "新しいメッセージがあります" +onlyOneFileCanBeAttached: "メッセージに添付できるファイルはひとつです" +signinRequired: "続行する前に、サインアップまたはサインインが必要です" +invitations: "招待" +invitationCode: "招待コード" +checking: "確認しています" +available: "利用できます" +unavailable: "利用できません" +usernameInvalidFormat: "a~z、A~Z、0~9、_が使えます" +tooShort: "短すぎます" +tooLong: "長すぎます" +weakPassword: "弱いパスワード" +normalPassword: "普通のパスワード" +veryStrongPassword: "とても強いパスワード" +passwordMatched: "一致しました" +passwordNotMatched: "一致していません" +signinWith: "{x}でログイン" +signinFailed: "ログインできませんでした。ユーザー名とパスワードを確認してください。" +tapSecurityKey: "セキュリティキーにタッチ" +or: "もしくは" +language: "言語" +uiLanguage: "UIの表示言語" +groupInvited: "グループに招待されました" +aboutX: "{x}について" +useOsNativeEmojis: "OSネイティブの絵文字を使用" +disableDrawer: "メニューをドロワーで表示しない" +youHaveNoGroups: "グループがありません" +joinOrCreateGroup: "既存のグループに招待してもらうか、新しくグループを作成してください。" +noHistory: "履歴はありません" +signinHistory: "サインイン履歴" +disableAnimatedMfm: "動きのあるMFMを無効にする" +doing: "やっています" +category: "カテゴリ" +tags: "タグ" +docSource: "このドキュメントのソース" +createAccount: "アカウントを作成" +existingAccount: "既存のアカウント" +regenerate: "再生成" +fontSize: "フォントサイズ" +noFollowRequests: "フォロー申請はありません" +openImageInNewTab: "画像を新しいタブで開く" +dashboard: "ダッシュボード" +local: "ローカル" +remote: "リモート" +total: "合計" +weekOverWeekChanges: "前週比" +dayOverDayChanges: "前日比" +appearance: "アピアランス" +clientSettings: "クライアント設定" +accountSettings: "アカウント設定" +promotion: "プロモーション" +promote: "プロモート" +numberOfDays: "日数" +hideThisNote: "この投稿を非表示" +showFeaturedNotesInTimeline: "タイムラインにおすすめの投稿を表示する" +objectStorage: "オブジェクトストレージ" +useObjectStorage: "オブジェクトストレージを使用" +objectStorageBaseUrl: "Base URL" +objectStorageBaseUrlDesc: "参照に使用するURL。CDNやProxyを使用している場合はそのURL、S3: 'https://.s3.amazonaws.com'、GCS等: + 'https://storage.googleapis.com/'。" +objectStorageBucket: "Bucket" +objectStorageBucketDesc: "使用サービスのbucket名を指定してください。" +objectStoragePrefix: "Prefix" +objectStoragePrefixDesc: "このprefixのディレクトリ下に格納されます。" +objectStorageEndpoint: "Endpoint" +objectStorageEndpointDesc: "S3の場合は空、それ以外の場合は各サービスのendpointを指定してください。''または':'のように指定します。" +objectStorageRegion: "Region" +objectStorageRegionDesc: "'xx-east-1'のようなregionを指定してください。使用サービスにregionの概念がない場合は、空または'us-east-1'にしてください。" +objectStorageUseSSL: "SSLを使用する" +objectStorageUseSSLDesc: "API接続にhttpsを使用しない場合はオフにしてください" +objectStorageUseProxy: "Proxyを利用する" +objectStorageUseProxyDesc: "API接続にproxyを利用しない場合はオフにしてください" +objectStorageSetPublicRead: "アップロード時に'public-read'を設定する" +objectStorageS3ForcePathStyle: "DNS名ではなくてパスを使用する" +objectStorageS3ForcePathStyleDesc: "EndpointのURLを作る際には、'.s3.amazonaws.com'の代わりに's3.amazonaws.com//'のようなスタイルを使用します。" +serverLogs: "サーバーログ" +deleteAll: "全て削除" +showFixedPostForm: "タイムライン上部に投稿フォームを表示する" +newNoteRecived: "新しい投稿があります" +sounds: "サウンド" +listen: "聴く" +none: "なし" +showInPage: "ページで表示" +popout: "ポップアウト" +volume: "音量" +masterVolume: "マスター音量" +details: "詳細" +chooseEmoji: "絵文字を選択" +unableToProcess: "操作を完了できません" +recentUsed: "最近使用" +install: "インストール" +uninstall: "アンインストール" +installedApps: "インストールされたアプリ" +nothing: "まだ何もありません" +installedDate: "インストール日時" +lastUsedDate: "最終使用日時" +state: "状態" +sort: "ソート" +ascendingOrder: "昇順" +descendingOrder: "降順" +scratchpad: "スクラッチパッド" +scratchpadDescription: "スクラッチパッドは、AiScriptの実験環境を提供します。Firefishと対話するコードの記述、実行、結果の確認ができます。" +output: "出力" +script: "スクリプト" +disablePagesScript: "ページのスクリプトを無効にする" +updateRemoteUser: "リモートユーザー情報の更新" +deleteAllFiles: "すべてのファイルを削除" +deleteAllFilesConfirm: "すべてのファイルを削除しますか?" +removeAllFollowing: "フォローを全解除" +removeAllFollowingDescription: "{host}からのフォローをすべて解除します。そのサーバーがもう存在しなくなった場合などに実行してください。" +userSuspended: "このユーザーは凍結されています。" +userSilenced: "このユーザーはサイレンスされています。" +yourAccountSuspendedTitle: "アカウントが凍結されています" +yourAccountSuspendedDescription: "このアカウントは、サーバーの利用規約に違反したなどの理由により、凍結されています。詳細については管理者までお問い合わせください。新しいアカウントを作らないでください。" +menu: "メニュー" +divider: "分割線" +addItem: "項目を追加" +relays: "リレー" +addRelay: "リレーの追加" +inboxUrl: "inboxのURL" +addedRelays: "追加済みのリレー" +serviceworkerInfo: "プッシュ通知を行うには有効にする必要があります。" +deletedNote: "削除された投稿" +invisibleNote: "非公開の投稿" +enableInfiniteScroll: "自動でもっと見る" +visibility: "公開範囲" +poll: "アンケート" +useCw: "内容を隠す" +enablePlayer: "プレイヤーを開く" +disablePlayer: "プレイヤーを閉じる" +expandTweet: "ツイートを展開する" +themeEditor: "テーマエディター" +description: "説明" +describeFile: "説明を追加" +enterFileDescription: "説明を入力" +author: "作者" +leaveConfirm: "未保存の変更があります。破棄しますか?" +manage: "管理" +plugins: "プラグイン" +preferencesBackups: "設定のバックアップ" +deck: "デッキ" +undeck: "デッキ解除" +useBlurEffectForModal: "モーダルにぼかし効果を使用" +useFullReactionPicker: "フル機能リアクションピッカーを使用" +width: "幅" +height: "高さ" +large: "大" +medium: "中" +small: "小" +generateAccessToken: "アクセストークンの発行" +permission: "権限" +enableAll: "全て有効にする" +disableAll: "全て無効にする" +tokenRequested: "アカウントへのアクセス許可" +pluginTokenRequestedDescription: "このプラグインはここで設定した権限を行使できるようになります。" +notificationType: "通知の種類" +edit: "編集" +toEdit: "編集する" +emailServer: "メールサーバー" +enableEmail: "メール配信機能を有効化する" +emailConfigInfo: "メールアドレスの確認やパスワードリセットの際に使います" +email: "メール" +emailAddress: "メールアドレス" +smtpConfig: "SMTP サーバーの設定" +smtpHost: "ホスト" +smtpPort: "ポート" +smtpUser: "ユーザー名" +smtpPass: "パスワード" +emptyToDisableSmtpAuth: "ユーザー名とパスワードを空欄にすることで、SMTP認証を無効化出来ます" +smtpSecure: "SMTP 接続に暗黙的なSSL/TLSを使用する" +smtpSecureInfo: "STARTTLS使用時はオフにします。" +testEmail: "配信テスト" +wordMute: "単語または言語のミュート" +regexpError: "正規表現エラー" +regexpErrorDescription: "{tab}ワードミュートの{line}行目の正規表現にエラーが発生しました:" +instanceMute: "サーバーミュート" +userSaysSomething: "{name}が何かを言いました" +userSaysSomethingReason: "{name}が{reason}と言いました" +userSaysSomethingReasonReply: "{name}が{reason}を含む投稿に返信しました" +userSaysSomethingReasonRenote: "{name}が{reason}を含む投稿をブーストしました" +userSaysSomethingReasonQuote: "{name}が{reason}を含む投稿を引用しました" +makeActive: "アクティブにする" +display: "表示" +copy: "コピー" +metrics: "メトリクス" +overview: "概要" +media: "メディア" +logs: "ログ" +delayed: "遅延" +database: "データベース" +channel: "チャンネル" +create: "作成" +notificationSetting: "通知設定" +notificationSettingDesc: "表示する通知の種別を選択してください。" +useGlobalSetting: "グローバル設定を使う" +useGlobalSettingDesc: "オンにすると、アカウントの通知設定が使用されます。オフにすると、個別に設定できるようになります。" +other: "その他" +regenerateLoginToken: "サインイントークンを再生成" +regenerateLoginTokenDescription: "サインインに使用される内部トークンを再生成します。通常この操作を行う必要はありません。再生成すると、全てのデバイスからサインアウトされます。" +setMultipleBySeparatingWithSpace: "スペースで区切って複数設定できます。" +fileIdOrUrl: "ファイルIDまたはURL" +behavior: "動作" +sample: "サンプル" +abuseReports: "通報" +reportAbuse: "通報" +reportAbuseOf: "{name}を通報する" +fillAbuseReportDescription: "通報理由の詳細を記入してください。対象の投稿がある場合はそのURLも記入してください。" +abuseReported: "内容が送信されました。ご報告ありがとうございました。" +reporter: "通報者" +reporteeOrigin: "通報先" +reporterOrigin: "通報元" +forwardReport: "リモートサーバーに通報を転送する" +forwardReportIsAnonymous: "リモートサーバーからはあなたの情報は見られず、匿名のシステムアカウントとして表示されます。" +send: "送信" +abuseMarkAsResolved: "対応済みにする" +openInNewTab: "新しいタブで開く" +openInSideView: "サイドビューで開く" +defaultNavigationBehaviour: "デフォルトのナビゲーション" +editTheseSettingsMayBreakAccount: "これらの設定を編集するとアカウントが破損する可能性があります。" +instanceTicker: "投稿のサーバー情報" +waitingFor: "{x}を待っています" +random: "ランダム" +system: "システム" +switchUi: "UI切り替え" +desktop: "デスクトップ" +clip: "クリップ" +createNew: "新規作成" +optional: "任意" +createNewClip: "新しいクリップを作成" +unclip: "クリップ解除" +confirmToUnclipAlreadyClippedNote: "この投稿はすでにクリップ「{name}」に含まれています。投稿をこのクリップから除外しますか?" +public: "公開" +i18nInfo: "Firefishは有志によって様々な言語に翻訳されています。{link}で翻訳に協力できます。" +i18nServerInfo: "新しい端末では{language}が既定の言語になります。" +i18nServerChange: "{language}に変更する。" +i18nServerSet: "新しい端末での表示言語を{language}にします。" +manageAccessTokens: "アクセストークンの管理" +accountInfo: "アカウント情報" +notesCount: "投稿の数" +repliesCount: "返信した数" +renotesCount: "ブーストした数" +repliedCount: "返信された数" +renotedCount: "ブーストされた数" +followingCount: "フォロー数" +followersCount: "フォロワー数" +sentReactionsCount: "リアクションした数" +receivedReactionsCount: "リアクションされた数" +pollVotesCount: "アンケートに投票した数" +pollVotedCount: "アンケートに投票された数" +yes: "はい" +no: "いいえ" +driveFilesCount: "ドライブのファイル数" +driveUsage: "ドライブ使用量" +noCrawle: "クローラーによるインデックスを拒否" +noCrawleDescription: "Web検索にあなたのプロフィールや投稿、ページなどのコンテンツを登録(インデックス)しないよう要請します。" +lockedAccountInfo: "フォローを承認制にしても、投稿の公開範囲を「フォロワー」にしない限り、誰でもあなたの投稿を見られます。" +alwaysMarkSensitive: "デフォルトでメディアを閲覧注意にする" +loadRawImages: "添付画像のサムネイルをオリジナル画質にする" +disableShowingAnimatedImages: "アニメーション画像を再生しない" +verificationEmailSent: "確認のメールを送信しました。メールに記載されたリンクにアクセスして、設定を完了してください。" +notSet: "未設定" +emailVerified: "メールアドレスが確認されました" +noteFavoritesCount: "お気に入りの投稿の数" +pageLikesCount: "ページにいいねした数" +pageLikedCount: "ページにいいねされた数" +contact: "連絡先" +useSystemFont: "システムのデフォルトのフォントを使う" +clips: "クリップ" +experimentalFeatures: "実験的機能" +developer: "開発者" +makeExplorable: "アカウントを見つけやすくする" +makeExplorableDescription: "オフにすると、「みつける」にアカウントが載らなくなります。" +showGapBetweenNotesInTimeline: "タイムラインの投稿を離して表示する" +duplicate: "複製" +left: "左" +center: "中央" +wide: "広い" +narrow: "狭い" +reloadToApplySetting: "設定はページリロード後に反映されます。今すぐリロードしますか?" +needReloadToApply: "反映には再起動が必要です。" +showTitlebar: "タイトルバーを表示する" +clearCache: "キャッシュをクリア" +onlineUsersCount: "{n}人がオンライン" +nUsers: "{n}ユーザー" +nNotes: "{n}投稿" +sendErrorReports: "エラーリポートを送信" +sendErrorReportsDescription: "オンにすると、問題が発生したときにエラーの詳細情報がFirefishに共有され、ソフトウェアの品質向上に役立てられます。\n\ + エラー情報には、OSのバージョン、ブラウザの種類、行動履歴などが含まれます。" +myTheme: "マイテーマ" +backgroundColor: "背景" +accentColor: "アクセント" +textColor: "文字" +saveAs: "名前を付けて保存" +advanced: "高度" +value: "値" +createdAt: "作成日時" +updatedAt: "更新日時" +saveConfirm: "保存しますか?" +deleteConfirm: "削除しますか?" +invalidValue: "有効な値ではありません。" +registry: "レジストリ" +closeAccount: "アカウントを閉鎖する" +currentVersion: "現在のバージョン" +latestVersion: "最新のバージョン" +youAreRunningUpToDateClient: "お使いのクライアントは最新です。" +newVersionOfClientAvailable: "新しいバージョンのクライアントが利用可能です。" +usageAmount: "使用量" +capacity: "容量" +inUse: "使用中" +editCode: "コードを編集" +apply: "適用" +receiveAnnouncementFromInstance: "サーバーからのお知らせを受け取る" +emailNotification: "メール通知" +publish: "公開" +inChannelSearch: "チャンネル内検索" +useReactionPickerForContextMenu: "右クリックでリアクションピッカーを開く" +typingUsers: "{users}が入力中" +jumpToSpecifiedDate: "特定の日付にジャンプ" +showingPastTimeline: "過去のタイムラインを表示しています" +clear: "クリア" +markAllAsRead: "全て既読にする" +goBack: "戻る" +unlikeConfirm: "いいねを解除しますか?" +fullView: "フルビュー" +quitFullView: "フルビュー解除" +addDescription: "説明を追加" +userPagePinTip: "個々の投稿のメニューから「ピン留め」を選択することで、ここに投稿を表示できます。" +notSpecifiedMentionWarning: "宛先に含まれていないメンションがあります" +info: "情報" +userInfo: "ユーザー情報" +unknown: "不明" +onlineStatus: "オンライン状態" +hideOnlineStatus: "オンライン状態を隠す" +hideOnlineStatusDescription: "オンライン状態を隠すと、検索などの一部機能において利便性が低下することがあります。" +online: "オンライン" +active: "アクティブ" +offline: "オフライン" +notRecommended: "非推奨" +botProtection: "Botプロテクション" +instanceBlocking: "連合の管理" +selectAccount: "アカウントを選択" +switchAccount: "アカウントを切り替え" +enabled: "有効" +disabled: "無効" +quickAction: "クイックアクション" +user: "ユーザー" +administration: "管理" +accounts: "アカウント" +switch: "切り替え" +noMaintainerInformationWarning: "管理者情報が設定されていません。" +noBotProtectionWarning: "Botプロテクションが設定されていません。" +configure: "設定する" +postToGallery: "ギャラリーへ投稿" +gallery: "ギャラリー" +recentPosts: "最近の投稿" +popularPosts: "人気の投稿" +shareWithNote: "投稿で共有" +ads: "コミュニティバナー" +expiration: "期限" +memo: "メモ" +priority: "優先度" +high: "高" +middle: "中" +low: "低" +emailNotConfiguredWarning: "メールアドレスの設定がされていません。" +ratio: "比率" +secureMode: "セキュアモード (Authorized Fetch)" +instanceSecurity: "サーバーのセキュリティー" +secureModeInfo: "認証情報の無いリモートサーバーからのリクエストに応えません。" +privateMode: "非公開モード" +privateModeInfo: "有効にすると、許可したサーバーのみからリクエストを受け付けます。" +allowedInstances: "許可するサーバー" +allowedInstancesDescription: "許可したいサーバーのホストを改行で区切って設定します。非公開モードだけで有効です。" +previewNoteText: "本文をプレビュー" +customCss: "カスタムCSS" +customCssWarn: "この設定は必ず知識のある方が行ってください。不適切な設定を行うとクライアントが正常に使用できなくなる恐れがあります。" +global: "グローバル" +recommended: "推奨" +squareAvatars: "猫でないアカウントのアイコンを四角形で表示" +squareCatAvatars: "猫のアカウントのアイコンを四角形で表示" +seperateRenoteQuote: "ブーストと引用のボタンを分ける" +sent: "送信" +received: "受信" +searchResult: "検索結果" +hashtags: "ハッシュタグ" +troubleshooting: "トラブルシューティング" +useBlurEffect: "UIにぼかし効果を使用" +learnMore: "詳しく" +misskeyUpdated: "Firefishが更新されました!" +whatIsNew: "更新情報を見る" +translate: "翻訳" +translatedFrom: "{x}から翻訳" +accountDeletionInProgress: "アカウントの削除が進行中です" +usernameInfo: "サーバー上であなたのアカウントを一意に識別するための名前です。アルファベット(a~z, A~Z)、数字(0~9)、およびアンダーバー(_)が使用できます。ユーザー名は後から変更できません。" +aiChanMode: "藍モード(クラシックUI)" +enterSendsMessage: "チャットでEnterキー(Returnキー)を押すと、メッセージが送信されます(オフの場合はCtrl + Enterで送信します)" +keepCw: "CWを維持する" +pubSub: "Pub/Subのアカウント" +lastCommunication: "直近の通信" +resolved: "解決済み" +unresolved: "未解決" +breakFollow: "フォロワーを解除" +breakFollowConfirm: "フォロワーから削除しますか?" +itsOn: "オンになっています" +itsOff: "オフになっています" +emailRequiredForSignup: "アカウント登録にメールアドレスを必須にする" +unread: "未読" +filter: "フィルタ" +controlPanel: "コントロールパネル" +manageAccounts: "アカウントを管理" +makeReactionsPublic: "リアクション一覧を公開する" +makeReactionsPublicDescription: "あなたがしたリアクション一覧を誰でも見られるようにします。" +classic: "中央寄せ" +muteThread: "スレッドをミュート" +unmuteThread: "スレッドのミュートを解除" +ffVisibility: "つながりの公開範囲" +ffVisibilityDescription: "自分のフォロー/フォロワー情報の公開範囲を設定できます。" +continueThread: "さらにスレッドを見る" +deleteAccountConfirm: "このアカウントが削除されます。よろしいですか?" +incorrectPassword: "パスワードが間違っています。" +voteConfirm: "「{choice}」に投票しますか?" +hide: "隠す" +leaveGroup: "グループから抜ける" +leaveGroupConfirm: "「{name}」から抜けますか?" +useDrawerReactionPickerForMobile: "モバイルデバイスのときドロワーで表示" +welcomeBackWithName: "おかえりなさい、{name}さん" +clickToFinishEmailVerification: "[{ok}]を押して、メールアドレスの確認を完了してください。" +overridedDeviceKind: "デバイスタイプ" +smartphone: "スマートフォン" +tablet: "タブレット" +auto: "自動" +showLocalPosts: "ローカルの投稿を表示する場所" +homeTimeline: "ホームタイムライン" +socialTimeline: "ソーシャルタイムライン" +themeColor: "テーマカラー" +size: "サイズ" +numberOfColumn: "列の数" +instanceDefaultLightTheme: "サーバーの標準ライトテーマ" +instanceDefaultDarkTheme: "サーバーの標準ダークテーマ" +instanceDefaultThemeDescription: "オブジェクト形式のテーマコードを記入します。" +mutePeriod: "ミュートする期限" +indefinitely: "無期限" +tenMinutes: "10分" +oneHour: "1時間" +oneDay: "1日" +oneWeek: "1週間" +reflectMayTakeTime: "反映されるまで時間がかかる場合があります。" +failedToFetchAccountInformation: "アカウント情報の取得に失敗しました" +rateLimitExceeded: "レート制限を超えました" +cropImage: "画像のクロップ" +cropImageAsk: "画像をクロップしますか?" +file: "ファイル" +recentNHours: "直近{n}時間" +recentNDays: "直近{n}日" +noEmailServerWarning: "メールサーバーの設定がされていません。" +thereIsUnresolvedAbuseReportWarning: "未対応の通報があります。" +check: "チェック" +driveCapOverrideLabel: "このユーザーのドライブ容量上限を変更" +driveCapOverrideCaption: "0以下を指定すると解除されます。" +requireAdminForView: "閲覧するには管理者アカウントでサインインしている必要があります。" +isSystemAccount: "システムにより自動で作成・管理されているアカウントです。モデレーション・編集・削除を行うとサーバーの動作が不正になる可能性があるため、操作しないでください。" +typeToConfirm: "この操作を行うには {x} と入力してください" +deleteAccount: "アカウント削除" +document: "ドキュメント" +numberOfPageCache: "ページキャッシュ数" +numberOfPageCacheDescription: "多くすると利便性が向上しますが、負荷とメモリ使用量が増えます。" +logoutConfirm: "サインアウトしますか?" +lastActiveDate: "最終利用日時" +statusbar: "ステータスバー" +pleaseSelect: "選択してください" +reverse: "反転" +colored: "色付き" +refreshInterval: "更新間隔" +label: "ラベル" +type: "タイプ" +speed: "速度" +slow: "遅い" +fast: "速い" +sensitiveMediaDetection: "センシティブなメディアの検出" +localOnly: "ローカルのみ" +remoteOnly: "リモートのみ" +failedToUpload: "アップロード失敗" +cannotUploadBecauseInappropriate: "不適切な内容を含む可能性があると判定されたためアップロードできません。" +cannotUploadBecauseNoFreeSpace: "ドライブの空き容量が無いためアップロードできません。" +cannotUploadBecauseExceedsFileSizeLimit: "ファイルサイズの制限を超えているためアップロードできません。" +beta: "ベータ" +enableAutoSensitive: "自動NSFW判定" +enableAutoSensitiveDescription: "利用可能な場合は、機械学習を利用して自動でメディアにNSFWフラグを設定します。この機能をオフにしても、サーバーによっては自動で設定されることがあります。" +activeEmailValidationDescription: "ユーザーのメールアドレスのバリデーションを、捨てアドかどうかや実際に通信可能かどうかなどを判定しより積極的に行います。オフにすると単に文字列として正しいかどうかのみチェックされます。" +showAds: "コミュニティバナーを表示する" +navbar: "ナビゲーションバー" +shuffle: "シャッフル" +account: "アカウント" +move: "移動" +pushNotification: "プッシュ通知" +subscribePushNotification: "プッシュ通知を有効化" +unsubscribePushNotification: "プッシュ通知を停止する" +pushNotificationAlreadySubscribed: "プッシュ通知は有効です" +pushNotificationNotSupported: "ブラウザまたはサーバーがプッシュ通知に非対応です" +sendPushNotificationReadMessage: "通知やメッセージが既読になったらプッシュ通知を削除する" +sendPushNotificationReadMessageCaption: "「{emptyPushNotificationMessage}」という通知が一瞬表示されるようになります。端末の電池消費量が増加する可能性があります。" +adminCustomCssWarn: "この設定は、それが何をするものであるかを知っている場合のみ使用してください。不適切な値を入力すると、クライアントが正常に動作しなくなる可能性があります。ユーザー設定でCSSをテストし、正しく動作することを確認してください。" +customMOTD: "カスタムMOTD(スプラッシュスクリーンメッセージ)" +customMOTDDescription: "ユーザがページをロード/リロードするたびにランダムに表示される、改行で区切られたMOTD(スプラッシュスクリーン)用のカスタムメッセージ" +customSplashIcons: "カスタムスプラッシュスクリーンアイコン" +customSplashIconsDescription: "ユーザがページをロード/リロードするたびにランダムに表示される、改行で区切られたカスタムスプラッシュスクリーンアイコンの + URL。画像は静的なURLで、できればすべて192x192にリサイズしてください。" +showUpdates: "Firefishの更新時にポップアップを表示する" +recommendedInstances: "おすすめサーバー" +recommendedInstancesDescription: "おすすめタイムラインに表示するサーバーを改行区切りで入力してください。" +caption: "自動で説明をつける" +splash: "スプラッシュスクリーン" +updateAvailable: "アップデートがありますよ!" +swipeOnDesktop: "デスクトップでモバイルスタイルのスワイプを可能にする" +logoImageUrl: "ロゴのURL" +showAdminUpdates: "新しいFirefishのバージョンが利用可能なときに通知する(管理者のみ)" +replayTutorial: "もう一度チュートリアルを見る" +migration: "アカウントの引っ越し" +moveTo: "このアカウントを新しいアカウントに引っ越す" +moveToLabel: "引っ越し先のアカウント:" +moveAccount: "引っ越し実行!" +moveAccountDescription: "この操作は取り消せません。まずは引っ越し先のアカウントでこのアカウントに対しエイリアスを作成したことを確認してください。エイリアス作成後、引っ越し先のアカウントをこのように入力してください:@person@server.com" +moveFrom: "別のアカウントからこのアカウントに引っ越す" +moveFromLabel: "引っ越し元のアカウント:" +moveFromDescription: "別のアカウントからこのアカウントにフォロワーを引き継いで引っ越したい場合、ここでエイリアスを作成しておく必要があります。必ず引っ越しを実行する前に作成してください!引っ越し元のアカウントをこのように入力してください:@person@server.com" +migrationConfirm: "本当にこのアカウントを {account} に引っ越しますか?一度引っ越しを行うと取り消せず、二度とこのアカウントを元の状態で使用できなくなります。\n\ + この操作を行う前に引っ越し先のアカウントでエイリアスを作成する必要があります。エイリアスが作成されているか、必ず確認してください。" +defaultReaction: "リモートとローカルの投稿に対するデフォルトの絵文字リアクション" +license: "ライセンス" +customKaTeXMacro: "カスタムKaTeXマクロ" +customKaTeXMacroDescription: "数式入力を楽にするためのマクロを設定しましょう!記法はLaTeXにおけるコマンドの定義と同様に \\newcommand{\\ + name}{content} または \\newcommand{\\add}[2]{#1 + #2} のように記述します。後者の例では \\add{3}{foo} + が 3 + foo に展開されます。また、マクロの名前を囲む波括弧を丸括弧 () および角括弧 [] に変更した場合、マクロの引数に使用する括弧が変更されます。マクロの定義は一行に一つのみで、途中で改行はできません。マクロの定義が無効な行は無視されます。文字列を単純に置換する機能のみに対応していて、条件分岐などの高度な構文は使用できません。" +enableCustomKaTeXMacro: "カスタムKaTeXマクロを有効にする" +preventAiLearning: "AIによる学習を防止" +preventAiLearningDescription: "投稿した文章や、添付した画像などのコンテンツを学習の対象にしないようAIに要求します。これはnoaiフラグをHTMLレスポンスに含めることによって実現されます。" +noGraze: "ブラウザの拡張機能「Graze for Mastodon」は、Firefishの動作を妨げるため、無効にしてください。" +enableServerMachineStats: "サーバーのマシン情報を公開する" +enableIdenticonGeneration: "ユーザーごとのIdenticon生成を有効にする" +showPopup: "ポップアップを表示してユーザーに知らせる" +showWithSparkles: "タイトルをキラキラさせる" +youHaveUnreadAnnouncements: "未読のお知らせがあります" +neverShow: "今後表示しない" +remindMeLater: "また後で" +addRe: "閲覧注意の投稿への返信で、注釈の先頭に\"re:\"を追加する" +languageForTranslation: "投稿翻訳に使用する言語" +detectPostLanguage: "投稿の言語を自動検出し、外国語の投稿に翻訳ボタンを表示する" +iconSet: "アイコンのスタイル" +useCdn: "CDNのアセットを利用する" +useCdnDescription: "このFirefishサーバーからではなくJSDelivr CDNからTwiemojiなどのアセットを読み込みます。" +enablePullToRefresh: "「下に引っ張って再読み込み」を有効にする" +pullToRefreshThreshold: "再読み込みするために引っ張る距離" +pullDownToReload: "下に引っ張って再読み込み" +releaseToReload: "離して再読み込み" +reloading: "読み込み中" +enableTimelineStreaming: "タイムラインを自動で更新する" +searchWords: "検索語句・照会するIDやURL" +searchWordsDescription: "投稿を検索するには、ここに検索語句を入力してください。空白区切りでAND検索になり、ORを挟むとOR検索になります。\n + 例えば「朝 夜」と入力すると「朝」と「夜」が両方含まれた投稿を検索し、「朝 OR 夜」と入力すると「朝」または「夜」(または両方)が含まれた投稿を検索します。また、「眠い + -朝 -夜」のように特定の単語を除外した検索も可能です。\n 「(朝 OR 夜) 眠い -朝ごはん」のように、AND・OR・除外の条件を組み合わせることもできます。\n\ + 空白を含む文字列をAND検索ではなくそのまま検索したい場合、\"明日 買うもの\" のように二重引用符 (\") で囲む必要があります。\n\n特定のユーザーや投稿のページに飛びたい場合には、この欄にID + (@user@example.com) や投稿のURLを入力し「照会」を押してください。「検索」を押すとそのIDやURLが文字通り含まれる投稿を検索します。" +searchUsers: "投稿元(省略可)" +searchUsersDescription: "投稿検索で投稿者を絞りたい場合、@user@example.com(ローカルユーザーなら @user)の形式で投稿者のIDを入力してください。ユーザーIDではなくドメイン名 + (example.com) を指定すると、そのサーバーの投稿を検索します。\n\nme とだけ入力すると、自分の投稿を検索します。この検索結果には未収載・フォロワー限定・ダイレクト・秘密を含む全ての投稿が含まれます。\n + \nlocal とだけ入力すると、ローカルサーバーの投稿を検索します。" +searchRange: "投稿期間(省略可)" +searchRangeDescription: "投稿検索で投稿期間を絞りたい場合、20220615-20231031 のような形式で投稿期間を入力してください。今年の日付を指定する場合には年の指定を省略できます(0105-0106 + や 20231105-0110 のように)。\n\n開始日と終了日のどちらか一方は省略可能です。例えば -0102 とすると今年1月2日までの投稿のみを、20231026- + とすると2023年10月26日以降の投稿のみを検索します。" +searchPostsWithFiles: "添付ファイルのある投稿のみ" +searchCwAndAlt: "閲覧注意の注釈と添付ファイルの代替テキストも検索する" +publishTimelines: "非ログインユーザーにもタイムラインを公開する" +publishTimelinesDescription: "有効にすると、{url} でローカルタイムラインとグローバルタイムラインが公開されます。" +noAltTextWarning: "説明が書かれていない添付ファイルがあります。書き忘れてはいませんか?" +showNoAltTextWarning: "説明が書かれていない添付ファイルを投稿しようとした場合に警告する" + +_sensitiveMediaDetection: + description: "機械学習を使って自動でセンシティブなメディアを検出し、モデレーションに役立てられます。サーバーの負荷が少し増えます。" + sensitivity: "検出感度" + sensitivityDescription: "感度を低くすると、誤検知(偽陽性)が減ります。感度を高くすると、検知漏れ(偽陰性)が減ります。" + setSensitiveFlagAutomatically: "NSFWフラグを設定する" + setSensitiveFlagAutomaticallyDescription: "この設定をオフにしても内部的に判定結果は保持されます。" + analyzeVideos: "動画の解析を有効化" + analyzeVideosDescription: "静止画に加えて動画も解析するようにします。サーバーの負荷が少し増えます。" +_emailUnavailable: + used: "既に使用されています" + format: "形式が正しくありません" + disposable: "恒久的に使用可能なアドレスではありません" + mx: "正しいメールサーバーではありません" + smtp: "メールサーバーが応答しません" +_ffVisibility: + public: "公開" + followers: "フォロワーだけに公開" + private: "非公開" +_signup: + almostThere: "ほとんど完了です" + emailAddressInfo: "あなたが使っているメールアドレスを入力してください。メールアドレスが公開されることはありません。" + emailSent: "入力されたメールアドレス({email})宛に確認のメールが送信されました。メールに記載されたリンクにアクセスすると、アカウントの作成が完了します。" +_accountDelete: + accountDelete: "アカウントの削除" + mayTakeTime: "アカウントの削除は負荷のかかる処理であるため、作成したコンテンツの数やアップロードしたファイルの数が多いと完了までに時間がかかることがあります。" + sendEmail: "アカウントの削除が完了した際に、登録されていたメールアドレス宛に通知を送信します。" + requestAccountDelete: "アカウント削除をリクエスト" + started: "削除処理を開始しました。" + inProgress: "削除が進行中" +_ad: + back: "戻る" + adsBy: "バナーで{by}" + reduceFrequencyOfThisAd: "このバナーの表示頻度を下げる" +_forgotPassword: + enterEmail: "アカウントに登録したメールアドレスを入力してください。そのアドレス宛てに、パスワードリセット用のリンクが送信されます。" + ifNoEmail: "メールアドレスを登録していない場合は、管理者までお問い合わせください。" + contactAdmin: "このサーバーではメールアドレスの登録がサポートされていないため、パスワードリセットを行う場合は管理者までお問い合わせください。" +_gallery: + my: "自分の投稿" + liked: "いいねした投稿" + like: "いいね!" + unlike: "いいね解除" +_email: + _follow: + title: "フォローされました" + _receiveFollowRequest: + title: "フォローリクエストを受け取りました" +_plugin: + install: "プラグインのインストール" + installWarn: "信頼できないプラグインはインストールしないでください。" + manage: "プラグインの管理" +_preferencesBackups: + list: "作成したバックアップ" + saveNew: "新規保存" + loadFile: "ファイルを読み込み" + apply: "このデバイスに適用" + save: "上書き保存" + inputName: "バックアップ名を入力" + cannotSave: "保存できません" + nameAlreadyExists: "バックアップ名「{name}」は既に存在します。違う名前を指定してください。" + applyConfirm: "バックアップ「{name}」を現在のデバイスに適用しますか?現在のデバイス設定は失われます。" + saveConfirm: "{name}に上書き保存しますか?" + deleteConfirm: "{name}を削除しますか?" + renameConfirm: "「{old}」を「{new}」に変更しますか?" + noBackups: "バックアップはありません。「新規保存」で現在のクライアント設定をサーバーに保存できます。" + createdAt: "作成日時: {date} {time}" + updatedAt: "更新日時: {date} {time}" + cannotLoad: "読み込めません。" + invalidFile: "ファイル形式が違います。" +_registry: + scope: "スコープ" + key: "キー" + keys: "キー" + domain: "ドメイン" + createKey: "キーを作成" +_aboutFirefish: + about: "Firefishは、2022年に生まれたThatOneCalculatorによるMisskeyのforkです。" + contributors: "主なコントリビューター" + allContributors: "全てのコントリビューター" + misskeyContributors: "フォーク元のMisskeyの主なコントリビューター" + source: "ソースコード" + translation: "Firefishを翻訳" + donate: "Firefishに寄付" + pleaseDonateToFirefish: Firefish開発への寄付をご検討ください。 + pleaseDonateToHost: また、このサーバー {host} の運営者への寄付もご検討ください。 + donateHost: '{host} に寄付する' + donateTitle: Firefishを気に入りましたか? +_nsfw: + respect: "閲覧注意のメディアは隠す" + ignore: "閲覧注意のメディアを隠さない" + force: "常にメディアを隠す" +_mfm: + cheatSheet: "MFMチートシート" + intro: "MFMは、MisskeyやFirefish、Akkomaなどの様々な場所で使用できるマークアップ言語です。ここでは、MFMで使用可能な構文一覧が確認できます。" + dummy: "FirefishでFediverseの世界が広がります" + mention: "メンション" + mentionDescription: "アットマーク + ユーザー名で、特定のユーザーを示せます。" + hashtag: "ハッシュタグ" + hashtagDescription: "ナンバーサイン + タグで、ハッシュタグを示せます。" + url: "URL" + urlDescription: "URLを表示できます。" + link: "リンク" + linkDescription: "文章の特定の範囲を、URLに紐づけられます。" + bold: "太字" + boldDescription: "文字を太く表示して強調できます。" + small: "目立たなく" + smallDescription: "内容を小さく・薄く表示させられます。" + center: "中央寄せ" + centerDescription: "内容を中央寄せで表示させられます。" + inlineCode: "コード(インライン)" + inlineCodeDescription: "プログラムなどのコードをインラインでシンタックスハイライトします。" + blockCode: "コード(ブロック)" + blockCodeDescription: "複数行のプログラムなどのコードをブロックでシンタックスハイライトします。" + inlineMath: "数式(インライン)" + inlineMathDescription: "数式(KaTeX)をインラインで表示します。" + blockMath: "数式(ブロック)" + blockMathDescription: "数式(KaTeX)をブロックで表示します。" + quote: "引用" + quoteDescription: "内容が引用であることを示せます。" + emoji: "カスタム絵文字" + emojiDescription: "コロンでカスタム絵文字名を囲むと、カスタム絵文字を表示させられます。" + search: "検索" + searchDescription: "検索ボックスを表示させられます。" + flip: "反転" + flipDescription: "内容を上下または左右に反転させます。" + jelly: "アニメーション(びよんびよん)" + jellyDescription: "びよんびよんするアニメーションを与えます。" + tada: "アニメーション(じゃーん)" + tadaDescription: "ジャーン!という感じのアニメーションを与えます。" + jump: "アニメーション(ジャンプ)" + jumpDescription: "飛び跳ねるようなアニメーションを与えます。" + bounce: "アニメーション(バウンド)" + bounceDescription: "ぽよんぽよん弾むようなアニメーションを与えます。" + shake: "アニメーション(ぶるぶる)" + shakeDescription: "ぶるぶる震えるアニメーションを与えます。" + twitch: "アニメーション(ブレ)" + twitchDescription: "激しくブレるアニメーションを与えます。" + spin: "アニメーション(回転)" + spinDescription: "回転するアニメーションを与えます。" + x2: "大きく" + x2Description: "内容を大きく表示します。" + x3: "とても大きく" + x3Description: "内容をとても大きく表示します。" + x4: "究極に大きく" + x4Description: "内容を究極に大きく表示します。" + blur: "ぼかし" + blurDescription: "内容をぼかすことができます。ポインターを上に乗せるとはっきり見えるようになります。" + font: "フォント" + fontDescription: "内容のフォントを指定できます。" + rainbow: "レインボー" + rainbowDescription: "内容をレインボーにします。" + sparkle: "キラキラ" + sparkleDescription: "キラキラしたパーティクルのエフェクトを追加します。" + rotate: "回転" + rotateDescription: "指定した角度で回転させます。" + plain: "プレーン" + plainDescription: "内側の構文を全て無効にします。" + position: 位置 + stop: MFMを停止 + alwaysPlay: MFMアニメーションを自動再生する + play: MFMを再生 + warn: MFMアニメーションは激しい動きを含む可能性があります。 + positionDescription: 位置を指定した値だけずらします。 + foreground: 文字色 + backgroundDescription: 背景の色を変更します。 + background: 背景色 + scale: 拡大・縮小 + scaleDescription: 大きさを指定した値に拡大・縮小します。 + foregroundDescription: 文字の色を変更します。 + fade: フェード + fadeDescription: フェードインとフェードアウトする。 + crop: 切り抜き + cropDescription: 内容を切り抜く。 + advancedDescription: オフにすると、アニメーション再生中を除いて基本的なMFMだけ表示します。 + advanced: 高度なMFM +_instanceTicker: + none: "表示しない" + remote: "リモートユーザーに表示" + always: "常に表示" +_serverDisconnectedBehavior: + reload: "自動でリロード" + dialog: "ダイアログで警告" + quiet: "控えめに警告" + nothing: "何もしない" +_channel: + create: "チャンネルを作成" + edit: "チャンネルを編集" + setBanner: "バナーを設定" + removeBanner: "バナーを削除" + featured: "トレンド" + owned: "管理中" + following: "フォロー中" + usersCount: "{n}人が参加中" + notesCount: "{n}投稿があります" + nameAndDescription: "名前と説明" + nameOnly: "名前のみ" +_messaging: + dms: "プライベート" + groups: "グループ" +_menuDisplay: + sideFull: "横" + sideIcon: "横(アイコン)" + top: "上部" + hide: "隠す" +_wordMute: + muteWords: "ミュートするワード" + mutePatterns: "ミュートするパターン" + muteLangs: "ミュートする言語" + muteWordsDescription: "スペースで区切るとAND指定になり、改行で区切るとOR指定になります。" + muteWordsDescription2: "キーワードをスラッシュで囲むと正規表現になります。" + muteLangsDescription: "OR 条件の場合はスペースまたは改行で区切ります。" + muteLangsDescription2: "言語コードを使用します。例: en, fr, ja, zh." + softDescription: "指定した条件の投稿をタイムラインから隠します。" + langDescription: "設定した言語に一致する投稿をタイムラインから非表示にします。" + hardDescription: "指定した条件の投稿をタイムラインに追加しないようにします。追加されなかった投稿は、条件を変更しても除外されたままになります。" + soft: "ソフト" + lang: "言語" + hard: "ハード" + mutedNotes: "ミュートされた投稿" +_instanceMute: + instanceMuteDescription: "ミュートしたサーバーのユーザーへの返信を含めて、設定したサーバーの全ての投稿とブーストをミュートします。" + instanceMuteDescription2: "改行で区切って設定します" + title: "設定したサーバーの投稿を隠します。" + heading: "ミュートするサーバー" +_theme: + explore: "テーマを探す" + install: "テーマのインストール" + manage: "テーマの管理" + code: "テーマコード" + description: "説明" + installed: "{name}をインストールしました" + installedThemes: "インストールされたテーマ" + builtinThemes: "標準のテーマ" + alreadyInstalled: "そのテーマは既にインストールされています" + invalid: "テーマの形式が間違っています" + make: "テーマを作る" + base: "ベース" + addConstant: "定数を追加" + constant: "定数" + defaultValue: "デフォルト値" + color: "色" + refProp: "プロパティを参照" + refConst: "定数を参照" + key: "キー" + func: "関数" + funcKind: "関数の種類" + argument: "引数" + basedProp: "元にするプロパティの名前" + alpha: "不透明度" + darken: "暗さ" + lighten: "明るさ" + inputConstantName: "定数名を入力してください" + importInfo: "ここにテーマコードを貼り付けて、エディターにインポートできます" + deleteConstantConfirm: "定数 {const} を削除しても良いですか?" + keys: + accent: "アクセント" + bg: "背景" + fg: "文字" + focus: "フォーカス" + indicator: "インジケーター" + panel: "パネル" + shadow: "影" + header: "ヘッダー" + navBg: "サイドバーの背景" + navFg: "サイドバーの文字" + navHoverFg: "サイドバー文字(ホバー)" + navActive: "サイドバー文字(アクティブ)" + navIndicator: "サイドバーのインジケーター" + link: "リンク" + hashtag: "ハッシュタグ" + mention: "メンション" + mentionMe: "あなた宛てメンション" + renote: "ブースト" + modalBg: "モーダルの背景" + divider: "分割線" + scrollbarHandle: "スクロールバーの取っ手" + scrollbarHandleHover: "スクロールバーの取っ手(ホバー)" + dateLabelFg: "日付ラベルの文字" + infoBg: "情報の背景" + infoFg: "情報の文字" + infoWarnBg: "警告の背景" + infoWarnFg: "警告の文字" + cwBg: "CW ボタンの背景" + cwFg: "CW ボタンの文字" + cwHoverBg: "CW ボタンの背景 (ホバー)" + toastBg: "通知トーストの背景" + toastFg: "通知トーストの文字" + buttonBg: "ボタンの背景" + buttonHoverBg: "ボタンの背景 (ホバー)" + inputBorder: "入力ボックスの縁取り" + listItemHoverBg: "リスト項目の背景 (ホバー)" + driveFolderBg: "ドライブフォルダーの背景" + wallpaperOverlay: "壁紙のオーバーレイ" + badge: "バッジ" + messageBg: "チャットの背景" + accentDarken: "アクセント (暗め)" + accentLighten: "アクセント (明るめ)" + fgHighlighted: "強調された文字" +_sfx: + note: "投稿" + noteMy: "投稿(自分)" + notification: "通知" + chat: "チャット" + chatBg: "チャット(バックグラウンド)" + antenna: "アンテナ受信" + channel: "チャンネル通知" +_ago: + future: "未来" + justNow: "たった今" + secondsAgo: "{n}秒前" + minutesAgo: "{n}分前" + hoursAgo: "{n}時間前" + daysAgo: "{n}日前" + weeksAgo: "{n}週間前" + monthsAgo: "{n}ヶ月前" + yearsAgo: "{n}年前" +_time: + second: "秒" + minute: "分" + hour: "時間" + day: "日" +_tutorial: + title: "Firefishの使い方" + step1_1: "ようこそ!" + step1_2: "使い始める前に、いくつか設定を済ませましょう。すぐできますよ!" + step2_1: "最初に、あなたのプロフィールを作りましょう。" + step2_2: "プロフィールを設定することで、他の人があなたの投稿を見たり、フォローしたりするときの助けになります。" + step3_1: "それでは、何人かフォローしてみましょう!" + step3_2: "あなたのホームとソーシャルタイムラインは、あなたが誰をフォローしているかで決まります。まずは、いくつかのアカウントをフォローしてみましょう。\n\ + プロフィールの右上にある丸い+ボタンをクリックするとフォローできます。" + step4_1: "投稿してみましょう!" + step4_2: "最初は{introduction}に投稿したり、シンプルに「こんにちは、アカウント作ってみました!」などの投稿をする人もいます。" + step5_1: "タイムライン、タイムラインだらけ!" + step5_2: "あなたのサーバーでは{timelines}種類のタイムラインが有効になっています。" + step5_3: "ホーム{icon}タイムラインでは、あなたがフォローしているアカウントの投稿を見られます。" + step5_4: "ローカル{icon}タイムラインでは、このサーバーにいるみんなの投稿を見られます。" + step5_5: "ソーシャル{icon}タイムラインでは、ホームタイムラインとローカルタイムラインの投稿が両方表示されます。" + step5_6: "おすすめ{icon}タイムラインでは、管理人がおすすめするサーバーの投稿を見られます。" + step5_7: "グローバル{icon}タイムラインでは、接続している他のすべてのサーバーからの投稿を見られます。" + step6_1: "じゃあ、ここはどんな場所なの?" + step6_2: "実は、あなたはただFirefishに参加しただけではありません。ここは、何千もの相互接続されたサーバーが構成する Fediverse への入口です。" + step6_3: "それぞれのサーバーでは必ずしもFirefishが使われているわけではなく、異なる動作をするサーバーもあります。しかし、あなたは他のサーバーのアカウントもフォローしたり、返信・ブーストができます。一見難しそうですが大丈夫!すぐ慣れます。" + step6_4: "これで完了です。お楽しみください!" +_2fa: + alreadyRegistered: "既に設定は完了しています。" + registerTOTP: "認証アプリの設定を開始" + step1: "まず、{a}や{b}などの認証アプリをお使いのデバイスにインストールします。" + step2: "次に、表示されているQRコードをアプリでスキャンします。" + step2Click: "QRコードをクリックすると、お使いの端末にインストールされている認証アプリやキーリングに登録できます。" + step2Url: "デスクトップアプリでは次のURIを入力します:" + step3Title: "確認コードを入力" + step3: "アプリに表示されている確認コード(トークン)を入力して完了です。" + step4: "これからログインするときも、同じように確認コードを入力します。" + securityKeyNotSupported: "お使いのブラウザはセキュリティキーに対応していません。" + securityKeyInfo: "FIDO2をサポートするハードウェアセキュリティキー、端末の生体認証やPINロック、パスキーといった、WebAuthn由来の鍵を登録します。" + chromePasskeyNotSupported: "Chromeのパスキーは現在サポートしていません。" + registerSecurityKey: "セキュリティキー・パスキーを登録する" + securityKeyName: "キーの名前を入力" + tapSecurityKey: "ブラウザの指示に従い、セキュリティキーやパスキーを登録してください" + removeKey: "セキュリティキーを削除" + removeKeyConfirm: "{name}を削除しますか?" + token: "多要素認証トークン" +_permissions: + "read:account": "アカウントの情報を見る" + "write:account": "アカウントの情報を変更する" + "read:blocks": "ブロックを見る" + "write:blocks": "ブロックを操作する" + "read:drive": "ドライブを見る" + "write:drive": "ドライブを操作する" + "read:favorites": "お気に入りを見る" + "write:favorites": "お気に入りを操作する" + "read:following": "フォローの情報を見る" + "write:following": "フォロー・フォロー解除する" + "read:messaging": "チャットを見る" + "write:messaging": "チャットを操作する" + "read:mutes": "ミュートを見る" + "write:mutes": "ミュートを操作する" + "write:notes": "投稿を作成・削除する" + "read:notifications": "通知を見る" + "write:notifications": "通知を操作する" + "read:reactions": "リアクションを見る" + "write:reactions": "リアクションを操作する" + "write:votes": "投票する" + "read:pages": "ページを見る" + "write:pages": "ページを操作する" + "read:page-likes": "ページのいいねを見る" + "write:page-likes": "ページのいいねを操作する" + "read:user-groups": "ユーザーグループを見る" + "write:user-groups": "ユーザーグループを操作する" + "read:channels": "チャンネルを見る" + "write:channels": "チャンネルを操作する" + "read:gallery": "ギャラリーを見る" + "write:gallery": "ギャラリーを操作する" + "read:gallery-likes": "ギャラリーのいいねを見る" + "write:gallery-likes": "ギャラリーのいいねを操作する" +_auth: + shareAccess: "「{name}」がアカウントにアクセスすることを許可しますか?" + shareAccessAsk: "アカウントへのアクセスを許可しますか?" + permissionAsk: "このアプリケーションは次の権限を要求しています:" + pleaseGoBack: "アプリケーションに戻り続行してください" + callback: "アプリケーションに戻っています" + denied: "アクセスを拒否しました" + copyAsk: "以下の認証コードをアプリケーションにコピーしてください:" + allPermissions: 全てのアクセス権 +_antennaSources: + all: "全ての投稿" + homeTimeline: "フォローしているユーザーの投稿" + users: "指定した一人または複数のユーザーの投稿" + userList: "指定したリストのユーザーの投稿" + userGroup: "指定したグループのユーザーの投稿" + instances: "指定したサーバーの全ユーザーの投稿" +_weekday: + sunday: "日曜日" + monday: "月曜日" + tuesday: "火曜日" + wednesday: "水曜日" + thursday: "木曜日" + friday: "金曜日" + saturday: "土曜日" +_widgets: + memo: "付箋" + notifications: "通知" + timeline: "タイムライン" + calendar: "カレンダー" + trends: "トレンド" + clock: "時計" + rss: "RSSリーダー" + rssTicker: "RSSティッカー" + activity: "アクティビティ" + photos: "フォト" + digitalClock: "デジタル時計" + unixClock: "UNIX時計" + federation: "連合" + instanceCloud: "サーバークラウド" + postForm: "投稿フォーム" + slideshow: "スライドショー" + button: "ボタン" + onlineUsers: "オンラインユーザー" + jobQueue: "ジョブキュー" + serverMetric: "サーバーメトリクス" + aiscript: "AiScriptコンソール" + userList: "ユーザーリスト" + _userList: + chooseList: "リストを選択" + serverInfo: サーバー情報 +_cw: + hide: "隠す" + show: "もっと見る" + chars: "{count}文字" + files: "{count}ファイル" +_poll: + noOnlyOneChoice: "選択肢は最低2つ必要です" + choiceN: "選択肢{n}" + noMore: "これ以上追加できません" + canMultipleVote: "複数回答可" + expiration: "期限" + infinite: "無期限" + at: "日時指定" + after: "経過指定" + deadlineDate: "期日" + deadlineTime: "時間" + duration: "期間" + votesCount: "{n}票" + totalVotes: "計{n}票" + vote: "投票する" + showResult: "結果を見る" + voted: "投票済み" + closed: "終了済み" + remainingDays: "終了まであと{d}日{h}時間" + remainingHours: "終了まであと{h}時間{m}分" + remainingMinutes: "終了まであと{m}分{s}秒" + remainingSeconds: "終了まであと{s}秒" +_visibility: + public: "公開" + publicDescription: "全ての公開タイムラインに配信されます" + home: "未収載" + homeDescription: "ホームタイムラインのみに公開" + followers: "フォロワー" + followersDescription: "フォロワーと会話相手のみに公開" + specified: "ダイレクト" + specifiedDescription: "指定したユーザーのみに公開" + localOnly: "ローカルのみ" + localOnlyDescription: "リモートユーザーには非公開" +_postForm: + replyPlaceholder: "この投稿に返信..." + quotePlaceholder: "この投稿を引用..." + channelPlaceholder: "チャンネルに投稿..." + _placeholders: + a: "いまどうしてる?" + b: "何かありましたか?" + c: "何をお考えですか?" + d: "言いたいことは?" + e: "ここに書いてください" + f: "あなたが書くのを待っています..." +_profile: + name: "名前" + username: "ユーザー名" + description: "自己紹介" + youCanIncludeHashtags: "ハッシュタグを含められます。" + metadata: "追加情報" + metadataEdit: "追加情報を編集" + metadataDescription: "プロフィールに追加情報を表示できます。{rel}属性をつけた{a}タグや{l}タグを含むページをリンクすることで、リンクの本人確認もできます!" + metadataLabel: "ラベル" + metadataContent: "内容" + changeAvatar: "アバター画像を変更" + changeBanner: "バナー画像を変更" + locationDescription: "英語表記の都市名から始まる内容を入力すると、現地時間がユーザーページに表示されます。" +_exportOrImport: + allNotes: "全ての投稿" + followingList: "フォロー" + muteList: "ミュート" + blockingList: "ブロック" + userLists: "リスト" + excludeMutingUsers: "ミュートしているユーザーを除外" + excludeInactiveUsers: "使われていないアカウントを除外" +_charts: + federation: "連合" + apRequest: "リクエスト" + usersIncDec: "ユーザーの増減" + usersTotal: "ユーザーの合計" + activeUsers: "アクティブユーザー数" + notesIncDec: "投稿の増減" + localNotesIncDec: "ローカルの投稿の増減" + remoteNotesIncDec: "リモートの投稿の増減" + notesTotal: "投稿の合計" + filesIncDec: "ファイルの増減" + filesTotal: "ファイルの合計" + storageUsageIncDec: "ストレージ使用量の増減" + storageUsageTotal: "ストレージ使用量の合計" +_instanceCharts: + requests: "リクエスト" + users: "ユーザーの増減" + usersTotal: "ユーザーの累積" + notes: "投稿の増減" + notesTotal: "投稿の累積" + ff: "フォロー/フォロワーの増減" + ffTotal: "フォロー/フォロワーの累積" + cacheSize: "キャッシュサイズの増減" + cacheSizeTotal: "キャッシュサイズの累積" + files: "ファイル数の増減" + filesTotal: "ファイル数の累積" +_timelines: + home: "ホーム" + local: "ローカル" + recommended: "おすすめ" + social: "ソーシャル" + global: "グローバル" +_pages: + newPage: "ページの作成" + editPage: "ページの編集" + readPage: "ソースを表示中" + created: "ページを作成しました" + updated: "ページを更新しました" + deleted: "ページを削除しました" + pageSetting: "ページ設定" + nameAlreadyExists: "指定されたページURLは既に存在しています" + invalidNameTitle: "不正なページURLです" + invalidNameText: "空白でないか確認してください" + editThisPage: "このページを編集" + viewSource: "ソースを表示" + viewPage: "ページを見る" + like: "いいね" + unlike: "いいね解除" + my: "自分のページ" + liked: "いいねしたページ" + featured: "人気" + inspector: "インスペクター" + contents: "コンテンツ" + content: "ページブロック" + variables: "変数" + title: "タイトル" + url: "ページURL" + summary: "ページの要約" + alignCenter: "中央寄せ" + hideTitleWhenPinned: "ピン留めされているときにタイトルを非表示" + font: "フォント" + fontSerif: "セリフ" + fontSansSerif: "サンセリフ" + eyeCatchingImageSet: "アイキャッチ画像を設定" + eyeCatchingImageRemove: "アイキャッチ画像を削除" + chooseBlock: "ブロックを追加" + selectType: "種類を選択" + enterVariableName: "変数名を決めてください" + variableNameIsAlreadyUsed: "その変数名は既に使われています" + contentBlocks: "コンテンツ" + inputBlocks: "入力" + specialBlocks: "特殊" + blocks: + text: "テキスト" + textarea: "テキストエリア" + section: "セクション" + image: "画像" + button: "ボタン" + if: "もし" + _if: + variable: "変数" + post: "投稿フォーム" + _post: + text: "内容" + attachCanvasImage: "キャンバスの画像を添付する" + canvasId: "キャンバスID" + textInput: "テキスト入力" + _textInput: + name: "変数名" + text: "タイトル" + default: "デフォルト値" + textareaInput: "複数行テキスト入力" + _textareaInput: + name: "変数名" + text: "タイトル" + default: "デフォルト値" + numberInput: "数値入力" + _numberInput: + name: "変数名" + text: "タイトル" + default: "デフォルト値" + canvas: "キャンバス" + _canvas: + id: "キャンバスID" + width: "幅" + height: "高さ" + note: "投稿の埋め込み" + _note: + id: "投稿のID" + idDescription: "投稿のURLをペーストして設定することもできます。" + detailed: "詳細な表示" + switch: "スイッチ" + _switch: + name: "変数名" + text: "タイトル" + default: "デフォルト値" + counter: "カウンター" + _counter: + name: "変数名" + text: "タイトル" + inc: "増加値" + _button: + text: "タイトル" + colored: "色付き" + action: "ボタンを押したときの動作" + _action: + dialog: "ダイアログを表示する" + _dialog: + content: "内容" + resetRandom: "乱数をリセット" + pushEvent: "イベントを送信させる" + _pushEvent: + event: "イベント名" + message: "押したときに表示するメッセージ" + variable: "送信する変数" + no-variable: "なし" + callAiScript: "AiScript呼び出し" + _callAiScript: + functionName: "関数名" + radioButton: "選択肢" + _radioButton: + name: "変数名" + title: "タイトル" + values: "改行で区切った選択肢" + default: "デフォルト値" + script: + categories: + flow: "制御" + logical: "論理演算" + operation: "計算" + comparison: "比較" + random: "ランダム" + value: "値" + fn: "関数" + text: "テキスト操作" + convert: "変換" + list: "リスト" + blocks: + text: "テキスト" + multiLineText: "テキスト(複数行)" + textList: "テキストのリスト" + _textList: + info: "ひとつひとつを改行で区切ってください" + strLen: "テキストの長さ" + _strLen: + arg1: "テキスト" + strPick: "文字取り出し" + _strPick: + arg1: "テキスト" + arg2: "文字の位置" + strReplace: "テキスト置き換え" + _strReplace: + arg1: "テキスト" + arg2: "置き換え前" + arg3: "置き換え後" + strReverse: "テキストを反転" + _strReverse: + arg1: "テキスト" + join: "テキストを連結" + _join: + arg1: "リスト" + arg2: "区切り" + add: "足す" + _add: + arg1: "A" + arg2: "B" + subtract: "引く" + _subtract: + arg1: "A" + arg2: "B" + multiply: "掛ける" + _multiply: + arg1: "A" + arg2: "B" + divide: "割る" + _divide: + arg1: "A" + arg2: "B" + mod: "割った余り" + _mod: + arg1: "A" + arg2: "B" + round: "小数を丸める" + _round: + arg1: "数値" + eq: "AとBが同じ" + _eq: + arg1: "A" + arg2: "B" + notEq: "AとBが異なる" + _notEq: + arg1: "A" + arg2: "B" + and: "AかつB" + _and: + arg1: "A" + arg2: "B" + or: "AまたはB" + _or: + arg1: "A" + arg2: "B" + lt: "< AがBより小さい" + _lt: + arg1: "A" + arg2: "B" + gt: "> AがBより大きい" + _gt: + arg1: "A" + arg2: "B" + ltEq: "<= AがBと同じか小さい" + _ltEq: + arg1: "A" + arg2: "B" + gtEq: ">= AがBと同じか大きい" + _gtEq: + arg1: "A" + arg2: "B" + if: "分岐" + _if: + arg1: "もし" + arg2: "なら" + arg3: "そうでなければ" + not: "否定" + _not: + arg1: "否定" + random: "ランダム" + _random: + arg1: "確率" + rannum: "乱数" + _rannum: + arg1: "最小" + arg2: "最大" + randomPick: "リストからランダムに選択" + _randomPick: + arg1: "リスト" + dailyRandom: "ランダム (ユーザーごとに日替わり)" + _dailyRandom: + arg1: "確率" + dailyRannum: "乱数 (ユーザーごとに日替わり)" + _dailyRannum: + arg1: "最小" + arg2: "最大" + dailyRandomPick: "リストからランダムに選択 (ユーザーごとに日替わり)" + _dailyRandomPick: + arg1: "リスト" + seedRandom: "ランダム (シード)" + _seedRandom: + arg1: "シード" + arg2: "確率" + seedRannum: "乱数 (シード)" + _seedRannum: + arg1: "シード" + arg2: "最小" + arg3: "最大" + seedRandomPick: "リストからランダムに選択 (シード)" + _seedRandomPick: + arg1: "シード" + arg2: "リスト" + DRPWPM: "確率付きリストからランダムに選択 (ユーザーごとに日替わり)" + _DRPWPM: + arg1: "テキストのリスト" + pick: "リストから選択" + _pick: + arg1: "リスト" + arg2: "位置" + listLen: "リストの長さを取得" + _listLen: + arg1: "リスト" + number: "数値" + stringToNumber: "テキストを数値に" + _stringToNumber: + arg1: "テキスト" + numberToString: "数値をテキストに" + _numberToString: + arg1: "数値" + splitStrByLine: "テキストを行で分割" + _splitStrByLine: + arg1: "テキスト" + ref: "変数" + aiScriptVar: "AiScript変数" + fn: "関数" + _fn: + slots: "スロット" + slots-info: "スロットひとつひとつを改行で区切ってください" + arg1: "出力" + for: "繰り返し" + _for: + arg1: "回数" + arg2: "処理" + typeError: "スロット{slot}は\"{expect}\"を受け付けますが、\"{actual}\"が入れられています!" + thereIsEmptySlot: "スロット{slot}が空です!" + types: + string: "テキスト" + number: "数値" + boolean: "フラグ" + array: "リスト" + stringArray: "テキストのリスト" + emptySlot: "空のスロット" + enviromentVariables: "環境変数" + pageVariables: "ページ要素" + argVariables: "入力スロット" +_relayStatus: + requesting: "承認待ち" + accepted: "承認済み" + rejected: "拒否済み" +_notification: + fileUploaded: "ファイルがアップロードされました" + youGotMention: "{name}からのメンション" + youGotReply: "{name}からのリプライ" + youGotQuote: "{name}による引用" + youRenoted: "{name}がブーストしました" + youGotPoll: "{name}が投票しました" + youGotMessagingMessageFromUser: "{name}からのチャットがあります" + youGotMessagingMessageFromGroup: "{name}のチャットがあります" + youWereFollowed: "フォローされました" + youReceivedFollowRequest: "フォローリクエストが来ました" + yourFollowRequestAccepted: "フォローリクエストが承認されました" + youWereInvitedToGroup: "{userName}があなたをグループに招待しました" + pollEnded: "アンケートの結果が出ました" + emptyPushNotificationMessage: "プッシュ通知の更新をしました" + _types: + all: "すべて" + follow: "フォロー" + mention: "メンション" + reply: "リプライ" + renote: "ブースト" + quote: "引用" + reaction: "リアクション" + pollVote: "アンケートに投票された" + pollEnded: "アンケートが終了" + receiveFollowRequest: "フォロー申請を受け取った" + followRequestAccepted: "フォローが受理された" + groupInvited: "グループに招待された" + app: "連携アプリからの通知" + _actions: + followBack: "フォローバック" + reply: "返信" + renote: "ブースト" + reacted: がリアクションしました + renoted: がブーストしました + voted: が投票しました + andCountUsers: と{count}人{acted} +_deck: + alwaysShowMainColumn: "常にメインカラムを表示" + columnAlign: "カラムの寄せ" + addColumn: "カラムを追加" + configureColumn: "カラムの設定" + swapLeft: "左に移動" + swapRight: "右に移動" + swapUp: "上に移動" + swapDown: "下に移動" + stackLeft: "左に重ねる" + popRight: "右に出す" + profile: "ワークスペース" + newProfile: "新規ワークスペース" + renameProfile: "ワークスペース名を変更" + deleteProfile: "ワークスペースを削除" + nameAlreadyExists: "この名前のワークスペースは既に存在します。" + introduction: "カラムを組み合わせて自分だけのインターフェイスを作りましょう!" + introduction2: "画面の右にある + を押して、いつでもカラムを追加できます。" + widgetsIntroduction: "カラムのメニューから、「ウィジェットの編集」を選択してウィジェットを追加してください" + _columns: + main: "メイン" + widgets: "ウィジェット" + notifications: "通知" + tl: "タイムライン" + antenna: "アンテナ" + list: "リスト" + channel: "チャンネル" + mentions: "あなた宛て" + direct: "ダイレクト" +noteId: 投稿のID +hiddenTagsDescription: 'トレンドと「みつける」から除外したいハッシュタグを(先頭の # を除いて)改行区切りで入力してください。この設定はトレンドと「みつける」以外には影響しません。' +hiddenTags: 非表示にするハッシュタグ +apps: "アプリ" +_experiments: + title: 試験的な機能 + postImportsCaption: + ユーザーが過去の投稿をFirefish・Misskey・Mastodon・Akkoma・Pleromaからインポートすることを許可します。キューが溜まっているときにインポートするとサーバーに負荷がかかる可能性があります。 + enablePostImports: 投稿のインポートを有効にする +sendModMail: モデレーション通知を送る +deleted: 削除済み +editNote: 投稿を編集 +edited: '編集済み: {date} {time}' +signupsDisabled: 現在、このサーバーでは新規登録が一般開放されていません。招待コードをお持ちの場合には、以下の欄に入力してください。 +newer: 新しい投稿 +older: 古い投稿 +accessibility: アクセシビリティ +jumpToPrevious: 前に戻る +cw: 閲覧注意 +silencedWarning: スパムの可能性があるため、これらのユーザーが所属するサーバーは管理者によりサイレンスされています。 +searchPlaceholder: Firefishを検索 +channelFederationWarn: 現時点では、チャンネルは他のサーバーへ連合しません +listsDesc: リストでは指定したユーザーだけのタイムラインを作れます。リストには「タイムライン」のページからアクセスできます。 +antennasDesc: "アンテナでは指定した条件に合致する投稿が表示されます。\nアンテナには「タイムライン」のページからアクセスできます。" +expandOnNoteClickDesc: オフの場合、右クリックメニューか日付をクリックすることで開けます。 +expandOnNoteClick: クリックで投稿の詳細を開く +clipsDesc: クリップは分類と共有ができるブックマークです。各投稿のメニューからクリップを作成できます。 +_dialog: + charactersExceeded: "最大文字数を超えています! 現在 {current} / 制限 {max}" + charactersBelow: "最小文字数を下回っています! 現在 {current} / 制限 {min}" +_filters: + followersOnly: フォロワーのみ + fromUser: ユーザーを指定 + withFile: 添付ファイルあり + fromDomain: ドメインを指定 + notesBefore: 指定の日付以前 + notesAfter: 指定の日付以降 + followingOnly: フォロー中のみ +isModerator: モデレーター +audio: 音声 +image: 画像 +video: 動画 +isBot: このアカウントは自動で投稿します +isLocked: このアカウントのフォローは承認制です +isAdmin: 管理者 +isPatron: Firefish 後援者 +_skinTones: + light: ペールオレンジ + mediumLight: ミディアムライト + medium: ミディアム + mediumDark: ミディアムダーク + yellow: 黄色 + dark: 茶色 +removeReaction: リアクションを取り消す +alt: 代替テキスト +swipeOnMobile: ページ間のスワイプを有効にする +reactionPickerSkinTone: 優先する絵文字のスキン色 +xl: 特大 +donationLink: 寄付ページへのリンク +removeMember: メンバーを削除 +removeQuote: 引用を削除 +removeRecipient: 宛先を削除 +verifiedLink: 認証済みリンク +_feeds: + atom: Atom + rss: RSS + jsonFeed: JSONフィード + copyFeed: フィードのURLをコピー +origin: 元のサーバー +delete2fa: 2要素認証を無効化 +deletePasskeys: パスキーを削除 +delete2faConfirm: これで、このアカウントの2要素認証は完全に削除されます。続行しますか? +inputNotMatch: 入力が一致しません +deletePasskeysConfirm: これで、このアカウントのパスキーは完全に削除されます。続行しますか? +importZip: ZIPをインポート +confirm: 確認 +exportZip: ZIPをエクスポート +openServerInfo: "投稿内のサーバー名をクリックでサーバー情報を開く" +indexableDescription: MastodonやFirefishなどの検索機能に、あなたの投稿が表示されるのを許可します。 +clickToShowPatterns: クリックしてトラックを表示 +vibrate: 振動を有効にする +indexable: 投稿検索に登録 +_iconSets: + bold: "太め" + light: "細め" + regular: "標準" + fill: "塗りつぶし" + duotone: "2色" +suggested: "候補" +noLanguage: "言語なし" +moreUrls: "固定するページ" +moreUrlsDescription: "左下のヘルプメニューに固定したいページを以下の形式で、改行区切りで入力してください:\n\"表示名\": https://example.com/" +showPreviewByDefault: "投稿画面でプレビュー表示をデフォルトでオンにする" +preventMisclick: "誤タップ防止" +hideFollowButtons: "誤タップしやすい位置にあるフォローボタンを隠す" +forMobile: "携帯端末向け" +replaceChatButtonWithAccountButton: "チャットのボタンをアカウント切り替えボタンに変更する" +replaceWidgetsButtonWithReloadButton: "ウィジェットのボタンを再読み込みボタンに変更する" +searchEngine: "検索のMFMで使用する検索エンジン" +postSearch: "このサーバーの投稿検索" +showBigPostButton: "投稿ボタンを巨大にする" +emojiModPerm: "カスタム絵文字の管理権" +emojiModPermDescription: "追加: カスタム絵文字の新規追加と新規追加されたカスタム絵文字(正確には、タグとカテゴリとライセンスが設定されていないカスタム絵文字)へのタグとカテゴリとライセンスの設定を許可します。\n\ + 追加と変更:「追加」の権限に加え、既存の絵文字の名前・カテゴリ・タグ・ライセンスの変更を許可します。\n全て許可:「追加と変更」の権限に加え、既存のカスタム絵文字の削除を許可します。\n\ + この設定にかかわらず、サーバーの管理者およびモデレーターには「全て許可」の権限が与えられます。" +_emojiModPerm: + unauthorized: "無し" + add: "追加" + mod: "追加と変更" + full: "全て許可" +private: "秘密" +privateDescription: "あなた以外には非公開" +makePrivate: "秘密にする" +makePrivateConfirm: "リモートサーバーに削除リクエストを送信し、投稿の公開範囲を「秘密」にして他の人から見られないようにします。実行しますか?" +sentFollowRequests: 未承認のフォローリクエスト +noSentFollowRequests: 未承認のフォローリクエストはありません +messagingUnencryptedInfo: FirefishのチャットはE2E暗号化されていません。漏洩してはいけない情報はFirefishで送らないでください。 +moderationNote: モデレーション用のメモ +ipFirstAcknowledged: IPアドレスが最初に取得された日 +driveCapacityOverride: ドライブ容量の変更 +autocorrectNoteLanguage: 設定した投稿言語が自動検出されたものと異なる場合に警告する +incorrectLanguageWarning: "この投稿は{detected}で書かれていると判定されました。\n投稿言語を{current}ではなく{detected}にしますか?" +markLocalFilesNsfwByDefault: このサーバーの全てのファイルをデフォルトでNSFWに設定する +markLocalFilesNsfwByDefaultDescription: この設定が有効でも、ユーザーは自分でNSFWのフラグを外すことができます。また、この設定は既存のファイルには影響しません。 +noteEditHistory: 編集履歴 +showAddFileDescriptionAtFirstPost: 説明の無い添付ファイルを投稿しようとした際に説明を書く画面を自動で開く +antennaLimit: 各ユーザーが作れるアンテナの最大数 +inputAccountId: 'あなたのアカウントを入力してください(例: @firefish@info.firefish.dev)' +remoteFollow: リモートフォロー +cannotEditVisibility: 公開範囲は変更できません +useThisAccountConfirm: このアカウントで操作を続けますか? +getQrCode: QRコードを表示 +copyRemoteFollowUrl: リモートからフォローするURLをコピー +foldNotification: 同じ種類の通知をまとめて表示する +slashQuote: 繋げて引用 +mergeRenotesInTimeline: タイムラインで同じ投稿のブーストをまとめる +mergeThreadInTimeline: タイムラインで同じスレッドの投稿をまとめる +_later: + future: 未来 + minutesAgo: '{n}分後' + daysAgo: '{n}日後' + justNow: 間もなく + secondsAgo: '{n}秒後' + hoursAgo: '{n}時間後' + weeksAgo: '{n}週間後' + monthsAgo: '{n}ヶ月後' + yearsAgo: '{n}年後' +scheduledPost: 予約投稿 +scheduledDate: 予定日 +cancelScheduledPost: 予約を解除する +scheduledPostAt: '{time}に投稿されます' +strongPassword: 強いパスワード +addAlt4MeTag: '説明の無いファイルを投稿する際に自動で #Alt4Me のハッシュタグをつける' +turnOffCatLanguage: 猫語への変換を無効化する diff --git a/locales/ja-KS.yml b/locales/ja-KS.yml new file mode 100644 index 0000000..941135e --- /dev/null +++ b/locales/ja-KS.yml @@ -0,0 +1,1467 @@ +_lang_: "日本語 (関西弁)" +headlineFirefish: "ずっとタダでオープンソースの非中央集権型ソーシャルメディアプラットフォーム!🚀" +introFirefish: "おいでやす。Firefishは、オープンソースの分散型ソーシャルメディアプラットフォームどす。\nいま起きたはるもんを共有したり、あんさんについて皆に発信したりしとくれやす👘\n\ + 「リアクション」機能があるさかい、皆の投稿に素早う反応を送ることもできます🎎\nほんなら、新しい世界を探検しまひょか🎴" +monthAndDay: "{month}月 {day}日" +search: "探す" +notifications: "通知" +username: "ユーザー名" +password: "パスワード" +forgotPassword: "パスワード忘れてん" +fetchingAsApObject: "今ちと連合に照会しとるで" +ok: "OKや" +gotIt: "ほい" +cancel: "やめとく" +enterUsername: "ユーザー名を入れてや" +renotedBy: "{user}がブースト" +noNotes: "投稿はありまへん" +noNotifications: "通知はあらへん" +instance: "サーバー" +settings: "設定" +basicSettings: "基本設定" +otherSettings: "その他の設定" +openInWindow: "ウィンドウで開くで" +profile: "プロフィール" +timeline: "タイムライン" +noAccountDescription: "自己紹介食ってもた" +login: "ログイン" +loggingIn: "ログインしよるで" +logout: "ログアウト" +signup: "新規登録" +uploading: "アップロードしとるで" +save: "保存" +users: "ユーザー" +addUser: "ユーザーを追加や" +favorite: "お気に入り" +favorites: "お気に入り" +unfavorite: "やっぱ気に入らん" +favorited: "お気に入りに登録したで" +alreadyFavorited: "もうお気に入りに入れとるがな。" +cantFavorite: "アカン、お気に入り登録できへんかったで。" +pin: "ピン留めしとく" +unpin: "やっぱピン留めせん" +copyContent: "内容をコピー" +copyLink: "リンクをコピー" +delete: "ほかす" +deleteAndEdit: "ほかして直す" +deleteAndEditConfirm: "この投稿をほかして書き直すんか?この投稿へのリアクション、ブースト、返信もみんな消えてまうで。" +addToList: "リストに入れたる" +sendMessage: "メッセージを送る" +copyUsername: "ユーザー名をコピー" +searchUser: "ユーザーを検索" +reply: "返事" +loadMore: "まだまだあるで!" +showMore: "まだまだあるで!" +showLess: "閉じる" +youGotNewFollower: "フォローされたで" +receiveFollowRequest: "フォローリクエストされたで" +followRequestAccepted: "フォローが承認されたで" +mention: "メンション" +mentions: "うち宛て" +directNotes: "ダイレクト投稿" +importAndExport: "インポートとエクスポート" +import: "インポート" +export: "エクスポート" +files: "ファイル" +download: "ダウンロード" +driveFileDeleteConfirm: "ファイル「{name}」を消してええんか?添付した全部の投稿から、きれいさっぱり消えてなくなるで。" +unfollowConfirm: "{name}のフォローを解除してもええんか?" +exportRequested: "エクスポートしてな、ってリクエストしたけど、これ多分めっちゃ時間かかるで。エクスポート終わったら「ドライブ」に突っ込んどくで。" +importRequested: "インポートしてな、ってリクエストしたけど、これ多分めっちゃ時間かかるで。" +lists: "リスト" +noLists: "リストなんてあらへんで" +note: "投稿" +notes: "投稿" +following: "フォロー" +followers: "フォロワー" +followsYou: "フォローされとるで" +createList: "リスト作る" +manageLists: "リストの管理" +error: "エラー" +somethingHappened: "なんやアカンことが起きたで" +retry: "もっぺんやる?" +pageLoadError: "ページの読み込みに失敗してもた… えろうすんまへん" +pageLoadErrorDescription: "これは普通、ネットワークかブラウザキャッシュが原因やからね。キャッシュをクリアするか、もうちっとだけ待ってくれへんか?" +serverIsDead: "サーバーの応答がおまへん。ちーとの間待ってからもっかい試してみぃな。" +youShouldUpgradeClient: "このページを表示するには、リロードして新しいバージョンのクライアントを使うてや。" +enterListName: "リスト名を入れてや" +privacy: "プライバシー" +makeFollowManuallyApprove: "ワイが認めた奴だけがワイをフォローできるようにする" +defaultNoteVisibility: "もとからの公開範囲" +follow: "フォロー" +followRequest: "フォローを頼む" +followRequests: "フォロー申請" +unfollow: "フォローやめる" +followRequestPending: "フォロー許してくれるん待っとる" +enterEmoji: "絵文字を入れてや" +renote: "ブースト" +unrenote: "ブーストやめる" +renoted: "ブーストしたで。" +cantRenote: "この投稿はブーストでけへんらしい。" +cantReRenote: "ブースト自体はブーストでけへんで。" +quote: "引用" +pinnedNote: "ピン留めされとる投稿" +pinned: "ピン留めしとく" +you: "あんた" +clickToShow: "押したら見えるで" +sensitive: "ちょっとアカンやつやで" +add: "増やす" +reaction: "リアクション" +reactionSetting: "ピッカーに表示しはるリアクション" +reactionSettingDescription2: "ドラッグで並び替え、クリックで削除、+を押して追加やで。" +rememberNoteVisibility: "公開範囲覚えといて" +attachCancel: "のっけるのやめる" +markAsSensitive: "ちょっとこれはアカン" +unmarkAsSensitive: "そこまでアカンことないやろ" +enterFileName: "ファイル名を入れてや" +mute: "ミュート" +unmute: "ミュートやめたる" +block: "ブロック" +unblock: "ブロックやめたる" +suspend: "凍結" +unsuspend: "溶かす" +blockConfirm: "ブロックしてもええんか?" +unblockConfirm: "ブロックやめたるってほんまか?" +suspendConfirm: "凍結してしもうてええか?" +unsuspendConfirm: "解凍するけどええか?" +selectList: "リストを選ぶ" +selectAntenna: "アンテナを選ぶ" +selectWidget: "ウィジェットを選ぶ" +editWidgets: "ウィジェットをいじる" +editWidgetsExit: "編集終ったで" +customEmojis: "カスタム絵文字" +emoji: "絵文字" +emojis: "絵文字" +emojiName: "絵文字名" +emojiUrl: "絵文字画像URL" +addEmoji: "絵文字を追加" +settingGuide: "ええ感じの設定" +cacheRemoteFiles: "リモートのファイルをキャッシュする" +cacheRemoteFilesDescription: "この設定を切っとくと、リモートファイルをキャッシュせず直リンクするようになるで。サーバーの容量は節約できるけど、サムネイルが作られんくなるから通信量が増えるで。" +flagAsBot: "ワイはBotや🤖" +flagAsBotDescription: "もしこのアカウントがプログラムによって運用されるんやったら、このフラグをオンにしてたのむで。オンにすると、反応の連鎖を防ぐためのフラグとして他の開発者に役立ったり、Firefishのシステム上での扱いがBotに合ったもんになったりするんやで。" +flagAsCat: "ワイはCatや🐯" +flagAsCatDescription: "自分、猫ちゃんならこのフラグつけてみ?" +flagShowTimelineReplies: "タイムラインに返信を表示させたる" +flagShowTimelineRepliesDescription: "有効にすると、タイムラインに他のユーザー宛ての投稿も表示したるで。" +autoAcceptFollowed: "フォローしとるユーザーからのフォローリクエストを勝手に許可しとく" +addAccount: "アカウントを追加" +loginFailed: "ログインに失敗してしもうた…" +showOnRemote: "リモートで見る" +general: "全般" +wallpaper: "壁紙" +setWallpaper: "壁紙を設定" +removeWallpaper: "壁紙を削除" +searchWith: "検索: {q}" +youHaveNoLists: "リストがあらへんで?" +followConfirm: "{name}をフォローしてええか?" +proxyAccount: "プロキシアカウント" +proxyAccountDescription: "プロキシアカウントは、代わりにフォローしてくれるアカウントや。例えば、551に豚まんが無いときやったり、ユーザーがリモートユーザーをアカウントに入れたとき、リストに入れられたユーザーが誰からもフォローされてないと寂しいやん。寂しいし、アクティビティも配達されへんから、プロキシアカウントがフォローしてくれるで。ええやつやん…" +host: "ホスト" +selectUser: "ユーザーを選ぶ" +recipient: "宛先" +annotation: "注釈" +federation: "連合" +instances: "サーバー" +registeredAt: "初観測" +latestRequestSentAt: "ちょっと前のリクエスト送信" +latestRequestReceivedAt: "ちょっと前のリクエスト受信" +latestStatus: "ちょっと前のステータス" +storageUsage: "ストレージ使うた量" +charts: "チャート" +perHour: "1時間ごと" +perDay: "1日ごと" +stopActivityDelivery: "アクティビティの配送をやめる" +blockThisInstance: "このサーバーをブロック" +operations: "操作" +software: "ソフトウェア" +version: "バージョン" +metadata: "メタデータ" +monitor: "モニター" +jobQueue: "ジョブキュー" +cpuAndMemory: "CPUとメモリ" +network: "ネットワーク" +disk: "ディスク" +instanceInfo: "サーバー情報" +statistics: "統計" +clearQueue: "キューにさいなら" +clearQueueConfirmTitle: "キューをクリアしまっか?" +clearQueueConfirmText: "未配達の投稿は配送されなくなるで。通常この操作を行う必要はあらへんや。" +clearCachedFiles: "キャッシュにさいなら" +clearCachedFilesConfirm: "キャッシュされとるリモートファイルをみんなほかしてええか?" +blockedInstances: "ブロックしたサーバー" +blockedInstancesDescription: "ブロックしたいサーバーのホストを改行で区切って設定してな。ブロックされてもうたサーバーとはもう金輪際やり取りできんくなるで。" +muteAndBlock: "ミュートとブロック" +mutedUsers: "ミュートしたユーザー" +blockedUsers: "ブロックしたユーザー" +noUsers: "ユーザーはおらへん" +editProfile: "プロフィールをいじる" +noteDeleteConfirm: "この投稿を削除しまっか?" +pinLimitExceeded: "これ以上ピン留めできひん" +intro: "Firefishのインストールが完了してん!管理者アカウントを作ってや。" +done: "でけた" +processing: "処理しとる" +preview: "プレビュー" +default: "デフォルト" +defaultValueIs: "デフォルト" +noCustomEmojis: "絵文字はあらへん" +noJobs: "ジョブはあらへん" +federating: "連合しとる" +blocked: "ブロックしとる" +suspended: "配信せぇへん" +all: "みんな" +subscribing: "購読しとる" +publishing: "配信しとる" +notResponding: "応答してへんで" +instanceFollowing: "サーバーのフォロー" +instanceFollowers: "サーバーのフォロワー" +instanceUsers: "このサーバーの利用者" +changePassword: "パスワード変える" +security: "セキュリティ" +retypedNotMatch: "そやないねん。" +currentPassword: "今のパスワード" +newPassword: "今度のパスワード" +newPasswordRetype: "今度のパスワード(もっぺん入れて)" +attachFile: "ファイルのっける" +more: "他のやつ!" +featured: "ハイライト" +usernameOrUserId: "ユーザー名かユーザーID" +noSuchUser: "ユーザーが見つからへんで" +lookup: "見てきて" +announcements: "お知らせ" +imageUrl: "画像URL" +remove: "ほかす" +removed: "削除したで!" +removeAreYouSure: "「{x}」はほかしてええか?" +deleteAreYouSure: "「{x}」はほかしてええか?" +resetAreYouSure: "リセットしてええん?" +saved: "保存したで!" +messaging: "チャット" +upload: "アップロード" +keepOriginalUploading: "画質をそのまんまにする" +keepOriginalUploadingDescription: "オリジナルの画像をそのまんまアップロードするで。オフにすると、ファイルサイズを削減したWeb公開用画像を生成したるで。" +fromDrive: "ドライブから" +fromUrl: "URLから" +uploadFromUrl: "URLアップロード" +uploadFromUrlDescription: "このURLのファイルをアップロードしたいねん" +uploadFromUrlRequested: "アップロードしたい言うといたで" +uploadFromUrlMayTakeTime: "アップロード終わるんにちょい時間かかるかもしれへんわ。" +explore: "みっける" +messageRead: "もう読まはった" +noMoreHistory: "これより過去の履歴はあらへんで" +startMessaging: "チャットやるで" +nUsersRead: "{n}人が読んでもうた" +agreeTo: "{0}に同意したで" +tos: "利用規約" +start: "始める" +home: "ホーム" +remoteUserCaution: "リモートユーザーやから、足りひん情報あるかもしれへん。" +activity: "アクティビティ" +images: "画像" +birthday: "生まれた日" +yearsOld: "{age}歳" +registeredDate: "始めた日" +location: "場所" +theme: "テーマ" +themeForLightMode: "ライトモードではこのテーマつこて" +themeForDarkMode: "ダークモードではこのテーマつこて" +light: "ライト" +dark: "ダーク" +lightThemes: "デイゲーム" +darkThemes: "ナイトゲーム" +syncDeviceDarkMode: "デバイスのダークモードと一緒にする" +drive: "ドライブ" +fileName: "ファイル名" +selectFile: "ファイル選んでや" +selectFiles: "ファイル選んでや" +selectFolder: "フォルダ選んでや" +selectFolders: "フォルダ選んでや" +renameFile: "ファイル名をいらう" +folderName: "フォルダー名" +createFolder: "フォルダー作る" +renameFolder: "フォルダー名を変える" +deleteFolder: "フォルダーを消してまう" +addFile: "ファイルを追加" +emptyDrive: "ドライブにはなんも残っとらん" +emptyFolder: "ふぉろだーにはなんも残っとらん" +unableToDelete: "消そうおもってんけどな、あかんかったわ" +inputNewFileName: "今度のファイル名は何にするん?" +inputNewDescription: "新しい説明文を入力しまひょ" +inputNewFolderName: "今度のフォルダ名は何にするん?" +circularReferenceFolder: "移動先のフォルダーは、移動するフォルダーのサブフォルダーや。" +hasChildFilesOrFolders: "このフォルダ、まだなんか入っとるから消されへん" +copyUrl: "URLをコピー" +rename: "名前を変えるで" +avatar: "アイコン" +banner: "バナー" +nsfw: "閲覧注意" +whenServerDisconnected: "サーバーとの接続が切れたとき" +disconnectedFromServer: "サーバーとの通信が切れたで" +reload: "リロード" +doNothing: "何もせんとく" +reloadConfirm: "リロードしてええか?" +watch: "ウォッチ" +unwatch: "ウォッチやめる" +accept: "ええで" +reject: "あかん" +normal: "ええ感じ" +instanceName: "サーバー名" +instanceDescription: "サーバーの紹介" +maintainerName: "管理者の名前" +maintainerEmail: "管理者のメールアドレス" +tosUrl: "利用規約のURL" +thisYear: "今年" +thisMonth: "今月" +today: "今日" +dayX: "{day}日" +monthX: "{month}月" +yearX: "{year}年" +pages: "ページ" +enableLocalTimeline: "ローカルタイムラインを使えるようにする" +enableGlobalTimeline: "グローバルタイムラインを使えるようにする" +disablingTimelinesInfo: "ここらへんのタイムラインを使えんようにしてしもても、管理者とモデレーターは使えるままになってるで、そうやなかったら不便やからな。" +registration: "登録" +enableRegistration: "一見さんでも誰でもいらっしゃ~い" +invite: "来てや" +driveCapacityPerLocalAccount: "ローカルユーザーひとりあたりのドライブ容量" +driveCapacityPerRemoteAccount: "リモートユーザーひとりあたりのドライブ容量" +inMb: "メガバイト単位" +iconUrl: "アイコン画像のURL" +bannerUrl: "バナー画像のURL" +backgroundImageUrl: "背景画像のURL" +basicInfo: "基本情報" +pinnedUsers: "ピン留めしたユーザー" +pinnedUsersDescription: "「みっける」ページとかにピン留めしときたい兄ちゃんらをここに書いといたらええわ。名前は改行で区切ればええで。" +pinnedPages: "ピン留めページ" +pinnedPagesDescription: "サーバーのいっちゃん上にピン留めしたいページのパスを、改行で区切って記述してな。" +pinnedClipId: "ピン留めするクリップのID" +pinnedNotes: "ピン留めされとる投稿" +hcaptcha: "hCaptcha(キャプチャ)" +enableHcaptcha: "hCaptcha(キャプチャ)をつけとく" +hcaptchaSiteKey: "サイトキー" +hcaptchaSecretKey: "シークレットキー" +recaptcha: "reCAPTCHA" +enableRecaptcha: "reCAPTCHA(リキャプチャ)を有効にする" +recaptchaSiteKey: "サイトキー" +recaptchaSecretKey: "シークレットキー" +avoidMultiCaptchaConfirm: "ぎょうさんのCaptchaをつこてしまうと、仲良うせんことがあるんや。他のCaptchaをなおしとこか?別にキャンセルしてもろうたらCaptchaは消されへんで済むけど知らんで。" +antennas: "アンテナ" +manageAntennas: "アンテナいじる" +name: "名前" +antennaSource: "受信ソース(このソースは食われへん)" +antennaKeywords: "受信キーワード" +antennaExcludeKeywords: "除外キーワード" +antennaKeywordsDescription: "スペースで区切ったるとAND指定で、改行で区切ったるとOR指定や" +notifyAntenna: "新しい投稿を通知すんで" +withFileAntenna: "ファイルが添付された投稿のみ" +enableServiceworker: "ServiceWorkerをつこて" +antennaUsersDescription: "ユーザー名を改行で区切ったってな" +caseSensitive: "大文字と小文字は別もんや" +withReplies: "返信も入れたって" +connectedTo: "次のアカウントに繋がっとるで" +notesAndReplies: "投稿と返信" +withFiles: "ファイル付いとるやつ" +silence: "サイレンス" +silenceConfirm: "サイレンスしよか?" +unsilence: "サイレンスやめるで" +unsilenceConfirm: "サイレンスやめよか?" +popularUsers: "人気のユーザー" +recentlyUpdatedUsers: "ちょっと前に投稿したばっかりのユーザー" +recentlyRegisteredUsers: "ちょっと前に始めたばっかりのユーザー" +recentlyDiscoveredUsers: "最近見っけたユーザー" +exploreUsersCount: "{count}もユーザーおるで" +exploreFediverse: "Fediverseを探ってみる" +popularTags: "人気のタグ" +userList: "リスト" +about: "情報" +aboutFirefish: "Firefishってなんやねん?" +administrator: "管理者" +token: "トークン" +twoStepAuthentication: "二段階認証" +moderator: "モデレーター" +moderation: "モデレーション" +nUsersMentioned: "{n}人が投稿" +securityKey: "セキュリティキー" +securityKeyName: "キーの名前" +registerSecurityKey: "セキュリティキーを登録するで" +lastUsed: "最後につこうた日" +unregister: "登録やめる" +passwordLessLogin: "パスワードなんか無うてもログインでけるようにする" +resetPassword: "パスワードをリセット" +newPasswordIs: "今度のパスワードは「{password}」や" +reduceUiAnimation: "UIの動きやアニメーションを減らす" +share: "わけわけ" +notFound: "見つからへんね" +notFoundDescription: "指定されたURLに該当するページはあらへんやった。" +uploadFolder: "とりあえずアップロードしたやつ置いとく所" +cacheClear: "キャッシュをほかす" +markAsReadAllNotifications: "通知はもうぜんぶ読んだわっ" +markAsReadAllUnreadNotes: "投稿はぜんぶ読んだわっ" +markAsReadAllTalkMessages: "チャットはもうぜんぶ読んだわっ" +help: "ヘルプ" +inputMessageHere: "ここにメッセージ書いてや" +close: "閉じる" +group: "グループ" +groups: "グループ" +createGroup: "グループを作るで" +ownedGroups: "所有しとるグループ" +joinedGroups: "参加しとるグループ" +invites: "来てや" +groupName: "グループ名" +members: "メンバー" +transfer: "譲渡" +messagingWithUser: "ユーザーとチャット" +messagingWithGroup: "グループでチャット" +title: "タイトル" +text: "テキスト" +enable: "有効にするで" +next: "次" +retype: "もっかい入力" +noteOf: "{user}の投稿" +inviteToGroup: "グループに招く" +quoteAttached: "引用付いとるで" +quoteQuestion: "引用として添付してもええか?" +noMessagesYet: "まだチャットはあらへんで" +newMessageExists: "新しいメッセージがきたで" +onlyOneFileCanBeAttached: "すまん、メッセージに添付できるファイルはひとつだけなんや。" +signinRequired: "ログインしてくれへん?" +invitations: "来てや" +invitationCode: "招待コード" +checking: "確認しとるで" +available: "利用できる\n" +unavailable: "利用できん" +usernameInvalidFormat: "a~z、A~Z、0~9、_が使えるで" +tooShort: "短すぎやろ!" +tooLong: "長すぎやろ!" +weakPassword: "へぼいパスワード" +normalPassword: "普通のパスワード" +veryStrongPassword: "ええ感じのパスワード" +passwordMatched: "よし!一致や!" +passwordNotMatched: "一致しとらんで?" +signinWith: "{x}でログイン" +signinFailed: "ログインできんかったで。もっかいユーザー名とパスワードを確認してみてな。" +tapSecurityKey: "セキュリティキーにタッチしてな" +or: "それか" +language: "言語" +uiLanguage: "UIの表示言語" +groupInvited: "グループに招待されとるで" +aboutX: "{x}について" +useOsNativeEmojis: "OSネイティブの絵文字を使う" +disableDrawer: "メニューをドロワーで表示せぇへん" +youHaveNoGroups: "グループがあらへんねぇ。" +joinOrCreateGroup: "既存のグループに招待してもらうか、新しくグループ作ってからやってな" +noHistory: "履歴はあらへんねぇ。" +signinHistory: "ログイン履歴" +disableAnimatedMfm: "動きがやかましいMFMを止める" +doing: "やっとるがな" +category: "カテゴリ" +tags: "タグ" +docSource: "このドキュメントのソース" +createAccount: "アカウントを作成" +existingAccount: "既存のアカウント" +regenerate: "再生成" +fontSize: "フォントサイズ" +noFollowRequests: "フォロー申請はあらへんで" +openImageInNewTab: "画像を新しいタブで開く" +dashboard: "ダッシュボード" +local: "ローカル" +remote: "リモート" +total: "合計" +weekOverWeekChanges: "前週比" +dayOverDayChanges: "前日比" +appearance: "見た目" +clientSettings: "クライアントの設定" +accountSettings: "アカウントの設定" +promotion: "宣伝" +promote: "宣伝" +numberOfDays: "日数" +hideThisNote: "この投稿は表示せんでいい" +showFeaturedNotesInTimeline: "タイムラインにおすすめの投稿を表示してや" +objectStorage: "オブジェクトストレージ" +useObjectStorage: "オブジェクトストレージを使う" +objectStorageBaseUrl: "Base URL" +objectStorageBaseUrlDesc: "参照に使うにURLやで。CDNやProxyを使用してるんならそのURL、S3: 'https://.s3.amazonaws.com'、GCSとかなら: + 'https://storage.googleapis.com/'。" +objectStorageBucket: "Bucket" +objectStorageBucketDesc: "使ってるサービスのbucket名を選んでな" +objectStoragePrefix: "Prefix" +objectStoragePrefixDesc: "このprefixのディレクトリ下に格納されるで" +objectStorageEndpoint: "Endpoint" +objectStorageEndpointDesc: "S3のときは空、それ以外は各サービスのendpointを指定してなー。''ってやるか':'みたいに指定するんやで。" +objectStorageRegion: "Region" +objectStorageRegionDesc: "'xx-east-1'みたいなregionを指定したってやー。使ってるサービスにregionの概念がないときは、空か'us-east-1'にするんやで。" +objectStorageUseSSL: "SSLを使う" +objectStorageUseSSLDesc: "API接続にhttpsを使わん場合はオフにするんやで" +objectStorageUseProxy: "Proxyを使う" +objectStorageUseProxyDesc: "API接続にproxy使わんのやったら切ってくれへん?" +objectStorageSetPublicRead: "アップロードした時に'public-read'を設定してや" +serverLogs: "サーバーログ" +deleteAll: "全て削除してや" +showFixedPostForm: "タイムラインの上の方で投稿できるようにやってくれへん?" +newNoteRecived: "新しい投稿があるで" +sounds: "サウンド" +listen: "聴く" +none: "なし" +showInPage: "ページで表示" +popout: "ポップアウト" +volume: "やかましさ" +masterVolume: "全体的なやかましさ" +details: "もっと" +chooseEmoji: "絵文字を選ぶ" +unableToProcess: "なんか作業が止まってしまったようやね" +recentUsed: "最近使ったやつ" +install: "インストール" +uninstall: "アンインストール" +installedApps: "インストールされとるアプリ" +nothing: "あらへん" +installedDate: "インストールした日時" +lastUsedDate: "最後に使った日時" +state: "状態" +sort: "仕分ける" +ascendingOrder: "小さい順" +descendingOrder: "大きい順" +scratchpad: "スクラッチパッド" +scratchpadDescription: "スクラッチパッドではAiScriptを色々試すことができるんや。Firefishに対して色々できるコードを書いて動かしてみたり、結果を見たりできるで。" +output: "出力" +script: "スクリプト" +disablePagesScript: "ページ機能のスクリプトを無効にしてや" +updateRemoteUser: "リモートユーザー情報の更新してくれん?" +deleteAllFiles: "すべてのファイルを削除" +deleteAllFilesConfirm: "ホンマにすべてのファイルを削除するん?消したもんはもう戻ってこんのやで?" +removeAllFollowing: "フォローを全解除" +removeAllFollowingDescription: "{host}からのフォローをすべて解除するで。そのサーバーが消えて無くなった時とかに便利な機能やで。" +userSuspended: "このユーザーは...凍結されとる。" +userSilenced: "このユーザーは...サイレンスされとる。" +yourAccountSuspendedTitle: "あんたのアカウント凍結されとるで" +yourAccountSuspendedDescription: "あんたのアカウントは、サーバーの利用規約に違反したとかの理由で、凍結されとるで。細かいことは管理者までお問い合わせたってなー。絶対に新しいアカウント作ったらあかんで。絶対やで。" +menu: "メニュー" +divider: "分割線" +addItem: "項目を追加" +relays: "リレー" +addRelay: "リレーの追加" +inboxUrl: "inboxのURL" +addedRelays: "追加済みのリレー" +serviceworkerInfo: "プッシュ通知をするんなら有効にせなあかんで。" +deletedNote: "消された投稿" +invisibleNote: "非公開の投稿" +enableInfiniteScroll: "自動でもっと見る" +visibility: "公開範囲" +poll: "アンケート" +useCw: "内容を隠す" +enablePlayer: "プレイヤーを開く" +disablePlayer: "プレイヤーを閉じる" +expandTweet: "ツイートを展開する" +themeEditor: "テーマエディター" +description: "説明" +describeFile: "画像説明文を付ける" +enterFileDescription: "" +author: "作者" +leaveConfirm: "未保存の変更があるで!ほかしてええか?" +manage: "管理" +plugins: "プラグイン" +deck: "デッキ" +undeck: "デッキ解除" +useBlurEffectForModal: "モーダルにぼかし効果を使用" +useFullReactionPicker: "フル機能にリアクションピッカーを使用" +width: "幅" +height: "高さ" +large: "大" +medium: "中" +small: "小" +generateAccessToken: "アクセストークンの発行" +permission: "権限" +enableAll: "全部使えるようにする" +disableAll: "全部使えへんようにする" +tokenRequested: "アカウントへのアクセス許可" +pluginTokenRequestedDescription: "このプラグインはここで設定した権限を使えるようになるで。" +notificationType: "通知の種類" +edit: "投稿をいじる" +emailServer: "メールサーバー" +enableEmail: "メール配信を受け取る" +emailConfigInfo: "メールアドレスの確認とかパスワードリセットの時に使うで" +email: "メール" +emailAddress: "メールアドレス" +smtpConfig: "SMTP サーバーの設定" +smtpHost: "ホスト" +smtpPort: "ポート" +smtpUser: "ユーザー名" +smtpPass: "パスワード" +emptyToDisableSmtpAuth: "ユーザー名とパスワードになんも入れんかったら、SMTP認証を無効化するで" +smtpSecure: "SMTP 接続に暗黙的なSSL/TLSを使用する" +smtpSecureInfo: "STARTTLS使っとる時はオフにするで。" +testEmail: "配信テスト" +wordMute: "ワードミュート" +regexpError: "正規表現エラー" +regexpErrorDescription: "{tab}ワードミュートの{line}行目の正規表現にエラーが出てきたで:" +instanceMute: "サーバーミュート" +userSaysSomething: "{name}が何か言ったようやで" +makeActive: "使うで" +display: "表示" +copy: "コピー" +metrics: "メトリクス" +overview: "概要" +logs: "ログ" +delayed: "遅延" +database: "データベース" +channel: "チャンネル" +create: "作成" +notificationSetting: "通知設定" +notificationSettingDesc: "表示する通知の種類えらんでや。" +useGlobalSetting: "グローバル設定を使ってや" +useGlobalSettingDesc: "オンにすると、アカウントの通知設定が使われるで。オフにすると、別々に設定できるようになるで。" +other: "その他" +regenerateLoginToken: "ログイントークンを再生成" +regenerateLoginTokenDescription: "ログインに使われる内部トークンをもっかい作るで。いつもならこれをやる必要はないで。もっかい作ると、全部のデバイスでログアウトされるで気ぃつけてなー。" +setMultipleBySeparatingWithSpace: "スペースで区切って複数設定できるで。" +fileIdOrUrl: "ファイルIDかURL" +behavior: "動作" +sample: "サンプル" +abuseReports: "通報" +reportAbuse: "通報" +reportAbuseOf: "{name}を通報する" +fillAbuseReportDescription: "細かい通報理由を書いてなー。特定の投稿を通報するなら、そのURLも書いといてなー。" +abuseReported: "無事内容が送信されたみたいやで。おおきに〜。" +reporter: "通報者" +reporteeOrigin: "通報先" +reporterOrigin: "通報元" +forwardReport: "リモートサーバーに通報を転送するで" +forwardReportIsAnonymous: "リモートサーバーからはあんたの情報は見れへんくて、匿名のシステムアカウントとして表示されるで。" +send: "送信" +abuseMarkAsResolved: "対応したで" +openInNewTab: "新しいタブで開く" +openInSideView: "サイドビューで開く" +defaultNavigationBehaviour: "デフォルトのナビゲーション" +editTheseSettingsMayBreakAccount: "このへんの設定をようわからんままイジるとアカウントが壊れて使えんくなるかも知れへんで?" +instanceTicker: "投稿のサーバー情報" +waitingFor: "{x}を待っとるで" +random: "ランダム" +system: "システム" +switchUi: "UI切り替え" +desktop: "デスクトップ" +clip: "クリップ" +createNew: "新しく作るで" +optional: "任意" +createNewClip: "新しいクリップを作るで" +unclip: "クリップ解除するで" +confirmToUnclipAlreadyClippedNote: "この投稿はすでにクリップ「{name}」に含まれとるで。投稿をこのクリップから除外したる?" +public: "パブリック" +i18nInfo: "Firefishは有志によっていろんな言語に翻訳されとるで。{link}で翻訳に協力したってやー。" +manageAccessTokens: "アクセストークンの管理" +accountInfo: "アカウント情報" +notesCount: "投稿の数やで" +repliesCount: "返信した数やで" +renotesCount: "ブーストした数やで" +repliedCount: "返信された数やで" +renotedCount: "ブーストされた数やで" +followingCount: "フォロー数やで" +followersCount: "フォロワー数やで" +sentReactionsCount: "リアクションした数やで" +receivedReactionsCount: "リアクションされた数" +pollVotesCount: "アンケートに投票した数" +pollVotedCount: "アンケートに投票された数" +yes: "はい" +no: "いいえ" +driveFilesCount: "ドライブのファイル数" +driveUsage: "ドライブ使用量やで" +noCrawle: "クローラーによるインデックスを拒否するで" +noCrawleDescription: "検索エンジンにあんたのプロフィール、投稿、ページとかのコンテンツを登録(インデックス)せぇへんように頼むで。" +lockedAccountInfo: "フォローを承認制にしとっても、投稿の公開範囲を「フォロワー」にせん限り、誰でもあんたの投稿を見れるで。" +alwaysMarkSensitive: "デフォルトでメディアを閲覧注意にするで" +loadRawImages: "添付画像のサムネイルをオリジナル画質にするで" +disableShowingAnimatedImages: "アニメーション画像を再生しやへんで" +verificationEmailSent: "無事確認のメールを送れたで。メールに書いてあるリンクにアクセスして、設定を完了してなー。" +notSet: "未設定" +emailVerified: "メールアドレスは確認されたで" +noteFavoritesCount: "お気に入り投稿の数やで" +pageLikesCount: "Pageにええやんと思った数" +pageLikedCount: "Pageにええやんと思ってくれた数" +contact: "連絡先" +useSystemFont: "システムのデフォルトのフォントを使うで" +clips: "クリップ" +experimentalFeatures: "実験的機能やで" +developer: "開発者やで" +makeExplorable: "アカウントを見つけやすくするで" +makeExplorableDescription: "オフにすると、「みっける」ページに名前が載らんくなるで。" +showGapBetweenNotesInTimeline: "タイムライン上の投稿を離して表示するで" +duplicate: "複製" +left: "左" +center: "中央" +wide: "広い" +narrow: "狭い" +reloadToApplySetting: "設定はページリロード後に反映されるで。今リロードしとくか?" +needReloadToApply: "反映には再起動せなあかんで" +showTitlebar: "タイトルバーを見せる" +clearCache: "キャッシュをほかす" +onlineUsersCount: "{n}人が起きとるで" +nUsers: "{n}ユーザー" +nNotes: "{n}投稿" +sendErrorReports: "エラーリポートを送る" +sendErrorReportsDescription: "オンにしたら、なんやけったいなことが起きたときにエラーの詳細がFirefishに共有されて、ソフトウェアの品質向上に役立てられるんや。\n\ + エラー情報には、OSのバージョン、ブラウザの種類、行動履歴などが含まれるで。" +myTheme: "マイテーマ" +backgroundColor: "背景" +accentColor: "アクセント" +textColor: "文字" +saveAs: "名前を付けて保存" +advanced: "高度" +value: "値" +createdAt: "作成した日" +updatedAt: "更新日時" +saveConfirm: "保存するで?" +deleteConfirm: "ホンマに削除するで?" +invalidValue: "有効な値じゃないみたいやで。" +registry: "レジストリ" +closeAccount: "このアカウントにさいならする" +currentVersion: "現在のバージョン" +latestVersion: "最新のバージョン" +youAreRunningUpToDateClient: "今使こてるクライアントが最新やで!" +newVersionOfClientAvailable: "新しいバージョンのクライアントが使えるで。" +usageAmount: "使用量" +capacity: "容量" +inUse: "使用中" +editCode: "コードを編集" +apply: "適用" +receiveAnnouncementFromInstance: "サーバーからのお知らせを受け取る" +emailNotification: "メール通知" +publish: "公開" +inChannelSearch: "チャンネル内検索" +useReactionPickerForContextMenu: "右クリックでリアクションピッカーを開くようにする" +typingUsers: "{users}が今書きよるで" +jumpToSpecifiedDate: "特定の日付にジャンプ" +showingPastTimeline: "過去のタイムラインを表示してるで" +clear: "クリア" +markAllAsRead: "もうみな読んでもうたわ" +goBack: "戻る" +unlikeConfirm: "ええやんを解除するんけ?" +fullView: "フルビュー" +quitFullView: "フルビュー解除" +addDescription: "説明を追加するで" +userPagePinTip: "個々の投稿のメニューから「ピン留め」を選んどくと、ここにそいつを表示しておけるで。" +notSpecifiedMentionWarning: "宛先に含まれてへんメンションがあるで" +info: "情報" +userInfo: "ユーザー情報やで" +unknown: "不明" +onlineStatus: "オンライン状態" +hideOnlineStatus: "オンライン状態を隠すで" +hideOnlineStatusDescription: "オンライン状態を隠すと、検索とかの一部の機能で使いにくくなるかもしれんよ。" +online: "オンライン" +active: "アクティブ" +offline: "オフライン" +notRecommended: "あんま推奨しやんで" +botProtection: "Botプロテクション" +instanceBlocking: "連合の管理" +selectAccount: "アカウントを選んでなー" +switchAccount: "アカウントを変えるで" +enabled: "有効" +disabled: "無効" +quickAction: "クイックアクション" +user: "ユーザー" +administration: "管理" +accounts: "アカウント" +switch: "切り替え" +noMaintainerInformationWarning: "管理者情報が設定されてへんで" +noBotProtectionWarning: "Botプロテクションが設定されてへんで。" +configure: "設定する" +postToGallery: "ギャラリーへ投稿" +gallery: "ギャラリー" +recentPosts: "最近の投稿" +popularPosts: "人気の投稿" +shareWithNote: "投稿で共有" +ads: "広告" +expiration: "期限" +memo: "メモ" +priority: "優先度" +high: "高い" +middle: "中" +low: "低い" +emailNotConfiguredWarning: "メアドの設定がされてへんで。" +ratio: "比率" +previewNoteText: "本文を下見するで" +customCss: "カスタムCSS" +customCssWarn: "この設定は必ず知識のある人がやらなあかん。下手にいじるとわやなって使えんくなってまうで。" +global: "グローバル" +squareAvatars: "アイコンを四角形で表示するで" +sent: "送信" +received: "受信" +searchResult: "検索結果やで" +hashtags: "ハッシュタグ" +troubleshooting: "トラブルシューティング" +useBlurEffect: "UIにぼかし効果を使うで" +learnMore: "詳しく" +misskeyUpdated: "Firefishが更新されたで!\nモデレーターの人らに感謝やね" +whatIsNew: "更新情報を見るで" +translate: "翻訳" +translatedFrom: "{x}から翻訳するで" +accountDeletionInProgress: "アカウント削除しとるで待っとってなー" +usernameInfo: "サーバー上であんたのアカウントをあんたや分かるようにするための名前や。アルファベット(a~z, A~Z)、数字(0~9)、それとアンダーバー(_)が使えるで。この名前は後から変更することはでけへんから、ちゃんと考えや。" +aiChanMode: "藍モードやで" +keepCw: "CWを維持するで" +pubSub: "Pub/Subのアカウント" +lastCommunication: "直近の通信" +resolved: "解決したで" +unresolved: "まだ解決してないで" +breakFollow: "フォロワーを解除するで" +itsOn: "オンになっとるよ" +hide: "隠す" +indefinitely: "無期限" +file: "ファイル" +requireAdminForView: "これを見るには管理者アカウントでログインしとらなあかんで。" +isSystemAccount: "システムが自動で作成・管理しとるアカウントやで。モデレーション・編集・削除するとサーバーの動作が不正になる可能性があるので、操作せんといてください。" +typeToConfirm: "この操作をやるんなら {x} と入力してなー" +deleteAccount: "アカウント削除するで" +document: "ドキュメント" +numberOfPageCache: "ページキャッシュ数やで" +numberOfPageCacheDescription: "増やすと使いやすくなるけど、サーバーの負荷とメモリ使用量が増えてまう。一長一短やな。" +logoutConfirm: "ログアウトしまっか?" +lastActiveDate: "最後に使った日時" +statusbar: "ステータスバー" +pleaseSelect: "選択したってやー" +reverse: "反転" +colored: "色付き" +refreshInterval: "更新間隔" +label: "ラベル" +type: "タイプ" +speed: "速度" +slow: "遅い" +fast: "速い" +sensitiveMediaDetection: "センシティブなメディアの検出" +localOnly: "ローカルのみ" +remoteOnly: "リモートのみ" +failedToUpload: "アップロードに失敗したで" +cannotUploadBecauseInappropriate: "不適切な内容を含むかもしれへんって判定されたでアップロードできまへん。" +cannotUploadBecauseNoFreeSpace: "ドライブの空き容量が無いでアップロードできまへん。" +beta: "ベータ" +enableAutoSensitive: "自動NSFW判定" +enableAutoSensitiveDescription: "いけるときは、機械学習を使って自動でメディアにNSFWフラグを設定するで。この機能をオフにしても、サーバーによっては自動で設定されることがあるで。" +activeEmailValidationDescription: "ユーザーのメールアドレスのバリデーションを、捨てアドかどうかや実際に通信可能かどうかとかを判定して積極的に行うで。オフにすると単に文字列として正しいかどうかだけチェックするで。" +navbar: "ナビゲーションバー" +shuffle: "シャッフルするで" +account: "アカウント" +move: "移動するで" +_sensitiveMediaDetection: + description: "機械学習を使って自動でセンシティブなメディアを検出して、モデレーションに役立てることができるで。サーバーの負荷が少し増えてまうなあ。" + sensitivity: "検出感度やで" + sensitivityDescription: "感度を低くすると、誤検知(偽陽性)が減るで。感度を高くすると、検知漏れ(偽陰性)が減るで。" + setSensitiveFlagAutomatically: "NSFWフラグを設定するで" + setSensitiveFlagAutomaticallyDescription: "この設定をオフにしても内部的に判定結果は保持されるで。" +_ffVisibility: + public: "公開" +_ad: + back: "戻る" +_gallery: + unlike: "やっぱよくないわ" + like: ええやん! + liked: ええやんと思った投稿 +_email: + _follow: + title: "フォローされたで" + _receiveFollowRequest: + title: "フォローリクエストを受け取ったで" +_plugin: + install: "プラグインのインストール" + installWarn: "信頼できへんプラグインはインストールせんとってな" + manage: "プラグインの管理" +_registry: + scope: "スコープ" + key: "キー" + keys: "キー" + domain: "ドメイン" + createKey: "キーを作る" +_aboutFirefish: + about: "Firefishは、ThatOneCalculatorが2022年にMisskeyをいじって作った、オープンなソースのソフトウエアーや。" + contributors: "ごっつい貢献者" + allContributors: "全ての貢献者" + source: "ソースコード" + translation: "Firefishを翻訳" + donate: "Firefishに寄付" + misskeyContributors: フォーク元のMisskeyを作らはった人ら +_mfm: + cheatSheet: "MFMチートシート" + mention: "メンション" + hashtag: "ハッシュタグ" + url: "URL" + link: "リンク" + bold: "太字" + center: "中央寄せ" + inlineCode: "コード(インライン)" + blockCode: "コード(ブロック)" + inlineMath: "数式(インライン)" + quote: "引用" + emoji: "カスタム絵文字" + search: "探す" + shake: "アニメーション(ぶるぶる)" + twitch: "アニメーション(ブレ)" + spin: "アニメーション(回転)" + blur: "ぼかし" + font: "フォント" + rotate: "回転" + intro: MFMは、MisskeyやFirefish、Akkomaなどの様々な場所で使用できるマークアップ言語なんよ。ここでは、MFMで使用可能な構文一覧が確認できるで。 +_instanceTicker: + none: "表示せん" + remote: "リモートユーザーに表示" + always: "常に表示" +_serverDisconnectedBehavior: + reload: "自動でリロード" + dialog: "ダイアログで警告" +_channel: + create: "チャンネルを作る" + edit: "チャンネルを編集" + setBanner: "バナーを設定" + removeBanner: "バナーを削除" + featured: "トレンド" + notesCount: "{n}こ投稿があるで" +_menuDisplay: + hide: "隠す" +_wordMute: + soft: "ソフト" + hard: "ハード" +_theme: + explore: "テーマを探す" + install: "テーマのインストール" + manage: "テーマの管理" + code: "テーマコード" + description: "説明" + installed: "{name}をインストールしたで。" + installedThemes: "インストールされとるテーマ" + builtinThemes: "標準のテーマ" + alreadyInstalled: "そのテーマはもうインストールされとるで?" + make: "テーマを作る" + base: "ベース" + addConstant: "定数を追加" + defaultValue: "デフォルト値" + color: "色" + refProp: "プロパティを参照" + refConst: "定数を参照" + key: "キー" + func: "関数" + funcKind: "関数の種類" + argument: "引数" + basedProp: "元にするプロパティの名前" + alpha: "不透明度" + darken: "暗さ" + lighten: "明るさ" + keys: + accent: "アクセント" + bg: "背景" + fg: "文字" + focus: "フォーカス" + indicator: "インジケーター" + panel: "パネル" + shadow: "影" + header: "ヘッダー" + navBg: "サイドバーの背景" + navFg: "サイドバーの文字" + navHoverFg: "サイドバー文字(ホバー)" + navActive: "サイドバー文字(アクティブ)" + navIndicator: "サイドバーのインジケーター" + link: "リンク" + hashtag: "ハッシュタグ" + mention: "メンション" + mentionMe: "うち宛てのメンション" + renote: "ブースト" + modalBg: "モーダルの背景" + divider: "分割線" + scrollbarHandle: "スクロールバーの取っ手" + scrollbarHandleHover: "スクロールバーの取っ手(ホバー)" + dateLabelFg: "日付ラベルの文字" + infoBg: "情報の背景" + infoFg: "情報の文字" + infoWarnBg: "警告の背景" + infoWarnFg: "警告の文字" + cwBg: "CW ボタンの背景" + cwFg: "CW ボタンの文字" + cwHoverBg: "CW ボタンの背景 (ホバー)" + toastBg: "通知トーストの背景" + toastFg: "通知トーストの文字" + buttonBg: "ボタンの背景" + buttonHoverBg: "ボタンの背景 (ホバー)" + inputBorder: "入力ボックスの縁取り" + listItemHoverBg: "リスト項目の背景 (ホバー)" + driveFolderBg: "ドライブフォルダーの背景" + wallpaperOverlay: "壁紙のオーバーレイ" + badge: "バッジ" + messageBg: "チャットの背景" + accentDarken: "アクセント (暗め)" + accentLighten: "アクセント (明るめ)" + fgHighlighted: "強調されとる文字" +_sfx: + note: "投稿" + noteMy: "投稿(自分)" + notification: "通知" + chat: "チャット" +_ago: + future: "未来" + justNow: "たった今" + secondsAgo: "{n}秒前" + minutesAgo: "{n}分前" + hoursAgo: "{n}時間前" + daysAgo: "{n}日前" + weeksAgo: "{n}週間前" + monthsAgo: "{n}ヶ月前" + yearsAgo: "{n}年前" +_time: + second: "秒" + minute: "分" + hour: "時間" + day: "日" +_2fa: + alreadyRegistered: "もう設定終わっとるわ。" +_permissions: + "read:reactions": "リアクションを見る" + "write:votes": "投票する" + "read:pages": "ページを見る" + "read:page-likes": "ページのええやんを見る" + "write:page-likes": "ページのええやんを操作する" + "read:user-groups": "ユーザーグループを見る" + "read:channels": "チャンネルを見る" +_auth: + permissionAsk: "このアプリは次の権限を要求しとるで" +_antennaSources: + all: "みんなの投稿" + homeTimeline: "フォローしとるユーザーの投稿" +_weekday: + sunday: "日曜日" + monday: "月曜日" + tuesday: "火曜日" + wednesday: "水曜日" + thursday: "木曜日" + friday: "金曜日" + saturday: "土曜日" +_widgets: + memo: "付箋" + notifications: "通知" + timeline: "タイムライン" + calendar: "カレンダー" + trends: "トレンド" + clock: "時計" + rss: "RSSリーダー" + activity: "アクティビティ" + photos: "フォト" + digitalClock: "デジタル時計" + federation: "連合" + postForm: "投稿フォーム" + slideshow: "スライドショー" + button: "ボタン" + onlineUsers: "オンラインユーザー" + jobQueue: "ジョブキュー" + serverMetric: "サーバーメトリクス" + aiscript: "AiScriptコンソール" +_cw: + hide: "隠す" + show: "続き見して!" + chars: "{count}文字" + files: "{count}ファイル" +_poll: + choiceN: "選択肢{n}" + noMore: "これ以上追加でけへん" + canMultipleVote: "複数回答可" + expiration: "期限" + infinite: "無期限" + at: "日時指定" + after: "経過指定" + deadlineDate: "期日" + deadlineTime: "時間" + duration: "期間" + votesCount: "{n}票" + vote: "投票する" +_visibility: + publicDescription: "うちの投稿、みんな見てや" + home: "ホームタイムラインのみ" + followers: "フォロワーのみ" + localOnly: ローカルのみ + followersDescription: フォロワーと返信相手だけに見せたる + specified: ダイレクト + localOnlyDescription: 他のサーバーには見せとうない + specifiedDescription: 指定した相手だけに見せたる + public: 公開 + homeDescription: ローカルTLやグローバルTLには流さへん +_profile: + name: "お名前" + username: "ユーザー名" + youCanIncludeHashtags: ハッシュタグを書いてもええよ。 +_exportOrImport: + allNotes: "すべての投稿" + followingList: "フォロー" + muteList: "ミュート" + blockingList: "ブロック" + userLists: "リスト" +_charts: + federation: "連合" + apRequest: "リクエスト" + usersTotal: "ユーザーの合計" + activeUsers: "アクティブユーザー数" + notesIncDec: "投稿の増減" + localNotesIncDec: "ローカルの投稿の増減" + remoteNotesIncDec: "リモートの投稿の増減" + notesTotal: "投稿の合計" + filesIncDec: "ファイルの増減" + filesTotal: "ファイルの合計" + storageUsageIncDec: "ストレージ使用量の増減" + storageUsageTotal: "ストレージ使用量の合計" +_instanceCharts: + requests: "リクエスト" + users: "ユーザーの増減" + usersTotal: "ユーザーの累積" + notes: "投稿の増減" + notesTotal: "投稿の累積" + ff: "フォロー/フォロワーの増減" + ffTotal: "フォロー/フォロワーの累積" + cacheSize: "キャッシュサイズの増減" + cacheSizeTotal: "キャッシュサイズの累積" + files: "ファイル数の増減" + filesTotal: "ファイル数の累積" +_timelines: + home: "ホーム" + local: "ローカル" + social: "ソーシャル" + global: "グローバル" +_pages: + newPage: "ページを作る" + editPage: "ページの編集" + readPage: "ソースを表示中" + created: "ページを作成したで" + updated: "ページを更新したで" + deleted: "ページを削除したで" + pageSetting: "ページ設定" + viewPage: "ページを見る" + like: "ええやん" + unlike: "やっぱ気に入らん" + liked: "ええと思ったページ" + contents: "コンテンツ" + summary: "ページの要約" + alignCenter: "中央寄せ" + font: "フォント" + fontSerif: "セリフ" + fontSansSerif: "サンセリフ" + eyeCatchingImageSet: "アイキャッチ画像を設定" + eyeCatchingImageRemove: "アイキャッチ画像を削除" + chooseBlock: "ブロックを追加" + selectType: "種類を選択" + contentBlocks: "コンテンツ" + inputBlocks: "入力" + specialBlocks: "特殊" + blocks: + text: "テキスト" + textarea: "テキストエリア" + section: "セクション" + image: "画像" + button: "ボタン" + if: "もし" + _if: + variable: "変数" + post: "投稿フォーム" + _post: + text: "内容" + canvasId: "キャンバスID" + textInput: "テキスト入力" + _textInput: + name: "変数名" + text: "タイトル" + default: "デフォルト値" + textareaInput: "複数行テキスト入力" + _textareaInput: + name: "変数名" + text: "タイトル" + default: "デフォルト値" + numberInput: "数値入力" + _numberInput: + name: "変数名" + text: "タイトル" + default: "デフォルト値" + canvas: "キャンバス" + _canvas: + id: "キャンバスID" + width: "幅" + height: "高さ" + note: "投稿の埋め込み" + _note: + id: "投稿のID" + detailed: "詳細な表示" + switch: "スイッチ" + _switch: + name: "変数名" + text: "タイトル" + default: "デフォルト値" + counter: "カウンター" + _counter: + name: "変数名" + text: "タイトル" + inc: "増加値" + _button: + text: "タイトル" + colored: "色付き" + action: "ボタンを押したときの動作" + _action: + dialog: "ダイアログを表示する" + _dialog: + content: "内容" + resetRandom: "乱数をリセット" + pushEvent: "イベントを送信させる" + _pushEvent: + event: "イベント名" + no-variable: "なし" + callAiScript: "AiScript呼び出し" + _callAiScript: + functionName: "関数名" + radioButton: "選択肢" + _radioButton: + name: "変数名" + title: "タイトル" + values: "改行で区切った選択肢" + default: "デフォルト値" + script: + categories: + flow: "制御" + logical: "論理演算" + operation: "計算" + comparison: "比較" + random: "ランダム" + value: "値" + fn: "関数" + text: "関数" + convert: "変換" + list: "リスト" + blocks: + text: "テキスト" + multiLineText: "テキスト(複数行)" + textList: "テキストのリスト" + strLen: "テキストの長さ" + _strLen: + arg1: "テキスト" + strPick: "文字取り出し" + _strPick: + arg1: "テキスト" + arg2: "文字の位置" + strReplace: "テキスト置き換え" + _strReplace: + arg1: "テキスト" + arg2: "置き換え前" + arg3: "置き換え後" + strReverse: "テキストを反転" + _strReverse: + arg1: "テキスト" + join: "テキストを連結" + _join: + arg1: "リスト" + arg2: "区切り" + add: "足す" + _add: + arg1: "A" + arg2: "B" + subtract: "引く" + _subtract: + arg1: "A" + arg2: "A" + multiply: "掛ける" + _multiply: + arg1: "A" + arg2: "B" + divide: "割る" + _divide: + arg1: "A" + arg2: "B" + mod: "割った余り" + _mod: + arg1: "A" + arg2: "B" + round: "小数を丸める" + _round: + arg1: "数値" + eq: "AとBが同じ" + _eq: + arg1: "A" + arg2: "B" + notEq: "AとBが異なる" + _notEq: + arg1: "A" + arg2: "B" + and: "AかつB" + _and: + arg1: "A" + arg2: "B" + or: "AまたはB" + _or: + arg1: "A" + arg2: "B" + lt: "< AがBより小さい" + _lt: + arg1: "A" + arg2: "B" + gt: "> AがBより大きい" + _gt: + arg1: "A" + arg2: "B" + ltEq: "<= AがBと同じか小さい" + _ltEq: + arg1: "A" + arg2: "B" + gtEq: ">= AがBと同じか大きい" + _gtEq: + arg1: "A" + arg2: "B" + if: "分岐" + _if: + arg1: "もし" + arg2: "なら" + arg3: "そうでなければ" + not: "否定" + _not: + arg1: "否定" + random: "ランダム" + _random: + arg1: "確率" + rannum: "乱数" + _rannum: + arg1: "最小" + arg2: "最大" + randomPick: "リストからランダムに選ぶ" + _randomPick: + arg1: "リスト" + dailyRandom: "ランダム (ユーザーごとに日替わり)" + _dailyRandom: + arg1: "確率" + dailyRannum: "乱数 (ユーザーごとに日替わり)" + _dailyRannum: + arg1: "最小" + arg2: "最大" + dailyRandomPick: "リストからランダムに選ぶ (ユーザーごとに日替わり)" + _dailyRandomPick: + arg1: "リスト" + seedRandom: "ランダム (シード)" + _seedRandom: + arg1: "シード" + arg2: "確率" + seedRannum: "乱数 (シード)" + _seedRannum: + arg1: "シード" + arg2: "最小" + arg3: "最大" + seedRandomPick: "リストからランダムに選択 (シード)" + _seedRandomPick: + arg1: "シード" + arg2: "リスト" + DRPWPM: "確率付きリストからランダムに選ぶ (ユーザーごとに日替わり)" + _DRPWPM: + arg1: "テキストのリスト" + pick: "リストから選ぶ" + _pick: + arg1: "リスト" + arg2: "位置" + listLen: "リストの長さを取得" + _listLen: + arg1: "リスト" + number: "数値" + stringToNumber: "テキストを数値に" + _stringToNumber: + arg1: "テキスト" + numberToString: "数値をテキストに" + _numberToString: + arg1: "数値" + splitStrByLine: "テキストを行で分割" + _splitStrByLine: + arg1: "テキスト" + ref: "変数" + aiScriptVar: "AiScript変数" + fn: "関数" + _fn: + slots: "スロット" + arg1: "出力" + for: "繰り返し" + _for: + arg1: "回数" + arg2: "処理" + thereIsEmptySlot: "スロット{slot}が空っぽやで!" + types: + string: "テキスト" + number: "数値" + boolean: "フラグ" + array: "リスト" + stringArray: "テキストのリスト" + emptySlot: "空のスロット" + enviromentVariables: "環境変数" + pageVariables: "ページ要素" + argVariables: "入力スロット" +_notification: + fileUploaded: "ファイルが無事アップロードされたで。" + youGotMention: "{name}からのメンション" + youGotReply: "{name}からのリプライ" + youWereFollowed: "フォローされたで" + youReceivedFollowRequest: "フォロー許可してほしいみたいやな" + yourFollowRequestAccepted: "フォローさせてもろたで" + youWereInvitedToGroup: "グループに招待されとるで" + _types: + all: "すべて" + follow: "フォロー" + mention: "メンション" + renote: "ブースト" + quote: "引用" + reaction: "リアクション" + receiveFollowRequest: "フォロー許可してほしいみたいやで" + followRequestAccepted: "フォローが受理されたで" + _actions: + reply: "返事" + renote: "ブースト" +_deck: + alwaysShowMainColumn: "いつもメインカラムを表示" + columnAlign: "カラムの寄せ" + addColumn: "カラムを追加" + swapLeft: "左に移動" + swapRight: "右に移動" + swapUp: "上に移動" + swapDown: "下に移動" + stackLeft: "左に重ねる" + popRight: "右に出す" + profile: "プロファイル" + _columns: + main: "メイン" + widgets: "ウィジェット" + notifications: "通知" + tl: "タイムライン" + antenna: "アンテナ" + list: "リスト" + mentions: "あんた宛て" + direct: "ダイレクト" +_experiments: + postImportsCaption: + ユーザーが過去の投稿をFirefish・Misskey・Mastodon・Akkoma・Pleromaからインポートできるようにするで。キューが溜まっとるときにインポートするとサーバーに負荷がかかるかもしれんね。 +searchPlaceholder: Firefishを検索 +addInstance: サーバーを追加 +editNote: 投稿を編集 +edited: '編集済み: {date} {time}' +deleted: 削除済み +noThankYou: いらんわ +_tutorial: + step3_1: ほな、何人かフォローしてみまひょ + step1_1: おこしやす + step1_2: 使い始める前に、いくつか設定を済ませまひょ。すぐできますえ。 + step2_1: 最初に、あんさんのプロフィールを作りまひょ + step2_2: プロフィールを設定しはることで、他ん人があんさんの投稿を見たり、フォローしたりするときの助けになってます。 + step3_2: "あんさんのホームとソーシャルタイムラインは、どなたはんをフォローしはるかで決まります。ほな、いくつかアカウントをフォローしてみまひょ。\n\ + プロフィールの右上にある、まあるい+ボタンをクリックしはるとフォローできますえ。" + step4_1: 投稿しとーみ + step5_1: タイムライン! 文字と写真の宝石箱や~ + step5_2: うちのサーバーでは{timelines}種類のタイムラインをご用意しとります。 + step4_2: 最初は{introduction}に投稿したり、シンプルに「ここは賑やかどすなぁ」などと投稿しはる方もいてます。 + step5_7: グローバル{icon}タイムラインでは、接続しとるそこいらのサーバーからアレがガーッ流れてきてえらいこっちゃで。 + step5_6: おすすめ{icon}タイムラインでは、うちの管理人がばりおすすめしとるサーバーの投稿を表示させとうよ。 + step5_5: ソーシャル{icon}タイムラインでは、ホームタイムラインとローカルタイムラインの投稿が両方見られてホンマお得やわぁ。 + step5_3: ホーム{icon}タイムラインでは、あんたはんがフォローしてはる兄ちゃんらの投稿が見られまんねん。 + step5_4: ローカル{icon}タイムラインでは、このサーバーにおる人らの投稿を見られますわ。 + step6_1: ほんなら、ここはどないな場所なん? + step6_2: 実は、あんたはんはFirefishに参加しただけやあらしまへん。ここは、何千もの相互接続されたサーバーが構成しとる Fediverse への入口どす。 + step6_3: + それぞれのサーバーでは必ずしもFirefishが使われとるわけやなく、異なる動作をしはるサーバーもあります。せやけど、あんたはんは他のサーバーのアカウントもフォローしたり、返信・ブーストしたりできます。一見難儀そやけど、だんない!あんじょうやれますえ。 + step6_4: これで完了どす。楽しんどくれやす! +_postForm: + _placeholders: + b: なんかおましたか? + e: ここに書いとくれやす + c: なに考えとりまっか? + d: なんや言いたいんちゃいますか? + f: あんさん書くんを待っとるんどす... + a: いまなにしとん? +flagSpeakAsCat: 猫弁で喋る +flagSpeakAsCatDescription: オンにすると、ワレの投稿の「な」「na」を「にゃ」「nya」に変換したるで。 +welcomeBackWithName: おおきに、{name}はん +migration: アカウントの引っ越し +makeReactionsPublicDescription: あんたが付けたリアクションの一覧をみんなにも見せたるで。 diff --git a/locales/kab.yml b/locales/kab.yml new file mode 100644 index 0000000..8cb6e67 --- /dev/null +++ b/locales/kab.yml @@ -0,0 +1,124 @@ +--- +_lang_: "Taqbaylit" +monthAndDay: "{day}/{month}" +search: "Nadi" +notifications: "Ilɣuyen" +username: "Isem n umseqdac" +password: "Awal uffir" +ok: "IH" +settings: "Iɣewwaṛen" +otherSettings: "Iɣewwaren nniḍen" +profile: "Amaɣnu" +signup: "Jerred" +save: "Sekles" +delete: "Kkes" +addToList: "Rnu ɣer tebdart" +reply: "Err" +loadMore: "Wali ugar" +showMore: "Wali ugar" +youGotNewFollower: "Yeṭṭafaṛ-ik·em-id" +mention: "Bder" +import: "Kter" +export: "Sifeḍ" +files: "Ifuyla" +download: "Sider" +lists: "Tibdarin" +noLists: "Ulac ɣur-k·m ula d yiwet n tabdart" +following: "Ig ṭṭafaṛ" +followers: "Imeḍfaṛen" +followsYou: "Yeṭṭafaṛ-ik·em-id" +createList: "Snulfu-d tabdart" +enterListName: "Isem n tebdart" +privacy: "Tabaḍnit" +follow: "Ḍfeṛ" +you: "Kečči·mmi" +selectList: "Fren tabdart" +youHaveNoLists: "Ulac ɣur-k·m ula d yiwet n tabdart" +security: "Taɣellist" +remove: "Kkes" +userList: "Tibdarin" +securityKey: "Tasarutt n tɣellist" +securityKeyName: "Isem n tsarutt" +signinRequired: "Ttxil jerred" +signinWith: "Tuqqna s {x}" +tapSecurityKey: "Sekcem tasarutt-ik·im n tɣellist" +uiLanguage: "Tutlayt n wegrudem" +accountSettings: "Iɣewwaṛen n umiḍan" +plugins: "Izegrar" +email: "Imayl" +emailAddress: "Tansa imayl" +smtpUser: "Isem n umseqdac" +smtpPass: "Awal uffir" +other: "Wiyyaḍ" +accountInfo: "Talɣut n umiḍan" +emailNotification: "Ilɣa imayl" +selectAccount: "Fren amiḍan" +accounts: "Imiḍan" +file: "Ifuyla" +account: "Imiḍan" +_email: + _follow: + title: "Yeṭṭafaṛ-ik·em-id" +_mfm: + mention: "Bder" + search: "Nadi" + font: "Tasefsit" +_theme: + keys: + mention: "Bder" +_sfx: + notification: "Ilɣuyen" +_permissions: + "write:account": "Ẓreg talɣut n umiḍan-ik·im" +_widgets: + notifications: "Ilɣuyen" +_cw: + show: "Wali ugar" +_visibility: + followers: "Imeḍfaṛen" +_profile: + username: "Isem n umseqdac" +_exportOrImport: + followingList: "Ig ṭṭafaṛ" + muteList: "Sgugem" + blockingList: "Seḥbes" + userLists: "Tibdarin" +_pages: + contents: "Agbur" + font: "Tasefsit" + fontSerif: "Serif" + fontSansSerif: "Sans Serif" + eyeCatchingImageRemove: "Kkes tugna i d-ijebden" + selectType: "Fren anaw" + contentBlocks: "Agbur" + inputBlocks: "Anekcum" + specialBlocks: "Uzzig" + script: + categories: + list: "Tibdarin" + blocks: + _join: + arg1: "Tibdarin" + _randomPick: + arg1: "Tibdarin" + _dailyRandomPick: + arg1: "Tibdarin" + _seedRandomPick: + arg2: "Tibdarin" + _pick: + arg1: "Tibdarin" + _listLen: + arg1: "Tibdarin" + types: + array: "Tibdarin" +_notification: + youWereFollowed: "Yeṭṭafaṛ-ik·em-id" + _types: + follow: "Ig ṭṭafaṛ" + mention: "Bder" + _actions: + reply: "Err" +_deck: + _columns: + notifications: "Ilɣuyen" + list: "Tibdarin" diff --git a/locales/kn-IN.yml b/locales/kn-IN.yml new file mode 100644 index 0000000..b02c684 --- /dev/null +++ b/locales/kn-IN.yml @@ -0,0 +1,85 @@ +--- +_lang_: "ಕನ್ನಡ" +introFirefish: "ಸ್ವಾಗತ! Firefish ಓಪನ್ ಸೋರ್ಸ್ ಒಕ್ಕೂಟ ಮೈಕ್ರೋಬ್ಲಾಗಿಂಗ್ ಸೇವೆಯಾಗಿದೆ.\n ಏನಾಗುತ್ತಿದೆ ಎಂಬುದನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಅಥವಾ ನಿಮ್ಮ ಬಗ್ಗೆ ಎಲ್ಲರಿಗೂ ಹೇಳಲು \"ಟಿಪ್ಪಣಿ\"ಗಳನ್ನು ರಚಿಸಿ📡\n \"ಸ್ಪಂದನೆ\" ಕ್ರಿಯೆಯೊಂದಿಗೆ, ನೀವು ಎಲ್ಲರ ಟಿಪ್ಪಣಿಗಳಿಗೆ ತ್ವರಿತವಾಗಿ ಸ್ಪಂದನೆಗಳನ್ನು ಕೂಡ ಸೇರಿಸಬಹುದು.👍\n ಹೊಸ ಜಗತ್ತನ್ನು ಅನ್ವೇಷಿಸಿ🚀" +monthAndDay: "{month}ನೇ ತಿಂಗಳ {day}ನೇ ದಿನ" +search: "ಹುಡುಕು" +notifications: "ಅಧಿಸೂಚನೆಗಳು" +username: "ಬಳಕೆಹೆಸರು" +password: "ಗುಪ್ತಪದ" +fetchingAsApObject: "ಒಕ್ಕೂಟದಿಂದ ಪಡೆಯಲಾಗುತ್ತಿದೆ" +ok: "ಸರಿ" +gotIt: "ಅರ್ಥವಾಯಿತು!" +cancel: "ರದ್ದು" +enterUsername: "ಬಳಕೆಹೆಸರನ್ನು ಭರ್ತಿ ಮಾಡಿ" +renotedBy: "{user} ಪುನರಾವರ್ತಿಸಿದರು" +noNotes: "ಟಿಪ್ಪಣಿಗಳಿಲ್ಲ" +noNotifications: "ಅಧಿಸೂಚನೆಗಳಿಲ್ಲ" +instance: "ನಿದರ್ಶನ" +settings: "ಸಿದ್ಧತೆಗಳು" +profile: "ಪ್ರೊಫೈಲು" +timeline: "ಸಮಯಸಾಲು" +noAccountDescription: "ಇವರು ಸ್ವಯಂ ಪರಿಚಯ ರಚಿಸಿಲ್ಲ" +login: "ಪ್ರವೇಶ" +loggingIn: "ಪ್ರವೇಶಿಸುತ್ತಾ..." +logout: "ಆಚೆಗೆ" +signup: "ನೋಂದಣಿ" +uploading: "ಅಪ್‌ಲೋಡಾಗುತ್ತಿದೆ" +save: "ಉಳಿಸಿ" +users: "ಬಳಕೆದಾರ" +addUser: "ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸಿ" +favorite: "ಮೆಚ್ಚಿನ" +favorites: "ಮೆಚ್ಚಿನವುಗಳು" +unfavorite: "ಮೆಚ್ಚುಗೆ ಅಳಿಸು" +pin: "ಪ್ರೊಫ಼ೈಲಿಗೆ ಅಂಟಿಸು" +unpin: "ಪ್ರೊಫ಼ೈಲಿಂದ ಅಂಟುತೆಗೆ" +copyContent: "ವಿಷಯವನ್ನು ನಕಲಿಸು" +copyLink: "ಲಿಂಕನ್ನು ನಕಲಿಸು" +delete: "ಅಳಿಸು" +addToList: "ಪಟ್ಟಿಗೆ ಸೇರಿಸು" +sendMessage: "ಸಂದೇಶ ಕಳುಹಿಸು" +copyUsername: "ಬಳಕೆಹೆಸರು ನಕಲಿಸು" +reply: "ಉತ್ತರಿಸು" +loadMore: "ಇನ್ನಷ್ಟು ನೋಡು" +showMore: "ಇನ್ನಷ್ಟು ನೋಡು" +youGotNewFollower: "ಹಿಂಬಾಲಿಸಿದರು" +receiveFollowRequest: "ಹಿಂಬಾಲನೆ ವಿನಂತಿ ಬಂದಿದೆ" +followRequestAccepted: "ಹಿಂಬಾಲನೆ ವಿನಂತಿ ಸ್ವೀಕರಿಸಲಾಯಿತು" +mentions: "ಹೆಸರಿಸಿದ" +directNotes: "ನೇರ ಟಿಪ್ಪಣಿಗಳು" +importAndExport: "ಆಮದು/ರಫ್ತು" +import: "ಆಮದು" +export: "ರಫ್ತು" +files: "ಕಡತಗಳು" +download: "ಜಾಲದಿಂದಿಳಿಸು" +driveFileDeleteConfirm: "\"{name}\" ಕಡತವನ್ನು ಅಳಿಸಲು ನೀವು ಬಯಸುವಿರಾ? ಈ ನೋಡಿರಿ ಲಗತ್ತಿಸಲಾದ ಟಿಪ್ಪಣಿ ಸಹ ಕಣ್ಮರೆಯಾಗುತ್ತದೆ." +unfollowConfirm: "{name}ಅನ್ನು ಹಿಂಬಾಲಿಸದಿರುವುದೇ?" +pinned: "ಪ್ರೊಫ಼ೈಲಿಗೆ ಅಂಟಿಸು" +instances: "ನಿದರ್ಶನ" +remove: "ಅಳಿಸು" +smtpUser: "ಬಳಕೆಹೆಸರು" +smtpPass: "ಗುಪ್ತಪದ" +user: "ಬಳಕೆದಾರ" +file: "ಕಡತಗಳು" +_email: + _follow: + title: "ಹಿಂಬಾಲಿಸಿದರು" +_mfm: + search: "ಹುಡುಕು" +_sfx: + notification: "ಅಧಿಸೂಚನೆಗಳು" +_widgets: + notifications: "ಅಧಿಸೂಚನೆಗಳು" + timeline: "ಸಮಯಸಾಲು" +_cw: + show: "ಇನ್ನಷ್ಟು ನೋಡು" +_profile: + username: "ಬಳಕೆಹೆಸರು" +_notification: + youWereFollowed: "ಹಿಂಬಾಲಿಸಿದರು" + _actions: + reply: "ಉತ್ತರಿಸು" +_deck: + _columns: + notifications: "ಅಧಿಸೂಚನೆಗಳು" + tl: "ಸಮಯಸಾಲು" + mentions: "ಹೆಸರಿಸಿದ" diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml new file mode 100644 index 0000000..2f2c54c --- /dev/null +++ b/locales/ko-KR.yml @@ -0,0 +1,2004 @@ +_lang_: "한국어" +headlineFirefish: "영원히 무료로 제공되는 오픈 소스 탈중앙화 소셜 미디어 플랫폼 🚀" +introFirefish: "환영합니다! Firefish 는 영원히 무료로 제공되는 오픈 소스 분산형 소셜 미디어 플랫폼입니다! 🚀" +monthAndDay: "{month}월 {day}일" +search: "검색" +notifications: "알림" +username: "유저명" +password: "비밀번호" +forgotPassword: "비밀번호 재설정" +fetchingAsApObject: "연합에서 조회 중" +ok: "OK" +gotIt: "알겠어요!" +cancel: "취소" +enterUsername: "유저명 입력" +renotedBy: "{user}님이 부스트" +noNotes: "게시물이 없습니다" +noNotifications: "표시할 알림이 없습니다" +instance: "서버" +settings: "설정" +basicSettings: "기본 설정" +otherSettings: "기타 설정" +openInWindow: "창으로 열기" +profile: "프로필" +timeline: "타임라인" +noAccountDescription: "자기소개가 없습니다." +login: "로그인" +loggingIn: "로그인 중" +logout: "로그아웃" +signup: "회원 가입" +uploading: "업로드 중..." +save: "저장" +users: "유저" +addUser: "유저 추가" +favorite: "즐겨찾기" +favorites: "즐겨찾기" +unfavorite: "즐겨찾기에서 제거" +favorited: "즐겨찾기에 등록했습니다." +alreadyFavorited: "이미 즐겨찾기에 등록되어 있습니다." +cantFavorite: "즐겨찾기에 등록하지 못했습니다." +pin: "프로필에 고정" +unpin: "프로필에서 고정 해제" +copyContent: "내용 복사" +copyLink: "링크 복사" +delete: "삭제" +deleteAndEdit: "삭제 후 편집" +deleteAndEditConfirm: "이 게시물을 삭제한 뒤 다시 편집하시겠습니까? 이 게시물에 대한 리액션, 부스트, 답글 또한 모두 삭제됩니다." +addToList: "리스트에 추가" +sendMessage: "메시지 보내기" +copyUsername: "유저명 복사" +searchUser: "사용자 검색" +reply: "답글" +loadMore: "더 보기" +showMore: "더 보기" +showLess: "닫기" +youGotNewFollower: "새로운 팔로워가 있습니다" +receiveFollowRequest: "새로운 팔로우 요청이 있습니다" +followRequestAccepted: "팔로우가 수락되었습니다" +mention: "멘션" +mentions: "받은 멘션" +directNotes: "다이렉트 게시물" +importAndExport: "가져오기와 내보내기" +import: "가져오기" +export: "내보내기" +files: "파일" +download: "다운로드" +driveFileDeleteConfirm: "파일 \"{name}\" 을 삭제하시겠습니까? 이 파일이 첨부되었더 게시물에서도 같이 삭제됩니다." +unfollowConfirm: "{name}님을 언팔로우하시겠습니까?" +exportRequested: "내보내기를 요청하였습니다. 이 작업은 시간이 걸릴 수 있습니다. 내보내기가 완료되면 \"드라이브\"에 추가됩니다." +importRequested: "가져오기를 요청하였습니다. 이 작업에는 시간이 걸릴 수 있습니다." +lists: "리스트" +noLists: "리스트가 없습니다" +note: "게시" +notes: "게시물" +following: "팔로잉" +followers: "팔로워" +followsYou: "당신을 팔로우합니다" +createList: "리스트 만들기" +manageLists: "리스트 관리" +error: "오류" +somethingHappened: "오류가 발생했습니다" +retry: "다시 시도" +pageLoadError: "페이지를 불러오지 못했습니다." +pageLoadErrorDescription: "네트워크 연결 또는 브라우저 캐시로 인해 발생했을 가능성이 높습니다. 캐시를 삭제하거나, 잠시 후 + 다시 시도해 주세요." +serverIsDead: "서버로부터 응답이 없습니다. 잠시 후 다시 시도해주세요." +youShouldUpgradeClient: "이 페이지를 표시하려면 새로고침하여 새로운 버전의 클라이언트를 이용해 주십시오." +enterListName: "리스트 이름을 입력" +privacy: "프라이버시" +makeFollowManuallyApprove: "팔로우를 수동으로 승인" +defaultNoteVisibility: "기본 공개 범위" +follow: "팔로우" +followRequest: "팔로우 요청" +followRequests: "팔로우 요청" +unfollow: "팔로우 해제" +followRequestPending: "팔로우 허가 대기중" +enterEmoji: "이모지 입력" +renote: "부스트" +unrenote: "부스트 취소" +renoted: "부스트 하였습니다." +cantRenote: "이 게시물은 부스트할 수 없습니다." +cantReRenote: "부스트를 부스트할 수 없습니다." +quote: "인용" +pinnedNote: "고정해놓은 게시물" +pinned: "프로필에 고정" +you: "당신" +clickToShow: "클릭하여 보기" +sensitive: "열람주의" +add: "추가" +reaction: "리액션" +reactionSetting: "선택기에 표시할 리액션" +reactionSettingDescription2: "끌어서 순서 변경, 클릭해서 삭제, +를 눌러서 추가할 수 있습니다." +rememberNoteVisibility: "공개 범위를 기억하기" +attachCancel: "첨부 취소" +markAsSensitive: "열람주의로 설정" +unmarkAsSensitive: "열람주의 해제" +enterFileName: "파일명을 입력" +mute: "뮤트" +unmute: "뮤트 해제" +block: "차단" +unblock: "차단 해제" +suspend: "정지" +unsuspend: "정지 해제" +blockConfirm: "이 계정을 차단하시겠습니까?" +unblockConfirm: "이 계정의 차단을 해제하시겠습니까?" +suspendConfirm: "이 계정을 정지하시겠습니까?" +unsuspendConfirm: "이 계정의 정지를 해제하시겠습니까?" +selectList: "리스트 선택" +selectAntenna: "안테나 선택" +selectWidget: "위젯 선택" +editWidgets: "위젯 편집" +editWidgetsExit: "편집 종료" +customEmojis: "커스텀 이모지" +emoji: "이모지" +emojis: "이모지" +emojiName: "이모지 이름" +emojiUrl: "이모지 URL" +addEmoji: "이모지 추가" +settingGuide: "추천 설정" +cacheRemoteFiles: "리모트 파일을 캐시" +cacheRemoteFilesDescription: "이 설정을 해지하면 리모트 파일을 캐시하지 않고 해당 파일을 직접 링크하게 됩니다. 그에 따라 + 서버의 저장 공간을 절약할 수 있지만, 썸네일이 생성되지 않기 때문에 통신량이 증가합니다." +flagAsBot: "나는 봇입니다" +flagAsBotDescription: "이 계정을 자동화된 수단으로 운용할 경우에 활성화해 주세요. 이 플래그를 활성화하면, 다른 봇이 이를 참고하여 + 봇 끼리의 무한 연쇄 반응을 회피하거나, 이 계정의 시스템 상에서의 취급이 Bot 운영에 최적화되는 등의 변화가 생깁니다." +flagAsCat: "나는 고양이다냥" +flagAsCatDescription: "고양이귀를 쓰고 냥냥거려요!" +flagShowTimelineReplies: "타임라인에 게시물의 답글을 표시하기" +flagShowTimelineRepliesDescription: "이 설정을 활성화하면 타임라인에 다른 유저 간의 답글을 표시합니다." +autoAcceptFollowed: "팔로우 중인 유저로부터의 팔로우 요청을 자동 수락" +addAccount: "계정 추가" +loginFailed: "로그인에 실패했습니다" +showOnRemote: "원본 페이지 열기" +general: "일반" +wallpaper: "배경" +setWallpaper: "배경화면 설정" +removeWallpaper: "배경 제거" +searchWith: "검색: {q}" +youHaveNoLists: "리스트가 없습니다" +followConfirm: "{name}님을 팔로우 하시겠습니까?" +proxyAccount: "프록시 계정" +proxyAccountDescription: "프록시 계정은 특정 조건 하에서 유저의 리모트 팔로우를 대행하는 계정입니다. 예를 들면, 유저가 리모트 + 유저를 리스트에 넣었을 때, 리스트에 들어간 유저를 아무도 팔로우한 적이 없다면 액티비티가 서버로 배달되지 않기 때문에, 대신 프록시 계정이 해당 + 유저를 팔로우하도록 합니다." +host: "호스트" +selectUser: "유저 선택" +recipient: "수신인" +annotation: "내용에 대한 주석" +federation: "연합" +instances: "서버" +registeredAt: "등록 날짜" +latestRequestSentAt: "마지막으로 요청을 보낸 시간" +latestRequestReceivedAt: "마지막으로 요청을 받은 시간" +latestStatus: "마지막 상태" +storageUsage: "스토리지 사용량" +charts: "차트" +perHour: "1시간마다" +perDay: "1일마다" +stopActivityDelivery: "액티비티 보내지 않기" +blockThisInstance: "이 서버를 차단" +operations: "작업" +software: "소프트웨어" +version: "버전" +metadata: "메타데이터" +monitor: "모니터" +jobQueue: "작업 대기열" +cpuAndMemory: "CPU와 메모리" +network: "네트워크" +disk: "디스크" +instanceInfo: "서버 정보" +statistics: "통계" +clearQueue: "대기열 비우기" +clearQueueConfirmTitle: "대기열을 비우시겠습니까?" +clearQueueConfirmText: "대기열에 남아 있는 게시물이 연합되지 않습니다. 보통의 경우 이 작업은 필요하지 않습니다." +clearCachedFiles: "캐시 비우기" +clearCachedFilesConfirm: "캐시된 리모트 파일을 모두 삭제하시겠습니까?" +blockedInstances: "차단한 서버" +blockedInstancesDescription: "차단하려는 서버의 호스트 이름을 줄바꿈으로 구분하여 설정합니다. 차단된 서버는 이 서버와 통신할 + 수 없게 됩니다." +muteAndBlock: "뮤트 및 차단" +mutedUsers: "뮤트한 유저" +blockedUsers: "차단한 유저" +noUsers: "아무도 없습니다" +editProfile: "프로필 수정" +noteDeleteConfirm: "이 게시물을 삭제하시겠습니까?" +pinLimitExceeded: "더 이상 고정할 수 없습니다" +intro: "Firefish의 설치가 완료되었습니다! 관리자 계정을 생성해주세요." +done: "완료" +processing: "처리중" +preview: "미리보기" +default: "기본값" +defaultValueIs: "기본값: {value}" +noCustomEmojis: "이모지가 없습니다" +noJobs: "작업이 없습니다" +federating: "연합 중" +blocked: "차단됨" +suspended: "정지됨" +all: "전체" +subscribing: "구독 중" +publishing: "배포 중" +notResponding: "응답 없음" +instanceFollowing: "서버 팔로잉" +instanceFollowers: "서버 팔로워" +instanceUsers: "서버 유저" +changePassword: "비밀번호 변경" +security: "보안" +retypedNotMatch: "입력이 일치하지 않습니다." +currentPassword: "현재 비밀번호" +newPassword: "새 비밀번호" +newPasswordRetype: "새 비밀번호 (재입력)" +attachFile: "파일 첨부" +more: "더보기!" +featured: "하이라이트" +usernameOrUserId: "유저명이나 ID" +noSuchUser: "유저를 찾을 수 없습니다" +lookup: "조회" +announcements: "공지사항" +imageUrl: "이미지 URL" +remove: "삭제" +removed: "삭제하였습니다" +removeAreYouSure: "\"{x}\" 을(를) 삭제하시겠습니까?" +deleteAreYouSure: "\"{x}\" 을(를) 삭제하시겠습니까?" +resetAreYouSure: "초기화 하시겠습니까?" +saved: "저장하였습니다" +messaging: "대화" +upload: "업로드" +keepOriginalUploading: "원본 이미지를 유지" +keepOriginalUploadingDescription: "이미지를 업로드할 때에 원본을 그대로 유지합니다. 비활성화하면 업로드할 때 브라우저에서 + 웹 공개용 이미지를 생성합니다." +fromDrive: "드라이브에서" +fromUrl: "URL로부터" +uploadFromUrl: "URL 업로드" +uploadFromUrlDescription: "업로드하려는 파일의 URL" +uploadFromUrlRequested: "업로드를 요청했습니다" +uploadFromUrlMayTakeTime: "업로드가 완료될 때까지 시간이 소요될 수 있습니다." +explore: "발견하기" +messageRead: "읽음" +noMoreHistory: "이것보다 과거의 기록이 없습니다" +startMessaging: "대화 시작하기" +nUsersRead: "{n}명이 읽음" +agreeTo: "{0}에 동의" +tos: "이용 약관" +start: "시작하기" +home: "홈" +remoteUserCaution: "리모트 유저이기 때문에, 정보가 정확하지 않을 수 있습니다." +activity: "활동" +images: "이미지" +birthday: "생일" +yearsOld: "{age}세" +registeredDate: "등록일" +location: "장소" +theme: "테마" +themeForLightMode: "라이트 모드에서 사용할 테마" +themeForDarkMode: "다크 모드에서 사용할 테마" +light: "라이트" +dark: "다크" +lightThemes: "밝은 테마" +darkThemes: "어두운 테마" +syncDeviceDarkMode: "디바이스의 다크 모드 설정과 동기화" +drive: "드라이브" +fileName: "파일명" +selectFile: "파일 선택" +selectFiles: "파일 선택" +selectFolder: "폴더 선택" +selectFolders: "폴더 선택" +renameFile: "파일 이름 변경" +folderName: "폴더명" +createFolder: "폴더 만들기" +renameFolder: "폴더 이름 바꾸기" +deleteFolder: "폴더 삭제" +addFile: "파일 추가" +emptyDrive: "드라이브가 비어 있습니다" +emptyFolder: "폴더가 비어 있습니다" +unableToDelete: "삭제할 수 없습니다" +inputNewFileName: "바꿀 파일명을 입력해 주세요" +inputNewDescription: "새 설명을 입력해 주세요" +inputNewFolderName: "바꿀 폴더명을 입력해 주세요" +circularReferenceFolder: "지정한 폴더가 이동할 폴더의 하위 폴더입니다." +hasChildFilesOrFolders: "이 폴더는 비어있지 않기 때문에 삭제할 수 없습니다." +copyUrl: "URL 복사" +rename: "이름 변경" +avatar: "아바타" +banner: "배너" +nsfw: "열람주의" +whenServerDisconnected: "서버와의 접속이 끊겼을 때" +disconnectedFromServer: "서버와의 연결이 끊어졌습니다" +reload: "새로고침" +doNothing: "무시하기" +reloadConfirm: "새로고침 하시겠습니까?" +watch: "지켜보기" +unwatch: "지켜보기 해제" +accept: "허가" +reject: "거부" +normal: "정상" +instanceName: "서버 이름" +instanceDescription: "서버 소개" +maintainerName: "관리자 이름" +maintainerEmail: "관리자 이메일" +tosUrl: "이용약관 URL" +thisYear: "올해" +thisMonth: "이번 달" +today: "오늘" +dayX: "{day}일" +monthX: "{month}월" +yearX: "{year}년" +pages: "페이지" +enableLocalTimeline: "로컬 타임라인 활성화" +enableGlobalTimeline: "글로벌 타임라인 활성화" +disablingTimelinesInfo: "특정 타임라인을 비활성화하더라도 관리자 및 모더레이터는 계속 사용할 수 있습니다." +registration: "등록" +enableRegistration: "신규 회원가입을 활성화" +invite: "초대" +driveCapacityPerLocalAccount: "로컬 유저 한 명당 드라이브 용량" +driveCapacityPerRemoteAccount: "리모트 유저 한 명당 드라이브 용량" +inMb: "메가바이트 단위" +iconUrl: "아이콘 URL" +bannerUrl: "배너 이미지 URL" +backgroundImageUrl: "배경 이미지 URL" +basicInfo: "기본 정보" +pinnedUsers: "고정된 유저" +pinnedUsersDescription: "\"발견하기\" 페이지 등에 고정하고 싶은 유저를 한 줄에 한 명씩 적습니다." +pinnedPages: "고정한 페이지" +pinnedPagesDescription: "서버 대문에 고정할 페이지의 경로를 한 줄에 하나씩 적습니다." +pinnedClipId: "고정할 클립의 ID" +pinnedNotes: "고정한 글" +hcaptcha: "hCaptcha" +enableHcaptcha: "hCaptcha 활성화" +hcaptchaSiteKey: "사이트 키" +hcaptchaSecretKey: "시크릿 키" +recaptcha: "reCAPTCHA" +enableRecaptcha: "reCAPTCHA 활성화" +recaptchaSiteKey: "사이트 키" +recaptchaSecretKey: "시크릿 키" +avoidMultiCaptchaConfirm: "여러 Captcha를 사용하는 경우 간섭이 발생할 가능성이 있습니다. 다른 Captcha를 비활성화하시겠습니까? + 취소를 눌러 여러 Captcha를 활성화한 상태로 두는 것도 가능합니다." +antennas: "안테나" +manageAntennas: "안테나 관리" +name: "이름" +antennaSource: "받을 소스" +antennaKeywords: "받을 키워드" +antennaExcludeKeywords: "제외할 키워드" +antennaKeywordsDescription: "공백으로 구분하는 경우 AND, 줄바꿈으로 구분하는 경우 OR로 지정됩니다." +notifyAntenna: "새로운 글을 알림" +withFileAntenna: "파일이 첨부된 게시물만" +enableServiceworker: "ServiceWorker 사용" +antennaUsersDescription: "유저명을 한 줄에 한 명씩 적습니다" +caseSensitive: "대소문자를 구분" +withReplies: "답글 포함" +connectedTo: "다음 계정에 연결되어 있습니다" +notesAndReplies: "글과 답글" +withFiles: "미디어" +silence: "사일런스" +silenceConfirm: "이 계정을 사일런스로 설정하시겠습니까?" +unsilence: "사일런스 해제" +unsilenceConfirm: "이 계정의 사일런스를 해제하시겠습니까?" +popularUsers: "인기 유저" +recentlyUpdatedUsers: "최근 활동한 유저" +recentlyRegisteredUsers: "최근 가입한 유저" +recentlyDiscoveredUsers: "최근 발견한 유저" +exploreUsersCount: "{count}명의 유저가 있습니다" +exploreFediverse: "연합우주를 탐색" +popularTags: "인기 태그" +userList: "리스트" +about: "정보" +aboutFirefish: "Firefish에 대하여" +administrator: "관리자" +token: "토큰" +twoStepAuthentication: "2단계 인증" +moderator: "모더레이터" +moderation: "모더레이션" +nUsersMentioned: "{n}명이 언급함" +securityKey: "보안 키" +securityKeyName: "키 이름" +registerSecurityKey: "보안 키를 등록" +lastUsed: "마지막 사용" +unregister: "등록 해제" +passwordLessLogin: "비밀번호 없이 로그인" +resetPassword: "비밀번호 재설정" +newPasswordIs: "새로운 비밀번호는 \"{password}\" 입니다" +reduceUiAnimation: "UI의 애니메이션을 줄이기" +share: "공유" +notFound: "찾을 수 없습니다" +notFoundDescription: "지정한 URL에 해당하는 페이지가 존재하지 않습니다." +uploadFolder: "기본 업로드 위치" +cacheClear: "캐시 지우기" +markAsReadAllNotifications: "모든 알림을 읽은 상태로 표시" +markAsReadAllUnreadNotes: "모든 글을 읽은 상태로 표시" +markAsReadAllTalkMessages: "모든 대화를 읽은 상태로 표시" +help: "도움말" +inputMessageHere: "여기에 메시지를 입력하세요" +close: "닫기" +group: "그룹" +groups: "그룹" +createGroup: "그룹 만들기" +ownedGroups: "소유 그룹" +joinedGroups: "참여중인 그룹" +invites: "초대" +groupName: "그룹명" +members: "멤버" +transfer: "양도" +messagingWithUser: "유저와 대화하기" +messagingWithGroup: "그룹끼리 대화하기" +title: "제목" +text: "텍스트" +enable: "사용" +next: "다음" +retype: "다시 입력" +noteOf: "{user}의 게시물" +inviteToGroup: "그룹에 초대하기" +quoteAttached: "인용함" +quoteQuestion: "인용해서 작성하시겠습니까?" +noMessagesYet: "아직 대화가 없습니다" +newMessageExists: "새 메시지가 있습니다" +onlyOneFileCanBeAttached: "메시지에 첨부할 수 있는 파일은 하나까지입니다" +signinRequired: "로그인 해주세요" +invitations: "초대" +invitationCode: "초대 코드" +checking: "확인하는 중입니다..." +available: "사용 가능합니다" +unavailable: "사용할 수 없습니다" +usernameInvalidFormat: "a~z, A~Z, 0-9, _를 사용할 수 있습니다." +tooShort: "너무 짧습니다" +tooLong: "너무 깁니다" +weakPassword: "약한 비밀번호" +normalPassword: "좋은 비밀번호" +veryStrongPassword: "강한 비밀번호" +passwordMatched: "일치합니다" +passwordNotMatched: "일치하지 않습니다" +signinWith: "{x}로 로그인" +signinFailed: "로그인할 수 없습니다. 사용자명과 비밀번호를 확인하여 주십시오." +tapSecurityKey: "보안 키를 터치" +or: "혹은" +language: "언어" +uiLanguage: "UI 표시 언어" +groupInvited: "그룹에 초대되었습니다" +aboutX: "{x}에 대하여" +useOsNativeEmojis: "OS 기본 이모지를 사용" +disableDrawer: "드로어 메뉴를 사용하지 않기" +youHaveNoGroups: "그룹이 없습니다" +joinOrCreateGroup: "다른 그룹의 초대를 받거나, 직접 새 그룹을 만들어 보세요." +noHistory: "기록이 없습니다" +signinHistory: "로그인 기록" +disableAnimatedMfm: "움직임이 있는 MFM을 비활성화" +doing: "기다려 주세요..." +category: "카테고리" +tags: "태그" +docSource: "이 문서의 소스" +createAccount: "계정 만들기" +existingAccount: "기존 계정" +regenerate: "재생성" +fontSize: "글자 크기" +noFollowRequests: "처리되지 않은 팔로우 요청이 없습니다" +openImageInNewTab: "새 탭에서 이미지 열기" +dashboard: "대시보드" +local: "로컬" +remote: "리모트" +total: "합계" +weekOverWeekChanges: "지난주보다" +dayOverDayChanges: "어제보다" +appearance: "모양" +clientSettings: "클라이언트 설정" +accountSettings: "계정 설정" +promotion: "프로모션" +promote: "프로모션하기" +numberOfDays: "며칠동안" +hideThisNote: "이 글을 숨기기" +showFeaturedNotesInTimeline: "타임라인에 추천 게시물을 표시" +objectStorage: "오브젝트 스토리지" +useObjectStorage: "오브젝트 스토리지를 사용" +objectStorageBaseUrl: "Base URL" +objectStorageBaseUrlDesc: "오브젝트 (미디어) 참조 URL 을 만들 때 사용되는 URL입니다. CDN 또는 프록시를 사용하는 + 경우 그 URL을 지정하고, 그 외의 경우 사용할 서비스의 가이드에 따라 공개적으로 액세스 할 수 있는 주소를 지정해 주세요.\n예를 들어, AWS + S3의 경우 'https://.s3.amazonaws.com', GCS등의 경우 'https://storage.googleapis.com/' + 와 같이 지정합니다." +objectStorageBucket: "Bucket" +objectStorageBucketDesc: "사용 서비스의 bucket명을 지정해주세요." +objectStoragePrefix: "Prefix" +objectStoragePrefixDesc: "이 Prefix 의 디렉토리 아래에 파일이 저장됩니다." +objectStorageEndpoint: "Endpoint" +objectStorageEndpointDesc: "AWS S3의 경우 공란, 다른 서비스의 경우 각 서비스의 가이드에 맞게 endpoint를 설정해주세요. + '' 혹은 ':' 와 같이 지정합니다." +objectStorageRegion: "Region" +objectStorageRegionDesc: "'xx-east-1'와 같이 region을 지정해주세요. 사용하는 서비스에 region 개념이 없는 + 경우, 비워 두거나 'us-east-1'으로 설정해 주세요." +objectStorageUseSSL: "SSL 사용" +objectStorageUseSSLDesc: "API 호출시 HTTPS 를 사용하지 않는 경우 OFF 로 설정해 주세요" +objectStorageUseProxy: "연결에 프록시를 사용" +objectStorageUseProxyDesc: "오브젝트 스토리지 API 호출시 프록시를 사용하지 않는 경우 OFF 로 설정해 주세요" +objectStorageSetPublicRead: "업로드할 때 'public-read'를 설정하기" +serverLogs: "서버 로그" +deleteAll: "모두 삭제" +showFixedPostForm: "타임라인 상단에 글 작성란을 표시" +newNoteRecived: "새 글이 있습니다" +sounds: "소리" +listen: "듣기" +none: "없음" +showInPage: "페이지로 보기" +popout: "새 창으로 열기" +volume: "음량" +masterVolume: "마스터 볼륨" +details: "자세히" +chooseEmoji: "이모지 선택" +unableToProcess: "작업을 완료할 수 없습니다" +recentUsed: "최근 사용" +install: "설치" +uninstall: "삭제" +installedApps: "인증된 애플리케이션" +nothing: "아무것도 없습니다" +installedDate: "승인한 날짜" +lastUsedDate: "마지막 사용" +state: "상태" +sort: "정렬" +ascendingOrder: "오름차순" +descendingOrder: "내림차순" +scratchpad: "스크래치 패드" +scratchpadDescription: "스크래치 패드는 AiScript 의 테스트 환경을 제공합니다. Firefish 와 상호 작용하는 코드를 + 작성, 실행 및 결과를 확인할 수 있습니다." +output: "출력" +script: "스크립트" +disablePagesScript: "Pages 에서 AiScript 를 사용하지 않음" +updateRemoteUser: "리모트 유저 정보 갱신" +deleteAllFiles: "모든 파일 삭제" +deleteAllFilesConfirm: "모든 파일을 삭제하시겠습니까?" +removeAllFollowing: "모든 팔로잉 해제" +removeAllFollowingDescription: "{host}(으)로부터 모든 팔로잉을 해제합니다. 해당 서버가 더 이상 존재하지 않게 된 + 경우 등에 실행해 주세요." +userSuspended: "이 계정은 정지된 상태입니다." +userSilenced: "이 계정은 사일런스된 상태입니다." +yourAccountSuspendedTitle: "계정이 정지되었습니다" +yourAccountSuspendedDescription: "이 계정은 서버의 이용 약관을 위반하거나, 기타 다른 이유로 인해 정지되었습니다. 자세한 + 사항은 관리자에게 문의해 주십시오. 계정을 새로 생성하지 마십시오." +menu: "메뉴" +divider: "구분선" +addItem: "항목 추가" +relays: "릴레이" +addRelay: "릴레이 추가" +inboxUrl: "Inbox 주소" +addedRelays: "추가된 릴레이" +serviceworkerInfo: "푸시 알림을 수행하려면 활성화해야 합니다." +deletedNote: "삭제된 글" +invisibleNote: "비공개 글" +enableInfiniteScroll: "자동으로 좀 더 보기" +visibility: "공개 범위" +poll: "투표" +useCw: "내용 숨기기" +enablePlayer: "플레이어 열기" +disablePlayer: "플레이어 닫기" +expandTweet: "트윗 확장하기" +themeEditor: "테마 에디터" +description: "설명" +describeFile: "설명 추가" +enterFileDescription: "설명 입력" +author: "작성자" +leaveConfirm: "저장하지 않은 변경사항이 있습니다. 취소하시겠습니까?" +manage: "관리" +plugins: "플러그인" +preferencesBackups: "환경설정 백업" +deck: "덱" +undeck: "덱 해제" +useBlurEffectForModal: "모달에 흐림 효과 사용" +useFullReactionPicker: "모든 기능이 포함된 리액션 선택기 사용" +width: "폭" +height: "높이" +large: "크게" +medium: "보통" +small: "작게" +generateAccessToken: "액세스 토큰 생성" +permission: "권한" +enableAll: "전체 선택" +disableAll: "전체 해제" +tokenRequested: "계정 접근 허용" +pluginTokenRequestedDescription: "이 플러그인은 여기서 설정한 권한을 사용할 수 있게 됩니다." +notificationType: "알림 유형" +edit: "편집" +emailServer: "메일 서버" +enableEmail: "이메일 송신 기능 활성화" +emailConfigInfo: "가입 시 메일 주소 확인이나 비밀번호 초기화 시에 사용합니다" +email: "이메일" +emailAddress: "메일 주소" +smtpConfig: "SMTP 서버 설정" +smtpHost: "호스트" +smtpPort: "포트" +smtpUser: "유저명" +smtpPass: "비밀번호" +emptyToDisableSmtpAuth: "SMTP 인증을 사용하지 않으려면 공란으로 비워둡니다" +smtpSecure: "SMTP 연결에 Implicit SSL/TTS 사용" +smtpSecureInfo: "STARTTLS 사용 시에는 해제합니다" +testEmail: "이메일 전송 테스트" +wordMute: "단어 뮤트" +regexpError: "정규 표현식 오류" +regexpErrorDescription: "{tab}단어 뮤트 {line}행의 정규 표현식에 오류가 발생했습니다:" +instanceMute: "서버 뮤트" +userSaysSomething: "{name}님이 무언가를 말했습니다" +makeActive: "활성화" +display: "표시" +copy: "복사" +metrics: "통계" +overview: "요약" +logs: "로그" +delayed: "지연" +database: "데이터베이스" +channel: "채널" +create: "생성" +notificationSetting: "알림 설정" +notificationSettingDesc: "표시할 알림의 종류를 선택해 주세요." +useGlobalSetting: "글로벌 설정을 사용하기" +useGlobalSettingDesc: "활성화하면 계정의 알림 설정이 적용됩니다. 비활성화하면 개별적으로 설정할 수 있게 됩니다." +other: "기타" +regenerateLoginToken: "로그인 토큰을 재생성" +regenerateLoginTokenDescription: "로그인할 때 사용되는 내부 토큰을 재생성합니다. 일반적으로 이 작업을 실행할 필요는 없습니다. + 이 기능을 사용하면 이 계정으로 로그인한 모든 기기에서 로그아웃됩니다." +setMultipleBySeparatingWithSpace: "공백으로 구분하여 여러 개 설정할 수 있습니다." +fileIdOrUrl: "파일 ID 또는 URL" +behavior: "동작" +sample: "예시" +abuseReports: "신고" +reportAbuse: "신고" +reportAbuseOf: "{name}을 신고하기" +fillAbuseReportDescription: "신고하려는 이유를 자세히 알려주세요. 특정 게시물을 신고할 때에는 게시물의 URL도 포함해 주세요." +abuseReported: "신고를 보냈습니다. 신고해 주셔서 감사합니다." +reporter: "신고자" +reporteeOrigin: "피신고자" +reporterOrigin: "신고자" +forwardReport: "리모트 서버에도 신고 내용 보내기" +forwardReportIsAnonymous: "리모트 서버에서는 나의 정보를 볼 수 없으며, 익명의 시스템 계정으로 표시됩니다." +send: "전송" +abuseMarkAsResolved: "해결됨으로 표시" +openInNewTab: "새 탭에서 열기" +openInSideView: "사이드뷰로 열기" +defaultNavigationBehaviour: "기본 탐색 동작" +editTheseSettingsMayBreakAccount: "이 설정을 변경하면 계정이 손상될 수 있습니다." +instanceTicker: "게시물의 인스턴스 정보" +waitingFor: "{x}을(를) 기다리고 있습니다" +random: "랜덤" +system: "시스템" +switchUi: "레이아웃" +desktop: "데스크탑" +clip: "클립" +createNew: "새로 만들기" +optional: "옵션" +createNewClip: "새 클립 만들기" +unclip: "클립 해제" +confirmToUnclipAlreadyClippedNote: "이 글은 이미 \"{name}\" 클립에 포함되어 있습니다. 클립을 해제하시겠습니까?" +public: "공개" +i18nInfo: "Firefish는 자원봉사자들에 의해 다양한 언어로 번역되고 있습니다. {link}에서 번역에 참가할 수 있습니다." +manageAccessTokens: "액세스 토큰 관리" +accountInfo: "계정 정보" +notesCount: "글 수" +repliesCount: "답글 수" +renotesCount: "부스트 수" +repliedCount: "받은 답글 수" +renotedCount: "받은 부스트 수" +followingCount: "팔로우 수" +followersCount: "팔로워 수" +sentReactionsCount: "보낸 리액션 수" +receivedReactionsCount: "받은 리액션 수" +pollVotesCount: "투표한 횟수" +pollVotedCount: "투표받은 횟수" +yes: "예" +no: "아니오" +driveFilesCount: "드라이브 파일 개수" +driveUsage: "드라이브 사용량" +noCrawle: "검색엔진의 인덱싱 거부" +noCrawleDescription: "검색엔진이 나의 컨텐츠를 인덱싱하지 않게 합니다." +lockedAccountInfo: "팔로우를 승인으로 승인받더라도 게시물의 공개 범위를 '팔로워'로 하지 않는 한 누구나 당신의 글을 볼 수 있습니다." +alwaysMarkSensitive: "미디어를 항상 열람 주의로 설정" +loadRawImages: "첨부한 이미지의 썸네일을 원본화질로 표시" +disableShowingAnimatedImages: "움직이는 이미지를 자동으로 재생하지 않음" +verificationEmailSent: "확인 메일을 발송하였습니다. 설정을 완료하려면 메일에 첨부된 링크를 확인해 주세요." +notSet: "설정되지 않음" +emailVerified: "메일 주소가 확인되었습니다" +noteFavoritesCount: "즐겨찾기한 게시물 수" +pageLikesCount: "좋아요 한 Page 수" +pageLikedCount: "Page에 받은 좋아요 수" +contact: "연락처" +useSystemFont: "시스템 기본 글꼴을 사용" +clips: "클립" +experimentalFeatures: "실험실" +developer: "개발자" +makeExplorable: "\"발견하기\"에 내 계정 보이기" +makeExplorableDescription: "비활성화하면 \"발견하기\"에 나의 계정을 표시하지 않습니다." +showGapBetweenNotesInTimeline: "타임라인의 게시물 사이를 띄워서 표시" +duplicate: "복제" +left: "왼쪽" +center: "가운데" +wide: "넓게" +narrow: "좁게" +reloadToApplySetting: "이 설정을 적용하려면 페이지를 새로고침해야 합니다. 바로 새로고침하시겠습니까?" +needReloadToApply: "변경 사항은 새로고침하면 적용됩니다." +showTitlebar: "타이틀 바를 표시하기" +clearCache: "캐시 비우기" +onlineUsersCount: "{n}명이 접속 중" +nUsers: "{n} 유저" +nNotes: "{n} 게시물" +sendErrorReports: "오류 보고서 보내기" +sendErrorReportsDescription: "이 설정을 활성화하면, 문제가 발생했을 때 오류에 대한 상세 정보를 Firefish에 보내어 + 더 나은 소프트웨어를 만드는 데에 도움을 줄 수 있습니다.\n 상세 정보에는 OS 버전, 브라우저 정보, Firefish에서의 활동 정보 등이 + 포함됩니다." +myTheme: "내 테마" +backgroundColor: "배경 색" +accentColor: "강조 색상" +textColor: "문자 색" +saveAs: "다른 이름으로 저장" +advanced: "고급" +value: "값" +createdAt: "생성된 날짜" +updatedAt: "수정한 날짜" +saveConfirm: "저장하시겠습니까?" +deleteConfirm: "삭제하시겠습니까?" +invalidValue: "올바른 값이 아닙니다." +registry: "레지스트리" +closeAccount: "계정 폐쇄" +currentVersion: "현재 버전" +latestVersion: "최신 버전" +youAreRunningUpToDateClient: "사용 중인 클라이언트는 최신입니다." +newVersionOfClientAvailable: "새로운 버전의 클라이언트를 이용할 수 있습니다." +usageAmount: "사용량" +capacity: "용량" +inUse: "사용중" +editCode: "코드 수정" +apply: "적용" +receiveAnnouncementFromInstance: "이 서버의 알림을 이메일로 수신" +emailNotification: "메일 알림" +publish: "게시" +inChannelSearch: "채널에서 검색" +useReactionPickerForContextMenu: "우클릭하여 리액션 선택기 열기" +typingUsers: "{users} 님이 입력하고 있어요" +jumpToSpecifiedDate: "특정 날짜로 이동" +showingPastTimeline: "과거의 타임라인을 표시하고 있어요" +clear: "지우기" +markAllAsRead: "모두 읽은 상태로 표시" +goBack: "뒤로" +unlikeConfirm: "좋아요를 취소할까요?" +fullView: "전체 화면" +quitFullView: "전체 화면 해제" +addDescription: "설명 추가" +userPagePinTip: "각 게시물의 메뉴에서 「프로필에 고정」을 선택하는 것으로, 여기에 게시물을 표시해 둘 수 있어요." +notSpecifiedMentionWarning: "수신자가 선택되지 않은 멘션이 있어요" +info: "정보" +userInfo: "유저 정보" +unknown: "알 수 없음" +onlineStatus: "온라인 상태" +hideOnlineStatus: "온라인 상태 숨기기" +hideOnlineStatusDescription: "온라인 상태를 숨기면, 검색과 같은 일부 기능에 영향을 미칠 수 있습니다." +online: "온라인" +active: "최근에 활동함" +offline: "오프라인" +notRecommended: "추천하지 않음" +botProtection: "Bot 방어" +instanceBlocking: "서버 차단" +selectAccount: "계정 선택" +switchAccount: "계정 바꾸기" +enabled: "활성화" +disabled: "비활성화" +quickAction: "빠른 동작" +user: "유저" +administration: "관리" +accounts: "계정" +switch: "전환" +noMaintainerInformationWarning: "관리자 정보가 설정되어 있지 않습니다." +noBotProtectionWarning: "Bot 방어가 설정되어 있지 않습니다." +configure: "설정하기" +postToGallery: "갤러리에 업로드" +gallery: "갤러리" +recentPosts: "최근 포스트" +popularPosts: "인기 포스트" +shareWithNote: "게시물로 공유" +ads: "커뮤니티 배너" +expiration: "기한" +memo: "메모" +priority: "우선순위" +high: "높음" +middle: "보통" +low: "낮음" +emailNotConfiguredWarning: "메일 주소가 설정되어 있지 않습니다." +ratio: "비율" +previewNoteText: "본문 미리보기" +customCss: "CSS 사용자화" +customCssWarn: "이 설정은 기능을 알고 있는 경우에만 사용해야 합니다. 잘못된 값을 입력하면 클라이언트가 정상적으로 작동하지 않을 수 + 있습니다." +global: "글로벌" +squareAvatars: "프로필 아이콘을 사각형으로 표시" +sent: "전송" +received: "수신" +searchResult: "검색 결과" +hashtags: "해시태그" +troubleshooting: "문제 해결" +useBlurEffect: "UI에 흐림 효과 사용" +learnMore: "자세히" +misskeyUpdated: "Firefish가 업데이트 되었습니다!" +whatIsNew: "패치 정보 보기" +translate: "번역" +translatedFrom: "{x}에서 번역" +accountDeletionInProgress: "계정 삭제 작업을 진행하고 있습니다" +usernameInfo: "서버상에서 계정을 식별하기 위한 이름. 알파벳(a~z, A~Z), 숫자(0~9) 및 언더바(_)를 사용할 수 있습니다. + 사용자명은 나중에 변경할 수 없습니다." +aiChanMode: "아이 모드" +keepCw: "CW 유지하기" +pubSub: "Pub/Sub 계정" +lastCommunication: "마지막 통신" +resolved: "해결됨" +unresolved: "해결되지 않음" +breakFollow: "팔로워 해제" +itsOn: "켜짐" +itsOff: "꺼짐" +emailRequiredForSignup: "가입할 때 이메일 주소 입력을 필수로 하기" +unread: "읽지 않음" +filter: "필터" +controlPanel: "제어판" +manageAccounts: "계정 관리" +makeReactionsPublic: "리액션 목록을 공개하기" +makeReactionsPublicDescription: "나의 리액션을 누구나 볼 수 있게 합니다." +classic: "중앙" +muteThread: "이 글타래를 뮤트" +unmuteThread: "글타래 뮤트 해제" +ffVisibility: "내 인맥의 공개 범위" +ffVisibilityDescription: "나의 팔로우와 팔로워 정보에 대한 공개 범위를 설정할 수 있습니다." +continueThread: "이 글타래 이어서 보기" +deleteAccountConfirm: "계정이 삭제되고 되돌릴 수 없게 됩니다. 계속하시겠습니까?" +incorrectPassword: "비밀번호가 올바르지 않습니다." +voteConfirm: "\"{choice}\"에 투표하시겠습니까?" +hide: "숨기기" +leaveGroup: "그룹 나가기" +leaveGroupConfirm: "\"{name}\"에서 나갈까요?" +useDrawerReactionPickerForMobile: "모바일에서 드로어 메뉴로 표시" +welcomeBackWithName: "환영합니다, {name}님" +clickToFinishEmailVerification: "[{ok}]를 눌러 이메일 인증을 완료하세요." +overridedDeviceKind: "장치 유형" +smartphone: "스마트폰" +tablet: "태블릿" +auto: "자동" +themeColor: "테마 컬러" +size: "크기" +numberOfColumn: "한 줄에 보일 리액션의 수" +instanceDefaultLightTheme: "서버 기본 라이트 테마" +instanceDefaultDarkTheme: "서버 기본 다크 테마" +instanceDefaultThemeDescription: "객체 형식의 테마 코드를 입력해 주세요." +mutePeriod: "뮤트할 기간" +indefinitely: "무기한" +tenMinutes: "10분" +oneHour: "1시간" +oneDay: "1일" +oneWeek: "일주일" +reflectMayTakeTime: "반영되기까지 시간이 걸릴 수 있습니다." +failedToFetchAccountInformation: "계정 정보를 가져오지 못했습니다" +rateLimitExceeded: "요청 제한 횟수를 초과하였습니다" +cropImage: "이미지 자르기" +cropImageAsk: "이미지를 자르시겠습니까?" +file: "파일" +recentNHours: "최근 {n}시간" +recentNDays: "최근 {n}일" +noEmailServerWarning: "메일 서버가 설정되어 있지 않습니다." +thereIsUnresolvedAbuseReportWarning: "해결되지 않은 신고가 있습니다." +recommended: "추천" +check: "체크" +driveCapOverrideLabel: "이 유저의 드라이브 용량을 변경" +driveCapOverrideCaption: "0 이하를 지정하면 해제됩니다." +requireAdminForView: "열람하려면 관리자 계정으로 로그인해야 합니다." +isSystemAccount: "시스템에 의해 자동으로 생성되어 관리되는 계정입니다. 이 계정에 대해 모더레이션, 수정, 삭제 등을 수행하면 서버가 + 오작동할 수 있으므로 조작하지 마십시오." +typeToConfirm: "계속하시려면 {x} 을 입력하세요" +deleteAccount: "계정 삭제" +document: "문서" +numberOfPageCache: "페이지 캐시 수" +numberOfPageCacheDescription: "숫자가 클 수록 편리성이 높아지지만, 시스템 자원과 메모리를 더 많이 사용합니다." +logoutConfirm: "로그아웃 하시겠습니까?" +lastActiveDate: "마지막 이용" +pleaseSelect: "선택해 주세요" +reverse: "플립" +colored: "색 입히기" +refreshInterval: "업데이트 주기 " +label: "라벨" +type: "종류" +speed: "속도" +slow: "느리게" +fast: "빠르게" +sensitiveMediaDetection: "민감한 미디어 탐지" +localOnly: "로컬에만" +remoteOnly: "리모트만" +failedToUpload: "업로드 실패" +cannotUploadBecauseInappropriate: "이 파일은 부적절한 내용을 포함한다고 판단되어 업로드할 수 없습니다." +cannotUploadBecauseNoFreeSpace: "드라이브 용량이 부족하여 업로드할 수 없습니다." +beta: "베타" +enableAutoSensitive: "자동 NSFW 탐지" +enableAutoSensitiveDescription: "이용 가능할 경우 기계학습을 통해 자동으로 미디어 NSFW를 설정합니다. 이 기능을 해제하더라도, + 서버 정책에 따라 자동으로 설정될 수 있습니다." +activeEmailValidationDescription: "유저가 입력한 메일 주소가 일회용 메일인지, 실제로 통신할 수 있는 지 엄격하게 검사합니다. + 해제할 경우 이메일 형식에 대해서만 검사합니다." +navbar: "네비게이션 바" +shuffle: "셔플" +account: "계정" +move: "이동" +_sensitiveMediaDetection: + description: "기계학습을 통해 자동으로 민감한 미디어를 탐지하여, 모더레이션에 참고할 수 있도록 합니다. 서버의 부하를 약간 증가시킵니다." + sensitivity: "탐지 민감도" + sensitivityDescription: "민감도가 낮을수록 안전한 미디어가 잘못 탐지될 확률이 줄어들며, 높을수록 민감한 미디어가 탐지되지 + 않을 확률이 줄어듭니다." + setSensitiveFlagAutomatically: "자동으로 NSFW로 설정하기" + setSensitiveFlagAutomaticallyDescription: "이 설정을 해제해도 탐지 결과는 유지됩니다." + analyzeVideos: "동영상도 같이 확인하기" + analyzeVideosDescription: "사진 뿐만 아니라 동영상의 NSFW 여부도 탐지합니다. 서버의 부하를 약간 증가시킵니다." +_emailUnavailable: + used: "이 메일 주소는 사용중입니다" + format: "형식이 올바르지 않습니다" + disposable: "임시 이메일 주소는 사용할 수 없습니다" + mx: "메일 서버가 올바르지 않습니다" + smtp: "메일 서버가 응답하지 않습니다" +_ffVisibility: + public: "공개" + followers: "팔로워에게만 공개" + private: "비공개" +_signup: + almostThere: "거의 다 끝났습니다" + emailAddressInfo: "당신이 사용하고 있는 이메일 주소를 입력해 주세요. 이메일 주소는 다른 유저에게 공개되지 않습니다." + emailSent: "입력하신 메일 주소({email})로 확인 메일을 보내드렸습니다. 가입을 완료하시려면 보내드린 메일에 있는 링크로 접속해 + 주세요." +_accountDelete: + accountDelete: "계정 삭제" + mayTakeTime: "계정 삭제는 서버에 부하를 가하기 때문에, 작성한 콘텐츠나 업로드한 파일의 수가 많으면 완료까지 시간이 걸릴 수 있습니다." + sendEmail: "계정 삭제가 완료되면 등록된 이메일 주소로 알림을 보냅니다." + requestAccountDelete: "계정 삭제 요청" + started: "삭제 작업이 시작되었습니다." + inProgress: "삭제 진행 중" +_ad: + back: "뒤로" + reduceFrequencyOfThisAd: "이 광고의 표시 빈도 낮추기" +_forgotPassword: + enterEmail: "여기에 계정에 등록한 메일 주소를 입력해 주세요. 입력한 메일 주소로 비밀번호 재설정 링크를 발송합니다." + ifNoEmail: "메일 주소를 등록하지 않은 경우, 서버 관리자에게 문의해 주십시오." + contactAdmin: "이 서버에서는 메일 기능이 지원되지 않습니다. 비밀번호를 재설정하려면 관리자에게 문의해 주십시오." +_gallery: + my: "내 갤러리" + liked: "좋아요 한 갤러리" + like: "좋아요" + unlike: "좋아요 취소" +_email: + _follow: + title: "새로운 팔로워가 있습니다" + _receiveFollowRequest: + title: "팔로우 요청을 받았습니다" +_plugin: + install: "플러그인 설치" + installWarn: "신뢰할 수 없는 플러그인은 설치하지 않는 것이 좋습니다." + manage: "플러그인 관리" +_preferencesBackups: + list: "생성한 백업" + saveNew: "새 백업 만들기" + loadFile: "파일 가져오기" + apply: "이 기기에 적용" + save: "현재 설정으로 덮어쓰기" + inputName: "백업 이름을 입력하세요" + cannotSave: "저장하지 못했습니다" + nameAlreadyExists: "\"{name}\" 백업이 이미 존재합니다. 다른 이름을 설정하여 주십시오." + applyConfirm: "\"{name}\" 백업을 현재 기기에 적용하시겠습니까? 현재 설정은 덮어 씌워집니다." + saveConfirm: "{name} 을 덮어쓰시겠습니까?" + deleteConfirm: "{name} 을(를) 삭제하시겠습니까?" + renameConfirm: "\"{old}\" 백업을 \"{new}\"(으)로 바꾸시겠습니까?" + noBackups: "저장된 백업이 없습니다. \"새 백업 만들기\"를 눌러 현재 클라이언트 설정을 서버에 백업할 수 있습니다." + createdAt: "생성 날짜: {date} {time}" + updatedAt: "갱신 날짜: {date} {time}" + cannotLoad: "가져오기에 실패했습니다" + invalidFile: "파일 형식이 올바르지 않습니다" +_registry: + scope: "범위" + key: "키" + keys: "키" + domain: "도메인" + createKey: "키 생성" +_aboutFirefish: + about: "Firefish는 ThatOneCalculator에 의해서 2022년부터 개발되어 온 Misskey의 포크 소프트웨어 입니다." + contributors: "주요 기여자" + allContributors: "모든 기여자" + source: "소스 코드" + translation: "Firefish를 번역하기" + donate: "Firefish에 기부하기" + pleaseDonateToHost: 또한, 이 서버 {host} 의 운영자에게 기부하는 것도 검토하여 주십시오. + pleaseDonateToFirefish: Firefish의 개발에 후원하는 것을 검토하여 주십시오. + donateHost: '{host} 에게 기부하기' + donateTitle: Firefish가 마음에 드시나요? + misskeyContributors: 오리지널 Misskey 기여자 +_nsfw: + respect: "열람주의로 설정된 미디어 숨기기" + ignore: "열람 주의 미디어 항상 표시" + force: "미디어 항상 숨기기" +_mfm: + cheatSheet: "MFM 도움말" + intro: "MFM는 Misskey나 Firefish, Akkoma 외의 다양한 곳에서 사용할 수 있는 전용 마크업 언어입니다. 여기에서는 MFM에서 + 사용할 수 있는 구문을 확인할 수 있습니다." + dummy: "Firefish로 연합우주의 세계가 펼쳐집니다" + mention: "멘션" + mentionDescription: "골뱅이표(@) 뒤에 사용자명을 넣어 특정 유저를 나타낼 수 있습니다." + hashtag: "해시태그" + hashtagDescription: "샵 또는 우물정자(#)를 앞에 붙여서 해시태그를 나타낼 수 있습니다." + url: "URL" + urlDescription: "URL을 나타낼 수 있습니다." + link: "링크" + linkDescription: "문장의 특정 범위를 URL로 표시합니다." + bold: "굵음/볼드체" + boldDescription: "문자를 굵게 강조합니다." + small: "눈에 띄지 않음" + smallDescription: "내용을 작고 연하게 보이게 합니다." + center: "가운데 정렬" + centerDescription: "내용을 가운데 정렬로 보이게 합니다." + inlineCode: "코드(인라인)" + inlineCodeDescription: "여러 행의 코드를 문법 강조를 적용하여 인라인으로 표시합니다." + blockCode: "코드(블록)" + blockCodeDescription: "여러 행의 코드를 문법 강조를 적용하여 블록으로 표시합니다." + inlineMath: "수식(인라인)" + inlineMathDescription: "수식(KaTeX)를 인라인으로 보이게 합니다" + blockMath: "수식(블록)" + blockMathDescription: "수식(KaTeX)을 블록으로 보이게 합니다" + quote: "인용" + quoteDescription: "내용을 인용문으로 표시합니다." + emoji: "커스텀 이모지" + emojiDescription: "커스텀 이모지의 이름을 쌍점(:)으로 감싸서 커스텀 이모지를 사용합니다." + search: "검색" + searchDescription: "주어진 키워드가 입력된 검색창을 보이게 합니다." + flip: "플립" + flipDescription: "내용을 상하 또는 좌우로 반전시킵니다." + jelly: "애니메이션 (젤리)" + jellyDescription: "젤리처럼 탱글탱글한 느낌의 효과를 줍니다." + tada: "애니메이션 (짠!)" + tadaDescription: "짠! 하는 느낌의 효과를 줍니다." + jump: "애니메이션(점프)" + jumpDescription: "펄쩍 뛸 듯한 느낌의 효과를 줍니다." + bounce: "애니메이션 (바운스)" + bounceDescription: "통통 튀는 느낌의 효과를 줍니다." + shake: "애니메이션 (부들부들)" + shakeDescription: "부들부들 떠는 느낌의 효과를 줍니다." + twitch: "애니메이션 (경련)" + twitchDescription: "격하게 흔들리는 느낌의 효과를 줍니다." + spin: "애니메이션 (회전)" + spinDescription: "회전 효과를 줍니다." + x2: "크게" + x2Description: "내용을 크게 표시합니다." + x3: "더 크게" + x3Description: "내용을 더 크게 표시합니다." + x4: "매우 크게" + x4Description: "내용을 매우 크게 표시합니다." + blur: "흐림" + blurDescription: "내용이 흐리게 보입니다. 마우스를 위에 올려두면 내용이 보입니다." + font: "폰트" + fontDescription: "내용의 글꼴을 지정할 수 있습니다." + rainbow: "무지개" + rainbowDescription: "내용을 무지개로 표시합니다." + sparkle: "반짝반짝" + sparkleDescription: "반짝이는 파티클 효과를 추가합니다." + rotate: "회전" + rotateDescription: "지정한 각도로 회전시킵니다." + plain: "평문" + plainDescription: "안에 있는 MFM 구문을 모두 무시하고 평문으로 표시합니다." + stop: MFM 멈춤 + play: MFM 재생 + advancedDescription: 비활성화하면 MFM 재생 중을 제외하고 기본적인 MFM만 표시합니다 + fade: '페이드' + advanced: 고급 MFM + warn: 빠르게 움직이거나 반짝이는 애니메이션을 포함할 가능성이 있습니다 + alwaysPlay: MFM 애니메이션을 자동 재생하기 + cropDescription: 내용을 잘라냅니다. + scale: 확대/축소 + positionDescription: 내용을 지정한 값 만큼 이동합니다. + position: 위치 + crop: 크롭 + fadeDescription: 서서히 보인 뒤 서서히 사라집니다. + scaleDescription: 크기를 지정한 값 만큼 확대/축소합니다. + foregroundDescription: 문자 색상을 변경합니다. + backgroundDescription: 배경 색상을 변경합니다. + foreground: 문자색 + background: 배경색 +_instanceTicker: + none: "보이지 않음" + remote: "리모트 유저에게만 보이기" + always: "항상 보이기" +_serverDisconnectedBehavior: + reload: "자동으로 새로고침" + dialog: "경고창 표시" + quiet: "조용히 경고" + nothing: 아무것도 하지 않음 +_channel: + create: "채널 생성" + edit: "채널 편집" + setBanner: "배너 설정" + removeBanner: "배너 삭제" + featured: "트렌드" + owned: "관리중" + following: "팔로잉" + usersCount: "{n}명 참여 중" + notesCount: "{n} 게시물" + nameAndDescription: 이름과 설명 + nameOnly: 이름만 +_menuDisplay: + sideFull: "가로" + sideIcon: "가로(아이콘)" + top: "상단" + hide: "숨기기" +_wordMute: + muteWords: "뮤트할 단어" + muteWordsDescription: "공백으로 구분하는 경우 AND, 줄바꿈으로 구분하는 경우 OR로 지정됩니다。" + muteWordsDescription2: "정규 표현식을 사용하려면 키워드를 빗금표(/)로 감싸 주세요." + softDescription: "지정한 조건의 게시물을 타임라인에서 숨깁니다." + hardDescription: "지정한 조건의 게시물을 타임라인에 추가하지 않습니다. 타임라인에 추가되지 않은 게시물은 조건을 변경해도 표시되지 + 않습니다." + soft: "보통" + hard: "보다 높은 수준" + mutedNotes: "뮤트된 게시물" +_instanceMute: + instanceMuteDescription: "뮤트한 서버에서 오는 답글을 포함한 모든 게시물과 부스트를 뮤트합니다." + instanceMuteDescription2: "한 줄에 하나씩 입력해 주세요" + title: "지정한 서버의 게시물을 숨깁니다." + heading: "뮤트할 서버" +_theme: + explore: "테마 찾아보기" + install: "테마 설치" + manage: "테마 관리" + code: "테마 코드" + description: "설명" + installed: "{name} 테마가 설치되었습니다" + installedThemes: "설치된 테마" + builtinThemes: "표준 테마" + alreadyInstalled: "이미 설치된 테마입니다" + invalid: "테마 형식이 올바르지 않습니다" + make: "테마 만들기" + base: "베이스" + addConstant: "상수 추가" + constant: "상수" + defaultValue: "기본값" + color: "색" + refProp: "프로퍼티를 참조" + refConst: "상수를 참조" + key: "키" + func: "함수" + funcKind: "함수 종류" + argument: "매개변수" + basedProp: "기준으로 할 속성 이름" + alpha: "불투명도" + darken: "어두움" + lighten: "밝음" + inputConstantName: "상수 이름을 입력하세요" + importInfo: "여기에 테마 코드를 붙여 넣어 에디터로 불러올 수 있습니다" + deleteConstantConfirm: "상수 {const}를 삭제하시겠습니까?" + keys: + accent: "강조 색상" + bg: "배경" + fg: "텍스트" + focus: "포커스" + indicator: "인디케이터" + panel: "패널" + shadow: "그림자" + header: "헤더" + navBg: "사이드바 배경" + navFg: "사이드바 텍스트" + navHoverFg: "사이드바 텍스트 (호버)" + navActive: "사이드바 텍스트 (활성)" + navIndicator: "사이드바 인디케이터" + link: "링크" + hashtag: "해시태그" + mention: "멘션" + mentionMe: "나에게 보낸 멘션" + renote: "부스트" + modalBg: "모달 배경" + divider: "구분선" + scrollbarHandle: "스크롤바 핸들" + scrollbarHandleHover: "스크롤바 핸들 (호버)" + dateLabelFg: "날짜 레이블 텍스트" + infoBg: "정보창 배경" + infoFg: "정보창 텍스트" + infoWarnBg: "경고창 배경" + infoWarnFg: "경고창 텍스트" + cwBg: "CW 버튼 배경" + cwFg: "CW 버튼 텍스트" + cwHoverBg: "CW 버튼 배경 (호버)" + toastBg: "알림창 배경" + toastFg: "알림창 텍스트" + buttonBg: "버튼 배경" + buttonHoverBg: "버튼 배경 (호버)" + inputBorder: "입력 필드 테두리" + listItemHoverBg: "리스트 항목 배경 (호버)" + driveFolderBg: "드라이브 폴더 배경" + wallpaperOverlay: "배경화면 오버레이" + badge: "배지" + messageBg: "채팅 배경" + accentDarken: "강조 색상 (어두움)" + accentLighten: "강조 색상 (밝음)" + fgHighlighted: "강조된 텍스트" +_sfx: + note: "새 게시물" + noteMy: "나의 게시" + notification: "알림" + chat: "대화" + chatBg: "대화 (백그라운드)" + antenna: "안테나 수신" + channel: "채널 알림" +_ago: + future: "미래" + justNow: "방금 전" + secondsAgo: "{n}초 전" + minutesAgo: "{n}분 전" + hoursAgo: "{n}시간 전" + daysAgo: "{n}일 전" + weeksAgo: "{n}주 전" + monthsAgo: "{n}개월 전" + yearsAgo: "{n}년 전" +_time: + second: "초" + minute: "분" + hour: "시간" + day: "일" +_2fa: + alreadyRegistered: "이미 설정이 완료되었습니다." + registerTOTP: "디바이스 등록" + registerSecurityKey: "키를 등록" + step1: "먼저, {a}나 {b}등의 인증 앱을 사용 중인 디바이스에 설치합니다." + step2: "그 후, 표시되어 있는 QR코드를 앱으로 스캔합니다." + step2Url: "데스크톱 앱에서는 다음 URL을 입력하세요:" + step3: "앱에 표시된 토큰을 입력하시면 완료됩니다." + step4: "다음 로그인부터는 토큰을 입력해야 합니다." + securityKeyInfo: "FIDO2를 지원하는 하드웨어 보안 키 혹은 디바이스의 지문인식이나 화면잠금 PIN을 이용해서 로그인하도록 설정할 + 수 있습니다." + step2Click: QR 코드를 클릭하여 사용 중인 보안 키 또는 인증 앱을 등록할 수 있습니다. + step3Title: 확인 코드를 입력 + securityKeyNotSupported: 이 브라우저는 보안 키를 지원하지 않습니다. + chromePasskeyNotSupported: 현재 Chrome의 패스키는 지원하지 않습니다. + token: 2차 인증 토큰 + removeKey: 보안 키를 삭제 + removeKeyConfirm: '{name}을 삭제하시겠습니까?' + securityKeyName: 키 이름 입력 + tapSecurityKey: 브라우저의 지시에 따라 보안 키나 패스 키를 등록하십시오 +_permissions: + "read:account": "계정의 정보를 봅니다" + "write:account": "계정의 정보를 변경합니다" + "read:blocks": "차단 여부를 확인합니다" + "write:blocks": "차단을 하거나 해제합니다" + "read:drive": "드라이브를 조회합니다" + "write:drive": "드라이브에 파일을 올리거나, 이름을 변경하거나, 삭제합니다" + "read:favorites": "즐겨찾기를 조회합니다" + "write:favorites": "즐겨찾기에 추가하거나 삭제합니다" + "read:following": "팔로우 상태를 봅니다" + "write:following": "팔로우하거나 팔로우를 해제합니다" + "read:messaging": "대화를 읽습니다" + "write:messaging": "대화를 시작하거나 메시지를 보냅니다" + "read:mutes": "뮤트 여부를 확인합니다" + "write:mutes": "뮤트를 하거나 해제합니다" + "write:notes": "게시물을 작성하거나 삭제합니다" + "read:notifications": "알림을 확인합니다" + "write:notifications": "알림을 모두 읽음 처리합니다" + "read:reactions": "리액션을 확인합니다" + "write:reactions": "리액션을 추가하거나 취소합니다" + "write:votes": "투표를 합니다" + "read:pages": "페이지를 봅니다" + "write:pages": "페이지를 수정합니다" + "read:page-likes": "페이지의 좋아요를 확인합니다" + "write:page-likes": "페이지에 좋아요를 추가하거나 취소합니다" + "read:user-groups": "유저 그룹을 조회합니다" + "write:user-groups": "유저 그룹을 만들거나, 초대하거나, 이름을 변경하거나, 양도하거나, 삭제합니다" + "read:channels": "채널을 보기" + "write:channels": "채널을 추가하거나 삭제합니다" + "read:gallery": "갤러리를 봅니다" + "write:gallery": "갤러리를 추가하거나 삭제합니다" + "read:gallery-likes": "갤러리의 좋아요를 확인합니다" + "write:gallery-likes": "갤러리에 좋아요를 추가하거나 취소합니다" +_auth: + shareAccess: "\"{name}\" 이 계정에 접근하는 것을 허용하시겠습니까?" + shareAccessAsk: "이 애플리케이션이 계정에 접근하는 것을 허용하시겠습니까?" + permissionAsk: "이 앱은 다음의 권한을 요청합니다:" + pleaseGoBack: "앱으로 돌아가서 시도해 주세요" + callback: "앱으로 돌아갑니다" + denied: "접근이 거부되었습니다" + allPermissions: 모든 접근 권한 + copyAsk: '아래 인증 코드를 어플리케이션에 붙여넣으십시오:' +_antennaSources: + all: "모든 게시물" + homeTimeline: "팔로우 중인 유저의 게시물" + users: "지정한 한 명 혹은 여러 명의 유저의 게시물" + userList: "지정한 리스트에 속한 유저의 게시물" + userGroup: "지정한 그룹에 속한 유저의 게시물" + instances: 지정한 서버의 모든 유저의 게시물 +_weekday: + sunday: "일요일" + monday: "월요일" + tuesday: "화요일" + wednesday: "수요일" + thursday: "목요일" + friday: "금요일" + saturday: "토요일" +_widgets: + memo: "스티커 메모" + notifications: "알림" + timeline: "타임라인" + calendar: "달력" + trends: "트렌드" + clock: "시계" + rss: "RSS 리더" + activity: "활동" + photos: "사진" + digitalClock: "디지털 시계" + unixClock: "UNIX 시계" + federation: "연합" + instanceCloud: "인스턴스 구름" + postForm: "글 입력란" + slideshow: "슬라이드 쇼" + button: "버튼" + onlineUsers: "온라인 유저" + jobQueue: "작업 대기열" + serverMetric: "서버 통계" + aiscript: "AiScript 콘솔" + aichan: "아이" + serverInfo: 서버 정보 + _userList: + chooseList: 리스트 선택 + userList: 유저 목록 + rssTicker: RSS Ticker +_cw: + hide: "숨기기" + show: "더 보기" + chars: "{count} 문자" + files: "{count} 파일" +_poll: + noOnlyOneChoice: "투표 항목이 최소 2개 필요합니다" + choiceN: "선택지 {n}" + noMore: "더 이상 추가할 수 없습니다" + canMultipleVote: "복수 응답 허용" + expiration: "투표 기한" + infinite: "무기한" + at: "일시 지정" + after: "기간 지정" + deadlineDate: "기한" + deadlineTime: "시간" + duration: "기간" + votesCount: "{n}표" + totalVotes: "총 {n}표" + vote: "투표하기" + showResult: "결과 보기" + voted: "투표함" + closed: "종료됨" + remainingDays: "종료까지 앞으로 {d}일 {h}시간" + remainingHours: "종료까지 앞으로 {h}시간 {m}분" + remainingMinutes: "종료까지 앞으로 {m}분 {s}초" + remainingSeconds: "종료까지 앞으로 {s}초" +_visibility: + public: "공개" + publicDescription: "모든 유저에게 공개" + home: "미등재" + homeDescription: "홈 타임라인에만 공개" + followers: "팔로워" + followersDescription: "팔로워 및 멘션한 유저에게만 공개" + specified: "다이렉트" + specifiedDescription: "지정한 유저에게만 공개" + localOnly: "로컬에만" + localOnlyDescription: "리모트 유저에게 보이지 않기" +_postForm: + replyPlaceholder: "이 글에 답글..." + quotePlaceholder: "이 글을 인용..." + channelPlaceholder: "채널에 게시하기..." + _placeholders: + a: "지금 무엇을 하고 있나요?" + b: "무슨 일이 일어나고 있나요?" + c: "무엇을 생각하고 있나요?" + d: "말하고 싶은 게 있나요?" + e: "여기에 적어주세요" + f: "작성해주시길 기다리고 있어요..." +_profile: + name: "이름" + username: "유저명" + description: "자기소개" + youCanIncludeHashtags: "해시 태그를 포함할 수 있습니다." + metadata: "추가 정보" + metadataEdit: "추가 정보 편집" + metadataDescription: "프로필에 추가 정보를 표시할 수 있어요. {rel}과 함께 {a} 태그 또는 {l} 태그를 추가하여 프로필의 + 링크를 확인할 수 있습니다!" + metadataLabel: "라벨" + metadataContent: "내용" + changeAvatar: "아바타 이미지 변경" + changeBanner: "배너 이미지 변경" + locationDescription: 영문 도시명을 입력하면, 현재 시간대의 시각이 유저 페이지에 표시됩니다. +_exportOrImport: + allNotes: "모든 게시물" + followingList: "팔로잉" + muteList: "뮤트" + blockingList: "차단" + userLists: "리스트" + excludeMutingUsers: "뮤트한 유저 제외하기" + excludeInactiveUsers: "휴면 중인 계정 제외하기" +_charts: + federation: "연합" + apRequest: "요청" + usersIncDec: "유저 수 증감" + usersTotal: "유저 수 합계" + activeUsers: "활성 유저 수" + notesIncDec: "게시물 수 증감" + localNotesIncDec: "로컬 게시물 수 증감" + remoteNotesIncDec: "리모트 게시물 수 증감" + notesTotal: "게시물 수 합계" + filesIncDec: "파일 수 증감" + filesTotal: "파일 수 합계" + storageUsageIncDec: "스토리지 사용량 증감" + storageUsageTotal: "스토리지 사용량 합계" +_instanceCharts: + requests: "요청" + users: "유저 수 증감" + usersTotal: "누적 유저 수" + notes: "게시물 수 증감" + notesTotal: "누적 게시물 수" + ff: "팔로잉/팔로워 증감 " + ffTotal: "누적 팔로잉/팔로워 수" + cacheSize: "캐시 용량 증감" + cacheSizeTotal: "누적 캐시 용량" + files: "파일 수 증감" + filesTotal: "누적 파일 수" +_timelines: + home: "홈" + local: "로컬" + social: "소셜" + global: "글로벌" + recommended: 추천 +_pages: + newPage: "페이지 만들기" + editPage: "페이지 수정" + readPage: "소스 표시 중" + created: "페이지를 만들었습니다" + updated: "페이지를 수정했습니다" + deleted: "페이지가 삭제되었습니다" + pageSetting: "페이지 설정" + nameAlreadyExists: "지정한 페이지 URL이 이미 존재합니다" + invalidNameTitle: "유효하지 않은 페이지 URL입니다" + invalidNameText: "비어있지 않은지 확인해주세요" + editThisPage: "이 페이지를 편집" + viewSource: "소스 보기" + viewPage: "페이지 보기" + like: "좋아요" + unlike: "좋아요 해제" + my: "내 페이지" + liked: "좋아요한 페이지" + featured: "인기" + inspector: "인스펙터" + contents: "콘텐츠" + content: "페이지 블록" + variables: "변수" + title: "제목" + url: "페이지 URL" + summary: "페이지 요약" + alignCenter: "가운데 정렬" + hideTitleWhenPinned: "프로필에 고정해놓은 경우 타이틀을 표시하지 않음" + font: "폰트" + fontSerif: "명조체" + fontSansSerif: "고딕체" + eyeCatchingImageSet: "아이캐치 이미지를 설정" + eyeCatchingImageRemove: "아이캐치 이미지를 삭제" + chooseBlock: "블록 추가" + selectType: "종류 선택" + enterVariableName: "변수명을 지정해주세요" + variableNameIsAlreadyUsed: "해당 변수명은 이미 사용중입니다" + contentBlocks: "콘텐츠" + inputBlocks: "입력" + specialBlocks: "특수" + blocks: + text: "텍스트" + textarea: "텍스트 영역" + section: "섹션" + image: "이미지" + button: "버튼" + if: "조건문" + _if: + variable: "변수" + post: "글 입력란" + _post: + text: "내용" + attachCanvasImage: "캔버스의 이미지와 함께 게시하기" + canvasId: "캔버스 ID" + textInput: "텍스트 입력" + _textInput: + name: "변수명" + text: "제목" + default: "기본값" + textareaInput: "여러 줄 텍스트 입력" + _textareaInput: + name: "변수명" + text: "제목" + default: "기본값" + numberInput: "수치 입력" + _numberInput: + name: "변수명" + text: "제목" + default: "기본값" + canvas: "캔버스" + _canvas: + id: "캔버스 ID" + width: "폭" + height: "높이" + note: "게시물 삽입" + _note: + id: "게시물 ID" + idDescription: "게시물 URL을 붙여넣어 설정할 수도 있습니다." + detailed: "세부 정보 보기" + switch: "스위치" + _switch: + name: "변수명" + text: "제목" + default: "기본값" + counter: "카운터" + _counter: + name: "변수명" + text: "제목" + inc: "증가치" + _button: + text: "제목" + colored: "색 입히기" + action: "버튼을 눌렀을 때의 동작" + _action: + dialog: "대화상자를 표시" + _dialog: + content: "내용" + resetRandom: "난수를 초기화" + pushEvent: "이벤트 보내기" + _pushEvent: + event: "이벤트 이름" + message: "눌렀을 때 표시할 페이지" + variable: "보낼 변수" + no-variable: "없음" + callAiScript: "AiScript 호출" + _callAiScript: + functionName: "함수명" + radioButton: "선택지" + _radioButton: + name: "변수명" + title: "제목" + values: "줄바꿈으로 구분된 선택지" + default: "기본값" + script: + categories: + flow: "흐름 제어" + logical: "논리 연산" + operation: "계산" + comparison: "비교" + random: "랜덤" + value: "값" + fn: "함수" + text: "텍스트 조작" + convert: "변환" + list: "리스트" + blocks: + text: "텍스트" + multiLineText: "텍스트 (여러 줄)" + textList: "텍스트 목록" + _textList: + info: "각각을 줄바꿈으로 구분해주세요" + strLen: "텍스트의 길이" + _strLen: + arg1: "텍스트" + strPick: "문자 추출" + _strPick: + arg1: "텍스트" + arg2: "문자 위치" + strReplace: "텍스트 대체" + _strReplace: + arg1: "텍스트" + arg2: "대체될 텍스트" + arg3: "대체할 텍스트" + strReverse: "텍스트 뒤집기" + _strReverse: + arg1: "텍스트" + join: "텍스트 합치기" + _join: + arg1: "리스트" + arg2: "구분자" + add: "더하기" + _add: + arg1: "A" + arg2: "B" + subtract: "빼기" + _subtract: + arg1: "A" + arg2: "B" + multiply: "곱하기" + _multiply: + arg1: "A" + arg2: "B" + divide: "나누기" + _divide: + arg1: "A" + arg2: "B" + mod: "나눈 나머지" + _mod: + arg1: "A" + arg2: "B" + round: "소수점을 반올림" + _round: + arg1: "수치" + eq: "A와 B가 동일" + _eq: + arg1: "A" + arg2: "B" + notEq: "A와 B가 다름" + _notEq: + arg1: "A" + arg2: "B" + and: "A와 B가 둘 다 참" + _and: + arg1: "A" + arg2: "B" + or: "A, B중 하나 이상이 참" + _or: + arg1: "A" + arg2: "B" + lt: "< A가 B보다 작음" + _lt: + arg1: "A" + arg2: "B" + gt: "> A가 B보다 큼" + _gt: + arg1: "A" + arg2: "B" + ltEq: "<= A가 B보다 작거나 같음" + _ltEq: + arg1: "A" + arg2: "B" + gtEq: ">= A가 B보다 크거나 같음" + _gtEq: + arg1: "A" + arg2: "B" + if: "분기" + _if: + arg1: "조건문" + arg2: "참일 경우" + arg3: "거짓일 경우" + not: "부정" + _not: + arg1: "부정" + random: "랜덤" + _random: + arg1: "확률" + rannum: "난수" + _rannum: + arg1: "최솟값" + arg2: "최댓값" + randomPick: "목록에서 임의로 선택" + _randomPick: + arg1: "리스트" + dailyRandom: "랜덤 (하루동안 결과 유지)" + _dailyRandom: + arg1: "확률" + dailyRannum: "난수 (하루동안 결과 유지)" + _dailyRannum: + arg1: "최솟값" + arg2: "최댓값" + dailyRandomPick: "목록에서 임의로 선택 (하루동안 결과 유지)" + _dailyRandomPick: + arg1: "리스트" + seedRandom: "무작위 (시드)" + _seedRandom: + arg1: "시드" + arg2: "확률" + seedRannum: "난수 (시드)" + _seedRannum: + arg1: "시드" + arg2: "최솟값" + arg3: "최댓값" + seedRandomPick: "목록에서 무작위로 선택 (시드)" + _seedRandomPick: + arg1: "시드" + arg2: "리스트" + DRPWPM: "확률형 목록에서 임의로 선택 (하루동안 결과 유지)" + _DRPWPM: + arg1: "텍스트 목록" + pick: "목록에서 선택" + _pick: + arg1: "리스트" + arg2: "위치" + listLen: "리스트의 길이 가져오기" + _listLen: + arg1: "리스트" + number: "수치" + stringToNumber: "텍스트를 수치로" + _stringToNumber: + arg1: "텍스트" + numberToString: "수치를 텍스트로" + _numberToString: + arg1: "수치" + splitStrByLine: "텍스트를 행 단위로 분할" + _splitStrByLine: + arg1: "텍스트" + ref: "변수" + aiScriptVar: "AiScript 변수" + fn: "함수" + _fn: + slots: "슬롯" + slots-info: "각 슬롯을 줄바꿈으로 구분하여 주세요" + arg1: "출력" + for: "반복" + _for: + arg1: "횟수" + arg2: "처리" + typeError: "슬롯 {slot}은 \"{expect}\"를 사용할 수 있지만 \"{actual}이 들어있습니다!" + thereIsEmptySlot: "슬롯 {slot}이(가) 비었습니다!" + types: + string: "텍스트" + number: "수치" + boolean: "플래그" + array: "리스트" + stringArray: "텍스트 목록" + emptySlot: "빈 슬롯" + enviromentVariables: "환경 변수" + pageVariables: "페이지 요소" + argVariables: "입력 슬롯" +_relayStatus: + requesting: "대기 중" + accepted: "승인됨" + rejected: "거절됨" +_notification: + fileUploaded: "파일이 업로드되었습니다" + youGotMention: "{name}님이 멘션함" + youGotReply: "{name}님이 답글함" + youGotQuote: "{name}님이 인용함" + youRenoted: "{name}님의 부스트" + youGotPoll: "{name}님이 투표함" + youGotMessagingMessageFromUser: "{name} 님이 보낸 채팅이 있어요" + youGotMessagingMessageFromGroup: "{name}에서 보낸 채팅이 있어요" + youWereFollowed: "새로운 팔로워가 있습니다" + youReceivedFollowRequest: "새로운 팔로우 요청이 있습니다" + yourFollowRequestAccepted: "팔로우 요청이 수락되었습니다" + youWereInvitedToGroup: "그룹에 초대되었습니다" + pollEnded: "투표 결과가 발표되었습니다" + emptyPushNotificationMessage: "푸시 알림이 갱신되었습니다" + _types: + all: "전부" + follow: "팔로잉" + mention: "멘션" + reply: "답글" + renote: "부스트" + quote: "인용" + reaction: "리액션" + pollVote: "투표 참여" + pollEnded: "투표가 종료됨" + receiveFollowRequest: "팔로우 요청을 받았을 때" + followRequestAccepted: "팔로우 요청이 승인되었을 때" + groupInvited: "그룹에 초대되었을 때" + app: "연동된 앱을 통한 알림" + _actions: + followBack: "팔로우" + reply: "답글" + renote: "부스트" + reacted: 님의 리액션 + renoted: 님이 부스트 + voted: 님이 투표함 +_deck: + alwaysShowMainColumn: "메인 칼럼 항상 표시" + columnAlign: "칼럼 정렬" + addColumn: "칼럼 추가" + configureColumn: "칼럼 설정" + swapLeft: "왼쪽으로 이동" + swapRight: "오른쪽으로 이동" + swapUp: "위로 이동" + swapDown: "아래로 이동" + stackLeft: "왼쪽에 쌓기" + popRight: "오른쪽으로 빼기" + profile: "작업 공간" + newProfile: "새 작업 공간" + deleteProfile: "작업 공간 삭제" + introduction: "칼럼을 조합해서 나만의 인터페이스를 구성해 보아요!" + introduction2: "나중에라도 화면 우측의 + 버튼을 눌러 새 칼럼을 추가할 수 있습니다." + widgetsIntroduction: "칼럼 메뉴의 \"위젯 편집\"에서 위젯을 추가해 주세요." + _columns: + main: "메인" + widgets: "위젯" + notifications: "알림" + tl: "타임라인" + antenna: "안테나" + list: "리스트" + mentions: "받은 멘션" + direct: "다이렉트" + channel: 채널 + renameProfile: 워크스페이스명을 변경 + nameAlreadyExists: 같은 이름의 워크스페이스가 이미 존재합니다. +removeReaction: 리액션 취소 +flagSpeakAsCat: 고양이체로 말하기 +silenceThisInstance: 이 서버를 사일런스 +silencedInstancesDescription: 사일런스할 서버의 호스트를 한 줄에 하나씩 입력합니다. 사일런스된 서버의 유저는 모두 사일런스인 + 것처럼 취급되며, 이 서버에서의 팔로우가 모두 팔로우 요청으로 바뀌고, 팔로워가 아닌 로컬 계정은 멘션할 수 없습니다. 차단한 서버에는 적용되지 + 않습니다. +noInstances: 서버가 없습니다 +silenced: 사일런스됨 +manageGroups: 그룹 관리 +clipsDesc: 클립은 분류 및 공유가 가능한 북마크입니다. 각 게시물의 메뉴에서 클립을 작성할 수 있습니다. +privateMode: 비공개 모드 +audio: 오디오 +customKaTeXMacro: 커스텀 KaTeX 매크로 +replayTutorial: 튜토리얼 다시 보기 +renoteMute: 부스트 뮤트 +antennaInstancesDescription: 서버 호스트를 한 줄에 하나씩 입력하세요 +userSaysSomethingReason: '{name} 님이 {reason}에 대해 말했습니다' +userSaysSomethingReasonQuote: '{name} 님이 {reason} 을 포함하는 게시물을 인용했습니다' +pushNotification: 푸시 알림 +channelFederationWarn: 현재 채널은 다른 서버로 연합되지 않습니다 +enableServerMachineStats: 서버의 머신 정보를 공개 +sendModMail: 모더레이션 알림을 보내기 +instanceSecurity: 서버 보안 +privateModeInfo: 활성화하면 허가된 서버에서의 요청에만 응답합니다. +seperateRenoteQuote: 부스트와 인용 버튼을 나누기 +cannotUploadBecauseExceedsFileSizeLimit: 파일 크기 제한을 초과하여 업로드할 수 없습니다. +pushNotificationNotSupported: 브라우저 및 서버가 푸시 알림을 지원하지 않습니다 +enableRecommendedTimeline: 추천 타임라인을 활성화 +pushNotificationAlreadySubscribed: 푸시 알림이 활성화되었습니다 +caption: 자동으로 설명 붙이기 +enableIdenticonGeneration: 유저 별 Identicon의 생성을 활성화 +secureModeInfo: 인증 정보가 없는 리모트 서버로부터의 요청에 응답하지 않습니다. +allowedInstances: 허가된 서버 +flagSpeakAsCatDescription: 고양이체를 활성화하면 게시물이 '나'가 '냐'로 바뀌는 등의 변화가 생깁니다 +showUpdates: Firefish 업데이트가 있을 때 알리기 +noGraze: '"Graze for Mastodon" 확장 기능은 Firefish의 정상적인 동작을 방해므로, 비활성화해 주시기 바랍니다.' +adminCustomCssWarn: 이 설정은 기능을 알고 있는 경우에만 사용해야 합니다. 잘못된 값을 입력하면 모든 유저의 클라이언트가 정상적으로 + 작동하지 않을 수 있습니다. 개인 클라이언트 설정에서 적용하여 정상적으로 동작하는 지 확인하십시오. +customSplashIconsDescription: 유저가 페이지를 로딩/새로고침할 때 마다 무작위로 표시할 아이콘을 한 줄에 하나씩 입력합니다. + 이미지는 되도록 정적 URL으로 구성하고, 192x192 해상도로 조정하여 주십시오. +moveFromDescription: '이전 계정에 대한 별칭을 작성하여, 이 계정으로 옮길 수 있도록 합니다. 반드시 계정을 이전하기 전에 수행해야 + 합니다. 이전 계정을 다음과 같은 형식으로 입력하여 주십시오: @person@server.com' +customKaTeXMacroDescription: 'KaTeX 매크로를 지정하여 수식을 더욱 편리하게 입력하세요! LaTeX의 커맨드 정의와 동일하게 + \newcommand{\ 이름}{내용} 또는 \newcommand{\이름}[인수 갯수]{내용} 와 같이 입력하십시오. 예를 들어 \newcommand{\add}[2]{#1 + + #2} 와 같이 정의한 경우 \add{3}{foo} 를 입력하면 3 + foo 으로 치환됩니다.매크로의 이름을 감싸는 중괄호를 소괄호() 또는 + 대괄호[]로 변경할 경우, 매크로 인수에 사용하는 괄호도 같이 변경됩니다. 매크로는 한 줄에 하나씩 입력해야 하며, 반대로 매크로 정의에서 줄바꿈은 + 사용할 수 없습니다. 올바르지 않은 정의는 무시됩니다. 문자열을 치환하는 수준에서만 지원하며, 조건 분기와 같은 고도의 구문은 사용할 수 없습니다.' +reactionPickerSkinTone: 선호하는 이모지 피부 톤 +selectInstance: 서버 선택 +showAds: 커뮤니티 배너를 보이기 +searchPlaceholder: Firefish에서 검색 +addInstance: 서버 추가 +listsDesc: 리스트를 사용하여 특정 유저로 이루어진 타임라인을 구성할 수 있습니다. 리스트는 '타임라인' 페이지에서 접근할 수 있습니다. +enableEmojiReactions: 이모지 리액션을 활성화 +showEmojisInReactionNotifications: 리액션 알림에 이모지 보이기 +hiddenTagsDescription: 트렌드와 '발견하기'에서 제외할 해시태그를 ('#'을 제외하고) 한 줄에 하나씩 입력하여 주십시오. 이 설정은 + 트렌드와 '발견하기' 외에는 영향을 주지 않습니다. +antennasDesc: "안테나에서는 조건에 맞는 게시물이 표시됩니다.\n'타임라인' 페이지에서 접근할 수 있습니다." +expandOnNoteClick: 게시물을 클릭하여 자세히 표시 +expandOnNoteClickDesc: 비활성화한 경우에도 우클릭 메뉴 또는 타임스탬프를 클릭하여 열 수 있습니다. +customMOTDDescription: 유저가 페이지를 로딩/새로고침할 때 마다 무작위로 표시할 메시지를 한 줄에 하나씩 입력합니다. +moveFrom: 다른 계정에서 이 계정으로 이사하기 +moveAccount: 이사하기! +enterSendsMessage: 메시지에서 Return 키를 눌러 전송 (기본값 Ctrl + Return) +verifiedLink: 인증된 링크 +alt: 설명 +statusbar: 스테이터스 바 +subscribePushNotification: 푸시 알림을 활성화 +sendPushNotificationReadMessage: 알림이나 메시지를 읽은 뒤에 푸시 알림을 삭제 +sendPushNotificationReadMessageCaption: '"{emptyPushNotificationMessage}" 라는 알림을 짧은 + 기간 동안 표시합니다. 기기의 배터리 소모가 늘어날 수 있습니다.' +recommendedInstancesDescription: 추천 타임라인에 표시할 서버를 한 줄에 하나씩 입력하여 주십시오. +enableCustomKaTeXMacro: 커스텀 KaTeX 매크로를 사용 +swipeOnMobile: 페이지 간 스와이프를 활성화 +swipeOnDesktop: 데스크톱에서도 모바일과 같은 스와이프를 사용 +migration: 계정 이사 +moveTo: 이 계정에서 새로운 계정으로 이사 +deleted: 삭제됨 +editNote: 게시물 편집 +edited: '편짐됨: {date} {time}' +customMOTD: 사용자 지정 MOTD (스플래시 화면 메시지) +selectChannel: 채널 선택 +allowedInstancesDescription: 연합을 허가하려는 서버를 한 줄에 하나씩 입력합니다. 비공개 모드에서만 유효합니다. +splash: 스플래시 화면 +preventAiLearningDescription: 업로드한 게시물이나 미디어를 AI 모델이 학습하지 말기를 요구합니다. +isBot: 이 계정은 봇입니다 +isAdmin: 관리자 +newer: 새로운 게시물 +older: 이전 게시물 +renoteUnmute: 부스트 뮤트 해제 +accountMoved: '이 유저는 다른 계정으로 이사했습니다:' +silencedInstances: 사일런스한 서버 +accessibility: 접근성 +userSaysSomethingReasonReply: '{name} 님이 {reason} 을 포함하는 게시물에 답글했습니다' +userSaysSomethingReasonRenote: '{name} 님이 {reason} 을 포함하는 게시물을 부스트했습니다' +breakFollowConfirm: 팔로워를 해제하시겠습니까? +noThankYou: 괜찮습니다 +hiddenTags: 숨길 해시태그 +image: 이미지 +video: 동영상 +jumpToPrevious: 이전으로 +cw: 열람주의 +secureMode: 보안 모드 (Authorized Fetch) +xl: 매우 크게 +unsubscribePushNotification: 푸시 알림을 끄기 +customSplashIcons: 사용자 지정 스플래시 화면 아이콘 (URL) +recommendedInstances: 추천 서버 +updateAvailable: 업데이트가 있습니다! +logoImageUrl: 로고 이미지 URL +showAdminUpdates: 새로운 Firefish 버전이 있을 때 알리기 (관리자 전용) +moveToLabel: '이사 갈 계정:' +moveAccountDescription: '이 작업은 되돌릴 수 없습니다. 계정을 옮기기 전에, 새로운 계정에서 이 계정에 대한 별칭을 지정하여 + 주십시오. 별칭을 지정하였다면, 이사 갈 계정을 다음과 같은 형식으로 입력하여 주십시오: @person@server.com' +defaultReaction: 리모트와 로컬 게시물에 대한 기본 이모지 리액션 +showPopup: 유저에게 팝업으로 알리기 +showWithSparkles: 제목에 스파클 효과 넣기 +youHaveUnreadAnnouncements: 읽지 않은 공지사항이 있습니다 +donationLink: 기부 페이지 링크 +moveFromLabel: '이사하기 전의 계정:' +neverShow: 앞으로 표시하지 않기 +remindMeLater: 나중에 +removeQuote: 인용을 삭제 +removeRecipient: 수신인을 삭제 +removeMember: 멤버를 삭제 +license: 라이선스 +migrationConfirm: "정말로 이 계정을 {account}로 이사하시겠습니까? 한 번 이사하면, 현재 이 계정은 두 번 다시 사용할 수 + 없게 됩니다.\n또한, 이사 갈 계정에 현재 사용 중인 계정의 별칭을 올바르게 작성하였는지 다시 한 번 확인하십시오." +noteId: 게시물 ID +signupsDisabled: 현재 이 서버에서는 신규 등록을 받고 있지 않습니다. 초대 코드를 가지고 계신 경우 아래 칸에 입력해 주십시오. 초대 + 코드를 가지고 있지 않더라도, 신규 등록이 열려 있는 다른 서버에 등록하실 수 있습니다! +apps: 앱 +preventAiLearning: AI에 의한 학습을 막기 +isLocked: 이 계정은 팔로우를 수동으로 승인합니다 +silencedWarning: 관리자가 사일런스한 서버에 속한 유저이며, 스팸이거나 원치 않는 내용을 포함할 가능성이 있습니다. +isModerator: 모더레이터 +isPatron: Firefish 후원자 +_experiments: + postImportsCaption: 유저가 과거에 작성한 게시물을 Firefish, Misskey, Mastodon, Akkoma, Pleroma + 등에서 가져올 수 있게 합니다. 작업 대기열의 처리 속도가 느릴 경우 서비스에 영향이 갈 수 있습니다. + enablePostImports: 게시물 가져오기를 활성화 + title: 실험실 +_messaging: + groups: 그룹 + dms: 개인 메시지 +_tutorial: + title: Firefly의 사용 방법 + step5_5: '{icon} 소셜 타임라인은 홈 타임라인과 로컬 타임라인을 합친 것과 같습니다.' + step4_1: 첫 글을 올려 봅시다. + step5_3: '{icon} 홈 타임라인은 내가 팔로우하고 있는 계정의 게시물을 볼 수 있는 타임라인입니다.' + step6_2: 이 서버에 가입을 마친 당신은 단순히 Firefish 서버의 유저가 아닌, 수많은 서버가 서로 상호작용하는 연합우주에 참가하시게 + 된 것입니다. + step5_4: '{icon} 로컬 타임라인은 이 서버의 모든 유저가 올린 게시물을 볼 수 있는 타임라인입니다.' + step5_2: 이 서버에는 {timelines} 개의 타임라인이 존재합니다. + step2_2: 나에 대한 정보를 미리 실어 놓으면, 다른 사람이 나의 게시물을 보거나 팔로우할 때에 도움이 됩니다. + step3_2: "홈 타임라인과 소셜 타임라인은 내가 팔로우하는 유저로 구성됩니다. 우선 몇 명을 팔로우해 볼까요?\n각 프로필 우측 상단의 둥근 + + 버튼을 눌러 팔로우할 수 있습니다." + step2_1: 우선 프로필을 작성합니다. + step3_1: 이제 누군가를 팔로우해 봅시다! + step5_1: 여기도 타임라인, 저기도 타임라인 + step5_6: '{icon} 추천 타임라인은 이 서버의 관리자가 추천하는 서버의 게시물을 볼 수 있는 타임라인입니다.' + step5_7: '{icon} 글로벌 타임라인에서는 이 서버와 연결된 모든 서버의 게시물을 볼 수 있습니다.' + step1_1: 환영합니다! + step1_2: Firefly를 시작하기 전에, 몇 가지 설정을 해 보아요. 금방 끝날 거에요! + step6_1: 그래서… 여기는 어떤 곳이죠? + step4_2: 처음엔 {introduction}를 올리거나, 가볍게 '안녕하세요!' 라고 올리는 것도 좋아요! + step6_4: 튜토리얼은 여기까지입니다. 즐거운 시간 되세요! + step6_3: 각각의 서버는 서로 다른 규칙과 환경을 가지고 있으며, Firefish가 아닌 서버 또한 존재한답니다. 이 서버도 다른 서버에서 + 보면 마찬가지이고요. 갑자기 어려워 보일 지 몰라도 걱정하지 마세요, 금방 익숙해 질 거니까요. +_skinTones: + medium: 중간 + mediumLight: 약간 밝음 + yellow: 노랑 + mediumDark: 약간 어두움 + dark: 어두움 + light: 밝음 +_filters: + withFile: 첨부 파일 있음 + fromUser: 유저를 선택 + fromDomain: 도메인 지정 + notesBefore: '... 이전의 게시물' + notesAfter: '... 이후의 게시물' + followingOnly: 팔로우 중인 유저만 + followersOnly: 팔로워만 +_feeds: + jsonFeed: JSON 피드 + rss: RSS + atom: Atom + copyFeed: 피드 URL 복사 +_dialog: + charactersExceeded: 글자 수 제한을 초과했습니다! 현재 {current}자 / 최대 {max}자 + charactersBelow: 최소 글자 수 보다 작습니다! 현재 {current}자 / 최소 {max}자 +objectStorageS3ForcePathStyleDesc: Endpoint URL을 '.s3.amazonaws.com'가 아닌 's3.amazonaws.com//'와 + 같은 형식으로 사용할 경우에 활성화해 주세요. +confirm: 확인 +importZip: ZIP으로 가져오기 +exportZip: ZIP으로 내보내기 +origin: 원본 +objectStorageS3ForcePathStyle: 경로 기반 Endpoint URL을 사용하기 +delete2fa: 2FA를 비활성화 +delete2faConfirm: 이 계정에서 2FA를 영구히 삭제합니다. 계속하시겠습니까? +deletePasskeys: 보안 키 삭제 +deletePasskeysConfirm: 이 계정에서 모든 보안 키를 영구히 삭제합니다. 계속하시겠습니까? +inputNotMatch: 입력이 일치하지 않습니다 +addRe: 열람주의로 표시된 게시물의 답장에 're:' 붙이기 +detectPostLanguage: 외국어로 인식된 게시물에 번역 버튼을 표시 +indexableDescription: Firefish 검색에서 나의 공개 게시물에 대한 검색을 허용합니다 +indexable: 인덱스 허용 +languageForTranslation: 게시물 번역에 사용할 언어 +replies: 답글 +renotes: 부스트 +quotes: 인용 +sentFollowRequests: 팔로우 요청 보냄 +reactions: 리액션 diff --git a/locales/nl-NL.yml b/locales/nl-NL.yml new file mode 100644 index 0000000..6079d76 --- /dev/null +++ b/locales/nl-NL.yml @@ -0,0 +1,709 @@ +_lang_: "Nederlands" +headlineFirefish: "Een open source, gedecentraliseerd, social media platform dat voor + altijd gratis is! 🚀" +introFirefish: "Welkom! Firefish is een open source, gedecentraliseerde microblogdienst.\n + Maak \"notities\" om je gedachten te delen met iedereen om je heen. 📡\nMet \"reacties\"\ + \ kun je ook snel je mening geven over berichten van anderen. 👍\nLaten we een nieuwe + wereld verkennen! 🚀" +monthAndDay: "{day} {month}" +search: "Zoeken" +notifications: "Meldingen" +username: "Gebruikersnaam" +password: "Wachtwoord" +forgotPassword: "Wachtwoord vergeten" +fetchingAsApObject: "Ophalen vanuit de Fediverse" +ok: "Ok" +gotIt: "Begrepen!" +cancel: "Annuleren" +enterUsername: "Voer een gebruikersnaam in" +renotedBy: "Hergedeeld door {user}" +noNotes: "Geen notities" +noNotifications: "Geen meldingen" +instance: "Server" +settings: "Instellingen" +basicSettings: "Basisinstellingen" +otherSettings: "Overige instellingen" +openInWindow: "In een venster openen" +profile: "Profiel" +timeline: "Tijdlijn" +noAccountDescription: "Deze gebruiker heeft nog geen bio geschreven" +login: "Inloggen" +loggingIn: "Aan het inloggen" +logout: "Afmelden" +signup: "Registreren" +uploading: "Bezig met uploaden" +save: "Opslaan" +users: "Gebruikers" +addUser: "Toevoegen gebruiker" +favorite: "Favorieten" +favorites: "Favorieten" +unfavorite: "Verwijderen uit favorieten" +favorited: "Toegevoegd aan favorieten." +alreadyFavorited: "Al toegevoegd aan favorieten" +cantFavorite: "Kon niet toevoegen aan favorieten." +pin: "Vastmaken aan profielpagina" +unpin: "Losmaken van profielpagina" +copyContent: "Kopiëren inhoud" +copyLink: "Kopiëren link" +delete: "Verwijderen" +deleteAndEdit: "Verwijderen en bewerken" +deleteAndEditConfirm: "Weet je zeker dat je deze post wilt verwijderen en dan bewerken? + Je verliest alle reacties, boosts en antwoorden erop." +addToList: "Aan lijst toevoegen" +sendMessage: "Verstuur bericht" +copyUsername: "Gebruikersnaam kopiëren" +searchUser: "Zoek een gebruiker" +reply: "Antwoord" +loadMore: "Laad meer" +showMore: "Toon meer" +youGotNewFollower: "volgt jou" +receiveFollowRequest: "Volgverzoek ontvangen" +followRequestAccepted: "Volgverzoek geaccepteerd" +mention: "Vermelding" +mentions: "Vermeldingen" +directNotes: "Directe notities" +importAndExport: "Import / export" +import: "Import" +export: "Export" +files: "Bestanden" +download: "Downloaden" +driveFileDeleteConfirm: "Weet je zeker dat je het bestand \"{name}\" wilt verwijderen? + Posts met dit bestand als bijlage worden ook verwijderd." +unfollowConfirm: "Weet je zeker dat je {name} wilt ontvolgen?" +exportRequested: "Je hebt een export aangevraagd. Dit kan een tijdje duren. Het wordt + toegevoegd aan je Drive zodra het is voltooid." +importRequested: "Je hebt een import aangevraagd. Dit kan even duren." +lists: "Lijsten" +noLists: "Je hebt geen lijsten" +note: "Notitie" +notes: "Notities" +following: "Volgend" +followers: "Volgers" +followsYou: "Volgt jou" +createList: "Creëer lijst" +manageLists: "Lijsten beheren" +error: "Fout" +somethingHappened: "Er is iets misgegaan." +retry: "Probeer opnieuw" +pageLoadError: "Pagina laden mislukt" +pageLoadErrorDescription: "Dit wordt normaal gesproken veroorzaakt door netwerkfouten + of door de cache van de browser. Probeer de cache te wissen en probeer het na een + tijdje wachten opnieuw." +serverIsDead: "De server reageert niet. Wacht even en probeer het opnieuw." +youShouldUpgradeClient: "Werk je client bij om deze pagina te zien." +enterListName: "Voer de naam van de lijst in" +privacy: "Privacy" +makeFollowManuallyApprove: "Volgverzoeken vergen een goedkeuring" +defaultNoteVisibility: "Standaard zichtbaarheid" +follow: "Volgen" +followRequest: "Verzoek om te mogen volgen" +followRequests: "Volgverzoeken" +unfollow: "Ontvolgen" +followRequestPending: "Wachten op goedkeuring volgverzoek" +enterEmoji: "Voer een emoji in" +renote: "Boost" +unrenote: "Boost intrekken" +renoted: "Boosted." +cantRenote: "Dit bericht kan niet worden geboost." +cantReRenote: "Een boost kan niet worden geboost." +quote: "Quote" +pinnedNote: "Vastgemaakte post" +pinned: "Vastmaken aan profielpagina" +you: "Jij" +clickToShow: "Klik om te bekijken" +sensitive: "NSFW" +add: "Toevoegen" +reaction: "Reacties" +reactionSettingDescription2: "Sleep om opnieuw te ordenen, Klik om te verwijderen, + Druk op \"+\" om toe te voegen" +rememberNoteVisibility: "Onthoud post zichtbaarheidsinstellingen" +attachCancel: "Verwijder bijlage" +markAsSensitive: "Markeren als NSFW" +unmarkAsSensitive: "Geen NSFW" +enterFileName: "Bestandsnaam invoeren" +mute: "Dempen" +unmute: "Stop dempen" +block: "Blokkeren" +unblock: "Deblokkeren" +suspend: "Opschorten" +unsuspend: "Heractiveren" +blockConfirm: "Weet je zeker dat je dit account wil blokkeren?" +unblockConfirm: "Ben je zeker dat je deze account wil blokkeren?" +suspendConfirm: "Ben je zeker dat je deze account wil suspenderen?" +unsuspendConfirm: "Ben je zeker dat je deze account wil opnieuw aanstellen?" +flagAsBot: "Markeer dit account als een robot" +flagAsBotDescription: "Als dit account van een programma wordt beheerd, zet deze vlag + aan. Het aanzetten helpt andere ontwikkelaars om bijvoorbeeld onbedoelde feedback + loops te doorbreken of om Firefish meer geschikt te maken." +flagAsCat: "Markeer dit account als een kat." +flagAsCatDescription: "Zet deze vlag aan als je wilt aangeven dat dit account een + kat is." +flagShowTimelineReplies: "Toon antwoorden op de tijdlijn" +flagShowTimelineRepliesDescription: "Als je deze vlag aanzet, toont de tijdlijn ook + antwoorden op andere en niet alleen jouw eigen post." +autoAcceptFollowed: "Accepteer verzoeken om jezelf te volgen vanzelf als je de verzoeker + al volgt" +addAccount: "Account toevoegen" +loginFailed: "Aanmelding mislukt." +showOnRemote: "Bekijk op de externe server" +general: "Algemeen" +wallpaper: "Achtergrond" +setWallpaper: "Achtergrond instellen" +removeWallpaper: "Achtergrond verwijderen" +searchWith: "Zoeken: {q}" +youHaveNoLists: "Je hebt geen lijsten" +followConfirm: "Weet je zeker dat je {name} wilt volgen?" +proxyAccount: "Proxy account" +proxyAccountDescription: "Een proxy-account is een account dat onder bepaalde voorwaarden + fungeert als externe volger voor gebruikers. Als een gebruiker bijvoorbeeld een + externe gebruiker aan de lijst toevoegt, wordt de activiteit van de externe gebruiker + niet aan de server geleverd als geen lokale gebruiker die gebruiker volgt, dus het + proxy-account volgt in plaats daarvan." +host: "Server" +selectUser: "Kies een gebruiker" +recipient: "Ontvanger(s)" +annotation: "Reacties" +federation: "Federatie" +instances: "Servers" +registeredAt: "Geregistreerd op" +latestRequestSentAt: "Laatste aanvraag verstuurd" +latestRequestReceivedAt: "Laatste aanvraag ontvangen" +latestStatus: "Laatste status" +storageUsage: "Gebruikte opslagruimte" +charts: "Grafieken" +perHour: "Per uur" +perDay: "Per dag" +stopActivityDelivery: "Stop met versturen activiteiten" +blockThisInstance: "Blokkeer deze server" +operations: "Verwerkingen" +software: "Software" +version: "Versie" +metadata: "Metadata" +monitor: "Monitor" +jobQueue: "Job Queue" +cpuAndMemory: "CPU en geheugen" +network: "Netwerk" +disk: "Schijfruimte" +instanceInfo: "Serverinformatie" +statistics: "Statistieken" +clearQueue: "Wachtrij wissen" +clearQueueConfirmTitle: "Weet je zeker dat je de wachtrji leeg wil maken?" +clearQueueConfirmText: "Niet-bezorgde posts die nog in de wachtrij staan, worden niet + gefedereerd. Meestal is deze operatie niet nodig." +clearCachedFiles: "Cache opschonen" +clearCachedFilesConfirm: "Weet je zeker dat je alle externe bestanden in de cache + wilt verwijderen?" +blockedInstances: "Geblokkeerde servers" +blockedInstancesDescription: "Maak een lijst van de servers die moeten worden geblokkeerd, + gescheiden door regeleinden. Geblokkeerde servers kunnen niet meer communiceren + met deze server." +muteAndBlock: "Gedempt en geblokkeerd" +mutedUsers: "Gedempte gebruikers" +blockedUsers: "Geblokkeerde gebruikers" +noUsers: "Er zijn geen gebruikers." +editProfile: "Bewerk Profiel" +noteDeleteConfirm: "Ben je zeker dat je deze post wil verwijderen?" +pinLimitExceeded: "Je kunt geen posts meer vastprikken" +intro: "Installatie van Firefish geëindigd! Maak nu een beheerder aan." +done: "Klaar" +processing: "Bezig met verwerken" +preview: "Voorbeeld" +default: "Standaard" +noCustomEmojis: "Er zijn geen emojis" +noJobs: "Er zijn geen taken" +federating: "Federeren" +blocked: "Geblokkeerd" +suspended: "Opgeschort" +all: "Alle" +subscribing: "Abonneren" +publishing: "Publiceren" +notResponding: "Reageert niet" +instanceFollowing: "Volgend op server" +instanceFollowers: "Volgers op server" +instanceUsers: "Gebruikers van deze server" +changePassword: "Wachtwoord wijzigen" +security: "Beveiliging" +retypedNotMatch: "Invoer komt niet overeen" +currentPassword: "Huidig wachtwoord" +newPassword: "Nieuwe wachtwoord" +newPasswordRetype: "Nieuw wachtwoord (herhalen)" +attachFile: "Bestanden toevoegen" +more: "Meer!" +featured: "Uitgelicht" +usernameOrUserId: "Gebruikersnaam of id" +noSuchUser: "Gebruiker niet gevonden" +lookup: "Opzoeken" +announcements: "Aankondigingen" +imageUrl: "AfbeeldingsURL" +remove: "Verwijderen" +removed: "Succesvol verwijderd" +removeAreYouSure: "Weet je zeker dat je \"{x}\" wil verwijderen?" +deleteAreYouSure: "Weet je zeker dat je \"{x}\" wil verwijderen?" +resetAreYouSure: "Resetten?" +saved: "Opgeslagen" +messaging: "Chat" +upload: "Uploaden" +keepOriginalUploading: "Origineel beeld behouden." +keepOriginalUploadingDescription: "Bewaar de originele versie bij het uploaden van + afbeeldingen. Indien uitgeschakeld, wordt bij het uploaden een alternatieve versie + voor webpublicatie genereert." +fromDrive: "Van schijf" +fromUrl: "Van URL" +uploadFromUrl: "Uploaden vanaf een URL" +uploadFromUrlDescription: "URL van het bestand dat je wil uploaden" +uploadFromUrlRequested: "Uploadverzoek" +uploadFromUrlMayTakeTime: "Het kan even duren voordat het uploaden voltooid is." +explore: "Verkennen" +messageRead: "Lezen" +noMoreHistory: "Er is geen verdere geschiedenis" +startMessaging: "Start een gesprek" +nUsersRead: "gelezen door {n}" +agreeTo: "Ik stem in met {0}" +tos: "Gebruiksvoorwaarden" +start: "Aan de slag" +home: "Startpagina" +remoteUserCaution: "Aangezien deze gebruiker van een externe server afkomstig is, + kan de weergegeven informatie onvolledig zijn." +activity: "Activiteit" +images: "Afbeeldingen" +birthday: "Geboortedatum" +yearsOld: "{age} jaar" +registeredDate: "Inschrijvingsdatum" +location: "Locatie" +theme: "Thema's" +themeForLightMode: "Thema voor gebruik in de lichte modus" +themeForDarkMode: "Thema voor gebruik in de donkere modus" +light: "Licht" +dark: "Donker" +lightThemes: "Licht thema's" +darkThemes: "Donkere thema's" +syncDeviceDarkMode: "Synchroniseer donkere modus met je apparaatinstellingen" +drive: "Schijf" +fileName: "Bestandsnaam" +selectFile: "Kies een bestand" +selectFiles: "Selecteer bestanden" +selectFolder: "Kies een map" +selectFolders: "Kies mappen" +renameFile: "Wijzig bestandsnaam" +folderName: "Mapnaam" +createFolder: "Map aanmaken" +renameFolder: "Map hernoemen" +deleteFolder: "Map verwijderen" +addFile: "Bestand toevoegen" +emptyDrive: "Jouw Drive is leeg." +emptyFolder: "Deze map is leeg" +unableToDelete: "Kan niet worden verwijderd" +inputNewFileName: "Voer een nieuwe naam in" +copyUrl: "URL kopiëren" +rename: "Hernoemen" +avatar: "Avatar" +banner: "Banner" +nsfw: "NSFW" +whenServerDisconnected: "Wanneer de verbinding met de server wordt onderbroken" +disconnectedFromServer: "Verbinding met de server onderbroken." +inMb: "in megabytes" +pinnedNotes: "Vastgemaakte posts" +userList: "Lijsten" +aboutFirefish: "Over Firefish" +administrator: "Beheerder" +token: "Token" +securityKeyName: "Sleutelnaam" +registerSecurityKey: "Zekerheids-Sleutel registreren" +lastUsed: "Laatst gebruikt" +unregister: "Uitschrijven" +passwordLessLogin: "Inloggen zonder wachtwoord" +resetPassword: "Wachtwoord terugzetten" +newPasswordIs: "Het nieuwe wachtwoord is „{password}”." +reduceUiAnimation: "Verminder beweging in de UI" +share: "Delen" +notFound: "Niet gevonden" +cacheClear: "Cache verwijderen" +smtpHost: "Server" +smtpUser: "Gebruikersnaam" +smtpPass: "Wachtwoord" +clearCache: "Cache opschonen" +user: "Gebruikers" +muteThread: "Discussies dempen " +unmuteThread: "Dempen van discussie ongedaan maken" +hide: "Verbergen" +cropImage: "Afbeelding bijsnijden" +cropImageAsk: "Bijsnijdengevraagd" +file: "Bestanden" +_email: + _follow: + title: "Je hebt een nieuwe volger" +_mfm: + mention: "Vermelding" + quote: "Quote" + search: "Zoeken" +_theme: + keys: + mention: "Vermelding" + renote: "Herdelen" +_sfx: + note: "Notities" + notification: "Meldingen" + chat: "Chat" +_widgets: + notifications: "Meldingen" + timeline: "Tijdlijn" + activity: "Activiteit" + federation: "Federatie" + jobQueue: "Job Queue" +_cw: + show: "Laad meer" +_visibility: + home: "Startpagina" + followers: "Volgers" +_profile: + username: "Gebruikersnaam" +_exportOrImport: + followingList: "Volgend" + muteList: "Dempen" + blockingList: "Blokkeren" + userLists: "Lijsten" + excludeMutingUsers: "Negeer gedempte gebruikers" + excludeInactiveUsers: "Negeer inactieve gebruikers" +_charts: + federation: "Federatie" +_timelines: + home: "Startpagina" +_pages: + blocks: + image: "Afbeeldingen" + script: + categories: + list: "Lijsten" + blocks: + _join: + arg1: "Lijsten" + _randomPick: + arg1: "Lijsten" + _dailyRandomPick: + arg1: "Lijsten" + _seedRandomPick: + arg2: "Lijsten" + _pick: + arg1: "Lijsten" + _listLen: + arg1: "Lijsten" + types: + array: "Lijsten" +_notification: + youWereFollowed: "volgt jou" + _types: + follow: "Volgend" + mention: "Vermelding" + renote: "Herdelen" + quote: "Quote" + reaction: "Reacties" + _actions: + reply: "Antwoord" + renote: "Herdelen" +_deck: + _columns: + notifications: "Meldingen" + tl: "Tijdlijn" + list: "Lijsten" + mentions: "Vermeldingen" +showLess: Sluiten +emoji: Emoji +selectList: Selecteer een lijst +selectAntenna: Selecteer een antenne +deleted: Verwijderd +editNote: Bewerk post +edited: 'Bewerkt om {date} {time}' +emojis: Emojis +emojiName: Emoji naam +emojiUrl: Emoji URL +addEmoji: Voeg toe +settingGuide: Aanbevolen instellingen +flagSpeakAsCat: Praat als een kat +accountMoved: 'Gebruiker is naar een nieuw account verhuisd:' +showEmojisInReactionNotifications: Toon emojis in reactie notificaties +selectWidget: Selecteer een widget +editWidgetsExit: Klaar +noThankYou: Nee bedankt +addInstance: Voeg een server toe +enableEmojiReactions: Schakel emoji reacties in +editWidgets: Bewerk widgets +thisYear: Jaar +thisMonth: Maand +registration: Registreren +_ffVisibility: + public: Openbaar + private: Privé + followers: Alleen zichtbaar voor volgers +noInstances: Er zijn geen servers +_signup: + almostThere: Bijna klaar + emailAddressInfo: Voer je emailadres in. Deze zal niet openbaar gemaakt worden. +_ad: + back: Terug + reduceFrequencyOfThisAd: Toon deze advertentie minder +pushNotificationNotSupported: Je browser of server ondersteunt geen pushmeldingen +sendPushNotificationReadMessage: Verwijder pushmeldingen wanneer de relevante meldingen + of berichten zijn gelezen +customEmojis: Custom emoji +cacheRemoteFiles: Cache externe bestanden +hiddenTags: Verborgen hashtags +enableRecommendedTimeline: Schakel aanbevolen tijdlijn in +_forgotPassword: + enterEmail: Voer het emailadres in dat je gebruikte om te registreren. Een link + waarmee je je wachtwoord opnieuw kunt instellen zal daar naartoe gestuurd worden. +jumpToReply: Spring naar Antwoord +newer: nieuwer +older: ouder +selectInstance: Kies een server +defaultValueIs: 'Standaard: {value}' +reload: Hernieuwen +doNothing: Negeren +today: Vandaag +inputNewDescription: Voer een nieuw onderschrift in +inputNewFolderName: Voer een nieuwe mapnaam in +circularReferenceFolder: De bestemmingsmap is een submap van de map die je wil verplaatsen. +hasChildFilesOrFolders: Omdat deze map niet leeg is, kan deze niet verwijderd worden. +enableLocalTimeline: Schakel lokale tijdlijn in +enableGlobalTimeline: Schakel globale tijdlijn in +enableRegistration: Nieuwe gebruikersregistratie inschakelen +invite: Uitnodigen +move: Verplaatsen +showAds: Toon advertenties +pushNotification: Pushmeldingen +_gallery: + my: Mijn Gallerij +reactionSetting: Reacties om te tonen in het reactie selectie menu +dayX: '{day}' +renoteMute: Demp boosts +reloadConfirm: Wil je de tijdlijn hernieuwen? +watch: Volgen +unwatch: Ontvolgen +accept: Accepteren +reject: Afwijzen +normal: Normaal +pages: Pagina's +monthX: '{month}' +yearX: '{year}' +instanceName: Servernaam +instanceDescription: Server omschrijving +maintainerName: Onderhouder +maintainerEmail: Onderhouder email +tosUrl: Algemene Voorwaarden URL +unread: Ongelezen +manageGroups: Beheer groepen +subscribePushNotification: Pushmeldingen inschakelen +unsubscribePushNotification: Pushmeldingen uitschakelen +pushNotificationAlreadySubscribed: Pushmeldingen zijn al ingeschakeld +antennaSource: Antenne bron +antennaKeywords: Trefwoorden om naar te luisteren +antennaExcludeKeywords: Trefwoorden om te negeren +driveCapacityPerRemoteAccount: Schijfruimte per externe gebruiker +backgroundImageUrl: Achtergrondafbeelding URL +basicInfo: Basis informatie +pinnedUsers: Vastgezette gebruikers +pinnedPages: Vastgezette Pagina's +driveCapacityPerLocalAccount: Schijfruimte per lokale gebruiker +iconUrl: Icoon URL +bannerUrl: Banner afbeelding URL +manageAntennas: Beheer Antennes +name: Naam +notifyAntenna: Meld nieuwe posts +withFileAntenna: Alleen posts met bestanden +enableServiceworker: Schakel pushmeldingen voor je browser in +renoteUnmute: Ontdemp boosts +jumpToPrevious: Spring naar vorige +caseSensitive: Hoofdlettergevoelig +cw: Inhoudswaarschuwing +recaptcha: reCAPTCHA +enableRecaptcha: reCAPTCHA inschakelen +recaptchaSiteKey: Site sleutel +notFoundDescription: Een pagina met deze URL kon niet worden gevonden. +uploadFolder: Standaard map voor uploads +markAsReadAllNotifications: Markeer alle notificaties als gelezen +text: Tekst +enable: Inschakelen +or: Of +language: Taal +securityKey: Veiligheidssleutel +groupInvited: Je bent voor een groep uitgenodigd +docSource: Bron van dit document +createAccount: Maak account aan +groupName: Groepsnaam +members: Leden +messagingWithUser: Privé chat +messagingWithGroup: Groepschat +title: Titel +createGroup: Maak een groep +ownedGroups: Beheerde groepen +invites: Uitnodigingen +useOsNativeEmojis: Gebruik je standaard besturingssysteem Emojis +disableDrawer: Gebruik niet de lade-stijl menus +joinOrCreateGroup: Krijg een uitnodiging voor een groep of maak er zelf eentje aan. +noHistory: Geen geschiedenis beschikbaar +signinHistory: Inloggeschiedenis +available: Beschikbaar +unavailable: Niet beschikbaar +tooShort: Te kort +signinFailed: Niet gelukt om in te loggen. Gebruikersnaam of wachtwoord is incorrect. +tapSecurityKey: Tik je veiligheidssleutel aan +recaptchaSecretKey: Geheime sleutel +antennas: Antennes +antennaUsersDescription: Zet één gebruikersnaam per regel neer +notesAndReplies: Posts en antwoorden +withFiles: Met bestanden +popularUsers: Populaire gebruikers +recentlyUpdatedUsers: Recente actieve gebruikers +recentlyRegisteredUsers: Nieuwe gebruikers +recentlyDiscoveredUsers: Nieuwe ontdekte gebruikers +exploreUsersCount: Er zijn {count} gebruikers +about: Over +exploreFediverse: Ontdek de Fediverse +popularTags: Populaire labels +moderation: Moderatie +nUsersMentioned: Genoemd door {n} gebruikers +markAsReadAllUnreadNotes: Markeer alle posts als gelezen +markAsReadAllTalkMessages: Markeer alle berichten als gelezen +help: Help +inputMessageHere: Schrijf hier je bericht +close: Sluiten +group: Groep +groups: Groepen +newMessageExists: Er zijn nieuwe berichten +next: Volgende +noteOf: Post door {user} +inviteToGroup: Nodig uit voor de groep +quoteAttached: Quote +noMessagesYet: Nog geen berichten +weakPassword: Zwak wachtwoord +normalPassword: Middelmatig wachtwoord +veryStrongPassword: Sterk wachtwoord +onlyOneFileCanBeAttached: Je kan maar één bestand toevoegen aan je bericht +invitationCode: Uitnodigingscode +checking: Controleren... +uiLanguage: Gebruikersinterface taal +aboutX: Over {x} +youHaveNoGroups: Je hebt geen groepen +disableAnimatedMfm: Schakel MFM met animaties uit +passwordMatched: Komt overeen +passwordNotMatched: Komt niet overeen +signinWith: Log in met {x} +fontSize: Tekstgrootte +openImageInNewTab: Open afbeeldingen in een nieuwe tab +category: Categorie +tags: Labels +existingAccount: Bestaand account +regenerate: Hernieuwen +dayOverDayChanges: Verschillen met gisteren +appearance: Uiterlijk +local: Lokaal +remote: Extern +total: Totaal +weekOverWeekChanges: Verschillen met vorige week +hcaptcha: hCaptcha +enableHcaptcha: hCaptcha inschakelen +hcaptchaSiteKey: Site sleutel +hcaptchaSecretKey: Geheime sleutel +withReplies: Met antwoorden +twoStepAuthentication: Tweefactorauthenticatie +moderator: Moderator +invitations: Uitnodigingen +tooLong: Te lang +doing: Verwerken... +silencedInstances: Gedempte Servers +cacheRemoteFilesDescription: Als deze instelling is uitgeschakeld, worden externe + bestanden direct van de externe server geladen. Het uitschakelen zal opslagruimte + verminderen, maar verkeer zal toenemen, omdat er geen thumbnails gemaakt zullen + worden. +flagSpeakAsCatDescription: Je posts zullen worden ge-'nyanified' als je in kat-modus + zit +avoidMultiCaptchaConfirm: Het gebruik van meerdere Captcha systemen kan voor storing + zorgen tussen ze. Wil je de andere actieve Captcha systemen uitschakelen? Als je + ze ingeschakeld wilt houden, klik op annuleren. +silence: Dempen +silenceConfirm: Weet je zeker dat je deze gebruiker wilt dempen? +unsilence: Ontdempen +unsilenceConfirm: Weet je zeker dat je het dempen van deze gebruiker ongedaan wilt + maken? +silenceThisInstance: Demp deze server +silenced: Gedempt +disablingTimelinesInfo: Beheerders en moderators zullen altijd toegang hebben tot + alle tijdlijnen, zelfs als deze uitgeschakeld zijn. +accountSettings: Account Instellingen +numberOfDays: Aantal dagen +hideThisNote: Verberg deze post +dashboard: Dashboard +accessibility: Toegankelijkheid +promotion: Gepromoot +promote: Promoten +objectStorage: Objectopslag +useObjectStorage: Gebruik objectopslag +objectStorageBaseUrl: Basis -URL +objectStorageUseSSLDesc: Schakel dit uit als je geen HTTPS voor je API connecties + gebruikt +objectStorageUseProxy: Verbind over Proxy +objectStorageUseProxyDesc: Schakel dit uit als je geen Proxy voor je API connecties + gebruikt +sounds: Geluiden +lastUsedDate: Laatst gebruikt op +installedDate: Geautoriseerd op +sort: Sorteren +output: Uitvoer +script: Script +popout: Pop-out +descendingOrder: Aflopend +showInPage: Toon in de pagina +chooseEmoji: Kies een emoji +ascendingOrder: Oplopend +volume: Volume +masterVolume: Master volume +details: Details +unableToProcess: Deze operatie kon niet worden voltooid +nothing: Niks te zien hier +scratchpad: Kladblok +recentUsed: Recentelijk gebruikt +install: Installeer +uninstall: Verwijderen +installedApps: Geautoriseerde Applicaties +state: Status +updateRemoteUser: Update externe gebruikersinformatie +listen: Luister +none: Geen +scratchpadDescription: Het kladblok is een omgeving voor AiScript experimenten. Je + kan hier schrijven, uitvoeren, en de resultaten bekijken van de interactie met Firefish. +disablePagesScript: Zet AiScript op Pages uit +deleteAllFiles: Verwijder alle bestanden +deleteAllFilesConfirm: Weet je zeker dat je alle bestanden wil verwijderen? +removeAllFollowing: Ontvolg alle gevolgde gebruikers +serverLogs: Server logboek +deleteAll: Verwijder alles +showFixedPostForm: Toon het post formulier bovenaan de tijdlijn +newNoteRecived: Er zijn nieuwe posts +pinnedUsersDescription: Lijst gebruikersnamen gescheiden door regeleinden om vast + te pinnen in het tabblad "Verkennen". +silencedInstancesDescription: Geef de hostnames op van de servers die je het zwijgen + wilt opleggen. Accounts op de vermelde servers worden als "Stil" behandeld, kunnen + alleen volgverzoeken doen en kunnen geen lokale accounts vermelden als ze niet worden + gevolgd. Dit heeft geen invloed op de geblokkeerde servers. +searchPlaceholder: Doorzoek Firefish +pinnedPagesDescription: Voer de paden in van de pagina's die je aan de bovenste pagina + van deze server wilt vastmaken, gescheiden door regeleinden. +_permissions: + "read:favorites": Lijst van uw favorieten + "write:favorites": Beheer uw favorieten +clipsDesc: Paperclips zijn deelbare gebundelde favorieten. Je kunt paperclips maken + vanuit het menu van individuele posts. +selectChannel: Selecteer een kanaal +removeReaction: Uw reactie verwijderen +antennasDesc: "Antennes geven nieuwe berichten weer die voldoen aan de criteria die + je hebt ingesteld!\nZe zijn toegankelijk via de pagina Tijdlijnen." +pinnedClipId: ID van de paperclip om vast te pinnen +hiddenTagsDescription: 'Vermeld de hashtags (zonder #) van de hashtags die je wilt + verbergen voor trending en verkennen. Verborgen hashtags zijn nog steeds op andere + manieren te ontdekken.' +listsDesc: Met lijsten kun je tijdlijnen aanmaken met gespecificeerde gebruikers. + Ze zijn toegankelijk via de pagina Tijdlijnen. +markLocalFilesNsfwByDefault: Alle nieuwe lokale bestanden als NSFW markeren +toReply: Reageren +toPost: Publiceren +replies: Reacties +sentFollowRequests: Stuur volgverzoek diff --git a/locales/no-NO.yml b/locales/no-NO.yml new file mode 100644 index 0000000..9bde2c9 --- /dev/null +++ b/locales/no-NO.yml @@ -0,0 +1,1906 @@ +_lang_: "Norsk Bokmål" +search: Søk +monthAndDay: '{day}/{month}' +fetchingAsApObject: Henter fra fediverset +ok: OK +gotIt: Jeg forstår! +profile: Profil +timeline: Tidslinje +save: Lagre +addToList: Legg til liste +searchPlaceholder: Søk Firefish +username: Brukernavn +password: Passord +notifications: Meldinger +forgotPassword: Glemt passord +cancel: Avbryt +noNotes: Ingen poster +instance: Server +settings: Innstillinger +noAccountDescription: Denne brukeren har ikke fylt ut bio'en sin ennå. +login: Logg inn +loggingIn: Logger inn +signup: Oppretter bruker +uploading: Laster opp... +enterUsername: Skriv inn brukernavn +noNotifications: Ingen meldinger +users: Brukere +addUser: Legg til en bruker +favorite: Legg til i bokmerker +cantFavorite: Kunne ikke legges til i bokmerker. +pin: Fest til profilen +copyContent: Kopier innhold +deleteAndEdit: Slett og rediger +sendMessage: Send en melding +copyUsername: Kopier brukernavn +reply: Svar +loadMore: Last mer +showLess: Lukk +receiveFollowRequest: Følgeforespørsel mottatt +directNotes: Direktemelding +importAndExport: Importer/eksporter data +importRequested: Du har bedt om en importering. Dette vil ta litt tid. +lists: Lister +listsDesc: Lister lar deg lage tidslinjer med utvalgte brukere. De kan hentes frem + fra tidslinje-siden. +deleted: Slettet +editNote: Rediger post +followsYou: Følger deg +createList: Lag liste +newer: nyere +older: eldre +download: Last ned +unfollowConfirm: Er du sikker på at du ikke lenger vil følge {name}? +noLists: Du har ingen lister +following: Følger +files: Filer +note: Post +notes: Poster +followers: Følgere +otherSettings: Andre innstillinger +addInstance: Legg til en server +alreadyFavorited: Allerede lagt til i bokmerker. +delete: Slett +openInWindow: Åpne i vindu +basicSettings: Grunnleggende innstillinger +headlineFirefish: En desentralisert sosialt media-plattform, basert på åpen kildekode, + som alltid vil være gratis! 🚀 +introFirefish: Velkommen! Firefish er en desentralisert sosialt media-plattform, basert + på åpen kildekode, som alltid vil være gratis! 🚀 +exportRequested: Du har bedt om en eksportering. Dette vil ta litt tid. Den vil bli + lagt til på disken din når den er ferdig. +noThankYou: Nei takk +favorites: Bokmerker +unfavorite: Fjern fra bokmerker +favorited: Lagt til i bokmerker. +copyLink: Kopier lenke +searchUser: Søk etter en bruker +jumpToPrevious: Gå til foregående +showMore: Vis mer +followRequestAccepted: Følgeforespørsel godtatt +import: Importer +export: Eksporter +logout: Logg ut +removeReaction: Fjern dine reaksjoner +renotedBy: Delt av {user} +deleteAndEditConfirm: Er du sikker på at du vil slette og redigere denne posten? Du + vil miste alle reaksjoner, delinger og svar til den. +pageLoadError: En feil oppsto ved lasting av siden. +privacy: Personvern +enterEmoji: Legg inn emoji +renoted: Delt. +cantRenote: Denne posten kan ikke deles. +cantReRenote: En deling kan ikke deles. +quote: Sitér +pinned: Fest til profil +clickToShow: Klikk for å vise +enableEmojiReactions: Slå på emoji-reaksjoner +makeFollowManuallyApprove: Følgeforespørsler må godkjennes +enterListName: Gi listen et navn +follow: Følg +followRequest: Følgerforespørsel +unfollow: Avfølg +followRequestPending: Ubehandlet følgerforespørsel +add: Legg til +followRequests: Følgerforespørsler +reaction: Reaksjoner +driveFileDeleteConfirm: Er du sikker på at du vil slette filen «{name}»? Den vil fjernes + fra alle poster den er vedlagt i. +defaultNoteVisibility: Standard synlighet +unrenote: Trekk tilbake deling +unpin: Løsne fra profilen +youGotNewFollower: følger deg +mention: Omtale +mentions: Omtaler +edited: Redigert {date} {time} +cw: Innholdsadvarsel +suspendConfirm: Er du sikker på at du vil suspendere denne kontoen? +recipient: Mottaker(e) +annotation: Kommentarer +registeredAt: Registrert +federation: Føderering +blockThisInstance: Blokker denne tjeneren +cpuAndMemory: CPU og minne +silencedInstances: Stumme tjenere +network: Nettverk +disk: Lagring +instanceInfo: Tjenerinformasjon +blockedInstancesDescription: Liste over maskinnavn på tjenere du vil blokkere. Blokkerte + tjenere vi ikke lenger kunne kommunisere med denne tjeneren. +blockedUsers: Blokkerte brukere +mutedUsers: Stumme brukere +editProfile: Rediger profil +done: Ferdig +exploreUsersCount: Det er {count} brukere +moderation: Moderering +securityKey: Sikkerhetsnøkkel +registerSecurityKey: Registerer en sikkerhetsnøkkel +recentlyDiscoveredUsers: Nylig oppdagede brukere +nUsersMentioned: Nevnt av {n} brukere +cacheClear: Slett mellomlager +unblock: Avblokker +suspend: Suspender +instanceFollowing: Følger på tjener +instanceFollowers: Følgere fra tjener +imageUrl: Bilde-URL +remove: Slett +keepOriginalUploading: Behold opprinnelig bilde +images: Bilder +birthday: Fødselsdag +yearsOld: '{age} år gammel' +renameFolder: Gi katalogen nytt navn +remoteUserCaution: Informasjon om eksterne brukere kan være ufullstendig. +activity: Aktivitet +drive: Disk +renameFile: Omdøp fil +folderName: Katalognavn +createFolder: Opprett katalog +inputNewDescription: Skriv ny beskrivelse +inputNewFolderName: Oppgi nytt katalognavn +copyUrl: Kopier URL +hcaptchaSiteKey: hCaptcha-nøkkel for nettstedet +hcaptchaSecretKey: Hemmelig hCaptcha-nøkkel +recaptchaSiteKey: Nettstednøkkel til reCAPTCHA +recaptchaSecretKey: Hemmelig nøkkel til reCAPTCHA +unsilenceConfirm: Er du sikker på at du vil omgjøre stummingen av denne brukeren? +popularUsers: Populære brukere +moderator: Moderator +groupName: Gruppenavn +transfer: Overfør +preferencesBackups: Sikkerhetskopi av innstillinger +edit: Rediger +emailServer: Eposttjener +testEmail: Test epost-utsending +notificationSettingDesc: Velg typen av varlinger som skal vises. +useGlobalSetting: Bruk globale innstillinger +useGlobalSettingDesc: Hvis dette er slått på vil varslingsinnstillingene til kontoen + bli brukt. Om den er slått av kan du bruke individuell konfigurasjon. +attachCancel: Slett vedegg +markAsSensitive: Merk som sensitivt innhold +renoteMute: Stum delinger +renoteUnmute: Vis delinger +addEmoji: Legg til +settingGuide: Foreslåtte innstillinger +cacheRemoteFilesDescription: Når denne innstillingen er avslått vil eksterne filer + lastes direkte fra andre tjerene. Å slå dette av vil føre til mindre bruk av lagringsplass, + men vil øke nettverkstrafikken fordi miniatyrbilder ikke vil bli generert. +unsuspend: Fjern suspendering +selectInstance: Velg en tjener +flagShowTimelineReplies: Vis svar i tidslinje +latestRequestSentAt: Siste forespørsel sendt +latestRequestReceivedAt: Siste forespørsel mottatt +latestStatus: Siste status +storageUsage: Lagringsplass brukt +charts: Grafer +perHour: Per time +perDay: Per dag +stopActivityDelivery: Stopp sending av aktiviteter +jobQueue: Jobbkø +clearQueue: Tøm kø +muteAndBlock: Stumming og blokkering +noInstances: Ingen tjenere +noteDeleteConfirm: Er du sikker på at du vil slette denne posten? +pinLimitExceeded: Du kan ikke feste flere poster +subscribing: Abonnerer +publishing: Publisering +usernameOrUserId: Brukernavn eller brukeridentifikator +removed: Slettet +removeAreYouSure: Er du sikker på at du ønsker å slette "{x}"? +deleteAreYouSure: Er du sikker på at du vil slette "{x}"? +resetAreYouSure: Sikker på at du ønsker å nullstille? +messaging: Chat +uploadFromUrlMayTakeTime: Det kan ta litt tid før opplastingen er ferdig. +manageGroups: Administrer grupper +tos: Vilkår for bruk +registeredDate: Ble med +location: Lokasjon +darkThemes: Mørke tema +whenServerDisconnected: Ved bortfall av nettverksforbindelse mot tjeneren +unwatch: Slutt å følge med på +accept: Godkjenn +reject: Avslå +normal: Normal +instanceName: Tjenernavn +instanceDescription: Tjenerbeskrivelse +maintainerName: Administrator +maintainerEmail: Administrator-epost +monthX: '{month}' +enableLocalTimeline: Aktiver lokal tidslinje +enableRegistration: Tillat registrering av nye brukere +invite: Inviter +driveCapacityPerLocalAccount: Lagring pr lokale bruker +driveCapacityPerRemoteAccount: Lagring pr eksterne bruker +inMb: I megabyte +iconUrl: Ikon-URL +pinnedUsers: Festede brukere +pinnedPagesDescription: Legg inn stien (en per linje) til sidene du ønsker å vise + på topp for denne tjeneren. +antennaKeywords: Nøkkelord å lytte etter +antennaKeywordsDescription: Skill ordene med mellomrom for logisk "OG" og med linjeskift + for logisk "ELLER". +withReplies: Ta med svar +connectedTo: Følgende konto(er) er sammenkoblet +withFiles: Med filer +lastUsed: Sist brukt +unregister: Avregistrer +passwordLessLogin: Passordløs innlogging +share: Del +markAsReadAllNotifications: Marker alle varsler som lest +markAsReadAllTalkMessages: Marker alle meldinger som lest +inputMessageHere: Skriv melding her +close: Lukk +groups: Grupper +quoteAttached: Siter +noMessagesYet: Ingen meldinger ennå +newMessageExists: Det er nye meldinger +invitations: Invitasjoner +usernameInvalidFormat: Du kan bruke store og små bokstaver, tall og understrek. +weakPassword: Svakt passord +normalPassword: Normalt passord +doing: Prosesserer... +category: Kategori +tags: Nøkkelord +docSource: Kilden til dette dokumentet +createAccount: Opprett konto +existingAccount: Eksisterende konto +regenerate: Regenerer +fontSize: Skriftstørrelse +objectStorageRegionDesc: Spesifiser en region som f.eks. 'xx-east-1'. Hvis tjenesten + ikke skiller mellom regioner kan du la feltet stå blankt eller skrive 'us-east-1'. +yourAccountSuspendedTitle: Denne kontoen er suspendert +themeEditor: Tema-editor +emptyToDisableSmtpAuth: La brukernavn og passord stå tomme for å ikke autentisere + mot SMTP-tjeneren +pinnedNote: Festet post +cacheRemoteFiles: Mellomlagre eksterne filer +setWallpaper: Set bakgrunn +noSuchUser: Finner ikke brukeren +lookup: Slå opp +saved: Lagret +enableGlobalTimeline: Aktiver global tidslinje +enableRecommendedTimeline: Aktiver foreslått tidslinje +pinnedClipId: Festede bokmerker +recaptcha: reCAPTCHA +notesAndReplies: Poster og svar +recentlyUpdatedUsers: Nylig aktive brukere +menu: Meny +silenceThisInstance: Stum denne tjeneren +pageLoadErrorDescription: Vanligvis skyldes dette nettverksfeil eller mellomlagring + i nettleseren. Prøv å tømme mellomlageret og prøv på nytt. +you: Du +showEmojisInReactionNotifications: Vis emojier i reaksjonsvarsler +rememberNoteVisibility: Husk synlighetsinnstillinger for poster +reactionSettingDescription2: Trekk for å flytte, klikk for å slette, trykk "+" for + å legge til. +reactionSetting: Reaksjoner som skal vises i reaksjonsvelgeren +blockConfirm: Er du sikker på at du vil blokkere denne kontoen? +unblockConfirm: Er du sikker på at du vil avblokkere denne kontoen? +flagAsBot: Merk denne kontoen som en bot +flagAsCat: Er du en katt? 😺 +editWidgetsExit: Ferdig +editWidgets: Rediger skjermelementer +emoji: Emoji +emojis: Emoji +customEmojis: Egen emoji +autoAcceptFollowed: Automatisk tillat følgerforespørsler fra kontoer du følger +clearCachedFilesConfirm: Er du sikker på at du vil slette alle mellomlagrede eksterne + filer? +hiddenTagsDescription: 'List nøkkelordene (uten #) du ønsker å skjule fra trending + og utforsking. Utover dette kan nøkkelord som er skjulte fortsatt brukes.' +silenced: Stummet +blocked: Blokkert +processing: Prosesserer +preview: Forhåndsvisning +noCustomEmojis: Ingen emoji +noJobs: Ingen jobber +federating: Føderering +notResponding: Ingen svar +changePassword: Endre passord +retypedNotMatch: Innholdet i feltene stemmer ikke overens. +newPassword: Nytt passord +attachFile: Legg ved filer +announcements: Annonseringer +themeForDarkMode: Tema i mørk modus +light: Lyst +dark: Mørkt +syncDeviceDarkMode: Samkjør mørk modus med maskininnstillingene +deleteFolder: Slett katalogen +addFile: Legg til fil +tosUrl: URL til vilkår for tjenesten +circularReferenceFolder: Målkatalogen ligger under katalogen du prøver å flytte. +rename: Gi nytt navn +avatar: Brukerbilde +disablingTimelinesInfo: Administratorer og moderatorer vil alltid ha tilgang til alle + tidslinjer, selv om de ikke er aktiverte. +registration: Registrer +messagingWithGroup: Gruppechat +title: Tittel +text: Tekst +tooShort: For kort +tooLong: For langt +joinOrCreateGroup: Bli invitert inn til en gruppe eller lag dine egne. +tapSecurityKey: Trykk på sikkerhetsnøkkelen +or: Eller +language: Språk +uiLanguage: Språk for brukergrensesnitt +groupInvited: Du har blitt invitert til en gruppe +disableDrawer: Ikke bruk skuffe-menyer +expandOnNoteClick: Åpne post ved klikk +expandOnNoteClickDesc: Om du deaktiverer kan du fortsatt åpne poster fra objektmenyen + eller ved å klikke på tidsstempelet. +userSuspended: Denne brukeren er suspendert. +userSilenced: Denne brukeren er stummet. +channelFederationWarn: Kanaler blir ennå ikke federert til andre tjenere +enableInfiniteScroll: Last mer automatisk +visibility: Synlighet +regexpError: Feil i regulært uttrykk +instanceMute: Tjener-stumming +create: Opprett +messageRead: Les +noMoreHistory: Det er ikke mer historikk +emptyFolder: Katalogen er tom +thisYear: År +basicInfo: Basisinformasjon +help: Hjelp +members: Medlemmer +smtpPort: Port +error: Feil +somethingHappened: Noe gikk galt +retry: Prøv på nytt +manageLists: Administrer lister +loginFailed: Innlogging feilet +general: Generell +accountMoved: 'Brukeren har flyttet til en ny konto:' +wallpaper: Bakgrunn +addAccount: Legg til konto +showOnRemote: Vis opprinnelig side +host: Tjener +selectUser: Velg en bruker +operations: Operasjoner +software: Programvare +version: Versjon +metadata: Metadata +blockedInstances: Blokkerte tjenere +hiddenTags: Skjulte nøkkelord +suspended: Suspendert +instanceUsers: Brukere på denne tjeneren +security: Sikkerhet +currentPassword: Nåværende passord +more: Mer! +upload: Last opp +explore: Utforsk +themeForLightMode: Tema i lys modus +lightThemes: Lyse tema +fileName: Filnavn +selectFile: Velg en fil +selectFiles: Velg filer +selectFolder: Velg en katalog +selectFolders: Velg kataloger +exploreFediverse: Utforsk konføderasjonen +userList: Lister +about: Om +objectStorage: Objektlagring +useObjectStorage: Bruk objektlagring +objectStorageBaseUrl: Base-URL +installedApps: Autoriserte applikasjoner +nothing: Ikke noe å se her +deleteAllFilesConfirm: Er du sikker på at du vil slette alle filer? +updateRemoteUser: Oppdater informasjon om ekstern bruker +deleteAllFiles: Slett alle filer +enterFileDescription: Skriv inn beskrivelse +leaveConfirm: Det er ulagrede endringer. Vil du forkaste dem? +enableAll: Slå på alle +generateAccessToken: Generer adgangstegn +disableAll: Slå av alle +permission: Tilganger +userSaysSomethingReason: '{name} skrev {reason}' +selectChannel: Velg en kanal +flagAsCatDescription: Du vil få katteører og snakke som en katt! +flagSpeakAsCat: Snakk som en katt +flagSpeakAsCatDescription: Postene dine vil bli nyanifiserte når du er i kattemodus +removeWallpaper: Fjern bakgrunn +flagShowTimelineRepliesDescription: Vis svar fra brukere på andre brukeres poster + i tidslinjen når aktivert. +proxyAccountDescription: 'En stedfortreder-konto er en konto som i noen situasjoner + oppfører seg som en ekstern følger for en bruker. For eksempel: når en ekstern bruker + blir lagt i en liste vil den eksterne brukeren ikke uten videre sendt til tjeneren + dersom ingen lokale brukere følger den eksterne brukeren. Da vil stedfortrederen + følge brukeren i stedet.' +instances: Tjenere +clearQueueConfirmTitle: Er du sikker på at du vil tømme køen? +clearQueueConfirmText: Alle usendte meldinger i køen vil ikke bli sendt til andre + tjenere. Vanligvis er denne operasjonen unødvendig. +clearCachedFiles: Tøm mellomlager +silencedInstancesDescription: Liste over tjenere du vil stumme. Kontoer på stumme + tjenere vil bare kunne lage følgerforespørsler, og kan ikke referere til lokale + kontoer med mindre de følges. Dette vil ikke påvirke de blokkerte tjenerne. +noUsers: Ingen brukere +uploadFromUrl: Last opp fra bildelenke +uploadFromUrlRequested: Opplasting forespurt +start: Start +disconnectedFromServer: Forbindelsen til tjeneren er brutt +reload: Last om +doNothing: Ignorer +theme: Tema +reloadConfirm: Vil du oppdatere tidslinjen? +watch: Følg med på +thisMonth: Måned +today: I dag +dayX: '{day}' +yearX: '{year}' +pages: Sider +enableRecaptcha: Slå på reCAPTCHA +antennasDesc: "Antenner fanger opp nye poster etter et sett kriterier du setter opp!\n + Du kommer til dem fra tidslinje-siden." +manageAntennas: Administrer antenner +enableServiceworker: Slå på varsling for nettleseren +pinnedNotes: Festede poster +antennaUsersDescription: List opp ett brukernavn per linje +antennaInstancesDescription: List opp en tjener per linje +caseSensitive: Skill mellom små og store bokstaver +silence: Stillhet +silenceConfirm: Er du sikker på at du vil stumme denne brukeren? +unsilence: Avslutt stumming +recentlyRegisteredUsers: Nye brukere +token: Adgangstegn +popularTags: Populære nøkkelord +administrator: Administrator +twoStepAuthentication: Tofaktor-autentisering +securityKeyName: Nøkkelnavn +reduceUiAnimation: Demp animasjoner i brukergrensesnittet +notFound: Ikke funnet +uploadFolder: Standardkatalog for opplastinger +createGroup: Opprett gruppe +notFoundDescription: Fant ingen sider som samsvarer med enne URL-en. +ownedGroups: Grupper du eier +joinedGroups: Grupper du er med i +invites: Invitasjoner +messagingWithUser: Privat chat +enable: Slå på +quoteQuestion: Sett inn som sitat? +onlyOneFileCanBeAttached: Du kan bare legge ved én fil til en melding +signinRequired: Registrer eller logg inn før du fortsetter +invitationCode: Invitasjonskode +checking: Sjekker... +available: Tilgjengelig +unavailable: Ikke tilgjengelig +passwordMatched: Likt +passwordNotMatched: Stemmer ikke +signinWith: Logg inn med {x} +signinFailed: Klarer ikke å logge inn. Brukernavn eller passord er feil. +objectStorageBaseUrlDesc: "URL-en som brukes som referanse. Oppgi URL-en til leveringsnettverket + (CDN) eller proxy om du bruker en av dem.\nFor S3 kan du bruke 'https://.s3.amazonaws.com' + og for GCS og tilsvarende tjenester 'https://storage.googleapis.com/'." +objectStorageEndpoint: Endepunkt +objectStorageRegion: Region +installedDate: Autorisert +lastUsedDate: Sist brukt +state: Tilstand +sort: Sortering +yourAccountSuspendedDescription: Denne kontoen er suspendert fordi den har brutt tjenerens + retningslinjer eller lignende. Kontakt administratoren hvis du trenger en mer detaljert + grunn. Ikke opprett en ny konto. +useCw: Skjul innhold +enablePlayer: Åpne videospiller +disablePlayer: Lukk videospiller +describeFile: Legg til beskrivelse +author: Forfatter +useFullReactionPicker: Bruk reaksjonsvelger i full størrelse +width: Bredde +regexpErrorDescription: 'En feil oppsto under det regulære uttrykket på linje {line} + av stumming av {tab}:' +userSaysSomethingReasonRenote: '{name} delte en post som inneholdt {reason}' +userSaysSomethingReasonQuote: '{name} siterte en post som inneholdt {reason}' +userSaysSomething: '{name} sa noe' +metrics: Metrikker +overview: Oversikt +logs: Logger +delayed: Forsinket +channel: Kanaler +flagAsBotDescription: Slå på denne innstillingen dersom kontoen styres av et program. + Dette er et flagg til andre utviklere for å hindre uendelige kjeder der roboter + responderer på hverandres meldinger og lar den interne håndteringen av kontoen i + Firefish være tilpasset bot-brukere. +aboutFirefish: Om Firefish +youShouldUpgradeClient: Last siden på nytt for å oppdatere klienten. +serverIsDead: Tjeneren svarer ikke. Prøv på nytt om en stund. +sensitive: Sensitivt innhold +unmarkAsSensitive: Fjern merking som sensitivt innhold +enterFileName: Skriv inn filnavn +mute: Stum +unmute: Fjern stumming +block: Blokker +unsuspendConfirm: Er du sikker på at du vil fjerne suspensjonen av denne kontoen? +selectList: Velg en liste +selectAntenna: Velg en antenne +selectWidget: Velg et skjermelement +emojiName: Emoji-navn +emojiUrl: Emoji-URL +searchWith: 'Søk etter: {q}' +intro: Installasjonen av Firefish er fullført! Lag en admin-bruker. +youHaveNoLists: Du har ingen lister +followConfirm: Er du sikker på at du vil følge {name}? +proxyAccount: Stedfortreder-konto +statistics: Statistikk +default: Standard +defaultValueIs: 'Standard: {value}' +newPasswordRetype: Gjenta nytt passord +fromDrive: Fra disk +fromUrl: Fra URL +nUsersRead: lest av {n} +uploadFromUrlDescription: URL til filen du vil laste opp +agreeTo: Jeg samtykker til {0} +home: Hjem +emptyDrive: Disken din er tom +unableToDelete: Klarte ikke å slette +inputNewFileName: Oppgi nytt filnavn +hasChildFilesOrFolders: Katalogen kan ikke slettes fordi den ikke er tom. +avoidMultiCaptchaConfirm: Å bruke flere Captcha-systemer kan forårsake uønskede krysseffekter + mellom dem. Ønsker å du slå av det andre aktive CAPTCHA-systemet? Om du ønsker å + ha begge på, trykk "Avbryt". +name: Navn +antennas: Antenner +antennaSource: Antennekilde +notifyAntenna: Varsle om nye poster +antennaExcludeKeywords: Nøkkelord som skal ekskluderes +retype: Skriv inn igjen +inviteToGroup: Inviter til gruppe +next: Neste +useOsNativeEmojis: Bruk operativsystemets emojier +youHaveNoGroups: Du har ingen grupper +noHistory: Ingen historikk er tilgjengelig +aboutX: Om {x} +signinHistory: Innloggings-historikk +veryStrongPassword: Sterkt passord +noFollowRequests: Du har ingen utestående følgeforespørsler +openImageInNewTab: Åpne bilder i ny fane +dashboard: Dashbord +local: Lokal +objectStoragePrefix: Prefiks +objectStoragePrefixDesc: Filer vil bli lagret under kataloger med dette prefikset. +objectStorageEndpointDesc: La dette stå tomt om du bruker AWS S3, ellers kan du spesifisere + endepunktet som '' eller ':', avhengig av hvilken tjeneste + du bruker. +objectStorageUseSSL: Bruk TLS +objectStorageUseSSLDesc: Skru dette av dersom du ikke vil bruke HTTPS for API-forbindelser. +uninstall: Avinstaller +ascendingOrder: Økende +descendingOrder: Synkende +removeAllFollowing: Avfølg alle brukere +deletedNote: Slettet post +height: Høyde +enableEmail: Slå på epost-utsendelse +smtpPass: Passord +smtpSecureInfo: Slå av dette om du bruker STARTTLS +database: Database +display: Vis +notificationSetting: Varslingsinnstillinger +other: Annet +removeAllFollowingDescription: Dette vil avfølge alle kontoer på tjeneren {host}. + Kjør denne for eksempel om tjeneren ikke lenger finnes. +inboxUrl: Innboks-URL +description: Beskrivelse +smtpUser: Brukernavn +smtpSecure: Bruk implisitt SSL/TLS for SMTP-forbindelser +userSaysSomethingReasonReply: '{name} svarte på en post som inneholdt {reason}' +makeActive: Aktiver +copy: Kopier +regenerateLoginToken: Lag innloggingstegn på nytt +pinnedUsersDescription: Liste av brukere (en per linje) som skal festes øverst under + "Utforsk". +resetPassword: Tilbakestill passord +newPasswordIs: Nytt passord er "{password}" +all: Alle +keepOriginalUploadingDescription: Lagrer det opprinnelige opplastedet bildet slik + det var originalt. Hvis du slår det av vil en versjon for visning på nett bli generert + ved opplasting. +startMessaging: Start en ny chat +group: Gruppe +renote: Del +banner: Topp-bilde +nsfw: Sensitivt innhold +bannerUrl: URL til fane-bilde +backgroundImageUrl: URL til bakgrunnsbilde +pinnedPages: Festede sider +hcaptcha: hCaptcha +enableHcaptcha: Slå på hCaptcha +invisibleNote: Usynlig post +withFileAntenna: Bare poster med filer +markAsReadAllUnreadNotes: Marker alle poster som lest +noteOf: Post av {user} +xl: Ekstra stor +large: Stor +medium: Medium +small: Liten +tokenRequested: Gi tilgang til konto +pluginTokenRequestedDescription: Dette programtillegget vil kunne bruke tillatelsene + som settes her. +emailConfigInfo: Brukt for å bekrefte epost-adresser ved opprettelse av kontoer og + dersom du glemmer passordet +email: Epost +emailAddress: Epostadresse +smtpConfig: Konfigurasjon av SMTP-tjener +smtpHost: Tjener +showInPage: Vis på side +volume: Volum +fileIdOrUrl: Fil-id eller URL +reporter: Rapportert av +yes: Ja +loadRawImages: Last originale bilder i stedet for å vise miniatyrbilder +fillAbuseReportDescription: Fyll inn detaljer om innrapporteringen. Hvis det handler + om en bestemt post, inkluder URL til den. +openInSideView: Åpne i sidefelt +pollVotesCount: Antall stemmer sendt +lockedAccountInfo: Med mindre du setter synlighet til "Bare følgere" vil postene dine + være synlige for alle, selv om du krever at følgere må godtas manuelt. +disableShowingAnimatedImages: Ikke spill animerte bilder +pageLikesCount: Antall likte Sider +pageLikedCount: Antall mottatte likes på Sider +contact: Kontakt +useSystemFont: Bruk standard skriftsnitt fra systemet +unableToProcess: Operasjonen kunne ikke fullføres +send: Send +clientSettings: Klientinnstillinger +accountSettings: Kontoinnstillinger +promotion: Promotert +deleteAll: Slett alle +showFixedPostForm: Vis post-feltet på toppen av tidslinjen +sounds: Lyder +details: Detaljer +openInNewTab: Åpne i ny fane +followersCount: Antall følgere +sentReactionsCount: Antall sendte reaksjoner +appearance: Utseende +hideThisNote: Skjul denne posten +popout: Pop ut +recentUsed: Nylig brukt +install: Installer +weekOverWeekChanges: Endringer til forrige uke +dayOverDayChanges: Endringer til i går +listen: Lytt +system: System +none: Ingen +chooseEmoji: Velg en emoji +setMultipleBySeparatingWithSpace: Separer ulike innslag med mellomrom. +reportAbuse: Rapport +reportAbuseOf: Rapport {name} +abuseReported: Rapporten er sendt. Takk. +random: Tilfeldig +repliesCount: Antall svar sendt +repliedCount: Antall mottatte svar +followingCount: Antall fulgte kontoer +notSet: Ikke sendt +i18nInfo: 'Firefish blir oversatt til ulike språk av frivillige. Du kan hjelpe her: + {link}.' +accessibility: Tilgjengelighet +promote: Promoter +numberOfDays: Antall dager +serverLogs: Tjenerlogger +objectStorageSetPublicRead: Sett til "offentlig lesing" ved opplasting +behavior: Oppførsel +abuseReports: Rapporter +defaultNavigationBehaviour: Standard navigeringsoppførsel +abuseMarkAsResolved: Marker rapporten som løst +emailVerified: Epost er verifisert +noteFavoritesCount: Antall bokmerkede poster +editTheseSettingsMayBreakAccount: Endringer i disse innstillingene kan ødelegge kontoen + din. +instanceTicker: Tjenerinformasjon for poster +waitingFor: Venter på {x} +notesCount: Antall poster +receivedReactionsCount: Antall mottatte reaksjoner +pollVotedCount: Antall mottatte stemmer +no: Nei +alwaysMarkSensitive: Merk som "Sensitivt innhold" som standard +verificationEmailSent: En verifiserings-epost er sendt. Følg lenken i eposten for + å fullføre verifiseringen. +newNoteRecived: Det er nye poster +scratchpadDescription: Kladdeblokka gir deg et miljø for å eksperimentere med AiScript. + Du kan skrive, kjøre og sjekke resultatene av at koden interagerer med Firefish. +disablePagesScript: Slå av AiScript på Sider +expandTweet: Ekspander tweet +public: Offentlig +clearCache: Slett mellomlager +onlineUsersCount: '{n} brukere er innlogget' +nNotes: '{n} poster' +sendErrorReports: Send feilmeldinger +deleteConfirm: Virkelig slette? +latestVersion: Nyeste versjon +receiveAnnouncementFromInstance: Motta varsler fra denne tjeneren +inChannelSearch: Søk i kanal +selectAccount: Velg konto +switch: Bytt +instanceDefaultDarkTheme: Standard mørkt tema på tjeneren +oneDay: En dag +driveCapOverrideCaption: Tilbakestill kapasiteten til standardverdien ved å legge + inn en verdi på 0 eller lavere. +sendModMail: Send modereringsvarsel +enableServerMachineStats: Slå på hardware-statistikk for tjeneren +_gallery: + liked: Likte poster + unlike: Fjern lik + my: Mitt galleri + like: Lik +_preferencesBackups: + loadFile: Last fra fil + cannotSave: Lagring feilet + deleteConfirm: Vil du slette sikkerhetskopien "{name}"? + saveConfirm: Lagre sikkerhetskopi som "{name}"? + noBackups: Ingen sikkerhetskopier er tatt. Du kan ta en backup av klientinnstillingene + dine på denne tjeneren ved å trykke "Lag ny sikkerhetskopi". + applyConfirm: Ønsker du å laste inn sikkerhetskopien "{name}" på denne enheten? + Eksisterende innstillinger vil bli overskrevet. + save: Lagre endringer + nameAlreadyExists: En sikkerhetskopi med navnet "{name}" finnes allerede. Skriv + inn et annet navn. + createdAt: 'Opprettet: {date} {time}' + apply: Bruk på denne enheten + renameConfirm: Endre navn på sikkerhetskopien fra "{old}" to "{new}"? + list: Opprettede sikkerhetskopier + saveNew: Ta ny sikkerhetskopi + inputName: Gi sikkerhetskopien et navn + updatedAt: 'Oppdatert: {date} {time}' + cannotLoad: Innlasting feilet + invalidFile: Ugyldig filformat +_ad: + back: Tilbake + reduceFrequencyOfThisAd: Vis annonsen sjeldnere +_mfm: + cheatSheet: Jukseark for tekstmarkering (MFM) + stop: Stopp animert markeringsspråk (MFM) + warn: Markeringsspråket (MFM) kan inneholde bevegelige eller blinkende animasjoner + alwaysPlay: Alltid spill av animert tekstmarkering (MFM) + play: Spill animert markeringsspråk (MFM) + intro: MFM er et markeringsspråk som burkes av Misskey, Firefish, Akkoma og andre. + Her kan du se en liste over tilgjengelig MFM-syntaks. + sparkle: Gnistrende + dummy: Firefish utvider Allheimen + tadaDescription: Gir innholdet en "Tada!"-lignende animasjon. + emoji: Egendefinert emoji + flip: Speil + jelly: Animasjon (gelé) + rotate: Rotér + foregroundDescription: Endre forgrunnsfargen på tekst. + quoteDescription: Viser innhold som et sitat. + link: Lenke + search: Søk + scale: Skalér + centerDescription: Viser innhold sentrert. + advancedDescription: Hvis avslått vil bare enkel tekstmarkering være tillatt med + mindre du spiller av animert tekstmarkering + fontDescription: Setter skriftsnittet for innholdet. + inlineCode: Kode (inline) + x2Description: Viser innholdet større. + backgroundDescription: Endre bakgrunnsfargen til tekst. + blur: Uklar + rainbowDescription: Viser innholdet i regnbuefarger. + center: Sentrert + mentionDescription: Du kan spesifisere en bruker ved å skrive krøllalfa foran brukernavnet. + emojiDescription: Ved å omslutte navnet på en egendefinert emoji med kolon vil de + vises i teksten. + x3: Veldig stor + rainbow: Regnbue + mention: Nevn + shakeDescription: Gir innholdet en ristende animasjon. + advanced: Avansert MFM (tekstmarkering) + hashtag: Emneknagg + urlDescription: URL-er kan vises. + blockMath: Matematikk (blokk) + smallDescription: Viser innhold lite og tynt. + x2: Stor + font: Skriftsnitt + crop: Beskjær + fadeDescription: Fader innholdet inn og ut. + x4Description: Viser innholdet større enn større enn stor. + sparkleDescription: Gir innholdet en gnist-effekt. + scaleDescription: Skalér innholdet. + inlineMath: Matematikk (inline) + shake: Animasjon (risting) + tada: Animasjon (Tada) + background: Bakgrunnsfarge + twitchDescription: Gir innholdet en sterk animert rykning. + blockCodeDescription: Viser syntaksmarkering for programkode over flere linjer i + en blokk. + position: Posisjon + hashtagDescription: Du kan spesifisere en emneknakk ved å bruke nummer-tegn (#) + og tekst. + small: Liten + positionDescription: Flytter innholdet en angitt distanse. + cropDescription: Beskjær innhold. + x4: Utrolig stor + jellyDescription: Gir innholdet med en gelé-lignende animasjon. + flipDescription: Speiler innhold horisontalt eller vertikalt. + twitch: Animasjon (rykning) + plainDescription: Slår av effenten av all formatering innenfor denne markeringen. + url: URL + jumpDescription: Viser innholdet med animert hopping. + blockMathDescription: Viser matematiske formler (KaTeX) i en blokk + inlineMathDescription: Viser matematiske formler (KaTeX) inline + linkDescription: Spesifikke deler av tekst kan vises som en URL. + blurDescription: Viser innholdet uklart. Det vil bli vist klart når muspekeren er + over. + foreground: Forgrunnsfarge + quote: Sitat + bounceDescription: Viser innholdet med en sprettende animasjon. + bold: Fet + inlineCodeDescription: Viser inline syntaksmarkering for kildekode. + jump: Animasjon (hopp) + fade: Fade + spin: Animasjon (spinn) + searchDescription: Viser en søkeboks med forhåndsutfylt tekst. + spinDescription: Gir innholdet en spinnende animasjon. + blockCode: Kodeblokk + boldDescription: Fremhever tekst ved å gjøre den fyldigere. + bounce: Animasjon (sprett) + rotateDescription: Vrir innholdet i en gitt vinkel. + plain: Enkel + x3Description: Viser innholdet enda større. +reactionPickerSkinTone: Foretrukket hudfarge i emojier +switchUi: Visningsoppsett +usageAmount: Bruk +memo: Memo +priority: Prioritet +high: Høy +secureMode: Sikker modus (Autorisert henting) +requireAdminForView: Du må logge inn på en administratorkonto for å se dette. +typeToConfirm: Skriv inn {x} for å bekrefte +replayTutorial: Kjør introduksjon på nytt +moveTo: Flytt denne kontoen til en ny konto +objectStorageBucketDesc: Skriv inn navnet på bøtta hos lagringstjenesten. +notRecommended: Ikke anbefalt +voteConfirm: Bekreft din stemme på "{choice}"? +oneHour: En time +_plugin: + installWarn: Ikke installer utvidelser du ikke stoler på. + install: Installer innstikk + manage: Oppsett av innstikk +preventAiLearning: Hindre tråling fra AI-boter +reporterOrigin: Kilden til den som rapporterer +center: Sentrert +wide: Bred +value: Verdi +createdAt: Opprettet +active: Aktiv +hideOnlineStatus: Skjul om du er pålogget +troubleshooting: Problemløsing +useBlurEffect: Bruk diffuseringseffekter i brukergrensesnittet +learnMore: Lær mer +usernameInfo: Et navn som identifiserer din konto på denne tjeneren. Du kan bruke + alfabetet (a-z,A-Z), sifre (0-9) og understrek (_). Brukernavn kan ikke endres senere. +resolved: Løst +unresolved: Uløst +welcomeBackWithName: Velkommen tilbake, {name} +clickToFinishEmailVerification: Klikk [{ok}] for å fullføre epost-verifisering. +cropImage: Beskjær bilde +numberOfPageCacheDescription: En økning i dette tallet vil gjøre brukeropplevelsen + bedre, men gi mer jobb til tjeneren og kreve mer minne. +logoutConfirm: Vil du logge ut? +numberOfPageCache: Antall mellomlagrede sider +lastActiveDate: Sist brukt +refreshInterval: 'Oppdateringsintervall ' +swipeOnDesktop: Tillat mobil-lignende sveiping på skrivebords-PC +migration: Migrering +useDrawerReactionPickerForMobile: Vis reaksjosnvelger som en skuff på mobil +numberOfColumn: Antall kolonner +oneWeek: En uke +file: Fil +recentNHours: Siste {n} timer +noEmailServerWarning: E-post-tjener er ikke konfigurert. +thereIsUnresolvedAbuseReportWarning: Det er uløste rapporter. +colored: I farger +recommendedInstancesDescription: Anbefalte tjenere skilt med linjeskift for visning + i anbefalt-tidslinjen. +caption: Automatisk beskrivelse +updateAvailable: En oppdatering kan være tilgjengelig! +accentColor: Uthevet farge +textColor: Skriftfarge +saveAs: Lagre som... +swipeOnMobile: Tillat sveiping mellom sider +_accountDelete: + inProgress: Sletting pågår + requestAccountDelete: Be kom sletting av konto + started: Sletting har startet. + accountDelete: Slett konto + mayTakeTime: Å slette en konto er en ressurskrevende prosess. Det kan ta litt tid + å fullføre den, avhengig av hvor mye du har postet og hvor mange filer du har + lastet opp. + sendEmail: Når kontoen er ferdig slettet vil du få en epost til adressen som er + registrert for kontoen. +remote: Ekstern +total: Total +registry: Register +closeAccount: Avslutt konto +currentVersion: Nåværende versjon +fullView: Full visning +gallery: Galleri +emailNotConfiguredWarning: E-post-adresse er ikke satt. +allowedInstancesDescription: Tjenernavn for tjenere som skal hvitelistes. En per linje. + (Vil bare bli brukt i privat modus). +previewNoteText: Forhåndsvisning +recentNDays: Siste {n} dager +objectStorageUseProxy: Koble til gjennom en mellomtjener +objectStorageUseProxyDesc: Skru av dette dersom du ikke vil bruke mellomtjenere for + API-oppkoblinger +masterVolume: Hovedvolum +script: Skript +divider: Skille +addItem: Legg til element +manage: Oppsett +notificationType: Varseltype +useBlurEffectForModal: Bruk diffus-effekt for modale brukergrensesnitt-elementer +driveFilesCount: Antall filer på Disk +showGapBetweenNotesInTimeline: Legg inn et tomrom mellom postene i tidslinjen +newVersionOfClientAvailable: En nyere versjon av klienten er tilgjengelig. +capacity: Kapasitet +inUse: Brukt +publish: Publiser +quickAction: Hurtigvalg +privateMode: Privat modus +customCss: Egendefinert CSS +allowedInstances: Hvitelistede tjenere +lastCommunication: Siste kommunikasjon +breakFollowConfirm: Er du sikker på at du vil fjerne følgeren? +filter: Filter +makeReactionsPublicDescription: Dette vil gjøre listen over dine tidligere reaksjoner + synlige for alle. +indefinitely: Permanent +tenMinutes: 10 minutter +_email: + _follow: + title: Du har en ny følger + _receiveFollowRequest: + title: Du har mottatt en følgeforespørsel +_registry: + key: Nøkkel + scope: Omfang + domain: Domene + createKey: Opprettet nøkkel + keys: Nøkler +sendErrorReportsDescription: "Detaljert feilinformasjon vli bli delt med utviklerne + av Firefish, noe som hjelper til med feilretting og forbedring av programmet.\n + - Dette inkluderer informasjon som f.eks. versjonen på operativsystemet og nettleseren + din, og aktiviteten din i Firefish." +_aboutFirefish: + translation: Oversett Firefish + donate: Donér til Firefish + donateTitle: Liker du Firefish? + pleaseDonateToFirefish: Du kan vurdere å donere en slant til Firefish for å støtte + videre utvikling og feilretting. + donateHost: Donér til {host} + contributors: Hovedutviklere + source: Kildekode + allContributors: Alle bidragsytere + misskeyContributors: Misskeys bidragsytere + pleaseDonateToHost: Du kan også vurdere å donere til hjemme-tjeneren din, {host}, + for å hjelpe dem med driftskostnadene for tjenesten. + about: Firefish ble opprettet av ThatOneCalculator i 2022, basert på Misskey. +isBot: Denne kontoen er en bot +_nsfw: + respect: Skjul NSFW-merket media + force: Skjul alle media + ignore: Ikke skjul NSFW-media +disableAnimatedMfm: Slå av animert markeringsspråk +objectStorageBucket: Bøtte +scratchpad: Kladdeblokk +plugins: Innstikk +createNew: Lag ny +makeExplorable: Gjør kontoen synlig i "Utforsk" +needReloadToApply: Siden må lastes på nytt for at denne endringen skal tre inn. +customCssWarn: Bruk denne innstillingen bare hvis du vet hva den gjør. Feil innstilling + kan få klienten til å ikke fungere som den skal. +low: Lav +global: Global +recommended: Anbefalt +instanceSecurity: Tjenersikkerhet +squareAvatars: Vis firkantede avatarer +deleteAccount: Slett konto +customKaTeXMacro: Egne KaTeX-makroer +size: Størrelse +fast: Raskt +showAdminUpdates: Indikerer at en ny versjon av Firefish er tilgjengelig (bare admin) +moveAccount: Flytt konto! +license: Lisens +wordMute: Ordstumming +reporteeOrigin: Kilden til den som rapporteres +accountInfo: Kontoinformasjon +driveUsage: Brukt diskplass +noCrawle: Stopp robot-indeksering +noCrawleDescription: Be eksterne søkemotorer om å ikke indeksere innholdet ditt. +narrow: Smal +reloadToApplySetting: Denne innstillingen aktiveres ikke før du laster siden på nytt. + Vil du gjøre det nå? +showTitlebar: Vis tittellinje +nUsers: '{n} brukere' +myTheme: Mitt tema +backgroundColor: Bakgrunnsfarge +advanced: Avansert +updatedAt: Oppdatert +editCode: Rediger kode +addDescription: Legg til beskrivelse +userPagePinTip: Du kan vise poster her ved å klikke "Fest til profil" fra menyen til + en post. +unknown: Ukjent +onlineStatus: Påkoblet status +online: Pålogget +offline: Ikke pålogget +instanceBlocking: Innstillinger for føderering +accounts: Kontoer +noBotProtectionWarning: Bot-beskyttelse er ikke konfigurert. +configure: Konfigurer +postToGallery: Lag ny galleripost +recentPosts: Nylige sider +popularPosts: Populære sider +shareWithNote: Del med post +expiration: Frist +middle: Medium +sent: Sendt +makeReactionsPublic: La reaksjonshistorikken være offentlig +classic: Sentrert +muteThread: Stum en tråd +ffVisibilityDescription: Lar deg konfigurere hvem som kan se hvem du følger og hvem + som følger deg. +continueThread: Fortsett tråd +deleteAccountConfirm: Dette vil slette kontoen, og det går ikke å omgjøre etterpå. + Fortsette? +hide: Skjul +ffVisibility: Synlighet av følgere og folk du følger +leaveGroup: Forlat gruppe +leaveGroupConfirm: Er du sikker på at du vil forlate "{name}"? +overridedDeviceKind: Enhetstype +smartphone: Smarttelefon +tablet: Nettbrett +auto: Automatisk +image: Bilde +video: Video +driveCapOverrideLabel: Endre brukerens lagringskapasitet +isSystemAccount: Denne kontoen er opprettet og kontrollert av systemet. Ikke moderer, + rediger, slett eller på annen måte endre noe ved denne kontoen. Tjeneren kan slutte + å virke som den skal. +document: Dokumentasjon +statusbar: Statuslinje +pleaseSelect: Velg en innstilling +reverse: Reverser +slow: Sakte +moveFromLabel: 'Kontoen du flytter fra:' +silencedWarning: Denne siden vises fordi disse brukerne er fra tjenere administratoren + din har stummet, så de kan potensielt inneholde spam. +ads: Samfunnsbanner +_forgotPassword: + contactAdmin: Denne tjeneren støtter ikke bruk av e-post-adresser for gjenoppretting + av passord. Kontakt administratoren for tjeneren. + enterEmail: Skriv inn e-post-adressen du brukte da du registrerte kontoen. Du vil + motta en e-post med en lenke som lar deg endre passordet. + ifNoEmail: Dersom du ikke oppga en e-post-adresse da du registrerte kontoen, kontakt + administrator i stedet. +breakFollow: Slett følger +unmuteThread: Fjern stumming av tråden +incorrectPassword: Feil passord. +logoImageUrl: URL til logo-bilde +apps: Apper +audio: Lyd +moveToLabel: 'Kontoen du flytter til:' +moveFrom: Flytt fra en annen konto til denne kontoen +migrationConfirm: "Er du helt sikker på at du ønsker å flytte kontoen din til {account}? + Når du har gjort dette kan du ikke omgjøre det, og du vil ikke kunne bruke kontoen + normalt etterpå.\nPass på at du setter den kontoen du er innlogget på her som kontoen + du flytter fra." +jumpToSpecifiedDate: Hopp til en gitt dato +showingPastTimeline: Du ser nå en gammel tidslinje +noMaintainerInformationWarning: Eierinformasjon er ikke konfigueret. +notSpecifiedMentionWarning: Denne posten inneholder nevnelser av brukere som ikke + er inkludert som mottakere +saveConfirm: Lagre endringer? +clear: Tøm +switchAccount: Bytt konto +enabled: Påslått +disabled: Avslått +user: Bruker +administration: Konfigurasjon +invalidValue: Ugyldig verdi. +youAreRunningUpToDateClient: Du bruker nyeste versjon av klienten. +noteId: Post-id +noGraze: Slå av "Graze for Mastodon"-utdivdelsen i nettleseren. Den vil forstyrre + Firefish. +isModerator: Moderator +isAdmin: Administrator +objectStorageS3ForcePathStyle: Bruk sti-baserte URL-er til endepunktene +objectStorageS3ForcePathStyleDesc: Skru på dette for å lage endpunkts-URL-er i formatet + 's3.amazonaws.com//' i stedet for '.s3.amazonaws.com'. +output: Utputt +forwardReport: Videresend rapport til ekstern tjener +forwardReportIsAnonymous: I stedet for din konto vil en anonym systemkonto bli vist + som rapportør på den eksterne tjeneren. +optional: Valgfritt +manageAccessTokens: Styr adgangstegn +experimentalFeatures: Eksperimentelle funksjoner +developer: Utvikler +duplicate: Dupliser +left: Venstre +makeExplorableDescription: Dersom du slår av denne vil kontoen din ikke dukke opp + under "Utforsk". +apply: Bruk +emailNotification: Epostvarsler +useReactionPickerForContextMenu: Åpne reaksjonsvelger med høyreklikk +typingUsers: '{users} skriver' +markAllAsRead: Marker alle som lest +goBack: Tilbake +info: Om +userInfo: Brukerinformasjon +hideOnlineStatusDescription: Å skjule hvorvidt du er pålogget vil redusere enkelheten + av enkelte funksjoner slik som søk. +privateModeInfo: Bare hvitelistede tjenere kan federere med din tjener om du slår + på denne. Alle poster vil bli skjult for andre. +received: Mottatt +searchResult: Søkeresultater +hashtags: Emneknagger +keepCw: Behold innholdsadvarsler +misskeyUpdated: Firefish er oppdatert! +whatIsNew: Vis endringer +translate: Oversett +translatedFrom: Oversatt fra {x} +itsOn: Påslått +itsOff: Avslått +emailRequiredForSignup: Krev e-post-adresse for registrering +unread: Ulest +controlPanel: Kontrollpanel +manageAccounts: Styr kontoer +mutePeriod: Periode for stumming +instanceDefaultLightTheme: Standard lyst tema på tjeneren +reflectMayTakeTime: Det kan ta litt tid før endringen inntrer. +failedToFetchAccountInformation: Klarte ikke å hente kontoinformasjon +cropImageAsk: Ønsker du å beskjære dette bildet? +recommendedInstances: Anbefalte tjenere +moveAccountDescription: Denne prosessen er irreversibel! Vær sikker på at du har satt + opp et alias for denne kontoen på den nye kontoen før du fortsetter. Skriv inn navnet + på kontoen på formen @person@server.com +moveFromDescription: Dette vil sette opp et alias for din gamle kontoen slik at du + kan flytte fra den gamle kontoen til denne. Gjør dette FØR du flytter fra den gamle + kontoen. Skriv inn den gamle kontoen på formen @person@server.com +defaultReaction: Standard emoji-reaksjon for utgående og innkommende poster +customKaTeXMacroDescription: 'Sett opp makroer for å skrive matematiske uttrykk enkelt. + Notasjonen følger LaTeX-kommandoer og er skrevet som \newcommand{\ navn}{uttrykk} + eller \newcommand{\navn}{antall argumenter}{uttrykk}. For eksempel vil \newcommand{\add}{2}{#1 + + #2} vil ekspandere \add{3}{foo} til 3 + foo. Klammeparentesene rundt makroen kan + også endres til parenteser eller hakeparenteser. Dette påvirker hvilken parentestype + du bruker for argumenter. En og bare en makro kan defineres pr linje, og du kan + ikke ha linjeskift inni definisjonen. Linjer som ikke inneholder gyldige makroer + vil bli ignorert. Bare enkle streng-erstatnings-makroer er støttet; avansert syntaks + f.eks. med flykontroll er ikke tillatt.' +signupsDisabled: Registreringer av nye konti på denne tjeneren er slått av, men du + kan alltids registrere deg på en annen tjener! Hvis du har en invitasjonskode for + denne tjeneren, skriv den inn under. +preventAiLearningDescription: Ber tredjeparts AI-språkmodeller om å ikke bruke innhold + du laster opp, sliks om poster og bilder. +enableCustomKaTeXMacro: Slå på egne KaTeX-makroer +showPopup: Varsle brukere med oppsprettsvindu +_postForm: + _placeholders: + a: Hva skjer? + d: Hva vil du si? + f: Venter på at du skriver... + e: Start skrivingen... + b: Hva skjer rundt deg? + c: Hva tenker du på? + channelPlaceholder: Post til kanal... + quotePlaceholder: Siter denne posten... + replyPlaceholder: Svar på denne posten... +_notification: + _types: + pollEnded: Ferdige avstemninger + all: Alle + renote: Delinger + quote: Sitater + reaction: Reaksjoner + receiveFollowRequest: Mottatte følgerforespørsler + groupInvited: Gruppeinvitasjoner + app: Varsler fra lenkede apper + followRequestAccepted: Aksepterte følgerforespørsler + mention: Noen nevner deg + reply: Svar + follow: Nye følgere + pollVote: Stemmer i avstemninger + yourFollowRequestAccepted: Følgerforespøreslen din er godkjent + _actions: + renote: Delinger + followBack: følger deg også + reply: Svar + youGotQuote: '{name} siterte deg' + fileUploaded: Lastet opp fil + youGotMessagingMessageFromUser: '{name} har sendt deg en chatmelding' + emptyPushNotificationMessage: Pushvarsler har blitt oppdatert + pollEnded: Resultatene fra en avstemning er tilgjengelige + youGotReply: '{name} svarte deg' + youGotMessagingMessageFromGroup: En chatmelding er sendt til gruppen "{name}" + youWereInvitedToGroup: '{userName} har invitert deg til en gruppe' + youReceivedFollowRequest: Du har fått en følgerforespørsel + youRenoted: Deling fra {name} + reacted: reagerte på posten din + voted: stemte i avstemningen din + renoted: delte posten din + youGotPoll: '{name} stemte i avstemningen din' + youGotMention: '{name} nevnte deg' + youWereFollowed: følger deg +_tutorial: + step3_2: "Tidslinjene Hjem og Sosialt er basert på de du følger, så prøv nå følge + noen kontoer for å komme i gang.\nKlikk pluss-sirkelen oppe til høyre på en profil + for å følge den." + step6_1: Så, hva er dette stedet? + step5_7: Tidslinjen Global {icon} viser poster fra alle tilkoblede tjenere. + step4_1: La oss få deg ut der. + step5_1: Tidslinjer! Tidslinjer overalt! + step1_2: La oss gjøre deg klar. Du vil være oppe og gå på et øyeblikk! + step1_1: Velkommen! + title: Hvordan bruke Firefish + step5_6: Tidslinjen Forslag {icon} er hvor du kan se poster fra tjenere administratorene + foreslår. + step5_5: Tidslinjen Sosialt {icon} er en kombinasjon av tidslinjene Hjem og Lokal. + step5_2: Tjeneren din har {timelines} ulike tidslinjer. + step5_3: Tidslinjen Hjem {icon} er hvor du ser poster fra kontoer du følger. + step2_1: Først, fyll ut litt profil-informasjon. + step4_2: Noen liker å skrive en {introduction}-post eller en enkel "Hei, verden!" + step5_4: Tidslinjen Lokal {icon} er hvor du kan se poster fra alle andre på denne + tjeneren. + step6_2: Vel, du har ikke bare blitt med i Firefish. Du har trådt inn porten til + Allheimen, et sammenkoblet nettverk av tusenvis av tjenere. + step6_3: Hver tjener er satt opp og fungerer litt ulikt, denne og noen andre kjører + Firefish, men ikke alle. Komplisert? Bittelitt, men du skjønner det fort når du + tar det i bruk. + step2_2: Å gi litt informasjon om hvem du er vil gjøre det lettere for andre å vite + om de er interessert i å lese postene dine eller følge deg. + step3_1: Nå er det tid for å følge noen! + step6_4: Nå kan du utforske og ha det gøy! +deletePasskeysConfirm: Dette vil slette alle adgangsnøkler og sikkerhetsnøkler for + denne kontoen. Fortsette? +_pages: + fontSerif: Antikva + featured: Populære + contentBlocks: Innhold + viewPage: Vis dine Sider + blocks: + section: Seksjon + _note: + idDescription: Alternativt kan du legge inn URL til posten her. + id: Post-id + detailed: Detaljert visning + radioButton: Valg + _button: + colored: Farget + _action: + _pushEvent: + message: Melding som skal vises når aktivert + variable: Variabel som skal sendes + no-variable: Ingen + callAiScript: Kjør AiScript + _callAiScript: + functionName: Funksjonsnavn + resetRandom: Nullstill starten for tilfeldige tall + dialog: Vis en dialogboks + _dialog: + content: Innhold + action: Oppførsel når knappen er trykket inn + text: Tittel + note: Innfelt post + button: Knapp + textInput: Tekst-innput + if: Hvis + _canvas: + width: Bredde + height: Høyde + _switch: + name: Variabelnavn + default: Standardverdi + text: Tittel + _counter: + text: Tittel + name: Variabelnavn + _textInput: + name: Variabelnavn + text: Tittel + default: Standardverdi + _textareaInput: + default: Standardverdi + name: Variabelnavn + text: Tittel + _numberInput: + default: Standardverdi + name: Variabelnavn + text: Tittel + text: Tekst + counter: Teller + textareaInput: Flerlinjers tekstfelt + image: Bilder + switch: Bytt + numberInput: Numerisk innput + _if: + variable: Variabel + textarea: Tekstområde + _post: + text: Innhold + post: Post-skjema + created: Siden er opprettet + contents: Innhold + like: Lik + nameAlreadyExists: Den angitte URL-en er allerede i bruk + viewSource: Vis kilde + eyeCatchingImageSet: Sett miniatyrbilde + fontSansSerif: Grotesk + invalidNameTitle: Angitt URL er ugyldig + specialBlocks: Spesielle + chooseBlock: Legg til en blokk + url: URL til Side + invalidNameText: Tittelen på Siden kan ikke være tom + liked: Likte Sider + updated: Redigereringer lagret + editThisPage: Rediger denne Siden + my: Mine Sider + enterVariableName: Skriv inn et variabelnavn + newPage: Lag en ny Side + summary: Sammendrag + inputBlocks: Innput + readPage: Vis kilden til denne Siden + eyeCatchingImageRemove: Slett miniatyrbilde + variables: Variabler + inspector: Inspektør + unlike: Avlik + content: Side-blokk + font: Skriftsnitt + hideTitleWhenPinned: Skjul tittel når Siden er festet til profilen + selectType: Velg en type + alignCenter: Sentrer elementer + title: Tittel + pageSetting: Innstillinger for Side + variableNameIsAlreadyUsed: Variabelnavnet er allerede i bruk + deleted: Siden er slettet + editPage: Rediger denne Siden +_channel: + featured: Trendende + removeBanner: Fjern banner + setBanner: Sett banner + owned: Eid + create: Opprett kanal + nameOnly: Bare navn + notesCount: '{n} poster' + usersCount: '{n} deltakere' + nameAndDescription: Navn og beskrivelse + following: Fulgt + edit: Redigér kanal +_charts: + usersIncDec: Forskjell i antall brukere + apRequest: Forespørsler + storageUsageTotal: Total brukt lagringsplass + usersTotal: Totalt antall brukere + federation: Føderasjon + remoteNotesIncDec: Forskjell i antall eksterne poster + storageUsageIncDec: Forskjell i bruk av lagringsplass + notesIncDec: Forskjell i antall poster + notesTotal: Totalt antall poster + activeUsers: Aktive brukere + filesTotal: Totalt antall filer + localNotesIncDec: Forskjell i antall lokale poster + filesIncDec: Forskjell i antall filer +_deck: + swapLeft: Flytt kolonnen til venstre + configureColumn: Kolonneinnstillinger + stackLeft: Stable med kolonnen til venstre + columnAlign: Juster kolonner + swapUp: Flytt kolonnen oppover + swapRight: Flytt kolonnen til høyre + alwaysShowMainColumn: Vis alltid hovedkolonne + swapDown: Flytt kolonnen nedover + addColumn: Legg til kolonne + nameAlreadyExists: Navnet er allerede i bruk på et annet arbeidsområde. + introduction: Gjør brukergrensesnittet perfekt ved å sette kolonnene slik du vil + ha dem! + introduction2: Klikk pluss-tegnet til høyre på skjermen for å legge til nye kolonner + når du trenger dem. + profile: Arbeidsområde + newProfile: Nytt arbeidsområde + renameProfile: Gi arbeidsområdet nytt navn + deleteProfile: Slett arbeidsområde + _columns: + list: Liste + main: Standard + notifications: Varsler + widgets: Skjermelementer + mentions: Nevninger + channel: Kanal + direct: Direktemeldinger + antenna: Antenne + tl: Tidslinje + widgetsIntroduction: Trykk "Rediger skjermelementer" i kolonnemenyen og legg til + et element. + popRight: Flytt kolonnen ut av stabelen og til høyre +_serverDisconnectedBehavior: + reload: Automatisk omlasting + quiet: Vis ikkeforstyrrende advarsel + nothing: Ikke gjør noe + dialog: Vis advarselsdialog +cannotUploadBecauseNoFreeSpace: Opplasting feilet. Ikke nok plass på Disk. +customMOTD: Egendefinert dagens melding i oppstartsbildet. +_sfx: + channel: Kanal-varsler + chatBg: Chat (Bakgrunn) + antenna: Antenner + notification: Varsler + noteMy: Egen post + chat: Chat + note: Ny post +_sensitiveMediaDetection: + setSensitiveFlagAutomaticallyDescription: Resultatene av intern deteksjon vil bli + beholdt selv om innstillingen slås av. + analyzeVideosDescription: Analyserer videoer i tillegg til bilder. Dette vil øke + lasten på tjeneren litt. + sensitivity: Sensitivitiet i deteksjonen + analyzeVideos: Slå på videoanalyse + sensitivityDescription: Å redusere sensitiviteten vil føre til færre falske positive + (mistenkt NSFW som viser seg å ikke være det). Å øke den vil føre til færre falske + negative. + description: Reduserer arbeidet med moderering på tjeneren ved å automatisk gjenkjenne + NSFW-innhold med maskinlæring. Dette vil gi en litt økt last på tjeneren. + setSensitiveFlagAutomatically: Merk som NSFW +_profile: + name: Navn + username: Brukernavn + metadataContent: Innhold + metadataEdit: Rediger ekstra informasjon + metadata: Ekstra informasjon + metadataLabel: Etikett + description: Bio + metadataDescription: Her kan du legge inn ekstra felt med informasjon i profilen + din. + locationDescription: Om du oppgir stedet du bor først vil det vise din lokale tid + til andre brukere. + changeAvatar: Endre avatar + youCanIncludeHashtags: Du kan bruke emneknagger i bioen også. + changeBanner: Endre brukerfane +removeRecipient: Fjern mottaker +seperateRenoteQuote: Skill knappene for deling og sitering +_permissions: + "read:gallery": Se galleriet ditt + "read:pages": Se siden din + "write:channels": Redigere kanalene dine + "write:gallery-likes": Endre hvilke galleriposter du liker + "read:reactions": Vise reaksjonene dine + "read:user-groups": Se gruppene dine + "read:notifications": Vise varslene dine + "write:reactions": Endre reaksjonene dine + "write:pages": Redigere eller slette siden din + "write:mutes": Redigere listen over stummede brukere + "write:following": Følge eller avfølge andre kontoer + "read:messaging": Vise chat-ene dine + "write:account": Rediger kontoinformasjon + "read:favorites": Vis bokmerkene dine + "write:messaging": Sende eller slette meldinger i chat + "read:account": Se informasjon om kontoen din + "read:channels": Se kanalene dine + "write:drive": Redigere og slette filer og kataloger på Disk + "read:mutes": Vise listen over stummede brukere + "write:blocks": Rediger listen av blokkerte brukere + "read:page-likes": Se hvilke sider du liker + "write:notifications": Styre varslene dine + "read:following": Vise informasjon om hvem du følger + "write:votes": Stemme i en avstemning + "read:gallery-likes": Se listen over galleriposter du liker + "write:gallery": Redigere galleriet ditt + "read:blocks": Vis listen av brukere du blokkerer + "write:favorites": Redigere bokmerkene dine + "read:drive": Tilgang til dine filer og kataloger på Disk + "write:notes": Sende eller slette poster + "write:page-likes": Redigere hvilke sider du liker + "write:user-groups": Redigere eller slette gruppene dine +unlikeConfirm: Slutte å like? +_theme: + installed: '{name} er blitt installert' + keys: + fg: Tekst + infoBg: Informasjonsbakgrunn + mention: Nevn + listItemHoverBg: Bakgrunn for listeelementer (Svevende) + accentDarken: Uthevet (Mørkere) + focus: Fokus + navFg: Tekst i sidefelt + mentionMe: Nevning (Meg) + hashtag: Emneknagg + buttonBg: Bakgrunn i knapper + driveFolderBg: Bakgrunn i Disk-katalog + infoWarnBg: Advarselsbakgrunn + dateLabelFg: Tekst i dato-etikett + indicator: Indikator + header: Hode + bg: Bakgrunn + inputBorder: Ramme rundt input-felt + navBg: Bakgrunn i sidefelt + link: Lenke + infoFg: Informasjonstekst + navActive: Tekst i sidefelt (Aktivt) + scrollbarHandle: Håndtak i rullefelt + messageBg: Bakgrunn i chat + cwBg: Bakgrunn på innholdsadvarsel-knapp + renote: Del + fgHighlighted: Markert tekst + toastBg: Bakgrunn for varsler + buttonHoverBg: Bakgrunn i knapper (Svevende) + panel: Panel + toastFg: Tekst i varsler + accentLighten: Uthevet (Lysere) + scrollbarHandleHover: Håndtak i rullefelt (Svevende) + shadow: Skygge + cwFg: Tekst i innholdsadvarsel-knapp + cwHoverBg: Bakgrunn i innholdsadvarsel-knapp (Svevende) + navHoverFg: Tekst i sidefelt (Svevende) + accent: Uthev + navIndicator: Indikator i sidefelt + divider: Skille + badge: Merker + modalBg: Modal bakgrunn + infoWarnFg: Advarselstekst + darken: Gjør mørkere + refConst: Referer til en konstant + builtinThemes: Innebygde temaer + lighten: Gjør lysere + defaultValue: Standardverdi + basedProp: Referert egenskap + install: Installer et tema + base: Base + addConstant: Legg til konstant + argument: Argument + key: Nøkkel + inputConstantName: Gi konstanten et navn + constant: Konstant + color: Farge + explore: Utforsk temaer + refProp: Referer til en egenskap + invalid: Formatet til dette temaet er ugyldig + code: Tema-kode + installedThemes: Installerte temaer + make: Lag et tema + func: Funksjoner + description: Beskrivelse + alpha: Ugjennomsiktighet + importInfo: Om du legger en temakode her kan du importere den til tema-redigeringen + deleteConstantConfirm: Sikker på at du vil slette konstanten {const}? + funcKind: Funksjonstype + manage: Styr temaer + alreadyInstalled: Dette temaet er allerede installert +_emailUnavailable: + disposable: Engangs-epost-adresser er ikke tillatt + smtp: Epost-tjeneren svarer ikke + mx: Epost-tjeneren er ugyldig + format: Dette ser ikke ut som en gyldig epost-adresse + used: Denne epost-adressen er allerede brukt +_ago: + weeksAgo: '{n} uker siden' + minutesAgo: '{n}m siden' + daysAgo: '{n} dager siden' + secondsAgo: '{n}s siden' + hoursAgo: '{n} timer siden' + justNow: Nettopp + yearsAgo: '{n} år siden' + monthsAgo: '{n} mnd siden' + future: Fremtid +_exportOrImport: + blockingList: Blokkerte brukere + excludeInactiveUsers: Ekskluder inaktive brukere + muteList: Stummede brukere + followingList: Brukere du følger + userLists: Brukerlister + allNotes: Alle poster + excludeMutingUsers: Eksluder stummede brukere +_antennaSources: + homeTimeline: Poster fra brukere du følger + all: Alle poster + userList: Poster fra en spesifisert liste av brukere + userGroup: Poster fra brukere i en bestemt gruppe + users: Poster fra spesifikke brukere + instances: Poster fra alle brukerne på denne tjeneren +_widgets: + timeline: Tidslinje + instanceCloud: Tjenersky + onlineUsers: Påloggede brukere + clock: Klokke + userList: Brukerliste + rss: RSS-leser + serverMetric: Tjenermetrikker + button: Knapp + unixClock: Unix-klokke + calendar: Kalender + trends: Trender + serverInfo: Tjenerinformasjon + jobQueue: Jobbkø + _userList: + chooseList: Velg en liste + photos: Bilder + rssTicker: RSS-rulletekst + aiscript: AiScript-konsoll + memo: Notatlapp + notifications: Varsler + postForm: Ny post + digitalClock: Digital klokke + activity: Aktivitet + federation: Føderering + slideshow: Bildeviser +_wordMute: + muteWordsDescription: Skill med mellomrom for logisk "OG" og med linjeskift for + logisk "ELLER". + hardDescription: Hindrer poster som oppfyller vilkårene fra å bli lagt til i tidslinjen. + De vil heller ikke bli lagt i tidslinjen senere dersom vilkårene endres i ettertid. + mutedNotes: Stummede poster + softDescription: Skjul poster som oppfyller disse vilkårene fra tidlinjen. + soft: Svakt + muteWordsDescription2: Sett skråstreker rundt nøkkelord for å bruke regulære uttrykk. + hard: Hardt + muteWords: Stummede ord +showFeaturedNotesInTimeline: Vis framheved poster i tidslinjen +rateLimitExceeded: For mange forsøk på kort tid +_2fa: + securityKeyInfo: Utover fingeravtrykk og PIN-koder kan du sette opp autentisering + via fysiske sikkerhetsnøkler som støtter FIDO2 for å sikre kontoen ytterligere. + removeKey: Fjern sikkerhetsnøkkel + alreadyRegistered: Du har allerede registrert en enhet for tofaktor-autentisering. + token: 2FA-tegn + step3: Oppgi en engangskode for å fullføre oppsettet. + step1: Først, installer en app for engangskoder (slik som {a} eller {b}) på en enhet. + step3Title: Skriv inn en autentiseringskode + securityKeyName: Oppgi et nøkkelnavn + registerSecurityKey: Registrer en sikkerhetsnøkkel + step2: Deretter kan du scanne QR-koden som vises på skjermen. + registerTOTP: Registrer engangskode-app + removeKeyConfirm: Sikker på at du vil slette nøkkelen {name}? + chromePasskeyNotSupported: Passkeys i Chrome er foreløpig ikke støttet. + securityKeyNotSupported: Nettleseren din tillater ikke sikkerhetsnøkler. + step2Click: Når du klikker på QR-koden kan du registrere den som en tofaktor-pålogging + på en sikkerhetsnøkkel eller engangskode-app. + tapSecurityKey: Følg nettleseren for å registrere en sikkerhetsnøkkel eller passkey + step4: Fra nå av vil du alltid bli bedt om en engangskode når du logger inn. + step2Url: 'Du kan også skrive inn denne URL-en hvis du bruker et program på en PC + til tofaktor-pålogging:' +inputNotMatch: Input stemmer ikke +_ffVisibility: + public: Offentlig + private: Privat + followers: Synlig bare for følgere +_weekday: + wednesday: Onsdag + tuesday: Tirsdag + sunday: Søndag + saturday: Lørdag + monday: Mandag + friday: Fredag + thursday: Torsdag +poll: Avstemning +_instanceCharts: + users: Forskjell i antall brukere + usersTotal: Kumulativt antall brukere + cacheSize: Forskjell i mellomlagring + ffTotal: Kumulativt antall fulgte brukere / følgere + requests: Forespørsler + cacheSizeTotal: Kumulativ total mellomlagring + ff: 'Forskjell i antall fulgte brukere / følgere ' + filesTotal: Kumulativt antall filer + files: Forskjell i antall filer + notes: Forskjell i antall poster + notesTotal: Kumulativt antall poster +localOnly: Bare lokalt +navbar: Navigasjonsfelt +_visibility: + localOnly: Bare lokalt + followersDescription: Synlig bare for dine følgere og brukere nevnt i posten + specified: Direkte + home: Unotert + localOnlyDescription: Bare synlig for brukere på denne tjeneren + specifiedDescription: Synlig bare for spesifiserte brukere + public: Offentlig + homeDescription: Bare post til hjem-tidslinjen + followers: Følgere + publicDescription: Postene dine være bli synlige i alle offentlige tidslinjer +_poll: + at: Sett slutt-tidspunkt + votesCount: '{n} stemmer' + infinite: Aldri + expiration: Avslutt avstemning + totalVotes: '{n} stemmer totalt' + remainingDays: '{d} dager og {h} timer igjen' + deadlineTime: Tid + remainingHours: '{h} timer og {m} minutter igjen' + canMultipleVote: Tillat flervalg + closed: Avsluttet + showResult: Vis resultat + after: Slutt etter gitt tid + deadlineDate: Sluttdato + noOnlyOneChoice: Du må legge inn minst to valg + remainingMinutes: '{m} minutter og {s} sekunder igjen' + voted: Stemt + vote: Stem + remainingSeconds: '{s} sekunder igjen' + choiceN: Valg {n} + noMore: Du kan ikke legge til flere valg + duration: Varighet +move: Flytt +_filters: + notesAfter: Poster etter + followersOnly: Bare de som følger deg + fromDomain: Fra domene + withFile: Med fil + notesBefore: Poster før + fromUser: Fra bruker + followingOnly: Bare de du følger +_feeds: + copyFeed: Kopier nyhetsstrøm + atom: Atom + rss: RSS + jsonFeed: JSON-strøm +sendPushNotificationReadMessageCaption: Et varsel med teksten "{emptyPushNotificationMessage}" + vil snart bli vist. Dette kan øke batteribruken på enheten dersom den er batteridrevet. +customSplashIconsDescription: URL-er til egendefinerte ikoner til oppstartsskjermbildet. + En av dem vil bli lastet tilfeldig når en bruker laster inn siden. Pass på at bildene + er på statiske URL-er, fortrinnsvis i størrelsen 192x192 piksler. +instanceDefaultThemeDescription: Skriv inn temakode i objektformat. +deletePasskeys: Slett passkeys +_cw: + chars: '{count} tegn' + show: Vis innhold + files: '{count} fil(er)' + hide: Skjul +_timelines: + local: Lokal + home: Hjem + recommended: Foreslått + global: Global + social: Sosial +serviceworkerInfo: Må være påslått for push-varsler. +detectPostLanguage: Automatisk detekter språk og vis en oversettelsesknapp for poster + på andre språk +_auth: + copyAsk: 'Lim inn denne koden i applikasjonen:' + callback: Går tilbake til applikasjonen + shareAccess: Vil du gi "{name}" tilgang til denne kontoen? + denied: Tilgang avvist + permissionAsk: 'Denne applikasjonen ber om følgende tilganger:' + allPermissions: Full tilgang til kontoen + pleaseGoBack: Gå tilbake til applikasjonen + shareAccessAsk: Er du sikker på at du vil gi denne applikasjonen lov til å gå inn + på kontoen din? +youHaveUnreadAnnouncements: Du har uleste kunngjøringer +featured: Fremhevet +pushNotification: Push-varsler +delete2faConfirm: Dette vil slå av 2FA på denne kontoen, og kan ikke omgjøres. Fortsette? +indexableDescription: Tillat innebygget søk å vise dine offentlige poster +splash: Oppstartsskjerm +_menuDisplay: + sideIcon: Side (Ikoner) + hide: Skjul + sideFull: Side + top: Topp +enableIdenticonGeneration: Slå på generering av identikoner +_skinTones: + medium: Medium + dark: Mørk + yellow: Gul + mediumDark: Middels mørk + light: Lys + mediumLight: Middels lys +_instanceMute: + instanceMuteDescription2: Skill med linjeskift + instanceMuteDescription: Dette vil stumme alle poster og deling fra de opplistede + tjenerne, inkludert poster som svarer på en post fra en stummet tjener. + title: Skjuler poster fra opplistede tjenere. + heading: Liste av tjenere som skal stummes +_messaging: + groups: Grupper + dms: Privat +_time: + day: Dag(er) + hour: Time(r) + minute: Minutt(er) + second: Sekund(er) +addRe: Legg til "re:" i begynnelsen av en kommentar til en post med innholdsadvarsel +donationLink: Lenke til donasjons-side +createNewClip: Nytt utklipp +removeQuote: Fjern sitat +showUpdates: Vis et sprettoppvindu når Firefish oppdateres +renotesCount: Antall sendte delinger +type: Type +remoteOnly: Bare eksternt +clipsDesc: Utklipp er som kategoriserte bokmerker du kan dele med andre. Du kan lage + utklipp fra menyen til individuelle poster. +unclip: Fjern utklipp +quitFullView: Forlat full visning +exportZip: Eksporter zip-fil +desktop: Skrivebord +botProtection: Bot-beskyttelse +_signup: + almostThere: Nesten der + emailAddressInfo: Oppgi epost-adressen din. Den vil ikke bli synlig for andre. + emailSent: En bekreftelses-epost er sendt til epost-adressen ({email}). Klikk på + lenken i eposten for å fullføre registrering. +beta: Beta +renotedCount: Antall delinger av dine poster +unsubscribePushNotification: Slå av push-varsler +sample: Eksempel +cannotUploadBecauseExceedsFileSizeLimit: Filen kan ikke lastes opp fordi den er større + enn maks tillatt filstørrelse. +remindMeLater: Kanskje senere +adminCustomCssWarn: Denne innstillingen må bare brukes hvis du vet hva den gjør. Ugyldige + verdier kan få klienten til å feile for alle brukere. Bruk brukerinnstillingene + for å teste at CSS fungerer som den skal. +account: Konto +activeEmailValidationDescription: Slår på strengere sjekk av epost-adresser, inkludert + sjekking for engangs-adresser og om den faktisk kan kommuniseres med. Når innstillingen + er av vil det bare sjekkes at epost-adressen er syntaktisk riktig. +clips: Utklipp +verifiedLink: Verifisert lenke +secureModeInfo: Ved forespørsler fra andre tjenere, ikke send tilbake uten bevis. +isPatron: Firefish-patron +cannotUploadBecauseInappropriate: Filen ble ikke lastet opp fordi den er detektert + som mulig NSFW. +showAds: Vis samfunns-banner +enterSendsMessage: Trykk enter for å sende meldinger. (Hvis avslått må du trykke Ctrl + + enter) +confirmToUnclipAlreadyClippedNote: Denne posten er allerede en del av utklippet "{name}". + Vil du fjerne den fra dette utklippet i stedet? +showWithSparkles: Vis med gnister +importZip: Importer zip-fil +pushNotificationAlreadySubscribed: Push-varsler er allerede påslått +ratio: Forhold +pushNotificationNotSupported: Nettleseren eller tjeneren tillater ikke push-varsler +accountDeletionInProgress: Sletting av konto pågår +indexable: Indekserbar +shuffle: Stokket +sensitiveMediaDetection: Deteksjon av NSFW-media +delete2fa: Slå av tofaktorautentisering (2FA) +isLocked: Denne kontoen har følgende godkjenninger +languageForTranslation: Oversettelsesspråk for poster +customSplashIcons: URL-er til egendefinerte oppstartsskjerm-ikoner +_instanceTicker: + always: Alltid vis + none: Aldri vis + remote: Vis for eksterne brukere +confirm: Bekreft +origin: Kilde +label: Etikett +customMOTDDescription: Egendefinerte meldinger for dagens melding på oppstartsskjermbildet. + Linjeskift mellom meldinger. En tilfeldig melding vil bli vist hver gang en bruker + laster inn siden. +enableAutoSensitive: Automatisk markering av NSFW +neverShow: Ikke vis igjen +removeMember: Fjern medlem +clip: Utklipp +sendPushNotificationReadMessage: Slett push-varsler når den relevante informasjonen + er lest +enableAutoSensitiveDescription: Tillat automatisk deteksjon og markering av NSFW basert + på maskinlære der det er mulig. Selv om du slår av dette kan det være påslått for + hele tjeneren. +subscribePushNotification: Slå på push-varsler +failedToUpload: Opplasting feilet +speed: Fart +undeck: Forlat kolonnevisning +deck: Kolonner +_experiments: + title: Eksperimenter + enablePostImports: Slå på post-importer + postImportsCaption: Lar brukere importere poster fra kontoer på Firefish, Misskey, + Mastodon, Akkoma eller Pleroma. Den ekstra lasten kan forårsake tregere tjeneste. +_dialog: + charactersBelow: 'Ikke nok tagn! Skrevet: {current}/Grense: {min}' + charactersExceeded: 'Maks antall tegn er overskredet! Skrevet: {current}/Grense: + {max}' diff --git a/locales/pl-PL.yml b/locales/pl-PL.yml new file mode 100644 index 0000000..ec27ccb --- /dev/null +++ b/locales/pl-PL.yml @@ -0,0 +1,2031 @@ +_lang_: "Polski" +headlineFirefish: "Otwartoźródłowa, zdecentralizowana sieć społecznościowa, która + zawsze będzie darmowa! 🚀" +introFirefish: "Hej! Firefish to otwartoźródłowa oraz zdecentralizowana sieć społecznościowa, + która zawsze będzie darmowa! 🚀" +monthAndDay: "{month}-{day}" +search: "Szukaj" +notifications: "Powiadomienia" +username: "Nazwa użytkownika" +password: "Hasło" +forgotPassword: "Nie pamiętam hasła" +fetchingAsApObject: "Pobieranie z Fediwersum" +ok: "OK" +gotIt: "Rozumiem!" +cancel: "Anuluj" +enterUsername: "Wprowadź nazwę użytkownika" +renotedBy: "Podbito przez {user}" +noNotes: "Brak wpisów" +noNotifications: "Brak powiadomień" +instance: "Serwer" +settings: "Ustawienia" +basicSettings: "Podstawowe ustawienia" +otherSettings: "Pozostałe ustawienia" +openInWindow: "Otwórz w oknie" +profile: "Profil" +timeline: "Oś czasu" +noAccountDescription: "Ten użytkownik nie napisał jeszcze swojego opisu." +login: "Zaloguj się" +loggingIn: "Logowanie" +logout: "Wyloguj się" +signup: "Zarejestruj się" +uploading: "Wysyłanie..." +save: "Zapisz" +users: "Użytkownicy" +addUser: "Dodaj użytkownika" +favorite: "Dodaj do ulubionych" +favorites: "Zakładki" +unfavorite: "Usuń zakładkę" +favorited: "Dodano do zakładek." +alreadyFavorited: "Już jest w zakładkach." +cantFavorite: "Nie można dodać do zakładek." +pin: "Przypnij do profilu" +unpin: "Odepnij z profilu" +copyContent: "Skopiuj zawartość" +copyLink: "Skopiuj odnośnik" +delete: "Usuń" +deleteAndEdit: "Usuń i edytuj" +deleteAndEditConfirm: "Czy na pewno chcesz usunąć ten wpis i zedytować go? Utracisz + wszystkie reakcje, podbicia i odpowiedzi do tego wpisu." +addToList: "Dodaj do listy" +sendMessage: "Wyślij wiadomość" +copyUsername: "Kopiuj nazwę użytkownika" +searchUser: "Wyszukiwanie użytkowników" +reply: "Odpowiedz" +loadMore: "Załaduj więcej" +showMore: "Pokaż więcej" +showLess: "Zamknij" +youGotNewFollower: "Zaobserwował* Cię" +receiveFollowRequest: "Otrzymano prośbę o możliwość obserwacji" +followRequestAccepted: "Zaakceptowano prośbę o możliwość obserwacji" +mention: "Wspomnij" +mentions: "Wspomnienia" +directNotes: "Bezpośrednie wiadomości" +importAndExport: "Import i eksport danych" +import: "Importuj" +export: "Eksportuj" +files: "Pliki" +download: "Pobierz" +driveFileDeleteConfirm: "Czy chcesz usunąć plik \"{name}\"? Wszystkie wpisy zawierające + ten plik również zostaną usunięte." +unfollowConfirm: "Czy na pewno chcesz przestać obserwować {name}?" +exportRequested: "Zażądałeś eksportu. Może to zająć chwilę. Po zakończeniu eksportu + zostanie on dodany do Twojego dysku." +importRequested: "Zażądano importu. Może to zająć chwilę." +lists: "Listy" +noLists: "Nie masz żadnych list" +note: "Utwórz wpis" +notes: "Wpisy" +following: "Obserwowani" +followers: "Obserwujący" +followsYou: "Obserwuje Cię" +createList: "Utwórz listę" +manageLists: "Zarządzaj listami" +error: "Błąd" +somethingHappened: "Coś poszło nie tak" +retry: "Spróbuj ponownie" +pageLoadError: "Nie udało się załadować strony." +pageLoadErrorDescription: "Zwykle jest to spowodowane problemem z siecią lub cache + przeglądarki. Spróbuj wyczyścić cache i sprawdź jeszcze raz za chwilę." +serverIsDead: "Serwer nie odpowiada. Zaczekaj chwilę i spróbuj ponownie." +youShouldUpgradeClient: "Aby zobaczyć tą stronę, odśwież ją, by zaaktualizować klienta." +enterListName: "Wpisz nazwę listy" +privacy: "Prywatność" +makeFollowManuallyApprove: "Prośby o możliwość obserwacji wymagają zatwierdzenia" +defaultNoteVisibility: "Domyślna widoczność" +follow: "Obserwuj" +followRequest: "Poproś o możliwość obserwowania" +followRequests: "Prośby o możliwość obserwacji" +unfollow: "Przestań obserwować" +followRequestPending: "Oczekująca prośba o możliwość obserwacji" +enterEmoji: "Wprowadź emoji" +renote: "Podbij" +unrenote: "Cofnij podbicie" +renoted: "Podbito." +cantRenote: "Ten wpis nie może zostać podbity." +cantReRenote: "Podbicie nie może zostać podbite." +quote: "Cytuj" +pinnedNote: "Przypięty wpis" +pinned: "Przypnij do profilu" +you: "Ty" +clickToShow: "Kliknij, aby wyświetlić" +sensitive: "NSFW" +add: "Dodaj" +reaction: "Reakcja" +reactionSetting: "Reakcje do pokazania w wyborniku reakcji" +reactionSettingDescription2: "Przeciągnij aby zmienić kolejność, naciśnij aby usunąć, + naciśnij „+” aby dodać." +rememberNoteVisibility: "Zapamiętuj ustawienia widoczności wpisu" +attachCancel: "Usuń załącznik" +markAsSensitive: "Oznacz jako NSFW" +unmarkAsSensitive: "Cofnij NSFW" +enterFileName: "Wprowadź nazwę pliku" +mute: "Wycisz" +unmute: "Cofnij wyciszenie" +block: "Zablokuj" +unblock: "Odblokuj" +suspend: "Zawieś" +unsuspend: "Cofnij zawieszenie" +blockConfirm: "Czy na pewno chcesz zablokować to konto?" +unblockConfirm: "Czy na pewno chcesz odblokować to konto?" +suspendConfirm: "Czy na pewno chcesz zawiesić to konto?" +unsuspendConfirm: "Czy na pewno chcesz cofnąć zawieszenie tego konta?" +selectList: "Wybierz listę" +selectAntenna: "Wybierz antenę" +selectWidget: "Wybierz widżet" +editWidgets: "Edytuj widżety" +editWidgetsExit: "Gotowe" +customEmojis: "Niestandardowe emoji" +emoji: "Emoji" +emojis: "Emoji" +emojiName: "Nazwa emoji" +emojiUrl: "Adres URL emoji" +addEmoji: "Dodaj emoji" +settingGuide: "Proponowana konfiguracja" +cacheRemoteFiles: "Przechowuj zdalne pliki w pamięci podręcznej" +cacheRemoteFilesDescription: "Gdy ta opcja jest wyłączona, zdalne pliki są ładowane + bezpośrednio ze zdalnego serwera. Wyłączenie tej opcji zmniejszy użycie powierzchni + dyskowej, ale zwiększy transfer, ponieważ miniaturki nie będą generowane." +flagAsBot: "To konto jest botem" +flagAsBotDescription: "Ustaw tę opcję ten jeśli kanał kontrolowany jest przez jakiś + program. Po włączeniu, będzie działać jako flaga informująca innych programistów, + aby zapobiegać nieskończonej interakcji pomiędzy innymi botami i dostosowywać wewnętrzne + systemy Firefish, traktując konto jako bota." +flagAsCat: "Czy jesteś kotem? 😺" +flagAsCatDescription: "Dostaniesz kocie uszka, oraz będziesz mówić jak kot!" +flagShowTimelineReplies: "Pokazuj odpowiedzi na osi czasu" +autoAcceptFollowed: "Automatycznie przyjmuj prośby o możliwość obserwacji od użytkowników, + których obserwujesz" +addAccount: "Dodaj konto" +loginFailed: "Nie udało się zalogować" +showOnRemote: "Zobacz oryginalną treść" +general: "Ogólne" +wallpaper: "Tapeta" +setWallpaper: "Ustaw tapetę" +removeWallpaper: "Usuń tapetę" +searchWith: "Szukaj: {q}" +youHaveNoLists: "Nie masz żadnej listy" +followConfirm: "Czy na pewno chcesz zaobserwować {name}?" +proxyAccount: "Konto proxy" +host: "Host" +selectUser: "Wybierz użytkownika" +recipient: "Odbiorca(-y)" +annotation: "Komentarze" +federation: "Federacja" +instances: "Serwery" +registeredAt: "Zarejestrowano" +latestRequestSentAt: "Ostatnie żądanie wysłano o" +latestRequestReceivedAt: "Ostatnie żądanie otrzymano o" +latestStatus: "Najnowszy status" +storageUsage: "Użycie pamięci" +charts: "Wykresy" +perHour: "co godzinę" +perDay: "co dzień" +stopActivityDelivery: "Przestań przesyłać aktywności" +blockThisInstance: "Zablokuj ten serwer" +operations: "Działania" +software: "Oprogramowanie" +version: "Wersja" +metadata: "Metadane" +monitor: "Monitor" +jobQueue: "Kolejka zadań" +cpuAndMemory: "CPU i pamięć" +network: "Sieć" +disk: "Dysk" +instanceInfo: "Informacje o serwerze" +statistics: "Statystyki" +clearQueue: "Wyczyść kolejkę" +clearQueueConfirmTitle: "Czy na pewno chcesz wyczyścić kolejkę?" +clearQueueConfirmText: "Wszystkie niewysłane wpisy z kolejki nie zostaną wysłane. + Zwykle to nie jest konieczne." +clearCachedFiles: "Wyczyść pamięć podręczną" +clearCachedFilesConfirm: "Czy na pewno chcesz usunąć wszystkie zdalne pliki z pamięci + podręcznej?" +blockedInstances: "Zablokowane serwery" +blockedInstancesDescription: "Wypisz nazwy hostów serwerów, które chcesz zablokować. + Wymienione serwery nie będą mogły dłużej komunikować się z tym serwerem." +muteAndBlock: "Wyciszenia i blokady" +mutedUsers: "Wyciszeni użytkownicy" +blockedUsers: "Zablokowani użytkownicy" +noUsers: "Brak użytkowników" +editProfile: "Edytuj profil" +noteDeleteConfirm: "Czy na pewno chcesz usunąć ten wpis?" +pinLimitExceeded: "Nie możesz przypiąć więcej wpisów" +intro: "Zakończono instalację Firefish! Utwórz teraz konto administratora." +done: "Gotowe" +processing: "Przetwarzanie" +preview: "Podgląd" +default: "Domyślne" +defaultValueIs: "Domyślne: {value}" +noCustomEmojis: "Brak emoji" +noJobs: "Brak zadań" +federating: "Federowanie" +blocked: "Zablokowano" +suspended: "Zawieszono" +all: "Wszystkie" +subscribing: "Subskrybowanie" +publishing: "Publikowanie" +notResponding: "Nie odpowiada" +instanceFollowing: "Obserwowani na serwerze" +instanceFollowers: "Obserwujący na serwerze" +instanceUsers: "Użytkownicy tego serwera" +changePassword: "Zmień hasło" +security: "Bezpieczeństwo" +retypedNotMatch: "Wejście nie zgadza się." +currentPassword: "Obecne hasło" +newPassword: "Nowe hasło" +newPasswordRetype: "Powtórz nowe hasło" +attachFile: "Załącz pliki" +more: "Więcej!" +featured: "Wyróżnione" +usernameOrUserId: "Nazwa lub id użytkownika" +noSuchUser: "Nie znaleziono użytkownika" +lookup: "Zapytania" +announcements: "Ogłoszenia" +imageUrl: "Adres URL obrazka" +remove: "Usuń" +removed: "Pomyślnie usunięto" +removeAreYouSure: "Czy na pewno chcesz usunąć „{x}”?" +deleteAreYouSure: "Czy na pewno chcesz usunąć „{x}”?" +resetAreYouSure: "Czy na pewno chcesz zresetować?" +saved: "Zapisano" +messaging: "Wiadomości" +upload: "Wyślij" +keepOriginalUploading: "Zachowaj oryginalny obraz" +fromDrive: "Z dysku" +fromUrl: "Z adresu URL" +uploadFromUrl: "Wyślij z adresu URL" +uploadFromUrlDescription: "Adres URL pliku, który chcesz wysłać" +uploadFromUrlRequested: "Zażądano wysłania" +uploadFromUrlMayTakeTime: "Wysyłanie może chwilę potrwać." +explore: "Eksploruj" +messageRead: "Przeczytano" +noMoreHistory: "Nie ma dalszej historii" +startMessaging: "Rozpocznij czat" +nUsersRead: "przeczytano przez {n}" +agreeTo: "Wyrażam zgodę na {0}" +tos: "Regulamin" +start: "Rozpocznij" +home: "Strona główna" +remoteUserCaution: "Te informacje mogą nie być aktualne, ponieważ użytkownik pochodzi + ze zdalnej instancji." +activity: "Aktywność" +images: "Zdjęcia" +birthday: "Data urodzenia" +yearsOld: "{age} lat" +registeredDate: "Zarejestrowano" +location: "Lokalizacja" +theme: "Motywy" +themeForLightMode: "Motyw używany w trybie jasnym" +themeForDarkMode: "Motyw używany w trybie ciemnym" +light: "Jasny" +dark: "Ciemny" +lightThemes: "Jasny motyw" +darkThemes: "Ciemny motyw" +syncDeviceDarkMode: "Synchronizuj ciemny motyw z ustawieniami urządzenia" +drive: "Dysk" +fileName: "Nazwa pliku" +selectFile: "Wybierz plik" +selectFiles: "Wybierz pliki" +selectFolder: "Wybierz folder" +selectFolders: "Wybierz foldery" +renameFile: "Zmień nazwę pliku" +folderName: "Nazwa katalogu" +createFolder: "Utwórz katalog" +renameFolder: "Zmień nazwę katalogu" +deleteFolder: "Usuń ten katalog" +addFile: "Dodaj plik" +emptyDrive: "Dysk jest pusty" +emptyFolder: "Ten katalog jest pusty" +unableToDelete: "Nie można usunąć" +inputNewFileName: "Wprowadź nową nazwę pliku" +inputNewDescription: "Podaj nowy napis" +inputNewFolderName: "Wprowadź nową nazwę katalogu" +circularReferenceFolder: "Katalog docelowy jest podkatalogiem katalogu, który chcesz + przenieść." +hasChildFilesOrFolders: "Katalog nie może być usunięty ponieważ nie jest pusty." +copyUrl: "Skopiuj adres URL" +rename: "Zmień nazwę" +avatar: "Awatar" +banner: "Baner" +nsfw: "NSFW" +whenServerDisconnected: "Po utracie połączenia z serwerem" +disconnectedFromServer: "Utracono połączenie z serwerem" +reload: "Odśwież" +doNothing: "Ignoruj" +reloadConfirm: "Czy chcesz odświeżyć oś czasu?" +watch: "Śledź" +unwatch: "Przestań śledzić" +accept: "Akceptuj" +reject: "Odrzuć" +normal: "Normalny" +instanceName: "Nazwa serwera" +instanceDescription: "Opis serwera" +maintainerName: "Administrator" +maintainerEmail: "E-mail administratora" +tosUrl: "Adres URL regulaminu" +thisYear: "Rok" +thisMonth: "Miesiąc" +today: "Dziś" +dayX: "{day}" +monthX: "{month}" +yearX: "{year}" +pages: "Strony" +enableLocalTimeline: "Włącz lokalną oś czasu" +enableGlobalTimeline: "Włącz globalną oś czasu" +disablingTimelinesInfo: "Administratorzy i moderatorzy będą zawsze mieć dostęp do + wszystkich osi czasu, nawet gdy są one wyłączone." +registration: "Zarejestruj się" +enableRegistration: "Włącz rejestrację nowych użytkowników" +invite: "Zaproś" +driveCapacityPerLocalAccount: "Powierzchnia dyskowa na lokalnego użytkownika" +driveCapacityPerRemoteAccount: "Powierzchnia dyskowa na zdalnego użytkownika" +inMb: "W megabajtach" +iconUrl: "Adres URL ikony" +bannerUrl: "Adres URL banera" +backgroundImageUrl: "Adres URL tła" +basicInfo: "Podstawowe informacje" +pinnedUsers: "Przypięty użytkownik" +pinnedUsersDescription: "Wypisz po jednej nazwie użytkownika w wierszu. Podani użytkownicy + zostaną przypięci pod kartą „Eksploruj”." +pinnedPages: "Przypięte strony" +pinnedPagesDescription: "Wprowadź ścieżki stron, które chcesz przypiąć do górnej strony + tego serwera, oddzielając je znakami końca wiersza." +pinnedClipId: "ID przypiętego klipu" +pinnedNotes: "Przypięty wpis" +hcaptcha: "hCaptcha" +enableHcaptcha: "Włącz hCaptcha" +hcaptchaSiteKey: "Klucz strony" +hcaptchaSecretKey: "Tajny klucz" +recaptcha: "reCAPTCHA" +enableRecaptcha: "Włącz reCAPTCHA" +recaptchaSiteKey: "Klucz strony" +recaptchaSecretKey: "Tajny klucz" +avoidMultiCaptchaConfirm: "Używanie wielu Captchy może spowodować zakłócenia. Czy + chcesz wyłączyć inną Captchę? Możesz zostawić wiele jednocześnie, klikając Anuluj." +antennas: "Anteny" +manageAntennas: "Zarządzaj antenami" +name: "Nazwa" +antennaSource: "Źródło anteny" +antennaKeywords: "Słowa kluczowe do obserwacji" +antennaExcludeKeywords: "Wykluczone słowa kluczowe" +antennaKeywordsDescription: "Oddziel spacjami dla warunku AND, albo wymuś koniec linii + dla warunku OR." +notifyAntenna: "Powiadamiaj o nowych wpisach" +withFileAntenna: "Filtruj tylko wpisy z załączonym plikiem" +enableServiceworker: "Włącz powiadomienia push dla twojej przeglądarki" +antennaUsersDescription: "Wypisz po jednej nazwie użytkownika w linii" +caseSensitive: "Wielkość liter ma znaczenie" +withReplies: "Uwzględnij odpowiedzi" +connectedTo: "Następujące konta są połączone" +notesAndReplies: "Wpisy i odpowiedzi" +withFiles: "Media" +silence: "Wycisz" +silenceConfirm: "Czy na pewno chcesz wyciszyć tego użytkownika?" +unsilence: "Cofnij wyciszenie" +unsilenceConfirm: "Czy na pewno chcesz cofnąć wyciszenie tego użytkownika?" +popularUsers: "Popularni użytkownicy" +recentlyUpdatedUsers: "Ostatnio aktywni użytkownicy" +recentlyRegisteredUsers: "Ostatnio zarejestrowani użytkownicy" +recentlyDiscoveredUsers: "Ostatnio odkryci użytkownicy" +exploreUsersCount: "Jest {count} użytkowników" +exploreFediverse: "Eksploruj Fediwersum" +popularTags: "Tagi na czasie" +userList: "Listy" +about: "Informacje" +aboutFirefish: "O Firefish" +administrator: "Admin" +token: "Token" +twoStepAuthentication: "Uwierzytelnianie dwuskładnikowe" +moderator: "Moderator" +moderation: "Moderacja" +nUsersMentioned: "{n} wspomnianych użytkowników" +securityKey: "Klucz bezpieczeństwa" +securityKeyName: "Nazwa klucza" +registerSecurityKey: "Zarejestruj klucz bezpieczeństwa" +lastUsed: "Ostatnio używane" +unregister: "Cofnij rejestrację" +passwordLessLogin: "Skonfiguruj logowanie bez użycia hasła" +resetPassword: "Zresetuj hasło" +newPasswordIs: "Nowe hasło to „{password}”" +reduceUiAnimation: "Ogranicz animacje w UI" +share: "Udostępnij" +notFound: "Nie znaleziono" +notFoundDescription: "Nie ma strony odpowiadającej określonemu adresowi URL." +uploadFolder: "Domyślne położenie wysłanych" +cacheClear: "Wyczyść pamięć podręczną" +markAsReadAllNotifications: "Oznacz wszystkie powiadomienia jako przeczytane" +markAsReadAllUnreadNotes: "Oznacz wszystkie wpisy jako przeczytane" +markAsReadAllTalkMessages: "Oznacz wszystkie wiadomości jako przeczytane" +help: "Pomoc" +inputMessageHere: "Wprowadź wiadomość tutaj" +close: "Zamknij" +group: "Grupa" +groups: "Grupy" +createGroup: "Utwórz grupę" +ownedGroups: "Posiadane grupy" +joinedGroups: "Członkostwa w grupach" +invites: "Zaproś" +groupName: "Nazwa grupy" +members: "Członkowie" +transfer: "Transfer" +messagingWithUser: "Rozmowy z innym użytkownikiem" +messagingWithGroup: "Rozmowy wewnątrz grupy" +title: "Tytuł" +text: "Tekst" +enable: "Włącz" +next: "Dalej" +retype: "Wprowadź ponownie" +noteOf: "Wpisy {user}" +inviteToGroup: "Zaproś do grupy" +quoteAttached: "Zacytowano" +quoteQuestion: "Czy na pewno chcesz umieścić cytat?" +noMessagesYet: "Nie napisano jeszcze wiadomości" +newMessageExists: "Masz nową wiadomość" +onlyOneFileCanBeAttached: "Możesz załączyć tylko jeden plik do wiadomości" +signinRequired: "Proszę się zalogować" +invitations: "Zaproś" +invitationCode: "Kod zaproszenia" +checking: "Sprawdzam..." +available: "Dostępna" +unavailable: "Niedostępna" +usernameInvalidFormat: "Nazwa użytkownika może zawierać litery, cyfry i podkreślniki." +tooShort: "Zbyt krótka" +tooLong: "Zbyt długa" +weakPassword: "Słabe hasło" +normalPassword: "Dobre hasło" +veryStrongPassword: "Silne hasło" +passwordMatched: "Pasuje" +passwordNotMatched: "Hasła nie pasują do siebie" +signinWith: "Zaloguj się z {x}" +signinFailed: "Nie udało się zalogować. Wprowadzona nazwa użytkownika lub hasło są + nieprawidłowe." +tapSecurityKey: "Wybierz swój klucz bezpieczeństwa" +or: "Lub" +language: "Język" +uiLanguage: "Język wyświetlania UI" +groupInvited: "Zaproszony(-a) do grupy" +aboutX: "O {x}" +useOsNativeEmojis: "Używaj natywnych Emoji systemu" +disableDrawer: "Nie używaj menu w stylu szuflady" +youHaveNoGroups: "Nie masz żadnych grup" +joinOrCreateGroup: "Uzyskaj zaproszenie do dołączenia do grupy lub utwórz własną grupę." +noHistory: "Brak historii" +signinHistory: "Historia logowania" +disableAnimatedMfm: "Wyłącz MFM z animacją" +doing: "Przetwarzanie..." +category: "Kategoria" +tags: "Tagi" +docSource: "Źródło tego dokumentu" +createAccount: "Utwórz konto" +existingAccount: "Istniejące konto" +regenerate: "Wygeneruj ponownie" +fontSize: "Rozmiar czcionki" +noFollowRequests: "Nie masz żadnych oczekujących próśb o możliwość obserwacji" +openImageInNewTab: "Otwórz obraz w nowej karcie" +dashboard: "Kokpit" +local: "Lokalne" +remote: "Zdalny" +total: "Łącznie" +weekOverWeekChanges: "Cotygodniowo" +dayOverDayChanges: "Codziennie" +appearance: "Wygląd" +clientSettings: "Ustawienia klienta" +accountSettings: "Ustawienia konta" +promotion: "Promowane" +promote: "Promuj" +numberOfDays: "Liczba dni" +hideThisNote: "Ukryj ten wpis" +showFeaturedNotesInTimeline: "Pokazuj wyróżnione wpisy w osi czasu" +objectStorage: "Pamięć obiektowa" +useObjectStorage: "Używaj pamięci obiektowej" +objectStorageBaseUrl: "Podstawowy URL" +objectStorageBucket: "Bucket" +objectStorageBucketDesc: "Podaj nazwę „wiadra” używaną przez konfigurowaną usługę." +objectStoragePrefix: "Prefiks" +objectStoragePrefixDesc: "Pliki będą przechowywane w katalogu z tym prefiksem." +objectStorageEndpoint: "Punkt końcowy" +objectStorageEndpointDesc: "Pozostaw puste jeżeli używasz AWS S3, w innym wypadku + określ punkt końcowy jako '' lub ':' zgodnie z instrukcjami usługi, + której używasz." +objectStorageRegion: "Region" +objectStorageRegionDesc: "Określ region, np. 'xx-east-1'. Jeżeli usługa której używasz + nie zawiera rozróżnienia regionów, pozostaw to pustym lub wprowadź 'us-east-1'." +objectStorageUseSSL: "Użyj SSL" +objectStorageUseSSLDesc: "Wyłącz, jeżeli nie zamierzasz używać HTTPS dla połączenia + z API" +objectStorageUseProxy: "Połącz przez proxy" +objectStorageUseProxyDesc: "Wyłącz, jeżeli nie zamierzasz używać proxy dla połączenia + z pamięcią blokową" +serverLogs: "Dziennik zdarzeń" +deleteAll: "Usuń wszystkie" +showFixedPostForm: "Wyświetlaj formularz tworzenia wpisu w górnej części osi czasu" +newNoteRecived: "Masz nowy wpis" +sounds: "Dźwięk" +listen: "Słuchaj" +none: "Brak" +showInPage: "Pokaż na stronie" +popout: "Popout" +volume: "Głośność" +masterVolume: "Głośność główna" +details: "Szczegóły" +chooseEmoji: "Wybierz emoji" +unableToProcess: "Nie udało się dokończyć działania" +recentUsed: "Ostatnio używane" +install: "Zainstaluj" +uninstall: "Odinstaluj" +installedApps: "Autoryzowane aplikacje" +nothing: "Nie ma tu niczego" +installedDate: "Autoryzowano" +lastUsedDate: "Ostatnie użycie" +state: "Stan" +sort: "Sortuj" +ascendingOrder: "Rosnąco" +descendingOrder: "Malejąco" +scratchpad: "Brudnopis" +scratchpadDescription: "Brudnopis to środowisko dla eksperymentów z AiScript. Możesz + pisać, wykonywać i sprawdzać wyniki interakcji skryptu z Firefish." +output: "Wyjście" +script: "Skrypt" +disablePagesScript: "Wyłącz AiScript na Stronach" +updateRemoteUser: "Aktualizuj zdalne dane o użytkowniku" +deleteAllFiles: "Usuń wszystkie pliki" +deleteAllFilesConfirm: "Czy na pewno chcesz usunąć wszystkie pliki?" +removeAllFollowingDescription: "Wykonanie tego polecenia spowoduje usunięcie wszystkich + kont z {host}. Zrób to, jeśli serwer np. już nie istnieje." +userSuspended: "To konto zostało zawieszone." +userSilenced: "Ten użytkownik został wyciszony." +yourAccountSuspendedTitle: "To konto jest zawieszone" +yourAccountSuspendedDescription: "To konto zostało zawieszone z powodu złamania regulaminu + serwera lub innych podobnych. Skontaktuj się z administratorem, jeśli chciałbyś + poznać bardziej szczegółowy powód. Proszę nie zakładać nowego konta." +menu: "Menu" +divider: "Rozdzielacz" +addItem: "Dodaj element" +relays: "Przekaźniki" +addRelay: "Dodaj przekaźnik" +inboxUrl: "Adres URL skrzynki nadawczej" +addedRelays: "Dodane przekaźniki" +serviceworkerInfo: "Musi być włączone dla powiadomień push." +deletedNote: "Usunięty wpis" +invisibleNote: "Niewidzialny wpis" +enableInfiniteScroll: "Włącz nieskończone przewijanie" +visibility: "Widoczność" +poll: "Ankieta" +useCw: "Ukryj zawartość" +enablePlayer: "Otwórz odtwarzacz wideo" +disablePlayer: "Zamknij odtwarzacz wideo" +expandTweet: "Rozwiń tweet" +themeEditor: "Edytor motywu" +description: "Opis" +describeFile: "Dodaj opis" +enterFileDescription: "Wprowadź opis" +author: "Autor" +leaveConfirm: "Są niezapisane zmiany. Czy chcesz je odrzucić?" +manage: "Zarządzanie" +plugins: "Wtyczki" +deck: "Tablica" +useBlurEffectForModal: "Używaj efektu rozmycia w modalach" +useFullReactionPicker: "Używaj pełnowymiarowego wybornika reakcji" +width: "Szerokość" +height: "Wysokość" +large: "Duże" +medium: "Średnie" +small: "Małe" +generateAccessToken: "Generuj token dostępu" +permission: "Uprawnienia" +enableAll: "Włącz wszystko" +disableAll: "Wyłącz wszystko" +tokenRequested: "Przydziel dostęp do konta" +pluginTokenRequestedDescription: "Ta wtyczka będzie mogła korzystać z ustawionych + tu uprawnień." +notificationType: "Rodzaj powiadomień" +edit: "Edytuj" +emailServer: "Serwer poczty e-mail" +enableEmail: "Włącz dostarczanie wiadomości e-mail" +emailConfigInfo: "Wykorzystywany do potwierdzenia adresu e-mail w trakcie rejestracji, + lub gdy zapomnisz hasła" +email: "Adres e-mail" +emailAddress: "Adres e-mail" +smtpConfig: "Konfiguracja serwera SMTP" +smtpHost: "Host" +smtpPort: "Port" +smtpUser: "Nazwa użytkownika" +smtpPass: "Hasło" +emptyToDisableSmtpAuth: "Pozostaw adres e-mail i hasło puste, aby wyłączyć weryfikację + SMTP" +smtpSecureInfo: "Wyłącz, jeżeli używasz STARTTLS" +testEmail: "Przetestuj dostarczanie wiadomości e-mail" +wordMute: "Wyciszenie słów i języków" +instanceMute: "Wyciszenie serwera" +userSaysSomething: "{name} powiedział* coś" +makeActive: "Aktywuj" +display: "Wyświetlanie" +copy: "Kopiuj" +metrics: "Pomiary" +overview: "Przegląd" +logs: "Dzienniki" +delayed: "Opóźnione" +database: "Baza danych" +channel: "Kanały" +create: "Utwórz" +notificationSetting: "Ustawienia powiadomień" +notificationSettingDesc: "Wybierz rodzaj powiadomień do wyświetlania." +useGlobalSetting: "Użyj globalnych ustawień" +useGlobalSettingDesc: "Jeżeli włączone, zostaną wykorzystane ustawienia powiadomień + Twojego konta. Jeżeli wyłączone, mogą zostać wykonane oddzielne konfiguracje." +other: "Inne" +regenerateLoginToken: "Generuj token logowania ponownie" +regenerateLoginTokenDescription: "Regeneruje token używany wewnętrznie podczas logowania. + Zazwyczaj nie jest to konieczne. Po regeneracji wszystkie urządzenia zostaną wylogowane." +setMultipleBySeparatingWithSpace: "Możesz ustawić wiele, oddzielając je spacjami." +fileIdOrUrl: "ID pliku albo URL" +behavior: "Zachowanie" +sample: "Przykład" +abuseReports: "Zgłoszenia" +reportAbuse: "Zgłoś" +reportAbuseOf: "Zgłoś {name}" +fillAbuseReportDescription: "Wypełnij szczegóły zgłoszenia. Jeżeli dotyczy ono określonego + wpisu, uwzględnij jego adres URL." +abuseReported: "Twoje zgłoszenie zostało wysłane. Dziękujemy." +reporteeOrigin: "Pochodzenie osoby zgłoszonej" +reporterOrigin: "Pochodzenie osoby zgłaszającej" +forwardReport: "Przekaż zgłoszenie do zdalnego serwera" +send: "Wyślij" +abuseMarkAsResolved: "Oznacz zgłoszenie jako rozwiązane" +openInNewTab: "Otwórz w nowej karcie" +openInSideView: "Otwórz w bocznym widoku" +defaultNavigationBehaviour: "Domyślne zachowanie nawigacji" +editTheseSettingsMayBreakAccount: "Edycja tych ustawień może uszkodzić Twoje konto." +instanceTicker: "Informacje o wpisach serwera" +waitingFor: "Oczekiwanie na {x}" +random: "Losowe" +system: "System" +switchUi: "Layout" +desktop: "Pulpit" +clip: "Klip" +createNew: "Utwórz nowy" +optional: "Nieobowiązkowe" +createNewClip: "Utwórz nowy klip" +unclip: "Odczep" +confirmToUnclipAlreadyClippedNote: "Ten wpis jest już częścią klipu \"{name}\". Czy + chcesz ją usunąć z tego klipu?" +public: "Publiczny" +i18nInfo: "Firefish jest tłumaczone na wiele języków przez wolontariuszy. Możesz pomóc + na {link}." +manageAccessTokens: "Zarządzaj tokenami dostępu" +accountInfo: "Informacje o koncie" +notesCount: "Liczba wpisów" +repliesCount: "Liczba wysłanych odpowiedzi" +renotesCount: "Liczba wysłanych podbić" +repliedCount: "Liczba otrzymanych odpowiedzi" +renotedCount: "Liczba otrzymanych podbić" +followingCount: "Liczba obserwowanych kont" +followersCount: "Liczba obserwujących" +sentReactionsCount: "Liczba wysłanych reakcji" +receivedReactionsCount: "Liczba otrzymanych reakcji" +pollVotesCount: "Liczba wysłanych głosów w ankietach" +pollVotedCount: "Liczba otrzymanych głosów w ankietach" +yes: "Tak" +no: "Nie" +driveFilesCount: "Liczba plików na dysku" +driveUsage: "Użycie przestrzeni dyskowej" +noCrawle: "Odrzuć indeksowanie przez crawlery" +noCrawleDescription: "Proś wyszukiwarki internetowe, aby nie indeksowały Twoich treści." +lockedAccountInfo: "Dopóki nie ustawisz widoczności wpisu na \"Obserwujący\", twoje + wpisy będą mogli widzieć wszyscy, nawet jeśli ustawisz manualne zatwierdzanie obserwujących." +alwaysMarkSensitive: "Oznacz domyślnie jako NSFW" +loadRawImages: "Wyświetlaj zdjęcia w załącznikach w całości zamiast miniatur" +disableShowingAnimatedImages: "Nie odtwarzaj animowanych obrazów" +verificationEmailSent: "Wiadomość weryfikacyjna została wysłana. Odwiedź uwzględniony + odnośnik, aby ukończyć weryfikację." +notSet: "Nie ustawiono" +emailVerified: "Adres e-mail został potwierdzony" +noteFavoritesCount: "Liczba zakładek" +pageLikesCount: "Liczba otrzymanych polubień stron" +pageLikedCount: "Liczba polubionych stron" +contact: "Kontakt" +useSystemFont: "Używaj domyślnej czcionki systemu" +clips: "Klipy" +experimentalFeatures: "Eksperymentalne funkcje" +developer: "Programista" +makeExplorable: "Pokazuj konto na stronie „Eksploruj”" +makeExplorableDescription: "Jeżeli wyłączysz tę opcję, Twoje konto nie będzie wyświetlać + się w sekcji „Eksploruj”." +showGapBetweenNotesInTimeline: "Pokazuj odstęp między wpisami na osi czasu" +duplicate: "Duplikuj" +left: "Lewo" +center: "Wyśrodkuj" +wide: "Szerokie" +narrow: "Wąskie" +reloadToApplySetting: "To ustawienie zostanie zastosowane po odświeżeniu strony. Chcesz + odświeżyć?" +needReloadToApply: "To ustawienie zostanie zastosowane po odświeżeniu strony." +showTitlebar: "Pokazuj pasek tytułowy" +clearCache: "Wyczyść pamięć podręczną" +onlineUsersCount: "{n} osób jest online" +nUsers: "{n} użytkowników" +nNotes: "{n} wpisów" +sendErrorReports: "Wyślij raporty o błędach" +myTheme: "Mój motyw" +backgroundColor: "Tło" +accentColor: "Akcent" +textColor: "Tekst" +saveAs: "Zapisz jako…" +advanced: "Zaawansowane" +value: "Wartość" +createdAt: "Utworzono" +updatedAt: "Zaktualizowano" +saveConfirm: "Zapisać zmiany?" +deleteConfirm: "Na pewno usunąć?" +invalidValue: "Nieprawidłowa wartość." +registry: "Rejestr" +closeAccount: "Zamknij konto" +currentVersion: "Bieżąca wersja" +latestVersion: "Najnowsza wersja" +youAreRunningUpToDateClient: "Korzystasz z najnowszej wersji klienta." +newVersionOfClientAvailable: "Nowsza wersja klienta jest dostępna." +usageAmount: "Użycie" +capacity: "Pojemność" +inUse: "Użyto" +editCode: "Edytuj kod" +apply: "Zastosuj" +receiveAnnouncementFromInstance: "Otrzymuj powiadomienia e-mail z tego serwera" +emailNotification: "Powiadomienia e-mail" +publish: "Publikuj" +inChannelSearch: "Szukaj na kanale" +useReactionPickerForContextMenu: "Otwórz wybornik reakcji prawym kliknięciem" +typingUsers: "{users} pisze/ą" +jumpToSpecifiedDate: "Przejdź do określonej daty" +showingPastTimeline: "Obecnie wyświetla starą oś czasu" +clear: "Wyczyść" +markAllAsRead: "Oznacz wszystkie jako przeczytane" +goBack: "Wróć" +unlikeConfirm: "Na pewno chcesz usunąć polubienie?" +fullView: "Pełny widok" +quitFullView: "Opuść pełny widok" +addDescription: "Dodaj opis" +userPagePinTip: "Możesz wyświetlać wpisy w tym miejscu po wybraniu \"Przypnij do profilu\"\ + \ z menu pojedynczego wpisu." +notSpecifiedMentionWarning: "Ten wpis zawiera wzmianki o użytkownikach niezawartych + jako odbiorcy" +info: "Informacje" +userInfo: "Informacje o użykowniku" +unknown: "Nieznane" +onlineStatus: "Status online" +hideOnlineStatus: "Ukryj status online" +hideOnlineStatusDescription: "Ukrywanie statusu online ogranicza wygody niektórych + funkcji, takich jak wyszukiwanie." +online: "Online" +active: "Aktywny" +offline: "Offline" +notRecommended: "Nie zalecane" +botProtection: "Zabezpieczenie przed botami" +instanceBlocking: "Zarządzanie federacją" +selectAccount: "Wybierz konto" +switchAccount: "Przełącz konto" +enabled: "Właczono" +disabled: "Wyłączono" +quickAction: "Szybkie działania" +user: "Użytkownicy" +administration: "Zarządzanie" +accounts: "Konta" +switch: "Przełącz" +noMaintainerInformationWarning: "Informacje o administratorze nie są skonfigurowane." +noBotProtectionWarning: "Zabezpieczenie przed botami nie jest skonfigurowane." +configure: "Skonfiguruj" +postToGallery: "Opublikuj w galerii" +gallery: "Galeria" +recentPosts: "Ostatnie wpisy" +popularPosts: "Popularne wpisy" +shareWithNote: "Udostępnij z wpisem" +ads: "Banery" +expiration: "Ankieta kończy się" +memo: "Notatki" +priority: "Priorytet" +high: "Wysoki" +middle: "Średnie" +low: "Niski" +emailNotConfiguredWarning: "Nie podano adresu e-mail." +ratio: "Stosunek" +previewNoteText: "Pokaż podgląd" +customCss: "Własny CSS" +customCssWarn: "Używaj tego ustawienia tylko wtedy, gdy wiesz co ono robi. Nieprawidłowe + wpisy mogą spowodować, że klient przestanie działać poprawnie." +global: "Globalna" +squareAvatars: "Wyświetlaj kwadratowe awatary" +sent: "Wysłane" +received: "Otrzymane" +searchResult: "Wyniki wyszukiwania" +hashtags: "Hashtag" +troubleshooting: "Rozwiązywanie problemów" +useBlurEffect: "Użyj efektów rozmycia w UI" +learnMore: "Dowiedz się więcej" +misskeyUpdated: "Firefish zostało zaktualizowane!" +whatIsNew: "Pokaż zmiany" +translate: "Przetłumacz" +translatedFrom: "Przetłumaczone z {x}" +accountDeletionInProgress: "Trwa usuwanie konta" +usernameInfo: "Nazwa, która identyfikuje Twoje konto spośród innych na tym serwerze.\ + \ Możesz użyć alfabetu (a~z, A~Z), cyfr (0~9) lub podkreślników (_). Nazwy użytkownika + nie mogą być później zmieniane." +aiChanMode: "Ai-chan w klasycznym interfejsie" +keepCw: "Zostaw ostrzeżenia o zawartości" +pubSub: "Konta Pub/Sub" +resolved: "Rozwiązane" +unresolved: "Nierozwiązane" +breakFollow: "Usuń obserwującego" +itsOn: "Włączone" +itsOff: "Wyłączone" +unread: "Nieodczytane" +filter: "Filtr" +controlPanel: "Panel sterowania" +manageAccounts: "Zarządzaj kontami" +makeReactionsPublic: "Ustaw historię reakcji jako publiczną" +makeReactionsPublicDescription: "To spowoduje, że lista wszystkich Twoich dotychczasowych + reakcji będzie publicznie widoczna." +classic: "Wyśrodkowany" +muteThread: "Wycisz wątek" +unmuteThread: "Wyłącz wyciszenie wątku" +ffVisibility: "Widoczność obserwowanych/obserwujących" +ffVisibilityDescription: "Pozwala skonfigurować, kto może zobaczyć, kogo obserwujesz + i kto Cię obserwuje." +continueThread: "Kontynuuj wątek" +deleteAccountConfirm: "Spowoduje to nieodwracalne usunięcie tego konta. Kontynuować?" +incorrectPassword: "Nieprawidłowe hasło." +voteConfirm: "Potwierdzić swój głos na \"{choice}\"?" +hide: "Ukryj" +leaveGroup: "Opuść grupę" +leaveGroupConfirm: "Czy na pewno chcesz opuścić \"{name}\"?" +useDrawerReactionPickerForMobile: "Wyświetlaj wybornik reakcji jako szufladę na urządzeniach + mobilnych" +welcomeBackWithName: "Witaj z powrotem, {name}" +clickToFinishEmailVerification: "Kliknij [{ok}], aby zakończyć weryfikację e-mail." +overridedDeviceKind: "Typ urządzenia" +smartphone: "Smartfon" +tablet: "Tablet" +auto: "Automatycznie" +size: "Rozmiar" +numberOfColumn: "Liczba kolumn" +indefinitely: "Dożywotnio" +file: "Pliki" +logoutConfirm: "Czy na pewno chcesz się wylogować?" +lastActiveDate: "Ostatnio użyte w" +statusbar: "Pasek stanu" +pleaseSelect: "Wybierz opcję" +reverse: "Odwróć" +colored: "Kolorowe" +label: "Etykieta" +type: "Typ" +speed: "Prędkość" +localOnly: "Tylko lokalne" +failedToUpload: "Przesyłanie nie powiodło się" +cannotUploadBecauseInappropriate: "Nie można przesłać tego pliku, ponieważ jego części + zostały wykryte jako potencjalnie nieodpowiednie." +cannotUploadBecauseNoFreeSpace: "Przesyłanie nie powiodło się z powodu braku miejsca + na dysku." +beta: "Beta" +enableAutoSensitive: "Automatyczne oznaczanie NSFW" +enableAutoSensitiveDescription: "Umożliwia automatyczne wykrywanie i oznaczanie zawartości + NSFW za pomocą uczenia maszynowego tam, gdzie to możliwe. Nawet jeśli ta opcja jest + wyłączona, może być włączona na całym serwerze." +navbar: "Pasek nawigacyjny" +account: "Konta" +move: "Przenieś" +_sensitiveMediaDetection: + description: "Zmniejsza wysiłek związany z moderacją serwera dzięki automatycznemu + rozpoznawaniu zawartości NSFW za pomocą uczenia maszynowego. To nieznacznie zwiększy + obciążenie serwera." + setSensitiveFlagAutomatically: "Oznacz jako NSFW" + sensitivity: Czułość wykrywania + analyzeVideosDescription: Analizuje filmy, w dodatku do zdjęć. Zwiększy to nieznacznie + zużycie serwera. + sensitivityDescription: Zmniejszenie czułości doprowadzi do mniejszej liczby błędnych + wykryć (fałszywie pozytywnych), podczas gdy zwiększenie czułości doprowadzi do + mniejszej liczby brakujących wykryć (fałszywie negatywnych). + setSensitiveFlagAutomaticallyDescription: Wyniki wykrywania wewnętrznego zostaną + zachowane, nawet jeśli ta opcja jest wyłączona. + analyzeVideos: Włącz analizę filmów +_emailUnavailable: + used: "Ten adres e-mail jest już używany" + format: "Format tego adresu e-mail jest nieprawidłowy" + disposable: "Nie można używać jednorazowych adresów e-mail" + mx: "Ten serwer e-mail jest nieprawidłowy" + smtp: "Ten serwer e-mail nie odpowiada" +_ffVisibility: + public: "Publiczne" + followers: "Widoczne tylko dla obserwujących" + private: "Prywatne" +_signup: + almostThere: "Prawie na miejscu" + emailAddressInfo: "Podaj swój adres e-mail. Nie zostanie on upubliczniony." + emailSent: "E-mail z potwierdzeniem został wysłany na Twój adres e-mail ({email}). + Kliknij dołączony link, aby dokończyć tworzenie konta." +_accountDelete: + accountDelete: "Usuń konto" + mayTakeTime: "Ponieważ usuwanie konta jest procesem wymagającym dużej ilości zasobów, + jego ukończenie może zająć trochę czasu, w zależności od ilości utworzonej zawartości + i liczby przesłanych plików." + sendEmail: "Po zakończeniu usuwania konta na adres e-mail zarejestrowany na tym + koncie zostanie wysłana wiadomość e-mail." + requestAccountDelete: "Poproś o usunięcie konta" + started: "Usuwanie się rozpoczęło." + inProgress: "Usuwanie jest obecnie w toku" +_ad: + back: "Wróć" + reduceFrequencyOfThisAd: "Pokazuj tę reklamę rzadziej" +_forgotPassword: + enterEmail: "Wpisz adres e-mail użyty do rejestracji. Zostanie do niego wysłany + link, za pomocą którego możesz zresetować hasło." + ifNoEmail: "Jeśli nie użyłeś adresu e-mail podczas rejestracji, skontaktuj się z + administratorem serwera." + contactAdmin: "Ten serwer nie obsługuje adresów e-mail, zamiast tego skontaktuj + się z administratorem serwera, aby zresetować hasło." +_gallery: + my: "Moja galeria" + liked: "Polubione wpisy" + like: "Polub" + unlike: "Cofnij polubienie" +_email: + _follow: + title: "Zaobserwował* Cię" + _receiveFollowRequest: + title: "Otrzymano prośbę o możliwość obserwacji" +_plugin: + install: "Zainstaluj wtyczki" + installWarn: "Nie instaluj niezaufanych wtyczek." + manage: "Zarządzanie wtyczkami" +_preferencesBackups: + list: "Utworzone kopie zapasowe" + saveNew: "Zapisz nową kopię zapasową" + loadFile: "Załaduj z pliku" + apply: "Zastosuj do tego urządzenia" + save: "Zapisz zmiany" + inputName: "Proszę podać nazwę dla tej kopii zapasowej" + cannotSave: "Zapisanie nie powiodło się" + nameAlreadyExists: "Kopia zapasowa o nazwie \"{name}\" już istnieje. Proszę podać + inną nazwę." + applyConfirm: "Czy na pewno chcesz zastosować kopię zapasową \"{name}\" na tym urządzeniu? + Istniejące ustawienia tego urządzenia zostaną nadpisane." + saveConfirm: "Zapisać kopię zapasową jako {name}?" + deleteConfirm: "Usunąć kopię zapasową {name}?" + renameConfirm: "Zmienić nazwę kopii zapasowej z \"{old}\" na \"{new}\"?" + createdAt: "Utworzono w: {date} {time}" + updatedAt: "Zaktualizowano w: {date} {time}" + cannotLoad: "Ładowanie nie powiodło się" + invalidFile: "Nieprawidłowy format pliku" + noBackups: Nie znaleziono kopii zapasowych. Możesz utworzyć kopię zapasową twoich + ustawień klienta na tym serwerze poprzez użycie “Utwórz nową kopię zapasową”. +_registry: + scope: "Zakres" + key: "Klucz" + keys: "Klucz" + domain: "Domena" + createKey: "Utwórz klucz" +_aboutFirefish: + about: "Firefish jest forkiem Misskey utworzonym przez ThatOneCalculator, rozwijanym + od 2022." + contributors: "Główni twórcy" + allContributors: "Wszyscy twórcy" + source: "Kod źródłowy" + translation: "Tłumacz Firefish" + donate: "Przekaż darowiznę na Firefish" +_nsfw: + respect: "Ukrywaj media NSFW" + ignore: "Nie ukrywaj mediów NSFW" + force: "Ukrywaj wszystkie media" +_mfm: + cheatSheet: "Ściąga MFM" + intro: "MFM jest językiem składniowym używanym przez m.in. Firefish, forki *key + (w tym Firefish), oraz Akkomę, który może być użyty w wielu miejscach. Tu znajdziesz + listę wszystkich możliwych elementów składni MFM." + dummy: "Firefish rozszerza świat Fediwersum" + mention: "Wspomnij" + mentionDescription: "Używając znaku @ i nazwy użytkownika, możesz określić danego + użytkownika." + hashtag: "Hashtag" + hashtagDescription: "Używając kratki i tekstu, możesz określić hashtag." + url: "Adres URL" + urlDescription: "Adresy URL mogą być wyświetlane." + link: "Odnośnik" + linkDescription: "Określone części tekstu mogą być wyświetlane jako adres URL." + bold: "Pogrubienie" + boldDescription: "Wyróżnia litery pogrubiając je." + small: "Małe" + smallDescription: "Wyświetla treść jako małą i cienką." + center: "Wyśrodkowanie" + centerDescription: "Wyśrodkowuje zawartość." + inlineCode: "Kod (w wierszu)" + blockCode: "Kod (blok)" + blockCodeDescription: "Wyświetla kod z podświetlaną składnią składający się z wielu + linii." + blockMath: "Matematyka (Blok)" + quote: "Cytuj" + quoteDescription: "Wyświetla treść jako cytat." + emoji: "Niestandardowe emoji" + emojiDescription: "Otaczając nazwę niestandardowego emoji dwukropkami, możesz użyć + niestandardowego emoji." + search: "Szukaj" + searchDescription: "Wyświetla pole wyszukiwania z wcześniej wpisanym tekstem." + flip: "Odwróć" + flipDescription: "Przerzuca treść poziomo lub pionowo." + jelly: "Animacja (Galaretka)" + jellyDescription: "Nadaje treści galaretowatą animację." + tada: "Animacja (Tada)" + tadaDescription: "Nadaje treści animację podobną do \"Tada!\"." + jump: "Animacja (Skok)" + jumpDescription: "Nadaje treści animację skakania." + bounce: "Animacja (Odbijanie)" + bounceDescription: "Nadaje treści animację odbijania się." + shake: "Animacja (Wstrząsanie)" + shakeDescription: "Nadaje treści animację wstrząsania." + twitch: "Animacja (Drganie)" + twitchDescription: "Nadaje treści mocno drgającą animację." + spin: "Animacja (Obrót)" + spinDescription: "Nadaje treści animację obracania." + x2: "Duże" + x2Description: "Czyni treść większą." + x3: "Bardzo duże" + x3Description: "Czyni treść jeszcze większą." + x4: "Ogromne" + x4Description: "Czyni treść nawet większą niż jeszcze większa." + blur: "Rozmycie" + blurDescription: "Rozmywa treść. Zostanie wyraźnie wyświetlona po najechaniu." + font: "Czcionka" + fontDescription: "Wybiera czcionkę do wyświetlania treści." + rainbow: "Tęcza" + rainbowDescription: "Sprawia, że zawartość pojawia się w kolorach tęczy." + sparkle: "Blask" + sparkleDescription: "Nadaje zawartości efekt lśniącego brokatu." + rotate: "Obrót" + rotateDescription: "Obraca zawartość o określony kąt." + plain: "Zwyczajny" + plainDescription: "Wyłącza efekty wszystkich MFM zawartych w tym efekcie MFM." + inlineCodeDescription: Wyświetla podświetlanie składni dla kodu (programu) w linii. + inlineMath: Matematyka (Inline) + inlineMathDescription: Pokaż formuły matematyczne (KaTeX) w linii + blockMathDescription: Pokaż wieloliniowe formuły matematyczne (KaTeX) w bloku + background: Kolor tła + backgroundDescription: Zmień kolor tła tekstu. + foregroundDescription: Zmień kolor pierwszoplanowy tekstu. + positionDescription: Przesuń zawartość o określoną wartość. + position: Pozycjonuj + foreground: Kolor pierwszoplanowy + scaleDescription: Skaluj treść o określoną wielkość. + scale: Skaluj +_instanceTicker: + none: "Nigdy nie pokazuj" + remote: "Pokaż dla zdalnych użytkowników" + always: "Zawsze pokazuj" +_serverDisconnectedBehavior: + reload: "Automatycznie odśwież" + dialog: "Pokazuj okno ostrzeżenia" + quiet: "Pokazuj nieirytujące ostrzeżenia" + nothing: Nic nie rób +_channel: + create: "Utwórz kanał" + edit: "Edytuj kanał" + setBanner: "Ustaw baner" + removeBanner: "Usuń baner" + featured: "Na czasie" + owned: "Własny" + following: "Śledzeni" + usersCount: "{n} uczestnicy" + notesCount: "{n} wpisy" + nameAndDescription: Nazwa i opis + nameOnly: Tylko nazwa +_menuDisplay: + top: "Góra" + hide: "Ukryj" + sideFull: Z boku + sideIcon: Z boku (tylko ikony) +_wordMute: + muteWords: "Słowo do wyciszenia" + muteWordsDescription2: "Otocz słowa kluczowe ukośnikami, aby używać wyrażeń regularnych." + soft: "Łagodny" + hard: "Twardy" + mutedNotes: "Wyciszone wpisy" + muteWordsDescription: Rozdzielaj spacją dla kondycji AND, lub przerwaniem wiersza + dla kondycji OR. + softDescription: Ukryj z osi czasu wpisy, które spełniają podane warunki. + hardDescription: Zapobiega dodawania do osi czasu wpisów, które spełniają podane + warunki. Dodatkowo, te wpisy nie zostaną dodane do osi czasu, jeśli warunki się + zmienią. +_instanceMute: + title: "Ukrywa wpisy z wymienionych instancji." + heading: "Lista instancji do wyciszenia" + instanceMuteDescription2: Oddzielaj nowymi liniami + instanceMuteDescription: Spowoduje to wyciszenie wszystkich wpisów/podbić z podanych + instancji, w tym tych od użytkowników odpowiadających na wpisy z wyciszonych instancji. +_theme: + explore: "Przeglądaj motywy" + install: "Zainstaluj motyw" + manage: "Zarządzanie motywami" + code: "Kod motywu" + description: "Opis" + installed: "Zainstalowano {name}" + installedThemes: "Zainstalowane motywy" + builtinThemes: "Wbudowane motywy" + alreadyInstalled: "Motyw jest już zainstalowany" + invalid: "Format motywu jest nieprawidłowy" + make: "Utwórz motyw" + base: "Podstawowy" + addConstant: "Dodaj stałą" + constant: "Stała" + defaultValue: "Domyślna wartość" + color: "Kolor" + refProp: "Nawiąż do właściwości" + refConst: "Nawiąż do stałej" + key: "Klucz" + func: "Funkcje" + funcKind: "Rodzaj funkcji" + argument: "Argument" + basedProp: "Nawiązana właściwość" + alpha: "Przezroczystość" + darken: "Ściemnij" + lighten: "Rozjaśnij" + inputConstantName: "Wprowadź nazwę stałej" + importInfo: "Jeżeli wprowadzisz tu kod motywu, możesz zaimportować go w edytorze + motywu" + deleteConstantConfirm: "Czy na pewno chcesz usunąć stałą {const}?" + keys: + accent: "Akcent" + bg: "Tło" + fg: "Tekst" + focus: "Skupienie" + indicator: "Wskaźnik" + panel: "Panel" + shadow: "Cień" + header: "Nagłówek" + navBg: "Tło paska bocznego" + navFg: "Tekst paska bocznego" + navHoverFg: "Tekst paska bocznego (zbliżenie)" + navActive: "Tekst paska bocznego (aktywny)" + navIndicator: "Wskaźnik paska bocznego" + link: "Odnośnik" + hashtag: "Hashtag" + mention: "Wspomnij" + mentionMe: "Wspomnienia (ja)" + renote: "Podbij" + modalBg: "Tło modalu" + divider: "Rozdzielacz" + scrollbarHandle: "Uchwyt paska przewijania" + scrollbarHandleHover: "Uchwyt paska przewijania (po najechaniu)" + dateLabelFg: "Tekst z datą" + infoBg: "Tło informacji" + infoFg: "Tekst informacji" + infoWarnBg: "Tło ostrzeżenia" + infoWarnFg: "Tekst ostrzeżenia" + cwBg: "Tło CW" + cwFg: "Tekst CW" + cwHoverBg: "Tło CW (po najechaniu)" + toastBg: "Tło powiadomień" + toastFg: "Tekst powiadomień" + buttonBg: "Tło przycisku" + buttonHoverBg: "Tło przycisku (po najechaniu)" + inputBorder: "Obramowanie pola wejścia" + listItemHoverBg: "Tło elementu listy (po najechaniu)" + driveFolderBg: "Tło folderu na dysku" + wallpaperOverlay: "Nakładka tapety" + badge: "Odznaka" + messageBg: "Tło czatu" + accentDarken: "Akcent (ciemniejszy)" + accentLighten: "Akcent (jaśniejszy)" + fgHighlighted: "Wyróżniony tekst" +_sfx: + note: "Wpisy" + noteMy: "Mój wpis" + notification: "Powiadomienia" + chat: "Wiadomości" + chatBg: "Rozmowy (tło)" + antenna: "Anteny" + channel: "Powiadomienia kanału" +_ago: + future: "W przyszłości" + justNow: "Przed chwilą" + secondsAgo: "{n} sek. temu" + minutesAgo: "{n} min. temu" + hoursAgo: "{n} godz. temu" + daysAgo: "{n} dni temu" + weeksAgo: "{n} tyg. temu" + monthsAgo: "{n} mies. temu" + yearsAgo: "{n} lat temu" +_time: + second: "sekunda" + minute: "minuta" + hour: "godz." + day: "dzień" +_tutorial: + title: "Jak korzystać z Firefish" + step1_1: "Witamy!" + step1_2: "Pozwól, że Cię skonfigurujemy. Będziesz działać w mgnieniu oka!" + step2_1: "Najpierw, proszę wypełnij swój profil." + step2_2: "Podanie kilku informacji o tym, kim jesteś, ułatwi innym stwierdzenie, + czy chcą zobaczyć Twoje wpisy lub śledzić Cię." + step3_1: "Pora znaleźć osoby do śledzenia!" + step3_2: "Twoje domowe i społeczne linie czasu opierają się na tym, kogo śledzisz, + więc spróbuj śledzić kilka kont, aby zacząć.\nKliknij kółko z plusem w prawym + górnym rogu profilu, aby go śledzić." + step4_1: "Pozwól, że zabierzemy Cię tam." + step4_2: "W pierwszym wpisie możesz się przedstawić lub wysłać powitanie - \"Witaj, + świecie!\"" + step5_1: "Osie czasu, wszędzie widzę osie czasu!" + step5_2: "Twoja instancja ma włączone {timelines} różne osie czasu." + step5_3: "Główna {icon} oś czasu to miejsce, w którym możesz zobaczyć posty od użytkowników + których obserwujesz, oraz innych użytkowników z tej instancji. Jeśli wolisz, by + główna oś czasu pokazywała tylko posty od użytkowników których obserwujesz, możesz + łatwo to zmienić w ustawieniach!" + step5_4: "Lokalna {icon} oś czasu to miejsce, w którym możesz zobaczyć posty od + wszystkich innych osób na tej instancji." + step5_5: "Społeczna {icon} oś czasu to miejsce, gdzie możesz zobaczyć posty z instancji, + które admini polecają." + step5_6: "Polecana {icon} oś czasu to miejsce, gdzie możesz zobaczyć posty z instancji, + które admini polecają." + step5_7: "Globalna {icon} oś czasu to miejsce, gdzie możesz zobaczyć posty z każdej + innej połączonej instancji." + step6_1: "Więc, czym to jest to miejsce?" + step6_2: "Cóż, nie dołączył*ś po prostu do Firefish. Dołączył*ś do portalu do Fediverse, + sieci tysięcy połączonych ze sobą serwerów, zwanych instancjami." + step6_3: "Każdy serwer działa w inny sposób, i nie wszystkie serwery używają Firefish. + Ten jednak używa! Jest to trochę skomplikowane, ale w krótkim czasie załapiesz + o co chodzi." + step6_4: "A teraz idź, odkrywaj i baw się dobrze!" +_2fa: + alreadyRegistered: "Zarejestrowałeś już urządzenie do uwierzytelniania dwuskładnikowego." + registerTOTP: "Zarejestruj nowe urządzenie" + registerSecurityKey: "Zarejestruj klucz bezpieczeństwa" + step1: "Najpierw, zainstaluj aplikację uwierzytelniającą (taką jak {a} lub {b}) + na swoim urządzeniu." + step2: "Następnie, zeskanuje kod QR z ekranu." + step3: "Wprowadź token podany w aplikacji, aby ukończyć konfigurację." + step4: "Od teraz, przy każdej próbie logowania otrzymasz prośbę o token logowania." + step2Url: 'Możesz też wpisać ten URL jeśli używasz programu komputerowego:' + securityKeyInfo: Oprócz uwierzytelnienia odciskiem palców lub PIN, możesz również + skonfigurować uwierzytelnienie za pomocą kluczy sprzętowych obsługujących FIDO2, + w celu dalszego zabezpieczenia Twojego konta. +_permissions: + "read:account": "Wyświetlanie informacji o twoim koncie" + "write:account": "Edycja informacji o twoim koncie" + "read:blocks": "Wyświetlanie listy zablokowanych użytkowników" + "write:blocks": "Blokowanie i odblokowywanie użytkowników" + "read:drive": "Wyświetlanie plików i folderów z twojego Dysku" + "write:drive": "Edycja i usuwanie plików i katalogów z Twojego dysku" + "read:favorites": "Wyświetlanie Twoich zakładek" + "write:favorites": "Edycja Twoich zakładek" + "read:following": "Wyświetlanie informacji o obserwowanych" + "write:following": "Obserwowanie lub cofanie obserwacji innych kont" + "read:messaging": "Wyświetlanie twoich czatów" + "read:mutes": "Wyświetlanie listy wyciszonych osób" + "write:mutes": "Edycja listy wyciszonych osób" + "read:notifications": "Wyświetlanie powiadomień" + "write:notifications": "Działanie na powiadomieniach" + "read:reactions": "Wyświetlanie reakcji" + "write:reactions": "Edycja reakcji" + "write:votes": "Głosowanie w ankiecie" + "read:pages": "Wyświetlanie Twoich stron" + "write:pages": "Edycja i usuwanie Twoich stron" + "read:page-likes": "Wyświetlanie polubień na stronach" + "write:page-likes": "Edycja polubień na stronach" + "read:user-groups": "Wyświetlanie grup użytkownika" + "write:user-groups": "Edycja i usuwanie grup użytkownika" + "read:channels": "Wyświetlenie Twoich kanałów" + "write:channels": "Edycja Twoich kanałów" + "read:gallery": "Wyświetlenie Twojej galerii" + "write:gallery": "Edycja Twojej galerii" + "write:messaging": Tworzenie i usuwanie wiadomości czatu + "write:notes": Tworzenie i usuwanie wpisów + "read:gallery-likes": Wyświetlenie Twojej listy z polubionymi postami galerii + "write:gallery-likes": Edycja Twojej listy z polubionymi postami galerii +_auth: + shareAccess: "Czy chcesz autoryzować „{name}” do dostępu do tego konta?" + permissionAsk: "Ta aplikacja wymaga następujących uprawnień:" + denied: Odmowa dostępu + copyAsk: Proszę wpisz następujący kod autoryzacyjny w aplikacji + shareAccessAsk: Czy na pewno chcesz upoważnić tą aplikację do dostępu do Twojego + konta? + pleaseGoBack: Wróć do aplikacji + callback: Wracam do aplikacji +_weekday: + sunday: "Niedziela" + monday: "Poniedziałek" + tuesday: "Wtorek" + wednesday: "Środa" + thursday: "Czwartek" + friday: "Piątek" + saturday: "Sobota" +_widgets: + memo: "Przypięte notatki" + notifications: "Powiadomienia" + timeline: "Oś czasu" + calendar: "Kalendarz" + trends: "Na czasie" + clock: "Zegar" + rss: "Czytnik RSS" + activity: "Aktywność" + photos: "Zdjęcia" + digitalClock: "Zegar cyfrowy" + unixClock: "Zegar UNIX" + federation: "Federacja" + instanceCloud: "Chmura instancji" + postForm: "Formularz tworzenia wpisu" + slideshow: "Pokaz slajdów" + button: "Przycisk" + onlineUsers: "Użytkownicy online" + jobQueue: "Kolejka zadań" + serverMetric: "Metryka serwera" + aiscript: "Konsola AiScript" + aichan: "Ai" + rssTicker: Ticker RSS + userList: Lista użytkowników + _userList: + chooseList: Wybierz listę +_cw: + hide: "Ukryj" + show: "Załaduj więcej" + chars: "{count} znak(-i/-ów)" + files: "{count} plik(-i/-ów)" +_poll: + noOnlyOneChoice: "Wymagane są przynajmniej dwie opcje" + choiceN: "Opcja {n}" + noMore: "Nie możesz dodać więcej opcji" + canMultipleVote: "Pozwól na wiele odpowiedzi" + expiration: "Ankieta kończy się" + infinite: "Nigdy" + at: "Zakończ o…" + after: "Zakończ po…" + deadlineDate: "Data zakończenia" + deadlineTime: "godz." + duration: "Czas trwania" + votesCount: "{n} głosów" + totalVotes: "Łącznie {n} głosów" + vote: "Głosowanie w ankiecie" + showResult: "Pokaż wyniki" + voted: "Zagłosowano" + closed: "Zakończono" + remainingDays: "Pozostało {d} dni i {h} godzin" + remainingHours: "Pozostali {h} godzin i {m} minut" + remainingMinutes: "Pozostało {m} minut i {s} sekund" + remainingSeconds: "Pozostało {s} sekund" +_visibility: + public: "Publiczny" + publicDescription: "Wpis pojawi się u wszystkich" + home: "Niewidoczny" + followers: "Obserwujący" + specified: "Bezpośredni" + specifiedDescription: "Napisz tylko określonym użytkownikom" + homeDescription: Wpis będzie publiczny ale nie pojawi się na osi czasu instancji + followersDescription: Wpis pojawi się tylko na osiach czasu Twoich obserwujących + localOnly: Lokalnie + localOnlyDescription: Wpis będzie widoczny tylko dla użytkowników tej instancji +_postForm: + _placeholders: + a: "Co się dzieje?" + b: "Co się wydarzyło?" + c: "Co Ci chodzi po głowie?" + d: "Czy masz coś do powiedzenia?" + e: "Zacznij coś pisać…" + f: "Czekamy, aż coś napiszesz." + quotePlaceholder: Cytuj ten wpis... + channelPlaceholder: Wyślij na kanał... + replyPlaceholder: Odpowiedz na ten wpis... +_profile: + name: "Nazwa" + username: "Nazwa użytkownika" + description: "Opis" + youCanIncludeHashtags: "Możesz umieścić hashtagi w swoim opisie." + metadata: "Dodatkowe informacje" + metadataEdit: "Edytuj dodatkowe informacje" + metadataDescription: "Możesz wyświetlać do czterech sekcji dodatkowych informacji + na swoim profilu. Możesz dodać tag {a} lub tag {l} z {rel}, aby zweryfikować link + w swoim profilu!" + metadataLabel: "Etykieta" + metadataContent: "Treść" + changeAvatar: "Zmień awatar" + changeBanner: "Zmień baner" + locationDescription: Jeśli wpiszesz z początku swoje miasto, twój czas lokalny będzie + się pokazywać innym użytkownikom. +_exportOrImport: + allNotes: "Wszystkie wpisy" + followingList: "Obserwowani" + muteList: "Wycisz" + blockingList: "Zablokuj" + userLists: "Listy" + excludeMutingUsers: Wyklucz wyciszonych użytkowników + excludeInactiveUsers: Wyklucz nieaktywnych użytkowników +_charts: + federation: "Federacja" + apRequest: "Żądania" + usersTotal: "Łącznie # użytkowników" + activeUsers: "Aktywni użytkownicy" + storageUsageTotal: Łączne użycie dysku + filesIncDec: Różnica w liczbie plików + filesTotal: Łączna liczba plików + storageUsageIncDec: Różnica w wykorzystaniu miejsca + localNotesIncDec: Różnica w liczbie lokalnych wpisów + remoteNotesIncDec: Różnica w liczbie zdalnych wpisów + notesTotal: Łączna liczba wpisów + usersIncDec: Różnica w liczbie użytkowników + notesIncDec: Różnica w liczbie wpisów +_instanceCharts: + requests: "Żądania" + notesTotal: "Łącznie # wpisów" + ff: "Różnica w # obserwujących " + ffTotal: "Łączna liczba # obserwujących" + cacheSize: "Różnica w rozmiarze pamięci podręcznej" + cacheSizeTotal: "Łączny rozmiar pamięci podręcznej" + files: "Różnica # plików" + filesTotal: "Łącznie # plików" + usersTotal: Łączna liczba użytkowników + users: Różnica w liczbie użytkowników + notes: Różnica w liczbie wpisów +_timelines: + home: "Strona główna" + local: "Lokalne" + social: "Społeczna" + global: "Globalna" + recommended: Polecana +_pages: + newPage: "Utwórz stronę" + editPage: "Edytuj tę stronę" + readPage: "Aktywowano widok źródła" + created: "Pomyślnie utworzono stronę" + updated: "Pomyślnie zaktualizowano stronę" + deleted: "Pomyślnie usunięto stronę" + pageSetting: "Ustawienia strony" + nameAlreadyExists: "Określony adres URL strony już istnieje" + invalidNameTitle: "Podany adres URL strony jest nieprawidłowy" + invalidNameText: "Upewnij się, że pole tytułowe strony nie jest puste" + editThisPage: "Edytuj tę stronę" + viewSource: "Zobacz źródło" + viewPage: "Wyświetlanie Twoich stron" + like: "Lubię" + unlike: "Cofnij polubienie" + my: "Moje strony" + liked: "Polubione strony" + featured: "Popularne" + inspector: "Inspektor" + contents: "Zawartość" + content: "Blok strony" + variables: "Zmienne" + title: "Tytuł" + url: "URL strony" + summary: "Podsumowanie strony" + alignCenter: "Wyśrodkuj elementy" + hideTitleWhenPinned: "Ukryj tytuł strony, gdy przypięta do profilu" + font: "Czcionka" + fontSerif: "Szeryfowa" + fontSansSerif: "Bezszeryfowa" + eyeCatchingImageSet: "Ustaw miniaturę" + eyeCatchingImageRemove: "Usuń miniaturę" + chooseBlock: "Dodaj blok" + selectType: "Wybierz typ" + enterVariableName: "Wprowadź nazwę dla swojej zmiennej" + variableNameIsAlreadyUsed: "Ta nazwa jest już używana przez inną zmienną" + contentBlocks: "Zawartość" + inputBlocks: "Wejście" + specialBlocks: "Specjalne" + blocks: + text: "Tekst" + textarea: "Pole tekstowe" + section: "Sekcja" + image: "Zdjęcia" + button: "Przycisk" + if: "Jeżeli" + _if: + variable: "Zmienna" + post: "Utwórz wpis" + _post: + text: "Treść" + attachCanvasImage: Załącz obraz płótna + canvasId: ID płótna + textInput: "Pole tekstowe" + _textInput: + name: "Nazwa zmiennej" + text: "Tytuł" + default: "Domyślna wartość" + textareaInput: "Wielowierszowe pole tekstowe" + _textareaInput: + name: "Nazwa zmiennej" + text: "Tytuł" + default: "Domyślna wartość" + numberInput: "Pole na liczbę" + _numberInput: + name: "Nazwa zmiennej" + text: "Tytuł" + default: "Domyślna wartość" + _canvas: + width: "Szerokość" + height: "Wysokość" + id: ID płótna + note: "Osadzony wpis" + _note: + id: "ID wpisu" + idDescription: "Możesz też wkleić adres URL wpisu, aby go ustawić." + detailed: "Szczegółowy widok" + switch: "Przełącznik" + _switch: + name: "Nazwa zmiennej" + text: "Tytuł" + default: "Domyślna wartość" + counter: "Licznik" + _counter: + name: "Nazwa zmiennej" + text: "Tytuł" + inc: "Zwiększ o" + _button: + text: "Tytuł" + colored: "Kolorowe" + action: "Działanie wykonywane przy naciśnięciu przycisku" + _action: + dialog: "Pokazuj okno dialogowe" + _dialog: + content: "Treść" + resetRandom: "Resetuj losowe ziarno" + pushEvent: "Wyślij zdarzenie" + _pushEvent: + event: "Nazwa zdarzenia" + message: "Wiadomość do wyświetlenia po aktywowaniu" + variable: "Zmienna do wysłania" + no-variable: "Brak" + callAiScript: "Wywołaj AiScript" + _callAiScript: + functionName: "Nazwa funkcji" + radioButton: "Wybór" + _radioButton: + name: "Nazwa zmiennej" + title: "Tytuł" + values: "Lista wyborów (oddzielonych znakiem nowego wiersza)" + default: "Domyślna wartość" + canvas: Płótno + script: + categories: + flow: "Kontrola przepływu" + logical: "Operacje logiczne" + operation: "Obliczanie" + comparison: "Porównanie" + random: "Losowe" + value: "Wartość" + fn: "Funkcje" + text: "Działania na tekście" + convert: "Transformacja" + list: "Listy" + blocks: + text: "Tekst" + multiLineText: "Tekst (w wielu wierszach)" + _textList: + info: "Oddziel każdy wpis znakiem nowego wiersza" + strLen: "Długość tekstu" + _strLen: + arg1: "Tekst" + _strPick: + arg1: "Tekst" + arg2: "Położenie znaku" + strReplace: "Zamiana tekstu" + _strReplace: + arg1: "Tekst" + arg2: "Tekst do zamiany" + arg3: "Zamieniono z" + _strReverse: + arg1: "Tekst" + _join: + arg1: "Listy" + arg2: "Odstęp" + add: "Dodaj" + _add: + arg1: "A" + arg2: "B" + subtract: "Odejmij" + _subtract: + arg1: "A" + arg2: "B" + multiply: "Pomnóż" + _multiply: + arg1: "A" + arg2: "B" + divide: "Podziel" + _divide: + arg1: "A" + arg2: "B" + mod: "Reszta" + _mod: + arg1: "A" + arg2: "B" + _round: + arg1: "Liczba" + eq: "A i B są sobie równe" + _eq: + arg1: "A" + arg2: "B" + notEq: "A i B różnią się" + _notEq: + arg1: "A" + arg2: "B" + and: "A I B" + _and: + arg1: "A" + arg2: "B" + or: "A LUB B" + _or: + arg1: "A" + arg2: "B" + lt: "< A jest mniejsze niż B" + _lt: + arg1: "A" + arg2: "B" + gt: "> A jest większe od B" + _gt: + arg1: "A" + arg2: "B" + ltEq: "<= A jest mniejsze lub równe B" + _ltEq: + arg1: "A" + arg2: "B" + gtEq: ">= A jest większe lub równe B" + _gtEq: + arg1: "A" + arg2: "B" + if: "Warunek" + _if: + arg1: "Jeżeli" + arg2: "Wtedy" + arg3: Inaczej + not: "NIE" + _not: + arg1: "NIE" + random: "Losowe" + _random: + arg1: "Prawdopodobieństwo" + rannum: "Losowa liczba" + _rannum: + arg1: "Minimalna wartość" + arg2: "Maksymalna wartość" + randomPick: "Wybierz losowo z listy" + _randomPick: + arg1: "Listy" + dailyRandom: "Losowo (zmienia się raz dziennie dla każdego użytkownika)" + _dailyRandom: + arg1: "Prawdopodobieństwo" + dailyRannum: "Losowa liczba (zmienia się raz dziennie dla każdego użytkownika)" + _dailyRannum: + arg1: "Minimalna wartość" + arg2: "Maksymalna wartość" + dailyRandomPick: "Wybierz losowo z listy (zmienia się raz dziennie dla każdegoużytkownika)" + _dailyRandomPick: + arg1: "Listy" + seedRandom: "Losowo (z ziarnem)" + _seedRandom: + arg1: "Ziarno" + arg2: "Prawdopodobieństwo" + seedRannum: "Losowa liczba (z ziarnem)" + _seedRannum: + arg1: "Ziarno" + arg2: "Minimalna wartość" + arg3: "Maksymalna wartość" + seedRandomPick: "Wybierz losowo z listy (z ziarnem)" + _seedRandomPick: + arg1: "Ziarno" + arg2: "Listy" + DRPWPM: "Wybierz losowo z ważonej listy (zmienia się raz dziennie dla każdegoużytkownika)" + pick: "Wybierz z listy" + _pick: + arg1: "Listy" + arg2: "Położenie" + listLen: "Uzyskaj długość listy" + _listLen: + arg1: "Listy" + number: "Liczba" + stringToNumber: "Tekst na liczbę" + _stringToNumber: + arg1: "Tekst" + numberToString: "Liczba na tekst" + _numberToString: + arg1: "Liczba" + splitStrByLine: "Rozdziel tekst znakami nowej linii" + _splitStrByLine: + arg1: "Tekst" + ref: "Zmienne" + aiScriptVar: "Zmienna AiScript" + fn: "Funkcje" + _fn: + arg1: "Wyjście" + slots-info: Oddziel każde gniazdo nową linią + slots: Gniazda + for: "Powtórzenie" + _for: + arg1: "Liczba powtórzeń" + arg2: "Działanie" + textList: Lista tekstowa + strPick: Wyciągaczka ciągu znaków + strReverse: Odwróć tekst + join: Łączenie tekstu + round: Zaokrąglanie wartości dziesiętnych + _DRPWPM: + arg1: Lista tekstowa + types: + string: "Tekst" + number: "Liczba" + boolean: "Flaguj" + array: "Listy" + stringArray: Lista tekstowa + enviromentVariables: "Zmienna środowiskowa" + pageVariables: "Element strony" + argVariables: Gniazda wejściowe + typeError: Gniazdo {slot} akceptuje wartości typu “{expect}”, lecz wprowadzona + wartość jest typu “{actual}”! + thereIsEmptySlot: Gniazdo {slot} jest puste! + emptySlot: Puste gniazdo +_relayStatus: + requesting: "Oczekujące" + accepted: "Zaakceptowano" + rejected: "Odrzucono" +_notification: + fileUploaded: "Pomyślnie wysłano plik" + youGotMention: "{name} wspomniał* o Tobie" + youGotReply: "{name} odpowiedział* Tobie" + youGotQuote: "{name} zacytował* Ciebie" + youRenoted: "{name} podbił* Twój wpis" + youGotPoll: "{name} zagłosował* w Twojej ankiecie" + youGotMessagingMessageFromUser: "{name} wysłał* Ci wiadomość" + youGotMessagingMessageFromGroup: "Została wysłana wiadomość do grupy {name}" + youWereFollowed: "Zaobserwował* Cię" + youReceivedFollowRequest: "Otrzymał*ś prośbę o możliwość obserwacji" + yourFollowRequestAccepted: "Twoja prośba o możliwość obserwacji została przyjęta" + youWereInvitedToGroup: "{userName} zaprosił* Ciebie do grupy" + pollEnded: "Wyniki ankiety stały się dostępne" + emptyPushNotificationMessage: "Powiadomienia push zostały zaktualizowane" + _types: + all: "Wszystkie" + follow: "Nowi obserwujący" + mention: "Wspomnienia" + reply: "Odpowiedzi" + renote: "Podbicia" + quote: "Cytaty" + reaction: "Reakcje" + pollVote: "Głosy w ankietach" + receiveFollowRequest: "Otrzymane prośby o możliwość obserwacji" + followRequestAccepted: "Przyjęte prośby o możliwość obserwacji" + groupInvited: "Zaproszenia do grup" + app: "Powiadomienia z powiązanych aplikacji" + pollEnded: Zakończone ankiety + _actions: + followBack: "zaobserwował* cię z powrotem" + reply: "Odpowiedz" + renote: "Podbicia" +_deck: + alwaysShowMainColumn: "Zawsze pokazuj główną kolumnę" + columnAlign: "Wyrównaj kolumny" + addColumn: "Dodaj kolumnę" + configureColumn: "Ustawienia kolumny" + swapLeft: "Przesuń w lewo" + swapRight: "Przesuń w prawo" + swapUp: "Zamień z powyższym" + swapDown: "Zamień z poniższym" + stackLeft: "Przypnij do lewej" + popRight: "Odepnij w prawo" + profile: "Przestrzeń" + newProfile: "Nowa przestrzeń" + deleteProfile: "Usuń przestrzeń" + widgetsIntroduction: "Wybierz \"Edytuj widżety\" w menu kolumny i dodaj widżet." + _columns: + main: "Główna" + widgets: "Widżety" + notifications: "Powiadomienia" + tl: "Oś czasu" + antenna: "Anteny" + list: "Listy" + mentions: "Wspomnienia" + direct: "Bezpośrednie wiadomości" + introduction2: Kliknij + z prawej strony ekranu, by dodać nowe kolumny kiedy chcesz. + introduction: Utwórz idealny dla siebie interfejs, poprzez dowolne ustawianie kolumn! + renameProfile: Zmień nazwę przestrzeni + nameAlreadyExists: Ta nazwa przestrzeni już istnieje. +accountMoved: 'Użytkownik przeniósł się na nowe konto:' +flagShowTimelineRepliesDescription: Jeśli włączone, pokazuje odpowiedzi użytkowników + na wpisy innych użytkowników na osi czasu. +manageGroups: Zarządzaj grupami +objectStorageSetPublicRead: Ustaw "public-read" podczas wysyłania +removeAllFollowing: Przestań obserwować wszystkich obserwowanych użytkowników +smtpSecure: Użyj implicit SSL/TLS dla połączeń SMTP +secureMode: Tryb bezpieczny (Authorized Fetch) +instanceSecurity: Bezpieczeństwo serwera +privateMode: Tryb prywatny +allowedInstances: Dopuszczone serwery +recommended: Polecane +allowedInstancesDescription: Hosty serwerów, które mają być dopuszczone do federacji. + Każdy oddzielony nowym wierszem (dotyczy tylko trybu prywatnego). +seperateRenoteQuote: Oddziel przyciski podbicia i cytowania +refreshInterval: 'Częstotliwość aktualizacji ' +slow: Wolna +_messaging: + dms: Prywatne + groups: Grupy +_antennaSources: + all: Wszystkie wpisy + users: Wpisy od konkretnych użytkowników + homeTimeline: Wpisy od obserwowanych użytkowników + userList: Wpisy od użytkowników z konkretnej listy + userGroup: Wpisy od użytkowników z konkretnej grupy + instances: Wpisy od wszystkich użytkowników na instancji +enableRecommendedTimeline: Włącz polecaną oś czasu +recentNDays: Ostatnie {n} dni +driveCapOverrideCaption: Zresetuj pojemność do domyślnej poprzed wpisanie wartości + 0 lub mniejszej. +requireAdminForView: Musisz zalogować się jako administrator, by to zobaczyć. +replayTutorial: Powtórz samouczek +migration: Migracja +moveTo: Przenieś obecne konto do nowego +moveToLabel: 'Konto na które się przenosisz:' +moveAccount: Przenieś konto! +moveAccountDescription: Ten proces jest nieodwracalny. Upewnij się, że utworzył*ś + alias dla tego konta na nowym koncie, przed rozpoczęciem. Proszę wpisz tag konta + w formacie @osoba@serwer.com +moveFrom: Przejdź ze starego konta na obecne +moveFromLabel: 'Konto które przenosisz:' +showUpdates: Pokaż pop-up po aktualizacji Firefish +swipeOnDesktop: Zezwól na przeciąganie w stylu mobilnym na desktopie +moveFromDescription: To utworzy alias twojego starego konta, w celu umożliwienia migracji + z tamtego konta na to. Zrób to ZANIM rozpoczniesz przenoszenie się z tamtego konta. + Proszę wpisz tag konta w formacie @osoba@serwer.com +migrationConfirm: "Czy jesteś absolutnie pewn* tego, że chcesz przenieść swoje konto + na {account}? Tego działania nie można odwrócić. Nieodwracalnie stracisz możliwość + normalnego korzystania z konta.\nUpewnij się, że to konto zostało ustawione jako + konto z którego się przenosisz." +noThankYou: Nie, dziękuję +addInstance: Dodaj serwer +renoteMute: Wycisz podbicia +renoteUnmute: Odcisz podbicia +flagSpeakAsCat: Mów jak kot +flagSpeakAsCatDescription: Twoje posty zostaną znya-izowane, gdy w trybie kota +selectInstance: Wybierz serwer +noInstances: Brak serwerów +keepOriginalUploadingDescription: Zapisuje oryginalne zdjęcie. Jeśli wyłączone, wersja + do wyświetlania w sieci zostanie wygenerowana podczas wysłania. +antennaInstancesDescription: Wymień jeden host serwera w każdym wierszu +regexpError: Błąd regularnego wyrażenia +regexpErrorDescription: 'Wystąpił błąd w regularnym wyrażeniu znajdującym się w linijce + {line} Twoich {tab} wyciszeń słownych:' +forwardReportIsAnonymous: Zamiast twojego konta, anonimowe konto systemowe będzie + wyświetlane jako zgłaszający na zdalnym serwerze. +breakFollowConfirm: Czy na pewno chcesz usunąć obserwującego? +instanceDefaultThemeDescription: Wpisz kod motywu w formacie obiektowym. +mutePeriod: Długość wyciszenia +tenMinutes: 10 minut +showLocalPosts: 'Pokaż lokalne wpisy w:' +socialTimeline: Społeczna oś czasu +homeTimeline: Główna oś czasu +reflectMayTakeTime: Może upłynąć trochę czasu, zanim pojawią się zmiany. +failedToFetchAccountInformation: Nie można uzyskać informacji o koncie +pushNotification: Powiadomienia push +subscribePushNotification: Włącz powiadomienia push +unsubscribePushNotification: Wyłącz powiadomienia push +pushNotificationAlreadySubscribed: Powiadomienia push są już włączone +pushNotificationNotSupported: Twoja przeglądarka lub serwer nie obsługuje powiadomień + push +sendPushNotificationReadMessage: Usuń powiadomienia push, gdy odpowiednie powiadomienia + lub wiadomości zostaną odczytane +sendPushNotificationReadMessageCaption: Powiadomienie zawierające tekst "{emptyPushNotificationMessage}" + zostanie wyświetlone przez krótką chwilę. Jeśli dotyczy, może to zwiększyć zużycie + baterii Twojego urządzenia. +defaultReaction: Domyślna reakcja emoji dla wychodzących i przychodzących wpisów +license: Licencja +customKaTeXMacro: Niestandardowe makra KaTeX +enableCustomKaTeXMacro: Włącz niestandardowe makra KaTeX +noteId: ID wpisu +hiddenTagsDescription: 'Wypisz tagi (bez #) hashtagów które masz zamiar ukryć z "Na + czasie" i "Eksploruj". Na ukryte hashtagi można dalej wejść innymi sposobami. Ta + lista nie ma wpływu na zablokowane instancje.' +proxyAccountDescription: Konto proxy jest kontem które w określonych sytuacjach zachowuje + się jak zdalny obserwujący. Na przykład, kiedy użytkownik dodaje zdalnego użytkownika + do listy, oraz żaden lokalny użytkownik nie obserwuje tego konta, aktywność owego + użytkownika nie zostanie dostarczona na oś czasu. W takim razie, użytkownika zaobserwuje + konto proxy. +objectStorageBaseUrlDesc: "URL stosowany jako odniesienie. Podaj URL twojego CDN, + albo proxy, jeśli używasz któregokolwiek.\nDla S3 użyj 'https://.s3.amazonaws.com', + a dla GCS i jego odpowiedników użyj 'https://storage.googleapis.com/', itd." +sendErrorReportsDescription: "Gdy ta opcja jest włączona, szczegółowe informacje o + błędach będą udostępnianie z Firefish gdy wystąpi problem, pomagając w ulepszaniu + Firefish.\nZawrze to informacje takie jak wersja twojego systemu operacyjnego, przeglądarki, + Twoja aktywność na Firefish itd." +privateModeInfo: Gdy ta opcja jest włączona, tylko serwery z listy serwerów dozwolonych + mogą federować się z twoim serwerem. Żadne posty nie będą publicznie dostępne. +oneHour: Godzina +oneDay: Dzień +oneWeek: Tydzień +recommendedInstances: Polecane serwery +recommendedInstancesDescription: Polecane serwery, mające pojawić się w odpowiedniej + osi czasu, oddzielane nowymi liniami. +rateLimitExceeded: Przekroczono ratelimit +cropImage: Kadruj zdjęcie +cropImageAsk: Czy chcesz skadrować to zdjęcie? +recentNHours: Ostatnie {n} godzin +noEmailServerWarning: Serwer email nie jest skonfigurowany. +thereIsUnresolvedAbuseReportWarning: Istnieją nierozwiązane zgłoszenia. +check: Sprawdź +driveCapOverrideLabel: Zmień pojemność dysku dla tego użytkownika +isSystemAccount: To konto jest tworzone i automatycznie obsługiwane przez system. + Nie moderuj, nie edytuj, nie usuwaj, ani w żaden inny sposób nie ingeruj w to konto, + bowiem może to uszkodzić twój serwer. +typeToConfirm: Wpisz {x} by potwierdzić +deleteAccount: Usuń konto +document: Dokumentacja +numberOfPageCache: Liczba zbuforowanych stron +numberOfPageCacheDescription: Zwiększenie tej liczby poprawi wygodę użytkowników, + ale spowoduje większe zużycie serwera, jak i pamięci. +fast: Szybka +sensitiveMediaDetection: Wykrywanie nieodpowiednich multimediów +remoteOnly: Tylko zdalne +activeEmailValidationDescription: Włącza ściślejszą walidację adresów e-mail, która + obejmuje sprawdzanie adresów jednorazowych oraz tego, czy rzeczywiście można się + z nim komunikować. Jeśli wyłączone, walidowany jest tylko format wiadomości e-mail. +shuffle: Losuj +showAds: Pokazuj banery +enterSendsMessage: Wciśnij Enter w komunikatorze, by wysłać wiadomość (domyślnie – + Ctrl + Enter) +adminCustomCssWarn: To ustawienie powinno być używane tylko pod warunkiem, że wiesz + za co ono odpowiada. Wpisanie niepoprawnych wartości może spowodować niepoprawne + działanie klientów KAŻDEGO użytkownika. Proszę upewnij się, że twój CSS działa poprawnie + poprzez przetestowanie go w ustawieniach twojego użytkownika. +customMOTD: Niestandardowe MOTD (wiadomości splash screen) +customMOTDDescription: Niestandardowe wiadomości dla MOTD (splash screen), oddzielane + nowymi liniami, mające pokazywać się za każdym razem gdy użytkownik ładuje/odświeża + stronę. +customSplashIcons: Niestandardowe ikony na splash screenie (URL-e) +customSplashIconsDescription: URL-e dla niestandardowych ikonych na splash screenie, + mające pokazywać się za każdym razem, gdy użytkownik ładuje/odświeża stronę, oddzielane + nowymi liniami. Upewnij się, że zdjęcia są na statycznych URL-ach, najlepiej o rozmiarze + 192x192. +caption: Auto opis +splash: Splash screen +updateAvailable: Może być dostępna aktualizacja! +logoImageUrl: URL grafiki loga +showAdminUpdates: Wskaż, że jest dostępna nowa wersja Firefish (tylko dla adminów) +hiddenTags: Ukryte hashtagi +userSaysSomethingReason: '{name} powiedział* {reason}' +customKaTeXMacroDescription: 'Skonfiguruj makra, aby łatwo pisać wyrażenia matematyczne! + Notacja jest zgodna z definicjami poleceń LaTeXa i zapisywana jest jako \newcommand{\nazwa}{treść} + lub \newcommand{\nazwa}[numer argumentów]{treść}. Na przykład, \newcommand{\add}[2]{#1 + + #2} rozszerzy \add{3}{foo} do 3 + foo. Nawiasy klamrowe otaczające nazwę makra + mogą być zmienione na nawiasy okrągłe lub kwadratowe. Wpłynie to na nawiasy używane + dla argumentów. W każdym wierszu można zdefiniować jedno (i tylko jedno) makro i + nie można przerwać linii w środku definicji. Nieprawidłowe linie są po prostu ignorowane. + Obsługiwane są tylko proste funkcje podstawiania łańcuchów; nie można tu stosować + zaawansowanej składni, takiej jak warunkowe rozgałęzienia.' +secureModeInfo: W przypadku żądań z innych serwerów nie odsyłaj bez dowodu. +preferencesBackups: Kopie zapasowe ustawień +undeck: Opuść tablicę +reporter: Osoba zgłaszająca +instanceDefaultDarkTheme: Domyślny ciemny motyw serwera +lastCommunication: Ostatnie połączenie +emailRequiredForSignup: Wymagaj adresu email przy rejestracji +themeColor: Kolor znacznika serwera +instanceDefaultLightTheme: Domyślny jasny motyw serwera +enableEmojiReactions: Włącz reakcje emoji +showEmojisInReactionNotifications: Pokazuj emoji w powiadomieniach reakcyjnych +apps: Aplikacje +silenceThisInstance: Wycisz ten serwer +silencedInstances: Wyciszone serwery +deleted: Usunięte +editNote: Edytuj wpis +edited: 'Edytowano o {date} {time}' +silenced: Wyciszony +userSaysSomethingReasonReply: '{name} odpowiedział na wpis zawierający {reason}' +userSaysSomethingReasonRenote: '{name} podbił post zawierający {reason}' +signupsDisabled: Rejestracja na tym serwerze jest obecnie zamknięta, ale zawsze możesz + zarejestrować się na innym serwerze! Jeśli masz kod zaproszenia na ten serwer, wpisz + go poniżej. +userSaysSomethingReasonQuote: '{name} zacytował wpis zawierający {reason}' +silencedInstancesDescription: Wypisz nazwy hostów serwerów, które chcesz wyciszyć. + Konta na wymienionych serwerach są traktowane jako "Wyciszone", mogą jedynie wysyłać + prośby obserwacji i nie mogą oznaczać we wzmiankach profili lokalnych jeśli nie + są obserwowane. To nie będzie miało wpływu na zablokowane serwery. +cannotUploadBecauseExceedsFileSizeLimit: Ten plik nie mógł być przesłany, ponieważ + jego wielkość przekracza dozwolony limit. +sendModMail: Wyślij Powiadomienie Moderacyjne +searchPlaceholder: Szukaj w Firefish +jumpToPrevious: Przejdź do poprzedniej sekcji +listsDesc: Listy umożliwiają tworzenie osi czasu z określonymi użytkownikami. Dostęp + do nich można uzyskać na stronie osi czasu. +accessibility: Dostępność +selectChannel: Wybierz kanał +antennasDesc: "Anteny wyświetlają nowe posty spełniające ustawione przez Ciebie kryteria!\n + Dostęp do nich można uzyskać ze strony osi czasu." +expandOnNoteClick: Otwórz post przy kliknięciu +expandOnNoteClickDesc: Jeśli opcja ta jest wyłączona, nadal będzie można otwierać + posty w menu po kliknięciu prawym przyciskiem myszy lub klikając znacznik czasowy. +channelFederationWarn: Kanały nie są jeszcze federowane z innymi serwerami +newer: nowsze +older: starsze +cw: Ostrzeżenie zawartości +removeReaction: Usuń reakcję +reactions: Reakcje +clipsDesc: Spinki to skategoryzowane zakładki, które można udostępniać. Możesz utworzyć + spinkę dla każdego wpisu w menu wpisu. +swipeOnMobile: Pozwalaj na przeciąganie pomiędzy stronami +image: Obrazek +xl: XL +replies: Odpowiedzi +video: Film +quotes: Cytaty +clickToShowPatterns: Kliknij aby pokazać wzory modułów +renotes: Boosty +audio: Dźwięk diff --git a/locales/pt-BR.yml b/locales/pt-BR.yml new file mode 100644 index 0000000..223d13f --- /dev/null +++ b/locales/pt-BR.yml @@ -0,0 +1,254 @@ +_lang_: Português (Brasil) +username: Nome de usuário +ok: OK +headlineFirefish: Uma plataforma de mídia social descentralizada e de código aberto + que é gratuita para sempre! 🚀 +search: Pesquisar +gotIt: Entendi! +introFirefish: Bem vindo! Firefish é uma plataforma de mídia social descentralizada + e de código aberto que é gratuita para sempre! 🚀 +searchPlaceholder: Pesquise no Firefish +notifications: Notificações +password: Senha +forgotPassword: Esqueci a senha +cancel: Cancelar +noThankYou: Não, obrigade +save: Salvar +enterUsername: Insira nome de usuário +cw: Aviso de conteúdo +driveFileDeleteConfirm: Tem a certeza de que pretende apagar o arquivo "{name}"? O + arquivo será removido de todas as mensagens que o contenham como anexo. +deleteAndEdit: Deletar e editar +import: Importar +exportRequested: Você pediu uma exportação. Isso pode demorar um pouco. Será adicionado + ao seu Drive quando for completo. +note: Postar +notes: Postagens +deleteAndEditConfirm: Você tem certeza que quer deletar esse post e edita-lo? Você + vai perder todas as reações, impulsionamentos e respostas dele. +showLess: Fechar +importRequested: Você requisitou uma importação. Isso pode demorar um pouco. +listsDesc: Listas deixam você criar linhas do tempo com usuários específicos. Elas + podem ser acessadas pela página de linhas do tempo. +edited: 'Editado às {date} {time}' +sendMessage: Enviar uma mensagem +older: antigo +createList: Criar lista +loadMore: Carregar mais +mentions: Menções +importAndExport: Importar/Exportar Dados +files: Arquivos +lists: Listas +manageLists: Gerenciar listas +error: Erro +somethingHappened: Ocorreu um erro +retry: Tentar novamente +renotedBy: Impulsionado por {user} +noNotes: Nenhum post +noNotifications: Nenhuma notificação +instance: Servidor +settings: Configurações +basicSettings: Configurações Básicas +otherSettings: Outras Configurações +openInWindow: Abrir em janela +profile: Perfil +noAccountDescription: Esse usuário ainda não escreveu sua bio. +login: Entrar +loggingIn: Entrando +logout: Sair +signup: Criar conta +uploading: Enviando... +users: Usuários +addUser: Adicione um usuário +addInstance: Adicionar um servidor +cantFavorite: Não foi possível adicionar aos marcadores. +pin: Fixar no perfil +unpin: Desfixar do perfil +copyContent: Copiar conteúdos +copyLink: Copiar link +delete: Deletar +deleted: Deletado +editNote: Editar anotação +addToList: Adicionar a lista +copyUsername: Copiar nome de usuário +searchUser: Procurar por um usuário +reply: Responder +jumpToPrevious: Pular para o anterior +showMore: Mostrar mais +newer: novo +youGotNewFollower: seguiu você +mention: Mencionar +directNotes: Mensagens diretas +export: Exportar +unfollowConfirm: Você tem certez que deseja para de seguir {name}? +noLists: Você não possui nenhuma lista +following: Seguindo +followers: Seguidores +followsYou: Segue você +fetchingAsApObject: Buscando do Fediverse +timeline: Linha do tempo +favorite: Adicionar aos marcadores +favorites: Marcadores +unfavorite: Remover dos marcadores +favorited: Adicionado aos marcadores. +alreadyFavorited: Já foi adicionado aos marcadores. +download: Download +pageLoadError: Ocorreu um erro ao carregar a página. +pageLoadErrorDescription: Isso normalmente é causado por erros de rede ou pelo cache + do navegador. Tente limpar o cache e, depois de esperar um pouquinho, tente novamente. +serverIsDead: Esse servidos não está respondendo. Por favor espere um pouco e tente + novamente. +youShouldUpgradeClient: Para visualizar essa página, favor reiniciar para atualizar + seu cliente. +enterListName: Insira um nome para a lista +privacy: Privacidade +defaultNoteVisibility: Visibilidade padrão +makeFollowManuallyApprove: Pedidos de seguimento precisam de aprovação +follow: Seguir +followRequest: Seguir +followRequests: Pedidos de seguimento +unfollow: Parar de seguir +followRequestPending: Pedido de seguimento pendente +enterEmoji: Insira um emoji +itsOff: Desativado +itsOn: Ativado +removeReaction: Retirar sua reação +reactionSettingDescription2: Arraste para reordenar, clique para deletar, pressione + “+” para adicionar. +rememberNoteVisibility: Lembrar configurações de visibilidade de postagem +enterFileName: Preencha o nome do arquivo +block: Bloquear +unblock: Desbloquear +suspend: Suspender +blockConfirm: Você tem certeza de que quer bloquear esta conta? +unblockConfirm: Você tem certeza de que quer desbloquear esta conta? +suspendConfirm: Você tem certeza de que quer suspender esta conta? +selectList: Selecione uma lista +selectChannel: Selecione um canal +addEmoji: Adicionar Emoji +settingGuide: Configurações recomendadas +cacheRemoteFilesDescription: Quando esta configuração está desativada, arquivos remotos + serão carregados diretamente do servidor remoto. Desativar isso irá diminuir o uso + de armazenamento, mas aumentar o tráfego, já que as thumbnails não serão geradas. +flagAsBot: Marcar esta conta como robô +flagAsCat: Você é um gato? 😺 +flagAsCatDescription: Você receberá orelhas de gato e falará como um! +flagSpeakAsCat: Falar como um gato +dashboard: Painel +showFeaturedNotesInTimeline: Mostrar postagens em destaque nas linhas do tempo +objectStorage: Armazenamento de objetos +useObjectStorage: Utilizar armazenamento de objetos +objectStorageBaseUrl: URL base +objectStorageBucket: Balde +objectStorageBucketDesc: Por favor, especifique o nome do balde usado no seu provedor. +objectStorageRegion: Região +objectStorageRegionDesc: Especifique uma região como "xx-east-1". Se o seu serviço + não distingue entre as regiões, deixe esta em branco ou insira 'us-east-1'. +objectStorageUseSSL: Utilizar SSL +objectStorageUseSSLDesc: Desligue isso se você não utilizará HTTPS para conexões de + API +objectStorageUseProxy: Conecte-se por Proxy +lastUsedDate: Última utilização em +state: Estado +objectStorageUseProxyDesc: Desligue isso se você não utilizará um Proxy para conexões + com API +serverLogs: Logs de Servidor +details: Detalhes +nothing: Não há nada para ver aqui +installedDate: Autorizado em +sort: Ordenar +ascendingOrder: Ascendente +descendingOrder: Descendente +output: Saída +expandOnNoteClick: Abrir postagem ao clicar +updateRemoteUser: Atualizar informações do usuário remoto +deleteAllFiles: Excluir todos os arquivos +deleteAllFilesConfirm: Você tem certeza de que deseja excluir todos os arquivos? +yourAccountSuspendedTitle: Esta conta está suspensa +yourAccountSuspendedDescription: Esta conta foi suspensa por quebrar os termos de + serviço do servidor ou similares. Entre em contato com o administrador se você quiser + saber um motivo mais detalhado. Por favor, não crie uma nova conta. +menu: Menu +divider: Divisor +addItem: Adicionar Item +inboxUrl: URL da caixa de entrada +left: Esquerda +center: Centro +wide: Largo +narrow: Estreito +isModerator: Moderador +monthAndDay: '{day}/{month}' +pinned: Fixar ao perfil +pinnedNote: Postagem fixada +you: Você +clickToShow: Clique para exibir +showEmojisInReactionNotifications: Mostrar emojis nas notificações de reação +reactionSetting: Reações a exibir no seletor de reações +customEmojis: Emojis personalizados +emojis: Emojis +emojiName: Nome do Emoji +emoji: Emoji +emojiUrl: URL do Emoji +editWidgetsExit: Pronto +userSilenced: Este usuário está sendo silenciado. +objectStoragePrefix: Prefixo +volume: Volume +objectStorageS3ForcePathStyle: Use URLs de endpoint baseadas em caminho +none: Nenhum +masterVolume: Volume mestre +showInPage: Mostrar na página +expandOnNoteClickDesc: Se desativado, você ainda pode abrir postagens no menu do botão + direito do mouse ou clicando no timestamp. +disablePagesScript: Desativar o AiScript nas Páginas +isPatron: Patrono do Firefish +invite: Convite +inMb: Em megabytes +iconUrl: URL do Ícone +basicInfo: Informações básicas +pinnedUsers: Usuários fixados +fontSize: Tamanho da fonte +noFollowRequests: Você não tem nenhuma solicitação de seguimento pendente +openImageInNewTab: Abrir imagens em nova guia +local: Local +remote: Remoto +total: Total +appearance: Aparência +accessibility: Acessibilidade +accountSettings: Configurações de Conta +numberOfDays: Número de dias +hideThisNote: Esconder esta postagem +objectStoragePrefixDesc: Os arquivos serão armazenados em diretórios com este prefixo. +objectStorageEndpointDesc: Deixe isso vazio se você estiver usando AWS S3, de outra + forma especifique o endpoint como '' ou ':', dependendo do serviço + que você está usando. +deleteAll: Excluir tudo +showFixedPostForm: Exibir o formulário de postagem no topo da linha do tempo +newNoteRecived: Há novas postagens +sounds: Sons +chooseEmoji: Selecione um emoji +unableToProcess: A operação não pôde ser concluída +recentUsed: Recentemente usado +install: Instalar +uninstall: Desinstalar +installedApps: Aplicações Autorizadas +removeAllFollowing: Parar de seguir todos os usuários seguidos +removeAllFollowingDescription: Executar isso faz parar de seguir todas as contas de + {host}. Por favor, execute isso se o servidor, por exemplo, não existir mais. +userSuspended: Este usuário foi suspenso. +isAdmin: Administrador +receiveFollowRequest: Solicitação de seguir recebida +followRequestAccepted: Solicitação de seguir aceita +add: Adicionar +reaction: Reações +enableEmojiReactions: Ativar reações com emoji +attachCancel: Remover anexo +flagShowTimelineReplies: Mostrar respostas na linha do tempo +addAccount: Adicionar conta +toReply: Responder +sentFollowRequests: Enviou solicitações para seguir +toPost: Postar +renotes: Impulsionamentos +renote: Impulsionar +unrenote: Retirar o impulsionamento +renoted: Impulsionado. +replies: Respostas diff --git a/locales/pt-PT.yml b/locales/pt-PT.yml new file mode 100644 index 0000000..b905bf1 --- /dev/null +++ b/locales/pt-PT.yml @@ -0,0 +1,767 @@ +_lang_: "Português (Portugal)" +headlineFirefish: "Uma rede ligada por notas" +introFirefish: "Bem-vindo! Firefish é um serviço de microblogue descentralizado de + código aberto, gratuito para sempre! 🚀" +monthAndDay: "{day}/{month}" +search: "Buscar" +notifications: "Notificações" +username: "Nome de usuário" +password: "Senha" +forgotPassword: "Esqueci a senha" +fetchingAsApObject: "Buscando no Fediverso" +ok: "OK" +gotIt: "Entendi" +cancel: "Cancelar" +enterUsername: "Digite o nome de usuário" +renotedBy: "Repostado por {user}" +noNotes: "Sem posts" +noNotifications: "Sem notificações" +instance: "Instância" +settings: "Configurações" +basicSettings: "Configurações básicas" +otherSettings: "Outras configurações" +openInWindow: "Abrir numa janela" +profile: "Perfil" +timeline: "Timeline" +noAccountDescription: "Este usuário não tem uma descrição." +login: "Iniciar sessão" +loggingIn: "Iniciando sessão…" +logout: "Sair" +signup: "Registrar-se" +uploading: "Enviando…" +save: "Guardar" +users: "Usuários" +addUser: "Adicionar usuário" +favorite: "Favoritar" +favorites: "Favoritar" +unfavorite: "Remover dos favoritos" +favorited: "Adicionado aos favoritos." +alreadyFavorited: "Já adicionado aos favoritos." +cantFavorite: "Não foi possível adicionar aos favoritos." +pin: "Afixar no perfil" +unpin: "Desafixar do perfil" +copyContent: "Copiar conteúdos" +copyLink: "Copiar hiperligação" +delete: "Eliminar" +deleteAndEdit: "Eliminar e editar" +deleteAndEditConfirm: "Tens a certeza que pretendes eliminar esta nota e editá-la? + Irás perder todas as suas reações, renotas e respostas." +addToList: "Adicionar a lista" +sendMessage: "Enviar uma mensagem" +copyUsername: "Copiar nome de utilizador" +searchUser: "Pesquisar utilizador" +reply: "Responder" +loadMore: "Carregar mais" +showMore: "Ver mais" +showLess: "Fechar" +youGotNewFollower: "Você tem um novo seguidor" +receiveFollowRequest: "Pedido de seguimento recebido" +followRequestAccepted: "Pedido de seguir aceito" +mention: "Menção" +mentions: "Menções" +directNotes: "Notas diretas" +importAndExport: "Importar/Exportar" +import: "Importar" +export: "Exportar" +files: "Ficheiros" +download: "Descarregar" +driveFileDeleteConfirm: "Tens a certeza que pretendes apagar o ficheiro \"{name}\"\ + ? As notas que tenham este ficheiro anexado serão também apagadas." +unfollowConfirm: "Tens a certeza que queres deixar de seguir {name}?" +exportRequested: "Pediste uma exportação. Este processo pode demorar algum tempo. + Será adicionado à tua Drive após a conclusão do processo." +importRequested: "Pediste uma importação. Este processo pode demorar algum tempo." +lists: "Listas" +noLists: "Não tens nenhuma lista" +note: "Post" +notes: "Posts" +following: "Seguindo" +followers: "Seguidores" +followsYou: "Segue-te" +createList: "Criar lista" +manageLists: "Gerir listas" +error: "Erro" +somethingHappened: "Ocorreu um erro" +retry: "Tentar novamente" +pageLoadError: "Ocorreu um erro ao carregar a página." +pageLoadErrorDescription: "Isto é normalmente causado por erros de rede ou pela cache + do browser. Experimenta limpar a cache e tenta novamente após algum tempo." +serverIsDead: "O servidor não está respondendo. Por favor espere um pouco e tente + novamente." +youShouldUpgradeClient: "Para visualizar essa página, por favor recarregue-a para + atualizar seu cliente." +enterListName: "Insira um nome para a lista" +privacy: "Privacidade" +makeFollowManuallyApprove: "Pedidos de seguimento precisam ser aprovados" +defaultNoteVisibility: "Visibilidade padrão" +follow: "Seguindo" +followRequest: "Mandar pedido de seguimento" +followRequests: "Pedidos de seguimento" +unfollow: "Deixar de seguir" +followRequestPending: "Pedido de seguimento pendente" +enterEmoji: "Inserir emoji" +renote: "Repostar" +unrenote: "Desmarcar" +renoted: "Repostado" +cantRenote: "Não pode repostar" +cantReRenote: "Não pode repostar este repost" +quote: "Citar" +pinnedNote: "Post fixado" +pinned: "Afixar no perfil" +you: "Você" +clickToShow: "Clique para ver" +sensitive: "Conteúdo sensível" +add: "Adicionar" +reaction: "Reações" +reactionSetting: "Quais reações a mostrar no selecionador de reações" +reactionSettingDescription2: "Arraste para reordenar, clique para excluir, pressione + + para adicionar." +rememberNoteVisibility: "Lembrar das configurações de visibilidade de notas" +attachCancel: "Remover anexo" +markAsSensitive: "Marcar como sensível" +unmarkAsSensitive: "Desmarcar como sensível" +clickToShowPatterns: "Clique para mostrar os padrões do módulo" +enterFileName: "Digite o nome do ficheiro" +mute: "Silenciar" +unmute: "Dessilenciar" +block: "Bloquear" +unblock: "Desbloquear" +suspend: "Suspender" +unsuspend: "Cancelar suspensão" +blockConfirm: "Tem certeza que gostaria de bloquear essa conta?" +unblockConfirm: "Tem certeza que gostaria de desbloquear essa conta?" +suspendConfirm: "Tem certeza que gostaria de suspender essa conta?" +unsuspendConfirm: "Tem certeza que gostaria de cancelar a suspensão dessa conta?" +selectList: "Escolhe uma lista" +selectAntenna: "Escolhe uma antena" +selectWidget: "Escolhe um widget" +editWidgets: "Editar widgets" +editWidgetsExit: "Pronto" +customEmojis: "Emoji personalizado" +emoji: "Emoji" +emojis: "Emojis" +emojiName: "Nome do Emoji" +emojiUrl: "URL do Emoji" +addEmoji: "Adicionar um Emoji" +settingGuide: "Guia de configuração" +cacheRemoteFiles: "Memória transitória de arquivos remotos" +cacheRemoteFilesDescription: "Se você desabilitar essa configuração, os arquivos remotos + não serão armazenados em memória transitória e serão vinculados diretamente. Economiza + o armazenamento do servidor, mas não gera miniaturas, o que aumenta o tráfego." +flagAsBot: "Marcar conta como robô" +flagAsBotDescription: "Se esta conta for operada por um programa, ative este sinalizador. + Quando ativado, serve como um sinalizador para evitar o encadeamento de reações + para outros programadores, e o manuseio do sistema do Firefish é adequado para ‘bots’." +flagAsCat: "Marcar conta como gato" +flagAsCatDescription: "Ative essa opção para marcar essa conta como gato." +flagShowTimelineReplies: "Mostrar respostas na linha de tempo" +flagShowTimelineRepliesDescription: "Quando ativado, a linha do tempo mostra as respostas + às outras notas do utilizador, além da nota do utilizador." +autoAcceptFollowed: "Aprove automaticamente os seguidores dos seguintes utilizadores" +addAccount: "Adicionar Conta" +loginFailed: "Não consegui logar" +showOnRemote: "Exibir remotamente" +general: "Geral" +wallpaper: "Papel de parede" +setWallpaper: "Definir papel de parede" +removeWallpaper: "Remover papel de parede" +searchWith: "Buscar: {q}" +youHaveNoLists: "Não tem nenhuma lista" +followConfirm: "Tem certeza que quer deixar de seguir {name}?" +proxyAccount: "Conta proxy" +proxyAccountDescription: "Uma conta proxy é uma conta que atua como seguidora remota + para utilizadores sob determinadas condições. Por exemplo, quando um utilizador + lista um utilizador remoto, a atividade não será entregue à instância, a menos que + alguém esteja seguindo o utilizador listado, portanto, a conta proxy deve seguir." +host: "hospedeiro" +selectUser: "Selecionar utilizador" +recipient: "Morada" +annotation: "Anotação" +federation: "União" +instances: "Instância" +registeredAt: "Registrado em" +latestRequestSentAt: "Enviar a solicitação mais recente" +latestRequestReceivedAt: "Recebeu a última solicitação" +latestStatus: "Status mais recente" +storageUsage: "Uso de armazenamento" +charts: "gráfico" +perHour: "por hora" +perDay: "por dia" +stopActivityDelivery: "Parar a entrega de atividades" +blockThisInstance: "Bloquear esta instância" +operations: "operar" +software: "Programas" +version: "versão" +metadata: "Metadados" +monitor: "monitor" +jobQueue: "Fila de trabalhos" +cpuAndMemory: "CPU e memória" +network: "rede" +disk: "disco" +instanceInfo: "Informações da instância" +statistics: "Estatisticas" +clearQueue: "Limpar a fila" +clearQueueConfirmTitle: "Quer limpar a fila?" +clearQueueConfirmText: "Postagens não entregues não serão mais entregues. Normalmente + você não precisa fazer isso." +clearCachedFiles: "Limpar memória transitória" +clearCachedFilesConfirm: "Tem certeza de que deseja excluir todos os arquivos remotos + armazenados em memória transitória?" +blockedInstances: "Instância bloqueada" +blockedInstancesDescription: "Defina os anfitriões das instâncias que deseja bloquear, + separados por quebras de linha. Uma instância bloqueada não poderá interagir com + esta instância." +muteAndBlock: "Silenciar e bloquear" +mutedUsers: "Silenciar utilizador" +blockedUsers: "Utilizadores bloqueados" +noUsers: "Sem usuários" +editProfile: "Editar Perfil" +noteDeleteConfirm: "Deseja excluir esta nota?" +pinLimitExceeded: "Não consigo mais fixar" +intro: "A instalação do Firefish está completa! Crie uma conta de administrador." +done: "Concluído" +processing: "Em Progresso" +preview: "Pré-visualizar" +default: "Padrão" +noCustomEmojis: "Não há emojis" +noJobs: "Sem trabalho" +federating: "federar" +blocked: "Bloqueado" +suspended: "Cancelar subscrição" +all: "Todos" +subscribing: "Subscrito" +publishing: "Executando" +notResponding: "Sem resposta" +instanceFollowing: "Seguir a instância" +instanceFollowers: "Seguidores da instância" +instanceUsers: "Utilizador da instância" +changePassword: "Mudar senha" +security: "Segurança" +retypedNotMatch: "As entradas não coincidem." +currentPassword: "Palavra-passe atual" +newPassword: "Nova palavra-passe" +newPasswordRetype: "Nova senha (redigite)" +attachFile: "Anexar arquivo" +more: "Mais!" +featured: "Destaques" +usernameOrUserId: "Nome de utilizador ou ID de utilizador" +noSuchUser: "Utilizador não encontrado" +lookup: "Buscando" +announcements: "Notícia" +imageUrl: "URL da imagem" +remove: "Eliminar" +removed: "Foi deletado" +removeAreYouSure: "Deseja excluir \"{x}\"?" +deleteAreYouSure: "Deseja excluir \"{x}\"?" +resetAreYouSure: "Redefinir agora?" +saved: "Salvo" +messaging: "Chat" +upload: "Enviando" +keepOriginalUploading: "Manter a imagem original" +keepOriginalUploadingDescription: "Mantenha a versão original ao carregar a imagem. + Quando desligado, a imagem para publicação na web será gerada no navegador no momento + do upload." +fromDrive: "\nDa unidade" +fromUrl: "Da URL" +uploadFromUrl: "Carregamento de URL" +uploadFromUrlDescription: "URL do arquivo que você deseja enviar" +uploadFromUrlRequested: "Upload solicitado" +uploadFromUrlMayTakeTime: "Pode levar algum tempo para que o upload seja concluído." +explore: "Explorar" +messageRead: "Lida" +noMoreHistory: "Sem mais história" +startMessaging: "Iniciar conversação" +nUsersRead: "{n} Pessoas leem" +agreeTo: "Eu concordo com {0}" +tos: "Termos de serviço" +start: "começar" +home: "casa" +remoteUserCaution: "As informações estão incompletas porque é um utilizador remoto." +activity: "atividade" +images: "imagem" +birthday: "aniversário" +yearsOld: "{age} anos" +registeredDate: "Data de registro" +location: "Lugar, colocar" +theme: "tema" +themeForLightMode: "Tema a usar no Modo Diurno" +themeForDarkMode: "Temas usados no Modo Noturno" +light: "Claro" +dark: "Escuro" +lightThemes: "Tema claro" +darkThemes: "Tema escuro" +syncDeviceDarkMode: "Sincronize com o modo escuro do dispositivo" +drive: "Unidades" +fileName: "Nome do Ficheiro" +selectFile: "Selecione o arquivo" +selectFiles: "Selecione os arquivos" +selectFolder: "Selecionar uma pasta" +selectFolders: "Selecionar uma pasta" +renameFile: "Renomear ficheiro" +folderName: "Nome da pasta" +createFolder: "Criar pasta" +renameFolder: "Renomear Pasta" +deleteFolder: "Eliminar Pasta" +addFile: "Adicionar arquivo" +emptyDrive: "A unidade está vazia" +emptyFolder: "A pasta está vazia" +unableToDelete: "Não é possível eliminar" +inputNewFileName: "Por favor, digite um novo nome para a pasta!" +inputNewDescription: "Insira uma nova legenda" +inputNewFolderName: "Por favor, digite um novo nome para a pasta" +circularReferenceFolder: "A pasta de destino é uma subpasta da pasta que você deseja + mover." +hasChildFilesOrFolders: "Esta pasta não está vazia e não pode ser excluída." +copyUrl: "Copiar URL" +rename: "Renomear" +avatar: "Avatar" +banner: "Capa" +nsfw: "Conteúdo sensível" +whenServerDisconnected: "Quando a conexão com o servidor é perdida" +disconnectedFromServer: "Desconectado do servidor" +reload: "Recarregar" +doNothing: "Nenhuma ação adicional" +reloadConfirm: "Quer recarregar?" +watch: "ver" +unwatch: "Não observar" +accept: "Aceitar" +reject: "Rejeitar" +normal: "Normal" +instanceName: "Nome da instância" +instanceDescription: "Descrição da instância" +maintainerName: "Nome do administrador" +maintainerEmail: "E-mail do Administrador:" +tosUrl: "URL dos Termos de Uso" +thisYear: "Este ano" +thisMonth: "Este mês" +today: "Hoje" +dayX: " Dia {day}" +monthX: "mês de {month}" +yearX: "Ano {year}" +pages: "Páginas" +enableLocalTimeline: "Ativar linha do tempo local" +enableGlobalTimeline: "Ativar linha do tempo global" +disablingTimelinesInfo: "Se você desabilitar essas linhas do tempo, administradores + e moderadores ainda poderão usá-las por conveniência." +registration: "Registar" +enableRegistration: "Permitir que qualquer pessoa se registre" +invite: "Convidar" +driveCapacityPerLocalAccount: "Capacidade da unidade por utilizador local" +driveCapacityPerRemoteAccount: "Capacidade da unidade por utilizador remoto" +inMb: "Em ‘megabytes’" +iconUrl: "URL da imagem do ícone (favicon, etc.)" +bannerUrl: "URL da imagem do ‘banner’" +backgroundImageUrl: "URL da imagem de fundo" +basicInfo: "Informações básicas" +pinnedUsers: "Utilizador fixado" +pinnedUsersDescription: "Descreva os utilizadores que você deseja fixar na página + \"Localizar\", etc., separados por quebras de linha." +pinnedPages: "Página fixada" +pinnedPagesDescription: "Descreva o caminho da página que você deseja fixar na página + superior da instância, separada por quebras de linha." +pinnedClipId: "ID do clipe a ser fixado" +pinnedNotes: "Post fixado" +hcaptcha: "hCaptcha" +enableHcaptcha: "Ativar hCaptcha" +hcaptchaSiteKey: "Chave do sítio ‘web’" +hcaptchaSecretKey: "Chave secreta" +recaptcha: "reCAPTCHA" +enableRecaptcha: "Habilitar reCAPTCHA" +recaptchaSiteKey: "Chave do sítio ‘web’" +recaptchaSecretKey: "Chave secreta" +avoidMultiCaptchaConfirm: "O uso de vários captchas pode causar interferência. Deseja + desativar outros captchas? Você também pode cancelar e deixar vários captchas ativados." +antennas: "Antenas" +manageAntennas: "Gestão de antena" +name: "Nome" +antennaSource: "Origem de entrada" +antennaKeywords: "Palavras-chave recebidas" +antennaExcludeKeywords: "Palavras-chave negativas" +antennaKeywordsDescription: "Se você separá-lo com um espaço, será uma especificação + AND, e se você separá-lo com uma quebra de linha, será uma especificação OR." +notifyAntenna: "Notificar novas notas" +withFileAntenna: "Apenas notas com arquivos anexados" +enableServiceworker: "Ative as notificações push para o seu navegador" +antennaUsersDescription: "Especificar nomes de utilizador separados por quebras de + linha" +caseSensitive: "Maiúsculas e minúsculas" +withReplies: "Incluindo resposta" +connectedTo: "Você está conectado à seguinte conta" +notesAndReplies: "Publicações e respostas" +withFiles: "Com arquivo" +silence: "Silenciado" +silenceConfirm: "Quer silenciar?" +unsilence: "Liberar silenciar" +unsilenceConfirm: "Quer liberar o silêncio?" +popularUsers: "Utilizadores populares" +recentlyUpdatedUsers: "Utilizadores postados recentemente" +recentlyRegisteredUsers: "Utilizadores registrados recentemente" +recentlyDiscoveredUsers: "Utilizadores descobertos recentemente" +exploreUsersCount: "Há um utilizador de {count}" +exploreFediverse: "Explorar Fediverse" +popularTags: "Tags populares" +userList: "Listas" +about: "Informações" +aboutFirefish: "Sobre Firefish" +administrator: "Administrador" +token: "Símbolo" +twoStepAuthentication: "Verificação em duas etapas" +moderator: "Moderador" +nUsersMentioned: "Postado por {n} pessoas" +securityKey: "Chave de segurança" +securityKeyName: "Nome chave" +registerSecurityKey: "Registre a chave de segurança" +lastUsed: "Último uso" +unregister: "Cancelar registro" +passwordLessLogin: "Entrar sem senha" +resetPassword: "Redefinir senha" +newPasswordIs: "A nova senha é \"{password}\"" +reduceUiAnimation: "Reduzir a animação da ‘interface’ do utilizador" +share: "Compartilhar" +notFound: "Não encontrado" +notFoundDescription: "Não havia página correspondente ao URL especificado." +uploadFolder: "Destino de ‘upload’ padrão" +cacheClear: "Excluir memória transitória" +markAsReadAllNotifications: "Marcar todas as notificações como lidas" +markAsReadAllUnreadNotes: "Marcar todas as postagens como lidas" +markAsReadAllTalkMessages: "Marcar todas as conversas como lidas" +help: "Ajuda" +inputMessageHere: "Escrever mensagem aqui" +close: "Fechar" +group: "Grupos" +groups: "Grupos" +createGroup: "Criar grupo" +ownedGroups: "Grupo próprio" +invites: "Convidar" +invitations: "Convidar" +tags: "Etiquetas" +docSource: "Fonte deste documento" +createAccount: "Criar conta" +existingAccount: "Contas existentes" +regenerate: "Gerar novamente" +fontSize: "Tamanho do texto" +noFollowRequests: "Não há aplicação de acompanhamento" +openImageInNewTab: "Abrir a imagem numa nova aba" +dashboard: "Painel de controle" +local: "Local" +remote: "Remoto" +total: "Total" +weekOverWeekChanges: "Em comparação com a semana anterior" +dayOverDayChanges: "Dia anterior" +appearance: "Aparência" +clientSettings: "Configurações do cliente" +accountSettings: "Configurações da conta" +promotion: "Promoção" +promote: "Promover" +numberOfDays: "Dias" +hideThisNote: "Ocultar esta nota" +showFeaturedNotesInTimeline: "Mostrar notas recomendadas na linha do tempo" +objectStorage: "Armazenamento de objetos" +useObjectStorage: "Usar armazenamento de objetos" +objectStorageBaseUrl: "URL base" +objectStorageBaseUrlDesc: "O URL usado para referência. Se você estiver usando um + CDN ou Proxy, seu URL, S3:'https: // .s3.amazonaws.com', GCS, etc .:'https://storage.googleapis.com/ + ' ." +objectStorageBucket: "Bucket" +objectStorageBucketDesc: "Especifique o nome do bucket do serviço a ser usado." +objectStoragePrefix: "Prefixo" +objectStoragePrefixDesc: "Ele é armazenado neste diretório de prefixo." +objectStorageEndpoint: "Ponto final" +objectStorageEndpointDesc: "Especifique vazio para S3, caso contrário, especifique + o ponto final para cada serviço. Especifique como''ou': '." +objectStorageRegion: "Região" +objectStorageRegionDesc: "Especifique uma região como 'xx-east-1'. Caso seu serviço + não tenha o conceito de região, ele deve estar vazio ou 'us-east-1'." +objectStorageUseSSL: "Usar SSL" +objectStorageUseSSLDesc: "Desative-o se não quiser usar https para conexões de API" +objectStorageUseProxy: "Usar proxy" +objectStorageUseProxyDesc: "Se você não usa proxy para conexão de API, desative-o." +objectStorageSetPublicRead: "Definir 'public-read' ao fazer o upload" +serverLogs: "Registro do servidor" +deleteAll: "Apagar Tudo" +showFixedPostForm: "Exibir o formulário de postagem na parte superior da linha do + tempo" +newNoteRecived: "Nova nota recebida" +sounds: "Sons" +listen: "Ouvir" +none: "Nenhum" +showInPage: "Ver na página" +popout: "Sair" +volume: "Volume" +masterVolume: "volume principal" +details: "Detalhes" +output: "Resultado" +smtpHost: "hospedeiro" +smtpUser: "Nome de usuário" +smtpPass: "Senha" +clearCache: "Limpar memória transitória" +info: "Informações" +user: "Usuários" +file: "Ficheiros" +_email: + _follow: + title: "Você tem um novo seguidor" +_mfm: + mention: "Menção" + quote: "Citar" + emoji: "Emoji personalizado" + search: "Buscar" +_theme: + keys: + mention: "Menção" + renote: "Repostar" +_sfx: + note: "Posts" + notification: "Notificações" + chat: "Chat" +_widgets: + notifications: "Notificações" + timeline: "Timeline" + activity: "atividade" + federation: "União" + jobQueue: "Fila de trabalhos" +_cw: + show: "Carregar mais" +_visibility: + home: "casa" + followers: "Seguidores" +_profile: + name: "Nome" + username: "Nome de usuário" +_exportOrImport: + followingList: "Seguindo" + muteList: "Silenciar" + blockingList: "Bloquear" + userLists: "Listas" +_charts: + federation: "União" +_timelines: + home: "casa" +_pages: + blocks: + image: "imagem" + _button: + _action: + _pushEvent: + event: "Nome do evento" + message: "Mostrar mensagem quando ativado" + variable: "Variável a mandar" + no-variable: "Nenhum" + callAiScript: "Invocar AiScript" + _callAiScript: + functionName: "Nome da função" + radioButton: "Escolha" + _radioButton: + values: "Lista de escolhas separadas por quebras de texto" + script: + categories: + logical: "Operação lógica" + operation: "Cálculos" + comparison: "Comparação" + list: "Listas" + blocks: + _strReplace: + arg2: "Texto que irá ser substituído" + arg3: "Substituir com" + strReverse: "Virar texto" + join: "Sequência de texto" + _join: + arg1: "Listas" + arg2: "Separador" + add: "Somar" + _add: + arg1: "A" + arg2: "B" + subtract: "Subtrair" + _subtract: + arg1: "A" + arg2: "B" + multiply: "Multiplicar" + _multiply: + arg1: "A" + arg2: "B" + divide: "Dividir" + _divide: + arg1: "A" + arg2: "B" + mod: "O resto de" + _mod: + arg1: "A" + arg2: "B" + round: "Arredondar decimal" + _round: + arg1: "Numérico" + eq: "A e B são iguais" + _eq: + arg1: "A" + arg2: "B" + notEq: "A e B são diferentes" + _notEq: + arg1: "A" + arg2: "B" + and: "A e B" + _and: + arg1: "A" + arg2: "B" + or: "A OU B" + _or: + arg1: "A" + arg2: "B" + lt: "< A é menor do que B" + _lt: + arg1: "A" + arg2: "B" + gt: "> A é maior do que B" + _gt: + arg1: "A" + arg2: "B" + ltEq: "<= A é maior ou igual a B" + _ltEq: + arg1: "A" + arg2: "B" + gtEq: ">= A é maior ou igual a B" + _gtEq: + arg1: "A" + arg2: "B" + if: "Galho" + _if: + arg1: "Se" + arg2: "Então" + arg3: "Se não" + not: "NÃO" + _not: + arg1: "NÃO" + random: "Aleatório" + _random: + arg1: "Probabilidade" + rannum: "Numeral aleatório" + _rannum: + arg1: "Valor mínimo" + arg2: "Valor máximo" + randomPick: "Escolher aleatoriamente de uma lista" + _randomPick: + arg1: "Listas" + dailyRandom: "Aleatório (Muda uma vez por dia para cada usuário)" + _dailyRandom: + arg1: "Probabilidade" + dailyRannum: "Numeral aleatório (Muda uma vez por dia para cada usuário)" + _dailyRannum: + arg1: "Valor mínimo" + arg2: "Valor máximo" + dailyRandomPick: "Escolher aleatoriamente de uma lista (Muda uma vez por dia + para cada usuário)" + _dailyRandomPick: + arg1: "Listas" + seedRandom: "Aleatório (com semente)" + _seedRandom: + arg1: "Semente" + arg2: "Probabilidade" + seedRannum: "Número aleatório (com semente)" + _seedRannum: + arg1: "Semente" + arg2: "Valor mínimo" + arg3: "Valor máximo" + seedRandomPick: "Escolher aleatoriamente de uma lista (com uma semente)" + _seedRandomPick: + arg1: "Semente" + arg2: "Listas" + DRPWPM: "Escolher aleatoriamente de uma lista ponderada (Muda uma vez por dia + para cada usuário)" + _DRPWPM: + arg1: "Lista de texto" + pick: "Escolhe a partir da lista" + _pick: + arg1: "Listas" + arg2: "Posição" + listLen: "Pegar comprimento da lista" + _listLen: + arg1: "Listas" + number: "Numérico" + stringToNumber: "Texto para numérico" + _stringToNumber: + arg1: "Texto" + numberToString: "Numérico para texto" + _numberToString: + arg1: "Numérico" + splitStrByLine: "Dividir texto por quebras" + _splitStrByLine: + arg1: "Texto" + ref: "Variável" + aiScriptVar: "Variável AiScript" + fn: "Função" + _fn: + slots: "Espaços" + slots-info: "Separar cada espaço com uma quebra de texto" + arg1: "Resultado" + for: "Repetição 'for'" + _for: + arg1: "Número de repetições" + arg2: "Ação" + typeError: "Espaço {slot} aceita valores de tipo \"{expect}\", mas o valor dado + é do tipo \"{actual}\"!" + thereIsEmptySlot: "O espaço {slot} está vazio!" + types: + string: "Texto" + number: "Numérico" + array: "Listas" + stringArray: "Lista de texto" + emptySlot: "Espaço vazio" + enviromentVariables: "Variáveis de ambiente" + pageVariables: "Variáveis de página" +_relayStatus: + requesting: "Pendente" + accepted: "Aprovado" + rejected: "Recusado" +_notification: + fileUploaded: "Carregamento de arquivo efetuado com sucesso" + youGotMention: "{name} te mencionou" + youGotReply: "{name} te respondeu" + youGotQuote: "{name} te citou" + youGotPoll: "{name} votou em sua enquete" + youGotMessagingMessageFromUser: "{name} te mandou uma mensagem de bate-papo" + youGotMessagingMessageFromGroup: "Uma mensagem foi mandada para o grupo {name}" + youWereFollowed: "Você tem um novo seguidor" + youReceivedFollowRequest: "Você recebeu um pedido de seguimento" + yourFollowRequestAccepted: "Seu pedido de seguimento foi aceito" + youWereInvitedToGroup: "{userName} te convidou para um grupo" + pollEnded: "Os resultados da enquete agora estão disponíveis" + emptyPushNotificationMessage: "As notificações de alerta foram atualizadas" + _types: + all: "Todos" + follow: "Seguindo" + mention: "Menção" + reply: "Respostas" + renote: "Repostar" + quote: "Citar" + reaction: "Reações" + pollVote: "Votações em enquetes" + pollEnded: "Enquetes terminando" + receiveFollowRequest: "Recebeu pedidos de seguimento" + followRequestAccepted: "Aceitou pedidos de seguimento" + groupInvited: "Convites de grupo" + app: "Notificações de aplicativos conectados" + _actions: + followBack: "te seguiu de volta" + reply: "Responder" + renote: "Repostar" +_deck: + alwaysShowMainColumn: "Sempre mostrar a coluna principal" + columnAlign: "Alinhar colunas" + addColumn: "Adicionar coluna" + swapLeft: "Trocar de posição com a coluna à esquerda" + swapRight: "Trocar de posição com a coluna à direita" + swapUp: "Trocar de posição com a coluna acima" + swapDown: "Trocar de posição com a coluna abaixo" + popRight: "Acoplar coluna à direita" + profile: "Perfil" + _columns: + main: "Principal" + widgets: "Widgets" + notifications: "Notificações" + tl: "Timeline" + antenna: "Antenas" + list: "Listas" + mentions: "Menções" + direct: "Notas diretas" +editNote: Editar post +edited: Editado a {date} às {time} diff --git a/locales/ro-RO.yml b/locales/ro-RO.yml new file mode 100644 index 0000000..acf4084 --- /dev/null +++ b/locales/ro-RO.yml @@ -0,0 +1,776 @@ +_lang_: "Română" +headlineFirefish: "O rețea conectată prin note" +introFirefish: "Bine ai venit! Firefish este un serviciu de microblogging open source + și decentralizat.\nCreează \"note\" cu care să îți poți împărți gândurile cu oricine + din jurul tău. 📡\nCu \"reacții\" îți poți expirma rapid părerea despre notele oricui. + 👍\nHai să explorăm o lume nouă! 🚀" +monthAndDay: "{day}/{month}" +search: "Caută" +notifications: "Notificări" +username: "Nume de utilizator" +password: "Parolă" +forgotPassword: "Am uitat parola" +fetchingAsApObject: "Se aduce din Fediverse" +ok: "OK" +gotIt: "Am înțeles!" +cancel: "Anulează" +enterUsername: "Introdu numele de utilizator" +renotedBy: "Re-notat de {user}" +noNotes: "Nicio notă" +noNotifications: "Nicio notificare" +instance: "Instanță" +settings: "Setări" +basicSettings: "Setări generale" +otherSettings: "Alte Setări" +openInWindow: "Deschide într-o fereastră" +profile: "Profil" +timeline: "Cronologie" +noAccountDescription: "Acest utilizator încă nu a scris un bio." +login: "Autentifică-te" +loggingIn: "Se autentifică" +logout: "Deconectează-te" +signup: "Înregistrează-te" +uploading: "Se încarcă" +save: "Salvează" +users: "Utilizatori" +addUser: "Adăugă utilizator" +favorite: "Adaugă la favorite" +favorites: "Favorite" +unfavorite: "Elimină din favorite" +favorited: "Adăugat la favorite." +alreadyFavorited: "Deja adăugat la favorite." +cantFavorite: "Nu se poate adăuga la favorite." +pin: "Fixează pe profil" +unpin: "Anulati fixare" +copyContent: "Copiază conținutul" +copyLink: "Copiază link-ul" +delete: "Şterge" +deleteAndEdit: "Șterge și editează" +deleteAndEditConfirm: "Ești sigur că vrei să ștergi această notă și să o editezi? + Vei pierde reacțiile, re-notele și răspunsurile acesteia." +addToList: "Adaugă în listă" +sendMessage: "Trimite un mesaj" +copyUsername: "Copiază numele de utilizator" +searchUser: "Caută un utilizator" +reply: "Răspunde" +loadMore: "Incarcă mai mult" +showMore: "Arată mai mult" +showLess: "Închide" +youGotNewFollower: "te-a urmărit" +receiveFollowRequest: "Cerere de urmărire primită" +followRequestAccepted: "Cerere de urmărire acceptată" +mention: "Mențiune" +mentions: "Mențiuni" +directNotes: "Note directe" +importAndExport: "Importă / Exportă" +import: "Importă" +export: "Exportă" +files: "Fișiere" +download: "Descarcă" +driveFileDeleteConfirm: "Ești sigur ca vrei să ștergi fișierul \"{name}\"? Notele + atașate fișierului vor fi șterse și ele." +unfollowConfirm: "Ești sigur ca vrei să nu mai urmărești pe {name}?" +exportRequested: "Ai cerut un export. S-ar putea să ia un pic. Va fi adăugat in Drive-ul + tău odată completat." +importRequested: "Ai cerut un import. S-ar putea să ia un pic." +lists: "Liste" +noLists: "Nu ai nici o listă" +note: "Notă" +notes: "Note" +following: "Urmărești" +followers: "Urmăritori" +followsYou: "Te urmărește" +createList: "Creează listă" +manageLists: "Gestionează listele" +error: "Eroare" +somethingHappened: "A survenit o eroare" +retry: "Reîncearcă" +pageLoadError: "A apărut o eroare la încărcarea paginii." +pageLoadErrorDescription: "De obicei asta este cauzat de o eroare de rețea sau cache-ul + browser-ului. Încearcă să cureți cache-ul și apoi să încerci din nou puțin mai târziu." +serverIsDead: "Serverul nu răspunde. Te rugăm să aștepți o perioadă și să încerci + din nou." +youShouldUpgradeClient: "Pentru a vedea această pagină, te rugăm să îți actualizezi + clientul." +enterListName: "Introdu un nume pentru listă" +privacy: "Confidenţialitate" +makeFollowManuallyApprove: "Fă cererile de urmărire să necesite aprobare" +defaultNoteVisibility: "Vizibilitate implicită" +follow: "Urmărești" +followRequest: "Trimite cerere de urmărire" +followRequests: "Cereri de urmărire" +unfollow: "Nu mai urmări" +followRequestPending: "Cerere de urmărire în așteptare" +enterEmoji: "Introdu un emoji" +renote: "Re-notează" +unrenote: "Ia înapoi re-nota" +renoted: "Re-notat." +cantRenote: "Această postare nu poate fi re-notată." +cantReRenote: "O re-notă nu poate fi re-notată." +quote: "Citează" +pinnedNote: "Notă fixată" +pinned: "Fixat pe profil" +you: "Tu" +clickToShow: "Click pentru a afișa" +sensitive: "NSFW" +add: "Adaugă" +reaction: "Reacție" +reactionSetting: "Reacții care să apară in selectorul de reacții" +reactionSettingDescription2: "Trage pentru a rearanja, apasă pe \"+\" pentru a adăuga." +rememberNoteVisibility: "Amintește setarea de vizibilitate a notelor" +attachCancel: "Înlătură atașament" +markAsSensitive: "Marchează ca NSFW" +unmarkAsSensitive: "Demarchează ca NSFW" +enterFileName: "Introduceţi numele fişierului" +mute: "Amuțește" +unmute: "Înlătură amuțirea" +block: "Blochează" +unblock: "Deblochează" +suspend: "Suspendă" +unsuspend: "Anulează suspendare" +blockConfirm: "Ești sigur că vrei să blochezi acest cont?" +unblockConfirm: "Ești sigur ca vrei să deblochezi acest cont?" +suspendConfirm: "Ești sigur ca vrei să suspendezi acest cont?" +unsuspendConfirm: "Ești sigur ca vrei să nu mai suspendezi acest cont?" +selectList: "Selectează o listă" +selectAntenna: "Selectează o antenă" +selectWidget: "Selectați un widget" +editWidgets: "Editează widget-urile" +editWidgetsExit: "Terminat" +customEmojis: "Emoji personalizat" +emoji: "Emoji" +emojis: "Emoji-uri" +emojiName: "Numele emoji-ului" +emojiUrl: "URL-ul emoji-ului" +addEmoji: "Adaugă un emoji" +settingGuide: "Setări recomandate" +cacheRemoteFiles: "Ține fișierele externe in cache" +cacheRemoteFilesDescription: "Când această setare este dezactivată, fișierele externe + sunt încărcate direct din instanța externă. Dezactivarea va scădea utilizarea spațiului + de stocare, dar va crește traficul, deoarece thumbnail-urile nu vor fi generate." +flagAsBot: "Marchează acest cont ca bot" +flagAsBotDescription: "Activează această opțiune dacă acest cont este controlat de + un program. Daca e activată, aceasta va juca rolul unui indicator pentru dezvoltatori + pentru a preveni interacțiunea în lanțuri infinite cu ceilalți boți și ajustează + sistemele interne al Firefish pentru a trata acest cont drept un bot." +flagAsCat: "Marchează acest cont ca pisică" +flagAsCatDescription: "Activează această opțiune dacă acest cont este o pisică." +flagShowTimelineReplies: "Arată răspunsurile în cronologie" +flagShowTimelineRepliesDescription: "Dacă e activată vor fi arătate în cronologie + răspunsurile utilizatorilor către alte notele altor utilizatori." +autoAcceptFollowed: "Aprobă automat cererile de urmărire de la utilizatorii pe care + îi urmărești" +addAccount: "Adaugă un cont" +loginFailed: "Autentificare eșuată" +showOnRemote: "Vezi mai multe pe instanța externă" +general: "General" +wallpaper: "Imagine de fundal" +setWallpaper: "Setați imaginea de fundal" +removeWallpaper: "Șterge imagine de fundal" +searchWith: "Caută: {q}" +youHaveNoLists: "Nu ai nici o listă" +followConfirm: "Ești sigur ca vrei să urmărești pe {name}?" +proxyAccount: "Cont proxy" +proxyAccountDescription: "Un cont proxy este un cont care se comportă ca un urmăritor + extern pentru utilizatorii puși sub anumite condiții. De exemplu, când un cineva + adaugă un utilizator extern intr-o listă, activitatea utilizatorului extern nu va + fi adusă în instanță daca nici un utilizator local nu urmărește acel utilizator, + așa că în schimb contul proxy îl va urmări." +host: "Gazdă" +selectUser: "Selectează un utilizator" +recipient: "Destinatar" +annotation: "Adnotări" +federation: "Federație" +instances: "Instanțe" +registeredAt: "Înregistrat în" +latestRequestSentAt: "Ultima cerere trimisă" +latestRequestReceivedAt: "Ultima cerere primită" +latestStatus: "Ultimul status" +storageUsage: "Utilizare stocare" +charts: "Diagrame" +perHour: "Pe oră" +perDay: "Pe zi" +stopActivityDelivery: "Nu mai trimite activități" +blockThisInstance: "Blochează această instanță" +operations: "Operațiuni" +software: "Software" +version: "Versiune" +metadata: "Metadata" +monitor: "Monitor" +jobQueue: "coada de job-uri" +cpuAndMemory: "CPU și memorie" +network: "Rețea" +disk: "Disk" +instanceInfo: "Informații despre instanță" +statistics: "Statistici" +clearQueue: "Șterge coada" +clearQueueConfirmTitle: "Ești sigur că vrei să cureți coada?" +clearQueueConfirmText: "Orice notă rămasă în coadă nu va fi federată. De obicei această + operație nu este necesară." +clearCachedFiles: "Golește cache-ul" +clearCachedFilesConfirm: "Ești sigur că vrei să ștergi toate fișierele externe din + cache?" +blockedInstances: "Instanțe blocate" +blockedInstancesDescription: "Scrie hostname-urile instanțelor pe care dorești să + le blochezi. Instanțele listate nu vor mai putea să comunice cu această instanță." +muteAndBlock: "Amuțiri și Blocări" +mutedUsers: "Utilizatori amuțiți" +blockedUsers: "Utilizatori blocați" +noUsers: "Niciun utilizator" +editProfile: "Editează profilul" +noteDeleteConfirm: "Ești sigur că vrei să ștergi această notă?" +pinLimitExceeded: "Nu poți mai fixa mai multe note" +intro: "Firefish s-a instalat! Te rog crează un utilizator admin." +done: "Gata" +processing: "Se procesează" +preview: "Previzualizare" +default: "Prestabilit" +noCustomEmojis: "Nu e niciun emoji" +noJobs: "Nu e niciun job" +federating: "Federație" +blocked: "Blocat" +suspended: "Suspendat" +all: "Tot" +subscribing: "Abonare" +publishing: "Publicare" +notResponding: "Nu răspunde" +instanceFollowing: "Urmărind în instanță" +instanceFollowers: "Urmăritori ai instanței" +instanceUsers: "Utilizatori ai acestei instanțe" +changePassword: "Schimbă parolă" +security: "Securitate" +retypedNotMatch: "Intrările nu corespund" +currentPassword: "Parola curentă" +newPassword: "Parola nouă" +newPasswordRetype: "Rescrie parola nouă" +attachFile: "Atașează fișiere" +more: "Mai mult!" +featured: "Evidențiat" +usernameOrUserId: "Nume sau ID de utilizator" +noSuchUser: "Utilizatorul nu a fost găsit" +lookup: "Privire" +announcements: "Anunțuri" +imageUrl: "URL-ul imaginii" +remove: "Şterge" +removed: "Șterș cu succes" +removeAreYouSure: "Ești sigur că vrei să înlături {x}?" +deleteAreYouSure: "Ești sigur că vrei să ștergi {x}?" +resetAreYouSure: "Sigur vrei să resetezi?" +saved: "Salvat" +messaging: "Chat" +upload: "Încarcă" +keepOriginalUploading: "Păstrează imaginea originală" +keepOriginalUploadingDescription: "Salvează imaginea originala încărcată fără modificări. + Dacă e oprită, o versiune pentru afișarea pe web va fi generată la încărcare." +fromDrive: "Din Drive" +fromUrl: "Din URL" +uploadFromUrl: "Încarcă dintr-un URL" +uploadFromUrlDescription: "URL-ul fișierului pe care dorești să îl încarci" +uploadFromUrlRequested: "Încărcare solicitată" +uploadFromUrlMayTakeTime: "S-ar putea să ia puțin până se finalizează încărcarea." +explore: "Explorează" +messageRead: "Citit" +noMoreHistory: "Nu există mai mult istoric" +startMessaging: "Începe un chat nou" +nUsersRead: "citit de {n}" +agreeTo: "Sunt de acord cu {0}" +tos: "Termenii de utilizare" +start: "Să începem" +home: "Acasă" +remoteUserCaution: "Deoarece acest utilizator este dintr-o instanță externă, informația + afișată poate fi incompletă." +activity: "Activitate" +images: "Imagini" +birthday: "Zi de naștere" +yearsOld: "{age} ani" +registeredDate: "Data înregistrării" +location: "Locație" +theme: "Teme" +themeForLightMode: "Temă folosită pentru Modul Luminat" +themeForDarkMode: "Temă folosită pentru Modul Întunecat" +light: "Luminos" +dark: "Întunecat" +lightThemes: "Teme luminoase" +darkThemes: "Teme întunecate" +syncDeviceDarkMode: "Sincronizează Modul Întunecat cu setările dispozitivului" +drive: "Drive" +fileName: "Nume fișier" +selectFile: "Alege un fisier" +selectFiles: "Alege fișiere" +selectFolder: "Selectează un folder" +selectFolders: "Selectează folderele" +renameFile: "Redenumește fișier" +folderName: "Nume folder" +createFolder: "Crează folder" +renameFolder: "Redenumește acest folder" +deleteFolder: "Șterge acest folder" +addFile: "Adăugați un fișier" +emptyDrive: "Drive-ul tău e gol" +emptyFolder: "Folder-ul acesta este gol" +unableToDelete: "Nu se poate șterge" +inputNewFileName: "Introdu un nou nume de fișier" +inputNewDescription: "Introdu o descriere nouă" +inputNewFolderName: "Introdu un nume de folder nou" +circularReferenceFolder: "Destinația folderului este un subfolder al folderului pe + care dorești să îl muți." +hasChildFilesOrFolders: "Acest folder nu este gol, așa că nu poate fi șters." +copyUrl: "Copiază URL" +rename: "Redenumește" +avatar: "Avatar" +banner: "Banner" +nsfw: "NSFW" +whenServerDisconnected: "Când pierzi conexiunea cu serverul" +disconnectedFromServer: "Conecțiunea cu serverul a fost pierdută" +reload: "Reîncarcă" +doNothing: "Ignoră" +reloadConfirm: "Ai dori să reîmprospătezi cronologia?" +watch: "Vezi" +unwatch: "Oprește-te din văzut" +accept: "Acceptă" +reject: "Respinge" +normal: "Normal" +instanceName: "Numele instanței" +instanceDescription: "Descrierea instanței" +maintainerName: "Administrator" +maintainerEmail: "Email-ul administratorului" +tosUrl: "URL-ul Termenilor de utilizare" +thisYear: "An" +thisMonth: "Lună" +today: "Azi" +dayX: "{day}" +monthX: "{month}" +yearX: "{year}" +pages: "Pagini" +enableLocalTimeline: "Activează cronologia locală" +enableGlobalTimeline: "Activeaza cronologia globală" +disablingTimelinesInfo: "Administratorii și Moderatorii vor avea mereu access la toate + cronologiile, chiar dacă nu sunt activate." +registration: "Inregistrare" +enableRegistration: "Activează înregistrările pentru utilizatori noi" +invite: "Invită" +driveCapacityPerLocalAccount: "Capacitatea Drive-ului per utilizator local" +driveCapacityPerRemoteAccount: "Capacitatea Drive-ului per utilizator extern" +inMb: "În megabytes" +iconUrl: "URL-ul iconiței" +bannerUrl: "URL-ul imaginii de banner" +backgroundImageUrl: "URL-ul imaginii de fundal" +basicInfo: "Informații de bază" +pinnedUsers: "Utilizatori fixați" +pinnedUsersDescription: "Scrie utilizatorii, separați prin pauză de rând, care vor + fi fixați pe pagina \"Explorează\"." +pinnedPages: "Pagini fixate" +pinnedPagesDescription: "Introdu linkurile Paginilor pe care le vrei fixate in vâruful + paginii acestei instanțe, separate de pauze de rând." +pinnedClipId: "ID-ul clip-ului pe care să îl fixezi" +pinnedNotes: "Notă fixată" +hcaptcha: "hCaptcha" +enableHcaptcha: "Activează hCaptcha" +hcaptchaSiteKey: "Site key" +hcaptchaSecretKey: "Secret key" +recaptcha: "reCAPTCHA" +enableRecaptcha: "Activează reCAPTCHA" +recaptchaSiteKey: "Site key" +recaptchaSecretKey: "Secret key" +avoidMultiCaptchaConfirm: "Folosirea mai multor sisteme Captcha poate cauza interferență + între acestea. Ai dori să dezactivezi alte sisteme Captcha acum active? Dacă preferi + să rămână activate, apasă Anulare." +antennas: "Antene" +manageAntennas: "Gestionează Antenele" +name: "Nume" +antennaSource: "Sursa antenei" +antennaKeywords: "Cuvinte cheie ascultate" +antennaExcludeKeywords: "Cuvinte cheie excluse" +antennaKeywordsDescription: "Separă cu spații pentru o condiție ȘI sau cu o întrerupere + de rând pentru o condiție SAU." +notifyAntenna: "Notifică-mă pentru note noi" +withFileAntenna: "Doar note cu fișiere" +enableServiceworker: "Activează ServiceWorker" +antennaUsersDescription: "Scrie un nume de utilizator per linie" +caseSensitive: "Sensibil la majuscule și minuscule" +withReplies: "Include răspunsuri" +connectedTo: "Următoarele conturi sunt conectate" +notesAndReplies: "Note și răspunsuri" +withFiles: "Incluzând fișiere" +silence: "Amuțește" +silenceConfirm: "Ești sigur că vrei să amuțești acest utilizator?" +unsilence: "Anulează amuțirea" +unsilenceConfirm: "Ești sigur că vrei să anulezi amuțirea acestui utilizator?" +popularUsers: "Utilizatori populari" +recentlyUpdatedUsers: "Utilizatori activi recent" +recentlyRegisteredUsers: "Utilizatori ce s-au alăturat recent" +recentlyDiscoveredUsers: "Utilizatori descoperiți recent" +exploreUsersCount: "Aici sunt {count} utilizatori" +exploreFediverse: "Explorează Fediverse-ul" +popularTags: "Taguri populare" +userList: "Liste" +about: "Despre" +aboutFirefish: "Despre Firefish" +administrator: "Administrator" +token: "Token" +twoStepAuthentication: "Autentificare în doi pași" +moderator: "Moderator" +nUsersMentioned: "Menționat de {n} utilizatori" +securityKey: "Cheie de securitate" +securityKeyName: "Numele cheii" +registerSecurityKey: "Înregistrează o cheie de securitate" +lastUsed: "Ultima utilizată" +unregister: "Dezînregistrează" +passwordLessLogin: "Autentificare fără parolă" +resetPassword: "Resetează parola" +newPasswordIs: "Noua parolă este \"{password}\"" +reduceUiAnimation: "Redu animațiile interfeței" +share: "Distribuie" +notFound: "Nu a fost găsit" +notFoundDescription: "N-a fost găsită nicio pagină cu acest URL." +uploadFolder: "Folder implicit pentru încărcări" +cacheClear: "Golește cache-ul" +markAsReadAllNotifications: "Marchează toate notificările drept citit" +markAsReadAllUnreadNotes: "Marchează toate notele drept citit" +markAsReadAllTalkMessages: "Marchează toate mesajele drept citit" +help: "Ajutor" +inputMessageHere: "Introdu un mesaj aici" +close: "Închide" +group: "Grup" +groups: "Grupuri" +createGroup: "Crează un grup" +ownedGroups: "Grupuri deținute" +joinedGroups: "Grupuri alăturate" +invites: "Invită" +groupName: "Numele grupului" +members: "Membri" +transfer: "Transferă" +messagingWithUser: "Chat privat" +messagingWithGroup: "Chat de grup" +title: "Titlu" +text: "Text" +enable: "Activează" +next: "Următorul" +retype: "Introdu din nou" +noteOf: "Notă de {user}" +inviteToGroup: "Invită în grup" +quoteAttached: "Citat" +quoteQuestion: "Vrei să adaugi ca citat?" +noMessagesYet: "Niciun mesaj încă" +newMessageExists: "Ai mesaje noi" +onlyOneFileCanBeAttached: "Poți atașa un singur fișier la un mesaj" +signinRequired: "Te rog autentifică-te" +invitations: "Invită" +invitationCode: "Cod de invitație" +checking: "Se verifică..." +available: "Disponibil" +unavailable: "Indisponibil" +usernameInvalidFormat: "Poți folosi litere mari și mici, numere și underscore-uri." +tooShort: "Prea scurt" +tooLong: "Prea lung" +weakPassword: "Parolă slabă" +normalPassword: "Parolă medie" +veryStrongPassword: "Parolă puternică" +passwordMatched: "Se potrivește!" +passwordNotMatched: "Nu se potrivește" +signinWith: "Autentifică-te cu {x}" +signinFailed: "Nu se poate autentifica. Numele de utilizator sau parola introduse + sunt incorecte." +tapSecurityKey: "Apasă pe cheia ta de securitate." +or: "Sau" +language: "Limbă" +uiLanguage: "Limba interfeței" +groupInvited: "Ai fost invitat într-un grup" +aboutX: "Despre {x}" +useOsNativeEmojis: "Folosește emojiuri native OS-ului" +disableDrawer: "Nu folosi meniuri în stil sertar" +youHaveNoGroups: "Nu ai niciun grup" +joinOrCreateGroup: "Primește o invitație într-un grup sau creează unul nou." +noHistory: "Nu există istoric" +signinHistory: "Istoric autentificări" +disableAnimatedMfm: "Dezactivează MFM cu animații" +doing: "Se procesează..." +category: "Categorie" +tags: "Etichete" +docSource: "Sursa acestui document" +createAccount: "Creează un cont" +existingAccount: "Cont existent" +regenerate: "Regenerează" +fontSize: "Mărimea fontului" +noFollowRequests: "Nu ai nicio cerere de urmărire în așteptare" +openImageInNewTab: "Deschide imaginile în taburi noi" +dashboard: "Panou de control" +local: "Local" +remote: "Extern" +total: "Total" +weekOverWeekChanges: "Schimbări până săptămâna trecută" +dayOverDayChanges: "Schimbări până ieri" +appearance: "Aspect" +clientSettings: "Setări client" +accountSettings: "Setări cont" +promotion: "Promovat" +promote: "Promovează" +numberOfDays: "Numărul zilelor" +hideThisNote: "Ascunde această notă" +showFeaturedNotesInTimeline: "Arată notele recomandate în cronologii" +objectStorage: "Object Storage" +useObjectStorage: "Folosește Object Storage" +objectStorageBaseUrl: "URL de bază" +objectStorageBaseUrlDesc: "URL-ul este folosit pentru referință. Specifică URL-ul + CDN-ului sau Proxy-ului tău dacă folosești unul. Pentru S3 folosește 'https://.s3.amazonaws.com' + și pentru GCS sau servicii echivalente folosește 'https://storage.googleapis.com/', + etc." +objectStorageBucket: "Bucket" +objectStorageBucketDesc: "Te rog specifică numele bucket-ului furnizorului tău." +objectStoragePrefix: "Prefix" +objectStoragePrefixDesc: "Fișierele vor fi stocate sub directoare cu acest prefix." +objectStorageEndpoint: "Endpoint" +objectStorageEndpointDesc: "Lasă acest câmp gol dacă folosești AWS S3, dacă nu specifică + endpoint-ul ca '' sau ':', depinzând de ce serviciu folosești." +objectStorageRegion: "Regiune" +objectStorageRegionDesc: "Specifică o regiune precum 'xx-east-1'. Dacă serviciul tău + nu face distincția între regiuni lasă acest câmp gol sau introdu 'us-east-1'." +objectStorageUseSSL: "Folosește SSl" +objectStorageUseSSLDesc: "Oprește această opțiune dacă nu vei folosi HTTPS pentru + conexiunile API-ului" +objectStorageUseProxy: "Conectează-te prin Proxy" +objectStorageUseProxyDesc: "Oprește această opțiune dacă vei nu folosi un Proxy pentru + conexiunile API-ului" +objectStorageSetPublicRead: "Setează \"public-read\" pentru încărcare" +serverLogs: "Loguri server" +deleteAll: "Șterge tot" +showFixedPostForm: "Arată caseta de postare în vârful cronologie" +newNoteRecived: "Sunt note noi" +sounds: "Sunete" +listen: "Ascultă" +none: "Nimic" +showInPage: "Arată în pagină" +popout: "Scoate în afară" +volume: "Volum" +masterVolume: "Volumul principal" +details: "Detalii" +chooseEmoji: "Alege un emoji" +unableToProcess: "Această operație nu poate fi completată" +recentUsed: "Folosit recent" +install: "Instalează" +uninstall: "Dezinstalează" +installedApps: "Aplicații autorizate" +nothing: "Nu e nimic de văzut aici" +installedDate: "Autorizat la data de" +lastUsedDate: "Folosit ultima oara la" +state: "Stare" +sort: "Sortează" +ascendingOrder: "Crescător" +descendingOrder: "Descrescător" +scratchpad: "Scratchpad" +scratchpadDescription: "Scratchpad-ul oferă un mediu de experimentare în AiScript. + Poți scrie, executa și verifica rezultatele acestuia interacționând cu Firefish + în el." +output: "Ieșire" +script: "Script" +disablePagesScript: "Dezactivează AiScript în Pagini" +updateRemoteUser: "Actualizează informațiile utilizatorului extern" +deleteAllFiles: "Șterge toate fișierele" +deleteAllFilesConfirm: "Ești sigur că vrei să ștergi toate fișierele?" +removeAllFollowing: "Dezurmărește toți utilizatorii urmăriți" +removeAllFollowingDescription: "Asta va dez-urmări toate conturile din {host}. Te + rog execută asta numai dacă instanța, de ex., nu mai există." +userSuspended: "Acest utilizator a fost suspendat." +userSilenced: "Acest utilizator a fost setat silențios." +yourAccountSuspendedTitle: "Acest cont a fost suspendat" +yourAccountSuspendedDescription: "Acest cont a fost suspendat din cauza încălcării + termenilor de serviciu al serverului sau ceva similar. Contactează administratorul + dacă ai dori să afli un motiv mai detaliat. Te rog nu crea un cont nou." +menu: "Meniu" +divider: "Separator" +addItem: "Adaugă element" +relays: "Relee" +addRelay: "Adaugă Releu" +inboxUrl: "URL-ul inbox-ului" +addedRelays: "Relee adăugate" +serviceworkerInfo: "Trebuie să fie activat pentru notificări push." +deletedNote: "Notă ștearsă" +invisibleNote: "Note ascunse" +enableInfiniteScroll: "Încarcă mai mult automat" +visibility: "Vizibilitate" +poll: "Sondaj" +useCw: "Ascunde conținutul" +enablePlayer: "Deschide player-ul video" +disablePlayer: "Închide player-ul video" +expandTweet: "Expandează tweet" +themeEditor: "Editor de teme" +description: "Descriere" +describeFile: "Adaugă titrări" +enterFileDescription: "Introdu titrările" +author: "Autor" +leaveConfirm: "Ai schimbări nesalvate. Vrei să renunți la ele?" +manage: "Gestionare" +plugins: "Pluginuri" +deck: "Deck" +undeck: "Părăsește Deck" +useBlurEffectForModal: "Folosește efect de blur pentru modale" +width: "Lăţime" +height: "Înălţime" +large: "Mare" +medium: "Mediu" +small: "Mic" +generateAccessToken: "Generează token de acces" +permission: "Permisiuni" +enableAll: "Actevează tot" +disableAll: "Dezactivează tot" +tokenRequested: "Acordă acces la cont" +pluginTokenRequestedDescription: "Acest plugin va putea să folosească permisiunile + setate aici." +notificationType: "Tipul notificării" +edit: "Editează" +emailServer: "Server email" +enableEmail: "Activează distribuția de emailuri" +emailConfigInfo: "Folosit pentru a confirma emailul tău în timpul logări dacă îți + uiți parola" +email: "Email" +emailAddress: "Adresă de email" +smtpConfig: "Configurare Server SMTP" +smtpHost: "Gazdă" +smtpPort: "Port" +smtpUser: "Nume de utilizator" +smtpPass: "Parolă" +emptyToDisableSmtpAuth: "Lasă username-ul și parola necompletate pentru a dezactiva + verificarea SMTP" +smtpSecure: "Folosește SSL/TLS implicit pentru conecțiunile SMTP" +smtpSecureInfo: "Oprește opțiunea asta dacă STARTTLS este folosit" +testEmail: "Testează livrarea emailurilor" +wordMute: "Cuvinte pe mut" +regexpError: "Eroare de Expresie Regulată" +regexpErrorDescription: "A apărut o eroare în expresia regulată pe linia {line} al + cuvintelor {tab} setate pe mut:" +instanceMute: "Instanțe pe mut" +userSaysSomething: "{name} a spus ceva" +makeActive: "Activează" +display: "Arată" +copy: "Copiază" +metrics: "Metrici" +overview: "Privire de ansamblu" +logs: "Log-uri" +delayed: "Întârziate" +database: "Baza de date" +channel: "Canale" +create: "Crează" +notificationSetting: "Setări notificări" +notificationSettingDesc: "Selectează tipurile de notificări care să fie arătate" +useGlobalSetting: "Folosește setările globale" +useGlobalSettingDesc: "Dacă opțiunea e pornită, notificările contului tău vor fi folosite. + Dacă e oprită, configurația va fi individuală." +other: "Altele" +regenerateLoginToken: "Regenerează token de login" +regenerateLoginTokenDescription: "Regenerează token-ul folosit intern în timpul logări. + În mod normal asta nu este necesar. Odată regenerat, toate dispozitivele vor fi + delogate." +setMultipleBySeparatingWithSpace: "Separă mai multe intrări cu spații." +fileIdOrUrl: "Introdu ID sau URL" +behavior: "Comportament" +sample: "exemplu" +abuseReports: "Rapoarte" +reportAbuse: "Raportează" +reportAbuseOf: "Raportează {name}" +fillAbuseReportDescription: "Te rog scrie detaliile legate de acest raport. Dacă este + despre o notă specifică, te rog introdu URL-ul ei." +abuseReported: "Raportul tău a fost trimis. Mulțumim." +reporter: "Raportorul" +reporteeOrigin: "Originea raportatului" +reporterOrigin: "Originea raportorului" +forwardReport: "Redirecționează raportul către instanța externă" +forwardReportIsAnonymous: "În locul contului tău, va fi afișat un cont anonim, de + sistem, ca raportor către instanța externă." +send: "Trimite" +abuseMarkAsResolved: "Marchează raportul ca rezolvat" +openInNewTab: "Deschide în tab nou" +openInSideView: "Deschide în vedere laterală" +defaultNavigationBehaviour: "Comportament de navigare implicit" +editTheseSettingsMayBreakAccount: "Editarea acestor setări îți pot defecta contul." +waitingFor: "Așteptând pentru {x}" +random: "Aleator" +system: "Sistem" +switchUi: "Schimbă UI" +desktop: "Desktop" +clearCache: "Golește cache-ul" +info: "Despre" +user: "Utilizatori" +administration: "Gestionare" +middle: "Mediu" +sent: "Trimite" +file: "Fișiere" +_email: + _follow: + title: "te-a urmărit" +_mfm: + mention: "Mențiune" + quote: "Citează" + emoji: "Emoji personalizat" + search: "Caută" +_theme: + description: "Descriere" + keys: + mention: "Mențiune" + renote: "Re-notează" + divider: "Separator" +_sfx: + note: "Note" + notification: "Notificări" + chat: "Chat" +_widgets: + notifications: "Notificări" + timeline: "Cronologie" + activity: "Activitate" + federation: "Federație" + jobQueue: "coada de job-uri" +_cw: + show: "Incarcă mai mult" +_visibility: + home: "Acasă" + followers: "Urmăritori" +_profile: + name: "Nume" + username: "Nume de utilizator" +_exportOrImport: + followingList: "Urmărești" + muteList: "Amuțește" + blockingList: "Blochează" + userLists: "Liste" +_charts: + federation: "Federație" +_timelines: + home: "Acasă" +_pages: + blocks: + image: "Imagini" + script: + categories: + list: "Liste" + blocks: + _join: + arg1: "Liste" + _randomPick: + arg1: "Liste" + _dailyRandomPick: + arg1: "Liste" + _seedRandomPick: + arg2: "Liste" + _pick: + arg1: "Liste" + _listLen: + arg1: "Liste" + types: + array: "Liste" +_notification: + youWereFollowed: "te-a urmărit" + youWereInvitedToGroup: "Ai fost invitat într-un grup" + _types: + follow: "Urmărești" + mention: "Mențiune" + renote: "Re-notează" + quote: "Citează" + reaction: "Reacție" + _actions: + reply: "Răspunde" + renote: "Re-notează" +_deck: + _columns: + notifications: "Notificări" + tl: "Cronologie" + antenna: "Antene" + list: "Liste" + mentions: "Mențiuni" diff --git a/locales/ru-RU.yml b/locales/ru-RU.yml new file mode 100644 index 0000000..c2d59df --- /dev/null +++ b/locales/ru-RU.yml @@ -0,0 +1,2150 @@ +_lang_: "Русский" +headlineFirefish: "Сеть, сплетённая из заметок" +introFirefish: "Firefish - это децентрализованная платформа социальных сетей с открытым + исходным кодом, которая свободна навсегда! 🚀" +monthAndDay: "{day}.{month}" +search: "Поиск" +notifications: "Уведомления" +username: "Имя пользователя" +password: "Пароль" +forgotPassword: "Пароль забыт" +fetchingAsApObject: "Приём с других сайтов" +ok: "Окей" +gotIt: "Ясно!" +cancel: "Отмена" +enterUsername: "Введите имя пользователя" +renotedBy: "{user} делится" +noNotes: "Нет ни одного поста" +noNotifications: "Нет ни одного уведомления" +instance: "Сервер" +settings: "Настройки" +basicSettings: "Основные настройки" +otherSettings: "Прочие настройки" +openInWindow: "Открывать в плавающих окнах" +profile: "Профиль" +timeline: "Лента" +noAccountDescription: "Пользователь ничего не написал про себя." +login: "Войти" +loggingIn: "Выполняется вход" +logout: "Выйти" +signup: "Зарегистрироваться" +uploading: "Загрузка..." +save: "Сохранить" +users: "Пользователи" +addUser: "Добавить пользователя" +favorite: "В избранное" +favorites: "Избранное" +unfavorite: "Убрать из избранного" +favorited: "Добавлено в избранное." +alreadyFavorited: "Уже есть в избранном." +cantFavorite: "Не удалось добавить в избранное." +pin: "Закрепить в профиле" +unpin: "Открепить от профиля" +copyContent: "Скопировать содержимое" +copyLink: "Скопировать ссылку" +delete: "Удалить" +deleteAndEdit: "Удалить и отредактировать" +deleteAndEditConfirm: "Удалить этот пост и создать отредактированный? Все реакции, + ссылки и ответы на существующий будут потеряны." +addToList: "Добавить в список" +sendMessage: "Отправить сообщение" +copyUsername: "Скопировать имя пользователя" +searchUser: "Поиск людей" +reply: "Ответить" +loadMore: "Загрузить ещё" +showMore: "Показать еще" +showLess: "Закрыть" +youGotNewFollower: "Новый подписчик" +receiveFollowRequest: "Получен запрос на подписку" +followRequestAccepted: "Запрос на подписку принят" +mention: "Упоминание" +mentions: "Упоминания" +directNotes: "Личные сообщения" +importAndExport: "Импорт и экспорт" +import: "Импорт" +export: "Экспорт" +files: "Файлы" +download: "Скачать" +driveFileDeleteConfirm: "Удалить файл «{name}»? Он будет удален со всех постов которые + содержат его как вложение." +unfollowConfirm: "Удалить из подписок пользователя {name}?" +exportRequested: "Вы запросили экспорт. Это может занять некоторое время. Результат + будет добавлен на «Диск»." +importRequested: "Вы запросили импорт. Это может занять некоторое время." +lists: "Списки" +noLists: "Нет ни одного списка" +note: "Пост" +notes: "Посты" +following: "Подписки" +followers: "Подписчики" +followsYou: "Читает вас" +createList: "Создать список" +manageLists: "Управление списками" +error: "Ошибка" +somethingHappened: "Что-то пошло не так" +retry: "Повторить попытку" +pageLoadError: "Не удалось загрузить страницу." +pageLoadErrorDescription: "Обычно это случается из-за сбоев в сети или кэша браузера. + Попробуйте очистить кэш, или подождать пару минут, а потом попытаться загрузить + страницу снова." +serverIsDead: "Ответа от сервера нет. Пожалуйста, подождите немного и повторите попытку." +youShouldUpgradeClient: "Чтобы просмотреть эту страницу, пожалуйста, обновите ее." +enterListName: "Название списка" +privacy: "Конфиденциальность" +makeFollowManuallyApprove: "Принимать подписчиков вручную" +defaultNoteVisibility: "Видимость постов по умолчанию" +follow: "Подписка" +followRequest: "Запрос на подписку" +followRequests: "Запросы на подписку" +unfollow: "Отписаться" +followRequestPending: "Нерассмотренный запрос на подписку" +enterEmoji: "Введите эмодзи" +renote: "Репост" +unrenote: "Отмена репоста" +renoted: "Репост совершён." +cantRenote: "Это нельзя репостить." +cantReRenote: "Невозможно репостить репост." +quote: "Цитата" +pinnedNote: "Закреплённый пост" +pinned: "Закрепить в профиле" +you: "Вы" +clickToShow: "Нажмите для просмотра" +sensitive: "Содержимое не для всех" +add: "Добавить" +reaction: "Реакция" +reactionSetting: "Реакции, отображаемые в палитре" +reactionSettingDescription2: "Расставляйте перетаскиванием, удаляйте нажатием, добавляйте + кнопкой «+»." +rememberNoteVisibility: "Запоминать видимость постов" +attachCancel: "Удалить вложение" +markAsSensitive: "Отметить как «не для всех»" +unmarkAsSensitive: "Снять отметку «не для всех»" +enterFileName: "Введите имя файла" +mute: "Скрыть" +unmute: "Отменить скрытие" +block: "Заблокировать" +unblock: "Разблокировать" +suspend: "Заморозить" +unsuspend: "Разморозить" +blockConfirm: "Заблокировать этот аккаунт?" +unblockConfirm: "Разблокировать этот аккаунт?" +suspendConfirm: "Заморозить этот аккаунт?" +unsuspendConfirm: "Разморозить этот аккаунт?" +selectList: "Выберите список" +selectAntenna: "Выберите антенну" +selectWidget: "Выберите виджет" +editWidgets: "Редактировать виджеты" +editWidgetsExit: "Готово" +customEmojis: "Собственные эмодзи" +emoji: "Эмодзи" +emojis: "Эмодзи" +emojiName: "Название эмодзи" +emojiUrl: "URL эмодзи" +addEmoji: "Добавить эмодзи" +settingGuide: "Рекомендуемые настройки" +cacheRemoteFiles: "Кешировать внешние файлы" +cacheRemoteFilesDescription: "Когда эта настройка отключена, файлы с других сайтов + будут загружаться прямо оттуда. Это сэкономит место на сервере, но увеличит трафик, + так как не будут создаваться эскизы." +flagAsBot: "Аккаунт бота" +flagAsBotDescription: "Включите, если этот аккаунт управляется программой. Это позволит + системе Firefish учитывать это, а также поможет разработчикам других ботов предотвратить + бесконечные циклы взаимодействия." +flagAsCat: "Аккаунт кота" +flagAsCatDescription: "Вы получите кошачьи ушки и будете говорить как кот!" +flagShowTimelineReplies: "Показывать ответы на посты в ленте" +flagShowTimelineRepliesDescription: "Если этот параметр включен, то в ленте, в дополнение + к постам пользователя, отображаются ответы на другие посты пользователя." +autoAcceptFollowed: "Принимать подписчиков автоматически" +addAccount: "Добавить учётную запись" +loginFailed: "Неудачная попытка входа" +showOnRemote: "Открыть оригинал" +general: "Общее" +wallpaper: "Обои" +setWallpaper: "Установить обои" +removeWallpaper: "Удалить обои" +searchWith: "Найденное «{q}»" +youHaveNoLists: "У вас нет ни одного списка" +followConfirm: "Подписаться на {name}?" +proxyAccount: "Учётная запись прокси" +proxyAccountDescription: "Учетная запись прокси предназначена служить подписчиком + на пользователей с других сайтов. Например, если пользователь добавит кого-то с + другого сайта а список, деятельность того не отобразится, пока никто с этого же + сайта не подписан на него. Чтобы это стало возможным, на него подписывается прокси." +host: "Хост" +selectUser: "Выберите пользователя" +recipient: "Кому" +annotation: "Описание" +federation: "Федерация" +instances: "Серверы" +registeredAt: "Первое наблюдение" +latestRequestSentAt: "Последний отправленный запрос" +latestRequestReceivedAt: "Последний полученный запрос" +latestStatus: "Последний статус" +storageUsage: "Использовано" +charts: "Диаграммы" +perHour: "По часам" +perDay: "По дням" +stopActivityDelivery: "Остановить отправку обновлений активности" +blockThisInstance: "Блокировать этот сервер" +operations: "Операции" +software: "Программы" +version: "Версия" +metadata: "Метаданные" +monitor: "Монитор" +jobQueue: "Очередь заданий" +cpuAndMemory: "Процессор и память" +network: "Сеть" +disk: "Диск" +instanceInfo: "Информация о сервере" +statistics: "Статистика" +clearQueue: "Очистить очередь" +clearQueueConfirmTitle: "Очистить очередь?" +clearQueueConfirmText: "Всё, что осталось в очереди, не будет доставлено. Обычно эта + операция НЕ нужна." +clearCachedFiles: "Очистить кэш" +clearCachedFilesConfirm: "Удалить все закэшированные файлы с других сайтов?" +blockedInstances: "Заблокированные серверы" +blockedInstancesDescription: "Введите список серверов, которые хотите заблокировать. + Они больше не смогут обмениваться с вашим сервером." +muteAndBlock: "Скрытие и блокировка" +mutedUsers: "Скрытые пользователи" +blockedUsers: "Заблокированные пользователи" +noUsers: "Нет ни одного пользователя" +editProfile: "Редактировать профиль" +noteDeleteConfirm: "Вы хотите удалить этот пост?" +pinLimitExceeded: "Нельзя закрепить ещё больше постов" +intro: "Установка Firefish завершена! А теперь создайте учетную запись администратора." +done: "Готово" +processing: "Обработка" +preview: "Предпросмотр" +default: "По умолчанию" +defaultValueIs: "По умолчанию: {value}" +noCustomEmojis: "Собственные эмодзи отсутствуют" +noJobs: "Нет заданий" +federating: "Федерируется" +blocked: "Заблокировано" +suspended: "Заморожено" +all: "Всё" +subscribing: "Подписка" +publishing: "Публикация" +notResponding: "Нет ответа" +instanceFollowing: "Подписанные на сервере" +instanceFollowers: "Подписчики сервера" +instanceUsers: "Пользователи сервера" +changePassword: "Изменить пароль" +security: "Безопасность" +retypedNotMatch: "Не совпадают." +currentPassword: "Текущий пароль" +newPassword: "Новый пароль" +newPasswordRetype: "Новый пароль (ещё раз)" +attachFile: "Прикрепить файлы" +more: "Ещё!" +featured: "Горячее" +usernameOrUserId: "Имя или идентификатор пользователя" +noSuchUser: "Таких пользователей не найдено" +lookup: "Запрос" +announcements: "Оповещения" +imageUrl: "Ссылка на изображение" +remove: "Удалить" +removed: "\uFEFFУдалено" +removeAreYouSure: "Хотите удалить «{x}»?" +deleteAreYouSure: "Хотите удалить «{x}»?" +resetAreYouSure: "На самом деле сбросить?" +saved: "Сохранено" +messaging: "Сообщения" +upload: "Загрузить" +keepOriginalUploading: "Сохранить исходное изображение" +keepOriginalUploadingDescription: "Сохраняет исходную версию при загрузке изображений. + Если выключить, то при загрузке браузер генерирует изображение для публикации." +fromDrive: "С «диска»" +fromUrl: "По ссылке" +uploadFromUrl: "Загрузить по ссылке" +uploadFromUrlDescription: "Ссылка на файл, который хотите загрузить" +uploadFromUrlRequested: "Загрузка выбранного" +uploadFromUrlMayTakeTime: "Загрузка может занять некоторое время." +explore: "Обзор" +messageRead: "Прочитали" +noMoreHistory: "История закончилась" +startMessaging: "Начать общение" +nUsersRead: "Прочитали {n}" +agreeTo: "Я соглашаюсь с {0}" +tos: "Пользовательское соглашение" +start: "Начать" +home: "Главная" +remoteUserCaution: "Это пользователь с другого сайта, поэтому информация может быть + неточной." +activity: "Активность" +images: "Изображения" +birthday: "День рождения" +yearsOld: "Возраст: {age}" +registeredDate: "Дата регистрации" +location: "Местоположение" +theme: "Тема" +themeForLightMode: "Тема для светлого режима" +themeForDarkMode: "Тема для тёмного режима" +light: "Светлый" +dark: "Тёмный" +lightThemes: "Светлые темы" +darkThemes: "Тёмные темы" +syncDeviceDarkMode: "Синхронизировать с темным режимом устройства" +drive: "Диск" +fileName: "Имя файла" +selectFile: "Выберите файл" +selectFiles: "Выберите файлы" +selectFolder: "Выберите папку" +selectFolders: "Выберите папки" +renameFile: "Переименовать файл" +folderName: "Имя папки" +createFolder: "Создать папку" +renameFolder: "Переименовать папку" +deleteFolder: "Удалить папку" +addFile: "Добавить файл" +emptyDrive: "Диск пуст" +emptyFolder: "Папка пуста" +unableToDelete: "Удаление невозможно" +inputNewFileName: "Введите имя нового файла" +inputNewDescription: "Введите новое описание" +inputNewFolderName: "Пожалуйста, введите новое имя папки" +circularReferenceFolder: "Вы пытаетесь переместить папку внутрь себя." +hasChildFilesOrFolders: "Эта папка не пуста и не может быть удалена." +copyUrl: "Копировать ссылку" +rename: "Переименовать" +avatar: "Аватар" +banner: "Шапка" +nsfw: "Содержимое не для всех" +whenServerDisconnected: "Когда соединение с сервером потеряно" +disconnectedFromServer: "Разорвано соединение с сервером" +reload: "Перезагрузить" +doNothing: "Ничего не делать" +reloadConfirm: "Перезагрузить ленту?" +watch: "Следить" +unwatch: "Отписаться" +accept: "Принять" +reject: "Отклонить" +normal: "Стабильно" +instanceName: "Название сервера" +instanceDescription: "Описание сервера" +maintainerName: "Имя администратора" +maintainerEmail: "Электронная почта администратора" +tosUrl: "Ссылка на пользовательское соглашение" +thisYear: "Этот год" +thisMonth: "Этот месяц" +today: "Этот день" +dayX: "{day} день" +monthX: "{month} месяц" +yearX: "{year} год" +pages: "Страницы" +enableLocalTimeline: "Включить локальную ленту" +enableGlobalTimeline: "Включить глобальную ленту" +disablingTimelinesInfo: "У администраторов и модераторов есть доступ ко всем лентам, + даже если они отключены." +registration: "Регистрация" +enableRegistration: "Разрешить регистрацию" +invite: "Пригласить" +driveCapacityPerLocalAccount: "Объём диска на одного локального пользователя" +driveCapacityPerRemoteAccount: "Объём диска на одного пользователя с другого сайта" +inMb: "В мегабайтах" +iconUrl: "Ссылка на аватар" +bannerUrl: "Ссылка на изображение в шапке" +backgroundImageUrl: "Ссылка на фоновое изображение" +basicInfo: "Общая информация" +pinnedUsers: "Прикреплённый пользователь" +pinnedUsersDescription: "Перечислите по одному имени пользователя в строке. Пользователи, + перечисленные здесь, будут привязаны к закладке \"Изучение\"." +pinnedPages: "Закрепленные страницы" +pinnedPagesDescription: "Если хотите закрепить страницы на главной сайта, сюда можно + добавить пути к ним, каждый в отдельной строке." +pinnedClipId: "Идентификатор закреплённой подборки" +pinnedNotes: "Закреплённые посты" +hcaptcha: "hCaptcha" +enableHcaptcha: "Включить hCaptcha" +hcaptchaSiteKey: "Ключ сайта" +hcaptchaSecretKey: "Секретный ключ" +recaptcha: "reCAPTCHA" +enableRecaptcha: "Включить reCAPTCHA" +recaptchaSiteKey: "Ключ сайта" +recaptchaSecretKey: "Секретный ключ" +avoidMultiCaptchaConfirm: "Несколько способов проверки могут мешать друг другу. Подтвердите, + если хотите отключить другие способы. Или нажмите «Отмена», чтобы оставить их включёнными." +antennas: "Антенны" +manageAntennas: "Настройки антенн" +name: "Название" +antennaSource: "Источник антенны" +antennaKeywords: "Ключевые слова" +antennaExcludeKeywords: "Исключения" +antennaKeywordsDescription: "Пишите слова через пробел в одной строке, чтобы ловить + их появление вместе; на отдельных строках располагайте слова, или группы слов, чтобы + ловить любые из них." +notifyAntenna: "Уведомлять о новых постах" +withFileAntenna: "Только посты с вложениями" +enableServiceworker: "Включить ServiceWorker" +antennaUsersDescription: "Пишите каждое название аккаута на отдельной строке" +caseSensitive: "С учётом регистра" +withReplies: "Включая ответы" +connectedTo: "Вы подключены к следующим аккаунтам" +notesAndReplies: "Посты и ответы" +withFiles: "Посты с файлами" +silence: "Заглушить" +silenceConfirm: "Вы уверены что хотите заглушить этого пользователя?" +unsilence: "Снять глушение" +unsilenceConfirm: "Снять глушение с этого пользователя? Уверены?" +popularUsers: "Популярные пользователи" +recentlyUpdatedUsers: "Активные последнее время" +recentlyRegisteredUsers: "Недавно зарегистрированные пользователи" +recentlyDiscoveredUsers: "Недавно обнаруженные пользователи" +exploreUsersCount: "Пользователей: {count}" +exploreFediverse: "Исследуйте Fediverse" +popularTags: "Популярные теги" +userList: "Списки" +about: "Описание" +aboutFirefish: "О Firefish" +administrator: "Администратор" +token: "Токен" +twoStepAuthentication: "Двухфакторная аутентификация" +moderator: "Модератор" +moderation: "Модерация" +nUsersMentioned: "Упомянуло пользователей: {n}" +securityKey: "Ключ безопасности" +securityKeyName: "Имя ключа" +registerSecurityKey: "Зарегистрировать защитный ключ" +lastUsed: "Последнее использование" +unregister: "Отписаться" +passwordLessLogin: "Настроить вход без пароля" +resetPassword: "Сброс пароля" +newPasswordIs: "Новый пароль — «{password}»" +reduceUiAnimation: "Уменьшить анимацию в пользовательском интерфейсе" +share: "Поделиться" +notFound: "Не найдено" +notFoundDescription: "Страница по указанной ссылке не найдена." +uploadFolder: "Место загрузки по умолчанию" +cacheClear: "Очистка кэша" +markAsReadAllNotifications: "Отметить все уведомления как прочитанные" +markAsReadAllUnreadNotes: "Отметить все посты как прочитанные" +markAsReadAllTalkMessages: "Отметить все реплики как прочитанные" +help: "Помощь" +inputMessageHere: "Введите сообщение здесь" +close: "Закрыть" +group: "Группа" +groups: "Группы" +createGroup: "Создать группу" +ownedGroups: "Собственные группы" +joinedGroups: "Участие в группах" +invites: "Приглашения" +groupName: "Название группы" +members: "Участники" +transfer: "Отдать" +messagingWithUser: "Общение с другим пользователем" +messagingWithGroup: "Общение в группе" +title: "Заголовок" +text: "Текст" +enable: "Включить" +next: "Дальше" +retype: "Введите ещё раз" +noteOf: "Что пишет {user}" +inviteToGroup: "Пригласить в группу" +quoteAttached: "Цитата" +quoteQuestion: "Хотите добавить цитату?" +noMessagesYet: "Пока ни одного сообщения" +newMessageExists: "Новое сообщение" +onlyOneFileCanBeAttached: "К сообщению можно прикрепить только один файл" +signinRequired: "Пожалуйста, войдите" +invitations: "Приглашения" +invitationCode: "Код приглашения" +checking: "Проверка..." +available: "Доступно" +unavailable: "Не доступно" +usernameInvalidFormat: "Можно использовать только латинские буквы (A—Z, a—z), цифры + (0—9) и знак подчёркивания (_)." +tooShort: "Слишком короткий" +tooLong: "Слишком длинный" +weakPassword: "Слабый пароль" +normalPassword: "Годный пароль" +veryStrongPassword: "Надёжный пароль" +passwordMatched: "Совпали" +passwordNotMatched: "Не совпадают" +signinWith: "Использовать {x} для входа" +signinFailed: "Невозможно войти в систему. Введенное вами имя пользователя или пароль + неверны." +tapSecurityKey: "Нажмите на свой электронный ключ" +or: "или" +language: "Язык" +uiLanguage: "Язык интерфейса" +groupInvited: "Приглашение в группу" +aboutX: "Описание {x}" +useOsNativeEmojis: "Использовать эмодзи операционной системы" +disableDrawer: "Не использовать выдвижные меню" +youHaveNoGroups: "У вас нет ни одной группы" +joinOrCreateGroup: "Получайте приглашения в группы или создавайте свои собственные." +noHistory: "История пока пуста" +signinHistory: "Журнал посещений" +disableAnimatedMfm: "Отключение анимированной разметки MFM" +doing: "В процессе..." +category: "Категория" +tags: "Метки" +docSource: "Источник документа" +createAccount: "Новая учётная запись" +existingAccount: "Существующая учётная запись" +regenerate: "Создать повторно" +fontSize: "Размер шрифта" +noFollowRequests: "Нерассмотренные запросы на подписку отсутствуют" +openImageInNewTab: "Открыть изображение в новой вкладке" +dashboard: "Панель управления" +local: "С этого сайта" +remote: "Исходный сайт" +total: "Всего" +weekOverWeekChanges: "За неделю" +dayOverDayChanges: "За день" +appearance: "Внешний вид" +clientSettings: "Настройки клиента" +accountSettings: "Настройки учетной записи" +promotion: "Продвинуто" +promote: "Продвинуть" +numberOfDays: "Количество дней" +hideThisNote: "Спрятать эту запись" +showFeaturedNotesInTimeline: "Показывать в ленте посты из «Горячего»" +objectStorage: "Хранилище" +useObjectStorage: "Использовать объектное хранилище" +objectStorageBaseUrl: "Базовый адрес" +objectStorageBaseUrlDesc: "URL используемый для примера. Укажите URL-адрес вашего + CDN или прокси, если вы используете любой из них.\nДля S3 используйте 'https://.s3.amazonaws.com', + а для GCS и подобных сервисов используйте 'https://storage.googleapis.com/', + и т.п." +objectStorageBucket: "Хранилище (Bucket)" +objectStorageBucketDesc: "Укажите название контейнера (Bucket) который используется + на выбранном сервисе." +objectStoragePrefix: "Префикс" +objectStoragePrefixDesc: "Файлы будут храниться в директории, соответствующей указанному + здесь префиксу пути." +objectStorageEndpoint: "Конечная точка" +objectStorageEndpointDesc: "Если используете AWS S3, оставьте пустым. В остальных + случаях укажите конечную точку (endpoint) в форме «» или «:», + так, как это описано в руководстве той службы, которую собираетесь использовать." +objectStorageRegion: "Регион" +objectStorageRegionDesc: "Укажите регион, например xx-east-1. Если ваша служба не + различает регионы, оставьте поле пустым, или впишите us-east-1." +objectStorageUseSSL: "Использовать SSL" +objectStorageUseSSLDesc: "Отключите, если не собираетесь использовать протокол HTTPS + для обмена по API" +objectStorageUseProxy: "Использовать прокси" +objectStorageUseProxyDesc: "Отключите, если не будете испоьзовать прокси для соединений + по протоколу ObjectStorage" +objectStorageSetPublicRead: "Устанавливать public-read при загрузке на сервер" +serverLogs: "Журнал сервера" +deleteAll: "Удалить всё" +showFixedPostForm: "Показывать поле для ввода нового поста наверху ленты" +newNoteRecived: "Появился новый пост" +sounds: "Звуки" +listen: "Слушать" +none: "Ничего" +showInPage: "Показать страницу" +popout: "Развернуть" +volume: "Громкость" +masterVolume: "Основная регулировка громкости" +details: "Подробнее" +chooseEmoji: "Выберите эмодзи" +unableToProcess: "Не удаётся завершить операцию" +recentUsed: "Последние использованные" +install: "Установить" +uninstall: "Удалить" +installedApps: "Установленные приложения" +nothing: "Ничего нет" +installedDate: "Дата установки" +lastUsedDate: "Дата использования" +state: "Состояние" +sort: "Сортировать" +ascendingOrder: "по возрастанию" +descendingOrder: "По убыванию" +scratchpad: "Когтеточка" +scratchpadDescription: "«Когтеточка» — это место для опытов с AiScript. Здесь можно + писать программы, взаимодействующие с Firefish, запускать и смотреть что из этого + получается." +output: "Выходы" +script: "Скрипт" +disablePagesScript: "Отключить скрипты на «Страницах»" +updateRemoteUser: "Обновить данные пользователя с его сервера" +deleteAllFiles: "Удалить все файлы" +deleteAllFilesConfirm: "Вы хотите удалить все файлы?" +removeAllFollowing: "Удалить всех подписчиков" +removeAllFollowingDescription: "Отменить все подписки с домена {host}? Пожалуйста, + применяйте это действие, если сервер больше не существует." +userSuspended: "Эта учётная запись заморожена." +userSilenced: "Этот пользователь был заглушен." +yourAccountSuspendedTitle: "Эта учетная запись заблокирована" +yourAccountSuspendedDescription: "Эта учетная запись была заблокирована из-за нарушения + условий предоставления услуг сервера. Свяжитесь с администратором, если вы хотите + узнать более подробную причину. Пожалуйста, не создавайте новую учетную запись." +menu: "Меню" +divider: "Линия-разделитель" +addItem: "Добавить элемент" +relays: "Ретрансляторы" +addRelay: "Добавить ретранслятор" +inboxUrl: "URL ящика входящих сообщений" +addedRelays: "Добавленные ретрансляторы" +serviceworkerInfo: "Нужно включить, чтобы работали push-уведомления." +deletedNote: "Удалённый пост" +invisibleNote: "Личное сообщение" +enableInfiniteScroll: "Включить бесконечную прокрутку" +visibility: "Видимость" +poll: "Опрос" +useCw: "Скрывать содержимое под предупреждением" +enablePlayer: "Включить проигрыватель" +disablePlayer: "Выключить проигрыватель" +expandTweet: "Развернуть твит" +themeEditor: "Редактор темы оформления" +description: "Описание" +describeFile: "Добавить описание" +enterFileDescription: "Введите описание" +author: "Автор" +leaveConfirm: "Вы не сохранили изменения. Хотите выйти и потерять их?" +manage: "Управление" +plugins: "Расширения" +preferencesBackups: "Резервная копия" +deck: "Пульт" +undeck: "Покинуть пульт" +useBlurEffectForModal: "Размывка под формой поверх всего" +useFullReactionPicker: "Полнофункциональный выбор реакций" +width: "Ширина" +height: "Высота" +large: "Крупно" +medium: "Средне" +small: "Мелко" +generateAccessToken: "Создать токен доступа" +permission: "Разрешения" +enableAll: "Включить все" +disableAll: "Выключить всё" +tokenRequested: "Открыть доступ к учётной записи" +pluginTokenRequestedDescription: "Это расширение сможет пользоваться разрешениями, + установленными здесь." +notificationType: "Тип уведомления" +edit: "Изменить" +emailServer: "Сервер электронной почты" +enableEmail: "Включить обмен электронной почтой" +emailConfigInfo: "Используется для подтверждения адреса электронной почты и сброса + пароля" +email: "Электронная почта" +emailAddress: "Адрес электронной почты" +smtpConfig: "Конфигурация SMTP-сервера" +smtpHost: "Хост" +smtpPort: "Порт" +smtpUser: "Имя пользователя" +smtpPass: "Пароль" +emptyToDisableSmtpAuth: "Не заполняйте имя пользователя и пароль, чтобы отключить + аутентификацию в SMTP" +smtpSecure: "Использовать SSL/TLS для SMTP-соединений" +smtpSecureInfo: "Выключите при использовании STARTTLS" +testEmail: "Проверка доставки электронной почты" +wordMute: "Скрытие слов" +regexpError: "Ошибка в регулярном выражении" +instanceMute: "Глушение серверов" +userSaysSomething: "{name} что-то сообщает" +makeActive: "Активировать" +display: "Отображение" +copy: "Копировать" +metrics: "Метрики" +overview: "Обзор" +logs: "Журналы" +delayed: "Задержка" +database: "База данных" +channel: "Каналы" +create: "Создать" +notificationSetting: "Настройки уведомлений" +notificationSettingDesc: "Выберите тип уведомлений для отображения." +useGlobalSetting: "Использовать глобальные настройки" +useGlobalSettingDesc: "Если включено, будут использоваться настройки учётной записи. + Если включить, этот виджет можно будет настроить индивидуально." +other: "Другие" +regenerateLoginToken: "Создать новый токен для входа" +regenerateLoginTokenDescription: "Создаёт новый токен, используемый внутри программы + во время входа. Обычно в этом нет необходимости. При создании все устройства будут + отключены." +setMultipleBySeparatingWithSpace: "Можно написать несколько через пробел." +fileIdOrUrl: "Идентификатор файла или ссылка" +behavior: "Поведение" +sample: "Пример" +abuseReports: "Жалобы" +reportAbuse: "Жалоба" +reportAbuseOf: "Пожаловаться на пользователя {name}" +fillAbuseReportDescription: "Опишите, пожалуйста, причину жалобы подробнее. Если речь + о конкретном посте, будьте добры приложить ссылку на неё." +abuseReported: "Жалоба отправлена. Большое спасибо за информацию." +reporteeOrigin: "О ком сообщено" +reporterOrigin: "Кто сообщил" +forwardReport: "Переслать отчет на удалённый сервер" +forwardReportIsAnonymous: "Удаленный сервер не сможет увидеть вашу личную информацию + — отчёт будет отображаться как отправленный от анонимной системная учетной записи." +send: "Отправить" +abuseMarkAsResolved: "Отметить жалобу как решённую" +openInNewTab: "Открыть в новой вкладке" +openInSideView: "Открывать в боковой колонке" +defaultNavigationBehaviour: "Поведение навигации по умолчанию" +editTheseSettingsMayBreakAccount: "От изменений в этих настройках ваша учётная запись + может поломаться." +instanceTicker: "Информация про записи на сервере" +waitingFor: "Ждём, когда {x} ответит" +random: "Случайные" +system: "Система" +switchUi: "Выбор вида" +desktop: "Компьютер" +clip: "Подборка" +createNew: "Новый документ" +optional: "Необязательно" +createNewClip: "Новая подборка" +public: "Общедоступно" +i18nInfo: "Firefish переводят на разные языки добровольцы со всего света. Ваша помощь + тоже пригодится здесь: {link}." +manageAccessTokens: "Управление токенами доступа" +accountInfo: "Сведения об учётной записи" +notesCount: "Количество постов" +repliesCount: "Сколько раз пользователь кому-то ответил" +renotesCount: "Сколько раз пользователь делился постами" +repliedCount: "Сколько раз ответили пользователю" +renotedCount: "Сколько раз делились постами пользователя" +followingCount: "Количество подписок" +followersCount: "Количество подписавшихся" +sentReactionsCount: "Количество реакций пользователя" +receivedReactionsCount: "Количество реакций на посты пользователя" +pollVotesCount: "Сколько раз пользователь участвовал в опросах" +pollVotedCount: "Сколько раз участвовали в опросах пользователя" +yes: "Да" +no: "Нет" +driveFilesCount: "Количество файлов на диске" +driveUsage: "Занято места на диске" +noCrawle: "Запретить паукам индексировать сайт" +noCrawleDescription: "Просьба поисковым системам не ходить по вашему профилю, по постам, + страницам и не индексировать их." +lockedAccountInfo: "Даже если вы вручную подтверждаете подписки, кто угодно может + читать ваши посты, если вы не отмечаете их «для подписчиков»." +alwaysMarkSensitive: "Отмечать файлы как «содержимое не для всех» по умолчанию" +loadRawImages: "Сразу показывать изображения в полном размере" +disableShowingAnimatedImages: "Не проигрывать анимацию" +verificationEmailSent: "Вам отправлено письмо для подтверждения. Пройдите, пожалуйста, + по ссылке из письма, чтобы завершить проверку." +notSet: "Не настроено" +emailVerified: "Адрес электронной почты подтверждён" +noteFavoritesCount: "Количество добавленного в избранное" +pageLikesCount: "Количество понравившихся страниц" +pageLikedCount: "Количество страниц, понравившихся другим" +contact: "Как связаться" +useSystemFont: "Использовать шрифт, предлагаемый системой" +clips: "Подборки" +experimentalFeatures: "Экспериментальные функции" +developer: "Разработчик" +makeExplorable: "Опубликовать профиль в «Обзоре»" +makeExplorableDescription: "Если выключить, ваш профиль не будет показан в разделе + «Обзор»." +showGapBetweenNotesInTimeline: "Показывать разделитель между постами в ленте" +duplicate: "Дубликат" +left: "Влево" +center: "По центру" +wide: "Толстый" +narrow: "Тонкий" +reloadToApplySetting: "Это настройка вступает в силу при загрузке страницы. Перезагрузить + сейчас?" +needReloadToApply: "Изменения вступят в силу после перезагрузки страницы." +showTitlebar: "Показать заголовок" +clearCache: "Очистить кэш" +onlineUsersCount: "Пользователей сейчас в сети: {n}" +nUsers: "Пользователей: {n}" +nNotes: "Постов: {n}" +sendErrorReports: "Посылать отчёты о сбоях" +sendErrorReportsDescription: "Если включено, когда возникнет какая-нибудь техническая + проблема, подробные сведения об этом будут отправлены разработчикам Firefish.\n + Это очень помогает делать программу лучше. В отчёты попадают тип и версия ОС, браузера, + журнал действий (что привело к сбою) и тому подобное." +myTheme: "Личная тема" +backgroundColor: "Фон" +accentColor: "Акцент" +textColor: "Текст" +saveAs: "Сохранить под названием…" +advanced: "Для продвинутых" +value: "Значения" +createdAt: "Создано" +updatedAt: "Обновлено" +saveConfirm: "Сохранить изменения?" +deleteConfirm: "Удалить?" +invalidValue: "Недопустимое значение." +registry: "Реестр" +closeAccount: "Закрыть учётную запись" +currentVersion: "Используемая версия" +latestVersion: "Самая свежая версия" +youAreRunningUpToDateClient: "У вас самая свежая версия клиента." +newVersionOfClientAvailable: "Доступна более свежая версия клиента." +usageAmount: "Использовано" +capacity: "Ёмкость" +inUse: "Занято" +editCode: "Редактировать исходный текст" +apply: "Применить" +receiveAnnouncementFromInstance: "Получать оповещения с этого сервера" +emailNotification: "Уведомления по электронной почте" +publish: "Опубликовать" +inChannelSearch: "Поиск по каналу" +useReactionPickerForContextMenu: "Открывать палитру реакций правой кнопкой" +typingUsers: "{users} печатает" +jumpToSpecifiedDate: "Перейти к заданной дате" +showingPastTimeline: "Отображается старая лента" +clear: "Очистить" +markAllAsRead: "Отметить всё как прочитанное" +goBack: "Выход" +unlikeConfirm: "В самом деле отменить «нравится»?" +fullView: "Полный вид" +quitFullView: "Закрыть полный вид" +addDescription: "Добавить описание" +userPagePinTip: "Можно добавить сюда посты, выбрав нужный, и включив в её меню пункт + «Закрепить в профиле»." +notSpecifiedMentionWarning: "В этом посте есть упоминание тех, кто не включён в адресаты" +info: "Описание" +userInfo: "Сведения о пользователе" +unknown: "Неизвестно" +onlineStatus: "Присутствие в сети" +hideOnlineStatus: "Скрыть присутствие" +hideOnlineStatusDescription: "Сокрытие присутствия делает некоторые функции, такие + как поиск, менее удобными." +online: "В сети" +active: "Действует" +offline: "Не в сети" +notRecommended: "Не рекомендуется" +botProtection: "Ботозащита" +instanceBlocking: "Управление федерацией" +selectAccount: "Выберите учётную запись" +switchAccount: "Сменить учётную запись" +enabled: "Включено" +disabled: "Отключено" +quickAction: "Быстрое действие" +user: "Пользователи" +administration: "Управление" +accounts: "Учётные записи" +switch: "Переключение" +noMaintainerInformationWarning: "Не заполнены сведения об администраторах." +noBotProtectionWarning: "Ботозащита не настроена." +configure: "Настроить" +postToGallery: "Опубликовать в галерею" +gallery: "Галерея" +recentPosts: "Недавние публикации" +popularPosts: "Популярные публикации" +shareWithNote: "Поделиться постом" +ads: "Баннеры сообщества" +expiration: "Опрос длится" +memo: "Памятка" +priority: "Приоритет" +high: "Высокий" +middle: "Средне" +low: "Низкий" +emailNotConfiguredWarning: "Не указан адрес электронной почты." +ratio: "Соотношение" +previewNoteText: "Предварительный просмотр" +customCss: "Индивидуальный CSS" +customCssWarn: "Используйте эту настройку только если знаете, что делаете. Ошибки + здесь чреваты тем, что сайт перестанет нормально работать у вас." +global: "Всеобщая" +squareAvatars: "Квадратные аватарки" +sent: "Отправить" +received: "Получено" +searchResult: "Результаты поиска" +hashtags: "Хэштеги" +troubleshooting: "Разрешение проблем" +useBlurEffect: "Размытие в интерфейсе" +learnMore: "Подробнее" +misskeyUpdated: "Firefish обновился!" +whatIsNew: "Показать изменения" +translate: "Перевод" +translatedFrom: "Перевод. Язык оригинала — {x}" +accountDeletionInProgress: "В настоящее время выполняется удаление учетной записи" +usernameInfo: "Имя, которое отличает вашу учетную запись от других на этом сервере. + Вы можете использовать алфавит (a~z, A~Z), цифры (0~9) или символы подчеркивания + (_). Имена пользователей не могут быть изменены позже." +aiChanMode: "ИИ режим" +keepCw: "Сохраняйте Предупреждения о содержимом" +pubSub: "Учётные записи Pub/Sub" +lastCommunication: "Последнее сообщение" +resolved: "Решено" +unresolved: "Без решения" +breakFollow: "Отписка" +itsOn: "Включено" +itsOff: "Выключено" +emailRequiredForSignup: "Для регистрации учётной записи нужен адрес электронной почты" +unread: "Непрочитанное" +filter: "Фильтры" +controlPanel: "Панель управления" +manageAccounts: "Управление аккаунтом" +makeReactionsPublic: "Опубликовать список реакций" +makeReactionsPublicDescription: "Список сделанных вами реакций доступен для просмотра + всем желающим." +classic: "Центрированный" +muteThread: "Заглушить цепочку" +unmuteThread: "Отменить глушение цепочки" +ffVisibility: "Видимость подписок и подписчиков" +ffVisibilityDescription: "Здесь можно настроить, кто будет видеть ваши подписки и + подписчиков." +continueThread: "Показать следующие ответы" +deleteAccountConfirm: "Учётная запись будет безвозвратно удалена. Подтверждаете?" +incorrectPassword: "Пароль неверен." +voteConfirm: "Отдать голос за «{choice}»?" +hide: "Спрятать" +leaveGroup: "Покинуть группу" +leaveGroupConfirm: "Покинуть группу «{name}»?" +useDrawerReactionPickerForMobile: "Выдвижная палитра на мобильном устройстве" +welcomeBackWithName: "С возвращением, {name}" +clickToFinishEmailVerification: "Пожалуйста, нажмите [{ok}], чтобы завершить подтверждение + адреса электронной почты." +overridedDeviceKind: "Тип устройства" +smartphone: "Смартфон" +tablet: "Планшет" +auto: "Автоматически" +themeColor: "Цвет темы сервера" +size: "Размер" +numberOfColumn: "Количество столбцов" +instanceDefaultLightTheme: "Светлая тема по умолчанию для всего сервера" +instanceDefaultDarkTheme: "Темная тема по умолчанию для всего сервера" +indefinitely: "вечно" +file: "Файлы" +recommended: "Рекомендуем" +check: "Проверить" +driveCapOverrideLabel: "Изменение лимита дискового пространства для этого пользователя" +reverse: "Переворот" +colored: "Выделена цветом" +label: "Метка" +localOnly: "Локально" +beta: "Бета" +enableAutoSensitive: "Автоматическое определение NSFW" +enableAutoSensitiveDescription: "Позволяет автоматически обнаруживать и маркировать + медиафайлы NSFW с помощью машинного обучения, где это возможно. Даже если эта опция + отключена, она может быть включена на всем сервере." +account: "Учётные записи" +_sensitiveMediaDetection: + description: "Машинное обучение может быть использовано для автоматического обнаружения + чувствительных медиа для модерации. Нагрузка на сервер увеличивается незначительно." + setSensitiveFlagAutomatically: "Установить флаг NSFW" + sensitivity: Чувствительность обнаружения + sensitivityDescription: Снижение чувствительности приведет к меньшему количеству + ошибочных обнаружений (ложноположительных результатов), в то время как ее увеличение + приведет к меньшему количеству пропущенных обнаружений (ложноотрицательных результатов). + setSensitiveFlagAutomaticallyDescription: Результаты внутреннего обнаружения будут + сохранены, даже если эта опция отключена. + analyzeVideos: Включить анализ видео + analyzeVideosDescription: Анализирует видео в дополнение к изображениям. Это немного + увеличит нагрузку на сервер. +_emailUnavailable: + used: "Уже используется" + format: "Неверный формат" + disposable: "Временный адрес электронной почты не принимается" + mx: "Неверный почтовый сервер" + smtp: "Почтовый сервер не отвечает" +_ffVisibility: + public: "Общедоступны" + followers: "Показываются только подписчикам" + private: "Показываются только вам" +_signup: + almostThere: "Почти готово" + emailAddressInfo: "Введите ваш адрес электронной почты." + emailSent: "На указанный вами адрес электронной почты ({email}) отправлено письмо. + Перейдите по ссылке в письме, чтобы завершить регистрацию." +_accountDelete: + accountDelete: "Удалить свою учётную запись" + mayTakeTime: "Удаление учётной записи — ресурсозатратный процесс. Он может занять + много времени, если вы много писали и загружали файлов." + sendEmail: "Когда ваша учетная запись будет удалена, мы сообщим на указанную вами + электронную почту." + requestAccountDelete: "Запросить удаление вашей учетной записи" + started: "Процесс удаления начался." + inProgress: "Удаление в процессе" +_ad: + back: "Выход" + reduceFrequencyOfThisAd: "Реже показывать эту рекламу" +_forgotPassword: + enterEmail: "Введите адрес электронной почты, который ввели при регистрации. На + неё будет выслана ссылка для смены пароля." + ifNoEmail: "Если вы не ввели свой адрес электронной почты, свяжитесь с администратором + сервера, чтобы сменить пароль." + contactAdmin: "Здесь не используются адреса электронной почты, так что свяжитесь + с администратором, чтобы поменять пароль." +_gallery: + my: "Личная" + liked: "Понравившееся" + like: "Нравится" + unlike: "Отменить «нравится»" +_email: + _follow: + title: "Новый подписчик" + _receiveFollowRequest: + title: "Новый запрос на подписку" +_plugin: + install: "Установка расширений" + installWarn: "Пожалуйста, не устанавливайте расширения, которым не доверяете." + manage: "Управление расширениями" +_registry: + scope: "Область" + key: "Ключ" + keys: "Ключ" + domain: "Домен" + createKey: "Новый ключ" +_aboutFirefish: + about: "Firefish это форк Firefish, сделанный ThatOneCalculator, разработка которого + началась с 2022." + contributors: "Основные соавторы" + allContributors: "Все соавторы" + source: "Исходный код" + translation: "Перевод Firefish" + donate: "Пожертвование на Firefish" + donateTitle: Понравился Firefish? + pleaseDonateToFirefish: Пожалуйста, поддержите разработку Firefish. + pleaseDonateToHost: Также не забудьте поддержать ваш домашний сервер {host}, чтобы + помочь с его операционными расходами. + donateHost: Пожертвовать на {host} + misskeyContributors: Контрибьюторы Misskey +_nsfw: + respect: "Скрывать содержимое не для всех" + ignore: "Показывать содержимое не для всех" + force: "Скрывать вообще все файлы" +_mfm: + cheatSheet: "Подсказка по разметке MFM" + intro: "MFM — язык оформления текста, используемый в Misskey, Firefish, Akkoma, + который можно использовать во многих местах. На этой странице собраны и кратко + изложены способы его использовать." + dummy: "Firefish расширяет границы Федиверса" + mention: "Упоминание" + mentionDescription: "При помощи знака «собака» перед именем можно упомянуть какого-нибудь + пользователя." + hashtag: "Хэштег" + hashtagDescription: "При помощи знака «решётка» перед словом задаётся хэштег." + url: "Простая ссылка (URL)" + urlDescription: "Ссылки могут отображаться непосредственно." + link: "Ссылка с пояснением" + linkDescription: "Можно ссылку оформить в виде произвольного текста." + bold: "Жирный шрифт" + boldDescription: "Выделяет текст, делая буквы жирнее." + small: "Мелкий шрифт" + smallDescription: "Делает текст маленьким и незаметным." + center: "По центру" + centerDescription: "Так можно выровнять что-то по центру." + inlineCode: "Программа (в тексте)" + inlineCodeDescription: "Подсвечивает фрагмент программы внутри сплошного текста." + blockCode: "Программа (блок)" + blockCodeDescription: "Оформляет текст программы в виде отдельного блокоа. Он может + состоять из множества строк." + inlineMath: "Математическое выражение (в тексте)" + inlineMathDescription: "Позволяет вставлять математические выражения внутрь текста + при помощи языка KaTeX" + blockMath: "Математическое выражение (блок)" + blockMathDescription: "Отображать математические формулы (KaTeX) блоками" + quote: "Цитата" + quoteDescription: "Так можно процитировать чей-то текст." + emoji: "Собственные эмодзи" + emojiDescription: "Можно вставить эмодзи в текст, окружив название двоеточиями." + search: "Поиск" + searchDescription: "Можно добавить форму для поиска, сразу задав, что искать." + flip: "Переворот" + flipDescription: "Позволяет отразить текст зеркально по вертикали или горизонтали." + jelly: "Анимация желе (шлёп-плёп)" + jellyDescription: "Напоминает горку джема, дёргающуюся от шлепков." + tada: "Анимация (та-дам!)" + tadaDescription: "Получается нечто выпрыгивающее, как бы крича: «а вот и я!»." + jump: "Анимация прыжков (прыг-скок)" + jumpDescription: "Побуждает радостно подпрыгивать." + bounce: "Анимация отскоков (бум-бум)" + bounceDescription: "Это будет скакать как мяч." + shake: "Анимация дрожи (б-р-р-р)" + shakeDescription: "Такое дрожит, словно от холода. Или от страха." + twitch: "Анимация тряски" + twitchDescription: "Заставляет трястись как одержимого." + spin: "Вращение" + spinDescription: "Так можно крутить содержимое в разных направлениях." + x2: "Крупный шрифт" + x2Description: "Увеличивает содержимое." + x3: "Ещё крупнее" + x3Description: "Сильнее увеличивает содержимое." + x4: "Совсем крупно" + x4Description: "Увеличивает содержимое совсем сильно." + blur: "Размытие" + blurDescription: "Размывает текст до нечитаемости, будто его поместили за матовое + стекло. Наведение указателя мыши на размытый текст возвращает чёткость." + font: "Шрифт" + fontDescription: "Так можно писать произвольным шрифтом." + rainbow: "Радуга" + rainbowDescription: "Заставлять содержимое отображаться в цветах радуги." + sparkle: "Искры" + sparkleDescription: "Добавляет эффект искрящихся частиц." + rotate: "Повернуть" + rotateDescription: "Поворачивает на заданный угол." + plain: Обычный текст + plainDescription: Деактивирует эффекты всех MFM, содержащихся в этом эффекте MFM. + play: Воспроизвести MFM + warn: 'MFM может содержать быстро-движущуюся или яркую анимацию' + advanced: Расширенные MFM + advancedDescription: Если выключено, позволяет только базовую разметку, если не + воспроизводится анимированный MFM + background: Цвет фона + backgroundDescription: Изменить цвет фона текста. + crop: Обрезать + cropDescription: Обрезать содержимое. + stop: Остановить MFM + scale: Масштабировать + fade: Затухание + position: Расположение + alwaysPlay: Всегда автозапускать все анимированные MFM + fadeDescription: Уменьшает и увеличивает видимость контента. + foreground: Цвет переднего плана + foregroundDescription: Изменить цвет текста на переднем плане. + positionDescription: Переместить содержимое на указанное значение. + scaleDescription: Масштабировать содержимое на указанную величину. +_instanceTicker: + none: "Не показывать" + remote: "Только для других сайтов" + always: "Показывать всегда" +_serverDisconnectedBehavior: + reload: "Автоматическая перезагрузка" + dialog: "Предупреждение" + quiet: "Показать ненавязчивое предупреждение" + nothing: Ничего не делать +_channel: + create: "Создать канал" + edit: "Редактировать канал" + setBanner: "Установить баннер" + removeBanner: "Удалить баннер" + featured: "Актуальные" + owned: "Собственные" + following: "Подписки" + usersCount: "Участников: {n}" + notesCount: "Постов: {n}" + nameOnly: Только название + nameAndDescription: Название и описание +_menuDisplay: + sideFull: "Сторона" + sideIcon: "Сторона (иконки)" + top: "Вверх" + hide: "Спрятать" +_wordMute: + muteWords: "Скрыть слово" + muteWordsDescription: "Пишите слова через пробел в одной строке, чтобы фильтровать + их появление вместе; а если хотите фильтровать любое из них, пишите в отдельных + строках." + muteWordsDescription2: "Здесь можно использовать регулярные выражения — просто заключите + их между двумя дробными чертами (/)." + softDescription: "Соответствующие условиям посты будут спрятаны из вашей ленты." + hardDescription: "Соответстующие условиям посты вообще не будут попадать в вашу + ленту. Даже если вы поменяете условия, отсеенные таким образом посты уже не появятся." + soft: "Мягкий" + hard: "Жёсткий" + mutedNotes: "Скрытые посты" +_instanceMute: + heading: "Список заглушенных серверов" + instanceMuteDescription2: Разделить переносом строки + instanceMuteDescription: Это будет скрывать все посты/репосты с указанных серверов, + включая ответы пользователю с заглушенного сервера. + title: Скрывает посты с указанных серверов. +_theme: + explore: "Обзор" + install: "Установить тему" + manage: "Менеджер тем" + code: "Код темы" + description: "Описание" + installed: "Тема «{name}» установлена" + installedThemes: "Установленные темы" + builtinThemes: "Встроенные темы" + alreadyInstalled: "Тема уже установлена" + invalid: "Формат темы некорректный" + make: "Создать тему" + base: "Основа" + addConstant: "Добавить константу" + constant: "Константа" + defaultValue: "По умолчанию" + color: "Цвет" + refProp: "Ссылка на свойство" + refConst: "Ссылка на константу" + key: "Ключ" + func: "Функции" + funcKind: "Тип функции" + argument: "Аргумент" + basedProp: "Исходное свойство" + alpha: "Непрозрачность" + darken: "Затемнение" + lighten: "Осветление" + inputConstantName: "Введите имя для константы" + importInfo: "Если вы введете код темы здесь, вы можете импортировать его в редактор + тем" + deleteConstantConfirm: "Вы действительно хотите удалить константу {const}?" + keys: + accent: "Акцент" + bg: "Фон" + fg: "Текст" + focus: "Фокус" + indicator: "Индикатор" + panel: "Панель" + shadow: "Тень" + header: "Заголовок" + navBg: "Фон боковой панели" + navFg: "Текст на боковой панели" + navHoverFg: "Текст на боковой панели (под указателем)" + navActive: "Текст на боковой панели (активирован)" + navIndicator: "Индикатор на боковой панели" + link: "Ссылка" + hashtag: "Хэштег" + mention: "Упоминание" + mentionMe: "Упоминания вас" + renote: "Репост" + modalBg: "Фон формы поверх страницы" + divider: "Разделитель" + scrollbarHandle: "Ползунок прокрутки" + scrollbarHandleHover: "Ползунок прокрутки (под указателем)" + dateLabelFg: "Текст отметки даты" + infoBg: "Фон сообщения" + infoFg: "Текст сообщения" + infoWarnBg: "Фон предупреждения" + infoWarnFg: "Текст предупреждения" + cwBg: "Фон предупреждения о содержимом" + cwFg: "Текст предупреждения о содержимом" + cwHoverBg: "Фон предупреждения о содержимом (под указателем)" + toastBg: "Фон оповещения" + toastFg: "Текст оповещения" + buttonBg: "Фон кнопки" + buttonHoverBg: "Текст кнопки" + inputBorder: "Рамка поля ввода" + listItemHoverBg: "Фон пункта списка (под указателем)" + driveFolderBg: "Фон папки «Диска»" + wallpaperOverlay: "Слой обоев" + badge: "Значок" + messageBg: "Фон беседы" + accentDarken: "Фон (затемнённый)" + accentLighten: "Фон (осветлённый)" + fgHighlighted: "Подсвеченный текст" +_sfx: + note: "Новый пост" + noteMy: "Собственные посты" + notification: "Уведомления" + chat: "Сообщения" + chatBg: "Сообщения (фон)" + antenna: "Антенна" + channel: "Канал" +_ago: + future: "Из будущего" + justNow: "Только что" + secondsAgo: "{n} с назад" + minutesAgo: "{n} мин назад" + hoursAgo: "{n} ч назад" + daysAgo: "{n} сут назад" + weeksAgo: "{n} нед. назад" + monthsAgo: "{n} мес. назад" + yearsAgo: "{n} г. назад" +_time: + second: "с" + minute: "мин" + hour: "ч" + day: "сут" +_tutorial: + title: "Как использовать Firefish" + step1_1: "Добро пожаловать!" + step1_2: "Давайте настроим вас. Вы будете работать в кратчайшие сроки!" + step2_1: "Сначала, пожалуйста, заполните свой профиль." + step2_2: "Предоставив некоторую информацию о себе, другим людям будет легче понять, + хотят ли они видеть ваши записи или следить за вами." + step3_1: "Теперь пришло время на кого-то подписаться!" + step3_2: "Ваша домашняя и социальная ленты основаны на том, за кем вы следите, поэтому + для начала попробуйте следить за парой аккаунтов.\nНажмите на кружок с плюсом + в правом верхнем углу профиля, чтобы следить за ним." + step4_1: "Давайте выйдем на вас." + step4_2: "Для своего первого сообщения некоторые люди любят делать {introduction} + сообщение или простое \"Hello world!\"" + step5_1: "Временные рамки, везде временные рамки!" + step5_2: "В вашем сервере включены {timelines} разные ленты." + step5_3: "Домашняя {icon} лента - это лента, где вы можете видеть посты тех, на + кого вы подписались." + step5_4: "Местная {icon} лента - это лента где вы можете видеть сообщения всех остальных + пользователей данного сервера." + step5_5: "Социальная лента {icon} - это комбинация домашней и местной лент." + step5_6: "На ленте Рекомендованных {icon} вы можете видеть посты с серверов, которые + рекомендуют администраторы." + step5_7: "Глобальная {icon} лента - это место, где вы можете видеть сообщения от + всех других подключенных серверов." + step6_1: "Итак, что это за место?" + step6_2: "Ну, вы не просто присоединились к Firefish. Вы вошли в Fediverse, взаимосвязанную + сеть из тысяч серверов." + step6_3: "Каждый сервер работает по-своему, и не все сервера работают на базе Firefish. + Но этот работает! Это сложновато, но вы быстро разберетесь." + step6_4: "Теперь идите, изучайте и развлекайтесь!" +_2fa: + alreadyRegistered: "Двухфакторная аутентификация уже настроена." + registerTOTP: "Зарегистрируйте ваше устройство" + registerSecurityKey: "Зарегистрировать ключ" + step1: "Прежде всего, установите на устройство приложение для аутентификации, например, + {a} или {b}." + step2: "Далее отсканируйте отображаемый QR-код при помощи приложения." + step3: "И наконец, введите код, который покажет приложение." + step4: "Теперь при каждом входе на сайт вам нужно будет вводить код из приложения + аналогичным образом." + securityKeyInfo: "Вы можете настроить вход с помощью аппаратного ключа безопасности, + поддерживающего FIDO2, или отпечатка пальца или PIN-кода на устройстве." + step2Url: 'Вы также можете ввести этот URL если используете программу на компьютере:' + securityKeyName: Введите название ключа + removeKeyConfirm: Действительно удалить ключ {name}? + removeKey: Удалить ключ безопасности + step2Click: Нажав на этот QR-код, вы сможете зарегистрировать 2FA в вашем ключе + безопасности или приложении-аутентификаторе для телефона. + chromePasskeyNotSupported: Пароли Chrome пока не поддерживаются. + token: 2FA Токен + tapSecurityKey: Пожалуйста, следуйте инструкциям вашего браузера, чтобы зарегистрировать + ключ безопасности или ключ-пароль + step3Title: Введите код аутентификации + securityKeyNotSupported: Ваш браузер не поддерживает ключи безопасности. +_permissions: + "read:account": "Просматривать данные учётной записи" + "write:account": "Изменять данные учётной записи" + "read:blocks": "Смотреть список блокировок" + "write:blocks": "Изменять список блокировок" + "read:drive": "Смотреть содержимое «диска»" + "write:drive": "Изменять содержимое «диска»" + "read:favorites": "Смотреть список избранного" + "write:favorites": "Изменять список избранного" + "read:following": "Смотреть спискок подписок" + "write:following": "Изменять спискок подписок" + "read:messaging": "Смотреть сообщения" + "write:messaging": "Писать и удалять сообщения" + "read:mutes": "Смотреть спискок скрытых пользователей" + "write:mutes": "Изменять список скрытых пользователей" + "write:notes": "Писать и удалять посты" + "read:notifications": "Смотреть уведомления" + "write:notifications": "Изменять уведомления" + "read:reactions": "Смотреть реакции" + "write:reactions": "Изменять реакции" + "write:votes": "Голосовать" + "read:pages": "Смотреть страницы" + "write:pages": "Изменять и удалять страницы" + "read:page-likes": "Смотреть добавления страниц в избранное" + "write:page-likes": "Изменять добавления страниц в избранное" + "read:user-groups": "Смотреть группы пользователей" + "write:user-groups": "Изменять и удалять группы пользователей" + "read:channels": "Смотреть каналы" + "write:channels": "Изменять каналы" + "read:gallery": "Просмотр галереи" + "write:gallery": "Редактирование галереи" + "read:gallery-likes": "Просмотр списка понравившегося в галерее" + "write:gallery-likes": "Изменение списка понравившегося в галерее" +_auth: + shareAccess: "Дать доступ для «{name}» к вашей учётной записи?" + shareAccessAsk: "Уверены, что хотите дать приложению доступ к своей учётной записи?" + permissionAsk: "Приложение запрашивает следующие разрешения:" + pleaseGoBack: "Вернитесь, пожалуйста, в приложение" + callback: "Возврат в приложение" + denied: "Доступ закрыт" + copyAsk: 'Пожалуйста, вставьте следующий код авторизации в приложение:' + allPermissions: Полный доступ к аккаунту +_antennaSources: + all: "Все посты" + homeTimeline: "Посты тех на которых вы подписаны" + users: "Посты выбранных пользователей" + userList: "Посты пользователей из выбранных списков" + userGroup: "Посты от пользователей из заданной группы" + instances: Посты от всех пользователей на сервере +_weekday: + sunday: "Воскресенье" + monday: "Понедельник" + tuesday: "Вторник" + wednesday: "Среда" + thursday: "Четверг" + friday: "Пятница" + saturday: "Суббота" +_widgets: + memo: "Напоминания" + notifications: "Уведомления" + timeline: "Лента" + calendar: "Календарь" + trends: "Актуальное" + clock: "Часы" + rss: "RSS-читалка" + activity: "Активность" + photos: "Фото" + digitalClock: "Цифровые часы" + federation: "Федерация" + postForm: "Создание поста" + slideshow: "Показ слайдов" + button: "Кнопка" + onlineUsers: "Пользователи онлайн" + jobQueue: "Очередь заданий" + serverMetric: "Показатели сервера" + aiscript: "Консоль AiScript" + aichan: "Ай" + rssTicker: RSS-тикер + unixClock: UNIX часы + instanceCloud: Облачко серверов + userList: Список пользователей + _userList: + chooseList: Выберите список + serverInfo: Информация о сервере +_cw: + hide: "Спрятать" + show: "Показать содержимое" + chars: "знаков: {count}" + files: "файлов: {count}" +_poll: + noOnlyOneChoice: "Нужно хотя бы два варианта" + choiceN: "Выбор {n}" + noMore: "Больше вариантов добавить нельзя" + canMultipleVote: "Можно выбрать несколько вариантов" + expiration: "Опрос длится" + infinite: "вечно" + at: "Заканчивается..." + after: "Заканчивается после..." + deadlineDate: "Дата окончания" + deadlineTime: "Время" + duration: "Длительность" + votesCount: "Голосов: {n}" + totalVotes: "Голосов всего: {n}" + vote: "Проголосовать" + showResult: "Смотреть результаты" + voted: "Голос отдан" + closed: "Завершено" + remainingDays: "Осталось {d} сут {h} ч" + remainingHours: "Осталось {h} ч {m} мин" + remainingMinutes: "Осталось {m} мин {s} с" + remainingSeconds: "Осталось {s} с" +_visibility: + public: "Общедоступно" + publicDescription: "Ваш пост будет виден во всех публичных лентах" + home: "Скрытый" + homeDescription: "Не для общих лент" + followers: "Для подписчиков" + followersDescription: "Сделать видимым только для ваших подписчиков и упомянутых + пользователей" + specified: "Личное" + specifiedDescription: "Тем, кого укажете" + localOnly: "Локально" + localOnlyDescription: "Только для этого сайта" +_postForm: + replyPlaceholder: "Ответ на пост..." + quotePlaceholder: "Пояснение к цитате..." + channelPlaceholder: "Отправить в канал..." + _placeholders: + a: "Как дела?" + b: "Что интересного вокруг?" + c: "Что грызёт тебя, дружище?" + d: "Есть что сказать?" + e: "Напишите что-нибудь…" + f: "В ожидании, когда вы напишете…" +_profile: + name: "Имя" + username: "Имя пользователя" + description: "О себе" + youCanIncludeHashtags: "Можете использовать здесь хэштеги." + metadata: "Дополнительные сведения" + metadataEdit: "Редактировать дополнительные сведения" + metadataDescription: "Можно добавить до четырёх дополнительных граф в профиль. Вы + можете добавить тег {a} или тег {l} с {rel}, чтобы подтвердить ссылку в своем + профиле!" + metadataLabel: "Метка" + metadataContent: "Содержимое" + changeAvatar: "Поменять аватар" + changeBanner: "Поменять изображение в шапке" + locationDescription: Если вы сначала введете свой город, другим пользователям будет + показано ваше местное время. +_exportOrImport: + allNotes: "Все посты" + followingList: "Подписки" + muteList: "Скрытые" + blockingList: "Заблокированные" + userLists: "Списки" + excludeMutingUsers: "За исключением заглушенных пользователей" + excludeInactiveUsers: "Без неактивных учётных записей" +_charts: + federation: "Федерация" + apRequest: "Запросы" + usersIncDec: "Изменение числа пользователей" + usersTotal: "Количество пользователей" + activeUsers: "Активные пользователи" + notesIncDec: "Изменение числа постов" + localNotesIncDec: "Изменения числа локальных постов" + remoteNotesIncDec: "Изменения числа постов с других сайтов" + notesTotal: "Общее количество постов" + filesIncDec: "Изменения числа файлов" + filesTotal: "Общее количество файлов" + storageUsageIncDec: "Изменения заполнения хранилища" + storageUsageTotal: "Суммарное заполнение хранилища" +_instanceCharts: + requests: "Запросы" + users: "Изменение числа пользователей" + usersTotal: "Суммарное количество пользователей" + notes: "Изменение числа постов" + notesTotal: "Суммарное количество постов" + ff: "Изменения числа подписчиков " + ffTotal: "Суммарное количество подписчиков" + cacheSize: "Изменения размера кэша" + cacheSizeTotal: "Суммарный размер кэша" + files: "Изменения числа файлов" + filesTotal: "Суммарное количество файлов" +_timelines: + home: "Персональная" + local: "Местная" + social: "Социальная" + global: "Всеобщая" + recommended: Рекомендованная +_pages: + newPage: "Создать страницу" + editPage: "Править страницу" + readPage: "Читать страницу" + created: "Страница успешно создана" + updated: "Страница успешно обновлена" + deleted: "Страница успешно удалена" + pageSetting: "Настройки страницы" + nameAlreadyExists: "Указанный адрес страницы уже существует" + invalidNameTitle: "Указанный адрес страницы недопустим" + invalidNameText: "Проверьте, что не оставили поле пустым" + editThisPage: "Правка этой страницы" + viewSource: "Просмотр исходника" + viewPage: "Смотреть страницы" + like: "Нравится" + unlike: "Отменить «нравится»" + my: "Свои страницы" + liked: "Понравившиеся страницы" + featured: "Популярные" + inspector: "Инспектор" + contents: "Содержимое" + content: "Содержимое" + variables: "Переменные" + title: "Заголовок" + url: "Адрес страницы" + summary: "Краткое содержание" + alignCenter: "Выровнять элементы по центру" + hideTitleWhenPinned: "Скрыть заголовок страницы при привязке к профилю" + font: "Шрифт" + fontSerif: "Антиква (с засечками)" + fontSansSerif: "Гротеск (без засечек)" + eyeCatchingImageSet: "Добавить картинку для привлечения внимания" + eyeCatchingImageRemove: "Убрать картинку для привлечения внимания" + chooseBlock: "Добавить блок" + selectType: "Выберите вид" + enterVariableName: "Ведите имя переменной" + variableNameIsAlreadyUsed: "Это имя уже есть у другой переменной" + contentBlocks: "Содержательные" + inputBlocks: "Для ввода" + specialBlocks: "Особые" + blocks: + text: "Текст" + textarea: "Текст в рамке" + section: "Раздел" + image: "Изображения" + button: "Кнопка" + if: "Условный" + _if: + variable: "Переменная" + post: "Создание поста" + _post: + text: "Текст" + attachCanvasImage: "Прикрепить изображение с холста" + canvasId: "Метка холста" + textInput: "Поле ввода текста" + _textInput: + name: "Имя переменной" + text: "Подпись" + default: "Исходное содержимое" + textareaInput: "Многострочное поле ввода текста" + _textareaInput: + name: "Имя переменной" + text: "Подпись" + default: "Исходное содержимое" + numberInput: "Поле для ввода числа" + _numberInput: + name: "Имя переменной" + text: "Подпись" + default: "Исходное значение" + canvas: "Холст" + _canvas: + id: "Метка холста" + width: "Ширина" + height: "Высота" + note: "Встроенный пост" + _note: + id: "Идентификатор поста" + idDescription: "Можно также вставить ссылку на пост." + detailed: "Подробный вид" + switch: "Выключатель" + _switch: + name: "Имя переменной" + text: "Подпись" + default: "Исходное содержимое" + counter: "Кнопка со счётчиком" + _counter: + name: "Имя переменной" + text: "Надпись" + inc: "Увеличивать на" + _button: + text: "Надпись" + colored: "Выделена цветом" + action: "Действие по нажатию" + _action: + dialog: "Показать всплывающий текст" + _dialog: + content: "Всплывающий текст" + resetRandom: "Сброс генератора случайности" + pushEvent: "Вызвать событие" + _pushEvent: + event: "Имя события" + message: "Сообщение при нажатии" + variable: "Передать переменную с событием" + no-variable: "нет" + callAiScript: "Вызвать AiScript" + _callAiScript: + functionName: "Имя функции" + radioButton: "Кнопка-переключатель" + _radioButton: + name: "Имя переменной" + title: "Заголовок" + values: "Значения" + default: "Исходное значение" + script: + categories: + flow: "Управление исполнением" + logical: "Логические" + operation: "Арифметические" + comparison: "Сравнение" + random: "Случайные" + value: "Значения" + fn: "Функции" + text: "Текстовые" + convert: "Преобразование" + list: "Список" + blocks: + text: "Строка текста" + multiLineText: "Многострочный текст" + textList: "Список строк текста" + _textList: + info: "Пишите каждый пункт с новой строки" + strLen: "Длина текста" + _strLen: + arg1: "Текст" + strPick: "Взять знак из текста" + _strPick: + arg1: "Текст" + arg2: "Позиция знака" + strReplace: "Замена текста" + _strReplace: + arg1: "Текст, в котором заменять" + arg2: "Заменяемый текст" + arg3: "Менять на" + strReverse: "В обратном порядке" + _strReverse: + arg1: "Текст" + join: "Объединение" + _join: + arg1: "Списки" + arg2: "Разделитель" + add: "Добавить" + _add: + arg1: "A" + arg2: "B" + subtract: "Вычитание" + _subtract: + arg1: "A" + arg2: "B" + multiply: "Умножение" + _multiply: + arg1: "A" + arg2: "B" + divide: "Деление" + _divide: + arg1: "A" + arg2: "B" + mod: "Остаток от деления" + _mod: + arg1: "A" + arg2: "B" + round: "Округление до целого" + _round: + arg1: "Число" + eq: "A равно B" + _eq: + arg1: "А" + arg2: "B" + notEq: "A не равно B" + _notEq: + arg1: "A" + arg2: "B" + and: "A и B" + _and: + arg1: "A" + arg2: "B" + or: "A или B" + _or: + arg1: "A" + arg2: "B" + lt: "A < B (меньше)" + _lt: + arg1: "A" + arg2: "B" + gt: "A > B (больше)" + _gt: + arg1: "A" + arg2: "B" + ltEq: "A ⩽ B (меньше или равно)" + _ltEq: + arg1: "A" + arg2: "B" + gtEq: "A ⩾ B (больше или равно)" + _gtEq: + arg1: "A" + arg2: "B" + if: "Условный" + _if: + arg1: "Условие" + arg2: "Если правда" + arg3: "Если ложь" + not: "Отрицание" + _not: + arg1: "Условие" + random: "Случайность" + _random: + arg1: "Вероятность" + rannum: "Случайное число" + _rannum: + arg1: "Минимум" + arg2: "Максимум" + randomPick: "Случайный выбор из списка" + _randomPick: + arg1: "Списки" + dailyRandom: "Случайность (на день для пользователя)" + _dailyRandom: + arg1: "Вероятность" + dailyRannum: "Случайное число (на день для пользователя)" + _dailyRannum: + arg1: "Минимум" + arg2: "Максимум" + dailyRandomPick: "Случайный выбор из списка (на день для пользователя)" + _dailyRandomPick: + arg1: "Списки" + seedRandom: "Псевдослучайность (заданная зерном)" + _seedRandom: + arg1: "Зерно" + arg2: "Вероятность" + seedRannum: "Псевдослучайное число (заданное зерном)" + _seedRannum: + arg1: "Зерно" + arg2: "Минимум" + arg3: "Максимум" + seedRandomPick: "Псевдослучайный выбор из списка (заданный зерном)" + _seedRandomPick: + arg1: "Зерно" + arg2: "Списки" + DRPWPM: "Случайный выбор из взвешенного списка (на день для пользователя)" + _DRPWPM: + arg1: "Список строк текста" + pick: "Выбор из списка" + _pick: + arg1: "Списки" + arg2: "Позиция" + listLen: "Количество элементов в списке" + _listLen: + arg1: "Списки" + number: "Число" + stringToNumber: "Число из текста" + _stringToNumber: + arg1: "Текст" + numberToString: "Число в текст" + _numberToString: + arg1: "Число" + splitStrByLine: "Разделение текста на строки" + _splitStrByLine: + arg1: "Текст" + ref: "Переменная" + aiScriptVar: "Переменная AiScript" + fn: "Свои функции" + _fn: + slots: "Аргументы" + slots-info: "Напишите имя каждого аргумента с новой строки" + arg1: "Формула" + for: "Цикл" + _for: + arg1: "Количество повторений" + arg2: "Действие" + typeError: "Аргумент {slot} должен быть иметь тип «{expect}», а передали «{actual}»!" + thereIsEmptySlot: "Аргумент {slot} не заполнен!" + types: + string: "Текст" + number: "Число" + boolean: "Логический" + array: "Списки" + stringArray: "Список строк текста" + emptySlot: "Пустой аргумент" + enviromentVariables: "Переменная окружения" + pageVariables: "Элемент страницы" + argVariables: "Аргументы" +_relayStatus: + requesting: "В ожидании одобрения" + accepted: "Одобрено" + rejected: "Отказано" +_notification: + fileUploaded: "Файл успешно загружен" + youGotMention: "{name} упоминает вас" + youGotReply: "{name} отвечает вам" + youGotQuote: "{name} цитирует вас" + youRenoted: "{name} репостит ваш пост" + youGotPoll: "{name} участвует в вашем опросе" + youGotMessagingMessageFromUser: "{name} пишет вам" + youGotMessagingMessageFromGroup: "Новое сообщение в группе «{name}»" + youWereFollowed: "У вас новый подписчик" + youReceivedFollowRequest: "У вас новый запрос на подписку" + yourFollowRequestAccepted: "Ваш запрос на подписку одобрен" + youWereInvitedToGroup: "{userName} пригласил вас в группу" + _types: + all: "Все" + follow: "Подписки" + mention: "Упоминания" + reply: "Ответы" + renote: "Репосты" + quote: "Цитаты" + reaction: "Реакции" + pollVote: "Голосования" + receiveFollowRequest: "Полученные запросы на подписку" + followRequestAccepted: "Запрос на подписку одобрен" + groupInvited: "Приглашение в группы" + app: "Уведомления из приложений" + pollEnded: Опрос закончен + _actions: + reply: "Ответить" + renote: "Репост" + followBack: Подписался на вас обратно + emptyPushNotificationMessage: Пуш уведомления были обновлены + pollEnded: Результаты опроса стали доступны + reacted: отреагировал на ваш пост + renoted: распространил ваш пост + voted: проголосовал в вашем опросе +_deck: + alwaysShowMainColumn: "Всегда показывать главную колонку" + columnAlign: "Выравнивание колонок" + addColumn: "Добавить колонку" + configureColumn: "Настройки колонок" + swapLeft: "Переставить левее" + swapRight: "Переставить правее" + swapUp: "Переставить выше" + swapDown: "Переставить ниже" + stackLeft: "В столбик влево" + popRight: "Из столбика вправо" + profile: "Воркспейс" + _columns: + main: "Основная" + widgets: "Виджеты" + notifications: "Уведомления" + tl: "Лента" + antenna: "Антенна" + list: "Списки" + mentions: "Упоминания" + direct: "Личное" + channel: Канал + deleteProfile: Удалить воркспейс + introduction: Создайте идеальный интерфейс для себя, свободно расположив столбцы! + introduction2: Нажмите на + в правой части экрана, чтобы добавлять новые столбцы + в любое удобное для вас время. + widgetsIntroduction: Пожалуйста, выберите "Редактировать виджеты" в меню столбца + и добавьте виджет. + newProfile: Новый воркспейс + renameProfile: Переименовать воркспейс + nameAlreadyExists: Воркспейс с таким именем уже существует. +enableRecommendedTimeline: Включить рекомендованную ленту +regexpErrorDescription: 'Произошла ошибка в регулярном выражении на строке {line} + вашего {tab} списка скрытых слов:' +confirmToUnclipAlreadyClippedNote: Этот пост уже в подборке "{name}. Хотите ли вы + вместо этого удалить пост из подборки? +unclip: Удалить из подборки +secureMode: Безопасный Режим (Авторизованное Получение) +instanceSecurity: Безопасность сервера +seperateRenoteQuote: Разделить кнопки репоста и цитаты +accountMoved: 'Пользователь переместился на новый аккаунт:' +manageGroups: Управлять группами +allowedInstancesDescription: Список хостов, разрешённых для федерации, каждый разделён + новой строкой (применяется только в приватном режиме). +noThankYou: Нет, спасибо +addInstance: Добавить сервер +flagSpeakAsCat: Говорить как кот +flagSpeakAsCatDescription: Ваши будут посты няифицированы в режиме кота +selectInstance: Выбрать сервер +antennaInstancesDescription: Список серверов, каждый с новой строки +privateMode: Приватный режим +privateModeInfo: Только серверы в белом списке могут федерировать с вашим сервером. + Все посты будут скрыты из публичного доступа. +allowedInstances: Белый список серверов +userSaysSomethingReason: '{name} сказал {reason}' +renoteMute: Заглушить репосты +renoteUnmute: Разглушить репосты +hiddenTags: Скрытые хештеги +noInstances: Нет серверов +secureModeInfo: Не отправлять ответ на запросы с других серверов без подтверждения. +instanceDefaultThemeDescription: Введите код темы в формате объекта. +tenMinutes: 10 минут +oneHour: Один час +thereIsUnresolvedAbuseReportWarning: Есть не рассмотренные жалобы. +cropImage: Обрезать изображение +requireAdminForView: Вы должны войти с аккаунта администратора что просмотреть это. +refreshInterval: 'Интервал обновления ' +slow: Медленно +fast: Быстро +sensitiveMediaDetection: Обнаружение NSFW медиа +remoteOnly: Только другие сайты +navbar: Панель навигации +customMOTD: Своё MOTD (сообщения на заставке) +customMOTDDescription: Пользовательские сообщения для MOTD (заставки), разделенные + разрывами строк, будут отображаться случайным образом каждый раз, когда пользователь + загружает / перезагружает страницу. +recommendedInstancesDescription: Рекомендуемые инстансы, разделенные разрывами строк, + должны отображаться на рекомендуемой ленте. +caption: Автоматическое описание +splash: Заставка +updateAvailable: Возможно, доступно обновление! +move: Переместить +swipeOnDesktop: Разрешить свайпы в мобильном стиле на десктопе +showAds: Показывать баннеры сообщества +noEmailServerWarning: Почтовый сервер не настроен. +type: Тип +numberOfPageCacheDescription: Увеличение этого числа повысит удобство для пользователей, + но приведет к увеличению нагрузки на сервер, а также к использованию большего объема + памяти. +statusbar: Панель статуса +speed: Скорость +oneDay: Один день +oneWeek: Одна неделя +failedToFetchAccountInformation: Не удалось получить информацию о аккаунте +cropImageAsk: Желаете ли вы обрезать это изображение? +recentNHours: Последние {n} часов +recentNDays: Последние {n} дней +typeToConfirm: Введите {x} чтобы подтвердить +document: Документация +logoutConfirm: Действительно выйти? +failedToUpload: Не удалось загрузить +pushNotification: Пуш уведомления +subscribePushNotification: Включить пуш уведомления +unsubscribePushNotification: Отключить пуш уведомления +pushNotificationAlreadySubscribed: Пуш уведомления уже включены +sendPushNotificationReadMessage: Удалять пуш уведомления после того как соответствующие + уведомления или сообщения были прочитаны +customSplashIcons: Свои иконки для заставки (URL) +customSplashIconsDescription: URL-адреса для пользовательских значков заставки, разделенных + разрывами строк, будут отображаться случайным образом каждый раз, когда пользователь + загружает / перезагружает страницу. Пожалуйста, убедитесь, что изображения находятся + на статическом URL-адресе, предпочтительно все с размером 192x192. +logoImageUrl: URL изображения логотипа +showAdminUpdates: Указать, что доступна новая версия Firefish (только для администратора) +replayTutorial: Перезапустить туториал +migration: Миграция +showLocalPosts: 'Показать локальные посты в:' +homeTimeline: Домашняя лента +socialTimeline: Социальная лента +driveCapOverrideCaption: Сбросить до настроек по умолчанию введя значение 0 или меньше. +deleteAccount: Удалить аккаунт +numberOfPageCache: Число кэшируемых страниц +pushNotificationNotSupported: Ваш браузер или сервер не поддерживает пуш уведомления +sendPushNotificationReadMessageCaption: Уведомление содержащее текст "{emptyPushNotificationMessage}" + будет показано на короткое время. Это может увеличить расход батареи вашего устройства, + если это применимо. +cannotUploadBecauseNoFreeSpace: Загрузка не удалась из-за нехватки места на Диске. +cannotUploadBecauseInappropriate: Этот файл не может быть загружен потому что его + части были обнаружены как потенциальное NSFW. +adminCustomCssWarn: Этот параметр следует использовать только в том случае, если вы + знаете, что он делает. Ввод неправильных значений может привести к тому, что ВСЕ + клиенты перестанут нормально функционировать. Пожалуйста, убедитесь, что ваш CSS + работает должным образом, протестировав его в настройках вашего пользователя. +showUpdates: Показывать всплывающее окно при обновлении Firefish +recommendedInstances: Рекомендованные серверы +defaultReaction: Эмодзи реакция по умолчанию для выходящих и исходящих постов +license: Лицензия +customKaTeXMacro: Кастомные KaTex макросы +enableCustomKaTeXMacro: Включить кастомные KaTeX макросы +noteId: Идентификатор поста +_preferencesBackups: + inputName: Введите имя для этой резервной копии + list: Созданные резервные копии + loadFile: Загрузить из файла + apply: Применить для этого устройства + save: Сохранить изменения + saveNew: Сохранить новую резервную копию + applyConfirm: Вы действительно хотите применить резервную копию "{name}" на этом + устройстве? Существует настройки на этом устройстве будут перезаписаны. + renameConfirm: Переименовать резервную копию "{old}" в "{new}"? + saveConfirm: Сохранить резервную как {name}? + cannotSave: Сохранение не удалось + nameAlreadyExists: Резервная копия с именем "{name}" уже существующует. Выберите + другое имя. + deleteConfirm: Удалить резервную копию {name}? + noBackups: Нет резервных копий. Вы может сделать резервную копию настроек клиента + на этом сервере используя "Создать новую резервную копию". + createdAt: 'Создано: {date} {time}' + updatedAt: 'Обновлено: {date} {time}' + cannotLoad: Загрузка не удалась + invalidFile: Неправильный формат файла +enableEmojiReactions: Включить эмодзи реакции +migrationConfirm: "Вы абсолютно уверены что хотите мигрировать ваш аккаунт на {account}? + Как только вы сделаете, вы не сможете отменить это и не сможете нормально использовать + аккаунт снова.\nТакже, пожалуйста, убедитесь, что вы установили эту текущую учетную + запись в качестве учетной записи, с которой вы переходите." +reporter: Автор жалобы +mutePeriod: Длительность глушения +reflectMayTakeTime: Это может занять некоторое время чтобы вступило в силу. +rateLimitExceeded: Превышен лимит +pleaseSelect: Выберите вариант +shuffle: Перемешать +moveFrom: Переместится на этот аккаунт с старого аккаунта +moveFromLabel: 'Аккаунт с которого перемещаетесь:' +moveAccountDescription: Этот процесс необратим. Убедитесь что вы сделали псевдоним + для этого аккаунта до перемещения. Пожалуйста введите аккаунт в формате @person@server.com +moveTo: Переместить текущий аккаунт на новый аккаунт +_messaging: + groups: Группы + dms: Личные +isSystemAccount: Эта учетная запись создана и автоматически управляется системой. + Не рекомендуется модерировать, редактировать, удалять или каким либо другим образом + вмешивайтся в эту учётную запись — это может привести к поломке сервера. +activeEmailValidationDescription: Включить более строгую проверки адресов электронной + почты,что включает в себя проверку наличия одноразовых адресов и того, действительно + ли с ними можно связаться. Если флажок снят, проверяется только формат адреса. +moveToLabel: 'Аккаунт на который вы перемещаетесь:' +lastActiveDate: Последний раз использовался в +enterSendsMessage: Нажать Return в Сообщениях чтобы отправить сообщение (если выключено, + то Ctrl + Return) +moveAccount: Переместить аккаунт! +breakFollowConfirm: Вы действительно хотите удалить подписчика? +showEmojisInReactionNotifications: Показывать эмодзи в уведомлениях о реакциях +hiddenTagsDescription: 'Список хештегов (без #), которые вы желаете скрыть из "актуальное" + и "обзор". Скрытые хэштеги по-прежнему можно обнаружить в других местах.' +moveFromDescription: Это установит псевдоним для старого аккаунта, так что вы сможете + переместить тот аккаунт на текущий. Делайте это ДО перемещения со старого аккаунта. + Пожалуйста введите аккаунт в формате @person@server.com +customKaTeXMacroDescription: 'Настройте макросы чтобы легко писать математические + выражения! Обозначение соответствует определениям команд LaTeX и записывается как + \newcommand{\ название}{содержание} или \newcommand{\название}[количество аргументов]{содержание}. + Для примера, \add{3}[2]{#1 + #2} будет раскрывать \add{3}{foo} до 3 + foo. Фигурные + скобки, окружающие имя макроса, можно заменить на круглые или квадратные скобки. + Это влияет на квадратные скобки, используемые для аргументов. Для каждой строки + может быть определен один (и только один) макрос, и вы не можете прерывать строку + в середине определения. Недопустимые строки просто игнорируются. Поддерживаются + только простые функции подстановки строк; расширенный синтаксис, такой как условное + ветвление, здесь использоваться не может.' +cannotUploadBecauseExceedsFileSizeLimit: Этот файл не может быть загружен так как + он превышает максимально разрешённый размер. +apps: Приложения +silenceThisInstance: Заглушить сервер +silencedInstances: Заглушенные серверы +editNote: Редактировать пост +edited: 'Редактировано в {date} {time}' +deleted: Удалённое +removeReaction: Удалить вашу реакцию +searchPlaceholder: Искать в Firefish +jumpToPrevious: Перейти к предыдущему +listsDesc: Списки позволяют вам создавать ленты с постами указанных пользователей. + Их можно найти на странице «Лента». +silenced: Игнорируется +antennasDesc: "Антенны отображают новые посты, отвечающие указанным критериям!\n К + ним можно перейти со страницы «Лента»." +expandOnNoteClickDesc: Если отключено, вы всё равно сможете открыть пост, воспользовавшись + меню на правой кнопке мыши или кликнув по времени публикации поста. +accessibility: Доступность +silencedInstancesDescription: Список адресов серверов, которые вы хотите заглушить. + Аккаунты на указанных серверах будут считаться «Заглушёнными», смогут только отправлять + запросы на подписку и не смогут упоминать локальных пользователей, если на них не + подписались. Эта настройка не влияет на заблокированные серверы. +clipsDesc: Подборки это категоризированные закладки, которыми можно делиться. Вы можете + создавать подборки из меню у конкретных постов. +alt: ALT +video: Видео +audio: Аудио +selectChannel: Выберите канал +expandOnNoteClick: Открывать пост по клику +channelFederationWarn: Каналы пока не федерируются с другими серверами +image: Изображение +cw: Предупреждение о содержании +xl: Очень крупно +_experiments: + enablePostImports: Включить импорт постов + postImportsCaption: Позволяет пользователям импортировать свои посты из прошлых + учетных записей Firefish, Misskey, Mastodon, Akkoma и Pleroma. Это может вызвать + снижение скорости при загрузке, если ваша очередь перегружена. + title: Эксперименты +_skinTones: + yellow: Жёлтый + dark: Тёмный + mediumLight: Средне-светлый + mediumDark: Средне-тёмный + medium: Средний + light: Светлый +_filters: + fromUser: От пользователя + withFile: С файлом + followingOnly: Только подписки + followersOnly: Только подписчики + fromDomain: С домена + notesBefore: Посты до + notesAfter: Посты после +_dialog: + charactersExceeded: 'Превышено максимальное количество символов! Ограничение: {current}/{max}' + charactersBelow: 'Недостаточно символов! Ограничение: {current}/{min}' +_feeds: + copyFeed: Скопировать ленту + rss: RSS + jsonFeed: JSON-лента + atom: Atom +enableServerMachineStats: Включить статистику серверного оборудования +enableIdenticonGeneration: Включить генерацию Identicon +reactionPickerSkinTone: Предпочитаемый цвет кожи эмодзи +sendModMail: Отправить сообщение о модерации +signupsDisabled: Регистрация на этом сервере сейчас отключена, но вы всегда можете + зарегистрироваться на другом сервере! Если у вас есть код приглашения на этот сервер, + пожалуйста, введите его ниже. +preventAiLearningDescription: Попросить сторонние языковые модели ИИ не изучать загружаемый + вами контент, например, посты и изображения. +verifiedLink: Проверенная ссылка +swipeOnMobile: Разрешить перелистывание между страницами +preventAiLearning: Защита от скрепинга ИИ-ботов +userSaysSomethingReasonReply: '{name} ответил на пост с {reason}' +userSaysSomethingReasonRenote: '{name} распространил пост с {reason}' +userSaysSomethingReasonQuote: '{name} процитировал пост с {reason}' +isBot: Этот аккаунт является ботом +isAdmin: Администратор +isPatron: Патрон Firefish +showPopup: Оповещать пользователей всплывающим окном +neverShow: Не показывать снова +remindMeLater: Возможно позже +removeQuote: Удалить цитату +silencedWarning: Эта страница отображается потому, что эти пользователи с серверов, + которые ваш администратор заглушил, поэтому они потенциально могут быть спамом. +isModerator: Модератор +noGraze: Пожалуйста, отключите расширение браузера "Graze для Mastodon", поскольку + оно мешает работе Firefish. +newer: новее +older: старее +showWithSparkles: Показать с блеском +youHaveUnreadAnnouncements: У вас есть непрочитанные объявления +donationLink: Ссылка на страницу для взносов +isLocked: Этот аккаунт имеет одобрение запросов на подписку +removeRecipient: Удалить получателя +removeMember: Удалить участника +confirm: Подтвердить +importZip: Импортировать ZIP +exportZip: Экспортировать ZIP +objectStorageS3ForcePathStyle: Использовать путь вместо домена в URL +objectStorageS3ForcePathStyleDesc: Включите, если хотите, чтобы URL был в формате + 's3.amazonaws.com//' вместо '.s3.amazonaws.com'. +origin: Источник +deletePasskeys: Удалить passkey +delete2faConfirm: Двухфакторная аутентификация на этом аккаунте будет безвозвратно + удалена. Продолжить? +delete2fa: Отключить двухфакторную аутентификацию +deletePasskeysConfirm: Это действие безвозвратно удалит все passkey и ключи безопасности + на этом аккаунте. Продолжить? +inputNotMatch: Введённые данные не совпадают +addRe: Добавить "re:" в начале комментария в ответ на запись с предупреждением о содержимом +detectPostLanguage: Автоматическое определение языка и отображение кнопки перевода + для сообщений на иностранных языках +indexableDescription: Разрешить встроенной поисковой системе искать ваши публичные + записи +reactions: Реакции +indexable: Индексируемый(-ая) +languageForTranslation: Язык перевода поста +replies: Ответы +quotes: Цитаты +clickToShowPatterns: Нажмите, чтобы показать модуль шаблонов +renotes: Репосты +markLocalFilesNsfwByDefaultDescription: Независимо от данной настройки, пользователи + могут самостоятельно удалять метку NSFW. Не применяется на существующие файлы. +toEdit: Редактировать +attachedToNotes: Посты с этим файлом +showAttachedNotes: Показывать посты с этим файлом +strongPassword: Хороший пароль +toReply: Ответить +toPost: Выложить +sentFollowRequests: Отправленные запросы на подписку +toQuote: Цитировать +cannotEditVisibility: Вы не можете изменить видимость +noSentFollowRequests: Вы не отправляли никаких запросов на подписку diff --git a/locales/sk-SK.yml b/locales/sk-SK.yml new file mode 100644 index 0000000..5d9e535 --- /dev/null +++ b/locales/sk-SK.yml @@ -0,0 +1,1828 @@ +_lang_: "Slovenčina" +headlineFirefish: "Sieť prepojená poznámkami" +introFirefish: "Vitajte! Firefish je otvorená a decentralizovaná mikroblogovacia služba.\n\ + \"Poznámkami\" môžete zdieľať svoje myšlienky so všetkými okolo. 📡\nPomocou \"reakcií\"\ + \ môžete rýchlo vyjadri svoje pocity o každého poznámkach. 👍\nPoďte objavovať svet! + 🚀" +monthAndDay: "{day}. {month}." +search: "Hľadať" +notifications: "Oznámenia" +username: "Meno používateľa" +password: "Heslo" +forgotPassword: "Zabudnuté heslo" +fetchingAsApObject: "Načítam údaje z Fediverzu" +ok: "OK" +gotIt: "Rozumiem!" +cancel: "Zrušiť" +enterUsername: "Zadajte meno používateľa" +renotedBy: "{user} preposlal/a" +noNotes: "Žiadne poznámky" +noNotifications: "Žiadne oznámenia" +instance: "Inštancia" +settings: "Nastavenia" +basicSettings: "Všeobecné nastavenia" +otherSettings: "Rozšírené nastavenia" +openInWindow: "Otvoriť v novom okne" +profile: "Profil" +timeline: "Časová os" +noAccountDescription: "Tento používateľ zatiaľ nenapísal o sebe." +login: "Prihlásiť sa" +loggingIn: "Prebieha prihlasovanie" +logout: "Odhlásiť" +signup: "Registrovať" +uploading: "Nahrávanie..." +save: "Uložiť" +users: "Používatelia" +addUser: "Pridať používateľa" +favorite: "Páči sa mi" +favorites: "Obľúbené" +unfavorite: "Nepáči sa mi" +favorited: "Pridané do obľúbených" +alreadyFavorited: "Už je medzi obľúbenými" +cantFavorite: "Nepodarilo sa pridať medzi obľúbené." +pin: "Pripnúť" +unpin: "Odopnúť" +copyContent: "Kopírovať obsah" +copyLink: "Kopírovať odkaz" +delete: "Odstrániť" +deleteAndEdit: "Odstrániť a upraviť" +deleteAndEditConfirm: "Naozaj chcete odstrániť túto poznámku a upraviť ju? Stratíte + tým všetky reakcie a odpovede na ňu." +addToList: "Pridať do zoznamu" +sendMessage: "Odoslať správu" +copyUsername: "Kopírovať meno používateľa" +searchUser: "Hľadať používateľov" +reply: "Odpovedať" +loadMore: "Zobraziť viac" +showMore: "Zobraziť viac" +showLess: "Zavrieť" +youGotNewFollower: "Máte nového sledujúceho" +receiveFollowRequest: "Žiadosť o sledovanie prijatá" +followRequestAccepted: "Žiadosť o sledovanie akceptovaná" +mention: "Zmienka" +mentions: "Zmienky" +directNotes: "Priame poznámky" +importAndExport: "Import a export" +import: "Importovať" +export: "Exportovať" +files: "Súbor/y" +download: "Stiahnuť" +driveFileDeleteConfirm: "Naozaj chcete odstrániť súbor \"{name}\"? Poznámky s týmto + súborom sa odstránia tiež." +unfollowConfirm: "Naozaj už nechcete sledovať {name}?" +exportRequested: "Vyžiadali ste export. Môže to chvíľu trvať. Po skončení pribudne + na vašom disku." +importRequested: "Požiadali ste o export. Môže to chvíľu trvať." +lists: "Zoznamy" +noLists: "Nemáte žiadne zoznamy" +note: "Poznámka" +notes: "Poznámky" +following: "Sledujete" +followers: "Sledujúci" +followsYou: "Sledujú vás" +createList: "Vytvoriť zoznam" +manageLists: "Spravovať zoznamy" +error: "Chyba" +somethingHappened: "Ups. Niečo sa nepodarilo." +retry: "Opakovať" +pageLoadError: "Nepodarilo sa načítať stránku" +pageLoadErrorDescription: "Toto môže byť spôsobené problémami so sieťou alebo cachou + prehliadača. Skúste vyčistiť cache a potom skúsiť znova po chvíli." +serverIsDead: "Tento server nereaguje. Prosím chvíľu počkajte a skúste znova." +youShouldUpgradeClient: "Na pozretie tejto stránky prosím obnovte svojho klienta." +enterListName: "Zadajte názov zoznamu" +privacy: "Súkromie" +makeFollowManuallyApprove: "Žiadosti o sledovanie treba schváliť" +defaultNoteVisibility: "Predvolená viditeľnosť" +follow: "Sledovať" +followRequest: "Požiadať o sledovanie" +followRequests: "Žiadosti o sledovanie" +unfollow: "Nesledovať" +followRequestPending: "Žiadosť o sledovanie čaká" +enterEmoji: "Zadajte emoji" +renote: "Preposlať" +unrenote: "Vrátiť preposlanie" +renoted: "Preposlané." +cantRenote: "Tento príspevok sa nedá preposlať." +cantReRenote: "Odpoveď nemôže byť odstránená." +quote: "Citovať" +pinnedNote: "Pripnuté poznámky" +pinned: "Pripnúť" +you: "Vy" +clickToShow: "Kliknutím zobrazíte" +sensitive: "NSFW" +add: "Pridať" +reaction: "Reakcie" +reactionSetting: "Reakcie zobrazené vo výbere reakcií" +reactionSettingDescription2: "Ťahaním preusporiadate, kliknutím odstránite, Stlačením + \"+\" pridáte" +rememberNoteVisibility: "Zapamätať nastavenia viditeľnosti poznámky" +attachCancel: "Odstrániť prílohu" +markAsSensitive: "Označiť ako NSFW" +unmarkAsSensitive: "Odznačiť NSFW" +enterFileName: "Zadajte názov súboru" +mute: "Vypnúť zvuk" +unmute: "Zapnúť zvuk" +block: "Zablokovať" +unblock: "Odblokovať" +suspend: "Zmraziť" +unsuspend: "Odmraziť" +blockConfirm: "Naozaj chcete zablokovať tento účet?" +unblockConfirm: "Naozaj chcete odblokovať tento účet?" +suspendConfirm: "Naozaj chcete zmraziť tento účet?" +unsuspendConfirm: "Naozaj chcete odmraziť tento účet?" +selectList: "Vyberte zoznam" +selectAntenna: "Vyberte anténu" +selectWidget: "Vyberte widget" +editWidgets: "Upraviť widget" +editWidgetsExit: "Hotovo" +customEmojis: "Vlastné emoji" +emoji: "Emoji" +emojis: "Emoji" +emojiName: "Názov emoji" +emojiUrl: "URL obrázku" +addEmoji: "Pridať emoji" +settingGuide: "Odporúčané nastavenia" +cacheRemoteFiles: "Cachovanie vzdialených súborov" +cacheRemoteFilesDescription: "Zakázanie tohoto nastavenia spôsobí, že vzdialené súbory + budú odkazované priamo, namiesto ukladania do cache. Ušetrí sa tak miesto na serveri, + ale zvýši sa dátový tok, pretože sa negenerujú miniatúry." +flagAsBot: "Tento účet je bot" +flagAsBotDescription: "Ak je tento účet ovládaný programom, zaškrtnite túto voľbu. + Ostatní uvidia, že je to bot a zabráni nekonečným interakciám s ďalšími botmi a + upraví interné systémy Firefish, aby ho považoval za bota." +flagAsCat: "Tento účet je mačka" +flagAsCatDescription: "Zvoľte túto voľbu, aby bol tento účet označený ako mačka." +flagShowTimelineReplies: "Zobraziť odpovede na poznámky v časovej osi" +flagShowTimelineRepliesDescription: "Keď je zapnuté, na časovej osi sa zobrazia odpovede + k poznámkam používateľov okrem samotných poznámok." +autoAcceptFollowed: "Automaticky prijať sledovanie od účtov, ktoré sledujete" +addAccount: "Pridať účet" +loginFailed: "Prihlásenie sa nepodarilo." +showOnRemote: "Zobraziť na vzdialenom serveri" +general: "Všeobecné" +wallpaper: "Tapeta" +setWallpaper: "Nastaviť tapetu" +removeWallpaper: "Odstrániť tapetu" +searchWith: "Hľadať: {q}" +youHaveNoLists: "Nemáte žiadne zoznamy" +followConfirm: "Naozaj chcete sledovať {name}?" +proxyAccount: "Proxy účet" +proxyAccountDescription: "Proxy účet je účet, ktorý za určitých podmienok sleduje + používateľov na diaľku vaším menom. Napríklad keď používateľ zaradí vzdialeného + používateľa do zoznamu, pokiaľ nikto nesleduje používateľa na zozname, aktivita + nebude doručená na server, takže namiesto toho bude používateľa sledova proxy účet." +host: "Host" +selectUser: "Vyberte používateľa" +recipient: "Prijímateľ" +annotation: "Komentáre" +federation: "Federácia" +instances: "Inštancia" +registeredAt: "Registrácia" +latestRequestSentAt: "Posledná odoslaná požiadavka" +latestRequestReceivedAt: "Posledná prijatá požiadavka" +latestStatus: "Posledný status" +storageUsage: "Využité úložisko" +charts: "Grafy" +perHour: "za hodinu" +perDay: "za deň" +stopActivityDelivery: "Zastaviť posielanie aktivít" +blockThisInstance: "Blokovať tento server" +operations: "Operácie" +software: "Softvér" +version: "Verzia" +metadata: "Metadáta" +monitor: "Monitor" +jobQueue: "Fronta úloh" +cpuAndMemory: "CPU a pamäť" +network: "Sieť" +disk: "Disk" +instanceInfo: "Informácie o serveri" +statistics: "Štatistiky" +clearQueue: "Vyčistiť frontu" +clearQueueConfirmTitle: "Naozaj chcete zrušiť všetky úlohy vo fronte?" +clearQueueConfirmText: "Všetky nedoručené poznámky čakajúce vo fronte nebudú federované. + Zvyčajne táto operácia nie je potrebná." +clearCachedFiles: "Vyprázdniť cache" +clearCachedFilesConfirm: "Naozaj chcete odstrániť všetky nacachované vzdialené súbory?" +blockedInstances: "Blokované servery" +blockedInstancesDescription: "Zoznam blokovaných serverov na riadkoch. Blokované servery + nebudú môcť komunikovať s týmto serverom." +muteAndBlock: "Umlčania a blokácie" +mutedUsers: "Umlčaní používatelia" +blockedUsers: "Blokovaní používatelia" +noUsers: "Žiadni používatelia" +editProfile: "Upraviť profil" +noteDeleteConfirm: "Naozaj chcete odstrániť túto poznámku?" +pinLimitExceeded: "Ďalšie poznámky už nemôžete pripnúť." +intro: "Inštalácia Firefish je dokončená! Prosím vytvorte administrátora." +done: "Hotovo" +processing: "Pracujem..." +preview: "Náhľad" +default: "Predvolené" +defaultValueIs: "Predvolené: {value}" +noCustomEmojis: "Žiadne emoji" +noJobs: "Žiadne úlohy" +federating: "Federácia" +blocked: "Blokované" +suspended: "Zmrazené" +all: "Všetko" +subscribing: "Odoberanie" +publishing: "Zverejňovanie" +notResponding: "Neodpovedá" +instanceFollowing: "Sledujem na serveri" +instanceFollowers: "Sledujúci zo servera" +instanceUsers: "Používatelia servera" +changePassword: "Zmeniť heslo" +security: "Zabezpečenie" +retypedNotMatch: "Zadané vstupy nesúhlasia" +currentPassword: "Aktuálne heslo" +newPassword: "Nové heslo" +newPasswordRetype: "Nové heslo (znovu)" +attachFile: "Priložiť súbor" +more: "Viac!" +featured: "Obľúbené poznámky" +usernameOrUserId: "Meno používateľa alebo ID používateľa" +noSuchUser: "Používateľ sa nenašiel" +lookup: "Vyhľadať" +announcements: "Oznamy" +imageUrl: "URL obrázku" +remove: "Odstrániť" +removed: "Odstránené" +removeAreYouSure: "Naozaj chcete odstrániť \"{x}\"?" +deleteAreYouSure: "Naozaj chcete odstrániť \"{x}\"?" +resetAreYouSure: "Naozaj resetovať?" +saved: "Uložené" +messaging: "Chat" +upload: "Nahrať súbor" +keepOriginalUploading: "Zachovať pôvodný obrázok" +keepOriginalUploadingDescription: "Uloží pôvodný obrázok ako je. Ak je vypnuté, verzia + pre web sa vygeneruje pri nahratí." +fromDrive: "Z disku" +fromUrl: "Z URL" +uploadFromUrl: "Nahrať z URL adresy" +uploadFromUrlDescription: "URL adresa nahrávaného súboru" +uploadFromUrlRequested: "Upload vyžiadaný" +uploadFromUrlMayTakeTime: "Nahrávanie môže nejaký čas trvať." +explore: "Objavovať" +messageRead: "Prečítané" +noMoreHistory: "To je všetko" +startMessaging: "Začať chat" +nUsersRead: "prečítané {n} používateľmi" +agreeTo: "Súhlasím s {0}" +tos: "Podmienky používania" +start: "Začať" +home: "Domov" +remoteUserCaution: "Tieto informácie nemusia byť aktuálne, keďže používateľ je na + vzdialenom serveri." +activity: "Aktivita" +images: "Obrázky" +birthday: "Dátum narodenia" +yearsOld: "{age} rokov" +registeredDate: "Dátum registrácie" +location: "Lokalita" +theme: "Téma" +themeForLightMode: "Téma pri svetlom režime" +themeForDarkMode: "Téma pri tmavom režime" +light: "Svetlá" +dark: "Tmavá" +lightThemes: "Svetlá téma" +darkThemes: "Tmavá téma" +syncDeviceDarkMode: "Synchronizovať tmavú tému s nastavení vášho systému" +drive: "Disk" +fileName: "Názov súboru" +selectFile: "Vyberte súbor" +selectFiles: "Vyberte súbory" +selectFolder: "Vyberte priečinok" +selectFolders: "Vyberte priečinky" +renameFile: "Premenovať súbor" +folderName: "Názov priečinka" +createFolder: "Vytvoriť priečinok" +renameFolder: "Premenovať priečinok" +deleteFolder: "Odstrániť priečinok" +addFile: "Pridať súbor" +emptyDrive: "Váš disk je prázdny" +emptyFolder: "Tento priečinok je prázdny" +unableToDelete: "Nedá sa odstrániť" +inputNewFileName: "Zadajte nový názov" +inputNewDescription: "Zadajte nový popis" +inputNewFolderName: "Zadajte nový názov priečinka" +circularReferenceFolder: "Cieľový priečinok je podpriečinkom priečinka, ktorý chcete + presunúť." +hasChildFilesOrFolders: "Nemôžete odstrániť priečinok sú súbormi." +copyUrl: "Kopírovať URL" +rename: "Premenovať" +avatar: "Avatar" +banner: "BAnner" +nsfw: "NSFW" +whenServerDisconnected: "Keď sa stratí spojenie so serverom" +disconnectedFromServer: "Spojenie so serverom bolo prerušené" +reload: "Obnoviť" +doNothing: "Ignorovať" +reloadConfirm: "Chcete obnoviť časovú os?" +watch: "Sledovať" +unwatch: "Nesledovať" +accept: "Súhlasím" +reject: "Nesúhlasím" +normal: "Normálne" +instanceName: "Názov servera" +instanceDescription: "Popis servera" +maintainerName: "Správca" +maintainerEmail: "E-mailová adresa správcu" +tosUrl: "URL zmluvných podmienok" +thisYear: "Rok" +thisMonth: "Mesiac" +today: "Dnes" +dayX: "{day}" +monthX: "{month}" +yearX: "{year}" +pages: "Stránky" +enableLocalTimeline: "Povoliť lokálnu časovú os" +enableGlobalTimeline: "Povoliť globálnu časovú os" +disablingTimelinesInfo: "Administrátori a moderátori majú vždy prístup ku všetkým + časovým osiam, aj keď sú vypnuté." +registration: "Registrácia" +enableRegistration: "Povoliť registráciu nových používateľov" +invite: "Pozvať" +driveCapacityPerLocalAccount: "Kapacita disku pre používateľa" +driveCapacityPerRemoteAccount: "Kapacita disku pre vzdialeného používateľa" +inMb: "V megabajtoch" +iconUrl: "Favicon URL" +bannerUrl: "URL obrázku bannera" +backgroundImageUrl: "URL obrázku pozadia" +basicInfo: "Základné informácie" +pinnedUsers: "Pripnutí používatelia" +pinnedUsersDescription: "Zoznam mien používateľov oddelených riadkami, ktorý budú + pripnutí v záložke \"Objavovať\"." +pinnedPages: "Pripnuté stránky" +pinnedPagesDescription: "Na každý riadok zadajte cesty stránok, ktoré chcete pripnúť + na vrch stránky tohoto servera." +pinnedClipId: "ID pripnutého klipu" +pinnedNotes: "Pripnuté poznámky" +hcaptcha: "hCaptcha" +enableHcaptcha: "Zapnúť hCaptchu" +hcaptchaSiteKey: "Site key" +hcaptchaSecretKey: "Secret key" +recaptcha: "reCAPTCHA" +enableRecaptcha: "Zapnúť ReCAPTCHA" +recaptchaSiteKey: "Site key" +recaptchaSecretKey: "Secret key" +avoidMultiCaptchaConfirm: "Použitie viacerých Captcha systémov môže sposobiť problémy. + Chcete radšej vypnúť ostatné Captcha systémy? Môžete ich povoliť viaceré stlačení + Zrušiť." +antennas: "Antény" +manageAntennas: "Spravovať antény" +name: "Názov" +antennaSource: "Zdroj antény" +antennaKeywords: "Počúvané kľúčové slová" +antennaExcludeKeywords: "Vylúčené kľúčové slová" +antennaKeywordsDescription: "Oddeľte medzerami pre podmienku AND alebo novými riadkami + pre podmienku OR." +notifyAntenna: "Upozorniť na nové poznámky" +withFileAntenna: "Len poznámky so súbormi" +enableServiceworker: "Povoliť Service Worker" +antennaUsersDescription: "Zoznam používateľov jeden na riadok" +caseSensitive: "Rozlišuje malé a veľké písmená" +withReplies: "Vrátane odpovedí" +connectedTo: "Nasledujúce účty sú pripojené" +notesAndReplies: "Poznámky a odpovede" +withFiles: "Vrátane súborov" +silence: "Ticho" +silenceConfirm: "Naozaj chcete utíšiť tohoto používateľa?" +unsilence: "Vrátiť utíšenie" +unsilenceConfirm: "Naozaj chcete vrátiť utíšenie tohoto používateľa?" +popularUsers: "Populárni používatelia" +recentlyUpdatedUsers: "Používatelia s najnovšou aktivitou" +recentlyRegisteredUsers: "Najnovší používatelia" +recentlyDiscoveredUsers: "Naposledy objavení používatelia" +exploreUsersCount: "Existuje {count} používateľov" +exploreFediverse: "Objavovať Fediverzum" +popularTags: "Populárne značky" +userList: "Zoznamy" +about: "Informácie" +aboutFirefish: "O Firefish" +administrator: "Administrátor" +token: "Token" +twoStepAuthentication: "Dvojfaktorová autentifikácia" +moderator: "Moderátor" +moderation: "Moderovanie" +nUsersMentioned: "{n} používateľov spomenulo" +securityKey: "Bezpečnostný kľúč" +securityKeyName: "Názov kľúča" +registerSecurityKey: "Registrovať bezpečnostný kľúč" +lastUsed: "Naposledy použité" +unregister: "Odregistrovať" +passwordLessLogin: "Nastaviť bezheslové prihlásenie" +resetPassword: "Resetovať heslo" +newPasswordIs: "Nové heslo je \"{password}\"" +reduceUiAnimation: "Menej UI animácií" +share: "Zdieľať" +notFound: "Nenájdené" +notFoundDescription: "Nenašla sa žiadna stránka na zadanej URL." +uploadFolder: "Predvolený priečinok pre nahrávanie" +cacheClear: "Vyčistiť cache" +markAsReadAllNotifications: "Označiť všetky oznámenia ako prečítané" +markAsReadAllUnreadNotes: "Označiť všetky poznámky ako prečítané" +markAsReadAllTalkMessages: "Označiť všetky správy ako prečítané" +help: "Pomoc" +inputMessageHere: "Sem napíšte správu" +close: "Zavrieť" +group: "Skupina" +groups: "Skupiny" +createGroup: "Vytvoriť skupinu" +ownedGroups: "Vlastnené skupiny" +joinedGroups: "Členstvo v skupinách" +invites: "Pozvať" +groupName: "Názov skupiny" +members: "Členovia" +transfer: "Presun" +messagingWithUser: "Súkromný chat" +messagingWithGroup: "Skupinový chat" +title: "Nadpis" +text: "Text" +enable: "Povoliť" +next: "Ďalší" +retype: "Zadajte znovu" +noteOf: "Poznámky používateľa {user}" +inviteToGroup: "Pozvať do skupiny" +quoteAttached: "Citované" +quoteQuestion: "Pripojiť ako citát?" +noMessagesYet: "Zatiaľ žiadne správy" +newMessageExists: "Máte novú správu" +onlyOneFileCanBeAttached: "Ku správe môžete priložiť len jeden súbor" +signinRequired: "Prihláste sa, prosím!" +invitations: "Pozvať" +invitationCode: "Kód pozvánky" +checking: "Overujem..." +available: "Dostupné" +unavailable: "Nedostupné" +usernameInvalidFormat: "Povolené sú písmená, čísla a _." +tooShort: "Príliš krátke" +tooLong: "Príliš dlhé" +weakPassword: "Slabé heslo" +normalPassword: "Dobré heslo" +veryStrongPassword: "Silné heslo" +passwordMatched: "Heslá sú rovnaké" +passwordNotMatched: "Heslá nie sú rovnaké" +signinWith: "Prihlásiť sa použitím {x}" +signinFailed: "Nedá sa prihlásiť. Skontrolujte prosím meno používateľa a heslo." +tapSecurityKey: "Ťuknite na bezpečnostný kľúč" +or: "Alebo" +language: "Jazyk" +uiLanguage: "Jazyk používateľského prostredia" +groupInvited: "Pozvať do skupiny" +aboutX: "O {x}" +useOsNativeEmojis: "Používať natívne emoji z OS" +disableDrawer: "Nepoužívať šuflíkové menu" +youHaveNoGroups: "Nemáte žiadne skupiny" +joinOrCreateGroup: "Požiadajte o pozvanie do existujúcej skupiny alebo vytvorte novú." +noHistory: "Žiadna história" +signinHistory: "História prihlásení" +disableAnimatedMfm: "Vypnúť MFM s animáciou" +doing: "Pracujem..." +category: "Kategórie" +tags: "Značky" +docSource: "Zdroj tohoto dokumentu" +createAccount: "Vytvoriť účet" +existingAccount: "Existujúci účet" +regenerate: "Pregenerovať" +fontSize: "Veľkosť písma" +noFollowRequests: "Nemáte nijaké čakajúce žiadosti o sledovanie" +openImageInNewTab: "Otvoriť obrázok v novom tabe" +dashboard: "Prehľad" +local: "Lokálne" +remote: "Vzdialené" +total: "Celkom" +weekOverWeekChanges: "Medzitýždňové zmeny" +dayOverDayChanges: "Medzidenné zmeny" +appearance: "Vzhľad" +clientSettings: "Nastavenia klienta" +accountSettings: "Nastavenia účtu" +promotion: "Propagácia" +promote: "Propagovať" +numberOfDays: "Počet dní" +hideThisNote: "Skryť túto poznámku" +showFeaturedNotesInTimeline: "Zobraziť významné poznámky v časovej osi" +objectStorage: "Objektové úložisko" +useObjectStorage: "Použiť objektové úložisko" +objectStorageBaseUrl: "Základná URL" +objectStorageBaseUrlDesc: "URL použitá ako referencia. Zadajte URL svojho CDN alebo + Proxy ak niektoré používate. S3: 'https://.s3.amazonaws.com', GCS: 'https://storage.googleapis.com/' + atď." +objectStorageBucket: "Bucket" +objectStorageBucketDesc: "Prosím zadajte názov bucketu od svojho poskytovateľa." +objectStoragePrefix: "Prefix" +objectStoragePrefixDesc: "Súbory budú ukladané do priečinkov pod týmto prefixom." +objectStorageEndpoint: "Endpoint" +objectStorageEndpointDesc: "Nechajte prázdne ak používate AWS S3, inak zadajte endpoint + ako \"\" alebo \":\". Záleží to od služby, ktorú používate." +objectStorageRegion: "Región" +objectStorageRegionDesc: "Zadajte región ako 'xx-east-1'. Ak vaša služba nerozlišuje + regióny, nechajte prázdne alebo zadajte 'us-east-1'." +objectStorageUseSSL: "Použiť SSL" +objectStorageUseSSLDesc: "Vypnite to ak nechcete použiť HTTPS na API spojenia." +objectStorageUseProxy: "Pripájať cez Proxy" +objectStorageUseProxyDesc: "Vypnite ak nechcete, aby spojenia na API išli cez Proxy" +objectStorageSetPublicRead: "Pri nahratí nastaviť \"public-read\"" +serverLogs: "Logy servera" +deleteAll: "Odstrániť všetko" +showFixedPostForm: "Zobraziť formulár na nové príspevky nad časovou osou" +newNoteRecived: "Sú nové poznámky" +sounds: "Zvuky" +listen: "Počúvať" +none: "Žiadne" +showInPage: "Zobraziť v stránke" +popout: "Pop-out" +volume: "Hlasitosť" +masterVolume: "Celková hlasitosť" +details: "Detaily" +chooseEmoji: "Vybrať emoji" +unableToProcess: "Operáciu sa nepodarilo dokončiť." +recentUsed: "Neposledy použité" +install: "Nainštalovať" +uninstall: "Odinštalovať" +installedApps: "Autorizované aplikácie" +nothing: "Nič tu nie je" +installedDate: "Dátum autorizácie" +lastUsedDate: "Naposledy použité" +state: "Status" +sort: "Zoradiť" +ascendingOrder: "Vzostupne" +descendingOrder: "Zostupne" +scratchpad: "Zápisník" +scratchpadDescription: "Zápisník poskytuje prostredia pre experimenty s AiScriptom. + Môžete písať, spúšťať a skúšať vysledky pri interakcii s Firefish." +output: "Výstup" +script: "Skript" +disablePagesScript: "Vypnúť AiScript na stránkach" +updateRemoteUser: "Aktualizovať informácie o vzdialenom účte" +deleteAllFiles: "Odstrániť všetky súbory" +deleteAllFilesConfirm: "Naozaj chcete odstrániť všetky súbory" +removeAllFollowing: "Zrušiť sledovani všetkých používateľov" +removeAllFollowingDescription: "Týmto zrušíte sledovanie všetkých používateľov z {host}. + Spustite to prosím, keď server napríklad už neexistuje." +userSuspended: "Tento používateľ je zmrazený." +userSilenced: "Tento používateľ je umlčaný." +yourAccountSuspendedTitle: "Tento účet je zmrazený" +yourAccountSuspendedDescription: "Tento účet bol zmrazený, lebo porušoval zmluvné + podmienky. Kontaktujte administrátora ak chcete viac podrobností. Prosím nevytvárajte + nový účet." +menu: "Menu" +divider: "Oddeľovač" +addItem: "Pridať položku" +relays: "Prenos" +addRelay: "Pridať prenos" +inboxUrl: "Inbox URL" +addedRelays: "Pridané prenosy" +serviceworkerInfo: "Musí byť zapnuté pre push notifikácie." +deletedNote: "Odstránené príspevky" +invisibleNote: "Skryté príspevky" +enableInfiniteScroll: "Zapnúť nekonečné skrolovanie" +visibility: "Viditeľnosť" +poll: "Hlasovanie" +useCw: "Skryť obsah" +enablePlayer: "Otvoriť video prehrávač" +disablePlayer: "Zavrieť video prehrávač" +expandTweet: "Rozšíriť tweet" +themeEditor: "Editor tém" +description: "Popis" +describeFile: "Pridať nadpis" +enterFileDescription: "Zadajte nadpis" +author: "Autor" +leaveConfirm: "Máte neuložené zmeny. Chcete ich zahodiť?" +manage: "Administrácia" +plugins: "Pluginy" +preferencesBackups: "Zálohy nastavení" +deck: "Deck" +useBlurEffectForModal: "Použiť efekt rozmazania na okná" +useFullReactionPicker: "Použiť plnú veľkosť výberu reakcií" +width: "Šírka" +height: "Výška" +large: "Veľké" +medium: "Stredné" +small: "Malé" +generateAccessToken: "Vygenerovať prístupový token" +permission: "Oprávnenia" +enableAll: "Povoliť všetko" +disableAll: "Vypnúť všetko" +tokenRequested: "Povoliť prístup k účtu" +pluginTokenRequestedDescription: "Tento plugin bude môcť používať oprávnenia nastavené + tu." +notificationType: "Typ oznámenia" +edit: "Upraviť" +emailServer: "Email server" +enableEmail: "Zapnúť email" +emailConfigInfo: "Používa sa na overenie emaily pri registrácii alebo pri zabudnutí + hesla" +email: "Email" +emailAddress: "Emailová adresa" +smtpConfig: "Nastavenia SMTP servera" +smtpHost: "Host" +smtpPort: "Port" +smtpUser: "Meno používateľa" +smtpPass: "Heslo" +emptyToDisableSmtpAuth: "Vynechaním mena hesla vypnete SMTP verifikáciu" +smtpSecure: "Použiť implicitné SSL/TLS pre SMTP spojenia" +smtpSecureInfo: "Toto vypnite keď používate STARTTLS" +testEmail: "Doručenie testovacieho emailu" +wordMute: "Stíšenie slova" +regexpError: "Chyba v regulárnom výraze" +regexpErrorDescription: "Na riadku {line} sa vyskytla chyba v stíšenom slove {tab}." +instanceMute: "Stíšené servery" +userSaysSomething: "{name} niečo povedal/a" +makeActive: "Aktivovať" +display: "Zobraziť" +copy: "Kopírovať" +metrics: "Metriky" +overview: "Prehľad" +logs: "Logy" +delayed: "Oneskorené" +database: "Databáza" +channel: "Kanály" +create: "Vytvoriť" +notificationSetting: "Nastavenia oznámení" +notificationSettingDesc: "Vyberte typ oznámení na zobrazenie" +useGlobalSetting: "Použiť globálne nastavenie" +useGlobalSettingDesc: "Ak je zapnuté, použijú sa oznámenia vášho účtu. Ak je vypnuté, + použijú sa jednotlivé nastavenia." +other: "Ostatní" +regenerateLoginToken: "Pregenerovať prihlasovací token" +regenerateLoginTokenDescription: "Pregeneruje token interne používaný počas prihlásenia. + Normálne toto netreba robiť. Ak sa pregeneruje, všetky zariadenia sa odhlásia." +setMultipleBySeparatingWithSpace: "Viaceré položky oddeľte medzerami." +fileIdOrUrl: "ID alebo URL súboru" +behavior: "Správanie" +sample: "Ukážka" +abuseReports: "Nahlásenia" +reportAbuse: "Nahlásiť" +reportAbuseOf: "Nahlásiť {name}" +fillAbuseReportDescription: "Prosím vyplňte podrobnosti nahlásenia. Ak sa týka konkrétnej + poznámky, prosím napíšte jej URL." +abuseReported: "Vaše nahlásenie je odoslané. Veľmi pekne ďakujeme." +reporter: "Nahlásil" +reporteeOrigin: "Pôvod nahláseného" +reporterOrigin: "Pôvod nahlasovača" +forwardReport: "Preposlať nahlásenie na server" +forwardReportIsAnonymous: "Namiesto vášho účtu bude zobrazený anonymný systémový účet + na vzdialenom serveri ako autor nahlásenia." +send: "Poslať" +abuseMarkAsResolved: "Označiť nahlásenia ako vyriešené" +openInNewTab: "Otvoriť v novom tabe" +openInSideView: "Otvoriť v bočnom paneli" +defaultNavigationBehaviour: "Predvolené správanie navigácie" +editTheseSettingsMayBreakAccount: "Úpravou týchto nastavení si môžete pokaziť účet." +instanceTicker: "Informácie servera o poznámkach" +waitingFor: "Čaká sa na {x}" +random: "Náhodné" +system: "Systém" +switchUi: "Prepnúť UI" +desktop: "Desktop" +clip: "Klip" +createNew: "Vytvoriť nový" +optional: "Voliteľné" +createNewClip: "Vytvoriť nový klip" +unclip: "Odopnúť" +confirmToUnclipAlreadyClippedNote: "Táto poznámka je už pripnutá ako \"{name}\". Naozaj + ju chcete odopnúť?" +public: "Verejné" +i18nInfo: "Firefish je prekladaný do rôznych jazykov dobrovoľníkmi. Pomôcť môžete + na {link}." +manageAccessTokens: "Spravovať prístupové tokeny" +accountInfo: "Informácie o účte" +notesCount: "Počet poznámok" +repliesCount: "Počet odoslaných odpovedí" +renotesCount: "Počet preposlaných poznámok" +repliedCount: "Počet odpovedí prijatých" +renotedCount: "Počet preposlaní prijatých" +followingCount: "Počet sledovaných účtov" +followersCount: "Počet sledujúcich" +sentReactionsCount: "Počet poslaných reakcií" +receivedReactionsCount: "Počet prijatých reakcií" +pollVotesCount: "Počet odoslaných hlasov" +pollVotedCount: "Počet prijatých hlasov" +yes: "Áno" +no: "Nie" +driveFilesCount: "Počet súborov na disku" +driveUsage: "Využité miesto na disku" +noCrawle: "Odmietať indexovanie crawlerov" +noCrawleDescription: "Požiadať vyhľadávače, aby neindexovali váš profil, poznámky, + stránky, atď." +lockedAccountInfo: "Pokým nenastavíte viditeľnosť poznámok na \"Len pre sledujúcich\"\ + , vaše príspevky bude vidieť hocikto, aj keď vyžadujete manuálne potvrdenie sledovania." +alwaysMarkSensitive: "Predvolene označovať ako NSFW" +loadRawImages: "Načítať originálne obrázky namiesto miniatúr" +disableShowingAnimatedImages: "Neprehrávať animované obrázky" +verificationEmailSent: "Odoslali sme overovací email. Overenie dokončíte kliknutím + na odkaz v emaili." +notSet: "Nenastavené" +emailVerified: "Email overený" +noteFavoritesCount: "Počet obľúbených poznámok" +pageLikesCount: "Počet obľúbených stránok" +pageLikedCount: "Počet prijatých \"páči sa mi\"" +contact: "Kontakt" +useSystemFont: "Použiť predvolené systémové písmo" +clips: "Klip" +experimentalFeatures: "Experimentálne funkcie" +developer: "Vývojár" +makeExplorable: "Spraviť účet viditeľný v \"Objavovať\"" +makeExplorableDescription: "Ak toto vypnete, váš účet sa nezobrazí v sekcii \"Objavovat\"\ + ." +showGapBetweenNotesInTimeline: "Zobraziť medzeru medzi príspevkami časovej osi." +duplicate: "Duplikovať" +left: "Naľavo" +center: "Stred" +wide: "Široko" +narrow: "Úzko" +reloadToApplySetting: "Toto nastavenia sa prejaví až po obnovení stránky. Obnoviť + teraz?" +needReloadToApply: "Toto nastavenie sa prejaví až po obnovení stránky." +showTitlebar: "Zobraziť riadok s nadpisom" +clearCache: "Vyprázdniť cache" +onlineUsersCount: "{n} používateľov je online" +nUsers: "{n} používateľov" +nNotes: "{n} poznámok" +sendErrorReports: "Poslať nahlásenie chyby" +sendErrorReportsDescription: "Keď je zapnuté, v prípade problému sa odošlú podrobné + informácie o chybe do Firefish. Pomôžete tak zvýšiť kvalitu Firefish.\nTieto informácie + zahŕňajú verziu vášho OS, použitý prehliadač, históriu aktivít, atď." +myTheme: "Moja téma" +backgroundColor: "Pozadie" +accentColor: "Akcent" +textColor: "Text" +saveAs: "Uložiť ako..." +advanced: "Rozšírené" +value: "Hodnoty" +createdAt: "Vytvorené" +updatedAt: "Upravené" +saveConfirm: "Uložiť zmeny?" +deleteConfirm: "Naozaj odstrániť?" +invalidValue: "Nesprávna hodnota." +registry: "Register" +closeAccount: "Zavrieť účet" +currentVersion: "Aktuálna verzia" +latestVersion: "Najnovšia verzia" +youAreRunningUpToDateClient: "Používate najnovšiu verziu vášho klienta." +newVersionOfClientAvailable: "Je dostupná novšia verzia vášho klienta." +usageAmount: "Využitie" +capacity: "Kapacita" +inUse: "Použité" +editCode: "Upraviť kód" +apply: "Použiť" +receiveAnnouncementFromInstance: "Prijať notifikácie z tohoto servera" +emailNotification: "Emailové upozornenia" +publish: "Zverejniť" +inChannelSearch: "Hľadať v kanáli" +useReactionPickerForContextMenu: "Otvoriť výber reakcií na pravý klik" +typingUsers: "{users} píše" +jumpToSpecifiedDate: "Skočiť na konkrétny dátum" +showingPastTimeline: "Práve vidíte starú časovú os" +clear: "Vrátiť" +markAllAsRead: "Označiť všetko ako prečítané" +goBack: "Späť" +unlikeConfirm: "Naozaj odstrániť váš like?" +fullView: "Plný pohľad" +quitFullView: "Zavrieť plný pohľad" +addDescription: "Pridať popis" +userPagePinTip: "Tu môžete zobraziť poznámky zvolením \"Pripnúť na profil\" z menu + jednotlivých poznámok." +notSpecifiedMentionWarning: "Táto poznámka obsahuje spomenutých používateľov, ktorí + nie sú medzi adresátmi." +info: "Informácie" +userInfo: "Informácie o používateľovi" +unknown: "Neznáme" +onlineStatus: "Online status" +hideOnlineStatus: "Skryť online status" +hideOnlineStatusDescription: "Skrytie vášho online statusu zníži pohodlnosť niektorých + funkcií ako napríklad vyhľadávanie." +online: "Online" +active: "Aktívny" +offline: "Offline" +notRecommended: "Neodporúčané" +botProtection: "Bot ochrana" +instanceBlocking: "Blokované servery" +selectAccount: "Vyberte účet" +switchAccount: "Prepnút účet" +enabled: "Zapnuté" +disabled: "Vypnuté" +quickAction: "Rýchle akcie" +user: "Používatelia" +administration: "Spravovanie" +accounts: "Účty" +switch: "Prepnúť" +noMaintainerInformationWarning: "Informácie správcu nie sú nastavené." +noBotProtectionWarning: "Ochrana proti botom nie je nastavená." +configure: "Konfigurovať" +postToGallery: "Vytvoriť nový príspevok v galérii" +gallery: "Galéria" +recentPosts: "Najnovšie príspevky" +popularPosts: "Populárne príspevky" +shareWithNote: "Zdieľať s poznámkou" +ads: "Reklamy" +expiration: "Ukončiť hlasovanie" +memo: "Memo" +priority: "Priorita" +high: "Vysoká" +middle: "Stredné" +low: "Málo" +emailNotConfiguredWarning: "Nie je nastavená emailová adresa." +ratio: "Pomer" +previewNoteText: "Zobraziť náhľad" +customCss: "Vlastné CSS" +customCssWarn: "Toto nastavenie by sa malo používať iba ak viete čo robíte. Zadanie + nesprávnych hodnôt môže spôsobiť nenormálne správanie klienta." +global: "Globálne" +squareAvatars: "Zobrazovať štvorcové avatary" +sent: "Poslať" +received: "Prijaté" +searchResult: "Výsledky hľadania" +hashtags: "Hashtagy" +troubleshooting: "Riešenie problémov" +useBlurEffect: "Používať efekty rozmazania v UI" +learnMore: "Zistiť viac" +misskeyUpdated: "Firefish sa aktualizoval!" +whatIsNew: "Čo je nové?" +translate: "Preložiť" +translatedFrom: "Preložené z {x}" +accountDeletionInProgress: "Odstraňovanie účtu prebieha" +usernameInfo: "Meno, ktoré odlišuje váš účet od ostatných na tomto serveri. Môžete + použiť abecedu (a~z, A~Z), čísla (0~9) alebo podtržník (_). Používateľské mená sa + nedajú neskôr zmeniť." +aiChanMode: "Ai režim" +keepCw: "Nechať varovania obsahu" +pubSub: "Pub/Sub účty" +lastCommunication: "Posledná komunikácia" +resolved: "Vyriešené" +unresolved: "Nevyriešené" +breakFollow: "Nesledovať" +itsOn: "Zapnuté" +itsOff: "Vypnuté" +emailRequiredForSignup: "Registrácia vyžaduje emailovú adresu" +unread: "Neprečítané" +filter: "Filter" +controlPanel: "Ovládací panel" +manageAccounts: "Správa účtov" +makeReactionsPublic: "Reakcie sú verejné" +makeReactionsPublicDescription: "Toto spraví všetky vaše minulé reakcie viditeľné + verejnosti." +classic: "Klasika" +muteThread: "Ztíšiť vlákno" +unmuteThread: "Zrušiť stíšenie vlákna" +ffVisibility: "Viditeľnosť sledujúcich/sledovaných" +ffVisibilityDescription: "Umožňuje nastaviť kto vidí koho sledujete a kto vás sleduje." +continueThread: "Zobraziť pokračovanie vlákna" +deleteAccountConfirm: "Toto nezvrátiteľne vymaže váš účet. Pokračovať?" +incorrectPassword: "Nesprávne heslo." +voteConfirm: "Potvrdzujete svoj hlas za \"{choice}\"?" +hide: "Skryť" +leaveGroup: "Opustiť skupiny" +leaveGroupConfirm: "Naozaj chcete opustiť \"{name}\"?" +useDrawerReactionPickerForMobile: "Zobraziť výber reakcií ako šuflík na mobile" +welcomeBackWithName: "Vitajte späť, {name}" +clickToFinishEmailVerification: "Kliknutím na [{ok}] dokončíte overeniu emailu." +overridedDeviceKind: "Typ zariadenia" +smartphone: "Smartfón" +tablet: "Tablet" +auto: "Automaticky" +themeColor: "Farba témy" +size: "Veľkosť" +numberOfColumn: "Počet stĺpcov" +instanceDefaultLightTheme: "Predvolená svetlá téma" +instanceDefaultDarkTheme: "Predvolená tmavá téma" +instanceDefaultThemeDescription: "Vložte kód témy v objektovom formáte" +mutePeriod: "Trvanie stíšenia" +indefinitely: "Navždy" +tenMinutes: "10 minút" +oneHour: "1 hodina" +oneDay: "1 deň" +oneWeek: "1 týždeň" +reflectMayTakeTime: "Zmeny môžu chvíľu trvať kým sa prejavia." +failedToFetchAccountInformation: "Nepodarilo sa načítať informácie o účte." +rateLimitExceeded: "Prekročený limit rýchlosti" +cropImage: "Orezanie obrázku" +cropImageAsk: "Chcete orezať obrázok?" +file: "Súbor/y" +recentNHours: "Posledných {n} hodín" +recentNDays: "Posledných {n} dní" +noEmailServerWarning: "Nie je nastavený emailový server." +thereIsUnresolvedAbuseReportWarning: "Existuje nevyriešené nahlásenie zneužitia." +recommended: "Odporúčané" +driveCapOverrideLabel: "Zmena limitu úložiska pre tohoto používateľa" +driveCapOverrideCaption: "Ak je zadaná hodnota menšia alebo rovná 0, zruší sa." +isSystemAccount: "Tieto účty automaticky vytvoril a spravuje systém." +typeToConfirm: "Ak chcete vykonať túto operáciu, napíšte {x}" +deleteAccount: "Vymazať účet" +document: "Dokument" +numberOfPageCache: "Počet cachí pre stránky" +numberOfPageCacheDescription: "Zvýši rýchlosť ale tiež nároky na pamäť." +logoutConfirm: "Naozaj sa chcete odhlásiť?" +statusbar: "Stavový riadok" +pleaseSelect: "Prosím vyberte" +reverse: "Preklopiť" +colored: "Farebné" +refreshInterval: "Interval obnovenia" +label: "Popisok" +type: "Typ" +speed: "Rýchlosť" +slow: "Pomaly" +fast: "Rýchlo" +sensitiveMediaDetection: "Detekcia citlivých médií." +localOnly: "Iba lokálne" +remoteOnly: "Len vzdialené" +failedToUpload: "Nahrávanie zlyhalo" +cannotUploadBecauseInappropriate: "Nemožno nahrať, pretože pravdepodobne obsahuje + nevhodný obsah." +cannotUploadBecauseNoFreeSpace: "Nemožno nahrať kvôli nedostatku voľného úložiska." +beta: "Beta" +enableAutoSensitive: "Automatická detekcia NSFW" +enableAutoSensitiveDescription: "Ak je zapnuté, príznak NSFW sa na médiách automaticky + nastaví pomocou strojového učenia. Aj keď je táto funkcia vypnutá, v niektorých + prípadoch sa môže nastaviť automaticky." +activeEmailValidationDescription: "Dôkladnejšie overí e-mailovú adresu používateľa + tým, že zistí, či ide o vyradenú e-mailovú adresu a či sa s ňou dá skutočne komunikovať. + Ak nie je začiarknuté, e-mailová adresa sa kontroluje len ako text." +navbar: "Navigačný panel" +account: "Účty" +move: "Pohyb" +_sensitiveMediaDetection: + description: "Strojové učenie sa použije na automatickú detekciu citlivých médií + na účely ich moderovania. Mierne sa zvýši zaťaženie servera." + sensitivity: "Citlivosť detekcie" + sensitivityDescription: "Nižšia citlivosť znižuje počet falošne pozitívnych výsledkov + (false positives). Vyššia citlivosť znižuje počet falošne negatívnych výsledkov + (false negatives)." + setSensitiveFlagAutomatically: "Nastaviť príznak NSFW" + setSensitiveFlagAutomaticallyDescription: "Aj keď je toto nastavenie vypnuté, výsledok + rozhodnutia je interne uložený." + analyzeVideos: "Zapnúť analýzu videa" + analyzeVideosDescription: "Okrem obrázkov zapne detekciu aj pre videá. Zaťaženie + servera sa mierne zvýši." +_emailUnavailable: + used: "Táto emailová adresa sa už používa" + format: "Formát emailovej adresy je nesprávny" + disposable: "Jednorázové emailové adresy sa nemôžu používať." + mx: "Tento emailový server nefunguje." + smtp: "Tento emailový server neodpovedá." +_ffVisibility: + public: "Zverejniť" + followers: "Len viditeľní sledujúci" + private: "Súkromné" +_signup: + almostThere: "Skoro na konci" + emailAddressInfo: "Prosím zadajte svoju emailovú adresu!" + emailSent: "Na vašu emailovú adresu ({email}) sme odoslali email. Vytvorenie účtu + dokončíte kliknutím na odkaz v emaili." +_accountDelete: + accountDelete: "Odstrániť účet" + mayTakeTime: "Keďže odstránenie účtu je náročný proces, môže to nejaký čas trvať. + Záleží koľko obsahu ste vytvorili a koľko súborov ste nahrali." + sendEmail: "Po odstránení účtu vám pošleme email na emailovú adresu zadanú pri registrácii + tohoto účtu." + requestAccountDelete: "Požiadať o zmazanie účtu" + started: "Odstraňovanie začalo." + inProgress: "Odstraňovanie prebieha" +_ad: + back: "Späť" + reduceFrequencyOfThisAd: "Túto reklamu zobrazovať menej" +_forgotPassword: + enterEmail: "Zadajte emailovú adresu, ktorú ste použili pri registrácii. Pošleme + vám na ňu odkaz, cez ktorý si môžete obnoviť heslo." + ifNoEmail: "Ak ste pri registrácii nepoužili email, prosím kontaktujte administrátora." + contactAdmin: "Tento server nepodporuje používanie emailových adries, prosím kontaktuje + administrátor, ktorý vám resetuje heslo." +_gallery: + my: "Moja galéria" + liked: "Obľúbené príspevky" + like: "Páči sa mi" + unlike: "Nepáči sa mi" +_email: + _follow: + title: "Máte nového sledujúceho" + _receiveFollowRequest: + title: "Dostali ste žiadosť o sledovanie" +_plugin: + install: "Inštalova pluginy" + installWarn: "Prosím neinštalujte nedôveryhodné pluginy." + manage: "Spravovanie pluginov" +_preferencesBackups: + list: "Vytvorené zálohy" + saveNew: "Uložiť novú" + loadFile: "Nahrať súbor" + apply: "Použiť na toto zariadenie" + save: "Uložiť" + inputName: "Názov zálohy" + cannotSave: "Nedá sa uložiť" + nameAlreadyExists: "Záloha s názvom \"{name}\" už existuje. Zadajte iný názov." + applyConfirm: "Chcete použiť zálohu '{name}' na aktuálne zariadenie? Aktuálne nastavenia + zariadenia sa stratia." + saveConfirm: "Chcete prepísať {name}?" + deleteConfirm: "Naozaj chcete odstrániť \"{name}\"?" + renameConfirm: "Chcete zmeniť \"{old}\" na \"{new}\"?" + noBackups: "Nie je k dispozícii žiadna záloha. \"Uložiť novú\" umožňuje uložiť aktuálnu + konfiguráciu zariadenia na server." + createdAt: "Dátum vytvorenia: {date} {time}" + updatedAt: "Dátum úpravy: {date} {time}" + cannotLoad: "Nedá sa nahrať" + invalidFile: "Neplatný formát súboru" +_registry: + scope: "Oblasť" + key: "Kľúč" + keys: "Kľúče" + domain: "Doména" + createKey: "Vytvoriť kľúč" +_aboutFirefish: + about: "Misskey je open-source softvér, ktorý vyvíja syuilo od 2014." + contributors: "Hlavní prispievatelia" + allContributors: "Všetci prispievatelia" + source: "Zdrojový kód" + translation: "Preložiť Firefish" + donate: "Podporiť Firefish" +_nsfw: + respect: "Skryť NSFW médiá" + ignore: "Neskrývať NSFW médiá" + force: "Skryť všetky médiá" +_mfm: + cheatSheet: "MFM Cheatsheet" + intro: "MFM je Firefish exkluzívny značkovací jazyk, ktorý sa dá používať na viacerých + miestach. Tu môžete vidieť zoznam všetkej dostupnej MFM syntaxe." + dummy: "Firefish rozširuje svet Fediverza" + mention: "Zmienka" + mentionDescription: "Používateľa spomeniete použítím zavináča a mena používateľa" + hashtag: "Hashtag" + hashtagDescription: "Môžete zadať hashtag použitím mriežky a textu" + url: "URL" + urlDescription: "URL sa dajú zobraziť." + link: "Odkaz" + linkDescription: "Jednotlivé časti texty sa dajú zobraziť ako URL." + bold: "Tučné" + boldDescription: "Zvýrazní písmená tým, že budú tučnejšie." + small: "Malé" + smallDescription: "Zobrazí obsah malý a tenký." + center: "Vystrediť prvky" + centerDescription: "Zobrazí obsah v strede" + inlineCode: "Kód (inline)" + inlineCodeDescription: "Zobrazí kód so zvýraznením syntaxe." + blockCode: "Kód (blok)" + blockCodeDescription: "Zobrazí viacriadkový kód so zvýraznením syntaxe v bloku." + inlineMath: "Vzorec (inline)" + inlineMathDescription: "Zobrazí matematický vzorec (KaTeX) v riadku." + blockMath: "Vzorec (blok)" + blockMathDescription: "Zobrazí viacriadkový matematický vzorec (KaTeX) v bloku" + quote: "Citovať" + quoteDescription: "Zobrazí obsah ako citát." + emoji: "Vlastné emoji" + emojiDescription: "Pridaním dvojbodiek pred a za názov vlastnej emoji, sa dá zobraziť + vlastná emoji." + search: "Hľadať" + searchDescription: "Zobrazí vyhľadávacie pole so zadaným textom." + flip: "Preklopiť" + flipDescription: "Preklopí obsah horizontálne alebo vertikálne" + jelly: "Animácia (želé)" + jellyDescription: "Obsah sa bude hýbať ako želé." + tada: "Animácia (tadá)" + tadaDescription: "Obsah sa bude hýbať ako Tada!" + jump: "Animácia (skok)" + jumpDescription: "Obsah skočí." + bounce: "Animácia (odraz)" + bounceDescription: "Obsah sa bude odrážať." + shake: "Animácia (trasenie)" + shakeDescription: "Obsah sa bude triasť." + twitch: "Animácia (myknutie)" + twitchDescription: "Obsahu dá animáciu silného trasenia." + spin: "Animácia (rotácia)" + spinDescription: "Obsahu pridá otáčajúcu animáciu." + x2: "Veľký" + x2Description: "Zobrazí obsah väčší." + x3: "Veľmi veľký" + x3Description: "Zobrazí obsah ešte väčší." + x4: "Neuveriteľne veľký" + x4Description: "Zobrazí obsah ešte viac veľký než veľmi veľký." + blur: "Rozmazanie" + blurDescription: "Týmto efektom môže byť obsah rozmazaný. Zaostrí sa keď ned neho + príde kurzor." + font: "Písmo" + fontDescription: "Nastaví písmo, ktorým sa zobrazí text." + rainbow: "Dúha" + rainbowDescription: "Zobrazí obsah vo farbách dúhy." + sparkle: "Trblietky" + sparkleDescription: "Obsahu dodá trblietajúci efekt." + rotate: "Otáčať" + rotateDescription: "Otočí obsah o určitý uhol." + plain: "Obyčajné" + plainDescription: "Bez akejkoľvej syntaxe" +_instanceTicker: + none: "Nikdy nezobrazovať" + remote: "Zobraziť pre vzdialených používateľov" + always: "Zobraziť vždy" +_serverDisconnectedBehavior: + reload: "Automaticky obnoviť" + dialog: "Zobraziť okno s varovaním" + quiet: "Zobraziť nerušivé varovanie" +_channel: + create: "Vytvoriť kanál" + edit: "Upraviť kanál" + setBanner: "Nastaviť banner" + removeBanner: "Odstrániť banner" + featured: "Trendy" + owned: "Vlastnené" + following: "Sledované" + usersCount: "{n} účastníkov" + notesCount: "{n} poznámok" +_menuDisplay: + sideFull: "Strana" + sideIcon: "Strana (Ikony)" + top: "Hore" + hide: "Skryť" +_wordMute: + muteWords: "Umlčané slová" + muteWordsDescription: "Medzerami oddeľte pre podmienku AND a novými riadkami pre + podmienku OR." + muteWordsDescription2: "Regulárne výrazy sa použijú keď použijete okolo lomítka." + softDescription: "Skryje poznámky z časovej osi, ktoré spĺňajú podmienky." + hardDescription: "Zabráni poznámky spĺňajúce množinu podmienok, aby boli pridané + do časovej osi. Navyše tieto poznámky nepribudnú v časovej osi ani keď sa podmienky + zmenia." + soft: "Mäkké" + hard: "Tvrdé" + mutedNotes: "Umlčané poznámky" +_instanceMute: + instanceMuteDescription: "Toto umlčí všetky poznámky/preposlania zo zoznamu serverov, + vrátane tých, na ktoré používatelia odpovedajú z umlčaného servera." + instanceMuteDescription2: "Oddeľte novými riadkami" + title: "Skryje poznámky z uvedených serverov." + heading: "Zoznam umlčaných inštancií" +_theme: + explore: "Objavovať témy" + install: "Nainštalovať tému" + manage: "Spravovať témy" + code: "Kód témy" + description: "Popis" + installed: "{name} je nainštalovaná" + installedThemes: "Nainštalované témy" + builtinThemes: "Vstavané témy" + alreadyInstalled: "Táto téma je už nainštalovaná" + invalid: "Formát tejto témy je nesprávny" + make: "Vytvoriť tému" + base: "Základ" + addConstant: "Pridať konštantu" + constant: "Konštanta" + defaultValue: "Predvolená hodnota" + color: "Farba" + refProp: "Odkaz na vlastnosť" + refConst: "Odkaz na konštantu" + key: "Kľúč" + func: "Funkcie" + funcKind: "Typ funkcie" + argument: "Argument" + basedProp: "Odkazovaná vlastnosť" + alpha: "Priehľadnosť" + darken: "Stmaviť" + lighten: "Zosvetliť" + inputConstantName: "Zadajte názov tejto konštanty" + importInfo: "Ak sem zadáte kód témy, môžete ju importovať do editora tém." + deleteConstantConfirm: "Naozaj chcete odstrániť konštantu {const}?" + keys: + accent: "Akcent" + bg: "Pozadie" + fg: "Text" + focus: "Fokus" + indicator: "Indikátor" + panel: "Panel" + shadow: "Tieň" + header: "Hlavička" + navBg: "Pozadie bočného panela" + navFg: "Text bočného panela" + navHoverFg: "Text bočného panela (pod kurzorom)" + navActive: "Text bočného panela (aktívny)" + navIndicator: "Indikátor bočného panela" + link: "Odkaz" + hashtag: "Hashtag" + mention: "Zmienka" + mentionMe: "Zmienky (mňa)" + renote: "Preposlať" + modalBg: "Pozadie modálu" + divider: "Oddeľovač" + scrollbarHandle: "Rúčka scrollbaru" + scrollbarHandleHover: "Rúčka scrollbaru (pod kurzorom)" + dateLabelFg: "Text dátového popisku" + infoBg: "Pozadie informácií" + infoFg: "Informačný text" + infoWarnBg: "Pozadie varovania" + infoWarnFg: "Text varovania" + cwBg: "CW pozadie tlačidla" + cwFg: "CW text tlačidla" + cwHoverBg: "CW pozadie tlačidla (pod kurzorom)" + toastBg: "Pozadie upozornenia" + toastFg: "Text upozornenia" + buttonBg: "Pozadie tlačidla" + buttonHoverBg: "Pozadie tlačidla (pod kurzorom)" + inputBorder: "Okraj vstupného poľa" + listItemHoverBg: "Pozadie položky zoznamu (pod kurzorom)" + driveFolderBg: "Pozadie priečinu disku" + wallpaperOverlay: "Vrstvenie pozadia" + badge: "Odznak" + messageBg: "Pozadie chatu" + accentDarken: "Akcent (stmavené)" + accentLighten: "Akcent (zosvetlené)" + fgHighlighted: "Zvýraznený text" +_sfx: + note: "Poznámky" + noteMy: "Vlastná poznámka" + notification: "Oznámenia" + chat: "Chat" + chatBg: "Chat (pozadie)" + antenna: "Antény" + channel: "Upozornenia kanála" +_ago: + future: "Budúcnosť" + justNow: "Teraz" + secondsAgo: "pred {n} sekundami" + minutesAgo: "pred {n} minútami" + hoursAgo: "pred {n} hodinami" + daysAgo: "pred {n} dňami" + weeksAgo: "pred {n} týždňami" + monthsAgo: "pred {n} mesiacmi" + yearsAgo: "pred {n} rokmi" +_time: + second: "s" + minute: "min" + hour: "hod" + day: "dní" +_tutorial: + title: "How to use Firefish" + step1_1: "Welcome!" + step1_2: "Let's get you set up. You'll be up and running in no time!" + step2_1: "First, please fill out your profile." + step2_2: "Providing some information about who you are will make it easier for others + to tell if they want to see your notes or follow you." + step3_1: "Now time to follow some people!" + step3_2: "Your home and social timelines are based off of who you follow, so try + following a couple accounts to get started.\nClick the plus circle on the top + right of a profile to follow them." + step4_1: "Let's get you out there." + step4_2: "For your first post, some people like to made a {introduction} post or + a simple \"Hello world!\"" + step5_1: "Timelines, timelines everywhere!" + step5_2: "Your instance has {timelines} different timelines enabled." + step5_3: "The Home {icon} timeline is where you can see posts from your followers." + step5_4: "The Local {icon} timeline is where you can see posts from everyone else + on this instance." + step5_5: "The Recommended {icon} timeline is where you can see posts from instances + the admins recommend." + step5_6: "The Social {icon} timeline is where you can see posts from friends of + your followers." + step5_7: "The Global {icon} timeline is where you can see posts from every other + connected instance." + step6_1: "So, what is this place?" + step6_2: "Well, you didn't just join Firefish. You joined a portal to the Fediverse, + an interconnected network of thousands of servers, called \"instances\"." + step6_3: "Each server works in different ways, and not all servers run Firefish. + This one does though! It's a bit complicated, but you'll get the hang of it in + no time." + step6_4: "Now go, explore, and have fun!" +_2fa: + alreadyRegistered: "Už ste zaregistrovali 2-faktorové autentifikačné zariadenie." + registerTOTP: "Registrovať nové zariadenie" + registerSecurityKey: "Registrovať bezpečnostný kľúč" + step1: "Najprv si nainštalujte autentifikačnú aplikáciu (napríklad {a} alebo {b}) + na svoje zariadenie." + step2: "Potom, naskenujte QR kód zobrazený na obrazovke." + step2Url: "Do aplikácie zadajte nasledujúcu URL adresu:" + step3: "Nastavenie dokončíte zadaním tokenu z vašej aplikácie." + step4: "Od teraz, všetky ďalšie prihlásenia budú vyžadovať prihlasovací token." + securityKeyInfo: "Okrem odtlačku prsta alebo PIN autentifikácie si môžete nastaviť + autentifikáciu cez hardvérový bezpečnostný kľúč podporujúci FIDO2 a tak ešte viac + zabezpečiť svoj účet." +_permissions: + "read:account": "Vidieť informácie o vašom účte" + "write:account": "Upraviť informácie o vašom účte" + "read:blocks": "Vidieť zoznam blokovaných používateľov" + "write:blocks": "Upraviť zoznam blokovaných používateľov" + "read:drive": "Prístup k súborom a priečinkom na disku" + "write:drive": "Upraviť alebo odstrániť súbory a priečinky na disku" + "read:favorites": "Vidieť váš zoznam obľúbených" + "write:favorites": "Upraviť váš zoznam obľúbených" + "read:following": "Vidieť koho sledujete" + "write:following": "Sledovať alebo nesledovať ďalšie účty" + "read:messaging": "Vidieť vaše chaty" + "write:messaging": "Písať alebo odstraňovať správy v chate" + "read:mutes": "Vidieť váš zoznam stíšených používateľov" + "write:mutes": "Upravovať zoznam stíšených používateľov" + "write:notes": "Písať alebo odstrániť poznámky" + "read:notifications": "Vidieť vaše oznámenia" + "write:notifications": "Pracovať s vašimi notifikáciami" + "read:reactions": "Vidieť vaše reakcie" + "write:reactions": "Upravovať vaše reakcie" + "write:votes": "Hlasovať v hlasovaniach" + "read:pages": "Vidieť vaše stránky" + "write:pages": "Upraviť alebo odstrániť vaše stránky" + "read:page-likes": "Vidieť vaše páčiky na stránkach" + "write:page-likes": "Upraviť páčiky na stránkach" + "read:user-groups": "Vidieť vaše skupiny" + "write:user-groups": "Upraviť alebo odstrániť vaše skupiny" + "read:channels": "Čítať vaše kanály" + "write:channels": "Upravovať vaše kanály" + "read:gallery": "Vidieť vašu galériu" + "write:gallery": "Upravovať vašu galériu" + "read:gallery-likes": "Vidieť zoznam obľúbených príspevkov z galérie" + "write:gallery-likes": "Upraviť zoznam obľúbených príspevov z galérie" +_auth: + shareAccess: "Prajete si povoliť \"{name}\", aby mal prístup k tomuto účtu?" + shareAccessAsk: "Naozaj chcete povoliť tejto aplikácii prístup k tomuto účtu?" + permissionAsk: "Táto aplikácia vyžaduje nasledujúce nastavenia" + pleaseGoBack: "Prosím prejdite späť na aplikáciu" + callback: "Vraciam sa späť na aplikáciu" + denied: "Prístup zamietnutý" +_antennaSources: + all: "Všetky poznámky" + homeTimeline: "Poznámky od sledovaného používateľa" + users: "Poznámky od konkrétneho používateľa" + userList: "Poznámky od používateľov v zozname" + userGroup: "Poznámky od používateľov z konkrétnej skupiny." +_weekday: + sunday: "Nedeľa" + monday: "Pondelok" + tuesday: "Utorok" + wednesday: "Streda" + thursday: "Štvrtok" + friday: "Piatok" + saturday: "Sobota" +_widgets: + memo: "Prilepené poznámky" + notifications: "Oznámenia" + timeline: "Časová os" + calendar: "Kalendár" + trends: "Trendy" + clock: "Hodiny" + rss: "RSS čítačka" + rssTicker: "RSS Ticker" + activity: "Aktivita" + photos: "Fotky" + digitalClock: "Digitálne hodiny" + unixClock: "UNIX čas" + federation: "Federácia" + instanceCloud: "Cloud serverov" + postForm: "Napísať poznámku" + slideshow: "Prezentácia" + button: "Tlačidlo" + onlineUsers: "Online používatelia" + jobQueue: "Fronta úloh" + serverMetric: "Metriky servera" + aiscript: "Konzola AiScript" + aichan: "Ai" +_cw: + hide: "Skryť" + show: "Zobraziť viac" + chars: "{count} znakov" + files: "{count} súbor/ov" +_poll: + noOnlyOneChoice: "Treba aspoň dve voľby" + choiceN: "Voľba {n}" + noMore: "Nemôžete pridať viac volieb" + canMultipleVote: "Povoliť hlasovať za viac volieb." + expiration: "Ukončiť hlasovanie" + infinite: "Nikdy" + at: "Konkrétny dátum..." + after: "Ukončiť po..." + deadlineDate: "Dátum ukončenia" + deadlineTime: "hod" + duration: "Trvanie" + votesCount: "{n} hlasov" + totalVotes: "{n} hlasov celkom" + vote: "Hlasovať" + showResult: "Vidieť výsledky hlasovania" + voted: "Zahlasované" + closed: "Skončilo" + remainingDays: "zostáva {d} dní {h} hodín" + remainingHours: "zostáva {h} hodín {m} minút" + remainingMinutes: "zostáva {m} minút {s} sekúnd" + remainingSeconds: "zostáva {s} sekúnd" +_visibility: + public: "Verejné" + publicDescription: "Vaša poznámku bude viditeľná všetkým používateľom" + home: "Domov" + homeDescription: "Pridať iba na domácu časovú os" + followers: "Sledujúci" + followersDescription: "Viditeľné iba tým, ktorí vás sledujú" + specified: "Priame" + specifiedDescription: "Viditeľné iba pre konkrétnych používateľov" + localOnly: "Iba lokálne" + localOnlyDescription: "Vzdialený používatelia nebudú vidieť" +_postForm: + replyPlaceholder: "Odpoveď na túto poznámku..." + quotePlaceholder: "Citovanie tejto poznámky..." + channelPlaceholder: "Poslať do kanála..." + _placeholders: + a: "Čo máte v pláne?" + b: "Čo sa deje?" + c: "O čom rozmýšľaš?" + d: "Čo chcete povedať?" + e: "Začnite písať..." + f: "Čaká sa na písanie..." +_profile: + name: "Názov" + username: "Meno používateľa" + description: "Bio" + youCanIncludeHashtags: "Vo svojom bio môžete mať aj hashtagy." + metadata: "Dodatočné informácie" + metadataEdit: "Upraviť dodatočné informácie" + metadataDescription: "Vo svojom profile môžete uviesť až štyri dodatočné informačné + polia. Dodate lahko oznako {a} ali oznako {l} z {rel}, da preverite povezavo v + svojem profile!" + metadataLabel: "Popisok" + metadataContent: "Obsah" + changeAvatar: "Zmeniť avatara" + changeBanner: "Zmeniť banner" +_exportOrImport: + allNotes: "Všetky poznámky" + followingList: "Sledujete" + muteList: "Vypnúť zvuk" + blockingList: "Zablokovať" + userLists: "Zoznamy" + excludeMutingUsers: "Vylúčiť stíšených používateľov" + excludeInactiveUsers: "Vylúčiť neaktívnych používateľov" +_charts: + federation: "Federácia" + apRequest: "Žiadosti" + usersIncDec: "Rozdiel v počte používateľov" + usersTotal: "Celkový počet používateľov" + activeUsers: "Aktívni používatelia" + notesIncDec: "Rozdiel v počte poznámok" + localNotesIncDec: "Rozdiel v počte lokálnych poznámok" + remoteNotesIncDec: "Rozdiel v počte vzdialených poznámok" + notesTotal: "Celkový počet poznámok" + filesIncDec: "Rozdiel v počte súborov" + filesTotal: "Celkový počet súborov" + storageUsageIncDec: "Rozdiel využitého úložiska" + storageUsageTotal: "Celkové využité úložisko" +_instanceCharts: + requests: "Žiadosti" + users: "Rozdiel v počte používateľov" + usersTotal: "Celkom spolu počet používateľov" + notes: "Rozdiel v počte poznámok" + notesTotal: "Celkom spolu počet poznámok" + ff: "Rozdiel v počte sledovaných/sledujúcich" + ffTotal: "Celkom spolu počet sledovaných / sledujúcich" + cacheSize: "Rozdiel vo veľkosti cache" + cacheSizeTotal: "Celkom spolu veľkosť cache" + files: "Rozdiel v počte súborov" + filesTotal: "Celkom spolu počet súborov" +_timelines: + home: "Domov" + local: "Lokálne" + social: "Sociálne" + global: "Globálne" +_pages: + newPage: "Vytvoriť novú stránku" + editPage: "Upraviť túto stránku" + readPage: "Zobrazenie zdroja aktívne" + created: "Stránka úspešne vytvorená" + updated: "Stránka úspešne upravená" + deleted: "Stránka úspešne odstránená" + pageSetting: "Nastavenia stránky" + nameAlreadyExists: "Zadaná URL stránku už existuje" + invalidNameTitle: "Zadaná URL stránku je nesprávna" + invalidNameText: "Uistite sa, že nadpis stránky nie je prázdny" + editThisPage: "Upraviť túto stránku" + viewSource: "Ukázať zdroj" + viewPage: "Ukázať vaše stránky" + like: "Páči sa mi" + unlike: "Nepáči sa mi" + my: "Moje stránky" + liked: "Obľúbené stránky" + featured: "Význačné" + inspector: "Inšpektor" + contents: "Obsah" + content: "Blok stránky" + variables: "Premenné" + title: "Nadpis" + url: "URL stránky" + summary: "Zhrnutie stránky" + alignCenter: "Vystrediť prvky" + hideTitleWhenPinned: "Skryť nadpis stránky keď je pripnutá na profil" + font: "Písmo" + fontSerif: "Pätkové" + fontSansSerif: "Bezpätkové" + eyeCatchingImageSet: "Nastaviť miniatúru" + eyeCatchingImageRemove: "Odstrániť miniatúru" + chooseBlock: "Pridať blok" + selectType: "Vyberte typ" + enterVariableName: "Zadajte meno premennej" + variableNameIsAlreadyUsed: "Meno premennej s už používa" + contentBlocks: "Obsah" + inputBlocks: "Vstup" + specialBlocks: "Špeciálne" + blocks: + text: "Text" + textarea: "Textové pole" + section: "Sekcia" + image: "Obrázky" + button: "Tlačidlo" + if: "Ak" + _if: + variable: "Premenné" + post: "Napísať poznámku" + _post: + text: "Obsah" + attachCanvasImage: "Príspevok s obrázkom na plátne" + canvasId: "ID plátna" + textInput: "Textový vstup" + _textInput: + name: "Meno premennej" + text: "Nadpis" + default: "Predvolená hodnota" + textareaInput: "Viacriadkový textový vstup" + _textareaInput: + name: "Meno premennej" + text: "Nadpis" + default: "Predvolená hodnota" + numberInput: "Číselný vstup" + _numberInput: + name: "Meno premennej" + text: "Nadpis" + default: "Predvolená hodnota" + canvas: "Plátno" + _canvas: + id: "ID plátna" + width: "Šírka" + height: "Výška" + note: "Vložená poznámka" + _note: + id: "ID poznámky" + idDescription: "Alebo môžete vložiť URL poznámky sem" + detailed: "Podrobný pohľad" + switch: "Prepnúť" + _switch: + name: "Meno premennej" + text: "Nadpis" + default: "Predvolená hodnota" + counter: "Počítadlo" + _counter: + name: "Meno premennej" + text: "Nadpis" + inc: "Pripočítať" + _button: + text: "Nadpis" + colored: "Farebné" + action: "Operácia po stlačení tlačidla" + _action: + dialog: "Zobraziť dialóg" + _dialog: + content: "Obsah" + resetRandom: "Resetovať zdroj náhodnosti" + pushEvent: "Poslať udalosť" + _pushEvent: + event: "Názov udalosti" + message: "Zobrazená správa po aktivácii" + variable: "Odoslaná premenná" + no-variable: "Žiadne" + callAiScript: "Spustiť AiScript" + _callAiScript: + functionName: "Názov funkcie" + radioButton: "Možnosť" + _radioButton: + name: "Meno premennej" + title: "Nadpis" + values: "Zoznam možností oddelené novými riadkami" + default: "Predvolená hodnota" + script: + categories: + flow: "Riadenie behu" + logical: "Logická operácia" + operation: "Výpočet" + comparison: "Porovnanie" + random: "Náhodné" + value: "Hodnoty" + fn: "Funkcie" + text: "Textové operácie" + convert: "Transformácie" + list: "Zoznamy" + blocks: + text: "Text" + multiLineText: "Text (viacriadkový)" + textList: "Zoznam textov" + _textList: + info: "Oddeľte každú položku novým riadkom" + strLen: "Dĺžka textu" + _strLen: + arg1: "Text" + strPick: "Vybrať znak" + _strPick: + arg1: "Text" + arg2: "Pozícia znaku" + strReplace: "Náhradný text" + _strReplace: + arg1: "Text" + arg2: "Nahradený text" + arg3: "Nahradiť s" + strReverse: "Otočiť text" + _strReverse: + arg1: "Text" + join: "Spojiť texty" + _join: + arg1: "Zoznamy" + arg2: "Oddeľovač" + add: "Pridať" + _add: + arg1: "A" + arg2: "B" + subtract: "Odčítať" + _subtract: + arg1: "A" + arg2: "B" + multiply: "Násobiť" + _multiply: + arg1: "A" + arg2: "B" + divide: "Deliť" + _divide: + arg1: "A" + arg2: "B" + mod: "Zvyšok po delení" + _mod: + arg1: "A" + arg2: "B" + round: "Zaokrúhliť" + _round: + arg1: "Číslo" + eq: "A a B sa rovnajú" + _eq: + arg1: "A" + arg2: "B" + notEq: "A a B sa nerovnajú" + _notEq: + arg1: "A" + arg2: "B" + and: "A a zároveň B" + _and: + arg1: "A" + arg2: "B" + or: "A alebo B" + _or: + arg1: "A" + arg2: "B" + lt: "< A je menšie ako B" + _lt: + arg1: "A" + arg2: "B" + gt: "> A je väčšie ako B" + _gt: + arg1: "A" + arg2: "B" + ltEq: "<= A je menšie alebo rovné B" + _ltEq: + arg1: "A" + arg2: "B" + gtEq: ">= A je väčšie alebo rovné B" + _gtEq: + arg1: "A" + arg2: "B" + if: "Vetva" + _if: + arg1: "Ak" + arg2: "Potom" + arg3: "Inak" + not: "Opak" + _not: + arg1: "Opak" + random: "Náhodné" + _random: + arg1: "Pravdepodobnosť" + rannum: "Náhodné číslo" + _rannum: + arg1: "Minimálna hodnota" + arg2: "Maximálna hodnota" + randomPick: "Náhodný výber zo zoznamu" + _randomPick: + arg1: "Zoznam" + dailyRandom: "Náhodne (zmení sa raz denne pre každého používateľa)" + _dailyRandom: + arg1: "Pravdepodobnosť" + dailyRannum: "Náhodné číslo (Mení sa denne pre každého používateľa)" + _dailyRannum: + arg1: "Minimálna hodnota" + arg2: "Maximálna hodnota" + dailyRandomPick: "Náhodný výber zo zoznamu (Mení sa denne pre každého používateľa)" + _dailyRandomPick: + arg1: "Zoznam" + seedRandom: "Náhodne (so seedom)" + _seedRandom: + arg1: "Seed" + arg2: "Pravdepodobnosť" + seedRannum: "Náhodné číslo (so seedom)" + _seedRannum: + arg1: "Seed" + arg2: "Minimálna hodnota" + arg3: "Maximálna hodnota" + seedRandomPick: "Náhodný výber zo zoznamu (so seedom)" + _seedRandomPick: + arg1: "Seed" + arg2: "Zoznam" + DRPWPM: "Náhodný výber z váženého zoznamu (Mení sa denne pre každého používateľa)" + _DRPWPM: + arg1: "Zoznam textov" + pick: "Vybrať zo zoznamu" + _pick: + arg1: "Zoznam" + arg2: "Pozícia" + listLen: "Získať dĺžku zoznamu" + _listLen: + arg1: "Zoznam" + number: "Číslo" + stringToNumber: "Text na číslo" + _stringToNumber: + arg1: "Text" + numberToString: "Číslo na text" + _numberToString: + arg1: "Číslo" + splitStrByLine: "Rozdelí text po riadkoch" + _splitStrByLine: + arg1: "Text" + ref: "Premenné" + aiScriptVar: "AiScript premenná" + fn: "Funkcie" + _fn: + slots: "Sloty" + slots-info: "Oddeľte každý slot novým riadkom" + arg1: "Výstup" + for: "For cyklus" + _for: + arg1: "Počet opakovaní" + arg2: "Akcia" + typeError: "Slot {slot} akceptuje hodnoty typu \"{expect}\", ale dodaná hodnota + je typu \"{actual}\"!" + thereIsEmptySlot: "Slot {slot} je prázdny!" + types: + string: "Text" + number: "Číslo" + boolean: "Boolean" + array: "Zoznamy" + stringArray: "Zoznam textov" + emptySlot: "Prázdny slot" + enviromentVariables: "Premenné prostredia" + pageVariables: "Premenné stránky" + argVariables: "Vstupné sloty" +_relayStatus: + requesting: "Čaká sa" + accepted: "Akceptované" + rejected: "Odmietnuté" +_notification: + fileUploaded: "Súbor sa úspešne nahral" + youGotMention: "{name} vás spomenul/a" + youGotReply: "{name} vám odpovedal/a" + youGotQuote: "{name} vás citoval/a" + youRenoted: "{name} preposlal/a vašu poznámku" + youGotPoll: "{name} hlasoval/a" + youGotMessagingMessageFromUser: "{name} vám poslal/a správu" + youGotMessagingMessageFromGroup: "Prišla správa do skupiny {name}" + youWereFollowed: "Máte nového sledujúceho" + youReceivedFollowRequest: "Dostali ste žiadosť o sledovanie" + yourFollowRequestAccepted: "Vaša žiadosť o sledovanie bola prijatá" + youWereInvitedToGroup: "Pozvať do skupiny" + pollEnded: "Výsledky hlasovania sú k dispozícii." + emptyPushNotificationMessage: "Push notifikácie aktualizované" + _types: + all: "Všetky" + follow: "Sledujete" + mention: "Zmienka" + reply: "Odpovede" + renote: "Preposlať" + quote: "Citovať" + reaction: "Reakcie" + pollVote: "Hlasy v hlasovaniach" + pollEnded: "Hlasovanie skončilo" + receiveFollowRequest: "Doručené žiadosti o sledovanie" + followRequestAccepted: "Schválené žiadosti o sledovanie" + groupInvited: "Pozvánky do skupín" + app: "Oznámenia z prepojených aplikácií" + _actions: + followBack: "Sledovať späť\n" + reply: "Odpovedať" + renote: "Preposlať" +_deck: + alwaysShowMainColumn: "Vždy zobraziť v hlavnom stĺpci" + columnAlign: "Zarovnať stĺpce" + addColumn: "Pridať stĺpec" + configureColumn: "Nastavenie stĺpcov" + swapLeft: "Vymeniť vľavo" + swapRight: "Vymeniť vpravo" + swapUp: "Vymeniť hore" + swapDown: "Vymeniť s nasledujúcim" + stackLeft: "Priložiť do ľavého stĺpca" + popRight: "Vybrať napravo" + profile: "Profil" + newProfile: "Nový profil" + deleteProfile: "Odstrániť profil" + introduction: "Kombinujte stĺpce a vytvorte si svoje vlastné rozhranie!" + introduction2: "Stlačením tlačidla + v pravej časti obrazovky môžete kedykoľvek + pridať stĺpce." + widgetsIntroduction: "V ponuke stĺpca vyberte možnosť \"Upraviť widget\" a pridajte + widget" + _columns: + main: "Hlavný" + widgets: "Widgety" + notifications: "Oznámenia" + tl: "Časová os" + antenna: "Antény" + list: "Zoznam" + mentions: "Zmienky" + direct: "Priame poznámky" diff --git a/locales/sv-SE.yml b/locales/sv-SE.yml new file mode 100644 index 0000000..13cb3c6 --- /dev/null +++ b/locales/sv-SE.yml @@ -0,0 +1,781 @@ +_lang_: "Svenska" +headlineFirefish: "En öppen källkod och decentraliserad social media plattform som + är gratis för all framtid! 🚀" +introFirefish: "Välkommen! Firefish är en öppen och decentraliserad mikrobloggningstjänst.\n + Skapa en \"not\" och dela dina tankar med alla runtomkring dig. 📡\nMed \"reaktioner\"\ + \ kan du snabbt uttrycka dina känslor kring andras noter.👍\nLåt oss utforska en + nya värld!🚀" +monthAndDay: "{day}/{month}" +search: "Sök" +notifications: "Notifikationer" +username: "Användarnamn" +password: "Lösenord" +forgotPassword: "Glömt lösenord" +fetchingAsApObject: "Hämtar från Fediversum" +ok: "OK" +gotIt: "Uppfattat!" +cancel: "Avbryt" +enterUsername: "Ange användarnamn" +renotedBy: "Omnoterad av {user}" +noNotes: "Inga noteringar" +noNotifications: "Inga aviseringar" +instance: "Server Instans" +settings: "Inställningar" +basicSettings: "Basinställningar" +otherSettings: "Andra inställningar" +openInWindow: "Öppna i ett fönster" +profile: "Profil" +timeline: "Tidslinje" +noAccountDescription: "Användaren har inte skrivit en biografi än." +login: "Logga in" +loggingIn: "Loggar in" +logout: "Logga ut" +signup: "Registrera" +uploading: "Uppladdning sker..." +save: "Spara" +users: "Användare" +addUser: "Lägg till användare" +favorite: "Lägg till i favoriter" +favorites: "Favoriter" +unfavorite: "Avfavorisera" +favorited: "Tillagd i favoriter." +alreadyFavorited: "Redan tillagd i favoriter." +cantFavorite: "Gick inte att lägga till i favoriter." +pin: "Fäst till profil" +unpin: "Lossa från profil" +copyContent: "Kopiera innehåll" +copyLink: "Kopiera länk" +delete: "Radera" +deleteAndEdit: "Radera och ändra" +deleteAndEditConfirm: "Är du säker att du vill radera denna not och ändra den? Du + kommer förlora alla reaktioner, omnoteringar och svar till den." +addToList: "Lägg till i lista" +sendMessage: "Skicka ett meddelande" +copyUsername: "Kopiera användarnamn" +searchUser: "Sök användare" +reply: "Svara" +loadMore: "Ladda mer" +showMore: "Visa mer" +youGotNewFollower: "följde dig" +receiveFollowRequest: "Följarförfrågan mottagen" +followRequestAccepted: "Följarförfrågan accepterad" +mention: "Nämn" +mentions: "Omnämningar" +directNotes: "Direktnoter" +importAndExport: "Importera / Exportera" +import: "Importera" +export: "Exportera" +files: "Filer" +download: "Nedladdning" +driveFileDeleteConfirm: "Är du säker att du vill radera filen \"{name}\"? Notera att + denna kommer att bli raderad från alla poster som har den bifogad." +unfollowConfirm: "Är du säker att du vill avfölja {name}?" +exportRequested: "Du har begärt en export. Detta kan ta lite tid. Den kommer läggas + till i din Drive när den blir klar." +importRequested: "Du har begärt en import. Detta kan ta lite tid." +lists: "Listor" +noLists: "Du har inga listor" +note: "Not" +notes: "Noter" +following: "Följer" +followers: "Följare" +followsYou: "Följer dig" +createList: "Skapa lista" +manageLists: "Hantera lista" +error: "Fel" +somethingHappened: "Ett fel har uppstått" +retry: "Försök igen" +pageLoadError: "Det gick inte att ladda sidan." +pageLoadErrorDescription: "Detta händer oftast p.g.a. nätverksfel eller din webbläsarcache. + Försök tömma din cache och testa sedan igen efter en liten stund." +serverIsDead: "Servern svarar inte. Vänta ett litet tag och försök igen." +youShouldUpgradeClient: "För att kunna se denna sida, vänligen ladda om sidan för + att uppdatera din klient." +enterListName: "Skriv ett namn till listan" +privacy: "Integritet" +makeFollowManuallyApprove: "Följarförfrågningar kräver manuellt godkännande" +defaultNoteVisibility: "Standardsynlighet" +follow: "Följ" +followRequest: "Skicka följarförfrågan" +followRequests: "Följarförfrågningar" +unfollow: "Avfölj" +followRequestPending: "Följarförfrågning avvaktar för svar" +enterEmoji: "Skriv en emoji" +renote: "Omnotera" +unrenote: "Ta tillbaka omnotering" +renoted: "Omnoterad." +cantRenote: "Inlägget kunde inte bli omnoterat." +cantReRenote: "En omnotering kan inte bli omnoterad." +quote: "Citat" +pinnedNote: "Fästad not" +pinned: "Fäst till profil" +you: "Du" +clickToShow: "Klicka för att visa" +sensitive: "Känsligt innehåll" +add: "Lägg till" +reaction: "Reaktioner" +reactionSetting: "Reaktioner som ska visas i reaktionsväljaren" +reactionSettingDescription2: "Dra för att omordna, klicka för att radera, tryck \"\ + +\" för att lägga till." +rememberNoteVisibility: "Komihåg notvisningsinställningar" +attachCancel: "Ta bort bilaga" +markAsSensitive: "Markera som känsligt innehåll" +unmarkAsSensitive: "Avmarkera som känsligt innehåll" +enterFileName: "Ange filnamn" +mute: "Tysta" +unmute: "Avtysta" +block: "Blockera" +unblock: "Avblockera" +suspend: "Suspendera" +unsuspend: "Ta bort suspenderingen" +blockConfirm: "Är du säker att du vill blockera kontot?" +unblockConfirm: "Är du säkert att du vill avblockera kontot?" +suspendConfirm: "Är du säker att du vill suspendera detta konto?" +unsuspendConfirm: "Är du säker att du vill avsuspendera detta konto?" +selectList: "Välj lista" +selectAntenna: "Välj en antenn" +selectWidget: "Välj en widget" +editWidgets: "Redigera widgets" +editWidgetsExit: "Avsluta redigering" +customEmojis: "Anpassa emoji" +emoji: "Emoji" +emojis: "Emoji" +emojiName: "Emoji namn" +emojiUrl: "Emoji länk" +addEmoji: "Lägg till emoji" +settingGuide: "Rekommenderade inställningar" +cacheRemoteFiles: "Spara externa filer till cachen" +cacheRemoteFilesDescription: "När denna inställning är avstängd kommer externa filer + laddas direkt från den externa servern. Genom att stänga av detta kommer lagringsutrymme + minska i användning men kommer öka datatrafiken eftersom miniatyrer inte kommer + genereras." +flagAsBot: "Markera konto som bot" +flagAsBotDescription: "Aktivera det här alternativet om kontot är kontrollerat av + ett program. Om aktiverat kommer den fungera som en flagga för andra utvecklare + för att hindra ändlösa kedjor med andra bottar. Det kommer också få Firefish interna + system att hantera kontot som en bot." +flagAsCat: "Markera konto som katt" +flagAsCatDescription: "Aktivera denna inställning för att markera kontot som en katt." +flagShowTimelineReplies: "Visa svar i tidslinje" +flagShowTimelineRepliesDescription: "Visar användarsvar till andra användares noter + i tidslinjen om påslagen." +autoAcceptFollowed: "Godkänn följarförfrågningar från användare du följer automatiskt" +addAccount: "Lägg till konto" +loginFailed: "Inloggningen misslyckades" +showOnRemote: "Se på extern instans" +general: "Allmänt" +wallpaper: "Bakgrundsbild" +setWallpaper: "Välj bakgrund" +removeWallpaper: "Ta bort bakgrund" +searchWith: "Sök: {q}" +youHaveNoLists: "Du har inga listor" +followConfirm: "Är du säker att du vill följa {name}?" +proxyAccount: "Proxykonto" +proxyAccountDescription: "Ett proxykonto är ett konto som agerar som en extern följare + för användare under vissa villkor. Till exempel, när en användare lägger till en + extern användare till en lista så kommer den externa användarens aktivitet inte + levereras till instansen om ingen lokal användare följer det kontot, så proxykontot + används istället." +host: "Värd" +selectUser: "Välj användare" +recipient: "Mottagare" +annotation: "Kommentarer" +federation: "Federation" +instances: "Servrar" +registeredAt: "Registrerad på" +latestRequestSentAt: "Senaste förfrågan skickad" +latestRequestReceivedAt: "Senaste begäran mottagen" +latestStatus: "Senaste status" +storageUsage: "Använt lagringsutrymme" +charts: "Diagram" +perHour: "Per timme" +perDay: "Per dag" +stopActivityDelivery: "Sluta skicka aktiviteter" +blockThisInstance: "Blockera denna server" +operations: "Operationer" +software: "Mjukvara" +version: "Version" +metadata: "Metadata" +monitor: "Övervakning" +jobQueue: "Jobbkö" +cpuAndMemory: "CPU och minne" +network: "Nätverk" +disk: "Disk" +instanceInfo: "Serverninformation" +statistics: "Statistik" +clearQueue: "Rensa kö" +clearQueueConfirmTitle: "Är du säker att du vill rensa kön?" +clearQueueConfirmText: "Om någon not är olevererad i kön kommer den inte federeras. + Vanligtvis behövs inte denna handling." +clearCachedFiles: "Rensa cache" +clearCachedFilesConfirm: "Är du säker att du vill radera alla cachade externa filer?" +blockedInstances: "Blockerade servrar" +blockedInstancesDescription: "Lista adressnamn av servrar som du vill blockera. Listade + servrarna kommer inte längre kommunicera med denna servern." +muteAndBlock: "Tystningar och blockeringar" +mutedUsers: "Tystade användare" +blockedUsers: "Blockerade användare" +noUsers: "Det finns inga användare" +editProfile: "Redigera profil" +noteDeleteConfirm: "Är du säker på att du vill ta bort denna not?" +pinLimitExceeded: "Du kan inte fästa fler noter" +intro: "Firefish har installerats! Vänligen skapa en adminanvändare." +done: "Klar" +processing: "Bearbetar" +preview: "Förhandsvisning" +default: "Standard" +defaultValueIs: "Standard: {value}" +noCustomEmojis: "Det finns ingen emoji" +noJobs: "Det finns inga jobb" +federating: "Federerar" +blocked: "Blockerad" +suspended: "Suspenderad" +all: "Allt" +subscribing: "Prenumererar" +publishing: "Publiceras" +notResponding: "Svarar inte" +instanceFollowing: "Följer på server" +instanceFollowers: "Följare av server" +instanceUsers: "Användare av denna server" +changePassword: "Ändra lösenord" +security: "Säkerhet" +retypedNotMatch: "Inmatningen matchar inte." +currentPassword: "Nuvarande lösenord" +newPassword: "Nytt lösenord" +newPasswordRetype: "Bekräfta lösenord" +attachFile: "Bifoga filer" +more: "Mer!" +featured: "Utvalda" +usernameOrUserId: "Användarnamn eller användar-id" +noSuchUser: "Kan inte hitta användaren" +lookup: "Sökning" +announcements: "Nyheter" +imageUrl: "Bild-URL" +remove: "Radera" +removed: "Borttaget" +removeAreYouSure: "Är du säker att du vill radera \"{x}\"?" +deleteAreYouSure: "Är du säker att du vill radera \"{x}\"?" +resetAreYouSure: "Vill du återställa?" +saved: "Sparad" +messaging: "Chatt" +upload: "Ladda upp" +keepOriginalUploading: "Behåll originalbild" +nsfw: "Känsligt innehåll" +pinnedNotes: "Fästad not" +userList: "Listor" +smtpHost: "Värd" +smtpUser: "Användarnamn" +smtpPass: "Lösenord" +clearCache: "Rensa cache" +user: "Användare" +file: "Filer" +_email: + _follow: + title: "följde dig" +_mfm: + mention: "Nämn" + quote: "Citat" + emoji: "Anpassa emoji" + search: "Sök" +_theme: + keys: + mention: "Nämn" + renote: "Omnotera" +_sfx: + note: "Noter" + notification: "Notifikationer" + chat: "Chatt" +_widgets: + notifications: "Notifikationer" + timeline: "Tidslinje" + federation: "Federation" + jobQueue: "Jobbkö" +_cw: + show: "Ladda mer" +_visibility: + followers: "Följare" +_profile: + username: "Användarnamn" +_exportOrImport: + followingList: "Följer" + muteList: "Tysta" + blockingList: "Blockera" + userLists: "Listor" +_charts: + federation: "Federation" +_pages: + script: + categories: + list: "Listor" + blocks: + _join: + arg1: "Listor" + _randomPick: + arg1: "Listor" + _dailyRandomPick: + arg1: "Listor" + _seedRandomPick: + arg2: "Listor" + _pick: + arg1: "Listor" + _listLen: + arg1: "Listor" + types: + array: "Listor" +_notification: + youWereFollowed: "följde dig" + _types: + follow: "Följer" + mention: "Nämn" + renote: "Omnotera" + quote: "Citat" + reaction: "Reaktioner" + _actions: + reply: "Svara" + renote: "Omnotera" +_deck: + _columns: + notifications: "Notifikationer" + tl: "Tidslinje" + list: "Listor" + mentions: "Omnämningar" +removeReaction: Radera från dina reaktioner +renoteMute: Tysta boostningar +renoteUnmute: Ljuda boostningar +flagSpeakAsCat: Prata som en katt +noInstances: Det finns inga servrar +keepOriginalUploadingDescription: Sparar originalen av uppladdade bilder som de är. + Om avstängt, kommer en ny version genererad vid uppladdning. +fromUrl: från URL +explore: Utforska +messageRead: Läs +noMoreHistory: Det finns ingen framtida historik +startMessaging: Starta en ny chatt +agreeTo: Jag accepterar till {0} +drive: Enhet +fileName: Filnamn +inputNewDescription: Ange en ny benämning +inputNewFolderName: Ange ett nytt mappnamn +hasChildFilesOrFolders: Eftersom denna mappen inte är tom, kan den inte bli raderad. +copyUrl: Kopiera URL +watch: Bevaka +thisMonth: Månad +today: Idag +dayX: '{day}' +monthX: '{month}' +yearX: '{year}' +enableLocalTimeline: Anslut till lokal tidslinje +invite: Bjud in +driveCapacityPerLocalAccount: Enhetens kapacitet per lokal användare +inMb: I megabyte +pinnedPagesDescription: Ange sökväg till sidor som du vill fästa på topp av sidorna + på denna server, separerade av sidbrytningar. +hcaptcha: hCaptcha +antennasDesc: "Antenner visar nya poster som matchar de kriterier som du anger\nDe + kan nås från sidlinje sidan." +unsilenceConfirm: Är du säker på att du vill ångra tystningen av denna användare? +securityKey: Säkerhetsnyckel +markAsReadAllNotifications: Markera alla notifikationer som lästa +quoteQuestion: Lägg till som en citering? +noMessagesYet: Inga meddelande ännu +newMessageExists: Det finns inga nya meddelanden +weakPassword: Svagt lösenord +normalPassword: Dugligt lösenord +veryStrongPassword: Starkt lösenord +passwordMatched: Matchar +passwordNotMatched: Matchar inte +signinWith: Logga in med {x} +disableAnimatedMfm: Inaktivera MFM med animering +noFollowRequests: Du har inte några väntande följbekräftelser +clientSettings: Klientinställningar +promote: Befordra +numberOfDays: Antalet dagar +objectStorageUseSSL: Använd SSL +objectStorageUseSSLDesc: Stäng av detta om du inte kommer använda HTTPS för API anslutningar +recentUsed: Senast använd +nothing: Det finns inget att visa här +lastUsedDate: Senaste använd vid +state: Stat +disablePagesScript: Inaktivera AiScript på sidor +expandOnNoteClick: Öppna post vid klick +updateRemoteUser: Uppdatera fjärranvändarinformation +deleteAllFiles: Radera alla filer +userSuspended: Denna användare har blivit avstängd. +inboxUrl: Inbox URL +serviceworkerInfo: Måste vara aktiverat för push-notifikationer. +deletedNote: Radera poster +expandTweet: Expandera tweet +themeEditor: Thema redigerare +describeFile: Lägg till bildtext +enterFileDescription: Beskriv bildtext +manage: Hantering +useBlurEffectForModal: Använd oskärpa effekter för modeller +width: Bredd +small: Liten +disableAll: Inaktivera alla +tokenRequested: Tillåt tillgång till konto +channelFederationWarn: Kanalerna federeras inte till andra servrar ännu +manageGroups: Hantera grupper +tos: Användarvillkor +start: Starta +home: Hem +activity: Aktivitet +themeForDarkMode: Teman som används i Mörkt läge +maintainerEmail: Underhållare e-post +enableHcaptcha: Aktivera hCaptcha +hcaptchaSiteKey: Sidnyckel +recaptchaSecretKey: Hemlig nyckel +withFiles: Inkludera filer +popularTags: Populära taggar +notFound: Kan inte hittas +uploadFolder: Standardmappar för uppladdning +retype: Ange igen +next: Nästa +checking: Kontrollerar... +or: Eller +groupInvited: Du har blivit inbjuden till en grupp +docSource: Källa till detta dokument +createAccount: Skapa konto +total: Total +objectStorage: Objektlagring +objectStorageRegion: Region +objectStorageUseProxy: Anslut över Proxy +objectStorageUseProxyDesc: Stäng av detta om du inte kommer använde en Proxy för API + anslutningar +sounds: Ljud +details: Detaljer +installedApps: Auktoriserade applikationer +installedDate: Auktoriserad vid +script: Skript +removeAllFollowingDescription: Körning av detta kommer sluta följa alla konton från + {host}. Vänligen kör detta om servern t.ex. inte längre existerar. +userSilenced: Denna användare har blivit tystnad. +visibility: Synlighet +delayed: Fördröjning +useGlobalSetting: Använd globala inställningar +selectInstance: Välj en server +instanceName: Servernamn +searchPlaceholder: Sök Firefish +noThankYou: Nej tack +jumpToPrevious: Hoppa till föregående +listsDesc: Listor låter dig skapa en tidlinje med specificerade användare. Dessa kan + sedan bli nådda från tidlinje sidan. +flagSpeakAsCatDescription: Dina poster kommer ge en nyans som om du är i katt-läge +silencedInstances: Tystade instanser +hiddenTags: Dolda Hashtaggar +silenced: Tystad +nUsersRead: Läs med {n} +themeForLightMode: Teman som används i Ljust Läge +light: Ljus +recaptcha: reCAPTCHA +enableRecaptcha: Aktivera reCAPTCHA +help: Hjälp +groupName: Gruppnamn +name: Namn +resetPassword: Återställ lösenord +newPasswordIs: Ditt nya lösenord är "{password}" +cacheClear: Rensa cache +markAsReadAllTalkMessages: Markera alla meddelanden som lästa +uiLanguage: Användargränssnitt +disableDrawer: Använd inte byrålådor-stil menyer +tapSecurityKey: Klicka in din säkerhetsnyckel +language: Språk +objectStorageRegionDesc: Ange en region som 'xx-east-1'. Om du anger din tjänst som + inte skiljer mellan regioner, lämna detta blankt eller ange som 'us-east-1'. +objectStorageSetPublicRead: Ställ in "public-read" vid uppladdningar +scratchpadDescription: Scratchpaden tillgängliggör en miljö för AiScript experiment. + Du kan skriva, köra och checka ut resultaten från den när du interagerar med Firefish. +yourAccountSuspendedDescription: Detta kontot har blivit avstängt eftersom det bröt + mot serverns användaravtal eller liknande. Vänligen kontakta administratörer om + du vill veta mer detaljerade anledningar. Vänligen skapa inte ett nytt konto. +divider: Fördelare +addItem: Lägg till artikel +poll: Opinionsundersökning +useCw: Dölj innehåll +enablePlayer: Öppna videospelare +disablePlayer: Stäng videospelare +description: Beskrivning +author: Författare +accessibility: Tillgänglighet +useObjectStorage: Använd objektlagring +objectStorageBaseUrl: Grundläggande URL +deleteAllFilesConfirm: Är du säker på att du vill radera alla filer? +menu: Meny +regexpError: Regular expression fel +wordMute: Ord tystning +regexpErrorDescription: 'Ett fel skedde vid regular expression på linje {line} av + dina {tab} ord tystningar:' +instanceMute: Server tystningar +userSaysSomething: '{name} sa något' +userSaysSomethingReason: '{name} sade {reason}' +makeActive: Aktivera +notificationSettingDesc: Välj typerna av notifieringsinställningarna att visa. +fromDrive: Från Enhet +uploadFromUrlMayTakeTime: Det kan ta en tid innan uppladdningen är slutförd. +uploadFromUrlRequested: Uppladdning som förfrågat +unwatch: Sluta bevaka +enableRecommendedTimeline: Aktivera rekommenderad tidslinje +showLess: Stäng +regenerate: Återskapa +promotion: Befordrad +doNothing: Ignorera +thisYear: År +manageAntennas: Hantera Antenner +deleted: Raderad +editNote: Redigera anteckning +edited: Redigerad vid {date} {time} +syncDeviceDarkMode: Synkronisera mörkt läge med dina enhetsinställningar +dayOverDayChanges: Ändringar från igår +selectChannel: Välj en kanal +lightThemes: Ljusa teman +dark: Mörk +inputNewFileName: Ange ett nytt filnamn +whenServerDisconnected: När den tappar uppkopplingen till servern +disconnectedFromServer: Anslutning till server har tappats +iconUrl: Ikon URL +bannerUrl: Banner bild URL +hcaptchaSecretKey: Hemlig nyckel +onlyOneFileCanBeAttached: Du kan endast ange en bilaga till ett meddelande +signinFailed: Kan inte logga in. Ange korrekt användarnamn och lösenord. +notesAndReplies: Poster och svar +token: Token +twoStepAuthentication: Två-faktor-autentisering +antennaInstancesDescription: Lista en servervärd per linje +moderator: Moderator +moderation: Moderering +chooseEmoji: Välj en emoji +unableToProcess: Operationen kunde inte slutföras +output: Output +expandOnNoteClickDesc: Om inaktiverad, kan du öppna posten vid högerklicksmenyn eller + genom att klicka på tidsstämpeln. +aboutFirefish: Om Firefish +older: Äldre +hiddenTagsDescription: 'Lista hashtaggar (utan # symbolen) för de hashtaggar du vill + dölja från trendande och utforska. Dolda hashtaggar kan fortfarande hittas via andra + funktioner.' +darkThemes: Mörka teman +images: Bilder +selectFiles: Välj filer +renameFile: Byt namn på fil +folderName: Filnamn +createFolder: Skapa en mapp +renameFolder: Byt namn på denna mapp +emptyDrive: Din enhet är tom +emptyFolder: Denna mapp är tom +unableToDelete: Kan inte radera +rename: Byt namn +deleteFolder: Radera denna mapp +addFile: Lägg till en fil +banner: Banner +reload: Uppdatera +reloadConfirm: Vill du uppdatera din tidslinje? +accept: Acceptera +tosUrl: Användarvillkor URL +pages: Sidor +disablingTimelinesInfo: Administratörer och moderatorer har alltid tillgång till alla + tidslinjer, även om de inte är aktiverade. +registration: Registrera +enableRegistration: Aktivera ny användarregistrering +driveCapacityPerRemoteAccount: Enhetskapacitet per extern användare +enableGlobalTimeline: Aktivera global tidslinje +antennaSource: Antennkällor +notifyAntenna: Informera vid nya poster +withFileAntenna: Ange poster med filer +exploreFediverse: Upptäck ett fidiverse +markAsReadAllUnreadNotes: Markera alla poster som lästa +inputMessageHere: Ange meddelande här +members: Medlemmar +available: Tillgänglig +usernameInvalidFormat: Du kan ange versaler eller gemener, nummer och underskrifter. +tooLong: För lång +joinOrCreateGroup: Bli inbjuden till en grupp eller skapa en egen. +doing: Bearbetar... +youHaveNoGroups: Du har inga grupper +aboutX: Om {x} +existingAccount: Existerande konto +install: Installera +uninstall: Avinstallera +sort: Sortera +ascendingOrder: Stigande +leaveConfirm: Ändringar har inte sparats. Vill du kasta dem? +plugins: Plugin +preferencesBackups: Backup av inställningar +enableEmail: Aktivera epost distribuering +smtpSecure: Använd strikt SSL/TLS vid SMTP anslutningar +smtpSecureInfo: Stäng av detta vid användning av STARTTLS +testEmail: Test av epost leverans +userSaysSomethingReasonReply: '{name} svarade på en post innehållande {reason}' +userSaysSomethingReasonRenote: '{name} boosted en post innehållande {reason}' +userSaysSomethingReasonQuote: '{name} citerade en post innehållande {reason}' +logs: Loggar +database: Databas +channel: Kanaler +create: Skapa +notificationSetting: Notisinställningar +objectStorageS3ForcePathStyle: Använd filmapp-baserade slutpunkter för URL:er +newNoteRecived: Det finns nya poster +deck: Däck +undeck: Lämna däck +large: Stor +newer: Nyare +silenceThisInstance: Tysta denna instans +silencedInstancesDescription: Lista värdnamn på server som du vill tysta. Konton på + listade instanser behandlas som om de är "Tystade", de kan endast göra följbekräftelser + och kan inte nämna lokala konton som inte följs. Detta påverkar inte blockerade + instanser. +uploadFromUrl: Uppladdad från URL +birthday: Födelsedag +theme: Teman +avatar: Avatar +uploadFromUrlDescription: URL av filen som du vill ladda upp +remoteUserCaution: Informationen från en avlägsen användare kan inte slutföras. +yearsOld: '{age} år gammal' +location: Plats +selectFile: Välj en fil +registeredDate: Registrerade på +selectFolder: Välj en mapp +circularReferenceFolder: Destinationsmappen är en undermapp till mappen som du försöker + flytta. +instanceDescription: Serverbeskrivning +selectFolders: Välj mappar +reject: Neka +normal: Normal +withReplies: Inkludera svar +registerSecurityKey: Registrera en säkerhetsnyckel +enableServiceworker: Aktivera push-notifikationer för din webbläsare +maintainerName: Underhållare +pinnedPages: Fästa sidor +basicInfo: Grundläggande info +pinnedUsers: Pinnade användare +backgroundImageUrl: Bakgrundsbild URL +pinnedUsersDescription: Lista användarnamn separerade med radbrytning att bli fäst + i "Utforska" fliken. +recaptchaSiteKey: Sid nyckel +pinnedClipId: ID av klippet du vill fästa +avoidMultiCaptchaConfirm: Användning av flera Captcha system kan orsaka problem. Vill + du inaktivera andra Captcha system som är aktiverade i nuläget? Om du vill att de + ska fortsätta vara inaktiverade, tryck ångra. +antennas: Antenner +antennaKeywords: Nyckelord att följa +antennaExcludeKeywords: Nyckelord att exkludera +antennaKeywordsDescription: Separera med mellanrum för ett OCH villkor eller med sidbrytning + för ett ELLER villkor. +caseSensitive: Skiftlägeskänsliga +recentlyDiscoveredUsers: Senaste upptäckta användare +antennaUsersDescription: Lista ett användarnamn per linje +silenceConfirm: Är du säker att du vill tysta denna användare? +connectedTo: Följande konton är anslutna +unsilence: Ångra tystning +recentlyRegisteredUsers: Senaste användare +exploreUsersCount: Det finns {count} användare +silence: Tysta +popularUsers: Populära användare +recentlyUpdatedUsers: Senaste aktiva användare +administrator: Administratör +passwordLessLogin: Lösenordslös-inloggning +about: Om +nUsersMentioned: Benämnd av {n} användare +securityKeyName: Nyckelnamn +share: Dela +reduceUiAnimation: Minska UI animeringar +notFoundDescription: Ingen sida som korresponderar med denna URL kunde hittas. +close: Stäng +group: Grupp +transfer: Överför +category: Kategori +createGroup: Skapa en grupp +ownedGroups: Ägda grupper +invites: Inbjudningar +groups: Grupper +title: Titel +joinedGroups: Deltagande grupper +tooShort: För kort +signinHistory: Inloggningshistorik +enable: Aktivera +text: Text +inviteToGroup: Bjud in till grupp +quoteAttached: Citera +messagingWithUser: Privatchatt +messagingWithGroup: Gruppchatt +invitationCode: Inbjudningskod +noteOf: Postad av {user} +unavailable: Inte tillgänglig +invitations: Inbjudningar +useOsNativeEmojis: Använd operativsystemets lokala emojis +noHistory: Historik saknas +tags: Taggar +openImageInNewTab: Öppna bilder i ny flik +fontSize: Teckenstorlek +dashboard: Användargränssnitt +weekOverWeekChanges: Ändringar till föregående vecka +appearance: Utseende +accountSettings: Kontoinställningar +objectStorageBaseUrlDesc: "Denna URL används som referens. Ange URL för din CDN eller + Proxy om du använder någon.\nFör S3 använd 'https://.s3.amazonaws.com' och + för GCS eller likvärdig tjänst använd 'https://storage.googleapis.com/', + m.m." +objectStorageEndpointDesc: Lämna denna tom om du använder AWS S3, annars ange slutpunkten + som '' eller ':', beroende på tjänsten som du använder. +objectStorageS3ForcePathStyleDesc: Aktivera detta vid konstruering av slutpunkter + i URL som är i format för 's3.amazonaws.com//' vid '.s3.amazonaws.com'. +popout: Poppa-ut +showFixedPostForm: Visa postens form vid toppen av tidslinjen +listen: Lystna +none: Inga +showInPage: Visa på sida +masterVolume: Huvudvolym +volume: Volym +descendingOrder: Nedåtgående +scratchpad: Scratchpad +yourAccountSuspendedTitle: Detta kontot har blivit avstängt +email: Epost +relays: Reläer +invisibleNote: Osynliga poster +addRelay: Lägg till relä +enableInfiniteScroll: Ladda fler automatiskt +edit: Redigera +useFullReactionPicker: Använd full-storlek för reaktionsväljaren +notificationType: Notifieringstyp +pluginTokenRequestedDescription: Detta plugin kommer använda tillgänglighet inställd + här. +generateAccessToken: Generera tillgångstoken +permission: Tillstånd +smtpConfig: SMPT server inställningar +emailServer: Epost server +emailConfigInfo: Används för att bekräfta din epost vid registrering om du glömmer + till lösenord +emptyToDisableSmtpAuth: Lämna användarnamn och lösenord tomt vid inaktivering av SMTP + verifiering +emailAddress: Epost adress +smtpPort: Port +metrics: Metrik +display: Visa +copy: Kopiera +overview: Översikt +lastUsed: Senast använd +unregister: Avregistrera +addInstance: Lägg till server +objectStorageBucketDesc: Vänligen ange hink-namn som du använder som din leverantör. +accountMoved: 'Användaren har flyttat till ett nytt konto:' +hideThisNote: Dölj denna post +showFeaturedNotesInTimeline: Visa presenterade poster i tidslinjen +objectStorageBucket: Hink +objectStoragePrefix: Prefix +local: Lokal +remote: Avlägsen +objectStoragePrefixDesc: Filer som lagras under mappar kommer använda detta prefix. +objectStorageEndpoint: Slutpunkt +addedRelays: Tillagda reläer +height: Höjd +enableAll: Tillåt alla +cw: Innehållsvarning +enableEmojiReactions: Aktivera emoji reaktioner +showEmojisInReactionNotifications: Visa emojis i reaktion notifikationer +signinRequired: Vänligen registrera eller logga in innan du fortsätter +serverLogs: Serverloggar +deleteAll: Radera alla +removeAllFollowing: Sluta följa alla följda användare +medium: Mellan +xl: XL +desktop: Skrivbord +createNew: Skapa nya diff --git a/locales/th-TH.yml b/locales/th-TH.yml new file mode 100644 index 0000000..ce99872 --- /dev/null +++ b/locales/th-TH.yml @@ -0,0 +1,1411 @@ +_lang_: "ภาษาไทย" +headlineFirefish: "แพลตฟอร์มโซเชียลมีเดียแบบโอเพนซอร์สที่มีการกระจายอำนาจซึ่งให้บริการฟรีตลอดไป! + 🚀" +introFirefish: "ยินดีต้อนรับค่ะ/ครับ! Firefish เป็นแพลตฟอร์มโซเชียลมีเดียแบบโอเพนซอร์สที่มีการกระจายอำนาจซึ่งให้บริการฟรีตลอดไป! + 🚀" +monthAndDay: "{month}/{day}" +search: "ค้นหา" +notifications: "การเเจ้งเตือน" +username: "ชื่อผู้ใช้" +password: "รหัสผ่าน" +forgotPassword: "ลืมรหัสผ่าน" +fetchingAsApObject: "กำลังดึงข้อมูลจากเฟดิเวิร์ส" +ok: "ตกลง" +gotIt: "เข้าใจแล้ว !" +cancel: "ยกเลิก" +enterUsername: "ใส่ชื่อผู้ใช้" +renotedBy: "บูสต์โดย {user}" +noNotes: "ไม่มีโพสต์" +noNotifications: "ไม่มีการแจ้งเตือน" +instance: "เซิร์ฟเวอร์" +settings: "การตั้งค่า" +basicSettings: "การตั้งค่าพื้นฐาน" +otherSettings: "การตั้งค่าอื่น ๆ" +openInWindow: "เปิดในหน้าต่าง" +profile: "โปรไฟล์" +timeline: "ไทม์ไลน์" +noAccountDescription: "ผู้ใช้รายนี้ยังไม่ได้เขียนลงประวัติของพวกเขา" +login: "เข้าสู่ระบบ" +loggingIn: "กำลังเข้าสู่ระบบ" +logout: "ออกจากระบบ" +signup: "สร้างบัญชีผู้ใช้" +uploading: "กำลังอัปโหลด..." +save: "บันทึก" +users: "ผู้ใช้งาน" +addUser: "เพิ่มผู้ใช้" +favorite: "เพิ่มลงในรายการโปรด" +favorites: "รายการโปรด" +unfavorite: "ลบออกจากรายการโปรด" +favorited: "เพิ่มในรายการโปรดแล้ว" +alreadyFavorited: "เพิ่มในรายการโปรดอยู่แล้ว" +cantFavorite: "ไม่สามารถเพิ่มในรายการโปรดได้" +pin: "ปักหมุดไปยังโปรไฟล์" +unpin: "เลิกปักหมุดจากโปรไฟล์" +copyContent: "คัดลอกเนื้อหา" +copyLink: "คัดลอกลิงก์" +delete: "ลบ" +deleteAndEdit: "ลบและแก้ไข" +deleteAndEditConfirm: "คุณแน่ใจแล้วเหรอว่าต้องการลบโพสต์นี้และแก้ไข? คุณอาจจะสูญเสียการโต้ตอบ, + โพสต์, และการตอบกลับทั้งหมดได้นะ" +addToList: "เพิ่มในลิสต์" +sendMessage: "ส่งข้อความ" +copyUsername: "คัดลอกชื่อผู้ใช้" +searchUser: "ค้นหาผู้ใช้งาน" +reply: "ตอบกลับ" +loadMore: "โหลดเพิ่มเติม" +showMore: "แสดงเพิ่มเติม" +showLess: "ปิด" +youGotNewFollower: "ได้ติดตามคุณ" +receiveFollowRequest: "ได้รับคำขอติดตาม" +followRequestAccepted: "ผู้ติดตามได้ตอบรับคำขอของคุณแล้ว" +mention: "กล่าวถึง" +mentions: "กล่าวถึง" +directNotes: "ไดเร็คข้อความ" +importAndExport: "นำเข้า / ส่งออกข้อมูล" +import: "นำเข้า" +export: "ส่งออก" +files: "ไฟล์" +download: "ดาวน์โหลด" +driveFileDeleteConfirm: "คุณแน่ใจแล้วหรอว่าต้องการลบไฟล์ \"{name}\"? โพสต์ย่อที่แนบมากับไฟล์นี้ก็จะถูกลบด้วยนะ" +unfollowConfirm: "คุณแน่ใจแล้วหรอว่าต้องการเลิกติดตาม {name}?" +exportRequested: "เมื่อคุณได้ร้องขอการส่งออก อาจจะต้องใช้เวลาสักครู่ และจะถูกเพิ่มในไดรฟ์ของคุณเมื่อเสร็จสิ้นแล้ว" +importRequested: "คุณได้ร้องขอการนำเข้า อาจจะต้องใช้เวลาสักครู่นะ" +lists: "ลิสต์" +noLists: "คุณไม่มีลิสต์ใด ๆ" +note: "โพสต์" +notes: "โพสต์" +following: "กำลังติดตาม" +followers: "ผู้ติดตาม" +followsYou: "ติดตามคุณ" +createList: "สร้างลิสต์" +manageLists: "จัดการลิสต์" +error: "ผิดพลาด" +somethingHappened: "เกิดข้อผิดพลาด" +retry: "ลองใหม่อีกครั้ง" +pageLoadError: "เกิดข้อผิดพลาดในการโหลดหน้านี้" +pageLoadErrorDescription: "โดยปกติแล้วมักจะเกิดจากข้อผิดพลาดของเครือข่ายหรือแคชของเบราว์เซอร์ + ลองล้างแคชแล้วลองใหม่อีกครั้งหลังจากรอสักครู่นะ" +serverIsDead: "เซิร์ฟเวอร์นี้ไม่มีการตอบสนอง กรุณารอสักครู่แล้วลองใหม่อีกครั้งนะ" +youShouldUpgradeClient: "หากต้องการดูหน้านี้ กรุณารีเฟรชเพื่ออัปเดตไคลเอ็นต์ของคุณ" +enterListName: "ใส่ชื่อสำหรับลิสต์" +privacy: "ความเป็นส่วนตัว" +makeFollowManuallyApprove: "คำขอติดตามต้องได้รับการอนุมัติ" +defaultNoteVisibility: "การมองเห็นที่เป็นค่าเริ่มต้น" +follow: "ติดตาม" +followRequest: "คำขอติดตาม" +followRequests: "การติดตามที่ร้องขอ" +unfollow: "เลิกติดตาม" +followRequestPending: "กำลังรอดำเนินการร้องขอติดตาม" +enterEmoji: "ใส่อีโมจิ" +renote: "บูสต์" +unrenote: "เลิกบูสต์" +renoted: "บูสต์แล้ว" +cantRenote: "โพสต์นี้ไม่สามารถบูสต์ได้" +cantReRenote: "ไม่สามารถบูสต์การบูสต์ได้" +quote: "โควต" +pinnedNote: "โพสต์ที่ปักหมุดแล้ว" +pinned: "ปักหมุดไปยังโปรไฟล์" +you: "คุณ" +clickToShow: "คลิกเพื่อแสดง" +sensitive: "เนื้อหาที่ละเอียดอ่อน" +add: "เพิ่ม" +reaction: "รีแอคชัน" +reactionSetting: "รีแอคชันที่จะแสดงผลในตัวเลือกการรีแอคชัน" +reactionSettingDescription2: "ลากเพื่อจัดลำดับใหม่ คลิกเพื่อลบ กด \"+\" เพื่อเพิ่ม" +rememberNoteVisibility: "จดจำการตั้งค่าการมองเห็นโพสต์" +attachCancel: "ลบไฟล์ที่แนบมา" +markAsSensitive: "ทำเครื่องหมายว่าละเอียดอ่อน" +unmarkAsSensitive: "ยกเลิกทำเครื่องหมายว่าละเอียดอ่อน" +enterFileName: "พิมพ์ชื่อไฟล์" +mute: "ปิดเสียง" +unmute: "ยกเลิกการปิดเสียง" +block: "บล็อค" +unblock: "เลิกบล็อค" +suspend: "ถูกระงับ" +unsuspend: "ยกเลิกระงับ" +blockConfirm: "คุณแน่ใจแล้วเหรอ ว่าต้องการบล็อคบัญชีนี้?" +unblockConfirm: "คุณแน่ใจแล้วเหรอ ว่าต้องการปลดบล็อคบัญชีนี้?" +suspendConfirm: "คุณแน่ใจแล้วเหรอว่าต้องการระงับบัญชีนี้?" +unsuspendConfirm: "คุณแน่ใจแล้วหรอว่าต้องการยกเลิกการระงับบัญชีนี้?" +selectList: "เลือกลิสต์" +selectAntenna: "เลือกเสาอากาศ" +selectWidget: "เลือกวิดเจ็ต" +editWidgets: "แก้ไขวิดเจ็ต" +editWidgetsExit: "เรียบร้อย" +customEmojis: "อีโมจิที่กำหนดเอง" +emoji: "อีโมจิ" +emojis: "อีโมจิ" +emojiName: "ชื่ออิโมจิ" +emojiUrl: "URL ของอิโมจิ" +addEmoji: "เพิ่มอีโมจิ" +settingGuide: "การตั้งค่าที่แนะนำ" +cacheRemoteFiles: "แคชไฟล์ระยะไกล" +cacheRemoteFilesDescription: "เมื่อปิดใช้งานการตั้งค่านี้ ไฟล์ระยะไกลนั้นจะถูกโหลดจากเซิร์ฟเวอร์ระยะไกลโดยตรง + แต่กรณีการปิดใช้งานนี้จะช่วยลดปริมาณการใช้พื้นที่จัดเก็บข้อมูล แต่เพิ่มปริมาณทราฟฟิค + เพราะเนื่องจากจะไม่มีการสร้างภาพขนาดย่อ" +flagAsBot: "ทำเครื่องหมายบอกว่าบัญชีนี้เป็นบัญชีอัตโนมัติ" +flagAsBotDescription: "เปิดใช้งานตัวเลือกนี้หากบัญชีนี้ถูกควบคุมโดยโปรแกรม หากเปิดใช้งาน + มันจะทำหน้าที่เป็นแฟล็กสำหรับนักพัฒนารายอื่น ๆ และเพื่อป้องกันการโต้ตอบแบบไม่มีที่สิ้นสุดกับบัญชีอัตโนมัติอื่นๆ + และปรับเปลี่ยนระบบภายในของ Firefish เพื่อปฏิบัติต่อบัญชีนี้เป็นบัญชีอัตโนมัติ" +flagAsCat: "ทำเครื่องหมายบอกว่าบัญชีนี้เป็นแมว" +flagAsCatDescription: "คุณจะได้รับหูแมวและพูดเหมือนแมวนะ!" +flagShowTimelineReplies: "แสดงการตอบกลับ ในไทม์ไลน์" +flagShowTimelineRepliesDescription: "แสดงการตอบกลับของผู้ใช้งานไปยังโพสต์ของผู้ใช้งานรายอื่นๆในไทม์ไลน์หากได้เปิดเอาไว้" +autoAcceptFollowed: "อนุมัติคำขอติดตามโดยอัตโนมัติทันที จากผู้ใช้งานที่คุณกำลังติดตาม" +addAccount: "เพิ่มบัญชี" +loginFailed: "การเข้าสู่ระบบไม่สำเร็จ" +showOnRemote: "เปิดต้นฉบับ" +general: "ทั่วไป" +wallpaper: "วอลล์เปเปอร์" +setWallpaper: "ตั้งวอลเปเปอร์" +removeWallpaper: "นำวอลเปเปอร์ออก" +searchWith: "ค้นหา: {q}" +youHaveNoLists: "รายการนี้ว่างเปล่า" +followConfirm: "คุณแน่ใจแล้วหรอว่าต้องการที่จะติดตาม {name}?" +proxyAccount: "บัญชีพร็อกซี" +proxyAccountDescription: "บัญชีพร็อกซี่ คือ บัญชีที่จะทำหน้าที่เป็นผู้ติดตามระยะไกลสำหรับผู้ใช้งานที่อยู่ภายใต้ด้วยเงื่อนไขบางอย่าง + ยกตัวอย่าง เช่น เมื่อมีผู้ใช้งานนั้นได้เพิ่มผู้ใช้งานจากระยะไกลลงในรายการ แต่กิจกรรมของผู้ใช้ในระยะไกลนั้นจะไม่ถูกส่งไปยังเซิฟเวอร์ + หากไม่มีผู้ใช้งานในพื้นที่ติดตามผู้ใช้รายนั้น ดังนั้นบัญชีพร็อกซีนี้จะติดตามแทน" +host: "โฮสต์" +selectUser: "เลือกผู้ใช้งาน" +recipient: "ผู้รับ" +annotation: "ความคิดเห็น" +federation: "สหพันธ์" +instances: "เซิฟเวอร์" +registeredAt: "จดทะเบียนแล้วที่" +latestRequestSentAt: "ส่งคำขอล่าสุดไปแล้ว" +latestRequestReceivedAt: "ได้รับคำขอล่าสุดไปแล้ว" +latestStatus: "สถานะล่าสุด" +storageUsage: "พื้นที่จัดเก็บข้อมูลที่ใช้ไป" +charts: "โดดเด่น" +perHour: "ทุกชั่วโมง" +perDay: "ต่อวัน" +stopActivityDelivery: "หยุดส่งกิจกรรม" +blockThisInstance: "บล็อกเซิร์ฟเวอร์นี้" +operations: "ดำเนินการ" +software: "ซอฟต์แวร์" +version: "เวอร์ชั่น" +metadata: "ข้อมูลเมตา" +monitor: "มอนิเตอร์" +jobQueue: "คิวงาน" +cpuAndMemory: "ซีพียู และ หน่วยความจำ" +network: "เน็ตเวิร์ก" +disk: "ดิสก์" +instanceInfo: "ข้อมูลของเซิร์ฟเวอร์" +statistics: "สถิติการใช้งาน" +clearQueue: "ล้างคิว" +clearQueueConfirmTitle: "คุณแน่ใจแล้วหรอว่าต้องการที่จะล้างคิว?" +clearQueueConfirmText: "โพสต์ที่ยังไม่ได้ส่งที่เหลืออยู่ในคิวนั้นจะไม่ถูกรวมเข้าเป็นสหพันธ์ + โดยปกติแล้วคุณไม่จำเป็นต้องดำเนินการนี้" +clearCachedFiles: "ล้างแคช" +clearCachedFilesConfirm: "นายแน่ใจแล้วหรอว่าต้องการที่จะลบไฟล์ระยะไกลที่แคชไว้ทั้งหมด?" +blockedInstances: "เซิร์ฟเวอร์ที่ถูกบล็อก" +blockedInstancesDescription: "รายการชื่อโฮสต์ของเซิร์ฟเวอร์ที่คุณต้องการบล็อก เซิร์ฟเวอร์ที่อยู่ในรายการนั้นจะไม่สามารถพูดคุยกับเซิร์ฟเวอร์นี้ได้อีกต่อไป" +muteAndBlock: "ปิดเสียงและบล็อก" +mutedUsers: "ผู้ใช้ที่ถูกปิดเสียง" +blockedUsers: "ผู้ใช้ที่ถูกบล็อก" +noUsers: "ไม่พบผู้ใช้งาน" +editProfile: "แก้ไขโปรไฟล์" +noteDeleteConfirm: "คุณแน่ใจหรือไม่ที่จะลบโพสต์นี้?" +pinLimitExceeded: "คุณไม่สามารถที่จะตรึงโพสต์เพิ่มได้" +intro: "การติดตั้ง Firefish เสร็จสิ้นแล้วนะ! โปรดสร้างผู้ใช้งานที่เป็นผู้ดูแลระบบ" +done: "เสร็จสิ้น" +processing: "กำลังประมวลผล" +preview: "แสดงตัวอย่าง" +default: "ค่าตั้งต้น" +defaultValueIs: "ค่าเริ่มต้น: {value}" +noCustomEmojis: "ไม่มีอีโมจิ" +noJobs: "ไม่มีชิ้นงาน" +federating: "สหพันธ์" +blocked: "ถูกบล็อก" +suspended: "ถูกระงับ" +all: "ทั้งหมด" +subscribing: "สมัครแล้ว" +publishing: "กำลังเผยแพร่" +notResponding: "ไม่มีการตอบสนอง" +instanceFollowing: "กำลังติดตามบนเซิร์ฟเวอร์" +instanceFollowers: "ผู้ติดตามของเซิร์ฟเวอร์" +instanceUsers: "ผู้ใช้งานของเซิร์ฟเวอร์นี้" +changePassword: "เปลี่ยนรหัสผ่าน" +security: "ความปลอดภัย" +retypedNotMatch: "อินพุตไม่ตรงกันนะ" +currentPassword: "รหัสผ่านปัจจุบัน" +newPassword: "รหัสผ่านใหม่" +newPasswordRetype: "ใส่รหัสผ่านใหม่อีกครั้ง" +attachFile: "แนบไฟล์" +more: "เพิ่มเติม!" +featured: "เป็นจุดเด่น" +usernameOrUserId: "ชื่อผู้ใช้หรือรหัสผู้ใช้งาน" +noSuchUser: "ไม่มีผู้ใช้นี้อยู่ในระบบ" +lookup: "ค้นหา" +announcements: "ประกาศ" +imageUrl: "url รูปภาพ" +remove: "ลบ" +removed: "ถูกลบไปแล้ว" +removeAreYouSure: "คุณแน่ใจจริงหรอว่าต้องการที่จะลบออก \"{x}\"?" +deleteAreYouSure: "คุณแน่ใจหรอว่าต้องการที่จะลบออก \"{x}\"?" +resetAreYouSure: "จริงหรอรีเซ็ตเลยไหม?" +saved: "บันทึกแล้ว" +messaging: "แชท" +upload: "อัพโหลด" +keepOriginalUploading: "เก็บภาพต้นฉบับ" +keepOriginalUploadingDescription: "บันทึกรูปภาพที่อัพโหลดต้นฉบับตามที่เป็นอยู่ ถ้าหากปิดอยู่ + ระบบจะสร้างเวอร์ชั่นที่จะแสดงบนเว็บเมื่ออัพโหลดนะ" +fromDrive: "จากไดรฟ์" +fromUrl: "จาก URL" +uploadFromUrl: "อัพโหลดจาก URL" +uploadFromUrlDescription: "URL ของไฟล์ที่คุณต้องการอัปโหลด" +uploadFromUrlRequested: "อัพโหลดที่ร้องขอ" +uploadFromUrlMayTakeTime: "มันอาจจะต้องใช้เวลาสักครู่จนกว่าการอัพโหลดจะเสร็จสมบูรณ์นะ" +explore: "สำรวจ" +messageRead: "อ่านแล้ว" +noMoreHistory: "ในนั้นไม่มีประวัติอีกต่อไปแล้วนะ" +startMessaging: "เริ่มการสนทนา" +nUsersRead: "อ่านโดย {n}" +agreeTo: "ฉันยอมรับที่จะ {0}" +tos: "ข้อกำหนดและเงื่อนไข" +start: "เริ่มต้น" +home: "หน้าแรก" +remoteUserCaution: "ข้อมูลของผู้ใช้งานนอกเซิร์ฟเวอร์นี้อาจจะไม่สมบูรณ์" +activity: "กิจกรรม" +images: "รูปภาพ" +birthday: "วันเกิด" +yearsOld: "{อายุ} ปี" +registeredDate: "วันที่สมัครสมาชิก" +location: "ตำแหน่งที่ตั้ง" +theme: "ธีม" +themeForLightMode: "ธีมที่จะใช้ในโหมดแสง" +themeForDarkMode: "ธีมที่จะใช้ในโหมดมืด" +light: "สว่าง" +dark: "มืด" +lightThemes: "ธีมสีสว่าง" +darkThemes: "ธีมมืด" +syncDeviceDarkMode: "ซิงค์โหมดมืดด้วยการตั้งค่ากับอุปกรณ์" +drive: "ไดรฟ์" +fileName: "ชื่อไฟล์" +selectFile: "เลือกไฟล์" +selectFiles: "เลือกไฟล์" +selectFolder: "เลือกโฟลเดอร์" +selectFolders: "เลือกโฟลเดอร์" +renameFile: "เปลี่ยนชื่อไฟล์" +folderName: "ชื่อแฟ้ม" +createFolder: "สร้างโฟลเดอร์" +renameFolder: "เปลี่ยนชื่อโฟลเดอร์" +deleteFolder: "ลบโฟลเดอร์" +addFile: "เพิ่มไฟล์" +emptyDrive: "ไดรฟ์ของคุณว่างเปล่านะ" +emptyFolder: "โฟลเดอร์นี้น่าจะว่างเปล่านะ" +unableToDelete: "ไม่สามารถลบออกได้นะ" +inputNewFileName: "ป้อนชื่อไฟล์ใหม่นะ" +inputNewDescription: "กรุณาใส่คำอธิบายใหม่" +inputNewFolderName: "กรุณาใส่ชื่อโฟลเดอร์ใหม่นะ\n" +circularReferenceFolder: "โฟลเดอร์ปลายทาง คือ โฟลเดอร์ย่อยของโฟลเดอร์ที่คุณต้องการที่จะย้ายล่ะนะ" +hasChildFilesOrFolders: "เนื่องจากโฟลเดอร์นี้ไม่ว่างเปล่า จึงไม่สามารถลบได้" +copyUrl: "คัดลอก URL" +rename: "เปลี่ยนชื่อ" +avatar: "ไอคอน" +banner: "แบนเนอร์" +nsfw: "เนื้อหาที่ละเอียดอ่อน NSFW" +whenServerDisconnected: "สูญเสียการเชื่อมต่อกับเซิร์ฟเวอร์" +disconnectedFromServer: "ถูกตัดการเชื่อมต่อออกจากเซิร์ฟเวอร์" +reload: "รีโหลด" +doNothing: "เมิน" +reloadConfirm: "นายต้องการรีเฟรชไทม์ไลน์หรือป่าว?" +watch: "ดู" +unwatch: "หยุดดู" +accept: "ยอมรับ" +reject: "ปฏิเสธ" +normal: "โหมดปกติ" +instanceName: "ชื่อเซิร์ฟเวอร์" +instanceDescription: "คำอธิบายเซิร์ฟเวอร์" +maintainerName: "ผู้ดูแล" +maintainerEmail: "อีเมล์แอดมิน" +tosUrl: "เงื่อนไขการให้บริการ URL" +thisYear: "ปีนี้" +thisMonth: "เดือนนี้" +today: "วันนี้" +dayX: "{วัน}" +monthX: "{เดือน}" +yearX: "{ปี}" +pages: "หน้า" +enableLocalTimeline: "เปิดใช้งานไทม์ไลน์ในพื้นที่" +enableGlobalTimeline: "เปิดใช้งานไทม์ไลน์ทั่วโลก" +disablingTimelinesInfo: "ผู้ดูแลระบบและผู้ควบคุมจะสามารถเข้าถึงไทม์ไลน์ทั้งหมด ถึงแม้ว่าจะไม่ได้เปิดใช้งานก็ตาม" +registration: "ลงทะเบียน" +enableRegistration: "เปิดใช้งานการลงทะเบียนผู้ใช้ใหม่" +invite: "เชิญชวน" +driveCapacityPerLocalAccount: "ความจุของไดรฟ์ต่อผู้ใช้ภายในเครื่อง" +driveCapacityPerRemoteAccount: "ความจุของไดรฟ์ต่อผู้ใช้ระยะไกล" +inMb: "เป็นเมกะไบต์" +iconUrl: "ไอคอน URL" +bannerUrl: "URL รูปภาพแบนเนอร์" +backgroundImageUrl: "URL ภาพพื้นหลัง" +basicInfo: "ข้อมูลเบื้องต้น" +pinnedUsers: "ผู้ใช้งานที่ได้รับการปักหมุด" +pinnedUsersDescription: "ลิสต์ชื่อผู้ใช้โดยคั่นด้วยการขึ้นบรรทัดใหม่เพื่อปักหมุดในแท็บ + \"สำรวจ\"" +pinnedPages: "หน้าที่ปักหมุด" +pinnedPagesDescription: "ป้อนเส้นทางของหน้าที่คุณต้องการตรึงไว้ที่หน้าแรกของเซิร์ฟเวอร์นี้ + โดยคั่นด้วยตัวแบ่งบรรทัด" +pinnedClipId: "ID ของคลิปที่จะปักหมุด" +pinnedNotes: "โพสต์ที่ตรึงไว้" +hcaptcha: "hCaptcha" +enableHcaptcha: "เปิดใช้ hCaptcha" +hcaptchaSiteKey: "คีย์ไซต์" +hcaptchaSecretKey: "คีย์ลับ" +recaptcha: "reCAPTCHA" +enableRecaptcha: "เปิดใช้ reCAPTCHA" +recaptchaSiteKey: "คีย์ไซต์" +recaptchaSecretKey: "คีย์ลับ" +avoidMultiCaptchaConfirm: "การใช้ระบบ Captcha หลายระบบอาจทำให้เกิดการรบกวนหรืออาจจะเกิดข้อผิดพลาดได้ + หากต้องการที่จะปิดการใช้งานระบบ Captcha อื่น ๆ แนะนำให้ปิดตัวอื่นๆก่อน ถ้าหากคุณต้องการให้เปิดใช้งานต่อไป + ให้ กด ยกเลิก" +antennas: "เสาอากาศ" +manageAntennas: "จัดการเสาอากาศ" +name: "ชื่อ" +antennaSource: "แหล่งเสาอากาศ" +antennaKeywords: "คีย์เวิร์ดที่ควรฟัง" +antennaExcludeKeywords: "คีย์เวิร์ดที่จะยกเว้น" +antennaKeywordsDescription: "คั่นด้วยช่องว่างสำหรับเงื่อนไข AND หรือด้วยการขึ้นบรรทัดใหม่สำหรับเงื่อนไข + OR นะ" +notifyAntenna: "แจ้งเตือนเกี่ยวกับโพสต์ใหม่" +withFileAntenna: "เฉพาะโพสต์ที่มีไฟล์" +enableServiceworker: "เปิดใช้งาน การแจ้งเตือนแบบพุชสำหรับเบราว์เซอร์ของคุณ" +antennaUsersDescription: "ระบุหนึ่งชื่อผู้ใช้ต่อบรรทัด" +caseSensitive: "กรณีที่สำคัญ" +withReplies: "รวมตอบกลับ" +connectedTo: "บัญชีดังต่อไปนี้มีการเชื่อมต่อกัน" +notesAndReplies: "โพสต์และการตอบกลับ" +withFiles: "รวบรวมไฟล์" +silence: "ถูกปิดปาก" +silenceConfirm: "นายแน่ใจแล้วหรอว่าต้องการที่จะ ปิดปาก ผู้ใช้งานรายนี้?" +unsilence: "ยกเลิกการปิดปาก" +unsilenceConfirm: "นายแน่ใจแล้วหรอว่าต้องการที่จะยกเลิกปิดปากผู้ใช้งานรายนี้?" +popularUsers: "ผู้ใช้ที่เป็นที่นิยม" +recentlyUpdatedUsers: "ผู้ใช้ที่เพิ่งใช้งานล่าสุด" +recentlyRegisteredUsers: "ผู้ใช้ที่เข้าร่วมใหม่" +recentlyDiscoveredUsers: "ผู้ใช้ที่เพิ่งค้นพบใหม่" +exploreUsersCount: "มีผู้ใช้ {จำนวน} ราย" +exploreFediverse: "สำรวจเฟดดิเวิร์ส" +popularTags: "แท็กยอดนิยม" +userList: "รายการ" +about: "เกี่ยวกับ" +aboutFirefish: "เกี่ยวกับ Firefish" +administrator: "ผู้ดูแลระบบ" +token: "โทเค็น" +twoStepAuthentication: "ยืนยันตัวตน 2 ชั้น" +moderator: "ผู้ควบคุม" +moderation: "การกลั่นกรอง" +nUsersMentioned: "กล่าวถึงโดยผู้ใช้ {n} รายนี้" +securityKey: "กุญแจความปลอดภัย" +securityKeyName: "ชื่อคีย์" +registerSecurityKey: "ลงทะเบียนรหัสความปลอดภัยคีย์" +lastUsed: "ใช้ล่าสุด" +unregister: "เลิกติดตาม" +passwordLessLogin: "เข้าสู่ระบบแบบไม่ใช้รหัสผ่าน" +resetPassword: "รีเซ็ตรหัสผ่าน" +newPasswordIs: "รหัสผ่านใหม่คือ \"{password}\"" +reduceUiAnimation: "ลดภาพเคลื่อนไหว UI" +share: "แชร์" +notFound: "ไม่พบหน้าที่ต้องการ" +notFoundDescription: "ไม่พบหน้าที่สอดคล้องตรงกันกับ URL นี้นะ" +uploadFolder: "โฟลเดอร์เริ่มต้นสำหรับอัพโหลด" +cacheClear: "ล้างแคช" +markAsReadAllNotifications: "ทำเครื่องหมายการแจ้งเตือนทั้งหมดว่าอ่านแล้ว" +markAsReadAllUnreadNotes: "ทำเครื่องหมายโพสต์ทั้งหมดว่าอ่านแล้ว" +markAsReadAllTalkMessages: "ทำเครื่องหมายข้อความทั้งหมดว่าอ่านแล้ว" +help: "ช่วยเหลือ" +inputMessageHere: "พิมพ์ข้อความที่นี่" +close: "ปิด" +group: "กลุ่ม" +groups: "กลุ่ม" +createGroup: "สร้างกลุ่ม" +ownedGroups: "กลุ่มที่เป็นเจ้าของ" +joinedGroups: "เข้าร่วมกลุ่ม" +invites: "เชิญชวน" +groupName: "ชื่อกลุ่ม" +members: "สมาชิก" +transfer: "ถ่ายโอน" +messagingWithUser: "แชทส่วนตัว" +messagingWithGroup: "แชทกลุ่ม" +title: "หัวข้อ" +text: "ข้อความ" +enable: "เปิดใช้งาน" +next: "ถัด​ไป" +retype: "พิมพ์รหัสอีกครั้ง" +noteOf: "โพสต์โดย {user}" +inviteToGroup: "ชวนเข้ากลุ่ม" +quoteAttached: "อ้างอิง" +quoteQuestion: "นายต้องการที่จะอ้างอิงหรอ?" +noMessagesYet: "ยังไม่มีข้อความนะ" +newMessageExists: "คุณมีข้อความใหม่" +onlyOneFileCanBeAttached: "คุณสามารถแนบไฟล์กับข้อความได้เพียงไฟล์เดียวเท่านั้นนะ" +signinRequired: "กรุณาลงทะเบียนหรือลงชื่อเข้าใช้ก่อนดำเนินการต่อนะ" +invitations: "เชิญชวน" +invitationCode: "รหัสคำเชิญ" +checking: "Checking" +available: "พร้อมใช้งาน" +unavailable: "ไม่พร้อมใช้" +usernameInvalidFormat: "คุณสามารถใช้อักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก ตัวเลข และขีดล่างได้นะ + ( a-z , A-Z , 0-9 , รวมไปถึงอักษรพิเศษเช่น + * / , . - อื่นๆเป็นต้น )" +tooShort: "สั้นเกินไปนะ" +tooLong: "ยาวเกินไปนะ" +weakPassword: "รหัสผ่าน แย่มาก" +normalPassword: "รหัสผ่านปกติ" +veryStrongPassword: "รหัสผ่านรัดกุมมาก" +passwordMatched: "ถูกต้อง!" +passwordNotMatched: "ไม่ถูกต้อง" +signinWith: "ลงชื่อเข้าใช้ด้วย {x}" +signinFailed: "ไม่สามารถลงชื่อผู้เข้าใช้ได้ เนื่องจาก ชื่อผู้ใช้หรือรหัสผ่านที่คุณป้อนนั้นไม่ถูกต้องนะ" +tapSecurityKey: "แตะคีย์ความปลอดภัย" +or: "หรือ" +language: "ภาษา" +uiLanguage: "ภาษาอินเทอร์เฟซผู้ใช้งาน" +groupInvited: "คุณได้รับเชิญให้เข้าร่วมกลุ่ม" +aboutX: "เกี่ยวกับ {x}" +useOsNativeEmojis: "ใช้อีโมจิ OS แบบดั้งเดิม" +disableDrawer: "อย่าใช้ลิ้นชักสไตล์เมนู" +youHaveNoGroups: "คุณยังไม่มีกลุ่ม" +joinOrCreateGroup: "รับเชิญเข้าร่วมกลุ่มหรือสร้างกลุ่มของคุณเองเลยนะ" +noHistory: "ไม่มีรายการ" +signinHistory: "ประวัติการเข้าสู่ระบบ" +disableAnimatedMfm: "ปิดการใช้งาน MFM ด้วยแอนิเมชั่น" +doing: "กำลังประมวลผล......" +category: "หมวดหมู่" +tags: "แท็ก" +docSource: "ที่มาของเอกสารนี้" +createAccount: "สร้างบัญชี" +existingAccount: "บัญชีที่มีอยู่" +regenerate: "สร้างอีกครั้ง" +fontSize: "ขนาดตัวอักษร" +noFollowRequests: "คุณไม่มีคำขอติดตามที่รอดำเนินการ" +openImageInNewTab: "เปิดรูปภาพในแท็บใหม่" +dashboard: "หน้ากระดานหลัก" +local: "ในพื้นที่" +remote: "ระยะไกล" +total: "รวมทั้งหมด" +weekOverWeekChanges: "เปลี่ยนแปลงไปเมื่อสัปดาห์ที่แล้ว" +dayOverDayChanges: "เปลี่ยนแปลงไปเมื่อวานนี้" +appearance: "ภาพลักษณ์" +clientSettings: "การตั้งค่าไคลเอนต์" +accountSettings: "ตั้งค่าบัญชี" +promotion: "โฆษณา" +promote: "โปรโมท" +numberOfDays: "จำนวนวัน" +hideThisNote: "ซ่อนโพสต์นี้" +showFeaturedNotesInTimeline: "แสดงโพสต์เด่นในไทม์ไลน์" +objectStorage: "อ็อบเจ็กต์ ที่จัดเก็บ" +useObjectStorage: "ใช้ อ็อบเจ็กต์ ที่จัดเก็บ" +objectStorageBaseUrl: "URL ฐาน" +objectStorageBaseUrlDesc: "URL ที่ใช้เป็นข้อมูลอ้างอิง ระบุ URL ของ CDN หรือ Proxy + ถ้าหากคุณใช้อย่างใดอย่างหนึ่ง\n สำหรับการใช้งาน S3 'https://.s3.amazonaws.com' + และสำหรับ GCS หรือบริการที่เทียบเท่าใช้ 'https://storage.googleapis.com/', + เป็นต้น" +objectStorageBucket: "Bucket" +objectStorageBucketDesc: "โปรดระบุชื่อที่เก็บข้อมูลที่ใช้กับผู้ให้บริการของคุณ" +objectStoragePrefix: "คำนำหน้า" +objectStoragePrefixDesc: "ไฟล์ทั้งหมดจะถูกเก็บไว้ภายใต้ไดเร็กทอรีที่มีคำนำหน้านี้นะ" +objectStorageEndpoint: "ปลายทาง" +objectStorageEndpointDesc: "เว้นว่างไว้หากคุณใช้ AWS S3 หรือระบุปลายทางเป็น '' + หรือ ':' ทั้งนี้ขึ้นอยู่กับผู้ให้บริการที่คุณใช้อยู่ด้วย" +objectStorageRegion: "ภูมิภาค" +objectStorageRegionDesc: "ระบุภูมิภาค เช่น 'xx-east-1' ถ้าหากบริการของคุณไม่ได้แยกความแตกต่างระหว่างภูมิภาคก็ให้ + เว้นว่างไว้หรือป้อน 'us-east-1'" +objectStorageUseSSL: "ใช้ SSL" +objectStorageUseSSLDesc: "ปิดการทำงานนี้ไว้ ถ้าหากคุณจะไม่ใช้ HTTPS สำหรับการเชื่อมต่อ + API" +objectStorageUseProxy: "เชื่อมต่อผ่านพร็อกซี" +objectStorageUseProxyDesc: "ปิดสิ่งนี้ไว้ถ้าหากคุณจะไม่ใช้ Proxy สำหรับการเชื่อมต่อ + API" +objectStorageSetPublicRead: "ตั้งค่า \"public-read\" ในการอัปโหลด" +serverLogs: "บันทึกของเซิร์ฟเวอร์" +deleteAll: "ลบทั้งหมด" +showFixedPostForm: "แสดงแบบฟอร์มการโพสต์ที่ด้านบนสุดของไทม์ไลน์" +newNoteRecived: "มีโพสต์ใหม่" +sounds: "เสียง" +listen: "ฟัง" +none: "ไม่มี" +showInPage: "แสดงในเพจ" +popout: "ป๊อปเอาต์" +volume: "ความดัง" +masterVolume: "มาสเตอร์วอลุ่ม" +details: "รายละเอียด" +chooseEmoji: "เลือกโมจิของเธอ" +unableToProcess: "ไม่สามารถดำเนินการให้เสร็จสิ้นได้" +recentUsed: "ใช้ล่าสุด" +install: "ติดตั้ง" +uninstall: "ถอนการติดตั้ง" +installedApps: "แอปที่ติดตั้งแล้ว" +nothing: "ไม่พบผลลัพธ์" +installedDate: "วันที่ติดตั้ง" +lastUsedDate: "ใช้งานครั้งล่าสุด" +state: "สถานะ" +sort: "เรียงลำดับ" +ascendingOrder: "เรียงจากน้อยไปมาก" +descendingOrder: "เรียงจากมากไปน้อย" +scratchpad: "กระดานทดลอง" +scratchpadDescription: "Scratchpad เป็นการจัดเตรียมสภาพแวดล้อมสำหรับการทดลอง AiScript + แต่คุณสามารถเขียน ดำเนินการ และตรวจสอบผลลัพธ์ของการโต้ตอบกับ Firefish มันได้ด้วยนะ" +output: "เอาท์พุต" +script: "สคริปต์" +disablePagesScript: "ปิดการใช้งาน AiScript บนเพจ" +updateRemoteUser: "อัปเดตข้อมูลผู้ใช้งานระยะไกล" +deleteAllFiles: "ลบไฟล์ทั้งหมด" +deleteAllFilesConfirm: "นายแน่ใจแล้วหรอว่าต้องการที่จะลบไฟล์ทั้งหมด?" +removeAllFollowing: "เลิกติดตามผู้ใช้ที่ติดตามทั้งหมด" +removeAllFollowingDescription: "การดำเนินการนี้จะเลิกติดตามบัญชีทั้งหมดจาก {host} + โปรดเรียกใช้คำสั่งนี้หากเซิร์ฟเวอร์นี้ไม่มีอยู่ในขณะนี้" +userSuspended: "ผู้ใช้รายนี้ถูกระงับการใช้งาน" +userSilenced: "ผู้ใช้รายนี้กำลังถูกปิดกั้น" +yourAccountSuspendedTitle: "บัญชีนี้นั้นถูกระงับ" +yourAccountSuspendedDescription: "บัญชีนี้ถูกระงับ เนื่องจากละเมิดข้อกำหนดในการให้บริการของเซิร์ฟเวอร์หรืออาจจะละเมิดหลักเกณฑ์ชุมชน + หรือ อาจจะโดนร้องเรียนเรื่องการละเมิดลิขสิทธิ์และอื่นๆอย่างต่อเนื่องซ้ำๆ หากคุณคิดว่าไม่ได้ทำผิดจริงๆหรือตัดสินผิดพลาด + ได้โปรดกรุณาติดต่อผู้ดูแลระบบหากคุณต้องการทราบเหตุผลโดยละเอียดเพิ่มเติม และขอความกรุณาอย่าสร้างบัญชีใหม่" +menu: "เมนู" +divider: "ตัวแบ่ง" +addItem: "เพิ่มรายการ" +relays: "รีเลย์" +addRelay: "เพิ่มรีเลย์" +inboxUrl: "อินบ็อกซ์ URL" +addedRelays: "เพิ่มรีเลย์แล้ว" +serviceworkerInfo: "ต้องเปิดใช้งานสำหรับการแจ้งเตือนแบบพุช" +deletedNote: "โพสต์ที่ถูกลบ" +invisibleNote: "โพสต์ที่มองไม่เห็น" +enableInfiniteScroll: "โหลดเพิ่มเติมโดยอัตโนมัติ" +visibility: "การมองเห็น" +poll: "โพล" +useCw: "ซ่อนเนื้อหา" +enablePlayer: "เปิดเครื่องเล่นวิดีโอ" +disablePlayer: "ปิดเครื่องเล่นวิดีโอ" +expandTweet: "ขยายทวีต" +themeEditor: "ตัวแก้ไขธีม" +description: "รายละเอียด" +describeFile: "เพิ่มคำอธิบาย" +enterFileDescription: "ใส่คำอธิบาย" +author: "ผู้เขียน" +leaveConfirm: "คุณมีการเปลี่ยนแปลงที่ไม่ได้บันทึกนะ นายต้องการทิ้งการเปลี่ยนแปลงเหล่านั้นหรอ?" +manage: "การจัดการ" +plugins: "ปลั๊กอิน" +preferencesBackups: "ตั้งค่าการสำรองข้อมูล" +deck: "เด็ค" +undeck: "ออกจากเด็ค" +useBlurEffectForModal: "ใช้เอฟเฟกต์เบลอสำหรับโมดอล" +useFullReactionPicker: "ใช้เครื่องมือเลือกปฏิกิริยาขนาดเต็ม" +width: "ความกว้าง" +height: "ความสูง" +large: "ใหญ่" +medium: "ปานกลาง" +small: "เล็ก" +generateAccessToken: "สร้างการเข้าถึงโทเค็น" +permission: "การอนุญาต" +enableAll: "เปิดใช้งานทั้งหมด" +disableAll: "ปิดการใช้งานทั้งหมด" +tokenRequested: "ให้สิทธิ์การเข้าถึงบัญชี" +pluginTokenRequestedDescription: "ปลั๊กอินนี้จะสามารถใช้การอนุญาตที่ตั้งค่าไว้ที่นี่นะ" +notificationType: "ประเภทการแจ้งเตือน" +edit: "แก้ไข" +emailServer: "อีเมล์เซิร์ฟเวอร์" +enableEmail: "เปิดใช้งานการกระจายอีเมล" +emailConfigInfo: "ใช้เพื่อยืนยันอีเมลของคุณระหว่างการสมัครหรือถ้าหากคุณลืมรหัสผ่าน" +email: "อีเมล์" +emailAddress: "ที่อยู่อีเมล์" +smtpConfig: "กำหนดค่าเซิร์ฟเวอร์ SMTP" +smtpHost: "โฮสต์" +smtpPort: "พอร์ต" +smtpUser: "ชื่อผู้ใช้" +smtpPass: "รหัสผ่าน" +emptyToDisableSmtpAuth: "ปล่อยชื่อผู้ใช้และรหัสผ่านว่างไว้เพื่อปิดใช้งานการยืนยัน + SMTP" +smtpSecure: "ใช้โดยนัย SSL/TLS สำหรับการเชื่อมต่อ SMTP" +smtpSecureInfo: "ปิดสิ่งนี้เมื่อใช้ STARTTLS" +testEmail: "ทดสอบการส่งอีเมล" +wordMute: "ซ่อนคำและภาษา" +regexpError: "ข้อผิดพลาดของนิพจน์ทั่วไป" +regexpErrorDescription: "เกิดข้อผิดพลาดในนิพจน์ทั่วไปในบรรทัดที่ {line} ของการปิดเสียงคำ + {tab} ของคุณ:" +instanceMute: "ซ่อนเซิร์ฟเวอร์" +userSaysSomething: "{name} พูดอะไรบางอย่าง" +makeActive: "เปิดใช้งาน" +display: "แสดงผล" +copy: "คัดลอก" +metrics: "เมตริก" +overview: "ภาพรวม" +logs: "บันทึกข้อมูลระบบ" +delayed: "ดีเลย์" +database: "ฐานข้อมูล" +channel: "แชนแนล" +create: "สร้าง" +notificationSetting: "ตั้งค่าการแจ้งเตือน" +notificationSettingDesc: "เลือกประเภทการแจ้งเตือนที่ต้องการจะแสดง" +useGlobalSetting: "ใช้การตั้งค่าส่วนกลาง" +useGlobalSettingDesc: "หากเปิดไว้ ระบบจะใช้การตั้งค่าการแจ้งเตือนของบัญชีของคุณ หากปิดอยู่ + สามารถทำการกำหนดค่าแต่ละรายการได้นะ" +other: "อื่น ๆ" +regenerateLoginToken: "สร้างโทเค็นการเข้าสู่ระบบอีกครั้ง" +regenerateLoginTokenDescription: "สร้างโทเค็นใหม่ที่ใช้ภายในระหว่างการเข้าสู่ระบบ + โดยตามหลักปกติแล้วการดำเนินการนี้ไม่จำเป็น หากสร้างใหม่ อุปกรณ์ทั้งหมดจะถูกออกจากระบบนะ" +setMultipleBySeparatingWithSpace: "คั่นหลายรายการด้วยช่องว่าง" +fileIdOrUrl: "ไฟล์ ID หรือ URL" +behavior: "พฤติกรรม" +sample: "ตัวอย่าง" +abuseReports: "รายงาน" +reportAbuse: "รายงาน" +reportAbuseOf: "รายงาน {ชื่อ}" +fillAbuseReportDescription: "กรุณากรอกรายละเอียดเกี่ยวกับรายงานนี้ หากเป็นเรื่องเกี่ยวกับโพสต์โดยตรง + โปรดระบุ URL" +abuseReported: "เราได้ส่งรายงานของคุณไปแล้ว ขอบคุณมากๆนะ" +reporter: "นักข่าว" +reporteeOrigin: "รายงานต้นทาง" +reporterOrigin: "นักข่าวต้นทาง" +forwardReport: "ส่งต่อรายงานไปยังเซิร์ฟเวอร์ระยะไกล" +forwardReportIsAnonymous: "แทนที่จะเป็นบัญชีของคุณ บัญชีระบบที่ไม่ระบุตัวตนจะแสดงเป็นผู้รายงานที่เซิร์ฟเวอร์ระยะไกล" +send: "ส่ง" +abuseMarkAsResolved: "ทำเครื่องหมายรายงานว่าแก้ไขแล้ว" +openInNewTab: "เปิดในแท็บใหม่" +openInSideView: "เปิดในมุมมองด้านข้าง" +defaultNavigationBehaviour: "พฤติกรรมการนำทางที่เป็นค่าเริ่มต้น" +editTheseSettingsMayBreakAccount: "การแก้ไขการตั้งค่าเหล่านี้อาจทำให้บัญชีของคุณเสียหายนะ" +instanceTicker: "ข้อมูลเซิร์ฟเวอร์ของโพสต์" +waitingFor: "กำลังรอคอย {x}" +random: "สุ่มค่า" +system: "ระบบ" +switchUi: "รูปแบบ" +desktop: "เดสก์ท็อป" +clip: "คลิป" +createNew: "สร้างใหม่" +optional: "ไม่บังคับ" +createNewClip: "สร้างคลิปใหม่" +unclip: "ลบคลิป" +confirmToUnclipAlreadyClippedNote: "โพสต์นี้เป็นส่วนหนึ่งของคลิป \"{name}\" อยู่แล้ว + คุณต้องการลบออกจากคลิปนี้หรือไม่?" +public: "สาธารณะ" +i18nInfo: "Firefish กำลังได้รับการแปลเป็นภาษาต่างๆ โดยอาสาสมัคร คุณสามารถช่วยเหลือได้ที่ + {link}" +manageAccessTokens: "การจัดการโทเค็นการเข้าถึง" +accountInfo: "ข้อมูลบัญชี" +notesCount: "จำนวนของโพสต์" +repliesCount: "จำนวนการตอบกลับที่ส่ง" +renotesCount: "จำนวนบูสท์ที่ส่ง" +repliedCount: "จำนวนของการตอบกลับที่ได้รับ" +renotedCount: "จำนวนบูสท์ที่ได้รับ" +followingCount: "จำนวนบัญชีที่ติดตาม" +followersCount: "จำนวนผู้ติดตาม" +sentReactionsCount: "จำนวนปฏิกิริยาที่ส่ง" +receivedReactionsCount: "จำนวนปฏิกิริยาที่ได้รับ" +pollVotesCount: "จำนวนโหวตที่ส่งไป" +pollVotedCount: "จำนวนโหวตที่ได้รับ" +yes: "ใช่" +no: "ไม่" +driveFilesCount: "จำนวนไฟล์ไดรฟ์" +driveUsage: "การใช้พื้นที่ไดรฟ์" +noCrawle: "ปฏิเสธการจัดทำดัชนีของโปรแกรมรวบรวมข้อมูล" +noCrawleDescription: "ถามเครื่องมือค้นหาภายนอกไม่จัดทำดัชนีเนื้อหาของคุณ" +lockedAccountInfo: "เว้นแต่ว่าคุณตั้งค่าการเปิดเผยโพสต์เป็น \"ผู้ติดตามเท่านั้น\" + โพสต์ของคุณจะปรากฏแก่ทุกคน ถึงแม้ว่าคุณกำหนดให้ผู้ติดตามต้องได้รับการอนุมัติด้วยตนเองแล้วก็ตาม" +alwaysMarkSensitive: "ทำเครื่องหมายเป็น NSFW เป็นค่าเริ่มต้น" +loadRawImages: "โหลดภาพต้นฉบับแทนการแสดงภาพขนาดย่อ" +disableShowingAnimatedImages: "ไม่ต้องเล่นภาพเคลื่อนไหว" +verificationEmailSent: "ส่งอีเมลยืนยันแล้วนะ ได้โปรดกรุณาไปที่ลิงก์ที่รวมไว้เพื่อทำการตรวจสอบให้เสร็จสิ้น" +notSet: "ไม่ได้ตั้งค่า" +emailVerified: "อีเมลได้รับการยืนยันแล้ว" +noteFavoritesCount: "จำนวนโพสต์ที่บุ๊กมาร์กไว้" +pageLikesCount: "จำนวนเพจที่ชอบ" +pageLikedCount: "จำนวนการกดถูกใจเพจที่ได้รับแล้ว" +contact: "ติดต่อ" +useSystemFont: "ใช้ฟอนต์เริ่มต้นของระบบ" +clips: "คลิป" +experimentalFeatures: "ฟังก์ชั่นทดสอบ" +developer: "สำหรับนักพัฒนา" +makeExplorable: "ทำให้บัญชีมองเห็นใน \"สำรวจ\"" +makeExplorableDescription: "ถ้าหากคุณปิดการทำงานนี้ บัญชีของคุณนั้นจะไม่แสดงในส่วน + \"สำรวจ\" นะ" +showGapBetweenNotesInTimeline: "แสดงช่องว่างระหว่างโพสต์บนไทม์ไลน์" +duplicate: "ทำซ้ำ" +left: "ซ้าย" +center: "ศูนย์กลาง" +wide: "กว้าง" +narrow: "ชิด" +reloadToApplySetting: "การตั้งค่านี้จะมีผลหลังจากโหลดหน้าซ้ำเท่านั้น ต้องการที่จะโหลดใหม่เลยมั้ย" +needReloadToApply: "จำเป็นต้องโหลดซ้ำถึงจะมีผลนะ" +showTitlebar: "แสดงแถบชื่อ" +clearCache: "ล้างแคช" +onlineUsersCount: "{n} ผู้ใช้คนนี้กำลังออนไลน์" +nUsers: "{n} ผู้ใช้งาน" +nNotes: "{n} โพสต์" +sendErrorReports: "ส่งรายงานว่าข้อผิดพลาด" +sendErrorReportsDescription: "เมื่อเปิดใช้งาน ข้อมูลข้อผิดพลาดโดยรายละเอียดนั้นจะถูกแชร์ให้กับ + Firefish เมื่อเกิดปัญหา ซึ่งช่วยปรับปรุงคุณภาพของ Firefish\nซึ่งจะรวมถึงข้อมูล เช่น + เวอร์ชั่นของระบบปฏิบัติการ เบราว์เซอร์ที่คุณใช้ กิจกรรมของคุณใน Firefish เป็นต้น" +myTheme: "ธีมของฉัน" +backgroundColor: "ภาพพื้นหลัง" +accentColor: "รูปแบบสี" +textColor: "สีข้อความ" +saveAs: "บันทึกเป็น..." +advanced: "ขั้นสูง" +value: "ค่า" +createdAt: "สร้างเมื่อ" +updatedAt: "อัพเดทล่าสุด" +saveConfirm: "บันทึกเปลี่ยนแปลงมั้ย?" +deleteConfirm: "ลบจริงๆเหรอ?" +invalidValue: "ค่านี้ไม่ถูกต้อง" +registry: "ทะเบียน" +closeAccount: "ปิด บัญชี" +currentVersion: "เวอร์ชั่นปัจจุบัน" +latestVersion: "รุ่นปัจจุบัน" +youAreRunningUpToDateClient: "คุณกำลังใช้ไคลเอ็นต์เวอร์ชันใหม่ล่าสุดนะ" +newVersionOfClientAvailable: "มีไคลเอ็นต์เวอร์ชันใหม่กว่าของคุณพร้อมใช้งานนะ" +usageAmount: "การใช้งาน" +capacity: "ความจุ" +inUse: "ใช้แล้ว" +editCode: "แก้ไขโค้ด" +apply: "ตกลง" +receiveAnnouncementFromInstance: "รับการแจ้งเตือนจากเซิร์ฟเวอร์นี้" +emailNotification: "การแจ้งเตือนทางอีเมล์" +publish: "เผยแพร่" +inChannelSearch: "ค้นหาในช่อง" +useReactionPickerForContextMenu: "เปิดตัวเลือกปฏิกิริยาเมื่อคลิกขวา" +typingUsers: "{users} กำลัง" +jumpToSpecifiedDate: "ข้ามไปยังวันที่เฉพาะเจาะจง" +showingPastTimeline: "กำลังแสดงผลไทม์ไลน์เก่า" +clear: "ล้าง" +markAllAsRead: "ทำเครื่องหมายทั้งหมดว่าอ่านแล้ว" +goBack: "ย้อนกลับ" +unlikeConfirm: "ลบไลค์ของคุณออกจริงๆหรอ" +fullView: "มุมมองแบบเต็ม" +quitFullView: "ออกจากมุมมองแบบเต็ม" +addDescription: "เพิ่มคำอธิบาย" +userPagePinTip: "คุณสามารถแสดงผลโพสต์ที่นี่ได้โดยเลือก \"ตรึงที่โพรไฟล์\" จากเมนูในแต่ละโพสต์" +notSpecifiedMentionWarning: "โพสต์นี้มีการกล่าวถึงผู้ใช้งานที่ไม่รวมอยู่ในผู้รับ" +info: "เกี่ยวกับ" +userInfo: "ข้อมูลผู้ใช้" +unknown: "ไม่ทราบสถานะ" +onlineStatus: "สถานะออนไลน์" +hideOnlineStatus: "ซ่อนสถานะออนไลน์" +hideOnlineStatusDescription: "การซ่อนสถานะออนไลน์ของคุณช่วยลดความสะดวกของคุณสมบัติบางอย่าง + เช่น การค้นหา อ่ะนะ" +online: "ออนไลน์" +active: "ใช้งานอยู่" +offline: "ออฟไลน์" +notRecommended: "ไม่ใช้งาน" +botProtection: "การป้องกัน Bot (or AI)" +instanceBlocking: "การจัดการสหพันธ์" +selectAccount: "เลือกบัญชี" +switchAccount: "สลับบัญชีผู้ใช้" +enabled: "เปิดใช้งาน" +disabled: "ปิดการใช้งาน" +quickAction: "ปุ่มลัด" +user: "ผู้ใช้งาน" +administration: "การจัดการ" +accounts: "บัญชีผู้ใช้" +switch: "สลับ" +noMaintainerInformationWarning: "ข้อมูลผู้ดูแลไม่ได้รับการกำหนดค่านะ" +noBotProtectionWarning: "ไม่ได้กำหนดค่าการป้องกันบอทนะ" +configure: "กำหนดค่า" +postToGallery: "สร้างโพสต์แกลเลอรี่ใหม่" +gallery: "แกลเลอรี่" +recentPosts: "โพสต์ล่าสุด" +popularPosts: "โพสต์ติดอันดับ" +shareWithNote: "แบ่งปันด้วยโพสต์" +ads: "แบนเนอร์ชุมชน" +expiration: "กำหนดเวลา" +memo: "ข้อควรจำ" +priority: "ลำดับความสำคัญ" +high: "สูง" +middle: "ปานกลาง" +low: "ต่ำ" +emailNotConfiguredWarning: "ไม่ได้ตั้งค่าที่อยู่อีเมลนะ" +ratio: "อัตราส่วน" +previewNoteText: "แสดงตัวอย่าง" +customCss: "CSS ที่กำหนดเอง" +customCssWarn: "ควรใช้การตั้งค่านี้เฉพาะต่อเมื่อคุณรู้ว่าการตั้งค่านี้ใช้ทำอะไร การป้อนค่าที่ไม่เหมาะสมอาจทำให้ไคลเอ็นต์หยุดทำงานตามปกติได้นะ" +global: "ทั่วโลก" +squareAvatars: "แสดงผลอวตารสี่เหลี่ยม" +sent: "ส่ง" +received: "ได้รับแล้ว" +searchResult: "ผลการค้นหา" +hashtags: "แฮชแท็ก" +troubleshooting: "แก้ปัญหา" +useBlurEffect: "ใช้เอฟเฟกต์เบลอใน UI" +learnMore: "แสดงให้ดูหน่อย" +misskeyUpdated: "Firefish ได้รับการอัปเดตแล้ว!" +whatIsNew: "แสดงการเปลี่ยนแปลง" +translate: "แปลภาษา" +translatedFrom: "แปลมาจาก {x}" +accountDeletionInProgress: "กำลังดำเนินการลบบัญชีอยู่" +usernameInfo: "ชื่อที่ระบุบัญชีของคุณจากผู้อื่นในเซิร์ฟเวอร์นี้ คุณสามารถใช้ตัวอักษร + (a~z, A~Z), ตัวเลข (0~9) หรือขีดล่าง (_) ชื่อผู้ใช้ไม่สามารถเปลี่ยนแปลงได้ในภายหลัง" +aiChanMode: "โหมด Ai " +keepCw: "เก็บคำเตือนเนื้อหา" +pubSub: "บัญชีผับ/ย่อย" +lastCommunication: "การสื่อสารครั้งสุดท้ายล่าสุด" +resolved: "คลี่คลายแล้ว" +unresolved: "รอการเฉลย" +breakFollow: "ลบผู้ติดตาม" +itsOn: "เปิดใช้งาน" +itsOff: "ปิดใช้งาน" +emailRequiredForSignup: "จำเป็นต้องการใช้ที่อยู่อีเมลสำหรับการสมัคร" +unread: "ไม่ได้อ่าน" +filter: "กรอง" +controlPanel: "แผงควบคุม" +manageAccounts: "จัดการบัญชี" +makeReactionsPublic: "ตั้งค่าประวัติปฏิกิริยาต่อสาธารณะ" +makeReactionsPublicDescription: "การทำเช่นนี้จะทำให้รายการปฏิกิริยาที่ผ่านมาของคุณจะปรากฏต่อสาธารณะนะ" +classic: "ตรงกลาง" +muteThread: "ปิดเสียงเธรด" +unmuteThread: "เปิดเสียงเธรด" +ffVisibility: "การมองเห็นผู้ติดตาม/ผู้ติดตาม" +ffVisibilityDescription: "ช่วยให้คุณสามารถกำหนดค่าได้ว่าใครสามารถดูได้ว่าคุณติดตามใครและใครติดตามคุณบ้าง" +continueThread: "ดูเธรดต่อ" +deleteAccountConfirm: "การดำเนินการนี้จะลบบัญชีของคุณอย่างถาวรและไม่สามารถกู้คืนกลับมาได้ + คุณจะดำเนินการต่อหรือไม่?" +incorrectPassword: "รหัสผ่านไม่ถูกต้อง" +voteConfirm: "ยืนยันการโหวต \"{choice}\" มั้ย?" +hide: "ซ่อน" +leaveGroup: "ออกจากกลุ่ม" +leaveGroupConfirm: "คุณแน่ใจหรอว่าต้องการออกจาก \"{name}\"" +useDrawerReactionPickerForMobile: "แสดงผล ตัวเลือกปฏิกิริยาเป็นลิ้นชักบนมือถือ" +welcomeBackWithName: "ยินดีต้อนรับการกลับมานะค่ะ, {name}" +clickToFinishEmailVerification: "กรุณาคลิก [{ok}] เพื่อดำเนินการยืนยันอีเมลให้เสร็จสมบูรณ์นะ" +overridedDeviceKind: "ประเภทอุปกรณ์" +smartphone: "สมาร์ทโฟน" +tablet: "แท็บเล็ต" +auto: "อัตโนมัติ" +themeColor: "สีข้อความเลื่อนของเซิร์ฟเวอร์" +size: "ขนาด" +numberOfColumn: "จำนวนคอลัมน์" +instanceDefaultLightTheme: "ธีมสว่างค่าเริ่มต้นของเซิร์ฟเวอร์" +instanceDefaultDarkTheme: "ธีมมืดค่าเริ่มต้นของเซิร์ฟเวอร์" +instanceDefaultThemeDescription: "ป้อนรหัสธีมในรูปแบบออบเจ็กต์" +mutePeriod: "ระยะเวลาปิดเสียง" +indefinitely: "ตลอดไป" +tenMinutes: "10 นาที" +oneHour: "1 ชั่วโมง" +oneDay: "1 วัน" +oneWeek: "1 สัปดาห์" +reflectMayTakeTime: "อาจจำเป็นต้องใช้เวลาสักระยะหนึ่งจึงจะเห็นแสดงผลได้นะ" +failedToFetchAccountInformation: "ไม่สามารถเรียกดึงข้อมูลบัญชีได้" +rateLimitExceeded: "เกินขีดจำกัดอัตรา" +cropImage: "ครอบตัดรูปภาพ" +cropImageAsk: "คุณต้องการครอบตัดรูปภาพนี้อย่างงั้นหรือ?" +file: "ไฟล์" +recentNHours: "ล่าสุด {n} ชั่วโมงที่แล้ว" +recentNDays: "ล่าสุด {n} วันที่แล้ว" +noEmailServerWarning: "ไม่ได้กำหนดค่าเซิร์ฟเวอร์อีเมลนี้" +thereIsUnresolvedAbuseReportWarning: "มีรายงานที่ยังไม่ได้แก้ไข" +recommended: "แนะนำ" +check: "ตรวจสอบ" +driveCapOverrideLabel: "เปลี่ยนความจุของไดรฟ์สำหรับผู้ใช้รายนี้" +driveCapOverrideCaption: "รีเซ็ตความจุเป็นค่าเริ่มต้นโดยการป้อนค่าเป็น 0 หรือ ต่ำกว่า" +requireAdminForView: "คุณจำเป็นต้องเข้าสู่ระบบด้วยบัญชีผู้ดูแลระบบเพื่อเข้าดูสิ่งนี้" +isSystemAccount: "บัญชีนี้สร้างมาและดำเนินการโดยอัตโนมัติโดยระบบ กรุณาห้ามตรวจสอบ + แก้ไข ลบ หรือกระทำการใด ๆ กับบัญชี้นี้ หรืออาจทำให้เซิร์ฟเวอร์เสียหายได้" +typeToConfirm: "โปรดป้อน {x} เพื่อยืนยัน" +deleteAccount: "ลบบัญชี" +document: "เอกสาร" +numberOfPageCache: "จำนวนหน้าเพจที่แคช" +numberOfPageCacheDescription: "การเพิ่มจำนวนนี้จะช่วยเพิ่มความสะดวกให้กับผู้ใช้งาน + แต่จะทำให้เซิร์ฟเวอร์โหลดมากขึ้นและต้องใช้หน่วยความจำมากขึ้นอีกด้วย" +logoutConfirm: "คุณแน่ใจว่าต้องการออกจากระบบ?" +lastActiveDate: "ใช้งานล่าสุดที่" +statusbar: "ไอคอนบนแถบสถานะ" +pleaseSelect: "ตัวเลือก" +reverse: "ย้อนกลับ" +colored: "สี" +refreshInterval: "รอบการอัพเดต" +label: "ป้ายชื่อ" +type: "รูปแบบ" +speed: "ความเร็ว" +slow: "ช้า" +fast: "เร็ว" +sensitiveMediaDetection: "การตรวจจับของสื่อ NSFW" +localOnly: "เฉพาะท้องถิ่น" +remoteOnly: "รีโมทเท่านั้น" +failedToUpload: "การอัปโหลดล้มเหลว" +cannotUploadBecauseInappropriate: "ไม่สามารถอัปโหลดไฟล์นี้ได้เนื่องจากระบบตรวจพบบางส่วนของไฟล์ว่านี้อาจจะเป็น + NSFW" +cannotUploadBecauseNoFreeSpace: "การอัปโหลดนั้นล้มเหลวเนื่องจากไม่มีความจุของไดรฟ์" +beta: "เบต้า" +enableAutoSensitive: "ทำเครื่องหมาย NSFW อัตโนมัติ" +enableAutoSensitiveDescription: "อนุญาตให้ตรวจหาและทำเครื่องหมายสื่อ NSFW โดยอัตโนมัติผ่าน + Machine Learning หากเป็นไปได้ แม้ว่าตัวเลือกนี้จะถูกปิดใช้งาน แต่ก็สามารถเปิดใช้งานได้ทั้งเซิร์ฟเวอร์นี้" +activeEmailValidationDescription: "เปิดใช้งานการตรวจสอบที่อยู่อีเมลให้มีความเข้มงวดยิ่งขึ้น + ซึ่งอาจจะรวมไปถึงการตรวจสอบที่อยู่อีเมล์ที่ใช้แล้วทิ้งและโดยให้พิจารณาว่าสามารถสื่อสารด้วยได้หรือไม่ + เมื่อไม่เลือกระบบจะตรวจสอบเฉพาะรูปแบบของอีเมลเท่านั้น" +navbar: "แถบนำทาง" +shuffle: "สลับ" +account: "บัญชีผู้ใช้" +move: "ย้าย" +_sensitiveMediaDetection: + description: "ลดความพยายามในการดูแลเซิร์ฟเวอร์ผ่านการจดจำสื่อ NSFW โดยอัตโนมัติผ่านการเรียนรู้ของเครื่อง + การทำสิ่งนี้อาจจะเพิ่มภาระบนเซิร์ฟเวอร์เล็กน้อย" + sensitivity: "การตรวจจับความไว" + sensitivityDescription: "การลดความไวนั้นจะนำไปสู่การตรวจจับที่ผิดพลาดน้อยลง (ผลบวกที่ผิดพลาด) + แต่ในขณะที่การเพิ่มนั้นจะนำไปสู่การตรวจหาที่พลาดน้อยลง (ผลลบเท็จ)" + setSensitiveFlagAutomatically: "ทำเครื่องหมายว่าเป็น NSFW" + setSensitiveFlagAutomaticallyDescription: "ผลลัพธ์ของการตรวจจับภายในนั้นจะยังคงอยู่ + ถึงแม้ว่าจะปิดตัวเลือกนี้" + analyzeVideos: "เปิดใช้งานวิเคราะห์ของวิดีโอ" + analyzeVideosDescription: "การวิเคราะห์วิดีโอนอกเหนือจากรูปภาพนั้น การทำสิ่งนี้จะทำให้เพิ่มภาระบนเซิร์ฟเวอร์เล็กน้อย" +_emailUnavailable: + used: "ที่อยู่อีเมลนี้ได้ถูกใช้ไปแล้ว" + format: "รูปแบบของที่อยู่อีเมลนี้ไม่ถูกต้อง" + disposable: "ที่อยู่อีเมลที่ใช้แล้วทิ้งนั้นไม่สามารถใช้ได้" + mx: "เซิร์ฟเวอร์อีเมลนี้ไม่ถูกต้อง" + smtp: "เซิร์ฟเวอร์อีเมลนี้ไม่มีการตอบสนอง" +_ffVisibility: + public: "เผยแพร่" + followers: "ปรากฏให้แก่ผู้ติดตามเท่านั้น" + private: "ส่วนตัว" +_signup: + almostThere: "เกือบจะมี" + emailAddressInfo: "โปรดกรอกอีเมลของคุณ มันจะไม่เปิดเผยต่อสาธารณะ" + emailSent: "เราได้ส่งอีเมลยืนยันไปยังที่อยู่อีเมลของคุณแล้วนะ ({email}) โปรดคลิกลิงก์ที่รวมไว้เพื่อสร้างบัญชีให้เสร็จสิ้น" +_accountDelete: + accountDelete: "ลบบัญชีผู้ใช้" + mayTakeTime: "เนื่องจากการลบบัญชีนี้จะเป็นกระบวนการที่ต้องใช้ทรัพยากรมาก จึงอาจจะต้องใช้เวลาสักครู่ถึงจะเสร็จสมบูรณ์ + ทั้งนี้ขึ้นอยู่กับจำนวนเนื้อหาที่คุณสร้างและจำนวนไฟล์ที่คุณอัปโหลดนะ" + sendEmail: "เมื่อการลบบัญชีนี้เสร็จสิ้น เราอาจจะส่งอีเมลไปยังที่อยู่อีเมลของคุณที่เคยลงทะเบียนไว้กับบัญชีนี้นะ" + requestAccountDelete: "ร้องขอให้ลบบัญชี" + started: "การลบได้เริ่มต้นขึ้น" + inProgress: "ปัจจุบันกำลังดำเนินการลบอยู่" +_ad: + back: "ย้อนกลับ" + reduceFrequencyOfThisAd: "แสดงโฆษณานี้ให้น้อยลง" +_forgotPassword: + enterEmail: "ป้อนที่อยู่อีเมลที่คุณเคยใช้ในการลงทะเบียนไว้ ลิงก์ที่คุณสามารถรีเซ็ตรหัสผ่านได้นั้นจะถูกส่งไปนะ" + ifNoEmail: "ถ้าหากคุณไม่ได้ใช้อีเมลระหว่างการลงทะเบียน กรุณาติดต่อผู้ดูแลระบบอินสแตนซ์แทนนะ" + contactAdmin: "อินสแตนซ์นี้ไม่รองรับการใช้งานที่อยู่อีเมลนี้ กรุณาติดต่อผู้ดูแลระบบอินสแตนซ์เพื่อรีเซ็ตรหัสผ่านของคุณแทน" +_gallery: + my: "แกลลอรี่ของฉัน" + liked: "โพสต์ที่ถูกใจ" + like: "ชื่นชอบ" + unlike: "ลบไลค์" +_email: + _follow: + title: "ได้ติดตามคุณ" + _receiveFollowRequest: + title: "คุณได้รับคำขอติดตาม" +_plugin: + install: "ติดตั้งปลั๊กอิน" + installWarn: "กรุณาอย่าติดตั้งปลั๊กอินที่ไม่น่าเชื่อถือนะคะ" + manage: "จัดการปลั๊กอิน" +_preferencesBackups: + list: "สร้างการสำรองข้อมูล" + saveNew: "บันทึกใหม่" + loadFile: "โหลดจากไฟล์" + apply: "นำไปใช้กับอุปกรณ์นี้" + save: "บันทึก" + inputName: "กรุณาป้อนชื่อสำหรับข้อมูลสำรองนี้" + cannotSave: "การบันทึกล้มเหลว" + nameAlreadyExists: "มีข้อมูลสำรองชื่อ \"{name}\" นี้อยู่แล้ว กรุณาป้อนชื่ออื่นนะ" + applyConfirm: "คุณต้องการใช้ข้อมูลสำรอง \"{name}\" กับอุปกรณ์นี้อย่างงั้นจริงหรอ + การตั้งค่าที่มีอยู่ของอุปกรณ์นี้จะถูกเขียนทับนะ" + saveConfirm: "บันทึกข้อมูลสำรองเป็น {name} มั้ย?" + deleteConfirm: "ลบข้อมูลสำรอง {name} มั้ย?" + renameConfirm: "เปลี่ยนชื่อข้อมูลสำรองนี้จาก \"{old}\" เป็น \"{new}\" หรือป่าว" + noBackups: "ไม่มีข้อมูลสำรองนะ คุณสามารถสำรองข้อมูลการตั้งค่าไคลเอนต์ของคุณบนเซิร์ฟเวอร์นี้โดยใช้ + \"สร้างการสำรองข้อมูลใหม่\"ได้นะ" + createdAt: "สร้างเมื่อ: {date} {time}" + updatedAt: "อัปเดตเมื่อ: {date} {time}" + cannotLoad: "การโหลดล้มเหลว" + invalidFile: "รูปแบบไฟล์ไม่ถูกต้องนะ" +_registry: + scope: "สโคป" + key: "คีย์" + keys: "คีย์" + domain: "โดเมน" + createKey: "สร้างคีย์" +_aboutFirefish: + about: "Misskey เป็นซอฟต์แวร์โอเพ่นซอร์สที่ถูกพัฒนาโดย Syuilo ตั้งแต่ปี 2014" + contributors: "ผู้สนับสนุนหลัก" + allContributors: "ผู้มีส่วนร่วมทั้งหมด" + source: "ซอร์สโค้ด" + translation: "รับแปลภาษา Firefish" + donate: "บริจาคให้กับ Firefish" +_nsfw: + respect: "ซ่อนสื่อ NSFW" + ignore: "อย่าซ่อนสื่อ NSFW" + force: "ซ่อนสื่อทั้งหมด" +_mfm: + cheatSheet: "โค้ด MFM Cheat Sheet" + intro: "MFM เป็นภาษามาร์กอัปพิเศษเฉพาะของ Firefish ที่สามารถใช้ได้ในหลายที่ คุณยังสามารถดูรายการไวยากรณ์ + MFM ที่มีอยู่ทั้งหมดได้ที่นี่นะ" + dummy: "Firefish ขยายโลกของ Fediverse" + mention: "กล่าวถึง" + mentionDescription: "คุณสามารถระบุผู้ใช้โดยใช้ At-Symbol และชื่อผู้ใช้ได้นะ" + hashtag: "แฮชแท็ก" + hashtagDescription: "คุณสามารถระบุชื่อแฮชแท็กได้โดยใช้เครื่องหมายตัวเลขและข้อความได้นะ" + url: "URL" + urlDescription: "สามารถแสดง URL ได้นะ" + link: "ลิงก์" + linkDescription: "เจาะจงเฉพาะ ส่วนของข้อความที่สามารถแสดงเป็น URL ได้" + bold: "ตัวหนา" + boldDescription: "ไฮไลท์ตัวอักษรโดยทำให้หนาขึ้น" + small: "ขนาดเล็ก" + smallDescription: "แสดงผลเนื้อหาขนาดเล็กและบาง" + center: "เซ็นเตอร์" + centerDescription: "แสดงผลเนื้อหาเป็นศูนย์กลาง" + inlineCode: "โค้ด (อินไลน์)" + inlineCodeDescription: "แสดงผลการเน้นไวยากรณ์แบบอินไลน์สำหรับโค้ด (โปรแกรม)" + blockCode: "โค้ด (บล็อก)" + blockCodeDescription: "แสดงผลการเน้นไวยากรณ์สำหรับโค้ดหลายบรรทัด (โปรแกรม) ในบล็อก" + inlineMath: "คณิต (อินไลน์)" + inlineMathDescription: "แสดงผลสูตรคณิต (KaTeX) ในบรรทัด" + blockMath: "คณิต (บล็อก)" + blockMathDescription: "แสดงผลสูตรคณิตหลายบรรทัด (KaTeX) ในบล็อก" + quote: "อ้างคำพูด" + quoteDescription: "แสดงผลเนื้อหาเป็นใบเสนอราคา" + emoji: "กำหนดอีโมจิเอง" + emojiDescription: "โดยล้อมรอบชื่ออีโมจิที่กำหนดเองด้วยเครื่องหมายทวิภาค จะสามารถแสดงผลอีโมจิที่กำหนดเองได้" + search: "ค้นหา" + searchDescription: "แสดงผลกล่องค้นหาพร้อมกับข้อความที่ป้อนไว้ล่วงหน้า" + flip: "พลิก" + flipDescription: "พลิกเนื้อหาในแนวนอนหรือแนวตั้ง" + jelly: "แอนิเมชั่น (เยลลี่)" + jellyDescription: "ให้เนื้อหาเป็นแอนิเมชั่นเหมือนเยลลี่" + tada: "แอนิเมชั่น (ธาดา)" + tadaDescription: "ให้เนื้อหาเป็นแอนิเมชั่นเหมือน \"ทาด้า!\"" + jump: "อนิเมชั่น (กระโดด)" + jumpDescription: "ให้เนื้อหามีภาพเคลื่อนไหวแบบกระโดด" + bounce: "อนิเมชั่น (เด้ง)" + bounceDescription: "ให้เนื้อหามีอนิเมชั่นเด้ง" + shake: "อนิเมชั่น (เขย่า)" + shakeDescription: "ให้เนื้อหามีภาพเคลื่อนไหวสั่น" + twitch: "แอนิเมชั่น (Twitch)" + twitchDescription: "ให้เนื้อหามีแอนิเมชั่นกระตุกอย่างแรง" + spin: "แอนิเมชั่น (สปิน)" + spinDescription: "ให้เนื้อหาเป็นภาพเคลื่อนไหวแบบหมุน" + x2: "ขนาดใหญ่" + x2Description: "แสดงเนื้อหาที่ใหญ่ขึ้น" + x3: "ใหญ่มาก" + x3Description: "แสดงเนื้อหาอีเว้นท์ที่ใหญ่ขึ้น" + x4: "ใหญ่อย่างไม่น่าเชื่อ" + x4Description: "แสดงผลเนื้อหาที่ใหญ่กว่าใหญ่กว่าขนาดใหญ่" + blur: "เบลอ" + blurDescription: "เบลอเนื้อหา จะแสดงผลอย่างชัดเจนต่อเมื่อวางเมาส์เหนือ" + font: "ตัวอักษร" + fontDescription: "ตั้งค่าตัวอักษรเพื่อแสดงเนื้อหาใน" + rainbow: "สายรุ้ง" + rainbowDescription: "ทำให้เนื้อหานั้นปรากฏเป็นสีรุ้ง" + sparkle: "กลิตเตอร์" + sparkleDescription: "ให้เนื้อหานั้นมีเอฟเฟกต์แบบอนุภาคประกาย" + rotate: "หมุนหน้าจอ" + rotateDescription: "เปลี่ยนเนื้อหาตามด้วยมุมที่ระบุไว้" + plain: "เรียบง่าย" + plainDescription: "ปิดการใช้งานเอฟเฟกต์ของ MFM ทั้งหมดที่มีอยู่ในเอฟเฟกต์ MFM นี้" +_instanceTicker: + none: "ไม่ต้องแสดง" + remote: "แสดงสำหรับผู้ใช้ระยะไกล" + always: "แสดงเสมอ" +_serverDisconnectedBehavior: + reload: "โหลดใหม่โดยอัตโนมัติ" + dialog: "แสดงกล่องโต้ตอบคำเตือน" + quiet: "แสดงคำเตือนที่ไม่เป็นการรบกวน" +_channel: + create: "สร้างแชนแนลใหม่" + edit: "แก้ไขแชนแนล" + setBanner: "เซตแบนเนอร์" + removeBanner: "ลบแบนเนอร์" + featured: "เทรนด์" + owned: "เจ้าของ" + following: "ติดตามแล้ว" + usersCount: "{n} ผู้เข้าร่วม" + notesCount: "{n} โน้ต" +_menuDisplay: + sideFull: "ด้านข้าง" + sideIcon: "ด้านข้าง (ไอคอน)" + top: "ท็อป" + hide: "ซ่อน" +_wordMute: + muteWords: "ปิดเสียงคำ" + muteWordsDescription: "คั่นด้วยช่องว่างสำหรับเงื่อนไข AND หรือด้วยการขึ้นบรรทัดใหม่สำหรับเงื่อนไข + OR นะ" + muteWordsDescription2: "ล้อมรอบคีย์เวิร์ดด้วยเครื่องหมายทับเพื่อใช้นิพจน์ทั่วไป" + softDescription: "ซ่อนโน้ตให้ตรงตามเงื่อนไขที่ตั้งไว้จากไทม์ไลน์" + hardDescription: "ป้องกันไม่ให้โน้ตย่อที่ตรงตามเงื่อนไขที่ตั้งไว้ไม่ให้ถูกเพิ่มลงในไทม์ไลน์ + นอกจากนี้ โน้ตเหล่านี้จะไม่ถูกเพิ่มลงในไทม์ไลน์แม้ว่าจะมีการเปลี่ยนแปลงเงื่อนไขยังไงก็ตาม" + soft: "ซอฟ" + hard: "ยาก" + mutedNotes: "ปิดเสียงโน้ต" +_instanceMute: + instanceMuteDescription: "การดำเนินการนี้จะปิดเสียง\"โน้ต/รีโน้ต\"จากอินสแตนซ์ที่อยู่ในรายการ + รวมถึงบันทึกของผู้ใช้ที่ตอบกลับผู้ใช้จากอินสแตนซ์ที่ปิดเสียง" + instanceMuteDescription2: "คั่นด้วยการขึ้นบรรทัดใหม่" + title: "ซ่อนโน้ตจากอินสแตนซ์ที่มีอยู่ในรายการ" + heading: "รายชื่ออินสแตนซ์ที่ถูกปิดเสียง" +_theme: + explore: "สำรวจธีม" + install: "ติดตั้งธีม" + manage: "จัดการธีม" + code: "โค้ดธีม" + description: "รายละเอียด" + installed: "{name} ได้รับการติดตั้ง" + installedThemes: "ธีมที่ติดตั้ง" + builtinThemes: "ธีมในตัว" + alreadyInstalled: "ธีมนี้ได้รับการติดตั้งแล้ว" + invalid: "รูปแบบของธีมนี้ไม่ถูกต้องนะ" + make: "ทำธีม" + base: "ฐาน" + addConstant: "เพิ่มค่าคงที่" + constant: "ตัวแปร" + defaultValue: "ค่าเริ่มต้น" + color: "สี" + refProp: "อ้างอิงคุณสมบัติ" + refConst: "อ้างอิงค่าคงที่" + key: "คีย์" + func: "ฟังก์ชัน" + funcKind: "ประเภทฟังก์ชัน" + argument: "อากิวเม้นต์" + basedProp: "ทรัพย์สินอ้างอิง" + alpha: "ความทึบแสง" + darken: "มืดลง" + lighten: "สว่าง" + inputConstantName: "ป้อนชื่อสำหรับค่าคงที่นี้" + importInfo: "ถ้าหากต้องการป้อนโค้ดที่นี่ คุณยังสามารถนำเข้าไปยังโปรแกรมแก้ไขธีมได้" + deleteConstantConfirm: "คุณต้องการลบค่าคงที่ {const} หรือป่าว?" + keys: + accent: "เน้น" + bg: "ภาพพื้นหลัง" + fg: "ข้อความ" + focus: "โฟกัส" + indicator: "ตัวบ่งชี้" + panel: "แผงควบคุม" + shadow: "เงา" + header: "ส่วนหัว" + navBg: "พื้นหลังแถบด้านข้าง" + navFg: "ข้อความแถบด้านข้าง" + mention: "กล่าวถึง" + renote: "รีโน้ต" + divider: "ตัวแบ่ง" +_sfx: + note: "หมายเหตุ" + notification: "การเเจ้งเตือน" + chat: "แชท" +_widgets: + notifications: "การเเจ้งเตือน" + timeline: "ไทม์ไลน์" + activity: "กิจกรรม" + federation: "สหพันธ์" + jobQueue: "คิวงาน" +_cw: + show: "โหลดเพิ่มเติม" +_visibility: + home: "หน้าแรก" + followers: "ผู้ติดตาม" +_profile: + name: "ชื่อ" + username: "ชื่อผู้ใช้" +_exportOrImport: + followingList: "กำลังติดตาม" + muteList: "ปิดเสียง" + blockingList: "บล็อค" + userLists: "รายการ" +_charts: + federation: "สหพันธ์" +_timelines: + home: "หน้าแรก" +_pages: + blocks: + image: "รูปภาพ" + script: + categories: + list: "รายการ" + blocks: + _join: + arg1: "รายการ" + _randomPick: + arg1: "รายการ" + _dailyRandomPick: + arg1: "รายการ" + _seedRandomPick: + arg2: "รายการ" + _pick: + arg1: "รายการ" + _listLen: + arg1: "รายการ" + types: + array: "รายการ" +_notification: + youWereFollowed: "ได้ติดตามคุณ" + _types: + follow: "กำลังติดตาม" + mention: "กล่าวถึง" + renote: "รีโน้ต" + quote: "อ้างคำพูด" + reaction: "รีแอคชั่น" + _actions: + reply: "ตอบกลับ" + renote: "รีโน้ต" +_deck: + _columns: + notifications: "การเเจ้งเตือน" + tl: "ไทม์ไลน์" + antenna: "เสาอากาศ" + list: "รายการ" + mentions: "พูดถึง" +noThankYou: ไม่ล่ะขอบคุณ +removeReaction: ลบรีเเอคชันของคุณ +renoteMute: ปิดเสียงบูสต์ +renoteUnmute: เลิกปิดเสียงบูสต์ +manageGroups: จัดการกลุ่ม +addInstance: เพิ่มเซิร์ฟเวอร์ +searchPlaceholder: ค้นหาใน Firefish +deleted: ลบแล้ว +editNote: แก้ไขโพสต์ +edited: แก้ไขแล้วเมื่อ {date} {time} +jumpToPrevious: ข้ามไปที่ก่อนหน้านี้ +listsDesc: ลิสต์นั้นช่วยให้คุณได้สร้างไทม์ไลน์กับผู้ใช้ที่ระบุได้ คุณสามารถเข้าถึงได้จากหน้าไทม์ไลน์ +enableEmojiReactions: เปิดใช้งานรีแอคชันอีโมจิ +selectChannel: เลือกช่อง +older: เก่ากว่า +newer: ใหม่กว่า +selectInstance: เลือกเซิฟเวอร์ +showEmojisInReactionNotifications: แสดงอิโมจิในการแจ้งเตือนรีแอคชัน +flagSpeakAsCat: พูดเหมือนแมว +cw: คำเตือนเนื้อหา +reactions: รีแอคชัน +replies: การตอบกลับ +quotes: โควต +clickToShowPatterns: คลิกเพื่อแสดงรูปแบบโมดูล +renotes: บูสต์ +flagSpeakAsCatDescription: ในโหมดแมว โพสต์ของคุณจะถูกทำให้เป็นแมว +expandOnNoteClick: เปิดโพสต์เมื่อคลิก +channelFederationWarn: ช่องที่ยังไม่ได้รวมเข้าจากเซิร์ฟเวอร์อื่น ๆ +audio: เสียง +logoImageUrl: URL โลโก้ภาพ +hiddenTags: แฮชแท็กที่ซ่อนอยู่ +antennasDesc: "เสาอากาศใช้แสดงโพสต์ใหม่ที่ตรงกับเกณฑ์ที่คุณกำหนดไว้\nซึ่งสามารถเข้าถึงได้จากหน้าไทม์ไลน์" +recommendedInstances: เซิร์ฟเวอร์ที่แนะนำ +silenced: ถูกปิดเงียบ +unsubscribePushNotification: ปิดการแจ้งเตือนแบบพุช +alt: ALT +pushNotificationNotSupported: เบราว์เซอร์หรือเซิร์ฟเวอร์ของคุณไม่รองรับการแจ้งเตือนแบบพุช +customMOTD: ข้อความหน้าจอเริ่มต้นที่กำหนดเอง (MOTD) +swipeOnMobile: อนุญาตให้ปัดระหว่างหน้า +breakFollowConfirm: คุณแน่ใจหรือไม่ที่จะลบผู้ติดตาม? +defaultReaction: ค่าเริ่มต้นของปฏิกิริยาอีโมจิสำหรับโพสต์ขาออกและขาเข้า +silenceThisInstance: ปิดเงียบสำหรับเซิร์ฟเวอร์นี้ +antennaInstancesDescription: เขียนชื่อเซิร์ฟเวอร์ได้ 1 ชื่อต่อ 1 บรรทัด +splash: หน้าจอเริ่มต้น +customKaTeXMacro: มาโคร KaTeX แบบกำหนดเอง +enableCustomKaTeXMacro: เปิดใช้งานมาโคร KaTeX แบบกำหนดเอง +userSaysSomethingReasonReply: '{name} ได้ตอบกลับไปยังโพสต์ที่มี {reason}' +userSaysSomethingReasonRenote: '{name} ได้บูสท์โพสต์ที่มี {reason}' +swipeOnDesktop: อนุญาตให้ปัดระหว่างหน้าในมือถือ +attachedToNotes: โพสต์พร้อมไฟล์นี้ +accessibility: การช่วยการเข้าถึง +objectStorageS3ForcePathStyle: ใช้ URL ปลายทางตามเส้นทาง +objectStorageS3ForcePathStyleDesc: เปิดใช้งานเพื่อสร้าง URL ปลายทางในฟอร์แมตของ 's3.amazonaws.com//' + over '.s3.amazonaws.com' +userSaysSomethingReason: '{name} พูดว่า {reason}' +userSaysSomethingReasonQuote: '{name} ได้ยกคำพูดจากโพสต์ที่มี {reason}' +privateMode: โหมดส่วนตัว +image: รูปภาพ +video: วิดีโอ +showAds: แสดงแบนเนอร์ชุมชน +pushNotificationAlreadySubscribed: การแจ้งเตือนแบบพุชได้เปิดอยู่แล้ว +sendPushNotificationReadMessage: ลบการแจ้งเตือนแบบพุชเมื่ออ่านการแจ้งเตือนหรือข้อความที่เกี่ยวข้องแล้ว +enterSendsMessage: กด Enter ในแชทเพื่อส่งข้อความ (ถ้าฟีเจอร์นี้ถูกปิด ให้ใช้ Ctrl + + Enter) +customMOTDDescription: ข้อความหน้าจอเริ่มต้นที่กำหนดเอง (MOTD) + คั่นด้วยการขึ้นบรรทัดใหม่เพื่อแสดงแบบสุ่มทุกครั้งที่ผู้ใช้โหลดเว็บหรือโหลดหน้าเว็บซ้ำ +caption: คำอธิบายโดยอัตโนมัติ +moveToLabel: 'บัญชีที่คุณจะย้ายไปยัง:' +noteId: โพสต์ ID +apps: แอป +enableRecommendedTimeline: เปิดใช้งาน ไทม์ไลน์ที่แนะนำ +secureMode: โหมดปลอดภัย (Fetch ที่ได้รับอนุญาต) +seperateRenoteQuote: แยกปุ่มบูสท์ และ ปุ่มยกคำพูด +privateModeInfo: เมื่อเปิดใช้งาน เซิร์ฟเวอร์ที่ได้รับอนุญาตให้รวมเข้านั้น ทุกโพสต์จะถูกซ่อนจากสาธารณะ +xl: XL +accountMoved: 'ผู้ใช้มีการย้ายบัญชีใหม่:' +hiddenTagsDescription: 'แฮชแท็ก (ในนี้จะไม่ใช้ #) ของแท็กที่คุณต้องการซ่อนจาก "มาแรง" + และ "สํารวจ" แท็กที่ซ่อนอยู่ยังคงค้นพบได้ผ่านทางช่องทางอื่น ๆ' +cannotUploadBecauseExceedsFileSizeLimit: ไม่สามารถอัปโหลดไฟล์นี้ได้ เนื่องจากเกินขีดจำกัดของขนาดไฟล์ +silencedInstances: เซิร์ฟเวอร์ที่ถูกปิดเงียบ +silencedInstancesDescription: รายการชื่อโฮสต์ของเซิร์ฟเวอร์ที่คุณต้องการให้ปิดเงียบ + บัญชีในเซิร์ฟเวอร์ที่ระบุเป็น "ปิดเงียบ" สามารถส่งคำขอติดตามเท่านั้น และไม่สามารถกล่าวถึงบัญชีท้องถิ่นหากไม่ได้ติดตามบัญชีนั้น + รายการนี้จะไม่ส่งผลกระทบต่อเซิร์ฟเวอร์ที่ถูกบล็อก +clipsDesc: คลิปคล้ายกับบุ๊กมาร์กที่เรียงกันเป็นหมวดหมู่และแบ่งปันกันได้ คุณสามารถสร้างคลิปได้จากเมนูของแต่ละโพสต์ +noInstances: ไม่มีเซิร์ฟเวอร์ +instanceSecurity: ความปลอดภัยของเซิร์ฟเวอร์ +secureModeInfo: เมื่อร้องขอจากเซิร์ฟเวอร์อื่น ห้ามส่งกลับมาโดยไม่มีหลักฐาน +allowedInstances: เซิร์ฟเวอร์ที่ได้รับอนุญาต +allowedInstancesDescription: โฮสต์ของเซิร์ฟเวอร์ที่ได้รับอนุญาตให้รวมเข้า เซิร์ฟเวอร์ละบรรทัด + (ใช้ได้เฉพาะในโหมดส่วนตัวเท่านั้น) +showAttachedNotes: แสดงโพสต์พร้อมไฟล์นี้ +expandOnNoteClickDesc: ถ้าฟีเจอร์นี้ปิดอยู่ คุณยังสามารถเปิดโพสต์ได้โดยการคลิกขวาและคลิกที่ประทับเวลา +pushNotification: การแจ้งเตือนแบบพุช +subscribePushNotification: เปิดการแจ้งเตือนแบบพุช +sendPushNotificationReadMessageCaption: การแจ้งเตือนที่มีข้อความ "{emptyPushNotificationMessage}" + จะแสดงผลเป็นเวลาอันสั้น การกระทำเช่นนี้อาจเพิ่มการใช้พลังงานของเครื่องของคุณได้ + (หากมี) +adminCustomCssWarn: การตั้งค่านี้ควรจะใช้หากคุณรู้ว่ามันใช้ยังไง ป้อนค่าที่ไม่ถูกต้องอาจเกิดให้ไคลเอนต์ของ + "ทุกคน" ทํางานผิดปกติ โปรดให้แน่ใจว่า CSS ของคุณทํางานอย่างถูกต้องโดยการทดสอบในการตั้งค่าของผู้ใช้ของคุณ +customSplashIcons: หน้าจอเริ่มต้นที่กำหนดเอง (URL) +customSplashIconsDescription: URL สำหรับหน้าจอเริ่มต้น + คั่นด้วยการขึ้นบรรทัดใหม่เพื่อแสดงแบบสุ่มทุกครั้งที่ผู้ใช้โหลดเว็บหรือโหลดหน้าเว็บซ้ำ + โปรดตรวจสอบว่ารูปภาพอยู่ใน URL แบบคงที่ และควรปรับขนาดทั้งหมดเป็น 192x192 +showUpdates: แสดงหน้าต่างป๊อปอัพเมื่อ Firefish ได้อัพเดท +recommendedInstancesDescription: เซิร์ฟเวอร์ที่แนะนำคั่นด้วยการขึ้นบรรทัดใหม่เพื่อให้ปรากฏในไทม์ไลน์ที่แนะนำ +updateAvailable: อาจมีการอัปเดต! +showAdminUpdates: ระบุว่า Firefish เวอร์ชันใหม่พร้อมใช้งาน (ผู้ดูแลระบบเท่านั้น) +replayTutorial: เล่นวิธีใช้งานซ้ำ +migration: การโยกย้าย +moveTo: ย้ายบัญชีปัจจุบันไปยังบัญชีใหม่ +moveAccount: ย้ายบัญชี! +moveAccountDescription: กระบวนการนี้ไม่สามารถย้อนกลับได้ + ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่านามแฝงสำหรับบัญชีนี้ในบัญชีใหม่ของคุณก่อนที่จะย้าย + โปรดป้อนแท็กของบัญชีที่มีรูปแบบเช่น @person@server.com +moveFrom: ย้ายบัญชีนี้จากบัญชีเก่า +moveFromLabel: 'บัญชีที่คุณจะย้ายจาก:' +moveFromDescription: การดำเนินการนี้จะตั้งค่านามแฝงของบัญชีเก่าของคุณ เพื่อให้คุณสามารถย้ายจากบัญชีนั้นไปยังบัญชีปัจจุบันนี้ได้ + ทำสิ่งนี้ก่อนที่จะย้ายจากบัญชีเก่าของคุณ โปรดป้อนแท็กของบัญชีที่มีรูปแบบเช่น @person@server.com +migrationConfirm: "คุณแน่ใจหรือไม่ว่าคุณต้องการย้ายบัญชีของคุณไปยัง {account} เมื่อคุณทำเช่นนี้ + คุณจะไม่สามารถกู้คืนมาได้ และคุณจะไม่สามารถใช้บัญชีของคุณได้ตามปกติอีก\nนอกจากนี้ + โปรดตรวจสอบให้แน่ใจว่าคุณได้ตั้งบัญชีปัจจุบันนี้เป็นบัญชีที่คุณจะย้ายออก" +license: ใบอนุญาต +signupsDisabled: การลงชื่อสมัครใช้บนเซิร์ฟเวอร์นี้ถูกปิดใช้งานอยู่ในขณะนี้ แต่คุณสามารถสมัครที่เซิร์ฟเวอร์อื่นได้ตลอดเวลา + หากคุณมีรหัสเชิญสำหรับเซิร์ฟเวอร์นี้ โปรดป้อนรหัสด้านล่าง +customKaTeXMacroDescription: 'ตั้งค่ามาโครเพื่อเขียนนิพจน์ทางคณิตศาสตร์ได้อย่างง่ายดาย + สัญกรณ์สอดคล้องกับคำจำกัดความของคำสั่ง LaTeX และเขียนเป็น \newcommand{\ name}{content} + หรือ \newcommand{\name}[number of arguments]{content} ตัวอย่างเช่น \newcommand{\add}[2]{#1 + + #2} จะขยาย \add{3}{foo} เป็น 3 + foo วงเล็บปีกกาที่อยู่รอบชื่อมาโครสามารถเปลี่ยนเป็นวงเล็บกลมหรือสี่เหลี่ยมได้ + สิ่งนี้ส่งผลต่อวงเล็บที่ใช้สำหรับอาร์กิวเมนต์ คุณสามารถกำหนดมาโครได้หนึ่งรายการ + (และเพียงหนึ่งรายการเท่านั้น) ต่อบรรทัด และคุณไม่สามารถแยกบรรทัดตรงกลางคำจำกัดความได้ + บรรทัดที่ไม่ถูกต้องจะถูกละเว้น รองรับเฉพาะฟังก์ชันการแทนที่สตริงแบบง่ายเท่านั้น + ไม่สามารถใช้วากยสัมพันธ์ขั้นสูงได้ที่นี่ เช่น การแตกแขนงแบบมีเงื่อนไข' +_tutorial: + step4_2: สำหรับโพสต์แรกของคุณ บางคนชอบสร้างโพสต์ {introduction} หรือข้อความง่ายๆ + ว่า "สวัสดีชาวโลก!" + step2_1: ขั้นแรก กรุณากรอกโพรไฟล์ของคุณ + title: วิธีใช้ Firefish + step1_2: มาตั้งค่ากันดีกว่า คุณจะพร้อมใช้งานได้ทันที! + step3_1: ตอนนี้ถึงเวลาที่จะติดตามผู้คนแล้ว! + step4_1: มาโพสต์ครั้งแรกกันเถอะ + step5_1: ไทม์ไลน์มีอยู่ทุกที่! + step5_4: หน้าท้องถิ่น {icon} คือหน้าที่คุณมองเห็นโพสต์จากทุก ๆ คนในเซิร์ฟเวอร์นี้ + step5_6: หน้าแนะนำ {icon} คือหน้าที่คุณมองเห็นโพสต์ที่แอดมินได้แนะนำมา + step5_7: หน้าทั่วโลก {icon} คือหน้าที่คุณมองเห็นโพสต์จากทุก ๆ เซิร์ฟเวอร์ที่รวมเข้าด้วยกัน + step6_4: ตอนนี้ไปสำรวจและสนุกกันได้เลย! + step1_1: ยินดีต้อนรับ! + step6_1: แล้วสถานที่นี้คืออะไร? + step6_3: แต่ละเซิร์ฟเวอร์ทำงานในรูปแบบที่แตกต่างกัน และไม่ใช่ว่าทุกเซิร์ฟเวอร์จะใช้งาน + Firefish แต่เซิร์ฟเวอร์นี้ใช้งาน Firefish ถึงแม้ว่ามันซับซ้อนเล็กน้อย แต่คุณจะเข้าใจได้ในเวลาอันสั้น + step6_2: คุณไม่ได้เพียงแค่เข้าร่วม Firefish เท่านั้น คุณได้เข้าร่วมพอร์ทัลไปยัง + Fediverse (จักรวาลสหพันธ์) ซึ่งเป็นเครือข่ายที่เชื่อมต่อถึงกันซึ่งมีเซิร์ฟเวอร์นับพัน + step2_2: + การให้ข้อมูลว่าคุณเป็นใครจะทำให้คนอื่นบอกได้ง่ายขึ้นว่าพวกเขาต้องการดูโพสต์ของคุณหรือติดตามคุณ + step3_2: "ไทม์ไลน์ที่หน้าแรกและหน้าโซเชียลของคุณจะขึ้นอยู่กับคนที่คุณติดตาม ดังนั้นลองติดตาม + 2-3 บัญชีเพื่อเริ่มต้น\nคลิกวงกลมบวกที่มุมขวาบนของโพรไฟล์เพื่อติดตาม" + step5_2: เซิร์ฟเวอร์ของคุณมี {timelines} ไทม์ไลน์ที่แตกต่างกันและเปิดใช้งานอยู่ + step5_3: หน้าแรก {icon} คือหน้าที่คุณมองเห็นโพสต์จากบัญชีที่คุณติดตาม + step5_5: หน้าโซเชียล {icon} คือหน้าที่ผสมกันระหว่างหน้าแรกกับหน้าท้องถิ่น +_2fa: + step1: ขั้นแรก ให้ติดตั้งแอปยืนยันตัวตน (เช่น {a} หรือ {b}) บนอุปกรณ์ของคุณ + registerTOTP: ลงทะเบียนแอปยืนยันตัวตน + step2: จากนั้นสแกน QR Code ที่แสดงบนหน้าจอนี้ + alreadyRegistered: คุณได้ลงทะเบียนอุปกรณ์ยืนยันตัวตนแบบ 2 ปัจจัยแล้ว +_filters: + followersOnly: ผู้ติดตามเท่านั้น + followingOnly: ผู้ที่คุณติดตามเท่านั้น diff --git a/locales/tr-TR.yml b/locales/tr-TR.yml new file mode 100644 index 0000000..b22dfac --- /dev/null +++ b/locales/tr-TR.yml @@ -0,0 +1,2130 @@ +_lang_: "Türkçe" +introFirefish: "Hoş geldin! Firefish, sonsuza kadar ücretsiz olan, açık kaynaklı, + merkezi olmayan bir sosyal medya platformudur! 🚀" +monthAndDay: "{month}/{day}" +search: "Ara" +notifications: "Bildirimler" +username: "Kullanıcı Adı" +password: "Şifre" +forgotPassword: "Şifremi unuttum" +ok: "TAMAM" +gotIt: "Anladım!" +cancel: "İptal" +enterUsername: "Kullanıcı adınızı giriniz" +noNotes: "Gönderiler mevcut değil" +noNotifications: "Bildirim bulunmuyor" +settings: "Ayarlar" +basicSettings: "Temel Ayarlar" +otherSettings: "Diğer Ayarlar" +openInWindow: "Açılır pencerede aç" +profile: "Profil" +timeline: "Akış" +noAccountDescription: "Bu kullanıcı henüz \"hakkında\" kısmını yazmadı." +login: "Giriş Yap" +logout: "Çıkış Yap" +signup: "Kayıt Ol" +uploading: "Yükleniyor..." +users: "Kullanıcılar" +addUser: "Kullanıcı Ekle" +favorite: "Favorilere ekle" +favorites: "Favoriler" +unfavorite: "Favorilerden Kaldır" +favorited: "Favorilere eklendi." +alreadyFavorited: "Zaten favorilerinizde kayıtlı." +pin: "Sabitlenmiş" +unpin: "Sabitlemeyi kaldır" +copyContent: "İçeriği kopyala" +copyLink: "Bağlantıyı Kopyala" +delete: "Sil" +deleteAndEdit: "Sil ve yeniden düzenle" +deleteAndEditConfirm: "Bu gönderiyi silip yeniden düzenlemek istiyor musunuz? Bu gönderiye + ilişkin tüm tepkiler, destekler ve yanıtlar silinecektir." +addToList: "Listeye ekle" +sendMessage: "Mesaj Gönder" +copyUsername: "Kullanıcı Adını kopyala" +searchUser: "Kullanıcıları ara" +pinned: "Profile sabitle" +remove: "Sil" +smtpUser: "Kullanıcı Adı" +smtpPass: "Şifre" +user: "Kullanıcı" +_mfm: + search: "Arama" + play: MFM'i çal + stop: MFM'i durdur + cheatSheet: MFM Kopya Kağıdı + intro: MFM, Misskey, Firefish, Akkoma ve daha pek çok yerde kullanılabilen bir biçimlendirme + dilidir. Burada mevcut tüm MFM sözdiziminin bir listesini görüntüleyebilirsiniz. + link: Link + boldDescription: Harfleri kalınlaştırarak vurgular. + small: Küçük + smallDescription: İçeriği küçük ve ince görüntüler. + warn: MFM, hızla hareket eden veya gösterişli animasyonlar içerebilir + alwaysPlay: Her zaman tüm animasyonlu MFM'yi otomatik oynat + x4Description: İçeriği büyükten de büyükten daha büyük görüntüler. + rainbowDescription: İçeriğin gökkuşağı renklerinde görünmesini sağlar. + bounceDescription: İçeriğe sıçarayan bir animasyon verir. + sparkle: Işıltı + sparkleDescription: İçeriğe ışıltılı bir parçacık efekti verir. + rotateDescription: İçeriği belirli bir açıyla döndürür. + fadeDescription: İçeriği içeri ve dışarı karartır. + fade: Karart + position: Pozisyon + blockCode: Kod (Blok) + crop: Kırp + positionDescription: İçeriği belirli bir miktarda taşıyın. + scale: Ölçek + scaleDescription: İçeriği belirtilen bir miktara göre ölçeklendirin. + foreground: Ön plan rengi + mention: Bahset + mentionDescription: Bir et-sembolü (@) ve bir kullanıcı adı kullanarak bir kullanıcı + belirleyebilirsiniz. + hashtag: Etiket + dummy: Firefish, Fediverse dünyasını genişletiyor + hashtagDescription: Sayı işareti ve metin kullanarak bir etiket belirtebilirsiniz. + url: URL + urlDescription: URL'ler görüntülenebilir. + inlineMath: Matematik (Satır İçi) + blockCodeDescription: Bir blokta çok satırlı (program) kod için sözdizimi vurgulamasını + görüntüler. + inlineMathDescription: Matematik formüllerini (KaTeX) satır içinde görüntüleyin + quote: Alıntı + quoteDescription: İçeriği alıntı olarak görüntüler. + twitch: Animasyon (Seğir) + emoji: Özel Emoji + jelly: Animasyon (Jöle) + blur: Bulanık + blurDescription: İçeriği bulanıklaştırır. Fareyle üzerine gelindiğinde net bir şekilde + görüntülenecektir. + spinDescription: İçeriğe dönen bir animasyon verir. + plainDescription: Bu MFM efektinde bulunan tüm MFM'lerin etkilerini devre dışı bırakır. + background: Arka plan rengi + backgroundDescription: Metnin arka plan rengini değiştirin. + jump: Animasyon (Zıpla) + cropDescription: İçeriği kırpar. + advancedDescription: Devre dışı bırakılırsa, animasyonlu MFM oynatılmadığı sürece + yalnızca temel işaretlemeye izin verir + bold: Kalın + inlineCodeDescription: (Program) kodu için satır içi sözdizimi vurgulamasını görüntüler. + flip: Tersine Çevir + flipDescription: İçeriği yatay veya dikey olarak çevirir. + font: Yazı Tipi + twitchDescription: İçeriğe güçlü bir şekilde seğiren bir animasyon verir. + spin: Animasyon (Dön) + x2Description: İçeriği büyük gösterir. + rotate: Döndür + plain: Düz + linkDescription: Metnin belirli bölümleri bir URL olarak görüntülenebilir. + searchDescription: Önceden girilmiş metin içeren bir arama kutusu görüntüler. + blockMathDescription: Matematik formüllerini (KaTeX) bir blokta görüntüleyin + jumpDescription: İçeriğe zıplama animasyonu verir. + rainbow: Gökkuşağı + x4: İnanılmaz derecede büyük + tadaDescription: İçeriğe "Tada!" benzeri bir animasyon verir. + shake: Animasyon (Salla) + x3: Büyük göster + blockMath: Matematik (Blok) + x2: Büyük + fontDescription: İçeriğin görüntüleneceği yazı tipini ayarlar. + foregroundDescription: Metnin ön plan rengini değiştirin. + centerDescription: İçeriği ortada görüntüler. + inlineCode: Kod (Satır İçi) + advanced: Gelişmiş MFM + center: Ortala + x3Description: İçeriği daha büyük gösterir. + tada: Animasyon (Tada) + emojiDescription: Özel bir emoji adını iki nokta ile çevreleyerek, özel emoji görüntülenebilir. + jellyDescription: İçeriğe jöle benzeri bir animasyon verir. + shakeDescription: İçeriğe sallanan bir animasyon verir. + bounce: Animasyon (Sıçra) +_sfx: + notification: "Bildirim" + noteMy: Kendi Gönderim + note: Yeni gönderi + antenna: Antenler + chat: Sohbet + channel: Kanal bildirimleri + chatBg: Sohbet (Arkaplan) +_widgets: + notifications: "Bildirim" + timeline: "Zaman çizelgesi" + photos: Fotoğraflar + userList: Kullanıcı Listesi + _userList: + chooseList: Liste seç + onlineUsers: Aktif Kullanıcılar + aiscript: AiScript Konsolu + activity: Aktivite + digitalClock: Dijital Saat + unixClock: UNIX Saati + calendar: Takvim + trends: Popüler + memo: Yapışkan Notlar + rssTicker: RSS Ticker + federation: Federasyon + instanceCloud: Sunucu Bulutu + postForm: Gönderi Formu + slideshow: Slayt Gösterisi + button: Düğme + clock: Saat + rss: RSS Okuyucu + serverInfo: Sunucu Bilgisi + jobQueue: İş Sırası + serverMetric: Sunucu Bilgileri +_profile: + username: "Kullanıcı Adı" + changeBanner: Afişini değiştir + locationDescription: Önce şehrinizi girerseniz, yerel saatinizi diğer kullanıcılara + gösterecektir. + youCanIncludeHashtags: Hakkımdan'da etiket kullanabilirsin. + description: Hakkımda + metadataDescription: 'Bunları kullanarak profilinizde ek bilgi alanları görüntüleyebilirsiniz. + Profilinizdeki bağlantıyı doğrulamak için {rel} ile bir {a} etiketi veya {l} etiketi + ekleyebilirsiniz!' + metadata: Ek Bilgi + metadataContent: İçerik + metadataLabel: Etiket + changeAvatar: Avatarını değiştir + name: İsim + metadataEdit: Ek Bilgini Düzenle +_deck: + _columns: + notifications: "Bildirim" + tl: "Zaman çizelgesi" + antenna: Anten + list: Liste + widgets: Araçlar + channel: Kanal + direct: Direkt mesajlar + main: Ana + mentions: Bahsetmeler + swapLeft: Sol sütunla değiştir + addColumn: Sütun ekle + configureColumn: Sütun ayarları + swapRight: Sağ sütunla değiştir + swapUp: Üstteki sütunla değiştir + stackLeft: Sol sütunla birleştir + swapDown: Alttaki sütunla değiştir + popRight: Sağdaki sütunu aç + introduction2: İstediğiniz zaman yeni sütunlar eklemek için ekranın sağındaki + + işaretini tıklayın. + alwaysShowMainColumn: Her zaman ana sütunu göster + columnAlign: Sütunları hizala + profile: Çalışma alanı + newProfile: Yeni çalışma alanı + renameProfile: Çalışma alanını yeniden adlandır + deleteProfile: Çalışma alanını sil + nameAlreadyExists: Bu çalışma alanı zaten mevcut. + introduction: Sütunları özgürce düzenleyerek sizin için mükemmel arayüzü oluşturun! + widgetsIntroduction: Lütfen sütun menüsünde "Araç'ları düzenle"yi seçin ve bir widget + ekleyin. +searchPlaceholder: Firefish'de Ara +reply: Yanıtla +jumpToPrevious: Öncekini görüntüle +deleted: Silindi +editNote: Gönderiyi düzenle +noThankYou: Hayır, teşekkürler +addInstance: Bir sunucu ekle +cantFavorite: Favorilere eklenemedi. +edited: '{date} tarihinde ve {time} vaktinde düzenlendi' +loggingIn: Giriş Yapılıyor +save: Kaydet +headlineFirefish: Sonsuza kadar ücretsiz, açık kaynak kodlu, merkeziyetsiz sosyal + medya platformu! 🚀 +loadMore: Daha fazla yükle +instance: Sunucu +fetchingAsApObject: Fediverse'den çekiliyor +removeReaction: Tepkini sil +rememberNoteVisibility: Gönderi görünürlüğü ayarlarını hatırla +attachCancel: Ek'i kaldır +suspend: Askıya Al +unsuspend: Askıya Almayı Kaldır +unmute: Susturmayı Kaldır +blockConfirm: Bu hesabı engellemek istediğinize emin misiniz? +unblockConfirm: Bu hesabın engelini kaldırmak istediğinize emin misiniz? +settingGuide: Tavsiye edilen ayarlar +cacheRemoteFilesDescription: Bu ayar devre dışı bırakıldığında, uzak dosyalar doğrudan + dosyanın bulunduğu sunucudan yüklenir. Bunun devre dışı bırakılması depolama kullanımını + azaltacak, ancak küçük resimler oluşturulmayacağından trafiği artıracaktır. +flagAsCatDescription: Kedi kulaklarına sahip olacak ve bir kedi gibi konuşacaksın! +flagSpeakAsCat: Kedi gibi konuş +setWallpaper: Arkaplanı ayarla +removeWallpaper: Arkaplanı sil +operations: İşlemler +clearCachedFiles: Ön belleği temizle +clearCachedFilesConfirm: Önbelleğe alınan tüm uzak dosyaları silmek istediğinizden + emin misiniz? +blockedInstancesDescription: Engellemek istediğiniz sunucuların domain adlarını listeleyin. + Listelenen sunucular artık bu sunucularla iletişim kuramayacak. +blockedUsers: Engellenmiş kullanıcılar +editProfile: Profilini düzenle +intro: Firefish'in kurulumu tamamlandı! Lütfen yönetici hesap oluşturun. +instanceUsers: Sunucunun kullanıcıları +changePassword: Şifreyi değiştir +security: Güvenlik +newPasswordRetype: Yeni şifreyi tekrarla +uploadFromUrlRequested: Yükleme istendi +syncDeviceDarkMode: Karanlık modu cihazının ayarları ile senkronize et +renameFolder: Bu klasörü yeniden adlandır +emptyFolder: Bu klasör boş +unableToDelete: Silinemiyor +inputNewDescription: Yeni açıklama gir +hasChildFilesOrFolders: Bu klasör boş olmadığından dolayı silinemez. +disconnectedFromServer: Sunucuyla bağlantı kesildi +reload: Yenile +disablingTimelinesInfo: Yöneticiler ve Moderatörler, etkinleştirilmemiş olsalar bile + tüm zaman çizelgelerine her zaman erişebilirler. +pinnedUsersDescription: '"Keşfet" sekmesinde sabitlenecek kullanıcı adlarını satır + sonlarıyla ayırarak listeleyin.' +pinnedPages: Sabitlenmiş Sayfalar +pinnedPagesDescription: Bu sunucunun üst kısmına sabitlemek istediğiniz Sayfaların + yollarını satır sonundan ayırarak girin. +enableHcaptcha: hCaptcha'yı Aktif Et +notifyAntenna: Yeni gönderileri bildir +recentlyUpdatedUsers: En son aktif olan kullanıcılar +about: Hakkında +twoStepAuthentication: İki-adımlı doğrulama +securityKeyName: Anahtar ismi +help: Yardım +inputMessageHere: Mesajını buraya gir +ownedGroups: Gruplarım +joinedGroups: Katılınmış gruplar +invites: Davetler +members: Kullanıcılar +transfer: Transfer +messagingWithGroup: Grup sohbeti +next: Sonraki +retype: Tekrar gir +dashboard: Panel +objectStorageBucket: Kova +objectStorageBucketDesc: Sağlayıcınız tarafından kullanınan bucket ismini yazın. +showFixedPostForm: Gönderim formunu zaman çizelgesinin en üstünde görüntüleyin +newNoteRecived: Yeni gönderiler mevcut +none: Hiçbiri +details: Detaylar +recentUsed: Son kullanılan +installedApps: Yetkilendirilmiş Uygulamalar +removeAllFollowing: Takip edilen herkesi çıkar +yourAccountSuspendedDescription: Bu hesap, sunucunun hizmet şartlarını veya benzerlerini + ihlal ettiği için askıya alındı. Daha ayrıntılı bir neden öğrenmek istiyorsanız + yöneticiyle iletişime geçin. Lütfen yeni bir hesap oluşturmayın. +addedRelays: Eklenen Röleler +serviceworkerInfo: Push bildirimleri için aktif olması gerekiyor. +author: Sahip +tokenRequested: Hesaba erişim ver +useFullReactionPicker: Tam boyutunda tepki seçici kullan +small: Küçük +enableAll: Hepsine izin ver +disableAll: Hepsini kapat +regexpError: Regex hatası +emailConfigInfo: Kayıt sırasında veya şifrenizi unutursanız e-postanızı onaylamak + için kullanılır +smtpSecure: SMTP bağlantıları için SSL/TSL kullan +regexpErrorDescription: '{tab} kelimenizin {line} satırındaki normal ifadede bir hata + oluştu:' +instanceMute: Sunucu Susturmaları +reporter: Rapor eden +userSaysSomethingReason: '{name}, {reason} söyledi' +userSaysSomethingReasonRenote: '{name}, {reason} içeren bir gönderiyi öne çıkardı' +userSaysSomethingReasonQuote: '{name}, {reason} içeren bir gönderiden alıntı yaptı' +notificationSettingDesc: Görünecek bildirimleri seç. +other: Diğer +sample: Örnek +notSet: Ayarlanmadı +emailVerified: Mail doğrulandı +showGapBetweenNotesInTimeline: Zaman tünelinde gönderiler arasındaki boşluğu göster +sendErrorReports: Hata raporları gönder +followingCount: Takip edilen hesap sayısı +no: Hayır +myTheme: Temam +backgroundColor: Arkaplan rengi +accentColor: Vurgu rengi +textColor: Yazı rengi +createdAt: Oluşturuldu +updatedAt: Güncellendi +saveConfirm: Kaydet? +registry: Kayıt +currentVersion: Şuanki Sürüm +accountDeletionInProgress: Hesap silme şu anda devam ediyor +unresolved: Çözülmedi +newVersionOfClientAvailable: Yeni istemci sürümü mevcut. +shareWithNote: Gönderi ile paylaş +whatIsNew: Değişiklikleri göster +translate: Çevir +breakFollow: Takipçiyi sil +breakFollowConfirm: Takipçiyi kaldırmak istediğinizden emin misiniz? +unfollowConfirm: "{name} kullanıcısını takip etmeyi bırakmak istediğinizden emin misiniz?" +importRequested: Bir içe aktarma isteğinde bulundunuz. Bu biraz zaman alabilir. +somethingHappened: Bir hata ile karşılaşıldı +retry: Tekrar Dene +youShouldUpgradeClient: Bu sayfayı görüntülemek için, lütfen istemcinizi yenileyin. +reactionSetting: Tepki seçicide gösterilecek tepkiler +unmarkAsSensitive: NSFW (Müstehcen İçerik) işaretini kaldır +enterFileName: Dosya adı gir +noJobs: Hiçbir iş yok +instanceFollowing: Sunucuda takip ediliyor +instanceFollowers: Sunucunun takipçileri +currentPassword: Şu anki şifre +newPassword: Yeni şifre +saved: Kaydedildi +uploadFromUrlDescription: Yüklemek istediğiniz dosyanın URL'si +noMoreHistory: Başka geçmiş yok +startMessaging: Yeni sohbet oluştur +manageGroups: Grupları düzenle +nUsersRead: '{n} tarafından okundu' +images: Görseller +birthday: Doğum günü +light: Aydınlık +dark: Karanlık +lightThemes: Aydınlık temalar +selectFiles: Dosyalar seç +selectFolders: Klasörleri seç +renameFile: Dosyayı yeniden adlandır +folderName: Klasör adı +createFolder: Klasör oluştur +copyUrl: URL'yi Kopyala +maintainerName: Sahibi +maintainerEmail: Sahibinin e-postası +tosUrl: Kullanım Koşulları URL'si +monthX: '{month}' +basicInfo: Kısa bilgi +pinnedUsers: Sabitlenmiş kullanıcılar +manageAntennas: Antenleri Düzenle +name: İsim +silence: Sustur +unsilence: Susturmayı geri al +exploreUsersCount: '{count} Kullanıcı var' +exploreFediverse: Fediversi keşfet +popularTags: Popüler etiketler +close: Kapat +group: Grup +text: Yazı +checking: Doğrulanıyor... +tooLong: Çok uzun +weakPassword: Zayıf şifre +normalPassword: Ortalama şifre +disableDrawer: Çekmece tarzı menüler kullanmayın +youHaveNoGroups: Grupların yok +joinOrCreateGroup: Bir gruba davet edil veya kendininkini oluştur. +regenerate: Yeniden Oluştur +fontSize: Yazı boyutu +noFollowRequests: Bekleyen takip isteğiniz yok +openImageInNewTab: Resmi yeni sekmede aç +useObjectStorage: Object Storage kullan +objectStorageUseProxy: Proxy üzerinden bağlan +installedDate: Yetkilendirilme tarihi +scratchpad: Karalama Defteri +deleteAllFiles: Tüm dosyaları isl +useCw: İçeriği gizle +plugins: Eklentiler +manage: Yönetmek +preferencesBackups: Tercih yedekleri +generateAccessToken: Erişim tokeni oluştur +enableEmail: E-posta dağıtımını etkinleştir +regenerateLoginToken: Giriş tokenini yeniden oluştur +regenerateLoginTokenDescription: Oturum açma sırasında dahili olarak kullanılan belirteci + yeniden oluşturur. Normalde bu eylem gerekli değildir. Yeniden oluşturulursa, tüm + cihazların oturumu kapatılacaktır. +followersCount: Takipçi sayısı +yes: Evet +lockedAccountInfo: Gönderi görünürlüğünüzü "Yalnızca takipçiler" olarak ayarlamazsanız, + takipçilerin manuel olarak onaylanmasını isteseniz bile gönderileriniz herkes tarafından + görülebilir. +unlikeConfirm: Beğeniyi kaldırmak istiyor musunuz? +notSpecifiedMentionWarning: Bu gönderi, alıcı olarak dahil edilmeyen kullanıcılardan + bahsetmektedir +hideOnlineStatus: Çevrimiçi bilgisini gizle +hideOnlineStatusDescription: Çevrimiçi durumunuzu gizlemek, arama gibi bazı özelliklerin + rahatlığını azaltır. +botProtection: Bot Koruması +selectAccount: Hesap seç +recentPosts: En son sayfalar +high: Yüksek +middle: Orta +secureModeInfo: Diğer sunuculardan talepte bulunurken kanıtlamadan geri göndermeyiniz. +previewNoteText: Önizlemeyi göster +customCss: Özel CSS +global: Global +makeReactionsPublic: Tepki geçmişini herkese açık olarak ayarla +clickToFinishEmailVerification: Mail doğrulamasını tamamlamak için lütfen [{ok}]'a + tıklayın. +overridedDeviceKind: Cihaz tipi +smartphone: Akıllı telefon +tablet: Tablet +auto: Otomatik +tenMinutes: 10 dakika +recentNDays: Son {n} gün +noEmailServerWarning: Mail sunucusu ayarlanmadı. +thereIsUnresolvedAbuseReportWarning: Çözülmemiş raporlar var. +statusbar: Durum çubuğu +pleaseSelect: Bir seçenek seçin +lastActiveDate: Son kullanılan +reverse: Tersi +logoutConfirm: Gerçekten oturum kapatılsın mı? +type: Tip +speed: Hız +slow: Yavaş +activeEmailValidationDescription: Tek kullanımlık adreslerin kontrol edilmesi ve gerçekten + iletişim kurup kurulamayacağına göre e-posta adreslerinin daha sıkı doğrulanmasını + sağlar. İşaretlenmediğinde, yalnızca e-postanın biçimi doğrulanır. +move: Taşı +defaultReaction: Giden ve gelen gönderiler için varsayılan emoji tepkisi +youGotNewFollower: takip etti +receiveFollowRequest: Takip isteği alındı +followRequestAccepted: Takip isteği onaylandı +mention: Bahset +download: İndir +lists: Listeler +noLists: Hiç listen yok +cantRenote: Bu gönderi desteklenemez. +cantReRenote: Bir destek tekrardan desteklenemez. +mute: Sustur +block: Engelle +editWidgetsExit: Tamamlandı +customEmojis: Özel Tepki +cpuAndMemory: İşlemci ve Bellek +selectInstance: Sunucu seç +instances: Sunucular +silencedInstancesDescription: Susturmak istediğiniz sunucuların domainlerini listeleyin. + Listelenen sunuculardaki hesaplar "Sessiz" olarak değerlendirilir, yalnızca takip + istekleri yapabilir ve takip edilmediği takdirde yerel hesaplardan bahsedemez. Bu, + engellenen sunucuları etkilemeyecektir. +muteAndBlock: Susturmalar ve Engeller +noteDeleteConfirm: Bu gönderiyi silmek istediğine emin misin? +resetAreYouSure: Gerçekten sıfırla? +remoteUserCaution: Uzak kullanıcılardan gelen bilgiler eksik olabilir. +yearsOld: '{age} yaşında' +removed: Başarıyla silindi +reject: Reddet +unwatch: İzlemeyi bırak +accept: Kabul et +normal: Normal +thisMonth: Ay +enableRecaptcha: reCAPTCHA'yı Aktif Et +antennas: Antenler +recaptchaSiteKey: Site anahtarı +withFileAntenna: Sadece dosyalı gönderiler +antennaInstancesDescription: Satır başına bir sunucu listeleyin +moderator: Moderatör +moderation: Moderasyon +lastUsed: En son kullanılan +unregister: Kaydı sil +passwordLessLogin: Şifresiz giriş +uploadFolder: Yüklemeler için varsayılan klasör +markAsReadAllUnreadNotes: Tüm gönderileri okundu olarak işaretle +notFound: Bulunamadı +groups: Gruplar +quoteQuestion: Alıntı olarak eklensin mi? +signinRequired: Lütfen devam etmeden önce kayıt olun +noMessagesYet: Şuana kadar mesaj yok +newMessageExists: Yeni mesaj yok +invitations: Davetler +invitationCode: Davet kodu +signinWith: '{x} ile giriş yap' +veryStrongPassword: Güçlü şifre +passwordNotMatched: Uyuşmuyor +signinFailed: Giriş yapılamadı. Şifre ve ya kullanıcı adı yanlış. +tapSecurityKey: Güvenlik anahtarınıza dokunun +or: veya +noHistory: Geçmiş bulunamadı +language: Dil +clientSettings: İstemci Ayarları +accountSettings: Hesap Ayarları +listen: Dinle +chooseEmoji: Emoji seç +promotion: Terfi Edildi +nothing: Burada görüntülenecek bir şey yok +lastUsedDate: Son kullanılma tarihi +updateRemoteUser: Uzak kullanıcı bilgilerini güncelle +width: Genişlik +height: Uzunluk +permission: İzinler +email: Mail +smtpSecureInfo: STARTTLS kullanırken bunu kapatın +alwaysMarkSensitive: Varsayılan olarak NSFW olarak işaretle +noteFavoritesCount: İşaretlenen gönderilerin sayısı +pageLikesCount: Beğenilen Sayfaların sayısı +duplicate: Kopyasını Oluştur +clearCache: Önbelleği Temizle +onlineUsersCount: '{n} kullanıcı aktif' +nUsers: '{n} Kullanıcı' +nNotes: '{n} Gönderi' +useReactionPickerForContextMenu: Sağ tık ile tepki seçiciyi aç +typingUsers: '{users} yazıyor' +jumpToSpecifiedDate: Spesifik tarihe atla +showingPastTimeline: Şuan eski bir zaman çizelgesini görüntülüyorsunuz +clear: Temizle +fullView: Tam görünüm +emailNotConfiguredWarning: Mail adresi seçilmedi. +privateMode: Özel Mod +fast: Hızlı +learnMore: Daha fazla bilgi edin +localOnly: Sadece yerel +delayed: Ertelenmiş +useGlobalSetting: Global ayaralrı kullan +switchAccount: Hesap değiştir +notRecommended: Tavsiye edilmiyor +onlineStatus: Çevrimiçi bilgisi +active: Aktif +instanceBlocking: Federasyon Yönetmek +enabled: Aktif +disabled: Deaktif +quickAction: Hızlı işlemler +configure: Yapılandır +blockedInstances: Engellenmiş Sunucular +silencedInstances: Susturulmuş Sunucular +lookup: Görüntüle +inputNewFolderName: Yeni klasör ismi gir +noteOf: Gönderi {user} tarafından +onlyOneFileCanBeAttached: Bir mesaja sadece 1 dosya ekleyebilirsin +install: İndir +uninstall: kALDIR +send: Gönder +noCrawleDescription: Harici arama motorlarından içeriğinizi endekslememesini isteyin. +emailNotification: Mail bildirimleri +goBack: Geri +online: Çevrimiçi +translatedFrom: "{x}'den çevrildi" +cropImage: Resmi kırp +deleteAccount: Hesabı Sil +navbar: Gezinti çubuğu +account: Hesap +instanceDefaultThemeDescription: Tema kodunu nesne biçiminde girin. +alt: ALT +mutePeriod: Sessiz süresi +indefinitely: Kalıcı olarak +oneHour: Bir saat +oneWeek: Bir hafta +colored: Renkli +sensitiveMediaDetection: Resim NSFW Belirleme +subscribePushNotification: Push bildirimlerini aktif et +pushNotificationAlreadySubscribed: Push bildirimler zaten açık +sendPushNotificationReadMessage: İlgili bildirimler veya mesajlar okunduktan sonra + push bildirimlerini silin +sendPushNotificationReadMessageCaption: Kısa bir süre için "{emptyPushNotificationMessage}" + metnini içeren bir bildirim görüntülenecektir. Bu, mümkünse cihazınızın pil kullanımını + artırabilir. +enterSendsMessage: Mesaj göndermek için Mesajlaşma'da Geri Dön'e basın (Ctrl + Return) +customMOTDDescription: Bir kullanıcı sayfayı her yüklediğinde/yeniden yüklediğinde + rastgele gösterilecek satır sonlarıyla ayrılmış MOTD (açılış ekranı) için özel mesajlar. +customSplashIconsDescription: Bir kullanıcı sayfayı her yüklediğinde/yeniden yüklediğinde + rastgele gösterilecek satır sonlarıyla ayrılmış özel açılış ekranı simgeleri için + URL'ler. Lütfen resimlerin statik bir URL'de olduğundan ve tercihen tümü 192x192 + olarak yeniden boyutlandırıldığından emin olun. +updateAvailable: Bir güncelleme mevcut olabilir! +splash: Açılış Ekranı +moveTo: Şimdiki hesabını yeni bir hesaba taşı +swipeOnMobile: Sayfalar arasında kaydırmaya izin ver +swipeOnDesktop: Masaüstünde mobil stil kaydırmaya izin ver +migration: Taşıma +moveAccount: Hesabını taşı! +moveFrom: Daha eski bir hesaptan bu hesaba taşıyın +moveFromLabel: 'Taşındığınız hesap:' +importAndExport: İçeri/Dışarı Aktar +manageLists: Listeleri düzenle +error: Hata +pageLoadError: Sayfayı yüklerken bir hata ile karşılaşıldı. +serverIsDead: Sunucu yanıt vermiyor. Biraz bekleyip tekrar deneyin. +defaultNoteVisibility: Varsayılan görünürlük +follow: Takip et +reactionSettingDescription2: Yeniden sıralamak için sürükleyin, silmek için tıklayın, + eklemek için "+"ya basın. +you: Sen +clickToShow: Görmek için tıkla +sensitive: NSFW (Müstehcen İçerik) +add: Ekle +reaction: Tepkiler +markAsSensitive: NSFW (Müstehcen İçerik) olarak işaretle +unblock: Engeli Kaldır +addAccount: Hesap ekle +network: İnternet +disk: Depolama +instanceInfo: Sunucu Bilgisi +statistics: İstatistikler +hiddenTagsDescription: Trendlerden gizlemek ve keşfetmek istediğiniz etiketlerin (# + olmadan) etiketlerini listeleyin. Gizli etiketler başka yollarla keşfedilebilir. +mutedUsers: Susturulmuş kullanıcılar +uploadFromUrlMayTakeTime: Yüklemenin tamamlanması zaman alabilir. +activity: Aktivite +theme: Temalar +themeForLightMode: Aydınlık modda kullanmak için temalar +reloadConfirm: Zaman çizelgesini yenilemek ister misiniz? +instanceName: Sunucu adı +circularReferenceFolder: Hedef klasör, taşımak istediğiniz klasörün bir alt klasörüdür. +instanceDescription: Sunucu açıklaması +driveCapacityPerLocalAccount: Kullanıcı başı Drive kapasitesi +driveCapacityPerRemoteAccount: Uzak kullanıcı başı Drive kapasitesi +inMb: Megabayt cinsinden +pinnedClipId: Sabitlenecek klibin ID'si +withFiles: Dosya içerenler +recentlyRegisteredUsers: Yeni katılmış kullanıcılar +recentlyDiscoveredUsers: Yeni keşfedilmiş kullanıcılar +nUsersMentioned: '{n} kullanıcı tarafından bahsedildi' +securityKey: Güvenlik Anahtarı +title: Başlık +total: Toplam +sounds: Sesler +objectStorageRegionDesc: "'xx-east-1' gibi bir bölge belirtin. Hizmetiniz bölgeler + arasında ayrım yapmıyorsa, bunu boş bırakın veya 'us-east-1' girin." +objectStorageUseSSL: SSL Kullan +popout: Açılır Pencere +volume: Ses Kuvveti +showInPage: Sayfada göster +masterVolume: Ana ses +undeck: Desteden çık +useBlurEffectForModal: Modallar için bulanıklık efekti uygula +leaveConfirm: Kaydedilmemiş değişiklikler var. Devam etmek istiyor musunuz? +testEmail: Email dağıtımını test et +wordMute: Kelime susturması +userSaysSomething: '{name} bir şey söyledi' +channel: Kanallar +create: Oluştur +useGlobalSettingDesc: Açıksa, hesap bildirim ayarlarınız kullanılacaktır. Kapatılırsa, + bireysel yapılandırmalar yapılabilir. +setMultipleBySeparatingWithSpace: Birden çok girişi boşluklarla ayırın. +fileIdOrUrl: Dosya ID veya URL'si +behavior: Davranış +abuseReported: Raporunuz gönderildi. Teşekkürler. +reporteeOrigin: Ana Raporcu +reporterOrigin: Ana Rapor Eden +defaultNavigationBehaviour: Varsayılan gezinme davranışı +editTheseSettingsMayBreakAccount: Bunları düzenlemek hesabınıza zarar verebilir. +renotedCount: Alınan yükseltme sayısı +driveFilesCount: Drive dosya sayısı +deleteConfirm: Sil? +invalidValue: Geçersiz değer. +instanceSecurity: Sunucu Güvenliği +searchResult: Arama sonuçları +useBlurEffect: Kullanıcı arayüzünde bulanıklaştırma efektleri kullanın +misskeyUpdated: Firefish güncellendi! +lastCommunication: Son iletişim +itsOn: Etkinleştirilmiş +emailRequiredForSignup: Kayıt olmak için mail gerekiyor +leaveGroup: Gruptan ayrıl +useDrawerReactionPickerForMobile: Reaksiyon seçiciyi mobil cihazda çekmece olarak + göster +leaveGroupConfirm: '"{name}"den ayrılmak istediğinizden emin misiniz?' +instanceDefaultLightTheme: Sunucu genelinde varsayılan aydınlık tema +document: Dökümanlar +numberOfPageCacheDescription: Bu sayının arttırılması, kullanıcılar için kolaylık + sağlayacaktır ancak daha fazla sunucu yükünün yanı sıra daha fazla bellek kullanılmasına + neden olacaktır. +refreshInterval: 'Güncelleme aralığı ' +label: Etiket +replayTutorial: Eğiticiyi tekrar oynat +moveAccountDescription: Bu süreç geri döndürülemez. Taşımadan önce yeni hesabınızda + bu hesap için bir takma ad ayarladığınızdan emin olun. Lütfen @person@server.com + şeklinde biçimlendirilmiş hesabın etiketini girin +emojis: Emoji +flagAsCat: Kedi misin? 😺 +selectChannel: Bir kanal seç +emojiName: Emoji adı +showOnRemote: Orijinal sayfayı aç +flagSpeakAsCatDescription: Gönderileriniz kedi modundayken miyavdirilecektir +flagShowTimelineReplies: Yanıtları akışta göster +silenceThisInstance: Bu sunucuyu sustur +proxyAccountDescription: Vekil hesabı, belirli koşullar altında kullanıcılar için + uzaktan takipçi işlevi gören bir hesaptır. Örneğin, bir kullanıcı listeye bir uzak + kullanıcı eklediğinde, o kullanıcıyı takip eden yerel bir kullanıcı yoksa uzak kullanıcının + etkinliği sunucuya teslim edilmeyecektir, bu nedenle onun yerine vekil hesabı takip + edilecektir. +clearQueueConfirmTitle: Bu sırayı temizlemek istediğine emin misin? +software: Yazılım +version: Sürüm +federating: Federasyon +preview: Ön izleme +retypedNotMatch: Girdiler uyuşmuyor. +attachFile: Dosya ekle +noSuchUser: Kullanıcı bulunamadı +removeAreYouSure: '"{x}"i kaldırmak istediğinize emin misiniz?' +keepOriginalUploading: Orjinal resmi sakla +messageRead: Oku +deleteAreYouSure: '"{x}"i silmek istediğinize emin misiniz?' +messaging: Sohbet +upload: Yükle +fromUrl: URL'den +agreeTo: '{0} kabul ediyorum' +tos: Kullanım Koşulları +drive: Sürücü +selectFolder: Klasör seç +inputNewFileName: Yeni dosya ismi gir +whenServerDisconnected: Sunucuyla bağlantı kesildiğinde +avatar: Avatar +rename: Yeniden Adlandır +banner: Banner +nsfw: NSFW +doNothing: Görmezden Gel +watch: İzle +registration: Kayıt +hcaptcha: hCaptcha +pinnedNotes: Sabitlenmiş gönderiler +hcaptchaSiteKey: Site anahtarı +hcaptchaSecretKey: Gizli Anahtar +antennaSource: Anten kaynağı +antennaKeywords: Dinlenecek anahtar kelimeler +antennaExcludeKeywords: Hariç tutulacak anahtar kelimeler +antennaKeywordsDescription: AND koşulu için boşluklarla veya OR koşulu için satır + sonlarıyla ayırın. +caseSensitive: Büyük harf duyarlı +enableServiceworker: Tarayıcınız için Anlık Bildirimleri etkinleştirin +unsilenceConfirm: Bu kullanıcının susturma işlemini geri almak istediğinizden emin + misiniz? +userList: Listeler +antennaUsersDescription: Satır başına bir kullanıcı listeleyin +administrator: Yönetici +token: Token +cacheClear: Önbelleği temizle +createGroup: Grup oluştur +newPasswordIs: Yeni şifren "{password}" +share: Paylaş +enable: Etkinleştir +groupName: Grup adı +available: Mevcut +unavailable: Mevcut değil +weekOverWeekChanges: Geçen haftadan beri değişiklikler +usernameInvalidFormat: Büyük ve küçük harfleri, sayıları ve alt çizgileri kullanabilirsiniz. +tooShort: Çok kısa +passwordMatched: Uyuşuyor +dayOverDayChanges: Dünden beri değişiklikler +appearance: Görünüm +objectStorageBaseUrl: Ana URL +objectStoragePrefix: Prefix +unableToProcess: Operasyon tamamlanamadı +deleteAllFilesConfirm: Tüm dosyaları silmek istediğine emin misin? +disablePagesScript: Sayfalardan AiScript'i deaktive et +expandOnNoteClick: Gönderileri basarak aç +expandOnNoteClickDesc: Kapatılırsa, gönderileri hala menüden veya sağtıklayarak açabilirsin. +removeAllFollowingDescription: Bunu gerçekleştirmek, {host} üzerindeki tüm hesapları + takip etmeyi bırakır. +deck: Deste +pluginTokenRequestedDescription: Bu eklenti, burada ayarlanan izinleri kullanabilecektir. +notificationType: Bildirim tipi +channelFederationWarn: Kanallar başka sunuculara federe edilmiyor +forwardReport: Raporu uzak sunucuya ilet +openInNewTab: Yeni sekmede aç +clip: Ataç +optional: Opsiyonel +manageAccessTokens: Erişim tokenlerini düzenle +clipsDesc: Ataçlar, paylaşılabilen kategorize yer imleri gibidir. Tek tek gönderiler + menüsünden ataçlar oluşturabilirsiniz. +makeExplorable: Hesabını "Keşfet" 'te göster +accountInfo: Hesap Bilgisi +makeExplorableDescription: Bunu kapatırsanız, hesabınız "Keşfet" bölümünde görünmez. +saveAs: Olarak kaydet... +advanced: Gelişmiş +value: Değer +youAreRunningUpToDateClient: En son istemci sürümünü kullanıyorsunuz. +accounts: Hesaplar +switch: Değiştir +popularPosts: Popüler sayfalar +inChannelSearch: Kanalda ara +administration: Yönetim +ads: Topluluk bannerları +low: Düşük +seperateRenoteQuote: Ayrı destek ve fiyat teklifi düğmeleri +sent: Gönderildi +customMOTD: Özel MOTD +showUpdates: Firefish güncellendiğinde bir açılır pencere göster +logoImageUrl: Logo resim URL'si +showAdminUpdates: Yeni bir Firefish sürümünün mevcut olduğunu belirtin (yalnızca yönetici) +newer: asla +older: daha eski +exportRequested: Bir dışarı aktarma talebinde bulundunuz. Bu biraz zaman alabilir. + Tamamlandığında Drive'ınıza eklenecektir. +notes: Gönderiler +following: Takip Edilenler +followers: Takipçiler +followsYou: Seni takip ediyor +pageLoadErrorDescription: Bu problem genelde ağ hataları veya tarayıcının önbelleğinden + kaynaklanır. Önbelleği temizlemeyi deneyin ve biraz bekledikten sonra tekrar deneyin. +quote: Alıntıla +pinnedNote: Sabitlenmiş gönderi +renote: Destekle +unrenote: Desteklemeyi geri al +emojiUrl: Emoji URL'si +suspendConfirm: Bu hesabı askıya almak istediğinize emin misiniz? +addEmoji: Ekle +autoAcceptFollowed: Takip ettiğiniz kullanıcıların takip isteklerini otomatik olarak + onaylayın +general: Genel +accountMoved: 'Bu kullanıcı yeni bir hesaba taşındı:' +wallpaper: Arkaplan +searchWith: 'Arat: {q}' +youHaveNoLists: Hiçbir listen yok +followConfirm: '{name} kullanıcısını takip etmek istediğine emin misin?' +metadata: Üstveri +monitor: Monitör +jobQueue: İş Sırası +noUsers: Kullanıcılar bulunamadı +noInstances: Sunucular bulunamadı +pinLimitExceeded: Daha fazla gönderi sabitleyemezsin +defaultValueIs: 'Varsayılan: {value}' +noCustomEmojis: Emoji yok +blocked: Engellenmiş +default: Varsayılan +all: Tümü +subscribing: Abone Olunuyor +publishing: Yayınlanıyor +notResponding: Cevap vermiyor +more: Daha fazla! +featured: Önerilen +usernameOrUserId: Kullanıcı adı veya kullanıcı id'si +fromDrive: Drive'dan +uploadFromUrl: URL'den yükle +announcements: Duyurular +explore: Keşfet +imageUrl: Resim URL'si +thisYear: Yıl +deleteFolder: Bu klasörü sil +addFile: Dosya ekle +dayX: '{day}' +enableLocalTimeline: Yerel zaman çizgisini aktif et +enableGlobalTimeline: Global zaman çizgisini aktif et +enableRegistration: Yeni kullanıcı kaydını aktif et +invite: Davet et +bannerUrl: Banner resmi URL'si +backgroundImageUrl: Arkaplan URL'si +recaptcha: reCAPTCHA +iconUrl: İkon URL'si +recaptchaSecretKey: Gizli anahtar +avoidMultiCaptchaConfirm: Birden fazla Captcha sistemi kullanmak aralarında çakışmaya + neden olabilir. Şu anda etkin olan diğer Captcha sistemlerini devre dışı bırakmak + ister misiniz? Etkin kalmalarını istiyorsanız, iptal düğmesine basın. +aboutFirefish: Firefish Hakkında +popularUsers: Popüler kullanıcılar +notFoundDescription: Bu URL'ye karşılık gelen sayfa bulunamadı. +reduceUiAnimation: Arayüz animasyonlarını azalt +markAsReadAllNotifications: Tüm bildirimleri okundu olarak işaretle +markAsReadAllTalkMessages: Tüm mesajları okundu olarak işaretle +inviteToGroup: Gruba davet et +quoteAttached: Alıntıla +useOsNativeEmojis: Sistem Emojilerini Kullan +signinHistory: Giriş geçmişleri +disableAnimatedMfm: Animasyonlu MFM'yi devre dışı bırak +uiLanguage: Arayüz dili +groupInvited: Bir gruba davet edildin +createAccount: Hesap Oluştur +existingAccount: Var olan hesap +aboutX: '{x} Hakkında' +doing: İşleniyor... +category: Kategori +deleteAll: Hepsini sil +objectStorageEndpoint: Uç noktası +output: Çıkış +userSuspended: Bu kullanıcı askıya alındı. +userSilenced: Bu kullanıcı susturuldu. +yourAccountSuspendedTitle: Bu hesap askıya alındı +relays: Röleler +inboxUrl: Gelen URL +menu: Menü +divider: Ayraç +addItem: Öğe Ekle +enableInfiniteScroll: Otomatik olarak daha fazla yükle +enablePlayer: Video oynatıcıyı aç +disablePlayer: Video oynatıcıyı kapat +expandTweet: Tweeti Büyüt +large: Büyük +medium: Orta +smtpConfig: SMTP Sunucusu Ayarları +smtpHost: Adres +emailServer: Mail sunucusu +edit: Düzenle +emailAddress: Mail adresi +smtpPort: Port +emptyToDisableSmtpAuth: SMTP doğrulamasını kapatmak için kullanıcı adı ve şifreyi + boş bırakın +makeActive: Aktif +display: Gösterim +copy: Kopyala +metrics: Metrikler +pollVotesCount: Gönderilen oylama sayısı +loadRawImages: Küçük resimleri göstermek yerine orijinal resimleri yükleyin +switchUi: Düzen +sentReactionsCount: Gönderilen tepki sayısı +receivedReactionsCount: Alınan tepki sayısı +pollVotedCount: Alınan oylama sayısı +pageLikedCount: Beğeni alan Sayfa sayısı +contact: Bağlantı +useSystemFont: Sistemin varsayılan yazı tipini kullan +usageAmount: Kullanım +inUse: Kullanılan +userInfo: Kullanıcı bilgisi +unknown: Bilinmiyor +customCssWarn: Bu ayar yalnızca ne işe yaradığını biliyorsanız kullanılmalıdır. Uygun + olmayan değerlerin girilmesi, istemcinin normal şekilde çalışmamasına neden olabilir. +memo: Not +allowedInstancesDescription: Her biri yeni bir satırla ayrılmış, federasyon için beyaz + listeye eklenecek sunucu ana bilgisayarları (yalnızca özel modda geçerlidir). +expiration: Bitiş +troubleshooting: Sorun giderme +usernameInfo: Hesabınızı bu sunucudaki diğerlerinden ayıran bir ad. Alfabeyi (a~z, + A~Z), rakamları (0~9) veya alt çizgileri (_) kullanabilirsiniz. Kullanıcı adları + daha sonra değiştirilemez. +size: Boyut +numberOfColumn: Sütun Sayısı +driveCapOverrideCaption: 0 veya daha düşük bir değer girerek kapasiteyi varsayılana + sıfırlayın. +requireAdminForView: Bunu görüntülemek için bir yönetici hesabıyla oturum açmalısınız. +userSaysSomethingReasonReply: '{name}, {reason} içeren bir gönderiye cevap verdi' +overview: Genel Bakış +logs: Günlükler +database: Veri Tabanı +reportAbuseOf: '{name} kullanıcısını raporla' +openInSideView: Yan görünümde aç +createNew: Yeni oluştur +createNewClip: Yeni ataç oluştur +unclip: Atacı Kaldır +notesCount: Gönderi sayısı +repliesCount: Gönderilen yanıt sayısı +renotesCount: Göndeirlen yükseltme sayısı +repliedCount: Alınan yanıt sayısı +driveUsage: Drive kullanımı +noCrawle: Tarayıcı dizine eklemeyi reddet +needReloadToApply: Bunun yansıtılması için bir yeniden yükleme gereklidir. +showTitlebar: Başlık çubuğunu göster +latestVersion: En Son Sürüm +capacity: Kapasite +userPagePinTip: Tek tek gönderiler menüsünden "Profile sabitle"yi seçerek gönderileri + burada görüntüleyebilirsiniz. +offline: Çevrimdışı +priority: Öncelik +ratio: Oran +secureMode: Güvenli Mod (Yetkili Getirme) +aiChanMode: Klasik kullanıcı arayüzünde Ai-chan +recommended: Önerilen +received: Alındı +classic: Ortalanmış +muteThread: Konuyu sessize al +deleteAccountConfirm: Bu hesap geri alınamaz bir şekilde silinecektir. İlerlemek istiyor + musunuz? +hide: Gizle +pubSub: Pub/Sub Hesapları +filter: Filtre +controlPanel: Kontrol Paneli +continueThread: Konuya devam et +incorrectPassword: Yanlış şifre. +voteConfirm: '"{choice}" için oyunuzu onaylıyor musunuz?' +failedToFetchAccountInformation: Hesap bilgileri getirilemedi +rateLimitExceeded: Hız limiti aşıldı +renotedBy: '{user} destekledi' +host: Host +objectStorage: Nesne Depolaması +objectStorageUseSSLDesc: API bağlantıları için HTTPS kullanmayacaksanız bunu kapatın +objectStorageUseProxyDesc: API bağlantıları için Proxy kullanmayacaksanız bunu kapatın +objectStorageSetPublicRead: Yüklendiğinde "public-read" kullan +serverLogs: Sunucu günlüğü +abuseReports: Raporlar +reportAbuse: Rapor +verificationEmailSent: Bir doğrulama maili gönderildi. Doğrulamayı tamamlamak için + lütfen verilen bağlantıyı takip edin. +hashtags: Etiketler +resolved: Çözüldü +flagShowTimelineRepliesDescription: Açıksa, kullanıcıların akıştaki diğer kullanıcıların + gönderilerine verdiği yanıtları gösterir. +clearQueueConfirmText: Kuyrukta kalan teslim edilmemiş gönderiler birleştirilmeyecektir. + Genellikle bu işleme gerek yoktur. +image: Resim +video: Video +showMore: Daha Fazla +showLess: Kapat +selectAntenna: Anten seç +selectWidget: Bir widget seç +unsuspendConfirm: Bu hesabın askıya almasını kaldırmak istediğinize emin misiniz? +selectList: Liste seç +editWidgets: Widget'ları düzenle +showEmojisInReactionNotifications: Tepki bildirimlerinde emojileri göster +renoteMute: Desteklemeleri sustur +renoteUnmute: Desteklemelerde ki susturmayı kaldır +loginFailed: Giriş yapılamadı +proxyAccount: Vekil Hesap +selectUser: Kullanıcı seç +recipient: Alıcı(lar) +annotation: Yorumlar +federation: Federasyon +registeredAt: Kayıtlı +latestRequestSentAt: Gönderilen son istek +latestRequestReceivedAt: Alınan son istek +latestStatus: Son durum +storageUsage: Depolama kullanımı +charts: Grafikler +perHour: Saat Başı +perDay: Gün Başı +stopActivityDelivery: Etkinlik göndermeyi durdur +blockThisInstance: Bu sunucuyu engelle +themeForDarkMode: Karanlık modda kullanmak için temalar +fileName: Dosya adı +selectFile: Dosya seç +emptyDrive: Drive'ın boş +promote: Terfi +numberOfDays: Gün sayısı +hideThisNote: Bu gönderiyi gizle +file: Dosya +enableEmojiReactions: Emoji tepkilerini aç +cw: İçerik uyarısı +makeFollowManuallyApprove: Onayınızı gerektiren takip istekleri +today: Bugün +enableRecommendedTimeline: Tavsiye edilen zaman çizgisini aktive et +state: Durum +sort: Sırala +script: Skript +keepCw: İçerik uyarılarını sakla +manageAccounts: Hesapları Düzenle +makeReactionsPublicDescription: Bu, tüm geçmiş tepkilerinizin listesini herkesin görebileceği + bir hale getirecektir. +unmuteThread: İleti dizisinin sesini aç +ffVisibility: Takipler/Takipçiler Görünürlüğü +reflectMayTakeTime: Bunun yansıması biraz zaman alabilir. +cropImageAsk: Bu resmi kırpmak istediğinize emin misiniz? +check: Kontrol Et +driveCapOverrideLabel: Bu kullanıcı için drive kapasitesini değiştirin +numberOfPageCache: Önbelleğe alınan sayfa sayısı +license: Lisans +xl: XL +notificationSetting: Bildirim ayarları +fillAbuseReportDescription: Lütfen bu raporla ilgili ayrıntıları doldurun. Belirli + bir gönderiyle ilgiliyse, lütfen URL'sini ekleyin. +forwardReportIsAnonymous: Uzak sunucuda, hesabınız yerine raportör olarak anonim bir + sistem hesabı görüntülenecektir. +abuseMarkAsResolved: Raporu çözüldü olarak işaretle +instanceTicker: Göndeirlerdeki sunucu bilgisi +waitingFor: '{x} bekleniyor' +random: Rastgele +public: Herkese açık +i18nInfo: Firefish, gönüllüler tarafından çeşitli dillere çevriliyor. {link} adresinden + yardımcı olabilirsiniz. +disableShowingAnimatedImages: Animasyonlu görüntüleri oynatma +clips: Ataçlar +experimentalFeatures: Deneysel özellikler +developer: Geliştirici +left: Sol +center: Merkez +wide: Geniş +narrow: Dar +reloadToApplySetting: Bu ayar yalnızca bir sayfa yeniden yüklendikten sonra geçerli + olacaktır. Şimdi yeniden yüklensin mi? +editCode: Kodu düzenle +apply: Uygula +receiveAnnouncementFromInstance: Bu sunucudan bildirimleri al +publish: Paylaş +quitFullView: Tam görünümden çık +addDescription: Açıklama ekle +info: Hakkında +noMaintainerInformationWarning: Yönetici bilgileri yapılandırılmadı. +noBotProtectionWarning: Bot koruması yapılandırılmamış. +postToGallery: Yeni galeri gönderisi oluştur +gallery: Galeri +privateModeInfo: Etkinleştirildiğinde, yalnızca beyaz listedeki sunucular sunucunuzla + birleşebilir. Tüm gönderiler halktan gizlenecektir. +itsOff: Etkinsizleştirilmiş +ffVisibilityDescription: Kimleri takip ettiğinizi ve kimlerin sizi takip ettiğini + kimlerin görebileceğini yapılandırmanıza izin verir. +welcomeBackWithName: Tekrar hoş geldin {name} +themeColor: Sunucu Kayan Yazı Rengi +audio: Ses +recentNHours: Son {n} saat +isSystemAccount: Bu hesap sistem tarafından oluşturulur ve otomatik olarak işletilir. + Lütfen bu hesabı denetlemeyin, düzenlemeyin, silmeyin veya başka bir şekilde kurcalamayın, + aksi takdirde sunucunuz bozulabilir. +typeToConfirm: Lütfen onaylamak için {x} girin +remoteOnly: Sadece uzak +failedToUpload: Yükleme başarısız +cannotUploadBecauseInappropriate: Bu dosya, bazı bölümleri potansiyel olarak NSFW + olarak algılandığından yüklenemedi. +cannotUploadBecauseNoFreeSpace: Drive kapasitesi yetersiz olduğundan yükleme başarısız + oldu. +cannotUploadBecauseExceedsFileSizeLimit: Bu dosya, izin verilen maksimum boyutu aştığı + için yüklenemedi. +beta: Beta +enableAutoSensitive: Otomatik NSFW İşaretleme +enableAutoSensitiveDescription: Mümkün olduğunda Makine Öğrenimi yoluyla NSFW ortamının + otomatik olarak algılanmasına ve işaretlenmesine olanak tanır. Bu seçenek devre + dışı bırakılsa bile, sunucu çapında etkinleştirilebilir. +shuffle: Karıştır +pushNotification: Push bildirimleri +unsubscribePushNotification: Push bildirimlerini kapat +pushNotificationNotSupported: Tarayıcınız veya sunucunuz push bildirimleri desteklemiyor +caption: Otomatik Açıklama +moveToLabel: 'Taşıyacağın hesap:' +moveFromDescription: Bu, eski hesabınızın bir takma adını belirleyecek ve böylece + o hesaptan bu mevcut hesaba geçebileceksiniz. Bunu eski hesabınızdan taşınmadan + ÖNCE yapın. Lütfen @person@server.com şeklinde biçimlendirilmiş hesabın etiketini + girin +migrationConfirm: "Hesabınızı {account} hesabına taşımak istediğinizden kesinlikle + emin misiniz? Bunu yaptığınızda, geri alamazsınız ve hesabınızı bir daha normal + şekilde kullanamazsınız.\nAyrıca, lütfen bu cari hesabı, taşındığınız hesap olarak + ayarladığınızdan emin olun." +customKaTeXMacro: Özel KaTeX makroları +directNotes: Özel Mesajlar +import: İçeri Aktar +export: Dışarı Aktar +mentions: Bahsetmeler +files: Dosyalar +driveFileDeleteConfirm: '"{name}" dosyasını silmek istediğinizden emin misiniz? Dosyayı + "Ek" olarak içeren tüm gönderilerden kaldırılacaktır.' +createList: Liste oluştur +listsDesc: Listeler, belirtilen kullanıcıların içeriklerini içeren akışlar oluşturmanıza + olanak tanır. Akış sayfasından erişilebilirler. +note: Gönder +enterListName: Liste için isim gir +unfollow: Takipten Çık +privacy: Gizlilik +followRequestPending: Takip isteği bekleniyor +enterEmoji: Bir emoji gir +followRequest: Takip İsteği +followRequests: Takip istekleri +renoted: Desteklendi. +emoji: Emoji +cacheRemoteFiles: Uzak dosyaları önbelleğe al +flagAsBot: Bu hesabı robot olarak işaretle +flagAsBotDescription: Bu hesap bir program tarafından kontrol ediliyorsa bu seçeneği + etkinleştirin. Etkinleştirilirse, diğer geliştiricilerin botlarıyla sonsuz etkileşim + zincirlerinin önlemesi ve Firefish'in dahili sistemlerinin bu hesabı bir bot olarak + ele alacak şekilde ayarlaması için bir işaret görevi görür. +clearQueue: Sırayı Temizle +hiddenTags: Gizlenmiş Etiketler +done: Tamamlandı +processing: İşleniyor +silenced: Susturulmuş +darkThemes: Karanlık temalar +suspended: Askıya Alınmış +keepOriginalUploadingDescription: Orijinal olarak yüklenen görüntüyü olduğu gibi kaydeder. + Kapatılırsa, yükleme sırasında web'de görüntülenecek bir sürüm oluşturulur. +start: Başla +home: Ev +location: Konum +registeredDate: Katılım tarihi +yearX: '{year}' +pages: Sayfalar +antennasDesc: "Antenler, belirlediğiniz kriterlere uyan yeni gönderiler görüntüler!\n +  Zaman çizelgeleri sayfasından erişilebilirler." +notesAndReplies: Gönderiler ve yanıtlar +withReplies: Yanıtları da içerir +connectedTo: Aşağıdaki hesap(lar) bağlı +silenceConfirm: Bu kullanıcıyı susturmak istediğinize emin misiniz? +messagingWithUser: Özel sohbet +resetPassword: Şifreyi sıfırla +registerSecurityKey: Yeni security key tanımla +docSource: Bu dökümanın kaynağı +ascendingOrder: Artan +tags: Etiketler +descendingOrder: Azalan +scratchpadDescription: Karalama defteri, AiScript deneyleri için bir ortam sağlar. + İçinde Firefish ile etkileşime girerek sonuçlarını yazabilir, çalıştırabilir ve + kontrol edebilirsiniz. +local: Yerel +remote: Uzak +addRelay: Röle Ekle +accessibility: Erişilebilirlik +showFeaturedNotesInTimeline: Önerilen gönderileri zaman çizelgesinde göster +objectStorageBaseUrlDesc: "Referans olarak kullanılan URL. İkisinden birini kullanıyorsanız, + CDN veya Proxy'nizin URL'sini belirtin.\nS3 için 'https://.s3.amazonaws.com' + kullanın ve GCS veya eşdeğer hizmetler için 'https://storage.googleapis.com/' + vb. kullanın." +objectStoragePrefixDesc: Dosyalar bu prefix ile dizinler altında saklanacaktır. +objectStorageEndpointDesc: AWS S3 kullanıyorsanız bunu boş bırakın, aksi halde kullandığınız + hizmete bağlı olarak uç noktayı "" veya ":" olarak belirtin. +objectStorageRegion: Region +invisibleNote: Gizli Gönderi +deletedNote: Silinmiş Gönderi +visibility: Görünürlük +poll: Anket +themeEditor: Tema düzenleyicisi +enterFileDescription: Açıklama gir +description: Açıklama +describeFile: Açıklama ekle +system: Sistem +desktop: Masaüstü +confirmToUnclipAlreadyClippedNote: Bu gönderi zaten "{name}" atacının bir parçası. + Bunun yerine onu bu ataçtan kaldırmak istiyor musunuz? +sendErrorReportsDescription: "Açıldığında, bir sorun oluştuğunda ayrıntılı hata bilgileri + Firefish ile paylaşılarak Firefish kalitesinin artırılmasına yardımcı olur.\nBu, + işletim sisteminizin sürümü, kullandığınız tarayıcı, Firefish'deki etkinliğiniz + vb. bilgileri içerecektir." +closeAccount: Hesabı kapat +markAllAsRead: Okunmuş olarak işaretle +allowedInstances: Beyaz Listedeki Sunucular +squareAvatars: Kare avatarları göster +unread: Okunmaımş +instanceDefaultDarkTheme: Sunucu genelinde varsayılan karanlık tema +oneDay: Bir gün +showAds: Topluluk bannerlarını göster +adminCustomCssWarn: Bu ayar yalnızca ne işe yaradığını biliyorsanız kullanılmalıdır. + Yanlış değerler girilmesi, HERKESİN istemcilerinin normal şekilde çalışmamasına + neden olabilir. Lütfen CSS'nizi kullanıcı ayarlarınızda test ederek düzgün çalıştığından + emin olun. +customSplashIcons: Özel açılış ekranı simgeleri (url'ler) +recommendedInstancesDescription: Önerilen zaman çizelgesinde görünmesi için satır + sonlarıyla ayrılmış önerilen sunucular. +recommendedInstances: Önerilen sunucular +enableServerMachineStats: Sunucu donanımı istatistiklerini etkinleştir +_sensitiveMediaDetection: + sensitivityDescription: Hassasiyetin düşürülmesi daha az yanlış tespite yol açarken, + hassasiyeti artırmak daha az tespitin gözden kaçmasına yol açacaktır. + setSensitiveFlagAutomaticallyDescription: Bu seçenek kapatılsa bile dahili algılamanın + sonuçları korunacaktır. + description: Makine Öğrenimi yoluyla NSFW ortamını otomatik olarak tanıyarak sunucu + denetleme çabasını azaltır. Bu, sunucudaki yükü biraz artıracaktır. + sensitivity: Algılama hassasiyeti + analyzeVideos: Videoların analizini etkinleştir + setSensitiveFlagAutomatically: NSFW olarak işaretle + analyzeVideosDescription: Görüntülere ek olarak videoları da analiz eder. Bu, sunucudaki + yükü biraz artıracaktır. +enableIdenticonGeneration: Kimlik oluşturmayı etkinleştir +reactionPickerSkinTone: Tercih edilen emoji cilt tonu +noteId: Gönderi ID +preventAiLearning: AI bot öğrenmesini önleyin +preventAiLearningDescription: Gönderiler ve resimler gibi yüklediğiniz içeriği incelememek + için üçüncü taraf yapay zeka dil modellerini isteyin. +isAdmin: Yönetici +_emailUnavailable: + disposable: Tek kullanımlık mail adresleri kullanılamaz + smtp: Bu mail sunucusu cevap vermiyor + mx: Bu mail sunucusu hatalı + used: Bu mail zaten kullanılıyor + format: Bu mail adresi yanlış +apps: Uygulamalar +showWithSparkles: Parıltılarla göster +showPopup: Kullanıcıları pop-up ile bilgilendirin +silencedWarning: Bu sayfa, bu kullanıcılar yöneticinizin susturduğu sunuculardan olduğu + için gösteriliyor, bu nedenle potansiyel olarak spam olabilirler. +isPatron: Firefish Patronu +youHaveUnreadAnnouncements: Okunmamış duyurularınız var +donationLink: Bağış sayfası linki +neverShow: Birdaha gösterme +remindMeLater: Belki sonra +removeQuote: Alıntıyı sil +removeRecipient: Alıcıyı sil +removeMember: Kullanıcıyı sil +customKaTeXMacroDescription: 'Kolayca matematiksel ifadeler yazmak için makrolar kurun! + Gösterim, LaTeX komut tanımlarına uygundur ve \newcommand{\ name}{content} veya + \newcommand{\name}[argüman sayısı]{content} şeklinde yazılır. Örneğin, \newcommand{\add}[2]{#1 + + #2}, \add{3}{foo} öğesini 3 + foo olarak genişletir. Makro adını çevreleyen süslü + parantezler, yuvarlak veya köşeli parantezler olarak değiştirilebilir. Bu, bağımsız + değişkenler için kullanılan parantezleri etkiler. Satır başına bir (ve yalnızca + bir) makro tanımlanabilir ve satırı tanımın ortasından ayıramazsınız. Geçersiz satırlar + basitçe yoksayılır. Yalnızca basit dizi değiştirme işlevleri desteklenir; koşullu + dallanma gibi gelişmiş söz dizimi burada kullanılamaz.' +enableCustomKaTeXMacro: Özel KaTeX makrolarını aktif et +isLocked: Bu hesabın takip onayları var +isModerator: Moderatör +signupsDisabled: Bu sunucudaki kayıtlar şu anda devre dışı, ancak istediğiniz zaman + başka bir sunucuya kaydolabilirsiniz! Bu sunucu için bir davet kodunuz varsa, lütfen + aşağıya girin. +sendModMail: Moderasyon Bildirimi Gönder +noGraze: Firefish ile çakıştığı için lütfen "Graze for Mastodon" tarayıcı uzantısını + devre dışı bırakın. +isBot: Bu hesap bir bottur +_2fa: + registerTOTP: Doğrulayıcı uygulamasını kaydedin + alreadyRegistered: Zaten bir 2 faktörlü kimlik doğrulama cihazını kaydettiniz. + chromePasskeyNotSupported: Chrome geçiş anahtarları şu anda desteklenmemektedir. + registerSecurityKey: Bir güvenlik veya geçiş anahtarı kaydedin + securityKeyName: Bir anahtar adı girin + removeKey: Güvenlik anahtarını kaldır + removeKeyConfirm: '{name} anahtarı gerçekten silinsin mi?' + token: 2FA Tokeni + step1: Öncelikle, cihazınıza bir kimlik doğrulama uygulaması ({a} veya {b} gibi) + yükleyin. + step2Click: Bu QR koduna tıklamak, 2FA'yı güvenlik anahtarınıza veya telefon kimlik + doğrulayıcı uygulamanıza kaydetmenize olanak tanır. + step3Title: Bir kimlik doğrulama kodu girin + securityKeyNotSupported: Tarayıcınız güvenlik anahtarlarını desteklemiyor. + step2: Ardından, bu ekranda görüntülenen QR kodunu tarayın. + step2Url: "Bir masaüstü programı kullanıyorsanız bu URL'yi de girebilirsiniz:" + step3: Kurulumu tamamlamak için uygulamanız tarafından sağlanan tokeni girin. + step4: Şu andan itibaren, gelecekteki herhangi bir oturum açma denemesi böyle bir + oturum açma tokeni isteyecektir. + securityKeyInfo: Parmak izi veya PIN kimlik doğrulamasının yanı sıra, hesabınızın + güvenliğini daha da artırmak için FIDO2'yi destekleyen donanım güvenlik anahtarları + aracılığıyla kimlik doğrulama ayarlayabilirsiniz. + tapSecurityKey: Güvenlik veya geçiş anahtarını kaydetmek için lütfen tarayıcınızı + takip edin +_poll: + voted: Oylandı + deadlineTime: Zaman + remainingDays: '{d} gün {h} saat kaldı' + remainingHours: '{h} saat {m} dakika kaldı' + remainingSeconds: '{s} saniye kaldı' + remainingMinutes: '{m} dakika {s} saniye kaldı' + noOnlyOneChoice: En az 2 seçenek gerekiyor + noMore: Daha fazla seçenek ekleyemezsin + at: Bitiş... + deadlineDate: Bitiş tarihi + duration: Süre + votesCount: '{n} oy' + expiration: Anketi bitir + totalVotes: toplam {n} oy + closed: Bitti + infinite: Asla + vote: Oyla + showResult: Sonuçları görüntüle + after: "'den sonra bitiş..." + choiceN: Seçenek {n} + canMultipleVote: Birden fazla seçime izin ver +_theme: + code: Tema kodu + description: Açıklama + builtinThemes: Yerleşik temalar + color: Renk + keys: + fgHighlighted: Vurgulanan Metin + infoWarnFg: Uyarı metni + mention: Bahsetme + mentionMe: Bahsetme (Kendim) + buttonBg: Düğme arka planı + buttonHoverBg: Düğme arka planı (Üstüne Gelince) + shadow: Gölge + navBg: Kenar çubuğu arka planı + accent: Vurgu + fg: Yazı + dateLabelFg: Tarih etiketi metni + navActive: Kenar çubuğu metni (Etkin) + wallpaperOverlay: Arkaplan arayüzü + messageBg: Sohbet arkaplanı + focus: Fokus + accentLighten: Vurgu (Aydınlık) + bg: Arkaplan + indicator: Gösterge + hashtag: Etiket + renote: Yükseltme + modalBg: Modal arka plan + divider: Bölücü + scrollbarHandle: Kaydırma çubuğu kolu + scrollbarHandleHover: Kaydırma çubuğu tutacağı (Üzerine Gelince) + infoBg: Bilgi geçmişi + accentDarken: Vurgu (Karanlık) + header: Başlık + navFg: Kenar çubuğu metni + navIndicator: Kenar çubuğu göstergesi + link: Link + infoFg: Bilgi metni + infoWarnBg: Uyarı arka planı + badge: Rozen + panel: Panel + navHoverFg: Kenar çubuğu metni (Üzerine Gelince) + cwBg: CW düğmesi arka planı + cwFg: CW düğmesi meni + cwHoverBg: CW düğmesi arka planı (Üzerine Gelince) + toastFg: Bildirim metni + inputBorder: Giriş alanı sınırı + listItemHoverBg: Liste öğesi arka planı (Üstüne Gelince) + toastBg: Bildirim arka planı + driveFolderBg: Drive klasörü arkaplanı + funcKind: Fonksiyon tipi + argument: Argüman + lighten: Aydınlat + inputConstantName: Bu sabit için bir ad girin + deleteConstantConfirm: '{const} sabitini gerçekten silmek istiyor musunuz?' + explore: Temaları Keşfet + darken: Karart + base: Temel + manage: Temaları düzenle + installedThemes: Yüklenen temalar + invalid: Bu temanın biçimi geçersiz + make: Tema oluştur + key: Anahtar + alpha: Opaklık + install: Tema yükle + installed: '{name} başarıyla yüklendi' + alreadyInstalled: Bu tema zaten yüklendi + importInfo: Buraya tema kodunu girerseniz, onu tema düzenleyiciye aktarabilirsiniz + func: Fonksiyonlar + basedProp: Referenslanan özellik + constant: Sabit + defaultValue: Varsayılan değer + refConst: Bir sabiti referansla + refProp: Bir mülkü referansla + addConstant: Sabit ekle +_menuDisplay: + sideIcon: Yan (Simgeler) + sideFull: Yan + hide: Gizle + top: Üst +_filters: + fromUser: Kullanıcıdan + withFile: Dosya ile + notesBefore: Gönderiden önce + notesAfter: Gönderiden sonra + followingOnly: Sadece takip ettiklerim + fromDomain: Alan adı ile + followersOnly: Sadece takipçiler +_permissions: + "write:blocks": Engelli kullanıcıları düzenle + "read:drive": Drive dosya ve klasörlerine eriş + "read:favorites": Yer imlerini görüntüle + "write:mutes": Susturulmuş kullanıcıları düzenle + "read:notifications": Bildirimleri görüntüle + "write:notifications": Bildirimleri düzenle + "write:page-likes": Sayfalardaki beğenilerini düzenle + "read:user-groups": Kullanıcı gruplarını göster + "write:reactions": Tepkilerini düzenle + "read:pages": Sayfalarını göster + "write:channels": Kanallarını düzenle + "read:gallery": Galerini göster + "read:gallery-likes": Beğenilen galeri gönderilerini göster + "write:gallery-likes": Galeri gönderilerini düzenle + "write:messaging": Sohbet mesajı oluştur veya sil + "write:user-groups": Kullanıcı gruplarını düzenle veya sil + "read:messaging": Sohbetlerini görüntüle + "read:mutes": Susturulmuş kullanıcıları göster + "write:votes": Bir ankete oy ver + "read:page-likes": Beğenilen sayfalarını göster + "read:reactions": Tepkilerini göster + "read:channels": Kanallarını göster + "write:notes": Gönderi oluştur veya sil + "write:drive": Drive dosya ve klasörlerini düzenle + "write:favorites": Yer imlerini düzenle + "read:following": Kimleri takip ettiğini göster + "write:account": Hesap bilgisini düzenle + "read:account": Hesap bilgisini görüntüle + "read:blocks": Engelli kullanıcıları gör + "write:following": Hesapları takip et veya takipten çıkar + "write:pages": Sayfalarını düzenle veya sil + "write:gallery": Galerini düzenle +_auth: + pleaseGoBack: Lütfen uygulamaya geri dönün + callback: Uygulamaya geri dönülüyor + shareAccess: '"{name}" adlı kişinin bu hesaba erişmesine izin vermek ister misiniz?' + permissionAsk: 'Bu uygulama aşağıdaki izinleri ister:' + allPermissions: Tam hesap erişimi + denied: Erişim reddedildi + copyAsk: 'Lütfen aşağıdaki yetkilendirme kodunu uygulamaya yapıştırın:' + shareAccessAsk: Bu uygulamanın hesabınıza erişmesine izin vermek istediğinizden + emin misiniz? +_antennaSources: + users: Belirli kullanıcılardan gönderiler + homeTimeline: Takip edilen kullanıcılardan gönderiler + all: Tüm gönderiler + instances: Bir sunucudaki tüm kullanıcılardan gelen gönderiler + userList: Belirli bir kullanıcı listesinden gönderiler + userGroup: Belirli bir gruptaki kullanıcıların gönderileri +_charts: + usersIncDec: Kullanıcı sayısı farkı + usersTotal: Toplam kullanıcı sayısı + remoteNotesIncDec: Uzak gönderilerin sayısındaki fark + notesTotal: Toplam gönderi sayısı + filesTotal: Toplam dosya sayısı + apRequest: İstekler + storageUsageIncDec: Depolama kullanımındaki fark + localNotesIncDec: Yerel gönderilerin sayısındaki fark + storageUsageTotal: Toplam depolama kullanımı + federation: Federasyon + notesIncDec: Gönderi sayısındaki fark + activeUsers: Aktif kullanıcılar + filesIncDec: Dosya sayısındaki fark +_pages: + fontSerif: Serif + fontSansSerif: Sans Serif + chooseBlock: Bloğu sil + blocks: + _canvas: + id: Tuval ID + height: Yükseklik + width: Genişlik + _button: + _action: + resetRandom: Rastgele çekirdeği sıfırla + _pushEvent: + no-variable: Hiçbiri + event: Etkinlik ismi + message: Aktif olduğunda gösterilecek mesaj + variable: Gönderilecek değişken + callAiScript: AiScript'i çağırın + _callAiScript: + functionName: Fonksiyon ismi + dialog: Dialog göster + _dialog: + content: İçerik + pushEvent: Etkinlik gönder + text: Başlık + action: Düğmeye basıldığında olacaklar + colored: Renkli + text: Yazı + if: Eğer + _if: + variable: Değişken + canvas: Tuval + note: Gömülü yazı + _note: + id: Gönderi ID + idDescription: Alternatif olarak gönderi URL'sini buraya yapıştırabilirsiniz. + detailed: Detaylı görüntüleme + _counter: + text: Başlık + inc: Adım + name: Değer ismi + radioButton: Seçenek + _radioButton: + name: Değişken ismi + values: Seçenekleri satırlarla ayırın + title: Başlık + default: Varsayılan değer + _post: + text: İçerik + attachCanvasImage: Tuval resmi ekle + canvasId: Tuval ID + _textInput: + text: Başlık + name: Değişken ismi + default: Varsayılan değer + _numberInput: + name: Değiken ismi + text: Başlık + default: Varsayılan değer + _textareaInput: + text: Başlık + name: Değişken ismi + default: Varsayılan değer + textarea: Yazı alanı + _switch: + name: Değişken ismi + default: Varsayılan değer + text: Başlık + counter: Sayaç + switch: Değiştir + post: Gönderi formu + image: Resimler + section: Bölüm + textareaInput: Çok satırlı yazı girişi + button: Düğme + textInput: Yazı girişi + numberInput: Sayısal giriş + script: + categories: + text: Yazı işlemleri + flow: Akış kontrolü + random: Rastgele + fn: Fonksiyonlar + convert: Dönüşümler + list: Listeler + logical: Mantıksal işlem + operation: Hesaplama + comparison: Karşılaştırma + value: Değerler + blocks: + and: A ve B + _or: + arg2: B + arg1: A + _lt: + arg1: A + arg2: B + _ltEq: + arg1: A + arg2: B + textList: Yazı listesi + strReverse: Yazıyı çevir + multiply: Çarp + subtract: Çıkar + _mod: + arg1: A + arg2: B + _divide: + arg2: B + arg1: A + round: Ondalık yuvarlama + _round: + arg1: Sayı + _eq: + arg1: A + arg2: B + notEq: A ve B farklıysa + _notEq: + arg1: A + arg2: B + or: A veya B + gt: "> A, B'den çoksa" + ltEq: <= A, B'den az veya eşitse + gtEq: ">= A, B'den çok veya eşitse" + _gtEq: + arg1: A + arg2: B + _not: + arg1: OLUMSUZ + random: Rastgele + randomPick: Listeden rastgele seç + seedRandom: Random (çekirdek ile) + _for: + arg1: Tekrarlama sayısı + arg2: Eylem + _seedRannum: + arg3: Maksimum değer + arg2: Minimum değer + arg1: Çekirdek + _strReplace: + arg3: ile değiştir + arg2: Değiştirilecek yazı + arg1: Yazı + _subtract: + arg2: B + arg1: A + mod: Kalan + _and: + arg1: A + arg2: B + _DRPWPM: + arg1: Yazı listesi + _fn: + slots-info: Her yuvayı bir satır sonu ile ayırın + arg1: Çıkış + slots: Yuvalar + for: dögü + dailyRandomPick: Listeden rastgele seçim yapın (Her kullanıcı için günde bir + kez değişir) + _dailyRannum: + arg1: Minimum değer + arg2: Maksimum değer + _seedRandomPick: + arg2: Liste + arg1: Çekirdek + _pick: + arg2: Pozisyon + arg1: Liste + number: Sayı + _if: + arg3: Yoksa + arg1: Eğer + arg2: Sonra + _rannum: + arg1: Minimum değer + arg2: Maksimum değer + eq: A ve B eşitse + _gt: + arg1: A + arg2: B + rannum: Rastgele sayı + _randomPick: + arg1: Liste + pick: Listeden seç + _listLen: + arg1: Liste + _multiply: + arg2: B + arg1: A + divide: Böl + strPick: Dize ayıklayın + _strPick: + arg1: Yazı + arg2: Dize konunumu + dailyRandom: Rastgele (Her kullanıcı için günde bir kez değişir) + _dailyRandom: + arg1: Olasılık + dailyRannum: Rastgele sayı (Her kullanıcı için günde bir kez değişir) + _stringToNumber: + arg1: Yazı + if: Şube + strReplace: Yedek dize + text: Yazı + _splitStrByLine: + arg1: Yazı + not: OLUMSUZ + _seedRandom: + arg1: Çekirdek + arg2: Olasılık + seedRandomPick: Listeden rastgele seçim yapın (çekirdek ile) + fn: Fonksiyon + multiLineText: Yazı (çok satırlı) + _textList: + info: Her girişi satırlar ile ayırın + _strReverse: + arg1: Yazı + join: Yazıyı birleştirme + _join: + arg1: Listeler + arg2: Ayraç + add: Ekle + _add: + arg1: A + arg2: B + _strLen: + arg1: Yazu + aiScriptVar: AiScript Değişkeni + ref: Değişken + splitStrByLine: Yazıyı satır sonlarına göre bölme + strLen: Yazı uzunluğu + lt: < A, B'den azsa + _random: + arg1: Olasılık + DRPWPM: Ağırlıklı listeden rastgele seçim yapın (Her kullanıcı için günde bir + kez değişir) + listLen: Listenin uzunluğunu al + numberToString: Sayıdan yazıya + _dailyRandomPick: + arg1: Liste + stringToNumber: Yazıdan Sayıya + seedRannum: Rastgele sayı (çekirdek ile) + _numberToString: + arg1: Sayı + types: + number: Sayı + boolean: Etiket + array: Liste + stringArray: Yazı listesi + string: Yazı + emptySlot: Boş yuva + enviromentVariables: Ortam değikenleri + argVariables: Giriş yuvaları + thereIsEmptySlot: Yuva {slot} boş! + typeError: Yuva {slot}, "{expect}" türündeki değerleri kabul eder, ancak sağlanan + değer "{actual}" türündedir! + pageVariables: Sayfa değişkenleri + readPage: Bu sayfanın kaynağını görüntüle + created: Sayfa başarıyla oluşturuldu + eyeCatchingImageRemove: Afişi sil + selectType: Tip seç + pageSetting: Sayfa ayarları + viewSource: Kaynağı görüntüle + variables: Değişkenler + url: Sayfa URL'si + unlike: Beğeniyi kaldır + my: Sayfalarım + content: Sayfa bloğu + deleted: Sayfa başarıyla silindi + newPage: Yeni sayfa oluştur + editPage: Bu sayfayı düzenle + viewPage: Sayfalarını görüntüle + like: Beğen + nameAlreadyExists: Belirtilen Sayfa URL'si zaten var + invalidNameTitle: Belirtilen Sayfa URL'si geçersiz + invalidNameText: Sayfa başlığının boş olmadığından emin olun + editThisPage: Sayfayı düzenle + featured: Popüler + inspector: Denetçi + contents: İçerik + title: Başlık + liked: Beğenilen Sayfalar + font: Yazı Tipi + alignCenter: İçerikleri ortala + eyeCatchingImageSet: Afiş ayarla + enterVariableName: Değişken ismi ekle + hideTitleWhenPinned: Profile sabitlendiğinde Sayfa başlığını gizle + variableNameIsAlreadyUsed: Bu değişken adı zaten kullanımda + contentBlocks: İçerik + inputBlocks: Giriş + specialBlocks: Özel + updated: Sayfa başarıyla düzenlendi + summary: Sayfa özeti +_notification: + _types: + follow: Yeni takipçiler + mention: Bahsetmeler + app: Bağlı uygulamalardan bildirimler + pollEnded: Biten anket + receiveFollowRequest: Takip istekleri alındı + reaction: Tepkiler + all: Hepsi + followRequestAccepted: Takip istekleri kabul edildi + pollVote: Anket oylamaları + renote: Yükseltmeler + reply: Yanıtlar + groupInvited: Grup davetleri + quote: Alıntılar + pollEnded: Anket sonuçları açıklandı + fileUploaded: Dosya başarıyla yüklendi + youRenoted: '{name} tarafından yükseltildin' + _actions: + followBack: Seni geri takip etti + reply: Yanıtla + renote: Yükseltmeler + youGotMention: '{name} senden bahsetti' + youWereFollowed: seni takip etti + youGotMessagingMessageFromGroup: '{name} grubuna bir sohbet mesajı gönderildi' + renoted: gönderini yükseltti + youGotQuote: '{name} seni alıntıladı' + youGotReply: '{name} seni yanıtladı' + reacted: gönderine tepki ekledi + yourFollowRequestAccepted: Takip isteğin kabul edildi + emptyPushNotificationMessage: Push bildirimleri güncellendi + youWereInvitedToGroup: '{userName} seni gruba davet etti' + voted: anketine oy verdi + youReceivedFollowRequest: Bir takip isteği geldi + youGotPoll: '{name} anketinde oylama yaptı' + youGotMessagingMessageFromUser: '{name} sana bir sohbet mesajı gönderdi' +_experiments: + title: Deneyler + postImportsCaption: Kullanıcıların geçmiş Firefish, Misskey, Mastodon, Akkoma ve + Pleroma hesaplarından gönderilerini içe aktarmalarına izin verir. Kuyruğunuz tıkanırsa + yükleme sırasında yavaşlamalara neden olabilir. + enablePostImports: Gönderi içeri aktarmasını aktif et +_dialog: + charactersExceeded: 'Maksimum karakter aşıldı! Geçerli: {current}/Sınır: {max}' + charactersBelow: 'Yeterli karakter yok! Geçerli: {current}/Sınır: {min}' +_signup: + emailSent: Mail adresinize ({email}) bir onay maili gönderildi. Hesap oluşturmayı + tamamlamak için lütfen verilen bağlantıya tıklayın. + almostThere: Neredeyse vardık + emailAddressInfo: Lütfen mail adresinizi giriniz. Herkese açık gözükmeyecektir. +_ad: + back: Geri + reduceFrequencyOfThisAd: Daha az reklam göster +_accountDelete: + accountDelete: Hesabı sil + mayTakeTime: Hesap silme, kaynak yoğun bir işlem olduğundan, ne kadar içerik oluşturduğunuza + ve ne kadar dosya yüklediğinize bağlı olarak tamamlanması biraz zaman alabilir. + sendEmail: Hesap silme işlemi tamamlandıktan sonra, bu hesapta kayıtlı olan mail + adresine bir mail gönderilecektir. + started: Silme işlemi başlatıldı. + requestAccountDelete: Hesap silme talebinde bulun + inProgress: Silme işlemi şu anda devam ediyor +_forgotPassword: + enterEmail: Kaydolmak için kullandığınız mail adresini girin. Parolanızı sıfırlayabileceğiniz + bir bağlantı daha sonra ona gönderilecektir. + contactAdmin: Bu sunucu, mail adreslerinin kullanılmasını desteklemiyor, bunun yerine + şifrenizi sıfırlamak için lütfen sunucu yöneticisiyle iletişime geçin. + ifNoEmail: Kayıt sırasında bir mail kullanmadıysanız, sunucu yöneticisiyle iletişime + geçin. +_gallery: + my: Galerim + liked: Beğenilen Gönderiler + like: Beğen + unlike: Beğeniyi kaldır +_registry: + key: Anahtar + scope: Kapsam + keys: Anahtarlar + createKey: Anahtar oluştur + domain: Alan adı +_email: + _follow: + title: Yeni bir takipçin var + _receiveFollowRequest: + title: Yeni bir takip isteğin var +_preferencesBackups: + apply: Bu cihaza uygula + invalidFile: Geçersiz dosya formatı + applyConfirm: '"{name}" yedeğini bu cihaza gerçekten uygulamak istiyor musunuz? + Bu cihazın mevcut ayarlarının üzerine yazılacak.' + inputName: Lütfen bu yedekleme için bir ad girin + cannotSave: Kaydedilemedi + saveConfirm: Yedekleme {name} olarak kaydedilsin mi? + renameConfirm: '"{old}" olan bu yedeğin adı "{new}" olarak değiştirilsin mi?' + createdAt: 'Oluşturma tarihi: {date} {time}' + save: Değişiklikleri Kaydet + nameAlreadyExists: '"{name}" adlı bir yedek zaten var. Lütfen farklı bir ad girin.' + deleteConfirm: '{name} yedeği silinsin mi?' + noBackups: Yedekleme yok. "Yeni yedekleme oluştur" seçeneğini kullanarak bu sunucudaki + istemci ayarlarınızı yedekleyebilirsiniz. + list: Oluşturulan yedekler + saveNew: Yeni bir yedek oluştur + loadFile: Dosyadan yükle + updatedAt: 'Güncelleme tarihi: {date} {time}' + cannotLoad: Yüklenemedi +_aboutFirefish: + about: Firefish, 2022'den beri geliştirilmekte olan ThatOneCalculator tarafından + yapılan bir Misskey çatalıdır. + allContributors: Tüm katkıda bulunanlar + donate: Firefish'e bağışta bulunun + contributors: Ana katkıda bulunanlar + source: Kaynak Kodu + translation: Firefish'i tercüme et + donateTitle: Firefish'den hoşlanıyor musunuz? + pleaseDonateToFirefish: Lütfen gelişimini desteklemek için Firefish'e bağış yapmayı + düşünün. + pleaseDonateToHost: İşletme maliyetlerini desteklemek için lütfen ev sunucunuz {host}'a + bağış yapmayı da düşünün. + donateHost: '{ev sahibi} için bağış yapın' + misskeyContributors: Misskey'e katkıda bulunanlar +_weekday: + saturday: Cumartesi + sunday: Pazar + wednesday: Çarşamba + friday: Cuma + thursday: Perşembe + monday: Pazartesi + tuesday: Salı +_serverDisconnectedBehavior: + reload: Otomatik olarak yenile + quiet: Göze çarpmayan uyarı göster + nothing: Hiçbir şey yapma + dialog: Uyarı mesajını göster +_channel: + removeBanner: Afişi sil + owned: Sahip Olunan + nameOnly: Sadece isim + featured: Popüler + setBanner: Afiş ayarla + usersCount: '{n} Katılımcı' + create: Kanal oluştur + following: Takip + notesCount: '{n} Gönderi' + nameAndDescription: İsim ve açıklama + edit: Kanalı düzenle +_messaging: + groups: Gruplar + dms: Özel +_tutorial: + step5_5: Sosyal {icon} zaman çizelgesi, Ev ve Yerel zaman çizelgelerinin bir kombinasyonudur. + step5_6: Önerilen {icon} zaman çizelgesi, yöneticilerin önerdiği sunuculardan gelen + gönderileri görebileceğiniz yerdir. + step6_1: Peki burası neresi? + title: Firefish nasıl kullanılır + step3_2: "Ev ve sosyal zaman çizelgeleriniz, kimi takip ettiğinize bağlıdır, bu + nedenle başlamak için birkaç hesabı takip etmeyi deneyin.\nTakip etmek için bir + profilin sağ üstündeki artı dairesine tıklayın." + step5_3: Ana Sayfa {icon} zaman çizelgesi, takip ettiğiniz hesaplardan gelen gönderileri + görebileceğiniz yerdir. + step5_4: Yerel {icon} zaman çizelgesi, bu sunucudaki diğer herkesin gönderilerini + görebileceğiniz yerdir. + step6_2: Firefish'e öylece katılmadın. Binlerce sunucudan oluşan birbirine bağlı + bir ağ olan Fediverse'e giden bir portala katıldınız. + step6_4: Şimdi gidin, keşfedin ve eğlenin! + step5_7: Global {icon} zaman çizelgesi, bağlı diğer tüm sunuculardan gelen gönderileri + görebileceğiniz yerdir. + step2_1: Öncelikle lütfen profilinizi doldurunuz. + step2_2: Kim olduğunuz hakkında biraz bilgi vermeniz, başkalarının gönderilerinizi + görmek mi yoksa sizi takip etmek mi istediklerini anlamalarını kolaylaştıracaktır. + step3_1: Şimdi birkaç kullanıcı takip etme zamanı! + step1_1: Hoşgeldin! + step1_2: Hadi seni hazırlayalım. Kısa sürede kullanmaya başlayacaksınız! + step5_1: Zaman çizelgeleri, her yerde zaman çizelgeleri! + step6_3: Her sunucu farklı şekillerde çalışır ve tüm sunucular Firefish'i çalıştırmaz. + Ama bu sunucu kullanıyor! Biraz karışık ama kısa sürede anlayacaksın. + step4_1: Seni oradan çıkaralım. + step5_2: Sunucunuzda etkinleştirilmiş {timelines} farklı zaman çizelgesi var. + step4_2: İlk gönderiniz için, bazı insanlar bir {introduction} gönderisi veya basit + bir "Merhaba dünya!" gönderir +_visibility: + public: Herkese açık + publicDescription: Gönderiniz herkese açık tüm zaman çizelgelerinde görünür olacak + specified: Direkt + followersDescription: Yalnızca takipçilerinize ve adı geçen kullanıcılara görünür + kılın + localOnlyDescription: Uzak kullanıcılara gözükmez + home: Listelenmemiş + homeDescription: Yalnızca ev zaman çizelgesine yayınla + followers: Takipçiler + specifiedDescription: Belirli kullanıcılara özel yapın + localOnly: Sadece yerel +_postForm: + quotePlaceholder: Bu gönderiyi alıntıla... + _placeholders: + a: Ne ile meşgulsün? + b: Etrafında neler oluyor? + f: Yazman bekleniyor... + c: Aklınızdan ne geçiyor? + d: Ne demek istiyorsun? + e: Yazmaya başka... + replyPlaceholder: Bu gönderiyi yanıtla... + channelPlaceholder: Bir kanala gönder... +_exportOrImport: + allNotes: Tüm gönderiler + followingList: Takip edilen kullanıcılar + muteList: Susturulmuş kullanıcılar + excludeMutingUsers: Susturulmuş kullanıcıları hariç tut + excludeInactiveUsers: Aktif olmayan kullanıcıları hariç tut + userLists: Kullanıcı listeleri + blockingList: Engellenimş kullanıcılar +_instanceCharts: + notes: Gönderi sayısındaki fark + notesTotal: Toplu gönderi sayısı + files: Dosya sayısındaki fark + filesTotal: Toplu dosya sayısı + requests: İstekler + usersTotal: Toplu kullanıcı sayısı + users: Kullanıcı sayısı farkı + cacheSize: Önbellek boyutundaki fark + ff: 'Takip edilen / Takipçi sayısındaki fark ' + cacheSizeTotal: Toplam önbellek boyutu + ffTotal: Toplu Takip edilen / Takipçi sayısı +_wordMute: + soft: Yumuşak + muteWords: Susturulmuş kelimeler + muteWordsDescription: AND koşulu için boşluklarla veya OR koşulu için satır sonlarıyla + ayırın. + softDescription: Belirlenen koşulları karşılayan gönderileri zaman çizelgesinden + gizleyin. + hardDescription: Belirlenen koşulları sağlayan gönderilerin zaman çizelgesineeklenmesini + engeller. Ayrıca bu gönderiler, koşullar değişse dahi zaman tüneline eklenmeyecektir. + mutedNotes: Susturulmuş gönderiler + hard: Sert + muteWordsDescription2: Normal ifadeleri kullanmak için anahtar kelimeleri eğik çizgilerle + çevreleyin. +_ago: + weeksAgo: '{n}hafta önce' + minutesAgo: '{n}dakika önce' + daysAgo: '{n}gün önce' + future: Gelecek + justNow: Şimdi + secondsAgo: '{n}saniye önce' + hoursAgo: '{n}saat önce' + monthsAgo: '{n}ay önce' + yearsAgo: '{n}yıl önce' +_timelines: + home: Ev + local: Yerel + social: Sosyal + global: Global + recommended: Tavsiye Edilen +_nsfw: + respect: NSFW medyasını gizle + force: Tüm medyayı gizle + ignore: NSFW medyasını gizleme +_cw: + files: '{count} dosya(lar)' + chars: '{count} harf' + hide: Gizle + show: İçeriği göster +_relayStatus: + rejected: Reddedildi + accepted: Kabul edildi + requesting: Bekleniyor +_time: + day: Gün(ler) + hour: Saat(ler) + second: Saniye(ler) + minute: Dakika(lar) +_skinTones: + light: Aydınlık + medium: Orta + mediumLight: Orta Aydınlık + dark: Karanlık + yellow: Sarı + mediumDark: Orta Karanlık +_plugin: + install: Eklenti indir + installWarn: Lütfen güvenli olmayan eklentiler kurmayınız. + manage: Eklentileri yönet +_instanceTicker: + remote: Uzak kullanıcılar için göster + always: Her zaman göster + none: Asla gösterme +_instanceMute: + heading: Sessize alınacak sunucuların listesi + instanceMuteDescription2: Yeni satırlarla ayırın + title: Listelenen sunuculardan gönderileri gizler. + instanceMuteDescription: Bu, sessize alınmış bir sunucudan bir kullanıcıya yanıt + veren kullanıcılarınkiler de dahil olmak üzere, listelenen sunuculardan gelen + tüm gönderileri/yükseltmeleri sessize alacaktır. +_ffVisibility: + followers: Takipçilere açık + private: Gizli + public: Herkese açık +verifiedLink: Doğrulanmış bağlantı +_feeds: + copyFeed: Akışı kopyala + rss: RSS + atom: Atom + jsonFeed: JSON akışı +origin: Kaynak +objectStorageS3ForcePathStyle: Path temelli bir endpoint URL'leri kullan +objectStorageS3ForcePathStyleDesc: Bunu açarak 's3.amazonaws.com//' over '.s3.amazonaws.com' + formatında endpoint URL'leri kurabilirsin. +delete2fa: 2FA'yı devre dışı bırak +deletePasskeys: Passkey'leri sil +inputNotMatch: Girdi eşleşmiyor +deletePasskeysConfirm: Bu işlem geri alınamaz bir şekilde bu hesapta ki tüm passkey'leri + ve güvenlik anahtarlarını silecektir. İşleme devam ediyor musunuz? +delete2faConfirm: Bu işlem geri alınamaz bir şekilde 2FA'yı bu hesaptan silecektir. + İşleme devam ediyor musunuz? +detectPostLanguage: Yabancı dildeki gönderiler için dili otomatik olarak tespit et + ve bir tercüme düğmesi göster +indexableDescription: Yerleşik aramanın herkese açık gönderilerinizi göstermesine + izin ver +addRe: İçerik uyarısına sahip bir gönderiye yanıt olarak paylaşılan gönderinin başına + "re:" ekle +exportZip: ZIP dışa aktar +importZip: ZIP içe aktar +indexable: Endekslenebilir +languageForTranslation: Çeviri sonrası dili +confirm: Onayla +clickToShowPatterns: Modülün örüntülerini göstermek için tıklayın diff --git a/locales/ug-CN.yml b/locales/ug-CN.yml new file mode 100644 index 0000000..cfdecfb --- /dev/null +++ b/locales/ug-CN.yml @@ -0,0 +1,5 @@ +--- +_lang_: "ياپونچە" +search: "ئىزدەش" +_mfm: + search: "ئىزدەش" diff --git a/locales/uk-UA.yml b/locales/uk-UA.yml new file mode 100644 index 0000000..c170d7f --- /dev/null +++ b/locales/uk-UA.yml @@ -0,0 +1,2128 @@ +_lang_: "Українська" +headlineFirefish: "Мережа об'єднана записами" +introFirefish: "Ласкаво просимо! Firefish - децентралізована служба мікроблогів з + назавжди відкритим кодом! 🚀" +monthAndDay: "{month}/{day}" +search: "Пошук" +notifications: "Сповіщення" +username: "Ім'я користувача" +password: "Пароль" +forgotPassword: "Я забув пароль" +fetchingAsApObject: "Отримуємо з федіверсу" +ok: "OK" +gotIt: "Зрозуміло!" +cancel: "Скасувати" +enterUsername: "Введіть ім'я користувача" +renotedBy: "Поширено {user}" +noNotes: "Немає записів" +noNotifications: "Немає сповіщень" +instance: "Сервер" +settings: "Налаштування" +basicSettings: "Основні налаштування" +otherSettings: "Інші налаштування" +openInWindow: "Відкрити у вікні" +profile: "Профіль" +timeline: "Стрічка" +noAccountDescription: "Цей користувач ще нічого не написав про себе." +login: "Увійти" +loggingIn: "Здійснюємо вхід" +logout: "Вийти" +signup: "Реєстрація" +uploading: "Завантаження..." +save: "Зберегти" +users: "Користувачі" +addUser: "Додати користувача" +favorite: "Обране" +favorites: "Обране" +unfavorite: "Видалити з обраного" +favorited: "Додано до вподобаних." +alreadyFavorited: "Вже додано до вподобаних." +cantFavorite: "Неможливо вподобати." +pin: "Закріпити" +unpin: "Відкріпити" +copyContent: "Скопіювати контент" +copyLink: "Скопіювати посилання" +delete: "Видалити" +deleteAndEdit: "Видалити й редагувати" +deleteAndEditConfirm: "Ви впевнені, що хочете видалити цей запис та відредагувати + його? Ви втратите всі реакції, поширення та відповіді на нього." +addToList: "Додати до списку" +sendMessage: "Надіслати повідомлення" +copyUsername: "Скопіювати ім’я користувача" +searchUser: "Пошук користувачів" +reply: "Відповісти" +loadMore: "Показати більше" +showMore: "Показати більше" +showLess: "Закрити" +youGotNewFollower: "Новий підписник" +receiveFollowRequest: "Отримано запит на підписку" +followRequestAccepted: "Підписка прийнята" +mention: "Згадка" +mentions: "Згадки" +directNotes: "Прямі повідомлення" +importAndExport: "Імпорт та експорт" +import: "Імпорт" +export: "Експорт" +files: "Файли" +download: "Завантажити" +driveFileDeleteConfirm: "Ви впевнені, що хочете видалити файл {name}? Його буде видалено + з усіх записів які містили його." +unfollowConfirm: "Ви впевнені, що хочете відписатися від {name}?" +exportRequested: "Експортування розпочато. Це може зайняти деякий час. Після завершення + експорту отриманий файл буде додано на диск." +importRequested: "Імпортування розпочато. Це може зайняти деякий час." +lists: "Списки" +noLists: "Немає списків" +note: "Запис" +notes: "Записи" +following: "Підписки" +followers: "Підписники" +followsYou: "Підписаний(-а) на вас" +createList: "Створити список" +manageLists: "Управління списками" +error: "Помилка" +somethingHappened: "Щось пішло не так" +retry: "Спробувати знову" +pageLoadError: "Помилка при завантаженні сторінки." +pageLoadErrorDescription: "Зазвичай це пов’язано з помилками мережі або кешем браузера. + Очистіть кеш або почекайте трохи й спробуйте ще раз." +serverIsDead: "Відповіді від сервера немає. Зачекайте деякий час і повторіть спробу." +youShouldUpgradeClient: "Перезавантажте та використовуйте нову версію клієнта, щоб + переглянути цю сторінку." +enterListName: "Введіть назву списку" +privacy: "Конфіденційність" +makeFollowManuallyApprove: "Підтверджувати підписників уручну" +defaultNoteVisibility: "Видимість за замовчуванням" +follow: "Підписатись" +followRequest: "Запит на підписку" +followRequests: "Запити на підписку" +unfollow: "Відписатись" +followRequestPending: "Очікуючі запити на підписку" +enterEmoji: "Введіть емодзі" +renote: "Поширити" +unrenote: "скасувати поширення" +renoted: "Поширено." +cantRenote: "Цей запис неможливо поширити." +cantReRenote: "Поширення неможливо поширити." +quote: "Цитата" +pinnedNote: "Закріплений запис" +pinned: "Закріпити" +you: "Ви" +clickToShow: "Натисніть для перегляду" +sensitive: "NSFW" +add: "Додати" +reaction: "Реакції" +reactionSetting: "Налаштування реакцій" +reactionSettingDescription2: "Перемістити щоб змінити порядок, Клацнути мишою щоб + видалити, Натиснути \"+\" щоб додати." +rememberNoteVisibility: "Пам’ятати параметри видимісті" +attachCancel: "Видалити вкладення" +markAsSensitive: "Позначити як NSFW" +unmarkAsSensitive: "Зняти позначку NSFW" +enterFileName: "Введіть ім'я файлу" +mute: "Ігнорувати" +unmute: "Показувати" +block: "Заблокувати" +unblock: "Розблокувати" +suspend: "Призупинити" +unsuspend: "Відновити" +blockConfirm: "Ви впевнені, що хочете заблокувати цей акаунт?" +unblockConfirm: "Ви впевнені, що хочете розблокувати цей акаунт?" +suspendConfirm: "Ви впевнені, що хочете призупинити цей акаунт?" +unsuspendConfirm: "Ви впевнені, що хочете відновити цей акаунт?" +selectList: "Виберіть список" +selectAntenna: "Виберіть антену" +selectWidget: "Виберіть віджет" +editWidgets: "Редагувати віджети" +editWidgetsExit: "Готово" +customEmojis: "Кастомні емоджі" +emoji: "Емоджі" +emojis: "Емоджі" +emojiName: "Назва емоджі" +emojiUrl: "URL емодзі" +addEmoji: "Додати емодзі" +settingGuide: "Рекомендована конфігурація" +cacheRemoteFiles: "Кешувати дані з інших інстансів" +cacheRemoteFilesDescription: "Якщо кешування вимкнено, віддалені файли завантажуються + безпосередньо з віддаленого серверу. Це зменшує використання сховища, але збільшує + трафік, оскільки не генеруются ескізи." +flagAsBot: "Акаунт бота" +flagAsBotDescription: "Ввімкніть якщо цей обліковий запис використовується ботом. + Ця опція позначить обліковий запис як бота. Це потрібно щоб виключити безкінечну + інтеракцію між ботами а також відповідного підлаштування Firefish." +flagAsCat: "Акаунт кота" +flagAsCatDescription: "Ввімкніть, щоб позначити, що обліковий запис є котиком, та + отримати котячі вуха!" +flagShowTimelineReplies: "Показувати відповіді на записи в стрічці" +flagShowTimelineRepliesDescription: "Показує відповіді користувачів на записи інших + користувачів у стрічці." +autoAcceptFollowed: "Автоматично приймати запити на підписку від користувачів, на + яких ви підписані" +addAccount: "Додати акаунт" +loginFailed: "Не вдалося увійти" +showOnRemote: "Переглянути в оригіналі" +general: "Загальне" +wallpaper: "Шпалери" +setWallpaper: "Встановити шпалери" +removeWallpaper: "Прибрати шпалери" +searchWith: "Пошук: {q}" +youHaveNoLists: "У вас немає списків" +followConfirm: "Підписатися на {name}?" +proxyAccount: "Обліковий запис проксі" +proxyAccountDescription: "Обліковий запис проксі – це обліковий запис, який діє як + віддалений підписник для користувачів за певних умов. Наприклад, коли користувач + додає віддаленого користувача до списку, активність віддаленого користувача не буде + доставлена на сервер, якщо жоден локальний користувач не стежить за цим користувачем, + то замість нього буде використовуватися обліковий запис проксі-сервера." +host: "Хост" +selectUser: "Виберіть користувача" +recipient: "Отримувач" +annotation: "Коментарі" +federation: "Федіверс" +instances: "Сервери" +registeredAt: "Приєднався(лась)" +latestRequestSentAt: "Останній запит надіслано" +latestRequestReceivedAt: "Останній запит прийнято" +latestStatus: "Останній статус" +storageUsage: "Використання простору" +charts: "Графіки" +perHour: "Щогодинно" +perDay: "Щоденно" +stopActivityDelivery: "Припинити розсилання активності" +blockThisInstance: "Заблокувати цей сервер" +operations: "Операції" +software: "Програмне забезпечення" +version: "Версія" +metadata: "Метадані" +monitor: "Монітор" +jobQueue: "Черга завдань" +cpuAndMemory: "ЦП та пам'ять" +network: "Мережа" +disk: "Диск" +instanceInfo: "Про цей сервер" +statistics: "Статистика" +clearQueue: "Очистити чергу" +clearQueueConfirmTitle: "Ви впевнені, що хочете очистити чергу?" +clearQueueConfirmText: "Будь-які невідправлені записи, що залишилися в черзі, не будуть + передані. Зазвичай ця операція НЕ потрібна." +clearCachedFiles: "Очистити кеш" +clearCachedFilesConfirm: "Ви впевнені, що хочете видалити всі кешовані файли?" +blockedInstances: "Заблоковані сервери" +blockedInstancesDescription: "Вкажіть сервери, які потрібно заблокувати. Перелічені + сервери більше не зможуть спілкуватися з цим сервером." +muteAndBlock: "Заглушення і блокування" +mutedUsers: "Заглушені користувачі" +blockedUsers: "Заблоковані користувачі" +noUsers: "Немає користувачів" +editProfile: "Редагувати обліковий запис" +noteDeleteConfirm: "Ви дійсно хочете видалити цей запис?" +pinLimitExceeded: "Ви не можете закріпити більше записів" +intro: "Встановлення Firefish завершено! Будь ласка, створіть обліковий запис адміністратора." +done: "Готово" +processing: "Обробка" +preview: "Попередній перегляд" +default: "За умовчанням" +noCustomEmojis: "Немає нетипових емоджі" +noJobs: "Немає завдань" +federating: "Федерується" +blocked: "Заблоковано" +suspended: "Призупинено" +all: "Всі" +subscribing: "Підписка" +publishing: "Публікація" +notResponding: "Не відповідає" +instanceFollowing: "Підписка на сервер" +instanceFollowers: "Підписники серверу" +instanceUsers: "Користувачі цього серверу" +changePassword: "Змінити пароль" +security: "Безпека" +retypedNotMatch: "Введені дані не збігаються." +currentPassword: "Поточний пароль" +newPassword: "Новий пароль" +newPasswordRetype: "Новий пароль (повторно)" +attachFile: "Прикріпити файл" +more: "Бiльше!" +featured: "Популярні" +usernameOrUserId: "Ім'я або ID користувача" +noSuchUser: "Користувача не знайдено" +lookup: "Пошук" +announcements: "Оголошення" +imageUrl: "Посилання на зображення" +remove: "Видалити" +removed: "Видалено" +removeAreYouSure: "Ви впевнені, що хочете видалити \"{x}\"?" +deleteAreYouSure: "Ви впевнені, що хочете видалити \"{x}\"?" +resetAreYouSure: "Справді скинути?" +saved: "Збережено" +messaging: "Чати" +upload: "Завантажити" +keepOriginalUploading: "Зберегти оригінальне зображення" +keepOriginalUploadingDescription: "Зберігає початково завантажене зображення як є. + Якщо вимкнено, версія для відображення в Інтернеті буде створена під час завантаження." +fromDrive: "З диска" +fromUrl: "З посилання" +uploadFromUrl: "Завантажити з посилання" +uploadFromUrlDescription: "Посилання на файл для завантаження" +uploadFromUrlRequested: "Завантаження розпочалось" +uploadFromUrlMayTakeTime: "Завантаження може зайняти деякий час." +explore: "Огляд" +messageRead: "Прочитано" +noMoreHistory: "Подальшої історії немає" +startMessaging: "Розпочати діалог" +nUsersRead: "Прочитали {n}" +agreeTo: "Я погоджуюсь з {0}" +tos: "Умови використання" +start: "Розпочати" +home: "Домівка" +remoteUserCaution: "Інформація може бути неповною, оскільки це віддалений користувач." +activity: "Активність" +images: "Зображення" +birthday: "День народження" +yearsOld: "{age} років" +registeredDate: "Приєднався(лась)" +location: "Локація" +theme: "Тема" +themeForLightMode: "Світла тема" +themeForDarkMode: "Темна тема" +light: "Світла" +dark: "Темна" +lightThemes: "Світлі теми" +darkThemes: "Темні теми" +syncDeviceDarkMode: "Синхронізувати темний режим із налаштуваннями вашого пристрою" +drive: "Диск" +fileName: "Ім'я файлу" +selectFile: "Вибрати файл" +selectFiles: "Вибрати файли" +selectFolder: "Вибрати теку" +selectFolders: "Вибрати теки" +renameFile: "Перейменувати файл" +folderName: "Ім'я теки" +createFolder: "Створити теку" +renameFolder: "Перейменувати теку" +deleteFolder: "Видалити теку" +addFile: "Додати файл" +emptyDrive: "Диск порожній" +emptyFolder: "Тека порожня" +unableToDelete: "Видалення неможливе" +inputNewFileName: "Введіть ім'я нового файлу" +inputNewDescription: "Введіть новий опис" +inputNewFolderName: "Введіть ім'я нової теки" +circularReferenceFolder: "Ви намагаєтесь перемістити папку в її підпапку." +hasChildFilesOrFolders: "Ця тека не порожня і не може бути видалена." +copyUrl: "Копіювати URL" +rename: "Перейменувати" +avatar: "Аватар" +banner: "Банер" +nsfw: "NSFW" +whenServerDisconnected: "Коли зв’язок із сервером втрачено" +disconnectedFromServer: "Зв’язок із сервером було перервано" +reload: "Оновити" +doNothing: "Нічого не робити" +reloadConfirm: "Перезавантажити стрічку?" +watch: "Стежити" +unwatch: "Не стежити" +accept: "Прийняти" +reject: "Відхилити" +normal: "Нормальний" +instanceName: "Назва серверу" +instanceDescription: "Опис серверу" +maintainerName: "Ім'я адміністратора" +maintainerEmail: "Email адміністратора" +tosUrl: "URL умов використання" +thisYear: "Рік" +thisMonth: "Місяць" +today: "День" +dayX: "{day}" +monthX: "{month}" +yearX: "{year}" +pages: "Сторінки" +enableLocalTimeline: "Увімкнути локальну стрічку" +enableGlobalTimeline: "Увімкнути глобальну стрічку" +disablingTimelinesInfo: "Адміністратори та модератори завжди мають доступ до всіх + стрічок, навіть якщо вони вимкнуті." +registration: "Реєстрація" +enableRegistration: "Дозволити реєстрацію" +invite: "Запросити" +driveCapacityPerLocalAccount: "Об'єм диска на одного локального користувача" +driveCapacityPerRemoteAccount: "Об'єм диска на одного віддаленого користувача" +inMb: "В мегабайтах" +iconUrl: "URL аватара" +bannerUrl: "URL банера" +backgroundImageUrl: "URL-адреса фонового зображення" +basicInfo: "Основна інформація" +pinnedUsers: "Закріплені користувачі" +pinnedUsersDescription: "Впишіть в список користувачів, яких хочете закріпити на сторінці + \"Знайти\", ім'я в стовпчик." +pinnedPages: "Закріплені сторінки" +pinnedPagesDescription: "Введіть шляхи сторінок, які ви бажаєте закріпити на головній + сторінці цього сервера, розділені новими рядками." +pinnedClipId: "Ідентифікатор закріпленої замітки" +pinnedNotes: "Закріплений запис" +hcaptcha: "Перевірка з використанням hCaptcha" +enableHcaptcha: "Увімкнути hCaptcha" +hcaptchaSiteKey: "Ключ сайту" +hcaptchaSecretKey: "Секретний ключ" +recaptcha: "reCAPTCHA" +enableRecaptcha: "Увімкнути reCAPTCHA" +recaptchaSiteKey: "Ключ сайту" +recaptchaSecretKey: "Секретний ключ" +avoidMultiCaptchaConfirm: "Використання кількох систем Captcha може спричинити перешкоди + між ними. Бажаєте вимкнути інші активні системи Captcha? Якщо ви хочете, щоб вони + залишалися ввімкненими, натисніть «Скасувати»." +antennas: "Антени" +manageAntennas: "Налаштування антен" +name: "Ім'я" +antennaSource: "Джерело антени" +antennaKeywords: "Ключові слова антени" +antennaExcludeKeywords: "Винятки" +antennaKeywordsDescription: "Відокремте пробілами для умови \"І\" або перенесенням + до нового рядка для умови \"АБО\"." +notifyAntenna: "Сповіщати про нові записи" +withFileAntenna: "Тільки записи з вкладеними файлами" +enableServiceworker: "Ввімкнути ServiceWorker" +antennaUsersDescription: "Список імя користувачів в стопчик" +caseSensitive: "З урахуванням регістру" +withReplies: "Включаючи відповіді" +connectedTo: "Наступні акаунти під'єднані" +notesAndReplies: "Записи та відповіді" +withFiles: "Файли" +silence: "Заглушити" +silenceConfirm: "Ви впевнені, що хочете заглушити цього користувача?" +unsilence: "Не глушити" +unsilenceConfirm: "Ви впевнені, що хочете скасувати глушіння цього користувача?" +popularUsers: "Популярні користувачі" +recentlyUpdatedUsers: "Нещодавно активні користувачі" +recentlyRegisteredUsers: "Нещодавно зареєстровані користувачі" +recentlyDiscoveredUsers: "Нещодавно знайдені користувачі" +exploreUsersCount: "{count} користувачів" +exploreFediverse: "Досліджуйте Fediverse" +popularTags: "Популярні теги" +userList: "Списки" +about: "Інформація" +aboutFirefish: "Про Firefish" +administrator: "Адмін" +token: "Токен" +twoStepAuthentication: "Двохфакторна аутентифікація" +moderator: "Модератор" +nUsersMentioned: "Згадали: {n}" +securityKey: "Ключ захисту" +securityKeyName: "Назва ключа" +registerSecurityKey: "Зареєструвати ключ захисту" +lastUsed: "Востаннє використано" +unregister: "Скасувати реєстрацію" +passwordLessLogin: "Налаштувати вхід без пароля" +resetPassword: "Скинути пароль" +newPasswordIs: "Новий пароль: {password}" +reduceUiAnimation: "Зменшити анімацію інтерфейсу" +share: "Поділитись" +notFound: "Не знайдено" +notFoundDescription: "Сторінка за вказаною адресою не знайдена." +uploadFolder: "Місце для завантаження за замовчуванням" +cacheClear: "Очистити кеш" +markAsReadAllNotifications: "Позначити всі сповіщення як прочитані" +markAsReadAllUnreadNotes: "Позначити всі записи як прочитані" +markAsReadAllTalkMessages: "Позначити всі повідомлення як прочитані" +help: "Допомога" +inputMessageHere: "Введіть повідомлення тут" +close: "Закрити" +group: "Група" +groups: "Групи" +createGroup: "Створити групу" +ownedGroups: "Власні групи" +joinedGroups: "Членство в групах" +invites: "Запросити" +groupName: "Назва групи" +members: "Учасники" +transfer: "Передача" +messagingWithUser: "Чат з користувачами" +messagingWithGroup: "Чат з групою" +title: "Тема" +text: "Текст" +enable: "Увімкнути" +next: "Далі" +retype: "Введіть ще раз" +noteOf: "Запис {user}" +inviteToGroup: "Запрошення до групи" +quoteAttached: "Цитата" +quoteQuestion: "Ви хочете додати цитату?" +noMessagesYet: "Ще немає повідомлень" +newMessageExists: "Є нові повідомлення" +onlyOneFileCanBeAttached: "До повідомлення можна вкласти лише один файл" +signinRequired: "Будь ласка, авторизуйтесь" +invitations: "Запрошення" +invitationCode: "Код запрошення" +checking: "Перевірка…" +available: "Доступно" +unavailable: "Недоступно" +usernameInvalidFormat: "Ви можете використовувати великі та малі літери, цифри та + підкреслення." +tooShort: "Занадто короткий" +tooLong: "Занадто довгий" +weakPassword: "Слабкий пароль" +normalPassword: "Достатній пароль" +veryStrongPassword: "Міцний пароль" +passwordMatched: "Все вірно" +passwordNotMatched: "Паролі не співпадають" +signinWith: "Увійти за допомогою {x}" +signinFailed: "Не вдалося увійти. Введені ім’я користувача або пароль неправильнi." +tapSecurityKey: "Торкніться ключа безпеки" +or: "або" +language: "Мова" +uiLanguage: "Мова інтерфейсу" +groupInvited: "Запрошення до групи" +aboutX: "Про {x}" +useOsNativeEmojis: "Використовувати емодзі ОС" +disableDrawer: "Не використовувати висувні меню" +youHaveNoGroups: "Немає груп" +joinOrCreateGroup: "Отримуйте запрошення до груп або створюйте свої власні групи." +noHistory: "Історія порожня" +signinHistory: "Історія входів" +disableAnimatedMfm: "Відключити анімації MFM" +doing: "Виконується..." +category: "Категорія" +tags: "Теги" +docSource: "Джерело цього документа" +createAccount: "Створити акаунт" +existingAccount: "Існуючий обліковий запис" +regenerate: "Оновити" +fontSize: "Розмір шрифту" +noFollowRequests: "Немає запитів на підписку" +openImageInNewTab: "Відкрити зображення в новій вкладці" +dashboard: "Панель приладів" +local: "Локальні" +remote: "Віддалені" +total: "Всього" +weekOverWeekChanges: "Тиждень" +dayOverDayChanges: "Доба" +appearance: "Вигляд" +clientSettings: "Налаштування клієнта" +accountSettings: "Налаштування акаунта" +promotion: "Виділене" +promote: "Виділити" +numberOfDays: "Кількість днів" +hideThisNote: "Сховати цей запис" +showFeaturedNotesInTimeline: "Показувати популярні записи у стрічці" +objectStorage: "Сховище" +useObjectStorage: "Використовувати object storage" +objectStorageBaseUrl: "Базовий URL" +objectStorageBaseUrlDesc: "URL-адреса, що використовується як джерело. Вкажіть URL-адресу + вашого CDN або проксі-сервера, якщо ви їх використовуєте.\nДля S3 використовуйте + 'https://.s3.amazonaws.com', а для GCS або подібних сервісів - 'https://storage.googleapis.com/', + тощо." +objectStorageBucket: "Сховище (Bucket)" +objectStorageBucketDesc: "Будь ласка вкажіть назву відра в налаштованому сервісі." +objectStoragePrefix: "Prefix" +objectStoragePrefixDesc: "Файли будуть зберігатись у розташуванні з цим префіксом." +objectStorageEndpoint: "Кінцевий пункт" +objectStorageEndpointDesc: "Залиште пустим при використанні AWS S3. Інакше введіть + кінцевий пункт як '' або ':' слідуючи інструкціям сервісу, який + використовується." +objectStorageRegion: "Region" +objectStorageRegionDesc: "Введіть регіон у формі 'xx-east-1'. Залиште пустим, якщо + ваш сервіс не різниться відповідно до регіонів, або введіть 'us-east-1'." +objectStorageUseSSL: "Використовувати SSL" +objectStorageUseSSLDesc: "Вимкніть коли не використовується HTTPS для з'єднання API" +objectStorageUseProxy: "Використовувати Proxy" +objectStorageUseProxyDesc: "Вимкніть коли проксі не використовується для з'єднання + ObjectStorage" +objectStorageSetPublicRead: "Встановіть 'публічне читання' при завантаженні" +serverLogs: "Журнал сервера" +deleteAll: "Видалити все" +showFixedPostForm: "Показати форму запису над стрічкою новин" +newNoteRecived: "Є нові записи" +sounds: "Звуки" +listen: "Слухати" +none: "Відсутній" +showInPage: "Показати на сторінці" +popout: "Від'єднати" +volume: "Гучність" +masterVolume: "Загальна гучність" +details: "Детальніше" +chooseEmoji: "Виберіть емодзі" +unableToProcess: "Не вдається завершити операцію" +recentUsed: "Нещодавні" +install: "Встановити" +uninstall: "Видалити" +installedApps: "Встановлені аплікації" +nothing: "Тут нічого немає" +installedDate: "Дата встановлення" +lastUsedDate: "Дата використання" +state: "Стан" +sort: "Сортування" +ascendingOrder: "За зростанням" +descendingOrder: "За спаданням" +scratchpad: "Чернетка" +scratchpadDescription: "Scratchpad надає середовище для експериментів з AiScript. + Ви можете писати, виконувати його і тестувати взаємодію з Firefish." +output: "Вихід" +script: "Скрипт" +disablePagesScript: "Вимкнути AiScript на Сторінках" +updateRemoteUser: "Оновити інформацію про віддаленого користувача" +deleteAllFiles: "Видалити всі файли" +deleteAllFilesConfirm: "Ви дійсно хочете видалити всі файли?" +removeAllFollowing: "Скасувати всі підписки" +removeAllFollowingDescription: "Скасувати підписку на всі акаунти з {host}. Будь ласка, + робіть це, якщо сервер більше не існує." +userSuspended: "Обліковий запис заблокований." +userSilenced: "Обліковий запис приглушений." +yourAccountSuspendedTitle: "Цей обліковий запис заблоковано" +yourAccountSuspendedDescription: "Цей обліковий запис було заблоковано через порушення + умов надання послуг сервера. Зв'яжіться з адміністратором, якщо ви хочете дізнатися + докладнішу причину. Будь ласка, не створюйте новий обліковий запис." +menu: "Меню" +divider: "Розділювач" +addItem: "Додати елемент" +relays: "Ретранслятори" +addRelay: "Додати ретранслятор" +inboxUrl: "URL скриньки вхідних повідомлень" +addedRelays: "Додані ретранслятори" +serviceworkerInfo: "Повинен бути ввімкнений для push-сповіщень." +deletedNote: "Видалений запис" +invisibleNote: "Прихований запис" +enableInfiniteScroll: "Увімкнути нескінченну прокрутку" +visibility: "Видимість" +poll: "Опитування" +useCw: "Приховати вміст" +enablePlayer: "Відкрити відеоплеєр" +disablePlayer: "Закрити відеоплеєр" +expandTweet: "Розгорнути твіт" +themeEditor: "Редактор тем" +description: "Опис" +describeFile: "Додати опис" +enterFileDescription: "Введіть опис" +author: "Автор" +leaveConfirm: "Зміни не збережені. Ви дійсно хочете скасувати зміни?" +manage: "Управління" +plugins: "Плагіни" +deck: "Дек" +undeck: "Залишити Дек" +useBlurEffectForModal: "Ефект розмиття під модальними діалогами" +useFullReactionPicker: "Повнорозмірний селектор реакцій" +width: "Ширина" +height: "Висота" +large: "Крупний" +medium: "Середній" +small: "Маленький" +generateAccessToken: "Згенерувати токен доступу" +permission: "Права" +enableAll: "Увімкнути все" +disableAll: "Вимкнути все" +tokenRequested: "Надати доступ до акаунту" +pluginTokenRequestedDescription: "Цей плагін зможе використовувати дозволи які тут + вказані." +notificationType: "Тип сповіщення" +edit: "Редагувати" +emailServer: "Сервер електронної пошти" +enableEmail: "Увімкнути функцію доставки пошти" +emailConfigInfo: "Використовується для підтвердження електронної пошти під час реєстрації, + а також для відновлення паролю" +email: "E-mail" +emailAddress: "E-mail адреса" +smtpConfig: "Налаштування сервера SMTP" +smtpHost: "Хост" +smtpPort: "Порт" +smtpUser: "Ім'я користувача" +smtpPass: "Пароль" +emptyToDisableSmtpAuth: "Залиште назву користувача і пароль пустими для вимкнення + підтвердження SMTP" +smtpSecure: "Використовувати безумовне шифрування SSL/TLS для з'єднань SMTP" +smtpSecureInfo: "Вимкніть при використанні STARTTLS" +testEmail: "Тестовий email" +wordMute: "Блокування слів" +regexpError: "Помилка регулярного виразу" +regexpErrorDescription: "Сталася помилка в регулярному виразі в рядку {line} вашого + слова {tab} слова що ігноруються:" +instanceMute: "Приглушення серверів" +userSaysSomething: "{name} щось сказав(ла)" +makeActive: "Активувати" +display: "Відображення" +copy: "Скопіювати" +metrics: "Показники" +overview: "Огляд" +logs: "Журнал" +delayed: "Затримка" +database: "База даних" +channel: "Канали" +create: "Створити" +notificationSetting: "Параметри сповіщень" +notificationSettingDesc: "Оберіть типи сповіщень для відображення." +useGlobalSetting: "Застосувати глобальнi параметри" +useGlobalSettingDesc: "Якщо увімкнено, то будуть використовуватись налаштування повідомлень + облікового запису, інакше можливо налаштувати індивідуально." +other: "Інше" +regenerateLoginToken: "Оновити Login Token" +regenerateLoginTokenDescription: "Регенерувати внутрішній ключ використовуваний під + час входу. Зазвичай цього не потрібно робити. При регенерації всі пристрої вийдуть + з системи." +setMultipleBySeparatingWithSpace: "Можна вказати кілька значень, відділивши їх пробілом." +fileIdOrUrl: "Ідентифікатор файлу або посилання" +behavior: "Поведінка" +sample: "Приклад" +abuseReports: "Скарги" +reportAbuse: "Поскаржитись" +reportAbuseOf: "Поскаржитись на {name}" +fillAbuseReportDescription: "Будь ласка вкажіть подробиці скарги. Якщо скарга стосується + запису, вкажіть посилання на нього." +abuseReported: "Дякуємо. Ваш звіт було відправлено." +reporter: "Репортер" +reporteeOrigin: "Про кого повідомлено" +reporterOrigin: "Хто повідомив" +forwardReport: "Переслати звіт на віддалений сервер" +forwardReportIsAnonymous: "Замість вашого облікового запису, анонімний системний обліковий + запис буде відображатися як доповідач на віддаленому сервері." +send: "Відправити" +abuseMarkAsResolved: "Позначити скаргу як вирішену" +openInNewTab: "Відкрити в новій вкладці" +openInSideView: "Відкрити збоку" +defaultNavigationBehaviour: "Поведінка навігації за замовчуванням" +editTheseSettingsMayBreakAccount: "Зміна цих параметрів може призвести до пошкодження + вашого акаунта." +instanceTicker: "Інформація про записи на сервері" +waitingFor: "Чекаємо на {x}" +random: "Випадковий" +system: "Система" +switchUi: "Інтерфейс" +desktop: "Десктоп" +clip: "Підбірка" +createNew: "Створити новий" +optional: "Необов'язково" +createNewClip: "Створити підбірку" +public: "Публічний" +i18nInfo: "Firefish перекладається на різні мови волонтерами. Ви можете допомогти + за посиланням: {link}." +manageAccessTokens: "Керування токенами доступу" +accountInfo: "Інформація про акаунт" +notesCount: "Кількість записів" +repliesCount: "Кількість надісланих відповідей" +renotesCount: "Кількість поширень" +repliedCount: "Кількість отриманих відповідей" +renotedCount: "Кількість отриманих поширень" +followingCount: "Кількість підписок" +followersCount: "Кількість підписників" +sentReactionsCount: "Кількість надісланих реакцій" +receivedReactionsCount: "Кількість отриманих реакцій" +pollVotesCount: "Кількість надісланих голосів" +pollVotedCount: "Кількість отриманих голосів" +yes: "Так" +no: "Ні" +driveFilesCount: "Кількість файлів на диску" +driveUsage: "Використання місця на диску" +noCrawle: "Заборонити індексацію" +noCrawleDescription: "Просити пошукові системи не індексувати ваш профіль, записи, + сторінки тощо." +lockedAccountInfo: "Якщо видимість вашого запису не встановлена як \"Тільки підписники\"\ + , то кожен зможе побачити ваш запис, навіть якщо ви вимагаєте підтвердження підписок + вручну." +alwaysMarkSensitive: "Позначати як NSFW за замовчуванням" +loadRawImages: "Відображати вкладені зображення повністю замість ескізів" +disableShowingAnimatedImages: "Не програвати анімовані зображення" +verificationEmailSent: "Електронний лист з підтвердженням відісланий. Будь ласка перейдіть + по посиланню в листі для підтвердження." +notSet: "Не налаштовано" +emailVerified: "Електронну пошту підтверджено" +noteFavoritesCount: "Кількість улюблених записів" +pageLikesCount: "Кількість отриманих вподобань сторінки" +pageLikedCount: "Кількість вподобаних сторінок" +contact: "Контакт" +useSystemFont: "Використовувати стандартний шрифт системи" +clips: "Добірка" +experimentalFeatures: "Експериментальні функції" +developer: "Розробник" +makeExplorable: "Зробіть обліковий запис видимим у розділі \"Огляд\"" +makeExplorableDescription: "Вимкніть, щоб обліковий запис не показувався у розділі + \"Огляд\"." +showGapBetweenNotesInTimeline: "Показувати розрив між записами у стрічці новин" +duplicate: "Дублікат" +left: "Лівий" +center: "Центр" +wide: "Широкий" +narrow: "Вузький" +reloadToApplySetting: "Налаштування ввійде в дію при перезавантаженні. Перезавантажити?" +needReloadToApply: "Зміни набудуть чинності після перезавантаження сторінки." +showTitlebar: "Показати титульний рядок" +clearCache: "Очистити кеш" +onlineUsersCount: "{n} користувачів онлайн" +nUsers: "{n} Користувачів" +nNotes: "{n} Записів" +sendErrorReports: "Надіслати звіт про помилки" +sendErrorReportsDescription: "Якщо увімкнено, детальна інформація про помилки буде + передаватися до Firefish, коли виникає проблема, це допоможе покращити якість роботи + Firefish.\nЦе буде включати інформацію таку як: версія вашої ОС, який браузер ви + використовуєте, ваша активність в Firefish тощо." +myTheme: "Моя тема" +backgroundColor: "Фон" +accentColor: "Акцент" +textColor: "Текст" +saveAs: "Зберегти як…" +advanced: "Розширені" +value: "Значення" +createdAt: "Створено" +updatedAt: "Останнє оновлення" +saveConfirm: "Зберегти зміни?" +deleteConfirm: "Ви дійсно бажаєте це видалити?" +invalidValue: "Некоректне значення." +registry: "Реєстр" +closeAccount: "Закрити обліковий запис" +currentVersion: "Версія, що використовується" +latestVersion: "Сама свіжа версія" +youAreRunningUpToDateClient: "У вас найсвіжіша версія клієнта." +newVersionOfClientAvailable: "Доступніша свіжа версія клієнта." +usageAmount: "Використане" +capacity: "Ємність" +inUse: "Зайнято" +editCode: "Редагувати вихідний текст" +apply: "Застосувати" +receiveAnnouncementFromInstance: "Отримувати сповіщення з серверу" +emailNotification: "Сповіщення електронною поштою" +publish: "Опублікувати" +inChannelSearch: "Пошук за каналом" +useReactionPickerForContextMenu: "Відкривати палітру реакцій правою кнопкою" +typingUsers: "{users} пише" +goBack: "Назад" +info: "Інформація" +user: "Користувач" +administration: "Управління" +expiration: "Опитування закінчується" +middle: "Середній" +global: "Глобальна" +sent: "Відправлене" +hashtags: "Хештеґ" +hide: "Сховати" +indefinitely: "Ніколи" +file: "Файли" +reverse: "Переворот" +colored: "Кольоровий" +label: "Назва" +localOnly: "Локально" +_ffVisibility: + public: "Опублікувати" + private: Приватні + followers: Доступно тільки для підписників +_ad: + back: "Назад" + reduceFrequencyOfThisAd: Менше показувати цю рекламу +_gallery: + unlike: "Видалити вподобайку" + liked: Вподобані записи + like: Подобається + my: Моя галерея +_email: + _follow: + title: "Новий підписник" + _receiveFollowRequest: + title: Ви отримали запит на підписку +_registry: + key: "Ключ" + keys: "Ключі" + domain: "Домен" + createKey: "Створити ключ" + scope: Область +_aboutFirefish: + about: "Firefish - це форк Misskey з відкритим кодом, яке розробляє ThatOneCalculator + з 2022 року." + contributors: "Головні помічники" + allContributors: "Всі помічники" + source: "Вихідний код" + translation: "Перекладати Firefish" + donate: "Пожертвувати Firefish" + donateTitle: Сподобався Firefish? + pleaseDonateToFirefish: Будь ласка, підтримайте розробку Firefish. + pleaseDonateToHost: Також не забудьте підтримати ваш домашній сервер {host}, щоб + допомогти з його операційними витратами. + donateHost: Зробити внесок на рахунок {host} + misskeyContributors: Контрибутори Misskey +_nsfw: + respect: "Приховувати NSFW медіа" + ignore: "Не приховувати NSFW медіа" + force: "Приховувати всі медіа файли" +_mfm: + cheatSheet: "Довідка MFM" + intro: "MFM це ексклюзивна мова розмітки тексту в Firefish, яку можна використовувати + в багатьох місцях. Тут ви можете переглянути приклади її синтаксису." + dummy: "Firefish розширює світ Федіверсу" + mention: "Згадка" + mentionDescription: "За допомогою знака \"@\" перед ім'ям можна згадати конкретного + користувача." + hashtag: "Хештеґ" + hashtagDescription: "За допомогою знака \"решітка\" перед словом задається хештег." + url: "URL" + urlDescription: "Відображаються URL-адреси." + link: "Посилання" + linkDescription: "Окремі частини тексту можуть містити посилання." + bold: "Жирний шрифт" + boldDescription: "Виділяє літери, роблячи їх товщими." + small: "Дрібний шрифт" + smallDescription: "Робить текст маленьким і тонким." + center: "По центру" + centerDescription: "Показує вміст у центрі." + inlineCode: "Код (у рядку)" + inlineCodeDescription: "Відображає підсвічування синтаксису для коду (програми)." + blockCode: "Код (блок)" + blockCodeDescription: "Відображає підсвічування синтаксису для багаторядкового (програмного) + коду в блоці." + inlineMath: "Формула (у рядку)" + inlineMathDescription: "Відображення математичних формул (KaTeX) у рядку" + blockMath: "Формули (блок)" + blockMathDescription: "Відображати математичні формули (KaTeX) блоками" + quote: "Цитата" + quoteDescription: "Відображає зміст як цитату." + emoji: "Кастомні емоджі" + emojiDescription: "Щоб показати нетиповий емоджі, потрібно ввести його назву в двокрапках." + search: "Пошук" + searchDescription: "Відображає вікно пошуку з попередньо введеним текстом." + flip: "Перевернути" + flipDescription: "Віддзеркалює вміст по горизонталі або вертикалі." + jelly: "Анімація (желе)" + jellyDescription: "Створює желеподібну анімацію." + tada: "Анімація (Тада!)" + tadaDescription: "Створює анімацію з відчуттям \"Тада!\"." + jump: "Анімація (стрибки)" + jumpDescription: "Надає вмісту стрибучу анімацію." + bounce: "Анімація (пружина)" + shake: "Анімація (Shake)" + twitch: "Анімація (Twitch)" + spin: "Анімація (Spin)" + x2: "Великий" + x2Description: "Показує контент збільшеним." + x3: "Дуже великий" + x3Description: "Показує контент ще більшим." + x4: "Надзвичайно великий" + x4Description: "Показує контент надзвичайно великим." + blur: "Розмиття" + blurDescription: "Цей ефект зробить контент розмитим. Контент можна зробити чітким, + якщо навести на нього вказівник миші." + font: "Шрифт" + fontDescription: "Встановлює шрифт для контенту." + rotate: "Обертати" + play: Відтворити MFM + alwaysPlay: Завжди автозапускати всі анімовані MFM + twitchDescription: Надає контенту анімацію, що сильно сіпається. + spinDescription: Надає контенту анімацію обертання. + sparkle: Блиск + sparkleDescription: Надає вмісту ефект мерехтливого блиску. + fade: Згасання + fadeDescription: Зменшує та збільшує видимість контенту. + crop: Обрізати + cropDescription: Обрізати вміст. + scale: Масштабувати + positionDescription: Перемістити вміст на вказане значення. + scaleDescription: Масштабувати вміст на вказану величину. + background: Колір фону + foreground: Колір переднього плану + foregroundDescription: Змінити колір тексту на передньому плані. + bounceDescription: Надає контенту пружної анімації. + shakeDescription: Надає контенту тремтливої анімації. + rainbowDescription: Робить вміст веселковим. + rotateDescription: Повертає вміст на вказаний кут. + advancedDescription: Якщо вимкнено, дозволяє лише базову розмітку, якщо не відтворюється + анімований MFM + plainDescription: Вимикає ефекти всіх MFM, що містяться в цьому MFM-ефекті. + stop: Зупинити MFM + plain: Звичайний текст + advanced: Розширені MFM + warn: MFM може містити швидко-рухому або яскраву анімацію + position: Розташування + rainbow: Веселка + backgroundDescription: Змінити колір фону тексту. +_instanceTicker: + none: "Не відображати" + remote: "Відображати для віддалених користувачів" + always: "Відображати завжди" +_serverDisconnectedBehavior: + reload: "Автоматично перезавантажити" + dialog: "Показати діалогове вікно" + quiet: "Показати ненав’язливе попередження" + nothing: Нічого не робити +_channel: + create: "Створити канал" + edit: "Редагувати канал" + setBanner: "Встановити банер" + removeBanner: "Видалити банер" + featured: "Тренди" + following: "Підписки" + usersCount: "{n} учасників" + notesCount: "{n} записів" + nameOnly: Тільки назва + nameAndDescription: Назва та опис + owned: Власні +_menuDisplay: + hide: "Сховати" + sideFull: Збоку + sideIcon: Збоку (тільки іконки) + top: Верх +_wordMute: + muteWords: "Заглушені слова" + muteWordsDescription: "Відокремліть ключові слова пробілами для умови \"І\" або + з нового рядку для умови \"АБО\"." + muteWordsDescription2: "Для використання RegEx, ключові слова потрібно вписати поміж + слешів \"/\"." + softDescription: "Приховати записи які відповідають критеріям зі стрічки." + hardDescription: "Приховати записи які відповідають критеріям зі стрічки подій. + Також приховані записи не будуть додані до стрічки навіть якщо критерії буде змінено." + soft: "М'яко" + hard: "Жорстко" + mutedNotes: "Ігноровані записи" +_theme: + explore: "Оглянути теми" + install: "Встановити тему" + manage: "Керування темами" + code: "Код теми" + description: "Опис" + installed: "Тему {name} встановлено" + installedThemes: "Встановлені теми" + builtinThemes: "Вбудоваі теми" + alreadyInstalled: "Тему вже встановлено" + invalid: "Неправильний формат теми" + make: "Створити тему" + base: "Основа" + defaultValue: "Значення за замовчуванням" + func: "Функції" + lighten: "Яскравість" + inputConstantName: "Введіть назву константи" + importInfo: "Вставляючи сюди код теми, ви можете добавити її до редактору тем" + deleteConstantConfirm: "Ви дійсно бажаєте видалити константу \"{const}\"?" + keys: + accent: "Акцент" + bg: "Фон" + fg: "Текст" + focus: "Фокус" + indicator: "Індикатор" + panel: "Панель" + shadow: "Тінь" + header: "Заголовок" + navBg: "Фон бокової панелі" + navFg: "Текст бокової панелі" + navHoverFg: "Текст бокової панелі (під курсором)" + navActive: "Текст бокової панелі (активне)" + navIndicator: "Індикатор бокової панелі" + link: "Посилання" + hashtag: "Хештеґ" + mention: "Згадка" + mentionMe: "Згадки (мене)" + renote: "Поширити" + modalBg: "Модальний фон" + divider: "Розділювач" + scrollbarHandle: "Ручка смуги прокрутки" + scrollbarHandleHover: "Ручка смуги прокрутки (при наведенні)" + dateLabelFg: "Текст позначок дати" + infoBg: "Фон інформації" + infoFg: "Текст інформації" + infoWarnBg: "Фон попередження" + infoWarnFg: "Текст попередження" + cwBg: "Фон чутливого змісту" + cwFg: "Текст чутливого змісту" + cwHoverBg: "Фон чутливого змісту (при наведенні)" + toastBg: "Фон повідомлення" + toastFg: "Текст повідомлення" + buttonBg: "Фон кнопки" + buttonHoverBg: "Фон кнопки (при наведенні)" + inputBorder: "Край поля вводу" + listItemHoverBg: "Фон елементу в списку (при наведенні)" + driveFolderBg: "Фон папки на диску" + wallpaperOverlay: "Накладання шпалер" + badge: "Значок" + messageBg: "Фон переписки" + accentDarken: "Акцент (Затемлений)" + accentLighten: "Акцент (Освітлений)" + fgHighlighted: "Виділений текст" + color: Колір + refProp: Посилання на властивість + alpha: Прозорість + constant: Стала + refConst: Посилання на сталу + key: Ключ + funcKind: Тип функції + darken: Затемнення + argument: Аргумент + basedProp: Початкова властивість + addConstant: Додати сталу +_sfx: + note: "Новий запис" + noteMy: "Мої записи" + notification: "Сповіщення" + chat: "Чати" + chatBg: "Чати (фон)" + antenna: "Прийом антени" + channel: "Повідомлення каналу" +_ago: + future: "Майбутнє" + justNow: "Щойно" + secondsAgo: "{n}с тому" + minutesAgo: "{n}хв тому" + hoursAgo: "{n}г тому" + daysAgo: "{n}д тому" + weeksAgo: "{n} тиж. тому" + monthsAgo: "{n} міс. тому" + yearsAgo: "{n} р. тому" +_time: + second: "с" + minute: "х" + hour: "г" + day: "д" +_tutorial: + title: "Як користуватися Firefish" + step1_1: "Ласкаво просимо!" + step1_2: "Давайте налаштуємо вас. Ви будете працювати в найкоротші терміни!" + step2_1: "Спочатку, будь ласка, заповніть свій профіль." + step2_2: "Після надання інформації про себе, іншим людям буде легше зрозуміти, чи + хочуть вони бачити ваші записи або стежити за вами." + step3_1: "Тепер настав час на когось підписатися!" + step3_2: "Ваша домашня і соціальна стрічки ґрунтуються на тому, за ким ви стежите, + тому для початку спробуйте стежити за кількома акаунтами.\nНатисніть на гурток + із плюсом у правому верхньому кутку профілю, щоб стежити за ним." + step4_1: "Давайте вийдемо на вас." + step4_2: "Для свого першого повідомлення деякі люди люблять робити {introduction} + повідомлення або просте \"Hello world!\"" + step5_1: "Стрічки, скрізь одні стрічки!" + step5_2: "У вашому сервері включені {timelines} різні стрічки." + step5_3: "Домашня {icon} стрічка - це стрічка, де ви можете бачити записи тих, на + кого ви підписалися." + step5_4: "Місцева {icon} стрічка - це стрічка, де ви можете бачити записи всіх інших + користувачів даного серверу." + step5_5: "Стрічка рекомендованих {icon} - це комбінація домашньої та місцевої стрічок." + step5_6: "На стрічці Рекомендованих {icon} ви можете бачити записи з серверів, які + рекомендують адміністратори." + step5_7: "Глобальна {icon} стрічка - це місце, де ви можете бачити записи від усіх + інших приєднаних серверів." + step6_1: "Отже, що це за місце?" + step6_2: "Ну, ви не просто приєдналися до Firefish. Ви увійшли до Fediverse, взаємопов'язану + мережу з тисяч серверів." + step6_3: "Кожен сервер працює по-своєму, і не на всіх серверах працює Firefish. + Але цей працює! Це трохи складно, але ви швидко розберетеся." + step6_4: "Тепер ідіть, вивчайте і розважайтеся!" +_2fa: + registerSecurityKey: "Зареєструвати новий ключ безпеки" + registerTOTP: Зареєструйте новий пристрій + tapSecurityKey: Будь ласка, дотримуйтесь інструкцій вашого браузера, щоб зареєструвати + апаратний ключ безпеки або ключ-пароль + securityKeyName: Введіть назву ключа + chromePasskeyNotSupported: Паролі Chrome наразі не підтримуються. + removeKey: Видалити ключ безпеки + alreadyRegistered: 2FA вже налаштовано. + step2Click: Натиснувши на цей QR-код, ви зможете зареєструвати 2FA у вашому ключі + безпеки або додатку-автентифікаторі для телефону. + step3Title: Введіть код автентифікації + step1: По-перше, встановіть програму 2FA (наприклад, {a} або {b}) на свій пристрій. + securityKeyNotSupported: Ваш браузер не підтримує ключі безпеки. + step4: Відтепер при наступних спробах входу в систему буде запитуватися такий токен. + securityKeyInfo: Окрім автентифікації за відбитком пальця або PIN-кодом, ви також + можете налаштувати автентифікацію за допомогою апаратних ключів безпеки, які підтримують + FIDO2, щоб додатково захистити свій обліковий запис. + removeKeyConfirm: Дійсно видалити ключ {name}? + token: 2FA Токен + step2Url: 'Також, ви можете ввести цю URL-адресу, якщо використовуєте десктопну + програму:' + step3: Введіть токен, наданий вашим додатком, щоб завершити налаштування. + step2: Потім відскануйте QR-код, що відображається на цьому екрані. +_permissions: + "read:account": "Переглядати дані профілю" + "write:account": "Змінити дані акаунту" + "read:blocks": "Переглянути список заблокованих" + "write:blocks": "Редагувати список заблокованих" + "read:drive": "Переглянути вміст Диска" + "write:drive": "Змінювати вміст Диска" + "read:favorites": "Переглядати обране" + "write:favorites": "Змінювати обране" + "read:following": "Переглядати підписки" + "write:following": "Змінювати підписки" + "read:messaging": "Переглядати повідомлення" + "write:messaging": "Створювати та видаляти повідомлення" + "read:mutes": "Переглядати список ігнорованих" + "write:mutes": "Змінювати список ігнорованих" + "write:notes": "Створення та видалення записів" + "read:notifications": "Переглядати сповіщення" + "read:reactions": "Переглядати реакції" + "write:reactions": "Змінювати реакції" + "write:votes": "Голосувати в опитуваннях" + "read:pages": "Переглядати сторінки" + "write:pages": "Змінювати і видаляти сторінки" + "read:page-likes": "Переглядати вподобання сторінок" + "write:page-likes": "Змінювати вподобання сторінок" + "read:user-groups": "Переглядати групи користувача" + "write:user-groups": "Змінювати групи користувача" + "read:channels": "Переглядати канали" + "write:channels": "Змінювати канали" + "read:gallery": Переглянути галерею + "write:gallery": Редагування галереї + "read:gallery-likes": Переглянути список вподобаних записів галереї + "write:notifications": Керування сповіщеннями + "write:gallery-likes": Редагувати список вподобаних записів галереї +_auth: + shareAccess: "Ви хочете надати \"{name}\" доступ до цього акаунту?" + shareAccessAsk: "Ви впевнені, що хочете надати цій програмі доступ до вашого акаунту?" + denied: "У доступі відмовлено" + allPermissions: Повний доступ до облікового запису + permissionAsk: 'Цей додаток запитує наступні дозволи:' + copyAsk: 'Будь ласка, вставте наступний код авторизації в додаток:' + pleaseGoBack: Будь ласка, поверніться до додатку + callback: Повернення до додатку +_antennaSources: + all: "Усі записи" + homeTimeline: "Записи тих, на кого ви підписані" + instances: Записи від усіх користувачів на сервері + userGroup: Записи від користувачів у вказаній групі + users: Записи обраних користувачів + userList: Дописи користувачів із вказаного списку +_weekday: + sunday: "Неділя" + monday: "Понеділок" + tuesday: "Вівторок" + wednesday: "Середа" + thursday: "Четвер" + friday: "П'ятниця" + saturday: "Субота" +_widgets: + memo: "Нагадування" + notifications: "Сповіщення" + timeline: "Стрічка" + calendar: "Календар" + trends: "Тенденції" + clock: "Годинник" + rss: "RSS-читач" + activity: "Активність" + photos: "Фото" + digitalClock: "Цифровий годинник" + federation: "Федіверс" + postForm: "Створення запису" + slideshow: "Слайд-шоу" + button: "Кнопка" + onlineUsers: "Користувачі онлайн" + jobQueue: "Черга завдань" + serverMetric: "Показники сервера" + aiscript: "Консоль AiScript" + _userList: + chooseList: Оберіть список + rssTicker: RSS-тікер + instanceCloud: Хмара серверів + unixClock: Годинник UNIX + userList: Список користувачів + serverInfo: Інформація про сервер +_cw: + hide: "Сховати" + show: "Показати більше" + chars: "{count} символів" + files: "{count} файлів" +_poll: + noOnlyOneChoice: "Потрібні принаймні два варіанти" + choiceN: "Варіант {n}" + noMore: "Більше варіантів додати не можна" + canMultipleVote: "Можна вибрати кілька варіантів" + expiration: "Опитування закінчується" + infinite: "Ніколи" + at: "На даті..." + after: "Через..." + deadlineDate: "Дата закінчення" + deadlineTime: "г" + duration: "Тривалість" + votesCount: "{n} голосів" + totalVotes: "Всього {n} голосів" + vote: "Голосувати" + showResult: "Переглянути результати" + voted: "Проголосовано" + closed: "Завершено" + remainingDays: "Залишилось {d} днів {h} годин" + remainingHours: "Залишилось {h} годин {m} хвилин" + remainingMinutes: "Залишилось {m} хвилин {s} секунд" + remainingSeconds: "Залишилось {s} секунд" +_visibility: + public: "Публічний" + publicDescription: "Ваш запис буде видно в усіх публічних стрічках" + home: "Домашній" + homeDescription: "Лише на домашній стрічці" + followers: "Підписники" + followersDescription: "Зробити видимим тільки для ваших підписників і згаданих користувачів" + specified: "Особисто" + specifiedDescription: "Лише для певних користувачів" + localOnly: "Локально" + localOnlyDescription: "Приховано для віддалених користувачів" +_postForm: + replyPlaceholder: "Відповідь на цей запис..." + quotePlaceholder: "Прокоментуйте цей запис..." + channelPlaceholder: "Опублікувати в каналі..." + _placeholders: + a: "Чим займаєтесь?" + b: "Що відбувається навколо вас?" + c: "Що у вас на думці?" + d: "Що ви хочете висловити?" + e: "Напишіть тут, будь ласка..." + f: "Чекаю коли ви напишете..." +_profile: + name: "Ім'я" + username: "Ім'я користувача" + description: "Про себе" + youCanIncludeHashtags: "Ви також можете включити хештеги у свій опис." + metadata: "Додаткова інформація" + metadataEdit: "Редагувати додаткову інформацію" + metadataDescription: "Ви можете вказати до чотирьох пунктів додаткової інформації + у своєму профілі. Ви можете додати тег {a} або {l} за допомогою {rel}, щоб підтвердити + посилання у своєму профілі!" + metadataLabel: "Назва" + metadataContent: "Вміст" + changeAvatar: "Змінити аватар" + changeBanner: "Змінити банер" + locationDescription: Якщо ви спочатку введете своє місто, іншим користувачам буде + показано ваш місцевий час. +_exportOrImport: + allNotes: "Всі записи" + followingList: "Підписки" + muteList: "Ігнорувати" + blockingList: "Заблокувати" + userLists: "Списки" + excludeInactiveUsers: Вилучити неактивних користувачів + excludeMutingUsers: Вилучити заглушених користувачів +_charts: + federation: "Федіверс" + apRequest: "Запити" + usersTotal: "Загальна кількість користувачів" + activeUsers: "Активні користувачі" + notesTotal: "Загальна кількість записів" + filesIncDec: "Зміни кількості файлів" + filesTotal: "Загальна кількість файлів" + storageUsageIncDec: Різниця в використанні ємності диску + remoteNotesIncDec: Різниця в кількості віддалених записів + notesIncDec: Різниця в кількості записів + localNotesIncDec: Різниця в кількості локальних записів + storageUsageTotal: Загальне використання пам'яті + usersIncDec: Різниця в кількості користувачів +_instanceCharts: + requests: "Запити" + usersTotal: "Сумарна кількість користувачів" + notes: "Різниця в кількості зроблених записів" + notesTotal: "Сумарна кількість записів" + ff: "Різниця кількості підписників " + ffTotal: "Кількість підписників" + cacheSizeTotal: "Сумарний розмір кешу" + files: "Різниця в кількості файлів" + filesTotal: "Сумарна кількість файлів" + users: Різниця в кількості користувачів + cacheSize: Різниця в розмірі кешу +_timelines: + home: "Домівка" + local: "Локальна" + social: "Соціальна" + global: "Глобальна" + recommended: Рекомендована +_pages: + newPage: "Створити сторінку" + editPage: "Редагувати сторінку" + readPage: "Перегляд вихідного коду" + created: "Сторінка успішно створена" + updated: "Сторінка успішно оновлена" + deleted: "Сторінку видалено" + pageSetting: "Налаштування сторінки" + nameAlreadyExists: "Вказана адреса сторінки вже існує" + invalidNameTitle: "Вказана адреса сторінки неприпустима" + invalidNameText: "Переконайтеся, що поле заголовка сторінки не порожнє" + editThisPage: "Редагувати цю сторінку" + viewSource: "Переглянути вихідний код" + viewPage: "Переглянути свої сторінки" + like: "Вподобати" + unlike: "Видалити вподобайку" + my: "Мої сторінки" + liked: "Вподобані сторінки" + featured: "Популярні" + inspector: "Інспектор" + contents: "Вміст" + content: "Блок сторінки" + variables: "Змінні" + title: "Заголовок" + url: "URL сторінки" + summary: "Короткий зміст" + alignCenter: "Рівняти елементи по центру" + hideTitleWhenPinned: "Приховати заголовок сторінки при закріпленні в профілі" + font: "Шрифт" + fontSerif: "Шрифт Serif" + fontSansSerif: "Шрифт Sans serif" + eyeCatchingImageSet: "Встановити мініатюру" + eyeCatchingImageRemove: "Видалити мініатюру" + chooseBlock: "Додати блок" + selectType: "Виберіть тип" + enterVariableName: "Введіть назву для змінної" + variableNameIsAlreadyUsed: "Ця назва вже використовується іншою змінною" + contentBlocks: "Контент" + inputBlocks: "Ввід" + specialBlocks: "Особливе" + blocks: + text: "Текст" + textarea: "Текстова область" + section: "Розділ" + image: "Зображення" + button: "Кнопка" + if: "Якщо" + _if: + variable: "Змінні" + post: "Створення нотатки" + _post: + text: "Вміст" + canvasId: "Ідентифікатор полотна" + attachCanvasImage: Прикріпити зображення полотна + textInput: "Введення тексту" + _textInput: + name: "Ім'я змінної" + text: "Назва" + default: "Значення за замовчуванням" + textareaInput: "Багаторядкове введення тексту" + _textareaInput: + name: "Ім'я змінної" + text: "Назва" + default: "Значення за замовчуванням" + numberInput: "Числове введення" + _numberInput: + name: "Ім'я змінної" + text: "Назва" + default: "Значення за замовчуванням" + canvas: "Полотно" + _canvas: + id: "Ідентифікатор полотна" + width: "Ширина" + height: "Висота" + note: "Вбудований запис" + _note: + id: "Ідентифікатор запису" + idDescription: "Також можна вказати посилання на запис." + detailed: "Детальний вигляд" + switch: "Перемикач" + _switch: + name: "Ім'я змінної" + text: "Назва" + default: "Значення за замовчуванням" + counter: "Лічильник" + _counter: + name: "Ім'я змінної" + text: "Назва" + inc: "Збільшити на" + _button: + text: "Напис" + colored: "Кольоровий" + action: "Дія кнопки" + _action: + dialog: "Показати повідомлення" + _dialog: + content: "Вміст" + resetRandom: "Скидання генератора випадковості" + pushEvent: "Надіслати подію" + _pushEvent: + event: "Назві події" + message: "Повідомлення для відображення при активації" + variable: "Змінна для надсилання" + no-variable: "Відсутньо" + callAiScript: "Виклик AiScript" + _callAiScript: + functionName: "Ім'я функції" + radioButton: "Вибір" + _radioButton: + name: "Ім'я змінної" + title: "Напис" + values: "Варіанти, розділені розривами рядків" + default: "Значення за замовчуванням" + script: + categories: + flow: "Керування потоком" + logical: "Логічні операції" + operation: "Обчислення" + comparison: "Порівняння" + random: "Випадковість" + value: "Значення" + fn: "Функції" + text: "Дії з текстом" + convert: "Перетворення" + list: "Списки" + blocks: + text: "Текст" + multiLineText: "Текст (багаторядковий)" + textList: "Текстовий список" + _textList: + info: "Використовувати новий рядок як роздільник для вводу" + strLen: "Довжина тексту" + _strLen: + arg1: "Текст" + strPick: "Вибрати символ" + _strPick: + arg1: "Текст" + arg2: "Розташування символу" + strReplace: "Заміна тексту" + _strReplace: + arg1: "Текст" + arg2: "Текст, який потрібно замінити" + arg3: "Заміняти на" + strReverse: "Перевернути текст" + _strReverse: + arg1: "Текст" + join: "Конкатенація тексту" + _join: + arg1: "Списки" + arg2: "Розділювач" + add: "Додати" + _add: + arg1: "A" + arg2: "B" + subtract: "Відняти" + _subtract: + arg1: "A" + arg2: "B" + multiply: "Помножити" + _multiply: + arg1: "A" + arg2: "B" + divide: "Поділити" + _divide: + arg1: "A" + arg2: "B" + mod: "Остача" + _mod: + arg1: "A" + arg2: "B" + round: "Десяткове округлення" + _round: + arg1: "Число" + eq: "A дорівнює B" + _eq: + arg1: "A" + arg2: "B" + notEq: "A не дорівнює B" + _notEq: + arg1: "A" + arg2: "B" + and: "А І Б" + _and: + arg1: "A" + arg2: "B" + or: "A АБО B" + _or: + arg1: "A" + arg2: "B" + lt: "< A менше, ніж B" + _lt: + arg1: "A" + arg2: "B" + gt: "> A більше, ніж B" + _gt: + arg1: "A" + arg2: "B" + ltEq: "<= A менше або дорівнює B" + _ltEq: + arg1: "A" + arg2: "B" + gtEq: ">= A більше або дорівнює B" + _gtEq: + arg1: "A" + arg2: "B" + if: "Умова" + _if: + arg1: "Якщо" + arg2: "Якщо так" + arg3: "Якщо ні" + not: "НЕ" + _not: + arg1: "НЕ" + random: "Випадково" + _random: + arg1: "Імовірність" + rannum: "Випадкове число" + _rannum: + arg1: "Мінімальне значення" + arg2: "Максимальне значення" + randomPick: "Випадковий вибір зі списку" + _randomPick: + arg1: "Списки" + dailyRandom: "Випадково (триває добу)" + _dailyRandom: + arg1: "Імовірність" + dailyRannum: "Випадкове число (триває добу)" + _dailyRannum: + arg1: "Мінімальне значення" + arg2: "Максимальне значення" + dailyRandomPick: "Випадково вибрати зі списку (триває добу)" + _dailyRandomPick: + arg1: "Списки" + seedRandom: "Випадковість (з насінням)" + _seedRandom: + arg1: "Насіння" + arg2: "Імовірність" + seedRannum: "Випадкове число (з насінням)" + _seedRannum: + arg1: "Насіння" + arg2: "Мінімальне значення" + arg3: "Максимальне значення" + seedRandomPick: "Випадково вибрати зі списку (з насінням)" + _seedRandomPick: + arg1: "Насіння" + arg2: "Списки" + DRPWPM: "Випадково вибрати зі зваженого списку (триває добу)" + _DRPWPM: + arg1: "Текстовий список" + pick: "Вибір зі списку" + _pick: + arg1: "Списки" + arg2: "Позиція" + listLen: "Отримати довжину списку" + _listLen: + arg1: "Списки" + number: "Число" + stringToNumber: "Текст на число" + _stringToNumber: + arg1: "Текст" + numberToString: "Число на текст" + _numberToString: + arg1: "Число" + splitStrByLine: "Розбиття тексту на рядки" + _splitStrByLine: + arg1: "Текст" + ref: "Змінні" + aiScriptVar: "Змінна AiScript" + fn: "Функція" + _fn: + slots: "Паз" + slots-info: "Використовувати нову лінію як роздільник пазів" + arg1: "Вивід" + for: "Повторення" + _for: + arg1: "Кількість повторень" + arg2: "Дія" + typeError: "Паз {slot} приймає \"{expect}\" тип, але надана змінна має тип \"\ + {actual}\"!" + thereIsEmptySlot: "Паз {slot} пустий!" + types: + string: "Текст" + number: "Число" + boolean: "Прапорець" + array: "Списки" + stringArray: "Текстовий список" + emptySlot: "Пустий паз" + enviromentVariables: "Змінні середовища" + pageVariables: "Елемент сторінки" + argVariables: "Стрічка вводу" +_relayStatus: + requesting: "Очікує затвердження" + accepted: "Затверджено" + rejected: "Відхилено" +_notification: + fileUploaded: "Файл успішно завантажено" + youGotMention: "{name} згадує вас" + youGotReply: "{name} відповідає" + youGotQuote: "{name} цитує вас" + youRenoted: "{name} поширює" + youGotPoll: "{name} бере участь в опитуванні" + youGotMessagingMessageFromUser: "Повідомлення від {name}" + youGotMessagingMessageFromGroup: "Нове повідомлення в групі {name}" + youWereFollowed: "Новий підписник" + youReceivedFollowRequest: "Ви отримали запит на підписку" + yourFollowRequestAccepted: "Запит на підписку прийнято" + youWereInvitedToGroup: "Запрошення до групи" + _types: + all: "Все" + follow: "Підписки" + mention: "Згадка" + reply: "Відповіді" + renote: "Поширення" + quote: "Цитування" + reaction: "Реакції" + pollVote: "Опитування" + receiveFollowRequest: "Запити на підписку" + followRequestAccepted: "Прийняті підписки" + groupInvited: "Запрошення до груп" + app: "Сповіщення від додатків" + pollEnded: Опитування закінчено + _actions: + reply: "Відповісти" + renote: "Поширення" + followBack: також підписався на вас + emptyPushNotificationMessage: Push-сповіщення були оновлені + voted: проголосував на вашому опитуванні + renoted: поширив ваш запис + reacted: відреагував на ваш запис + pollEnded: Стали доступні результати опитування +_deck: + alwaysShowMainColumn: "Завжди показувати головну колонку" + columnAlign: "Вирівняти стовпці" + addColumn: "Додати стовпець" + swapLeft: "Пересунути ліворуч" + swapRight: "Пересунути праворуч" + swapUp: "Пересунути вгору" + swapDown: "Пересунути вниз" + stackLeft: "У стовпчик вліво" + popRight: "Витягнути вправо" + profile: "Простір" + _columns: + main: "Головна" + widgets: "Віджети" + notifications: "Сповіщення" + tl: "Стрічка" + antenna: "Антена" + list: "Списки" + mentions: "Згадки" + direct: "Особисті повідомлення" + channel: Канал + newProfile: Новий простір + introduction2: Натисніть на + у правій частині екрана, щоб додавати нові стовпці + по бажанню. + configureColumn: Налаштування стовпців + introduction: Створіть ідеальний інтерфейс для себе, вільно розташовуючи стовпці! + widgetsIntroduction: Будь ласка, виберіть "Редагувати віджети" в меню колонки і + додайте віджет. + renameProfile: Перейменувати простір + deleteProfile: Видалити простір + nameAlreadyExists: Простір із такою назвою вже існує. +removeReaction: Видалити вашу реакцію +renoteMute: Ігнорувати поширення +renoteUnmute: Показувати поширення +flagSpeakAsCat: Говорити як кішка +accessibility: Доступність +priority: Пріорітет +high: Високий +customCss: Користувацькі CSS +itsOn: Увімкнено +showingPastTimeline: Наразі відображається стара стрічка +enabled: Увімкнено +noMaintainerInformationWarning: Інформація про супровідника не налаштована. +recommended: Рекомендоване +resolved: Вирішено +itsOff: Вимкнено +emailRequiredForSignup: Вимагати адресу електронної пошти для реєстрації +moderation: Модерація +selectInstance: Оберіть сервер +instanceSecurity: Безпека сервера +searchPlaceholder: Шукати у Firefish +editNote: Відредагувати запис +enableEmojiReactions: Ввімкнути реакції емодзі +low: Низький +emailNotConfiguredWarning: Адрес електронної пошти не встановлено. +unresolved: Не вирішено +offline: Не в мережі +disabled: Вимкнено +configure: Налаштувати +popularPosts: Популярні сторінки +silenced: Ігнорується +manageGroups: Керування групами +active: Активний +whatIsNew: Показати зміни +deleted: Видалено +selectChannel: Виберіть канал +flagSpeakAsCatDescription: Ваші записи будуть няніфіковані у режимі кота +userSaysSomethingReason: '{name} сказав(ла) {reason}' +clear: Очистити +userInfo: Інформація про користувача +selectAccount: Оберіть обліковий запис +switchAccount: Змінити обліковий запис +accounts: Облікові записи +switch: Змінити +noBotProtectionWarning: Захист від ботів не налаштовано. +gallery: Галерея +recentPosts: Недавні сторінки +privateModeInfo: Якщо увімкнено, лише сервери з білого списку можуть федеруватися + з вашим сервером. Всі повідомлення будуть приховані від публіки. +troubleshooting: Вирішення проблем +customCssWarn: Цей параметр слід використовувати лише тоді, коли ви знаєте, що він + робить. Введення неправильних значень може призвести до того, що клієнт перестане + нормально функціонувати. +newer: новіші +older: старіші +addDescription: Додати опис +notSpecifiedMentionWarning: У цьому записі згадуються користувачі, яких не було включено + до списку одержувачів +markAllAsRead: Позначити все як прочитане +userPagePinTip: Ви можете відображати записи тут, вибравши "Прикріпити до профілю" + в меню окремих записів. +unknown: Невідомо +onlineStatus: Онлайн-статус +hideOnlineStatus: Приховати онлайн-статус +online: В мережі +breakFollow: Видалити підписника +translate: Перекласти +translatedFrom: Перекладено з {x} +userSaysSomethingReasonQuote: '{name} цитував запис з {reason}' +userSaysSomethingReasonRenote: '{name} поширив запис з {reason}' +notRecommended: Не рекомендується +botProtection: Захист від ботів +instanceBlocking: Керування Федерацією +privateMode: Приватний режим +allowedInstances: Сервери у білому списку +previewNoteText: Показати прев'ю +antennaInstancesDescription: Введіть по одному хосту сервера на рядок +breakFollowConfirm: Ви дійсно бажаєте видалити підписника? +ads: Рекламні оголошення +cw: Попередження про вміст +hiddenTags: Приховані хештеги +noInstances: Немає серверів +misskeyUpdated: Firefish оновлено! +received: Отримане +xl: Надвеликий +searchResult: Результати пошуку +useBlurEffect: Використовувати ефекти розмиття в інтерфейсі +learnMore: Дізнатися більше +usernameInfo: Ім'я, яке ідентифікує ваш обліковий запис серед інших на цьому сервері. Ви + можете використовувати алфавіт (a~z, A~Z), цифри (0~9) або знаки підкреслення (_). + Ім'я користувача не може бути змінено пізніше. +noThankYou: Ні, дякую +keepCw: Зберігати попередження про вміст +showEmojisInReactionNotifications: Показувати емодзі у сповіщеннях про реакції +accountMoved: 'Користувач переїхав до нового облікового запису:' +expandOnNoteClickDesc: Якщо цю опцію вимкнено, ви все одно зможете відкривати дописи + в меню, клацнувши правою кнопкою миші або натиснувши на мітку часу. +deleteAccountConfirm: Це призведе до незворотного видалення вашого облікового запису. + Приступити? +unread: Непрочитане +filter: Фільтри +useDrawerReactionPickerForMobile: Відображати вибирач реакцій як шухляду на мобільному + телефоні +leaveGroupConfirm: Ви впевнені, що хочете залишити "{name}"? +clickToFinishEmailVerification: Будь ласка, натисніть [{ok}], щоб завершити перевірку + електронної пошти. +welcomeBackWithName: Ласкаво просимо назад, {name} +overridedDeviceKind: Тип пристрою +themeColor: Колір теми серверу +oneDay: Один день +instanceDefaultLightTheme: Світла тема за замовчуванням для сервера +oneWeek: Одна неділя +instanceDefaultDarkTheme: Темна тема за замовчуванням для сервера +video: Відео +audio: Аудіо +rateLimitExceeded: Перевищено ліміт +numberOfPageCacheDescription: Збільшення цієї величини покращить зручність для користувачів, + але призведе до збільшення навантаження на сервер та використання більшої кількості + пам'яті. +lastActiveDate: Останній раз використовувався у +statusbar: Панель статусу +speed: Швидкість +sensitiveMediaDetection: Виявлення NSFW медіа +cannotUploadBecauseNoFreeSpace: Завантаження не вдалося через брак місця на Диску. +cannotUploadBecauseExceedsFileSizeLimit: Цей файл не може бути завантажений, оскільки + він перевищує максимально дозволений розмір. +account: Обліковий запис +move: Перемістити +pushNotification: Push-сповіщення +subscribePushNotification: Увімкнути push-сповіщення +unsubscribePushNotification: Вимкнути push-сповіщення +pushNotificationAlreadySubscribed: Push-сповіщення вже увімкнено +enterSendsMessage: Натисніть Enter у повідомленнях, щоб надіслати повідомлення (якщо + вимкнено, то Ctrl + Enter) +showAds: Показувати рекламні оголошення +customMOTD: Користувацькі MOTD (повідомлення на заставці) +customSplashIcons: Користувацькі іконки заставки (URL) +splash: Заставка +adminCustomCssWarn: Цей параметр слід використовувати, тільки якщо ви знаєте, що він + робить. Введення неправильних значень може призвести до того, що ВСІ клієнти перестануть + нормально працювати. Будь ласка, переконайтеся, що ваш CSS працює належним чином, + протестувавши його в налаштуваннях користувача. +_filters: + followersOnly: Тільки підписники + fromUser: Від користувача + notesBefore: Записи до + withFile: З файлом + fromDomain: З домену + notesAfter: Записи після + followingOnly: Тільки підписки +sendModMail: Надіслати повідомлення про модерацію +enableServerMachineStats: Увімкнути статистику серверного обладнання +enableIdenticonGeneration: Увімкнути генерацію Identicon +_sensitiveMediaDetection: + analyzeVideosDescription: Аналізує відео так само як і зображення. Це трохи збільшить + навантаження на сервер. + description: Зменшує навантаження на серверну модерацію завдяки автоматичному розпізнаванню + NSFW медіа за допомогою машинного навчання. Це трохи збільшить навантаження на + сервер. + sensitivity: Чутливість виявлення + sensitivityDescription: Зменшення чутливості призведе до зменшення кількості хибних + спрацьовувань, тоді як збільшення чутливості призведе до зменшення кількості пропущених + спрацьовувань. + setSensitiveFlagAutomatically: Позначити як NSFW + setSensitiveFlagAutomaticallyDescription: Результати внутрішнього виявлення будуть + збережені, навіть якщо цю опцію вимкнено. + analyzeVideos: Ввімкнути аналіз відео +_emailUnavailable: + used: Ця електронна пошта вже використовується + format: Формат цієї адреси електронної пошти є неправильним + mx: Цей сервер електронної пошти є недійсним + disposable: Використовувати одноразові адреси електронної пошти заборонено + smtp: Цей поштовий сервер не відповідає +_messaging: + dms: Приватні + groups: Групи +_instanceMute: + instanceMuteDescription: Це приховає всі записи/поширення із вказаних серверів, + включно з відповідями користувачам заглушеного серверу. + title: Приховує записи з перелічених серверів. + instanceMuteDescription2: Розділити новими рядками + heading: Список серверів для заглушення +_experiments: + enablePostImports: Ввімкнути імпорт записів + title: Експерименти + postImportsCaption: Дозволяє користувачам імпортувати свої записи з минулих облікових + записів Firefish, Misskey, Mastodon, Akkoma і Pleroma. Це може спричинити зниження + швидкості під час завантаження, якщо ваша черга перевантажена. +_dialog: + charactersExceeded: 'Перевищено максимальну кількість символів! Обмеження: {current}/{max}' + charactersBelow: 'Недостатньо символів! Обмеження: {current}/{min}' +jumpToSpecifiedDate: Перейти до конкретної дати +quitFullView: Закрити повний вигляд +ffVisibility: Видимість підписок/підписників +numberOfColumn: Кількість стовпців +failedToFetchAccountInformation: Не вдалося отримати інформацію про обліковий запис +reflectMayTakeTime: Може пройти деякий час, перш ніж зміни набудуть чинності. +recentNHours: Останні {n} годин +logoutConfirm: Ви впевнені, що хочете вийти? +enableRecommendedTimeline: Увімкнути рекомендовану стрічку +_accountDelete: + requestAccountDelete: Запросити видалення облікового запису + accountDelete: Видалити обліковий запис + mayTakeTime: Оскільки видалення облікового запису є ресурсоємним процесом, він може + зайняти деякий час, залежно від того, скільки контенту ви створили та скільки + файлів завантажили. + sendEmail: Коли ваш обліковий запис буде видалено, ми повідомимо на вказану вами + електронну пошту. + started: Процес видалення розпочався. + inProgress: Наразі триває видалення +_preferencesBackups: + deleteConfirm: Видалити резервну копію {name}? + applyConfirm: Ви дійсно хочете застосувати резервну копію "{name}" до цього пристрою? + Існуючі налаштування цього пристрою буде замінено. + saveConfirm: Зберегти резервну копію як {name}? + saveNew: Зберегти нову резервну копію + save: Зберегти зміни + inputName: Будь ласка, введіть назву для цієї резервної копії + loadFile: Завантажити з файлу + updatedAt: 'Оновлено: {date} {time}' + invalidFile: Неправильний формат файлу + apply: Застосувати до цього пристрою + list: Створені резервні копії + cannotSave: Збереження невдале + nameAlreadyExists: Резервна копія з назвою "{name}" вже існує. Будь ласка, введіть + іншу назву. + renameConfirm: Перейменувати цю резервну копію з "{old}" на "{new}"? + noBackups: Резервних копій немає. Ви можете створити резервну копію налаштувань + клієнта на цьому сервері за допомогою "Створити нову резервну копію". + createdAt: 'Створено: {date} {time}' + cannotLoad: Не вдалося завантажити +beta: Бета +customMOTDDescription: Користувацькі повідомлення для MOTD (заставки), розділені новими + рядками, які будуть показуватися випадковим чином щоразу, коли користувач завантажує/перезавантажує + сторінку. +replayTutorial: Перезапустити туторіал +_forgotPassword: + ifNoEmail: Якщо ви не використовували електронну пошту під час реєстрації, зверніться + до адміністратора серверу. + enterEmail: Введіть адресу електронної пошти, яку ви використовували для реєстрації. + На неї буде надіслано посилання, за яким ви зможете скинути пароль. + contactAdmin: Цей сервер не підтримує використання адрес електронної пошти, будь + ласка, зверніться до адміністратора сервера, щоб скинути пароль. +reactionPickerSkinTone: Бажаний колір шкіри емодзі +addInstance: Додати сервер +jumpToPrevious: Перейти до попереднього +listsDesc: Списки дозволяють створювати стрічки із вказаними користувачами. Доступ + до них можна отримати на сторінці стрічок. +channelFederationWarn: Канали наразі федеруються з іншими серверами +lastCommunication: Останнє повідомлення +edited: Відредаговано {date} о {time} +confirmToUnclipAlreadyClippedNote: Цей запис уже в підбірці "{name}". Чи бажаєте ви + натомість видалити пост із підбірки? +quickAction: Швидкі дії +remoteOnly: Тільки віддалені +failedToUpload: Помилка завантаження +moveFrom: Мігрувати на цей обліковий запис зі старого облікового запису +preventAiLearning: Захист від скрепінгу ШІ-ботів +moveAccountDescription: Цей процес є незворотнім. Переконайтеся, що ви створили псевдонім + для цього акаунта в новому акаунті перед переїздом. Будь ласка, введіть тег акаунта + у форматі @person@server.com +_signup: + almostThere: Майже готово + emailAddressInfo: Будь ласка, введіть свою адресу електронної пошти. Вона не буде + опублікована. + emailSent: На вашу електронну адресу ({email}) було надіслано лист із підтвердженням. + Будь ласка, перейдіть за посиланням, щоб завершити створення облікового запису. +defaultValueIs: 'За замовчуванням: {value}' +shareWithNote: Поділитися з записом +classic: Відцентрований +size: Розмір +slow: Повільно +alt: ALT +auto: Автоматично +oneHour: Одна година +instanceDefaultThemeDescription: Введіть код теми в об'єктному форматі. +cropImageAsk: Чи бажаєте ви обрізати це зображення? +noEmailServerWarning: Поштовий сервер не налаштовано. +thereIsUnresolvedAbuseReportWarning: Є не розглянуті звіти. +image: Зображення +check: Перевірити +isSystemAccount: Цей акаунт створений і автоматично управляється системою. Будь ласка, + не модеруйте, не редагуйте, не видаляйте та не втручайтеся в цей акаунт будь-яким + іншим чином, інакше це може призвести до поломки вашого серверу. +document: Документація +driveCapOverrideCaption: Ви можете скинути ємність до значення за замовчуванням, ввівши + значення 0 або менше. +numberOfPageCache: Кількість кешованих сторінок +pleaseSelect: Оберіть варіант +refreshInterval: 'Інтервал оновлення ' +enableAutoSensitive: Автоматичне маркування NSFW +cannotUploadBecauseInappropriate: Цей файл не може бути завантажений тому що його + частини були виявлені як потенційне NSFW. +sendPushNotificationReadMessageCaption: На короткий час буде показано сповіщення з + текстом "{emptyPushNotificationMessage}". Це може призвести до збільшення споживання + заряду акумулятора вашого пристрою, якщо це можливо. +pushNotificationNotSupported: Ваш браузер або сервер не підтримує push-сповіщення +showUpdates: Показувати спливаюче вікно при оновленні Firefish +updateAvailable: Можливо, є доступне оновлення! +recommendedInstancesDescription: Рекомендовані сервери відокремлюються переведенням + рядка, щоб з'явитися на стрічці рекомендацій. +caption: Автоматичний опис +showAdminUpdates: Вказати, що доступна нова версія Firefish (тільки для адміністратора) +defaultReaction: Емодзі реакція за замовчуванням для вихідних і вхідних записів +license: Ліцензія +signupsDisabled: Реєстрація на цьому сервері наразі відключена, але ви завжди можете + зареєструватися на іншому сервері! Якщо у вас є код запрошення на цей сервер, будь + ласка, введіть його нижче. +customKaTeXMacro: Користувацькі макроси KaTeX +enableCustomKaTeXMacro: Увімкнути користувацькі макроси KaTeX +apps: Додатки +isModerator: Модератор +isAdmin: Адміністратор +isPatron: Патрон Firefish +swipeOnMobile: Дозволити гортання між сторінками +migration: Міграція +swipeOnDesktop: Дозволити свайп у мобільному стилі на десктопі +logoImageUrl: URL-адреса зображення логотипу +moveTo: Перенести поточний обліковий запис на новий +moveFromDescription: Це встановить псевдонім вашого старого облікового запису, щоб + ви могли перейти зі старого облікового запису до цього поточного. Зробіть це ДО + переходу зі старого акаунта. Будь ласка, введіть тег акаунта у форматі @person@server.com +moveToLabel: 'Обліковий запис, на який ви мігруєте:' +moveAccount: Перемістити обліковий запис! +moveFromLabel: 'Обліковий запис, з якого ви мігруєте:' +_plugin: + install: Встановлення плагінів + manage: Керування плагінами + installWarn: Будь ласка, не встановлюйте ненадійні плагіни. +_skinTones: + yellow: Жовтий + mediumLight: Середньо-світлий + medium: Середній + mediumDark: Середньо-темний + dark: Темний + light: Світлий +tenMinutes: 10 хвилин +expandOnNoteClick: Відкрити запис кліком +preferencesBackups: Резервне копіювання +unlikeConfirm: Дійсно видалити вподобайку? +fullView: Повний вигляд +postToGallery: Опублікувати в галереї +memo: Нотатки +allowedInstancesDescription: Хости серверів, які будуть допущені до федерації, кожен + з яких відокремлюється новим рядком (стосується лише приватного режиму). +squareAvatars: Квадратні аватарки +aiChanMode: Режим ШІ +controlPanel: Панель керування +manageAccounts: Керування обліковими записами +incorrectPassword: Неправильний пароль. +voteConfirm: Підтвердити свій голос за "{choice}"? +leaveGroup: Залишити групу +smartphone: Смартфон +mutePeriod: Тривалість глушіння +requireAdminForView: Ви маєте увійти з облікового запису адміністратора, щоб переглянути + це. +fast: Швидко +isBot: Цей обліковий запис є ботом +isLocked: Цей обліковий запис має схвалення запитів на підписку +silenceThisInstance: Ігнорувати цей сервер +hideOnlineStatusDescription: Приховування вашого онлайн-статусу знижує зручність деяких + функцій, таких як пошук. +accountDeletionInProgress: Наразі триває видалення облікового запису +makeReactionsPublic: Зробити історію реакцій публічною +continueThread: Показати наступні відповіді +unmuteThread: Скасувати глушіння гілки +ffVisibilityDescription: Дозволяє налаштувати, хто може бачити, на кого ви підписані + і хто підписаний на вас. +tablet: Планшет +cropImage: Обрізати зображення +recentNDays: Останні {n} днів +navbar: Панель навігації +noGraze: Будь ласка, вимкніть розширення браузера "Graze для Mastodon", оскільки воно + заважає роботі Firefish. +preventAiLearningDescription: Попросити сторонні мовні моделі ШІ не вивчати вміст, + який ви завантажуєте, наприклад, записи та зображення. +userSaysSomethingReasonReply: '{name} відповів на пост з {reason}' +secureMode: Безпечний режим (Authorized Fetch) +seperateRenoteQuote: Розділити кнопки поширення та цитати +makeReactionsPublicDescription: Це зробить список усіх ваших минулих реакцій публічно + видимим. +muteThread: Заглушити гілку +sendPushNotificationReadMessage: Видаляти push-сповіщення після того, як відповідні + сповіщення або повідомлення будуть прочитані +unclip: Видалити з підбірки +silencedInstances: Ігноровані сервери +typeToConfirm: Введіть {x} щоб підтвердити +silencedWarning: Ця сторінка відображається тому, що ці користувачі з серверів, які + ваш адміністратор заглушив, тому вони потенційно можуть бути спамом. +shuffle: Перетасувати +ratio: Співвідношення +secureModeInfo: У разі запитів з інших серверів не надсилати непідтверджену відповідь. +pubSub: Облікові записи Pub/Sub +driveCapOverrideLabel: Змінити ємність диску для цього користувача +deleteAccount: Видалити обліковий запис +type: Тип +enableAutoSensitiveDescription: Дозволяє автоматично виявляти та позначати медіафайли + NSFW за допомогою машинного навчання, де це можливо. Навіть якщо цю опцію вимкнено, + вона може бути увімкнена на всьому сервері. +recommendedInstances: Рекомендовані сервери +noteId: Ідентифікатор запису +showPopup: Сповіщати користувачів спливаючим вікном +showWithSparkles: Показати з блиском +youHaveUnreadAnnouncements: У вас є непрочитані оголошення +donationLink: Посилання на сторінку для внесків +neverShow: Не показувати знову +remindMeLater: Можливо пізніше +removeQuote: Видалити цитату +removeRecipient: Видалити одержувача +removeMember: Видалити члена +silencedInstancesDescription: Вкажіть імена хостів серверів, які ви хочете ігнорувати. + Облікові записи на перелічених серверах вважаються "Ігнорованими", можуть робити + лише запити на підписку і не можуть згадувати локальні облікові записи, якщо на + них не підписалися. Це не вплине на заблоковані сервери. +hiddenTagsDescription: 'Перелічіть хештеги (без #), які ви хочете приховати з трендів + і дослідження. Приховані хештеги все одно можна знайти іншими способами.' +antennasDesc: "Антени показують нові дописи, що відповідають встановленим вами критеріям!\n + Доступ до них можна отримати зі сторінки стрічок." +clipsDesc: Підбірки схожі на категоризовані закладки, до яких можна надавати спільний + доступ. Ви можете створювати підбірки з меню окремих записів. +migrationConfirm: "Ви точно впевнені, що хочете перенести свій обліковий запис на + {account}? Якщо ви це зробите, ви не зможете скасувати цю операцію і не зможете + користуватися своїм обліковим записом як раніше.\nТакож, будь ласка, переконайтеся, + що ви вибрали цей поточний обліковий запис як обліковий запис, з якого ви переходите." +customKaTeXMacroDescription: 'Налаштуйте макроси, щоб легко писати математичні вирази! + Позначення відповідає визначенню команд LaTeX і записується у вигляді \newcommand{\ + name}{content} або \newcommand{\name}[number of arguments]{content}. Наприклад, + \newcommand{\add}[2]{#1 + #2} розширить \add{3}{foo} to 3 + foo. Фігурні дужки навколо + назви макросу можна змінити на круглі або квадратні. Це вплине на дужки, що використовуються + для аргументів. В одному рядку можна визначити один (і тільки один) макрос, і жоден + рядок не можна розривати посередині визначення. Неправильні рядки просто ігноруються. + Підтримуються лише прості функції заміни рядків; розширений синтаксис, такий як + умовне розгалуження, не може бути використаний тут.' +activeEmailValidationDescription: Вмикає більш сувору перевірку адрес електронної + пошти, яка включає перевірку на наявність одноразових адрес і перевірку того, чи + дійсно з нею можна зв'язатися. Якщо цей прапорець знято, перевіряється лише формат + електронної пошти. +customSplashIconsDescription: URL-адреси іконок для заставки, розділені новими рядками, + які будуть показуватися випадковим чином щоразу, коли користувач завантажує/перезавантажує + сторінку. Будь ласка, переконайтеся, що зображення знаходяться на статичній URL-адресі, + бажано, щоб вони були змінені до розміру 192x192. +verifiedLink: Перевірене посилання +_feeds: + copyFeed: Скопіювати стрічку + rss: RSS + jsonFeed: JSON-стрічка + atom: Atom +origin: Походження +objectStorageS3ForcePathStyle: Використовувати URL-адреси кінцевої точки на основі + шляху +objectStorageS3ForcePathStyleDesc: Увімкніть цей параметр, щоб вибудувати URL-адреси + кінцевих точок у форматі 's3.amazonaws.com//' поверх '.s3.amazonaws.com'. +deletePasskeys: Видалити ключ-пароль +delete2faConfirm: Це видалить двофакторну авторизацію на цьому обліковому записі без + можливості відмінити цю дію. Продовжити? +delete2fa: Вимкнути двофакторну авторизацію +inputNotMatch: Введене не співпадає +deletePasskeysConfirm: Це видалить усі ключ-паролі і ключі безпеки на цьому обліковому + записі без можливости відмінити цю дію. Продовжити? +addRe: Додати "re:" на початку коментаря у відповідь на запис із попередженням про + вміст +confirm: Підтвердити +importZip: Імпортувати ZIP +exportZip: Експортувати ZIP diff --git a/locales/vi-VN.yml b/locales/vi-VN.yml new file mode 100644 index 0000000..f24ef9a --- /dev/null +++ b/locales/vi-VN.yml @@ -0,0 +1,2109 @@ +_lang_: "Tiếng Việt" +headlineFirefish: "Mạng xã hội liên hợp" +introFirefish: "Xin chào! Firefish là một nền tảng tiểu blog phi tập trung mã nguồn + mở.\nViết \"tút\" để chia sẻ những suy nghĩ của bạn 📡\nBằng \"biểu cảm\", bạn có + thể bày tỏ nhanh chóng cảm xúc của bạn với các tút 👍\nHãy khám phá một thế giới + mới! 🚀" +monthAndDay: "{day} tháng {month}" +search: "Tìm kiếm" +notifications: "Thông báo" +username: "Tên người dùng" +password: "Mật khẩu" +forgotPassword: "Quên mật khẩu" +fetchingAsApObject: "Đang nạp dữ liệu từ Fediverse" +ok: "Đồng ý" +gotIt: "Đã hiểu!" +cancel: "Hủy" +enterUsername: "Nhập tên người dùng" +renotedBy: "{user} đăng lại" +noNotes: "Chưa có tút nào." +noNotifications: "Không có thông báo" +instance: "Máy chủ" +settings: "Cài đặt" +basicSettings: "Thiết lập chung" +otherSettings: "Thiết lập khác" +openInWindow: "Mở trong cửa sổ mới" +profile: "Trang cá nhân" +timeline: "Bảng tin" +noAccountDescription: "Người này chưa viết mô tả." +login: "Đăng nhập" +loggingIn: "Đang đăng nhập..." +logout: "Đăng xuất" +signup: "Đăng ký" +uploading: "Đang tải lên…" +save: "Lưu" +users: "Người dùng" +addUser: "Thêm người dùng" +favorite: "Thêm vào yêu thích" +favorites: "Lượt thích" +unfavorite: "Bỏ thích" +favorited: "Đã thêm vào yêu thích." +alreadyFavorited: "Đã thêm vào yêu thích rồi." +cantFavorite: "Không thể thêm vào yêu thích." +pin: "Ghim" +unpin: "Bỏ ghim" +copyContent: "Chép nội dung" +copyLink: "Chép liên kết" +delete: "Xóa" +deleteAndEdit: "Sửa" +deleteAndEditConfirm: "Bạn có chắc muốn sửa tút này? Những biểu cảm, lượt trả lời + và đăng lại sẽ bị mất." +addToList: "Thêm vào danh sách" +sendMessage: "Gửi tin nhắn" +copyUsername: "Chép tên người dùng" +searchUser: "Tìm người" +reply: "Trả lời" +loadMore: "Tải thêm" +showMore: "Xem thêm" +showLess: "Đóng" +youGotNewFollower: "đã theo dõi bạn" +receiveFollowRequest: "Đã yêu cầu theo dõi" +followRequestAccepted: "Đã chấp nhận yêu cầu theo dõi" +mention: "Nhắc đến" +mentions: "Lượt nhắc" +directNotes: "Nhắn riêng" +importAndExport: "Nhập và xuất dữ liệu" +import: "Nhập dữ liệu" +export: "Xuất dữ liệu" +files: "Tập tin" +download: "Tải xuống" +driveFileDeleteConfirm: "Bạn có chắc muốn xóa tập tin \"{name}\"? Tút liên quan cũng + sẽ bị xóa theo." +unfollowConfirm: "Bạn có chắc muốn ngưng theo dõi {name}?" +exportRequested: "Đang chuẩn bị xuất tập tin. Quá trình này có thể mất ít phút. Nó + sẽ được tự động thêm vào Drive sau khi hoàn thành." +importRequested: "Bạn vừa yêu cầu nhập dữ liệu. Quá trình này có thể mất ít phút." +lists: "Danh sách" +noLists: "Bạn chưa có danh sách nào" +note: "Tút" +notes: "Tút" +following: "Đang theo dõi" +followers: "Người theo dõi" +followsYou: "Theo dõi bạn" +createList: "Tạo danh sách" +manageLists: "Quản lý danh sách" +error: "Lỗi" +somethingHappened: "Xảy ra lỗi" +retry: "Thử lại" +pageLoadError: "Xảy ra lỗi khi tải trang." +pageLoadErrorDescription: "Có thể là do bộ nhớ đệm của trình duyệt. Hãy thử xóa bộ + nhớ đệm và thử lại sau ít phút." +serverIsDead: "Máy chủ không phản hồi. Vui lòng thử lại sau giây lát." +youShouldUpgradeClient: "Để xem trang này, hãy làm tươi để cập nhật ứng dụng." +enterListName: "Đặt tên cho danh sách" +privacy: "Bảo mật" +makeFollowManuallyApprove: "Yêu cầu theo dõi cần được duyệt" +defaultNoteVisibility: "Kiểu tút mặc định" +follow: "Đang theo dõi" +followRequest: "Gửi yêu cầu theo dõi" +followRequests: "Yêu cầu theo dõi" +unfollow: "Ngưng theo dõi" +followRequestPending: "Yêu cầu theo dõi đang chờ" +enterEmoji: "Chèn emoji" +renote: "Đăng lại" +unrenote: "Hủy đăng lại" +renoted: "Đã đăng lại." +cantRenote: "Không thể đăng lại tút này." +cantReRenote: "Không thể đăng lại một tút đăng lại." +quote: "Trích dẫn" +pinnedNote: "Tút ghim" +pinned: "Ghim" +you: "Bạn" +clickToShow: "Nhấn để xem" +sensitive: "Nhạy cảm" +add: "Thêm" +reaction: "Biểu cảm" +reactionSetting: "Chọn những biểu cảm hiển thị" +reactionSettingDescription2: "Kéo để sắp xếp, nhấn để xóa, nhấn \"+\" để thêm." +rememberNoteVisibility: "Lưu kiểu tút mặc định" +attachCancel: "Gỡ tập tin đính kèm" +markAsSensitive: "Đánh dấu là nhạy cảm" +unmarkAsSensitive: "Bỏ đánh dấu nhạy cảm" +enterFileName: "Nhập tên tập tin" +mute: "Ẩn" +unmute: "Bỏ ẩn" +block: "Chặn" +unblock: "Bỏ chặn" +suspend: "Vô hiệu hóa" +unsuspend: "Bỏ vô hiệu hóa" +blockConfirm: "Bạn có chắc muốn chặn người này?" +unblockConfirm: "Bạn có chắc muốn bỏ chặn người này?" +suspendConfirm: "Bạn có chắc muốn vô hiệu hóa người này?" +unsuspendConfirm: "Bạn có chắc muốn bỏ vô hiệu hóa người này?" +selectList: "Chọn danh sách" +selectAntenna: "Chọn một antenna" +selectWidget: "Chọn tiện ích" +editWidgets: "Sửa tiện ích" +editWidgetsExit: "Xong" +customEmojis: "Emoji" +emoji: "Emoji" +emojis: "Emoji" +emojiName: "Tên emoji" +emojiUrl: "URL Emoji" +addEmoji: "Thêm emoji" +settingGuide: "Cài đặt đề xuất" +cacheRemoteFiles: "Tập tin cache từ xa" +cacheRemoteFilesDescription: "Khi tùy chọn này bị tắt, các tập tin từ xa sẽ được tải + trực tiếp từ máy chủ khác. Điều này sẽ giúp giảm dung lượng lưu trữ nhưng lại tăng + lưu lượng truy cập, vì hình thu nhỏ sẽ không được tạo." +flagAsBot: "Đánh dấu đây là tài khoản bot" +flagAsBotDescription: "Bật tùy chọn này nếu tài khoản này được kiểm soát bởi một chương + trình. Nếu được bật, nó sẽ được đánh dấu để các nhà phát triển khác ngăn chặn chuỗi + tương tác vô tận với các bot khác và điều chỉnh hệ thống nội bộ của Firefish để + coi tài khoản này như một bot." +flagAsCat: "Tài khoản này là mèo" +flagAsCatDescription: "Bật tùy chọn này để đánh dấu tài khoản là một con mèo." +flagShowTimelineReplies: "Hiện lượt trả lời trong bảng tin" +flagShowTimelineRepliesDescription: "Hiện lượt trả lời của người bạn theo dõi trên + tút của những người khác." +autoAcceptFollowed: "Tự động phê duyệt theo dõi từ những người mà bạn đang theo dõi" +addAccount: "Thêm tài khoản" +loginFailed: "Đăng nhập không thành công" +showOnRemote: "Truy cập trang của người này" +general: "Tổng quát" +wallpaper: "Ảnh bìa" +setWallpaper: "Đặt ảnh bìa" +removeWallpaper: "Xóa ảnh bìa" +searchWith: "Tìm kiếm: {q}" +youHaveNoLists: "Bạn chưa có danh sách nào" +followConfirm: "Bạn có chắc muốn theo dõi {name}?" +proxyAccount: "Tài khoản proxy" +proxyAccountDescription: "Tài khoản proxy là tài khoản hoạt động như một người theo + dõi từ xa cho người dùng trong những điều kiện nhất định. Ví dụ: khi người dùng + thêm người dùng từ xa vào danh sách, hoạt động của người dùng từ xa sẽ không được + chuyển đến phiên bản nếu không có người dùng cục bộ nào theo dõi người dùng đó, + vì vậy tài khoản proxy sẽ theo dõi." +host: "Host" +selectUser: "Chọn người dùng" +recipient: "Người nhận" +annotation: "Bình luận" +federation: "Liên hợp" +instances: "Máy chủ" +registeredAt: "Đăng ký vào" +latestRequestSentAt: "Yêu cầu cuối gửi lúc" +latestRequestReceivedAt: "Yêu cầu cuối nhận lúc" +latestStatus: "Trạng thái cuối cùng" +storageUsage: "Dung lượng lưu trữ" +charts: "Biểu đồ" +perHour: "Mỗi giờ" +perDay: "Mỗi ngày" +stopActivityDelivery: "Ngưng gửi hoạt động" +blockThisInstance: "Chặn máy chủ này" +operations: "Vận hành" +software: "Phần mềm" +version: "Phiên bản" +metadata: "Metadata" +monitor: "Giám sát" +jobQueue: "Công việc chờ xử lý" +cpuAndMemory: "CPU và Dung lượng" +network: "Mạng" +disk: "Ổ đĩa" +instanceInfo: "Thông tin máy chủ" +statistics: "Thống kê" +clearQueue: "Xóa hàng đợi" +clearQueueConfirmTitle: "Bạn có chắc muốn xóa hàng đợi?" +clearQueueConfirmText: "Mọi tút chưa được gửi còn lại trong hàng đợi sẽ không được + liên hợp. Thông thường thao tác này không cần thiết." +clearCachedFiles: "Xóa bộ nhớ đệm" +clearCachedFilesConfirm: "Bạn có chắc muốn xóa sạch bộ nhớ đệm?" +blockedInstances: "Máy chủ đã chặn" +blockedInstancesDescription: "Danh sách những máy chủ bạn muốn chặn. Chúng sẽ không + thể giao tiếp với máy chủy này nữa." +muteAndBlock: "Ẩn và Chặn" +mutedUsers: "Người đã ẩn" +blockedUsers: "Người đã chặn" +noUsers: "Chưa có ai" +editProfile: "Sửa hồ sơ" +noteDeleteConfirm: "Bạn có chắc muốn xóa tút này?" +pinLimitExceeded: "Bạn đã đạt giới hạn số lượng tút có thể ghim" +intro: "Đã cài đặt Firefish! Xin hãy tạo tài khoản admin." +done: "Xong" +processing: "Đang xử lý" +preview: "Xem trước" +default: "Mặc định" +defaultValueIs: "Mặc định: {value}" +noCustomEmojis: "Không có emoji" +noJobs: "Không có công việc" +federating: "Đang liên hợp" +blocked: "Đã chặn" +suspended: "Đã vô hiệu hóa" +all: "Tất cả" +subscribing: "Đang đăng ký" +publishing: "Đang đăng" +notResponding: "Không có phản hồi" +instanceFollowing: "Đang theo dõi máy chủ" +instanceFollowers: "Người theo dõi của máy chủ" +instanceUsers: "Người dùng trên máy chủ này" +changePassword: "Đổi mật khẩu" +security: "Bảo mật" +retypedNotMatch: "Mật khẩu không trùng khớp." +currentPassword: "Mật khẩu hiện tại" +newPassword: "Mật khẩu mới" +newPasswordRetype: "Nhập lại mật khẩu mới" +attachFile: "Đính kèm tập tin" +more: "Thêm nữa!" +featured: "Nổi bật" +usernameOrUserId: "Tên người dùng hoặc ID" +noSuchUser: "Không tìm thấy người dùng" +lookup: "Tìm kiếm" +announcements: "Thông báo" +imageUrl: "URL ảnh" +remove: "Xóa" +removed: "Đã xóa" +removeAreYouSure: "Bạn có chắc muốn gỡ \"{x}\"?" +deleteAreYouSure: "Bạn có chắc muốn xóa \"{x}\"?" +resetAreYouSure: "Bạn có chắc muốn đặt lại?" +saved: "Đã lưu" +messaging: "Trò chuyện" +upload: "Tải lên" +keepOriginalUploading: "Giữ hình ảnh gốc" +keepOriginalUploadingDescription: "Giữ nguyên như hình ảnh được tải lên ban đầu. Nếu + tắt, một phiên bản để hiển thị trên web sẽ được tạo khi tải lên." +fromDrive: "Từ ổ đĩa" +fromUrl: "Từ URL" +uploadFromUrl: "Tải lên bằng một URL" +uploadFromUrlDescription: "URL của tập tin bạn muốn tải lên" +uploadFromUrlRequested: "Đã yêu cầu tải lên" +uploadFromUrlMayTakeTime: "Sẽ mất một khoảng thời gian để tải lên xong." +explore: "Khám phá" +messageRead: "Đã đọc" +noMoreHistory: "Không còn gì để đọc" +startMessaging: "Bắt đầu trò chuyện" +nUsersRead: "đọc bởi {n}" +agreeTo: "Tôi đồng ý {0}" +tos: "Điều khoản dịch vụ" +start: "Bắt đầu" +home: "Trang chính" +remoteUserCaution: "Vì người dùng này ở máy chủ khác, thông tin hiển thị có thể không + đầy đủ." +activity: "Hoạt động" +images: "Hình ảnh" +birthday: "Sinh nhật" +yearsOld: "{age} tuổi" +registeredDate: "Tham gia" +location: "Đến từ" +theme: "Chủ đề" +themeForLightMode: "Chủ đề dùng trong trong chế độ Sáng" +themeForDarkMode: "Chủ đề dùng trong chế độ Tối" +light: "Sáng" +dark: "Tối" +lightThemes: "Những chủ đề sáng" +darkThemes: "Những chủ đề tối" +syncDeviceDarkMode: "Đồng bộ với thiết bị" +drive: "Ổ đĩa" +fileName: "Tên tập tin" +selectFile: "Chọn tập tin" +selectFiles: "Chọn nhiều tập tin" +selectFolder: "Chọn thư mục" +selectFolders: "Chọn nhiều thư mục" +renameFile: "Đổi tên tập tin" +folderName: "Tên thư mục" +createFolder: "Tạo thư mục" +renameFolder: "Đổi tên thư mục" +deleteFolder: "Xóa thư mục" +addFile: "Thêm tập tin" +emptyDrive: "Ổ đĩa của bạn trống trơn" +emptyFolder: "Thư mục trống" +unableToDelete: "Không thể xóa" +inputNewFileName: "Nhập tên mới cho tập tin" +inputNewDescription: "Nhập mô tả mới" +inputNewFolderName: "Nhập tên mới cho thư mục" +circularReferenceFolder: "Thư mục đích là một thư mục con của thư mục bạn muốn di + chuyển." +hasChildFilesOrFolders: "Không thể xóa cho đến khi không còn gì trong thư mục." +copyUrl: "Sao chép URL" +rename: "Đổi tên" +avatar: "Ảnh đại diện" +banner: "Ảnh bìa" +nsfw: "Nhạy cảm" +whenServerDisconnected: "Khi mất kết nối tới máy chủ" +disconnectedFromServer: "Mất kết nối tới máy chủ" +reload: "Tải lại" +doNothing: "Bỏ qua" +reloadConfirm: "Bạn có muốn thử tải lại bảng tin?" +watch: "Xem" +unwatch: "Ngừng xem" +accept: "Đồng ý" +reject: "Từ chối" +normal: "Bình thường" +instanceName: "Tên máy chủ" +instanceDescription: "Mô tả máy chủ" +maintainerName: "Đội ngũ vận hành" +maintainerEmail: "Email đội ngũ" +tosUrl: "URL Điều khoản dịch vụ" +thisYear: "Năm" +thisMonth: "Tháng" +today: "Hôm nay" +dayX: "{day}" +monthX: "{month}" +yearX: "{year}" +pages: "Trang" +enableLocalTimeline: "Bật bảng tin máy chủ" +enableGlobalTimeline: "Bật bảng tin liên hợp" +disablingTimelinesInfo: "Quản trị viên và Kiểm duyệt viên luôn có quyền truy cập mọi + bảng tin, kể cả khi chúng không được bật." +registration: "Đăng ký" +enableRegistration: "Cho phép đăng ký mới" +invite: "Mời" +driveCapacityPerLocalAccount: "Dung lượng ổ đĩa tối đa cho mỗi người dùng" +driveCapacityPerRemoteAccount: "Dung lượng ổ đĩa tối đa cho mỗi người dùng từ xa" +inMb: "Tính bằng MB" +iconUrl: "URL Icon" +bannerUrl: "URL Ảnh bìa" +backgroundImageUrl: "URL Ảnh nền" +basicInfo: "Thông tin cơ bản" +pinnedUsers: "Những người thú vị" +pinnedUsersDescription: "Liệt kê mỗi hàng một tên người dùng xuống dòng để ghim trên + tab \"Khám phá\"." +pinnedPages: "Trang đã ghim" +pinnedPagesDescription: "Liệt kê các trang thú vị để ghim trên máy chủ." +pinnedClipId: "ID của clip muốn ghim" +pinnedNotes: "Tút ghim" +hcaptcha: "hCaptcha" +enableHcaptcha: "Bật hCaptcha" +hcaptchaSiteKey: "Khóa của trang" +hcaptchaSecretKey: "Khóa bí mật" +recaptcha: "reCAPTCHA" +enableRecaptcha: "Bật reCAPTCHA" +recaptchaSiteKey: "Khóa của trang" +recaptchaSecretKey: "Khóa bí mật" +avoidMultiCaptchaConfirm: "Dùng nhiều hệ thống Captcha có thể gây nhiễu giữa chúng. + Bạn có muốn tắt các hệ thống Captcha khác hiện đang hoạt động không? Nếu bạn muốn + chúng tiếp tục được bật, hãy nhấn hủy." +antennas: "Trạm phát sóng" +manageAntennas: "Quản lý trạm phát sóng" +name: "Tên" +antennaSource: "Nguồn trạm phát sóng" +antennaKeywords: "Từ khóa để nghe" +antennaExcludeKeywords: "Từ khóa để lọc ra" +antennaKeywordsDescription: "Phân cách bằng dấu cách cho điều kiện AND hoặc bằng xuống + dòng cho điều kiện OR." +notifyAntenna: "Thông báo có tút mới" +withFileAntenna: "Chỉ những tút có media" +enableServiceworker: "Bật ServiceWorker" +antennaUsersDescription: "Liệt kê mỗi hàng một tên người dùng" +caseSensitive: "Trường hợp nhạy cảm" +withReplies: "Bao gồm lượt trả lời" +connectedTo: "Những tài khoản sau đã kết nối" +notesAndReplies: "Lượt trả lời" +withFiles: "Media" +silence: "Ẩn" +silenceConfirm: "Bạn có chắc muốn ẩn người này?" +unsilence: "Bỏ ẩn" +unsilenceConfirm: "Bạn có chắc muốn bỏ ẩn người này?" +popularUsers: "Những người nổi tiếng" +recentlyUpdatedUsers: "Hoạt động gần đây" +recentlyRegisteredUsers: "Mới tham gia" +recentlyDiscoveredUsers: "Mới khám phá" +exploreUsersCount: "Có {count} người" +exploreFediverse: "Khám phá Fediverse" +popularTags: "Hashtag thông dụng" +userList: "Danh sách" +about: "Giới thiệu" +aboutFirefish: "Về Misskey" +administrator: "Quản trị viên" +token: "Token" +twoStepAuthentication: "Xác minh 2 bước" +moderator: "Kiểm duyệt viên" +moderation: "Kiểm duyệt" +nUsersMentioned: "Dùng bởi {n} người" +securityKey: "Khóa bảo mật" +securityKeyName: "Tên khoá" +registerSecurityKey: "Đăng ký khóa bảo mật" +lastUsed: "Dùng lần cuối" +unregister: "Hủy đăng ký" +passwordLessLogin: "Đăng nhập không mật khẩu" +resetPassword: "Đặt lại mật khẩu" +newPasswordIs: "Mật khẩu mới là \"{password}\"" +reduceUiAnimation: "Giảm chuyển động UI" +share: "Chia sẻ" +notFound: "Không tìm thấy" +notFoundDescription: "Không tìm thấy trang nào tương ứng với URL này." +uploadFolder: "Thư mục tải lên mặc định" +cacheClear: "Xóa bộ nhớ đệm" +markAsReadAllNotifications: "Đánh dấu tất cả các thông báo là đã đọc" +markAsReadAllUnreadNotes: "Đánh dấu tất cả các tút là đã đọc" +markAsReadAllTalkMessages: "Đánh dấu tất cả các tin nhắn là đã đọc" +help: "Trợ giúp" +inputMessageHere: "Nhập nội dung tin nhắn" +close: "Đóng" +group: "Nhóm" +groups: "Các nhóm" +createGroup: "Tạo nhóm" +ownedGroups: "Nhóm tôi quản lý" +joinedGroups: "Nhóm tôi tham gia" +invites: "Mời" +groupName: "Tên nhóm" +members: "Thành viên" +transfer: "Chuyển giao" +messagingWithUser: "Nhắn riêng" +messagingWithGroup: "Chat nhóm" +title: "Tựa đề" +text: "Nội dung" +enable: "Bật" +next: "Kế tiếp" +retype: "Nhập lại" +noteOf: "Tút của {user}" +inviteToGroup: "Mời vào nhóm" +quoteAttached: "Trích dẫn" +quoteQuestion: "Trích dẫn lại?" +noMessagesYet: "Chưa có tin nhắn" +newMessageExists: "Bạn có tin nhắn mới" +onlyOneFileCanBeAttached: "Bạn chỉ có thể đính kèm một tập tin" +signinRequired: "Vui lòng đăng nhập" +invitations: "Mời" +invitationCode: "Mã mời" +checking: "Đang kiểm tra..." +available: "Khả dụng" +unavailable: "Không khả dụng" +usernameInvalidFormat: "Bạn có thể dùng viết hoa/viết thường, chữ số, và dấu gạch + dưới." +tooShort: "Quá ngắn" +tooLong: "Quá dài" +weakPassword: "Mật khẩu yếu" +normalPassword: "Mật khẩu tạm được" +veryStrongPassword: "Mật khẩu mạnh" +passwordMatched: "Trùng khớp" +passwordNotMatched: "Không trùng khớp" +signinWith: "Đăng nhập bằng {x}" +signinFailed: "Không thể đăng nhập. Vui lòng kiểm tra tên người dùng và mật khẩu của + bạn." +tapSecurityKey: "Nhấn mã bảo mật của bạn" +or: "Hoặc" +language: "Ngôn ngữ" +uiLanguage: "Ngôn ngữ giao diện" +groupInvited: "Bạn đã được mời tham gia nhóm" +aboutX: "Giới thiệu {x}" +useOsNativeEmojis: "Dùng emoji hệ thống" +disableDrawer: "Không dùng menu thanh bên" +youHaveNoGroups: "Không có nhóm nào" +joinOrCreateGroup: "Tham gia hoặc tạo một nhóm mới." +noHistory: "Không có dữ liệu" +signinHistory: "Lịch sử đăng nhập" +disableAnimatedMfm: "Tắt MFM với chuyển động" +doing: "Đang xử lý..." +category: "Phân loại" +tags: "Thẻ" +docSource: "Nguồn tài liệu" +createAccount: "Tạo tài khoản" +existingAccount: "Tài khoản hiện có" +regenerate: "Tạo lại" +fontSize: "Cỡ chữ" +noFollowRequests: "Bạn không có yêu cầu theo dõi nào" +openImageInNewTab: "Mở ảnh trong tab mới" +dashboard: "Trang chính" +local: "Máy chủ này" +remote: "Máy chủ khác" +total: "Tổng cộng" +weekOverWeekChanges: "Thay đổi tuần rồi" +dayOverDayChanges: "Thay đổi hôm qua" +appearance: "Giao diện" +clientSettings: "Cài đặt Client" +accountSettings: "Cài đặt tài khoản" +promotion: "Quảng cáo" +promote: "Quảng cáo" +numberOfDays: "Số ngày" +hideThisNote: "Ẩn tút này" +showFeaturedNotesInTimeline: "Hiện tút nổi bật trong bảng tin" +objectStorage: "Đối tượng lưu trữ" +useObjectStorage: "Dùng đối tượng lưu trữ" +objectStorageBaseUrl: "Base URL" +objectStorageBaseUrlDesc: "URL được sử dụng làm tham khảo. Chỉ định URL của CDN hoặc + Proxy của bạn nếu bạn đang sử dụng. Với S3 dùng 'https://.s3.amazonaws.com', + còn GCS hoặc dịch vụ tương tự dùng 'https://storage.googleapis.com/', etc." +objectStorageBucket: "Bucket" +objectStorageBucketDesc: "Nhập tên bucket dùng ở nhà cung cấp của bạn." +objectStoragePrefix: "Tiền tố" +objectStoragePrefixDesc: "Các tập tin sẽ được lưu trữ trong các thư mục có tiền tố + này." +objectStorageEndpoint: "Đầu cuối" +objectStorageEndpointDesc: "Để trống nếu bạn đang dùng AWS S3, nếu không thì chỉ định + đầu cuối là '' hoặc ':', tùy thuộc vào nhà cung cấp dịch vụ." +objectStorageRegion: "Khu vực" +objectStorageRegionDesc: "Nhập một khu vực cụ thể như 'xx-east-1'. Nếu nhà cung cấp + dịch vụ của bạn không phân biệt giữa các khu vực, hãy để trống hoặc nhập 'us-east-1'." +objectStorageUseSSL: "Dùng SSL" +objectStorageUseSSLDesc: "Tắt nếu bạn không dùng HTTPS để kết nối API" +objectStorageUseProxy: "Kết nối thông qua Proxy" +objectStorageUseProxyDesc: "Tắt nếu bạn không dùng Proxy để kết nối API" +objectStorageSetPublicRead: "Đặt \"public-read\" khi tải lên" +serverLogs: "Nhật ký máy chủ" +deleteAll: "Xóa tất cả" +showFixedPostForm: "Hiện khung soạn tút ở phía trên bảng tin" +newNoteRecived: "Đã nhận tút mới" +sounds: "Âm thanh" +listen: "Nghe" +none: "Không" +showInPage: "Hiện trong trang" +popout: "Pop-out" +volume: "Âm lượng" +masterVolume: "Âm thanh chung" +details: "Chi tiết" +chooseEmoji: "Chọn emoji" +unableToProcess: "Không thể hoàn tất hành động" +recentUsed: "Sử dụng gần đây" +install: "Cài đặt" +uninstall: "Gỡ bỏ" +installedApps: "Ứng dụng đã cài đặt" +nothing: "Không có gì ở đây" +installedDate: "Cho phép vào" +lastUsedDate: "Dùng gần nhất" +state: "Trạng thái" +sort: "Sắp xếp" +ascendingOrder: "Tăng dần" +descendingOrder: "Giảm dần" +scratchpad: "Scratchpad" +scratchpadDescription: "Scratchpad cung cấp môi trường cho các thử nghiệm AiScript. + Bạn có thể viết, thực thi và kiểm tra kết quả tương tác với Firefish trong đó." +output: "Nguồn ra" +script: "Kịch bản" +disablePagesScript: "Tắt AiScript trên Trang" +updateRemoteUser: "Cập nhật thông tin người dùng ở máy chủ khác" +deleteAllFiles: "Xóa toàn bộ tập tin" +deleteAllFilesConfirm: "Bạn có chắc xóa toàn bộ tập tin?" +removeAllFollowing: "Ngưng theo dõi tất cả mọi người" +removeAllFollowingDescription: "Thực hiện điều này sẽ ngưng theo dõi tất cả các tài + khoản khỏi {host}. Chỉ thực hiện điều này nếu máy chủ không còn tồn tại." +userSuspended: "Người này đã bị vô hiệu hóa." +userSilenced: "Người này đã bị ẩn" +yourAccountSuspendedTitle: "Tài khoản bị vô hiệu hóa" +yourAccountSuspendedDescription: "Tài khoản này đã bị vô hiệu hóa do vi phạm quy tắc + máy chủ hoặc điều tương tự. Liên hệ với quản trị viên nếu bạn muốn biết lý do chi + tiết hơn. Vui lòng không tạo tài khoản mới." +menu: "Menu" +divider: "Phân chia" +addItem: "Thêm mục" +relays: "Chuyển tiếp" +addRelay: "Thêm chuyển tiếp" +inboxUrl: "URL Hộp thư đến" +addedRelays: "Đã thêm các chuyển tiếp" +serviceworkerInfo: "Phải được bật cho thông báo đẩy." +deletedNote: "Tút đã bị xóa" +invisibleNote: "Tút ẩn" +enableInfiniteScroll: "Tự động tải tút mới" +visibility: "Hiển thị" +poll: "Bình chọn" +useCw: "Ẩn nội dung" +enablePlayer: "Mở trình phát video" +disablePlayer: "Đóng trình phát video" +expandTweet: "Mở rộng tweet" +themeEditor: "Công cụ thiết kế theme" +description: "Mô tả" +describeFile: "Thêm mô tả" +enterFileDescription: "Nhập mô tả" +author: "Tác giả" +leaveConfirm: "Có những thay đổi chưa được lưu. Bạn có muốn bỏ chúng không?" +manage: "Quản lý" +plugins: "Plugin" +preferencesBackups: "Sao lưu thiết lập" +deck: "Deck" +undeck: "Bỏ Deck" +useBlurEffectForModal: "Sử dụng hiệu ứng mờ cho các hộp thoại" +useFullReactionPicker: "Dùng bộ chọn biểu cảm cỡ lớn" +width: "Chiều rộng" +height: "Chiều cao" +large: "Lớn" +medium: "Vừa" +small: "Nhỏ" +generateAccessToken: "Tạo mã truy cập" +permission: "Cho phép " +enableAll: "Bật toàn bộ" +disableAll: "Tắt toàn bộ" +tokenRequested: "Cấp quyền truy cập vào tài khoản" +pluginTokenRequestedDescription: "Plugin này sẽ có thể sử dụng các quyền được đặt + ở đây." +notificationType: "Loại thông báo" +edit: "Sửa" +emailServer: "Email máy chủ" +enableEmail: "Bật phân phối email" +emailConfigInfo: "Được dùng để xác minh email của bạn lúc đăng ký hoặc nếu bạn quên + mật khẩu của mình" +email: "Email" +emailAddress: "Địa chỉ email" +smtpConfig: "Cấu hình máy chủ SMTP" +smtpHost: "Host" +smtpPort: "Cổng" +smtpUser: "Tên người dùng" +smtpPass: "Mật khẩu" +emptyToDisableSmtpAuth: "Để trống tên người dùng và mật khẩu để tắt xác thực SMTP" +smtpSecure: "Dùng SSL/TLS ngầm định cho các kết nối SMTP" +smtpSecureInfo: "Tắt cái này nếu dùng STARTTLS" +testEmail: "Kiểm tra vận chuyển email" +wordMute: "Ẩn chữ" +regexpError: "Lỗi biểu thức" +regexpErrorDescription: "Xảy ra lỗi biểu thức ở dòng {line} của {tab} chữ ẩn:" +instanceMute: "Những máy chủ ẩn" +userSaysSomething: "{name} nói gì đó" +makeActive: "Kích hoạt" +display: "Hiển thị" +copy: "Sao chép" +metrics: "Số liệu" +overview: "Chung" +logs: "Nhật ký" +delayed: "Độ trễ" +database: "Cơ sở dữ liệu" +channel: "Kênh" +create: "Tạo" +notificationSetting: "Cài đặt thông báo" +notificationSettingDesc: "Chọn loại thông báo bạn muốn hiển thị." +useGlobalSetting: "Dùng thiết lập chung" +useGlobalSettingDesc: "Nếu được bật, cài đặt thông báo của bạn sẽ được áp dụng. Nếu + bị tắt, có thể thực hiện các thiết lập riêng lẻ." +other: "Khác" +regenerateLoginToken: "Tạo lại mã đăng nhập" +regenerateLoginTokenDescription: "Tạo lại mã nội bộ có thể dùng để đăng nhập. Thông + thường hành động này là không cần thiết. Nếu được tạo lại, tất cả các thiết bị sẽ + bị đăng xuất." +setMultipleBySeparatingWithSpace: "Tách nhiều mục nhập bằng dấu cách." +fileIdOrUrl: "ID tập tin hoặc URL" +behavior: "Thao tác" +sample: "Ví dụ" +abuseReports: "Lượt báo cáo" +reportAbuse: "Báo cáo" +reportAbuseOf: "Báo cáo {name}" +fillAbuseReportDescription: "Vui lòng điền thông tin chi tiết về báo cáo này. Nếu + đó là về một tút cụ thể, hãy kèm theo URL của tút." +abuseReported: "Báo cáo đã được gửi. Cảm ơn bạn nhiều." +reporter: "Người báo cáo" +reporteeOrigin: "Bị báo cáo" +reporterOrigin: "Máy chủ người báo cáo" +forwardReport: "Chuyển tiếp báo cáo cho máy chủ từ xa" +forwardReportIsAnonymous: "Thay vì tài khoản của bạn, một tài khoản hệ thống ẩn danh + sẽ được hiển thị dưới dạng người báo cáo ở máy chủ từ xa." +send: "Gửi" +abuseMarkAsResolved: "Đánh dấu đã xử lý" +openInNewTab: "Mở trong tab mới" +openInSideView: "Mở trong thanh bên" +defaultNavigationBehaviour: "Thao tác điều hướng mặc định" +editTheseSettingsMayBreakAccount: "Việc chỉnh sửa các cài đặt này có thể làm hỏng + tài khoản của bạn." +instanceTicker: "Thông tin máy chủ của tút" +waitingFor: "Đang đợi {x}" +random: "Ngẫu nhiên" +system: "Hệ thống" +switchUi: "Chuyển đổi giao diện người dùng" +desktop: "Desktop" +clip: "Ghim" +createNew: "Tạo mới" +optional: "Không bắt buộc" +createNewClip: "Tạo một ghim mới" +unclip: "Bỏ ghim" +confirmToUnclipAlreadyClippedNote: "Bài đăng này là một phần của \"{name}\" ghim. + Bạn có muốn bỏ khỏi ghim?" +public: "Công khai" +i18nInfo: "Firefish đang được các tình nguyện viên dịch sang nhiều thứ tiếng khác + nhau. Bạn có thể hỗ trợ tại {link}." +manageAccessTokens: "Tạo mã truy cập" +accountInfo: "Thông tin tài khoản" +notesCount: "Số lượng tút" +repliesCount: "Số lượt trả lời đã gửi" +renotesCount: "Số lượt đăng lại đã gửi" +repliedCount: "Số lượt trả lời đã nhận" +renotedCount: "Lượt chia sẻ" +followingCount: "Số lượng người tôi theo dõi" +followersCount: "Số lượng người theo dõi tôi" +sentReactionsCount: "Số lượng biểu cảm đã gửi" +receivedReactionsCount: "Số lượng biểu cảm đã nhận" +pollVotesCount: "Số lượng bình chọn đã gửi" +pollVotedCount: "Số lượng bình chọn đã nhận" +yes: "Đồng ý" +no: "Từ chối" +driveFilesCount: "Số tập tin trong Ổ đĩa" +driveUsage: "Dung lượng ổ đĩa" +noCrawle: "Từ chối lập chỉ mục" +noCrawleDescription: "Không cho công cụ tìm kiếm lập chỉ mục trang hồ sơ, tút, Trang, + etc." +lockedAccountInfo: "Ghi chú của bạn sẽ hiển thị với bất kỳ ai, trừ khi bạn đặt chế + độ hiển thị tút của mình thành \"Chỉ người theo dõi\"." +alwaysMarkSensitive: "Luôn đánh dấu NSFW" +loadRawImages: "Tải ảnh gốc thay vì ảnh thu nhỏ" +disableShowingAnimatedImages: "Không phát ảnh động" +verificationEmailSent: "Một email xác minh đã được gửi. Vui lòng nhấn vào liên kết + đính kèm để hoàn tất xác minh." +notSet: "Chưa đặt" +emailVerified: "Email đã được xác minh" +noteFavoritesCount: "Số lượng tút yêu thích" +pageLikesCount: "Số lượng trang đã thích" +pageLikedCount: "Số lượng thích trang đã nhận" +contact: "Liên hệ" +useSystemFont: "Dùng phông chữ mặc định của hệ thống" +clips: "Ghim" +experimentalFeatures: "Tính năng thử nghiệm" +developer: "Nhà phát triển" +makeExplorable: "Không hiện tôi trong \"Khám phá\"" +makeExplorableDescription: "Nếu bạn tắt, tài khoản của bạn sẽ không hiện trong mục + \"Khám phá\"." +showGapBetweenNotesInTimeline: "Hiện dải phân cách giữa các tút trên bảng tin" +duplicate: "Tạo bản sao" +left: "Bên trái" +center: "Giữa" +wide: "Rộng" +narrow: "Thu hẹp" +reloadToApplySetting: "Cài đặt này sẽ chỉ áp dụng sau khi tải lại trang. Tải lại ngay + bây giờ?" +needReloadToApply: "Cần tải lại để điều này được áp dụng." +showTitlebar: "Hiện thanh tựa đề" +clearCache: "Xóa bộ nhớ đệm" +onlineUsersCount: "{n} người đang online" +nUsers: "{n} Người" +nNotes: "{n} Tút" +sendErrorReports: "Báo lỗi" +sendErrorReportsDescription: "Khi được bật, thông tin chi tiết về lỗi sẽ được chia + sẻ với Firefish khi xảy ra sự cố, giúp nâng cao chất lượng của Firefish.\nBao gồm + thông tin như phiên bản hệ điều hành của bạn, trình duyệt bạn đang sử dụng, hoạt + động của bạn trong Firefish, v.v." +myTheme: "Theme của tôi" +backgroundColor: "Màu nền" +accentColor: "Màu phụ" +textColor: "Màu chữ" +saveAs: "Lưu thành" +advanced: "Nâng cao" +value: "Giá trị" +createdAt: "Ngày tạo" +updatedAt: "Cập nhật" +saveConfirm: "Lưu thay đổi?" +deleteConfirm: "Bạn có muốn xóa không?" +invalidValue: "Giá trị không hợp lệ." +registry: "Registry" +closeAccount: "Đóng tài khoản" +currentVersion: "Phiên bản hiện tại" +latestVersion: "Phiên bản mới nhất" +youAreRunningUpToDateClient: "Bạn đang sử dụng phiên bản mới nhất." +newVersionOfClientAvailable: "Có phiên bản mới cho bạn cập nhật." +usageAmount: "Sử dụng" +capacity: "Sức chứa" +inUse: "Đã dùng" +editCode: "Chỉnh sửa mã" +apply: "Áp dụng" +receiveAnnouncementFromInstance: "Nhận thông báo từ máy chủ này" +emailNotification: "Thông báo email" +publish: "Đăng" +inChannelSearch: "Tìm trong kênh" +useReactionPickerForContextMenu: "Nhấn chuột phải để mở bộ chọn biểu cảm" +typingUsers: "{users} đang nhập" +jumpToSpecifiedDate: "Đến một ngày cụ thể" +showingPastTimeline: "Hiện đang hiển thị dòng thời gian cũ" +clear: "Hoàn lại" +markAllAsRead: "Đánh dấu tất cả đã đọc" +goBack: "Quay lại" +unlikeConfirm: "Bạn có chắc muốn bỏ thích ?" +fullView: "Kích thước đầy đủ" +quitFullView: "Thoát toàn màn hình" +addDescription: "Thêm mô tả" +userPagePinTip: "Bạn có thể hiển thị các tút ở đây bằng cách chọn \"Ghim vào hồ sơ\"\ + \ từ menu của mỗi tút." +notSpecifiedMentionWarning: "Tút này có đề cập đến những người không mong muốn" +info: "Giới thiệu" +userInfo: "Thông tin người dùng" +unknown: "Chưa biết" +onlineStatus: "Trạng thái" +hideOnlineStatus: "Ẩn trạng thái online" +hideOnlineStatusDescription: "Ẩn trạng thái online của bạn làm giảm sự tiện lợi của + một số tính năng như tìm kiếm." +online: "Online" +active: "Hoạt động" +offline: "Offline" +notRecommended: "Không đề xuất" +botProtection: "Bảo vệ Bot" +instanceBlocking: "Máy chủ đã chặn" +selectAccount: "Chọn một tài khoản" +switchAccount: "Chuyển tài khoản" +enabled: "Đã bật" +disabled: "Đã tắt" +quickAction: "Thao tác nhanh" +user: "Người dùng" +administration: "Quản lý" +accounts: "Tài khoản của bạn" +switch: "Chuyển đổi" +noMaintainerInformationWarning: "Chưa thiết lập thông tin vận hành." +noBotProtectionWarning: "Bảo vệ Bot chưa thiết lập." +configure: "Thiết lập" +postToGallery: "Tạo tút có ảnh" +gallery: "Thư viện ảnh" +recentPosts: "Tút gần đây" +popularPosts: "Tút được xem nhiều nhất" +shareWithNote: "Chia sẻ kèm với tút" +ads: "Quảng cáo" +expiration: "Thời hạn" +memo: "Lưu ý" +priority: "Ưu tiên" +high: "Cao" +middle: "Vừa" +low: "Thấp" +emailNotConfiguredWarning: "Chưa đặt địa chỉ email." +ratio: "Tỷ lệ" +previewNoteText: "Hiện xem trước" +customCss: "Tùy chỉnh CSS" +customCssWarn: "Chỉ sử dụng những cài đặt này nếu bạn biết rõ về nó. Việc nhập các + giá trị không đúng có thể khiến máy chủ hoạt động không bình thường." +global: "Toàn cầu" +squareAvatars: "Ảnh đại diện vuông" +sent: "Gửi" +received: "Đã nhận" +searchResult: "Tìm thấy" +hashtags: "Hashtag" +troubleshooting: "Khắc phục sự cố" +useBlurEffect: "Dùng hiệu ứng làm mờ trong giao diện" +learnMore: "Tìm hiểu thêm" +misskeyUpdated: "Firefish vừa được cập nhật!" +whatIsNew: "Hiện những thay đổi" +translate: "Dịch" +translatedFrom: "Dịch từ {x}" +accountDeletionInProgress: "Đang xử lý việc xóa tài khoản" +usernameInfo: "Bạn có thể sử dụng chữ cái (a ~ z, A ~ Z), chữ số (0 ~ 9) hoặc dấu + gạch dưới (_). Tên người dùng không thể thay đổi sau này." +aiChanMode: "Chế độ Ai" +keepCw: "Giữ cảnh báo nội dung" +pubSub: "Tài khoản Chính/Phụ" +lastCommunication: "Lần giao tiếp cuối" +resolved: "Đã xử lý" +unresolved: "Chờ xử lý" +breakFollow: "Xóa người theo dõi" +itsOn: "Đã bật" +itsOff: "Đã tắt" +emailRequiredForSignup: "Yêu cầu địa chỉ email khi đăng ký" +unread: "Chưa đọc" +filter: "Bộ lọc" +controlPanel: "Bảng điều khiển" +manageAccounts: "Quản lý tài khoản" +makeReactionsPublic: "Đặt lịch sử biểu cảm công khai" +makeReactionsPublicDescription: "Điều này sẽ hiển thị công khai danh sách tất cả các + biểu cảm trước đây của bạn." +classic: "Cổ điển" +muteThread: "Không quan tâm nữa" +unmuteThread: "Quan tâm tút này" +ffVisibility: "Hiển thị Theo dõi/Người theo dõi" +ffVisibilityDescription: "Quyết định ai có thể xem những người bạn theo dõi và những + người theo dõi bạn." +continueThread: "Tiếp tục xem chuỗi tút" +deleteAccountConfirm: "Điều này sẽ khiến tài khoản bị xóa vĩnh viễn. Vẫn tiếp tục?" +incorrectPassword: "Sai mật khẩu." +voteConfirm: "Xác nhận bình chọn \"{choice}\"?" +hide: "Ẩn" +leaveGroup: "Rời khỏi nhóm" +leaveGroupConfirm: "Bạn có chắc muốn rời khỏi nhóm \"{name}\"?" +useDrawerReactionPickerForMobile: "Hiện bộ chọn biểu cảm dạng xổ ra trên điện thoại" +welcomeBackWithName: "Chào mừng trở lại, {name}" +clickToFinishEmailVerification: "Vui lòng nhấn [{ok}] để hoàn tất việc đăng ký." +overridedDeviceKind: "Loại thiết bị" +smartphone: "Điện thoại" +tablet: "Máy tính bảng" +auto: "Tự động" +themeColor: "Màu theme" +size: "Kích thước" +numberOfColumn: "Số lượng cột" +instanceDefaultLightTheme: "Theme máy chủ Sáng-Rộng" +instanceDefaultDarkTheme: "Theme máy chủ Tối-Rộng" +instanceDefaultThemeDescription: "Nhập mã theme trong định dạng đối tượng." +mutePeriod: "Thời hạn ẩn" +indefinitely: "Vĩnh viễn" +tenMinutes: "10 phút" +oneHour: "1 giờ" +oneDay: "1 ngày" +oneWeek: "1 tuần" +reflectMayTakeTime: "Có thể mất một thời gian để điều này được áp dụng." +failedToFetchAccountInformation: "Không thể lấy thông tin tài khoản" +rateLimitExceeded: "Giới hạn quá mức" +cropImage: "Cắt hình ảnh" +cropImageAsk: "Bạn có muốn cắt ảnh này?" +file: "Tập tin" +recentNHours: "{n}h trước" +recentNDays: "{n} ngày trước" +noEmailServerWarning: "Chưa đặt máy chủ email." +thereIsUnresolvedAbuseReportWarning: "Có báo cáo chưa xử lí." +recommended: "Được đề xuất" +check: "Kiểm tra" +driveCapOverrideLabel: "Thay đổi dung lượng drive cho người này" +driveCapOverrideCaption: "Đặt dung lượng drive về mặc định bằng cách nhập 0 hoặc số + âm." +requireAdminForView: "Bạn phải đăng nhập như là quản trị viên mới xem được." +isSystemAccount: "Đã tạo một tài khoản và tự động vận hành bởi hệ thống." +typeToConfirm: "Nhấn {x} để xác nhận" +deleteAccount: "Xóa tài khoản" +document: "Tài liệu" +numberOfPageCache: "Số lượng trang bộ nhớ đệm" +numberOfPageCacheDescription: "Việc tăng con số này sẽ cải thiện sự thuận tiện cho + người dùng nhưng gây ra nhiều áp lực hơn cho máy chủ cũng như sử dụng nhiều bộ nhớ + hơn." +logoutConfirm: "Bạn có chắc muốn đăng xuất?" +lastActiveDate: "Lần cuối vào" +statusbar: "Thanh trạng thái" +pleaseSelect: "Chọn một lựa chọn" +reverse: "Lật" +colored: "Với màu" +refreshInterval: "Cập nhật nội bộ" +label: "Nhãn" +type: "Loại" +speed: "Tốc độ" +slow: "Chậm" +fast: "Nhanh" +sensitiveMediaDetection: "Tự động phát hiện NSFW" +localOnly: "Chỉ trên máy chủ" +remoteOnly: "Chỉ máy chủ từ xa" +failedToUpload: "Tải lên thất bại" +cannotUploadBecauseInappropriate: "Không thể tải lên tập tin này vì các phần của tập + tin đã được phát hiện có khả năng là NSFW." +cannotUploadBecauseNoFreeSpace: "Tải lên không thành công do thiếu dung lượng Drive." +beta: "Beta" +enableAutoSensitive: "Tự động đánh dấu NSFW" +enableAutoSensitiveDescription: "Cho phép tự động phát hiện và đánh dấu media NSFW + thông qua học máy, nếu có thể. Ngay cả khi tùy chọn này bị tắt, nó vẫn có thể được + bật trên toàn máy chủ." +activeEmailValidationDescription: "Cho phép xác minh địa chỉ email chặt chẽ hơn, bao + gồm việc kiểm tra các địa chỉ dùng một lần và xem nó có thực sự được giao tiếp hay + không. Khi bỏ chọn, chỉ định dạng của email được xác minh." +navbar: "Thanh điều hướng" +shuffle: "Xáo trộn" +account: "Tài khoản của bạn" +move: "Di chuyển" +_sensitiveMediaDetection: + description: "Giảm nỗ lực kiểm duyệt máy chủ thông qua việc tự động nhận dạng media + NSFW thông qua học máy. Điều này sẽ làm tăng một chút áp lực trên máy chủ." + sensitivity: "Phát hiện nhạy cảm" + sensitivityDescription: "Giảm độ nhạy sẽ dẫn đến ít phát hiện sai hơn (dương tính + giả), tăng nó sẽ dẫn đến ít phát hiện sai hơn (âm tính giả)." + setSensitiveFlagAutomatically: "Đánh dấu là NSFW" + setSensitiveFlagAutomaticallyDescription: "Kết quả của phát hiện nội bộ sẽ được + giữ lại ngay cả khi tùy chọn này bị tắt." + analyzeVideos: "Bật chuẩn đoán video" + analyzeVideosDescription: "Phân tích video bên cạnh hình ảnh. Điều này sẽ làm tăng + một chút áp lực trên máy chủ." +_emailUnavailable: + used: "Địa chỉ email đã được sử dụng" + format: "Địa chỉ email không hợp lệ" + disposable: "Cấm sử dụng địa chỉ email dùng một lần" + mx: "Máy chủ email không hợp lệ" + smtp: "Máy chủ email không phản hồi" +_ffVisibility: + public: "Đăng" + followers: "Chỉ người theo dõi mới xem được" + private: "Riêng tư" +_signup: + almostThere: "Gần xong rồi" + emailAddressInfo: "Hãy điền địa chỉ email của bạn. Nó sẽ không được công khai." + emailSent: "Một email xác minh đã được gửi đến địa chỉ email ({email}) của bạn. + Vui lòng nhấn vào liên kết trong đó để hoàn tất việc tạo tài khoản." +_accountDelete: + accountDelete: "Xóa tài khoản" + mayTakeTime: "Vì xóa tài khoản là một quá trình tốn nhiều tài nguyên nên có thể + mất một khoảng thời gian để hoàn thành, tùy thuộc vào lượng nội dung bạn đã tạo + và số lượng tập tin bạn đã tải lên." + sendEmail: "Sau khi hoàn tất việc xóa tài khoản, một email sẽ được gửi đến địa chỉ + email đã đăng ký tài khoản này." + requestAccountDelete: "Yêu cầu xóa tài khoản" + started: "Đang bắt đầu xóa tài khoản." + inProgress: "Đang xóa dần tài khoản." +_ad: + back: "Quay lại" + reduceFrequencyOfThisAd: "Hiện ít lại" +_forgotPassword: + enterEmail: "Nhập địa chỉ email bạn đã sử dụng để đăng ký. Một liên kết mà bạn có + thể đặt lại mật khẩu của mình sau đó sẽ được gửi đến nó." + ifNoEmail: "Nếu bạn không sử dụng email lúc đăng ký, vui lòng liên hệ với quản trị + viên." + contactAdmin: "Máy chủ này không hỗ trợ sử dụng địa chỉ email, vui lòng liên hệ + với quản trị viên để đặt lại mật khẩu của bạn." +_gallery: + my: "Kho Ảnh" + liked: "Tút Đã Thích" + like: "Thích" + unlike: "Bỏ thích" +_email: + _follow: + title: "đã theo dõi bạn" + _receiveFollowRequest: + title: "Chấp nhận yêu cầu theo dõi" +_plugin: + install: "Cài đặt tiện ích" + installWarn: "Vui lòng không cài đặt những tiện ích đáng ngờ." + manage: "Quản lý plugin" +_preferencesBackups: + list: "Tạo sao lưu" + saveNew: "Lưu bản sao lưu" + loadFile: "Nhập tập tin" + apply: "Áp dụng lên thiết bị này" + save: "Lưu thay đổi" + inputName: "Nhập tên bản sao lưu" + cannotSave: "Không thể lưu" + nameAlreadyExists: "Bản sao lưu \"{name}\" đã tồn tại. Xin nhập tên khác." + applyConfirm: "Bạn có chắc muốn áp dụng bản sao lưu \"{name}\" cho thiết bị này? + Thiết lập hiện tại sẽ bị ghi đè." + saveConfirm: "Lưu bản sao lưu {name}?" + deleteConfirm: "Xóa bản sao lưu {name}?" + renameConfirm: "Đổi tên bản sao lưu \"{old}\" thành \"{new}\"?" + noBackups: "Chưa có bản sao lưu. Bạn có thể sao lưu thiết lập trên máy chủ này bằng + cách sử dụng \"Tạo sao lưu\"." + createdAt: "Tạo vào: {time} {date}" + updatedAt: "Cập nhật: {time} {date}" + cannotLoad: "Tải thất bại" + invalidFile: "Sai định dạng tập tin" +_registry: + scope: "Phạm vi" + key: "Mã" + keys: "Các mã" + domain: "Tên miền" + createKey: "Tạo mã" +_aboutFirefish: + about: "Misskey là phần mềm mã nguồn mở được phát triển bởi syuilo từ năm 2014." + contributors: "Những người đóng góp nổi bật" + allContributors: "Toàn bộ người đóng góp" + source: "Mã nguồn" + translation: "Dịch Firefish" + donate: "Ủng hộ Firefish" + donateTitle: Thích Firefish? + pleaseDonateToFirefish: Hãy cân nhắc ủng hộ Firefish phát triển. + donateHost: Ủng hộ {host} + pleaseDonateToHost: Cũng như ủng hộ chi phí vận hành máy chủ {host} của bạn. + misskeyContributors: Người đóng góp Misskey +_nsfw: + respect: "Ẩn nội dung NSFW" + ignore: "Hiện nội dung NSFW" + force: "Ẩn mọi media" +_mfm: + cheatSheet: "MFM Cheatsheet" + intro: "MFM là ngôn ngữ phát triển độc quyền của Firefish có thể được sử dụng ở + nhiều nơi. Tại đây bạn có thể xem danh sách tất cả các cú pháp MFM có sẵn." + dummy: "Firefish mở rộng thế giới Fediverse" + mention: "Nhắc đến" + mentionDescription: "Bạn có thể nhắc đến ai đó bằng cách sử dụng @tên người dùng." + hashtag: "Hashtag" + hashtagDescription: "Bạn có thể tạo một hashtag bằng #chữ hoặc #số." + url: "URL" + urlDescription: "Những URL có thể hiển thị." + link: "Đường dẫn" + linkDescription: "Các phần cụ thể của văn bản có thể được hiển thị dưới dạng URL." + bold: "In đậm" + boldDescription: "Nổi bật các chữ cái bằng cách làm chúng dày hơn." + small: "Nhỏ" + smallDescription: "Hiển thị nội dung nhỏ và mỏng." + center: "Giữa" + centerDescription: "Hiển thị nội dung căn giữa." + inlineCode: "Mã (Trong dòng)" + inlineCodeDescription: "Hiển thị tô sáng cú pháp trong dòng cho mã (chương trình)." + blockCode: "Mã (Khối)" + blockCodeDescription: "Hiển thị tô sáng cú pháp cho mã nhiều dòng (chương trình) + trong một khối." + inlineMath: "Toán học (Trong dòng)" + inlineMathDescription: "Hiển thị công thức toán (KaTeX) trong dòng" + blockMath: "Toán học (Khối)" + blockMathDescription: "Hiển thị công thức toán học nhiều dòng (KaTeX) trong một + khối" + quote: "Trích dẫn" + quoteDescription: "Hiển thị nội dung dạng lời trích dạng." + emoji: "Tùy chỉnh emoji" + emojiDescription: "Hiển thị emoji với cú pháp :tên emoji:" + search: "Tìm kiếm" + searchDescription: "Hiển thị hộp tìm kiếm với văn bản được nhập trước." + flip: "Lật" + flipDescription: "Lật nội dung theo chiều ngang hoặc chiều dọc." + jelly: "Chuyển động (Thạch rau câu)" + jellyDescription: "Cho phép nội dung chuyển động giống như thạch rau câu." + tada: "Chuyển động (Tada)" + tadaDescription: "Cho phép nội dung chuyển động kiểu \"Tada!\"." + jump: "Chuyển động (Nhảy múa)" + jumpDescription: "Cho phép nội dung chuyển động nhảy nhót." + bounce: "Chuyển động (Cà tưng)" + bounceDescription: "Cho phép nội dung chuyển động cà tưng." + shake: "Chuyển động (Rung)" + shakeDescription: "Cho phép nội dung chuyển động rung lắc." + twitch: "Chuyển động (Co rút)" + twitchDescription: "Cho phép nội dung chuyển động co rút." + spin: "Chuyển động (Xoay tít)" + spinDescription: "Cho phép nội dung chuyển động xoay tít." + x2: "Lớn" + x2Description: "Hiển thị nội dung cỡ lớn hơn." + x3: "Rất lớn" + x3Description: "Hiển thị nội dung cỡ lớn hơn nữa." + x4: "Khổng lồ" + x4Description: "Hiển thị nội dung cỡ khổng lồ." + blur: "Làm mờ" + blurDescription: "Làm mờ nội dung. Nó sẽ được hiển thị rõ ràng khi di chuột qua." + font: "Phông chữ" + fontDescription: "Chọn phông chữ để hiển thị nội dung." + rainbow: "Cầu vồng" + rainbowDescription: "Làm cho nội dung hiển thị với màu sắc cầu vồng." + sparkle: "Lấp lánh" + sparkleDescription: "Làm cho nội dung hiệu ứng hạt lấp lánh." + rotate: "Xoay" + rotateDescription: "Xoay nội dung theo một góc cụ thể." + plain: "Đơn giản" + plainDescription: "Vô hiệu hóa mọi hiệu ứng MFM chứa trong hiệu ứng MFM này." + stop: Dừng CĐN + play: Phát CĐN + warn: CĐN có thể gây đau mắt hoặc chóng mặt + alwaysPlay: Luôn tự phát các chuyển động nhanh + position: Vị trí + scaleDescription: Tỉ lệ nội dung theo số cụ thể. + advanced: Nâng cao MFM + positionDescription: Di chuyển nội dung theo một số cụ thể. + foregroundDescription: Đổi màu xung quanh văn bản. + background: Màu nền + advancedDescription: Nếu tắt, chỉ cho phép đánh dấu cơ bản trừ khi đang phát MFM + động + fade: Làm mờ + scale: Tỉ lệ + crop: Cắt + foreground: Màu nền xung quanh + fadeDescription: Làm mờ content vào và ra. + cropDescription: Cắt nội dung. + backgroundDescription: Đổi màu nền của văn bản. +_instanceTicker: + none: "Không hiển thị" + remote: "Hiện cho người dùng từ máy chủ khác" + always: "Luôn hiện" +_serverDisconnectedBehavior: + reload: "Tự động tải lại" + dialog: "Hiện hộp thoại cảnh báo" + quiet: "Hiển thị cảnh báo không phô trương" + nothing: không làm gì +_channel: + create: "Tạo kênh" + edit: "Chỉnh sửa kênh" + setBanner: "Đặt ảnh bìa" + removeBanner: "Xóa ảnh bìa" + featured: "Xu hướng" + owned: "Do tôi quản lý" + following: "Đang theo dõi" + usersCount: "{n} Thành viên" + notesCount: "{n} Tút" + nameOnly: Chỉ tên + nameAndDescription: Tên và mô tả +_menuDisplay: + sideFull: "Thanh bên" + sideIcon: "Thanh bên (Biểu tượng)" + top: "Trên cùng" + hide: "Ẩn" +_wordMute: + muteWords: "Ẩn từ ngữ" + muteWordsDescription: "Separate with spaces for an AND condition or with line breaks + for an OR condition." + muteWordsDescription2: "Bao quanh các từ khóa bằng dấu gạch chéo để sử dụng cụm + từ thông dụng." + softDescription: "Ẩn các tút phù hợp điều kiện đã đặt khỏi bảng tin." + hardDescription: "Ngăn các tút đáp ứng các điều kiện đã đặt xuất hiện trên bảng + tin. Lưu ý, những tút này sẽ không được thêm vào bảng tin ngay cả khi các điều + kiện được thay đổi." + soft: "Yếu" + hard: "Mạnh" + mutedNotes: "Những tút đã ẩn" +_instanceMute: + instanceMuteDescription: "Thao tác này sẽ ẩn mọi tút/lượt đăng lại từ các máy chủ + được liệt kê, bao gồm cả những tút dạng trả lời từ máy chủ bị ẩn." + instanceMuteDescription2: "Tách bằng cách xuống dòng" + title: "Ẩn tút từ những máy chủ đã liệt kê." + heading: "Danh sách những máy chủ bị ẩn" +_theme: + explore: "Khám phá theme" + install: "Cài đặt theme" + manage: "Quản lý theme" + code: "Mã theme" + description: "Mô tả" + installed: "{name} đã được cài đặt" + installedThemes: "Theme đã cài đặt" + builtinThemes: "Theme tích hợp sẵn" + alreadyInstalled: "Theme này đã được cài đặt" + invalid: "Định dạng của theme này không hợp lệ" + make: "Tạo theme" + base: "Dựa trên có sẵn" + addConstant: "Thêm hằng số" + constant: "Hằng số" + defaultValue: "Giá trị mặc định" + color: "Màu sắc" + refProp: "Tham chiếu một thuộc tính" + refConst: "Tham chiếu một hằng số" + key: "Khóa" + func: "Hàm" + funcKind: "Loại hàm" + argument: "Tham số" + basedProp: "Thuộc tính tham chiếu" + alpha: "Độ trong suốt" + darken: "Độ tối" + lighten: "Độ sáng" + inputConstantName: "Nhập tên cho hằng số này" + importInfo: "Nếu bạn nhập mã theme ở đây, bạn có thể nhập mã đó vào trình chỉnh + sửa theme" + deleteConstantConfirm: "Bạn có chắc muốn xóa hằng số {const} không?" + keys: + accent: "Màu phụ" + bg: "Màu nền" + fg: "Màu chữ" + focus: "Trọng tâm" + indicator: "Chỉ báo" + panel: "Thanh bên" + shadow: "Bóng mờ" + header: "Ảnh bìa" + navBg: "Nền thanh bên" + navFg: "Chữ thanh bên" + navHoverFg: "Chữ thanh bên (Khi chạm)" + navActive: "Chữ thanh bên (Khi chọn)" + navIndicator: "Chỉ báo thanh bên" + link: "Đường dẫn" + hashtag: "Hashtag" + mention: "Nhắc đến" + mentionMe: "Lượt nhắc (Tôi)" + renote: "Đăng lại" + modalBg: "Nền phương thức" + divider: "Phân chia" + scrollbarHandle: "Thanh cuộn khi giữ" + scrollbarHandleHover: "Thanh cuộn khi chạm" + dateLabelFg: "Màu ngày tháng năm" + infoBg: "Nền thông tin" + infoFg: "Chữ thông tin" + infoWarnBg: "Nền cảnh báo" + infoWarnFg: "Chữ cảnh báo" + cwBg: "Nền nút nội dung ẩn" + cwFg: "Chữ nút nội dung ẩn" + cwHoverBg: "Nền nút nội dung ẩn (Chạm)" + toastBg: "Nền thông báo" + toastFg: "Chữ thông báo" + buttonBg: "Nền nút" + buttonHoverBg: "Nền nút (Chạm)" + inputBorder: "Đường viền khung soạn thảo" + listItemHoverBg: "Nền mục liệt kê (Chạm)" + driveFolderBg: "Nền thư mục Ổ đĩa" + wallpaperOverlay: "Lớp phủ hình nền" + badge: "Huy hiệu" + messageBg: "Nền chat" + accentDarken: "Màu phụ (Tối)" + accentLighten: "Màu phụ (Sáng)" + fgHighlighted: "Chữ nổi bật" +_sfx: + note: "Tút" + noteMy: "Tút của tôi" + notification: "Thông báo" + chat: "Trò chuyện" + chatBg: "Chat (Nền)" + antenna: "Trạm phát sóng" + channel: "Kênh" +_ago: + future: "Tương lai" + justNow: "Vừa xong" + secondsAgo: "{n}s trước" + minutesAgo: "{n} phút trước" + hoursAgo: "{n} giờ" + daysAgo: "{n} ngày trước" + weeksAgo: "{n} tuần trước" + monthsAgo: "{n} tháng trước" + yearsAgo: "{n} năm trước" +_time: + second: "s" + minute: "phút" + hour: "giờ" + day: "ngày" +_tutorial: + title: "How to use Firefish" + step1_1: "Welcome!" + step1_2: "Let's get you set up. You'll be up and running in no time!" + step2_1: "First, please fill out your profile." + step2_2: "Providing some information about who you are will make it easier for others + to tell if they want to see your notes or follow you." + step3_1: "Now time to follow some people!" + step3_2: "Your home and social timelines are based off of who you follow, so try + following a couple accounts to get started.\nClick the plus circle on the top + right of a profile to follow them." + step4_1: "Let's get you out there." + step4_2: "For your first post, some people like to made a {introduction} post or + a simple \"Hello world!\"" + step5_1: "Timelines, timelines everywhere!" + step5_2: "Your instance has {timelines} different timelines enabled." + step5_3: "The Home {icon} timeline is where you can see posts from your followers." + step5_4: "The Local {icon} timeline is where you can see posts from everyone else + on this instance." + step5_5: "The Recommended {icon} timeline is where you can see posts from instances + the admins recommend." + step5_6: "The Social {icon} timeline is where you can see posts from friends of + your followers." + step5_7: "The Global {icon} timeline is where you can see posts from every other + connected instance." + step6_1: "So, what is this place?" + step6_2: "Well, you didn't just join Firefish. You joined a portal to the Fediverse, + an interconnected network of thousands of servers, called \"instances\"." + step6_3: "Each server works in different ways, and not all servers run Firefish. + This one does though! It's a bit complicated, but you'll get the hang of it in + no time." + step6_4: "Bây giờ bắt đầu khám phá, và vui thôi!" +_2fa: + alreadyRegistered: "Bạn đã đăng ký thiết bị xác minh 2 bước." + registerTOTP: "Đăng ký một thiết bị" + registerSecurityKey: "Đăng ký một mã bảo vệ" + step1: "Trước tiên, hãy cài đặt một ứng dụng xác minh (chẳng hạn như {a} hoặc {b}) + trên thiết bị của bạn." + step2: "Sau đó, quét mã QR hiển thị trên màn hình này." + step2Url: "Bạn cũng có thể nhập URL này nếu sử dụng một chương trình máy tính:" + step3: "Nhập mã token do ứng dụng của bạn cung cấp để hoàn tất thiết lập." + step4: "Kể từ bây giờ, những lần đăng nhập trong tương lai sẽ yêu cầu mã token đăng + nhập đó." + securityKeyInfo: "Bên cạnh xác minh bằng vân tay hoặc mã PIN, bạn cũng có thể thiết + lập xác minh thông qua khóa bảo mật phần cứng hỗ trợ FIDO2 để bảo mật hơn nữa + cho tài khoản của mình." + tapSecurityKey: Vui lòng theo dõi trình duyệt của bạn để đăng ký mã bảo mật hoặc + mã khóa + securityKeyName: Nhập tên mã khóa + step3Title: Nhập mã xác thực + chromePasskeyNotSupported: Mật khẩu Chrome hiện không được hỗ trợ. + removeKeyConfirm: Thực sự xóa khóa {name}? + removeKey: Xóa khóa bảo mật + step2Click: Nhấn vào mã QR này sẽ cho phép bạn đăng ký 2FA cho khóa bảo mật hoặc + ứng dụng xác thực điện thoại của bạn. + securityKeyNotSupported: Trình duyệt của bạn không hỗ trợ khóa bảo mật. + token: 2FA Token +_permissions: + "read:account": "Xem thông tin tài khoản của bạn" + "write:account": "Sửa thông tin tài khoản của bạn" + "read:blocks": "Xem danh sách người bạn chặn" + "write:blocks": "Sửa danh sách người bạn chặn" + "read:drive": "Truy cập tập tin, thư mục trong Ổ đĩa" + "write:drive": "Sửa và xóa tập tin, thư mục trong Ổ đĩa" + "read:favorites": "Xem lượt thích của tôi" + "write:favorites": "Sửa lượt thích của tôi" + "read:following": "Xem những người bạn theo dõi" + "write:following": "Theo dõi hoặc ngưng theo dõi ai đó" + "read:messaging": "Xem lịch sử chat" + "write:messaging": "Soạn hoặc xóa tin nhắn" + "read:mutes": "Xem những người bạn ẩn" + "write:mutes": "Sửa những người bạn ẩn" + "write:notes": "Soạn hoặc xóa tút" + "read:notifications": "Xem thông báo của tôi" + "write:notifications": "Quản lý thông báo của tôi" + "read:reactions": "Xem lượt biểu cảm của tôi" + "write:reactions": "Sửa lượt biểu cảm của tôi" + "write:votes": "Bình chọn" + "read:pages": "Xem trang của tôi" + "write:pages": "Sửa hoặc xóa trang của tôi" + "read:page-likes": "Xem lượt thích trên trang của tôi" + "write:page-likes": "Sửa lượt thích của tôi trên trang" + "read:user-groups": "Xem nhóm của tôi" + "write:user-groups": "Sửa hoặc xóa nhóm của tôi" + "read:channels": "Xem kênh của tôi" + "write:channels": "Sửa kênh của tôi" + "read:gallery": "Xem kho ảnh của tôi" + "write:gallery": "Sửa kho ảnh của tôi" + "read:gallery-likes": "Xem danh sách các tút đã thích trong thư viện của tôi" + "write:gallery-likes": "Sửa danh sách các tút đã thích trong thư viện của tôi" +_auth: + shareAccess: "Bạn có muốn cho phép \"{name}\" truy cập vào tài khoản này không?" + shareAccessAsk: "Bạn có chắc muốn cho phép ứng dụng này truy cập vào tài khoản của + mình không?" + permissionAsk: "Ứng dụng này yêu cầu các quyền sau" + pleaseGoBack: "Vui lòng quay lại ứng dụng" + callback: "Quay lại ứng dụng" + denied: "Truy cập bị từ chối" + allPermissions: Truy cập đầy đủ vào tài khoản + copyAsk: 'Vui lòng dán mã ủy quyền sau vào ứng dụng:' +_antennaSources: + all: "Toàn bộ tút" + homeTimeline: "Tút từ những người đã theo dõi" + users: "Tút từ những người cụ thể" + userList: "Tút từ danh sách người dùng cụ thể" + userGroup: "Tút từ người dùng trong một nhóm cụ thể" + instances: Tút từ mọi người trên máy chủ +_weekday: + sunday: "Chủ Nhật" + monday: "Thứ Hai" + tuesday: "Thứ Ba" + wednesday: "Thứ Tư" + thursday: "Thứ Năm" + friday: "Thứ Sáu" + saturday: "Thứ Bảy" +_widgets: + memo: "Tút đã ghim" + notifications: "Thông báo" + timeline: "Bảng tin" + calendar: "Lịch" + trends: "Xu hướng" + clock: "Đồng hồ" + rss: "Trình đọc RSS" + rssTicker: "RSS-Ticker" + activity: "Hoạt động" + photos: "Kho ảnh" + digitalClock: "Đồng hồ số" + unixClock: "Đồng hồ UNIX" + federation: "Liên hợp" + instanceCloud: "Instance cloud" + postForm: "Mẫu đăng" + slideshow: "Trình chiếu" + button: "Nút" + onlineUsers: "Ai đang online" + jobQueue: "Công việc chờ xử lý" + serverMetric: "Thống kê máy chủ" + aiscript: "AiScript console" + aichan: "Ai" + userList: Danh sách người dùng + _userList: + chooseList: Chọn một danh sách + serverInfo: Thông tin máy chủ +_cw: + hide: "Ẩn" + show: "Tải thêm" + chars: "{count} ký tự" + files: "{count} tập tin" +_poll: + noOnlyOneChoice: "Cần ít nhất hai lựa chọn." + choiceN: "Lựa chọn {n}" + noMore: "Bạn không thể thêm lựa chọn" + canMultipleVote: "Cho phép chọn nhiều lựa chọn" + expiration: "Thời hạn" + infinite: "Vĩnh viễn" + at: "Kết thúc vào..." + after: "Kết thúc sau..." + deadlineDate: "Ngày kết thúc" + deadlineTime: "giờ" + duration: "Thời hạn" + votesCount: "{n} bình chọn" + totalVotes: "{n} lượt bình chọn" + vote: "Bình chọn" + showResult: "Xem kết quả" + voted: "Đã bình chọn" + closed: "Đã kết thúc" + remainingDays: "{d} ngày {h} giờ còn lại" + remainingHours: "{h} giờ {m} phút còn lại" + remainingMinutes: "{m} phút {s}s còn lại" + remainingSeconds: "{s}s còn lại" +_visibility: + public: "Công khai" + publicDescription: "Mọi người đều có thể đọc tút của bạn" + home: "Trang chính" + homeDescription: "Chỉ đăng lên bảng tin nhà" + followers: "Người theo dõi" + followersDescription: "Dành riêng cho người theo dõi" + specified: "Nhắn riêng" + specifiedDescription: "Chỉ người được nhắc đến mới thấy" + localOnly: "Chỉ trên máy chủ" + localOnlyDescription: "Không hiển thị với người ở máy chủ khác" +_postForm: + replyPlaceholder: "Trả lời tút này" + quotePlaceholder: "Trích dẫn tút này" + channelPlaceholder: "Đăng lên một kênh" + _placeholders: + a: "Bạn đang định làm gì?" + b: "Hôm nay bạn có gì vui?" + c: "Bạn đang nghĩ gì?" + d: "Bạn muốn nói gì?" + e: "Bắt đầu viết..." + f: "Đang chờ bạn viết..." +_profile: + name: "Tên" + username: "Tên người dùng" + description: "Tiểu sử" + youCanIncludeHashtags: "Bạn có thể dùng hashtag trong tiểu sử." + metadata: "Thông tin bổ sung" + metadataEdit: "Sửa thông tin bổ sung" + metadataDescription: "Sử dụng phần này, bạn có thể hiển thị các mục thông tin bổ + sung trong hồ sơ của mình. Bạn có thể thêm thẻ {a} hoặc thẻ {l} với {rel} để xác + minh liên kết trên tiểu sử của mình!" + metadataLabel: "Nhãn" + metadataContent: "Nội dung" + changeAvatar: "Đổi ảnh đại diện" + changeBanner: "Đổi ảnh bìa" + locationDescription: Nếu bạn nhập thành phố của mình trước, nó sẽ hiển thị giờ địa + phương của bạn cho những người dùng khác. +_exportOrImport: + allNotes: "Toàn bộ tút" + followingList: "Đang theo dõi" + muteList: "Ẩn" + blockingList: "Chặn" + userLists: "Danh sách" + excludeMutingUsers: "Loại trừ những người dùng bị ẩn" + excludeInactiveUsers: "Loại trừ những người dùng không hoạt động" +_charts: + federation: "Liên hợp" + apRequest: "Yêu cầu" + usersIncDec: "Sự khác biệt về số lượng người dùng" + usersTotal: "Tổng số người dùng" + activeUsers: "Số người đang hoạt động" + notesIncDec: "Sự khác biệt về số lượng tút" + localNotesIncDec: "Sự khác biệt về số lượng tút máy chủ này" + remoteNotesIncDec: "Sự khác biệt về số lượng tút từ máy chủ khác" + notesTotal: "Tổng số sút" + filesIncDec: "Sự khác biệt về số lượng tập tin" + filesTotal: "Tổng số tập tin" + storageUsageIncDec: "Sự khác biệt về dung lượng lưu trữ" + storageUsageTotal: "Tổng dung lượng lưu trữ" +_instanceCharts: + requests: "Lượt yêu cầu" + users: "Sự khác biệt về số lượng người dùng" + usersTotal: "Số lượng người dùng tích lũy" + notes: "Sự khác biệt về số lượng tút" + notesTotal: "Số lượng tút tích lũy" + ff: "Sự khác biệt về số lượng người dùng được theo dõi/người theo dõi" + ffTotal: "Số lượng người dùng được theo dõi/người theo dõi tích lũy" + cacheSize: "Sự khác biệt về dung lượng bộ nhớ đệm" + cacheSizeTotal: "Dung lượng bộ nhớ đệm tích lũy" + files: "Sự khác biệt về số lượng tập tin" + filesTotal: "Số lượng tập tin tích lũy" +_timelines: + home: "Trang chính" + local: "Máy chủ này" + social: "Xã hội" + global: "Liên hợp" + recommended: Đề xuất +_pages: + newPage: "Tạo Trang mới" + editPage: "Sửa Trang này" + readPage: "Xem mã nguồn Trang này" + created: "Trang đã được tạo thành công" + updated: "Trang đã được cập nhật thành công" + deleted: "Trang đã được xóa thành công" + pageSetting: "Cài đặt trang" + nameAlreadyExists: "URL Trang đã tồn tại" + invalidNameTitle: "URL Trang không hợp lệ" + invalidNameText: "Không được để trống tựa đề Trang" + editThisPage: "Sửa Trang này" + viewSource: "Xem mã nguồn" + viewPage: "Xem trang của tôi" + like: "Thích" + unlike: "Bỏ thích" + my: "Trang của tôi" + liked: "Trang đã thích" + featured: "Nổi tiếng" + inspector: "Thanh tra" + contents: "Nội dung" + content: "Chặn Trang" + variables: "Biến thể" + title: "Tựa đề" + url: "URL Trang" + summary: "Mô tả Trang" + alignCenter: "Căn giữa" + hideTitleWhenPinned: "Ẩn tựa đề Trang khi ghim lên hồ sơ" + font: "Phông chữ" + fontSerif: "Serif" + fontSansSerif: "Sans Serif" + eyeCatchingImageSet: "Đặt ảnh thu nhỏ" + eyeCatchingImageRemove: "Xóa ảnh thu nhỏ" + chooseBlock: "Thêm khối" + selectType: "Chọn kiểu" + enterVariableName: "Nhập tên một biến thể" + variableNameIsAlreadyUsed: "Tên biến thể này đã được sử dụng" + contentBlocks: "Nội dung" + inputBlocks: "Nhập" + specialBlocks: "Đặc biệt" + blocks: + text: "Văn bản" + textarea: "Khu vực văn bản" + section: "Mục " + image: "Hình ảnh" + button: "Nút" + if: "Nếu" + _if: + variable: "Biến thể" + post: "Mẫu đăng" + _post: + text: "Nội dung" + attachCanvasImage: "Đính kèm hình canva" + canvasId: "ID Canva" + textInput: "Văn bản đầu vào" + _textInput: + name: "Tên biến thể" + text: "Tựa đề" + default: "Giá trị mặc định" + textareaInput: "Văn bản nhiều dòng đầu vào" + _textareaInput: + name: "Tên biến thể" + text: "Tựa đề" + default: "Giá trị mặc định" + numberInput: "Đầu vào số" + _numberInput: + name: "Tên biến thể" + text: "Tựa đề" + default: "Giá trị mặc định" + canvas: "Canva" + _canvas: + id: "ID Canva" + width: "Chiều rộng" + height: "Chiều cao" + note: "Tút đã nhúng" + _note: + id: "ID tút" + idDescription: "Ngoài ra, bạn có thể dán URL tút vào đây." + detailed: "Xem chi tiết" + switch: "Chuyển đổi" + _switch: + name: "Tên biến thể" + text: "Tựa đề" + default: "Giá trị mặc định" + counter: "Bộ đếm" + _counter: + name: "Tên biến thể" + text: "Tựa đề" + inc: "Bước" + _button: + text: "Tựa đề" + colored: "Với màu" + action: "Thao tác khi nhấn nút" + _action: + dialog: "Hiện hộp thoại" + _dialog: + content: "Nội dung" + resetRandom: "Đặt lại seed ngẫu nhiên" + pushEvent: "Gửi một sự kiện" + _pushEvent: + event: "Tên sự kiện" + message: "Tin nhắn hiển thị khi kích hoạt" + variable: "Biển thể để gửi" + no-variable: "Không" + callAiScript: "Gọi AiScript" + _callAiScript: + functionName: "Tên tính năng" + radioButton: "Lựa chọn" + _radioButton: + name: "Tên biến thể" + title: "Tựa đề" + values: "Phân tách các mục bằng cách xuống dòng" + default: "Giá trị mặc định" + script: + categories: + flow: "Điều khiển" + logical: "Hoạt động logic" + operation: "Tính toán" + comparison: "So sánh" + random: "Ngẫu nhiên" + value: "Giá trị" + fn: "Tính năng" + text: "Tác vụ văn bản" + convert: "Chuyển đổi" + list: "Danh sách" + blocks: + text: "Văn bản" + multiLineText: "Văn bản (nhiều dòng)" + textList: "Văn bản liệt kê" + _textList: + info: "Phân tách mục bằng cách xuống dòng" + strLen: "Độ dài văn bản" + _strLen: + arg1: "Văn bản" + strPick: "Trích xuất chuỗi" + _strPick: + arg1: "Văn bản" + arg2: "Vị trí chuỗi" + strReplace: "Thay thế chuỗi" + _strReplace: + arg1: "Nội dung" + arg2: "Văn bản thay thế" + arg3: "Thay thế bằng" + strReverse: "Lật văn bản" + _strReverse: + arg1: "Văn bản" + join: "Nối văn bản" + _join: + arg1: "Danh sách" + arg2: "Phân cách" + add: "Cộng" + _add: + arg1: "A" + arg2: "B" + subtract: "Trừ" + _subtract: + arg1: "A" + arg2: "B" + multiply: "Nhân" + _multiply: + arg1: "A" + arg2: "B" + divide: "Chia" + _divide: + arg1: "A" + arg2: "B" + mod: "Phần còn lại" + _mod: + arg1: "A" + arg2: "B" + round: "Làm tròn thập phân" + _round: + arg1: "Số" + eq: "A và B bằng nhau" + _eq: + arg1: "A" + arg2: "B" + notEq: "A và B khác nhau" + _notEq: + arg1: "A" + arg2: "B" + and: "A VÀ B" + _and: + arg1: "A" + arg2: "B" + or: "A HOẶC B" + _or: + arg1: "A" + arg2: "B" + lt: "< A nhỏ hơn B" + _lt: + arg1: "A" + arg2: "B" + gt: "> A lớn hơn B" + _gt: + arg1: "A" + arg2: "B" + ltEq: "<= A nhỏ hơn hoặc bằng B" + _ltEq: + arg1: "A" + arg2: "B" + gtEq: ">= A lớn hơn hoặc bằng B" + _gtEq: + arg1: "A" + arg2: "B" + if: "Nhánh" + _if: + arg1: "Nếu" + arg2: "Sau đó" + arg3: "Khác" + not: "KHÔNG" + _not: + arg1: "KHÔNG" + random: "Ngẫu nhiên" + _random: + arg1: "Xác suất" + rannum: "Số ngẫu nhiên" + _rannum: + arg1: "Giá trị tối thiểu" + arg2: "Giá trị tối đa" + randomPick: "Chọn ngẫu nhiên từ danh sách" + _randomPick: + arg1: "Danh sách" + dailyRandom: "Ngẫu nhiên (Đổi mỗi người một lần mỗi ngày)" + _dailyRandom: + arg1: "Xác suất" + dailyRannum: "Số ngẫu nhiên (Đổi mỗi người một lần mỗi ngày)" + _dailyRannum: + arg1: "Giá trị tối thiểu" + arg2: "Giá trị tối đa" + dailyRandomPick: "Chọn ngẫu nhiên từ một danh sách (Đổi mỗi người một lần mỗi + ngày)" + _dailyRandomPick: + arg1: "Danh sách" + seedRandom: "Ngẫu nhiên (với seed)" + _seedRandom: + arg1: "Seed" + arg2: "Xác suất" + seedRannum: "Số ngẫu nhiên (với seed)" + _seedRannum: + arg1: "Seed" + arg2: "Giá trị tối thiểu" + arg3: "Giá trị tối đa" + seedRandomPick: "Chọn ngẫu nhiên từ danh sách (với seed)" + _seedRandomPick: + arg1: "Seed" + arg2: "Danh sách" + DRPWPM: "Chọn ngẫu nhiên từ danh sách nặng (Đổi mỗi người một lần mỗi ngày)" + _DRPWPM: + arg1: "Văn bản liệt kê" + pick: "Chọn từ danh sách" + _pick: + arg1: "Danh sách" + arg2: "Vị trí" + listLen: "Lấy độ dài danh sách" + _listLen: + arg1: "Danh sách" + number: "Số" + stringToNumber: "Chữ thành số" + _stringToNumber: + arg1: "Văn bản" + numberToString: "Số thành chữ" + _numberToString: + arg1: "Số" + splitStrByLine: "Phân cách văn bản bằng cách xuống dòng" + _splitStrByLine: + arg1: "Văn bản" + ref: "Biến thể" + aiScriptVar: "Biển thể AiScript" + fn: "Tính năng" + _fn: + slots: "Chỗ" + slots-info: "Phân cách chỗ bằng cách xuống dòng" + arg1: "Đầu ra" + for: "để-Lặp lại" + _for: + arg1: "Số lần lặp lại" + arg2: "Hành động" + typeError: "Chỗ {slot} chấp nhận các giá trị thuộc loại \"{expect}\", nhưng giá + trị được cung cấp thuộc loại \"{actual}\"!" + thereIsEmptySlot: "Chỗ {slot} đang trống!" + types: + string: "Văn bản" + number: "Số" + boolean: "Cờ" + array: "Danh sách" + stringArray: "Văn bản liệt kê" + emptySlot: "Chỗ trống" + enviromentVariables: "Biến môi trường" + pageVariables: "Biến trang" + argVariables: "Đầu vào chỗ" +_relayStatus: + requesting: "Đang chờ" + accepted: "Đã duyệt" + rejected: "Đã từ chối" +_notification: + fileUploaded: "Đã tải lên tập tin" + youGotMention: "{name} nhắc đến bạn" + youGotReply: "{name} trả lời bạn" + youGotQuote: "{name} trích dẫn tút của bạn" + youRenoted: "{name} đăng lại tút của bạn" + youGotPoll: "{name} bình chọn tút của bạn" + youGotMessagingMessageFromUser: "{name} nhắn tin cho bạn" + youGotMessagingMessageFromGroup: "Một tin nhắn trong nhóm {name}" + youWereFollowed: "đã theo dõi bạn" + youReceivedFollowRequest: "Bạn vừa có một yêu cầu theo dõi" + yourFollowRequestAccepted: "Yêu cầu theo dõi của bạn đã được chấp nhận" + youWereInvitedToGroup: "Bạn đã được mời tham gia nhóm" + pollEnded: "Cuộc bình chọn đã kết thúc" + emptyPushNotificationMessage: "Đã cập nhật thông báo đẩy" + _types: + all: "Toàn bộ" + follow: "Đang theo dõi" + mention: "Nhắc đến" + reply: "Lượt trả lời" + renote: "Đăng lại" + quote: "Trích dẫn" + reaction: "Biểu cảm" + pollVote: "Lượt bình chọn" + pollEnded: "Bình chọn kết thúc" + receiveFollowRequest: "Yêu cầu theo dõi" + followRequestAccepted: "Yêu cầu theo dõi được chấp nhận" + groupInvited: "Mời vào nhóm" + app: "Từ app liên kết" + _actions: + followBack: "đã theo dõi lại bạn" + reply: "Trả lời" + renote: "Đăng lại" + voted: đã bình chọn tút của bạn + reacted: đã biểu cảm tút của bạn + renoted: đã đăng lại tút của bạn +_deck: + alwaysShowMainColumn: "Luôn hiện cột chính" + columnAlign: "Căn cột" + addColumn: "Thêm cột" + configureColumn: "Cài đặt cột" + swapLeft: "Hoán đổi với cột bên trái" + swapRight: "Hoán đổi với cột bên phải" + swapUp: "Hoán đổi với cột trên" + swapDown: "Hoán đổi với cột dưới" + stackLeft: "Xếp chồng với cột bên trái" + popRight: "Xếp chồng với cột bên trái" + profile: "Hồ sơ" + newProfile: "Hồ sơ mới" + deleteProfile: "Xóa hồ sơ" + introduction: "Kết hợp các cột để tạo giao diện của riêng bạn!" + introduction2: "Bạn có thể thêm cột bất kỳ lúc nào bằng cách nhấn + ở bên phải màn + hình." + widgetsIntroduction: "Chọn \"Sửa widget\" trong menu cột và thêm một widget." + _columns: + main: "Chính" + widgets: "Tiện ích" + notifications: "Thông báo" + tl: "Bảng tin" + antenna: "Trạm phát sóng" + list: "Danh sách" + mentions: "Lượt nhắc" + direct: "Nhắn riêng" + channel: Kênh + renameProfile: Đổi tên workspace + nameAlreadyExists: Tên workspace này đã tồn tại. +renoteMute: Ẩn lượt chia sẻ +renoteUnmute: Bỏ ẩn lượt chia sẻ +searchPlaceholder: Lướt Firefish +edited: Đã sửa {date} {time} +noThankYou: Từ chối +_filters: + withFile: Có file + notesAfter: Đăng sau + followersOnly: Chỉ người theo dõi + fromUser: Từ người dùng + notesBefore: Đăng trước + followingOnly: Đang theo dõi + fromDomain: Từ máy chủ +flagSpeakAsCatDescription: Tút của bạn sẽ biến hóa ngộ nghĩnh khi bật chế độ tôi là + mèo +secureModeInfo: Khi truy vấn từ máy chủ khác, không nhận nếu không có bằng chứng. +pushNotificationNotSupported: Trình duyệt hoặc máy chủ không hỗ trợ thông báo đẩy +sendPushNotificationReadMessage: Xóa thông báo đẩy sau khi thông báo hoặc tin nhắn + liên quan đã được đọc +adminCustomCssWarn: Cài đặt này chỉ nên được sử dụng nếu bạn biết rõ cách thức hoạt + động của nó. Việc nhập các giá trị không phù hợp có thể khiến app của MỌI NGƯỜI + ngừng hoạt động. Vui lòng đảm bảo rằng CSS của bạn hoạt động bình thường bằng cách + kiểm tra nó trong cài đặt người dùng của bạn. +enableCustomKaTeXMacro: Bật tùy chỉnh macro KaTeX +noGraze: Vui lòng tắt tiện ích mở rộng trình duyệt "Graze for Mastodon" vì tiện ích + này can thiệp vào Firefish. +addRe: Thêm "re:" vào đầu bình luận để trả lời tút có cảnh báo nội dung +_experiments: + postImportsCaption: Cho phép người dùng nhập các bài đăng của họ từ các tài khoản + Firefish, Misskey, Mastodon, Akkoma và Pleroma trước đây. Nó có thể gây chậm trong + quá trình tải nếu hàng đợi của bạn bị tắc nghẽn. + title: Thử nghiệm + enablePostImports: Bật nhập tút +_skinTones: + medium: Vừa + light: Sáng + dark: Đen + yellow: Vàng + mediumLight: Sáng Vừa + mediumDark: Đen Vừa +removeReaction: Xóa biểu cảm +enableRecommendedTimeline: Bật bảng tin đề xuất +antennasDesc: "Ăng-ten hiển thị tút mới phù hợp với tiêu chí bạn đặt!\n Chúng có thể + được truy cập từ trang bảng tin." +userSaysSomethingReasonQuote: '{name} trích dẫn một tút chứa {reason}' +allowedInstancesDescription: Host của máy chủ được đưa vào danh sách trắng để liên + hợp, mỗi máy chủ được phân tách bằng cách xuống dòng (chỉ áp dụng ở chế độ riêng + tư). +sendPushNotificationReadMessageCaption: Sẽ hiện thông báo "{emptyPushNotificationMessage}" + trong một khoảng thời gian ngắn. Điều này có thể gây tốn pin của thiết bị. +enterSendsMessage: Nhấn Trở lại trong Tin nhắn để gửi tin nhắn (tắt là Ctlr + Return) +showAdminUpdates: Thông báo có phiên bản Firefish mới (chỉ dành cho quản trị viên) +replayTutorial: Phát lại hướng dẫn +moveFrom: Chuyển từ tài khoản cũ sang +moveFromDescription: Thao tác này sẽ đặt bí danh cho tài khoản cũ của bạn để bạn có + thể chuyển từ tài khoản đó sang tài khoản hiện tại. Làm điều này TRƯỚC KHI di chuyển + từ tài khoản cũ của bạn. Vui lòng nhập định dạng @person@server.com +signupsDisabled: Máy chủ này hiện đang bị tắt đăng ký, nhưng bạn luôn có thể đăng + ký tại một máy chủ khác! Nếu bạn có mã mời cho máy chủ này, vui lòng nhập mã đó + vào bên dưới. +silencedWarning: Trang này đang hiển thị vì những người dùng này đến từ các máy chủ + mà quản trị viên của bạn đã ẩn, vì vậy họ có thể là spam. +_dialog: + charactersExceeded: 'Vượt quá giới hạn ký tự! Hiện tại: {current}/Tối đa: {max}' + charactersBelow: 'Không đủ ký tự tối thiểu! Hiện tại: {current}/Tối thiểu: {min}' +enableIdenticonGeneration: Bật tạo identicon +enableServerMachineStats: Bật thống kê phần cứng máy chủ +secureMode: Chế độ an toàn (Phê duyệt nạp) +_messaging: + dms: Riêng tư + groups: Nhóm +moveToLabel: 'Tài khoản bạn chuyển tới:' +reactionPickerSkinTone: Chọn màu da emoji +jumpToPrevious: Về trước +listsDesc: Danh sách cho phép bạn tạo các bảng tin với những người dùng chọn trước. + Xem danh sách ở trang bảng tin. +enableEmojiReactions: Bật biểu cảm bằng emoji +showEmojisInReactionNotifications: Hiện emoji trong thông báo biểu cảm +silencedInstancesDescription: Liệt kê địa chủ của các máy chủ mà bạn muốn ẩn. Tài + khoản trong các máy chủ được liệt kê được coi là "Ẩn", chỉ có thể thực hiện các + yêu cầu theo dõi và không thể nhắn riêng đến tài khoản máy chủ nếu không được theo + dõi. Điều này sẽ không ảnh hưởng đến các máy chủ bị chặn. +silenced: Đã ẩn +expandOnNoteClick: Mở tút khi nhấn vào +expandOnNoteClickDesc: Nếu tắt, bạn vẫn có thể chọn mở tút trong menu chuột phải hoặc + nhấn vào thời gian đăng. +userSaysSomethingReasonReply: '{name} trả lời một tút chứa {reason}' +userSaysSomethingReasonRenote: '{name} đăng lại một tút chứa {reason}' +channelFederationWarn: Kênh chưa thể liên hợp với máy chủ khác +clipsDesc: Ghim là những tút bạn muốn luôn hiển thị đầu tiên. Bạn có thể tạo ghim + từ menu của mỗi tút. +seperateRenoteQuote: Phân chia nút đăng lại và trích dẫn +subscribePushNotification: Bật thông báo đẩy +noteId: ID tút +moveAccount: Đã chuyển tài khoản! +sendModMail: Gửi lưu ý kiểm duyệt +verifiedLink: Liên kết xác minh +_feeds: + copyFeed: Sao chép feed + rss: RSS + atom: Atom + jsonFeed: JSON +hiddenTags: Những hashtag đã ẩn +cannotUploadBecauseExceedsFileSizeLimit: Không thể tải lên vì vượt quá dung lượng + cho phép. +pushNotificationAlreadySubscribed: Đã bật thông báo đẩy +splash: Splash Screen +alt: ALT +showAds: Hiện banner cộng đồng +migration: Chuyển máy chủ +swipeOnMobile: Cho phép vuốt giữa các trang +logoImageUrl: Đường dẫn hình ảnh logo +moveTo: Chuyển đến tài khoản mới +moveAccountDescription: Quá trình này là không thể đảo ngược. Đảm bảo rằng bạn đã + thiết lập bí danh cho tài khoản này trên tài khoản mới của mình trước khi di chuyển. + Vui lòng nhập định dạng @person@server.com +antennaInstancesDescription: Liệt kê mỗi máy chủ một dòng +privateModeInfo: Khi bật, chỉ các máy chủ trong danh sách trắng mới có thể liên hợp + với máy chủ của bạn. Tất cả tút sẽ được ẩn khỏi công khai. +unsubscribePushNotification: Tắt thông báo đẩy +customMOTD: Tùy chỉnh MOTD (tin nhắn lướt qua trên màn hình) +deleted: Đã xóa +editNote: Sửa tút +flagSpeakAsCat: Tôi là mèo +silenceThisInstance: Ẩn máy chủ này +silencedInstances: Những máy chủ đã ẩn +instanceSecurity: An toàn máy chủ +showUpdates: Hiện popup khi Firefish có cập nhật +selectChannel: Chọn kênh +isBot: Đây là tài khoản bot +isLocked: Tài khoản này duyệt theo dõi thủ công +origin: Gốc +newer: mới hơn +older: cũ hơn +accountMoved: 'Người này đã chuyển sang:' +hiddenTagsDescription: 'Liệt kê các hashtag (không có #) mà bạn muốn ẩn khỏi xu hướng + và khám phá. Các thẻ bắt đầu bằng # đã ẩn vẫn có thể được thấy ở các nơi khác.' +noInstances: Không có máy chủ nào +manageGroups: Quản lý nhóm +accessibility: Khả năng tiếp cận +breakFollowConfirm: Bạn có chắc muốn xóa người theo dõi? +caption: Caption tự động +objectStorageS3ForcePathStyle: Sử dụng URL điểm cuối dựa trên đường dẫn +objectStorageS3ForcePathStyleDesc: Bật tính năng này để tạo URL điểm cuối ở định dạng + 's3.amazonaws.com//' thay vì '.s3.amazonaws.com'. +privateMode: Chế độ riêng tư +allowedInstances: Danh sách trắng +customMOTDDescription: Tùy chỉnh tin nhắn MOTD (splash screen) được phân tách bằng + dấu ngắt dòng để được hiển thị ngẫu nhiên mỗi khi người dùng tải/tải lại trang. +customSplashIcons: Tùy chỉnh biểu tượng splash screen (urls) +customSplashIconsDescription: URL cho các biểu tượng splash screen tùy chỉnh được + phân tách bằng dấu ngắt dòng sẽ được hiển thị ngẫu nhiên mỗi khi người dùng tải/tải + lại trang. Vui lòng đảm bảo rằng các hình ảnh nằm trên một URL tĩnh, tốt nhất là + tất cả đã được thay đổi kích thước thành 192x192. +recommendedInstances: Máy chủ đề xuất +updateAvailable: Có bản cập nhật mới! +swipeOnDesktop: Cho phép vuốt kiểu điện thoại trên máy tính +moveFromLabel: 'Tài khoản cũ của bạn:' +defaultReaction: Biểu cảm mặc định cho những tút đã đăng và sắp đăng +donationLink: Liên kết tới trang tài trợ +deletePasskeys: Xóa passkey +delete2faConfirm: Thao tác này sẽ xóa 2FA trên tài khoản này một cách không thể phục + hồi. Tiếp tục? +deletePasskeysConfirm: Thao tác này sẽ xóa hoàn toàn tất cả mật khẩu và khóa bảo mật + trên tài khoản này. Tiếp tục? +inputNotMatch: Không trùng khớp +addInstance: Thêm một máy chủ +delete2fa: Tắt 2FA +apps: App +image: Hình ảnh +video: Video +audio: Âm thanh +selectInstance: Chọn máy chủ +userSaysSomethingReason: '{name} cho biết {reason}' +pushNotification: Thông báo đẩy +customKaTeXMacro: Tùy chỉnh macro KaTeX +license: Giấy phép +cw: Nội dung ẩn +showPopup: Thông báo người dùng bằng popup +showWithSparkles: Hiện kèm hiệu ứng lấp lánh +youHaveUnreadAnnouncements: Bạn có thông báo chưa đọc +migrationConfirm: "Bạn có hoàn toàn chắc chắn muốn di chuyển tài khoản của mình sang + {account} không? Sau khi thực hiện việc này, bạn sẽ không thể đảo ngược nó và sẽ + không thể sử dụng lại tài khoản của mình một cách bình thường.\nNgoài ra, vui lòng + đảm bảo rằng bạn đã đặt tài khoản hiện tại này làm tài khoản mà bạn đang chuyển + từ đó." +xl: XL +neverShow: Không hiện lại nữa +remindMeLater: Để sau +removeQuote: Xóa trích dẫn +removeRecipient: Xóa người nhận +removeMember: Xóa thành viên +customKaTeXMacroDescription: 'Thiết lập macro để viết các biểu thức toán học một cách + dễ dàng! Ký hiệu tuân theo định nghĩa lệnh của LaTeX và được viết là \newcommand{\ + name}{content} hoặc \newcommand{\name}[số lượng đối số]{content}. Ví dụ: \newcommand{\add}[2]{#1 + + #2} sẽ mở rộng \add{3}{foo} thành 3 + foo. Dấu ngoặc nhọn bao quanh tên macro + có thể được thay đổi thành dấu ngoặc tròn hoặc vuông. Điều này ảnh hưởng đến các + dấu ngoặc được sử dụng cho các đối số. Một (và chỉ một) macro có thể được xác định + trên mỗi dòng và bạn không thể ngắt dòng ở giữa định nghĩa. Các dòng không hợp lệ + chỉ đơn giản là bị bỏ qua. Chỉ hỗ trợ các hàm thay thế chuỗi đơn giản; cú pháp nâng + cao, chẳng hạn như phân nhánh có điều kiện, không thể được sử dụng ở đây.' +preventAiLearning: Chặn AI bot càn quét +preventAiLearningDescription: Yêu cầu các mô hình ngôn ngữ AI của bên thứ ba không + nghiên cứu nội dung bạn tải lên, chẳng hạn như tút và hình ảnh. +isModerator: Kiểm duyệt viên +isAdmin: Quản trị viên +isPatron: Người bảo trợ Firefish +recommendedInstancesDescription: Các máy chủ được đề xuất được phân tách bằng dấu + ngắt dòng để xuất hiện trong bảng tin đề xuất. diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml new file mode 100644 index 0000000..3d80c0f --- /dev/null +++ b/locales/zh-CN.yml @@ -0,0 +1,2089 @@ +_lang_: "简体中文" +headlineFirefish: "一个开源、去中心化的社交媒体平台,永远免费!🚀" +introFirefish: "欢迎! Firefish 是一个开源、去中心化的社交媒体平台,永久免费!🚀" +monthAndDay: "{month} 月 {day} 日" +search: "搜索" +notifications: "通知" +username: "用户名" +password: "密码" +forgotPassword: "忘记密码" +fetchingAsApObject: "正在从联邦宇宙查询" +ok: "好" +gotIt: "知道了!" +cancel: "取消" +enterUsername: "输入用户名" +renotedBy: "{user} 转发了" +noNotes: "没有帖子" +noNotifications: "没有通知" +instance: "服务器" +settings: "设置" +basicSettings: "基本设置" +otherSettings: "其它设置" +openInWindow: "在新窗口中打开" +profile: "个人资料" +timeline: "时间线" +noAccountDescription: "这个人很懒,没有写自我介绍。" +login: "登录" +loggingIn: "正在登录" +logout: "登出" +signup: "新用户注册" +uploading: "正在上传..." +save: "保存" +users: "用户" +addUser: "添加用户" +favorite: "添加到收藏" +favorites: "收藏" +unfavorite: "取消收藏" +favorited: "已添加到收藏。" +alreadyFavorited: "收藏中已存在。" +cantFavorite: "无法添加到收藏。" +pin: "置顶" +unpin: "取消置顶" +copyContent: "复制内容" +copyLink: "复制链接" +delete: "删除" +deleteAndEdit: "删除并编辑" +deleteAndEditConfirm: "要删除此帖子并再次编辑吗?对此帖子的所有回应、转发和回复也将被删除。" +addToList: "添加至列表" +sendMessage: "发送" +copyUsername: "复制用户名" +searchUser: "搜索用户" +reply: "回复" +replies: "回复" +toReply: "回复" +loadMore: "加载更多" +showMore: "查看更多" +showLess: "关闭" +youGotNewFollower: "关注了您" +receiveFollowRequest: "收到了关注请求" +followRequestAccepted: "关注请求已通过" +mention: "提及" +mentions: "提及" +directNotes: "私信" +importAndExport: "导入 / 导出数据" +import: "导入" +export: "导出" +files: "文件" +download: "下载" +driveFileDeleteConfirm: "要删除文件「{name}」吗?它将从所有作为附件包含它的帖子中删除。" +unfollowConfirm: "要取消关注 {name} 吗?" +exportRequested: "导出请求已提交,这可能需要花一些时间,导出的文件将保存到网盘中。" +importRequested: "导入请求已提交,这可能需要花一点时间。" +lists: "列表" +noLists: "列表为空" +note: "帖子" +notes: "帖子" +toPost: "发帖" +following: "关注中" +followers: "关注者" +followsYou: "关注了您" +createList: "创建列表" +manageLists: "管理列表" +error: "错误" +somethingHappened: "发生了一个错误" +retry: "重试" +pageLoadError: "页面加载时发生错误。" +pageLoadErrorDescription: "这通常是由于网络错误或浏览器缓存的原因。请清除缓存或等待片刻后重试。" +serverIsDead: "服务器没有响应。 请稍等片刻,然后重试。" +youShouldUpgradeClient: "请重新加载并使用新版本的客户端查看此页面。" +enterListName: "输入列表名称" +privacy: "隐私" +makeFollowManuallyApprove: "关注请求需要批准" +defaultNoteVisibility: "默认可见性" +follow: "关注" +followRequest: "关注请求" +followRequests: "关注请求" +sentFollowRequests: "待回应的关注请求" +unfollow: "取消关注" +followRequestPending: "关注请求待批准" +enterEmoji: "输入表情符号" +renote: "转发" +renotes: "转发" +unrenote: "取消转发" +renoted: "已转发。" +cantRenote: "此帖子无法被转发。" +cantReRenote: "转发无法被再次转发。" +quote: "引用" +quotes: "引用" +toQuote: "引用" +pinnedNote: "已置顶的帖子" +pinned: "置顶" +you: "您" +clickToShow: "点击以显示" +sensitive: "敏感内容" +add: "添加" +reaction: "回应" +reactions: "回应" +enableEmojiReaction: "启用表情符号回应" +showEmojisInReactionNotifications: "在回应通知中显示表情符号" +reactionSetting: "在回应选择器中显示的回应" +reactionSettingDescription2: "拖动重新排序,单击删除,点击 + 添加。" +rememberNoteVisibility: "保存帖子可见性设置" +attachCancel: "删除附件" +markAsSensitive: "标记为敏感内容" +unmarkAsSensitive: "取消标记为敏感内容" +enterFileName: "请输入文件名" +mute: "静音" +unmute: "取消静音" +renoteMute: "静音转发" +renoteUnmute: "取消静音转发" +block: "屏蔽" +unblock: "取消屏蔽" +suspend: "冻结" +unsuspend: "解除冻结" +blockConfirm: "确定要屏蔽吗?" +unblockConfirm: "确定要取消屏蔽吗?" +suspendConfirm: "确定要冻结吗?" +unsuspendConfirm: "确定要解除冻结吗?" +selectList: "选择列表" +selectAntenna: "选择天线" +selectWidget: "选择小部件" +editWidgets: "编辑小部件" +editWidgetsExit: "完成编辑" +customEmojis: "自定义表情符号" +emoji: "表情符号" +emojis: "表情符号" +emojiName: "表情符号名称" +emojiUrl: "表情符号 URL" +addEmoji: "添加表情符号" +settingGuide: "推荐配置" +cacheRemoteFiles: "缓存远程文件" +cacheRemoteFilesDescription: "当禁用此设定时远程文件将直接从远程服务器载入。禁用后会减小储存空间需求,但是会增加流量,因为缩略图不会被生成。" +flagAsBot: "标记此账号为自动化账号" +flagAsBotDescription: "如果此账号由程序控制,请启用此项。启用后,此标志可以帮助其它开发人员防止自动化账号之间产生无限互动的行为,并让 Firefish + 的内部系统将此账号识别为自动化账号。" +markLocalFilesNsfwByDefault: "将所有新增本地文件默认标注为敏感内容" +markLocalFilesNsfwByDefaultDescription: "无论此设置如何,用户都可以自行删除内容的敏感内容标志。现有文件也不受影响。" +flagAsCat: "将这个账号设定为一只猫😺" +flagAsCatDescription: "您会长出猫耳朵并像猫一样说话!" +flagShowTimelineReplies: "在时间线上显示帖子的回复" +flagShowTimelineRepliesDescription: "启用后,时间线除了显示用户的帖子外,还会显示其它用户对帖子的回复。" +autoAcceptFollowed: "自动批准来自关注者的关注请求" +addAccount: "添加账号" +loginFailed: "登录失败" +showOnRemote: "打开原网页" +general: "常规设置" +wallpaper: "壁纸" +setWallpaper: "设置壁纸" +removeWallpaper: "移除壁纸" +searchWith: "搜索:{q}" +youHaveNoLists: "列表为空" +followConfirm: "您确定要关注 {name} 吗?" +proxyAccount: "代理账号" +proxyAccountDescription: "代理账号是在某些情况下充当远程用户的关注者的账号。 例如,当一个用户把一个远程用户添加到列表时,如果没有本地用户关注该用户,远程用户的活动将不会被传递到服务器,为了避免此情况,代理账号将关注它。" +host: "主机名" +selectUser: "选择用户" +recipient: "接收者" +annotation: "注解" +federation: "联合" +instances: "服务器" +registeredAt: "初次观测于" +latestRequestSentAt: "上次发送的请求" +latestRequestReceivedAt: "上次收到的请求" +latestStatus: "最后状态" +storageUsage: "已用存储" +charts: "图表" +perHour: "每小时" +perDay: "每天" +stopActivityDelivery: "停止发送活动" +blockThisInstance: "屏蔽此服务器" +operations: "操作" +software: "软件" +version: "版本" +metadata: "元数据" +monitor: "监测" +jobQueue: "作业队列" +cpuAndMemory: "CPU 和内存" +network: "网络" +disk: "磁盘" +instanceInfo: "服务器信息" +statistics: "统计" +clearQueue: "清除队列" +clearQueueConfirmTitle: "确定清除队列?" +clearQueueConfirmText: "队列中任何未送达的帖子将不会发送。 通常,您不需要这样做。" +clearCachedFiles: "清除缓存" +clearCachedFilesConfirm: "确定要删除所有缓存的远程文件?" +blockedInstances: "已屏蔽的服务器" +blockedInstancesDescription: "设定要屏蔽的服务器,一行一个。被屏蔽的服务器将无法与本服务器进行交换通讯。" +muteAndBlock: "静音与屏蔽" +mutedUsers: "已静音的用户" +blockedUsers: "已屏蔽的用户" +noUsers: "无用户" +editProfile: "编辑个人资料" +noteDeleteConfirm: "确定要删除此帖子吗?" +pinLimitExceeded: "无法置顶更多帖子了" +intro: "Firefish 安装完成!请创建一个管理员用户。" +done: "完成" +processing: "正在处理" +preview: "预览" +default: "默认" +defaultValueIs: "默认值:{value}" +noCustomEmojis: "没有自定义表情符号" +noJobs: "没有任务" +federating: "联合中" +blocked: "已屏蔽" +suspended: "停止推流" +all: "全部" +subscribing: "订阅中" +publishing: "直播中" +notResponding: "没有响应" +instanceFollowing: "关注服务器" +instanceFollowers: "服务器的关注者" +instanceUsers: "此服务器的用户" +changePassword: "修改密码" +security: "安全" +retypedNotMatch: "两次输入不匹配。" +currentPassword: "现在的密码" +newPassword: "新密码" +newPasswordRetype: "重新输入新密码" +attachFile: "插入附件" +more: "更多!" +featured: "热门" +usernameOrUserId: "用户名或用户 ID" +noSuchUser: "用户不存在" +lookup: "查询" +announcements: "公告" +announcement: "公告" +imageUrl: "图片 URL" +remove: "删除" +removed: "已删除" +removeAreYouSure: "确定要删除「{x}」吗?" +deleteAreYouSure: "确定要删除「{x}」吗?" +resetAreYouSure: "确定重置为默认设置?" +saved: "已保存" +messaging: "聊天" +upload: "本地上传" +keepOriginalUploading: "保留原图" +keepOriginalUploadingDescription: "上传图片时保留原始图片。如果关闭,会在上传时生成一张用于 Web 发布的图片。" +fromDrive: "从网盘中" +fromUrl: "从 URL" +uploadFromUrl: "从 URL 上传" +uploadFromUrlDescription: "输入文件的 URL" +uploadFromUrlRequested: "已请求上传" +uploadFromUrlMayTakeTime: "上传可能需要一些时间完成。" +explore: "发现" +messageRead: "已读" +noMoreHistory: "没有更多的历史记录" +startMessaging: "开始聊天" +nUsersRead: "{n} 人已读" +agreeTo: "我同意 {0}" +tos: "服务条款" +start: "开始" +home: "首页" +remoteUserCaution: "此用户来自其它服务器,显示信息会不完整。" +activity: "活动" +images: "图片" +birthday: "生日" +yearsOld: "{age} 岁" +registeredDate: "注册于" +location: "位置" +theme: "主题" +themeForLightMode: "在浅色模式下使用的主题" +themeForDarkMode: "在深色模式下使用的主题" +light: "浅色" +dark: "深色" +lightThemes: "浅色主题" +darkThemes: "深色主题" +syncDeviceDarkMode: "将深色模式设置与设备同步" +drive: "网盘" +fileName: "文件名" +selectFile: "选择文件" +selectFiles: "选择文件" +selectFolder: "选择文件夹" +selectFolders: "选择多个文件夹" +renameFile: "重命名文件" +folderName: "文件夹名称" +createFolder: "创建文件夹" +renameFolder: "重命名文件夹" +deleteFolder: "删除文件夹" +addFile: "添加文件" +emptyDrive: "网盘中无文件" +emptyFolder: "此文件夹中无文件" +unableToDelete: "无法删除" +inputNewFileName: "请输入新文件名" +inputNewDescription: "请输入新描述" +inputNewFolderName: "请输入新文件夹名" +circularReferenceFolder: "目标文件夹是您要移动的文件夹的子文件夹。" +hasChildFilesOrFolders: "此文件夹中有文件,无法删除。" +copyUrl: "复制链接" +rename: "重命名" +avatar: "头像" +banner: "横幅" +nsfw: "敏感内容" +whenServerDisconnected: "与服务器连接中断时" +disconnectedFromServer: "已和服务器断开连接" +reload: "重新加载" +doNothing: "忽略" +reloadConfirm: "确定要重新加载吗?" +watch: "关注" +unwatch: "取消关注" +accept: "接受" +reject: "拒绝" +normal: "正常" +instanceName: "服务器名称" +instanceDescription: "服务器简介" +maintainerName: "管理员名称" +maintainerEmail: "管理员电子邮箱" +tosUrl: "服务条款 URL" +thisYear: "今年" +thisMonth: "本月" +today: "今天" +dayX: "{day} 日" +monthX: "{month} 月" +yearX: "{year} 年" +pages: "页面" +enableLocalTimeline: "启用本地时间线功能" +enableGlobalTimeline: "启用全局时间线" +disablingTimelinesInfo: "管理员和监察员将始终拥有对所有时间线的访问权,即使它们没有被启用。" +registration: "注册" +enableRegistration: "允许新用户注册" +invite: "邀请" +driveCapacityPerLocalAccount: "每个本地用户的网盘容量" +driveCapacityPerRemoteAccount: "每个远程用户的网盘容量" +inMb: "以兆字节 (MegaByte) 为单位" +antennaLimit: "每个用户最多可以创建的天线数量" +iconUrl: "图标 URL" +bannerUrl: "横幅图 URL" +backgroundImageUrl: "背景图 URL" +basicInfo: "基本信息" +pinnedUsers: "置顶用户" +pinnedUsersDescription: "列出要在「发现」页面中置顶的用户,一行一个。" +pinnedPages: "固定页面" +pinnedPagesDescription: "输入您要固定到服务器首页的页面路径,一行一个。" +pinnedClipId: "置顶的便签 ID" +pinnedNotes: "已置顶的帖子" +hcaptcha: "hCaptcha" +enableHcaptcha: "启用 hCaptcha" +hcaptchaSiteKey: "网站密钥 (Site key)" +hcaptchaSecretKey: "密钥 (Secret key)" +recaptcha: "reCAPTCHA" +enableRecaptcha: "启用 reCAPTCHA\n(请注意,reCAPTCHA 在中国大陆无法访问,如果启用,可能导致无法正常使用登录或注册等功能)" +recaptchaSiteKey: "网站密钥 (Site key)" +recaptchaSecretKey: "密钥 (Secret key)" +avoidMultiCaptchaConfirm: "使用多种验证方式可能会造成干扰,您要禁用其它现已激活的验证方式吗?如果您希望它们继续被启用,请点击 「取消」。" +antennas: "天线" +manageAntennas: "管理天线" +name: "名称" +antennaSource: "接收来源" +antennaKeywords: "包含关键字" +antennaExcludeKeywords: "排除关键字" +antennaKeywordsDescription: "AND 条件用空格分隔,OR 条件用换行符分隔。" +notifyAntenna: "新帖子通知" +withFileAntenna: "仅显示带有附件的帖子" +enableServiceworker: "为浏览器启用推送通知 (ServiceWorker)" +antennaUsersDescription: "指定用户名,一行一个" +caseSensitive: "区分大小写" +withReplies: "包括回复" +connectedTo: "您的账号已连到接以下第三方账号" +notesAndReplies: "帖子与回复" +withFiles: "包含文件" +silence: "禁言" +silenceConfirm: "确认要禁言吗?" +unsilence: "解除禁言" +unsilenceConfirm: "要解除禁言吗?" +popularUsers: "热门用户" +recentlyUpdatedUsers: "最近投稿的用户" +recentlyRegisteredUsers: "最近登录的用户" +recentlyDiscoveredUsers: "最近发现的用户" +exploreUsersCount: "有 {count} 个用户" +exploreFediverse: "探索联邦宇宙" +popularTags: "热门标签" +userList: "列表" +about: "关于" +aboutFirefish: "关于 Firefish" +administrator: "管理员" +token: "令牌" +twoStepAuthentication: "两步验证" +moderator: "监察员" +moderation: "管理" +nUsersMentioned: "被 {n} 人提到" +securityKey: "安全密钥" +securityKeyName: "密钥名称" +registerSecurityKey: "注册安全密钥" +lastUsed: "最近使用" +unregister: "删除账号" +passwordLessLogin: "无密码登录" +resetPassword: "重置密码" +newPasswordIs: "新的密码是 {password}" +reduceUiAnimation: "减少 UI 动画" +share: "分享" +notFound: "未找到" +notFoundDescription: "没有与指定 URL 对应的页面。" +uploadFolder: "默认上传文件夹" +cacheClear: "清空缓存" +markAsReadAllNotifications: "将所有通知标为已读" +markAsReadAllUnreadNotes: "将所有帖子标记为已读" +markAsReadAllTalkMessages: "将所有聊天标记为已读" +help: "帮助" +inputMessageHere: "在此输入信息" +close: "关闭" +group: "群组" +groups: "群组" +createGroup: "创建群组" +ownedGroups: "拥有的群组" +joinedGroups: "已加入的群组" +invites: "邀请" +groupName: "群组名" +members: "成员" +transfer: "转让" +messagingWithUser: "私聊" +messagingWithGroup: "群聊" +title: "标题" +text: "文本" +enable: "启用" +next: "下一个" +retype: "重新输入" +noteOf: "{user} 的帖子" +inviteToGroup: "群组邀请" +quoteAttached: "已引用" +quoteQuestion: "是否引用?" +noMessagesYet: "暂无消息" +newMessageExists: "新信息" +onlyOneFileCanBeAttached: "只能添加一个附件" +signinRequired: "请先登录" +invitations: "邀请" +invitationCode: "邀请码" +checking: "正在确认..." +available: "可用" +unavailable: "不可用" +usernameInvalidFormat: "可使用大小写英文字母、数字和下划线。" +tooShort: "太短" +tooLong: "太长" +weakPassword: "密码强度:弱" +normalPassword: "密码强度:中等" +veryStrongPassword: "密码强度:强" +passwordMatched: "密码一致" +passwordNotMatched: "密码不一致" +signinWith: "以 {x} 登录" +signinFailed: "无法登录,请检查您的用户名和密码是否正确。" +tapSecurityKey: "轻触您的安全密钥" +or: "或者" +language: "语言" +uiLanguage: "显示语言" +groupInvited: "您有新的群组邀请" +aboutX: "关于 {x}" +useOsNativeEmojis: "使用系统的原生表情符号" +disableDrawer: "不显示抽屉菜单" +youHaveNoGroups: "没有群组" +joinOrCreateGroup: "请加入一个现有的群组,或者创建新群组。" +noHistory: "没有历史记录" +signinHistory: "登录历史" +disableAnimatedMfm: "禁用 MFM 动画" +doing: "正在处理…" +category: "类别" +tags: "标签" +docSource: "文件来源" +createAccount: "注册账号" +existingAccount: "现有的账号" +regenerate: "重新生成" +fontSize: "字体大小" +noFollowRequests: "没有待批准的关注申请" +noSentFollowRequests: "没有待回应的关注请求" +openImageInNewTab: "在新标签页中打开图片" +dashboard: "管理面板" +local: "本地" +remote: "远程" +total: "总计" +weekOverWeekChanges: "与前一周相比" +dayOverDayChanges: "与昨日相比" +appearance: "外观" +clientSettings: "客户端设置" +accountSettings: "账号设置" +promotion: "推广" +promote: "推广" +numberOfDays: "天数" +hideThisNote: "隐藏这条帖子" +showFeaturedNotesInTimeline: "在时间线上显示热门推荐" +objectStorage: "对象存储" +useObjectStorage: "使用对象存储" +objectStorageBaseUrl: "根 URL" +objectStorageBaseUrlDesc: "用于引用的 URL。如果您正在使用 CDN 或反向代理,请指定其 URL。\n例如S3:\"https://.s3.amazonaws.com\"\ + ,GCS:\"https://storage.googleapis.com/\",其它同理。" +objectStorageBucket: "存储桶" +objectStorageBucketDesc: "请指定使用的对象存储服务的存储桶名称。" +objectStoragePrefix: "前缀" +objectStoragePrefixDesc: "文件将存储在此前缀的目录下。" +objectStorageEndpoint: "端点 (Endpoint)" +objectStorageEndpointDesc: "如果您使用 AWS S3 请留空。否则请根据您使用的服务商的说明来进行设置,指定端点 (Endpoint) + 形式为 \"\" 或 \":\"。" +objectStorageRegion: "可用区" +objectStorageRegionDesc: "指定一个可用区,例如 \"xx-east-1\"。 如果您的对象存储服务没有可用区概念,请将其留空或填写 \"\ + us-east-1\"。\n对于 Cloudflare R2,可以填为 \"auto\"。" +objectStorageUseSSL: "使用 SSL" +objectStorageUseSSLDesc: "如果不使用 HTTPS 进行 API 连接,请关闭" +objectStorageUseProxy: "使用代理" +objectStorageUseProxyDesc: "如果您不使用代理进行 API 连接,请将其关闭" +objectStorageSetPublicRead: "上传时设置为 \"public-read\"" +serverLogs: "服务器日志" +deleteAll: "全部删除" +showFixedPostForm: "在时间线顶部显示发帖框" +newNoteRecived: "新帖子" +sounds: "提示音" +listen: "试听" +none: "无" +showInPage: "在页面中显示" +popout: "弹窗" +volume: "音量" +masterVolume: "主音量" +details: "详情" +chooseEmoji: "选择表情符号" +unableToProcess: "操作无法完成" +recentUsed: "最近使用" +install: "安装" +uninstall: "卸载" +installedApps: "已授权的应用" +nothing: "暂无更多内容" +installedDate: "授权日期" +lastUsedDate: "最近使用时间" +state: "状态" +sort: "排序" +ascendingOrder: "升序" +descendingOrder: "降序" +scratchpad: "AiScript 控制台" +scratchpadDescription: "AiScript 控制台为 AiScript 提供了实验环境。您可以编写代码以与 Firefish 交互,运行它并查看结果。" +output: "输出" +script: "脚本" +disablePagesScript: "在页面中禁用 AiScript" +updateRemoteUser: "更新远程用户信息" +deleteAllFiles: "删除所有文件" +deleteAllFilesConfirm: "确定要删除所有文件吗?" +removeAllFollowing: "取消所有关注" +removeAllFollowingDescription: "取消 {host} 的所有关注者。如果服务器已不存在,请执行它。" +userSuspended: "该用户已被冻结。" +userSilenced: "该用户已被禁言。" +yourAccountSuspendedTitle: "账号已被冻结" +yourAccountSuspendedDescription: "由于违反了服务器的服务条款或其它原因,该账号已被冻结。 您可以与管理员联系以了解更多信息。 请不要创建一个新的账号。" +menu: "菜单" +divider: "分割线" +addItem: "添加项目" +relays: "中继" +addRelay: "添加中继" +inboxUrl: "Inbox URL" +addedRelays: "已添加的中继" +serviceworkerInfo: "需要启用推送通知。" +deletedNote: "已删除的帖子" +invisibleNote: "隐藏的帖子" +enableInfiniteScroll: "滚动页面以载入更多内容" +visibility: "可见性" +cannotEditVisibility: "不能编辑帖子的可见性" +poll: "调查问卷" +useCw: "隐藏内容" +enablePlayer: "打开播放器" +disablePlayer: "关闭播放器" +expandTweet: "展开帖子" +themeEditor: "主题编辑器" +description: "描述" +describeFile: "添加描述" +enterFileDescription: "输入描述" +author: "作者" +leaveConfirm: "存在未保存的更改。要放弃更改吗?" +manage: "管理" +plugins: "插件" +preferencesBackups: "备份设置" +deck: "Deck" +undeck: "取消 Deck" +useBlurEffectForModal: "对话框使用模糊效果" +useFullReactionPicker: "使用全尺寸的回应选择栏" +width: "宽度" +height: "高度" +large: "大" +medium: "中" +small: "小" +generateAccessToken: "生成访问令牌" +permission: "权限" +enableAll: "启用全部" +disableAll: "禁用全部" +tokenRequested: "允许访问账号" +pluginTokenRequestedDescription: "此插件将能够拥有这里设置的权限。" +notificationType: "通知类型" +edit: "编辑" +toEdit: "编辑" +emailServer: "邮件服务器" +enableEmail: "启用发送邮件功能" +emailConfigInfo: "用于确认电子邮件和密码重置" +email: "邮箱" +emailAddress: "电子邮件地址" +smtpConfig: "SMTP 服务器设置" +smtpHost: "主机名" +smtpPort: "端口" +smtpUser: "用户名" +smtpPass: "密码" +emptyToDisableSmtpAuth: "留空用户名和密码以禁用 SMTP 验证" +smtpSecure: "在 SMTP 连接中使用隐式 SSL / TLS" +smtpSecureInfo: "使用 STARTTLS 时关闭" +testEmail: "邮件发送测试" +wordMute: "文字和语言过滤" +regexpError: "正则表达式错误" +regexpErrorDescription: "{tab} 文字过滤的第 {line} 行的正则表达式有错误:" +instanceMute: "服务器静音" +userSaysSomething: "{name} 说了什么" +makeActive: "启用" +display: "显示" +copy: "复制" +metrics: "指标" +overview: "概况" +logs: "日志" +delayed: "滞后" +database: "数据库" +channel: "频道" +create: "创建" +notificationSetting: "通知设置" +notificationSettingDesc: "选择要显示的通知类型。" +useGlobalSetting: "使用全局设置" +useGlobalSettingDesc: "启用时,将使用账号通知设置。关闭时,则可以单独设置。" +other: "其它" +regenerateLoginToken: "重新生成登录令牌" +regenerateLoginTokenDescription: "重新生成用于登录的内部令牌。通常您不需要这样做。重新生成后,您将在所有设备上登出。" +setMultipleBySeparatingWithSpace: "您可以使用空格分隔多个项目。" +fileIdOrUrl: "文件 ID 或者 URL" +behavior: "行为" +sample: "示例" +abuseReports: "举报" +reportAbuse: "举报" +reportAbuseOf: "举报 {name}" +fillAbuseReportDescription: "请填写举报的详细原因。如果有对方发的帖子,请同时填写 URL 地址。" +abuseReported: "您的举报已发送。非常感谢您。" +reporter: "举报者" +reporteeOrigin: "举报来源" +reporterOrigin: "举报者来源" +forwardReport: "将该举报信息转发给远程服务器" +forwardReportIsAnonymous: "勾选则在远程服务器上显示的举报者是匿名的系统账号,而不是您的账号。" +send: "发送" +abuseMarkAsResolved: "标记举报为已解决" +openInNewTab: "在新标签页中打开" +openInSideView: "在侧边栏中打开" +defaultNavigationBehaviour: "默认导航" +editTheseSettingsMayBreakAccount: "编辑这些设置可能会损坏您的账号。" +instanceTicker: "帖子的实例信息" +waitingFor: "等待 {x}" +random: "随机" +system: "系统" +switchUi: "界面" +desktop: "桌面" +clip: "便签" +createNew: "新建" +optional: "可选" +createNewClip: "新建便签" +unclip: "移除便签" +confirmToUnclipAlreadyClippedNote: "本帖已包含在便签 \"{name}\" 里。您想要将本帖从该便签中移除吗?" +public: "公开" +i18nInfo: "Firefish 已经被志愿者们翻译成了各种语言。如果您也有兴趣,可以通过 {link} 帮助翻译。" +i18nServerInfo: "新客户端将默认使用 {language}。" +i18nServerChange: "改为 {language}。" +i18nServerSet: "设定新客户端使用 {language}。" +manageAccessTokens: "管理访问令牌" +accountInfo: "账号信息" +notesCount: "帖子数量" +repliesCount: "回复数量" +renotesCount: "转发数量" +repliedCount: "回复数" +renotedCount: "转发数量" +followingCount: "关注中数量" +followersCount: "关注者数量" +sentReactionsCount: "发送回应数" +receivedReactionsCount: "收到回应数" +pollVotesCount: "问卷调查的投票数" +pollVotedCount: "问卷调查的被投票数" +yes: "是" +no: "否" +driveFilesCount: "网盘的文件数" +driveUsage: "网盘的空间用量" +noCrawle: "要求搜索引擎不索引该用户" +noCrawleDescription: "要求外部搜索引擎不收录(索引)您的内容。" +lockedAccountInfo: "即使通过了关注请求,只要您不将帖子可见范围设置成「关注者」,任何人都可以看到您的帖子。" +alwaysMarkSensitive: "默认将媒体文件标记为敏感内容" +loadRawImages: "加载原始图像而不是显示缩略图" +disableShowingAnimatedImages: "不播放动画" +verificationEmailSent: "已发送确认电子邮件。请访问电子邮件中的链接以完成验证。" +notSet: "未设置" +emailVerified: "电子邮件地址已验证" +noteFavoritesCount: "加入收藏的帖子数" +pageLikesCount: "页面点赞次数" +pageLikedCount: "页面被点赞次数" +contact: "联系人" +useSystemFont: "使用系统默认字体" +clips: "便签" +experimentalFeatures: "实验性功能" +developer: "开发者" +makeExplorable: "使账号在「发现」中可见" +makeExplorableDescription: "关闭时,账号不会显示在「发现」中。" +showGapBetweenNotesInTimeline: "时间线上的帖子分开显示" +duplicate: "复制" +left: "左" +center: "中央" +wide: "宽" +narrow: "窄" +reloadToApplySetting: "页面刷新后设置才会生效。是否现在刷新页面?" +needReloadToApply: "需要重新加载才能生效。" +showTitlebar: "显示标题栏" +clearCache: "清除缓存" +onlineUsersCount: "{n} 人在线" +nUsers: "{n} 用户" +nNotes: "{n} 帖子" +sendErrorReports: "发送错误报告" +sendErrorReportsDescription: "启用后,如果出现问题,可以与 Firefish 共享详细的错误信息,从而帮助提高软件的质量。\n这将包括您的操作系统版本、您使用的浏览器、您在 + Firefish 中的活动等信息。" +myTheme: "我的主题" +backgroundColor: "背景色" +accentColor: "强调色" +textColor: "文本颜色" +saveAs: "另存为..." +advanced: "高级" +value: "值" +createdAt: "创建日期" +updatedAt: "更新时间" +saveConfirm: "确定保存?" +deleteConfirm: "确定删除?" +invalidValue: "无效值。" +registry: "注册表" +closeAccount: "永久注销账号" +currentVersion: "当前版本" +latestVersion: "最新版本" +youAreRunningUpToDateClient: "您所使用的客户端已经是最新的。" +newVersionOfClientAvailable: "新版本的客户端可用。" +usageAmount: "使用量" +capacity: "容量" +inUse: "已使用" +editCode: "编辑代码" +apply: "应用" +receiveAnnouncementFromInstance: "从服务器接收通知" +emailNotification: "邮件通知" +publish: "发布" +inChannelSearch: "频道内搜索" +useReactionPickerForContextMenu: "单击右键打开回应工具栏" +typingUsers: "{users} 正在输入" +jumpToSpecifiedDate: "跳转到特定日期" +showingPastTimeline: "显示过去的时间线" +clear: "清除" +markAllAsRead: "将全部标记为已读" +goBack: "返回" +unlikeConfirm: "取消赞?" +fullView: "全屏" +quitFullView: "退出全屏" +addDescription: "添加描述" +userPagePinTip: "在帖子的菜单中选择「置顶」,即可在此显示该条帖子。" +notSpecifiedMentionWarning: "有未指定的提及" +info: "关于" +userInfo: "用户信息" +unknown: "未知" +onlineStatus: "在线状态" +hideOnlineStatus: "隐藏在线状态" +hideOnlineStatusDescription: "隐藏在线状态后,可能会降低搜索等功能的便利性。" +online: "在线" +active: "活跃" +offline: "离线" +notRecommended: "不推荐" +botProtection: "Bot 防护" +instanceBlocking: "联合管理" +selectAccount: "选择账号" +switchAccount: "切换账号" +enabled: "已启用" +disabled: "已禁用" +quickAction: "快捷操作" +user: "用户" +administration: "管理" +accounts: "账号" +switch: "切换" +noMaintainerInformationWarning: "管理员信息未设置。" +noBotProtectionWarning: "Bot 防御未设置。" +configure: "设置" +postToGallery: "发送到图库" +gallery: "图库" +recentPosts: "最新发布" +popularPosts: "热门投稿" +shareWithNote: "在帖子中分享" +ads: "社区横幅" +expiration: "截止时间" +memo: "便笺" +priority: "优先级" +high: "高" +middle: "中" +low: "低" +emailNotConfiguredWarning: "电子邮件地址未设置。" +ratio: "比率" +previewNoteText: "预览文本" +customCss: "自定义 CSS" +customCssWarn: "这些设置必须有相关的基础知识,不当的配置可能导致客户端无法正常使用。" +global: "全局" +squareAvatars: "显示方形头像图标" +sent: "发送" +received: "收取" +searchResult: "搜索结果" +hashtags: "话题标签" +troubleshooting: "故障排除" +useBlurEffect: "在 UI 上使用模糊效果" +learnMore: "更多信息" +misskeyUpdated: "Firefish 更新完成!" +whatIsNew: "显示更新信息" +translate: "翻译" +translatedFrom: "从 {x} 翻译" +accountDeletionInProgress: "正在删除账号" +usernameInfo: "在服务器上唯一标识您的账号的名称。您可以使用字母 (a ~ z, A ~ Z)、数字 (0 ~ 9) 和下划线 (_)。用户名以后不能更改。" +aiChanMode: "小蓝模式" +keepCw: "保留内容警告" +pubSub: "推送 (Pub) / 订阅 (Sub) 账号" +lastCommunication: "最近通信" +resolved: "已解决" +unresolved: "未解决" +breakFollow: "移除关注者" +itsOn: "已开启" +itsOff: "已关闭" +emailRequiredForSignup: "注册账号需要电子邮件地址" +unread: "未读" +filter: "筛选" +controlPanel: "控制面板" +manageAccounts: "管理账号" +makeReactionsPublic: "将回应设置为公开" +makeReactionsPublicDescription: "将您发表过的回应设置成公开可见。" +classic: "居中" +muteThread: "静音帖子串" +unmuteThread: "取消静音帖子串" +ffVisibility: "关注 / 关注者可见性" +ffVisibilityDescription: "您可以设置谁可以看到您的关注 / 关注者信息。" +continueThread: "查看更多帖子" +deleteAccountConfirm: "这将不可逆转地删除账号,是否继续?" +incorrectPassword: "密码错误。" +voteConfirm: "确定投给 “{choice}” ?" +hide: "隐藏" +leaveGroup: "离开群组" +leaveGroupConfirm: "确定离开「{name}」?" +useDrawerReactionPickerForMobile: "在移动设备上使用抽屉显示" +welcomeBackWithName: "欢迎回来,{name}" +clickToFinishEmailVerification: "点击 [{ok}] 完成电子邮件地址认证。" +overridedDeviceKind: "设备类型" +smartphone: "智能手机" +tablet: "平板" +auto: "自动" +themeColor: "服务器滚动条颜色" +size: "大小" +numberOfColumn: "列数" +instanceDefaultLightTheme: "服务器默认浅色主题" +instanceDefaultDarkTheme: "服务器默认深色主题" +instanceDefaultThemeDescription: "以对象格式键入主题代码。" +mutePeriod: "静音时间" +indefinitely: "永久" +tenMinutes: "10分钟" +oneHour: "1 小时" +oneDay: "1 天" +oneWeek: "1 周" +reflectMayTakeTime: "可能需要一些时间才能体现出效果。" +failedToFetchAccountInformation: "获取账号信息失败" +rateLimitExceeded: "已超过速率限制" +cropImage: "剪裁图像" +cropImageAsk: "您想要裁剪图像吗?" +file: "文件" +recentNHours: "最近 {n} 小时" +recentNDays: "最近 {n} 天" +noEmailServerWarning: "电子邮件服务器未设置。" +thereIsUnresolvedAbuseReportWarning: "有未处理的举报。" +recommended: "推荐" +check: "检查" +driveCapOverrideLabel: "修改此用户的网盘容量" +driveCapOverrideCaption: "输入 0 或以下的值将容量重置为默认值。" +requireAdminForView: "您需要使用管理员账号登录才能查看。" +isSystemAccount: "该账号由系统自动创建。请不要修改、编辑、删除或以其它方式篡改这个账号,否则可能会破坏您的服务器。" +typeToConfirm: "输入 {x} 以确认操作" +useThisAccountConfirm: "您想使用此帐户继续执行此操作吗?" +inputAccountId: "请输入您的帐户(例如 @firefish@info.firefish.dev )" +deleteAccount: "删除账号" +document: "文档" +numberOfPageCache: "缓存页数" +numberOfPageCacheDescription: "设置较高的值会更方便用户,但设备的负载和内存使用量会增加。" +logoutConfirm: "是否确认登出?" +lastActiveDate: "最近使用时间" +statusbar: "状态栏" +pleaseSelect: "请选择" +reverse: "翻转" +colored: "彩色" +refreshInterval: "更新间隔 " +label: "标签" +type: "类型" +speed: "速度" +slow: "慢" +fast: "快" +sensitiveMediaDetection: "检测到敏感媒体内容" +localOnly: "仅限本地" +remoteOnly: "仅远程" +failedToUpload: "上传失败" +cannotUploadBecauseInappropriate: "无法上传此文件,因为它可能包含不适宜的内容。" +cannotUploadBecauseNoFreeSpace: "由于已无可用网盘空间,无法上传。" +beta: "测试" +enableAutoSensitive: "自动 NSFW 标记" +enableAutoSensitiveDescription: "允许通过机器学习对媒体文件自动设置 NSFW 标志。即使关闭此功能,也可能会根据服务器自动设置。" +activeEmailValidationDescription: "启用更严格的电子邮件地址验证,包括判断它是一次性的电子邮件地址还是可以实际通信的地址。关闭时,则只检查字符串是否正确。" +navbar: "导航栏" +shuffle: "随机" +account: "账号" +move: "迁移" +customKaTeXMacro: "自定义 KaTeX 宏" +customKaTeXMacroDescription: "使用宏来轻松的输入数学表达式吧!宏的用法与 LaTeX 中的命令定义相同。您可以使用 \\newcommand{\\ + name}{content} 或 \\newcommand{\\name}[number of arguments]{content} 来输入数学表达式。举个例子, + \\newcommand{\\add}[2]{#1 + #2} 会将 \\add{3}{foo} 展开为 3 + foo 。此外,宏名称外的花括号 {} 可以被替换为圆括号 + () 和方括号 [] ,这会影响用于参数的括号。每行只能够定义一个宏,您无法在中间换行。无效的行将被忽略。只支持简单字符串替换功能,不支持高级语法,如条件分支等。" +enableCustomKaTeXMacro: "启用自定义 KaTeX 宏" +_sensitiveMediaDetection: + description: "可以使用机器学习技术自动检测敏感媒体,以便进行审核。服务器负载将略微增加。" + sensitivity: "检测敏感度" + sensitivityDescription: "敏感度较低,则误检(假阳性)会减少;敏感度较高,则漏检(假阴性)会减少。" + setSensitiveFlagAutomatically: "自动设置 NSFW 标签" + setSensitiveFlagAutomaticallyDescription: "即使关闭此配置,识别结果也会在内部保存。" + analyzeVideos: "启用对视频的检测" + analyzeVideosDescription: "除了静止图像之外,还对视频进行分析。服务器负载会略微增加。" +_emailUnavailable: + used: "这个电子邮件地址已经被使用过" + format: "无效的格式" + disposable: "不得使用一次性电子邮件地址" + mx: "邮件服务器不正确" + smtp: "邮件服务器没有响应" +_ffVisibility: + public: "公开" + followers: "仅对关注者可见" + private: "私密" +_signup: + almostThere: "即将完成" + emailAddressInfo: "请输入您所使用的电子邮件地址,它不会公开显示。" + emailSent: "已将确认邮件发送至您输入的电子邮件地址 ({email})。请访问电子邮件中的链接以完成账号创建。" +_accountDelete: + accountDelete: "删除账号" + mayTakeTime: "删除账号是一个性能损耗较大的过程,如果账号持有的内容数量和上传的文件数量较多的话,完成需要花费一段时间。" + sendEmail: "账号删除完成后,将向注册的电子邮件地址发送通知。" + requestAccountDelete: "请求删除账号" + started: "账号删除过程已开始。" + inProgress: "正在删除" +_ad: + back: "返回" + reduceFrequencyOfThisAd: "减少此横幅的频率" + adsBy: 社区横幅(作者:{by}) +_forgotPassword: + enterEmail: "请输入您注册账号时用的电子邮箱地址,密码重置链接将发送至该邮箱上。" + ifNoEmail: "如果您在注册时没有输入电子邮件地址,请联系服务器管理员。" + contactAdmin: "该服务器不支持发送电子邮件。如果您想重设密码,请联系管理员。" +_gallery: + my: "我的图库" + liked: "喜欢的图片" + like: "喜欢" + unlike: "取消喜欢" +_email: + _follow: + title: "您有新的关注者" + _receiveFollowRequest: + title: "您收到了关注请求" +_plugin: + install: "安装插件" + installWarn: "请不要安装不可信的插件。" + manage: "管理插件" +_preferencesBackups: + list: "已创建的备份" + saveNew: "另存为" + loadFile: "从文件导入" + apply: "应用于本设备" + save: "覆盖存档" + inputName: "请输入备份的名称" + cannotSave: "保存失败" + nameAlreadyExists: "备份名称 \"{name}\" 已经存在,请指定其它名称。" + applyConfirm: "您是否要将备份 \"{name}\" 应用到当前设备上?当前设备现有配置将被丢弃。" + saveConfirm: "您确定要覆盖保存 {name} 吗?" + deleteConfirm: "您确定要删除 {name} 吗?" + renameConfirm: "您确定要把 \"{old}\" 改为 \"{new}\" 吗?" + noBackups: "没有备份。您可以使用“创建新的备份”来备份您在该服务器上的客户设置。" + createdAt: "创建日期:{date} {time}" + updatedAt: "更新日期:{date} {time}" + cannotLoad: "无法加载" + invalidFile: "无效的的文件格式" +_registry: + scope: "范围" + key: "键" + keys: "键" + domain: "域" + createKey: "创建键" +_aboutFirefish: + about: "Firefish 是由 ThatOneCalculator 创建的 Misskey 的一个分支,自 2022 年开始开发。" + contributors: "主要贡献者" + allContributors: "全体贡献者" + source: "源代码" + translation: "翻译 Firefish" + donate: "赞助 Firefish" + donateTitle: 喜欢 Firefish 吗? + pleaseDonateToFirefish: 请考虑赞助 Firefish 以支持其开发。 + pleaseDonateToHost: 也请考虑赞助您的主服务器 {host},以帮助支持其运营成本。 + donateHost: 赞助 {host} + misskeyContributors: Misskey 贡献者 +_nsfw: + respect: "隐藏敏感内容" + ignore: "不隐藏敏感内容" + force: "总是隐藏内容" +_mfm: + cheatSheet: "MFM 代码速查表" + intro: "MFM 是一种在 Misskey、Firefish、Akkoma 中使用的标记语言,可以在很多地方使用。您可以在此处查看所有可用的 MFM 语法的列表。" + dummy: "通过 Firefish 扩展联邦宇宙的世界" + mention: "提及" + mentionDescription: "可以使用 @+用户名 来指示特定用户。" + hashtag: "话题标签" + hashtagDescription: "可以使用井号+文字来表示话题标签。" + url: "URL" + urlDescription: "可以表示 URL 地址。" + link: "链接" + linkDescription: "可以将部分文字和 URL 关联起来。" + bold: "粗体" + boldDescription: "可以将文字显示为粗体来表示强调。" + small: "缩小" + smallDescription: "可以使内容文字变小、变淡。" + center: "居中" + centerDescription: "可以将内容居中显示。" + inlineCode: "代码(内嵌)" + inlineCodeDescription: "将文字中的程序代码语法高亮显示。" + blockCode: "代码(块)" + blockCodeDescription: "语法高亮显示整块程序代码。" + inlineMath: "数学公式(内嵌)" + inlineMathDescription: "显示内嵌的 KaTeX 公式" + blockMath: "数学公式(块)" + blockMathDescription: "显示整块的 KaTeX 数学公式" + quote: "引用" + quoteDescription: "将内容显示为引用。" + emoji: "自定义表情符号" + emojiDescription: "可以将自定义表情符号使用冒号括起来,就可以显示自定义表情符号了。" + search: "搜索" + searchDescription: "显示含有搜索内容示例的搜索框。" + flip: "翻转" + flipDescription: "将内容上下或左右翻转。" + jelly: "动画(果冻)" + jellyDescription: "显示果冻一样的动画效果。" + tada: "动画(锵锵)" + tadaDescription: "显示\"锵锵!\"的动画效果。" + jump: "动画(跳动)" + jumpDescription: "显示跳动的动画效果。" + bounce: "动画(弹性)" + bounceDescription: "显示弹性一样的动画效果。" + shake: "动画(摇晃)" + shakeDescription: "显示摇晃的动画效果。" + twitch: "动画(颤抖)" + twitchDescription: "显示强烈颤抖的动画效果。" + spin: "动画(回转)" + spinDescription: "显示回转的动画效果。" + x2: "大" + x2Description: "以大尺寸显示内容。" + x3: "非常大" + x3Description: "以更大尺寸显示内容。" + x4: "最大" + x4Description: "以最大尺寸显示内容。" + blur: "模糊" + blurDescription: "产生模糊效果。将鼠标指针放在上面即可将内容显示出来。" + font: "字体" + fontDescription: "可以设置内容所使用的字体。" + rainbow: "彩虹" + rainbowDescription: "用彩虹色来显示内容。" + sparkle: "闪光" + sparkleDescription: "添加发光粒子效果。" + rotate: "旋转" + rotateDescription: "旋转指定的角度。" + plain: "简洁" + plainDescription: "禁用所有内部语法。" + crop: 裁剪 + scale: 缩放 + position: 位置 + fade: 渐淡 + advanced: 高级 MFM + background: 背景色 + fadeDescription: 内容淡入和淡出。 + warn: MFM 可能包含快速移动或华丽的动画 + advancedDescription: 如果禁用,则仅允许基本标记,除非正在播放动态 MFM + foreground: 前景色 + backgroundDescription: 更改文本的背景色。 + play: 播放 MFM + alwaysPlay: 始终自动播放所有动态的 MFM + stop: 停止播放 MFM + positionDescription: 将内容移动指定的量。 + cropDescription: 裁剪内容。 + scaleDescription: 按指定量缩放内容。 + foregroundDescription: 更改文本的前景色。 +_instanceTicker: + none: "不显示" + remote: "仅远程用户" + always: "始终显示" +_serverDisconnectedBehavior: + reload: "自动重载" + dialog: "对话框警告" + quiet: "安静警告" + nothing: 什么也不做 +_channel: + create: "创建频道" + edit: "编辑频道" + setBanner: "设置横幅" + removeBanner: "删除横幅" + featured: "热点" + owned: "管理中" + following: "关注中" + usersCount: "有 {n} 人参与" + notesCount: "{n} 帖子" + nameAndDescription: "名称与描述" + nameOnly: "仅名称" +_menuDisplay: + sideFull: "横向" + sideIcon: "横向(图标)" + top: "顶部" + hide: "隐藏" +_wordMute: + muteWords: "过滤词" + muteLangs: "过滤语言" + muteWordsDescription: "AND 条件用空格分隔,OR 条件用换行符分隔。" + muteWordsDescription2: "将关键字用斜线括起来表示正则表达式。" + muteLangsDescription: "OR 条件用空格或换行符分隔。" + muteLangsDescription2: "使用语言代码。例: en, fr, ja, zh." + softDescription: "隐藏时间线中指定条件的帖子。" + langDescription: "从时间线中隐藏与设置语言匹配的帖子。" + hardDescription: "防止将具有指定条件的帖子添加到时间线。 即使您更改条件,原先未添加的帖文也会被排除在外。" + soft: "软过滤" + lang: "语言" + hard: "硬过滤" + mutedNotes: "已过滤的帖子" + mutePatterns: 静音表达式 +_instanceMute: + instanceMuteDescription: "静音列出服务器中的所有帖子和转帖,包括服务器的用户回复。" + instanceMuteDescription2: "设置时用换行符来分隔" + title: "隐藏列出的服务器中的帖子。" + heading: "要静音的服务器列表" +_theme: + explore: "寻找主题" + install: "安装主题" + manage: "主题管理" + code: "主题代码" + description: "描述" + installed: "{name} 已安装" + installedThemes: "已安装的主题" + builtinThemes: "标准主题" + alreadyInstalled: "此主题已经安装" + invalid: "主题格式错误" + make: "制作主题" + base: "基于" + addConstant: "添加常量" + constant: "常量" + defaultValue: "默认值" + color: "颜色" + refProp: "查看属性" + refConst: "查看常量" + key: "主要" + func: "函数" + funcKind: "功能类型" + argument: "参数" + basedProp: "基于的属性名称" + alpha: "不透明度" + darken: "深色" + lighten: "浅色" + inputConstantName: "请输入常量名称" + importInfo: "您可以在此处粘贴主题代码,将其导入到编辑器中" + deleteConstantConfirm: "确定要删除常量 {const} 吗?" + keys: + accent: "强调色" + bg: "背景" + fg: "文本" + focus: "聚焦" + indicator: "标记" + panel: "面板" + shadow: "阴影" + header: "顶栏" + navBg: "侧边栏背景" + navFg: "侧栏文本" + navHoverFg: "侧栏文本(悬停)" + navActive: "侧栏文本(活动)" + navIndicator: "侧栏标记" + link: "链接" + hashtag: "话题标签" + mention: "提及" + mentionMe: "提及(自己)" + renote: "转发" + modalBg: "对话框背景" + divider: "分割线" + scrollbarHandle: "滚动条" + scrollbarHandleHover: "滚动条(悬停)" + dateLabelFg: "日期标签文字" + infoBg: "信息背景" + infoFg: "信息文本" + infoWarnBg: "警告背景" + infoWarnFg: "警告文本" + cwBg: "CW 按钮背景" + cwFg: "CW 按钮文本" + cwHoverBg: "CW 按钮背景(悬停)" + toastBg: "Toast 通知背景" + toastFg: "Toast 通知文本" + buttonBg: "按钮背景" + buttonHoverBg: "按钮背景(悬停)" + inputBorder: "输入框边框" + listItemHoverBg: "下拉列表项目背景(悬停)" + driveFolderBg: "网盘的文件夹背景" + wallpaperOverlay: "壁纸叠加层" + badge: "徽章" + messageBg: "聊天背景" + accentDarken: "强调色(深)" + accentLighten: "强调色(浅)" + fgHighlighted: "高亮显示文本" +_sfx: + note: "新的帖子" + noteMy: "我的帖子" + notification: "通知" + chat: "聊天" + chatBg: "聊天背景" + antenna: "天线接收" + channel: "频道通知" +_ago: + future: "将来" + justNow: "刚刚" + secondsAgo: "{n} 秒前" + minutesAgo: "{n} 分前" + hoursAgo: "{n} 时前" + daysAgo: "{n} 天前" + weeksAgo: "{n} 周前" + monthsAgo: "{n} 月前" + yearsAgo: "{n} 年前" +_later: + future: "将来" + justNow: "马上" + secondsAgo: "{n} 秒后" + minutesAgo: "{n} 分后" + hoursAgo: "{n} 时后" + daysAgo: "{n} 天后" + weeksAgo: "{n} 周后" + monthsAgo: "{n} 月后" + yearsAgo: "{n} 年后" +_time: + second: "秒" + minute: "分" + hour: "小时" + day: "日" +_tutorial: + title: "如何使用 Firefish" + step1_1: "欢迎!" + step1_2: "让我们帮您设置一下。您很快就能开始畅游联邦宇宙!" + step2_1: "首先,请完成您的个人资料。" + step2_2: "提供一些关于您的信息,让其它人更容易知道他们是否想看您的帖子或关注您。" + step3_1: "现在是时候关注一些人了!" + step3_2: "您的主页和社交馈送是基于您所关注的人,所以试着先关注几个账号。\n点击个人资料右上角的加号圈就可以关注它。" + step4_1: "让我们出发把。" + step4_2: "对于第一条帖子,可以做一个 {introduction} 或一个简单的 \"hello world!\"" + step5_1: "时间线,无处不在的时间线!" + step5_2: "您的服务器已启用 {timelines} 种不同的时间线。" + step5_3: "首页{icon}时间线是您可以看到您关注账号的帖子的时间线。" + step5_4: "本地{icon}时间线是您可以看到此服务器上其它用户的帖子的时间线。" + step5_5: "社交{icon}时间线是主页和本地时间线的结合。" + step5_6: "推荐{icon}时间线是您可以看到管理员推荐服务器的帖子的时间线。" + step5_7: "全局{icon}时间线是您可以看到来自其它所有互联服务器的帖子的时间线。" + step6_1: "那么,这里是什么地方?" + step6_2: "好吧,您不只是加入 Firefish。您已经加入了 Fediverse 的一个门户,这是一个由成千上万台服务器组成的互联网络。" + step6_3: "每个服务器的工作方式不同,并不是所有的服务器都运行 Firefish。但这个服务器是的! 这有点复杂,但您很快就会明白的。" + step6_4: "现在,去吧,去探索,去享受乐趣吧!" +_2fa: + alreadyRegistered: "您已经注册了两步验证设备。" + registerTOTP: "注册身份验证器应用" + registerSecurityKey: "注册安全或通行密钥" + step1: "首先,在您的设备上安装身份验证器应用,例如 {a} 或 {b}。" + step2: "然后,扫描屏幕上显示的二维码。" + step2Url: "如果您使用的是桌面程序,您也可以输入这个URL:" + step3: "输入您的应用提供的令牌以完成设置。" + step4: "从现在开始,任何登录操作都将要求您提供这样一个令牌。" + securityKeyInfo: "除了指纹或 PIN 身份验证外,您还可以通过支持 FIDO2 的硬件安全密钥设置身份验证,以进一步保护您的账号。" + token: 2FA 令牌 + step3Title: 输入验证码 + step2Click: 点击此二维码将允许您在安全密钥或手机身份验证器应用中注册 2FA。 + securityKeyNotSupported: 您的浏览器不支持安全密钥。 + securityKeyName: 输入密钥名称 + chromePasskeyNotSupported: 暂不支持 Chrome 通行密钥。 + tapSecurityKey: 请按照您的浏览器的指示注册安全或通行密钥 + removeKey: 移除安全密钥 + removeKeyConfirm: 真的要删除 {name} 密钥吗? +_permissions: + "read:account": "查看账号信息" + "write:account": "更改账号信息" + "read:blocks": "查看屏蔽名单" + "write:blocks": "编辑屏蔽名单" + "read:drive": "查看网盘" + "write:drive": "管理网盘文件" + "read:favorites": "查看收藏" + "write:favorites": "编辑收藏" + "read:following": "查看关注信息" + "write:following": "关注/取消关注其它账号" + "read:messaging": "查看聊天消息" + "write:messaging": "撰写或删除聊天消息" + "read:mutes": "查看静音用户列表" + "write:mutes": "编辑静音用户列表" + "write:notes": "撰写或删除帖子" + "read:notifications": "查看通知" + "write:notifications": "管理通知" + "read:reactions": "查看回应" + "write:reactions": "编辑回应" + "write:votes": "投票" + "read:pages": "查看页面" + "write:pages": "编辑或删除页面" + "read:page-likes": "查看页面上的喜欢" + "write:page-likes": "编辑页面上的喜欢" + "read:user-groups": "查看用户组" + "write:user-groups": "操作用户组" + "read:channels": "查看频道" + "write:channels": "管理频道" + "read:gallery": "浏览图库" + "write:gallery": "编辑图库" + "read:gallery-likes": "读取喜欢的图片" + "write:gallery-likes": "编辑喜欢的图片" +_auth: + shareAccess: "您要授权允许 \"{name}\" 访问您的账号吗?" + shareAccessAsk: "您确定要授权此应用访问您的账号吗?" + permissionAsk: "此应用请求以下权限:" + pleaseGoBack: "请返回至应用" + callback: "正在返回至应用" + denied: "拒绝访问" + allPermissions: 完全的账号访问权限 + copyAsk: 请将以下授权码粘贴到应用中: +_antennaSources: + all: "所有帖子" + homeTimeline: "已关注用户的帖子" + users: "来自指定用户的帖子" + userList: "来自指定列表中的帖子" + userGroup: "来自指定群组中用户的帖子" + instances: 服务器上所有用户的帖子 +_weekday: + sunday: "星期日" + monday: "星期一" + tuesday: "星期二" + wednesday: "星期三" + thursday: "星期四" + friday: "星期五" + saturday: "星期六" +_widgets: + memo: "便签" + notifications: "通知" + timeline: "时间线" + calendar: "日历" + trends: "趋势" + clock: "时钟" + rss: "RSS 阅读器" + rssTicker: "RSS 滚动条" + activity: "活动" + photos: "照片" + digitalClock: "数字时钟" + unixClock: "UNIX 时钟" + federation: "联邦宇宙" + instanceCloud: "服务器云端" + postForm: "发布窗口" + slideshow: "幻灯片展示" + button: "按钮" + onlineUsers: "在线用户" + jobQueue: "作业队列" + serverMetric: "服务器指标" + aiscript: "AiScript 控制台" + aichan: "小蓝" + userList: 用户列表 + serverInfo: 服务器信息 + _userList: + chooseList: 选择列表 +_cw: + hide: "隐藏" + show: "查看更多" + chars: "{count} 个字符" + files: "{count} 个文件" +_poll: + noOnlyOneChoice: "需要至少两个选项" + choiceN: "选择 {n}" + noMore: "无法再添加更多了" + canMultipleVote: "允许多个投票" + expiration: "截止时间" + infinite: "永久" + at: "指定日期" + after: "指定时间" + deadlineDate: "截止日期" + deadlineTime: "小时" + duration: "时长" + votesCount: "{n} 票" + totalVotes: "总票数 {n}" + vote: "投票" + showResult: "显示结果" + voted: "已投票" + closed: "已截止" + remainingDays: "{d} 天 {h} 小时后截止" + remainingHours: "{h} 小时 {m} 分后截止" + remainingMinutes: "{m} 分 {s} 秒后截止" + remainingSeconds: "{s} 秒后截止" +_visibility: + public: "公开" + publicDescription: "您的帖子将出现在公共时间线上" + home: "悄悄公开" + homeDescription: "仅发送至首页时间线" + followers: "仅关注者" + followersDescription: "仅对您的关注者和提及的用户可见" + specified: "指定用户" + specifiedDescription: "仅发送至指定用户" + localOnly: "仅限本地" + localOnlyDescription: "对远程用户不可见" +_postForm: + replyPlaceholder: "回复这个帖子..." + quotePlaceholder: "引用这个帖子..." + channelPlaceholder: "发布到频道…" + _placeholders: + a: "现在如何?" + b: "发生了什么?" + c: "您有什么想法?" + d: "您想要发布些什么吗?" + e: "请写下来吧..." + f: "等待您的发布..." +_profile: + name: "昵称" + username: "用户名" + description: "个人简介" + youCanIncludeHashtags: "您可以包含一个话题标签。" + metadata: "附加信息" + metadataEdit: "附加信息编辑" + metadataDescription: "使用这些,您可以在您的个人资料中显示其它信息字段。您可以添加带有 {rel} 的 {a} 标签或 {l} 标签来验证您个人资料上的链接!" + metadataLabel: "标签" + metadataContent: "内容" + changeAvatar: "修改头像" + changeBanner: "修改横幅" + locationDescription: 如果您先输入您的城市,它将向其它用户显示您的当地时间。 +_exportOrImport: + allNotes: "所有帖子" + followingList: "已关注用户" + muteList: "已静音用户" + blockingList: "已屏蔽用户" + userLists: "列表" + excludeMutingUsers: "排除已静音用户" + excludeInactiveUsers: "排除不活跃用户" +_charts: + federation: "联合" + apRequest: "请求" + usersIncDec: "用户数量:增加/减少" + usersTotal: "用户总数" + activeUsers: "活跃用户数" + notesIncDec: "帖子:增加/减少" + localNotesIncDec: "本地帖子量增减" + remoteNotesIncDec: "远程帖子量增减" + notesTotal: "帖子总数" + filesIncDec: "文件总数增减" + filesTotal: "合计文件总数" + storageUsageIncDec: "存储空间用量增减" + storageUsageTotal: "合计存储空间用量" +_instanceCharts: + requests: "请求" + users: "用户数量:增加/减少" + usersTotal: "用户总计" + notes: "帖子:增加/减少" + notesTotal: "帖子总计" + ff: "被关注用户/关注者的数量差异 " + ffTotal: "关注/被关注者总计" + cacheSize: "缓存大小:增加/减少" + cacheSizeTotal: "缓存大小总计" + files: "文件总数增减" + filesTotal: "文件数总计" +_timelines: + home: "首页" + local: "本地" + social: "社交" + global: "全局" + recommended: 推荐 +_pages: + newPage: "创建页面" + editPage: "编辑页面" + readPage: "查看页面" + created: "页面已创建" + updated: "页面已更新" + deleted: "该页面已被删除" + pageSetting: "页面设置" + nameAlreadyExists: "该页面 URL 已存在" + invalidNameTitle: "无效的页面 URL" + invalidNameText: "请确认该项不为空" + editThisPage: "编辑此页面" + viewSource: "查看源代码" + viewPage: "查看页面" + like: "赞" + unlike: "取消喜欢" + my: "我的页面" + liked: "喜欢的页面" + featured: "热门" + inspector: "检查器" + contents: "内容" + content: "页面内容" + variables: "变量" + title: "标题" + url: "页面 URL" + summary: "页面摘要" + alignCenter: "居中" + hideTitleWhenPinned: "置顶时隐藏标题" + font: "字体" + fontSerif: "衬线字体" + fontSansSerif: "无衬线字体" + eyeCatchingImageSet: "设置封面图片" + eyeCatchingImageRemove: "删除封面图片" + chooseBlock: "添加块" + selectType: "选择类型" + enterVariableName: "请输入变量名" + variableNameIsAlreadyUsed: "变量名已使用" + contentBlocks: "内容" + inputBlocks: "输入" + specialBlocks: "特殊" + blocks: + text: "文本" + textarea: "文本区域" + section: "章节" + image: "图片" + button: "按钮" + if: "如果" + _if: + variable: "变量" + post: "投稿窗口" + _post: + text: "内容" + attachCanvasImage: "附加画布图像" + canvasId: "画布 ID" + textInput: "文本输入" + _textInput: + name: "变量名" + text: "标题" + default: "默认值" + textareaInput: "多行文本输入" + _textareaInput: + name: "变量名" + text: "标题" + default: "默认值" + numberInput: "输入数值" + _numberInput: + name: "变量名" + text: "标题" + default: "默认值" + canvas: "画布" + _canvas: + id: "画布 ID" + width: "宽度" + height: "高度" + note: "嵌入的帖子" + _note: + id: "帖子 ID" + idDescription: "您也可以将帖子 URL 粘贴到此处。" + detailed: "显示详细信息" + switch: "开关" + _switch: + name: "变量名" + text: "标题" + default: "默认值" + counter: "计数器" + _counter: + name: "变量名" + text: "标题" + inc: "增加值" + _button: + text: "标题" + colored: "彩色" + action: "按下按钮时的行为" + _action: + dialog: "显示对话框" + _dialog: + content: "内容" + resetRandom: "重置随机值" + pushEvent: "发送事件" + _pushEvent: + event: "事件名称" + message: "按下时显示的消息" + variable: "发送的变量" + no-variable: "空" + callAiScript: "调用 AiScript" + _callAiScript: + functionName: "函数名" + radioButton: "选择项" + _radioButton: + name: "变量名" + title: "标题" + values: "使用换行区分的选择项" + default: "默认值" + script: + categories: + flow: "控制" + logical: "逻辑运算" + operation: "计算" + comparison: "比较" + random: "随机" + value: "值" + fn: "函数" + text: "文本操作" + convert: "转换" + list: "列表" + blocks: + text: "文本" + multiLineText: "文本(多行)" + textList: "文本列表" + _textList: + info: "请使用换行符分隔每行" + strLen: "文本长度" + _strLen: + arg1: "文本" + strPick: "提取字符" + _strPick: + arg1: "文本" + arg2: "字符位置" + strReplace: "替换文本" + _strReplace: + arg1: "文本" + arg2: "替换之前" + arg3: "替换之后" + strReverse: "文本反向" + _strReverse: + arg1: "文本" + join: "合并文本" + _join: + arg1: "列表" + arg2: "分隔符" + add: "加" + _add: + arg1: "A" + arg2: "B" + subtract: "减" + _subtract: + arg1: "A" + arg2: "B" + multiply: "乘" + _multiply: + arg1: "A" + arg2: "B" + divide: "除" + _divide: + arg1: "A" + arg2: "B" + mod: "取模 (MOD)" + _mod: + arg1: "A" + arg2: "B" + round: "四舍五入" + _round: + arg1: "数值" + eq: "A 和 B 相等" + _eq: + arg1: "A" + arg2: "B" + notEq: "A 和 B 不等" + _notEq: + arg1: "A" + arg2: "B" + and: "A 和 B" + _and: + arg1: "A" + arg2: "B" + or: "A 或 B" + _or: + arg1: "A" + arg2: "B" + lt: "< A 小于 B" + _lt: + arg1: "A" + arg2: "B" + gt: "> A 大于 B" + _gt: + arg1: "A" + arg2: "B" + ltEq: "<= A 小于等于 B" + _ltEq: + arg1: "A" + arg2: "B" + gtEq: ">= A 大于等于 B" + _gtEq: + arg1: "A" + arg2: "B" + if: "分支" + _if: + arg1: "如果" + arg2: "如果" + arg3: "否则" + not: "否" + _not: + arg1: "否" + random: "随机" + _random: + arg1: "概率" + rannum: "随机数" + _rannum: + arg1: "最小值" + arg2: "最大值" + randomPick: "从列表中随机选择" + _randomPick: + arg1: "列表" + dailyRandom: "随机(每个用户每日)" + _dailyRandom: + arg1: "概率" + dailyRannum: "随机数(每个用户每日)" + _dailyRannum: + arg1: "最小值" + arg2: "最大值" + dailyRandomPick: "从列表中随机选择(每个用户每日)" + _dailyRandomPick: + arg1: "列表" + seedRandom: "随机(种子)" + _seedRandom: + arg1: "种子" + arg2: "概率" + seedRannum: "随机数(种子)" + _seedRannum: + arg1: "种子" + arg2: "最小值" + arg3: "最大值" + seedRandomPick: "从列表中随机选择(种子)" + _seedRandomPick: + arg1: "种子" + arg2: "列表" + DRPWPM: "从概率列表中随机选择(每个用户每日)" + _DRPWPM: + arg1: "文本列表" + pick: "从列表中选择" + _pick: + arg1: "列表" + arg2: "位置" + listLen: "获取列表长度" + _listLen: + arg1: "列表" + number: "数值" + stringToNumber: "文本到数字" + _stringToNumber: + arg1: "文本" + numberToString: "数字到文本" + _numberToString: + arg1: "数值" + splitStrByLine: "将文本按行拆分" + _splitStrByLine: + arg1: "文本" + ref: "变量" + aiScriptVar: "AiScript 变量" + fn: "函数" + _fn: + slots: "槽函数" + slots-info: "请使用换行符分隔每个槽函数" + arg1: "输出" + for: "重复" + _for: + arg1: "次数" + arg2: "处理" + typeError: "槽函数 {slot} 需要传入 \"{expect}\",但是实际传入为 \"{actual}\"!" + thereIsEmptySlot: "槽函数 {slot} 为空!" + types: + string: "文字" + number: "数值" + boolean: "Flag" + array: "列表" + stringArray: "文本列表" + emptySlot: "空白槽函数" + enviromentVariables: "环境变量" + pageVariables: "页面元素" + argVariables: "输入变量" +_relayStatus: + requesting: "待批准" + accepted: "已批准" + rejected: "已拒绝" +_notification: + fileUploaded: "文件已上传" + youGotMention: "来自 {name} 的提及" + youGotReply: "来自 {name} 的回复" + youGotQuote: "来自 {name} 的引用" + youRenoted: "来自 {name} 的转发" + youGotPoll: "来自 {name} 的投票" + youGotMessagingMessageFromUser: "来自 {name} 的聊天" + youGotMessagingMessageFromGroup: "来自 {name} 的群聊" + youWereFollowed: "关注了您" + youReceivedFollowRequest: "您有新的关注请求" + yourFollowRequestAccepted: "您的关注请求已通过" + youWereInvitedToGroup: "{userName} 邀请您加入一个群组" + pollEnded: "问卷调查结果已生成" + emptyPushNotificationMessage: "推送通知已更新" + _types: + all: "全部" + follow: "新关注者" + mention: "提及" + reply: "回复" + renote: "转发" + quote: "引用" + reaction: "回应" + pollVote: "问卷调查投票" + pollEnded: "问卷调查结束" + receiveFollowRequest: "收到的关注请求" + followRequestAccepted: "已通过的关注请求" + groupInvited: "群组加入邀请" + app: "关联应用的通知" + _actions: + followBack: "回关" + reply: "回复" + renote: "转发" + reacted: 回应了您的帖子 + voted: 在您的问卷调查中投了票 + renoted: 转发了您的帖子 + andCountUsers: "和其他 {count} 名用户{acted}" +_deck: + alwaysShowMainColumn: "总是显示主列" + columnAlign: "列对齐" + addColumn: "添加列" + configureColumn: "列设置" + swapLeft: "向左移动" + swapRight: "向右移动" + swapUp: "向上移动" + swapDown: "向下移动" + stackLeft: "向左折叠" + popRight: "向右弹出" + profile: "工作区" + newProfile: "新建工作区" + renameProfile: "重命名工作区" + deleteProfile: "删除工作区" + nameAlreadyExists: "该工作区名已存在。" + introduction: "将各列进行组合以创建您自己的界面!" + introduction2: "您可以随时通过屏幕右侧的 + 来添加列。" + widgetsIntroduction: "从列菜单中,选择“编辑小部件”以添加小部件。" + _columns: + main: "主列" + widgets: "小部件" + notifications: "通知" + tl: "时间线" + antenna: "天线" + list: "列表" + mentions: "提及" + direct: "私信" + channel: 频道 +apps: 应用 +_messaging: + dms: 私信 + groups: 群组 +migration: 迁移 +_experiments: + title: 实验性功能 + postImportsCaption: 允许用户从过去的 Firefish、Misskey、Mastodon、Akkoma 和 Pleroma 账号导入帖子。如果您的队列出现拥堵,则可能会导致加载速度减慢。 + enablePostImports: 启用帖子导入 +license: 许可证 +flagSpeakAsCatDescription: 在猫模式下您的帖子会喵化 +allowedInstances: 白名单服务器 +listsDesc: 列表可以让您创建含有指定用户的时间线,它们可以从时间线页面访问。 +flagSpeakAsCat: 像猫一样说话 +removeReaction: 移除您的回应 +expandOnNoteClick: 点击打开帖子 +expandOnNoteClickDesc: 如果禁用,您仍然可以在右键菜单中或通过点击时间戳打开帖子。 +sendPushNotificationReadMessage: 已读后删除推送通知 +customMOTD: 自定义 MOTD(启动屏幕消息) +sendPushNotificationReadMessageCaption: 会短暂显示 "{emptyPushNotificationMessage}" 的通知,如果启用,可能会增加您的设备的耗电量。 +adminCustomCssWarn: 仅当您知道此设置的作用时才应使用它。输入不正确的值可能会导致每个人的客户端停止正常运行。请在用户设置中进行测试来确保您的 CSS + 正常工作。 +customMOTDDescription: 自定义 MOTD(启动屏幕)消息,一行一个,每次用户加载 / 重新加载页面时都会随机显示。 +customSplashIconsDescription: 用换行符隔开的自定义启动屏幕图标的 URL,在用户每次加载 / 重新加载页面时随机显示。请确保图片是在一个静态的 + URL 上,最好全部调整为 192x192 的大小。 +recommendedInstancesDescription: 推荐的服务器一行一个,它们将出现在推荐时间线中。 +splash: 启动画面 +showUpdates: Firefish 更新后显示弹出窗口 +selectInstance: 选择服务器 +silencedInstances: 禁言的服务器 +antennaInstancesDescription: 列出服务器主机名,一行一个 +pushNotification: 推送通知 +subscribePushNotification: 启用推送通知 +showAdminUpdates: 提示新的 Firefish 版本可用(仅对于管理员) +searchPlaceholder: 搜索 Firefish +addInstance: 添加服务器 +jumpToPrevious: 跳转到上一个 +silenceThisInstance: 禁言此服务器 +manageGroups: 管理群组 +antennasDesc: "天线会显示符合您设置条件的新帖子!\n可以从时间线页面访问它们。" +channelFederationWarn: 频道还没有与其它服务器联合 +seperateRenoteQuote: 单独的转发和引用按钮 +customSplashIcons: 自定义启动屏幕图标(urls) +alt: 替代文字 +pushNotificationNotSupported: 您的浏览器或者服务器不支持推送通知 +showAds: 显示社区横幅 +enterSendsMessage: 按回车键发送信息(关闭则是 Ctrl + Return 发送) +recommendedInstances: 推荐服务器 +updateAvailable: 可能有可用更新! +swipeOnMobile: 允许在页面之间滑动 +swipeOnDesktop: 允许在桌面端以移动设备方式滑动 +logoImageUrl: Logo 图像 URL +deleted: 已删除 +editNote: 编辑帖子 +edited: 于 {date} {time} 编辑 +selectChannel: 选择一个频道 +accountMoved: 用户已迁移至新账号: +silencedInstancesDescription: 列出您想禁言的服务器的主机名。列出的服务器中的账号被视为 "禁言",只能发出关注请求,如果不被关注,就不能提及本地账号。这不会影响被屏蔽的服务器。 +hiddenTags: 隐藏的话题标签 +userSaysSomethingReason: '{name} 说了 {reason}' +clipsDesc: 便签就像可共享的分类书签。您可以从各个帖子的菜单中创建便签。 +privateModeInfo: 当启用时,只有白名单上的服务器可以与您的服务器联合,所有的帖子都会对公共时间线隐藏。 +allowedInstancesDescription: 要列入联合白名单的服务器的主机名,一行一个(仅适用于私密模式)。 +breakFollowConfirm: 确定要移除关注者吗? +caption: 自动显示描述文字 +newer: 更新的 +older: 更旧的 +noInstances: 没有服务器 +silenced: 禁言的 +accessibility: 无障碍 +secureMode: 安全模式(仅允许授权的拉取) +replayTutorial: 重播教程 +userSaysSomethingReasonReply: '{name} 回复了包含 {reason} 的帖子' +userSaysSomethingReasonQuote: '{name} 引用了一篇包含 {reason} 的帖子' +userSaysSomethingReasonRenote: '{name} 转发了一个包含 {reason} 的帖子' +noThankYou: 不,谢谢 +secureModeInfo: 当向其它服务器请求时,不要在没有验证的情况下发回。 +privateMode: 私密模式 +instanceSecurity: 服务器安全 +image: 图像 +video: 视频 +audio: 音频 +cannotUploadBecauseExceedsFileSizeLimit: 无法上传此文件,因为它超出了允许的最大大小。 +unsubscribePushNotification: 禁用推送通知 +pushNotificationAlreadySubscribed: 推送通知已启用 +enableEmojiReactions: 启用表情符号回应 +cw: 内容警告 +hiddenTagsDescription: 列出您想隐藏的话题标签(不带#)以避免在趋势和探索中显示。隐藏的标签仍然可以通过其它方式被发现。 +enableRecommendedTimeline: 启用推荐时间线 +_skinTones: + medium: 中等 + light: 浅色 + yellow: 黄色 + dark: 深色 + mediumLight: 中等偏淡 + mediumDark: 中等偏深 +isModerator: 监察员 +isAdmin: 管理员 +moveFromDescription: 这将为您的旧账号设置一个别名,以便您可以从该旧账号迁移到当前账号。在从旧账号迁移之前执行此操作。请输入格式如 @person@server.com + 的账号标签 +signupsDisabled: 该服务器目前关闭注册。如果您有该服务器的邀请码,请在下面输入。 +silencedWarning: 显示这个页面是因为这些用户来自您的管理员设置的禁言服务器,所以他们有可能是垃圾信息。 +isBot: 这个账号是一个自动化账号 +moveAccountDescription: 这个过程是不可逆的。在迁移之前,请确保您已在新账号上为当前账号设置了别名。请输入格式如 @person@server.com + 账号标签 +moveFromLabel: 您要迁移出的旧账号: +preventAiLearning: 阻止 AI 机器人抓取 +preventAiLearningDescription: 请求第三方人工智能语言模型不要研究您上传的内容,例如帖子和图像。 +noGraze: 请禁用 "Graze for Mastodon" 浏览器扩展,因为它会干扰 Firefish。 +moveTo: 将当前账号迁移至新账号 +moveToLabel: 您要迁移到的目标账号: +moveAccount: 迁移账号! +migrationConfirm: "您确实确定要将账号迁移到 {account} 吗?此操作无法撤消,并且您将无法再次正常使用旧账号。\n另外,请确保您已将此当前账号设置为要移出的账号。" +noteId: 帖子 ID +moveFrom: 从旧账号迁移至此账号 +defaultReaction: 发出和收到帖子的默认表情符号反应 +sendModMail: 发送管理通知 +moderationNote: "管理员备注" +ipFirstAcknowledged: "首次获取此 IP 地址的日期" +driveCapacityOverride: "网盘容量变更" +isLocked: 该账号设置了关注请求 +_filters: + notesBefore: 帖子早于 + followingOnly: 仅关注中 + notesAfter: 帖子晚于 + fromDomain: 来自域名 + withFile: 带有文件 + fromUser: 来自用户 + followersOnly: 仅关注者 +reactionPickerSkinTone: 首选的表情符号肤色 +isPatron: Firefish 赞助 +_dialog: + charactersExceeded: 超出了最大字符数!当前:{current} / 限制:{max} + charactersBelow: 没有足够的字符!当前:{current} / 限制:{min} +enableIdenticonGeneration: 启用 Identicon 生成 +enableServerMachineStats: 启用服务器硬件统计 +_feeds: + atom: Atom + rss: RSS + jsonFeed: JSON 订阅源 + copyFeed: 复制订阅源 +verifiedLink: 已验证链接 +xl: 特大 +showPopup: 以弹出窗口通知用户 +showWithSparkles: 闪闪发光地展示 +youHaveUnreadAnnouncements: 您有未读的公告 +donationLink: 赞助页面链接 +neverShow: 不再显示 +remindMeLater: 稍后再说 +removeQuote: 移除引用 +removeRecipient: 移除接收者 +removeMember: 移除成员 +origin: 起源 +confirm: 确认 +importZip: 导入 ZIP +exportZip: 导出 ZIP +getQrCode: "获取二维码" +remoteFollow: "远程关注" +copyRemoteFollowUrl: "复制远程关注 URL" +objectStorageS3ForcePathStyleDesc: 打开此选项可构建格式为 "s3.amazonaws.com//" 而非 ".s3.amazonaws.com" + 的端点 URL。 +objectStorageS3ForcePathStyle: 使用基于路径的端点 URL +delete2fa: 禁用 2FA +deletePasskeysConfirm: 这将不可逆转地删除此账号上的所有通行密钥和安全密钥。是否继续? +inputNotMatch: 输入不匹配 +deletePasskeys: 删除通行密钥 +delete2faConfirm: 这将不可逆转地删除此账户上的 2FA。是否继续? +addRe: 在回复有内容警告的帖子时,在评论开头添加 "re:" +detectPostLanguage: 自动检测语言,并显示外文帖子的翻译按钮 +indexableDescription: 允许内置搜索显示您的公开帖子 +indexable: 可索引的 +languageForTranslation: 帖子翻译语言 +vibrate: 播放振动 +openServerInfo: 点击帖子上的服务器滚动条时显示服务器信息 +clickToShowPatterns: 点击显示模块模式 +private: "秘密" +privateDescription: "仅你可见" +_iconSets: + regular: 标准 + duotone: 双色 + fill: 填满 + bold: 加粗 + light: 减细 +emojiModPerm: 自定义表情符号管理权限 +squareCatAvatars: 为猫账号显示方形头像图标 +makePrivate: 设为私有 +makePrivateConfirm: 此操作将向远程服务器发送删除请求并将可见性更改为私有。是否继续? +_emojiModPerm: + add: 添加 + mod: 添加和编辑 + unauthorized: 未授权 + full: 全部允许 +moreUrls: 置顶页面 +enablePullToRefresh: 启用 “下拉刷新” +pullToRefreshThreshold: 触发下拉刷新所需的距离 +pullDownToReload: 下拉刷新 +releaseToReload: 释放刷新 +reloading: 刷新中 +attachedToNotes: 带有此附件的帖子 +showAttachedNotes: 显示有此附件的帖子 +iconSet: 图标样式 +moreUrlsDescription: "请您使用以下形式输入要固定到左下角帮助菜单的页面,每行一个:\n\"显示名称\": https://example.com/" +useCdn: 从 CDN 获取资源 +useCdnDescription: 从 JSDelivr CDN(而不是 Firefish 服务器)加载一些静态资源,例如 Twemoji。 +showBigPostButton: 在发帖表单上显示一个巨大的发帖按钮 +suggested: 建议 +noLanguage: 无语言 +showPreviewByDefault: 默认以发布形式显示预览 +preventMisclick: 预防误触 +hideFollowButtons: 隐藏会误触的关注按钮 +forMobile: 移动设备 +replaceChatButtonWithAccountButton: 将聊天按钮替换为帐户切换按钮 +replaceWidgetsButtonWithReloadButton: 将小部件按钮替换为重新加载按钮 +searchEngine: 搜索栏 MFM 中使用的搜索引擎 +postSearch: 在此服务器上搜索帖子 +enableTimelineStreaming: 自动更新时间线 +emojiModPermDescription: "添加:允许该用户添加新的自定义表情符号,并为新添加的自定义表情符号设置标签/类别/授权。\n添加和编辑:在 “添加” + 权限的基础上,允许该用户编辑现有自定义表情符号的名称/类别/标签/授权。\n全部允许:在 “添加和编辑” 权限的基础上,允许该用户删除现有的自定义表情符号。" +replyMute: 静音回复 +replyUnmute: 取消静音回复 +searchWords: 要搜索的关键词 / 要查询的用户 ID 或 URL +searchRange: 发表于(可选) +searchUsers: 发布者(可选) +searchUsersDescription: "要搜索特定用户/服务器的帖子,请输入 ID(@user@example.com,或 @user 对于本地用户)或域名(example.com)。\n + \n如果您输入 'me' (不带引号),您的所有帖子(包括不公开的帖子、仅限关注者的帖子、直接帖子和秘密帖子)都会被搜索。\n\n如果您输入 'local' (不带引号),结果将被过滤以仅包含来自该服务器的帖子。" +searchPostsWithFiles: 只带有文件的帖子 +searchCwAndAlt: 包括内容警告和文件描述 +publishTimelines: 为访客发布时间线 +publishTimelinesDescription: 如果启用,在用户登出时本地和全局时间线也会显示在 {url} 上。 +searchWordsDescription: "在此处输入搜索词以搜索帖子。交集搜索关键词之间使用空格进行区分,并集搜索关键词之间使用 OR 进行区分。\n例如 + '早上 晚上' 将查找包含 '早上' 和 '晚上' 的帖子,而 '早上 OR 晚上' 将查找包含 '早上' 或 '晚上' (以及同时包含两者)的帖子。\n您还可以组合交集/并集条件,例如 + '(早上 OR 晚上) 困了' 。\n如果您想搜索单词序列(例如一个英语句子),您必须将其放在双引号中,例如 \"Today I learned\" 以区分于交集搜索。\n + \n如果您想转到特定的用户页面或帖子页面,请在此字段中输入用户 ID 或 URL,然后单击 “查询” 按钮。 单击 “搜索” 将搜索字面包含用户 ID/URL + 的帖子。" +searchRangeDescription: "如果您要过滤时间段,请按以下格式输入:20220615-20231031\n\n如果您省略年份(例如 0105-0106 + 或 20231105-0110),它将被解释为当前年份。\n\n您还可以省略开始日期或结束日期。 例如 -0102 将过滤搜索结果以仅显示今年 1 月 2 日之前发布的帖子,而 + 20231026- 将过滤结果以仅显示 2023 年 10 月 26 日之后发布的帖子。" +messagingUnencryptedInfo: "Firefish 上的聊天没有经过端到端加密,请不要在聊天中分享您的敏感信息。" +noAltTextWarning: 有些附件没有描述。您是否忘记写描述了? +showNoAltTextWarning: 当您尝试发布没有描述的帖子附件时显示警告 +showAddFileDescriptionAtFirstPost: 当您首次尝试发布没有描述的帖子附件时自动弹出添加描述页面 +autocorrectNoteLanguage: 当帖子语言不符合自动检测的结果的时候显示警告 +incorrectLanguageWarning: "看上去您帖子使用的语言是{detected},但您选择的语言是{current}。\n要改为以{detected}发帖吗?" +noteEditHistory: "帖子编辑历史" +media: 媒体 +slashQuote: "斜杠引用" +foldNotification: "将通知按同类型分组" +scheduledPost: "定时发送" +cancelScheduledPost: "取消定时发送" +scheduledPostAt: "帖子将于 {time} 发送" +scheduledDate: "发送日期" +mergeThreadInTimeline: "将时间线内的连续回复合并成一串" +mergeRenotesInTimeline: "合并同一个帖子的转发" diff --git a/locales/zh-TW.yml b/locales/zh-TW.yml new file mode 100644 index 0000000..6c8f1c4 --- /dev/null +++ b/locales/zh-TW.yml @@ -0,0 +1,2058 @@ +_lang_: "繁體中文" +headlineFirefish: "貼文連繫網路" +introFirefish: "歡迎! Firefish是一個開源、去中心化且永遠免費的社群網路平台!🚀" +monthAndDay: "{month}月 {day}日" +search: "搜尋" +notifications: "通知" +username: "使用者名稱" +password: "密碼" +forgotPassword: "忘記密碼" +fetchingAsApObject: "從聯邦宇宙取得中" +ok: "OK" +gotIt: "知道了!" +cancel: "取消" +enterUsername: "輸入使用者名稱" +renotedBy: "{user} 轉發了" +noNotes: "無貼文" +noNotifications: "沒有通知" +instance: "伺服器" +settings: "設定" +basicSettings: "基本設定" +otherSettings: "其他設定" +openInWindow: "在新視窗開啟" +profile: "個人檔案" +timeline: "時間軸" +noAccountDescription: "此使用者尚未自我介紹。" +login: "登入" +loggingIn: "登入中" +logout: "登出" +signup: "註冊" +uploading: "上傳中..." +save: "儲存" +users: "使用者" +addUser: "新增使用者" +favorite: "添加至我的最愛" +favorites: "我的最愛" +unfavorite: "從我的最愛中移除" +favorited: "已添加至我的最愛。" +alreadyFavorited: "我的最愛中已存在。" +cantFavorite: "無法加入至我的最愛。" +pin: "置頂" +unpin: "取消置頂" +copyContent: "複製內容" +copyLink: "複製連結" +delete: "刪除" +deleteAndEdit: "刪除並編輯" +deleteAndEditConfirm: "要刪除並再次編輯嗎?此貼文的所有反應、轉發和回覆也會消失。" +addToList: "加入至清單" +sendMessage: "發送訊息" +copyUsername: "複製使用者名稱" +searchUser: "搜尋使用者" +reply: "回覆" +replies: "回覆" +toReply: "回覆" +loadMore: "載入更多" +showMore: "載入更多" +showLess: "關閉" +youGotNewFollower: "您有新的追隨者" +receiveFollowRequest: "您有新的追隨請求" +followRequestAccepted: "追隨請求已接受" +mention: "提及" +mentions: "提及" +directNotes: "私訊" +importAndExport: "匯入與匯出" +import: "匯入" +export: "匯出" +files: "檔案" +download: "下載" +driveFileDeleteConfirm: "確定要刪除檔案「{name}」嗎?使用此附件的貼文也會跟著消失。" +unfollowConfirm: "確定要取消追隨 「{name}」 嗎?" +exportRequested: "已請求匯出。這可能會花一點時間。結束後檔案將會被放到雲端裡。" +importRequested: "已請求匯入。這可能會花一點時間。" +lists: "清單" +noLists: "你沒有任何清單" +note: "貼文" +notes: "貼文" +toPost: "發貼文" +following: "追隨中" +followers: "追隨者" +followsYou: "追隨你的人" +createList: "建立清單" +manageLists: "管理清單" +error: "錯誤" +somethingHappened: "發生錯誤" +retry: "重試" +pageLoadError: "載入頁面失敗。" +pageLoadErrorDescription: "這通常是因為網路錯誤或是瀏覽器快取殘留的原因。請先清除瀏覽器快取,稍後再重試。" +serverIsDead: "伺服器沒有回應。請稍等片刻,然後重試。" +youShouldUpgradeClient: "請重新載入以使用新版本的客戶端顯示此頁面。" +enterListName: "輸入清單名稱" +privacy: "隱私" +makeFollowManuallyApprove: "手動審核追隨請求" +defaultNoteVisibility: "預設可見性" +follow: "追隨" +followRequest: "追隨請求" +followRequests: "追隨請求" +sentFollowRequests: "待回應的追隨請求" +unfollow: "取消追隨" +followRequestPending: "追隨許可批准中" +enterEmoji: "輸入表情符號" +renote: "轉發" +renotes: "轉發" +unrenote: "取消轉發" +renoted: "已轉發。" +cantRenote: "無法轉發此貼文。" +cantReRenote: "無法轉發之前已經轉發過的內容。" +quote: "引用" +quotes: "引用" +toQuote: "引用" +pinnedNote: "已置頂的貼文" +pinned: "置頂" +you: "您" +clickToShow: "按一下以顯示" +sensitive: "敏感內容" +add: "新增" +reaction: "反應" +reactions: "反應" +enableEmojiReaction: "啟用表情符號反應" +showEmojisInReactionNotifications: "在反應通知中顯示表情符號" +reactionSetting: "在選擇器中顯示反應" +reactionSettingDescription2: "拖動以重新列序,點擊以刪除,按下 + 添加。" +rememberNoteVisibility: "記住貼文可見性" +attachCancel: "移除附件" +markAsSensitive: "標記為敏感內容" +unmarkAsSensitive: "取消標記為敏感內容" +enterFileName: "請輸入檔案名稱" +mute: "靜音" +unmute: "解除靜音" +renoteMute: "靜音轉發貼文" +renoteUnmute: "解除靜音轉發貼文" +block: "封鎖" +unblock: "解除封鎖" +suspend: "凍結" +unsuspend: "解除凍結" +blockConfirm: "確定要封鎖此使用者嗎?" +unblockConfirm: "確定要解除封鎖此使用者嗎?" +suspendConfirm: "確定凍結此帳號?" +unsuspendConfirm: "確定解凍此帳號?" +selectList: "選擇清單" +selectAntenna: "選擇天線" +selectWidget: "選擇小工具" +editWidgets: "編輯小工具" +editWidgetsExit: "完成" +customEmojis: "自訂表情符號" +emoji: "表情符號" +emojis: "表情符號" +emojiName: "表情符號名稱" +emojiUrl: "表情符號URL" +addEmoji: "加入表情符號" +settingGuide: "推薦設定" +cacheRemoteFiles: "快取遠端檔案" +cacheRemoteFilesDescription: "禁用此設定會停止遠端檔案的緩存,從而節省儲存空間,但資料會因直接連線從而產生額外數據花費。" +markLocalFilesNsfwByDefault: "將所有新增本地檔案預設標註為敏感內容" +markLocalFilesNsfwByDefaultDescription: "無論此設置如何,使用者都可以自行刪除檔案的敏感內容標誌。現有檔案也不受影響。" +flagAsBot: "標記此帳號為自動化帳號" +flagAsBotDescription: "如果本帳戶是由程式控制,請啟用此選項。此選項將作為一個標示以幫助其他開發者防止自動化帳號之間產生無限互動的行為,並會調整Firefish內部系統將此帳號識別為自動化帳號。" +flagAsCat: "你是喵咪嗎?w😺" +flagAsCatDescription: "如果想將本帳戶標示為一隻貓,請開啟此標示!" +flagShowTimelineReplies: "在時間軸上顯示貼文的回覆" +flagShowTimelineRepliesDescription: "啟用後,時間軸除了顯示使用者的貼文之外,也會顯示使用者對其他貼文的回覆。" +autoAcceptFollowed: "自動准予追隨中使用者的追隨請求" +addAccount: "添加帳戶" +loginFailed: "登入失敗" +showOnRemote: "開啟來源頁面" +general: "一般" +wallpaper: "桌布" +setWallpaper: "設定桌布" +removeWallpaper: "移除桌布" +searchWith: "搜尋: {q}" +youHaveNoLists: "你沒有任何清單" +followConfirm: "你真的要追隨 「{name}」 嗎?" +proxyAccount: "代理帳戶" +proxyAccountDescription: "代理帳戶是在某些情況下代替本地使用者追隨遠端使用者的帳戶。例如,當本地使用者將遠端使用者加入清單時,若沒有其他本地使用者追隨該遠端使用者,該遠端使用者的動態將不會發送到本地伺服器,因此將以代理帳戶代為追隨。" +host: "主機" +selectUser: "選取使用者" +recipient: "收件人" +annotation: "註解" +federation: "站台聯邦" +instances: "伺服器" +registeredAt: "初次註冊" +latestRequestSentAt: "上次發送的請求" +latestRequestReceivedAt: "上次收到的請求" +latestStatus: "最後狀態" +storageUsage: "已使用容量" +charts: "圖表" +perHour: "每小時" +perDay: "每日" +stopActivityDelivery: "停止發送活動" +blockThisInstance: "封鎖此伺服器" +operations: "操作" +software: "軟體" +version: "版本" +metadata: "元資料" +monitor: "監視器" +jobQueue: "佇列" +cpuAndMemory: "CPU及記憶體用量" +network: "網路" +disk: "硬碟" +instanceInfo: "伺服器資訊" +statistics: "統計" +clearQueue: "清除佇列" +clearQueueConfirmTitle: "確定要清除佇列嗎?" +clearQueueConfirmText: "未發佈的貼文將不會發佈。您通常不需要確認。" +clearCachedFiles: "清除快取資料" +clearCachedFilesConfirm: "確定要清除所有遠端暫存資料嗎?" +blockedInstances: "已封鎖的伺服器" +blockedInstancesDescription: "請逐行輸入需要封鎖的伺服器。已封鎖的伺服器將無法與本伺服器進行通訊。" +muteAndBlock: "靜音和封鎖" +mutedUsers: "已靜音的使用者" +blockedUsers: "已封鎖的使用者" +noUsers: "沒有任何使用者" +editProfile: "編輯個人檔案" +noteDeleteConfirm: "確定刪除此貼文嗎?" +pinLimitExceeded: "不能置頂更多貼文了" +intro: "Firefish 部署完成!請建立管理員帳戶。" +done: "完成" +processing: "處理中" +preview: "預覽" +default: "預設" +defaultValueIs: "預設值:{value}" +noCustomEmojis: "沒有自訂的表情符號" +noJobs: "沒有任務" +federating: "整合搜索中" +blocked: "已封鎖" +suspended: "已凍結" +all: "全部" +subscribing: "訂閱中" +publishing: "直播中" +notResponding: "沒有回應" +instanceFollowing: "追蹤伺服器" +instanceFollowers: "伺服器的追蹤者" +instanceUsers: "此伺服器的使用者" +changePassword: "修改密碼" +security: "安全性" +retypedNotMatch: "兩次輸入不一致。" +currentPassword: "目前密碼" +newPassword: "新密碼" +newPasswordRetype: "確認密碼" +attachFile: "上傳附件" +more: "更多!" +featured: "精選" +usernameOrUserId: "使用者名稱或使用者ID" +noSuchUser: "使用者不存在" +lookup: "查詢" +announcements: "公告" +announcement: "公告" +imageUrl: "圖片URL" +remove: "刪除" +removed: "已成功刪除" +removeAreYouSure: "確定要刪掉「{x}」嗎?" +deleteAreYouSure: "確定要刪除「{x}」嗎?" +resetAreYouSure: "確定要重設嗎?" +saved: "已儲存" +messaging: "訊息" +upload: "上傳" +keepOriginalUploading: "保留原圖" +keepOriginalUploadingDescription: "上傳圖片時保留原始圖片。關閉時,瀏覽器會在上傳時自動產生用於貼文發布的圖片。" +fromDrive: "從雲端空間" +fromUrl: "從網址" +uploadFromUrl: "從網址上傳" +uploadFromUrlDescription: "您要上傳的文件的網址" +uploadFromUrlRequested: "已請求上傳" +uploadFromUrlMayTakeTime: "還需要一些時間才能完成上傳。" +explore: "探索" +messageRead: "已讀" +noMoreHistory: "沒有更多歷史紀錄" +startMessaging: "開始傳送訊息" +nUsersRead: "{n}人已讀" +agreeTo: "我同意{0}" +tos: "使用條款" +start: "開始" +home: "首頁" +remoteUserCaution: "遠端使用者的資訊並不完整。" +activity: "動態" +images: "圖片" +birthday: "生日" +yearsOld: "{age}歲" +registeredDate: "註冊日期" +location: "位置" +theme: "外觀主題" +themeForLightMode: "在淺色模式下使用的主題" +themeForDarkMode: "在闇黑模式下使用的主題" +light: "淺色" +dark: "闇黑" +lightThemes: "明亮主題" +darkThemes: "闇黑主題" +syncDeviceDarkMode: "闇黑模式使用裝置設定" +drive: "雲端硬碟" +fileName: "檔案名稱" +selectFile: "選擇檔案" +selectFiles: "選擇檔案" +selectFolder: "選擇資料夾" +selectFolders: "選擇資料夾" +renameFile: "重新命名檔案" +folderName: "資料夾名稱" +createFolder: "創建資料夾" +renameFolder: "重新命名資料夾" +deleteFolder: "刪除資料夾" +addFile: "加入附件" +emptyDrive: "你的雲端硬碟沒有任何東西( ̄▽ ̄)\"" +emptyFolder: "資料夾裡面沒有東西(⊙_⊙;)" +unableToDelete: "無法刪除" +inputNewFileName: "輸入檔案名稱" +inputNewDescription: "請輸入新標題" +inputNewFolderName: "輸入新資料夾的名稱" +circularReferenceFolder: "目標文件夾是您要移動的文件夾的子文件夾。" +hasChildFilesOrFolders: "此資料夾不是空的,無法刪除。" +copyUrl: "複製網址" +rename: "重新命名" +avatar: "大頭貼" +banner: "橫幅" +nsfw: "敏感內容" +whenServerDisconnected: "與伺服器的連接中斷時" +disconnectedFromServer: "與伺服器中斷連線" +reload: "重新整理" +doNothing: "無視" +reloadConfirm: "確定要重新整理嗎?" +watch: "關注" +unwatch: "取消關注" +accept: "接受" +reject: "拒絕" +normal: "正常" +instanceName: "伺服器名稱" +instanceDescription: "伺服器說明" +maintainerName: "管理員名稱" +maintainerEmail: "管理員郵箱" +tosUrl: "服務條款網址" +thisYear: "本年" +thisMonth: "本月" +today: "本日" +dayX: "{day}日" +monthX: "{month}月" +yearX: "{year}年" +pages: "頁面" +enableLocalTimeline: "開啟本地時間軸" +enableGlobalTimeline: "啟用公開時間軸" +disablingTimelinesInfo: "即使您關閉了時間軸功能,管理員和板主仍可訪問所有的時間軸。" +registration: "註冊" +enableRegistration: "開啟新使用者註冊" +invite: "邀請" +driveCapacityPerLocalAccount: "每個本地使用者的雲端容量" +driveCapacityPerRemoteAccount: "每個遠端使用者的雲端容量" +inMb: "以MB為單位" +iconUrl: "圖標網址" +bannerUrl: "橫幅圖像網址" +backgroundImageUrl: "背景圖片的來源網址" +basicInfo: "基本資訊" +pinnedUsers: "置頂的使用者" +pinnedUsersDescription: "在「探索」頁面中使用換行標記想要置頂的使用者。" +pinnedPages: "已釘選的頁面" +pinnedPagesDescription: "輸入要固定至伺服器首頁的頁面路徑,一行一個。" +pinnedClipId: "置頂的摘錄ID" +pinnedNotes: "已置頂的貼文" +hcaptcha: "hCaptcha" +enableHcaptcha: "啟用 hCaptcha" +hcaptchaSiteKey: "網站金鑰" +hcaptchaSecretKey: "金鑰" +recaptcha: "reCAPTCHA" +enableRecaptcha: "啟用 reCAPTCHA" +recaptchaSiteKey: "網站金鑰" +recaptchaSecretKey: "金鑰" +avoidMultiCaptchaConfirm: "使用多種驗證方式可能會造成干擾,您要關閉其他驗證方式嗎?您可以按“取消”保留多種驗證方式。" +antennas: "天線" +manageAntennas: "管理天線" +name: "名稱" +antennaSource: "接收來源" +antennaKeywords: "包含關鍵字" +antennaExcludeKeywords: "排除關鍵字" +antennaKeywordsDescription: "用空格分隔指定AND、用換行符分隔指定OR。" +notifyAntenna: "通知有新貼文" +withFileAntenna: "僅帶有附件的貼文" +enableServiceworker: "開啟 ServiceWorker" +antennaUsersDescription: "指定使用者名稱,一行一個" +caseSensitive: "區分大小寫" +withReplies: "包含回覆" +connectedTo: "您的帳戶已連接到以下社交帳戶" +notesAndReplies: "貼文與回覆" +withFiles: "附件" +silence: "禁言" +silenceConfirm: "確定要禁言此使用者嗎?" +unsilence: "解除禁言" +unsilenceConfirm: "確定要解除禁言嗎?" +popularUsers: "熱門使用者" +recentlyUpdatedUsers: "最近發文的使用者" +recentlyRegisteredUsers: "新加入使用者" +recentlyDiscoveredUsers: "最近發現的使用者" +exploreUsersCount: "有{count}個使用者" +exploreFediverse: "探索聯邦世界" +popularTags: "熱門標籤" +userList: "清單" +about: "資訊" +aboutFirefish: "關於 Firefish" +administrator: "管理員" +token: "權杖" +twoStepAuthentication: "兩階段驗證" +moderator: "板主" +moderation: "管理" +nUsersMentioned: "提到了{n}" +securityKey: "安全金鑰" +securityKeyName: "金鑰名稱" +registerSecurityKey: "註冊安全金鑰" +lastUsed: "上次使用" +unregister: "註銷帳號" +passwordLessLogin: "設置無密碼登入" +resetPassword: "重置密碼" +newPasswordIs: "新密碼為「{password}」" +reduceUiAnimation: "減少介面的動態視覺" +share: "分享" +notFound: "找不到" +notFoundDescription: "找不到與指定URL回應的頁面。" +uploadFolder: "預設上傳資料夾" +cacheClear: "清除快取" +markAsReadAllNotifications: "標記所有通知為已讀" +markAsReadAllUnreadNotes: "標記所有貼文為已讀" +markAsReadAllTalkMessages: "標記所有訊息為已讀" +help: "幫助" +inputMessageHere: "在此輸入訊息" +close: "關閉" +group: "群組" +groups: "群組" +createGroup: "創建群組" +ownedGroups: "擁有的群組" +joinedGroups: "群組成員" +invites: "邀請" +groupName: "群組名稱" +members: "成員" +transfer: "轉讓" +messagingWithUser: "傳送訊息給其他使用者" +messagingWithGroup: "發送訊息至群組" +title: "標題" +text: "文字" +enable: "啟用" +next: "下一步" +retype: "重新輸入" +noteOf: "{user}的貼文" +inviteToGroup: "邀請至群組" +quoteAttached: "引用" +quoteQuestion: "是否要引用?" +noMessagesYet: "沒有訊息" +newMessageExists: "有新的訊息" +onlyOneFileCanBeAttached: "只能加入一個附件" +signinRequired: "請先登入" +invitations: "邀請" +invitationCode: "邀請碼" +checking: "確認中..." +available: "可用的" +unavailable: "不可用的" +usernameInvalidFormat: "可使用大小寫英文字母、數字和底線。" +tooShort: "過短" +tooLong: "過長" +weakPassword: "密碼強度過弱" +normalPassword: "密碼強度普通" +veryStrongPassword: "密碼強度高" +passwordMatched: "密碼一致" +passwordNotMatched: "密碼不一致" +signinWith: "以{x}登錄" +signinFailed: "登入失敗。 請檢查使用者名稱和密碼。" +tapSecurityKey: "點擊安全密鑰" +or: "或者" +language: "語言" +uiLanguage: "介面語言" +groupInvited: "您有新的群組邀請" +aboutX: "關於{x}" +useOsNativeEmojis: "使用OS原生表情符號" +disableDrawer: "不顯示下拉式選單" +youHaveNoGroups: "找不到群組" +joinOrCreateGroup: "請加入現有群組,或創建新群組。" +noHistory: "沒有歷史紀錄" +signinHistory: "登入歷史" +disableAnimatedMfm: "停用MFM動畫" +doing: "正在處理..." +category: "類別" +tags: "標籤" +docSource: "文件來源" +createAccount: "建立帳戶" +existingAccount: "現有帳戶" +regenerate: "再生" +fontSize: "字體大小" +noFollowRequests: "沒有要求跟隨您的申請" +noSentFollowRequests: "沒有待回應的跟隨申請" +openImageInNewTab: "於新分頁中開啟圖片" +dashboard: "儀表板" +local: "本地" +remote: "遠端" +total: "合計" +weekOverWeekChanges: "與上週相比" +dayOverDayChanges: "與前一日相比" +appearance: "外觀" +clientSettings: "用戶端設定" +accountSettings: "帳戶設定" +promotion: "推廣" +promote: "推廣" +numberOfDays: "有效天數" +hideThisNote: "隱藏此貼文" +showFeaturedNotesInTimeline: "在時間軸上顯示熱門推薦" +objectStorage: "Object Storage (物件儲存)" +useObjectStorage: "使用Object Storage" +objectStorageBaseUrl: "根URL" +objectStorageBaseUrlDesc: "引用時的URL。如果你使用的是CDN或反向代理,請指定其網址URL。\n例如S3:“https://.s3.amazonaws.com”,GCS:“https://storage.googleapis.com/”。" +objectStorageBucket: "儲存空間(Bucket)" +objectStorageBucketDesc: "請指定您正在使用的服務的存儲桶名稱。" +objectStoragePrefix: "前綴" +objectStoragePrefixDesc: "它存儲在此前綴目錄下。" +objectStorageEndpoint: "端點(Endpoint)" +objectStorageEndpointDesc: "如要使用AWS S3,請留空。否則請依照你使用的服務商的說明書進行設定,以''或 ':'的形式設定端點(Endpoint)。" +objectStorageRegion: "地域(Region)" +objectStorageRegionDesc: "指定一個分區,例如“xx-east-1”。 如果您使用的服務沒有分區的概念,請留空或填寫“us-east-1”。" +objectStorageUseSSL: "使用SSL" +objectStorageUseSSLDesc: "如果不使用https進行API連接,請關閉" +objectStorageUseProxy: "使用網路代理" +objectStorageUseProxyDesc: "如果不使用代理進行API連接,請關閉" +objectStorageSetPublicRead: "上傳時設定為\"public-read\"" +serverLogs: "伺服器日誌" +deleteAll: "刪除所有記錄" +showFixedPostForm: "於時間軸頁頂顯示「發送貼文」方框" +newNoteRecived: "發現新的貼文" +sounds: "音效" +listen: "聆聽" +none: "無" +showInPage: "在頁面中顯示" +popout: "彈出型窗口" +volume: "音量" +masterVolume: "主音量" +details: "詳細資訊" +chooseEmoji: "選擇您的表情符號" +unableToProcess: "操作無法完成" +recentUsed: "最近使用" +install: "安裝" +uninstall: "解除安裝" +installedApps: "已授權的應用程式" +nothing: "未發現" +installedDate: "安裝時間" +lastUsedDate: "最後上線日期" +state: "狀態" +sort: "排序" +ascendingOrder: "昇冪" +descendingOrder: "降冪" +scratchpad: "AiScript控制台" +scratchpadDescription: "AiScript控制台為AiScript提供了實驗環境。您可以在此編寫、執行和確認代碼與Firefish互動的结果。" +output: "輸出" +script: "腳本" +disablePagesScript: "停用頁面的AiScript腳本" +updateRemoteUser: "更新遠端使用者資訊" +deleteAllFiles: "刪除所有檔案" +deleteAllFilesConfirm: "確定要刪除所有檔案嗎?" +removeAllFollowing: "解除所有追蹤" +removeAllFollowingDescription: "解除{host}所有的追蹤。在伺服器不再存在時執行。" +userSuspended: "此使用者已被停用。" +userSilenced: "該使用者已被禁言。" +yourAccountSuspendedTitle: "帳戶已被凍結" +yourAccountSuspendedDescription: "由於違反了伺服器的服務條款或其他原因,該帳戶已被凍結。 您可以與管理員連繫以了解更多訊息。 請不要創建一個新的帳戶。" +menu: "選單" +divider: "分割線" +addItem: "新增項目" +relays: "中繼" +addRelay: "新增中繼" +inboxUrl: "收件夾URL" +addedRelays: "已加入的中繼" +serviceworkerInfo: "您需要啟用推送通知。" +deletedNote: "已删除的貼文" +invisibleNote: "隱藏的貼文" +enableInfiniteScroll: "啟用自動滾動頁面模式" +visibility: "可見性" +poll: "投票" +useCw: "隱藏內容" +enablePlayer: "打開播放器" +disablePlayer: "關閉播放器" +expandTweet: "展開推文" +themeEditor: "主題編輯器" +description: "描述" +describeFile: "添加標題" +enterFileDescription: "輸入標題" +author: "作者" +leaveConfirm: "有未保存的更改。要放棄嗎?" +manage: "管理" +plugins: "外掛" +preferencesBackups: "備份設定檔" +deck: "多欄模式" +undeck: "取消多欄模式" +useBlurEffectForModal: "在模態框使用模糊效果" +useFullReactionPicker: "使用全尺寸的反應選擇器" +width: "寬度" +height: "高度" +large: "大" +medium: "中" +small: "小" +generateAccessToken: "發行存取權杖" +permission: "權限" +enableAll: "啟用全部" +disableAll: "停用全部" +tokenRequested: "允許存取帳戶" +pluginTokenRequestedDescription: "此外掛將擁有在此設定的權限。" +notificationType: "通知形式" +edit: "編輯" +toEdit: "編輯" +emailServer: "電郵伺服器" +enableEmail: "啟用發送電郵功能" +emailConfigInfo: "用於確認電郵地址及密碼重置" +email: "電子郵件" +emailAddress: "電郵地址" +smtpConfig: "SMTP伺服器設定" +smtpHost: "主機" +smtpPort: "埠" +smtpUser: "使用者名稱" +smtpPass: "密碼" +emptyToDisableSmtpAuth: "留空使用者名稱及密碼以關閉SMTP驗證" +smtpSecure: "在 SMTP 連接中使用隱式 SSL/TLS" +smtpSecureInfo: "如使用STARTTLS,請關閉" +testEmail: "測試郵件發送" +wordMute: "被靜音的文字及語言" +regexpError: "正規表達式錯誤" +regexpErrorDescription: "{tab} 靜音文字的第 {line} 行的正規表達式有錯誤:" +instanceMute: "伺服器的靜音" +userSaysSomething: "{name}說了什麼" +makeActive: "啟用" +display: "檢視" +copy: "複製" +metrics: "指標" +overview: "概覽" +logs: "日誌" +delayed: "延遲" +database: "資料庫" +channel: "頻道" +create: "新增" +notificationSetting: "通知設定" +notificationSettingDesc: "選擇顯示通知的類型。" +useGlobalSetting: "使用全域設定" +useGlobalSettingDesc: "啟用時,將使用帳戶通知設定。停用時,則可以單獨設定。" +other: "其他" +regenerateLoginToken: "重新產生登入權杖" +regenerateLoginTokenDescription: "重新產生用於登入的內部權杖。一般情況下是不需要這樣做的。一旦重產,所有裝置將會被登出。" +setMultipleBySeparatingWithSpace: "您可以使用空格分隔多個項目。" +fileIdOrUrl: "檔案ID或URL" +behavior: "行為" +sample: "範例" +abuseReports: "檢舉" +reportAbuse: "檢舉" +reportAbuseOf: "檢舉{name}" +fillAbuseReportDescription: "請填寫檢舉的詳細理由。可以的話,請附上針對的URL網址。" +abuseReported: "回報已送出。感謝您的報告。" +reporter: "檢舉者" +reporteeOrigin: "檢舉來源" +reporterOrigin: "檢舉者來源" +forwardReport: "將報告轉送給遠端伺服器" +forwardReportIsAnonymous: "在遠端伺服器上看不到您的資訊,顯示的報告者是匿名的系統帳戶。" +send: "發送" +abuseMarkAsResolved: "處理完畢" +openInNewTab: "在新分頁中開啟" +openInSideView: "在側欄中開啟" +defaultNavigationBehaviour: "默認導航" +editTheseSettingsMayBreakAccount: "修改這些設定可能會毀損你的帳戶。" +instanceTicker: "貼文的伺服器資訊" +waitingFor: "等待{x}" +random: "隨機" +system: "系統" +switchUi: "界面" +desktop: "桌面" +clip: "摘錄" +createNew: "新建" +optional: "可選" +createNewClip: "建立新摘錄" +unclip: "解除摘錄" +confirmToUnclipAlreadyClippedNote: "此貼文已包含在摘錄「{name}」中。 你想將貼文從這個摘錄中排除嗎?" +public: "公開" +i18nInfo: "Firefish已經被志願者們翻譯成各種語言版本,如果想要幫忙的話,可以進入{link}幫助翻譯。" +i18nServerInfo: "新客戶端將默認使用 {language}。" +i18nServerChange: "改為 {language}。" +i18nServerSet: "設定新客戶端使用 {language}。" +manageAccessTokens: "管理存取權杖" +accountInfo: "帳戶資訊" +notesCount: "貼文數量" +repliesCount: "回覆數量" +renotesCount: "轉發數量" +repliedCount: "回覆數量" +renotedCount: "轉發次數" +followingCount: "追隨中的使用者數量" +followersCount: "跟隨者數量" +sentReactionsCount: "反應發送次數" +receivedReactionsCount: "反應收到次數" +pollVotesCount: "已統計的投票數" +pollVotedCount: "已投票數" +yes: "確定" +no: "取消" +driveFilesCount: "雲端硬碟檔案數量" +driveUsage: "雲端硬碟使用量" +noCrawle: "拒絕搜尋引擎索引" +noCrawleDescription: "要求外部搜尋引擎不要收錄(索引)你的內容(個人檔案、貼文、頁面等)。" +lockedAccountInfo: "即使你通過了追隨者請求,除非你將貼文的可見性設定為 「追隨者」,否則任何人都能看見你的貼文。" +alwaysMarkSensitive: "默認將圖像/影像標記為敏感內容" +loadRawImages: "以原始圖檔顯示附件圖檔的縮圖" +disableShowingAnimatedImages: "不播放動態圖檔" +verificationEmailSent: "已發送驗證電子郵件。請點擊進入電子郵件中的鏈接完成驗證。" +notSet: "未設定" +emailVerified: "已成功驗證您的電郵" +noteFavoritesCount: "我的最愛貼文的數目" +pageLikesCount: "頁面被按讚次數" +pageLikedCount: "頁面被按讚次數" +contact: "聯絡人" +useSystemFont: "使用系統預設的字型" +clips: "摘錄" +experimentalFeatures: "實驗中的功能" +developer: "開發者" +makeExplorable: "使自己的帳戶能夠在“探索”頁面中顯示" +makeExplorableDescription: "如果關閉,帳戶將不會被顯示在\"探索\"頁面中。" +showGapBetweenNotesInTimeline: "分開顯示時間軸上的貼文" +duplicate: "複製" +left: "左" +center: "置中" +wide: "寬" +narrow: "窄" +reloadToApplySetting: "設定將會在頁面重新載入之後生效。要現在就重載頁面嗎?" +needReloadToApply: "必須重新載入才會生效。" +showTitlebar: "顯示標題列" +clearCache: "清除快取資料" +onlineUsersCount: "{n}人正在線上" +nUsers: "{n}使用者" +nNotes: "{n}貼文" +sendErrorReports: "傳送錯誤報告" +sendErrorReportsDescription: "開啟後,錯誤出現時將會與 Firefish 分享詳細紀錄,對於 Firefish 的開發會有非常大的幫助。\n + 這將包括您的操作系統版本、使用的瀏覽器、您在 Firefish 中的活動等資料。" +myTheme: "我的佈景主題" +backgroundColor: "背景" +accentColor: "重點色彩" +textColor: "文字" +saveAs: "另存為..." +advanced: "進階" +value: "數值" +createdAt: "建立於" +updatedAt: "最後更新" +saveConfirm: "您要儲存變更嗎?" +deleteConfirm: "你確定要刪除嗎?" +invalidValue: "輸入值無效。" +registry: "登錄表" +closeAccount: "停用帳戶" +currentVersion: "目前版本" +latestVersion: "最新版本" +youAreRunningUpToDateClient: "您所使用的用戶端已經是最新的。" +newVersionOfClientAvailable: "新版本的用戶端可用。" +usageAmount: "使用量" +capacity: "容量" +inUse: "已使用" +editCode: "編輯代碼" +apply: "套用" +receiveAnnouncementFromInstance: "接收由本伺服器發出的電郵通知" +emailNotification: "郵件通知" +publish: "發佈" +inChannelSearch: "頻道内搜尋" +useReactionPickerForContextMenu: "點擊右鍵開啟反應工具欄" +typingUsers: "{users}輸入中" +jumpToSpecifiedDate: "跳轉到特定日期" +showingPastTimeline: "顯示過往的時間軸" +clear: "清除" +markAllAsRead: "全部標示為已讀" +goBack: "返回" +unlikeConfirm: "要取消按讚嗎?" +fullView: "全熒幕顯示" +quitFullView: "退出全熒幕顯示" +addDescription: "添加描述" +userPagePinTip: "在貼文的選單中選擇\"置頂\",即可置頂該貼文至您的個人檔案頁面。" +notSpecifiedMentionWarning: "此貼文有未指定的提及" +info: "資訊" +userInfo: "使用者資訊" +unknown: "未知" +onlineStatus: "在線狀態" +hideOnlineStatus: "隱藏在線狀態" +hideOnlineStatusDescription: "隱藏在線狀態後,可能會降低檢索等功能的便利性。" +online: "線上" +active: "最近活躍" +offline: "離線" +notRecommended: "不推薦" +botProtection: "Bot防護" +instanceBlocking: "聯邦管理" +selectAccount: "選擇帳戶" +switchAccount: "切換帳戶" +enabled: "已啟用" +disabled: "已停用" +quickAction: "快捷操作" +user: "使用者" +administration: "管理" +accounts: "帳戶" +switch: "切換" +noMaintainerInformationWarning: "尚未設定管理員資訊。" +noBotProtectionWarning: "尚未設定Bot防護。" +configure: "設定" +postToGallery: "發佈到相簿" +gallery: "相簿" +recentPosts: "最新貼文" +popularPosts: "熱門的貼文" +shareWithNote: "在貼文中分享" +ads: "社群橫幅" +expiration: "期限" +memo: "備忘錄" +priority: "優先級" +high: "高" +middle: "中" +low: "低" +emailNotConfiguredWarning: "沒有設定電郵地址。" +ratio: "%" +previewNoteText: "預覽文本" +customCss: "自定義 CSS" +customCssWarn: "這個設定必須由具備相關知識的人員操作,不當的設定可能导致客戶端無法正常使用。" +global: "公開" +squareAvatars: "以方形顯示非貓使用者的大頭貼" +sent: "發送" +received: "收取" +searchResult: "搜尋結果" +hashtags: "#tag" +troubleshooting: "故障排除" +useBlurEffect: "在 UI 上使用模糊效果" +learnMore: "更多資訊" +misskeyUpdated: "Firefish 更新完成!" +whatIsNew: "顯示更新資訊" +translate: "翻譯" +translatedFrom: "從 {x} 翻譯" +accountDeletionInProgress: "正在刪除帳戶" +usernameInfo: "在伺服器上您的帳戶是唯一的識別名稱。您可以使用字母 (a ~ z, A ~ Z)、數字 (0 ~ 9) 和下底線 (_)。之後帳戶名是不能更改的。" +aiChanMode: "小藍模式" +keepCw: "保持內容警告" +pubSub: "Pub/Sub 帳戶" +lastCommunication: "最近的通信" +resolved: "已解決" +unresolved: "未解決" +breakFollow: "移除追蹤者" +itsOn: "已開啟" +itsOff: "已關閉" +emailRequiredForSignup: "註冊帳戶需要電子郵件地址" +unread: "未讀" +filter: "篩選" +controlPanel: "控制台" +manageAccounts: "管理帳戶" +makeReactionsPublic: "將反應設為公開" +makeReactionsPublicDescription: "將您做過的反應設為公開可見。" +classic: "置中" +muteThread: "將貼文串設為靜音" +unmuteThread: "將貼文串的靜音解除" +ffVisibility: "連接的公開範圍" +ffVisibilityDescription: "您可以設定您的關注/關注者資訊的公開範圍。" +continueThread: "查看更多貼文" +deleteAccountConfirm: "此帳戶將被刪除,是否繼續?" +incorrectPassword: "密碼錯誤。" +voteConfirm: "確定投給「{choice}」?" +hide: "隱藏" +leaveGroup: "離開群組" +leaveGroupConfirm: "確定離開「{name}」?" +useDrawerReactionPickerForMobile: "在手機版使用抽屜顯示" +welcomeBackWithName: "歡迎回來,{name}" +clickToFinishEmailVerification: "點擊 [{ok}] 完成電子郵件地址認證。" +overridedDeviceKind: "裝置類型" +smartphone: "智慧型手機" +tablet: "平板" +auto: "自動" +themeColor: "主題顏色" +size: "大小" +numberOfColumn: "列數" +instanceDefaultLightTheme: "伺服器預設的淺色主題" +instanceDefaultDarkTheme: "伺服器預設的深色主題" +instanceDefaultThemeDescription: "輸入物件形式的主題代碼。" +mutePeriod: "靜音的期限" +indefinitely: "無期限" +tenMinutes: "10分鐘" +oneHour: "1小時" +oneDay: "1天" +oneWeek: "1週" +reflectMayTakeTime: "可能需要一些時間才會出現效果。" +failedToFetchAccountInformation: "取得帳戶資訊失敗" +rateLimitExceeded: "已超過速率限制" +cropImage: "圖片裁剪" +cropImageAsk: "要剪裁圖片嗎?" +file: "檔案" +recentNHours: "過去{n}小時" +recentNDays: "過去{n}天" +noEmailServerWarning: "尚未設定電子郵件伺服器。" +thereIsUnresolvedAbuseReportWarning: "有尚未處理的檢舉。" +recommended: "推薦" +check: "檢查" +driveCapOverrideLabel: "更改這個使用者的雲端硬碟容量上限" +driveCapOverrideCaption: "如果指定0以下的值,就會被取消。" +requireAdminForView: "必須以管理者帳號登入才可以檢視。" +isSystemAccount: "該帳號由系統自動創建並運行。 千千萬萬不要審核、編輯、刪除或以其他方式修改此帳戶,否則可能會破壞您的伺服器。" +typeToConfirm: "要執行這項操作,請輸入 {x}" +deleteAccount: "刪除帳號" +document: "文件" +numberOfPageCache: "快取頁面數" +numberOfPageCacheDescription: "增加數量會提高便利性,但也會增加負荷與記憶體使用量。" +logoutConfirm: "確定要登出嗎?" +lastActiveDate: "上次使用日期及時間" +statusbar: "狀態列" +pleaseSelect: "請選擇" +reverse: "翻轉" +colored: "彩色" +refreshInterval: "更新間隔 " +label: "標籤" +type: "類型" +speed: "速度" +slow: "慢" +fast: "快" +sensitiveMediaDetection: "敏感性媒體的檢測" +localOnly: "僅限本地" +remoteOnly: "僅限遠端" +failedToUpload: "上傳失敗" +cannotUploadBecauseInappropriate: "由於判定可能包含不適當的內容,因此無法上傳。" +cannotUploadBecauseNoFreeSpace: "由於雲端硬碟沒有可用空間,因此無法上傳。" +beta: "Beta" +enableAutoSensitive: "自動NSFW判定" +enableAutoSensitiveDescription: "如可用,請利用機器學習在媒體上自動設置 NSFW 旗標。 即使關閉此功能,依伺服器而定也可能會自動設置。" +activeEmailValidationDescription: "強化驗證使用者的電子郵件地址,包含判斷是否為免洗信箱,以及是否可以實際通訊。 停用此選項時,只會檢查是否符合電子郵件地址的形式。" +navbar: "導覽列" +shuffle: "隨機" +account: "帳戶" +move: "移動" +customKaTeXMacro: "自訂KaTeX巨集" +customKaTeXMacroDescription: "使用巨集來輕鬆輸入數學表達式吧!巨集的用法與 LaTeX 中的命令定義相同。你可以使用 \\newcommand{\\ + name}{content} 或 \\newcommand{\\name}[number of arguments]{content} 來輸入數學表達式。舉例來說,\\ + newcommand{\\add}[2]{#1 + #2} 會將 \\add{3}{foo} 展開為 3 + foo。巨集名稱除了可用大括號 {} 括起來之外,也可使用小括號 + () 和中括號 [],但使用於巨集參數的括號會有所變更。每行只能定義一個巨集,巨集中間無法換行,無效的行將被忽略。只支援簡單字串的替換功能,不支援條件分歧的進階語法。" +enableCustomKaTeXMacro: "啟用自訂 KaTeX 巨集" +_sensitiveMediaDetection: + description: "您可以使用機器學習自動檢測敏感媒體並將其用於審核。 伺服器的負荷會稍微增加。" + sensitivity: "檢測敏感度" + sensitivityDescription: "敏感度低時,誤檢測(偽陽性)會減少。敏感度高時,漏檢(偽陰性)會減少。" + setSensitiveFlagAutomatically: "設定 NSFW 旗標" + setSensitiveFlagAutomaticallyDescription: "即使將此設定關閉,判定結果也會保留在內部。" + analyzeVideos: "啟用影片分析" + analyzeVideosDescription: "除了靜止影像以外,也分析影片。伺服器的負荷會稍微增加。" +_emailUnavailable: + used: "已經在使用中" + format: "格式無效" + disposable: "不是永久可用的地址" + mx: "郵件伺服器不正確" + smtp: "郵件伺服器沒有應答" +_ffVisibility: + public: "發佈" + followers: "僅追隨者可見" + private: "私密" +_signup: + almostThere: "即將完成" + emailAddressInfo: "請輸入您所使用的電子郵件地址。電子郵件地址不會被公開。" + emailSent: "已將確認郵件發送至您輸入的電子郵件地址 ({email})。請開啟電子郵件中的連結以完成帳戶創建。" +_accountDelete: + accountDelete: "刪除帳戶" + mayTakeTime: "刪除帳戶的處理負荷較大,如果帳戶產生的內容數量上傳的檔案數量較多的話,就需要花费一段時間才能完成。" + sendEmail: "帳戶删除完成後,將向註冊地電子郵件地址發送通知。" + requestAccountDelete: "刪除帳戶請求" + started: "已開始刪除作業。" + inProgress: "正在刪除" +_ad: + back: "返回" + reduceFrequencyOfThisAd: "降低此橫幅的頻率" + adsBy: 社群橫幅(作者:{by}) +_forgotPassword: + enterEmail: "請輸入您的帳戶註冊的電子郵件地址。 密碼重置連結將被發送到該電子郵件地址。" + ifNoEmail: "如果您還沒有註冊您的電子郵件地址,請聯繫管理員。" + contactAdmin: "此伺服器不支援使用電郵,請聯繫您的管理員重置你的密碼。" +_gallery: + my: "我的貼文" + liked: "喜歡的貼文" + like: "讚" + unlike: "收回喜歡" +_email: + _follow: + title: "您有新的追隨者" + _receiveFollowRequest: + title: "收到追隨請求" +_plugin: + install: "安裝外掛組件" + installWarn: "請不要安裝來源不明的外掛組件。" + manage: "管理外掛" +_preferencesBackups: + list: "已備份的設定檔" + saveNew: "另存新檔" + loadFile: "讀取檔案" + apply: "套用在此裝置" + save: "覆蓋存檔" + inputName: "輸入備份檔名稱" + cannotSave: "無法儲存" + nameAlreadyExists: "備份檔名稱「{name}」已經存在。請指定不同的名稱。" + applyConfirm: "將備份檔「{name}」套用在現在的裝置嗎?現在的裝置設定將會消失。" + saveConfirm: "要覆蓋存檔{name}嗎?" + deleteConfirm: "要刪除{name}嗎?" + renameConfirm: "要將「{old}」變更為「{new}」嗎?" + noBackups: "沒有備份檔。您可以用「另存新檔」將現在的客戶端設定儲存在伺服器上。" + createdAt: "建立日期:{date} {time}" + updatedAt: "更新日期:{date} {time}" + cannotLoad: "無法讀取" + invalidFile: "無效的檔案格式" +_registry: + scope: "範圍" + key: "機碼" + keys: "機碼" + domain: "域" + createKey: "新增機碼" +_aboutFirefish: + about: "Firefish是由ThatOneCalculator自2022年起開發的Misskey分支。" + contributors: "主要貢獻者" + allContributors: "全體貢獻人員" + source: "原始碼" + translation: "翻譯Firefish" + donate: "贊助Firefish" + donateTitle: 覺得 Firefish 棒嗎? + pleaseDonateToFirefish: 請考慮向 Firefish 贊助以支持其發展。 + pleaseDonateToHost: 還請考慮捐贈給您在使用的伺服器 {host},以支援龐大的運營成本。 + donateHost: 贊助給 {host} + misskeyContributors: Misskey的貢獻者 +_nsfw: + respect: "隱藏敏感內容" + ignore: "不隱藏敏感內容" + force: "隱藏所有內容" +_mfm: + cheatSheet: "MFM代碼小抄" + intro: "MFM是Misskey、Firefish、Akkoma等專用的標記語言,可以在各個位置使用。 您可以這裏看到MFM可用語法列表。" + dummy: "Firefish拓展了Fediverse的世界" + mention: "提及" + mentionDescription: "透過 @+使用者名稱 來標示特定使用者。" + hashtag: "#tag" + hashtagDescription: "可以使用\"#\"符號後加文字表示話題標籤。" + url: "URL" + urlDescription: "可以展示URL位址。" + link: "鏈接" + linkDescription: "您可以將特定範圍的文章與 URL 相關聯。" + bold: "粗體" + boldDescription: "可以將文字顯示为粗體来強調。" + small: "縮小" + smallDescription: "可以使內容文字變小、變淡。" + center: "置中" + centerDescription: "可以將內容置中顯示。" + inlineCode: "程式碼(内嵌)" + inlineCodeDescription: "在行內用高亮度顯示,例如程式碼語法。" + blockCode: "程式碼(區塊)" + blockCodeDescription: "在區塊中用高亮度顯示,例如複數行的程式碼語法。" + inlineMath: "數學公式(內嵌)" + inlineMathDescription: "顯示內嵌的KaTeX數學公式" + blockMath: "數學公式(方塊)" + blockMathDescription: "以區塊顯示KaTeX數學式" + quote: "引用" + quoteDescription: "可以用來表示引用的内容。" + emoji: "自訂表情符號" + emojiDescription: "您可以通過將自定義表情符號名稱括在冒號中來顯示自定義表情符號。" + search: "搜尋" + searchDescription: "顯示含有指定文字的搜尋欄。" + flip: "翻轉" + flipDescription: "將內容上下或左右翻轉。" + jelly: "動畫(果凍)" + jellyDescription: "顯示果凍一樣的動畫效果。" + tada: "動畫(鏘~)" + tadaDescription: "顯示「鏘~!」這種感覺的動畫效果。" + jump: "動畫(跳動)" + jumpDescription: "顯示跳動的動畫效果。" + bounce: "動畫(反彈)" + bounceDescription: "顯示有彈性的動畫效果。" + shake: "動畫(搖晃)" + shakeDescription: "顯示顫抖的動畫效果。" + twitch: "動畫(顫抖)" + twitchDescription: "顯示強烈顫抖的動畫效果。" + spin: "動畫(旋轉)" + spinDescription: "顯示旋轉的動畫效果。" + x2: "大" + x2Description: "放大顯示內容。" + x3: "較大" + x3Description: "放大顯示內容。" + x4: "最大" + x4Description: "將顯示內容放至最大。" + blur: "模糊" + blurDescription: "產生模糊效果。将游標放在上面即可將内容顯示出來。" + font: "字型" + fontDescription: "您可以設定顯示內容的字型。" + rainbow: "彩虹" + rainbowDescription: "用彩虹色來顯示內容。" + sparkle: "閃閃發光" + sparkleDescription: "添加閃閃發光的粒子效果。" + rotate: "旋轉" + rotateDescription: "以指定的角度旋轉。" + plain: "簡潔" + plainDescription: "停用全部的內部語法。" + play: 播放 MFM + stop: 暫停MFM + warn: MFM 可能包含快速移動或顯眼的動畫 + position: 位置 + alwaysPlay: 自動播放所有MFM動畫 + positionDescription: 按指定數量移動內容。 + advancedDescription: 如果停用,僅顯示基礎MFM及正在播放的MFM動畫 + advanced: 進階MFM + fade: 淡出 + foreground: 文字顏色 + crop: 裁切 + scale: 縮放 + scaleDescription: 按指定數量縮放內容。 + fadeDescription: 將內容淡入淡出。 + background: 背景顏色 + backgroundDescription: 改變背景顏色。 + cropDescription: 裁切內容。 + foregroundDescription: 改變文字顏色。 +_instanceTicker: + none: "隱藏" + remote: "向遠端使用者顯示" + always: "總是顯示" +_serverDisconnectedBehavior: + reload: "自動重載" + dialog: "彈出式警告" + quiet: "非侵入式警告" + nothing: 無 +_channel: + create: "建立頻道" + edit: "編輯頻道" + setBanner: "設定橫幅圖像" + removeBanner: "移除橫幅圖像" + featured: "熱門貼文" + owned: "管理中" + following: "關注中" + usersCount: "有{n}人參與" + notesCount: "有{n}個貼文" + nameAndDescription: "名稱與說明" + nameOnly: "僅名稱" +_menuDisplay: + sideFull: "側向" + sideIcon: "側向(圖示)" + top: "頂部" + hide: "隱藏" +_wordMute: + muteWords: "加入靜音文字" + muteWordsDescription: "用空格分隔指定AND,用換行分隔指定OR。" + muteWordsDescription2: "將關鍵字用斜線括起來表示正規表達式。" + softDescription: "隱藏時間軸中指定條件的貼文。" + hardDescription: "符合指定條件的貼文將不添加到時間軸。 即使您更改條件,未被添加的貼文也會被排除在外。" + soft: "軟性靜音" + hard: "硬性靜音" + mutedNotes: "已靜音的貼文" + muteLangsDescription2: '使用語言代碼。例: en, fr, ja, zh.' + lang: 語言 + langDescription: 將指定語言的貼文從時間軸中隱藏。 + muteLangs: 被靜音的語言 + muteLangsDescription: OR條件以空格或換行進行分隔。 + mutePatterns: 靜音表達式 +_instanceMute: + instanceMuteDescription: "將設定的伺服器的所有貼文及轉發靜音。對被靜音伺服器的使用者的回覆也將被靜音。" + instanceMuteDescription2: "設定時以換行進行分隔" + title: "被設定的伺服器,貼文將被隱藏。" + heading: "將會被靜音的伺服器" +_theme: + explore: "取得佈景主題" + install: "安裝佈景主題" + manage: "佈景主題管理員" + code: "主題代碼" + description: "描述" + installed: "{name}已安裝" + installedThemes: "已經安裝的主題" + builtinThemes: "標準主題" + alreadyInstalled: "此主題已經安裝" + invalid: "主題格式錯誤" + make: "製作主題" + base: "基於" + addConstant: "添加常數" + constant: "常數" + defaultValue: "預設值" + color: "顏色" + refProp: "查看屬性" + refConst: "查看常數" + key: "按鍵" + func: "函数" + funcKind: "功能類型" + argument: "參數" + basedProp: "要基於的屬性的名稱" + alpha: "透明度" + darken: "暗度" + lighten: "亮度" + inputConstantName: "請輸入常數的名稱" + importInfo: "您可以在此貼上主題代碼,將其匯入編輯器中" + deleteConstantConfirm: "確定要删除常數{const}嗎?" + keys: + accent: "重點色彩" + bg: "背景" + fg: "文本" + focus: "聚焦" + indicator: "指標" + panel: "面板" + shadow: "陰影" + header: "標題" + navBg: "側邊欄的背景" + navFg: "側邊欄的文字" + navHoverFg: "側邊欄文字(懸停)" + navActive: "側邊欄文本 (活動)" + navIndicator: "側邊欄指示符" + link: "鏈接" + hashtag: "#tag" + mention: "提到" + mentionMe: "提到了我" + renote: "轉發貼文" + modalBg: "對話框背景" + divider: "分割線" + scrollbarHandle: "捲動條" + scrollbarHandleHover: "捲動條 (漂浮)" + dateLabelFg: "日期標籤文字" + infoBg: "資訊背景" + infoFg: "資訊內容" + infoWarnBg: "警告背景" + infoWarnFg: "警告字元" + cwBg: "CW 按鈕背景" + cwFg: "CW 按鈕文本" + cwHoverBg: "CW 按鈕背景 (漂浮)" + toastBg: "通知背景" + toastFg: "通知文本" + buttonBg: "按鈕背景" + buttonHoverBg: "按鈕背景 (漂浮)" + inputBorder: "輸入框邊框" + listItemHoverBg: "列表物品背景 (漂浮)" + driveFolderBg: "雲端硬碟文件夾背景" + wallpaperOverlay: "壁紙覆蓋層" + badge: "獎章" + messageBg: "私訊背景" + accentDarken: "強調色(偏暗)" + accentLighten: "強調色(明亮)" + fgHighlighted: "高亮顯示文本" +_sfx: + note: "貼文" + noteMy: "我的貼文" + notification: "通知" + chat: "傳送訊息" + chatBg: "聊天背景" + antenna: "天線接收" + channel: "頻道通知" +_ago: + future: "未來" + justNow: "剛剛" + secondsAgo: "{n}秒前" + minutesAgo: "{n}分鐘前" + hoursAgo: "{n}小時前" + daysAgo: "{n}天前" + weeksAgo: "{n}周前" + monthsAgo: "{n}個月前" + yearsAgo: "{n}年前" +_time: + second: "秒" + minute: "分鐘" + hour: "小時" + day: "日" +_tutorial: + title: "如何使用Firefish" + step1_1: "歡迎!" + step1_2: "讓我們把你安排好。你很快就會啟動並運行!" + step2_1: "首先,請完成你的個人資料。" + step2_2: "通過提供一些關於你自己的資料,其他人會更容易了解他們是否想看到你的貼文或關注你。" + step3_1: "現在是時候追隨一些人了!" + step3_2: "你的主頁和社交時間軸是基於你所追蹤的人,所以試著先追蹤幾個帳戶。\n點擊個人資料右上角的加號按鈕就可以關注它。" + step4_1: "讓我們出去找你。" + step4_2: "作為第一則貼文,有些人喜歡發 {introduction} 或單純發一個 \"hello world!\"" + step5_1: "時間軸,到處都是時間軸!" + step5_2: "您的伺服器已啟用了{timelines}個時間軸。" + step5_3: "首頁 {icon} 時間軸是顯示你追蹤的帳號的貼文。" + step5_4: "本地{icon}時間軸是你可以看到此伺服器上所有使用者的貼文的時間軸。" + step5_5: "社交 {icon} 時間軸是你的 首頁時間軸 和 本地時間軸 的結合體。" + step5_6: "推薦 {icon} 時間軸是顯示你的伺服器管理員推薦的貼文。" + step5_7: "全球 {icon} 時間軸是顯示來自所有其他連接的伺服器的貼文。" + step6_1: "那麼,這裡是什麼地方?" + step6_2: "你不只是加入Firefish。你已經加入了Fediverse的一個門戶,這是一個由成千上萬台服務器組成的互聯網絡。" + step6_3: "每個服務器也有不同,而並不是所有的服務器都運行Firefish。但這個服務器確實是運行Firefish的! 你可能會覺得有點複雜,但你很快就會明白的。" + step6_4: "現在開始探索吧!" +_2fa: + alreadyRegistered: "你已註冊過一個雙重認證的裝置。" + registerTOTP: "註冊裝置" + registerSecurityKey: "註冊鍵" + step1: "首先,在您的設備上安裝二步驗證程式,例如{a}或{b}。" + step2: "然後,掃描螢幕上的QR code。" + step2Url: "在桌面版應用中,請輸入以下的URL:" + step3: "輸入您的App提供的權杖以完成設定。" + step4: "從現在開始,任何登入操作都將要求您提供權杖。" + securityKeyInfo: "您可以設定使用支援FIDO2的硬體安全鎖、終端設備的指纹認證或者PIN碼來登入。" + removeKey: 移除安全金鑰 + removeKeyConfirm: 真的要刪掉 {name} 嗎? + chromePasskeyNotSupported: 目前不支持 Chrome 密鑰。 + securityKeyName: 取一個金鑰的名字 + tapSecurityKey: 請按照您的瀏覽器註冊安全金鑰或密碼 + token: 兩步驟驗證金鑰 + step3Title: 輸入驗證碼 + securityKeyNotSupported: 您使用的瀏覧器不支援安全金鑰(Security key)。 + step2Click: 點擊此二維條碼以註冊2FA至你的安全密鑰或手機的Authenticator應用程式。 +_permissions: + "read:account": "查看我的帳戶資訊" + "write:account": "更改我的帳戶資訊" + "read:blocks": "查看封鎖的使用者名單" + "write:blocks": "編輯封鎖的使用者名單" + "read:drive": "存取雲端硬碟" + "write:drive": "編輯雲端硬碟的檔案" + "read:favorites": "瀏覽我的最愛" + "write:favorites": "編輯我的最愛列表" + "read:following": "查看追隨中的使用者資訊" + "write:following": "追隨/解除追隨" + "read:messaging": "顯示訊息" + "write:messaging": "撰寫或刪除私人訊息" + "read:mutes": "顯示已靜音列表" + "write:mutes": "編輯已靜音列表" + "write:notes": "撰寫或刪除貼文" + "read:notifications": "查看通知" + "write:notifications": "編輯通知" + "read:reactions": "查看反應" + "write:reactions": "編輯反應" + "write:votes": "投票" + "read:pages": "顯示頁面" + "write:pages": "編輯頁面" + "read:page-likes": "顯示已按讚的頁面" + "write:page-likes": "編輯頁面上喜歡" + "read:user-groups": "顯示使用者群組" + "write:user-groups": "編輯使用者群組" + "read:channels": "已查看的頻道" + "write:channels": "編輯頻道" + "read:gallery": "瀏覽圖庫" + "write:gallery": "操作圖庫" + "read:gallery-likes": "讀取喜歡的圖片" + "write:gallery-likes": "操作喜歡的圖片" +_auth: + shareAccess: "要授權「“{name}”」存取您的帳戶嗎?" + shareAccessAsk: "您確定要授權這個應用程式使用您的帳戶嗎?" + permissionAsk: "此應用程式需要以下權限:" + pleaseGoBack: "請返回至應用程式" + callback: "回到應用程式" + denied: "拒絕訪問" + copyAsk: 請將以下授權代碼貼上到應用程式中: + allPermissions: 完全帳戶訪問許可權 +_antennaSources: + all: "全部貼文" + homeTimeline: "來自已追隨使用者的貼文" + users: "來自特定使用者的貼文" + userList: "來自特定清單中的貼文" + userGroup: "來自特定群組的貼文" + instances: 伺服器上所有使用者的貼文 +_weekday: + sunday: "週日" + monday: "週一" + tuesday: "週二" + wednesday: "週三" + thursday: "週四" + friday: "週五" + saturday: "週六" +_widgets: + memo: "備忘錄" + notifications: "通知" + timeline: "時間軸" + calendar: "行事曆" + trends: "發燒貼文" + clock: "時鐘" + rss: "RSS 閱讀器" + rssTicker: "RSS 跑馬燈" + activity: "動態" + photos: "照片" + digitalClock: "電子時鐘" + unixClock: "UNIX時間" + federation: "聯邦宇宙" + instanceCloud: "伺服器雲" + postForm: "發文介面" + slideshow: "幻燈片" + button: "按鈕" + onlineUsers: "線上的使用者" + jobQueue: "佇列" + serverMetric: "伺服器指標" + aiscript: "AiScript 控制台" + aichan: "小藍" + serverInfo: 伺服器資訊 + userList: 使用者列表 + _userList: + chooseList: 選擇一個清單 +_cw: + hide: "隱藏" + show: "瀏覽更多" + chars: "{count}字元" + files: "{count} 個檔案" +_poll: + noOnlyOneChoice: "至少需要兩個選項" + choiceN: "選項{n}" + noMore: "沒辦法再添加選項了" + canMultipleVote: "允許複選" + expiration: "期限" + infinite: "無期限" + at: "結束時間" + after: "在指定時間後結束..." + deadlineDate: "截止日期" + deadlineTime: "小時" + duration: "時長" + votesCount: "{n}票" + totalVotes: "總計{n}票" + vote: "投票" + showResult: "顯示結果" + voted: "已投票" + closed: "已結束" + remainingDays: "{d}天{h}小時後結束" + remainingHours: "{h}小時{m}分後結束" + remainingMinutes: "{m}分{s}秒後結束" + remainingSeconds: "{s}秒後截止" +_visibility: + public: "公開" + publicDescription: "發佈至公開時間軸" + home: "不在主頁顯示" + homeDescription: "僅發送至首頁的時間軸" + followers: "追隨者" + followersDescription: "僅發佈至關注者" + specified: "指定使用者" + specifiedDescription: "僅發送至指定使用者" + localOnly: "僅限本地" + localOnlyDescription: "對遠端使用者隱藏" +_postForm: + replyPlaceholder: "回覆此貼文..." + quotePlaceholder: "引用此貼文..." + channelPlaceholder: "發佈到頻道..." + _placeholders: + a: "今天過得如何?" + b: "有什麼新鮮事嗎?" + c: "有什麼新鮮想法嗎?" + d: "想要發布些什麼嗎?" + e: "寫些什麼吧..." + f: "期待你發佈的內容..." +_profile: + name: "名稱" + username: "使用者名稱" + description: "關於我" + youCanIncludeHashtags: "你也可以在「關於我」中加上 #tag。" + metadata: "進階資訊" + metadataEdit: "編輯進階資訊" + metadataDescription: "可以在個人資料中以表格形式顯示其他資訊。您可以添加帶有 {rel} 的 {a} 標籤或 {l} 標籤來驗證您個人資料上的鏈接!" + metadataLabel: "標籤" + metadataContent: "内容" + changeAvatar: "更換大頭貼" + changeBanner: "變更橫幅圖像" + locationDescription: 如果你先輸入你所在的城市,則會向其他使用者顯示你的當地時間。 +_exportOrImport: + allNotes: "所有貼文" + followingList: "追隨中" + muteList: "靜音" + blockingList: "封鎖" + userLists: "清單" + excludeMutingUsers: "排除被靜音的使用者" + excludeInactiveUsers: "排除不活躍帳戶" +_charts: + federation: "站台聯邦" + apRequest: "請求" + usersIncDec: "使用者増減" + usersTotal: "使用者合共" + activeUsers: "活躍使用者" + notesIncDec: "貼文増減" + localNotesIncDec: "本地貼文増減" + remoteNotesIncDec: "遠端貼文數目增减" + notesTotal: "貼文合共" + filesIncDec: "檔案増減" + filesTotal: "累計檔案" + storageUsageIncDec: "儲存空間的増減" + storageUsageTotal: "已使用的儲存空間合共" +_instanceCharts: + requests: "請求" + users: "使用者増減" + usersTotal: "總計使用者" + notes: "貼文増減" + notesTotal: "累計貼文" + ff: "追隨/追隨者的増減 " + ffTotal: "追隨/追隨者累計" + cacheSize: "增加或減少快取用量" + cacheSizeTotal: "快取大小總計" + files: "檔案數量的増減" + filesTotal: "檔案數量總計" +_timelines: + home: "首頁" + local: "本地" + social: "社交" + global: "公開" + recommended: 推薦 +_pages: + newPage: "建立頁面" + editPage: "編輯頁面" + readPage: "正檢視原始碼" + created: "頁面已建立" + updated: "頁面已更新" + deleted: "頁面已被刪除" + pageSetting: "頁面設定" + nameAlreadyExists: "指定的頁面URL已經存在" + invalidNameTitle: "指定的頁面URL無效" + invalidNameText: "請確定是否為非空白" + editThisPage: "編輯此頁面" + viewSource: "檢視原始碼" + viewPage: "顯示頁面" + like: "喜歡" + unlike: "收回喜歡" + my: "我的頁面" + liked: "已喜歡的頁面" + featured: "人氣" + inspector: "面板檢查" + contents: "內容" + content: "頁面方塊" + variables: "變數" + title: "標題" + url: "頁面網址" + summary: "頁面摘要" + alignCenter: "置中" + hideTitleWhenPinned: "被置頂於個人資料時隱藏頁面標題" + font: "字型" + fontSerif: "襯線體" + fontSansSerif: "無襯線體" + eyeCatchingImageSet: "設定封面影像" + eyeCatchingImageRemove: "刪除封面影像" + chooseBlock: "新增方塊" + selectType: "選擇類型" + enterVariableName: "請輸入變數名稱" + variableNameIsAlreadyUsed: "變數名稱已被佔用" + contentBlocks: "內容" + inputBlocks: "輸入" + specialBlocks: "特殊" + blocks: + text: "字串" + textarea: "字串區域" + section: "區段" + image: "圖片" + button: "按鈕" + if: "如果" + _if: + variable: "變數" + post: "發佈窗口" + _post: + text: "内容" + attachCanvasImage: "附加相簿圖像" + canvasId: "畫布ID" + textInput: "插入字串" + _textInput: + name: "變數名稱" + text: "標題" + default: "預設值" + textareaInput: "多行文字输入" + _textareaInput: + name: "變數名稱" + text: "標題" + default: "預設值" + numberInput: "輸入數值" + _numberInput: + name: "變數名稱" + text: "標題" + default: "預設值" + canvas: "畫布" + _canvas: + id: "畫布ID" + width: "寬度" + height: "高度" + note: "嵌式貼文" + _note: + id: "貼文ID" + idDescription: "您也可以粘貼筆記 URL 並進行設置。" + detailed: "顯示詳細內容" + switch: "開關" + _switch: + name: "變數名稱" + text: "標題" + default: "預設值" + counter: "計數器" + _counter: + name: "變數名稱" + text: "標題" + inc: "増加値" + _button: + text: "標題" + colored: "彩色" + action: "按下按鈕後發生的行為" + _action: + dialog: "顯示對話框" + _dialog: + content: "内容" + resetRandom: "重設亂數" + pushEvent: "發送事件" + _pushEvent: + event: "事件名稱" + message: "按下時顯示的消息" + variable: "要發送的變數" + no-variable: "沒有" + callAiScript: "調用AiScript" + _callAiScript: + functionName: "函數名稱" + radioButton: "選項" + _radioButton: + name: "變數名稱" + title: "標題" + values: "由換行符分隔的選項" + default: "預設值" + script: + categories: + flow: "控制" + logical: "邏輯運算" + operation: "計算" + comparison: "對比" + random: "隨機" + value: "數值" + fn: "函数" + text: "文本操作" + convert: "轉換" + list: "清單" + blocks: + text: "字串" + multiLineText: "字串(多行)" + textList: "字串串列" + _textList: + info: "請分開每個換行符" + strLen: "字串長度" + _strLen: + arg1: "字串" + strPick: "提取字元" + _strPick: + arg1: "字串" + arg2: "字元位置" + strReplace: "替換字串" + _strReplace: + arg1: "字串" + arg2: "替換前" + arg3: "替換後" + strReverse: "倒轉字串" + _strReverse: + arg1: "字串" + join: "合併字串" + _join: + arg1: "清單" + arg2: "分隔字元" + add: "加" + _add: + arg1: "A" + arg2: "B" + subtract: "减去" + _subtract: + arg1: "A" + arg2: "B" + multiply: "乘" + _multiply: + arg1: "A" + arg2: "B" + divide: "除" + _divide: + arg1: "A" + arg2: "B" + mod: "餘數" + _mod: + arg1: "A" + arg2: "B" + round: "四舍五入" + _round: + arg1: "數值" + eq: "A和B相等" + _eq: + arg1: "A" + arg2: "B" + notEq: "A和B不等" + _notEq: + arg1: "A" + arg2: "B" + and: "A和B" + _and: + arg1: "A" + arg2: "B" + or: "A或B" + _or: + arg1: "A" + arg2: "B" + lt: "< A小於B" + _lt: + arg1: "A" + arg2: "B" + gt: "> A大於B" + _gt: + arg1: "A" + arg2: "B" + ltEq: "<= A小於或等於B" + _ltEq: + arg1: "A" + arg2: "B" + gtEq: ">= A大於或等於B" + _gtEq: + arg1: "A" + arg2: "B" + if: "分支" + _if: + arg1: "如果" + arg2: "如果" + arg3: "除此以外" + not: "否" + _not: + arg1: "否" + random: "隨機" + _random: + arg1: "機率" + rannum: "亂數" + _rannum: + arg1: "下限" + arg2: "上限" + randomPick: "從列表中隨機選擇" + _randomPick: + arg1: "清單" + dailyRandom: "隨機(使用者每日變化 )" + _dailyRandom: + arg1: "機率" + dailyRannum: "亂數(使用者每日變化)" + _dailyRannum: + arg1: "下限" + arg2: "上限" + dailyRandomPick: "從列表中隨機選擇(使用者每日變化 )" + _dailyRandomPick: + arg1: "清單" + seedRandom: "隨機抽選種子碼" + _seedRandom: + arg1: "種子" + arg2: "機率" + seedRannum: "亂數 (種子)" + _seedRannum: + arg1: "種子" + arg2: "最小值" + arg3: "最大值" + seedRandomPick: "從列表中隨機選擇 (種子)" + _seedRandomPick: + arg1: "種子" + arg2: "清單" + DRPWPM: "从機率列表中隨機選擇(每個用户每天)" + _DRPWPM: + arg1: "字串串列" + pick: "從清單中選取" + _pick: + arg1: "清單" + arg2: "位置" + listLen: "取得清單長度" + _listLen: + arg1: "清單" + number: "數值" + stringToNumber: "將字串轉換至數値" + _stringToNumber: + arg1: "字串" + numberToString: "將數値轉換至字串" + _numberToString: + arg1: "數值" + splitStrByLine: "於換行時分割字串" + _splitStrByLine: + arg1: "字串" + ref: "變數" + aiScriptVar: "AiScript的變數" + fn: "函数" + _fn: + slots: "欄位" + slots-info: "用換行符分隔每個欄位" + arg1: "輸出" + for: "重複" + _for: + arg1: "重複次數" + arg2: "處理" + typeError: "槽參數{slot}需要傳入“{expect}”,但是實際傳入為“{actual}”!" + thereIsEmptySlot: "參數{slot}是空的!" + types: + string: "字串" + number: "数值" + boolean: "標記" + array: "清單" + stringArray: "字串列表" + emptySlot: "空欄位" + enviromentVariables: "環境變數" + pageVariables: "頁面元素" + argVariables: "輸入欄位" +_relayStatus: + requesting: "等待核准" + accepted: "已通過核准" + rejected: "已拒絕" +_notification: + fileUploaded: "上傳檔案成功" + youGotMention: "{name}提及到您" + youGotReply: "{name}回覆了您" + youGotQuote: "{name}引用了您" + youRenoted: "{name} 轉發了你的貼文" + youGotPoll: "{name}已投票" + youGotMessagingMessageFromUser: "{name}發送給您的訊息" + youGotMessagingMessageFromGroup: "{name}發送給您的訊息" + youWereFollowed: "您有新的追隨者" + youReceivedFollowRequest: "您有新的追隨請求" + yourFollowRequestAccepted: "您的追隨請求已通過" + youWereInvitedToGroup: "您有新的群組邀請" + pollEnded: "問卷調查已產生結果" + emptyPushNotificationMessage: "推送通知已更新" + _types: + all: "全部" + follow: "追隨中" + mention: "提及" + reply: "回覆" + renote: "轉發貼文" + quote: "引用" + reaction: "反應" + pollVote: "統計已投票數" + pollEnded: "問卷調查結束" + receiveFollowRequest: "已收到追隨請求" + followRequestAccepted: "追隨請求已接受" + groupInvited: "群組加入邀請" + app: "應用程式通知" + _actions: + followBack: "回關" + reply: "回覆" + renote: "轉發" + reacted: 對您的貼文做出了反應 + renoted: 轉發了您的貼文 + voted: 投了票 +_deck: + alwaysShowMainColumn: "總是顯示主欄" + columnAlign: "對齊欄位" + addColumn: "新增欄位" + configureColumn: "欄位的設定" + swapLeft: "向左移動" + swapRight: "向右移動" + swapUp: "往上移動" + swapDown: "往下移動" + stackLeft: "向左折疊" + popRight: "向右彈出" + profile: "工作區" + newProfile: "新增工作區" + renameProfile: "重新命名工作區" + deleteProfile: "刪除工作區" + nameAlreadyExists: "該工作區名稱已經存在。" + introduction: "組合欄位來製作屬於自己的介面吧!" + introduction2: "您可以隨時透過按畫面右方的 + 來添加欄位。" + widgetsIntroduction: "請從欄位的選單中,選擇「編輯小工具」來添加小工具。" + _columns: + main: "主列" + widgets: "小工具" + notifications: "通知" + tl: "時間軸" + antenna: "天線" + list: "清單" + mentions: "提及" + direct: "指定使用者" + channel: 頻道 +secureMode: 安全模式(授權獲取) +instanceSecurity: 伺服器安全性 +privateMode: 私人模式 +allowedInstances: 列入允許名單的伺服器 +secureModeInfo: 當從其他伺服器請求時,不要在沒有證據的情況下發回。 +_messaging: + dms: 私訊 + groups: 群組 +manageGroups: 管理群組 +replayTutorial: 重新播放教程 +moveFromLabel: '您想遷移的舊帳戶:' +customMOTDDescription: 自訂MOTD(啟動畫面)訊息,一行一個。使用者載入/重新整理頁面時將隨機顯示。 +privateModeInfo: 啟用後,只有列入允許名單的伺服器才能與你的伺服器聯合。所有貼文都將對公眾隱藏。 +adminCustomCssWarn: 除非你知道它的作用,否則請不要使用此設定。 輸入不正確的值可能會導致每個人的用戶端無法正常運行。你可在你的使用者設定中先行測試,以確保你的 + CSS 正常運作。 +showUpdates: Firefish 更新時顯示彈出視窗 +recommendedInstances: 建議的伺服器 +caption: 自動加上替代文字(alt) +enterSendsMessage: 在 Messaging 中按 Return 發送消息 (如關閉則是 Ctrl + Return) +migrationConfirm: "您確定要將你的帳戶遷移到 {account} 嗎? 一旦這樣做,你將無法復原,而你將無法再次正常使用您的帳戶。\n另外,請確保你已將此當前帳戶設置為您要遷移的帳戶。" +customSplashIconsDescription: 自訂啟動畫面的圖標網址,一行一個。使用者載入/重新整理頁面時將隨機顯示。請確保圖片位於靜態網址上,最好每個圖片的解析度皆縮放為 + 192x192。 +accountMoved: '該使用者已遷移至新帳戶:' +showAds: 顯示社群橫幅 +noThankYou: 不用了,謝謝 +selectInstance: 選擇伺服器 +enableRecommendedTimeline: 啟用推薦時間軸 +antennaInstancesDescription: 分行列出一個伺服器 +moveTo: 遷移此帳戶到新帳戶 +moveToLabel: '請輸入你將會遷移到的帳戶:' +moveAccount: 遷移帳戶! +moveAccountDescription: '這個過程是不可逆的。 在遷移前,請確保您已在新帳戶上為此帳戶設置了別名(Alias)。 請輸入帳戶標籤 (格式: + @person@server.com)' +moveFrom: 由舊帳戶移至此帳戶 +moveFromDescription: '這將為你的舊帳戶設置一個別名(Alias),以便你可以從該帳戶轉移到當前帳戶。 在你的舊帳戶移動之前請執行此操作。 請輸入帳戶標籤 + (格式: @person@server.com)' +enableEmojiReactions: 啟用表情符號反應 +breakFollowConfirm: 您確定要移除該關注者嗎? +socialTimeline: 社交時間軸 +cannotUploadBecauseExceedsFileSizeLimit: 因檔案太大而無法上傳。 +customMOTD: 自定義MOTD (網頁載入時顯示的訊息) +customSplashIcons: 啟動畫面圖標 (網址) +splash: 啟動畫面 +updateAvailable: 可能有可用的更新! +showAdminUpdates: 表明新的 Firefish 版本可用(只限管理員) +migration: 遷移 +homeTimeline: 主頁時間軸 +swipeOnDesktop: 允許在桌面上進行手機式滑動 +logoImageUrl: 圖標網址 +addInstance: 增加一個伺服器 +noInstances: 沒有伺服器 +flagSpeakAsCat: 像貓一樣地說話 +silenceThisInstance: 靜音此伺服器 +silencedInstances: 已靜音的伺服器 +silenced: 已靜音 +_experiments: + title: 試驗功能 + enablePostImports: 啟用匯入貼文的功能 + postImportsCaption: + 允許使用者從舊有的Firefish・Misskey・Mastodon・Akkoma・Pleroma帳號匯入貼文。在伺服器佇列堵塞時匯入貼文可能會導致載入速度變慢。 +noGraze: 瀏覽器擴充元件 "Graze for Mastodon" 會與Firefish發生衝突,請停用該擴充元件。 +userSaysSomethingReasonRenote: '{name} 轉發了包含 {reason} 的貼文' +pushNotificationNotSupported: 你的瀏覽器或伺服器不支援推送通知 +accessibility: 輔助功能 +userSaysSomethingReasonReply: '{name} 回覆了包含 {reason} 的貼文' +hiddenTags: 隱藏主題標籤 +deleted: 已刪除 +editNote: 編輯貼文 +edited: '於 {date} {time} 編輯' +userSaysSomethingReason: '{name} 說了 {reason}' +allowedInstancesDescription: 允許聯邦的伺服器名單,一行一個(僅適用於私人模式)。 +defaultReaction: 默認的表情符號反應 +license: 授權 +apps: 應用 +pushNotification: 推送通知 +subscribePushNotification: 啟用推送通知 +unsubscribePushNotification: 停用推送通知 +pushNotificationAlreadySubscribed: 推送通知已經啟用 +recommendedInstancesDescription: 推薦的伺服器(將顯示在推薦時間軸中),一行一個。 +searchPlaceholder: 在 Firefish 上搜尋 +cw: 內容警告 +selectChannel: 選擇一個頻道 +newer: 較新 +older: 較舊 +jumpToPrevious: 跳到上一個 +removeReaction: 移除你的反應 +listsDesc: 清單可以讓您創建含用指定使用者的時間軸。您可以在時間軸頁面查看它們。 +flagSpeakAsCatDescription: 在喵咪模式下你的貼文會被喵化ヾ(•ω•`)o +antennasDesc: "天線會顯示符合您設置條件的新貼文!\n 可以從時間軸訪問它們。" +expandOnNoteClick: 點擊以打開貼文 +expandOnNoteClickDesc: 即使停用,您仍然可以從右鍵選單或單擊發文時間來打開貼文。 +hiddenTagsDescription: '列出您希望隱藏趨勢和探索的主題標籤(不帶 #)。 隱藏的主題標籤仍然可以通過其他方式發現。' +userSaysSomethingReasonQuote: '{name} 引用了一篇包含 {reason} 的貼文' +silencedInstancesDescription: 列出您想要靜音的伺服器的網址。 您列出的伺服器內的帳戶將被視為“沉默”,只能發出追隨請求,如果不追隨則不能提及本地帳戶。 + 這不會影響被阻止的伺服器。 +video: 影片 +audio: 音訊 +sendPushNotificationReadMessageCaption: 包含文本 “{emptyPushNotificationMessage}” 的通知將顯示一小段時間。 + 這可能會增加您設備的電池使用量(如果適用)。 +channelFederationWarn: 頻道功能尚未與聯邦宇宙連動 +swipeOnMobile: 允許以滑動在頁面之間切換 +sendPushNotificationReadMessage: 閱讀相關通知或消息後刪除推送通知 +image: 圖片 +seperateRenoteQuote: 分開轉發及引用的按鈕 +clipsDesc: 摘錄就像一個可以分享的書籤。 你可以從每個貼文的菜單創建新摘錄或將貼文加入已有的摘錄。 +noteId: 貼文 ID +sendModMail: 發送審核通知 +enableIdenticonGeneration: 啟用Identicon生成 +enableServerMachineStats: 啟用伺服器硬體統計資訊 +reactionPickerSkinTone: 首選表情符號膚色 +preventAiLearning: 防止 AI 機器人抓取 +preventAiLearningDescription: 請求第三方 AI 語言模型不要研究您上傳的內容,例如貼文和圖像。 +isLocked: 該帳戶已獲得以下批准 +isModerator: 板主 +isAdmin: 管理員 +isPatron: Firefish 項目贊助者 +silencedWarning: 顯示此頁面是因為這些使用者來自您伺服器管理員已靜音的伺服器,因此他們可能是垃圾訊息。 +signupsDisabled: 此伺服器目前停止註冊。如果您有此伺服器的邀請碼,請在下面輸入。 +showPopup: 通過彈出式視窗通知使用者 +showWithSparkles: 讓標題閃閃發光 +youHaveUnreadAnnouncements: 您有未讀的公告 +donationLink: 連結到贊助頁面 +neverShow: 不再顯示 +remindMeLater: 可能之後 +removeQuote: 删除引用 +removeRecipient: 刪除收件者 +removeMember: 刪除成員 +isBot: 此帳號為自動化帳號 +verifiedLink: 已驗證連結 +_filters: + followersOnly: 只顯示關注者的 + fromDomain: 從域名 + notesBefore: 指定時間以前 + notesAfter: 指定時間以後 + followingOnly: 只顯示關注的 + fromUser: 從使用者 + withFile: 有檔案 +alt: 替代文字 +xl: 特大 +inputNotMatch: 輸入不一致 +delete2faConfirm: 二階段認證(2FA)將被完全刪除。是否繼續? +_dialog: + charactersBelow: 字數不足! 當前 {current} / 限制 {min} + charactersExceeded: 超過字數限制! 當前 {current} / 限制 {max} +_skinTones: + yellow: 黃色 + medium: 中等 + dark: 深色 + mediumDark: 中等偏深 + light: 淺色 + mediumLight: 中等偏淺 +exportZip: 匯出ZIP +_feeds: + atom: Atom + rss: RSS + copyFeed: 複製訂閱URL + jsonFeed: JSON Feed +importZip: 匯入ZIP +delete2fa: 停用二階段認證(2FA) +confirm: 確認 +deletePasskeysConfirm: 此帳號的所有通行密鑰及安全密鑰將被完全刪除。此動作無法復原,是否繼續? +deletePasskeys: 刪除通行密鑰 +detectPostLanguage: 自動判定貼文的語言,並在外文貼文顯示翻譯按鈕 +indexableDescription: 允許內建搜尋引擎顯示您的公開貼文 +addRe: 在回覆有內容警告的貼文時,在標題前面加上 "re:" +vibrate: 播放振動 +openServerInfo: 點擊貼文中的伺服器名稱以顯示伺服器資訊 +languageForTranslation: 貼文翻譯語言 +objectStorageS3ForcePathStyleDesc: 以 "s3.amazonaws.com//" 而非 ".s3.amazonaws.com" + 的格式建構端點(Endpoint)URL。 +indexable: 登錄至貼文搜尋引擎 +origin: 來源 +objectStorageS3ForcePathStyle: 使用基於路徑的端點(Endpoint)URL +clickToShowPatterns: 點擊顯示模組模式(Module Pattern) +iconSet: 圖示的樣式 +_iconSets: + fill: 填滿 + regular: 標準 + bold: 粗線 + duotone: 雙色 + light: 細線 +showAttachedNotes: 顯示有此附件的貼文 +attachedToNotes: 帶有此附件的貼文 +moreUrls: 置頂的頁面 +moreUrlsDescription: "請以下列形式輸入欲釘選在左下角幫助選單的頁面,一行一個:\n\"顯示名稱\": https://example.com/" +showPreviewByDefault: "自動開啟發文介面中的預覽顯示" +preventMisclick: "預防誤觸" +hideFollowButtons: "隱藏會誤觸的追隨按鈕" +private: "祕密" +privateDescription: "僅你可見" +makePrivate: "設為祕密" +makePrivateConfirm: "此操作將向遠端伺服器發送刪除請求,並將貼文的公開範圍設為「祕密」。是否繼續?" +squareCatAvatars: 以方形顯示貓咪使用者的大頭貼 +showBigPostButton: 放大發文介面中的貼文按鈕 +emojiModPerm: 自訂表情符號的管理權限 +emojiModPermDescription: "新增: 允許新增自訂表情符號,並允許設定尚未設定標籤/類別/授權條款的現有自訂表情符號。\n新增及編輯: 除了「新增」的權限之外,也允許編輯現有自訂表情符號的標籤/類別/授權條款\n + 全部允許: 除了「新增及編輯」的權限之外,也允許刪除現有的自訂表情符號。" +_emojiModPerm: + full: 全部允許 + unauthorized: 不允許 + add: 新增 + mod: 新增及編輯 +replyMute: 靜音回覆貼文 +useCdn: 從 CDN 獲取資源 +useCdnDescription: 從 JSDelivr CDN(而非此 Firefish 伺服器)載入 Twemoji 等的靜態資源。 +replyUnmute: 解除靜音回覆貼文 +suggested: 建議 +noLanguage: 無語言 +forMobile: 手機版 +replaceChatButtonWithAccountButton: 將頁面下方的「傳送訊息按鈕」替換成「切換帳戶按鈕」 +replaceWidgetsButtonWithReloadButton: 將頁面下方的「小工具按鈕」替換成「重新整理按鈕」 +postSearch: 在此伺服器搜尋貼文 +searchWords: 搜尋關鍵字 / 查詢的ID或URL +searchEngine: MFM搜尋欄使用的搜尋引擎 +enablePullToRefresh: 啟用「下拉重新整理」 +pullToRefreshThreshold: 觸發下拉重新整理所需的距離 +pullDownToReload: 下拉重新整理 +releaseToReload: 放開以重新整理 +reloading: 重新整理中 +enableTimelineStreaming: 自動更新時間軸 +searchUsers: 發文者(選填) +searchRange: 日期範圍(選填) +searchPostsWithFiles: 僅帶有附件的貼文 +searchCwAndAlt: 包含內容警告及替代文字 +publishTimelines: 允許未登入的使用者查看時間軸 +publishTimelinesDescription: 啟用後,未登入的使用者可於 {url} 查看本地時間軸及公開時間軸。 +searchWordsDescription: "請在此欄位輸入欲搜尋的關鍵字。以空格分隔關鍵字以進行AND搜尋,在關鍵字之間插入「OR」以進行OR搜尋。\n舉例來說,輸入「早上 + 晚上」會搜尋包含「早上」和「晚上」的貼文,「早上 OR 晚上」會搜尋包含「早上」或「晚上」(或兩者皆包含)的貼文。\n您也可以同時進行AND搜尋及OR搜尋,例如「(早上 + OR 晚上) 想睡覺」。\n如欲搜尋包含空白的字串,請使用雙引號 (\") 以與AND搜尋進行區別,例如「\"Today I learned\"」。\n\n如欲前往特定使用者或貼文的頁面,請在此欄位輸入使用者ID(@user@example.com)或貼文的URL,並點擊「查詢」按鈕。點擊「搜尋」按鈕則會搜尋字面上包含輸入的ID或URL的貼文。" +searchUsersDescription: "如欲搜尋特定使用者的貼文,請以「@user@example.com(本地使用者則為 @user)」的格式輸入發文者的ID,或輸入網域名稱(example.com)以搜尋特定伺服器的貼文。\n\ + \n輸入「me」以搜尋自己的所有貼文(包含不在主頁顯示、追隨者、指定使用者、祕密貼文)。\n\n輸入「local」以搜尋本地伺服器的貼文。" +searchRangeDescription: "如欲搜尋特定期間的貼文,請以「20220615-20231031」的格式輸入日期範圍。\n\n今年的日期可省略年份(例如0105-0106、20231105-0110)。\n\ + \n開始日期和結果日期可擇一省略。舉例來說,「-0102」表示僅搜尋今年1月2日為止的貼文,「20231026-」表示僅搜尋2023年10月26日以後的貼文。" +noAltTextWarning: 有些附件沒有說明,您是否忘記寫了? +moderationNote: 管理員備註 +ipFirstAcknowledged: 首次取得此 IP 位址的日期 +driveCapacityOverride: 雲端硬碟容量變更 +showNoAltTextWarning: 在嘗試發佈包含沒有替代文字的貼文時顯示警告 +messagingUnencryptedInfo: Firefish 上的聊天沒有經過點對點加密,請不要發送敏感資訊。 +autocorrectNoteLanguage: 在設定的貼文語言不符合自動偵測的結果時顯示警告 +incorrectLanguageWarning: "此貼文的語言似乎為{detected},但您選擇的語言為{current}。\n要將貼文語言變更為{detected}嗎?" diff --git a/package.json b/package.json new file mode 100644 index 0000000..e6cffd1 --- /dev/null +++ b/package.json @@ -0,0 +1,54 @@ +{ + "name": "firefish", + "version": "20240729", + "repository": { + "type": "git", + "url": "https://firefish.dev/firefish/firefish.git" + }, + "packageManager": "pnpm@9.6.0", + "private": true, + "scripts": { + "rebuild": "pnpm run clean && pnpm run build", + "build": "pnpm --recursive --color run build && pnpm node ./scripts/copy-index.mjs && pnpm run build:assets", + "build:assets": "pnpm node ./scripts/copy-assets.mjs", + "build:debug": "pnpm run clean && pnpm --recursive --color run build:debug && pnpm node ./scripts/copy-index-dev.mjs && pnpm run build:assets", + "start": "pnpm --filter backend run start", + "start:container": "pnpm run build:assets && pnpm run migrate && pnpm run start", + "start:test": "pnpm --filter backend run start:test", + "init": "pnpm run migrate", + "migrate": "pnpm --filter backend run migration:run", + "revertmigration": "pnpm --filter backend run migration:revert", + "watch": "pnpm run dev", + "dev": "pnpm node ./scripts/dev.mjs", + "dev:staging": "NODE_OPTIONS=--max_old_space_size=3072 NODE_ENV=development pnpm run build && pnpm run start", + "lint": "pnpm run lint:ts; pnpm run lint:rs", + "lint:ts": "pnpm --filter !firefish-js --recursive run lint ; pnpm run format:ts", + "lint:rs": "cargo clippy --fix --allow-dirty --allow-staged && cargo fmt --all --", + "debug": "pnpm run build:debug && pnpm run start", + "mocha": "pnpm --filter backend run mocha", + "test": "pnpm run test:rs && pnpm run test:rs:miri && pnpm run test:ts", + "test:ts": "pnpm run mocha", + "test:rs": "cargo test --doc && cargo nextest run", + "test:rs:miri": "MIRIFLAGS='-Zmiri-disable-isolation' cargo +nightly miri nextest run -j$(nproc --all)", + "format": "pnpm run format:ts; pnpm run format:rs", + "format:ts": "pnpm -r --parallel run format", + "format:rs": "cargo fmt --all --", + "clean": "pnpm node ./scripts/clean-built.mjs", + "clean-npm": "pnpm node ./scripts/clean-npm.mjs", + "clean-cargo": "cargo clean", + "clean-all": "pnpm run clean && pnpm run clean-cargo && pnpm run clean-npm" + }, + "dependencies": { + "js-yaml": "4.1.0" + }, + "devDependencies": { + "@biomejs/biome": "1.8.3", + "@biomejs/cli-darwin-arm64": "1.8.3", + "@biomejs/cli-darwin-x64": "1.8.3", + "@biomejs/cli-linux-arm64": "1.8.3", + "@biomejs/cli-linux-x64": "1.8.3", + "@types/node": "20.14.13", + "execa": "9.3.0", + "pnpm": "9.6.0" + } +} diff --git a/packages/README.md b/packages/README.md new file mode 100644 index 0000000..42be4ae --- /dev/null +++ b/packages/README.md @@ -0,0 +1,10 @@ +# Packages + +This directory contains all of the packages Firefish uses. + +- `backend`: Main backend code written in TypeScript for NodeJS +- `backend-rs`: Backend code written in Rust, bound to NodeJS by [NAPI-RS](https://napi.rs/) +- `macro-rs`: Procedural macros for backend-rs +- `client`: Web interface written in Vue3 and TypeScript +- `sw`: Web [Service Worker](https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API) written in TypeScript +- `firefish-js`: TypeScript SDK for both backend and client diff --git a/packages/backend-rs/.gitignore b/packages/backend-rs/.gitignore new file mode 100644 index 0000000..0a2a1de --- /dev/null +++ b/packages/backend-rs/.gitignore @@ -0,0 +1,199 @@ +# Created by https://www.toptal.com/developers/gitignore/api/node +# Edit at https://www.toptal.com/developers/gitignore?templates=node + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# End of https://www.toptal.com/developers/gitignore/api/node + +# Created by https://www.toptal.com/developers/gitignore/api/macos +# Edit at https://www.toptal.com/developers/gitignore?templates=macos + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +# End of https://www.toptal.com/developers/gitignore/api/macos + +# Created by https://www.toptal.com/developers/gitignore/api/windows +# Edit at https://www.toptal.com/developers/gitignore?templates=windows + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# End of https://www.toptal.com/developers/gitignore/api/windows + +# napi-rs generated files +built/ + +#Added by cargo + +/target + +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions + +*.node diff --git a/packages/backend-rs/Cargo.toml b/packages/backend-rs/Cargo.toml new file mode 100644 index 0000000..54efdde --- /dev/null +++ b/packages/backend-rs/Cargo.toml @@ -0,0 +1,60 @@ +[package] +name = "backend-rs" +license = "AGPL-3.0-only" +version = "0.0.0" + +edition = { workspace = true } +rust-version = { workspace = true } + +[features] +default = [] +napi = ["dep:napi", "dep:napi-derive", "dep:napi-build"] + +[lib] +crate-type = ["cdylib", "lib"] + +[dependencies] +macros = { workspace = true } + +napi = { workspace = true, optional = true, features = ["chrono_date", "napi4", "serde-json", "tokio_rt"] } +napi-derive = { workspace = true, optional = true } + +argon2 = { workspace = true, features = ["std"] } +async-trait = { workspace = true } +basen = { workspace = true } +bb8 = { workspace = true } +bcrypt = { workspace = true, features = ["std"] } +chrono = { workspace = true } +cuid2 = { workspace = true } +emojis = { workspace = true } +futures-util = { workspace = true, features = ["io"] } +idna = { workspace = true, features = ["std", "compiled_data"] } +image = { workspace = true, features = ["avif", "bmp", "gif", "ico", "jpeg", "png", "tiff", "webp"] } +isahc = { workspace = true, features = ["http2", "text-decoding", "json"] } +nom-exif = { workspace = true } +once_cell = { workspace = true } +openssl = { workspace = true, features = ["vendored"] } +rand = { workspace = true } +redis = { workspace = true, features = ["streams", "tokio-comp"] } +regex = { workspace = true } +rmp-serde = { workspace = true } +sea-orm = { workspace = true, features = ["macros", "runtime-tokio-rustls", "sqlx-postgres", "with-chrono", "with-json"] } +serde = { workspace = true, features = ["derive"] } +serde_json = { workspace = true } +serde_yaml = { workspace = true } +sysinfo = { workspace = true } +thiserror = { workspace = true } +tokio = { workspace = true, features = ["fs", "io-std", "io-util", "macros", "process", "rt-multi-thread", "signal", "sync", "time"] } +tracing = { workspace = true } +tracing-subscriber = { workspace = true, features = ["ansi"] } +url = { workspace = true } +urlencoding = { workspace = true } +web-push = { workspace = true, features = ["isahc-client"] } +zhconv = { workspace = true } + +[dev-dependencies] +pretty_assertions = { workspace = true, features = ["std"] } +tokio-test = { workspace = true } + +[build-dependencies] +napi-build = { workspace = true, optional = true } diff --git a/packages/backend-rs/Makefile b/packages/backend-rs/Makefile new file mode 100644 index 0000000..9e53b37 --- /dev/null +++ b/packages/backend-rs/Makefile @@ -0,0 +1,35 @@ +recursive_wildcard = $(foreach d, $(wildcard $(1:=/*)), $(call recursive_wildcard, $d, $2) $(filter $(subst *, %, $2), $d)) + +SRC := Cargo.toml +SRC += $(call recursive_wildcard, src, *) + + +.PHONY: regenerate-entities +regenerate-entities: + rm --recursive --force src/model/entity + sea-orm-cli generate entity \ + --output-dir='src/model/entity' \ + --database-url='postgres://$(POSTGRES_USER):$(POSTGRES_PASSWORD)@localhost:25432/$(POSTGRES_DB)' \ + --date-time-crate='chrono' \ + --with-serde='both' \ + --model-extra-attributes='NAPI_EXTRA_ATTR_PLACEHOLDER' && \ + for file in src/model/entity/*; do \ + base=$$(basename -- "$${file}"); \ + jsname=$$(printf '%s\n' "$${base%.*}" | perl -pe 's/(^|_)./uc($$&)/ge;s/_//g'); \ + attribute=$$(printf 'macros::export(object, js_name = "%s")' "$${jsname}"); \ + sed -i "s/NAPI_EXTRA_ATTR_PLACEHOLDER/$${attribute}/" "$${file}"; \ + sed -i 's/#\[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)\]/#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)]\n#[serde(rename_all = "camelCase")]/' "$${file}"; \ + done + sed -i 's/#\[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize)\]/#[derive(Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize)]\n#[serde(rename_all = "camelCase")]\n#[macros::derive_clone_and_export(string_enum = "camelCase")]/' \ + src/model/entity/sea_orm_active_enums.rs + cargo fmt --all -- + +.PHONY: update-index +update-index: index.js index.d.ts + +index.js index.d.ts: $(SRC) package.json + NODE_OPTIONS='--max_old_space_size=3072' pnpm run build:debug + [ -f built/index.js ] && [ -f built/index.d.ts ] + rm --force index.js index.d.ts + cp built/index.js index.js + cp built/index.d.ts index.d.ts diff --git a/packages/backend-rs/README.md b/packages/backend-rs/README.md new file mode 100644 index 0000000..b1c2a45 --- /dev/null +++ b/packages/backend-rs/README.md @@ -0,0 +1,114 @@ +A work-in-progress Firefish backend written in Rust + +Minimum supported Rust version (MSRV): 1.74 + +Auto-generated documentation is at + +# How to write the code + +Currently, there is no entrypoint in this project, and all functions are executed via Node-API. + +You need to apply the [`macros::export`] proc macro to export a function to the Node.js backend: + +```rust,ignore +#[macros::export] +pub fn to_be_exported(value: &str) -> i32 { + // You can also call other functions that are not exported + do_something(); + 42 +} + +fn do_something() { + do_other_thing(); +} +``` + +this code will be translated into this TypeScript code: + +```typescript +export declare function toBeExported(value: string): number { + /* executes the compiled Rust function */ +} +``` + +You can also export `async` functions: + +```rust,ignore +#[macros::export] +pub async fn async_function() -> i32 { + some_async_task().await +} +``` + +```typescript +export declare function asyncFunction(): Promise { + /* executes the compiled Rust function */ +} +``` + +You need to specify `object` attribute to export `struct`s: + +```rust,ignore +#[macros::export(object)] +pub struct Thing { + pub field_one: String, + pub field_two: Option, +} +``` + +```typescript +export interface Thing { + fieldOne: string + fieldTwo: string | null +} +``` + +# Update auto-generated files + +These files are auto-generated and are not intended for manual editing: +- `packages/backend-rs/index.js` +- `packages/backend-rs/index.d.ts` +- [`packages/backend-rs/src/model/entity/*`](crate::model::entity) + +## Prerequisites + +1. `dev/config.env` (see `dev/config.example.env` for reference) +2. PostgreSQL database listening on port `25432` +3. Dev dependencies + - [GNU Make]() + - [sea-orm-cli]() + +## Update database entity + +Run the following command in the repository root directory + +```sh +make entities +``` + +## Update `index.js` and `index.d.ts` + +Run the following command in the repository root directory + +```sh +make napi +``` + +# Unit tests + +It is highly encouraged that you write unit tests and test the code yourself (there is no integration test at this point). + +## Prerequisites + +1. `dev/config.env` (see `dev/config.example.env` for reference) +2. Firefish config file (`.config/default.yml`) +3. Dev dependency + - [cargo-nextest]() + +## Run unit tests + +Run the following command in the repository root directory + +```sh +pnpm run test:rs +``` diff --git a/packages/backend-rs/build.rs b/packages/backend-rs/build.rs new file mode 100644 index 0000000..71dd87a --- /dev/null +++ b/packages/backend-rs/build.rs @@ -0,0 +1,8 @@ +fn main() { + // watch the version in the project root package.json + println!("cargo:rerun-if-changed=../../package.json"); + + // napi + #[cfg(feature = "napi")] + napi_build::setup(); +} diff --git a/packages/backend-rs/index.d.ts b/packages/backend-rs/index.d.ts new file mode 100644 index 0000000..d939266 --- /dev/null +++ b/packages/backend-rs/index.d.ts @@ -0,0 +1,1674 @@ +/* auto-generated by NAPI-RS */ +/* Do NOT edit this file manually */ + +type DateTimeWithTimeZone = Date; + +type Json = any; + +export interface AbuseUserReport { + id: string + createdAt: DateTimeWithTimeZone + targetUserId: string + reporterId: string + assigneeId: string | null + resolved: boolean + comment: string + targetUserHost: string | null + reporterHost: string | null + forwarded: boolean +} + +export interface AbuseUserReportLike { + id: string + targetUserId: string + reporterId: string + comment: string +} + +export interface AccessToken { + id: string + createdAt: DateTimeWithTimeZone + token: string + hash: string + userId: string | null + appId: string | null + lastUsedAt: DateTimeWithTimeZone | null + session: string | null + name: string | null + description: string | null + iconUrl: string | null + permission: Array + fetched: boolean +} + +export interface Acct { + username: string + host: string | null +} + +export declare function acctToString(acct: Acct): string + +export type Activity = 'Follow'; + +export interface Ad { + id: string + createdAt: DateTimeWithTimeZone + expiresAt: DateTimeWithTimeZone + place: string + priority: string + url: string + imageUrl: string + memo: string + ratio: number +} + +export interface Announcement { + id: string + createdAt: DateTimeWithTimeZone + text: string + title: string + imageUrl: string | null + updatedAt: DateTimeWithTimeZone | null + showPopup: boolean + isGoodNews: boolean +} + +export interface AnnouncementRead { + id: string + userId: string + announcementId: string + createdAt: DateTimeWithTimeZone +} + +export interface Antenna { + id: string + createdAt: DateTimeWithTimeZone + userId: string + name: string + src: AntennaSrc + userListId: string | null + withFile: boolean + expression: string | null + notify: boolean + caseSensitive: boolean + withReplies: boolean + userGroupJoiningId: string | null + users: Array + instances: Array + keywords: Array + excludeKeywords: Array +} + +export type AntennaSrc = 'all'| +'group'| +'home'| +'instances'| +'list'| +'users'; + +export interface App { + id: string + createdAt: DateTimeWithTimeZone + userId: string | null + secret: string + name: string + description: string + permission: Array + callbackUrl: string | null +} + +export interface AttestationChallenge { + id: string + userId: string + challenge: string + createdAt: DateTimeWithTimeZone + registrationChallenge: boolean +} + +export interface AuthSession { + id: string + createdAt: DateTimeWithTimeZone + token: string + userId: string | null + appId: string +} + +export interface Blocking { + id: string + createdAt: DateTimeWithTimeZone + blockeeId: string + blockerId: string +} + +export interface Channel { + id: string + createdAt: DateTimeWithTimeZone + lastNotedAt: DateTimeWithTimeZone | null + userId: string | null + name: string + description: string | null + bannerId: string | null + notesCount: number + usersCount: number +} + +export interface ChannelFollowing { + id: string + createdAt: DateTimeWithTimeZone + followeeId: string + followerId: string +} + +export interface ChannelNotePining { + id: string + createdAt: DateTimeWithTimeZone + channelId: string + noteId: string +} + +export type ChatEvent = 'message'| +'read'| +'deleted'| +'typing'; + +export type ChatIndexEvent = 'message'| +'read'; + +/** + * Returns whether `note` should be hard-muted. + * + * More specifically, this function returns `Ok(true)` + * if and only if one or more of these conditions are met: + * + * * the note (text or CW) contains any of the words/patterns + * * the "parent" note(s) (reply, quote) contain any of the words/patterns + * * the alt text of the attached files contains any of the words/patterns + * + * # Arguments + * + * * `note` : [PartialNoteToCheckWordMute] object + * * `muted_words` : list of muted keyword lists (each array item is a space-separated keyword list that represents an AND condition) + * * `muted_patterns` : list of JavaScript-style (e.g., `/foo/i`) regular expressions + */ +export declare function checkWordMute(note: PartialNoteToCheckWordMute, mutedWords: Array, mutedPatterns: Array): Promise + +export interface Clip { + id: string + createdAt: DateTimeWithTimeZone + userId: string + name: string + isPublic: boolean + description: string | null +} + +export interface ClipNote { + id: string + noteId: string + clipId: string +} + +export interface Config { + url: string + port: number + bind?: string + disableHsts?: boolean + db: DbConfig + redis: RedisConfig + cacheServer?: RedisConfig + proxy?: string + proxySmtp?: string + proxyBypassHosts?: Array + allowedPrivateNetworks?: Array + maxFileSize: number + accessLog?: string + clusterLimits: WorkerConfig + cuid?: IdConfig + outgoingAddress?: string + deliverJobConcurrency?: number + inboxJobConcurrency?: number + deliverJobPerSec?: number + inboxJobPerSec?: number + deliverJobMaxAttempts?: number + inboxJobMaxAttempts?: number + /** deprecated */ + logLevel?: Array + maxLogLevel?: string + syslog?: SysLogConfig + proxyRemoteFiles?: boolean + mediaProxy?: string + summalyProxyUrl?: string + reservedUsernames?: Array + maxUserSignups?: number + isManagedHosting?: boolean + maxNoteLength: number + maxCaptionLength: number + deepl?: DeepLConfig + libreTranslate?: LibreTranslateConfig + email?: EmailConfig + objectStorage?: ObjectStorageConfig + version: string + host: string + hostname: string + redisKeyPrefix: string + scheme: string + wsScheme: string + apiUrl: string + wsUrl: string + authUrl: string + driveUrl: string + userAgent: string +} + +export declare function countLocalUsers(): Promise + +export declare function countReactions(reactions: Record): Record + +export interface Cpu { + model: string + cores: number +} + +export declare function cpuInfo(): Cpu + +export declare function cpuUsage(): number + +export interface DbConfig { + host: string + port: number + db: string + user: string + pass: string + disableCache?: boolean + extra?: any +} + +export interface DecodedReaction { + reaction: string + name: string | null + host: string | null +} + +export declare function decodeReaction(reaction: string): DecodedReaction + +export interface DeepLConfig { + managed?: boolean + authKey?: string + isPro?: boolean +} + +export interface DriveFile { + id: string + createdAt: DateTimeWithTimeZone + userId: string | null + userHost: string | null + md5: string + name: string + type: string + size: number + comment: string | null + properties: Json + storedInternal: boolean + url: string + thumbnailUrl: string | null + webpublicUrl: string | null + accessKey: string | null + thumbnailAccessKey: string | null + webpublicAccessKey: string | null + uri: string | null + src: string | null + folderId: string | null + isSensitive: boolean + isLink: boolean + blurhash: string | null + webpublicType: string | null + requestHeaders: Json | null + requestIp: string | null + usageHint: DriveFileUsageHint | null +} + +export type DriveFileEvent = 'create'| +'update'| +'delete'; + +export type DriveFileUsageHint = 'userAvatar'| +'userBanner'; + +export interface DriveFolder { + id: string + createdAt: DateTimeWithTimeZone + name: string + userId: string | null + parentId: string | null +} + +export type DriveFolderEvent = 'create'| +'update'| +'delete'; + +export interface EmailConfig { + managed?: boolean + address?: string + host?: string + port?: number + user?: string + pass?: string + useImplicitSslTls?: boolean +} + +export interface Emoji { + id: string + updatedAt: DateTimeWithTimeZone | null + name: string + host: string | null + originalUrl: string + uri: string | null + type: string | null + aliases: Array + category: string | null + publicUrl: string + license: string | null + width: number | null + height: number | null +} + +export declare enum Event { + Notification = 0, + NewNotification = 1, + Mention = 2, + NewMention = 3, + Chat = 4, + NewChat = 5, + NewDm = 6, + Reply = 7, + Renote = 8, + Follow = 9, + Followed = 10, + Unfollow = 11, + NewFollowRequest = 12, + Page = 13, + ReadAllNotifications = 14, + ReadAllMentions = 15, + ReadNotifications = 16, + ReadAllDms = 17, + ReadAllChats = 18, + ReadAntenna = 19, + ReadAllAntennaPosts = 20, + NewAntennaPost = 21, + ReadAllAnnouncements = 22, + ReadAllChannelPosts = 23, + NewChannelPost = 24, + DriveFile = 25, + UrlUploadFinished = 26, + Me = 27, + RegenerateMyToken = 28, + Signin = 29, + Registry = 30 +} + +export declare function extractHost(uri: string): string + +export declare function fetchMeta(): Promise + +/** Fetches and returns the NodeInfo (version 2.0) of a remote server. */ +export declare function fetchNodeinfo(host: string): Promise + +export interface Following { + id: string + createdAt: DateTimeWithTimeZone + followeeId: string + followerId: string + followerHost: string | null + followerInbox: string | null + followerSharedInbox: string | null + followeeHost: string | null + followeeInbox: string | null + followeeSharedInbox: string | null +} + +export interface FollowRelay { + id: string + type: Activity + actor: string + object: string +} + +export interface FollowRequest { + id: string + createdAt: DateTimeWithTimeZone + followeeId: string + followerId: string + requestId: string | null + followerHost: string | null + followerInbox: string | null + followerSharedInbox: string | null + followeeHost: string | null + followeeInbox: string | null + followeeSharedInbox: string | null +} + +/** Converts milliseconds to a human readable string. */ +export declare function formatMilliseconds(milliseconds: number): string + +export interface GalleryLike { + id: string + createdAt: DateTimeWithTimeZone + userId: string + postId: string +} + +export interface GalleryPost { + id: string + createdAt: DateTimeWithTimeZone + updatedAt: DateTimeWithTimeZone + title: string + description: string | null + userId: string + fileIds: Array + isSensitive: boolean + likedCount: number + tags: Array +} + +/** Generates a random string based on [thread_rng] and [Alphanumeric]. */ +export declare function generateSecureRandomString(length: number): string + +export declare function generateUserToken(): string + +/** + * The generated ID results in the form of `[8 chars timestamp] + [cuid2]`. + * The minimum and maximum lengths are 16 and 24, respectively. + * With the length of 16, namely 8 for cuid2, roughly 1427399 IDs are needed + * in the same millisecond to reach 50% chance of collision. + * + * Ref: + */ +export declare function genId(): string + +/** Generate an ID using a specific datetime */ +export declare function genIdAt(date: Date): string + +export declare function getFullApAccount(username: string, host?: string | undefined | null): string + +export declare function getImageSizeFromUrl(url: string): Promise + +export declare function getInstanceActor(): Promise + +export declare function getNoteSummary(fileIds: Array, text: string | undefined | null, cw: string | undefined | null, hasPoll: boolean): string + +export declare function getRelayActorId(): Promise + +export declare function getTimestamp(id: string): number + +/** Prints the greeting message and the Firefish version to stdout. */ +export declare function greet(): void + +/** Hashes the given password using [argon2] algorithm. */ +export declare function hashPassword(password: string): string + +export interface Hashtag { + id: string + name: string + mentionedUserIds: Array + mentionedUsersCount: number + mentionedLocalUserIds: Array + mentionedLocalUsersCount: number + mentionedRemoteUserIds: Array + mentionedRemoteUsersCount: number + attachedUserIds: Array + attachedUsersCount: number + attachedLocalUserIds: Array + attachedLocalUsersCount: number + attachedRemoteUserIds: Array + attachedRemoteUsersCount: number +} + +export interface IdConfig { + length?: number + fingerprint?: string +} + +export interface ImageSize { + width: number + height: number +} + +/** The third party sites this server can retrieve messages from for combined display with regular traffic. */ +export declare enum Inbound { + Atom1 = 0, + Gnusocial = 1, + Imap = 2, + Pnut = 3, + Pop3 = 4, + Pumpio = 5, + Rss2 = 6, + Twitter = 7 +} + +/** Initializes the [tracing] logger. */ +export declare function initializeRustLogger(): void + +export interface Instance { + id: string + caughtAt: DateTimeWithTimeZone + host: string + usersCount: number + notesCount: number + followingCount: number + followersCount: number + latestRequestSentAt: DateTimeWithTimeZone | null + latestStatus: number | null + latestRequestReceivedAt: DateTimeWithTimeZone | null + lastCommunicatedAt: DateTimeWithTimeZone + isNotResponding: boolean + softwareName: string | null + softwareVersion: string | null + openRegistrations: boolean | null + name: string | null + description: string | null + maintainerName: string | null + maintainerEmail: string | null + infoUpdatedAt: DateTimeWithTimeZone | null + isSuspended: boolean + iconUrl: string | null + themeColor: string | null + faviconUrl: string | null +} + +export declare enum InternalEvent { + Suspend = 0, + Silence = 1, + Moderator = 2, + Token = 3, + LocalUser = 4, + RemoteUser = 5, + WebhookCreated = 6, + WebhookUpdated = 7, + WebhookDeleted = 8, + AntennaCreated = 9, + AntennaUpdated = 10, + AntennaDeleted = 11 +} + +/** + * Checks if a server is allowlisted. + * Returns `Ok(true)` if private mode is disabled. + * + * # Argument + * `host` - punycoded instance host + * + * # Example + * ```ignore + * # use backend_rs::misc::check_server_block::is_allowed_server; + * # async fn f() -> Result<(), Box> { + * assert_eq!(true, is_allowed_server("allowed.com").await?); + * assert_eq!(false, is_allowed_server("not-allowed.com").await?); + * assert_eq!(false, is_allowed_server("subdomain.of.allowed.com").await?); + * assert_eq!(false, is_allowed_server("xn--l8jegik.allowed.com").await?); + * # Ok(()) + * # } + * ``` + */ +export declare function isAllowedServer(host: string): Promise + +/** + * Checks if a server is blocked. + * + * # Argument + * `host` - punycoded instance host + * + * # Example + * ```ignore + * # use backend_rs::misc::check_server_block::is_blocked_server; + * # async fn f() -> Result<(), Box> { + * assert_eq!(true, is_blocked_server("blocked.com").await?); + * assert_eq!(false, is_blocked_server("not-blocked.com").await?); + * assert_eq!(true, is_blocked_server("subdomain.of.blocked.com").await?); + * assert_eq!(true, is_blocked_server("xn--l8jegik.blocked.com").await?); + * # Ok(()) + * # } + * ``` + */ +export declare function isBlockedServer(host: string): Promise + +/** Returns whether the [bcrypt] algorithm is used for the password hash. */ +export declare function isOldPasswordAlgorithm(hash: string): boolean + +export declare function isQuote(note: NoteLikeForIsQuote): boolean + +export declare function isSafeUrl(url: string): boolean + +export declare function isSameOrigin(uri: string): boolean + +export declare function isSelfHost(host?: string | undefined | null): boolean + +/** + * Checks if a server is silenced. + * + * # Argument + * `host` - punycoded instance host + * + * # Example + * ```ignore + * # use backend_rs::misc::check_server_block::is_silenced_server; + * # async fn f() -> Result<(), Box> { + * assert_eq!(true, is_silenced_server("silenced.com").await?); + * assert_eq!(false, is_silenced_server("not-silenced.com").await?); + * assert_eq!(true, is_silenced_server("subdomain.of.silenced.com").await?); + * assert_eq!(true, is_silenced_server("xn--l8jegik.silenced.com").await?); + * # Ok(()) + * # } + * ``` + */ +export declare function isSilencedServer(host: string): Promise + +export declare function isUnicodeEmoji(s: string): boolean + +/** Returns the latest Firefish version. */ +export declare function latestVersion(): Promise + +export interface LibreTranslateConfig { + managed?: boolean + apiUrl?: string + apiKey?: string +} + +export declare function loadConfig(): Config + +export interface Memory { + /** Total memory amount in bytes */ + total: number + /** Used memory amount in bytes */ + used: number + /** Available (for (re)use) memory amount in bytes */ + available: number +} + +export declare function memoryUsage(): Memory + +export interface MessagingMessage { + id: string + createdAt: DateTimeWithTimeZone + userId: string + recipientId: string | null + text: string | null + isRead: boolean + fileId: string | null + groupId: string | null + reads: Array + uri: string | null +} + +export interface Meta { + id: string + name: string | null + description: string | null + maintainerName: string | null + maintainerEmail: string | null + disableRegistration: boolean + disableLocalTimeline: boolean + disableGlobalTimeline: boolean + useStarForReactionFallback: boolean + langs: Array + hiddenTags: Array + blockedHosts: Array + mascotImageUrl: string | null + bannerUrl: string | null + errorImageUrl: string | null + iconUrl: string | null + cacheRemoteFiles: boolean + enableRecaptcha: boolean + recaptchaSiteKey: string | null + recaptchaSecretKey: string | null + localDriveCapacityMb: number + remoteDriveCapacityMb: number + summalyProxy: string | null + enableEmail: boolean + email: string | null + smtpSecure: boolean + smtpHost: string | null + smtpPort: number | null + smtpUser: string | null + smtpPass: string | null + enableServiceWorker: boolean + swPublicKey: string | null + swPrivateKey: string | null + pinnedUsers: Array + tosUrl: string | null + repositoryUrl: string + feedbackUrl: string | null + useObjectStorage: boolean + objectStorageBucket: string | null + objectStoragePrefix: string | null + objectStorageBaseUrl: string | null + objectStorageEndpoint: string | null + objectStorageRegion: string | null + objectStorageAccessKey: string | null + objectStorageSecretKey: string | null + objectStoragePort: number | null + objectStorageUseSsl: boolean + proxyAccountId: string | null + objectStorageUseProxy: boolean + enableHcaptcha: boolean + hcaptchaSiteKey: string | null + hcaptchaSecretKey: string | null + objectStorageSetPublicRead: boolean + pinnedPages: Array + backgroundImageUrl: string | null + logoImageUrl: string | null + pinnedClipId: string | null + objectStorageS3ForcePathStyle: boolean + allowedHosts: Array | null + secureMode: boolean | null + privateMode: boolean | null + deeplAuthKey: string | null + deeplIsPro: boolean + emailRequiredForSignup: boolean + themeColor: string | null + defaultLightTheme: string | null + defaultDarkTheme: string | null + enableIpLogging: boolean + enableActiveEmailValidation: boolean + customMotd: Array + customSplashIcons: Array + disableRecommendedTimeline: boolean + recommendedInstances: Array + enableGuestTimeline: boolean + defaultReaction: string + libreTranslateApiUrl: string | null + libreTranslateApiKey: string | null + silencedHosts: Array + experimentalFeatures: Json + enableServerMachineStats: boolean + enableIdenticonGeneration: boolean + donationLink: string | null + moreUrls: Json + markLocalFilesNsfwByDefault: boolean + antennaLimit: number +} + +export declare function metaToPugArgs(meta: Meta): PugArgs + +export interface Migrations { + id: number + timestamp: number + name: string +} + +export interface ModerationLog { + id: string + createdAt: DateTimeWithTimeZone + userId: string + type: string + info: Json +} + +export interface MutedNote { + id: string + noteId: string + userId: string + reason: MutedNoteReason +} + +export type MutedNoteReason = 'manual'| +'other'| +'spam'| +'word'; + +export interface Muting { + id: string + createdAt: DateTimeWithTimeZone + muteeId: string + muterId: string + expiresAt: DateTimeWithTimeZone | null +} + +/** NodeInfo schema version 2.0. */ +export interface Nodeinfo { + /** Metadata about server software in use. */ + software: Software20 + /** The protocols supported on this server. */ + protocols: Array + /** The third party sites this server can connect to via their application API. */ + services: Services + /** Whether this server allows open self-registration. */ + openRegistrations: boolean + /** Usage statistics for this server. */ + usage: Usage + /** Free form key value pairs for software specific values. Clients should not rely on any specific key present. */ + metadata: Record +} + +export declare function nodeinfo_2_0(): Promise + +export declare function nodeinfo_2_1(): Promise + +export interface Note { + id: string + createdAt: DateTimeWithTimeZone + replyId: string | null + renoteId: string | null + text: string | null + name: string | null + cw: string | null + userId: string + localOnly: boolean + renoteCount: number + repliesCount: number + reactions: Json + visibility: NoteVisibility + uri: string | null + score: number + fileIds: Array + attachedFileTypes: Array + visibleUserIds: Array + mentions: Array + mentionedRemoteUsers: string + emojis: Array + tags: Array + hasPoll: boolean + userHost: string | null + replyUserId: string | null + replyUserHost: string | null + renoteUserId: string | null + renoteUserHost: string | null + url: string | null + channelId: string | null + threadId: string | null + updatedAt: DateTimeWithTimeZone | null + lang: string | null + scheduledAt: DateTimeWithTimeZone | null +} + +export interface NoteEdit { + id: string + noteId: string + text: string | null + cw: string | null + fileIds: Array + updatedAt: DateTimeWithTimeZone + emojis: Array +} + +export declare enum NoteEvent { + Delete = 0, + React = 1, + Unreact = 2, + Reply = 3, + Update = 4, + Vote = 5 +} + +export interface NoteFavorite { + id: string + createdAt: DateTimeWithTimeZone + userId: string + noteId: string +} + +export interface NoteFile { + serialNo: number + noteId: string + fileId: string +} + +export interface NoteLikeForIsQuote { + renoteId: string | null + text: string | null + hasPoll: boolean + fileIds: Array +} + +export interface NoteReaction { + id: string + createdAt: DateTimeWithTimeZone + userId: string + noteId: string + reaction: string +} + +export interface NoteThreadMuting { + id: string + createdAt: DateTimeWithTimeZone + userId: string + threadId: string +} + +export interface NoteUnread { + id: string + userId: string + noteId: string + noteUserId: string + isSpecified: boolean + isMentioned: boolean + noteChannelId: string | null +} + +export type NoteVisibility = 'followers'| +'hidden'| +'home'| +'public'| +'specified'; + +export interface NoteWatching { + id: string + createdAt: DateTimeWithTimeZone + userId: string + noteId: string + noteUserId: string +} + +export interface Notification { + id: string + createdAt: DateTimeWithTimeZone + notifieeId: string + notifierId: string | null + isRead: boolean + noteId: string | null + reaction: string | null + choice: number | null + followRequestId: string | null + type: NotificationType + userGroupInvitationId: string | null + customBody: string | null + customHeader: string | null + customIcon: string | null + appAccessTokenId: string | null +} + +export type NotificationType = 'app'| +'follow'| +'followRequestAccepted'| +'groupInvited'| +'mention'| +'pollEnded'| +'pollVote'| +'quote'| +'reaction'| +'receiveFollowRequest'| +'renote'| +'reply'; + +/** + * Converts the given text into the cat language. + * + * refs: + * * + * * + * + * # Arguments + * + * * `text` : original text + * * `lang` : language code (e.g., `Some("en")`, `Some("en-US")`, `Some("uk-UA")`, `None`) + * + * # Example + * + * ``` + * # use backend_rs::misc::nyaify::nyaify; + * assert_eq!(nyaify("I'll take a nap.", Some("en")), "I'll take a nyap."); + * ``` + */ +export declare function nyaify(text: string, lang?: string | undefined | null): string + +export interface ObjectStorageConfig { + managed?: boolean + baseUrl?: string + bucket?: string + prefix?: string + endpoint?: string + region?: string + accessKey?: string + secretKey?: string + useSsl?: boolean + connnectOverProxy?: boolean + setPublicReadOnUpload?: boolean + s3ForcePathStyle?: boolean +} + +/** The third party sites this server can publish messages to on the behalf of a user. */ +export declare enum Outbound { + Atom1 = 0, + Blogger = 1, + Buddycloud = 2, + Diaspora = 3, + Dreamwidth = 4, + Drupal = 5, + Facebook = 6, + Friendica = 7, + Gnusocial = 8, + Google = 9, + Insanejournal = 10, + Libertree = 11, + Linkedin = 12, + Livejournal = 13, + Mediagoblin = 14, + Myspace = 15, + Pinterest = 16, + Pnut = 17, + Posterous = 18, + Pumpio = 19, + Redmatrix = 20, + Rss2 = 21, + Smtp = 22, + Tent = 23, + Tumblr = 24, + Twitter = 25, + Wordpress = 26, + Xmpp = 27 +} + +export interface PackedEmoji { + id: string + aliases: Array + name: string + category: string | null + host: string | null + url: string + license: string | null + width: number | null + height: number | null +} + +export interface Page { + id: string + createdAt: DateTimeWithTimeZone + updatedAt: DateTimeWithTimeZone + title: string + name: string + summary: string | null + alignCenter: boolean + font: string + userId: string + eyeCatchingImageId: string | null + content: Json + variables: Json + visibility: PageVisibility + visibleUserIds: Array + likedCount: number + hideTitleWhenPinned: boolean + script: string + isPublic: boolean +} + +export interface PageLike { + id: string + createdAt: DateTimeWithTimeZone + userId: string + pageId: string +} + +export type PageVisibility = 'followers'| +'public'| +'specified'; + +export interface PartialNoteToCheckWordMute { + fileIds: Array + text: string | null + cw: string | null + renoteId: string | null + replyId: string | null +} + +export interface PasswordResetRequest { + id: string + createdAt: DateTimeWithTimeZone + token: string + userId: string +} + +export interface Poll { + noteId: string + expiresAt: DateTimeWithTimeZone | null + multiple: boolean + choices: Array + votes: Array + noteVisibility: PollNoteVisibility + userId: string + userHost: string | null +} + +export type PollNoteVisibility = 'followers'| +'home'| +'public'| +'specified'; + +export interface PollVote { + id: string + createdAt: DateTimeWithTimeZone + userId: string + noteId: string + choice: number +} + +export interface PromoNote { + noteId: string + expiresAt: DateTimeWithTimeZone + userId: string +} + +export interface PromoRead { + id: string + createdAt: DateTimeWithTimeZone + userId: string + noteId: string +} + +export declare enum Protocol { + Activitypub = 0, + Buddycloud = 1, + Dfrn = 2, + Diaspora = 3, + Libertree = 4, + Ostatus = 5, + Pumpio = 6, + Tent = 7, + Xmpp = 8, + Zot = 9 +} + +export declare function publishToBroadcastStream(emoji: PackedEmoji): Promise + +export declare function publishToChannelStream(channelId: string, userId: string): Promise + +export declare function publishToChatIndexStream(userId: string, kind: ChatIndexEvent, object: any): Promise + +export declare function publishToChatStream(senderUserId: string, receiverUserId: string, kind: ChatEvent, object: any): Promise + +export declare function publishToDriveFileStream(userId: string, kind: DriveFileEvent, object: any): Promise + +export declare function publishToDriveFolderStream(userId: string, kind: DriveFolderEvent, object: any): Promise + +export declare function publishToGroupChatStream(groupId: string, kind: ChatEvent, object: any): Promise + +export declare function publishToInternalStream(kind: InternalEvent, object: any): Promise + +export declare function publishToMainStream(userId: string, kind: Event, object: any): Promise + +export declare function publishToModerationStream(moderatorId: string, report: AbuseUserReportLike): Promise + +export declare function publishToNotesStream(note: Note): Promise + +export declare function publishToNoteStream(noteId: string, kind: NoteEvent, object: any): Promise + +export declare function publishToNoteUpdatesStream(note: Note): Promise + +export declare function publishToUserStream(userId: string, kind: UserEvent, object: any): Promise + +export interface PugArgs { + img: string | null + title: string + instanceName: string + desc: string | null + icon: string | null + splashIcon: string | null + themeColor: string | null + randomMotd: string + privateMode: boolean | null +} + +export type PushNotificationKind = 'generic'| +'chat'| +'readAllChats'| +'readAllChatsInTheRoom'| +'readNotifications'| +'readAllNotifications'| +'mastodon'; + +export type PushSubscriptionType = 'adminReport'| +'adminSignUp'| +'favourite'| +'follow'| +'followRequest'| +'mention'| +'poll'| +'reblog'| +'status'| +'update'; + +export interface RedisConfig { + host: string + port: number + family?: number + user?: string + pass?: string + tls?: TlsConfig + db: number + prefix?: string +} + +export interface RegistrationTicket { + id: string + createdAt: DateTimeWithTimeZone + code: string +} + +export interface RegistryItem { + id: string + createdAt: DateTimeWithTimeZone + updatedAt: DateTimeWithTimeZone + userId: string + key: string + scope: Array + domain: string | null + value: Json | null +} + +export interface Relay { + id: string + inbox: string + status: RelayStatus +} + +export type RelayStatus = 'accepted'| +'rejected'| +'requesting'; + +/** Delete all entries in the [attestation_challenge] table created at more than 5 minutes ago */ +export declare function removeOldAttestationChallenges(): Promise + +export declare function renderFollowRelay(relayId: string): Promise + +export interface RenoteMuting { + id: string + createdAt: DateTimeWithTimeZone + muteeId: string + muterId: string +} + +export interface ReplyMuting { + id: string + createdAt: DateTimeWithTimeZone + muteeId: string + muterId: string +} + +/** Returns `true` if `src` does not contain suspicious characters like `%`. */ +export declare function safeForSql(src: string): boolean + +export declare function sendPushNotification(receiverUserId: string, kind: PushNotificationKind, content: any): Promise + +export interface ServerConfig { + url: string + port: number + /** the host address to bind to */ + bind?: string + disableHsts?: boolean + /** PostgreSQL configurations */ + db: DbConfig + /** Redis configurations */ + redis: RedisConfig + /** secondary Redis server configurations */ + cacheServer?: RedisConfig + /** proxy host used for HTTP requests */ + proxy?: string + /** proxy host used for SMTP requests */ + proxySmtp?: string + /** hosts to bypass the proxy */ + proxyBypassHosts?: Array + allowedPrivateNetworks?: Array + /** maximum file size that can be uploaded to the drive (in bytes) */ + maxFileSize?: number + accessLog?: string + clusterLimits?: WorkerConfigInternal + cuid?: IdConfig + outgoingAddress?: string + deliverJobConcurrency?: number + inboxJobConcurrency?: number + deliverJobPerSec?: number + inboxJobPerSec?: number + deliverJobMaxAttempts?: number + inboxJobMaxAttempts?: number + /** deprecated in favor of `max_log_level` */ + logLevel?: Array + /** verbosity of the server log. `error`, `warn`, `info`, `debug`, or `trace` */ + maxLogLevel?: string + syslog?: SysLogConfig + proxyRemoteFiles?: boolean + mediaProxy?: string + summalyProxyUrl?: string + reservedUsernames?: Array + maxUserSignups?: number + isManagedHosting?: boolean + maxNoteLength?: number + maxCaptionLength?: number + deepl?: DeepLConfig + libreTranslate?: LibreTranslateConfig + email?: EmailConfig + objectStorage?: ObjectStorageConfig +} + +/** The third party sites this server can connect to via their application API. */ +export interface Services { + /** The third party sites this server can retrieve messages from for combined display with regular traffic. */ + inbound: Array + /** The third party sites this server can publish messages to on the behalf of a user. */ + outbound: Array +} + +export declare function shouldNyaify(readerUserId: string): Promise + +/** Prints the server hardware information as the server info log. */ +export declare function showServerInfo(): void + +export interface Signin { + id: string + createdAt: DateTimeWithTimeZone + userId: string + ip: string + headers: Json + success: boolean +} + +/** Metadata about server software in use (version 2.0). */ +export interface Software20 { + /** The canonical name of this server software. */ + name: string + /** The version of this server software. */ + version: string +} + +/** Escapes `%` and `\` in the given string. */ +export declare function sqlLikeEscape(src: string): string + +export declare function sqlRegexEscape(src: string): string + +export interface Storage { + /** Total storage space in bytes */ + total: number + /** Used storage space in bytes */ + used: number +} + +export declare function storageUsage(): Storage | null + +export declare function stringToAcct(acct: string): Acct + +export interface SwSubscription { + id: string + createdAt: DateTimeWithTimeZone + userId: string + endpoint: string + auth: string + publickey: string + sendReadMessage: boolean + appAccessTokenId: string | null + subscriptionTypes: Array +} + +export interface SysLogConfig { + host: string + port: number +} + +export interface TlsConfig { + host: string + rejectUnauthorized: boolean +} + +export declare function toDbReaction(reaction?: string | undefined | null, host?: string | undefined | null): Promise + +export declare function toPuny(host: string): string + +export declare function translate(text: string, sourceLang: string | undefined | null, targetLang: string): Promise + +export interface Translation { + sourceLang: string + text: string +} + +export declare function unwatchNote(watcherId: string, noteId: string): Promise + +export declare function updateAntennaCache(): Promise + +export declare function updateAntennasOnNewNote(note: Note, noteAuthor: Acct, noteMutedUsers: Array): Promise + +export declare function updateMetaCache(): Promise + +export declare function updateNodeinfoCache(): Promise + +/** Usage statistics for this server. */ +export interface Usage { + users: Users + localPosts: number | null + localComments: number | null +} + +export interface UsedUsername { + username: string + createdAt: DateTimeWithTimeZone +} + +export interface User { + id: string + createdAt: DateTimeWithTimeZone + updatedAt: DateTimeWithTimeZone | null + lastFetchedAt: DateTimeWithTimeZone | null + username: string + usernameLower: string + name: string | null + followersCount: number + followingCount: number + notesCount: number + avatarId: string | null + bannerId: string | null + tags: Array + isSuspended: boolean + isSilenced: boolean + isLocked: boolean + isBot: boolean + isCat: boolean + isAdmin: boolean + isModerator: boolean + emojis: Array + host: string | null + inbox: string | null + sharedInbox: string | null + featured: string | null + uri: string | null + token: string | null + isExplorable: boolean + followersUri: string | null + lastActiveDate: DateTimeWithTimeZone | null + hideOnlineStatus: boolean + isDeleted: boolean + driveCapacityOverrideMb: number | null + movedToUri: string | null + speakAsCat: boolean + emojiModPerm: UserEmojiModPerm + isIndexable: boolean + alsoKnownAs: Array | null + readCatLanguage: boolean +} + +export type UserEmojiModPerm = 'add'| +'full'| +'mod'| +'unauthorized'; + +export declare enum UserEvent { + Disconnect = 0, + FollowChannel = 1, + UnfollowChannel = 2, + UpdateProfile = 3, + Mute = 4, + Unmute = 5, + Follow = 6, + Unfollow = 7 +} + +export interface UserGroup { + id: string + createdAt: DateTimeWithTimeZone + name: string + userId: string + isPrivate: boolean +} + +export interface UserGroupInvitation { + id: string + createdAt: DateTimeWithTimeZone + userId: string + userGroupId: string +} + +export interface UserGroupInvite { + id: string + createdAt: DateTimeWithTimeZone + userId: string + userGroupId: string +} + +export interface UserGroupJoining { + id: string + createdAt: DateTimeWithTimeZone + userId: string + userGroupId: string +} + +export interface UserIp { + id: number + createdAt: DateTimeWithTimeZone + userId: string + ip: string +} + +export interface UserKeypair { + userId: string + publicKey: string + privateKey: string +} + +export interface UserList { + id: string + createdAt: DateTimeWithTimeZone + userId: string + name: string +} + +export interface UserListJoining { + id: string + createdAt: DateTimeWithTimeZone + userId: string + userListId: string +} + +export interface UserNotePining { + id: string + createdAt: DateTimeWithTimeZone + userId: string + noteId: string +} + +export interface UserPending { + id: string + createdAt: DateTimeWithTimeZone + code: string + username: string + email: string + password: string +} + +export interface UserProfile { + userId: string + location: string | null + birthday: string | null + description: string | null + fields: Json + url: string | null + email: string | null + emailVerifyCode: string | null + emailVerified: boolean + twoFactorTempSecret: string | null + twoFactorSecret: string | null + twoFactorEnabled: boolean + password: string | null + autoAcceptFollowed: boolean + alwaysMarkNsfw: boolean + carefulBot: boolean + userHost: string | null + securityKeysAvailable: boolean + usePasswordLessLogin: boolean + pinnedPageId: string | null + injectFeaturedNote: boolean + enableWordMute: boolean + mutingNotificationTypes: Array + noCrawle: boolean + receiveAnnouncementEmail: boolean + emailNotificationTypes: Json + publicReactions: boolean + ffVisibility: UserProfileFfvisibility + moderationNote: string + preventAiLearning: boolean + isIndexable: boolean + mutedPatterns: Array + mentions: Json + mutedInstances: Array + mutedWords: Array + lang: string | null +} + +export type UserProfileFfvisibility = 'followers'| +'private'| +'public'; + +export type UserProfileMutingNotificationTypes = 'app'| +'follow'| +'followRequestAccepted'| +'groupInvited'| +'mention'| +'pollEnded'| +'pollVote'| +'quote'| +'reaction'| +'receiveFollowRequest'| +'renote'| +'reply'; + +export interface UserPublickey { + userId: string + keyId: string + keyPem: string +} + +/** statistics about the users of this server. */ +export interface Users { + total: number | null + activeHalfyear: number | null + activeMonth: number | null +} + +export interface UserSecurityKey { + id: string + userId: string + publicKey: string + lastUsed: DateTimeWithTimeZone + name: string +} + +/** Checks whether the given password and hash match. */ +export declare function verifyPassword(password: string, hash: string): boolean + +export declare function watchNote(watcherId: string, noteAuthorId: string, noteId: string): Promise + +export interface Webhook { + id: string + createdAt: DateTimeWithTimeZone + userId: string + name: string + on: Array + url: string + secret: string + active: boolean + latestSentAt: DateTimeWithTimeZone | null + latestStatus: number | null +} + +export interface WorkerConfig { + web: number + queue: number +} + +export interface WorkerConfigInternal { + web?: number + queue?: number +} + diff --git a/packages/backend-rs/index.js b/packages/backend-rs/index.js new file mode 100644 index 0000000..9ca4963 --- /dev/null +++ b/packages/backend-rs/index.js @@ -0,0 +1,462 @@ +// prettier-ignore +/* eslint-disable */ +/* auto-generated by NAPI-RS */ + +const { readFileSync } = require('fs') + +let nativeBinding = null +const loadErrors = [] + +const isMusl = () => { + let musl = false + if (process.platform === 'linux') { + musl = isMuslFromFilesystem() + if (musl === null) { + musl = isMuslFromReport() + } + if (musl === null) { + musl = isMuslFromChildProcess() + } + } + return musl +} + +const isFileMusl = (f) => f.includes('libc.musl-') || f.includes('ld-musl-') + +const isMuslFromFilesystem = () => { + try { + return readFileSync('/usr/bin/ldd', 'utf-8').includes('musl') + } catch { + return null + } +} + +const isMuslFromReport = () => { + const report = typeof process.report.getReport === 'function' ? process.report.getReport() : null + if (!report) { + return null + } + if (report.header && report.header.glibcVersionRuntime) { + return false + } + if (Array.isArray(report.sharedObjects)) { + if (report.sharedObjects.some(isFileMusl)) { + return true + } + } + return false +} + +const isMuslFromChildProcess = () => { + try { + return require('child_process').execSync('ldd --version', { encoding: 'utf8' }).includes('musl') + } catch (e) { + // If we reach this case, we don't know if the system is musl or not, so is better to just fallback to false + return false + } +} + +function requireNative() { + if (process.platform === 'android') { + if (process.arch === 'arm64') { + try { + return require('./backend-rs.android-arm64.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('backend-rs-android-arm64') + } catch (e) { + loadErrors.push(e) + } + + } else if (process.arch === 'arm') { + try { + return require('./backend-rs.android-arm-eabi.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('backend-rs-android-arm-eabi') + } catch (e) { + loadErrors.push(e) + } + + } else { + loadErrors.push(new Error(`Unsupported architecture on Android ${process.arch}`)) + } + } else if (process.platform === 'win32') { + if (process.arch === 'x64') { + try { + return require('./backend-rs.win32-x64-msvc.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('backend-rs-win32-x64-msvc') + } catch (e) { + loadErrors.push(e) + } + + } else if (process.arch === 'ia32') { + try { + return require('./backend-rs.win32-ia32-msvc.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('backend-rs-win32-ia32-msvc') + } catch (e) { + loadErrors.push(e) + } + + } else if (process.arch === 'arm64') { + try { + return require('./backend-rs.win32-arm64-msvc.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('backend-rs-win32-arm64-msvc') + } catch (e) { + loadErrors.push(e) + } + + } else { + loadErrors.push(new Error(`Unsupported architecture on Windows: ${process.arch}`)) + } + } else if (process.platform === 'darwin') { + try { + return require('./backend-rs.darwin-universal.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('backend-rs-darwin-universal') + } catch (e) { + loadErrors.push(e) + } + + if (process.arch === 'x64') { + try { + return require('./backend-rs.darwin-x64.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('backend-rs-darwin-x64') + } catch (e) { + loadErrors.push(e) + } + + } else if (process.arch === 'arm64') { + try { + return require('./backend-rs.darwin-arm64.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('backend-rs-darwin-arm64') + } catch (e) { + loadErrors.push(e) + } + + } else { + loadErrors.push(new Error(`Unsupported architecture on macOS: ${process.arch}`)) + } + } else if (process.platform === 'freebsd') { + if (process.arch === 'x64') { + try { + return require('./backend-rs.freebsd-x64.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('backend-rs-freebsd-x64') + } catch (e) { + loadErrors.push(e) + } + + } else if (process.arch === 'arm64') { + try { + return require('./backend-rs.freebsd-arm64.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('backend-rs-freebsd-arm64') + } catch (e) { + loadErrors.push(e) + } + + } else { + loadErrors.push(new Error(`Unsupported architecture on FreeBSD: ${process.arch}`)) + } + } else if (process.platform === 'linux') { + if (process.arch === 'x64') { + if (isMusl()) { + try { + return require('./backend-rs.linux-x64-musl.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('backend-rs-linux-x64-musl') + } catch (e) { + loadErrors.push(e) + } + + } else { + try { + return require('./backend-rs.linux-x64-gnu.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('backend-rs-linux-x64-gnu') + } catch (e) { + loadErrors.push(e) + } + + } + } else if (process.arch === 'arm64') { + if (isMusl()) { + try { + return require('./backend-rs.linux-arm64-musl.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('backend-rs-linux-arm64-musl') + } catch (e) { + loadErrors.push(e) + } + + } else { + try { + return require('./backend-rs.linux-arm64-gnu.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('backend-rs-linux-arm64-gnu') + } catch (e) { + loadErrors.push(e) + } + + } + } else if (process.arch === 'arm') { + if (isMusl()) { + try { + return require('./backend-rs.linux-arm-musleabihf.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('backend-rs-linux-arm-musleabihf') + } catch (e) { + loadErrors.push(e) + } + + } else { + try { + return require('./backend-rs.linux-arm-gnueabihf.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('backend-rs-linux-arm-gnueabihf') + } catch (e) { + loadErrors.push(e) + } + + } + } else if (process.arch === 'riscv64') { + if (isMusl()) { + try { + return require('./backend-rs.linux-riscv64-musl.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('backend-rs-linux-riscv64-musl') + } catch (e) { + loadErrors.push(e) + } + + } else { + try { + return require('./backend-rs.linux-riscv64-gnu.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('backend-rs-linux-riscv64-gnu') + } catch (e) { + loadErrors.push(e) + } + + } + } else if (process.arch === 'ppc64') { + try { + return require('./backend-rs.linux-ppc64-gnu.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('backend-rs-linux-ppc64-gnu') + } catch (e) { + loadErrors.push(e) + } + + } else if (process.arch === 's390x') { + try { + return require('./backend-rs.linux-s390x-gnu.node') + } catch (e) { + loadErrors.push(e) + } + try { + return require('backend-rs-linux-s390x-gnu') + } catch (e) { + loadErrors.push(e) + } + + } else { + loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`)) + } + } else { + loadErrors.push(new Error(`Unsupported OS: ${process.platform}, architecture: ${process.arch}`)) + } +} + +nativeBinding = requireNative() + +if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) { + try { + nativeBinding = require('./backend-rs.wasi.cjs') + } catch (err) { + if (process.env.NAPI_RS_FORCE_WASI) { + loadErrors.push(err) + } + } + if (!nativeBinding) { + try { + nativeBinding = require('backend-rs-wasm32-wasi') + } catch (err) { + if (process.env.NAPI_RS_FORCE_WASI) { + loadErrors.push(err) + } + } + } +} + +if (!nativeBinding) { + if (loadErrors.length > 0) { + // TODO Link to documentation with potential fixes + // - The package owner could build/publish bindings for this arch + // - The user may need to bundle the correct files + // - The user may need to re-install node_modules to get new packages + throw new Error('Failed to load native binding', { cause: loadErrors }) + } + throw new Error(`Failed to load native binding`) +} + +module.exports.acctToString = nativeBinding.acctToString +module.exports.Activity = nativeBinding.Activity +module.exports.AntennaSrc = nativeBinding.AntennaSrc +module.exports.ChatEvent = nativeBinding.ChatEvent +module.exports.ChatIndexEvent = nativeBinding.ChatIndexEvent +module.exports.checkWordMute = nativeBinding.checkWordMute +module.exports.countLocalUsers = nativeBinding.countLocalUsers +module.exports.countReactions = nativeBinding.countReactions +module.exports.cpuInfo = nativeBinding.cpuInfo +module.exports.cpuUsage = nativeBinding.cpuUsage +module.exports.decodeReaction = nativeBinding.decodeReaction +module.exports.DriveFileEvent = nativeBinding.DriveFileEvent +module.exports.DriveFileUsageHint = nativeBinding.DriveFileUsageHint +module.exports.DriveFolderEvent = nativeBinding.DriveFolderEvent +module.exports.Event = nativeBinding.Event +module.exports.extractHost = nativeBinding.extractHost +module.exports.fetchMeta = nativeBinding.fetchMeta +module.exports.fetchNodeinfo = nativeBinding.fetchNodeinfo +module.exports.formatMilliseconds = nativeBinding.formatMilliseconds +module.exports.generateSecureRandomString = nativeBinding.generateSecureRandomString +module.exports.generateUserToken = nativeBinding.generateUserToken +module.exports.genId = nativeBinding.genId +module.exports.genIdAt = nativeBinding.genIdAt +module.exports.getFullApAccount = nativeBinding.getFullApAccount +module.exports.getImageSizeFromUrl = nativeBinding.getImageSizeFromUrl +module.exports.getInstanceActor = nativeBinding.getInstanceActor +module.exports.getNoteSummary = nativeBinding.getNoteSummary +module.exports.getRelayActorId = nativeBinding.getRelayActorId +module.exports.getTimestamp = nativeBinding.getTimestamp +module.exports.greet = nativeBinding.greet +module.exports.hashPassword = nativeBinding.hashPassword +module.exports.Inbound = nativeBinding.Inbound +module.exports.initializeRustLogger = nativeBinding.initializeRustLogger +module.exports.InternalEvent = nativeBinding.InternalEvent +module.exports.isAllowedServer = nativeBinding.isAllowedServer +module.exports.isBlockedServer = nativeBinding.isBlockedServer +module.exports.isOldPasswordAlgorithm = nativeBinding.isOldPasswordAlgorithm +module.exports.isQuote = nativeBinding.isQuote +module.exports.isSafeUrl = nativeBinding.isSafeUrl +module.exports.isSameOrigin = nativeBinding.isSameOrigin +module.exports.isSelfHost = nativeBinding.isSelfHost +module.exports.isSilencedServer = nativeBinding.isSilencedServer +module.exports.isUnicodeEmoji = nativeBinding.isUnicodeEmoji +module.exports.latestVersion = nativeBinding.latestVersion +module.exports.loadConfig = nativeBinding.loadConfig +module.exports.memoryUsage = nativeBinding.memoryUsage +module.exports.metaToPugArgs = nativeBinding.metaToPugArgs +module.exports.MutedNoteReason = nativeBinding.MutedNoteReason +module.exports.nodeinfo_2_0 = nativeBinding.nodeinfo_2_0 +module.exports.nodeinfo_2_1 = nativeBinding.nodeinfo_2_1 +module.exports.NoteEvent = nativeBinding.NoteEvent +module.exports.NoteVisibility = nativeBinding.NoteVisibility +module.exports.NotificationType = nativeBinding.NotificationType +module.exports.nyaify = nativeBinding.nyaify +module.exports.Outbound = nativeBinding.Outbound +module.exports.PageVisibility = nativeBinding.PageVisibility +module.exports.PollNoteVisibility = nativeBinding.PollNoteVisibility +module.exports.Protocol = nativeBinding.Protocol +module.exports.publishToBroadcastStream = nativeBinding.publishToBroadcastStream +module.exports.publishToChannelStream = nativeBinding.publishToChannelStream +module.exports.publishToChatIndexStream = nativeBinding.publishToChatIndexStream +module.exports.publishToChatStream = nativeBinding.publishToChatStream +module.exports.publishToDriveFileStream = nativeBinding.publishToDriveFileStream +module.exports.publishToDriveFolderStream = nativeBinding.publishToDriveFolderStream +module.exports.publishToGroupChatStream = nativeBinding.publishToGroupChatStream +module.exports.publishToInternalStream = nativeBinding.publishToInternalStream +module.exports.publishToMainStream = nativeBinding.publishToMainStream +module.exports.publishToModerationStream = nativeBinding.publishToModerationStream +module.exports.publishToNotesStream = nativeBinding.publishToNotesStream +module.exports.publishToNoteStream = nativeBinding.publishToNoteStream +module.exports.publishToNoteUpdatesStream = nativeBinding.publishToNoteUpdatesStream +module.exports.publishToUserStream = nativeBinding.publishToUserStream +module.exports.PushNotificationKind = nativeBinding.PushNotificationKind +module.exports.PushSubscriptionType = nativeBinding.PushSubscriptionType +module.exports.RelayStatus = nativeBinding.RelayStatus +module.exports.removeOldAttestationChallenges = nativeBinding.removeOldAttestationChallenges +module.exports.renderFollowRelay = nativeBinding.renderFollowRelay +module.exports.safeForSql = nativeBinding.safeForSql +module.exports.sendPushNotification = nativeBinding.sendPushNotification +module.exports.shouldNyaify = nativeBinding.shouldNyaify +module.exports.showServerInfo = nativeBinding.showServerInfo +module.exports.sqlLikeEscape = nativeBinding.sqlLikeEscape +module.exports.sqlRegexEscape = nativeBinding.sqlRegexEscape +module.exports.storageUsage = nativeBinding.storageUsage +module.exports.stringToAcct = nativeBinding.stringToAcct +module.exports.toDbReaction = nativeBinding.toDbReaction +module.exports.toPuny = nativeBinding.toPuny +module.exports.translate = nativeBinding.translate +module.exports.unwatchNote = nativeBinding.unwatchNote +module.exports.updateAntennaCache = nativeBinding.updateAntennaCache +module.exports.updateAntennasOnNewNote = nativeBinding.updateAntennasOnNewNote +module.exports.updateMetaCache = nativeBinding.updateMetaCache +module.exports.updateNodeinfoCache = nativeBinding.updateNodeinfoCache +module.exports.UserEmojiModPerm = nativeBinding.UserEmojiModPerm +module.exports.UserEvent = nativeBinding.UserEvent +module.exports.UserProfileFfvisibility = nativeBinding.UserProfileFfvisibility +module.exports.UserProfileMutingNotificationTypes = nativeBinding.UserProfileMutingNotificationTypes +module.exports.verifyPassword = nativeBinding.verifyPassword +module.exports.watchNote = nativeBinding.watchNote diff --git a/packages/backend-rs/package.json b/packages/backend-rs/package.json new file mode 100644 index 0000000..a33effc --- /dev/null +++ b/packages/backend-rs/package.json @@ -0,0 +1,17 @@ +{ + "name": "backend-rs", + "version": "0.0.0", + "main": "built/index.js", + "types": "built/index.d.ts", + "license": "AGPL-3.0-only", + "napi": { + "binaryName": "backend-rs" + }, + "devDependencies": { + "@napi-rs/cli": "3.0.0-alpha.62" + }, + "scripts": { + "build": "napi build --features napi --no-const-enum --platform --release --output-dir ./built/", + "build:debug": "napi build --features napi --no-const-enum --platform --output-dir ./built/ --dts-header '/* auto-generated by NAPI-RS */\n/* Do NOT edit this file manually */\n\ntype DateTimeWithTimeZone = Date;\n\ntype Json = any;\n\n'" + } +} diff --git a/packages/backend-rs/src/config/meta.rs b/packages/backend-rs/src/config/meta.rs new file mode 100644 index 0000000..969d9d3 --- /dev/null +++ b/packages/backend-rs/src/config/meta.rs @@ -0,0 +1,94 @@ +//! Server information + +use crate::{database::db_conn, model::entity::meta}; +use sea_orm::{prelude::*, ActiveValue}; +use std::sync::Mutex; + +type Meta = meta::Model; + +static CACHE: Mutex> = Mutex::new(None); +fn set_cache(meta: &Meta) { + let _ = CACHE.lock().map(|mut cache| *cache = Some(meta.clone())); +} + +#[macros::export(js_name = "fetchMeta")] +pub async fn local_server_info() -> Result { + local_server_info_impl(true).await +} + +#[macros::export(js_name = "updateMetaCache")] +pub async fn update() -> Result<(), DbErr> { + local_server_info_impl(false).await?; + Ok(()) +} + +async fn local_server_info_impl(use_cache: bool) -> Result { + // try using cache + if use_cache { + if let Some(cache) = CACHE.lock().ok().and_then(|cache| cache.clone()) { + return Ok(cache); + } + } + + // try fetching from db + let db = db_conn().await?; + let meta = meta::Entity::find().one(db).await?; + if let Some(meta) = meta { + set_cache(&meta); + return Ok(meta); + } + + // create a new meta object and insert into db + let meta = meta::Entity::insert(meta::ActiveModel { + id: ActiveValue::Set("x".to_owned()), + ..Default::default() + }) + .exec_with_returning(db) + .await?; + set_cache(&meta); + Ok(meta) +} + +#[macros::export(object)] +pub struct PugArgs { + pub img: Option, + pub title: String, + pub instance_name: String, + pub desc: Option, + pub icon: Option, + pub splash_icon: Option, + pub theme_color: Option, + pub random_motd: String, + pub private_mode: Option, +} + +#[macros::ts_export] +pub fn meta_to_pug_args(meta: Meta) -> PugArgs { + use rand::prelude::*; + let mut rng = rand::thread_rng(); + + let splash_icon = meta + .custom_splash_icons + .choose(&mut rng) + .map(|s| s.to_owned()) + .or_else(|| meta.icon_url.to_owned()); + + let random_motd = meta + .custom_motd + .choose(&mut rng) + .map(|s| s.to_owned()) + .unwrap_or_else(|| "Loading...".to_owned()); + + let name = meta.name.unwrap_or_else(|| "Firefish".to_owned()); + PugArgs { + img: meta.banner_url, + title: name.clone(), + instance_name: name.clone(), + desc: meta.description, + icon: meta.icon_url, + splash_icon, + theme_color: meta.theme_color, + random_motd, + private_mode: meta.private_mode, + } +} diff --git a/packages/backend-rs/src/config/mod.rs b/packages/backend-rs/src/config/mod.rs new file mode 100644 index 0000000..e447d4b --- /dev/null +++ b/packages/backend-rs/src/config/mod.rs @@ -0,0 +1,7 @@ +//! Server configurations and environment variables + +pub use meta::local_server_info; +pub use server::CONFIG; + +pub mod meta; +pub mod server; diff --git a/packages/backend-rs/src/config/server.rs b/packages/backend-rs/src/config/server.rs new file mode 100644 index 0000000..37af358 --- /dev/null +++ b/packages/backend-rs/src/config/server.rs @@ -0,0 +1,353 @@ +//! Server configuration + +use once_cell::sync::Lazy; +use serde::Deserialize; +use std::{env, fs}; + +pub const VERSION: &str = macros::read_version_from_package_json!(); + +#[derive(Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::export(object, use_nullable = false)] +struct ServerConfig { + pub url: String, + pub port: u16, + /// the host address to bind to + pub bind: Option, + pub disable_hsts: Option, + + /// PostgreSQL configurations + pub db: DbConfig, + /// Redis configurations + pub redis: RedisConfig, + /// secondary Redis server configurations + pub cache_server: Option, + + /// proxy host used for HTTP requests + pub proxy: Option, + /// proxy host used for SMTP requests + pub proxy_smtp: Option, + /// hosts to bypass the proxy + pub proxy_bypass_hosts: Option>, + + pub allowed_private_networks: Option>, + // TODO: i64 -> u64 (NapiValue is not implemented for u64) + /// maximum file size that can be uploaded to the drive (in bytes) + pub max_file_size: Option, + pub access_log: Option, + pub cluster_limits: Option, + pub cuid: Option, + pub outgoing_address: Option, + + pub deliver_job_concurrency: Option, + pub inbox_job_concurrency: Option, + pub deliver_job_per_sec: Option, + pub inbox_job_per_sec: Option, + pub deliver_job_max_attempts: Option, + pub inbox_job_max_attempts: Option, + + /// deprecated in favor of `max_log_level` + pub log_level: Option>, + + /// verbosity of the server log. `error`, `warn`, `info`, `debug`, or `trace` + pub max_log_level: Option, + + pub syslog: Option, + + pub proxy_remote_files: Option, + pub media_proxy: Option, + pub summaly_proxy_url: Option, + + pub reserved_usernames: Option>, + + pub max_user_signups: Option, + pub is_managed_hosting: Option, + pub max_note_length: Option, + pub max_caption_length: Option, + + pub deepl: Option, + pub libre_translate: Option, + pub email: Option, + pub object_storage: Option, +} + +#[derive(Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::export(object, use_nullable = false)] +pub struct DbConfig { + pub host: String, + pub port: u16, + pub db: String, + pub user: String, + pub pass: String, + pub disable_cache: Option, + pub extra: Option, +} + +#[derive(Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::export(object, use_nullable = false)] +pub struct RedisConfig { + pub host: String, + pub port: u16, + pub family: Option, + pub user: Option, + pub pass: Option, + pub tls: Option, + #[serde(default)] + pub db: u32, + pub prefix: Option, +} + +#[derive(Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::export(object, use_nullable = false)] +pub struct TlsConfig { + pub host: String, + pub reject_unauthorized: bool, +} + +#[macros::export(object, use_nullable = false)] +pub struct WorkerConfig { + pub web: u32, + pub queue: u32, +} + +#[derive(Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::export(object, use_nullable = false)] +pub struct WorkerConfigInternal { + pub web: Option, + pub queue: Option, +} + +#[derive(Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::export(object, use_nullable = false)] +pub struct IdConfig { + pub length: Option, + pub fingerprint: Option, +} + +#[derive(Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::export(object, use_nullable = false)] +pub struct SysLogConfig { + pub host: String, + pub port: u16, +} + +#[derive(Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::export(object, use_nullable = false)] +pub struct DeepLConfig { + pub managed: Option, + pub auth_key: Option, + pub is_pro: Option, +} + +#[derive(Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::export(object, use_nullable = false)] +pub struct LibreTranslateConfig { + pub managed: Option, + pub api_url: Option, + pub api_key: Option, +} + +#[derive(Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::export(object, use_nullable = false)] +pub struct EmailConfig { + pub managed: Option, + pub address: Option, + pub host: Option, + pub port: Option, + pub user: Option, + pub pass: Option, + pub use_implicit_ssl_tls: Option, +} + +#[derive(Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::export(object, use_nullable = false)] +pub struct ObjectStorageConfig { + pub managed: Option, + pub base_url: Option, + pub bucket: Option, + pub prefix: Option, + pub endpoint: Option, + pub region: Option, + pub access_key: Option, + pub secret_key: Option, + pub use_ssl: Option, + pub connnect_over_proxy: Option, + pub set_public_read_on_upload: Option, + pub s3_force_path_style: Option, +} + +#[macros::export(object, use_nullable = false)] +pub struct Config { + // ServerConfig (from default.yml) + pub url: String, + pub port: u16, + pub bind: Option, + pub disable_hsts: Option, + pub db: DbConfig, + pub redis: RedisConfig, + pub cache_server: Option, + pub proxy: Option, + pub proxy_smtp: Option, + pub proxy_bypass_hosts: Option>, + pub allowed_private_networks: Option>, + pub max_file_size: i64, + pub access_log: Option, + pub cluster_limits: WorkerConfig, + pub cuid: Option, + pub outgoing_address: Option, + pub deliver_job_concurrency: Option, + pub inbox_job_concurrency: Option, + pub deliver_job_per_sec: Option, + pub inbox_job_per_sec: Option, + pub deliver_job_max_attempts: Option, + pub inbox_job_max_attempts: Option, + + /// deprecated + pub log_level: Option>, + + pub max_log_level: Option, + pub syslog: Option, + pub proxy_remote_files: Option, + pub media_proxy: Option, + pub summaly_proxy_url: Option, + pub reserved_usernames: Option>, + pub max_user_signups: Option, + pub is_managed_hosting: Option, + pub max_note_length: u32, + pub max_caption_length: u32, + pub deepl: Option, + pub libre_translate: Option, + pub email: Option, + pub object_storage: Option, + + // Mixin + pub version: String, + pub host: String, + pub hostname: String, + pub redis_key_prefix: String, + pub scheme: String, + pub ws_scheme: String, + pub api_url: String, + pub ws_url: String, + pub auth_url: String, + pub drive_url: String, + pub user_agent: String, +} + +fn read_config_file() -> ServerConfig { + let cwd = env::current_dir().unwrap(); + let yml = fs::File::open(cwd.join("../../.config/default.yml")) + .expect("Failed to open '.config/default.yml'"); + let mut data: ServerConfig = + serde_yaml::from_reader(yml).expect("Failed to parse .config/default.yml"); + + data.url = url::Url::parse(&data.url) + .expect("Config url is invalid") + .origin() + .ascii_serialization(); + + if data.bind.is_none() { + data.bind = std::env::var("BIND").ok() + } + + data +} + +#[macros::export] +pub fn load_config() -> Config { + let server_config = read_config_file(); + let version = VERSION.to_owned(); + let url = url::Url::parse(&server_config.url).expect("Config url is invalid"); + let hostname = url + .host_str() + .expect("Hostname is missing in the config url") + .to_owned(); + let host = match url.port() { + Some(port) => format!("{}:{}", hostname, port), + None => hostname.clone(), + }; + let scheme = url.scheme().to_owned(); + let ws_scheme = match scheme.as_str() { + "http" => "ws", + _ => "wss", + }; + + let cluster_limits = match server_config.cluster_limits { + Some(cl) => WorkerConfig { + web: cl.web.unwrap_or(1), + queue: cl.queue.unwrap_or(1), + }, + None => WorkerConfig { web: 1, queue: 1 }, + }; + + let redis_key_prefix = if let Some(cache_server) = &server_config.cache_server { + cache_server.prefix.clone() + } else { + server_config.redis.prefix.clone() + } + .unwrap_or_else(|| hostname.clone()); + + Config { + url: server_config.url, + port: server_config.port, + bind: server_config.bind, + disable_hsts: server_config.disable_hsts, + db: server_config.db, + redis: server_config.redis, + cache_server: server_config.cache_server, + proxy: server_config.proxy, + proxy_smtp: server_config.proxy_smtp, + proxy_bypass_hosts: server_config.proxy_bypass_hosts, + allowed_private_networks: server_config.allowed_private_networks, + max_file_size: server_config.max_file_size.unwrap_or(262144000), + access_log: server_config.access_log, + cluster_limits, + cuid: server_config.cuid, + outgoing_address: server_config.outgoing_address, + deliver_job_concurrency: server_config.deliver_job_concurrency, + inbox_job_concurrency: server_config.inbox_job_concurrency, + deliver_job_per_sec: server_config.deliver_job_per_sec, + inbox_job_per_sec: server_config.inbox_job_per_sec, + deliver_job_max_attempts: server_config.deliver_job_max_attempts, + inbox_job_max_attempts: server_config.inbox_job_max_attempts, + log_level: server_config.log_level, + max_log_level: server_config.max_log_level, + syslog: server_config.syslog, + proxy_remote_files: server_config.proxy_remote_files, + media_proxy: server_config.media_proxy, + summaly_proxy_url: server_config.summaly_proxy_url, + reserved_usernames: server_config.reserved_usernames, + max_user_signups: server_config.max_user_signups, + is_managed_hosting: server_config.is_managed_hosting, + max_note_length: server_config.max_note_length.unwrap_or(3000), + max_caption_length: server_config.max_caption_length.unwrap_or(1500), + deepl: server_config.deepl, + libre_translate: server_config.libre_translate, + email: server_config.email, + object_storage: server_config.object_storage, + + ws_url: format!("{}://{}", ws_scheme, host), + api_url: format!("{}://{}/api", scheme, host), + auth_url: format!("{}://{}/auth", scheme, host), + drive_url: format!("{}://{}/files", scheme, host), + user_agent: format!("Firefish/{} ({})", version, url), + version, + host, + hostname, + redis_key_prefix, + scheme, + ws_scheme: ws_scheme.to_owned(), + } +} + +pub static CONFIG: Lazy = Lazy::new(load_config); diff --git a/packages/backend-rs/src/database/cache.rs b/packages/backend-rs/src/database/cache.rs new file mode 100644 index 0000000..d56da7f --- /dev/null +++ b/packages/backend-rs/src/database/cache.rs @@ -0,0 +1,320 @@ +//! Utilities for using Redis cache + +use crate::database::{redis_conn, redis_key, RedisConnError}; +use redis::{AsyncCommands, RedisError}; +use serde::{Deserialize, Serialize}; + +#[cfg_attr(test, derive(Debug))] +pub enum Category { + FetchUrl, + Block, + Follow, + CatLang, + #[cfg(test)] + Test, +} + +#[macros::errors] +pub enum Error { + #[error("failed to execute Redis command")] + Redis(#[from] RedisError), + #[error("bad Redis connection")] + RedisConn(#[from] RedisConnError), + #[error("failed to encode data for Redis")] + Encode(#[from] rmp_serde::encode::Error), +} + +#[inline] +fn prefix_key(key: &str) -> String { + redis_key(format!("cache:{}", key)) +} + +fn categorize(category: Category, key: &str) -> String { + let prefix = match category { + Category::FetchUrl => "fetchUrl", + Category::Block => "blocking", + Category::Follow => "following", + Category::CatLang => "catlang", + #[cfg(test)] + Category::Test => "usedOnlyForTesting", + }; + format!("{}:{}", prefix, key) +} + +#[inline] +fn wildcard(category: Category) -> String { + prefix_key(&categorize(category, "*")) +} + +/// Sets a Redis cache. +/// +/// This overwrites the exsisting cache with the same key. +/// +/// # Arguments +/// +/// * `key` : key (prefixed automatically) +/// * `value` : (de)serializable value +/// * `expire_seconds` : TTL +/// +/// # Example +/// +/// ``` +/// # use backend_rs::database::cache; +/// # async fn f() -> Result<(), Box> { +/// let key = "apple"; +/// let data = "I want to cache this string".to_owned(); +/// +/// // caches the data for 10 seconds +/// cache::set(key, &data, 10).await?; +/// +/// // get the cache +/// let cached_data = cache::get::(key).await?; +/// +/// assert!(cached_data.is_some()); +/// assert_eq!(data, cached_data.unwrap()); +/// # Ok(()) +/// # } +/// ``` +pub async fn set Deserialize<'a> + Serialize>( + key: &str, + value: &V, + expire_seconds: u64, +) -> Result<(), Error> { + redis_conn() + .await? + .set_ex( + prefix_key(key), + rmp_serde::encode::to_vec(&value)?, + expire_seconds, + ) + .await?; + Ok(()) +} + +/// Gets a Redis cache. +/// +/// If the Redis connection is fine, this returns `Ok(data)` where `data` +/// is the cached value. Returns `Ok(None)` if there is no value corresponding to `key`. +/// +/// # Argument +/// +/// * `key` : key (will be prefixed automatically) +/// +/// # Example +/// +/// ``` +/// # use backend_rs::database::cache; +/// # async fn f() -> Result<(), Box> { +/// let key = "banana"; +/// let data = "I want to cache this string".to_owned(); +/// +/// // set cache +/// cache::set(key, &data, 10).await?; +/// +/// // get cache +/// let cached_data = cache::get::(key).await?; +/// assert!(cached_data.is_some()); +/// assert_eq!(data, cached_data.unwrap()); +/// +/// // get nonexistent (or expired) cache +/// let no_cache = cache::get::("nonexistent").await?; +/// assert!(no_cache.is_none()); +/// # Ok(()) +/// # } +/// ``` +pub async fn get Deserialize<'a> + Serialize>(key: &str) -> Result, Error> { + let serialized_value: Option> = redis_conn().await?.get(prefix_key(key)).await?; + Ok(match serialized_value { + Some(v) => rmp_serde::from_slice::(v.as_ref()).ok(), + None => None, + }) +} + +/// Deletes a Redis cache. +/// +/// If the Redis connection is fine, this returns `Ok(())` +/// regardless of whether the cache exists. +/// +/// # Argument +/// +/// * `key` : key (prefixed automatically) +/// +/// # Example +/// +/// ``` +/// # use backend_rs::database::cache; +/// # async fn f() -> Result<(), Box> { +/// let key = "chocolate"; +/// let value = "I want to cache this string".to_owned(); +/// +/// // set cache +/// cache::set(key, &value, 10).await?; +/// +/// // delete the cache +/// cache::delete("foo").await?; +/// cache::delete("nonexistent").await?; // this is okay +/// +/// // the cache is gone +/// let cached_value = cache::get::("foo").await?; +/// assert!(cached_value.is_none()); +/// # Ok(()) +/// # } +/// ``` +pub async fn delete(key: &str) -> Result<(), Error> { + Ok(redis_conn().await?.del(prefix_key(key)).await?) +} + +/// Sets a Redis cache under a `category`. +/// +/// The usage is the same as [set], except that you need to +/// use [get_one] and [delete_one] to get/delete the cache. +/// +/// # Arguments +/// +/// * `category` : one of [Category] +/// * `key` : key (prefixed automatically) +/// * `value` : (de)serializable value +/// * `expire_seconds` : TTL +pub async fn set_one Deserialize<'a> + Serialize>( + category: Category, + key: &str, + value: &V, + expire_seconds: u64, +) -> Result<(), Error> { + set(&categorize(category, key), value, expire_seconds).await +} + +/// Gets a Redis cache under a `category`. +/// +/// The usage is basically the same as [get]. +/// +/// # Arguments +/// +/// * `category` : one of [Category] +/// * `key` : key (prefixed automatically) +pub async fn get_one Deserialize<'a> + Serialize>( + category: Category, + key: &str, +) -> Result, Error> { + get(&categorize(category, key)).await +} + +/// Deletes a Redis cache under a `category`. +/// +/// The usage is basically the same as [delete]. +/// +/// # Arguments +/// +/// - `category` : one of [Category] +/// - `key` : key (prefixed automatically) +pub async fn delete_one(category: Category, key: &str) -> Result<(), Error> { + delete(&categorize(category, key)).await +} + +/// Deletes all Redis caches under a `category`. +/// +/// # Argument +/// +/// * `category` : one of [Category] +pub async fn delete_all(category: Category) -> Result<(), Error> { + let mut redis = redis_conn().await?; + let keys: Vec> = redis.keys(wildcard(category)).await?; + + if !keys.is_empty() { + redis.del(keys).await? + } + + Ok(()) +} + +// TODO: get_all() + +#[cfg(test)] +mod unit_test { + use super::{delete_all, get, get_one, set, set_one, Category::Test}; + use crate::database::cache::delete_one; + use pretty_assertions::assert_eq; + + #[tokio::test] + #[cfg_attr(miri, ignore)] // can't call foreign function `getaddrinfo` on OS `linux` + async fn set_get_expire() { + #[derive(serde::Deserialize, serde::Serialize, PartialEq, Debug)] + struct Data { + id: u32, + kind: String, + } + + let key_1 = "CARGO_TEST_CACHE_KEY_1"; + let value_1: Vec = vec![1, 2, 3, 4, 5]; + + let key_2 = "CARGO_TEST_CACHE_KEY_2"; + let value_2 = "Hello fedizens".to_owned(); + + let key_3 = "CARGO_TEST_CACHE_KEY_3"; + let value_3 = Data { + id: 1000000007, + kind: "prime number".to_owned(), + }; + + set(key_1, &value_1, 1).await.unwrap(); + set(key_2, &value_2, 1).await.unwrap(); + set(key_3, &value_3, 1).await.unwrap(); + + let cached_value_1: Vec = get(key_1).await.unwrap().unwrap(); + let cached_value_2: String = get(key_2).await.unwrap().unwrap(); + let cached_value_3: Data = get(key_3).await.unwrap().unwrap(); + + assert_eq!(value_1, cached_value_1); + assert_eq!(value_2, cached_value_2); + assert_eq!(value_3, cached_value_3); + + // wait for the cache to expire + std::thread::sleep(std::time::Duration::from_millis(1100)); + + let expired_value_1: Option> = get(key_1).await.unwrap(); + let expired_value_2: Option> = get(key_2).await.unwrap(); + let expired_value_3: Option> = get(key_3).await.unwrap(); + + assert!(expired_value_1.is_none()); + assert!(expired_value_2.is_none()); + assert!(expired_value_3.is_none()); + } + + #[tokio::test] + #[cfg_attr(miri, ignore)] // can't call foreign function `getaddrinfo` on OS `linux` + async fn use_category() { + let key_1 = "fire"; + let key_2 = "fish"; + let key_3 = "awawa"; + + let value_1 = "hello".to_owned(); + let value_2 = 998244353u32; + let value_3 = 'あ'; + + set_one(Test, key_1, &value_1, 5 * 60).await.unwrap(); + set_one(Test, key_2, &value_2, 5 * 60).await.unwrap(); + set_one(Test, key_3, &value_3, 5 * 60).await.unwrap(); + + assert_eq!( + get_one::(Test, key_1).await.unwrap().unwrap(), + value_1 + ); + assert_eq!(get_one::(Test, key_2).await.unwrap().unwrap(), value_2); + assert_eq!( + get_one::(Test, key_3).await.unwrap().unwrap(), + value_3 + ); + + delete_one(Test, key_1).await.unwrap(); + + assert!(get_one::(Test, key_1).await.unwrap().is_none()); + assert!(get_one::(Test, key_2).await.unwrap().is_some()); + assert!(get_one::(Test, key_3).await.unwrap().is_some()); + + delete_all(Test).await.unwrap(); + + assert!(get_one::(Test, key_1).await.unwrap().is_none()); + assert!(get_one::(Test, key_2).await.unwrap().is_none()); + assert!(get_one::(Test, key_3).await.unwrap().is_none()); + } +} diff --git a/packages/backend-rs/src/database/mod.rs b/packages/backend-rs/src/database/mod.rs new file mode 100644 index 0000000..03315c1 --- /dev/null +++ b/packages/backend-rs/src/database/mod.rs @@ -0,0 +1,11 @@ +//! Interfaces for accessing PostgreSQL and Redis + +pub use postgresql::get_conn as db_conn; + +pub use redis::get_conn as redis_conn; +pub use redis::key as redis_key; +pub use redis::RedisConnError; + +pub mod cache; +pub mod postgresql; +pub mod redis; diff --git a/packages/backend-rs/src/database/postgresql.rs b/packages/backend-rs/src/database/postgresql.rs new file mode 100644 index 0000000..33df247 --- /dev/null +++ b/packages/backend-rs/src/database/postgresql.rs @@ -0,0 +1,93 @@ +//! PostgreSQL interface + +use crate::config::CONFIG; +use sea_orm::{ConnectOptions, Database, DbConn, DbErr}; +use std::time::Duration; +use tokio::sync::OnceCell; +use tracing::log::LevelFilter; + +static DB_CONN: OnceCell = OnceCell::const_new(); + +async fn init_conn() -> Result<&'static DbConn, DbErr> { + let database_uri = format!( + "postgres://{}:{}@{}:{}/{}", + CONFIG.db.user, + urlencoding::encode(&CONFIG.db.pass), + CONFIG.db.host, + CONFIG.db.port, + CONFIG.db.db, + ); + let option: ConnectOptions = ConnectOptions::new(database_uri) + .sqlx_logging_level(LevelFilter::Trace) + .sqlx_slow_statements_logging_settings(LevelFilter::Warn, Duration::from_secs(3)) + .to_owned(); + + let conn = DB_CONN + .get_or_try_init(|| async { + tracing::info!("initializing connection"); + Database::connect(option).await + }) + .await?; + + Ok(conn) +} + +/// Returns an async PostgreSQL connection that can be used with [sea_orm] utilities. +pub async fn get_conn() -> Result<&'static DbConn, DbErr> { + match DB_CONN.get() { + Some(conn) => Ok(conn), + None => init_conn().await, + } +} + +#[cfg(test)] +mod unit_test { + use super::get_conn; + use sea_orm::{prelude::*, DbBackend, Statement}; + + #[tokio::test] + #[cfg_attr(miri, ignore)] // can't call foreign function `geteuid` on OS `linux` + async fn connect_sequential() { + get_conn().await.unwrap(); + get_conn().await.unwrap(); + get_conn().await.unwrap(); + get_conn().await.unwrap(); + get_conn().await.unwrap(); + } + + #[tokio::test] + #[cfg_attr(miri, ignore)] // can't call foreign function `geteuid` on OS `linux` + async fn connect_concurrent() { + let [c1, c2, c3, c4, c5] = [get_conn(), get_conn(), get_conn(), get_conn(), get_conn()]; + let _ = tokio::try_join!(c1, c2, c3, c4, c5).unwrap(); + } + + #[tokio::test] + #[cfg_attr(miri, ignore)] // can't call foreign function `geteuid` on OS `linux` + async fn connect_spawn() { + let mut tasks = Vec::new(); + + for _ in 0..5 { + tasks.push(tokio::spawn(get_conn())); + } + for task in tasks { + task.await.unwrap().unwrap(); + } + } + + #[tokio::test] + #[cfg_attr(miri, ignore)] // can't call foreign function `geteuid` on OS `linux` + async fn access() { + // DO NOT write any raw SQL query in the actual program + // (with the exception of PGroonga features) + get_conn() + .await + .unwrap() + .execute(Statement::from_string( + DbBackend::Postgres, + "SELECT version()", + )) + .await + .unwrap(); + } +} diff --git a/packages/backend-rs/src/database/redis.rs b/packages/backend-rs/src/database/redis.rs new file mode 100644 index 0000000..a17271f --- /dev/null +++ b/packages/backend-rs/src/database/redis.rs @@ -0,0 +1,169 @@ +//! Redis interface + +use crate::config::CONFIG; +use async_trait::async_trait; +use bb8::{ManageConnection, Pool, PooledConnection, RunError}; +use redis::{aio::MultiplexedConnection, Client, ErrorKind, IntoConnectionInfo, RedisError}; +use tokio::sync::OnceCell; + +/// A [bb8::ManageConnection] for [redis::Client::get_multiplexed_async_connection]. +#[derive(Clone, Debug)] +pub struct RedisConnectionManager { + client: Client, +} + +impl RedisConnectionManager { + /// Creates a new [RedisConnectionManager]. + /// See [redis::Client::open] for a description of the parameter types. + pub fn new(info: T) -> Result { + Ok(Self { + client: Client::open(info.into_connection_info()?)?, + }) + } +} + +#[async_trait] +impl ManageConnection for RedisConnectionManager { + type Connection = MultiplexedConnection; + type Error = RedisError; + + async fn connect(&self) -> Result { + self.client.get_multiplexed_async_connection().await + } + + async fn is_valid(&self, conn: &mut Self::Connection) -> Result<(), Self::Error> { + let pong: String = redis::cmd("PING").query_async(conn).await?; + match pong.as_str() { + "PONG" => Ok(()), + _ => Err((ErrorKind::ResponseError, "ping request").into()), + } + } + + fn has_broken(&self, _: &mut Self::Connection) -> bool { + false + } +} + +static CONN_POOL: OnceCell> = OnceCell::const_new(); + +async fn init_conn_pool() -> Result<(), RedisError> { + let redis_url = { + let mut params = vec!["redis://".to_owned()]; + + let redis = if let Some(cache_server) = &CONFIG.cache_server { + cache_server + } else { + &CONFIG.redis + }; + + if let Some(user) = &redis.user { + params.push(user.to_owned()) + } + if let Some(pass) = &redis.pass { + params.push(format!(":{}@", urlencoding::encode(pass))) + } + params.push(redis.host.to_owned()); + params.push(format!(":{}", redis.port)); + params.push(format!("/{}", redis.db)); + + params.concat() + }; + + tracing::info!("initializing connection manager"); + let manager = RedisConnectionManager::new(redis_url)?; + + CONN_POOL + .get_or_try_init(|| async { + tracing::info!("creating connection pool"); + Pool::builder().build(manager).await + }) + .await?; + + Ok(()) +} + +#[macros::errors] +pub enum RedisConnError { + #[error("failed to initialize Redis connection pool")] + Redis(RedisError), + #[error("bad Redis connection pool")] + Bb8Pool(RunError), +} + +/// Returns an async [redis] connection managed by a [bb8] connection pool. +pub async fn get_conn() -> Result, RedisConnError> +{ + if !CONN_POOL.initialized() { + let init_res = init_conn_pool().await; + + if let Err(err) = init_res { + return Err(RedisConnError::Redis(err)); + } + } + + CONN_POOL + .get() + .unwrap() + .get() + .await + .map_err(RedisConnError::Bb8Pool) +} + +/// prefix Redis key +#[inline] +pub fn key(key: impl std::fmt::Display) -> String { + format!("{}:{}", CONFIG.redis_key_prefix, key) +} + +#[cfg(test)] +mod unit_test { + use super::get_conn; + use pretty_assertions::assert_eq; + use redis::AsyncCommands; + + #[tokio::test] + #[cfg_attr(miri, ignore)] // can't call foreign function `getaddrinfo` on OS `linux` + async fn connect_sequential() { + get_conn().await.unwrap(); + get_conn().await.unwrap(); + get_conn().await.unwrap(); + get_conn().await.unwrap(); + get_conn().await.unwrap(); + } + + #[tokio::test] + #[cfg_attr(miri, ignore)] // can't call foreign function `getaddrinfo` on OS `linux` + async fn connect_concurrent() { + let [c1, c2, c3, c4, c5] = [get_conn(), get_conn(), get_conn(), get_conn(), get_conn()]; + let _ = tokio::try_join!(c1, c2, c3, c4, c5).unwrap(); + } + + #[tokio::test] + #[cfg_attr(miri, ignore)] // can't call foreign function `getaddrinfo` on OS `linux` + async fn connect_spawn() { + let mut tasks = Vec::new(); + + for _ in 0..5 { + tasks.push(tokio::spawn(get_conn())); + } + for task in tasks { + task.await.unwrap().unwrap(); + } + } + + #[tokio::test] + #[cfg_attr(miri, ignore)] // can't call foreign function `getaddrinfo` on OS `linux` + async fn access() { + let mut redis = get_conn().await.unwrap(); + + let key = "CARGO_UNIT_TEST_KEY"; + let value = "CARGO_UNIT_TEST_VALUE"; + + assert_eq!( + redis.set::<&str, &str, String>(key, value).await.unwrap(), + "OK" + ); + assert_eq!(redis.get::<&str, String>(key).await.unwrap(), value); + assert_eq!(redis.del::<&str, u32>(key).await.unwrap(), 1); + } +} diff --git a/packages/backend-rs/src/federation/acct.rs b/packages/backend-rs/src/federation/acct.rs new file mode 100644 index 0000000..1c28685 --- /dev/null +++ b/packages/backend-rs/src/federation/acct.rs @@ -0,0 +1,106 @@ +use std::{fmt, str::FromStr}; + +#[cfg_attr(test, derive(Debug, PartialEq))] +#[macros::export(object)] +pub struct Acct { + pub username: String, + pub host: Option, +} + +#[derive(thiserror::Error, Debug)] +#[doc = "Error type to indicate a [`String`]-to-[`Acct`] conversion failure"] +#[error("failed to convert string '{0}' into acct")] +pub struct InvalidAcctString(String); + +impl FromStr for Acct { + type Err = InvalidAcctString; + + fn from_str(value: &str) -> Result { + let split: Vec<&str> = if let Some(stripped) = value.strip_prefix('@') { + stripped + } else { + value + } + .split('@') + .collect(); + + Ok(Self { + username: split[0].to_owned(), + host: if split.len() == 1 { + None + } else { + Some(split[1].to_owned()) + }, + }) + } +} + +impl fmt::Display for Acct { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let result = match &self.host { + Some(host) => format!("{}@{}", self.username, host), + None => self.username.clone(), + }; + write!(f, "{result}") + } +} + +impl From for String { + fn from(value: Acct) -> Self { + value.to_string() + } +} + +#[macros::ts_export] +pub fn string_to_acct(acct: &str) -> Acct { + Acct::from_str(acct).unwrap() +} + +#[macros::ts_export] +pub fn acct_to_string(acct: &Acct) -> String { + acct.to_string() +} + +#[cfg(test)] +mod unit_test { + use super::Acct; + use pretty_assertions::assert_eq; + use std::str::FromStr; + + #[test] + fn acct_to_string() { + let remote_acct = Acct { + username: "firefish".to_owned(), + host: Some("example.com".to_owned()), + }; + let local_acct = Acct { + username: "MisakaMikoto".to_owned(), + host: None, + }; + + assert_eq!(remote_acct.to_string(), "firefish@example.com"); + assert_ne!(remote_acct.to_string(), "mastodon@example.com"); + assert_eq!(local_acct.to_string(), "MisakaMikoto"); + assert_ne!(local_acct.to_string(), "ShiraiKuroko"); + } + + #[test] + fn string_to_acct() { + let remote_acct = Acct { + username: "firefish".to_owned(), + host: Some("example.com".to_owned()), + }; + let local_acct = Acct { + username: "MisakaMikoto".to_owned(), + host: None, + }; + + assert_eq!( + Acct::from_str("@firefish@example.com").unwrap(), + remote_acct + ); + assert_eq!(Acct::from_str("firefish@example.com").unwrap(), remote_acct); + assert_eq!(Acct::from_str("@MisakaMikoto").unwrap(), local_acct); + assert_eq!(Acct::from_str("MisakaMikoto").unwrap(), local_acct); + } +} diff --git a/packages/backend-rs/src/federation/activitypub/mod.rs b/packages/backend-rs/src/federation/activitypub/mod.rs new file mode 100644 index 0000000..e63d53d --- /dev/null +++ b/packages/backend-rs/src/federation/activitypub/mod.rs @@ -0,0 +1 @@ +pub mod object; diff --git a/packages/backend-rs/src/federation/activitypub/object/mod.rs b/packages/backend-rs/src/federation/activitypub/object/mod.rs new file mode 100644 index 0000000..b245bca --- /dev/null +++ b/packages/backend-rs/src/federation/activitypub/object/mod.rs @@ -0,0 +1,9 @@ +pub mod relay; + +pub trait ActivityPubObject {} + +#[derive(serde::Serialize)] +#[macros::export(string_enum)] +pub enum Activity { + Follow, +} diff --git a/packages/backend-rs/src/federation/activitypub/object/relay.rs b/packages/backend-rs/src/federation/activitypub/object/relay.rs new file mode 100644 index 0000000..f3d7656 --- /dev/null +++ b/packages/backend-rs/src/federation/activitypub/object/relay.rs @@ -0,0 +1,28 @@ +use super::*; +use crate::{config::CONFIG, federation::internal_actor}; +use serde::Serialize; + +#[derive(Serialize)] +#[macros::export(object)] +pub struct FollowRelay { + pub id: String, + pub r#type: Activity, + pub actor: String, + pub object: String, +} + +impl ActivityPubObject for FollowRelay {} + +#[macros::export(js_name = "renderFollowRelay")] +pub async fn follow(relay_id: &str) -> Result { + Ok(FollowRelay { + id: format!("{}/activities/follow-relay/{}", CONFIG.url, relay_id), + r#type: Activity::Follow, + actor: format!( + "{}/users/{}", + CONFIG.url, + internal_actor::relay::get_id().await? + ), + object: "https://www.w3.org/ns/activitystreams#Public".to_owned(), + }) +} diff --git a/packages/backend-rs/src/federation/internal_actor/instance.rs b/packages/backend-rs/src/federation/internal_actor/instance.rs new file mode 100644 index 0000000..957aa57 --- /dev/null +++ b/packages/backend-rs/src/federation/internal_actor/instance.rs @@ -0,0 +1,50 @@ +//! In-memory instance actor cache + +use crate::{database::db_conn, model::entity::user}; +use sea_orm::prelude::*; +use tokio::sync::OnceCell; + +// for napi export +// https://github.com/napi-rs/napi-rs/issues/2060 +type User = user::Model; + +pub const USERNAME: &str = "instance.actor"; +static INSTANCE_ACTOR: OnceCell = OnceCell::const_new(); + +#[macros::errors] +pub enum Error { + #[error("@instance.actor not found")] + InstanceActorNotFound, + #[error(transparent)] + #[doc = "database error"] + Db(#[from] DbErr), +} + +async fn set_cache() -> Result<&'static User, Error> { + let instance_actor = INSTANCE_ACTOR + .get_or_try_init(|| async { + tracing::debug!("caching @instance.actor"); + let found_model = user::Entity::find() + .filter(user::Column::Username.eq(USERNAME)) + .filter(user::Column::Host.is_null()) + .one(db_conn().await?) + .await?; + + found_model.ok_or(Error::InstanceActorNotFound) + }) + .await?; + + Ok(instance_actor) +} + +pub async fn get() -> Result<&'static User, Error> { + match INSTANCE_ACTOR.get() { + Some(model) => Ok(model), + None => set_cache().await, + } +} + +#[macros::ts_export(js_name = "getInstanceActor")] +pub async fn get_js() -> Result { + Ok(get().await?.to_owned()) +} diff --git a/packages/backend-rs/src/federation/internal_actor/mod.rs b/packages/backend-rs/src/federation/internal_actor/mod.rs new file mode 100644 index 0000000..b2f361d --- /dev/null +++ b/packages/backend-rs/src/federation/internal_actor/mod.rs @@ -0,0 +1,4 @@ +pub mod instance; +pub mod relay; + +pub const INTERNAL_ACTORS: u64 = 2; diff --git a/packages/backend-rs/src/federation/internal_actor/relay.rs b/packages/backend-rs/src/federation/internal_actor/relay.rs new file mode 100644 index 0000000..2c7c4ba --- /dev/null +++ b/packages/backend-rs/src/federation/internal_actor/relay.rs @@ -0,0 +1,45 @@ +//! In-memory relay actor id cache + +use crate::{database::db_conn, model::entity::user}; +use sea_orm::{prelude::*, QuerySelect, SelectColumns}; +use tokio::sync::OnceCell; + +pub const USERNAME: &str = "relay.actor"; +static RELAY_ACTOR_ID: OnceCell = OnceCell::const_new(); + +#[macros::errors] +pub enum Error { + #[error("@relay.actor not found")] + RelayActorNotFound, + #[error(transparent)] + #[doc = "database error"] + Db(#[from] DbErr), +} + +async fn set_id_cache() -> Result<&'static str, Error> { + let id = RELAY_ACTOR_ID + .get_or_try_init(|| async { + tracing::debug!("caching @relay.actor"); + let found_id = user::Entity::find() + .select_only() + .select_column(user::Column::Id) + .filter(user::Column::Username.eq(USERNAME)) + .filter(user::Column::Host.is_null()) + .into_tuple::() + .one(db_conn().await?) + .await?; + + found_id.ok_or(Error::RelayActorNotFound) + }) + .await?; + + Ok(id) +} + +#[macros::export(js_name = "getRelayActorId")] +pub async fn get_id() -> Result<&'static str, Error> { + match RELAY_ACTOR_ID.get() { + Some(id) => Ok(id), + None => set_id_cache().await, + } +} diff --git a/packages/backend-rs/src/federation/mod.rs b/packages/backend-rs/src/federation/mod.rs new file mode 100644 index 0000000..c432fc9 --- /dev/null +++ b/packages/backend-rs/src/federation/mod.rs @@ -0,0 +1,6 @@ +//! Services used to federate with other servers + +pub mod acct; +pub mod activitypub; +pub mod internal_actor; +pub mod nodeinfo; diff --git a/packages/backend-rs/src/federation/nodeinfo/fetch.rs b/packages/backend-rs/src/federation/nodeinfo/fetch.rs new file mode 100644 index 0000000..307d86d --- /dev/null +++ b/packages/backend-rs/src/federation/nodeinfo/fetch.rs @@ -0,0 +1,176 @@ +//! NodeInfo fetcher +//! +//! ref: + +use crate::{federation::nodeinfo::schema::*, util::http_client}; +use futures_util::io::AsyncReadExt; +use isahc::AsyncReadResponseExt; +use serde::Deserialize; + +/// Errors that can occur while fetching NodeInfo from a remote server +#[macros::errors] +pub enum Error { + #[error("failed to acquire an HTTP client")] + HttpClient(#[from] http_client::Error), + #[error("HTTP request failed")] + Http(#[from] isahc::Error), + #[doc = "bad HTTP status"] + #[error("bad HTTP status ({0})")] + BadStatus(String), + #[error("failed to parse HTTP response body as text")] + Response(#[from] std::io::Error), + #[error("failed to parse HTTP response body as json")] + Json(#[from] serde_json::Error), + #[error("nodeinfo is missing")] + MissingNodeinfo, +} + +/// Represents the schema of `/.well-known/nodeinfo`. +#[derive(Deserialize)] +pub struct NodeinfoLinks { + links: Vec, +} + +/// Represents one entry of `/.well-known/nodeinfo`. +#[derive(Deserialize)] +pub struct NodeinfoLink { + rel: String, + href: String, +} + +/// Fetches `/.well-known/nodeinfo` and parses the result. +async fn fetch_nodeinfo_links(host: &str) -> Result { + let client = http_client::client()?; + let wellknown_url = format!("https://{}/.well-known/nodeinfo", host); + let wellknown_response = client.get_async(&wellknown_url).await?; + + if !wellknown_response.status().is_success() { + tracing::debug!("{:#?}", wellknown_response.body()); + return Err(Error::BadStatus(format!( + "{} returned {}", + wellknown_url, + wellknown_response.status() + ))); + } + + // Read up to 1 MiB of the response body + let text = wellknown_response + .map(|body| body.take(1024 * 1024)) + .text() + .await?; + Ok(serde_json::from_str(&text)?) +} + +/// Check if any of the following relations is present in the given [NodeinfoLinks]. +/// * +/// * +fn check_nodeinfo_link(links: NodeinfoLinks) -> Result { + for link in links.links { + if link.rel == "http://nodeinfo.diaspora.software/ns/schema/2.1" + || link.rel == "http://nodeinfo.diaspora.software/ns/schema/2.0" + { + return Ok(link.href); + } + } + + Err(Error::MissingNodeinfo) +} + +/// Fetches the nodeinfo from the given URL and parses the result. +async fn fetch_nodeinfo_impl(nodeinfo_link: &str) -> Result { + let client = http_client::client()?; + let mut response = client.get_async(nodeinfo_link).await?; + + if !response.status().is_success() { + tracing::debug!("{:#?}", response.body()); + return Err(Error::BadStatus(format!( + "{} returned {}", + nodeinfo_link, + response.status() + ))); + } + + Ok(serde_json::from_str(&response.text().await?)?) +} + +// for napi export +type Nodeinfo = Nodeinfo20; + +/// Fetches and returns the NodeInfo (version 2.0) of a remote server. +#[macros::export] +pub async fn fetch_nodeinfo(host: &str) -> Result { + tracing::info!("fetching from {}", host); + let links = fetch_nodeinfo_links(host).await?; + let nodeinfo_link = check_nodeinfo_link(links)?; + fetch_nodeinfo_impl(&nodeinfo_link).await +} + +#[cfg(test)] +mod unit_test { + use super::{NodeinfoLink, NodeinfoLinks}; + use pretty_assertions::assert_eq; + + #[test] + fn check_nodeinfo_link() { + let links_1 = NodeinfoLinks { + links: vec![ + NodeinfoLink { + rel: "https://example.com/incorrect/schema/2.0".to_owned(), + href: "https://example.com/dummy".to_owned(), + }, + NodeinfoLink { + rel: "http://nodeinfo.diaspora.software/ns/schema/2.0".to_owned(), + href: "https://example.com/real".to_owned(), + }, + ], + }; + assert_eq!( + super::check_nodeinfo_link(links_1).unwrap(), + "https://example.com/real" + ); + + let links_2 = NodeinfoLinks { + links: vec![ + NodeinfoLink { + rel: "https://example.com/incorrect/schema/2.0".to_owned(), + href: "https://example.com/dummy".to_owned(), + }, + NodeinfoLink { + rel: "http://nodeinfo.diaspora.software/ns/schema/2.1".to_owned(), + href: "https://example.com/real".to_owned(), + }, + ], + }; + assert_eq!( + super::check_nodeinfo_link(links_2).unwrap(), + "https://example.com/real" + ); + + let links_3 = NodeinfoLinks { + links: vec![ + NodeinfoLink { + rel: "https://example.com/incorrect/schema/2.0".to_owned(), + href: "https://example.com/dummy/2.0".to_owned(), + }, + NodeinfoLink { + rel: "https://example.com/incorrect/schema/2.1".to_owned(), + href: "https://example.com/dummy/2.1".to_owned(), + }, + ], + }; + super::check_nodeinfo_link(links_3).expect_err("No nodeinfo"); + } + + #[tokio::test] + #[cfg_attr(miri, ignore)] // can't call foreign function `curl_global_init` on OS `linux` + async fn fetch_nodeinfo() { + assert_eq!( + super::fetch_nodeinfo("info.firefish.dev") + .await + .unwrap() + .software + .name, + "firefish" + ); + } +} diff --git a/packages/backend-rs/src/federation/nodeinfo/generate.rs b/packages/backend-rs/src/federation/nodeinfo/generate.rs new file mode 100644 index 0000000..4ab7ef6 --- /dev/null +++ b/packages/backend-rs/src/federation/nodeinfo/generate.rs @@ -0,0 +1,179 @@ +//! NodeInfo generator + +use crate::{ + config::{local_server_info, CONFIG}, + database::db_conn, + federation::nodeinfo::schema::*, + misc, + model::entity::{note, user}, +}; +use sea_orm::prelude::*; +use serde_json::json; +use std::{collections::HashMap, sync::Mutex}; + +static CACHE: Mutex> = Mutex::new(None); + +fn set_cache(nodeinfo: &Nodeinfo21) { + let _ = CACHE + .lock() + .map(|mut cache| *cache = Some(nodeinfo.to_owned())); +} + +/// Fetches the number of total/active local users and local posts. +/// +/// # Return value +/// A tuple containing the following information in this order: +/// * the total number of local users +/// * the total number of local users active in the last 6 months +/// * the total number of local users active in the last month (MAU) +/// * the total number of posts from local users +async fn statistics() -> Result<(u64, u64, u64, u64), DbErr> { + let db = db_conn().await?; + + let now = chrono::Utc::now(); + const MONTH: chrono::TimeDelta = chrono::Duration::days(30); + const HALF_YEAR: chrono::TimeDelta = chrono::Duration::days(183); + + let local_users = misc::user::count::local_total(db); + + // We don't need to care about the number of system actors here, + // because their last active date is null + let local_active_halfyear = user::Entity::find() + .filter(user::Column::Host.is_null()) + .filter(user::Column::LastActiveDate.gt(now - HALF_YEAR)) + .count(db); + let local_active_month = user::Entity::find() + .filter(user::Column::Host.is_null()) + .filter(user::Column::LastActiveDate.gt(now - MONTH)) + .count(db); + let local_posts = note::Entity::find() + .filter(note::Column::UserHost.is_null()) + .count(db); + + tokio::try_join!( + local_users, + local_active_halfyear, + local_active_month, + local_posts + ) +} + +/// Generates NodeInfo (version 2.1) of the local server. +/// This function doesn't use caches and returns the latest information. +async fn generate_nodeinfo_2_1() -> Result { + tracing::info!("generating NodeInfo"); + + let (local_users, local_active_halfyear, local_active_month, local_posts) = + statistics().await?; + let meta = local_server_info().await?; + let mut metadata = HashMap::from([ + ( + "nodeName".to_owned(), + json!(meta.name.unwrap_or_else(|| CONFIG.host.clone())), + ), + ("nodeDescription".to_owned(), json!(meta.description)), + ("repositoryUrl".to_owned(), json!(meta.repository_url)), + ( + "enableLocalTimeline".to_owned(), + json!(!meta.disable_local_timeline), + ), + ( + "enableRecommendedTimeline".to_owned(), + json!(!meta.disable_recommended_timeline), + ), + ( + "enableGlobalTimeline".to_owned(), + json!(!meta.disable_global_timeline), + ), + ( + "enableGuestTimeline".to_owned(), + json!(meta.enable_guest_timeline), + ), + ( + "maintainer".to_owned(), + json!({"name":meta.maintainer_name,"email":meta.maintainer_email}), + ), + ("proxyAccountName".to_owned(), json!(meta.proxy_account_id)), + ( + "themeColor".to_owned(), + json!(meta.theme_color.unwrap_or_else(|| "#31748f".to_owned())), + ), + ]); + metadata.shrink_to_fit(); + + Ok(Nodeinfo21 { + software: Software21 { + name: "firefish".to_owned(), + version: CONFIG.version.clone(), + repository: Some(meta.repository_url), + homepage: Some("https://firefish.dev/firefish/firefish".to_owned()), + }, + protocols: vec![Protocol::Activitypub], + services: Services { + inbound: vec![], + outbound: vec![Outbound::Atom1, Outbound::Rss2], + }, + open_registrations: !meta.disable_registration, + usage: Usage { + users: Users { + total: Some(local_users as u32), + active_halfyear: Some(local_active_halfyear as u32), + active_month: Some(local_active_month as u32), + }, + local_posts: Some(local_posts as u32), + local_comments: None, + }, + metadata, + }) +} + +async fn nodeinfo_2_1_impl(use_cache: bool) -> Result { + if use_cache { + if let Some(nodeinfo) = CACHE.lock().ok().and_then(|cache| cache.to_owned()) { + return Ok(nodeinfo); + } + } + + let nodeinfo = generate_nodeinfo_2_1().await?; + + tracing::info!("updating cache"); + set_cache(&nodeinfo); + + Ok(nodeinfo) +} + +/// Returns NodeInfo (version 2.1) of the local server. +pub async fn nodeinfo_2_1() -> Result { + nodeinfo_2_1_impl(true).await +} + +/// Returns NodeInfo (version 2.0) of the local server. +pub async fn nodeinfo_2_0() -> Result { + Ok(nodeinfo_2_1().await?.into()) +} + +#[cfg(any(test, doctest, feature = "napi"))] +#[macros::errors] +pub enum Error { + #[doc = "database error"] + #[error(transparent)] + Db(#[from] DbErr), + #[error("failed to serialize nodeinfo into JSON")] + Json(#[from] serde_json::Error), +} + +#[macros::ts_export(js_name = "nodeinfo_2_1")] +pub async fn nodeinfo_2_1_as_json() -> Result { + Ok(serde_json::to_value(nodeinfo_2_1().await?)?) +} + +#[macros::ts_export(js_name = "nodeinfo_2_0")] +pub async fn nodeinfo_2_0_as_json() -> Result { + Ok(serde_json::to_value(nodeinfo_2_0().await?)?) +} + +#[macros::ts_export(js_name = "updateNodeinfoCache")] +pub async fn update_cache() -> Result<(), DbErr> { + nodeinfo_2_1_impl(false).await?; + Ok(()) +} diff --git a/packages/backend-rs/src/federation/nodeinfo/mod.rs b/packages/backend-rs/src/federation/nodeinfo/mod.rs new file mode 100644 index 0000000..4d27a63 --- /dev/null +++ b/packages/backend-rs/src/federation/nodeinfo/mod.rs @@ -0,0 +1,7 @@ +//! NodeInfo handler +//! +//! ref: + +pub mod fetch; +pub mod generate; +mod schema; diff --git a/packages/backend-rs/src/federation/nodeinfo/schema.rs b/packages/backend-rs/src/federation/nodeinfo/schema.rs new file mode 100644 index 0000000..d31d2e5 --- /dev/null +++ b/packages/backend-rs/src/federation/nodeinfo/schema.rs @@ -0,0 +1,286 @@ +//! Schema definitions of NodeInfo version 2.0 and 2.1 +//! +//! ref: + +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; + +/// NodeInfo schema version 2.1. +#[cfg_attr(test, derive(Debug, PartialEq, Deserialize))] +#[derive(Clone, Serialize)] +#[serde(rename_all = "camelCase")] +#[serde(tag = "version", rename = "2.1")] +pub struct Nodeinfo21 { + /// Metadata about server software in use. + pub software: Software21, + /// The protocols supported on this server. + pub protocols: Vec, + /// The third party sites this server can connect to via their application API. + pub services: Services, + /// Whether this server allows open self-registration. + pub open_registrations: bool, + /// Usage statistics for this server. + pub usage: Usage, + /// Free form key value pairs for software specific values. Clients should not rely on any specific key present. + pub metadata: HashMap, +} + +/// NodeInfo schema version 2.0. +#[cfg_attr(test, derive(Debug, PartialEq))] +#[derive(Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +#[macros::export(object, js_name = "Nodeinfo")] +#[serde(tag = "version", rename = "2.0")] +pub struct Nodeinfo20 { + /// Metadata about server software in use. + pub software: Software20, + /// The protocols supported on this server. + pub protocols: Vec, + /// The third party sites this server can connect to via their application API. + pub services: Services, + /// Whether this server allows open self-registration. + pub open_registrations: bool, + /// Usage statistics for this server. + pub usage: Usage, + /// Free form key value pairs for software specific values. Clients should not rely on any specific key present. + pub metadata: HashMap, +} + +/// Metadata about server software in use (version 2.1). +#[cfg_attr(test, derive(Debug, PartialEq, Deserialize))] +#[derive(Clone, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct Software21 { + /// The canonical name of this server software. + pub name: String, + /// The version of this server software. + pub version: String, + /// The url of the source code repository of this server software. + #[serde(skip_serializing_if = "Option::is_none")] + pub repository: Option, + /// The url of the homepage of this server software. + #[serde(skip_serializing_if = "Option::is_none")] + pub homepage: Option, +} + +/// Metadata about server software in use (version 2.0). +#[cfg_attr(test, derive(Debug, PartialEq))] +#[derive(Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +#[macros::export(object)] +pub struct Software20 { + /// The canonical name of this server software. + pub name: String, + /// The version of this server software. + pub version: String, +} + +#[cfg_attr(test, derive(Debug, PartialEq))] +#[derive(Deserialize, Serialize)] +#[serde(rename_all = "lowercase")] +#[macros::derive_clone_and_export] +pub enum Protocol { + Activitypub, + Buddycloud, + Dfrn, + Diaspora, + Libertree, + Ostatus, + Pumpio, + Tent, + Xmpp, + Zot, +} + +/// The third party sites this server can connect to via their application API. +#[cfg_attr(test, derive(Debug, PartialEq))] +#[derive(Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +#[macros::export(object)] +pub struct Services { + /// The third party sites this server can retrieve messages from for combined display with regular traffic. + pub inbound: Vec, + /// The third party sites this server can publish messages to on the behalf of a user. + pub outbound: Vec, +} + +/// The third party sites this server can retrieve messages from for combined display with regular traffic. +#[cfg_attr(test, derive(Debug, PartialEq))] +#[derive(Deserialize, Serialize)] +#[serde(rename_all = "lowercase")] +#[macros::derive_clone_and_export] +pub enum Inbound { + #[serde(rename = "atom1.0")] + Atom1, + Gnusocial, + Imap, + Pnut, + #[serde(rename = "pop3")] + Pop3, + Pumpio, + #[serde(rename = "rss2.0")] + Rss2, + Twitter, +} + +/// The third party sites this server can publish messages to on the behalf of a user. +#[cfg_attr(test, derive(Debug, PartialEq))] +#[derive(Deserialize, Serialize)] +#[serde(rename_all = "lowercase")] +#[macros::derive_clone_and_export] +pub enum Outbound { + #[serde(rename = "atom1.0")] + Atom1, + Blogger, + Buddycloud, + Diaspora, + Dreamwidth, + Drupal, + Facebook, + Friendica, + Gnusocial, + Google, + Insanejournal, + Libertree, + Linkedin, + Livejournal, + Mediagoblin, + Myspace, + Pinterest, + Pnut, + Posterous, + Pumpio, + Redmatrix, + #[serde(rename = "rss2.0")] + Rss2, + Smtp, + Tent, + Tumblr, + Twitter, + Wordpress, + Xmpp, +} + +/// Usage statistics for this server. +#[cfg_attr(test, derive(Debug, PartialEq))] +#[derive(Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +#[macros::export(object)] +pub struct Usage { + pub users: Users, + #[serde(skip_serializing_if = "Option::is_none")] + pub local_posts: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub local_comments: Option, +} + +/// statistics about the users of this server. +#[cfg_attr(test, derive(Debug, PartialEq))] +#[derive(Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +#[macros::export(object)] +pub struct Users { + #[serde(skip_serializing_if = "Option::is_none")] + pub total: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub active_halfyear: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub active_month: Option, +} + +impl From for Software20 { + fn from(software: Software21) -> Self { + Self { + name: software.name, + version: software.version, + } + } +} + +impl From for Nodeinfo20 { + fn from(nodeinfo: Nodeinfo21) -> Self { + Self { + software: nodeinfo.software.into(), + protocols: nodeinfo.protocols, + services: nodeinfo.services, + open_registrations: nodeinfo.open_registrations, + usage: nodeinfo.usage, + metadata: nodeinfo.metadata, + } + } +} + +#[cfg(test)] +mod unit_test { + use super::{Nodeinfo20, Nodeinfo21}; + use pretty_assertions::assert_eq; + + #[test] + fn parse_nodeinfo_2_0() { + let json_str_1 = r#"{"version":"2.0","software":{"name":"mastodon","version":"4.3.0-nightly.2024-04-30"},"protocols":["activitypub"],"services":{"outbound":[],"inbound":[]},"usage":{"users":{"total":1935016,"activeMonth":238223,"activeHalfyear":618795},"localPosts":90175135},"openRegistrations":true,"metadata":{"nodeName":"Mastodon","nodeDescription":"The original server operated by the Mastodon gGmbH non-profit"}}"#; + let parsed_1: Nodeinfo20 = serde_json::from_str(json_str_1).unwrap(); + let serialized_1 = serde_json::to_string(&parsed_1).unwrap(); + let reparsed_1: Nodeinfo20 = serde_json::from_str(&serialized_1).unwrap(); + + assert_eq!(parsed_1, reparsed_1); + assert_eq!(parsed_1.software.name, "mastodon"); + assert_eq!(parsed_1.software.version, "4.3.0-nightly.2024-04-30"); + + let json_str_2 = r#"{"version":"2.0","software":{"name":"peertube","version":"5.0.0"},"protocols":["activitypub"],"services":{"inbound":[],"outbound":["atom1.0","rss2.0"]},"openRegistrations":false,"usage":{"users":{"total":5,"activeMonth":0,"activeHalfyear":2},"localPosts":1018,"localComments":1},"metadata":{"taxonomy":{"postsName":"Videos"},"nodeName":"Blender Video","nodeDescription":"Blender Foundation PeerTube instance.","nodeConfig":{"search":{"remoteUri":{"users":true,"anonymous":false}},"plugin":{"registered":[]},"theme":{"registered":[],"default":"default"},"email":{"enabled":false},"contactForm":{"enabled":true},"transcoding":{"hls":{"enabled":true},"webtorrent":{"enabled":true},"enabledResolutions":[1080]},"live":{"enabled":false,"transcoding":{"enabled":true,"enabledResolutions":[]}},"import":{"videos":{"http":{"enabled":true},"torrent":{"enabled":false}}},"autoBlacklist":{"videos":{"ofUsers":{"enabled":false}}},"avatar":{"file":{"size":{"max":4194304},"extensions":[".png",".jpeg",".jpg",".gif",".webp"]}},"video":{"image":{"extensions":[".png",".jpg",".jpeg",".webp"],"size":{"max":4194304}},"file":{"extensions":[".webm",".ogv",".ogg",".mp4",".mkv",".mov",".qt",".mqv",".m4v",".flv",".f4v",".wmv",".avi",".3gp",".3gpp",".3g2",".3gpp2",".nut",".mts",".m2ts",".mpv",".m2v",".m1v",".mpg",".mpe",".mpeg",".vob",".mxf",".mp3",".wma",".wav",".flac",".aac",".m4a",".ac3"]}},"videoCaption":{"file":{"size":{"max":20971520},"extensions":[".vtt",".srt"]}},"user":{"videoQuota":5368709120,"videoQuotaDaily":-1},"trending":{"videos":{"intervalDays":7}},"tracker":{"enabled":true}}}}"#; + let parsed_2: Nodeinfo20 = serde_json::from_str(json_str_2).unwrap(); + let serialized_2 = serde_json::to_string(&parsed_2).unwrap(); + let reparsed_2: Nodeinfo20 = serde_json::from_str(&serialized_2).unwrap(); + + assert_eq!(parsed_2, reparsed_2); + assert_eq!(parsed_2.software.name, "peertube"); + assert_eq!(parsed_2.software.version, "5.0.0"); + + let json_str_3 = r#"{"metadata":{"nodeName":"pixelfed","software":{"homepage":"https://pixelfed.org","repo":"https://github.com/pixelfed/pixelfed"},"config":{"features":{"timelines":{"local":true,"network":true},"mobile_apis":true,"stories":true,"video":true,"import":{"instagram":false,"mastodon":false,"pixelfed":false},"label":{"covid":{"enabled":false,"org":"visit the WHO website","url":"https://www.who.int/emergencies/diseases/novel-coronavirus-2019/advice-for-public"}},"hls":{"enabled":false}}}},"protocols":["activitypub"],"services":{"inbound":[],"outbound":[]},"software":{"name":"pixelfed","version":"0.12.0"},"usage":{"localPosts":24059868,"localComments":0,"users":{"total":112832,"activeHalfyear":24366,"activeMonth":8921}},"version":"2.0","openRegistrations":true}"#; + let parsed_3: Nodeinfo20 = serde_json::from_str(json_str_3).unwrap(); + let serialized_3 = serde_json::to_string(&parsed_3).unwrap(); + let reparsed_3: Nodeinfo20 = serde_json::from_str(&serialized_3).unwrap(); + + assert_eq!(parsed_3, reparsed_3); + assert_eq!(parsed_3.software.name, "pixelfed"); + assert_eq!(parsed_3.software.version, "0.12.0"); + } + + #[test] + fn parse_nodeinfo_2_1() { + let json_str_1 = r##"{"version":"2.1","software":{"name":"catodon","version":"24.04-dev.2","repository":"https://codeberg.org/catodon/catodon","homepage":"https://codeberg.org/catodon/catodon"},"protocols":["activitypub"],"services":{"inbound":[],"outbound":["atom1.0","rss2.0"]},"openRegistrations":true,"usage":{"users":{"total":294,"activeHalfyear":292,"activeMonth":139},"localPosts":22616,"localComments":0},"metadata":{"nodeName":"Catodon Social","nodeDescription":"🌎 Home of Catodon, a new platform for fedi communities, initially based on Iceshrimp/Firefish/Misskey. Be aware that our first release is not out yet, so things are still experimental.","maintainer":{"name":"admin","email":"redacted@example.com"},"langs":[],"tosUrl":"https://example.com/redacted","repositoryUrl":"https://codeberg.org/catodon/catodon","feedbackUrl":"https://codeberg.org/catodon/catodon/issues","disableRegistration":false,"disableLocalTimeline":false,"disableRecommendedTimeline":true,"disableGlobalTimeline":false,"emailRequiredForSignup":true,"postEditing":true,"postImports":false,"enableHcaptcha":true,"enableRecaptcha":false,"maxNoteTextLength":8000,"maxCaptionTextLength":1500,"enableGithubIntegration":false,"enableDiscordIntegration":false,"enableEmail":true,"themeColor":"#31748f"}}"##; + let parsed_1: Nodeinfo21 = serde_json::from_str(json_str_1).unwrap(); + let serialized_1 = serde_json::to_string(&parsed_1).unwrap(); + let reparsed_1: Nodeinfo21 = serde_json::from_str(&serialized_1).unwrap(); + + assert_eq!(parsed_1, reparsed_1); + assert_eq!(parsed_1.software.name, "catodon"); + assert_eq!(parsed_1.software.version, "24.04-dev.2"); + + let json_str_2 = r#"{"version":"2.1","software":{"name":"meisskey","version":"10.102.699-m544","repository":"https://github.com/mei23/misskey"},"protocols":["activitypub"],"services":{"inbound":[],"outbound":["atom1.0","rss2.0"]},"openRegistrations":true,"usage":{"users":{"total":1123,"activeHalfyear":305,"activeMonth":89},"localPosts":268739,"localComments":0},"metadata":{"nodeName":"meisskey.one","nodeDescription":"ローカルタイムラインのないインスタンスなのだわ\n\n\n[通報・報告 (Report)](https://example.com/redacted)","name":"meisskey.one","description":"ローカルタイムラインのないインスタンスなのだわ\n\n\n[通報・報告 (Report)](https://example.com/redacted)","maintainer":{"name":"redacted","email":"redacted"},"langs":[],"announcements":[{"title":"問題・要望など","text":"問題・要望などは
#meisskeyone要望 で投稿してなのだわ"}],"relayActor":"https://example.com/redacted","relays":[],"disableRegistration":false,"disableLocalTimeline":true,"enableRecaptcha":true,"maxNoteTextLength":5000,"enableTwitterIntegration":false,"enableGithubIntegration":false,"enableDiscordIntegration":false,"enableServiceWorker":true,"proxyAccountName":"ghost"}}"#; + let parsed_2: Nodeinfo21 = serde_json::from_str(json_str_2).unwrap(); + let serialized_2 = serde_json::to_string(&parsed_2).unwrap(); + let reparsed_2: Nodeinfo21 = serde_json::from_str(&serialized_2).unwrap(); + + assert_eq!(parsed_2, reparsed_2); + assert_eq!(parsed_2.software.name, "meisskey"); + assert_eq!(parsed_2.software.version, "10.102.699-m544"); + + let json_str_3 = r##"{"metadata":{"enableGlobalTimeline":true,"enableGuestTimeline":false,"enableLocalTimeline":true,"enableRecommendedTimeline":false,"maintainer":{"name":"Firefish dev team"},"nodeDescription":"","nodeName":"Firefish","repositoryUrl":"https://firefish.dev/firefish/firefish","themeColor":"#F25A85"},"openRegistrations":false,"protocols":["activitypub"],"services":{"inbound":[],"outbound":["atom1.0","rss2.0"]},"software":{"homepage":"https://firefish.dev/firefish/firefish","name":"firefish","repository":"https://firefish.dev/firefish/firefish","version":"20240504"},"usage":{"localPosts":23857,"users":{"activeHalfyear":7,"activeMonth":7,"total":9}},"version":"2.1"}"##; + let parsed_3: Nodeinfo21 = serde_json::from_str(json_str_3).unwrap(); + let serialized_3 = serde_json::to_string(&parsed_3).unwrap(); + let reparsed_3: Nodeinfo21 = serde_json::from_str(&serialized_3).unwrap(); + + assert_eq!(parsed_3, reparsed_3); + assert_eq!(parsed_3.software.name, "firefish"); + assert_eq!(parsed_3.software.version, "20240504"); + + let json_str_4 = r#"{"version":"2.1","software":{"name":"activity-relay","version":"2.0.5","repository":"https://github.com/yukimochi/Activity-Relay"},"protocols":["activitypub"],"services":{"inbound":[],"outbound":[]},"openRegistrations":true,"usage":{"users":{"total":1,"activeMonth":1,"activeHalfyear":1}},"metadata":{}}"#; + let parsed_4: Nodeinfo21 = serde_json::from_str(json_str_4).unwrap(); + let serialized_4 = serde_json::to_string(&parsed_4).unwrap(); + let reparsed_4: Nodeinfo21 = serde_json::from_str(&serialized_4).unwrap(); + + assert_eq!(parsed_4, reparsed_4); + assert_eq!(parsed_4.software.name, "activity-relay"); + assert_eq!(parsed_4.software.version, "2.0.5"); + } +} diff --git a/packages/backend-rs/src/init/greet.rs b/packages/backend-rs/src/init/greet.rs new file mode 100644 index 0000000..01f795e --- /dev/null +++ b/packages/backend-rs/src/init/greet.rs @@ -0,0 +1,21 @@ +use crate::config::server::VERSION; + +const GREETING_MESSAGE: &str = "\ +███████╗██╗██████╗ ███████╗███████╗██╗███████╗██╗ ██╗ ○ ▄ ▄ +██╔════╝██║██╔══██╗██╔════╝██╔════╝██║██╔════╝██║ ██║ ⚬ █▄▄ █▄▄ +█████╗ ██║██████╔╝█████╗ █████╗ ██║███████╗███████║ ▄▄▄▄▄▄ ▄ +██╔══╝ ██║██╔══██╗██╔══╝ ██╔══╝ ██║╚════██║██╔══██║ █ █ █▄▄ +██║ ██║██║ ██║███████╗██║ ██║███████║██║ ██║ █ ● ● █ +╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ▀▄▄▄▄▄▄▀ + Firefish is an open-source decentralized microblogging platform. + If you like Firefish, please consider contributing to the repo. https://firefish.dev/firefish/firefish +"; + +/// Prints the greeting message and the Firefish version to stdout. +#[macros::export] +pub fn greet() { + println!("{}", GREETING_MESSAGE); + + tracing::info!("Welcome to Firefish!"); + tracing::info!("Firefish v{VERSION}"); +} diff --git a/packages/backend-rs/src/init/log.rs b/packages/backend-rs/src/init/log.rs new file mode 100644 index 0000000..a1dab99 --- /dev/null +++ b/packages/backend-rs/src/init/log.rs @@ -0,0 +1,52 @@ +use crate::config::CONFIG; +use tracing::Level; +use tracing_subscriber::FmtSubscriber; + +/// Initializes the [tracing] logger. +#[macros::export(js_name = "initializeRustLogger")] +pub fn initialize_logger() { + let mut builder = FmtSubscriber::builder(); + + if let Some(max_level) = &CONFIG.max_log_level { + builder = builder.with_max_level(match max_level.as_str() { + "error" => Level::ERROR, + "warning" => Level::WARN, + "info" => Level::INFO, + "debug" => Level::DEBUG, + "trace" => Level::TRACE, + _ => Level::INFO, // Fallback + }); + } else if let Some(levels) = &CONFIG.log_level { + // `logLevel` config is Deprecated + if levels.contains(&"trace".to_owned()) { + builder = builder.with_max_level(Level::TRACE); + } else if levels.contains(&"debug".to_owned()) { + builder = builder.with_max_level(Level::DEBUG); + } else if levels.contains(&"info".to_owned()) { + builder = builder.with_max_level(Level::INFO); + } else if levels.contains(&"warning".to_owned()) { + builder = builder.with_max_level(Level::WARN); + } else if levels.contains(&"error".to_owned()) { + builder = builder.with_max_level(Level::ERROR); + } else { + // Fallback + builder = builder.with_max_level(Level::INFO); + } + } else { + // Fallback + builder = builder.with_max_level(Level::INFO); + }; + + let subscriber = builder + .without_time() + .with_level(true) + .with_ansi(true) + .with_target(true) + .with_thread_names(true) + .with_line_number(true) + .log_internal_errors(true) + .compact() + .finish(); + + tracing::subscriber::set_global_default(subscriber).expect("Failed to initialize the logger"); +} diff --git a/packages/backend-rs/src/init/mod.rs b/packages/backend-rs/src/init/mod.rs new file mode 100644 index 0000000..b84bb27 --- /dev/null +++ b/packages/backend-rs/src/init/mod.rs @@ -0,0 +1,5 @@ +//! Initializers + +pub mod greet; +pub mod log; +pub mod system_info; diff --git a/packages/backend-rs/src/init/system_info.rs b/packages/backend-rs/src/init/system_info.rs new file mode 100644 index 0000000..82505a1 --- /dev/null +++ b/packages/backend-rs/src/init/system_info.rs @@ -0,0 +1,50 @@ +use std::sync::{Mutex, MutexGuard, OnceLock, PoisonError}; +use sysinfo::System; + +pub type SysinfoPoisonError = PoisonError>; + +static SYSTEM_INFO: OnceLock> = OnceLock::new(); + +/// Gives an access to the shared static [System] object. +/// +/// # Example +/// +/// ``` +/// # use backend_rs::init::system_info::{system_info, SysinfoPoisonError}; +/// let system_info = system_info().lock()?; +/// println!("The number of CPU threads is {}.", system_info.cpus().len()); +/// # Ok::<(), SysinfoPoisonError>(()) +/// ``` +pub fn system_info() -> &'static std::sync::Mutex { + SYSTEM_INFO.get_or_init(|| Mutex::new(System::new_all())) +} + +/// Prints the server hardware information as the server info log. +#[macros::export] +pub fn show_server_info() -> Result<(), SysinfoPoisonError> { + let system_info = system_info().lock()?; + + tracing::info!( + "Hostname: {}", + System::host_name().unwrap_or_else(|| "unknown".to_owned()) + ); + tracing::info!( + "OS: {}", + System::long_os_version().unwrap_or_else(|| "unknown".to_owned()) + ); + tracing::info!( + "Kernel: {}", + System::kernel_version().unwrap_or_else(|| "unknown".to_owned()) + ); + tracing::info!( + "CPU architecture: {}", + System::cpu_arch().unwrap_or_else(|| "unknown".to_owned()) + ); + tracing::info!("CPU threads: {}", system_info.cpus().len()); + tracing::info!("Total memory: {} MiB", system_info.total_memory() / 1048576); + tracing::info!("Free memory: {} MiB", system_info.free_memory() / 1048576); + tracing::info!("Total swap: {} MiB", system_info.total_swap() / 1048576); + tracing::info!("Free swap: {} MiB", system_info.free_swap() / 1048576); + + Ok(()) +} diff --git a/packages/backend-rs/src/lib.rs b/packages/backend-rs/src/lib.rs new file mode 100644 index 0000000..ff7a49a --- /dev/null +++ b/packages/backend-rs/src/lib.rs @@ -0,0 +1,10 @@ +#![doc = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/README.md"))] + +pub mod config; +pub mod database; +pub mod federation; +pub mod init; +pub mod misc; +pub mod model; +pub mod service; +pub mod util; diff --git a/packages/backend-rs/src/misc/check_server_block.rs b/packages/backend-rs/src/misc/check_server_block.rs new file mode 100644 index 0000000..7456cc6 --- /dev/null +++ b/packages/backend-rs/src/misc/check_server_block.rs @@ -0,0 +1,87 @@ +//! This module is used in the TypeScript backend only. +// We may want to (re)implement these functions in the `federation` module +// in a Rusty way (e.g., traits of server type) if needed. + +/// Checks if a server is blocked. +/// +/// # Argument +/// `host` - punycoded instance host +/// +/// # Example +/// ```ignore +/// # use backend_rs::misc::check_server_block::is_blocked_server; +/// # async fn f() -> Result<(), Box> { +/// assert_eq!(true, is_blocked_server("blocked.com").await?); +/// assert_eq!(false, is_blocked_server("not-blocked.com").await?); +/// assert_eq!(true, is_blocked_server("subdomain.of.blocked.com").await?); +/// assert_eq!(true, is_blocked_server("xn--l8jegik.blocked.com").await?); +/// # Ok(()) +/// # } +/// ``` +#[macros::ts_export] +pub async fn is_blocked_server(host: &str) -> Result { + Ok(crate::config::local_server_info() + .await? + .blocked_hosts + .iter() + .any(|blocked_host| { + host == blocked_host || host.ends_with(format!(".{}", blocked_host).as_str()) + })) +} + +/// Checks if a server is silenced. +/// +/// # Argument +/// `host` - punycoded instance host +/// +/// # Example +/// ```ignore +/// # use backend_rs::misc::check_server_block::is_silenced_server; +/// # async fn f() -> Result<(), Box> { +/// assert_eq!(true, is_silenced_server("silenced.com").await?); +/// assert_eq!(false, is_silenced_server("not-silenced.com").await?); +/// assert_eq!(true, is_silenced_server("subdomain.of.silenced.com").await?); +/// assert_eq!(true, is_silenced_server("xn--l8jegik.silenced.com").await?); +/// # Ok(()) +/// # } +/// ``` +#[macros::ts_export] +pub async fn is_silenced_server(host: &str) -> Result { + Ok(crate::config::local_server_info() + .await? + .silenced_hosts + .iter() + .any(|silenced_host| { + host == silenced_host || host.ends_with(format!(".{}", silenced_host).as_str()) + })) +} + +/// Checks if a server is allowlisted. +/// Returns `Ok(true)` if private mode is disabled. +/// +/// # Argument +/// `host` - punycoded instance host +/// +/// # Example +/// ```ignore +/// # use backend_rs::misc::check_server_block::is_allowed_server; +/// # async fn f() -> Result<(), Box> { +/// assert_eq!(true, is_allowed_server("allowed.com").await?); +/// assert_eq!(false, is_allowed_server("not-allowed.com").await?); +/// assert_eq!(false, is_allowed_server("subdomain.of.allowed.com").await?); +/// assert_eq!(false, is_allowed_server("xn--l8jegik.allowed.com").await?); +/// # Ok(()) +/// # } +/// ``` +#[macros::ts_export] +pub async fn is_allowed_server(host: &str) -> Result { + let meta = crate::config::local_server_info().await?; + + if !meta.private_mode.unwrap_or(false) { + return Ok(true); + } + if let Some(allowed_hosts) = meta.allowed_hosts { + return Ok(allowed_hosts.contains(&host.to_owned())); + } + Ok(false) +} diff --git a/packages/backend-rs/src/misc/check_word_mute.rs b/packages/backend-rs/src/misc/check_word_mute.rs new file mode 100644 index 0000000..f4f2e12 --- /dev/null +++ b/packages/backend-rs/src/misc/check_word_mute.rs @@ -0,0 +1,189 @@ +use crate::misc::note::elaborate; +use once_cell::sync::Lazy; +use regex::Regex; +use sea_orm::DbErr; + +#[macros::export(object)] +pub struct PartialNoteToCheckWordMute { + pub file_ids: Vec, + pub text: Option, + pub cw: Option, + pub renote_id: Option, + pub reply_id: Option, +} + +fn convert_regex(js_regex: &str) -> String { + static RE: Lazy = Lazy::new(|| Regex::new(r"^/(.+)/(.*)$").unwrap()); + RE.replace(js_regex, "(?$2)$1").to_string() +} + +fn check_word_mute_impl( + texts: &[String], + muted_words: &[String], + muted_patterns: &[String], +) -> bool { + muted_words.iter().any(|item| { + texts.iter().any(|text| { + let text_lower = text.to_lowercase(); + item.split_whitespace() + .all(|muted_word| text_lower.contains(&muted_word.to_lowercase())) + }) + }) || muted_patterns.iter().any(|muted_pattern| { + Regex::new(convert_regex(muted_pattern).as_str()) + .map(|re| texts.iter().any(|text| re.is_match(text))) + .unwrap_or(false) + }) +} + +/// Returns whether `note` should be hard-muted. +/// +/// More specifically, this function returns `Ok(true)` +/// if and only if one or more of these conditions are met: +/// +/// * the note (text or CW) contains any of the words/patterns +/// * the "parent" note(s) (reply, quote) contain any of the words/patterns +/// * the alt text of the attached files contains any of the words/patterns +/// +/// # Arguments +/// +/// * `note` : [PartialNoteToCheckWordMute] object +/// * `muted_words` : list of muted keyword lists (each array item is a space-separated keyword list that represents an AND condition) +/// * `muted_patterns` : list of JavaScript-style (e.g., `/foo/i`) regular expressions +#[macros::export] +pub async fn check_word_mute( + note: PartialNoteToCheckWordMute, + muted_words: &[String], + muted_patterns: &[String], +) -> Result { + if muted_words.is_empty() && muted_patterns.is_empty() { + Ok(false) + } else { + Ok(check_word_mute_impl( + &elaborate!(note, true).await?, + muted_words, + muted_patterns, + )) + } +} + +#[cfg(test)] +mod unit_test { + use super::check_word_mute_impl; + + #[test] + fn word_mute_match() { + let texts = [ + "The quick brown fox jumps over the lazy dog.".to_owned(), + "色は匂へど 散りぬるを 我が世誰ぞ 常ならむ".to_owned(), + "😇".to_owned(), + ]; + + let hiragana_1 = r"/[\u{3040}-\u{309f}]/u".to_owned(); + let hiragana_2 = r"/[あ-ん]/u".to_owned(); + let katakana_1 = r"/[\u{30a1}-\u{30ff}]/u".to_owned(); + let katakana_2 = r"/[ア-ン]/u".to_owned(); + let emoji = r"/[\u{1f300}-\u{1f5ff}\u{1f900}-\u{1f9ff}\u{1f600}-\u{1f64f}\u{1f680}-\u{1f6ff}\u{2600}-\u{26ff}\u{2700}-\u{27bf}\u{1f1e6}-\u{1f1ff}\u{1f191}-\u{1f251}\u{1f004}\u{1f0cf}\u{1f170}-\u{1f171}\u{1f17e}-\u{1f17f}\u{1f18e}\u{3030}\u{2b50}\u{2b55}\u{2934}-\u{2935}\u{2b05}-\u{2b07}\u{2b1b}-\u{2b1c}\u{3297}\u{3299}\u{303d}\u{00a9}\u{00ae}\u{2122}\u{23f3}\u{24c2}\u{23e9}-\u{23ef}\u{25b6}\u{23f8}-\u{23fa}]/u".to_owned(); + + assert!(check_word_mute_impl(&texts, &[], &["/the/i".to_owned()])); + + assert!(!check_word_mute_impl(&texts, &[], &["/the/".to_owned()])); + + assert!(check_word_mute_impl(&texts, &[], &["/QuICk/i".to_owned()])); + + assert!(!check_word_mute_impl(&texts, &[], &["/QuICk/".to_owned()])); + + assert!(check_word_mute_impl( + &texts, + &[ + "我".to_owned(), + "有為の奥山 今日越えて 浅き夢見し 酔ひもせず".to_owned() + ], + &[] + )); + + assert!(!check_word_mute_impl( + &texts, + &["有為の奥山 今日越えて 浅き夢見し 酔ひもせず".to_owned()], + &[] + )); + + assert!(!check_word_mute_impl( + &texts, + &[ + "有為の奥山".to_owned(), + "今日越えて".to_owned(), + "浅き夢見し".to_owned(), + "酔ひもせず".to_owned() + ], + &[] + )); + + assert!(check_word_mute_impl( + &texts, + &["yellow fox".to_owned(), "mastodon".to_owned()], + &[hiragana_1.clone()] + )); + + assert!(check_word_mute_impl( + &texts, + &["yellow fox".to_owned(), "mastodon".to_owned()], + &[hiragana_2.clone()] + )); + + assert!(!check_word_mute_impl( + &texts, + &["yellow fox".to_owned(), "mastodon".to_owned()], + &[katakana_1.clone()] + )); + + assert!(!check_word_mute_impl( + &texts, + &["yellow fox".to_owned(), "mastodon".to_owned()], + &[katakana_2.clone()] + )); + + assert!(check_word_mute_impl( + &texts, + &["brown fox".to_owned(), "mastodon".to_owned()], + &[katakana_1.clone()] + )); + + assert!(check_word_mute_impl( + &texts, + &["brown fox".to_owned(), "mastodon".to_owned()], + &[katakana_2.clone()] + )); + + assert!(check_word_mute_impl( + &texts, + &["yellow fox".to_owned(), "dog".to_owned()], + &[katakana_1.clone()] + )); + + assert!(check_word_mute_impl( + &texts, + &["yellow fox".to_owned(), "dog".to_owned()], + &[katakana_2.clone()] + )); + + assert!(check_word_mute_impl( + &texts, + &["yellow fox".to_owned(), "mastodon".to_owned()], + &[hiragana_1.clone(), katakana_1.clone()] + )); + + assert!(check_word_mute_impl( + &texts, + &["😇".to_owned(), "🥲".to_owned(), "🥴".to_owned()], + &[] + )); + + assert!(!check_word_mute_impl( + &texts, + &["🙂".to_owned(), "🥲".to_owned(), "🥴".to_owned()], + &[] + )); + + assert!(check_word_mute_impl(&texts, &[], &[emoji.clone()])); + } +} diff --git a/packages/backend-rs/src/misc/convert_host.rs b/packages/backend-rs/src/misc/convert_host.rs new file mode 100644 index 0000000..fff1f9f --- /dev/null +++ b/packages/backend-rs/src/misc/convert_host.rs @@ -0,0 +1,48 @@ +//! This module is used in the TypeScript backend only. +// We may want to (re)implement these functions in the `federation` module +// in a Rusty way (e.g., traits of actor type) if needed. + +#[macros::errors] +pub enum Error { + #[doc = "UTS #46 process has failed"] + #[error(transparent)] + Idna(#[from] idna::Errors), + #[error("failed to parse a URL")] + UrlParse(#[from] url::ParseError), + #[error("hostname is missing")] + NoHostname, +} + +#[macros::ts_export] +pub fn get_full_ap_account(username: &str, host: Option<&str>) -> Result { + Ok(match host { + Some(host) => format!("{}@{}", username, to_puny(host)?), + None => format!("{}@{}", username, extract_host(&crate::config::CONFIG.url)?), + }) +} + +#[macros::ts_export] +pub fn is_self_host(host: Option<&str>) -> Result { + Ok(match host { + Some(host) => extract_host(&crate::config::CONFIG.url)? == to_puny(host)?, + None => true, + }) +} + +#[macros::ts_export] +pub fn is_same_origin(uri: &str) -> Result { + Ok(url::Url::parse(uri)?.origin().ascii_serialization() == crate::config::CONFIG.url) +} + +#[macros::ts_export] +pub fn extract_host(uri: &str) -> Result { + url::Url::parse(uri)? + .host_str() + .ok_or(Error::NoHostname) + .and_then(|v| Ok(to_puny(v)?)) +} + +#[macros::ts_export] +pub fn to_puny(host: &str) -> Result { + idna::domain_to_ascii(host) +} diff --git a/packages/backend-rs/src/misc/emoji.rs b/packages/backend-rs/src/misc/emoji.rs new file mode 100644 index 0000000..47c2e0d --- /dev/null +++ b/packages/backend-rs/src/misc/emoji.rs @@ -0,0 +1,6 @@ +//! This module is used in the TypeScript backend only. + +#[macros::ts_export] +pub fn is_unicode_emoji(s: &str) -> bool { + emojis::get(s).is_some() +} diff --git a/packages/backend-rs/src/misc/escape_sql.rs b/packages/backend-rs/src/misc/escape_sql.rs new file mode 100644 index 0000000..727690f --- /dev/null +++ b/packages/backend-rs/src/misc/escape_sql.rs @@ -0,0 +1,46 @@ +use once_cell::sync::Lazy; +use regex::Regex; + +/// Escapes `%` and `\` in the given string. +#[macros::export] +pub fn sql_like_escape(src: &str) -> String { + src.replace('%', r"\%").replace('_', r"\_") +} + +#[macros::export] +pub fn sql_regex_escape(src: &str) -> String { + static RE: Lazy = Lazy::new(|| Regex::new(r"[!$()*+.:<=>?\[\]\^{|}-]").unwrap()); + RE.replace_all(src, r"\$1").to_string() +} + +/// Returns `true` if `src` does not contain suspicious characters like `%`. +#[macros::export] +pub fn safe_for_sql(src: &str) -> bool { + !src.contains([ + '\0', '\x08', '\x09', '\x1a', '\n', '\r', '"', '\'', '\\', '%', + ]) +} + +#[cfg(test)] +mod unit_test { + use pretty_assertions::assert_eq; + + #[test] + fn sql_like_escape() { + assert_eq!(super::sql_like_escape(""), ""); + assert_eq!(super::sql_like_escape("abc"), "abc"); + assert_eq!(super::sql_like_escape("a%bc"), r"a\%bc"); + assert_eq!(super::sql_like_escape("a呼%吸bc"), r"a呼\%吸bc"); + assert_eq!(super::sql_like_escape("a呼%吸b%_c"), r"a呼\%吸b\%\_c"); + assert_eq!(super::sql_like_escape("_اللغة العربية"), r"\_اللغة العربية"); + } + + #[test] + fn safe_for_sql() { + assert!(super::safe_for_sql("123")); + assert!(super::safe_for_sql("人間")); + assert!(!super::safe_for_sql("人間\x09")); + assert!(!super::safe_for_sql("abc\ndef")); + assert!(!super::safe_for_sql("%something%")); + } +} diff --git a/packages/backend-rs/src/misc/format_milliseconds.rs b/packages/backend-rs/src/misc/format_milliseconds.rs new file mode 100644 index 0000000..148e579 --- /dev/null +++ b/packages/backend-rs/src/misc/format_milliseconds.rs @@ -0,0 +1,51 @@ +/// Converts milliseconds to a human readable string. +#[macros::export] +pub fn format_milliseconds(milliseconds: u32) -> String { + let mut seconds = milliseconds / 1000; + let mut minutes = seconds / 60; + let mut hours = minutes / 60; + let days = hours / 24; + + seconds %= 60; + minutes %= 60; + hours %= 24; + + let mut buf: Vec = vec![]; + + if days > 0 { + buf.push(format!("{} day(s)", days)); + } + if hours > 0 { + buf.push(format!("{} hour(s)", hours)); + } + if minutes > 0 { + buf.push(format!("{} minute(s)", minutes)); + } + if seconds > 0 { + buf.push(format!("{} second(s)", seconds)); + } + + buf.join(", ") +} + +#[cfg(test)] +mod unit_test { + use pretty_assertions::assert_eq; + + #[test] + fn format_milliseconds() { + assert_eq!(super::format_milliseconds(1000), "1 second(s)"); + assert_eq!( + super::format_milliseconds(1387938), + "23 minute(s), 7 second(s)" + ); + assert_eq!( + super::format_milliseconds(34200457), + "9 hour(s), 30 minute(s)" + ); + assert_eq!( + super::format_milliseconds(998244353), + "11 day(s), 13 hour(s), 17 minute(s), 24 second(s)" + ); + } +} diff --git a/packages/backend-rs/src/misc/get_image_size.rs b/packages/backend-rs/src/misc/get_image_size.rs new file mode 100644 index 0000000..d101514 --- /dev/null +++ b/packages/backend-rs/src/misc/get_image_size.rs @@ -0,0 +1,239 @@ +use crate::{database::cache, util::http_client}; +use futures_util::AsyncReadExt; +use image::{ImageError, ImageFormat, ImageReader}; +use isahc::prelude::*; +use nom_exif::{parse_jpeg_exif, EntryValue, ExifTag}; +use std::io::Cursor; +use tokio::sync::Mutex; + +#[macros::errors] +pub enum Error { + #[error("Redis cache operation has failed")] + Cache(#[from] cache::Error), + #[error("failed to acquire an HTTP client")] + HttpClient(#[from] http_client::Error), + #[error("HTTP request failed")] + Isahc(#[from] isahc::Error), + #[doc = "bad HTTP status"] + #[error("bad HTTP status ({0})")] + BadStatus(String), + #[error("failed to decode an image")] + Image(#[from] ImageError), + #[error("failed to decode an image")] + Io(#[from] std::io::Error), + #[error("failed to extract the exif data")] + Exif(#[from] nom_exif::Error), + #[doc = "too many fetch attempts"] + #[error("too many fetch attempts for {0}")] + TooManyAttempts(String), + #[doc = "unsupported image type"] + #[error("unsupported image type ({0})")] + UnsupportedImage(String), +} + +const BROWSER_SAFE_IMAGE_TYPES: [ImageFormat; 8] = [ + ImageFormat::Png, + ImageFormat::Jpeg, + ImageFormat::Gif, + ImageFormat::WebP, + ImageFormat::Tiff, + ImageFormat::Bmp, + ImageFormat::Ico, + ImageFormat::Avif, +]; + +static MTX_GUARD: Mutex<()> = Mutex::const_new(()); + +#[cfg_attr(test, derive(Debug, PartialEq))] +#[macros::export(object)] +pub struct ImageSize { + pub width: u32, + pub height: u32, +} + +#[macros::export] +pub async fn get_image_size_from_url(url: &str) -> Result { + let attempted: bool; + + { + let _ = MTX_GUARD.lock().await; + + attempted = cache::get_one::(cache::Category::FetchUrl, url) + .await? + .is_some(); + + if !attempted { + cache::set_one(cache::Category::FetchUrl, url, &true, 10 * 60).await?; + } + } + + if attempted { + tracing::warn!("attempt limit exceeded: {}", url); + return Err(Error::TooManyAttempts(url.to_owned())); + } + + tracing::info!("retrieving image from {}", url); + + let response = http_client::client()?.get_async(url).await?; + + if !response.status().is_success() { + tracing::info!("status: {}", response.status()); + return Err(Error::BadStatus(format!( + "{} returned {}", + url, + response.status() + ))); + } + + // Read up to 8 MiB of the response body + let image_bytes = response + .map(|body| body.take(8 * 1024 * 1024)) + .bytes() + .await?; + + let reader = ImageReader::new(Cursor::new(&image_bytes)).with_guessed_format()?; + + let format = reader.format(); + if format.is_none() || !BROWSER_SAFE_IMAGE_TYPES.contains(&format.unwrap()) { + return Err(Error::UnsupportedImage(format!("{:?}", format))); + } + + let size = reader.into_dimensions()?; + + let res = ImageSize { + width: size.0, + height: size.1, + }; + + if format.unwrap() != ImageFormat::Jpeg { + return Ok(res); + } + + // handle jpeg orientation + // https://magnushoff.com/articles/jpeg-orientation/ + + let exif = parse_jpeg_exif(&*image_bytes)?; + if exif.is_none() { + return Ok(res); + } + + let orientation = exif.unwrap().get_value(&ExifTag::Orientation)?; + let rotated = + orientation.is_some() && matches!(orientation.unwrap(), EntryValue::U32(v) if v >= 5); + + if !rotated { + return Ok(res); + } + + Ok(ImageSize { + width: size.1, + height: size.0, + }) +} + +#[cfg(test)] +mod unit_test { + use super::ImageSize; + use crate::database::cache; + use pretty_assertions::assert_eq; + + #[tokio::test] + #[cfg_attr(miri, ignore)] // can't call foreign function `getaddrinfo` on OS `linux` + async fn get_image_size_from_url() { + let png_url_1 = "https://firefish.dev/firefish/firefish/-/raw/5891a90f71a8b9d5ea99c683ade7e485c685d642/packages/backend/assets/splash.png"; + let png_url_2 = "https://firefish.dev/firefish/firefish/-/raw/5891a90f71a8b9d5ea99c683ade7e485c685d642/packages/backend/assets/notification-badges/at.png"; + let png_url_3 = "https://firefish.dev/firefish/firefish/-/raw/5891a90f71a8b9d5ea99c683ade7e485c685d642/packages/backend/assets/api-doc.png"; + let rotated_jpeg_url = "https://firefish.dev/firefish/firefish/-/raw/5891a90f71a8b9d5ea99c683ade7e485c685d642/packages/backend/test/resources/rotate.jpg"; + let webp_url_1 = "https://firefish.dev/firefish/firefish/-/raw/5891a90f71a8b9d5ea99c683ade7e485c685d642/custom/assets/badges/error.webp"; + let webp_url_2 = "https://firefish.dev/firefish/firefish/-/raw/5891a90f71a8b9d5ea99c683ade7e485c685d642/packages/backend/assets/screenshots/1.webp"; + let ico_url = "https://firefish.dev/firefish/firefish/-/raw/5891a90f71a8b9d5ea99c683ade7e485c685d642/packages/backend/assets/favicon.ico"; + let gif_url = "https://firefish.dev/firefish/firefish/-/raw/b9c3dfbd3d473cb2cee20c467eeae780bc401271/packages/backend/test/resources/anime.gif"; + let mp3_url = "https://firefish.dev/firefish/firefish/-/blob/5891a90f71a8b9d5ea99c683ade7e485c685d642/packages/backend/assets/sounds/aisha/1.mp3"; + + // delete caches in case you run this test multiple times + cache::delete_all(cache::Category::FetchUrl).await.unwrap(); + + let png_size_1 = ImageSize { + width: 1024, + height: 1024, + }; + let png_size_2 = ImageSize { + width: 96, + height: 96, + }; + let png_size_3 = ImageSize { + width: 1024, + height: 354, + }; + let rotated_jpeg_size = ImageSize { + width: 256, + height: 512, + }; + let webp_size_1 = ImageSize { + width: 256, + height: 256, + }; + let webp_size_2 = ImageSize { + width: 1080, + height: 2340, + }; + let ico_size = ImageSize { + width: 256, + height: 256, + }; + let gif_size = ImageSize { + width: 256, + height: 256, + }; + + assert_eq!( + png_size_1, + super::get_image_size_from_url(png_url_1).await.unwrap() + ); + assert_eq!( + png_size_2, + super::get_image_size_from_url(png_url_2).await.unwrap() + ); + assert_eq!( + png_size_3, + super::get_image_size_from_url(png_url_3).await.unwrap() + ); + assert_eq!( + rotated_jpeg_size, + super::get_image_size_from_url(rotated_jpeg_url) + .await + .unwrap() + ); + assert_eq!( + webp_size_1, + super::get_image_size_from_url(webp_url_1).await.unwrap() + ); + assert_eq!( + webp_size_2, + super::get_image_size_from_url(webp_url_2).await.unwrap() + ); + assert_eq!( + ico_size, + super::get_image_size_from_url(ico_url).await.unwrap() + ); + assert_eq!( + gif_size, + super::get_image_size_from_url(gif_url).await.unwrap() + ); + assert!(super::get_image_size_from_url(mp3_url).await.is_err()); + } + + #[tokio::test] + #[cfg_attr(miri, ignore)] // can't call foreign function `getaddrinfo` on OS `linux` + async fn too_many_attempts() { + let url = "https://firefish.dev/firefish/firefish/-/raw/5891a90f71a8b9d5ea99c683ade7e485c685d642/packages/backend/assets/splash.png"; + + // delete caches in case you run this test multiple times + cache::delete_one(cache::Category::FetchUrl, url) + .await + .unwrap(); + + assert!(super::get_image_size_from_url(url).await.is_ok()); + assert!(super::get_image_size_from_url(url).await.is_err()); + } +} diff --git a/packages/backend-rs/src/misc/is_quote.rs b/packages/backend-rs/src/misc/is_quote.rs new file mode 100644 index 0000000..e754b82 --- /dev/null +++ b/packages/backend-rs/src/misc/is_quote.rs @@ -0,0 +1,12 @@ +#[macros::export(object, js_name = "NoteLikeForIsQuote")] +pub struct NoteLike { + pub renote_id: Option, + pub text: Option, + pub has_poll: bool, + pub file_ids: Vec, +} + +#[macros::export] +pub fn is_quote(note: &NoteLike) -> bool { + note.renote_id.is_some() && (note.text.is_some() || note.has_poll || !note.file_ids.is_empty()) +} diff --git a/packages/backend-rs/src/misc/is_safe_url.rs b/packages/backend-rs/src/misc/is_safe_url.rs new file mode 100644 index 0000000..6037103 --- /dev/null +++ b/packages/backend-rs/src/misc/is_safe_url.rs @@ -0,0 +1,42 @@ +#[macros::export] +pub fn is_safe_url(url: &str) -> bool { + if let Ok(url) = url.parse::() { + if url.host_str().unwrap_or_default() == "unix" + || !["http", "https"].contains(&url.scheme()) + || ![None, Some(80), Some(443)].contains(&url.port()) + { + return false; + } + true + } else { + false + } +} + +#[cfg(test)] +mod unit_test { + #[test] + fn is_safe_url() { + assert!(super::is_safe_url("http://firefish.dev/firefish/firefish")); + assert!(super::is_safe_url("https://firefish.dev/firefish/firefish")); + assert!(super::is_safe_url( + "http://firefish.dev:80/firefish/firefish" + )); + assert!(super::is_safe_url( + "https://firefish.dev:80/firefish/firefish" + )); + assert!(super::is_safe_url( + "http://firefish.dev:443/firefish/firefish" + )); + assert!(super::is_safe_url( + "https://firefish.dev:443/firefish/firefish" + )); + assert!(!super::is_safe_url("https://unix/firefish/firefish")); + assert!(!super::is_safe_url( + "https://firefish.dev:35/firefish/firefish" + )); + assert!(!super::is_safe_url("ftp://firefish.dev/firefish/firefish")); + assert!(!super::is_safe_url("nyaa")); + assert!(!super::is_safe_url("")); + } +} diff --git a/packages/backend-rs/src/misc/latest_version.rs b/packages/backend-rs/src/misc/latest_version.rs new file mode 100644 index 0000000..a7e5568 --- /dev/null +++ b/packages/backend-rs/src/misc/latest_version.rs @@ -0,0 +1,117 @@ +//! Fetch latest Firefish version from the Firefish repository + +use crate::{database::cache, util::http_client}; +use futures_util::AsyncReadExt; +use isahc::AsyncReadResponseExt; +use serde::Deserialize; + +#[macros::errors] +pub enum Error { + #[error("Redis cache operation has failed")] + Cache(#[from] cache::Error), + #[error("HTTP request failed")] + Isahc(#[from] isahc::Error), + #[error("failed to acquire an HTTP client")] + HttpClient(#[from] http_client::Error), + #[doc = "firefish.dev returned bad HTTP status"] + #[error("firefish.dev returned bad HTTP status ({0})")] + BadStatus(String), + #[error("failed to parse the HTTP response")] + Io(#[from] std::io::Error), + #[error("failed to parse the HTTP response as JSON")] + Json(#[from] serde_json::Error), +} + +const UPSTREAM_PACKAGE_JSON_URL: &str = + "https://firefish.dev/firefish/firefish/-/raw/main/package.json"; + +async fn get_latest_version() -> Result { + #[derive(Debug, Deserialize)] + struct Response { + version: String, + } + + // Read up to 1 MiB of the response body + let mut response = http_client::client()? + .get_async(UPSTREAM_PACKAGE_JSON_URL) + .await? + .map(|body| body.take(1024 * 1024)); + + if !response.status().is_success() { + tracing::info!("status: {}", response.status()); + return Err(Error::BadStatus(response.status().to_string())); + } + + let res_parsed: Response = serde_json::from_str(&response.text().await?)?; + + Ok(res_parsed.version) +} + +/// Returns the latest Firefish version. +#[macros::export] +pub async fn latest_version() -> Result { + let version: Option = + cache::get_one(cache::Category::FetchUrl, UPSTREAM_PACKAGE_JSON_URL).await?; + + if let Some(v) = version { + tracing::trace!("use cached value: {}", v); + Ok(v) + } else { + tracing::trace!("cache is expired, fetching the latest version"); + let fetched_version = get_latest_version().await?; + tracing::trace!("fetched value: {}", fetched_version); + + cache::set_one( + cache::Category::FetchUrl, + UPSTREAM_PACKAGE_JSON_URL, + &fetched_version, + 3 * 60 * 60, + ) + .await?; + Ok(fetched_version) + } +} + +#[cfg(test)] +mod unit_test { + use super::{latest_version, UPSTREAM_PACKAGE_JSON_URL}; + use crate::database::cache; + + fn validate_version(version: String) { + // version: YYYYMMDD or YYYYMMDD-X + assert!(version.len() >= 8); + assert!(version[..8].chars().all(|c| c.is_ascii_digit())); + + // YYYY + assert!(&version[..4] >= "2024"); + + // MM + assert!(&version[4..6] >= "01"); + assert!(&version[4..6] <= "12"); + + // DD + assert!(&version[6..8] >= "01"); + assert!(&version[6..8] <= "31"); + + // -X + if version.len() > 8 { + assert!(version.chars().nth(8).unwrap() == '-'); + assert!(version[9..].chars().all(|c| c.is_ascii_digit())); + } + } + + #[tokio::test] + #[cfg_attr(miri, ignore)] // can't call foreign function `getaddrinfo` on OS `linux` + async fn get_latest_version() { + // delete caches in case you run this test multiple times + cache::delete_one(cache::Category::FetchUrl, UPSTREAM_PACKAGE_JSON_URL) + .await + .unwrap(); + + // fetch from firefish.dev + validate_version(latest_version().await.unwrap()); + + // use cache + validate_version(latest_version().await.unwrap()); + } +} diff --git a/packages/backend-rs/src/misc/mod.rs b/packages/backend-rs/src/misc/mod.rs new file mode 100644 index 0000000..4c715f9 --- /dev/null +++ b/packages/backend-rs/src/misc/mod.rs @@ -0,0 +1,21 @@ +//! Miscellaneous utilities + +pub mod check_server_block; +pub mod check_word_mute; +pub mod convert_host; +pub mod emoji; +pub mod escape_sql; +pub mod format_milliseconds; +pub mod get_image_size; +pub mod is_quote; +pub mod is_safe_url; +pub mod latest_version; +pub mod note; +pub mod nyaify; +pub mod password; +pub mod reaction; +pub mod remove_old_attestation_challenges; +pub mod should_nyaify; +pub mod system_info; +pub mod translate; +pub mod user; diff --git a/packages/backend-rs/src/misc/note/elaborate.rs b/packages/backend-rs/src/misc/note/elaborate.rs new file mode 100644 index 0000000..c117dca --- /dev/null +++ b/packages/backend-rs/src/misc/note/elaborate.rs @@ -0,0 +1,134 @@ +use crate::{ + database::db_conn, + model::entity::{drive_file, note}, +}; +use sea_orm::{prelude::*, QuerySelect}; + +/// Returns [`Vec`] containing the post text, content warning, +/// those of the "parent" (replied/quoted) posts, and alt texts of attached files. +/// Consider using [`elaborate`] macro instead +/// when dealing with a note ([`note::Model`])-like instance. +/// +/// # Arguments +/// +/// * `file_ids` : IDs of attached files ([`drive_file::Model`]) +/// * `text`, `cw`, `renote_id`, `reply_id` : note ([`note::Model`]) fields +/// * `include_parent` : whether to take the reply-to post and quoted post into account +pub async fn elaborate_impl( + file_ids: &[String], + text: Option, + cw: Option, + renote_id: Option<&String>, + reply_id: Option<&String>, + include_parent: bool, +) -> Result, DbErr> { + let db = db_conn().await?; + + let mut texts: Vec = vec![]; + let is_renote = text.is_none(); + + if let Some(text) = text { + texts.push(text); + } + if let Some(cw) = cw { + texts.push(cw); + } + + texts.extend( + drive_file::Entity::find() + .select_only() + .column(drive_file::Column::Comment) + .filter(drive_file::Column::Id.is_in(file_ids)) + .into_tuple::>() + .all(db) + .await? + .into_iter() + .flatten(), + ); + + let mut query_note_ids = Vec::<&str>::with_capacity(2); + if let Some(renote_id) = renote_id { + if include_parent || is_renote { + query_note_ids.push(renote_id); + } + } + if let Some(reply_id) = reply_id { + if include_parent { + query_note_ids.push(reply_id); + } + } + if !query_note_ids.is_empty() { + texts.extend( + note::Entity::find() + .filter(note::Column::Id.is_in(query_note_ids)) + .select_only() + .columns([note::Column::Text, note::Column::Cw]) + .into_tuple::<(Option, Option)>() + .one(db) + .await? + .into_iter() + .flat_map(|(text, cw)| [text, cw]) + .flatten(), + ); + } + + Ok(texts) +} + +/// Returns [`Vec`] containing the post text, content warning, +/// those of the "parent" (replied/quoted) posts, and alt texts of attached files. +/// +/// # Arguments +/// +/// * `note_like` : a note ([`note::Model`])-like instance containing +/// `file_ids`, `text`, `cw`, `renote_id`, `reply_id` fields +/// * `include_parent` ([bool]) : whether to take the reply-to post and quoted post into account +/// +/// # Caveats +/// +/// The `note_like` argument should not contain function calls +/// (e.g., `elaborate!(note.clone(), false)`) +/// since the function will be called multiple times after macro expansion. +/// +/// # Examples +/// +/// ``` +/// # use backend_rs::misc::note::elaborate; +/// // note-like struct +/// struct NoteLike { +/// // required fields +/// file_ids: Vec, +/// text: Option, +/// cw: Option, +/// renote_id: Option, +/// reply_id: Option, +/// // arbitrary extra fields +/// extra_field_1: u32, +/// extra_field_2: Vec, +/// } +/// +/// async fn print_all_related_texts( +/// note: &NoteLike +/// ) -> Result<(), sea_orm::DbErr> { +/// let all_texts = elaborate!(note, true).await?; +/// all_texts.iter().map(|text| println!("{}", text)); +/// Ok(()) +/// } +/// ``` +#[doc(hidden)] // hide the macro in the top doc page +#[macro_export] +macro_rules! elaborate { + ($note_like:expr, $include_parent:expr) => { + $crate::misc::note::elaborate::elaborate_impl( + &$note_like.file_ids, + $note_like.text.clone(), + $note_like.cw.clone(), + $note_like.renote_id.as_ref(), + $note_like.reply_id.as_ref(), + $include_parent, + ) + }; +} + +#[doc(inline)] // show the macro in the module doc page +pub use elaborate; diff --git a/packages/backend-rs/src/misc/note/mod.rs b/packages/backend-rs/src/misc/note/mod.rs new file mode 100644 index 0000000..84e2560 --- /dev/null +++ b/packages/backend-rs/src/misc/note/mod.rs @@ -0,0 +1,5 @@ +pub use elaborate::elaborate; +pub use summarize::summarize; + +pub mod elaborate; +pub mod summarize; diff --git a/packages/backend-rs/src/misc/note/summarize.rs b/packages/backend-rs/src/misc/note/summarize.rs new file mode 100644 index 0000000..0a6240d --- /dev/null +++ b/packages/backend-rs/src/misc/note/summarize.rs @@ -0,0 +1,145 @@ +#[macros::export(js_name = "getNoteSummary")] +pub fn summarize_impl( + file_ids: &[String], + text: Option, + cw: Option, + has_poll: bool, +) -> String { + let mut buf: Vec = vec![]; + + if let Some(cw) = cw { + buf.push(cw) + } else if let Some(text) = text { + buf.push(text) + } + + match file_ids.len() { + 0 => (), + 1 => buf.push("📎".to_owned()), + n => buf.push(format!("📎 ({})", n)), + }; + + if has_poll { + buf.push("📊".to_owned()) + } + + buf.join(" ") +} + +/// Returns the summary of a post, which can be used to display posts in small spaces +/// such as push notifications. +/// +/// # Arguments +/// +/// * `note_like` : a note ([`note::Model`](crate::model::entity::note::Model))-like instance containing +/// `file_ids`, `text`, `cw`, `has_poll` fields +/// +/// # Caveats +/// +/// The `note_like` argument should not contain function calls +/// (e.g., `summarize!(note.clone())`) +/// since the function will be called multiple times after macro expansion. +/// +/// # Examples +/// +/// ``` +/// # use backend_rs::misc::note::summarize; +/// // note-like struct +/// struct NoteLike { +/// // required fields +/// file_ids: Vec, +/// text: Option, +/// cw: Option, +/// has_poll: bool, +/// // arbitrary extra fields +/// renote_id: Option, +/// reply_id: Option, +/// extra_field_1: u32, +/// extra_field_2: Vec, +/// } +/// +/// fn print_note_summary(note: &NoteLike) { +/// println!("{}", summarize!(note)); +/// } +/// ``` +#[doc(hidden)] // hide the macro in the top doc page +#[macro_export] +macro_rules! summarize { + ($note_like:expr) => { + $crate::misc::note::summarize::summarize_impl( + &$note_like.file_ids, + $note_like.text.to_owned(), + $note_like.cw.to_owned(), + $note_like.has_poll.to_owned(), + ) + }; +} + +#[doc(inline)] // show the macro in the module doc page +pub use summarize; + +#[cfg(test)] +mod unit_test { + use super::summarize; + use pretty_assertions::assert_eq; + + struct NoteLike { + file_ids: Vec, + text: Option, + cw: Option, + has_poll: bool, + } + + #[test] + fn summarize_note() { + let note = NoteLike { + file_ids: vec![], + text: Some("Hello world!".to_owned()), + cw: None, + has_poll: false, + }; + assert_eq!(summarize!(note), "Hello world!"); + + let note_with_cw = NoteLike { + file_ids: vec![], + text: Some("Hello world!".to_owned()), + cw: Some("Content warning".to_owned()), + has_poll: false, + }; + assert_eq!(summarize!(note_with_cw), "Content warning"); + + let note_with_file_and_cw = NoteLike { + file_ids: vec!["9s7fmcqogiq4igin".to_owned()], + text: None, + cw: Some("Selfie, no ec".to_owned()), + has_poll: false, + }; + assert_eq!(summarize!(note_with_file_and_cw), "Selfie, no ec 📎"); + + let note_with_files_only = NoteLike { + file_ids: vec![ + "9s7fmcqogiq4igin".to_owned(), + "9s7qrld5u14cey98".to_owned(), + "9s7gebs5zgts4kca".to_owned(), + "9s5z3e4vefqd29ee".to_owned(), + ], + text: None, + cw: None, + has_poll: false, + }; + assert_eq!(summarize!(note_with_files_only), "📎 (4)"); + + let note_all = NoteLike { + file_ids: vec![ + "9s7fmcqogiq4igin".to_owned(), + "9s7qrld5u14cey98".to_owned(), + "9s7gebs5zgts4kca".to_owned(), + "9s5z3e4vefqd29ee".to_owned(), + ], + text: Some("Hello world!".to_owned()), + cw: Some("Content warning".to_owned()), + has_poll: true, + }; + assert_eq!(summarize!(note_all), "Content warning 📎 (4) 📊"); + } +} diff --git a/packages/backend-rs/src/misc/nyaify.rs b/packages/backend-rs/src/misc/nyaify.rs new file mode 100644 index 0000000..c58795f --- /dev/null +++ b/packages/backend-rs/src/misc/nyaify.rs @@ -0,0 +1,127 @@ +//! Cat language converter + +use once_cell::sync::Lazy; +use regex::{Captures, Regex}; + +/// Converts the given text into the cat language. +/// +/// refs: +/// * +/// * +/// +/// # Arguments +/// +/// * `text` : original text +/// * `lang` : language code (e.g., `Some("en")`, `Some("en-US")`, `Some("uk-UA")`, `None`) +/// +/// # Example +/// +/// ``` +/// # use backend_rs::misc::nyaify::nyaify; +/// assert_eq!(nyaify("I'll take a nap.", Some("en")), "I'll take a nyap."); +/// ``` +#[macros::export] +pub fn nyaify(text: &str, lang: Option<&str>) -> String { + let mut to_return = text.to_owned(); + + { + static RE: Lazy = + Lazy::new(|| Regex::new(r"(?i-u)(non)([bcdfghjklmnpqrstvwxyz])").unwrap()); + to_return = RE + .replace_all(&to_return, |caps: &Captures<'_>| { + format!( + "{}{}", + match &caps[1] { + "non" => "nyan", + "Non" => "Nyan", + "NON" => "NYAN", + _ => &caps[1], + }, + &caps[2] + ) + }) + .to_string(); + } + + { + static RE: Lazy = Lazy::new(|| Regex::new(r"다([..。…??!!\s]|$)").unwrap()); + to_return = RE.replace_all(&to_return, r"다냥$1").to_string(); + } + + { + static RE: Lazy = Lazy::new(|| Regex::new(r"야([??\s]|$)").unwrap()); + to_return = RE.replace_all(&to_return, r"냥$1").to_string(); + } + + { + static RE: Lazy = Lazy::new(|| Regex::new(r"([나-낳])").unwrap()); + to_return = RE + .replace_all(&to_return, |caps: &Captures<'_>| { + format!( + "{}", + char::from_u32( + caps[0].chars().next().unwrap() as u32 + 56 /* = '냐' - '나' */ + ) + .unwrap() + ) + }) + .to_string(); + } + + if lang.is_some() && lang.unwrap().starts_with("zh") { + static RE: Lazy = Lazy::new(|| Regex::new(r"[妙庙描渺瞄秒苗藐廟]").unwrap()); + to_return = RE.replace_all(&to_return, "喵").to_string(); + } + + let simple_rules = [ + ("な", "にゃ"), + ("ナ", "ニャ"), + ("ナ", "ニャ"), + ("na", "nya"), + ("NA", "NYA"), + ("Na", "Nya"), + ("morning", "mornyan"), + ("Morning", "Mornyan"), + ("MORNING", "MORNYAN"), + ("everyone", "everynyan"), + ("Everyone", "Everynyan"), + ("EVERYONE", "EVERYNYAN"), + ("να", "νια"), + ("ΝΑ", "ΝΙΑ"), + ("Να", "Νια"), + ]; + + simple_rules.into_iter().for_each(|(from, to)| { + to_return = to_return.replace(from, to); + }); + + to_return +} + +#[cfg(test)] +mod unit_test { + use pretty_assertions::assert_eq; + + #[test] + fn nyaify() { + assert_eq!( + super::nyaify("Hello everyone!", Some("en")), + "Hello everynyan!" + ); + assert_eq!( + super::nyaify("Nonbinary people", None), + "Nyanbinyary people" + ); + assert_eq!(super::nyaify("1分鐘是60秒", Some("zh-TW")), "1分鐘是60喵"); + assert_eq!( + super::nyaify("1分間は60秒です", Some("ja-JP")), + "1分間は60秒です" + ); + assert_eq!( + super::nyaify("あなたは誰ですか", None), + "あにゃたは誰ですか" + ); + assert_eq!(super::nyaify("Ναυτικός", Some("el-GR")), "Νιαυτικός"); + assert_eq!(super::nyaify("일어나다", None), "일어냐다냥"); + } +} diff --git a/packages/backend-rs/src/misc/password.rs b/packages/backend-rs/src/misc/password.rs new file mode 100644 index 0000000..8d6be41 --- /dev/null +++ b/packages/backend-rs/src/misc/password.rs @@ -0,0 +1,75 @@ +//! Utilities for password hash generation and verification + +use argon2::{ + password_hash, + password_hash::{rand_core::OsRng, PasswordHash, PasswordHasher, PasswordVerifier, SaltString}, + Argon2, +}; + +/// Hashes the given password using [argon2] algorithm. +#[macros::export] +pub fn hash_password(password: &str) -> Result { + let salt = SaltString::generate(&mut OsRng); + Ok(Argon2::default() + .hash_password(password.as_bytes(), &salt)? + .to_string()) +} + +#[macros::errors] +pub enum Error { + #[error("failed to verify password against bcrypt hash")] + Bcrypt(#[from] bcrypt::BcryptError), + #[error("failed to verify password against argon2 hash")] + Argon2(#[from] argon2::Error), + #[error("invalid argon2 password hash")] + InvalidArgon2Hash(#[from] password_hash::Error), +} + +/// Checks whether the given password and hash match. +#[macros::export] +pub fn verify_password(password: &str, hash: &str) -> Result { + if is_old_password_algorithm(hash) { + Ok(bcrypt::verify(password, hash)?) + } else { + let parsed_hash = PasswordHash::new(hash)?; + Ok(Argon2::default() + .verify_password(password.as_bytes(), &parsed_hash) + .is_ok()) + } +} + +/// Returns whether the [bcrypt] algorithm is used for the password hash. +#[inline] +#[macros::export] +pub fn is_old_password_algorithm(hash: &str) -> bool { + // bcrypt hashes start with $2[ab]$ + hash.starts_with("$2") +} + +#[cfg(test)] +mod unit_test { + use super::{hash_password, is_old_password_algorithm}; + + #[test] + #[cfg_attr(miri, ignore)] // too slow + fn verify_password() { + let password = "omWc*%sD^fn7o2cXmc9e2QasBdrbRuhNB*gx!J5"; + + let hash = hash_password(password).unwrap(); + assert!(super::verify_password(password, hash.as_str()).unwrap()); + + let argon2_hash = "$argon2id$v=19$m=19456,t=2,p=1$jty3puDFd4ENv/lgHn3ROQ$kRHDdEoVv2rruvnF731E74NxnYlvj5FMgePdGIIq3Jk"; + let argon2_invalid_hash = "$argon2id$v=19$m=19456,t=2,p=1$jty3puDFd4ENv/lgHn3ROQ$kRHDdEoVv2rruvnF731E74NxnYlvj4FMgePdGIIq3Jk"; + let bcrypt_hash = "$2a$12$WzUc.20jgbHmQjUMqTr8vOhKqYbS1BUvubapv/GLjCK1IN.h4e4la"; + let bcrypt_invalid_hash = "$2a$12$WzUc.20jgbHmQjUMqTr7vOhKqYbS1BUvubapv/GLjCK1IN.h4e4la"; + + assert!(!is_old_password_algorithm(argon2_hash)); + assert!(is_old_password_algorithm(bcrypt_hash)); + + assert!(super::verify_password(password, argon2_hash).unwrap()); + assert!(super::verify_password(password, bcrypt_hash).unwrap()); + + assert!(!super::verify_password(password, argon2_invalid_hash).unwrap()); + assert!(!super::verify_password(password, bcrypt_invalid_hash).unwrap()); + } +} diff --git a/packages/backend-rs/src/misc/reaction.rs b/packages/backend-rs/src/misc/reaction.rs new file mode 100644 index 0000000..afae0a6 --- /dev/null +++ b/packages/backend-rs/src/misc/reaction.rs @@ -0,0 +1,198 @@ +use crate::{config::local_server_info, database::db_conn, model::entity::emoji}; +use once_cell::sync::Lazy; +use regex::Regex; +use sea_orm::prelude::*; +use std::collections::HashMap; + +#[cfg_attr(test, derive(PartialEq, Debug))] +#[macros::export(object)] +pub struct DecodedReaction { + pub reaction: String, + pub name: Option, + pub host: Option, +} + +#[macros::export] +pub fn decode_reaction(reaction: &str) -> DecodedReaction { + // Misskey allows you to include "+" and "-" in emoji shortcodes + // MFM spec: https://github.com/misskey-dev/mfm.js/blob/6aaf68089023c6adebe44123eebbc4dcd75955e0/docs/syntax.md?plain=1#L583 + // Misskey's implementation: https://github.com/misskey-dev/misskey/blob/bba3097765317cbf95d09627961b5b5dce16a972/packages/backend/src/core/ReactionService.ts#L68 + static RE: Lazy = + Lazy::new(|| Regex::new(r"^:([0-9A-Za-z_+-]+)(?:@([0-9A-Za-z_.-]+))?:$").unwrap()); + + if let Some(captures) = RE.captures(reaction) { + let name = &captures[1]; + let host = captures.get(2).map(|s| s.as_str()); + + DecodedReaction { + reaction: format!(":{}@{}:", name, host.unwrap_or(".")), + name: Some(name.to_owned()), + host: host.map(|s| s.to_owned()), + } + } else { + DecodedReaction { + reaction: reaction.to_owned(), + name: None, + host: None, + } + } +} + +#[macros::export] +pub fn count_reactions(reactions: &HashMap) -> HashMap { + let mut res = HashMap::::new(); + + for (reaction, count) in reactions.iter() { + if count > &0 { + let decoded = decode_reaction(reaction).reaction; + let total = res.entry(decoded).or_insert(0); + *total += count; + } + } + + res +} + +#[macros::errors] +pub enum Error { + #[doc = "UTS #46 process has failed"] + #[error(transparent)] + Idna(#[from] idna::Errors), + #[error(transparent)] + Db(#[from] DbErr), +} + +#[macros::export] +pub async fn to_db_reaction(reaction: Option<&str>, host: Option<&str>) -> Result { + if let Some(reaction) = reaction { + // FIXME: Is it okay to do this only here? + // This was introduced in https://firefish.dev/firefish/firefish/-/commit/af730e75b6fc1a57ca680ce83459d7e433b130cf + if reaction.contains('❤') || reaction.contains("♥️") { + return Ok("❤️".to_owned()); + } + + // check if the reaction is an Unicode emoji + if emojis::get(reaction).is_some() { + return Ok(reaction.to_owned()); + } + + static RE: Lazy = + Lazy::new(|| Regex::new(r"^:([0-9A-Za-z_+-]+)(?:@\.)?:$").unwrap()); + + if let Some(captures) = RE.captures(reaction) { + let name = &captures[1]; + let db = db_conn().await?; + + if let Some(host) = host { + // remote emoji + let ascii_host = idna::domain_to_ascii(host)?; + + // TODO: Does SeaORM have the `exists` method? + if emoji::Entity::find() + .filter(emoji::Column::Name.eq(name)) + .filter(emoji::Column::Host.eq(&ascii_host)) + .one(db) + .await? + .is_some() + { + return Ok(format!(":{name}@{ascii_host}:")); + } + + tracing::info!("nonexistent remote custom emoji: :{name}@{ascii_host}:"); + } else { + // local emoji + // TODO: Does SeaORM have the `exists` method? + if emoji::Entity::find() + .filter(emoji::Column::Name.eq(name)) + .filter(emoji::Column::Host.is_null()) + .one(db) + .await? + .is_some() + { + return Ok(format!(":{name}:")); + } + + tracing::info!("nonexistent local custom emoji: :{name}:"); + } + }; + }; + + Ok(local_server_info().await?.default_reaction) +} + +#[cfg(test)] +mod unit_test { + use super::DecodedReaction; + use pretty_assertions::{assert_eq, assert_ne}; + + #[test] + fn decode_reaction() { + let unicode_emoji_1 = DecodedReaction { + reaction: "⭐".to_owned(), + name: None, + host: None, + }; + let unicode_emoji_2 = DecodedReaction { + reaction: "🩷".to_owned(), + name: None, + host: None, + }; + + assert_eq!(super::decode_reaction("⭐"), unicode_emoji_1); + assert_eq!(super::decode_reaction("🩷"), unicode_emoji_2); + + assert_ne!(super::decode_reaction("⭐"), unicode_emoji_2); + assert_ne!(super::decode_reaction("🩷"), unicode_emoji_1); + + let unicode_emoji_3 = DecodedReaction { + reaction: "🖖🏿".to_owned(), + name: None, + host: None, + }; + assert_eq!(super::decode_reaction("🖖🏿"), unicode_emoji_3); + + let local_emoji = DecodedReaction { + reaction: ":meow_melt_tears@.:".to_owned(), + name: Some("meow_melt_tears".to_owned()), + host: None, + }; + assert_eq!(super::decode_reaction(":meow_melt_tears:"), local_emoji); + + let remote_emoji_1 = DecodedReaction { + reaction: ":meow_uwu@some-domain.example.org:".to_owned(), + name: Some("meow_uwu".to_owned()), + host: Some("some-domain.example.org".to_owned()), + }; + assert_eq!( + super::decode_reaction(":meow_uwu@some-domain.example.org:"), + remote_emoji_1 + ); + + let remote_emoji_2 = DecodedReaction { + reaction: ":C++23@xn--eckwd4c7c.example.org:".to_owned(), + name: Some("C++23".to_owned()), + host: Some("xn--eckwd4c7c.example.org".to_owned()), + }; + assert_eq!( + super::decode_reaction(":C++23@xn--eckwd4c7c.example.org:"), + remote_emoji_2 + ); + + let invalid_reaction_1 = DecodedReaction { + reaction: ":foo".to_owned(), + name: None, + host: None, + }; + assert_eq!(super::decode_reaction(":foo"), invalid_reaction_1); + + let invalid_reaction_2 = DecodedReaction { + reaction: ":foo&@example.com:".to_owned(), + name: None, + host: None, + }; + assert_eq!( + super::decode_reaction(":foo&@example.com:"), + invalid_reaction_2 + ); + } +} diff --git a/packages/backend-rs/src/misc/remove_old_attestation_challenges.rs b/packages/backend-rs/src/misc/remove_old_attestation_challenges.rs new file mode 100644 index 0000000..725f6ac --- /dev/null +++ b/packages/backend-rs/src/misc/remove_old_attestation_challenges.rs @@ -0,0 +1,18 @@ +// TODO: Migrate to Redis + +use crate::{database::db_conn, model::entity::attestation_challenge}; +use chrono::{Duration, Utc}; +use sea_orm::prelude::*; + +/// Delete all entries in the [attestation_challenge] table created at more than 5 minutes ago +#[macros::export] +pub async fn remove_old_attestation_challenges() -> Result<(), DbErr> { + let res = attestation_challenge::Entity::delete_many() + .filter(attestation_challenge::Column::CreatedAt.lt(Utc::now() - Duration::minutes(5))) + .exec(db_conn().await?) + .await?; + + tracing::info!("removed {} rows", res.rows_affected); + + Ok(()) +} diff --git a/packages/backend-rs/src/misc/should_nyaify.rs b/packages/backend-rs/src/misc/should_nyaify.rs new file mode 100644 index 0000000..8476678 --- /dev/null +++ b/packages/backend-rs/src/misc/should_nyaify.rs @@ -0,0 +1,45 @@ +//! Determine whether to enable the cat language conversion + +use crate::{ + database::{cache, db_conn}, + model::entity::user, +}; +use sea_orm::{DbErr, EntityTrait, QuerySelect, SelectColumns}; + +#[macros::errors] +pub enum Error { + #[doc = "database error"] + #[error(transparent)] + Db(#[from] DbErr), + #[doc = "cache error"] + #[error(transparent)] + Cache(#[from] cache::Error), + #[error("user {0} not found")] + NotFound(String), +} + +#[macros::export] +pub async fn should_nyaify(reader_user_id: &str) -> Result { + let cached_value = cache::get_one::(cache::Category::CatLang, reader_user_id).await?; + if let Some(value) = cached_value { + return Ok(value); + } + + let fetched_value = user::Entity::find_by_id(reader_user_id) + .select_only() + .select_column(user::Column::ReadCatLanguage) + .into_tuple::() + .one(db_conn().await?) + .await? + .ok_or_else(|| Error::NotFound(reader_user_id.to_owned()))?; + + cache::set_one( + cache::Category::CatLang, + reader_user_id, + &fetched_value, + 10 * 60, + ) + .await?; + + Ok(fetched_value) +} diff --git a/packages/backend-rs/src/misc/system_info.rs b/packages/backend-rs/src/misc/system_info.rs new file mode 100644 index 0000000..d5191c1 --- /dev/null +++ b/packages/backend-rs/src/misc/system_info.rs @@ -0,0 +1,88 @@ +//! Utilities to check hardware information such as cpu, memory, storage usage + +use crate::init::system_info::{system_info, SysinfoPoisonError}; +use sysinfo::{Disks, MemoryRefreshKind}; + +// TODO: i64 -> u64 (we can't export u64 to Node.js) + +#[macros::export(object)] +pub struct Cpu { + pub model: String, + // TODO: u16 -> usize (we can't export usize to Node.js) + pub cores: u16, +} + +#[macros::export(object)] +pub struct Memory { + /// Total memory amount in bytes + pub total: i64, + /// Used memory amount in bytes + pub used: i64, + /// Available (for (re)use) memory amount in bytes + pub available: i64, +} + +#[macros::export(object)] +pub struct Storage { + /// Total storage space in bytes + pub total: i64, + /// Used storage space in bytes + pub used: i64, +} + +#[macros::export] +pub fn cpu_info() -> Result { + let system_info = system_info().lock()?; + + Ok(Cpu { + model: match system_info.cpus() { + [] => { + tracing::debug!("failed to get CPU info"); + "unknown".to_owned() + } + cpus => cpus[0].brand().to_owned(), + }, + cores: system_info.cpus().len() as u16, + }) +} + +#[macros::export] +pub fn cpu_usage() -> Result { + let mut system_info = system_info().lock()?; + system_info.refresh_cpu_usage(); + + let total_cpu_usage: f32 = system_info.cpus().iter().map(|cpu| cpu.cpu_usage()).sum(); + let cpu_threads = system_info.cpus().len(); + + Ok(total_cpu_usage / (cpu_threads as f32)) +} + +#[macros::export] +pub fn memory_usage() -> Result { + let mut system_info = system_info().lock()?; + + system_info.refresh_memory_specifics(MemoryRefreshKind::new().with_ram()); + + Ok(Memory { + total: system_info.total_memory() as i64, + used: system_info.used_memory() as i64, + available: system_info.available_memory() as i64, + }) +} + +#[macros::export] +pub fn storage_usage() -> Option { + // Get the first disk that is actualy used (has available space & has at least 1 GB total space). + let disks = Disks::new_with_refreshed_list(); + let disk = disks + .iter() + .find(|disk| disk.available_space() > 0 && disk.total_space() > 1024 * 1024 * 1024)?; + + let total = disk.total_space() as i64; + let available = disk.available_space() as i64; + + Some(Storage { + total, + used: total - available, + }) +} diff --git a/packages/backend-rs/src/misc/translate.rs b/packages/backend-rs/src/misc/translate.rs new file mode 100644 index 0000000..d783b86 --- /dev/null +++ b/packages/backend-rs/src/misc/translate.rs @@ -0,0 +1,282 @@ +use crate::{ + config::{local_server_info, server, CONFIG}, + util::http_client, +}; + +#[macros::errors] +pub enum Error { + #[doc = "database error"] + #[error(transparent)] + Db(#[from] sea_orm::DbErr), + #[error("failed to acquire an HTTP client")] + HttpClient(#[from] http_client::Error), + #[error("invalid http request body")] + InvalidRequestBody(#[from] isahc::http::Error), + #[error("http request failed")] + HttpRequest(#[from] isahc::Error), + #[error("failed to serialize the request body")] + Serialize(#[from] serde_json::Error), + #[error("Libretranslate API url is not set")] + MissingApiUrl, + #[error("DeepL API key is not set")] + MissingApiKey, + #[error("no response")] + NoResponse, + #[error("translator is not set")] + NoTranslator, +} + +#[macros::export(object)] +pub struct Translation { + pub source_lang: String, + pub text: String, +} + +#[inline] +fn is_zh_hant_tw(lang: &str) -> bool { + ["zh-tw", "zh-hant", "zh-hant-tw"].contains(&lang.to_ascii_lowercase().as_str()) +} + +#[macros::export] +pub async fn translate( + text: &str, + source_lang: Option<&str>, + target_lang: &str, +) -> Result { + let config = local_server_info().await?; + + let translation = if let Some(api_key) = config.deepl_auth_key { + deepl_translate::translate( + text, + source_lang, + target_lang, + &api_key, + config.deepl_is_pro, + ) + .await? + } else if let Some(api_url) = config.libre_translate_api_url { + libre_translate::translate( + text, + source_lang, + target_lang, + &api_url, + config.libre_translate_api_key.as_deref(), + ) + .await? + } else if let Some(server::DeepLConfig { + auth_key, is_pro, .. + }) = CONFIG.deepl.as_ref() + { + deepl_translate::translate( + text, + source_lang, + target_lang, + auth_key.as_ref().ok_or(Error::MissingApiKey)?, + is_pro.unwrap_or(false), + ) + .await? + } else if let Some(server::LibreTranslateConfig { + api_url, api_key, .. + }) = CONFIG.libre_translate.as_ref() + { + libre_translate::translate( + text, + source_lang, + target_lang, + api_url.as_ref().ok_or(Error::MissingApiUrl)?, + api_key.as_deref(), + ) + .await? + } else { + return Err(Error::NoTranslator); + }; + + Ok(translation) +} + +mod deepl_translate { + use crate::util::http_client; + use futures_util::AsyncReadExt; + use isahc::{AsyncReadResponseExt, Request}; + use serde::Deserialize; + use serde_json::json; + + #[derive(Deserialize)] + struct Response { + translations: Vec, + } + + #[derive(Deserialize, Clone)] + struct Translation { + detected_source_language: Option, + text: String, + } + + pub(super) async fn translate( + text: &str, + source_lang: Option<&str>, + target_lang: &str, + api_key: &str, + is_pro: bool, + ) -> Result { + let client = http_client::client()?; + + let api_url = if is_pro { + "https://api.deepl.com/v2/translate" + } else { + "https://api-free.deepl.com/v2/translate" + }; + + let to_zh_hant_tw = super::is_zh_hant_tw(target_lang); + + let mut target_lang = target_lang.split('-').collect::>()[0]; + + // DeepL API requires us to specify "en-US" or "en-GB" for English + // translations ("en" does not work), so we need to address it + if target_lang == "en" { + target_lang = "en-US"; + } + + let body = if let Some(source_lang) = source_lang { + let source_lang = source_lang.split('-').collect::>()[0]; + + json!({ + "text": [text], + "source_lang": source_lang, + "target_lang": target_lang + }) + } else { + json!({ + "text": [text], + "target_lang": target_lang + }) + }; + + let request = Request::post(api_url) + .header("Authorization", format!("DeepL-Auth-Key {}", api_key)) + .header("Content-Type", "application/json") + .body(serde_json::to_string(&body)?)?; + + // Read up to 1 MiB of the response body + let response = client + .send_async(request) + .await? + .map(|body| body.take(1024 * 1024)) + .json::() + .await?; + + let result = response + .translations + .first() + .ok_or(super::Error::NoResponse)? + .to_owned(); + + let mut translation = super::Translation { + source_lang: source_lang + .map(|s| s.to_owned()) + .or(result.detected_source_language) + .and_then(|lang| { + if lang.is_ascii() { + Some(lang.to_ascii_lowercase()) + } else { + None + } + }) + .unwrap_or_else(|| "unknown".to_owned()), + text: result.text, + }; + + // DeepL translate don't provide zh-Hant-TW translations at this moment, + // so we convert zh-Hans-CN translations into zh-Hant-TW using zhconv. + if to_zh_hant_tw { + translation.text = zhconv::zhconv(&translation.text, zhconv::Variant::ZhTW); + } + + Ok(translation) + } +} + +mod libre_translate { + use crate::util::http_client; + use futures_util::AsyncReadExt; + use isahc::{AsyncReadResponseExt, Request}; + use serde::Deserialize; + use serde_json::json; + + #[derive(Deserialize, Clone)] + #[serde(rename_all = "camelCase")] + struct Translation { + translated_text: String, + detected_language: DetectedLanguage, + } + + #[derive(Deserialize, Clone)] + struct DetectedLanguage { + language: String, + } + + pub(super) async fn translate( + text: &str, + source_lang: Option<&str>, + target_lang: &str, + api_url: &str, + api_key: Option<&str>, + ) -> Result { + let client = http_client::client()?; + + let target_lang = if super::is_zh_hant_tw(target_lang) { + "zt" + } else { + target_lang.split('-').collect::>()[0] + }; + + let body = if let Some(source_lang) = source_lang { + let source_lang = source_lang.split('-').collect::>()[0]; + + json!({ + "q": [text], + "source": source_lang, + "target": target_lang, + "format": "text", + "alternatives": 1, + "api_key": api_key.unwrap_or_default() + }) + } else { + json!({ + "q": [text], + "source": "auto", + "target": target_lang, + "format": "text", + "alternatives": 1, + "api_key": api_key.unwrap_or_default() + }) + }; + + let request = Request::post(api_url) + .header("Content-Type", "application/json") + .body(serde_json::to_string(&body)?)?; + + // Read up to 1 MiB of the response body + let result = client + .send_async(request) + .await? + .map(|body| body.take(1024 * 1024)) + .json::() + .await?; + + Ok(super::Translation { + source_lang: source_lang + .map(|s| s.to_owned()) + .or(Some(result.detected_language.language)) + .and_then(|lang| { + if lang.is_ascii() { + Some(lang.to_ascii_lowercase()) + } else { + None + } + }) + .unwrap_or_else(|| "unknown".to_owned()), + text: result.translated_text, + }) + } +} diff --git a/packages/backend-rs/src/misc/user/count.rs b/packages/backend-rs/src/misc/user/count.rs new file mode 100644 index 0000000..70353ef --- /dev/null +++ b/packages/backend-rs/src/misc/user/count.rs @@ -0,0 +1,17 @@ +use crate::{federation::internal_actor::INTERNAL_ACTORS, model::entity::user}; +use sea_orm::prelude::*; + +pub async fn local_total(db: &DbConn) -> Result { + user::Entity::find() + .filter(user::Column::Host.is_null()) + .count(db) + .await + .map(|count| count - INTERNAL_ACTORS) +} + +#[macros::ts_export(js_name = "countLocalUsers")] +pub async fn local_total_js() -> Result { + local_total(crate::database::db_conn().await?) + .await + .map(|count| count as u32) +} diff --git a/packages/backend-rs/src/misc/user/mod.rs b/packages/backend-rs/src/misc/user/mod.rs new file mode 100644 index 0000000..16ee43a --- /dev/null +++ b/packages/backend-rs/src/misc/user/mod.rs @@ -0,0 +1 @@ +pub mod count; diff --git a/packages/backend-rs/src/model/entity/abuse_user_report.rs b/packages/backend-rs/src/model/entity/abuse_user_report.rs new file mode 100644 index 0000000..70ab552 --- /dev/null +++ b/packages/backend-rs/src/model/entity/abuse_user_report.rs @@ -0,0 +1,58 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "abuse_user_report")] +#[macros::export(object, js_name = "AbuseUserReport")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "targetUserId")] + pub target_user_id: String, + #[sea_orm(column_name = "reporterId")] + pub reporter_id: String, + #[sea_orm(column_name = "assigneeId")] + pub assignee_id: Option, + pub resolved: bool, + pub comment: String, + #[sea_orm(column_name = "targetUserHost")] + pub target_user_host: Option, + #[sea_orm(column_name = "reporterHost")] + pub reporter_host: Option, + pub forwarded: bool, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::ReporterId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User3, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::AssigneeId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "SetNull" + )] + User2, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::TargetUserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User1, +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/access_token.rs b/packages/backend-rs/src/model/entity/access_token.rs new file mode 100644 index 0000000..5895217 --- /dev/null +++ b/packages/backend-rs/src/model/entity/access_token.rs @@ -0,0 +1,80 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "access_token")] +#[macros::export(object, js_name = "AccessToken")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + pub token: String, + pub hash: String, + #[sea_orm(column_name = "userId")] + pub user_id: Option, + #[sea_orm(column_name = "appId")] + pub app_id: Option, + #[sea_orm(column_name = "lastUsedAt")] + pub last_used_at: Option, + pub session: Option, + pub name: Option, + pub description: Option, + #[sea_orm(column_name = "iconUrl")] + pub icon_url: Option, + pub permission: Vec, + pub fetched: bool, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::app::Entity", + from = "Column::AppId", + to = "super::app::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + App, + #[sea_orm(has_many = "super::notification::Entity")] + Notification, + #[sea_orm(has_many = "super::sw_subscription::Entity")] + SwSubscription, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::App.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Notification.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::SwSubscription.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/ad.rs b/packages/backend-rs/src/model/entity/ad.rs new file mode 100644 index 0000000..5449503 --- /dev/null +++ b/packages/backend-rs/src/model/entity/ad.rs @@ -0,0 +1,29 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "ad")] +#[macros::export(object, js_name = "Ad")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "expiresAt")] + pub expires_at: DateTimeWithTimeZone, + pub place: String, + pub priority: String, + pub url: String, + #[sea_orm(column_name = "imageUrl")] + pub image_url: String, + pub memo: String, + pub ratio: i32, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/announcement.rs b/packages/backend-rs/src/model/entity/announcement.rs new file mode 100644 index 0000000..750c8d1 --- /dev/null +++ b/packages/backend-rs/src/model/entity/announcement.rs @@ -0,0 +1,39 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "announcement")] +#[macros::export(object, js_name = "Announcement")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + pub text: String, + pub title: String, + #[sea_orm(column_name = "imageUrl")] + pub image_url: Option, + #[sea_orm(column_name = "updatedAt")] + pub updated_at: Option, + #[sea_orm(column_name = "showPopup")] + pub show_popup: bool, + #[sea_orm(column_name = "isGoodNews")] + pub is_good_news: bool, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm(has_many = "super::announcement_read::Entity")] + AnnouncementRead, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::AnnouncementRead.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/announcement_read.rs b/packages/backend-rs/src/model/entity/announcement_read.rs new file mode 100644 index 0000000..169b6c9 --- /dev/null +++ b/packages/backend-rs/src/model/entity/announcement_read.rs @@ -0,0 +1,53 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "announcement_read")] +#[macros::export(object, js_name = "AnnouncementRead")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "userId")] + pub user_id: String, + #[sea_orm(column_name = "announcementId")] + pub announcement_id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::announcement::Entity", + from = "Column::AnnouncementId", + to = "super::announcement::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + Announcement, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Announcement.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/antenna.rs b/packages/backend-rs/src/model/entity/antenna.rs new file mode 100644 index 0000000..45d40f1 --- /dev/null +++ b/packages/backend-rs/src/model/entity/antenna.rs @@ -0,0 +1,85 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use super::sea_orm_active_enums::AntennaSrc; +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "antenna")] +#[macros::export(object, js_name = "Antenna")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + pub name: String, + pub src: AntennaSrc, + #[sea_orm(column_name = "userListId")] + pub user_list_id: Option, + #[sea_orm(column_name = "withFile")] + pub with_file: bool, + pub expression: Option, + pub notify: bool, + #[sea_orm(column_name = "caseSensitive")] + pub case_sensitive: bool, + #[sea_orm(column_name = "withReplies")] + pub with_replies: bool, + #[sea_orm(column_name = "userGroupJoiningId")] + pub user_group_joining_id: Option, + pub users: Vec, + pub instances: Vec, + pub keywords: Vec, + #[sea_orm(column_name = "excludeKeywords")] + pub exclude_keywords: Vec, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, + #[sea_orm( + belongs_to = "super::user_group_joining::Entity", + from = "Column::UserGroupJoiningId", + to = "super::user_group_joining::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + UserGroupJoining, + #[sea_orm( + belongs_to = "super::user_list::Entity", + from = "Column::UserListId", + to = "super::user_list::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + UserList, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserGroupJoining.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserList.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/app.rs b/packages/backend-rs/src/model/entity/app.rs new file mode 100644 index 0000000..06c1d50 --- /dev/null +++ b/packages/backend-rs/src/model/entity/app.rs @@ -0,0 +1,59 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "app")] +#[macros::export(object, js_name = "App")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: Option, + pub secret: String, + pub name: String, + pub description: String, + pub permission: Vec, + #[sea_orm(column_name = "callbackUrl")] + pub callback_url: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm(has_many = "super::access_token::Entity")] + AccessToken, + #[sea_orm(has_many = "super::auth_session::Entity")] + AuthSession, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "SetNull" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::AccessToken.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::AuthSession.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/attestation_challenge.rs b/packages/backend-rs/src/model/entity/attestation_challenge.rs new file mode 100644 index 0000000..ca3804a --- /dev/null +++ b/packages/backend-rs/src/model/entity/attestation_challenge.rs @@ -0,0 +1,40 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "attestation_challenge")] +#[macros::export(object, js_name = "AttestationChallenge")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "userId", primary_key, auto_increment = false)] + pub user_id: String, + pub challenge: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "registrationChallenge")] + pub registration_challenge: bool, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/auth_session.rs b/packages/backend-rs/src/model/entity/auth_session.rs new file mode 100644 index 0000000..1dc6acd --- /dev/null +++ b/packages/backend-rs/src/model/entity/auth_session.rs @@ -0,0 +1,54 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "auth_session")] +#[macros::export(object, js_name = "AuthSession")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + pub token: String, + #[sea_orm(column_name = "userId")] + pub user_id: Option, + #[sea_orm(column_name = "appId")] + pub app_id: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::app::Entity", + from = "Column::AppId", + to = "super::app::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + App, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::App.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/blocking.rs b/packages/backend-rs/src/model/entity/blocking.rs new file mode 100644 index 0000000..3a9a075 --- /dev/null +++ b/packages/backend-rs/src/model/entity/blocking.rs @@ -0,0 +1,41 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "blocking")] +#[macros::export(object, js_name = "Blocking")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "blockeeId")] + pub blockee_id: String, + #[sea_orm(column_name = "blockerId")] + pub blocker_id: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::BlockerId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User2, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::BlockeeId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User1, +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/channel.rs b/packages/backend-rs/src/model/entity/channel.rs new file mode 100644 index 0000000..221a72b --- /dev/null +++ b/packages/backend-rs/src/model/entity/channel.rs @@ -0,0 +1,85 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "channel")] +#[macros::export(object, js_name = "Channel")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "lastNotedAt")] + pub last_noted_at: Option, + #[sea_orm(column_name = "userId")] + pub user_id: Option, + pub name: String, + pub description: Option, + #[sea_orm(column_name = "bannerId")] + pub banner_id: Option, + #[sea_orm(column_name = "notesCount")] + pub notes_count: i32, + #[sea_orm(column_name = "usersCount")] + pub users_count: i32, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm(has_many = "super::channel_following::Entity")] + ChannelFollowing, + #[sea_orm(has_many = "super::channel_note_pining::Entity")] + ChannelNotePining, + #[sea_orm( + belongs_to = "super::drive_file::Entity", + from = "Column::BannerId", + to = "super::drive_file::Column::Id", + on_update = "NoAction", + on_delete = "SetNull" + )] + DriveFile, + #[sea_orm(has_many = "super::note::Entity")] + Note, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "SetNull" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::ChannelFollowing.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::ChannelNotePining.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::DriveFile.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Note.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/channel_following.rs b/packages/backend-rs/src/model/entity/channel_following.rs new file mode 100644 index 0000000..9be21b8 --- /dev/null +++ b/packages/backend-rs/src/model/entity/channel_following.rs @@ -0,0 +1,53 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "channel_following")] +#[macros::export(object, js_name = "ChannelFollowing")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "followeeId")] + pub followee_id: String, + #[sea_orm(column_name = "followerId")] + pub follower_id: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::channel::Entity", + from = "Column::FolloweeId", + to = "super::channel::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + Channel, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::FollowerId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Channel.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/channel_note_pining.rs b/packages/backend-rs/src/model/entity/channel_note_pining.rs new file mode 100644 index 0000000..d03ee96 --- /dev/null +++ b/packages/backend-rs/src/model/entity/channel_note_pining.rs @@ -0,0 +1,53 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "channel_note_pining")] +#[macros::export(object, js_name = "ChannelNotePining")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "channelId")] + pub channel_id: String, + #[sea_orm(column_name = "noteId")] + pub note_id: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::channel::Entity", + from = "Column::ChannelId", + to = "super::channel::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + Channel, + #[sea_orm( + belongs_to = "super::note::Entity", + from = "Column::NoteId", + to = "super::note::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + Note, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Channel.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Note.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/clip.rs b/packages/backend-rs/src/model/entity/clip.rs new file mode 100644 index 0000000..fcd5b11 --- /dev/null +++ b/packages/backend-rs/src/model/entity/clip.rs @@ -0,0 +1,49 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "clip")] +#[macros::export(object, js_name = "Clip")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + pub name: String, + #[sea_orm(column_name = "isPublic")] + pub is_public: bool, + pub description: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm(has_many = "super::clip_note::Entity")] + ClipNote, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::ClipNote.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/clip_note.rs b/packages/backend-rs/src/model/entity/clip_note.rs new file mode 100644 index 0000000..9cce432 --- /dev/null +++ b/packages/backend-rs/src/model/entity/clip_note.rs @@ -0,0 +1,51 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "clip_note")] +#[macros::export(object, js_name = "ClipNote")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "noteId")] + pub note_id: String, + #[sea_orm(column_name = "clipId")] + pub clip_id: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::clip::Entity", + from = "Column::ClipId", + to = "super::clip::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + Clip, + #[sea_orm( + belongs_to = "super::note::Entity", + from = "Column::NoteId", + to = "super::note::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + Note, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Clip.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Note.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/drive_file.rs b/packages/backend-rs/src/model/entity/drive_file.rs new file mode 100644 index 0000000..e2139a9 --- /dev/null +++ b/packages/backend-rs/src/model/entity/drive_file.rs @@ -0,0 +1,123 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use super::sea_orm_active_enums::DriveFileUsageHint; +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "drive_file")] +#[macros::export(object, js_name = "DriveFile")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: Option, + #[sea_orm(column_name = "userHost")] + pub user_host: Option, + pub md5: String, + pub name: String, + pub r#type: String, + pub size: i32, + pub comment: Option, + #[sea_orm(column_type = "JsonBinary")] + pub properties: Json, + #[sea_orm(column_name = "storedInternal")] + pub stored_internal: bool, + pub url: String, + #[sea_orm(column_name = "thumbnailUrl")] + pub thumbnail_url: Option, + #[sea_orm(column_name = "webpublicUrl")] + pub webpublic_url: Option, + #[sea_orm(column_name = "accessKey")] + pub access_key: Option, + #[sea_orm(column_name = "thumbnailAccessKey")] + pub thumbnail_access_key: Option, + #[sea_orm(column_name = "webpublicAccessKey")] + pub webpublic_access_key: Option, + pub uri: Option, + pub src: Option, + #[sea_orm(column_name = "folderId")] + pub folder_id: Option, + #[sea_orm(column_name = "isSensitive")] + pub is_sensitive: bool, + #[sea_orm(column_name = "isLink")] + pub is_link: bool, + pub blurhash: Option, + #[sea_orm(column_name = "webpublicType")] + pub webpublic_type: Option, + #[sea_orm(column_name = "requestHeaders", column_type = "JsonBinary", nullable)] + pub request_headers: Option, + #[sea_orm(column_name = "requestIp")] + pub request_ip: Option, + #[sea_orm(column_name = "usageHint")] + pub usage_hint: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm(has_many = "super::channel::Entity")] + Channel, + #[sea_orm( + belongs_to = "super::drive_folder::Entity", + from = "Column::FolderId", + to = "super::drive_folder::Column::Id", + on_update = "NoAction", + on_delete = "SetNull" + )] + DriveFolder, + #[sea_orm(has_many = "super::messaging_message::Entity")] + MessagingMessage, + #[sea_orm(has_many = "super::note_file::Entity")] + NoteFile, + #[sea_orm(has_many = "super::page::Entity")] + Page, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "SetNull" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Channel.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::DriveFolder.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::MessagingMessage.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::NoteFile.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Page.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/drive_folder.rs b/packages/backend-rs/src/model/entity/drive_folder.rs new file mode 100644 index 0000000..428fc70 --- /dev/null +++ b/packages/backend-rs/src/model/entity/drive_folder.rs @@ -0,0 +1,56 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "drive_folder")] +#[macros::export(object, js_name = "DriveFolder")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + pub name: String, + #[sea_orm(column_name = "userId")] + pub user_id: Option, + #[sea_orm(column_name = "parentId")] + pub parent_id: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm(has_many = "super::drive_file::Entity")] + DriveFile, + #[sea_orm( + belongs_to = "Entity", + from = "Column::ParentId", + to = "Column::Id", + on_update = "NoAction", + on_delete = "SetNull" + )] + SelfRef, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::DriveFile.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/emoji.rs b/packages/backend-rs/src/model/entity/emoji.rs new file mode 100644 index 0000000..44744ed --- /dev/null +++ b/packages/backend-rs/src/model/entity/emoji.rs @@ -0,0 +1,33 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "emoji")] +#[macros::export(object, js_name = "Emoji")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "updatedAt")] + pub updated_at: Option, + pub name: String, + pub host: Option, + #[sea_orm(column_name = "originalUrl")] + pub original_url: String, + pub uri: Option, + pub r#type: Option, + pub aliases: Vec, + pub category: Option, + #[sea_orm(column_name = "publicUrl")] + pub public_url: String, + pub license: Option, + pub width: Option, + pub height: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/follow_request.rs b/packages/backend-rs/src/model/entity/follow_request.rs new file mode 100644 index 0000000..f7b6231 --- /dev/null +++ b/packages/backend-rs/src/model/entity/follow_request.rs @@ -0,0 +1,63 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "follow_request")] +#[macros::export(object, js_name = "FollowRequest")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "followeeId")] + pub followee_id: String, + #[sea_orm(column_name = "followerId")] + pub follower_id: String, + #[sea_orm(column_name = "requestId")] + pub request_id: Option, + #[sea_orm(column_name = "followerHost")] + pub follower_host: Option, + #[sea_orm(column_name = "followerInbox")] + pub follower_inbox: Option, + #[sea_orm(column_name = "followerSharedInbox")] + pub follower_shared_inbox: Option, + #[sea_orm(column_name = "followeeHost")] + pub followee_host: Option, + #[sea_orm(column_name = "followeeInbox")] + pub followee_inbox: Option, + #[sea_orm(column_name = "followeeSharedInbox")] + pub followee_shared_inbox: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm(has_many = "super::notification::Entity")] + Notification, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::FolloweeId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User2, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::FollowerId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User1, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Notification.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/following.rs b/packages/backend-rs/src/model/entity/following.rs new file mode 100644 index 0000000..3b4459b --- /dev/null +++ b/packages/backend-rs/src/model/entity/following.rs @@ -0,0 +1,53 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "following")] +#[macros::export(object, js_name = "Following")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "followeeId")] + pub followee_id: String, + #[sea_orm(column_name = "followerId")] + pub follower_id: String, + #[sea_orm(column_name = "followerHost")] + pub follower_host: Option, + #[sea_orm(column_name = "followerInbox")] + pub follower_inbox: Option, + #[sea_orm(column_name = "followerSharedInbox")] + pub follower_shared_inbox: Option, + #[sea_orm(column_name = "followeeHost")] + pub followee_host: Option, + #[sea_orm(column_name = "followeeInbox")] + pub followee_inbox: Option, + #[sea_orm(column_name = "followeeSharedInbox")] + pub followee_shared_inbox: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::FolloweeId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User2, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::FollowerId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User1, +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/gallery_like.rs b/packages/backend-rs/src/model/entity/gallery_like.rs new file mode 100644 index 0000000..062854e --- /dev/null +++ b/packages/backend-rs/src/model/entity/gallery_like.rs @@ -0,0 +1,53 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "gallery_like")] +#[macros::export(object, js_name = "GalleryLike")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + #[sea_orm(column_name = "postId")] + pub post_id: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::gallery_post::Entity", + from = "Column::PostId", + to = "super::gallery_post::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + GalleryPost, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::GalleryPost.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/gallery_post.rs b/packages/backend-rs/src/model/entity/gallery_post.rs new file mode 100644 index 0000000..3fc93da --- /dev/null +++ b/packages/backend-rs/src/model/entity/gallery_post.rs @@ -0,0 +1,56 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "gallery_post")] +#[macros::export(object, js_name = "GalleryPost")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "updatedAt")] + pub updated_at: DateTimeWithTimeZone, + pub title: String, + pub description: Option, + #[sea_orm(column_name = "userId")] + pub user_id: String, + #[sea_orm(column_name = "fileIds")] + pub file_ids: Vec, + #[sea_orm(column_name = "isSensitive")] + pub is_sensitive: bool, + #[sea_orm(column_name = "likedCount")] + pub liked_count: i32, + pub tags: Vec, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm(has_many = "super::gallery_like::Entity")] + GalleryLike, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::GalleryLike.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/hashtag.rs b/packages/backend-rs/src/model/entity/hashtag.rs new file mode 100644 index 0000000..f9bb74b --- /dev/null +++ b/packages/backend-rs/src/model/entity/hashtag.rs @@ -0,0 +1,43 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "hashtag")] +#[macros::export(object, js_name = "Hashtag")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + pub name: String, + #[sea_orm(column_name = "mentionedUserIds")] + pub mentioned_user_ids: Vec, + #[sea_orm(column_name = "mentionedUsersCount")] + pub mentioned_users_count: i32, + #[sea_orm(column_name = "mentionedLocalUserIds")] + pub mentioned_local_user_ids: Vec, + #[sea_orm(column_name = "mentionedLocalUsersCount")] + pub mentioned_local_users_count: i32, + #[sea_orm(column_name = "mentionedRemoteUserIds")] + pub mentioned_remote_user_ids: Vec, + #[sea_orm(column_name = "mentionedRemoteUsersCount")] + pub mentioned_remote_users_count: i32, + #[sea_orm(column_name = "attachedUserIds")] + pub attached_user_ids: Vec, + #[sea_orm(column_name = "attachedUsersCount")] + pub attached_users_count: i32, + #[sea_orm(column_name = "attachedLocalUserIds")] + pub attached_local_user_ids: Vec, + #[sea_orm(column_name = "attachedLocalUsersCount")] + pub attached_local_users_count: i32, + #[sea_orm(column_name = "attachedRemoteUserIds")] + pub attached_remote_user_ids: Vec, + #[sea_orm(column_name = "attachedRemoteUsersCount")] + pub attached_remote_users_count: i32, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/instance.rs b/packages/backend-rs/src/model/entity/instance.rs new file mode 100644 index 0000000..9a49e25 --- /dev/null +++ b/packages/backend-rs/src/model/entity/instance.rs @@ -0,0 +1,61 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "instance")] +#[macros::export(object, js_name = "Instance")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "caughtAt")] + pub caught_at: DateTimeWithTimeZone, + pub host: String, + #[sea_orm(column_name = "usersCount")] + pub users_count: i32, + #[sea_orm(column_name = "notesCount")] + pub notes_count: i32, + #[sea_orm(column_name = "followingCount")] + pub following_count: i32, + #[sea_orm(column_name = "followersCount")] + pub followers_count: i32, + #[sea_orm(column_name = "latestRequestSentAt")] + pub latest_request_sent_at: Option, + #[sea_orm(column_name = "latestStatus")] + pub latest_status: Option, + #[sea_orm(column_name = "latestRequestReceivedAt")] + pub latest_request_received_at: Option, + #[sea_orm(column_name = "lastCommunicatedAt")] + pub last_communicated_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "isNotResponding")] + pub is_not_responding: bool, + #[sea_orm(column_name = "softwareName")] + pub software_name: Option, + #[sea_orm(column_name = "softwareVersion")] + pub software_version: Option, + #[sea_orm(column_name = "openRegistrations")] + pub open_registrations: Option, + pub name: Option, + pub description: Option, + #[sea_orm(column_name = "maintainerName")] + pub maintainer_name: Option, + #[sea_orm(column_name = "maintainerEmail")] + pub maintainer_email: Option, + #[sea_orm(column_name = "infoUpdatedAt")] + pub info_updated_at: Option, + #[sea_orm(column_name = "isSuspended")] + pub is_suspended: bool, + #[sea_orm(column_name = "iconUrl")] + pub icon_url: Option, + #[sea_orm(column_name = "themeColor")] + pub theme_color: Option, + #[sea_orm(column_name = "faviconUrl")] + pub favicon_url: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/messaging_message.rs b/packages/backend-rs/src/model/entity/messaging_message.rs new file mode 100644 index 0000000..202496f --- /dev/null +++ b/packages/backend-rs/src/model/entity/messaging_message.rs @@ -0,0 +1,78 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "messaging_message")] +#[macros::export(object, js_name = "MessagingMessage")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + #[sea_orm(column_name = "recipientId")] + pub recipient_id: Option, + pub text: Option, + #[sea_orm(column_name = "isRead")] + pub is_read: bool, + #[sea_orm(column_name = "fileId")] + pub file_id: Option, + #[sea_orm(column_name = "groupId")] + pub group_id: Option, + pub reads: Vec, + pub uri: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::drive_file::Entity", + from = "Column::FileId", + to = "super::drive_file::Column::Id", + on_update = "NoAction", + on_delete = "SetNull" + )] + DriveFile, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User2, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::RecipientId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User1, + #[sea_orm( + belongs_to = "super::user_group::Entity", + from = "Column::GroupId", + to = "super::user_group::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + UserGroup, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::DriveFile.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserGroup.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/meta.rs b/packages/backend-rs/src/model/entity/meta.rs new file mode 100644 index 0000000..023fcef --- /dev/null +++ b/packages/backend-rs/src/model/entity/meta.rs @@ -0,0 +1,197 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "meta")] +#[macros::export(object, js_name = "Meta")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + pub name: Option, + pub description: Option, + #[sea_orm(column_name = "maintainerName")] + pub maintainer_name: Option, + #[sea_orm(column_name = "maintainerEmail")] + pub maintainer_email: Option, + #[sea_orm(column_name = "disableRegistration")] + pub disable_registration: bool, + #[sea_orm(column_name = "disableLocalTimeline")] + pub disable_local_timeline: bool, + #[sea_orm(column_name = "disableGlobalTimeline")] + pub disable_global_timeline: bool, + #[sea_orm(column_name = "useStarForReactionFallback")] + pub use_star_for_reaction_fallback: bool, + pub langs: Vec, + #[sea_orm(column_name = "hiddenTags")] + pub hidden_tags: Vec, + #[sea_orm(column_name = "blockedHosts")] + pub blocked_hosts: Vec, + #[sea_orm(column_name = "mascotImageUrl")] + pub mascot_image_url: Option, + #[sea_orm(column_name = "bannerUrl")] + pub banner_url: Option, + #[sea_orm(column_name = "errorImageUrl")] + pub error_image_url: Option, + #[sea_orm(column_name = "iconUrl")] + pub icon_url: Option, + #[sea_orm(column_name = "cacheRemoteFiles")] + pub cache_remote_files: bool, + #[sea_orm(column_name = "enableRecaptcha")] + pub enable_recaptcha: bool, + #[sea_orm(column_name = "recaptchaSiteKey")] + pub recaptcha_site_key: Option, + #[sea_orm(column_name = "recaptchaSecretKey")] + pub recaptcha_secret_key: Option, + #[sea_orm(column_name = "localDriveCapacityMb")] + pub local_drive_capacity_mb: i32, + #[sea_orm(column_name = "remoteDriveCapacityMb")] + pub remote_drive_capacity_mb: i32, + #[sea_orm(column_name = "summalyProxy")] + pub summaly_proxy: Option, + #[sea_orm(column_name = "enableEmail")] + pub enable_email: bool, + pub email: Option, + #[sea_orm(column_name = "smtpSecure")] + pub smtp_secure: bool, + #[sea_orm(column_name = "smtpHost")] + pub smtp_host: Option, + #[sea_orm(column_name = "smtpPort")] + pub smtp_port: Option, + #[sea_orm(column_name = "smtpUser")] + pub smtp_user: Option, + #[sea_orm(column_name = "smtpPass")] + pub smtp_pass: Option, + #[sea_orm(column_name = "enableServiceWorker")] + pub enable_service_worker: bool, + #[sea_orm(column_name = "swPublicKey")] + pub sw_public_key: Option, + #[sea_orm(column_name = "swPrivateKey")] + pub sw_private_key: Option, + #[sea_orm(column_name = "pinnedUsers")] + pub pinned_users: Vec, + #[sea_orm(column_name = "tosUrl")] + pub tos_url: Option, + #[sea_orm(column_name = "repositoryUrl")] + pub repository_url: String, + #[sea_orm(column_name = "feedbackUrl")] + pub feedback_url: Option, + #[sea_orm(column_name = "useObjectStorage")] + pub use_object_storage: bool, + #[sea_orm(column_name = "objectStorageBucket")] + pub object_storage_bucket: Option, + #[sea_orm(column_name = "objectStoragePrefix")] + pub object_storage_prefix: Option, + #[sea_orm(column_name = "objectStorageBaseUrl")] + pub object_storage_base_url: Option, + #[sea_orm(column_name = "objectStorageEndpoint")] + pub object_storage_endpoint: Option, + #[sea_orm(column_name = "objectStorageRegion")] + pub object_storage_region: Option, + #[sea_orm(column_name = "objectStorageAccessKey")] + pub object_storage_access_key: Option, + #[sea_orm(column_name = "objectStorageSecretKey")] + pub object_storage_secret_key: Option, + #[sea_orm(column_name = "objectStoragePort")] + pub object_storage_port: Option, + #[sea_orm(column_name = "objectStorageUseSsl")] + pub object_storage_use_ssl: bool, + #[sea_orm(column_name = "proxyAccountId")] + pub proxy_account_id: Option, + #[sea_orm(column_name = "objectStorageUseProxy")] + pub object_storage_use_proxy: bool, + #[sea_orm(column_name = "enableHcaptcha")] + pub enable_hcaptcha: bool, + #[sea_orm(column_name = "hcaptchaSiteKey")] + pub hcaptcha_site_key: Option, + #[sea_orm(column_name = "hcaptchaSecretKey")] + pub hcaptcha_secret_key: Option, + #[sea_orm(column_name = "objectStorageSetPublicRead")] + pub object_storage_set_public_read: bool, + #[sea_orm(column_name = "pinnedPages")] + pub pinned_pages: Vec, + #[sea_orm(column_name = "backgroundImageUrl")] + pub background_image_url: Option, + #[sea_orm(column_name = "logoImageUrl")] + pub logo_image_url: Option, + #[sea_orm(column_name = "pinnedClipId")] + pub pinned_clip_id: Option, + #[sea_orm(column_name = "objectStorageS3ForcePathStyle")] + pub object_storage_s3_force_path_style: bool, + #[sea_orm(column_name = "allowedHosts")] + pub allowed_hosts: Option>, + #[sea_orm(column_name = "secureMode")] + pub secure_mode: Option, + #[sea_orm(column_name = "privateMode")] + pub private_mode: Option, + #[sea_orm(column_name = "deeplAuthKey")] + pub deepl_auth_key: Option, + #[sea_orm(column_name = "deeplIsPro")] + pub deepl_is_pro: bool, + #[sea_orm(column_name = "emailRequiredForSignup")] + pub email_required_for_signup: bool, + #[sea_orm(column_name = "themeColor")] + pub theme_color: Option, + #[sea_orm(column_name = "defaultLightTheme")] + pub default_light_theme: Option, + #[sea_orm(column_name = "defaultDarkTheme")] + pub default_dark_theme: Option, + #[sea_orm(column_name = "enableIpLogging")] + pub enable_ip_logging: bool, + #[sea_orm(column_name = "enableActiveEmailValidation")] + pub enable_active_email_validation: bool, + #[sea_orm(column_name = "customMotd")] + pub custom_motd: Vec, + #[sea_orm(column_name = "customSplashIcons")] + pub custom_splash_icons: Vec, + #[sea_orm(column_name = "disableRecommendedTimeline")] + pub disable_recommended_timeline: bool, + #[sea_orm(column_name = "recommendedInstances")] + pub recommended_instances: Vec, + #[sea_orm(column_name = "enableGuestTimeline")] + pub enable_guest_timeline: bool, + #[sea_orm(column_name = "defaultReaction")] + pub default_reaction: String, + #[sea_orm(column_name = "libreTranslateApiUrl")] + pub libre_translate_api_url: Option, + #[sea_orm(column_name = "libreTranslateApiKey")] + pub libre_translate_api_key: Option, + #[sea_orm(column_name = "silencedHosts")] + pub silenced_hosts: Vec, + #[sea_orm(column_name = "experimentalFeatures", column_type = "JsonBinary")] + pub experimental_features: Json, + #[sea_orm(column_name = "enableServerMachineStats")] + pub enable_server_machine_stats: bool, + #[sea_orm(column_name = "enableIdenticonGeneration")] + pub enable_identicon_generation: bool, + #[sea_orm(column_name = "donationLink")] + pub donation_link: Option, + #[sea_orm(column_name = "moreUrls", column_type = "JsonBinary")] + pub more_urls: Json, + #[sea_orm(column_name = "markLocalFilesNsfwByDefault")] + pub mark_local_files_nsfw_by_default: bool, + #[sea_orm(column_name = "antennaLimit")] + pub antenna_limit: i32, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::ProxyAccountId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "SetNull" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/migrations.rs b/packages/backend-rs/src/model/entity/migrations.rs new file mode 100644 index 0000000..b03aaab --- /dev/null +++ b/packages/backend-rs/src/model/entity/migrations.rs @@ -0,0 +1,20 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "migrations")] +#[macros::export(object, js_name = "Migrations")] +pub struct Model { + #[sea_orm(primary_key)] + pub id: i32, + pub timestamp: i64, + pub name: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/mod.rs b/packages/backend-rs/src/model/entity/mod.rs new file mode 100644 index 0000000..ffb2135 --- /dev/null +++ b/packages/backend-rs/src/model/entity/mod.rs @@ -0,0 +1,74 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +pub mod prelude; + +pub mod abuse_user_report; +pub mod access_token; +pub mod ad; +pub mod announcement; +pub mod announcement_read; +pub mod antenna; +pub mod app; +pub mod attestation_challenge; +pub mod auth_session; +pub mod blocking; +pub mod channel; +pub mod channel_following; +pub mod channel_note_pining; +pub mod clip; +pub mod clip_note; +pub mod drive_file; +pub mod drive_folder; +pub mod emoji; +pub mod follow_request; +pub mod following; +pub mod gallery_like; +pub mod gallery_post; +pub mod hashtag; +pub mod instance; +pub mod messaging_message; +pub mod meta; +pub mod migrations; +pub mod moderation_log; +pub mod muted_note; +pub mod muting; +pub mod note; +pub mod note_edit; +pub mod note_favorite; +pub mod note_file; +pub mod note_reaction; +pub mod note_thread_muting; +pub mod note_unread; +pub mod note_watching; +pub mod notification; +pub mod page; +pub mod page_like; +pub mod password_reset_request; +pub mod poll; +pub mod poll_vote; +pub mod promo_note; +pub mod promo_read; +pub mod registration_ticket; +pub mod registry_item; +pub mod relay; +pub mod renote_muting; +pub mod reply_muting; +pub mod sea_orm_active_enums; +pub mod signin; +pub mod sw_subscription; +pub mod used_username; +pub mod user; +pub mod user_group; +pub mod user_group_invitation; +pub mod user_group_invite; +pub mod user_group_joining; +pub mod user_ip; +pub mod user_keypair; +pub mod user_list; +pub mod user_list_joining; +pub mod user_note_pining; +pub mod user_pending; +pub mod user_profile; +pub mod user_publickey; +pub mod user_security_key; +pub mod webhook; diff --git a/packages/backend-rs/src/model/entity/moderation_log.rs b/packages/backend-rs/src/model/entity/moderation_log.rs new file mode 100644 index 0000000..2ce71a9 --- /dev/null +++ b/packages/backend-rs/src/model/entity/moderation_log.rs @@ -0,0 +1,40 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "moderation_log")] +#[macros::export(object, js_name = "ModerationLog")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + pub r#type: String, + #[sea_orm(column_type = "JsonBinary")] + pub info: Json, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/muted_note.rs b/packages/backend-rs/src/model/entity/muted_note.rs new file mode 100644 index 0000000..5e89c2e --- /dev/null +++ b/packages/backend-rs/src/model/entity/muted_note.rs @@ -0,0 +1,53 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use super::sea_orm_active_enums::MutedNoteReason; +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "muted_note")] +#[macros::export(object, js_name = "MutedNote")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "noteId")] + pub note_id: String, + #[sea_orm(column_name = "userId")] + pub user_id: String, + pub reason: MutedNoteReason, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::note::Entity", + from = "Column::NoteId", + to = "super::note::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + Note, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Note.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/muting.rs b/packages/backend-rs/src/model/entity/muting.rs new file mode 100644 index 0000000..eff07c6 --- /dev/null +++ b/packages/backend-rs/src/model/entity/muting.rs @@ -0,0 +1,43 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "muting")] +#[macros::export(object, js_name = "Muting")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "muteeId")] + pub mutee_id: String, + #[sea_orm(column_name = "muterId")] + pub muter_id: String, + #[sea_orm(column_name = "expiresAt")] + pub expires_at: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::MuterId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User2, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::MuteeId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User1, +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/note.rs b/packages/backend-rs/src/model/entity/note.rs new file mode 100644 index 0000000..e3bf3c9 --- /dev/null +++ b/packages/backend-rs/src/model/entity/note.rs @@ -0,0 +1,241 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use super::sea_orm_active_enums::NoteVisibility; +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "note")] +#[macros::export(object, js_name = "Note")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "replyId")] + pub reply_id: Option, + #[sea_orm(column_name = "renoteId")] + pub renote_id: Option, + #[sea_orm(column_type = "Text", nullable)] + pub text: Option, + pub name: Option, + #[sea_orm(column_type = "Text", nullable)] + pub cw: Option, + #[sea_orm(column_name = "userId")] + pub user_id: String, + #[sea_orm(column_name = "localOnly")] + pub local_only: bool, + #[sea_orm(column_name = "renoteCount")] + pub renote_count: i16, + #[sea_orm(column_name = "repliesCount")] + pub replies_count: i16, + #[sea_orm(column_type = "JsonBinary")] + pub reactions: Json, + pub visibility: NoteVisibility, + pub uri: Option, + pub score: i32, + #[sea_orm(column_name = "fileIds")] + pub file_ids: Vec, + #[sea_orm(column_name = "attachedFileTypes")] + pub attached_file_types: Vec, + #[sea_orm(column_name = "visibleUserIds")] + pub visible_user_ids: Vec, + pub mentions: Vec, + #[sea_orm(column_name = "mentionedRemoteUsers", column_type = "Text")] + pub mentioned_remote_users: String, + pub emojis: Vec, + pub tags: Vec, + #[sea_orm(column_name = "hasPoll")] + pub has_poll: bool, + #[sea_orm(column_name = "userHost")] + pub user_host: Option, + #[sea_orm(column_name = "replyUserId")] + pub reply_user_id: Option, + #[sea_orm(column_name = "replyUserHost")] + pub reply_user_host: Option, + #[sea_orm(column_name = "renoteUserId")] + pub renote_user_id: Option, + #[sea_orm(column_name = "renoteUserHost")] + pub renote_user_host: Option, + pub url: Option, + #[sea_orm(column_name = "channelId")] + pub channel_id: Option, + #[sea_orm(column_name = "threadId")] + pub thread_id: Option, + #[sea_orm(column_name = "updatedAt")] + pub updated_at: Option, + pub lang: Option, + #[sea_orm(column_name = "scheduledAt")] + pub scheduled_at: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::channel::Entity", + from = "Column::ChannelId", + to = "super::channel::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + Channel, + #[sea_orm(has_many = "super::channel_note_pining::Entity")] + ChannelNotePining, + #[sea_orm(has_many = "super::clip_note::Entity")] + ClipNote, + #[sea_orm(has_many = "super::muted_note::Entity")] + MutedNote, + #[sea_orm( + belongs_to = "Entity", + from = "Column::ReplyId", + to = "Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + SelfRef2, + #[sea_orm( + belongs_to = "Entity", + from = "Column::RenoteId", + to = "Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + SelfRef1, + #[sea_orm(has_many = "super::note_edit::Entity")] + NoteEdit, + #[sea_orm(has_many = "super::note_favorite::Entity")] + NoteFavorite, + #[sea_orm(has_many = "super::note_file::Entity")] + NoteFile, + #[sea_orm(has_many = "super::note_reaction::Entity")] + NoteReaction, + #[sea_orm(has_many = "super::note_unread::Entity")] + NoteUnread, + #[sea_orm(has_many = "super::note_watching::Entity")] + NoteWatching, + #[sea_orm(has_many = "super::notification::Entity")] + Notification, + #[sea_orm(has_one = "super::poll::Entity")] + Poll, + #[sea_orm(has_many = "super::poll_vote::Entity")] + PollVote, + #[sea_orm(has_one = "super::promo_note::Entity")] + PromoNote, + #[sea_orm(has_many = "super::promo_read::Entity")] + PromoRead, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, + #[sea_orm(has_many = "super::user_note_pining::Entity")] + UserNotePining, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Channel.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::ChannelNotePining.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::ClipNote.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::MutedNote.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::NoteEdit.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::NoteFavorite.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::NoteFile.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::NoteReaction.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::NoteUnread.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::NoteWatching.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Notification.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Poll.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::PollVote.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::PromoNote.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::PromoRead.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserNotePining.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/note_edit.rs b/packages/backend-rs/src/model/entity/note_edit.rs new file mode 100644 index 0000000..66e9a8e --- /dev/null +++ b/packages/backend-rs/src/model/entity/note_edit.rs @@ -0,0 +1,43 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "note_edit")] +#[macros::export(object, js_name = "NoteEdit")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "noteId")] + pub note_id: String, + #[sea_orm(column_type = "Text", nullable)] + pub text: Option, + pub cw: Option, + #[sea_orm(column_name = "fileIds")] + pub file_ids: Vec, + #[sea_orm(column_name = "updatedAt")] + pub updated_at: DateTimeWithTimeZone, + pub emojis: Vec, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::note::Entity", + from = "Column::NoteId", + to = "super::note::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + Note, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Note.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/note_favorite.rs b/packages/backend-rs/src/model/entity/note_favorite.rs new file mode 100644 index 0000000..8db8612 --- /dev/null +++ b/packages/backend-rs/src/model/entity/note_favorite.rs @@ -0,0 +1,53 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "note_favorite")] +#[macros::export(object, js_name = "NoteFavorite")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + #[sea_orm(column_name = "noteId")] + pub note_id: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::note::Entity", + from = "Column::NoteId", + to = "super::note::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + Note, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Note.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/note_file.rs b/packages/backend-rs/src/model/entity/note_file.rs new file mode 100644 index 0000000..6742bf6 --- /dev/null +++ b/packages/backend-rs/src/model/entity/note_file.rs @@ -0,0 +1,51 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "note_file")] +#[macros::export(object, js_name = "NoteFile")] +pub struct Model { + #[sea_orm(column_name = "serialNo", primary_key)] + pub serial_no: i64, + #[sea_orm(column_name = "noteId")] + pub note_id: String, + #[sea_orm(column_name = "fileId")] + pub file_id: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::drive_file::Entity", + from = "Column::FileId", + to = "super::drive_file::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + DriveFile, + #[sea_orm( + belongs_to = "super::note::Entity", + from = "Column::NoteId", + to = "super::note::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + Note, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::DriveFile.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Note.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/note_reaction.rs b/packages/backend-rs/src/model/entity/note_reaction.rs new file mode 100644 index 0000000..e329db8 --- /dev/null +++ b/packages/backend-rs/src/model/entity/note_reaction.rs @@ -0,0 +1,54 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "note_reaction")] +#[macros::export(object, js_name = "NoteReaction")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + #[sea_orm(column_name = "noteId")] + pub note_id: String, + pub reaction: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::note::Entity", + from = "Column::NoteId", + to = "super::note::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + Note, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Note.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/note_thread_muting.rs b/packages/backend-rs/src/model/entity/note_thread_muting.rs new file mode 100644 index 0000000..29aa782 --- /dev/null +++ b/packages/backend-rs/src/model/entity/note_thread_muting.rs @@ -0,0 +1,39 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "note_thread_muting")] +#[macros::export(object, js_name = "NoteThreadMuting")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + #[sea_orm(column_name = "threadId")] + pub thread_id: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/note_unread.rs b/packages/backend-rs/src/model/entity/note_unread.rs new file mode 100644 index 0000000..da312e6 --- /dev/null +++ b/packages/backend-rs/src/model/entity/note_unread.rs @@ -0,0 +1,59 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "note_unread")] +#[macros::export(object, js_name = "NoteUnread")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "userId")] + pub user_id: String, + #[sea_orm(column_name = "noteId")] + pub note_id: String, + #[sea_orm(column_name = "noteUserId")] + pub note_user_id: String, + #[sea_orm(column_name = "isSpecified")] + pub is_specified: bool, + #[sea_orm(column_name = "isMentioned")] + pub is_mentioned: bool, + #[sea_orm(column_name = "noteChannelId")] + pub note_channel_id: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::note::Entity", + from = "Column::NoteId", + to = "super::note::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + Note, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Note.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/note_watching.rs b/packages/backend-rs/src/model/entity/note_watching.rs new file mode 100644 index 0000000..5ab675a --- /dev/null +++ b/packages/backend-rs/src/model/entity/note_watching.rs @@ -0,0 +1,55 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "note_watching")] +#[macros::export(object, js_name = "NoteWatching")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + #[sea_orm(column_name = "noteId")] + pub note_id: String, + #[sea_orm(column_name = "noteUserId")] + pub note_user_id: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::note::Entity", + from = "Column::NoteId", + to = "super::note::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + Note, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Note.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/notification.rs b/packages/backend-rs/src/model/entity/notification.rs new file mode 100644 index 0000000..e73a9cd --- /dev/null +++ b/packages/backend-rs/src/model/entity/notification.rs @@ -0,0 +1,117 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use super::sea_orm_active_enums::NotificationType; +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "notification")] +#[macros::export(object, js_name = "Notification")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "notifieeId")] + pub notifiee_id: String, + #[sea_orm(column_name = "notifierId")] + pub notifier_id: Option, + #[sea_orm(column_name = "isRead")] + pub is_read: bool, + #[sea_orm(column_name = "noteId")] + pub note_id: Option, + pub reaction: Option, + pub choice: Option, + #[sea_orm(column_name = "followRequestId")] + pub follow_request_id: Option, + pub r#type: NotificationType, + #[sea_orm(column_name = "userGroupInvitationId")] + pub user_group_invitation_id: Option, + #[sea_orm(column_name = "customBody")] + pub custom_body: Option, + #[sea_orm(column_name = "customHeader")] + pub custom_header: Option, + #[sea_orm(column_name = "customIcon")] + pub custom_icon: Option, + #[sea_orm(column_name = "appAccessTokenId")] + pub app_access_token_id: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::access_token::Entity", + from = "Column::AppAccessTokenId", + to = "super::access_token::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + AccessToken, + #[sea_orm( + belongs_to = "super::follow_request::Entity", + from = "Column::FollowRequestId", + to = "super::follow_request::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + FollowRequest, + #[sea_orm( + belongs_to = "super::note::Entity", + from = "Column::NoteId", + to = "super::note::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + Note, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::NotifierId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User2, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::NotifieeId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User1, + #[sea_orm( + belongs_to = "super::user_group_invitation::Entity", + from = "Column::UserGroupInvitationId", + to = "super::user_group_invitation::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + UserGroupInvitation, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::AccessToken.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::FollowRequest.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Note.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserGroupInvitation.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/page.rs b/packages/backend-rs/src/model/entity/page.rs new file mode 100644 index 0000000..f252a43 --- /dev/null +++ b/packages/backend-rs/src/model/entity/page.rs @@ -0,0 +1,92 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use super::sea_orm_active_enums::PageVisibility; +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "page")] +#[macros::export(object, js_name = "Page")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "updatedAt")] + pub updated_at: DateTimeWithTimeZone, + pub title: String, + pub name: String, + pub summary: Option, + #[sea_orm(column_name = "alignCenter")] + pub align_center: bool, + pub font: String, + #[sea_orm(column_name = "userId")] + pub user_id: String, + #[sea_orm(column_name = "eyeCatchingImageId")] + pub eye_catching_image_id: Option, + #[sea_orm(column_type = "JsonBinary")] + pub content: Json, + #[sea_orm(column_type = "JsonBinary")] + pub variables: Json, + pub visibility: PageVisibility, + #[sea_orm(column_name = "visibleUserIds")] + pub visible_user_ids: Vec, + #[sea_orm(column_name = "likedCount")] + pub liked_count: i32, + #[sea_orm(column_name = "hideTitleWhenPinned")] + pub hide_title_when_pinned: bool, + pub script: String, + #[sea_orm(column_name = "isPublic")] + pub is_public: bool, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::drive_file::Entity", + from = "Column::EyeCatchingImageId", + to = "super::drive_file::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + DriveFile, + #[sea_orm(has_many = "super::page_like::Entity")] + PageLike, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, + #[sea_orm(has_one = "super::user_profile::Entity")] + UserProfile, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::DriveFile.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::PageLike.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserProfile.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/page_like.rs b/packages/backend-rs/src/model/entity/page_like.rs new file mode 100644 index 0000000..d6aa22c --- /dev/null +++ b/packages/backend-rs/src/model/entity/page_like.rs @@ -0,0 +1,53 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "page_like")] +#[macros::export(object, js_name = "PageLike")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + #[sea_orm(column_name = "pageId")] + pub page_id: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::page::Entity", + from = "Column::PageId", + to = "super::page::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + Page, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Page.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/password_reset_request.rs b/packages/backend-rs/src/model/entity/password_reset_request.rs new file mode 100644 index 0000000..bd4978a --- /dev/null +++ b/packages/backend-rs/src/model/entity/password_reset_request.rs @@ -0,0 +1,38 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "password_reset_request")] +#[macros::export(object, js_name = "PasswordResetRequest")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + pub token: String, + #[sea_orm(column_name = "userId")] + pub user_id: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/poll.rs b/packages/backend-rs/src/model/entity/poll.rs new file mode 100644 index 0000000..5012432 --- /dev/null +++ b/packages/backend-rs/src/model/entity/poll.rs @@ -0,0 +1,45 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use super::sea_orm_active_enums::PollNoteVisibility; +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "poll")] +#[macros::export(object, js_name = "Poll")] +pub struct Model { + #[sea_orm(column_name = "noteId", primary_key, auto_increment = false, unique)] + pub note_id: String, + #[sea_orm(column_name = "expiresAt")] + pub expires_at: Option, + pub multiple: bool, + pub choices: Vec, + pub votes: Vec, + #[sea_orm(column_name = "noteVisibility")] + pub note_visibility: PollNoteVisibility, + #[sea_orm(column_name = "userId")] + pub user_id: String, + #[sea_orm(column_name = "userHost")] + pub user_host: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::note::Entity", + from = "Column::NoteId", + to = "super::note::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + Note, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Note.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/poll_vote.rs b/packages/backend-rs/src/model/entity/poll_vote.rs new file mode 100644 index 0000000..f3a84d2 --- /dev/null +++ b/packages/backend-rs/src/model/entity/poll_vote.rs @@ -0,0 +1,54 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "poll_vote")] +#[macros::export(object, js_name = "PollVote")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + #[sea_orm(column_name = "noteId")] + pub note_id: String, + pub choice: i32, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::note::Entity", + from = "Column::NoteId", + to = "super::note::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + Note, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Note.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/prelude.rs b/packages/backend-rs/src/model/entity/prelude.rs new file mode 100644 index 0000000..57fff02 --- /dev/null +++ b/packages/backend-rs/src/model/entity/prelude.rs @@ -0,0 +1,71 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +pub use super::abuse_user_report::Entity as AbuseUserReport; +pub use super::access_token::Entity as AccessToken; +pub use super::ad::Entity as Ad; +pub use super::announcement::Entity as Announcement; +pub use super::announcement_read::Entity as AnnouncementRead; +pub use super::antenna::Entity as Antenna; +pub use super::app::Entity as App; +pub use super::attestation_challenge::Entity as AttestationChallenge; +pub use super::auth_session::Entity as AuthSession; +pub use super::blocking::Entity as Blocking; +pub use super::channel::Entity as Channel; +pub use super::channel_following::Entity as ChannelFollowing; +pub use super::channel_note_pining::Entity as ChannelNotePining; +pub use super::clip::Entity as Clip; +pub use super::clip_note::Entity as ClipNote; +pub use super::drive_file::Entity as DriveFile; +pub use super::drive_folder::Entity as DriveFolder; +pub use super::emoji::Entity as Emoji; +pub use super::follow_request::Entity as FollowRequest; +pub use super::following::Entity as Following; +pub use super::gallery_like::Entity as GalleryLike; +pub use super::gallery_post::Entity as GalleryPost; +pub use super::hashtag::Entity as Hashtag; +pub use super::instance::Entity as Instance; +pub use super::messaging_message::Entity as MessagingMessage; +pub use super::meta::Entity as Meta; +pub use super::migrations::Entity as Migrations; +pub use super::moderation_log::Entity as ModerationLog; +pub use super::muted_note::Entity as MutedNote; +pub use super::muting::Entity as Muting; +pub use super::note::Entity as Note; +pub use super::note_edit::Entity as NoteEdit; +pub use super::note_favorite::Entity as NoteFavorite; +pub use super::note_file::Entity as NoteFile; +pub use super::note_reaction::Entity as NoteReaction; +pub use super::note_thread_muting::Entity as NoteThreadMuting; +pub use super::note_unread::Entity as NoteUnread; +pub use super::note_watching::Entity as NoteWatching; +pub use super::notification::Entity as Notification; +pub use super::page::Entity as Page; +pub use super::page_like::Entity as PageLike; +pub use super::password_reset_request::Entity as PasswordResetRequest; +pub use super::poll::Entity as Poll; +pub use super::poll_vote::Entity as PollVote; +pub use super::promo_note::Entity as PromoNote; +pub use super::promo_read::Entity as PromoRead; +pub use super::registration_ticket::Entity as RegistrationTicket; +pub use super::registry_item::Entity as RegistryItem; +pub use super::relay::Entity as Relay; +pub use super::renote_muting::Entity as RenoteMuting; +pub use super::reply_muting::Entity as ReplyMuting; +pub use super::signin::Entity as Signin; +pub use super::sw_subscription::Entity as SwSubscription; +pub use super::used_username::Entity as UsedUsername; +pub use super::user::Entity as User; +pub use super::user_group::Entity as UserGroup; +pub use super::user_group_invitation::Entity as UserGroupInvitation; +pub use super::user_group_invite::Entity as UserGroupInvite; +pub use super::user_group_joining::Entity as UserGroupJoining; +pub use super::user_ip::Entity as UserIp; +pub use super::user_keypair::Entity as UserKeypair; +pub use super::user_list::Entity as UserList; +pub use super::user_list_joining::Entity as UserListJoining; +pub use super::user_note_pining::Entity as UserNotePining; +pub use super::user_pending::Entity as UserPending; +pub use super::user_profile::Entity as UserProfile; +pub use super::user_publickey::Entity as UserPublickey; +pub use super::user_security_key::Entity as UserSecurityKey; +pub use super::webhook::Entity as Webhook; diff --git a/packages/backend-rs/src/model/entity/promo_note.rs b/packages/backend-rs/src/model/entity/promo_note.rs new file mode 100644 index 0000000..24b1b98 --- /dev/null +++ b/packages/backend-rs/src/model/entity/promo_note.rs @@ -0,0 +1,37 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "promo_note")] +#[macros::export(object, js_name = "PromoNote")] +pub struct Model { + #[sea_orm(column_name = "noteId", primary_key, auto_increment = false, unique)] + pub note_id: String, + #[sea_orm(column_name = "expiresAt")] + pub expires_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::note::Entity", + from = "Column::NoteId", + to = "super::note::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + Note, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Note.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/promo_read.rs b/packages/backend-rs/src/model/entity/promo_read.rs new file mode 100644 index 0000000..097b6e3 --- /dev/null +++ b/packages/backend-rs/src/model/entity/promo_read.rs @@ -0,0 +1,53 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "promo_read")] +#[macros::export(object, js_name = "PromoRead")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + #[sea_orm(column_name = "noteId")] + pub note_id: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::note::Entity", + from = "Column::NoteId", + to = "super::note::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + Note, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Note.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/registration_ticket.rs b/packages/backend-rs/src/model/entity/registration_ticket.rs new file mode 100644 index 0000000..7a25c01 --- /dev/null +++ b/packages/backend-rs/src/model/entity/registration_ticket.rs @@ -0,0 +1,21 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "registration_ticket")] +#[macros::export(object, js_name = "RegistrationTicket")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + pub code: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/registry_item.rs b/packages/backend-rs/src/model/entity/registry_item.rs new file mode 100644 index 0000000..7dbc5e3 --- /dev/null +++ b/packages/backend-rs/src/model/entity/registry_item.rs @@ -0,0 +1,44 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "registry_item")] +#[macros::export(object, js_name = "RegistryItem")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "updatedAt")] + pub updated_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + pub key: String, + pub scope: Vec, + pub domain: Option, + #[sea_orm(column_type = "JsonBinary", nullable)] + pub value: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/relay.rs b/packages/backend-rs/src/model/entity/relay.rs new file mode 100644 index 0000000..6648179 --- /dev/null +++ b/packages/backend-rs/src/model/entity/relay.rs @@ -0,0 +1,21 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use super::sea_orm_active_enums::RelayStatus; +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "relay")] +#[macros::export(object, js_name = "Relay")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + pub inbox: String, + pub status: RelayStatus, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/renote_muting.rs b/packages/backend-rs/src/model/entity/renote_muting.rs new file mode 100644 index 0000000..1adc965 --- /dev/null +++ b/packages/backend-rs/src/model/entity/renote_muting.rs @@ -0,0 +1,24 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "renote_muting")] +#[macros::export(object, js_name = "RenoteMuting")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "muteeId")] + pub mutee_id: String, + #[sea_orm(column_name = "muterId")] + pub muter_id: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/reply_muting.rs b/packages/backend-rs/src/model/entity/reply_muting.rs new file mode 100644 index 0000000..5f01f22 --- /dev/null +++ b/packages/backend-rs/src/model/entity/reply_muting.rs @@ -0,0 +1,24 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "reply_muting")] +#[macros::export(object, js_name = "ReplyMuting")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "muteeId")] + pub mutee_id: String, + #[sea_orm(column_name = "muterId")] + pub muter_id: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/sea_orm_active_enums.rs b/packages/backend-rs/src/model/entity/sea_orm_active_enums.rs new file mode 100644 index 0000000..4cdbccf --- /dev/null +++ b/packages/backend-rs/src/model/entity/sea_orm_active_enums.rs @@ -0,0 +1,237 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::derive_clone_and_export(string_enum = "camelCase")] +#[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "antenna_src")] +pub enum AntennaSrc { + #[sea_orm(string_value = "all")] + All, + #[sea_orm(string_value = "group")] + Group, + #[sea_orm(string_value = "home")] + Home, + #[sea_orm(string_value = "instances")] + Instances, + #[sea_orm(string_value = "list")] + List, + #[sea_orm(string_value = "users")] + Users, +} +#[derive(Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::derive_clone_and_export(string_enum = "camelCase")] +#[sea_orm( + rs_type = "String", + db_type = "Enum", + enum_name = "drive_file_usage_hint" +)] +pub enum DriveFileUsageHint { + #[sea_orm(string_value = "userAvatar")] + UserAvatar, + #[sea_orm(string_value = "userBanner")] + UserBanner, +} +#[derive(Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::derive_clone_and_export(string_enum = "camelCase")] +#[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "muted_note_reason")] +pub enum MutedNoteReason { + #[sea_orm(string_value = "manual")] + Manual, + #[sea_orm(string_value = "other")] + Other, + #[sea_orm(string_value = "spam")] + Spam, + #[sea_orm(string_value = "word")] + Word, +} +#[derive(Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::derive_clone_and_export(string_enum = "camelCase")] +#[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "note_visibility")] +pub enum NoteVisibility { + #[sea_orm(string_value = "followers")] + Followers, + #[sea_orm(string_value = "hidden")] + Hidden, + #[sea_orm(string_value = "home")] + Home, + #[sea_orm(string_value = "public")] + Public, + #[sea_orm(string_value = "specified")] + Specified, +} +#[derive(Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::derive_clone_and_export(string_enum = "camelCase")] +#[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "notification_type")] +pub enum NotificationType { + #[sea_orm(string_value = "app")] + App, + #[sea_orm(string_value = "follow")] + Follow, + #[sea_orm(string_value = "followRequestAccepted")] + FollowRequestAccepted, + #[sea_orm(string_value = "groupInvited")] + GroupInvited, + #[sea_orm(string_value = "mention")] + Mention, + #[sea_orm(string_value = "pollEnded")] + PollEnded, + #[sea_orm(string_value = "pollVote")] + PollVote, + #[sea_orm(string_value = "quote")] + Quote, + #[sea_orm(string_value = "reaction")] + Reaction, + #[sea_orm(string_value = "receiveFollowRequest")] + ReceiveFollowRequest, + #[sea_orm(string_value = "renote")] + Renote, + #[sea_orm(string_value = "reply")] + Reply, +} +#[derive(Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::derive_clone_and_export(string_enum = "camelCase")] +#[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "page_visibility")] +pub enum PageVisibility { + #[sea_orm(string_value = "followers")] + Followers, + #[sea_orm(string_value = "public")] + Public, + #[sea_orm(string_value = "specified")] + Specified, +} +#[derive(Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::derive_clone_and_export(string_enum = "camelCase")] +#[sea_orm( + rs_type = "String", + db_type = "Enum", + enum_name = "poll_note_visibility" +)] +pub enum PollNoteVisibility { + #[sea_orm(string_value = "followers")] + Followers, + #[sea_orm(string_value = "home")] + Home, + #[sea_orm(string_value = "public")] + Public, + #[sea_orm(string_value = "specified")] + Specified, +} +#[derive(Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::derive_clone_and_export(string_enum = "camelCase")] +#[sea_orm( + rs_type = "String", + db_type = "Enum", + enum_name = "push_subscription_type" +)] +pub enum PushSubscriptionType { + #[sea_orm(string_value = "admin.report")] + AdminReport, + #[sea_orm(string_value = "admin.sign_up")] + AdminSignUp, + #[sea_orm(string_value = "favourite")] + Favourite, + #[sea_orm(string_value = "follow")] + Follow, + #[sea_orm(string_value = "follow_request")] + FollowRequest, + #[sea_orm(string_value = "mention")] + Mention, + #[sea_orm(string_value = "poll")] + Poll, + #[sea_orm(string_value = "reblog")] + Reblog, + #[sea_orm(string_value = "status")] + Status, + #[sea_orm(string_value = "update")] + Update, +} +#[derive(Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::derive_clone_and_export(string_enum = "camelCase")] +#[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "relay_status")] +pub enum RelayStatus { + #[sea_orm(string_value = "accepted")] + Accepted, + #[sea_orm(string_value = "rejected")] + Rejected, + #[sea_orm(string_value = "requesting")] + Requesting, +} +#[derive(Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::derive_clone_and_export(string_enum = "camelCase")] +#[sea_orm( + rs_type = "String", + db_type = "Enum", + enum_name = "user_emoji_mod_perm" +)] +pub enum UserEmojiModPerm { + #[sea_orm(string_value = "add")] + Add, + #[sea_orm(string_value = "full")] + Full, + #[sea_orm(string_value = "mod")] + Mod, + #[sea_orm(string_value = "unauthorized")] + Unauthorized, +} +#[derive(Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::derive_clone_and_export(string_enum = "camelCase")] +#[sea_orm( + rs_type = "String", + db_type = "Enum", + enum_name = "user_profile_ffvisibility" +)] +pub enum UserProfileFfvisibility { + #[sea_orm(string_value = "followers")] + Followers, + #[sea_orm(string_value = "private")] + Private, + #[sea_orm(string_value = "public")] + Public, +} +#[derive(Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[macros::derive_clone_and_export(string_enum = "camelCase")] +#[sea_orm( + rs_type = "String", + db_type = "Enum", + enum_name = "user_profile_muting_notification_types" +)] +pub enum UserProfileMutingNotificationTypes { + #[sea_orm(string_value = "app")] + App, + #[sea_orm(string_value = "follow")] + Follow, + #[sea_orm(string_value = "followRequestAccepted")] + FollowRequestAccepted, + #[sea_orm(string_value = "groupInvited")] + GroupInvited, + #[sea_orm(string_value = "mention")] + Mention, + #[sea_orm(string_value = "pollEnded")] + PollEnded, + #[sea_orm(string_value = "pollVote")] + PollVote, + #[sea_orm(string_value = "quote")] + Quote, + #[sea_orm(string_value = "reaction")] + Reaction, + #[sea_orm(string_value = "receiveFollowRequest")] + ReceiveFollowRequest, + #[sea_orm(string_value = "renote")] + Renote, + #[sea_orm(string_value = "reply")] + Reply, +} diff --git a/packages/backend-rs/src/model/entity/signin.rs b/packages/backend-rs/src/model/entity/signin.rs new file mode 100644 index 0000000..aec9f2d --- /dev/null +++ b/packages/backend-rs/src/model/entity/signin.rs @@ -0,0 +1,41 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "signin")] +#[macros::export(object, js_name = "Signin")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + pub ip: String, + #[sea_orm(column_type = "JsonBinary")] + pub headers: Json, + pub success: bool, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/sw_subscription.rs b/packages/backend-rs/src/model/entity/sw_subscription.rs new file mode 100644 index 0000000..c675781 --- /dev/null +++ b/packages/backend-rs/src/model/entity/sw_subscription.rs @@ -0,0 +1,61 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use super::sea_orm_active_enums::PushSubscriptionType; +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "sw_subscription")] +#[macros::export(object, js_name = "SwSubscription")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + pub endpoint: String, + pub auth: String, + pub publickey: String, + #[sea_orm(column_name = "sendReadMessage")] + pub send_read_message: bool, + #[sea_orm(column_name = "appAccessTokenId")] + pub app_access_token_id: Option, + #[sea_orm(column_name = "subscriptionTypes")] + pub subscription_types: Vec, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::access_token::Entity", + from = "Column::AppAccessTokenId", + to = "super::access_token::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + AccessToken, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::AccessToken.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/used_username.rs b/packages/backend-rs/src/model/entity/used_username.rs new file mode 100644 index 0000000..84e55ba --- /dev/null +++ b/packages/backend-rs/src/model/entity/used_username.rs @@ -0,0 +1,20 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "used_username")] +#[macros::export(object, js_name = "UsedUsername")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub username: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/user.rs b/packages/backend-rs/src/model/entity/user.rs new file mode 100644 index 0000000..f13dc4c --- /dev/null +++ b/packages/backend-rs/src/model/entity/user.rs @@ -0,0 +1,432 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use super::sea_orm_active_enums::UserEmojiModPerm; +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "user")] +#[macros::export(object, js_name = "User")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "updatedAt")] + pub updated_at: Option, + #[sea_orm(column_name = "lastFetchedAt")] + pub last_fetched_at: Option, + pub username: String, + #[sea_orm(column_name = "usernameLower")] + pub username_lower: String, + pub name: Option, + #[sea_orm(column_name = "followersCount")] + pub followers_count: i32, + #[sea_orm(column_name = "followingCount")] + pub following_count: i32, + #[sea_orm(column_name = "notesCount")] + pub notes_count: i32, + #[sea_orm(column_name = "avatarId", unique)] + pub avatar_id: Option, + #[sea_orm(column_name = "bannerId", unique)] + pub banner_id: Option, + pub tags: Vec, + #[sea_orm(column_name = "isSuspended")] + pub is_suspended: bool, + #[sea_orm(column_name = "isSilenced")] + pub is_silenced: bool, + #[sea_orm(column_name = "isLocked")] + pub is_locked: bool, + #[sea_orm(column_name = "isBot")] + pub is_bot: bool, + #[sea_orm(column_name = "isCat")] + pub is_cat: bool, + #[sea_orm(column_name = "isAdmin")] + pub is_admin: bool, + #[sea_orm(column_name = "isModerator")] + pub is_moderator: bool, + pub emojis: Vec, + pub host: Option, + pub inbox: Option, + #[sea_orm(column_name = "sharedInbox")] + pub shared_inbox: Option, + pub featured: Option, + pub uri: Option, + #[sea_orm(unique)] + pub token: Option, + #[sea_orm(column_name = "isExplorable")] + pub is_explorable: bool, + #[sea_orm(column_name = "followersUri")] + pub followers_uri: Option, + #[sea_orm(column_name = "lastActiveDate")] + pub last_active_date: Option, + #[sea_orm(column_name = "hideOnlineStatus")] + pub hide_online_status: bool, + #[sea_orm(column_name = "isDeleted")] + pub is_deleted: bool, + #[sea_orm(column_name = "driveCapacityOverrideMb")] + pub drive_capacity_override_mb: Option, + #[sea_orm(column_name = "movedToUri")] + pub moved_to_uri: Option, + #[sea_orm(column_name = "speakAsCat")] + pub speak_as_cat: bool, + #[sea_orm(column_name = "emojiModPerm")] + pub emoji_mod_perm: UserEmojiModPerm, + #[sea_orm(column_name = "isIndexable")] + pub is_indexable: bool, + #[sea_orm(column_name = "alsoKnownAs")] + pub also_known_as: Option>, + #[sea_orm(column_name = "readCatLanguage")] + pub read_cat_language: bool, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm(has_many = "super::access_token::Entity")] + AccessToken, + #[sea_orm(has_many = "super::announcement_read::Entity")] + AnnouncementRead, + #[sea_orm(has_many = "super::antenna::Entity")] + Antenna, + #[sea_orm(has_many = "super::app::Entity")] + App, + #[sea_orm(has_many = "super::attestation_challenge::Entity")] + AttestationChallenge, + #[sea_orm(has_many = "super::auth_session::Entity")] + AuthSession, + #[sea_orm(has_many = "super::channel::Entity")] + Channel, + #[sea_orm(has_many = "super::channel_following::Entity")] + ChannelFollowing, + #[sea_orm(has_many = "super::clip::Entity")] + Clip, + #[sea_orm( + belongs_to = "super::drive_file::Entity", + from = "Column::AvatarId", + to = "super::drive_file::Column::Id", + on_update = "NoAction", + on_delete = "SetNull" + )] + DriveFile2, + #[sea_orm( + belongs_to = "super::drive_file::Entity", + from = "Column::BannerId", + to = "super::drive_file::Column::Id", + on_update = "NoAction", + on_delete = "SetNull" + )] + DriveFile1, + #[sea_orm(has_many = "super::drive_folder::Entity")] + DriveFolder, + #[sea_orm(has_many = "super::gallery_like::Entity")] + GalleryLike, + #[sea_orm(has_many = "super::gallery_post::Entity")] + GalleryPost, + #[sea_orm(has_many = "super::meta::Entity")] + Meta, + #[sea_orm(has_many = "super::moderation_log::Entity")] + ModerationLog, + #[sea_orm(has_many = "super::muted_note::Entity")] + MutedNote, + #[sea_orm(has_many = "super::note::Entity")] + Note, + #[sea_orm(has_many = "super::note_favorite::Entity")] + NoteFavorite, + #[sea_orm(has_many = "super::note_reaction::Entity")] + NoteReaction, + #[sea_orm(has_many = "super::note_thread_muting::Entity")] + NoteThreadMuting, + #[sea_orm(has_many = "super::note_unread::Entity")] + NoteUnread, + #[sea_orm(has_many = "super::note_watching::Entity")] + NoteWatching, + #[sea_orm(has_many = "super::page::Entity")] + Page, + #[sea_orm(has_many = "super::page_like::Entity")] + PageLike, + #[sea_orm(has_many = "super::password_reset_request::Entity")] + PasswordResetRequest, + #[sea_orm(has_many = "super::poll_vote::Entity")] + PollVote, + #[sea_orm(has_many = "super::promo_read::Entity")] + PromoRead, + #[sea_orm(has_many = "super::registry_item::Entity")] + RegistryItem, + #[sea_orm(has_many = "super::signin::Entity")] + Signin, + #[sea_orm(has_many = "super::sw_subscription::Entity")] + SwSubscription, + #[sea_orm(has_many = "super::user_group::Entity")] + UserGroup, + #[sea_orm(has_many = "super::user_group_invitation::Entity")] + UserGroupInvitation, + #[sea_orm(has_many = "super::user_group_invite::Entity")] + UserGroupInvite, + #[sea_orm(has_many = "super::user_group_joining::Entity")] + UserGroupJoining, + #[sea_orm(has_one = "super::user_keypair::Entity")] + UserKeypair, + #[sea_orm(has_many = "super::user_list::Entity")] + UserList, + #[sea_orm(has_many = "super::user_list_joining::Entity")] + UserListJoining, + #[sea_orm(has_many = "super::user_note_pining::Entity")] + UserNotePining, + #[sea_orm(has_one = "super::user_profile::Entity")] + UserProfile, + #[sea_orm(has_one = "super::user_publickey::Entity")] + UserPublickey, + #[sea_orm(has_many = "super::user_security_key::Entity")] + UserSecurityKey, + #[sea_orm(has_many = "super::webhook::Entity")] + Webhook, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::AccessToken.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::AnnouncementRead.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Antenna.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::App.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::AttestationChallenge.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::AuthSession.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Channel.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::ChannelFollowing.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Clip.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::DriveFolder.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::GalleryLike.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::GalleryPost.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Meta.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::ModerationLog.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::MutedNote.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Note.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::NoteFavorite.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::NoteReaction.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::NoteThreadMuting.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::NoteUnread.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::NoteWatching.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Page.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::PageLike.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::PasswordResetRequest.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::PollVote.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::PromoRead.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::RegistryItem.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Signin.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::SwSubscription.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserGroup.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserGroupInvitation.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserGroupInvite.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserGroupJoining.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserKeypair.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserList.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserListJoining.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserNotePining.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserProfile.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserPublickey.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserSecurityKey.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Webhook.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/user_group.rs b/packages/backend-rs/src/model/entity/user_group.rs new file mode 100644 index 0000000..f035750 --- /dev/null +++ b/packages/backend-rs/src/model/entity/user_group.rs @@ -0,0 +1,72 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "user_group")] +#[macros::export(object, js_name = "UserGroup")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + pub name: String, + #[sea_orm(column_name = "userId")] + pub user_id: String, + #[sea_orm(column_name = "isPrivate")] + pub is_private: bool, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm(has_many = "super::messaging_message::Entity")] + MessagingMessage, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, + #[sea_orm(has_many = "super::user_group_invitation::Entity")] + UserGroupInvitation, + #[sea_orm(has_many = "super::user_group_invite::Entity")] + UserGroupInvite, + #[sea_orm(has_many = "super::user_group_joining::Entity")] + UserGroupJoining, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::MessagingMessage.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserGroupInvitation.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserGroupInvite.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserGroupJoining.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/user_group_invitation.rs b/packages/backend-rs/src/model/entity/user_group_invitation.rs new file mode 100644 index 0000000..41073b3 --- /dev/null +++ b/packages/backend-rs/src/model/entity/user_group_invitation.rs @@ -0,0 +1,61 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "user_group_invitation")] +#[macros::export(object, js_name = "UserGroupInvitation")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + #[sea_orm(column_name = "userGroupId")] + pub user_group_id: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm(has_many = "super::notification::Entity")] + Notification, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, + #[sea_orm( + belongs_to = "super::user_group::Entity", + from = "Column::UserGroupId", + to = "super::user_group::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + UserGroup, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Notification.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserGroup.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/user_group_invite.rs b/packages/backend-rs/src/model/entity/user_group_invite.rs new file mode 100644 index 0000000..28c8311 --- /dev/null +++ b/packages/backend-rs/src/model/entity/user_group_invite.rs @@ -0,0 +1,53 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "user_group_invite")] +#[macros::export(object, js_name = "UserGroupInvite")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + #[sea_orm(column_name = "userGroupId")] + pub user_group_id: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, + #[sea_orm( + belongs_to = "super::user_group::Entity", + from = "Column::UserGroupId", + to = "super::user_group::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + UserGroup, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserGroup.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/user_group_joining.rs b/packages/backend-rs/src/model/entity/user_group_joining.rs new file mode 100644 index 0000000..99f38d1 --- /dev/null +++ b/packages/backend-rs/src/model/entity/user_group_joining.rs @@ -0,0 +1,61 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "user_group_joining")] +#[macros::export(object, js_name = "UserGroupJoining")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + #[sea_orm(column_name = "userGroupId")] + pub user_group_id: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm(has_many = "super::antenna::Entity")] + Antenna, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, + #[sea_orm( + belongs_to = "super::user_group::Entity", + from = "Column::UserGroupId", + to = "super::user_group::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + UserGroup, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Antenna.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserGroup.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/user_ip.rs b/packages/backend-rs/src/model/entity/user_ip.rs new file mode 100644 index 0000000..326d82b --- /dev/null +++ b/packages/backend-rs/src/model/entity/user_ip.rs @@ -0,0 +1,23 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "user_ip")] +#[macros::export(object, js_name = "UserIp")] +pub struct Model { + #[sea_orm(primary_key)] + pub id: i32, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + pub ip: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/user_keypair.rs b/packages/backend-rs/src/model/entity/user_keypair.rs new file mode 100644 index 0000000..cbc203e --- /dev/null +++ b/packages/backend-rs/src/model/entity/user_keypair.rs @@ -0,0 +1,37 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "user_keypair")] +#[macros::export(object, js_name = "UserKeypair")] +pub struct Model { + #[sea_orm(column_name = "userId", primary_key, auto_increment = false, unique)] + pub user_id: String, + #[sea_orm(column_name = "publicKey")] + pub public_key: String, + #[sea_orm(column_name = "privateKey")] + pub private_key: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/user_list.rs b/packages/backend-rs/src/model/entity/user_list.rs new file mode 100644 index 0000000..839eab1 --- /dev/null +++ b/packages/backend-rs/src/model/entity/user_list.rs @@ -0,0 +1,54 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "user_list")] +#[macros::export(object, js_name = "UserList")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + pub name: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm(has_many = "super::antenna::Entity")] + Antenna, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, + #[sea_orm(has_many = "super::user_list_joining::Entity")] + UserListJoining, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Antenna.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserListJoining.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/user_list_joining.rs b/packages/backend-rs/src/model/entity/user_list_joining.rs new file mode 100644 index 0000000..3158cba --- /dev/null +++ b/packages/backend-rs/src/model/entity/user_list_joining.rs @@ -0,0 +1,53 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "user_list_joining")] +#[macros::export(object, js_name = "UserListJoining")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + #[sea_orm(column_name = "userListId")] + pub user_list_id: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, + #[sea_orm( + belongs_to = "super::user_list::Entity", + from = "Column::UserListId", + to = "super::user_list::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + UserList, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::UserList.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/user_note_pining.rs b/packages/backend-rs/src/model/entity/user_note_pining.rs new file mode 100644 index 0000000..2a4c4e8 --- /dev/null +++ b/packages/backend-rs/src/model/entity/user_note_pining.rs @@ -0,0 +1,53 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "user_note_pining")] +#[macros::export(object, js_name = "UserNotePining")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + #[sea_orm(column_name = "noteId")] + pub note_id: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::note::Entity", + from = "Column::NoteId", + to = "super::note::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + Note, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Note.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/user_pending.rs b/packages/backend-rs/src/model/entity/user_pending.rs new file mode 100644 index 0000000..6c0265b --- /dev/null +++ b/packages/backend-rs/src/model/entity/user_pending.rs @@ -0,0 +1,24 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "user_pending")] +#[macros::export(object, js_name = "UserPending")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + pub code: String, + pub username: String, + pub email: String, + pub password: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/user_profile.rs b/packages/backend-rs/src/model/entity/user_profile.rs new file mode 100644 index 0000000..afebc6f --- /dev/null +++ b/packages/backend-rs/src/model/entity/user_profile.rs @@ -0,0 +1,112 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use super::sea_orm_active_enums::UserProfileFfvisibility; +use super::sea_orm_active_enums::UserProfileMutingNotificationTypes; +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "user_profile")] +#[macros::export(object, js_name = "UserProfile")] +pub struct Model { + #[sea_orm(column_name = "userId", primary_key, auto_increment = false, unique)] + pub user_id: String, + pub location: Option, + pub birthday: Option, + pub description: Option, + #[sea_orm(column_type = "JsonBinary")] + pub fields: Json, + pub url: Option, + pub email: Option, + #[sea_orm(column_name = "emailVerifyCode")] + pub email_verify_code: Option, + #[sea_orm(column_name = "emailVerified")] + pub email_verified: bool, + #[sea_orm(column_name = "twoFactorTempSecret")] + pub two_factor_temp_secret: Option, + #[sea_orm(column_name = "twoFactorSecret")] + pub two_factor_secret: Option, + #[sea_orm(column_name = "twoFactorEnabled")] + pub two_factor_enabled: bool, + pub password: Option, + #[sea_orm(column_name = "autoAcceptFollowed")] + pub auto_accept_followed: bool, + #[sea_orm(column_name = "alwaysMarkNsfw")] + pub always_mark_nsfw: bool, + #[sea_orm(column_name = "carefulBot")] + pub careful_bot: bool, + #[sea_orm(column_name = "userHost")] + pub user_host: Option, + #[sea_orm(column_name = "securityKeysAvailable")] + pub security_keys_available: bool, + #[sea_orm(column_name = "usePasswordLessLogin")] + pub use_password_less_login: bool, + #[sea_orm(column_name = "pinnedPageId", unique)] + pub pinned_page_id: Option, + #[sea_orm(column_name = "injectFeaturedNote")] + pub inject_featured_note: bool, + #[sea_orm(column_name = "enableWordMute")] + pub enable_word_mute: bool, + #[sea_orm(column_name = "mutingNotificationTypes")] + pub muting_notification_types: Vec, + #[sea_orm(column_name = "noCrawle")] + pub no_crawle: bool, + #[sea_orm(column_name = "receiveAnnouncementEmail")] + pub receive_announcement_email: bool, + #[sea_orm(column_name = "emailNotificationTypes", column_type = "JsonBinary")] + pub email_notification_types: Json, + #[sea_orm(column_name = "publicReactions")] + pub public_reactions: bool, + #[sea_orm(column_name = "ffVisibility")] + pub ff_visibility: UserProfileFfvisibility, + #[sea_orm(column_name = "moderationNote")] + pub moderation_note: String, + #[sea_orm(column_name = "preventAiLearning")] + pub prevent_ai_learning: bool, + #[sea_orm(column_name = "isIndexable")] + pub is_indexable: bool, + #[sea_orm(column_name = "mutedPatterns")] + pub muted_patterns: Vec, + #[sea_orm(column_type = "JsonBinary")] + pub mentions: Json, + #[sea_orm(column_name = "mutedInstances")] + pub muted_instances: Vec, + #[sea_orm(column_name = "mutedWords")] + pub muted_words: Vec, + pub lang: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::page::Entity", + from = "Column::PinnedPageId", + to = "super::page::Column::Id", + on_update = "NoAction", + on_delete = "SetNull" + )] + Page, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Page.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/user_publickey.rs b/packages/backend-rs/src/model/entity/user_publickey.rs new file mode 100644 index 0000000..a0605e9 --- /dev/null +++ b/packages/backend-rs/src/model/entity/user_publickey.rs @@ -0,0 +1,37 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "user_publickey")] +#[macros::export(object, js_name = "UserPublickey")] +pub struct Model { + #[sea_orm(column_name = "userId", primary_key, auto_increment = false, unique)] + pub user_id: String, + #[sea_orm(column_name = "keyId")] + pub key_id: String, + #[sea_orm(column_name = "keyPem")] + pub key_pem: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/user_security_key.rs b/packages/backend-rs/src/model/entity/user_security_key.rs new file mode 100644 index 0000000..fdc6163 --- /dev/null +++ b/packages/backend-rs/src/model/entity/user_security_key.rs @@ -0,0 +1,40 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "user_security_key")] +#[macros::export(object, js_name = "UserSecurityKey")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "userId")] + pub user_id: String, + #[sea_orm(column_name = "publicKey")] + pub public_key: String, + #[sea_orm(column_name = "lastUsed")] + pub last_used: DateTimeWithTimeZone, + pub name: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/entity/webhook.rs b/packages/backend-rs/src/model/entity/webhook.rs new file mode 100644 index 0000000..b2695be --- /dev/null +++ b/packages/backend-rs/src/model/entity/webhook.rs @@ -0,0 +1,46 @@ +//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.15 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[sea_orm(table_name = "webhook")] +#[macros::export(object, js_name = "Webhook")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + #[sea_orm(column_name = "createdAt")] + pub created_at: DateTimeWithTimeZone, + #[sea_orm(column_name = "userId")] + pub user_id: String, + pub name: String, + pub on: Vec, + pub url: String, + pub secret: String, + pub active: bool, + #[sea_orm(column_name = "latestSentAt")] + pub latest_sent_at: Option, + #[sea_orm(column_name = "latestStatus")] + pub latest_status: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/packages/backend-rs/src/model/mod.rs b/packages/backend-rs/src/model/mod.rs new file mode 100644 index 0000000..0d8646a --- /dev/null +++ b/packages/backend-rs/src/model/mod.rs @@ -0,0 +1,3 @@ +//! Database structure, auto-generated by [sea_orm] + +pub mod entity; diff --git a/packages/backend-rs/src/service/antenna/cache.rs b/packages/backend-rs/src/service/antenna/cache.rs new file mode 100644 index 0000000..ce83895 --- /dev/null +++ b/packages/backend-rs/src/service/antenna/cache.rs @@ -0,0 +1,26 @@ +//! In-memory antennas cache handler + +use crate::{database::db_conn, model::entity::antenna}; +use sea_orm::prelude::*; +use std::sync::{Arc, Mutex}; + +static CACHE: Mutex>> = Mutex::new(None); + +fn set(antennas: Arc<[antenna::Model]>) { + let _ = CACHE.lock().map(|mut cache| *cache = Some(antennas)); +} + +pub(super) async fn update() -> Result, DbErr> { + tracing::debug!("updating cache"); + let antennas: Arc<[antenna::Model]> = + antenna::Entity::find().all(db_conn().await?).await?.into(); + set(antennas.clone()); + Ok(antennas) +} + +pub(super) async fn get() -> Result, DbErr> { + if let Some(cache) = CACHE.lock().ok().and_then(|cache| cache.clone()) { + return Ok(cache); + } + update().await +} diff --git a/packages/backend-rs/src/service/antenna/check_hit.rs b/packages/backend-rs/src/service/antenna/check_hit.rs new file mode 100644 index 0000000..0ef8f13 --- /dev/null +++ b/packages/backend-rs/src/service/antenna/check_hit.rs @@ -0,0 +1,171 @@ +use crate::{ + config::CONFIG, + database::{cache, db_conn}, + federation::acct::Acct, + model::entity::{antenna, blocking, following, note, sea_orm_active_enums::*}, +}; +use sea_orm::{prelude::*, QuerySelect}; + +#[macros::errors] +pub enum AntennaCheckError { + #[doc = "database error"] + #[error(transparent)] + Db(#[from] DbErr), + #[error("Redis cache operation has failed")] + Cache(#[from] cache::Error), +} + +fn match_all(space_separated_words: &str, text: &str, case_sensitive: bool) -> bool { + if case_sensitive { + space_separated_words + .split_whitespace() + .all(|word| text.contains(word)) + } else { + space_separated_words + .to_lowercase() + .split_whitespace() + .all(|word| text.to_lowercase().contains(word)) + } +} + +pub(super) async fn check_hit_antenna( + antenna: &antenna::Model, + note: ¬e::Model, + note_all_texts: &[String], + note_author: &Acct, +) -> Result { + if note.visibility == NoteVisibility::Specified { + return Ok(false); + } + + if antenna.with_file && note.file_ids.is_empty() { + return Ok(false); + } + + if !antenna.with_replies && note.reply_id.is_some() { + return Ok(false); + } + + if antenna.src == AntennaSrc::Users { + let is_from_one_of_specified_authors = antenna + .users + .iter() + .map(|s| s.parse::().unwrap()) + .any(|acct| acct.username == note_author.username && acct.host == note_author.host); + + if !is_from_one_of_specified_authors { + return Ok(false); + } + } else if antenna.src == AntennaSrc::Instances { + let note_author_host = note_author + .host + .clone() + .unwrap_or_else(|| CONFIG.host.clone()) + .to_ascii_lowercase(); + let is_from_one_of_specified_servers = antenna + .instances + .iter() + .any(|host| host.to_ascii_lowercase() == note_author_host); + + if !is_from_one_of_specified_servers { + return Ok(false); + } + } + + // "Home", "Group", "List" sources are currently disabled + + let has_keyword = antenna.keywords.iter().any(|words| { + note_all_texts + .iter() + .any(|text| match_all(words, text, antenna.case_sensitive)) + }); + + if !has_keyword { + return Ok(false); + } + + let has_excluded_word = antenna.exclude_keywords.iter().any(|words| { + note_all_texts + .iter() + .any(|text| match_all(words, text, antenna.case_sensitive)) + }); + + if has_excluded_word { + return Ok(false); + } + + let db = db_conn().await?; + + let blocked_user_ids: Vec = + if let Some(ids) = cache::get_one(cache::Category::Block, ¬e.user_id).await? { + ids + } else { + // cache miss + let blocks = blocking::Entity::find() + .select_only() + .column(blocking::Column::BlockeeId) + .filter(blocking::Column::BlockerId.eq(¬e.user_id)) + .into_tuple::() + .all(db) + .await?; + cache::set_one(cache::Category::Block, ¬e.user_id, &blocks, 10 * 60).await?; + blocks + }; + + // if the antenna owner is blocked by the note author, return false + if blocked_user_ids.contains(&antenna.user_id) { + return Ok(false); + } + + if matches!( + note.visibility, + NoteVisibility::Home | NoteVisibility::Followers + ) { + let following_user_ids: Vec = + if let Some(ids) = cache::get_one(cache::Category::Follow, &antenna.user_id).await? { + ids + } else { + // cache miss + let following = following::Entity::find() + .select_only() + .column(following::Column::FolloweeId) + .filter(following::Column::FollowerId.eq(&antenna.user_id)) + .into_tuple::() + .all(db) + .await?; + cache::set_one( + cache::Category::Follow, + &antenna.user_id, + &following, + 10 * 60, + ) + .await?; + following + }; + + // if the antenna owner is not following the note author, return false + if !following_user_ids.contains(¬e.user_id) { + return Ok(false); + } + } + + Ok(true) +} + +#[cfg(test)] +mod unit_test { + use super::match_all; + use pretty_assertions::assert_eq; + + #[test] + fn check_match_string() { + assert_eq!(match_all("Apple", "apple and banana", false), true); + assert_eq!(match_all("Apple", "apple and banana", true), false); + assert_eq!(match_all("Apple Banana", "apple and banana", false), true); + assert_eq!(match_all("Apple Banana", "apple and cinnamon", true), false); + assert_eq!( + match_all("Apple Banana", "apple and cinnamon", false), + false + ); + } +} diff --git a/packages/backend-rs/src/service/antenna/mod.rs b/packages/backend-rs/src/service/antenna/mod.rs new file mode 100644 index 0000000..2f25558 --- /dev/null +++ b/packages/backend-rs/src/service/antenna/mod.rs @@ -0,0 +1,4 @@ +mod cache; +mod check_hit; +pub mod process_new_note; +pub mod update; diff --git a/packages/backend-rs/src/service/antenna/process_new_note.rs b/packages/backend-rs/src/service/antenna/process_new_note.rs new file mode 100644 index 0000000..d9099f8 --- /dev/null +++ b/packages/backend-rs/src/service/antenna/process_new_note.rs @@ -0,0 +1,77 @@ +use crate::{ + database::{cache, redis_conn, redis_key, RedisConnError}, + federation::acct::Acct, + misc::note::elaborate, + model::entity::note, + service::{ + antenna, + antenna::check_hit::{check_hit_antenna, AntennaCheckError}, + stream, + }, + util::id::{get_timestamp, InvalidIdError}, +}; +use redis::{streams::StreamMaxlen, AsyncCommands, RedisError}; +use sea_orm::prelude::*; + +#[macros::errors] +pub enum Error { + #[doc = "database error"] + #[error(transparent)] + Db(#[from] DbErr), + #[error("Redis cache operation has failed")] + Cache(#[from] cache::Error), + #[error("failed to execute a Redis command")] + Redis(#[from] RedisError), + #[error("bad Redis connection")] + RedisConn(#[from] RedisConnError), + #[doc = "provided string is not a valid Firefish ID"] + #[error(transparent)] + InvalidId(#[from] InvalidIdError), + #[error("Redis stream operation has failed")] + Stream(#[from] stream::Error), + #[error("failed to check if the note should be added to antenna")] + AntennaCheck(#[from] AntennaCheckError), +} + +// for napi export +// https://github.com/napi-rs/napi-rs/issues/2060 +type Note = note::Model; + +#[macros::export] +pub async fn update_antennas_on_new_note( + note: &Note, + note_author: &Acct, + note_muted_users: &[String], +) -> Result<(), Error> { + let note_all_texts = elaborate!(note, false).await?; + + // TODO: do this in parallel + for antenna in antenna::cache::get().await?.iter() { + if note_muted_users.contains(&antenna.user_id) { + continue; + } + if check_hit_antenna(antenna, note, ¬e_all_texts, note_author).await? { + add_note_to_antenna(&antenna.id, note).await?; + } + } + + Ok(()) +} + +async fn add_note_to_antenna(antenna_id: &str, note: &Note) -> Result<(), Error> { + // for timeline API + redis_conn() + .await? + .xadd_maxlen( + redis_key(format!("antennaTimeline:{}", antenna_id)), + StreamMaxlen::Approx(200), + format!("{}-*", get_timestamp(¬e.id)?), + &[("note", ¬e.id)], + ) + .await?; + + // for streaming API + stream::antenna::publish(antenna_id.to_owned(), note).await?; + + Ok(()) +} diff --git a/packages/backend-rs/src/service/antenna/update.rs b/packages/backend-rs/src/service/antenna/update.rs new file mode 100644 index 0000000..169e574 --- /dev/null +++ b/packages/backend-rs/src/service/antenna/update.rs @@ -0,0 +1,7 @@ +//! This module is (currently) used in the TypeScript backend only. + +#[macros::ts_export] +pub async fn update_antenna_cache() -> Result<(), sea_orm::DbErr> { + super::cache::update().await?; + Ok(()) +} diff --git a/packages/backend-rs/src/service/mod.rs b/packages/backend-rs/src/service/mod.rs new file mode 100644 index 0000000..eedc575 --- /dev/null +++ b/packages/backend-rs/src/service/mod.rs @@ -0,0 +1,6 @@ +//! Services provided for local users + +pub mod antenna; +pub mod note; +pub mod push_notification; +pub mod stream; diff --git a/packages/backend-rs/src/service/note/mod.rs b/packages/backend-rs/src/service/note/mod.rs new file mode 100644 index 0000000..f536280 --- /dev/null +++ b/packages/backend-rs/src/service/note/mod.rs @@ -0,0 +1 @@ +pub mod watch; diff --git a/packages/backend-rs/src/service/note/watch.rs b/packages/backend-rs/src/service/note/watch.rs new file mode 100644 index 0000000..3a5e9a0 --- /dev/null +++ b/packages/backend-rs/src/service/note/watch.rs @@ -0,0 +1,42 @@ +use crate::{database::db_conn, model::entity::note_watching, util::id::gen_id_at}; +use sea_orm::{prelude::*, ActiveValue}; + +#[macros::export] +pub async fn watch_note( + watcher_id: &str, + note_author_id: &str, + note_id: &str, +) -> Result<(), DbErr> { + if watcher_id != note_author_id { + let now = chrono::Utc::now(); + + note_watching::Entity::insert(note_watching::ActiveModel { + id: ActiveValue::set(gen_id_at(now)), + created_at: ActiveValue::set(now.into()), + user_id: ActiveValue::Set(watcher_id.to_owned()), + note_user_id: ActiveValue::Set(note_author_id.to_owned()), + note_id: ActiveValue::Set(note_id.to_owned()), + }) + .exec(db_conn().await?) + .await?; + } + + Ok(()) +} + +#[macros::export] +pub async fn unwatch_note(watcher_id: &str, note_id: &str) -> Result<(), DbErr> { + let db = db_conn().await?; + + let entry = note_watching::Entity::find() + .filter(note_watching::Column::UserId.eq(watcher_id)) + .filter(note_watching::Column::NoteId.eq(note_id)) + .one(db) + .await?; + + if let Some(entry) = entry { + entry.delete(db).await?; + } + + Ok(()) +} diff --git a/packages/backend-rs/src/service/push_notification.rs b/packages/backend-rs/src/service/push_notification.rs new file mode 100644 index 0000000..cbf3be0 --- /dev/null +++ b/packages/backend-rs/src/service/push_notification.rs @@ -0,0 +1,400 @@ +use crate::{ + config::local_server_info, + database::db_conn, + misc::note::summarize, + model::entity::{access_token, app, sw_subscription}, + util::{ + http_client, + id::{get_timestamp, InvalidIdError}, + }, +}; +use once_cell::sync::OnceCell; +use sea_orm::prelude::*; +use serde::Deserialize; +use web_push::*; + +#[macros::errors] +pub enum Error { + #[doc = "database error"] + #[error(transparent)] + Db(#[from] DbErr), + #[error("web push has failed")] + WebPush(#[from] WebPushError), + #[error("failed to (de)serialize an object")] + Serialize(#[from] serde_json::Error), + #[doc = "provided content is invalid"] + #[error("invalid content ({0})")] + InvalidContent(String), + #[doc = "found Mastodon subscription is invalid"] + #[error("invalid subscription ({0})")] + InvalidSubscription(String), + #[error("invalid notification ID")] + InvalidId(#[from] InvalidIdError), + #[error("failed to acquire an HTTP client")] + HttpClient(#[from] http_client::Error), +} + +static CLIENT: OnceCell = OnceCell::new(); + +fn get_client() -> Result { + Ok(CLIENT + .get_or_try_init(|| http_client::client().map(IsahcWebPushClient::from)) + .cloned()?) +} + +#[macros::export(string_enum = "camelCase")] +pub enum PushNotificationKind { + Generic, + Chat, + ReadAllChats, + ReadAllChatsInTheRoom, + ReadNotifications, + ReadAllNotifications, + Mastodon, +} + +fn compact_content(mut content: serde_json::Value) -> Result { + if !content.is_object() { + return Err(Error::InvalidContent("not a JSON object".to_owned())); + } + + let object = content.as_object_mut().unwrap(); + + if !object.contains_key("note") { + return Ok(content); + } + + let mut note = if object.contains_key("type") && object.get("type").unwrap() == "renote" { + object + .get("note") + .unwrap() + .get("renote") + .ok_or(Error::InvalidContent("renote object is missing".to_owned()))? + } else { + object.get("note").unwrap() + } + .clone(); + + if !note.is_object() { + return Err(Error::InvalidContent( + "(re)note is not an object".to_owned(), + )); + } + + // TODO: get rid of this struct + #[derive(Deserialize)] + #[serde(rename_all = "camelCase")] + struct PartialNote { + file_ids: Vec, + text: Option, + cw: Option, + has_poll: bool, + } + + let note_like: PartialNote = serde_json::from_value(note.clone())?; + let text = summarize!(note_like); + + let note_object = note.as_object_mut().unwrap(); + + note_object.remove("reply"); + note_object.remove("renote"); + note_object.remove("user"); + note_object.insert("text".to_owned(), text.into()); + object.insert("note".to_owned(), note); + + Ok(serde_json::from_value(Json::Object(object.clone()))?) +} + +/// Returns a tuple containing the token and client name +async fn get_mastodon_subscription_info( + db: &DbConn, + subscription_id: &str, + token_id: &str, +) -> Result<(String, String), Error> { + let token = access_token::Entity::find() + .filter(access_token::Column::Id.eq(token_id)) + .one(db) + .await?; + + if token.is_none() { + unsubscribe(db, subscription_id).await?; + return Err(Error::InvalidSubscription( + "access token not found".to_owned(), + )); + } + let token = token.unwrap(); + + if token.app_id.is_none() { + unsubscribe(db, subscription_id).await?; + return Err(Error::InvalidSubscription("no app ID".to_owned())); + } + let app_id = token.app_id.unwrap(); + + let client = app::Entity::find() + .filter(app::Column::Id.eq(app_id)) + .one(db) + .await?; + + if client.is_none() { + unsubscribe(db, subscription_id).await?; + return Err(Error::InvalidSubscription("app not found".to_owned())); + } + + Ok((token.token, client.unwrap().name)) +} + +async fn encode_mastodon_payload( + mut content: serde_json::Value, + db: &DbConn, + subscription: &sw_subscription::Model, +) -> Result { + let object = content + .as_object_mut() + .ok_or(Error::InvalidContent("not a JSON object".to_owned()))?; + + if subscription.app_access_token_id.is_none() { + unsubscribe(db, &subscription.id).await?; + return Err(Error::InvalidSubscription("no access token".to_owned())); + } + + let (token, client_name) = get_mastodon_subscription_info( + db, + &subscription.id, + subscription.app_access_token_id.as_ref().unwrap(), + ) + .await?; + + object.insert("access_token".to_owned(), serde_json::to_value(token)?); + + // Some apps expect notification_id to be an integer, + // but doesn’t break when the ID doesn’t match the rest of API. + if [ + "IceCubesApp", + "Mammoth", + "feather", + "MaserApp", + "Metatext", + "Feditext", + ] + .contains(&client_name.as_str()) + { + let timestamp = object + .get("notification_id") + .and_then(|id| id.as_str()) + .map(get_timestamp) + .transpose()? + .unwrap_or_default(); + + object.insert("notification_id".to_owned(), timestamp.into()); + } + + let res = serde_json::to_string(&content)?; + + // Adding space paddings to the end of JSON payload to prevent + // `esm` from adding null bytes payload which many Mastodon clients don’t support. + // https://firefish.dev/firefish/firefish/-/merge_requests/10905#note_6733 + // not using the padding parameter directly on `res` because we want the padding to be + // calculated based on the UTF-8 byte size of `res` instead of number of characters. + let pad_length = match res.len() % 128 { + 127 => 127, + n => 126 - n, + }; + + Ok(format!("{}{:pad_length$}", res, "")) +} + +async fn unsubscribe(db: &DbConn, subscription_id: &str) -> Result<(), DbErr> { + sw_subscription::Entity::delete_by_id(subscription_id) + .exec(db) + .await?; + Ok(()) +} + +async fn handle_web_push_failure( + db: &DbConn, + err: WebPushError, + subscription_id: &str, + error_message: &str, +) -> Result<(), DbErr> { + match err { + WebPushError::BadRequest(_) + | WebPushError::ServerError(_) + | WebPushError::InvalidUri + | WebPushError::EndpointNotValid + | WebPushError::EndpointNotFound + | WebPushError::TlsError + | WebPushError::SslError + | WebPushError::InvalidPackageName + | WebPushError::MissingCryptoKeys + | WebPushError::InvalidCryptoKeys + | WebPushError::InvalidResponse => { + unsubscribe(db, subscription_id).await?; + tracing::info!("{}; {} was unsubscribed", error_message, subscription_id); + tracing::debug!("reason: {:#?}", err); + } + _ => { + tracing::warn!("{}; subscription id: {}", error_message, subscription_id); + tracing::info!("reason: {:#?}", err); + } + }; + + Ok(()) +} + +#[macros::export] +pub async fn send_push_notification( + receiver_user_id: &str, + kind: PushNotificationKind, + content: &serde_json::Value, +) -> Result<(), Error> { + let meta = local_server_info().await?; + + if !meta.enable_service_worker || meta.sw_public_key.is_none() || meta.sw_private_key.is_none() + { + return Ok(()); + } + + let db = db_conn().await?; + + let signature_builder = VapidSignatureBuilder::from_base64_no_sub( + meta.sw_private_key.unwrap().as_str(), + web_push::URL_SAFE_NO_PAD, + )?; + + let subscriptions = sw_subscription::Entity::find() + .filter(sw_subscription::Column::UserId.eq(receiver_user_id)) + .all(db) + .await?; + + let use_mastodon_api = matches!(kind, PushNotificationKind::Mastodon); + + // TODO: refactoring + let mut payload = if use_mastodon_api { + // Content generated per subscription + "".to_owned() + } else { + // Format the `content` passed from the TypeScript backend + // for Firefish push notifications + let label = match kind { + PushNotificationKind::Generic => "notification", + PushNotificationKind::Chat => "unreadMessagingMessage", + PushNotificationKind::ReadAllChats => "readAllMessagingMessages", + PushNotificationKind::ReadAllChatsInTheRoom => "readAllMessagingMessagesOfARoom", + PushNotificationKind::ReadNotifications => "readNotifications", + PushNotificationKind::ReadAllNotifications => "readAllNotifications", + // unreachable + _ => "unknown", + }; + format!( + "{{\"type\":\"{}\",\"userId\":\"{}\",\"dateTime\":{},\"body\":{}}}", + label, + receiver_user_id, + chrono::Utc::now().timestamp_millis(), + match kind { + PushNotificationKind::Generic => + serde_json::to_string(&compact_content(content.to_owned())?)?, + _ => serde_json::to_string(&content)?, + } + ) + }; + tracing::trace!("payload: {}", payload); + + let encoding = if use_mastodon_api { + ContentEncoding::AesGcm + } else { + ContentEncoding::Aes128Gcm + }; + + for subscription in subscriptions.iter() { + if !subscription.send_read_message + && matches!( + kind, + PushNotificationKind::ReadAllChats + | PushNotificationKind::ReadAllChatsInTheRoom + | PushNotificationKind::ReadAllNotifications + | PushNotificationKind::ReadNotifications + ) + { + continue; + } + + if use_mastodon_api { + if subscription.app_access_token_id.is_none() { + continue; + } + payload = encode_mastodon_payload(content.clone(), db, subscription).await?; + } else if subscription.app_access_token_id.is_some() { + continue; + } + + let subscription_info = SubscriptionInfo { + endpoint: subscription.endpoint.to_owned(), + keys: SubscriptionKeys { + // convert standard base64 into base64url + // https://en.wikipedia.org/wiki/Base64#Variants_summary_table + p256dh: subscription + .publickey + .replace('+', "-") + .replace('/', "_") + .to_owned(), + auth: subscription + .auth + .replace('+', "-") + .replace('/', "_") + .to_owned(), + }, + }; + + let signature = signature_builder + .clone() + .add_sub_info(&subscription_info) + .build(); + + if let Err(err) = signature { + handle_web_push_failure(db, err, &subscription.id, "failed to build a signature") + .await?; + continue; + } + + let mut message_builder = WebPushMessageBuilder::new(&subscription_info); + message_builder.set_ttl(1000); + message_builder.set_payload(encoding, payload.as_bytes()); + message_builder.set_vapid_signature(signature.unwrap()); + + let message = message_builder.build(); + + if let Err(err) = message { + handle_web_push_failure(db, err, &subscription.id, "failed to build a payload").await?; + continue; + } + + // Ice Cubes cannot process ";rs=4096" at at the end of Encryption header + let mut message = message.unwrap(); + + if let Some(payload) = message.payload { + let crypto_headers: Vec<(&str, String)> = payload + .crypto_headers + .into_iter() + .map(|(key, val)| match key { + "Encryption" => (key, val.replace(";rs=4096", "")), + _ => (key, val), + }) + .collect(); + + message.payload = Some(WebPushPayload { + content: payload.content, + content_encoding: payload.content_encoding, + crypto_headers, + }); + } + + if let Err(err) = get_client()?.send(message).await { + handle_web_push_failure(db, err, &subscription.id, "failed to send").await?; + continue; + } + + tracing::debug!("success; subscription id: {}", subscription.id); + } + + Ok(()) +} diff --git a/packages/backend-rs/src/service/stream.rs b/packages/backend-rs/src/service/stream.rs new file mode 100644 index 0000000..bd412b2 --- /dev/null +++ b/packages/backend-rs/src/service/stream.rs @@ -0,0 +1,124 @@ +pub mod antenna; +pub mod channel; +pub mod chat; +pub mod chat_index; +pub mod custom_emoji; +pub mod drive; +pub mod group_chat; +pub mod internal; +pub mod main; +pub mod moderation; +pub mod note; +pub mod note_edit; +pub mod notes; +pub mod user; + +use crate::{ + config::CONFIG, + database::{redis_conn, RedisConnError}, +}; +use redis::{AsyncCommands, RedisError}; + +pub enum Stream { + Internal, + CustomEmoji, + Moderation { + moderator_id: String, + }, + User { + user_id: String, + }, + Channel { + channel_id: String, + }, + Note { + note_id: String, + }, + Notes, + NoteEdit, + Main { + user_id: String, + }, + Drive { + user_id: String, + }, + Antenna { + antenna_id: String, + }, + Chat { + sender_user_id: String, + receiver_user_id: String, + }, + GroupChat { + group_id: String, + }, + ChatIndex { + user_id: String, + }, +} + +#[macros::export(string_enum = "camelCase")] +pub enum ChatEvent { + Message, + Read, + Deleted, + Typing, +} + +#[macros::errors] +pub enum Error { + #[error("failed to execute a Redis command")] + Redis(#[from] RedisError), + #[error("bad Redis connection")] + RedisConn(#[from] RedisConnError), + #[error("failed to (de)serialize object")] + Json(#[from] serde_json::Error), + #[error("invalid content")] + InvalidContent, +} + +pub async fn publish_to_stream( + stream: &Stream, + kind: Option<&str>, + value: Option, +) -> Result<(), Error> { + let channel = match stream { + Stream::Internal => "internal".to_owned(), + Stream::CustomEmoji => "broadcast".to_owned(), + Stream::Moderation { moderator_id } => format!("adminStream:{moderator_id}"), + Stream::User { user_id } => format!("user:{user_id}"), + Stream::Channel { channel_id } => format!("channelStream:{channel_id}"), + Stream::Note { note_id } => format!("noteStream:{note_id}"), + Stream::NoteEdit => "noteUpdatesStream".to_owned(), + Stream::Notes => "notesStream".to_owned(), + Stream::Main { user_id } => format!("mainStream:{user_id}"), + Stream::Drive { user_id } => format!("driveStream:{user_id}"), + Stream::Antenna { antenna_id } => format!("antennaStream:{antenna_id}"), + Stream::Chat { + sender_user_id, + receiver_user_id, + } => format!("messagingStream:{sender_user_id}-{receiver_user_id}"), + Stream::GroupChat { group_id } => format!("messagingStream:{group_id}"), + Stream::ChatIndex { user_id } => format!("messagingIndexStream:{user_id}"), + }; + + let message = if let Some(kind) = kind { + format!( + "{{\"type\":\"{}\",\"body\":{}}}", + kind, + value.unwrap_or_else(|| "null".to_owned()), + ) + } else { + value.ok_or(Error::InvalidContent)? + }; + + redis_conn() + .await? + .publish( + &CONFIG.host, + format!("{{\"channel\":\"{}\",\"message\":{}}}", channel, message), + ) + .await?; + + Ok(()) +} diff --git a/packages/backend-rs/src/service/stream/antenna.rs b/packages/backend-rs/src/service/stream/antenna.rs new file mode 100644 index 0000000..ddd3dd7 --- /dev/null +++ b/packages/backend-rs/src/service/stream/antenna.rs @@ -0,0 +1,13 @@ +use crate::{ + model::entity::note, + service::stream::{publish_to_stream, Error, Stream}, +}; + +pub async fn publish(antenna_id: String, note: ¬e::Model) -> Result<(), Error> { + publish_to_stream( + &Stream::Antenna { antenna_id }, + Some("note"), + Some(serde_json::to_string(note)?), + ) + .await +} diff --git a/packages/backend-rs/src/service/stream/channel.rs b/packages/backend-rs/src/service/stream/channel.rs new file mode 100644 index 0000000..b1bb865 --- /dev/null +++ b/packages/backend-rs/src/service/stream/channel.rs @@ -0,0 +1,11 @@ +use crate::service::stream::{publish_to_stream, Error, Stream}; + +#[macros::export(js_name = "publishToChannelStream")] +pub async fn publish(channel_id: String, user_id: String) -> Result<(), Error> { + publish_to_stream( + &Stream::Channel { channel_id }, + Some("typing"), + Some(format!("\"{}\"", user_id)), + ) + .await +} diff --git a/packages/backend-rs/src/service/stream/chat.rs b/packages/backend-rs/src/service/stream/chat.rs new file mode 100644 index 0000000..88532c7 --- /dev/null +++ b/packages/backend-rs/src/service/stream/chat.rs @@ -0,0 +1,29 @@ +use crate::service::stream::{publish_to_stream, ChatEvent, Error, Stream}; + +// We want to merge `kind` and `object` into a single enum +// https://github.com/napi-rs/napi-rs/issues/2036 + +#[macros::export(js_name = "publishToChatStream")] +pub async fn publish( + sender_user_id: String, + receiver_user_id: String, + kind: ChatEvent, + object: &serde_json::Value, +) -> Result<(), Error> { + let kind = match kind { + ChatEvent::Message => "message", + ChatEvent::Read => "read", + ChatEvent::Deleted => "deleted", + ChatEvent::Typing => "typing", + }; + + publish_to_stream( + &Stream::Chat { + sender_user_id, + receiver_user_id, + }, + Some(kind), + Some(serde_json::to_string(object)?), + ) + .await +} diff --git a/packages/backend-rs/src/service/stream/chat_index.rs b/packages/backend-rs/src/service/stream/chat_index.rs new file mode 100644 index 0000000..d822865 --- /dev/null +++ b/packages/backend-rs/src/service/stream/chat_index.rs @@ -0,0 +1,29 @@ +use crate::service::stream::{publish_to_stream, Error, Stream}; + +#[macros::export(string_enum = "camelCase")] +pub enum ChatIndexEvent { + Message, + Read, +} + +// We want to merge `kind` and `object` into a single enum +// https://github.com/napi-rs/napi-rs/issues/2036 + +#[macros::export(js_name = "publishToChatIndexStream")] +pub async fn publish( + user_id: String, + kind: ChatIndexEvent, + object: &serde_json::Value, +) -> Result<(), Error> { + let kind = match kind { + ChatIndexEvent::Message => "message", + ChatIndexEvent::Read => "read", + }; + + publish_to_stream( + &Stream::ChatIndex { user_id }, + Some(kind), + Some(serde_json::to_string(object)?), + ) + .await +} diff --git a/packages/backend-rs/src/service/stream/custom_emoji.rs b/packages/backend-rs/src/service/stream/custom_emoji.rs new file mode 100644 index 0000000..890d550 --- /dev/null +++ b/packages/backend-rs/src/service/stream/custom_emoji.rs @@ -0,0 +1,28 @@ +use crate::service::stream::{publish_to_stream, Error, Stream}; +use serde::Serialize; + +// TODO: define schema type in other place +#[derive(Serialize)] +#[serde(rename_all = "camelCase")] +#[macros::export(object)] +pub struct PackedEmoji { + pub id: String, + pub aliases: Vec, + pub name: String, + pub category: Option, + pub host: Option, + pub url: String, + pub license: Option, + pub width: Option, + pub height: Option, +} + +#[macros::export(js_name = "publishToBroadcastStream")] +pub async fn publish(emoji: &PackedEmoji) -> Result<(), Error> { + publish_to_stream( + &Stream::CustomEmoji, + Some("emojiAdded"), + Some(format!("{{\"emoji\":{}}}", serde_json::to_string(emoji)?)), + ) + .await +} diff --git a/packages/backend-rs/src/service/stream/drive.rs b/packages/backend-rs/src/service/stream/drive.rs new file mode 100644 index 0000000..ef5cb1e --- /dev/null +++ b/packages/backend-rs/src/service/stream/drive.rs @@ -0,0 +1,58 @@ +use crate::service::stream::{publish_to_stream, Error, Stream}; + +#[macros::export(string_enum = "camelCase")] +pub enum DriveFileEvent { + Create, + Update, + Delete, +} + +#[macros::export(string_enum = "camelCase")] +pub enum DriveFolderEvent { + Create, + Update, + Delete, +} + +// We want to merge `kind` and `object` into a single enum and merge the 2 functions +// https://github.com/napi-rs/napi-rs/issues/2036 + +#[macros::export(js_name = "publishToDriveFileStream")] +pub async fn publish_file( + user_id: String, + kind: DriveFileEvent, + object: &serde_json::Value, // file (create, update) or file id (delete) +) -> Result<(), Error> { + let kind = match kind { + DriveFileEvent::Create => "fileCreated", + DriveFileEvent::Update => "fileUpdated", + DriveFileEvent::Delete => "fileDeleted", + }; + + publish_to_stream( + &Stream::Drive { user_id }, + Some(kind), + Some(serde_json::to_string(object)?), + ) + .await +} + +#[macros::export(js_name = "publishToDriveFolderStream")] +pub async fn publish_folder( + user_id: String, + kind: DriveFolderEvent, + object: &serde_json::Value, // folder (create, update) or folder id (delete) +) -> Result<(), Error> { + let kind = match kind { + DriveFolderEvent::Create => "folderCreated", + DriveFolderEvent::Update => "folderUpdated", + DriveFolderEvent::Delete => "folderDeleted", + }; + + publish_to_stream( + &Stream::Drive { user_id }, + Some(kind), + Some(serde_json::to_string(object)?), + ) + .await +} diff --git a/packages/backend-rs/src/service/stream/group_chat.rs b/packages/backend-rs/src/service/stream/group_chat.rs new file mode 100644 index 0000000..005a523 --- /dev/null +++ b/packages/backend-rs/src/service/stream/group_chat.rs @@ -0,0 +1,25 @@ +use crate::service::stream::{publish_to_stream, ChatEvent, Error, Stream}; + +// We want to merge `kind` and `object` into a single enum +// https://github.com/napi-rs/napi-rs/issues/2036 + +#[macros::export(js_name = "publishToGroupChatStream")] +pub async fn publish( + group_id: String, + kind: ChatEvent, + object: &serde_json::Value, +) -> Result<(), Error> { + let kind = match kind { + ChatEvent::Message => "message", + ChatEvent::Read => "read", + ChatEvent::Deleted => "deleted", + ChatEvent::Typing => "typing", + }; + + publish_to_stream( + &Stream::GroupChat { group_id }, + Some(kind), + Some(serde_json::to_string(object)?), + ) + .await +} diff --git a/packages/backend-rs/src/service/stream/internal.rs b/packages/backend-rs/src/service/stream/internal.rs new file mode 100644 index 0000000..b78f40e --- /dev/null +++ b/packages/backend-rs/src/service/stream/internal.rs @@ -0,0 +1,45 @@ +use crate::service::stream::{publish_to_stream, Error, Stream}; + +#[macros::export] +pub enum InternalEvent { + Suspend, + Silence, + Moderator, + Token, + LocalUser, + RemoteUser, + WebhookCreated, + WebhookUpdated, + WebhookDeleted, + AntennaCreated, + AntennaUpdated, + AntennaDeleted, +} + +// We want to merge `kind` and `object` into a single enum +// https://github.com/napi-rs/napi-rs/issues/2036 + +#[macros::export(js_name = "publishToInternalStream")] +pub async fn publish(kind: InternalEvent, object: &serde_json::Value) -> Result<(), Error> { + let kind = match kind { + InternalEvent::Suspend => "userChangeSuspendedState", + InternalEvent::Silence => "userChangeSilencedState", + InternalEvent::Moderator => "userChangeModeratorState", + InternalEvent::Token => "userTokenRegenerated", + InternalEvent::LocalUser => "localUserUpdated", + InternalEvent::RemoteUser => "remoteUserUpdated", + InternalEvent::WebhookCreated => "webhookCreated", + InternalEvent::WebhookUpdated => "webhookUpdated", + InternalEvent::WebhookDeleted => "webhookDeleted", + InternalEvent::AntennaCreated => "antennaCreated", + InternalEvent::AntennaUpdated => "antennaUpdated", + InternalEvent::AntennaDeleted => "antennaDeleted", + }; + + publish_to_stream( + &Stream::Internal, + Some(kind), + Some(serde_json::to_string(&object)?), + ) + .await +} diff --git a/packages/backend-rs/src/service/stream/main.rs b/packages/backend-rs/src/service/stream/main.rs new file mode 100644 index 0000000..a56bfb9 --- /dev/null +++ b/packages/backend-rs/src/service/stream/main.rs @@ -0,0 +1,87 @@ +use crate::service::stream::{publish_to_stream, Error, Stream}; + +#[macros::export] +pub enum Event { + Notification, + NewNotification, + Mention, + NewMention, + Chat, + NewChat, + NewDm, + Reply, + Renote, + Follow, + Followed, + Unfollow, + NewFollowRequest, + Page, + ReadAllNotifications, + ReadAllMentions, + ReadNotifications, + ReadAllDms, + ReadAllChats, + ReadAntenna, + ReadAllAntennaPosts, + NewAntennaPost, + ReadAllAnnouncements, + ReadAllChannelPosts, + NewChannelPost, + DriveFile, + UrlUploadFinished, + Me, + RegenerateMyToken, + Signin, + Registry, +} + +// We want to merge `kind` and `object` into a single enum +// https://github.com/napi-rs/napi-rs/issues/2036 + +#[macros::export(js_name = "publishToMainStream")] +pub async fn publish( + user_id: String, + kind: Event, + object: &serde_json::Value, +) -> Result<(), Error> { + let kind = match kind { + Event::Notification => "notification", + Event::Mention => "mention", + Event::Reply => "reply", + Event::Renote => "renote", + Event::Follow => "follow", + Event::Followed => "followed", + Event::Unfollow => "unfollow", + Event::Me => "meUpdated", + Event::Page => "pageEvent", + Event::UrlUploadFinished => "urlUploadFinished", + Event::ReadAllNotifications => "readAllNotifications", + Event::ReadNotifications => "readNotifications", + Event::NewNotification => "unreadNotification", + Event::NewMention => "unreadMention", + Event::ReadAllMentions => "readAllUnreadMentions", + Event::ReadAllDms => "readAllUnreadSpecifiedNotes", + Event::NewDm => "unreadSpecifiedNote", + Event::ReadAllChats => "readAllMessagingMessages", + Event::Chat => "messagingMessage", + Event::NewChat => "unreadMessagingMessage", + Event::ReadAllAntennaPosts => "readAllAntennas", + Event::NewAntennaPost => "unreadAntenna", + Event::ReadAllAnnouncements => "readAllAnnouncements", + Event::ReadAllChannelPosts => "readAllChannels", + Event::NewChannelPost => "unreadChannel", + Event::RegenerateMyToken => "myTokenRegenerated", + Event::Signin => "signin", + Event::Registry => "registryUpdated", + Event::DriveFile => "driveFileCreated", + Event::ReadAntenna => "readAntenna", + Event::NewFollowRequest => "receiveFollowRequest", + }; + + publish_to_stream( + &Stream::Main { user_id }, + Some(kind), + Some(serde_json::to_string(&object)?), + ) + .await +} diff --git a/packages/backend-rs/src/service/stream/moderation.rs b/packages/backend-rs/src/service/stream/moderation.rs new file mode 100644 index 0000000..3ac261f --- /dev/null +++ b/packages/backend-rs/src/service/stream/moderation.rs @@ -0,0 +1,22 @@ +use crate::service::stream::{publish_to_stream, Error, Stream}; +use serde::Serialize; + +#[derive(Serialize)] +#[serde(rename_all = "camelCase")] +#[macros::export(object)] +pub struct AbuseUserReportLike { + pub id: String, + pub target_user_id: String, + pub reporter_id: String, + pub comment: String, +} + +#[macros::export(js_name = "publishToModerationStream")] +pub async fn publish(moderator_id: String, report: &AbuseUserReportLike) -> Result<(), Error> { + publish_to_stream( + &Stream::Moderation { moderator_id }, + Some("newAbuseUserReport"), + Some(serde_json::to_string(report)?), + ) + .await +} diff --git a/packages/backend-rs/src/service/stream/note.rs b/packages/backend-rs/src/service/stream/note.rs new file mode 100644 index 0000000..d19aeda --- /dev/null +++ b/packages/backend-rs/src/service/stream/note.rs @@ -0,0 +1,43 @@ +use crate::service::stream::{publish_to_stream, Error, Stream}; +use serde_json::json; + +#[macros::export] +pub enum NoteEvent { + Delete, + React, + Unreact, + Reply, + Update, + Vote, +} + +// We want to merge `kind` and `object` into a single enum +// https://github.com/napi-rs/napi-rs/issues/2036 + +#[macros::export(js_name = "publishToNoteStream")] +pub async fn publish( + note_id: String, + kind: NoteEvent, + object: &serde_json::Value, +) -> Result<(), Error> { + let kind = match kind { + NoteEvent::Delete => "deleted", + NoteEvent::React => "reacted", + NoteEvent::Unreact => "unreacted", + NoteEvent::Reply => "replied", + NoteEvent::Update => "updated", + NoteEvent::Vote => "pollVoted", + }; + + let value = json!({ + "id": note_id.clone(), + "body": object, + }); + + publish_to_stream( + &Stream::Note { note_id }, + Some(kind), + Some(serde_json::to_string(&value)?), + ) + .await +} diff --git a/packages/backend-rs/src/service/stream/note_edit.rs b/packages/backend-rs/src/service/stream/note_edit.rs new file mode 100644 index 0000000..3b54a35 --- /dev/null +++ b/packages/backend-rs/src/service/stream/note_edit.rs @@ -0,0 +1,18 @@ +use crate::{ + model::entity::note, + service::stream::{publish_to_stream, Error, Stream}, +}; + +// for napi export +// https://github.com/napi-rs/napi-rs/issues/2060 +type Note = note::Model; + +#[macros::export(js_name = "publishToNoteUpdatesStream")] +pub async fn publish(note: &Note) -> Result<(), Error> { + publish_to_stream( + &Stream::NoteEdit, + Some("updated"), + Some(serde_json::to_string(note)?), + ) + .await +} diff --git a/packages/backend-rs/src/service/stream/notes.rs b/packages/backend-rs/src/service/stream/notes.rs new file mode 100644 index 0000000..8832bc0 --- /dev/null +++ b/packages/backend-rs/src/service/stream/notes.rs @@ -0,0 +1,13 @@ +use crate::{ + model::entity::note, + service::stream::{publish_to_stream, Error, Stream}, +}; + +// for napi export +// https://github.com/napi-rs/napi-rs/issues/2060 +type Note = note::Model; + +#[macros::export(js_name = "publishToNotesStream")] +pub async fn publish(note: &Note) -> Result<(), Error> { + publish_to_stream(&Stream::Notes, None, Some(serde_json::to_string(note)?)).await +} diff --git a/packages/backend-rs/src/service/stream/user.rs b/packages/backend-rs/src/service/stream/user.rs new file mode 100644 index 0000000..fa18456 --- /dev/null +++ b/packages/backend-rs/src/service/stream/user.rs @@ -0,0 +1,41 @@ +use crate::service::stream::{publish_to_stream, Error, Stream}; + +#[macros::export] +pub enum UserEvent { + Disconnect, + FollowChannel, + UnfollowChannel, + UpdateProfile, + Mute, + Unmute, + Follow, + Unfollow, +} + +// We want to merge `kind` and `object` into a single enum +// https://github.com/napi-rs/napi-rs/issues/2036 + +#[macros::export(js_name = "publishToUserStream")] +pub async fn publish( + user_id: String, + kind: UserEvent, + object: &serde_json::Value, +) -> Result<(), Error> { + let kind = match kind { + UserEvent::Disconnect => "terminate", + UserEvent::FollowChannel => "followChannel", + UserEvent::UnfollowChannel => "unfollowChannel", + UserEvent::UpdateProfile => "updateUserProfile", + UserEvent::Mute => "mute", + UserEvent::Unmute => "unmute", + UserEvent::Follow => "follow", + UserEvent::Unfollow => "unfollow", + }; + + publish_to_stream( + &Stream::User { user_id }, + Some(kind), + Some(serde_json::to_string(&object)?), + ) + .await +} diff --git a/packages/backend-rs/src/util/error_chain.rs b/packages/backend-rs/src/util/error_chain.rs new file mode 100644 index 0000000..59af604 --- /dev/null +++ b/packages/backend-rs/src/util/error_chain.rs @@ -0,0 +1,82 @@ +//! Error formatter used until backtracing methods are standarized + +use std::error::Error; + +/// Prettifies [`Error`] message (mainly for napi export) +pub fn format_error(mut error: &dyn Error) -> String { + let mut to_return = String::new(); + + to_return.push_str(&format!( + concat!(" raw: {0:?}", "\n", " message: {0}"), + error, + )); + + while let Some(source) = error.source() { + to_return.push('\n'); + to_return.push_str(&format!("caused by: {}", source)); + error = source; + } + + to_return +} + +#[cfg(test)] +mod unit_test { + use pretty_assertions::assert_eq; + + #[test] + fn format_error() { + #[derive(thiserror::Error, Debug)] + #[error("inner error 1")] + struct InnerError1; + + #[derive(thiserror::Error, Debug)] + #[error("unexpected string '{0}'")] + struct InnerError2(String); + + #[macros::errors] + enum ErrorVariants { + #[error("error 1 occured")] + Error1(#[from] InnerError1), + #[error("error 2 occured")] + Error2(#[from] InnerError2), + } + + fn causes_inner_error_1() -> Result<(), InnerError1> { + Err(InnerError1) + } + fn causes_inner_error_2() -> Result<(), InnerError2> { + Err(InnerError2("foo".to_owned())) + } + + fn causes_error_1() -> Result<(), ErrorVariants> { + causes_inner_error_1()?; + Ok(()) + } + fn causes_error_2() -> Result<(), ErrorVariants> { + causes_inner_error_2()?; + Ok(()) + } + + let error_1 = causes_error_1().unwrap_err(); + let error_2 = causes_error_2().unwrap_err(); + + let error_message_1 = super::format_error(&error_1); + let error_message_2 = super::format_error(&error_2); + + // We can't assume consistency in `Debug` output, so the output texts + // may need to be updated in the future, and we shouldn't make this kind + // of assumption in the actual program. + let expected_message_1 = " + raw: Error1(InnerError1) + message: error 1 occured +caused by: inner error 1"; + let expected_message_2 = r#" + raw: Error2(InnerError2("foo")) + message: error 2 occured +caused by: unexpected string 'foo'"#; + + assert_eq!(error_message_1, expected_message_1[1..]); + assert_eq!(error_message_2, expected_message_2[1..]); + } +} diff --git a/packages/backend-rs/src/util/http_client.rs b/packages/backend-rs/src/util/http_client.rs new file mode 100644 index 0000000..0347334 --- /dev/null +++ b/packages/backend-rs/src/util/http_client.rs @@ -0,0 +1,52 @@ +//! Shared [isahc] HTTP client + +use crate::config::CONFIG; +use isahc::{config::*, HttpClient}; +use once_cell::sync::OnceCell; +use std::time::Duration; + +#[macros::errors] +pub enum Error { + #[error("HTTP request failed")] + Isahc(#[from] isahc::Error), + #[error("invalid URL")] + UrlParse(#[from] isahc::http::uri::InvalidUri), +} + +static CLIENT: OnceCell = OnceCell::new(); + +/// Returns an [HttpClient] that takes the proxy configuration into account. +/// +/// # Example +/// ```no_run +/// # use backend_rs::util::http_client::client; +/// use isahc::AsyncReadResponseExt; +/// +/// # async fn f() -> Result<(), Box> { +/// let mut response = client()?.get_async("https://example.com/").await?; +/// +/// if response.status().is_success() { +/// println!("{}", response.text().await?); +/// } +/// # Ok(()) +/// # } +/// ``` +pub fn client() -> Result { + CLIENT + .get_or_try_init(|| { + let mut builder = HttpClient::builder() + .timeout(Duration::from_secs(10)) + .default_header("user-agent", &CONFIG.user_agent) + .dns_cache(DnsCache::Timeout(Duration::from_secs(60 * 60))); + + if let Some(proxy_url) = &CONFIG.proxy { + builder = builder.proxy(Some(proxy_url.parse()?)); + if let Some(proxy_bypass_hosts) = &CONFIG.proxy_bypass_hosts { + builder = builder.proxy_blacklist(proxy_bypass_hosts); + } + } + + Ok(builder.build()?) + }) + .cloned() +} diff --git a/packages/backend-rs/src/util/id.rs b/packages/backend-rs/src/util/id.rs new file mode 100644 index 0000000..4cce589 --- /dev/null +++ b/packages/backend-rs/src/util/id.rs @@ -0,0 +1,120 @@ +//! ID generation utility based on [cuid2] + +use crate::config::CONFIG; +use basen::BASE36; +use chrono::{DateTime, NaiveDateTime, Utc}; +use once_cell::sync::OnceCell; +use std::cmp; + +static FINGERPRINT: OnceCell = OnceCell::new(); +static GENERATOR: OnceCell = OnceCell::new(); + +const TIME_2000: i64 = 946_684_800_000; +const TIMESTAMP_LENGTH: u8 = 8; + +/// Initializes Cuid2 generator. +fn init_id_generator(length: u8, fingerprint: &str) { + FINGERPRINT.get_or_init(move || format!("{}{}", fingerprint, cuid2::create_id())); + GENERATOR.get_or_init(move || { + cuid2::CuidConstructor::new() + // length to pass shoule be greater than or equal to 8. + .with_length(cmp::max(length - TIMESTAMP_LENGTH, 8).into()) + .with_fingerprinter(|| FINGERPRINT.get().unwrap().clone()) + }); +} + +/// Returns Cuid2 with the length specified by [init_id_generator]. +/// It automatically calls [init_id_generator], if the generator has not been initialized. +fn create_id(datetime: &NaiveDateTime) -> String { + if GENERATOR.get().is_none() { + let length = match CONFIG.cuid.as_ref() { + Some(cuid) => cuid.length.unwrap_or(16).clamp(16, 24), + None => 16, + }; + let fingerprint = match CONFIG.cuid.as_ref() { + Some(cuid) => cuid.fingerprint.as_deref().unwrap_or_default(), + None => "", + }; + init_id_generator(length, fingerprint); + } + let date_num = cmp::max(0, datetime.and_utc().timestamp_millis() - TIME_2000) as u64; + format!( + "{:0>8}{}", + BASE36.encode_var_len(&date_num), + GENERATOR.get().unwrap().create_id() + ) +} + +#[derive(thiserror::Error, Debug)] +#[doc = "Error type to indicate invalid Firefish ID"] +#[error("'{id}' is not a valid Firefish ID")] +pub struct InvalidIdError { + id: String, +} + +#[macros::export] +pub fn get_timestamp(id: &str) -> Result { + let n: Option = BASE36.decode_var_len(&id[0..8]); + if let Some(n) = n { + Ok(n as i64 + TIME_2000) + } else { + Err(InvalidIdError { id: id.to_owned() }) + } +} + +/// The generated ID results in the form of `[8 chars timestamp] + [cuid2]`. +/// The minimum and maximum lengths are 16 and 24, respectively. +/// With the length of 16, namely 8 for cuid2, roughly 1427399 IDs are needed +/// in the same millisecond to reach 50% chance of collision. +/// +/// Ref: +#[macros::export] +pub fn gen_id() -> String { + create_id(&Utc::now().naive_utc()) +} + +/// Generate an ID using a specific datetime +#[macros::export] +pub fn gen_id_at(date: DateTime) -> String { + create_id(&date.naive_utc()) +} + +#[cfg(test)] +mod unit_test { + use super::{gen_id, gen_id_at, get_timestamp}; + use chrono::{Duration, Utc}; + use pretty_assertions::{assert_eq, assert_ne}; + use std::thread; + + #[test] + fn create_and_decode_id() { + let now = Utc::now(); + assert_eq!(gen_id().len(), 16); + assert_ne!(gen_id_at(now), gen_id_at(now)); + assert_ne!(gen_id(), gen_id()); + + let id1 = thread::spawn(move || gen_id_at(now)); + let id2 = thread::spawn(move || gen_id_at(now)); + assert_ne!(id1.join().unwrap(), id2.join().unwrap()); + + let test_id = gen_id_at(now); + let timestamp = get_timestamp(&test_id).unwrap(); + assert_eq!(now.timestamp_millis(), timestamp); + + let now_id = gen_id_at(now); + let old_id = gen_id_at(now - Duration::milliseconds(1)); + let future_id = gen_id_at(now + Duration::milliseconds(1)); + assert!(old_id < now_id); + assert!(now_id < future_id); + } + + #[test] + fn get_timestamp_from_id() { + assert_eq!(get_timestamp("9e112pilk1").unwrap(), 1682499501741); + assert_eq!(get_timestamp("9e183znmxa").unwrap(), 1682511318850); + assert_eq!(get_timestamp("9e9srqr79p").unwrap(), 1683029748787); + assert_eq!(get_timestamp("9tr87i03euwphnsw").unwrap(), 1716735338211); + assert_eq!(get_timestamp("9s9wn2e9cio09do1").unwrap(), 1713511201761); + assert_eq!(get_timestamp("9tr7slj2tt2ml1wp").unwrap(), 1716734642942); + } +} diff --git a/packages/backend-rs/src/util/mod.rs b/packages/backend-rs/src/util/mod.rs new file mode 100644 index 0000000..3df3383 --- /dev/null +++ b/packages/backend-rs/src/util/mod.rs @@ -0,0 +1,6 @@ +//! Basic utilities such as ID generator and HTTP client + +pub mod error_chain; +pub mod http_client; +pub mod id; +pub mod random; diff --git a/packages/backend-rs/src/util/random.rs b/packages/backend-rs/src/util/random.rs new file mode 100644 index 0000000..0c35657 --- /dev/null +++ b/packages/backend-rs/src/util/random.rs @@ -0,0 +1,37 @@ +//! Secure random string generator + +use rand::{distributions::Alphanumeric, thread_rng, Rng}; + +/// Generates a random string based on [thread_rng] and [Alphanumeric]. +#[macros::export] +pub fn generate_secure_random_string(length: u16) -> String { + thread_rng() + .sample_iter(Alphanumeric) + .take(length.into()) + .map(char::from) + .collect() +} + +#[macros::export] +pub fn generate_user_token() -> String { + generate_secure_random_string(16) +} + +#[cfg(test)] +mod unit_test { + use super::generate_secure_random_string; + use pretty_assertions::{assert_eq, assert_ne}; + use std::thread; + + #[test] + fn generate_unique_strings() { + assert_eq!(generate_secure_random_string(16).len(), 16); + assert_ne!( + generate_secure_random_string(16), + generate_secure_random_string(16) + ); + let s1 = thread::spawn(|| generate_secure_random_string(16)); + let s2 = thread::spawn(|| generate_secure_random_string(16)); + assert_ne!(s1.join().unwrap(), s2.join().unwrap()); + } +} diff --git a/packages/backend/.idea/.gitignore b/packages/backend/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/packages/backend/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/packages/backend/.vscode/settings.json b/packages/backend/.vscode/settings.json new file mode 100644 index 0000000..9fb3b29 --- /dev/null +++ b/packages/backend/.vscode/settings.json @@ -0,0 +1,10 @@ +{ + "typescript.tsdk": "node_modules\\typescript\\lib", + "path-intellisense.mappings": { + "@": "${workspaceRoot}/packages/backend/src/" + }, + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.fixAll": true + } +} diff --git a/packages/backend/assets/LICENSE b/packages/backend/assets/LICENSE new file mode 100644 index 0000000..cb57aef --- /dev/null +++ b/packages/backend/assets/LICENSE @@ -0,0 +1,13 @@ +Copyright 2023 Firefish + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/packages/backend/assets/api-doc.png b/packages/backend/assets/api-doc.png new file mode 100644 index 0000000000000000000000000000000000000000..c5594fff978a906506438fdd27804f5f20fa9275 GIT binary patch literal 73089 zcmYg%1ys~+^Y#|7beGi9h_q5tOD`RQNT)Q?T}y{_s&t7W(%mXjN_Tg6#}c3K^S(a+ zZ_n?X-E(%&J@-BL%v>|q%tooJ%Hv`^!U6yQxC#gvO#lG$=OfSzivH)#nzFv` zaWuHv_j5xRA-(51D&CmmvFE;0^KIH;hhI*sF6OQ1G_?PDog1J1K(z<-xt5>a)FU08 z#}wNhP`7OV{Ze}|_|n+>X6q6^;)nc#U)K^z$L&)f*<#Y&Id0qXGB+?sU0!yv^Nz{i7J%;Mgi7iddKKFeqQsCLzVgwGSDm*=#)2wjW)FkJG-v}XjGgxmw`fN(#h zBWBdj+YVMO;9x+|=w!B-n7m&oA*ezU1V&!fpWS8$s`$M)D()cn%2SkRdB~Wv|7XGT zy_5c@=$FW+y#jz63<2c+W_hI~fT-?aebI!AkPd9TR;0aJOdGgxA{K?;QOAtwVaH+` zXc=JtF7OA(PZp}PX>*76nKwuez<*C0co_At-76&Aok{{ z*hk@@$)G^N=w0Zz({c>x^+z@iVs}eBXXD3brcH3BqmgRI5qduE!)8Rxu-_LP->S;O zN-`|_r_b&mCSGC#+J7E@`DfSiIjycYSUUJP#Y;u~dLf1tfdTz&z=1+d081DsNRm%g z9%va5#DrI0235a5X2tLKz>?~F;SafJde2mD{|wSaNt@W03^-AkRL$%}Sm?v+z*-`J zf0o|aUY{kGZZcP1g9)rG=FG$qe<$c_w%Ml-%0ltGDFy4%1l$hO6kwZU_reFF017Z} zX@>pA9J)MeLZ|>jMoOIMH2XDKSVg~^%T>FPei5tjJ?DQHZV^6^N za6b>kQdeV&qW@C7{Y5j71dave1Py`U|Cky!z)`e9m{{S0axlCqp3Zl5#uSO}JfAC} zyax^}TMroO=K_tX8TfzNpPux{qE-5au-=Ce+C0*Indp$Zz*ccdovKt7I}oce%;`3A>udC|E~o@rJhdUF5uTu%MR+d^@C@j`1LoAwlx} zD(l6IyL9&r_t>aRR8BG&F8$r+P7p@WcehucGiBMsy*RUjgZxJ)J}%c2IXJuc=?V{C z4mad1LAI%L=oB^R74B>q5X%wRGVZ2{Bqb(Y;oy8r?n@my(Eyk;IxO=$KIr#7W^0Xv zey~41d>1`XN?=#d^`J+mDuel`U4o)QRmk=qjqr;Gpb=myBEYlXFJ@}E6M1C$+ADC0 z7$!GZADJ>9jodr39!)1%D4CIAmHkHhkDZf!i=f!xZu=b$2k;G4RWmQ&8DL^=K24A@KA^a%_2`m&|~%RhKK|LcC-UCwx;o&54<4b@W63 zql>54hM<#x4Q*i0$64STNc-uPeddwL1L`BeQmB6cb7{fr`O@8>SM`OVFuP~f93x~V z$Wq5bGGG(h()vFqIo~@HZvtVOR>USSz0+~fC+c0bsqeCb5I^~`$Hc>y6KSbU|Lsix z;d{J8H!>40yj6I}jI%E~)HEixqqEGIZv9(3pa60<$08aJ>O{sQ9l5q|-i2?HyBNK0 zOX5YZLlZy@merjm|Ja(b#rVf+$M?^-92Z)i2(iX%N$&|=<4WI@c^>wPzoC!u44H=X zZ5q1v!P_hapBPmg^Lm0(7JdB$@I>K{A*FU8s+zhJ@b@~j(#vu%uvfMUQX6n)@C#bK ztJ;f31$&6VL*M(K?)3Mze|R4BWfq7I)T{GR*7X!jQFf)SPQY+h9!+27C>&v4Aimq3 z37∨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

||`$Nmx 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

q2J2vcYNt`gFBo|V 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¬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

g&z&mt4SGt;Q(EmR}hsNC0y9h=G0 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 NDa&ifRmoU}{|~xPiZcKJ literal 0 HcmV?d00001 diff --git a/packages/backend/assets/badges/error.webp b/packages/backend/assets/badges/error.webp new file mode 100644 index 0000000000000000000000000000000000000000..ccdf7ebcbbbbe2b0b48e6fd976a0224a8e3a6f5c GIT binary patch literal 41872 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

=E*=Nk%*3iTqM){u0&#{pEIf|6v9uh zpz=tA%PL5dHgP}k+VHzxMaP2~{`P5@YOJ|bC&T@T=*S=gkXFt-nlTsUc~R4#G?bwP zZaX{UM`iq4KV_15M$eA^jtdi&1S3lwvm()y=I2=k#gAi^SviCN0{&KDA z-CaO~0t&bdfr`$&`6w~9Obo2Az`S^b}*tbLKzwK+ev0<5v$OAsYgLSk7#E(7U>G>mNBC19kk42-e2d-jA&BF2$Tw zPv%aCRCkw^l7T}xwBA}Fh7c2{0m|#3x!$C)nkFD?--eQZQ%XbSWGWwyRtz?Jz2Ij| zS7k#b=K_=EU=+zJ`bce{b_#p;hbODDiMCas$R{Ze$ncHtE+-z|jRC`=m8{J0Coy@MyCA zFq)_7D4W6h?OhQ}zb%uy{92awVx(Svt}r9}D2)-m6^7^7b%FAPdbGrLkvYm*5Wbia zVvX=C1}MPQ!jS;ua6>KP1{OT%?v4R~(pBM}yhJ4I-&zZC)1{7Z*hZNW2QRV1Y~Nd$ znr_ZJ;S`Cn1dvr_Ea)70ZT&2rOWiq8w1!e^)hvOe$ZqaI@c7U zP;p1lc)B-DUSw(e*ypjI4mssu+Lc<9Mv`YAm4ncC0_t|YVxm(4^Cf{U4?KUzhp#Nt zeSK7vBbH2iCrn3COUxXKnJNTTkul3*JI)xb$EG|FaNtN#|83$sV;?1Y?Y!}bafmzM zB$7b|j_0bgx?>p8tTUjhadnTK5d6Zaaf%v7PD&N~p!?f449~k`_>`meM`CK5c4xZ2xxN$qp0=hIwv`6p?)S zj(hU9o*90p=L0z;|7|hPhF=wd4ZipDIh>_k)x}z9nNFs~efnYHMdIW=Q6#yg-XXLR z)htnnsfl$`+JC<+l)>yEC6cgNK~CU7yjZQ|FWkP7Ko_ZqVIp~wwS^$AE}c-%?&vCk z3n4uOaXW5l{GM=|(<_^2T@B}TU!HigZTsF+YW$sc*6nQlGkMxD+}PivZ>TmzvJ}TG z+z2Hnw*#q?N*{c-ep{8Tr6rsK= zFRB5dPoO6dDI-zfLY@rNl1ypF+Wah~%F>3gK*x7-JxxGshFx%vzN+3z05U+zw0hXBYueKy z@K*l}rrJ@-r{# zcfUaYgvkMS^iUbNpegJhM>{*bEB}5qSv=JfDn`^`lR?mm8WC5KpM5p?8BDog8(PJa zb+Ubj@>Jop2V-{|55`85FVhuF?O6;PpnK;+wGc&T9a0ki{4t4|;$iXLptW>^pe~S4lBI#oCM%>WF5o zVt`VXPN$ImM2kJW_1pl2?EyvtmuOr)h5_9uZ9M{YS-Iz(j6kTGNcESu3|t@uB_JEg zog0R^J18VEzA!phJ#X<$Na=4^aCLqAB=tF&0!WhAWPd(Du$Q5G1t6r?q5}fe;}c&85|- zHRH7oM8zHmMzEiHrHx3j`OWDs@P{Q}q>EY*ocw7q6=g4!6gtardD3p^Wkfbub4-6R zYGQr3l|$FTIS%sZYP^1-56c3XPV}Tx6E!xz;MZ?$ps55ik4@&SA-p{P`Sf_k8E+4Z5A=fBiiU zZGUBgBrNA@I5K7N9t)u4IHjo8%~h;ioUcSTj!g;Al6EyjiQa!Kz`yf`Jqd|9(sJhQ zjMzsaUVowWMNwkKWwQ3gBCnLW;~V!jtTlx_*qiwzkP@Dqklg>b$8LE$6bm}nU287p z_lA+qWd@Lncq=556&S;1^~JCVb;8$^>7!{Qb8f%HV~3gQ52N&47EJyEIbrL_3c=!%C>_qG!e98 zIx)?$1wDnc`vSax^<1!wCe90q?^a5#XeTZ4{*5X{F7U9f6DNy|-F(ScR=a@c>V?fd z2#n%9BbBWAz_Qp{rZ7+p7f5>z*I!E{w3h@aH~BnP*H@x#iGi!*M+^VFB3+) zr}sgHM-whE(ZgcUo}z@__qD5e#k)*tZg@1^`uozAmQ^fK6RCeo9c#EWey4&1Nz)wj z$ew-~qNDkNn=-#9+L01E|L`QA6_X`;*Hh|7m}I(=1s{5 z`^xN+D_Brs#E%GH-&NTeB5nU5h4Yt%al_0R z6&>mJHaQe2$;s2x(%~gC7J$p(=@l3TKMi?w35{vRTdvaVh(xRxNvhl!Wq@YHHYJg? z=Pkf?yl=U8=FYQ(mNyye!XoW*mh}T*eij%(KcCw$aC5L3ufdoarkq@l`f2KmmoJ)K z45A6k;Rg;&F`O*%2WPqCBmNxz{x^UB{j*{EPyMH5i?={z3^+zBvsl%4B#G>i4xl3m z)ZkOfGDHwzEY4Y6XK_gx-vWW!=JfE3&# zu76e}0)E{7#ozn${@dxv5i#Gwbbp1cxN*NXT9vS_af$SsNliYDPvL($&YK%^CDJg~ z2Hj1a(U&zhvDU9MO20Q{dGM+E9cy}svc~AyJxia^)&VOKo?!VO>&B|=s(0Dlus^E` z6tkra4r^aE%n*xyJ|#3>H2q5%%6h$G$SzggN#Ek9zml!Gk~qCbD`Qv3{58Xs-UERcv$$w3imxA#&V7)`qnh{=9}6C zT=^d$Dj2y#-XfK%EQ@)Dx0Up>^viX!?G|n#i47Vf91*OoLk9o9aoF<>lq|F7wm|z0 z_qX{`m~*F&$nHlRkP7!1xGJf51d7?Y6~7~QS{vwncsE@v&W0UKCBOhE{@#R(Z9lGtN6P|8;;PbgBviAV2?Y#C9OA9ve-M$!V_~KYqnt4kfR3jMG=+NTTG5V zcbTF5dqu#hpEa8H0tr9+q*Q{7K;OTt2n@Ze08;@_H!j)=PGvzt1UD3AFKh3dpaidF z*!ESLPs?2Mn%S>cK{N*kXins^CUv#XUi-zZebMhmbL_4h!*pR__3a$1r~gqkQI1Z?W_+bE%gApkeCS|z7Ej>XI*-%nh}KQMeH#sS}dT;EXlzq_gVq}%dpmJ^z$F6vdVD`%2V~| zJG?i2WFOcu#(F-lyA0C;dx(ZhvoPnavEeG>;^1Nb<~Ej zvpts{z1Xi~LqalneLpS?8S3DOA|Z?PMSUZ`WYqJGpe{9HZvWGd#_1cpjh|Rm3E|@V za|EM>J0>eC&0-cZzT+;m`7aJO;B(e3ldP@(sq89tDN_1DSEYqq;luxWUy-~vyux_B>(!1oXW^ck{|c*(!PvX8;eEWGzSZ}d_tpRf zwJG3CZwUQ)W2capQK*RGxlY%}b$tK;002QwO-4W(0000000000{{R60000yK00Kcw zP)Gv<0004?BuSFoNb>)GS`P_;05UR??4BheCLsU&|6ePycfJCCd5-tb{!s=rO%V>8 zrUa)SVCx+3mMe!%Qk!Uy`P>&{gHVQ#lAuM(a6`}!Yl*Qx%5X;p{Xr4#NP-TH6}Ts8 z5>=&9=5tdopJF=N=WV&c1Da$$?$adZb5~fKgS^6gxF>W;1*e~(N9w?(WMy8a64zG# zI+f6ayiO^4aQY&p=$TUVOeuP%6g^Xlo_Q{BvVU5p7A;c?`^U1(qa50$9`PE>*FR%tlpKVm8#IRj5d_D99p674}a(nwJVJ!sewnn&lhi_or7%Qr~G2 zuB8gSV*jXzHKY&)v4j+&B6_7Hy;72f<=dpZ6p)dew=0<|cQ!1UDED@3oFX^t+TqKx zge>^JjMwsD9a;6I+!|b4(^T4nCeL$!jtpDRxK_l8~{4B#&iQdD7MQ5GnqS)a=HWY@@rk#rcuf z_fL%JeHRp@d!~GlYLUB5IkKJ?l)zZt)od5pRrJE1<{c*)ugjSs<$==B! zd*YMa*g#8&kQzBSIp&28j~-8iM%P>XH&cF2piQmNKDeRxO9Cjqv z&ANZuXZI9f|LmXr^OE%B>Rdc#e>`M|(65v;-b6Z-B0Q2ka!i%Wx{47|Bz0()V(3UJyJF}jo7g-KkLe{C7 zSy1*bL6RQikk!PPadkO_tadOQE)KG493+uDa$Z-GAnU&L)|+zg2f2KbLu3B?A^=uU zI3OGs003}i0G$CU00962K9NA2Nu{HvBqwv*c)$_~Vs3@AS#k3cTiXNuH)Gs?=g-pr zb^X@qi1AqV`lm8}m~)^17u9F#fBOF6U#;CQJjDLodct~1{h@@gdcp-v#=o-xXm*q0OdgO;iKP z=E)1S7b^uJm&@!zP6}idr=N1`n0Fwxi6fE|hOexZf#R{Irg$4~&Byr}!OHSW);@lO zpuh8&xL?REe|1WF&B4<(ea%IETfJ7!Qe?ZQW)%emUmq_j<|BAgOvR(_6IWPQ)J+`_ zXz>#gKjYzPMjdUkyxi8Sq-S-MFl|re%}q+O$mJVzmyh_=7%PjZLTROcNFPaXd}}Va z;UIjt1pj3=BjWYU+m;(%@(+5iu@AY3OvO4(WZqBru7Gi7hoMqFhEb?cT9Jo!xv-;4 zmNlN-e(|@_^{9mNsofwjN^@m|OaXlz*}?&SQs7}Y^&g(SdGQ8$joYJ3K{nMB`XRu6 z=c(iO!ZpWb$$i#9#I#jgiqc#Va%UCew@DrSsj9mIv+BZB)Bt;AE~AL)F`amSs1omm6+LEs^M;OD7zSqao^luz@bQ}}g0V3)evANrTn1Fsd#G2Q;c zdM|qG8Y4S+Rt4OhJWufZvBQ27y6+vwvG3)rgp1iZtC?u;KW*@$xqy$kZexRZcHO1$ zd#~akH<~b>`#z+t0!~i7PxEkjCdixU6i>I@{QqX?4(CSr)`N0FgZMOa5{?~@)j?~8 zv*C=j0?|pF{nKP77h8|ZsQm?!%lOndGY=vvlUEYV#&bTM>7V9qvSnAfU=Z2TmnB+) ziW_||KsrAd3frE)tKYo!HO$jbhRsam6o1K$F51@-d#0FolQT5l)>#wt@|ZuUV_b*m z2M_@M`<%c400011!>@VeTjMG*o=U<0UAS~YO2p3FR*kXyS)eP? zad>M~v({FvHmc|GMe=wBBA{T6Ocnq*`_>tM*(Dto-i)lTZRl~)d@3xQfFFHb!#k4i z5giE;rHmnzDv#!aEKsTd1*!dSb9a9Bru^3WY8Gz}HK`tf(RH-!F4pB09G~#r1-IA|X7a z-I6ZhrT{O^Ooj%_KcY~v$f&qC%GG|n$#g0k#)%5!@89yHAAEUKG}E<|Fb-OlV%)Nx zL0qL59=FJ|9wxNvt<%dt_1DpfNH?SXSQN0jbO2_@{hZ1G!)CmAhe_oZ_5lxhY8iz8 z*~QUd07_<~Vv?tGFv3>_2{9pfTe^&7r};QYEXBUBRqbeGF3SW*Y=gyz?g1^0lgRNY zELP7<#MQG_>DED^vW5pU0M?9xCMZkS%kqU)#sJ_@2GY4WTbMik>SxG*4DQ9?ZDB*G z-}Y;$mP>v7H9SWnMZc?n(>s)z&1qk+duBLLd+U0q70n1TfMNpG@a`Ow920+4Q1qhM z06-Km4nS=|86*9;=-)Xx&6=_@Qmmrb_O8PxVCH>(MLQTTM0ZMQ6||AH!5h96J0Gk8>y;m&fQdbsXN4D{z?axfm$W^5*eI^wLfROo{Zj3yQNnzjs3! zM4e-@ouZY@0_8DlvRpaoMywUKfv8d^CFXc<=pid)_X$Y#fZG9F5Mv269)GgsLQj1q zrwOH-#pv4DtCXBiGp*R^v>O0*GcHSr=fvBxKLl8l;8iZfQAR!wPqA7A&0jhx28a5P ze|$!)24qUXMVh5P{Vc$V4X4*r6~T>^3oaMEUc|EUo;*uGKwYh_|FD4?L$*(xc(V`!_YqeF6HuGJ+HvWeD zo8-G57c9QckEGht`VRzE&JDauHPa64WrEs;iIK6-!uLTU41C^ zCLRBln4Z}>e3Um=$EMHAG_CJs8dF2LuEjhz08TXAOz~f|DsA_F5JxKs_5Od=Wg7Z^ zR7-3_i>C0Hx7!k(=~EgDMY?yZY^>G$%?|tK)UiJX(j4taH82a(WozNXK4NH^9eD=o zP#s0Zrq=5v_Z{?XTyOhCziM;)l)Grz0WE@%OcwREAGW~kRY6mL9KyR-M^Mf0x zT8khxqhietTE1xpmMTu23ksa^9Sq(v&PGCxsqy*VsYm0LA()s-&>`Zde;B6Xik9}l zfB(3CJB@;2;PBw{5<9DdAcFt)5G*LqjN++;&;W_9*loH)j+$8fEPzNkkagOJ;oA=v zePWk;*yR%p(Y!I9G&sg+;DHg?qp9O?{-9I0<6+8!UDa}@vo8@A0x$Azkb*MpUNV;^ z+)vSDr*i+EIZe=5QK(I&>B*)hCZVpW!#josF*05Zd7*OEdgT8mC4QOjAJJ#l3HDmX zSBdjDT58SU-$B&|!kIP0sb={>NyVKX-CXoD%B1`o(g(OBJOx5hhA(9&^hsarc=pN# zv+IlW50-UqQ8jIauaMAm$OiGJ%?Ru;lhRPXZbyd5^p?*sYp=$flnUy`d%Cwtx?9M& z+7s%J6fN#GFf`#c@;6o22_FHZceQ@+h|2p_^^f~9uRY|n#=r49h53HeJa6f zWxN{?zK25o>-_U{A6-sE61#B;C>zc@2zahiSbPgp;NW=U3Im&6fx%tiOpm`AP-AaZ7WCt^0on`6T9hKGWVm)4ntd*BF1$r@@br zPD~w7zmq?dCyh=GQe2cVKI3`2amdeEb-EX&zQpFO60s;kePl2<^MF@v`b#Q*GVjh7 z(1Ane20ey2-otq5a^*ArDcF#7Yh{;}moe}4n5rRvWMAy!kU=^%!I>8J%k{dG*Y0|m zMxx2nJIZ|lq{}*7-mKD}lJ>QOV2GYLZ~zIaB1e5z9@vVq>4tZcIx+k^z)Z4o zjXl#ZB$=35jyj6u!5yY`zqK_78bIz)T&itW9JnN6kk4m6UaTb{B4E1K@7csL$fc3T z5j#!@Zmcv)ha_;q=C@d?1qIxv!LH5bu7Y}LC{NX{(;&|jWD|+&Yst)#x$T6wKmeM6 zqp;W{_vGIrXXKJXqgyBYTliejldDYPm*Jr*l>neMFB%kuvZA5-t6h1tp5kP$3pafZ zGUyy+S~)5a{mh_Mo(e^Ia7FfvG)JHP?J}g2^gQ{WNToGa?efGD=Wcp&QSGy zwB>1VxUOP(^~RCj$=WGpV2u?!*s~)5F6ONER&f?unuL8)cF)JwY#IA>JVn=9A0A_> zo+aIz9v)V8GWGWpZ6d4j6L+gOxKi6g^es=>=L7fv!FbWCU7*IH=hP;@rwg}Y^eo-t zN67qnf3Ge^hKK}YoXsO3=NaINH0`haEWED={@d?c=Oj%FJ*{v$hbg>?c!!VbDd#9l z@p)^rc5^)qyg<#$`FSuhg?`yFVrbI>cViEK>&cq1F}7SGhOi*g3vgLa9;A92{r*y; zMCK394gV#^w?!)))9ktsq&jpyQ9zb)(VmB(8n3DP+KTa>4XF>jcT;Vt$tth)p(B8Cq0tSJESA*aYQ=;sgN z$>znV7|r}N+mMXWD>vYHFrwU8UY_ix6{rlya46Po;B09+wz=XPhv;0h{MtL5{q3ZK zlXFy8kHo4YJ*^;?+ON3udgk~u?OPB-;m9$(i<9!$&@KKir^7B2si2Q~^(l`?(I`W^ zi_zVj+wy%XqW(FcU9Wcelx_^aHKJtyR7tzUL$_4(Y+Ek@pn||Y!O{c#RQzF=2QL9g z%6&cV6lvke_=WqIkrf1-t$v#yxuB7MeO&RSvAC=Z+a2x~)F^+6_WQ;dHg`+^dL=y> zAK!7`zyfp*5dgM{;1nh|-7jhHjF@Q}q)Gv}SLBN$lJ-kIxk}B2oI;wpT&XA?8Oaxy!#met zne!gx+*5b?0+?G(v(@)U&P0I8DP8T5kb@Mq>geg1as*JH{oT-PYp-OV`XXsPJy#iM zs^g*i?eKp*OAZ8bPzO$}f6K!2*#I)Kv2(*Bcnm$m-587GU*^no1I203tQ%hACq;yz z1Y_ALEXUrozPn!9{ap8p4RL1y=FD8U=nx18PZDQ?= zQmG~#TkM7aXkkVhg`6gFW`i9OAuPs?lHt89GtYwn!lO5vIIMLhT{w^_1OUm1u#Ya; zB5BQv2Q=ejfoKAiL)xyxw{k9@7wx({TN(GbfC=T6ZiK~I1G5KiM4@hUW+t{Nyb|ZD zVKLK8Tx!mpl5pigm=>)(Xd#L7tpST7blrz}RUTJYGv@h&8^nGrKX z>fMWxoC)zMvk#WaQn=cgEJpmmV=M$#<*P*K9 z4aWhV=SvNTgy-F8hihIAXaO2x;Q(YxNr%VQ-K4Uh8 zz@1%D;0C-t8}8@EAn%xq(|yE z>@<#9*N&^gyX#ti6+DVh+5z-LS1X&1Dxrp*et$l~FRZbOY((ZXn+dtPFl@8+@QGsF zVsDsW-(xay@f&6Bf~%N$qT568qYX3aKujMItm{NFEGw}5eg43da6h|=QdzX360kqt zzOc`>ZG|lno_O;~Tx@-fw-limoOq1vzG@@OWWh;M8qQ|KFSD~cT8l98YvKxPJ21Z% zJT4JZz(N|=cSzb?aYDQHZ$ExaPe=J$TJotClaYyAVqfvI5gH>+2WX~mriOV2f5a6l zp*+N1E-QsU>2!O$Y=|o%L9d;rB8Z_`RR8FJXzeOTbx0bXhz~<_{5VW{I(ZlkUVfDN zC2;7;xt)QRRdhc4$qk+oxn?4*%ty{pMO+Sjkvm`KRc9lX}vCKa&2cX4@A=S ztgZqlq^Jd-j_I|8_DX(bj%@UK1Bq~@MjwqqE})P3=GBa@F7IUs=moCfgx(j+Zgi}L z-mqmfU`AN%4`XS2H?RK8fBf7=*#WYCpF8lfj`vCutbi@$WigeOY$cOBWKmrXM437Y z>n{kY6$79%Z3Rn++vt<~QR-F*gej*jItwI!IS9E}x0OJm=vDK2!vZ67L0%x#H*B%=zXDUlmN7y(Nh*1N6K8DYxGp3g^AjNU z7#OEmkoAROX@a%9_g(tQ27STE9Wm!9A+Qrl!bC!cNryt*NBhtXE^v~j6=>< zPmiyJKL#nu`JH<-uiq!V`tvhDP4RBU3H0000% zPEAH49RL6X000aC0Pz3-;Q#;>0000%Oi)P50{{R44>11`5rUGlZH^@6i;h+YrqnSj zJmeg~&uXNY1Iz(fHa8e{o=CihGaxP!h4*lT#Cu45N)+`iBI1ufs)l_;|0e+T*`e>^ zdkuRQYsu=cHaR6znLUm>jX}lL2AokDDoemMqrqClWK~>+2JWEcXd#Evh6cyS8bR{N zj$LkT2BC$-p%64T2{rd~6qQ|G6DpUfh5R5#|nau6GRE- znio(fNQ`8vMM+ShBdwJh5F@}*0q_W%g!7Ei7~qc(uD)^Qvf!kfp$jHS0>+-;>3Ia z(gC(K4Vc*KTjnO(hHaZ`AW%cW1Fq938C8<+G9U#(QkiLb+1jM!b_xIiA}{&cthIFF z-0N|p7ch}e+8#6cr0?WbJr>g6R+>loP0fL1)pBBpFqqf18Xun@*h5xL4yfkw@i?2dp^0EkBu0nqK4&yvP* zCYl&scm72j(BFe${H3A@n>#JfsR zTUFwo5kS&F%>r+9alo5hf=)P9qs6+05)p1&01^Nl9#@%b9-{_CkMF}Id9l|kyBB58 zRsfV3F);`G4gH?%z z`X$T3y6mex`)1ER>h%rv0{7QgKEnrPJcyw|$d=jb$bbGZI_L=a4TR`G)kE zX(sOX2^9}tc{;#X={14oZct78L zLx0M3B7WHW6n`TBlj+^;$^G;HA5aJX{sP}ce~Rs+{I`iejD1V`enHJ5#>@L(4t`l` z5$!JnU7-5cn5VNJTK{?X73qnpKZZSkKQq07?^FBt{f}S|=HK0a@qdZ-OZunJN7Y}p z9|51uzrb~y{pR*}{n%;&Pl^GHzQYS`FpDlE`+3y8*Cvu;d)aBMqL+KGkL%zj1q{&< zcVVzB{3G0lkJOzvqKm2bj%PLJ)5$4D=(;D1v_Aavt859#VS~z5mmAZ(fL6zo?w(H` z7aDypa#Nl*N)nFygZ%Y!l>doY_^!(zsdR@9J=!Q#?AU!l_0}D|Xaf7XfeWEKHBzke z4>?Cf&w0bJBDtO^A{4K`b?JDYy@bS!QPNygAxKJ>e#Vtx0snOZBo|#GKU4a=8@oB{ zLiX9wfD)mtZUWfw=e22h$o8{voHvr5G?C1`49pz^w?NLh+w`lawwo}6l=y2T@da*X zwg%L)qF>IUj^@sNt#|`bw`(gU037eXO`TC=U~&_9nF9%p>-M~aB3tYIQ)yUTYmO9+Ve~!iyQ$!i&`Wyh6s0t}fed8&egb4Adc%4r z+KgpaXWj1{Xfkv<#`;ty?8QT&ToFZdF!G@_-zO#17=euBsy?f*VzsMcHJ99AryB^)Do<_;O4~BteN2}Q*{Mu^(DAcC zkYJTZE1($hOb-2&2Je+h?)g0DPSKX9S=X~OU|a?(GNtWEt_W)XR&u#J``1d zDZwEiRSWrZ5`3knK;ieK`gw-|5&BVyHWLGCVJC&EJH>Y~KYMIitEk=`RHaFr!O4X) z=&D{DG;WVMYLXu%Z;L#73;?>D^fLdbD{T+}{`~krK0q?vNF{Ag09xGAXTwY+nj<6W; zh<5vn*%E$CZ3~tJVaBE=-(B$)^zVGF|27HgtMl<9Q)WDL}FAuz!S6E0M0gPNDXW?C8( zZ#derGtl!BK&Jr0It@CzahW()q;$=yxm~@ZRm`XMTMu&wI?jB$SNV;(UmGzW4lPCp z5;5wFrRe3Nuvz@&c7A-l@|<38Wh1MUXmIXwXy3b(J6`FcE1cx4>)#DrW`jEHc4i)9 zbUa#&tSyi;4U)76SKC$^D}*!5C9*dUFQxH(lMf_!H_Gvg<;VK3M#1vSmI)J95UMSw6X+HG{B;Lzk-gks)vGjAE`CN=g zF9Xgx4OQjX`YiL1n$M_?GIU<;ypZfKUhV0q|t8Zsfvf#o=mX^WN8OP7Z z_L{48livsh(~3CxbhIz%g|x@=5Oa_f)BtEs(uAkV(PDqAxAd;C3LdpR#ib>xq+nGM zv@Qiw=P&X(-%Swk47Q=95%J>TX$th{7xA0{G2nM;&-4*R7L9G(y3CV*^SGxE`xlB( zd}amY=+NA?t9-+c!(54Zxb2aP6P!}X6o2lf53(4747W1iazQK&dA~yvp@VbUl#JOP_8(+B9R`m=4jZUv>uvvi;9pax*C3JB}-H3Fba*3k=0MEP@?Nen{rGr@zTFfd#w=Jd`C-a(YX9o~D)#P(?$u{J(I@r);lAxsn$d;sC zj3|i%5tXi0pumG6R#H$QvGPZznko1kuFSXr)*b`;rm6V1E9T&{zBLBcj7sOu_xt~K z=NR{1?5Vdm;50`ZLL33uQN4^HojMgy0D=SQPV;IcAVBlduDa~a+>)odQY^^CTtHaD zsz8^gYb~5h5*X#!Wd;op^^0r_=52MTAAa4D0a062>^wuKEVk(aJLAC)8k z%0*2sP4Y72^im#z#j7^Zt`!~3$6<*o-P4ogXh+1E|L7%v+`cVZXP&mNP$dFt2k)*HOsG6 z&nE4&0qp=ea<3+(i^J*Z8YB@ExmyF8{(!;D#sh(ua_9(G8A+iQE<0szmz#2y{959j z!H==s7^gQ!GPn9J_t8@oWV~Cqc0r!&xLh=rRl`~ zlZU!4Zl)Wio4g!5MSQ1gmV=wr`C-qNY<9O!^ZnxQZCS2BW9D z%zj1t6u%oq{`XI06^;#Me+pIU=JV0rh)4OdOa)K+N=A8*JaV1j&32FwM49dBN~Tmn zyQ!t+vB!9PcNjr-^=lqa3kzM@Lf}J(G1~3LZYPcZ@PlcyVOffVM#-p4p~-Oi_u1!t z*c-Mgz+iLo#L7Ak2c#qYTiPlD$t8XQE*kg)hSkm9?u*-qlOImLnD!6$r3d$S-eJ4C zBQbDJF|(MxugJK~L4B@JA8~Qj%ZKbOf#bG02t@)+z*0Z=lXhX)ErHxJ-IFBc?>J?i$8UP~ODjanl%T z0zsyGhM>a`6C*vmLTci(HQMRA!Z${L)cjxe_^NxF*RB+8cP(l5OM;|Pl-WKcl%>cKZ6f{7 z%v6lZ8a(xb4NW640gbWaR<9!cL08`njr0w?)5Lgji{VBX{ zM}k#Dd2mTk?nooAII-@aTV6rjhS<49O0L{t&W9zND1E_q;l38lM*{hHbQ+3-p%mYB zA+E-9MT!0fr41;uF$AcT*A(Lj+7m&M@ndh@P7!)n`-lm}wB-7p8<;{y=8%FSla%d~;G(~Ddy((xE zECL~*WIl~xXS6x<=zvA0QX<|(Lrp>70=x~bd3HK`mcqrhTW@y~8_M3jvrJr@ zs6!}gnjG1 zOAoy&H&mi{5z|FufnfB>J^_)4XeCcK0wxX#G+dqdM$oL|CsUDK_Zd^ax8xRZJu&PP zvb5Q^?6ZPyQ+oN3h*kkb>6N3j4JlAL)k+%}o5QiNj&FP$aXRF%g9rMY(C06wuWBkv z9{swmurK~YUkPbq?r>Juz>yX=5x(vQOLHw@XN>l`kPt+Gt>(9fgHzMPK=s$c%=G#O z=1m3z>(WV##LZe5kLS3&tIujIUn<|aTclCsuSUm;msC{Mv^r-DHb$g5&>X;xh_PZU z6Td02L}`m~&*tqCu`<~olUFI;Yt0s>Ovnd^uozOb!>fbIQRk=^^4gOi+ak`zey9Lf zlwek;k=(Wek_M%dNo47u43#=)8xWW%v(}x&lf;zwPFtp^;uFP|%V5HRzEQ9axTCeE zrMxK)8!tJ>_-rC$a8Sf$e|8!fywNsH+IgU z&&Q>y$U-SQf}nSFqh*vT7t>v5nOP=ci^fYi)M09h`IWKJBQG^3Yw6y4{xg@Fn0xym zyG45YLj|B~;R_s1Lq^0Os?yoWG*`X+UOt1U41>lT5t%6BmMDbB$e$Cx#RQjBfXdII zwH^!2w$YMFXl%l|2Ybd!*KzTMQTigfdCGs-0||>d#N22GvI3M$^1@}E37D3uY;AVZ zG-`9nbhqx8v_@NlHeNZt`oOjl*n$(EE^Q36RegNuKR5&X|x7X#W~_q>ar6%9*7y z1raXFj4iU_Ep^=rRPA88)S-pn!t-~$f?})M?vdKwv!x2=H;vt055yP;K8g6O#O}bC zU_THW;>ei)x_;7p9jf=`@h`y}rpj7t=Dz_4k_eDl&bkrM2C|YmCYKQ0>bIZ@#6lk! ziD7pJZdvAoDDZJ9&3II{fVIQEUB8(Lx8fezzTlD~4v;J;%B3w_sGFTfH_C_#GNReC z>-Ww`;|G3S!{z7ZUx5Vj(eNuE8mTU_gH$@zsE4VspBE#rGx{u3$}JDD@mpsdkoC z%$A}PGz?{vW(>1<-CUc%8J0&j0~{&E=auf)>i=eN^;$^)adk~wF5{7|{JY%F^?#o` zypPxDrv%E}Nt8R_nGvq#UtM5qQ4PRBEuU2XqylbV&^?TL#HpCyoyX&U7BgNY;3n6n z@%2zC9T}+ zwz;a13G$aUOL(mVbd7J8O7V|SsdpkPhE^QhcQ}Wb!#G*e${FQag#|2o`R+eV!x5}k z>NH&qNh-NjX(y^R=cSw0U&=Ha!(Js5wX&m1*s^SHwo*whq0FdVkuwL`@An>SU0}

!$bqed0G)yrXXl^P9fRF(ap}|WUdW@O|{B!`U@CosY z-4Qqpty=yJ@1+9t1wMUu*(vG|mKV`s7~Nh2W6!z`I2r#DwK{AGda-5`?YPRuf?*PO z&JDIbye00s6|;4Sb`0}zgf^jK^h1TRe)0UqAtj$nJ={nu^#xqGZ#Zn0ovNJ}z6!?y zX1a_6(v(_^#wsPcZ}2gyF){~vRhY8LtvLHoq|7@gnO6bxLdkc(INkv<$ZbYZ`q{J2oDO#un@Pc$3QM%Srm-4PzVCbZ0!c!caj!v+5t!-1$S9X`^tw)_^%HXX z5VV)Oy}am$uU?AJp+Z8ACv3lZ3De(7z@;LAUKt$C^!`3LgFw!=tZ7-H)LMZ}di$sSE1i)C7RT%Q!9 zC=v%=c!F-yeH0|`4~DZpd`F7~L|M< z=k${WM4x-;m@1>C?O^URA4(bR!GX=RsQPgZ?O%!V9j)p(RbnPzCRj)O_Eu@nn!`gU z8EwkqY(mCTaQ{vjrs(vx`DTn{T$FnEm;(Q+9b-SIVwQMp%i-Ja+{I?+Uz+$vFxB=J z4rHnyZ)g8hY@p&2Aw{xIq&M76Ff|aOf4EKGT80p-i@6r5GzIycuS3Sg$Y>K1d6xdj z`-3C)Qx2c1%WPupHedEx2&jjHEb;19zo=VW1$MdKu)ScHzrwTt)Pj9Iua4MQzF}+`s*aQ=RN=4)?Wqhs+VW8Gavri;D(Z93e^1c9`2 zp|bC4H!X5HljwWBbIx7v$jVwy&VOjdR*`q;R4MvnntHG1g;+3E9G-H{e>{&zZxY#n z11{uk;(7_#ns!2|)l44Hq9*u_RXxWEPO??3t{^*ATM%>iVnU27zL4xqFx3jSG`Mb9pFL`6 z_*QBFnURZfIXQ-T<}x4vPp`)F4`8)zX(44e*{Tet#xNp(_uG-%6(bWSnE7_?n?tl&c?vhNJn<0lXwZYQb#;C zTz&l41BDWkXOrlumX_(dLHwX&qkBXC@m@e0J%+|o3*&syfmy72I_5aWXNseo(uT(j zniwj8Jh0jm%ZOaC;F}Pu2$Af31gMyeMePRV1*SCru2Rwwo1 z-uJgRemx{O!Ab1s)$Imw%X857R=4Um8j)9c9kJUgP?+|V$T(Daa z*@)peL4&bkmA2gu(}jLAr`O8FQfAG_e@WOi5e;1nLd)e02n&x3XY`!cVs;dGjj}yZ z(PjQL7x0xID$KDK7E;?eCQavAr=giBM1mbSmFL4$vy z61em*#K+hUL^ux2&TSb-zeA69z|Wh|ZVwT?@hQ@v(Gia$u7sTnZHV!;9W{d2lZlYH zEeyWfbm>Z+Q*K!}QVRBPB2BT}c2XX@EBI_s_#{9PA3DB+UHi_@% literal 0 HcmV?d00001 diff --git a/packages/backend/assets/badges/info.webp b/packages/backend/assets/badges/info.webp new file mode 100644 index 0000000000000000000000000000000000000000..cce0a32d74d9c80abad2b0fea4dec4c6ca5b659e GIT binary patch literal 36030 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%0AQ7%&9L3$hiqJ zQ%Uw9NiytG(2Jioi!Z{i+a!MQeiKs3F6SdkE4!g?FuXe37a;*P_811*DsU!T4gHe2 zR@jN)oh2XFpaP(~q?GCF}@R#BxGG6`YajOxcRE znCBIB9Y{dE-Lq=7u<-gh^19M$jbKO3p}NlV_A?YXqMzsH>o}yr5OeqfUU@uw*s#|0 zjj;l0M)q7A8A3P>wIxD751oe7U=&RJSE)w_Ox>LYl3TW znWlrx#_xiqlg@XRcfXc_2c-EMjRpBd6pRB*YO|TcVPYl;tI37|dbJb)ip#zx&b5J5G zsagk+tq!ZeSToHOZLU&0&(!5c1+_;Fnw-a$>mM|Tj z%l^6|d6qcF&y!hAQ5o?#3&N%DL?5FOiUBGCg0b<2pqzPY*vuyX4)T;=gAEgG!{CC>^FsGH{Br+<+p>(spbMF!+aW<5pZ>?$NLp00v8oxtk2Z=Dt3n}CkV z^{2XD2zZ2dq-rGQ_fCQo;;=KtNAiBOhrc6&*(e#|>4*`6FEF)Cq7`TD$K!HV97Z>6 z2dU{kg9ghHA}IiNtm0*NRp(5PbZ>mdaEIaias32y?6`BBzHT> zJy{=~c4q^}yYQRcfNQ(b$0?W`Spw4ZcU>Q za9TIQhN3z)$jml;I~@J-8vHqkIHk)I1-#}{1hczu&OwE&=F zZ94qkp2$N@A1t(k>Qpncf5e`w%+l{dfPC~;&K=gsJbd|PgRm%2ci1F^d#W_FwNQQ#D5CiR9!IM%P6k1wn?pV`{y~=bCx5Z51Z*aTvahh zmtiHoyERgVG9%Lh-@CgK?3f3>Uxqnb{VVgg9J(_^b3%j;eUM^h-HMO%s>-XOerEao z%J;l({QkXAc5VKAeqxAU5L8Tz6u^Wf14A*vR9ZdaOc)o_E12{57Z!tm!Z-m%hStUCnlL)1z=1pPxT_-~W`n@ZPiwS#CFC_VAbQko` zRg?2`tA_-;#z~InJpbbM{KhK|xyr+`YUB_GTe?dMv&)38gG!llO{i)Y?XG1iZSo9r z@>C-B=S?M3x#9utvx~N%NsP7oOxVj&KIBw_Y7#I}v@1}>oLY*->YiU8Nc<&(r@s^nt>AY&VDi F001@Zy1@Vd literal 0 HcmV?d00001 diff --git a/packages/backend/assets/favicon.ico b/packages/backend/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4b603dccb078be35781087aea2ed16fd63b59337 GIT binary patch literal 10286 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%0DQ<(#J1TZD80bIavCj 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 literal 0 HcmV?d00001 diff --git a/packages/backend/assets/favicon.png b/packages/backend/assets/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..983e0d700eb6db9a4afc66a4ace886179c2e9dfb GIT binary patch literal 1259 zcmVdwH(FQ4QkfC+FBfuL7CF$5|Bng|GmzzC=aXd)o=CT}9( zDgt^x_m-%c?KxP%9m@TMQ)hba?&+$o?Y@m7kD}xF)2F-xJm)fekG-A#(|zPabsPb| z;sWU1!(VV7hNoYDMzA0N)nA99etwyW?gzv59v%|LGI5EC;3A~HBMS;+UEAv839#TI z47G5AQ^>-_T^RXq7_d|cq@W}_mi;9r!ZH>#<0V`=Y9_wOfJ;yUON?VI>)M4TvSa;S zoDww>C!>ikGSDU(nV6EC5*H*<6`I5W%P#B!d^!m(Hvm*X$+qOAMa#KK6kse1Sx|F& zcCu;WG6PM_g;W>|7m%{2iI=A~W`c8$y@}(J+J-)9qUQoQK_MCh7$6V@1lU^kJx_oG z08?m+UJ`a$0ssTRSjFZ@-6aXAWagDiE};@MCT>5+Fx2uhA;I%LkYwx=tP>o!qy64c+WB4@IjX>5n#XqiV##LK?hO(#_P9_<@<+xmFNMU|6y;*Hq$D* zlb;Nm<1J|4nXx-Adj+gc)E0f;FM;Dr4Ltwd)%yzHU@&w*8p4pEz=VVi(LosnOz#HS z42alX<-3muz;nK{ySJtMvt3t^FTKEm;>Nn=+S!_qHlJ-g60gUm=4P|UPQUz2y2?Wr zSEv|I$JSPV@!dfQOzUo_WIT!4Ay48>6qj`J6gaVrd!|1URG9fL;DQUR8JLfmC`;rd zs=1CRyyj@K8JSFoVPGT)Rim-i^|h@U{=Ey*rUagk*$N9~+h`$*=U9JlMkhldPa>j#Ps7M|^`1V$ZBNDY98Gi& z!xd7F?pBI!Uu^A@!@f&@V~X&Rx4G($eShMB(sN3prPG9leq?@Z8+jIPrjX@L6Z|YR zZ{ zQk9{evjIJKf?%_rtOyJefH5Gj0pQi}yoi0iHS7Uk*d5G!1Uq6k;eEbmja5%!6T-d? zJZ23KzO69C_Fdo(0E@3L>ix^xvN1xG1sH_b#H)VQhVSQE8-J6A-Z_dxr$dFGIyjcR zr;0;kWZ!alsV-K2{rb8h77il|7Xkws`R|~|J=i!6_D_KuB_jZel0iBo%ecpYs_ZgE zhr`ezy6u0@fO8wUjG$~`P&bZ|4MNyBECFpil?xeTlg@w70JZZh%@u_K8`ipEmn{k0 z%oHXJA(e^J92o!$gXAfbGU@=s6uGBbfMpzr0BJbp6UY1;_y+@j V;cYjJ-~j*t002ovPDHLkV1jN7K`;OS literal 0 HcmV?d00001 diff --git a/packages/backend/assets/favicon.svg b/packages/backend/assets/favicon.svg new file mode 100644 index 0000000..981fe2f --- /dev/null +++ b/packages/backend/assets/favicon.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-700.woff2 b/packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-700.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f3898921c884ebd9be52997381c8e589b3fc1cdf GIT binary patch literal 21004 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 L%D4E8Gpx?R5oFZ- literal 0 HcmV?d00001 diff --git a/packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-700italic.woff2 b/packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-700italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9aac4b88e4494ae10e2717a37ce71815b149d421 GIT binary patch literal 22424 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 bTdIsqao-PpxZrt{Q|G^!(+M8m761SM0T^ln literal 0 HcmV?d00001 diff --git a/packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-italic.woff2 b/packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ce7c7fed1d1d88b0267aac85782fd4a9f9bcbdca GIT binary patch literal 21948 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 T-b<`~ANI)o0Gqg%6Ld8Ix1$cF literal 0 HcmV?d00001 diff --git a/packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-regular.woff2 b/packages/backend/assets/fonts/atkinson-hyperlegible-v11-latin_latin-ext-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..7093c429f2ed3634f1e46588b7d219ea299abf0e GIT binary patch literal 20668 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 literal 0 HcmV?d00001 diff --git a/packages/backend/assets/icons/192.png b/packages/backend/assets/icons/192.png new file mode 100644 index 0000000000000000000000000000000000000000..b84abe9b60bbdeda5a911e4737bb7eab186908c5 GIT binary patch literal 6244 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 b2LhoDz^%-t?>3Cz1^_|ZNb8jbk^FxECS^tQ literal 0 HcmV?d00001 diff --git a/packages/backend/assets/icons/512.png b/packages/backend/assets/icons/512.png new file mode 100644 index 0000000000000000000000000000000000000000..be83db8cf87855c9a44a6877be5ebbb3037d0c2f GIT binary patch literal 19838 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 IQ#LpM9|t9aWdHyG literal 0 HcmV?d00001 diff --git a/packages/backend/assets/icons/maskable.png b/packages/backend/assets/icons/maskable.png new file mode 100644 index 0000000000000000000000000000000000000000..a224833ed6a54538a842328b5b4827427d3f61ee GIT binary patch literal 15650 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 literal 0 HcmV?d00001 diff --git a/packages/backend/assets/icons/monochrome.png b/packages/backend/assets/icons/monochrome.png new file mode 100644 index 0000000000000000000000000000000000000000..8eb1955d89093293b1e5609e4cb747ccb41c0dad GIT binary patch literal 8163 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 agF@8X)CHPc#uxOF005EN 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 DRUlxl literal 0 HcmV?d00001 diff --git a/packages/backend/assets/notification-badges/LICENSE b/packages/backend/assets/notification-badges/LICENSE new file mode 100644 index 0000000..28b0b50 --- /dev/null +++ b/packages/backend/assets/notification-badges/LICENSE @@ -0,0 +1,24 @@ +Phosphor Icons +------------------------- + +MIT License + +Copyright (c) 2020 Phosphor Icons + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/backend/assets/notification-badges/at.png b/packages/backend/assets/notification-badges/at.png new file mode 100644 index 0000000000000000000000000000000000000000..4ffb1c30bdb0af542dfd20d5a30b9d7cae412d8b GIT binary patch literal 2412 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 literal 0 HcmV?d00001 diff --git a/packages/backend/assets/notification-badges/check.png b/packages/backend/assets/notification-badges/check.png new file mode 100644 index 0000000000000000000000000000000000000000..e1f6d41d81e49c694d70507b2fd55b6f297d041d GIT binary patch literal 1183 zcmV;Q1YrA#P)-8DTu#luvAY18aXK1Be=lYjsSz*qs} z^sE2^Fjl}gJu83!j1@3W&k7&_V+D-UvjPafSOMeotN;QqR=_wtD}Vru6);ZE3LpSu z1&q_P0tmoZ0ps+n00J;pAYS_Y2(=Nm9QF!!%Ox}`z(u8IpOrX$4R&P2?Ezk&hJ9~p zP5|uyi1<%n>&AqUDmXy^?L;2eTEu@0Td#!QhV!q-`LF`Q;Ak_y8udJ0Tp@rkq3c@t zh%fEW!LAZO900D%PBq&Wym&_d?E(1Ce93qdc8V9__TtOlUUoYhJVJej?;hAU0`O3+ z##O|hgUL;n>mlOrg?-f;a2M39P*U+FH35tVkX(EMFczNx>H%~z^M|Rq1pN=8Q}I~= z#^MveJb=z;K9`_*@t5Jxr>XY&ybowrK*WCp+o}mwIq!Uv&8F>W>Dy2dUmlR!?y@Hz_(a|3Yk5Nf z$YXe$VN%*JV0W}c2IrR|=Y3D{Kf!+=O#LP+)_8mYtU%)Hu+hix?%}<&U3Od%AVhqb z`6B+8SmL_G@da=jL640I+-d1H3@-a+r`mTP06Wm|xkB|L&dc)DSqYEyN5sDi+vzg< z20kV;f7m}C02k2cvcte+K)YZ+9DHNCOw`N|0dNtGE;%ap0e&+bLYPSLMN6LwkXilA z5rDY8A1p_yD`7G6$W~L9NY}%3*{OEY2Y|F|x(L?|UMfMJ4*Th8uFka>@k5rNsvsei@Dc$IwSZ8R_-z4%RzfI*;>3>upbZ4MCj53> zj*1jN7JyI)a!+y80m4G~$fueUyVY!(WFfntaq&W~2^s_uU;futs>SulYM-xlIwpWN zm2eo1|BQ6Dc=2N{L2Y+O@^sqq3WQ#Wp9(-|B@7`*`=Xbf>THd@1dUe09NzHx*kTs` z3t+M&xgPR0;tZ_QZ?arFr}?D>5LyXZpR4C5>VjK0u+#ujLYR2*Q(gl`VTWu{n<}9Q z@w)^Nvl5CCziR+7AQUCO1%NgXiWA=oKnR2)#kU0D1EE;)tpT_|C|dj+07xHJ!EV6h z=UuADL%cWxvwF(T=Y}xYw~HGw*Up`Ul(b(2kW^khI05Jy zCG{YHr1I*)2|(8$hR)q@j&u2E7C0!S*a x9-IJljgop0KvH@2-~^y+l+=R&lFF+G{|gKb-eI@C#LNHy002ovPDHLkV1jSa8CU=S literal 0 HcmV?d00001 diff --git a/packages/backend/assets/notification-badges/clipboard-check.png b/packages/backend/assets/notification-badges/clipboard-check.png new file mode 100644 index 0000000000000000000000000000000000000000..65c62187ee01e8756ff130433d2d216c277d83c5 GIT binary patch literal 1047 zcmV+y1nB#TP)30HcX)ePC|QU=Nk$Lo&*#?0l@@ix&QpPsx7s-|< z87QDa0DymxjP2FCX_9|n8&UIs6$KOu0Q|3#=bqxj9xf#05(VT49r*to{8Ro7+3>71q8$IPC(5)ndD-vnVfUS0nIu0kNU#)bG4s2M zfR++k!tW*m(rogMgx2u86W|#MYryYPfQN*&;CCyaM#7r#yB1I)VQu)`3$RFtfIox) zjf5!p!w5(caK*g;y$tw13f#)pY@k~%-n3;eq+sq_W7OXma13wC^Crp+lH2Vn?bc-m!j?^RFL>R8rZy7Om@YLI-mb0Kl z6CGe{kP`l#Ux1I#Nz;~TiGUOdmt2ni8o;uHH-FSKKh-Q1km_Se+U~+`xb0l@@*+ R#dH7w002ovPDHLkV1l)#%4Zw>h~3}6VMrf&g$=J z1-xxoy*J`@uus}lF7^uz`OVs2ow1eFZz6z?DZJKqg{;0|(%vex2Ld3Xs;ogkDfraoOqLj2Q*a3K5c`f? zsZK&|0)DZXz}@_LP8A!I8OLlwR-G_*YjM75b6?WkXcG3 zBt%z3adlKm03ZB1xuc+bZ<+yT0SpM&pOTh2;EMDSCt+12yJlGE$XD7?p8L}H-F=GFJT2_OpmDcDT7A_};o5&)83cJBid_)p{)*vna*ZSal&q8s6v2r?yWgns2Aagb_hMCb-q|P=0#f)?*rEi02JH+E?BoB~MqmlxHByG4I9HHz^D$ z;YYeBQE~tTD0zT>FRWdjkf-08%EA7qyd@}|5~~ELN?YCy^y2wsioH7k*%?&=)G$Oc zW);kB-FtynORwsPQux8B2mxy1aZ9gSXml7y_5Q^JxT)O{0;qjutbrsP6DQwP^lYoRx$oq2%;5l-E_d*i=sD{V~-nn|CC=yn~i6?R2J91#)Kdc?1 z8loX6jX#WrDf%FRd;n?pBoXkLS61PXO8^R$?RWy56+k$;7ZL!UvmQPb$v%cDA%JBG zuu3Rm68930qMlFa;hC(>X9)p-isHzB*o2X6Qdm7(6cR3;uf+Uhf6;AVDFGPq%3Acl zETgRB7Hvzy9GFW)if;mI5P-oaYsvxDbaI3*CUB0-c!j>h=s;?`PbO43c&tT0E(tux zYM_43ilGIB9PC+k^~a1cs(_E)nglQ&UhQ4n+?p@olNTW3k^xBMkrLq1lU?!LGO{)S zB`YD>2N5*9tfmkmNwTzDspk2~fHerHK>}m2D$Zkjv`3L-K<4GY0;NW79lIT`efVI zCICZN`X_5G-e#63E_C$Xj24FQyR;x6Suu=6Y<)H0^+#)GAHMP)EeS~0KG+ZB2jyzB ze1`f6T&A!m!M6U6%Z<5sen)cO9g}q;#UEr0-O$@0=VCdJ!5ud>qxRB z|J@nQ?!1-tbB^x0(zX4bKRc`{0?(`VesuoqAfWOhI0!fhsEk16?hg+*2&jxecsx;NNDVn@}yq4^m-)-0Q7IH zTxJ9VLf%^WdF|eji-3;}7=XW8In4;XtEsl@=hw{rWNAJJ0WS*ye-8*meBXIS7O-+O zIwt|>`Y%@atZ7Y0#3};!Tm<~kt@@h45BnxY;0?E>3}|c|sRW?)ta^g%5)A?%0zwvP zDFguiy9G#&4_Kt=tEG|2FgpAi#*zShf;yfXg0AwdL z;QrnLhRn=qCu{7D6%KqMhWEV+xgclV5CT|rKLreiBpPHj0oTM-J=;a3B|Zwc7y=-o zx~T-<_J0J77M%x}QrkbI5u(-jz_^G9Y77dPdRSGJ0JfU|su)_2x0C|E9}^_7s#QsX zFi5Cs3IP`zA%`u+0H69b4LMRt_}1!DznUoou;n}nBP=aDV?zp&qt+VvOqg4?Dn0_P z)-!n?pAm2&skH2jjf=6M?@C}MRl#nmiunjoS3g?XRGGner|iJkHmknaHEMezpb=KDa$h4vj@r%(Mz^MWB0xEaNxE&I zo~$4-N?@M!s=W}9<8-fPjPU}p#!lM{0m|VrCcCT18o-Y}eX$n;ljWfAgs4XZT3;5` zDREmTKz*FvdtmYqakbxl2~6k7c*_K++eGdG;3+Al%FqMeTO|NM+4*p4^_h}>@U_A3 zQ3t&(5&-Dx+naMf)7n_SzC_(as$+`;sJhRpP1XLPXD9?bc-xi;VC9FrG#+#Eosy!P z{pdRnJlv?+3IS+-=zGg*;!V+i>Rhe(c0!vZfZYx&UkSK9nDQ+{75zODz^dnIHwXx^ zT#wW5#skRh@Z9Pp1of_N&ey0mO#q;?#RGJ{#~24Lu8qm}DE$>Bps^8AavETv>*pCd zVZTp1qyutUQ37&JB1gN(4soK*(fFXvg8&D>1l)_2T(UFl@*v=jfE-)RDJPnZ0JKuM z!I0Ubqnk%^SoJye-Zi+{2%vHF(szR)8lg-V5@@-nd&|_mui04%P;=?NL6!KO?d6*e z_!3$_Hm6w$pcAFR5&*mUV70#;lv?8$_N(9}<${Kd;t8y-CCJf}jRRe8I^dT8dUgW( z4mcEr=3EqjXjl1H0!Rzl%T{T$Qk^UwP+~5Cs(2WypF2u5b$$wu)e;aA@Nb3ycd?de zt0e$1(RJVb)E;!|CcPY;iM>@5Kr9IPr+~;2BrGW=teOB8<;4njwp1e)AV+LRmtdt+30w~W$P%gOl4NX# zfH_DQ$`m9JFYv6KcDBYTQx=?x$T?tN+o_)5Yrn?tt0JKHgqwX)(iJrT4efJv1oRWU z*cXz5%4?yapp>k?S^@xx!x|*0C+3pCs(n2?4(WVxOl_@FJ-p#+MM>aQ8ltmX=Zhd~ zBw#2@Ya+t=7Ur4>=!rPn7rcV3>QZCG=o1=SAYkb4kU*?}6h3Pcg6zDuGMca28Ugp> z3kjSju;KR-u>sJ%C-JQlPy*>Kw%?r0-S)t2o&z#J-`Vlj6mV;-2~gOTAfm>`UwZlMLvC)bAk!3n2jDUr61Cbg;s< zJDKwnD-l)#u=Y1n&sPX&%#`;cbYCi7F%d=1L~K8J)`nkQHYz@;7pckcoq z@LCJm8Ua}UH^(vwfvZzqpb>Ddjr~a@Sh+B3!P_wmGyQl2!Axab5R!0C9e~~!p$E`;ss>vc=6#=hg%G)f{{u7cQ zqI9W-0Dy;poaLb?+Zhy+&)Brp(EOh!jr>OCLT#v2K>#tIr2ZU*r1#XCK)*TOFVP2m z9hNExcpqtf7Q(R3I|7#2ibgjI20*;YW9?QArvi^<$&Lo=y#uiTid-%IXGyB{N zCxnd~M!9#=Zs;uW(@bD9cmgaS{161TQV(Aa0P0TaWdlM(xozUMl|(}qzu$dU zVG{m-jg1F&js>q*$rb}1H19@~;yWGy6&jdRf<$TB#~ zfr>DsJ&l}7d@~NbQG2~GL`3)E106%fGRI;`dCTCAL4d`=W7}BfSd0L!3b=HeDq{zn zzKmr%X+0Ik0zD?TXaaEil8bO|u&WC}4A`;_odHtxg~%?R04CE&joAWP zfEYTR9?JQ3v>@Ww(Ie)hEndkkCjFjEWjDmnoMkV{roIGc8GFchs=JC{axA2PZ`sL& zfYG&O2gMpNl$5cYA42-9?lKP0kMZ@^F;B2;fkOzOZB^INb7sO0foob%=>I*}MO>$| zDi5$+LxftN)}A**7rjQST>}U`UjpO)S7}cu=^w<-<@akE>b=id53Wn)XIFB0K~>k$ zA(jX5wBL;Yy=_0Y5;3+@*@&K)vq+WK(O5s$s}&~4Nx5&aLo#?2_e2%|_pKLbedqez zVr)mhj<)PREGO7QkQyTi+Sw)-_~=S^=Fy_>KG6XOYfMQSHc>-Yv z&%k10!S4V*6#MN&45tbiI>mePEk5)YFqz9}ZixM|c6rZEIfk^k9se5x2A?o+fX9Ed)A7cl@@YtgjVehkS)8?-4>k2PH&oTCZ3iyyG**+8ZnIothW| z9Q2F`H~|^Kj8WwT#GsZ@#tFy>W{fH)AO^LJGEP87Fk@6X0Wqj$lyL$wf*GUA35Y>0 zql^=f5zH7>PCyK58D*S+j9|v7aspyd%P8{;k{g?FT-|D&00000NkvXXu0mjfhZl{w literal 0 HcmV?d00001 diff --git a/packages/backend/assets/notification-badges/null.png b/packages/backend/assets/notification-badges/null.png new file mode 100644 index 0000000000000000000000000000000000000000..be1384df1318b7714fe9625efb9520f6274f7a65 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9F5he4R}c>anMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Ktgnp|vd$@?2>|`|Cv*S+ literal 0 HcmV?d00001 diff --git a/packages/backend/assets/notification-badges/plus.png b/packages/backend/assets/notification-badges/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..3e114247fec74e2a0c44901163ee7438d07414a1 GIT binary patch literal 816 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>VEXRq;uum9_jdMeUu8!DS4Czg z1!je&Qnn3}8zd(jbYf{?kUWsaAjlvoaHwrVsL*D4v2DN2t_NR!)MLVQ`s)n4<9DAm zTiHC&QZ0zMHTM}ihsHkv1qQ~WEM2!ZGYbUxEZAXd4d-6)ePCkbZ@20GqvzS>OAj3p zEI$zVVORI>q~6=fd;W=jzwb1!=(QlLO$}3hRE5_M&0q~5310^}YkljAxxFPay=o7% z9^88;FyZ)x+K25?S+=tpUPs)0FRQ($^Sg0g2RGxVK1kOJb!i~l$eIVU+LZfLYvTFiTs!w{kM;kUcCR?@{lzue z9xi{cAMrgbSgcoea_qVG8!4>GcoP4d78yB zVPd7Qz=Nln;m!>`XJ$7r==<-KVoFK5$HG!kdFrZwg7RlIg#)L9*R?T7&NOEv+DJFy z3r0&X+sHh0y&0Zs!l>)4boQ`d?TI~+i#bnR&6gIM*rvQk?tgZ1#zlzV0Q3yaSW-5dpq}I=@kQ>_S?J? z3#A!^3#7N?IG86eCos7!05SvA7|eDEN-%cruGVKS?@NgmJ6T(KzCLu?ocrmTesjIo zt+xmg-Qm~k_d%OM#h;0RK_Rm7$%hmMhDo9xeEw{3u9Ikm>b-cc-JBhpMCaQt{hRS| z?=_wZ#YHs}%dRW+ZG1oZ#$E562g(sxFOi#^tta+hEl)xtkZPQ zKGX1B>Bw_8!|Ywzl2sqdVw4;Dl@7757m$5p-^t(m){5c5q}3Tb4SQ`;9QJ#LKILQx z-SqW!3gZXgL$=mVc}KpT?Xguo5!kdRDRMzo?LWzPOXFJhCNUle)Kfar^}&-(#hI0X zL59o1NBNX%i@%YAq!t51!5WA4ceVFsUJA2{X!E-wxwE>IgS&yV;o|OaDJh0(hREIF z3^$lh+}g`@K&~OR_HD$P8NQ4R4Re`p{^wO?KI18!%+Vkbdp1s&;a~e*?b8-}uTMQX zMd5v?YlrAVVTNZmcWvJre_u1Pd=W5O42`vuwz>UKVLriNlptuHbgw(wWoO3+PtGWB z&a9g!Z*_3o@?w`PaGM)w9m!z9oN&cYjKPmVV&`Pm24M!bcPWeySQt)kI^IQh2RWCb)Y{8|X7ik9IPEv>Udz{iZ$n!m1nmwpMx;d^>C`={&LE@R z&#?li_&4L#-;8^MHcg-ZG9|9d-%CKXL&$~GD9zC&axshK(Qso1m2OZtXa%|4?bG~{4s1K>tIrr+2~gxy6P(G_u#|CzUDJ+<2eY+h&wp~y zUAlPs{LG%5`O%U+Kev9H*8O3HyMU~4k>Ijr*Kb8L^i;7F3a+wZxBMOT+mb<9-mzrf z?W8l^>$lElHuxlXfx=rdmi4M)+g|5ul;WLc@dcfy@*{g0Jw zYo>12tMkZM$FeeO7td8GHkSJ`K_BmXYS+b{WO^VFc6#DA>H8LX=c=^R*W4E~u8lv# z{NT|PnZiR15(|qIff;1N8i%3^BL;?(Tq^DA%-FdKk_Ylj87d04cwUPGh8lyXtDnm{ Hr-UW|&M|8# literal 0 HcmV?d00001 diff --git a/packages/backend/assets/notification-badges/quote.png b/packages/backend/assets/notification-badges/quote.png new file mode 100644 index 0000000000000000000000000000000000000000..a41a15b49549220af23471ed9cf631db4134f13f GIT binary patch literal 1383 zcmbW%`#aMM00!{y_uIy{TI8~#RpW`dgq%$1DRUWyhFKS;?4)dxTO&zjP30aQ470@! zibQU6y0}aommZfqB5}eFnJCdhoLW21pK#6(@B8`X{rOGtrnsU}x+nku&}27f>V}Me zgHYM%se)J=0Dzm5ogHYGPcH~=WWV08PGV~V+Uh2N362KPh!vbt$PrG2-$Zdx2<=Fk z#0PYR*GAOpv6*z!NAIW9QCC);?t4&kdDX8 z7u60Wj1+!-_~M(e%|yQumPJ}Dv)I*Zx#Q7Oi4~A-bf14CuQSUkvkX66rN`-2e%f+9 zQ`4Q3T&c38E*;1HRkKVsU?GUq%$8Ey`UH;&&3E4Po}|E?@|EhfdZ8Ro0!EcBB2MIt zc)3o_wYzIATg))lE<;F(E(;NrJ}0tQy-R6tCWJF*+Upq6o3iy8_?+Td{{Y61f=T=B zwZhP;Tb@8yI|latd7*u)9Vobpl`C|GA|C+>1gHg6eI^5u9(d#IuZu87oo= zPO7nwCnqGO;&6zQ)l;4}=A<7EIQId8qknBW40Moa!=}yz1f=)m+$v8$DU-#m$46gq z+PvGI%h?KgVCXWHjmye)oC#m;p;J+^qqe4#eD zrQ8C~x~jXgA;*G>^bG(pNd$HxfOgO8^ftfTZ#rz%#Tn8yXk`Y;adiXsW_5qNS23(MiJSAU7A9HE4qn?VB|XzE5}o1A?pU+ zqbb=#;F_z+T^?fKti6O1JfzW`h7McB509ZhI&wY(YK}Oylqwp&T{4h4NKm_JpB=UL z4J-5pC*yM0>$S>3C-w40r@nK@J>rB>r*#M8?Pi)1rCsC`;%gchg5le$>?dm-l~v_* zcz~aTu{!M)oA}7jLslFn^LE?VJqm9OhV#2F8grXHJnA%(TQtq6RP+|*HeiG)QEw%I z#Mx^~{znS~*zi<|wTI2WDzy4a2y!>r98)arC%AmK6eFa8O%KamPr0(8-8A(?TqwyR)8{H!DZvIDerDTzJsV3igJe8hO|*vRB}1J8KAr29D~w)< z>n%wWBf8NjDN@D&27e*oe+70A%r(?sN5UD2{Kxr6j;B@>0sRFBHeZ3uE;c{UtlM(} z*cGUk8m`j%?FkS1dj+|LaN((1|4iOiX$RMcNNj_(4vvhga_$rlYm`}o@Va&Td=w;z jLqlAE2@~`s{YRD18=-mRE6Tjj#(@H462-a3k-_~3|I}_+ literal 0 HcmV?d00001 diff --git a/packages/backend/assets/notification-badges/reaction.png b/packages/backend/assets/notification-badges/reaction.png new file mode 100644 index 0000000000000000000000000000000000000000..d617a4c5c00a465d58e11a48bdc7903f8aa92029 GIT binary patch literal 2418 zcmV-&361uNP)8UBw%L*b{2nnz)8T)2<$BWkv!lv z!|JUWug*T{%Qo2;I_+oczweB#B>t!b0QS4qKbV2;rQQ5{5Cr@*_t8FI9FdeG5r9R1 zVjZyG&H!AQ0wLd7|7PJW%DiS{_9g&Jf8YA^hM;eO2N_>l|9(%;*oy#w$Jzm&zxQl} zDv0=M47JvGp-yZg|Q)2q44&JQd9& zHIg+%G%aUa6F@cd?E_f-mSNxxA6h42H)$;iAjy*4YPNL10vP(Tbu-b+16wWGc*0Yy z#g^-|B7l%H6e|3O%^w#%YK3@Tzv!

H`4~QMI)opcH)SayCm0uGugM@(|~a+*X~0 z+64S)JIgu6V(kEau|DOZBhKq)IgpX#6;(;7NkFdUa{vPPrq#w3a>y0PC09jTH4q^vrA{|@+liL#=c(qS0Y7$9M?v5=6J z!%7I?gsWaJ5bqg_vX9U(D!f$93p`&KayFJr0G9lNC=koXsvZUWv@J-WKv2Wcd$Z?= zu)G|WOTaHS7X`icC}C%7ACYi`fxYPgvi?1XfQv1{oxakz$U17mRrF^Jp_6c{G@d1Z zkKCdJka)3vKD~CtQq$9U>vy$8B@yEVazc(0pjtmkH|I(s7odC0BOfS9IphTq0wUI5 zR2$y|%?ug6%~1-EkQYP<7)$}K9K7~_3O(z+s-Z|eAx8*MZaS%Yx=0N4*gV+pM1kJ~ zod{P%0k^3H04mAXYdHrJ*5;0$&EdX0512ebnZMVN^<=U?66BMN-F>J8sIDgoos|c0 zF7bvdn_-im&V&eib%)fHr5dA@j8y`Z@Pp;5R}%n2Lc3Kd;l`XU<&tiLh8D6o+jvjb zq%foqpvJw(p-a6-$_Z&}9$Lu4Yn6iJb=$yYg?0gmdz3CKuTTZ7+H7M|(d z6S+pI5I{Wkl1?Q2JfCB~8@T5I6ihF2@>LXHij0uER<)%p3JC9MAYqC;u-QBU)CBCUvs9q7 zFUpxB%{gigKtIJeZzf_7INZm(|H!#`Q{pEZtWgEElr@=-Z#WTxQhMAPQ-c6E&Rr3X zXQ9-s+eL`Q0BW2ATFGKvFFzI$FqiWK3HwTlnv_WfkLd1Of^%-F5m&z^?GWeEwS$Ax;k{ zW3V{^gXz~Q372jC7_*fUwp1HN)CMq8q38LAK<-Ft8Bm8v9d03use zKWp*qE6GKFE)#Q_@`75?IiST=MA|4%!>IL_4VT7cYt{d2P}vX92OwbCAOWDFa+_a8 zprj%sav8^(9Kg2T#fJp$(Oa}z4`-sDtX#&q&q=&02oOf=UYv{ESa!CacNupxab+?y z*gUVGxEU^1a+RA_H$N%_+_KiBQ{;gRr(W+}OF{u&HD!Xmo(Ab$9TS3XwaBSnser0H zkWm4*3PtQuznr^&a2v@?7 z^qfS=0mxPI0OQoBSDlT;s=c=gmVh%JJ#G;J*u1X;VXD<5gKCBGlfW>#dqo7xNa0K+ zKouH!HlXH$YnY5PSP3xnqxS-U*M>x@xF=h{drJfvk};|Tupk!bg(1QPg85XMx*27y z+%XZOQ4LWFKPVg_V6gFC9nG3<>9s;?wC`#@$OU<8UL@|bhH5bKIVM5?@pZDU#O=s| zhIL75_a*`GDX~>=?QN`gF$qcJ6Ffy)H$ni5U#xo%AQ(ruqNIy7)w&{UZjFtEowSDX zf-+;Jr(`I8%vn-u1?aDA?wd2fO%}fdm)Kj`_At~DWne0*`0RCcqj4EK` zIU5l7mBZYxHm-}x$ngMV0FIK75(y<2YitTDq^o2AI*FY=MM0UzN5E%Fr11DhrCb77 zfX#XTOC$-x0|-aCU@S2N7%UPaShmr=;Bh(Lw&n;KkvpWwHO#+cl@I_3Y*qO3Y9Ct2d}u_ghK;i&8rB zd^gf4>$rb8QoHty+S4y`ht!M!7Jjm>Tu?2QAbhcb(c5L?-}~8s@a9O%In4cM{Td#S z7R@1nxp)Khb5;zEAhsIY*>}z}L&h3az(;OP0$2~L_HInC?HBOL3lK4701}x}0z7iE zE1qjg)+PWMxt@^pOZ7WeR};w7317FSVil5Vmb%6e(sUV z<{ClO!AD3d0$4kzI`S-YvH{D!9N*cOW%t&K{9at`Yzb>g05Y*cLW+7=i-2;Eu^h4p zSyAtkb!$xkis1TB*41kZS^35TNw$Oarq$U!2uL{fGZ9Dk2CN?7$HoNzz5G21Nc*|i zALNHt4_$I`<6#PC67;)U+k*f$M_7V{BM^~*2mGet<{GPe5s-9&2$CE`=2BC%Wkv`6S zH%s3l?5G4>(-%@8f`+%ymko@5EDfSn2W3j(e3a6PTZjQ{`u07*qoM6N<$f`cGhsQ>@~ literal 0 HcmV?d00001 diff --git a/packages/backend/assets/notification-badges/reply.png b/packages/backend/assets/notification-badges/reply.png new file mode 100644 index 0000000000000000000000000000000000000000..53d7cf3a150a48cc611a6ac2a763e944565eb824 GIT binary patch literal 1194 zcmV;b1XcTqP)xBc5lz; zry0$VoK8RQ)9&gdg|h`yssd-Jt+Vk30VGcX0w9271(KVm1rR{80?EzO0tg^kf#l|C z0R)h&Kyvf600Kx>Ah~&300AT`klZ{i-~<6YmN7q-d|&c6$v=`cNNs*h3xMFCC1381 zxRak>NdBFwL{j5p0f6||k}>=Lm%iRXNRlD1*)af=#P3J{0wqmZSTtBd6|6yBcp7R3rXRk!Z0-*Sf;SUR0Z@Er@ht#q#7F(u z-5l$nWh-qVBjM|Mtah8QXubn##c%4E!^;4G<4)vG^34>XXaL|OYv~}!6siCWoW5P{ zSW9ZZN&s+#_&v3Uag758TqJg4)7(`Fz*;)@E>43<)C}eymz_CL>|KX;+(s5MT+~ zxPbG8mC=3O7WV`&M+g>6zy~MFo02zxS_s(q!k)|2lEodt64 zf%%KFJkAo<%CaFYXt!zB5?bL2x7h2|Mm9j=rvd)(Q}ex1}aB0F?SP_2*hEPz7TG zsKX7*EuE~X+z46j&jBNx^lJM|z2wU2=#`X%V*7ADkPq+rRBnW^2+7w8BTk|bI7ZeCd z^DQuV(nlB6PG@LKqIl9r0PO&9@c^r#{q1Rpzmm+|&~}YgHNYJqBjGGSb<#%*P-z=i zhydcWRn<%YDw*O65kQ=_s+tKvB~x4>0*KRARWkvoWQr?90CC!?Y9;`cOmT$>AWmCV z%>&~yzqnV@VFZwGQ2+n{07*qo IM6N<$f*?==`v3p{ literal 0 HcmV?d00001 diff --git a/packages/backend/assets/notification-badges/user-plus.png b/packages/backend/assets/notification-badges/user-plus.png new file mode 100644 index 0000000000000000000000000000000000000000..f47144576e283523d98fb1b92ca60a56a32b3c81 GIT binary patch literal 1972 zcmV;l2TS;gP)(H_}*NyGm88ALuFpVrBpq$2X0$Qx^; zt<`Hq0G9ow$gRlx0igUPeS9zS)5J>xx~<>E+5`ancOsuxoZ6lA{q?mFu@(VX`Bx%` zioieanz4Qm!8{G)7k@D$E!`iegxmDPpx{8aIDq2r{9_c zVD%8Nl>z|}v8hsvfUSX_K;Ik*H3;y6|F@t;ZcpLKBFZApK7qpXJ%<^yFq8gnqC^w0 zmsvqTZh4RfClOLeL@T7R$RP5eR{6r;H?t;05&#&#WP*XUvw=EfwwqR`Ef$^Y6`ziz zJBIc*jUs>$@vF!#L#1y=@FVhc#)pJ&GR8kk-J6X1RjNi2fE8LNkJSU#vBHe@BdJzz zzz96v=bl0Y0a*PXMoj>J5J`)yu~}9%7U`3Sl?1#1Z)j2?2*8p#SkuZH;3pk&NZ-xFhjQdjv(9ZJ-J$On)wv!ts(2e-6 ztq17#L2l;}^*tUihys?pzm@eTe5_v3WMAMRz%ns*xLAMdf`w~d(8N$Y1e|12=>mNY z;HDYIM5&{E)-ttwse@OqT08{&W6<;qsbe|YF?8js!nx7Uh8{e47`lI2rF1|`{Acmi z7U&|S3maL&&@1V?<|grp>NN>y;?fJ`SVHFN3vnp{7MH$80#*;1r34(r(zFfOrY=52 zUyi+bGh?Z&o(a_?VD-r;;987kb)9Px&^^GAEtC>q$%3wN4JciNIejH0r+aHMDZEL| zs5$}fT4@OZO9_d(sFxA|(_BF=m1YNAGfG(w4s-Vb>~pw`n%nPy!Hvl5L1ZZb%<;MH zgiAJ#mUMj4t2_i)Ha5@wEXbW%c?hr!zLhX!2|pz%s0D+?emw+OG9f}$$;1o^oVkhx zBswcufGvGjBLJn(BHEj2>Oy3OGQXm>NTwbihNuyi()c7VoxwZ&q!Ozlqk;hUT_ z%9{uR@B%>9?p)U*AqRYNf9lU!KRR17s8Vvy5d<*!LBz5aBog=*Bc2mo_R=BW!n9aE zV{5TL>1#2rlDRxY5x|7;0xct&D#-!~0JGclj2SUL25_6vhRg@+*T&y`2ugEiGAEH7 zYhm(pfCWia;Kq}2En4WtG^}XAR}c;Joy=ru|x{b6429_rF)X3!!S{v&)U0D_fqFH zX~X9TLvZR|OdRXSy!~=-atONU!SygI7SS0?Z^(A5$7H931$Hi0DsC_`1%rM48o?9&^ zQ4Fi(=`AeGXOX$oTm5cC6ahO?g7kCCz&{2X0!T*z&{LMYpxUMURN?f0fIO+82LMl7 zQrv?Gp~+JSx%87#Wx^aktKrV$0Src#b4^x12QuD3mZSpaVd+xaQUb90=#&oqIG;I> zioV^fj6d(>iBRx1Zl|J4?he^KehC4@`n`MP|IcHvyt@%}KIfJ}8sLctpK}fa=f*n9 zA0T3tl0yJi$0bLKb0rD_Iuiu+62P@F(QPln!ssCb-B>_bBdQiF0Za_bF9n}VXhIgi zSD(~~7$n?^XlFHZ022c7gsSU;g#bXeUhh4g3^5&xtYPg|%N(TQp^ylSrRp`RMgU=F z>D|XU5CEP@AFU{@P!EqlpPc&&)PjVY@foh>5&@+#pYwdIeyvcG0}6A(FmjK}2}5{7 z_?+elC;|WNB|{D(jp~+oLlqL{2*6cy&huGhnbf%vpe4hywlU9~{Y3PA!o>?26w}`Q zpH3L?hZ^o#f@)?PJRK5p-uub@4#A>Impp*f&3cg%ZV{OPMpe)8_|V<5hk)k-ej?FI zLg>xfB?2rVh)jo=|J;g&gz6y(P?r?B=9sS;3~Rz^VPOvU`lU4V(&BVKT7GywtRb`F z-ywk`lgCFGRrWX9PMB~sh$N+|o{OvqvSlddPMF2m@QNyP*9fpE+UqzF=ma>xi)h*j zh(OWNM<>7mUPRMQKm>}8J~{yo@FJRa0wPd!^w9}$fEUrU6A*!-qmNF21H6c)oqz}w z9es2H9N + + + + + Firefish API + + + + + + + + diff --git a/packages/backend/assets/robots.txt b/packages/backend/assets/robots.txt new file mode 100644 index 0000000..cedb5b6 --- /dev/null +++ b/packages/backend/assets/robots.txt @@ -0,0 +1,14 @@ +User-agent: * +Allow: / + +# Uncomment the following to block CommonCrawl +# +# User-agent: CCBot +# User-agent: CCBot/2.0 +# User-agent: CCBot/3.1 +# Disallow: / + +# Uncomment the following to block ChatGPT +# +# User-agent: GPTBot +# Disallow: / diff --git a/packages/backend/assets/screenshots/1.webp b/packages/backend/assets/screenshots/1.webp new file mode 100644 index 0000000000000000000000000000000000000000..876b5713358515d9e33aab8f70fae2d31f90ed44 GIT binary patch literal 68030 zcmb@tb97wWA2%E~w$Y$zY}>XP+qTVyZLB5@8{4*R+qOAxdePqd{OQ9hia*j2MbXo+L^nJBu)rusW2? z78=UL`e_ZlGCXr+_`^27>Emx7-T_cQ-Cdr& zj=knR*sR&a^Um@v01g2ruX)=Dj|jJAPk?lvJDw`uOP}jICV)IZ1pug5x#7L>dEriL zJM_5#xV=6B055ITI!C;xKKDLVfM@{Vb!m%(ovoemUi(zvg5Rbe0Z!hgBpWdEYO;Z_)3y)zdSh{1_so06 z8w=3o9c?T3X#ik7O}&N#01G}>&1Ag%0F2wJ^>+_rcj=G3TWu5GOJ1x12SEA@?^F7# z&+$v^Yy7JRfcFvqPN$YvPiKU;(q{~S@LB}Od$a)np1rSl0Z%b6ZGeZ(R6XbBwKBv!nwU~hHQID9%GwC6C`1Xv|m@L%8i_cv^g zJ_ys=nfPeH<{WsIhdkpmoAOD-s*O3yu4a_VCD>W;TGWE>Vi>J4HshX&bnzUS9z~RS zwNl?4&NF~WLOK^9wPkrs>-x6xG$s!E8-uF2QUsk*k~Z|c=3d|iHXpiJBE!IPzb2xW ztc-MMjSpVzJ$G*D*hP9=7%DP?;7Ck<+gZzv75RLqn;$!3uELV?3R^YhGSj2h1-n8l z4`JREB%9W$f7Y4d$!-4NRfQgXG>=m2X`#(&B2@IFk`9?8&4ppOKVT3<*tJs?=aU%O zy}n6I{^d5pJGI5M3ho5?!v_}PReE)v7@yOG$)+%SS8ii73hs_dUCHq1aP<;kSm^RW zD1Q>VO%j~y;BQ)o*W<_ijriPS=-Pa}!yre%0;6X$qXarF+lbvvXubMZ`DAHWFtSqz4oTju;v_bkH!)B7Yfyg!?me zT3Unm0cXp*^N;4YG>v2}Gg*Ci$(8=*)4h>+i6fVcUNz#8ip;n?G-X1k0efUf5gLiT z6He^hMKUHnotZ{-({y`c=A8yOz+`GM7HU^9Ry@|6GAM{2i&31|8U#?w8uXtE zszbL|718~gzu~L8<+^XOe^lvXM8W_oyx-L)T94Pk9Tw6=&T$3iZD9RX#S0a|&s8)K za(xWYKjGrnutx8EgwFr-3yQXqL&E((c{Hc=9gLYB^Q*oUDgrh+RC3 zmC6{$af_rfs=`HVEDfDR+eaP0@5%@q=?#v~efx1)}CyAX~kN98QC#-IT ziz~Wqs=Z|lOFw_93F>_p(IgVjrs>32)52zE^c1Hi%yO0c0k{Slrd6GVtnA2;j&Xi> zUqkj}m)^(C771Xns6%uErP5FU-$pdJhAtk*i0s(NNSa23*Z8q?t^|F}BB4=er7v$e zQY2zX641q^s|QsCBgo+7M0I`ytq`gq=i)#p7Yeb1LoIV_u|uB*qpBB>|L)h~|49Oy zW7QP}gbrh7{woSrUk5&B-9yk+U1X~-Rb50l_4P;?GQHTh!Yt48kz)U~MJl5zKL#P` zT;;6&O*1>FouHV=u0imq{gl_8x>$InH7D#9W?qliC~(bhCEK5c`;(fk(l))fD>N%V zfHUj8(T0}X2L6Xb_Pp*ypJhFHA2&e?z$q{s2ywVSZaAWiCQ?`P#5AUX1W`h#o3NGU z?C{VvlhXvc`uQaMBV#>-q^xg%_#?>C$fmow$R^sve z!Df-^P1YY9Eg0yclyU~fX4Gvex?oet!^bLYNT&S)?6V4!aOr4Dr1p?N^ZQ{bRXe4aKg%LhrU$e-XD8HO;v)=$tW~Lr5VQ~w?wmb)ycDr zUl6OVHu_F)NqOjYeO!WFf+e(d9qSf%{#Xr(%Jy;-g-0jWzAt2g$tZu7f~WA8advjP z{I=#FYVUx7fr+(3hL+jlIxtxk;$JNk4UHT%^NN?LC12Ob+^S|uhW}cxe;3jpYwQvY z&p!sin;B+LpR+DU$BS0JP+US*gpee}GO_d>+kR-7Hzz0Bs%gg@&*)+MdVRZzNbg-#Ljoy(0{tw9M^}bn8Vz1)! zAK=m5L`kDER@Gnev9mis*_0Fa9|&-TvD%Lwl-yC^(mXu77J*F*043YD2}8tSeB7ca zILFt+4&&JhVcP$TmQO@`UfM{T^uuLfrJe)a0V(Yb*6nd}@*AER z+*(lEv7H$CNq|-P29K#C61)aG%rb4g&!w7~jkfCL|AOB?aFpg^KQ4NBB`g(931fFg z&-g?ThXH+f8J#>{n^e_JN*&_TmT^wvZ#qeZy_qaQ;r}%gbiTb{=>+s9zZT*T)%jj; zHr%FW=nwGK_KW`<+4^rnc@Vmn!sXzV(L_{vZ3y`K4a*4U+!=6;E1f>PUi| zw;v_T{$dpBZzIaeaAJhFMJMq0Oc_tf{~Ce1^-<*|1`KVSLLu$~`~HZcMIIDw72ox9 zlT78=jF|%`ieprxE}bfm@6(5lpJQA!e>?Us^pak2))v?>x(uCBvF8=4z&oh`e-JDK zg0Xb|?B7q~S9lN&7We&I>5HgCf79AsL4J|n}E?^QU`Kl z7tgfzNwewo=ltwrshU1*#(%;^&&~gozf;rfneB?MxO|3?A|Y=o=^v`05jE9@^zm7# zB~Jjzy!4nmge(|C+fW{kv*yQ_BlW0+z7)%HD@2hJV&Id`Z-1}eI28z9hBsdRlUuf+!=DC4s$V(w`aI)B zg&ZOZCG~~Dg51?(Kdxz{HzWU5th4RS`bvyb>--|RD5&#J(J1z21h?B zaI&1kXe>-L3(JP(;*4SObB@s0cy_UBOGE2(n=_T>SPHMm5>aWs*i#L;Fv}K?Co08~ zOLcNpfh3GMe#^1MoczceYYtO1;Wy*+=PopBDjn+AxFH?Q|E86TguB{>; z#@oI+o%2h~=3_yrW{?#4{Q8EO0zgwH#=2I%VVat)IqZV5%fN@h?P7irwc2Luk{CJG zu8)jo7Db!PkEI0drpNvrXzk5DaAFv0-W@%rh-7idtKkRUUwBH(H`pb*27wbcN$B4= zmADor_Z_$=epYOBftynd+YRJ#vya*?E^W=_c$DoGbtY)o{XU|d^+wPo69Z-X!pmul zlmzHD_Si(SQ|j86b2|NAlE^`mYB@SJq#poAj0}M6KAdH^`C4f@qSk(d{@ExHfboho>iasQ(__lLd_;Ly3XhU-fx`lvh z&kU3MphOk4k7-d%lE%;(T07ZgH%SQO!J#9GtizXMU)IL!+bg*OoojfrM8%sOV7n4l zcVJe-ZLb@XP*E!zxt1c=xqo9$^RK&i*l~zz8$zJB9?v)s_RpXq(gknXi`N_29tkbg z0@(e5D%C4&p=n#;0rlX53?DlBV# z-&iGNZ4CdVcc)ym5~CWwd&(E2lu98m#_#{!zj1zZtzW&D;Hpz3gH?V}h)i{dwQDPr z!bOU#+`z654U}Qt^gb@&rySFmLxrg3`;fd3im&|LCLr=D?3~jiUQiNMDmIqX%o9N@ z5cU_Z0TwVg2i`~J<~uP=KaAcjKeHczB5hVTy-rz{g3 z?C6=UZO;zJ=O!jLE~8)c*NcX67YDrm9B2ByIiV?VObQjv1;DtVVC6~MaMM|?7z=I+ zuFM_hKgKS=6tdb#A!cCjp@OLv6Ba~64@{i3kWlD9qUjT zt|l}S<9rpbrM@w@kqX= z$ENYDjBd7mNOdmJHqUTb@< z=DGQI?4q?bL1F(FdwGP5AJtHx9WD#u+Nd3z936MgA72hjN;VgMXrk!$50~*9OHQb- z2pNe46k{&A1J|GtBd+wb$cT>fa-VCB6Gs0Q*0-#b@xMPHN?<-)ceL_fr1}ST(`fwmT?;6&!9gy)5@ElWC$FMG zv*GvfTbhuQ#{Pu5Z#=tvcf?_nOWPFOpJ+mv;$bRd7cb{JntCV%|t))bLwqt-A z?e@*p-YyMh#K>;Zp$8>z?jKTOHl-R%WQ4Xn9GgtNDjk|OFB$5W+b`IOV$4*B*zjIO zbq+c@f$JCBy;lg1UY=Zay0jQb3Gy#oIDC{zIXohz;;)u%e{qIg&!D!@>g%9DCbW`~ z)30$gtHJUCUs*8Sfs~9GX2gcrri#P#Qjo<~-fzII)0CATW@O}JfUF{EoL%?=^33ol9D<^w~H$N6vi9`yWb1K?R z-x9};7YkEC$P*`?GO%^+s`%`(#V_w`PCRYCCgNvq>IjN0KcXj{_32S2y86M-x+^E8 zE;UdI4D0;(xioKJ$0?Djk9um8qv!Y?AvqdeqT+a9&UmA6vM|mg$v4N5-c?ihaGJtF zQg7F3yiXSKhHQ?fG5gYAC#JEdZJ4F|rridq#|bx=S+hDb_2O^rC?7iq1L(ByGm=e{ zJtVYkYHul%YV-T%u0-olOXOJO$MkbXkrT(kgAw-bK`WxcBWwTE&Nk2b~L_Sp`OpMDU zBIl+kp>g|c@a)1zyxjtPNwkKTF4`@dYjr8FRV6*WmiOs-MrfW@MoH{g+0h1vKh^0^ zUdv;@Zi|D(Isw0avMyp}r%EfI{JcP^Ao+tu`AGF{aA+roE9cI|_c=qo2}YF%nB&~N z3@h3Sb@|$RYG-kbw13=y8OY)*ZrcD}YeauoVXe_F?GN?AxMX{JL41dLtthc78=Jm3 zgAl3Y<@Y+6-!g#lXgm{ zPsY-QYE-YCkig~S@`E5&&)*K=->^chqSdL`m(GK3Y<~J1tNxvJzma)O8E9rLuKcsO z8`GV7M9Sn`V1V6}yZU*QHHVF)HZokF^npbufBiobw5{Chnhk8v39@^&gc3)5ceNH3*YLtC$N zdX)pDKTYL-w%?gqqU*IHfOx+`@DBJn94NL? z>MN`|c^}Q=;J`HDiBaTA(7O+0N~*hmiuS+G-NTPlqK@Xx14jz;>8>d5=PzxtmR#kY zPGhzR7zBzkYLi2fai8>-OgeZ$M+_9no%qQNtMP7~kmfXU^r+2ddCPB@r?Vfil@01A zI1+$IMsBoj74oiO^6`4hn@>H$@kL|@WKtSz5E>GGu3vLUvc8r0ppg!zoM~xK8^)?VR-#CALjkZB0ns z6Nz)Y8|mdB$6urlxG{>zzjKfFN=i`(3 zay!j=gcr`ie4>9XQbGG*;g#7mQK(tA#;Q0l;-j)E8ptm$>&?;NK2{QDM?$$5$bI5e z>kkC`?reJA)6wG_$b9G}S!cSB5UUINhTI$X?-6agn({yDAeHiuupaFTW{5z@d^w{+nr5KF`a#@* zCbXf)AB(>~XqP(ACSU_y6KcFUz|{!8YohQ+^7qU6yum@)r^N)Ln=8_gcNc;FB0P++Dn`{;U=E+LJHN%$7n*&EFQRA z(WSiN(wGd~SS+zO=MN7lN=6@;gsX@5u)MT`B0S+2W6r{bwwXg&mvA+|+lnQ!kn67k zsgUJAivEJw%%qPXYIzDC-!bOyqd%ltsbp+VyjT|eVMT4Cq76N z#%D^dN!Xp;hdJ;g;lDGspF##;s0G?nL^M8KgSv0e{C)K5TtpG$Sop%YS{rWTWa5=5 zONF%%9u?M#Bq6?stADVCO%{`S{9PQ=#sc+e-k`$>W5|@X^?j?_jt0kXf%?;!zNy&! zP7kulKswbEKOdya(gB5>4-QsE9Ms<#(|_y2f7a@oksS%q8v5_l?&pEu&HRslJBVKb z_?LJ+Z?3NAAtcPu+5wq_;ISH#Zu)S?ZVYs9o<>diP?A4oyXaCTEIO@PWRB;R2$r~A z4kL!h>h%vn_lKi?6VGRJKEvT}Eey3qi~YuReS1Z$8^SFkyP$UrrHT<%JU3P3XZ>T0 zE##qov54lUCnE$_tG&Y_L;qCq!nF2h@5930Vv7bW>|pF`j%`@o-2a2i-@?N=wO>{B zzvpxMCdTE&qq$Q4om2iatR|)LzdvwjCZmBu z=61_1rT_YhR?WVRmnMV))sgCJ@H-Cs2U;&yE8u-gMg2UAkV}YAyc)`bB~+nM9c3pE zV*~@%RzC1wd19;R?o@G23Ev{^K4|4*q6P|&VV(EQKmsYV!=2br{3hYmm8NvU> zBA0NI@fdd(Ft!BwAIsy41lpYg8q&vs4K}KC!MR*@it)c-c3)JT?VQaUv3!q0G~Q9G zEC7XfgJX&x8wjN3%#cbS*weH=2K({8hA88547w};-Z@x+5gMlR?;eUpKdp&T?UCWl zP76WW&b;>yzadgpL}Q1G!a#DiD-k_}T*6%a9M2cZ5H1`#*GA=lm=3za>DtuKT|v4i zSC~GS#FhxF-@z2$R)Fe`LjXQfMx3Yd&rq0+>tl=RUk+w_&%}zfo_62lz>5GhvZ6uj z8HH#u+#9^T(&A&mnNgwPGfHcorW#-QGy`}iX6Dz#XKX$W+MDNGz2yipF&2NmqOZTn z?zg_L8oyG*p1BK9rpE;ltS?Y|Wc9dW&w62WT<%m&%i|ln;o$HJBjH)Z(G2g<+rn5&2GtycJ4fw9~7I&Dt%K-w8SFls(zlGfPcFo5x{ z?+<|_qP(A&lbHmUE*=bg@TF_o*(%1Q7FI|9^zY49bz>+G|9jNINx2vaiI50D=+P7O z82_bW#Gjyo*SD%(!gUN@0)c7Zfo_}@r1peqC{@qSH zEe`&omfVHuo=wuCcGK(ZFvN8I3Yw|&THX}T$ph%8^TU6om>*`E{I{He%a0cXdw_G5 zTvjPUsHe7&V~K$HIl?kf!z1lU5Ox;gWV zMtSFqsBVJaE}l-VXO8yE=+Bnq9~ttS%MWK}6BE6V_spbDHJXKKOpuzUY|lyzm;Q|D zcAHyJ<2i0msJZm+RH8R--kz z5UK#CYxZX{75g*0UanZsf4yi`pj!fGg08_U9C;R4hW}~l)ytIY?r=pQQbSpabTc6j zD-2(7R5J4-KP=dbuk@o-uFwNUstgbwj5T31Bdj9miRDcK2_8&rmZ?|fj9U&u#D2=M z%*F3mpva~vEKzUG)c@&)Qn&B|yzrG#Wy9kP_+Ux{Lxz6EroVUPANtDn3iU1N+yGwx znIswae8jzRC!ARStUQrpVOl2Da{&8jR_GF$Dd78+ZnlAT?Lxw`&@RDBVqp&T$I6eE zUgnQ1ik&vSZs>vi8>u0Lr>Wv)w};v7=Vu%T@;Be|uuN*b)GuIQZnBJP`P0?%G1n{~7dvXVrGZlg zb|!KtOB?3<@BrsPGe9B9)pT>Sa&Q`XfTKem;J&Hrbt(-aZk02jJuoA+%!<^r^AzeD;@u$~<`K>UHf@F=20G&xwX zL{#v`w12{ctYUATy~otg8r+(lUKN2$v{yQyxu&G1dpM4)kYZ`>$5S-?DMUNGZi1nVw&BjyPy5F+-%0ZInYO zM#W&b*j>{->p%GalaYfhFE5u@Et;jS=4r1Pf#rGuZVW1jV&+F@s$~fc>1m$a@gzQf(h9{q-Zl{(sh>&k)195v+lw9)N1dFOL4p zAD3-_A29&xtEDXdZ(bBk(AIxNh;J}|0m;d4PJ$HDIiH$LL>6T( z#6Q?{Ncy{L@sAzzQ|}S(_%Gx8cHl;v5}`m z^9(A~15Q{dL)c&khI0qfYc_Fj5mbUUo|lIZx>oL~M?LrL8as0zUVqj+mS9+Ah-pGL z8DPMv!RC`>`p@nvP2V%oFOUC0n8&8(=XHL}t0dwg!gd`$FRD276CD})6-fPBhEb=V zjldc$oBy`}?5_y-S8Md&y8J(4iT{a*{~)*j9}fKN3-tQ>s^Y?i6V-fMr_R__$B z;(m@r&flzVBexul0$5LPmmWLx6rehqG^WP7MET+J#C51Pj8^3BNUT8J6}`h=z?qqx zI#e`s=yL8TgH-NtUCbYrez-R7i&WG6iv6LpeG5+D-iB{E(ZYZ@1zB)641j|^WK>*c6IFDdaF{X9WJd1FCV`xq zd4_UYre znfA3Gj?=?>ioK-AX=DtiI7X-e(?CV)*yG0;I>T6{O3}Wb-|?OOdtJeQD)47srJOll9?035^O zGN3i}^0xMp6~v{PS;0^pX;L2KS#&N-xC65`SIA2x_J@drAHosn_It8z%2dI<+YvMX zMZO#yllR8&uQie+*z*%>5JkS$TuIyyt-iA!a-q;=lYU-HcA6Fh3vaBTAw9?ITZnI- zO>=nOz*<3DqnQt;Q!#NUt++sbG;yj1JZuA-FE8@AJ3m8yq#uFN&QDStw-W#2I1*c) z1|(83>}Y`Qr0o`-XRn2>R1VitP#oD47?VQ1r7*&=lne&UMF{0dF(2fL|7-N9#1^GZdda zuApT0$PTf99PN3T$Sl*vAe!?m&>UzEa+h?#H*8RDBxc%fT{vgZ1~hvFw+dwNa^tUi zw-g}(r|bBA_I%zsNb3f0V05oew;vO}cRq5r!a*AhCGSaNP;q%DwZi!7)piNoaJy&% z)@%uaxchv@cVo-UZlmInFYS~;s29?fHYL8w)0U$8e-4(z0Y}GU>0Co%tnG+SUt|m7 z<3rT&HG@VDxQl_btN7s+2yC;vzR)YgB?(rmeId8F?VL{15jrsAYiLkJ((&R6A3w(C zcM@~P*Be-(NBgb`#^XclwZa*V>eC!eHixZA7nRPg#oTFd7V>*GV4LsHBw&%+%-`^E z-WdfJL=D){X|FSc(n4}_V4O*PK6U=?_05WgP*H);E(d5#uUS~cjIN733kod-h!iqm zKIpRViJjXz3`kg#jH!2xOyS^M?jCxz*R~Dw1caG(DPu;7jb>M0zZMM3V8yGk5&u3Y zjpB8DA@;DSr{p5cOB_5U?>bgV17WF)w8_zlfx+t#SYW&Cb;jqpmVipKjgX@f8 z|254aKq@FGc;R$-rk7Ln(MXFd*$rQhOC4<#tcCr{RFs)lr;{{gK4!LtH{adtS4&rK z0_4XBjPr+R`7*8oj#&S4_6pYf;jM|n&n*QKgV?FbT+REl61&MG6jiEthZxOct^w`? zwff!UGr|<9pS?I)28KeSHB#?CWmph^YZ2vtmjOT9p(mk*^a}X#cy$y}H@gTSO;7z7>>ZE)gImMo?x>#`MDW<%eot~>jP6bN=w1nqm|@ADwe?OL^k+`Z>LVu zZcH$D!nT{|w&1PjOz&gyL(%iM-45}h%(0|e?Vs{sSZ><8>oiF6-xIcgMz2s?R(A8( zu*+B~P6r#H{rH5SnYtKcP;L9;wX%hIiCR2=I_xZ7oA(Lmatd z`l99v!Tk3|`mwr1grPk>)_$^PpuJ6>#;Rcod~9%>1xsgWq1JGk8WfmzhcggKM7;<5 z2w)uBOJ3jav#*|uG7@Ws5N5O^u2SyogmXJ#ioSXd%gXH)n1y(yI=e&G7Z}eHz-9H9 z3FopJ5Z@2E5V#y!0;YTD8ej=it|2yw7|8nWdx(<5BE`ggY=|;Xb#0jrIIPeuwGeHH zo>z$$k}x7OW1O>PawjN-(3Wd8grTTN!v{BL!9`defK);X2y~;aD~fz=?T^YN z=JZk;^1G7Zm8vXuIGk)e%GjM2y?AtfuS1YM_cFg8IQ7nk6RK$3H$p=(bDn9n2n3|* z2kU+@5Go|<5qtiq6-h{(lZ@fVBF#JDMtFggR%y;vDNLX6>Zp9A!p1x|uR=0MeI4Z% zh>jji?!!u}b?nWZo>Am(EP{l1B_*f>VajZ}NxjVWYyscRfE?yoIbqkm;-Zo|D2<@4 zqSR5OF027py>pGjQcxMJE}|JD6xYRY{Ms*~A#%2;RxBovyl@a@_E~vZtzVObGEiyJ zyRPU)_%zUGO1{09C+c6;3aE&$S+z2l4a`9LPS-PS6r5xrkgvUb^#jq1(R>fofxPZO0kg9AU?F?3{vYmTw+>a7+?oQqh^uD_KBM+<0FtFMNFdd2I zE3U450w!w%k^X@xc$}*~O3E%)rYEvHn0A`38zi%lcN`G^(O?m$Pxt~}*5+2}PWab8 z1j!cLISpNIV95KOzI2nD6Xj`>{yR!xXX110IdsKXOyJIG`LV-oq%cJJ0zdMCC4?G3 z#529NWq)9zdX-wF9RgL^^}`KE2+ojc$8#4P4k*lK0o0>|uCKbU+ug_Uj9dk%Ocs0` zXwXZ3M9tWX=HEE#>q?YB@t=F#PU+$^AV}0sX0_$%3g5wij&v5`^?kN!7+O%UtP;l1 zsnk=Hcmay6%hWUVR*)}Y@Vx`Q=jTZtj^?x|z*N{yga{Hj=}``|Y=-wC9Z=A=%I6yD zZRB={ZUxL2?MgG_JL=MSA-6?(Ftp!Ly$PFN;(uZGk z&s#x8U@h*x!Ep>D@g)a{wK3Y%xO7B;4!XR#o?jl>{3O+pi!syryXjO$LE9t6EB`w) zY~I6YgMDWlPZayq!ADSNJ%H}hdK?H2OvEmM3+>H8mXjk}Ztz5&oulhAIIT^Wy2q+O z!);Oj9%aY9O|pQer{xcCOSPP`lBiQc8VWM4Lch zp9$(t?V2UH$OC9^1C05+8_>vDX7Kg*;h*Jn7%gOqzHh-Vg7hqt@i^*#Gmzo(|$9qKt zlNhe~?oM{Vr)ztVOLNi68r2$07;hb5jf!@kU-}Mn&GfUli56qsXA(Akgtk4nv$}d6 zF=zZSqAOE7DeBC1_#2kjSz-jE7}5xh0GYgjhqcQMjud-l;T35TLp+r1ce$g!^s%+_);60Tb(TPTEPjIIgyoyW&;;qRq;T ztE*(fyDGy-ewm<6$k9WGGLyRv2~X~m>cZU?b#B%53BW%vt6-bl4eK!_3uY)|tX1HS zr@n|n@4A;IVo})|*~^zZ6lVSi^X+3*>o+l~usPAMEND&rl;@}%zQiWR zv~1l8freYIF@ApB6mcX7lF}iM@gjF6p4hi3QT|~^3md+#BO?#voC*DBA+w2Bj>0h8au879&OQ0bMboogor? z8byRmI0EtOt_>LXye-ZmG7Ug_+FL!^G#d&iI$ba=eW7EP?@=c zWqK3p@EO4+{ByiTCOK5+dDO+S6}zM;m2R}xqTRFMD@VblVt~a0LEtB8B`4Iv4-czI zKjttoM{Hs2>~ERHG=LNCq`*{mxHZM9T8F;Yx`qjOW4+uN&=swQ zF!Hd|D}0QcdAB zZYx;g4q+Z1WIBB>&#W==48gAXkk*}ic}i^#fI={yA~gxSc{Bpa6W+8UNi>#8egRb{ z`5n$x2iRkK-R0Op2ShI$M`GqzSz9GVtt=-Uv)4JxEFTi)x#@H&ah}Cq<(@`3%@E%( z#Sm?6&Wi_3unNDM<>?{Ag)3eoz*)ky{OM(sgoKM{KRbiDZ?Y&s#bnpO6EF$`{VAh5tf?%XKA0T{d$3u( z>#2s`>3HVM?+@uSNDRvqO z$DVHL1y8APzd-e6WvI2X?_K~E>!VR&`qbud3Us=3AGTM+Eoh<5cP6&(~Yd4!>z*pP!A<~{j&NSXsWc3BoGsSnzU zGVHQEa6ufhVZWhI%KO`O6izf_hln_V1!wi(l96XiGudEu!4L`-?9R~0Ysv|DkYZ`N zKyzp%hBz?J{s2O1!4O%&SRqSW@o2A z=@&b*u{~v|J4Al(57pwY)3@4=FE?-Bxd5$bNt4k8OjVrv)%%cPbJ)Q!t$A;1tAv2_ zmMo!C95)A6bXN3bD0ZobfA>}RD_Gd-@RxDr91CxRKKkV)S?<~N zLv^1O>gl4&3hHB1Ffj@%a?Wm_JZ8YyWbcJezKV2u-(-nqtSiX-Xo1y1kLj&`;-kvM z(R$lci0opyg=Po*0w>C7NRr_;t6nG(hJKRpR zogcG0keYtGvGx?}1;MV234agv3;Q5Tk2DlRXzUA@dt3mMJ*z8pv29`R$yhjL@wLf# z#XS7ut`g6sMKK5*oo>t?hR)NN6Kva{tI#Sw4|roZDYa_4@M>XTWlW_>`fbu$b&pTS z1}?-_BZrWS5R>P!|Hg*~wnpTU5lz4VFhyu;&sjofd_5L~ z{n6o_1NGV$TPp@h4Oy|xS=#~Q88u{{kdF#4;VD>}9nN}OtqGJ-))dN@?as)2OfXO43?6MSjNTU8ID2;F} zxlCuU*at|qKtnogxp4Z8nyvXS=-4Q&Q}IWF>eUiapUkaI*O!0^N3uu7j^^Pg$h}?# zg~i@UTi{lhS4w&w^bv!D0)jv-ZZOogfp(A$;x1Z(5G*z(c_lT-v%bNof>;bFp{G`- zYZrCW%YuCd2RT=J1IK=nRef6#sr+f;E_dkoX>;e{!6HDho4>5{y~b)VRLxK&lv@Pk zih>=2gfKB(B}P5V=B`=J%U9&OkKl(ssv#|TT?j;wp?pwX-XZ=-gq_P5;qP2^} z)>7aEB8;FFJ_@6euat~JB!jU{3kSXOmYTgQxb?$$ zO%yC}^rbEck#;IZNueDxd~gPLZ#VI0Y)DsroSVzaNiFhw<_x3av#L{gZVGGsd-LP@9}3C4cL!$9Ga;-sz@ReyAN86I2|!0B zt>O+}F`9CWD)Z`E%RTO3bh*5Lw7kbvG%)OwzK*!q!prO8(UeYAuFIj}B*dnhoOn)@ z`mU0BvS{~x51{hVR}_o4Ejqbc?g&~X?6nBR=qhinaF%n&3dLPBS>kc4H5b1sX}%P1 zGGDkawEIXa{?L8nZhe$De0 z#GfbFWNr*8CTp_Fj=e-?Csp$ zx&V>jS`E609*aRyvALbolV=>clu?xR-;6(2x>JIU=5Z*$vp^ZzTn#{4^WYTtvds}R zs%t&VFrqB^f#hll5pl9TiY0Yp6sr|?kRS)BX`!rIUe<(FZ z=tsEk61tTGWRVdzeKWe9aZPY;XwhfhGwTyaLLBfQ+y3cN8QJ|#0iH!5&M+48HV19w zZBlq$pBeE%db;NJT5dn_Zo6ym(VHimGDBc{;KqR%Ogwy6Er^toND*y!LtwYd=ok33 zk<^Z2@D3U^Watziggj&kuShVHr)M7W-9JZBcX7aE&WF#3z_)w3WLisw{-xCUfdSN{ z5o-1cQwr~gy2z`7vLa~t`)+ILx;zPT=5RfzRfsQA1@B}dxd$53*%@{^XY8uoA#Nr* zCD%*Fx&yyC?YmIe%YEhSi)2Zdv*+xYkeQhjP>4KoNhZ(0EA$-^=g6~(;(p?`lsaFU zi-I5o7Rv<26J{5=*bYS9OPh~vsom7qleIghywY_Rz2gL4Q(G6vtREt#c%QonM|c2- z8{1|3Pq8%6x#Ej23~;nD5)L0{C#v8f@-y*gx!{aVMo}O_pU@}|+&IBETY+mZT4~FOrr8&mVTU}mqFs@?1w=6&2r-!a zyCptful#t}#5GXrTfYlb4q0IZT|rc57wqjF%98!tGZ0~Hw9?g@Y5ChrAF&wlaycL% z5S>UE;?#Z{JPT;8p2+X3sxt1QI5)c}k#yG3iKGE-j2KwpXs<`EbEpmTR4=&Ra1H9v z`d{lQHy8dN08v1$za(5r{gJU1!EWy|=P2ruEQ58`ej$y{)j*pVBm#UiprerRH5ZaU z7(>fEv|7Gq2Csy-{hTB6YK*3R!8(0a4K{5S-)u@R%tXj~2J080?HS%lts>Tc3EVQcALWW`)saR>?q35qk*iYnKxXLcG1VRb6i+;{O)m4%wlQUr<# z(?R&n8KyFjCVhcTh(ZB!I9C%&Dh^v78$Da0v*GK57}!i{skGTNBe2l#Og5+;MQ{1Z z@jHx8ThWXmWGxUC~&SxcRO0YAm~nv zP(cJkEAbS|;%ITR{}x9GhJQ>OAwosSa!S733|gCjkrxPml6Ze}F$fl>QvAV`?EbU= zy|NK2`PsPbS=mX&WwT~rDNtRj+!*4cCctt_ix1uTtq4dNI5*l)n{GbMjdu1M`bzLQ zoqTf>X}z}{Ye0tCi%~b9ns-X3wt{J+VnHm|bJ;ga zj+nT)VKm;n)KfFHnI02TZ(YSBGjq-)A})Q)>mIc?C8`d%vRhuf}t&c%#Cwqi>7K=-8eT;Mo1& z9(72mbIVzaj6EFV%t)TIP>Q*yL6!4am*`UCfEvxgS?hb1A3;5cthrL*p5-6iBz zo$*a}&YR7cQL=?4Pqz&@6;zsLY6t zKCc!-D^RXc#fmQ#iOyj;Fcg^dB_D}VN@K7v*n0h((XQ~*0j*~?`$#WtdCmY7iNE;D zP+DlhMOYlu1V9WgUMoR}D{}2rz^f`#n5SKmwluBRFc>JQylNq>hFBMv;PCr@Q`_)C zi*F30DI={mhN4Eb@<p;Z@M19!3!{wJ+O5aQWWIkGxK`med!6rt z?AX7FRyuR6{Yza(A2j_&br8^vqpxFr+z`-x>Zx1tzS+_+oW@(ntiAnoaeN_yDW41G zv+0mn(kyJ%x(gyGj~Nv`#>10YAyU8>t`re9y7_L*0OkNab?WoGsCj=N5gcOJm-BJ1HtI3vhW>qS-r$x)b7n((#07)#5((AMWgW;b zS*#nUn$VfgDj(=gcGU2|?OAo$xe}ilt40)i0h(RZaaMJ1pmt>`$xZR`DiFZPEqjsqh!yM zw0kaD_C~PoTm~HmN&2_FD$*OH#Dzc4@?=5UOb@_6v|L6I*wxG&zEofMye%*b@wDYW z7%-I{ih^2CTVR+VdvNk!7!%#O$moCWhX4c@#5NNk)caXb$KWp#L!8%bSI;D+z$+pE zW{16`BN<_jyj4O<%lU+`=rk1VCf|xUnA$Nm)Ia5BI=`Ly&aGvJtZ3**0{X)y@veRIp7E+fB*mh z000QE(XoSx_GM(_m8p)&e(M%!!51+Ti^Pn_-Oxj80{FQ7axbX#3kMdzGGFPhN`KM1#(YgP$n;fUF$vj0X4AY4 zcw@d^+Os)}h0@t;*SIIwZ69}GWK|n!KKNLy|H8NG9;-qwegg-tPalh~=kum(x5)&V zG*HC?`~oa9jOS?uwiA4ymCdnvHA;Zj@&?#G(nIOx`acfsn&H1813qQk1xnE@n*b=& zBD!9fH_dtvn-3agOT9+QLOvfzBB(gnx+0u28=2^GXGmBJm4E)zPwCvc@__9+D9 zZ`iVYRwQJCd!XicY&M>vSeaS1JyJGROx*V5Buc?G{GMoOv3mooDmPp@cTStVd4K=_ z02ht}5tjHnL}Q-N|@E(}JK|BeTWM?fts+28=s94U!WUFq^hm)3Kz5mQSh{9roRWGOQfwUCH$ z>p_{WZ}99tRKN6p>0GGUDE8Cy(54q6^=jhrWXg>(>Y5ZlXs?`x1-4+}+VX-JpKs9L z9C%H5k-$i6fd60~0G4-dr=)P2_3I(r7R+KUufKkMVj8dl+qmzM-AP6B=;?bet5Shi z2abknH=VhW#t=;O6Evw^f#-Qodt;!n-866c6AXChWV!8btuHiG=WnBOk2SI zgB2F=0dcG7Peh+wP63KWSrS_`l4Yl-u#-mvl9NN0ATp1T1ck_B{?|4RT?Z<%r4>Ml zh1RpF?axR03*#*O?3XAZ9DPHF$oQlp=5b0aT(q+E=Shw@!gH==f~Z$l;^sxY=RtkL zLdH6_QDV48hu-cw+rY~nDU^)Fh85p%7oa*8Mkp?S;gEV*#fTvdx-J3Z?x~=gbkJ9P ztNO!G8=4VNHKSO@3q9WA)LQZGny@qe2_y_Q7d%kzJfnil=YACBCvafDWwt`Ak(Vic<#o%$o=lj92yWvcF7Sw5cR%{wt?D7DDWE}6uKIOhCn4Wh8M`W|QXZgizXVs&5^Te-n zL^M%`b=4bB(OD_kh)42QsdZJ!JLen?7dG(waESNE1CZzR==n79ZZ!|@ zsG50u9|#VEFO+M&oQgfgY|NB+kmV-y(3lmst4^8L#-1qUV3c%u3|ph{v#~MnhnbYr zRo?^NNiROW^#GtnvdiZ@aOJ5pyBP>69|>?%tR!RYHBG`!A)v3$UI#XkV_ejJBd&;^ z{MFFO4yzQ5b>vkCi#!^l>=D~N>yG&wBNz&bTg9CV%`HD9bY2emYpa}MUt84}FStBx zU^zSV%s%U~tQ0DIrYUzq%{I!UI+@p|v%CQYMldjL4M*UdFw=3z4mt>aA$sBQY3qHXs`BloZT|uh z;CzO>~r|llW(T=xYQooU8nJj~LI-24r``j7^m4e~JJJPTOCp&4v&^X|5 zt}dRhN*S5$=5Ovll3Dq&J?p9k0{c3~&g%rCzuWu+en(Tb? zPd$b0r!S$#DSSr84TN5Ss?NkZ^2eI|?ZI?Vd@X{f-!Ov-^z|nP<4;#nnlmxSD^G+LXy_kf=ky-16%;Hc|z_iQxjCL3y<6%~Rs z)SVeBY*aSgIF=mToD2!Lu#&@5VOtFk8N2cN;Kal}5QIlw$>riifY-w~UTZNKUw6fx>D(SPA5Rv1U&iiG2ekiFD9sQFQwC?x7JfmzS*NHx+P3bqw+n26WM_?D!>Q&AXtYRR3 zf!ys1JH6yiFFwTNJc2)Ua9p>FHm?;Privr-haC|-6cLMByaIpwYX0^O0{(N7viJ5% zoI11-zx(6291xai_Nq!?-!St`39(>CvFaC!;S(C7u~~>4k;k`#r`i3*!)=L|knC-D zZ;VF2f;c*5Qu6c-lt$OSGMn6y^WxD+OPvDX>YSXEu z`Q~H#Fz$ZiT#=+(PJn@i0NqODf+l98j|JZRi`dDbL!26^WEyQE!=AH)_n`a<5zrCm zV8w!h`0ybcQ}xz0>ZS27;!P>#t1Nprf8eg_);=Zb)pvKqq3}4ge$Rg=#`6oaVl&=& zva6G{kuEWn)2cNC^pBpRlgm*BNMlNso?6yoZA$>Z$YgRpZ}{-E&Xh~p?SvUY%^~d6 z^8SDW$4V#MDhGlbGFhgCyT(2Ql5jF-8aYWK4dNOuK_4kL&!)yKJC^gIFZFA7=3s+f9*-(2ZX=pqPqou!w9ppoYJxygdc;*i3iWZd{%G5K?y z-srNjtvC;uW6g+b9T{zn@Gx6Fa#|L#DxNQ;j!=yChMcUbExr1gfd7XCnux6ZC98?q zN$*iuCbJ^aVp+B zm_XG&jjZ1y5{gtH_m-y^hkPnB-X%W#$z>ahyMI}ZE+0(`=vna>WRa}$rYMV4>;)S) zOwy80_1!l0FdKcr;m0C)Y+?7%5UuASD<`d1cmiw24ipnR?)V)xnY8qvvqVDNx)OS? zHQ}X^k3UXDsc?iimGD;=@p!xveJ2Jdd`lyo0}M>nnlh-4Ei@^&`$0-aF0^*)%3Yib zU^AVkBvN}Scrb&julHn68$Y4;3{CX=7zm}y*$>#2XD=0V1M`+em4ZG$;W^gQUjF%3 z9LEt^PR&HZ(-|N(b1Q|On`f7*Uv88?owM{fs8uuDV$Ny)<3lmP^alJT{!h#mO56jL z0x_C7Oi&Yr(UM^G=fp2iPbWlc9I84m2eq?ck~6Lkb@tsTUy5)9*!(&Kli#@DCdtkCYB*a`vmuvV%1f>>5^Ho>%;1q zS%XIxl@W1kzgLJVFDTcKfH5wNY<95Aoe*T`2{=kjt=w^`9f#Cf2G+du$w)y*yiq;e zv8Y@UzLVDR^UZDtXeW=JAfpfu-$Hlp0EoVLx&ajKBO(-`l-*fZa>rZ1WR`;JG zzU47)D*K*Ktd|okZ+JJ*xd`g`Of}>BCLlP_(_n7t2OT4FfR<}s=)XH29lxC;73>cG-7BUVz7MWOs${_OJ@-@pDx=3o!-YM4`}EtWs_ z5Z_TIT|jy`)X(P>VibwedchG-Qw4IccJ~HS;F`;z=JoryTm3oXv^B3|A&f3~|8n;o zeQ{ea^9Thus~XTz5IfUlg9j#VS2c6PDIqAQdH4?BrcBsi^QA-BzMa8d(Cng5XrwES8FTYNtitBVw6jPUbGN-Ge#&M z#A0-CNN$04)uRRmtU{REcKz|VeNF=)?tf6uWN$8aNEW`CfCVVcVp-FK;}~#&6%kC< zj=5Hr)*U2}NR5%dO|_n@F3i7*2#fR>nnb&_GzVIWaa(^(z+ht)*BWt(wZpT&LYV;O zu`N_D0sJCn)*mti2=u-Gg{~!c$86^}nE%gaDpj<&F=he(?AKBE9N+nJ(h_6W>%Cxm z){}Pew-<{-eu4-s)}*G8(|C3djRjFW*c1DRv`w=iXGH$u(XXNGumM6uQ<8Kdk2M^R zb~|`tB* z@T@J$!;7z~sUSH`gz98QTh5RCROoI!mv{!^PeS2N*}SXeeESrOM#yN2RzJ$}79S#n z%$pu+4W|p;e5(3UkEYre;5x1ckw+`_bC&cT%yLFC#**;^Xt_pTT~vN49gnHECw~IK zo_jy53MZj4&@YgYW@(flpTOezkvZXTxENU*cBDU*j>K=|gM*yXcjAoX7S9|fB=@}g zFEsVw7}S?8{S|$P(|P^Layz9ri}VTUcCErGYV_hXRo>Zm8n4d5uZ^qKH%NxPeA2)< zx|370866oqsv9yE%tj?f;yV*3A3JWaMLYxb^W_`?vlYyMF4)!R;DK@1$74prpc6f3 z(X*LX1UAuhKHrB?4MC7^pzvG54DG@E=I$(jiwyFjKd z!&oON*zp+?cme)v0G@S%Z47dei;QlwM)yM5=})J_$4!HSGN7Q45OF{zNRhw1jD!=054qjAprIQC58vzq|e!z0=! zFX|l-*>gu|k$%8&AcpFeX_MNU&UQxOpDX4l(H_lnrkg*Xtg*iAa| zN-t6&P+oknssH7lp%`CZ&SMjXTETq|C>c{iJRdK93~#iv;YbG_aqAec4m{)5F<=~d z$E;$&IP;G{aGNgJ01a*R!C(agXrN$-F|Mv=Gf-EZ0?{(MZYu3}QL8KrCklquuj*Mw z0pUS4O51oDC|ew`X{#FsFOACMmip#iGM$^KHykqHf*X&2<1wEhUJx%JZE<3D0!=$4R{r@Q5}t=g5ZxZ0PzBmpbG)k*I%W zWZSr4p_xs}@>LfX=%kXF8vA|ni7Y#*sfNQi8f0g_xiSk5WT6z#{R|y=fShF6)Q5Qb zh%s&4o-Wy8jAh?~N%X~J*j`)_;Tx~}u09W&S^9WAi9#6vq-yR{9s?KtcIYC~$&JTM zw*D<$xBbZF9FtT%sTs;cc`0n<&e6^<0gV;3p`i1`X0;qZ1@ne0JotKl+ZO@xOoy5sN0EfW@gZ+dsLsfUR!%X|30jPEA;9;-Q z|0Nj-rj&x<2Sgim65kGC9O{>sb2|0REF&D}H zOy}uIx<%sR!ba1lf%UCRPm;z&SHRaF^^4)#{LnW~3nZzM-i&UNOF(p(IC?OarW*F-ZSThA4&q!O&U#(jdlS07g_D9I6G-?!Z-2V12RAt;fwpj5+jyC}Juo zy`$!lji>pZtO&+nY2EdU-;HnG84gcE$kvs=sjJAUaak0%ik1~U)> zGN8@FDQNiaE`UtskkHZ_G7d`cC)gz~J(H@D+^%)!kV&JEFOy3rA!K(~GVllXSl`|U zv?SZ0|C6A+Y*qE(s~dMJyBDH*?qRhvbcjB(qsT#+Lk`zB_HWKZ)&++bg`fS`OLq$u z9+hyQ{AR|&Y}g1#DK<&miCm#N zZ|88h78ufRZ~s)pvIj7glt?m;vEyl$*IIXm2~aKXJHLM`cm1V1V=^W1)a{b$dfbU& zs%n0`lky837c&RQ-a0{j! zI(&GDAx_IREr0lpF7!Zd3A)MvIcoiBN7^JjZ zgdSHij>c2jDuor-5esf7Fn-Kt+u@;XH%A)88eh5tfU(R;v-Gr`r)A z_`MZu2mcN8brXit1&+)})S)hs@Qd%RN=#a(&`-D!uwm6b^qFha+vVW%sWw?R+Zzork zqokdD-fp@_8&w58STlCVbN+siT(fUYGZHx9tv}8rrHr}S6)vVYO1t{Y+a|}PLfil6 z_xs8NnusmLBG`FEGu9J%^qlj1s)FQQ&eC7;%}?SHzD|bLy^kX6w4FD@@t})2hloMU zg+Dvcy~G>QCguHMLU{SfBBsKkwDYHtByKbf%XJ2dKW7)!3s}j(T@jsQ{SPm6( z;g=OffM$ZQaK#C0iJ16~==68u8X%xdW@M6V<)l5Xep(*%Q?)~a2l*9Lo~Tl-t2fbp zSh2&HH+8Ea1rI>gD+AhqCNOSr&(e5LwEwVnN8{ra0sz7p!jG72uoarq`atO79bjQ* z+P=ouyp9KH=xsev0n9nb^w|5xIHYeq-v8Yf3O&2*o8F4uwA>c5TC#<`m_R^ugs5}h z_DSIGfKG=zd8+LsJE`GRK*0reAuNA>CnE{Fyp(%i`LUT5LHL+Lwq+f^bNzHpKPK+0 zre?hi!R-cD7ME)QoyOi99H{ok>)(S;z=%>9<}7{|X%t2{YG?hWJ?cgTiIPl!00rYM zQ(JnhqDXgvyMx=+JH{T~C>lDfdO=rm`}g}r>8`@_kjRZ#Rp|f#5dVHUlr~r16~FOt z_2D|aePEx(T~pMb^ap3%IrP<~#;cN2NgJyD4^Tz_f*K| zXTELjI2l(&Za+1qBXRQBQSVKDhI-$P`l%B? z#kZ#b35$)U!yT45plu{zk=UK_T}xVu)C+5k#jM~Jhw|(8{cj*bAQ90oNikp zR))TsYbtnj(T+lA1pla~V>Y=%H2vNpS2D&^ac;(9>0JrS4WbreT)v<@T4 zZ?Z6mYTh1S4ZLk)8;y4lB*`6`aCO*9faS69JoR8+d<7^X+Y9YAPZSOYjHhri#e(<~ zwW#X|*WdF2pd)ZmEE97Q8W;vTb_Br8?gbFmXJV8{z}A9kjMrZsetdV%g`X;VM5APouP$M{2xfbQ1Lj zu7a3gzgL5u6r8pT$s-r-_cjikJRkxNb_~Hkx_l*U3}nlZ41oZ z#l}?$Z58rt5LHCj=b)}rcHUG;2z9&t73jcsJ)tiD^7mnnG6kMr>%i~*no3s2@Z#jq zRr1`5Wz6nbQj=SB2f*!prE%GuT%%{45Q<#haJ`UeVOJbjYE)DsJB4dJ-r{sBsClr;{Ean)_ znii8?_F@Wx=gaM`*Uwd0oNPbD*ra^8Zku6-Cc3ZsnJ=Iag^yT*aoe2>aupfFubJiq zeCbKeP@4%}?foxiDib=K+by}f4K0k1`b4Q=9fy=hO?ArN6>jd0`EWkVx#8}Pf=VwB zCT$gM08^iLlM&X3h0HN}FVry1q^3}!Ngke8ik}4>rlK$5wpuhW0YON1n6p0v*!Uk| z7uG|w^guL#b5TW0VSA~O8K!(V9!gB=0N`Fb{&p$w{8uJFr0`$PzF7paK*qf+JCZ~X z^$tXu{Z&=E8F#@#k3NGUX=QN(H&;_YW-WDJhIWq$Ayp|w?)>0~s}iEqsk#|G9vy8& zMb9iePi?vt>jyO6;$hBN!4*f^kb{fIpIpx~5lb!yP7P<`;p@LIBLi)QkeidJYf>iG z%=1YIzA7$Nt_HDz{65nldljJ;0xgUShnXoQvtmt&#=s|tZ@6jL@Z2`X)}cFI|9%zh z3>vNQm5SMoHj&|^{^PNhiX*FHusx|61km6Bf_-iom}#l<2X;ov|BsssfO7zN!M%x{ zu;~{~y$jFi11)uB%e7e7ZL*m0z9r)X;JDW>AR1&l?zV@Z+_v4LJ z5z$}b@bne3EKud|HIXIG{CI-CL&t6}53PQi`zL%5FHEfUxKo@@B;=tI3Ny&%6lzW( zJUX`5s1z#}BFCMF0ZyXlRu|iv5S?^8{FMe-8*T!>1P*1y5}9BogE6Q)TF&X$484l8=vy zh3gS+y@uBx8!*-%3WSdX-D%^+Pw{fNUzo>2r(sG{s6?72K)A0sawttJukF2RNAQAC z-<0=-DcoTx4%hmS`Gy_VNiy+-uCU{JFF{}sZJ)9w(NJ(WxzJRkbt~+I!jk7OduiJy z;l3CTxvIVS53VQ8RJjL1ImVUqhfFtbb$_@*yx+4tbZu17BL?8S(*~kC^_Q~Vn5!1#rW6dDYY>yfJ zT1F10)|TsBI&g=eTt zP~eUL01!~rOjgfZh2d5Ej=AhOh(%Uk(~-^)TjH^K z{%6x?dZrgn&W7XaY#EkuMFHbJM&}xU7M9Bp#>467hO*a|3-!67tL6H zuUtL|!4C^l)m)yXQ;CKKIvT0oA6OJ}xW8oe)Lvs|^#8S?pEHEJjI6K4A+W>jy;P~X zv^&mn-Od}cN}Qt8ICy@mF6ni3SG;f_H6xxy4_&S{IN2wsRL9+zb(?G7O(D8ndB(C1 z(CC-{y zgBO*pqNiAM8lc#)uZ#WQ=kZM(g+03dUm|I)ekPrI^P&JbIlEEim6scwoCH5eA9xW> zq&UW}f~B6o2_};P>zD+L@I>X*|1taGe|F%&WlM5#$8itTsV)K1I!K*&8*&^ZE*^jrP#f#^gC1+h~7U!rByOK4A?Lv@IIyZ_)ToRZ-TL!71Tgt0puCLDA zmmo6TB4^&jN7EA>YjsW*>GI&Pus4Bf`-Yj=~3gMYMoX~#-nO>SS-iSAVNMG(vcB;sppiOr>W^WrG7&o?x~spwq_piRPwRoo|0q*L$uSuWF5ns=KaTVtz5CBFl?Hz`#qC%90S4A zg9R;T+%cpa$sCFv>X(flXX*OdD_SB0NYIpIY4ijJeJj_n_C!h3|~#_qR7Oy2?CA8nNTjzDAa^Lp!obS(UWY% zb5v3Ah&-#0MvGriSMWBAlV@aTcNdk9yO{nff_YHRc0HYV`1KY{_O#NW9I>)}8ffaP zV!&3YI34Pnjg6Ak895AXfBag?lRX{Vo09QKGp1D=mQ9$?sr7sg^3KDt`{N+0KSV{Mm)+3JOxhPg*rY^G-L#5 zAROP7n3>hBgR-|PP5lDOws=Ac(bBiN57pp$zMm;sN~Z{>i?(gVuR-xR?AS8un4Pgk z6Ch|@w%2)i!F@9?4Al=3fHRqaeW7{R;{b%GhZ{v<3=H|zR{Feb8N^?Ua@FWMjJZg? z8mRzZ{kpN6GxXO3iw;V55%yI>8*GDfTSa1lT@Thxi=Jbp6aInTY`-*=sft*>LEtb; zGM4U~$gX>(kUhVb%VUj08g=Cjql~_epIV#ox8;An?oXeQO#x$pTL3e6E26I+2@IBk`cxp-f1T;X=Luk>OPj>-`XR-e z(Q_PB{iowwTO>8UC9OTO%7sQ!-D4y?sn+^#t0?LPqxg7(>r0b=(8_~ftK=XQG}S^x zAnvsWfV4IYh;YfhTLB*^U>RKSca*2|(dpLGsPvwVYgEWAL~RHo(MdYQM*I`>a&N|q z1w%aybV309(^P!?!3344ee_V#1}7rJYjMw$Bz4L`Ss(o%mp#YD__U5r)nXmx*1HF- z_;mR#)s|#K1ng%iS;>Zg!KGJtgdZ~RN7L}q6d|Kis{{0Sx2z2x$@dL5fAJU`B-Td- z8Bon$z*kbA*=GTaSmm^q>Q1!Z&fR&q(fP6ekiuq}G-)RUWkWA@BJk-Z-oWYlW+9F} zfsw&Q22J7T;Turl!B1OJ?oh6~=&cO`AiS;ST4XEXJb@-071ZivjB1rTgX$9kU+qjs znBatR!!8mFAwqb6WQ!?}H!70q?(sk3zj5+?f%0O;kYK zY7a$CiRdRL1*dcM3AN4XSik}&ITd(^z&+VJ+KK)skGPd9Xi;ymgB4CTm(`Y1H|;w? zt!?1a?~$pV!Nr4#fS%=dwks{`gUBzp2YLVV-Xpl!kqP#nZ4Es}lF|Od=Pz=B>Hmg- zJJ-8nFtqNw)SayX*8Bt2)u|AZolKJ z>WDu+wJaNbK>wXVzAGrtYWW_#F#7BXc5dQHczGxQr_SNnY1}Vj(-3BZKsy$!qtx zQtItvHizwcOVCPc8Cryw5^|^p*y=zg{?G~@9^g#(W$utL?mN)Y5aiw4<4{fiieYpF zy&EJwnIV$l?_=xC#&+Sx#0&^{Lc%bV^|4Ve-Ca;Kon&X|u`Wx``3FU)``Ylc{)P|46^EM}p=tc#5F|~&()gID$JavdnG&tx zDK6Y#P*qWKN%R=XB{9Kg6pcG#T8td4A0CLEbSqzF&pC9u;*zm|rgxQ#(?UcE7ulod z^QLkg2E~TVADI-}p1QUXrkv@bJ?6*EimBWg&De!KN`sIHRChgQ{+-Ro^4Sh&#fmBC z(hL8lk`XFO#!Tr?#Qti!wcKppB83~9N_hCu*~2Ge1?0#$*DdnZplnUI4%#Eyvp=&l zAcnj2mK#_Lv2*R^?>UZtb^QC^RpE61r`hNsxeSNZl=Mh)>$gr!-w3=l8sVA2tdGom zYZ4t2q!@Qa1DPS7yKQV8#cd>O!A*zmd&76Hb@vuG^~JYQfPdJ~mRnRY!N=nAACrNG zhP9jK(o{MoUR+~L(qqnE%-zp3m&gPUqxFlvQ>=~o@g)iSwVlsp&+`0NBRa$9cTXt_C_HB5ar(d~*T(P3 z6#AnbCe$2-6y8-?yv+qYY~=@XC4eXHM0oy!p8g@3?u_)g{AG4PdvQ3kj>G$Fc^91z zrb5)8J@0|r@gd4vx@azJyMp4W|Bp_bi}989r+}0(RNSI6gnweWh{Z5flVEY%u_;Oz zg}FoE*J`TD7{V-MMrN$lVMu0o-i_nda__%3UcNI4kZw&>s~B5!fHgHRQwL~hwWUS884;(YV`2`~krLv#ypXAZTq9|?z&ek($BGvm(+`gL~uor$VX?9l*m zBDzIg=p&Y{{(|=kek#fGrC&1r=)%Q;KsDuq12L1#-1GP6U4KYE)7@O_1mWj(%6cZa zdO+8U$-p8+JzNNxt{0H{%Kn0!DMu8^Ug_6tl|%zN7uPQBW1@luFtX2!o7+H0{FD>q zBt>W+8e`I!kNu)SmB&l!E=iYsP8%K4jyx^I?YI9kNSIMmrX2Iu1cXGy!qHNMorf0S zsTbONeqY-y;9}7xFUn6bQuNEORbd+ty|g6K8x6+RR|v{Ov-cIOLRFs6kkk#kc?0WC zvoK<2(VfrV)ik4XEU|xJ^BYpF)Dl_`aWy3k*K?d&I3*2n97I;nmbr{LMINvE%G_#V zHh1`Bbavm2AOh~Sd-^4=7EC(3!BsMkFyK5(2 zg=ezJ=0yK$x-0U;x9wAh|Khlvu`!NJV4H*}Q^O=3T0M=phWd;Q^qrQt>$?h&h||{P z%(QbVm`+iJKj4$#`06=^UI+adCvI!ej{#kr&O@4C{$(;6N?_4^^OzbzeGOaMDSXxJxB<%`XOYuPMmOAn?#oN z=&1q|m<;6Y;jmo-i>rP6n!i~17z?7JBfgFD}Z1`K#@BjcnzX59%=vr zG167-fje6~4?WIxhB_9XLu?2vege_%(6Y=-uWm{LsrPV0VQGKvl+EaGGWs@Eon#E-^qa27!AX}BcUgA}_11C03U4#)p*sEzHL zczoK1-bMLjL3RQzTWVH+B-W6=LOJ;--_+|Dd&Jx6d25Dj7u3=QYJTUm=e9VHct$m1&RY& z)=CT3bI!)Sng1ED0pXen*vX0d7U8Ok+1cxWp?IU7U958yP}S9RX6_arHxc(xQ>Dij zI(F~srSgG-?@0Y5?3Y2zIe#;JpjcJF4Qt|OG`s)ivQ_8ReJ0Q}o$Wu!%HVaA5GOsH z_IfoB4l~%$OCGo&N~RZcq4{#7UQy}DL(x_qS2P~hE(2|F&Tqj^SzzY9w+cIVs{1NX z)aJfc1{lJ~)S)FS{eM=wqD#R~2@C6=A`mY+FmXN=%lBLE6Qhw?1Q&V$rO7e;2NC;l z00Q!j3YU|U6gI8&qsTvs&%pgmWa1Mi4!=Dj$pAD2EY$G<`Ba5`z3tUBBKZr&r?)e9 zZpCfurx%40Xy`#A#e2C(C+BcS(<(IoX({@{ZeTd zDNbE@B)?L?5ilL}u-yVi-alH7*|hIjB74M*=FY5ZCQ20hEU17&*5!k&BSA2(nCSQs zu&vLQ#G-eOO2XB+u`>nx$2khAxMg{4il!3>X3>+%?Cglr1#{*hC;xPD;YMDgA-HP* zc&n|q2K&9E(6G?C)RvpQRgFICB6kNL^QJb)KU?^Pg6lqi?DQyLELtlqtL!>f?5~1y zl&+jFAUmDrPwaAKY;a!~Q8-F7XaX`^xKIM)Wz>T+ZC%-s@do@#iLm1wtPZ9FIzCf+ z5cnTcV6L-N#Pl=H5`X1R1XZBtYJkT}VS+*q0Y2nB$R?ByxrD{sq&>Ze>_<1X0k zW|A(m*nL9revQhldnyypL&Yb-Q3y%_awi|Qt5#-j@S`Vla5gOaK!^ik4_g@Hl*czK zGeO4p*()b3#jQIAA@2Od`z`K{J`}&e4QDLO6Top?3AjyK+`GYY0)TLN&m%pZjgHG| z(h>l4>sA-d-}^n>H^I(qM8r`^)aH9fK%zyDu10C`OHKYow#FPovYo*_eB}UQK%Kvi zw3a2V=Af@G%SZ+z?#Mzb^i>kJV=So-awVg94R=1&m?4A(>N-dCQE4x6H$5YUQ21-c z$lk?(a%$k=-Tn8KEkL;L{{X2tvhx?aNB0@xakreUX>okCnWjO8zyuEDBSiA?prSuZ zsDs*vpueAP1}pU%#a@#Vh#vH5P&^MrOzX=pHi1DG7L~cC9!>gyvs zKbwU!;xZ!~{0$!Zeq55axC5{3a}JHB_6qHkn2Nj6c$V)&edS+x-|l=EdSw$P%jX^CA!JY(FmIHf!(v0DuJzY@pR>2X zLZs#$u|!5-w+N{sB+oMs?PhPcoa9jP=f%pM0^L+k8CQIBWT0~lr`^SdSF2(0W$?31 z6nT{NT^y~qd#IR;V$W4^O*UfClx$dng#gKR8S4pJ1>1ITTDC+^;8-ICLL*pMylq1fv-i6(O?bmExQ~t zFqR$&2}NVzY|RRt&KpE*o1ZB}&;o;p$f6##-A~LXfnn!8V#6<5wU6p0)Vgb4fZ6d8 z2gq|Q@atx#3eaOu%b7*at3uE&zSbx5w@BnGj>SacL|~zu!O9FxW0hA7y(nA&X6ulF zRUv26&Zd&#Bi9b1r)$YX&S-AIZ-F>sx9x=#KwlQ#1>6u&wv>HB!2kk5Hq=Ic_Ue+5 zehEEj-ZA>(Y^Y(CodP&c>6#{X!(*j~7BJ><1@TWw-|D$m-CA3J{h~{`l&Uk$U-0ym zeMYk&H$Rp=^`EP}Y&xz6SQ5wp02RtC@CKP|AFb3_RhIBHUhYWRs47Vyn(M?suSkMY z(WRdP{yGw_UK|yAfDZ~>gw!7g&_0@U-)o9O?;gq^vQ*DRQT?FCA14*~!5Q1kkD>z5 zkYGIu9ZdQ13B`L1y7^=^4bdD&r2dFJN$v5_wy}X6UT0TinW;)wkm*Yx$HMv z@SKT!w)ob;E8GUr=U^oJ;MED#3)gDevC=Y90Hc!DU;yI0=J@fm-ivb-1K7RxIu6Qx z_lT!qoiC67TD>_~&gYG}Faa8LTtO>5_6_MaNLKa7>t4a<5Ijw!-6@$q4`hFwH=h=o zj%BQANpLii;iO`Hu|_op7kz4vf>8E^x6mGr2D(vP;KU{MKn+ZtKp5;N`D1@R#lTkh zYVAxww|U}uv(pNE9;aOtV+P$G56^+@@;G5ngI0Pr`w3NU;nGGUyO0MkSKGYm9n6L? zfMX+>8JH>M5&g%j_q@k&PO~1)^2x`pT{R3Hkp4~NF&?O_6yLBV2<3vucW(X7iSh8^)pj%M_t= z$&2?GGu6&-u^hnj+0o}%Tm$JDI{-sjCAb^KbcrHy7-d#`d6O8dosjx$S3q(!d|x6bO(ei2lF&4AH|G>6#_XjKgnD6f0?* z6E>f-b>=(o4hD7j{=J)Uk3jva>iN&1muh-I_I7hHBef)}Bp+x^o1Wb6`SY_C#vM)Y z1mpEIjo)^W(Qje|fpUh+2)cYRv3rc?@r=`Ok2MJpg@F0VP-0b0Xd+JZ9VEYpA=?zt zqdyce*jD-UKTN@a8_b^&QhgOM>yK5gJg1uM)AEo+)TW~UuXE3z2{EJXA+D)4cC+a4 z1R)A_>HRHVcaZ{XaAnTInnPaASCN0t^-w`VU!%)^BK5TEx=(4NgSCX%C`D|%vAxKA+h$d$6!ql;SY(yOFEdX1_E)^4~jr#RnFU4Qvfj4r~IAF zUNPBW1<*|+%*ygJY~P9i4Rj8sn=DR+>?TpzvjFG6WH zi{=H>phBtWeTpd1&u|2UhsR8ne^M^E5>%KzAz}){h>t>c0IOTE4snnhk-gWL%Mdw=dhjn|SVkBM zUy4ImDbKrZ(Ea#gi+$_qCTtabrsp=d$()Q@+8OIv#@+`7^xsEry{^w>;OU;>ca1Q% zu}DQQrty0K;BR;yc>lpcOD2m&bK`n@twoU{yYs;rnJXRf9@_DYiQ%j{83Lnw2jAr_ zp+E!OfMg~Pusz>%?{*zV%&qG_?zkCZU5)^@0Q(5LWL3cyRZeY^ju_e%19Y4AwM3)L zacr;vTn7Fpvd@C~jN|q#UfpBtDsyq2gNgMdLi@_o@mcfzn)r5MW{(c}_#-UUP0ilXzHLfp@3)GZHfWXp$Un^PkVbhoyla2F`hptT0#TpjTcGZK_T> z(UCvBg`Ri=jB4Yo()8=UBP(}DE$;xwdd@@NXo$sfu8*>+`cH%Q9%TEYQ@zAq2Y2x_ zC_sS8I5K{E}L$BA);g&@U>gS=Xu}6noWi3zVpJ5nX$GfTw zoFHE-^Yz~SLTWyJMz7>Uh^616tV;OafFSkvt{?F-*F5**>?w3eLc7J1l=h5KUT_{) ztA2|8Bsbf=OZxy05`hr-3o~Kd#|mjVHBog_EH+kM*QiwRr_{|(?mfLPvMY;~tuSQH z&9ZFjwnAFRueIiP3&{V!HsOj1>IT=A1hIc}l;yZ)s};YfVfmDRivnV)R0{gKfG%OA zI|Qa$c+1exj*2q@YXe5?pSB@ z+{b^aU-!dhkI8wjZM9n>e=v5f#F(-V)dIgLeM_I$r-r4`)p`S>tI)g*-VPvj$H$VWos02m@dQ3>J3Jnrx zCcq_v1XmtUOy=M>AlO66eX5N8!f?rwn_YLG&13l&Km!awDG_lP&GjLBP>zAw&fx$7 zzAyj)00}C9000P{asgAEwavln*O_ErUwa-ev}sP_^Tj~#uQJHKyvri```GYs00}Cr zx}ZBmBerWP2pCjHKz<|@0K7)04COA{)z?lPRmc#E5Ft+Wb2 zV6MuRLjZ(&6v$;x3m9CMb(UhTSa7!%yZGzat7*G z7SAT)`-#;jC{6!)xlE42TB@i|brYRGoNs$Y9M!qGdH_v(_XHR7n>UR+W`{jeYtqX8Y&vD?cY4SWmNN?c0f|Z_jd1-@$fJ+Er zT5IwvU8BpTk*^zd&jxO8F}9}z_AWsBT$Nhb^CRwl4Lqkbi!RXK&uUsjs>ajp(W`@j zr|oQz_vZ?77(i+vxs5=Zdp&J0>^B~u=E87D1POy~{--AmI zbzNoXmRZDzZsS%-PSIZd)p`x|97cK%x?J_3Lm+n0e<&C}v$a;?OSrr$=J_Gm7o%PE zl=M2MTyS7U_RZ)}YBw{J;CL^#pZC4cWZ1exuS<@QJBK7$0r-}NBbdQjNi0hw6)sS6 zLz8*@i4ap%IE0uz6Cs`M7HoFve!9fjQ^k38!U08~h!4I_Eh6nfE@Nk{*8H(Ow?!{T zx0bh4t}VuT;qQCTR9+I*qi=#4x`yA7olz;B1O9P}*PZf48E*)&5)aFyLUa(*w ze-M5{bgcD~RE1pKE2lKGhjxH~3SAf z=36ATM*17rfCf-HnE8%!g-)pPkuD!G{Z4VrGlYBuVuy|z1l4egn4~Wul9fe zJA+joE{NANr#gkB3vU}553CPL*1c<2G@H*fhmxqbi9V0nfqt0}esb|VjZdXjUf8~j zK*at%)OfFxL0KQdD{}ovF)ZtvwINUNM|s#;5)}i7u3Q5wcCO%DNMoaIplYR=2;85A z-Tk4_Akz`ToD()LCyNGv7KHhDNuRV7FBTbWpTsiy!6beM{vrYi3`*tDPT{D+_l{bW z-$zpNLD>PI_SiWEI^O45hp*eGHNY?=8So7ghVN%YP-2M<`dp-g@OWRqJoMi&|Nd3^KUsXD7O-TvNtr=q8Y z)|=F09q;4vyz$^^sFi@`dbXf}3c}Iwaq>;JLYzwB-qh_=hl2qZ)v=#y7Kq+-64%|l ztu&@43)|YuaA<1ec1Z$W9)fk9?m!tf{vQf=M^|_ZQBa57!_|`;T+Tmy??cyB7?-Oa zRsjs^(Lf@c=|O5c?DzmUQaHqsw<6U_Lvog74+`ToEsZW)|AZKBAHua0;-=2Bv|3Oh z)|@u-<{d(~M)hr0%P%%Vx!BsfRlZAaW<1(=zkxhzGiki%y4vz*AK5lsn98vBJ^ zC*TMB!|D#`jl>mX#a#liJsrLs+Gy})$aOB%*U2eh{Yb_4E0u|SE666%pt`t+{b+ow zEa5>jr9+Tn+NsRJPr}O50iaDo;w)1!IjTs>Q3wfSU56G~JABl#04!-05Jf=gXz8y2 zb#;GWGquBFtswRF{4mwr<7xGiA11m zBe!dA&PJ1DD01|XXK;iTS>{FqE=ol?Tg4qq7!6RF zW_WKVQOVpu3)M9r-NydFbw`?@s0HAA0&jSuHyQe zU7jlHj#J?{0!|Z6_szVphHRtyHgf6axhxjeX%AtQrE+G*&w zIx{8N8&k5B233c)bAeK*$*JE#k<^(w_cLS8yF3^0(&+KxlHHTiuY>s{D91{a*AklT z2#H_*k7CT*XduB#$>%$xV5PrHgn0I#*S_5Bp`es~;^Rfg7Fx$DKpq6EedP5Aq0h6_ zGa|2ogd#gF9YXFIrgK2z5X4GF1J{sAvL9rOMnn7BKeEiH6G?ltC4A>=Quy|*Hh2e? z2_9T;79qfvbN|u{U#s6NMtO#?--_m$nlAF^Mj*0w|byr+Li0{@(Z#K9Bs=?46NKBqjXDba6~JZOI1q+ zDRAV547uqq(G`75p!7Z)txk^LcYs5Er4>)5XL<(#rrK+x8sykyi(kTHittC5{!IQ+I z{~E*zM2iFd2%wpzio>ANasPhoZc;#FI{BvPnF3=m{l72wxAPh_$n{5@Ip|0WEW$Oh z;b(5w%9F7JF~6D??N0FW&ljt7Jo1-Tj~|EEN#I?(tlIR`vf|;Lh(RVN%2MPb8i=;8 z$1;55;GoF>3W8O~nkL39ygL<5So(&(5v(HJ>^17ruzo)2aZRwn&u)(+WR#53xd?C_ zcQn$--$yqmu6kf209E}vYa=!05ii^&%Utl$8W_6C#@w~s?FICVwfD6mgSBhk&W;h6 z*=RaKWRlJ5J0B!CTis%RSGfqg9_%GFSeA3U2{Eu$KaN35?D2Tto6_yvlVjM9T$91$W zs2dA8E$V?fti$G?up(uqnF%!ja&Yw->0u;KtLi%CORv!n0r;uF5T-z(09Kf7L)u;q zq^wg}&47Fomd5lOUgiFa`}7pNkdxF;yI-UX=2mYX<3ocj^!`RjYHcOCu=K7qL1f!n zwa>gO869<5Woo45EkKB{{M-y<4};Vyj*GrmVK0H-q?8MR8*d(BBjs$TM)x?D zDA|9dO)!x=mXz<%#u+)xKb$GzqB6As1Cev`Npi1g$YX}yg9x%Z!agKGx_&ZHr;U68 zY|ooe2yB<1y--RvC~=%dC`ewz#sZQkDH{%1O`(J*O#nkHbfaov4zwt?VR~28WgOOl z$=;3#P`Y-95fdvr1_^F`Q?4X%8gnE|gz0lm*Se#&e$Utmx1FnEL!cic>iL(@A!%6m zF~z>?>RO1%yQ)=WS9zpEBvAr6ffi>%7l%N|XqD6LNuOqYCth0gDu(62bO-4t2&eOm z7#ShdJGE;B?0k50$iihWbu%Y~TfbLwqm6bO-eIii0^uAG9UePmxVATy_xX$=T8Qd{ zs&hBsh_4j{204n*we&#N|KIQMkozBIvC<7kU_G7hcR<|s)tU}_wVVcEq#J<2HI4F+ zBrhZ_XCAX&o+t?^V>~$%$yVvZ&}xJw(ewozqy|B@FN3h?@$XK|v}GR5I4JoK-3B7Xk{Uj@DHOMq z$M$!y6$gdWi&Y<<>kT53c0Mo{HvS}L#M=GSlU7|<**+z1fXEOU(V~@CGYB--WNa0- zIDIQ!0#{OijA5mj=)slEm#83T(u+n3wZ<`_im}4SHfLmOHZV@G&{ zCK=v1f>+G}+ka(`%)TaKmiGl2bzb|^T}n<8{J-i^+O}67SW1<1{qQ!B%ebgL@ykRI zq&E@>5ZB_>=1WXA6umU*xkleSYOe;Mia?9`RikrsH3q@qd#h4x$8heEeSSyy|nriMMkMS`iNZVdb^G zu0p;+4L%c`4d~uh{wR^vX*Va$0n9S@G;y!=M`~|Fvo5?0C}w{H5J=8+r}*RnfB)9lydu=W=$|4T0!y! zIbWFPmFhwbZlzG*zE$HQZB2=vGS~I%_(?pF9%=TW+ck09aKVc@J6jpYSI#Ou0K)I~ z?ea?g9=Hh?ntHwBC16E(O2TqrTMyPlGay_lXIOfm89LHEH_t2V^)5?~ufE+zcC5|e z6kbiPJiq0Z=wYU!_)B7-O7BU4g%s_eVC7D=PN^(qhB&2*bI;6~j7Nj=KJ~R9mIc0T z@C%;J7Ap*EfU%3fUpeIjv~2E^I`9I=RD*uczuzVpPeYCNjxKT{;=5}P)JhZYz}KEE zu4qj~TAK*AY*f1EDF@+Q`FM-RHH6?=w;>4FD-Zo)fz$&TG^F!IvMu%c*f}d4Sb-8g zc*C;$0R+qB6qD}Sc^o-F!N&aPCM=|{)fXh_xR7q;(9iA5UqgP*AmLGNUx)yS$rqM zm+@iy^Dxb;C9uQTx*mX63giGe#_YrM>eb|4`h60d_+d@UzKGfM>XDI4sZBP^byk;E z&F5E)v~=_*;x8h+GbE%Hs-7bcl0jE8s6}+?Gce?JjY(rPH!~gTE9+b3x*lzcI!Fm2 z)AmO@X;xkr&@SEORqET{C_@a*q+l7YR(5R$3tJ#WPI;jlVb6WNc4gOP!Z=4TLO_he z*z&KGEBTbk`E~xaER|HlV=4qnW)89^H_>obBT(m0va~Or=CudrpN$6`qiSWM#R8(q zdDhrf-(GSp0we_MNIBvVo>yO_@lj%dz%uzELVv!Y%j0WwZyO}l>yZ0ZmP$K8x^;UH zTPbR_!af16LC_p9fZZudyM|IOf@#xS;5TO+I_W}I5PyT(u2rsd8wuMSE>R1Z36?5L z0(w9li?9WQ={-=9Lsis=tB>E#$} z@5x& zV4U{yU|v4TeQv?DC8F=OyAxGClL9Gl z06x(L(az?e_DIoq#@3iuZTkIC`~S>qF~IL%K@q!!{Effh9ARV~@r*Iri&_KPg- zSxUJ>UM~s%LXL>!0On*#lA&-?7y`dw;-z3%f@5&&YJKR`aU;~fQ+aA@55&P3-{Q^# z;(iuK#LBe1PJ*jCe&ZkbkUb>@TKNTt)~UwEHy8O z=>w?srHlJnkcFXa_64 z*ZjyRM;rt1IiUdRBv(y99+R7xi_qjQSxTm?RkJGYu2W){P8(SUi3}jBk>8GcOrpR( zd-@|MrAq)+tdHPr0E&pTG9-v3ebKnj>QBGQ{@s7}HcCwiFLm)@?e;PIYk3&SMP1(k}bz2V~6G-d{9Ncq$zEh_g{0 zYhB?_CBehuj0&JrPVJ7M^r0`aA!-zPPI?^kXj!`W-@N@%!kU$BP}UyY*u@IG5DwSf zP#X!P^l&*Mv9?y1OsHy3AFba-LVmr9emKS;DC3wP#WzOO*n8&#YmI}f-t%!gAwJHS zk02Aw=y0>eo{-9?@lz8a?7)VA58RC+H(N~Naw)ev7`4F$1+zFWJb<{_q|n9;A>M&f z$3$#^s9qv@4yVdbCQ5%LT*?DxFT5E1(E&OhpwIRD=Th0PtVb?qf2~cWCUa=ExWhFI zqi6G;y$=;@s^d@;8G;^0F6)qS)b17ez@rx@YWa=EDJAqyY+cCwmeJ5&`57CC-_#f~ zv*u578a0bzZ=G2a>J4)W%V-MMgdYeo3m@sr9ZhR@Vp4@g8OU7=tcyQ9^w{@Hms}~u zz3FU5kMUnBYb6B6f;j-EzXfl$Z+GM#(xRtO1xVldpThb3!t`Oy#BJ34vrNB@uK#b- z0yD{)y7*D+L;4Xw+X>t$`9ebMi;>+F4LY{2@cMb$g5*&g0=K9u0**p!#{{w!-mB zZsF40utv>>m+5^TqAH0?85baZs|d_U8WWy9!bmZ{)&wL8Z7#NLI&*^ZskA8be&2t| z(&nHuUp3YTN_$dlt8a9GFB@uG994hFdN=`E%dI}3me>uiXk>1?P$prXadqH^y#~Fe zd`tQ2>BVNRF|6(^x99$=eTP~0vBC;nQZL8;Si^nn>wH8Xp?g0%8>l5iZUyk!UNF)6 zQ#LZ7pNTfRXbEXr1x3ABRxAf)%sKT-u_$`0Wo+Oh!T{y1I~&@gy0$~|n?lpWe{cv$ zuPbn@ZIB)VJrs?iRu^9sFoj|o!3&YRr2ADQ47dfFhOzb>y*EcHW_iaH1VAJ#HDi_} z26PdhDcyA z4sTH7`W!i={V$p9E?L9*TNF$`d~ebTF^Bj|o-&kviDN2??t8LkzA&ccs8=CiMVps) z9;P2(k9|;MbFS`w*1VeUa}FNqPj+kqBb}Q=N`Xil4n!lqr@8>jd50b%{f1yKI;L%E z>r-#qaX0F!%eSnNG+3Sn+$ywAC{`C(r?ZtwC5Fm?e1JSxjO$c3QHd8vq_u9G(_7+- zPc}i6?xK=qJ;{S5BG&|9Meiy{8rKBkWD8kLWbsyzb4XEv zy*OleT|9|OAWqkF)01JiCo?+3mak#lAVpC4p}|rOLRK|-@T&Fcs;ZMFwt<^W)K0l{IvxpaMer zLww;g$2)8PmRxbovMOCA&3(|js6z}EHpZI`>YjCFXzx1gl7U%Pn@;<-svx)|IsQ}8 zhEOF5m&ot)SYz9pVRaZ{dL)Rkc9RC0EhG9M+B{pV^vA2+~s|LaytCBz;tH@xp< zg;WoC#ZB&HQg8~A5*h3O0VR4-=ll-&&jp;jCN+ov1BM$D9iRXJ19Ir$fB*myb7C|M z*T4V(JPGm^d58AdA}DJPKmY&&gKCxZE)!zlQj`L+XE5C)D1J{u#D7q+AJi;I^$QXG zLd1Viu^-lCx)e<+yXW82(PMLLC0YybcY9|&FDW`A<#`wSl)C`-uCCi|F& z0mW1bEcf_e%?XS=GO{S+GThMBSmyqZwlG5m|9VLeCatIU2O`Q&QxdUZrfe7L0%2WOr1~ z8X_5t>}H=VT|^7=jV#@}HV@)vY7bp{C)o`w$o|Ri_|J6?Rfzh*8>o`Zzk;{Y1+wJF zhmk%-&lp~I9%6gDxJeY=&ov*kiH>w4%;5f|ujN-> zmb4BVmji!WFtv#-Eizc@KAYaWV!TnUg_W8jJd@Dv%5D#g6yzUNyKO~qc!9{6o1#L=wZ}0o9p}U(Xdx>c4vrE~DtFd%V zEnwB+fa^}mbp+mI8-C*}M1=L7W)rZJ3Lbc}WUCA$p(6u5g+Y#Ie-wh$P45XM9yh}M zyuLJ>q0+dG-*tO`*@NrPUC@R3{-vKA3y+LJ4SyYlX=Pc2f07HtK;24XzyJ!7FxV>B znM^CrLPu#7)?;Z&54b~99r>8rlbI~bx%k+mW37|Kj7D`~*v>K~339HXhG=2{_}x8% zdB9Xy1+Azkn|Y>O>RL_i;9hnUA<5Hgu*m0bz5arv-0b++k={cNDlMk!B?Uf z6Bg6ZVh;FRh=Na7TQwYw9Tq&yy$_94uD9EOc)))VnmKbS9k1nM<0XVW8(^KXH!N!8 z>y(lbv%68nC;=5N2=Q(ojty{GJSzxP*#XR=jIIhQeB!tbq5V{XL<5E8uDL6LSd91x zB66syF6$WSd?J3}oT`H=IMJxdF8W%P+12XGLK==N z1$MO7d#muusllz=)&d{CfvCTaOz$s4Y639ZMiD;Xm?@IPt?kPtv1ij`1Y?Yec{xpv z@i1}M5GgI$w|1lLdCF?L+P%mLn!sR zqQ_-B{*w~Y*wy9MyT;gNDbJ_9+@*A4n9|BqB);Xzt6$%*<-FdAO@ExuWc+4kIfNvG zDy#W~@Wl!DwT)lwf8Pep{s5f_M3=G>7dO$)@XU|Wgc>qxz1ts;+TyIc%D^t_Td&L7 zD)D^^XcGiBqrrCxKKKQnUArFTnwtQG)%%n4XGc zJIDSAC7L8@ff)IcBNUukBB-G+)5_tZ>VkDrSG+63P(%+2UUpsbnV**ky)x#SW7o8c z(^SaE0*aOTHMF|%1Z6D*uG5r;`BGMI;$KTwD^o&Z`!=v-7_4!_EBjHRvsr4ftcy!n zSbfL4L_DgS*btjQ0chf-%!;n-MBmMS>W*F*Y;%!CHe9XNQ0o*3aa;yB{midt27}6# zpY}_0`$x_XhSP%Ak}TQK&M{+njCVsb-5WgO>~oNxj8B*sCr;eOn9w&Kh~-LnRWY^~jMd0(qSCN7#i z8Mm&dDX%4*2>G-`^&viOJrGq1WsEFhal8W`?F zk|Vw?0m+E&)=#%eJYzctzi%!aa;Y4Swol(BW#~tda=`<%m-aPalrioxanRqxd3z2h z_bk~uM&P_NqTu}e$i~<*#QEjqJ^zc>sIh0+z>nj3RsW7t%?p`WI2NY6e3 zEOA-CiFT)>t4IoL`m(QMc<7mv#p<1<$W-Vwcv5-b`Jvs^lThPJE=CFJHdjW>d0I$G9L+;%KxB3h6HZQii>(ba0yHsvk9n&tihnFeOQX*g)cPx zi z7-k9~+Y!_CfYJ;7_?}?P{T0!Axd3N!Z&!=0h&G8sX z&zNsPauu{d5*Ji4*&@3nFngCyC|ErOBdJ|8JTX+$45)Su45Xf6vIOAi**F*>;tppa zARw(ZYfLz3vBd@-Rh<)Vi(Y|rIcWmQ<$^ju+~{r*cF2p?GPb()y$3CR9k4v}!nk0lz3zdEXl?EZ0m zx6Eiyghf=TpBR?A?`n-(e&5rU-z`NCdMc9nJBq^@6g_eIJI@dZOq zoSGcbn~tWXBK5DM=(Z+a;mNmNm}Xi=oPTf!2O4&QNnGt(`MH5{CXBk7 z004sw!+k(&oX$XP;+`CD`^?>8VrZ~fmp2v%N%FFE7vn7f&Oa3EzC-^B1`&j1wI_kC zCfv?9zAN;c-%ZlfMpsu789KuX@170@JBXn=>vSnzW&a#b1WT?7P;2sUb62YGp!How zJ;~%7A-$=yV3fj$2t>zUQwHb}jWJ}8wyBaTx&I+nj#4rtwP{ezN$(Vh$1l7HKm)<= zJstbc(HOX z3v_#tV#FM&+0;W`Mdo0hV$Tk$-iR)MvmbNOu^)||gXENBeuu7({M+2#+Zaa_pFcIOaGD$w$Td(x7K9HIYDK;bm`qQ+O;G=_wgzAj7(x zNyw7!c+KseeGs&rfrJf;%Hsa&|8zbUBU0u&d$EbBuzajcTr=My*Toi3+HTqF_kU*P zmR6%ut7fkc($PwyW7?vqhS9zJS)Muwcr(D`J{MZma`l3=(=b(hmS2KPqH(iwO<4M!wiiMazAZc)Ycjym#Cm*hBzLSWec>_OIK}itFwvLKEV#O zVc$h4U^4P@&W7!pnaa0rVNw&oeAlKF#a?%2k{i0F=n;d@_4AEJDJQM#@_J##*Xhj^ zVb*-h`{eGjj|=d-`#p9Fk*DeMy5y}8LC@&p;}baF1l!Y=>3HM>Cp@U-{+d8ar`c>6 za?+e(TReh;1MFy7JDoh$v5R z2Cvvm2bLsWwUiQ!hos3lSTa%`-jE@yPs)#9m)G4(o+yT=EbcnoOSZ-o;Wf5*bf^cS z8XC0NMGVTp&;LKTs181X9}i|bmMap#St@vv{(^9rc;8=iMD)q0JshCJ2_qz!p^(Iw z)WD&jPDUAsD+d>M$H|!WOMk>~;|cieJJtEbEo?SMYsBbo5>isN;}Jw3$wVTI7uF#t zZ96h*c#!l=2ICSHq^}Laa?Ac$zdzlUrxpJ4PG4~f#3%jJ9OZ(~-z#{~?rz`VD~iUX zBh$8mA|$f02p{i*b7cB1I?lkLLm79YiLW5wuF;uxdbk5jeqHcuNq>7Rc!0w$Ni29w zx!T{cxuCLSpxtL@(SoU}Q;yViv^fI(`e9C-rcoeFkqAomyI=<{O{JT?%%W$_@qtQ$ zHY!U8_VINnB9G!9tEtY=Y@s0Qak-m7;Mpn24Sw22gkLNT7Te_2#~m1g`<`r>s2h)5 z3}Klt^hCX;MN zS|(IZwSD&*t2RXP?Nv7Mo|yV6@&&e1JwH3k%1Ke1mak03(3Vco`2+)=++wc#ILpS7 zo_5Iq`U%mRz2F9+9lo#*DGE##|9@**VQdbJZ`jrqQy&=+~&3Sk`2%EO|wYTw*UgpGF(z!$iq9HNVkd%tZ3%!-8P5wKPN=Xrsd$9Z2v*2NZ) zSfJp3;7|Xzq%cj!?p!YNN6u2bYFr=dV4vDe@i9;@uGVGSvcdD~VkjL2jIq!`-ue{) z`Nt0TL-uPF84iaVMSXoxZkFu2-eOLRn!UW9>-S}0hM5tHRv~Skb`_TKPTeIy+{n#hCx|P()(_vJa~JLq?Fc zdKe(%FJ?F%dyfmXg(r)=iKxh4CV(Z->zG@A>7}kaa>1&I+RGdLm4?b(GLc-OR}A1( zohAs29);KbkqV}It339)@=GB- z((ekNIC0#wJe5rZ%63%WU)XYOD5FyEyBQ(~hg}Bc`eCb z_;uLyPMF-mY4rF=#yOfI#*9~nq3oG!w$d=9?v8pN1*aXnb!iT0YGjJ_bxXSId^tj2B^aKWP|F6T4e42IHcT?%4%Eh6x{3#s5n0R&4&RN4* zE7C7T1j#LzFn+GrlxfhK@Vbgfk&bDp-0;G10ABQ!`uQ?&%^a02oyAb}gbzYbP|hzE z+KTxQ=02Q243=rK&&Dy;8oyLgsc8^&H~DmWkBhY~O}!|)xv|C}(y#M;mW^HXfYqpR zOHw2o2dsS7sPT(0#7EQA=$YU;_WacPn_gER!S+f@OuAi35>Dm)L?BZP0b5&a0-z(a5jnzXxlHc;V)q_|$3Cz4+Wh+Ni8;Y$ij3n}E~WiV zd9esKKVH=If$@!N%TlgbR(?K4Z_F$+pk{bKyl7HP_1%YfWo)p=>{qqQqtHEBvZ4&&(hYd}@4X z|JxS|_GngxnRavWBA(%0JV=QERIp21mH~S$71IQDpaBNk{zWiozaS{6M{XINH46U4 zQcud&BV-D>_0&Q)WUCc3530$Jze2WX=YZpt6XRU9e3Id(GES`Xx(pDC$Rcl<5061I z1U$smf`PWo3!Z5lM327qlMliG4C4i3&B~iFGie^kZ=AUEAI&!x-%%LFe7SVS znN}k3oMX(|WCs|Hjd9EEG{7ScfVphuB(_ZasVyLq(n|tkOz8E&qZ>#M^mESJGV#`$ zoQI;O9?L2DNKlu$vZRWVQZ2uo+yykW3*_^%D}vgE>Ec%}LvD^-`}kO%=wG);jwp4x z{1{>x74Xf5cB@8K6JW7;H6f)qh#GG4%AmM>J$E>|jZ7pb2qdLPk)vIZZ*@rNaYYTN z{PGtJ#*SkLt`w$!`w#0g10EN>?$72~k%gAK*r(50GG8~kWJyqouXP*qYcM#RMQ{Lg zwjqij42G@#dKP&!+#?FWwM{en?}->BDtTXLRylN2=+6F$jay(ghJWQo$;6QGHvFhz zy_+39Ot8UgA-+CAv$noFa(J*LHWYR=|Mj;ntGi0{kNbn1+eqitYCE;?OO3G}g-7=x zo1Y}upC7O~-T0v>dE@Qrzd82LD$tvs^%5>FnipX5f5yNbrSycow5S+J#523)TcrDz z&TyRcioe@0AE{#22(%qyoqioM)%0$uSG5>-IzDy4u3eknPso>sekYM{J~P!oZ5@GA zq%sT8q3!hUQouw$Q0Ex#>K9einS!hz6}OnI4wo&7g)~^Xz9$y#KmxqC8Rnl>xKgCu z#nnZoga=Keu?&C1d`j8zq&y=WHw-i-;&1q+fS(2)CwcxVXRv;7or23~# z_Grip&p2QE68+nopCCzYwJdkoMMHB^%EAGp_n;YK=DADC1b)9MfxwgG)2|1*csBv-M~uX?S)s(%B72vMTykZV`dol(8)_J*?+E;G_^etl*hrs z=WsA;JJ36p7wNkk&J|>Zhx$uew4)NIh+I_Iv7B!mkvNIfu4EI8tHT zBq>8`{TSg}z$$LD$Hqfvz){9Bs&;td>(wxc8D+Zq$H3FX7 zShXvh8;Ho$#yj7UeBuogad{!xkgfFOlr`K^4o=3(n{pn%M@fKBhpXzgHuywo6S0}+ zjE+DR?IyFM>NepJ2#XX2&R~TWfgUCICqxkwFk&W8d?6?U4Ex-_{4#xK6#ZP_Q3402 z800QOpa0S9U%^(}hu60bH;vUW_jl1|i6H{h*=v*g3fcsR6uC=jGO&%p&|G(%1b533 zw}lDnk?9!uz#ArMS(m|rM##xf1UYCTIMIhi_!gl5lAaMI-~(J!aX+YRNVdhG%S~)i zQ@ExnuCA|g(0c~kjOLrg(VqyqA1=t26JL$3iEmpS5uL+)RBALAp3+LF+VUA2{uEp% zd`B^03+UpZySnRv1*xK71%%{bV1f_rM=s?;<;N3A6U!*?9E&OrT(qyKF3yb%q)0=2 zN2anzT{4+&$kBZ}CITWjfy4BmU`)}Bi3&FmId5ziW|E^U*-~_6NYv*c6^DRv^a_05 zs8Y#+fF0z7S-z=&bP8{7ZiC7So!Xp?L}%YV#1Pw$iJNx(a0+grwH3cp`NL60`JmVz z-#5qMw;8#VzXh+3jP#t$UWb^Z4r66RZ~;m(e?JG)hQzg$FnOK4(1j+J-P^NylLKP` zi}oE}bSkG84$Y`(xw#%k>HbeY59$Tww*0X-PD{6Q_ME!Fygo<1HSRNgi`b?Bws)TI z*X#J8M9Tn=p|o06hECECEB7-pFd}L`#FQmKGJ6LJ{@wdofmMpKqcO|A1@R12o)t)9gQCV?XQM>q`q`byRbZygk zvt1ZmxI~qt)EaMgAA?$Ory}7irsSty3Gs4dVaesJU?vM4W>XQVU_)QC6tcCROL;{Y z_NjTLdz9$RCoa^fjz3}ZGx>DKUVW-On%uhVv5rxQLFZqA#yZ? z61Ibi=dtRNwVZd(Ru1?%J{XhzmQ&F0sDK5&yz(UQo}6}QK|>^Ab9ieRTS5YaDDLFh ziCGu-cFXH?L>DI%uo-+41&m1dw;AVCec=pN{oWSOWQdoUk2Khjof&1_uM5fN@zvE5 zzb7Gd{q4V=WACw(AE4%R7*Z+;z#-fl&=|PWt*^%-L?0Ep6eGS(MYOh@v0=eT@~Nl0 zC58&kz{!|AZwtKmQcXl1julRVVt+#o8elUgAE!cZ`rh-rm>5=Tcbr&rM2=WKu#??y zKZa8dGiXzZTn^(y#S}IVO&XqowVkklmKfurX+G1i>}cou*Fgo}`6G#1QQtTE28x`W z*Z9K}N6)Ye*mH|7UhIk%B7mfOE2u_f_w3VvKx}yKx_WJV-Dr}csU=a>dgj(RBxBec z0pwr>grdq6QW!i9ExIp;zKVc>CoXhK1PMl=GsQ@+iqHz+Swdh4a>QT^Rl1CBK1Rgc z7t)mvdKw;FZz-%;?-}-U8k59P$3*Qkde_@$`^yIoohc_xl6FJi8&t7l1%3^G;_^xe z=qX@$ScMmCIK%@(lils_X4Y2Fdb2HS~yW=0pm^&p84few;#Kabl-W+p%zd{ z6bqKy*j=mK)d(7N4;H=|5)`vJ%XvG3Lm@42sl8$z>wZAjgsSI}HTCMX=TNXQ8Fb!J zg;(Uv;Sejiz+>GixOIdzm-!f&G@EgIbKPGS#(rGRf?f^@_73N;q8 zW4ucl`fv+gpl`Mb6tz+kHRW<76^HcTlU06aXoTPxDfP^8KuKyYRGF=;XUee{jKMKOB3L5WQoq8o}`yiLU`$4K81JMmav*_(#Y%2YGk zOs}>DT>4bMaDs~WSaB`9pW;b>wkh5@sY=Eat(dEHn0CskQUHxbc_(8NcED^WIPk&% z@d{HKs=C>`a@ZF5)7E8kJD75e)+y^~?0@9wrb2W_T&F9j<0g+HFpga^X$Sb9M$3Ip zM919B$xjU{IFFoOA1b3RwBaC>S5A$youZHkX&FmkhW^zo64e@B<&wAaR-v;MeZm4Y z`u58T+(U+nJxDo6^lRQw#`X(-8RF~2vPPDE9d_yXd?MQR3D9n0XWjNmiYQ9|9HGkV z=fes@Yb#lPq#C_wgAgVgm#WHqe9uQ>*RpJweBeL(R`X2tm3=0O)$P z&lB7gD)3iVGIssd|H{yX`)!6ho;^s3uB&3U9Qlr|N_4$?E+hSQ?B4(}Pz6~D9~-fv z_(&Xlq_Pz6bNi=CEyu@;)_~du^soluc;AFzABU~h+)T9W7E&;a4#RpTou_Z?3`6xe3yb?^CZ8_ zmq~65rC)(?Q2CUxg`z2Xx_NWl9NE1)rypSDsL~P=+Pmc+i|{Zsu`KznK*sKidDk8; zkM?}3`0mv1Ga~<6E_d&ycH#(SNcOaW_x!wvF0b9%8hkLfH_^e?umXq|hbi&q{aoRs z)20&bN+KUW(4RF(r%J0y)2LT&Q};&-O7;2StK0+V6sXs<(?aBczEjitwtBaLlbkhz z&dGcm*0Pgg(%U~OMB5~wpTJtXfVQWbZxX{!>vID4xhd*S*;&1a9cr9Q8b1Kl05hz&E|aywo$;X+zv~0_ zw#>`!Zm`S2Zk~-MeOQ9o>v%Jjmcbr3upML1OG_xK#mJ^1hd>K<{gKrYuEwngyG`nd zPic|&7Id@}3K&Vi5$d4oT zY(lhWDqNz{+`+t`gub}aqN%UtlH>+#?8H&Mq6(~Hm(O;^3N{HRFS~#9Z*bxZ8}_2d z2I_pGEpy3E^C^t#40TTiFe@`0ZxuAjMY&@$cE23y2^97T(S1aFTF{aQJSD>fqjr}Q zbNHv;oJfvCbe6;-&0L{hBY6a!T}APRAiKwCIBr9yRMGr0pWtX*;s%tLD%g?}C@M_7 zRny^VXhTD-Vz()i8Mj5w{&6@En6~Y<3j_Re$6?R+xcchwS)wpQ<*@+(DDys54#`a2 zHlzsUT%NV)o~Q2F9H${f;pof7jmKOvCz;g6Yq; z>ZM4>SKGqRf(i(+{$)j)Rz)K;W{Lgov%>g%&5>Qo#&~hewqkA~wR=gKo*zHLpBaBJ zQ`M2s=gSnWj04%M`EF4x15IaZupUcB*9oX*>aK` zsV7EEz69CqU?^G9GXO@d+dS{AHQYb9`SJNZ|7UftEz_*b7LP7)7|$QsIsnSy4;*vD zfhZ3!R`!>wHCMdgqA032uW+6u=~p;T0NSvggPuH8A;0RJA&o!qp%3dYJ#`^oZVLiXZ22 zT|3c2F_-VGNp|aQ8cJ{h?Q@ZRfNngNqlXZ(L zp(Wc%3tf-<6xZC8m#S+BAQo{rx!*wUpQpTM1Ku|(WKqgS5XfbKYpbLpLqRWgsJaPP?c1WP4XkaqJa_-!yW~1GaRQ<9DLB?E5m5VgjfPmXfCO{ z8{@ud!=A@bs+k--{`HVCzK^2Vk>leXvX9>G z)KVbaST*)j`&;})T`qNk#?Z9T1gvAx_3N47R?YrE;V^$s-@`nMDh?MJwe?*MR}!oPfT1xL9#>pV^kM znu2N&LQ&~BG}sa3_(P_`*0W^n-dWtkNGS7O0D`Fx`xAzvdYvEs zB)JCFqctheZC{E;lYZ0JIBcmMye^0?WxiyUez^RW^4j6QlTz)!S~ zlyP8YRch2kzc*yRLUlHqcy&|79h*Rs_P~rR zuRix7mcLk0p+g0Y`6N0xaM2l+UWyT;OO<5=my z9v+xpE0Glxv_A`fHsok8JdTC{sfgqqouL~EJV)ktAvqP}1~0~fi7QXc|AZ9t-B0nv z!eW*jvfrX943Jt?Zl&LY?i3%7lSq+Y%Mfq{u{GNmVXn6fhUOfgYj^ZM!6u%=Oug9b-oJw~FFASdTdpPS};=<9^M&_9mLSn_pdnEP?%7aeTKg z8#LD=iZx7C!0TV-%hgSW#`x7k#vE7hgF>7EG&=iNCaoUo@Y8Sg%Nu!uq-}=h!+hhpvayla z7Ff0FuHsR5R6o3k!2*{_{l#RON{ZJ@6$KfVmQ&VEWnL_e62f$=gSdn{mxU0i9n)9L z|11V)=!PxgxywmW-Qd|a;|BxP22v$jbK*3vreldC8=g6sEbvI|Otxv7!GuERRNk?y z=qO0H4H?R^f*w^qoZvXeyu!RD)F%#yqQG*+>#!2W8a-C`^*ZsNiV-QY3a1t^I?GR? zC)}~RK_7wvhS|W#xtD3fBM`>vk7}ZUIB;Db%GMvoT~@&3mt@L)$@c6e09=jEaVgK) zwHb(}zd)O-s!{ZxZH-b40=>KJ0J~+z`0b~$=KsbqUeYmUyJP*&0RZ`Y>rddLHDLG? zolro-jFLfCtm>3OouEa}O`wP>`tccc4~4ZUHU}f!eas{DEqk%*L`^x7y=_7CJ+0L+4*vo}ukl#l zO`8%Ap3Swqnh1TYR^`5363+XU<37woJdZtJAQ)N*yRbG z2lv{}rLlisiFLcZS-+L5d|B73V#L*^2IhXiuhJ+>rsot6=nKL<w^)=Qxn|=p5rCBr_U^iIwX`~ve5~4|nvc*0u(UxGl~9xhFrkAO89~BCjmr&dW~v1V)R<-WxF3VfNt8k1_vW1cmGG(G zN91lxyBOPFK;x@(EwDh1A^vUc8>}Yk> z^LD+xH{`gR0V2O$n`YK(YwItBhI^ksLNXVN8cGIp$xAm&Rh8C8IzgNB01=c6x`_=! zVX>H+2Acs4KGdG%>&I6Zi1xoSGPKe&gKH`k+YoMgU#&ZBE8=yEq#Px58tJdj4span zcO#sXq2)TkVgeW)AafpnCYKNgfcO6sNToXPQ5)P9WAJ!%@gw_@tgK837G~QdLwj5m z!zBiihrzl2I?PQ?#wU}qgk{Z!TYFpYs^~9ao@)%neZ@3Y3qP<;fVc{s3-`7J2tDh0 zwncd&7G8HJL6!{*ninzqw2QRP6f(RBKvrr+JkDK@M3li%f@~N6MBzEoTBnjZ_ETjZ z%$;JLNTo6m7Ti&Ym^(dR@CBzi|5M0CMfd4Ki8DxI3!I)^zpwRdcBWYEulZKY$u3L-=aH*>6bQ8kNw zH-g_a__pq?6WX>J%$aELjQx7H0v zeb4|&dyIkbr$&#uuV#I&6DMDAwD)&7(&5m4l*ZG^_k6#p7Jt^Z1FLd7A}N$x80a%D zu8W665&E6~CzWyyso>J)j>6%im*|^JBr`FuHSDSJE&cC)sf`<4#U06u90NRL@r*8B z3BrPWch=8lT!i3HBJ8gpao{20ELOp76Xn)B?xZ-6+$Jvl`-*$II}ak`}%pbVFSfP6n}8wS=Y6S(qDOnbjuX*p7;uNh)ROf!lJK>~MLyw{A8 z4!S3*F$clJ*9@2c@b+phq!rji7*`qV-??O&?>ZJu1oO-j2cCQH9P zlB#Vf6Xo-R-^x*5naQ#H?H+!Qy}0&L5F#9O7a4XKoH)5vbJmxck)ZRB@Ljon&kv_X z(~P&)chez75BS?}qUj#2PY`B|`@#YQj&ZpY>D+_@9|Lg}d^ViYhU=Y_Q2>(SUi3#< zgme~5l)Q4<(c3^YHarr-XNnbI{#~xB+xx|fU{5bW@V-{ur9Mk#^4i&57u}VGPFlIw zvmmpI%7;^kh)zXPzHuyAu`|C&5bac^T^;Ds(Qz!x?j3hQM;Y!z8|y8phPk_<$;NWqKSNx;v>3{HPUW`N2G|zj8RM zLFf+pMwRX+%4cdlm~uk_^hw|_N+LQb?d}n$YxiW`PWxKB*UUsrA^@#8w~nY*kU%T94BDQxz;sZaKE`*?sN`X+|{g|D$xSm@phIcm5E zkE(-t4`R0i^W8li5S!c=ekJenruNt_3%;iDB7{ zpSUCO-M+Z(GnFv!Mg!}8V#O3Y9(NEdj6}U;EyEKx8P^q3hbmH}%*%hkOER#$)_0b{ zj8UjWpt0oc%N0FC{QNC&>61mip0xh+@Rz?kCLc2Q zN%*sYurOWJ(3y||MR?vsXB*x?npeE73L`vO)$gDd>B7%VW>;}ejkW(IVHzpWxB5jV zlcwk_w4_bHUQFf9-B4)$yGx5*+PDKsPZrpKi;V| z+4gOGA<9j{9`1S7)^}C+hE6I#bFrUjyYRK~eER?S6+2Ln=ynJs@N?6f- zf$7dSn;6bT6Z<+fnmjbYk!QaA>Aui>B-;AR{~8gFZ~&0n1-^MhEO`M|XX%sEHI~v~Z@j4leh2Wo_)AA?B@*xHP+ZQ_=BglA# zbwa!}*mX4OaB+7rGY;@avUjupkpI+25+KC%hlrC~g369(y&plq!HNIhW}fHp?^V8ng&eZims&@NNxA-OGH}gpBdt?c zqwtbF!d@HYEwn!Bpmy>r+hct-#{9iv%^iNdOBhROk&}e8wNBm$5}PvET4dhHqg)@) zR5MUL8g7x0+NuyWi-4Gi(;w6`3$=Y2QoAJJuJdy3P}X=HKNrP6pgfiXQ{YT_`#rg=%mI&VD%^h={kD9upUsi=|H+f|aPx#(o>^(UFDxguR)pb&TFgxnY~Ue~wqInkWjEYXOr z-=c14WJ+12@CZWuq~=O;{5Ui0+q|8f8AColdS-wfA%~nT5@VgQc+ZmUgtl2#wN7T> zV$a((%)CNeoCY$jkoeN2$td-2#5fVI*L)H~a{0i$?>9z_ru>gj{`fp{S;tWTjoJ&m zvG11o&F}ah@?7(Coe2MP9|o#Zod&tTO_fAkCC(1)CK8AQ*HB3IT?rs-mad2fIkl_mt=>^Evou&LBBF+^Efhd z;!T?6Y&PhbQMO^Nrr&R7nGN=S7Uq}|ej$89nb}Oso_V;g7z$U}XrNYm_#h2(Y`EQI zJ1I|-MTcU~94)kEBz3)T;Q)!Q*qobZce|oWITLBel)lpgTKX|3Z~`^+Js5R$9I>Rx z^JS-jP*wV?uVhX#p`c-&o&Sp>5SMI5ycPk>W`Jx5j6x&F8wZ`0817GEA%kvI5Z&N- z$TO@baNRoX)A(6&jY2Rsshn+Z*qq>^>qkfwn2I0kl`fFF{ov)r)wAkazhOSn%)$4OMa$4LR?KTU3s= z>NJytzFo>Jx@KfLgrLT(PW%xa@t-ip*i#6ondbeSMGMGzX=Ozt-UxAux}V&tiWG!c zF}+ZN!_gh!6yw#MRIg!S&1MRr1)w9*ft6i(ea+F9$#`yX4A>0tjf3aT-mat8ct_4AN&44 zy-V8**Q((X3#tGnAoU}BW3!?L)945A=|K(KDRDos5A8x|5@5~FI(*x9emT9qBmsb{iXg+JS+M46dyFsExkg>U%`D4x?7|eG3wnLi~p0`pBnR0Ry%G{*a zL3Cfn{2N7s;rNDuxnn@cR#v^a)8cfwIRGMgOr@nIwL7C+Qau12w}XrGAsRWnfk=FR z{>H=XuwFk&WcUJ@6N$|!0^eHk!MUu1=AY7?@u?>(v+8*v=l9o{ReJL;cmSBxn~;k9 zt_ZA(&?RU$2|s{O+38Pg@kArfu)eGC@-#MpW+PyzJLoW(uhSI(;IAOUzg|}@g6R6# zID9clLo#0`2kd7Y?2g-A*zz4t2L?}#ib+3z&g3%pkU6(9BIuhN>-g4BD5KrKqW+?= z1VD;eANN&^qNE($*Go!a1v02>O4xHDuLl?Dx)u;$x|GQvB#Wcybg2RqaiUyUze;{o zxv1RI;VY#+Nh69I;aSqK(cYpBq!C!{2<>V{x-Ck{63sN=-i&0t!B!{#mY z)Z;aB3`nQZSB(o}`Y7$^)iiHA1HfN|`n%-MZ&-bp=MK+GjQ}?HeRotCu!E|T32lWu zo&!3ic5HHkB)`d8d;1yKu(nc^fPvM%CiX%grixjA!Kkn?1yrxwwY{4ld8SWFR6NVI zda={y7P4Pk4JG!NIpq+^1$~lH+7f*MDYssn=m|_&O+Q_J{IY)f(;vNEYe0onJliTa zI#7BJNA0d3D7Ebo)&vM!|Aw|ET*Dw(tt%^Z85ySAmAQe+p*R zV?rH#^TTMf>$v%nb`L|su5bOL`nT9$Wjx|V4>ou5<&ZE5!MVGWNj4Q*ID39+U}k%m z!QR}fG%zg(s(tNq`aA(v2~(>6$Y(0?=IPpBhR3PGrB$Y|4|C!}yx5Sb$;whZn)iYz zZSlzi|AG6Xvlmgv03_tfx=2h~l#7O`>k4_Zx58b|IsQpt^(O;OKv@mUmM@A(Db`|* zTZGNOx;)eb=&B(Qu+$4DNq~Q0X&&gfinF1as-I*EG1VML3fs`h$f{74foe`&v9S5& zuW215%sA1=Y7rG5LzUwssb)6R<>rrpJ1|HJHZaAI#xz=mjz0jl-&@2WHBplaW;hp4>#J%2j;lICiX5ftf^KT2;}|10GS z+a%!po#|?~nsRucr=8?Zp71PHeDd4xC4-EFGQ~^fXtSBUP5ze~{+lSYRrpZ@=^h^- ze9+e3wC>M8bNZx=d-{EVpgLbF%5Gss$lSKEzOF$RpH+>03ATs`ee6Mp%lMZ*>j(PK zK0UwG;N2+8buKW<@QOXn{B8?nO-f)k#@hZlmM94D@MW3g+5DtM#7!OVgx9OUe%#+x zlR;)|sA{1RNFQKi{wI^yaH%ZWgePF$@~JQ{Hl zg>+d~wA9HJAby=5qq6{g#D=ZLB-3>VcUTXs!N;=o=MB$~m4XQbj>NKe{`hSQSO4U2 zQf8xS7H$KVA2s5K4()d6ep{Uw2PwZ7fzwYgI0S&;Iz_18cty2kv^3mUk}w*;xX zxiahYWY3tel;*K4-hnO0$c_>qj@4x%ewTJs|`wK^~!JB>XsO zB9P;3uq_E}k9DUja#E1a>U84yA6vu7LGY*fMk$s*VoIY7RwYH8^vD#a!ncdfU#GI zUu&A`AKHESq8gPp;jAKS07QwQSJ`K7%+LWZyzi_XvH9m=|5L4J7IgDXD+IVkIW{TI zb->=03MPpt3A*nrpARbsbr|`Hy!`$q6w5dm=6Za4)qWP>?pENijn3^aOu^?>h@J;M9{Wc3x8Y0 zZ^Tke+vxIMPpZUco)w(&cb>hqs>^Auueit>QIlsj*uhz87k}O0xh!*6(DFolxW*bF z5vxefpK56!r^Il#vI|5GT%R>32|KY;V|6fi$Y8-7<%W41&OPVCz#vC+qgvnbpfhj`{djF(d3?<=1?| zWeir8E|^V4K{gDW$6&2M`zGp)Xr|D_$!|x8L_H+UxMvlhLjin_p#BCJnU(7GyH(rf zDI{>5{irObF5`*m6R!pTQq z4SQ?m4>=-o49o(T?er%M8DAe6V?tk+;5|YXyZn1LqKY(Vp+k(}Q(8EPZW3g|$4V98 zWI6BmP069zeq?yN7=&C`5sPZXqfyR9rbIrftS?L&Sby?rN@EeHO~nnu;}6VJ3~Cai zi&{IP0ZYE$J1|B_BPJNzt^8~ue9sEbw*y`CG#Z%G8Gc_#1a1vUX z;~OR^o=h=sJmG1aU3CvT4gd3ARv_M4B`5HjF`@z?{HV~^7+eiuS~xW3_jnvCU9Xwe zj(H@uA=Z9r)aS7s@dEKZ$st~;xY&fv)r3t8m`Sl=11B}#6i806AArsQbCx;?AySaX zH&TOiEXUJnh;qKh^uilyC_WXf^uLbc18r(7frmG(l^I?(MYe%7PXCe~;kT;8|y#~X1`+uJ#I4bG?2hB#P(q}{@D6%jF+ZO==1R9ZCBc4bty`?8Zmw7GzB zUn)en9q>AR@9U*QzhHY9b0p1`S{-Zs1+m9o_XT^&^NY?!!obSvEka27K`}~16wp9g z(#Vp9hJg=$Dhc^c;qPRiUfGso`I1SoP!a!zLeqG);3Jk^xS*&figmTKj`wYlv@Ubg zS7I04gai;J6$2=z6O=4Ms7L4j z8!((#h6X^gsv$Rt551W!lvf5h8iM0$tqeLM0KwFWA# z9!_lGsxn>4A`HDa>eQB&&d(&XGWQqx69Bp+yFKUl6970cP^sB3c&n~RP_>R5lFBTO0*W_*_m+V}wZTQ2{c#qs)| z4*a`CFjeZ*;ozth101mMPgJg`$mp}jVQg@ zuiitHBw32FoZiqO?#e0$Vto0y4-!+JVCWPy2=%gDvC0_*SdsmuYOsj-UxGL$A#0#L zthaDocMCn;HHdFasrUQa1thDEy-?pDVCybS@6CRO;>4`489;;rLy&U5rII}^qcs-L z{-3&-33XAdw_`p*7ppUs+TTj0hD3}}^RIwV1hQ%ymSNv@B0BZ2LcO=?YBXu_!iq1< zKSo{FdogAjSILK-k8lOi%-kA8+NOQP$D|=bSY)htpnd`z`L+I;WmxT4cc97?cOZHE$%r%k|7j)|I}$7vUID2E0ZJQ%L>{eN9JXv6Ou zU@`KvB1xkYCET6bcUJQSBadKzck94B1{aJ!;A{dbZLYxg3uuPq@pU0M3-|9u#hW-> zeBK?Lg=`Fh`zD*V=tp;CRmIb5B=oaWKU$b6L3>2~{pSAb5_q%&l31O;4-e6yI?i*i z=zW|g)Ga7;vci1qU0!&PK)O@#q1Db}5^~(DG^>W;)~@MmBPW@c8J95aQXq?qyu%F(wdkDI~57(zhfcJ4yH6GVsA0{-@{r zLySmHq}R+7jY|&BDn5(q9AWEY7|<8L?#MZ zlEG8Terdi@=uCizU5C7BmO}iy(@e$JUg;9QmWjeWd zM1EtErBiv=ivj5zCu|9+Dg~8&ZT=(|5sSY*dXy2J+IAH+O3UO#!(hH7&=!Dk5TRiB-EHxQ9P(L~->yUe zqzLjENFTh7c6LbQ?6r&7TA#tn%WBd93IsoM6T@g>ckunXNw-Sim|dj5+ral82Z+GM zy%?W-tPz8Yk1yMN9LZ7+{t3jzcghiJZJz;p9DP_S7(aCHdUUT?o8LSspcgeP7m#h> zfN={n`^^5lBDNqLlCh>DR{gCD6w$=3=v~?5LxOlDm;@=j1~kMIqIAR_xjM+twq6yp zel0Hjp+>$r`dXLxTIHaiJQr6SKaA!id|XrP)Z+88M>C54-42l34y~xg_e`b#!$Ueh z_!SkFwuDT3e zqsAMBN;h(!SY(k(wAbFFE4rcgmN$&EOdCF{c_Vb5 zQzT~!1z$c9NCG%ZmQyK-SRkoej|z)GQxWidgJ+W-%HWc?(a%DtVA_odvxRC^JCHbioi%i&CK-)82XH)Ocaj zC_7=D;6a~F(3zpVkaM3CrSe+gC=EQjUSMYpE0t%2mTl;u``AkXMl57Z@V)pm;ZcxX zXT6;d&%? zG2gAgGo2ATr88-){oInBZTj2RzP9{Be{f0xPfGI;DgN(Q-02SpSokRyco#RBFjK== z?=F@eNq&EJ2Jxae#Y`P!MqcdMRunVU7rpgnUJP?T&!U%;X!hct>V{><_)X_mu?82_ z1}+!IZ(lpH?a!%>%{1kk52`;cPBJgDGd_BxIom|8w?g@j;)yRSu1<|xqL2&Yt2P& z8HvH}xsk3~b4b#7b?HPF9MF+kyOx}ktXDuTHlM}H{uVy6xGlzY?Bqb(_+lEZemU=M z*#2ME_j-~2N^kHLUgg6S3Z@$pv`)|&ds!d~U6QjeQER22%ZT);xX0-dv_&#ho^(Hj zHrRe&-NGP{MZqIElkV}3TRlJtB<0Gp4dd;uDSIyRk#M9EMEkOTx7N@fgzo1_1o$sl I{J-J<0Dc){v;Y7A literal 0 HcmV?d00001 diff --git a/packages/backend/assets/screenshots/2.webp b/packages/backend/assets/screenshots/2.webp new file mode 100644 index 0000000000000000000000000000000000000000..30b85d9b7cf9e8a08e5a4a7ea222f5c274cd949f GIT binary patch literal 86264 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 Z0000000000000000000000000005$7v3URh literal 0 HcmV?d00001 diff --git a/packages/backend/assets/sounds/aisha/1.mp3 b/packages/backend/assets/sounds/aisha/1.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..d8e9a2f2651aa5b8be7753a0ea63958e1a425922 GIT binary patch literal 34480 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

C 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 literal 0 HcmV?d00001 diff --git a/packages/backend/assets/sounds/noizenecio/kick_gaba.mp3 b/packages/backend/assets/sounds/noizenecio/kick_gaba.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..616b506c4faba7fd0ea24c95d76544ea4258a366 GIT binary patch literal 18866 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%0A0VT&oizD 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 literal 0 HcmV?d00001 diff --git a/packages/backend/assets/sounds/syuilo/down.mp3 b/packages/backend/assets/sounds/syuilo/down.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..4cd421139df12e590bbeddaa9cad4946aeae1495 GIT binary patch literal 18240 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

HF; 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 literal 0 HcmV?d00001 diff --git a/packages/backend/assets/sounds/syuilo/pirori-square-wet.mp3 b/packages/backend/assets/sounds/syuilo/pirori-square-wet.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..babf1fce600aa95cc4a5cf3cc436af6e9684be6f GIT binary patch literal 139200 zcmeFY^;cA1_%D7Y8G7hchi({BK+vJPL%O@9Lu!Tw=?@Ci6_q!l z%oji3dw;%vz`c8|bIw|4@3qcZ&$C}oyq;&{ul5vy|HDx8a(Z;Lg#6}82f%j*0SF91 zM24iIp<`r5v2bwl@(T)!-j$TOFQ=fSs;;eTVD!+;!p7Fo+0Dbt$1f;2ECLrDn~;>6 zo|ThV__VaF>Umv#V{>a~S8xB&$k^oc+``hz+S|?To&Cd;&!^wcFaG;;ee*3TO*t(k zQ9)re8ua>q|DhP39lVzUfH435V|H>N|9?;Xzvusx!2gXBz+de-002RUwdyl_6gV;M zF1Az*aNBZaXP5&(+lsc)K$=(>LM;DU%%EtKo6&e0=i8*kFx)48{Q z`YSrR7jFT_ak~rRvFoLuwF$7a6fD#fZT<`C(Mc|A97WHcKW`4WaQFD~A#dRxabMy< zz_ZvGlT;2q6K9g0$$0*UIWzmYd?Syp^2lcjhxsbasWL{H1c@^aTW%kVnud*ph&s?Lf7gaOImkJab;os)>=oX=-;l@1>RjQ zQ3w_@#9jPylxub2<0U~lq}* z1MW*JmkM`+k<%wL*OL>Xgzq2b)jmmeN@B@3VT8fyO^t0&KxOjW*Y)uGqKxfswygSv z*n>n%ytQeTs~(5AT*YH39$P_t7=2( zO2Lt4e##w*5XdKoCvhF_5zc?*Pg@P1yWF3d`Hnw~AmulkIY ze(E$w`FNyjC_Fw{CNT+%WeL_25D+wV>@4=2RyTDTY8$e znSRd7JjF%M&$FWB>mJ-rf|U#ZXGt7uXH$JU_P=@jr8JV6HwmGt1OF~!dlW?oba8Ou zzmF`k#a9vRIh0SDAQhv(4zLlY!|L|YH2^aK8wwXLYh)qPtBIbKM0-=A(NrV|Jx(km zgr1R*UY(vEU}0ElEm#-H=O)aTBzQr>dE4L2Z3+#*(7IB>-0ac|vfOasAAUI@j2t23 z@j<0Pu8=BnyA5y%Ii@2IY#*lRvuUFkSjVc<&i?%6uGyWB0~wIPs1Q}63?m~1fZh)K zU@47>Eq{$684)%Lqf5<-{vmN!Y(`j8oDt@~TJ`y!kG$`iGZ7 zxuOlqpUV=Oz$_q=E;$k{;%E?;8N;(yako8^5oLI*>~IBQ&>usmu~YLg zH(Oq9x!xCx*#$2jL?f0g~O`(Hf%6CQtl9qD&)aT$a!`8#9%;nZ?uV17-i zZ}UpZ>JYz%zgdIF|BYO8+gK~jWX$Z|?{TWF-_WSSyk0b@Oj0eDFymAvC`gmaDq_}} zXaDRpdFQU0vP(~${*MMHf9mQ6rf2@kt&ZH^ohr}A2}}GJ}TNVA(I?FCfU#C zai~#9+;+0J$s$`c>F3XuAqdVUL7r&dI(R<1ETtfYkWXgemr~QsB9TY?5zwDg`W(oN zG%5SP(gb7BgWiO*Fih#tq>UB}LDSHGgmRcYG?){#En|}pjDrC(RsaI%k^+D*PEs^q z6x19$teXEVdIO7v(^+B_{4$RM8td&A@{PIffIIT*K*S&cB02qr->OC4G$2i)0WAh1 zITp!p;9q+0XKk1oQu2=WhnpX2Upzaw%WV~NFIgh)4%~g1DR1(&v-IbYaWsTYugV7V zM!lxg)c?y1i7FkUJ46heOr)yQKXsRzBgVSzf2GAqC15IaxnY!8imRgCuz_bQDF}+-;QD%#P1uP)_>8~)V}?3 z@gVriMVs5n%RBdj8-2r7Qxt!6wLHHNagt4~3YEfls`#A;2|BEwN}JYoc^ixya6S2m zo4kBD5JZAN0CN0;gGm1&Tl&Fo%;Vhoe|i5*fFvh{KaXZW2L};oUj$77hvKoa z#W;EDriXE(h}acyd#;|9;ycyQlrmk+5bNgN40d=srb~-6>b1COf@d~t(2uYw3pafJ zKll}iX5b7NW9t=?&l7UKgwFrR)qY5s7T7)=C0kNS^o5)w2I8b&kT%EFg;E^kWg}zmCgA= zFId`m*4^csj%JTi-~iFDN{NAYi7MXk=I^;V)0uv}&!--g-x21y>f+=+?o;kGo)uXa zMMmoYqxHL|X=xz%&XzAfe|h={T444~wL)Krt|H^xsA+qqgtH2jEBgc882iHHEw!ZI z=w`B^SQ5V{1=~6qO@c_oAYjLPL;|UXZd2P>Ksf1HO+3G&ofu1*ZE654h8+%a#nD6Z z39*^4$Uy0XU^Fj`3YMNCtZZAskv@nP17`tE2toB|ku}pxfBkd^_$(lq;<2MiO&o(_ zTyXdPqc21sxo*P_6DAtDH!FZtxoFq)}Rx%qKpMZgk?y&uC z2g^30jciZ?10OW10&Bq#WK=L+*sT_3gNbrQZX?Osjsh*yd|${x%fI5t(ELP?ozMf) zg;|2cGK4T-=}3;CP=LI9yTzs&==gwt_sd!!&L; zl{OuB<=Cj_vNSVVbIh=|y0GX8UJ7lmOOL*=)ay%p_KfHc2Rk3ZzHzy&o^ss>>IUz4 z`3mUv=8Z{O9#y6;x75lnY3W17qiu{w>2%7ldy5gGraT4*t(`y9inNY{SNt|P4)2;c zhm+NlG1$%g1zweW(wt4Fa!>VDGB&=A z7`JFe+l75e%c|(WJT4U>O_M5xo&*3_^=WPx25Aiif5Y)u<$o#K!R3qOvp_(&baFVz zWI;0qg5n0xg0b9#{E%64Fk)DSR#Rd)<5O@6%){y}wf_z(c}a5XxG&}`di zNm3kE@6LMkCDT6p{W;=){#O*supXi~vL*h#;D7M@i(4v3VD3y~*r3lE%RaEJZReNt zcv9L%jo0?Zplf}a0Xe>1EnX~;sRy#&pLV8*wg1+nBG!qn9TMI)?M;wlNAa6AIIlpJ z$)d;0+N%XX`-_fEKdq~CU-2UpA^EgnjAZipa6lwKH$;E6EQ)>ug{HQH+O$Gl>&+A* zd_wCaX*?3(Y^+K8+tR*Cj|;9(6kJPfE}z;rL5Ds}s|Q0&m!JC+TR05{=28c>+yqD) z$S4jH(mVJ5`AR(g{RivFzeQih>`S~4PHV66@Sf1n!o@g!gX+bsSv}!e+qdkw#6NQ~ zdIA0xy))(Wybs>tAz=eo$?|$%~qdrTMj%X`V|I~BT{+>?0 z8T|T+()L*qXObV?TdvSf{NZK)eewHyAt6O}Mz!AGI!xb>Vpj(ne3hGo(OfNM8mOG4 zYUgI+(_9+$-4JabG!1`{Ra9GBFUeLh6gClNr7J=EU1oz~>BF!0%Vb%NyLSkWxRt_FYAv7RA2TFkq z#-J`t?0>)7;>eG-*|96r3=tiCI)l?4`)~SvVAF+og8E1+3MgGs7T|dy!E8rp63jD- z-40P;C$MBByXrbRav*2;sP?h>L+${S6;R>%osrbI$M|#`X^Y+1bz&7%q--25GBET7BCe z^3hmrY0&UvY;>#HiAsFA>;vsX^o{aA!bya= zh3q1@6yLz2fFS87&-h}vq~1HpBR?SK`w|+T5*8n6yJ}@uJBY~;-WDZYEPm43UK?2E zr7Q2KJ`&aApqtohtdu3z&rUwbWX;Kx3fDUXUukoHkz)oEsyLAcoG+;7FpBS;#s00oy?& ziWm*Biq=mvx{%-Xh;i7+aU6uAPL$3@XHTj1UXLmS#E6S&Hs=8<>))4 zPYZ0F*6Az3-uPcw7mx2$Lf<=r>-OTlz*SD;Fu{RNvjAG}tix7jy zS@0_+@lPGZ*)=l|$6U1xa_c2TBL|-qmNu1F2EX-KmgNXF3yDdF5-V?LG_jOJELz~P zjKx^`EKX-(^Ryo$(##;J4leoKh6###K;$Tey6#W4oG`H>s+ZCV<72^QwBP9(z#BCa z^}ND?FnzN{K=g5kA)3z==V-K*v9R4OBSmh@7`a$wwPe|+HSMkt!>yV2#vn*=H_rTp z3S%N=u11yV#;VDFn)ure^9;i`d}qdAbXDsRuP;^@bXSM@xZeX5#VUMz(s@Q-btqQX zA`eyJbI*Ttd@!GNZ{cC~(;1+2+IdK%(O&$>2b$DTt5&r*sy;G9;rrT&LHbB^PxH+O z$G%75&!6%1UdGa?6c+%#`W(>2fZLL^;6gUu0^LfRJ7@+D`=sq8hX?80oHQpd)2Mrr z@gAr&>e0u^V=)$Q;Ol3)9BLa0R&=bT%<*dIRb~lh;1_s?fvT>0Z_vz!6$Gb-&N}IX z;UE@H8*P|l2O0$y1-waw_~kR1!d!zYTPJP2+;Pxzp6o&DiX9O#N*nbyz zbA7hXcd)@GY!%uJV=1(@RGC5|8W-eT{5eQ8>WC<{Pr=YcYIQ$b!-rp2%$9@?D-EG& zS1O71a&Xi*J-}n}alF=d;@Hc)7L+VPic|pCkdqG+3J-k{XjIt82znB1h7y zrNJ>Rbc4vqL;RJ{4SKD@4pqFitXR^|JVqEZUZI_Y-Nu4zCnT{{>(!ig zg0>P>vm=?3OA|v0Q;B8S;i0)#T4^avhiJbv!LM7lTXY28Ht-t+@CD|^r}!`$xs17e zcTN6{I?aB9`|4LL?yD$B99>vOVp+s1^2Q~wp`}>U+3y>NaEy4_{rh>2_8CDecBirq zEoEM3(9hlV@pu5OgdkShI*f{AF+7HoXL^oSRqR9l1@Ix_}H!d1axxuj*I7u!W zW<6cfj-Jxb_SAcw)@}i?>4K92qZs6o$o!9QlU#>3G`h&RgHo>pLfk+63P2b(L&hqs zj=?$e&Q~z<|F}#Ksndc&)Mffm+*A*?Pu8!ddCo^d^heanZG#nUj;L)-q5kF(w*R5b zSC&t26uPAz>@%aQ0K!mFCMvWMh>{Kts*=57Z=(wsIOz2G#2iTC4Sb|I@1qR+_PjxZ zF*4tU9WHDtDH?+mnrRR?{r>*NEO$483n_OlLew|lH9_8?x^m0&4jv!DFg>(@{#&2q{ckVtudTiR_Z+(KKF*8m!X*tC&lrlvq ze?*OFv62yI!Zay8v=a2LwTRa0iA1O$sAA4VCm(CQm%|cc#A~czzoCM-NWTXC;iIRv0Aqq$zHF@AuG!iASFuElH62aPDXI{Is;xhTrE7b?kx!C0bQb z>mrIv&2H=SXLBFgaw(!1IC)1L0M@!qQqbM|U;rN*j2f*Jr+##f#}B;9@&?Zkb205D zftb5CC7+A_IlK3IRuo0;g+!b+S7CV zZ=u-7fBQ~;^`?kDpNYC~Ja?N36kOdXN}gbp-)O4H4#-w^W#b#a-56l$H4*>!!u-$s z-%G7kZC1522B#@nxn%$hq<&E4*Sqc+>3RRL)@ca;?Nl%M{zsCEQaLJiAx*{Q%Aa_M z4O@k}3wc-1k-w!ST#^=lbNH)~j~NkR#V{wH*<4cTnr^50P*8L9TTSNW`}B(U={vwI z^pY~Pprx{^noO74Is#${8|GUAhVXTD0>3z|z~B(Z1YiNC&Bz5lisp-7`ZrGlLavw z-LL+lQMOIgX{UQ$neUkg>>@B53u2@C$S=Cf!`QH)bYWqOn%CkMoxisri|VKJnV^Xm z7nz;&hASstBmJf$bPEbH*fJZ^w)kUS=Z1Ze-dN1u5CE!vSjx!(xLN#}so$T!34%*o zspk}p`##)+$ALeY))iqX@`{76YLQVF4HpIW#;!d{spEH|1*zvc-$&v*2#QW%V=TKZ zk*u{+8R=rca-462bi6zwQPv zCSI1@SnI3NJ-@_1ae)tv$A55cX}%;drJ|WX$YN5%WwL8Qya*SMA||P%HPcYR%O0;S zhvChy>ncR;`-4K=?{4uVS)MznD?h0r5u)iVAolg>epSymD}TMhV4Px9^`^-nzQ<*Y zBgvl~*Na~G>C@BV&CGe(`}nCNp$MJGpgCo%aIR%EFA=pB5;>k9P1C?>Lx#1U^O;8w zkO)BsF)S(kL!%&;Xb45@wrGtFy@)Cq0BYg}knlK&hn6|zrVSBsk`teu6MJGct2jN0 zdQ5X^BBncUh*IL5zNDwY=0n7!q>9OG*th$%6(!Q;7AMP- zqG~H7GA8_(gq3xy=Ed8RT=fICX3odSrxmA<`O|blo$KGWK6s#JwQsg!r#v%#{A8TN zpGs_TgE`gry)a8O=gw}H{unc%hFODHhYDS?$|wiezGv~Bq4ACJ?u0o$s$eDBF)(V- z5KLF%_)+jF`xNvfOcPIv{}f`?{NDLRxBceVk&D+CPd}WO#9cK8Uie(SZhN6yo|LR7 zy2WtV^1JhZpSvh~~AC?>l~C(Lq{*T%{}YPh zPGTY7MhWqfI*2O*F+rfiDg}F*C0^BZ=x4MT03`L>jdDtmIKd9Q1gM3x4W0_9SFqo? zduJpd!$kqE8Fo&AeE=a+Bo;*s5@o@|C@Mg36hvbpIEH;b9WWai<%L(dVq;y+@}}IL z%rDs5rVu^tW5_6BR7;TG{wnSLqS|-S>K}e3Kun2`HT)vqX5!9V0O+G%>>0akr;$m7 zYkj3ZC`7#pu94^W8W$heBAXK{!5r@@dyO(~k4KSeZAve9sPnclgx=D%VdYk2(+jlA z574dU>upwN3;&Uv_!W$6W?qU7DG`d&+dj&B<7N%#`k3@odOMX2w27FelJQ zerY<_7)&<$q^0Y9e8AKrM<1!gx9XzjBqt&hM*(>k?_hdTZ?R~gq=vMMFBs)u-pWWd zyLX2g#P~GR4>$C~%nX!)gn(k;fT_sW(ne-#i-b5R;+|`Q?YE3X4D5?P3t1~q+jc3~6!r51;kb4u36c2+ZhI6hUu zx`|fpz#%#D4jA^aWP|lH{F!+-JTp4k_dO_p=3R#*BB&L=`ZFirwWqee1%D6!43(lS z@V2;J{cAIWV*f?Rjo|)18P$`}{+166dTbYlDSdX1fABMq#AGod0&lvU*rI}Fydxfr zpQ$zzTfXTg!A+*MyEMtAz5R_wjx8qD<`}Eso?7RD@&r%{EGFBagP`X`Bb@Bix`1|>`*DkM;py*9a|5q;C5qVr+_*C0B~%1!^L3GVZ`xM?Pz-P#lx1J)ltXwrPkV_?htiA0NX=C^=GWsk za0?IsyU7efKs0_aknU`T&NtHqFh0%&V>JiA5+>7t(8G%4B!tQ~lWVdhDlp`r4BZ%z z9s|)mYS~cu#`e#Ljkl9zd^5Ji(x7hsRQ&-ynWZ{qce+$HaszW{3e}(b6z; zG<7r;1mgg1JaiIIt^Y*o9CvD9+G!{FtE@RTYU*q%BeC={8tVqifAUwLczmDZzO_nh zLjN&~PhHl_H*YHI^i)F}`WL6Qmkd;R)qSsj)icq!zg&{LiAnEbPRPVE_sf(xd2{f8 z{tP?_%?PTIFYGBmOs2v_QBF~@%(`aW=?l8vzNxZ$h(>$Fv=g;*(5;!vOplW5=JuKp zuN#JtO=(ne?(UOLTGcl>uRV+&cs!PO5B^v!YeJ{~ixX=8{BcV-Dxz48N~-JHJ!Uvf zzL0o^)gmrc-@*45tXXsTxic3LXj@emt9X+-NP=T0OvY# z^PYQOx1?OM#-pEWGU!60Dfvcb0ZFfjlZ*joK|||%;IhcoN?%Wj3!1UTW9 zb7u_V`c(PT`s?GTYf^Z8j_Fsd8pe>mWgG@M5E>)s&39ss0=8)a?satLKDe=oTZtCv z!C|a$Oev3vyzS0%2+ManT_iiCMfEn1P;Gn&{bc9|v=MSnRVREw^mgFxHZ`|68gin<|nVuSzj2D|ijJ0sAERVX< zH~TYR>H_XDDw(cQ>54^~eSU03uDPC^po~O!{B`$bWEfsTHsP1$y)T*@YMjVDg9h!M z1ILK<@V$ZD5FPwwaZ5=Rmp`l16xA46ID8}Fc1l#U`dqzI!a?(WBUxpP0;OAT<$uKv zYP#N3I}suj=m29LjB!Mi_1_e?SCs_USQHk`T*Z&30E=M6(D$K!q#2|j!f(;rvh+}p zDXtXW_HhuFPX~P=bi+T(7{Yifp*ucr*#crn_Urm~PoO?5+ zro!*v!Q=6N=7~b=8<|1k&-~w2jF5vh+D5I9UQ5W{OyOsE+bdoox0#2+MU@H6b0`UO zpl9az6Hykdu^YIsTrlcU!@wFFF{k3!K?q?q##4+8mJ+p5?vDSVk7D@kMSAl&C3Y?uV{`O_BJt9Ak-YU~1Qt7n2}`?A+jg64Se0s7Q886UMk*DnYxnzp z%PZapQ%}(cPeby z1<;EMBBi`Q0GWveyK0X|+I2-WG`J0HCwY5^q)QZp9ceKO#Q&_BO@@kjlhsoA zQ?+~IZ9TZ=X%*HXpnA+(HlVwCRw$23Yv2c!AW5))6b#UtWC{z0VRxIhpc|2Y7c{%% zh8KVh+*glFMu&F6z5v%wBM4G-VZH5)wU$TQW;O7sN&tO)I)WAUO_Puoln%hr+%|yl zvXY0IdKso><%A+`4BFsHcwku=3%K?BhCC(8eaK%s6~(@oww0KuVMv^QFdu_T5ldG* z@|Ne-Cv!?oula{xb`UK-c@GPXJEE~iwrp;1RtA5Kl&uQWyIoJkIhq~ertorj-=I)ADZ zytn?h`F+T8n?~q7oY>L7A?%;nV!7}&illrpCJ1L-DN2yC$18sg|FNlBH7d!FhyfB~ zqN$aO$6sp7mfqbRJfs>xV zwhO5DryT$MjHCCvh@*F&xb_rGMWgOe@+%g3L_E;4t4hY3*v4Of9UkjCzAc;}i$eBgWBALT<&@2Q6u>;SG?9w*<%sSK#pbR0MUh1$}GymJAU(gl{Ro zFytM;7`vdqD-B0jiP?4f-2N~N#>;9Lax;$Bf4#I?s5iRG9u{BPo{2|R=Y%&J#XdCErZeUV9Ye31^AxJhZIsh@Yy$Rd2A-hLs{9zZdZ3O60(nJ(k;W}F;)jW9)c zEh~2?{)*L&ou!x3NwejPdgN)(p_Z~gx|Y+yqf9aY%@qeqsehG3r75RZN>t7UrDn9p z#j0hVfHL(fSu>TFj!ANsC^HmIXMSJL^b?LZP)i`dZ2;U^>b{el$Ixor^OmAK_1cy{ zZi~D4S0aTx&2QK&dn7<_?2x#{clXq8iXGV_dNnKc$36!SezY|>0rd1@K1wTO&-p^# z*?UUfI2h+oCybK(SRgADh)$Twc!)O@nJgC^99MwUXA3SJl4gIvo0h=^fgKwUir6W^ z)>{14YGR_HHI8EFhW@0ze)+Q8lKjXCp`TH^Wc8w>uZQE!W7-z^f;;pm01Y%4Et*gV zLhn7x-tn~4cl=|E*>6HGa5`-ggSi95jFURC$r+LwQ zeZ|?-yQNNBiPFQBEr87@YjqZ0+QSS#^R)fGhghEZ971eKWsx;pO3jg_0T_sCcxJ2c zOLU|J|0*qE-iyrlXr{7a8+EhOrm9G#z)AZzRu}(BOvK4Ee9AOb;Y2Rku)GNrb8$_T zo-fT2#ji`EC@|i*ijOqg5LS(=<;yWV?W3taF0U%BDlaNRQlfom4V2gdwCjJTP)Jw6 z@{0v?a;;$Gasr0t5 z?fvZNpNudk|J(0cax*y=T^toyAiCSmB(al>4m(kE?32$NSt}fCXR1c$h-FBGb@>hN z+cD~Ey~KO6I)oD;?17;K;;z6V#{R~-w^6jFWlbhXFr~x#uX8_lcx#-*tGTH5)p0dFzA{h-SVM$#?w~zxqj0k&{h9VxVia)=iW- zT_7RT{lShHb|(>k<<|aXLpz0fdBT*Y`t%8Zd22$ogNwyoZpWn>+L=#+x#~*t(M5Tw z&&0T&az1g2-L?I)xr-rWVCvXMCs5gN3#snvi<0~(`5Vfk^QY#lvV~MbRHr?*B&uyg zsb)-RVsa{mh?a&kIflkr1DOd*e|wy;A>pDQg%cz+jY+;N^Bw&$x z;WkRlA{Q$7!q-}`mPe%eD)6OY{s5|5NlC}-u58S^DZX@J71N~9)8(^`a1-!Gjy&^2 zZ!B_T*mQKcLd%$oQr;Qrk&qk#<_X+x1cF)M+*ElSS`smVYrO*pZ!ci|2uTR?0g|f(kOJoXRv)Ph zLWnU%$ncZ4vfcAF3-l2Q?6qV%W_4>jrb$_ON5aYKNN&);+aW!jWa)qK8+CDg(|=WX zSAHz*VJR&CgjFhw<@1FyghjR(OKV?R)?Ewr9L^ozmVA@0=jpi}Z}*LG-Ph}}@GYVe zs^yv8%;SmFsHEaT%{EPAjuli!{Y%B!ANoulF=Qp4=lr4e ztq;r7TReT-yRGI;clx(b@=M2jXI+na|H=V-nM?t~18Ua%KZo^V2JaTrpWn->F?R^} zSPj>lsEL^GXWUsAp$k7QvA^(m*%or~bus;sU%MYIeBJO^V6+9n*)Zz!CRK$!OuozL zCNaAV3VkX5bG7}B!eLhLC*5{K9%rE!^wC7Il=d4+bvm!p=H?^B#>Hiy7&34tcXU7? zlQR8B*7a)kxSCTs*V5_FHNbG5o^>lpr+0F6!>9-x-e;j)l9!RXf66VKK=KpTK~^djY7wby_)THY+;@iDi8za*jc(Lll^(pGANVrG3Ig zy|s~l;3KkXnt$xomBv)}14*SlW4aQvaaosxZ6~NHiE|JhEXy8feQ-1i7*< z7OHlj&17F_CJs5lNlege)&aJK+?n6?3kx=?YX!0L(ec>V%B4XaV-kVxfd+2j!x;5E zb?^2xku{%g DqO6!*aR*wCScT#4&+eMMuAx3{XCw`00zDm8+6wypLH_cY6l3H9H z(C{r3WlyjADi_})YPVvhA!_=_asoC_vtO=~+I`cqG|^CGB4bqBB3!FJ?3-jnQO^B1 z>?9HYr?R(rYBvA8==YE^)yePig4TT@jDcH1Gs*VYngB<2Hq|r9)M5E-XnY(g0Z-;| z@(!7nQ7$2;16<$e$%{t6{`xu5GnY&L2}onB+xX__*hy|p)APi&;vD4?7dQ=#xBa6T z?2nP8>S0H>x9gHiiwwOG6B91GfQR-rY$^pMShvVQWk$jJfx|@$9-2f~hybh`a&O7i|(M zc2aOO+2@|XRLoHBG47^^hHs&H7Kyk^+_VnZ+ox&fbECIihIb6eiQ$+yVvyu{!HF9o z2ZY{ip|{qy2?hIyU!G|CypWNKq7wP;Gv{%bE@gS{zO(6!^Be)ar ziU_oxfB^fK=`M_EREVvA`gv2sQ^;)u2{}vTKYaqY<-_Tz(C7RCFYzOtEH8eGHA~pOkNos3`|SkD zJ_N=2nElhD?b9#Mg780+7vvVmCFeBD$@z8b9 zh&z~=FVA$DMr1kef){h`6b*#C?e>xfs2{XL9tLB;(-<%u%9Ue4#JT9ONPc`@}5j$W+# znQFNxToZL1;~J1()hVhV!!rFZIBO23s3E_Kw;RG?=nTXgqOq_YNjn(`!r zsKrNZVy}e^`Lc{XO|$z)0JZGTgpX|Nx*y^3j4lq;{Pa*8&iHp7L}c#Gbr#L|zxLTx z8T3?Bmnb?(w9$C(+X3V5}@#zjX4@jtqFxoWaRL`VfWN@Au^YAw96t9*c`D~Z8Qkita|v;H2?XNspCh} zhn}j(Oq%DlQD#!Y2Q9AjMe_M2H?dpx^OvXgzx>W0N>ROX8|!=}v@xdrnR~tBI^-m` z3^V;?z}eMcjA$#o&B>X_zAA(#5zo#k(iAE3pQS^;%O7ucvk#cRYa+X;k7ie;%*N95 zq#JlI$a~&CHn=YluIDEq{t@O9B}|cCTAj zd`3f>ioZhkHN-WtJ~A-yV(z)O^(N@?=hRHVh1QoJgP4YWK!?CMK#X%Dbh{t0~k4xeF); z=M@smkdCG+dL+N`xqp7Y6u^k3rTrzB?freONU)&XO$m~WQ|)o_FwhH;!f6(3&8P0N-ge9A z5zEFP0EW0nz7jKKzkcxA6`%Tw*AlKNO#-X0-+vgkVbC#THsa`Iyk2G8DkS%iwCkSB zb;BsimFIDRVCJ0u9d6(zF$)i*PnAD%%SB80^_lszChzVnOT(vOU4$#_T?;boi7 z*_8d?Ba})|am>C?a$ii&`)>5=*1vzX*3(qi`ELs)vnx;US#EZ`_8g?uf z0IXLqnpVsukrH;NdnVX2^A{-mk_J_=I zG08UQA_j0cbjhuCOmCDiojrk)bvmO#!!t;cB!-i^_=CGtDRvuLP3@;hG9Rg@$q2{l zidY12wfsm*PLStU1V5J#JLq2u# zY~^bimwHU!mF|jEdu}M4>-kLne^2I`{QLv&NtjaeNla~){qDK^OxFA&Z&rL`KPVDnhT^ZsdC{Cc&!V6eU^0HxQTpfinMf=jrYGs6oXRvpDgihXZTj1y z#HkrWFg956wKTw{T)g=z$L^)*E&EY9gTVNyR<==pZW|H-Ff~(jKyQO~t9>pZVT_LF ztF*#I*db7?A&R@7`kI4I_N<=cW27b|? z;Paw9Q}L)9J1Y-%k4rSoJ5fxfWaUM1Gp*Ys9G!~aPg0B2W%^m39{SgeeE|iBuQyFr zskXhJQ7tFc`iEa*ES+WWKm205g>L+B{(rZ_cR1$uTc_X2mayOWU!c6@`}+>(&0PC3 zan|9?AT|F?HFrU>CRCfC{Cvw3&M9`Snx5G?FC(;OV+G`{;x~tdZw23WMI}*~ z_;q2GE7DsY%wyFz7XNpr;VOa4O9@XZgus@OTL(Rg1yVY}g6(0_V+ zGezdp{?-49{fG;vxJ-jGD~o*(LV^?PWb#Svv|K0wDh_#o9)g!LFXjdM0nCC)yhAB~ z9NJz#jI9|rVqOvz8$r*Gpq~yk8Qq~_o6>uQgG)r1*6kMw1`|q!%XnE!%*}MwAhpA= zmk+*mZOOD`{u`CXnk5IrRNd1%ot~QS9U!%#xo0D1e>~(1I>f07_5Ur=<4+mi>HLd} zRwHa0C1hp}+FDB)|8iIyY>Q-5v{8dOeJpaPKTV0Oy5 zCf!odjH|t1ii*>1bl}W;dw4}kp_ToIwSaeNKb@hknga0`y8K7^g#iW%%Nqtb$|BZ! z%j$iN6bqjT{+8;-UQM>`9e$V#$>TE#AmPZMw1QaYvyRYl+nc z$6QnURLR|xcVfad3rFRjdzuT)%%yJLVl;a~`F$psea4+)?>?!JE;n_lz)w*bx->0< zRd?^#4&CQo`(?DKx=t=)ME#88{;vl2fA|f<(!+z*Lf?9R?RxZZ7AACbtNoaw(JO2C zMAjNjYhPd|A#VBy;0|*c(=EMet{(w! z)rnPT6X|dn>KY|#5Elz;WJ3h!8RmiJ_G%fEQ7rlv&wF}gle^nZZwhN zu9yb4@rg$TIh{xo8nKAEs>l9}1Xw${pQGG&R-N;)D(SH?-XR3w6^g41wAd&w( zWpBBM-3VtZ_fzlRpkUoxVLH#T7S3Af0i&mhT8U*TpwPkKsVCe$nSb5XJWp!MWfA{D z)IpcLx4%h;t-R~p(w+{KphnzA$@{T3wzKCL^=?2@me6Ja^`xcBXfYZ8F)GmmCyo&U zvCf%kWkD-s4hCciv&XmACIA6DCf0OF1ac#C?gi zxuQnqkpTjVE(%ak6hr1l+hX6vvc6ye)d(w`fDm|IFIKkK5q&&x;V_Hn3dN1%^lBJJ zy-@||LYi$TfebJJU;u#Ack<_5_IEVB2}vqxf05P?PVeI*?mv%g zP`5JJiz+J7cdqhIqD;wTo0Me~b3ZcGr(mB&DbN_j^8XhVBN3cJLh+IHAASp>gOnbR zXymMVcj!EvzR7=Yha6Jp^k9j;%a+JTeFf5uM4;rN{;|1cQ!Q=x&b)Rr10HHUG$7$0 zr77noq*3ff9c@st>|)#y#koCHnr|Ox{I1qm{Y0lPK%?8s4>u>3P}ZUHEZy0WaW^%3 z(dp=2W5X~ZcUM{UlVJIwC~b4N-QC*pM)tFjefAo_pMZS?f1cSX2FYU{f`V?k^{FE= zu+{DBNeMh6{DYT>|Bt1wjB2avx{V+K0>!;FxD3Y|Q-+EkvCwOcuejWQds2jG$c*5H(I4zNrk zUW(%2j#CyZ;o=$u=3oiib;BbBb2If*^!hUX;?3B~KXI>fk(@B#v4tT3!7r>HRy9{J9FkDmsu@@N}n5l*GhL4v1tw{K7= zZ6vQ|96HN{r31z+C$Qe%L|s=DMx6oXL@Djmx%sU+Lci+6wKZJK#^EHGGQ4wu`Y@WD zW+sp13z8TeCFK)R2!N6e7naT9;3@e{@hx}Im#<$@XVR!1SIU3?)c>tJ6dmfz-ZQbg z@7IYmOq4O3P_zL&I_-_r)--$#&*Ftm~Ce? z_x7HT3mjN)x%GOWw6*?M;H%*`qP^B{7((SA89MIV-~Qx(DrDN`Q9_2}{n~WyGmfwe z@j-FJgnDe?4}Oz`h5UIexzu^KOry@f31xABwcYs<4czI95gakh%(+m9 z{OS}C03%}zBn-s-Cx4+ul+VrrF|ba_!qu7sL}-ci49ejYj_Igx)QZwd^>B;3?nAyS z@Q3aiy8fY-{MLif?|?zNY#SL^k^YjEmQQBL!tV7zQTeG!J48NA(vT=7BI`T9W?1Ny zTgxC7VANBhi4*2vTUwMfxq_j^lZE6pW@aRoaCQzkd26kE+PivdJ`H0YJCEQS_hW=;gBB=7Q(40rT823yY>Bgz`| z8^5mgZ&OAokfU^u@>S(@w71=y;;ZK2ox_DdU@AM=!&U$>UErDS@8s;-wFn>$G7Xx zdj=&Mi>QSRy7jC7>;F~gL*QXVjehgA0y^?hZqE7wV0;HO=Di5KLP=Yab}gV*ffI{p zITYq(ZG#2R2OL(&#Obr6EcV?!Nldm_QpDqJ6 z`M)5op8e3W)y|;vep{w@VVBf1h7lVmDQcEsO7M`?!= z9gr+FW@*xh{(I!zlBofH3gMphCx5WEt)wrG~TqgfM_isHI zL}n!?A%{y0n$Ql&C93b?=d5EIuP1+9Ap<)(oGK8-G%QYC zu|og{;E8}z^O&#BcE6v1dGT-z9yY6M*E?-W1ZB1=x*P_!m6IS;@JiZqVG`vV-3fk;>Kr2&GesDTZzllTnR;^@jz zpjHF)x!ft7T~IMbO-DgAmgrwz zV;6QDo#vcS`It_I1Frkmzn~z9B!37TISVf5-+mz)?i2OLWcq|6UgN2}Z_h5*1kKJ% z$-c*O`}!nnOO|81`fx0ZiwGWsMul>SQ%j!FW+7?>1H45gAC6K9&ScK#o4vF!2)H!d)B!?ar$Pa zd9v+TvpA%Ga*!BYW_-{`s$ z>hGz-Fc!d<`A@|xB>f?1;O8?o+HpjbH<7TSzIZ|+LT(Bl2RO^CfuB7~yv^1?n`bzx zGVJy`Q=ynJ67ZQx^i=I`8UUB^3GIe87c`mxBboHo9tMF$itebdS6^B$U2+2qU81Tu z1Q;8fgqPQ%nOzq3?q4#6Exqfvi6T%`dIwe~CLs*xhlo`Fz-R|}h{hWa)|9KpLUV;@ zm9muDt(|Ae64 z*&NmnQ;22R2nK30pAJ%iD%9$(NLUc2c6S7t(H)-AEmkC${Jt^Z1(O%oQ!-V`E(z#s zlLUZG^n~?E$30X%m*-AlJG%fr7D8CLN~^??9d(I{>F+ll{BsytjGs?4GKPA;AY3i^I**TJKd0VFrZ-0oCOy;k$WLsm!>IbuY>|@q5>w~r?mD1xsa`Drm(J9)XXiI5yj zh>@k)y_kbmp#T!LHqjXum&U1^GvGo>2@__%Rg)l+w*TQ59wz)TSe`LW(`)roG|DIX zkEz%Z9)Z5tX;X-;0;RgzeQ?Rrcp9)ha=Q37Jh5E*-QN z!;<{TS+FMbfA zF7M>r3UZ(QPM@8yo2{YR=tH5io zk{z@8|IYWLsJx04LOcFTUf|Buh%WTh5(dA+38FYP9@L|E;nvM8t9K9uj3$YEI2%&L z74bwFp02O8eyHDE=I*iCKS<9R*}a-|ZW+&&O={YAic9BDspIX}Z`-BzV8f)RGA|5X z@bdj_Lq<$r!5H;v0>oqYkrx$#09XZu9$~3ti+W+=Pj&?8f0czuE>>cszGMGB)OWi> zgG(cmW<~;vz9!%i2RJ1YIinmUVM*HG)CzRQ4THyJbHFt34=imuI?egtDD({TS<_6?7w8j|C~V;gSaAjL9cz|m9?2XaIP+4dulO#QX@!M*xEj0`is&oC2c4P;ze&)~O7%gE$Iy_5&FD9hSMc%9~ws zOb&oRM^14(Obh3&OUqkZd=Po4!LF8x<7eBi&QirXV0jMQ>1zf%aha-PV7i^LN3`(U z@pLdDGCW!K7YREK5|SDa=~Tn4;=2s?MWQ4?~+VK@jj=Xep5( zd7U0k11%#a=rFpQX9|)8BvMU8k+Ny|e?|4GUk2z0=+;RJJLFAr@Lq`x&%ADXGy0!R zS83EBcEQ_mCj8Mcn2gL2Ka&)*16YKZ zhf$rO*myD-BDx^KQKaKc4T)<4lbjq@F8<`n-F<~vM1@G^McqfM@U#L(ffp|dI-%U5 zs4S(o)$AR=Pn8&n9~a{!prw`?^MI(wy>BUeDmET@i{vN*8PD~?zaHpZB_8q8fBwG? z0`LRIzD+E!_f%yB9evd1+Zrb0HiRglA_ z@8=hD9%nAqODKOwlk_hJIk_$ix#;1U-YSzsX<7>@9HVquut~4Mva)89ImQ*R(S88+H3wY;WJ5vpSB4>5g{tjQ2Q~5i>ROo{=CZJkmSLGR|j#(4VZo@eXr$kx4 zITxS%n%2e3Td@kWQ+4IFZ4|IRM9VMsl&8;3zRk$c*U+@$!L`RFxPW@NX#;R+;?d zjbn_XHfN99$|>9L?(6Xbk0FgO$SZ<_{j&f>aKPX1Gbt8nk(fDDbCfXf6YRoQo2Zua ze%^EKBL#Wo#P9;pK&#ibxT_7b#i&FAf7z~+pNZMz2c_mq)GrAftnp~M5f0hb=$!R0 zs7I>B%x;9%c$IAQ&vV1&Yv1HvtED;a3yut36Yd-Bs11lWPD7KoYh4vp8rDuWDOlW# zd$8L)`|B%C==YuFHS(@}HBl;298z6bY{{5^_E$4j_-D}IP+G{~`K)NcOWy?3)ic}# z-DhBjo?`8ZzMWQoDzBG}7ba~drEbKePwTdF#f>vO*|3YtKg*({H8*`Tnf&RqG_Db! zFgiRtp`mul*xmudK||G+Yr6E8iR4NE48Sk~1_1ClMo2WYCxL9V$2xgA**L;8kOI@Sq*iR}fGHHdvHHL~J? zc(*(GOu}`MH1;$`5OOFMuq4nE)iGhC5m7=0DhlpEFvw8zh=0)vHz_$FXq@CQ&~pj1 zVb)wjH_cr_a#-LPRsu#TDFp1E`6v{+xZ4J*lI#yHZ%7qbeia{LBxLj?<84`nZk4;; z7=Th35Q8KUZ05Ru&#G8Tt?|r}{7m^+K$L31wuq_5&h6tqA)Y=RN!9i1Z8=grToL}T@*l79%}#~;Vvid?esf~u)$amS@}QTJ;v9kqrAyT#weNEXsd!qt5Gsg zD{&os`7lfU=Cp`1E3T(l` zb-3hRRfnr;+Y|iQ(xbjh&Zv}uAOrA5$@K%UQ38$s#bdQWSdAFSm7L<;QI`f4)>`Ri zo-&`P<<*f$7lYymnV@{x+-1=cOPNz%s54!GT7!T1SJqHm-DmwO{oqhkS?=TFr zB8{92VX=@i1?n{HcK=4lresA14lIm6?4&7*TjeTLQ71eET2zb!t#pfHPQm@-1oZco zi>+t^o~=yk8td2VJRC5Aw%@nbrp32j46r;u4rKJ_alP56i&TvA70VwTmj2<_1o_W@ zw)GwDpPLmeed+tw^wSw0fi?;(*RyLqz2K}~^>S3o<2nYXa&h>=*v!yZzp`2{agy_; zrsA5bu|;8@vM&Z81Ap36$6z?W(8M_t>B1=pL7F?&UO7;Qm@oTg)j1L3dfp!{VmZ?* z0%OK3w4BmK#zpG(-kjq^J_n_4T}q>FbXdZpM3o5qImW(_w!aHOnGW_8bw;H@=Xz5s z<0*pBCn{e^8ksTvzQRO>LYWOp3SbtE%H_XYG^Qw5fP+ghG0DvP^iPmgP!Z`n2VfO4 z7pgE#sD6Wf2eEk70;pL7A{K==n5QP`oFK($ogX=xIjN;}LDx*Vb*$x0POI_r{M^k9 z$(?qem?=zQAou`kW{=yEg~lqh|6ZbbOzf(MPzne&##;J(j++lU-$izSKgA{|0Lb^QyPf&fr_{fw zWpMjjHrhO!#dx3^X9ucd*J@7TtIPY07=Y!wZ61CvwK|>cUy5Zm4z)L!G%QEBSlJDd z9J327y-j)xD;``hwFsSI4rhoU5-xX%QBT8L*8{x{l1i?dX%xs%6EXFBnRCvwv-~aF z>ZF}xlwyiANjv`7mnxsZlCy23pPtjQ_Ecd#l(s*snI%GPMnOY&F`#?u)*m*p0uW?z zj8Vy!gVAHeI=XwmoV;Zo3ciT+4^FU?^}!2tMBOi~@DbFjQoo;*C3NHP|AN-W*l?FF z)RpffgX^Wlp#>98#R-37N|nvL@6A_CHp2QCMo2otg>}PC5W3O><`L!E{uohPcZXQR zrs)f5Y^ambMQr(1^%dLUVMnAjP6lTkSWif#qt!(4zzAy5{TVW$( zw8AedDdq$P>s&;%H5To>RvAf*^MCW?0Q@(>)a=6Da>UA z_nndTd+W~rUi`L`53%7csLqw}@8pLEG}TM{)Ze081FqxGsB1Ee9Swt4YO4H9Uin+s zWKVjmjA#oe`W0qjb}#|&KEN;P70YdCD^zjmpAh53sC}Q+cg`;S0=Yeo^Lxp_7qwV-)wLPKC3=QY}=-V z_d##bT|qh(y4-}3G^eMTO76CqXm?;o^BkgD#kt3_LWP!l%H78Ki#P z0z1RU(zIiVO^L2@9Eyzb-ef<1?Ad(L>^(uHFqIzvxg&i+nUGr}pFOfr#2-opkFdfh zLIpA7D*;FZzdDqU7sA`~lvjpMqpWzcGfC?g65`;l$S{oI=0U<`dI%yY(^D@q9x3}g z!g8i&w{WYlvBV|(svhJiVN)RbJ!4vw>Q&>joV3aOeyI{aj<1cDrV|e_K{4c&{75V5 zUjgi%E4>2l)3j;$T`pHh%%5X;+aYGM@wEGDpCy)0;vPIQT@?T9BaG-qa;`=KYFfE} zT>r>(4UX()^?*lAWw*7ye&rfCtvivwK%1x``1#H$U?26Dw-s0D?~YqLG4mN#!>NC| zW*jAkDkz|Kfbj32*56$T$uq;+nTGHIBxD5H@yTkCbD1*o3@M}dC-WGt%d7RdDaF_( z;$73NTpJ58x?$tv*9G09YBkyqYS#RNzngCupBzNWnEZan7D7K|Ytt$KypLPIOUv?< z6w8-tF_XDYr09O}-fQT|?2}v**DxdN$Z8!Q>sm#!U@-9EW=Oi;vR^C z@Y!Rh`W?8T0Rd+HI`sHFyGN1s`^XbO6wc8eiro}#dn`Oqk1(M6RU|?g07TujQ_5)} zh~^2iIQSK<29L2(&V{$xDSdGC&+)wPJqz^f#(YgT7$SO5 zcmDu%B-qz$Wfz7sl+p${s42W7%lPp3E_OnkkN}8e9-a%)r6RIhx|_zCy9~1`z8!2w zEhn0QYiTeks9a3Mf_hcXC(Mqma-5%?r@P8BjyE}%9%*qyG;?OhuvuCg_F(ixu#hvR zYUS26D_k%D=3(W41E{vj!##XZurskmzK0AaLXsZUwThG@SdY z=h>rTefYO!23G|<_SDqYS~|`+me1QsqmwRa+4JcQA@975;v)6&6$c}7v6`KxbI_#- z&Q=YL{OA4{Kfey!e>q=RwM$V=u@R%dIZaWFi)#3X-)10IW{~1pXQ|I3_pRkCfdnI} z6MWUrPvuE_7=@-kQ)$XZOkx=Ico_^uFURV*qy)1Oc>8uy>~n3OvMpG`PyC)Ols8U5 z$x9d=KcEa^^(^rFlo#!0QO7YrbgH+-@)H0?iN!ju_cWEZpBMm*F(Q*BKo8nhI2SA1(>-nyOg3z8?8E@$ z9^>s(@w-V!9H6Qr)+Yf5zc`<~pE{r5ZKU3Gp*B(J zCTG!(IBbo38;8k6td32JfsJ}B99ON8yz}V?${SWhB8UQZEmd?S8@%58Gg4Oc*}S?B z=A6i4iz2uFgM$Qkk(s#p`9Bn(4h+J0>fQ@9^7uigHZVDDWhzT&tWVs3cm2>bZO-IJ z+vn!eH-kw<1YQS>74%1s70P#mG=K`HH@1+Q`?oXEOqoK@fG!Gxh^on9$OyY)&8@ol2rcZ*O%W=Z?;SyesQZt zyDO&DoORlI8rx?)+q93^G8pA>^2Md3D;OAtUEty%*M@U>6M_c&9CNqTB_Ao z?G(XG{73#;kCVm805-5%p})Ow9Z0Mk6N>hOQN8|LTiHtTz+_GQZcMC=NdHHrUqgMU zhePr1nkG3JNPj+k963k~uOSdBii7nD za^(=c@T1xSr2+O~gLO~_aRb-A0a#ijpahpEZ|=}YUQEipWLOl@h>_0_-Ekp6^hmcUSlL$o0O@Oz4& zkPRMa>e=MoeX&uy+d251P1 zSvK&{lzR zM@uoEz6vfK>5a-o@l<@7gnBC$%NkS&H$fTVib!^AZf!g)eQ5ul>=92NrL#@h&V1bz zrnD**zg8dXd{d*PT&h-X$#8h}yzbZ`R>KKoi(w<;SS5n0?4Qp#9EOl~8ox(3n?`;A z2HR|9h%6IdTid0L$2RR|nl`!0xY2NmA^p<;;gv_KB9vWxv-ZV}tq$jQ3Rr!7hp8I~mmggKq@o1&CHz>6^q`_&u_6eYMkZuBp_TU-q2 z2jw6-{Wi()52WgGdP}T*pJn;kVBhb7vPo1c9&|+%yc%lf=>|G~H|Ab!^U*=!^0A#~ z5*zmqAM&5@k6dyXPxJ&%jee8re4=i7$-UJVA^6u)m#Am=Dp2yUQ1yMIgT4b$N&X5s z1OOULyEr5WVu}Ia7|bzKLu?(SCNetNykkJAcuQw-A~JH)s#k&;ranU9)toKrMm8Jb zf1CEjK-|e)j5WOTdQs7E8S)tWM~CT8p$((1P1U=_DK*#jP|ipuQb1XKbE;QbA)nBG z$OqLr^X8YFWo%N|x}FfGh_YuME{hlRMnHYTZoM=uaHmHrMsf5nXMCbv&b8mA?2*x2 z_K587t8t5MGCujJmIOLu{vskABp3_uu?%&Uq`8KzECZxs`K**;o?^G`Qcdv2Esu?K zNmXH_l(gASbtH=FnJid1tCUvZ$7k(AHefgm4cO)Uf{c%~f4rXZc_`xncu1$G?q|_O zYWw(llZnaWVZt1(l=CD63xL{@{#7Gz+Zx(>t&P;){ zKuD$cAw{7_M&1ETpa@vqmbK;t0Vq4Bli!wgKVNQ%EmVYKcJKc(w5{(l&uC}(wD5zR ztn!~k!zxxJIRndd)m__}Hnm`w2Y`r>I!%e9>uD=GF@p-}4M62>HEmQ{;T(I-ts4h$ zUtXHcd~#XLTHkz{psUx-Z&#{ce)kjax3fTLS2==dYHp1 zpHK_An4<(?h_G}4MbgX~!wD&X>fs8jcrp5YKeasdqQzls_*OKm>!=IUI(T|$VibLH zJn7VVn_RhxTZyj*lmwSVJeSm12&Sigf|SK&%}^xQ7lKdmi|O?j@K6_nh6x=}sPF1s zrqupPIlw3Qgy8_0Unv)==r|RHIuzfkABaGZdhsc2^GdoTWzkkW0dbm;NCmzZ(0K^P zvLEC|%LVrXc(J_80Of8uOt?qy?RnZ-^Tdsw(dPr~JD{P2G-cjw(PF>-Yc_?ePDlzB zp^&}`+hA~PKVA!s(RV{x30+jVlj6_@ffGFqGEW(VlZxeHxs@-p z6*@z-Jx2<`-K%w{USG1XR;gJvXuoe<&#YY^0^^Ca-B5;|bhFh-y>J!N7yKq*xbJ6A zobgQ_yHUl`5h5!I14#Gu5dh^v5BP#?FPMq&`SC%l`WX!!g#A2pnTjuLmVXRA9i_=G z<6>;7u5C$jUK`O;jMiA~kSh!dn_Io9|Mt7@ivLwk9di)$O^F$Xeg0$-U+7DNFKz0G zhS0{U)Yv&bSsBO=CLKm)NKxqWbnacovyN3+#ZUq)q9}Y>#+bv}Bu|H>#g8d5dk&>I z+i*CwEF)sgk4PtY)iMK%8N_KxnuG?a7I_`G8jbsu;WXn< z(g5KzoZs!g0==5H?zo%VW@ZBdJ^AbkZ#8fXIf0Mfb3o2(kYU+L~JOi@Y-PNYpE zY)&%fP1nPzp5~OHt6B0CvHgjUR2z{>GV$(axmcpOn2k>2%3>b08M+IGRsIK?_6bI7 z#X)lbhnI!k3=QS)NGpbdN9lg`TuMYzZDb=-N@q{r$s4wC!}e^q0xVH|TkRRb&SedS za*gBR?7Lk!3?+2E?FviE@OiZSHOxT|qN*6L<6tU%uMLlkO{3Su%cg2VF7e#88q9=F zC>9D=LsGf$1y7bwHKz0VZ=?Hh$2snqG*`St2~|rSBLm z<{1vYM!tNn6g_ioU!{<)%Y&Nx%dU%)8^Q;$O-iSoWK$d^vrEic4X*&q6)gFx8+C(v zJYjnOjeMV7Z(OI;2LCnW(S7-DhNPd|ThSLfDr0B86~tI3D-tS2?8L6Is>lnQPvt2O z?0Ht{lEM}*cP<2e`ik8zqMdxHGdb%p9cSOdi^ux1$*h#lo(uGYfLyy8P(Lp^*;Bl|o&ABK;kDRFw%LO@5Cp1>8 zQ}F9H64kpbYH#aHxGpOAO?l~nk*5t-=Z$x-+Jmxq))xd^H!c3GL~>#8Nr&cdom#m%pclb|;3{lqo#@#n`2OJx-i4_N5;}0u zndudT1i|q^T1N%;tD9jPTvC?=P+S|msg!@}yKBGd;w}Za?l)QS4CXKpRj>+zCKPxtJobc35msZuN6aZLz zSd5kVLmG~x4CZX*&(s!jm$s#)Mk`F=4HmArn}?vJw<*;B7Y2qj)UZ_>MOq};FI4f4O{p~$3iL|(zH~QR&ud-i97H#r|&Hf9u zT$T=}0FloZxpQ|bmItHNaP?N);vE=%IEQJSS2TOV4+>`wZlRgDFkGG-12))C04Jb~ zNl`Tos_kDj7S;C4vrS33%2s8<+6{Z6ixyvv`>k=WP_Xib0%5p=sSzH);aBEmK>o!4 z@QZCo6Wkw`_U8LeqGK7o=akLmT}zG*8hPK-LL0{gCXDTw(JI@VNz^L}FN!@2 zr(Q<_oVQP)P$J_dmjI(=U@}O9!7gW-v|QVbW|0;@qcyv`$OnKAXLY_EiHlih3^OxiCUyuQZ>Ovsad}H~2k*nTS}=SX=bF*> z`-=B{;*v>^ZH~6)P1!B2f03KVFcgw1CZwaA@?I%v9!J!ke%Qu!#wu1`O#0Vqwpq0L zf1zgmo6X7@_W5#AN@`@)=SfuMq21}7lyfJI@lZAX9xp^)Ody)<8busTweMGyn5Q*_ zuM_*Wg8M_JlbqOuer`jf$jk{wMGAid$}w;pC%$uQqlRJ1Fz&k%vuMn#RHERL&*zKk2GNJkI|lB?qJ}j`$e6W8zG`o zi?O2Th2R|g1SR#o9Frqi3%^UYn92wSI5{zr6NMmw+Y2S!_<||?D@+nk9P#qMV=*tj zFD{9dsMhmIdEGakE&#nCt&S`URt=yZQf}G6gBN)Fljp7n zfdsMGr<5OQ#KNVl@lS2^iHnKzv&j)U>YnTg%n{t!yBAlV^Q!r8LE|G=f}5)nF;@%X zlSLdX)sd8Zq?iX~@V1A#WQA2==XkpMZGMyR&%7Vpw+TkZ1~NR3!}G*Um_bUWpKDpO zw;VDsc%|M)s=`@}0^7Xo z_49fI48>u?pb}grjvy_V3Q|VFzS5~sRSzpK+$!9p3U1p^xd)lS{?Ed%n+t#df?#r3 zmK)Zk;~-#`JX~p|lE$^}R~y6ZKm6VTZd3!6&H~MSE@mCQ@NZ9Plh1JC=kLQ(r3wHd zdzEZP&^|skW{OCzdTa>CR;3Q_KOaA+yd-KResCkzVxF$#Y znH44a+*&GB2O$Kn8**VaZyBpv2nYucrc;UI@-mFWJWb;JVI6E!9ftH}OC{!tLo?DK zM;y>;t1$U&F(+#Y0M4C+3Z2`}P7>18> zH=#D{@WaU)`Ou{Jn5(XrsM)VB?sc|8nR-2j^~cLgt&xXDb-M7!(`E9u1N+7LOx(8X zqbB-yLoAM6K?as{5og85>EG7oMidsx42q$bYaBrOJTt+DLYdl zzb&LUB@I%`Wqc9wB-gyArIW>{=H(?DGecsvZ;ZV{SUlAnnOqj8676+jJ-VWKKl!q74)&vU;Y*dz*T?&W z)~;bJl||dNyTVy+`<~~2B{5_q?@V9xT>shF5@Jkiz)6%VwO_Hf?eKUwsS$fgLj9lE z^v!eH&A7U^;?^t>Om54Y_77iPp?s@>Xmx$*L%$Gi+bUx%+CFi*BZsA68o>;_(IRFc zBMZiR{I6`=#YV(QR#kB3*)bfw8oX?AgVHsE2uAilCB_D{mwLGVD=Y*18={)-5YS87 zM`A&9@y)>SY7Kgd4u&0aZGm5tj~8tP-mJ*VA3On?|N>(}iuEKFv?d|^bMMSAMsJDuKm zgSn`zZ6X39^FWpqqt}JkWCY7H<+!Ol2BOuLjwXhm5I%L0 zJWr0sfIr(tvlE#VH@*##gTG$>o@}vBk~+q6KB44$9G2^kjs!Hfpcd_4=z1OF zycbfY(2p5%RiOCgR0H(q7{np7n??zWdehq0%j-l+C!0^D65#uybN&wu!MR7nuHTrA zjHW}rhFW=D6o?4rRp{VIE}{o%x>KK8T&f?p0JMpVJ&;$Kh7HM}!3D+qxflMT-qyv@ z$!R^7e4?hj(#mxb(&64}f$F?D>)RZhLuEtqc&;(=6qxyI&z@d$U)XJ$w^A6X8FBLH zv-^{&M)+zHj+ar=B+o-n)f}L!V~igOJnCe>2B{q$1qPvx=02KFJ8CaWT}Qnn5gt(wDxwgbmwcs;?YkBS4yAmsnTH6e6UwM6ubl}8Us|*zLo#)?u6~#KSKs>F+ zctB+mY$+rrEmJFLWo;tfR=;!{5W-p3te0W0+l?r@q3<~{#dN@0r7deY=dEbbnd8YIlVT1Imt zR!77wpAL^+t*uvI>Gd8z9Tt&Ocd)OAmFzZ^De#}LDd zY(Jh5lx2eWsYm*0W9@$`ulz)&Jqmb%Zd}0o(%BAA0>h;$tPz2E9UH8hDc!n78@~oTtAbZA^CKjUc)x_G|zcXRXqld zIx|&*E3*URw=5bH%#$(EbyW%xyMj(JnM?Me+nrh$=PIV{n7t_iHVM?7@ZkbY?%C@y zRj>3<+)RKbT*yxfEB)-*AtA?krR{F2gKNAbC2g+!u4WY_RnkSS5(axaHu+pK1HQeF zawI5dyJycY_~WU&YuEhGI1~@x4pXt|20uOz7hlH0lt|r42F&I_PQ(84HnQp z2+FcCp0&7?&YwUJef)>tM}%Qva6dTbt=A=wW8^>l7M)?@&)>5T29W+S@ ze>OqNfhX7Ky!QH+dnD=xc1eUQDHotln0a_(q+Xt(JXlJ_I@>q4WW zwa)mf+rK|K&R0ESV6eR?)-GzQ$6-VWn4N+)E;HSbMVgV0G(5%Xcf-cjOS*H(294K2 z#zaX3WW-^L3Vv9FeCl%i@={WqT;wDQx_c$p;Q0xnmHX+RMF%deSzr4E)6d(yEizoD zID#{LDAI%Qrh||Y+Hh83r4vbLsNP4~mK)74k48fWY)nq)?t@C#AUky&=NyF-BIYRO z>^P?ays+c&=jx>UrZO#};?~N-$2nD59VN-Uw4~2N5JT*E+XkRN6~sZ9=)|r3guBqI zHvmA14L}C_^4eC^ilmSce5J0gKu87{$!FlMB4?r>b0uU^XIkoINQw2qUSJy&sHjL0 zh<5Q2&|}VW?ieC>zSy()>S8pApVn4l_l&cOnY1Q)p%3DesPKCb;?Nt>N%= zz%kRwcIjz>&efNXE5P8LlNYb|p1>+;Hl{u^wD<~eoqx@3Cbs-fg^J*K9IJvTxacf40yfV0c&;v6OEuHz(vc>xM1W$0R zXnn>1^9mxOl8A{wxanFjQB#t=BfR=g4mv&RkC!5yuCg0C{-%{vc$e6J?77-!YJ&{^ zmZS9A)+ej2Zyl)8RWG|6UNE{(|4b1!batI-I}gP|Q0$jk3Pnw7Y28E+FZki8$2-=7 z_PA{gojz^JSVb`)jG`>~TZkrOt?IxL*qF-ZtfIqMD~sCu5i?R+f|f0TDcM?WU$^0E zTJS+e9H%+{OK|~!X&YbBv%gI>W4yeASPbR!;X_J7EL0=Kc60ymdk-|s3m&pH4uKtg zFht^K9b1Z>5G7bk$%ja7k&@dM?nDd@%CJU|n7Llor8im2LK-lQsc5k3%Xlu{skFUb z5TZwvYVk%5SR=Pd9RwuM4AnaBR{sqBH*Yxa$*Sr*xCE`>Ox#wBJm(VOaPF{5=A;|% zvO|OBI*qqAr{@v8+}Y4_`FJ4_^ycYQEmvH3f<#%|6tp3)C28?0h%VQ2l+J$3m3uEy z{6x`4#Z4+&ue)RKel#aqu01gzQ7FS`!bY|~Q^hh@a@q3XulIw=5{4<)YO`Qr(B|Qb z(+0(v>Sz$9mOKXU!!LD}N`9PD~?6CDv{;m3yM%s+{u1ho4?l z!tN$f#pV?TDZryKs6V`Nv0MmC>2NGpRia)}+Hy1@QA>o%*0A-p#ji5K&KsS`_5{L3 z5yE)+l+54Ww@!(1(ZT%-Mo-V3d|MjzWc_Gc#k8B)o?wm=Q)doGM_oy%x_w?(CTv>J zA15|o3Vauqkf;%84cO=KQdrOSD^)C}_0j`hfT`3{r(|peXQaS@2_znk=yM39oBkjP zKu8P_xnI5|(W10bA(3xPEySbNH4R2h)cC8jdHjC0jPlEk+Q#?8lu`1v#Gp)ReXPkq ziD5ThVF~nZH{F zH(zYk??iZyhdX;+oSF(4FO8aR8QXpsdEge)Na6;nq-pG=_k?izWmslj=8k?(?)ijN zB6Ry?{?-Kb)vGE&yrL%EHSd5SKU77PIcv(GouiSsPAyGI%woe|SA)8pF^E>niD1TK zXn-Tx=0YhCOXZ1pYr(M%?VBpo@pmBi|MDxFjnj+@AW)1Mr;*oGQT%th&o6DAa9b{R zkCnMtZ&8vZUVGq38)Vct<7^DmS)QbYRb!{s1*9+!(feMtWm=PeCC=j$-ptQpxR+G& zi(x%Tf6&Q}Ru^r7q~L#M@EvYa z6e0{88G%LLx=}?tjahNIw^GqkK_xD6+q&wQliQ5TMN>UuBZp|3$aoh0jl2uXjYw5h z#FNqxuh>Gv!mPDN^Xnps}>d(2!;rhY0-bjw6dX!v0&+x{wcb|q>?-V0%(c2 z3u1v719#@a57m9UrZqQ+50o_tHY`9XkFs+}nQJH3bQ@Ma*%^ z40Hh2Ibj42Sj&RAhmpths44-Fn=KH+#4HUa#RxrBCK9($Tsv{9x$i;igH@1z(i&Yc zyKSn(cu8ZK$#Lr1xms0keDH+6acsb2Ln4yGiJhIl*{M$dM_PZGUyR@+HDJ0^mrXlldlT@J3tIbU=+92sLa>II`ljp0q;;0+iOMxwxVgqp zx{3wqvE9~^nVEo~Nm}3PsJs~;w2^dFN(w*vS%IqQQiUJtrH$~yLi8pjn9pZwOO@<7 zXOf>}dcc>U80&n0hsVMa^yzUwF{rFXD7Cz<-xt%$!i+}BGn%yW$Jo47Y{*O0jG(4B zCWDuI=}5ipFq_$Wu=TvWH@E1VR%V+klGFX<;}TC?aoULY`V~F5>W^a^ii4h1^$2PE z@4s4FRwnXcP5Qik!%TigiN%2b;@ElgrhgKkXwtMkzfd#eYb2KMuObMtD6Oaq z-eg`|cGF#~aq+l3q&>aEEPEb$5Je9QSl&sE0Cyb2#|(hgxVj9gi?~&78W8o6U2ZjR9aeH zc9cYUr8S2Kj%;w0uGT{=Ry*@gMH&sVI; zfg&`10E@C^n2#>QxePMZLjs}+j0r%jsiL9NYDE+hH7Qf(T#L-jmZdtXm%)Oj_(s8j zAQ~MDUa_EI15_NS6yf>d<^v*E(HJkG#B|Jz%M+G$^Ga$33_4<8a04UQM2_vhvu2d5aLGP@@<0>%#q_Sw#%VaQJ z3zFMNV$R7>AaO`kW@g1TT9)kAiKKf%tA%JJhZ;WAvns|wyY64+Sa<7Z%4sxTwQ$){ z(J~xy%9;&@UagKD&vr824xO#*@EHyzYDatjj^^;+Ij(-QfAw`k~;8rAlaxWr`Uh1~@{HB?4^ifzzC8ht`?57J>r+Ajc3f z#0aN)eHDq0|EsH)E!-_p(*EXrzzn9rDPV@*E&O_JHI~C zzySe-R}SRnb8)#_`2Ir(*a889Kaq>n+Oc9W4nB%twI%TUzTawUl35#NY7Yb3m($zU zdE2iOXL39A_)>mM-FewFZAcbUotSW7+We&^^Es56uTK48`meq2y@&ZJ>#b)gE%Yne zXvqE8PLq}Rm`!;I;d!A*5i=yODw_voU}j`kcn>ySAAwN?VW{X5m&O8fwu%4&fFl4h z?iJ+%p=ORG)9ET>4V?j6EzV~RGJ^@710=uL<-LFZ_E;R_33?JzopKuMkdi~sIe!wt zSb%0@5xE`U1kD7?gbX?WGWmgSYCSUqmH}%eMbz(AWzY~1l4Q&WSP<3&4#|T;21pR_ zaHH(?Gp41S3^B>%(Fn)|h|Lu-4#BNwpR+7pmeQ=S6GjczDWL9C9JG|^_wF~6K(0iB zV1QT|g4szT_gzOcnPw)2XhyIG1uT+9*b>&wb$?Y{eLHWa-PS%>FamLVeqW3J<1#p> zRIKUq$*GCinDu2?t#f+VTot6XE?-qqfmIgt-~Y5|N@Fg|y9|tv4rG-vpgkd6YSi!x zIapQFjjepsSfgQ#j2;pN0G2cLLZ&7CEm3HIAYi$q@hn3HfD9%UFlZ3KU?nw_D{*R! z1_CfBFa#zsML5*p@lg3FTnq^=D+Qfe;2;nr1YlrzU=ZO*P=Zh(0$h^Xq)O?RKC23X zQqYAGCO#4;+b#e5VP%8finsgo?OQjA?AkXK8G4 zGDty1rPa4fOHKK1Qo#~xn%6trvdb@$sg5+ZdHHKt?~MJ9V~#uj|NsC0^XK#Nzt7&i zwq<#;lG=l;lttPXBR<2m_u1OqPF3?6T)( zKtKr%BLi^+O2&cVp14}btF4t~iJrlWL+Emgbv$udP(Kqi<_RP?%yGpfN;F=Jo%USETQ07owh{=YRkIcL^5&JCL-4ftxlbj-WRv8~Ua| zk#JIBuA>U57szk~B_QZ8RU4u*z_ap6y4OiXFqtw|eHE=uT4cZ|WVDsp8tIq>fDR?H z3SCKNp?#gUy7-BSr~SUVE8UZJQC&>v7gKt%%)<`EkmjkVxx=R1w0dxrq>q%yICF<5 zOO{Zuoz~$fJ47&WN)Qf#GJ2IvK}|&fu*3ll00;i?n;aBzov_OJw;@DkX!x+&Xp$V- z%6Jqeo$o*Y^}CNrfE8xDyP97mQtxeZ!r1|Fscqg9&;O5q|BDaj_T&a&h@_HhWr1L2 z|JI-`OHstw2GAynREege=q@0;deK;6T9&ft9e~auGV2tc>fVE_Xep}aK|KMYXn$Dc zLZ$x4NZE;rv9XI@|Ne%3B6y6OruVg523qh=P-y}lM^R`7elmn(Eo^CI1c9s(sfbp4 zCsBw)jHW0-ppu0FKm-An>P@o&3-gBYiMbJpdz(3(NwnN~jH&`N51fYoJFVkQ46h@i zowl>z`pyLC002R91rwEzB@8Bpur)_t{*YqObwkgb_8=f2@jQxEe84bx5*$yU?8`=@ z#^JyRjE^XsTP+7g5uOI|nKJwJ26Q_e)Z4PuWE=}A)w=kJj2-X)@A-e9N+9-VHA@KRK&1WMbI+@3BhP%T&v}u0PPRVjf{`dL?I{&D|TBiQPac(8lEt< zMdaFbAp8Ka*q6oV`*^PB7=?3vWQ$1B;uK}buvZoMyqTnF2E&HqYP#O@oW&kjrhYzm zjC9HM@&DKO$Hp^!*Ho-*>X7v1KZmQ%^;r#;SM5$~%j)&pU5)l6_S)ogw%V0QYFTvD z(3eov5R@e`n3|tPUm}u@5tdMD^7xrN7Zd0qK#+g{%b8hZ#vmSdfQ0}sJgy3sWBFBI zN~mJ6Am~>a`IlL>k9Af&NCIMs(9LcCsbv6bXa+C{z&IoAjOS1rHBJ7`DFCMv$*yv$ z%m}a<5h99g&wbG{2mpY=165RqQYC%zs%0|Ow%gg&GOy7)2`aFQaE0#4qIzVn5$(E8e%)T#u`R=k`kJQ1muf{ zDpc_Fq-ZT%d}YVU$n3Tt5Dc!(L2AfCzG1J*9{NQj>Uu$L#BB+MzcAkeNCbB3W32VP zXDAVYoXV1Y%Prw!J!ABc`G72fyuqju!mc+uAQx=&|MBf8siCy<)-m1NT*{h(VU0ZW z)wM-Z?4qAJ`E*REc*KQ|U8jxIjnHNCxbTf5NUL`p-=vAkqt{qa2&}T7Q#AMfu6mqD zVt_OD>1Zlfx2sgML&Pt3t-e~9PSwiFZ>Glid+qDF>nnBlpK92R=bvcx@mOm*v$1G7 z@|D3d_;IX9IR!e?(KnhVqfYxOWldU^Qs*wF8s$)+$`jUe#*eVnQLUg!fiLvQfsqNA z#e;w_7%@Z23M2X)o;1J*2XK%zc~0A_H3qaos2p){V5f+{A%VYcVL%zrmPXp(6b4~H zU<0ybaVrRdX0F`Nm1Y_EfKX~@3IHGZMSFbi@TYVEuD~>~U=TzGx6b<`=lt2I6Z8N7 z-EW<#8wwMHC$Gf*@Q-J6y%R1H2&IoSKb4_$^o#ep{7c+RV z6UG8!l|cXdBX;#>mI)*KpTd7}qH!_UYeZdr#6A*B4_=EVNyp3Py+^2Uu2E{_hm&BKe4)UeYG@=8059!{_Rzw>&vXEYEv7>e z`d`&}fanWBG9*#0cQTImd6)9sIHhL-P_ySV!Cskg3d96u15g@I$Y)R+SBQV8%o->H z&`lFsl6xj#KtL66;H71?Y*PpX18qzUTV>gbV9?12O*9?pn<8Q*!J?TjrtXByBqXwO z)iOGZ;k!~z(`uFy0#$Zf*ZJw$-Tlqk%#JCawfm_~C)Jm<>67LyQ{u|{nHI_7O2R?n z)n=(jhrE6E%m^Y7>Uu1xTnw0qii@TUl#75!NsFoig+4;yD(adVe}rHRm}6FGH)zNy zMfpr-8HZ+;PypCDEIL~dAoJh=@Qy*|O=bd-2*v|cpwRR+Ymq1D`z#zwU55lC1`Q0$ zYSPlu*_7^3aufm?bw;JuyS%BPsMCaoKx3by_@`B@zpw2rET;2eFvwrg7bR$xz#lw1 z{=d)D^wyC|nzrRNrB0E8DG<5hl`k%?%4*Hu&pK&JCO_GCT*EzO+x&)NvXua@zpVYO zPx+e_fW2$erX`-4nVBG_d;g~K&9mohQY@{XYVW4B(hqCeM-z5;H96^BR2aQsU3ly# zpX5WlPMRSJ!qfG~MDS`S9Fk5A$!8}?M3cAP2nOQ;5CR2h$8G4H5t}mwjB0b<+(1k) zF+fCDTMV_6wyRVqxT4z-USuE)(g7p|w_Xit?S9j|BCCH6LvlvEy#X;grC^w%x0u8p zSK<$rP1d4@?nmCl=P+ILme0#3>sql-K@k-sGM3GL2! z0K^^scap1SFWDKD6o)M3|IX6P#%fKffLHQfMCmMByku@ntFe3y;8C{IBkTGjh=~WZ z28{Uo9jLv{%IyLqu9uL)eNEChf;{9K1Spu>Ty1RC6Scx zqQ?Rh2LJ#mZd1!4K){nKBQqnh^6?luA%i9I*{NI{wSXdlgIA&TG&K}KXhjiuX>3uV z!GjDm3NtFJyO0^+e!b%lx)NK+gpP{VIbCHDRF^y~fkUBoGrema;of5LBrt^e!yMW{ z)@@_0U4L_w(svT7;wQDP*X3u~uWy#I-AI^;dJ)*k+KYZ#!Y6=UYc_?W+-v9Gk ztxbQz<1Jx_`QLo4*TzbKCtzQ7jVmrS^P1p6%N6ne-`?x*n*}kb)wq%EBx~X|AU}{n zjcCp+E)aCe?p9v@chBG}8C5IjTUqXnT{EApT5?P*sFZ3%>HXfkVNInJZ|VR4-Dc_y zu?I$|()^vvn*Dw@tjm{4rkssHxzm*{$CWv*nE(T~7*P$-{>I{b9ibp#V`C8Wi&yje z`k5JM`yKUYSl{MZ=lrkE;IfKyxy)?U!=BhAikt+|_a^X4@7cM%wdH-~IZ zb2)X3Sy;0#%qT@Q>27y9bC$EQs?@TPBrj*a+1LJB-{YL&SQzu2))#JG`!f4kGSD9F;WM243z$p)M;TeHznVRyKJ9RaWTQT*I^ojNwDh zELoPbS7ork>Zp#ACdgUlw#yhRI)7=f05AuC`F?fYFp>Cb>@pEy^w{P9`>R?y-G~8Z z4~m!|63nCa?7+^m`^{)TxbP78eV4$jkP{^$JpZ~2!Bd7{91DIH6 zgX&f_d!v0z2}%VZqJ3;+ec4E6MvY z*C7A<~B~Va*ya7N$ma&(e=Z#y`W*bXTV9$Dc1@8$lR<$j5Ml= zIIeKIkZ#CwtRb|*%0e^ap%CVzS1}~q&&3ju#$ax67%OdSU#;tN4UB@d1n}D&o$o*U z`0DI&CCoyU3@-jk?bx=RJLUtd4W*HjLEH713f%aF0CbLvVY`0MS#T_z1y2l#Fq%kI zg6KQBcpZ%@YAl-@msv9-WD3A65FALfk_nk8>Xf8Omm$CiIB5?KS~Wb1CWZGwM(6;L zYcoBK#h%-P>!;>mveMr>zO}4tUj;zD*6~NbG`$!s&qd-Q6ZGPdRXx{G*x#!#ksl0> z2JulFZxN~m<`Tx@W}|0tO1c*IBTSzd$%H6ku1?eBLrIYxIv&jQ&^ya;YQtzk0GAhI z6%U{X-Tv-Ovm*lR19ufbQtmBhEPr~+^!y=7o1n<{7|{ZkxNicF*ZTbLH*tlT#cN-w zo*)1J`BJH~E)awpii)vIZDZa4|MNQ#_%HwtGOSVio7dKgsHtHoz_L^lWR5!fyEiRN z#DSa(O*>QY-Mn>%cVL^7z^hZvi#s2@ZeP}W@6|9^roY|U{{P*>oUEg!Fci6SxNpDw z*Z*HqXe?`*%Rl9Bxmx8ScOwPA|7{Vrcx+|PCN-N%9< zrS~n;>i;YD-n)jW$d0#rRrRf5-g6A@k%fM@t=hNMYc|!<+ser8ZEP;3nd-g0Clw)} z;+-UMtjcevj*{huvqoiFrHKn=G>T(IPLd|)QD!|zG$heSpT}u#8^|-|kzCGLMZGQ| zg(^vs0KgsIw^BZ%g@}-Z2>c@4iqCo8WtG_@Wh?^;V?=uH(IC~I>5peA*njnoqEmGUlbq#9VZh%KK(ke7-7Q_GhlIV9at9%Mgy5Di%2x8m2L_|+PO51ew2*;q4pIg8hC@H5=^LSyv`;^ ziLil5oXDpbyZv_z=^yg~M-Jy1195QPzyDg@NSaz144^o{-;7dQq(f(9P7Tmcc|~9J zg~CBX^ntouG9~0xzuk?3_#i~+`%+p57K*0F`0ww`K24|Bt zF0zeIGL6wAK_g`POE{x+s!|E0Rxbfi=7=u3oBYD3#?+u_OB*((J}e~R zOr}~CR;5uOKv{WN1ubl?)k!ec469ieMbTv#P1KlNN|84@W?4wRYJUE5;!{!OI}XdE zH>Rbvs>L84#39#0l2r#Yr>Yr=Hz(cLltHb*&xfKf)9o=oavz4C-N@nk)^h~cHKyRy zi6Q^_>lL(RkP~uMcVGxG-#|5i0^rtrfa*Szklks}X!0PHsVzn+8vH!FA(tM3rJ*f4 z#|eJDy-O}wuWqI6;@V*WWZ_@3iN;1-Fn~1Hzb=0%T(Y4Kg@!V_Z&o*Mq`suGCn9Np z*&6`RA4n2Eev=IH!?!B6^*FfTh8DrTnd-O5XgLI=-W?)BYse}~H3wR=yX0RzFu zvT0L7003|Jm(XasB-o8p_t*b9W<%W|qx*4rH#JJqlsX_mnHv6$EJ=1v*fv!T4V?xp zrIC%W2o5ADRsYQSZTteA2T&ysUo_;%_)>ZfW>kmFo$u<@dwDy&|>DJ~%kh45W)t4hI7~!Ea@O~01FHSmS4MtHu2SW zjxzz9z>yZjWRuwATFq-%*{xnfE>PeQ&z+jLqD?H;98FdQBZg-qPzq8RA~%jUR_xl! zzBh5o{no@_tVc|$^VM&7e{tX8o9g`KmiL`pt15{USLtd_yHC}-*0Z~Ezu)~^%2Mpl z(ysz#Xtm$7ynpez8t(u9^XK<>$^*5(um8@myzY8p4!4Za@TKOLlMtapm%)~j6_{ttjHBel|BE{C2ErF7>ruvpTUcsd_*ZP5pC9BxZpftTlvlD6 zTQz!{I$M^i#%wH<;Ge>phC<;5;yqWvwsvKas&KPOp#IKVrLAtQ%T=$+YDSVcQ$_K1 zBC}KUxJH&}RD|9HiD|mY8T2)2@Bq9s6mBr02{TMwZ$8-FeX~~LbqT!)2^+`R)v;{q z&1J@$|2W=t3Rl5_cnDVOjpP6GpZ2*_<8_4iTqL%2{-~vQt#4NQ^p}3RH00hO>PYtA zfd>@bXyY$sq%A8Vd(9&G)>2M@%YmK>AVYaPNa*XtFFpcwXJUDPz@Rs`c_!Ftw&Kn`V7X#OoGyB^FV}{Q<3Vn`<}UO zmd#7}W1hbq%-_mvfv~}<$mj2zpUt_DN2&pZhjiId%wy`w=&hOL-%UW zOQ<1~K&@6<`$=c4%f5112EWr+np^iy?L8Nwl7e7V ze)YXjsn93zWXRn-0V2;X@4tULnbP6+H^2JC5=gvR%b3f5E${RGWrr^POyf7_6*(Gc zKE`~{5C6yOXZUMa{&+>;VnBvqJYv`H|DXNs?Q6aJyY2YJR*WGVAGN)5HLEg<^2sJT zo5pTOHv>;!n}>k`txN7pB{8X|4{rbaTg&na9Y3_nd<>6QTM}p zJs@pbXOY{a>F#P(`8pbU9hjp6s09xX@>>E-WWoT@VO#2Z%*HSdZoxhqq3qAp-Af_D zG91w4K-%X5M@TWMNWWM8NthSKAO1dfyEKw2*4N?UOJJ}C9^do)RHz{g4n7IFj~j@ z-?Ulw>4w>hyTO|9TbBSq(^Xs54hm)!(y8(B1vuhy#8gU{R6Hecg^<8Q7$!{!2>6i7UKtJ7UJ;yEC-Zih^%k#%7^q1|^)MjR?4n);HKTl6NPhwqHb?jf_q-C4AUftifUq8**hbbv3CP`+gZOhqCQp)N3y?x5} zd48X@v$@R`PLoEty<4wGTFlhC0fhJU-4mrPVKLRn9I;wg`SPK_(J@<*NOLJ> z%2lLX%%Y9{PJ`7>FwRKjypfDFDG*4{a`=9;IB(`>kD^f@f)H34Ga?uKh8dVGZS~g9 zf@Hvc;8YGIpj0LXl&*o0!C|TgJh++((Ep}jUm}9H0Kfnlbld`x;Yyd0Np=lJg% zSErvN6$>e8XmYZs1VWy^H?iJ#>vp#-B|tOyzRCyHaxds3wK~ zh|xdJ1F7?2P!5F5s=ET$X-q>9z1>(p40HQcUCOuNvDtTr8`rN)HAH27Sz zh#8ugjSY3E%V_9zuCSUyigW2GjTz%J??IC;A4t49iOIRr;9GE7PpW?ReV;QuT}Q!# zKYjYt>Q3#LMV#WG=f za*|T{iP3T{57zAFL}+I~Vn{HA#T76A_BI^Q=tI^4a8MZm{00>O3e<}jq>umgoDql^ zZDs}&0|3AgI}lQMy6C!0#~P*VaTJIM0Ota2Nh1*=B8a=EJ6e%Q>#|Ftm?X>>n2C{5 zmXXAmx`}bqC^`rvftn=n3l9O7gS4JO2AHOd@+<4Ek*Ng>asc24jjVG2?pm{tFy+fQ z*VNBDgT#G2QhHe=j7>`|ORLtMrHNrDez`Fs!utz&L933>x{tIu7--EVQ4?gZY&!t0 zy3(hO-)zkGROv*^%KyLc6lR*wRZIy$57+91st_X)n!CG=9LeEb+T5pq3a4#u=KuBo zzs=|d2-uY^sC8RR?OaHf2D57dQ9Fl77|E0uHTq#fS)V%P!%c ztEJL`!cCoeqY1ikn1brggtkLb6BF>&EJk`3Yp2WcDrYU{X&nf}Q5Hvt^%s<&UYFHU zJLQB@H7<^zKm!9(&OxyxSjAoHg+z%&n#vTOI5`!{c|Eh&yU+js|Ns5rog{6*3xb)Z zh<4>I{C{2N>-YQTzi83tZ=N=2v@`Jp42L;Pbr10>)G_>{I8=u&H;Ju5x0$ z*J{+5p{cn-1&$I*pPN+Dsy#y!@GSIlmTEryxActG`(TsBq42Q;vAI63#4y;YSp`X_ zku@4zp~QZrZ|k_Duj)g(Z#e(^Q7hjR2y^{Y3mD2&6`6(y&&bf zV>l#9+@@yg+~U^;G6V`DAP@ii9kBYId@+KFO#~QL42GHwoJiEOz5oCJ|ElHczqw6U zOw>Kr$6exo5s2_YyUy;Dyg4nL)CAx>0*pjU#SoK(8mqENr1mil5n761+<+CaJ0?v= z;R91H=qXEQ8T!=4;2betTGZ+%+M4M#HOnZaV_^P=ndnwud%a%APi~0*9V(~4rh2{C zyw|#IeBL?$-HvqG%X|AbrzNZ?{iIRx*08#%-%Qgh?1Ku!_O9Eb0`rGV4@-`cDrbNQ z1_ZzV_jmKoqL?W`ygC#MI-Rlk|KWzYhcnMV&y?(LTL78`d4_?#@w@r;JAcqp1_Z!< z0BNNHoJDLroIIvgmtOaLzGfjf4%P^Pu{g4-474aaq}F5*GEGEyAsz~x6ru<{RixT< zSrr%O&Kd#)0APTV$fT}=b+uaSNS+K_160Sf-Dy>743#A@1(;R~eHFEjfB*j~BE6v%>Pwi>ic%#&wz0T6;4Ls- z5?-HJ7$o;V+?^QVnMEqXVg-+}+Nc>B0B8~-qg2WPmxTOzHb993gU=PNE7_yj{bC&{ zwS0OtKP{||Im|Lm9sJaf8nGsUVutUl7RZz(tG8ZdCaUs%+TU{A`Em1O5M*-JEon35 z#1?sQua4IhONO`=(b~sGBi#97Hkjs5p{=o}QnH$AX(XY1Gt^NNEG9{BHxdR3(rc%T z^O&BCa)3ra&X_VoaJv)1{ys-ZFc}1ZD+xn{&;S4uAK&g$tM@6efW$(L`Cv$8KN6mr zvyM3L|Ns9SYVmlbY&Kxc8{Nkw73g};ao_7%WtLt4|JP)aA<;)4k*p5lzcje>d*-*j zck{yMbH6US*No@WMLb>x%F}Ikb*$grYFw?{w|neN&Zw!CN$iWs9mDO+<71nr)m*9X zefjG3CZYfrjuDgVEV94Kw>8VT;f?M8H+ybN`pSSoPvQSxc>Z6FtgmG?_HIpDrKL=x zJZI*e`EkPZjMBwQyE^bcqFYcJ{?0qpupKOX~@yj-dqco#lC?ZpPp0Kw8stf4|*j-6m?yw?8n{R=@#ac$QWJoZimm#^QCMXc$Y4tAs zB6&|5O*X}5ha@=0j0?e+e(*l_X1Laq>*Ds*H=X=j;_elE_9|u-qA|U_(P`6GPDC4& zVh_BTYsjQK>mDPy+zB_Rg{OmeVs+|ilH!Ijo3Sq>0s#w(TQLGB6J8^4^XmDmx>5ag*;QuElgzqJL zl}f71s4R`HOpHyjVa0Pi79=x}sp}rrzF^Wv(4)kAsBvO$jdHjE#*=~3g!H{pWrEt^Q6NQ za?L$cxO#?B=nk?xj{sg4u>%>x!~hY%n1!jf0BwfZPM60mGHr>`ri zPb;Y^qGs0R*iBW!#qHVSRh{SduWaY6v6kGwluuaBWj_C78lD-1!e z+X1M>;}=;f`JH`U*0RB;?k$Eup^vQuKG0WNsDM_ygq7f|L&18WQr)c8^A#)woZghR z0@sg8SXQH%1uv(T_JBbENo_WvfGGl1&X6@izJ_7lp@br+`I@6g|NOrzOrT!ZrsCct znsa84jcQnSZ%?J#*>$=tA@VjWDu=ltsCPX^JtKVrwIm{8Y!0L`MsFWM(!EUJ|| z2^wbrAPpN<2?a-mEjR=KGKlnp;NsKre8F_N#}G-}^Prd@bmx9Rk&jV0%0pOZs|?KN z#-i5V*nXwzdzNLJL|i4f*OE_2~&rVKvK(J)QtIW1y9a zHp~;$=g>OagjOjlpKb;y#4OLsASg&&AfvcVF~bY2i!jAK%hdHO-*y#11Oi(!`f18~ zmTXGsC9~+rK47T9$A4*}lXWc9%w{4SCTh$!^ejmRc5PXL(6{aDJU-)){9VD}qPNRG zygO?eN=Btx=QWOhmHJ zR;p&U6F`mRCuT`86$+?Oguq!7CCe-#B0^|T+UN~ToT!%GY3$qy<)U(`H~ z8zpUh};NTaXGXO?Ix}XXyzq91TF5zazs^Y(ZpeSi{+Ho-h7G;7Bh4L2= zH3`777g4bZz^UB1iDdvV&;i|c%&DHGXoJCMqp-i%^H=9lwO;o0SkfSgr{c}%2}<;c5>e`jk!p6F*8kCO89ooZFiRHKuvg2=ioh1@8?pse8!r- zJLGhtI>!y+SDW8LiMMXj>)Qm{bHV?pGO9JHr}@ctGpJ~mUr zzP+hDY}5mPk+zX*#P#(>K(nwG9 zHNY`RVaO=Uxn55WcdZDd=$w@af%;Yu@{M3Z6N)lqZy*T4^(K{ACwe=ID6~P?f{t<( zjt)?5e)F^4fB!YBC|D&mR8TQtvidC0(h^T-Dy2)*&0D)W=LXmjs`Q8F!hU)Ta?XD^Vl=gI^RWd+Alh9lhwV7V9>W}vh-QHj~ z%EsQx`Z_&a$)#%wwDctlCB2m95aNDmA!-N+AmMP~lzUbZ|28O6ox?6#maUi65JIJ0 zjku76$ERU;0E7X6O>`MRDrEo#oS-L&ClX43N__eVw`ZZYGz8F=vTTlr|v7D^oVpaZ0pSHueTEccUV^eP&tENpeVXOvo73CEYLXNm^ zYn~JMbqhtT*O$INEeTtgGq#rP?j|c;Nr)ECbh|eED^mJ!+^Y{G*Kv-x>W!;Z(NxX` ztas@%Q6@%LR!1n3(>A1>-<1#IAYn2U%92Qaup>r*Dv>J$h=Y?*?jZucQxc>ga}~kL zA;7s3!Tc;K5&(dn$U}Q7LKWU5EQ*sR%|X{H4IwQo&$sXA|IGN^b?hO+$1TR4I_0!G ziK$yimY7-5@d;Z7j*>?M@$ecj)FvmU=g>U0<2Qs?mXwOVM-Y}5L-$TkNyBv&JtCYI zkIo9_rIL|#Vlt}=5iKq*fa#U=s_0Wpm+QwZ($G|=Z{>Acje8kZid(k(II`t$fSKD< zho$f<=rkiwi?W8M&l9nJsA?g;j|yu;lAtJSmCY}j<3`qON(l)8V3-(*08GHb*l;8? zU}nG(m9VudIJ-&8OdzR2$%_bFfHKOU(ZrKa=B)emfB*&A)Mh#WUmy)w5P)eq8tk-< zO@(R(mB=D$Ngh(pIu5OnBf!K*C(vK@oF6693IiYp$+J4$e&`g!LxG?Zau#*?W86Na zd32DkRnt!dre#u0e3QfiOVGKLQxx{6`78K%fByRB&9^PI(N~GvdsmvsG}ia0syCybD_wYV51`naY(aG#OVkd zg0~XXE~I)&(k6(^z0D&Gp}b*uhM*~NXEcc)X&{;jkw6Jt1@4fyySCG7YLVg7@WyAjrR@)n|jE1X;)_Jc0(x*E@dojd6q&=NftXxzc5nwvMi_@q?utwoiVOu%|5~VE)KH(_eQCaO42MfC3bZ|`(u{QziR7d5;o1gO#EH1oDE)xmqA6+NfczfAnYFH3h|5IZe;<*-W=QMmIrSZLc5SV%RnFSp&fHj3U|6cq~* zqcRj32num7g7c_~(p-qDPS~h??4{ zh&!d`p_O0(06<3SXFLt26%ZPMVH!H!BvLMmI1IEPEO>~z(po!fQ5psv$vUO~xbQ?n zB>+{0H81oi8JGi6fLe=1OEN}ol8~fq9zbNPV!^5wR_x{UN5gO@qDPg-K0avj6E)Hx zNu^bdk>SsUdqX5v`@VQITpM9(R=dV;f82eS$MgF|`Q0~cR{paQ)@;O+;j!#U*Mz{t ze>uf$V@0=@L~-VgihiDM%My`(DW;$=sG-^|D*$rI2=#I> z=p+%#1Gp0r%mdbzmX1Jh3_@PPnInno2P2jDQdTxB!vgnudD|><jF7=qDRC8NVPU240C13~i>Aqo zcJ95w$`}-d$yZ1^!Ahh}wTfO<*dsVQ<-58>GQ|J{NMH$@3QLHlBvpb{*YE)Uf8W$} zL#X>J!dqI3H!(|p4S(Bk4F3g?m*LFnb38Y_R;8C3l1cyjt3%U97rw`QCe;1 zy?(ca?O0JFDqg=Y!xGk5pPE4UuH^YMCgduR3nD{qZ zRmr|W*KDXwl^QY5slySR~_zSf%?;JtH-;?CVF zoiBH&LyAdlaLABva+M5aNw-6L84rARE9>YuZv9)7Zps7-#b+{z zw5C}PDv6{G+%MVHsZB~c3h(R18=Mdn5`uk3qR-5#dRtl#tO8Z*o7yFyv=`u7JDNy@ z`E9~W>sQ9NywVj;ThUe_jq5gVe*ad_gxc#?g=$G!LVAlk7+R$W#e4(&(FDnoqxQrSk!rE-zAg^0J8A9sgCdE(rZQ4@6uY)_%+K*KuH zPsy}KNDB-M0h`O8wWO4bJ`78?m?)YY7vEGfDTk}TreP&mx1v-{HUQFjZ_K) zo4#iC4U0)jr%yzDW>P$Y0$Sp0S0s@s&dI4M9*MV>^cxbEKQfegcOSU(jN`M1WmdW? z{aW5ul*QS4AXHFi4XiBXgm6|`gNpZ}D# z2wGG4gXO0RC_-5nghf!8oP^TA890(t+MbEk(Ju~2vQs8Ss0@bT&P86fHXS1}g?p*V zk!c{o`vL#^CE}RSjK8CD*#CL|Jz*(+Eep%)zT6yiv3sZ#_9 z(nlo7@_b2LMu1L14j`;Dlw!UbAOn$xC|#dp2<8woTskZw1x65CXOxD?v3(8?5x9kwk-Q&#z-R(SZ{cZvCh`tsrLCYo^pJxPbFJ9 z*sN7SE~WLeZ0duGBVz*Ta(|=MBk5+WC({GhCgsCxi)tF@JSZrq@f#S_>da~;u@Xt6 zwlyi?t1hNt$}X-_px19(P?Z3-6{~`7a2Mv27+F}Edt4UzR2gDKsA6`u%=LUc%Ni8J zOQxl)Ng)w65!yRLW9762tr$&(Qw2Ls zF-bQWWFxf#07M`FF8Zok&J5@qd!pesMfUajmZLH-N{){JZN&qS5@(&Azxt>qU@PDv zSQao{K7{jK69;xR)>&D-p66vEwU1M7-Iq-AZbccjYt{GmYiCdxQfE6Bwq-j^26lnq6xycb}De81~*wDQWT)8rtoT?-oo% zQ!5-44eg4>bJa=`6_JxsPLl-wQYuJVAeXvnGz~^$Oob`X#lh}!7UU@`rXYbCh@c$g z(72nyJVdh#LCoYK!*#&0moYyU&?S$MLYINwBPH2xSBB(D(%7z!S3dO126C)(8u~jI z<@5jjGiGBFK$sf=5G-IrHae?Pu};el&=93!y{;1*Lql6W+z!;!QF%ursM2CRUUwDE zaFDv}!aWM)*~3`shPMZW<#~}%s%<(PBw{+GWql#M$gFFCyF<2(tZ6AFpJvaYMPZ8( zZGw&l<0`rmze(ceYp_E>ye?x<)H%g8{3ovybW=6Y6?T#78346FO21G}!R);ajdBki z4n+r6Ah=ti-Is$zkQJ1)sAA&3vH-P>%UC!8YK?gZ%tuo~+?$L55|SE0m1CwH0dYo% zt%F8b7^VbgZ0qSFK!E2w6k}6nO=@kHweO%`Cdi1EfrRG&`{YFRf!9oWzDk*YvgGe) zfDQQg9O3NvDjPf#gT3AaHe=Wtte|yIdu{!9K%WB`2njI?HzuX=*|Wu)I>U7@%Oj;v zSdJ9(>15_O+pR0kQ;mIhJ?A%C&4Q=}B+6-MscKi%7B_4CG~O1h)T#5IFDi_VamyF} zmQ{ZCGP?Jx-@V;c#>RChDaV?Z-lo*A@#ULx31v!2MC^uDR&ox27z5DAUN*@=1h_8~ zF@{_hDa2px78N6bp|`Ra<7mrY1&-7K!^LbqRO5oc3nEC_6|}fdi?X3_YOhR%g;~jP z%oACf)>2N|D7rCdd!)GQA+E;K%@5pQv5&i)v{ACc&YAqB@BGe`X_+>q!%+hXq)WNT z5hO!tgC!)h!mGwbl_qB>bbR1{Gfr=Xgo@J~52c{+L-F<4L5YH8h-nN&gMe$N&IEV z*qV#Q!g=B_3#x@nX9S5Xn%`5*wV9=>LV?*~dfBQ-m`KYU!32)aSjXb|Z#z2+SJC@@^j)XJq`(`LNq>@(f!>498$5@b1*Cj@snH=#?GIfOKF zrjOEiv~!h&{Th=)PPKe(kPkpcSje1ERQWoI)L#W!Xz{WIX-{4m~UFe_8N z^`!$SSFTL|`{YFU2-m55KvOw=@ZryAu_c)JAK~o!O;a%hoxNVktm8rJeOEjVNL4Hf zV#UA*b>Jx=ZI-Bnk%~Ff-mm`*((h+dUdj#GhVrxD>pUhF_Icl}+j;A;QUWQZvU~SI znTz)jgf=>`@j!Me+Pz5xN+R<+s_8~0_vDwy5G#@kq{|9eg*6Paezkg=#&WG$b<0;K z7#S4V*13C9o${Km_gwFLLwhb;y%;7&_IGl-OLH&A)teiproCFNn{;%rB3L#U&G-gK z1iEkJ%`6WMLhLsum9s(gZS#cnHYSMA+SH3SyDx|+I)}nw7Po_ntg$rDigx;%ODq z5im>1Q2?zSOPD+AifXEuNrbswrnr&BAYD!A3Y<&jRhQjYq9Q;Q4BZmdn!r${6_z?F z3}_4_D!ZK~z}KD-0Tc>mfPiRo&|g({CV(ipvP9Wve*nm0zFSSx4QQE}p7r=P(dniw zU<%|E1X@!?;K6I@FO|NmJ|CCRDPceF-;VMLZ?4g9Zq=-+Qcv1+>`&aJ(O|@3{YAV5 zPGHB~neAObk-8VPWe{@Q%X>=|%J8PfvoF5&E`F_JFrVVz<39OpjdrNs6pnhzyf9=bU;>DdaeQuC++z{ z5@aE%=JkE!EZp52m`_g%CK~Xna)xfE;yh*dc>*?HK`wXRpumN=Q@^3?l$-Av_5Tr| z<>jN-O#6EgT}O}COp7Y?iNyL;j*sUTGmxAMdolk1`{YE&0G9!JKZ=-tlH*Tj)@qN8 z88zz#EJ^W0B|V?Xsy;A(z*$rrP{*wQWF@L2kRvuJ5X0f{u^8l)MwL00qs2NQCG`+W z0iYaV@RJiHN!$^nF;v46vLOK4!iN9#w!mH*o!=RW(;`Ks<=kDx#l?S7Dg*%&5(?rI z0QdzM(Ak_I5d)oXSB9(B#HcqUaYnVd7*yjh_q^ucHCf-r8-@`kpVv)qC8n+MeCE;A zv7^te!e!Mp1-Z^P;>Eo_Z(YLjQ(WyhV&7496IlAib9!c(&a17rD5GcpzrE)9&i6HA zK#Ka7cKT>4wg|1c>H6AM%C$En)$OX*HuhCP`whPcO6^3*)PFCbEC<4Pkh{W-Byye< zWG<&$3Kndu9yPqhLA&P6*%$vpYTg_IYOIUuA zXZY0A2Aa|a9>AvQdLlJG^?l#t9dxnnZ~m*D+V;F$PZHLC;_8zr#h~whGrB(nE!p!aI*OCI7y+xs~820l%SO*xiU=&`kd)2Cm`Zbm6;%+yp+rv8(S`94CsF5u2P(bY1k~DWH7gHOSg2L4-87k1Be%9q^ ziY{i@ja+@4IG zS3FUuB|{Nc?Y|KGI`39+A(iUwGwzL&j@w_2r_*jc zh8nNhYTQuw0Vot5K?_7)}HFK4B6DDWO7+#hDx9Dih`P z?XfoRius$92Clv-ozh8Zh%|u;%&wJ@*&)vjYBJjtSjbu6btfW4L>{H(RJPbgSI2r) z;IJPmBqUeYP{}}WI0)&2jUi+_oevby6NNkR>v~WO0W>9oY7l|ScbH{>3ZSnO;8Tk^ z#)ZuP`{YFFhzBEjz6y`WQ0|Xs!D^3=9R2M149^zBkiDOoOuvW$Q=RAIFjWk6sl9)1 zbGpt^7Zs3r3w-XkhwEC2oS;eh-RWN{g;qY%^DhBIx7XN2gbt(;u7^^op^@_EXYNN12Z?6ye>7G8rLjdw=1TxG)NjgMb5Vx z1PJe8@TP%W$E~-lv$q?hi9)1wubX>yxQ-&}JP7MGXLU-<@0KV(;``Ph{<=P|@$p~0 z>et2LxyGgS9_*Ql#`TZBj^dr{=&E=Jjci@R~XOuxt zFNjNF`HK}fl_=H{56`!4$|+^|X@nFfCC@B5oqCfnMFFBnm*1u}^Bl4X_B%7uEp2;N zQ8c|+H9QEmU~tMvr<=Zk4$)&ZNhyZO1?;Nputa?f{##GU0Y`<4QtHLT=REJ>ZZh0x z@Fj}Yi-hF{cu>2JDRw>I8m(s5qWBhztL_Sc!GW3-NNa`>Zi;JF)FpHw)SB| z+JewV;PBj|)CP#t`r4Z$4FQ7C3%bjOsUOE2K+tpPuTs|UCDiy)!z5^(`cBf*%V%?k z^u5&dN`i|D@riXk1fr=zXC?8N-MMWHo5Z>n_==Vyuf(mZF)*BhuI2)DM%FFN?7zbt`X}gF$BatENDh5KBaGBP@YH z5#uVjsuoDB=(>R?8GotMj;s>&J1NSPqht>M`{YFE2nTvwD>;Ng-CGnUlq`; z3iN*ydEbjR+3xxrD{8*aqto9K#>cknxVgn~k0e^tH6Ml!h*qhg(I-eAQg`T_w%P`f&}IE^X}+Z zI|qOr%2HTL9F0k-DJdlnq_P-xi-2*n8GqsU+-_e_D3U3eR+LbKQP63qi zU#FUB5@}rh1mv+*3-io5yt2mZ{XbUCT>HFkVT6({9t7I9rt6EU7&0x|pPp^(A}=kg zlp&C>$1DH*GWULax!vwuu3g&`vTJb~ia|E#CRq_C>em19nxh<)c=-J88~*?9tnRUm7)K&etF6|jZ&|<-L@F;N-&vAH z;6`$}tEz{(<>3<)G6#-U)r84UYfZuBjlY$L-W+G`?A2@yg>+YUfev{YmGM)yW|;Dc z7Ecki`)Y|{-7U27@W}19(OcXY;;q(s;^f!0udB~IOlNWN+o8vgyGYpPu1__omny}> zTCnJeW#}v`(Gp0*O;FaaCudTOz%dWu=7}UIrXmt&D4UZA%NFOr^|4| z0l0&c^&tBS^7M-nG2|Bo+`Sgjd?F$!UK+9ug?w$;(Hs3%rdS|wMhZdps@yGPtfAe^fe7XQE61E_CpqHH7az4L`Il)wdwl|DZaJJOfj>uz^W=~ zRK$v(J>}UZs!&p=WO~>BAC6nIp5d98Wt4Kpd70kEZSs~K>(gngvpF;N^i#8Wy!O{E zUfAz?%dF!!ecK+#-A#?V{;i0`l46EW-9tifOICJ>?G4l=$M!uPTWs)<@c!XH#cN3a z`{YF94+ighJ_9p+(CSY}N@oo8TDj=>3QhA%dcB`PNk53mM%1QF1i+xMS(wk7`>AT6 znCJkMf$kZggQ>OIlyoC?|MOE((f~v?Nq>4OXyk&_HZeG^l-=u!_u%)%FE@hcwy1I5 zym&MZsLfHQngq61W$vFlBso`1)YR$p4915=eV!8?$G_BN=Dp9mM0uByVnSqzEF5X} z@A0=dQ6BFyGxqq5u1!(VZ`W3-#$=pUVk`ev0LFN=&0bESn=aLw0qr00$f9SAM-u$ zuPYv(-jFS1$-N#HwOsfXwJVIG3R*+nF-yRS0dm)7MiTWqlWgrQtY~7)C44i60vL*0 zA;#LKRrbOy0$a%Q<+4UkgaqCWfTafz zZ;TU(zG_qpA)Bcbg4E`YD?p;L)|yD(lU)@IXc+dOh>7+>l1V+$qF4Y0MdVh#%h;}L zDZn6^#qOq0xqZDyMhFkgj(&pO{4viD%6815gp^AeJL|exMH`dpAI`W*lCeUGg3l5X z9Pyckiz-!ApiU^2E2qwBSf|P&5yeFssSh)eD%FN1TUgr-|8v z%t2fD#02(cu6E7M!6V?E36*HOrK z^06Pr5e!P_X5z5aao=7F#R4(NKPHm*?ve<9qPARC6xG_AFrZV963BMgf znZ2J?s$ysYOeW$XwUjsl2T!0DXmMrA0u%&vl07L82N8pu`xh>7Gvg)mDGyBN<(2EMT<#di5ltE(;DdK>AL(ZHmE<3r1*(&3neCDH}O}!Qqb8U8v<5<>IeG#C*f4 z8JYYBSc>*3TjYUgkzt?MtsB&sg)6)2CF3`>O$H_{9~QQA?WXy>lFRbt7H5r`ZivFh ztW!Hht-4-ItM?synsfTl^kp<(KX#w%&1wD;*amj zpLNnHGFNeQgpUtN?z%AiKFDNCU5UGN@BttJN(HJ~ieQv5vt&GkJ#Dld0m}mvj1dnf z6HSv{e#rr61iOFKPQ_LP^l{a-k8$tg{lo4}l~NFgD}3zbNxVB(m$9uvNKr8stlj3j zR<_jcF&jsyENIsi``E5gV7_uF=UdI~@d8p^^?lRh z?!SLHHMeb27IpEfRp!hlIGSN-nd-wn)G*g9NYpikBa(TQZ9=C|CX4jwBS~3vEcY=Z zlm>~?beKcP-aaH(EJ8C+Lhd(MQRce}sFe=FsCk|4wahuJE7A(xEpj7}0e=wx`{YF4 zfrhhszN(MMz}Syx`BN{{A8G9N48I*j4?UiNx?*rq)RtGbVy7wQ%+&^j?=a6hdFrF+ z?lQ8^ptzOtYj{+ox1Z|_IZZy#07K=?)5_d6POcOR$eP69yB*Ko{Km~^zlUiX4bdh% zBD1$C*q9oWl45C?6a{oPbrzf@g0D2#9XPwt^qJ-nO(8JfDIP32FM&q!acpag!CcgeBL;l&=E8wl7!fzWQXf2e#Ly>x&rdq3j181uUBnCvh zR5)~N(g1VsfB)C0`+*!oE79Gx!+)Rt?p>`NOrsW(2M-Zk`E?qR)|qe)i2+bIXX@Pn zhD3up2wRcHDQUX-i=Gci7d9?Z1W`cgxzj@Am@!e%ngC$K6QuL3iY{3@DWsj3zoNAs zEo=00xa_iSVk7YxOuB3USNbU)l0dYUZ0bp4QkdMhgteu%VcXWVodm|L)u*~d$V}A* zKKXmJ+oqOM-)`%UzBIYgYF*yUZkJItwC_H%t<}DYK2)!>SX-^-3_*XVB(<42&gURG z#Efh2yf&5cq{uF_pn){(TdC}X#d?XWCErHE_7_R-9&r*3AasI<5)gnZ0^LDSx{vH} zT7x7_M5K0hApj0@_5H=dhN&Ou(Ma1}Wm?uc{YO)kn*RIwe)m>aS>YGp^^sMs%V})P zAw7q&8dKud>yTms1?_Qd^ht5uF|YFmY(vHD_{#~Gv7cfNsp4WSU@4bTtr@+7J|Q9n zZkeZx1{5ff-L4&)Sh`b)@p42D0F?oKV4;WVWl75fAk-27o}31zH@8L>DqneokM{B6=?F zW`Ka0Xae{qE5AvNKVq4|XB2Y_6L9+YETBQ$=W@)yC-9Ue zkVg5fSI(u0`_%U15z_kzP8c|8|G5lG>F#R3Yvp-2ex^I#HSn=#8hdpo)>QoeaJ^5g zcZdDVDc&oz(F4j-{n;}7oG1MJwEZ=?J2QO_lY35AdS78m;X33Ss_3z&)SY ztiLena+D`x^iKmJu=HoYn`>89A6j{Vfw3q7DTOGSTL1sn zPzVhS*^@m^wL7wzcdXjodsg`^Av#due+zc3YbmLBWw&Rq@?Tf7*=&;BFidHF(W zQ?)u&zh{J|q{ioMv26cQsI^s zw^{K52S^%j{#j$pt<4XT1kDPU9d}*d<^Q>B2`tNNtf`_d;5x98r8lX&OIh(y zS$wyA{nGwfQ{AaevI@wDhHJw&uJ)2ej(gs@SG7LA9o(ptVq)T1-p}bKt?JIXGc%5^ zS- zN5o({$l5&rImf~UE=I}N^+h*l8^);lNuW+OVzkR1V%||ImF4u64{|^&;i-Nau^V~= zp$a9%4j7D(SQgnza&q^X8hdvCRAZ1Uwi#jTZ8M!EXh&VE(gD%hpR zDa+a1t%Z5N@}Uu?S>N2Y?|J*V+^tosW51tl(!(QAqQ)WkGPOwgt*Y71-@jQ_vhB52 zCOA_aF%&XX+*~Ijq2>X`+{T$BPsnmm@HR)-CJRTUh_f<9j`{YF70CsbG zKEiT-FxZbr*i#SoUGePuEoJk=_dVW~T;o`;!wb|f{M5DKttUMJD1J?yc-+M%zg+*% zznwl*m~XMrz3ZyZUzJVeymQ0r;knyU$z;C^HpU}D`1DJ0PFLMpmnCxB68JgT!}oFw zjm%0461NRhostvS@0lX8MsiwY%Y&TzvngbclY8B-HEEbpVb(Qs?{BM6hU@!R43V$5 zZf;dlKUX*Hu^|2#(!R#P&Z=oW(W&JWCIjkbcH;iHm61rMFY70nieeXGz=jz>IFMEX zaD^-*#1vkLc!L<__??S!NJoH5EXUZz4A3bX%9SkeEtZ0mk`)+=z!)tsISHIvn(3{& z6euP@1)!G?;25n813>}~XquPp|Ns5MyrHFFV=b#z#z_fS}u?l>BE`aknIo*oxCgDCnkTlD93{WD+rL zN@3O7*xi_Y#D-oc8eIXSjG-LM$tqwl9E*v!Ro-fDBZ};>c5u7I1xE<*hzmJ5X~Ly$ z<(g2Hbd=Jtb9e25b>DWd%0pRig?iTXb|;yl3UNOubcea zZA$z=wlQxkTsn%{%^NzK3yD*uOkQvWDpPx00(6$Tdrh3fDH0w)~#%> zt5eb;#OS0z#K{g+yoycft-tk@fH7cQNjz$n&hCwqSLM(D?`eh{PAZ+5w|gDxwpib@ zh3af>S-T>o;)xTla=Nv$p1Hd>Zd>|X>R!s-C2HGtiM@W#7wy%lj_LB}GOd^2=h?#i zG(5Zd&!!?z4=@`UpJrH?iB=}YXAyYKJJxjkiu65lrEFKNDrHwx?2e#4kn%!8h!Ep5 zhFJP$LyMB=(NZwj1fjqXGD?M)b`&VX9HQ)sI)&=7ltK%Ivd4H=PvMX>8~sPjOu24d zw-_uNe)6^7{5Oy8V6`^?`{YFAj25zbzmj=r&Z(T)J*r#Mcd(`Q z@w+)IUzYhxAAcosx*Q}gW0u`H7>+@2NZ6oh99}~|0?)tKoNS=iMyta~56a`->cl;t zlWHB9sV{#gD^pKHza_2n68`6N9Cuo5cwNfQ8D}VqRFzRnWs+G7y!ONH1lsw4-Z@h> zjZwjIMZ286ZZOp!q-!c48Gw}0PTB)%uS6zo6^%95O7=_l6qrfyf+G9NlPDY{kwoNF zB5F7^Kxn~&1sDiI;|>5v1^iiJbp>iPFb%^W6Oq6GAnvNwO(PLK0g#Y_mPFaAr&`vH zsn((VJf$I|3n)T^q2#t}zyJR?hiXdM0f)3T9@jhFW3S5XTASx}aMS-mkIh|fmmi9ro-)UQzs&fJEYIab530?pl@m)VHWNab*W&?3~J z87)dnbM-AtF{zZyTKyGk6rJ4U;&zsrz7+FWSiL)5gO#Ea_MiDYh8=RIn`Xl>jqvPc zva<}CEBL=3wj9tQhVhFm+f~=B9>A07SFm_#0jrtxnPA1?O{f5RO%>ZlcDA8`P~?ZR zig1Sr@!m%(B;RfaqSAdS$bcv+&aw#wEX@@pul zt^o2LGNNjVaNbk@#m(nHixe)dAPlo2{w=hZztx2>EUEJ4h8jhUOvBVV!m{SiHESzJ zmbVv98k$HIkBOvnfq3wyi3$mtx~`+vSh}uX+f=PFO2@siRm&!Ef3KPGNE>QB7kI<)>FkQtw$FIb*G2O+$JUX@?&B`2z>42y*8~9 zVvx6xLAqry8|Zi+&r%f41(#r800sa9>Z`;P`-kF zO|SoRz+gy$VZ`cJ{ROjky3d-ay%NyVGvwv@{P}L4)xCcxuIDY5YM&iJg%^DVCvM-S zuX3KQ`}QgA@|!C&K2-&;Rkx{{`jOmNPJcdpp zi^9MTVwH9xK?!6zP~!Y)tK#Y1NT^dmxrVw#RG>wcfr*$D1GJ0(`{YE}g;ryGKSD=; z0MKt|=~FNE8~N<^2s0f+wmqK}L}P&2A9e);$f+X0W#Oc1rjMZT9DiSj!?T!}o$GCc z#Xmh+taHw^E{qojKTrJR6!=CPE56z`7r~#b_v?(U!-g1Z z`xa%%TG$vWPeIPvcN*ibLX)lCN8Pmz7EG>6nWUi}dbY6`efn$cnOGS^4}Rw`M)bvS z20BhAnyY3^z@G_7iXyG-jf()=bL{nMNjEkNtaIw{#9wAXDk7Lqx^BobRBRw|T`bjA zQm>dHE*CK`Fei@%q>7W2f@1Q*arxGc&K<&1)FP5t&XOM=j%yiAg%ho>iNpnqOJ#Fo zpL5|yNcm&b|4#L%E!(R*E3;n2uB_d8Uo7Jrvz(@N%X(!D{pNSqd%SC44jQNP)B(VH%#Ff~W-tcNjwi3cq!Q6!cGO+yG6R$6wR;@zzF5%JQ z66CFMo8@q(WD#_NJG{pUP!F z0X3JItTp*#@Y}l4g+%nOXBnVCtgUS+(kwp&Masur64Bsks078pJmUwHJBd`h&&F?tF6|eG&Dui zbXNW~!zgn7KM)uH`{YFNgjV@`JpydUu-gx3wKbUNo8|2JC^H`epgo=dHe;Y~NhV<` z6C&}6c+qC$`IK)&42vt$mIu?O+Nq&XzD_%|JiCuagX81!`O$I}50_M#r}xhmU0L*K zu|aYaE2vyjCq#d?Vm)%NJptbAOW=C&UOjet4utM%-L8j5*F|`Xiy0$m%95;6#cqOQY5mZ?IOu`=hX z21ewdt1m>t*|Sh7R$CxVG~#ZsKN#XX4rpOZDh*h;RVrn@)R>9sD-)mPf1m!@pG;W_ zW`FF}PfXnSq4SbqVf09j52!nzNJ@s7?Bu$UJVoMCaN$bgusTm1K|;8MsD2SiRW6Fk zLU_=EQ$aWmo)QVD#>Zv25S(<1x{C@(oLvI+H0z^4qYXt0Ti3>NIqd2Re(p6j-m2Oq4sJYcLqc349(9K)g(WHx!@@x#5)(%=> z4P8M=PEj!<2uMu?x-Xau1%@MvTBMT-3zT%F;44Zt1<3feGzXaaG{qD~yw#9CDO{Iu z2SN}m4)+sRkKjND*i2RWyyrsg6L`{a0W5eEQUpah9?u>bMl~T*SKc61`N&QI^%DEW zwfcXE0lqnRBJXaKaRwF}fUsC{*LdKjG3kn~>GIQd&kHTom2HKkKB?oy{#;yKIAKzD znQ;KdE3|QZtyXJm4^=e><$3%1+tMEIuepu5m53cXEtH)qE|sE6L0VRk4^N$(5gMGW zwsK@LsCkn)tR4iEF?SU=mNKe0S=6vv>_)P(HQAMjnM{=d1;}TssktO8JWV+aH1|r^ zi^h;{D$))!qN3zPR87`7e<%VewIiu)#26zIRw*jQOFI(QSN&PO)oF>pZvwC&H^g0P z@!xIIzRy+~8)D513WX~~s6*94FKEWbr)Q(W@@d9aoeA~KIO~Ne{=nKwj-_fXHFh*n zobb24CWn%x0^ZE#U5ojqo`l$@S0CGgdanDFDz2%Ajuvxdq_vK%Or1 ztjQEc5fBhLZh!=sfwf?`f&z@JN1ANpDZDKdh=n#q0-)yrrYi)eB7mp{DCOgMY;wAi z8PQ6HJPsv>N$j^_2}fy^l>!`F%~^IS4AJ_PHgJ$Ka}mk^`{YFajn_7NJ&EkcQ1K6U za0&V99YO5&2)`SHnmt|wHe;b8I=w3?f%yzZYE_{(!LxJ&0%#&p#SFQZ8A&BY{G zjxtgrg>?H7^%>H2$ zEolIvVmp=?VF-)^5CniA2?_)qF`BiZ3KJ=yv=vnW00nH!${g^lBONtT-$`ZQ5rr8V zDqSkmWvO6QqV>P?%u0qrO|N9ttykWMc}l=91aW2VG@;??tPG>P-zE!FcAQo~+Vikv}yu9{et#i2s; zOFgBTTIAaPJNWXh4|E|`grt!4bX1~o0!|}2sopX?FndU8>#f#Q${3J~$sQbj zw`|Q}g3DuezVBM)xGN!xO6i>XZF_(J{&zGNpJa8&V`o=#_ilG~Nr+5De!BsY<3yxP zAJ!(BN?Tq^FdMs5ZpS2!Ag3?}0#N@L%BM%+z<_ir2FewYgw>+bnb0aB7Q~oWD`Do2 z&I(rU#m+BfOeop2(wcb(a)aacK57BG4ZJ%g)pF|906oYVg`I6RwB+H$#pRlMbf02Aew`eplGw2lU0#SpaSqG#MGr!wW6m+ zpaf%NU7z~@`{YFU0e3cgJt{B9P~`7tfDM`G9X;&ysXrYh&u_ zO=fbmXqGH7c|-+O1h^2H9HED8x-G=^5xjUQ)Yf8BG%e%UWD=w!I^-?`Wom7swHVVe zOirJB|B?OmC3&u2nfa^Vso!Yb&i9rkWuYZn9A#!q$fvSvQ#A&|kzH4Ws!IfeAqi0U zjJ6;az)-0`?jIKq4N!z}I2xS{i9_ff4#|jS$L0!~5X=beC0oTtk>p27U4pDFNUteX z>G%R2j#IeV;Q>Xa-MIVuzVl`LXYL$56@@EnR$vO5K$wzO7a0x={RFLP;Vt8|s8aFC zYK<`-i(<8GKL0jVG30hR2dQ}fSeg2KmkOT;b8<>BuRqC zqg1>kfFelMwJTb>!#^HW)U4>T*=Q6%ev4{KPfK*FS|Hr>*Vpx&a_}nUx@$tEQc}{G z0_|?39$Vsgk>15(Eg&+^-wlQgNGx?$J$AY;51gL9U~1DdgMy)+r;;IMQ0A*))HXCR zaKf#EuYhi@m{f41ImM(ZJ%^~VpyC}PN%Nb=`qd<@r;iHnpSHQE)tXkbymHh_Bli)l zNL^Xro^2`!%cnMS=(|!EQhcB!M^QB;V^87r zZ13T~o+DglMbpK&%81xP6`ECUtqV(*=Em4adZm#HW>6^JtgF>UQAH{RkyxxqABv;3 zO7ys{*i*_gpx!z#cpZu5a|4;Y(Diw?6Sn*{zKMLbO4kkkTcl&P`sxcTbUg-=Hx()~ zSovRG3iDj!A!?CldhNdnjMUiz#!{ui&x`oL6M{gAkZT5D$cQ5XbtEc%t3(c!a)BY1 zRzi;~{Xt5hEy#`o0aS>yXmjK1j|W9F0mmdE6c!ALirB4=BvRlErWFM`)Qrp}qrEfB zcbcZ735o^qup*9mZ`l-Rx||8YZ3Nk9{%UGEKnV^1`{YFU0M_DrKVnUP0OxOKferZT z9cAqH$v+)Kw!NLeH{+;o^b&m28!pJPtPV231$C=re)&uqumu_QgPyn~lEXm26Jnt0LU zL#1_GInL)b^M*A3m=3GAB-WPE$^|L*O8yIyg1WYbV-=NkQ+{fL+aZ5 zDkS%CAC|D`B4Ef~h6@b7sl>GzqoSs6+&T;z^>GzJda24ClvGGc5-dn3;3^^^JdlDR(|Hh;VPRA=xhY@ zBAJ3z9lA7D`X%)w(51ny<0DQ7D$65+jW|K^JV!2kl9^Eq%o< z(<~&TQ(K%iG?~=n89Rs%A3$-Yr=qS4npvpno*EMcG<6qNRawLFPK9RYE3~18abSRDhiDO#x~VMB={`QaLS{c1c)HSQBRfLJhPdVy%?SVY{PB_ z8oDYhE}@Z#gmM9egn<}1Q{gRDA_NzGW3>y)fC7Y-6%cePrVt2r%4V;1Q+G*7nF0nP zOG)gD_H-B#kx>^%{QH&ziBk5uNvU=?LxY1&CNn%$^_wnU{6aOn@=dlbV94(87zOOO zc6QOZlA8wzW0BbOxP0|TCA7yc6N%_;ws>-2RWwdn`yG{sa!rfJO%o2yS?{l|%dN;$ zq+NCMcosbCO}bog^qjpSm4nJt;lig$!gTrzDz;(}Hyej8cOGFmx=D4LNaaxM)u!45RIOSJaFD%qEYx>gsy?|;b>URbqHZ!c$xvj) zdzK*a&}6$UQ5h3X6jmjJ5o%P71wf?&7Nd#}F7|+pDXOsMB-nYGPJJ-#m z5bf9h`{YFTh*tl5K1xh~z~XObg$+ake&(Edozf ztJ>JJ+O48lZ3BcfHW!+Inw^k?AKVoINH@V zwp9rZtK~Uy6blWK6Fhf%txB=T(0VG06|eD3C*kQxL~xi|h;lM8JvkkgmfujAaRbPR zB%;9t^5(@O)vMOZ0h0pblfyKIZl4&unRBRrc4peusovR$NFazC8hIQ48-Am3@|ZmD zJ7uGE+(*?XmYfeLTWfbEz`D@F2Z0doUn=aCciak;-QSR4#q10*8v_O}$PjmBum}i5 zRN^WqmFhl(xKU6d?u?X@Xm?oQ%?SY0h5`b@3{~YyG;T=c>jLf|7p}DtV|A>^2teA} zZmP%$RKazvRjm``a1e0k6UNQ!)l*hoZAv-`l#3d(>Nts!ai}zCA58FDJ7{fHf`0(OG zbAZPI_lGVqGu>6sHG;vGC|PigHmc1u*lBhYa*oPGqX6#X@qcY@Sfy6DdM;2;n0IZnMBN-ie zZkRg(Y3$6Zph%-M&8-q65TYa|sT$=oErG3wyQ(o+l~Cj9HJ87qI~7`wVMg1^>hYm! zHKb>bty4g5(v7*cvzv{I^^`qGXSJWIbAmRmjXhfnHFQ+!8n`EElaRKoA1r7kQi#4M z4KyMY7v=ax6)D77n7W8sGtqU0(q33knjtndUBMQ^iJ8@GHEwc^r|gUi>k1?xoc~cH z34zXB)Ps1PBTI4~Qm~q51DnvX8c3*`s+P62xhzN&B(EhfOeDW9;joFQ1hY72>Z%!0 z0aU3Iz+xN-p&U|c1{IN)waOAHTb1&(h`@kQLRJ*2Ida37j5Dd;FNh|2m|vk_!U-TN zcU?Ou#02K5O=@*1-QLcNJrx!xh2AQU-$3&J`{YFa0M}i6JqmBf#P4rsa25FK8-?un z=szC=oV{KIHe;cez5RDlm^Y}HU20{iNG`4wbs4ebdqoEtwj3E_#I@xa7wima& z)mp2DzJA}|@VwXiJoj~9@V5YG%^FuiCy6?Pt4d}{8`wa66b_pSv&7RpnYHf2%mpT|RTU&S2V#sr)42kGRN)?DerId-ilpizW^e z*O*{(Vr5K~HCN6nA(WOo!RYi@`MbZb|JKW)qPuAB=<-~wr*ia*2m>e3lv|FaYIC!3 z!~BB-b4$)vY{jx#1H0dL*gw;agMdON$u5JDmB<1?5$p~-c9*o3>}Kyr)|208Djle@ zb|C$AK{Iw+onK(At==LQ*H(C5I7&;5X-&>3YdXvn_Wb+~_#=##3bJ%JuXGe`(h+;r zMo}tmj2SR{%y5OXuCw1hW6DN4MYfg%or?IX1q5`oD$E*gKcNBZt9@MGyhRMBU7qP9 zCsc-^%I>brRXrKNl>KqD{r?eJ`-({y=V^@s5|E9J1TnU(rn}uDD&%~l96w)7gZQ{Y zZLUyhq9De8Jd3YPzL|MP?-d32K0lQR38wk9rVV&o$A03Ny*+VuMlFl`rJJe3kf*!l z#YX;<>TRl>?+4Xs1ev+a;%7)>x}Div_hJ>K(0OBuv5PL(wV?9*4JCb{M9H_r__^Z4qCzy| zPgqyiwT7ZcLTc#3urNbk1|!2q4gt{$_IuGl(nzs?J~g^4dUEej_G z-!{-(MdPiSu(ChaV&H!>E;Kd4Phb2gUJ!zTn2^34A4~qNU@1q^XI#BHyh6W~&glof z@rSV;^nw%Tidrfy{PhB}6$wcsKeBb)^eb*pbq|u(|s8>Z+I94_lToi57fhg#1!&t>s?!K?MrOz4>z}LC5U^ zUF_L-7Viv3qp%z9t$cUJ_VG_K4DekqIt!};o-Y-&|U z<3)27YNJb7(2s$baT7{50GE__yOW<+sT%CDR>xvNK15bF{xC7fZqD_YyLCG}XKeW; z8hWRHgZwU*1UArC_3wC0($Di5}0G#8Nh$l*Q8J&lyFBxOu!xCg^Hjr|;|4r2= zz|D;3S*2j|%d4u}zphU8?VrCoHpL7MUO)O5As;`utsT}IiMNlb$xnyuz*!UYXgjp>o&Wf4*G>tPHJ zO%dX+cCXTrKa6zZoCoCN^q~I#{R}s08Y0c_F{%A|(V&Gde}M-7^8U@gptdAc8WVRS zs=Fhk_`H7AG@ifEo*K=;s&N-PRxRQ(jq8frg)P9n^EDnYtmH2`S05N(m6LMf1`bZ( z8{F!)kr{O%qO!AK2-aX6N4d;pt;0{wM?>1FeoMffN@-p%@xwRs9kXqk0Pu21AMjbDhCSta= z_b3~+SynDDy$r}F422e-Lf6xr@payX zm)%21TB@xVs6zO-ChB=5Y(AE~kRTCzY!B`cFSUu}*j!Zv^+v+_+FB7GK|YTtv1@WR z0;^_jXkG@eJus|egw;=fp{kZBSI_dzi<^=H zavn!$bnsJCr=%fi?wZvLRf06-O!-o<=B`2k+{(SF1k6pvtp5uu57enON>{^eSaRGp zp>bptpH@UDYhVP3B3o?%t0E7rNGZtk=-FrCg_>x|WQeKYH0PYD7SO!!J5(aAV{{&H zb+I?8q6$*k@*eVA?aknt-`wd8^B-PMK7_HORd)=WQ@KBWYy4ps6`08hl(&=hYDxg> zT^z|I7?t*gq0CHwb(7Q1fv|T{eyfgduC>zJHiQOXcdVOcX$K5U20^;DjcBa{0lLC| zI0D;r((Yjt!ChfR?twfMpZikC6quNX z(oA;l8dBI(^dC&1Ggf#^-NeaSgyQ>#)+F9@tXREzgIFt|1w2ZLz1BHA9OjxmQ-l>O z^Yu3k`U0qp_Ub%g$3AF@55DY2t^2pukvk#fAAW(>)%yECQl!auUxPkSyvM;5QO{m$ zaok!PWw6Q|8t2cDnfd89-Pzwj3$pnV z?Iv4|hUEz2SHG&hOr;MxKb*R-Z^-x8dush_eCXVloi`9mQVnJyViUQ-Q*G#dYK13% z_P#CDZ<`_#XbG3@bgaXnB;q5qTHgtcE!SA8L1NO8#g9GwtYsB*oy#@GxVU8j+J0PF zGU3X$wtV4M@v5zQEi87myD~B(7t1{G#Fw(p!YXZ^!W3Ltwrsus&yT%;6HX10uB{9C zexc<6k$rnVw_HC|zs7C`n)MDcJwShcSbj-1+Z-+AxsYfQa z)h}%894;eCHGR%Xr3drBVW9>U4t#uG9&`jrHAy%_>A!UTVs(Q6+vt(ezaTt}1=cdy z!J^s8)ub*nHpr?hba`yS+;6#8@q}yZ5<7+Wk5k)NHpWYTB#Urux;i_L=@VCRNXtj! zxkIYsZIsBp?b=0AC26m0aS4WcXXY|*r+VJhE42O@Y8uL18-|!)vP=$|`&EPryDVZA z-tP$OursUK<~kdSD1!DRL9s4;K>O$r=BTBARomXH(X%S7?jNH%WGi%?t&iz-OmlRc zDg57w+L1Y`x@qeMzW97%u1&Q>{)^!({mPboRjCfQ-Hkh?1E|xOLd&1-Tun)@I)-ws8;kjm%> zt&fo$B5T%Mbj#uB%vADuWTLEBSuD9~Gl`CD2SkU6)7bIhdtQlgRBOAUW|o>!3i*aL zIwr_TLD#Aj*yOittB#0+jigs%FQi%EnG_u=fVKoiIQUq*>6lvgLOX#a(;edtkoSCpLDLkM|CnyRonj*ugLoNH|Ed+=GGA>6*bg+z^ zEbjPw@SDKUJXM89@#Ay6&~bGHl#SZZ?I76g5aR5*QZGlCN)MHUUAJSlG)i2T*jGpS zdY&=D16zk01z6Y->4TIBBASWk8>L6^I?r=+dEnh;8C9$uQ7Ac&V7R6|DbG-bSVVRX zc9(Xum=)WpGWN_07u~m?uIF~-F^z&-L!&l)S)s&jEHpqK$8X?0>88JKX~1_L20QVz zi62@`;>aKcg+H-JtHI4d96WZhMy$du*#h@>+P9+S2~|ur&UkB0mK?%7TwHZOF{hO6 zzkb$*@n6w+NctH)|7J;(?=e~)bJJ(}LG#4p4rAS?Oi)(xSW|m|&>-5g6D~Va_ zfp4E5wnIU?Rq?A*Ssyzi+5&ujvs}E^<}eCYG;}sqVHx{m@ZkM2y<%V?E?1yPir!i! zW(9{n^pA{v8AC8UjP-opCS6CWBUsE^&>*2EUAs7W5cwi%E`CnD&UgGszLQzH$cq2W#T^JR4>z;_wu(S%mTb<=HKOi31=->&4p!Uu4Yrq13 z%}PcLGa#ZL5BmWIUSg;d2muq}j?ER>^WToXYG*gP*riBR1rs+YzmqgJaIKALKUJ_E z7!fvFoULQ_aCFzw@s3+w&zQ=&%0F zNq9#`$G|4NK{sv&--HFS^Qbjup8{#V)LZDD3Vx`@WUM20{%Ycq-r*j?$2BWp;(Wun zHqh2IWMf+9ml$W2;5uy67|&D#C?Jlhj4)YdyB&g)`47LhNHwA%Qf$`~p7%Tf`6_Ss zug3W==9a%|p9V^YV{OWyjG2v=t~5xx+zYVMgtH9_hI!}#jQxPJGdOeqBQQUQXCSEl z(TwhQkWmtj(6(2I>S_^8iX$tj0ivlTAt9sdO;t{ohMe`r-7F^N!N;-1;I?=XE@`}{ zH(HSw8rxL6n#aYc%aaLG+IlX8ZGQI8^OxX5e_c=LorE?2^;(4{DI|(o5u_32)2Gr~ zk1QV^3skgZMOezk_>prW|3znEZW*V=L>^X_RtT&Y0`V#ZNh86tijO_#|3Ow38?r#? zh9626LpIvb7-KXXu3}oSj2dK6T9LBJy?yK4bPs*3I5IQ;p{R(G$Dq-9h-y^}v89VJGVf znaeydP4j-+UmvDA{n?f=zHR;Gp7xS=>pL!I?14lV6=8^&i8oH%b9$wLDw) zM+YtO8kG{9A(@(VRAXXkWNsN7hBEtvv+rg_4RXu6#$zppATT3m--#B|%e0bT6{)Z) zMDe>NCv6b1HzO^qgF}sl+&YNq_k^5)wjG(#WR9UC|GUwj70$jIHS!#QX$9}jBgfY}32ub*ph-+8%Fwf#>b--J3L>=S1QkQXYu#9lruplwg5O#U6qOHDNIAcqD<>#dYKxy@__6misAjPZYk0NTP{3Q#G$-tAH zcs4G~vcrcXWX|L(CtaHcYckqj+810e@bJ>Y5x29eCnhnnpGrB2yI$n!$>06ZUWpny zF95ZZ`ISv0qSbehq*Z?w^R&readB&k$G&qw>a^iK(W&^fYF?s{IKgCMZH1-8tC(2s z;Nuw~H`D^mu&7=K=c#mx6&Iv|q%Mgo4QfF*oYyrH^gaI^yhR8azppe_P$8#~aSE-j z@m-_d9=vl7{6~oLIrpoW1xG3MGXFDo94nwvwUha2p7pVcsn$}_oRi}UrR~&GUom~t z@@$;e+tk;^ezA>TA=}$;vsE!YKhUl!2oY(Mu-r(;m9pA37E)lxw4ekZnMO1VSJqJ` zU-Tb-FOdTjg8#dJC!RbUa^CPuI)3?7T|r?u z@Aaa+>%mgel#wrtI?uZtjj3R)LA>2VHKdfCk;G6vPI>7A<73+~>+ZREy+41|sMc6>5REb+JL|()z zE5mY=m!X5D2v(whbFqpIMlZg`$ z^1Sq?63neM0Jtm6jGm?<-A_W#g+Cqf!4np+!g-fZh!Mw3z&gkQI-4tog6Agz1xo0; zX(E}0tJaPD`(StW$7pFvvBHxGmo8E~z!4u}j*_ueh+@siN;@Ue|56j*0>hvhJ zB2v??NIlwB5%$1H8J%EDBq?Q9wWZml?WQLk!SjXIVRN2$ustHmnm$T!8hf+8ElFE7`Xdl(=6SXP8-$=M@v zJ%1{=#h0J~w|Fh=V}VPw$#{n~=pAzNl|B{k-n>99LgqHJ-0oZ@I(L>2)%BWzG?>IU zf=>i*yj(;slQ~NF__{98!|MZw9!IZ20>H)GfJnle4* zp<~h39N;6P*y#v4$b?_8e_e&D8aa18e^`mg*HAB9 zwjGzNW2i3Rvr}d8rhCAYPe4b429^7(ELsgi7~4EB3*~X~%SE@H^MB4IFd(s4TFM(P z3ke$ALQTN!XMJ2#l8b9Ir<6UoXTYGHyGvlBuS|%SnXa>nAsYc+ zEHLGUe&PT<(e-~_wT9(<4CHG(4#B&~E$;&}zJw0WY#hK!jN^obc|1tcsNZryggw*+ zE^dkLJg~9q+0A-OTUV5MEI!pe!dm;|hw+O(>4|Q0Cu%ke)#f-Eau*ioSDE|mTDH`1 z&3GAbDQR35IbcPSX$6I%KvI8OSfQ!dc+3&NK~54=dQ1;$H7Hy*M$*IPvWQ zO4_{nGI>846&T=yH2il@39-4)+>r1@3?|+IN>*ARxPuU#Q2+QKtuHxu7}HgivUv# z+^Ql(fcR=)3Gr3^UX4s0Ym2PSKHkVOb=;||<*=sE>M}xJ= ziMZmDNY!i%{8p(AlDpL>gqQAPZ6yF>!k5VT;R1l6-O22z+`QT<(A#3*RL_tG94l=y z50`5ZIp;XBkuMghb~ofvmvCdMqRnVYMne$VRn|eaMH$_GrOR&Y?d-ZSYN>I%h_Ng{ zqi&-5biPr}hBMP@-G@qJAgbE1&=t5qSYSdlFIc@R405@+5A{gu zVdK@Ais7fOR7}&M#X^Y4t;b;CMrWWguVoXwyf&;kPuIO_+axlG0+J%lzz61AN1IlA z&SB!x6(}MyN2TgpMqw7l=~tA6Gs+O+($i8RXDX4MB(hsY(@FOJhu`P$UkSkjI@go3 zC`|#LI?tD6$k)G_TV4^>2R_0RzuQVY@>uvuD?=}<4SUFyPyvfaCFdyg=FX@&m~eGK z$EYF}@GDG=_f>a#cQ@i6gsyrrf?qH^u7Z`6%Gq*B%7%94__Q0Ga#F1%!mP)`y#07E zxozuZ93S#*-`b9Y!P;EL{xrPSF(%!Q@8=KtO_2IFrnYi(EpAZw7Nv9JZtM8X$MS;m zR5*^quvA5TKcnjg)|IxfW?c#edl8#z3F`EkeWti{E@vzm>P=zDK)076{yP1A5~yO> z$p<%R6wb<6|MtJa%qs3=F)9|RWikZPt^jyQh~2BW>+0t)baBfA%BHJZpJjMP8+P@A zRme~qugp+1Qm!|pX>Dd?j(>w6X4}XDd10LZ(fj&5dh<9q<6YfZrv+on>mstze3?8@ zW>)vE8@FF|>S`M1?ZG^BWOQ8}_#>t*XTQB`USO-}rpvg4!ak_0*@TWECvlxdPB(h| zMKuS7#KqA75f;-JjB$T@_Xa|_%w;E_wngx6PJ4T3Rr*r~KXDBx-d_eORn?Mo&)r5ao)4ad#?-Z8c2Q@E#-jBb3bnv`{0eW_It&)^3oe9 z#K#6HEYNdJJ73u1;X+0d_inG6d%liub{a?mjR9W!A;sh|q=(~3R3|~MTwN64Q&oEc zM@G0!IQYO3wfvT72#nq?eP@5T4=vTQ>Bs|s`{~}p3cOe&aHL0f_|r%P;bRyvs3Vco zqTq?7JozV?5jNlmHiE$9kG^N#Y=s1gIcO{E8T~%jw}DrPuF>AcD|t?9_KYLVDpDm| z#lb%#2jcnnTozeD`(YnNQp)8R1i56B^qzAIeeUSx2TG6E9gr;T6_NxONi{2TWa8Dc zo;PitV7ya`V@~2#f(U;inGfm+<~*^H#b%r;chXUe-F!_9*K7Pv_(-iBB$2rGd~W6o z41W%f2t;MJQl`8_h_6_w-Z*n`?YiG+fPI3ct{o@&LR;W<1k(w!!!wnb-yB|f5{VXL zK@OY=4MRVU0rjnLt%qe?(rmuGNE@h9Km(vc-&a5xmgix2IGni%p2iSC>e$*B(vLXe zxfp1amNH|w|Kax^YTS8nUnK6N9=29Mgw@jm>D~3OH~vb_ZlH9V%0xhtHzs${#J|t^ zboKhj%iW*9w5Ea5ZIl77)rBJ}EfLd}fdb~wy6Ij|}YtVMqvl6UZHtF>8-0f~D$<2vX@&Gw`c^Z~fn+Fyefpp<; zxtsZ|>SY8eg4-?^Om6I#to(ExDOt9`xiuRDZdckeseRgD7ZqmB@6FpK&n2z6HU>sx zA^Iq6`2M?bSp0MQ$PEe!q!YHPVM_A`8tKI3{UkyrCeL6GOO_0F$eh8=+Yq|AD9j~es{+p8@tz3f0FI;(Ns*Z|zETZZ@jAtbP5Z0o@*cb$mv>iy z-Kq8>L@#azOO><4c4C-lC51&w5B!8X*YFEDoV8)5XUE77M6}M>aLCz&`WZoXjn3O4 zsZgmMG(Z&xciw~Iuxs%!##a$#!*Q&^67RSVp~j`RqNq)1*t zgVQ(#-$(OkdD^y+5HhjQh6(4zIz%u_d!FYVknBcJwZI*D>jHwYwrjOCKJ@dWQ&+ECfCedK(w_izhVAh-h>(X zw><|twA7z+d`HH5wt~_j2>r$|VSL}{98>$)3JYz?w#W@{OO1oGmW6dNDgikVDzB(x zw-WA^nXgU+pG*gbsg8VHj|n4k#5&S$`fVx$hmiIke&6~-9YZ8*|Kp!=10w$8pB4Vw zA5o9?3><((PGB91a&*joP}~h&oe7AxZf3(;tMxY05<-59LI6+hhag zq5_49kQB7eeyCHv&{{l=jIy!N4d1;RY{(pmGga>KqO#O)ZLD~QkJ+CAkP}1<#7d6) z1^7q_Ff+e6;=AVVlB1THz(J)}?cOOk7mzxW1FFHo+cM16Bv$M^|dC2nA$TJZay?F`)JUbyZ zyrgO+gxO+#LSQ%zTd>JO-%7Dnjy&67f?|nNE3qgNt8L`Vc5Vmr^v)E$j<+b1vKRTz zMS#hx3nyN-ZQXz~HBaHZ#LeIy>}zKPa+h2`sH?5t&aKKWuDMi*3NKCIIpGSkda`~4 zJ%+v|{&SuDn?jilf6K$zQMV5SBjKEDw61hKc_E-|nRZ~JV>9H!obE&& zc&iV$EiU$s;5&O_>2P(W8-&D0!xm<&l}4;D}G( zVzbi$Y>ABq!3$)&hEWZ*Jw%sa#sW3n1PgIwv8H0F*BP!gqL_l!{G&3gaHh&NZ zvTbDD&F5vQv&){N19^g5h$cvH}vMJ2sM||}lA@{Cm)f4JKHE*pZ zj}w~e0<~b9*h{CP6VmYoW{F6m&k6Y=_KbKfGkp9MBQN87FRDYt9+m$MX7qAI;?c}4=RoPc|@#;M^A6D(E) zhiOfF#4h7xk1<2jzpvMF^}h=u7ADWHRF|k}%X04deN!(g4bsedKLQCot`wypOpMi= z;RHNAE9dLx;%IGK@N{!%i6(IxsxWUCJ;vL*nTP57cUb?(`KUo`(3^y!MWR~W1Kl}Z zALtekYi(dpS4`BdF@q-PenX-M^aLTb?lCjI^5<=D1c4LcCGa1Ac2`)N45p+H9wJWc z%QwZtJXy!&)a(p7iA3VX@d)H}TcDhHWSsi!D{8=%AqC!OJmEw_bSo<&p!dhO$uE)E zn7shLMWJoB${8}Swzl6<;xh)t^z|yczV7?*n>OEK=p}8u-9^_hiJtn;hG08?j|f*T z;P0|FILXHSCNbyYQo32v*o2@7&-bp0B3Kn2PG*VYnc#hS0jN6G_)gVM+uY0H?oX~< zdLbAT;65aDJ@L;(&j04(`etjy9x}7((4=p(0y7EJHHhdVsfwe4TATlr=8gUA@q6m7 zTT{-}&3AMm$W9TNAyONQ9^HEx zX+eNjpD;}QS`_(G)^?i1$PF-1l!4BnyObSE1|OS$shAiJPl%Pdj-Ug9+~N_R+qoU) z3Y1~lyGy(#{!uvpA*^Wpud`0H;xTL2*)t;JQrq@tIWSu@{vB{s{_AWY>JSey>wew?S-f>z*27Vx zRsf29FXzWb{~j8uhST=9d4Qy2nnNfJ2_yL{)7-fUK0EJ_3IYD0LsaMiEy56H#9E0e zLMW&C>)#&JRE4Z0fQ(aRgw!_XQ2_?q?itf7;tK8W4?ObmvPr{3#m?A zFLl$x+!3ZR9k!nw@W7Y(vUU@hIL#8?5O@fQ9y+e(q5-;Dce0*z+WVt)H~*v|cyiq~ z6&$wD^7Js?UX6BDsF$*#*ziNqu(pWr{m{E`7MM6A8KSh9OW)Bx_JQ2GU94De!0EtY zrC_Z3169D!K6PH?{7)u?!PbH=dn@a9uG_V$`;db(wtf*@^Pp>b`r$F;DoVl^b?*~? z2XZn6P5e%5W-{gVHGKOZ9~jE6`M)qWV7)^gYpdU|@xpS=BV|9kP)-@SPP zJ)9c~pq!P*%TJfWxg?;3<0FOUa}#0YRRPi_br!M0%Y6f=uT`njBcfy#puRH9@c0pE ztm?rf{s0|fOpf{0{YY3AdS9DPQh>$9S8K|YsYBuV6%#@cDI;*%_?N})Wbs1t?#=gqPC0!_?o3#?fU>p+st*H(e@6R#V-@w)K>ms_u@X z*TO-JcZ8Mj;M27+J&EoF`%A%O!r|cfR-$NmM4!)ZVKSai+7l()DZJ3+X$3w(-OA+6 zf1D4-|J0JD7VRnTYYbCb`!x!bFjgzux=S_9m7AZ^kI$mYuZ883RVDa!odvU#54dE! zParyTtlZm1`!n)-8R%Gl;c|yrtH!zYf1KUDgV#OqzTuz|?TER0zrTAIO!0Ua6#DbJ zGQ;7hTZt<6a+TGfZ*X+C_celz_RICxuB5+3lU1B8<*b>!_C<|Zgl`7IB7UdB$GTUjOji0) zToWK)vEw2FZ-5F^n~R4pt*8!-s5C$MtU-rRcyXY}LSjoF@l$R*Sb;XZFp|+m8v$TE z+$Ior*Spo5A30=PJhs8S5+3L{qCNI0A)KhL4@O5YR^k5ox+Jdk-~Ic5y2&5XKde3} zbGYabj{MgDD|LO3BtShHFLi*#Y*Y5Tp&(w2)VYN_49Cd!p?RQ7b)j6?K2@C8wtk)u zd@Roqp*MA+>TH95e>9~Mwy9cmd|bpENJw$`B?e=2+}>uG^gK&P^gRFD*fH5+c9Nm@ zx_NAh&Atf**zPXzf$)B|^tNA!@F_QUSqbU8iFTW0aVUZw`XC+b&Ejt&uVZ5nNFj?yCCqwQW{aTbJLR32CDR@~P2^$3&LfK1t@qjpF zb!Eb6wX;-PnJE+edc1K0UwWzp5#p)Jm=Of2k70{1zFQlSlr9yK>xpj8utdbsCl@OU7>FG68lw26~-+l z=e_X9Fal?yol7GqfoooX-j^WCXzKv79m#4;_DFI@(vw;*kK{9}a>q}z5P5iPInXB= zE4n#ZhbzZ7Via45UYo+YhPxSI4t-shIHa@@ouP`ucq<9FR~VpKNlN14yo)2;9lBaZ zaM4q{1#5cTx)N%tO-Zxc`3^Kz6<*Hsu$gdJquL?+xAy|N^hZ!g3Ts68+C32=@tdav zEUL;VY{QN2Zt=!C)h!+8=t8+!eSK=>|N16@J~nz}e}8jnj1$vC|2m~6_Sq_LRuZZo z^w{b*Z@5TB_vjHk`T>t^JVW_&1&vc8cv_= z4|Ti1>2EbQT{>1&nlRoGv9cMRJT5)cMJ;KMGm;dX?vLC;gWF^@R#xL3(;s+0)>RIL z7Q2N*d;~XBV{4Qy*8ZYpBh<&nSXm59OX5SSAfAQzw-ZmxZ$?+UDXmsE=K>9~}1|AgEnUV|q_YVDg zFc>+c4oA$F(C^l1IFH!5plPBU2R&L*!56}?%zgfSpUFW>JB#F|6{}gXUC7=>fc%M# zw(*_ynR%Tya`_F0AcZBzG%07s6lEq(i$b&lQu`rrf#>;@f08czLaej4X6;mrwpaLz z_+T{?5?!0i?=SKH;rGqI;1Jvo?=d;@fB(YU{2Ot3k1Rli8UL1_BXV+>wEUHevb`^V zALGuATpCmI)E%EH64?dab=^|zvB z%?a~dn>sI-5@$rU(|{-~H62GM2Me%wH_7?6;S5Kn^)J%gjZmO{N6*xNR02wA&=<`s z**0%c^wa3NNqdaa_Y|kf{!Ch&B`{tTyqLH1&7#JLXA!3=$!3DgWasfoC&444b*LNm zmuY8bBQQ~@Ypbq^dfM}`c-z3<>SdVe0CYHbj>;=zX3+Es#X9t^9Mv!UmA15@L6>Y8;3P~&3K{HVh$xMDS z+?8i^O!ghqx8pK?E` zYCm9fJoPXN zR*BvAfM=^ieV>}==7w%p$Q=$Gf$(X}n7N);z>H00vceV9q144yh+I}7a51C=sA0R) zXW?*&wKu6TwvxTp46YhC%7kG*D9YD;2F8R!?>@aALUJz(c9R$NdES}c3LmSD7Po}5 zA8=Mm7}u^~*z<)X;LusBIc7Iu3_YKR3Q%u|5vnSIV^0N=($YC7iQ_zSaW3zNwz29} z-Ta_^AV_VGov*)&;XTM-aP9PqAH=K29Po!fj)CyHnmS8D8!ILXoT$uzt1f+8$E0Y! zxk|NZRZqkUBI@R-@w(N5Yc>Xuce8RALQhSJ5EQ)NLEoD}3CXE#_n92E#r1$9x;au` zI9#%*_B%bMQ{iz;n9PYQrn%}f> z{G74?uu^He`m2$xHjlpLbi~mMb9OTmkACzssMkWwGsu-T=IC^szI^Qa zRC>RzRP$3efxIIqf-dx2O^k?w!!8y?O_`N1opR2VtKM;Z$>iF3R%S*eMb+)?Z~aay zpyL!EvOJwAydsKVbz{p(caYFZ+{WQ=-W_Djh&-Ff-LaN8my#<2G6+hKD2UflYUj2< zMq^;J-{BRzr^_DxqXk9wu617CyQiClt4r6ucExZ4;B#n36pPbvt*?(0kkQFj z7g3x>U&(Qr4oE+fpkqB5y?&f#G}H@G@4ia-=DzBmO9_(*T?hIimj-GGODp&Sws)-X z{*Fwy&^hKZSr%H-Cb$!&%MYVXk#Xa-|7l{KUM#?o(ZNq3ykMO^;agLZV{Z%=;}lQG zxW33DCJ76k{}X%w63}Z^mAL(5a0YUp>xBn-qsS~!5DM;5D@H#F8OUa^J}pxe`GMj) z(`~{{(L>L;tqF#(W%)Ca-P$XDVeV@;GJ%~IokiHa587!Rvx2Cx5k0{9on>J5cnX}t5)-5bM#r_sz>$4Ait(h`bdgjqbJk2 zt$7V7)BbVuJ?DOT$K%QhU6l0P_=>hYdHePZn=;KbKwfHWk;+$k)aZn-3XB|Yeq2sU zP+ZE8YUpLnq$dU@#305?nShV7{3#LHVZ(rxl+IVq>=dve3A06nlY>LZj&|GasTFf! z*57k;*lv2KfTDc*{?iY=S`U|by04YxU#lf0-HGqmCUR$1(O(E0uB$dRld)!IRsb6~ zEEf!ThJ5cZ(7)P>pz{i1X;y|KLijD?9YL z(Fnw?yvjrp9Go~Em}~j5aP358(LaTpm3@>pm(^F=#~_DY2A10Nf?R7%qu7<#RBJqT zOLLl?(;r77rhofXYu44`{YtC+sZdf_7p!}kq4aU^ePx%-)$67Cd*iR%;U`)OEd7Q5 z;rBNhiC}Pli~1z+h{vJe&A(5ba(j#Xi3YJys$}R5ziLYEzK5ltmVO`8kF#z|Ou!u7 zK^I!pM~L-~u+KjPC;e_&I;wR;=`Ak1gsoLr3*Z;ODI1Rp~(W=!5ZH z-`5mbhkTbPk$#&jaza0Gn9cew+09S_FKl@sB3kWMZiMAUtV1hcen_|(QE#!V0h5_T za4qlzU9MiROny6^(qjcTZ(gBLD1$(kb0R$%zRLLcI)d_$6_XeBRM80;Ld*W;*HZT< zn`!$C{{{O}HX3MJx6MgSQQSpOqx-kU9`@&y@1Oteu9APb3ZQs34Qu>G+yoq5sAAgS zUn&js?^cwY$;%=mD@8_)401C;45t!pAq{N-4Jrb#a0tphb1U(mvQ;%vr=oKgbSOc6 zOZ%}TqL)H(I@d~0-&RfpIGU{a?C0b-_yXH*S3fI@8!u8&_UfO{tAcJKp+!TRR$tKu zno{zyqA_Du4KLVNcLlB|$zUrV@H*BlPofy%?jy$ywMV0pzgK69Hbr>xGD9=55e!Fd z0+PQ`vB#GM3pYEud#MT}gP&}_gJMv0Es)|(&4v>L7^M$OIt>h} zi3qCSN?z+Wck;0lxo0gf{rxk!LPWUi)vhGuk|7p7)KFkvnmV%9SuLPR$c6X5EP(-i zBZ3h_kEuhxo+YE;WXyVCwa)2OOpSn`L)JmW0o+J$uQ;J1IMVIs$Y;^i?;lO8*{1M2(MkERCYeXQI6-t$A<%Q<1NGM7-_=8 z$*Y5Pt+NheVk2r=%QQ1&k|S=2$(xhd=<&u6_|h@-)!~5dPzJ*oO&PQgc$Yqn*~Idl z{#_c)zv@E@ZteGQ#S45srG0wr`VYUqVt!G+=_g$$f!F`}f8XBEWY_nQxBXG=zyTb~ zSLokXhH*X93+3gPZwft6w&k(z&AAa=W!cvOXUy@FwMk_5lR|RSPg=6`PC$b5sZ;*l z7$Cp)cZG^#Nj#^kR2)EKsD#S7%Mp9;oo}n0{oa)U@aAj!B8QLB5ld6?AVvC4q?;V~ z98iHPz#P@MU^=>urMk{5UAG~SONtP=g()PnVimF%#N>=LpTW-DJp^x^Oek*v#$2f_ ztNm%OZ7a?*$wj#35(#3oQ`adDXQj7i7{{Om3d(WegQ^kA+8o-ZzAh6b@bM{%i*ZkV zq0c|b9^L-6{OPi*?$YctwGgdB;KfKtU(TN4cbZn%u6CV>d1AaP+YCP)XY9XhO=XwL z3~)8VpGK8hBNLiYk==ZQrO{^)NR)o5>Omg;2i+n)1X3#+S65&r#JBDT{mx>b;QqZ0 z1Nj%VvR7vpF{fQH>nHY{gxpr|Oi>-q%0G|qI8Da(eiWKr7*Q#0?lW$ACi5TBotUYk zrm&xAj46+2gW;yo`2nV)O9bO+SnYM1@mG(ySBvhZ!CvCpH4e0iLV>Vt)Tw}Huv8D z3G{I_HR+PU%zpMvW6d*ts+iz)^`c3!LB^Kml9qx>6+x;WX&}n>!XL4(MLA7utD<2k zr$zJ;YbQ5XcYk~yx&mfh4iR4fz3FG@>SRx^R(!Nvh) z2)ruL|5gz}Wz-bWI*-i!WsENp3~yr#6XRlIGmoyr138M(FN`@;&`-r@=uj$%S5E<;p@<=&Y4Dd3fA+XWR;s;FBhdqxGHBUG*_b84?!(98w# zXW*V)_tSGN%7f?_8Fkl*LBhsupBSLp$Ne59Bx>_eH%)yf@VFN7vlaJ0V+E(tX)3FKcL~g zqbYyg+590+u3OTd)v2y7XR(&2%vxJa)L>P05v(Fxn^Gasi1M%YI`kX09NgEu!9mcj{)!zP8%Mj4L=dF zwz)GDs{irruDH#O$G|*!E{m#UJdNg5%CqA~e5$f3+$7J>e|}tX=`ww9R#-talGXao zpV!omH?!NAH9ZX+)o*LZ?uEW;ye>wO;Ll@hxWKwFPR2^FoGWv$Zrgs^)Ea}q7QM|i zR;uXHCc1@zKW>*)!|hf+H;>VOUaA|lX}Z3u{mqcF{8o~(B8Cl`4rcZ*&hi-dGUF#g z5_-L6=A^JkPQo=l`LsLOYwSJ)qMuOBi^Nr=IODPbZ3NRP=~}Tso|D;OH!vR zC&q<9XVGubL+fwdB-B;0nH`)D90#wZ05; znM?N>OLb?bP)j`{nNWspyNp|8lCY+R4_>la@ooQ7mJgNSlC_gTz+c#L$B)c3FW&AP zSWi4BjNh$gG(V>>3fd#%{pkG(#e&>Rj)6_=Oq2ak&o!cd=pzcI>u@`jFlcILB4$~$ zwH1fl>SctPaGq<7bf-X>jYNHLs%@*eU;#Wb9DKxW0d#$q{B^`(rt4xGK*n2v#u}9d4*3qoIxL&2sfu`oqd~Zey>NJIL`^!O^gYsI2&H7cOYqv|X@(afM4bm4dU z6rzd>yb^kb$uK1lPq;t=BSAJf39c?Rwvr5KobJlVb&k&|Drn@Ri9PwoY4xjL67RVw z-3+g4Ztkt`dMv)K|A*f@ia@tedF%)O#@@64^j6m*zr;i|-rjP= zsNzR8%DiB2z_+5UFTg8X}`@hZ3>;jq@me!tF#Y$})Tg_U#Rp zjXYyoB-i_Zz~A@J!0pbDdL3IW4@_ewIqlwiIhmO#4$-a68fiY_H4?AjHfd+_W%4tJ z(&&ndRqCVghwTRTt+qJk=dug)FyH^FJ5_5pLR7zux~t}Z=Gu7~8J$o^vI2p4x7y8m zfkL0@E<8Y)d<_TXd z4_63?H}9%-mw1JcSU}>2T&Ol`Z-|5qEQXKU>>)yfBE?UU(;rV0(z6F~gDJ z4eH_w+ZM}g8ya?B)MU+(8Fjm-T8)`k8c6ZHnGH9OZRYs<+WJp1u&HFZ-uxx+N3&s9 zjkOf&gAPlB(%o-ctSgT(R%{!%*z(*043CoVb(01gyVG?IWvIrAHT!?XJ=E8_+2QtG z^e+%z%Znro?v>`_-Hm(bw|WeuUsb}s@QGaI3O?=4pMJ9Xp=2b+x4G*!lJv!rXqSbh z&sZ&=rB;c05{CI}){1uoeWCFHEP^ffdwha$sjlV8Ff*L8eE3UH4jiEjMgx={nF&W+ zI_~|;;{Z_QT0gmge8Dr;(YFXAa9jveh9go5%V@B*KpSBsSXcrj+GRupkR;I^=W-FY zCvq%^P}y`gW0*h-MD?Wt^4`V!#itrBmc8MG&&wAZ+tvB2WY27CD~y?!Je`BIa!cvK zAqMnqa`{KX0Fi}6*xEX|;hki-urpua!)3o!V-*zGEp2epZXm5(J3=#Le|P$QEHA3i zXE4s4@XD4sRPyc9!gHrsmgqgInp)XW597xtr(Q;SjV={$GN6%}kIkQJSC>J`+!8ey zV-dD93B0NS;dGG=O?|P?bH7_6=6tJ?q69-IN5ElRtQj@IS-?jW^MRQ_zo4bqfWaww6bmf!|zQrfz|_l-Dj0fgq^DY>%SU4 z`3?|&jGNJ0Xjoxal>KZ~cJc21O8OruSLzO(gGP$(`Ovl3Fj0H~OE$LymhZQ81?0b^ z(qac1JUxy8InD;YR14j3;9${N5{fHB-B7X24^o!7ZkSH69R)Y#YDk!}sG7cpdn$cc zsr!s}r6x(DpqwX}VFL|RJr#^Bz9iL+-S;BbN9Y+I%HU6Qh08k151^&*&(Y|ii!$&@hsIRonRS&779;V=QJFhVP( zF6#ZVJ1hugru){@!{CnvfkaW$B3%c%Mk0`2ff-j8B<%j{OuO{!eTuPWi&~oE!{qO7 z+PaV%2(E)_M1Nyke(MDcwUys1+b^-z^UBM#*gsjRd;Ts9{Tjz%4-Rn)8jBCn6tTqm z_rUKh?Eg$PcxJ|N$Dx&D;O@y8uk-HKsFwBqd8x>9E>q(q*$YpIZ9P8TgUZhFQ;Mgi z(u0j4qwa$+xV1U6@BK(}!nmJBM?N36(p$LqU`+j)FP65FrUgJ-O&OG1G@jZ@idXk3 zt5MR~Ti`azmaC#U1C*Rl57H|AYKBX`R%R(xRtS9Eyr;iIn0wJTBIpS`PVY0L`KW3dW`9GqVs8#Sx9WXN<#$ z!pAay6L5l+(#h~jOf8n6GK?Hl9E#f2uA^CWp5vJ$L)65geDwMj5OJ7_h%F|32g(Frmaxd@V{_S0)3UJg2w(zDbj?{3tVK zI7q-$^wTOu>k!S-Bv|&PGKKi#d&D^^d&jrUnXN|3t$9iGA!7DcB)XkfJuOF=HPdh` zPyno;5S+G0BQ9J_pKk?#Q28LCL$|rvD!iTYrF^jt3oR?KCoXv(*Mq<*3Num zyI5nHg)Vt3#g!{8>YMThRp%f9PhVW(4Xc_fh6{9Ua}$XN!Re-meWar|FuV)FV2|vm z#vyjnmOF*UlI2bs`(Df}$5^Dg8DE(g4ZI(WNR?e0)QA){vef!YaQ9*GE=%6`)&K5i z{GW6oJ^iGk1IN#u!UP}m->#DjoE8Puo(KJC#i=Nxdy+Mn6{LzQEN|YqYvVZ|Nl?p5 zmu0GfFwD(IlcUGt>67r)=7&BJQ9~eV5+%UA+BHO707I5Bkd~7(LkG^J-&$sB)15J- zDwCwg=VQ@!{KujuMpsZZuXR8z0;~`0r~KrCRj97pnJ$CHAi>{Xqtuf?+g#Iq>N8JU z+j+7qWZ4Yw8_n!WDki}TcH>PWgs>H>y)}=n5Q1Jnrt!!@0GAE{*-}aMr4F_&I59p% zuW?IN2{I3w2+Og@feB9>y+77W@6T*2UP(>&R1WadGfJ$t1LxKnNi>(p3IFvmn6tAu zc#3&z^0YJPa(n^>`Kj8^ z;c0W2Du<(%hWwL=r&Y5~90mMqdKATe$$Wia^+d=iyRvLvz`gX=vu>)yNKI6Sy_!Pz zLvG`)V2J6H4%qK@8UNqWZ}E-anU9kW{^(iKZuOkBq~erLCX7xHe9GEZk^@$j$3Q<| zJrtceyIeP@vaqt0NF?*r6p4Z594|*vh%&(wso#yX6{d1gmG5owDT069UvYg|WT{38_L#h}LhKUpLon}f#G zpI0MgWy(BTCi3;EbS>;33UpN%QSk~87sK3JeTp{}TZf5Ss48%NrwDxky*4J*I*FFs z$^>fsROGpgfN)(sboc3L?F|ZHE6FU>AyjZhhnh0Jmqvif;_Z$ zP67@~X^ub|vI-nl!E^(0V2Q|g+GG@iG8;Au>ZcB0_(pNN5~Kb`6-Et?ExJ38UQ!~> zI}@{~mHs*NH9XmIA&;@Q&8%JY(rHl9A{M-TfcEW9TdrHYSn+yCExb@F%G z@3PD2!|T8AKJC8@Zhza@mh4NcL2S5w8pw(^J^Y16i&a8+Gqf=EePKsRIh>Pq%n2jk z(#H6te$QBKF%x_zE*`Fj-M;pKTf|Z07`a$w4K(Sn{3f0c9%!%s;pJ?k?z5a<4VCn# zCrzC-!QB?iS1e)yuB0Da6{!C)$?>$F-o5P6qFv2n$3+4iWXwEs?=&j?HN_ntbLbE4 zf>j4H1+bGxlP z&x!p2{2N=0ebY7`M%@Le#qh&`-?KDif1(^-MZd7uciPPQDleJJ6{A+B#;o$>fEn>vv~SUnDZ$9j#$w`OTkTD; zabA8Ebyt2NV?As!qf4^Yh`A*%_yD(j6~IVyB-z?lXbReh=OOb?y=ma0M4#K@+fDdK zatPMXuJ?!p!33B&rd^807b5l( zZ=eHSzGy#Y+qS*em<0M6u<+S zY6^>q!Uf3m^FSy#v`L?2jEJN087Gx%8I2r(K1(ZnqVxaZ_k@gqEL0v%I;ymj%uJ-TiQ(jxd32f5rBSnBa*hQi-cz@L{wF5h$zttz1T zeOq(+1ZrAfmHOD|(mYk6g(OUUK+~?eK1q%&%@re-N>x;ZJuwvkN|+q)>N;lDf+4pz z)a9+fCpmLe1u<4}^n2All1xj+!of3=pXZ8I(r|Nqzf{b`lkE45^4y-pS6Uvh;XtBu z|F!%-CECpppx!~&6Z@c!4gn^m-|*vBGRqsYemLTw~v#tL&w3% zYbA#Q;;2{CA9@YExXmI>FvAbT|?u2pY$5iia8QdzUTu_4_;`kt1=BI z5Z#znixdOuWs5lg`6Ze_C_v3Ic$>q9$e~gP5aO~E300{vN)I{Km!R6=U)9{4P%$*b za1s6@G%$jnZ4*(>`*!ad!cP;`1;=my{rGNOqc9Aby6cF11ZU`J5V+XbwCjUQgW#r_ zT+W45(HP*+&cf%v9vpLjQiL9Vu6FP>yE>(NQ}D;UA)CZ5RKoBN^n39Uw-hH%O4rpQ zd&55+6}yU}WA;QTH~ahqqwi z%G%h4MbwW-ljaz~nYpmT6gzH}aImp&Oh&T99mH4<)c2Q^ih?`d*Hk=xp_+a6SZWqi z%^iABXtB{TMP3%DEKB$fIn*RihtSb0WM_5Kt{(bmI^xJjFtl&*)Tn`P=OpTkT(7x> zcde!%8dym6Ib*(|xhGmdx4BlYKIplzQGL#Gf!=Eo_p!}SLE7m^C$yv0?5?w>vPxDC zGi&X#pzchx8}80=a6HwHjKP_kkU@0N`3D`K&I+&Cian=8i&7`kMr2Ws-gC}hJVYu} zYwHYIu6y1v{EQ2ws9{`*GB_%Xo-YPy%Dt<(S=)~#AqyZW>%wCcMH5()ki6>=2nc;F z_donnXh?_lV7(oMA0;_u3O?}95C8AO{fyiHz+ZJ7RBOve4#P*aa+XP;Ddw-9S5>sa zbi@^3NuFqV&^y3xV!83`Wdcq7p2xZc`IP zlsP^u79>hZ9#N{d`?kz>-DVGwennXL^ilG}H}Y{Odo;}Xy}7wl&8w~nH)(zi@vNtd z7pJJ!h^eoAe>&=y`!S-LSuD>xb^PnzPuQGE4)2aIyyJ@EsEx%}A_QqS|E~J>qmFlJ zOc|S720`_=*~yt1N@+j)3In9YyN3=^&IP*|UjYDgA|<=eATRqLj`b?n zs-UxQ#P&Spip~M^xA4wpJ6~kSp!6L2`R()9-@jt+?G&tBKTNI*^7|g}h~{LQ@ZC&X zYxFp;d%dblPCde(26h#XTQ&PI#$Ik*TJ!}ETdAZGtMTcHAgol>q#a2lAcDurHDVrp zX;a0*Q}s2PrUuI;FH@Raru~gihV26pY0A%rU!_Ka^{!>=EAq;GSH}&xh_J-wifgP# z#=9r!&5q^M;{=n~W74r@EO=mGu`+zzRQ;dIP`)iT*c#NNvs&phCRQDEfHs6 zClM9(Cyj-pUkeRi>>r@RWdrJ&9tAT%iLsu;3K|@kV6t{c)_{(8~HerWTzjt#RdGx0jlt4?;f>uK$ zG7YE@m%q{MKwF?Ik?aS*c_9VpaY#2Q!orqpgG(gjR!BEt2=b(Re+KHYym|E{?#t=s z_Or(8FwkVM-x>u%L5FnqGho-m z+i*!pW`!)7TSA74htK9|f`xTWf1a%QsOiX4LNef$CF@eP)(c- z6{mb+!@2JQvv^vz!H!7-y2- z-NVee0tt9FDoFAaoz3>r)aa32|!U1Afr$a zwt7%RBA1I>LC58reJ}iW`NZAd@gokI;gyR%B&Pt?Ls2^SlD1qdSfwexX8NdBSXw3gH1EpCJ#KIlsUo?w{ zaG(}(j6USXhXwhdSz#9E)z@UXF0KbL|z9&SdSt$u(C`xxRYZ)0s(sSbalD7s!SH?o~)dUvJ6 z&w!L`pNneynpEFNoF!xa1FdIKER-Ok(vsbDR;V|t zi@UaZoc-!KA)rYptfR4q9C+%$M6->=+EbJyIxd^SIKgzX6v79Zl`k04{WL3lULm#v3+CaOEzY9bQu1#JcXA_r)2nv$p6j3?B)~=><9>e^kUF ziu`B?uTq_buFFoSEU!a`ZOm_w{+4CMuqc$a7bWLUQc!G}3M!J&bgNYVq)!&R>H^C$ zgn-Z@xwwMNJ$a9fQnSpf1E~y22Z$ixG)h1N!HNh8o__Td2P5ogY#VV?5n@5vWTfEN zsB)mv)o{hGv2iDJmfRO_kP~-s4?O7O-w*n~hX4(G!GL`ly#%>~-vZbCW-1s-S3M`h z5~>sCeElVslRywZ^Qjrt8!lLRSe~6QB)^7g#^5pgXz3};-o08q?^BTTX`J4anyB%xn8>)a+ zH`+M<+^LH<`e(MK2N694bJ4J21%evah6@W;C{CgPoV;_tVk@xSV^oEiV(J!FVnm3G z9*UaS1esNqA68}bRi^c@CyNyV=2OqSzL#RJ?0ilRzFYpj)hT+FVyj?uxiql5HFf;> z`DxJWL#CR<&7)Qr&$k$AZU8B}%oX24A~hIoJX37#jh1@^EIN?3Qqmr@tj(_L)C5iJ zm22)%zAqk`{Mvt%{={&%w|6R9QN7PQAj4K&uqaVNpj`qCZ+qfWW^J+9{K4!QH@m!k zO~r@>BIl8lhpT^}siCDROBattP7-#vIWZ91L6sUmd4x_kB#Y1NUCv9fxc4PWYH`lx zRf~Ksr!PG!9wCw$F}>^%`Yj$FCS){(i-T0Y1)(Cv5iT+vkK!hjOvf&=F2O!r$Z^lD&`OQ+lTk}+bJhwyH)ImbNUBy` zT6)W3iFcT736Ri%&`)Zh8d_WB`7N~FQ%#&(UvTtvro?4V)YHNf(|v^sY2!6iTYiL> zFmft4xn2<9iJ$I=rZUdD+ItCik&4mglk-rI4V)s1@}KCC z1}B~p(w=YSnQ1wP){B-5`8F}u%$*ODV_9w!1jhbSNTKfwsUD7;xhIbU0rjVZE@&qwj@GjFaU5QIU18b<`4d=y2mA8{T7LSq zUdGJTxBTUsfAIu{o#~s$ZvzutZCRSXcDj;OPK&0`3_|0daSUdDZdrCu5r!C=>#z`= zU{6609G{J1I;Gch;T?{%l?Kftiv7IEbq=NmsN71_RnfKej(;|P-oW-ad=EL%(()v!MoaRZ!wSGTBb(kF zu`DE7!|3*n^(}R9sbQc+x3eujp_w~pW}@0RhoqEMY)_LPtjt#^F5 zyJzQNS|blYUki|}G*n<`r>YA|iC*d^am2m2j+Y=$<-mivggsJO7D7pg>Jj%bu;WCu z9h3kUtJn?~^gT!VAvqMx?T7YlE!;nhh|NFRMwV>QhWz6Ot5xZ=Kno|{Ofl}2B=5Xx(U z{GQHNn%j2$Msm78tD^i7tu;8W0M!z!W_3IxCz9-(UF+Cdwv5q+3_;w0|5BbVMs58w zU`4sSdX~1BUszB+CAxgnRuo(FGN^gw1reW@#K*WM1R9sD(s1dik^`fsGdmv+faqb; zAlj_#QxgY+p=q>Ik&3-?XE3w9^D$^`V?~yU?5#)<8cb>iLHm z9{NhJ!gQ-P6B0@(Mq@?oUZna6@A5n!;dUNX4?e_b6d!6%APfkab}w@#A+^*6*@lN(q{q7uiy=zgV(M$hY$A0&P#hA_0 z4&%u28Uns%{Vi`WDp_RQU>K~bDuvdNAtm*ZNrm}_D@^wi8Vq*r;!FHns3eR=Mb z&HJ!l7JPPr`+(odhx|h2K@Gh*lhX7go!xl-!L(~|T=_uO|$pe2wPT#wK zg)KODUIivF=!99duj(adNwH|CvX~QjY(}Iqwp_ERh!h1q^(wtrU{EuMoL7(~RaOp7 zs!ZljNOpWqY03ibv{jgUjbyYczwxX5(8BjdnpU2c6lJpQ|pY@90FZT>+u zb=!BLhM#3KL?e+A^kDLlfF30i=f!+IQ?NPd8({>gMpr}6K-_5iix88aYDFt zxmxskK4~|XFU?wzgEMj;k*xTcUFE>MYBKi5+rB~S8+cSzG94eOXgXxnASUqaE%rt@ znTy|lq-jjP0mmFx)zEHuSB+q1ER5Ju-c_?~Rh%Prm1+7|41`KpN_ca~svMShwMT24 z^#d9Xu?AU;e{mv;4nJ>|S#m>9uXcqa&uQ{f10GaWkPUp2-i? z_Hl9G*^8^BT$yUlu9{5JXVDp|YYnb~^i&&3iUJiaXJ z@79uE#LXQNrG-65m$>T2>(W`DFLl)Zk$9r1{yaf|Yk1St@F!Be-k+BIYyF=fQ3s(K z+3Bb!gTbWjZI33;7)+t<9*8C|>T;gbC-KI@gT=+AnCFf3Pfm|@pHD&Xs@kbVPEV1hqQ{FJkpL@C0i&)U>EhSmsg_JBl z?~<&eI=UkoLSlAe^$%gm8BKyDQtL~`Pb*^l!+I>R^_y%oO-gk=ZRU&E*wC*1M&C1X75B{qM{_4^4$rb1Uzo`%UZ@b-^VMi;qxMcZzGoKvM z1%7AA0FkjV1D_(Umkydv-&y z!i-ci6Z)V$?zx}jjp{OIM^W!Jx??2rC3;LR336Vy9K1katTZwah@tdECmyyL{*$C>i zWaX&&;v|(UM^Ff%fabc)LQU^j`W15Ta^#EsAl&*QeBJDldnmY zMJNF!7fr1M87dOWRTYNV8U}51?uHy-MtRZAJGbln9R};rvz9l1#{T_nb68t~tKc(d z%zc(eeIB^^Lmz+sCdXaCJ+4DaphNz}4Pv)1Y5UF=16yWuzZe9o{yU(EzhNHyNm zH(_HFH{eTug)DtFOf+mccODJhGieqX^}yVG+p7}vbj^e4ifL%`f36eyLK$(_O}pRZ zt5Z5!S0p?Uy*a*s{Dk~DoB(nYuW5aEI8MvL07s51RY@qRz4|AF1PlVQY&hs{+lNM- zs-}n;Mj~V4w=s|{D!izOZ}^lY|LS;aZ5{YJA^QIkIMv=%pIHY|{ClBSHCu=B2e&is%j6S%# z2g|?k@W}c0Bnp4IZP9gOtKUO#;x6B+7W8{TyAykKoR+KY7X^lIE3zut-C$aPYJsgr+Lj% zicYNUIW~iTjAWKa;<{le&tJm>F@X|mSJ4?kT-yKc=kugh&;x#-kMPx?X{N{IN%?xbwVW*5+$YFv9# zM`?i+vsV-JLYS$NOwT6*1xqCyd#bu+y1aBn2*hh0J;)m;Q&66mxkP*6sgNUEqd<9K z(Lk{J0+4p0Tw#%x`lAV>5xnYMU4bUk3=MynwJ(Z>amV@ix)E6ZHp0CQoN&t&>>V(ey@Zw|9|f-qllaR@ ziK#2n*v=!_vU^gWC61BuAa)F&ml{EP?%7ZtffI6FpV+mk!TIA*N6JQbPOR?nvO{K9-FcrTj=YpKe0in$T$9@t3$OaDc zFUeIebH?5}=2D5QoIsLh4}xZT^=XNdFZq7wF+SRL6JiM@mXGO6r>dF$)uh1p=Kl8n zpuitrlA+;ho=w9Y^<89^utuG8ApyKdW)X+MC~nmv2f|hX-yKsNhHhOn1zVcHhs(YK zh&PfV-02kKBulAn&0^P%%hYQR`)gR`R<_H7kM zc*@0D7N^*la1K_y%~P4vjtDYdc%UVRd4sXl2nkz_8Ifh0DpOS0p*Z+_1BmX5l*XOS zs;c?P5|)76RQIv28Z~7InE*P>pKOM*2!^?w^WzQ*9JJ?vuN{g~v9Q<8a(X|K{|~=E zl14p4pM*W^mz@a*KJ0hjKJ5QqU_arG>p#=5;*VD4vOg>%J-?H# zaMCL_k1o~awv^q3Z}^IPS9R9|Uh(8NvuCX4P`az&mtWpalqbMMu z9NA&rkY4aBqUOpxY`bPt>olQl=7+R_U;KZZ3svULSi36FRaCyT&b?gqv^ddv9I(QK zY%tq?z0G?(Z241)S<8spTq<{G#ep{lNsV8fC&KYBZO!t(rrkn zlXoK!SjjeDi_#g;{cux|8WK84q-;Y(&U|rL5-FtNU8L8-JnG#-Tb03y(K66uocdAP z-RA4}HxAU^db6Ii`SKuNMJC*3h=L_Cj@(QYxma#DzoGX~TOgs#eCUe@&(UKKfCcIL$dAk^kG zV1V5(`9RJ1hMs1?0W3-rnnE9_0d_6>n_J$@{~XTgFIDnIGWGIfS->YwzP_buBzz=d z?1-mvqqW-B(#UGffqk)RXCqyYQMjOTvEq9iuo$mRF`YA`{JTnsny-&@gO80Y7&h=1 zp+kCuwBsW1+@bYrQ)|Ol=jly!8j##eE3F2W}TXd8uCz1^$a?7Hqp2?T&tyjRx=SQGs;B5AQ;${8g2dq?}P9U|MEQG(lO( zyo=~v03AiSt)BgBL!Y~L6Q+XOuoCKBxB$06qD=Yg7M?$&cB?MC{w|*bRoc2QI3)gT zzT(Oa?ZD|wU0W3J%gcp5=%;#NDcBAC*Q@IOB8E^Y;>X7CWZ^UstdkNd08N2+q^yzY zZQ(;2OG)6(F6KcIBfh}oa5)@-Pbxb&@`FQ=+m==HARTc$mX^Z<){^NY(Km1-L{Zt6~Pybcfp$H5k%l^UYaB_zGz&{W67W6rN z-8x-=BNc2PFP{k>oZX%(y=!i%F>Jd2>Zi-spfAhMfS~;Gr?p#JZCoj4Q1K0Sg@y?I zg6mLJ)x74{7b#6r<+0v>iX=!P60ZGHQSXH-7cUb=U5@4`AEjSx()ftza1}}pqt!lA zg}O563Z665k%_^~)92zMls=THRZYq*Re2E%CTl5x<~ieJhI0FP662h$Tg^4MiE8Va zNQ)-@+9D!Uhw-?_5i@o1EyK&C0?aDOP`}s4Y@%8Wd_ZL+q>LZ>TZ*UEF2=d|GqitR z_`4__*SNLI3-cMtdF`{bgw=pi)O7F%Y4sC@@_L=UmV+<RDh!_HQcaM1h<(Xbk3 zKxFhakVQ#J$w|k#WdO|~hNVuojsu_QpN8*WI7i_MR$*iHg(oJTweE#uVfDGq^#B$N zuYSrQ(?YeA#89Cex%qGI+y3Qg#vJCRilr`06&K3_9sFr49UmJPmDRnH^oCWVU(!&K z>x@$4k<#lB7;-<$qRAzT(;$<30Y;aOm)JI6SB}(y(1d`m-KK|_G5=@I%<-2j{5XeO zyUXJ`Q{|?r&Aj8cX+LSula6^mM;=*;W_I2~9$$xh%nSN78ePwlT&yh4{|vBuYrEjJ zSdCbzS<#C2bhB4`l?+Si!|A?@PDqurZp~(3n&7hKA+crB*NQh3hE*j2P#FCY@^eIlytFuC%W zITap9%Ih_?JcF}uSb*{1vvruUAtMl@y4oZCWq`N4huC685 zZAEaebNHJOhjCkK>e|dq9JkWT7Vn(xn)w{+GS z%LXpAhC&>R_4;NkzS3&l4G*d@h8ZZU+bgFji)Bl0iDc#u#7C)8-11JqQl zczy&?-Z*?O`)1as6G!cilFm3nrPb;F*?#cfH@UO?biVTX{_p&+4Z-^V@Ou;;Fd5R* z=RVrF{;;1ymVL`I{U3fG#aD2ZlfTkg>x*mQnR#cB>*mE-|U|q#$6p6Q7)DCp<+1xH1s(BeT zL(Rco`J*Hg-epYhOI#*@E2|^+r(qFo6A?eY>d<;(kau=eaNJJ9*EIFRq$!gs{yj*X zzIn5XPAmk;sa?jg=$bUBs=PMQYXwbSo@aHyW!xCn<4Cl__OI^qr|GAie9@s!3Nqsq z+NFHk##X&)0Pcg}+DIIeJMc)BD<@T%DW%YOxI`j&Z1l8n?Vo>iY8zI~N?_Fo*Ud*}Axo%mQdG+ndIQ%G7k)V*)nAZ5MIdH%bx5Unk+@R8B=NHJo z&0CZc?WBP_=Nx4pV8M{~Y<&AxQk=D~%YJTZd5%(9go&OZe?H@dOAT=?>1-z#g(JQMNmI~Cr(p!N8 zC83^&5;X0vv_dJ0!s}tCxHZvyJuO;ttf~=x9H>+!6R)_c)cnv*^0N|CtXvZJT^G`XYu@xaUQX z*WK!EUC+AgVd{D|%8|7ogP4L4&za!4fB#Y$M`2oWWJ-=HuZ0!~COT4$3k+L8NWfa# zzC~WxOsJ7%5>=Dhzc3E5tHG$HpQv7sT;7Mu5Km7zwCzyJ2RJmtRcQp#zh7rGIV*Xo zTD|=EC|EfB!A#j+K^FYp#Y1n(kh4h@8&rc=x19y4;cAWmjQOw1SoEbemGzqq6Ow~* zu$u*goJs0Tcb}6GzH@VV1)yAnuoASY(2C*W7)F&ZCPW6O3Yv;{rrDLAHm1c?vTC<> z?3mvFvwp>qU-7B)Km1$obK07q!*ofs z!vH*!GZ8=#KNWX~(AIthDxxN@rmkk>>&M=n0%W*~7nQ$@6@rzEp>Xh?n@-1W*Nq5{ zv1A^%a(x;N-?vU8cIz-Q2{g({h$ zMG)c=JZ=uJTw_zir;_2_(Za=6VhF8bY@sZ)bs-#chDnIylgSa15zb1y_eXt={K`c5 zW7%M)HcKEOq1Pk*yPsW-^C};_YL2Gq>zlm2ix0OfsnfDn$OpFv zw%3hOflowaq-eRQF%>&tAGAnjEBzDdlp%Q$(#LZDDP_Ib#BjD z*>Wv>`c|!Ozj)pEoJ@t+viiqAa^%&&;&1T4GV**t2l%+5{0!{L7byoM6`~P$BR@8t zCl8m+DN?7FXg)9f(@Kjh!s4#-Dgl5!lI{DNRZ&#JVa@5?$O;J>luVtv7YNUp0n#ff z&!*?b{Mm@gR>CfdOzRZEUp5gmqa&hx^*Z(bm&4v#`PXlcyoRj?CPRH+mWMM1!Au{m zdNI(FPGP94m1+d{RWgNWD`69oet+enKG@04Lz?seKT|wj602&rEmDapd9&1!ev2;I zthJT5aEQ>$C**ScStoLrL|Kt?TtoJaiK}oZ@uuBqaH-rNdhVlf()Tt*kZ9JBSGzL5&Ase^eDRUfFTt?(W(+f;pj?2PRrlBD=x|1x^VaBl$Zv>9%X6;2L zP~!P{yC@GVnFYY}Ijn@vt&mh~l$b^|pYK8+jv5|5^Q#=ubSRgoMu7!-%ZQNo zT#wAJqVj(5-!C)Mk0MNm(+Y)}CPZuk2meRXRX8-cci}O*$LOxnT}lgMbjRo%jYv1B zG>jY_0@B@GD&5_smzEX@6^n28e((SAyyy3v^90$qE8qLcm|>SOf@E2|{?p?gdg)be+NM^;1pCF2U336-TG)?hI@TXI(i*Z0D>MCM zSr05QzdMCH6`|Ti2hi504yQXir5^^=2ab9d&jq%_pJxR*fpBP%@m8hRNKnQYhC&H+ zfkrJBpg^0ztCMPuW9#MTj029*eaWyo&A&P!BkyGfLEw`Ai{J05-(QFHq4}@D*LigQ z#={wd)zyFa^+EghsqBkuK(oKib9|?#A0JoKG#=E*mBPx>H2E7#=4C=9^E&BZH#gom zL!c{DW62!F_>*p_r2Fs68lV*8EEig26B7ZUlQJAvU9}EGnW{ud%v1tDPD(gf{HX3# z$n6xbNwsbR+NroA^yJi@J(*iGb+F0KNh^T=^;kOC7u>9C=8X7Kk4& zciIoMHJaTaF_a<(LZPnh-}lW1)zZizR0e5fJV|K;5GoWZML8+?^eZBiu{P_f-x@V)y~qxQ~GGe4bdr+!{mzA*a*hz`=Svy<&sKP#!H zi2Dt0!Zgz+*t%1agN0pSr?a+tEIR2eA)s+Jw@-_fHfK_wqX$4tNQo@R2jxzui`pTB z^omHN#NSdhaUxVAsWKLokZ+n9!x3_b9=pqS6&u`IJOD<&p;$#pw1KjjKO;5NEMp2< zGm|R&_&9TSO!m$=9`|Zr?eTZZqVd0t`P8FM=OJ_*EOXE4Ps@^)HLF4QRlnSIJBEz4 z?h75`m#oSdzTikFP}%Z<&+lKPB~ndyEwu(vKcx!%JhEVLk_F``^ohyf1Sc!J5X&#c z@|D-f>MPEVc-d%jV^sH9-|87kk^MP;haZYAQPEBx%XE~O5SX@Gn#2YrRMJ09VoOXX zas8Wp!PPdX)!qY^KcI=9!db&L2CLVA~#ej9-buNe}})HIWHDJ{HAu;&kc_>Z~_R zSqYl<*R(;oMqzjHwv9=xuSRzQs`cAKR(+`@+$wKceD!`eW-HQ+`IL!xkgbQ%XO{Ha zwd-`Y|EbRgwo}5pGRg7(3TU0|rr&E4b`~VKS?m@A&&UIda%NoNv#MY zoh*G?gC4=iZkM~$%ui7ikw@Y6;jX00Buk?8;#b7ObXKSU@wR~6EQ894Z6dXp_M-f^ z|2$^);9q{J|9SQ1#Y|xBeJJdSova z$=k_`RO=Vyhglyn$*gxfb#eYftZ@ujC)kt>)*9?~T+^tcu zYTWszi7*A=W%Xz=&iZBqE-n$W8T(K@6xJ)yy2?$599e;?fZ zr2VX|vU453^h4Q{{Pa>ZdV;8FUQORYI7-DNvTbaU6`OXdQ~bq}MtHDHFC^PfV0PW- zp*J&`KcIg- z(X(H-p=JiOhflOArg_wn)hh{`k%-tOf?#M)Y}abjccDY(~6zcXlPV z&aES2EmoIjzI^tTL_Bd&5XRuV$8AfjDB(s}kEMwl(d@-!dWl|;fmkOyOZo`IagOx{chu`ExvSkoOKIgd-ia^KsYychmJ``q}w$$KHWn#jOx29Cu= zeMi8=^3=j&2TR;S_QkHn|#3q1Ava+mCTh~T<-BU?YBnXk;8uIRWAN4mp4JpJmQe2YuFhUH%_L9rV&+p!0wWAAGSmgC|nSQU19&3}xc)>Jf{s{A3&L6y|H!GapnB#W&v0%`zJ*uUtuo z*ANRl#BI4Lk=YQH1a&R^$$d#@*ZroyV_%RLrOafP*3@_$ymSo*qo!|o9lSy9fvIJg1M97E@4M&WSN&u+d6JWq zEl&`-*+^KPIq9JG8a{gHcYPZEbyMwRg`XQ)wpO$@jU&e|vQc1NKU5?@;jA5#(L(vu z;<~mp5)8Pu<}#HM&Yl{kz7w}Oyd@k6Cm5@6Y!(t@B_n%>(6%EbfML~%2%fc$;Ob4& zE{TZ%9B@>kl?=2IWdMK|Te7GYbSpjCG-+o`WIIFp5S3E6QS}!uslWg8gmv_NzEj{i zMT0>*;(|BB@}2@Vd^4QQtXA0--e|%`ka)>hkknnoj}wors>&+v&r4n_!npBt&-O>V zvX`PD>2F!&q^gOQ^7wd}^gg_*YFw!Op_x{x_rAR$EfAeIn?Y5g zpw3Ro`EqfxgMkkWpG6Sv&uEQTYQME!;=}x?#c~q9`a-@gogBmx`oR%3=a}yHUkOCA zs_)s?01d9#zHkCVwLVHY|=tcQr; zFD_H1^A)b1=_CS9V5ut@^oT2OH6M^H4O#Ff>S?QY_fR@e_T zES|WsW=DQach(v-P*?u4RC0a=ro_cWdL!rs1Z9}Y?EBWoigf~B8S;h~N%C4DoFwQ9 z-xm1iCbq8U^+kRYz|Q^I@qHh(w7pi86EA;SXHTf6dPZtDUFa8Q8N7E%HI(=yai^!A zC_p$S~F?k@t0acO%Fke zG&2AB7p`Lh6GLUH(eLNasc8O--e1{WT(f>)CQn1p-zUz+qR$C5tqR3PCcnCW80Pr! zcx+S?=vU24tPqV^hxz75_iHs`H-9ndsXeWsatmAi2CZ5&gyrJWp?XQY@hX81MI zn&r;0286KdK_$Kz*hnBKsix0d;`!LrFV;gKlK@{P@+$m{<1CJJf( zR5Gj5ho8)~TNX*Ic#YH9WU$_IYLPdemN-r_6&ya)qkR%XP?lE`XwW)u~UuV$w&ARQ*b0VHYT zdXT5_URMYo$P`)cr2Ra*q+ZeE2{_5=Ps5OO{)@T`$fUeKt4;k3bM*- z>MW=C=0*rZjIoFrs4XgcpVoBXB|p}FrUM%*k`@CUHK#3x$$DCRC#xdgM5bP!l`=!4 zjcro@VwI@VQ|;2|P3CI0y^Q>K6Lh`r2f_E9IWyD%>6DqNFFLrcg(61@YdpCbOH2FO z3u?v)>%35O6++Mmd&OP|V737Zhx&5Tjb{Z3DJu~K5?~b!g1o88@*gS~ zRiZdN%CpktFQU7xIwWf7TX{kJ3ly>Q-mT~uVZ}ESYR$F^AucFcL4qh0Ytl9lF zMTO!B2vn9SbXF17;YnIMN8UwYMM7+nUCmbAO9t+ zEDi?!&0daeYleq$VxveeLD!$))Zb0-;h9+tagk!edGojliQ+)^Pp+IQvTdFnHysyO+M2i2Klp34&pr#POr-)Nr-<`EJ+(5y_qxB4 ztB|eJs?16lW9{|rdRi36^4a1URR(UG{$EcnwwepaJkIlsDADHTs$;mApnk(e6}V0- zR`I3ZD-P#`!f(br>x@%ENa>O?o(o0Yv2uJkCvB%i>VAj~jgvRkVtjC7#GU52|43{( zy>wyuM7ThksyGXYy=1c zlcGDf-Nv`qG@AWMr>A24RO5$Jz$@92?pj+}bVVV_VD}GgYrUl5)eX&`JM3RH4}VKx z-)+|qWbOa(E_5klso}6VlRg&l=Mex~^Kc~>P$Or&L2q=3cqt%v+C^&E(d~?!0n;d^ z5yp5=nz6OyB`&P;NlYjm8B=PAwRYN4bNT$^!~LtFh~G0TrM0|F#eIIe(Z(O#&xJf1 zG-`CtRSagP?lpqsol}Yxgfu47ZFQ?Q7*{F-7QFKaXi0z@30!mP$ErH2U;F3c1loCo zPu1R0-V~9qZH<4l`4G8TFJ{b;vO-i_Il{l>V$n*@gmCD5YM!J&Bb&^5;AqU?UZJ`0 zQa=3$o?5hc1`*}kUbP}n_D6x~N*kYWN^slyl1`h!4=z(A0xKN0KB+~;Q`_*dxVe-I ztQAgRt!J{u%(3XZQcnc@Jg$cGLd4zjYSr{y@l8LN(J0oB$|r{8fJu~%cE38L=Z*0% z`Om(W{71;1zHS8spnZ0!EZ_&Ljqb}u6A5rLBF{28+Bq*r}`koL& zQIuTGJiTm+&JB^>%^Jy5QQK(cpooXL5bGo?1p5oXe$KE)RqLvF86lt?pX$VxJfezW zkmm#nh-1YEkTmEGFPlvz4aDHtD=6AHWG0lUT1eUT{nQn$Q7fo&e{ZLM&)Hyq#ZF`z zltWnAfj}Y&XHs~c((tER=3A~d>1A?XXtYSQaG*Zc%^zczOIiLwb&08n>SaBT2#oCX z%E#UPrdNb({?FqhHR=spb)8VR;YA{{oE?asQ#9lFU5VPH6ux*}t^pFLsRxIHgH4l(J*6LwnJS2M($^5j7RLtL161(<{R&enAKT=yuqr4oSwwX!UH^SQ-^Q$m z{~y0MLe7!s{WBxR)%D;9Mx|Wz``P4Rw;<-N1^9y5_nC(NYX7yCa;cBjOxxslKlSe~ zehBqze?0fi?E7G5IFw4&CM+QxpXj)3DIStdbo#(7-TG3I3_&4rJajkKZ&Tf*+ahhP+vyjV*U=vn;lsI??@j{wU|@!J9L+YNt{l@Q_)wE{wD5DJnX3waH znF-eCZmqwI1R>#4BOfJ;U%YrJeHu2K_tT`2(jAN`<*os4wJ-p+K}s~+dp*v~@zq#a zsFX;`JRoEMa&^aI1t372x;vRq3+jl@=qiALu%@P1^h8;33W(_{tiXclhCM0qa^!4$ zB09DHtF<#Gs0UJY_Ad`#?)1M9*hfVdJFvOl#HQ|7=khU{H~$6GH96WD4f;CP-R#B) z^RRNxV*B*KtQOkKLR@_&MZ0^z_K+V?{Ic{6T;z`msWbr(o-AK5C;MHej*Ac-oS=&) zH;|6qT4RM(Ir|J!g}Ls6m!|fcl@W@CHktZjycH`3HL@44G$Z0Jd-?Itb3CU= zKbdDW2ASN#ziMk7e0ee8SotX!h{n6S=P_JX@#@~FO$?Uurjbty;ecWa&Xe$&Fa|8C z5?R3L0^xx_Ex~+ICNB_xX^GJFrCM%;srfRJTp0AtEaf&ic|N{_n@w>31Ml5_>T@5X z7;0)z@ZfFqVE!grDE_&*+|ZBgkdPiW!)bvh!qT$%V@Jyddqz6}lBT32%I)wlF0Pwf zM6=N=(Oab@#qdJ|49AjS{m|(gHluH+2QB5&`2qDFh5=%lOjVgv+x@{icGsP)v#fDs zIVyIaANF2u(M#oE53uk)dY2I<+vd_GY1+css)6Hiqv4XuCls!rg$wh@rOFV`3i=>N zbGgzQGJWr4%82$NasDtDYX^i)eeMICCps#&3g4v-KmKG?bh7p!2Cl9eO+44Yu=DnY zn|Sal(3Bsg5&&#-uyvCK zz?x5$N23(Ykkq#J>W0YsJh|zu&*jbctCXZdh_`gc=gk*w&mugsY{IU0zusY%)}A$* z`|wEN;7>av6rQkzv+|b{kXXgxu823T?*ISBRTBqMrtLolf<8qNW)c8cSQ}F4;4Uq`~yP zp3UM>hN$`iPSi2Pc8V;|KnO<ZvA z43#hG$MAvj$=KSI2&n~0_hj{)Y8bq-O|RR`2Y^YwDrat?V`{9DXg{sH>`pZ3WjI+F zOJiFcNx=&erb0Z$`U;{nN$7a3z;7M$Vos1ITf#srV9NG*Bb~(INU1(R%;wqSGwTpC140 zxnbyOyH!qRw%=KnS+P%6sMTlH9y4V33F;ATt@?-SK-tqksz}nyWVFuEZ{Bcr36@Xs zOYVS^etMZuiGY7fmL%t(gv~pn!mS@KhCNOz^$IcZCIrSNvI+>Hj}r4oC-VVW6j3Mf z1g2L%Bmq8=3le+E1IVTWyn+3pa8hv1zPh<{sTYy>^-@%H9J+{DmW&&dNH`T+C%?ot zo`zGTeIguy{q2IV))SZQRwscnd(gTrVe;I3-bd{5_D776c+R$|E>k^{Au`~J8c-R5MZTG}+c4D@*Tlnv(PBk`=w40)uQxRC0^>ZKfw zg;~7Q^;}m$VE)0;tNr_$`oA4{rf;h{WVGe~DAVnbt6Yw?Is1IhL(9WWFD|84q!wQ6 z2@~%BdO{H*Fk|V5H4?YlEG+S=6})wJWT;$kZR#>g#Uy~AkMWYw0l}74V+2%W9U6)u z)P)m^L=$QyOt~}c8i{k&==lIyVxvUX1VZwvCJsS5ErtK$_X`Gf%D?k>Uhng~NesIG zXy?z>bqRX@=D#bVLHDO5ImdbTy~=aj#FvKLOM7eNfJJ_P{`~#*uh9c-lV&z!@tKDX zyHD4SDf7OCF`)WHiOe(`(Yb*}Z(D7Ng*%I+xb~Xgs!vR2xpPjRLRcpyUoafq^@^uF z!KzEoKb;zqoKCjYun*i7Gx`*EOggK$6!Z)VYh1{uCU!Fvbt=uF|PEHmI4s0l@b`cHTeTwd45EFr3 z#xfM&htA6pMMN^?m|fD80hn4+MoJJWBC!C_4zSydwQsQ^i<=scJJ>Icurjb+K&E(u zD?@4M_~jz;he^`u=s$$FSf5!tS7~x3a@oa2+*1OqxR^-~(|y%Qc{P+QjTu$LG)@_a z1zkwV@gc))&`Gs=w=BF%)*rNjZ#hN4n$L+AX}I+~Viz}dpzfzcYFq4KcU5$**84A# z*Xnj%EI7p+~JI_*Vnpz`Y~G|y$$hpI?;U7L>_BUI39k{8;oq5 z=OVjlt7-t?3mZCG>q3*uKyt#^xJrk?WApT!^T)@F@mvOZAcz&ENC;b6dG9z`EJy>f z9(-n4l%qB|hRXGqAQ$X0lM<1=INB4D3ePk^*Js}DFE}`_f-Ij()g+O&xm16CmUCL*p?Z9_`c4MER1mWJ^jo{#v<>OGeR**9Fph2Jl!?~Z z8-FH2x0+&nM0KCxE2elKwF)FVNm6{~ge{G-ktOd=1F>3PV$ZO0r(g7a96noC_7B^$ zd+gC#e8uM(7s31L;w&WzbTtcrKDO^;wS5&)WIHjMNl;c)a+S}>R!Rl_pb#E=9^O($0ZNi&gyivThQ;BH%0 zb2xAb03D>R_J7cTOYcV(`HW%wM2$O?k>eYb#20}F=G=VcKCXGd7mrd?XaGVjDP=3oDj9A=W-zxu0Em4a^qSN4sUHMH7+%a86;+KD0? z(*JM@j-0!{tFf1Lbh&Zg8(ZB6b`c;K-ckv1FvX7!X}(Bt90bAG;>R%yAp6(Xtjt0l zpu^WmwIQ<9p9FJY?aq#)ZpqQ|%{;oV4n)kz15G ztNhcW-;HtLNcyY(gYB_S*+oSK$L&xTxFl|BLSifPSV3)|9FLfw*20O7o$+N4O9c_eATN??vIdwvICJwI zJD}EyqCL9qx@3J8-_CjI@!=M3Br{0=^LywQV;n|#w*|F3OJ)3M<(m~;ytLjlyUkM; zFTRMy!{3oY%-Ll8?j@iV^Q5~EcEo09o;_!hX)D4hv)T- zFVrYo=J?2qnk3QT)osqktSln3=Lpu~y7o@&+(=)bQm!4| z0w@Ruuu|k?gle^!necjCOCYLzytAgrq|@~E|3Uhwe0odz`a{}f(eBuT?~6IPTU^uQ z_#G|3isL5t5r$^sxI-KZP zN`X`2fx^Yaqdo}e)LLAm^ib(=Hm>3DX8g=UK9`3kLyo$muu%XRK-0lY;%xRsnbLDy z?&k}JzXx_|pG-AOdK8_FnU791mW{CLwO+SD2RV4vYb786K3+Z6UxpYX0xYEy1aVUi z1*~;y``_?X*vP^X8?#WSVR3Y@Azq;IZZ`qHMWicn^t|X|hCUDDk9U`nu4Cbo9R_jk zJ99=mu0#R`&OdDadA!RMu72xH>lsHlG=2M5&6D1S7yi|XkIT3^WUInQODnM`VJU3m zy{80BO2^;jr}(wij3aBHr&2;yU1phaWuzlR?Xe+hFKi^ZCG+g=r@mH(1`p!h`I%Yy zH2Lou3phc7tnJ9tt+4J_SB_!WQG?J@-3e&H3~)?o_UptwNr3hG$nOxUHutDufXNK& zizg@FQtQ=u1{4HVfX0djI8Ik+cY&;4k*iXH-Vln8n=Yn+xVRjfHG;>JjeNOJz%W zwwBpvBay1{<r&pLRMaHLlC_AsZ3hH`IP8p|23c?ndzWg z0%*qe48_UcOk62$TfZ}Lr5dendzv+wLP~F;pTJD^`wKeg{9FGLbIg49yD|Bc(Z+%j zS}LN|4+fd`KOHJ@&2guW$6(~@NLQ6MtXZF+Z)V% zzk-bDayR7jaZBj)^oL0eZt{WOA^i`IzAI9bSU!oK+L#3TF4#Po2uzWaH#wH2#RJn7Z^nwojXPMH>Z8-{@R(%4o4)4G1@%Z zMzMIP>gSX#$08+|Eq_dS3}T+H`W~M4y{lEgjeY8P3$mfi8$z!URz`suQH)p zE06!ae*FCRPu96e024Yws(XcQGLv5lU*B#k=0eiIRO=01d3qm^6{|d{HX79(tuB~L z4(``6H(^j5HxrhTdFrBPLrR#;jC7!*q~}^TE=WgR4QYrMpXM{V>ire#)~T*l_O8fM zYA5&ZvU*H~v0XA5>4#TQmXgwn+swvu>{2 zU7sZ~R@4I>#1VGWchIE(_mI>Du=@Jwmrn#~ok$Z=-Uwk3t&s{oEqFJuUz{tPoI-VB zh612Z-^5*F?7K24>*5MdSuU}H~IFx`AMLFCEe= zec@za|CP@NRvDGDB-*IUwa?!}=SD_|Nlg=N&u0e~V1?_EY)y&JtSFaruwapG6mpDg2bV!#b)pg%gy= zC=Ik6fcOAG*D*d49q5<%4Z)jTwMt(_XH@Ny3K#q+soa6#KmEoPwuxk@tO6Rpr=Eex zfBQpwuF&_R|L>pC_;oQnCV0CfZ%}b)@_4sC`R8fi%FEuF`-qJ9h>%$VO!)$IFp86M z2cIm5hQnEWt&s$uz6N%eD+krWh8B@09A$w|wUF`3k2Xx7aXtg7bW`gu%@D_qE6Ed^ z7^u$1mn(KSvT}2Ve#pc|$jsmLC3kBKHRq&yQ|TNm<(Mwf&WF{yl{4k<_M+W?!@Nt$xE7Z) z7y2%aEid{|zZySPZ%2ON)FPTU-=4|8tP77NNw-cY32rL?M{pYtl$_m6sdCrqAf8G{X!T8fH|^Xz&hA&kHt$#{eBzx{Nah>-T;EqU?Gcr(9 z0AKl;Q&_oPf!pUZngsQ@GXXH7X1b3-EpBq+DN{rV zUiXTeB5Y)^`%8iDDq*)voL744n^dmT91ZZNdx{csJ`zcSs$}cYrT$);V&!%a(5k{! zk4lbJWa9ZumXcXM6dPA~rbHmpy$YIB@&mMQ_s=~EC!AhUCDK+T2}hKnS<35RFm?_F z(wfXxE9T||OEw6LDPOvGC@28F@Un?Xi2Oi4$_ARMIEuB4jlyOM$S=6HAX<<*ysNm*s2| z47QzCAnFtX)g?vo>fr=kzVoT3-rN?aw;tqqhAsl;X7>7c7c;G#>qj2Lv;1+4^xCc= z!;(B1mbQ9_2%UO0c0F$V#4ZOJ_R!)T@)HGf`*x#v>uUFjy)n~DHfR;Cw;?_T&y2Xs z9tI|>0LPB^p;3E}g8~^5L!@n~Bm)^ultK0>1-Mv6LqCd&Z5QRJDCGoYa0#PdJ?YdQIU|3Z*lQ91g4WS2$6=Qn(AbxL;r`SEv-w9A_-fBJfg z1}ihn-zL@pVavG8;Lj!lJv5!?)XWiLt<}}^j9FMHmpr^{BDAzopU4BjjvHG?4s=o= z(pHk~)-m<_F;M%g8XS}PZukIQVZB*y)L`)2eXoMNO1C?!#(%NW? z8gTXm5}q+E)0_GzupwaBtyVtenju&|l;N4U;5==f=R#of(B(ru0C0gnneRDV z4S8Jkn&eTNV#*Ts`1WxomeQErj(3G!EoYi?f7~|Zr?PSLeTUw}(CJco;Eby>yQacN zWgbNFwstg6SYPk6W*5==aR*~oZ#ed#WV(T>9$yZ4M2ftTutT%*;44Ye((cI6@#R%@ zW4T6~rfKSV-Q|Vq4=?*D(Fnauje$ZvB@gwT?sN`#7*jSgug^b$A+)*SJ9h`BlEHCf z)CQ*(HMW0hOE2_raPmp$wG>CzqD9}}u)<=)&lDh#&LKQ}xhqdU0v8sj0 zs0g4SH;!KloPsSQvv60oS0%OcjI`7-NpA`i`8#IBCLa z*?J!hMMlIkD`^|50r7Mn)7Q5!lyAt=r)EJ=q8e~2qu<#9&+_re>7hkmY z>T}S}-pQRt3p**T6IIrq7p!3vwL09TQ`K->5Uwkh?Y6NP=hC0~GfyB8^$jV)3tjre zE_~Xxu?@qim>QOirHkj}2`^`fygZf6*2S1OzfzkJT}y>EMK1&23x~oZ(U+>P^Fx2 z<>=T)%YM@%mV_jw-RjoUCviBroyvvuIef~-D||Z$$1ANQX{qDNiQQ+)w_}-`e{1)k zR*hy_HZg;e`@Sl^so-NQq@|=H9Ur}}@dDutiJ7@vVQQpyP!_l4^~IO#ljS^H_$gnR z0A7!h4bIK~?nYqBi(N;D>co-#-FIr;sabuxBbp@;6@FU{rtH6hc8lOksN`B7`2vW5 zm|`&Xnq&a}wE~}IBFk&p<;P2kcekk zInhol7~dz-&$?MtlY_Ld<(&9B#cee{1oE$A2P7lsj+F! zC?;SWh>dOL#+p5r*9o@gR<-3LjKE~m^9I14*Y)eUkyx?l4Vo$_eMqJ)UdM6K`a{J- zbQzImy0(C^M?pw#tF>}F_4ro1bf}ycw#o%}do``{MLGnyJsuY-lZa!Oscd}|{Smrh z$IURueXK~VP9K}SfahzM^s08|DeH&^J{{^_rOHf#J_l4_l3-&9TZVW_{gL?jDfz(MAx~PLZMaOz zufkaV!q9d7ai00{*<;@OD&K6meq0{f?IL;oT7$L^%Nd-cCRp|cI--}R8Bo1_ubp^l zy)vZA>(L!-vbhjpNG{RA81G>3hK23{qjX@2hFJ9u-)e&I$K-%i<7s8}Z`SHde?Dg7 znO*LnSDzd%7^C6NQnt|Jm%(CRNU|457x)9;g zOSoYf&6c4?qqVH`&=AjLKTz#8M+@jqks)bZ)FmBg*TaZ%F$5FsC^4>2F7Bt@Dab<@ zF*uIKwx#R|90fMntqo*1e`L0Fv3vftkSPd#`bs%*U@~tOYxwWl(PbdcIlII28zwjR zem{@fB@{lvX=xqUM!8q%iBopGmSgiE%ifS9^$kFqTq+Y=IZtVfiiJh1v)RES&uHRP zk3K`s*z0_jaBw9dNXi4G7Kw|2#Q~~MKx${bv4~I;lbpEq5z&Bk)b*8$@a!CWsMu)E z^ItqWs*+v%oGvFEG!t^hX=WKaIHlTN2X|g&j(PEhr4aS@#o|{2Ir(k~G1hV$a5GZm zs}zS-k%Gk1p!kG_dy;bXT6nmkv^Ut)O8T${@9Z)+_GRceP-c`Vpmk^`N9tVUWV-_> zMTXbTeC4z1kzm_zOJ{;G)2QO7g`0vOo%xlkDrJ~6>IlY6ILe`GUbc9qvA8>*q=)k9o1o_MjR0&&t-`X>kBzajm`wz zwmn{r6!zn0h5TGJ;s5H=>ti{lUrM<+p*U3{Z$^T7eQqxvuW$sf(AZOBL`v-By)Z-c z5@YihIqot5p~T`@?kAmfs9Lrwp=Lb45j6(|PPN_|aC8(A^k-Q-cNQ)#o;2hJS%4L< z0|c>1F-@CWv_K}XaainlsQ`nvQ^6!j-ejz@(E#lHEdG=hX{=3&V z4>`{^htZi;qu2qsLWIfB7-WEmQ7QqM64Q1UbMr}_(nUxZUG!14a@6oKp&G>AKo#F{ zxuObxVkDz=;*KnyWg%E?NDNfnFG;N`k+8mY%#C}JYg%zuqOdqQK3=Es#@ZrQCYGbM z8y>&CG+bCUm(|Me!Wb`mg=SpSOn6HEkvkg&9QXc+R0~4AZ;*E;ym-r?AU^-VilFoo z;Tt^`0cH)n@1-@*k;c}YdXxsFEb#+?)I6ZOBKKtJ+R96i_9T?`bGWq%V2TZMk(~@u z_Ah>~ajBa_(f&d7{fP9x{!sb{^!^Hs-zd3H4ru)HxafJ@>z^qaE9uNlzk6Fj@chH! zmNVx{$G!#OGTh6!Xhf^=6(4($8ajTb4*J@q zS=W9duTNX8p#;Ls*x#(#V~#Jb^)q!c{&9AQ~eV|yo zxbx1k0LRpsifXvKwo|tF^eTP*vLjz5Fh&E8Oy?@L1o3X^!Tu41UYm`+H}-Rbl|G0= z5)r)W+B9~r6WzImF>ts3DQm9Qlm~fMh;kjg76bO95>>(P7iLQ_|tJeClkN()pAN3G8MsN zm6s*T$l3CTVbK^TM%@QUMLVL*pb$gSRO}eUebP!Yhy4*qvwS(Dt;5}sSE;OUlGj9ZlJ7f4`lmR*x^T5H15DoX%9dMgOTI7P8^{Nf7jwW8wEWZA>mXRdFTTC4iQ4Abn9A-A0Bx0fsnZk4cJ^&c4n>63wO1?ZNoUJU~Y~Ry( zmYOH|c-I{ltp3*jZA3!%NB^Vtlfv5AY1P2cIKS~&%cbG8DvX{yK&QH2Wt!ANJoyv$ zJ61UUUa^*%<({Mp4x57r1qwslNvAHU`T8)#fYs7p!-TJZnUzaSE{oB*q|+)|ey2wJ zsX*-4gX-&#fy_>M5T8%E2V)CN+~>6&OyaNYM5%P*r;TY|T?xQ{s8OgB;B^~KcC(W+ z3FUj0VrK4@BSOnvp!sLHgA;nxk?dsytHp>vWm|&~;o>;X3I&Ad$Sa&4nPhf)ddb&J zQbCHGIxphXRJ;R_loMn*oQ^#I@n38cflyhzfBpNU&awaMpI0x?`YUG4!FM13^$&_8 z4h|hC-m^M?x19D&0Yxp%#>D1-awMcM{X#`y+G%6v>eu;cqDF_$;0o{9cvaa6TB5{D zF>#kzHIuf%bg%enp~>WJRsZxv2vZ2SuC67^&^NuIBmRqZabPF+K*#CWqL0 z>`uxJu;Ei$P4_VkhT^9dD;xtcB8)s(HG%d$3;}doqdMh2u4hKysXO#EhbSTukM%2C z8X_aaj5h>F6sXa1s+|!E2<=jTRA=@yKjSjniV=)WslClR5mm;TiGU(kcG{G_s^9KWEf z=*ZtYKS`FDA*~w7Ke0Ym4hgmaR99ecw07S=o)?0c*z6t8`tV2dAI?fBt;!m-q$yk!RNB`PPF_$sHZcCZ614YF|x9u|URKrf@5l zg;%lEiW%b4#oCaR;`s0~KxHALC;Hn91?JH|FY<(UysToeXw*UzA_`4sd`efUa~p2$ zHS5%I=pA>v*ovP(5mKH^^mHvt3}t<{9hM`X8iZ%E#ZM3?k5LwDSm9E69aL^9(Y3}o z%7fYOTE!FKkOG}{Px#>Q>zw^MiFFFNwmX1Z;sXh5dCWrX3`GUr0ml{{+PsuWgZfp> z3SXfY%KpbfW9lkln2&5OonFslJb&>^%U!_sFB$qu&wgX7&&kB^zkF<(`=?rmd{cZo z1O~6NuYuzkdh69nQzT^6IQcJkuEkGeuMN#AQ!E#9C+G;~IIGwUS=d|Eq&QYUT|u*8 za$d8|g^52EYK^wZqM`NY-jxZXj{KMRA4`=(8lJ6_=|u^GoyPpA$TcF@+-UbNDGP+s zc`g#WsIu#Ika{}5De1VSkMt-ZtURu2`FVUDRjk3n$V>qaGMM;Fb;@#>a6(lr26?$b z#r;dd3nDX@42AH>AtnUg6u(^>FVH*=hkL2I8>|5ErZYX}FB1Nb|KhC+hssW%`R~z} zz;OH@XaD*K2hsYgm{MRlQMg{H=|`Z!d?JjTa#bAz$e z=o3G99=lF(dKy}x=1Gx4Sho@&I_n*JxcSoK%7Qy(2J2=FkYSgtJ~#A zYboxZa|Li5o3wA)`3c-bHP#z!$dPcz=GC8hwJ!f7=_=fs{NFAyVDtu~2X3Rgk&ZE7 zj2hiYw=@WdN;gPtFa)FBx!yi29bd!}6WH9F-6p8W) zOKZV{Npu~kauOBj^?MK;>|%*!jSEaUR54=Qc~b^BQ~O$J+b(81j37kJ!ZnF&QSrCI z@uKO>p`YFjhsx8kKa&F&Z%RXnr-OTsy4U>6e6rwy;#5i9?$iQf8+kFgyd{(>g;~M$Cs;9FWhjs_nQ@^uuKS8EF&p86hM}O2+b6O zGaXj@7Aw;%nBSF;XV7&>t-$g3CslNAAo~(d{M5O7YeWBf9hg)2oygBYx$DDro;){d zQbZs|Jv?1}6CcJ7G+D#J8wTUH_K;Q}WmkOlsrDv48FbgDdvVxw0$ZUoaLCZH;RNw! zZ`hN&5cAD%S0CRT&bD)G+EzbiqibTL573_wq%+I*!`l15F9;p)=_1l!>N)PA-;@HR zCvD@SxMNHBYqq!;eSM)OcOXS+iKQ;Xb~7|i%g2pl%r=L65Tst}V3wp^+)bG-b`*ms zv$sx}6cqF&ay=1Hivn`eUbx9hM_6d$JQ*oivv;Z}29$TJ%_K^d`IOq>pNdzKlByqJ zOhzLTOVqA3B(EF2p2<%??YiIOY=E{>c;Cx3NsIcJ^G;d>Wb$xf#)EH?#^2C_m0Bwj zATI_oGGVlXOE|eh3KG3z6?dJtwrSF7d9as@NRM zyuO)eV=2yH2q3MA;c*Xb2Lne_Uj+~QUgHSq_A@>zm=-AjNuJ9CUgB}&p{NJ7+LRB< zg{?O8cyr6Dn3V4`$(XPF!|z$jkMRH3Kc9Ri@>j(BQTORNDe-=k@%;bwlg35-w|SOf zW%0}WJh-3}J?%7!$AkyJuMw95`%!)G6`o{p-Vv_QFKTl+34~UaTxiChWs8!>7iS0Y zbPS~*+0?sONmu1e`nutyqANKCa)pu_38tA1�FH^%j-}Z0IgOKc&^dKRBD!9ftXc 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

ftJAQTziLO zo{pq9OFf_Qr+dK8mbp}Hc|WMtkjq&`=%$PGi)z57CX^Ia&#A(zkg_`cK2yyJRTE;; zvc|!~49?YMF48wq5i%z#Hey;OXb&+t$3{bMZk<-aKvxJu(tEA@xN)KS$SMM<{PzEJ za(pv=5`k)YnA?8B_Y{l{I1^y6j9lC6xfC;}t%tWu+P*N-(;#jYTkvdox2|B1i)MU9 zd#_iUQx_?V948)fAI9P7OJ9=O#0;W*kU`qWsXwd`(tpwVHI!(4JQl;vD&iDsPN2Hq z-g8dRd-a=3QmA2#2VYJr>Pw1-8rfO43;z>aJ@?O+$0V$8u=vzr9n!MJj@iJh(L$+r z&{Lfn2jnQCiN8%1OS%GUy!2UkKt>G7Lu!HYqsJo4+1V==0r}{Vb#hqz$N?U>16eBo z1E)&2aNuCyuh_F{U=QLcdy$q30!JP5G=#2e|M7dDvIz~AN_@`0I=^`t@$CPl9evhs zJnzqC(xq6>{oR`Qd;S+|wNLlF=gMpj0cqVga+k=Ket&{vzEWy#x8+cJE&*}BYqtiPIJA>~FnX;ixyS?rg-`(B} znQ84Zp&>|T&$7jhQnRzrAQc5C6z6l*#Ag#xA@!?Q+sF8;-QA!3(T+nY*=n-{WX$4mmwa1U;8Se+y3$T znPZN8Pf40GyQ{S|=X>|qj3qqYxAa{)VX3FC z7FVH&u=Ge6Fx{Slmzc;8h<7BuF)i?6%a4uTtAh-&k2vCs>$sWXc+;?h7`=)Oi6dfG z^3ri9T@sw^nN`i?J8E)u-9q;IJ}lI8Dc7DD9`ljvF1c#2vLwxvip-4e72CMYQ6t(= zFLc_!nts#Oh}8b(9JYZRD@HA!3>V2n&?$rz;D zD@xSGwsI?wjc|=_0}18QN}Uy_xw3c9*)sOvxeiYE?^CU>?^(ubgvq%s7xY$ZHvQxG z8!%7u+5h{zKcA&J#y-zqhUfXK`RqSRkp7onx5e#83-y%at3WMvFO24thvcprn>?5_ z*El?h3u?YA7~cQ*P58~q?+@Piv_EtQTqQyb?^UniuV%8Bb(2s<@(w_E#IL@}qzXn9 z_`P*fv60n;t23Z;k#oT4-;vW3Cq`R8-0j4qGSTObL(wC|h?Ckz0TtiOS0&#@`ogEKr6=}h_G_=eKCB$X z(P%qpA&3DR>9e)KN{@b5Wl^igJZaV}A&kbVv0$Fpz`iP%&SPu_XxHBp%G{$P{uNDu z*QPxDZA!>*M-9PCOH8XCTY`ma$DxA?ZO2P-&)4XjU!>%L7arOJSa)-_Rgkqz9pVS2 zkOoFK2W{=cvZtqChD@wWN+;+}^3m@P%sxZCKYapj=+d>)CtRc_p-q=piD`KSMAx59_6`jY#`j` zZ`3X(O7eCT{w&ICo+lL2Kt65EY$?y z-i+Qt{TUML%mQ+ZMMO}E*@Cd{Qw z$L%C>J)Se8b=bSFtR!PdM^0azqpU84t9NAWDqxvkajS-VIhuqcr){my;1gv&7e+l; zl(`{1f}(;vX+If>%6&%J+#Bt7)?t6nX!0PJtH6J2&wLx0{-3z@7#)oAa1pf+h0EAt z11u=mGNGoz@ZPpYN$GKJTIQoo98~7%%~QAXQxwlGyE=JU>yN=6uRrRiwYNEKt(+yr zB~|Pa`u|7LS-3U*zg>Kc(IJfP(OsiUa&!(xjP6e9P`bNY7&%J1QMy686s18z1pyW7 z;ro03h0k@J>)fCBeV^B%SB8e9sM~62w~zWx8#$n9;l0V>)=ZJYHuJKKUv-E#AZ0kM zjd?s6_Inwt=fj{MiU7 z{Cbxt(i@1#f1h}}Ddc8wK;_iS>{ok|xbyzKd0E=`R^Y`qTkVBfNng})pU;GACDw$M;k-ZhI*z|{b8A{1&_Ab0k)oY$484HXkM47- zmSt$=L1d(HZ}R(o-MF5)XWS$>0)!OrKGJE#`mv{TfGQ8#efu zKTyk<;%jI=SA^Dn46pjM6=rg=%Lb-|yL$(0} zXQ$BqkKKKfFgCN6iDToCFnjpxSG(}<4QTgUi3$IToIrxQJfojUY;6PrbX?+e&}bu5 zY5g+}V*zP7Nqv{tSG*I2*)N&%bKT7ORo3#l^75m(nA1K5G`a2b*48$Y3=kpW83tMx z`l&uc{|=?=Y^~x4Sl>Ierhx}Al_}mgA{*|s0`}hLwcAEYrv-F7H3}#4bw1L;3bbqL zt0iL_Xy03Lg>(n@b*4`Ig>&iIWhlSRO%}b0tF~j0rgchm9}rD~ zXBCy}z0`nu|41O(puYB>yIOsh)KUMcyPE%{t9qp}0(5NzI+|juM>4fGT&2uKe!XV{ z8!;x?pJzqMdBR(0h-TQuj-%cehRcI-0?sk_xb`|TpFd@nV@iMcN@Y?!d~8)kaN$zc zerew!?h*KWT&`bIoIdDc$TRL|#CzxF9Eml;>zY@vnFyeOW!GLF_glb%B=>D6S&a*; zTVS;&UZJ}NDd~(YFRluBk9`?Qp;4Sl^K?SJF{c7pumvUwn5E46x*bR*Wb`T4D><(i zX=Ce8IrMkkYF%WP5>u1hn1il8fL{Gb)e5K^qGX+Ky>YOPksmo%uZ_-b*oyz)E?$2+_VsV(pZ?l?o=Am>}=N|1==*8N>eH~mSI~A zgG3?*Dz5sG8hrkc$YK={W)%ms$-`9AvV47z1HzXQLZakl&4J78V0;)WOf6nW{{yEm z6%?$Ry3L|6dpriKEvhNnE!xy5FF)VdDcR``|K}LGo??3cntF{r@rvROFJWIyRFtHq zy;w3gzcQMvBrl&qrR(TKIiFH@3Mly(Gc`6jnNrr8DdA>X%&7AcZTOVlApO=fF5p8- z(@n=*WmEpfw{aQSP~?Q-tG`;!Z#u2(uNwRR#2Oi`0C4SZ=8iIiac3n;6Vql6y5f%~dCK-wcgK{Lp3) zlOrWIodBwTeg2l2z7ibYrCTo`@vIA|`MpJdzlIq@$`epbMQ#*SmVy19bAo}PONY^7 z%@{+ehQ^D?w3-r^0FJAZm z`tZh^%rpM1h)!H~@A%KG^7_1>A`hQudSjANOkl;5AMF_Gq{aROTRF<2SdU?v1q!|t z=AzstJ-Qrpaq61$Gvfp66f~o_UZxm59c!@teJ5dj)wh#fZ~$t(lxR0e&VH{G(n8e?_QFi?Y6DlS!>c2pB>lj&nir)ZTzbA%(HfXCRKI( z5K&7=-7nXo`@<;nhK*W_2fwbSb}g?GX^)?`cnzK}^*2(I43ko53;6#DhC z4ddW`j(&P@wI`7BQeWM~G7$Lg&7u+IKh28CyGZEKU<%bXi1^!HipRF5*~MfYK`oe? zqv=m&ii7o>h68i*vKLyZHXW|c>gU925WJ-FjT)Hm9>Ic5`2nCCeaE$=v1E_cenBxT z{WI3ZD+bm64Q|ig?5^@_RkfySGw9!adwzifjfJc1cx)WT{+OfW&-RPi68Sh=O?-=e z%Od*2$Wo`!+0muXdZvS|J=(O`bu}Xk`mFTVOlul${zPUw%~?EMrYB0!G8!OCxgTOk%jjE})I8z)MAM6M*D zzLeOhj|nke5y8Yquke>moJOnp=O?eF47OvN;c>+Lr{7O$_dAdL$;bcS$NQ^DgU9z^{ob}gG5$Dlh0__6pk1cuypMP|%2Rs&=&FR695I`Ci9 zf7_Q~*r*NSBd|@2;6OivaU)W4Sx)t)`W&;;SR!`ft(&R%(bKKsc*i8h818jo?(%JUUIiy4s>kpx23E%h< zj=&EYY+@|&Hr;`rP?apCyIF!8C~H;XeD|bU)=Xa#G%0B=kE%zVmN2m!CO2VpG#85% z3-z?w`KiF+?98wnL>drPElS^~z46wqx*P6-^3k)g2XWQRjPJT5wVJysQ9-(AESrwC zJ&yknSFX+7cXn&-vxw<}btgt%DS?5w+8K~oj#lMXsclP9=h^vLxJ({S2$!suFbh65 ztR3%_Aj51OP*J_M)JdMr0{6-5Kx;)os86he#pXN-NlsH9yExVRt2k2K*($@1XD{re za(z!Dj#6z$>u+FH#Hlh=&gq!$_`30`U!g%L)tp)E-2$bQZ_AQQD`wj-?k7@0L~VfnVCSAv*+JGT6Sc)gnaRrbio5kd`3IN+Q z$7LRQdXpoLBHYmYS+`#YTf|9uQvGuo9Mwak%s5IL$t9BnwpUfh%+KL+GrH@wm2)(% ztX0sk!ZqoK4s|?AkRn)<0r}3}`184M z&hI>D|EbmUJ~nBjmxekxFw0(`(@57MhxBrgEt|BEA|bjm%b~hM?F@E2M%EtJ6fB#f z-e=M$$5MkpU*ErNl@c$ed^y0UOmUrkD3CiFmTJW-qJ^KLyyo8aqt@|rhn{N-n-qo3 z%r$VFg!WStD~r1>vLY1BT*FHn)Oi=r??zQW`$hdLbYw=stO<8bDfXGqG^i-<4&Et6 zkmL%vkRsjZLqrmQm7}I-sFy(axuXHopP|0VhNd6vOIa1GZkNSn!&_YJig$Ni|I_b9 z+INbu!G@$Mg^zDdG9UG88S(imzC43+|06%gnY17a_#R% zN2yqU_u}8n%sU`7D=8ts80LScd2(_x8TV>Zs-mZX(qOJQm!JzdIc=!oNE-rnFNR{$9h{eZX`Ppd4t4=d#mJuOM~dJ8seR)=btjp$$!RjC@y zxHSj$)Tvf8MxXb8?m7>9VGc?EW2=GuvUsxJd*#zm+%X>e)xy=})b*swPlrCcGUYmZ zF{iHmot>-rPH)~{#xaA+)AJ(eb8a0m+rOneWD8%YwSfD+U2eys^ZnlHjoa@(Ha~SU zu`1texQZ*ziy<8~N#Wxqp+Osl;0uw)Tnjyab}h?`7ze#6$0rSUZ|~u!0M8oV@ZFY% z7swDA*91w*5@375{wnfXU;-9sH0wh3ZcH^j^4q2YCM#^pwyiEeQlaJIGU*&LHwa>iW7 z${a;a_?D7rA%ZgZr>!st*i!3GN>|t1ETlcDo$T2D1gG-H?ahJ4P9iKhH?f+mV53o9 z+ZvhKo}b3J(kym;!q=zM=OE_9EQhqCE-k&99xMmtE9kDqE`IDKN)}LYN$RTZF?LOe z%aI`e{yd9(a2__G=p$55o~g8y3!$w`@Bm@u)h2$=-dAL-p|GeircNxVz2j=d5NNP| zW%CtJ2;fYpu%tY0t9;!5ae4swKmFnqD2B;KdrT=@z75KG)Gxi+=Nt4RzujW!B~8rJ z;7`qN4m6-tO*A7BE>CpdiUIp&wLhh=SBe~x;rl=2yOz*QPqX;@xQpGwoiyizmBTp( zDQ<()uP`*J(v2RMv@8{^s9WeM1?btGT1+bJN_R=Ygf-h|GJQJJPJX|5LrqL?!0wbf~8B;cl4I1w_ob7Uu+u$MZkm3vLZj>0s8YqGGFt0h|VPNr$y1x#pt>5)$(7 z3#K(MyqP3Ec>n7>c_Z@us_6c?_T>53Dl)E6-7J=v3VkyTk5D!j=|%Fdb{1f@71`{D zd+EVn#!AWUcN5YhPP-$1iz19V-J|)S-URW}?DYxu*Gv~dDR^Uo`x7Cqtm2YQkb+_( zQatp-`-mJYOy5WpBiG2N5_a40E19i~wl#HZXq=Tt63UE#VN6U^k03ZHk@Pc`4K;<^ z9+vZ7dP5FoaCuBFfueM5Y`7ifuqw@dt6c>K0Ps1RZ+#_zrE&#xJFW<-GCi`rb>n}o z7~ytbqeJWVuh}Tj>uBL!=pWO(#+sdJ8~x>N{=z$*T;kYny}4tIqd)?KI@#!38EGgF z_#NA~x-@$IpLQ@Shx&c9Iprvt5n_=%hji7@=i%Xfnuejb)6a z4K&luXnz@w0f0m+-5d}m6mITzfqu~J#y)DSyY5w5Zl*L@A>xTv<&t(9RJ1MV8rB1E zi&H`>v`EIO7_w?nbj*q*Q-wYB*QAqhk_nKy>5oc+8tsl=FlU~V1g99^d$M=zxBi4MT=MczM|AvNWZ=`kexV1^The=ZE}G) zzCjXuw%w)f^IRVTa;)##J90^e9yL>bH-9OeE{^+PY{m#TCj+YB+hs@+2#3P>jN1mO zHQBpo^x8>M?4G#Zu_X=3kwn-p!dsbzp4I6_a$1JQG6-);*O*pCa%3}iIr>a4a9}5q z8%BT{Ntdk^E+{~e3ikRF(xmD`U2P#vEp;%lb%ZDmA4mc?J{SL=ejoD-;*a^G$NBln z+d2O+zrf&o`RKn)n8pA9{|kC&=&Wl~XV~madEqG1tlN_Dt9|)pKUY<;wwFiUiX+P8 zQfRYsHh@=u`c}!OyE9NevBfVrS+a;%>b_ArUHy#rss2kX*X%CM1{)ZU{HkWdcQ_&nIwn(5al8r`VQ?7g=c3JPB>vG+tw2=S~;ys=x`1gXl5K^ zk9r69Bw^SF)% zx9h%I8KCxy3B~aU8CeD0%)MkO0n(X~oo^IDZO;4h3{O(D$i|-Kde3{;`doyBu&i?g zvYKtC=}bCvvV75MrnZ0bYgL9U7TR<55I53{*n?3=@KS{F_HUG&v=)B`_q$DpFC&J9 z-0r@)W@?zug*VM2aajd%c>u8(j#~P5b8u>*&5OXRofN-Rt16ATdSKp>sqi}%mh z;T|y@XOL!1aqKNj9;8Bhnx>9MU?7rk#?lzZ?)K-8Kb1s=+xtzbI!C;SGNsgy6oq`! z5|OQTpL9sKAL1^wlW+OT$&CnAav~Ley2l87t9Q{itv{1^O}u6U zhj*uR*(rnU`5V0W$Z+gL+TtcB^LYVkl?Fr@3W?g*ooEM?qW_$Yg+WCIZCm{;*UD_1 zpBaS2wPGTd+Li}IABn~o({(ETvY1KOxT5n8&c5#yl~oJs%yzP;*H@h_)nNlSuQ)a$ zKW}>f$^D{L+o7qv@nzN2OvQ6eu=Q81j2*rUrBbJcl$EJuV!2`E{%Eda=W#!c04K!< z#+4idO{oBw2#1B{J&R^wk~XO!^Ar%?_Uk-zUx)#}tBW90=>Br{hneZ?%*n3g%Io1= zNWPUdyI<=9NEMS!sX{djqi-Q3c!qo=P_R~Iqv-D7uMlPJc$~T{P=PhXV^x|!5ML;h zL6j-TzfXCd86Z`2ketjADpgC0_T!;mS;WVRcBERya06L7ww_4$o*Rb{iB+`Sf>^Mj z=EbX$|LOPg$tL&z`|sfs=PZN5bB2ZgpPv(l%3(%_712iIIR+i58aYwJRm)d@*LJV8 zOhf~m=;w$*`8(ZmrPMTz&#&8vkw$3ld;G%mT-V2rbhA2d5v`0eO`nnZ~?xS%qA*Ln1^bk@$? zB3}jjo+2et4|9AhLx!|CGQWn~BxtFbQpfyXs18gk18vFA#;89*sXLp`#B@mm8FMR0 zETmAuosKM?(Ab+ADyK*P2BZIn-!p7`w!&ckL6WidJx+2lEnwA%59IVG zn=zMu_Zp)>e;p-MoGRSM^#Fu_EO?a4M+rV7U~qUC;k@04_kAilJnYIBZ&S5og*BhBqky?I*19YV`is zvexk!V15_WQM}%;&UKaXBnRb#@{tnvo4L{;s%+uG_qogr!m#zQ+x+SGhn|OdbZcm2 zDZ1~*rPP6fM_xu)S?~$aOgqt-XGzocs8iLhfAh>eu$HVuDz;HNJ4wZFDDm)*o)=U0 z011Qaomp+^2W2x(8KFdVG|mYei7Z$D)2<)fu-(ZP`bfsN*-PVLzkacna# zR%}VUD0eP2qPEU_EyL2~#lN1-`6fbLlLNCr)@~;Ggd|>MrT*{;?pr!}`A#2x(pYkl z(NIGmqo{1*6DnngBL}JS43+!wXPLGbQ8vYvPy39uhB;!Vr!NTO&#DgViVtg=`P1`c zieiF<(`zmJ0yus^(%JCe9PeI`F1hUcBg6{CC5TY!}W~8 zd?5!JUHB+24L&X;S|CO02-oF5{a(d=*9nsyee~a>SI&6`MQ04Vmp3zy^K&Y` zQWFP`vVlcC1wd3n6_QVvrR|b=n%&*<-&PD+qn-7wKYuaj=5l9fGGNLt7qM#IEGucM z)aps!@pvK419_R7Ah|1aQt54<-HTDA&-=@ZPVtZHlpv9>ayQGc9{Dd?_04X>L%DK-H8U*3ajIqN57UY`{CmUWihxS& z_@+AT@vcaYLQrj*ZLOh%UdtmJfPL6r1cP@x%EDOd$fgflR9G?}N1azm)ljg$H+DHo zPw~w^g!jgWtI95J@3d|?rCPpY#usOHUF&aY+=%9Nq&k94YNXL-_Uk!>_C2T;TMZG?0Fk!3siJuf=#KVan)r^)(vgKp^=_)g^HV2WCWTkrR5#Zp>B;y>h z`7VWh))v7%hD#mXS&lOs<-2Y1gp*h&scH+L>`wfq*e{(ooUzU57rr2Q#7E~w?1Dsc zC6znHC7WGD{zv9#_t8srXsLbOz;x!IjW zSp6?lO1m4%r6XZ%8atwukcGF56UzgtvPFP_i3@sym+4vG8^4h`1=~W4Ec;JPNq&lOwnL&3HCzk8_Lcd0UZOC*!L%KS)R~ zkh<{s%V{rQ#D{x#%b0#)u7Ep#nv}K9?J=#?r=tqyT3u72AE^T50ntJ0grJU0rCXIY0=e;H$Ix+txC-~y#Mt332WnD*x=*;ul|kT z|K6|YwlBZ^cR!i&=)aHszW`DaoYvZ}iyL)@4gWWrxx6%%+%fdId6K0+vTduryP844@T;_$h_BU9RVqzK( zyO<5P)1VXiAHM3?X1&7Xq4tX;DXrMs#?^MVbw?7$rbct~D!L)H)KR)Q8htVK^Mx4x zHoU#2Gi_-+GPMn#(-5eJ;y3qbmn-Aa^M$}QzoFS86?*N%i=@w?f8-0T zo%S0qM0?{8?ow&Rnw~IfV@3y)abo(mCh{UvLvrc|1o<0GUe&#h8c{}-NHxIzYGF`Q zS@gXUjH*YIvvrHw3D9!!L5-gXqq}Y;G={+r^HI{XkeZq)Y|<7yuOizNf9#d+-uaVR z#RC7LOqKV&!Mkj{I$4U)J!X8|Hn5X}tM5loift_M?=Q|*5#`&3?H5&{Jwf%&Cg=Bg zBZgeYrS#N&m$JjhXHFUk&p@1SqfzET_~&2>`v8{ZqcBJ*NQbVlzY8CD-pQq>r3|OX z=D_tK&r0@zHsYBbIFw zY&l~9j)!^P#2=8=%ziUA0jy|Qt)#07Gth4G^2=pTM&VexakdpV6xr^4`9^*CEQ?YPebB?KAO~F_E~>X0AuY87Q5c zTC%$?^Iv_36$IqCF+O;5@+-AePd=UId|L$Dn=xKw!Exe%aEY6$K#eqY*;q-4NV|o$ zzlJz0Q?WC1X%kUbPqVo|aH~rq^|5EchaSX*nGg56?>VaX6AZdU_?zSPH})G$YfKNn z>w#n!OOe3#cGhnl^HTX7EZg4f+7zfxV>8Jg!hzvv>VsUW2|TR`NqTnEGTv*VXnboH z$e2fsL^M7tb>|8xo`Q?y2#2Cu06U|}9v}V?467{h={yS^(raj7yb1=YFQ(EXkd$EY z)9(LY{^&Bz2CkrGP85BOVMifvh@%PTUfRmr%4*SE>#aYl1Ftjg|d&Awa3`KmmK9>SUP zIqNgKY6gaetM5`LuNVqOw9pmu^Q4GFotcQvE)T7u87|XVg7yXG6mgnRd%9dNV{8PtvE*z)-QFH zU|@DSS}r2<&vQ`OoYsP6(8b)T+4P-$&1_Ugs8mr&k+aAFpGeDF)FQNo&`z25{n}&M z_m1$p63@zu$DMS5v4pPVxa^2${t{0QHWFbq#VhPUl;^0vKgC`}#ZbrM)}reaS-0=L;2*hx-YvLSP1ArLa5b3Kp^^t}1B+r^ z2}o!S0yjeK;w3XVa!IgEgpksJ7zl=Dv6~JSx5F?;HSw;yA-_lz_OM-IpAZtZ6)YxN-Luh%J75UBZ?mwdX1Ip(Pb2@GaI@2i+ zg!?tL(0=KtNw2M8XdwM7r1JFZLJ$sJ{BaYW5rM}%n19RnJ@#&kpd^tNRl~f3%HUn=V}HeaY;j!Q$t7|cL!CJZl(H>MYSvFQwAF}SSvh4L z#DEhKTo5x}o3shWQ-05Wfw9p)b#8Diqss7oVgZxHSWDO($d(44b3pBYwKFfPdA;Ya1^WtZkfe7GI{PQ%Qw>oRK07>uH)8AFW}(8 zbI%u*9SZOp>KGjf{(RuFtLU#KrKpEsTl%5Fo@ZDnC@8s8%%g0ioS2#4m{n>PcD?TW z^xgX!rvcu{jYD$bdVDW28PRJ4M`Gp0n9u+2KATdPd;wWM&x1ugO`7dS(zjq3I+c&* z!mB>?(1iXgGPQGm9WB(<=bk%pvtb3X}}_>4@~I2PId1TAG(} zRmyRuY9OVm%GUJWrj=+j3}ved{{u6Ij@lA$t=lF+%QdG3CO5<3;y8mz8`UAI$f5J+ z^jP#BLMQ7zaeh0qA!o*#F% zUDSju617+Rb_JV*!`Tgt1haGnpXu19hVvtk3Yzwg(&$C?@AOg!D42 zu6ekVu{vqepK$#c>?eh-n1vfB6VSKuvuv^ND6WmDtomS1IUyw=1ATy|uRZ2Aeez>&ryA(4@KWHYe68D$}q%1VbM zHR9Lc(a+cwDF6TpJhc_)EuSjZD60)co>k;P#4)GZeH@cSFC0j^vuXSPJuJg%{!s16 zqBdMH1BQyM6ZbuTw+O@u>-{;b@-OH+%`{g#!->1**yQ~dkDHF*qoHP|B!BikwLjG6 z5*vn+!SUhx4UKb+IOaj!kq6~*N60LWqe@pDkCcc~oRe3HZ8In|K*Nazkz3MIm`$I# zP#3_n6}0=dNJ;Am9f!vbotq{d5g`^!C7w@#ODZavEpC2G2~*N!2aoK1)RhhpfD-5` zEjVDS?4_s~P^+6^)>eJ7!dz-zY6A)A%8kCPiTZSyklX#g`{y$(D&|N3<$Eji{)=<{ z>AiFL7P8#bh*pCGIiYWJmm}^ndr8Wm)o`cunky@?xqg$@&RG1kIVS zy>Mz9B+T~MBV6y9+vm@zzYG@>PoiQbB@UsX#3*AP7HX6`;&2-mSZZ78!=?vsX5v}V zMl*X*LXCpOy6k9F;~o1z7@+_#Wz&_Tr7RE-W7Ls2v;uc+|E}STItF$E{ONsF(&@EO zF|{$9m;XGUM~iOqM|{}Ge>e56E!a6gzVCrj4esO&Pn5`sBRex9ipKo zOcunwzlx=Ou*-ZBRwq-9PXklxn*>r0h_b<$d`n0dwDrlGt_Xc0d_#!isLQqZ{`C%Z zt=^30*v^3bap=6}DLWg+GYLfM*GFy^H2gI7hgeq@B+^Q3XT~m_$NyDOEBSgUMUvMV z*Bi%uy=U|mN0OqWv6Y_^^+;^sc$BOAIfM9RIut6e6_(i=iSWfhK+>vd>16R%z;VHl zWnWO9!s9mS+z@&ZP=(PNLFKuOBv7P-OFp<;`sc1KS?&DMt6Q{MzW7KH$Yn9D-yXhS zx6F%jx3cBri~Hu+7N<*M)y5wSwKWRk9ZtQiO8~Xwg%3YWxD(`MOuR{FAL~oG;!~{z ztrw(BoRDnn{@8>bws?*E|8o$B4)G_T*@a!qxAqs1J^XK2vqtnW10u-r3VjhT;}XBV z$s{liTQ%+Fb;43Vo>eEzlqC0Y#r@HgTrNHe@1@7jYbO8MFt1`;Y51EJE0$74sC7(h zUX=HTwSvC3a0|6v6d%H3(Z=zlgWN2rL)AgsNGzbJVb9OAiiL$Q(5KRay^mB*jQmO> zOZBF8%;U(%J#T;utkT@R(Z=CV3EZKrFCZgQrb;x>IM^yURd2x6ZuXOl9`NNf4adtqntNDX; z-k+fhw5ZjIm}dW|f8*j|2T5ryH2t2zq(&xS-5g%s?Rr2W@ z-aTziSVt?Tm7xSo1BP;XvuL^}PZV?Oq8%W zWvo3%Q|x9t`$oyD)%S7Yy+a)Hlm^b^)|_ZvK=?-QH%8^5MK~J6o#|z=MRo3u^=zyx zd@J-nhvq^&2LF2WeG4h(XPrzkUz{8f`6E1)yjQu#<#NJK$PR9ADWrcJUoE-hqWp+u zwSZ^el?tt_ zE(E0#Z|$l$xi?d}Zc0vbCT(iW35#%OS1k>Tf8>3lU|WmnXUnbsSU}|WKo;>FT|7pi z*=Zz70d1>bekH=zOE3Y7_R~C~;={nWwDOT;A9n<)3-X?`tqXA)yBCQnh!ILU;u+(G zxMYD$y?=Yry^aI`*Z^d(Mp&jns(*YlqzNndN?4FvLwX5$`*w)@Q}ZwA&V>V_F|(O`}$h`D50oJV(C4ow6J++h={Ss{(%8O(!rpZ9Wk};< zRUT>5aNATl^6ks-cQ%!Gj9xeQpHI7xD44(@(vpZBmx?!yE8@T%J8enHDhbz!n|#w_ zxN$))MUo4|R<&BJo*AUZSE!jMfq?`E8}Yl~E*d>u;PqZPX4y?xq>?Ws%7!Tum#cn(mfoKop28kg=zkSCA!nkLE2 z=W%&#o6I;K7vQl%g<@{ZB}fZFo-I*NDyrDjgEBgfIO^-A9485yTtVKdu>qt>P3@>I zW^SF7QdfQL8Ve-I?IOw#r^V54f62e-X&BP@eC+!nnPYFqJ^xwu`|IecuP;rX z%TKh;R(`{4rluw!QH|+L0Qt2QL%Xb{MHQt)1ycd3Y~R;t_!u=}$GX3q2vg2*)~kgM zP3DLnb}-iOAWqi*w9Fn#^iWsi-49`Y`!Q>;9ha@LS+c+wQOcq6N9ZAB2H0Lzjm79k zhDQJ|Q#OvqV7R9&ZCbX+X0d8rNaF`7Yapz0u?juVrWNz()E*EPPu8>CVI=E{@?-Vb zj~>TiXJr9mAq3#C=9d_`mBV%pHNTM7Xu@jlvi)o7IZnYxF6^K0CR$7}tWD8wE1#Tt zU&$^xX)^0Mq8|H{zmTV$C*(at!3tMBVZF58Yf}cl<9YRR@`h%H(&mfkGIu^qmkTC? z!6$vzhQ~=o0-fbDHhce&kJqejQ|VrOH@%2eHV(DsPrrGNpY0sie~~rOt`kPV7*5=? z7R#7s4bFj8Ub7H43TX`uz zWc;wGc+)uF~k-^fy6 zv=@OL6*bNN9$j@Go3+0?EdTACQr~LcWO$tb+$5xt=dDKW8jgZ(Lrz#t-K;q2Ay_~B z5a*VS1`FQ!S|fP@iIxMqs=@d`OYFdk zqO-Z!tLJu1Wp$koD@KL>UzESh#lGEEW-)Kc1Gn}HMUa(FlVYp~fbWh50R62ibrx~w zH26gWT*k3k7*-~~)iEN~>;X1$TWbXnMTF&hK7&;yTYzS&QRGTp`-{jGkaP~MDYa{E za-}O(;%SVKbrBGN3&07=o2Qj(R`t7Ym+CKAkK3n;W5X-Wz5VyuOV3hA4fm-|xAc7Q z>;^XO+ty8@Z=%?N>?*94RAXg|#8LU=u}l_?=}H^od}1ZgR#lmq%6*hkNG6ih4)AmZl1pG;CKZ;2~W_ z1Aqa+z@py4rnad$L!FN%ggOfH+i8*lt!>7zmdOC)?Afp9Y3(qKJ2U(L)9)9oO~)`< zjHbu?E5XP7@6U6(q{|!hBR|J^=!3er^B!(LrNW-#SQ4ig?1}FAa=`12#!oLyKFJIT zE1K0E!9VV>mnVh!n})%%m`fX6BaEqw%vgn(_@98t=Cv)rx)yx7$=Q3Y>Q6a}G2yMb zq1Jt7guQ`*PWmCETmC<}UO3$TrmNC_9(qHj)^>B!Ub;KGARGRPI4My##*W_hmz~X! zPc~l6Rd&K&whm3e4wAWU?0#lB+s~72WAwY?iBh|{w0dO{$z(nkMawmpk!4WT8Of{% z@hqA^K}mw)=|rqO9fxfLt~#kvMV>J$O0KfPZiDDe;8#Mr!v;l4=DUl@qS52N{yXp8 z@Lw+r{><)J6Y&-s;Il#Qd1|K_Rol{~h2PLm)`V^>E)X~xEEzp-ozI1oHw()~a&q&v zeIz3|n*zG4lH#Vn_Ak9Hw~V{lp_!{QVweKP6*p{9efV70XyCW=%h&JZ)4ffgHaS(~ zN_$LtfhzJiu`r*Q}|*=^SV%P5!na4k2dQGej#bo|4!#S*d0$|GX}Nz_Wo1+^?LIG+|c^ z-EdjC{hk<9xMmO~{uGfs#pq^h4|(XYl1qQU2;V8cDs zRvWif0DE_fg1G`tpevKuAmq=0IqhS#LuBzxI(;As1`8m3$O^x0WLb)= zCn3iD5jnyggUJX$)))|hT&Cu6RJJ-%f}>06bD02KAt30PtlyzBmf0_zmz3859SD%E z-D*yjylh8D)(D=r>%e9^o57A?r)iqf=-<~r^+$wFheO&{w#X=OYbPB?*xjnuK&L9} za|8*TfJi6#^n~eoO@}tfAJ86ct3QG>XGRT{y}zPVDbPURFse7I-S)nas^$EhtYz9m z(W>gHtKb_`wW2icdX+l71wNo*o=s*45#ZmQ#$wcc->0dr^PJGPo(+ypI!>(h%tbEM>KJqu(U0JYA zS?D-)oy>3DVY?LEUF`*mCRQI!RvP=9vuXI^@K3;$3T@*2xPwWt_0c@jRf`iej{z_R zib|t#yBdEUv{8cE8i^=2u~60?z6BHZVxm5cZTsFVI{|ZOQi*T|n-b?Ht4@~&n{pCD z;&Zf#9&fff&+4Qd+44J4eFvTVi5;2Wt&goCW62(0Yk9qPZBDV2`&%{jaEz1!wOg;N zXBbDN`ZOKd*Q2BqV#ABKgO{I*?_pvm5kv{)yP0!=9e{-obLzjsx<$d6JUN{ z51iu_aVPKy2n&tI;FV==&xg=ZS+6vG;zNT6M#XHdbt0WPmBIRb9a-n`hDwG7BH?Skz0=pm1zXK;v?TV4z`scE~d&!y7_7N?Q6 zm4x5gS_!76I%JOa(<2(~BskaS%(gjfgqJqNTu=Hu8?)u|r7AuQ1}i8dE{P3A&KJ$X zV6|P!WOV2&N*up5T4{cH=}&m_xk6hXN}LGe6z6?NH8CdRp)c*#r_E*wTj2LJE_d6P z(#M^XrES^#8G^NX6iP=K@FgzrZejb0G`H^z9rm1U^@67YNaKVD8`lj<_de~+g_3rd zGStEilY?++K7l%kAU<~)bJ`x8r?X++p9My7SQ;F~Ks^C9N1*C9ja7LU8ys@=hcR#k z=sF@k2Hrc)$s0>>tv8=OCKb)st``?3b@~d(um~-yNII~Lv-&fC)23V}Dd!|77NOHd zEeay5boZa0ED$06U#>J#2qE)CYW&J!a1qhj&F{_;c;6_t_0LQidC!|#r)=2qrak9d zji#vkc+yq&ZFR}6hbt6LCSTfA$~Hsl#eJ?SLoi0#)H#m|S&@oTfe5e@0Bm;qNRo0H z+2r>biS=d&`c?rjA%i<$URF;_d%IMiFx%v?B)O5K+t2^>dlC0NJxmt=QNN$RIQvli z_(4N)`JLmD-_9*p9!YihSZV7&Tzbn3wq7_j_fIgOj!#t7H|gH@2lqJ;=hx>2`!x-!S4FPv z)af(UC5aj3d$ z)HPLS+thp$!W8pcZNg24y5AHNy__;aQ;FF*Ihc7m>5ey$w0aid#iZlELY&%M>E!mh z11mf}O&7Jw(ouTg7$0Ol~Pm6&2=sXq?PW0L_KvaU|z!P@Tm5+aO(3){!m~AuWF7O*(A}Hz+4aaW}~S-syfF zzAF~d!*?t<;jivj-C4S~efkPB9vs;ATu2KJvKIAGXB@%!3QA8Uu0!c3%0<3oq)Elm z2P60iNc5(FBW4G@$tqpCMS1ZRvddzwHq}xZl?qLUX&SLO&e}X2lP2Ss@x~^NjfMtu zgbzjSJ2CXG&*3;f3zhK>zDZum?J5S7ej=sJBQd(-+G6De5CM%Tg!Oq1a=CcGv}Smu zSp5IT(OEw<*>_=_(TpCAG>qKn4(aaEFr-H-EubjfwE?4%9Ni6~bc1xOq%wyglg>wr2YHN&81Ht?v{4wPQNv! z5L^ZYvly;&wJjDdJ~m!*Q{bwzB-H5bQ+m=CRz0(caTUl#=|vxgF;@*y+87rl42JRbXv*EN-n7$0Nk% z1fDdHN=?%KNG8b6 zM=G_(Oe{ewsQ3D^XLb@R@BTfLUTYLlX5XxKHe~7hiDr|2AEmli;36z7I52vY2{cMe zK$p6~#0Z8r%NMR6Ag3OZIfhe9?ui-@0b(c;YT1-Tl*|tUv&TB$6${A0kYY##{*gh~ zc<4F#)tgV;$P>U|QTdBk)&ct3xUW;%RB=VRjMKJH^RKvprXepf&Q3*~#Wj9~P&KNo zaa@-r7QC!1P(b4(8%$C#_~N=P2TT%D?IFO4{3L~NQJ*3?f?5(_9&x1NI2Ckk0a>Xo ziSLI|=K$2|M-x+p*~`>nQ}ARvZKM^e!g-F2OEQ}OP}65^l1<_fFRpF7#UyVY&jVj- zRxH98Nn?_bj@ZC07)^pYZ3Sw7@ay)cV?v&QjgZvO$ul#Fbu}n3#B%zVXw}lJG4BXX zMGS74>(sH_QF8kB3`@9O(1Q78`1P;gZr0qJ7x00y@zqL`u??4=$^4Wc1Tr=$dTYiC zKJB+9XjMEGX$G*WAsC08OZvOktuOs#8acCWH?z67a0h^BJ5UB6<{PW&lvL_LqfO?K+IiAJ@^1II8?{73TTr1UVHQCO(ck7>uZ#eXp;X z^Uu5dJs7iT^Ly!gb#56n4r9GR0%=keH$95J{=T_)`$7?_Bc~Xx5ZP8=VJfwcLr1Am z*$fYnq*Uz*ji#lU)E>X^hxf?#>SJg#qT{qz*homx-N)5)_4c^54_9~^&Gf(2J0Bh* zE-Wp`=h`!1HR&x%z&&LS57}r0aIiw7Dyrv;vQ&ct+$}HKU$q6H#9N((Y z*LD8JtN%T|IiMd{GjO(07FX#Bbz-s3^Pf8;o-AkNSI?FNff1s@k?f96i&K%6JUBdN z5otLFG8JvH;a=x4%R7q{O&?IK`*wfh)|^@m-5-97eDB^F12DE?gc$l;a|teyJtqFT zT+W3oj_jYXWcAUpy;-@O8?SV|1ubmZ>%``NW}?2B)GMn(9)OVKobEq+x06T2d(R8K z?KFZ8anBmP5l`X=kDd}4ow7loW6$ft?;HQJy~=|B zxA_!kl9y2D`lW?`xy=ND6A5dY$>Mp4~v6K-kkT&0={- z9H(9`veH7VMwIWQe`DGiEljs!e?Z9V#kH~Pruhu>yN`<<6`Gm=bzo9vGXgI zva1{H{zx6$KjT=smwLs%us2(BlW(FX(#yU&t-Z_ct1+K!3to3P6`=UjwA$cV{8~`> zEi1g&TRVXW@3e5nu7NL3jMF)KYkA1V^UI;mDwO>dC*8$EMx<_)?Zcp=aEPOyRK+1a z7$ZvQWvKK3>_(9H&K~kgx^uaj_r!GJHs3V7Tv_((dXK(PAw_e8ISoj4pV&Y)Ba$Cp zV%yl9BN)y1K+%ijY9A^&WX8#8?o0MS(GRzqo(I!{tjI+^;|owtCa2BhIO4;jwbBDJ zsCsFrS}x6_^1m62mc3tU#q#T09mVgrav ze@1{Rl^T7vvL1tr@V9sALOxEh`on(8&jK%CZ(}=1dDINEjsUvg!k7AGl z)aWuT?(RmNJxHH)gPtr0s#k=r(kMEs`-*CtQEz|$;vB9R`E3IXV!KS=YX7!QaO2vzk$ znLzRbb94b3F%;1lUgAKUk*!)A2xN>g6E>Y%vST0_PXeuxYIeT==>HwHmQ zzOG$=8TUYpE%lx9RxlKyCuY!#8Nirbq)qFhzmuXhWfneYr;3VTqH63j8=88$`iBIa zTd{1IAOU1Yj9rGctziIA7kqrrxk<9Wl`~of7K5DP9O~gj*%&bLJ*Z&V4tNX!2X>6P zn5RKOuaaQIYi&;8TT^$v4{79575HE~JCng)!y9N8MYady89^5Q#4?4&lF5=XM784Uv#3^D&U8 zYP14dp|VNhOIz74J6fOObfyrU7|Dnf$YywTqxwm1@#<=d)%etqCaHmgtlT41{3ICF ztN4tEKE8F9w5d8ymC?&rDE!LLUh;W`rN*tb6}YJGSP4o4gZ<%?7$;`VEoCAhcO(cn zl;{l4)1Btf|K6aF10~G+Rjc}ZN^KIiLSd6h4@X7gI^E%j<^*gtvSwDB2|IK7fB#Id z4#e({$gugbPoAQsu>J+Hi)&(R{cToy1YkI>QTZL|%PK9Ua&Et5RAE%CXZ!Eo#>3}< z?fRFQj;iGvlWgT+UblNVUqJ@3_h?7$#4UnE=)FM^#<DFZbe$y`#XeH1cX~X9h1~nQ$+Kfx!03TPL zYhett=gi+<%)s6oRM#&5+w@5qaj*Cx1u|}Ih1o74rVT-Lh_Clc$)ttx?7h~1jT_(} z)gLgdrq0H;Qn#1>mY3d1fU;KyI6h{ti794DG4fpa^s_km=BkJ!Tm5H87-2U)oIi(V+`+^p)oJBld1$LJ$ zV%~hUvlvfI8Rv-8V{VM=^duLZpiW9LB2#rBVPRB737|N=(BV$egjw`M_@&v4wT}}j zTM#q^wX-ZSTNaE%q8#*%V62a!zfZ{3MqeH{b#G-?^A~w%v6f=z5L}z{?~mTuy4;&B zQ?J~E{zPQok52-R4lrjAjJ80aHvQB$jrawNy;G_I&+^LnRA~zf1w?65$&<&BkV&f0 z_|TS@K^@@^g36Y_(GH#&Z3&rN^wVwI2wMG$WIl#Xb0bJp$HV8bn5gSrLq0)@$f1R} zM18!hZZT(F+flMt$sS*t#^QA20!l?Y6xI9oolr=eC8b_L&7TR*rIvJwbhrtJQ|ei7 zl1@&x8Qz~cJsJM2vEI_=$y@Eg3=~bBV)?A+XtRGBkyT+?pGIN<3>L?cXgD$-t` z(=ywt0YHPaH^G<#TU&Bjn-jm(zNB$M0x=@pBhWSwlvR)h9w*JgPswrAaJL9~U-q$) zuhA&FSS3U)T1X6*_5b>Nnm~W?OmV1T!sJtiJ6aR#A8ft2CdBf)y9PcG@Vbr45RfFp1CyE24 z?VN5_nslbNo&q{;9Zyf*)_?QfB9!u$+mZ?fWx$)M_mhk*>iexE-_%*OoEZftNL%~N zpml9n9|(@q6uZ^ZHuB7A-#xGA1TS9@+pjbuA9$GaJ=O7Z5?tT1b#9YTcT5g6`nj|u zeEgDfJfW6lCt$1BzXakcX7n?^xQTgp+Ne-lo*AA*y)?+7bE8>Xp3M^&{n~Do!G9f( z$XE*Y*h#HjvQF1k`*FpPK{g&k)iY8iT9(09QeJD7O4Wr-y;Y>$4l(59sB71IgekD2p8A{Mrw=r|TAempdqqDvCLml>=-qe^`)X6kG=N$b? zFnCo;A-uKWT+n<8H-1xIkn%j2cG+{t^k(Zs{if_-^ou>^ly{k5(~D4bX$_{NgW=m8 zw}8Eaeg4}C$b%vgpTt15`?LVQa>QGbg9n;cmhRwAvGOc~X%3lv0jgpIG=#9OnQ7d| zC`9~XoMzzR_Se**)if!~5e;8-<(FU^^MMvI&D1rUVIZdz87(-Rl9QbN^aZ}Nb0o59 zXl5E)PSkL1jT&!^eNR-c_CHSGEI}>SDjw z$UP>m40y4SZfm24Q?(lUBAyo_(0-mWC4s$-eXm4rEk`c+ORfT{cSc5Pv6FhF@d$k% zYaY;?qXV8Mtd&s0V;wX3s`fT}a#Ki&;+G4V&{qiwXhIpp>D+CRKUT6o-=NFhW-}Wm zm2i1{Y-BSEcIC8S>LdZnZo^Ip1e!MLzF~b0NjZ%nR+8 zFDf@Z(;&MZy)8mpOXPY97Y6)ekBg}JVIZ`gw(_c8P=MyX|M0^uOsCnr*&gx^;{C)W z=;k!we(Yhh*JIyT{tMdpXUmW-sZ{F2JpKIlBASOt)1V{-EpW+x1t)h@mpFB2D@ndy z6sE$ZR`~Yx%G~-Kps9Hc`j|Ya!Z+mD=IQjPj*-ZmNf(T)hQr5KR z4*>R(LwfSe1)N-83deP4Y@br18on1D6-&&yKYm$ou0AKz*5qJ6Z?9+SR9BT=XH!L= zx?$2M30l?0Eppk>05@Z^3=_3AhI=I&YAQ+4y3VQwJt4-(vCI}s&kKPJ&3L?nGq$X> z6rLQ(C1>@Z6;45e#p~Ze70kx2dTUnWsIH6E46o4(|ApsAeu{m#2r=e&zcnx0X7&z4 zoHE3F96X7a+^`5LE4BN{T86Ef+^PVX#NFg!zJ@poE@tNFmUf+ZRzj1FOq~!%0B5RY z)G-H%7*P5Z9*eLFgkxRcIWDdTm5;!s=gM~J1k5dv(Cb-_izo))H3q$XF*W(f*`H z1wrK&4bUSl%t>?ne&M2we51zU9)r)C}%h!(i#^^FqnU$wv)LU zV_Llw02<0x(EOn_#57!`;kcKin}D4`NR^7MG-d8;J*05V(t?*_@Hn7?$WgUe&omp$ z%3_Z;(-|79E^PW6jofU3zeub zvMKfyXoOwXe{DZ*v{iZUwfxLTTc|ZwTbM^DvE^sZJM*4K*{n*=yY_u~8C9`)JVMf# zA0ga$D!=trz_&vrJTK)vuA3g)s4A-XJ-6&2rHJ>^tu${3?t50`ga#$$H^LOiWF3&& z;G4}~Vxi%h5=!fp80Q01hPkaHArCT(E zD^B&D@JJ#c)Rw3oBc9;Itfu2|$D&mQ5|dRja}S_^^Fp z-24#Y9&Dn^q+_GOI7w{MN}Fn#e5z1a!Q3fd%)3@;{{HXURV_M%BH)<%QN8wRZf&x~ z(wEIe5*~s-QioI8Tq3=b2aETm23lL%fjk2M0YR9uGF|vX&X>A|^KLMrPsL6G>)8ilM`u z86BmDJUtI%x%{{&B2_dz$#n4u8eY5AX+9!WH@3x#F(KYckE&`7;jcW>D_$n06Zs=u zQPoU9)lE_fpbkVP$>FPdn*_L5w?&i(4)m$KOD955X8uLD)4pk( z1pM!vMYhta?|B_U&h3QzU;ZI#STDRB_>fTOaM4`x`g!=$(P4;Q%_AKi9(Y%hWd`mo z;P8z{X$YI>5sGAS4}MlzMB-qObL)psL3l7I1B-#(I4Tw~^F|q(P!|nH${mQew=k@oWrmol-O(y!oGgKc$6iK2uD>_Rj~{{Mi5UCmS!W39$N2 zSNdSS=2B{581St%8QQ~3GMzwU2q`j=YQ1Uw_W1GUp1$-c1aNF0`CI-o7;#X0=Z zzAOFQ>syz%`UuLYZHNQ)KuAGVr?a(n@rQvS4%*AK&cl&L$za6QlLzr+;HExlA<)PNcN-NML3p0H|jN&e9OZr#_}6v zX011oZAa5`O->^nxvEt;`@8-gx*3q;@7+rcA4Y zpXsS9AH9q2Y-L_Zf1#ze((bi#!lyS$a6!d;Wnfl|&VnK>^6AzpH*=c*t*X{{jHEmp znC>{dtxoYkimzf4QN@*Tudq-~r`&gzVrIC#!^5o-lNXuB>H)YhYI{L&9+PrO^p=v5 zGfY_ea(Oq}6?;C&B@xp$^>Zv?qhtPUZN)cxU$uLZtQ{J(0ev7d67wAVI2px1(97|Be!NFF};BSgQ4eq z!&H8jD)VNrIPzH&YT=*PySCdJ*_0GpTHsKa^@^!)+NJec{!&NCeuyYHW5MPIlnwWb zteG%{<`|GNnUy$hKaHKMz z5)O~D1qH#GP1d)dsA2z&4mD6VuOyf=zbmYzX5+(Cr-1YO7ai~Q!Y1p7grmwfG?aBI zmBnhJN8hX+5{y(P3e+2VH>PDPP^g!`Hahni4jiznVb=3Gg?5UqTH8@NopGGzNu0x}}cMi5%S@I(wB?FMEZV32T@!GKdBW(YixGu&DCsGfwC|V{Kv^a0%ozpZA{#Q`I z-Erktw2XQLvHg^ zJ&ZYVCWml(C3waQArUz#*E)h<6jg=5b`2|qNrGT&!)Hb|MeirWca%53HH&n2hv$FV zUr#8i7EpID{WKI{^r<@?F56;oCHTg-(fm}6NHrj)CaNCW@LlBJX#$KaxsKvg&{gXx zs(vTTGlm_;)P%{=pf8AcBl`}TSk8|W$*!q+61tU&nn>K$y+hXQapS7i9@@Qks`HH= z;-2Lw^z8HiL3ozd&%fujV1d@x%1t~`{U2x{6`dqfjLXM>^wbcLBqs@#=LGIja zmw{8702HWO-*uBBvCmh=D35F=Cp>K+-=sHW<5PU?VQNH2Svu5<8^F6T-P<9ZOJ~+O zGXEv1>3fXiuRy;z@;UK<#(+3K>n(x^=do*Dja{*&Kb^!S=% z^fp#p2>QQkTbmSkFbr3h#zk!G2rCVzR6Aury#& znOa6YE;x(~#JM6W$N>O{9-Bc8>GlT#s8FLY3==;9R$D+?DGR3y;U+PA>lIZK zb0n)e{;)FQ$@I=j>N4snUFTs&N##&f_Uj;O8j8it3Fk7;k)L^VlChEcN;*LXitO3w z`8=(&1h1KX=!E;PVyKiyj`y88>U6r@cwmzNyPWT>Z2IohE*$Sp=M9;Q&b?f5hTPXE zkj}xgX#FVm(F~g})pfv@Rg+b_TD-Vt8WyB1;^n~xlhy&B2_ScsQ(7tUO4Q4Y@enC# zXbTc&UMsOQHBsN$_doq&{R_$1`^n~aCWjeTNU6M&A}l{;OoA1!e&7+de=fu4K&~|f zBAES!7!x>~JijXv9Fhfpa}BGhFGjdOuD>%wc;@_Zmc2?-Z*4nI=M*w^d#6nxs3!!RSesa~9867id_{ zmCGRqZ1{YqX^JCom&roFi&FD$S;fpjIL=zFDPWdM*|HGggjCHCn9bb?qI! zSS&)NRQ9dT_t>Lz#Q}0zN4IuX9rE)3<{dFf_L=fIYyq1O-BR;RBw>zjxoWb7RfS6O=_js%BN!g; z^%QO56b}+R}aDj9uH4@-}_%Yl{xg67=97=_Ot`JWQLuWqrcUI6}*w+y|>Xn z_9PE4VXAbfXFz?xV7hD1Mzl}BX@0HWVYL7WC1@zG$kkFd^0kf#iQaN0NrqLm82t2| zXx{E(&(GyVYBbVyh#Ta4M75t(= z=8FV_WPlB4zmQEg_CsUV>f}i{mT6N~B?dUTiH;@2>=YV}(u^^e{~T6zkCk~H-mVrN zFEyTxG?q^m4;)1Jc#mUt1->g&hp9%$k^K=}h)%tB+%##MDvb>#++a=gGNQ?y#DIBY z%kvGsXR_oaA=LL6pPCpxf~93S)c1?&HyNx3FwJ)ye5yWQ;i*#}(FVr0G+e8*stE4; zJ$!98HG`O=x1;fFu2avo(dS)co<6kmA}+2WcGI;U9Nu+2xqt`LnUzCxzZ%$$%_6G^ zHMu~7PJ!fx!dj(m3ph>Vs2Pn&5)izdcOCyO6ZRqOKm8sPJ=OdF{8{Cru{(Btbyhre zg`GdMWA*z1KHs^8Pc;|_HJKaSPT+54YGOMiGU^LA8~bh4xKd~ zz`>Fs8=nh5jHNK!itL@1{yu?M=NS2>0>Qf6!*i>P8Ha&M`*4d{g8PS<MHx>se8v zcSlBiT)nelzOn(LJ?)%V%prpx8Y6G=W_~M2{|U4f2BM|!1HUWCTTHve+2;AdUn{)Z zKatdSKJ|a_;)8~zTgHlHa?RCHb{jwyAe*&Eu==2q9v2H<&Lia!Zre>vV1mcgi>TEj zS%h&~R$0J!+VKLaW;w56j+<5dOysgn2uq4yTz4J-0G#FTrMm2DmEV?6FQK|%OB%ay znsVN@GC%-@lD^3?_;@eQzTMpFEo{5p@YeNHCSz>`LK=Npl_as_STS?S%z&4*H@N^a z;7OR+9nG^Ff8`;>nU}#mJ?y~@N#BPpI>xq)&Re86fig&jCjW+pPE(m?TX7U!2(NRZ9dg*b-%=Dn5$S+PgG>71j% zoV9hh|LZuFicaw{Tw?OhzG5Jb5>c2_DbKT~wy^pKgni~7y(b9T0PQ%V-k~M1tw2`Z zpqLnt_Swmcj~164P_gQHxrO>V%gZ5?f^n-^8TiCohd<=rV1uAuE_X9)*(403_rZ8~ zeM*^;L#l2P$>qa(i~(&aJDFY+gio=P_%|xlwqFMv@FiumWBl>M=!bvj>$}b45yOR4nRVLbpZ;t9_p;VU{0q2Abc|=qe}1*D!L5;ylz)+3 zL#3=oNi7T_AXv*^c9I#hI~g6u5ft1C$w`!aNGYPH%YjtDbLHx)wXh0ewC^i=*WH%d z_Hg2f+3_^vn5TWJtDNUWrsd0GMrA`SGhZj}hie6JB|`aDj}`xFRguw4*8x3D(W%7U z!(gQSd;2tS;-Kiy7zdnIKhT4s9X- z>GzPpQtO#g;>E<^c!qnYlhMYL_8FfFW~>|V9Z`)Z`v^OKl#)rlQo?a?9t4vuV_{D z7IbW2*B*L;_BnnTTs0N}HIX&ioYZ-O5mH|#9XQ>T4uw(VLm!;#BHkyHXG`bRSS z*>2Qa;xsDBBKhTW9zp~}N|QYZhK}#P4%_?0cq%wuouEwMLHNDUS8?i7`L;Y@4@Z2=OvpG&k){m9HO8je*YFdPTnQ2d5oS@YT z6(gq(U%e&R`=leE5yi-?l-sJt$nmsIA7G>rUWFWs^ z9t$fZEWrWqQI9^$)MS#@sEJCOV+l_qWfPGQc~eh`v!ODG$*9)ztOC^KX~h*Kw#McX z>^9(88$!EsFW`KAUu~pMVdu}m$ofj5Q7~;IzPf}2o=#$YE)`-nV^y?YtnwuAdo67h zB^}dCG>HHfK$%VsWdzwNj&%cLiD_-r+a2_;L8fW3T)4rdEW*U!yJO#+Nm$3|OCc$^ zIf!++7L&Hhu@qFUDX6~fOrd-}xu`TC*(0j;o~KHlG}zkszqI0C=YGty6bHuPYA~L>^EQ z9q#wSy=@GPA5o{W;--ZpQ)8e zjLGZq$V(s579%$=@LMEPCrp*Clp~vLozN?KG9cq+5t_dytP2Qzb9fdS%M$Wwf|SmD zYFHC%l%$sWBW!SNI-iiGbwCAeeQMeiyj{l5p0Bv2Jqshh~B#^sL7{lf7 zdU!3zrqcOthk4dWxQLH|h)|SV&^X`L8O4y5hfTK{+uL(p?TjZw*97^)`mEO2>?+%{ zkNVm+c0?E4nj3Qsv!(G<{mjSCGF8%Z)`5Wd+&Y)~P}#Nw+le7CN2Oi3`nn5f8)}nIRR7qVVpBJ0X`gBFUeM?Ah);=j9S>Z)ZR8@4HW{)l2p;XlFRa&7or&5KZuy6eg0}1Ux)YM;+Tl zZ&H1>s;@InIXk)t`6RG|E>XFK(O!rY8+)|wig_VAvbc8A1?i?Mk0t3QJEEeWR3?}< z7?DZoDozuOC)H^Z_|*#(=(Gh#tA;&`cR&qUir-ks5ST$mKdC@OO*x}Dis@)YgU12U zrFs*W7HV@|B*Vpys!1k&UXd)g26$SXnkHnbG&p4jvRr|Y_>n=;wU$Qo76xkB-m2og zMpwq)-iuH|-u`IPW;}IM#q}CYgfTQI*jY_CH>nC>Sm`M{3^c}F4`*j_CVMR9RamGu zmf|!x8?KJN@Tj(;zK)HTGfr|wB4nT}O%H9HP5F~8WF!LrggHz4{#;|=4R3^sTQs=I zPJi1x{;5E?-l>E)^0|Gu^B`bN`cU#D&N8ULFxqPTB*zPx%L@ygBEpG2;c;q#UYd6Y{^>$s$uYY zx3Ja7pK@iq$9h7sENKPq)#MV8_p2`HQ#e+^KYGr&r)okt)VX~B&~)Y~Q^#LCe&Q_G z-sB+4Q=(jd$26NLXd^+$JYDM`@YKF6eufKF?&|!gj&pw`d8>8$ffrkmZ#$jEj2|^6 zx3Kt}Limo`vvtOeS%gemr$m=}dcV=%uE{1bS`qqr_aD&YrH}1NMGNv1^CsiL0goc9 zbDnlh*&;7Q2Wql^4INA&+-eO~%FH_#?D=s8lgLcWWl78n)T9(#YU61tY41N3>zSaN zOL??f>l}Mp*<5OLLgSPmQv&DqzXKe$xP@a)bLm}(?hzv z@ROmO-q^TvLl`EUlniN~w{+kGqqKV|BJ0TaqTpMg zVdCF^f4S2c|B_!>IOAs^0;pr+HC!H2Ha zP(^h?aoQ&M^VVmE;*aY?9*pn&TWe*@9zUR6V@Uvi3n`@Or<@yqWEH?opV}>|41HHRDKRfE6S`pr8=5_iZKcf4qg)t>8`U%e$3_(EGn?svcCAO~IRPFA*kW#L>`3j6!P8hqLMI{nD0N}26gE$< z-@Uc7rSmXNoXFIvg;%<>be^+525*N3Nq~4N5P-?qVE^195tY{B=Ugd5(j5$so}HMt zk`MLT+E?|3k%e%t2ypaQG|kh$|Nbpyb=tC3P{OlKQgKeTUNs5TiPZ{NkWIw#rIs)x zRGf$3eiY^96k$&@hw!nX^ho0t9}u_=UGN&cUNni{uJ*vy9g2J|Nn?O+QBXUUKMj{y zu1o-0Et*5C)!*>{l72Eb#lQdb)w*6~K{)(SnRKo}J)q06Wj4oR%h|dyX9*>Or=2ah zPS0qb$Rm<=s8Ek-i<>It6hyI7J322#tim%VYaDJSiNn*u9cs^+^(B3rfI4g(R7jk` z1#{D6Hgbi`dRP@1Y_4K(t;wXnppY9H>vu64toZdm{az4!(|@L@OE%H6`x(m*&HKtq zaCME>u7sC@^)F!WH~2z?dQURkY!Xj@{hBqGwnpD9DvoQ7+kAgz`x*&Qe2K8ch$~rJ zO4tTkk?(;fRx5ARPPFHcNwR;KVSYstKrQ^7qnloXT?+J6ob%iq{vEezS+uV%VU?AU zp#~4PqJaZ^M5c1=tQ@h@_6Prwv7tV9El+9qtD64cLT^!}ufhISOTEe7HtJ5pS0Y5r zxbW%e=wN0pYVRieB*<9|&oqqTv`dxClY>lboo>b%FS?#2;QgX%rV-NZ3v}>A#f?G! z+}Z>G7{A*PfD~0}D=k;si!>B2eBxb~TrE7Rd)5T@Xt-BO9M2xBwNekl!i^ujB@@%8 z(WTc8?-}r-{%O4?Yo%!YDC*EPmxPwD3PegY+FosvT&*_}LdN#|B~`|XI7^Emg=IZR zUHux5(pDA9fIVU*T4Lh#j|L5G?ti~~0$P-FYe4j|*`6sde;s|BZ)jfq(tW@C=!Vhr zM|QWzj&G-bO6s}`cFCy@AxFx3&*KE!qz<5kU`J|STyx_bv*|SSuk-maz=j_Yy14Q| z>?*jdYXBg=2isk1KPTr0m20Q?l8%`gNk?|Np1RmW8u>$YDGT4y7ZwFU1Nz_kFGXK4 z=6@bY!?e}A&Rn)qmW2O(`)^;Mp%13~>8GqE8z=a2tM%}kd=MB{Y~+~O+av+DfeIpJ z&@MM+v|VZPsnGz@7fF5~QN2#LcQgfaQhce+*?Zz+JAdf> z;JjOd9~i!B8Nl7?D?$7PrS5IXlYO+!oWlZ~W}7C}v%jiNG5)T~dOUhnexJ)rA9Fs` zHh8I;BpI$Thfg6TAmaamt*eJrqe!0Mqok%_@*CW;V!ofRwNt9HM8rVRd}RDIUIuib zIlHwncfNo_j#Y-Er!$63JKaHk?qu@@&kTax#cAuGN|ij$I6co_watlx`g(Hi{d#U) z_>w}`xe`j9W1mv>xC3dX>YN_G4Vfi1NV56ysoJ8AB?(w|PEzp?Sa#!fVX4()P;}>-;RDT4l&C;z&v>f#it-qURSNIYvBV9_xgINE5LGYcy3#8S=@1|wC*HY`F zt%}=}Z)a!~fRhiL{*E=qIA-=@Date}vH`jz6r0{i5F|ismxhR&Y!8U%Z2jUPeN6eF z3{HaM3MFN=qpXQzj_%7AIN_9cNbvX6V_Hn*PCJ`Tt~pw>Dj?ae=h*o1U7HuOuRrC> zwX0NF9$b3EyD%}@Hmq!T6-(e#F8T@HGFj=6Y-D3L=h zFG^A^9rHZ+zMl4=34NsBFcAdSjT5Bn%cb*$f27_Ax77s~NO*&28A3D-OHfELF0uG0 zDpqEPLI?wNM6J|6jl|AMz)(qUOocqfI8hvc6~lqj(Y)YcRc7wkyca!NuxH=vlh2xX z-|j14x%MW9YieuIm~nR81|52Skc|d5l+D-ane;=@svFkUHZ1y8NWj7Ho}dh2HHblz zJNnC?gLdSqjfx^vaxlK9m|fK zNTW{{6Av?Tsv%)iNsiTE>K&tOh#qxzowg|?l|#}l@PiQKp)7m=z2nmi)Vx_4zw7Gf zb-EC6&F-rDdLYBCn5@mcW>244P33}~vWcti)GnEp8UebQQA<7glmck5~mrApGBIhzL%GY$v*;!uCk>)`zzm|O=UzV686=^ImaO5@0rD0do2_AVLl4Z zX!5%FO;#=K*$eG^7{#ufdqqCq!){XsJfaOLWpWN(t-l8biq~X zhtc8SBdO=XH*uYPewCSxsn$oIq%K$}CZhwmsE5=3&Gi3x;qV5WQZ?;0l{md>A5VG} zl%`;acJ@(Khk`{=>N(|4Gd_`sj*;D+ifz6h{i;ilGfG3N<Rft-psCQ{ zB)}Cdk?Nq~)BBQ$=FZh|<|G%So~EA8N{BEFlLCi^yoi29Vj*!WLon|`pEy`gJiWGK z)1AQ(V>R>u_81_D!(OXwVW=E;8aB+4}rBed9G(6RLACP!B z>Q~fIMFr!abS0?9->7uFV)OK~HVKI_7@{iexl*+;HyZ2o%ENjTQ$s)OQ-d17Owjko zSm3QU;&aAd<-g<5-v?R-Qd2HtGhxy$-EuYDuZvSe94`xIJiF?uEIi{opTUwkjk8vN z*LblMZQIhmsXx<{r0IE~5}JhY)2%W2<~r5dD!jHc#S{oQ3r@BHd1Zx7p%hbF9&j(w zm3>mk!q-k3RsV~TM#D`tzdyZv-BO1-gcxe@ww?#bMTKFS8_`+UNPYSDLnt@|Y=&%%6o@p{13UR8)5t4Fs8^PM(%1-j84Z9ep~^jkxk%yLl%N66}-L#6>%k z#xjmDROHEE%q+>_+BdtFoUza|b{t~T;cR8JT_)%d9}eix;b`D_#hiip#P6ul;b_ga z+L#y!SE5S*>>f_poHz97N9i|7@S~eA$`Kv&pIVx2WdsWXue6GO5^0V_eA=F#3a?ux zVH$0X-O21IA@RNWd;jV8lJuJuc78?q zZt#c_+dt=@uxy@PS4yzW#0@;ck#;F7=K&M4m4)l-R~@VeVOMKSRlEOV=_}ltaNn;- zjLy+1j1i-|k%rMQMt65N#)pQ{T>?_0yQHPNOF&Rk8WjOCdFS`{{teG{uKRw@eZuY2 zpLDrW-}}T`gVV&sMFFfNRw2gM{0+vIplH;gUW=6wK^kH7LAl3MXM7UaLWZnd2JjOu ze}gW2hXNC}yc}*yD)Cx8M;fVe{&kK&klwmC?%J9*o74LmQda%yjrHsR+$llPOZR0s z>GYU8U&T|8l=&Vh-UajJk1=#nrCpiRmN8d}>_vr$@;cLHYqdaWh)j+7odT;ehN51~ z8d-wAN?AjHhUCE6(jE&}=O^{t(lJnCg!cP{kL9je71$cvt;j*0Nl2)Lz+MNTE)`}vdHzz1Cob$mH92(*E}58W()lku z98ogce2ax`Vir2f`N4ybriPn}!tLV)PFQm?&JSb9y$&4FTAp%%+Aw~Rq^S1D z2$Wk0f2zEGz7eEJdGMTX#0quT?>{zm|Go9gF~m~*jfgn`IE?A3PHlEF!9y;8qh@Ao zLwGqa!SIwJ4LOJA6x@~M$af>>D6yf7A)w{}~ z#%fesn1}M9#b%ug)u5eKiWV$V&0;kJh}uT7Gdhv5g$u?wtF-WLrYAiYTxwm;f14P( z3^LY)SrLDQz(gBRbY()NhMzV&^ZT zy4WgsQ{wKQTSy=J!A-mB3Gx|dfVV;09mvshP`g;@ZtbtKhTst;e=*g&16HZS;n(I3 zcNXiN%x2s+Ql1Jdc!ebi!Jv$cOKUtBI1` zH!3>)uSq41zht?Ya9lX_l`QUcg(fQ8eRbKpNj%;e%7CGVYHT zyae`Dpb7V;blq_<3H^z+Px>??qKEHQIjd;CTjH^6l_-hu`cay~3NBPxtE2HaL*+|l zq3d4KMk}GGqbaf~6v?L@mtZgWChkZn#@vBVtqup6++2}Cu*cvr%c_{K&FvZztX9y}t%7u0hRL ze_9DvPNvD_y;}_havLmcL07TSktL*-J$y96)jx+m3IlIgMp<*Vj@*cMHti%NzPF=` z3jK|UvzqoS_})$*vaL;hAo9+tRC=LEPTA`jbmY6orN*>Vy(K%aSM0j#A7uk3Z8zvd>Eu1osS)Bh6e{_Z6_#h*^zL z-z?8x24VuxUMn9*xIcI+W;7Z!ChWh{8>2FG-E&4>DD?OT!tnBy!N-*10n%MFCO5Z< zESeJO>fVmHo=%iK24g5A>Ad0#&eR18jXa;(s;Sx+|G1t$>3T$Sc^d}|W(V(*AIMK%EKrk`0p3G^=X#Wy+72?zd+53+M7A1~Xs|5daSaO|6P-O!3Ho=OUFv z6O@517?>6tg3V;E-N~1xdw|notk?;_HQjr~26ufO{~;W!gd$LD7-r0r!nEEowBYs1 zH{M6?0`1%5S6j9>y4-yo%bM(h@Ow&?@l0xm6h!FLDOzC7eL%f z4$U$^>HtU>e;5*~%Zk>iV6kY|*+aUYhbnT=@+(h~CSUO~3l|$~?*=pYZT&uDU%RDU zUDRJ0vF+wyauB|k$hxWGpQ|DpF3!8wZ%iwn@!#>obj`D`86}FNw;xgQdpB~&d!a|k zBTgbCQ!0{^+aANKAxeXH5Jl8MnB{1G*7GJeoiMTA49}f~QLq^>EO2w?*FuI3)c){h zju&s80&X-mbQ8&5c(`kFom<}<_W1bMIsd!4vDmCKPKz!J1eV-gEBJ;`%+C)kGI*oGP0mfR1H;=#Ho(T#DnEGu~%Zcdccfit*zOc zcp8+OwlC#QUmo6n2-BM>&JV||WkUHrsiVuM`}3;o#n!X;X4@r*bSpWY0Ba)At{M&f zS)UQJcrOdOc7VfipEtLsdB-S#DXWy2P)pxR(U!(jMHRy^h(s7en}`!4=$LgT1k3@{ zhNqyDklKLMMgT(CRQUnS^SS1LXvH3%k*72&C(wy({lMRe?hFArkYO&=Gf@0XBVlbNq0;1 zC=&8wCcugGcGkwFtyhg1)sO++K`81ucBoGjO=U&~a@p1xwPNGZ7c1IUVjd^qVD}7_ zR@G7wiq4hHJc5nf^mOVwjfSk$p~P>MKq) zFS?I<|M2?-`#ZY78~P8wpG_iI(f(hj%Wtgc`%%uo2SBhxsk7#-U^T9r{$EG4=O@>; zyB>jtnfTKs3c{R zYP(%AP0rNGR7p@9sEb^TqwH+8imz{3FXQ#g(&;pf)d%8rqZxtKX%k`$QBx6YHSl@` zGQX0Cnm`L0iARW|c(d3=9$hJUxS_C?q@5o<#xJ=9D$rBmTc~(4T^Et(kba}NN~hyu zBD6Epmm>eyuv8`v$uUoIYB z#}!x?>YV+8ISt22Xs(H;+-bCDv|@gNc-CWyU@T)Q;fJMfYw6Dtv3Pabfr@jrZ*7yy zK6>ln3}GKr{I9ciHx7CY3_d!)>w6`21N!lnjd||ZUzd-MS5$Q543rs5`bSf*SFTwL ze%u6V)XZ?C#Z~Dje5G?OvWIet`VtR!A1xGA;nagO!Bg5KQ7tGzOEcaae5e&WJ#!*n zbOdd>^S&ajwxe}mroZWv^UY$5E5bUl8t>$0{#w5HC%?KiUXlwqeHo{i#+6JAYixC` z*M9ygu-AaoPl~Y<`d_w{eL7IuuIIMLL<>6yderqUkTzzxu8e>@0@I2<@ZQsT1OIY)mQEtVo*Ju(PU&bZXPAu7*MvU#U*@H;`ZFvFxE$9>hewd7(x6}owPm@BPQ zNMDwd*pT)?T->dRlGA;QI_)H_h`Fm7HSZ8}qno#ZlTpCBqphh7(V5ArWUomq|6D#} zJkeW0JWaHfAjQSs4k))edomt{69L4;Mp+0^`5&=!6IZeHL^B?w0lJ5i#mb%l!Gxi# zjdst7s9?iWGwA)wzEX6YbioNH_H)vg0BN3o_`OL(|9@p7<|bS2KZp48{onqK`IZSQ z1wDV`5BD-sonkaUk+ZVxrkSYH{>-5gnOE7hxodvmBIL*0Suxc&?q#|h;7s?6GF02b zTYl+I%$m2>zRe(nbt6=w&qe{fMYBO?x@lN7likI$w#KRIz}@}TH+jcK>+AA0?Ng0G#cl8g#*`h-Xn_{>nwq`s5zdHnkL z8xbzAQZH8eFcEKp>ub2~?;a%cL+~#_T;q9GX2SQZbt){?KiS<-yHNxy*4+f}*LC3O zt5*KkQZ%x)?@FMv?nFKFp}|RJ>xpr60VFa}8qP9ce}>#A;R^0M`1E_K1A^6obz37- zac!KWj*)+#^|Q|t98-!EgC?oA1!zBeDdTSc=shKq4cz85d@gddxab}5gvHS5jP2)h1?h#dQyvyBI8yoXZlP*0wrv%-V# z4u>tRKQxg`l!zoU7u%SC@;#?2(hJHic=0^o{=xR!bE(RD_trlyVz_z@h06;-pFO7u z+B=>)d3^}r+58M1u(Y3I8Z=E&O{!XO2yM+XOtzewX;kUwICpmbCEi51%opKsa|h6O zqE7~H%$h5iiv)eKaD1n^??|1luNa|@kpJQ&`0e*1J-z%Z+P*IHT?_>%L^HPW`C)Tow11{+~`I^(#8$=CB}%R^o5; z;*tU4Vu519*Ab#NTMqbbOrfK<%8)u@Lwa=hb;o!}u9Xr$2F&VfN{aib0!j8piEP6- zqT^KZD;}vNJBVHZ#;T(9gv7YUcf@{ncg~O?Ne-0*t5ZKFTm24a=pnH2K{%_tqt9wM zUzQXyBS?k(B^=RU3)&z`AR1sOaOg#0PpTv6l!K({1j&b@Xj+S@^~oIBvLZA`F){Jb ztyo;4aVldC{{NnkhM?!~Jrl&3B-hLj{j`Y0` ziSNxJ&9B4qXmT$Tr#v~=G%Qnt-t!Pda@TvL0h^p5?+st-D#sr3YgbBXqMVJHy&d6B zLZL~*mCUuvxXRjiE^U!N{tzVO;{~b_sE3b-`kKC$khhfExr57D4x2P>x~MTG=_Mtc zf|Pb%WO0luG}B>hkckxzf6D261!Z30wm8$zf41_uK_ zAughOXb;=Rt7-M<2mTa!xR7XaZ{_AOXY%D5$0Sl-O5#)&4=E`8q1G~&0Ca0it{hJ zsA5+rgtrc=NmmQVRk9BiJ;Oqs!(S@c{--wm&;;sny*;Wk3Ot4DvzF14FQVOyTbn2G z-2Lletg5U+mV5qJB(HkroMbJC0yWq5o8a|K@f9xyL~!BGyJdMdqBs5No_umNuY$A1 z7|4F<)!o%U`%LEYrIN|z9H%7`E_ZHfl^ziVdj*aZm@CkL+CMF0C!nfq!(p!{Yf(b7 z7V5;ZL{JZb{X0=LQ^2w9D8bZ-&U9kZ6+qVo9|n)Px+es{&r^Ty96PFqvDba3@x=E^ zDDWNe{9LsOR_^z6j;E4W$a7ezG{T<#iQpic#2-ap$M8(|gbU3#O?>W@$+*+G0anUn zXQA0o>WaArHLcD!EES{PS$%uo z-XrlJKmVUg-ZQtu#N#f^b4(#8?%)=V<&;VM0PZb&HY~xvX7l3C^%@R|1M(YnN0D3G zbtp_@u1$7r*4nb6j#^09NYu-fT~2*hDRx|QH_uuH>)ebK+?f=0a2(h*Ye<2?oPa0P zRY#rHEoK;3H&~1F3vuSd(pG&`YJ2xqgE6EUm7aR(lJkUFzJkpcO!V+sM5*YEwF)~xtTluy%?Or3>$CR}k!O2hA2yg3FO5DX*{U{^- z{*3FLrsL_I)(62R%N+I*;guUBH zr+^ttE%ZVqx8$>6n@QVzho$EsVCnRz#7AKk_NOLZF}Z6;=xQ$EP{|ZC<&8)y0D#4?^qF7<-MX-`6;pZ!t1amFx{$Yz zk9}bE%C9VgDNn&a*h6}9E5_~o!%K2h+P}19}AaJD(x+to@n%SRa2}-D3 zI{Y!WS=CDh9{yhICCV$NmwSg_{u@RPR3vf=XuZ>2G?a3a(p#zR)yU)155#PWrNE>d zirNwg{-f~*GNkPPp&o-80pKUEuKfxuBDa?u;j1a>!xQ)W}zG|jW6fZ1!CkuLLYFt&Jo`HQ*86CXdT-2%_N5h3E2mnCR}=dU#U`P4#1{AGRJqGc z0vG7g@Rt9(OmJeGSZ+xY*Y-eMa`!PXn&W4d3+gWb$VH@|jmMEa!Vw#zUx^*>MuI`i z=PCr-BXE1E`wZC4O=r*=VHn+Qqozm6ZW2PzqxKa;SXw46zv~Um$4z0!prgHqNC~^4O&3xbb7!TeM=Qw{b0W<1|ufUYE34@Gs&j@mW%8 znB9+WK&7vUP+d+;G7d^4XSG_=M5#l-$PZ6b{2G=P`D`Nv#wJNqDcnygcC4&hh_7Z5 zB^E(ry3cXu+4DhcI#^zZC56jsh=?bcDmT*UyS!=Ne9@H%WTTw^m;;k2^1pyQZ?M4DeV!4!bmr>{IP4I7wk zqv8T8r;13C@Uw_U2DM>O6DAg7u4~tT-jQk0Z|8!UyR=(mRkQf)nx681@W@Ua)cdYl zQva9{&69JbZu|H5nhQU#Z2tD= zSYse4Ua?_lk3C0W2+!OA55{5_L)vs=srFur04M766qJL*m5fkSP&if9jIUpeFJ$kh zup0m%hluK_ecw&CAcaq&62+W0;6e|#-zXI(wt4yDk%YGDx8dUWJBqNPe*3(x)Ue1cB?UN-7LeC2#IjeKYUnHhz_~7mYIU$vFqBKB_Ou z)ry$5F(xJolj_VazH7AHooy~C;#ab6U<6@qOeZYFL-y!Gb6<8GMG(!^1>>qK?VE=3 z4-Jh=<3$b?L=ekC(~g(rD(;iZUqtl`OmpiW=ytEKzBNsKonv>>xTyJw$24VzdmhHV zB+kbd%iX|UG?9;x2f5E*q~}0Cg2EH=c5{sGlrt@wCbI|>Rw8jplf`AG9((3u#=QHo$ z5dL_)D~IO}^qhDj$HWVa7ma?k9Au(4P$HgJ_i1|Ak}!wU5=rJPn#`R1G9q0Y=+IMf z&165s()u}u|7NZx59!IICm%>hZ>I9L85%^VGS0p%YV~IQs1`~h5zN63w*V!(-?O>3 zj=bKyIt?4PzTu+#uI54|Tf474|HGa5g=rQQWX#1luK#B&{BNiJfha1p$zW^9>73EZ zR+&&UMYARb<)j=qh$Z)oyG0l>M}?nmcP5%)nxtTaccZ-wER!=Dc8kZv$TSdHXH$!? zRTZI(F$!^;#89>Y3uUH2OcP8p;(EM5V#{x{oH#?&1ryG<<@ti9eLOo(Y69g-!)7kH=f@?2X}e zp+XmU1P5c@oXYB0#HBy9-_jxXZi3};8}if-%2X`>5^o$YXevSRy4Xu_FP74h#)iWl zUS#9ba^vANKYhv>OMaHYqW648eC>@x=h>&36@@;o$5H>kpH1>+E85=tH32AoRioXt z`i^lPZ%!n>LRcZ-$vN+_0JUkFKAW^Q_*WITQ%#I`VMDC$90o3}{)JnY`Vl4( zSO4s;a5j~X}!a0qRQ8%r#tRFTd&q`4~Glp+tv< zAH|>Yea;V-;wWUxYkd6q`1ra$ywIxwaX3leusP8j{*#JHV4)_WNd_WnF^9X5(Vb~* z$Ty#17ijlnYTeJv()J=Suq*DWMI z(5iOF!R_Ak*YnnXVzq7Bc;OnBvYF9N*-B+scDJ5F4M?jpzlcua(=`MpY9nJrwxR={Bu-#P_K z_PVMFdxLDeQO0#`N$h6=;I+uH^lT&(R;6Ky(?9%Pk(%&7>j!vFwp{p_M6mvNuvESL zf{Dg&5xV~<&S8^Y%{Wacat6gck6 za*CMeM0ng&d#^D>#bWf`HIOr0VybIx@72Tv$jUCvb4V03K8wb~ZNAS zg^zTG{k}hy?5DSgW=!(SZx;oLn8@+JkIF^;TvislBbDJEAghR}G(g?wAgdC}2y9ii zd8M9JmQN6n3uDGB0gce1B2GR0D>yVm9Fd4fCDE*I%TlGN72~RzH=NuoL|EjBlOf#D zW0Ss|6XCcD?GrPiZdo@%e$~UOZJg|oeaVw5P|*r6cKFKbFyIFZ`wg4QcqUS$c^$ zLI_>wy7KczfZ%qxAv8LjQYxE0?|JkaKEVvDGFFiYE(NxUq}Ws6>7rp+r9bFt5-|Xp zPD6`>-H0pMQ)hWJ{p0x@_s%<+6{3yGAVJ+Hydx5R#_|b$P0sR%h+6vg{k+eVzDeAWlqs4Kds-JgY4XjD;6};FcLpifGM&u>64P6M~YFH5{K%0b}@P z_`cU~_#1h+1p9CmVNo2}3)pRD?cIMWcr3Opgi>bNZc+b<`SvfaPWP9G>(>HjTpbnuMH*XK-fI~eKH zed3)edPCn=fi0pjPMIKT;7-g_Atb?F%QGIHbMa|&Rbm_BY^-KXd&Q+WvKF`s8t@{K z(lt5H+ESX(e=@?wrF*MP?OeHJL>n5#1;!+vGK`Vobq#-(oj58GHPjWU!A59i78jXNhQeA#I}%Q?X_UwL1tbc z+>?0!&$=El zTFhO(4gZ<=I+Ab8*)RFSVYYO=o^d0la9K_eUNMC<>5Wq{EX?yI_ zu9@&tZtNJ-y*&rQ1_k<`_MUf*RbZ#;@?D%Cv|t+SH$(qC*zw__*ChRGhJu}h?mB8`9X(+0cJq(YnVsbW)Rq$%ctiS-+zL#4h2U`fHD9pSd3Td}iSel+ zSE6D@d=X6hIO+|%mm5*Rp}z3OoT46sm_B%Kh)W~u4SD)Vg%=k$IqkfW4rn*3W<%?| zYf5cQt7FLcEYPUeqm2B`2S<;RC3AU0$BJ`RdSUrjb-%yALU}zr4u*Z?d-d~kNUO_d zOf&M^1d*XaHC(YBSo)E%yvjfP9>?CRKa&G!PY%tbxs)>HpFjC}eOVzdk4-MO8?k}* z4>|-fPHv`+^Q`_+^3NM?lBDD;f%gg1|HBst|lB=v5E&EOl4zSGa}0I zLkNyWR*+$O6z*5KN*;OgizwpK+Kl-CjLGz&fPe^0%(Hyl$OwfAg=<)!kq8C086~37 z?F_12;Z$l#l`dkxrk#?>-!8%za@+aFcp$~Z$3M|7N-WQgSi_Cy0Eiu%pi6q<;y9v^ z;RmLmSdCyraFXKTaKu);%EtAdgABQ|r^4K<1dy0}+Lru02|3E3(VJ2%%(z34zIX(+ zr4SY>{dT9&nFEhDuCh?NG_5KN6C&lh;ojf0&MUpI><6Q2P`K)o(GMk#7*hS}I`2es zj-7keH%|>BVZ`8CrFmto#r_#rJP6A}X_d_sV4#GNoR1B!5gO!1VkqK}k+o!K@LKA( z;ooLWl@mjevBW`}r-EN@v?H`md)^6^+CiPoZ8@d|PC{W1OR z;`2t*yq#20n^7#!&f|v{4g#;FTgJ@#nkoIBguQad`NgXenp7JOFk#TOJsfEON3!+Z zdDT{3SZE`T*rjakl*pFS3j`F}-T7l;oybAv5w=JL+jIgkj_CqCgIwS+-u@R1upe3b zNOeJFEEBa^(9{$F1K&VCh_POFZ1((;1?TnU2J-l@x5=UT?c-m5x=+2cbu+kE%15UH z{6V_KB^)xQYm~O#wt7GK*UmI*CB5QL$)T0(N`0!mu`Zb`SRy%fT3TBDlGKE!u_F{J zU>QW|seSge=9U0gAF9!fFY6FW*>EnW6|%{+TgzAYQjB{EO!%5GHheXIQ2~^7nt52#CTL~ zSlx(#5{s_Y=e^MuE|$>{kgD%@%kJzWd@wRNYkSeDme^$LC1uc(OF=N2@Hqr}U(e+1 z_Cf&f*ql+ANtHh{R&9ftE`T+wyLE?!jB+TVL8JSvAH)R^$x1l20_L52)mjQlLR(&Q zREBWyQdDo~{n~hH_jwOoGfA8(h*KbA*aC@{{N)xRCWe4SBr8nQh-!UuVXlgR#$UZ? z&H;+}F6{J(^6^JK{<^wP%}y*(B`ddMeJ^{k5GFN0uhvP1Jhy=#&>o!$28eTz#01<8fYmY417k(x!QqpK=Q46A)Nvc6`*h?eB^QnFPba~)cL(D9{} zteafS3ko{TRVmb_N+Q9>9|9HXqr?5n`BmFo2;4XyxXvy6ff1<+fJ!$U5b!zhz?3_o z;n$3A7OU_{Icrh@rTEL95>9$^_xOzOkB^H=HqZ-P(X^gJ`)hhT&$>@EQGYbY?z+G) zYKzaE&dHXUT7S<$vCofF%82<CknpGF9z1M+BpW4Ax+sKk z@Gc=4<;*9#kNqjpDVgE*A-pYzPKO@Rw|s8!gajXJ2F2bgNqX(uv$?eon(y_aTMLU2Bm3bjTEWvc=bXB!%kwM-OKrT%J$j5VHHyoHD! zvIzbo1oTtW(HH~5h~xE2Y60H~G0s;O`?t+oL!g;z135c!=A>0irc zOys;zdP%6e*LW=SJvY8~P9vkl7th~}r;+DgE;^{he3~R^g5?6=C#xz4Y}|RW`#T|t z_*3UZVpYa2zo?W=FCb`~;MJu19k1Y#-dI}P?`0nFs(!0Q`MlwWjB(LtiXZeG7m~O{ zOw&moa`Q6~Vm=9SyLK&EEva)9^86y6t97si%RaP8UFB07kB5&hEPJzWJ5(kX@tH_T z&ki1R;%y`PPWx43uC#NBN)25(L?|~g*4_l5Mf(oZF>}Kn+5iJXB)zdDivn>(3G%F1 zYBTWYAAT=LX=Kp&^_kSaNJIB`qx;L;F2DTauUgUmLC(V(h{Q9iUz+dtzCp(s=O(KH z%N{>2{@&cVyzAxg2^JFLdrz<`Vag^3)1Cd~%ZnIUk*}3N(c&lDF)!jd2{C>tRhL)R z+u&isV9D1cQx0%I=QKxzbDK@gfVDZn;3Lq?%}2Z@Q(kl5Bj`HSXAV9Nu_S^5qyK6z zudN@{o$kTQ-6~$oPRqGx!h1D06-J@E698)$C2fdmaNevnwoB8ljF>KBS778JViJ?i z(Fhw#1;dQPtmRuNj_Nj&)&sW{qD+Ske1o-|p0NuJjjaGWx?KlJ>_Ra3_4Y9`4@lBe zPi?E8mC>zulqcc4aD;v?-nlY7GJbTg6aV>0eDi@xfSMvR=PujBe`ai`%DFFACs(y2 zE6p+c(KdYZwu^r~ZS}LZ!*_h;=N$DF zpLcOn_xrEM)^-_LLJmFdW#&FQPbRK07`{n7LSFCv!B++recuWZdY2P>TF=e~=mD*4 z4pJR9jcrol1!|RcW=c8=-~8?&u-rt{=0n`FQ+{bsaI3!Q()3-U9iHW5_-PmgJ(SVoDGJ-cDq5>k=Jf-WP$v{KE+Sntov zfS2dJ;{xMY`M>UhYc$qtEgQ2&_C%eq#}QhKl&o8!G0VIV9vXb?yV&X&rLqbig2klj zS`BugtFVk8=Z6KlhSCJtq`;Vn5y=_DD+L?=cKrN3=TVxM@h$BSo9kzem$)jwt>O=s zL;Kj{?LCWo-_X2h7e1YtvuZH=VwN;uo3%l#d*}1tcsA;Ssfd>>LZF<0*w3x`7L$!f zJtmEu1_y+SopZY0vx?2cNylq{!eC!Lnos4AAQ*C6WLw~7!y@|~4p_@#H!B!Wdp6=M zx6mO)WGsGMROzhZc;u`q^-sca7?XhZ6#KtpOB%QRhCJf@WED+=Ao|go0`Szsd~}2dNo@PH)GeP#hMOse0)TQKPb%14;j2xQj%Bn4K3?5yWUIx?Mook83 zZr7P<8;EfNm^eue%sur~=f(DlJIk6XaGpiM-3Jq)B(%i(;0xjk#H3F1q=z{3g-41< zrX$%;AqwNIEOtssN>!eGcz8&H8AOo=5p_kB^*lce5hv-zoqeTX%{+@ z%#1r}p_uTa>{$KVZf;f`kVc}g&_#o)jM{hEd_B|gouC<%%5dd6}fYsi*VK<&t3nW)$NjVZ! zx&W3n@>__o`G>PQGmLXhUvVdo4QUY;Ww}dd#_n4!I^D6caVAenSH^9IAK(lh{n@=~ z+h<;&lz)_e>LtfR5uje!?HTpw;``ETF=4SXk`U*N-%TMBM%Va3;2xw#R%fxaEelmT z@!HS)NVfB@Ijxd^GQd>`Mb+T>0XV%{*`lh{i4hk5OmocM-5cVQTWVJ#ea4b5)%u5A z`y}86oLjmv)?3}H?x1YVxdOxS#-DU#+cn;wnpWjbok93%uLmKf)Yn{4d!A$LPu_0} zk_-f%NkUhK&JCkVlmZ1_2vHR}G7naELt_9OYatg453hG@G#L}gs<@VpExb%ahGnOy z5CNJ3nPVNbN9(fyD9tYIC@Rxhg?-Yy-D_TAzH_%S(W@)5c|6tx1Pi&9jo0jYESCpq zHMOi8wWXJ2;S(0Iy(R&cLqC!pje#_7j7dSHD!Fym^0vbP7X>`{c50mt zK3SMtPG-6amFmM20jQ;|xg9q>sJ8^7o!+PgUhp|-%bvCCKDv#=pZ*X*UwHYSeGA*% zj@>jvL&f4{LA3&*ZboF;7RGet1)IA!jW-7UP=wA>PGzKNGSnvlyNX=xxn+ysTs$I4 zU!&9(RQcJu@qG29S0h41h8|M@E#bbkuKXHow| z&m<1*U$8{}+n=9c)u8pyX#WBpgL4_Uc$zgsDQwE)I9B8_>uz76WQRtH=pa)4vqW5- z8oD!06nBoFH^a1?)1*|vwNmB@4A+~N^VzX-l(NXlBLzRBjZT^y zKrPx~4Ld7j2vLQyfji4uw=j&T2Z+gFb}>pL11*SRcWgeEu??E!^9sh+s|1!UP?E6=cX%?_A z8N!H%!?Jy-K1hIzqoi2ls|CU&Uq0+q$ENT_j`FT9WiBU|53Rol!bE11wRq# z`oPrUniM_^;wng>uR?uig|fso4MdDF&-mlvp{WG-;Z{4;5Wgf68On+gPOQhIX-`D1 zublk?lNnoeEnzjFWjw_cx1X(>zefzx^Pg##*^iHU*?x;e`>=4(D2rrG%qV40m~a}e zrMEHSDJL_CS@=exZYsOzt-d`Q8T+jJ{sO?Ys6;quvK-E1DVc_|H>3%7_1DlhH}>`1 z+@+yS`IFuf%9*~=+vnIR|1`;jrKmTwlCe?srBQ={aU-}8QouBa3B_r|YhzZoN#$1<%Z)U4GVhpjOLZ{C__{f<}RX|cPNOc@@ zg>G8E%U+rdLNZNqIQ#O2{|SlVI=8`8&4nt9nL{4X z;$`uD#I=|yzq$^WL&~AB!D)R+vRFKRcYCa-!mWh8!>sxSYz2m0h2O=PH-zV}Box<# z0M}=be-$a>j^T)Iva(ac$~CJFvM$9~A|_io9$hq@rk6C>%O+d+0!wBl8ug%A4ykg7 zIyvDWstNwLKO^69q4{U@{pjSM|2O}X+29(@Kg%f>$bG;=`v*A*=spFl%MU#C{P%eC zDiA$SUAE%2j+;#)sgl3CcUVo;E9dx;PZ>O9c%{}^aca8OurqII6&9VdL)Yy%T;zyO zFpO*99Z-7O48eRdUiBX#0;dpq18}OBgTR-iDVLRfCq%NLfE!$1~N$GiWwxbZ@ zwzt9reArEfOBr(sl}$Q7Ma6?wOHcY(64E=rEiD8$nVpA;loM!j5o1sKQ$~0Sa=JSs z^BN4SVUv7^%42TqmfIPmagf2bHMtZ^uxQ20`0l)~y}@7v>0-bDN^okPsutWFT4QWG zW%)L_bi$_0kI{ON4-k?DtI?aQ_i(|6hTU0{)9DK+RgxTx)&Fe*D#ZgapWA*rjUAG+*XfO9Ke z0EG9%N4v7>Zu_|T|3+33!l30b5`wf}KXH{WB>J&numGwYojGPjL4cxtOvqBp>n>9; zhK#lHnEJibR$R`x#TCQtv(@e%O)Izy>bzL;%m;fYAH75FXej%!jYR&DStc1n90IYn zX4Osv@s+|Ohxg4$7l`n&52n9Lg??#DgeMkhW)SM8X*32Wwa@bF%la8_bEZS} z(;RP32+&R0Jv8sn@@b%RZ9-*iO|F`4v>G_7YfjI>)@7N%#P70M_sd)WbJr`j?KcWM zXnCw3rLs9Y!i~AXvnJV`ldQjfqY18iMc&~}hrYQI360ZpwEz@gFb6i?rYw%n%Cg@o zaE0l7{EdnxJd+WRR~0fJ+DW%>+l%VhSG=GI>RrK@?ACP>weFbE|L`)5Ss1fg(w&`m zut%j|QC0Aw{Z|M{JL$5asS5nPFV0eyFvy^}aqEb^E-Nhwd!|`NYnTJEtV`q4k1Eg9 zjE_a-bsa>=8$xJw0;A9Kf;oKf|WM# z0UMoP*Jty+PyYL(yw8(Ip^)bGk^LwbE#0C?k9^RfgIR#GrLM$cR{WY)4Yk%c2I=Ls zL^*unoY<#CiYOw^sU3s}ie$oO1ealDKP?pO^gzczgt}Bo$guZf<;U8W)p) zyAtPq?Sf(YunCi6_B6EoKpW?{dMlxERFfKiB&rgHu`GAfa-Q7gpB})MXjq)2Ys0}| zX+v8~VMKLmqTjHj+!h^kwn&<^W;f zASKdDN-EZucmCf0;W^K}pL0*RGuhAnps0G|~e$G5QF(a591tiWUM*)pSpcd7Gh?cK6YubTF&d7CXb(=cO^ zpVEtuI`~c++F)NcGYI00kh!rsPwy`uIYWsyUwgeyVFRY9dg0xP(C+-Wj3G;QkEmSe zC(HY|AU>oLQg)tKFqc+QK~#rwl8eEY$Dq#&njLHCd` zm`X&QiC=xyy)d&H-*)9{T~>6o1;FOw5Qg0(VBI+;$9`tNf9~r zqGfGKEfp*lw z3I`(n0f163(3honNsZ2?zdUT9^15qZkpM>G!^-Wo@hNO53YR6Xb;_XG^!guuuakaQ zg%2tGZ+{N{mw!cfa(;`3)Ia~*pON`j?CEmHtYLvlyGudJRU*Q#t94SRzxWDU82F)k z3+)!!w{1IhJ2dt@!k3&q9O4N*DTUJ%UX5pIjV^syVX8|$a@-1IcHV_Otl6ul#kjP( zBthEdb} zks+=@lyf;=qd#7nFmEsXXil9Sg8JJDZA!(+q|yda|4Tz)YQjP2IDn6|8JANER?+5K zpNmBf<0r#yI}0HT4OXK_Yrvys#vGa9UoBTMP;rq>G}D0*OAlG;T}f~ZM9@mI}ur*`@*)9Px2@&;qoTk8tjJzve`;aqt+4M zuuF&@{t8d51~uEgK8xe7(iX=zG``C$?G|5m)Ka|FV%@_}WP1K^yIhq2C}c6uJQ&rQ z7xMdSIm@inL{v#U-K-MfxKC7ZLskrU>h?8Z+gfJ)eO5Y2Afhb6rBOXHM%8bGf|%J@ zdQM$Y?|lqaGhB!XzX}zV1v*R@&9KrUUPkgUzmT6yj0s)S+w8z`+0h8hNr&z{HX>S6 zML_@&@|Y7XY#pZLrb0uL`m!X-!mWFp;Dw_hBN`5{mWTGwBdMKQcY+PikkYR^R=?ig}B3odnG`*9@h!u@M65rX{fqplv`mwL7T(&&_+)N<`AQ}j&ZPo z0W8D+mZyXJ6`ZpuJ7}sGGWR8cpNesPlL*;RLd^q2!%9%O<;xB`Q9HwpP0vw18E;>c zMmuL3VNArLfj-dH8s~WB5SuosNAmr!7;cbb(Y8t9!Lz3rrlofds32e+-~vH#Bqx1o z;26Zw$Uh{0%R^*$uST~@$F^r%a%)~rS3fC-gGIv|!RSA=&lR&-8!qhO+rAZboi zdg7$_hewovaC@ZZzF9)I<3r5cj85wC^ak$aMKPap^GzrRX{kv}cU1kfniyMFeLz4Y zeQA_8qf*sP2&Vev4X-i_MUtHdtP!UU>%TI1TwUP_d|)eK@o90=kfZwo`k3t2F?6^* zFUQ`sFDdiNDo<;R(S)7jC5vA0U$03ccT)xT0M{nsc8(nYNTWX?N14n~I#jVzEjy-= zRl)8@^F-k;zN%GV2wV1HL6R3!hzdTC(o_)10EgeCtwlw17_xxan!9re*;j;MYFANF zG#{!&wzgmRHUBTa?i{rMnSX`cpY@RW8!`X#uZXX2DqqSO<_zzVA>Y4f?adRjbuxBu zpwDxD7nT=e+2)#j)`&gZCD%7jrg>R+yT_aTmPc1o?720MxV1W>aw@XUoXLh0W^a9r z3+$(Fpt5lLv~x$3$syT{iJeDBV8hDNi%r)&61u%slhAHWV3F1@(PXEc*@pZ}LEv;% zigcRA-?O;=bY_@FmbmUZW>h9|$5)Ooyof_+Cp)040MA<@ko_kS&aM)u{qEshe3qlvl9LiPUQfyk_lS18%1O=Tvd7=g1%2N<=$M3Z^@ z-4}mfJC-Pzs8C{XZ2o2TT;H@s?I-R!nG<}iL0u6b)LYB{e~~aD)?|4DT{y{!%)plmLygtz70)C?iGU1&ljS!B`0EEM3_+t*(YCttA~u*9QATjW0@{4WX}}znLyX zd}RF7*&n=6$knV@W&BPnYDFp=GYvZkhU&`~&;Gzb@xk~437Y;>l0lS$n79s!cBm6Do86Up^;TU$?xgo?Q>^cL@l`1KK)lRN8n zQEOevdR`$8-Fa3}?~5);F%ejC^Te`+ zb|XBFWH^dwXckYmZp##cKx~*U8Wy>%56K7g1VsmosCgX0$`CWkG+xtn@eqGMR@$bk zW_yE=KzhAYt~;F_Lu-~d&(B$RfmkhM#D&o#<(Y_PO@872u#VFFJvX!irZyRXCQg+O z8<3%bB|jxTS_!@IhILJiMsKWRWyOLY>v{!Am2sc3s`58tgZy0R&A?yWpt7VB!(I^zl{LT%0_q~!RPN3nfC}3MU#TKn;Y@W3 zrLlW>TzpgLYp1^obT&i43ziwG5`MuW(RO z!Rde&FB)aHQBQi0!^9L%4e8BJIeHYXm=aN`P5d{1uP}cIBKa$iC55B^y??*clmGwy z_uu^pxj!#?ekz#W_AYonxi+4$~)w4 z6&|v};g*DX*x&zKNm^(%@9qrcT^1;HUX>rCbXY@bItx+335{{>b-HEyNV3Ma^F5U*C+OG?<#E&kIYtYwQ>F44+K8@DK_Mg^)nT12d#CF`c1 zSj;1W3p=*r6WaWn4+v6mf>LipbkD2E)Pi!jvoQ@VIC6yKR$SP?0|aErblvn3N|7^f!&ol?5kF z{B+>H$tLYE4_iWgGQ|#bP2LY1LGLNnwPoEiKU0 zp85;wUqkC8{S##ekrQr}KOg>TMXs6=8Yp1<2rBS(d3zKa+0V-+ZLgoPu2EjQ;(S$B zYj89(#&P_RMLl<(77uy|Vw_mm)`y0iIRff!9n@EJiZA2edraFIUHHB>ta@vbVjv|8 z$FMgm8(_ENzd+-~N$pg%P)tL4@-r8}itY7@PYDwkW+zQ=jf-KV!s_HJ@NJP=BvAfBC!e_47~bB;MBsU5PyIH73X{ zt77ht5@dYl|iFhY^=@8+vh`JOeg+cll(Q5MAzPf4g)`P@Z&00OU#Xo?Gzlig-X_}6D!TPzkC+MLT?>Ejy#&N z0OE*OG*I>0d~1=vueUa*`cHZz4V>rc;3004g9?h7F`D7cREaPK7#i|N`WE~Tzn7@N z$oyCZr2qHqTkya9I@-X?yUI?656Jw=yHYLwc1NrD}9Fn$|a zxu5H$j2q%2TtysA|u!%PwKk{p=xhW9Re;%sgwm4=d;%FIfhsDWw z5$&q7e>k&m9XsDZme0kW5zfr0Yi|M38yplG+p8aa|Qx3BYQAXu{$RBZIG5qiRe zLewZ+F8_K_^aXGT-){;T!>8jq2ON4`Yozs#}5N z4YLlsyJ=L<{9k?t1Yt5~Cl>fKTUdi_c_}IiUEKriIMC?yPP4$`wX^LUS(nT;lTkr` z9XMAdQS&w0ovVpxdh!)fCF0OU@L-E%Ot{p^KJ5+Sg%h)y#yHd(S3;?(hh7u8R_NTB z$lauWdYq%dPa~FY^T$8@-X#984;!rao-(+4>+D1L^NDU4soy~I&&_gsC>&qvSsO)4 z@D8Jgm8?F6IlM;F@lN`&_JrA1w`}oPt+myLUsn04fUChvdERup#)NJ&q`j)|&63x= zWK30P7xR)G9Okq&a&o^!gf(QYDtNP$=*HQK@qYnTo>!rztBLrf>6MKdNLtDES`N+U zMxOrt(`GdATJFlNa`8Ci$_f!T3?kNEzymkKz+I(me~N_LYJ|W&So6?1RlVHNbM+}b zM`&l|I90ZrSQPk9)y*6u#cb4vYFn@}zQzZYBo{;aJP?h6MA-!ewHC)lKi@S%UwM=d zlx!F@j{@l*^&LHk4L$!UX8=2v{z!T@91|K+s0oP z_X`h~^%T7#Tx?XMP}$nvg@r__6!jOuj_n0`TLs{0Lk~WhFT-Me_#27)X8+1iT}huW zdT|)3JhVi$#PS@MB$S#`i;>7g;LG`zvy_R%i=0>l_35t7UlaN0#OJZje8d=-?qW-{ z(Jj~6`Iu(TfO%Ka#m0nCDvFd8<1J0Qip3pMuU<{4u(X5nT}H|>eQ>S zv`u1Ju^F{M6;#M;!0bYZj5@U7Y3(WDEsFoOPo zBQ*LW?&6ZtJg}YBCFXxpVUEy|e5!|>^^kX5xS=l+O!x9fzB-;gEEH;fugX%ZaUSHX z+Mqs?cEPz$V^uLzI2N&+t$=2Q-uEa*GaOD3mZJCQM$*CHncvgp7371og z$9DE%Wn4o+A@=u=fI6wV#nchdCup_(;4>+?pqD9lzWe(rsd%06T3g#mylUFo=^2Yd z%#lT~fPmlwGr8`HuhyR{4-Zk)CHzq(#J{>nw^Cwki)AuzCY)EnR4>hdg4>3pyM zQvv&~V2>4M@`%}8gKHsg9$f|+iXCox*^2<8UM)Zh>`cifYc{&uj%m4+kgo6swY4o1 zFrB41)p*C6`T;{Ix*wZ8#_2ras~#D|q~2awUdcpgLqsGi`X7GJ2!rX6{v)LR3Yi}p zkDR}yS(i7=NdCDTiC=c-3JQv2DILW;thg|_6Uf)s&;Em%bcd68r+6{HV?|Sm-{KxA zvyCB?4O+q+Yy401)>^vL1Ih^+gCOU0zi0&tk~DCJPc%wx_~9lmZMqgN1Y1BrePvpR$R;nm8`SdUR_lLScgFpnjWIJI)#Gs zxoD?q0knEwi65%Nx5n)1HF`SMg0#AH>4N2_CxQC;z_$JUCU+ss5>?~?`g%}s23h%Gf%lS46g6qP;IA^D~1x2mLjOCZ=`}@ zY9EV@f-s&yLk8GU2*&Wc0EAda)KJv0CGFvOR2X3;Nhr<0rBVe{d^$bFw3k{6ZkFUI%0g!rQ zf5=SEBY{p!Z;knCTuljBaV@^1;BYMb%@^EADEC~yhC^vDdyx0bOtx(q1ICcaR1vY5 zmiD{vvd&j-j&m=IUx6~HvmU-Nt2jpPb`%Kc?XIh8FnfX#s_{)OE&(LAbQ;Y$WFag( zjyXJCFG6xRpzWW&q9_|Ha0)+AQjwfq&l9H(X%*s;^w+N>FacpPOHrQ{8cZ$MnZj9G z8h;nb@e0rP%P-BbZsIeWR>VXH=4;ba9%U4xFww`dd1`ZSNA(GHY-?CkJ!LIP|MlZ? z6nLIanlt&0hGv4M7})xzXa3C#y|0e}RLhgqv6X}I!9|RkfG#r|IXc2rHTcCE0y}}r zo+oQw{U#U3PO8L(r6D^SjcP#$0I(E-S4GKFDF@R)FQifrk1Z2r&SXW&WNUr(AMJs{H(_pFfAbgheo2S7(u;>;7mK=MJ9Fl;k`Tc#!l2_h5SAo%sf=+29c- z>C$Dulb2B&-J()LmJztXg%}9lkzG1`!o&;4R4hCM9jWL0qz=3qlb=Z zEw^|r+C#s&SZ2~DaGaI(^Uv|N=df?v{O&v{x(pelYE!CH&a0NvCYcrLHm;I*vH_ z7~Y=%_~l}Z+4n6kGT3~HFu!ZXdFkqchL2Z$2S<*sYThXvG}0YIk}G(ZII|Cv1iYcg zd$$F#=lFsh`vIg+4^f@f{1TTxqcU4$ptGB7om{lG`0$^8k*w&hw}=K<^Ec6;el0bQ zXJK}e#PY8;ma4=avBJ43uJ1{URdop(wNb0T2-ToKLFMrb7#0vup$`ngP+6vLnsqLM9#t6b7Q>nC zmWZ=zMNKr`uv?U^o_Nh6X=9@S+duxJ$;$o04I(QPiH?D>t{N2y|Ac2Q_qws0zI~SJ zjj1_j1{sHii4IW_nw`lnO+A7Fe6SM=y>P6YPA*Y_7BQwlB(19!?kV(+`DM1_yVPhz zes{iw11)1>%*5;LNgS*i!aQNRoRBs&8MJKjr1~VLJP!cd%p}?hCngQ%sGn;7D-^vO z`c@`QbGi>fdsz~L8p<9CU~?}#x7C06y^g1p4VMKY{rd-RgQE$N{oPqe{u$YS!hcKlGFEz&&Y>_fX3&`kyf-525{u^?wg>MpB$`))X<>`e$c z%O}yzh{?e1CP;!<6=G&q#tpPk@p3x)jwZUY}d0sEg>J##mYdDa*S55(eVSRal;t#AuVtF zYw~Ct{oq-ePsdG9$0L6!8%{RNFd5%qAwy&$3W?Eo&x+wuC>oKmDU^_1VM0LW3&T1k zu-R%G{Coa__pwN-z{QqEg1i^?MXolM4%jka-Z@3oKsAgCon<|=1TxZJ)ssriv^YRNoh!80k)`|%YljRCp&7B zNQBadq&4)>CmlS8Gapc<<4Ex^gtd@#d~_l$dO?>$_~1{F5ziJ!!s1e}es#x0ahu6b zDg~9-i=2e$+UcP8AR>0*RD{@C{EcfvaY=jbv08LqmGDG9d&e;*LI3_YRx_7qkmYyj zj8vGSVCyqV^)z)-YMOQg{IN}D-zOiRdE#L)aFh14>(L@<{IQfDEq84N@)u5$AH<=W10sSeplk%MD%?@eNdCJvNbd3pH| zP8$7~p_^E)3A-%h%5~_YltQLD0`sU{|0r66yb9&9$ZzMzdCvU0G z?F2eyuWMpz)uqH6?-0$Uzx*IiCV1;ZKT#M=Z1Z#=3Zf<$kn5R7C7Qy3BYWJqN%{v9 z3{F4l^*d=5WS?z%NeCJ0o|GL}mvz#-8TSq8ex0|SY&gZ(6LyWP6|Ny^mfTY|PSYMKrV_b* zgr1;Y+0JKvo&SQ~Lru()Z5Wg$ohNzu>iD=De71h5cimIt=PQUICq9P=9_|p&IHSaa z83+UfWy@5F&-($0OD4UHC|C6tey$l1G)yGy(;t(hBa{wc#axfh9tt>7}x=(S@DGN{Im`yPHtW~ z9Z{q4IDFBZZR_4yz~$Na(%7U3Sk+gKS3YfI3M23)cKvwp1KT4!*v=ViooVz9fq@Hr z!%YDNtu|PuP%p)RVi+q)YsqHbv&_r%KkF~ge@yg8%5)0n2|!UO!yM|R&Qz8(%Gw;f z+cyMpf~ij(9=mF6SzBD94^Kr2Tr*LxR(QK?2-8ROsZrF$nVWnGi?cM9h5JPn!C@~L zlQ5kqNT*EsO07g@%fzjOlyu5>_5w)yA==;GYg|rl8_|cfK&wU$xmk3n-MRd_sYqT5 z7MM=zs^}nga`Mkx)c7ogH~1(mUAE1OVw`YcDn^@sYTK#+35U$6=L0ZgLoS>e6iI2p zO+u4khJsP)3phlBsbHg>Q3<1|E1e81>@5RO0HbM{3)?SB%0FyId#hn?uyU21h!llC z|GZDTR)Y#BP6Gh)1tdLrGH0Yavvc^cJqgM#udsIJRm9OvnCM%2Y_ZtwM8KZ;_ywCE zQydU?vO8NLSt>tq^*1o&zaU0_w(NAxW3)K~8OaMki?LCITxeM7WnJ)F!*~Ae(^%9` zK~8)mIr{SLeS`C}ob}Z@VV~3FpmTfkyJYe@ZR0G1;0}v~sHi?)+>{l%OpTVt$su|K zrJ5Qs-DE;l{5q;K3bRVpMFO}>n$`ut`cViYWuk)?2$hp=Uq zrZf&Z)GYdk-z)51<$w3zrM6?FfAHV_jC}v1cK*x1`d@z;waXUm?m;VL{`tSi3t3WD z1)D0=rsQ~~pqP2pcDuVnaRSZDj+z7B1OuM(0!tlc`Mv}eTn-02*!R8sn0s>cXx0#y z*McvS#+D;$H5o`NYizXTMOhj6(g4|JV&h27bsMX_zW9pkkDIZYhzkvmaX}W-g7E_2 zg52AYw|{oH3={J>EZOIyv3NgH7k*`%Ys99ovtbtbsHxx;KLhf!V$XKr5gsrGyN#Rp z^M)C5E0LrIOk6PBNpQztV`^AHnkX_S6^s1FzEDZ3%``_dGnXpl@ct}4O;@>k%RE0r z!KLH_g_+rGe@gjq|NQOG#VP(fIeXPXSr_l#za^efD$=G(&k2gc1Vm{>-Cb{0L^#`v zlU1(L5y9oL!@xXPoE-_=U$v@~f|-JK)d<7$J>Sgg@nxx89sw`5AM3J>@uWafLS0c= zlfTO3VW zEIf^-HO<5jYg^rI6gHc>Wa1ZQ#ZX>oX*SxZIKBK-oIS~-WD<Ajmz3SaIQXzCsZUHkf;YKl<_ z4lb4g47GyX6?BM~;KDo2GZ4l8*p8()RST^pZtCx0rj)W*Fd5;>Ea z*=*t{3o=y}Y%g`lQpYO)R(~F#^st=hlut2UiNQ=y>(GyaNI_M=yYXI*3tLhXc;1*_1X`Jk+A6KK1rTOnR81l#sxgN;y z(2DpCgxTG7bwHnZgZipwf>2PERvwALWjKVw(@BEk&JG}sn}bEz=)RqLv{0^^4{RQN z%|rqA2wLFPyFsT`W;@72^>fkeBp!Q^_#b{Te~A6R{`vgh{kQ0x4w;|BjKpu#uqCp8 za7)DwuE|(LW3VCmXYTp_FCGap2!hJID$!S8MJ`+*$Ay(zAv3jYMp%Qt;*XISG&0N> zLi8r=?rQ_nasV9+5rcP^H2?#|WqL^`n{p-Mp#B0DO=oT@u@bWu*{Qr3_^NJeRrJ7N zJw;QK?&_hv>L?_^+K-z*epg4IFT40Vhu?!+09~~N&rejM-DWdVPX=H4a9gfDi1WDa z;;!vuax6Gr$Ts`XEe zDaCOun}|+>$iH9+Ej;cwT8c=}gC`8S30)N4(sBpL?#Jj>uo>0)y9*V!vNztt-Y;+) znbcWS736SBTydK7#L_thab6Ov`}s&&ucr?VatupwCOQ(=&v#tPXzje~@5c1<-tFnz z8Q@WA=4q=a-0|vX{K3V;k`^D2qC#za@*#xs=%#%WDAI{Bo-`g4V{GR^g)XV!=D`Z0 zoAa|V;Aa|y&65h6*7_B|Mr~E2Nye3ug~_OdXC$Lkth@%(gxhd-S}2t=Wy~k-DZ!^s zIyb|vrz^BMWydn7QMEj};LWQ$F}0x^@%xp=7xsb$3<8$p{_m(%EcM`)5$ zU1?2;>Gk^@J?vBD4l+8eNr1C^wy!>$MjKhIo!1EPFB^dN8omA=eVcE4EXq z>qNXz*OIl2Lf(W)m60^8*%dlzj}oRj+eqWY6$wE{HxAG)NfNP*IR7`5x!r^_olTRf zV^#Q)3zuvAzcxMvGA%~p4k^0n*rZy3Or^+5^r#{5>MDs%D zwW`k^&LcfE{_-cwuFcW?tX#bLBc`F0S)2v}rkp580=%gS=uCDr>`HvSUZt zjP&S7qeQw(C~A13rbU$1GP$cynk4(gwQu+czf$ozF$8z1bxP@3|HJPkp|RBe@}KoC zmXP-&q<*p=iC?6DKUc1t4C((Z;`8IWUu@UvYY*?Qn|8hW^9A0!Ax7~W>XC7|V>Le~ z8q(4jH0|GIs#oU%t!Oq8O@CR-bGKERqr04ztrvju;^a+KU@S9&M%CPoQTYLq-LsIDJJgf~+8*E~ zpaKOy;%VBklDi2gIWwWKp2?yBFxl=^gbu5sWLTqv?R5hMc}{g``?1;`Wb5AJc97b-Ul zD*T?lzxsDjO3llyz08@U9W($fsRd%hQCg6F?Jz)mD!j0=inD>>s~Z>cPM3;7EjEj& zZZ~w5N~Wg)hk*9pQm|J=qnC~afuhasD}WK4&hS61 z?b_%FKoFS5u~uAT)qD4E;TV_-xM#{y`(&3Sfkb1s&QGojk}#}#Sb@M|sj_KJ)BL)P|Mq9hZt)~MADyVfiyq>)3s?!2Z+vD06^lRTRxf}+-i$g`j- z49)aK`%?-fF2r5QRDFuKa z==dphI310q73^rCQL_|HK5DblClz36u|HD0>^p6MqiBIM3$$SB##cdoSZF*<4I@i-2OfynbX#2pdhT!7BqiQ68_k-!I2+YKa|%hv z9|fwL%v0$=Bcsq;R?O8zw#`^2Acf@JTH64qN{zMAU>Sxh8|I?wN;(79H^f3`dg3y> z&G9!kj~4;D(VtMWNJ+h7;em%gKj+Y^8~@m_-4;#PuRu&3wRra6^V4(X*J%jyg1~-rIb?_6Om`Pn$6*hEWZ%P;pbCpd}~x&M%CQ3GZ_UCiyQW?AE%;@w`+0_UtgM zEPX8TEh9A08|G6vIn1)s#Y*;U+)%>L2M2rGJ|VKn7^~<%@f=_i6qz=pYhlL_v(~dF za?iT(#4D^5GU*Xc*MK^!i|QW&TPBf)v{PKQw4>X(2}HZS%cnURW43J9K#o^`!|lB1 zLHfk8CxWz9!|S^jDBho)KRv3Gft}788=!9ASTR2v&yOZ_cd5EJ;(2IeTuHPXZmyTQQ;fO-p^>9wU1lvhQY~xopC8 zlCkdk+!L2vigmxXx&a3N?EWo^#V=P^v*R;jRK5Hk79~UCsT`y73Ts8O_72+)Tbq<; z?fZ>(*0znfOU><@Y{m*S@*AHt1Y^%5I+RLlgsby`zVjb*ybcE7@wwIEL*u56u9`+H zHm~=;40U;Ta5p4>Q#L`7gik6NpV^RTwKO5Pv0YKwAm|CZBhi9=oo>-$j|mN>A_X9 zTBukx0A77kI%*7u@Ij&6MO6K&)5UCBDR7||P>}|}r08#g^T*YbwCzZ#u{2n-x3Mr6 zIl$b8=gYW3xhAx^&8mOM$)Zy=%Ocrw-J;adh(8xrz^ZueutnCaU4jdIC|3O#ct_fb5?6(>1`rW5i^Nhj;maqu<}lK`&*wIvMIBcV;oyP*98XG2e#D&Zwl2S9 zLk-9B;wM9iG%b|J)Zm|h8V#W4_=?oeb_DM{AYq$HoG8YK3S%|2(9G zQQrxR?M>@F^N~BAmi`*g1e^hMR@;YDjkGh6il%nJ)o_W^@Y>r1&CJBe5Oi6G9hA}X zA#%#FKZ`tm4B^{)bw8E_ZrM^1x*!c`WT(ni%2eA^LleTo$R5k6;4eUS-8`rm?k#rbu{Z~Cxxp*=V#$CJCIVC^oS z^lPzusFRD^#dNJ>Eb1Y%r(a{4V0i7^Z}g;*T>e@G^=wY2zSl!VFKq_s#+Ux*!F{|3|b=8joE|^9+4NU9k+Uvw&bHfOMA{hIwNy|9( zZ8=~2QKPAOQ1~i$Ih@AW$+oSLx)l`I1~(5h*|>aV!N|k#y??$ti9_%A^Y5BU3}zqW z&%-|xXxN(cAHOs0bmF)Y0NbP(j3~eOm@zTB*(IHWKjD{^o;(L)U?#CO@*Wci2Rb8KVp|J{E_ zkoR90(mzQ1>3{hf=&5phWXSn@5;2p6Kf)uVq|mJEk3XLyzlHPe`KOA+8T{G$Z17BP z(^_=1(U;Uyv4Ps-fOfUW*_7&9c6t6j`vvBYJuCgxPy-I)@hNQoZ14=QP3QV0K+;Dqv)V6x6b)9KAt06Qty>#kpl9@IVB zb+|Et6#Z;E(8HE&aZ9Z61P6+tLhjbpS|DdtcUClu!;2$Qi$isB`sm6@a3YFEHZc!D z204lg%}ph~$zf+~80x4~{E==}HPg8gAwd@#F4Q?(P~kMpnEKC7>M_^!NYOlyaqQRY zxi5>s{}uT4e2}W?wiwOv;BDL98w zslOrU-BJ>-^hb!hLM5)5pGb&qzYG`Ct(>=!{QDFKd+IRfo#8(Kub+19b6dYb7Wg6(=IxgI!rY9QRzGeQ9=pzl+VVQ>-!Z>R#bb5ogm3t%J?CYwsyv)(dB2 z>0>jwPUoZbwR4=615Tf@FK8>D--jpcNVF&<587Cs5h{7SwP;Ka<~Z)B)0#OGpz@~8 zolo);d-&o(@b_NxiN3N+tSW!vJ4BDffoU6^vY4kakWjaW0*7!*ah;3*YaE(``U^c& zpaNGL6Yj)M3^b=qxOIigfw~q*3xrO|gfftHy)%%j0Ei;;*iTD_G)EJ&6XxDES9_kS z1qlX8eaV%7otJ9f?yP`=8Wojk*b`7C_V%Fg*U5{idp$2FST2OSnj_C#8IYm=u>j90 zsg0H|7IiP;%esoI+KCu7T#?CMNE`si zRWDz1_Iw>-U3WD)4_3gH64u6dj63P66b+&D~TfyCCv2~ac(Ky~d<;|JT2O%-{Hb{+V{=AAd!U%-{H5|L@L#@FF0kk_?k}^S`kF zOewEkvn4UkeV=o{Z{FJZvqO`RBrW+lAi*G@52$xVm1zx5LNRbMa+=fn7+2>wx|m$Z z4?D;1cq)`7r=jyA%BYKNpU$-KH%d|k;+9dc#T`|ja9E_zZ?4Py=;#a2ZwP(4TRKDk zaZFdyj6CQ3X-Ic4=16k6o<6sUg~C*vv7gw>G9K1L-UCV3h|d$7P&G9YaRE!RD#j2q zpt_t;@XlgTauXEUalE!}+MM;fUHuw`ffXPe z_~HVWqx)B5W(~`q-N}>svDw|F;pYIV>a5r{W0h!(7$coe4D9AC5(4T{D`+Cz!{sD3 z{fdrV?&YP-IVLw`m;4{pFd9N!4DL=+zr0-K^c(t#Oz8(QH_U&E2rpTzP&Mo*So@V{ zfEe^G8*b6taUmjH%JXx5;J7IA+bdP+Q4NSv?JWBO%qpGcnD!k=<(vLK_U8~$(ZxP^ z!(y*Us~TEQCz^pxz6DMs=$Zjs@&;YjO{bEAZad13CyOyH1iqWfMe+*CCF}=J;;NCrzsR3yaOXBeFg00WL z-(I;-)-YMAesSCFANPRpzKcX0$ElSiwIH8(l2^P~O2S!^r*QX|SEw2V1}Tcu2~}?8 zPD&a6!wg=f4Gu~y(Gj4p`x|Fx(}OYYO@?1Xv;E$-$U>UTcg?D*seX|AtzFY%WCD(> zX}=rMh?#BV2Gvug6H^mSD!QrG!B)jsG2?7gw@7f5Ihl!>FxaaJTu=GAai?HeO_K3k z=^cgyHn`H4gkW`)BewS1Br_m7G2b%HC0w#zQfmZnK}(>mM)8G-V+XZR66z`p{41_2 z(xB%J(N5yF-U4BnS!$so@TSpc^oIdPCS`5Q#pK=m=eis*fnb>pRoSyY67<2zPvG8J zD!xJ3$X;1QwTJFXk#wX2{c(fI>jG#!2apZYymFpwt3iK?+ttzLE0hmDs(2?=>42;y1wW%g+7{SoZ98P%hD`w0UlB~(@N=yU#TCab zlhs?{=)JQv9P}+vEbjDWf|4^rnMT~(qX(L8g^IUK?4$XQQ2;UBS$dNgyf%kbHKd@d zioE=lkV?fIidzhK3j!R#DN}vAULJ&onE8M6H{(at|Ld=A1&opU=W|oc%LkM?dUWRD z@+b=XdKA?83d{Ye9M>jE?pa!;6V}um69Qy}Oc40q`gsg^Wo-EYQCn^>>lW{};zpJM_a)wjb-78VRBW?AU~%RaDf&z+mv=aB=;LT)v+=VU_F- zXTvP%F&|`OD(F#NT~SToJprVJ_swz3hW`}i$q=SSPV2y} zMLMZvB-I?Ykuq-6iMQs-m{#1qW`G3GWc~6IKq~~jUkh-m^iUr8{puhrJ^ZNfZMncE0d`uV{<~5zN3Png!>@`5Hs@b+T=}+* zIyH(0N?9s#pPU4BV{eceY}&=@;Y0oQnZDmXzP@3P#kAS5Kl92-(@nh22gw=s_QF*9 zmoOC{2ttKeKAXL0-#%5ja2ao)gM#WP6k`8>a0qm-qQF4Jh6l)*fpA^MCDKhdUeU|21Nd ziWR$Jr1oAxjYKp?RE*f0phi(ubfLtk8nG!A5|W78HF~wwRwFH`(N|H1n{&w0*s&gY!Z`*|8Fw(6j*^87=pDNPL-UZcRaAzCX$#t-$O%H1=_t*Nn| zzqzo*K1V?zpW+3~%ZYoru0MFNX zIb#X;yd>TZsK>}F2ZNee^g?ZO zwsOC@59Y`Z{MbF6kL7xP_ioX(PkLj4;K)Ns$yd1Sz-U#F<3tFl%-u`PfcCq)XmlTg z@tj(DY^i;RQqezWM^-4tlOX|}+x-9oBy{_7_=90Vpt*nGEZv42op2C7<|-Zk1ElDN>LSP>eCEn^U(nu2|t<$_F#p z)a!ud1$r*qMTXqvjhN(JwVA?4KPfeCPkm{RkISAwD%LU6KfBSv^BiBXL*xXTk)T+( z;O93=B)9QP@)gBCgQ;nm)YHMxRPPyjEtb%ETZ6j4{Mq_r?3v|RxP!z#O3dWQjz035 zr!UnY%|ebbH62}unw|MxXMP=6aC}=-5fWXhYcKjDba^@TFg=9xWTow0NdBb(BKvc# zKB2T^A!z#rwkETbBcfG8s|z=#j&q)F&#-{lt#7*Wj#-#$lj zr=8yq6wLrkCdA2Yi|1@v!Yy8qxm(_wBb<@vW3;4OmUSOwpVPL92lO)ZC_ZnlBnvlU zu`k~webxT@k+u?k_>M(Y=*L>k?1zik!g;Rp`I*SL_MUUD>X5jYzMPsMD6rDiz~HRy zkk*{SZidBuxZ^0vDe;d_4?!s@%xj?nPj@Tgbe3ptJCNi_p2B=RYaKC`yu_nbQaKf> zchE>3alRLtk}f?-n&?~96JuNK*`aHM17h*C3wo`aTlYgI_jq*_jKe!ik$*;VG}H*S!f(JbBa~X(+W=PBmgy=_yhrb)qc1rZE$$ zjciNOoV;ALcWe_=clz({y{Q0C2#i@B&AyYGxq;x1KphtuuK27wYfo60jth^72F^Sg zi5Ol1)k37iYRU5&XmN?CBuP*~nO+VW*=SxPnt!@!yy3F$5b+Up;S5a|!mTWuFVo4x zP$fkzn)pTd4~LpK?a*tr^hYj+URz=hNAZVK=VyWBwahK;KC+WExJF*~rlLxrt~UOi zjJvQA#e?bvhrt8S<9}-;171-1nn)Qk#`8EnC8QNePgK^A@I<*ii1PwpP#92lWIXql zlJYAET4O!RJ~P<1pl!uM?v}7OQ|p|^JZTk>L&X2fzie)X$$v4OA9LE6y^`_I{Al+? z|DMc`aQ(haqCo^f3;Pe!@6A8jUo8}FklOU4V14erF<0nYmYTL!7ufT~Tl8-!6V{Y;@14&V{DVH^21uA&N9Rd{(8_ z#L3Nj1nYJ7HQMSPOz0bK{lQoLZsq#$UtEx3BP~#jxbq}~1tY${eF3PK=X1LU-<0bT ztE|L7Ap{LR|I_b66QNSB7>syFg7mn@v)r0=5LUx&)C!1)vAdJPcx2$01o}}EOs!e+ zE*o{_gE5WIfN2w)T0@kgFKOu7N?d>%wp2c zwkluy3s^dROM%7xM~s|;l)OTV$|>udQg!vJM#y@@OUJ|gBj4J!Qx6m`Ya&(Qouwgj zF+2^k;PKA>04%t4&}gAT@~i`7pc^Eogk!UOqmKpx8SeTyauS$yZ*4c-N)G z;ZszVw3Q)Wd72$q&RX#Jq}{$=-Kg3mc7A>{ja+uG-?x5y!`}LusnPu0DL|npyUi`g zbiN(ge+m^glAdXw(*7Jf*ydfU!=9E@VHGCG(qX_IGNd@0ZH4|-jBDPPsV*v*2x-U; zkt@zt+kXwN<% zIA-NDpM?}yO@oOYUg1NM!STNZ9+BeGqw}~@Ya#L*+;y62e-YiOH<$gs$9IsurZl&? z`l(WkVKKgE6)T3+2H&|YWG?P4!Axvs*z*pz%3L?t7DseWqEig%^(7$QX5*5{gv4&t z;<^JURK&QmO^PmpOjUHHhI$)A<+OBk%ck_#=A4>IrMzcE)m}P3%6Q+=-KXh@9w(;l zyT9@&dN!cdn@nCZogo-F0>EVjwcQ%FmMx%+Y9lIUfd?yVJZ-S+`e_z@Qy`ya7DuP!=-*oYmM95Ms;h1zzm3mJL=qvw=*|c|-V9@~WfBAPi#C~Wi{FHaIn_BqkLw<#lLIa7qW@~es|o|HZ=hH zj7SPN{lN2R}qh10cF?}@#!U1Mv&Z3=wbNNekAj4;y;s?LenBz?Ky9qQ%nr+dYQ-CmHI|yZ=Yb1aZmpTtR~jdfVGjvj3?8R zAJRs7x%?A3+)IV>u>PoLOq?L36^s2VDR#o@7=z&_#A}N~)IjnKul1#Sujxm#p>^`1 z4I2-G?v=WXa&@F*c7)FP3h$Du<%>8Y)MKAi`?sBeabcD7a8HkwhZ7w??&P+O)U~1x z1W_XiZN;$`tZ9mDH!Ecu(j?|Uy_(PXI#~e(*@6V2nu1J3t8LMWN~CBl7!(zKs>PHRq2s&p>GAcW)6b-k7&xpoEo zAhi52^Gc??nyGofr-mY;b?_ipK-Emzwms*FbLK|w#@?5p56=cR3G$hw8`u2j>L;(6 z!Uaz8&G17bX6qxz8SwZUvkE3x)WTJlcN(<&k{Lm|&o(mnFf(zHfua@}x~aek;Om!R-|=s96ND)5NkJzoN!ctu6pl76UC@;%-?_`a*0 zk0bog-02b3(C4AR8eI|R@`&Bkz=v#IUSwW}Uf9{zkc+X5AP1YkkgWNX;z&z*k;t`= z@SIW22}?Vx+AtVU?+c*duETz4Gt)#FYQQNfDRS@~S~pgL{^+kwW{Qr3&-C~m_raj{ zj{04J!lsH|!=vQK|MG82X?611ar?3M%~PS-C;3U~!JSVh{*}i ze*pe^Lmnj(1@bx*=a&g|SsC3Hw*0F22>n9CkFFyNKwk+j7-?={KpJ+Q0p=9X5d-3d z)M6v0hEpBA?B?V6<4{@_NV^^yObeHE3luEHap!zlk4?acK>23@K`S9xgwhR}a6v>e zs&{6r^8U24iA4nHjOA2ALfQ80!3S9J7uw6=43<{^p7E?$+L>jzcVpgVRoDCFL@NUw z)d1Zl*V|#ME?@8_!yZ!~;yWs_tGz!eyj63_$*Br%Dt_JiUHVj4b(JCDDIMp`heCz% zUYCM!el8cj@o_HXM(!RAC#e~znuooVzeN1}qY5T^l#}CAX-8G}ws#4NNk(+a%f6Ba zfXGN^;ZA2IsEqduiP!Zkbq%(@^~>3^Jq0{H1ctV6m|*nar6Ppnm>ovA&R%Y#*=ci> z{*g~lPEHtiE~>;un4&%8!6gBFmdANLH6O>`{7LFkmxt(+hlOVD2BLy_2z#vaQtd(2 z6Wv^wIaA`bjym}Di7GcOZINHLCvnlkkhvo);_7Wx(OQk?HhAtfZkgiqwYwq2PhJ;{ zs{$m9UC;2=4;Psl-tO&L?|#}bnn+o$cXjQEd!8YeTg{&~B-qie*I0&xE>%gdx`SRu zyJ`kZ14*U8lZ5XBa&fO%{TF^{<;U;*LKeT2pH4N%3tkbq%H}dN=YgcaRN;t*XbQeC z`!O#GwyGhx4YgwWvH@b@nj7w=y$FY**^pT-vA}d5mYTPR72^*JxQB|l9bqw+B7$vw zmvpQ52o$Lp2k&0QZ~j`dxA}qkrX^3W#`T3Bw|QOhwtZdwGXN1f+Z;8TGtGRRvg=jh zQPSe|oTq$pgj>b*3Tu~ppC%HIxSSlYPyU0=xoMu$5a(FX;Hoz!SVHL9mg_~{3&sXu z+O+!NUTEIEWuUfa6=|qAKgh%LyH_Gwd_i#LvXvY7T>EnFBZU_d4s!nHFC2<`b~RFG z(4Y{n*A{P^K9{Jnz>T7BHBgs!~s#rOn=GGs?tc>Prrv{TX`B&5EO4Y^bw0Z>w5Mr)NbBnkpqh%2or zsks2re0AG4bdJz^bA*!JtV7l1mIrgMy)%KuJcRhoBz?}s;smp-b0I|}tlCJTyeH$w zWd^;cw=({xmRWK6>tO`g|qL;DtV<5hGErOo6)(qE7BbsvPs~N|+*I0xQ0B zL;b%|6XiuPh}(His!oa=im_q#Zl`VR=DWPSFa$|1x%$B+-Y+`!#V~Xd;OLG|B(Pf1 z^o$5b1sVwHF9X4dn?nj)#Rn3Ty%}ApVQWs}R)=pv@|^cY=d@lJ$F)NSA%Zb#DH@z& zKnrOeqiMKzKah&hvw(^{Ksh4)zH?`a{d4Ff8quH2SctM8~^|S literal 0 HcmV?d00001 diff --git a/packages/backend/assets/sounds/syuilo/pirori.mp3 b/packages/backend/assets/sounds/syuilo/pirori.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a745415ac03762aa9fc7cd946427b263df32fcc6 GIT binary patch literal 19200 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 ZyG;=``1EGgdW;};5PMXJ5u>#aT0QorW{YZT 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 Z??rrl3u9$@B}GMfC5Qj_{NJzw{~s=xgyaAK literal 0 HcmV?d00001 diff --git a/packages/backend/assets/sounds/syuilo/poi2.mp3 b/packages/backend/assets/sounds/syuilo/poi2.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a65c653891833c20d19db01e69bedc9da16e5fca GIT binary patch literal 18240 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 BmCXPE literal 0 HcmV?d00001 diff --git a/packages/backend/assets/sounds/syuilo/pope1.mp3 b/packages/backend/assets/sounds/syuilo/pope1.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..d6f53cfacc9b70edfda2eb7caa9006ce7384cd7e GIT binary patch literal 18240 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 literal 0 HcmV?d00001 diff --git a/packages/backend/assets/sounds/syuilo/pope2.mp3 b/packages/backend/assets/sounds/syuilo/pope2.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..fe5d95e292a79f4917736684e54c604994bdc1f8 GIT binary patch literal 18240 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 literal 0 HcmV?d00001 diff --git a/packages/backend/assets/sounds/syuilo/queue-jammed.mp3 b/packages/backend/assets/sounds/syuilo/queue-jammed.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..99e0c437feab80ebbd7df326a18b1d61d2ce7178 GIT binary patch literal 351466 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%0AS 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 7@j1chpzMZuF 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%0A#{O3;@z^X*uQ!qN}WaZ>x}YD9K;T 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

y~v#IriK(8W#RQ_mCQ840c-w`W0(@?4+( znu4ZGnI)z=YKpGz<6Ss8Vc8P1=57HGb+z}I z-uMfSmLJkL#LD#}ct&JJvWTE7p$FuC$v$#BY38?8TXSTbb=v*+pkp>MeA59vQz;N6 zF(+I{hcG+UG`v0-1GcckpzGN#G3nMce2mwfVUg4et&jmlD-t8n_$shqS+VURyJsUC z#9FbDzxz@+<)Jq-oS_xBSGkIh`V~y6YdMxIXg3}cztlCIYOg|;m!C;WYNC^*Mc+Zj zK;BT-gF^EWnuab2|3qPC?)Q{L?{Gf5DRIH1Bk~Ol9pmw2?as z$aj?jmck!#;GGmSk(m=U>B^5uO-2dD2B>C6t3rSV8H67l)WD{enh@RW%qtZMLDINU263 z{M7HT8ou;{c3@AWT`uG9ixytyceZ)@wnWpW2E7@99lh>*<~T8C!?DV@ncjqVrVDps z=WaSL+n66ixUC6drQbVM9diHF*APG3GOEaB7{OL=_C=Ix*l2|Nq;FIrNMd;BXChoH{dv?!?Xh|I-5m{mM#`6*S%P@nLU-)WB5 zQ4g+|t;Nvo#AUJk)R!U`B;GgQm=1)7m{OQ#ae0 z6S#l?HQ`~WrroV?6XLq`ygxs=8<#P)*??WS^2;Z6rRh*R#X?Hcq(n)yl^@aakmD(N zGRt<|3uk#K3Tv49Tkom^FF73#|1kUiV45j4HIKqnDX-O|%uNn#{j=n5qFp^Jw&~W@ z4)Jme(pewwMklt9SlH3!EB_9VVFopgL-mbX1MSG^+_nmEJ<3!_R*z{Bti zh(*f#a%^D#{B*ZJ*5s5ix_aEG&7KXmFW4mNu@O%ny9n|5qs%to%u-cy;9rZvZtC%^ zHOzn-hx+c0MAGeEt}f6ix&(=!GCB^QT^Sfd$65l1b2!2c>Nb?(?TiU2p7n`O{6!DC z?94$X87>JSC@~ot2o1>>;=tfqqqAdCAYmykX8vvd>)K1$YG*A>KeVg==VcJ#)6uy% zx#LE{Giy*r5c0qJChab%oYM-@yO)ftK*Ek5=5Z-z$3r=cgK-@kN<$50HDD~qIW=Xq zn3lw_npmp!Fc51tHkR2RnUPn!|Le!^ybe!UDUN*b%DYv&!HsqsEHRB(iA+7$eZXQS z5`D`s2W@7;2~e6=l8CofMb5hs9WeQ6WF&*UTA!Xu7zO&gsRfitWc)J>sUL z*1Z4eyWMy9-Xo}x4JB{+OS2-kztITNu*eyx%3P3bHGCWHwvXty7%wCx(z*@dxI^eziP)YOH66x(iq*Ge*RWl;;;h3aGVrHL2SH+fJ9) zd%Fr@Fg<6oo`?rT!=#$ZPpnI;P@f+Xed(Dzy0%r+P+**QRB!E1wHfgFiW~maxd`DlV^fXIXiWbI7zS zuK2_BK`y7b`?lL4WnqYFU{4jmwl_Gc11*j-`yYNEqah5V5M=*Vxn})e{sxKd#VcyX zOIWv{G35O%21=2@S<70%fiGyb-(ps1Btt9UYr1fBC8|9e!C6vG*;2q z0vQKF$fgf$^L``&P*7tS;-n%1;rAv!#k@GsF$tTSus1hrXdgr%Oj`Zva1rROQ#3i~C+S-)^qy|j ze#)cXE2FXTpzpo~2|D?Xbi~jCGnZ?V3W~u`qifE89UBx!n&nYfEW4x<`}&EQ=d=s% zmW6YlV;BRCFW#ioFRkHOCzzO|x7$Ro%xe)YTG@6{kz-qf>R9{5|p#S!sJEs2qn?oCq{qMjI`K~LstM5lnV@Dm-`W<-bs{v&zYfMrF{E*~YWW(JSL2BnC zRq37EfXn{+{SU{y^GLsng-EqQJPn@hpW*ZQc5#@y-Wk`7BIzBeZHzB^GoEJZP?Hvf z!nsjk@~3Tn7(95`K`9s(cz|v%94-_g(9K08*8a+ZA~}hF#p&VNTAcgCtN1hSlk^PB zTw>%5G?dqQp^SN}-tXVxw~S76pSlPPk0{`Fx)hF9-vo_sHZHEgf3|ECZa8nWJpSyv zzYp=GuyU5sT82(x9blR77rRpxHi(Xnue7Zi#e(NAEDq`|UySRGdS$<#uKAgle|hv$ zlWK3%kdbqqaHwIygJ0w`G%fwv@~H%=1M^lw;3Ep-XP`~B2K-=vOwn?lfJY|oOiT)% zm~^hAjZdE0qi@`Uh&ifhKq5}*CZ|g2Ybi*s?ak@EG6X_2v7rp63j(G>V%#<#i zaAkZ-F#58M-Hnr*e1i0F-SPVC>G@|&>RqrIdrfyXkh*%(bgLK6jAn z$_+SigZ!{8k-VX1^w3kKxx=!mX3Hboq0i4J4lI$^OID$H^<);=nd?Y!u|=Fkx6+eY zwy=A6&3|Ib(yrZHStGs=xR3u%I|W}iDkhk++1yKyD<#`5q69~?8QjT$=J_nTA{15O z0QWc|3h~JKuscXl$lk59W9ePmr`nEAciI%Gep$r zs|gJN*Uf%dyXG_c3?#d<`I`d}bb5RxB!V&GML}qe+tIGVAlItzspXNCjW1X^S$cp6}k^Wosw)D?4re{6W{vZbo*b}x$moK@|qRD92wcvG+Zi-+k#FeUxhqc z%uffN7deJP=PH5gglxr3In;0H{>j5nGDE~+`62QSOT4)t*;hm4#!avCW5^AsRL8%ZCjU6pp z+2(P|b+zG;H!4}M3`%{Ev-q40W6$dP!M|)YOdQJN0Ohsw8`oXub+IL z+1ZWm)#<+V`yN-F&oP_5)j6bN&y>ZQRnWt_n^?09~GEyZkNRT9q zmeoOfqMCS#8mZzNj7dGOt3Tj>{-a+g(#ZeaPma0VvReOu+;0#=@XJj2cetysNbvEk5TUZEs;UbvAEWc#ao_RRTS^RvkKy--S2Llav>t~yHd&OMc6J_jU6Ekk;6utkOw$;! z(}+vdAV@(29u1gU+A0?<_gh;FNHLRStacJw6K~nrR_mX-TZwB@s2$x3wmjR#G47Hq zSE&`ufu}k~BL#CKQKd6)T64^6_g5D6(r&>CB3}<<#6_th=Gx`rLW&990E$v*FKCw+ zs-YgWsL*%PskQ-A#A;T|a9+xgKSr2201y?_Q{8Z@d_5*ut}K!Q&#`_C2h7EBz^<;6 zhu~~_QH5XbWpe(-N1@c}Tj;#&?v1oFy+nF4Z*MiJJ&V`(mw!cpkMEUn2)*kSBStQf zRwqHtUxSt!I9h~N&pRcy=<#D!!>fo#Uq)iE&X{V-D|Hd(B$78)Y<`&0MRb&3gIX%e zr_?10WpS5WqY|BGBS48Rf?LFfk zcOx4Yn9YQ%OxV)5p!x0zv)wgWoj)RJUZWcpBHz|^yZx-&BQV{UAe&Qx|LJ-tHC3}* z5kw7-m?b8q;Dv^YDX(a`RWxBXSh1A1V(9qAkl|)yUpJ3KHzln6Llr?a>ky<|J6m=S z^g&5sV4E{L@+O9QCOK8R^FWYgLZ@4BLi6D2tS(cAh0(TO&-KRt@BMv1kmme<|H4y} z^(tilCF=Np{ix`F{h`I1Et5k-WAu25uuzt@SSTE#l=bB@CJN8|bI1G*g8E1s%Yjb` zxdy-Om6A0mKbneuefhU`8p(-`>!i+*9_-d6T(H*vcj!=FZZm>;_nwY(GsQz%4N{^e z^(eV`xM;{umu;%{C!va<|_tUi{NMZ!tv%nzC|f`+LQ#xD)iJ& z?exq_dxu*m-`Ki#o~Zc^PCNQ7>dc|ddfPxh0iViPYlhS-i-~CsA=dE_M8A?qIoSH_ zX2s!7m#-AJ;Uy-B*zWfW)rxXFn z$yFBrS` zX;Q*YYed2X5KJhNKLUC%2`+{MuptPnZK_L0P7TIjpaLpB(|PW05?cJln(|9_BH#Jt zU;O2c4ZxG~J8hcMoBr)BEr{=5p=wX-YOa~C!|`{8fNyaw6|O`nV^njp)YYum3}yB! zRBu=%LqlGO>DiOCrBy}|APb9em|LMVUpg!#OonOnP#&Ehor(?u7Hxio%;+QDOJcu$O>c2Pb==GHpU4u;r;$t;tgNd^NDGBRn zqWlJ3_y6G+l3%w7$)B_xbGe*{^oK(H3prQsvk?AyO0Wp3)4aMYzz;s;D60Y|J?Aiy ze@(bF&+$%vnJF1Ijh9*jOLhZAB@In{QiZ=6o%&CHc>Y|Q zQf;stPs!VexcZ)A8j{+e%vO6G;KWJ0X$Bgv{{Wx(w%TB%LR*xSd5EvvO8Nd&NR^8D z%8_VhAp|!B>Ib|P%SNVnvL1+mOLS;0KeVzc8&{*H50azaC&bgYN5d4t0YhR~<-KAp zBEqF6m?9K({Gm*53y+`l7;T^HdMtZ?^q3uAJZlWZ5}w9v9e+r^6)j!r^*uh@3&ISI zKld-zeYmB~E%#nJw4-grD?0hvPC40f9ODaE^xm(%oS-RK%`@vY|4e7#{eJqp=YGnH zSiz@eqEw*gcxP)gXGT)8YwK!>q5O028xavPgUS-4ksLQOtC$h|Qc}%{KByvnkon6} z(5C;Nn;s`*1(zaC7K08d#to^xsNi-xuE+#>cM;ZHYXJ*s+vtwaM=3%sN>R}Pj1V|n zMtzmzmE7v1DNCJNAOh|7AF_5%AXRZVUz(VuXlS%xN;}ji@o>Qx!K0M_#?J*M-Y# zRZR*}gVXriS-nNO&UcwFE0*|j6@sc7-DT7;>^acXehH3Psamn=sn~9Dhj{BIF}?%o z-)c9ccJw7Xf_UDE)gFp^9D@keetnE?Gb}0c@iq&(cAQS$#d!k@1c2RKGVr&l%itZbUw@+@gy=c|9gLdv~-a9Ss~Em3^G64Lip#&|L3ow zApA4Lf7B={!4%!k?1mI+*=08?$5+7A^yH7K;CxPVv*#*7!>>oCN&e1GNTM$xGF_pm zo7EA&eX)~$F00#rLD*<_aZC~}SEwMu-x`IJ{A)@fx422*@d&KlNvC&;he#|nlEsx` zFGt=WE4P_m6~A+3?=TdG2TL}zEY|b3+RdK5PsE}~s~X;@Qiol;YUxH+sMe&$_genR zKr50c{2Nwjx8G=cVE)NoFH>%0F59RQl3oaoTU{KK05+6_*cEiPAHf*q2{9T5R!H3L zPjmF87TB2~k)cSv#6oHjP2y#;NLWTV*kXS(i%Tk_U)=w0usyz{FBy+}-#C?fssrL| zS%+R2^O_3%$9*5VKD=Whu@N@^QA6&`rkV2!w-%H^i70N%4WWw;`$I0RUW2W^nE38; zB@8c~S&}YPJd>p*9-uo`H-T^kd~e$}cCnd7QM@Mi*B80NEktn|}d4%nItEML+IbGriGu|ndCg$K1H)s?6w(u$)={%IbVFIXp~rg+?x!Y6#6 z(NYEwix&ay{jk1FUto_f5D>sEZI3rYw$UPxcwOFlTLBMEJFrQx$Uxbk%C#=cikIBq zuA6qd&m`%qRnuRG%z4po)ukjvVW=Qd*`?|Ai(qi=#anxrr)nW$)6F)Vkusk)>2ck$4NAA~hN%6dh*3 zbS0jSM}`I^vM}=tih%=DPhA&*WeHzPRHoJfm4fC^VJ!dBe^o3 zM-9rz3+p-VjyyG5t!`E8u6msEj8MVXt+HIXZ39f{Yl7Oh42q(zxR6dL?x?W;@cRN- z3xxC!Li&&Hnyd#Lc`t}+PGOiTa;72qb+VBA4QL9A_9+_Rz!@iF!bbV1k-w|7T54z* zYySJi_D}KzX6xeI=W>}5nWd?u{*TrpP%v+a%*VggKc^R8%Ww*#U*wUf2wFAG5jZ@v zQn|U?!$W8$X>b+mr??l36!m41I0+IR1d-#a=!zAxM;uAA!Y<8nHwebTY3y-_H8t4o zB974|)VgU@61gTJP{o@tXX@v%pmPn`Y!B}I81cJTvb2d(_oGFTgKwewl!O_=(s9fRB3t3}Y5&GAVC!g{rgbAh=)Cs zzISQIs-qSBBat0^D zD*Q2yKi~f~&VSi(7kerk>^^||;RtO9Q<{vBD!0~f8IFVzqe60WpwnN-V)x+Zjmo7j z^TL+U@-ByQ=;2IOX(J!+J$yEfPxXK8o%c6fU%1BA(HUcOVlbokUSo_=MkhKEy^Iho zA`+r^qIaS*dhfoXm*_P_5K*F~XbDm7LwZQ!L%O)SJJ`trqcSS>zGA{*x$=RMlx)h7o-W2aAuKxG0`m zYiQ9y1bCwsPDJ@|@c_sH=`afnp~ZqEy2r9QPgnXYNIzo^;c@{Xbx(I*G+ zwPn_RZZ>(**ZX+T@I&UECOa`T8I2adQjhl=v@A-J3?(Ul;P(#6%EU1ai#BKTK=&kS zF;VwaW>13!#{A(ou$p?62WJ#k5?b>UTG2w`A!gj89~AWl4;>; z?$8*G$uI|K3ZqLpV}G@jWDfkMgiOTN{&eMRp}@OEv>A0zBa{^|EO)u_{}hxpnf zHa~@(=l|8uA=vyB?EJz!wtik#syv#b9;DGm7!Bc@27tEWl1@IN@i3N(x(24x-{~-a z$8P3qB;Mn&6KU-UeR%O(&%iMSV?k6)wBgieeRbGQ$W{MU@6Fi^k7L-?ib*?-aIMd~ z>W7yPc=)fwg@!bo$lO)vPMDfrF4T%fX)A=kdstiV=S}(QRp-=^X}z}NScM$7*`+bB zyre_T)5i0dTm_bRFeA*WlS?1Xu{Eaw8#}Q?6=|&JLlH@76h~1Ps9{;`X?3TQ~s%!tg7A ziGy7z4Zy%aR8DHFSR*_B`M?N$JC;^r`tYuG<*5TDF2L7gkKVz!MCtz3uif=({kbC1 zgUciN?7T}Y`n~@q=(K>=vrUihEi(g27|$j)UlJAv{tWfr&GgzIovtssF5t6SeNFEW-PYQmkQ8l&Mv&}f)JDN zH7V>X=nYDy`|7e}fYl)Flt3eXVwci91YlWQo5P<0Dbf|r!vK-aL+CeN(%ar?QxTmJ5m#thXJ&*Eb0tx#(V|jpRj$I83s-5mCRt1?-pIt&=w9+1BzPXbB zdj@-Bo72mivuJFXd{7j}?pori=C^8=T@f%!XJoq*sp(W^@bzZb(j8f$zqICV`@m}U z?AB}~hxyRB*<9@5V0;g$KAaRfzN1UqPXQY!sh>WPzvT}N-NJhxZ-M_z0*ALXDE?)b zLehHdC*Zhe_w>u(xIZnKYW2S^;F-&{Oz#%NwX(nU2z5bS8D9JE8x@eN&H z@hmumB5}qSKPij37TM0p%5H-b=pRSqqH2O3SPnTv$FKC$+6Wrl zvtzey)~QQ_khAZ_e{X;riZ_0NW(I-u8+gFO(L46`!UR{=$wG$JMvdvwu30Ra2y1(g zNjPy%RTwg-5D=Ruzc@Vh4wuJ?;CYr;?)Dx#Z2Vn7Z@7|t&ZVop8VzNX4spAPnUTLj zcp=1hP@+MyNlpTX5dby3h-j8MiIXZ&)HD+^raNZFWE0H%3vKDsDs=B*|86&5 z_f;E&hzLKkJ?MA)b}4Ps-nT_kSM$K}{~D{L#`S-$0e=1xe<@TUn2&6XQz>s`Mm&48 z8$}7N9oHgZrV=po%b^Fpd{95O@oaOWI&q$I&G2ddjFInuJF)auAgxHvIF}p|fmA9o zcur*KwjbLl2f-}KqmT{7O^^!Gxem9^lRwdx%M+vye3nc;`UODsg^KjNXqqgfI zmZ~u_DAs7tERHGT#Q?vS@&L5ss`3{gbqWo`KmDE%uaNxf9|d_HVf}O5g}<>X|I1Ig z`tTInKf<1WQ5r@P5PbyLwvW{-)^B;3v7$I1LCPEqN-&P^qFO9jYC&V;5m!tx`>e}DUH~w1 zD*Q?}%0*|2SFaUvEL0P5K}BMSOD;d_;_?BQ{xPYIUVlJLtv*!AkaGlFf z$gA3xAf6JITyJ=pT<@jLIEBs#rMm=mC5V&UmN=_2b-(pED@M#a) ze0BO`uW{uil~T!jrzPM06>sMsHJz!c3oX5Cy>vs?O|2~`8eZUo0I=2^TZiX0+qiW# zTYS~G#>FU4_=Mw+N(D407?amF-Az5UT6TThPjq&sb#&3rDAE-LwkstuGEaI+n@7o? zNLn#CaQw0j0uDRKI^b5f4X>45)es*YId$2Q!)K|K9RO1#I{-xmUf}XAqX-(g1Q8IW z;dJDp9sU*v5xaD_I4Zgj=bMhD^lf9Jrc^@o2t7S%I0LGI2L~bx4GSaZ{HNbj;t{O> z2LC_)YR36JmfyhMKmXHj*r(oigxLJ<2nEKfOq2ME_#Hz_tyN@sPv4uU%Vjp6201)B zQZIY`c%@3yF640%5jQQ%xTLvH>F?sz(cLFgE0VOvn&=TCvAv0RY4C4_YUOoy4c;EY z&JJn=y(z`1`kXYwTylI+lce5BH+4FdPHuO9-Ku5}7tykaXvv!CY6TOswMzCVV(;QHf8}wJ zTzcdzYUYbPps6q+bxxW{l*D0xMi4cgV*bhVe2n*c~ z9`>Cq(X))vi=^&8m&UyDlg*rMH-MW5R*k+?NmvU!jr@K8`@n62E-d`R^Mh;CeGGwg zMJHMOu(d6}?qHL4voNxMYPJ9(%$;H1I}|otFXn^rwo{y=#5Fji4q2V+?5Z?_4WwIW zF~eWI(JixB00@#^KSA%7FZQth5OGS+1hUOtr%$@b1l9lE4Fvk4lJT!dDEc6CKfv; zYr>B45XWx6lqrElyleKN>yG`M_n*m_T^+V-v8YAua#;r;iJOM^I;1 z#klnZYypuRIa}gLvw$dOT+<$Ir%Tm0p=_(@OipvmSP#fqtM245rj+paf3G0+P?N_+ ziRjl-6@fRq*#U4N*aGZukJHA62KdZBKIR1Wm-bte=hsL`o?P{Vbg#>aK>4oz{23e1y83F zpW8$-DPw%W;$K(Is43+W9}dp#YAR4E!Fet+kD@Ima&~AfFXG5orzIpJD;poRSM0s% z+^{-qQg2#ky?r^9>{sUL6fphu!Q{8G!&6feq@uN~@9_~EdN^e%ctSYxOJ2QDh_Li3 z*-LqSx~&w>7=2EHMhN2vwfTno#`Bjc+dFnd2evGOe^9uw)+ATFqAMPjgvc3F(VTX$ z)puNBoCCZPq0s(+`aLFCevjp!d4oJpu>0>n{(1NCx(4fig`HneUF<95(4a)FuX4hk zJLjA$apZiiav^Qq++bW^5lwf1YmKEj+(=Mv;R&M6Bvp0uc->9psHOWm+zEJ%4V);{fWZX!i~!uxJJyhS9f z^jIPq_fThQ;l`h%KeC6r3mQM71AKx9gf?mE4ye9LzHc+h}NdIa7@lx7T2^h0n5)lRm!pLfmhg;kTKwnQfC-vsH6{I5U)mz{alE(GU;2;TMZN|-%y8OyKEUaueB^sIgQ zecslON!}quoHAC~(@v;^S&2;Y-iC!je8uTM&b*xufmc1mnj4RV2zvtUj$gCulh}HT zP@Q$`2uIjA{tS<|88l1|e@Unq`alR5rcS_fZ`}7*6xX6hTyt;CBwVT=pgf|@M>rU} z9!aw3!AJ6L7_!BIq{BIgT@X~J@C!iKd{&HYeP&y?)cpKCA0QO?+n65|mE&`3$CPe? znf4yNb@_A$1;l5^KU2DA)tXqGzQ{ z7d-G9Ab9sJ6sb&10}7~-bv|oc6#%SpYO@3?5EA3?HU97ZOEGebo!{3E@;n#D&M(O9 z>$XT_GG>H|4^gRFS z_vg>E#|7Nxf92+3F<{-es}wC1?{rYq)f;H^OF6*-7iDBuEKfEtnG@9|fKPBM9Q92+ z^al5UiWh0c>~KJ#KJ665QXKF2K+lm2NGyR7V$~rc(3cSx5@Q$-szeOa5w}#fpeFhX z4E1`2vq#B0Ya0D?wxHzqBOELHp812V(glIdF9ddZi;?7yJPHo(vwLQ~OViDBNpBwY zM4{U{njCtz#!1>z1r_*n^zvcKw2b;Kotc?$pY`sOzm1#Ld3YjFwel%a>in=Ouh-eh zv0Ha$FVOWaa&6bM487Kx1}rP{A+x){(-(bJ&i_yc4FjS@m-{VZ2^`L*mPW!hV$H>K z?i*Yj{iMN*A!c?y0w!(q^f#2Nxha;NJ_0o&KNlo4{3$Z!rq^V|;?P(GtEk6gZC&oJ zRFqewQJ>cnsJ_U+z+=__gQsb&yMbnMdB+!=9KZczmld0)__NbqAHVe7t|Lu3y*02P z@XjFQpm%FPe&VkZe?1kwn@*SemvN4c+_t!0%i@O(juOKJjusyqa)`q8^!=&mm>w%9 zr$LcJ=dZt|hx4qY^ct>1NugOw#v1(rZ7KW(I`im^6kjUClj0S zCzSvX<=DE7r8~=LcFOe6A*EdG#ZjF4+}St&@<^GuP!P}P`{y_T(aL%6yNFkPWE1V( zqn*;6JypmsWJ2FA1A`$n&)lxi9!Dv15{1c;AU}dAGG*hNl&J5nm!Kyy?#1Fz?tY%% zc&Fy^=qZU@i_xo%T^f%sGcIBwhi09o_lALA>SsvLVfQ-G^$YUm`RzWGCbI^Z(UP)q zhNe%1wk16LeEt)NMy@(lP#A5f-Hw3}Z_9Yxkk14?U6Y);OlRizz&-bl+oHF>{-C>F zDCRoy)j9dOKJ{7Npp+l}-c0@aplIm4MEHws0Uho5i0VKWS;@|Ou3_IWTx>UZIpk1& z#z&1&Nh$6x4T+r$vvQ5L>d*F!3jOnV$z8~VlNdqXh*i}&@ha{kx#TafA^u z_>>yH_^02W!9=oH{t6XjvpeJb%@tceHy&S4V*T4|dY>3$`N{V@_zL7keJ*^O>XhwH z3YY(#w={hV=&@&7ezuw(MAaiRnPA{Fy6pHn0U_TTr#aE0p;cqzT-$T;%GBI_+I!s1 z=gIJ_fN~K*A-|4Y{DZPtis*C|kw)Yq6NNyas1_K({BRn40DcGfgmU1wpckmZBjzii z*KiHW6A~1Ul?0_Cx9#fr_<=-GSrS~(tdHgou85jj5oJ0o0+?dohA?LI*V1tXW=ZL%rg|<=vkgtKWnCcCQVnxpi+=IQn7m) z8{}NmFtT@b$wwIM%GTa)UbB3gmH|)EHugXFlF`;&v@p64X^BwIDp3T1+_4m5lT4N=Z8MysTC$biIsS}!MGKww;q&!C@~S4!4^Sx;E0#7wl5&KyU*L9x z)x?&xOLu4EdBJ6AH0cdNBWk9qF{Cs!t&^sz4bVulx;R%|?t`pR~k-S=wgeGv#caEW^$J@CpAtH#gW8IFc7FmsEmg78wgr*8!&Xhrklm)pt}#s zQuY;?y05 zo+M+t$_>PzVGwLF5*1`z=}Nxql2{k77xn8<5!#CRPY!~ETkiVE{9~VB%Y-!{y{(P z7<8Z*_)8Aop|}Lo&>1{m&C27SP05b(dobTiI;tlz!C*1AK2ICR33o}0k))c+N0>i< zuxG+o;;|@Jt?A)v)oWg*y8L+THKD5ZM4PGUt4f2GLAoY&75ybtPdFy8mc(lEs&?#F z&go=`p_4z$df4M_x!~A9WJg_CwCuZo`u!dq1r2yu%@s6%EzEu8D*VR+vp1qGD)xb{ z#XNcv+Bxe_pxGrtKzSuMsj8i_#GQKO+6lUL>Pi~GiO=#4EkX_pTPBc{hboWFL#d}s z#nm&KvgL-+sG;O<;ie)=$jYHKcB&+r0@w6(&0I%^t#hbqViKo_D+#q>6{qcSv9Uv@ z?Jr~%s&3E#(-a+!K|WO&7bUR|f2x>~RP$Vd%D2Qcn;-KP+v0nS?}2^mQ6;mFc1;yZ zPwL2?*NXcs0%>%Be98u+B~}X?da49FHSFrpgE5D#&z1_1hQ0rpfbWX|@=@Urh$=Ua zBqh`Gm7a|oXR_d=yJl7@v%ycZO1(8J&_DgYf@=;4ioD68o?r2l7n8C^sfElPwzh~7J4^b);9j~QKb5hXf_AfhB92r;@KI*~;0 zA|gtn1hXgK_uG4&|IXiMo&7A+);qJjPr07!y6^jX@PF5xfd7}K>Fwe}_zE@QkpY0O z;Q$B`2^kffj)94l9l^yXAS5g*E-53cps1{>rlF;0U~Fn`WrMbNcJ=V|_6rCOiFk;O ziA#Kxmht#W?$g53vga>qYU>)`ylZLy(ACp7I5avwHS_uF{PN1i*7qMj4~|YwFRlpx zOHM~wS4~n>9Ek*d`rmgbh35sYrvf04)kxw)uwsNUj&Xl8=G^v=h z`louT4|Ox|=wP8KY0?ybP$?I;Qs%@{TKLj712-H#UG~lyj~v$ysP+KgGF>U8guARMTAFI&Ga4Ma1au(qK+b*GSWhlJTMwH9Sz49rEOr@PD6M1|hBE~=&%4S4b z`7{cTuZ*VDm70pWiY7tCc%WL`hQ)FRN|%|HV+ntp@!1sQv6y4RTiPyWatqtukz9?I z+t3De(0!tIF$Wjq8rAKQ*ao@=z3w`>NnRLS8$3>SYCDjRS>}u_2S`EK@6?U4k2pb? zLgJN}e#A$N0*N~o$-Pp`?R6G^=+N~n0+(OJtmq!?%u-gy&yXKiN!f+%CfOn*bYLP3RF)D65NHgln+G92w_Wa#0AY-aae;uM zF|zC|q;7aDRvCrP08zmfApnM?-sgZMdN5V>4-6OQfnqWiA(t4R6LwQE{6#rL^O2iL zL&duM#ppfnq?v|a*BW9gLgcvEQxXTrrF_c=xhsYO8DB`=muF;N`G~0awS#z8x`W{3 zX4T7P-GAja?(j{3_j93;1o=O;Q1BS+Ly#&n&c`|sip-TFBuwqC# zU=A7H?I|v)r7opx#(V29r9gt>6FU-r=Nx(5^$W>^0wc+QU?c)iBH;H9C+TOoaHWLE zWnf**4ZPnDupRuk7)v_n3GOIKI#84~2N^&qKu7??nEX{8fAQZ{{6Ei~c>Lw%edf2>7n2d^JV4!48ZpCF#cbwl=IF(3>X$Pc3hv|?((U$C+ya@a(o zi5Oe>L86BSP0`l^zo~7D&@@{cQ2aUfM0_13hJ>02z`%?_4G=RDCO{AhjMG&N7}yQ32|ejMtWL@h;7c#5cO`!Qtxf`5nGo z`6SM!dxRMH-Mby0^7(7)v{j_>?&TD|XzNV+z{`p~^6QMpd_(a^Hz9ZN8;aL@48;p) z?2|cSS9JKlJRuI?Vc$}*Pf|brP&RU)`E5(mt+V>8ptUBc2%5v=j`UN$9ug3S zh87siBbvkr^k8X_iZ~=P17s-CZF6726m$bwK!!#}#IPe}u|!B_To{r9P(~7=5J(U} zDf*^@G036skL`AW(vKzln3(HC)}x;(*9BB9H8Ax*mfZbr3k(aB?Rv`;GjP8%qxkES z|5V??c4GBnmES2onEU%<%-X}&s!h+6s&Dz@zz)f>%8(f z;g`zhJrohllbd;Q{(LYgz!}wJUQ}80_6w=Nz>WUr%ARz6IRBSvS#ec;0lJxu8uW+D zdU1gkeQ^p7qTFBdAOJTzC=*Wp9MDeyv!Ww0XnO>>+&Q*oHlzk@W`C0&hdzVJqW!>B zXmQLjnhA(TlVMP3Fu;1xRbBXd-=oDp6B1wF-NR2P_Mg0bJj3s9YYA>Ir@m(T{C=dv zjoE$ju@LwxawLy8(b7)W(aE945^GajLUX{3z3mUFg;)2CN%K;-uv{LD@KKl}=$ zpMb)Zk~bm(_k3JeBlOc)C%#`%6Yy(uyQGVN-(9<7D=#yNictyf)klo`;E6ZdRvIQF z)U=TRnt?hLG?w2Xj*Rh^@*gPBb%5_)1ne*cNgv>Sg;+Amg zP;1$(`3DbTpOq{UPU0K&ilcMKy?hCzU?V-&$OmnYcjR7*Dzy$x%{szAgsrJ!nz8PJ8{1!Pfx?hpE_;iohBs4ug2_`egTmK%=r zgQjiRTTI4{cgR9niC@(}JXqIVl^VL-%s7CVXU>&0_WFbz3Ey<^3`iwSYurlR3(js= z(7)HcC?4jWJ?rJ=7}kCoC-O4)l|{^h-;O%wh8eY|-;IM1{+z@Ufw#(}M5-;mQ3UnG ztkd)>=}U>I`&UzCr7}3A_*a2W6-g{_@oK6pvTr&`Qb-ousV;^am{Rb>siILJ$5Lt% zlpGQO&`2oiC6X9qgaoUOAwB<6OW4B_kT$4QaU0+l(h6gWt${C^UFx21N~pDutIPA-p|eA8kpH}5#u*nw*dJ_#!7^H-Ik#55TK%1RH2L;)lBh5cN{=FyN>mL{&t_U>mS12mu@c*#Lke z*1&*mGoTONgh&0`S)0Fa@0lBsHNr}B0};;#Qdc&mzJ^-pm(N(zW~URI)T%E%dhNnX zYCZ4u)G>JWAVL#-^K#WXin-wPtuy=_aZ|phew^`KZVn&C`M00v zg|h>~I51F(;{pleP@q$sAH)RL3p40SreW__ya@dIg7ZiB9!pa{Beb^52{^@N0=!5P zWi)j^hM5tdlxOXgG2Z{zt3N(QU(*fm7-s*xCHtoOMHaiRTIbv1+59+u=^`)e54Vic z)1}~cdF6ljm8Jf(AFc#hjqqKhc3mdmm-FDqDfN?so|BFe&;!TiROyYdP23X4nEsmK z>&*3btxbGy^O5K3bWEy;Xt8cR$DYf>KSI^b`O(wouVx&@kvV1ph2K0XR7YNGoKZb= z;bYBP;Oh0lZ1b&7AJq9-)iKgq(r+1*_03I-!9c4V2`d-caj`qRJ#Oy=t!iWeOAHjG zj8OqwVla>c%qpxJn@CX>!^ka{5_!7wR`2$gxUZ7#DZ-?d(Sx8BEH|KmhDYPBr2l%JbBFi|z-1tcsSH4Q!W$8wm*1h#mJ69u@n=V$lOkRF*35_DO z@51SBVV|l;uI?JXs@3dlk^3N$@Z{58+wS-Gb!+<;^EYSsvT4LRZY-({^ST6?=vG@~ zN*+CzuXWPzR5een&>3~JM;uTPY1VGVmCr}u6!o}tX@MS*WYyYY+MX0&#>uevd_09= ziQ}tsRzgGo6vs=LUwx1cE*gx)%|HsfykUtwMDU1DCM#0sY6#(8KPmRUX-cUsC=`yn z2O7a4fH@p7;7I})NCEV`qVbEqTQlc->NO9Su0HITNc~X0*SkRFDuB!oN)l%dz9v@G z+j~<%y@Ip0)}n%ZAj5MBCM-)+s`QL0yFSM-h7 zx+Lt5nRGinSzB$j=g{}wXDEuVmx>Z_Tdww+eJENIx8ot|wSs($(y)^UDHTU_ z;)nC;wWI(kh0eq4wV__yx1of?6E?}Xl+ zYv*`CVwOPkPOMDP-#4Z;XV2~MWb(_dO+0iQVl%aIkTU0renx-^?;OE z&i+kKwl@91xhA4VQ{c{{j;>unq_<^%cwv#Fr!FNVLEo(Kh0cSgw2|sLax)tD@J1?B z_*^~Bc)4F-vn!mhdU?7`J*-K|86kktP-zz>ujLZd?-fbO=aflH0U#(M2u2o3iK9U> zVFZx^I8EeTAOcy0+K||Q1}J>)?m>1BQz8vwt|94^0VD|_T7aMw06?AzxXxi2OLC&u zalbRSbKmFk%I?SS`_(iS*?p$UaNPjy+ex94dHRl%?7`m(+Cxrc-Uj7_dngqca`$H4 z;5B={agQ^5vARa>-Q&=#*7K!LyEghy+v?w5YpiB#qzrxH{wkPaH{a@6xKOCzV42ca z?Z&5iQ!kQ2tX&kx95xuLT3V_{n%H~`=*rLidB>r+9!1U2Kve!VdO-p^*N}3Zyd?{q z*g(1x5-LdnG=L}wnYt0M0f+($Ku3s?loXU0z7d2$IzPYS1zosQ&qhYqcQ z5(V)xrw-&7bqZ*icm!wwCueP_-`lP(3JZ?9q{Clb6%Lxp*T(0I{!Bxv$h~CKosN+j z->4-q3;U_;lP8g{R} z$Rlt=xSA*ywQ<9vn`hngD%wW{$57P){OcgwvuL{8mLY_4eIsZ zL4t5p1Qo>rVBFAP;5C{Yi$e2(bI_3q?T*ypE#B%WwdfmU%?>@Wtmr|k8`=!0LEpfb zpcw&vLWBTi2W}XLExC<#@?8@6X+4O4Cn(|{ey^vWuoL)~fZx@z|L`yCy&wP4&({Cd z&udJx+}=b8)sBj(p7y_$h?Z}R#rN71k}A|6Qy=j+a{ipkJgR=f(E8)%7&y0&`)+E! zyVhoN-Syp)t`Y}#0HguQ?R@w zVvF@4?!N9)A~K8$8U%!(DKL|07LXfSB)T7MOgxC*|5NJdOIe6MgN`^1VEoYy7+JIi zKnn&7BB3;;ungX}3vzsR`a6WK{XP53TsTnlHKnHj*@lZdD8l`YBKERsZX`=D?@C}5 z@wZ{@ifpeqR>-lKaU*%oEajoyq2o0%^}Rrm5lC zjHQ9laFwh~$Q}2AtuBo)0$|2b0@*kr5HrpYw2q61AaT1y7hRjw%Y$?q+p9l0e0wAi27NDx z;a$>%>kkOxOA-(!Y|JQ-8->Ax<|~(_z4NOj{MGrrB_foEiT~3SC)gnST%5W^vAIIe z{aNnS`op2sjZN=kM>Bcf#4n_K?<_(`G$s&go=x@t@T-*m=jVU*^EaRW;P={ff_{F% z(z9~A1a#mayS2EZ_(t0!uV4IX*;>i>i1+XPl+W6uXKRl1{GlggHdWbUzgEMp&6;yt z&IYbGM{!9=R>7-YVD>dzsQVNK&NHb)v>iGH;tl1)%Qj18>LP2>{7(au-QF{I9h-IK zVE{)!7;FqwK^;MNh#!NQDS9BaOh?3dN-+ri+=}FupdN}rtSVz6yDD^=_%Ub>TmcaH z1xW+~h)TtgU%#D|RD2^$EZ)xXeP3gfv!PF3TA)gwkMDZ%*sf9*)Wb;lG{0N2b~Zop zr1R5iuK6VE6iP=S?3T~qF>{jAU1>Xb&JUxx7 z5zR7O#G#Wz>nXRg`nK)+R5i6UL(yBtB^8v|(&C~m6PndH5gLb|)`QpCtNCHT*X%x> zGC_1;{`E}}7yw5zVC2!)fmrk%%y+am2!rm7uCvdDdAdqW)aPh_*lNBKpp_?@-?Vydly&dzdb|kqg;n(}9kTV51bDsr){EzxA5D{HU9E(YK6S%g zCX4kQdjEWB_P5~0(gOBb>qO7^;owvvW%w#h^$xoOo5y$r1dN1D+6-1Nv^c+ilPn=n z_V@l!ov>87n;4s)I~n`9RT%%xF(dz`KV&_*_nXEMvTg64q&mKIq=}j*@n2NNK$(fq zRC#15E@m2pd>$JH%`CQDljq!3z%tVG^4eC68FNbf33F!IS7w^!oIEI?214DX2Qr*M zG$o+QxbFJ3JIkFtqWcT@(f?1x(CEt7YA@xDgy6)Z9ug-^W!ER&$ zSs1|p$DoYJc&hxO$3ZvI&A(OY`ex8Ry8=2g-OTP}Dl+n$__B*L;jP~fehrVg)+(ax8%CP-D*#){9E7D*RuT>k~U+Y5c(Y}-dbi6{DRu;4ac}`1G}I` zYu>7!E_Vl8nXhPE-@&Rlb?K%i+|Pj%7J7?Dq2Ca2-s>q^Cp6E!fa4HfO7?9mA@lF}GsEmMo4<=|?+U+W?m zpfEBtq_F32HmMlCY9;hR`jxgCRs`R4W9*SbMn!*?bj2bge*t_+rp?cvFxa{?(V$!eQ} zC#rWuPTP<2Zbh$299Oj?AWO*5n1ECP444jBhxCB*hyx(J@CxF=n*oCRxyG#_MsJ83 za(L(x#baQy@F{RR2@l8(Y7F#(RRIe^0t@(b6YS?O8(jbWUL+nr+muzq>vv@NO2f3y z2V&mz#s6*K+2zt0r)Akp=Std>y|byn;I?#@3n7gGI^W`vy7SazxfV0U8zHnV9E}jR zy0--%b*Bvco}M;&e|R2l{31 zUkpD=gYth~VqIig)IK_#ar+#~Mt!60!cl6vt@%jXMVkAjT!+)}90h6csDRX~Bf6Xu zNh9b3BY2x}-u~EoPGakViXt-APrb+&l6UoT0OLX+SO8XvAu8pDp3)GJP!J(@aXpq>I+VnqR9qJ& zSq6m(im=ArKqC~S8I%A{3$URe#7=-LX#5TUFCkW@6yvG4`?rDbzWVTd%jJ!NOyxiP z3RC|{4OfcZjKWP*oBtx>Xp0ZiLD(|^AtR4hOj4FN)LDnCMDxay%5weWZflb|>VKF6fJPEX zEQU1&XyO4!sFTrPo^gc6zZuOhT^4VRW@X@d6ibGU9*5*(B|v4EY(jcK3qZ(%CQ5<) zXCRtNpUWshXLtVGReW*1$P&bBNTTfJbwBiAN7IK^N>=gBs=||Wo`EmHl)oRMZx^?9 zCXm5a?dZO8{65*wYweS+*PdRG5`1e`AVp}SJ3yH7#+w7qE4ou} zQL;FzhGOxRLlT@pMt~aFS$M%pkE-IjVs}K9TFP^k;hjZfjG0C8^^`-~RB27@3ZfK* zz>!dZ;M61FQq~kAIH5p*v!tNO_@kqm=KP7R@tqD|=Cu*?Qoa%TQcwbxnj5s92Pwxu z;T<-zH1Z|?Q5siQj|Sg9nXviEz>vDO^b>kAtaQ@e;-RG~_{+&7sM zuXC0DwM(CGyXQuo45QLV^_}6$%@5yLn4ll_jxoL~hB!(TtwlG!_sh4``&ps#_$Ar# zb)7nK)B2obti3#a{rEgba-#N5P*`Dqn0E4)?n#U}6C_dIFuEV5&21DXUuXajFbM+^ zi8nz8luVeZZP^S7O}GKqZkZ*6`_i{Yi?B&_lj3;xov;$3ug z<9Dqlxou{Bi_-a$+=r9;C`FNjkatImP`ToF3cWDC$vW1?bB{g$;=9=lK@3}9_OQFR zrlE14Fk1q1*Jo5GYs>_+PaRnx2P(#odmkNTaz>MUynbITt!#&v=#mOkEK1^J1puU4 zaMhuYW1do_NO!XLy=y+16H| z)mrj6p0WueNJ_x3lPP9FJFN5m_Y^VGd)i?V)4nvAxi6rfjHj)}`ltWHkO z%kyB00jId-4JD@3+E@s~nH^)}bu=8YgBg^h;_xG8IISv@zcosN$39M zhe_-B)n5xW?g`3&D>9X`V1B}wn?F(Y&*UV2_Z<7MZQLk|v3#F?_j6bMc&B%4(kw0K!{g=5BZ!!EZL#kLF{69(FQ(lkTen#MwQ z0_i*%H$|wn9AW^_gU)jtf*Fhw&Z7r>^VF3gd5V~YC&~zK% z0;a^(!Ece;SaGBt<}nhEOG66chLCHj{Kz8ZWuzX89VyopkHo6TBNMy6BCS!=NP_PI zDTn1iYGJP-MKMp1tiWv%IgBhQ3F8TBU4I?OUsx?b+WL%^$HWI&qQA8(*Ds2;=2*Oo zU)gW+(IV1k`!ZmL?Xe-VK`=U}Kjn2{mUGY4{AqzQ(MmALC^P4M%`0eG z&CRVQNJEzM&H0J*Pw_PM3g&^2^v^f0YyVC8fM@Q%IpTdwWUlf0(B{riGV9!zDGn%I ztI`vvD)a+SDZdpfTeYu(8aKO~JUA8B+_e5}6?TNDvxk-eI|}b!x>F3$Jx^6-D14Tm z(~2p0#z1e|ukrQvLXP3x^n1hdYq{6i6W#vSoaVhh{80B=o$|*!CT5=NWxpC$f+`2; zdh3Mah3YOJy-GK&H`?M>ZUis8RisbLZb@g4)HriJ5QP>N7P(JlEVC11eOdX-1jSSz z&X{hB{2B+9;aKQ_JoI%89IXPFp);^e_Wfk#5s3o4j;e{T?Q5YA(6!MBv>8YgErxl9 zW(Qo*lo(+&1c0>_<+7al!Q20JI3ZygAg`;9toO}}q{0pLbRN*y%q!!>~HD(IYJ2J+f6O_O!2Ji28C7+OV&3#wD^@do1y>atMS0T(tTs&f6 zxTxlQf_X*juas*l#8_#bgjQmc!7u3zHQnsl>GR)hn_=PRyS5%a2ETI#XVZ0WwmYO| z53@TZ4}8rm`c!_WoQq8U8sp|Ou2kCuLk+Ekis_LTkD&O#C<;}LhZ)X;-h4?n9w*5Q zB0vUf3YyH#xtUi9f{vuEl~zw))7&FP`MUVr)?>G6EE(STjsGT^SRROq&<$AfpTS|E^_9$#^{B`%w`{L3IzB3dzBCTHi zTy3}=2V6zhO6^$aiLy<8@33T8TsGdBn(#z>S z^{-f?wxnv;I{S9>0IWH)`Oi?hn96)%@d)Fc~_H zGA=OlGyC^*KJND|n{Qt;VjJpk@KR-!D#r%v(KvLeNKC?;a>L<@LydCKZe`#xdWdhaI)QU^4M_(4e0c(4X_ zB?QN!4igmSCtF7Mvm{Md{@DA{kMOO9AxeoV$>zW?A{2-pJP3dQWb!}#{FwUWUf73! z@$diCf7v#E{KIcgXonq^pq~LJ10Y(isYSwBvE2W?zx_jLJj#&O}aPpQ(=jiW3 zyKB~Uou5a;Z$6oFp<*s@tp0)fb0@-ov(A)5;1Icog&&yRU}0LW)3*23zro!1#n+m$ zC(-87)N7VzO?_Cywn5SJI1&=yAR*1kj5v1Hi${F1T(Z(>elVVj^%fTZ2Z;v_5^qA_ zlrZQig9{0Y7e<|^!7r34Kzy?HtWv>Zo}ZLifgfbR3Ij+e)-bFL0Gkj%pZ5J<_w+k2 zJNNMTCH2|fmSsH&by{PHuMWKgaa`L+1x4X0cFqh~==W7-l> zLlCS&7=S2D3Xl~f#PWrJF$e+T0n>xw%PABx$do(Zuy*^8;gbBHQ3RjL86H1c5{}2~;`b^l3r8c&_a`!jdCCO)OTTH=_R5*+0tJc2 z@FGcZ!~`!5Es_hxMMZ+^2_R40+Y(ss6Q;s-GZ2&Da1eGvc|Q+_1m@wRRN)Qcu1!CZ%73ehAWb+kl`jXjvI%@3@!Zr_5fwEqlwfPRim zK^p;+Xc0^xngviK6jbP`0O{o0q9#p?!D@jfUxb`^ zhtX-W+qdxc#mMd`vh!yYr{_7Z_4aWCN!G3=$D=1H7g1Ml+pRz8>x_B*qnX7>W#7hTO@ENX~oooB%aE{^WOOPdA34ok%8sI!!5{$h|>KgOMJ5KCf_eoQ_ zRY4ZGHXs6L3Lv0hH#AfQ2d>#NJWiWk+K(dCNC>GHyv^lKCqB~n>U?gDq;@FIIFsS` zU5_u891B|tLhl7%iw_N54E;7p*?0a>fB)OQ%SB3hAeXMIiz=AxZrhC_5m}Rg`#*Ev z3{wc(uGJ!ULf>cQvJl6u2y5_gWR(bffW`i~b7VO4t0|C);ZE7M0SH1UZafA;ppL)~ z;y0i?DhPNTAqhj5tsy0dkBB2A=*Z`ZV<6k$BhWk{b@&VLH6T_&k(C?sM)EWb|CbI-BaKYLJ-dCjMiGVICT+w$5meb1}QKduj4 z!t!rDZcS62uuaaAm^khpcJ8qEXjKToQ$OC`w9v8CGO<#k(IDD2No}3+BRf6Y@N=L|xG^(w&%IdgVu)=Ap;` z@HDEYSqQRtKJPBA)LmxL*U=IgP7pkCI9&ME`wnj;--Df1qBvMMWl&w0%I|( zAVD~=+yc0vOT8XKOKdfr|Kjl%v+I>kqUA2Rktf!lZ#9K)@_wDNX}oYtJxg7%?CWVS z;Y_u{bRV<@U9Gt0_NM7kT|1R9JHvu`|2`A;W*X7AJc!uZw=4)Omi*@J64DsHeYjFd zRf@Q#5vAvI)5~PAwkAn0wzbG#7A|$Hnq(nEIoBT>9Q{zwnw*6Tu|vn~(q{hjP7=IY zGFJswqN2SFrKaxJy+aNFXmUa^l^sY#BQcw3J&-RN8y$u|Ac8w2JXwsS=`(Rmq|8I( zAqcc8)`+l2l%io6Ehr!>3a~N@ve{t;zPIK?kp~OL9)+jn;zg^ zs#xIlM%k%i?m*n-3_Y`V>Ecz%HCx~j7m|7O^e2VLb8{DBcQaa3Frl)~4i93DwSQ7>Y8UB9Cs9 zuYvu=ra^4KOiQ&3je!O~EDr&Lpx~RJK~i;KnaBmO0HZK~bvD_qnqA4i-tG^jiRe;+Eius*Hi}%^`3`79P>n>bz?lBHG&nys~pPY$DF7hR~ccGQUs< zsl_KA9CuQNZ+(h>c;i_w|8$cL@Kmj5{L|)}}orEkk{=?C@ z%CTE&v+hl3{_WZISuZz+ekbqb8ucZIsRjL_fwQPEmnUzzPyW8*auE1buKf4u=aY_C zKJAEviM>aY%D|XPv(zew3Qb}zuem11rIEu|dHg+NYepHit2(BJn*>OTR0hD#e-~;Wz;i62MU)!2lZ)N^r1~19nIj z)F2WSEr2}z#I4xoQ6ioJ?iM%f9!G{^wFxfwW+X4*g=D~?kQ5j$f}`1Hu`i>+ zhbQg#(^b)pw6SK3uh#EBGtR4;_4rQTS8gjZXB=Cd9H9=5h$7ckY@HT-Fe~ZlV-OVi zoj0QUncKwk>5zlssv^`&qBQ~f;c$WP>KhM72WzQ_-?EMOTpv+SQJ1={Rj${X*Yo3> zc^Y@vUFtRV_Oi{#8F}o<{MZJ#wK&KEr446~A1|QB#KE|vP}>A=06h)@AaNvsC!sWf z!wG{TaLy1!7nr25XH6>ce5WR&A4N{mcb8nYYm-PA_ZK{e%K$au%s~K7f)KDW04$Q0 zS$%%7pC7!4y7wD@_4v8BQzltjKz4#kEDWQJD~e&4Y*>Ad4n(-=Gr!F z$a6Y%C#O-AfPHTbWZe=>rn8u;0WFgNf<((`3ZN7Q8ibdk#Xz+%=%Cm#Is(=UqkPJT zMtlB*!^oFY0Eas82N=~HJ%A1dUc;b*Fw{T46Aa`AV5C4ARu(CJA(;2C7OI--O{4Jm zcUzse1P;Ho>eVYB1&ykv-)_7`@988O72vmHYD3?5*s^`uzhu!6X7f(ul_6UOeNG)` z{=&H#O{=|duD>+J*U_+hVG2`) z?>t;s^U9;Rbs44a-Ei|1xx4eMozm;w<0|9IH;=K;8eQP1M{eJm>ABCe;(=c^M9k^$ zC3er@7z7c}j$;O)a57+eoGruxmrrzoJEctQdUK~1_hlZ@6+wgPvmuJ;`U1w_eiFn& z959H}BZvnP04@v8=CSh{l9<&ZIMWELdY4{3Zs))&IH+Eb9*65Zofg*iGYJ5i$6OWxQ_} zHMj6GEsY>WKgt{4q~MVsH^<(M0^BZnw=Ueuksuuqij)FkK&wNv%t=A&E3QM0F`-~@ zs2|bl`G;S8`bkx|V)TyzgC9Pw;}K#hY@fdWC;p8f@bBRVSw?Cl&G8YJgJ&Z*e6>d? zmN`?1#wkX?XlM#SZgimlL|e3E;=}H}s279{Zs}{yuIobw`7CClyhm%i9$WWH`ljZP zD}BS>4ldIXYf(Ao4fZEDTe(+n)abTWKizDUzTZ4c#b2^I+aGoO`Ox-w_DI`nqxq1m z&V0P?>jJ3XRLaGyGWHOdQp&Sfp;OD5v77kro zJMt_ki&FV<-lR#`Lc$TdHc&oB2gt;50?dK{6ja3{oABe-t;omtZ+JXku2YGwt7A2< zS<-d5#BtD5D{Hgymx+Gv5nWA@Mk8su_16YI6gthf#SSlC4!2~;XnGZ0o~>*V&MiIY zD>FX59nAT`eO^5A*e^%)E6t<>UftOjPc5DnhI)dF{u|M<>fP~2Kfs7 z;2ms5P#N=%-XaEK;n_Q=JY`PJflB5s&gKmSd2BVfeU0}2P;kxv$C^$La0eh5cR&>& zVMqYz7ttEThLm7Jqfw>P5e_)I6UW1jv~nc6;8q2rsU<%Q2$4xZ@c+0S zLY;I8i;mDH7Z$8OoAk54%y}+ff|vNSu~TyL*74lhIZ8R?YTWDff=p4<#V7xO*Wot< zZaxTb308XeFnde994yqeR1qxM zpIO*Q24lt*dD)VB&5SEKG|2TS%gVdpPccAHiR9k?7bRyUMFPRwF>xup>1gE`ON;lV?o~qmyjqO?B+)g z*EkR-!hIv@-cZwlalFhZi4h+%f@vy>2`!Use;z7PJ^k%A5vb0e%5O91#&f;QWV{@WiX!tBGmW+vey@=Pc z6bY&X5&?A(KoDyrMCy=VR4$~lqWuW*+goGVl<^X7KK$GnMg#{VUpx#=UkRxq?*}7b zn;=1mI)DaVT246V5B_)TkLw2Utr}yhjbe6fpOO4=iGS8DQ-<4IB|o*Rz1%!ye3KoVa?$o6Dxl3MbYK7t>L}|zj^cWr)w*$zQ}F0Cf>>i>BT@dH8N*1oM59f7p&8?41|)Wh?fYo7pg{CZ zp2=T#?!0!n&YS1_C#RguN`k8vW(en`G6ex7m}N2mM-Jkp03$d7oHB%+0*0}~;BqOB zDWG@cfT@`;PzsvTF3mT^&!O@@yVQK~i1c2aV!OL&42zYit=836x zHDOl%US_?n`CeO-O;>EC(9gdu=R$MyK`@&}s?^0F*!3*ug6ET;xlxTC22N)Z(x6kJ zuA?&sTEn=h?AtZ*K^Y6}xps)}4wZ4PBP#wWdGe&q2c-;5MApfgwyip3=Tj0@Gs5?} zA67JT^*gga^=Ev~9mU%7A_%pTm;6|p<*xer?2T%ih5N<|3^@OLbonoIq9S zUuy?UPyY$1%sn)m>-S&KwW-$B_Ac(N`x#k2x_<1kC}kPUh98R9`??|WGW19xN}=KM zzNmftt&aL6`=LC$1+6gilB~9nzZEH|Uv^K#h3*+KeZN7h{@J9gQp??#>f6=#jyj5C zZ-bw>j1j6SmSe@eo6-q(@G#Yzy3E|NBUU~8?Qp@?e zh>zw=ug8+mDp@)oTUSt_dB3!4WbhRQYZ$y}$_To(`AyUOX$}#$gQXasj1T0q zNqqsGbAKb>?ufp#Xi(!b=2zPRER*eIRi3Hh{5*#y_&B!TEd8IFDO9=k$cHM^JR#UH0EJHwq_nZ)Fs>k?t(kE)!_?)R6FFgx5aba~?HVZW)X z?$IY@FD$*O;pqLpsC&zxxW4UMba&Gpc2ogLH0TN>HI=^%4)cf*oz53sJbAl99bIm!%n8;RIWuAg>$d?4l zWWbRv22-|U9^tm6$LQXOe)7 z32|1((c?Ct5W8U?L?K}|4_dje-|b3 zJ+_lr>gZg~V-tR^)$7~PA@)^HhJ-kI)Z$y1ev}ooMWUfcdwJnI)G#WD{RH zlWufk1v+(N=YLFGUQndleXHP`;L|&-u&vFj?im`2IJD=}G%QJ99?>(j79)?bv35_; z@ozN9@<-y6t!_#vz&#P-cKxZs>l(ZloBIk{!PSk`B|2pX#=Gt6Yv;e~K1pkQZQuW< z*md|76TE#wjkBoFp88a%*x~P%nq;la=Ulk)I0dlf$1lCLUx>S`VUbegD&ez^HLo*q zw3M}nTd_> zRH{*$dgAg*bLq7Dc-y%U{>+qnW8HWpYY4>;?jV0?WO5pXCxAa61qLv;cqeQSKT+$Z*savJ4xr-iYOXQjnTvgCD7H1w%oRdk|V=Du@DE8RF_$?NAZn z_%^aVz@7ldL)+Q?u)x_tZIt2CcHh3M!F;!6vpAw^yG)RYZndueDN=SNs(622{XdbSn{qU(1FFU#P!i!JfS`&5 z-t*&t-TB#LUdk|#Zwl0czVrLZ9`H*7(fkNmO@0c1j~}m(37YucsZvx7=9W(5uxn$i^u=>FsgCjv%4YFOSVA&XVA-%pOy!svqjOdle8n zdU8^nD8`;YeWz@me1!EEzbT1VKmO*=FFyM}awGvfj_3t2_2=|219{Sxvdq2P<1z+B z%p%O8O0UIu?_Kr_-%%rXc1+b!gKO$;E@t*s8&gZ_(?IAzuX9fH(9DDyL_w<&0ug2&P zc&ZdeLw5TP%fxFmWxjaPMA&xZ+~`P(6*jOXVj*8kP_U;Qeb}_z5@j3L9$;pCzGbdf z8TB+e0((4MK-6(p5T2Yc8G+7O5X89V+|>B! zpr_N9_WU)>cUg6q;>L~SSA-{&(iGv*g`_Z4eL8EaqlzM8V5>9KKwuVXC9_Krewe?%~j8Y8KY2|h#EPmy$9j)>xxe?9Z|0z}4OSga z3U*i{3eZtIJgTrX&n4;5Fsrn$ZYO(@)d_S{nj>vRI^}is731;=sN=$L#_c0*h4i-; zYS%9bBiQ){Nkr7l@73`wvV4qQeX?!*a`DB1i+AbTeCzD{H3%@xLcMK1?(`6uk(S^L09Dtb7)u z#w$2kXZa+^!-*a}Hx8 z53|k9J&8Pr*z9hy&2kwU;yo=qzLIXX5{Xs!+zOcWGR4P}UE|m48O$KXJ1QnDDA@=` zMhUH82GPhle*!NN7)ffRxMxDkYEo2tpoZIj9e)3(XNZn03{y}^f+&NGVXRM|A zP7hL^-TSfC#KVJbdM`C468m%6WaEX`V?B6J;i<%?l>KM7*XApp6<58npMnBzf3Ezr z5BlUBD84%_6)KbSgax5ugKFY2S!|%vdo*{>b-*bA`^?Z%fUSqCyTnNeR$-BNp`F>} z)vc_anDRN#QzDusNF!vnkj&s-NR@V)EiS|s0H}P@8$g_CQ8eCK{l9yvQ^XD{tPh$#FR%)fSWXKyu-R)@FZ+w%SHx6OfwCC=uV-qVBO#`K1&=-k z6GwlanCgCwz~EPr-T3I`kd=Cu#Nv2r#mTs9mO6?Chw-37@I3CmzP)N2Lo7k32@?W9 z<>R73vgB~Ad=@kgpa>_-k3b{j)Zv!QX?GnIcHk?0)o5{~DV(NH2u*}!fWu@-(2#tL z5dY32(UBcx?|Lk|Cu$i;wNEz;s0Idl>_2QM>uC z{f#v*tHfrx90L7sVO^sMRk{=t%_8xH77m#ZE*OpiOZPsSq&75AOd5i{q z4Qu5!(i{&=BP}hh5q{wyy#`GZPWrw3_7!EOTt;IkwyoxLe5H>@em5Ould4(+RnlUd zh=*6$odYl1{VgOED41sG7EL zOs(|st3GiHXxW}5HK~D4m>`9sN`riU_m1p${6=9<>iW>|&tylahq<=!&`82Cz$kYfz{xP**(c6&!%c(=eRct`%$5n3GaT7-E2c#z57Vz2k9 zNBwyyio3PGUYAh`-rhC&?a*{<@e)G~`29zv8O%sRL{s+Z`k*t*J#=Di-yvpQfe4Z9 z6sg&cA^KJST=~FW94YDU(NZHgzE=BDFp2lhi>CHRS8c?m@6NIh?k!I&g`bwW#`Fxe z``eXO81o1}>JeF`jbXJXm$t$aDB?6=+wem2j2BMUlP~O)+{~=HPDTut7Hv6RU-gJ+S#MllhE|%5TT>t{dS=I!R7BuHhBH%GjEhCnWq})O`o)m?M948w47+}o9_vjS zp1;LTaN~TTmB%_JC!Q-kI(hB-_4om)94B~j6>_^4O2uW z802XbI~d1HM2N~*ZB6XfpEImephtC>jO?SBCPgCG*Lu>glDVE4xL-FLEh#)Vs>TZk zz4_AMx&6l8@u6X}UU?*;TIf@a_M7C!v$U_MLr&jK-bOC`pYiT#gpYXVkmfFc4H&dy3U zYY(+O*0VpSCO^PO`9xsVbCiOwDMm0wa#j!w2a`-=aGfe=?F|qf6s}coOU6E9TUnO9P&_rzjmP(# zG;Uu-JI(Xb6K`^QM)BR(-`V<5B|lT@5aqJMylya6ekhr$x_NIqONFWWT!L~a?1MYI z<_E98_^l$Qst$O7;Xiw)c{u#QCcdU!`$s=GFfMIrOJ!4ja$u|jl{ZK5XEL40C`)ve z#+x)}L;&nydkk?$8AISH#R7;&u;Fy}xFo_*a(0xxDN;h^`yJB=0ac|^+mzSoWKXwt%h90+zs1G%3iZ47_ zE_`!8_wt3xEA3tD)*y`04pXQFgmXHt+ahMpB(!PCs78f8+Omnz#PvKBqHVj{!707AsH> zg@T^p9e|U_l_9GvrFgTCM>yfTqibG<_QC-10l_MvGIlfqmbf5GfJebZE_3IBWj`YbV(5#CzT@*3R^)i#|B}T8e zq4-R+CCIT~8VO1ql`m;+nY-!D_#7K=8*c)>S*BsC$G<0(9VGImOy6bgT=*4O3K|aq zYZMwp%#x2egeF?>Qt+FSo|*0J5~o!pYYxk?WZD@$YpL9?b<5qos8(6B-3&OvN>e$D zX?-kMb)a9hS7H&6V|h+MPy zVUYY>8|ZVyIsgEi2*8o36a?IXVxd)7N!n8#u3l-d-iJR@Ch23ghruZ#Ao&FL;8h%D zP(D^EFb1f}&ty<;ksts3`vU$LEYQuP&be{g{?MC)BOR#P_ zwK4ETcRZs`Vf{``HwmYi?)eh6UiY)NtySpN?*k{B857>a_ZCJqUiaGM0)@hA1D17b zxa%~1YvmmbY1Pv4g4HYdalbkNW3f7~S%1Ob@{>m~-c_SN8Ths(V0qQ&LK2ytK{|u5i-;#ED4aB-m#(2TWyG9sZu<-`l3|NYkX33_0v)xS>wuA zWndHGp6WZ!c`l^x+nyGqDLL`pZZCF?@pQaQ^uhSa`+|t&ll3h9Y|E;%+J@{YiZ5%s zf@H0hAqBi$&iE*Xx8IOQ@y1o&O>j4Z=X(zwXR5+NoR+(qS7x{0wInpau}rn?9gjo~ zceb94RmZrHIeE042o!V?(h?O;{r?5OMjXP1fPgHvtt@vis*#@yAjH9rvtz^<`wjUv z+tkAjtoTBkk+~R8Sj%8Vq!ciLWXAB_NdaDq5;rAQJi6PbXYc>=BeJq$MqKI-te7+h zh`6m3$8oyVd1}ck}A-EFFE>a zxgtpORI=K{qW90aeNZHf*GHfyYB|;Ljdb-BUuF9y{fUq_^bRThZc$c3Jn7v0n}p2; zVbi})C8mo^e*P$wkE2+vjgnZP@S){A#>Jf=uexu5!J(I{&2oZDzA$UP}ajUw`k6ui#5t=FWCdT1nwnobzT}_4@~>twA?~ zVqGs>O`$)yWUaIz&!|isV`4-_ofx+(AaLoPJR0!CM=J&r7{01B%Cth7j zIR51q4hSH@u!@;5J#kG;Z#)5G!E}iX3qH3Z!-m<@WbN8;`N~^iN3J5{!9S6D7zKhL zaDrq&#UY7-he#|Gyrx!g=}E-p@$EMZSD>}+P_R)wTE&`iQMGE%FjPaft1~#tphWOS zJ}`!^)$zV%zXEohW6GG8+a-53uBV;4#CejIs zZ%-fm#!xhGZ`00;?R~F$r-Ti5OfDWWr0@mCNwD)^;gk4}kmUGkij?mOKTpoEp6syV zpr{f}^2;22o5kt&e!BIFTjF5Qz;(Esq^N7eqUt`ZVtASg{)l4NfPLbn*qy)leT{3l z`!D~ibiRM?ztk;fkeTSrf$Hvm?!R-sAGYf39u)|8I9+5T+C-^#*E7gjNpoKELYRN) zsk>&%D-bAaVkK=7g zh^?kyk?j_zx|D8kon@kN2Ws2$$9Q@X14=;OM^9~2a|WFZ14SunSpMQGn>mw$H~LH! zPUp#T^ZSBc3yYDLK^5~jdCk2)^2{xC;3C%((f2;?MjSIPK{IArDxpSs8ubslsKUuO?oW?{T3VE= zO(h>i_~SR*O_ORu+fynZ6NgJK2p;uvD4|S9r!WH=!qD<37WlGw%{GP3wEu z2y3T=800b}?|DxFo^^Gir;Qj^o^@bYkChRWABOvTSei(Cgcb)e)Jb~3AD7UzUkw*E zfCPUW7Qj;+L=rpp1rc@)(BYI1KtMo$A~vMY3i7e<1-QO%2wJM1%t!2~i?*W0NO(I0XcoY(lGDW8wJ)1pFVpg*iye zap(OjJelfgM;CDJ+K4kaLy(Sz2<<+KY$1MGCr3P1c6vttg)9VqZJFkhUQCoBT_{VSUWbp(@ugEt#caND+KZx4qMqLb$hrKUVwxj%D91)0-P<_>KRW){|4aHG|Ba{6%~PhAlBaVo zZaXa!^vIH?Rg1nDe>7}~Y360Vf2l;DtrRf6wkbsTfdA)!gw823?ad3r!RCl~PkxW} z6=zPORRb8w6r+t|K68-E$M!AFkR`HVpj@AT_5ru#cl-QgTywC`t^xt)vu^OPim380 zPh5ZiyiKYJB7qYCv$UGnND4@>BtIXjj-S3ijvpzPB}f@PBIS*^FX)SH!~ar#fS<76 zh@S^A z*<%d~XEzrr#gk1J)Tyg@h*s|wZs?4V@eo=Glerv9$iKOR@rmSpWL>AgscQap=0DJK zcD6zRa4-UdhG6=auzU(Mu`COmKK~I~3V283R3?=@em@Bv#sq;2^u0yXA>H64vT|rV z1UnoXMTG_re0PZP3x8=TPHv7;Zq$xkN})a?BX5I6e`?N_J5$ zEh+|z-s>F1qZ-z+o_?Z^D?PVHhgg1L^JFFQFoS;1%!BDbNXGV6eNDfWtsbN1=N*{| zk{0_g-EKm2y1Cd!?YFtAdQ>bEBK$-?PgJw`iN7|`HlqYXWxZ1se@RM?+#~hgbG%l$ zz5UvDqg0UMfaf~ebzhz1D~(zdKkAj3ysjH8d%D#4o)nAxWU0%oT~>C`d;4kkh0-?h z&}!3-3eFDAlH@b02c$pF>tFxHZ#?n0+`sj!7oVLx#1Vk&(PQj?^!o!2-LFv;z1tsp zo{1Kzu#MIe+m++)KONuCNX{c8VA8Z9;it)f$eVpoC(*zpLBIuo28V(uAWayZc@Y+b zkR00>zK2gBqbGr?wkiL9K8PPDa{=UF2#Iifa-a*U03flN0D6pFJ;*u#fbU4P*3aYS zJ*HD2=92R&<*6MHZ2BYo)t|SbyZt31sts1__wNr5i7!Ydnyb;O)sR0;7^fu8GC%BQ!*g?V?MQ``Hzl27_c5UiuO?qpjkKd?GKf0&!(eOaNr*Pw&t z*W&tspezvA@cJaL>wewuRcGp&9q4)tcJog%4l<}Py=j)D-(6USAM0hH7gTatdnpxt zt(f--SMD-V1>f--)sjCGr{eE6-lcm-k14?nEE;Q^9MjkX0<(OvPOf}-s;~Z?KmX_I zQ2!@?nTVSJ0I&dz^ec`4{8w502-HOY!`R03U14_-AW*xgaW_alad}j{?C>sBn}9rt zysyt2qqqWGztP@mO;#B1Wgs@-Q51M>?x*t_dF=ML9<hc<$kSn!(9D^XfZKWRaffA61dj~CRqq>gFl0DC=;_YTd8L>qpjLGQ;Mh> zN*Pyqe5(7M*h*c(TCejwl}|Z=a0W9CqJ1DY`nB#{fp-|cfb2u*aGGZW7Gjx>{trYJ z&RFKHTrCkpC4cdoPi$x&C=15;*JTm^lRv|UPyhCR2S%m;_J7N(&%|O2Wk_0aNWS8f z&xVRBF%Q%4OT1)eo|AbT3&OpN6}9i#xK4t?LxKQyBreJnNsh^fnS(izN?=7~Zg`5d z5b@26p=fR!-QYgtGKdO^#JKth0~VMIF*lL~z=H$x`R)k>E_X5i`u|!t;~#UmHMpw0 zIYsbvIQQ?7!ahI>=5mZv1l|!K&xbu#suHoCc&Gg&k4_d`9(CQSZ@szP)KnSH&R2A? zw{t-4$b5UP{bstLae{Vz1H0SGoGCu|XN~EPpT=_!$T)ThG%{F)#yOLXyhJ>~`iL=t-RY2OF2gUn}oon9Reu3wRTGa*Goj zIbFX+%n9Ec$&d5kfMt&z)h5NIN>D|O87g*>4lCEF*3^uO=5?j53|s2{Xz!MoqVr*U z$n35E0o2gvh`RqMBxRcYDwPd-{f8u_);pZFE}6o*r2X3f7OWHEJ-}rM6IjCdc7@9c^UDEs{49Nr{M5h$e!@NkKNP@GD-EchKC8R^=NkFX z?g$8Aj5}Xc$U-C}IY_}tS*#lpj9~25^a2QOdm*_vs08g@2!(07p_C0L(+7>kmE|XA z_wnVXJ!qwi6kox8Y6~Qv6+74>CEs;>xV|i`ArHI!uEs>6q7GWOD?b-wY?o+B99Ud< z@Ybm~T>gROQU@s0E+Y&toSu{VA0DbiA{WT;x^&KR@Zm88=h|V^#yK} zn%eAfWARDa&Uvx^T}OG^O0g8}x89Er6;v;I;MYGNie&R|&b)DHut9{s34(cRCoxVG z=(`n!!(CHBSB-!1Ta{=i70`!;iNEL>hiz=WYkI zRWjf)J*Xe$4d9{{0fFEQkVL2~c0tC&xbe-sL$!EkW}Pr!qT>)#m_V>2HZE!xixCwC zT0_YL4bP1P+3S(!4;C;D@AtRAlCvTt)+u$cUund_EJ@zDADpyIst!F#6uuUnOrr7=3tySv?~zF&WZO7veDUWQH%3x9m2jJ0i&c0ecByn!9hzp3H`iA$5$k zMN*cc$)wJvP~->Xdf%8seH5>gDYAU{=Q||aiN5--qQi4GLCwtZQ|$;As*d{WsVbgV z^lohluG4-U4YIj9WlSAbmLix?K$E{bR3woeJATDqLN>3fn`!&yM9yfTGG%~2RQnNl z_U^upJ1Sd=Ud~j>tios*AGu{yYBu@2f=rvEQ0QF}Aq& zz$|zKgvLGq_u*m0$)pFcdZrQ5Yg1O6;1K1QAjuJEetGY@CyW50V64Cx zL>V9fxj;^89MTNhKEB6*riSw*yz{9`ePni;oGq5RbIPZox6Ai=$|$mNUztYiyuVQ;R{$vQs>s9X>YQ zdJck9N3Dh9pyCcOO$q_g5);CUH<{Z}JwHxBo?G-0`!MdVV<-6n{}2_GzV5N2UrzYh zBl4F$#6~Fre3+;Dy+5gwAY5htnjz2XH^(@uiKz(-Y1ZeAk+M>CVyZ~waQ6ViShTdx z&4&Y>hedghZ*lW39yn}0oAx1tz&4__B)WZ!`l`Hp?$KHq4jq)c#mzv51JD?krEx{Q z>RFc9653$q8n&W8-q~b6&E_$=B%w7#;@RrOlO!R3@mrTjwSeJoVEnJL{}q2}<^I+G zUH%vUin5TxI1$`+(%{V%`$jpf01q?n0LQ5mi3K2##3)_l9Uu)Ui28=q0~I6FLs_jP zaK`MuN4q~~x3ss;!B$0j1g9V|l_?|yrHdK9CJ%7_FH?*4*MHB{%O#kiWE)lby>+RK>j;pPgGC{R`L5W>k zZ#HQ#P3y4zbRh><--f{DL<7z5hEfreucB0{m?}Q$UEV$*cGC~bmS2z6>g6y{`?8-L zvur2ecw)e{1Pu+AO%>Z1k9OxvaT?UZLXZjx)ps7Gl}Rf7(GYuk`(=>3*PqVNV{Jbg1lD0{wau)<>;Bv zPYw>9K1bjHkj3atkD&ITdVFOJtAiCA#Rer{N0th1HLF@i210B5Cv&xemllB!_ zFORH5bZf`P=eIY!?uX|UUz;*?e3Me2$@hPc^XO9F#LfQ35t`y(|BK(`Xv%LG{lfNR?c_v9JPdz> zI`|Zu4^w~sSNz>xp3YBB;mX>qP^2z=9{XV0!1*P(!8rc@GCp3oZ}>hH|5(O6+7r&| zHP(d38bY^&F3JxBJP}x!lNV}_u?UF(y`iy()IWeioERfhcea%I5JId3ci<(5&uvpu;K3 zjTP!Aq>7Rb?7yPR?VJN|z0H5;)!6&gG0bP=b~~MBD4zu8GK)WXR200MRonPQhoJJr zE*3X@o^)`Irq57J`0nH+E)FLE|GYnl9Eu<`!i6amaJT^g0*E`qfh0!OcIP?UoyL+kmj~JY^o|BC)Yl}}zW0CJ~ zqtje78h=l#XiqlY@4qRy$J;>@V3ImEo;;-zV|ssFhr$$(5`=~JX=gYQuOKTl!BljiS<-9`367D8cr#TpcaI|)xto}srp^u zSg;-A?tkO=f0ow%fBz}{@euQT5)8F@3=9QfaE7%?q>Qu8Xs=8wb$I38Rw_3Z1*MRc zIKXp6C`0)vSh0=>BEU!-dyqIdL>8!QBx>B|D{J$>82W6Dvb@TDQ$P?B6Cdx46Hxu^ zM^%EDWBbOvkITQjGZ+|k9XNGjsRKTl`n}qve6d#ZY}yju%;oRYp;&r+byc&lF>{w(%!pNLVy zKk=8C>KmqigyB!7J~AeRcpTAz{>~4*7#NVg3sCe{TsjrkA=vf8agQTX6(&a7O^tX> z>@kDXCP4@=hCd0N#PBlWVEojY#0ZQ&+%rV8V=pM~BdiOM|&^=@3HFbQT2g!pUwNI`t>blJ+e_REr|6rQQg!$IKVtHBXY++EQ7sDd_ zjI76;F^=$3N6-#ix8J=Nmw4CM>C{J}Wd_@f7#i#SIyKU~P> zO&WD!^Mz*cE;Q1L(M8iUD(;XTS#Tz4)kv9K=$s^9K&`IvR7@{j<058e^dSk2hkB{% zecSeLvRp%Qr~;&w3Zy%=sW=B+0&aNo`)OYl-BckZ{4uV!H>o0ehW@bq-h*k|>tCea z1FX9pk|SWxpaRr6QR-2pUass4dEXlYTIbJ7|MmF&e>x#lngD(f7LWs80Kp-9phXxt z7L2e6+m%)bpIr`1LO5%o-)3=v7?2tS(kOg@Fgz>(iH$L|!a^Xhtn(r4f$pu9+U0RnG<*IvgR8V>8rkIP5?{IWy37^Po+t`U93SZN>aN1c&J!2VFi zWsC6U_^xkj)p6zCZSUz#Rm|ve9anheg{IaEponuv<*X+fMvZ4^KC>=$=YN8IAiH{?aCzo-NN{6TCA+p@xs_4A(T z^8h4Xg;T;o^l-)G_gBnz;`{jL+{wCVhtr&c;_6HzP*oD<-^gI?AvuyGT<}z3)phf7 zNqC9pxtZ3a(CV`6rSJs?ukSeCgJM zgbEySxctn~(1%RUMWtw|Qp$aSh!<75C!twy{J0z#REr8K z9kWep>vR@FiAvNh>)zh}K1!QhjTSl4doya37T~t4%%l)qxjyGW>;H6}#ZhnejR`mz z`PPlX#=_lOsa81{pG^(6VSDOL`RR7EthrdQcHc}|OJyt?HldluTP{PbeZ)S7M zXgq>T;LCj}XfdP?oCe@S6K>PNVE_>tf`mW-!92Hj19AU1QsgfKpFetjHWr7T>fR)g zXDaYv*v_Jfrgx<7rlzj~tv8m$98rOR{*bMNNkaPK*Or?za+4pO@4B0_zsFKN zhvBAfPQ4HU0Dy#7WuJfj^7HP>#1qTgJpaj1z95elvG<5x*g9`$ShDP<&Pa|=|A=2& z)B`oKQVu^-jaTvq4f+<#2d)7*zqa15y!hVTlsO}4DI24{DWPe~o^a=V?T+2U0x61B zr>BXLbgU9vK@5{l(u|zK0WJP>*=%F-syz}knl9W>dE?gjq2TA@^NDZ2Y`JsZIa-9G zFwJE8K0*M<$I=5_0g8J5zxZv7r;@<yO>74G4ZdddS)kyy|HFa$Le z3<&}C9U--|ROYGru?gjqu;T)7X%yujH3t+-_2(MjXx@I;7zjC=W;y2NqIFC<&bEIY zcr*LLO~Yc=EB2su==$OyJDm51>sj4}hOX0}8%Fol7UcYwi2kqxk((h zGZbx*4YToYEfU;FJ}gPQBk9pjCN%v7LZYQPeVA9wa6spUc>Zb7^2f}DF`f|5!-sJv z`_y8hRd^d*MX}t&W`uVXz|6WN=!uamvWAM-pfFZD`OJR=*hntT@2P5A_Jy88)Ox7&_B&o?f&&q+ z=VKFMz-SjL@#dTxg`2Sc1Sp3nw!kNqN;9hD?~J{(ByIXFS?JD@_w-Zx1?@YW5v zLdU$^*8I-)dP6s71ras(*>f^~b2KT**p45PYa&9%R$jx>( zb;>euY2*0x)cenwM$g%4{nNraS3}QwCr70Fp}C^n zbT90=zvYI=I_FQPmGT~HRjiX|{Dw8Ggt9qlP&+$tS=xPdZ!GuE5vG>ZFw07oA%nFr z0&Gm8`tO9#E#Ke%-kAK8*W1}r`lO-m$%X{a{hz8;6l`96g2u^_c=`dO0WW=zPl`p7 zv*^DTzUJ2zS9xOC^wyRAg^&Ym<%}waf03&LH`bvpPVaq*Ya7X5{N6_Y{uL;5`e!q# zJJF#Y8+}6GatfYFe-%6@jgSR56&P}NwVLuoE9@6qVD~Xbjmc@M;l&&~E9miFrZ0Jw z-s2>wc;B8SWu+c&r)AjD|4y_G${whr=kNrVqo34T`&1iBLP8_RB_GRnj|30I-NdVM zjCX0`(q2Z0`+Rl<`)nH~c-F7@2AEki?~_iTB_wc0#d>! z+Fp+%Y}HJwyyyhG+rCOr88FTuPLad6YAzu-j zEaIt*9BgGd*#ma^(Lt|Gqg^JNa!>MP=!XL4-!ADaq;9UzzGCuAUsLFwK_h9d>?8?In{~_ELJ^iSv&7Bae1@K)`TK+3-F! zUqS6tp;t8|nOT%?ay-?TX>o~ShxDvS$nUBkjw{dq^Mv+mW12b~TV!zYd?Z|8YI z*&v#mLM<}Y`i=Z&YvJnaR4rZa^{2n&Y#gjlfBNoZqkHF%TPep~t?HIR)XxsvhkT8> z4~aBgNH85jg*2aT`rnr!zGW25(!yaR@}7}=^qdNd;Z3yRUAG8mbYrzOUtyY@mK>vS zXjp?%-fx|3OQ&q#hHD%Jci zN^1AIOB$~_MSOy}J%~2KiG*L+98WZU(y#v1)8ZO%vQg4f{X0-@!;mX?C}Q<$q4v-c zODi*|Ijri#Pbu0KIi|tD2wH9Qm*su!L9>`4V-;b=dGRAUmPxP5Xs^P>D||NV4E4xo zz4Xk*L3uz6{>~Vw9qo|LICXy~7=;Zu!Y~zLtZgWcu|5ik8CnMgq3QdO-Ka3=U8Ee! z*{_8egI~q3#DC|9hF%7K-k5Q~%rDEkTk`QIe$!p7Z$KnzD5)%= zEHVp~0mc3d>qAPS3Nf+~oNWwnWWn1&5?xG&Pvo!TxZSu+3t6^t#5cBCFkO|W8ob=3^e}+G zC=^~kSj?99xgSr<-J3yL(ik>u9^Y8vKn4?Ns`TB9z#^G9>*5W_{}9uM{LBuZAgF98 z2s8N`85uzU#VQxeN8SygfD)qd0BadYJ+x%SdY=8>vxTj!%{csld3raLk{{NZcmhy}9) z$fu%p$4s#7Il1W_b7zZbont4F^>LyJi(T@v+^wbmcR4p^C_=9)0Go7LGu%dk>_Kq& z2n=yg85=>xip@>|#W`Yz67`w0s+sk&)*(>#q(>~uIQ*pcSmiKfP#?HhmXP__FN3=i z!%eRFbbHnEtI5dafxVPq=f=fbQBzwxyNSVa*8835jjiVHKDRh z90llSTWjm)O6`@Oc&k$-y;Vq2$V`hcFT=)+cECqNx5MFFvR!bxzNeV8-xbb@=!I(q zA7;Jq@qHB^l8ZLq9)Yu>EYK7PemI^iX(C`N3$Q}~W*r=}-oNzf+siq>Mxjpa?}!BL zXFpFVz2ZAGc7{{hBBO1zqB?6Bwz!=Q+BQ60FwVjbPp_N(w{!y(mN>rDC2Crl&HVhf z^`tFHsHVT!oVOxkEq^Ft4RmSf+fyB@UOdmFwHmotsew zo_|W9!^P+qraryZ#LVyh(R~f1Vm|}>Ks0fSu)-Mbfy&JnAQwA6M84tVKolF&k#!s3 zApnukPJ$6csNeZ~pNpWpe^2b&pZFh_elEFW+nBVvxw=#QU(~&IP@7$}H~J(5cMn?J zC0LOH1qu`>?$Vav?ozx#i@RHKD6U0XAZW2t+zJ#ZrNxSsQZ!%szW1JcXTCWzXXcwZ z^PT+hWF|A2WIxYdd#%0KPb7n`6Yi0SV;HSEJnwr|(_&~$)$Jz6IN(ni%VvDGkiyb3 zy?q>V9__a-{`#rjgO4F?`GIl^MYCJ}Exy$@?rUI`=^}C7@+8%#=Ddc*TpA1C#>CV- z^AkxDv&2TR9_QDU9}40;v{HIR%yRmYL}7)40NXM_S}OJXD3?Y{Vg+a`7L?haKX^t9 zAkaoR(*3dkTi&_M$tnq z+#9aGxb9$c^uTVv_ zPz$bRfqtG-@o7Ossan}3K)9VUamd?H-FB9e8(f2aa-zk&p#jibxp&N<&|M_$;)@2`snp&6e~Cxf@;HSf;*>IYQ$C=7r<+f_W%J@`eV=@8 z^$leGIc-qm(q7nGL6&D%~78yAU6I)iM1&;qL>A!3Bwske4!Cd+ytN6`VPIbQ$J%74E$+Mb=MyL zW!RtZMefA4v#zTB)E4rg>C;jUV>9Tta8iE@ZuKN9J`S8b7I5(RJg} z_|1S40OWu-2r#%0;YYq3jz?z_#zWE<)=DTDNl&^QTft`0mhcROY8ISM&?d@>EX3Mi zgpFbC1E9i4q=h932^GSg>uK9v`Sn#E>JIf4m6U7SHE`sYG05;C>02fny-wzR+0sWX zKc>uj-5Edg( zRTIh_#1}r!dTr>JUhns}kp*OhdLjzGmE4491u2R>IwcA0q?UZ_n~Iv#+auf03JHpj zpB_Aj6^`(2-d21%`e?KHeET(3FPQ{f;dxsF+U2XRl?%-Z)3ji`XVUo1atbF7ouz6inck`ImUiE6i)kWH9$*p}a^^8?SYDm-bAIp3-LMk+ee1s5lCSLw%fXR)4UVzN>1$!ZgD@DQ`|~haE+sk z7Y5Z@ofep#-`KbNWgIqLdDHH$`WNVeNWso}Ar|wam(;K`d!LAJq-{g;l;o0IVNP7!ul0K!$w@TKXBWWr) z=g#iTrAylz88}i`9BK>NBfgr$Evvgo2(&V(T-cBM`MXX$#*H|@pW##23*+jlRDs3S z6rBaryz~^a^kHnhKF{co!f~Z;#TYS7N)uTgvvJT~kb)M;DUmgI!q*C^^xl|AJkKA} z^Ix}P`jNMGA%9lAAko73v0e1z0XsC?B0x0X~07h4! zNDYeYCs%>8%Vqz~zrTooPonGR&7h5?fBb(78J->7;8)(mDC~Y6dL{D*6sn2Y0VM)t zK!|$q2owuW8H!K=v@VyR|rDFS#MeRT6F^8BC0)@Euk-BPZEMIv)RM3Px z`(8c3;~G4RDeks>_@`J z3Q`w>H%f6pmN=q_?HQxkOjT_m3TgWkE zBt@x}Jx|EHOMPaJGCz;s%d3-tf7jES6?;uAQrp<5WEUJDTY59^kV_ZNJL0-zYnphu zP5s2(>fvkgke%&sR1bc45Sm5}I0-*_W9{VWeC~`i2%7f{!$aq z#{N!Cn*&U=ZImkGIPMSS>C{)eSjR2*`rilB$A;s0RB4~wBnn0eh51xO%w17#J^|)J zlMS_Z)Z)61ha~$dcw$0}jB^t=WBG9G*Q82y`Ycq{RDk3W+zlXw024M80sP1&hv!0N ziUOb+00|x5H^qBOh&U*6gDhJciG_C5Cd#Hm&_PMy+@TGLSTtx)F%;c%QzZ|*`#Nu&>rJ?J7Epq4 z-r4xNtg=Ft<+an#GA#j)Zdx2ZW|n`#*;hnQ>-Lt^-C7b0O5#)k6>?};gryjL^Enkf zOD_wg?O)q5ub7ZUB;#6(`jm(EZ?r~%U1`|vaagRYPWFkC7k3GTy4&Y`1rC@kq->H@ za@jF2`zzdNbZl^V2>%cONNgn195O|~3^*hH>bL*(U+4*x#W)XiKhZKmh9reBnEV^R zuVwCqUUpyVLV^g$j~@elO*jYw{!KgN$JaaWiLfkAkOStp+5}W`DoErzupa>?k_?F? zM-xQ=bYD*qkfQ)7jQ>u56l!@{MWi{!;X}V~x^E>-^9&8Iuh!%F;B9J!{BI5NPn42> zyGo>lnVL|Tli|f}<<{;!k!`o5dm?M|{1bm&=JO8&b#%?Ca-~ijEWsuE$V<6u{+Vvi ztk~S(Px;|1W<`gxsYYwV$qH8Lk_|m4t&8@_1K1XGhna)*1qpBMRHOGbuWh(F}?m@E?vS62yIFykyoL+&`>QgwcvvRL3nl&M2|(7_dJ( zw13p1@R`_bF_*}P!5g@?KsJCRA(2SN#N$)zzNoo4LZMuOO>5*2s@;T|v~o4n9eqdA zWKyr+Ka+cpt?nI+mYKs7<=Kra$cZ_Nbcp&95K?+OVFyzRRgGTTy} zvFiOXR6Hv0akpTQ9l7aT%Yuq)4WA#$_n45?8don%{VFRN`=G7|7P%@;_@xoy?WHNW zzv9~5bEy~{()&Ej9zrR&BBuwPV*Tl0nWlEAeoGl7374+doRuvOC84^qbLO?}~W(sDJEl|F^dY zjyDWm(y%3Nw6DO?mWl!`F>(+TQADx-$+Vs17_mEC`f4k@A&*6A%w$UdP-0 zkN{qFpc+do61k!uh93VRuL zQxJ8cfY5VZgO3NNdNnQu^Pl!fvfJz%ou~-v+})~{k9kizjMf^es8bqro7Vb8ITl@F zl*eE1Wj~{zJXcN-+zr1O)D)z;*fH_&eip+`%c$x)xs@&a>AZPW{ZZ9A`HU|t?0A*@ z_c=KJDdu~4QEtRWax~5cxpu$AV+jlewRXMtKUN}U#Ix?*yhh#JWQsjEc&>f;nR_qg zIQEd)bNC=8?8P_vwp0!8R}_k$o!%o6!T1F94in^fTupjA1j*X*qg!0$oZ81Gjde`Hb3#=NPO zE-KR!n}z>Wp*tFce-XuOY{WJ`qgO`ygmti$72$yBecgZ79ve;q&jx3rUD@s|e#eM9^qakZp%CwG>4ec^fe|_a zj|X<(S_nBf8-RlYMB@OXb_MGw)Mnkwvx_gN%hyMr&=n@?$nA5_P3)@c3twi~InHa2 z`)s+}2Lnu1WdTm4Oa|F4vEk3|;Y1*)82ZxEN6J-8Sl-C6DbC{M3QP;w-z_%&aN^s0 z_S2x@%$wRhLC2&5;rOKdf~Bp9+b8D1vgV8!^c6#8#vk8uJbbcF$k3O{bE`T`Zo9o4 zWJX)XrUhO4nZC2*E$jM^2=<4cBm5gU_;ePunosa$nEF8KTm`<~ojM&{fCGXI?afz2 zViNwADkm(Ah&k*%{%%A%nMw2&4{5D`3266DVmgk1R5GFhM?NeX!X4@fl1J16+9Y5! zx)F4Y18BTJ<)csw?Wl`hR3UnWK)-s97DoU%chTZ*_XGh zebZIsjBO(8I$ghgY+z$0nBB4jHZP*7d@EXG_&YYYjz=rxpZpthF&8M?vNLo7(XvAZ zOZ3q8q48HAj|QG}oA({}xHE>DZGR*JqLH>BihfDZYM(g>*~bLF>7&J7?c=7lALRNi zH`>k&^g(dvkXDc>Bolbh8qE$A#UR12=KlXKlb+Q%pglmYaq13b%{1 z+S@(Uo|cPlS6R{Jl72}Vd$viSIA=#uGM&4qo0FJio4sp-z(M~iV@&4%AlKF(aAz|CtY~kcSx_T&DJ~xq z2BtcR9tIRV09vKi!$%u<$h|xc&x1vNC2r-^!}24y!YIQ(1KZ;~0=>sd7OzLnQ2`~E zeR?nV|8`?;YZILQOupDYA3D;yg?|E1ELZS?pK4(>d10}=;5u%L_8Brb5zlHet4qpC z`e-RG>07T}=U`;P*L)6o4a$#?jST$Okp()ig$L5MwtuP| zw&Fz@(gr-VpHV0)X?^ny3LbVBT8F;ceV!8`JH*Vfi!Y*96f7{q;_6$>exfaYXA&TM zIBEVD7;=}*F<;kU$tu1d#8gWBIj&@qYtlHqM1xO$sP;HVl>!l}IP74ABN+qrEA^cU zuI^&J$Cwy&ZPK3eLgNWJw4C?;ac3yw-Uoh(`#ken=G-jRtWqv!`s^f~3yj2N(j%@$ z#HxiananEP>D?2;XFj-_MA?Rgbl;OBf4H273wqB7#f$zWS;7W| z`{xnjD5*g{D{qWHQD(v8z=a`8iX<9y5D=zxCTT95>>^8d97keM7}+z^G*D-UF7@UB zqEOlJ8m3gS&uIqpF$wI$eX$WOMV~aQqqf60v{P9;a%1u*YFlf2LRVZ&Qn1soM`FD} zFa1KcaP8`;+l2b5m;aMB+P;s!~h_YIC~aSP`OopJZY%`(m-L-z9) z=-L8bKNd2y{N1vas5SN2b;9Q&!zrgP_0UE}*G&8*hx`)zN$c89Qsczw@&y zl&;P-g`A8ipW&1RLp}Kdt2# z-+$LNJ0g2%Zmr&{-?->zuqWnNZFp1sI50)ZO%wNBu8&%VcfU8oCv9Bem2hUoNMkL{ z0q0PboL6OsPq5qzGuc9C)FYVih8kb;Gq9;t6o*mJI=HhdQ}}?205nz>0N_4o!=H{& zDGPSUI-Ca+X)PPgXH`z!Z{?2XZkwLhVWHfc>+)Vg+4*74lB1i8l+OeWmX&exwngQu zbxR*ep#@bG(t6S2=B7zySHD~vMsH5Zf*(=0ocUvT7JrJCplhG>aJUKS?}_9x4U~I{ zLDWOkfViPJELLo&YK9(d*F30>Q|tv@7YH7-@QRv;{{zi*`1jke%Vmnz~J> zCElgFN!V)@o8MJBCjOOUGBB}#{5p$30i)0!&*#y>!>)~AYdfDssUuAX_^mZRSI?BV z^7_77v*Td8cqpQMy?3qsaB9M$K^$s{6>M{2Jm*SI){gtCG~FYIt%oM6{Ahe1P5MOJ zJH~IDKGR}OFe*q;A7d4M^VF8z(Kqb2gZ(B_&9+X>(c$iM(_{V^#l5bxG!i<~XsMq{ z(#`ykVcOa1GmT+$lXgc(ew(wxte&yk00hg#{pPkS+Bn=esw(H9=DS&qO zJe@@A@@!VWaceE2E=G{|ap(qh7XqKW@Yi5m3*+SLJUh5k7>r49_3q>Q@oT%CTfgaz zP6KC$o`kV?x65Q^U1x6j!Ezh1Vb7$X`;moD$KUuxh2AO$^zPqGG`4@T8^O%}LtBj2 z-$=OV>*S={3-l52Q!p9l2{SC~Hc3#QDLAICqHZA2W-c$vu}#L5FjpDPuOP%4n*PPBHY z?2Izutfho1p}VMP$Q>~h0%t%&?(U-@cUIYKNH3_kg-iCn{CVNw{tk4!2!Pu3n`Y<8 zzs{xwywOJy0@=7oDkz!;k&W?}MGRmt^WXG`c!mu1oSk>OnKe(`k*1`ipve%|s2uNR z!LfTzHS&&%QqtNxd-+Z@JFIwwA5~g3tI0U&qr>D}mDiP0uI^<`e7d-MLzMU7eZz|w z?~@kyVuM2=n&OPk;2T^@f_R5t!UEN9k3-gbN#B&m?m16M2L0|N$7CX z*FSw+jvYAehWd_P?$NKim#4BOb~Y}f&4@g-auqNycEig~z0dT)-$fOy zd@<2xY+QJhPh(o;`@zV^lPnXFZ!DRIn;Xm%Qc5v8dt&L8qg`Pwgv(-({Znu_1|pH% zN;|$y_T3!yEzA5<7TR?<~&CG;-8p{%rGU%mXeEBbzR76so|5deJVufl64*(#5DHTW*;Eu-u%BC2`fD3a7;T~}w z5h~isM!PAKAz-$+Ds)(AVeX3mpD=f{!uxc}Ve-%a-1D*d2mG!hd$?m(F=a9qgPA68 z&Z3XK*q}}D^|X&J-Lo}%>#08j7s)5jNUT4sJJ3;Pes1e#wlf~S*sWeS{jw$grB0BS z+{`+4+>k42!-p>=yHGH%erotzm5vs9dAgs@{cHtFr?du6Pti2yDDH)5>Bu6@5z_kt z)}y|aPQvcbhcDwKnhV00j1s95_{o4&V|H#(%rF0}6wWVwKOdq_2Ni@XY#+z!v(^no z{;VX-TVOIJ=zpui)DUQ2STbJXt-~rR4A{5Co}8 zg=c|g)$P6C|M(fHncHw?|FGcus{T0!Us$Qmi##ytLUv33%YyJCp7F0>{x?RFL5=Nv ziS4zEo(oeA34u2QLp@E-R!5)x%i9FRI=ow<@l6>WUbDH3mF}M(gxoJz=7B|3lMG`x zOiOx5uCCH0Qd;Jxkr*mt1c$bs&~wuG@{d|l6c7*O5Q>h&BhX4M@O1V;m!8!9Cab|CE{rUxVCHIlaNs~0JP;}22InmhK^v!+95 zeT)3@8hz3A6WTK>Q`xX;ES43BeNe0M#CTf?CZ_r}VF7DO|Bf#uTYRVZfQ}5?*BG}# z&FamWiKJLj+NIpUw?6uW(W3hkgZVV_5mla}2j(1-BVIaDmqIh;ZCY_GOT{)cAW|0mCD4*(Eg z7SIN>0`DQ@AUUi7FdzOb#t*6i9CZmjP8@=PO;;5wDrx#zh&@&*C;~JK6ah@`7@J5i zb62h;>HCK$RID50Yq9l~*nN{VL8qN}A1e|#j$YU3GPK9^{1_mnv9my2ah#JqwY%qE z8}MhHsD?Ul;YID$*DE*wKlKlXZH60yx8`Fu*C({sS#v0enS|xtG(SA9&(W*JV^`;L za?45^85UWCjQLm3;fKpZ8}ylZGJh54#(JCZ;NxyALWc#*+7u+ozDefo5L`HjIsCb7yipjvGTwY#6Gtm01ivR> z*D3f&{crv)O8V`G*5B9&(#~=FS3f5Kt)CNl)<5tM|ES92xl~5D_vph-#xP9-oImcp zlIi`!J@j9nO9cxksOW@20Xf0g2$onWDgcVa1fC)(fDR--NFS*Qh9k2eWqsQC?t`}s z$=AlLLBsLjh`wTU`=A3vkF)`@krIG9@*V)FfDDw^*0?^sL5j65mmFgjD_SWM$>~2C8Zj19JojW$CS=Ct+5OLX%^x%bYH@b05=sRg zeUfw7HjNH(T~@m<{Wwt3<$R1wVSvkfJ6$vnUnz3;cs|e0anIxZJf%r%5=V3a?GFhe z;>cHuSW#n$$b{Ym+yKj?p^_u9Q3!kZ$F^JvOpDCxu13wzjcvxOI`Ev?!aClQZDaQ8 zUQ?iWfmYc3dDgs}V7jwI^J5qHI^~XB^~^N9|7r1Ss?q}kw4Z{en6R+`E+P(~h#m{P zq-aawkZpHl=4bn$N@th^$8ywB6~3X&BFy#J+KWPaihz=hfe9yMa)?nDDdYQ2q(1GFoQE}FkMKtEmK~>a~LAuSay>7V&U;e!O zV)yy0sLI8dG};1!bZ1`v9c?$sJ5PhnHu`zVyUv4grR`HezFlEL1?>p#VN7T;56hxx{n!{sON8@b}K-^wWCTDj&TWenVlIt)p(6YWm`G_D@=O{RIY$sd+k+_RKu= zK6LfVN-|yP%*>0{SJ5dK%NxqWB6*7v!(MSgZZCa@N`~fU*009@m?crATlroYcxH$; zcv(2QhINBPQ+3oM>4?WvzK`q8K{rj@9vSNF{`wU4OcD7*5MQxqM({`TN4UHxjy>4( zr&+|5>qfsyr<9@`Vp}rBPEx&vm00AVKtq=~YTI%8K8a+@!(pdi-43SmX|DsM2R=Pu zc!GWMnSWyGHltEs+B*O16P+>#uIrH4FIMALL}rffWbqHgJudju<9@GcwoUCqg3Y_g zu?|jrDvH_jOC#QD*h~cl!NpBKDe5tI#QRk#<$voW65y+HW*IDci0SQ~oYDMTf=3 zRvjuc0=GT~RJ6R`%B**KoxkU{OHR6*`+HR#CG^y4K)0DQd99NTszr@)`-ZB*hj&{y zc}F6ToI^ThbI_raW6`A<4A3U*~Qdv)`Ik&EpJ^qx@5cmqP5>+Y6cd0B!*uwqN50u0B zm91+s*n9H)8Z=9ci6p0*ennQrT1&rtOKmWLFUPtr|QwPN1aG!I}*F^Ox{Z1%)7?AVeY-!m2A zY`LfBPHHa#yZZB-^+cD2R?Vam*wqiLdD*Pb?}dtSB;XUUK7!WgMyS1g&v9T;_Ko9x z^_Sz{AnuPa#Dts%vQc$Et?U4k$ZZf z8&c@M`16I){+zJrw~)p>mt6(Qx|P=1_%~!DGltK-o6~1RNyU2vDbvVR@!38w^$*jM z*aXYQ|HQSb(mC~~R!GzB}nFY7+C)FozK201<>}(%?uW8_D$tZ9CX2~|SCP|5R z#Ha45?nvGi$0+IVU>zghk%hq#_EiXIwU(&D_*(Tdz`kSfArHj~;Rcz139e+OJ|^1| zK<>#h!EtGj6TFWKLU)x7w;CA@J;sIAme{BL52|f|9}HlIQ!1UUaC+6L#0e&tRXt5< zxN@=Z41?;~pO>bArj$-enCEcmvE3xSt=90Y>Oam0iR9H8e7uQO+BMqk*wwd;N+%t+ zhNX)*3PpeG=jd00meCP=T-lW!PsRZQ^hYMGg_H=)&1u^>uPO z2yHkvjF24TDYg|_EXNB(54J*YWRA5VY9!0F6Vmto-g8u@nP_&DB1g^`h~@hZQC)!D zmf)lqUTf$Xc&;>xd1%!v__GJ=mbBE?^&l~4y^p%y)xK}k6CL&6aB=nhenw-x@Q5uwO}&R&d8ulJ zLXj&v8Gm?Ac^24ty3zem->vi#jS+U{$ps((ASyNwo^d={VUm0A>*!N$OOcp#$Kd7zpWOR@qkHABl zA@+N;NlIpZtI+#lNzdDS75l&}fqA2YGjhn;>H<$!nD0^|$kjS7>#X z?<*8=;f0l`=!wzb??Gxf+wC}_xI)7@;{rrFULCnOH_5du9QI35;#kEB#Ypl-jJ4^ATd`|c|5WhQ%;NMU zN0*Bl2`u_?I!;fs2sX1iUuk`FmM!@3)2>312+m=f}(=xSQ5+ha-yQ@3l|3y zS11;NoNxu!2ptxLgv1u?hld4%V^#pspwZaH^tNI0zt80EXmX`~?8rbwg>ogl6w9L_ z^SoZXpf5B}sn$<$Q=tr7leA9Nd+puJVCC9Ye@0oB(ddw8t}1@rCwC!Y1$$RRC#GL? zuiqzC&9rY_y1XL9v9ynwX7OY-as{;->~gQ!(Q(ZT0Z?WBKCZ@=AjYNvB7MEUs9~ehGYV*#6K) zAcutp(lNow0evhm7cLww1^mIn!l8x3YcQCwsJMcQ>;x(KuuaY95f+iJCb57jUId&8 zWQqkcCXj>U1HR~8C{ zmV`qUvbtVZ92vIMQWDcNH9{DXNECooF#qtu&2Z`&i=CC#y@pr*Mn?;Eg_0IkA+dVT z%S<5!(YoIwG))8=XIoJ~iD!qOI;V!Q4FZ53+o6$ij@!Y_<()MORqU@?Tdp@~&^=M( z@xsO1=4QGyS!YBbDP^{n(VvsWc)0jzFl(vsaUV`|%!mONIy@%VY9(aWLy8kt!7!7CYXkwN*6zx9ecyjc5E5yhV7c3Z6) ztTOb&wNU#`vp03j$gMfLoL~AIL9ZTlx%clkyFWOD5?1D#19X(07p|5J3r{%gq6nNm zw`&!!vzrFKV87HgZqUl4?hN!F+tW43*h~oCM_ZRHyy&#6|(6_%5&XgUHcrRY3?VzrJn@d$iIlsq=GIvK!e)_}&;^{qIC3*jmJCFq%a4 z8gp7GO-k!_2mIAa#dBKRsahUFN*^zNmBVYnPBD3jfNb{)l@JgN%^; z(bNFzK#K%fnsQttvx+?}lWlgsWpS8|ynsbE*m4?dHI>Q50PPVVCLE^3*1)7Lx~nUkRH zmS-}*BC3!8CKr*ii$KehLUW@F{+F-cjGbFmw_SDGTg!j?uKn|Qc~Oh*Y6-a~E)?d; zt*e5N|C@g=V;Ft}%Ff=7!_oWSD|Gx)pC6+2ColSb$iRQ0@f%8?9%&M}EYP3EmoIfz z(tPFqyeHV1Xp&mhw?ar=oS_IwCyA~VAi}TtT5r+PT4_f9&Lk>Az?^r)GUKYhc(%0c zmqvwAeCz4*?`(x9$H*7BvKj`qI<6}BVy1U&xbRbC6be&$6jY#KI3ybrK?=p)V9q8% zh(qa_OtZz1rO-4MqQX}d51@;oSx|YoLMT35CL4sH!$Sz8vGCp?9RL{m;&9}AamK&7 z=7u`|a*IwN`lxGL&y~vLLPP5o27?Ub*Qvmk7OEE{KXLo3dFw4Gi`SO3j}%eucPFo3 zlU>&H7Hm-`8UGZ1Ym-K#EADbbMX1V0U8^3C?QpgIO*mL>tScoWQ)sC)q)SIdtFZnl zwM+b%r+rjfnm?jNRB+3ci!EVz)nXF9?lt~AaP;BG zE^_>lq&Z%hNu*mY%~K7YnVw3uCR}lufvrXag&>18C2g?*2t81hjMaw}$i^!ILCKK} z*}P0K(8NKZ*8>`((9b3G*$8>vY=Mm&C^b?qo3IE5#R2HidQ(JDkQ}(a(kAO6OMBK| z6Ue*u#kQ$3_+yp~0jn@(GMvmZf=0#Ci(~6L`VF;x-DbtP^m=BcP)5^d2Uo35mb1D? zO#-h6684Fyhuwl^0~gwZQ71AYlxK^-<~Y3vhH*|S=SiAhDd@E1^Y~(V?rndoRHRT% zi&{=id|;p{6nDy2qy0d$GW|nSGHX?MF_#$y4+&E|vk*IHRdez*y*4CRSqs09P98ZW z0WfV~Dk6l5K;B3L00&tJ9Q2t$R0e&S3uICBgh_bKGFq*K*|E! zNLIidi3d>nJm7tEN$K+P_8}UBznD90G#RH>Fv+ZGN&m@Gk7R2w;7TPh*MzyL{^$9s zsTPr%vU|t}zwy04^Y3xye>qir54F8TX}I3Y60KbC{n+lblb0v)K3E}k`9-Zj`q9$j zeuH%h^Nrpf^Gxv*)~68@>FhB zBmQMiA46l}5QQv|xtUxz04_sNLjkm27#R5widkfzjf3ccVizN`xgAXCJ$gv8EkdQT zKQfC#RS=2U>`Yo{EmFa3f(?3f{Ql)1G5qUaws~Z?5u}xPPw3ze@$}&!sQWd@*J=aQ za~~@RkYIWV!K5kkE?DR-Mxjt&+&IL^&8dcX@$y1d645q+*?!*~9|ij*uQJIv+M#>W zN5%e5L=;%|Kbxv3B1+wJS=xon)qYF)|H6FHf;Pr9H*Hn>oN|3ZvSax|B>gBB6mz6{3nv9UR{Q08;_L2aq6;Gyw>H4}s*z zP$YmbnFB}}A_xIRYc1ky!f^xv3|SyI?0{QDz$W)tu8$jxAiyhv$|3E54FU`#7V>YG ziymN##x4<2=6=Bcs|ST%EKmk2Yd_OiQt{gZM?TMgej;`E;Ir;Nr<>09(zB8k7oq|| zM+3H%XS~(;B!Ulo-%#qDyO%nw9JU;k;PnZQnV1kRWj^H1i&v*yAg0earbx=|p1}4^ zr_K6+l=~S>0a?dR#;_1WPm=*1WCw<>F$Sbu>n;BL}&qd!bNG2Zz*44JBbQ;FY0P_ zb1K4NVVb={I%Cir%hZT$>&c!NKf~{K%om`3p4o!3lJ1PYgO1#c_(Sto(;}h{;;%lQ z$|o6p{F6{?70|O8xYN~Ry}q;Ndw83lv)+EB^`i1VrlROfmr7#(j8j_x)LL1dFF)=( zXydgJePk!?kGJ%%EsNI_DUZ9yb3)QX3szFg45&LUr_nh39%hW#9 z{g89_0~31`&t*T$Oy_`9cv7&X1~5r*S=F9k3$;`_o>fl`JlkT=Ij=i2yJ(JzyPe`H6*4}99M0PJ~gX;Mr z?N=-l_iWtcw)q1EBO5$wpfaA`rP9!H0Pp6H>BwI8S=an0(yLcefF{ZrLfn?!$ z0HBd8qQwO0C;?_p6O7}_$=+TxZ2=X07at>>J&Bf4qi7ZyDjqj+$o4KTdi0T>@{o1# zgr(=>*N0^f%#9NG#dx1O>28ZdGF1rk@hZoVu z>@wJjNL&mqBmhds0~Kk5nzX@WKFJS>^Y>9N(F40$yXPPDwt31F#woe>h5AfsnA^{D zq1oVepRsw^KdXna`gE~0kA5X~-po?PWbMdtoeq^?==8I5-K+NN{?EBOkLdR6LQ2=$ zE{Y`kkWoT~ThF3bDg=0Dmd`EZr;Q^5C#~eV2VgQqHegKCAPcp0#!y!7AH|4B3r8E8)D=12s ztT;>&$03vh;(;gv#~@5W9tbY9A_EqHA^9@L+1TwL9L+`Tg=SS^jH1MMPX@)8?-o8; z$PAf(eB)BP^_tj9zV7hIXd$C3{iB!q6F!+)-_-1w4*id^g6Cb1uW3<%-EKtJp

2 zU!B#PSf_VZ=oWQhv7C58N@AHWtp&u0LQ}98mNY~h$C*?pGDIObY zU+UxWPX@PphM_7=#e*?a_A_mg8Yaz~&$`1onrH2Q&)&EOzaK8rc&F?3(!Zs_%|x&k zty=e|CD@7Vr?a!hjHGgO-8)V%8Oj$rmAbK1m5@M|CXNcBT$0(3RL>_A?T0!aP@Wz3 zg_^Q!iIK7xDF=ysGh{BGBae4aKD*Sk=jEJ&0%)C*4O|6)1bB+oNB|yT!SjRSTjYQu z6%*_ksp*43F;N&r&2ujLvD$CEvFN_XHMUI3H5s9tetxU1CV4S zfSL;U@7;k@DIxSGFq0?ZdDxt^@DpX@)nN<-woFaxZ0h#*j5OG-B9892|QHdu$>ogPdYcyf^K-?u2 zYf<)H2a>yd@r%Vy`l?DZ#xC~a{_eq0p4yN@(W7^4D`|s+^Qph<1hY;@RqHP&2|D&k z+Zj}bs+*dsjq)@2JAi&By8@y}=tX)npj7F-OYgmjG#e-iB1Hs5L=a_;_x-%j`>r*!-kJF{ z&*TehWx*oX$=PRL*WUmCZzEyrk`cHOA`FsdJvJiZ;z}B*A^#N-x1Nh-v9&FXNO&XV zhOEcRL!xRS9Y|Iz0uliL@kmlE1Slda8X&^B0l+5FnHF8mJ-PSa>Gm%#E$e6RkBl-r z>%F;q(Ro#tZKRz^am{Yo_VYKdyUNG9CGISD$_*&;x&v2|WsOqm)Qp_vWM4Af?6-bE zXJC@t#yTF#_G`c2y+OSbo>nGLWF%F+F*dxujSrT(Z>Pr^v|go+Z>5L*kvI(tTXG{` z9xisFb|ZRjKkNRZG@;g+z$;z)ffzU`5dCPoVE(bjjUAJOQ?C0-5iVbp(%TU~TrfZ< zxb6=)9|8+-*~$@$-~;O7N_tcfTPL_^`_WH3XW*LM6SoKk!6kP_tN=&giW6`-00K)^ zh9!#wfHI0$W7~t5y^1S;Q52R-!^Qr_SBwx7f-)wwG8S!Q9M8T`Jg@T}tQq-seDC4I ztq_Ljmh9=Iq^8v>$dLTa`Q^}qz`NVOMitpxI+N}9~v9fMs*@dCBYA04|UOj>>s884KsrGC(bnuj)#$U^23 z_OS}=J?@B>+mUeg2Pz||uE_7I1RZtsC<*m%&xn@LFbo^|%HR0?m3lfJ+6VnIKJX*e zbpVWC=DL684-N-{{Eb6UE`vcM2fWcdxO%kmAP@Rpq_L=hR-IDlJG|&B>>b(+GKZ$Z zjH3x~4&*oo8DNkE!aGs!bN#jY)W4=@vsY8~8Ku?YP1cb3MD^}_)@K{1ZT@kg9;Xk* zS+}1vBkXk;zw17)x)yv?XIA(8Lif}0zA1~8d0x4q_o>L)*t6cSk6HycrU~SUssv{r zcg-ZFW0?hEyLVokKa}868?a%IiQo3&dX{9irf&6@3@3RV$;h^X5f?%^>=}ofg2DRIJiO#$Yjw6eZL62U!r+@ z|KD%$^5jdy;aND{dmePD0J+No9i{l(b1g9)-lf~aS<@CvDZGkvf?AJtwIn3sB#ZOv zUT^fcro0mf>lX7#NfP5Cge4k`OhyoHv2e+yk2>cu-Ci@K-{hO971~OdHcE@wlZ6K{ zjKEhdSad)2sjIXJhSG~q8vBwAbTZeFu@6L}RFM^0WxAlE7=r@Q&Z1!I(MJ;jsc0%? zBw8x+Ir{6oy5i5cFV~Y09nU-U=OVz&iwIhL*NJQ1f-r6peS3^BpmwEkC7IhAv^hck5 zswSrsEe2;C*@V5#4i4-%5MXY)M=tvzCa-hKj_1d6r_;#yE_Py_n$f4eY8zLq4)^74 z*_?c|ztkTr->i^)=2SnOH*30K7w}{=#=SbdOt4kWwTb9YqXS3#?uY9v6^!Pr(Vv6j zjN^quWWNxtg#CnpjmUKrn%umbPOj@ixCl*mI1Zy5jxWdCRM0+ikB51Sm*W_YGapaw7?!~S= zqVgL4*}Ypof`m+NHMK~+WftYS9Tk|1aK<`K5To^J%Zh{FAwyxf%IfRYvswnlwXXi9 zOJ1ajA0;ZO;#ExZRBKkceh}03_*B0dMrh-`{mUOxb1ys^j(*J+8COFs#z1P_akK6d z9e83O07eF`LCgnkKm`W^2yg?PFo{7Kiix2ZwXFG=xA>tYTE9_lLc+me$i%=pa4`@D z+P>8Rc|vH~JR$GZo_D;{69N<9YA+6BXP#(Cv4zfFr46|nl4hs6?DgYTj?QR}r*oUf zXt<6RrwROVI8kC#wxJF)jcT_~<)=K=h=S+c6Faj z=%awd27i|T%k;Af>ZzkrXHj2<|qZNd(*{!7;*x`9ur2?Uwi6 zf?@vSw^ZHFvtO+rtg`ZNQhRe(7MIaP)=gDt z81Pd<@F+kH;0x*@MhWW?K~uNhNpvBdq}e8#7*xQe#fM34WG(wV}Q+uS*= z-sjkTb;ZuY&jzpD4&?9pT^Evl6@q>w#`ua=oX+M^MYqL-7SW}XhvkP`Z^>~m?BDp^ zr98F0rwH<|u$#AB*KK5eGEZ(_P$nErC-$;M94X3@18N{CH3f?Xwy`%OLa{g~4to$I z>~Np{$$cA*F~^|fNYFX@4XX>02dhIFSTX>E1t&4U0SL_!q+aQE+$o3(yZqii+tOr^ zHa`+9BRW!D)RD2kb;sg_+xwv>!wQG3w_=!!OlscKj{4^Eu%MSP%|n487FT`Ac)3T^ zTg@)N+TEXQT-d&zz0c^Nx%|fGIo;RCUR$3eT(@J*y(U*aT?~sHWJ%v?ncs20sU~Or zu`}yT=}MsWq!v4|B_cZ05RlewdNp^SeS|f+jU~~MtyJO!NBFg;Sp1Fk9y|?j3rW1riHG74V4)Be1psO%fM@Dj z+@;;q2k$RW8?@6lD~~%9hX>9`Nd3aeQ{k1L=ngcRFvfyNTy3`mk&p+;*^|mei8tpM;k6>DLIW{oGe(9Vzlf z#6e#b;q-9`LKm=GuMU*~yY-Ev>M%D-ZukJh7&i&==g*qV+%iCIECQ*a4nwhR5s)B2 zu`!4UdPM{SnZVe2fVmd_X7u3;CEvx%%bj1pn&pIiC0zoD3>VJgl0RG3KOG&h_Q~=b zJ-*UC7RW?rxf6^(^{*9l3G?~G$-K8!c)oRcZ!FBe)~EBlobw)mY4*Ma^1Wq8Mi95A zAFWU|p)4>+%1qHI<}Y@mI)d7b&)~Bom6EejdkfvC3*Q0Nx3q2!#zQQ88LM)}M0eRu z*ouEjM-R*!&lCeFk{PgHkwoZ6Hbac1PJ+*0)n&wqBH0w|;3#xT5*(v6 z14FRG2{6<%kVY~%hzuSq0;J6u+a8i?TZI2LGyUqC`5c`7q(;>R7Kk4xejfjGq(%8* zI5D-WUQmR!?dvb*V~1 zvQ)|4qPyjns>o5s`i6y({#sK@1!7!ytow$(H!pkF4XKJ-8=Ma^vn0xSSCWptFGxe9 zV~Ppu`DJj{w52R(!X%Ep5jZf#AORdv1gLZ@LK0v=)|>~l2&B(hM??xE^pTP3))8m< z+BoDqdtyYQ+u!&-Nd3|9ALn0?p9AinuR4SLXOLevp}?jL#xMOVq&&6)67hv-0!g(l z4Z+nyNsurU6$C7P$k^N4P=ZgL{K7i|V32|dIm7DO?zthwmanRSiQ3|nV3U_yT6CVy z;+0Z$x3}||K5f+$5+m-#52||%t(cdD?i!hGc@|8*H|TKUSv&1J(kXqJ#Uq-@36sEw zs3J-RhI+rRKb9%XRe}+k|?plx+I6pa3U;1mjFSM1i?TSb~s9b`TFmhd_Ipq+P3!TUSljBzujFE3ReZZL_GO3gt% z>H>n~9{OFVYJ?VrQWBH~Q>#vV60=rYo>jraO^Y6((mq%dqYx_E+PFYcs{0JLflgjX zpYnhQ86Zpuyc%Eyk?o35^8t5)rGZk|#2_)H_2846$noTJ>p@29r7=<1{17(*=O80w zV4wg3AFu<`Ku?JTiom`ILJvvnA3eQXR(yZ?%hsxdN1!~`G}o9YOP1`9(rn>w+Sanw zc0*Z_dcvU<|ooF0+t_(f?;woOkD0graHEvpQV=fyKeNh9Oy3mi0ksD?dggV zJbLU<>G(B>OV5IiOr4jcOm88D(kn&I6uEFn$$99>&|WrNl049tacxF&{*Vb?MjN#Ae@31?gr-JG9t1~9U z+PU7ugPNzbES(&$W0S9;%hKQ;H&6AIx>fXbwmWxOa@?*&@k+V7(z}Yd$}iVH%?aE%sg5j z(@Xc^n;r@KmNZjA*rxc_}YS3fUfieu*Kl zsN)S3{C=$k?Djr|;dr9R+_*PL5BUigNKA+60K+JnMima4Qk6i;EIA_z2@x7HFV0Nj zFHFZorPM|QS!98Ftej-x;)|+E;$Zwb9RmzRp-P~CAt257pZSBL#a}LO9Z(OaDA>|U zITiKV;jER?U!R8j~}(!nlU^Y{#})9(P`}?&0JAh`t|m=pR0Xl$YJu%#h2M{$4{~q zL!1_y?l6}WWST7tL9gnV_P2dX<^s2xi(!PXkh$=ka3%!e;X2%Wg7jZdPZ{jYa(s>dyhrcq^Q^j?OH zUmkxre(mV{-G=DRU5}3+$L1_lc@}=!Q0Bb)puHg=N;Q9|(DhCPF*jLDedSR`W`;2v z-*qZN*OZkf*>3@TUKeA2i2p@8rc`LGbXqZV8Z&rpUj6@y zLqPp901$TDwV;5#cz_m7IUs{ZU^38>1MO&mL0xpvAU%4FOhDo%>`Yn+^;0xdomVt# zWCT5}GKX$gu|<0g-WDZS)kh~Qm!NephG-P#JKB1%5$!!VgDzBwML!*iM;E9#pwm>C z(D#(P&<@H0Xa(RHErNT9rU%&R=*1SJlriFq92{2=5xIGTUE{1mgP-=iAB~KkV1@4dZnv*KdHH0}5YG?DZ>@D1(1@jDs+D=lEB=}&1d=J?vo)@-_TsnL zW)i=7)J#Wf7=~qF@<+l(GBsz@cG7iZl^LToCZ0El8|N%+bv4OMt#<~%K$0Mb#505d zc@hjwr%MJ1z-iNrbj5HMNfXDEx^-9Y=wA1`Ok%=0ft3{*I4SDd43Qr#oB&0x3rQnP zzhR$AwDM#+1vCN+B^$*4y$Q zW#RTg!)U-7)K}yY`~gKcz0AEBp1Uuc$}LYU)qfujC$AJS**& zuMJjLP>X#sp}dYR<^E&!aiOyKnZ4x(X|j3OR9SA7V(VE%j(}zUwR6F?fZd_3*j)Em zPD9N!fj4u;=+6q7wR6w@Gr;~I$?<>fpBhns1VkLbgIFyVA{xj%i7Ek{;+V*dDT-V| zg+><0;F!8KsftjO%Y>k4h5-y|CZI;73Lpp&ZUh84f=WlXrDBmaknaw5??T&e1YWC2 z&t;E_L)pi3VbMk=tHkNQOVsN=4yP|>&6j9I;1S3IaYfr3G3I|iwCxR}Ps8@+&T_^nIwS=@nJ_F9jH#kY_KI)5a=UeN-8b5X zoq7Ln>=mG~PD-A?@s@9xi>hUCnBtAyMn8PZsLNG@=LJ|iZX|B2n zj`sRxcVq7I^3fl=E5Y~2|1kER@x83hk~COU(mA)t==J2otH&60#oy)<&kiGG6b^XW z-94H6=V0dfuf9JAhEY_x&96{f+!|RnnR2KWaW#`Bd+p6PP7=K;>tgK~lcs<4&y|!6 z$ba=4;QU`W=pRHbe*!2Yja}E4%)PQS`I{a?Dzx)mkSN9B;yS)3Du>dAXZMh*kbM(|Fd)Db!oX*de3F|U_ zUyi-E6sylWPosLrf7D*yn-%$U)Zd@Hs6_vLxh`}U|FY$`_}cM3Sh489Tkw)49H~eNgA7(p#4fZaG3#F3V>{5-+6wA>{tO-$lOTOJN!AL9U$$ky-LYz}@W4v0_ zK2wp!W#W$wZEyJH&-4GFtQTyK1F3auiEMjpA?ca{8+|Klz@} zn3ZO@N@8vtLq;sjrAq%2KiJ%ITa&W6Cm?i)XG&^Dv`j!h>;dckuU~xTYnpGKQ>U?f z32Bi{-n`IYm?D(;cE!15J1%9=$6LAjNmAyae~+ln2Vr`&6B+GWQDOzeN&s1k(u?&B z)JJesPLVQhL^kr|X!Bx99Ac<&v-LmY_kYRX^I!0ntW>~)D?o~b6w%@d2Dp*LMe6t~ zxCG=ib_2XebYP)Z$pro-wg4$TV1j2X5(Q6!EO-(uNLs=XMFa8$6fXvo9shY|f)V{F z9X`R0B_p(#z-`cwk;7dS#(ungg%*%J@%+8P_`N>7m9b(@@u=qDz_Rb;^4W^OTKE@MxYL)v#&q>QEJ-5%TM(W^kN=M%npy-bUv$@ zsIBZ)+|TDIKGqr2JIoODLYCc<`5_Q~d&X!?{o?IeTS0DL_}f2=@+}fAW!JgnBe-o0 zA_4^*2_72#h*KDI0?k>sS{0s7PnEv{Y?tjY^aiaj^ zm(gGc0P9y%TmSfvieNI^iSq-u%*3DY@XcH4kSWY`vU5#dC)deVjRzp?02&L`cO!!V zINB|UjMx~LeVxW=mT9aE)}|cc#yduWpx+|wpcsR$lej=S2-U%FYlm>gM7#?;FrR>^ zLb=~A_3Z)l(Sg5}%iSLjmz@v{L|vVCe2>@|C~F|I8XG%3t=d?T_tN8d;1C|4Ro~Z? z+U2SA`R#?rB`9!a8AOvaCnJ;o3p=hq zDhgkBjX!X{f7ER9V5zNDe~?jNVmZ^W6ipRKdqc&LId5C#gtfxs%zrbdNfM6&^Cv>e749SkuShZu;-Weq14%X}|$&d0You9`wqlEU9%e3}E^9^0MkTS?w3ScX`WjP&RQ(@l{~gFLx{P zBr8MlfUhCGwj&ul2^FC&zbn}tgbKsnBTnh&t`rT|ojiO0_3V9L+4%YKz_b0Ab&jvw zrmkGG;hw&6dQ_NS8M-gRKGr^Uo7+)IcJ`D1m-aWdI#Xea)e>w>{-0dgr^#qy(Dv-S zn>#r?rIleE?=qT=1&d?Jn*W5e6Y*=R_cx0?Qd;>3ZTX@`7G6?wm8(oTAv^niN0gpW zmkWMQk1aJKcF!O-K#t0p*DK>ndPRl#-60MgttAt$aW~&@N56cyk9#nYKkmz~rmWsS zWI6wkFG^)^f9sLfrj&$nX2;61UST#C}&%xk&d#AOgp! zf(RuilNKor z3$5~rpG*xLGfZ$kC5$Frg!mCe0a*|u0MsSu18y?-FJD>OiT}BWj=S zmzbz^wpvm+-a*CSy>}g1RCFZVzb#1HKEJ$t8dd{-s`h95UnQL$DDl9{Ki#P>rVe{6yOCLCKRZ zq2&r}AphzEW#$QQc)rt)gIJ7VL16dRyl<|iA*l3R5OnoG8Zs%f>vQOh_#N_3e`AS$ z;t^s=g`oyykiY;Of)j?sBVm95ICzC{8%Yb`A(2xIA;=~IY{bc~6M&pU2|%Jap+AxI zC{_rr2LhJ0i(mi(R%8xAZ4mhdXqEpP+bg?Wy_6h0c2eK;BoJOyL0a2SkPjmLuOvOg zy6aoKQCnb%4lwcEx#hh=IX-3v52lxDL|_LauwDRxf>G_awt?);JHt_&^ufCOx6P-i zOV{+b-zlZ@8Y5>nPb{BW7kk9;%NA2|eb%w>z!bI@*1jc_gr><_SiY-zGX3*rF0n#^ z-KAo}&7_<7DZbqWt5qIJ8n-vMvT_5-P&p&Vff&r7iHX>Y@4k=iZ&-{G)&7#geNVYj z>&pE-*MXtQMAww`?&bQb81rfI!;gC=(K=u`N>d-xqp69Y<1OV(oJ`vocrJH~HuTAa zqQ*{As*8_q?ycx%A~oBDK_WkW7OwebN#(D>Plh9`-LaDC_LNQYHlwp{^N~EGpFI9= zieD2$3_ys5MFL>66{8GN=|a)um}B%cs6N^$$xCSsIVZXabw93#uk% z(G(aKG$`@Z=1%O+e{1*e9dYs7cG)v)RE1V_7Q}OMj0{KOOAB z+819cQM0{VlRoOb=Nf)_+q&a+Lmi2e+B-S&qTe?R@Enw-s~ok^FY zjrwGQTnGjKn5}-B_&rKt@6k0s-Xd(^>255msL!*dz36FW&STo;iWG`N|R*xbrV$CGH zKsbUpR~pDBOcjD6XaSNS*mc09lh*R~!R3p-oxOf=(>&4Ibc;Tq_WD!2sC6_lPyp|T z73P)IR`zz~eH;6gXRV-JrN`xEV9)Ra`@#OOJ?&jOPwod#Kbw#CuRMEvsn!3ksJG`3 z$uSxCCD_+FsqjHzXn_i?re&G=Q*BvZS2e~@Yh)&DvD8`lGQ*CyICb1pTOufE7P%sV z0}f+p)){6>MKV9|x|8oEQ@tTupeG$7d2UaF;SHKIgHs!Ke|g09?&0&xmuwyTo2P>U zm-3$tqHe^?klpkJl%8MlR?a^F}yFTrezAm*a`ptx~*> z&a>|`?pX&-8ynXf+DfPP|8Vw@7>ceXUz}$f$1tcxxqrL)QAH)CTs4qr65%dRzmooq z0mI0&p2y%f%oR&=!5t$yU_(EI)FSt5&Man3QH(?Ck;i}F0em1k66BB}D>YuuVk9bl z_kVE~=>M6bmJ<#Ioq=EplAwpAx`@C$Wu(b7L>Sd2m=b z*}B*atnn(G5TMqDqW^Yk36?uYE$1r#fG#m`_go>DbDC{oBdp2IH`;=DQ!lzPNqtg| z8XC{zkxMrg9-ApCzF4dU9yl?zqm}s`+ zg57LH9Mk8s0J+p=+ra6Dw?f{(f4BYy@8omaY}cnzp8IS8)0%S?Cb5dNKO9y?{DHmt z4Cl-M=avQNQqHS|1tAG#UzfO2%;AhPnp(*qEcw(n==#fh?ZxlfyI*CuW}r>UZZ@$C zi3wO(r+W}HaJ`;Mu{Gt+;&*g5ywEcGLg}nzmvxP4Dp`J$W$SoxpfVJ_xYgvvSo$}9 zn^J%L2Y)ip*K8e}pTg|_kA8A!=%4*_C904#Gxt!Kkd~8w0ZzvLaVmKWz(QjoGB9rN zLaP&i^HN|aRv6i~G&emiKGrY(ykbCFpPM_)2S(Vzi5g&!9N>({@FD@-G~kAS`&XwY zzB`wDmzQl`I#0#Kmg-g0`B5Kq+b&Cj^iQBn~5b@GS2(xnu51>kLp&+KH2_P z;zTa&hPt{K8HbCiS1ZdznFGbdsW?GT0U`kP1U$_XihfHYUs!!e446Iq7+PlCj48Zx zDSx{|C?g#lqj&i`?6Iax&}(`_U$Y-v%#z80Gji`a`x`q?Xn*1@?N47Zut-B*yC!8- z8n=&2XD2oL87k)qDhF`YAezZ#j&91}e`YQRz4qB$X_yYbV;${u%6X4fy^mI03dS$| z0l&^~89xfYjLlS&;vs!4WG6lM^tOuWJh5gbOWBC_H9{_Hx+qjIOC4_7g&O-DhWJk1 zXhgV!m7V*5A|ef@!nl$6!xb3a{%^{^|HGX$Xb6OqgR%;Bh$aa)6hje9u+6YV3b`y^m>Vcb*}2sy&Nww=;wt3wx}=L|(QXc%O&8zg2UzuT|9(UVE`;@qM}V zhn=p&^G6K+wT-lo3To3z&};NHhVpT&F+s0-)o;uHbd4{$9gwqpTY`)CUfpUp-+V@+ z%3|rLsRf3Qau`*p-zT6Yn|RB}+sB-@)zF|8Ajo&p(mWH$%NA=^Y|!?S>v@ouH3seHH4hqQhZD8zK4`IEr-Ty zEe&UKANR;C9H-Woin%aoQ#BelQ!$-nh0zkm33erXNnf9ubTlK=8^ zrg}mC)kftb)?MejUfknd%GPcyU*?FY2Scx0ync8TD2ksW$X5R&c18=3P=k_i1cV(Y z29?D*5whdPNcbXFX{n-jbzYpT8Yw47lfRBiAv%gECAf>*1?w5{5JqqaI#vdhl6+&8r$?|r!cftQEbpOliex))~mxv+!Q)r<~J&&kxa%&iJ*7+Kh=sjEAZb;Nn6 zjBA+gL{O;O(6mrEZ3XG*W(54s`Yd5Cmwoiz8ZoJON4obUR^6%7weIpV_xDMsNZ%dF ziU*&}HMsIw#HpQn9=$5msA80gpGpZfbXm4DYbMx_ilvO#nNhxWNjGz(iA|`vtvm0jYqR8t9qxM6Wg9vW*|3Gl7Ljj_4 z;3s54r7sgia9^JOz4C4Ee9AS{WaqexmQ6$x9TfONtoE~Ku58roc7}fH=QR7hwXvo1 zoL*7{Z<=cU^D$Fu_h|X$oWkX(((FO6W1#80eSZXLOtY5thK=nv>QMF9Z`Uh?H-{dp z6pFIPcIA_qmc2^Ld{J~L%rz;PcB4vXnA8DTsY7M!{-i>AC5LA$7to_$X^uX%;^b2w z=Nrv~MgxFchDDauazJ1IqaSvc;d6H3zdd`l6g-=y%og5RahvxfjAl*Bx=u@LxQ8O5 z7g=6xQq6UFY|Dl88og5r+b`t*eRkZM_Oe(a+p8~)hVbEys)Plt^I`66w`|g}`3GeN z3!?@#tYVoaK1)QcuZ7*06xAL(uC$)-W30>(SqfyR%8q;Mz;9MMe)8Q&|2%3b|?H!>HxWm>Eplgdl^Ar`Y%5xozm?u ze^Rn;_xG(+5!GRZ{3Yp)$}Q_G7hA-b2vHQU6Zf$yiG%TBNp5^`RW$aYDtV-HwRfLy zmuE(yI&~Zou`w|}p9B`=jq#KBq|JmPber`!;JAk&KPqHsX}OA6<=&3v*nRs{^vmZv z$6yG;CUcUWN|c@hkz>>riyUU!bWmJbVhwJc6c8}q&99g$)Sxoz^uKQ%+c?ZRjZ{jB zfM#x}^EUCFAW^NT;OysfL#5hs2QBYReJHL(iVeRbRvt)xI^tsZ ztMa1h!CYhe*w?=JpO>15wZ>tst9CNgLrs!V7NX`xCQ&~SfG^YaT5*&XQDsWH2d#&? z6Giej?RLYQTk@A@89hfk5{;e`O^;Di&!FF=g_)lOyl32$YBy`xX`i4ocpSgOA#5`D ze5v|QowX%uCi1&Ews1@m%6ngsT%s`E?hQSkTP>z`%bK2 z;^=n6`gm9@_bKCJpK(SDCpo^-6Y4E12I8~tWo8i#`P6A`@^Dd-faNzo^4{hOc-LTrB*9PC05p~iYa6|tqzSZpe!9!mhl z*b~O6+4m$wJ7g#N1Zk9*yS!xZaKgiGVzUV7v28#O)+dq{n-Gb^Rz*r+og;X$JUEzh zt3jQ4>@z(U8yPH(R^8+BZQm#C%^n=_*q_4$nOw9phr!~5U!D`wps7{k%Nh9?{h{uJ zxy8vY7zqCM6IWXHlKI#>LX5@|ScBr6IoLfp#;hlfh;$Op5ds=kgsub|I$m=S%QZp^ z#bdj*Rj<;ND^*K!;dxik9H_V;w&cqUxH%gHnaEU)Y3`Rg{(6ul&hpT(mAz6 zgT~cL{P)`B#HdpXqqnyw_nzSK1!I$w345(>lb%gFV;U5c178-WRNY8qG4J}L{j^l=sHu#zTsrn{f~n$F zQ+WWH%J4`t9zsgBEH`kAaL zubx5wf3xeiNT>Rz^gkr^M~GZwoWUEUO` zVJ$dd#Kn32zANKdddNNQTEAd5eSWI1M3WvlY$=~qc*&h8Bd{zKqoYs#{p~p<|8xKR zf98n$|My?f06;?r;Ef6OQ50iSVvxouHbD~@~HUEjKP$X+fkV=_jK<|!w2 zqX$hQ6fOjs#ABdGgd6w?#9#s5g`w`DFi;xMfB9$6#L~c}h7Ku{T!HpGZLj_e%Nrr{ z{)BpW-;g%>@beOhf3Vxph4pZ&rE*2dd>fb=F?L66|Lh0!V zys2G=wV-><+mJuulg;`>Nf0!p zEurv}UT|p7f5QCskjCum_ zL>Gd>0v_*Pag@*cHh?j<|19s0i_x_xYBO{dQE@(|==FZ>C-J?lqgD3VpnbJ)3p>3^ zeU~{70jIvr^cv}?s|@X~b9HuXCUL!1ciuniy9mEOTkE-#TNUY{nE0`yE7yo(p=tN6 zJR@DY$&EkXOqwPst%?OT4UZqk8Qf<`k3)1{jWrjz)$-j=jt#TrqNczFOKi=%dacnn zllnm+lbeCR1YK&QK7@p~wS~JzyKgy+#`wpduJAuQK6h)P_#U{v=Qp*8`&QNT%6%#- zSw5+xu7^bKhIWFkHce!r=2I*ex~MspOKyZB>qNG4R;sS4=X_G6)4BT0Grzy{jX;)h z##AUtZ|{`Cak93zeoyeOg1^S6(=f+_?)u+iTycqWo#g&?Mj|d-ua>L$WLQjuzAWGc zX!`)?vhPmth!}yDq$T@OsBC<98}0vY{0cMT(7*>=0OSleLIApDi7X-!q>!kO z)TD`}T7$oT?(n73OOr;bQs9M&76o8|1>4@I~Xz18CdqYz|++6BUR2YNMn>6~qgF z8pl^-H0qG9Dy*^~9nmT_wWyMx9Q&DRe0xpq#W)|Dt5nVZst^rX#s@qBa0N6RvEktu z3D9q3f@cTPkc#Xme6`vWw)ZI+_#;O@JSX-L4;r088;W=u;ARYXRRV@A%S|Kqw)1~I z|K0!W@{ezsiJehfVzn8`jW6HVsvv)y;v_;AReLYIRc3;(i>qa5{=V>*cge|lNYfiu zncmva)^e1jQnp9HxZ<7v@ocRwKEw2Q_eHT{LfJIg&c~g|Jrjq#YhAn2<8myS;ccOH z3Hev3uhp8t{rl|9)Wy7Qg zU*xAFZY-w~th`xq98JCc>m&2Y(l?(4AB_VS?>Na12RHX?7p?Lryyb~s=GLd5!r0ox zLqES&`n=n}bv_qJ)l7KaI_EwWTIY}3i@5+5s3-%b?8+b0^9P25 z3;W&eu5q6GdJUNpMdZA;2P63WICJId(;KZedgLK9Vei9^g&b5y6jp@qxPKk?d~=si z0=^eozf-$+pcMMBd(U{5bN0l-Q)u@xP;@YH_nUODzA)Xy6nEiJgt&m1GyE>UsA<;y zz=t2dhcc=az4Bx$Hb#WnGn~qqtv8hc^&|`bjppzCkoprCgm+d!u>mcYQDyyO@3||>% zaC>!R|3ZFi0QaHXu){@9AcCur+0xZ;WoojxY-!Bqv%e=My_~^Nv+)bp7u$y!s13Q4 zJfV8$>IoXXgf?Pcb!vy4KP*O^uXHQ@7vrWscE&~E$N)bmAO|U80x;w#EI|Ys2ElQz zV{K#RVa!8xsQYD}MKIx?!t0J4MCUMS5jor>PQ?D`?|FTzCkt&yaUv>8=&nt6UeoVL!C_fWkiGb#AAXQzMx%IISnt%8km#L3-LKQ*({?P9RvjH3YPn(D@=OF(% zDovqq2lVeF2nc{IqCg0WWEiq}MVtUYZV(Ad8s5$^oSasY2tBZV6IrPDd{iVU!FYgMe&+!)_OW0kHdJOa@|E zsD}wQ`He{27NQiZOIk=*l>;f0$W)2Ygn`f`C&C1 z(4v+-_#R|-o)LGsN8K^9FgOF>&3sAwuA;5j@Sa)>fu7|YPlkq#-QD1dgHtY1t!oNP zN5^zu_d?&~lqkVy@YNO?8Bk524U+@suLy5FRcc+_lNyy2x^tzg-L)p`dmPo^lKE7wM12fZL}#b% zhQPJtSQCTnmKPM-h`8zK>U5F^sfw9`Ui>Z`Yc!-_jBNd)ahD1WptMk7b=hR?u)BPJ z{wEy#6sMQ{ufK78{(3|d=(2RkqgiyE;mp9}?O}2K_29ar!PHY7-NjPz1GehbFxO9; zj!w^>Gq9PhdBWaX;$CV6*Pqq-b0i&fkJ0J;-9M*N(!2bvKZhMAg8o5p{vfhx2R#3t z4h8iV9)k1BtRmWH0$%M$XB%X^+J727t*P5-9emwql0@z9da(&R*C>nf!>W&3%9{^` zxqg#cTF@^;*g2TFIKV24?Cp(vmzRa$g8zB_S+)qXDevxFt^c42A7nS( z-Hu9x!x`=PpcXm9H3CJ7i8uET79hOq&w5_; z$H>`;(fYH~y)lOBI|OBqW&|~w>8&j0h4`H#F6v#R+4*0ak4}D(b5f*l-I*|CG^{Im}kcGacVgzfT#`Ke0Gt%=h`?NFE~iJ5GP zd&_9hD+&sT;b@S^i6+9J(d2*~nh~TkU?O?YKWDEgf?O)mH0Y41!O%SVZiEh65%ddj zf^#_O1~6zijvf3PnC^;Glg+N(DY{U-#*%k3LRV(B)3^RZ*kl2OY{DPM&wmx$Cdyaf ziV$jlt+z~GM=8N=0~KiHDy@O5x9i(xi&;-OP1jAhl;A-xC?3GV{;GuVP%IKjgadJm zMNUYRG7bK|OFEm4W2}9<|pW4)f5Cl#8_>dA$KshS72h? z1b-Gk*HCkkxRi#j#VPCZ_Y>9HxQBNGL#$g?IfBcpwq3EFVL6kZ%MQrf=<}aOl^rHb zRtMJ`@L2j-Wiv)vJjEo9=Patb`x@EWOp1_trblzj-h4yKaZ@a+b(%t!j;TkvwwbWj zP0&{Cu%TF4#C5r+N0S7DfZ}YiaPSeu96^Q^fz!QO|BU|*M*V!gg1uze&04)xGJ?3V}(HW+Bes^FZkJb)OM z9{1m2&G&wc7$snmof=Xy|mYh?QgCI#Ii8eXsjO3hyfM5Wc90Ww7 z0Rce~5Ro8)C^Ex?X6mb&i}~k*Dyq0)pL5pUYd`A=2wsQ|P3zSh=Fn!jhgsl7 z;_PjOhg+nspG>$l@hKUHXk1%gy|f&oofoSuX-!<-;*{Q?Qwf8^NXKRHJ2xAP-RCd9 zbNd?XuF-0B7+dC7QG5@1wf4g6WwAcY;=!+!&1uyKi5BX57)2ZH53KCfw_B~air`6f z8gDcrUc}PHGG<9%im|Qh_aY7zL?`@rZR3q@sNVi4_`zD3L0|)rqml^;=BStz88TEE zWgdM+tpakkp~nD@7zTVom_ULloS`mE$FTLQJn(7S4w$=N6!C!ujKPoLn8cfO6V^kV z1*M1afICta&s7pWh_~x(A;(m}ASp`O)stuC1upLfCMY5u>E~U{~Y+8 z_Z2N9w%Tklo+KM|lkyB!vo+e?+&JfTCUG7>S>gtDai+px>EYI1&UUO)XSSS zl?k4CL)klWh9@exZE-$2V1mQxFna~Z<}_zZiMfd$WA+t_yjsL7XbJ>VOL{19t4Ueh zd{kozKu|ypP(~CBsUziw9#FxF#!)pSge!1LON%W&$HcMHs%&p$(CMo`iA1%7PyNyo&2N02Ig)o@?xcD#`IG5|!Trs!!;3(lFQzjmWNdmqzj>z* zb4(iDo$gl`S2X5lPVOMAWo@TMIx?zbA{Y-=-SdBQL>fQ1&L;3o6s{d_wHwD1dzQ?p z%%`9;qSDk$?itJ>fWpIrWl>zWjOZ`~nt$~R`fnKi*MDQnz=co1}f6~cW;Fku;bXP}12aCn}a?aym2tuZ8H{=h>-Iw2P}MbL(v5%?kW z1UgU!4h7W20GL_S`!|nI?H_{g{8#W!_C^L5Yv*A3?VcDo!#BFnh-bd25=Pf5xzoO? zl>E1k?sbXgrFUKBe-sAFL=?Mqd|6jdURWi1-HGo{@WmBX!uV zn!BG?yo6GI$h@8`vodYVTi$o)ezB!T**W<-Qdu{+s3iXA{_QILAE^x6us?IQWaozO zIR)C|pRq+7!?UwwL_lZ5c|Z-|0Wa;xU=&Fu89OUq`_XbG9X z)xe7ZhD-{wK)eZ|hGl`A;vtYzY}T~iF7WBzWxv7Y<=36p49u_J7AKnYzdyRYQu%QW8ayouA#9qvS!Gk-5QJ^s|4v^Dcr{JZz&<`&Uw zDSgExTGrauwO{Kx_XZU?`n)h7Kkb-wH!SGy#+sy%I>;J-Ua+A433=x!!egH~XW1O! zX~ICfK>G8}v+Pm5QvRn{QIV?gF*Birf}T2?*KT+MQ9cw6K@kBY`3N)vii&V8pLhK^ z3O{^Ws%Ur>HBtT|KT%mHUlN^*V#XWgQSfTjiVwx%=FL>53|4nCq@0M!!I2IyHhRQGbBc5bIhjr($o*52apRmyc+X*t> z`?_L0Yt!G8mN)tqe=WGLO;~itPREWP3*!cYr+)EPSjf%P>$FuEiO*ywdW|JK-bf1$ zt26pMHS8sjLY;byEh81m7IAD~R;%(W)cDF(0=nlq(nOlVH{QUu2gzP<6rDBQW@6|vvJ>Z>dPix39_qHVe)$eKAGVy=$=Py+M!LK+9 zK>w?R!=ZVFQgzV(s!jz?L*S?(MbW^C(PaEE6!9oz7Ft$D6^AFXLK6R_3pF`5>$<$0 zx43FiP}8}D*nEtZNF61^a4|*DjlEoES4ch_^(<;xnuhZ|VtJq1W4a`7Zna|Tbzugv z{Yz1PRaQBZlHaG0KDYK{v@!2p^W77>>j@sImWgjp+cc8M?v38N8Z1h3o%&vjV|DW8 zN@!-x;)Y%ieZ^kOwQ{7&xFCQ0Q_kd=p1ugQa!mBjGaxSu&J|zo0i)KB8H{lWf;VxM z*_oAAA?Q_3D!m~9A_5=-2;>l6Boxg75R_qTNI1?4Psl_5KoY541Lhas5+P~IUJ*u8 zNH9oFK$<}K4VgtE)@iVyeRw(u55Wj>(Dmm;I3b!Djo$OCCsqxumw(S&|6Ec0lA?WW z1r_!nw2Il+Oy7*z@~j?6$uA1mX7St25GfS3>=LZ)`Ng;Rq%i4CV5(T8(PT0WOYF$a zni=*RttFVT!Mg&=#AR0cTet8Uc{XP`m zJQH~H6Y#Py3F+7p-IXU+V^6S1BGTzZI*HL+ZAiqX1PfeumaIDRmg;Gs2eb(6z#c&h zQb!1bHW3DiFay^}qzA>QFe5?ge}2`kj*nTQal@vtvjJz&CA|R%CRl(fcw)jj`4B)Y z_HO7o{U@d0Yha`C`$E)bGD`RQ2iuBC8R+n7XK?N!&uDF_q(fNf&ne&5#Agrlr@Nc3 z%>A0?d6nR#de&#}^8{&qvBqiECw0sHdfzSDbhJ+&QOGx8k&~gsh!&v>k#{&3oRL5) zaH_PFFz_YoZPAVk&Mw`VK8LAF)ZUw^lFg~lQO0BOh|3;nuI=K+a`V`a|fB%T>%}3_?d^@*tbyEHQ!9@P0#l|ES~Oq(UhWQDCj*Uft16^>viM`%yqpsPE$Rq@pejH zD6zJ5i%nCilFSx>h2%!pC3Q+mXeHd39cufaLK@}tnIk|!=6f&>4@uSc@xUX|ewtI% zKz6cZnR7DQpG{A}Pk%}~;we%Cy+8FJ@a`*yt#4CP5$4GX5C%PyL)s~6L-S;n0fuDm zbq~GUG$qK`L^C6s*`^@$$Y5q92SU$?K_ga*ln6!zAvDnCZx6Fy z>ztMwDh_5C{=CUb(^cLv^BS)}f<@K(bW^S@b+3yJa#EfdgK1;b*aAh&UW| z^aO-lpN9xygT*c%dM^CBO&_Vy8WeFy&GhvL%b;rk(!{cWXS zn?Zag`#d=k$OOdm6`r1gD|I%bY?t4wRkbu<5b zy|spZ@9ER=9gbj%`_~PK`a0XUJgD`^g@cNf@>FMQcP$reYntI!uU~VH;&e#6T-u@s zxd0WYl&I56y{YAsKbJ~k>KOZ-jB*i?}QkVr2i2Tg=}-EiWNPw^dqC;q)>ZrdIv%EYQmSbV$MJQ zC-?QiPw6G$Ga?lzF{f+V>Y6w1E!gvalirE5N+5IjZ_ai=mY>CFlo;$V`!sX&67W6#4a_+9hVv z{bu%k4Rf0#ue8m*tAXZEim12!k5Mv^>TcsWuG?bg(Q{JL3`FB=6ISEbiw+yv|481T67L`e3@nP%UBJKy##^SF(SL{f{j?CLGtARHWG|7c`IT z1XWsRi`W|Owr+IcRUMv-Jzq2aG5p!KZypu}Iwk-69 z0w>uAu?Q>~J#b$QQf3O50x)D~!7FZnAn1b;q&gbzF`z+$F{lyR7T6-MqX0VqP^jnu z)qog+%3~UGfVTI8T#oo=svOu1ZGu0S7lM~Hi-A^RP06R`{(_U5Y&Pv=+fi)-V7N%J z4pzg$gdrz;%9S0N_(jSrckkRrP2a2k%hl#eY^QncVs4r^Z){pccl^cu&6ZWrj`U9FyR2UidRgrI4ixVu zrsmtl+%#|he1y(KaI?_t2>IJ;lW87z6DLt7HO5BJ3$@!MmVNNtC7^6{qIu+qW2z2m z2egG4{*{Uu1Au0Mkm7kEhj?qy2DyrOAcC7*C=$!j9zQmDShaWcV>E$}D{-HgD>4)C znB^h{6zBmjJ)jUP+SD_l22z_inD})>uEgRHP+Hb zu}6kmuIZ)#UJGP!q=QTj4+=MEIuo2IUZjQ;2p#3&6duiLdml>&WXB5k(8rQ#K`IE* z^uP~8NIe$nVcGJbC+5TDVYBa7n;%OOuuaCZsQ&&YW2L1^^P{adeK+c)&W>J%e~hDH ztu&XhY%FpLUY_}SLY8r|>3*a8#lwD|?@Hf8({_s95!Y71-<;v5Jf<>Ah0u*o9bKJm zeRsk&<9lwoOVjb4P`LQst5KI}*c5nq_D6)2iR(oG+faarbb0cH5ki_WkHCna-Ii1P zV^gSobX5=oI0MnpV~8MeCFBojAWV)bia44rkUUsxNRs4C^(`TBh$ek_h4E>WugdGnc}t*Eq|$?1G+$Go>M-7AMK zbDpp_Svw)W`HjEhRAbu~j_78CpjI{CA9eDdnzA&7Xd z{QkEST%NZcznpK`ypb&H;G0PQ&dPE`=$S7yHGwt}PTht-OklxQE;3)2R+~yj-ys(9 z+#!1(SzjCxTDR+^EE@6zm2*d=o^vz6!X;@??)f_2(Ay_V1F~pq3eY8Lj-V}b{v@h@ zqzhQ)<}3_%;5Y8v>j=r8x*_iFIgJV{RB3B}vdOBpQ^)=Cj+4&-!I?C>W1;s(h9Zlp z9)k=6cLXA_-lIjgHb)R_?|A?=f*NS_8VDi}FCcFQ^kLG2OYnnfK5g_lE%oeBjU;aH zF2xyvi0D2zAEpMIOnMdwbv$rn2rxcs`K6Wkj4vyc^`igsYnL6Pg>i$S6g!-tw?{<6 z_rBEY^0h-%@nn|8ttq|vz-!^Xsw-8^=AYl2Jo%+`@$IepOkmb2|F7r2j!u$KS69Y_ ztsGw#UvAkBUGDyT#D3esN!y%tsX?ym`>U5#bQ!G1@e8j40-OT!ATJ|6<|)z%Wh;q( z$Tw7;U5L2J{t&x zP=k}ZDIyc-0f{rQG;*HYl66Qrhc{|lOI4LJeix5nw3M+m|p75F$6vgv!>)(lD>kqc>Fr$Hq7g@Yq-Wo z_I^q)`lN3EH|Ess=|^;QCxmI%fu$RTq)vRMGk4M@?QaXdlF_CV-PmA)AknHzY`9wm zl?&7hOI4Wy1135Wm_O_S*yT=lkNx>FE4v)4iW&`D1DwgwZ%ca#*%=SGC08HG}V zG5=fjQ}+w(HNPt|$&siDU&Q ztGF9kM8sWA#ja$!<=-YZKD8+2YWfr0vW`CovAvW;72TG!np*apM_eEIXdciYK#y^toA=?~?W9h1qzL z+l}j=LdGKn1l5d_4C9ET^hQ0rH1^i|QSA+3KP>$F%}bnCnFmZ>pU)d7S(G>EJbX!J zeQTwrv8OjlMm9}xDc`Pgi1I%vv zbqmukow+CL)H@4HR+2CP4a{O71QhrSbQT;L>A`>=!~up)Sp-ImxYi~ybDjl@5wvZ? z(8dPC=*xK5F*y7L3|a&SFbseM3}}MjK)Eh42>-;Wg;RRUhkZN$kM(NU-dCT7gTtv@ zYhSL?WB2M=S*?@o44&P##IgnJ073P4Q*IgMCT|^;T;q(#cugpUuf!d^8MLvo@z28i z656*Wt$PbIF?4)aOj}Ho70WYw-{&N0tO7#}n&~ON-k09Z80EBv+&*ECPgWB3kc@qO z=k@jPU(-K!3Ht0kD9Ig@p|ft2EVYe}>S--4Fs=Z9EAM}c&p91oL0NxaRw`l0bJ zsA@V7q2Ft09gG*X-3=spL=)`ixV5U8HIK2q@no&X%s-cy%Z>HTn`SA^w{||0JSI_7 z!C@&{{a3r3r;|4=M@1hh3i%i_^-5Xlj0X~2ViAu}u7ze`TWJFc7Hp2CfQ3lhXm~43!XD zg?XU=Nfs60H4kq>9y21yDv8Tr$52~HB?JwmV-N!b$}E7WmmTrVZGUYI+~qFLCG4_) zn5jz^?};dXQ0SblYu~^Y%C@*?agg7)Klz@K+wmp9wI9>WO3~CALq)CVqunJQ0b4tN zRjRZ3-R68oB1HB@_nbl(OXz3_^Rxwfa|QV#tLSQ#L84G{w2im<@uy?MGB9BILsWK9 zd%%}2Po>zM=oOmza{RV{&}RBktN_``t@Iu$V1X`n62L(m(Ij|YP@)3^Twvh3s4dxUkM8(!QvPV2TU<|<#;s9GB7y$?0z#^EwVOWM`BhJ@AbDGOmU$2Vv zm&Q+%4+FHE%Z5+lp6${HJ=`F&%vuW9r(;QaDmEm)=vP@Zw>A(?NzBzBJmL1{!5Y)A zDXrDHHP-I2lNHvHC?4}Njns?5+^~C3+*2mayjW(phRaO&G94}Mn=JU_@G zA_DgpkZA_lqrhNfB9dY71(i05;TOMQAw?l=n4vLI7*iV)HO3Tg34^jh(xG4<3dlmS z2;#I@UWRfQCOi)$m4UL*JpGHM58_uICwxCxoQ`)3Yp+sSWtZn%H&@b8$l_L?oLSb|DNdPN$d^yp14JeWu##So9lY*EiO1T-+~+r6)bzI%Od#rQxv1&rh05$ z&sZuLtQUa?S;Z(aG=D?{l873`iuR6(+(V*K&W;}=9<^tBaAt4zN5rq*8b>uK_eVrD zA=*%gGNlOc!t}3x|5E+@@n8IT-Pe5`%wOP4`Imph30wJ3{=)hJfLDY9NQfVxvPMMB zC~0+mdchjj=zF;ve)Ca1LsyoCvhLoF+AT@sixxgqYR-^K3omH{Y9&f;t}77=;Esec}_aIT!**kOZn# zSbC9?qnQ#?rZgKncLkg2Ny6(0l+)y~JC9F=5_#Y4r^`1_+!>@}sCt^pVk*F$J4!E& zsUL5lJwYlDs$OM$SEU`e5OU_!YR-fQXP6l9atMQ{5zS(_@R2Z>3q?A{9uf^hddpKw z-ILUZ9Tf!~NU%9j_}VL?tK*C?AZ}K94(NdHySRaCp)@DTBT?B zQN$SCTz~Hhz=Z~2SQ22C1i-O^BV6b@42#ppyTK7{WPqbAz6Ne+HQ>z6LT8JR&Y)iLhIL!7%loMp?yYT1 z>V(5`@2|x9j%(y94@$df3-YyXUicXF?IE(gJQ`A}oRTr%#zc!G!a%3s1dtnxp_-xx zP)Lz<)YM$06IIP@rk;!mmmUJU1=@P+B4O)1Q;-ANWT1?cP=+7_pszSa&#(OKSib!6 z4`C!Yp;-tIO^y>ECZ)Umj$*=9l zdP{;k505#ew%*Rja&Db{Sik)<rcmFV6Gt);G@upU+a1i~q(S&}$vJR8VIQ^85$|JCnN(&_CmB}wr7{Ui?d&jzV%MxcHlU^dPf z5{f&D;dOa$EqHf7&JQ=6@z?Qv%rjhR#5PV1*u`;!h#(E12=dnGZ7f2WgQ{DD{+&*L zI_uo7!nQgO?j}zMou(A)GQJ6j{2kmeIh^>H{mR?CHV3uQ((CbmeY(s}9J_`J-@Wj3 z3e~2f`;IDEyEap{@%%$z)5W}XoM*-2#jV8Q1X8uiraNkEt?FKC!v-JUWyBQo8*mHd zlh(h>5Ra1^N*ul!%Z#<^;E1m=RWy5T=`YNt_k=HMy$FJS6wE+I_bm3;cB%U#klh9R z>z1}42*@aeK*SG|15*hwOf^)3#v1xv6>;|4L2wFE&Mo#Hn;OzHj#wfrWerr2Bo>^K zZUG(;^{${wu^(NRwf*N0FE6B(ORDIBczQ)sPe<1AS(Y?PSbwCq zjbVh)mSkLjz$ID#kKx}23w+*+Je1fGZ%Vck@c^xy==rz3T~Q_?;y#aO zQY>YClq4}tge}w){}>{Hw*`U`&~h}?^7+zl<45!V(lvhbDBS4EbaOLpH*Kn;M^OgV z8C1$UB~e-TeNGCNDRG~zPzmSb!G_0MH@e7C3-p!Q(C|#X86ZpZO_{S!-Iiq~tG1UMV&Ucp4l#PkF*sTOYjGv+PYNTy}>3w&t!uTiCjNoW1kgVKHfjJSCk zp7=ki6cU4qZ>FV^RTorptFEb|V-e*+Oabz5(A!~6`9K*03UHC({pcal1PHW^aE15| zp`RK(B7JH3rj&(1=%eWz86q(qD1gQjS|HK{E3lOj1LO$|0H6irikUa}L`FfyfJn%zX|%GiT!CA< z{e=?qmGO}7mYeewNaH4S%+zY2*l0jQ1&4dwV-3Be*#Sl;sDJJ3h@cCT_rLmGPdlag z@A>=D;6ME{bH;!98?qpO<4`f!b2O3~8jYsThX9-?BD73C0t@ z-F|J|_SfN0UX&Hr$B4)DU4B1SSoKq!?rZm#7QMV$>HOev=-17Mf1I-Zj8q-CMBQ5A z)%=#W6(Yi9xNw_-<`H*!bFOjcNI@hkkF-T>{fv%o=8GLuro};I0cV$j_HLMt$|uij z-0Hxuxk!AUMaPz3~Q=|Qko1q5sH#O?Ska-oP$POg~mOA&boAXtlK z`Iy84%%X(RhCEz=Du{fl0dpdvLASLn?AE&ft>*imH21x!mjM|oXY0`^>^C7o#p>m{ zHAuh2qXf9Mb?MjrH&yZvTZ<-6drYf&WIufV?okjs z#E{V5sClvU_&xje8V?KR+Ux3yB?`LllRCK+!w0oFzh|X#g&r7%OQfe043G4~%mS21?eC6qJazE%hjYwYAEo^+@pcQ=*D$;*BC^BMStj2{2#g{@lS?n;V+ob8H!ZnK47lT&+mU_?ngEyf! z&byTtJHF<(x#y)YrwfXMY?M;GZz{5wFX;IdIcZ1QIZc1*kpQauMl*Z#s zujIUpyLw0D(wsKyq8MEnpkP$~4ofWND!8pW{d$$x-5)N-ZxwHv8YvAg8>YuEz?82h z+Y>WOC~0}=Tph(DFbDz-h6WJBuw$)2H~(ym$p8ta6Y3>(&5ocbMJ$gwLV9D~4OwHT z2WX(cnI-Ti8nRIasR95Yo0gwOU0d7_!GhhXFfs}xD{(68VxWXQ%~lIwzmR|mM++LD zHG|*M3Wtr>9)IXN;F!qIy0Z7BhRoc+vqaG=dVt?!vv6cMyL0)pv#)UJ;k3f%AVp7F z1@0XOj_WDs_dg~vTW)k`7rs7wlVaXkF!^hCsiNpIP;^^jSK7!hCPn2Atx1BdT+VPc zheM3V&6w94L9Bz)V$R9NNGu9l;KPSELAO?$Y$u2^B(@Ap9aZ(7RQw;51CM?!S znR?TXy3v`2%6<9nX%emNKqgVjqgT1Y*;i|xyzgqDNp~8vm)#ujF~W2SWeRwS#AG(* zj|{|-$a9CzD7ZhxN*GwG#h@OiDvc(c@aM)dJJM6~dPdmmP$yj;KkU2wcLW^K7gbRY zDy0QI75r?H;&Aq}-=IcVS6Sb~Iw@8bfi4_Og4SE}bA zZ};3pV)-?%(Z~*7L>Wtnr;tY#k!Kne7wod#r2D)VbA^T?F<`@*M>j#nR@khri{`d~ zhxW5peq5MrPG!%5XyWTtrJSL0*Ekvl)=%gZ33ZP$EW~H|vWgc*_KCa_`G$vwhREX> ziizc+95(yDqoipneLVg$fv8-M*I84;$gICe$*>&BzBFEty7=J5Y z>GED=cp!~OXu;3q$$zf zB71xU?%=yE&jvc}O{QuJ>yy7oP+EF)!p7=GB7Y_+Ww^0q6jkMK;ggNVo4vp8!qr_g zQr}t_SXqX})DDJrD%|e%fT3s>GO>)sv6Nj*Vb1<@g;y~$4m4^@{L>q^s5|u(shs(a zoVM>o7Qgo53R{h@8f4U>=Y@DU-a`AMlO`*7tE_T!n?A*4m(|^7$bMYoOMxDi7!&Yx zFZ~JRS2v0|x|%Y7dh$PN)&UTG7^gUfU@4tp*%ZfcfC@&|Nn^rFEmS#BCe(3-kWa@x zYe0j3H${i#ouVjHN~1_#Bc5iU7QF3@k02Q(Lt<#r2qY^pZ9Yobkb#$G!lv+j{`F5`v-};H7gE_{drRqvXLB@{U8Rih-MmZy z%~VmIsXS#&N28)bBd>XrFFmfa@pbXr5sW*i$eHo|ecLc0x>!vLyl4`l~bntl_CM$A)*jO> zgl__D7!&v&X%;e`T8dQ-K}S|Z6b01+4%Siecs@aZIZ~F?&g;d?XJh?oGP#GN5C5b4 zO8V=Sqc9!(?6K|P_!pHzbbjy`dGPe{mOe-wv32~MW_Y07p%GnY1uP6u^HYtMy@Tfa5kWhwlt!0S5Zu9IsIKQbI&R#?AP4bo^Fjh`kmYpiMo{<>h1pdL%FPg zI~yX!m$^@_-Fb#`@%?R=#;d3OyxW}cXRemVJWHI|!d|2+@kaW)I$blfT*j_9xyE^} zSt4A4^Z86-U0}dYh{opmQ_3Z1r+t%g#g%uSXHkKmwTtD3Q>tjU>tJ`S;bzx(z zJRWE2T6vA%x7_D{xpk>$3It~A1yraQ#dD}vU1bw|WfsdvVkTyf(f2^y(V#Qm9l5E; z5UUpO@m`Z2AL~rEjKviRgbWyGX2+$~6@tOVxBsv5`G0c4`2YBC!ay6r6L>-BfvgWG z!(I&DL*$PcNPhZVfVCVaA(J1>hR+W05+4vQz+31nOoUJdnI%vGE`k8G`*GZD*=s)k z8lcOI;6QfgOqI6OspDtwRvEwcKf6C+XWesbP*4@+=~DHhS02%R`n0!8EIiOR?Q-$B z_lrZ=Xs_Y}8J|DcW*-^n*P|EDB}&@5Rd9*pEjy!f$&-77YB~O9Ld#NI!F@B~xpF5_ z*+&T;J*8i7%c-qDtu=)0kg6vwQ>W6&JUNw1`+F;>>FLV9|K!gRfff@qv%mP^YjF_E zJK6l_!h&1G5?<(P0c^l{BO=f7ZSfs-5^PGnNkuuY@W3;F!L_dIZ@ce&s2pw5BTQ*d zWvn<`6=X`2-^pRZI6Vuwd)*(`-SNWV{wn6>{Xo>5KwaF#ru2Y#L)L($az(0BDgImx6)?H&K>w>j;naM-{61-~5ef9LN{HVV*xBjzyjSfPXf z`o}`O$u^dpG3UGd}D-;*fjeQ~|^ z#gpERInN3&1)e^aB+H)8)y}vVTQk1>^DE2K$$!4H^f@{QuXY#x@e&D^jlL*^pFn4P zt=1kpa#UIfQZd*pY~)NwnAa4o-$}ggYVXNZ8LlN39YU}fDaf~+9Lg>wJG^2cFnf?u z8u6EYhbuU)G#10}ST+P?>v*p>?rW^x<$kMW4ZfV^vpZofHo@*3P6;%`o z3t8H9s1~xc_l07HoJ$?8>0(LUFQ!N&dzw4p*$H19&%N3N1bqdlH-w>sq=I zbNrh{OxRj+x3@%MxD+;b8gWk5Gb+a`6k5;$D8wT(&3_wlM&vZ;fTzzzGdq|bHT{nhp1k-WyZ zgEh=keX<)%qFRT~$)Dc-nE&eu`|`KXo7Np*!X^vfVbXo@Ud(ywXbl*T;H^xD|eTt=XXV%7+#Ex17w&!GwWe@sHz|es&7py@$2k9S`1G`qSn{qHX=E zTe{gQ=t>SvD{* zQfhQEk{~uk-)5LBh<%|KvXDV_z%V!!W!RL=g@yjZug?F?fBXLB|89T(4}XL8;y?be zLlOVQpQnIz&15Rz?v#+9>=e~38VSXdOo39BEQZNO>*?0&Jn)4d|JLd|@m|3ARa=DI znUrmzPSzUWR|SsQhzzSgLRS z>_b=K+O_zf@KtP1t8am&tBbMVhJuG|ipgv0hvixU_+Lh>2~zE^rvhs!ojgRHt6!Yj zmDCAHW*2M86W8IAB&pG^KO&SEx$E3W5B&vdk5D(U!}>I2?D>>1<$K7^2l;=q2*H(vM6=Pbjbhykj6a8k@KoTKZNThQMP zdfi_9RTK68!5-&HLO*?->tBLrcc#vhg7wZ6=eA z5YIX((95IeR|@5?nujADzRx!do*7)N>8q!eny`G&S^vc$^{2bQH2I&GaWQjjRkmr2 zs@g58+%8Yc?l8L!kl}47Gap==2$}UqX7S<`5M=T>G?}!LsY6?S&XEP?awF&oQcuco zo&QVy{%FY&|MM=3p+Qc`9dhS`pq#gsrLG2<$9 z5@o;yrVI$iaDhoHpmZMr+{XY!Nsb32ch;5`4fa+qFNCk#nI6Nh=j zUPxc@iE5BFTfA#7+&RV>?CGMMgly6$RcBIp<(ztc;NB3DTO}DGlN0M77bTbfDb8I~ zjvMh-2Sm#*K|09g<>#5#YK(>T+Qouzs!H|Nyfp8Yl5Le7=}Ww6qj_h-BKem7_q)9> zyW!ODD~(FbURrb?d^ig1_;TZk6#ov1l;$JmG%Fe6lmd|x8;Xf=Ra5ydo?8FT-xewq zacCcGV>lp_>c9GZuK)VSX7-j=(f8NYS-m%%tkzwuJTzRjkBdK6(3AbV{Vq~s$@XYU|FNCkj_}cf3O_?1j-db1bG{g3FV5+hdqs=&L4SjPhlpMFe=82m?bc-gA>rDa@i*H{NH zAAX^2tvq`8;%i8u<)g*ETc7eSHavyBzno?KDOeQ>Q*G`la_fJ%`TqO&(6dX_TKBj4 z&{yy@oDBwbx~V>FAmb$4Sj1+TvpaNtZEu1h!SFeD=)vPe@0VNS4R?(>A@>^ugtc^) zDIECXAR84{w_B36hzGp)TT(cKq;f32kbJ!s^yhdhEY^uBQ>v*5nA38`cD%d4WX=qeMv2a&SLOP@D>&d?Gu!wsaTzYVY+e zfuiJ=%iqURyu~-^vhNF3)45OT&ts0F5rvui(cX=|tkk2)y9hLeR&;dxJ(^*wOa`|E zGiEyo=~Cx!r&fA07Ej)Hd!|R0Ll5~f^tE*xemJlIsdmKB*x}Cz73@0W{Np&>)!b7J z2D8>zT0)!+Gpe1>R>q2VAKk1m-hZi`JN)j-z7Y+Nu$8yzVtTvQ;8)7)4a4-F=DpRm z?#))~9O&Ig^n9u7x<B6hZ!# zVHW8BOiXo#68e{)@^{cdq4X2I()uBFH{U303A3E4o@}qV7+bNdWZt&kc;Kn*t(-8} zxbHi*$&S0G$tG;#Gj;Ae2US;jYO^LgO)|FcGOH8(`Ch8_-o|2R@T_EzeK;IT1mGI* zgK&D#f64h{VlK%a)H2pZA#x5*pDqI6LZEwaA`gW!oGs)D90J;P$wOv60O|+MDD1>h zIk<;`qnqD%N`4Qfx@+gh&+VHtcXAgY8ZIA4s>#YosHza{@Nn)rE68Tu3)(L#l7DIc zc&PmRmTlggE~@Qzuda_TJIakFRyfi*03Z4>x`xY4G2l zI??cD9zU`!mn8RWTYs)!?0RCx*6snHQ;&M=rqZW*cx&n)to3ro7Y2`G7h&(J@)bb! zYCfox5l2^=85DYo%#HC}Nus{ts%A1(&@l3iA~&D=@qTemL#}K=weg;Y1(Wiood(HS zC^L(8BtjNlGd50d|!& zbh+(4mg*^rPbf@0*KX&;|2gYL1B5sz0ZD>Y#1bA7pCQSywb%hyCOlGe{1suVr~M65 zdms!;;6unE>F`kepb~5xX|&FTA2H7O|mwo9uQ~JUf|8EOc5gEMHIoxt5q`Ig{%LKt(jY{3Cg}iSKuNjEcOYU)p zKsL;J(IKB`7IxI@vuhjnDq0ruN>mIBQ_A?YC6wu5TFTL$(S}s0IREM zjY!9^9o8IRB~!0kLh#!p<0z{2en^A|{WeOZ;s6r=i}{RgnehfBK~CHQMO01#iSz>u zQJU)^kVJVR3`z;h6M>%ruw+0e0#8PTm`Fbw6xsQ?yn3EHy>|J{;d^h_UUBPc*HZiC z^msv>Xj8@FqM1hG;jUS2z5OMBd1;=3ZNrIKS)S>bKqK{sl>9&Y4bmecR8o{y55E-@ zytMdo`S_)**wJXF=nEbC#UC-QUsw5!lcUu(AZYV1qt(A&5$2Omb{^(FIzio<&KQpt z$$2U0n5swnG<%|pfgGRDxRh2Yqrx9guifC3FgrMYK*`Nm|4&#fJYl zwC&HH#fcMfCX;8ABI;!7Akt#1M9?Eup$jBZfFUGuu|CS?9uMtrs^3-pVAXy5;VZ>~ zN^P3s9pBDCD>w6a{nf?3D10d9tgZKskIQw`O^ZHfCPU(zkMhdfsOFJE&ZRGZ1^UlN z1H;z7+MoROkenzUxZ5LYD8s(-ab%ZoM6Zjck8Wb^spqHhCvjJE-FH9fJdj|sv?2*d z@My2D1T_?yMDIP%J32Svh?6#fkTKF}eM>ef@e0BaXs6(4N|2+&tw)DfN#^&U8rGNj^m?Ae$Rsn!jcwur9?%?-glZ;wWFyQI%I#?2h=6^(ow;Y{K(S zAW(D7T{IE->e>JP{WC~;%fj#y`Y_@VtQcM8JxnH%qeP!| ziDJsf9ElY*EXFm07<3Gr#JEIMV@|NIF!qEy|F(M!5f%_n;?J_Jp2#}6P`bSAzwEfq z^={b3ncNSX|6}CD>uXpNSlHPe{NWuQ6iYd&!P!w3!ePDd&+hep80~9xU}a2dJ=MRs z^^kEU(8tTpJnKc*`cR06IFI&~o&STlw+d=I?7l_=1P|_3+%336aCi3*+?`^jxVyW% zYg-D%y;yN56sHs`TA-zH()azJb8+U(`7XYT?{|^OB$>(VJinE__w($vR#G(q(0?Vg zQlq;DCzDfnBcO3O0?*2R4I-Z20CKIP)l-M9ShncHY>>B}=`&QF$I>|Ykj9c}7l zC7nHiBRNKrq^0DwRaMTgA2gBW1?e_3h_8ifvGuyy1@lHnA^)kLQ;7S6{_&4I@-^+B z;QLn;SpW4O{3K!d&wrteRn_s0DkUOmzPKik=iyRp=FTh_8Gb5G1jz$)h7p2w2JgY; zkq$gt8#q!#&|_W#xkYeacp}&tVF>(s@DzLv?`cdz{lK{Jo(3rtz_pRjBlOJU4p(@1 zdGY6#T69m`gFWp5~jTLP$A8W!W1$vy>jFJkKVzzATl?yMD0nsakA^N9;# zE$ymJ1xQf|V+QzRIm#hZ3E89~%#kOa6J0tB4O6-r7`x&@NKS|*2ix0a)s+Z^W-mWM z)dNgTAD3O@Mh`eg*PZKr5}x!ptB@xz#J*AL$`MgEH<|kk^aB=9XsvM2Ye9EzJ0WUl zb%coXm!@l(Dqzw96EJnCJ(zPK6|55a0#27P;^|Hvl~l$r=h;G}00%(`z!-y=V9vpM zaAfEhm>1v)Mum`a)aQxu8MwmS|1HATt!LGWRDAqNkNTn1YEb&vH>mt}g8E#LCHZR! z`mvvEheA({{{6f>)=e0=E6>=XkE>di6vY8Nv6M*lfVc%k^A9pTC@1Hxj>OTG?pH`D;*~I+RQJ|ZV5aKma zsJp9D8E5!t)?QJNuQ9@Zs$anrL50OvNV;?yegMTE&Rf_h^J{YC(`mLjh%7qIEZfMC z%8o;C*2mXgpdIasA2fzbKhVH;lSDu$mlo65(Aq>Qo&Yty<6i8FQxrAmU_?7+(#A1|b|Eh7X{nT%k{+7^Z#_nY-xcbiR(VZ|VQ}FaN&8{i^*h zeplS>FX8i(G`43Cb2TI*c%O;~Z}%Sl9pm(mfBW7zm;Y(Z=(w}Pp&9n-oVq(oS7E;}{rMu2}cUJZwRs`~ZV?I5+>N?dd{&xvr}m_wtan zgmKT5up4?+mn!$$ZU2Bp|08C*Qs&Y8_vjCa7gZk9qMx&ZwO@kv9L?4xWqp0Xdl~>- znamF=8VZG)0ASGU&`c{jgm`OM0&Y-$(zSJKXss0qLLt-?(FTehVF%R-vw+KEji3Pp zOe@;Q&sW2kf3TjISC<#o3>8;xEOmNcPX!hed??$nM@>5r}?^pDmQvabT{Hmm31(iI*C23BC)jvJX&?g@c!4a>g+-D1|vdQq8K7*y|eYEGjdaAo2m1FIsXuIW6Zae_JkL3(=x}lx$c0whJC?I&zA>;$GPin3%9B%i zxyj=h;>4iR1szUc_z$J6^_l3X>p=tRD|cGYeTmBmzMe|yCofmkcE8JgAYtcaVZl}& z&>Czt>houBLZ(4eKx~=`drzVu*zHInrvri4%*P94bsh!?zEv3-ik(UtRmuTkT3y{y z(L`E$^_g9>s%jA2L0mwi^ax+%ChU%5ER;UnqfEk{SeqsoV{Z_n0ZJ^w3Ztg3YJjgh^QTvV+LV|QE~v{i+uRr-(X~^(eNmzQZmPT zEZj)eO~a3jbgRwRCh;@da4M+~l9wYe?f!J_{OFs9bt&(4e?H8Lo>KB8>UxvA&2zFX zNWR-(B|6IYmOQDo?#;H}yNc7j-#0%=D^1yn4Vh+Z3b6Gv} zprW-W#K-js^MteDk@5lJB6EpIeSvjJkBDSstZRr7g80{gkN3a+11EX`zH+wdu)x=OF=`QtB>be@1!*oI-z<8e=^$`JqN?>TFXIZDDcSIa^s zBTG|XHyUEps-(hfye765y+$t)`VW2%>QP?ur^#xXDVRq|6;e7QoDHEnagTTr$wAjM z-aAzn*Q4=XCpmJJtMn+tUpj0(Dvw2Jic(SeNGsZe9aEcq3lOBhzmNUVLvx(7Y(+4m zhGgw@NR{@~`|1Q&xAbEe$vnTX=COMLw}>F&4CIc}>+B@0+O7@(fC$N*tD3JN#)R=L zxgq69`0`WA z@$60DSo7^K=FuNZDU-+D3sqe;MIJkU&Dh9H{NrT2j4nrzzaS8(af?vqQe8aB<>E(L zH&prjmpL7)l!kq zWU_!BSdQePBFM$dLpH^b%cxLOUZzCglGl2z=t%_)@9_Rf_fn!bBgl61lQQmf>SSWw z$@~r1+bzv@m#?joZLXzS!L_5boCluC24-a*o9}jcoG69_zA_ZyaFxV4664NH*>>%o z?yMbLa+-yp(=*M#p~@=GNtpf!BTSBp>01qMlzRioR&|Z2aj{%+N}c3e3AxbvC7@{_ zrYUQX-dQ%%qCM%-Nx~*@1l|{R@5LV}=AURn;)`?&V=8ZUy<0eGVtPf-*M+WlxU;2O zW?oA!%^w-bbs5V(sIG)6h=7acqY|mfIENBCvT*r6w6;99b`c=jyjxWoIJV)VC}Jp$ z24^yhhRZDa*URPO%LOJ^XQyAJq2ZO(<seI7)t`sR; zaR1)1Dy%}Mb$e_E(QbE|9DMB_IhIo3nvjh)N5FQhvfRPZmXlGG6jo;O*PyIJnYIzx zWb^gZ_o_)Ob0Hpv8n=)hJt=52d^|M_A^lubyLr3rP-ceM>cozT-eW0VCI53NPTQqY z>JTVKfva~uV8qDQ$}5i2_b%x*c~CE!%edU7yP-eU!-=`$$pu0`m28qkF(F+4>QAmqK1^ujlFl8=H7Dfn zX~BTXM9eh`Xs_TTYn9ruZ?Gu;}H1lJb~KKoKOm$hg2O+M=tLQ|k4YN#Eo|2s&>`^?Ksyzi1OE=l4&fs0TgjAM2W^yJ1d%!D{U142W6F7g#|ozj%sur^XeTxJ2`v5 z9CEa&y!-tW-a&}L3-;T|q6_z;doopo4Tj?Mb7skv2~>VV1e%e2B|ijdqijn_TdQNc zBLD2)j05@Yi;TLkM{Q64+xH;ZFaBS*kYXdMpk^vWiev?0B9Tg4_}CR|-Bp*r4G7*v z_cd|2J*gbnnH;N1%Cluiws=eWEj7=)t{2?qUAlA6-xM7^OvLK-!PMz7>Bh}U#YMiT z9)P}Y5w*y{Qy|uRN;sLOHBFUm82&P*Y`n2&OB-63#mR&SRdH3Mr*>%3 z6I|u%7V$4mP(hX?wI31 zg&ZnO)=XK69H>diLOPPA#b0j$7usW)M|>9e8X7uKvAda!r|i~Q=i5^qyGkd*>ztQ$ zq?q^ACugb65P>Q7>0;-PTGRZC|H$tG18J>xcESsG+`@7nk!U`Gh+seF2^Ie)KaH8A zHATc(3wpKJ4bcY+u3V;{!vg*PY7MfnMlE>CG#lP%J(-WjAaOdbo@+Fi+Imy7C9$(| z__9ZchPC~op^~d=+*O%QlhoUD3Kt?|Je;uj+=r=ZbCFOj!%OS+*A{~}oWEY#ccBk8 zUS~w;6|G}~6GJwVjsravQ$7X~2Zji+qD>$b%oX3lB`h4lQN`rJ#2<$XEaR)RbBnq+ zyvd10sZ^+1s#HjHy2ex=f0O1PX`%l)-}@hauTc%@gT&$Zg}~=GqOcxMC_T@v5IU%k zDkO@5Li_c6FE3MVY9ugLYiFto4S31hRle|WCTA9=%BEq!mH~t^DGtGQ#fTNgb0+Cq zgM)=}HB{hZEvd9@gNNzW1eRtCR~*r?Ubt#Xt(DM+3zAtjm(D9U$qUbG&{=%Bo}4@&QM^wvTO;IA^T3kRxIa0Z_&b z5m4N3gLkwb5W`Tm3pOun-*AQEnhyYv91S4GzYiIUz7n4OO&v945r#XTKPP=6f6J0DgIAm3cOUcJ?7Cm7xL@6q=`Xi&2wxs)spd-7Oe*E88sj6S zD9p^PtdXx&6z*k=u#DyOf8sc)UEv~P-sx~&&wSps9R=(IFC=-Jv6!}RW zdBT$!KL8?(qE#7?W5bwmGf4|hT+D_5oa4IWi3QT_+^4gjJGs**!p`-Ht~UPIZ`r4O zm706`y>1F#_=03Hh?rO&s^n+4#ZKg8hvurLf_3cF7hYj!#`TS28ibv{a-e%mazx*T6qO>l$N$6NZYY<_axTc_ltLPE~Bg-yTc&x!$KovBfgg15VW z8^w{|h$z1>C|{fUy*%~dhcluZ!YW=HDdqVuv<$Zzz{h*9rBQjJh58&TEoMj}BS4zM zN+wiV8i5hEi-CAc64^?+FuGtB_hCohu8v>MI1x?X$4DJli`GFd5)T_AcoJRh<$Ft4`!( z*NdHsuKA7eODpJfBFa|ucy;0?tc-XFyi>4E>vjZRRxFt>XKx8{G?^V)apx5U@RQ`S z($eL;0vP0JI?c2^eyA;7br7Ui{nY2G>}`HJT`Fi0Ge|zK;aTnd-J_9|o5_D9dsY

!YobeZ-D~3PMM@<|!WJBsDuY{#I7+*{<2jEH31!fi9jSL4 zkq%8$7di$hG4P((2-nhTDas+(Srt<{Ok?2d(=UChW`BblGf9~)`qk8Nt;r^(&njb`sxC?Nqknh zV7kF$DwoeEa@y?fWAgKMh9RT$drBV#DsCGz4N3%?#L#>zR6vr93PsC-a9&hdfs8a= zgJ>)r0zf648$S_4$&uliiEv!4cA)b|c_N^qo4PnesJ%9O(!MXhmnSbl29 zY>!gDTY&qK>LHx!QcnC@)gnd6fQ+rC-HG$r4o2K|54P{cIDXCAoX_liw ze$MKMsoN?al85Rv>gh^Guh6;c7RiL8nz3w@>X{ww+XkKNT>{)RyJwL zM7mkKnv+=b`cQl1L~wBr=~q7-6U-nuFe~UkptGT;ZKm15gghd^2M%1uJ`jVT;r7TX z6fc{qG^K{WXo!fu6^p%mM%p*HKgY(GRz{Nd&za9(PMN->&b{uQ`>mR=Z+ZNB+_0LJ zJ<23^k+(AqCc1}qtR(bmMo#9#ks>2npwpF0t{xRpH9v~21@9{^yKoJDk1vqYMmn5> zJzP7f!ueDa4m=MrzmEL-(~HVvU7aeH`E$bgaBN}S+%EnFx5j5 zngUf`fc6+sU9WwC6f|hfUT{onI_NuqVe!zLL~N-Rhg3 z9cj5NLM|#IsS{clE(NSUJ&f4ImL%&-I^JtXcU&sFmIyjgjcGeZ_1nbP`q3#F4O`;9 z7bTAywiDv@{PqKB%log2{oSyf5?Tfl3uU;9^>}+Cb1Vak^mwGjz7nBLcktG~W}CVh z&fJ^)Vi(OX+#rkR%=iT?Id|7hiLc^EWV#$o3_Q8IdUwdD#w054>>h?fQIiyO;Zb13 zwO3&koS7U=U1LhX%ENFn!f)M`+8%4V`RD+4`^*Iam~q}@w$>NspWBh@`zc{K9Fvvm zAvR!s;B(BksOr_n;G?N9rbN8qiHd`pkzx=Iq2i~^n&2b@CVd7$WE|lalvZxbQ49Z+ z!Bg*MBeD!X%vz}G6{)1mBD%li?VgS5;HvYm( zZ~CIXtowV0q{XiFE62&}ANOq`MKblpcAF4uo5a4Ve4p#7a34v&@bg^1hLTZ(4mOPn z+QPpsF3dmLpAHdheI_>EkeGL|t5y3Bhn#KkcHZi=_iUugyBgV)fGxU4iYA>obY--d z^)Y-^!&x~a0uNdbgxU;26XumbE;k;@CXrx>aWoaFVTP%{?MO)`f3(iNxZ@*(0R&n$f=Xz}L~i zF0D~Hoo+H{3H>A~N2yCSfJB#A{!MNJ3;!%Wd{P;2kWKZF9V4let3wxOv$`Sju}Qb%9rVzl$7g4vd}SQ(WEboSjA%CG)BoH?PR_20Q`h)48WvLZYT3pfq^ zC__o<(J@2E?WC7I-!Y}8HCaUjx%7d2)<1wDCXTenbXv2Lc+z5qh!ZBWDd1q?qrGM( zBV*S_W6H16md(gLNst?LJu%@)m7iQK4uIDilKfQn1)sQ91#Ci>4&rT`<2P1~ybjtJ zS6%0B{PZuI!dn{cigH zSOc2(j-$=Vy~@IG_!aX`G6wxK?*6FnSBqhrz|8nYG0ov0;*FGoMiQE63cEUr83@1Z zQe%6=65llitjRH6=3fzFDn?uMYik>=@6uvEQ3hI8X9Swc+c%3-_|enI;AxWKC>QwnChJo2g@yHo+m2el8 z+`rs}bWAr0cS0fe*cxK7kAHO9E{eed^&X98Y~@1IhQb0R^@q+NMf^R}ye}BBC*@I- zQl#U~zHF^`_R_t!l7@^kBzS6-+C}38PLzeQM;lA?o}8@O7{X1S)rMO`XC$3eM}C41 zY>JIeRb48+RNn0f)tbw(`@;4qHhYk1e8{XBu*Rw(%d65`rBD{Otmhx;?C7x9N46nT zdU9mM01FFS*CrAlHx~0!PDe!hMmP+_e*jpQnyZPkfIlkr>S+-w2$q?w$pj20eqtdz z6xR*~AlDz+2k;7o#+?F`(x%*dYOqzs+#lcmjjoPUf#pMUND?&T3LV*(eN$crLfQ?dr+4-c}hG46Yu^0j^N z!HL!iWZ_HRl2O!gD!u8*2VG!aIE~Jh`j>AVx#3_|Y&x?h>3LiYL^V+RDGQ*KUsoFa zwNfTZ?I_{^@fv=3e$*s59=DqR%0O2b>NNrTNG&#^FK{@$7QaY$(oHYT(zm*?U6b>Y zb&}(B9w=JwiAbflUA2(yKH6w=N!zbkDx{RsbP+u3TW+lS?d8^OV!u&5|eCv z%}$z6qA|k^ifkXc{!wYj|zh-RTRI19h#ec?Z%8J7)4JQ|VZQF)6o1uh4RS|1PfGLpsj#tF0ATd&7 z$}ozQ`5%5yVo3Dh`PY3;YnR(T6f5_b3K?EM_e;ozeEMcXY+tJKf#HU4Eq&=zA-{Ob zi&Wi(QMKpKxc5lfdDQBH+yL>3Pz}ZI|p0H_p8>C3NR>YOFK7BPo=8ngo?bMw+d?@&*e6v$2l!N8?0| zzsBEwA@SlO-J3%uj(MMo|CGXYCjFa!?2}kcwKE0fgB=*#+Ye8Iq=tSY7h+EhQB*%PDY5x_vP=z2)sG zuyLgd9!57$_>%o|VWVGSZAqt!uXMSrkXxlNX8l(yPeuNeu(Lhiw<%f+)2Ox73r2^21fsOlW0HRFl7+olU z*bUZ%AVRT2ov;h5Dz%h4d*Xor!~=P|ylhRYG{!IRjqs9K}TeIV((u6@t@-HE_rZLYT!YUfja7O$@b zXB|p9WuptKv6vA3x8s74-D~p1@M4*Cf?I!qh=G~iFt&C-8X`hrfk13f|CkcI#XpCL z(Pt$A!SRpUwqZ7r?A~hsC0!QyaU3ubiF}Gc^Nci$uRqYKv)l4#hTtH**Lb>imX5tz%+L4VZ{t}J= zTMKOw4W2TM&ll2YI*3|LW_EJKk9jkh7(DDM^|r^op_42fN_ z9PggfHGn{}X&AzX5rVvy?*6%tPhx%-W=H?2pQG-@{#!rqq`>>%+~ZfuXE%hD0Hk$^ zV#J70K+nT-fB(xTZ^^f(B`;4$FGZ_dZ=}9;G~79TUA60Z`<}z7ya{g%c6%5Ayqy-K zJJ7J&NE_QpSZ)$0qBGoY*{t?s=CTvC`q0E6BA-bIW7M3&J33Kz($SgKRbeSR^14r=^ zt&o_o^hTAcMo3Vpd)=XKz72hTK8(fRm~pCvAan?Pt4T><#^s$`5l+u0H>OOK&q6?& z23g1~wa3b9V62UUmNt0D|I|bS@)#l0F%i>GRhxc$`{(Gs_^SUUo9gF_@5|G_v5jv% zFPk?`t3ht=RB^txrqkQ|EOW19 zJ8e5lrdi?N>iWqObS8NY0*vYsTV;vEa}6Ctem@T4z6d9tR+FjARci?XO(J7`GRdqP zeNdZeY0!;*>a5-_upkh>5*Q0rt9C1`6|}t8L%|bX$twgc*&uhawdNveaxTzd0o2Om zNXT?LRF(kkt3);o`yE^BxbaJ_7)v7#EoClOL zV_o(a2FqR#m_UOkw;Rr%y?=RqpI10k#rU}1IyUZpCg4hlpbq=$f0&bXn5Cs)L2_7S zl6sA4nXEG0@9NpuIB6!OPOohwklad21wlk*7MDO_an|x66D8QX_4LcbAM>)T3gCpO zyf|Ywyk|AIo%bbef7cPkZ3}i0f9gq=VG`jq$5_H5Bq`@qK5XeMCn2xNQQ4qlWg-`w zh=i5JN=#*p6Pbsz!)p1wpz^sW39ns7dHl$xjinQQb>`}f;{(f&Aqcp%3|KOD7`fiG zF-g`dW;S$rqjmvgX)F+(4f1tUO{10UfVLI1f(fg~t2h_LK50zf!EF>h8qq7n)|fEav^39;3oxCS6qYokA) zMkMh&bm(#NoYz*Bq7IgPYl_Yo7uL#8mG&<5}L(RJ3 z)V8%hewIQM+2a<(=fqIwPco&XYL36djSJW#etbJvayrAns;~GD|L6dKsUQ2X*&Twc z@r6Wd*a0BGM2{fy3_wC2f!ZU^0}LXXIvCuSHn^@65h55b@h9bwr^;hv@Ey^a3Y3p0 zh!^L3=v;7VD7fA-Wda9~lo*Z-NWPeY}OYVrIyL$tvXZEtGRaoTMXwG_(wg2;5-lvYo=q(-@DQBCq^C)W%j6|w<%2h)> zew5z9gqbqQ`c41mgAZY$v;#eCMz~4BQFZJAABc%X?UKk^qd|EQAiCPTK?eW;5nu(k z_5h%W282{c27-^U2NIZ=We%%Rp_Vqysg7Yg@(lPuF*Zop@oJ5f7siV|WEm|ip0{&K zoMkE)cW|azVak}e;|u;_G{fX9wwr^DlE9ifVgZ|X%uk56;wB|EutpGxMqs0A`PMs% z7=e!n3gP4-^#L)1FO`6ZX0BQA8IQrgKl2R0P#PsP=%r)$pw++)5CH&D&;bH-K6H*D zBh&JCej1mwRSz)2=XCD(kWE7z4h5(nCNMy?q=O)#xBx7+7F*IRTY+EuDSNDqqW2KQ zeEtz?E#5=oNry52eKj#9)yqMYO#(B>Yz|6(66fFkpEUtBXHy`{ z=L}yS*U2H9^{_rfRz-SicNM<<@B2>_0J-Xd9?-+klmWW8p&e)jh&?3P3W2M+Gep7{ z3WKElO=kF%?eCYs6snwA!B2>e^rx-z3o70#`1j zF_(==ydAcimH=c1xO9;>c;@CwqOPC<7OGu4!7e-VhmKq4vI3Vf$Y_F(4^O$u!@?C5 zr)WPjtf=DfJgG)P(QC8AgVFJXZ4iPAn zI*P~W%d^N#ob;MDI zKYjlxVbqZ{b$9*zD|;rtbM@?d;a|oC^7k}qDeZqTuwzW-AfkelTf?o-E|jHQ5NJjo8@5kP-47p-Bzpq z;?Myhe;BhnO_eemd$QzR`lRvK`R?85&ZBlFnmk>N(=HOZ*U0Ly`aAZuj#dW7Lj;zO zHr%xI#M)G(vg>HA3)-kj&_<`yeged|{QJa1m4rgf=_wu~o(s^V$YM1PCBw53U} zrn`EDA=AhFf~9MUwvh+3u6K&E*G zV@4bJKLrUGE0h6D0Wk&h06u`Nr8{`o<0VCM6YqFb5N^TF(%fJk$Q_s~j0tQy;0LCL zNW;~Tfm-~LRu^)xZK?a0=@-l9=PoYI&yPwI!}6Ree2mu?9+c@87Ib{Z-5q&nK)c+~ zj6w!-FL!rC2pTy;FT#?|&J5nlc6nuK zZ?yfp>H%hK-y>1bVtYjraBXJI+uyzf_uT(^>C0#n%XY=S&*ZPmOD$~*QvzeaGu9-+H%_v0h5WmrG>46+V3g#^R3si18^<` zN>R6}^S?Xy&)?tl+7lmU(?vf<`O9{SkKB%bUT;AXiXq?;fX{l%^n8};nR0p`Q$y-C zwDrc@L2&E)XjgFHSKm>o)!P@t*(NoEKLm-Ckw&1*^5m3sqcTI>M_A^q`|1dIIa%u7dg$`nEDUn<1dz^F}e8TjS_;|ANh@vkNj7zL5dnWRYfInNOVC| zBL2<(wT9#RxGcYbSDSmNzNE?LzD!x47YU26JF9+JfMiW}*sLpel?u%$ zQc`vo)_)3r>(8IV-dMirzM;B1jN%f)$`@G8YIe`6e}BeJINmn)w8()mPL^pu7?c2v zsw*U)K(e_?va^osmaK5qD44phX%7&#z;y750ntq|?8y@1G3NF$|24<0d2Mz>GfjL8c!6*>85hr4`#`N;3(chC2 zcs%camYn6#e=HWuA)GMwHR~(RirP6H>Uk{m{Iq9elJWO}#Q!mza;}TPP#Ev8w@`Lw zSg^h5c!vMOL$hbo#qYh{>|Z_NY+bTkHQvR%XC^?Er7OdeH(oKt z%#Sm8H_*(1f%J*TZdtfku!Ln{K0h_eV~_E|e#n@ig%Y^4`byE|@oT zUY(s4c&U0$-aa1`#PE-_Lrpcpto-~EVpnvL9Ky&C5F(4Z$k0dCkZHK40W=yQ)XTSO zc!2FhI-aX(7<&i~@@(j|M>!~w5ByV&$>WV0AHWIZ+{yqaH4v$x4Im*5aK`{33;=Sd zK#W^P?{M!NsQvH1{`WV|uhReGcTp4Wf25fVi#xf+sUewGk|++l-V=T~wLB1idA#3- z%TO%;nG?UGW_IFl{zC7NB;3OPC2=BG!|45jVlN&exe)kDod7+TES--J$?BFZD}N$d z3E<`9kRX^hq>aB<3W??PS9r#jH~v?$SaAR1eGi1X!>v^9bfW(NR`AOhiudJzZ_+DA)- zYYoM3M+|zG@=>xx(1WJM7SRi-bwLB<5#(p+NEkNAx`<#vsR!n6C@v}hB^S%;K9^(C z*Y(?1WkdIun&tdyk0G=Vxw(VdyDP*XF(TAV`6E)nu}4ilj>2qlogNRugXT&%%5Ia* z=FN{^A46#IhAf^fJFuUS@2%ZV|5%v2SwxvjxobgQ*_8IC__8Yx${lsa@TK8pa z(w!=)XSFfFP8=^w0G~O5stsL5;v`xqpkAy?A2EZ{&4;56&eB7!ZI0kVJzZ;v8?%9(_-F`47Nfyo^7V zW#}5~_}IhvLB3msiK)Zr@N-y-o+BJgP{XKn@BXkf696G^lo&4f%38 za6#EQsDr6BIDixidFB&VF&j`A7H? z#gl&4wbZf@mP`PD28ilwvi|Uk`OA3W_FK!B;w`(s|Nh)wvifd*XWl&O?SvyQx|J7r z*diuqFUom_T``QSXvi?Iq$@QN^Vb78F#P;PSrER!2#f9HDK93;_VDoVj8s5f4%)?2 z79PthR~ea49J-c6E#LY#>*{Cv;bI8An~qlBxzdh{gYA~v1qbq-m-ZFSb3QFQPmT1X z-$@e1i4dKZF6FbG$A7@VP-Mv8h^@8?NtL)q!o@`)rX=hF5yTgvM~AK?5XM)?IFn#G zi*ohR(~#oQSRsT~qLY#$?;Ie6@{>N0qE>_;gg2?Jkw zfhgcmx7; zfg|ZwU=RdOU=KwBvq2=lN}=)K6lryyM$~GFHuMgjWrSvMnzTMxL|PThickxdgM0uJ z4mcwMSYn+A7o!<7?)&=x{JwvLGhO>!f0*jzzU+M%&jIuF8ZdqG-J3hO`&8QZt&oqY z+;VXFy%9Ih`AvW%^yTi&{6B#=a=AsJNu*#Jw_JSqYoO2sQlcFZ_@Yxsg#s;H z2k#S&-p{=ZzuayAb^iMdS7`rwTi|zB=Jz!V?X_QLy*@iT-4;Jrass}*&d2WAj?{Z! zKBA_krY@5LF}T+6vxfc3a=+Z(mhZRkG*XUZtNIk5Q4eiy-I(GB59rH}FaZ76PZ!Pd_yFOX>Q?(H9@Kj-a)EDXO0I6#o3%N*uJ}Am8cKOudodhKME{BL4-0E&4O9~53T>d(vx6R z04|tpz!D4w^nvvT?ZMR%Y&>T=T~Z~6<-F9gIpBAQlwjkqTClP74Y)CM87vtZ3`QTI z0K@l&lzi7#wjb?WzOH_SJ1yLs&n)`s_M|qIb)xAaS;@Sw_3irJOMW!V`M#2xLc4O? z+12x_jim%7RF}K3k1_JbB6}8ks`;bQnskQK$<%0jNkZX1A$H?>5>J_a0&67-3nNGr za{n5+sYc(ybA2gX3)dH)eA)utYAnKTZCsGzWGIPg?D2vlb#&5%cAu~{uE98(0VVvn z1o&YKj1T4J+AkFQUxyd|{}CSK{|@i4|N8T}`+s!#zrC~2#pN@ORT>z@BuzG2i}>cI zur_<~F(`oY2LBqC zG_CLBvvGJFA$YC1{eDDQV2o?SP&~;mQrWjCT4CY$Uu~JqZzTemNKbDomDiQR<24WY zbC}{JsYeKJ#E?t|nS zK&ghL1-E)bE6+%fFvxGIafRpNKOtFX(K=Mdgo!pHvAc@I$l}J;Ip2pu@4I15C1hi{ z^ya5yXltY2tW7T1d?~FOkeBu;vR1WcNw773-2>$+7V7AFrJN?U+%3Slt#?CX| zr2RY|=Y&^SZ1;Dzp&iqUff_lZKB}t6R5R=-A4IR*-Krx0+1Fpt9b{`Y;YOWb2fT4&&ovN{N@uLw+ zDVfk~`Nl{?NypHk*h~nuaI!T}`>}aWzq;eOMCI+v^YXc+nHL}Fq9i3)Pz?9N{|$fp zk<#nHtyff=n?4&$&3)&ezBybFch!AZ?p$7a96O4@b{_BZG{3mNO@Eke_^Dx-mr zJUZSIP7&Pq{|+++E$04}MMK-i)AwQ{vipAl_5ZL^?ElZ#0|8@DCWJ(&Nq94~1~_k} z8b512F7SupRgh7!Lpn0`xHg6vIs4D0-!$Ze9QBxOa;%EsUjiGLBP__A-U@1g#v}dp2yZ zeC7ORHXB-cKuMdE|JW{gB7tzhXEKnac$KJ-UO4vUfZ%n|k0S97&%}ew&28tvK8~OE zQob&6xbclf#B12yGSapF<)1e>wJ?C&^+wz?n2W4@=d*59SSwGKr``k2^l1?i^UF|@ zw@C7+ujP`20bl zc7SVeMi1F;nR=xEPO|Th%yCz84sZL_+_I)XWAcPanHqwir(lEJS74jzd8O{t;ZAeZ zpT4dnq8Foq7kQx?)*iA&_?sV&RVe(ts!NLwmy>)_+NBf88OPE1b*LkvqD13&Kg6d9 zZ3=?c-=KEIG7Bb4qv}8^Ho9~M4@=QQ@ona=ap_>Sm<78!(Npi*W z8Lzkcgf`LYg_7EdSOD@F9Ab(@2!LLbY(XHA9Ui3VCrF$;(7HJjy5N+^grrTxM5;q@ z7=30QL4`E&pbQWoBi2wcfXDs2!t2?83Hks13VV2;)lq9+*_86_yLk^ZB^rb4FgsFF zkm9p^+yWVAvkOk8iU9xA1wW13^>6jRXNR{ILYuyX^F<@UbrS|-VL4kOJT^S@0gHN? zQ|rYGryg#)A`L8-6;?)!Hy;)3DyC1$pI5EK`>GD3#`ytYOO$vB0QQ!=Hcd3g(=*Rm2^RYTNM3svpnJ_?*M zzbBfNy^o(&DgiQcG_O}A^k>`G39coz)1GH4lYJCyU|a^)E=o><$235)9#4wTQx$-p z)jtw3UnH>~<8Z5b;yQBf!>oiNQij+gd4(7G+{ys`R1wSf>`V(vm{xCVKYa72aVgH$ zr$ig|y3E5s@=vWd`#+Nrn|kyH*2q&Adg1R@v!oDcvK1I_}H1z>Ry=fi2*C5=>!H2TqI ziM6v^6^scrsjY49b!`og>(@x`c~|My{Bbpf`KV1cb=?YuSk0;ee2?}C=WIf0W^j1i zNq0}b?~+N?u4$Zz$0a)r7X3{;(U3b|{@pk{`5`^BjC8$}`bb3k)1u$r&pQ>DsxOtP z+%@tiPIELCooR+o--mv7f&41xM!e3?h5yYG?{rpOD6M}`9LxNa zC#HI_YJ2o3YCbGF)X4we^9Cg@D=#?soXV>s%ZG7_feFIz5{@}bJ@b{0TbzATELw;h zkJ9$S-ik`cE}4x>iSQXyi@k~3Z0>Q|BP$yGbUS>1tB6POkX{(tcY~ay?<4mIJEtd^FZ5 zuR`s>sHA+K_ZiXEdZBlukmZB~FZQ}ErCucgD{p@SbtDz$D|jgofdBxiacFEAYc;u= zuplAuc%A#=21raXBZOl?RTI)=HUpLohJcWw=xfBNB+I}EAW$jnirh!9PM}|C$<`$1 zyO8pCJhgV7v$eMx$F8SXndLk?U(F{;RbS3NPfiFuJlrKHaTlJLnAmzfxaF>+^YA?J zL*|I3DOISH>yE|q$CGAjUh3Dv8-hh{pO~cn1nvc{Qvk6JPqw?6_yYJ&xsTZXWK8xm z8q@OfOjx+qMlNzN{amP)XJV3v6&i{Ek`BI?4hwtGJRqcCp&`K&uU|#+*sN90a-U4L z82;FNpVpos(G zu2KC>`{$%Ldk$B$5|)g0(@`u-8*VZ$3Gxx_Wi3iqKiZC2NYeYrNU10R!Rvl^j>VnM z=goqg{HDgkhRWNlbT8L=@jiRL`zS!iz$=&4Q?tpG8@U1i&}W`~1HkPBsGV@aVRj3A z(IOyLhlBD;7YRQ%nI(2|`Eq*+(Mkr{BimxE1G$|v$296n%3)2rM7C%iIMj~ti4*V6 z1q_MfL{{?BR-b@T_XV^KKLQ8F4duaVy$+d=7XKw{Ia9h9=|kJM)5-5Za8>5QxM=x| zI`wu~fO(|Dmc<*4DS!v#6D6+^KnD~a+iVnsyc?sX~|9tMO>Fo-nd4PnwWFax7I^qBZSG%}mvSA4R#W#Absq`T>|c;}xF{Wu9EC zJjE_TO}jr`6fHASNStY>&ayJn$Pf}Fo~%>+;UFC^goqn9SmzLO$~aGXD&EV^WB0R9 zg{N`yL^|8k1YD^&9^YM}yS)S3j}zMTGS`#vle6FmistW}I{NCw(WIvwG)($)S6^Bs zy-uxl^i(R6uXtK36L=(S5S#W{$V@2?=dt2lOyQ594)?)!G=4e=7bDGy_`?M-jw4g( z)?;TlY2JK1ur2+q^gP^>k}Cp=SrUFj_z%CRSelPP3htjYKV%U(-=XpQbm)|z@w?#g zlYT}{lEHQH2u*YkP7L@bj+BKd7LNi5-zDOT`b@nZMU2;tpd{vxU?iXkmjeDl7~?EP z5<-R$;ow){y7;)^mY8bcgY>*env`V=0tc7rf;kdDoOGY(Si=~uWE}QFjBcf{886^Nhc?8 z?EJp|x`EPy)mb+<@>I<-2i$h1*^=X1y5#bgK?or*HW$BhqH zj#YyxekgA>%1AY*u8+pa)q;=+rSTc%D%F0k!>AyCVuTl4SledyKGm(?bL7uL19RP* z*=gSLZ)I8?vX-^SZx^Jr)gKG*@I!J)Cu`pM#T5hukypzdoJnjJ?C1YMNoUv0Y)P+Z}Z`Y4c&63lQu! zUMi*+m;znVR9H(TrY--c$M645CIN&L17JjG%S!;@10@KF^Hiz7gjN3B%bG>@60P9hHeO4DUwTCfa{ng($~T@Zn|ndl zai%T_e$Jlue5cnaCkHE#)Gat<+YG#hKQ=lCL!Y*O{z1oQFFq!C))Vd(C zXrRF(@sN_Qx~Z)rIm1kueYS|bnRc95*@xq+D&1EXYF@ak*VhlMw5+^opmLlnXAWx5 zRFQbDV)+i?S`AxVLna2RvuEE=MY*a1A}cd39#6E9@a|+qV^p{`NB1=mI7w1xG#xbE zjc-!w_Q3p|^US9YxNlV1H!EFc@zep^AvCgTa3m7k z1i{mlL?YV=-$QV8DFH}q0OT1ki#h7j@9}bN`oAvI$(P^nrhO$=a@ZVqKUCkDmmdnV z*T#)?YpE6|v1yXay^Wu)=e%Z**r#c!BxPZ-4ko47s&RPST24cM&pG>X;=KgPwAln} zo@u#xd%6h83te53$1!EU7-`~_r={*k_`c$+e;?*;n>aAh9(^3x&z&jvv`_uD#IQx3 zU35X!=IB#8K50Bi)6?Cd-umZIvv&TM^{|Hw8V@)gdKauzgLF18bD#Osmp@hlUr=o5 zq3h{v_l8V6sv+Y+NXdxlbG$(VOJb0+##T;xi}Xv&1X@pV62Rw&!jajH^)Ps!`M0H$_X?WA}t-OUo=jV+%*X}c|6V>jyGcxlCT8j@k zn`aHXtZr_tlc5q7{`m*(H+dU=w{xh?hJqi`qGy`22?18&ugY3l7hlBLnQ-Lkkv-ci zEIGdXoCg)@dWY|}WVLWiShl0BjSasyWKt<>)x8qH;^)^+ub7$Sdo%)#k|T7&_(l6zzzi9V88b4+ca{rGWGXeLf6NS@$<1}z>^S!4wCk-=F;?2KuCCwhOe7cIp z|DqllvZPX#clmlRoo=OcsGe8^yMNY4tiG#mD zS7ckDN^l9Z)p{~&vRScW;Wa;I`t}Ol0g<)Z~ zKGDW&UhjI_J8Iuu-md7+>$LOs!fwfDVU?0yieWkK!mu!rGUwom=S6*ILF2;p8%A%J z$g~)wTsxI=?dbj(Lp!U|&zYSRW)&-5$3W{+j_`5ZJHQk;(yD6X`BDV#X?t;;C7e-F zKBjR~Lf=YCtrSDW)H6K4&Jrs?j66PahTAfixB>7aW!I6e#xDW4>0jzA!cgL2z3nzz zl5TF;`rEsdD7-*ynGt&v--dK4dS~Cp{Iu6iRP9CmU7K(?ixo zJH=v<3zd}Oz@I=R@cUHFzJ2eXdgQj_7&OmWZ>VG+?kiS9UU73Evpo7olm=Zo|HE$$ z5oL1FKmFJjnaM8y^xJ7E{riuWHrh1F$oDX^yT(pMg#$VP7)-bjsubn%=( z)db_h1|FR0%ri`?XCe;&*{g8VIZo83Qsfdabjk#=;6H`Adi}4bf8zqW3 z!h({t*GX%YvNFt$)KxCXQAKyHdP>ZjhnrfuWWJC{4kJ*^Xq1{xk#y5yF zoAx6747;n?+etE`r{XLo1q$dCB$d)PNFp1SYNiMEL@tlNy?V^ErtuWkd@~Dac&FBG z#$;4WJIfZ~AGf{tq~h*MiA8H?j&+n1-Pqix46jK~6vN(D!S$(DjSBq!bcfA?e>AaG z0c!`S^jMZ52AcO4`q*w4C=r-hvS@koKQRCO-=xI<%U9@)5^xGy<<=4m2*h1Ld#?zA zLBztk(56?eVCkPQVkoyAD<)82W<-c%_#xJFP_3ae( zIcJQNAaS}|&!gN-vh&y7>NQWAtf$jLKKtsHVXtRKC6W^QHvr+(Ko@pU6E%=g8v*yg zZK5XKX+T63OvlokmSG~oA&_lqGMF6#egW#DCX=NGA~Lb6fgm?L0F?79!g7(w=HGvg zLe)IUv6_EYJGb+UZTKDbzWS)mGqr{9ZlFO3Kh1o7G~U+6%k9} zb}>{)L9W?+15IhKO8brKEGizav@7qIpTu)2p8>cqG5-}wE18QuIJ z^bU2kyDtaLz9Gk??Jb$r)IS2!yVWuL*f{g$X3uYvIi84+{2?o)&pkf zfS|S4Y!_3Se;QF?=+5TfYv1JqPb<7}a;Y}jw}&DfTPn+q(wDD9lXg`hy@+7zwqz-; zLXB*G!3LX+pdy>6$JKwL7%~fc=4WMQ19WE+0yQ~ZNRUmEtkKoWipI9V-3B#yS?J4TcxsWk!TWx6PNe^PgT51k+w*}m=GN(rX|-*# zk*!i*`@jyRx94huOE!;Djf1o_eM5uR$X0=Da^!J243?@+%ZaNTU3yN*U83x#;AIh8 zALR{XZ&AAYNeD1H93KbiCNpMLud&EgT-f8la!v)_gn z?LSEPv{`vroY|kRd~^#83djWjfEgpCJsR|fXMa!89EgX(##GKXC)Rdci9Qp8 zGzuhgeNy(q7=#h6k)t`wH^yfKx-L7?-VBT9_4>T(a;v8W8u|CePtGk?H~y~P^Aicr zXec4HG(hCsTS^j9-;AwF2&RmF+4{3IQ zbSZpSQao){5`Oln)~nY7C5(AwZSXcQEJ)EX6(<|7fq9tYYjrT-ljEE6w2JHi2I2n! z_=OV5GDB$qL{KhS02m|JRu1msSU~XcwG$j^y9g+URU_14!iaDfKCq9O(2^Teg9Ff_ zgyhx4yy{#-KhCe!msTFvkF#_#$x+moUe?e!^s^6ashrym&HCqlU~_I4WoRntTj4Tk zKHV=T3Z5t;p9|{?{_90hr@3c1+C6(P#%E=W-FxQ2lWj`VE28t8T=LAO9w3c^8<6vh*-#PE9J{07&dQaODU#-# znj-!h;^_1CXEeEY#-Rz{6VC=8g+9Y|3oawzcyfp%wWRIjokX~~EBCo}+@w~>y!y^I zWQcxt^hmqpU@whs3#tacQhC};tkf>A&zXwXN_YHd>Qax<<{y6F5mEa72ft}LE)X<+ zY1jYxhn|gK{wMxod|vWdgtveY@FUPM!VW_&+!BW-ik)&Oiz&tSK8SNM#t=t5+!#m$ z7r+#Uw_u$kROxFFAkZY76u>;(t6#ugAd~U$LTnCjZBX@d+>C~}H8FUvcZ3KlTzZqL z#BaEeu(<0mE*XakmtV}>_YyZ#(LA4sq8d#iqbhIjs8P2t9T)7kfAx1cYx#F(+Zb&t zt)u;4Et*0JJJIJBh7FR&qT|!)7*Du9_U(>};4|+@@G-EQ;`v|Jvj|p3n{ly4XsV`; zr~C|wQz0|rj*Y_%YHmwsS@`Aqaa;MIffldn8%yMPF%_r14VsN`X`z2LU|@Zmak_dh zJt=L+u6K)1+jWnbWzyvg%3}~K-gM2*N=KBpsEcYA-!*kd)A4aRQCZ!azqFKQ&t_YPE*>Bi63Eo=Wa!u@1>9|Bow_mTy+*G#q-`UG-$Vjxg7-#%GW*5|)y4^JYTbs}D zy^1dAU=Wq+yb#4C``|v*Yh_)~<4EbpnzzfDZLGFTrrzd3?6Sch zgj@@DNtgGDbAS8p>e_IbA$}jjqF<$JHt+V3=0d)n;Dg&h>zXIO;R5m1cOy5EK>RvI zV>&mZtFOmnw9wCsEUzMNBE;CIg9Y@AtN!7)l!%fq2nj~}r{vF@?4$QLs8YX!h%&B6 zu=~;ezk9{TwAgp5GoNfJ zA4Ql~Z`?(2IpjU{z-MOF(c=6xC$B`o!dk6M+CWrUOPsH=xO!=-g2i@_0w;<&zmM)9 zom3!zsglc1igdP#n_DoKpRz)g%P%D-mBr8bFX~rCOYgC1Xl zt+n&yp318F6hzTZmkz#%uGgQ2gTkFTfx@Y*nYYm1y5IZ1f}F|9K00_y zkj1szCbuSjQLwTl)TNy$iT{29OeQRE|3rCZN_U%qnu~&=9{V&aD{Bq) zV32V}g6;e0ch6t8FIqDr-;K>x#HF0@M$QN=##czWH=a#_NNS+1%k}|`lLGUiQg(D9A^Z^ATH!&eY-w3wf7o0Bq$fqG5KE#$9QpC_jwt#-33z$CS zGTsrg1aL$S_;eJoM|v9~S^3H2I|_Am`s0g4$=DCZ3PWQi@-lCe@nYv!tCu2-svppJP)4)sN%;$W^hy5R$+YlxunWivM) zS@YBhcj{Po5|M{`oeeD^Zn|B@ZDM*(dEY`{&a+*P`4(9l&9a5AhBT3n#Kd23TEsHI zKAMx=wF257etu!V8Ug@06$D$-q97eUyP=qe&mN)f=YFlfN%`WMwbfd$ZMTol^s-^E zB1Ux;r-Q90VWz&THRM?1%VxUx%CeIi z01(ddzH))X#v+ViGvRZv;fPAuTDSykI40cwuI%nPHU*=74)#wFE(~b{Od0aRiXBqN zem_)8Mm@$(PCU9wMm&;EP(1?0zZssx6&nU(g$%vIlp3N3x1qe}2*`&N6VFY*a=gh^ z{oynxyu31_389`LORBl~%0ZY`e9A_I3i*Yy2`*ANq0wyb9*_PG*{?%X^tsP_l!3TtDGwjYACMFBq80H0?p zd2Jsv36M9BF@}2nuC!kA^UlmX+(f_BA)WksdGm4XT2jz@<5%Wdqoj5JHHTM!(67_u zFE7_R2Ch)G*K1p+%&$ckzJzw_SSftm@C;IjJ_@kpe}8k;IBD&2rh%EZm~)=vlBv_f zUC=1m`z9;n6BFG#0||@AtDoHNrEb5WIv)m6_rfVG;`1g>oR^*2g?j$&7VrNEZ0)~u z!*TUr6mSXuBz1I%xmY%F{Gwv^J{bNtas^+f2)^wE9~Z9JbyBL+AZ4R z$k~c1H?9QQaX7V@E+bpOyGng6GTDl+;1-*dtrOQ$fM+95_~F7z{z`80{XhJoV*l<0 z%e((|@F_lXUch~NBhY<{i8gMNtL}%vL9Nv<3%TF6v2qKz74qY_zM>zS;UmU{8pp`Z z+0k*kJknnuXo3R`aYnG{7{OR=v|#+iX9~EAbeA}Z5n!ozqHo#Zj!S6wY+s^2Sr+`6 zCt$L2W_yxyC=1T##|l`VDHL256|Ito&A5yCTI&WSw=IV2#>{*Q-K_g5EgURPQ}*C0bzZm5g+XQv#8 zAXi#u7DN)hLW1h|ZK*)QO_unNQ<08X5JZu#$0i+h41?SR+}oUX1xq%Fyj@mRfl_QT zU0^@42Fw7(z!bIyol^5-@!A1X&G@t2tum)_^eZ(T#x?fUdo3*%tJXicYaZW++4VIL zNNTypNb9e~w3I_G)F~2=tqz@!a1Rnfec7jv`OZ8@Mv(#vNaJnq`M?eKK{j zfDAL@`q^_l5iF2CdParW1s!!_(LPnUO3KV6jOrngF!lCX7G^7qUs8r)zu>n=sg(IT zxDQyL$d_?F5=|Y`wT<14=32=OFs7J!x2)u#=g2Ln_oSC1>!PosBx>*dduC`QIW{>? zomd5>n2)A}1?}i)e8=(NGac(_B_0;i2`55r$h%1w3H<^!_yh1Gj&904{y}+Lqs)IN z0RO*r$7%LQXnjwLU zw%M7jtIvG1yOwFBK3IKcw$ZntP78ITZ_nQgntPt)h6+0~{Zp>xb^Ehq>e9#8Wfp3= zAG=AiB-E6VyvkhK5|-BE{2lHY^P?bLT!g) zA9$4vPL)Q56=O83SAM%_3h+1=x;%Nl(;!H-gwXU7lnUupk{8X(BxR#@CDqV=UnS=& zW;lO^_RjhSQvx!>Y!KD39MG;UcXYXZ0_Q`hmtdRy9F{ul1pXP_y7&Q0iGbPqqrJ3} z0Y6~Wa3L5N07}(*nMdnkb32GmmNrmY&*Xc>aZHF(X;pt`9qx6HCApr}ja2R)a1?pA z+?tzaBg}_as}L5a&(``|PaE%FzZM=mA8hb`HOKP9#!bdPeu7rH>eAR~lX#h#)&kGI zCfS2SRJo&SyXulIXZu0_DU}c#J%3k)^J0EAR9oOASCMlwFY4#CJ~nMvD8tE8J4Sbb zVwyaKgaiktz~_U)2h087A2z7NknRbY{12Blf8(c6{*O58Wk_2YV;!2(YME`mDAc_i z^o@@ht|)aEG1N={?)ktY-QnP59}=*YPAL|5PAya_U=*>4C7zeOS93{5+rhSy_4-&3 za3@4P<-jzizMB*>DZwVSdM;AIpTVKVAxshV?Uw~~9<;&#&bTE0y%~DJ-yK~<&Oy0` zY@yoWfzUjqIR3HXj%SiwTKsoW7toR6b7&A+65%akm7gC?1oV^jgi^xEfdD6J0JBNG z3bUyFiAMY2k7;x*Rkx!%Z1`wsp^D2;jxmxxnv?Q}5}SWzbB68f%=)@?gSNKJJ2!GoP zNC}mYQJsF)Ss2<)`}^zKjF)QukER>a+B28V-H5I5B5}LZr+bvy<&{Xe;~eCxlawlB zOz4?a(v112jS&3U6hc>uFASgL^1S`=LY!w~)!~o1#+7-J(9!lS*oR%7TZ#qSgH%F* zfczO_$|&{e2esqR*r8SR#_(fautUO1KvsPy=i0_GMw35xz}pp#RY4nzZ|?-&@~Ptn zE@cF@8zJm5aU)DW{m}~GBeyngnzuEEU~ZGm;6TaH_*FzDUw;W60Pl|a{Pi|LT8Z7z zs{JQ_cI+=2Li3Lx5JnnJawso^L)Js{rNB_~+|sKVIMf8f0$_n)1GFGma9>SosIVq3 zF+(C?8*BI<7okGo^?Vo_cBp}YUV3((AHOZi_rs~Le!nYkQ)w<4`}}Ap=1{7GBc8x*y-g{Wrs1i z{xq7&r5B#!s*N+{dY1RZMN&}&c{A~EKj;=%8!~X52Wls$DhiM}#NJc#kMh;CbG;W( zBiU^)0|sJTf*=?pU>qz1Ob9+0ci|BkePWaSW!si7BZOiE2Z=KRM3O0>$w*6B5CQ{` zB6b--4A@i+z*pMM8V< z?s2f#JXzqyGey0m#*xC)6CKB6r!RPT~vdTcbYV zWNWQ=ZTmsNtxd@tQV%ZZnMg6T<8Di%<9losO?`Ef4rNHwxb>74?t(9CxREVw~6LEJ<`o*|xJLvln!mUyqZ~yD@>jlByeb#)JOh_b+bN zZtycwG=Bl569(X+I5W!TB1;W9=0>c3IvW?kn0Bma2 zZJO*)aEHfWKwS0@xCOOxadb8ntS}n~xke3w*-!$!*#Kr#hR3I|`ZkAQfBGNVQTM3M zdzt$|jwJGkWu6RDaG-kNu@>B-`7W zfZVD6yHylzz4RxxwoNH5k*UeR_>*#2w_u&na9ZTnc!>(PhGRzho2wC-^qAX{*_;Z- zW&MJ~-8!NP?)0?M(JkT#7X7MSPDlFPpfEZ-)z;`HFc1R-fIdRcGh`bP;kp1H^l@kr zN!3`g|IUMWbA;LS??4E|OWY%B^of9QcC-x{*3U>FY+kY2J!M4UyGhUqYI)EE)p^@# zlxFqiIdQVpNCmgKa5vjI--xmHNL;VgM26P}g)?+fu_CwCtu)QjLu*EQWlcwaF+fS8 ztok%9m4e8XQH20U!D=LSgop0C0e1$6eSz+`P5~y}IlHsR93)*aQvvzz*>&9hFK(sI zv|p$PW;-+?*~V1~#=cIX)0^i1|I^q15AtMm=6eiflGBAUfUu$LBjHdD><#F{j~TJ8 zzqru9DtAz*{5{kUnFk#O4Dz?jhCyp(WudG9YzQzr5JUV4zP~UXI>~(PWZFjV|aYKQKXt!20WiZE971Ku>t{)2{v-P+8UO$(b z1#U!5^mbrr*)J@Bjm9Y(QViGSg8p8Ok{3%E?yt;DVbx`Q7f}(KOOG7q7O87TeOUI8 zoGf%EHP!$Y3OEOQ6|Qy}F3varpqJ4W!`nIFcqsU^ar!>&&`F>FJId*0<{8zOyu|s+ z<-%6i!}YnJS7#AYrI+&-Qlo`SE+XTLuV1bECO14>JKg^({d-FPXwwP$FMqDU%^D7V z_AmaX&6^US=SP&Dr`S4iS;IxrMY8PZ{CR>Af`A>UzUEjaNRjyZ#nnzG%bP+g>iaz% z@mHyG-EILEO8gU}0@_#F3A$BkX(i9zD5qUXTU(^7`;#(6K_^&0m*WG1VC?WGFeN}X zEC`_ty95L5KBis-=x4UsGe(rc?m%#u8%PRfg6_Z+0|j70fO;4ZPMd+V)lK`^3oTuX z)|MMQyu7FS)PwqqIx`QwXjswnO?_9}?Jadb#*;Glf+5DxLV_lBu|v@+bN@7~QRmyI z*Umxo123nxiV#;)HWVNDjZzK6B0jTjUS$L^pL`IXBCX0G{P`AADq+i$Q1@uBh8mkD zZ8axmhsibLG3rVOHMoJ!A6Bh#T9Va6dwUkA8>HR(6^g7+KECtoIS_SR%{UnmI+qA? z_&{~#BmzJBUC&S@;{QiVQaq_+&efEQs6OW6<${8`wR7>5%uKJbogRiR)wY1O%VO@f zTe`IqS$@i-0ZnB~R5lrZ%{=LL%G0LVa8lbOrY;@a#ovvO55AuGjs|J`gw!fM;y(I{ z!DOuSW?PTysMHRNf5B35JBFdAq4vM=`+xkv2(3H!4$6*}<$?}bLe;~qps7lx`~$@r z&&oLa_}8P9pr&XUMj=22^tD_eKM!C5>I)A*m$|f1EI5!5Kw~|8uy15@J&3*}8>LSz z{*-eI)@b6spNn|L&yb!8F%OTqHWyqFAZENLC@ZTGS=`$}MExqJTm)OS2N?xD~r z#kbG=_olSWyMX|_PjS`HEskB5qqoN}zft2){&uQxmk6C5QhZ&toXDZ?n!Q4I^5JDX zC&4r+dnd?&rI8N1g;i3IE6vIH4TU%dzbcSPg>)c;UFA8SH`&F_t0$Hm_5GJNqW31e zXf?D!Oj-R{g;&0k^iecyUhNcp%-e5{X^7JFb0>^a#RcQ2-<8udkMVwpKU367Pv{)s z_U>`K_4OIFSv?SD`>y(-|6S>1ZY2%VvGT9ojT*6~I&qBfs6|vI{HOvnJO@Ts4e$r`zwlU$dnC0?k&O~1aCeVF66zcFEPty*|L0J(> zBTz(BDcbF>IsREWRK8)$+5czh%|@H}eqWF^FT{e_)3wCn(cFDNpS|BW*ZJ|Uhu6(+ zyRHF2)1Hc>xT|ZV{Wp1ggb>vqbp;0$c`>L=5rYkVf{NfX*mfArm?J^S6jv}nHl?)dfb%Upzq z_R8}zom%4y28Ik<2@eNs>`WtjM5cd%oA16r)LW8=cOK2Y;@BEv%oTgOnvs1M;)ssX zCpbY+$DEyEt%-6YD)|Fpt&Ht`D^gjLw>vbCxjNeGjG*)YUnmPQ7AgQ3gX*Fc0rDdr z@vkpQ$e4Uo;D3m2i8N|6K18T+rGr$&V34Y3EFzu*y_A=L?~blUZoTJK|auv z+tqQ-UbWeYFQdyb#})SGH{IG>AE91Hc%8NV%G35|Hf=TQTHw&G?%MgIYWbJrZuK() zx{*OfV`ADXiQ39LALW*I-}|dZP?8nsdKFeQ!*?a(E`!UFZ>h-Shye@Mql@q(a1Me2 zLk^LM#T6co*Btqkdi~8@&f@LBFir9W6-mSua1y{Yj>9Os zr2G2&8fkAYo;IRTd;7iYg0c4P71ygyGr8@IyW~A9$0D5|(+g|MozK|mNi}D*tY$XD zVU(spiF?Xg!fLN7G7i|h?|;8;?Kjr4>%Lw4vgI9Wd@k5YJ9EMF_17v(V=Z)@M_`J& z_k{^vazY<#LQZ`yOh8pHKP-QwxRdI|mPJetq?3=8)T1t9^eY{X>l?Gn{e&7raP_38 zIN>PFyTUvViDUvXLcmSWkjPrBSO|GakL++f%?;$Gc!um>{2@3bili4gqD$ZcVMd0* zhg-2nA!fx-k;AM&Bn0axCK3lj_CNLS@9+QN?{77lY==BeWL*6A8^4ua5wE{+2(6z( z4$$N+7B=mkfPU#|F#q+WV|CyQs^axh_TTH-maJUgfS%889i>j$&0#f(C9=W3x%6`6 zZIreoyYL%!PQHG>2aUP zldrWOSSff*Qo@nD`7JI?U^x=mJ-leUOzZ314$|cqxPC4B;lRmw*D8;sj>-PT^F@Zo zE(w*o$4#u0MouS+ROVu1g@7)yME;*V7J9nHY0HXs%|Z^>Z!M#KLO{gK0Hiqh8w3yO z0v}StFNbiJ6u~F#a}0@^`ltc#^&a&>gaNDYVP5PT2oE$wb}Sck2Vs__10cNtmH@aS zP!?l&3d|S(Ih^X#T-2JCxfz+9K}Sh_lOdaAeM!amiBnBc{8R7sp1@)zY1NGK z=UlVtdyz-EiM7v3Y={41^9PY!r6pD`KS^K9wGp3rT{A;}kZhAx_AUD!CGlGL`uWO5 z6~P?m>&a5`VO?S(MLWhBh7^rLHN{XHEy>g7eMcY7tD45HMg>hfebNt-1iQUsu8rlj zo@8pgaCwBDLmsX`gy3Q&HeK2#r& z3N4m%;opgKmI+PxEP#i=g{I0jLz#vYpd@muP(8pZlmQS515s(I0Qnh3CPcGN@aQ|?M>lN|M3Z>U7SBz8WLLH|iYB%wZbYA(HKLMu1D`=M z`UiyF4zB)=zZR}X^{NcC?i{p-QAC47Xl!SqtyXO7p2R$pYh}yN+nsRoC&AIc1~HBkmKdHg zo-8RlIW-@a6hH6bS#xl-oGuePDJLa6h8U+4h*M%5kCAp9j3lZAsDcqNfbrWAezbDO z;AtH?WT37;#RRiNyeOsr$Tl3AMdXf8`s2y-{3Xf+zMb(^E|D62E$HZdX_(eZLs@;N5?Pg>?J3)aggM;*^i1Ox=?S#r`j zapL{V5-qY+6u2W#g(wr{muorP97=*Xn9vI+2 z1cQR*lE6S09wbz7oC%Cesv;{S^9~5c*LB>6`pGwgu}1&l_atdG??3xj%V#G4^d}$J ze7n)8dJO(1ZG(HYdqWC^=EJMO6jDGKG#rTyLb`#FOyNi@EGm-iDdJ1QcK+X)3K13!LdB)+J%{YGnz+y6R^4v0d7bdE62r9!ZS5ec-y*`s1L%ZQ4RrYFYk??o%rn zHLX)wUU++oX5*&lAvqFh3i3eGfIlJ$u!NB2ct4Tz)RDuAsSAsME{x%2n!uq&ywRa% zjKtv=pyDwdfax$kfXBx}4x2hV zo9B8Zr{Ww0E=)4cvDV@qKc>Y>&NCc#(3MS#PA!n{+4PS!kW~8teM=w1Wmwg_4KV4-ohPpnBba#64uoq# zWnLGzXa*1y1bl>?0*DQn0Lh2*LDdtJgv+QQ(x2}U7;VFEFvXBZnD3GP*nP;?U_T@| z2;cy`kOgFJ_(ktunf$xgQG>O2bLm)PpTo5~1fV6D5xfIkVX^J?oKzv#K~eQXVewur zXEoh+oda`E9?nne-6bOMH_pf#1a&-vcZ<#*6^U=bP|g|eHYy5g%&_@s>z6Q><2WS@ zR2{z)`s!pwggi*hgN_YbLZ!6FKN~&D9)2N~;FW-X>31zc>MGdX)4_?`0R!IXChQ82KK!n2H6s%y0?3Ay@+F z;s8^y)c_z1Zw%3=r33x{j&zMWu1&wH6;yT09nrFyv>2{h&b5!&4LvZ;dS|aM7+n)+ z6qEfzp`Y2Sf20wzNdJQox>=X9wf3KRpOCva0 ztH+zBp_IoTbtLmJ7S^0}s9AQen+1!RB>R~os9zMtSPVBDGjrHSX67FP*GQQvL+D3t zqUaj^6hIKXJzx`2E3l7R0R-bVz!pqyi^2&a!?~Tx*re zUy!vgGx#7kGH0xb!9CKxJ@B`kS<6CiHtt;*?E=k@-^Lwg_KgGjz47ag83rM$v;|ix z)cl3wD(5@XAdIQ+ENqp`2NI{yf!6bW=ivGBAca*1>qXY&4)#vnBJp}J@vVd9E=jW> zdPTVwU9ldG(!7{la)%NQAe%LWwTH8VXBP3EJnpMIv?b zND)%TMq-Q;9FaypZo*TBFk)=OSR>&~iWO4#Q$LK@iaSWVR~2iFB8A2}%qd(j_2WB1)==a`?XI_w)04|AT$)Yp?5m*8S|Y zK20HCMsJ+n?WH|;IZt#GU*N1i*LnAs_qwwXG8r<~-8fn6F_ddjw;tzfEG$}lG^Fm4 zaBo@tNj1O(?}NQxVoFv;yDds%lV#}q)?OK}=y7yE4=%88pBsNnj6O1AlX?!=a#~6Z^=Ln(a`xaNZM2VgVEw-U6lOiA6KdY}`ClMN`Pq zth!IM*HZK}J6uMm3iLeEmwitSC;ZcJ^Hh3^j?erY;K~@6U3cSWOJzNL?U9eHW%8cJ8uj9k(*}ZHRxv zmE_lWWjHvqA(zdG;RHGvO6gUu7L9m4gk1thmZL}h7+eZn%ynFr<3*V% zXj2U4#tIt+(uQH#v5=hLzWLuF*0EkrKLDSO zc>kWB>3k;+ckF$71eRNQO%N7VSzl04+ZX>tgp|@>sBra%ZsKg8)51&H7CW4R}C zs4p4;(3Flmd93C933{_O4LpNfHnYxnQC+C-wQ2t*9v{;F>)-S!`fdK6xfcs*v$8vL zZWOZ^Gujkn0ZEUf>7WnW@#*~YxzplGhV~UJt%i9JN!^fBPJqwPTc%yT53S(j(y7M* z>_yJDkgV3&XJgAJW;fl93r}QZ?~OA0#Yc|?bBn4)jcK9kL%0=s!EI1|18C;Br`(I! zp8CbgVF%r-#DQc9-kRG;6|{z)vb7&n)G(phpWq$)1_3#SP(aAsc2uj;AO)c<(6+=J z8w@Ptz;&P0FY6x_(+pEp0E!9@AAN&c&*BLHbfsN%&2dt+9+?C(xM`%_fZ531FE#ha zJ3~~0m;ZduzAwCI5!4BM-tb*-y?Xph%CL5u2UP|X9!GcK0FA>xM(7Mi(`k|l=MY)l zB6d~wrgpy+Cck?2DyQp%jnQh0)USBGvTjI8&~LK__c$NrwOFG%y>YZQKMe=MwLuwK zR<7GDk}kpwR9w`FdxizHoVJ*ab`uQJdY!pL$sJ$%BBcw8%L&>W2N#jxp#hYXGFZ7` zMcxJEjM9Dhd#}QBqUCL|1YmMuNs-&O;T_cT`{6;k(yeLytYvB1r>*9y8%Af@f8DB6 zPfwp^41f1;bA0FGaj+#B&(P{EqPcti3!n6aXy|$QShhw%=yvt-@m#lf zv-sG^ded*;lZ_YV-0z%Rp5}Qtf8szkSo-dFtMA4!Y_O8Y+5a44uXt@iJ+pth+%N8=Tr^eg}q{kpIMq6KsJj8!4m;r$D z?C1J_`zz)1*E3WN7wid~WdSfr&`mMqU z9un>%5HDeFd#RQ9_O#o;$o_n#CTY5F^utH(jW-G=4ig3}owt73h_X4sHb)0eP?u3X zo5>?`YYJZVN;OBE8>T0>Hpq5eR}wFAFq1!r$Dj%avhgq(Dv$Txn|G2 z9m`$o%$;^y`}A~?q+R=HnXa6mqb$iHI6NB}=EH+Xj}npqtTI@;bn{M)Z+dY$@l85a ze94XH&&?q_WNX=O4#D`XU7Vm!_{127hG>t!nSSC9Nz?fJ&LPp&kuhb&8t!6%590IVa@-Sd2 zy9F*�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 Vv+D3{>3>iD=>PkG)c?i@{6F~QNACat literal 0 HcmV?d00001 diff --git a/packages/backend/assets/sounds/syuilo/snare.mp3 b/packages/backend/assets/sounds/syuilo/snare.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..9244189c2d5e5c0cf1064196e92b0843d5dacad1 GIT binary patch literal 26121 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 a)8$4=|A9+jMF9rI4RJV8je!V9sG=i-g&1b2 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 ca+e_sUe;65SCV!Oe?SHPFS{5+L;wH) literal 0 HcmV?d00001 diff --git a/packages/backend/assets/sounds/syuilo/up.mp3 b/packages/backend/assets/sounds/syuilo/up.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..3f30867764a506e3bd25e3e684a838d504015ee4 GIT binary patch literal 18240 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 literal 0 HcmV?d00001 diff --git a/packages/backend/assets/sounds/syuilo/waon.mp3 b/packages/backend/assets/sounds/syuilo/waon.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a4af4738615149461e0ab1bf963e6e932b69bfe0 GIT binary patch literal 18240 zcmeIYRa=`+*!G(Q2*Dv(a1RzBXn_I^oZ-UxRXcvUz!W?lro#e}a&Me@QB>|i=FyfMOh3fBk5MKfs7`d01wL$CYr?+JlN?1;J7TK3OQ zT;?Rnl@1f_Q-2AFZ z#53O_&$<(-I%A|TU5FDs0I4{HL3-nRkRZS_r22Rok{!i?ya#ZSS=E0cjiLH2V>(BV zi`L)><4WX+JNgBQ>~;g7mKdG+~cluu$;5m91*4 zIsf6oE-NBO+`-%Hj~N_OJ$5XqPF1vSoBKy|q9Rr!0XB@GT2XY1cRgliURW6lJJ!d}Q{vdUz%vQw{@ zYpi+~2`jixGG@AP0ZD`-`qIXZDK;CBKc*5 z*Db5BTG!QNapoKu%zt0M{rjK+2_OOVg3W+CG>oKe^npNYa5dRyH32T_iWsRUH2WC( zrBz;fooq<6N;Q+qEs`5QX`J2c`$swFEClFtL}ExHfPugQ%0SR}%D?~k6{5&H4AEeH zhzGq|glK$R0@yO_k}jUp=xeC(7XGemAgG1|-lPMT@m{2fAj7U4qBTs5xJ) zOIkWBWa*GoMBZeo9sMJxL&OpzASP1cDr=(ee%};wato znarS#)l;qb9Owf?uFZW@5AGHW3)P9~RHcnzDzVBxXI@*PbPFv&{58ztb;FEx z1DD-mZfg3bAKT;Rj&U!|*Y@P^5`Imr3aBWl1EBxyIi>`_03|4Bs1N`cb^)Nr!#9cJ zauir5&c3J)I?*^zq2QpnhPQFCVI0ajYKsRIDt8Q-Dgs6%3s(tS89wo6>HG#yZ`jMrQ za8XyuXQ4Jcm+(K%kt~!jFN}lLX7rS8j+<|7*kO)tTp$L(bN$*Hl4sv8%+D*haEy)@-@aMg?RNJ1 zZBw9d1*rqI%&CIwlKBJR2rO37%(d!;f-9J2)?{BXgwvZ{Qu_T<=d8y4J;ju+CtE9f zPI;!M?{hOhmxC8^I!DVQ2mM5tDwfRy#!y8dm({|4Y?@ji2K%T^I8EmBWGxI|tujKy zgMQXh+j%W{YYxmCchT-r#KN+E@_BM~y8r-q(s;ZQ6qrg)78Ruf*oy9gNT+5zuZ$yw zgvO_nO2=xDSH^Ghde+jOCOzHZ_DtBI@{chmo4#t{1WZvhi%C+@QUUnad1NM9jt#$I zL_2vP%s>X&1UKHaTwUlm``l<1)p{Dd{VK{+psj0C}rwDrF;o-n{_)F?sf~rR4ZQSqLN>AaTaFQJ1`i5{l z`3-9g^?k&F_!Xar-&LAYa&QM)&NBYJOHtT5r!5374tWgOCrdogys6_P(o$}Gse;iQ2{U19)Mi^mwjlz&uhC#g4p7N-<3HK;AJ7>Dxl{>b~QSbrdW8dpJV~BD%uGrjO?SK*Ori*AR0~X%Z}hh0 zU#L@thJpDE%-d(7@odrL=W?hla8=@nSFh=)XmyGgPuLW@F5_Yr0Y9zq(-wkjota|c zRK9N0AO2n4Fl3sda_+&O1mcp^YthG2Oqk?!=;$k^1yBgzRjH}_Un3Mrj)EfT@C-=S ze_jTT=R<0vypY+^5;9VMM34?35#+Y|G*Su_j9k+~%QhqlDClcAB7fj5k={dWYP*^l zeDWkD>~JIllqikt?n_)h8uzto!8{y{rwUwmqbXQ*mb=S%Uihd=FX;H>tr~Yv`qSif zwpRS{rd`l$zDx;lql4#3Am(MHW=O8%bvER#lXI@Cw&u@4Q;dH{wI0GsRg6vLaYE;h zdUW4^{92@K&V~(={B%}lyJuDL$j5`D^zfI&Zy~$DfwytbYnlM9U7tS}g>*OaWMS#1 zMKpkwT&CJ128E7%_Jo1^HSkmtjVe^-Dk0)vR}>hhHGy$$zZkelfnc7`E7j68^pjq3 zeTyI>1_lM4R~S5LQH0i*R90n47E&PRO;I{mVcH@7?$M-5q?u5a$VJrz;0UAxya2&L z-+>dPOQdiJkwypVr(LK0cN|Prp$+ChE5XTj4C~kvlfc2!f^O3uSU8U{1#?gB;fbT6h8At;{3n!XmhjQ21{Gbsnqm6QnaB8dgl zh#oc81V^FhzK&I5qUQow8T<5IE?ItlO=_5i1m6^tdC5Qez4piuULe7h@2qBblhm@; zUk*;`(xuJKWSvM0VWyUm#W8yG-b!PnbIsW&*CG=jF0(1f0dK|I+Gs~d2WQs>_pxU)pUV&{IRwY}wXP`j%`u-;|*vt(_qMbAn#2pY;e z8~4h)n^~2^*0el1%a=AA>LgTTNq?I(ffZKr9#$N?fLz3!s~&yTl)3SNnB{pkr8y&0T!?xp(2>n&<2pKNxO4M?+1OOwd}EowMB-5ko3)U!oGNRcPP!^xs5&luW2EU{b^a>f?bO<>!uTQ zx)g4qG4%ykqsm2r$Cr3c=7;dqFMU0#=8cqM6?1QSZsbuhTTvqnE~}gkaz}%b;q*hK zhoAxyHxNBVJjhQ3%*3m&Lv8CHFRtj|#`2y25HuxFffq})gU(a4?s%sHd0D9`hFI7d zOXu z&Zrai>Lquh1sSuk+r5n9S+eA&coz8gW$C(^-G1$VtqLGY!~p#7`)>>ZfLLmcwj2;O zU{r9_1%s7NL(S(%VMvK1fbdktT#lGt^fUvsi>>9Ewmc^`?oA| z&>c5}_^0uIlU(Ni78P=O&(4mQ9snQ#;(*9dcD^A=!o&a;MEq==`JBDHI; zOfR}Uhv9MAfBdrH$pL0)->?e64y7l}qB(%WRh7=+2cF8OzVh_BF_0&EdS%p--94u8 zN#q6FHZ@2fV^ z>dD`C`vOkKT8##@kN;i?iq}udrSjIsJdl6i^2F5Z9^W*BZV` zYWJSE$Nvv%@PCy)CIDrrlOWkueH?&>6o8@!wd3I=%Xl|1LsT+zW#VnW$|u-v$Mg>( z3~>`QHc9q3rU@a(TeY<2yJ=xOuFV<6uf9=xilH%x_|m&Um=t-`o&V7aCs_2^2Q8JVh^q%b_CI zmFq`g03xg;lu;ygOimHW1d@HRdaY$XFTgIkSCc*o9m%1@DO+>RkL9@`nO&z7@0kyY z67#zbnU-5Xyk0R~b_q7q4zdv<4hKt!-E&a=X#+m7ZRjw>X%q`qDKQ0o3_cBOl#m>2 z{c_jwq4-yAT|YKqDlfXmp64h1AAdaiC2wYG;g;J10DUX~;>lrPUgiP{yaDpxy12Rt$yz&0T*9FSj7`}YNnRxXXbw5uKBZge%LzDQ{tk@diWD%n9^`?z&qD&*3 zVZ8P3RNAYfq)Y-M$PVpt)Cqqz$+sA2y}>T!RpF6hqm#li;Un!>(_ND!g?z~@w;NZb z^4hpokgo-DqO9G5Zhr?;GVpiO)nw7OwC)>|hA4wM#kv4g&v0M>Ck}?U#K8d-xLZ*m zoF}jgH;(tiO_6_h{aYICE@QP#L5~|Ygm8`sQHqRrOxMglVJa9EBvTot0Ujw*nQ$er zyyuD^t?_#2=D*Hl?vd!m|N2gY1DCH(<&17~TQu85^?lqivtYc#O))ldQL^D0h=CyI zr~c;0?uaH+%_bGzmz(FVUc56zS7kQm1pXU=Rd5{?mf|j7cGX;QAZLQ=ytB2(U}IF3 zgeyD3j;(DxK5HXOaA4HOd^MgW@l&uy4k5lvfOyQ(%|DrgdnZ4h#6@kxY~%EvevJ1B z=2scTN)14gVu2M@sU*gX|5|jssT4?sIXYB+syzJ(wi@KQX!y;MI_LsACxnB{!3qA< z9$uW-+q}^klEU*sWT{~ksr2+wQO9^kCxCX0jn9W_(JVRY=@yIEcT*((dJ`J*G3V!>^)4OFl=1*oH1{GaN=Oubc&JJ-(|(w zMkguE%-omJlUPeYb=|Gk?mN+%=e@@kObzM90rC7e8h|~H9bbkM2a@72Q9ZaY(g8IK zm<^j*;b!2~dZZMmVBf8?5{o~2y5*R)?3QyUBDmzmEzV|vCrYlwA`blr{%*9cyb=9kR%13%|0Wizfx4~S8Sk-h$gGPt1Pi-3il)lnQd?ZfQ!%1=_Q-vDZTE#nTO1ztBt%vV{o%9DD$OL$2j_S z(i^RpqX#tQh2Mphc=CF4CtgXu#4yLQi)GQHUffVfRS@;>SymI#n-JD^f8kmAwMrc- zkA)e>@B-x4d^MMsK%^)r9%U&A@EDFED;Vz9E4V;1giI2sIEO!h6^DvR0OJp%*XB<^ zoZJ(IZzv0++p%1q10M#YfQH#VS@(n&n=i&AFwK%La^{acVRblu3HoBR2 z*_;p!?(6GvY}ZfgNxIaqlvWm3dul+}4TWSj;znZW`%aE-GOUS=xoawKPbZAfGiFUUsq34)IPb=gPL)+l>}U0m{D7y^#2;JLRf(w` zDj_H0Ht-~5QFC%k(!FDIWYxGbgSa7Szo~E;+-fm0f5a523D`oShpvzxvV~>u0_C~s zJH!XaZRJmWh*}Q&PU0Stn#l0pNL%Z1g_qI%!j%lgQrmL#6 z@xBiXuJwiO9%pVF&$67K&kemnc?Oej($n$sJ0b;zUet=KNc{FF(u2a8x!pl7T`2HM zZA3AI}Wl)5sT8e{EuHD znvJv2=Tx^bPOmd=?0QclZUc|L)BH}*98%>0K5skH@K@r!y>c>rTdzm&=FQ}DME~fZwSI%Upw!LCO+vv#lmy=%*N6=X#%feUmY3Z7XGPhHpkF*jG4j^FY`RQz{3Fno79r!4I)?Jg5q=#C(z_@d5lX5Y ztzc-T9eqv=L~K(eG*3x<&%^>(H5S*Fw0B@`RHPAAJ(m-`LsoYO<>49444V~=4~7}= zXR%{6zZX~!X%s+rSm^OHxGAcKu7M=!ILm+jgAK2YqX58cK>I}ASb*r(?9be1kq_rp zem=EMf3b}#G9{apFMZ=F-1WyMx54$USD$xeVAto-zLrv_t~7zNmpw^SHl_zuCeH8# zD&51pj{S6{V?#=Eafn}AhDC=nyUFJGr|`%;8?##T)Iyn#a|zSPsgvh8wf-^odJRNQ zLFkl8i{ecs%(!f@msOKztk;UTYJ)W%CrA=D^(7%Cf3jqol7aVOU*F})<>z@Zjb*ut zaN($(Y=&#oKf~NurRV?K^w#7Vjob9^&;l=v;V_Mo>$O7ug0VP;m?6dj;V4W3AgVZk z@_5d}bvz2syBE_j_N=_2-mM)>*qD2wnT)i|G!h)K#y1A&3d>jh55F1TWJ1+Qw)OcB zjs8VN7#DksgYR^~i7Ckg<-iZ^3`so^C*<1a6-l|p52tk==eU}0=mnG2befsaB2q^- zLpPdYCn1G8#wD%u_1PW4GUBLaZC!mfEyEdE&n(zqc=sIaWE!+j^A;pfV;}Eag ztLXkfb~b+;4x(6b)-F|l;@%DT@8iE*n1i{9Pn zPYcG!0X&i2Ef4Yuua#Un`drI`9dfvd)d>VOZVgv9@8B#sGIy&LMGMEMel>24FcyJV z;jzlgV99M)66M=EZRZ@xyOasDuyoZe4`zlb`wg2O#9PT*_EFfm9K=G^J(f=y%_-jd zqzm;;&Pw#tDr>Qn452}(wCY;p^bV;VndtH1&;MSYz=R8ehPiVd#A!qslZB8+71Bd3 zXX!NF8-y+__G}gQ$DLUeH-C8fXwTzPKzx65#p(5X#;!es&LhK7_f+d7vAAWv=fKr^ zZ&sQ7EJq2N8L<010?JRT$lL@t0Uo9SkVr^jqiinu9{9ACso#)Xd3%atMhO3`89R z$W8@Y^Q#H@)Tcc`^ArU^kuQ3}*PgnS>I%$C1rSDN5_?Mn&*kMtOro!|3{7lq=uK?X z%4Il19{hjNS3hQO%$*SX7o#;rpH(qLm5ored1_46Br^^jTg~J^(LvpOuN0z z!i+w6W+=W`dJRrbso$0swN9}xw#cQ`T8B49=>&Hwh?#<4lX7OVtTuj`3Gp8_k847r zd1VHm3Z~h}DN0ifUO}BoHaUT4yjy1=Y(wV5)~X!barxWrt&gVXMZugIh`||6Dlz`O z;Ki=BRSF%dLyVHP%WH8C55*PLRQ`dvMoC-SN)$$Nqj+1FP<{4_Ek+y>?~U&F^X%bG zb67JNK_JzIEKq1|bkRWz-(4+S2mN<^$AMHBJj#G&BGdw_{z4qY?lWmzfD)A)Q6M)L zzR9Q(4DBxhVt{NLbDIrljv)E~Ejz=idynoL|7^mULtXZ+f1Zsy=PG*Dkp;8O(WV(o z{1k_F^x1vAQ8t(t*S|Fffv~ewMTzWw%VoaSURN+dbRM_;CN{n361QcNNlJFgx>HrA zPJEKocY?kysI(P=p1Eqrc)b)K4>;HJ8c=CWq!dbiT={7k_ZKeet6@gNkWn3dzaR<7 zS+>alR4ddx3PeE%^j&Mk9u;}tT*%S-sYRIueL0w?nqu< z58GtY>V!AuR_|ENx3oGI>qfs;J-)rv;$b`k7fr@IOb!KCy@9`P5IA&-^T^R}&t;)$ z@_EcW+b!C7an;Bxk|*{oVNpBgS3zwb1y)W+EuCW9Nsu%kTv=afMBlV|YOGELD;KT& ziFmL|DPV6#U1-9Isc6=3HB2QoxQHxdl=X}UFx4`zIOgh6lT2w*e`wlXh;Bk6ZSbEH z+WfWUbGn8-)x|sfHM~QM~Kd!W2xvz~YX3T^9AlYvuGbymno6h&^ZFrxK{jBZsOo#<( zZkPp68gteJ)l#M-l9(2?bCcGUo!$`%Tq=3rEY984Eec?Wp)k!&#j2tiTU=K~?v`Su z{CE_+?DiW?o78PSU45hHJpD&CnOPLr!TL zcR}~*D%4C75c)2&z4qpxCgEZH9e1E9Ffm~aqt>2uWt3^0E{j&Od)3U?NvU+e8k)9DKlIJo zhRu6gkbzO^8n06G5Fjfi6A=8ac<}?v0e!fpp!yjt8dD=r87GEsiNcM9nED$UKlR5w{RML7l+-w4^k)wISt>80L`KvjIde534E zG05bn_{kj}sinvq9+8+l@We{bXEfnMjSM;{dNdf_zZy8$(A>GeNm^9SMnnbL;DJKq z{D9Nh8|AMgrg*=`qhmHX3E5~b_D$tXUY1aI?)#sqdvCxeS1TLpd@%JU(exg&yrZ@9 zwN73%?&-yy;lVzN#V`1zk8#cUh~4s z)VDQfD}nAc+J$gT7Jrf%Tqg)1-7{VKM7tGB?<*l+1^8C+w|L@yjoW36v z9n|~f&xE`p{y4iqxV-)UMi#W#ZcV(rn|v00Gk!C?E$6U-s%>EXfkfLIywCpAL7+HE$k+STd7Zt!OzLd(DS+6Z;x zT_svRF_?KC(^>uLK-nAZX~DR^x=v%Fw){atGHcl*hmrbW%P*OOGl8#;rrEk@;Y zKEos}zPJAU)tc-SU*2tZNU!&MNp~Mwvd;hFh0M8Qv;C zCE@`Tt~qd@JVK-WtMVIhW)nP)afxz1TLEi6&4#}upT%}CxA6%l9dQ{1Y0G|p(V^OQ zKj>jZf`KQESXD$=*sy`;X(|yp=wQ3Gbzc1=&X|=Xf&Vl|(aEFjfK~_8-4v zG#lb!YJ_b^Vmcz+KZg_sh zPL4r8bOt)0)@IVRmhABccSe#Cy0s8P9!=nH9Q0Bea{Cc(#>A&88rWtCDnDU&eo)>EzEwa z-1mjvjCG~UA^NTM8E3`o`Yl-=dj015El9&C5HBUnp9WYR*&9yBdpv*bu&%5st7*`2wzY>ZU8WbQ@!01jGpF8aY zd2NM?%IzGvsB-5_3cirDf5I#TpnTz_BV|{bly~rL`q6qFulz$ce4mz3y42&K{IH{4 zrb|?teFuXJV2N;1X|1475o^I@9F9ND>=6WV>^~bxOGXDwUFtMrMPK9uKLXun&3?Tt z6i+3TfA4F*<4CC)m#egOPuN&}#OPh@*VKjLqAb7k!vv%G^)L>u(yK6?=M=wk$_Sw&5#jAh~4Fs`i!@2W6UV&BHRe zIyFtiIoD@wESe=5Z8NGWCw~GrN^jZZG%78(t%5-;X_kC9Lb6>ncSqGQ#d55wS$Hz< zZUNSog|XRy@Pp?ktMu&8sfX;Vpp&dG`t=8c{E|Z|tR-zA9RLq>h;cKAQ0$0UvWV(X z@YG8vAno$4qt3XXl1oUnC7kJWM)`TvO{(b+=g?8Itl1|&9gw?*4e1>P&339zX3rdZ z>cVy04dyY5x`CSYhbMzH=?mAY0(WBn)IYt+-gX$MBNB9(oU$OcrpJ^Y3iylD-+gD) zGbY~$9(l=}+22f9Fpv74SY^^(m>Y#|I6F*5r*BmfbJM-vAsRPWDOz-wjrV`!PYuhP zXDm36Ha%m2R60%c#RHfQzKh-R|M)#gd*Ksydz%f21dGL0u z4{}LxzKE)9slzREp#a*!7Jq1LCdC{!-BR|b`FvNQwp=kXK1XsQgDOGX5TakZ;crsK z{vgBht)bBq`s8W)Jp?snBP+)Nr9pvFYVK-@qGeE5PdSYL%D>x8#2*_Ax#?wKA(QO-=pY8 zT#uf~Ro<5iu~)M7({PaNOirU;9SH0B5fIrMYl%)^z~L;6d*AY!`iw-lw3h6Sbke~M>p=2`f+e3$VoJWqt&G@g7^he zXTwQY)ZNI)So`IXojXk?Q;_epTr~QvT%4y4VoPf+i{kcb8+v4GC3E9b*6ubb$UGkP zY8a&8h!T4Ys*aNGb}7iGt6mxHut?L5_BT<-9^`0oG8a6)U4t^V+| zYf9(FE$iImy-*+brr#7-pSBq1HV7rmIYQzL)ceN7??-KheIFtIY7a}Y)sKOkKxqS$ z5LA1yz*h7MQ6HdJ2?8=bCN|qL3Yn<1Ixt2N&B0dmdTX!RA z^Iy4YEoSKSTa0Y#TUb|~X)?C2sXWuMc3WmMq#YHzWpYBwyJ>?Qlu+&n;uhvSZ9^-% zMl?f(%QoyruIu3K-yDo>(PYL%u+#rZ1x2qL`b1e__Hq*SJ4^O5FjeL7Gxs z>7&CvQZ@XLB)|XtNbn}t%MPzNOU=4&+HiC6VBM$>q{VC}e>EZozG{7vuMsA5rO+GG zR9q8NQ${ehhL3O>mDdX{g`so-STpn6^a!`9ueh#8=n#~M!fT74h_l2_n;VJeYwdW^ z@CX#a?PCoXw{EhCn9gKVa)2l{3RmYWZV4GRnXd?Bj7=EdH)GSiQrC&BCckoI`D%U@ zg&-=rr%@R8I^WY7iA^XMQ!ov84$kClva@q)qV$sGn~Q5OuqgOFg87f%qqG+qVJex3 z$crN*-7KMuXPoUPSETK~HS<(&qw;PM!8dj1$t%URj+Fcv!x}kM8nu3e*sxP7KNX>n zi=tl@Z_6}yIjR}atV!22kBu^SNvyfE?g`O;GC9GjJkIXX;n5+ZbZX?nf>p|0puwI6 z+4AMgXg2uo%eR(w=`dzrP|FPH*PT}Yifd>LXM)lD7vY%~Ln%u@@?NZ}iGF+EVr-!{F>yiHI^Y z^j3^eoJ({E2Z`r_eBqUzn1xdSb+fSRW#)8Tq)MPj(G=L|;KTtm70j79K2S~Ld}&=H zhjbILsJGZOUVCZp3bzeVwwRjjd1vK|^wL`9wYVix6YoAXPLRH*fDs|Dm?)j+z?8gCvEY?R@diwhUAKc&ig@9Z3m z846}+e7N2hjx$ni9(T@*Rj2VgEAYE14rwya)$_<$RPU`IO3I6;3khVZs6q8(zoNDj zTQQ1oZjBII-VQ;nuCq(yleXpWz{0mIvs773Xkqf%LVuH)_$p??8tH2u@x%%3Ji*JO zv%DJpmD2mcRc=D5hfzw>Ii6qkym~Ut6-C}o*jF&A7HJce|F`Ij`X7GdtWaSCQHV!F zM|4&Mp^WdGU(P;{u_cg{4VD$eAa{cNO>j9ursdiQFKjocJXXiv_( zG6f)6^ZS@t7J~6m`w;Jj<19!vqd5=Vppo6 zdy+1@)$NsHwQ%f&Q@}$}Ix~{M6^}phO0ayrcTYea_?#FA_xx*-XZ`J;sj8E6>T>9q zJSgUFLzL+Xm`pX#k33#wvoN#p5IvKn^lIflD+T?UtV!StP!YF82 zODG3;kdC!2lSb%BX3rVV9w)@Yb7A=mfx(t?`aMM4 zC#yt1vgf22wqng9UdyP6=NTFmiDv0T(sO>oNm4;}3yOZj{t>;)eExkDf%ADWd($ru zx~~E()!JM~YdZ3U zed?SJ5mpNOp|%GSQzma>`7k~2G4HmD1-11td*5UTeU5pOh}M#21b}X8nYcE?^?Ne z40%>@^bi{>G!SuLsRcSSr)=JmQ_q!7&8`C8-%28U&n0sVx`IA_mF^L$eBLtL5Gq%% zqgq8e;vBnF8XqX`*BZm7l`uEbLo_Ivmhtr%cYi>Wn{<6wUy>F=g^ts7Q3qt@H068G zHZYAUSt9#9@(a1@S0@fx*lL&`H}5nT7{FMkMptqaZriqxh~Ao(Div1{hMT!B6Az6H zdV2_u13uG;Ny;}cu&eZ^*vN=mNbhexydO{aYRVW~<@iajOclI8>%JuA834!&u(h?& z*L^9G#YdaAd@Q(gfw^hy*4%ZIi;s1Ui*A|_`y?ZMQohQ@CP6Q^BWJ&TI7S!$DqLEI z2U^iAS*Bs}GjpC!*rB^uUJ9ObG}(nJ!1@(2wk^2&GA}uc5UvX>*C{#+;Rf@t<`26a z?YATvT!)8&p7cbYL_Up@xFEwu@G1v_WlDkt;~v0a92>)ju8R^{rnxNw_wQi55Q&fb zm!sU%V)v&2RFe+>`IK0oVg9j%ele9LFO@v5iA^o;YsL!0oJ9$vzVJ>6X5Gst_fsuc z=fU1(ru60KGF~YqQ71OX7=B})`1l_k0YeuZA@cb!#-IL{XK$?pX=Shd0!xmv`a#{> z%3`)3=Z`!NNraK1kg1i}nBHzbbYyw+UN!Slv30uBUY!vy zeOxU6$3<8hEwtNjq$Jv@bcuHL$~nG?+*a|mvA}kYwwCO`u@w6lO{Jkmzpw>~XIdVW z3rmV%XCDnwL!D4#hRQmMf6T5S=4HrK!S^3V^sFU0?bL0XOLjY! zl|{H7+900mB;@y+!qMaG#&YtJL9?#3znL%rqA|ko;C-q!IfZSnqoKOA;Sss#we+Y( zObe$kk>OmAzv_S9Pact3*@XY&_Yv|`%Kaa|ha4?OU&jXXsDcN%H}gA&-vs5SIf0kt z-KxFj&&O#y-Ta{^*K3?{uVdp@-?(P6ut+2`bWJ=GXR!#_V^D3m^GJ0tPvyr!^+(BC z%si_h?VNcbLdkSxWOX^%+v)1l`*NwL>`fu(^SPOoS7R~BYd4wmxw0tOzsw|-Sr>Y@ z1^eGze1`Yu)J&Rru&7u0GnTT&I^6){>bHB6zacZ@|899Fx_7GiRyj*5J0jm&TA(#+ zTFodaWpQaNYPUAQi(Ce(Z`V*LSbXO+(`v6F z+}-r?{gaN#a{HXfcWVtwRma0y$=N~)Vz$<{VUjIAw{J&$diTxQ;vQFDM~9r6HNoFD z!Kq`vLtWr@p9$kEqr`pMR^iZZOSA%s{z`_|$L6>EqAZ#irW+8goT{cjCTt8<`c>$y z*q9SO?JdV>XPtrtgI8>Xr!S>Lf4~STa&6}tmAu3L?JJsl(Yq=vTqK>teT5z#Qe{wT z417*h;r3-joljWB*_C#mx)L736LrEZasi!(QQlYOXlac{HRxsd9H7Q6VkzH@iN>%Tv;>~4c z%Zsf#HGF1aT_7shPnPUGlfWN#waom?DI#nT1urm}jE*RzcMa`NXos#Tw_@YXiUz5z zdh4yyo#$Z{>f%s$G5RLUdW&Pb@^;!HcI|ZwCOm8l@!$D-p76jfYygOOWPEzh3NMs# z!bNtnQPci2ree@`E$^0Ji_2VcI)|odkBL|b{J@IcBk?%eHE>!rO`iSj$*Uv_9?ru` zf0HD?P4)zVC{9t%^m#1d!w1{0AKkj$YqPWbCZuQU_dmZ-Z7R#n&oeBS_W2^y$t1GT zwZcBKEV$E!(TEcDdsS3uG8-@S&SjHTAxuw-tAu6JWNI#$Gl#_K`wvSUr(IE8j)OdX z^8Qh*aA}#CG&c1eD%O-MCi8-VtZImwHghP+c<+`)lG7eK6;xn{9rXz_9Ql01=xQWT zcHHr{LEc(&r5EA>(^YP$;J@~4uN{>N_u3xAXT7wIyIF1~hw2SvVJZ_cXEqyWx&xNV foHb0aCwWIbSakz!SxIRmQc~LD{~!PNSK$8unwu$N literal 0 HcmV?d00001 diff --git a/packages/backend/assets/splash.png b/packages/backend/assets/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..5f026e35442086ffeae50f0c79e4ec6b7a47abf5 GIT binary patch literal 431866 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

aqB&p=xk3S_kf(yWjarQ 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 z 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 _)o*%%aRh4ONN!YYf0x` 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 *g>Py=9tD+}M1y%FdWM%PaX3G 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 &Bx*=lqAc*XfhS{GM`B(ByRf8@u$CqLV-FbV@K zWKxk=+83^QjN7`49hs2}6MPVAf`L(>w>OQkRDQR2w%D$7rkP``8tW^eylGjZdW&Uey=MdNZ6Js^6#Tv=okz!;Bp+RB z_}eP-Jwa@iY7zAhX=%@;UPzB?`7?9n)26E4rys5&valzYNjbZ9Gf$^3ubu=jvj$9T zkV6@sK90@*(yHOC15F@$)^g_;PIW2&M3ujjWfi7T+W=L^{x;IdB|EvBwxvLUSqZFLo3lnx~rrh}+y2pkr){d4Ku`wvP>_X=7>HZ2- zANiuVDv93^husRJSgR~WW^^w^Fa+M)cM=KynMAAiv#W{Yz448gp`gX@KRGRwPVkNq z?WccmA>7;b-C@q|K6m+vOU=PKo&WsK+a!#5PdKS%&PK_KTkQ1C`sLY~WIDRT)t|pE z%@}zQ|HDqmx9KYX^!C2pJiW)Ax+j=fR zG{nf4B&!ccF1Lx<%{X#}&1&d$OwxZ+I50n}?HT@>AIAV_paPRYwh_TvVa_u?!Ch7z z^%kI3lg=r6Ki1J^iSggwGN>8dO$0$YXlx5AM5r1!-c)}Y4PDFLEM+ zzEl!Z)N3sK>K7KApB991r1(n^)mS#syiZo_M44sp03yuTBJW{nQ6X25Av#w*cWTB?u8zBpji*c4IIE6Sf;nFVhFj?M9yRZUT4d@SdUDov4IBwpxf9(nTk=JS|s{XprxoxBGl< zvz}l~EZ2I^!((ENBNaYNth2f^Of9X<{y7or3&t;o4Ck;Xpfk8YMtQPwK3TlWt<1sc5fcJb=9E*?h-s?aWfx){<${(SWh55 z=(1pnYpJ<<@t=Ft@749&67i9O0UhAa>mul=LuhSr>|}iJM<=fTk!JV*?fAi#(bxPW zVwX^;beBXh(`y%3xiMLiJwI|=ZzAtLr~s8ch0NnzL#DB-IY3kp{VKvJ!>aA{%*i6) zRpJx9zH`k<0yvS#y|dFTk7LwHeL#%joP*@ghHgx&NZqAxilQ~+HJ$Sb$o~V+9mH~~ zq%L16JZQjxdb59x+;=+bQxezV$&ss4w2NCb{cO%~K3TbNAlV*UDY{7LS7xO3(%y0Cx?=?fR+4Op+I3eZAiAauU+@H5K zg!)c2fuYjgp|Z_~hU`LTaeqr1{*M&@uiNNrQ9ukTCi4$EnIVKG?WIJbtyxq3Mpou( zI@?2u@z8Bu&fYlt)TnBhSseal+Xef9Mk_fmSaR?|mIoPu|MN4P0}Myo}#EEsf? zIEyS0kLAg+-^ox|Z(ik2fcledRgQ$cF?h9$qWFmiw+b?c7VUGCCS;(&ndN2u@bRr^ zE>rL8@e^zo79~TA<0R|s-5Vv2Ih6QpI3|(erDWSax+{UEIec7}5N=%<(#rIus(fS_ zI`eii-xn=)6^iwmn)RET)6;PR3w*T?{)^iMwaiUW7J}I_j9|XwN~&l$G5X8r&HZ?< z0$V_slzezP=BM#$d5;COva=}Uzg%mBpDfn5+??0Undqk)ZIvJf@bBSD0rlKi@ySG2 zLXI66t2N;41s(L;xr=7uT$c`z4pYc`zGkHf=sxDy=Q@;G3lET zob~b6Enn>pWtXA<;exDv)0_^}ztEB&Vnc=HYxdC@#2`_+?lvrujKkuq`C6G#nd{at zGbU0XvopH;&4~LGwju0WX0gr0uBM_}!Nga3ct5HT@4vxbtb-3n6(gN^;7nXO#e=Ai z*~(C$cd>Q+6U%fKL0B)JH;n}~LcY`VrGg{I2n6fOTrJ3)$dt5*SK`{FL}n3L70UUj zGtOF6^@;Gj8Mu6?nS=vC{)raAN|RT6vvOv1i$c+lv9mCGCXBF|c*)T&?X(yfG+grx zjm1L#o7OHR9u*xjUz&^pRq3l4`GZB4zYH%dl9ILfmhvLwmAH6HL8MUb?mlY z{NZOSVWC%qnjsWK@4WVNV8??o+pgALx8IvRwv{hK_P|4I=PXEWdtM zJz~UzgWf&J0d;p2JR_6q`C)9~L`utBNQbqU%n8vR=YpY(!^s+>7LXX4;C03Y#Ql$43b7?RVrUUyYRQ)-Bmm9=q z#1^qHiX+g+bhi={^OLIYKEnb>28)TtiCG^l*Y^QxXme-vsZ@z{UO2N5%F}gQV+55v z69sM#_*idEVuxzdr(LyQ)!HW4?5WsjY&V$DFI zkLX0;H3qL8cK<05^(Ro3yZftNy;uW&|M!gh{;>gS^i=(m=6OiYZgkIwzu)p31E+Ri z0>iGETtPT=NNpvVwqf^k+kdtpHNm#GzUG;8Vo!iYLUqe{oB7I9%syeTYMZU{c>#3% zpxtHAo8ABXIpsE78fa#N2x0FsQG3M+Vb4js*>C3euJF2zw|+UhnjIYEn2hKT9?NxC zhISEB-_hU>hhx#%^{FP8%5F*#A)Ca2uzMOfHo;mvR+q69@|JOr8uNp!DIoOrF+!P@l(R3rZ*_fa*Kr69sQ0o6x3{&NE6E`v^!q1f6WeejKA@+Cr^D|Hot& zE59FFGpWuy6 z>2r}8ewIJ1IsF`iT$if3y6?^^AVpSW5C`Rw&!#Gs877?}D?g_HQ$#oZ?|Q}Em-YCk zgh(Q{c-X(E~!0 zb*U?R6qJEc-NrvFF0sTjM%fIATvMoo$1Bk8{g7NFvOWZj1VkNnJT@7VoVa%(ipZeK zm;5+6|6G|iMLIk(GU#{lzjg2E{p`ui?T$C9VZZTikY@5^inWypIPNXXcma>2i}b|$ zWBRzk&PHK`bln<{1C4Q;} z%9>y;6ziW)m-p9o_rNY|83Q(KxSX1$?j}J=?%iFxnlSsVLb1$3I%P&Hkl1<5H#TK0 zTwM4qFJ(05Y4kS&g$LOR30@MG&3j5ymF*vRPKMpiqiD?i4h(wSi}f3FpktU=Y8G+W zZgb_PvH3Ns#E?%w%Ab5hhrf|l43m;3UWyo0FCW3TodrzHVu%>LbnT>0u2$#9@cbL= z=IMF$zJXufuRCWtB8~%vKrVVUL@9YO2Y{4Ou<=EAUn*7ubk0#(58we?#~0t^Ct5km zw_Cs(AshL*_~l`W70dLEa1Ur3+YNh9C-i2?k;W^37l{jQMxlew^HlR-ZsEU`Lz(}! zM=u7lNG_L-j;BrCd52gvKCs<*bBE{ai8gJeVm=Sqj=)FGDmMsxkN9KtP{G63z5yL+ z018$*lyf-IcJD5{jRkYll)D?0TKxE#cIWuH(f!i>S+!NO``>A|-)oFNx?cr8y*1w3 zH3?#MOs|M~upVhqLiD`z0+evZVVwm;+Homc>4V>G0$vuW*t1Lb2UrAOo7m3C<$box z+B0f71XjR?xXdY(qQU?{U0Q$aQ=XmDLwXrMdu0pM#S!@4(57k!9A1eWC7EWVa0sQYEvR1pG!NgLC!W} zu8xHLNvgXwtYQPv+M&nfv2NW{pt-LweuhOx8bxrA)vlxSI8vCNa9SJC+5j`UkUizn zKKOk5KIK~Us^AWI+sUt62b#_%CH%nX_5-$YEo&8rVp2mRe2Qqy*>@$0 zk%uTVb%HRRhz;KjdQs!;j921D@La(+7iF1GLsO&@IoKIfNzXoetEf$I5fN-5v9t@u zbS9e3_*IJ~u^MDdn`_qP=+)UWViA|*u`#WQL9zM~CIgN9H*wB0UFJ_x6<32E^RBUN$p^E0oT`Ju7D@AK$C8h!iL=*t(v-PfS-$KtC_Ls_{8+Pb;^KuT{uxoYzaJx0W_ zK+-NqDb(X(Tn~M6Xzm`YifXNgG`Wysl5i6A;o;9FM;kPsgj)C=glrcWI>wtaes69I zu;lv0b{IOT7zQhOEtmKBEN_Ljx5v)zVJ`2hM(af{MwZof@-9qojt%JNE8~c6 z5hBqNE|E}cD*_Afp^739i5sCnIEL%kU!)-Dz!|5J-s(87B1jE~8v^QPJtOdqc|co{ zs>Ei`uGUwsOBqe+pqEMpqpHUt4r4U&FF9X6sHsu%fb*(00nM$gZ4>26Ic)Cjqi=D zB2sGLPzJkH(tsxaHgowF&8ctmeF-X|gKo>VUVwq<)g~nC-iFkzuvgXb#Boq<>y7qP2HhLHcjO;-}BotB=R&i=tfu@ALX$0zw+Vc6;8-`_lRz z{^jO?fiQ+@1h_jyZC=38-3hTQB=~F-gD+>x*Y#V!p)EdL3UW_gn(K|nmPoRyyF;2Z6Y|7|9@9t_yMy!TEpUDtyR&>gyNZ;L zi5SRD&KVyk|M*V@Own&j>^6WOd|va60}?uzMT|g$6v9V#6Mefc4c>?u8rBX)W-lp& z_98%&;JgP#k><9~0Rs>aZs6XvwU1~2?n$oEQ}CSs$H3K5PHci?B#h$AGI{SZc@AW7 zTvt)i>YEZ*?W#ncC=kE%wvK&ZZRhQQ+X`|iv;Cjn5%>IspjP-;^ z43D7dPoj3vG!3-hSUf0;IdFvA{cil6;)zy}di5Ecwm!_tIwH$#sI~=mR2@w>f){jGNi18cHwb4?b z0KU|XN)mwOZDWg}Sua=WAsTKU6@7hlmMm)e>h8T!6t&e*Bvt=}Ot{gQzu2-XiI1Uk zgM0>HvDFoNug=jKvCM>Y)+;-uM!ua_`$yjAo4DL{!#Yj$M8rs{8c>oBuUyzkhUY1m zDqu}>m?`b3EaVKd|PGY?(spH{0`%c#RRmN#_A>O zv9qkh!M0G5sHnpyZT5z_Vs?@3s;E zHj~99?J>{}AFR9-bu{D#P4&wZ-=%X6pm8yDl#3 zzl7`UQw|8Y@_%%`3VB(=N;o26na=Jq>KpLwG{wr3xqvNe<$e#BL+JO=(1i ziT;m=>=S&yH6nP_E=*xq1;b8hmYEz`+~X=1+N-$>%skIag#?gT_hz~0l}OPfGV z4;CI%*Q=P5F{=LSULWRF6H}{(($W?Nm`5x^*Jl~#`U!I1SRgA3Rfv#HrdO$EoC#}# z(nwr;H4Va1GCTw&W|GxPj-riK03yu#QNWuYE_0XyI|9esXwZ}72}#jk2$ETVF7`}=lymQJ(z;4TvZQ$d7Sur zTJ$Af6y9oLBk6@Zoc}5mOYQV9i?Rtel!)fm^q4v8FyP`8-*8O)(Nr28x5O4!UI|u( z4sYDu-sI;YE`u*j2vP?XokH{3+EQj@I@3e5nELCHjKL8ZGtsRhQ`)`Dh(!!_>C<9p zt6JIA9!@vKYdcg}DY|X*9$&Thud2ohuQ?4(Bu81piQ{oQ_?E%VGPKG{?Wsf79ii(cGf- zhf3eg9nO#-dy(gN>fE1B1rs;I4xPdaiCmB>dG7?*tacX(`haU$b$`@5nU3*-urfM( zns}nAaY_hsrk)6@{4qg`tC*lJCy9?1azfH}0Kb4oxEJb&7TR#c%HRcSH*X6C0A>UWgt}3KKv<6kOy>J)KP)Ezo3n9^-_O!qH%Fcd0 z=ydhl0iuB4PMQA`M|ao%mM~$*$EmUZr}{4B!!{qwRSQBqJNNIh{q_FYkq90=tVr7v z1ifadh^iKXp3pBYGk8kxMuZszI|~_7D|(BzK@>Mqhm%`R1%#g1U>VG)hNe9@Hc@Ge z7V9!898nK>S8(LtHm@#oBssMAZuNHdY3Pj`;n_CTGx#=tB~xvS%}e@}sb^~d8u|@_ z;niDI<=8M%NwOy=j2S;7e*M{q)iO=66tDCA=CRUJaA5y#*3{4srwu)J7jl2hf9_M2%D-StOM&hPBb3Q6KPB ze<%?AV?p+_$m&hNb&Udu#K5i8ml)O9g#KPqxo1!(y^h{brK6Q1J`ZtgyUsAPL>#(v|7~ zrZsc3_FTsM5)0!l{#o#?u{f4&*z}}%m_?eQb^58K!%*vqkUDt_ z|06ziWF~t8(9BBafhc*ipb(n*->A`Ce@$@Z=w>me>ZTDAX>#W2%V#(6_f^4h2*X!A z1-=l&k3OWmHOqgue&gNAe|HaBk4{%$*q>esJfC$xm304!i~R3$Oa&5f<#)Q6_Cfln zzeVJ4^4qy8Z^Vv)h+}C<)0g<`VQV?}?|Et~e#$beuDUC8E{uo!EM?>2?0PH|Piua; zNQ}hUB`zgqlcX7A+FhlWASV3>s|k-FFIP+a@WQ)sQDc6rCaWgs4CXVHJcZXN_edCy z+sX)C4P5iO=14819dGcaQpjjv$-0vlB1hx=26YgUBG{#dG|@A-Y)^~}TT?%29ZX)< z9rv@_7Q$^BxZzLWurC3d8FGFkMoV1nOL}W$^ev28WW-ML=)odMHETp;)Kc-(t!FyI z2-nx-fN2%X$shtCfJ*Tocxh>cDv1vCl2#4nx+6Z<55rEC24fbY1}@|BqOiXN9DE&M z@?lKxoL@sGal>@+S@N(&bjKWp|=cuY|ZEf4pO z^Ixt%5oy~|kLSLrziYa&bvf5L%xnE@pOX0XcTa~Hyv;sdKco=)o^~=^8c%S1#7L6UwnoL!R)0#g zhM}_6pO_{bolCEvSOrhmQ1mb|0g;+ zY)5=tC5JnPr?zrjXGi*x(Kd_z#mo17)j28{|klHjutoH@iQoO%OEzX$p5B>D@oVl?&*VU20D?7PCiz(|9htruGD=`2)xB& zvw6s>&N&d3`Pk(3FA99nk%^mO*&m-Z|2BS_47E~ms?M3jj`lyME+t?~YX|#!Z=`iQFN^F7!W(DMIJvUjbP|M5t`^6N)iv!~*h&_!(ldqpm%n@9C5FvTkza@OIL zqiP9Y`ML*D^czM^0j7YbOfH8~w4>${1y>jS;@t>!p+NBfYFiK~XERn%sG0nqci;;V zYapJ&$iKPI>y9W@ediiqJp#VplLTw;PK-f814D3@U9)~k;GD;Mg^UrIGHXm#=ULpq8I>RYlFB zuh_;=+^$BQL{SPn^-?@8qxGK9rNvft5x_^w{Zi-zVTkG2DrTHq zweG{gIJ65;KqNj0!>QPTxr&HvTRB4ubX^!g6#YJPEjA(eZ%040gF}a1nN&XCRr_IT zzSF?Z5vE!}H88h# zALbKN_vHWi?K{1&zcl`zc84^eXX4yD&+mcW`HO7!XCwvWWaOf3=Iz>&=XG78N^F8o z(9#m|vyjqi^jv8faKpCYvC}C3y;RXTlw@vZJ}MN+JcE63kXz$xKq2n;z>?u{asPA< zArxzPKp%o;%DSehE{IoxSoG;Q!|W+@DRcp9gklOjT8P7#J0+?ULwvGdyD-j=e-_hO ze{bPh&gXm~3) zK-^}rWU4jo^&JbB6SRjkG+X0O8E_e8#<8f$=3>qY{&o(77?OEzgyK!0nVy+_!Xw(5 zo37r0noda9>K}ilTqF>$EFi!#;x37xrm=nQD+PH zZLknP|3~5$zyN-wx)@*o(2+FB)=7KuK>-@-$@vC!T1zWdqS%AKVzh zlWjV%W$A0R_Mbb?+%{8@3+1r??-7V@In`aiOME&3;Q$M zE+${Gl(*A%l`eR23&BDW$vH%Ww6oZ+lPv%1lDticf&cD(EC71k`QJ_#kw0I^L41gp zw0*sDga^G%a52x8(dWRX&IGCl2rSVE(xQ-@=o1{eZaZ1H@})`-T#$&yW&Obr^=E&I z51k!NigMN%l~kVIqFPj^b!+J?Iy!J0A@Eea+kL5XLcw;aQnH|Wc$O_mMp6Cr7n5gh_Ix%a-z>*vh849TGPW;hg$7FpWZYwHCmqIh+E-0DK{TAR^EQXW%p_dfjWr@q!2hzmudLFQ7M0 z6d$o#U=IuddO$bKf2ZUH`LiaQ9#tBtK@(GJ7~623c|!UEUFD!SC_J7si2rGOfCTtIR{VI!Jo@%5#GZ%G zY3D^r?m;!ufUpG9?q3C1rlSc=h}h@UyXJQmZKuw2WenF8i5H9Usmelpy~!!)0s3Te zPRtO(dW1%ZHOjXb#Gn6qIF1s45+mJ8_eT`AWAWG>`8K{jS*2vh8+HOB_h_87KqcMDt?L%0~k5oZ#n&^UflIS12l@XHbc(chi2{1atTGA8e7}@ z3)InSI2qN8jy#4$e^z(AI*{l!keNh1G9VlV0F1Ca9QLo+iYld9=I)JfG~wDr3M|Q&Ne8bqCp_|uXlLP(wn^?P-=x(TKjFgmqML4`}_{em0*)!{Impn-0`}^R(YoEz1Q)i80F9s@`G*EU}8{h zA^}_?Hif$XOh8d9dXB&%+nUDHiB-fC&Rq{|wPq6ANT>cJk-jteu}QTQ;GAKaYlDLW z6C3Kun*i?zFfR}1Sdm`o2!o!o$+%s99zpL#1QhrbT_!vrx|x)WQ{@vdE{eKwz!S4h z5S48dt|JyA$r<4W$AVF_$gK8b3=zCyY=75Z0Z5gqJx8cYGA#>Hs$pEldZm;#4)~6; zcbc?2fk3|Lv4AW9LEiLS{e633fPQD6||n6Ke>U}J3Hg8s%% zh@R7rf0r8rqcp)sg%$H9uI9l~gxv5XoV@Z~An^Y123uPkE&^-L<{e$aT{@3~Mi5u~ z$4v(#WSiI`e@6Xm{kP0FmPGbt}IUY`ijRAw&xj z_8h0>a@!ny0?>nt=qi=m3CU?Vqq;WhU~P>IdM|u7VJF>z&h^Dtxfbl?>iy$iT+vlg z{kJ!~H6Qsd+IFY1tV?OB7pGm!q{R8__q?~csX0q$_a_7dWfIN`Rl$wLnJX9e+w_w> zaI9_haOjv&f}!22&6Tce#J}GkLk02`?zpS}`uE~D%k;aP4~VrahlkMboQ#{~ zG(K>}ye@4RVJvNS^4~karz$*ZJB`jWx5!pgI_VNp|li z*0MLs+wLS~kHjtxnLrMLs=hXn$X2TLz2FAPvHs`P{^ukni}RuzeIwFH;nGvT6xmH;FfJI8#Is;&_n zP^7ob?c2R@b>OQg%0JEBb^qCP-+CUifA93=UH={~JTC7Ig92LS0Pm0st#q`l5j*uX z(x%)7g(vZdBi-=k^zct{(Gc(PPGT|ol~@U5-vO?gkmXr-8<_BL?YdV z#DyF}uC7K7j1;8CNk)=JlQj2wzlUAuykqrYC)WOH5$dg<1eDe?H94qN_H*AWa~FUJ zI#!=~UkjlblZ~3<3&f~zxnH}s+l^~7!4|XNbI&apicVH`J;7>T)C#R+xOb zOxdB&p}?gLpYp{Lw~*)K{#9$E>%rnGUH02npe_!etN#@?6tmeQii_8&{jm^FH3fB4 z*J$J!AL9*YNwIwwKv&pufO2Sd^oDHhXGB2Sb{U@h$u$g`PEgf?ocKIad2MHRN@&6} zj02;rSgMH&bql!3s~ktdfUX3AB7c|}(I|1|34(iy_0$+78A9UWsJoRjg^Rs>mnXi2 z9xG2MmHxRt<1-zC&OSCrc>NbD?<);sR*03WrS3j7CkgYnd3jF|`cE(E%H2R+U*+ax zozmcU#6b?GkRUlwa&oXF$mf*_O{naqzPLmrE}UJKi*q5m2qUTOSCLdCHbl`POytMe z`K`~BTHl+z^Szz_H~ka%9;N+PgDTWs^m%O|#piYWc-BGcgAScn(JsdJD$pz=^NV?- z!Hsc11jHgk8)P?rw2Nxd?m|)>&5$1)XI4?hJmO{XbV?Rq;55BAT9PNGa20{@%>BGW zMlC@@MZiUxD2o`eAL|4HE|hmUZ3Xv?J-qr5iQ`2ky4~d!z-)mAqQ>B#l7annVvyYORcR%ZqFee#4Fw3ZCSai8ttVPiZVR0vhbg zq6Qi@H;;dTj|ZhozsP+5+V}dy1Wj29ytpPZAvO~{4e%>BaH_6WVLq{TfqmQG0 zdb8`Wk}u=>q(p7PM6!Hj%PJ*=d&ksh)gY0F3WO7G=nM9fi@zqI6UdVY;~FF90r*d= zEm0aUMiDLOsHskng;`q*Ceq&doWfZmY$-qMqUxi(UFMrbDDtpyBmU@lbaFY(1f6uc zW{fUIM@0y7-9h5WO87aMLe9NCKulRP{r;e~>y?=KBtLTq*#5V5oO*y=eK=wD4f=Ty z@n+VDcDx(+2xX-8U|@7uym5wwn(^i6*Mg(af^$gi02>V7qUrG`*WKtzPwo&Qrve?3bS1p)-%twR%pgvEcs>40 zMvkN}{5SvtFgn~=$|Sp!OeS&h!h1K*ywM5hF{+24v{zL6@y0-oGINHptN_3nSF{mi zJuDhlj(U0bmg6p;{$5qknvU3$rV>)pSA{8oOfRiOEY9e>8&dCTnf&^%VejMf4Jcq@ zqU)_f|09g>@zDdT7Bw-knG_FUm*^2j}M>+y1*2*fq zR?>bA!=YP@Bk^$zWe+s#nU=YXvkuh<5 z&+9nnGP~Q19fwo6tZD>0C*_{tC#(vUufq$E?hstzq=YIT16^!?+8 z@o*G`vCqCQwA#79o}bPCX{8tHd~?k01z;QJyn?;G&+xQ(aq~z>dnQXQWIpFOCGs`vQ~`kJWS7}gV<}noGrz4Qhk|@WJbcpxG|)O#6T=fx`}-FARPlI3Lik> z7`Al+%D*E`3=N`wQuBw zNX~Wt{#z$TU}sLV(&T(AWhJ^}ds|Ni&wn!>7ef*NsR!{{1}S}@$YtcL4SuSSA_*5D z?YRZ2Dm>gXNy?0pzkDlnW8>?;Y4Kh1@N0W zNK!uguLZr<2P7%rO`!bxSYY3olMd4ajm?e3rt7F7JGN~rxObzara4S`THhQ|)(BLC zHU@U+8D`s;aKFN^kfv zNQOzyafC`3k{5pzW$lJzY15VNk&R1{uI@-MudHy%q`u~!5e`klT%0VLz|uKdrnuJSN7aWPLJvV0*f} zo>?XU2V7`?`eH`CVN)GM)||m$FvFuD%T!HWsR`X5h5>@IxN$MtY2f8X%dR~NCHWF% z;lTDwJ-HL#_A$?e%;T>?ycRR<(t?C3tc>AZC`=OZYkV?92{8+-QSjyJCJ%Xi&A|zj z;K$r!q5gbPLkO=K0iW5ew%?dQ=b@wyk-c}PlD7wSxIImSiL1w>EhdZtv*LrmZ}-?OW=U>bkGUjmkJ;f*~f5|-0uVB-dxI#?I-8K5_JkL5i);*i9gfZY|A(Iy>N zt*agh485?@2LMUW9C-1lrDKjsg~a0makva#r&??Usjz{PBmS-BJ9KU7O(2#sxWOqn zuErMJPA5nA>)__c_P;;p7*)!Vb%F&Tj9Ccja#XKL+s2Ps zD}pOL+a-03iw(VG%}2Gz6=^;$jjiG-tnr9M&RpEd~qDs?qQnPxGq$sg@Fi z`(-xvUf{`=&D-ql(-x*wvMzj)YS~*PFSloW36xO(csvTu<56G6PN@!98-d zoXmHNMr!EDwQ*qJ=4WOsxK0q1G&A|g@6kMF#{q){3*kXsbSTftOjo4#J zcPR-d0}b)#D(-hm%Q8h*IGqxWoaeVqO~5p%UK<9__(nF%Y*cjN^E7|*nLG3Q6YK^> zYnrhGILN`4marl3&7gZ|SpZU^Afh!s;2>sNqmz;5IVHmnQ-3xTTdOVibV zd-$(PjllqBX4@|p70oes1>3OAv5Qh`lRtXDvpQaO6^zrfLQ{ohPUJqbic&cI(81xV z3_7ZjtvPA3U1MqwmEo9OAaCWa7He%%6tcNijX&2wv90T$79X2=)`#H4urV>X61+7Z zqoH8{o%Xl1qTANps(FZ3B_+TJ5YrDP=?5%;7_$?FME2irItXM%V{bwS_xKIlD&_2B zeYCCx$pOa<5LDx?J{@aHfj)B?Y_jJar|Zp7nQV#D$<9!$kUsoTnFDSTs8$E$O^NFP zY~@1HtMD}q*K?~j7vF|{Zv}c+fkPT4jdiRH;>-s5S)GFNEl2@Zvmy!FC* zm%0lrNf^ty1*xp6^8#vrehCjM zm&hkX5u^U%H!xwR2R_LU*{zK^P3lGVvz36+1;<*_o=6RX3e#Q*m9=Cj;ZP}~NN+yX z;$z+{ucE6iXD0u5i53~uAT?8uVubh|#)>)typZ%vTsezBXqw_2B2Qm!JNstt>jIws z%R8_wHs~Kw*BW3D0LcAZ)Uf^ZD3mQB<;M`Qehl4AC@!EVZ$O$A*m}rS(pog-r>L^o zF)WzHcXL_X!UwdYP15+(Ri zP%xXKw9;s14Y33w=*O`SZ#TC|2nZByc4jvu30{gY=CT#4)cOMm*8b{k(2M%o?L}Y8 zEds%rG0*07yTTTN@c|BIW`7o4?FmubkweH&bV7^?mx84x%a)O&)iKWRIn-ZfObp9vyBrkb4EG;>sSd%jS32zNr zdF=UKUs#pq+wU{H1te@UJB_w^p4b$^3maU|=2|9OHOa-lOIHCpfkv~S8!zVqa=g$p z~g?4b20b|{ktd2UTg#G&T`8xl%!IG*Y)u{^DAV6qUnOR|Obir~Y_LHhaO;yKH) zZo?l^ziIPwu`zMSK#yL1d!`Ngee)_5UHEIpT{*r|rk6-*F?cv1LMZrNUR9U2#%~*u z-u__YE^VC>WQXx>u!dsin0D~rU2gmAS9CuYTG`BV^beE zW_VSOv@E76_7dd&DXp}{h%{S`4-0h>gd#+A-DuU+ZE44F$Q$?ZO{$l>3LA3VJbd>s zqj1Sf1;yd0HzaL7p1yF0l(tW$>k&dx!k&zV)WKmIjegFf*FxKkT~L^v=8(SfJ|Ocy zbAc;~ptMEW3iFWmLB3>aOgc3FV@^z`Z?IinfV^X~h6L}$tSHb`K5GjPgX} zaq$g>1V_KwQGhI*d6@jziOIb0pS5RRKJ<~hHh9h?KvOKNdhptCVjhzb(%B1N*5%aL zAOxXLA+T2FEX<7~eH;AEFqGKNT)5yBdc5rq&Dt&onhahE%F22>*Z)oQPG-bU93MFs zWbWQm;Kr8e*Bm;F?!L1MBq2cqd{3C^)-vSu#;%ri+FxYa%d_cg#H>H&?c%y;=0-f4 zDrFjb8Tr>(ufC{1G|!0iyJd0qkdM?rKOeV{roVko#&*ADUSAgM`~z?C0CBfL3cw-C z&yY@_4O(Jh>8vo$6 zF&RDX{Hbn<4C|;-LlboY+RsCv*Ul|)X;MoiH}ERzgPtn&a?`>0luT8V9hunx$mXPIHn z;)AIum^N=YT;xE6wn|{nX^vS|%LqVGXGY|_V`x0&BQ4gvzq6Rvu{ft2*~Rwwu$$2w z2bb~(E%CzN8co!^q^rh}9#DOH&X9CmLDU~EluTGluJH07W_03LVl-?k=R}qyBPD(N zEkM4phQ0c-nhzCaG2RaU2=AI8oj0r^UU435BGw`T0Hdw7M^=_2i4A9u{m}8%^nuLX@iQD24$-^ptOU=SR`keg@ zC>(2C7)pZ8sty4BHEuPly#90aAog@Sz75h75Ox==-ElXx>}!Juy!>+gf4#aO{w24- z_bPp0(SGfAdRB z64Quqk73K~4N#jzO)*e3Sr3{e#sgQc6_;Z;L52FE&{G%GM18y>IHx+=d0?ZBFHdO`;lvV1o zTGIgxWu4)O+Om;naYTe;-hk<#6OcI&Za5U!_%PIN>h)R9!d?`cNOn6%!HJmJ^z_pO z0@$;10E3Z*3QdvPFBsd6->1<-(9wjf<%CVpusm~>FmU>_+|M%*MSm`!YgrLXol|>| zE58%wog=Z_l{EoDB@avx6e!iONbP7dR2yKE9I7AiaQkVDgVgkyp#cvyiJO> z&TQtQkhadS$x&Jj#a1EygxFMwsTnSi4TvNm#jtDPpp-O5Q=m2_J@P~b+7X3hW#j5x zXFuIPQ1^5wFdpxH7w_OeEyK?%^C90OBDt_grFp-vw-zo`BO@T#47?R9-lH^?x z_7P0rmw!fo2gAA7_Z;=~pAK=(FSaH?+dL@=BvJ1dS;Z8|L1mEL7GVu~4#uYsjbVHS zEI5tH7D`X`DB6uu-LM_TQbdBlp;5mWD@j@>Pzbx(d3yFwIOJ+Tj!7a)041iWD(i@- zh#eaC`gESk0EyFiKJ~WG44|m@f^mVFN440-m>Ad*A3L_L#RUGgYqS&7zfs*pT}dWS z>hDe>sf;mxQoh=06pVB=sOvM2?TcF4C%$c${fgke0w$&p1<@2#u&aIOhF6t0)gO?a&~UqLSO*L726h z;2HF^)g1f&KD_PIB#w4||l-%5Kx~k|e zIXa!>GGU-w<~~{JiOZQUNegegc)SQRQ8~x$|DH%8ZTc-nux=82EIsm00mkko%z)Vd zpsK|EzUd83wBI77teY@9SV5cu$wy?iQ>?~)qz@N@s|>M2glGg_*(x|5A&WdS<2v6> zeKn1bfIQ&bn_s88K*nGeZFi{CfBkx?dF<}aPO0HL59U5tBsO0VbW3Jdu%Dp#H8H>1 z+7#qz4qiD1o=73c9Ww}jHvN)tH~>A0%n{KUER4IP`wYhS#y$u?+U)GGu-_?UIY~UV z2QaHle6ytVrdBq37m0Ng-`g>(g(zp+Q2P7b))&x3HY;FSgj?IdWP&5sev!Q`LVh)d|8 zj57VGNc|BKb#ofr zp$P_st_O+Y71pfD7FGXU&-(PZiV6PtMkvCV48v8zjf)?RhvTG{KaS_y=(%hlI*eB; zEN6~(>|YC(lM`jbo(ntri8|#={21GG=pisVFTKr{=M%FfZqbhfNN#TP9j^`(DvW|W z&}fV`In7U4p`5@#%?-RWR>*}Y*@P2^u(k!pj3Iwic zQfN=i-}0Ky?(ZOa3mU06z`UgXL+66OW38nIssx-9EXW?{_hP>F(U2<{)_4I#$bSHPC2wpb?RLpsbBIBLBG^%vSSdj)UJX$n2ZlX%(NYeEDLj z(AYZj?coiA3xc`WgUH0Ft@O-To-Z2dhSp2YqE;{z6gJ0!2E`iU~px_nzt7 zlwkHK&_qN5M}P{ciOHOa0Ea7j3hM+b2lI1MA3oCUZr4xzFN>1bS-dr0rrg%ef=y>nDjCsJf5r3|0YOar9epy?^4&rS zC>@{N?HKP(uR%onj8+^UP91{AM);X;0*wbx4-dXNTZYXporhv~Itt~Qx%ToMoC_-A zhDCwGP*etI)0Gz|zPWK8@f*I^qE{@$I_-3zWBe1Lnp~Zxk_{bauo0SimncRuP0EC( zpxoV%d600@YA%2)c~$^!ooVV;=_Y^qXZ-@LWuQM&e*kdFL2(&>j`qC;7Qe@fFk~q) ze07naySoW}a|VYsh*dU;g~+|=O&9`~u;=?3!jD&$25cV`P!gfV{(uvq+1p=cf-^?+ zRyMwIlZ&}mZt!iT`(qA4=&_+rRV3-|`|}eHX=qyrfa$~n(Xyilbv&c{ox?kOiaf?D zpnEXIQqH&iSGz|Tg;1~J3PKYoA^}p!`QCGZA`Gi&kmrhqc4bSi^5IUTbW4>C5h<}P z6Zoo?ome8Ja#%6}5IEas*{TP>4Fg5vp6JiG&4NL)qdPF1vavh4?P`E8>^`)HSqPj7 z=GS6SvzjmPvWWHQ@Na?feX;=nDYE|iRvs(CPVmmxuR^T^-y6v;2sobYz7M^J5Hb=N zh*%^jK;2%%WH-cUk7-cRR?&jC%vBKwUE;$^1RUSvlK2uJr!tu|(R_ zscZZEG^*KKBF-eC6^3l@!&m@!^7nP7Q#9ML)hUw{p07fMBF zbMxl+P1!GLFfavS@+@}Vk)m(Z$3_-cNUQfMP3ka}a-K;Zr>=;QVXtkr3`ys;U3_-c zPXPGG>%0es1lsFHVipj!PJQfV@kU`g6-GlHKM(XpkRo|v_&9Q=imMN1GMM3M-ZUjx z!mymk%hiAEWMXG- z5Q%Gv+Z{(d4$?QSU8Onmlj;${YYsztWTW1s5JX>Wj3TukLM}X6jZ!6@)rJLJEPNT< zc7hljg`723PW}NJ=Sxl{WlXHG$sx9*d9~)EVPsgEw0lpIu*}8iUqrDrdR;I&m+E4X z^TD|`>`6SRS1pNtUc@Nw*D1PA?jpg(DX1>05o*bxO$AZ5%XyNr#Fk`cY@Md6>I1pb z)cMf+2}NJ+Rsr1xoi6+fw!Hik79BY6eZvS0o7BJ)J`RbZ!EZZHmN_WFvzAp!L(H&< z_C?Y@Pw+Am+UFL2>&AJSWN~x0g`%IlDSxJj+WCIDIw}5zbSh6Zrw+wWpl>&;FYzAv z9-#nN3bpo}fT$yLU}5GZhoe%ND%ijeE}?Y{ki}_@VUq9x4T6)!-aUrL&QMWA@Yi%T zP?}oC<%5IQ#X=V)DG|fKUlMJ{3bI$@C{fe3FGCg$xP6~41I1ht;>KTqzygD4GSOcasS55v1qLy68qOJ za!Yx07lSifsZ&*kHaIg$TmPF1$#W#(Wamg`NuqTaECpF4qxz5ym12!7+Oms%%l^A>#ntMGbndJc!gte7{7B@s^TI0Fz3$>*p8K1ia zr+DMfrR zKB_-s3;jl942>d9FLqY_sh>y@s88D^q(C2XhM_$`fFPanwCb$nmLQHbgn8qn7ug)2 zCwE_dRrh~b!Nsi|GN6`+WM-dqySBFZhjv4^w&2U(nTNDU)S^zv7wQn|*cJlT3`l=& zmP1arrnalZE1{_&OIcGhiH9&|kxU*xduz2bCN-SHjhZ&s=|bmz*y*e3;V>FHS?TPV zl?Kg&p&glI2tK8hVX*9AFmMns!2q-FFf1N{B?Mv^MXJzIxO;05-1|N4K!(J4J>WpITwR$a7;c?mlBW{Dv$o3BT%*sZe{C=ib>Wb;q zv@THmI+beiv<6xqdfXYL%lSGz*YDVT%je0dM zNM2HPrz4X_t2*+3G&l{0R2}hN7~!K6q%BML5Pc#PD{UE_9D6z}!E#h32c!KiA}<@t z$l{WgPng)ipGkH65PrB5B@R-R_q{>FIL4iDN&>;Njy^(Of5GY-)sU#%h|UFa%J4bt z+W1a2{!>kLO(6VBE2EpxlDaX$umLzuCmt^GHqd@aji>FJq5Ars-z=!1eHHFJcVl`# z%Gp99NGf|>@>KsTI%&?Hh!cEp!9`((W;ce^Zv#pzmGGxOlf_BdK5klky%Bfsk1c{_ zzm8g(lGzgH-sNH!&DdR*%V$)kjbmEn94Pn+zL{(CbU=;0ydPuJcuh@Bx26DCPm8xq z#4Mm3Bslu2F@`?AF0Fu4q*P0Hm|@Cq%Bf$HztHRLMwaNgo{13AF|+!i68c=!Lso-~dXZZLsi_O4E$+KqI|7~L^0Mp&R%N>*cys=K_ z0*Pw50MTlJlLaBuBv2PU)1c@>{e`LJ zt61iu3ECQn%-aH_RB>pdCdl7?3_9XNHXa4Nif zF7jP;q5ZRrDJJ!TboqFdEEqyHAj0 zK@`=;tqF0Skt%^gfjjipsZp&kq_ZK-t@1FGCqTxcdh85+VaRVVBLh&!kQO-Lf*cZU5bz8#F*u8kGMvn$b&U^42U& z--*utz92<~+XQ~wR$QF+svXU()Qe-m)sc6Sg8m@IxStS?ng=oV4!q=!1-oO%2(eqA zfSqYifeOqqV$A7yllZ*RdM2}C&=W&iRag)~58REO?wv7q9<+6h?5ARRi&l{1tJW-K zH?^5jE%DMWt%+$dplvrb3jH9T@=Q%-E-&BcYitQzvg#={in^F8(y8fz3>qo0cPG}o z+`7}2(aCM{*M43LJ8d5P=1JK#o}99fER;xzeL>a(pv2QG(g2)OI#KDMKh$caHPz)% zkQMS2W^q|H!8kH!`D+C$*ukTYz=^O71^;o1@e>d-=HhSJK_OUtfWbq<5tTLQ7T<~u z_Zd;Jl#+69D5x`(i4w_6*e=-uQMSdWj9mp1s;5` zd{)E)Z;!iLW1ar%eW?I|B+-{>@-Q~}$xnFWeZu=d2-dDp7hI>!+lu{LN%n`DZn6Bm zbDGX(!3Y?x@&|Qw0CJI5R7$eQYZ0q4pj9k}!I#29pSh>+8cFwl$od%u&n*DY-)BWFusZ3dI`_ zwwcoC64oWh>IcrnmORXp;9=OAi%5%Yl!e{~P(OEpZXLk0C>FKoGV0%`pt%FZqJG^6#C zWMttq(XVpEchv8XzgpX%nW@7T>l+y#e{c{ieCWdu#9h^JIfLRXQ{nUC5?AIRZto>SAYclzQmW<(!Gu%JJ8PUaXtHtVkYmkzznEB7M_%I@k7)y`0{I4E)bp?sZ4ydve&hsP8;T^jtEqfzw6Fd6R^5?89Z9eOiqha12qF4cD@p)Lhssm<(zrqgf5EM_f4 z+08y^RpW&Ny5+qnPy5Ex&Tk0mQFQLH{bF5qt846(`Pow)sUtkIR>5x2*)7{145oJ< zno)}d2|dCxCg^&N3eKBDZ7Ik2 z#O5lPok;Ze(5h8??o2&^EQq+|8soc$*~!GsAGZ(DWWqilu@)AA!I~@6#RY8)=m14a z;#9I-qTF=9(gWhYvZq7)T`}EXZs^4R*z*Fqgtj&KH#0LsMg??U0 z-C}wR2M)czE3_qditgi_Ks_Lj5WBco3-{(b^=iK?Zfmlv%Ej*m|28M)(OsTmpIr$-45YKw4Fcfj_OMZVbK@+mV-7ftW2M9Z8b}-CMB8 zx|ns@gvm`rWV4QaGKNAFf-^z!&2jy-Esrt)JQlvRWY%7?G&+zr23Jqz_?C9wx5xFAY#(FRO{%RSZ}Mok~yySu&ja6Qb~T7w== zhhsUao9d3eQeJH;C^PL*72_lAOydXe0s}>mEbx5yw~hzsYBEiB8hMdnZr`>B!8RNE>@J_zf&mX>@bqhl3obZ{-m0d zIq8tWY=VxkxHbcEyQ5JN39Io_RSKkj8LBqzyPYGKd@Ozs4Sx6AAG`eZ|7nTc!vH~0 zklc@|=F5Axi4UyPAcWS7OF#o6#R|Oi8y~0S78Kq^4^3(p?yhWXHR`b3-AdizH=4{9 zGE4uB>7XwCPe16DA?{?}@~DEh#`eMLyK|dX&|a0=G|9}g5aatl=me$12frHGTgl*g z+9$RA@h9V=5c~L5A%h zPmf}DKwjlzXp)EOj=MOzvD@sFN>Rg0USD{FK@kmH_E|7LPQdqo$B)vI$`@2$GYUoZ zU^SOKC~zgj0^mWARQ7(!W(e8%{8mfH-kZ$y59rQwsX7-3<`yA1IpuHQ@ELQfq$Fh2 zrlwvw!9g{>PrbX;1BMO3N|T7+RWcry*n96hCpjz#Dv1&nwmm(FieIaU8%1&I2^G#( zSePeDd#4ZqjN_7ecfrw>VN6pj8YkcV=RuX#HkDUL>e>q8i_7t&Kizh1vpP95wD67P?~Qfhu>YdK&ovCtn;*Fjsh@bl85u#7gZ7UETWb-^Hi4o z9s^+cL=1n6tS@$vqnwf)_lU4Eb+5Vj48c44T2a469Hw=^LYmu)ecw4^ z#t4G5V-66x_=U&1h<1D21;cwEfGCE2r{<{2kAMMq#B;t9qUCJt z-rI*?hJ183P|kO$yaSPVcS$ou{CFmexcrj?c`FMMWNe@7UWmWNd5e%qsLO*rDX)c1 zeB9en#g$4t6RG!e1c$J`X?DaKXPJsdMs{{h8}S|J*jUoR<3iwM{PmrXv+4h#M*@XS z3t`|t2jyiuDs#b+go9m%rQ=ODz;BdsvgPv5uyBF90*eHV*nn?>(3(BCSBKm*u^q|T zP3Zc*{{^T0+S@<=L(}`vfSu2c=4g31?k2eNW zyH!KZcmIWF$<=^ui0ua!=Y(NR3A>u!@sMjN1z*4sXd2!W9AUic3Lq(`~#cmy(}yjodK|6wOi8-eahepngw~v5cIBMw{1Ko?&Vz zv16l_2rjr`1iN0|`9-C%vMR<8Dvq%58@Wc?F{hXYdkvu>5B{)#OM~5ytZiRlnBVO~ zEKuQpT0`BxjCBRjV!|G_v$>mO1c>t~oh_1~O83qsipb`H5|##tb9YfAGjcZ9yt2eu zB718gQZ@)lNXYh=ayA4nJ|P$^AG z>vOWInRO%+lU<+7ks1kt3Efjt9)rS~ zJ&^UKjNGV%gr)gd^PN2h2`V}g6nVr#^ebL7yhJ2pJc0?tL|yaWI9dqzM?A==TW + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/backend/assets/transparent.png b/packages/backend/assets/transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..240ca4f8d4edca6d5905acf71bdd9f88d4bd3127 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kP61+gajamnSrtAhou#e O#o+1c=d#Wzp$Py;d<%g9 literal 0 HcmV?d00001 diff --git a/packages/backend/assets/user-unknown.png b/packages/backend/assets/user-unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..ab29bef2b17ba5aaca78d8f809a010bc29970225 GIT binary patch literal 3518 zcmbtX3pkW%8=jdhB%-8bI*duP4w+LD^Bcx7VkF0LN@LEMlR3o5VJPE})fR1Aim)U@ zY=vZ{(ym{TN>NGKoYFW{T9rZnH?+0;xBLIs_5a^>ecycVdq2Qf z@X3@&ng|v_W3ae*_;`II9LA#J;enfpXd>T<#$>t03TVEuUVfC=NQw;=Zf~b)8-oJ~ zI5ZI%7QOH6BJn?)b2xuWLnw0D0|@a^)IY`a`v-)65b?oLkL0v?^k1~8$|R!5k-i<1?`#>&b9i=0mdC>##(Wzi+h zWD#J6MPo4*7_yotQJIlP;Bj+N20 zWQj*#M2Gi*15GQ6_zz07j*dp!-%E&7CVbuEUuU*0bQIhKNJu$?x2V>>esW5bQwOnN|C3xKF|u!IdkLT4O>^`mwNc%Eimh2gI)9V&wof%mNC?( zebS*F9li_iK1;glHmBbDO&WuHT zw;&-1v{+AdgF(kn7=S?PM()lIelaITPlRmOb674tT@33As6E7uJtBjb6dJi2nPGmV zvkTn^z?*;BnwV2Lbt--7R}N50;gS6&JL+8JcXpewNSYpZYHBX98u}EOT!J3okZwu zO4af3@Tj*Z7W+g-Ms_E@5MAnPK3EG}H8q``odH#?@H?dv$<*NBV14vB0)e1WQm%iclmP3UcyDE8waq;OdrVDT{iN5|6=kKq;)y}xbHmrYZ z&Aw;+(k0Jcy?gxlM1Z`yd(`k7**1=7N6&z%``wA5_VC68B4$V)Sea)RAM9)&0KT^Y zmfez>ndwO+?r68&vL*V%?2I$q0WVB1bt9M^iGB0@&b4cf$6lv87JR)ukIms6F-?pr zbs<>g#!tU{Rm*#Nzuv6NUl$1PaObkzwQ42M}KayI9 zCj857^4nK_<7(a+O7=7A9k_Wkad!F)Nf;6mqNk^)A9)u25|VticVvW}0-bsHstBf` z&$UEdff&0Ru3M+h3f{01TqS*c58>94Zx`>=!~wr#GmV#-juGm6xK_Ej$B)AgxtT0~ zWMgEO&9+kZHS5%NhlPSKfL3^4?`kYAE^cgm%C;JxW|%BDT(c%DEX+UWg`%sn7b2}c z1=Pnp!(Q^bzape|)<(HsH@9ui+p(}>#snZ)ub%T2h$kX@x_AB7tk8y7|I;@U?*{}1 z?zPP;DM7qn)G;hd@8~K1YNNEzI;)SW2FzbOsOk??_~r6aDQRPgNgnPB#L}>>I6iq35-DV2T*0~uZal`j&D^|LSrS~D{#; zt5&aGZD8;~k?!x|ar5LqqWkU1ffvji4;#O~IzZ5u!!HDnzMmL6>2><)cz9@NYtK4X zb@2Izj~}Wo(+{i&_#skw_|c~#3Wb8v?{LzG2wvLS+uC|+y#GxRh&|SC&8-A)2j@I_ zX!@e^MpDKCc6JEO|9aA4;|9ru>m8$Bh~FzH;lS|l@Gf-eb6uCW+5?1d0trj0*kdg% z?!}R&bc|WK%?$1OT*OE)PrmBnqh8hms|$bc8|V_d7)4gEN*FcSh1@*SY1tRWY0fD zMk&_cLj*dndbqW*vfRB<=!II^+NNRokcH4D@8Z%A2O71Zkeu25$@arXbf6GHNZ~)V z&dTM!mj+krS}o9Z?AM|D)tfu){C+8aawO>3p`lwR%_BF6$ga{hx?*_v;g)i_+@o!8 z(THpnc>lL~d3lqQlMpb6!)a(}(3hubzUVWD*_XoK7b4vdeJ*9OgkiGDcVYNnM)LvYCNu1 zh{$eH{ALzA?yp^SZ((uAaH`I_K|HXY9CX*(##{+Kc>S=nrKRN>5B75erh3$^2Gy$Z z;PK-(${D4s?bfXo4PXt8Rt-{ESR4Jk01gCHcc4IH6C@xYfa+Q(JqJrn3%Y)@LW*90 zs;(}G{=@y<7IPwjnxn*Gu~NpeG(7OLPf{%NYNoWT%gkDBPL7t9m1ze0!!z3!4rrt{g$ofVU+&PFWB>pF literal 0 HcmV?d00001 diff --git a/packages/backend/assets/woozy.png b/packages/backend/assets/woozy.png new file mode 100644 index 0000000000000000000000000000000000000000..7e33530529eca28f09737d21b5be0a2e2053af0b GIT binary patch literal 18990 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 Hu0mjfuuZ8i literal 0 HcmV?d00001 diff --git a/packages/backend/jsconfig.json b/packages/backend/jsconfig.json new file mode 100644 index 0000000..f3f4f9c --- /dev/null +++ b/packages/backend/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "allowSyntheticDefaultImports": true + }, + "exclude": ["node_modules", "jspm_packages", "tmp", "temp"] +} diff --git a/packages/backend/package.json b/packages/backend/package.json new file mode 100644 index 0000000..d0f89a4 --- /dev/null +++ b/packages/backend/package.json @@ -0,0 +1,173 @@ +{ + "name": "backend", + "main": "./index.js", + "private": true, + "type": "module", + "license": "AGPL-3.0-only", + "scripts": { + "start": "pnpm node ./built/index.js", + "start:test": "NODE_ENV=test pnpm node ./built/index.js", + "migration:run": "typeorm migration:run --dataSource ./built/ormconfig.js", + "migration:revert": "typeorm migration:revert --dataSource ./built/ormconfig.js", + "migration:new": "pnpm node ./scripts/create-migration.mjs", + "build": "pnpm tsc --project tsconfig.json ; pnpm tsc-alias --project tsconfig.json", + "build:debug": "pnpm tsc --sourceMap --project tsconfig.json ; pnpm tsc-alias --project tsconfig.json", + "watch": "pnpm tsc --project tsconfig.json --watch ; pnpm tsc-alias --project tsconfig.json --watch", + "lint": "pnpm biome check --write **/*.ts", + "format": "pnpm biome format * --write" + }, + "dependencies": { + "@bull-board/api": "5.21.1", + "@bull-board/koa": "5.21.1", + "@bull-board/ui": "5.21.1", + "@discordapp/twemoji": "15.0.3", + "@koa/cors": "5.0.0", + "@koa/multer": "3.0.2", + "@koa/router": "12.0.1", + "@ladjs/koa-views": "9.0.0", + "@peertube/http-signature": "1.7.0", + "@redocly/openapi-core": "1.18.1", + "@sinonjs/fake-timers": "11.2.2", + "adm-zip": "0.5.14", + "ajv": "8.17.1", + "archiver": "7.0.1", + "async-lock": "1.4.1", + "async-mutex": "0.5.0", + "aws-sdk": "2.1664.0", + "axios": "1.7.2", + "backend-rs": "workspace:*", + "blurhash": "2.0.5", + "bull": "4.15.1", + "cacheable-lookup": "git+https://github.com/TheEssem/cacheable-lookup.git#dd2fb616366a3c68dcf321a57a67295967b204bf", + "cbor-x": "1.5.9", + "chalk": "5.3.0", + "cli-highlight": "2.1.11", + "color-convert": "2.0.1", + "content-disposition": "0.5.4", + "date-fns": "3.6.0", + "decompress": "4.2.1", + "deep-email-validator": "0.1.21", + "escape-regexp": "0.0.1", + "feed": "4.2.2", + "file-type": "19.3.0", + "firefish-js": "workspace:*", + "fluent-ffmpeg": "2.1.3", + "form-data": "4.0.0", + "got": "14.4.2", + "gunzip-maybe": "1.4.2", + "hpagent": "1.2.0", + "ioredis": "5.4.1", + "ip-cidr": "4.0.2", + "is-svg": "5.0.1", + "jsdom": "24.1.1", + "json5": "2.2.3", + "jsonld": "8.3.2", + "jsrsasign": "11.1.0", + "katex": "0.16.11", + "koa": "2.15.3", + "koa-body": "6.0.1", + "koa-bodyparser": "4.4.1", + "koa-favicon": "2.1.0", + "koa-json-body": "5.3.0", + "koa-logger": "3.2.1", + "koa-mount": "4.0.0", + "koa-remove-trailing-slashes": "2.0.3", + "koa-send": "5.0.1", + "mfm-js": "0.24.0", + "mime-types": "2.1.35", + "msgpackr": "1.11.0", + "multer": "1.4.5-lts.1", + "nested-property": "4.0.0", + "node-fetch": "3.3.2", + "nodemailer": "6.9.14", + "otpauth": "9.3.1", + "parse5": "7.1.2", + "pg": "8.12.0", + "private-ip": "3.0.2", + "probe-image-size": "7.2.3", + "promise-limit": "2.7.0", + "punycode": "2.3.1", + "pureimage": "0.4.13", + "qrcode": "1.5.3", + "qs": "6.12.3", + "random-seed": "0.3.0", + "ratelimiter": "3.4.1", + "redis-semaphore": "5.6.0", + "reflect-metadata": "0.2.2", + "rename": "1.0.4", + "rndstr": "1.0.0", + "rss-parser": "3.13.0", + "sanitize-html": "2.13.0", + "semver": "7.6.3", + "sharp": "0.33.4", + "stringz": "2.1.0", + "summaly": "2.7.0", + "syslog-pro": "1.0.0", + "tar-stream": "3.1.7", + "tesseract.js": "5.1.0", + "tinycolor2": "1.6.0", + "tmp": "0.2.3", + "typeorm": "0.3.20", + "ulid": "2.3.0", + "unfurl.js": "6.4.0", + "uuid": "10.0.0", + "websocket": "1.0.35", + "xev": "3.0.2" + }, + "devDependencies": { + "@types/adm-zip": "0.5.5", + "@types/async-lock": "1.4.2", + "@types/color-convert": "2.0.3", + "@types/content-disposition": "0.5.8", + "@types/escape-regexp": "0.0.3", + "@types/fluent-ffmpeg": "2.1.24", + "@types/jsdom": "21.1.7", + "@types/jsonld": "1.5.15", + "@types/jsrsasign": "10.5.14", + "@types/katex": "0.16.7", + "@types/koa": "2.15.0", + "@types/koa-bodyparser": "4.3.12", + "@types/koa-cors": "0.0.6", + "@types/koa-favicon": "2.1.3", + "@types/koa-logger": "3.1.5", + "@types/koa-mount": "4.0.5", + "@types/koa-send": "4.1.6", + "@types/koa__cors": "5.0.0", + "@types/koa__multer": "2.0.7", + "@types/koa__router": "12.0.4", + "@types/node": "20.14.13", + "@types/node-fetch": "2.6.11", + "@types/nodemailer": "6.4.15", + "@types/oauth": "0.9.5", + "@types/opencc-js": "1.0.3", + "@types/pg": "8.11.6", + "@types/probe-image-size": "7.2.5", + "@types/pug": "2.0.10", + "@types/punycode": "2.1.4", + "@types/qrcode": "1.5.5", + "@types/qs": "6.9.15", + "@types/random-seed": "0.3.5", + "@types/ratelimiter": "3.4.6", + "@types/rename": "1.0.7", + "@types/sanitize-html": "2.11.0", + "@types/semver": "7.5.8", + "@types/sinonjs__fake-timers": "8.1.5", + "@types/syslog-pro": "1.0.3", + "@types/tinycolor2": "1.4.6", + "@types/tmp": "0.2.6", + "@types/uuid": "10.0.0", + "@types/websocket": "1.0.10", + "@types/ws": "8.5.11", + "cross-env": "7.0.3", + "pug": "3.0.3", + "strict-event-emitter-types": "2.0.0", + "ts-loader": "9.5.1", + "ts-node": "10.9.2", + "tsc-alias": "1.8.10", + "tsconfig-paths": "4.2.0", + "type-fest": "4.23.0", + "typescript": "5.5.4", + "webpack": "5.93.0", + "ws": "8.18.0" + } +} diff --git a/packages/backend/scripts/create-migration.mjs b/packages/backend/scripts/create-migration.mjs new file mode 100644 index 0000000..5881ddb --- /dev/null +++ b/packages/backend/scripts/create-migration.mjs @@ -0,0 +1,11 @@ +import { execa } from "execa"; + +(async () => { + await execa( + "pnpm", + ["typeorm", "migration:create", `src/migration/${process.argv[2]}`], + { + stdio: "inherit", + }, + ); +})(); diff --git a/packages/backend/src/@types/hcaptcha.d.ts b/packages/backend/src/@types/hcaptcha.d.ts new file mode 100644 index 0000000..21f65c6 --- /dev/null +++ b/packages/backend/src/@types/hcaptcha.d.ts @@ -0,0 +1,14 @@ +declare module "hcaptcha" { + interface IVerifyResponse { + success: boolean; + challenge_ts: string; + hostname: string; + credit?: boolean; + "error-codes"?: unknown[]; + } + + export function verify( + secret: string, + token: string, + ): Promise; +} diff --git a/packages/backend/src/@types/http-signature.d.ts b/packages/backend/src/@types/http-signature.d.ts new file mode 100644 index 0000000..3bfece8 --- /dev/null +++ b/packages/backend/src/@types/http-signature.d.ts @@ -0,0 +1,98 @@ +declare module "@peertube/http-signature" { + import type { IncomingMessage, ClientRequest } from "node:http"; + + interface ISignature { + keyId: string; + algorithm: string; + headers: string[]; + signature: string; + } + + interface IOptions { + headers?: string[]; + algorithm?: string; + strict?: boolean; + authorizationHeaderName?: string; + } + + interface IParseRequestOptions extends IOptions { + clockSkew?: number; + } + + interface IParsedSignature { + scheme: string; + params: ISignature; + signingString: string; + algorithm: string; + keyId: string; + } + + type RequestSignerConstructorOptions = + | IRequestSignerConstructorOptionsFromProperties + | IRequestSignerConstructorOptionsFromFunction; + + interface IRequestSignerConstructorOptionsFromProperties { + keyId: string; + key: string | Buffer; + algorithm?: string; + } + + interface IRequestSignerConstructorOptionsFromFunction { + sign?: (data: string, cb: (err: any, sig: ISignature) => void) => void; + } + + class RequestSigner { + constructor(options: RequestSignerConstructorOptions); + + public writeHeader(header: string, value: string): string; + + public writeDateHeader(): string; + + public writeTarget(method: string, path: string): void; + + public sign(cb: (err: any, authz: string) => void): void; + } + + interface ISignRequestOptions extends IOptions { + keyId: string; + key: string; + httpVersion?: string; + } + + export function parse( + request: IncomingMessage, + options?: IParseRequestOptions, + ): IParsedSignature; + export function parseRequest( + request: IncomingMessage, + options?: IParseRequestOptions, + ): IParsedSignature; + + export function sign( + request: ClientRequest, + options: ISignRequestOptions, + ): boolean; + export function signRequest( + request: ClientRequest, + options: ISignRequestOptions, + ): boolean; + export function createSigner(): RequestSigner; + export function isSigner(obj: any): obj is RequestSigner; + + export function sshKeyToPEM(key: string): string; + export function sshKeyFingerprint(key: string): string; + export function pemToRsaSSHKey(pem: string, comment: string): string; + + export function verify( + parsedSignature: IParsedSignature, + pubkey: string | Buffer, + ): boolean; + export function verifySignature( + parsedSignature: IParsedSignature, + pubkey: string | Buffer, + ): boolean; + export function verifyHMAC( + parsedSignature: IParsedSignature, + secret: string, + ): boolean; +} diff --git a/packages/backend/src/@types/koa-json-body.d.ts b/packages/backend/src/@types/koa-json-body.d.ts new file mode 100644 index 0000000..e5282d8 --- /dev/null +++ b/packages/backend/src/@types/koa-json-body.d.ts @@ -0,0 +1,15 @@ +declare module "koa-json-body" { + import type { Middleware } from "koa"; + + interface IKoaJsonBodyOptions { + strict: boolean; + limit: string; + fallback: boolean; + } + + function koaJsonBody(opt?: IKoaJsonBodyOptions): Middleware; + + namespace koaJsonBody {} // Hack + + export = koaJsonBody; +} diff --git a/packages/backend/src/@types/koa-remove-trailing-slashes/index.d.ts b/packages/backend/src/@types/koa-remove-trailing-slashes/index.d.ts new file mode 100644 index 0000000..429d1d5 --- /dev/null +++ b/packages/backend/src/@types/koa-remove-trailing-slashes/index.d.ts @@ -0,0 +1 @@ +declare module "koa-remove-trailing-slashes"; diff --git a/packages/backend/src/@types/langdetect.d.ts b/packages/backend/src/@types/langdetect.d.ts new file mode 100644 index 0000000..bcfa6f5 --- /dev/null +++ b/packages/backend/src/@types/langdetect.d.ts @@ -0,0 +1,7 @@ +declare module "langdetect" { + interface DetectResult { + lang: string; + prob: number; + } + export function detect(words: string): DetectResult[]; +} diff --git a/packages/backend/src/@types/package.json.d.ts b/packages/backend/src/@types/package.json.d.ts new file mode 100644 index 0000000..d8ec636 --- /dev/null +++ b/packages/backend/src/@types/package.json.d.ts @@ -0,0 +1,10 @@ +declare module "*/package.json" { + interface IRepository { + type: string; + url: string; + } + + export const name: string; + export const version: string; + export const repository: IRepository; +} diff --git a/packages/backend/src/boot/index.ts b/packages/backend/src/boot/index.ts new file mode 100644 index 0000000..1ebe0f4 --- /dev/null +++ b/packages/backend/src/boot/index.ts @@ -0,0 +1,96 @@ +import cluster from "node:cluster"; +import chalk from "chalk"; +import Xev from "xev"; + +import Logger from "@/services/logger.js"; +import { inspect } from "node:util"; + +// for typeorm +import "reflect-metadata"; +import { masterMain } from "./master.js"; +import { workerMain } from "./worker.js"; +import os from "node:os"; + +import { initializeRustLogger } from "backend-rs"; + +const logger = new Logger("core", "cyan"); +const clusterLogger = logger.createSubLogger("cluster", "orange", false); +const ev = new Xev(); + +/** + * Init process + */ +export default async function () { + initializeRustLogger(); + + const mode = + process.env.mode && ["web", "queue"].includes(process.env.mode) + ? `(${process.env.mode})` + : ""; + const type = cluster.isPrimary ? "(master)" : "(worker)"; + process.title = `Firefish ${mode} ${type}`; + + if (cluster.isPrimary) { + await masterMain(); + if (cluster.isPrimary) { + ev.mount(); + } + } + + if (cluster.isWorker) { + await workerMain(); + } + + if (cluster.isPrimary) { + // Leave the master process with a marginally lower priority but not too low. + os.setPriority(2); + } + if (cluster.isWorker) { + // Set workers to a much lower priority so that the master process will be + // able to respond to api calls even if the workers gank everything. + os.setPriority(10); + } + + // For when Firefish is started in a child process during unit testing. + // Otherwise, process.send cannot be used, so start it. + if (process.send) { + process.send("ok"); + } +} + +//#region Events + +// Listen new workers +cluster.on("fork", (worker) => { + clusterLogger.debug(`Process forked: [${worker.id}]`); +}); + +// Listen online workers +cluster.on("online", (worker) => { + clusterLogger.debug(`Process is now online: [${worker.id}]`); +}); + +// Listen for dying workers +cluster.on("exit", (worker) => { + // Replace the dead worker, + // we're not sentimental + clusterLogger.error(chalk.red(`[${worker.id}] died :(`)); + cluster.fork(); +}); + +// Display detail of unhandled promise rejection +process.on("unhandledRejection", console.dir); + +// Display detail of uncaught exception +process.on("uncaughtException", (err) => { + try { + logger.error(inspect(err)); + } catch {} +}); + +// Dying away... +process.on("exit", (code) => { + logger.info(`The process is going to exit with code ${code}`); +}); + +//#endregion diff --git a/packages/backend/src/boot/master.ts b/packages/backend/src/boot/master.ts new file mode 100644 index 0000000..801d2cf --- /dev/null +++ b/packages/backend/src/boot/master.ts @@ -0,0 +1,148 @@ +import * as os from "node:os"; +import cluster from "node:cluster"; +import semver from "semver"; + +import Logger from "@/services/logger.js"; +import { + greet, + removeOldAttestationChallenges, + showServerInfo, + updateMetaCache, + updateNodeinfoCache, + type Config, +} from "backend-rs"; +import { config } from "@/config.js"; +import { db, initDb } from "@/db/postgre.js"; +import { inspect } from "node:util"; + +const logger = new Logger("core", "cyan"); +const bootLogger = logger.createSubLogger("boot", "magenta", false); + +/** + * Init master process + */ +export async function masterMain() { + // initialize app + try { + greet(); + showServerInfo(); + showEnvironment(); + showNodejsVersion(); + await connectDb(); + await updateMetaCache(); + } catch (e) { + bootLogger.error( + `Fatal error occurred during initialization:\n${inspect(e)}`, + null, + true, + ); + process.exit(1); + } + + bootLogger.info("Firefish initialized"); + + await spawnWorkers(config.clusterLimits); + + bootLogger.info( + `Now listening on port ${config.port} on ${config.url}`, + null, + true, + ); + + import("../daemons/server-stats.js").then((x) => x.default()); + import("../daemons/queue-stats.js").then((x) => x.default()); + // Update meta cache every 5 minitues + setInterval(() => updateMetaCache(), 1000 * 60 * 5); + // Update nodeinfo cache every hour + setInterval(() => updateNodeinfoCache(), 1000 * 60 * 60); + // Remove old attestation challenges + setInterval(() => removeOldAttestationChallenges(), 1000 * 60 * 30); +} + +function showEnvironment(): void { + const env = process.env.NODE_ENV; + const logger = bootLogger.createSubLogger("env"); + logger.info( + typeof env === "undefined" ? "NODE_ENV is not set" : `NODE_ENV: ${env}`, + ); + + if (env !== "production") { + logger.warn("The environment is not in production mode."); + logger.warn("DO NOT USE THIS IN PRODUCTION!", null, true); + } +} + +function showNodejsVersion(): void { + const nodejsLogger = bootLogger.createSubLogger("nodejs"); + + nodejsLogger.info(`Version ${process.version} detected.`); + + const minVersion = "v18.19.0"; + if (semver.lt(process.version, minVersion)) { + nodejsLogger.error(`At least Node.js ${minVersion} required!`); + process.exit(1); + } +} + +async function connectDb(): Promise { + const dbLogger = bootLogger.createSubLogger("db"); + + // Try to connect to DB + try { + dbLogger.info("Connecting to the database..."); + await initDb(); + const v = await db + .query("SHOW server_version") + .then((x) => x[0].server_version); + dbLogger.info(`Connected: v${v}`); + } catch (e) { + dbLogger.error("Failed to connect to the database", null, true); + dbLogger.error(inspect(e)); + process.exit(1); + } +} + +async function spawnWorkers( + clusterLimits: Config["clusterLimits"], +): Promise { + const cpus = os.cpus().length; + + if (clusterLimits.queue > cpus) { + bootLogger.warn( + "config: queue cluster limit exceeds the number of cpu cores", + ); + } + + if (clusterLimits.web > cpus) { + bootLogger.warn( + "config: web cluster limit exceeds the number of cpu cores", + ); + } + + const total = clusterLimits.queue + clusterLimits.web; + + // workers = ["web", "web", ..., "web", "queue", "queue", ..., "queue"] + const workers = new Array(total); + workers.fill("web", 0, clusterLimits.web); + workers.fill("queue", clusterLimits.web); + + bootLogger.info( + `Starting ${clusterLimits.web} web workers and ${clusterLimits.queue} queue workers (total ${total})...`, + ); + await Promise.all(workers.map((mode) => spawnWorker(mode))); + bootLogger.info("All workers started"); +} + +function spawnWorker(mode: "web" | "queue"): Promise { + return new Promise((res) => { + const worker = cluster.fork({ mode }); + worker.on("message", (message) => { + if (message === "listenFailed") { + bootLogger.error("The server listen failed due to the previous error."); + process.exit(1); + } + if (message !== "ready") return; + res(); + }); + }); +} diff --git a/packages/backend/src/boot/worker.ts b/packages/backend/src/boot/worker.ts new file mode 100644 index 0000000..3b641f8 --- /dev/null +++ b/packages/backend/src/boot/worker.ts @@ -0,0 +1,30 @@ +import cluster from "node:cluster"; +import { initDb } from "@/db/postgre.js"; +import os from "node:os"; + +/** + * Init worker process + */ +export async function workerMain() { + await initDb(); + + if (!process.env.mode || process.env.mode === "web") { + // start server + await import("../server/index.js").then((x) => x.default()); + } + + if (!process.env.mode || process.env.mode === "queue") { + // start job queue + import("../queue/index.js").then((x) => x.default()); + + if (process.env.mode === "queue") { + // if this is an exclusive queue worker, renice to have higher priority + os.setPriority(os.constants.priority.PRIORITY_BELOW_NORMAL); + } + } + + if (cluster.isWorker) { + // Send a 'ready' message to parent process + process.send?.("ready"); + } +} diff --git a/packages/backend/src/config.ts b/packages/backend/src/config.ts new file mode 100644 index 0000000..5adab59 --- /dev/null +++ b/packages/backend/src/config.ts @@ -0,0 +1,3 @@ +import { loadConfig } from "backend-rs"; + +export const config = loadConfig(); diff --git a/packages/backend/src/const.ts b/packages/backend/src/const.ts new file mode 100644 index 0000000..78aafc3 --- /dev/null +++ b/packages/backend/src/const.ts @@ -0,0 +1,97 @@ +import { config } from "@/config.js"; + +// If you change DB_* values, you must also change the DB schema. +/** + * Maximum note text length that can be stored in DB. + * Surrogate pairs count as one + * + * NOTE: this can hypothetically be pushed further + * (up to 250000000), but will likely cause truncations + * and incompatibilities with other servers, + * as well as potential performance issues. + */ +export const DB_MAX_NOTE_TEXT_LENGTH = 100000; + +/** + * Maximum image description length that can be stored in DB. + * Surrogate pairs count as one + */ +export const DB_MAX_IMAGE_COMMENT_LENGTH = 8192; + +export const MAX_NOTE_TEXT_LENGTH = Math.min( + config.maxNoteLength ?? 3000, + DB_MAX_NOTE_TEXT_LENGTH, +); +export const MAX_CAPTION_TEXT_LENGTH = Math.min( + config.maxCaptionLength ?? 1500, + DB_MAX_IMAGE_COMMENT_LENGTH, +); + +export const SECOND = 1000; +export const MINUTE = 60 * SECOND; +export const HOUR = 60 * MINUTE; +export const DAY = 24 * HOUR; + +export const USER_ONLINE_THRESHOLD = 10 * MINUTE; +export const USER_ACTIVE_THRESHOLD = 3 * DAY; + +// List of file types allowed to be viewed directly in the browser +// Anything not included here will be responded as application/octet-stream +// SVG is not allowed because it generates XSS <- we need to fix this and later allow it to be viewed directly +export const FILE_TYPE_BROWSERSAFE = [ + // Images + "image/png", + "image/gif", // TODO: deprecated, but still used by old notes, new gifs should be converted to webp in the future + "image/jpeg", + "image/webp", // TODO: make this the default image format + "image/apng", + "image/bmp", + "image/tiff", + "image/x-icon", + "image/avif", // not as good supported now, but its good to introduce initial support for the future + + // OggS + "audio/opus", + "video/ogg", + "audio/ogg", + "application/ogg", + + // ISO/IEC base media file format + "video/quicktime", + "video/mp4", // TODO: we need to check for av1 later + "video/vnd.avi", // also av1 + "audio/mp4", + "video/x-m4v", + "audio/x-m4a", + "video/3gpp", + "video/3gpp2", + "video/3gp2", + "audio/3gpp", + "audio/3gpp2", + "audio/3gp2", + + "video/mpeg", + "audio/mpeg", + + "video/webm", + "audio/webm", + + "audio/aac", + "audio/x-flac", + "audio/flac", + "audio/vnd.wave", + + "audio/mod", + "audio/x-mod", + "audio/s3m", + "audio/x-s3m", + "audio/xm", + "audio/x-xm", + "audio/it", + "audio/x-it", +]; +/* +https://github.com/sindresorhus/file-type/blob/main/supported.js +https://github.com/sindresorhus/file-type/blob/main/core.js +https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Containers +*/ diff --git a/packages/backend/src/daemons/queue-stats.ts b/packages/backend/src/daemons/queue-stats.ts new file mode 100644 index 0000000..c358518 --- /dev/null +++ b/packages/backend/src/daemons/queue-stats.ts @@ -0,0 +1,60 @@ +import Xev from "xev"; +import { deliverQueue, inboxQueue } from "@/queue/queues.js"; + +const ev = new Xev(); + +const interval = 10000; + +/** + * Report queue stats regularly + */ +export default function () { + const log = [] as any[]; + + ev.on("requestQueueStatsLog", (x) => { + ev.emit(`queueStatsLog:${x.id}`, log.slice(0, x.length || 50)); + }); + + let activeDeliverJobs = 0; + let activeInboxJobs = 0; + + deliverQueue.on("global:active", () => { + activeDeliverJobs++; + }); + + inboxQueue.on("global:active", () => { + activeInboxJobs++; + }); + + async function tick() { + const deliverJobCounts = await deliverQueue.getJobCounts(); + const inboxJobCounts = await inboxQueue.getJobCounts(); + + const stats = { + deliver: { + activeSincePrevTick: activeDeliverJobs, + active: deliverJobCounts.active, + waiting: deliverJobCounts.waiting, + delayed: deliverJobCounts.delayed, + }, + inbox: { + activeSincePrevTick: activeInboxJobs, + active: inboxJobCounts.active, + waiting: inboxJobCounts.waiting, + delayed: inboxJobCounts.delayed, + }, + }; + + ev.emit("queueStats", stats); + + log.unshift(stats); + if (log.length > 200) log.pop(); + + activeDeliverJobs = 0; + activeInboxJobs = 0; + } + + tick(); + + setInterval(tick, interval); +} diff --git a/packages/backend/src/daemons/server-stats.ts b/packages/backend/src/daemons/server-stats.ts new file mode 100644 index 0000000..c85a7a4 --- /dev/null +++ b/packages/backend/src/daemons/server-stats.ts @@ -0,0 +1,32 @@ +import Xev from "xev"; +import { fetchMeta, cpuUsage, memoryUsage } from "backend-rs"; + +const ev = new Xev(); + +/** + * Report server stats regularly + */ +export default async function () { + const log = [] as any[]; + + ev.on("requestServerStatsLog", (x) => { + ev.emit(`serverStatsLog:${x.id}`, log.slice(0, x.length || 50)); + }); + + const instanceMeta = await fetchMeta(); + if (!instanceMeta.enableServerMachineStats) return; + + async function tick() { + const stats = { + cpu: cpuUsage(), + mem: memoryUsage(), + }; + ev.emit("serverStats", stats); + log.unshift(stats); + if (log.length > 200) log.pop(); + } + + tick(); + + setInterval(tick, 3000); +} diff --git a/packages/backend/src/db/logger.ts b/packages/backend/src/db/logger.ts new file mode 100644 index 0000000..28ec65d --- /dev/null +++ b/packages/backend/src/db/logger.ts @@ -0,0 +1,3 @@ +import Logger from "@/services/logger.js"; + +export const dbLogger = new Logger("db"); diff --git a/packages/backend/src/db/postgre.ts b/packages/backend/src/db/postgre.ts new file mode 100644 index 0000000..77813eb --- /dev/null +++ b/packages/backend/src/db/postgre.ts @@ -0,0 +1,239 @@ +// https://github.com/typeorm/typeorm/issues/2400 +import pg from "pg"; +pg.types.setTypeParser(20, Number); + +import type { Logger } from "typeorm"; +import { DataSource } from "typeorm"; +import * as highlight from "cli-highlight"; +import { config } from "@/config.js"; + +import { User } from "@/models/entities/user.js"; +import { DriveFile } from "@/models/entities/drive-file.js"; +import { DriveFolder } from "@/models/entities/drive-folder.js"; +import { AccessToken } from "@/models/entities/access-token.js"; +import { App } from "@/models/entities/app.js"; +import { PollVote } from "@/models/entities/poll-vote.js"; +import { Note } from "@/models/entities/note.js"; +import { NoteReaction } from "@/models/entities/note-reaction.js"; +import { NoteWatching } from "@/models/entities/note-watching.js"; +import { NoteThreadMuting } from "@/models/entities/note-thread-muting.js"; +import { NoteUnread } from "@/models/entities/note-unread.js"; +import { Notification } from "@/models/entities/notification.js"; +import { Meta } from "@/models/entities/meta.js"; +import { Following } from "@/models/entities/following.js"; +import { Instance } from "@/models/entities/instance.js"; +import { Muting } from "@/models/entities/muting.js"; +import { RenoteMuting } from "@/models/entities/renote-muting.js"; +import { ReplyMuting } from "@/models/entities/reply-muting.js"; +import { SwSubscription } from "@/models/entities/sw-subscription.js"; +import { Blocking } from "@/models/entities/blocking.js"; +import { UserList } from "@/models/entities/user-list.js"; +import { UserListJoining } from "@/models/entities/user-list-joining.js"; +import { UserGroup } from "@/models/entities/user-group.js"; +import { UserGroupJoining } from "@/models/entities/user-group-joining.js"; +import { UserGroupInvitation } from "@/models/entities/user-group-invitation.js"; +import { Hashtag } from "@/models/entities/hashtag.js"; +import { NoteFavorite } from "@/models/entities/note-favorite.js"; +import { AbuseUserReport } from "@/models/entities/abuse-user-report.js"; +import { RegistrationTicket } from "@/models/entities/registration-tickets.js"; +import { MessagingMessage } from "@/models/entities/messaging-message.js"; +import { Signin } from "@/models/entities/signin.js"; +import { AuthSession } from "@/models/entities/auth-session.js"; +import { FollowRequest } from "@/models/entities/follow-request.js"; +import { Emoji } from "@/models/entities/emoji.js"; +import { UserNotePining } from "@/models/entities/user-note-pining.js"; +import { Poll } from "@/models/entities/poll.js"; +import { UserKeypair } from "@/models/entities/user-keypair.js"; +import { UserPublickey } from "@/models/entities/user-publickey.js"; +import { UserProfile } from "@/models/entities/user-profile.js"; +import { UserSecurityKey } from "@/models/entities/user-security-key.js"; +import { AttestationChallenge } from "@/models/entities/attestation-challenge.js"; +import { Page } from "@/models/entities/page.js"; +import { PageLike } from "@/models/entities/page-like.js"; +import { GalleryPost } from "@/models/entities/gallery-post.js"; +import { GalleryLike } from "@/models/entities/gallery-like.js"; +import { ModerationLog } from "@/models/entities/moderation-log.js"; +import { UsedUsername } from "@/models/entities/used-username.js"; +import { Announcement } from "@/models/entities/announcement.js"; +import { AnnouncementRead } from "@/models/entities/announcement-read.js"; +import { Clip } from "@/models/entities/clip.js"; +import { ClipNote } from "@/models/entities/clip-note.js"; +import { Antenna } from "@/models/entities/antenna.js"; +import { PromoNote } from "@/models/entities/promo-note.js"; +import { PromoRead } from "@/models/entities/promo-read.js"; +import { Relay } from "@/models/entities/relay.js"; +import { MutedNote } from "@/models/entities/muted-note.js"; +import { Channel } from "@/models/entities/channel.js"; +import { ChannelFollowing } from "@/models/entities/channel-following.js"; +import { ChannelNotePining } from "@/models/entities/channel-note-pining.js"; +import { RegistryItem } from "@/models/entities/registry-item.js"; +import { Ad } from "@/models/entities/ad.js"; +import { PasswordResetRequest } from "@/models/entities/password-reset-request.js"; +import { UserPending } from "@/models/entities/user-pending.js"; +import { Webhook } from "@/models/entities/webhook.js"; +import { UserIp } from "@/models/entities/user-ip.js"; +import { NoteEdit } from "@/models/entities/note-edit.js"; +import { NoteFile } from "@/models/entities/note-file.js"; + +import { entities as charts } from "@/services/chart/entities.js"; +import { dbLogger } from "./logger.js"; + +const sqlLogger = dbLogger.createSubLogger("sql", "gray", false); + +class DbLogger implements Logger { + private highlight(sql: string) { + return highlight.highlight(sql, { + language: "sql", + ignoreIllegals: true, + }); + } + + public logQuery(query: string, parameters?: any[]) { + sqlLogger.trace(this.highlight(query).substring(0, 100)); + } + + public logQueryError(error: string, query: string, parameters?: any[]) { + sqlLogger.error(error); + sqlLogger.trace(this.highlight(query)); + } + + public logQuerySlow(time: number, query: string, parameters?: any[]) { + sqlLogger.trace(this.highlight(query)); + } + + public logSchemaBuild(message: string) { + sqlLogger.info(message); + } + + public log(message: string) { + sqlLogger.info(message); + } + + public logMigration(message: string) { + sqlLogger.info(message); + } +} + +export const entities = [ + Announcement, + AnnouncementRead, + Meta, + Instance, + App, + AuthSession, + AccessToken, + User, + UserProfile, + UserKeypair, + UserPublickey, + UserList, + UserListJoining, + UserGroup, + UserGroupJoining, + UserGroupInvitation, + UserNotePining, + UserSecurityKey, + UsedUsername, + AttestationChallenge, + Following, + FollowRequest, + Muting, + RenoteMuting, + ReplyMuting, + Blocking, + Note, + NoteEdit, + NoteFavorite, + NoteFile, + NoteReaction, + NoteWatching, + NoteThreadMuting, + NoteUnread, + Page, + PageLike, + GalleryPost, + GalleryLike, + DriveFile, + DriveFolder, + Poll, + PollVote, + Notification, + Emoji, + Hashtag, + SwSubscription, + AbuseUserReport, + RegistrationTicket, + MessagingMessage, + Signin, + ModerationLog, + Clip, + ClipNote, + Antenna, + PromoNote, + PromoRead, + Relay, + MutedNote, + Channel, + ChannelFollowing, + ChannelNotePining, + RegistryItem, + Ad, + PasswordResetRequest, + UserPending, + Webhook, + UserIp, + ...charts, +]; + +const log = process.env.NODE_ENV !== "production"; + +export const db = new DataSource({ + type: "postgres", + host: config.db.host, + port: config.db.port, + username: config.db.user, + password: config.db.pass, + database: config.db.db, + extra: { + statement_timeout: 1000 * 30, + ...config.db.extra, + }, + synchronize: process.env.NODE_ENV === "test", + dropSchema: process.env.NODE_ENV === "test", + cache: !config.db.disableCache + ? { + type: "ioredis", + options: { + host: config.redis.host, + port: config.redis.port, + family: config.redis.family == null ? 0 : config.redis.family, + username: config.redis.user ?? "default", + password: config.redis.pass, + keyPrefix: `${config.redisKeyPrefix}:query:`, + db: config.redis.db || 0, + tls: config.redis.tls, + }, + } + : false, + logging: log, + logger: log ? new DbLogger() : undefined, + maxQueryExecutionTime: 3000, + entities: entities, + migrations: ["../../migration/*.js"], +}); + +export async function initDb(force = false) { + if (force) { + if (db.isInitialized) { + await db.destroy(); + } + await db.initialize(); + return; + } + + if (db.isInitialized) { + // nop + } else { + await db.initialize(); + } +} diff --git a/packages/backend/src/db/redis.ts b/packages/backend/src/db/redis.ts new file mode 100644 index 0000000..72c23d8 --- /dev/null +++ b/packages/backend/src/db/redis.ts @@ -0,0 +1,24 @@ +import Redis from "ioredis"; +import { config } from "@/config.js"; + +export function createConnection() { + let source = config.redis; + if (config.cacheServer) { + source = config.cacheServer; + } + return new Redis({ + port: source.port, + host: source.host, + family: source.family ?? 0, + password: source.pass, + username: source.user ?? "default", + keyPrefix: `${config.redisKeyPrefix}:`, + db: source.db || 0, + tls: source.tls, + }); +} + +export const subscriber = createConnection(); +subscriber.subscribe(config.host); + +export const redisClient = createConnection(); diff --git a/packages/backend/src/global.d.ts b/packages/backend/src/global.d.ts new file mode 100644 index 0000000..6c5a22e --- /dev/null +++ b/packages/backend/src/global.d.ts @@ -0,0 +1,2 @@ +// biome-ignore lint/suspicious/noExplicitAny: i have no idea +type FIXME = any; diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts new file mode 100644 index 0000000..284a360 --- /dev/null +++ b/packages/backend/src/index.ts @@ -0,0 +1,14 @@ +/** + * Firefish Entry Point + */ + +import { EventEmitter } from "node:events"; +import { inspect } from "node:util"; +import boot from "./boot/index.js"; + +Error.stackTraceLimit = Number.POSITIVE_INFINITY; +EventEmitter.defaultMaxListeners = 128; + +boot().catch((err) => { + console.error(inspect(err)); +}); diff --git a/packages/backend/src/mfm/from-html.ts b/packages/backend/src/mfm/from-html.ts new file mode 100644 index 0000000..b00d144 --- /dev/null +++ b/packages/backend/src/mfm/from-html.ts @@ -0,0 +1,255 @@ +import { URL } from "node:url"; +import * as parse5 from "parse5"; +import * as TreeAdapter from "../../node_modules/parse5/dist/tree-adapters/default.js"; + +const treeAdapter = TreeAdapter.defaultTreeAdapter; + +const urlRegex = /^https?:\/\/[\w\/:%#@$&?!()\[\]~.,=+\-]+/; +const urlRegexFull = /^https?:\/\/[\w\/:%#@$&?!()\[\]~.,=+\-]+$/; + +const MAX_FLAT = 100; + +export function fromHtml(html: string, hashtagNames?: string[]): string { + // some AP servers like Pixelfed use br tags as well as newlines + const dom = parse5.parseFragment(html.replace(/\r?\n/gi, "\n")); + + return toMFM(dom.childNodes); + + function toMFM(childNodes: TreeAdapter.ChildNode[], background = ""): string { + return appendChildren(childNodes, background).join("").trim(); + } + + /** + * We only exclude text containing asterisks, since the other marks can almost be considered intentionally used. + */ + function escapeAmbiguousMfmMarks(text: string) { + return text.includes("*") ? `${text}` : text; + } + + /** + * Get only the text, ignoring all formatting inside + * @param node + * @returns + */ + function getText(node: TreeAdapter.Node): string { + if (treeAdapter.isTextNode(node)) return node.value; + if (!treeAdapter.isElementNode(node)) return ""; + if (node.nodeName === "br") return "\n"; + + if (node.childNodes) { + return node.childNodes.map((n) => getText(n)).join(""); + } + + return ""; + } + + function appendChildren( + childNodes: TreeAdapter.ChildNode[], + background = "", + ): string[] { + if (childNodes) { + return childNodes + .map((n, index) => analyze(n, index + 1, background)) + .flat(MAX_FLAT); + } else { + return [""]; + } + } + + /** + * + * @param node + * @param index + * @param background Determine whether the context is `