From de2dbc2903a383f092756d3d2ad1ff3753361e76 Mon Sep 17 00:00:00 2001 From: Daniel Holmgren Date: Fri, 5 Jan 2024 17:06:54 -0600 Subject: [PATCH] Split out moderation backend (#1970) * mv appview * copy * finalize copy * package names * big WIP * first pass at mod servce * some tidy * tidy & fix compiler errors * rename to ozone, db migrations, add to dev-env & pds cfg * getRecord & getRepo mostly working * fix open handle * get record tests all working * moderation events working * statuses working * tidy test suite * search repos * server & db tests * moderation tests * wip daemon + push events * pds fanout working * fix db test * fanning takedowns out to appview * rm try/catch * bsky moderation test * introduce mod subject wrappers * more tidy * refactor event reversal * tidy some db stuff * tidy * rename service to mod-service * fix test * tidy config * refactor auth in bsky * wip patching up auto-mod * add label ingester in appview * fix a couple build issues * fix some timing bugs * tidy polling logic * fix up tests * fix some pds tests * eslint ignore * fix ozone tests * move seeds to dev-env * move images around * fix db schemas * use service auth admin reqs * fix remaining tests * auth tests bsky * another test * random tidy * fix up search * clean up bsky mod service * more tidy * default attempts to 0 * tidy old test * random tidy * tidy package.json * tidy logger * takedownId -> takedownRef * misc pr feedback * split daemon out from ozone application * fix blob takedown mgiration * refactor ozone config * do push event fanout on write instead of on read * make suspend error work again * add attempts check & add supporting index * fix takedown test ref * get tests working * rm old test * fix timing bug in event pusher tests * attempt another fix for timing bug * await req * service files * remove labelerDid cfg * update snaps for labeler did + some cfg changes * fix more snaps * pnpm i * build ozone images * build * make label provider optional * fix build issues * fix build * fix build * build pds * build on ghcr * fix syntax in entry * another fix * use correct import * export logger * remove event reverser * adjust push event fanout * push out multiple * remove builds --- .eslintignore | 1 + .../workflows/build-and-push-bsky-aws.yaml | 1 - .../workflows/build-and-push-ozone-aws.yaml | 54 + .../workflows/build-and-push-ozone-ghcr.yaml | 56 + Makefile | 1 + lexicons/com/atproto/admin/defs.json | 1 + .../com/atproto/admin/getAccountInfos.json | 36 + packages/api/src/client/index.ts | 13 + packages/api/src/client/lexicons.ts | 46 + .../client/types/com/atproto/admin/defs.ts | 1 + .../com/atproto/admin/getAccountInfos.ts | 36 + .../bsky/src/api/app/bsky/actor/getProfile.ts | 23 +- .../src/api/app/bsky/actor/getProfiles.ts | 4 +- .../src/api/app/bsky/actor/getSuggestions.ts | 4 +- .../src/api/app/bsky/actor/searchActors.ts | 25 +- .../app/bsky/actor/searchActorsTypeahead.ts | 4 +- .../src/api/app/bsky/feed/getActorFeeds.ts | 4 +- .../src/api/app/bsky/feed/getActorLikes.ts | 4 +- .../src/api/app/bsky/feed/getAuthorFeed.ts | 5 +- .../bsky/src/api/app/bsky/feed/getFeed.ts | 4 +- .../src/api/app/bsky/feed/getFeedGenerator.ts | 4 +- .../api/app/bsky/feed/getFeedGenerators.ts | 4 +- .../src/api/app/bsky/feed/getFeedSkeleton.ts | 4 +- .../bsky/src/api/app/bsky/feed/getLikes.ts | 4 +- .../bsky/src/api/app/bsky/feed/getListFeed.ts | 4 +- .../src/api/app/bsky/feed/getPostThread.ts | 4 +- .../bsky/src/api/app/bsky/feed/getPosts.ts | 4 +- .../src/api/app/bsky/feed/getRepostedBy.ts | 4 +- .../api/app/bsky/feed/getSuggestedFeeds.ts | 4 +- .../bsky/src/api/app/bsky/feed/getTimeline.ts | 4 +- .../bsky/src/api/app/bsky/feed/searchPosts.ts | 4 +- .../bsky/src/api/app/bsky/graph/getBlocks.ts | 4 +- .../src/api/app/bsky/graph/getFollowers.ts | 16 +- .../bsky/src/api/app/bsky/graph/getFollows.ts | 16 +- .../bsky/src/api/app/bsky/graph/getList.ts | 4 +- .../src/api/app/bsky/graph/getListBlocks.ts | 4 +- .../src/api/app/bsky/graph/getListMutes.ts | 4 +- .../bsky/src/api/app/bsky/graph/getLists.ts | 4 +- .../bsky/src/api/app/bsky/graph/getMutes.ts | 4 +- .../bsky/graph/getSuggestedFollowsByActor.ts | 4 +- .../bsky/src/api/app/bsky/graph/muteActor.ts | 4 +- .../src/api/app/bsky/graph/muteActorList.ts | 4 +- .../src/api/app/bsky/graph/unmuteActor.ts | 4 +- .../src/api/app/bsky/graph/unmuteActorList.ts | 4 +- .../app/bsky/notification/getUnreadCount.ts | 4 +- .../bsky/notification/listNotifications.ts | 4 +- .../api/app/bsky/notification/registerPush.ts | 8 +- .../api/app/bsky/notification/updateSeen.ts | 4 +- .../unspecced/getPopularFeedGenerators.ts | 4 +- .../app/bsky/unspecced/getTimelineSkeleton.ts | 4 +- packages/bsky/src/api/blob-resolver.ts | 9 +- .../com/atproto/admin/emitModerationEvent.ts | 220 - .../api/com/atproto/admin/getAccountInfos.ts | 42 + .../com/atproto/admin/getModerationEvent.ts | 19 - .../api/com/atproto/admin/getSubjectStatus.ts | 73 + .../src/api/com/atproto/admin/searchRepos.ts | 27 - .../com/atproto/admin/updateSubjectStatus.ts | 74 + .../com/atproto/moderation/createReport.ts | 53 - packages/bsky/src/api/index.ts | 22 +- packages/bsky/src/auth-verifier.ts | 275 + packages/bsky/src/auto-moderator/index.ts | 198 +- packages/bsky/src/config.ts | 31 +- packages/bsky/src/context.ts | 41 +- packages/bsky/src/db/database-schema.ts | 4 +- ...13T181744386Z-moderation-subject-appeal.ts | 23 - .../20231220T225126090Z-blob-takedowns.ts | 66 + packages/bsky/src/db/migrations/index.ts | 2 +- .../db/periodic-moderation-event-reversal.ts | 125 - packages/bsky/src/db/tables/actor.ts | 2 +- packages/bsky/src/db/tables/blob-takedown.ts | 9 + packages/bsky/src/db/tables/moderation.ts | 3 - packages/bsky/src/db/tables/record.ts | 2 +- packages/bsky/src/db/util.ts | 6 +- packages/bsky/src/index.ts | 13 +- packages/bsky/src/indexer/config.ts | 17 +- packages/bsky/src/indexer/index.ts | 9 - packages/bsky/src/ingester/config.ts | 7 + packages/bsky/src/ingester/context.ts | 6 + packages/bsky/src/ingester/index.ts | 13 +- .../bsky/src/ingester/label-subscription.ts | 76 + packages/bsky/src/lexicon/index.ts | 12 + packages/bsky/src/lexicon/lexicons.ts | 46 + .../lexicon/types/com/atproto/admin/defs.ts | 1 + .../com/atproto/admin/getAccountInfos.ts | 46 + packages/bsky/src/migrate-moderation-data.ts | 414 - packages/bsky/src/services/actor/index.ts | 22 + .../bsky/src/services/moderation/index.ts | 675 +- .../src/services/moderation/pagination.ts | 96 - .../bsky/src/services/moderation/views.ts | 551 -- packages/bsky/src/util/date.ts | 14 - .../feed-generation.test.ts.snap | 32 +- .../tests/__snapshots__/indexing.test.ts.snap | 20 +- packages/bsky/tests/admin/admin-auth.test.ts | 164 + packages/bsky/tests/admin/moderation.test.ts | 1012 +-- packages/bsky/tests/algos/hot-classic.test.ts | 5 +- packages/bsky/tests/auth.test.ts | 3 +- .../auto-moderator/fuzzy-matcher.test.ts | 8 +- .../bsky/tests/auto-moderator/labeler.test.ts | 81 +- .../tests/auto-moderator/takedowns.test.ts | 49 +- packages/bsky/tests/blob-resolver.test.ts | 3 +- packages/bsky/tests/daemon.test.ts | 3 +- packages/bsky/tests/db.test.ts | 2 +- packages/bsky/tests/did-cache.test.ts | 5 +- packages/bsky/tests/feed-generation.test.ts | 11 +- .../bsky/tests/handle-invalidation.test.ts | 5 +- packages/bsky/tests/image/server.test.ts | 3 +- packages/bsky/tests/image/sharp.test.ts | 2 +- packages/bsky/tests/indexing.test.ts | 4 +- .../bsky/tests/notification-server.test.ts | 3 +- .../bsky/tests/pipeline/backpressure.test.ts | 2 +- packages/bsky/tests/pipeline/reingest.test.ts | 2 +- .../bsky/tests/pipeline/repartition.test.ts | 2 +- packages/bsky/tests/reprocessing.test.ts | 3 +- packages/bsky/tests/server.test.ts | 3 +- packages/bsky/tests/subscription/repo.test.ts | 3 +- .../__snapshots__/author-feed.test.ts.snap | 102 +- .../__snapshots__/block-lists.test.ts.snap | 2 +- .../views/__snapshots__/blocks.test.ts.snap | 10 +- .../__snapshots__/list-feed.test.ts.snap | 26 +- .../__snapshots__/mute-lists.test.ts.snap | 8 +- .../views/__snapshots__/mutes.test.ts.snap | 8 +- .../__snapshots__/notifications.test.ts.snap | 14 +- .../views/__snapshots__/posts.test.ts.snap | 16 +- .../views/__snapshots__/thread.test.ts.snap | 40 +- .../views/__snapshots__/timeline.test.ts.snap | 386 +- packages/bsky/tests/views/actor-likes.test.ts | 3 +- .../bsky/tests/views/actor-search.test.ts | 12 +- .../tests/views/admin/repo-search.test.ts | 133 - packages/bsky/tests/views/author-feed.test.ts | 37 +- packages/bsky/tests/views/block-lists.test.ts | 5 +- packages/bsky/tests/views/blocks.test.ts | 3 +- packages/bsky/tests/views/follows.test.ts | 37 +- packages/bsky/tests/views/likes.test.ts | 3 +- packages/bsky/tests/views/list-feed.test.ts | 37 +- packages/bsky/tests/views/mute-lists.test.ts | 5 +- packages/bsky/tests/views/mutes.test.ts | 9 +- .../bsky/tests/views/notifications.test.ts | 20 +- packages/bsky/tests/views/posts.test.ts | 3 +- packages/bsky/tests/views/profile.test.ts | 30 +- packages/bsky/tests/views/reposts.test.ts | 3 +- .../tests/views/suggested-follows.test.ts | 3 +- packages/bsky/tests/views/suggestions.test.ts | 3 +- packages/bsky/tests/views/thread.test.ts | 129 +- .../bsky/tests/views/threadgating.test.ts | 3 +- packages/bsky/tests/views/timeline.test.ts | 41 +- packages/common-web/src/times.ts | 7 + .../src/config/util.ts => common/src/env.ts} | 2 +- packages/common/src/index.ts | 1 + packages/dev-env/package.json | 1 + packages/dev-env/src/bsky.ts | 20 +- packages/dev-env/src/index.ts | 2 +- packages/dev-env/src/mock/index.ts | 4 +- packages/dev-env/src/network-no-appview.ts | 2 +- packages/dev-env/src/network.ts | 51 +- packages/dev-env/src/ozone.ts | 112 + packages/dev-env/src/pds.ts | 2 + .../seeds => dev-env/src/seed}/author-feed.ts | 2 +- .../tests/seeds => dev-env/src/seed}/basic.ts | 11 +- .../src/{seed-client.ts => seed/client.ts} | 6 +- .../seeds => dev-env/src/seed}/follows.ts | 2 +- .../src/seed/img}/at.png | Bin .../src/seed/img}/hd-key.jpg | Bin .../src/seed/img}/key-alt.jpg | Bin .../src/seed/img}/key-landscape-large.jpg | Bin .../src/seed/img}/key-landscape-small.jpg | Bin .../src/seed/img}/key-portrait-large.jpg | Bin .../src/seed/img}/key-portrait-small.jpg | Bin packages/dev-env/src/seed/index.ts | 9 + .../tests/seeds => dev-env/src/seed}/likes.ts | 2 +- .../seeds => dev-env/src/seed}/reposts.ts | 2 +- .../seeds => dev-env/src/seed}/users-bulk.ts | 4 +- .../tests/seeds => dev-env/src/seed}/users.ts | 2 +- packages/dev-env/src/types.ts | 14 +- packages/ozone/README.md | 15 + packages/ozone/babel.config.js | 3 + packages/ozone/bin/migration-create.ts | 38 + packages/ozone/build.js | 18 + packages/ozone/jest.config.js | 6 + packages/ozone/package.json | 70 + .../src/api/admin/emitModerationEvent.ts | 130 + .../ozone/src/api/admin/getModerationEvent.ts | 19 + .../src/api}/admin/getRecord.ts | 25 +- .../src/api}/admin/getRepo.ts | 17 +- .../src/api}/admin/queryModerationEvents.ts | 14 +- .../src/api}/admin/queryModerationStatuses.ts | 14 +- packages/ozone/src/api/admin/searchRepos.ts | 42 + .../atproto => ozone/src/api}/admin/util.ts | 10 +- packages/ozone/src/api/health.ts | 20 + packages/ozone/src/api/index.ts | 28 + .../ozone/src/api/moderation/createReport.ts | 41 + .../src/api}/moderation/util.ts | 36 +- packages/ozone/src/api/temp/fetchLabels.ts | 29 + packages/ozone/src/api/well-known.ts | 35 + packages/{bsky => ozone}/src/auth.ts | 24 +- packages/ozone/src/background.ts | 35 + packages/ozone/src/config/config.ts | 84 + packages/ozone/src/config/env.ts | 41 + packages/ozone/src/config/index.ts | 3 + packages/ozone/src/config/secrets.ts | 23 + packages/ozone/src/context.ts | 180 + packages/ozone/src/daemon/context.ts | 90 + packages/ozone/src/daemon/event-pusher.ts | 296 + packages/ozone/src/daemon/event-reverser.ts | 74 + packages/ozone/src/daemon/index.ts | 33 + packages/ozone/src/db/index.ts | 197 + .../db/migrations/20231219T205730722Z-init.ts | 164 + packages/ozone/src/db/migrations/index.ts | 5 + packages/ozone/src/db/migrations/provider.ts | 25 + packages/ozone/src/db/pagination.ts | 216 + .../ozone/src/db/schema/blob_push_event.ts | 21 + packages/ozone/src/db/schema/index.ts | 18 + packages/ozone/src/db/schema/label.ts | 12 + .../ozone/src/db/schema/moderation_event.ts | 35 + .../db/schema/moderation_subject_status.ts | 32 + .../ozone/src/db/schema/record_push_event.ts | 21 + .../ozone/src/db/schema/repo_push_event.ts | 19 + packages/ozone/src/db/types.ts | 15 + packages/ozone/src/error.ts | 12 + packages/ozone/src/index.ts | 102 + packages/ozone/src/lexicon/index.ts | 1626 ++++ packages/ozone/src/lexicon/lexicons.ts | 8065 +++++++++++++++++ .../src/lexicon/types/app/bsky/actor/defs.ts | 235 + .../types/app/bsky/actor/getPreferences.ts | 44 + .../types/app/bsky/actor/getProfile.ts | 41 + .../types/app/bsky/actor/getProfiles.ts | 46 + .../types/app/bsky/actor/getSuggestions.ts | 48 + .../lexicon/types/app/bsky/actor/profile.ts | 32 + .../types/app/bsky/actor/putPreferences.ts | 39 + .../types/app/bsky/actor/searchActors.ts | 52 + .../app/bsky/actor/searchActorsTypeahead.ts | 50 + .../lexicon/types/app/bsky/embed/external.ts | 82 + .../lexicon/types/app/bsky/embed/images.ts | 96 + .../lexicon/types/app/bsky/embed/record.ts | 120 + .../types/app/bsky/embed/recordWithMedia.ts | 53 + .../src/lexicon/types/app/bsky/feed/defs.ts | 308 + .../app/bsky/feed/describeFeedGenerator.ts | 80 + .../lexicon/types/app/bsky/feed/generator.ts | 35 + .../types/app/bsky/feed/getActorFeeds.ts | 49 + .../types/app/bsky/feed/getActorLikes.ts | 50 + .../types/app/bsky/feed/getAuthorFeed.ts | 56 + .../lexicon/types/app/bsky/feed/getFeed.ts | 50 + .../types/app/bsky/feed/getFeedGenerator.ts | 48 + .../types/app/bsky/feed/getFeedGenerators.ts | 46 + .../types/app/bsky/feed/getFeedSkeleton.ts | 50 + .../lexicon/types/app/bsky/feed/getLikes.ts | 69 + .../types/app/bsky/feed/getListFeed.ts | 50 + .../types/app/bsky/feed/getPostThread.ts | 53 + .../lexicon/types/app/bsky/feed/getPosts.ts | 46 + .../types/app/bsky/feed/getRepostedBy.ts | 52 + .../types/app/bsky/feed/getSuggestedFeeds.ts | 48 + .../types/app/bsky/feed/getTimeline.ts | 49 + .../src/lexicon/types/app/bsky/feed/like.ts | 26 + .../src/lexicon/types/app/bsky/feed/post.ts | 102 + .../src/lexicon/types/app/bsky/feed/repost.ts | 27 + .../types/app/bsky/feed/searchPosts.ts | 54 + .../lexicon/types/app/bsky/feed/threadgate.ts | 84 + .../src/lexicon/types/app/bsky/graph/block.ts | 26 + .../src/lexicon/types/app/bsky/graph/defs.ts | 104 + .../lexicon/types/app/bsky/graph/follow.ts | 26 + .../lexicon/types/app/bsky/graph/getBlocks.ts | 48 + .../types/app/bsky/graph/getFollowers.ts | 50 + .../types/app/bsky/graph/getFollows.ts | 50 + .../lexicon/types/app/bsky/graph/getList.ts | 50 + .../types/app/bsky/graph/getListBlocks.ts | 48 + .../types/app/bsky/graph/getListMutes.ts | 48 + .../lexicon/types/app/bsky/graph/getLists.ts | 49 + .../lexicon/types/app/bsky/graph/getMutes.ts | 48 + .../bsky/graph/getSuggestedFollowsByActor.ts | 46 + .../src/lexicon/types/app/bsky/graph/list.ts | 36 + .../lexicon/types/app/bsky/graph/listblock.ts | 26 + .../lexicon/types/app/bsky/graph/listitem.ts | 27 + .../lexicon/types/app/bsky/graph/muteActor.ts | 38 + .../types/app/bsky/graph/muteActorList.ts | 38 + .../types/app/bsky/graph/unmuteActor.ts | 38 + .../types/app/bsky/graph/unmuteActorList.ts | 38 + .../app/bsky/notification/getUnreadCount.ts | 45 + .../bsky/notification/listNotifications.ts | 87 + .../app/bsky/notification/registerPush.ts | 41 + .../types/app/bsky/notification/updateSeen.ts | 38 + .../lexicon/types/app/bsky/richtext/facet.ts | 97 + .../lexicon/types/app/bsky/unspecced/defs.ts | 41 + .../types/app/bsky/unspecced/getPopular.ts | 49 + .../unspecced/getPopularFeedGenerators.ts | 49 + .../app/bsky/unspecced/getTimelineSkeleton.ts | 49 + .../bsky/unspecced/searchActorsSkeleton.ts | 56 + .../app/bsky/unspecced/searchPostsSkeleton.ts | 54 + .../lexicon/types/com/atproto/admin/defs.ts | 719 ++ .../types/com/atproto/admin/deleteAccount.ts | 38 + .../atproto/admin/disableAccountInvites.ts | 40 + .../com/atproto/admin/disableInviteCodes.ts | 39 + .../com/atproto/admin/emitModerationEvent.ts | 66 + .../com/atproto/admin/enableAccountInvites.ts | 40 + .../types/com/atproto/admin/getAccountInfo.ts | 41 + .../com/atproto/admin/getAccountInfos.ts | 46 + .../types/com/atproto/admin/getInviteCodes.ts | 49 + .../com/atproto/admin/getModerationEvent.ts | 41 + .../types/com/atproto/admin/getRecord.ts | 43 + .../types/com/atproto/admin/getRepo.ts | 42 + .../com/atproto/admin/getSubjectStatus.ts | 54 + .../atproto/admin/queryModerationEvents.ts | 56 + .../atproto/admin/queryModerationStatuses.ts | 72 + .../types/com/atproto/admin/searchRepos.ts | 51 + .../types/com/atproto/admin/sendEmail.ts | 54 + .../com/atproto/admin/updateAccountEmail.ts | 40 + .../com/atproto/admin/updateAccountHandle.ts | 39 + .../com/atproto/admin/updateSubjectStatus.ts | 61 + .../com/atproto/identity/resolveHandle.ts | 46 + .../com/atproto/identity/updateHandle.ts | 38 + .../lexicon/types/com/atproto/label/defs.ts | 73 + .../types/com/atproto/label/queryLabels.ts | 52 + .../com/atproto/label/subscribeLabels.ts | 67 + .../com/atproto/moderation/createReport.ts | 65 + .../types/com/atproto/moderation/defs.ts | 32 + .../types/com/atproto/repo/applyWrites.ts | 103 + .../types/com/atproto/repo/createRecord.ts | 62 + .../types/com/atproto/repo/deleteRecord.ts | 48 + .../types/com/atproto/repo/describeRepo.ts | 50 + .../types/com/atproto/repo/getRecord.ts | 54 + .../types/com/atproto/repo/listRecords.ts | 77 + .../types/com/atproto/repo/putRecord.ts | 64 + .../types/com/atproto/repo/strongRef.ts | 26 + .../types/com/atproto/repo/uploadBlob.ts | 47 + .../types/com/atproto/server/confirmEmail.ts | 40 + .../types/com/atproto/server/createAccount.ts | 67 + .../com/atproto/server/createAppPassword.ts | 69 + .../com/atproto/server/createInviteCode.ts | 50 + .../com/atproto/server/createInviteCodes.ts | 72 + .../types/com/atproto/server/createSession.ts | 58 + .../lexicon/types/com/atproto/server/defs.ts | 48 + .../types/com/atproto/server/deleteAccount.ts | 41 + .../types/com/atproto/server/deleteSession.ts | 31 + .../com/atproto/server/describeServer.ts | 63 + .../atproto/server/getAccountInviteCodes.ts | 48 + .../types/com/atproto/server/getSession.ts | 47 + .../com/atproto/server/listAppPasswords.ts | 62 + .../com/atproto/server/refreshSession.ts | 48 + .../atproto/server/requestAccountDelete.ts | 31 + .../server/requestEmailConfirmation.ts | 31 + .../com/atproto/server/requestEmailUpdate.ts | 43 + .../atproto/server/requestPasswordReset.ts | 38 + .../com/atproto/server/reserveSigningKey.ts | 51 + .../types/com/atproto/server/resetPassword.ts | 40 + .../com/atproto/server/revokeAppPassword.ts | 38 + .../types/com/atproto/server/updateEmail.ts | 41 + .../lexicon/types/com/atproto/sync/getBlob.ts | 43 + .../types/com/atproto/sync/getBlocks.ts | 42 + .../types/com/atproto/sync/getCheckout.ts | 41 + .../lexicon/types/com/atproto/sync/getHead.ts | 47 + .../types/com/atproto/sync/getLatestCommit.ts | 48 + .../types/com/atproto/sync/getRecord.ts | 45 + .../lexicon/types/com/atproto/sync/getRepo.ts | 43 + .../types/com/atproto/sync/listBlobs.ts | 51 + .../types/com/atproto/sync/listRepos.ts | 66 + .../types/com/atproto/sync/notifyOfUpdate.ts | 39 + .../types/com/atproto/sync/requestCrawl.ts | 39 + .../types/com/atproto/sync/subscribeRepos.ts | 161 + .../types/com/atproto/temp/fetchLabels.ts | 47 + .../types/com/atproto/temp/importRepo.ts | 45 + .../types/com/atproto/temp/pushBlob.ts | 39 + .../types/com/atproto/temp/transferAccount.ts | 62 + packages/ozone/src/lexicon/util.ts | 13 + packages/ozone/src/logger.ts | 19 + packages/ozone/src/mod-service/index.ts | 758 ++ .../src/mod-service}/status.ts | 17 +- packages/ozone/src/mod-service/subject.ts | 136 + .../src/mod-service}/types.ts | 25 +- packages/ozone/src/mod-service/views.ts | 531 ++ packages/ozone/src/util.ts | 26 + packages/ozone/test.env | 2 + .../__snapshots__/get-record.test.ts.snap | 0 .../__snapshots__/get-repo.test.ts.snap | 0 .../moderation-events.test.ts.snap | 118 +- .../moderation-statuses.test.ts.snap | 0 .../__snapshots__/moderation.test.ts.snap | 8 +- packages/ozone/tests/_util.ts | 192 + packages/ozone/tests/db.test.ts | 184 + .../admin => ozone/tests}/get-record.test.ts | 9 +- .../admin => ozone/tests}/get-repo.test.ts | 9 +- .../tests}/moderation-appeals.test.ts | 16 +- .../tests}/moderation-events.test.ts | 15 +- .../tests}/moderation-statuses.test.ts | 11 +- packages/ozone/tests/moderation.test.ts | 961 ++ .../admin => ozone/tests}/repo-search.test.ts | 7 +- packages/ozone/tests/server.test.ts | 76 + packages/ozone/tsconfig.build.json | 4 + packages/ozone/tsconfig.json | 21 + .../pds/src/api/app/bsky/actor/getProfile.ts | 2 +- .../pds/src/api/app/bsky/actor/getProfiles.ts | 2 +- .../src/api/app/bsky/actor/getSuggestions.ts | 2 +- .../src/api/app/bsky/actor/searchActors.ts | 2 +- .../app/bsky/actor/searchActorsTypeahead.ts | 2 +- .../src/api/app/bsky/feed/getActorFeeds.ts | 2 +- .../src/api/app/bsky/feed/getActorLikes.ts | 2 +- .../src/api/app/bsky/feed/getAuthorFeed.ts | 2 +- packages/pds/src/api/app/bsky/feed/getFeed.ts | 2 +- .../src/api/app/bsky/feed/getFeedGenerator.ts | 2 +- .../api/app/bsky/feed/getFeedGenerators.ts | 2 +- .../pds/src/api/app/bsky/feed/getLikes.ts | 2 +- .../pds/src/api/app/bsky/feed/getListFeed.ts | 2 +- .../src/api/app/bsky/feed/getPostThread.ts | 4 +- .../pds/src/api/app/bsky/feed/getPosts.ts | 2 +- .../src/api/app/bsky/feed/getRepostedBy.ts | 2 +- .../api/app/bsky/feed/getSuggestedFeeds.ts | 2 +- .../pds/src/api/app/bsky/feed/getTimeline.ts | 2 +- .../pds/src/api/app/bsky/feed/searchPosts.ts | 2 +- .../pds/src/api/app/bsky/graph/getBlocks.ts | 2 +- .../src/api/app/bsky/graph/getFollowers.ts | 2 +- .../pds/src/api/app/bsky/graph/getFollows.ts | 2 +- .../pds/src/api/app/bsky/graph/getList.ts | 2 +- .../src/api/app/bsky/graph/getListBlocks.ts | 2 +- .../src/api/app/bsky/graph/getListMutes.ts | 2 +- .../pds/src/api/app/bsky/graph/getLists.ts | 2 +- .../pds/src/api/app/bsky/graph/getMutes.ts | 2 +- .../bsky/graph/getSuggestedFollowsByActor.ts | 2 +- .../pds/src/api/app/bsky/graph/muteActor.ts | 2 +- .../src/api/app/bsky/graph/muteActorList.ts | 2 +- .../pds/src/api/app/bsky/graph/unmuteActor.ts | 2 +- .../src/api/app/bsky/graph/unmuteActorList.ts | 2 +- .../app/bsky/notification/getUnreadCount.ts | 2 +- .../bsky/notification/listNotifications.ts | 2 +- .../api/app/bsky/notification/updateSeen.ts | 2 +- .../unspecced/getPopularFeedGenerators.ts | 2 +- .../com/atproto/admin/emitModerationEvent.ts | 2 +- .../api/com/atproto/admin/getAccountInfo.ts | 5 +- .../com/atproto/admin/getModerationEvent.ts | 2 +- .../src/api/com/atproto/admin/getRecord.ts | 2 +- .../pds/src/api/com/atproto/admin/getRepo.ts | 2 +- .../api/com/atproto/admin/getSubjectStatus.ts | 6 +- .../atproto/admin/queryModerationEvents.ts | 2 +- .../atproto/admin/queryModerationStatuses.ts | 2 +- .../src/api/com/atproto/admin/searchRepos.ts | 2 +- .../com/atproto/admin/updateSubjectStatus.ts | 4 - .../com/atproto/moderation/createReport.ts | 11 +- packages/pds/src/auth-verifier.ts | 17 +- packages/pds/src/config/config.ts | 23 +- packages/pds/src/config/env.ts | 12 +- packages/pds/src/context.ts | 21 +- packages/pds/src/lexicon/index.ts | 12 + packages/pds/src/lexicon/lexicons.ts | 46 + .../lexicon/types/com/atproto/admin/defs.ts | 1 + .../com/atproto/admin/getAccountInfos.ts | 46 + packages/pds/src/util/date.ts | 14 - packages/pds/tests/admin-auth.test.ts | 145 + packages/pds/tests/blob-deletes.test.ts | 16 +- packages/pds/tests/crud.test.ts | 4 +- packages/pds/tests/file-uploads.test.ts | 16 +- packages/pds/tests/moderation.test.ts | 117 +- .../proxied/__snapshots__/admin.test.ts.snap | 125 +- .../__snapshots__/feedgen.test.ts.snap | 50 +- .../proxied/__snapshots__/views.test.ts.snap | 228 +- packages/pds/tests/proxied/admin.test.ts | 6 +- .../tests/proxied/read-after-write.test.ts | 4 +- packages/pds/tests/sample-img/at.png | Bin 251838 -> 0 bytes packages/pds/tests/sample-img/hd-key.jpg | Bin 1317339 -> 0 bytes packages/pds/tests/sample-img/key-alt.jpg | Bin 12736 -> 0 bytes .../tests/sample-img/key-landscape-large.jpg | Bin 263263 -> 0 bytes .../tests/sample-img/key-landscape-small.jpg | Bin 4114 -> 0 bytes .../tests/sample-img/key-portrait-large.jpg | Bin 262697 -> 0 bytes .../tests/sample-img/key-portrait-small.jpg | Bin 3976 -> 0 bytes packages/pds/tests/seeds/basic.ts | 6 +- packages/pds/tests/transfer-repo.test.ts | 2 +- pnpm-lock.yaml | 155 +- services/bsky/api.js | 10 - services/ozone/Dockerfile | 55 + services/ozone/api.js | 58 + services/ozone/daemon.js | 25 + services/ozone/package.json | 8 + tsconfig.json | 1 + 468 files changed, 26610 insertions(+), 4857 deletions(-) create mode 100644 .github/workflows/build-and-push-ozone-aws.yaml create mode 100644 .github/workflows/build-and-push-ozone-ghcr.yaml create mode 100644 lexicons/com/atproto/admin/getAccountInfos.json create mode 100644 packages/api/src/client/types/com/atproto/admin/getAccountInfos.ts delete mode 100644 packages/bsky/src/api/com/atproto/admin/emitModerationEvent.ts create mode 100644 packages/bsky/src/api/com/atproto/admin/getAccountInfos.ts delete mode 100644 packages/bsky/src/api/com/atproto/admin/getModerationEvent.ts create mode 100644 packages/bsky/src/api/com/atproto/admin/getSubjectStatus.ts delete mode 100644 packages/bsky/src/api/com/atproto/admin/searchRepos.ts create mode 100644 packages/bsky/src/api/com/atproto/admin/updateSubjectStatus.ts delete mode 100644 packages/bsky/src/api/com/atproto/moderation/createReport.ts create mode 100644 packages/bsky/src/auth-verifier.ts delete mode 100644 packages/bsky/src/db/migrations/20231213T181744386Z-moderation-subject-appeal.ts create mode 100644 packages/bsky/src/db/migrations/20231220T225126090Z-blob-takedowns.ts delete mode 100644 packages/bsky/src/db/periodic-moderation-event-reversal.ts create mode 100644 packages/bsky/src/db/tables/blob-takedown.ts create mode 100644 packages/bsky/src/ingester/label-subscription.ts create mode 100644 packages/bsky/src/lexicon/types/com/atproto/admin/getAccountInfos.ts delete mode 100644 packages/bsky/src/migrate-moderation-data.ts delete mode 100644 packages/bsky/src/services/moderation/pagination.ts delete mode 100644 packages/bsky/src/services/moderation/views.ts delete mode 100644 packages/bsky/src/util/date.ts create mode 100644 packages/bsky/tests/admin/admin-auth.test.ts delete mode 100644 packages/bsky/tests/views/admin/repo-search.test.ts rename packages/{pds/src/config/util.ts => common/src/env.ts} (92%) create mode 100644 packages/dev-env/src/ozone.ts rename packages/{bsky/tests/seeds => dev-env/src/seed}/author-feed.ts (97%) rename packages/{bsky/tests/seeds => dev-env/src/seed}/basic.ts (92%) rename packages/dev-env/src/{seed-client.ts => seed/client.ts} (98%) rename packages/{bsky/tests/seeds => dev-env/src/seed}/follows.ts (96%) rename packages/{bsky/tests/sample-img => dev-env/src/seed/img}/at.png (100%) rename packages/{bsky/tests/sample-img => dev-env/src/seed/img}/hd-key.jpg (100%) rename packages/{bsky/tests/sample-img => dev-env/src/seed/img}/key-alt.jpg (100%) rename packages/{bsky/tests/sample-img => dev-env/src/seed/img}/key-landscape-large.jpg (100%) rename packages/{bsky/tests/sample-img => dev-env/src/seed/img}/key-landscape-small.jpg (100%) rename packages/{bsky/tests/sample-img => dev-env/src/seed/img}/key-portrait-large.jpg (100%) rename packages/{bsky/tests/sample-img => dev-env/src/seed/img}/key-portrait-small.jpg (100%) create mode 100644 packages/dev-env/src/seed/index.ts rename packages/{bsky/tests/seeds => dev-env/src/seed}/likes.ts (96%) rename packages/{bsky/tests/seeds => dev-env/src/seed}/reposts.ts (92%) rename packages/{bsky/tests/seeds => dev-env/src/seed}/users-bulk.ts (99%) rename packages/{bsky/tests/seeds => dev-env/src/seed}/users.ts (96%) create mode 100644 packages/ozone/README.md create mode 100644 packages/ozone/babel.config.js create mode 100644 packages/ozone/bin/migration-create.ts create mode 100644 packages/ozone/build.js create mode 100644 packages/ozone/jest.config.js create mode 100644 packages/ozone/package.json create mode 100644 packages/ozone/src/api/admin/emitModerationEvent.ts create mode 100644 packages/ozone/src/api/admin/getModerationEvent.ts rename packages/{bsky/src/api/com/atproto => ozone/src/api}/admin/getRecord.ts (57%) rename packages/{bsky/src/api/com/atproto => ozone/src/api}/admin/getRepo.ts (68%) rename packages/{bsky/src/api/com/atproto => ozone/src/api}/admin/queryModerationEvents.ts (70%) rename packages/{bsky/src/api/com/atproto => ozone/src/api}/admin/queryModerationStatuses.ts (76%) create mode 100644 packages/ozone/src/api/admin/searchRepos.ts rename packages/{bsky/src/api/com/atproto => ozone/src/api}/admin/util.ts (86%) create mode 100644 packages/ozone/src/api/health.ts create mode 100644 packages/ozone/src/api/index.ts create mode 100644 packages/ozone/src/api/moderation/createReport.ts rename packages/{bsky/src/api/com/atproto => ozone/src/api}/moderation/util.ts (59%) create mode 100644 packages/ozone/src/api/temp/fetchLabels.ts create mode 100644 packages/ozone/src/api/well-known.ts rename packages/{bsky => ozone}/src/auth.ts (86%) create mode 100644 packages/ozone/src/background.ts create mode 100644 packages/ozone/src/config/config.ts create mode 100644 packages/ozone/src/config/env.ts create mode 100644 packages/ozone/src/config/index.ts create mode 100644 packages/ozone/src/config/secrets.ts create mode 100644 packages/ozone/src/context.ts create mode 100644 packages/ozone/src/daemon/context.ts create mode 100644 packages/ozone/src/daemon/event-pusher.ts create mode 100644 packages/ozone/src/daemon/event-reverser.ts create mode 100644 packages/ozone/src/daemon/index.ts create mode 100644 packages/ozone/src/db/index.ts create mode 100644 packages/ozone/src/db/migrations/20231219T205730722Z-init.ts create mode 100644 packages/ozone/src/db/migrations/index.ts create mode 100644 packages/ozone/src/db/migrations/provider.ts create mode 100644 packages/ozone/src/db/pagination.ts create mode 100644 packages/ozone/src/db/schema/blob_push_event.ts create mode 100644 packages/ozone/src/db/schema/index.ts create mode 100644 packages/ozone/src/db/schema/label.ts create mode 100644 packages/ozone/src/db/schema/moderation_event.ts create mode 100644 packages/ozone/src/db/schema/moderation_subject_status.ts create mode 100644 packages/ozone/src/db/schema/record_push_event.ts create mode 100644 packages/ozone/src/db/schema/repo_push_event.ts create mode 100644 packages/ozone/src/db/types.ts create mode 100644 packages/ozone/src/error.ts create mode 100644 packages/ozone/src/index.ts create mode 100644 packages/ozone/src/lexicon/index.ts create mode 100644 packages/ozone/src/lexicon/lexicons.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/actor/defs.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/actor/getPreferences.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/actor/getProfile.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/actor/getProfiles.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/actor/getSuggestions.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/actor/profile.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/actor/putPreferences.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/actor/searchActors.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/actor/searchActorsTypeahead.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/embed/external.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/embed/images.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/embed/record.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/embed/recordWithMedia.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/feed/defs.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/feed/describeFeedGenerator.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/feed/generator.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/feed/getActorFeeds.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/feed/getActorLikes.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/feed/getAuthorFeed.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/feed/getFeed.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/feed/getFeedGenerator.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/feed/getFeedGenerators.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/feed/getFeedSkeleton.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/feed/getLikes.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/feed/getListFeed.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/feed/getPostThread.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/feed/getPosts.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/feed/getRepostedBy.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/feed/getSuggestedFeeds.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/feed/getTimeline.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/feed/like.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/feed/post.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/feed/repost.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/feed/searchPosts.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/feed/threadgate.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/graph/block.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/graph/defs.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/graph/follow.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/graph/getBlocks.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/graph/getFollowers.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/graph/getFollows.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/graph/getList.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/graph/getListBlocks.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/graph/getListMutes.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/graph/getLists.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/graph/getMutes.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/graph/getSuggestedFollowsByActor.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/graph/list.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/graph/listblock.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/graph/listitem.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/graph/muteActor.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/graph/muteActorList.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/graph/unmuteActor.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/graph/unmuteActorList.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/notification/getUnreadCount.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/notification/listNotifications.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/notification/registerPush.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/notification/updateSeen.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/richtext/facet.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/unspecced/defs.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/unspecced/getPopular.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/unspecced/getPopularFeedGenerators.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/unspecced/getTimelineSkeleton.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/unspecced/searchActorsSkeleton.ts create mode 100644 packages/ozone/src/lexicon/types/app/bsky/unspecced/searchPostsSkeleton.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/admin/defs.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/admin/deleteAccount.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/admin/disableAccountInvites.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/admin/disableInviteCodes.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/admin/emitModerationEvent.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/admin/enableAccountInvites.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/admin/getAccountInfo.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/admin/getAccountInfos.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/admin/getInviteCodes.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/admin/getModerationEvent.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/admin/getRecord.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/admin/getRepo.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/admin/getSubjectStatus.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/admin/queryModerationEvents.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/admin/queryModerationStatuses.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/admin/searchRepos.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/admin/sendEmail.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/admin/updateAccountEmail.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/admin/updateAccountHandle.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/admin/updateSubjectStatus.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/identity/resolveHandle.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/identity/updateHandle.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/label/defs.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/label/queryLabels.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/label/subscribeLabels.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/moderation/createReport.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/moderation/defs.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/repo/applyWrites.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/repo/createRecord.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/repo/deleteRecord.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/repo/describeRepo.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/repo/getRecord.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/repo/listRecords.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/repo/putRecord.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/repo/strongRef.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/repo/uploadBlob.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/server/confirmEmail.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/server/createAccount.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/server/createAppPassword.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/server/createInviteCode.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/server/createInviteCodes.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/server/createSession.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/server/defs.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/server/deleteAccount.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/server/deleteSession.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/server/describeServer.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/server/getAccountInviteCodes.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/server/getSession.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/server/listAppPasswords.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/server/refreshSession.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/server/requestAccountDelete.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/server/requestEmailConfirmation.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/server/requestEmailUpdate.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/server/requestPasswordReset.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/server/reserveSigningKey.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/server/resetPassword.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/server/revokeAppPassword.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/server/updateEmail.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/sync/getBlob.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/sync/getBlocks.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/sync/getCheckout.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/sync/getHead.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/sync/getLatestCommit.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/sync/getRecord.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/sync/getRepo.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/sync/listBlobs.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/sync/listRepos.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/sync/notifyOfUpdate.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/sync/requestCrawl.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/sync/subscribeRepos.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/temp/fetchLabels.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/temp/importRepo.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/temp/pushBlob.ts create mode 100644 packages/ozone/src/lexicon/types/com/atproto/temp/transferAccount.ts create mode 100644 packages/ozone/src/lexicon/util.ts create mode 100644 packages/ozone/src/logger.ts create mode 100644 packages/ozone/src/mod-service/index.ts rename packages/{bsky/src/services/moderation => ozone/src/mod-service}/status.ts (94%) create mode 100644 packages/ozone/src/mod-service/subject.ts rename packages/{bsky/src/services/moderation => ozone/src/mod-service}/types.ts (64%) create mode 100644 packages/ozone/src/mod-service/views.ts create mode 100644 packages/ozone/src/util.ts create mode 100644 packages/ozone/test.env rename packages/{bsky/tests/admin => ozone/tests}/__snapshots__/get-record.test.ts.snap (100%) rename packages/{bsky/tests/admin => ozone/tests}/__snapshots__/get-repo.test.ts.snap (100%) rename packages/{bsky/tests/admin => ozone/tests}/__snapshots__/moderation-events.test.ts.snap (54%) rename packages/{bsky/tests/admin => ozone/tests}/__snapshots__/moderation-statuses.test.ts.snap (100%) rename packages/{bsky/tests/admin => ozone/tests}/__snapshots__/moderation.test.ts.snap (97%) create mode 100644 packages/ozone/tests/_util.ts create mode 100644 packages/ozone/tests/db.test.ts rename packages/{bsky/tests/admin => ozone/tests}/get-record.test.ts (92%) rename packages/{bsky/tests/admin => ozone/tests}/get-repo.test.ts (93%) rename packages/{bsky/tests/admin => ozone/tests}/moderation-appeals.test.ts (94%) rename packages/{bsky/tests/admin => ozone/tests}/moderation-events.test.ts (94%) rename packages/{bsky/tests/admin => ozone/tests}/moderation-statuses.test.ts (93%) create mode 100644 packages/ozone/tests/moderation.test.ts rename packages/{bsky/tests/admin => ozone/tests}/repo-search.test.ts (94%) create mode 100644 packages/ozone/tests/server.test.ts create mode 100644 packages/ozone/tsconfig.build.json create mode 100644 packages/ozone/tsconfig.json create mode 100644 packages/pds/src/lexicon/types/com/atproto/admin/getAccountInfos.ts delete mode 100644 packages/pds/src/util/date.ts create mode 100644 packages/pds/tests/admin-auth.test.ts delete mode 100644 packages/pds/tests/sample-img/at.png delete mode 100644 packages/pds/tests/sample-img/hd-key.jpg delete mode 100644 packages/pds/tests/sample-img/key-alt.jpg delete mode 100644 packages/pds/tests/sample-img/key-landscape-large.jpg delete mode 100644 packages/pds/tests/sample-img/key-landscape-small.jpg delete mode 100644 packages/pds/tests/sample-img/key-portrait-large.jpg delete mode 100644 packages/pds/tests/sample-img/key-portrait-small.jpg create mode 100644 services/ozone/Dockerfile create mode 100644 services/ozone/api.js create mode 100644 services/ozone/daemon.js create mode 100644 services/ozone/package.json diff --git a/.eslintignore b/.eslintignore index fc66834cbc0..ec0195a5f8c 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,4 @@ packages/api/src/client packages/bsky/src/lexicon packages/pds/src/lexicon +packages/ozone/src/lexicon diff --git a/.github/workflows/build-and-push-bsky-aws.yaml b/.github/workflows/build-and-push-bsky-aws.yaml index 9df469c0615..36b1aa23cb3 100644 --- a/.github/workflows/build-and-push-bsky-aws.yaml +++ b/.github/workflows/build-and-push-bsky-aws.yaml @@ -3,7 +3,6 @@ on: push: branches: - main - - appeal-report env: REGISTRY: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_REGISTRY }} USERNAME: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_USERNAME }} diff --git a/.github/workflows/build-and-push-ozone-aws.yaml b/.github/workflows/build-and-push-ozone-aws.yaml new file mode 100644 index 00000000000..53f95c5b731 --- /dev/null +++ b/.github/workflows/build-and-push-ozone-aws.yaml @@ -0,0 +1,54 @@ +name: build-and-push-ozone-aws +on: + push: + branches: + - main +env: + REGISTRY: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_REGISTRY }} + USERNAME: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_USERNAME }} + PASSWORD: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_PASSWORD }} + IMAGE_NAME: ozone + +jobs: + ozone-container-aws: + if: github.repository == 'bluesky-social/atproto' + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + id-token: write + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Setup Docker buildx + uses: docker/setup-buildx-action@v2 + + - name: Log into registry ${{ env.REGISTRY }} + uses: docker/login-action@v2 + with: + registry: ${{ env.REGISTRY }} + username: ${{ env.USERNAME}} + password: ${{ env.PASSWORD }} + + - name: Extract Docker metadata + id: meta + uses: docker/metadata-action@v4 + with: + images: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=sha,enable=true,priority=100,prefix=,suffix=,format=long + + - name: Build and push Docker image + id: build-and-push + uses: docker/build-push-action@v4 + with: + context: . + push: ${{ github.event_name != 'pull_request' }} + file: ./services/ozone/Dockerfile + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/.github/workflows/build-and-push-ozone-ghcr.yaml b/.github/workflows/build-and-push-ozone-ghcr.yaml new file mode 100644 index 00000000000..ab37093963d --- /dev/null +++ b/.github/workflows/build-and-push-ozone-ghcr.yaml @@ -0,0 +1,56 @@ +name: build-and-push-ozone-ghcr +on: + push: + branches: + - main +env: + REGISTRY: ghcr.io + USERNAME: ${{ github.actor }} + PASSWORD: ${{ secrets.GITHUB_TOKEN }} + + # github.repository as / + IMAGE_NAME: ${{ github.repository }} + +jobs: + ozone-container-ghcr: + if: github.repository == 'bluesky-social/atproto' + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + id-token: write + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Setup Docker buildx + uses: docker/setup-buildx-action@v2 + + - name: Log into registry ${{ env.REGISTRY }} + uses: docker/login-action@v2 + with: + registry: ${{ env.REGISTRY }} + username: ${{ env.USERNAME }} + password: ${{ env.PASSWORD }} + + - name: Extract Docker metadata + id: meta + uses: docker/metadata-action@v4 + with: + images: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=sha,enable=true,priority=100,prefix=ozone:,suffix=,format=long + + - name: Build and push Docker image + id: build-and-push + uses: docker/build-push-action@v4 + with: + context: . + push: ${{ github.event_name != 'pull_request' }} + file: ./services/ozone/Dockerfile + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/Makefile b/Makefile index 0236fafe069..2ec47b2892e 100644 --- a/Makefile +++ b/Makefile @@ -31,6 +31,7 @@ codegen: ## Re-generate packages from lexicon/ files cd packages/api; pnpm run codegen cd packages/pds; pnpm run codegen cd packages/bsky; pnpm run codegen + cd packages/ozone; pnpm run codegen # clean up codegen output pnpm format diff --git a/lexicons/com/atproto/admin/defs.json b/lexicons/com/atproto/admin/defs.json index 23448b7ac8d..55a8b32be53 100644 --- a/lexicons/com/atproto/admin/defs.json +++ b/lexicons/com/atproto/admin/defs.json @@ -294,6 +294,7 @@ "did": { "type": "string", "format": "did" }, "handle": { "type": "string", "format": "handle" }, "email": { "type": "string" }, + "relatedRecords": { "type": "array", "items": { "type": "unknown" } }, "indexedAt": { "type": "string", "format": "datetime" }, "invitedBy": { "type": "ref", diff --git a/lexicons/com/atproto/admin/getAccountInfos.json b/lexicons/com/atproto/admin/getAccountInfos.json new file mode 100644 index 00000000000..45d97e08bd6 --- /dev/null +++ b/lexicons/com/atproto/admin/getAccountInfos.json @@ -0,0 +1,36 @@ +{ + "lexicon": 1, + "id": "com.atproto.admin.getAccountInfos", + "defs": { + "main": { + "type": "query", + "description": "Get details about some accounts.", + "parameters": { + "type": "params", + "required": ["dids"], + "properties": { + "dids": { + "type": "array", + "items": { "type": "string", "format": "did" } + } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["infos"], + "properties": { + "infos": { + "type": "array", + "items": { + "type": "ref", + "ref": "com.atproto.admin.defs#accountView" + } + } + } + } + } + } + } +} diff --git a/packages/api/src/client/index.ts b/packages/api/src/client/index.ts index df55181aef0..fb56cd251a0 100644 --- a/packages/api/src/client/index.ts +++ b/packages/api/src/client/index.ts @@ -14,6 +14,7 @@ import * as ComAtprotoAdminDisableInviteCodes from './types/com/atproto/admin/di import * as ComAtprotoAdminEmitModerationEvent from './types/com/atproto/admin/emitModerationEvent' import * as ComAtprotoAdminEnableAccountInvites from './types/com/atproto/admin/enableAccountInvites' import * as ComAtprotoAdminGetAccountInfo from './types/com/atproto/admin/getAccountInfo' +import * as ComAtprotoAdminGetAccountInfos from './types/com/atproto/admin/getAccountInfos' import * as ComAtprotoAdminGetInviteCodes from './types/com/atproto/admin/getInviteCodes' import * as ComAtprotoAdminGetModerationEvent from './types/com/atproto/admin/getModerationEvent' import * as ComAtprotoAdminGetRecord from './types/com/atproto/admin/getRecord' @@ -153,6 +154,7 @@ export * as ComAtprotoAdminDisableInviteCodes from './types/com/atproto/admin/di export * as ComAtprotoAdminEmitModerationEvent from './types/com/atproto/admin/emitModerationEvent' export * as ComAtprotoAdminEnableAccountInvites from './types/com/atproto/admin/enableAccountInvites' export * as ComAtprotoAdminGetAccountInfo from './types/com/atproto/admin/getAccountInfo' +export * as ComAtprotoAdminGetAccountInfos from './types/com/atproto/admin/getAccountInfos' export * as ComAtprotoAdminGetInviteCodes from './types/com/atproto/admin/getInviteCodes' export * as ComAtprotoAdminGetModerationEvent from './types/com/atproto/admin/getModerationEvent' export * as ComAtprotoAdminGetRecord from './types/com/atproto/admin/getRecord' @@ -441,6 +443,17 @@ export class AdminNS { }) } + getAccountInfos( + params?: ComAtprotoAdminGetAccountInfos.QueryParams, + opts?: ComAtprotoAdminGetAccountInfos.CallOptions, + ): Promise { + return this._service.xrpc + .call('com.atproto.admin.getAccountInfos', params, undefined, opts) + .catch((e) => { + throw ComAtprotoAdminGetAccountInfos.toKnownErr(e) + }) + } + getInviteCodes( params?: ComAtprotoAdminGetInviteCodes.QueryParams, opts?: ComAtprotoAdminGetInviteCodes.CallOptions, diff --git a/packages/api/src/client/lexicons.ts b/packages/api/src/client/lexicons.ts index c0e7e51fddc..258d297c69e 100644 --- a/packages/api/src/client/lexicons.ts +++ b/packages/api/src/client/lexicons.ts @@ -436,6 +436,12 @@ export const schemaDict = { email: { type: 'string', }, + relatedRecords: { + type: 'array', + items: { + type: 'unknown', + }, + }, indexedAt: { type: 'string', format: 'datetime', @@ -1046,6 +1052,45 @@ export const schemaDict = { }, }, }, + ComAtprotoAdminGetAccountInfos: { + lexicon: 1, + id: 'com.atproto.admin.getAccountInfos', + defs: { + main: { + type: 'query', + description: 'Get details about some accounts.', + parameters: { + type: 'params', + required: ['dids'], + properties: { + dids: { + type: 'array', + items: { + type: 'string', + format: 'did', + }, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['infos'], + properties: { + infos: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#accountView', + }, + }, + }, + }, + }, + }, + }, + }, ComAtprotoAdminGetInviteCodes: { lexicon: 1, id: 'com.atproto.admin.getInviteCodes', @@ -7875,6 +7920,7 @@ export const ids = { ComAtprotoAdminEmitModerationEvent: 'com.atproto.admin.emitModerationEvent', ComAtprotoAdminEnableAccountInvites: 'com.atproto.admin.enableAccountInvites', ComAtprotoAdminGetAccountInfo: 'com.atproto.admin.getAccountInfo', + ComAtprotoAdminGetAccountInfos: 'com.atproto.admin.getAccountInfos', ComAtprotoAdminGetInviteCodes: 'com.atproto.admin.getInviteCodes', ComAtprotoAdminGetModerationEvent: 'com.atproto.admin.getModerationEvent', ComAtprotoAdminGetRecord: 'com.atproto.admin.getRecord', diff --git a/packages/api/src/client/types/com/atproto/admin/defs.ts b/packages/api/src/client/types/com/atproto/admin/defs.ts index d4b35ae8056..aea27e86905 100644 --- a/packages/api/src/client/types/com/atproto/admin/defs.ts +++ b/packages/api/src/client/types/com/atproto/admin/defs.ts @@ -255,6 +255,7 @@ export interface AccountView { did: string handle: string email?: string + relatedRecords?: {}[] indexedAt: string invitedBy?: ComAtprotoServerDefs.InviteCode invites?: ComAtprotoServerDefs.InviteCode[] diff --git a/packages/api/src/client/types/com/atproto/admin/getAccountInfos.ts b/packages/api/src/client/types/com/atproto/admin/getAccountInfos.ts new file mode 100644 index 00000000000..353f3150854 --- /dev/null +++ b/packages/api/src/client/types/com/atproto/admin/getAccountInfos.ts @@ -0,0 +1,36 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { Headers, XRPCError } from '@atproto/xrpc' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { isObj, hasProp } from '../../../../util' +import { lexicons } from '../../../../lexicons' +import { CID } from 'multiformats/cid' +import * as ComAtprotoAdminDefs from './defs' + +export interface QueryParams { + dids: string[] +} + +export type InputSchema = undefined + +export interface OutputSchema { + infos: ComAtprotoAdminDefs.AccountView[] + [k: string]: unknown +} + +export interface CallOptions { + headers?: Headers +} + +export interface Response { + success: boolean + headers: Headers + data: OutputSchema +} + +export function toKnownErr(e: any) { + if (e instanceof XRPCError) { + } + return e +} diff --git a/packages/bsky/src/api/app/bsky/actor/getProfile.ts b/packages/bsky/src/api/app/bsky/actor/getProfile.ts index 0dacf02bcf5..47c2f8f8ca7 100644 --- a/packages/bsky/src/api/app/bsky/actor/getProfile.ts +++ b/packages/bsky/src/api/app/bsky/actor/getProfile.ts @@ -16,18 +16,16 @@ import { ModerationService } from '../../../../services/moderation' export default function (server: Server, ctx: AppContext) { const getProfile = createPipeline(skeleton, hydration, noRules, presentation) server.app.bsky.actor.getProfile({ - auth: ctx.authOptionalAccessOrRoleVerifier, + auth: ctx.authVerifier.optionalStandardOrRole, handler: async ({ auth, params, res }) => { const db = ctx.db.getReplica() const actorService = ctx.services.actor(db) const modService = ctx.services.moderation(ctx.db.getPrimary()) - const viewer = 'did' in auth.credentials ? auth.credentials.did : null - const canViewTakendownProfile = - auth.credentials.type === 'role' && auth.credentials.triage + const { viewer, canViewTakedowns } = ctx.authVerifier.parseCreds(auth) const [result, repoRev] = await Promise.allSettled([ getProfile( - { ...params, viewer, canViewTakendownProfile }, + { ...params, viewer, canViewTakedowns }, { db, actorService, modService }, ), actorService.getRepoRev(viewer), @@ -52,15 +50,14 @@ const skeleton = async ( params: Params, ctx: Context, ): Promise => { - const { actorService, modService } = ctx - const { canViewTakendownProfile } = params + const { actorService } = ctx + const { canViewTakedowns } = params const actor = await actorService.getActor(params.actor, true) if (!actor) { throw new InvalidRequestError('Profile not found') } - if (!canViewTakendownProfile && softDeleted(actor)) { - const isSuspended = await modService.isSubjectSuspended(actor.did) - if (isSuspended) { + if (!canViewTakedowns && softDeleted(actor)) { + if (actor.takedownRef?.includes('SUSPEND')) { throw new InvalidRequestError( 'Account has been temporarily suspended', 'AccountTakedown', @@ -78,10 +75,10 @@ const skeleton = async ( const hydration = async (state: SkeletonState, ctx: Context) => { const { actorService } = ctx const { params, actor } = state - const { viewer, canViewTakendownProfile } = params + const { viewer, canViewTakedowns } = params const hydration = await actorService.views.profileDetailHydration( [actor.did], - { viewer, includeSoftDeleted: canViewTakendownProfile }, + { viewer, includeSoftDeleted: canViewTakedowns }, ) return { ...state, ...hydration } } @@ -110,7 +107,7 @@ type Context = { type Params = QueryParams & { viewer: string | null - canViewTakendownProfile: boolean + canViewTakedowns: boolean } type SkeletonState = { params: Params; actor: Actor } diff --git a/packages/bsky/src/api/app/bsky/actor/getProfiles.ts b/packages/bsky/src/api/app/bsky/actor/getProfiles.ts index f2e0eb3fd50..21ca13949d2 100644 --- a/packages/bsky/src/api/app/bsky/actor/getProfiles.ts +++ b/packages/bsky/src/api/app/bsky/actor/getProfiles.ts @@ -13,11 +13,11 @@ import { createPipeline, noRules } from '../../../../pipeline' export default function (server: Server, ctx: AppContext) { const getProfile = createPipeline(skeleton, hydration, noRules, presentation) server.app.bsky.actor.getProfiles({ - auth: ctx.authOptionalVerifier, + auth: ctx.authVerifier.standardOptional, handler: async ({ auth, params, res }) => { const db = ctx.db.getReplica() const actorService = ctx.services.actor(db) - const viewer = auth.credentials.did + const viewer = auth.credentials.iss const [result, repoRev] = await Promise.all([ getProfile({ ...params, viewer }, { db, actorService }), diff --git a/packages/bsky/src/api/app/bsky/actor/getSuggestions.ts b/packages/bsky/src/api/app/bsky/actor/getSuggestions.ts index f68ba68eb66..df580521af9 100644 --- a/packages/bsky/src/api/app/bsky/actor/getSuggestions.ts +++ b/packages/bsky/src/api/app/bsky/actor/getSuggestions.ts @@ -17,12 +17,12 @@ export default function (server: Server, ctx: AppContext) { presentation, ) server.app.bsky.actor.getSuggestions({ - auth: ctx.authOptionalVerifier, + auth: ctx.authVerifier.standardOptional, handler: async ({ params, auth }) => { const db = ctx.db.getReplica() const actorService = ctx.services.actor(db) const graphService = ctx.services.graph(db) - const viewer = auth.credentials.did + const viewer = auth.credentials.iss const result = await getSuggestions( { ...params, viewer }, diff --git a/packages/bsky/src/api/app/bsky/actor/searchActors.ts b/packages/bsky/src/api/app/bsky/actor/searchActors.ts index 66e934ac0b3..bcc30a6bd66 100644 --- a/packages/bsky/src/api/app/bsky/actor/searchActors.ts +++ b/packages/bsky/src/api/app/bsky/actor/searchActors.ts @@ -1,18 +1,13 @@ -import { sql } from 'kysely' import AppContext from '../../../../context' import { Server } from '../../../../lexicon' -import { - cleanQuery, - getUserSearchQuery, - SearchKeyset, -} from '../../../../services/util/search' +import { cleanQuery } from '../../../../services/util/search' export default function (server: Server, ctx: AppContext) { server.app.bsky.actor.searchActors({ - auth: ctx.authOptionalVerifier, + auth: ctx.authVerifier.standardOptional, handler: async ({ auth, params }) => { const { cursor, limit } = params - const requester = auth.credentials.did + const requester = auth.credentials.iss const rawQuery = params.q ?? params.term const query = cleanQuery(rawQuery || '') const db = ctx.db.getReplica('search') @@ -29,15 +24,11 @@ export default function (server: Server, ctx: AppContext) { results = res.data.actors.map((a) => a.did) resCursor = res.data.cursor } else { - const res = query - ? await getUserSearchQuery(db, { query, limit, cursor }) - .select('distance') - .selectAll('actor') - .execute() - : [] - results = res.map((a) => a.did) - const keyset = new SearchKeyset(sql``, sql``) - resCursor = keyset.packFromResult(res) + const res = await ctx.services + .actor(ctx.db.getReplica('search')) + .getSearchResults({ query, limit, cursor }) + results = res.results.map((a) => a.did) + resCursor = res.cursor } const actors = await ctx.services diff --git a/packages/bsky/src/api/app/bsky/actor/searchActorsTypeahead.ts b/packages/bsky/src/api/app/bsky/actor/searchActorsTypeahead.ts index da612edcc87..6a3167fd2d0 100644 --- a/packages/bsky/src/api/app/bsky/actor/searchActorsTypeahead.ts +++ b/packages/bsky/src/api/app/bsky/actor/searchActorsTypeahead.ts @@ -7,10 +7,10 @@ import { export default function (server: Server, ctx: AppContext) { server.app.bsky.actor.searchActorsTypeahead({ - auth: ctx.authOptionalVerifier, + auth: ctx.authVerifier.standardOptional, handler: async ({ params, auth }) => { const { limit } = params - const requester = auth.credentials.did + const requester = auth.credentials.iss const rawQuery = params.q ?? params.term const query = cleanQuery(rawQuery || '') const db = ctx.db.getReplica('search') diff --git a/packages/bsky/src/api/app/bsky/feed/getActorFeeds.ts b/packages/bsky/src/api/app/bsky/feed/getActorFeeds.ts index 7a28e4efe67..bc4ecd7caac 100644 --- a/packages/bsky/src/api/app/bsky/feed/getActorFeeds.ts +++ b/packages/bsky/src/api/app/bsky/feed/getActorFeeds.ts @@ -6,10 +6,10 @@ import { TimeCidKeyset, paginate } from '../../../../db/pagination' export default function (server: Server, ctx: AppContext) { server.app.bsky.feed.getActorFeeds({ - auth: ctx.authOptionalVerifier, + auth: ctx.authVerifier.standardOptional, handler: async ({ auth, params }) => { const { actor, limit, cursor } = params - const viewer = auth.credentials.did + const viewer = auth.credentials.iss const db = ctx.db.getReplica() const actorService = ctx.services.actor(db) diff --git a/packages/bsky/src/api/app/bsky/feed/getActorLikes.ts b/packages/bsky/src/api/app/bsky/feed/getActorLikes.ts index 36e36b0100b..151e9086ca9 100644 --- a/packages/bsky/src/api/app/bsky/feed/getActorLikes.ts +++ b/packages/bsky/src/api/app/bsky/feed/getActorLikes.ts @@ -23,9 +23,9 @@ export default function (server: Server, ctx: AppContext) { presentation, ) server.app.bsky.feed.getActorLikes({ - auth: ctx.authOptionalVerifier, + auth: ctx.authVerifier.standardOptional, handler: async ({ params, auth, res }) => { - const viewer = auth.credentials.did + const viewer = auth.credentials.iss const db = ctx.db.getReplica() const actorService = ctx.services.actor(db) const feedService = ctx.services.feed(db) diff --git a/packages/bsky/src/api/app/bsky/feed/getAuthorFeed.ts b/packages/bsky/src/api/app/bsky/feed/getAuthorFeed.ts index 342f371f18d..f2163cd251b 100644 --- a/packages/bsky/src/api/app/bsky/feed/getAuthorFeed.ts +++ b/packages/bsky/src/api/app/bsky/feed/getAuthorFeed.ts @@ -23,14 +23,13 @@ export default function (server: Server, ctx: AppContext) { presentation, ) server.app.bsky.feed.getAuthorFeed({ - auth: ctx.authOptionalAccessOrRoleVerifier, + auth: ctx.authVerifier.optionalStandardOrRole, handler: async ({ params, auth, res }) => { const db = ctx.db.getReplica() const actorService = ctx.services.actor(db) const feedService = ctx.services.feed(db) const graphService = ctx.services.graph(db) - const viewer = - auth.credentials.type === 'access' ? auth.credentials.did : null + const { viewer } = ctx.authVerifier.parseCreds(auth) const [result, repoRev] = await Promise.all([ getAuthorFeed( diff --git a/packages/bsky/src/api/app/bsky/feed/getFeed.ts b/packages/bsky/src/api/app/bsky/feed/getFeed.ts index a09258c3163..5100ec0f5ab 100644 --- a/packages/bsky/src/api/app/bsky/feed/getFeed.ts +++ b/packages/bsky/src/api/app/bsky/feed/getFeed.ts @@ -33,11 +33,11 @@ export default function (server: Server, ctx: AppContext) { presentation, ) server.app.bsky.feed.getFeed({ - auth: ctx.authOptionalVerifierAnyAudience, + auth: ctx.authVerifier.standardOptionalAnyAud, handler: async ({ params, auth, req }) => { const db = ctx.db.getReplica() const feedService = ctx.services.feed(db) - const viewer = auth.credentials.did + const viewer = auth.credentials.iss const { timerSkele, timerHydr, ...result } = await getFeed( { ...params, viewer }, diff --git a/packages/bsky/src/api/app/bsky/feed/getFeedGenerator.ts b/packages/bsky/src/api/app/bsky/feed/getFeedGenerator.ts index 14a5688db0d..125af1db9b9 100644 --- a/packages/bsky/src/api/app/bsky/feed/getFeedGenerator.ts +++ b/packages/bsky/src/api/app/bsky/feed/getFeedGenerator.ts @@ -9,10 +9,10 @@ import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.app.bsky.feed.getFeedGenerator({ - auth: ctx.authOptionalVerifier, + auth: ctx.authVerifier.standardOptional, handler: async ({ params, auth }) => { const { feed } = params - const viewer = auth.credentials.did + const viewer = auth.credentials.iss const db = ctx.db.getReplica() const feedService = ctx.services.feed(db) diff --git a/packages/bsky/src/api/app/bsky/feed/getFeedGenerators.ts b/packages/bsky/src/api/app/bsky/feed/getFeedGenerators.ts index 7b571ab09f6..ed6df5760cb 100644 --- a/packages/bsky/src/api/app/bsky/feed/getFeedGenerators.ts +++ b/packages/bsky/src/api/app/bsky/feed/getFeedGenerators.ts @@ -14,10 +14,10 @@ export default function (server: Server, ctx: AppContext) { presentation, ) server.app.bsky.feed.getFeedGenerators({ - auth: ctx.authOptionalVerifier, + auth: ctx.authVerifier.standardOptional, handler: async ({ params, auth }) => { const { feeds } = params - const viewer = auth.credentials.did + const viewer = auth.credentials.iss const db = ctx.db.getReplica() const feedService = ctx.services.feed(db) const actorService = ctx.services.actor(db) diff --git a/packages/bsky/src/api/app/bsky/feed/getFeedSkeleton.ts b/packages/bsky/src/api/app/bsky/feed/getFeedSkeleton.ts index 5d65044f86f..4ab22c3a0b1 100644 --- a/packages/bsky/src/api/app/bsky/feed/getFeedSkeleton.ts +++ b/packages/bsky/src/api/app/bsky/feed/getFeedSkeleton.ts @@ -5,10 +5,10 @@ import { toSkeletonItem } from '../../../../feed-gen/types' export default function (server: Server, ctx: AppContext) { server.app.bsky.feed.getFeedSkeleton({ - auth: ctx.authVerifierAnyAudience, + auth: ctx.authVerifier.standardOptional, handler: async ({ params, auth }) => { const { feed } = params - const viewer = auth.credentials.did + const viewer = auth.credentials.iss const localAlgo = ctx.algos[feed] if (!localAlgo) { diff --git a/packages/bsky/src/api/app/bsky/feed/getLikes.ts b/packages/bsky/src/api/app/bsky/feed/getLikes.ts index 893617f6bb0..8df916f29c9 100644 --- a/packages/bsky/src/api/app/bsky/feed/getLikes.ts +++ b/packages/bsky/src/api/app/bsky/feed/getLikes.ts @@ -13,12 +13,12 @@ import { createPipeline } from '../../../../pipeline' export default function (server: Server, ctx: AppContext) { const getLikes = createPipeline(skeleton, hydration, noBlocks, presentation) server.app.bsky.feed.getLikes({ - auth: ctx.authOptionalVerifier, + auth: ctx.authVerifier.standardOptional, handler: async ({ params, auth }) => { const db = ctx.db.getReplica() const actorService = ctx.services.actor(db) const graphService = ctx.services.graph(db) - const viewer = auth.credentials.did + const viewer = auth.credentials.iss const result = await getLikes( { ...params, viewer }, diff --git a/packages/bsky/src/api/app/bsky/feed/getListFeed.ts b/packages/bsky/src/api/app/bsky/feed/getListFeed.ts index fd3f0360ef3..8af7764a6b7 100644 --- a/packages/bsky/src/api/app/bsky/feed/getListFeed.ts +++ b/packages/bsky/src/api/app/bsky/feed/getListFeed.ts @@ -22,9 +22,9 @@ export default function (server: Server, ctx: AppContext) { presentation, ) server.app.bsky.feed.getListFeed({ - auth: ctx.authOptionalVerifier, + auth: ctx.authVerifier.standardOptional, handler: async ({ params, auth, res }) => { - const viewer = auth.credentials.did + const viewer = auth.credentials.iss const db = ctx.db.getReplica() const actorService = ctx.services.actor(db) const feedService = ctx.services.feed(db) diff --git a/packages/bsky/src/api/app/bsky/feed/getPostThread.ts b/packages/bsky/src/api/app/bsky/feed/getPostThread.ts index edf339513bc..18d9d3124d0 100644 --- a/packages/bsky/src/api/app/bsky/feed/getPostThread.ts +++ b/packages/bsky/src/api/app/bsky/feed/getPostThread.ts @@ -31,9 +31,9 @@ export default function (server: Server, ctx: AppContext) { presentation, ) server.app.bsky.feed.getPostThread({ - auth: ctx.authOptionalAccessOrRoleVerifier, + auth: ctx.authVerifier.optionalStandardOrRole, handler: async ({ params, auth, res }) => { - const viewer = 'did' in auth.credentials ? auth.credentials.did : null + const { viewer } = ctx.authVerifier.parseCreds(auth) const db = ctx.db.getReplica('thread') const feedService = ctx.services.feed(db) const actorService = ctx.services.actor(db) diff --git a/packages/bsky/src/api/app/bsky/feed/getPosts.ts b/packages/bsky/src/api/app/bsky/feed/getPosts.ts index 5ec4807accb..9db7cf0a252 100644 --- a/packages/bsky/src/api/app/bsky/feed/getPosts.ts +++ b/packages/bsky/src/api/app/bsky/feed/getPosts.ts @@ -14,12 +14,12 @@ import { ActorService } from '../../../../services/actor' export default function (server: Server, ctx: AppContext) { const getPosts = createPipeline(skeleton, hydration, noBlocks, presentation) server.app.bsky.feed.getPosts({ - auth: ctx.authOptionalVerifier, + auth: ctx.authVerifier.standardOptional, handler: async ({ params, auth }) => { const db = ctx.db.getReplica() const feedService = ctx.services.feed(db) const actorService = ctx.services.actor(db) - const viewer = auth.credentials.did + const viewer = auth.credentials.iss const results = await getPosts( { ...params, viewer }, diff --git a/packages/bsky/src/api/app/bsky/feed/getRepostedBy.ts b/packages/bsky/src/api/app/bsky/feed/getRepostedBy.ts index 5ca5c452b63..e84bb745b42 100644 --- a/packages/bsky/src/api/app/bsky/feed/getRepostedBy.ts +++ b/packages/bsky/src/api/app/bsky/feed/getRepostedBy.ts @@ -18,12 +18,12 @@ export default function (server: Server, ctx: AppContext) { presentation, ) server.app.bsky.feed.getRepostedBy({ - auth: ctx.authOptionalVerifier, + auth: ctx.authVerifier.standardOptional, handler: async ({ params, auth }) => { const db = ctx.db.getReplica() const actorService = ctx.services.actor(db) const graphService = ctx.services.graph(db) - const viewer = auth.credentials.did + const viewer = auth.credentials.iss const result = await getRepostedBy( { ...params, viewer }, diff --git a/packages/bsky/src/api/app/bsky/feed/getSuggestedFeeds.ts b/packages/bsky/src/api/app/bsky/feed/getSuggestedFeeds.ts index 35fac829039..b72a191c9aa 100644 --- a/packages/bsky/src/api/app/bsky/feed/getSuggestedFeeds.ts +++ b/packages/bsky/src/api/app/bsky/feed/getSuggestedFeeds.ts @@ -4,9 +4,9 @@ import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.app.bsky.feed.getSuggestedFeeds({ - auth: ctx.authOptionalVerifier, + auth: ctx.authVerifier.standardOptional, handler: async ({ auth }) => { - const viewer = auth.credentials.did + const viewer = auth.credentials.iss const db = ctx.db.getReplica() const feedService = ctx.services.feed(db) diff --git a/packages/bsky/src/api/app/bsky/feed/getTimeline.ts b/packages/bsky/src/api/app/bsky/feed/getTimeline.ts index 7207f9b6584..3b6fbe70a33 100644 --- a/packages/bsky/src/api/app/bsky/feed/getTimeline.ts +++ b/packages/bsky/src/api/app/bsky/feed/getTimeline.ts @@ -22,9 +22,9 @@ export default function (server: Server, ctx: AppContext) { presentation, ) server.app.bsky.feed.getTimeline({ - auth: ctx.authVerifier, + auth: ctx.authVerifier.standard, handler: async ({ params, auth, res }) => { - const viewer = auth.credentials.did + const viewer = auth.credentials.iss const db = ctx.db.getReplica('timeline') const feedService = ctx.services.feed(db) const actorService = ctx.services.actor(db) diff --git a/packages/bsky/src/api/app/bsky/feed/searchPosts.ts b/packages/bsky/src/api/app/bsky/feed/searchPosts.ts index db143fc5b8c..9598c6ff88c 100644 --- a/packages/bsky/src/api/app/bsky/feed/searchPosts.ts +++ b/packages/bsky/src/api/app/bsky/feed/searchPosts.ts @@ -21,9 +21,9 @@ export default function (server: Server, ctx: AppContext) { presentation, ) server.app.bsky.feed.searchPosts({ - auth: ctx.authOptionalVerifier, + auth: ctx.authVerifier.standardOptional, handler: async ({ auth, params }) => { - const viewer = auth.credentials.did + const viewer = auth.credentials.iss const db = ctx.db.getReplica('search') const feedService = ctx.services.feed(db) const actorService = ctx.services.actor(db) diff --git a/packages/bsky/src/api/app/bsky/graph/getBlocks.ts b/packages/bsky/src/api/app/bsky/graph/getBlocks.ts index 66b809d70ce..518fd2d62ec 100644 --- a/packages/bsky/src/api/app/bsky/graph/getBlocks.ts +++ b/packages/bsky/src/api/app/bsky/graph/getBlocks.ts @@ -5,10 +5,10 @@ import { notSoftDeletedClause } from '../../../../db/util' export default function (server: Server, ctx: AppContext) { server.app.bsky.graph.getBlocks({ - auth: ctx.authVerifier, + auth: ctx.authVerifier.standard, handler: async ({ params, auth }) => { const { limit, cursor } = params - const requester = auth.credentials.did + const requester = auth.credentials.iss const db = ctx.db.getReplica() const { ref } = db.db.dynamic diff --git a/packages/bsky/src/api/app/bsky/graph/getFollowers.ts b/packages/bsky/src/api/app/bsky/graph/getFollowers.ts index 1382c1f87c7..9fb199c7563 100644 --- a/packages/bsky/src/api/app/bsky/graph/getFollowers.ts +++ b/packages/bsky/src/api/app/bsky/graph/getFollowers.ts @@ -19,17 +19,15 @@ export default function (server: Server, ctx: AppContext) { presentation, ) server.app.bsky.graph.getFollowers({ - auth: ctx.authOptionalAccessOrRoleVerifier, + auth: ctx.authVerifier.optionalStandardOrRole, handler: async ({ params, auth }) => { const db = ctx.db.getReplica() const actorService = ctx.services.actor(db) const graphService = ctx.services.graph(db) - const viewer = 'did' in auth.credentials ? auth.credentials.did : null - const canViewTakendownProfile = - auth.credentials.type === 'role' && auth.credentials.triage + const { viewer, canViewTakedowns } = ctx.authVerifier.parseCreds(auth) const result = await getFollowers( - { ...params, viewer, canViewTakendownProfile }, + { ...params, viewer, canViewTakedowns }, { db, actorService, graphService }, ) @@ -46,10 +44,10 @@ const skeleton = async ( ctx: Context, ): Promise => { const { db, actorService } = ctx - const { limit, cursor, actor, canViewTakendownProfile } = params + const { limit, cursor, actor, canViewTakedowns } = params const { ref } = db.db.dynamic - const subject = await actorService.getActor(actor, canViewTakendownProfile) + const subject = await actorService.getActor(actor, canViewTakedowns) if (!subject) { throw new InvalidRequestError(`Actor not found: ${actor}`) } @@ -58,7 +56,7 @@ const skeleton = async ( .selectFrom('follow') .where('follow.subjectDid', '=', subject.did) .innerJoin('actor as creator', 'creator.did', 'follow.creator') - .if(!canViewTakendownProfile, (qb) => + .if(!canViewTakedowns, (qb) => qb.where(notSoftDeletedClause(ref('creator'))), ) .selectAll('creator') @@ -130,7 +128,7 @@ type Context = { type Params = QueryParams & { viewer: string | null - canViewTakendownProfile: boolean + canViewTakedowns: boolean } type SkeletonState = { diff --git a/packages/bsky/src/api/app/bsky/graph/getFollows.ts b/packages/bsky/src/api/app/bsky/graph/getFollows.ts index 34b5d72a605..2195824b696 100644 --- a/packages/bsky/src/api/app/bsky/graph/getFollows.ts +++ b/packages/bsky/src/api/app/bsky/graph/getFollows.ts @@ -19,17 +19,15 @@ export default function (server: Server, ctx: AppContext) { presentation, ) server.app.bsky.graph.getFollows({ - auth: ctx.authOptionalAccessOrRoleVerifier, + auth: ctx.authVerifier.optionalStandardOrRole, handler: async ({ params, auth }) => { const db = ctx.db.getReplica() const actorService = ctx.services.actor(db) const graphService = ctx.services.graph(db) - const viewer = 'did' in auth.credentials ? auth.credentials.did : null - const canViewTakendownProfile = - auth.credentials.type === 'role' && auth.credentials.triage + const { viewer, canViewTakedowns } = ctx.authVerifier.parseCreds(auth) const result = await getFollows( - { ...params, viewer, canViewTakendownProfile }, + { ...params, viewer, canViewTakedowns }, { db, actorService, graphService }, ) @@ -46,10 +44,10 @@ const skeleton = async ( ctx: Context, ): Promise => { const { db, actorService } = ctx - const { limit, cursor, actor, canViewTakendownProfile } = params + const { limit, cursor, actor, canViewTakedowns } = params const { ref } = db.db.dynamic - const creator = await actorService.getActor(actor, canViewTakendownProfile) + const creator = await actorService.getActor(actor, canViewTakedowns) if (!creator) { throw new InvalidRequestError(`Actor not found: ${actor}`) } @@ -58,7 +56,7 @@ const skeleton = async ( .selectFrom('follow') .where('follow.creator', '=', creator.did) .innerJoin('actor as subject', 'subject.did', 'follow.subjectDid') - .if(!canViewTakendownProfile, (qb) => + .if(!canViewTakedowns, (qb) => qb.where(notSoftDeletedClause(ref('subject'))), ) .selectAll('subject') @@ -131,7 +129,7 @@ type Context = { type Params = QueryParams & { viewer: string | null - canViewTakendownProfile: boolean + canViewTakedowns: boolean } type SkeletonState = { diff --git a/packages/bsky/src/api/app/bsky/graph/getList.ts b/packages/bsky/src/api/app/bsky/graph/getList.ts index 82a70848cd9..08d3f725663 100644 --- a/packages/bsky/src/api/app/bsky/graph/getList.ts +++ b/packages/bsky/src/api/app/bsky/graph/getList.ts @@ -13,12 +13,12 @@ import { createPipeline, noRules } from '../../../../pipeline' export default function (server: Server, ctx: AppContext) { const getList = createPipeline(skeleton, hydration, noRules, presentation) server.app.bsky.graph.getList({ - auth: ctx.authOptionalVerifier, + auth: ctx.authVerifier.standardOptional, handler: async ({ params, auth }) => { const db = ctx.db.getReplica() const graphService = ctx.services.graph(db) const actorService = ctx.services.actor(db) - const viewer = auth.credentials.did + const viewer = auth.credentials.iss const result = await getList( { ...params, viewer }, diff --git a/packages/bsky/src/api/app/bsky/graph/getListBlocks.ts b/packages/bsky/src/api/app/bsky/graph/getListBlocks.ts index 03fd3496f97..b5a6e97986d 100644 --- a/packages/bsky/src/api/app/bsky/graph/getListBlocks.ts +++ b/packages/bsky/src/api/app/bsky/graph/getListBlocks.ts @@ -17,12 +17,12 @@ export default function (server: Server, ctx: AppContext) { presentation, ) server.app.bsky.graph.getListBlocks({ - auth: ctx.authVerifier, + auth: ctx.authVerifier.standard, handler: async ({ params, auth }) => { const db = ctx.db.getReplica() const graphService = ctx.services.graph(db) const actorService = ctx.services.actor(db) - const viewer = auth.credentials.did + const viewer = auth.credentials.iss const result = await getListBlocks( { ...params, viewer }, diff --git a/packages/bsky/src/api/app/bsky/graph/getListMutes.ts b/packages/bsky/src/api/app/bsky/graph/getListMutes.ts index ab0ac77f47c..f5f14844e32 100644 --- a/packages/bsky/src/api/app/bsky/graph/getListMutes.ts +++ b/packages/bsky/src/api/app/bsky/graph/getListMutes.ts @@ -5,10 +5,10 @@ import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.app.bsky.graph.getListMutes({ - auth: ctx.authVerifier, + auth: ctx.authVerifier.standard, handler: async ({ params, auth }) => { const { limit, cursor } = params - const requester = auth.credentials.did + const requester = auth.credentials.iss const db = ctx.db.getReplica() const { ref } = db.db.dynamic diff --git a/packages/bsky/src/api/app/bsky/graph/getLists.ts b/packages/bsky/src/api/app/bsky/graph/getLists.ts index 73deb51900b..888963b3fa3 100644 --- a/packages/bsky/src/api/app/bsky/graph/getLists.ts +++ b/packages/bsky/src/api/app/bsky/graph/getLists.ts @@ -6,10 +6,10 @@ import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.app.bsky.graph.getLists({ - auth: ctx.authOptionalVerifier, + auth: ctx.authVerifier.standardOptional, handler: async ({ params, auth }) => { const { actor, limit, cursor } = params - const requester = auth.credentials.did + const requester = auth.credentials.iss const db = ctx.db.getReplica() const { ref } = db.db.dynamic diff --git a/packages/bsky/src/api/app/bsky/graph/getMutes.ts b/packages/bsky/src/api/app/bsky/graph/getMutes.ts index e69803d144a..2481e8de240 100644 --- a/packages/bsky/src/api/app/bsky/graph/getMutes.ts +++ b/packages/bsky/src/api/app/bsky/graph/getMutes.ts @@ -5,10 +5,10 @@ import { notSoftDeletedClause } from '../../../../db/util' export default function (server: Server, ctx: AppContext) { server.app.bsky.graph.getMutes({ - auth: ctx.authVerifier, + auth: ctx.authVerifier.standard, handler: async ({ params, auth }) => { const { limit, cursor } = params - const requester = auth.credentials.did + const requester = auth.credentials.iss const db = ctx.db.getReplica() const { ref } = db.db.dynamic diff --git a/packages/bsky/src/api/app/bsky/graph/getSuggestedFollowsByActor.ts b/packages/bsky/src/api/app/bsky/graph/getSuggestedFollowsByActor.ts index eddf0cd5fd6..3aec8ded48e 100644 --- a/packages/bsky/src/api/app/bsky/graph/getSuggestedFollowsByActor.ts +++ b/packages/bsky/src/api/app/bsky/graph/getSuggestedFollowsByActor.ts @@ -9,10 +9,10 @@ const RESULT_LENGTH = 10 export default function (server: Server, ctx: AppContext) { server.app.bsky.graph.getSuggestedFollowsByActor({ - auth: ctx.authVerifier, + auth: ctx.authVerifier.standard, handler: async ({ auth, params }) => { const { actor } = params - const viewer = auth.credentials.did + const viewer = auth.credentials.iss const db = ctx.db.getReplica() const actorService = ctx.services.actor(db) diff --git a/packages/bsky/src/api/app/bsky/graph/muteActor.ts b/packages/bsky/src/api/app/bsky/graph/muteActor.ts index 50a3723db6e..acf72bdd2eb 100644 --- a/packages/bsky/src/api/app/bsky/graph/muteActor.ts +++ b/packages/bsky/src/api/app/bsky/graph/muteActor.ts @@ -4,10 +4,10 @@ import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.app.bsky.graph.muteActor({ - auth: ctx.authVerifier, + auth: ctx.authVerifier.standard, handler: async ({ auth, input }) => { const { actor } = input.body - const requester = auth.credentials.did + const requester = auth.credentials.iss const db = ctx.db.getPrimary() const subjectDid = await ctx.services.actor(db).getActorDid(actor) diff --git a/packages/bsky/src/api/app/bsky/graph/muteActorList.ts b/packages/bsky/src/api/app/bsky/graph/muteActorList.ts index b6b29796c5c..d732c3cd89f 100644 --- a/packages/bsky/src/api/app/bsky/graph/muteActorList.ts +++ b/packages/bsky/src/api/app/bsky/graph/muteActorList.ts @@ -6,10 +6,10 @@ import { AtUri } from '@atproto/syntax' export default function (server: Server, ctx: AppContext) { server.app.bsky.graph.muteActorList({ - auth: ctx.authVerifier, + auth: ctx.authVerifier.standard, handler: async ({ auth, input }) => { const { list } = input.body - const requester = auth.credentials.did + const requester = auth.credentials.iss const db = ctx.db.getPrimary() diff --git a/packages/bsky/src/api/app/bsky/graph/unmuteActor.ts b/packages/bsky/src/api/app/bsky/graph/unmuteActor.ts index 11af919126f..5308aef4f47 100644 --- a/packages/bsky/src/api/app/bsky/graph/unmuteActor.ts +++ b/packages/bsky/src/api/app/bsky/graph/unmuteActor.ts @@ -4,10 +4,10 @@ import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.app.bsky.graph.unmuteActor({ - auth: ctx.authVerifier, + auth: ctx.authVerifier.standard, handler: async ({ auth, input }) => { const { actor } = input.body - const requester = auth.credentials.did + const requester = auth.credentials.iss const db = ctx.db.getPrimary() const subjectDid = await ctx.services.actor(db).getActorDid(actor) diff --git a/packages/bsky/src/api/app/bsky/graph/unmuteActorList.ts b/packages/bsky/src/api/app/bsky/graph/unmuteActorList.ts index 8b97530c216..059fa5605d9 100644 --- a/packages/bsky/src/api/app/bsky/graph/unmuteActorList.ts +++ b/packages/bsky/src/api/app/bsky/graph/unmuteActorList.ts @@ -3,10 +3,10 @@ import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.app.bsky.graph.unmuteActorList({ - auth: ctx.authVerifier, + auth: ctx.authVerifier.standard, handler: async ({ auth, input }) => { const { list } = input.body - const requester = auth.credentials.did + const requester = auth.credentials.iss const db = ctx.db.getPrimary() await ctx.services.graph(db).unmuteActorList({ diff --git a/packages/bsky/src/api/app/bsky/notification/getUnreadCount.ts b/packages/bsky/src/api/app/bsky/notification/getUnreadCount.ts index c23d7683abe..71391457902 100644 --- a/packages/bsky/src/api/app/bsky/notification/getUnreadCount.ts +++ b/packages/bsky/src/api/app/bsky/notification/getUnreadCount.ts @@ -6,9 +6,9 @@ import AppContext from '../../../../context' export default function (server: Server, ctx: AppContext) { server.app.bsky.notification.getUnreadCount({ - auth: ctx.authVerifier, + auth: ctx.authVerifier.standard, handler: async ({ auth, params }) => { - const requester = auth.credentials.did + const requester = auth.credentials.iss if (params.seenAt) { throw new InvalidRequestError('The seenAt parameter is unsupported') } diff --git a/packages/bsky/src/api/app/bsky/notification/listNotifications.ts b/packages/bsky/src/api/app/bsky/notification/listNotifications.ts index 672e8c0997a..c0de1925120 100644 --- a/packages/bsky/src/api/app/bsky/notification/listNotifications.ts +++ b/packages/bsky/src/api/app/bsky/notification/listNotifications.ts @@ -20,13 +20,13 @@ export default function (server: Server, ctx: AppContext) { presentation, ) server.app.bsky.notification.listNotifications({ - auth: ctx.authVerifier, + auth: ctx.authVerifier.standard, handler: async ({ params, auth }) => { const db = ctx.db.getReplica() const actorService = ctx.services.actor(db) const graphService = ctx.services.graph(db) const labelService = ctx.services.label(db) - const viewer = auth.credentials.did + const viewer = auth.credentials.iss const result = await listNotifications( { ...params, viewer }, diff --git a/packages/bsky/src/api/app/bsky/notification/registerPush.ts b/packages/bsky/src/api/app/bsky/notification/registerPush.ts index be7d373bcd4..9645cd76c83 100644 --- a/packages/bsky/src/api/app/bsky/notification/registerPush.ts +++ b/packages/bsky/src/api/app/bsky/notification/registerPush.ts @@ -5,13 +5,11 @@ import { Platform } from '../../../../notifications' export default function (server: Server, ctx: AppContext) { server.app.bsky.notification.registerPush({ - auth: ctx.authVerifier, + auth: ctx.authVerifier.standard, handler: async ({ auth, input }) => { const { token, platform, serviceDid, appId } = input.body - const { - credentials: { did }, - } = auth - if (serviceDid !== auth.artifacts.aud) { + const did = auth.credentials.iss + if (serviceDid !== auth.credentials.aud) { throw new InvalidRequestError('Invalid serviceDid.') } const { notifServer } = ctx diff --git a/packages/bsky/src/api/app/bsky/notification/updateSeen.ts b/packages/bsky/src/api/app/bsky/notification/updateSeen.ts index b7c705c0889..4b8b614fbad 100644 --- a/packages/bsky/src/api/app/bsky/notification/updateSeen.ts +++ b/packages/bsky/src/api/app/bsky/notification/updateSeen.ts @@ -5,10 +5,10 @@ import { excluded } from '../../../../db/util' export default function (server: Server, ctx: AppContext) { server.app.bsky.notification.updateSeen({ - auth: ctx.authVerifier, + auth: ctx.authVerifier.standard, handler: async ({ input, auth }) => { const { seenAt } = input.body - const viewer = auth.credentials.did + const viewer = auth.credentials.iss let parsed: string try { diff --git a/packages/bsky/src/api/app/bsky/unspecced/getPopularFeedGenerators.ts b/packages/bsky/src/api/app/bsky/unspecced/getPopularFeedGenerators.ts index e135d2cb7c1..b8456d111a4 100644 --- a/packages/bsky/src/api/app/bsky/unspecced/getPopularFeedGenerators.ts +++ b/packages/bsky/src/api/app/bsky/unspecced/getPopularFeedGenerators.ts @@ -8,10 +8,10 @@ import { GeneratorView } from '../../../../lexicon/types/app/bsky/feed/defs' // THIS IS A TEMPORARY UNSPECCED ROUTE export default function (server: Server, ctx: AppContext) { server.app.bsky.unspecced.getPopularFeedGenerators({ - auth: ctx.authOptionalVerifier, + auth: ctx.authVerifier.standardOptional, handler: async ({ auth, params }) => { const { limit, cursor, query } = params - const requester = auth.credentials.did + const requester = auth.credentials.iss const db = ctx.db.getReplica() const { ref } = db.db.dynamic const feedService = ctx.services.feed(db) diff --git a/packages/bsky/src/api/app/bsky/unspecced/getTimelineSkeleton.ts b/packages/bsky/src/api/app/bsky/unspecced/getTimelineSkeleton.ts index 821eeda655f..f45b657af1e 100644 --- a/packages/bsky/src/api/app/bsky/unspecced/getTimelineSkeleton.ts +++ b/packages/bsky/src/api/app/bsky/unspecced/getTimelineSkeleton.ts @@ -6,11 +6,11 @@ import { toSkeletonItem } from '../../../../feed-gen/types' // THIS IS A TEMPORARY UNSPECCED ROUTE export default function (server: Server, ctx: AppContext) { server.app.bsky.unspecced.getTimelineSkeleton({ - auth: ctx.authVerifier, + auth: ctx.authVerifier.standard, handler: async ({ auth, params }) => { const db = ctx.db.getReplica('timeline') const feedService = ctx.services.feed(db) - const viewer = auth.credentials.did + const viewer = auth.credentials.iss const result = await skeleton({ ...params, viewer }, { db, feedService }) diff --git a/packages/bsky/src/api/blob-resolver.ts b/packages/bsky/src/api/blob-resolver.ts index 7eb245eedd5..c307152c43a 100644 --- a/packages/bsky/src/api/blob-resolver.ts +++ b/packages/bsky/src/api/blob-resolver.ts @@ -10,7 +10,6 @@ import AppContext from '../context' import { httpLogger as log } from '../logger' import { retryHttp } from '../util/retry' import { Database } from '../db' -import { sql } from 'kysely' // Resolve and verify blob from its origin host @@ -88,10 +87,10 @@ export async function resolveBlob( const [{ pds }, takedown] = await Promise.all([ idResolver.did.resolveAtprotoData(did), // @TODO cache did info db.db - .selectFrom('moderation_subject_status') - .select('id') - .where('blobCids', '@>', sql`CAST(${JSON.stringify([cidStr])} AS JSONB)`) - .where('takendown', 'is', true) + .selectFrom('blob_takedown') + .select('takedownRef') + .where('did', '=', did) + .where('cid', '=', cid.toString()) .executeTakeFirst(), ]) if (takedown) { diff --git a/packages/bsky/src/api/com/atproto/admin/emitModerationEvent.ts b/packages/bsky/src/api/com/atproto/admin/emitModerationEvent.ts deleted file mode 100644 index 8b007f64ca1..00000000000 --- a/packages/bsky/src/api/com/atproto/admin/emitModerationEvent.ts +++ /dev/null @@ -1,220 +0,0 @@ -import { CID } from 'multiformats/cid' -import { AtUri } from '@atproto/syntax' -import { - AuthRequiredError, - InvalidRequestError, - UpstreamFailureError, -} from '@atproto/xrpc-server' -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' -import { getSubject } from '../moderation/util' -import { - isModEventLabel, - isModEventReverseTakedown, - isModEventTakedown, -} from '../../../../lexicon/types/com/atproto/admin/defs' -import { TakedownSubjects } from '../../../../services/moderation' -import { retryHttp } from '../../../../util/retry' - -export default function (server: Server, ctx: AppContext) { - server.com.atproto.admin.emitModerationEvent({ - auth: ctx.roleVerifier, - handler: async ({ input, auth }) => { - const access = auth.credentials - const db = ctx.db.getPrimary() - const moderationService = ctx.services.moderation(db) - const { subject, createdBy, subjectBlobCids, event } = input.body - const isTakedownEvent = isModEventTakedown(event) - const isReverseTakedownEvent = isModEventReverseTakedown(event) - const isLabelEvent = isModEventLabel(event) - - // apply access rules - - // if less than moderator access then can not takedown an account - if (!access.moderator && isTakedownEvent && 'did' in subject) { - throw new AuthRequiredError( - 'Must be a full moderator to perform an account takedown', - ) - } - // if less than moderator access then can only take ack and escalation actions - if (!access.moderator && (isTakedownEvent || isReverseTakedownEvent)) { - throw new AuthRequiredError( - 'Must be a full moderator to take this type of action', - ) - } - // if less than moderator access then can not apply labels - if (!access.moderator && isLabelEvent) { - throw new AuthRequiredError('Must be a full moderator to label content') - } - - if (isLabelEvent) { - validateLabels([ - ...(event.createLabelVals ?? []), - ...(event.negateLabelVals ?? []), - ]) - } - - const subjectInfo = getSubject(subject) - - if (isTakedownEvent || isReverseTakedownEvent) { - const isSubjectTakendown = await moderationService.isSubjectTakendown( - subjectInfo, - ) - - if (isSubjectTakendown && isTakedownEvent) { - throw new InvalidRequestError(`Subject is already taken down`) - } - - if (!isSubjectTakendown && isReverseTakedownEvent) { - throw new InvalidRequestError(`Subject is not taken down`) - } - } - - const { result: moderationEvent, takenDown } = await db.transaction( - async (dbTxn) => { - const moderationTxn = ctx.services.moderation(dbTxn) - const labelTxn = ctx.services.label(dbTxn) - - const result = await moderationTxn.logEvent({ - event, - subject: subjectInfo, - subjectBlobCids: - subjectBlobCids?.map((cid) => CID.parse(cid)) ?? [], - createdBy, - }) - - let takenDown: TakedownSubjects | undefined - - if ( - result.subjectType === 'com.atproto.admin.defs#repoRef' && - result.subjectDid - ) { - // No credentials to revoke on appview - if (isTakedownEvent) { - takenDown = await moderationTxn.takedownRepo({ - takedownId: result.id, - did: result.subjectDid, - }) - } - - if (isReverseTakedownEvent) { - await moderationTxn.reverseTakedownRepo({ - did: result.subjectDid, - }) - takenDown = { - subjects: [ - { - $type: 'com.atproto.admin.defs#repoRef', - did: result.subjectDid, - }, - ], - did: result.subjectDid, - } - } - } - - if ( - result.subjectType === 'com.atproto.repo.strongRef' && - result.subjectUri - ) { - const blobCids = subjectBlobCids?.map((cid) => CID.parse(cid)) ?? [] - if (isTakedownEvent) { - takenDown = await moderationTxn.takedownRecord({ - takedownId: result.id, - uri: new AtUri(result.subjectUri), - // TODO: I think this will always be available for strongRefs? - cid: CID.parse(result.subjectCid as string), - blobCids, - }) - } - - if (isReverseTakedownEvent) { - await moderationTxn.reverseTakedownRecord({ - uri: new AtUri(result.subjectUri), - }) - takenDown = { - did: result.subjectDid, - subjects: [ - { - $type: 'com.atproto.repo.strongRef', - uri: result.subjectUri, - cid: result.subjectCid ?? '', - }, - ...blobCids.map((cid) => ({ - $type: 'com.atproto.admin.defs#repoBlobRef', - did: result.subjectDid, - cid: cid.toString(), - recordUri: result.subjectUri, - })), - ], - } - } - } - - if (isLabelEvent) { - await labelTxn.formatAndCreate( - ctx.cfg.labelerDid, - result.subjectUri ?? result.subjectDid, - result.subjectCid, - { - create: result.createLabelVals?.length - ? result.createLabelVals.split(' ') - : undefined, - negate: result.negateLabelVals?.length - ? result.negateLabelVals.split(' ') - : undefined, - }, - ) - } - - return { result, takenDown } - }, - ) - - if (takenDown && ctx.moderationPushAgent) { - const { did, subjects } = takenDown - if (did && subjects.length > 0) { - const agent = ctx.moderationPushAgent - const results = await Promise.allSettled( - subjects.map((subject) => - retryHttp(() => - agent.api.com.atproto.admin.updateSubjectStatus({ - subject, - takedown: isTakedownEvent - ? { - applied: true, - ref: moderationEvent.id.toString(), - } - : { - applied: false, - }, - }), - ), - ), - ) - const hadFailure = results.some((r) => r.status === 'rejected') - if (hadFailure) { - throw new UpstreamFailureError('failed to apply action on PDS') - } - } - } - - return { - encoding: 'application/json', - body: await moderationService.views.event(moderationEvent), - } - }, - }) -} - -const validateLabels = (labels: string[]) => { - for (const label of labels) { - for (const char of badChars) { - if (label.includes(char)) { - throw new InvalidRequestError(`Invalid label: ${label}`) - } - } - } -} - -const badChars = [' ', ',', ';', `'`, `"`] diff --git a/packages/bsky/src/api/com/atproto/admin/getAccountInfos.ts b/packages/bsky/src/api/com/atproto/admin/getAccountInfos.ts new file mode 100644 index 00000000000..9ef66c94c9b --- /dev/null +++ b/packages/bsky/src/api/com/atproto/admin/getAccountInfos.ts @@ -0,0 +1,42 @@ +import { Server } from '../../../../lexicon' +import AppContext from '../../../../context' +import { Actor } from '../../../../db/tables/actor' +import { mapDefined } from '@atproto/common' +import { INVALID_HANDLE } from '@atproto/syntax' + +export default function (server: Server, ctx: AppContext) { + server.com.atproto.admin.getAccountInfos({ + auth: ctx.authVerifier.roleOrAdminService, + handler: async ({ params }) => { + const { dids } = params + const db = ctx.db.getPrimary() + const actorService = ctx.services.actor(db) + const [actors, profiles] = await Promise.all([ + actorService.getActors(dids, true), + actorService.getProfileRecords(dids, true), + ]) + const actorByDid = actors.reduce((acc, cur) => { + return acc.set(cur.did, cur) + }, new Map()) + + const infos = mapDefined(dids, (did) => { + const info = actorByDid.get(did) + if (!info) return + const profile = profiles.get(did) + return { + did, + handle: info.handle ?? INVALID_HANDLE, + relatedRecords: profile ? [profile] : undefined, + indexedAt: info.indexedAt, + } + }) + + return { + encoding: 'application/json', + body: { + infos, + }, + } + }, + }) +} diff --git a/packages/bsky/src/api/com/atproto/admin/getModerationEvent.ts b/packages/bsky/src/api/com/atproto/admin/getModerationEvent.ts deleted file mode 100644 index 347a450c727..00000000000 --- a/packages/bsky/src/api/com/atproto/admin/getModerationEvent.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' - -export default function (server: Server, ctx: AppContext) { - server.com.atproto.admin.getModerationEvent({ - auth: ctx.roleVerifier, - handler: async ({ params }) => { - const { id } = params - const db = ctx.db.getPrimary() - const moderationService = ctx.services.moderation(db) - const event = await moderationService.getEventOrThrow(id) - const eventDetail = await moderationService.views.eventDetail(event) - return { - encoding: 'application/json', - body: eventDetail, - } - }, - }) -} diff --git a/packages/bsky/src/api/com/atproto/admin/getSubjectStatus.ts b/packages/bsky/src/api/com/atproto/admin/getSubjectStatus.ts new file mode 100644 index 00000000000..8ac237240f9 --- /dev/null +++ b/packages/bsky/src/api/com/atproto/admin/getSubjectStatus.ts @@ -0,0 +1,73 @@ +import { InvalidRequestError } from '@atproto/xrpc-server' +import { Server } from '../../../../lexicon' +import AppContext from '../../../../context' +import { OutputSchema } from '../../../../lexicon/types/com/atproto/admin/getSubjectStatus' + +export default function (server: Server, ctx: AppContext) { + server.com.atproto.admin.getSubjectStatus({ + auth: ctx.authVerifier.roleOrAdminService, + handler: async ({ params }) => { + const { did, uri, blob } = params + const modService = ctx.services.moderation(ctx.db.getPrimary()) + let body: OutputSchema | null = null + if (blob) { + if (!did) { + throw new InvalidRequestError( + 'Must provide a did to request blob state', + ) + } + const takedown = await modService.getBlobTakedownRef(did, blob) + if (takedown) { + body = { + subject: { + $type: 'com.atproto.admin.defs#repoBlobRef', + did: did, + cid: blob, + }, + takedown, + } + } + } else if (uri) { + const [takedown, cidRes] = await Promise.all([ + modService.getRecordTakedownRef(uri), + ctx.db + .getPrimary() + .db.selectFrom('record') + .where('uri', '=', uri) + .select('cid') + .executeTakeFirst(), + ]) + if (cidRes && takedown) { + body = { + subject: { + $type: 'com.atproto.repo.strongRef', + uri, + cid: cidRes.cid, + }, + takedown, + } + } + } else if (did) { + const takedown = await modService.getRepoTakedownRef(did) + if (takedown) { + body = { + subject: { + $type: 'com.atproto.admin.defs#repoRef', + did: did, + }, + takedown, + } + } + } else { + throw new InvalidRequestError('No provided subject') + } + if (body === null) { + throw new InvalidRequestError('Subject not found', 'NotFound') + } + return { + encoding: 'application/json', + body, + } + }, + }) +} diff --git a/packages/bsky/src/api/com/atproto/admin/searchRepos.ts b/packages/bsky/src/api/com/atproto/admin/searchRepos.ts deleted file mode 100644 index ef580f30d67..00000000000 --- a/packages/bsky/src/api/com/atproto/admin/searchRepos.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' - -export default function (server: Server, ctx: AppContext) { - server.com.atproto.admin.searchRepos({ - auth: ctx.roleVerifier, - handler: async ({ params }) => { - const db = ctx.db.getPrimary() - const moderationService = ctx.services.moderation(db) - const { limit, cursor } = params - // prefer new 'q' query param over deprecated 'term' - const query = params.q ?? params.term - - const { results, cursor: resCursor } = await ctx.services - .actor(db) - .getSearchResults({ query, limit, cursor, includeSoftDeleted: true }) - - return { - encoding: 'application/json', - body: { - cursor: resCursor, - repos: await moderationService.views.repo(results), - }, - } - }, - }) -} diff --git a/packages/bsky/src/api/com/atproto/admin/updateSubjectStatus.ts b/packages/bsky/src/api/com/atproto/admin/updateSubjectStatus.ts new file mode 100644 index 00000000000..a7875280137 --- /dev/null +++ b/packages/bsky/src/api/com/atproto/admin/updateSubjectStatus.ts @@ -0,0 +1,74 @@ +import { AtUri } from '@atproto/syntax' +import { Server } from '../../../../lexicon' +import AppContext from '../../../../context' +import { + isRepoRef, + isRepoBlobRef, +} from '../../../../lexicon/types/com/atproto/admin/defs' +import { isMain as isStrongRef } from '../../../../lexicon/types/com/atproto/repo/strongRef' +import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' +import { CID } from 'multiformats/cid' + +export default function (server: Server, ctx: AppContext) { + server.com.atproto.admin.updateSubjectStatus({ + auth: ctx.authVerifier.roleOrAdminService, + handler: async ({ input, auth }) => { + const { canPerformTakedown } = ctx.authVerifier.parseCreds(auth) + if (!canPerformTakedown) { + throw new AuthRequiredError( + 'Must be a full moderator to update subject state', + ) + } + + const modService = ctx.services.moderation(ctx.db.getPrimary()) + + const { subject, takedown } = input.body + if (takedown) { + if (isRepoRef(subject)) { + const did = subject.did + if (takedown.applied) { + await modService.takedownRepo({ + takedownRef: takedown.ref ?? new Date().toISOString(), + did, + }) + } else { + await modService.reverseTakedownRepo({ did }) + } + } else if (isStrongRef(subject)) { + const uri = new AtUri(subject.uri) + const cid = CID.parse(subject.cid) + if (takedown.applied) { + await modService.takedownRecord({ + takedownRef: takedown.ref ?? new Date().toISOString(), + uri, + cid, + }) + } else { + await modService.reverseTakedownRecord({ uri }) + } + } else if (isRepoBlobRef(subject)) { + const { did, cid } = subject + if (takedown.applied) { + await modService.takedownBlob({ + takedownRef: takedown.ref ?? new Date().toISOString(), + did, + cid, + }) + } else { + await modService.reverseTakedownBlob({ did, cid }) + } + } else { + throw new InvalidRequestError('Invalid subject') + } + } + + return { + encoding: 'application/json', + body: { + subject, + takedown, + }, + } + }, + }) +} diff --git a/packages/bsky/src/api/com/atproto/moderation/createReport.ts b/packages/bsky/src/api/com/atproto/moderation/createReport.ts deleted file mode 100644 index 4a98d0629d4..00000000000 --- a/packages/bsky/src/api/com/atproto/moderation/createReport.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { AuthRequiredError, ForbiddenError } from '@atproto/xrpc-server' -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' -import { getReasonType, getSubject } from './util' -import { softDeleted } from '../../../../db/util' -import { REASONAPPEAL } from '../../../../lexicon/types/com/atproto/moderation/defs' - -export default function (server: Server, ctx: AppContext) { - server.com.atproto.moderation.createReport({ - // @TODO anonymous reports w/ optional auth are a temporary measure - auth: ctx.authOptionalVerifier, - handler: async ({ input, auth }) => { - const { reasonType, reason, subject } = input.body - const requester = auth.credentials.did - - const db = ctx.db.getPrimary() - - if (requester) { - // Don't accept reports from users that are fully taken-down - const actor = await ctx.services.actor(db).getActor(requester, true) - if (actor && softDeleted(actor)) { - throw new AuthRequiredError() - } - } - - const reportReasonType = getReasonType(reasonType) - const reportSubject = getSubject(subject) - const subjectDid = - 'did' in reportSubject ? reportSubject.did : reportSubject.uri.host - - // If the report is an appeal, the requester must be the author of the subject - if (reasonType === REASONAPPEAL && requester !== subjectDid) { - throw new ForbiddenError('You cannot appeal this report') - } - - const report = await db.transaction(async (dbTxn) => { - const moderationTxn = ctx.services.moderation(dbTxn) - return moderationTxn.report({ - reasonType: reportReasonType, - reason, - subject: reportSubject, - reportedBy: requester || ctx.cfg.serverDid, - }) - }) - - const moderationService = ctx.services.moderation(db) - return { - encoding: 'application/json', - body: moderationService.views.reportPublic(report), - } - }, - }) -} diff --git a/packages/bsky/src/api/index.ts b/packages/bsky/src/api/index.ts index da21b582019..cd99f0ad4dd 100644 --- a/packages/bsky/src/api/index.ts +++ b/packages/bsky/src/api/index.ts @@ -40,16 +40,11 @@ import updateSeen from './app/bsky/notification/updateSeen' import registerPush from './app/bsky/notification/registerPush' import getPopularFeedGenerators from './app/bsky/unspecced/getPopularFeedGenerators' import getTimelineSkeleton from './app/bsky/unspecced/getTimelineSkeleton' -import createReport from './com/atproto/moderation/createReport' -import emitModerationEvent from './com/atproto/admin/emitModerationEvent' -import searchRepos from './com/atproto/admin/searchRepos' -import adminGetRecord from './com/atproto/admin/getRecord' -import getRepo from './com/atproto/admin/getRepo' -import queryModerationStatuses from './com/atproto/admin/queryModerationStatuses' +import getSubjectStatus from './com/atproto/admin/getSubjectStatus' +import updateSubjectStatus from './com/atproto/admin/updateSubjectStatus' +import getAccountInfos from './com/atproto/admin/getAccountInfos' import resolveHandle from './com/atproto/identity/resolveHandle' import getRecord from './com/atproto/repo/getRecord' -import queryModerationEvents from './com/atproto/admin/queryModerationEvents' -import getModerationEvent from './com/atproto/admin/getModerationEvent' import fetchLabels from './com/atproto/temp/fetchLabels' export * as health from './health' @@ -101,14 +96,9 @@ export default function (server: Server, ctx: AppContext) { getPopularFeedGenerators(server, ctx) getTimelineSkeleton(server, ctx) // com.atproto - createReport(server, ctx) - emitModerationEvent(server, ctx) - searchRepos(server, ctx) - adminGetRecord(server, ctx) - getRepo(server, ctx) - getModerationEvent(server, ctx) - queryModerationEvents(server, ctx) - queryModerationStatuses(server, ctx) + getSubjectStatus(server, ctx) + updateSubjectStatus(server, ctx) + getAccountInfos(server, ctx) resolveHandle(server, ctx) getRecord(server, ctx) fetchLabels(server, ctx) diff --git a/packages/bsky/src/auth-verifier.ts b/packages/bsky/src/auth-verifier.ts new file mode 100644 index 00000000000..5a2bf753072 --- /dev/null +++ b/packages/bsky/src/auth-verifier.ts @@ -0,0 +1,275 @@ +import { + AuthRequiredError, + verifyJwt as verifyServiceJwt, +} from '@atproto/xrpc-server' +import { IdResolver } from '@atproto/identity' +import * as ui8 from 'uint8arrays' +import express from 'express' + +type ReqCtx = { + req: express.Request +} + +export enum RoleStatus { + Valid, + Invalid, + Missing, +} + +type NullOutput = { + credentials: { + type: 'null' + iss: null + } +} + +type StandardOutput = { + credentials: { + type: 'standard' + aud: string + iss: string + } +} + +type RoleOutput = { + credentials: { + type: 'role' + admin: boolean + moderator: boolean + triage: boolean + } +} + +type AdminServiceOutput = { + credentials: { + type: 'admin_service' + aud: string + iss: string + } +} + +export type AuthVerifierOpts = { + ownDid: string + adminDid: string + adminPass: string + moderatorPass: string + triagePass: string +} + +export class AuthVerifier { + private _adminPass: string + private _moderatorPass: string + private _triagePass: string + public ownDid: string + public adminDid: string + + constructor(public idResolver: IdResolver, opts: AuthVerifierOpts) { + this._adminPass = opts.adminPass + this._moderatorPass = opts.moderatorPass + this._triagePass = opts.triagePass + this.ownDid = opts.ownDid + this.adminDid = opts.adminDid + } + + // verifiers (arrow fns to preserve scope) + + standard = async (ctx: ReqCtx): Promise => { + const { iss, aud } = await this.verifyServiceJwt(ctx, { + aud: this.ownDid, + iss: null, + }) + return { credentials: { type: 'standard', iss, aud } } + } + + standardOptional = async ( + ctx: ReqCtx, + ): Promise => { + if (isBearerToken(ctx.req)) { + return this.standard(ctx) + } + return this.nullCreds() + } + + standardOptionalAnyAud = async ( + ctx: ReqCtx, + ): Promise => { + if (!isBearerToken(ctx.req)) { + return this.nullCreds() + } + const { iss, aud } = await this.verifyServiceJwt(ctx, { + aud: null, + iss: null, + }) + return { credentials: { type: 'standard', iss, aud } } + } + + role = (ctx: ReqCtx): RoleOutput => { + const creds = this.parseRoleCreds(ctx.req) + if (creds.status !== RoleStatus.Valid) { + throw new AuthRequiredError() + } + return { + credentials: { + ...creds, + type: 'role', + }, + } + } + + standardOrRole = async ( + ctx: ReqCtx, + ): Promise => { + if (isBearerToken(ctx.req)) { + return this.standard(ctx) + } else { + return this.role(ctx) + } + } + + optionalStandardOrRole = async ( + ctx: ReqCtx, + ): Promise => { + if (isBearerToken(ctx.req)) { + return await this.standard(ctx) + } else { + const creds = this.parseRoleCreds(ctx.req) + if (creds.status === RoleStatus.Valid) { + return { + credentials: { + ...creds, + type: 'role', + }, + } + } else if (creds.status === RoleStatus.Missing) { + return this.nullCreds() + } else { + throw new AuthRequiredError() + } + } + } + + adminService = async (reqCtx: ReqCtx): Promise => { + const { iss, aud } = await this.verifyServiceJwt(reqCtx, { + aud: this.ownDid, + iss: [this.adminDid], + }) + return { credentials: { type: 'admin_service', aud, iss } } + } + + roleOrAdminService = async ( + reqCtx: ReqCtx, + ): Promise => { + if (isBearerToken(reqCtx.req)) { + return this.adminService(reqCtx) + } else { + return this.role(reqCtx) + } + } + + parseRoleCreds(req: express.Request) { + const parsed = parseBasicAuth(req.headers.authorization || '') + const { Missing, Valid, Invalid } = RoleStatus + if (!parsed) { + return { status: Missing, admin: false, moderator: false, triage: false } + } + const { username, password } = parsed + if (username === 'admin' && password === this._adminPass) { + return { status: Valid, admin: true, moderator: true, triage: true } + } + if (username === 'admin' && password === this._moderatorPass) { + return { status: Valid, admin: false, moderator: true, triage: true } + } + if (username === 'admin' && password === this._triagePass) { + return { status: Valid, admin: false, moderator: false, triage: true } + } + return { status: Invalid, admin: false, moderator: false, triage: false } + } + + async verifyServiceJwt( + reqCtx: ReqCtx, + opts: { aud: string | null; iss: string[] | null }, + ) { + const getSigningKey = async ( + did: string, + forceRefresh: boolean, + ): Promise => { + if (opts.iss !== null && !opts.iss.includes(did)) { + throw new AuthRequiredError('Untrusted issuer', 'UntrustedIss') + } + return this.idResolver.did.resolveAtprotoKey(did, forceRefresh) + } + + const jwtStr = bearerTokenFromReq(reqCtx.req) + if (!jwtStr) { + throw new AuthRequiredError('missing jwt', 'MissingJwt') + } + const payload = await verifyServiceJwt(jwtStr, opts.aud, getSigningKey) + return { iss: payload.iss, aud: payload.aud } + } + + nullCreds(): NullOutput { + return { + credentials: { + type: 'null', + iss: null, + }, + } + } + + parseCreds( + creds: StandardOutput | RoleOutput | AdminServiceOutput | NullOutput, + ) { + const viewer = + creds.credentials.type === 'standard' ? creds.credentials.iss : null + const canViewTakedowns = + (creds.credentials.type === 'role' && creds.credentials.triage) || + creds.credentials.type === 'admin_service' + const canPerformTakedown = + (creds.credentials.type === 'role' && creds.credentials.moderator) || + creds.credentials.type === 'admin_service' + return { + viewer, + canViewTakedowns, + canPerformTakedown, + } + } +} + +// HELPERS +// --------- + +const BEARER = 'Bearer ' +const BASIC = 'Basic ' + +const isBearerToken = (req: express.Request): boolean => { + return req.headers.authorization?.startsWith(BEARER) ?? false +} + +const bearerTokenFromReq = (req: express.Request) => { + const header = req.headers.authorization || '' + if (!header.startsWith(BEARER)) return null + return header.slice(BEARER.length).trim() +} + +export const parseBasicAuth = ( + token: string, +): { username: string; password: string } | null => { + if (!token.startsWith(BASIC)) return null + const b64 = token.slice(BASIC.length) + let parsed: string[] + try { + parsed = ui8.toString(ui8.fromString(b64, 'base64pad'), 'utf8').split(':') + } catch (err) { + return null + } + const [username, password] = parsed + if (!username || !password) return null + return { username, password } +} + +export const buildBasicAuth = (username: string, password: string): string => { + return ( + BASIC + + ui8.toString(ui8.fromString(`${username}:${password}`, 'utf8'), 'base64pad') + ) +} diff --git a/packages/bsky/src/auto-moderator/index.ts b/packages/bsky/src/auto-moderator/index.ts index eac9e392156..dc246f0a3d4 100644 --- a/packages/bsky/src/auto-moderator/index.ts +++ b/packages/bsky/src/auto-moderator/index.ts @@ -6,16 +6,12 @@ import { PrimaryDatabase } from '../db' import { IdResolver } from '@atproto/identity' import { BackgroundQueue } from '../background' import { IndexerConfig } from '../indexer/config' -import { buildBasicAuth } from '../auth' +import { buildBasicAuth } from '../auth-verifier' import { CID } from 'multiformats/cid' -import { LabelService } from '../services/label' -import { ModerationService } from '../services/moderation' import { ImageFlagger } from './abyss' import { HiveLabeler, ImgLabeler } from './hive' import { KeywordLabeler, TextLabeler } from './keyword' import { ids } from '../lexicon/lexicons' -import { ImageUriBuilder } from '../image/uri' -import { ImageInvalidator } from '../image/invalidator' import { Abyss } from './abyss' import { FuzzyMatcher, TextFlagger } from './fuzzy-matcher' import { @@ -24,43 +20,21 @@ import { } from '../lexicon/types/com/atproto/moderation/defs' export class AutoModerator { - public pushAgent?: AtpAgent + public pushAgent: AtpAgent public imageFlagger?: ImageFlagger public textFlagger?: TextFlagger public imgLabeler?: ImgLabeler public textLabeler?: TextLabeler - services: { - label: (db: PrimaryDatabase) => LabelService - moderation?: (db: PrimaryDatabase) => ModerationService - } - constructor( public ctx: { db: PrimaryDatabase idResolver: IdResolver cfg: IndexerConfig backgroundQueue: BackgroundQueue - imgUriBuilder?: ImageUriBuilder - imgInvalidator?: ImageInvalidator }, ) { - const { imgUriBuilder, imgInvalidator } = ctx const { hiveApiKey, abyssEndpoint, abyssPassword } = ctx.cfg - this.services = { - label: LabelService.creator(null), - } - if (imgUriBuilder && imgInvalidator) { - this.services.moderation = ModerationService.creator( - imgUriBuilder, - imgInvalidator, - ) - } else { - log.error( - { imgUriBuilder, imgInvalidator }, - 'moderation service not properly configured', - ) - } this.imgLabeler = hiveApiKey ? new HiveLabeler(hiveApiKey, ctx) : undefined this.textLabeler = new KeywordLabeler(ctx.cfg.labelerKeywords) if (abyssEndpoint && abyssPassword) { @@ -79,14 +53,12 @@ export class AutoModerator { ) } - if (ctx.cfg.moderationPushUrl) { - const url = new URL(ctx.cfg.moderationPushUrl) - this.pushAgent = new AtpAgent({ service: url.origin }) - this.pushAgent.api.setHeader( - 'authorization', - buildBasicAuth(url.username, url.password), - ) - } + const url = new URL(ctx.cfg.moderationPushUrl) + this.pushAgent = new AtpAgent({ service: url.origin }) + this.pushAgent.api.setHeader( + 'authorization', + buildBasicAuth(url.username, url.password), + ) } processRecord(uri: AtUri, cid: CID, obj: unknown) { @@ -133,7 +105,7 @@ export class AutoModerator { ...imgs.map((cid) => this.imgLabeler?.labelImg(uri.host, cid)), ]) const labels = dedupe(allLabels.flat()) - await this.storeLabels(uri, recordCid, labels) + await this.pushLabels(uri, recordCid, labels) } async flagRecordText(uri: AtUri, cid: CID, text: string[]) { @@ -156,22 +128,22 @@ export class AutoModerator { if (!this.textFlagger) return const matches = this.textFlagger.getMatches(text) if (matches.length < 1) return - await this.ctx.db.transaction(async (dbTxn) => { - if (!this.services.moderation) { - log.error( - { subject, text, matches }, - 'no moderation service setup to flag record text', - ) - return - } - return this.services.moderation(dbTxn).report({ - reasonType: REASONOTHER, - reason: `Automatically flagged for possible slurs: ${matches.join( - ', ', - )}`, - subject, - reportedBy: this.ctx.cfg.labelerDid, - }) + const formattedSubject = + 'did' in subject + ? { + $type: 'com.atproto.admin.defs#repoRef', + did: subject.did, + } + : { + $type: 'com.atproto.repo.strongRef', + uri: subject.uri.toString(), + cid: subject.cid.toString(), + } + await this.pushAgent.api.com.atproto.moderation.createReport({ + reasonType: REASONOTHER, + reason: `Automatically flagged for possible slurs: ${matches.join(', ')}`, + subject: formattedSubject, + reportedBy: this.ctx.cfg.serverDid, }) } @@ -226,93 +198,49 @@ export class AutoModerator { 'hard takedown of record (and blobs) based on auto-matching', ) - if (this.services.moderation) { - await this.ctx.db.transaction(async (dbTxn) => { - // directly/locally create report, even if we use pushAgent for the takedown. don't have acctual account credentials for pushAgent, only admin auth - if (!this.services.moderation) { - // checked above, outside the transaction - return - } - const modSrvc = this.services.moderation(dbTxn) - await modSrvc.report({ - reportedBy: this.ctx.cfg.labelerDid, - reasonType: REASONVIOLATION, - subject: { - uri: uri, - cid: recordCid, - }, - reason: reportReason, - }) - }) - } + await this.pushAgent.com.atproto.moderation.createReport({ + reportedBy: this.ctx.cfg.serverDid, + reasonType: REASONVIOLATION, + subject: { + $type: 'com.atproto.repo.strongRef', + uri: uri.toString(), + cid: recordCid.toString(), + }, + reason: reportReason, + }) - if (this.pushAgent) { - await this.pushAgent.com.atproto.admin.emitModerationEvent({ - event: { - $type: 'com.atproto.admin.defs#modEventTakedown', - comment: takedownReason, - }, - subject: { - $type: 'com.atproto.repo.strongRef', - uri: uri.toString(), - cid: recordCid.toString(), - }, - subjectBlobCids: takedownCids.map((c) => c.toString()), - createdBy: this.ctx.cfg.labelerDid, - }) - } else { - await this.ctx.db.transaction(async (dbTxn) => { - if (!this.services.moderation) { - throw new Error('no mod push agent or uri invalidator setup') - } - const modSrvc = this.services.moderation(dbTxn) - const action = await modSrvc.logEvent({ - event: { - $type: 'com.atproto.admin.defs#modEventTakedown', - comment: takedownReason, - }, - subject: { uri, cid: recordCid }, - subjectBlobCids: takedownCids, - createdBy: this.ctx.cfg.labelerDid, - }) - await modSrvc.takedownRecord({ - takedownId: action.id, - uri: uri, - cid: recordCid, - blobCids: takedownCids, - }) - }) - } + await this.pushAgent.com.atproto.admin.emitModerationEvent({ + event: { + $type: 'com.atproto.admin.defs#modEventTakedown', + comment: takedownReason, + }, + subject: { + $type: 'com.atproto.repo.strongRef', + uri: uri.toString(), + cid: recordCid.toString(), + }, + subjectBlobCids: takedownCids.map((c) => c.toString()), + createdBy: this.ctx.cfg.serverDid, + }) } - async storeLabels(uri: AtUri, cid: CID, labels: string[]): Promise { + async pushLabels(uri: AtUri, cid: CID, labels: string[]): Promise { if (labels.length < 1) return - // Given that moderation service is available, log the labeling event for historical purposes - if (this.services.moderation) { - await this.ctx.db.transaction(async (dbTxn) => { - if (!this.services.moderation) return - const modSrvc = this.services.moderation(dbTxn) - await modSrvc.logEvent({ - event: { - $type: 'com.atproto.admin.defs#modEventLabel', - createLabelVals: labels, - negateLabelVals: [], - comment: '[AutoModerator]: Applying labels', - }, - subject: { uri, cid }, - createdBy: this.ctx.cfg.labelerDid, - }) - }) - } - - const labelSrvc = this.services.label(this.ctx.db) - await labelSrvc.formatAndCreate( - this.ctx.cfg.labelerDid, - uri.toString(), - cid.toString(), - { create: labels }, - ) + await this.pushAgent.com.atproto.admin.emitModerationEvent({ + event: { + $type: 'com.atproto.admin.defs#modEventLabel', + comment: '[AutoModerator]: Applying labels', + createLabelVals: labels, + negateLabelVals: [], + }, + subject: { + $type: 'com.atproto.repo.strongRef', + uri: uri.toString(), + cid: cid.toString(), + }, + createdBy: this.ctx.cfg.serverDid, + }) } async processAll() { diff --git a/packages/bsky/src/config.ts b/packages/bsky/src/config.ts index 04134e69e21..faa1ac7953d 100644 --- a/packages/bsky/src/config.ts +++ b/packages/bsky/src/config.ts @@ -31,11 +31,10 @@ export interface ServerConfigValues { imgUriEndpoint?: string blobCacheLocation?: string searchEndpoint?: string - labelerDid: string adminPassword: string - moderatorPassword?: string - triagePassword?: string - moderationPushUrl?: string + moderatorPassword: string + triagePassword: string + modServiceDid: string rateLimitsEnabled: boolean rateLimitBypassKey?: string rateLimitBypassIps?: string[] @@ -110,14 +109,17 @@ export class ServerConfig { ) const dbPostgresSchema = process.env.DB_POSTGRES_SCHEMA assert(dbPrimaryPostgresUrl) - const adminPassword = process.env.ADMIN_PASSWORD || 'admin' + const adminPassword = process.env.ADMIN_PASSWORD || undefined + assert(adminPassword) const moderatorPassword = process.env.MODERATOR_PASSWORD || undefined + assert(moderatorPassword) const triagePassword = process.env.TRIAGE_PASSWORD || undefined - const labelerDid = process.env.LABELER_DID || 'did:example:labeler' - const moderationPushUrl = - overrides?.moderationPushUrl || - process.env.MODERATION_PUSH_URL || + assert(triagePassword) + const modServiceDid = + overrides?.modServiceDid || + process.env.MODERATION_SERVICE_DID || undefined + assert(modServiceDid) const rateLimitsEnabled = process.env.RATE_LIMITS_ENABLED === 'true' const rateLimitBypassKey = process.env.RATE_LIMIT_BYPASS_KEY const rateLimitBypassIps = process.env.RATE_LIMIT_BYPASS_IPS @@ -150,11 +152,10 @@ export class ServerConfig { imgUriEndpoint, blobCacheLocation, searchEndpoint, - labelerDid, adminPassword, moderatorPassword, triagePassword, - moderationPushUrl, + modServiceDid, rateLimitsEnabled, rateLimitBypassKey, rateLimitBypassIps, @@ -267,10 +268,6 @@ export class ServerConfig { return this.cfg.searchEndpoint } - get labelerDid() { - return this.cfg.labelerDid - } - get adminPassword() { return this.cfg.adminPassword } @@ -283,8 +280,8 @@ export class ServerConfig { return this.cfg.triagePassword } - get moderationPushUrl() { - return this.cfg.moderationPushUrl + get modServiceDid() { + return this.cfg.modServiceDid } get rateLimitsEnabled() { diff --git a/packages/bsky/src/context.ts b/packages/bsky/src/context.ts index 8c8db6b2a3c..9a3eb222cdf 100644 --- a/packages/bsky/src/context.ts +++ b/packages/bsky/src/context.ts @@ -7,15 +7,14 @@ import { DatabaseCoordinator } from './db' import { ServerConfig } from './config' import { ImageUriBuilder } from './image/uri' import { Services } from './services' -import * as auth from './auth' import DidRedisCache from './did-cache' import { BackgroundQueue } from './background' import { MountedAlgos } from './feed-gen/types' import { NotificationServer } from './notifications' import { Redis } from './redis' +import { AuthVerifier } from './auth-verifier' export class AppContext { - public moderationPushAgent: AtpAgent | undefined constructor( private opts: { db: DatabaseCoordinator @@ -30,17 +29,9 @@ export class AppContext { searchAgent?: AtpAgent algos: MountedAlgos notifServer: NotificationServer + authVerifier: AuthVerifier }, - ) { - if (opts.cfg.moderationPushUrl) { - const url = new URL(opts.cfg.moderationPushUrl) - this.moderationPushAgent = new AtpAgent({ service: url.origin }) - this.moderationPushAgent.api.setHeader( - 'authorization', - auth.buildBasicAuth(url.username, url.password), - ) - } - } + ) {} get db(): DatabaseCoordinator { return this.opts.db @@ -86,30 +77,8 @@ export class AppContext { return this.opts.searchAgent } - get authVerifier() { - return auth.authVerifier(this.idResolver, { aud: this.cfg.serverDid }) - } - - get authVerifierAnyAudience() { - return auth.authVerifier(this.idResolver, { aud: null }) - } - - get authOptionalVerifierAnyAudience() { - return auth.authOptionalVerifier(this.idResolver, { aud: null }) - } - - get authOptionalVerifier() { - return auth.authOptionalVerifier(this.idResolver, { - aud: this.cfg.serverDid, - }) - } - - get authOptionalAccessOrRoleVerifier() { - return auth.authOptionalAccessOrRoleVerifier(this.idResolver, this.cfg) - } - - get roleVerifier() { - return auth.roleVerifier(this.cfg) + get authVerifier(): AuthVerifier { + return this.opts.authVerifier } async serviceAuthJwt(aud: string) { diff --git a/packages/bsky/src/db/database-schema.ts b/packages/bsky/src/db/database-schema.ts index 70ac6495c9b..3dba50d39ea 100644 --- a/packages/bsky/src/db/database-schema.ts +++ b/packages/bsky/src/db/database-schema.ts @@ -30,6 +30,7 @@ import * as algo from './tables/algo' import * as viewParam from './tables/view-param' import * as suggestedFollow from './tables/suggested-follow' import * as suggestedFeed from './tables/suggested-feed' +import * as blobTakedown from './tables/blob-takedown' export type DatabaseSchemaType = duplicateRecord.PartialDB & profile.PartialDB & @@ -61,7 +62,8 @@ export type DatabaseSchemaType = duplicateRecord.PartialDB & algo.PartialDB & viewParam.PartialDB & suggestedFollow.PartialDB & - suggestedFeed.PartialDB + suggestedFeed.PartialDB & + blobTakedown.PartialDB export type DatabaseSchema = Kysely diff --git a/packages/bsky/src/db/migrations/20231213T181744386Z-moderation-subject-appeal.ts b/packages/bsky/src/db/migrations/20231213T181744386Z-moderation-subject-appeal.ts deleted file mode 100644 index 95662737a63..00000000000 --- a/packages/bsky/src/db/migrations/20231213T181744386Z-moderation-subject-appeal.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Kysely } from 'kysely' - -export async function up(db: Kysely): Promise { - await db.schema - .alterTable('moderation_subject_status') - .addColumn('lastAppealedAt', 'varchar') - .execute() - await db.schema - .alterTable('moderation_subject_status') - .addColumn('appealed', 'boolean') - .execute() -} - -export async function down(db: Kysely): Promise { - await db.schema - .alterTable('moderation_subject_status') - .dropColumn('lastAppealedAt') - .execute() - await db.schema - .alterTable('moderation_subject_status') - .dropColumn('appealed') - .execute() -} diff --git a/packages/bsky/src/db/migrations/20231220T225126090Z-blob-takedowns.ts b/packages/bsky/src/db/migrations/20231220T225126090Z-blob-takedowns.ts new file mode 100644 index 00000000000..ce8d03cae54 --- /dev/null +++ b/packages/bsky/src/db/migrations/20231220T225126090Z-blob-takedowns.ts @@ -0,0 +1,66 @@ +import { Kysely } from 'kysely' + +export async function up(db: Kysely): Promise { + await db.schema + .createTable('blob_takedown') + .addColumn('did', 'varchar', (col) => col.notNull()) + .addColumn('cid', 'varchar', (col) => col.notNull()) + .addColumn('takedownRef', 'varchar', (col) => col.notNull()) + .addPrimaryKeyConstraint('blob_takedown_pkey', ['did', 'cid']) + .execute() + + await db.schema + .alterTable('actor') + .dropConstraint('actor_takedown_id_fkey') + .execute() + await db.schema.alterTable('actor').dropColumn('takedownId').execute() + await db.schema + .alterTable('actor') + .addColumn('takedownRef', 'varchar') + .execute() + + await db.schema + .alterTable('record') + .dropConstraint('record_takedown_id_fkey') + .execute() + await db.schema.alterTable('record').dropColumn('takedownId').execute() + await db.schema + .alterTable('record') + .addColumn('takedownRef', 'varchar') + .execute() +} + +export async function down(db: Kysely): Promise { + await db.schema.dropTable('blob_takedown').execute() + + await db.schema.alterTable('actor').dropColumn('takedownRef').execute() + await db.schema + .alterTable('actor') + .addColumn('takedownId', 'integer') + .execute() + + await db.schema + .alterTable('actor') + .addForeignKeyConstraint( + 'actor_takedown_id_fkey', + ['takedownId'], + 'moderation_event', + ['id'], + ) + .execute() + + await db.schema.alterTable('record').dropColumn('takedownRef').execute() + await db.schema + .alterTable('record') + .addColumn('takedownId', 'integer') + .execute() + await db.schema + .alterTable('record') + .addForeignKeyConstraint( + 'record_takedown_id_fkey', + ['takedownId'], + 'moderation_event', + ['id'], + ) + .execute() +} diff --git a/packages/bsky/src/db/migrations/index.ts b/packages/bsky/src/db/migrations/index.ts index ea14e775383..76272566514 100644 --- a/packages/bsky/src/db/migrations/index.ts +++ b/packages/bsky/src/db/migrations/index.ts @@ -32,4 +32,4 @@ export * as _20230920T213858047Z from './20230920T213858047Z-add-tags-to-post' export * as _20230929T192920807Z from './20230929T192920807Z-record-cursor-indexes' export * as _20231003T202833377Z from './20231003T202833377Z-create-moderation-subject-status' export * as _20231205T000257238Z from './20231205T000257238Z-remove-did-cache' -export * as _20231213T181744386Z from './20231213T181744386Z-moderation-subject-appeal' +export * as _20231220T225126090Z from './20231220T225126090Z-blob-takedowns' diff --git a/packages/bsky/src/db/periodic-moderation-event-reversal.ts b/packages/bsky/src/db/periodic-moderation-event-reversal.ts deleted file mode 100644 index 9937c113d59..00000000000 --- a/packages/bsky/src/db/periodic-moderation-event-reversal.ts +++ /dev/null @@ -1,125 +0,0 @@ -import { wait } from '@atproto/common' -import { Leader } from './leader' -import { dbLogger } from '../logger' -import AppContext from '../context' -import { AtUri } from '@atproto/api' -import { ModerationSubjectStatusRow } from '../services/moderation/types' -import { CID } from 'multiformats/cid' -import AtpAgent from '@atproto/api' -import { retryHttp } from '../util/retry' - -export const MODERATION_ACTION_REVERSAL_ID = 1011 - -export class PeriodicModerationEventReversal { - leader = new Leader( - MODERATION_ACTION_REVERSAL_ID, - this.appContext.db.getPrimary(), - ) - destroyed = false - pushAgent?: AtpAgent - - constructor(private appContext: AppContext) { - this.pushAgent = appContext.moderationPushAgent - } - - async revertState(eventRow: ModerationSubjectStatusRow) { - await this.appContext.db.getPrimary().transaction(async (dbTxn) => { - const moderationTxn = this.appContext.services.moderation(dbTxn) - const originalEvent = - await moderationTxn.getLastReversibleEventForSubject(eventRow) - if (originalEvent) { - const { restored } = await moderationTxn.revertState({ - action: originalEvent.action, - createdBy: originalEvent.createdBy, - comment: - '[SCHEDULED_REVERSAL] Reverting action as originally scheduled', - subject: - eventRow.recordPath && eventRow.recordCid - ? { - uri: AtUri.make( - eventRow.did, - ...eventRow.recordPath.split('/'), - ), - cid: CID.parse(eventRow.recordCid), - } - : { did: eventRow.did }, - createdAt: new Date(), - }) - - const { pushAgent } = this - if ( - originalEvent.action === 'com.atproto.admin.defs#modEventTakedown' && - restored?.subjects?.length && - pushAgent - ) { - await Promise.allSettled( - restored.subjects.map((subject) => - retryHttp(() => - pushAgent.api.com.atproto.admin.updateSubjectStatus({ - subject, - takedown: { - applied: false, - }, - }), - ), - ), - ) - } - } - }) - } - - async findAndRevertDueActions() { - const moderationService = this.appContext.services.moderation( - this.appContext.db.getPrimary(), - ) - const subjectsDueForReversal = - await moderationService.getSubjectsDueForReversal() - - // We shouldn't have too many actions due for reversal at any given time, so running in parallel is probably fine - // Internally, each reversal runs within its own transaction - await Promise.all(subjectsDueForReversal.map(this.revertState.bind(this))) - } - - async run() { - while (!this.destroyed) { - try { - const { ran } = await this.leader.run(async ({ signal }) => { - while (!signal.aborted) { - // super basic synchronization by agreeing when the intervals land relative to unix timestamp - const now = Date.now() - const intervalMs = 1000 * 60 - const nextIteration = Math.ceil(now / intervalMs) - const nextInMs = nextIteration * intervalMs - now - await wait(nextInMs) - if (signal.aborted) break - await this.findAndRevertDueActions() - } - }) - if (ran && !this.destroyed) { - throw new Error('View maintainer completed, but should be persistent') - } - } catch (err) { - dbLogger.error( - { - err, - lockId: MODERATION_ACTION_REVERSAL_ID, - }, - 'moderation action reversal errored', - ) - } - if (!this.destroyed) { - await wait(10000 + jitter(2000)) - } - } - } - - destroy() { - this.destroyed = true - this.leader.destroy() - } -} - -function jitter(maxMs) { - return Math.round((Math.random() - 0.5) * maxMs * 2) -} diff --git a/packages/bsky/src/db/tables/actor.ts b/packages/bsky/src/db/tables/actor.ts index 312c5808cab..3ec3864b806 100644 --- a/packages/bsky/src/db/tables/actor.ts +++ b/packages/bsky/src/db/tables/actor.ts @@ -2,7 +2,7 @@ export interface Actor { did: string handle: string | null indexedAt: string - takedownId: number | null // @TODO(bsky) + takedownRef: string | null } export const tableName = 'actor' diff --git a/packages/bsky/src/db/tables/blob-takedown.ts b/packages/bsky/src/db/tables/blob-takedown.ts new file mode 100644 index 00000000000..08ff80b1e0e --- /dev/null +++ b/packages/bsky/src/db/tables/blob-takedown.ts @@ -0,0 +1,9 @@ +export interface BlobTakedown { + did: string + cid: string + takedownRef: string +} + +export const tableName = 'blob_takedown' + +export type PartialDB = { [tableName]: BlobTakedown } diff --git a/packages/bsky/src/db/tables/moderation.ts b/packages/bsky/src/db/tables/moderation.ts index 99f5e73310d..f1ac3572785 100644 --- a/packages/bsky/src/db/tables/moderation.ts +++ b/packages/bsky/src/db/tables/moderation.ts @@ -20,7 +20,6 @@ export interface ModerationEvent { | 'com.atproto.admin.defs#modEventMute' | 'com.atproto.admin.defs#modEventReverseTakedown' | 'com.atproto.admin.defs#modEventEmail' - | 'com.atproto.admin.defs#modEventResolveAppeal' subjectType: 'com.atproto.admin.defs#repoRef' | 'com.atproto.repo.strongRef' subjectDid: string subjectUri: string | null @@ -48,11 +47,9 @@ export interface ModerationSubjectStatus { lastReviewedBy: string | null lastReviewedAt: string | null lastReportedAt: string | null - lastAppealedAt: string | null muteUntil: string | null suspendUntil: string | null takendown: boolean - appealed: boolean | null comment: string | null } diff --git a/packages/bsky/src/db/tables/record.ts b/packages/bsky/src/db/tables/record.ts index ed35cf559f2..5efe5667efa 100644 --- a/packages/bsky/src/db/tables/record.ts +++ b/packages/bsky/src/db/tables/record.ts @@ -4,7 +4,7 @@ export interface Record { did: string json: string indexedAt: string - takedownId: number | null // @TODO(bsky) + takedownRef: string | null } export const tableName = 'record' diff --git a/packages/bsky/src/db/util.ts b/packages/bsky/src/db/util.ts index dfd93e66a17..b8269ba08ac 100644 --- a/packages/bsky/src/db/util.ts +++ b/packages/bsky/src/db/util.ts @@ -20,11 +20,11 @@ export const actorWhereClause = (actor: string) => { // Applies to actor or record table export const notSoftDeletedClause = (alias: DbRef) => { - return sql`${alias}."takedownId" is null` + return sql`${alias}."takedownRef" is null` } -export const softDeleted = (actorOrRecord: { takedownId: number | null }) => { - return actorOrRecord.takedownId !== null +export const softDeleted = (actorOrRecord: { takedownRef: string | null }) => { + return actorOrRecord.takedownRef !== null } export const countAll = sql`count(*)` diff --git a/packages/bsky/src/index.ts b/packages/bsky/src/index.ts index 2f83efb3746..7c89a997310 100644 --- a/packages/bsky/src/index.ts +++ b/packages/bsky/src/index.ts @@ -33,20 +33,20 @@ import { NotificationServer } from './notifications' import { AtpAgent } from '@atproto/api' import { Keypair } from '@atproto/crypto' import { Redis } from './redis' +import { AuthVerifier } from './auth-verifier' export type { ServerConfigValues } from './config' export type { MountedAlgos } from './feed-gen/types' export { ServerConfig } from './config' export { Database, PrimaryDatabase, DatabaseCoordinator } from './db' -export { PeriodicModerationEventReversal } from './db/periodic-moderation-event-reversal' export { Redis } from './redis' export { ViewMaintainer } from './db/views' export { AppContext } from './context' +export type { ImageInvalidator } from './image/invalidator' export { makeAlgos } from './feed-gen' export * from './daemon' export * from './indexer' export * from './ingester' -export { MigrateModerationData } from './migrate-moderation-data' export class BskyAppView { public ctx: AppContext @@ -127,6 +127,14 @@ export class BskyAppView { }, }) + const authVerifier = new AuthVerifier(idResolver, { + ownDid: config.serverDid, + adminDid: config.modServiceDid, + adminPass: config.adminPassword, + moderatorPass: config.moderatorPassword, + triagePass: config.triagePassword, + }) + const ctx = new AppContext({ db, cfg: config, @@ -140,6 +148,7 @@ export class BskyAppView { searchAgent, algos, notifServer, + authVerifier, }) const xrpcOpts: XrpcServerOptions = { diff --git a/packages/bsky/src/indexer/config.ts b/packages/bsky/src/indexer/config.ts index dd8b9ab89d5..6acf86f9543 100644 --- a/packages/bsky/src/indexer/config.ts +++ b/packages/bsky/src/indexer/config.ts @@ -3,6 +3,7 @@ import { DAY, HOUR, parseIntWithFallback } from '@atproto/common' export interface IndexerConfigValues { version: string + serverDid: string dbPostgresUrl: string dbPostgresSchema?: string redisHost?: string // either set redis host, or both sentinel name and hosts @@ -13,7 +14,6 @@ export interface IndexerConfigValues { didCacheStaleTTL: number didCacheMaxTTL: number handleResolveNameservers?: string[] - labelerDid: string hiveApiKey?: string abyssEndpoint?: string abyssPassword?: string @@ -21,7 +21,7 @@ export interface IndexerConfigValues { fuzzyMatchB64?: string fuzzyFalsePositiveB64?: string labelerKeywords: Record - moderationPushUrl?: string + moderationPushUrl: string indexerConcurrency?: number indexerPartitionIds: number[] indexerPartitionBatchSize?: number @@ -37,6 +37,7 @@ export class IndexerConfig { static readEnv(overrides?: Partial) { const version = process.env.BSKY_VERSION || '0.0.0' + const serverDid = process.env.SERVER_DID || 'did:example:test' const dbPostgresUrl = overrides?.dbPostgresUrl || process.env.DB_PRIMARY_POSTGRES_URL const dbPostgresSchema = @@ -66,11 +67,11 @@ export class IndexerConfig { const handleResolveNameservers = process.env.HANDLE_RESOLVE_NAMESERVERS ? process.env.HANDLE_RESOLVE_NAMESERVERS.split(',') : [] - const labelerDid = process.env.LABELER_DID || 'did:example:labeler' const moderationPushUrl = overrides?.moderationPushUrl || process.env.MODERATION_PUSH_URL || undefined + assert(moderationPushUrl) const hiveApiKey = process.env.HIVE_API_KEY || undefined const abyssEndpoint = process.env.ABYSS_ENDPOINT const abyssPassword = process.env.ABYSS_PASSWORD @@ -101,6 +102,7 @@ export class IndexerConfig { assert(indexerPartitionIds.length > 0) return new IndexerConfig({ version, + serverDid, dbPostgresUrl, dbPostgresSchema, redisHost, @@ -111,7 +113,6 @@ export class IndexerConfig { didCacheStaleTTL, didCacheMaxTTL, handleResolveNameservers, - labelerDid, moderationPushUrl, hiveApiKey, abyssEndpoint, @@ -136,6 +137,10 @@ export class IndexerConfig { return this.cfg.version } + get serverDid() { + return this.cfg.serverDid + } + get dbPostgresUrl() { return this.cfg.dbPostgresUrl } @@ -176,10 +181,6 @@ export class IndexerConfig { return this.cfg.handleResolveNameservers } - get labelerDid() { - return this.cfg.labelerDid - } - get moderationPushUrl() { return this.cfg.moderationPushUrl } diff --git a/packages/bsky/src/indexer/index.ts b/packages/bsky/src/indexer/index.ts index 496cff67c73..fec81faa374 100644 --- a/packages/bsky/src/indexer/index.ts +++ b/packages/bsky/src/indexer/index.ts @@ -13,8 +13,6 @@ import { AutoModerator } from '../auto-moderator' import { Redis } from '../redis' import { NotificationServer } from '../notifications' import { CloseFn, createServer, startServer } from './server' -import { ImageUriBuilder } from '../image/uri' -import { ImageInvalidator } from '../image/invalidator' export { IndexerConfig } from './config' export type { IndexerConfigValues } from './config' @@ -42,7 +40,6 @@ export class BskyIndexer { redis: Redis redisCache: Redis cfg: IndexerConfig - imgInvalidator?: ImageInvalidator }): BskyIndexer { const { db, redis, redisCache, cfg } = opts const didCache = new DidRedisCache(redisCache.withNamespace('did-doc'), { @@ -56,17 +53,11 @@ export class BskyIndexer { }) const backgroundQueue = new BackgroundQueue(db) - const imgUriBuilder = cfg.imgUriEndpoint - ? new ImageUriBuilder(cfg.imgUriEndpoint) - : undefined - const imgInvalidator = opts.imgInvalidator const autoMod = new AutoModerator({ db, idResolver, cfg, backgroundQueue, - imgUriBuilder, - imgInvalidator, }) const notifServer = cfg.pushNotificationEndpoint diff --git a/packages/bsky/src/ingester/config.ts b/packages/bsky/src/ingester/config.ts index 969aeeff7aa..5c157571f2a 100644 --- a/packages/bsky/src/ingester/config.ts +++ b/packages/bsky/src/ingester/config.ts @@ -9,6 +9,7 @@ export interface IngesterConfigValues { redisSentinelHosts?: string[] redisPassword?: string repoProvider: string + labelProvider?: string ingesterPartitionCount: number ingesterNamespace?: string ingesterSubLockId?: number @@ -40,6 +41,7 @@ export class IngesterConfig { const redisPassword = overrides?.redisPassword || process.env.REDIS_PASSWORD || undefined const repoProvider = overrides?.repoProvider || process.env.REPO_PROVIDER // E.g. ws://abc.com:4000 + const labelProvider = overrides?.labelProvider || process.env.LABEL_PROVIDER const ingesterPartitionCount = overrides?.ingesterPartitionCount || maybeParseInt(process.env.INGESTER_PARTITION_COUNT) @@ -69,6 +71,7 @@ export class IngesterConfig { redisSentinelHosts, redisPassword, repoProvider, + labelProvider, ingesterPartitionCount, ingesterSubLockId, ingesterNamespace, @@ -110,6 +113,10 @@ export class IngesterConfig { return this.cfg.repoProvider } + get labelProvider() { + return this.cfg.labelProvider + } + get ingesterPartitionCount() { return this.cfg.ingesterPartitionCount } diff --git a/packages/bsky/src/ingester/context.ts b/packages/bsky/src/ingester/context.ts index 792d3c2015a..797545b9f98 100644 --- a/packages/bsky/src/ingester/context.ts +++ b/packages/bsky/src/ingester/context.ts @@ -1,6 +1,7 @@ import { PrimaryDatabase } from '../db' import { Redis } from '../redis' import { IngesterConfig } from './config' +import { LabelSubscription } from './label-subscription' export class IngesterContext { constructor( @@ -8,6 +9,7 @@ export class IngesterContext { db: PrimaryDatabase redis: Redis cfg: IngesterConfig + labelSubscription?: LabelSubscription }, ) {} @@ -22,6 +24,10 @@ export class IngesterContext { get cfg(): IngesterConfig { return this.opts.cfg } + + get labelSubscription(): LabelSubscription | undefined { + return this.opts.labelSubscription + } } export default IngesterContext diff --git a/packages/bsky/src/ingester/index.ts b/packages/bsky/src/ingester/index.ts index 376da2887da..b923b92c09c 100644 --- a/packages/bsky/src/ingester/index.ts +++ b/packages/bsky/src/ingester/index.ts @@ -5,6 +5,7 @@ import { Redis } from '../redis' import { IngesterConfig } from './config' import { IngesterContext } from './context' import { IngesterSubscription } from './subscription' +import { LabelSubscription } from './label-subscription' export { IngesterConfig } from './config' export type { IngesterConfigValues } from './config' @@ -26,7 +27,15 @@ export class BskyIngester { cfg: IngesterConfig }): BskyIngester { const { db, redis, cfg } = opts - const ctx = new IngesterContext({ db, redis, cfg }) + const labelSubscription = cfg.labelProvider + ? new LabelSubscription(db, cfg.labelProvider) + : undefined + const ctx = new IngesterContext({ + db, + redis, + cfg, + labelSubscription, + }) const sub = new IngesterSubscription(ctx, { service: cfg.repoProvider, subLockId: cfg.ingesterSubLockId, @@ -63,11 +72,13 @@ export class BskyIngester { 'ingester stats', ) }, 500) + await this.ctx.labelSubscription?.start() this.sub.run() return this } async destroy(opts?: { skipDb: boolean }): Promise { + await this.ctx.labelSubscription?.destroy() await this.sub.destroy() clearInterval(this.subStatsInterval) await this.ctx.redis.destroy() diff --git a/packages/bsky/src/ingester/label-subscription.ts b/packages/bsky/src/ingester/label-subscription.ts new file mode 100644 index 00000000000..d486473cf98 --- /dev/null +++ b/packages/bsky/src/ingester/label-subscription.ts @@ -0,0 +1,76 @@ +import AtpAgent from '@atproto/api' +import { PrimaryDatabase } from '../db' +import { sql } from 'kysely' +import { dbLogger } from '../logger' +import { SECOND } from '@atproto/common' + +export class LabelSubscription { + destroyed = false + promise: Promise = Promise.resolve() + timer: NodeJS.Timer | undefined + lastLabel: number | undefined + labelAgent: AtpAgent + + constructor(public db: PrimaryDatabase, public labelProvider: string) { + this.labelAgent = new AtpAgent({ service: labelProvider }) + } + + async start() { + const res = await this.db.db + .selectFrom('label') + .select('cts') + .orderBy('cts', 'desc') + .limit(1) + .executeTakeFirst() + this.lastLabel = res ? new Date(res.cts).getTime() : undefined + this.poll() + } + + poll() { + if (this.destroyed) return + this.promise = this.fetchLabels() + .catch((err) => + dbLogger.error({ err }, 'failed to fetch and store labels'), + ) + .finally(() => { + this.timer = setTimeout(() => this.poll(), SECOND) + }) + } + + async fetchLabels() { + const res = await this.labelAgent.api.com.atproto.temp.fetchLabels({ + since: this.lastLabel, + }) + const last = res.data.labels.at(-1) + if (!last) { + return + } + const dbVals = res.data.labels.map((l) => ({ + ...l, + cid: l.cid ?? '', + neg: l.neg ?? false, + })) + const { ref } = this.db.db.dynamic + const excluded = (col: string) => ref(`excluded.${col}`) + await this.db + .asPrimary() + .db.insertInto('label') + .values(dbVals) + .onConflict((oc) => + oc.columns(['src', 'uri', 'cid', 'val']).doUpdateSet({ + neg: sql`${excluded('neg')}`, + cts: sql`${excluded('cts')}`, + }), + ) + .execute() + this.lastLabel = new Date(last.cts).getTime() + } + + async destroy() { + this.destroyed = true + if (this.timer) { + clearTimeout(this.timer) + } + await this.promise + } +} diff --git a/packages/bsky/src/lexicon/index.ts b/packages/bsky/src/lexicon/index.ts index 40c50cd1687..386f77196e7 100644 --- a/packages/bsky/src/lexicon/index.ts +++ b/packages/bsky/src/lexicon/index.ts @@ -15,6 +15,7 @@ import * as ComAtprotoAdminDisableInviteCodes from './types/com/atproto/admin/di import * as ComAtprotoAdminEmitModerationEvent from './types/com/atproto/admin/emitModerationEvent' import * as ComAtprotoAdminEnableAccountInvites from './types/com/atproto/admin/enableAccountInvites' import * as ComAtprotoAdminGetAccountInfo from './types/com/atproto/admin/getAccountInfo' +import * as ComAtprotoAdminGetAccountInfos from './types/com/atproto/admin/getAccountInfos' import * as ComAtprotoAdminGetInviteCodes from './types/com/atproto/admin/getInviteCodes' import * as ComAtprotoAdminGetModerationEvent from './types/com/atproto/admin/getModerationEvent' import * as ComAtprotoAdminGetRecord from './types/com/atproto/admin/getRecord' @@ -265,6 +266,17 @@ export class AdminNS { return this._server.xrpc.method(nsid, cfg) } + getAccountInfos( + cfg: ConfigOf< + AV, + ComAtprotoAdminGetAccountInfos.Handler>, + ComAtprotoAdminGetAccountInfos.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.admin.getAccountInfos' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + getInviteCodes( cfg: ConfigOf< AV, diff --git a/packages/bsky/src/lexicon/lexicons.ts b/packages/bsky/src/lexicon/lexicons.ts index c0e7e51fddc..258d297c69e 100644 --- a/packages/bsky/src/lexicon/lexicons.ts +++ b/packages/bsky/src/lexicon/lexicons.ts @@ -436,6 +436,12 @@ export const schemaDict = { email: { type: 'string', }, + relatedRecords: { + type: 'array', + items: { + type: 'unknown', + }, + }, indexedAt: { type: 'string', format: 'datetime', @@ -1046,6 +1052,45 @@ export const schemaDict = { }, }, }, + ComAtprotoAdminGetAccountInfos: { + lexicon: 1, + id: 'com.atproto.admin.getAccountInfos', + defs: { + main: { + type: 'query', + description: 'Get details about some accounts.', + parameters: { + type: 'params', + required: ['dids'], + properties: { + dids: { + type: 'array', + items: { + type: 'string', + format: 'did', + }, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['infos'], + properties: { + infos: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#accountView', + }, + }, + }, + }, + }, + }, + }, + }, ComAtprotoAdminGetInviteCodes: { lexicon: 1, id: 'com.atproto.admin.getInviteCodes', @@ -7875,6 +7920,7 @@ export const ids = { ComAtprotoAdminEmitModerationEvent: 'com.atproto.admin.emitModerationEvent', ComAtprotoAdminEnableAccountInvites: 'com.atproto.admin.enableAccountInvites', ComAtprotoAdminGetAccountInfo: 'com.atproto.admin.getAccountInfo', + ComAtprotoAdminGetAccountInfos: 'com.atproto.admin.getAccountInfos', ComAtprotoAdminGetInviteCodes: 'com.atproto.admin.getInviteCodes', ComAtprotoAdminGetModerationEvent: 'com.atproto.admin.getModerationEvent', ComAtprotoAdminGetRecord: 'com.atproto.admin.getRecord', diff --git a/packages/bsky/src/lexicon/types/com/atproto/admin/defs.ts b/packages/bsky/src/lexicon/types/com/atproto/admin/defs.ts index 4be9efb21a9..8236f848fa0 100644 --- a/packages/bsky/src/lexicon/types/com/atproto/admin/defs.ts +++ b/packages/bsky/src/lexicon/types/com/atproto/admin/defs.ts @@ -255,6 +255,7 @@ export interface AccountView { did: string handle: string email?: string + relatedRecords?: {}[] indexedAt: string invitedBy?: ComAtprotoServerDefs.InviteCode invites?: ComAtprotoServerDefs.InviteCode[] diff --git a/packages/bsky/src/lexicon/types/com/atproto/admin/getAccountInfos.ts b/packages/bsky/src/lexicon/types/com/atproto/admin/getAccountInfos.ts new file mode 100644 index 00000000000..46d917293a8 --- /dev/null +++ b/packages/bsky/src/lexicon/types/com/atproto/admin/getAccountInfos.ts @@ -0,0 +1,46 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as ComAtprotoAdminDefs from './defs' + +export interface QueryParams { + dids: string[] +} + +export type InputSchema = undefined + +export interface OutputSchema { + infos: ComAtprotoAdminDefs.AccountView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/bsky/src/migrate-moderation-data.ts b/packages/bsky/src/migrate-moderation-data.ts deleted file mode 100644 index 6919358170a..00000000000 --- a/packages/bsky/src/migrate-moderation-data.ts +++ /dev/null @@ -1,414 +0,0 @@ -import { sql } from 'kysely' -import { DatabaseCoordinator, PrimaryDatabase } from './index' -import { adjustModerationSubjectStatus } from './services/moderation/status' -import { ModerationEventRow } from './services/moderation/types' - -type ModerationActionRow = Omit & { - reason: string | null -} - -const getEnv = () => ({ - DB_URL: - process.env.MODERATION_MIGRATION_DB_URL || - 'postgresql://pg:password@127.0.0.1:5433/postgres', - DB_POOL_SIZE: Number(process.env.MODERATION_MIGRATION_DB_POOL_SIZE) || 10, - DB_SCHEMA: process.env.MODERATION_MIGRATION_DB_SCHEMA || 'bsky', -}) - -const countEntries = async (db: PrimaryDatabase) => { - const [allActions, allReports] = await Promise.all([ - db.db - // @ts-ignore - .selectFrom('moderation_action') - // @ts-ignore - .select((eb) => eb.fn.count('id').as('count')) - .executeTakeFirstOrThrow(), - db.db - // @ts-ignore - .selectFrom('moderation_report') - // @ts-ignore - .select((eb) => eb.fn.count('id').as('count')) - .executeTakeFirstOrThrow(), - ]) - - return { reportsCount: allReports.count, actionsCount: allActions.count } -} - -const countEvents = async (db: PrimaryDatabase) => { - const events = await db.db - .selectFrom('moderation_event') - .select((eb) => eb.fn.count('id').as('count')) - .executeTakeFirstOrThrow() - - return events.count -} - -const getLatestReportLegacyRefId = async (db: PrimaryDatabase) => { - const events = await db.db - .selectFrom('moderation_event') - .select((eb) => eb.fn.max('legacyRefId').as('latestLegacyRefId')) - .where('action', '=', 'com.atproto.admin.defs#modEventReport') - .executeTakeFirstOrThrow() - - return events.latestLegacyRefId -} - -const countStatuses = async (db: PrimaryDatabase) => { - const events = await db.db - .selectFrom('moderation_subject_status') - .select((eb) => eb.fn.count('id').as('count')) - .executeTakeFirstOrThrow() - - return events.count -} - -const processLegacyReports = async ( - db: PrimaryDatabase, - legacyIds: number[], -) => { - if (!legacyIds.length) { - console.log('No legacy reports to process') - return - } - const reports = await db.db - .selectFrom('moderation_event') - .where('action', '=', 'com.atproto.admin.defs#modEventReport') - .where('legacyRefId', 'in', legacyIds) - .orderBy('legacyRefId', 'asc') - .selectAll() - .execute() - - console.log(`Processing ${reports.length} reports from ${legacyIds.length}`) - await db.transaction(async (tx) => { - // This will be slow but we need to run this in sequence - for (const report of reports) { - await adjustModerationSubjectStatus(tx, report) - } - }) - console.log(`Completed processing ${reports.length} reports`) -} - -const getReportEventsAboveLegacyId = async ( - db: PrimaryDatabase, - aboveLegacyId: number, -) => { - return await db.db - .selectFrom('moderation_event') - .where('action', '=', 'com.atproto.admin.defs#modEventReport') - .where('legacyRefId', '>', aboveLegacyId) - .select(sql`"legacyRefId"`.as('legacyRefId')) - .execute() -} - -const createEvents = async ( - db: PrimaryDatabase, - opts?: { onlyReportsAboveId: number }, -) => { - const commonColumnsToSelect = [ - 'subjectDid', - 'subjectUri', - 'subjectType', - 'subjectCid', - sql`reason`.as('comment'), - 'createdAt', - ] - const commonColumnsToInsert = [ - 'subjectDid', - 'subjectUri', - 'subjectType', - 'subjectCid', - 'comment', - 'createdAt', - 'action', - 'createdBy', - ] as const - - let totalActions: number - if (!opts?.onlyReportsAboveId) { - await db.db - .insertInto('moderation_event') - .columns([ - 'id', - ...commonColumnsToInsert, - 'createLabelVals', - 'negateLabelVals', - 'durationInHours', - 'expiresAt', - ]) - .expression((eb) => - eb - // @ts-ignore - .selectFrom('moderation_action') - // @ts-ignore - .select([ - 'id', - ...commonColumnsToSelect, - sql`CONCAT('com.atproto.admin.defs#modEvent', UPPER(SUBSTRING(SPLIT_PART(action, '#', 2) FROM 1 FOR 1)), SUBSTRING(SPLIT_PART(action, '#', 2) FROM 2))`.as( - 'action', - ), - 'createdBy', - 'createLabelVals', - 'negateLabelVals', - 'durationInHours', - 'expiresAt', - ]) - .orderBy('id', 'asc'), - ) - .execute() - - totalActions = await countEvents(db) - console.log(`Created ${totalActions} events from actions`) - - await sql`SELECT setval(pg_get_serial_sequence('moderation_event', 'id'), (select max(id) from moderation_event))`.execute( - db.db, - ) - console.log('Reset the id sequence for moderation_event') - } else { - totalActions = await countEvents(db) - } - - await db.db - .insertInto('moderation_event') - .columns([...commonColumnsToInsert, 'meta', 'legacyRefId']) - .expression((eb) => { - const builder = eb - // @ts-ignore - .selectFrom('moderation_report') - // @ts-ignore - .select([ - ...commonColumnsToSelect, - sql`'com.atproto.admin.defs#modEventReport'`.as('action'), - sql`"reportedByDid"`.as('createdBy'), - sql`json_build_object('reportType', "reasonType")`.as('meta'), - sql`id`.as('legacyRefId'), - ]) - - if (opts?.onlyReportsAboveId) { - // @ts-ignore - return builder.where('id', '>', opts.onlyReportsAboveId) - } - - return builder - }) - .execute() - - const totalEvents = await countEvents(db) - console.log(`Created ${totalEvents - totalActions} events from reports`) - - return -} - -const setReportedAtTimestamp = async (db: PrimaryDatabase) => { - console.log('Initiating lastReportedAt timestamp sync') - const didUpdate = await sql` - UPDATE moderation_subject_status - SET "lastReportedAt" = reports."createdAt" - FROM ( - select "subjectDid", "subjectUri", MAX("createdAt") as "createdAt" - from moderation_report - where "subjectUri" is null - group by "subjectDid", "subjectUri" - ) as reports - WHERE reports."subjectDid" = moderation_subject_status."did" - AND "recordPath" = '' - AND ("lastReportedAt" is null OR "lastReportedAt" < reports."createdAt") - `.execute(db.db) - - console.log( - `Updated lastReportedAt for ${didUpdate.numUpdatedOrDeletedRows} did subject`, - ) - - const contentUpdate = await sql` - UPDATE moderation_subject_status - SET "lastReportedAt" = reports."createdAt" - FROM ( - select "subjectDid", "subjectUri", MAX("createdAt") as "createdAt" - from moderation_report - where "subjectUri" is not null - group by "subjectDid", "subjectUri" - ) as reports - WHERE reports."subjectDid" = moderation_subject_status."did" - AND "recordPath" is not null - AND POSITION(moderation_subject_status."recordPath" IN reports."subjectUri") > 0 - AND ("lastReportedAt" is null OR "lastReportedAt" < reports."createdAt") - `.execute(db.db) - - console.log( - `Updated lastReportedAt for ${contentUpdate.numUpdatedOrDeletedRows} subject with uri`, - ) -} - -const createStatusFromActions = async (db: PrimaryDatabase) => { - const allEvents = await db.db - // @ts-ignore - .selectFrom('moderation_action') - // @ts-ignore - .where('reversedAt', 'is', null) - // @ts-ignore - .select((eb) => eb.fn.count('id').as('count')) - .executeTakeFirstOrThrow() - - const chunkSize = 2500 - const totalChunks = Math.ceil(allEvents.count / chunkSize) - - console.log(`Processing ${allEvents.count} actions in ${totalChunks} chunks`) - - await db.transaction(async (tx) => { - // This is not used for pagination but only for logging purposes - let currentChunk = 1 - let lastProcessedId: undefined | number = 0 - do { - const eventsQuery = tx.db - // @ts-ignore - .selectFrom('moderation_action') - // @ts-ignore - .where('reversedAt', 'is', null) - // @ts-ignore - .where('id', '>', lastProcessedId) - .limit(chunkSize) - .selectAll() - const events = (await eventsQuery.execute()) as ModerationActionRow[] - - for (const event of events) { - // Remap action to event data type - const actionParts = event.action.split('#') - await adjustModerationSubjectStatus(tx, { - ...event, - action: `com.atproto.admin.defs#modEvent${actionParts[1] - .charAt(0) - .toUpperCase()}${actionParts[1].slice( - 1, - )}` as ModerationEventRow['action'], - comment: event.reason, - meta: null, - }) - } - - console.log(`Processed events chunk ${currentChunk} of ${totalChunks}`) - lastProcessedId = events.at(-1)?.id - currentChunk++ - } while (lastProcessedId !== undefined) - }) - - console.log(`Events migration complete!`) - - const totalStatuses = await countStatuses(db) - console.log(`Created ${totalStatuses} statuses`) -} - -const remapFlagToAcknlowedge = async (db: PrimaryDatabase) => { - console.log('Initiating flag to ack remap') - const results = await sql` - UPDATE moderation_event - SET "action" = 'com.atproto.admin.defs#modEventAcknowledge' - WHERE action = 'com.atproto.admin.defs#modEventFlag' - `.execute(db.db) - console.log(`Remapped ${results.numUpdatedOrDeletedRows} flag actions to ack`) -} - -const syncBlobCids = async (db: PrimaryDatabase) => { - console.log('Initiating blob cid sync') - const results = await sql` - UPDATE moderation_subject_status - SET "blobCids" = blob_action."cids" - FROM ( - SELECT moderation_action."subjectUri", moderation_action."subjectDid", jsonb_agg(moderation_action_subject_blob."cid") as cids - FROM moderation_action_subject_blob - JOIN moderation_action - ON moderation_action.id = moderation_action_subject_blob."actionId" - WHERE moderation_action."reversedAt" is NULL - GROUP by moderation_action."subjectUri", moderation_action."subjectDid" - ) as blob_action - WHERE did = "subjectDid" AND position("recordPath" IN "subjectUri") > 0 - `.execute(db.db) - console.log(`Updated blob cids on ${results.numUpdatedOrDeletedRows} rows`) -} - -async function updateStatusFromUnresolvedReports(db: PrimaryDatabase) { - const { ref } = db.db.dynamic - const reports = await db.db - // @ts-ignore - .selectFrom('moderation_report') - .whereNotExists((qb) => - qb - .selectFrom('moderation_report_resolution') - .selectAll() - // @ts-ignore - .whereRef('reportId', '=', ref('moderation_report.id')), - ) - .select(sql`moderation_report.id`.as('legacyId')) - .execute() - - console.log('Updating statuses based on unresolved reports') - await processLegacyReports( - db, - reports.map((report) => report.legacyId), - ) - console.log('Completed updating statuses based on unresolved reports') -} - -export async function MigrateModerationData() { - const env = getEnv() - const db = new DatabaseCoordinator({ - schema: env.DB_SCHEMA, - primary: { - url: env.DB_URL, - poolSize: env.DB_POOL_SIZE, - }, - replicas: [], - }) - - const primaryDb = db.getPrimary() - - const [counts, existingEventsCount] = await Promise.all([ - countEntries(primaryDb), - countEvents(primaryDb), - ]) - - // If there are existing events in the moderation_event table, we assume that the migration has already been run - // so we just bring over any new reports since last run - if (existingEventsCount) { - console.log( - `Found ${existingEventsCount} existing events. Migrating ${counts.reportsCount} reports only, ignoring actions`, - ) - const reportMigrationStartedAt = Date.now() - const latestReportLegacyRefId = await getLatestReportLegacyRefId(primaryDb) - - if (latestReportLegacyRefId) { - await createEvents(primaryDb, { - onlyReportsAboveId: latestReportLegacyRefId, - }) - const newReportEvents = await getReportEventsAboveLegacyId( - primaryDb, - latestReportLegacyRefId, - ) - await processLegacyReports( - primaryDb, - newReportEvents.map((evt) => evt.legacyRefId), - ) - await setReportedAtTimestamp(primaryDb) - } else { - console.log('No reports have been migrated into events yet, bailing.') - } - - console.log( - `Time spent: ${(Date.now() - reportMigrationStartedAt) / 1000} seconds`, - ) - console.log('Migration complete!') - return - } - - const totalEntries = counts.actionsCount + counts.reportsCount - console.log(`Migrating ${totalEntries} rows of actions and reports`) - const startedAt = Date.now() - await createEvents(primaryDb) - // Important to run this before creation statuses from actions to ensure that we are not attempting to map flag actions - await remapFlagToAcknlowedge(primaryDb) - await createStatusFromActions(primaryDb) - await updateStatusFromUnresolvedReports(primaryDb) - await setReportedAtTimestamp(primaryDb) - await syncBlobCids(primaryDb) - - console.log(`Time spent: ${(Date.now() - startedAt) / 1000 / 60} minutes`) - console.log('Migration complete!') -} diff --git a/packages/bsky/src/services/actor/index.ts b/packages/bsky/src/services/actor/index.ts index 7ef61529926..b8898570688 100644 --- a/packages/bsky/src/services/actor/index.ts +++ b/packages/bsky/src/services/actor/index.ts @@ -10,6 +10,8 @@ import { SearchKeyset, getUserSearchQuery } from '../util/search' import { FromDb } from '../types' import { GraphService } from '../graph' import { LabelService } from '../label' +import { AtUri } from '@atproto/syntax' +import { ids } from '../../lexicon/lexicons' export * from './types' @@ -96,6 +98,26 @@ export class ActorService { }) } + async getProfileRecords(dids: string[], includeSoftDeleted = false) { + if (dids.length === 0) return new Map() + const profileUris = dids.map((did) => + AtUri.make(did, ids.AppBskyActorProfile, 'self').toString(), + ) + const { ref } = this.db.db.dynamic + const res = await this.db.db + .selectFrom('record') + .innerJoin('actor', 'actor.did', 'record.did') + .if(!includeSoftDeleted, (qb) => + qb.where(notSoftDeletedClause(ref('actor'))), + ) + .where('uri', 'in', profileUris) + .select(['record.did', 'record.json']) + .execute() + return res.reduce((acc, cur) => { + return acc.set(cur.did, JSON.parse(cur.json)) + }, new Map()) + } + async getSearchResults({ cursor, limit = 25, diff --git a/packages/bsky/src/services/moderation/index.ts b/packages/bsky/src/services/moderation/index.ts index 84769100ae9..71380e16884 100644 --- a/packages/bsky/src/services/moderation/index.ts +++ b/packages/bsky/src/services/moderation/index.ts @@ -1,37 +1,9 @@ import { CID } from 'multiformats/cid' import { AtUri } from '@atproto/syntax' -import { InvalidRequestError } from '@atproto/xrpc-server' import { PrimaryDatabase } from '../../db' -import { ModerationViews } from './views' import { ImageUriBuilder } from '../../image/uri' -import { Main as StrongRef } from '../../lexicon/types/com/atproto/repo/strongRef' import { ImageInvalidator } from '../../image/invalidator' -import { - isModEventComment, - isModEventLabel, - isModEventMute, - isModEventReport, - isModEventTakedown, - isModEventEmail, - RepoRef, - RepoBlobRef, -} from '../../lexicon/types/com/atproto/admin/defs' -import { addHoursToDate } from '../../util/date' -import { - adjustModerationSubjectStatus, - getStatusIdentifierFromSubject, -} from './status' -import { - ModEventType, - ModerationEventRow, - ModerationEventRowWithHandle, - ModerationSubjectStatusRow, - ReversibleModerationEvent, - SubjectInfo, -} from './types' -import { ModerationEvent } from '../../db/tables/moderation' -import { paginate } from '../../db/pagination' -import { StatusKeyset, TimeIdKeyset } from './pagination' +import { StatusAttr } from '../../lexicon/types/com/atproto/admin/defs' export class ModerationService { constructor( @@ -48,630 +20,99 @@ export class ModerationService { new ModerationService(db, imgUriBuilder, imgInvalidator) } - views = new ModerationViews(this.db) - - async getEvent(id: number): Promise { - return await this.db.db - .selectFrom('moderation_event') - .selectAll() - .where('id', '=', id) - .executeTakeFirst() - } - - async getEventOrThrow(id: number): Promise { - const event = await this.getEvent(id) - if (!event) throw new InvalidRequestError('Moderation event not found') - return event - } - - async getEvents(opts: { - subject?: string - createdBy?: string - limit: number - cursor?: string - includeAllUserRecords: boolean - types: ModerationEvent['action'][] - sortDirection?: 'asc' | 'desc' - }): Promise<{ cursor?: string; events: ModerationEventRowWithHandle[] }> { - const { - subject, - createdBy, - limit, - cursor, - includeAllUserRecords, - sortDirection = 'desc', - types, - } = opts - let builder = this.db.db - .selectFrom('moderation_event') - .leftJoin( - 'actor as creatorActor', - 'creatorActor.did', - 'moderation_event.createdBy', - ) - .leftJoin( - 'actor as subjectActor', - 'subjectActor.did', - 'moderation_event.subjectDid', - ) - if (subject) { - builder = builder.where((qb) => { - if (includeAllUserRecords) { - // If subject is an at-uri, we need to extract the DID from the at-uri - // otherwise, subject is probably a DID already - if (subject.startsWith('at://')) { - const uri = new AtUri(subject) - return qb.where('subjectDid', '=', uri.hostname) - } - return qb.where('subjectDid', '=', subject) - } - return qb - .where((subQb) => - subQb - .where('subjectDid', '=', subject) - .where('subjectUri', 'is', null), - ) - .orWhere('subjectUri', '=', subject) - }) - } - if (types.length) { - builder = builder.where((qb) => { - if (types.length === 1) { - return qb.where('action', '=', types[0]) - } - - return qb.where('action', 'in', types) - }) - } - if (createdBy) { - builder = builder.where('createdBy', '=', createdBy) - } - - const { ref } = this.db.db.dynamic - const keyset = new TimeIdKeyset( - ref(`moderation_event.createdAt`), - ref('moderation_event.id'), - ) - const paginatedBuilder = paginate(builder, { - limit, - cursor, - keyset, - direction: sortDirection, - tryIndex: true, - }) - - const result = await paginatedBuilder - .selectAll(['moderation_event']) - .select([ - 'subjectActor.handle as subjectHandle', - 'creatorActor.handle as creatorHandle', - ]) - .execute() - - return { cursor: keyset.packFromResult(result), events: result } - } - - async getReport(id: number): Promise { - return await this.db.db - .selectFrom('moderation_event') - .where('action', '=', 'com.atproto.admin.defs#modEventReport') - .selectAll() - .where('id', '=', id) - .executeTakeFirst() - } - - async getCurrentStatus( - subject: { did: string } | { uri: AtUri } | { cids: CID[] }, - ) { - let builder = this.db.db.selectFrom('moderation_subject_status').selectAll() - if ('did' in subject) { - builder = builder.where('did', '=', subject.did) - } else if ('uri' in subject) { - builder = builder.where('recordPath', '=', subject.uri.toString()) - } - // TODO: Handle the cid status - return await builder.execute() - } - - buildSubjectInfo( - subject: { did: string } | { uri: AtUri; cid: CID }, - subjectBlobCids?: CID[], - ): SubjectInfo { - if ('did' in subject) { - if (subjectBlobCids?.length) { - throw new InvalidRequestError('Blobs do not apply to repo subjects') - } - // Allowing dids that may not exist: may have been deleted but needs to remain actionable. - return { - subjectType: 'com.atproto.admin.defs#repoRef', - subjectDid: subject.did, - subjectUri: null, - subjectCid: null, - } - } - - // Allowing records/blobs that may not exist: may have been deleted but needs to remain actionable. - return { - subjectType: 'com.atproto.repo.strongRef', - subjectDid: subject.uri.host, - subjectUri: subject.uri.toString(), - subjectCid: subject.cid.toString(), - } - } - - async logEvent(info: { - event: ModEventType - subject: { did: string } | { uri: AtUri; cid: CID } - subjectBlobCids?: CID[] - createdBy: string - createdAt?: Date - }): Promise { - this.db.assertTransaction() - const { - event, - createdBy, - subject, - subjectBlobCids, - createdAt = new Date(), - } = info - - // Resolve subject info - const subjectInfo = this.buildSubjectInfo(subject, subjectBlobCids) - - const createLabelVals = - isModEventLabel(event) && event.createLabelVals.length > 0 - ? event.createLabelVals.join(' ') - : undefined - const negateLabelVals = - isModEventLabel(event) && event.negateLabelVals.length > 0 - ? event.negateLabelVals.join(' ') - : undefined - - const meta: Record = {} - - if (isModEventReport(event)) { - meta.reportType = event.reportType - } - - if (isModEventComment(event) && event.sticky) { - meta.sticky = event.sticky - } - - if (isModEventEmail(event)) { - meta.subjectLine = event.subjectLine - } - - const modEvent = await this.db.db - .insertInto('moderation_event') - .values({ - comment: event.comment ? `${event.comment}` : null, - action: event.$type as ModerationEvent['action'], - createdAt: createdAt.toISOString(), - createdBy, - createLabelVals, - negateLabelVals, - durationInHours: event.durationInHours - ? Number(event.durationInHours) - : null, - meta, - expiresAt: - (isModEventTakedown(event) || isModEventMute(event)) && - event.durationInHours - ? addHoursToDate(event.durationInHours, createdAt).toISOString() - : undefined, - ...subjectInfo, - }) - .returningAll() - .executeTakeFirstOrThrow() - - await adjustModerationSubjectStatus(this.db, modEvent, subjectBlobCids) - - return modEvent - } - - async getLastReversibleEventForSubject({ - did, - muteUntil, - recordPath, - suspendUntil, - }: ModerationSubjectStatusRow) { - const isSuspended = suspendUntil && new Date(suspendUntil) < new Date() - const isMuted = muteUntil && new Date(muteUntil) < new Date() - - // If the subject is neither suspended nor muted don't bother finding the last reversible event - // Ideally, this should never happen because the caller of this method should only call this - // after ensuring that the suspended or muted subjects are being reversed - if (!isSuspended && !isMuted) { - return null - } - - let builder = this.db.db - .selectFrom('moderation_event') - .where('subjectDid', '=', did) - - if (recordPath) { - builder = builder.where('subjectUri', 'like', `%${recordPath}%`) - } - - // Means the subject was suspended and needs to be unsuspended - if (isSuspended) { - builder = builder - .where('action', '=', 'com.atproto.admin.defs#modEventTakedown') - .where('durationInHours', 'is not', null) - } - if (isMuted) { - builder = builder - .where('action', '=', 'com.atproto.admin.defs#modEventMute') - .where('durationInHours', 'is not', null) - } - - return await builder - .orderBy('id', 'desc') - .selectAll() - .limit(1) - .executeTakeFirst() - } - - async getSubjectsDueForReversal(): Promise { - const subjectsDueForReversal = await this.db.db - .selectFrom('moderation_subject_status') - .where('suspendUntil', '<', new Date().toISOString()) - .orWhere('muteUntil', '<', new Date().toISOString()) - .selectAll() - .execute() - - return subjectsDueForReversal - } - - async isSubjectSuspended(did: string): Promise { - const res = await this.db.db - .selectFrom('moderation_subject_status') - .where('did', '=', did) - .where('recordPath', '=', '') - .where('suspendUntil', '>', new Date().toISOString()) - .select('did') - .limit(1) - .executeTakeFirst() - return !!res - } - - async revertState({ - createdBy, - createdAt, - comment, - action, - subject, - }: ReversibleModerationEvent): Promise<{ - result: ModerationEventRow - restored?: TakedownSubjects - }> { - const isRevertingTakedown = - action === 'com.atproto.admin.defs#modEventTakedown' - this.db.assertTransaction() - const result = await this.logEvent({ - event: { - $type: isRevertingTakedown - ? 'com.atproto.admin.defs#modEventReverseTakedown' - : 'com.atproto.admin.defs#modEventUnmute', - comment: comment ?? undefined, - }, - createdAt, - createdBy, - subject, - }) - - let restored: TakedownSubjects | undefined - - if (!isRevertingTakedown) { - return { result, restored } - } - - if ( - result.subjectType === 'com.atproto.admin.defs#repoRef' && - result.subjectDid - ) { - await this.reverseTakedownRepo({ - did: result.subjectDid, - }) - restored = { - did: result.subjectDid, - subjects: [ - { - $type: 'com.atproto.admin.defs#repoRef', - did: result.subjectDid, - }, - ], - } - } - - if ( - result.subjectType === 'com.atproto.repo.strongRef' && - result.subjectUri - ) { - const uri = new AtUri(result.subjectUri) - await this.reverseTakedownRecord({ - uri, - }) - const did = uri.hostname - // TODO: MOD_EVENT This bit needs testing - const subjectStatus = await this.db.db - .selectFrom('moderation_subject_status') - .where('did', '=', uri.host) - .where('recordPath', '=', `${uri.collection}/${uri.rkey}`) - .select('blobCids') - .executeTakeFirst() - const blobCids = subjectStatus?.blobCids || [] - restored = { - did, - subjects: [ - { - $type: 'com.atproto.repo.strongRef', - uri: result.subjectUri, - cid: result.subjectCid ?? '', - }, - ...blobCids.map((cid) => ({ - $type: 'com.atproto.admin.defs#repoBlobRef', - did, - cid, - recordUri: result.subjectUri, - })), - ], - } - } - - return { result, restored } - } - - async takedownRepo(info: { - takedownId: number - did: string - }): Promise { - const { takedownId, did } = info + async takedownRepo(info: { takedownRef: string; did: string }) { + const { takedownRef, did } = info await this.db.db .updateTable('actor') - .set({ takedownId }) + .set({ takedownRef }) .where('did', '=', did) - .where('takedownId', 'is', null) + .where('takedownRef', 'is', null) .executeTakeFirst() - - return { - did, - subjects: [ - { - $type: 'com.atproto.admin.defs#repoRef', - did, - }, - ], - } } async reverseTakedownRepo(info: { did: string }) { await this.db.db .updateTable('actor') - .set({ takedownId: null }) + .set({ takedownRef: null }) .where('did', '=', info.did) .execute() } - async takedownRecord(info: { - takedownId: number - uri: AtUri - cid: CID - blobCids?: CID[] - }): Promise { - const { takedownId, uri, cid, blobCids } = info - const did = uri.hostname - this.db.assertTransaction() + async takedownRecord(info: { takedownRef: string; uri: AtUri; cid: CID }) { + const { takedownRef, uri } = info await this.db.db .updateTable('record') - .set({ takedownId }) + .set({ takedownRef }) .where('uri', '=', uri.toString()) - .where('takedownId', 'is', null) + .where('takedownRef', 'is', null) .executeTakeFirst() - if (blobCids) { - await Promise.all( - blobCids.map(async (cid) => { - const paths = ImageUriBuilder.presets.map((id) => { - const imgUri = this.imgUriBuilder.getPresetUri(id, uri.host, cid) - return imgUri.replace(this.imgUriBuilder.endpoint, '') - }) - await this.imgInvalidator.invalidate(cid.toString(), paths) - }), - ) - } - return { - did, - subjects: [ - { - $type: 'com.atproto.repo.strongRef', - uri: uri.toString(), - cid: cid.toString(), - }, - ...(blobCids || []).map((cid) => ({ - $type: 'com.atproto.admin.defs#repoBlobRef', - did, - cid: cid.toString(), - recordUri: uri.toString(), - })), - ], - } } async reverseTakedownRecord(info: { uri: AtUri }) { - this.db.assertTransaction() await this.db.db .updateTable('record') - .set({ takedownId: null }) + .set({ takedownRef: null }) .where('uri', '=', info.uri.toString()) .execute() } - async report(info: { - reasonType: NonNullable['reportType'] - reason?: string - subject: { did: string } | { uri: AtUri; cid: CID } - reportedBy: string - createdAt?: Date - }): Promise { - const { - reasonType, - reason, - reportedBy, - createdAt = new Date(), - subject, - } = info - - const event = await this.logEvent({ - event: { - $type: 'com.atproto.admin.defs#modEventReport', - reportType: reasonType, - comment: reason, - }, - createdBy: reportedBy, - subject, - createdAt, + async takedownBlob(info: { takedownRef: string; did: string; cid: string }) { + const { takedownRef, did, cid } = info + await this.db.db + .insertInto('blob_takedown') + .values({ did, cid, takedownRef }) + .onConflict((oc) => oc.doNothing()) + .execute() + const paths = ImageUriBuilder.presets.map((id) => { + const imgUri = this.imgUriBuilder.getPresetUri(id, did, cid) + return imgUri.replace(this.imgUriBuilder.endpoint, '') }) - - return event + await this.imgInvalidator.invalidate(cid.toString(), paths) } - async getSubjectStatuses({ - cursor, - limit = 50, - takendown, - appealed, - reviewState, - reviewedAfter, - reviewedBefore, - reportedAfter, - reportedBefore, - includeMuted, - ignoreSubjects, - sortDirection, - lastReviewedBy, - sortField, - subject, - }: { - cursor?: string - limit?: number - takendown?: boolean - appealed?: boolean | null - reviewedBefore?: string - reviewState?: ModerationSubjectStatusRow['reviewState'] - reviewedAfter?: string - reportedAfter?: string - reportedBefore?: string - includeMuted?: boolean - subject?: string - ignoreSubjects?: string[] - sortDirection: 'asc' | 'desc' - lastReviewedBy?: string - sortField: 'lastReviewedAt' | 'lastReportedAt' - }) { - let builder = this.db.db - .selectFrom('moderation_subject_status') - .leftJoin('actor', 'actor.did', 'moderation_subject_status.did') - - if (subject) { - const subjectInfo = getStatusIdentifierFromSubject(subject) - builder = builder - .where('moderation_subject_status.did', '=', subjectInfo.did) - .where((qb) => - subjectInfo.recordPath - ? qb.where('recordPath', '=', subjectInfo.recordPath) - : qb.where('recordPath', '=', ''), - ) - } - - if (ignoreSubjects?.length) { - builder = builder - .where('moderation_subject_status.did', 'not in', ignoreSubjects) - .where('recordPath', 'not in', ignoreSubjects) - } - - if (reviewState) { - builder = builder.where('reviewState', '=', reviewState) - } - - if (lastReviewedBy) { - builder = builder.where('lastReviewedBy', '=', lastReviewedBy) - } - - if (reviewedAfter) { - builder = builder.where('lastReviewedAt', '>', reviewedAfter) - } - - if (reviewedBefore) { - builder = builder.where('lastReviewedAt', '<', reviewedBefore) - } - - if (reportedAfter) { - builder = builder.where('lastReviewedAt', '>', reportedAfter) - } - - if (reportedBefore) { - builder = builder.where('lastReportedAt', '<', reportedBefore) - } - - if (takendown) { - builder = builder.where('takendown', '=', true) - } - - if (appealed !== undefined) { - builder = - appealed === null - ? builder.where('appealed', 'is', null) - : builder.where('appealed', '=', appealed) - } - - if (!includeMuted) { - builder = builder.where((qb) => - qb - .where('muteUntil', '<', new Date().toISOString()) - .orWhere('muteUntil', 'is', null), - ) - } - - const { ref } = this.db.db.dynamic - const keyset = new StatusKeyset( - ref(`moderation_subject_status.${sortField}`), - ref('moderation_subject_status.id'), - ) - const paginatedBuilder = paginate(builder, { - limit, - cursor, - keyset, - direction: sortDirection, - tryIndex: true, - nullsLast: true, - }) - - const results = await paginatedBuilder - .select('actor.handle as handle') - .selectAll('moderation_subject_status') + async reverseTakedownBlob(info: { did: string; cid: string }) { + const { did, cid } = info + await this.db.db + .deleteFrom('blob_takedown') + .where('did', '=', did) + .where('cid', '=', cid) .execute() - - return { statuses: results, cursor: keyset.packFromResult(results) } } - async isSubjectTakendown( - subject: { did: string } | { uri: AtUri }, - ): Promise { - const { did, recordPath } = getStatusIdentifierFromSubject( - 'did' in subject ? subject.did : subject.uri, - ) - const builder = this.db.db - .selectFrom('moderation_subject_status') + async getRepoTakedownRef(did: string): Promise { + const res = await this.db.db + .selectFrom('actor') .where('did', '=', did) - .where('recordPath', '=', recordPath || '') + .selectAll() + .executeTakeFirst() + return res ? formatStatus(res.takedownRef) : null + } - const result = await builder.select('takendown').executeTakeFirst() + async getRecordTakedownRef(uri: string): Promise { + const res = await this.db.db + .selectFrom('record') + .where('uri', '=', uri) + .selectAll() + .executeTakeFirst() + return res ? formatStatus(res.takedownRef) : null + } - return !!result?.takendown + async getBlobTakedownRef( + did: string, + cid: string, + ): Promise { + const res = await this.db.db + .selectFrom('blob_takedown') + .where('did', '=', did) + .where('cid', '=', cid) + .selectAll() + .executeTakeFirst() + // this table only tracks takedowns not all blobs + // so if no result is returned then the blob is not taken down (rather than not found) + return formatStatus(res?.takedownRef ?? null) } } -export type TakedownSubjects = { - did: string - subjects: (RepoRef | RepoBlobRef | StrongRef)[] +const formatStatus = (ref: string | null): StatusAttr => { + return ref ? { applied: true, ref } : { applied: false } } diff --git a/packages/bsky/src/services/moderation/pagination.ts b/packages/bsky/src/services/moderation/pagination.ts deleted file mode 100644 index c68de0822d4..00000000000 --- a/packages/bsky/src/services/moderation/pagination.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { InvalidRequestError } from '@atproto/xrpc-server' -import { DynamicModule, sql } from 'kysely' - -import { Cursor, GenericKeyset } from '../../db/pagination' - -type StatusKeysetParam = { - lastReviewedAt: string | null - lastReportedAt: string | null - id: number -} - -export class StatusKeyset extends GenericKeyset { - labelResult(result: StatusKeysetParam): Cursor - labelResult(result: StatusKeysetParam) { - const primaryField = ( - this.primary as ReturnType - ).dynamicReference.includes('lastReviewedAt') - ? 'lastReviewedAt' - : 'lastReportedAt' - - return { - primary: result[primaryField] - ? new Date(`${result[primaryField]}`).getTime().toString() - : '', - secondary: result.id.toString(), - } - } - labeledResultToCursor(labeled: Cursor) { - return { - primary: labeled.primary, - secondary: labeled.secondary, - } - } - cursorToLabeledResult(cursor: Cursor) { - return { - primary: cursor.primary - ? new Date(parseInt(cursor.primary, 10)).toISOString() - : '', - secondary: cursor.secondary, - } - } - unpackCursor(cursorStr?: string): Cursor | undefined { - if (!cursorStr) return - const result = cursorStr.split('::') - const [primary, secondary, ...others] = result - if (!secondary || others.length > 0) { - throw new InvalidRequestError('Malformed cursor') - } - return { - primary, - secondary, - } - } - // This is specifically built to handle nullable columns as primary sorting column - getSql(labeled?: Cursor, direction?: 'asc' | 'desc') { - if (labeled === undefined) return - if (direction === 'asc') { - return !labeled.primary - ? sql`(${this.primary} IS NULL AND ${this.secondary} > ${labeled.secondary})` - : sql`((${this.primary}, ${this.secondary}) > (${labeled.primary}, ${labeled.secondary}) OR (${this.primary} is null))` - } else { - return !labeled.primary - ? sql`(${this.primary} IS NULL AND ${this.secondary} < ${labeled.secondary})` - : sql`((${this.primary}, ${this.secondary}) < (${labeled.primary}, ${labeled.secondary}) OR (${this.primary} is null))` - } - } -} - -type TimeIdKeysetParam = { - id: number - createdAt: string -} -type TimeIdResult = TimeIdKeysetParam - -export class TimeIdKeyset extends GenericKeyset { - labelResult(result: TimeIdResult): Cursor - labelResult(result: TimeIdResult) { - return { primary: result.createdAt, secondary: result.id.toString() } - } - labeledResultToCursor(labeled: Cursor) { - return { - primary: new Date(labeled.primary).getTime().toString(), - secondary: labeled.secondary, - } - } - cursorToLabeledResult(cursor: Cursor) { - const primaryDate = new Date(parseInt(cursor.primary, 10)) - if (isNaN(primaryDate.getTime())) { - throw new InvalidRequestError('Malformed cursor') - } - return { - primary: primaryDate.toISOString(), - secondary: cursor.secondary, - } - } -} diff --git a/packages/bsky/src/services/moderation/views.ts b/packages/bsky/src/services/moderation/views.ts deleted file mode 100644 index 654a6e54291..00000000000 --- a/packages/bsky/src/services/moderation/views.ts +++ /dev/null @@ -1,551 +0,0 @@ -import { sql } from 'kysely' -import { ArrayEl } from '@atproto/common' -import { AtUri } from '@atproto/syntax' -import { INVALID_HANDLE } from '@atproto/syntax' -import { BlobRef, jsonStringToLex } from '@atproto/lexicon' -import { Database } from '../../db' -import { Actor } from '../../db/tables/actor' -import { Record as RecordRow } from '../../db/tables/record' -import { - ModEventView, - RepoView, - RepoViewDetail, - RecordView, - RecordViewDetail, - ReportViewDetail, - BlobView, - SubjectStatusView, - ModEventViewDetail, -} from '../../lexicon/types/com/atproto/admin/defs' -import { OutputSchema as ReportOutput } from '../../lexicon/types/com/atproto/moderation/createReport' -import { Label } from '../../lexicon/types/com/atproto/label/defs' -import { - ModerationEventRowWithHandle, - ModerationSubjectStatusRowWithHandle, -} from './types' -import { getSelfLabels } from '../label' -import { REASONOTHER } from '../../lexicon/types/com/atproto/moderation/defs' - -export class ModerationViews { - constructor(private db: Database) {} - - repo(result: RepoResult): Promise - repo(result: RepoResult[]): Promise - async repo( - result: RepoResult | RepoResult[], - ): Promise { - const results = Array.isArray(result) ? result : [result] - if (results.length === 0) return [] - - const [info, subjectStatuses] = await Promise.all([ - await this.db.db - .selectFrom('actor') - .leftJoin('profile', 'profile.creator', 'actor.did') - .leftJoin( - 'record as profile_record', - 'profile_record.uri', - 'profile.uri', - ) - .where( - 'actor.did', - 'in', - results.map((r) => r.did), - ) - .select(['actor.did as did', 'profile_record.json as profileJson']) - .execute(), - this.getSubjectStatus(results.map((r) => ({ did: r.did }))), - ]) - - const infoByDid = info.reduce( - (acc, cur) => Object.assign(acc, { [cur.did]: cur }), - {} as Record>, - ) - const subjectStatusByDid = subjectStatuses.reduce( - (acc, cur) => - Object.assign(acc, { [cur.did ?? '']: this.subjectStatus(cur) }), - {}, - ) - - const views = results.map((r) => { - const { profileJson } = infoByDid[r.did] ?? {} - const relatedRecords: object[] = [] - if (profileJson) { - relatedRecords.push( - jsonStringToLex(profileJson) as Record, - ) - } - return { - // No email or invite info on appview - did: r.did, - handle: r.handle ?? INVALID_HANDLE, - relatedRecords, - indexedAt: r.indexedAt, - moderation: { - subjectStatus: subjectStatusByDid[r.did] ?? undefined, - }, - } - }) - - return Array.isArray(result) ? views : views[0] - } - event(result: EventResult): Promise - event(result: EventResult[]): Promise - async event( - result: EventResult | EventResult[], - ): Promise { - const results = Array.isArray(result) ? result : [result] - if (results.length === 0) return [] - - const views = results.map((res) => { - const eventView: ModEventView = { - id: res.id, - event: { - $type: res.action, - comment: res.comment ?? undefined, - }, - subject: - res.subjectType === 'com.atproto.admin.defs#repoRef' - ? { - $type: 'com.atproto.admin.defs#repoRef', - did: res.subjectDid, - } - : { - $type: 'com.atproto.repo.strongRef', - uri: res.subjectUri, - cid: res.subjectCid, - }, - subjectBlobCids: [], - createdBy: res.createdBy, - createdAt: res.createdAt, - subjectHandle: res.subjectHandle ?? undefined, - creatorHandle: res.creatorHandle ?? undefined, - } - - if ( - [ - 'com.atproto.admin.defs#modEventTakedown', - 'com.atproto.admin.defs#modEventMute', - ].includes(res.action) - ) { - eventView.event = { - ...eventView.event, - durationInHours: res.durationInHours ?? undefined, - } - } - - if (res.action === 'com.atproto.admin.defs#modEventLabel') { - eventView.event = { - ...eventView.event, - createLabelVals: res.createLabelVals?.length - ? res.createLabelVals.split(' ') - : [], - negateLabelVals: res.negateLabelVals?.length - ? res.negateLabelVals.split(' ') - : [], - } - } - - // This is for legacy data only, for new events, these types of events won't have labels attached - if ( - [ - 'com.atproto.admin.defs#modEventAcknowledge', - 'com.atproto.admin.defs#modEventTakedown', - 'com.atproto.admin.defs#modEventEscalate', - ].includes(res.action) - ) { - if (res.createLabelVals?.length) { - eventView.event = { - ...eventView.event, - createLabelVals: res.createLabelVals.split(' '), - } - } - - if (res.negateLabelVals?.length) { - eventView.event = { - ...eventView.event, - negateLabelVals: res.negateLabelVals.split(' '), - } - } - } - - if (res.action === 'com.atproto.admin.defs#modEventReport') { - eventView.event = { - ...eventView.event, - reportType: res.meta?.reportType ?? undefined, - } - } - - if (res.action === 'com.atproto.admin.defs#modEventEmail') { - eventView.event = { - ...eventView.event, - subjectLine: res.meta?.subjectLine ?? '', - } - } - - if ( - res.action === 'com.atproto.admin.defs#modEventComment' && - res.meta?.sticky - ) { - eventView.event.sticky = true - } - - return eventView - }) - - return Array.isArray(result) ? views : views[0] - } - - async eventDetail(result: EventResult): Promise { - const [event, subject] = await Promise.all([ - this.event(result), - this.subject(result), - ]) - const allBlobs = findBlobRefs(subject.value) - const subjectBlobs = await this.blob( - allBlobs.filter((blob) => - event.subjectBlobCids.includes(blob.ref.toString()), - ), - ) - return { - ...event, - subject, - subjectBlobs, - } - } - - async repoDetail(result: RepoResult): Promise { - const [repo, labels] = await Promise.all([ - this.repo(result), - this.labels(result.did), - ]) - - return { - ...repo, - moderation: { - ...repo.moderation, - }, - labels, - } - } - - record(result: RecordResult): Promise - record(result: RecordResult[]): Promise - async record( - result: RecordResult | RecordResult[], - ): Promise { - const results = Array.isArray(result) ? result : [result] - if (results.length === 0) return [] - - const [repoResults, subjectStatuses] = await Promise.all([ - this.db.db - .selectFrom('actor') - .where( - 'actor.did', - 'in', - results.map((r) => didFromUri(r.uri)), - ) - .selectAll() - .execute(), - this.getSubjectStatus(results.map((r) => didAndRecordPathFromUri(r.uri))), - ]) - const repos = await this.repo(repoResults) - - const reposByDid = repos.reduce( - (acc, cur) => Object.assign(acc, { [cur.did]: cur }), - {} as Record>, - ) - const subjectStatusByUri = subjectStatuses.reduce( - (acc, cur) => - Object.assign(acc, { - [`${cur.did}/${cur.recordPath}` ?? '']: this.subjectStatus(cur), - }), - {}, - ) - - const views = results.map((res) => { - const repo = reposByDid[didFromUri(res.uri)] - const { did, recordPath } = didAndRecordPathFromUri(res.uri) - const subjectStatus = subjectStatusByUri[`${did}/${recordPath}`] - if (!repo) throw new Error(`Record repo is missing: ${res.uri}`) - const value = jsonStringToLex(res.json) as Record - return { - uri: res.uri, - cid: res.cid, - value, - blobCids: findBlobRefs(value).map((blob) => blob.ref.toString()), - indexedAt: res.indexedAt, - repo, - moderation: { - subjectStatus, - }, - } - }) - - return Array.isArray(result) ? views : views[0] - } - - async recordDetail(result: RecordResult): Promise { - const [record, subjectStatusResult] = await Promise.all([ - this.record(result), - this.getSubjectStatus(didAndRecordPathFromUri(result.uri)), - ]) - - const [blobs, labels, subjectStatus] = await Promise.all([ - this.blob(findBlobRefs(record.value)), - this.labels(record.uri), - subjectStatusResult?.length - ? this.subjectStatus(subjectStatusResult[0]) - : Promise.resolve(undefined), - ]) - const selfLabels = getSelfLabels({ - uri: result.uri, - cid: result.cid, - record: jsonStringToLex(result.json) as Record, - }) - return { - ...record, - blobs, - moderation: { - ...record.moderation, - subjectStatus, - }, - labels: [...labels, ...selfLabels], - } - } - reportPublic(report: ReportResult): ReportOutput { - return { - id: report.id, - createdAt: report.createdAt, - // Ideally, we would never have a report entry that does not have a reasonType but at the schema level - // we are not guarantying that so in whatever case, if we end up with such entries, default to 'other' - reasonType: report.meta?.reportType - ? (report.meta?.reportType as string) - : REASONOTHER, - reason: report.comment ?? undefined, - reportedBy: report.createdBy, - subject: - report.subjectType === 'com.atproto.admin.defs#repoRef' - ? { - $type: 'com.atproto.admin.defs#repoRef', - did: report.subjectDid, - } - : { - $type: 'com.atproto.repo.strongRef', - uri: report.subjectUri, - cid: report.subjectCid, - }, - } - } - // Partial view for subjects - - async subject(result: SubjectResult): Promise { - let subject: SubjectView - if (result.subjectType === 'com.atproto.admin.defs#repoRef') { - const repoResult = await this.db.db - .selectFrom('actor') - .selectAll() - .where('did', '=', result.subjectDid) - .executeTakeFirst() - if (repoResult) { - subject = await this.repo(repoResult) - subject.$type = 'com.atproto.admin.defs#repoView' - } else { - subject = { did: result.subjectDid } - subject.$type = 'com.atproto.admin.defs#repoViewNotFound' - } - } else if ( - result.subjectType === 'com.atproto.repo.strongRef' && - result.subjectUri !== null - ) { - const recordResult = await this.db.db - .selectFrom('record') - .selectAll() - .where('uri', '=', result.subjectUri) - .executeTakeFirst() - if (recordResult) { - subject = await this.record(recordResult) - subject.$type = 'com.atproto.admin.defs#recordView' - } else { - subject = { uri: result.subjectUri } - subject.$type = 'com.atproto.admin.defs#recordViewNotFound' - } - } else { - throw new Error(`Bad subject data: (${result.id}) ${result.subjectType}`) - } - return subject - } - - // Partial view for blobs - - async blob(blobs: BlobRef[]): Promise { - if (!blobs.length) return [] - const { ref } = this.db.db.dynamic - const modStatusResults = await this.db.db - .selectFrom('moderation_subject_status') - .where( - sql`${ref( - 'moderation_subject_status.blobCids', - )} @> ${JSON.stringify(blobs.map((blob) => blob.ref.toString()))}`, - ) - .selectAll() - .executeTakeFirst() - const statusByCid = (modStatusResults?.blobCids || [])?.reduce( - (acc, cur) => Object.assign(acc, { [cur]: modStatusResults }), - {}, - ) - // Intentionally missing details field, since we don't have any on appview. - // We also don't know when the blob was created, so we use a canned creation time. - const unknownTime = new Date(0).toISOString() - return blobs.map((blob) => { - const cid = blob.ref.toString() - const subjectStatus = statusByCid[cid] - ? this.subjectStatus(statusByCid[cid]) - : undefined - return { - cid, - mimeType: blob.mimeType, - size: blob.size, - createdAt: unknownTime, - moderation: { - subjectStatus, - }, - } - }) - } - - async labels(subject: string, includeNeg?: boolean): Promise { - const res = await this.db.db - .selectFrom('label') - .where('label.uri', '=', subject) - .if(!includeNeg, (qb) => qb.where('neg', '=', false)) - .selectAll() - .execute() - return res.map((l) => ({ - ...l, - cid: l.cid === '' ? undefined : l.cid, - neg: l.neg, - })) - } - - async getSubjectStatus( - subject: - | { did: string; recordPath?: string } - | { did: string; recordPath?: string }[], - ): Promise { - const subjectFilters = Array.isArray(subject) ? subject : [subject] - const filterForSubject = - ({ did, recordPath }: { did: string; recordPath?: string }) => - // TODO: Fix the typing here? - (clause: any) => { - clause = clause - .where('moderation_subject_status.did', '=', did) - .where('moderation_subject_status.recordPath', '=', recordPath || '') - return clause - } - - const builder = this.db.db - .selectFrom('moderation_subject_status') - .leftJoin('actor', 'actor.did', 'moderation_subject_status.did') - .where((clause) => { - subjectFilters.forEach(({ did, recordPath }, i) => { - const applySubjectFilter = filterForSubject({ did, recordPath }) - if (i === 0) { - clause = clause.where(applySubjectFilter) - } else { - clause = clause.orWhere(applySubjectFilter) - } - }) - - return clause - }) - .selectAll('moderation_subject_status') - .select('actor.handle as handle') - - return builder.execute() - } - - subjectStatus(result: ModerationSubjectStatusRowWithHandle): SubjectStatusView - subjectStatus( - result: ModerationSubjectStatusRowWithHandle[], - ): SubjectStatusView[] - subjectStatus( - result: - | ModerationSubjectStatusRowWithHandle - | ModerationSubjectStatusRowWithHandle[], - ): SubjectStatusView | SubjectStatusView[] { - const results = Array.isArray(result) ? result : [result] - if (results.length === 0) return [] - - const decoratedSubjectStatuses = results.map((subjectStatus) => ({ - id: subjectStatus.id, - reviewState: subjectStatus.reviewState, - createdAt: subjectStatus.createdAt, - updatedAt: subjectStatus.updatedAt, - comment: subjectStatus.comment ?? undefined, - lastReviewedBy: subjectStatus.lastReviewedBy ?? undefined, - lastReviewedAt: subjectStatus.lastReviewedAt ?? undefined, - lastReportedAt: subjectStatus.lastReportedAt ?? undefined, - lastAppealedAt: subjectStatus.lastAppealedAt ?? undefined, - muteUntil: subjectStatus.muteUntil ?? undefined, - suspendUntil: subjectStatus.suspendUntil ?? undefined, - takendown: subjectStatus.takendown ?? undefined, - appealed: subjectStatus.appealed ?? undefined, - subjectRepoHandle: subjectStatus.handle ?? undefined, - subjectBlobCids: subjectStatus.blobCids || [], - subject: !subjectStatus.recordPath - ? { - $type: 'com.atproto.admin.defs#repoRef', - did: subjectStatus.did, - } - : { - $type: 'com.atproto.repo.strongRef', - uri: AtUri.make( - subjectStatus.did, - // Not too intuitive but the recordpath is basically / - // which is what the last 2 params of .make() arguments are - ...subjectStatus.recordPath.split('/'), - ).toString(), - cid: subjectStatus.recordCid, - }, - })) - - return Array.isArray(result) - ? decoratedSubjectStatuses - : decoratedSubjectStatuses[0] - } -} - -type RepoResult = Actor - -type EventResult = ModerationEventRowWithHandle - -type ReportResult = ModerationEventRowWithHandle - -type RecordResult = RecordRow - -type SubjectResult = Pick< - EventResult & ReportResult, - 'id' | 'subjectType' | 'subjectDid' | 'subjectUri' | 'subjectCid' -> - -type SubjectView = ModEventViewDetail['subject'] & ReportViewDetail['subject'] - -function didFromUri(uri: string) { - return new AtUri(uri).host -} - -function didAndRecordPathFromUri(uri: string) { - const atUri = new AtUri(uri) - return { did: atUri.host, recordPath: `${atUri.collection}/${atUri.rkey}` } -} - -function findBlobRefs(value: unknown, refs: BlobRef[] = []) { - if (value instanceof BlobRef) { - refs.push(value) - } else if (Array.isArray(value)) { - value.forEach((val) => findBlobRefs(val, refs)) - } else if (value && typeof value === 'object') { - Object.values(value).forEach((val) => findBlobRefs(val, refs)) - } - return refs -} diff --git a/packages/bsky/src/util/date.ts b/packages/bsky/src/util/date.ts deleted file mode 100644 index af9767a0f7f..00000000000 --- a/packages/bsky/src/util/date.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * This function takes a number as input and returns a Date object, - * which is the current date and time plus the input number of hours. - * - * @param {number} hours - The number of hours to add to the current date and time. - * @param {Date} startingDate - If provided, the function will add `hours` to the provided date instead of the current date. - * @returns {Date} - The new Date object, which is the current date and time plus the input number of hours. - */ -export function addHoursToDate(hours: number, startingDate?: Date): Date { - // When date is passe, let's clone before calling `setHours()` so that we are not mutating the original date - const currentDate = startingDate ? new Date(startingDate) : new Date() - currentDate.setHours(currentDate.getHours() + hours) - return currentDate -} diff --git a/packages/bsky/tests/__snapshots__/feed-generation.test.ts.snap b/packages/bsky/tests/__snapshots__/feed-generation.test.ts.snap index ac9e0eee7a0..4ac043c9b88 100644 --- a/packages/bsky/tests/__snapshots__/feed-generation.test.ts.snap +++ b/packages/bsky/tests/__snapshots__/feed-generation.test.ts.snap @@ -461,12 +461,12 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(5)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(6)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(6)@jpeg", }, @@ -517,7 +517,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -528,7 +528,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -721,12 +721,12 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(5)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(6)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(6)@jpeg", }, @@ -777,7 +777,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -788,7 +788,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -937,12 +937,12 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(4)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(4)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(5)@jpeg", }, @@ -987,7 +987,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -998,7 +998,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1222,12 +1222,12 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(4)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(4)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(5)@jpeg", }, @@ -1278,7 +1278,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1289,7 +1289,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", diff --git a/packages/bsky/tests/__snapshots__/indexing.test.ts.snap b/packages/bsky/tests/__snapshots__/indexing.test.ts.snap index 88c02c6e3e0..142866aeebd 100644 --- a/packages/bsky/tests/__snapshots__/indexing.test.ts.snap +++ b/packages/bsky/tests/__snapshots__/indexing.test.ts.snap @@ -101,7 +101,7 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(2)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(2)/cids(5)@jpeg", }, @@ -113,7 +113,7 @@ Array [ "cid": "cids(3)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(3)", "val": "test-label", }, @@ -121,7 +121,7 @@ Array [ "cid": "cids(3)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(3)", "val": "test-label-2", }, @@ -134,7 +134,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -207,7 +207,7 @@ Array [ "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "did": "user(3)", + "did": "user(4)", "handle": "dan.test", "labels": Array [], "viewer": Object { @@ -223,7 +223,7 @@ Array [ "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "did": "user(4)", + "did": "user(5)", "handle": "carol.test", "labels": Array [], "viewer": Object { @@ -245,7 +245,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -256,7 +256,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -317,7 +317,7 @@ Array [ "cid": "cids(6)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(6)", "val": "test-label", }, @@ -416,7 +416,7 @@ Array [ "cursor": "0000000000000::bafycid", "follows": Array [ Object { - "did": "user(3)", + "did": "user(4)", "handle": "dan.test", "labels": Array [], "viewer": Object { diff --git a/packages/bsky/tests/admin/admin-auth.test.ts b/packages/bsky/tests/admin/admin-auth.test.ts new file mode 100644 index 00000000000..ff00d0906b0 --- /dev/null +++ b/packages/bsky/tests/admin/admin-auth.test.ts @@ -0,0 +1,164 @@ +import { SeedClient, usersSeed, TestNetwork } from '@atproto/dev-env' +import AtpAgent from '@atproto/api' +import { Secp256k1Keypair } from '@atproto/crypto' +import { createServiceAuthHeaders } from '@atproto/xrpc-server' +import { RepoRef } from '../../src/lexicon/types/com/atproto/admin/defs' + +describe('admin auth', () => { + let network: TestNetwork + let agent: AtpAgent + let sc: SeedClient + + let repoSubject: RepoRef + + const modServiceDid = 'did:example:mod' + const altModDid = 'did:example:alt' + let modServiceKey: Secp256k1Keypair + let bskyDid: string + + beforeAll(async () => { + network = await TestNetwork.create({ + dbPostgresSchema: 'bsky_admin_auth', + bsky: { + modServiceDid, + }, + }) + + bskyDid = network.bsky.ctx.cfg.serverDid + + modServiceKey = await Secp256k1Keypair.create() + const origResolve = network.bsky.ctx.idResolver.did.resolveAtprotoKey + network.bsky.ctx.idResolver.did.resolveAtprotoKey = async ( + did: string, + forceRefresh?: boolean, + ) => { + if (did === modServiceDid || did === altModDid) { + return modServiceKey.did() + } + return origResolve(did, forceRefresh) + } + + agent = network.bsky.getClient() + sc = network.getSeedClient() + await usersSeed(sc) + await network.processAll() + repoSubject = { + $type: 'com.atproto.admin.defs#repoRef', + did: sc.dids.bob, + } + }) + + afterAll(async () => { + await network.close() + }) + + it('allows service auth requests from the configured appview did', async () => { + const headers = await createServiceAuthHeaders({ + iss: modServiceDid, + aud: bskyDid, + keypair: modServiceKey, + }) + await agent.api.com.atproto.admin.updateSubjectStatus( + { + subject: repoSubject, + takedown: { applied: true, ref: 'test-repo' }, + }, + { + ...headers, + encoding: 'application/json', + }, + ) + + const res = await agent.api.com.atproto.admin.getSubjectStatus( + { + did: repoSubject.did, + }, + headers, + ) + expect(res.data.subject.did).toBe(repoSubject.did) + expect(res.data.takedown?.applied).toBe(true) + }) + + it('does not allow requests from another did', async () => { + const headers = await createServiceAuthHeaders({ + iss: altModDid, + aud: bskyDid, + keypair: modServiceKey, + }) + const attempt = agent.api.com.atproto.admin.updateSubjectStatus( + { + subject: repoSubject, + takedown: { applied: true, ref: 'test-repo' }, + }, + { + ...headers, + encoding: 'application/json', + }, + ) + await expect(attempt).rejects.toThrow('Untrusted issuer') + }) + + it('does not allow requests from an authenticated user', async () => { + const aliceKey = await network.pds.ctx.actorStore.keypair(sc.dids.alice) + const headers = await createServiceAuthHeaders({ + iss: sc.dids.alice, + aud: bskyDid, + keypair: aliceKey, + }) + const attempt = agent.api.com.atproto.admin.updateSubjectStatus( + { + subject: repoSubject, + takedown: { applied: true, ref: 'test-repo' }, + }, + { + ...headers, + encoding: 'application/json', + }, + ) + await expect(attempt).rejects.toThrow('Untrusted issuer') + }) + + it('does not allow requests with a bad signature', async () => { + const badKey = await Secp256k1Keypair.create() + const headers = await createServiceAuthHeaders({ + iss: modServiceDid, + aud: bskyDid, + keypair: badKey, + }) + const attempt = agent.api.com.atproto.admin.updateSubjectStatus( + { + subject: repoSubject, + takedown: { applied: true, ref: 'test-repo' }, + }, + { + ...headers, + encoding: 'application/json', + }, + ) + await expect(attempt).rejects.toThrow( + 'jwt signature does not match jwt issuer', + ) + }) + + it('does not allow requests with a bad aud', async () => { + // repo subject is bob, so we set alice as the audience + const headers = await createServiceAuthHeaders({ + iss: modServiceDid, + aud: sc.dids.alice, + keypair: modServiceKey, + }) + const attempt = agent.api.com.atproto.admin.updateSubjectStatus( + { + subject: repoSubject, + takedown: { applied: true, ref: 'test-repo' }, + }, + { + ...headers, + encoding: 'application/json', + }, + ) + await expect(attempt).rejects.toThrow( + 'jwt audience does not match service did', + ) + }) +}) diff --git a/packages/bsky/tests/admin/moderation.test.ts b/packages/bsky/tests/admin/moderation.test.ts index 93e0998f2d3..6b01bfbbcb6 100644 --- a/packages/bsky/tests/admin/moderation.test.ts +++ b/packages/bsky/tests/admin/moderation.test.ts @@ -1,885 +1,209 @@ -import { TestNetwork, ImageRef, RecordRef, SeedClient } from '@atproto/dev-env' -import AtpAgent, { - ComAtprotoAdminEmitModerationEvent, - ComAtprotoAdminQueryModerationStatuses, - ComAtprotoModerationCreateReport, -} from '@atproto/api' -import { AtUri } from '@atproto/syntax' -import { forSnapshot } from '../_util' -import basicSeed from '../seeds/basic' +import { ImageRef, SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' +import AtpAgent from '@atproto/api' import { - REASONMISLEADING, - REASONOTHER, - REASONSPAM, -} from '../../src/lexicon/types/com/atproto/moderation/defs' -import { - ModEventLabel, - ModEventTakedown, - REVIEWCLOSED, - REVIEWESCALATED, + RepoBlobRef, + RepoRef, } from '../../src/lexicon/types/com/atproto/admin/defs' -import { PeriodicModerationEventReversal } from '../../src' - -type BaseCreateReportParams = - | { account: string } - | { content: { uri: string; cid: string } } -type CreateReportParams = BaseCreateReportParams & { - author: string -} & Omit - -type TakedownParams = BaseCreateReportParams & - Omit +import { Main as StrongRef } from '../../src/lexicon/types/com/atproto/repo/strongRef' describe('moderation', () => { let network: TestNetwork let agent: AtpAgent - let pdsAgent: AtpAgent let sc: SeedClient - const createReport = async (params: CreateReportParams) => { - const { author, ...rest } = params - return agent.api.com.atproto.moderation.createReport( + let repoSubject: RepoRef + let recordSubject: StrongRef + let blobSubject: RepoBlobRef + let blobRef: ImageRef + + beforeAll(async () => { + network = await TestNetwork.create({ + dbPostgresSchema: 'bsky_moderation', + }) + + agent = network.bsky.getClient() + sc = network.getSeedClient() + await basicSeed(sc) + await network.processAll() + repoSubject = { + $type: 'com.atproto.admin.defs#repoRef', + did: sc.dids.bob, + } + const post = sc.posts[sc.dids.carol][0] + recordSubject = { + $type: 'com.atproto.repo.strongRef', + uri: post.ref.uriStr, + cid: post.ref.cidStr, + } + blobRef = post.images[1] + blobSubject = { + $type: 'com.atproto.admin.defs#repoBlobRef', + did: sc.dids.carol, + cid: blobRef.image.ref.toString(), + } + }) + + afterAll(async () => { + await network.close() + }) + + it('takes down accounts', async () => { + await agent.api.com.atproto.admin.updateSubjectStatus( { - // Set default type to spam - reasonType: REASONSPAM, - ...rest, - subject: - 'account' in params - ? { - $type: 'com.atproto.admin.defs#repoRef', - did: params.account, - } - : { - $type: 'com.atproto.repo.strongRef', - uri: params.content.uri, - cid: params.content.cid, - }, + subject: repoSubject, + takedown: { applied: true, ref: 'test-repo' }, }, { - headers: await network.serviceHeaders(author), encoding: 'application/json', + headers: network.bsky.adminAuthHeaders('moderator'), }, ) - } + const res = await agent.api.com.atproto.admin.getSubjectStatus( + { + did: repoSubject.did, + }, + { headers: network.bsky.adminAuthHeaders('moderator') }, + ) + expect(res.data.subject.did).toEqual(sc.dids.bob) + expect(res.data.takedown?.applied).toBe(true) + expect(res.data.takedown?.ref).toBe('test-repo') + }) - const performTakedown = async ({ - durationInHours, - ...rest - }: TakedownParams & Pick) => - agent.api.com.atproto.admin.emitModerationEvent( + it('restores takendown accounts', async () => { + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { - $type: 'com.atproto.admin.defs#modEventTakedown', - durationInHours, - }, - subject: - 'account' in rest - ? { - $type: 'com.atproto.admin.defs#repoRef', - did: rest.account, - } - : { - $type: 'com.atproto.repo.strongRef', - uri: rest.content.uri, - cid: rest.content.cid, - }, - createdBy: 'did:example:admin', - ...rest, + subject: repoSubject, + takedown: { applied: false }, }, { encoding: 'application/json', - headers: network.bsky.adminAuthHeaders(), + headers: network.bsky.adminAuthHeaders('moderator'), }, ) + const res = await agent.api.com.atproto.admin.getSubjectStatus( + { + did: repoSubject.did, + }, + { headers: network.bsky.adminAuthHeaders('moderator') }, + ) + expect(res.data.subject.did).toEqual(sc.dids.bob) + expect(res.data.takedown?.applied).toBe(false) + expect(res.data.takedown?.ref).toBeUndefined() + }) - const performReverseTakedown = async (params: TakedownParams) => - agent.api.com.atproto.admin.emitModerationEvent( + it('takes down records', async () => { + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { - $type: 'com.atproto.admin.defs#modEventReverseTakedown', - }, - subject: - 'account' in params - ? { - $type: 'com.atproto.admin.defs#repoRef', - did: params.account, - } - : { - $type: 'com.atproto.repo.strongRef', - uri: params.content.uri, - cid: params.content.cid, - }, - createdBy: 'did:example:admin', - ...params, + subject: recordSubject, + takedown: { applied: true, ref: 'test-record' }, }, { encoding: 'application/json', - headers: network.bsky.adminAuthHeaders(), + headers: network.bsky.adminAuthHeaders('moderator'), }, ) - - const getStatuses = async ( - params: ComAtprotoAdminQueryModerationStatuses.QueryParams, - ) => { - const { data } = await agent.api.com.atproto.admin.queryModerationStatuses( - params, - { headers: network.bsky.adminAuthHeaders() }, + const res = await agent.api.com.atproto.admin.getSubjectStatus( + { + uri: recordSubject.uri, + }, + { headers: network.bsky.adminAuthHeaders('moderator') }, ) - - return data - } - - beforeAll(async () => { - network = await TestNetwork.create({ - dbPostgresSchema: 'bsky_moderation', - }) - agent = network.bsky.getClient() - pdsAgent = network.pds.getClient() - sc = network.getSeedClient() - await basicSeed(sc) - await network.processAll() - }) - - afterAll(async () => { - await network.close() + expect(res.data.subject.uri).toEqual(recordSubject.uri) + expect(res.data.takedown?.applied).toBe(true) + expect(res.data.takedown?.ref).toBe('test-record') }) - describe('reporting', () => { - it('creates reports of a repo.', async () => { - const { data: reportA } = await createReport({ - reasonType: REASONSPAM, - account: sc.dids.bob, - author: sc.dids.alice, - }) - const { data: reportB } = await createReport({ - reasonType: REASONOTHER, - reason: 'impersonation', - account: sc.dids.bob, - author: sc.dids.carol, - }) - expect(forSnapshot([reportA, reportB])).toMatchSnapshot() - }) - - it("allows reporting a repo that doesn't exist.", async () => { - const promise = createReport({ - reasonType: REASONSPAM, - account: 'did:plc:unknown', - author: sc.dids.alice, - }) - await expect(promise).resolves.toBeDefined() - }) - - it('creates reports of a record.', async () => { - const postA = sc.posts[sc.dids.bob][0].ref - const postB = sc.posts[sc.dids.bob][1].ref - const { data: reportA } = await createReport({ - author: sc.dids.alice, - reasonType: REASONSPAM, - content: { - $type: 'com.atproto.repo.strongRef', - uri: postA.uriStr, - cid: postA.cidStr, - }, - }) - const { data: reportB } = await createReport({ - reasonType: REASONOTHER, - reason: 'defamation', - content: { - $type: 'com.atproto.repo.strongRef', - uri: postB.uriStr, - cid: postB.cidStr, - }, - author: sc.dids.carol, - }) - expect(forSnapshot([reportA, reportB])).toMatchSnapshot() - }) - - it("allows reporting a record that doesn't exist.", async () => { - const postA = sc.posts[sc.dids.bob][0].ref - const postB = sc.posts[sc.dids.bob][1].ref - const postUriBad = new AtUri(postA.uriStr) - postUriBad.rkey = 'badrkey' - - const promiseA = createReport({ - reasonType: REASONSPAM, - content: { - $type: 'com.atproto.repo.strongRef', - uri: postUriBad.toString(), - cid: postA.cidStr, - }, - author: sc.dids.alice, - }) - await expect(promiseA).resolves.toBeDefined() - - const promiseB = createReport({ - reasonType: REASONOTHER, - reason: 'defamation', - content: { - $type: 'com.atproto.repo.strongRef', - uri: postB.uri.toString(), - cid: postA.cidStr, // bad cid - }, - author: sc.dids.carol, - }) - await expect(promiseB).resolves.toBeDefined() - }) + it('restores takendown records', async () => { + await agent.api.com.atproto.admin.updateSubjectStatus( + { + subject: recordSubject, + takedown: { applied: false }, + }, + { + encoding: 'application/json', + headers: network.bsky.adminAuthHeaders('moderator'), + }, + ) + const res = await agent.api.com.atproto.admin.getSubjectStatus( + { + uri: recordSubject.uri, + }, + { headers: network.bsky.adminAuthHeaders('moderator') }, + ) + expect(res.data.subject.uri).toEqual(recordSubject.uri) + expect(res.data.takedown?.applied).toBe(false) + expect(res.data.takedown?.ref).toBeUndefined() }) - describe('actioning', () => { - it('resolves reports on repos and records.', async () => { - const post = sc.posts[sc.dids.bob][1].ref - - await Promise.all([ - createReport({ - reasonType: REASONSPAM, - account: sc.dids.bob, - author: sc.dids.alice, - }), - createReport({ - reasonType: REASONOTHER, - reason: 'defamation', - content: { - uri: post.uri.toString(), - cid: post.cid.toString(), - }, - author: sc.dids.carol, - }), - ]) - - await performTakedown({ - account: sc.dids.bob, - }) - - const moderationStatusOnBobsAccount = await getStatuses({ - subject: sc.dids.bob, - }) - - // Validate that subject status is set to review closed and takendown flag is on - expect(moderationStatusOnBobsAccount.subjectStatuses[0]).toMatchObject({ - reviewState: REVIEWCLOSED, - takendown: true, - subject: { - $type: 'com.atproto.admin.defs#repoRef', - did: sc.dids.bob, - }, - }) - - // Cleanup - await performReverseTakedown({ - account: sc.dids.bob, - }) - }) - - it('supports escalating a subject', async () => { - const alicesPostRef = sc.posts[sc.dids.alice][0].ref - const alicesPostSubject = { - $type: 'com.atproto.repo.strongRef', - uri: alicesPostRef.uri.toString(), - cid: alicesPostRef.cid.toString(), - } - await agent.api.com.atproto.admin.emitModerationEvent( - { - event: { - $type: 'com.atproto.admin.defs#modEventEscalate', - comment: 'Y', - }, - subject: alicesPostSubject, - createdBy: 'did:example:admin', - }, - { - encoding: 'application/json', - headers: network.bsky.adminAuthHeaders('triage'), - }, - ) - - const alicesPostStatus = await getStatuses({ - subject: alicesPostRef.uri.toString(), - }) - - expect(alicesPostStatus.subjectStatuses[0]).toMatchObject({ - reviewState: REVIEWESCALATED, - takendown: false, - subject: alicesPostSubject, - }) - }) - - it('adds persistent comment on subject through comment event', async () => { - const alicesPostRef = sc.posts[sc.dids.alice][0].ref - const alicesPostSubject = { - $type: 'com.atproto.repo.strongRef', - uri: alicesPostRef.uri.toString(), - cid: alicesPostRef.cid.toString(), - } - await agent.api.com.atproto.admin.emitModerationEvent( - { - event: { - $type: 'com.atproto.admin.defs#modEventComment', - sticky: true, - comment: 'This is a persistent note', - }, - subject: alicesPostSubject, - createdBy: 'did:example:admin', - }, - { - encoding: 'application/json', - headers: network.bsky.adminAuthHeaders('triage'), - }, - ) - - const alicesPostStatus = await getStatuses({ - subject: alicesPostRef.uri.toString(), - }) - - expect(alicesPostStatus.subjectStatuses[0].comment).toEqual( - 'This is a persistent note', - ) - }) - - it('reverses status when revert event is triggered.', async () => { - const alicesPostRef = sc.posts[sc.dids.alice][0].ref - const emitModEvent = async ( - event: ComAtprotoAdminEmitModerationEvent.InputSchema['event'], - overwrites: Partial = {}, - ) => { - const baseAction = { - subject: { - $type: 'com.atproto.repo.strongRef', - uri: alicesPostRef.uriStr, - cid: alicesPostRef.cidStr, - }, - createdBy: 'did:example:admin', - } - return agent.api.com.atproto.admin.emitModerationEvent( - { - event, - ...baseAction, - ...overwrites, - }, - { - encoding: 'application/json', - headers: network.bsky.adminAuthHeaders(), - }, - ) - } - // Validate that subject status is marked as escalated - await emitModEvent({ - $type: 'com.atproto.admin.defs#modEventReport', - reportType: REASONSPAM, - }) - await emitModEvent({ - $type: 'com.atproto.admin.defs#modEventReport', - reportType: REASONMISLEADING, - }) - await emitModEvent({ - $type: 'com.atproto.admin.defs#modEventEscalate', - }) - const alicesPostStatusAfterEscalation = await getStatuses({ - subject: alicesPostRef.uriStr, - }) - expect( - alicesPostStatusAfterEscalation.subjectStatuses[0].reviewState, - ).toEqual(REVIEWESCALATED) - - // Validate that subject status is marked as takendown - - await emitModEvent({ - $type: 'com.atproto.admin.defs#modEventLabel', - createLabelVals: ['nsfw'], - negateLabelVals: [], - }) - await emitModEvent({ - $type: 'com.atproto.admin.defs#modEventTakedown', - }) - - const alicesPostStatusAfterTakedown = await getStatuses({ - subject: alicesPostRef.uriStr, - }) - expect(alicesPostStatusAfterTakedown.subjectStatuses[0]).toMatchObject({ - reviewState: REVIEWCLOSED, - takendown: true, - }) - - await emitModEvent({ - $type: 'com.atproto.admin.defs#modEventReverseTakedown', - }) - const alicesPostStatusAfterRevert = await getStatuses({ - subject: alicesPostRef.uriStr, - }) - // Validate that after reverting, the status of the subject is reverted to the last status changing event - expect(alicesPostStatusAfterRevert.subjectStatuses[0]).toMatchObject({ - reviewState: REVIEWCLOSED, - takendown: false, - }) - // Validate that after reverting, the last review date of the subject - // DOES NOT update to the the last status changing event - expect( - new Date( - alicesPostStatusAfterEscalation.subjectStatuses[0] - .lastReviewedAt as string, - ) < - new Date( - alicesPostStatusAfterRevert.subjectStatuses[0] - .lastReviewedAt as string, - ), - ).toBeTruthy() - }) - - it('negates an existing label.', async () => { - const { ctx } = network.bsky - const post = sc.posts[sc.dids.bob][0].ref - const bobsPostSubject = { - $type: 'com.atproto.repo.strongRef', - uri: post.uriStr, - cid: post.cidStr, - } - const labelingService = ctx.services.label(ctx.db.getPrimary()) - await labelingService.formatAndCreate( - ctx.cfg.labelerDid, - post.uriStr, - post.cidStr, - { create: ['kittens'] }, - ) - await emitLabelEvent({ - negateLabelVals: ['kittens'], - createLabelVals: [], - subject: bobsPostSubject, - }) - await expect(getRecordLabels(post.uriStr)).resolves.toEqual([]) - - await emitLabelEvent({ - createLabelVals: ['kittens'], - negateLabelVals: [], - subject: bobsPostSubject, - }) - await expect(getRecordLabels(post.uriStr)).resolves.toEqual(['kittens']) - // Cleanup - await labelingService.formatAndCreate( - ctx.cfg.labelerDid, - post.uriStr, - post.cidStr, - { negate: ['kittens'] }, - ) - }) - - it('no-ops when negating an already-negated label and reverses.', async () => { - const { ctx } = network.bsky - const post = sc.posts[sc.dids.bob][0].ref - const labelingService = ctx.services.label(ctx.db.getPrimary()) - await emitLabelEvent({ - negateLabelVals: ['bears'], - createLabelVals: [], - subject: { - $type: 'com.atproto.repo.strongRef', - uri: post.uriStr, - cid: post.cidStr, - }, - }) - await expect(getRecordLabels(post.uriStr)).resolves.toEqual([]) - await emitLabelEvent({ - createLabelVals: ['bears'], - negateLabelVals: [], - subject: { - $type: 'com.atproto.repo.strongRef', - uri: post.uriStr, - cid: post.cidStr, - }, - }) - await expect(getRecordLabels(post.uriStr)).resolves.toEqual(['bears']) - // Cleanup - await labelingService.formatAndCreate( - ctx.cfg.labelerDid, - post.uriStr, - post.cidStr, - { negate: ['bears'] }, - ) - }) - - it('creates non-existing labels and reverses.', async () => { - const post = sc.posts[sc.dids.bob][0].ref - await emitLabelEvent({ - createLabelVals: ['puppies', 'doggies'], - negateLabelVals: [], - subject: { - $type: 'com.atproto.repo.strongRef', - uri: post.uriStr, - cid: post.cidStr, - }, - }) - await expect(getRecordLabels(post.uriStr)).resolves.toEqual([ - 'puppies', - 'doggies', - ]) - await emitLabelEvent({ - negateLabelVals: ['puppies', 'doggies'], - createLabelVals: [], - subject: { - $type: 'com.atproto.repo.strongRef', - uri: post.uriStr, - cid: post.cidStr, - }, - }) - await expect(getRecordLabels(post.uriStr)).resolves.toEqual([]) - }) - - it('creates labels on a repo and reverses.', async () => { - await emitLabelEvent({ - createLabelVals: ['puppies', 'doggies'], - negateLabelVals: [], - subject: { - $type: 'com.atproto.admin.defs#repoRef', - did: sc.dids.bob, - }, - }) - await expect(getRepoLabels(sc.dids.bob)).resolves.toEqual([ - 'puppies', - 'doggies', - ]) - await emitLabelEvent({ - negateLabelVals: ['puppies', 'doggies'], - createLabelVals: [], - subject: { - $type: 'com.atproto.admin.defs#repoRef', - did: sc.dids.bob, - }, - }) - await expect(getRepoLabels(sc.dids.bob)).resolves.toEqual([]) - }) - - it('creates and negates labels on a repo and reverses.', async () => { - const { ctx } = network.bsky - const labelingService = ctx.services.label(ctx.db.getPrimary()) - await labelingService.formatAndCreate( - ctx.cfg.labelerDid, - sc.dids.bob, - null, - { create: ['kittens'] }, - ) - await emitLabelEvent({ - createLabelVals: ['puppies'], - negateLabelVals: ['kittens'], - subject: { - $type: 'com.atproto.admin.defs#repoRef', - did: sc.dids.bob, - }, - }) - await expect(getRepoLabels(sc.dids.bob)).resolves.toEqual(['puppies']) - - await emitLabelEvent({ - negateLabelVals: ['puppies'], - createLabelVals: ['kittens'], - subject: { - $type: 'com.atproto.admin.defs#repoRef', - did: sc.dids.bob, - }, - }) - await expect(getRepoLabels(sc.dids.bob)).resolves.toEqual(['kittens']) - }) - - it('does not allow triage moderators to label.', async () => { - const attemptLabel = agent.api.com.atproto.admin.emitModerationEvent( + it('does not allow non-full moderators to update subject state', async () => { + const subject = { + $type: 'com.atproto.admin.defs#repoRef', + did: sc.dids.bob, + } + const attemptTakedownTriage = + agent.api.com.atproto.admin.updateSubjectStatus( { - event: { - $type: 'com.atproto.admin.defs#modEventLabel', - negateLabelVals: ['a'], - createLabelVals: ['b', 'c'], - }, - createdBy: 'did:example:moderator', - reason: 'Y', - subject: { - $type: 'com.atproto.admin.defs#repoRef', - did: sc.dids.bob, - }, + subject, + takedown: { applied: true }, }, { encoding: 'application/json', headers: network.bsky.adminAuthHeaders('triage'), }, ) - await expect(attemptLabel).rejects.toThrow( - 'Must be a full moderator to label content', - ) - }) - - it('does not allow take down event on takendown post or reverse takedown on available post.', async () => { - await performTakedown({ - account: sc.dids.bob, - }) - await expect( - performTakedown({ - account: sc.dids.bob, - }), - ).rejects.toThrow('Subject is already taken down') - - // Cleanup - await performReverseTakedown({ - account: sc.dids.bob, - }) - await expect( - performReverseTakedown({ - account: sc.dids.bob, - }), - ).rejects.toThrow('Subject is not taken down') - }) - it('fans out repo takedowns to pds', async () => { - await performTakedown({ - account: sc.dids.bob, - }) - - const res1 = await pdsAgent.api.com.atproto.admin.getSubjectStatus( - { - did: sc.dids.bob, - }, - { headers: network.pds.adminAuthHeaders() }, - ) - expect(res1.data.takedown?.applied).toBe(true) - - // cleanup - await performReverseTakedown({ account: sc.dids.bob }) - - const res2 = await pdsAgent.api.com.atproto.admin.getSubjectStatus( - { - did: sc.dids.bob, - }, - { headers: network.pds.adminAuthHeaders() }, - ) - expect(res2.data.takedown?.applied).toBe(false) - }) - - it('fans out record takedowns to pds', async () => { - const post = sc.posts[sc.dids.bob][0] - const uri = post.ref.uriStr - const cid = post.ref.cidStr - await performTakedown({ - content: { uri, cid }, - }) - const res1 = await pdsAgent.api.com.atproto.admin.getSubjectStatus( - { uri }, - { headers: network.pds.adminAuthHeaders() }, - ) - expect(res1.data.takedown?.applied).toBe(true) - - // cleanup - await performReverseTakedown({ content: { uri, cid } }) - - const res2 = await pdsAgent.api.com.atproto.admin.getSubjectStatus( - { uri }, - { headers: network.pds.adminAuthHeaders() }, - ) - expect(res2.data.takedown?.applied).toBe(false) - }) - - it('allows full moderators to takedown.', async () => { - await agent.api.com.atproto.admin.emitModerationEvent( - { - event: { - $type: 'com.atproto.admin.defs#modEventTakedown', - }, - createdBy: 'did:example:moderator', - subject: { - $type: 'com.atproto.admin.defs#repoRef', - did: sc.dids.bob, - }, - }, - { - encoding: 'application/json', - headers: network.bsky.adminAuthHeaders('moderator'), - }, - ) - // cleanup - await reverse({ - subject: { - $type: 'com.atproto.admin.defs#repoRef', - did: sc.dids.bob, - }, - }) - }) - - it('does not allow non-full moderators to takedown.', async () => { - const attemptTakedownTriage = - agent.api.com.atproto.admin.emitModerationEvent( - { - event: { - $type: 'com.atproto.admin.defs#modEventTakedown', - }, - createdBy: 'did:example:moderator', - subject: { - $type: 'com.atproto.admin.defs#repoRef', - did: sc.dids.bob, - }, - }, - { - encoding: 'application/json', - headers: network.bsky.adminAuthHeaders('triage'), - }, - ) - await expect(attemptTakedownTriage).rejects.toThrow( - 'Must be a full moderator to perform an account takedown', - ) - }) - it('automatically reverses actions marked with duration', async () => { - await createReport({ - reasonType: REASONSPAM, - account: sc.dids.bob, - author: sc.dids.alice, - }) - const { data: action } = await performTakedown({ - account: sc.dids.bob, - // Use negative value to set the expiry time in the past so that the action is automatically reversed - // right away without having to wait n number of hours for a successful assertion - durationInHours: -1, - }) - - const { data: statusesAfterTakedown } = - await agent.api.com.atproto.admin.queryModerationStatuses( - { subject: sc.dids.bob }, - { headers: network.bsky.adminAuthHeaders('moderator') }, - ) - - expect(statusesAfterTakedown.subjectStatuses[0]).toMatchObject({ - takendown: true, - }) - - // In the actual app, this will be instantiated and run on server startup - const periodicReversal = new PeriodicModerationEventReversal( - network.bsky.ctx, - ) - await periodicReversal.findAndRevertDueActions() + await expect(attemptTakedownTriage).rejects.toThrow( + 'Must be a full moderator to update subject state', + ) + const res = await agent.api.com.atproto.admin.getSubjectStatus( + { + did: subject.did, + }, + { headers: network.bsky.adminAuthHeaders('moderator') }, + ) + expect(res.data.takedown?.applied).toBe(false) + }) - const [{ data: eventList }, { data: statuses }] = await Promise.all([ - agent.api.com.atproto.admin.queryModerationEvents( - { subject: sc.dids.bob }, - { headers: network.bsky.adminAuthHeaders('moderator') }, - ), - agent.api.com.atproto.admin.queryModerationStatuses( - { subject: sc.dids.bob }, - { headers: network.bsky.adminAuthHeaders('moderator') }, - ), - ]) + describe('blob takedown', () => { + let blobUri: string + let imageUri: string - expect(statuses.subjectStatuses[0]).toMatchObject({ - takendown: false, - reviewState: REVIEWCLOSED, - }) - // Verify that the automatic reversal is attributed to the original moderator of the temporary action - // and that the reason is set to indicate that the action was automatically reversed. - expect(eventList.events[0]).toMatchObject({ - createdBy: action.createdBy, - event: { - $type: 'com.atproto.admin.defs#modEventReverseTakedown', - comment: - '[SCHEDULED_REVERSAL] Reverting action as originally scheduled', - }, - }) + beforeAll(async () => { + blobUri = `${network.bsky.url}/blob/${blobSubject.did}/${blobSubject.cid}` + imageUri = network.bsky.ctx.imgUriBuilder + .getPresetUri('feed_thumbnail', blobSubject.did, blobSubject.cid) + .replace(network.bsky.ctx.cfg.publicUrl || '', network.bsky.url) + // Warm image server cache + await fetch(imageUri) + const cached = await fetch(imageUri) + expect(cached.headers.get('x-cache')).toEqual('hit') }) - async function emitLabelEvent( - opts: Partial & { - subject: ComAtprotoAdminEmitModerationEvent.InputSchema['subject'] - createLabelVals: ModEventLabel['createLabelVals'] - negateLabelVals: ModEventLabel['negateLabelVals'] - }, - ) { - const { createLabelVals, negateLabelVals } = opts - const result = await agent.api.com.atproto.admin.emitModerationEvent( + it('takes down blobs', async () => { + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { - $type: 'com.atproto.admin.defs#modEventLabel', - createLabelVals, - negateLabelVals, - }, - createdBy: 'did:example:admin', - reason: 'Y', - ...opts, + subject: blobSubject, + takedown: { applied: true, ref: 'test-blob' }, }, { encoding: 'application/json', headers: network.bsky.adminAuthHeaders(), }, ) - return result.data - } - - async function reverse( - opts: Partial & { - subject: ComAtprotoAdminEmitModerationEvent.InputSchema['subject'] - }, - ) { - await agent.api.com.atproto.admin.emitModerationEvent( - { - event: { - $type: 'com.atproto.admin.defs#modEventReverseTakedown', - }, - createdBy: 'did:example:admin', - reason: 'Y', - ...opts, - }, + const res = await agent.api.com.atproto.admin.getSubjectStatus( { - encoding: 'application/json', - headers: network.bsky.adminAuthHeaders(), + did: blobSubject.did, + blob: blobSubject.cid, }, + { headers: network.bsky.adminAuthHeaders('moderator') }, ) - } - - async function getRecordLabels(uri: string) { - const result = await agent.api.com.atproto.admin.getRecord( - { uri }, - { headers: network.bsky.adminAuthHeaders() }, - ) - const labels = result.data.labels ?? [] - return labels.map((l) => l.val) - } - - async function getRepoLabels(did: string) { - const result = await agent.api.com.atproto.admin.getRepo( - { did }, - { headers: network.bsky.adminAuthHeaders() }, - ) - const labels = result.data.labels ?? [] - return labels.map((l) => l.val) - } - }) - - describe('blob takedown', () => { - let post: { ref: RecordRef; images: ImageRef[] } - let blob: ImageRef - let imageUri: string - beforeAll(async () => { - const { ctx } = network.bsky - post = sc.posts[sc.dids.carol][0] - blob = post.images[1] - imageUri = ctx.imgUriBuilder - .getPresetUri( - 'feed_thumbnail', - sc.dids.carol, - blob.image.ref.toString(), - ) - .replace(ctx.cfg.publicUrl || '', network.bsky.url) - // Warm image server cache - await fetch(imageUri) - const cached = await fetch(imageUri) - expect(cached.headers.get('x-cache')).toEqual('hit') - await performTakedown({ - content: { - uri: post.ref.uriStr, - cid: post.ref.cidStr, - }, - subjectBlobCids: [blob.image.ref.toString()], - }) - }) - - it('sets blobCids in moderation status', async () => { - const { subjectStatuses } = await getStatuses({ - subject: post.ref.uriStr, - }) - - expect(subjectStatuses[0].subjectBlobCids).toEqual([ - blob.image.ref.toString(), - ]) + expect(res.data.subject.did).toEqual(blobSubject.did) + expect(res.data.subject.cid).toEqual(blobSubject.cid) + expect(res.data.takedown?.applied).toBe(true) + expect(res.data.takedown?.ref).toBe('test-blob') }) it('prevents resolution of blob', async () => { - const blobPath = `/blob/${sc.dids.carol}/${blob.image.ref.toString()}` - const resolveBlob = await fetch(`${network.bsky.url}${blobPath}`) + const resolveBlob = await fetch(blobUri) expect(resolveBlob.status).toEqual(404) expect(await resolveBlob.json()).toEqual({ error: 'NotFoundError', @@ -893,29 +217,20 @@ describe('moderation', () => { expect(await fetchImage.json()).toEqual({ message: 'Image not found' }) }) - it('fans takedown out to pds', async () => { - const res = await pdsAgent.api.com.atproto.admin.getSubjectStatus( + it('restores blob when takedown is removed', async () => { + await agent.api.com.atproto.admin.updateSubjectStatus( { - did: sc.dids.carol, - blob: blob.image.ref.toString(), + subject: blobSubject, + takedown: { applied: false }, }, - { headers: network.pds.adminAuthHeaders() }, - ) - expect(res.data.takedown?.applied).toBe(true) - }) - - it('restores blob when action is reversed.', async () => { - await performReverseTakedown({ - content: { - uri: post.ref.uriStr, - cid: post.ref.cidStr, + { + encoding: 'application/json', + headers: network.bsky.adminAuthHeaders(), }, - subjectBlobCids: [blob.image.ref.toString()], - }) + ) // Can resolve blob - const blobPath = `/blob/${sc.dids.carol}/${blob.image.ref.toString()}` - const resolveBlob = await fetch(`${network.bsky.url}${blobPath}`) + const resolveBlob = await fetch(blobUri) expect(resolveBlob.status).toEqual(200) // Can fetch through image server @@ -924,16 +239,5 @@ describe('moderation', () => { const size = Number(fetchImage.headers.get('content-length')) expect(size).toBeGreaterThan(9000) }) - - it('fans reversal out to pds', async () => { - const res = await pdsAgent.api.com.atproto.admin.getSubjectStatus( - { - did: sc.dids.carol, - blob: blob.image.ref.toString(), - }, - { headers: network.pds.adminAuthHeaders() }, - ) - expect(res.data.takedown?.applied).toBe(false) - }) }) }) diff --git a/packages/bsky/tests/algos/hot-classic.test.ts b/packages/bsky/tests/algos/hot-classic.test.ts index bb44ca5c0e8..185cc962c21 100644 --- a/packages/bsky/tests/algos/hot-classic.test.ts +++ b/packages/bsky/tests/algos/hot-classic.test.ts @@ -1,6 +1,5 @@ import AtpAgent, { AtUri } from '@atproto/api' -import { TestNetwork, SeedClient } from '@atproto/dev-env' -import basicSeed from '../seeds/basic' +import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' import { makeAlgos } from '../../src' describe('algo hot-classic', () => { @@ -40,7 +39,7 @@ describe('algo hot-classic', () => { it('returns well liked posts', async () => { const img = await sc.uploadFile( alice, - 'tests/sample-img/key-landscape-small.jpg', + '../dev-env/src/seed/img/key-landscape-small.jpg', 'image/jpeg', ) const one = await sc.post(alice, 'first post', undefined, [img]) diff --git a/packages/bsky/tests/auth.test.ts b/packages/bsky/tests/auth.test.ts index 6b3fbd6b73d..e08049fa84c 100644 --- a/packages/bsky/tests/auth.test.ts +++ b/packages/bsky/tests/auth.test.ts @@ -1,6 +1,5 @@ import AtpAgent from '@atproto/api' -import { SeedClient, TestNetwork } from '@atproto/dev-env' -import usersSeed from './seeds/users' +import { SeedClient, TestNetwork, usersSeed } from '@atproto/dev-env' import { createServiceJwt } from '@atproto/xrpc-server' import { Keypair, Secp256k1Keypair } from '@atproto/crypto' diff --git a/packages/bsky/tests/auto-moderator/fuzzy-matcher.test.ts b/packages/bsky/tests/auto-moderator/fuzzy-matcher.test.ts index 60fe50d582d..f7d539e63b7 100644 --- a/packages/bsky/tests/auto-moderator/fuzzy-matcher.test.ts +++ b/packages/bsky/tests/auto-moderator/fuzzy-matcher.test.ts @@ -1,6 +1,5 @@ -import { TestNetwork, SeedClient } from '@atproto/dev-env' +import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' import { FuzzyMatcher, encode } from '../../src/auto-moderator/fuzzy-matcher' -import basicSeed from '../seeds/basic' import { AtpAgent } from '@atproto/api' import { ImageInvalidator } from '../../src/image/invalidator' @@ -35,9 +34,8 @@ describe('fuzzy matcher', () => { }) const getAllReports = () => { - return network.bsky.ctx.db - .getPrimary() - .db.selectFrom('moderation_event') + return network.ozone.ctx.db.db + .selectFrom('moderation_event') .where('action', '=', 'com.atproto.admin.defs#modEventReport') .selectAll() .orderBy('id', 'asc') diff --git a/packages/bsky/tests/auto-moderator/labeler.test.ts b/packages/bsky/tests/auto-moderator/labeler.test.ts index b7a2fc76e70..b735ebb28b2 100644 --- a/packages/bsky/tests/auto-moderator/labeler.test.ts +++ b/packages/bsky/tests/auto-moderator/labeler.test.ts @@ -1,16 +1,13 @@ -import { TestNetwork } from '@atproto/dev-env' +import { TestNetwork, usersSeed } from '@atproto/dev-env' import { AtUri, BlobRef } from '@atproto/api' import { Readable } from 'stream' import { AutoModerator } from '../../src/auto-moderator' import IndexerContext from '../../src/indexer/context' import { cidForRecord } from '@atproto/repo' import { TID } from '@atproto/common' -import { LabelService } from '../../src/services/label' -import usersSeed from '../seeds/users' import { CID } from 'multiformats/cid' import { ImgLabeler } from '../../src/auto-moderator/hive' -import { ModerationService } from '../../src/services/moderation' -import { ImageInvalidator } from '../../src/image/invalidator' +import { TestOzone } from '@atproto/dev-env/src/ozone' // outside of test suite so that TestLabeler can access them let badCid1: CID | undefined = undefined @@ -18,10 +15,9 @@ let badCid2: CID | undefined = undefined describe('labeler', () => { let network: TestNetwork + let ozone: TestOzone let autoMod: AutoModerator - let labelSrvc: LabelService let ctx: IndexerContext - let labelerDid: string let badBlob1: BlobRef let badBlob2: BlobRef let goodBlob: BlobRef @@ -32,12 +28,11 @@ describe('labeler', () => { network = await TestNetwork.create({ dbPostgresSchema: 'bsky_labeler', }) + ozone = network.ozone ctx = network.bsky.indexer.ctx const pdsCtx = network.pds.ctx - labelerDid = ctx.cfg.labelerDid autoMod = ctx.autoMod autoMod.imgLabeler = new TestImgLabeler() - labelSrvc = ctx.services.label(ctx.db) const sc = network.getSeedClient() await usersSeed(sc) await network.processAll() @@ -54,11 +49,7 @@ describe('labeler', () => { constraints: {}, } await store.repo.blob.verifyBlobAndMakePermanent(preparedBlobRef) - await store.repo.blob.associateBlob( - preparedBlobRef, - postUri(), - TID.nextStr(), - ) + await store.repo.blob.associateBlob(preparedBlobRef, postUri()) return blobRef }) } @@ -76,11 +67,15 @@ describe('labeler', () => { await network.close() }) + const getLabels = async (subject: string) => { + return ozone.ctx.db.db + .selectFrom('label') + .selectAll() + .where('uri', '=', subject) + .execute() + } + it('labels text in posts', async () => { - autoMod.services.moderation = ModerationService.creator( - new NoopImageUriBuilder(''), - new NoopInvalidator(), - ) const post = { $type: 'app.bsky.feed.post', text: 'blah blah label_me', @@ -89,11 +84,11 @@ describe('labeler', () => { const cid = await cidForRecord(post) const uri = postUri() autoMod.processRecord(uri, cid, post) - await autoMod.processAll() - const labels = await labelSrvc.getLabels(uri.toString()) + await network.processAll() + const labels = await getLabels(uri.toString()) expect(labels.length).toBe(1) expect(labels[0]).toMatchObject({ - src: labelerDid, + src: ozone.ctx.cfg.service.did, uri: uri.toString(), cid: cid.toString(), val: 'test-label', @@ -102,7 +97,7 @@ describe('labeler', () => { // Verify that along with applying the labels, we are also leaving trace of the label as moderation event // Temporarily assign an instance of moderation service to the autoMod so that we can validate label event - const modSrvc = autoMod.services.moderation(ctx.db) + const modSrvc = ozone.ctx.modService(ozone.ctx.db) const { events } = await modSrvc.getEvents({ includeAllUserRecords: false, subject: uri.toString(), @@ -116,11 +111,8 @@ describe('labeler', () => { createLabelVals: 'test-label', negateLabelVals: null, comment: `[AutoModerator]: Applying labels`, - createdBy: labelerDid, + createdBy: network.bsky.indexer.ctx.cfg.serverDid, }) - - // Cleanup the temporary assignment, knowing that by default, moderation service is not available - autoMod.services.moderation = undefined }) it('labels embeds in posts', async () => { @@ -150,36 +142,12 @@ describe('labeler', () => { const cid = await cidForRecord(post) autoMod.processRecord(uri, cid, post) await autoMod.processAll() - const dbLabels = await labelSrvc.getLabels(uri.toString()) + const dbLabels = await getLabels(uri.toString()) const labels = dbLabels.map((row) => row.val).sort() expect(labels).toEqual( ['test-label', 'test-label-2', 'img-label', 'other-img-label'].sort(), ) }) - - it('retrieves repo labels on profile views', async () => { - await ctx.db.db - .insertInto('label') - .values({ - src: labelerDid, - uri: alice, - cid: '', - val: 'repo-label', - neg: false, - cts: new Date().toISOString(), - }) - .execute() - - const labels = await labelSrvc.getLabelsForProfile(alice) - - expect(labels.length).toBe(1) - expect(labels[0]).toMatchObject({ - src: labelerDid, - uri: alice, - val: 'repo-label', - neg: false, - }) - }) }) class TestImgLabeler implements ImgLabeler { @@ -193,14 +161,3 @@ class TestImgLabeler implements ImgLabeler { return [] } } - -class NoopInvalidator implements ImageInvalidator { - async invalidate() {} -} -class NoopImageUriBuilder { - constructor(public endpoint: string) {} - - getPresetUri() { - return '' - } -} diff --git a/packages/bsky/tests/auto-moderator/takedowns.test.ts b/packages/bsky/tests/auto-moderator/takedowns.test.ts index 8c1f1a21cdd..1b8b4fe53a4 100644 --- a/packages/bsky/tests/auto-moderator/takedowns.test.ts +++ b/packages/bsky/tests/auto-moderator/takedowns.test.ts @@ -1,16 +1,16 @@ import fs from 'fs/promises' -import { TestNetwork, SeedClient, ImageRef } from '@atproto/dev-env' +import { TestNetwork, SeedClient, ImageRef, usersSeed } from '@atproto/dev-env' import { AtpAgent } from '@atproto/api' import { AutoModerator } from '../../src/auto-moderator' -import IndexerContext from '../../src/indexer/context' import { sha256RawToCid } from '@atproto/common' -import usersSeed from '../seeds/users' import { CID } from 'multiformats/cid' import { AtUri } from '@atproto/syntax' import { ImageFlagger } from '../../src/auto-moderator/abyss' import { ImageInvalidator } from '../../src/image/invalidator' import { sha256 } from '@atproto/crypto' import { ids } from '../../src/lexicon/lexicons' +import { TestOzone } from '@atproto/dev-env/src/ozone' +import { PrimaryDatabase } from '../../src' // outside of test suite so that TestLabeler can access them let badCid1: CID | undefined = undefined @@ -18,9 +18,10 @@ let badCid2: CID | undefined = undefined describe('takedowner', () => { let network: TestNetwork + let ozone: TestOzone + let bskyDb: PrimaryDatabase let autoMod: AutoModerator let testInvalidator: TestInvalidator - let ctx: IndexerContext let pdsAgent: AtpAgent let sc: SeedClient let alice: string @@ -36,8 +37,9 @@ describe('takedowner', () => { imgInvalidator: testInvalidator, }, }) - ctx = network.bsky.indexer.ctx - autoMod = ctx.autoMod + ozone = network.ozone + bskyDb = network.bsky.ctx.db.getPrimary() + autoMod = network.bsky.indexer.ctx.autoMod autoMod.imageFlagger = new TestFlagger() pdsAgent = new AtpAgent({ service: network.pds.url }) sc = network.getSeedClient() @@ -45,26 +47,26 @@ describe('takedowner', () => { await network.processAll() alice = sc.dids.alice const fileBytes1 = await fs.readFile( - 'tests/sample-img/key-portrait-small.jpg', + '../dev-env/src/seed/img/key-portrait-small.jpg', ) const fileBytes2 = await fs.readFile( - 'tests/sample-img/key-portrait-large.jpg', + '../dev-env/src/seed/img/key-portrait-large.jpg', ) badCid1 = sha256RawToCid(await sha256(fileBytes1)) badCid2 = sha256RawToCid(await sha256(fileBytes2)) goodBlob = await sc.uploadFile( alice, - 'tests/sample-img/key-landscape-small.jpg', + '../dev-env/src/seed/img/key-landscape-small.jpg', 'image/jpeg', ) badBlob1 = await sc.uploadFile( alice, - 'tests/sample-img/key-portrait-small.jpg', + '../dev-env/src/seed/img/key-portrait-small.jpg', 'image/jpeg', ) badBlob2 = await sc.uploadFile( alice, - 'tests/sample-img/key-portrait-large.jpg', + '../dev-env/src/seed/img/key-portrait-large.jpg', 'image/jpeg', ) }) @@ -76,9 +78,8 @@ describe('takedowner', () => { it('takes down flagged content in posts', async () => { const post = await sc.post(alice, 'blah', undefined, [goodBlob, badBlob1]) await network.processAll() - await autoMod.processAll() const [modStatus, takedownEvent] = await Promise.all([ - ctx.db.db + ozone.ctx.db.db .selectFrom('moderation_subject_status') .where('did', '=', alice) .where( @@ -88,7 +89,7 @@ describe('takedowner', () => { ) .select(['takendown', 'id']) .executeTakeFirst(), - ctx.db.db + ozone.ctx.db.db .selectFrom('moderation_event') .where('subjectDid', '=', alice) .where('action', '=', 'com.atproto.admin.defs#modEventTakedown') @@ -99,12 +100,12 @@ describe('takedowner', () => { throw new Error('expected mod action') } expect(modStatus.takendown).toEqual(true) - const record = await ctx.db.db + const record = await bskyDb.db .selectFrom('record') .where('uri', '=', post.ref.uriStr) - .select('takedownId') + .select('takedownRef') .executeTakeFirst() - expect(record?.takedownId).toBeGreaterThan(0) + expect(record?.takedownRef).toEqual(`BSKY-TAKEDOWN-${takedownEvent.id}`) const recordPds = await network.pds.ctx.actorStore.read( post.ref.uri.hostname, @@ -115,7 +116,7 @@ describe('takedowner', () => { .select('takedownRef') .executeTakeFirst(), ) - expect(recordPds?.takedownRef).toEqual(takedownEvent.id.toString()) + expect(recordPds?.takedownRef).toEqual(`BSKY-TAKEDOWN-${takedownEvent.id}`) expect(testInvalidator.invalidated.length).toBe(1) expect(testInvalidator.invalidated[0].subject).toBe( @@ -137,13 +138,13 @@ describe('takedowner', () => { ) await network.processAll() const [modStatus, takedownEvent] = await Promise.all([ - ctx.db.db + ozone.ctx.db.db .selectFrom('moderation_subject_status') .where('did', '=', alice) .where('recordPath', '=', `${ids.AppBskyActorProfile}/self`) .select(['takendown', 'id']) .executeTakeFirst(), - ctx.db.db + ozone.ctx.db.db .selectFrom('moderation_event') .where('subjectDid', '=', alice) .where( @@ -159,12 +160,12 @@ describe('takedowner', () => { throw new Error('expected mod action') } expect(modStatus.takendown).toEqual(true) - const record = await ctx.db.db + const recordBsky = await bskyDb.db .selectFrom('record') .where('uri', '=', res.data.uri) - .select('takedownId') + .select('takedownRef') .executeTakeFirst() - expect(record?.takedownId).toBeGreaterThan(0) + expect(recordBsky?.takedownRef).toEqual(`BSKY-TAKEDOWN-${takedownEvent.id}`) const recordPds = await network.pds.ctx.actorStore.read(alice, (store) => store.db.db @@ -173,7 +174,7 @@ describe('takedowner', () => { .select('takedownRef') .executeTakeFirst(), ) - expect(recordPds?.takedownRef).toEqual(takedownEvent.id.toString()) + expect(recordPds?.takedownRef).toEqual(`BSKY-TAKEDOWN-${takedownEvent.id}`) expect(testInvalidator.invalidated.length).toBe(2) expect(testInvalidator.invalidated[1].subject).toBe( diff --git a/packages/bsky/tests/blob-resolver.test.ts b/packages/bsky/tests/blob-resolver.test.ts index 79491c5601e..e428c70ca08 100644 --- a/packages/bsky/tests/blob-resolver.test.ts +++ b/packages/bsky/tests/blob-resolver.test.ts @@ -1,8 +1,7 @@ import axios, { AxiosInstance } from 'axios' import { CID } from 'multiformats/cid' import { verifyCidForBytes } from '@atproto/common' -import { TestNetwork } from '@atproto/dev-env' -import basicSeed from './seeds/basic' +import { TestNetwork, basicSeed } from '@atproto/dev-env' import { randomBytes } from '@atproto/crypto' describe('blob resolver', () => { diff --git a/packages/bsky/tests/daemon.test.ts b/packages/bsky/tests/daemon.test.ts index 32f0d6617ab..cb3c7058cff 100644 --- a/packages/bsky/tests/daemon.test.ts +++ b/packages/bsky/tests/daemon.test.ts @@ -1,8 +1,7 @@ import assert from 'assert' import { AtUri } from '@atproto/api' -import { TestNetwork } from '@atproto/dev-env' +import { TestNetwork, usersSeed } from '@atproto/dev-env' import { BskyDaemon, DaemonConfig, PrimaryDatabase } from '../src' -import usersSeed from './seeds/users' import { countAll, excluded } from '../src/db/util' import { NotificationsDaemon } from '../src/daemon/notifications' import { diff --git a/packages/bsky/tests/db.test.ts b/packages/bsky/tests/db.test.ts index bb7562e9a92..28008f9897e 100644 --- a/packages/bsky/tests/db.test.ts +++ b/packages/bsky/tests/db.test.ts @@ -75,7 +75,7 @@ describe('db', () => { did: 'x', handle: 'x', indexedAt: 'bad-date', - takedownId: null, + takedownRef: null, }) }) diff --git a/packages/bsky/tests/did-cache.test.ts b/packages/bsky/tests/did-cache.test.ts index 8314981102e..20114779fff 100644 --- a/packages/bsky/tests/did-cache.test.ts +++ b/packages/bsky/tests/did-cache.test.ts @@ -1,5 +1,4 @@ -import { TestNetwork, SeedClient } from '@atproto/dev-env' -import userSeed from './seeds/users' +import { TestNetwork, SeedClient, usersSeed } from '@atproto/dev-env' import { IdResolver } from '@atproto/identity' import DidRedisCache from '../src/did-cache' import { wait } from '@atproto/common' @@ -25,7 +24,7 @@ describe('did cache', () => { redis = network.bsky.indexer.ctx.redis didCache = network.bsky.indexer.ctx.didCache sc = network.getSeedClient() - await userSeed(sc) + await usersSeed(sc) await network.processAll() alice = sc.dids.alice bob = sc.dids.bob diff --git a/packages/bsky/tests/feed-generation.test.ts b/packages/bsky/tests/feed-generation.test.ts index aceecec3204..0cf29ec95c0 100644 --- a/packages/bsky/tests/feed-generation.test.ts +++ b/packages/bsky/tests/feed-generation.test.ts @@ -5,6 +5,7 @@ import { TestFeedGen, SeedClient, RecordRef, + basicSeed, } from '@atproto/dev-env' import { Handler as SkeletonHandler } from '../src/lexicon/types/app/bsky/feed/getFeedSkeleton' import { GeneratorView } from '@atproto/api/src/client/types/app/bsky/feed/defs' @@ -14,7 +15,6 @@ import { FeedViewPost, SkeletonFeedPost, } from '../src/lexicon/types/app/bsky/feed/defs' -import basicSeed from './seeds/basic' import { forSnapshot, paginateAll } from './_util' import { AuthRequiredError } from '@atproto/xrpc-server' import assert from 'assert' @@ -157,16 +157,17 @@ describe('feed generation', () => { sc.getHeaders(alice), ) await network.processAll() - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventTakedown' }, subject: { $type: 'com.atproto.repo.strongRef', uri: prime.uri, cid: prime.cid, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: true, + ref: 'test', + }, }, { encoding: 'application/json', diff --git a/packages/bsky/tests/handle-invalidation.test.ts b/packages/bsky/tests/handle-invalidation.test.ts index cee9cfb61df..70ac7c29a09 100644 --- a/packages/bsky/tests/handle-invalidation.test.ts +++ b/packages/bsky/tests/handle-invalidation.test.ts @@ -1,7 +1,6 @@ import { DAY } from '@atproto/common' -import { TestNetwork, SeedClient } from '@atproto/dev-env' +import { TestNetwork, SeedClient, usersSeed } from '@atproto/dev-env' import { AtpAgent } from '@atproto/api' -import userSeed from './seeds/users' describe('handle invalidation', () => { let network: TestNetwork @@ -20,7 +19,7 @@ describe('handle invalidation', () => { agent = network.bsky.getClient() pdsAgent = network.pds.getClient() sc = network.getSeedClient() - await userSeed(sc) + await usersSeed(sc) await network.processAll() alice = sc.dids.alice diff --git a/packages/bsky/tests/image/server.test.ts b/packages/bsky/tests/image/server.test.ts index 3bce638ce45..ee4d668945d 100644 --- a/packages/bsky/tests/image/server.test.ts +++ b/packages/bsky/tests/image/server.test.ts @@ -1,9 +1,8 @@ import axios, { AxiosInstance } from 'axios' import { CID } from 'multiformats/cid' import { cidForCbor } from '@atproto/common' -import { TestNetwork } from '@atproto/dev-env' +import { TestNetwork, basicSeed } from '@atproto/dev-env' import { getInfo } from '../../src/image/sharp' -import basicSeed from '../seeds/basic' import { ImageUriBuilder } from '../../src/image/uri' describe('image processing server', () => { diff --git a/packages/bsky/tests/image/sharp.test.ts b/packages/bsky/tests/image/sharp.test.ts index 17b3b7f3964..2296b0fdbeb 100644 --- a/packages/bsky/tests/image/sharp.test.ts +++ b/packages/bsky/tests/image/sharp.test.ts @@ -178,7 +178,7 @@ describe('sharp image processor', () => { }) async function processFixture(fixture: string, options: Options) { - const image = createReadStream(`tests/sample-img/${fixture}`) + const image = createReadStream(`../dev-env/src/seed/img/${fixture}`) const resized = await resize(image, options) return await getInfo(resized) } diff --git a/packages/bsky/tests/indexing.test.ts b/packages/bsky/tests/indexing.test.ts index f874a084567..3a5a12b7ac6 100644 --- a/packages/bsky/tests/indexing.test.ts +++ b/packages/bsky/tests/indexing.test.ts @@ -11,10 +11,8 @@ import AtpAgent, { AppBskyFeedRepost, AppBskyGraphFollow, } from '@atproto/api' -import { TestNetwork, SeedClient } from '@atproto/dev-env' +import { TestNetwork, SeedClient, usersSeed, basicSeed } from '@atproto/dev-env' import { forSnapshot } from './_util' -import usersSeed from './seeds/users' -import basicSeed from './seeds/basic' import { ids } from '../src/lexicon/lexicons' import { Database } from '../src/db' diff --git a/packages/bsky/tests/notification-server.test.ts b/packages/bsky/tests/notification-server.test.ts index 6f9c8b00224..11b9f2395e8 100644 --- a/packages/bsky/tests/notification-server.test.ts +++ b/packages/bsky/tests/notification-server.test.ts @@ -1,6 +1,5 @@ import AtpAgent, { AtUri } from '@atproto/api' -import { TestNetwork, SeedClient } from '@atproto/dev-env' -import basicSeed from './seeds/basic' +import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' import { NotificationServer } from '../src/notifications' import { Database } from '../src' diff --git a/packages/bsky/tests/pipeline/backpressure.test.ts b/packages/bsky/tests/pipeline/backpressure.test.ts index 583d749100e..87e01b8cc89 100644 --- a/packages/bsky/tests/pipeline/backpressure.test.ts +++ b/packages/bsky/tests/pipeline/backpressure.test.ts @@ -6,8 +6,8 @@ import { getIngester, processAll, SeedClient, + basicSeed, } from '@atproto/dev-env' -import basicSeed from '../seeds/basic' import { BskyIngester } from '../../src' const TEST_NAME = 'pipeline_backpressure' diff --git a/packages/bsky/tests/pipeline/reingest.test.ts b/packages/bsky/tests/pipeline/reingest.test.ts index 3c860bcf680..8d90f9fea8f 100644 --- a/packages/bsky/tests/pipeline/reingest.test.ts +++ b/packages/bsky/tests/pipeline/reingest.test.ts @@ -3,8 +3,8 @@ import { SeedClient, getIngester, ingestAll, + basicSeed, } from '@atproto/dev-env' -import basicSeed from '../seeds/basic' import { BskyIngester } from '../../src' const TEST_NAME = 'pipeline_reingest' diff --git a/packages/bsky/tests/pipeline/repartition.test.ts b/packages/bsky/tests/pipeline/repartition.test.ts index f228b954fb6..2c7470fc06d 100644 --- a/packages/bsky/tests/pipeline/repartition.test.ts +++ b/packages/bsky/tests/pipeline/repartition.test.ts @@ -6,8 +6,8 @@ import { getIngester, ingestAll, processAll, + usersSeed, } from '@atproto/dev-env' -import usersSeed from '../seeds/users' import { BskyIngester } from '../../src' import { countAll } from '../../src/db/util' diff --git a/packages/bsky/tests/reprocessing.test.ts b/packages/bsky/tests/reprocessing.test.ts index 046bc58076b..fd9199379c7 100644 --- a/packages/bsky/tests/reprocessing.test.ts +++ b/packages/bsky/tests/reprocessing.test.ts @@ -1,7 +1,6 @@ import axios from 'axios' import { AtUri } from '@atproto/syntax' -import { TestNetwork, SeedClient } from '@atproto/dev-env' -import basicSeed from './seeds/basic' +import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' import { Database } from '../src/db' describe('reprocessing', () => { diff --git a/packages/bsky/tests/server.test.ts b/packages/bsky/tests/server.test.ts index 3f54b2a37bd..157b352136f 100644 --- a/packages/bsky/tests/server.test.ts +++ b/packages/bsky/tests/server.test.ts @@ -1,10 +1,9 @@ import { AddressInfo } from 'net' import express from 'express' import axios, { AxiosError } from 'axios' -import { TestNetwork } from '@atproto/dev-env' +import { TestNetwork, basicSeed } from '@atproto/dev-env' import { handler as errorHandler } from '../src/error' import { Database } from '../src' -import basicSeed from './seeds/basic' describe('server', () => { let network: TestNetwork diff --git a/packages/bsky/tests/subscription/repo.test.ts b/packages/bsky/tests/subscription/repo.test.ts index 1c83e4c0cca..fe910c85603 100644 --- a/packages/bsky/tests/subscription/repo.test.ts +++ b/packages/bsky/tests/subscription/repo.test.ts @@ -1,5 +1,5 @@ import AtpAgent from '@atproto/api' -import { TestNetwork, SeedClient } from '@atproto/dev-env' +import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' import { CommitData } from '@atproto/repo' import { PreparedWrite } from '@atproto/pds/src/repo' import * as sequencer from '@atproto/pds/src/sequencer' @@ -8,7 +8,6 @@ import { DatabaseSchemaType } from '../../src/db/database-schema' import { ids } from '../../src/lexicon/lexicons' import { forSnapshot } from '../_util' import { AppContext, Database } from '../../src' -import basicSeed from '../seeds/basic' describe('sync', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/__snapshots__/author-feed.test.ts.snap b/packages/bsky/tests/views/__snapshots__/author-feed.test.ts.snap index 9d1d41bd3db..37478713bd9 100644 --- a/packages/bsky/tests/views/__snapshots__/author-feed.test.ts.snap +++ b/packages/bsky/tests/views/__snapshots__/author-feed.test.ts.snap @@ -77,7 +77,7 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(3)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(3)/cids(5)@jpeg", }, @@ -89,7 +89,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(3)", "val": "test-label", }, @@ -97,7 +97,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(3)", "val": "test-label-2", }, @@ -110,7 +110,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -221,7 +221,7 @@ Array [ "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "did": "user(4)", + "did": "user(5)", "handle": "dan.test", "labels": Array [], "viewer": Object { @@ -237,7 +237,7 @@ Array [ "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "did": "user(5)", + "did": "user(6)", "handle": "carol.test", "labels": Array [], "viewer": Object { @@ -260,7 +260,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -271,7 +271,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -332,7 +332,7 @@ Array [ "cid": "cids(6)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(6)", "val": "test-label", }, @@ -486,7 +486,7 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(1)/cids(2)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(1)/cids(2)@jpeg", }, @@ -498,7 +498,7 @@ Array [ "cid": "cids(0)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(2)", "uri": "record(0)", "val": "test-label", }, @@ -506,7 +506,7 @@ Array [ "cid": "cids(0)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(2)", "uri": "record(0)", "val": "test-label-2", }, @@ -519,7 +519,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -552,8 +552,8 @@ Array [ "parent": Object { "$type": "app.bsky.feed.defs#postView", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(3)/cids(1)@jpeg", - "did": "user(2)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(4)/cids(1)@jpeg", + "did": "user(3)", "displayName": "ali", "handle": "alice.test", "labels": Array [ @@ -561,7 +561,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "user(2)", + "src": "user(3)", "uri": "record(4)", "val": "self-label-a", }, @@ -569,7 +569,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "user(2)", + "src": "user(3)", "uri": "record(4)", "val": "self-label-b", }, @@ -600,8 +600,8 @@ Array [ "root": Object { "$type": "app.bsky.feed.defs#postView", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(3)/cids(1)@jpeg", - "did": "user(2)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(4)/cids(1)@jpeg", + "did": "user(3)", "displayName": "ali", "handle": "alice.test", "labels": Array [ @@ -609,7 +609,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "user(2)", + "src": "user(3)", "uri": "record(4)", "val": "self-label-a", }, @@ -617,7 +617,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "user(2)", + "src": "user(3)", "uri": "record(4)", "val": "self-label-b", }, @@ -745,12 +745,12 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(2)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(2)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(3)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(3)@jpeg", }, @@ -800,7 +800,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -811,7 +811,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1036,12 +1036,12 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(2)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(2)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(3)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(3)@jpeg", }, @@ -1091,7 +1091,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1102,7 +1102,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1224,7 +1224,7 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(4)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(4)/cids(5)@jpeg", }, @@ -1236,7 +1236,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(4)", "val": "test-label", }, @@ -1244,7 +1244,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(4)", "val": "test-label-2", }, @@ -1257,7 +1257,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1415,7 +1415,7 @@ Array [ "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "did": "user(5)", + "did": "user(6)", "handle": "carol.test", "labels": Array [], "viewer": Object { @@ -1431,14 +1431,14 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(5)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(5)@jpeg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(7)/cids(5)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(7)/cids(5)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(8)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(8)@jpeg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(7)/cids(8)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(7)/cids(8)@jpeg", }, ], }, @@ -1486,7 +1486,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1497,7 +1497,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1662,7 +1662,7 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(3)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(3)/cids(5)@jpeg", }, @@ -1674,7 +1674,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(5)", "val": "test-label", }, @@ -1682,7 +1682,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(5)", "val": "test-label-2", }, @@ -1695,7 +1695,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1812,7 +1812,7 @@ Array [ "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "did": "user(4)", + "did": "user(5)", "handle": "dan.test", "labels": Array [], "viewer": Object { @@ -1827,7 +1827,7 @@ Array [ "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "did": "user(5)", + "did": "user(6)", "handle": "carol.test", "labels": Array [], "viewer": Object { @@ -1848,7 +1848,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1859,7 +1859,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1920,7 +1920,7 @@ Array [ "cid": "cids(6)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(8)", "val": "test-label", }, diff --git a/packages/bsky/tests/views/__snapshots__/block-lists.test.ts.snap b/packages/bsky/tests/views/__snapshots__/block-lists.test.ts.snap index 7f0989a5975..a3cfb905dc9 100644 --- a/packages/bsky/tests/views/__snapshots__/block-lists.test.ts.snap +++ b/packages/bsky/tests/views/__snapshots__/block-lists.test.ts.snap @@ -103,7 +103,7 @@ Object { "cid": "cids(0)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(0)", "val": "test-label", }, diff --git a/packages/bsky/tests/views/__snapshots__/blocks.test.ts.snap b/packages/bsky/tests/views/__snapshots__/blocks.test.ts.snap index 2a27fcf4955..d5ecf9b2c7e 100644 --- a/packages/bsky/tests/views/__snapshots__/blocks.test.ts.snap +++ b/packages/bsky/tests/views/__snapshots__/blocks.test.ts.snap @@ -103,7 +103,7 @@ Object { "cid": "cids(0)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(0)", "val": "test-label", }, @@ -289,7 +289,7 @@ Object { "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(4)/cids(4)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(4)/cids(4)@jpeg", }, @@ -301,7 +301,7 @@ Object { "cid": "cids(3)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(7)", "val": "test-label", }, @@ -309,7 +309,7 @@ Object { "cid": "cids(3)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(7)", "val": "test-label-2", }, @@ -322,7 +322,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", diff --git a/packages/bsky/tests/views/__snapshots__/list-feed.test.ts.snap b/packages/bsky/tests/views/__snapshots__/list-feed.test.ts.snap index d6712c89c56..790cc5db4e6 100644 --- a/packages/bsky/tests/views/__snapshots__/list-feed.test.ts.snap +++ b/packages/bsky/tests/views/__snapshots__/list-feed.test.ts.snap @@ -78,7 +78,7 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(3)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(3)/cids(5)@jpeg", }, @@ -90,7 +90,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(5)", "val": "test-label", }, @@ -98,7 +98,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(5)", "val": "test-label-2", }, @@ -111,7 +111,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -209,7 +209,7 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(3)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(3)/cids(5)@jpeg", }, @@ -221,7 +221,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(5)", "val": "test-label", }, @@ -229,7 +229,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(5)", "val": "test-label-2", }, @@ -242,7 +242,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -408,7 +408,7 @@ Array [ "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "did": "user(4)", + "did": "user(5)", "handle": "dan.test", "labels": Array [], "viewer": Object { @@ -423,7 +423,7 @@ Array [ "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "did": "user(5)", + "did": "user(6)", "handle": "carol.test", "labels": Array [], "viewer": Object { @@ -444,7 +444,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -455,7 +455,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -516,7 +516,7 @@ Array [ "cid": "cids(6)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(8)", "val": "test-label", }, diff --git a/packages/bsky/tests/views/__snapshots__/mute-lists.test.ts.snap b/packages/bsky/tests/views/__snapshots__/mute-lists.test.ts.snap index d4b11f0d235..8b46475eafe 100644 --- a/packages/bsky/tests/views/__snapshots__/mute-lists.test.ts.snap +++ b/packages/bsky/tests/views/__snapshots__/mute-lists.test.ts.snap @@ -228,7 +228,7 @@ Object { "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(4)/cids(6)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(4)/cids(6)@jpeg", }, @@ -240,7 +240,7 @@ Object { "cid": "cids(5)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(9)", "val": "test-label", }, @@ -248,7 +248,7 @@ Object { "cid": "cids(5)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(9)", "val": "test-label-2", }, @@ -261,7 +261,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", diff --git a/packages/bsky/tests/views/__snapshots__/mutes.test.ts.snap b/packages/bsky/tests/views/__snapshots__/mutes.test.ts.snap index 0e1c14c2696..655d7b62cb6 100644 --- a/packages/bsky/tests/views/__snapshots__/mutes.test.ts.snap +++ b/packages/bsky/tests/views/__snapshots__/mutes.test.ts.snap @@ -205,7 +205,7 @@ Object { "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(4)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(4)/cids(5)@jpeg", }, @@ -217,7 +217,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(5)", "val": "test-label", }, @@ -225,7 +225,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(5)", "val": "test-label-2", }, @@ -238,7 +238,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", diff --git a/packages/bsky/tests/views/__snapshots__/notifications.test.ts.snap b/packages/bsky/tests/views/__snapshots__/notifications.test.ts.snap index bce3d4e5139..e2ac2d587c0 100644 --- a/packages/bsky/tests/views/__snapshots__/notifications.test.ts.snap +++ b/packages/bsky/tests/views/__snapshots__/notifications.test.ts.snap @@ -250,7 +250,7 @@ Array [ "cid": "cids(12)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(14)", "val": "test-label", }, @@ -258,7 +258,7 @@ Array [ "cid": "cids(12)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(14)", "val": "test-label-2", }, @@ -272,7 +272,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -694,7 +694,7 @@ Array [ "cid": "cids(15)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(17)", "val": "test-label", }, @@ -702,7 +702,7 @@ Array [ "cid": "cids(15)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(17)", "val": "test-label-2", }, @@ -716,7 +716,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -921,7 +921,7 @@ Array [ "cid": "cids(5)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(4)", "val": "test-label", }, diff --git a/packages/bsky/tests/views/__snapshots__/posts.test.ts.snap b/packages/bsky/tests/views/__snapshots__/posts.test.ts.snap index 3b14a184dc1..b1abb293f8b 100644 --- a/packages/bsky/tests/views/__snapshots__/posts.test.ts.snap +++ b/packages/bsky/tests/views/__snapshots__/posts.test.ts.snap @@ -156,12 +156,12 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(6)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(6)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(7)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(7)@jpeg", }, @@ -212,7 +212,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -223,7 +223,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -286,12 +286,12 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(6)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(6)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(7)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(7)@jpeg", }, @@ -342,7 +342,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -353,7 +353,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", diff --git a/packages/bsky/tests/views/__snapshots__/thread.test.ts.snap b/packages/bsky/tests/views/__snapshots__/thread.test.ts.snap index fb0fd6a3224..dd71dc9010d 100644 --- a/packages/bsky/tests/views/__snapshots__/thread.test.ts.snap +++ b/packages/bsky/tests/views/__snapshots__/thread.test.ts.snap @@ -73,7 +73,7 @@ Object { "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(3)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(3)/cids(5)@jpeg", }, @@ -85,7 +85,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(5)", "val": "test-label", }, @@ -93,7 +93,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(5)", "val": "test-label-2", }, @@ -106,7 +106,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -307,7 +307,7 @@ Object { "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(4)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(4)/cids(5)@jpeg", }, @@ -319,7 +319,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(7)", "val": "test-label", }, @@ -327,7 +327,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(7)", "val": "test-label-2", }, @@ -340,7 +340,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -545,7 +545,7 @@ Object { "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(4)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(4)/cids(5)@jpeg", }, @@ -557,7 +557,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(7)", "val": "test-label", }, @@ -565,7 +565,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(7)", "val": "test-label-2", }, @@ -578,7 +578,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1092,7 +1092,7 @@ Object { "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(3)/cids(4)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(3)/cids(4)@jpeg", }, @@ -1104,7 +1104,7 @@ Object { "cid": "cids(3)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(5)", "val": "test-label", }, @@ -1112,7 +1112,7 @@ Object { "cid": "cids(3)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(5)", "val": "test-label-2", }, @@ -1125,7 +1125,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1292,7 +1292,7 @@ Object { "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(3)/cids(4)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(3)/cids(4)@jpeg", }, @@ -1304,7 +1304,7 @@ Object { "cid": "cids(3)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(5)", "val": "test-label", }, @@ -1312,7 +1312,7 @@ Object { "cid": "cids(3)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(5)", "val": "test-label-2", }, @@ -1325,7 +1325,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", diff --git a/packages/bsky/tests/views/__snapshots__/timeline.test.ts.snap b/packages/bsky/tests/views/__snapshots__/timeline.test.ts.snap index b5863382fef..0817313a331 100644 --- a/packages/bsky/tests/views/__snapshots__/timeline.test.ts.snap +++ b/packages/bsky/tests/views/__snapshots__/timeline.test.ts.snap @@ -278,7 +278,7 @@ Array [ "cid": "cids(5)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(5)", "val": "test-label", }, @@ -853,7 +853,7 @@ Array [ "cid": "cids(6)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(8)", "val": "test-label", }, @@ -880,8 +880,8 @@ Array [ Object { "post": Object { "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(1)@jpeg", - "did": "user(4)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(6)/cids(1)@jpeg", + "did": "user(5)", "displayName": "bobby", "handle": "bob.test", "labels": Array [], @@ -999,14 +999,14 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(11)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(11)@jpeg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(7)/cids(11)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(7)/cids(11)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(12)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(12)@jpeg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(7)/cids(12)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(7)/cids(12)@jpeg", }, ], }, @@ -1014,8 +1014,8 @@ Array [ "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(1)@jpeg", - "did": "user(4)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(6)/cids(1)@jpeg", + "did": "user(5)", "displayName": "bobby", "handle": "bob.test", "labels": Array [], @@ -1034,7 +1034,7 @@ Array [ "cid": "cids(13)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(15)", "val": "kind", }, @@ -1058,7 +1058,7 @@ Array [ "cid": "cids(10)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(14)", "val": "kind", }, @@ -1073,7 +1073,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1084,7 +1084,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1116,8 +1116,8 @@ Array [ Object { "post": Object { "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(1)@jpeg", - "did": "user(4)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(6)/cids(1)@jpeg", + "did": "user(5)", "displayName": "bobby", "handle": "bob.test", "labels": Array [], @@ -1135,7 +1135,7 @@ Array [ "cid": "cids(13)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(15)", "val": "kind", }, @@ -1312,7 +1312,7 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(4)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(4)/cids(5)@jpeg", }, @@ -1324,7 +1324,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(3)", "val": "test-label", }, @@ -1332,7 +1332,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(3)", "val": "test-label-2", }, @@ -1345,7 +1345,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1497,7 +1497,7 @@ Array [ "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "did": "user(5)", + "did": "user(6)", "handle": "carol.test", "labels": Array [], "viewer": Object { @@ -1515,14 +1515,14 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(5)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(5)@jpeg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(7)/cids(5)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(7)/cids(5)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(8)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(8)@jpeg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(7)/cids(8)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(7)/cids(8)@jpeg", }, ], }, @@ -1549,7 +1549,7 @@ Array [ "cid": "cids(9)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(11)", "val": "kind", }, @@ -1574,7 +1574,7 @@ Array [ "cid": "cids(7)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(8)", "val": "kind", }, @@ -1589,7 +1589,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1600,7 +1600,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1660,7 +1660,7 @@ Array [ "reason": Object { "$type": "app.bsky.feed.defs#reasonRepost", "by": Object { - "did": "user(5)", + "did": "user(6)", "handle": "carol.test", "labels": Array [], "viewer": Object { @@ -1748,7 +1748,7 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(4)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(4)/cids(5)@jpeg", }, @@ -1760,7 +1760,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(3)", "val": "test-label", }, @@ -1768,7 +1768,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(3)", "val": "test-label-2", }, @@ -1781,7 +1781,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1859,7 +1859,7 @@ Array [ Object { "post": Object { "author": Object { - "did": "user(5)", + "did": "user(6)", "handle": "carol.test", "labels": Array [], "viewer": Object { @@ -2004,7 +2004,7 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(4)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(4)/cids(5)@jpeg", }, @@ -2016,7 +2016,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(3)", "val": "test-label", }, @@ -2024,7 +2024,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(3)", "val": "test-label-2", }, @@ -2037,7 +2037,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -2209,7 +2209,7 @@ Array [ "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "did": "user(5)", + "did": "user(6)", "handle": "carol.test", "labels": Array [], "viewer": Object { @@ -2226,7 +2226,7 @@ Array [ "cid": "cids(7)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(8)", "val": "kind", }, @@ -2241,7 +2241,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -2252,7 +2252,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -2313,7 +2313,7 @@ Array [ "cid": "cids(11)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(13)", "val": "test-label", }, @@ -2430,7 +2430,7 @@ Array [ "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "did": "user(5)", + "did": "user(6)", "handle": "carol.test", "labels": Array [], "viewer": Object { @@ -2448,14 +2448,14 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(5)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(5)@jpeg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(7)/cids(5)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(7)/cids(5)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(8)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(8)@jpeg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(7)/cids(8)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(7)/cids(8)@jpeg", }, ], }, @@ -2482,7 +2482,7 @@ Array [ "cid": "cids(9)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(11)", "val": "kind", }, @@ -2507,7 +2507,7 @@ Array [ "cid": "cids(7)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(8)", "val": "kind", }, @@ -2522,7 +2522,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -2533,7 +2533,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -2621,7 +2621,7 @@ Array [ Object { "post": Object { "author": Object { - "did": "user(5)", + "did": "user(6)", "handle": "carol.test", "labels": Array [], "viewer": Object { @@ -2638,14 +2638,14 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(5)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(5)@jpeg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(7)/cids(5)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(7)/cids(5)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(8)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(8)@jpeg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(7)/cids(8)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(7)/cids(8)@jpeg", }, ], }, @@ -2673,7 +2673,7 @@ Array [ "cid": "cids(9)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(11)", "val": "kind", }, @@ -2697,7 +2697,7 @@ Array [ "cid": "cids(7)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(8)", "val": "kind", }, @@ -2712,7 +2712,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -2723,7 +2723,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -2774,7 +2774,7 @@ Array [ "cid": "cids(9)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(11)", "val": "kind", }, @@ -2897,14 +2897,14 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(2)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(2)@jpeg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(2)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(2)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(3)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(3)@jpeg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(3)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(3)@jpeg", }, ], }, @@ -2912,8 +2912,8 @@ Array [ "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(4)/cids(5)@jpeg", - "did": "user(3)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(5)@jpeg", + "did": "user(4)", "displayName": "bobby", "handle": "bob.test", "labels": Array [], @@ -2929,7 +2929,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(4)", "val": "kind", }, @@ -2954,7 +2954,7 @@ Array [ "cid": "cids(1)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(2)", "val": "kind", }, @@ -2969,7 +2969,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -2980,7 +2980,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -3055,7 +3055,7 @@ Array [ Object { "post": Object { "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(6)/cids(5)@jpeg", + "avatar": "https://bsky.public.url/img/avatar/plain/user(7)/cids(5)@jpeg", "did": "user(1)", "displayName": "ali", "handle": "alice.test", @@ -3112,8 +3112,8 @@ Array [ "parent": Object { "$type": "app.bsky.feed.defs#postView", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(4)/cids(5)@jpeg", - "did": "user(3)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(5)@jpeg", + "did": "user(4)", "displayName": "bobby", "handle": "bob.test", "labels": Array [], @@ -3127,9 +3127,9 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(4)/cids(2)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(4)/cids(2)@jpeg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(2)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(2)@jpeg", }, ], }, @@ -3139,7 +3139,7 @@ Array [ "cid": "cids(9)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(10)", "val": "test-label", }, @@ -3147,7 +3147,7 @@ Array [ "cid": "cids(9)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(10)", "val": "test-label-2", }, @@ -3160,7 +3160,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -3192,7 +3192,7 @@ Array [ "root": Object { "$type": "app.bsky.feed.defs#postView", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(6)/cids(5)@jpeg", + "avatar": "https://bsky.public.url/img/avatar/plain/user(7)/cids(5)@jpeg", "did": "user(1)", "displayName": "ali", "handle": "alice.test", @@ -3279,7 +3279,7 @@ Array [ "parent": Object { "$type": "app.bsky.feed.defs#postView", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(6)/cids(5)@jpeg", + "avatar": "https://bsky.public.url/img/avatar/plain/user(7)/cids(5)@jpeg", "did": "user(1)", "displayName": "ali", "handle": "alice.test", @@ -3327,7 +3327,7 @@ Array [ "root": Object { "$type": "app.bsky.feed.defs#postView", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(6)/cids(5)@jpeg", + "avatar": "https://bsky.public.url/img/avatar/plain/user(7)/cids(5)@jpeg", "did": "user(1)", "displayName": "ali", "handle": "alice.test", @@ -3377,8 +3377,8 @@ Array [ Object { "post": Object { "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(4)/cids(5)@jpeg", - "did": "user(3)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(5)@jpeg", + "did": "user(4)", "displayName": "bobby", "handle": "bob.test", "labels": Array [], @@ -3392,9 +3392,9 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(4)/cids(2)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(4)/cids(2)@jpeg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(2)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(2)@jpeg", }, ], }, @@ -3404,7 +3404,7 @@ Array [ "cid": "cids(9)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(10)", "val": "test-label", }, @@ -3412,7 +3412,7 @@ Array [ "cid": "cids(9)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(10)", "val": "test-label-2", }, @@ -3425,7 +3425,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -3458,7 +3458,7 @@ Array [ "parent": Object { "$type": "app.bsky.feed.defs#postView", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(6)/cids(5)@jpeg", + "avatar": "https://bsky.public.url/img/avatar/plain/user(7)/cids(5)@jpeg", "did": "user(1)", "displayName": "ali", "handle": "alice.test", @@ -3506,7 +3506,7 @@ Array [ "root": Object { "$type": "app.bsky.feed.defs#postView", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(6)/cids(5)@jpeg", + "avatar": "https://bsky.public.url/img/avatar/plain/user(7)/cids(5)@jpeg", "did": "user(1)", "displayName": "ali", "handle": "alice.test", @@ -3556,7 +3556,7 @@ Array [ Object { "post": Object { "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(6)/cids(5)@jpeg", + "avatar": "https://bsky.public.url/img/avatar/plain/user(7)/cids(5)@jpeg", "did": "user(1)", "displayName": "ali", "handle": "alice.test", @@ -3623,7 +3623,7 @@ Array [ "cid": "cids(1)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(2)", "val": "kind", }, @@ -3638,7 +3638,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -3649,7 +3649,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -3710,7 +3710,7 @@ Array [ "cid": "cids(11)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(13)", "val": "test-label", }, @@ -3739,8 +3739,8 @@ Array [ Object { "post": Object { "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(4)/cids(5)@jpeg", - "did": "user(3)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(5)@jpeg", + "did": "user(4)", "displayName": "bobby", "handle": "bob.test", "labels": Array [], @@ -3767,7 +3767,7 @@ Array [ Object { "post": Object { "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(6)/cids(5)@jpeg", + "avatar": "https://bsky.public.url/img/avatar/plain/user(7)/cids(5)@jpeg", "did": "user(1)", "displayName": "ali", "handle": "alice.test", @@ -3832,14 +3832,14 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(2)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(2)@jpeg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(2)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(2)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(3)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(3)@jpeg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(3)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(3)@jpeg", }, ], }, @@ -3847,8 +3847,8 @@ Array [ "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(4)/cids(5)@jpeg", - "did": "user(3)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(5)@jpeg", + "did": "user(4)", "displayName": "bobby", "handle": "bob.test", "labels": Array [], @@ -3865,7 +3865,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(4)", "val": "kind", }, @@ -3889,7 +3889,7 @@ Array [ "cid": "cids(1)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(2)", "val": "kind", }, @@ -3904,7 +3904,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -3915,7 +3915,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -3947,8 +3947,8 @@ Array [ Object { "post": Object { "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(4)/cids(5)@jpeg", - "did": "user(3)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(5)@jpeg", + "did": "user(4)", "displayName": "bobby", "handle": "bob.test", "labels": Array [], @@ -3964,7 +3964,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(4)", "val": "kind", }, @@ -3988,7 +3988,7 @@ Array [ Object { "post": Object { "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(6)/cids(5)@jpeg", + "avatar": "https://bsky.public.url/img/avatar/plain/user(7)/cids(5)@jpeg", "did": "user(1)", "displayName": "ali", "handle": "alice.test", @@ -4087,14 +4087,14 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(2)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(2)@jpeg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(2)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(2)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(3)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(3)@jpeg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(3)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(3)@jpeg", }, ], }, @@ -4102,8 +4102,8 @@ Array [ "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(4)/cids(5)@jpeg", - "did": "user(3)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(5)@jpeg", + "did": "user(4)", "displayName": "bobby", "handle": "bob.test", "labels": Array [], @@ -4120,7 +4120,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(2)", "val": "kind", }, @@ -4145,7 +4145,7 @@ Array [ "cid": "cids(1)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(1)", "val": "kind", }, @@ -4160,7 +4160,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -4171,7 +4171,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -4247,7 +4247,7 @@ Array [ Object { "post": Object { "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(6)/cids(5)@jpeg", + "avatar": "https://bsky.public.url/img/avatar/plain/user(7)/cids(5)@jpeg", "did": "user(1)", "displayName": "ali", "handle": "alice.test", @@ -4304,8 +4304,8 @@ Array [ "parent": Object { "$type": "app.bsky.feed.defs#postView", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(4)/cids(5)@jpeg", - "did": "user(3)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(5)@jpeg", + "did": "user(4)", "displayName": "bobby", "handle": "bob.test", "labels": Array [], @@ -4320,9 +4320,9 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(4)/cids(2)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(4)/cids(2)@jpeg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(2)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(2)@jpeg", }, ], }, @@ -4332,7 +4332,7 @@ Array [ "cid": "cids(9)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(10)", "val": "test-label", }, @@ -4340,7 +4340,7 @@ Array [ "cid": "cids(9)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(10)", "val": "test-label-2", }, @@ -4353,7 +4353,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -4385,7 +4385,7 @@ Array [ "root": Object { "$type": "app.bsky.feed.defs#postView", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(6)/cids(5)@jpeg", + "avatar": "https://bsky.public.url/img/avatar/plain/user(7)/cids(5)@jpeg", "did": "user(1)", "displayName": "ali", "handle": "alice.test", @@ -4471,7 +4471,7 @@ Array [ "parent": Object { "$type": "app.bsky.feed.defs#postView", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(6)/cids(5)@jpeg", + "avatar": "https://bsky.public.url/img/avatar/plain/user(7)/cids(5)@jpeg", "did": "user(1)", "displayName": "ali", "handle": "alice.test", @@ -4519,7 +4519,7 @@ Array [ "root": Object { "$type": "app.bsky.feed.defs#postView", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(6)/cids(5)@jpeg", + "avatar": "https://bsky.public.url/img/avatar/plain/user(7)/cids(5)@jpeg", "did": "user(1)", "displayName": "ali", "handle": "alice.test", @@ -4569,7 +4569,7 @@ Array [ Object { "post": Object { "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(6)/cids(5)@jpeg", + "avatar": "https://bsky.public.url/img/avatar/plain/user(7)/cids(5)@jpeg", "did": "user(1)", "displayName": "ali", "handle": "alice.test", @@ -4634,7 +4634,7 @@ Array [ "cid": "cids(1)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(1)", "val": "kind", }, @@ -4649,7 +4649,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -4660,7 +4660,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -4721,7 +4721,7 @@ Array [ "cid": "cids(11)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(13)", "val": "test-label", }, @@ -4750,7 +4750,7 @@ Array [ Object { "post": Object { "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(6)/cids(5)@jpeg", + "avatar": "https://bsky.public.url/img/avatar/plain/user(7)/cids(5)@jpeg", "did": "user(1)", "displayName": "ali", "handle": "alice.test", @@ -4814,14 +4814,14 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(2)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(2)@jpeg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(2)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(2)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(3)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(3)@jpeg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(3)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(3)@jpeg", }, ], }, @@ -4829,8 +4829,8 @@ Array [ "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(4)/cids(5)@jpeg", - "did": "user(3)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(5)@jpeg", + "did": "user(4)", "displayName": "bobby", "handle": "bob.test", "labels": Array [], @@ -4848,7 +4848,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(2)", "val": "kind", }, @@ -4872,7 +4872,7 @@ Array [ "cid": "cids(1)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(1)", "val": "kind", }, @@ -4887,7 +4887,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -4898,7 +4898,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -4928,7 +4928,7 @@ Array [ Object { "post": Object { "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(6)/cids(5)@jpeg", + "avatar": "https://bsky.public.url/img/avatar/plain/user(7)/cids(5)@jpeg", "did": "user(1)", "displayName": "ali", "handle": "alice.test", @@ -5084,7 +5084,7 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(4)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(4)/cids(5)@jpeg", }, @@ -5096,7 +5096,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(4)", "val": "test-label", }, @@ -5104,7 +5104,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(4)", "val": "test-label-2", }, @@ -5117,7 +5117,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -5277,7 +5277,7 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(4)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(4)/cids(5)@jpeg", }, @@ -5289,7 +5289,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(4)", "val": "test-label", }, @@ -5297,7 +5297,7 @@ Array [ "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(4)", "val": "test-label-2", }, @@ -5310,7 +5310,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -5484,7 +5484,7 @@ Array [ "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "did": "user(5)", + "did": "user(6)", "handle": "carol.test", "labels": Array [], "viewer": Object { @@ -5500,14 +5500,14 @@ Array [ "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(5)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(5)@jpeg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(7)/cids(5)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(7)/cids(5)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(9)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(9)@jpeg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(7)/cids(9)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(7)/cids(9)@jpeg", }, ], }, @@ -5533,7 +5533,7 @@ Array [ "cid": "cids(10)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(12)", "val": "kind", }, @@ -5558,7 +5558,7 @@ Array [ "cid": "cids(8)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(11)", "val": "kind", }, @@ -5573,7 +5573,7 @@ Array [ "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -5584,7 +5584,7 @@ Array [ }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -5689,7 +5689,7 @@ Array [ "cid": "cids(10)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(5)", "uri": "record(12)", "val": "kind", }, diff --git a/packages/bsky/tests/views/actor-likes.test.ts b/packages/bsky/tests/views/actor-likes.test.ts index 642b37e6446..9d8bf1b87b5 100644 --- a/packages/bsky/tests/views/actor-likes.test.ts +++ b/packages/bsky/tests/views/actor-likes.test.ts @@ -1,6 +1,5 @@ import AtpAgent, { AtUri } from '@atproto/api' -import { TestNetwork, SeedClient } from '@atproto/dev-env' -import basicSeed from '../seeds/basic' +import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' describe('bsky actor likes feed views', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/actor-search.test.ts b/packages/bsky/tests/views/actor-search.test.ts index 70f8862f7d7..c0e862de249 100644 --- a/packages/bsky/tests/views/actor-search.test.ts +++ b/packages/bsky/tests/views/actor-search.test.ts @@ -1,8 +1,7 @@ import AtpAgent from '@atproto/api' import { wait } from '@atproto/common' -import { TestNetwork, SeedClient } from '@atproto/dev-env' +import { TestNetwork, SeedClient, usersBulkSeed } from '@atproto/dev-env' import { forSnapshot, paginateAll, stripViewer } from '../_util' -import usersBulkSeed from '../seeds/users-bulk' // @NOTE skipped to help with CI failures // The search code is not used in production & we should switch it out for tests on the search proxy interface @@ -239,15 +238,16 @@ describe.skip('pds actor search views', () => { }) it('search blocks by actor takedown', async () => { - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventTakedown' }, subject: { $type: 'com.atproto.admin.defs#repoRef', did: sc.dids['cara-wiegand69.test'], }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: true, + ref: 'test', + }, }, { encoding: 'application/json', diff --git a/packages/bsky/tests/views/admin/repo-search.test.ts b/packages/bsky/tests/views/admin/repo-search.test.ts deleted file mode 100644 index 6d9e8468dc1..00000000000 --- a/packages/bsky/tests/views/admin/repo-search.test.ts +++ /dev/null @@ -1,133 +0,0 @@ -import AtpAgent, { ComAtprotoAdminSearchRepos } from '@atproto/api' -import { wait } from '@atproto/common' -import { TestNetwork, SeedClient } from '@atproto/dev-env' -import usersBulkSeed from '../../seeds/users-bulk' - -describe('pds admin repo search views', () => { - let network: TestNetwork - let agent: AtpAgent - let sc: SeedClient - let headers: { [s: string]: string } - // In results that don't have a related profile record, we will only have handle but not a name - // And names are usually capitalized on each word so the comparison is done on lowercase version - const handleOrNameStartsWith = - (term: string) => (handleOrName: (string | undefined)[]) => - !!handleOrName.find((str) => - str?.toLowerCase().includes(term.toLowerCase()), - ) - const resultToHandlesAndNames = ( - result: ComAtprotoAdminSearchRepos.Response, - ) => - result.data.repos.map((u: any) => [ - u.handle, - (u.relatedRecords[0] as Record)?.displayName, - ]) - - beforeAll(async () => { - network = await TestNetwork.create({ - dbPostgresSchema: 'bsky_views_repo_search', - }) - agent = network.bsky.getClient() - sc = network.getSeedClient() - - await wait(100) // allow pending sub to be established - await network.bsky.ingester.sub.destroy() - await usersBulkSeed(sc) - - // Skip did/handle resolution for expediency - const db = network.bsky.ctx.db.getPrimary() - const now = new Date().toISOString() - await db.db - .insertInto('actor') - .values( - Object.entries(sc.dids).map(([handle, did]) => ({ - did, - handle, - indexedAt: now, - })), - ) - .onConflict((oc) => oc.doNothing()) - .execute() - - // Process remaining profiles - network.bsky.ingester.sub.resume() - await network.processAll(50000) - headers = await network.adminHeaders({}) - }) - - afterAll(async () => { - await network.close() - }) - - it('gives relevant results when searched by handle', async () => { - const term = 'car' - const result = await agent.api.com.atproto.admin.searchRepos( - { term }, - { headers }, - ) - - const shouldContain = [ - // Present despite repo takedown - // First item in the array because of direct handle match - 'cara-wiegand69.test', - 'carlos6.test', - 'aliya-hodkiewicz.test', // Carlton Abernathy IV - 'eudora-dietrich4.test', // Carol Littel - 'carolina-mcdermott77.test', - 'shane-torphy52.test', // Sadie Carter - // Last item in the array because handle and display name none match very close to the the search term - 'cayla-marquardt39.test', - ] - - const handlesAndNames = resultToHandlesAndNames(result) - const handles = handlesAndNames.map(([handle]) => handle) - // Assert that all matches are found - shouldContain.forEach((handle) => expect(handles).toContain(handle)) - // Assert that the order is correct, showing the closest match by handle first - const containsTerm = handleOrNameStartsWith(term) - expect(containsTerm(handlesAndNames[0])).toBeTruthy() - expect( - containsTerm(handlesAndNames[handlesAndNames.length - 1]), - ).toBeFalsy() - }) - - it('pagination respects matching order when searched by handle', async () => { - const term = 'car' - const resultPageOne = await agent.api.com.atproto.admin.searchRepos( - { term, limit: 4 }, - { headers }, - ) - const resultPageTwo = await agent.api.com.atproto.admin.searchRepos( - { term, limit: 4, cursor: resultPageOne.data.cursor }, - { headers }, - ) - - const handlesAndNamesPageOne = resultToHandlesAndNames(resultPageOne) - const handlesAndNamesPageTwo = resultToHandlesAndNames(resultPageTwo) - const containsTerm = handleOrNameStartsWith(term) - - // First result of first page always has matches either handle or did - expect(containsTerm(handlesAndNamesPageOne[0])).toBeTruthy() - // Since we only get 4 items per page max and know that among the test dataset - // at least 4 users have the term in handle or profile, last item in first page - // should contain the term - expect( - containsTerm(handlesAndNamesPageOne[handlesAndNamesPageOne.length - 1]), - ).toBeTruthy() - // However, the last item of second page, should not contain the term - expect( - containsTerm(handlesAndNamesPageTwo[handlesAndNamesPageTwo.length - 1]), - ).toBeFalsy() - }) - - it('gives relevant results when searched by did', async () => { - const term = sc.dids['cara-wiegand69.test'] - const res = await agent.api.com.atproto.admin.searchRepos( - { term }, - { headers }, - ) - - expect(res.data.repos.length).toEqual(1) - expect(res.data.repos[0].did).toEqual(term) - }) -}) diff --git a/packages/bsky/tests/views/author-feed.test.ts b/packages/bsky/tests/views/author-feed.test.ts index c5d863bfb92..4db9ee49028 100644 --- a/packages/bsky/tests/views/author-feed.test.ts +++ b/packages/bsky/tests/views/author-feed.test.ts @@ -1,7 +1,6 @@ import AtpAgent from '@atproto/api' -import { TestNetwork, SeedClient } from '@atproto/dev-env' +import { TestNetwork, SeedClient, authorFeedSeed } from '@atproto/dev-env' import { forSnapshot, paginateAll, stripViewerFromPost } from '../_util' -import authorFeedSeed from '../seeds/author-feed' import { isRecord } from '../../src/lexicon/types/app/bsky/feed/post' import { isView as isEmbedRecordWithMedia } from '../../src/lexicon/types/app/bsky/embed/recordWithMedia' import { isView as isImageEmbed } from '../../src/lexicon/types/app/bsky/embed/images' @@ -147,15 +146,16 @@ describe('pds author feed views', () => { expect(preBlock.feed.length).toBeGreaterThan(0) - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventTakedown' }, subject: { $type: 'com.atproto.admin.defs#repoRef', did: alice, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: true, + ref: 'test', + }, }, { encoding: 'application/json', @@ -170,15 +170,15 @@ describe('pds author feed views', () => { await expect(attempt).rejects.toThrow('Profile not found') // Cleanup - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventReverseTakedown' }, subject: { $type: 'com.atproto.admin.defs#repoRef', did: alice, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: false, + }, }, { encoding: 'application/json', @@ -197,16 +197,17 @@ describe('pds author feed views', () => { const post = preBlock.feed[0].post - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventTakedown' }, subject: { $type: 'com.atproto.repo.strongRef', uri: post.uri, cid: post.cid, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: true, + ref: 'test', + }, }, { encoding: 'application/json', @@ -223,16 +224,16 @@ describe('pds author feed views', () => { expect(postBlock.feed.map((item) => item.post.uri)).not.toContain(post.uri) // Cleanup - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventReverseTakedown' }, subject: { $type: 'com.atproto.repo.strongRef', uri: post.uri, cid: post.cid, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: false, + }, }, { encoding: 'application/json', diff --git a/packages/bsky/tests/views/block-lists.test.ts b/packages/bsky/tests/views/block-lists.test.ts index 6672d690ce1..d64927c2378 100644 --- a/packages/bsky/tests/views/block-lists.test.ts +++ b/packages/bsky/tests/views/block-lists.test.ts @@ -1,7 +1,6 @@ import AtpAgent from '@atproto/api' -import { TestNetwork, SeedClient, RecordRef } from '@atproto/dev-env' +import { TestNetwork, SeedClient, RecordRef, basicSeed } from '@atproto/dev-env' import { forSnapshot } from '../_util' -import basicSeed from '../seeds/basic' import { BlockedActorError } from '@atproto/api/src/client/types/app/bsky/feed/getAuthorFeed' import { BlockedByActorError } from '@atproto/api/src/client/types/app/bsky/feed/getAuthorFeed' @@ -50,7 +49,7 @@ describe('pds views with blocking from block lists', () => { it('creates a list with some items', async () => { const avatar = await sc.uploadFile( alice, - 'tests/sample-img/key-portrait-small.jpg', + '../dev-env/src/seed/img/key-portrait-small.jpg', 'image/jpeg', ) // alice creates block list with bob & carol that dan uses diff --git a/packages/bsky/tests/views/blocks.test.ts b/packages/bsky/tests/views/blocks.test.ts index 74079c7f7c6..2f45477c664 100644 --- a/packages/bsky/tests/views/blocks.test.ts +++ b/packages/bsky/tests/views/blocks.test.ts @@ -1,5 +1,5 @@ import assert from 'assert' -import { TestNetwork, RecordRef, SeedClient } from '@atproto/dev-env' +import { TestNetwork, RecordRef, SeedClient, basicSeed } from '@atproto/dev-env' import AtpAgent, { AtUri } from '@atproto/api' import { BlockedActorError } from '@atproto/api/src/client/types/app/bsky/feed/getAuthorFeed' import { BlockedByActorError } from '@atproto/api/src/client/types/app/bsky/feed/getAuthorFeed' @@ -9,7 +9,6 @@ import { isViewBlocked as isEmbedViewBlocked, } from '@atproto/api/src/client/types/app/bsky/embed/record' import { forSnapshot } from '../_util' -import basicSeed from '../seeds/basic' describe('pds views with blocking', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/follows.test.ts b/packages/bsky/tests/views/follows.test.ts index f290ec622d5..8367f2d1f61 100644 --- a/packages/bsky/tests/views/follows.test.ts +++ b/packages/bsky/tests/views/follows.test.ts @@ -1,7 +1,6 @@ import AtpAgent from '@atproto/api' -import { TestNetwork, SeedClient } from '@atproto/dev-env' +import { TestNetwork, SeedClient, followsSeed } from '@atproto/dev-env' import { forSnapshot, paginateAll, stripViewer } from '../_util' -import followsSeed from '../seeds/follows' describe('pds follow views', () => { let agent: AtpAgent @@ -120,15 +119,16 @@ describe('pds follow views', () => { }) it('blocks followers by actor takedown', async () => { - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventTakedown' }, subject: { $type: 'com.atproto.admin.defs#repoRef', did: sc.dids.dan, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: true, + ref: 'test', + }, }, { encoding: 'application/json', @@ -145,15 +145,15 @@ describe('pds follow views', () => { sc.dids.dan, ) - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventReverseTakedown' }, subject: { $type: 'com.atproto.admin.defs#repoRef', did: sc.dids.dan, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: false, + }, }, { encoding: 'application/json', @@ -252,15 +252,16 @@ describe('pds follow views', () => { }) it('blocks follows by actor takedown', async () => { - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventTakedown' }, subject: { $type: 'com.atproto.admin.defs#repoRef', did: sc.dids.dan, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: true, + ref: 'test', + }, }, { encoding: 'application/json', @@ -277,15 +278,15 @@ describe('pds follow views', () => { sc.dids.dan, ) - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventReverseTakedown' }, subject: { $type: 'com.atproto.admin.defs#repoRef', did: sc.dids.dan, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: false, + }, }, { encoding: 'application/json', diff --git a/packages/bsky/tests/views/likes.test.ts b/packages/bsky/tests/views/likes.test.ts index f8f9c9a7fef..dd5135357bb 100644 --- a/packages/bsky/tests/views/likes.test.ts +++ b/packages/bsky/tests/views/likes.test.ts @@ -1,6 +1,5 @@ import AtpAgent from '@atproto/api' -import { TestNetwork, SeedClient } from '@atproto/dev-env' -import likesSeed from '../seeds/likes' +import { TestNetwork, SeedClient, likesSeed } from '@atproto/dev-env' import { constantDate, forSnapshot, paginateAll, stripViewer } from '../_util' describe('pds like views', () => { diff --git a/packages/bsky/tests/views/list-feed.test.ts b/packages/bsky/tests/views/list-feed.test.ts index b8cd977922b..4951a6d6a23 100644 --- a/packages/bsky/tests/views/list-feed.test.ts +++ b/packages/bsky/tests/views/list-feed.test.ts @@ -1,7 +1,6 @@ import AtpAgent from '@atproto/api' -import { TestNetwork, SeedClient, RecordRef } from '@atproto/dev-env' +import { TestNetwork, SeedClient, RecordRef, basicSeed } from '@atproto/dev-env' import { forSnapshot, paginateAll, stripViewerFromPost } from '../_util' -import basicSeed from '../seeds/basic' describe('list feed views', () => { let network: TestNetwork @@ -112,15 +111,16 @@ describe('list feed views', () => { }) it('blocks posts by actor takedown', async () => { - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventTakedown' }, subject: { $type: 'com.atproto.admin.defs#repoRef', did: bob, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: true, + ref: 'test', + }, }, { encoding: 'application/json', @@ -135,15 +135,15 @@ describe('list feed views', () => { expect(hasBob).toBe(false) // Cleanup - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventReverseTakedown' }, subject: { $type: 'com.atproto.admin.defs#repoRef', did: bob, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: false, + }, }, { encoding: 'application/json', @@ -154,16 +154,17 @@ describe('list feed views', () => { it('blocks posts by record takedown.', async () => { const postRef = sc.replies[bob][0].ref // Post and reply parent - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventTakedown' }, subject: { $type: 'com.atproto.repo.strongRef', uri: postRef.uriStr, cid: postRef.cidStr, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: true, + ref: 'test', + }, }, { encoding: 'application/json', @@ -180,16 +181,16 @@ describe('list feed views', () => { expect(hasPost).toBe(false) // Cleanup - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventReverseTakedown' }, subject: { $type: 'com.atproto.repo.strongRef', uri: postRef.uriStr, cid: postRef.cidStr, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: false, + }, }, { encoding: 'application/json', diff --git a/packages/bsky/tests/views/mute-lists.test.ts b/packages/bsky/tests/views/mute-lists.test.ts index 07a6690f910..bd8242d3b48 100644 --- a/packages/bsky/tests/views/mute-lists.test.ts +++ b/packages/bsky/tests/views/mute-lists.test.ts @@ -1,7 +1,6 @@ import AtpAgent, { AtUri } from '@atproto/api' -import { TestNetwork, SeedClient, RecordRef } from '@atproto/dev-env' +import { TestNetwork, SeedClient, RecordRef, basicSeed } from '@atproto/dev-env' import { forSnapshot } from '../_util' -import basicSeed from '../seeds/basic' describe('bsky views with mutes from mute lists', () => { let network: TestNetwork @@ -42,7 +41,7 @@ describe('bsky views with mutes from mute lists', () => { it('creates a list with some items', async () => { const avatar = await sc.uploadFile( alice, - 'tests/sample-img/key-portrait-small.jpg', + '../dev-env/src/seed/img/key-portrait-small.jpg', 'image/jpeg', ) // alice creates mute list with bob & carol that dan uses diff --git a/packages/bsky/tests/views/mutes.test.ts b/packages/bsky/tests/views/mutes.test.ts index 6a00c427124..8e26770ef23 100644 --- a/packages/bsky/tests/views/mutes.test.ts +++ b/packages/bsky/tests/views/mutes.test.ts @@ -1,8 +1,11 @@ import AtpAgent from '@atproto/api' -import { TestNetwork, SeedClient } from '@atproto/dev-env' +import { + TestNetwork, + SeedClient, + basicSeed, + usersBulkSeed, +} from '@atproto/dev-env' import { forSnapshot, paginateAll } from '../_util' -import basicSeed from '../seeds/basic' -import usersBulkSeed from '../seeds/users-bulk' describe('mute views', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/notifications.test.ts b/packages/bsky/tests/views/notifications.test.ts index c75ee7b699e..fad620288af 100644 --- a/packages/bsky/tests/views/notifications.test.ts +++ b/packages/bsky/tests/views/notifications.test.ts @@ -1,7 +1,6 @@ import AtpAgent from '@atproto/api' -import { TestNetwork, SeedClient } from '@atproto/dev-env' +import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' import { forSnapshot, paginateAll } from '../_util' -import basicSeed from '../seeds/basic' import { Notification } from '../../src/lexicon/types/app/bsky/notification/listNotifications' describe('notification views', () => { @@ -241,16 +240,17 @@ describe('notification views', () => { const postRef2 = sc.posts[sc.dids.dan][1].ref // Mention await Promise.all( [postRef1, postRef2].map((postRef) => - agent.api.com.atproto.admin.emitModerationEvent( + agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventTakedown' }, subject: { $type: 'com.atproto.repo.strongRef', uri: postRef.uriStr, cid: postRef.cidStr, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: true, + ref: 'test', + }, }, { encoding: 'application/json', @@ -277,16 +277,16 @@ describe('notification views', () => { // Cleanup await Promise.all( [postRef1, postRef2].map((postRef) => - agent.api.com.atproto.admin.emitModerationEvent( + agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventReverseTakedown' }, subject: { $type: 'com.atproto.repo.strongRef', uri: postRef.uriStr, cid: postRef.cidStr, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: false, + }, }, { encoding: 'application/json', diff --git a/packages/bsky/tests/views/posts.test.ts b/packages/bsky/tests/views/posts.test.ts index 69bade5b91a..24b84469864 100644 --- a/packages/bsky/tests/views/posts.test.ts +++ b/packages/bsky/tests/views/posts.test.ts @@ -1,7 +1,6 @@ import AtpAgent, { AppBskyFeedPost } from '@atproto/api' -import { TestNetwork, SeedClient } from '@atproto/dev-env' +import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' import { forSnapshot, stripViewerFromPost } from '../_util' -import basicSeed from '../seeds/basic' describe('pds posts views', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/profile.test.ts b/packages/bsky/tests/views/profile.test.ts index fe3f689894b..ddd484b3b31 100644 --- a/packages/bsky/tests/views/profile.test.ts +++ b/packages/bsky/tests/views/profile.test.ts @@ -1,9 +1,8 @@ import fs from 'fs/promises' import AtpAgent from '@atproto/api' -import { TestNetwork, SeedClient } from '@atproto/dev-env' +import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' import { forSnapshot, stripViewer } from '../_util' import { ids } from '../../src/lexicon/lexicons' -import basicSeed from '../seeds/basic' describe('pds profile views', () => { let network: TestNetwork @@ -106,10 +105,10 @@ describe('pds profile views', () => { it('presents avatars & banners', async () => { const avatarImg = await fs.readFile( - 'tests/sample-img/key-portrait-small.jpg', + '../dev-env/src/seed/img/key-portrait-small.jpg', ) const bannerImg = await fs.readFile( - 'tests/sample-img/key-landscape-small.jpg', + '../dev-env/src/seed/img/key-landscape-small.jpg', ) const avatarRes = await pdsAgent.api.com.atproto.repo.uploadBlob( avatarImg, @@ -184,15 +183,16 @@ describe('pds profile views', () => { }) it('blocked by actor takedown', async () => { - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventTakedown' }, subject: { $type: 'com.atproto.admin.defs#repoRef', did: alice, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: true, + ref: 'test', + }, }, { encoding: 'application/json', @@ -207,15 +207,15 @@ describe('pds profile views', () => { await expect(promise).rejects.toThrow('Account has been taken down') // Cleanup - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventReverseTakedown' }, subject: { $type: 'com.atproto.admin.defs#repoRef', did: alice, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: false, + }, }, { encoding: 'application/json', @@ -225,7 +225,7 @@ describe('pds profile views', () => { }) it('blocked by actor suspension', async () => { - await agent.api.com.atproto.admin.emitModerationEvent( + await pdsAgent.api.com.atproto.admin.emitModerationEvent( { event: { $type: 'com.atproto.admin.defs#modEventTakedown', @@ -243,6 +243,7 @@ describe('pds profile views', () => { headers: network.pds.adminAuthHeaders(), }, ) + await network.processAll() const promise = agent.api.app.bsky.actor.getProfile( { actor: alice }, { headers: await network.serviceHeaders(bob) }, @@ -253,7 +254,7 @@ describe('pds profile views', () => { ) // Cleanup - await agent.api.com.atproto.admin.emitModerationEvent( + await pdsAgent.api.com.atproto.admin.emitModerationEvent( { event: { $type: 'com.atproto.admin.defs#modEventReverseTakedown' }, subject: { @@ -268,6 +269,7 @@ describe('pds profile views', () => { headers: network.pds.adminAuthHeaders(), }, ) + await network.processAll() }) async function updateProfile(did: string, record: Record) { diff --git a/packages/bsky/tests/views/reposts.test.ts b/packages/bsky/tests/views/reposts.test.ts index 4d386121137..e00650fc6c4 100644 --- a/packages/bsky/tests/views/reposts.test.ts +++ b/packages/bsky/tests/views/reposts.test.ts @@ -1,7 +1,6 @@ import AtpAgent from '@atproto/api' -import { TestNetwork, SeedClient } from '@atproto/dev-env' +import { TestNetwork, SeedClient, repostsSeed } from '@atproto/dev-env' import { forSnapshot, paginateAll, stripViewer } from '../_util' -import repostsSeed from '../seeds/reposts' describe('pds repost views', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/suggested-follows.test.ts b/packages/bsky/tests/views/suggested-follows.test.ts index e9aa3248df7..ff9bec4539c 100644 --- a/packages/bsky/tests/views/suggested-follows.test.ts +++ b/packages/bsky/tests/views/suggested-follows.test.ts @@ -1,6 +1,5 @@ import AtpAgent, { AtUri } from '@atproto/api' -import { TestNetwork, SeedClient } from '@atproto/dev-env' -import likesSeed from '../seeds/likes' +import { TestNetwork, SeedClient, likesSeed } from '@atproto/dev-env' describe('suggested follows', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/suggestions.test.ts b/packages/bsky/tests/views/suggestions.test.ts index 4253f528b13..f79575c529e 100644 --- a/packages/bsky/tests/views/suggestions.test.ts +++ b/packages/bsky/tests/views/suggestions.test.ts @@ -1,7 +1,6 @@ import AtpAgent from '@atproto/api' -import { TestNetwork, SeedClient } from '@atproto/dev-env' +import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' import { stripViewer } from '../_util' -import basicSeed from '../seeds/basic' describe('pds user search views', () => { let network: TestNetwork diff --git a/packages/bsky/tests/views/thread.test.ts b/packages/bsky/tests/views/thread.test.ts index d42378aec6e..88f7db4c573 100644 --- a/packages/bsky/tests/views/thread.test.ts +++ b/packages/bsky/tests/views/thread.test.ts @@ -1,7 +1,6 @@ import AtpAgent, { AppBskyFeedGetPostThread } from '@atproto/api' -import { TestNetwork, SeedClient } from '@atproto/dev-env' +import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' import { forSnapshot, stripViewerFromThread } from '../_util' -import basicSeed from '../seeds/basic' import assert from 'assert' import { isThreadViewPost } from '@atproto/api/src/client/types/app/bsky/feed/defs' @@ -31,7 +30,6 @@ describe('pds thread views', () => { // Add a repost of a reply so that we can confirm myState in the thread await sc.repost(bob, sc.replies[alice][0].ref) await network.processAll() - await network.bsky.processAll() }) afterAll(async () => { @@ -165,19 +163,20 @@ describe('pds thread views', () => { describe('takedown', () => { it('blocks post by actor', async () => { - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventTakedown' }, subject: { $type: 'com.atproto.admin.defs#repoRef', did: alice, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: true, + ref: 'test', + }, }, { encoding: 'application/json', - headers: network.pds.adminAuthHeaders(), + headers: network.bsky.adminAuthHeaders(), }, ) @@ -192,37 +191,38 @@ describe('pds thread views', () => { ) // Cleanup - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventReverseTakedown' }, subject: { $type: 'com.atproto.admin.defs#repoRef', did: alice, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: false, + }, }, { encoding: 'application/json', - headers: network.pds.adminAuthHeaders(), + headers: network.bsky.adminAuthHeaders(), }, ) }) it('blocks replies by actor', async () => { - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventTakedown' }, subject: { $type: 'com.atproto.admin.defs#repoRef', did: carol, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: true, + ref: 'test', + }, }, { encoding: 'application/json', - headers: network.pds.adminAuthHeaders(), + headers: network.bsky.adminAuthHeaders(), }, ) @@ -235,37 +235,38 @@ describe('pds thread views', () => { expect(forSnapshot(thread.data.thread)).toMatchSnapshot() // Cleanup - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventReverseTakedown' }, subject: { $type: 'com.atproto.admin.defs#repoRef', did: carol, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: false, + }, }, { encoding: 'application/json', - headers: network.pds.adminAuthHeaders(), + headers: network.bsky.adminAuthHeaders(), }, ) }) it('blocks ancestors by actor', async () => { - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventTakedown' }, subject: { $type: 'com.atproto.admin.defs#repoRef', did: bob, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: true, + ref: 'test', + }, }, { encoding: 'application/json', - headers: network.pds.adminAuthHeaders(), + headers: network.bsky.adminAuthHeaders(), }, ) @@ -278,39 +279,40 @@ describe('pds thread views', () => { expect(forSnapshot(thread.data.thread)).toMatchSnapshot() // Cleanup - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventReverseTakedown' }, subject: { $type: 'com.atproto.admin.defs#repoRef', did: bob, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: false, + }, }, { encoding: 'application/json', - headers: network.pds.adminAuthHeaders(), + headers: network.bsky.adminAuthHeaders(), }, ) }) it('blocks post by record', async () => { const postRef = sc.posts[alice][1].ref - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventTakedown' }, subject: { $type: 'com.atproto.repo.strongRef', uri: postRef.uriStr, cid: postRef.cidStr, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: true, + ref: 'test', + }, }, { encoding: 'application/json', - headers: network.pds.adminAuthHeaders(), + headers: network.bsky.adminAuthHeaders(), }, ) @@ -324,20 +326,20 @@ describe('pds thread views', () => { ) // Cleanup - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventReverseTakedown' }, subject: { $type: 'com.atproto.repo.strongRef', uri: postRef.uriStr, cid: postRef.cidStr, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: false, + }, }, { encoding: 'application/json', - headers: network.pds.adminAuthHeaders(), + headers: network.bsky.adminAuthHeaders(), }, ) }) @@ -350,20 +352,21 @@ describe('pds thread views', () => { const parent = threadPreTakedown.data.thread.parent?.['post'] - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventTakedown' }, subject: { $type: 'com.atproto.repo.strongRef', uri: parent.uri, cid: parent.cid, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: true, + ref: 'test', + }, }, { encoding: 'application/json', - headers: network.pds.adminAuthHeaders(), + headers: network.bsky.adminAuthHeaders(), }, ) @@ -376,20 +379,20 @@ describe('pds thread views', () => { expect(forSnapshot(thread.data.thread)).toMatchSnapshot() // Cleanup - await agent.api.com.atproto.admin.emitModerationEvent( + await agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventReverseTakedown' }, subject: { $type: 'com.atproto.repo.strongRef', uri: parent.uri, cid: parent.cid, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: false, + }, }, { encoding: 'application/json', - headers: network.pds.adminAuthHeaders(), + headers: network.bsky.adminAuthHeaders(), }, ) }) @@ -404,20 +407,21 @@ describe('pds thread views', () => { await Promise.all( [post1, post2].map((post) => - agent.api.com.atproto.admin.emitModerationEvent( + agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventTakedown' }, subject: { $type: 'com.atproto.repo.strongRef', uri: post.uri, cid: post.cid, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: true, + ref: 'test', + }, }, { encoding: 'application/json', - headers: network.pds.adminAuthHeaders(), + headers: network.bsky.adminAuthHeaders(), }, ), ), @@ -434,7 +438,7 @@ describe('pds thread views', () => { // Cleanup await Promise.all( [post1, post2].map((post) => - agent.api.com.atproto.admin.emitModerationEvent( + agent.api.com.atproto.admin.updateSubjectStatus( { event: { $type: 'com.atproto.admin.defs#modEventReverseTakedown', @@ -444,12 +448,13 @@ describe('pds thread views', () => { uri: post.uri, cid: post.cid, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: false, + }, }, { encoding: 'application/json', - headers: network.pds.adminAuthHeaders(), + headers: network.bsky.adminAuthHeaders(), }, ), ), diff --git a/packages/bsky/tests/views/threadgating.test.ts b/packages/bsky/tests/views/threadgating.test.ts index c0667bcf874..feb10dfbadd 100644 --- a/packages/bsky/tests/views/threadgating.test.ts +++ b/packages/bsky/tests/views/threadgating.test.ts @@ -1,11 +1,10 @@ import assert from 'assert' import AtpAgent from '@atproto/api' -import { TestNetwork, SeedClient } from '@atproto/dev-env' +import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' import { isNotFoundPost, isThreadViewPost, } from '../../src/lexicon/types/app/bsky/feed/defs' -import basicSeed from '../seeds/basic' import { forSnapshot } from '../_util' describe('views with thread gating', () => { diff --git a/packages/bsky/tests/views/timeline.test.ts b/packages/bsky/tests/views/timeline.test.ts index f9fd5bb4a6e..014bb5339ce 100644 --- a/packages/bsky/tests/views/timeline.test.ts +++ b/packages/bsky/tests/views/timeline.test.ts @@ -1,8 +1,7 @@ import assert from 'assert' import AtpAgent from '@atproto/api' -import { TestNetwork, SeedClient } from '@atproto/dev-env' +import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' import { forSnapshot, getOriginator, paginateAll } from '../_util' -import basicSeed from '../seeds/basic' import { FeedAlgorithm } from '../../src/api/app/bsky/util/feed' import { FeedViewPost } from '../../src/lexicon/types/app/bsky/feed/defs' @@ -35,7 +34,7 @@ describe('timeline views', () => { await network.bsky.ctx.services .label(network.bsky.ctx.db.getPrimary()) .formatAndCreate( - network.bsky.ctx.cfg.labelerDid, + network.ozone.ctx.cfg.service.did, labelPostA.uriStr, labelPostA.cidStr, { create: ['kind'] }, @@ -43,7 +42,7 @@ describe('timeline views', () => { await network.bsky.ctx.services .label(network.bsky.ctx.db.getPrimary()) .formatAndCreate( - network.bsky.ctx.cfg.labelerDid, + network.ozone.ctx.cfg.service.did, labelPostB.uriStr, labelPostB.cidStr, { create: ['kind'] }, @@ -197,15 +196,16 @@ describe('timeline views', () => { it('blocks posts, reposts, replies by actor takedown', async () => { await Promise.all( [bob, carol].map((did) => - agent.api.com.atproto.admin.emitModerationEvent( + agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventTakedown' }, subject: { $type: 'com.atproto.admin.defs#repoRef', did, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: true, + ref: 'test', + }, }, { encoding: 'application/json', @@ -225,15 +225,15 @@ describe('timeline views', () => { // Cleanup await Promise.all( [bob, carol].map((did) => - agent.api.com.atproto.admin.emitModerationEvent( + agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventReverseTakedown' }, subject: { $type: 'com.atproto.admin.defs#repoRef', did, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: false, + }, }, { encoding: 'application/json', @@ -249,16 +249,17 @@ describe('timeline views', () => { const postRef2 = sc.replies[bob][0].ref // Post and reply parent await Promise.all( [postRef1, postRef2].map((postRef) => - agent.api.com.atproto.admin.emitModerationEvent( + agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventTakedown' }, subject: { $type: 'com.atproto.repo.strongRef', uri: postRef.uriStr, cid: postRef.cidStr, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: true, + ref: 'test', + }, }, { encoding: 'application/json', @@ -278,16 +279,16 @@ describe('timeline views', () => { // Cleanup await Promise.all( [postRef1, postRef2].map((postRef) => - agent.api.com.atproto.admin.emitModerationEvent( + agent.api.com.atproto.admin.updateSubjectStatus( { - event: { $type: 'com.atproto.admin.defs#modEventReverseTakedown' }, subject: { $type: 'com.atproto.repo.strongRef', uri: postRef.uriStr, cid: postRef.cidStr, }, - createdBy: 'did:example:admin', - reason: 'Y', + takedown: { + applied: false, + }, }, { encoding: 'application/json', diff --git a/packages/common-web/src/times.ts b/packages/common-web/src/times.ts index 90366277fdf..7231904d624 100644 --- a/packages/common-web/src/times.ts +++ b/packages/common-web/src/times.ts @@ -6,3 +6,10 @@ export const DAY = HOUR * 24 export const lessThanAgoMs = (time: Date, range: number) => { return Date.now() < time.getTime() + range } + +export const addHoursToDate = (hours: number, startingDate?: Date): Date => { + // When date is passed, clone before calling `setHours()` so that we are not mutating the original date + const currentDate = startingDate ? new Date(startingDate) : new Date() + currentDate.setHours(currentDate.getHours() + hours) + return currentDate +} diff --git a/packages/pds/src/config/util.ts b/packages/common/src/env.ts similarity index 92% rename from packages/pds/src/config/util.ts rename to packages/common/src/env.ts index 2bf858621bf..a4fcc2e036f 100644 --- a/packages/pds/src/config/util.ts +++ b/packages/common/src/env.ts @@ -1,4 +1,4 @@ -import { parseIntWithFallback } from '@atproto/common' +import { parseIntWithFallback } from '@atproto/common-web' export const envInt = (name: string): number | undefined => { const str = process.env[name] diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index 524a090c5ab..fc981b11c02 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -1,5 +1,6 @@ export * from '@atproto/common-web' export * from './dates' +export * from './env' export * from './fs' export * from './ipld' export * from './ipld-multi' diff --git a/packages/dev-env/package.json b/packages/dev-env/package.json index 3f9a5032e12..a71b9ce3169 100644 --- a/packages/dev-env/package.json +++ b/packages/dev-env/package.json @@ -31,6 +31,7 @@ "@atproto/crypto": "workspace:^", "@atproto/identity": "workspace:^", "@atproto/lexicon": "workspace:^", + "@atproto/ozone": "workspace:^", "@atproto/pds": "workspace:^", "@atproto/syntax": "workspace:^", "@atproto/xrpc-server": "workspace:^", diff --git a/packages/dev-env/src/bsky.ts b/packages/dev-env/src/bsky.ts index 529b212126a..8eb40ed0b36 100644 --- a/packages/dev-env/src/bsky.ts +++ b/packages/dev-env/src/bsky.ts @@ -44,12 +44,12 @@ export class TestBsky { didCacheMaxTTL: DAY, labelCacheStaleTTL: 30 * SECOND, labelCacheMaxTTL: MINUTE, + modServiceDid: cfg.modServiceDid ?? 'did:example:invalidMod', ...cfg, // Each test suite gets its own lock id for the repo subscription adminPassword: ADMIN_PASSWORD, moderatorPassword: MOD_PASSWORD, triagePassword: TRIAGE_PASSWORD, - labelerDid: 'did:example:labeler', feedGenDid: 'did:example:feedGen', rateLimitsEnabled: false, }) @@ -98,9 +98,9 @@ export class TestBsky { // indexer const indexerCfg = new bsky.IndexerConfig({ version: '0.0.0', + serverDid, didCacheStaleTTL: HOUR, didCacheMaxTTL: DAY, - labelerDid: 'did:example:labeler', redisHost: cfg.redisHost, dbPostgresUrl: cfg.dbPrimaryPostgresUrl, dbPostgresSchema: cfg.dbPostgresSchema, @@ -109,7 +109,8 @@ export class TestBsky { abyssEndpoint: '', abyssPassword: '', imgUriEndpoint: 'img.example.com', - moderationPushUrl: `http://admin:${config.adminPassword}@localhost:${cfg.pdsPort}`, + moderationPushUrl: + cfg.indexer?.moderationPushUrl ?? 'https://modservice.invalid', indexerPartitionIds: [0], indexerNamespace: `ns${ns}`, indexerSubLockId: uniqueLockId(), @@ -129,7 +130,6 @@ export class TestBsky { db: db.getPrimary(), redis: indexerRedis, redisCache, - imgInvalidator: cfg.imgInvalidator, }) // ingester const ingesterCfg = new bsky.IngesterConfig({ @@ -138,6 +138,7 @@ export class TestBsky { dbPostgresUrl: cfg.dbPrimaryPostgresUrl, dbPostgresSchema: cfg.dbPostgresSchema, repoProvider: cfg.repoProvider, + labelProvider: cfg.labelProvider, ingesterNamespace: `ns${ns}`, ingesterSubLockId: uniqueLockId(), ingesterPartitionCount: 1, @@ -157,6 +158,9 @@ export class TestBsky { await indexer.start() await server.start() + // manually process labels in dev-env (in network.processAll) + ingester.ctx.labelSubscription?.destroy() + return new TestBsky(url, port, server, indexer, ingester) } @@ -219,6 +223,7 @@ export async function getIngester( dbPostgresUrl: process.env.DB_POSTGRES_URL || '', dbPostgresSchema: `appview_${name}`, repoProvider: network.pds.url.replace('http://', 'ws://'), + labelProvider: 'http://labeler.invalid', ingesterSubLockId: uniqueLockId(), ingesterPartitionCount: config.ingesterPartitionCount ?? 1, ingesterNamespace: `ns${ns}`, @@ -234,7 +239,9 @@ export async function getIngester( namespace: cfg.ingesterNamespace, }) await db.migrateToLatestOrThrow() - return bsky.BskyIngester.create({ cfg, db, redis }) + const ingester = await bsky.BskyIngester.create({ cfg, db, redis }) + await ingester.ctx.labelSubscription?.destroy() + return ingester } // get multiple indexers for separate partitions, sharing db and redis instance. @@ -249,9 +256,9 @@ export async function getIndexers( const ns = name ? await randomIntFromSeed(name, 1000000) : undefined const baseCfg: bsky.IndexerConfigValues = { version: '0.0.0', + serverDid: 'did:example:bsky', didCacheStaleTTL: HOUR, didCacheMaxTTL: DAY, - labelerDid: 'did:example:labeler', labelerKeywords: { label_me: 'test-label', label_me_2: 'test-label-2' }, redisHost: process.env.REDIS_HOST || '', dbPostgresUrl: process.env.DB_POSTGRES_URL || '', @@ -263,6 +270,7 @@ export async function getIndexers( indexerPartitionIds: [0], indexerNamespace: `ns${ns}`, ingesterPartitionCount: config.ingesterPartitionCount ?? 1, + moderationPushUrl: config.moderationPushUrl ?? 'https://modservice.invalid', ...config, } const db = new bsky.PrimaryDatabase({ diff --git a/packages/dev-env/src/index.ts b/packages/dev-env/src/index.ts index 160247f9fbb..5e8524edf68 100644 --- a/packages/dev-env/src/index.ts +++ b/packages/dev-env/src/index.ts @@ -4,6 +4,6 @@ export * from './network-no-appview' export * from './pds' export * from './plc' export * from './feed-gen' -export * from './seed-client' +export * from './seed' export * from './types' export * from './util' diff --git a/packages/dev-env/src/mock/index.ts b/packages/dev-env/src/mock/index.ts index 10f76b1c259..ab818dfc24c 100644 --- a/packages/dev-env/src/mock/index.ts +++ b/packages/dev-env/src/mock/index.ts @@ -191,7 +191,7 @@ export async function generateMockSetup(env: TestNetwork) { const labelSrvc = ctx.services.label(ctx.db.getPrimary()) await labelSrvc.createLabels([ { - src: ctx.cfg.labelerDid, + src: env.ozone.ctx.cfg.service.did, uri: labeledPost.uri, cid: labeledPost.cid, val: 'nudity', @@ -199,7 +199,7 @@ export async function generateMockSetup(env: TestNetwork) { cts: new Date().toISOString(), }, { - src: ctx.cfg.labelerDid, + src: env.ozone.ctx.cfg.service.did, uri: filteredPost.uri, cid: filteredPost.cid, val: 'dmca-violation', diff --git a/packages/dev-env/src/network-no-appview.ts b/packages/dev-env/src/network-no-appview.ts index 30b978b5b79..44701ece35e 100644 --- a/packages/dev-env/src/network-no-appview.ts +++ b/packages/dev-env/src/network-no-appview.ts @@ -4,7 +4,7 @@ import { TestPlc } from './plc' import { TestPds } from './pds' import { mockNetworkUtilities } from './util' import { TestFeedGen } from './feed-gen' -import { SeedClient } from './seed-client' +import { SeedClient } from './seed/client' export class TestNetworkNoAppView { feedGens: TestFeedGen[] = [] diff --git a/packages/dev-env/src/network.ts b/packages/dev-env/src/network.ts index 6079ec4c968..4e29c3c9384 100644 --- a/packages/dev-env/src/network.ts +++ b/packages/dev-env/src/network.ts @@ -3,18 +3,26 @@ import * as uint8arrays from 'uint8arrays' import getPort from 'get-port' import { wait } from '@atproto/common-web' import { createServiceJwt } from '@atproto/xrpc-server' +import { Client as PlcClient } from '@did-plc/lib' import { TestServerParams } from './types' import { TestPlc } from './plc' import { TestPds } from './pds' import { TestBsky } from './bsky' +import { TestOzone } from './ozone' import { mockNetworkUtilities } from './util' import { TestNetworkNoAppView } from './network-no-appview' +import { Secp256k1Keypair } from '@atproto/crypto' const ADMIN_USERNAME = 'admin' const ADMIN_PASSWORD = 'admin-pass' export class TestNetwork extends TestNetworkNoAppView { - constructor(public plc: TestPlc, public pds: TestPds, public bsky: TestBsky) { + constructor( + public plc: TestPlc, + public pds: TestPds, + public bsky: TestBsky, + public ozone: TestOzone, + ) { super(plc, pds) } @@ -32,29 +40,61 @@ export class TestNetwork extends TestNetworkNoAppView { const bskyPort = params.bsky?.port ?? (await getPort()) const pdsPort = params.pds?.port ?? (await getPort()) + const ozonePort = params.ozone?.port ?? (await getPort()) + + const ozoneKey = await Secp256k1Keypair.create({ exportable: true }) + const ozoneDid = await new PlcClient(plc.url).createDid({ + signingKey: ozoneKey.did(), + rotationKeys: [ozoneKey.did()], + handle: 'ozone.test', + pds: `http://pds.invalid`, + signer: ozoneKey, + }) + const bsky = await TestBsky.create({ port: bskyPort, plcUrl: plc.url, pdsPort, repoProvider: `ws://localhost:${pdsPort}`, + labelProvider: `http://localhost:${ozonePort}`, dbPostgresSchema: `appview_${dbPostgresSchema}`, dbPrimaryPostgresUrl: dbPostgresUrl, redisHost, - moderationPushUrl: `http://admin:${ADMIN_PASSWORD}@localhost:${pdsPort}`, + modServiceDid: ozoneDid, ...params.bsky, + indexer: { + ...params.bsky?.indexer, + moderationPushUrl: `http://admin:${ADMIN_PASSWORD}@localhost:${ozonePort}`, + }, }) + const pds = await TestPds.create({ port: pdsPort, didPlcUrl: plc.url, bskyAppViewUrl: bsky.url, bskyAppViewDid: bsky.ctx.cfg.serverDid, - bskyAppViewModeration: true, + modServiceUrl: `http://localhost:${ozonePort}`, + modServiceDid: ozoneDid, ...params.pds, }) + const ozone = await TestOzone.create({ + port: ozonePort, + plcUrl: plc.url, + signingKey: ozoneKey, + serverDid: ozoneDid, + dbPostgresSchema: `ozone_${dbPostgresSchema}`, + dbPostgresUrl, + appviewUrl: bsky.url, + appviewDid: bsky.ctx.cfg.serverDid, + pdsUrl: pds.url, + pdsDid: pds.ctx.cfg.service.did, + ...params.ozone, + }) + mockNetworkUtilities(pds, bsky) - return new TestNetwork(plc, pds, bsky) + return new TestNetwork(plc, pds, bsky, ozone) } async processFullSubscription(timeout = 5000) { @@ -78,6 +118,8 @@ export class TestNetwork extends TestNetworkNoAppView { await this.pds.processAll() await this.processFullSubscription(timeout) await this.bsky.processAll() + await this.ozone.processAll() + await this.bsky.ingester.ctx.labelSubscription?.fetchLabels() } async serviceHeaders(did: string, aud?: string) { @@ -109,6 +151,7 @@ export class TestNetwork extends TestNetworkNoAppView { async close() { await Promise.all(this.feedGens.map((fg) => fg.close())) + await this.ozone.close() await this.bsky.close() await this.pds.close() await this.plc.close() diff --git a/packages/dev-env/src/ozone.ts b/packages/dev-env/src/ozone.ts new file mode 100644 index 00000000000..4988a888f61 --- /dev/null +++ b/packages/dev-env/src/ozone.ts @@ -0,0 +1,112 @@ +import getPort from 'get-port' +import * as ui8 from 'uint8arrays' +import * as ozone from '@atproto/ozone' +import { AtpAgent } from '@atproto/api' +import { Secp256k1Keypair } from '@atproto/crypto' +import { Client as PlcClient } from '@did-plc/lib' +import { OzoneConfig } from './types' +import { ADMIN_PASSWORD, MOD_PASSWORD, TRIAGE_PASSWORD } from './const' + +export class TestOzone { + constructor( + public url: string, + public port: number, + public server: ozone.OzoneService, + public daemon: ozone.OzoneDaemon, + ) {} + + static async create(config: OzoneConfig): Promise { + const serviceKeypair = + config.signingKey ?? (await Secp256k1Keypair.create({ exportable: true })) + const signingKeyHex = ui8.toString(await serviceKeypair.export(), 'hex') + let serverDid = config.serverDid + if (!serverDid) { + const plcClient = new PlcClient(config.plcUrl) + serverDid = await plcClient.createDid({ + signingKey: serviceKeypair.did(), + rotationKeys: [serviceKeypair.did()], + handle: 'ozone.test', + pds: `https://pds.invalid`, + signer: serviceKeypair, + }) + } + + const port = config.port || (await getPort()) + const url = `http://localhost:${port}` + const env: ozone.OzoneEnvironment = { + version: '0.0.0', + port, + didPlcUrl: config.plcUrl, + publicUrl: 'https://ozone.public.url', + serverDid, + signingKeyHex, + ...config, + adminPassword: ADMIN_PASSWORD, + moderatorPassword: MOD_PASSWORD, + triagePassword: TRIAGE_PASSWORD, + } + + // Separate migration db in case migration changes some connection state that we need in the tests, e.g. "alter database ... set ..." + const migrationDb = new ozone.Database({ + schema: config.dbPostgresSchema, + url: config.dbPostgresUrl, + }) + if (config.migration) { + await migrationDb.migrateToOrThrow(config.migration) + } else { + await migrationDb.migrateToLatestOrThrow() + } + await migrationDb.close() + + const cfg = ozone.envToCfg(env) + const secrets = ozone.envToSecrets(env) + + // api server + const server = await ozone.OzoneService.create(cfg, secrets) + await server.start() + + const daemon = await ozone.OzoneDaemon.create(cfg, secrets) + await daemon.start() + // don't do event reversal in dev-env + await daemon.ctx.eventReverser.destroy() + + return new TestOzone(url, port, server, daemon) + } + + get ctx(): ozone.AppContext { + return this.server.ctx + } + + getClient() { + return new AtpAgent({ service: this.url }) + } + + adminAuth(role: 'admin' | 'moderator' | 'triage' = 'admin'): string { + const password = + role === 'triage' + ? TRIAGE_PASSWORD + : role === 'moderator' + ? MOD_PASSWORD + : ADMIN_PASSWORD + return ( + 'Basic ' + + ui8.toString(ui8.fromString(`admin:${password}`, 'utf8'), 'base64pad') + ) + } + + adminAuthHeaders(role?: 'admin' | 'moderator' | 'triage') { + return { + authorization: this.adminAuth(role), + } + } + + async processAll() { + await this.ctx.backgroundQueue.processAll() + await this.daemon.processAll() + } + + async close() { + await this.daemon.destroy() + await this.server.destroy() + } +} diff --git a/packages/dev-env/src/pds.ts b/packages/dev-env/src/pds.ts index c52ada4a9e9..44b8a063fce 100644 --- a/packages/dev-env/src/pds.ts +++ b/packages/dev-env/src/pds.ts @@ -47,6 +47,8 @@ export class TestPds { bskyAppViewUrl: 'https://appview.invalid', bskyAppViewDid: 'did:example:invalid', bskyAppViewCdnUrlPattern: 'http://cdn.appview.com/%s/%s/%s', + modServiceUrl: 'https://moderator.invalid', + modServiceDid: 'did:example:invalid', plcRotationKeyK256PrivateKeyHex: plcRotationPriv, inviteRequired: false, ...config, diff --git a/packages/bsky/tests/seeds/author-feed.ts b/packages/dev-env/src/seed/author-feed.ts similarity index 97% rename from packages/bsky/tests/seeds/author-feed.ts rename to packages/dev-env/src/seed/author-feed.ts index 164564f766b..841c58b406c 100644 --- a/packages/bsky/tests/seeds/author-feed.ts +++ b/packages/dev-env/src/seed/author-feed.ts @@ -1,4 +1,4 @@ -import { SeedClient } from '@atproto/dev-env' +import { SeedClient } from './client' import basicSeed from './basic' export default async (sc: SeedClient) => { diff --git a/packages/bsky/tests/seeds/basic.ts b/packages/dev-env/src/seed/basic.ts similarity index 92% rename from packages/bsky/tests/seeds/basic.ts rename to packages/dev-env/src/seed/basic.ts index b935afd3d6f..47c299dce45 100644 --- a/packages/bsky/tests/seeds/basic.ts +++ b/packages/dev-env/src/seed/basic.ts @@ -1,5 +1,4 @@ -import { SeedClient } from '@atproto/dev-env' -import { ids } from '../../src/lexicon/lexicons' +import { SeedClient } from './client' import usersSeed from './users' export default async (sc: SeedClient, users = true) => { @@ -34,12 +33,12 @@ export default async (sc: SeedClient, users = true) => { }) const img1 = await sc.uploadFile( carol, - 'tests/sample-img/key-landscape-small.jpg', + '../dev-env/src/seed/img/key-landscape-small.jpg', 'image/jpeg', ) const img2 = await sc.uploadFile( carol, - 'tests/sample-img/key-alt.jpg', + '../dev-env/src/seed/img/key-alt.jpg', 'image/jpeg', ) await sc.post( @@ -58,7 +57,7 @@ export default async (sc: SeedClient, users = true) => { index: { byteStart: 0, byteEnd: 18 }, features: [ { - $type: `${ids.AppBskyRichtextFacet}#mention`, + $type: `app.bsky.richtext.facet#mention`, did: alice, }, ], @@ -100,7 +99,7 @@ export default async (sc: SeedClient, users = true) => { const replyImg = await sc.uploadFile( bob, - 'tests/sample-img/key-landscape-small.jpg', + '../dev-env/src/seed/img/key-landscape-small.jpg', 'image/jpeg', ) // must ensure ordering of replies in indexing diff --git a/packages/dev-env/src/seed-client.ts b/packages/dev-env/src/seed/client.ts similarity index 98% rename from packages/dev-env/src/seed-client.ts rename to packages/dev-env/src/seed/client.ts index 7fc57d52081..5b7a614228f 100644 --- a/packages/dev-env/src/seed-client.ts +++ b/packages/dev-env/src/seed/client.ts @@ -9,7 +9,7 @@ import { Record as LikeRecord } from '@atproto/api/src/client/types/app/bsky/fee import { Record as FollowRecord } from '@atproto/api/src/client/types/app/bsky/graph/follow' import { AtUri } from '@atproto/syntax' import { BlobRef } from '@atproto/lexicon' -import { TestNetworkNoAppView } from './network-no-appview' +import { TestNetworkNoAppView } from '../network-no-appview' // Makes it simple to create data via the XRPC client, // and keeps track of all created data in memory for convenience. @@ -128,7 +128,9 @@ export class SeedClient { description: string, selfLabels?: string[], ) { - AVATAR_IMG ??= await fs.readFile('tests/sample-img/key-portrait-small.jpg') + AVATAR_IMG ??= await fs.readFile( + '../dev-env/src/seed/img/key-portrait-small.jpg', + ) let avatarBlob { diff --git a/packages/bsky/tests/seeds/follows.ts b/packages/dev-env/src/seed/follows.ts similarity index 96% rename from packages/bsky/tests/seeds/follows.ts rename to packages/dev-env/src/seed/follows.ts index 1abe555ff00..f15156dbff5 100644 --- a/packages/bsky/tests/seeds/follows.ts +++ b/packages/dev-env/src/seed/follows.ts @@ -1,4 +1,4 @@ -import { SeedClient } from '@atproto/dev-env' +import { SeedClient } from './client' export default async (sc: SeedClient) => { await sc.createAccount('alice', users.alice) diff --git a/packages/bsky/tests/sample-img/at.png b/packages/dev-env/src/seed/img/at.png similarity index 100% rename from packages/bsky/tests/sample-img/at.png rename to packages/dev-env/src/seed/img/at.png diff --git a/packages/bsky/tests/sample-img/hd-key.jpg b/packages/dev-env/src/seed/img/hd-key.jpg similarity index 100% rename from packages/bsky/tests/sample-img/hd-key.jpg rename to packages/dev-env/src/seed/img/hd-key.jpg diff --git a/packages/bsky/tests/sample-img/key-alt.jpg b/packages/dev-env/src/seed/img/key-alt.jpg similarity index 100% rename from packages/bsky/tests/sample-img/key-alt.jpg rename to packages/dev-env/src/seed/img/key-alt.jpg diff --git a/packages/bsky/tests/sample-img/key-landscape-large.jpg b/packages/dev-env/src/seed/img/key-landscape-large.jpg similarity index 100% rename from packages/bsky/tests/sample-img/key-landscape-large.jpg rename to packages/dev-env/src/seed/img/key-landscape-large.jpg diff --git a/packages/bsky/tests/sample-img/key-landscape-small.jpg b/packages/dev-env/src/seed/img/key-landscape-small.jpg similarity index 100% rename from packages/bsky/tests/sample-img/key-landscape-small.jpg rename to packages/dev-env/src/seed/img/key-landscape-small.jpg diff --git a/packages/bsky/tests/sample-img/key-portrait-large.jpg b/packages/dev-env/src/seed/img/key-portrait-large.jpg similarity index 100% rename from packages/bsky/tests/sample-img/key-portrait-large.jpg rename to packages/dev-env/src/seed/img/key-portrait-large.jpg diff --git a/packages/bsky/tests/sample-img/key-portrait-small.jpg b/packages/dev-env/src/seed/img/key-portrait-small.jpg similarity index 100% rename from packages/bsky/tests/sample-img/key-portrait-small.jpg rename to packages/dev-env/src/seed/img/key-portrait-small.jpg diff --git a/packages/dev-env/src/seed/index.ts b/packages/dev-env/src/seed/index.ts new file mode 100644 index 00000000000..dcf8996c5fe --- /dev/null +++ b/packages/dev-env/src/seed/index.ts @@ -0,0 +1,9 @@ +export * from './client' + +export { default as authorFeedSeed } from './author-feed' +export { default as basicSeed } from './basic' +export { default as followsSeed } from './follows' +export { default as likesSeed } from './likes' +export { default as repostsSeed } from './reposts' +export { default as usersBulkSeed } from './users-bulk' +export { default as usersSeed } from './users' diff --git a/packages/bsky/tests/seeds/likes.ts b/packages/dev-env/src/seed/likes.ts similarity index 96% rename from packages/bsky/tests/seeds/likes.ts rename to packages/dev-env/src/seed/likes.ts index 9c68375c52f..195da59e886 100644 --- a/packages/bsky/tests/seeds/likes.ts +++ b/packages/dev-env/src/seed/likes.ts @@ -1,4 +1,4 @@ -import { SeedClient } from '@atproto/dev-env' +import { SeedClient } from './client' import basicSeed from './basic' export default async (sc: SeedClient) => { diff --git a/packages/bsky/tests/seeds/reposts.ts b/packages/dev-env/src/seed/reposts.ts similarity index 92% rename from packages/bsky/tests/seeds/reposts.ts rename to packages/dev-env/src/seed/reposts.ts index 9bb444ec8f2..a7c724d1adf 100644 --- a/packages/bsky/tests/seeds/reposts.ts +++ b/packages/dev-env/src/seed/reposts.ts @@ -1,4 +1,4 @@ -import { SeedClient } from '@atproto/dev-env' +import { SeedClient } from './client' import basicSeed from './basic' export default async (sc: SeedClient) => { diff --git a/packages/bsky/tests/seeds/users-bulk.ts b/packages/dev-env/src/seed/users-bulk.ts similarity index 99% rename from packages/bsky/tests/seeds/users-bulk.ts rename to packages/dev-env/src/seed/users-bulk.ts index c20ce85de51..5a6cc42981b 100644 --- a/packages/bsky/tests/seeds/users-bulk.ts +++ b/packages/dev-env/src/seed/users-bulk.ts @@ -1,5 +1,5 @@ -import { SeedClient } from '@atproto/dev-env' -import { chunkArray } from '@atproto/common' +import { chunkArray } from '@atproto/common-web' +import { SeedClient } from './client' export default async (sc: SeedClient, max = Infinity) => { // @TODO when these are run in parallel, seem to get an intermittent diff --git a/packages/bsky/tests/seeds/users.ts b/packages/dev-env/src/seed/users.ts similarity index 96% rename from packages/bsky/tests/seeds/users.ts rename to packages/dev-env/src/seed/users.ts index 2ed5762065a..8c14b894db4 100644 --- a/packages/bsky/tests/seeds/users.ts +++ b/packages/dev-env/src/seed/users.ts @@ -1,4 +1,4 @@ -import { SeedClient } from '@atproto/dev-env' +import { SeedClient } from './client' export default async (sc: SeedClient) => { await sc.createAccount('alice', users.alice) diff --git a/packages/dev-env/src/types.ts b/packages/dev-env/src/types.ts index 3bbcaf15257..51d22976da2 100644 --- a/packages/dev-env/src/types.ts +++ b/packages/dev-env/src/types.ts @@ -1,6 +1,8 @@ import * as pds from '@atproto/pds' import * as bsky from '@atproto/bsky' -import { ImageInvalidator } from '@atproto/bsky/src/image/invalidator' +import * as ozone from '@atproto/ozone' +import { ImageInvalidator } from '@atproto/bsky' +import { ExportableKeypair } from '@atproto/crypto' export type PlcConfig = { port?: number @@ -15,6 +17,7 @@ export type PdsConfig = Partial & { export type BskyConfig = Partial & { plcUrl: string repoProvider: string + labelProvider: string dbPrimaryPostgresUrl: string redisHost: string pdsPort: number @@ -25,10 +28,19 @@ export type BskyConfig = Partial & { ingester?: Partial } +export type OzoneConfig = Partial & { + plcUrl: string + appviewUrl: string + dbPostgresUrl: string + migration?: string + signingKey?: ExportableKeypair +} + export type TestServerParams = { dbPostgresUrl: string dbPostgresSchema: string pds: Partial plc: Partial bsky: Partial + ozone: Partial } diff --git a/packages/ozone/README.md b/packages/ozone/README.md new file mode 100644 index 00000000000..09cb1c6044f --- /dev/null +++ b/packages/ozone/README.md @@ -0,0 +1,15 @@ +# @atproto/ozone: Bluesky Moderation Service + +Backend service for moderating the Bluesky network. + +[![NPM](https://img.shields.io/npm/v/@atproto/ozone)](https://www.npmjs.com/package/@atproto/ozone) +[![Github CI Status](https://github.com/bluesky-social/atproto/actions/workflows/repo.yaml/badge.svg)](https://github.com/bluesky-social/atproto/actions/workflows/repo.yaml) + +## License + +This project is dual-licensed under MIT and Apache 2.0 terms: + +- MIT license ([LICENSE-MIT.txt](https://github.com/bluesky-social/atproto/blob/main/LICENSE-MIT.txt) or http://opensource.org/licenses/MIT) +- Apache License, Version 2.0, ([LICENSE-APACHE.txt](https://github.com/bluesky-social/atproto/blob/main/LICENSE-APACHE.txt) or http://www.apache.org/licenses/LICENSE-2.0) + +Downstream projects and end users may chose either license individually, or both together, at their discretion. The motivation for this dual-licensing is the additional software patent assurance provided by Apache 2.0. diff --git a/packages/ozone/babel.config.js b/packages/ozone/babel.config.js new file mode 100644 index 00000000000..ee58f35df11 --- /dev/null +++ b/packages/ozone/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: [['@babel/preset-env']], +} diff --git a/packages/ozone/bin/migration-create.ts b/packages/ozone/bin/migration-create.ts new file mode 100644 index 00000000000..b51c536c4f2 --- /dev/null +++ b/packages/ozone/bin/migration-create.ts @@ -0,0 +1,38 @@ +#!/usr/bin/env ts-node + +import * as fs from 'fs/promises' +import * as path from 'path' + +export async function main() { + const now = new Date() + const prefix = now.toISOString().replace(/[^a-z0-9]/gi, '') // Order of migrations matches alphabetical order of their names + const name = process.argv[2] + if (!name || !name.match(/^[a-z0-9-]+$/)) { + process.exitCode = 1 + return console.error( + 'Must pass a migration name consisting of lowercase digits, numbers, and dashes.', + ) + } + const filename = `${prefix}-${name}` + const dir = path.join(__dirname, '..', 'src', 'db', 'migrations') + + await fs.writeFile(path.join(dir, `${filename}.ts`), template, { flag: 'wx' }) + await fs.writeFile( + path.join(dir, 'index.ts'), + `export * as _${prefix} from './${filename}'\n`, + { flag: 'a' }, + ) +} + +const template = `import { Kysely } from 'kysely' + +export async function up(db: Kysely): Promise { + // Migration code +} + +export async function down(db: Kysely): Promise { + // Migration code +} +` + +main() diff --git a/packages/ozone/build.js b/packages/ozone/build.js new file mode 100644 index 00000000000..45d59b50f8e --- /dev/null +++ b/packages/ozone/build.js @@ -0,0 +1,18 @@ +const { nodeExternalsPlugin } = require('esbuild-node-externals') + +const buildShallow = + process.argv.includes('--shallow') || process.env.ATP_BUILD_SHALLOW === 'true' + +require('esbuild').build({ + logLevel: 'info', + entryPoints: ['src/index.ts', 'src/db/index.ts'], + bundle: true, + sourcemap: true, + outdir: 'dist', + platform: 'node', + external: [ + // Referenced in pg driver, but optional and we don't use it + 'pg-native', + ], + plugins: buildShallow ? [nodeExternalsPlugin()] : [], +}) diff --git a/packages/ozone/jest.config.js b/packages/ozone/jest.config.js new file mode 100644 index 00000000000..14720ce82eb --- /dev/null +++ b/packages/ozone/jest.config.js @@ -0,0 +1,6 @@ +const base = require('../../jest.config.base.js') + +module.exports = { + ...base, + displayName: 'Bsky App View', +} diff --git a/packages/ozone/package.json b/packages/ozone/package.json new file mode 100644 index 00000000000..3d837db9913 --- /dev/null +++ b/packages/ozone/package.json @@ -0,0 +1,70 @@ +{ + "name": "@atproto/ozone", + "version": "0.0.1", + "license": "MIT", + "description": "Backend service for moderating the Bluesky network.", + "keywords": [ + "atproto", + "bluesky" + ], + "homepage": "https://atproto.com", + "repository": { + "type": "git", + "url": "https://github.com/bluesky-social/atproto", + "directory": "packages/ozone" + }, + "main": "src/index.ts", + "publishConfig": { + "main": "dist/index.js", + "types": "dist/index.d.ts" + }, + "bin": "dist/bin.js", + "scripts": { + "codegen": "lex gen-server ./src/lexicon ../../lexicons/com/atproto/*/* ../../lexicons/app/bsky/*/*", + "build": "node ./build.js", + "postbuild": "tsc --build tsconfig.build.json", + "update-main-to-dist": "node ../../update-main-to-dist.js packages/ozone", + "start": "node --enable-source-maps dist/bin.js", + "test": "../dev-infra/with-test-redis-and-db.sh jest", + "test:log": "tail -50 test.log | pino-pretty", + "test:updateSnapshot": "jest --updateSnapshot", + "migration:create": "ts-node ./bin/migration-create.ts" + }, + "dependencies": { + "@atproto/api": "workspace:^", + "@atproto/common": "workspace:^", + "@atproto/crypto": "workspace:^", + "@atproto/syntax": "workspace:^", + "@atproto/identity": "workspace:^", + "@atproto/lexicon": "workspace:^", + "@atproto/xrpc-server": "workspace:^", + "@did-plc/lib": "^0.0.1", + "compression": "^1.7.4", + "cors": "^2.8.5", + "express": "^4.17.2", + "express-async-errors": "^3.1.1", + "http-terminator": "^3.2.0", + "kysely": "^0.22.0", + "multiformats": "^9.9.0", + "p-queue": "^6.6.2", + "pg": "^8.10.0", + "pino": "^8.15.0", + "pino-http": "^8.2.1", + "typed-emitter": "^2.1.0", + "uint8arrays": "3.0.0" + }, + "devDependencies": { + "@atproto/api": "workspace:^", + "@atproto/dev-env": "workspace:^", + "@atproto/lex-cli": "workspace:^", + "@atproto/pds": "workspace:^", + "@atproto/xrpc": "workspace:^", + "@did-plc/server": "^0.0.1", + "@types/cors": "^2.8.12", + "@types/express": "^4.17.13", + "@types/express-serve-static-core": "^4.17.36", + "@types/pg": "^8.6.6", + "@types/qs": "^6.9.7", + "axios": "^0.27.2" + } +} diff --git a/packages/ozone/src/api/admin/emitModerationEvent.ts b/packages/ozone/src/api/admin/emitModerationEvent.ts new file mode 100644 index 00000000000..7aed324608b --- /dev/null +++ b/packages/ozone/src/api/admin/emitModerationEvent.ts @@ -0,0 +1,130 @@ +import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' +import { Server } from '../../lexicon' +import AppContext from '../../context' +import { + isModEventLabel, + isModEventReverseTakedown, + isModEventTakedown, +} from '../../lexicon/types/com/atproto/admin/defs' +import { subjectFromInput } from '../../mod-service/subject' + +export default function (server: Server, ctx: AppContext) { + server.com.atproto.admin.emitModerationEvent({ + auth: ctx.roleVerifier, + handler: async ({ input, auth }) => { + const access = auth.credentials + const db = ctx.db + const moderationService = ctx.modService(db) + const { createdBy, event } = input.body + const isTakedownEvent = isModEventTakedown(event) + const isReverseTakedownEvent = isModEventReverseTakedown(event) + const isLabelEvent = isModEventLabel(event) + const subject = subjectFromInput( + input.body.subject, + input.body.subjectBlobCids, + ) + + // apply access rules + + // if less than moderator access then can not takedown an account + if (!access.moderator && isTakedownEvent && subject.isRepo()) { + throw new AuthRequiredError( + 'Must be a full moderator to perform an account takedown', + ) + } + // if less than moderator access then can only take ack and escalation actions + if (!access.moderator && (isTakedownEvent || isReverseTakedownEvent)) { + throw new AuthRequiredError( + 'Must be a full moderator to take this type of action', + ) + } + // if less than moderator access then can not apply labels + if (!access.moderator && isLabelEvent) { + throw new AuthRequiredError('Must be a full moderator to label content') + } + + if (isLabelEvent) { + validateLabels([ + ...(event.createLabelVals ?? []), + ...(event.negateLabelVals ?? []), + ]) + } + + if (isTakedownEvent || isReverseTakedownEvent) { + const isSubjectTakendown = await moderationService.isSubjectTakendown( + subject, + ) + + if (isSubjectTakendown && isTakedownEvent) { + throw new InvalidRequestError(`Subject is already taken down`) + } + + if (!isSubjectTakendown && isReverseTakedownEvent) { + throw new InvalidRequestError(`Subject is not taken down`) + } + } + + const moderationEvent = await db.transaction(async (dbTxn) => { + const moderationTxn = ctx.modService(dbTxn) + + const result = await moderationTxn.logEvent({ + event, + subject, + createdBy, + }) + + if (subject.isRepo()) { + if (isTakedownEvent) { + const isSuspend = !!result.durationInHours + await moderationTxn.takedownRepo(subject, result.id, isSuspend) + } else if (isReverseTakedownEvent) { + await moderationTxn.reverseTakedownRepo(subject) + } + } + + if (subject.isRecord()) { + if (isTakedownEvent) { + await moderationTxn.takedownRecord(subject, result.id) + } else if (isReverseTakedownEvent) { + await moderationTxn.reverseTakedownRecord(subject) + } + } + + if (isLabelEvent) { + await moderationTxn.formatAndCreateLabels( + ctx.cfg.service.did, + result.subjectUri ?? result.subjectDid, + result.subjectCid, + { + create: result.createLabelVals?.length + ? result.createLabelVals.split(' ') + : undefined, + negate: result.negateLabelVals?.length + ? result.negateLabelVals.split(' ') + : undefined, + }, + ) + } + + return result + }) + + return { + encoding: 'application/json', + body: moderationService.views.formatEvent(moderationEvent), + } + }, + }) +} + +const validateLabels = (labels: string[]) => { + for (const label of labels) { + for (const char of badChars) { + if (label.includes(char)) { + throw new InvalidRequestError(`Invalid label: ${label}`) + } + } + } +} + +const badChars = [' ', ',', ';', `'`, `"`] diff --git a/packages/ozone/src/api/admin/getModerationEvent.ts b/packages/ozone/src/api/admin/getModerationEvent.ts new file mode 100644 index 00000000000..e02757c79a3 --- /dev/null +++ b/packages/ozone/src/api/admin/getModerationEvent.ts @@ -0,0 +1,19 @@ +import { Server } from '../../lexicon' +import AppContext from '../../context' + +export default function (server: Server, ctx: AppContext) { + server.com.atproto.admin.getModerationEvent({ + auth: ctx.roleVerifier, + handler: async ({ params }) => { + const { id } = params + const db = ctx.db + const modService = ctx.modService(db) + const event = await modService.getEventOrThrow(id) + const eventDetail = await modService.views.eventDetail(event) + return { + encoding: 'application/json', + body: eventDetail, + } + }, + }) +} diff --git a/packages/bsky/src/api/com/atproto/admin/getRecord.ts b/packages/ozone/src/api/admin/getRecord.ts similarity index 57% rename from packages/bsky/src/api/com/atproto/admin/getRecord.ts rename to packages/ozone/src/api/admin/getRecord.ts index 8e459910806..fbe9a1229d5 100644 --- a/packages/bsky/src/api/com/atproto/admin/getRecord.ts +++ b/packages/ozone/src/api/admin/getRecord.ts @@ -1,29 +1,24 @@ import { InvalidRequestError } from '@atproto/xrpc-server' -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' +import { Server } from '../../lexicon' +import AppContext from '../../context' import { addAccountInfoToRepoView, getPdsAccountInfo } from './util' +import { AtUri } from '@atproto/syntax' export default function (server: Server, ctx: AppContext) { server.com.atproto.admin.getRecord({ auth: ctx.roleVerifier, handler: async ({ params, auth }) => { - const { uri, cid } = params - const db = ctx.db.getPrimary() - const result = await db.db - .selectFrom('record') - .selectAll() - .where('uri', '=', uri) - .if(!!cid, (qb) => qb.where('cid', '=', cid ?? '')) - .executeTakeFirst() - if (!result) { - throw new InvalidRequestError('Record not found', 'RecordNotFound') - } + const db = ctx.db const [record, accountInfo] = await Promise.all([ - ctx.services.moderation(db).views.recordDetail(result), - getPdsAccountInfo(ctx, result.did), + ctx.modService(db).views.recordDetail(params), + getPdsAccountInfo(ctx, new AtUri(params.uri).hostname), ]) + if (!record) { + throw new InvalidRequestError('Record not found', 'RecordNotFound') + } + record.repo = addAccountInfoToRepoView( record.repo, accountInfo, diff --git a/packages/bsky/src/api/com/atproto/admin/getRepo.ts b/packages/ozone/src/api/admin/getRepo.ts similarity index 68% rename from packages/bsky/src/api/com/atproto/admin/getRepo.ts rename to packages/ozone/src/api/admin/getRepo.ts index 314b345b5e9..5da30f24524 100644 --- a/packages/bsky/src/api/com/atproto/admin/getRepo.ts +++ b/packages/ozone/src/api/admin/getRepo.ts @@ -1,6 +1,6 @@ import { InvalidRequestError } from '@atproto/xrpc-server' -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' +import { Server } from '../../lexicon' +import AppContext from '../../context' import { addAccountInfoToRepoViewDetail, getPdsAccountInfo } from './util' export default function (server: Server, ctx: AppContext) { @@ -8,15 +8,14 @@ export default function (server: Server, ctx: AppContext) { auth: ctx.roleVerifier, handler: async ({ params, auth }) => { const { did } = params - const db = ctx.db.getPrimary() - const result = await ctx.services.actor(db).getActor(did, true) - if (!result) { - throw new InvalidRequestError('Repo not found', 'RepoNotFound') - } + const db = ctx.db const [partialRepo, accountInfo] = await Promise.all([ - ctx.services.moderation(db).views.repoDetail(result), - getPdsAccountInfo(ctx, result.did), + ctx.modService(db).views.repoDetail(did), + getPdsAccountInfo(ctx, did), ]) + if (!partialRepo) { + throw new InvalidRequestError('Repo not found', 'RepoNotFound') + } const repo = addAccountInfoToRepoViewDetail( partialRepo, diff --git a/packages/bsky/src/api/com/atproto/admin/queryModerationEvents.ts b/packages/ozone/src/api/admin/queryModerationEvents.ts similarity index 70% rename from packages/bsky/src/api/com/atproto/admin/queryModerationEvents.ts rename to packages/ozone/src/api/admin/queryModerationEvents.ts index 1868533295c..4c0cbdd1500 100644 --- a/packages/bsky/src/api/com/atproto/admin/queryModerationEvents.ts +++ b/packages/ozone/src/api/admin/queryModerationEvents.ts @@ -1,5 +1,5 @@ -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' +import { Server } from '../../lexicon' +import AppContext from '../../context' import { getEventType } from '../moderation/util' export default function (server: Server, ctx: AppContext) { @@ -15,9 +15,9 @@ export default function (server: Server, ctx: AppContext) { includeAllUserRecords = false, createdBy, } = params - const db = ctx.db.getPrimary() - const moderationService = ctx.services.moderation(db) - const results = await moderationService.getEvents({ + const db = ctx.db + const modService = ctx.modService(db) + const results = await modService.getEvents({ types: types?.length ? types.map(getEventType) : [], subject, createdBy, @@ -30,7 +30,9 @@ export default function (server: Server, ctx: AppContext) { encoding: 'application/json', body: { cursor: results.cursor, - events: await moderationService.views.event(results.events), + events: results.events.map((evt) => + modService.views.formatEvent(evt), + ), }, } }, diff --git a/packages/bsky/src/api/com/atproto/admin/queryModerationStatuses.ts b/packages/ozone/src/api/admin/queryModerationStatuses.ts similarity index 76% rename from packages/bsky/src/api/com/atproto/admin/queryModerationStatuses.ts rename to packages/ozone/src/api/admin/queryModerationStatuses.ts index e664e90343c..fc935e5917a 100644 --- a/packages/bsky/src/api/com/atproto/admin/queryModerationStatuses.ts +++ b/packages/ozone/src/api/admin/queryModerationStatuses.ts @@ -1,5 +1,5 @@ -import { Server } from '../../../../lexicon' -import AppContext from '../../../../context' +import { Server } from '../../lexicon' +import AppContext from '../../context' import { getReviewState } from '../moderation/util' export default function (server: Server, ctx: AppContext) { @@ -23,9 +23,9 @@ export default function (server: Server, ctx: AppContext) { limit = 50, cursor, } = params - const db = ctx.db.getPrimary() - const moderationService = ctx.services.moderation(db) - const results = await moderationService.getSubjectStatuses({ + const db = ctx.db + const modService = ctx.modService(db) + const results = await modService.getSubjectStatuses({ reviewState: getReviewState(reviewState), subject, takendown, @@ -42,8 +42,8 @@ export default function (server: Server, ctx: AppContext) { limit, cursor, }) - const subjectStatuses = moderationService.views.subjectStatus( - results.statuses, + const subjectStatuses = results.statuses.map((status) => + modService.views.formatSubjectStatus(status), ) return { encoding: 'application/json', diff --git a/packages/ozone/src/api/admin/searchRepos.ts b/packages/ozone/src/api/admin/searchRepos.ts new file mode 100644 index 00000000000..fcdfc1b6d85 --- /dev/null +++ b/packages/ozone/src/api/admin/searchRepos.ts @@ -0,0 +1,42 @@ +import { Server } from '../../lexicon' +import AppContext from '../../context' +import { mapDefined } from '@atproto/common' + +export default function (server: Server, ctx: AppContext) { + server.com.atproto.admin.searchRepos({ + auth: ctx.roleVerifier, + handler: async ({ params }) => { + const modService = ctx.modService(ctx.db) + + // prefer new 'q' query param over deprecated 'term' + const query = params.q ?? params.term + + // special case for did searches - do exact match + if (query?.startsWith('did:')) { + const repos = await modService.views.repos([query]) + const found = repos.get(query) + return { + encoding: 'application/json', + body: { + repos: found ? [found] : [], + }, + } + } + + const res = await ctx.appviewAgent.api.app.bsky.actor.searchActors(params) + const repoMap = await modService.views.repos( + res.data.actors.map((a) => a.did), + ) + const repos = mapDefined(res.data.actors, (actor) => + repoMap.get(actor.did), + ) + return { + encoding: 'application/json', + body: { + cursor: res.data.cursor, + repos, + }, + } + }, + }) +} diff --git a/packages/bsky/src/api/com/atproto/admin/util.ts b/packages/ozone/src/api/admin/util.ts similarity index 86% rename from packages/bsky/src/api/com/atproto/admin/util.ts rename to packages/ozone/src/api/admin/util.ts index 7dfd10cce5c..b4df0664327 100644 --- a/packages/bsky/src/api/com/atproto/admin/util.ts +++ b/packages/ozone/src/api/admin/util.ts @@ -1,18 +1,20 @@ -import AppContext from '../../../../context' +import AppContext from '../../context' import { RepoView, RepoViewDetail, AccountView, -} from '../../../../lexicon/types/com/atproto/admin/defs' +} from '../../lexicon/types/com/atproto/admin/defs' export const getPdsAccountInfo = async ( ctx: AppContext, did: string, ): Promise => { - const agent = ctx.moderationPushAgent + const agent = ctx.pdsAgent if (!agent) return null + const auth = await ctx.pdsAuth() + if (!auth) return null try { - const res = await agent.api.com.atproto.admin.getAccountInfo({ did }) + const res = await agent.api.com.atproto.admin.getAccountInfo({ did }, auth) return res.data } catch (err) { return null diff --git a/packages/ozone/src/api/health.ts b/packages/ozone/src/api/health.ts new file mode 100644 index 00000000000..60328f333f0 --- /dev/null +++ b/packages/ozone/src/api/health.ts @@ -0,0 +1,20 @@ +import express from 'express' +import { sql } from 'kysely' +import AppContext from '../context' + +export const createRouter = (ctx: AppContext): express.Router => { + const router = express.Router() + + router.get('/xrpc/_health', async function (req, res) { + const { version } = ctx.cfg.service + try { + await sql`select 1`.execute(ctx.db.db) + } catch (err) { + req.log.error(err, 'failed health check') + return res.status(503).send({ version, error: 'Service Unavailable' }) + } + res.send({ version }) + }) + + return router +} diff --git a/packages/ozone/src/api/index.ts b/packages/ozone/src/api/index.ts new file mode 100644 index 00000000000..a07b9c23b5b --- /dev/null +++ b/packages/ozone/src/api/index.ts @@ -0,0 +1,28 @@ +import { Server } from '../lexicon' +import AppContext from '../context' +import createReport from './moderation/createReport' +import emitModerationEvent from './admin/emitModerationEvent' +import searchRepos from './admin/searchRepos' +import adminGetRecord from './admin/getRecord' +import getRepo from './admin/getRepo' +import queryModerationStatuses from './admin/queryModerationStatuses' +import queryModerationEvents from './admin/queryModerationEvents' +import getModerationEvent from './admin/getModerationEvent' +import fetchLabels from './temp/fetchLabels' + +export * as health from './health' + +export * as wellKnown from './well-known' + +export default function (server: Server, ctx: AppContext) { + createReport(server, ctx) + emitModerationEvent(server, ctx) + searchRepos(server, ctx) + adminGetRecord(server, ctx) + getRepo(server, ctx) + getModerationEvent(server, ctx) + queryModerationEvents(server, ctx) + queryModerationStatuses(server, ctx) + fetchLabels(server, ctx) + return server +} diff --git a/packages/ozone/src/api/moderation/createReport.ts b/packages/ozone/src/api/moderation/createReport.ts new file mode 100644 index 00000000000..6ede6dcd0e4 --- /dev/null +++ b/packages/ozone/src/api/moderation/createReport.ts @@ -0,0 +1,41 @@ +import { Server } from '../../lexicon' +import AppContext from '../../context' +import { getReasonType } from './util' +import { subjectFromInput } from '../../mod-service/subject' +import { REASONAPPEAL } from '../../lexicon/types/com/atproto/moderation/defs' +import { ForbiddenError } from '@atproto/xrpc-server' + +export default function (server: Server, ctx: AppContext) { + server.com.atproto.moderation.createReport({ + // @TODO anonymous reports w/ optional auth are a temporary measure + auth: ctx.authOptionalAccessOrRoleVerifier, + handler: async ({ input, auth }) => { + const requester = + 'did' in auth.credentials ? auth.credentials.did : ctx.cfg.service.did + const { reasonType, reason } = input.body + const subject = subjectFromInput(input.body.subject) + + // If the report is an appeal, the requester must be the author of the subject + if (reasonType === REASONAPPEAL && requester !== subject.did) { + throw new ForbiddenError('You cannot appeal this report') + } + + const db = ctx.db + const report = await db.transaction(async (dbTxn) => { + const moderationTxn = ctx.modService(dbTxn) + return moderationTxn.report({ + reasonType: getReasonType(reasonType), + reason, + subject, + reportedBy: requester || ctx.cfg.service.did, + }) + }) + + const body = ctx.modService(db).views.formatReport(report) + return { + encoding: 'application/json', + body, + } + }, + }) +} diff --git a/packages/bsky/src/api/com/atproto/moderation/util.ts b/packages/ozone/src/api/moderation/util.ts similarity index 59% rename from packages/bsky/src/api/com/atproto/moderation/util.ts rename to packages/ozone/src/api/moderation/util.ts index fbb144b1c0a..040007d5e79 100644 --- a/packages/bsky/src/api/com/atproto/moderation/util.ts +++ b/packages/ozone/src/api/moderation/util.ts @@ -1,8 +1,5 @@ -import { CID } from 'multiformats/cid' import { InvalidRequestError } from '@atproto/xrpc-server' -import { AtUri } from '@atproto/syntax' -import { InputSchema as ReportInput } from '../../../../lexicon/types/com/atproto/moderation/createReport' -import { InputSchema as ActionInput } from '../../../../lexicon/types/com/atproto/admin/emitModerationEvent' +import { InputSchema as ReportInput } from '../../lexicon/types/com/atproto/moderation/createReport' import { REASONOTHER, REASONSPAM, @@ -11,37 +8,14 @@ import { REASONSEXUAL, REASONVIOLATION, REASONAPPEAL, -} from '../../../../lexicon/types/com/atproto/moderation/defs' +} from '../../lexicon/types/com/atproto/moderation/defs' import { REVIEWCLOSED, REVIEWESCALATED, REVIEWOPEN, -} from '../../../../lexicon/types/com/atproto/admin/defs' -import { ModerationEvent } from '../../../../db/tables/moderation' -import { ModerationSubjectStatusRow } from '../../../../services/moderation/types' - -type SubjectInput = ReportInput['subject'] | ActionInput['subject'] - -export const getSubject = (subject: SubjectInput) => { - if ( - subject.$type === 'com.atproto.admin.defs#repoRef' && - typeof subject.did === 'string' - ) { - return { did: subject.did } - } - if ( - subject.$type === 'com.atproto.repo.strongRef' && - typeof subject.uri === 'string' && - typeof subject.cid === 'string' - ) { - const uri = new AtUri(subject.uri) - return { - uri, - cid: CID.parse(subject.cid), - } - } - throw new InvalidRequestError('Invalid subject') -} +} from '../../lexicon/types/com/atproto/admin/defs' +import { ModerationEvent } from '../../db/schema/moderation_event' +import { ModerationSubjectStatusRow } from '../../mod-service/types' export const getReasonType = (reasonType: ReportInput['reasonType']) => { if (reasonTypes.has(reasonType)) { diff --git a/packages/ozone/src/api/temp/fetchLabels.ts b/packages/ozone/src/api/temp/fetchLabels.ts new file mode 100644 index 00000000000..69ead2cb28e --- /dev/null +++ b/packages/ozone/src/api/temp/fetchLabels.ts @@ -0,0 +1,29 @@ +import { Server } from '../../lexicon' +import AppContext from '../../context' + +export default function (server: Server, ctx: AppContext) { + server.com.atproto.temp.fetchLabels(async ({ params }) => { + const { limit } = params + const since = + params.since !== undefined ? new Date(params.since).toISOString() : '' + const labelRes = await ctx.db.db + .selectFrom('label') + .selectAll() + .orderBy('label.cts', 'asc') + .where('cts', '>', since) + .limit(limit) + .execute() + + const labels = labelRes.map((l) => ({ + ...l, + cid: l.cid === '' ? undefined : l.cid, + })) + + return { + encoding: 'application/json', + body: { + labels, + }, + } + }) +} diff --git a/packages/ozone/src/api/well-known.ts b/packages/ozone/src/api/well-known.ts new file mode 100644 index 00000000000..9cbfa9efe53 --- /dev/null +++ b/packages/ozone/src/api/well-known.ts @@ -0,0 +1,35 @@ +import express from 'express' +import AppContext from '../context' + +export const createRouter = (ctx: AppContext): express.Router => { + const router = express.Router() + + router.get('/.well-known/did.json', (_req, res) => { + const hostname = + ctx.cfg.service.publicUrl && new URL(ctx.cfg.service.publicUrl).hostname + if (!hostname || ctx.cfg.service.did !== `did:web:${hostname}`) { + return res.sendStatus(404) + } + res.json({ + '@context': ['https://www.w3.org/ns/did/v1'], + id: ctx.cfg.service.did, + verificationMethod: [ + { + id: `${ctx.cfg.service.did}#atproto`, + type: 'Multikey', + controller: ctx.cfg.service.did, + publicKeyMultibase: ctx.signingKey.did().replace('did:key:', ''), + }, + ], + service: [ + { + id: '#atproto_mod', + type: 'AtprotoModerationService', + serviceEndpoint: `https://${hostname}`, + }, + ], + }) + }) + + return router +} diff --git a/packages/bsky/src/auth.ts b/packages/ozone/src/auth.ts similarity index 86% rename from packages/bsky/src/auth.ts rename to packages/ozone/src/auth.ts index ba58638d4f9..e996f068c49 100644 --- a/packages/bsky/src/auth.ts +++ b/packages/ozone/src/auth.ts @@ -2,7 +2,7 @@ import express from 'express' import * as uint8arrays from 'uint8arrays' import { AuthRequiredError, verifyJwt } from '@atproto/xrpc-server' import { IdResolver } from '@atproto/identity' -import { ServerConfig } from './config' +import { OzoneSecrets } from './config' const BASIC = 'Basic ' const BEARER = 'Bearer ' @@ -47,10 +47,11 @@ export const authOptionalVerifier = ( export const authOptionalAccessOrRoleVerifier = ( idResolver: IdResolver, - cfg: ServerConfig, + secrets: OzoneSecrets, + serverDid: string, ) => { - const verifyAccess = authVerifier(idResolver, { aud: cfg.serverDid }) - const verifyRole = roleVerifier(cfg) + const verifyAccess = authVerifier(idResolver, { aud: serverDid }) + const verifyRole = roleVerifier(secrets) return async (ctx: { req: express.Request; res: express.Response }) => { const defaultUnAuthorizedCredentials = { credentials: { did: null, type: 'unauthed' as const }, @@ -82,25 +83,28 @@ export const authOptionalAccessOrRoleVerifier = ( } export const roleVerifier = - (cfg: ServerConfig) => + (secrets: OzoneSecrets) => async (reqCtx: { req: express.Request; res: express.Response }) => { - const credentials = getRoleCredentials(cfg, reqCtx.req) + const credentials = getRoleCredentials(secrets, reqCtx.req) if (!credentials.valid) { throw new AuthRequiredError() } return { credentials } } -export const getRoleCredentials = (cfg: ServerConfig, req: express.Request) => { +export const getRoleCredentials = ( + secrets: OzoneSecrets, + req: express.Request, +) => { const parsed = parseBasicAuth(req.headers.authorization || '') const { username, password } = parsed ?? {} - if (username === 'admin' && password === cfg.triagePassword) { + if (username === 'admin' && password === secrets.triagePassword) { return { valid: true, admin: false, moderator: false, triage: true } } - if (username === 'admin' && password === cfg.moderatorPassword) { + if (username === 'admin' && password === secrets.moderatorPassword) { return { valid: true, admin: false, moderator: true, triage: true } } - if (username === 'admin' && password === cfg.adminPassword) { + if (username === 'admin' && password === secrets.adminPassword) { return { valid: true, admin: true, moderator: true, triage: true } } return { valid: false, admin: false, moderator: false, triage: false } diff --git a/packages/ozone/src/background.ts b/packages/ozone/src/background.ts new file mode 100644 index 00000000000..78cd790e779 --- /dev/null +++ b/packages/ozone/src/background.ts @@ -0,0 +1,35 @@ +import PQueue from 'p-queue' +import { Database } from './db' +import { dbLogger } from './logger' + +// A simple queue for in-process, out-of-band/backgrounded work + +export class BackgroundQueue { + queue = new PQueue({ concurrency: 20 }) + destroyed = false + constructor(public db: Database) {} + + add(task: Task) { + if (this.destroyed) { + return + } + this.queue + .add(() => task(this.db)) + .catch((err) => { + dbLogger.error(err, 'background queue task failed') + }) + } + + async processAll() { + await this.queue.onIdle() + } + + // On destroy we stop accepting new tasks, but complete all pending/in-progress tasks. + // The application calls this only once http connections have drained (tasks no longer being added). + async destroy() { + this.destroyed = true + await this.queue.onIdle() + } +} + +type Task = (db: Database) => Promise diff --git a/packages/ozone/src/config/config.ts b/packages/ozone/src/config/config.ts new file mode 100644 index 00000000000..caa799b2a90 --- /dev/null +++ b/packages/ozone/src/config/config.ts @@ -0,0 +1,84 @@ +import assert from 'node:assert' +import { OzoneEnvironment } from './env' + +// off-config but still from env: +// logging: LOG_LEVEL, LOG_SYSTEMS, LOG_ENABLED, LOG_DESTINATION + +export const envToCfg = (env: OzoneEnvironment): OzoneConfig => { + const port = env.port ?? 3000 + assert(env.publicUrl) + assert(env.serverDid) + const serviceCfg: OzoneConfig['service'] = { + port, + publicUrl: env.publicUrl, + did: env.serverDid, + version: env.version, + } + + assert(env.dbPostgresUrl) + const dbCfg: OzoneConfig['db'] = { + postgresUrl: env.dbPostgresUrl, + postgresSchema: env.dbPostgresSchema, + } + + assert(env.appviewUrl) + assert(env.appviewDid) + const appviewCfg: OzoneConfig['appview'] = { + url: env.appviewUrl, + did: env.appviewDid, + } + + assert(env.pdsUrl) + assert(env.pdsDid) + const pdsCfg: OzoneConfig['pds'] = { + url: env.pdsUrl, + did: env.pdsDid, + } + + assert(env.didPlcUrl) + const identityCfg: OzoneConfig['identity'] = { + plcUrl: env.didPlcUrl, + } + + return { + service: serviceCfg, + db: dbCfg, + appview: appviewCfg, + pds: pdsCfg, + identity: identityCfg, + } +} + +export type OzoneConfig = { + service: ServiceConfig + db: DatabaseConfig + appview: AppviewConfig + pds: PdsConfig | null + identity: IdentityConfig +} + +export type ServiceConfig = { + port: number + publicUrl: string + did: string + version?: string +} + +export type DatabaseConfig = { + postgresUrl: string + postgresSchema?: string +} + +export type AppviewConfig = { + url: string + did: string +} + +export type PdsConfig = { + url: string + did: string +} + +export type IdentityConfig = { + plcUrl: string +} diff --git a/packages/ozone/src/config/env.ts b/packages/ozone/src/config/env.ts new file mode 100644 index 00000000000..4f96ba63d53 --- /dev/null +++ b/packages/ozone/src/config/env.ts @@ -0,0 +1,41 @@ +import { envInt, envStr } from '@atproto/common' + +export const readEnv = (): OzoneEnvironment => { + return { + nodeEnv: envStr('NODE_ENV'), + version: envStr('OZONE_VERSION'), + port: envInt('OZONE_PORT'), + publicUrl: envStr('OZONE_PUBLIC_URL'), + serverDid: envStr('OZONE_SERVER_DID'), + appviewUrl: envStr('OZONE_APPVIEW_URL'), + appviewDid: envStr('OZONE_APPVIEW_DID'), + pdsUrl: envStr('OZONE_PDS_URL'), + pdsDid: envStr('OZONE_PDS_DID'), + dbPostgresUrl: envStr('OZONE_DB_POSTGRES_URL'), + dbPostgresSchema: envStr('OZONE_DB_POSTGRES_SCHEMA'), + didPlcUrl: envStr('OZONE_DID_PLC_URL'), + adminPassword: envStr('OZONE_ADMIN_PASSWORD'), + moderatorPassword: envStr('OZONE_MODERATOR_PASSWORD'), + triagePassword: envStr('OZONE_TRIAGE_PASSWORD'), + signingKeyHex: envStr('OZONE_SIGNING_KEY_HEX'), + } +} + +export type OzoneEnvironment = { + nodeEnv?: string + version?: string + port?: number + publicUrl?: string + serverDid?: string + appviewUrl?: string + appviewDid?: string + pdsUrl?: string + pdsDid?: string + dbPostgresUrl?: string + dbPostgresSchema?: string + didPlcUrl?: string + adminPassword?: string + moderatorPassword?: string + triagePassword?: string + signingKeyHex?: string +} diff --git a/packages/ozone/src/config/index.ts b/packages/ozone/src/config/index.ts new file mode 100644 index 00000000000..cd02efb6c87 --- /dev/null +++ b/packages/ozone/src/config/index.ts @@ -0,0 +1,3 @@ +export * from './config' +export * from './env' +export * from './secrets' diff --git a/packages/ozone/src/config/secrets.ts b/packages/ozone/src/config/secrets.ts new file mode 100644 index 00000000000..22593bcec26 --- /dev/null +++ b/packages/ozone/src/config/secrets.ts @@ -0,0 +1,23 @@ +import assert from 'assert' +import { OzoneEnvironment } from './env' + +export const envToSecrets = (env: OzoneEnvironment): OzoneSecrets => { + assert(env.adminPassword) + assert(env.moderatorPassword) + assert(env.triagePassword) + assert(env.signingKeyHex) + + return { + adminPassword: env.adminPassword, + moderatorPassword: env.moderatorPassword, + triagePassword: env.triagePassword, + signingKeyHex: env.signingKeyHex, + } +} + +export type OzoneSecrets = { + adminPassword: string + moderatorPassword: string + triagePassword: string + signingKeyHex: string +} diff --git a/packages/ozone/src/context.ts b/packages/ozone/src/context.ts new file mode 100644 index 00000000000..30f356a38e7 --- /dev/null +++ b/packages/ozone/src/context.ts @@ -0,0 +1,180 @@ +import * as plc from '@did-plc/lib' +import { IdResolver } from '@atproto/identity' +import { AtpAgent } from '@atproto/api' +import { Keypair, Secp256k1Keypair } from '@atproto/crypto' +import { createServiceAuthHeaders } from '@atproto/xrpc-server' +import { Database } from './db' +import { OzoneConfig, OzoneSecrets } from './config' +import { ModerationService, ModerationServiceCreator } from './mod-service' +import * as auth from './auth' +import { BackgroundQueue } from './background' +import assert from 'assert' +import { EventPusher } from './daemon' + +export type AppContextOptions = { + db: Database + cfg: OzoneConfig + modService: ModerationServiceCreator + appviewAgent: AtpAgent + pdsAgent: AtpAgent | undefined + signingKey: Keypair + idResolver: IdResolver + backgroundQueue: BackgroundQueue +} + +export class AppContext { + constructor(private opts: AppContextOptions, private secrets: OzoneSecrets) {} + + static async fromConfig( + cfg: OzoneConfig, + secrets: OzoneSecrets, + overrides?: Partial, + ): Promise { + const db = new Database({ + url: cfg.db.postgresUrl, + schema: cfg.db.postgresSchema, + }) + const signingKey = await Secp256k1Keypair.import(secrets.signingKeyHex) + const appviewAgent = new AtpAgent({ service: cfg.appview.url }) + const pdsAgent = cfg.pds + ? new AtpAgent({ service: cfg.pds.url }) + : undefined + + const createAuthHeaders = (aud: string) => + createServiceAuthHeaders({ + iss: cfg.service.did, + aud, + keypair: signingKey, + }) + const appviewAuth = async () => + cfg.appview.did ? createAuthHeaders(cfg.appview.did) : undefined + + const backgroundQueue = new BackgroundQueue(db) + const eventPusher = new EventPusher(db, createAuthHeaders, { + appview: cfg.appview, + pds: cfg.pds ?? undefined, + }) + + const modService = ModerationService.creator( + backgroundQueue, + eventPusher, + appviewAgent, + appviewAuth, + ) + + const idResolver = new IdResolver({ + plcUrl: cfg.identity.plcUrl, + }) + + return new AppContext( + { + db, + cfg, + modService, + appviewAgent, + pdsAgent, + signingKey, + idResolver, + backgroundQueue, + ...(overrides ?? {}), + }, + secrets, + ) + } + + assignPort(port: number) { + assert( + !this.cfg.service.port || this.cfg.service.port === port, + 'Conflicting port in config', + ) + this.opts.cfg.service.port = port + } + + get db(): Database { + return this.opts.db + } + + get cfg(): OzoneConfig { + return this.opts.cfg + } + + get modService(): ModerationServiceCreator { + return this.opts.modService + } + + get appviewAgent(): AtpAgent { + return this.opts.appviewAgent + } + + get pdsAgent(): AtpAgent | undefined { + return this.opts.pdsAgent + } + + get signingKey(): Keypair { + return this.opts.signingKey + } + + get plcClient(): plc.Client { + return new plc.Client(this.cfg.identity.plcUrl) + } + + get idResolver(): IdResolver { + return this.opts.idResolver + } + + get backgroundQueue(): BackgroundQueue { + return this.opts.backgroundQueue + } + + get authVerifier() { + return auth.authVerifier(this.idResolver, { aud: this.cfg.service.did }) + } + + get authVerifierAnyAudience() { + return auth.authVerifier(this.idResolver, { aud: null }) + } + + get authOptionalVerifierAnyAudience() { + return auth.authOptionalVerifier(this.idResolver, { aud: null }) + } + + get authOptionalVerifier() { + return auth.authOptionalVerifier(this.idResolver, { + aud: this.cfg.service.did, + }) + } + + get authOptionalAccessOrRoleVerifier() { + return auth.authOptionalAccessOrRoleVerifier( + this.idResolver, + this.secrets, + this.cfg.service.did, + ) + } + + get roleVerifier() { + return auth.roleVerifier(this.secrets) + } + + async serviceAuthHeaders(aud: string) { + const iss = this.cfg.service.did + return createServiceAuthHeaders({ + iss, + aud, + keypair: this.signingKey, + }) + } + + async pdsAuth() { + if (!this.cfg.pds) { + return undefined + } + return this.serviceAuthHeaders(this.cfg.pds.did) + } + + async appviewAuth() { + return this.serviceAuthHeaders(this.cfg.appview.did) + } +} + +export default AppContext diff --git a/packages/ozone/src/daemon/context.ts b/packages/ozone/src/daemon/context.ts new file mode 100644 index 00000000000..42c2a54cea5 --- /dev/null +++ b/packages/ozone/src/daemon/context.ts @@ -0,0 +1,90 @@ +import { Keypair, Secp256k1Keypair } from '@atproto/crypto' +import { createServiceAuthHeaders } from '@atproto/xrpc-server' +import AtpAgent from '@atproto/api' +import { OzoneConfig, OzoneSecrets } from '../config' +import { Database } from '../db' +import { EventPusher } from './event-pusher' +import { EventReverser } from './event-reverser' +import { ModerationService, ModerationServiceCreator } from '../mod-service' +import { BackgroundQueue } from '../background' + +export type DaemonContextOptions = { + db: Database + cfg: OzoneConfig + modService: ModerationServiceCreator + signingKey: Keypair + eventPusher: EventPusher + eventReverser: EventReverser +} + +export class DaemonContext { + constructor(private opts: DaemonContextOptions) {} + + static async fromConfig( + cfg: OzoneConfig, + secrets: OzoneSecrets, + overrides?: Partial, + ): Promise { + const db = new Database({ + url: cfg.db.postgresUrl, + schema: cfg.db.postgresSchema, + }) + const signingKey = await Secp256k1Keypair.import(secrets.signingKeyHex) + + const appviewAgent = new AtpAgent({ service: cfg.appview.url }) + const createAuthHeaders = (aud: string) => + createServiceAuthHeaders({ + iss: cfg.service.did, + aud, + keypair: signingKey, + }) + + const appviewAuth = async () => + cfg.appview.did ? createAuthHeaders(cfg.appview.did) : undefined + + const eventPusher = new EventPusher(db, createAuthHeaders, { + appview: cfg.appview, + pds: cfg.pds ?? undefined, + }) + const backgroundQueue = new BackgroundQueue(db) + const modService = ModerationService.creator( + backgroundQueue, + eventPusher, + appviewAgent, + appviewAuth, + ) + const eventReverser = new EventReverser(db, modService) + + return new DaemonContext({ + db, + cfg, + modService, + signingKey, + eventPusher, + eventReverser, + ...(overrides ?? {}), + }) + } + + get db(): Database { + return this.opts.db + } + + get cfg(): OzoneConfig { + return this.opts.cfg + } + + get modService(): ModerationServiceCreator { + return this.opts.modService + } + + get eventPusher(): EventPusher { + return this.opts.eventPusher + } + + get eventReverser(): EventReverser { + return this.opts.eventReverser + } +} + +export default DaemonContext diff --git a/packages/ozone/src/daemon/event-pusher.ts b/packages/ozone/src/daemon/event-pusher.ts new file mode 100644 index 00000000000..faaee4529ed --- /dev/null +++ b/packages/ozone/src/daemon/event-pusher.ts @@ -0,0 +1,296 @@ +import AtpAgent from '@atproto/api' +import { SECOND } from '@atproto/common' +import Database from '../db' +import { retryHttp } from '../util' +import { dbLogger } from '../logger' +import { InputSchema } from '../lexicon/types/com/atproto/admin/updateSubjectStatus' +import assert from 'assert' + +type EventSubject = InputSchema['subject'] + +type PollState = { + timer?: NodeJS.Timer + promise: Promise +} + +type AuthHeaders = { + headers: { + authorization: string + } +} + +type Service = { + agent: AtpAgent + did: string +} + +export class EventPusher { + destroyed = false + + repoPollState: PollState = { + promise: Promise.resolve(), + } + recordPollState: PollState = { + promise: Promise.resolve(), + } + blobPollState: PollState = { + promise: Promise.resolve(), + } + + appview: Service | undefined + pds: Service | undefined + + constructor( + public db: Database, + public createAuthHeaders: (aud: string) => Promise, + services: { + appview?: { + url: string + did: string + } + pds?: { + url: string + did: string + } + }, + ) { + if (services.appview) { + this.appview = { + agent: new AtpAgent({ service: services.appview.url }), + did: services.appview.did, + } + } + if (services.pds) { + this.pds = { + agent: new AtpAgent({ service: services.pds.url }), + did: services.pds.did, + } + } + } + + start() { + this.poll(this.repoPollState, () => this.pushRepoEvents()) + this.poll(this.recordPollState, () => this.pushRecordEvents()) + this.poll(this.blobPollState, () => this.pushBlobEvents()) + } + + poll(state: PollState, fn: () => Promise) { + if (this.destroyed) return + state.promise = fn() + .catch((err) => { + dbLogger.error({ err }, 'event push failed') + }) + .finally(() => { + state.timer = setTimeout(() => this.poll(state, fn), 30 * SECOND) + }) + } + + async processAll() { + await Promise.all([ + this.pushRepoEvents(), + this.pushRecordEvents(), + this.pushBlobEvents(), + this.repoPollState.promise, + this.recordPollState.promise, + this.blobPollState.promise, + ]) + } + + async destroy() { + this.destroyed = true + const destroyState = (state: PollState) => { + if (state.timer) { + clearTimeout(state.timer) + } + return state.promise + } + await Promise.all([ + destroyState(this.repoPollState), + destroyState(this.recordPollState), + destroyState(this.blobPollState), + ]) + } + + async pushRepoEvents() { + const toPush = await this.db.db + .selectFrom('repo_push_event') + .select('id') + .forUpdate() + .skipLocked() + .where('confirmedAt', 'is', null) + .where('attempts', '<', 10) + .execute() + await Promise.all(toPush.map((evt) => this.attemptRepoEvent(evt.id))) + } + + async pushRecordEvents() { + const toPush = await this.db.db + .selectFrom('record_push_event') + .select('id') + .forUpdate() + .skipLocked() + .where('confirmedAt', 'is', null) + .where('attempts', '<', 10) + .execute() + await Promise.all(toPush.map((evt) => this.attemptRecordEvent(evt.id))) + } + + async pushBlobEvents() { + const toPush = await this.db.db + .selectFrom('blob_push_event') + .select('id') + .forUpdate() + .skipLocked() + .where('confirmedAt', 'is', null) + .where('attempts', '<', 10) + .execute() + await Promise.all(toPush.map((evt) => this.attemptBlobEvent(evt.id))) + } + + private async updateSubjectOnService( + service: Service, + subject: EventSubject, + takedownRef: string | null, + ): Promise { + const auth = await this.createAuthHeaders(service.did) + try { + await retryHttp(() => + service.agent.com.atproto.admin.updateSubjectStatus( + { + subject, + takedown: { + applied: !!takedownRef, + ref: takedownRef ?? undefined, + }, + }, + { + ...auth, + encoding: 'application/json', + }, + ), + ) + return true + } catch (err) { + dbLogger.error({ err, subject, takedownRef }, 'failed to push out event') + return false + } + } + + async attemptRepoEvent(id: number) { + await this.db.transaction(async (dbTxn) => { + const evt = await dbTxn.db + .selectFrom('repo_push_event') + .selectAll() + .forUpdate() + .skipLocked() + .where('id', '=', id) + .where('confirmedAt', 'is', null) + .executeTakeFirst() + if (!evt) return + const service = evt.eventType === 'pds_takedown' ? this.pds : this.appview + assert(service) + const subject = { + $type: 'com.atproto.admin.defs#repoRef', + did: evt.subjectDid, + } + const succeeded = await this.updateSubjectOnService( + service, + subject, + evt.takedownRef, + ) + await dbTxn.db + .updateTable('repo_push_event') + .set( + succeeded + ? { confirmedAt: new Date() } + : { + lastAttempted: new Date(), + attempts: evt.attempts ?? 0 + 1, + }, + ) + .where('subjectDid', '=', evt.subjectDid) + .where('eventType', '=', evt.eventType) + .execute() + }) + } + + async attemptRecordEvent(id: number) { + await this.db.transaction(async (dbTxn) => { + const evt = await dbTxn.db + .selectFrom('record_push_event') + .selectAll() + .forUpdate() + .skipLocked() + .where('id', '=', id) + .where('confirmedAt', 'is', null) + .executeTakeFirst() + if (!evt) return + const service = evt.eventType === 'pds_takedown' ? this.pds : this.appview + assert(service) + const subject = { + $type: 'com.atproto.repo.strongRef', + uri: evt.subjectUri, + cid: evt.subjectCid, + } + const succeeded = await this.updateSubjectOnService( + service, + subject, + evt.takedownRef, + ) + await dbTxn.db + .updateTable('record_push_event') + .set( + succeeded + ? { confirmedAt: new Date() } + : { + lastAttempted: new Date(), + attempts: evt.attempts ?? 0 + 1, + }, + ) + .where('subjectUri', '=', evt.subjectUri) + .where('eventType', '=', evt.eventType) + .execute() + }) + } + + async attemptBlobEvent(id: number) { + await this.db.transaction(async (dbTxn) => { + const evt = await dbTxn.db + .selectFrom('blob_push_event') + .selectAll() + .forUpdate() + .skipLocked() + .where('id', '=', id) + .where('confirmedAt', 'is', null) + .executeTakeFirst() + if (!evt) return + + const service = evt.eventType === 'pds_takedown' ? this.pds : this.appview + assert(service) + const subject = { + $type: 'com.atproto.admin.defs#repoBlobRef', + did: evt.subjectDid, + cid: evt.subjectBlobCid, + } + const succeeded = await this.updateSubjectOnService( + service, + subject, + evt.takedownRef, + ) + await dbTxn.db + .updateTable('blob_push_event') + .set( + succeeded + ? { confirmedAt: new Date() } + : { + lastAttempted: new Date(), + attempts: evt.attempts ?? 0 + 1, + }, + ) + .where('subjectDid', '=', evt.subjectDid) + .where('subjectBlobCid', '=', evt.subjectBlobCid) + .where('eventType', '=', evt.eventType) + .execute() + }) + } +} diff --git a/packages/ozone/src/daemon/event-reverser.ts b/packages/ozone/src/daemon/event-reverser.ts new file mode 100644 index 00000000000..ba3f3cb40f7 --- /dev/null +++ b/packages/ozone/src/daemon/event-reverser.ts @@ -0,0 +1,74 @@ +import { MINUTE } from '@atproto/common' +import { dbLogger } from '../logger' +import { ModerationServiceCreator, ReversalSubject } from '../mod-service' +import Database from '../db' + +export class EventReverser { + destroyed = false + reversalPromise: Promise = Promise.resolve() + timer: NodeJS.Timer | undefined + + constructor( + private db: Database, + private modService: ModerationServiceCreator, + ) {} + + start() { + this.poll() + } + + poll() { + if (this.destroyed) return + this.reversalPromise = this.findAndRevertDueActions() + .catch((err) => + dbLogger.error({ err }, 'moderation action reversal errored'), + ) + .finally(() => { + this.timer = setTimeout(() => this.poll(), getInterval()) + }) + } + + async destroy() { + this.destroyed = true + if (this.timer) { + clearTimeout(this.timer) + } + await this.reversalPromise + } + + async revertState(subject: ReversalSubject) { + await this.db.transaction(async (dbTxn) => { + const moderationTxn = this.modService(dbTxn) + const originalEvent = + await moderationTxn.getLastReversibleEventForSubject(subject) + if (originalEvent) { + await moderationTxn.revertState({ + action: originalEvent.action, + createdBy: originalEvent.createdBy, + comment: + '[SCHEDULED_REVERSAL] Reverting action as originally scheduled', + subject: subject.subject, + createdAt: new Date(), + }) + } + }) + } + + async findAndRevertDueActions() { + const moderationService = this.modService(this.db) + const subjectsDueForReversal = + await moderationService.getSubjectsDueForReversal() + + // We shouldn't have too many actions due for reversal at any given time, so running in parallel is probably fine + // Internally, each reversal runs within its own transaction + await Promise.all(subjectsDueForReversal.map(this.revertState.bind(this))) + } +} + +const getInterval = (): number => { + // super basic synchronization by agreeing when the intervals land relative to unix timestamp + const now = Date.now() + const intervalMs = MINUTE + const nextIteration = Math.ceil(now / intervalMs) + return nextIteration * intervalMs - now +} diff --git a/packages/ozone/src/daemon/index.ts b/packages/ozone/src/daemon/index.ts new file mode 100644 index 00000000000..aa5d7b12734 --- /dev/null +++ b/packages/ozone/src/daemon/index.ts @@ -0,0 +1,33 @@ +import { OzoneConfig, OzoneSecrets } from '../config' +import DaemonContext from './context' +import { AppContextOptions } from '../context' + +export { EventPusher } from './event-pusher' +export { EventReverser } from './event-reverser' + +export class OzoneDaemon { + constructor(public ctx: DaemonContext) {} + static async create( + cfg: OzoneConfig, + secrets: OzoneSecrets, + overrides?: Partial, + ): Promise { + const ctx = await DaemonContext.fromConfig(cfg, secrets, overrides) + return new OzoneDaemon(ctx) + } + + async start() { + this.ctx.eventPusher.start() + this.ctx.eventReverser.start() + } + + async processAll() { + await this.ctx.eventPusher.processAll() + } + + async destroy() { + await this.ctx.eventReverser.destroy() + await this.ctx.eventPusher.destroy() + await this.ctx.db.close() + } +} diff --git a/packages/ozone/src/db/index.ts b/packages/ozone/src/db/index.ts new file mode 100644 index 00000000000..85702af2b79 --- /dev/null +++ b/packages/ozone/src/db/index.ts @@ -0,0 +1,197 @@ +import assert from 'assert' +import { + Kysely, + PostgresDialect, + Migrator, + KyselyPlugin, + PluginTransformQueryArgs, + PluginTransformResultArgs, + RootOperationNode, + QueryResult, + UnknownRow, +} from 'kysely' +import TypedEmitter from 'typed-emitter' +import { Pool as PgPool, types as pgTypes } from 'pg' +import DatabaseSchema, { DatabaseSchemaType } from './schema' +import { PgOptions } from './types' +import { dbLogger } from '../logger' +import { EventEmitter } from 'stream' +import * as migrations from './migrations' +import { CtxMigrationProvider } from './migrations/provider' + +export class Database { + pool: PgPool + db: DatabaseSchema + migrator: Migrator + txEvt = new EventEmitter() as TxnEmitter + destroyed = false + isPrimary = false + + constructor( + public opts: PgOptions, + instances?: { db: DatabaseSchema; pool: PgPool }, + ) { + // if instances are provided, use those + if (instances) { + this.db = instances.db + this.pool = instances.pool + return + } + + // else create a pool & connect + const { schema, url } = opts + const pool = + opts.pool ?? + new PgPool({ + connectionString: url, + max: opts.poolSize, + maxUses: opts.poolMaxUses, + idleTimeoutMillis: opts.poolIdleTimeoutMs, + }) + + // Select count(*) and other pg bigints as js integer + pgTypes.setTypeParser(pgTypes.builtins.INT8, (n) => parseInt(n, 10)) + + // Setup schema usage, primarily for test parallelism (each test suite runs in its own pg schema) + if (schema && !/^[a-z_]+$/i.test(schema)) { + throw new Error(`Postgres schema must only contain [A-Za-z_]: ${schema}`) + } + + pool.on('error', onPoolError) + pool.on('connect', (client) => { + client.on('error', onClientError) + // Used for trigram indexes, e.g. on actor search + client.query('SET pg_trgm.word_similarity_threshold TO .4;') + if (schema) { + // Shared objects such as extensions will go in the public schema + client.query(`SET search_path TO "${schema}",public;`) + } + }) + + this.pool = pool + this.db = new Kysely({ + dialect: new PostgresDialect({ pool }), + }) + this.migrator = new Migrator({ + db: this.db, + migrationTableSchema: opts.schema, + provider: new CtxMigrationProvider(migrations, 'pg'), + }) + } + + get schema(): string | undefined { + return this.opts.schema + } + + get isTransaction() { + return this.db.isTransaction + } + + assertTransaction() { + assert(this.isTransaction, 'Transaction required') + } + + assertNotTransaction() { + assert(!this.isTransaction, 'Cannot be in a transaction') + } + + async transaction(fn: (db: Database) => Promise): Promise { + const leakyTxPlugin = new LeakyTxPlugin() + const { dbTxn, txRes } = await this.db + .withPlugin(leakyTxPlugin) + .transaction() + .execute(async (txn) => { + const dbTxn = new Database(this.opts, { + db: txn, + pool: this.pool, + }) + const txRes = await fn(dbTxn) + .catch(async (err) => { + leakyTxPlugin.endTx() + // ensure that all in-flight queries are flushed & the connection is open + await dbTxn.db.getExecutor().provideConnection(noopAsync) + throw err + }) + .finally(() => leakyTxPlugin.endTx()) + return { dbTxn, txRes } + }) + dbTxn?.txEvt.emit('commit') + return txRes + } + + onCommit(fn: () => void) { + this.assertTransaction() + this.txEvt.once('commit', fn) + } + + async close(): Promise { + if (this.destroyed) return + await this.db.destroy() + this.destroyed = true + } + + async migrateToOrThrow(migration: string) { + if (this.schema) { + await this.db.schema.createSchema(this.schema).ifNotExists().execute() + } + const { error, results } = await this.migrator.migrateTo(migration) + if (error) { + throw error + } + if (!results) { + throw new Error('An unknown failure occurred while migrating') + } + return results + } + + async migrateToLatestOrThrow() { + if (this.schema) { + await this.db.schema.createSchema(this.schema).ifNotExists().execute() + } + const { error, results } = await this.migrator.migrateToLatest() + if (error) { + throw error + } + if (!results) { + throw new Error('An unknown failure occurred while migrating') + } + return results + } +} + +export default Database + +const onPoolError = (err: Error) => dbLogger.error({ err }, 'db pool error') +const onClientError = (err: Error) => dbLogger.error({ err }, 'db client error') + +// utils +// ------- + +class LeakyTxPlugin implements KyselyPlugin { + private txOver: boolean + + endTx() { + this.txOver = true + } + + transformQuery(args: PluginTransformQueryArgs): RootOperationNode { + if (this.txOver) { + throw new Error('tx already failed') + } + return args.node + } + + async transformResult( + args: PluginTransformResultArgs, + ): Promise> { + return args.result + } +} + +type TxnEmitter = TypedEmitter + +type TxnEvents = { + commit: () => void +} + +const noopAsync = async () => {} diff --git a/packages/ozone/src/db/migrations/20231219T205730722Z-init.ts b/packages/ozone/src/db/migrations/20231219T205730722Z-init.ts new file mode 100644 index 00000000000..f636f40a3f4 --- /dev/null +++ b/packages/ozone/src/db/migrations/20231219T205730722Z-init.ts @@ -0,0 +1,164 @@ +import { Kysely } from 'kysely' + +export async function up(db: Kysely): Promise { + // Moderation event + await db.schema + .createTable('moderation_event') + .addColumn('id', 'serial', (col) => col.primaryKey()) + .addColumn('action', 'varchar', (col) => col.notNull()) + .addColumn('subjectType', 'varchar', (col) => col.notNull()) + .addColumn('subjectDid', 'varchar', (col) => col.notNull()) + .addColumn('subjectUri', 'varchar') + .addColumn('subjectCid', 'varchar') + .addColumn('comment', 'text') + .addColumn('meta', 'jsonb') + .addColumn('createdAt', 'varchar', (col) => col.notNull()) + .addColumn('createdBy', 'varchar', (col) => col.notNull()) + .addColumn('reversedAt', 'varchar') + .addColumn('reversedBy', 'varchar') + .addColumn('durationInHours', 'integer') + .addColumn('expiresAt', 'varchar') + .addColumn('reversedReason', 'text') + .addColumn('createLabelVals', 'varchar') + .addColumn('negateLabelVals', 'varchar') + .addColumn('legacyRefId', 'integer') + .execute() + + // Moderation subject status + await db.schema + .createTable('moderation_subject_status') + .addColumn('id', 'serial', (col) => col.primaryKey()) + + // Identifiers + .addColumn('did', 'varchar', (col) => col.notNull()) + // Default to '' so that we can apply unique constraints on did and recordPath columns + .addColumn('recordPath', 'varchar', (col) => col.notNull().defaultTo('')) + .addColumn('blobCids', 'jsonb') + .addColumn('recordCid', 'varchar') + + // human review team state + .addColumn('reviewState', 'varchar', (col) => col.notNull()) + .addColumn('comment', 'varchar') + .addColumn('muteUntil', 'varchar') + .addColumn('lastReviewedAt', 'varchar') + .addColumn('lastReviewedBy', 'varchar') + + // report state + .addColumn('lastReportedAt', 'varchar') + .addColumn('lastAppealedAt', 'varchar') + + // visibility/intervention state + .addColumn('takendown', 'boolean', (col) => col.defaultTo(false).notNull()) + .addColumn('suspendUntil', 'varchar') + .addColumn('appealed', 'boolean') + + // timestamps + .addColumn('createdAt', 'varchar', (col) => col.notNull()) + .addColumn('updatedAt', 'varchar', (col) => col.notNull()) + .addUniqueConstraint('moderation_status_unique_idx', ['did', 'recordPath']) + .execute() + + await db.schema + .createIndex('moderation_subject_status_blob_cids_idx') + .on('moderation_subject_status') + .using('gin') + .column('blobCids') + .execute() + + // Label + await db.schema + .createTable('label') + .addColumn('src', 'varchar', (col) => col.notNull()) + .addColumn('uri', 'varchar', (col) => col.notNull()) + .addColumn('cid', 'varchar', (col) => col.notNull()) + .addColumn('val', 'varchar', (col) => col.notNull()) + .addColumn('neg', 'boolean', (col) => col.notNull()) + .addColumn('cts', 'varchar', (col) => col.notNull()) + .addPrimaryKeyConstraint('label_pkey', ['src', 'uri', 'cid', 'val']) + .execute() + await db.schema + .createIndex('label_uri_index') + .on('label') + .column('uri') + .execute() + + // Push Events + await db.schema + .createTable('repo_push_event') + .addColumn('id', 'serial', (col) => col.primaryKey()) + .addColumn('eventType', 'varchar', (col) => col.notNull()) + .addColumn('subjectDid', 'varchar', (col) => col.notNull()) + .addColumn('takedownRef', 'varchar') + .addColumn('confirmedAt', 'timestamptz') + .addColumn('lastAttempted', 'timestamptz') + .addColumn('attempts', 'integer', (col) => col.notNull().defaultTo(0)) + .addUniqueConstraint('repo_push_event_unique_evt', [ + 'subjectDid', + 'eventType', + ]) + .execute() + await db.schema + .createIndex('repo_push_confirmation_idx') + .on('repo_push_event') + .columns(['confirmedAt', 'attempts']) + .execute() + + await db.schema + .createTable('record_push_event') + .addColumn('id', 'serial', (col) => col.primaryKey()) + .addColumn('eventType', 'varchar', (col) => col.notNull()) + .addColumn('subjectDid', 'varchar', (col) => col.notNull()) + .addColumn('subjectUri', 'varchar', (col) => col.notNull()) + .addColumn('subjectCid', 'varchar') + .addColumn('takedownRef', 'varchar') + .addColumn('confirmedAt', 'timestamptz') + .addColumn('lastAttempted', 'timestamptz') + .addColumn('attempts', 'integer', (col) => col.notNull().defaultTo(0)) + .addUniqueConstraint('record_push_event_unique_evt', [ + 'subjectUri', + 'eventType', + ]) + .execute() + await db.schema + .createIndex('record_push_event_did_type_idx') + .on('record_push_event') + .columns(['subjectDid', 'eventType']) + .execute() + await db.schema + .createIndex('record_push_confirmation_idx') + .on('record_push_event') + .columns(['confirmedAt', 'attempts']) + .execute() + + await db.schema + .createTable('blob_push_event') + .addColumn('id', 'serial', (col) => col.primaryKey()) + .addColumn('eventType', 'varchar', (col) => col.notNull()) + .addColumn('subjectDid', 'varchar', (col) => col.notNull()) + .addColumn('subjectBlobCid', 'varchar', (col) => col.notNull()) + .addColumn('subjectUri', 'varchar') + .addColumn('takedownRef', 'varchar') + .addColumn('confirmedAt', 'timestamptz') + .addColumn('lastAttempted', 'timestamptz') + .addColumn('attempts', 'integer', (col) => col.notNull().defaultTo(0)) + .addUniqueConstraint('blob_push_event_unique_evt', [ + 'subjectDid', + 'subjectBlobCid', + 'eventType', + ]) + .execute() + await db.schema + .createIndex('blob_push_confirmation_idx') + .on('blob_push_event') + .columns(['confirmedAt', 'attempts']) + .execute() +} + +export async function down(db: Kysely): Promise { + await db.schema.dropTable('moderation_event').execute() + await db.schema.dropTable('moderation_subject_status').execute() + await db.schema.dropTable('label').execute() + await db.schema.dropTable('repo_push_event').execute() + await db.schema.dropTable('record_push_event').execute() + await db.schema.dropTable('blob_push_event').execute() +} diff --git a/packages/ozone/src/db/migrations/index.ts b/packages/ozone/src/db/migrations/index.ts new file mode 100644 index 00000000000..de73f4b118f --- /dev/null +++ b/packages/ozone/src/db/migrations/index.ts @@ -0,0 +1,5 @@ +// NOTE this file can be edited by hand, but it is also appended to by the migration:create command. +// It's important that every migration is exported from here with the proper name. We'd simplify +// this with kysely's FileMigrationProvider, but it doesn't play nicely with the build process. + +export * as _20231219T205730722Z from './20231219T205730722Z-init' diff --git a/packages/ozone/src/db/migrations/provider.ts b/packages/ozone/src/db/migrations/provider.ts new file mode 100644 index 00000000000..f5e77eec871 --- /dev/null +++ b/packages/ozone/src/db/migrations/provider.ts @@ -0,0 +1,25 @@ +import { Kysely, Migration, MigrationProvider } from 'kysely' + +// Passes a context argument to migrations. We use this to thread the dialect into migrations + +export class CtxMigrationProvider implements MigrationProvider { + constructor( + private migrations: Record>, + private ctx: T, + ) {} + async getMigrations(): Promise> { + const ctxMigrations: Record = {} + Object.entries(this.migrations).forEach(([name, migration]) => { + ctxMigrations[name] = { + up: async (db) => await migration.up(db, this.ctx), + down: async (db) => await migration.down?.(db, this.ctx), + } + }) + return ctxMigrations + } +} + +export interface CtxMigration { + up(db: Kysely, ctx: T): Promise + down?(db: Kysely, ctx: T): Promise +} diff --git a/packages/ozone/src/db/pagination.ts b/packages/ozone/src/db/pagination.ts new file mode 100644 index 00000000000..672da3450dd --- /dev/null +++ b/packages/ozone/src/db/pagination.ts @@ -0,0 +1,216 @@ +import { sql, DynamicModule } from 'kysely' +import { InvalidRequestError } from '@atproto/xrpc-server' +import { AnyQb, DbRef } from './types' + +export type Cursor = { primary: string; secondary: string } +export type LabeledResult = { + primary: string | number + secondary: string | number +} + +/** + * The GenericKeyset is an abstract class that sets-up the interface and partial implementation + * of a keyset-paginated cursor with two parts. There are three types involved: + * - Result: a raw result (i.e. a row from the db) containing data that will make-up a cursor. + * - E.g. { createdAt: '2022-01-01T12:00:00Z', cid: 'bafyx' } + * - LabeledResult: a Result processed such that the "primary" and "secondary" parts of the cursor are labeled. + * - E.g. { primary: '2022-01-01T12:00:00Z', secondary: 'bafyx' } + * - Cursor: the two string parts that make-up the packed/string cursor. + * - E.g. packed cursor '1641038400000::bafyx' in parts { primary: '1641038400000', secondary: 'bafyx' } + * + * These types relate as such. Implementers define the relations marked with a *: + * Result -*-> LabeledResult <-*-> Cursor <--> packed/string cursor + * ↳ SQL Condition + */ +export abstract class GenericKeyset { + constructor(public primary: DbRef, public secondary: DbRef) {} + abstract labelResult(result: R): LR + abstract labeledResultToCursor(labeled: LR): Cursor + abstract cursorToLabeledResult(cursor: Cursor): LR + packFromResult(results: R | R[]): string | undefined { + const result = Array.isArray(results) ? results.at(-1) : results + if (!result) return + return this.pack(this.labelResult(result)) + } + pack(labeled?: LR): string | undefined { + if (!labeled) return + const cursor = this.labeledResultToCursor(labeled) + return this.packCursor(cursor) + } + unpack(cursorStr?: string): LR | undefined { + const cursor = this.unpackCursor(cursorStr) + if (!cursor) return + return this.cursorToLabeledResult(cursor) + } + packCursor(cursor?: Cursor): string | undefined { + if (!cursor) return + return `${cursor.primary}::${cursor.secondary}` + } + unpackCursor(cursorStr?: string): Cursor | undefined { + if (!cursorStr) return + const result = cursorStr.split('::') + const [primary, secondary, ...others] = result + if (!primary || !secondary || others.length > 0) { + throw new InvalidRequestError('Malformed cursor') + } + return { + primary, + secondary, + } + } + getSql(labeled?: LR, direction?: 'asc' | 'desc', tryIndex?: boolean) { + if (labeled === undefined) return + if (tryIndex) { + // The tryIndex param will likely disappear and become the default implementation: here for now for gradual rollout query-by-query. + if (direction === 'asc') { + return sql`((${this.primary}, ${this.secondary}) > (${labeled.primary}, ${labeled.secondary}))` + } else { + return sql`((${this.primary}, ${this.secondary}) < (${labeled.primary}, ${labeled.secondary}))` + } + } else { + // @NOTE this implementation can struggle to use an index on (primary, secondary) for pagination due to the "or" usage. + if (direction === 'asc') { + return sql`((${this.primary} > ${labeled.primary}) or (${this.primary} = ${labeled.primary} and ${this.secondary} > ${labeled.secondary}))` + } else { + return sql`((${this.primary} < ${labeled.primary}) or (${this.primary} = ${labeled.primary} and ${this.secondary} < ${labeled.secondary}))` + } + } + } +} + +type StatusKeysetParam = { + lastReviewedAt: string | null + lastReportedAt: string | null + id: number +} + +export class StatusKeyset extends GenericKeyset { + labelResult(result: StatusKeysetParam): Cursor + labelResult(result: StatusKeysetParam) { + const primaryField = ( + this.primary as ReturnType + ).dynamicReference.includes('lastReviewedAt') + ? 'lastReviewedAt' + : 'lastReportedAt' + + return { + primary: result[primaryField] + ? new Date(`${result[primaryField]}`).getTime().toString() + : '', + secondary: result.id.toString(), + } + } + labeledResultToCursor(labeled: Cursor) { + return { + primary: labeled.primary, + secondary: labeled.secondary, + } + } + cursorToLabeledResult(cursor: Cursor) { + return { + primary: cursor.primary + ? new Date(parseInt(cursor.primary, 10)).toISOString() + : '', + secondary: cursor.secondary, + } + } + unpackCursor(cursorStr?: string): Cursor | undefined { + if (!cursorStr) return + const result = cursorStr.split('::') + const [primary, secondary, ...others] = result + if (!secondary || others.length > 0) { + throw new InvalidRequestError('Malformed cursor') + } + return { + primary, + secondary, + } + } + // This is specifically built to handle nullable columns as primary sorting column + getSql(labeled?: Cursor, direction?: 'asc' | 'desc') { + if (labeled === undefined) return + if (direction === 'asc') { + return !labeled.primary + ? sql`(${this.primary} IS NULL AND ${this.secondary} > ${labeled.secondary})` + : sql`((${this.primary}, ${this.secondary}) > (${labeled.primary}, ${labeled.secondary}) OR (${this.primary} is null))` + } else { + return !labeled.primary + ? sql`(${this.primary} IS NULL AND ${this.secondary} < ${labeled.secondary})` + : sql`((${this.primary}, ${this.secondary}) < (${labeled.primary}, ${labeled.secondary}) OR (${this.primary} is null))` + } + } +} + +type TimeIdKeysetParam = { + id: number + createdAt: string +} +type TimeIdResult = TimeIdKeysetParam + +export class TimeIdKeyset extends GenericKeyset { + labelResult(result: TimeIdResult): Cursor + labelResult(result: TimeIdResult) { + return { primary: result.createdAt, secondary: result.id.toString() } + } + labeledResultToCursor(labeled: Cursor) { + return { + primary: new Date(labeled.primary).getTime().toString(), + secondary: labeled.secondary, + } + } + cursorToLabeledResult(cursor: Cursor) { + const primaryDate = new Date(parseInt(cursor.primary, 10)) + if (isNaN(primaryDate.getTime())) { + throw new InvalidRequestError('Malformed cursor') + } + return { + primary: primaryDate.toISOString(), + secondary: cursor.secondary, + } + } +} + +export const paginate = < + QB extends AnyQb, + K extends GenericKeyset, +>( + qb: QB, + opts: { + limit?: number + cursor?: string + direction?: 'asc' | 'desc' + keyset: K + tryIndex?: boolean + // By default, pg does nullsFirst + nullsLast?: boolean + }, +): QB => { + const { + limit, + cursor, + keyset, + direction = 'desc', + tryIndex, + nullsLast, + } = opts + const keysetSql = keyset.getSql(keyset.unpack(cursor), direction, tryIndex) + return qb + .if(!!limit, (q) => q.limit(limit as number)) + .if(!nullsLast, (q) => + q.orderBy(keyset.primary, direction).orderBy(keyset.secondary, direction), + ) + .if(!!nullsLast, (q) => + q + .orderBy( + direction === 'asc' + ? sql`${keyset.primary} asc nulls last` + : sql`${keyset.primary} desc nulls last`, + ) + .orderBy( + direction === 'asc' + ? sql`${keyset.secondary} asc nulls last` + : sql`${keyset.secondary} desc nulls last`, + ), + ) + .if(!!keysetSql, (qb) => (keysetSql ? qb.where(keysetSql) : qb)) as QB +} diff --git a/packages/ozone/src/db/schema/blob_push_event.ts b/packages/ozone/src/db/schema/blob_push_event.ts new file mode 100644 index 00000000000..f38649e675c --- /dev/null +++ b/packages/ozone/src/db/schema/blob_push_event.ts @@ -0,0 +1,21 @@ +import { Generated } from 'kysely' + +export const eventTableName = 'blob_push_event' + +export type BlobPushEventType = 'pds_takedown' | 'appview_takedown' + +export interface BlobPushEvent { + id: Generated + eventType: BlobPushEventType + subjectDid: string + subjectBlobCid: string + subjectUri: string | null + takedownRef: string | null + confirmedAt: Date | null + lastAttempted: Date | null + attempts: Generated +} + +export type PartialDB = { + [eventTableName]: BlobPushEvent +} diff --git a/packages/ozone/src/db/schema/index.ts b/packages/ozone/src/db/schema/index.ts new file mode 100644 index 00000000000..cee3124ea7c --- /dev/null +++ b/packages/ozone/src/db/schema/index.ts @@ -0,0 +1,18 @@ +import { Kysely } from 'kysely' +import * as modEvent from './moderation_event' +import * as modSubjectStatus from './moderation_subject_status' +import * as repoPushEvent from './repo_push_event' +import * as recordPushEvent from './record_push_event' +import * as blobPushEvent from './blob_push_event' +import * as label from './label' + +export type DatabaseSchemaType = modEvent.PartialDB & + modSubjectStatus.PartialDB & + label.PartialDB & + repoPushEvent.PartialDB & + recordPushEvent.PartialDB & + blobPushEvent.PartialDB + +export type DatabaseSchema = Kysely + +export default DatabaseSchema diff --git a/packages/ozone/src/db/schema/label.ts b/packages/ozone/src/db/schema/label.ts new file mode 100644 index 00000000000..0c8a398a7db --- /dev/null +++ b/packages/ozone/src/db/schema/label.ts @@ -0,0 +1,12 @@ +export const tableName = 'label' + +export interface Label { + src: string + uri: string + cid: string + val: string + neg: boolean + cts: string +} + +export type PartialDB = { [tableName]: Label } diff --git a/packages/ozone/src/db/schema/moderation_event.ts b/packages/ozone/src/db/schema/moderation_event.ts new file mode 100644 index 00000000000..0cf7d07c1e5 --- /dev/null +++ b/packages/ozone/src/db/schema/moderation_event.ts @@ -0,0 +1,35 @@ +import { Generated } from 'kysely' + +export const eventTableName = 'moderation_event' + +export interface ModerationEvent { + id: Generated + action: + | 'com.atproto.admin.defs#modEventTakedown' + | 'com.atproto.admin.defs#modEventAcknowledge' + | 'com.atproto.admin.defs#modEventEscalate' + | 'com.atproto.admin.defs#modEventComment' + | 'com.atproto.admin.defs#modEventLabel' + | 'com.atproto.admin.defs#modEventReport' + | 'com.atproto.admin.defs#modEventMute' + | 'com.atproto.admin.defs#modEventReverseTakedown' + | 'com.atproto.admin.defs#modEventEmail' + | 'com.atproto.admin.defs#modEventResolveAppeal' + subjectType: 'com.atproto.admin.defs#repoRef' | 'com.atproto.repo.strongRef' + subjectDid: string + subjectUri: string | null + subjectCid: string | null + createLabelVals: string | null + negateLabelVals: string | null + comment: string | null + createdAt: string + createdBy: string + durationInHours: number | null + expiresAt: string | null + meta: Record | null + legacyRefId: number | null +} + +export type PartialDB = { + [eventTableName]: ModerationEvent +} diff --git a/packages/ozone/src/db/schema/moderation_subject_status.ts b/packages/ozone/src/db/schema/moderation_subject_status.ts new file mode 100644 index 00000000000..6e67082f31c --- /dev/null +++ b/packages/ozone/src/db/schema/moderation_subject_status.ts @@ -0,0 +1,32 @@ +import { Generated } from 'kysely' +import { + REVIEWCLOSED, + REVIEWOPEN, + REVIEWESCALATED, +} from '../../lexicon/types/com/atproto/admin/defs' + +export const subjectStatusTableName = 'moderation_subject_status' + +export interface ModerationSubjectStatus { + id: Generated + did: string + recordPath: string + recordCid: string | null + blobCids: string[] | null + reviewState: typeof REVIEWCLOSED | typeof REVIEWOPEN | typeof REVIEWESCALATED + createdAt: string + updatedAt: string + lastReviewedBy: string | null + lastReviewedAt: string | null + lastReportedAt: string | null + lastAppealedAt: string | null + muteUntil: string | null + suspendUntil: string | null + takendown: boolean + appealed: boolean | null + comment: string | null +} + +export type PartialDB = { + [subjectStatusTableName]: ModerationSubjectStatus +} diff --git a/packages/ozone/src/db/schema/record_push_event.ts b/packages/ozone/src/db/schema/record_push_event.ts new file mode 100644 index 00000000000..05b24a7ac23 --- /dev/null +++ b/packages/ozone/src/db/schema/record_push_event.ts @@ -0,0 +1,21 @@ +import { Generated } from 'kysely' + +export const eventTableName = 'record_push_event' + +export type RecordPushEventType = 'pds_takedown' | 'appview_takedown' + +export interface RecordPushEvent { + id: Generated + eventType: RecordPushEventType + subjectDid: string + subjectUri: string + subjectCid: string + takedownRef: string | null + confirmedAt: Date | null + lastAttempted: Date | null + attempts: Generated +} + +export type PartialDB = { + [eventTableName]: RecordPushEvent +} diff --git a/packages/ozone/src/db/schema/repo_push_event.ts b/packages/ozone/src/db/schema/repo_push_event.ts new file mode 100644 index 00000000000..fcbca128108 --- /dev/null +++ b/packages/ozone/src/db/schema/repo_push_event.ts @@ -0,0 +1,19 @@ +import { Generated } from 'kysely' + +export const eventTableName = 'repo_push_event' + +export type RepoPushEventType = 'pds_takedown' | 'appview_takedown' + +export interface RepoPushEvent { + id: Generated + eventType: RepoPushEventType + subjectDid: string + takedownRef: string | null + confirmedAt: Date | null + lastAttempted: Date | null + attempts: Generated +} + +export type PartialDB = { + [eventTableName]: RepoPushEvent +} diff --git a/packages/ozone/src/db/types.ts b/packages/ozone/src/db/types.ts new file mode 100644 index 00000000000..c38271ee119 --- /dev/null +++ b/packages/ozone/src/db/types.ts @@ -0,0 +1,15 @@ +import { Pool as PgPool } from 'pg' +import { DynamicModule, RawBuilder, SelectQueryBuilder } from 'kysely' + +export type DbRef = RawBuilder | ReturnType + +export type AnyQb = SelectQueryBuilder + +export type PgOptions = { + url: string + pool?: PgPool + schema?: string + poolSize?: number + poolMaxUses?: number + poolIdleTimeoutMs?: number +} diff --git a/packages/ozone/src/error.ts b/packages/ozone/src/error.ts new file mode 100644 index 00000000000..a4de90f580e --- /dev/null +++ b/packages/ozone/src/error.ts @@ -0,0 +1,12 @@ +import { XRPCError } from '@atproto/xrpc-server' +import { ErrorRequestHandler } from 'express' +import { httpLogger as log } from './logger' + +export const handler: ErrorRequestHandler = (err, _req, res, next) => { + log.error(err, 'unexpected internal server error') + if (res.headersSent) { + return next(err) + } + const serverError = XRPCError.fromError(err) + res.status(serverError.type).json(serverError.payload) +} diff --git a/packages/ozone/src/index.ts b/packages/ozone/src/index.ts new file mode 100644 index 00000000000..9ab7c13a333 --- /dev/null +++ b/packages/ozone/src/index.ts @@ -0,0 +1,102 @@ +import express from 'express' +import http from 'http' +import { AddressInfo } from 'net' +import events from 'events' +import { createHttpTerminator, HttpTerminator } from 'http-terminator' +import cors from 'cors' +import compression from 'compression' +import API, { health, wellKnown } from './api' +import * as error from './error' +import { dbLogger, loggerMiddleware } from './logger' +import { OzoneConfig, OzoneSecrets } from './config' +import { createServer } from './lexicon' +import AppContext, { AppContextOptions } from './context' + +export * from './config' +export { Database } from './db' +export { OzoneDaemon, EventPusher, EventReverser } from './daemon' +export { AppContext } from './context' +export { httpLogger } from './logger' + +export class OzoneService { + public ctx: AppContext + public app: express.Application + public server?: http.Server + private terminator?: HttpTerminator + private dbStatsInterval: NodeJS.Timer + + constructor(opts: { ctx: AppContext; app: express.Application }) { + this.ctx = opts.ctx + this.app = opts.app + } + + static async create( + cfg: OzoneConfig, + secrets: OzoneSecrets, + overrides?: Partial, + ): Promise { + const app = express() + app.set('trust proxy', true) + app.use(cors()) + app.use(loggerMiddleware) + app.use(compression()) + + const ctx = await AppContext.fromConfig(cfg, secrets, overrides) + + let server = createServer({ + validateResponse: false, + payload: { + jsonLimit: 100 * 1024, // 100kb + textLimit: 100 * 1024, // 100kb + blobLimit: 5 * 1024 * 1024, // 5mb + }, + }) + + server = API(server, ctx) + + app.use(health.createRouter(ctx)) + app.use(wellKnown.createRouter(ctx)) + app.use(server.xrpc.router) + app.use(error.handler) + + return new OzoneService({ ctx, app }) + } + + async start(): Promise { + const { db, backgroundQueue } = this.ctx + this.dbStatsInterval = setInterval(() => { + dbLogger.info( + { + idleCount: db.pool.idleCount, + totalCount: db.pool.totalCount, + waitingCount: db.pool.waitingCount, + }, + 'db pool stats', + ) + dbLogger.info( + { + runningCount: backgroundQueue.queue.pending, + waitingCount: backgroundQueue.queue.size, + }, + 'background queue stats', + ) + }, 10000) + const server = this.app.listen(this.ctx.cfg.service.port) + this.server = server + server.keepAliveTimeout = 90000 + this.terminator = createHttpTerminator({ server }) + await events.once(server, 'listening') + const { port } = server.address() as AddressInfo + this.ctx.assignPort(port) + return server + } + + async destroy(): Promise { + await this.terminator?.terminate() + await this.ctx.backgroundQueue.destroy() + await this.ctx.db.close() + clearInterval(this.dbStatsInterval) + } +} + +export default OzoneService diff --git a/packages/ozone/src/lexicon/index.ts b/packages/ozone/src/lexicon/index.ts new file mode 100644 index 00000000000..386f77196e7 --- /dev/null +++ b/packages/ozone/src/lexicon/index.ts @@ -0,0 +1,1626 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { + createServer as createXrpcServer, + Server as XrpcServer, + Options as XrpcOptions, + AuthVerifier, + StreamAuthVerifier, +} from '@atproto/xrpc-server' +import { schemas } from './lexicons' +import * as ComAtprotoAdminDeleteAccount from './types/com/atproto/admin/deleteAccount' +import * as ComAtprotoAdminDisableAccountInvites from './types/com/atproto/admin/disableAccountInvites' +import * as ComAtprotoAdminDisableInviteCodes from './types/com/atproto/admin/disableInviteCodes' +import * as ComAtprotoAdminEmitModerationEvent from './types/com/atproto/admin/emitModerationEvent' +import * as ComAtprotoAdminEnableAccountInvites from './types/com/atproto/admin/enableAccountInvites' +import * as ComAtprotoAdminGetAccountInfo from './types/com/atproto/admin/getAccountInfo' +import * as ComAtprotoAdminGetAccountInfos from './types/com/atproto/admin/getAccountInfos' +import * as ComAtprotoAdminGetInviteCodes from './types/com/atproto/admin/getInviteCodes' +import * as ComAtprotoAdminGetModerationEvent from './types/com/atproto/admin/getModerationEvent' +import * as ComAtprotoAdminGetRecord from './types/com/atproto/admin/getRecord' +import * as ComAtprotoAdminGetRepo from './types/com/atproto/admin/getRepo' +import * as ComAtprotoAdminGetSubjectStatus from './types/com/atproto/admin/getSubjectStatus' +import * as ComAtprotoAdminQueryModerationEvents from './types/com/atproto/admin/queryModerationEvents' +import * as ComAtprotoAdminQueryModerationStatuses from './types/com/atproto/admin/queryModerationStatuses' +import * as ComAtprotoAdminSearchRepos from './types/com/atproto/admin/searchRepos' +import * as ComAtprotoAdminSendEmail from './types/com/atproto/admin/sendEmail' +import * as ComAtprotoAdminUpdateAccountEmail from './types/com/atproto/admin/updateAccountEmail' +import * as ComAtprotoAdminUpdateAccountHandle from './types/com/atproto/admin/updateAccountHandle' +import * as ComAtprotoAdminUpdateSubjectStatus from './types/com/atproto/admin/updateSubjectStatus' +import * as ComAtprotoIdentityResolveHandle from './types/com/atproto/identity/resolveHandle' +import * as ComAtprotoIdentityUpdateHandle from './types/com/atproto/identity/updateHandle' +import * as ComAtprotoLabelQueryLabels from './types/com/atproto/label/queryLabels' +import * as ComAtprotoLabelSubscribeLabels from './types/com/atproto/label/subscribeLabels' +import * as ComAtprotoModerationCreateReport from './types/com/atproto/moderation/createReport' +import * as ComAtprotoRepoApplyWrites from './types/com/atproto/repo/applyWrites' +import * as ComAtprotoRepoCreateRecord from './types/com/atproto/repo/createRecord' +import * as ComAtprotoRepoDeleteRecord from './types/com/atproto/repo/deleteRecord' +import * as ComAtprotoRepoDescribeRepo from './types/com/atproto/repo/describeRepo' +import * as ComAtprotoRepoGetRecord from './types/com/atproto/repo/getRecord' +import * as ComAtprotoRepoListRecords from './types/com/atproto/repo/listRecords' +import * as ComAtprotoRepoPutRecord from './types/com/atproto/repo/putRecord' +import * as ComAtprotoRepoUploadBlob from './types/com/atproto/repo/uploadBlob' +import * as ComAtprotoServerConfirmEmail from './types/com/atproto/server/confirmEmail' +import * as ComAtprotoServerCreateAccount from './types/com/atproto/server/createAccount' +import * as ComAtprotoServerCreateAppPassword from './types/com/atproto/server/createAppPassword' +import * as ComAtprotoServerCreateInviteCode from './types/com/atproto/server/createInviteCode' +import * as ComAtprotoServerCreateInviteCodes from './types/com/atproto/server/createInviteCodes' +import * as ComAtprotoServerCreateSession from './types/com/atproto/server/createSession' +import * as ComAtprotoServerDeleteAccount from './types/com/atproto/server/deleteAccount' +import * as ComAtprotoServerDeleteSession from './types/com/atproto/server/deleteSession' +import * as ComAtprotoServerDescribeServer from './types/com/atproto/server/describeServer' +import * as ComAtprotoServerGetAccountInviteCodes from './types/com/atproto/server/getAccountInviteCodes' +import * as ComAtprotoServerGetSession from './types/com/atproto/server/getSession' +import * as ComAtprotoServerListAppPasswords from './types/com/atproto/server/listAppPasswords' +import * as ComAtprotoServerRefreshSession from './types/com/atproto/server/refreshSession' +import * as ComAtprotoServerRequestAccountDelete from './types/com/atproto/server/requestAccountDelete' +import * as ComAtprotoServerRequestEmailConfirmation from './types/com/atproto/server/requestEmailConfirmation' +import * as ComAtprotoServerRequestEmailUpdate from './types/com/atproto/server/requestEmailUpdate' +import * as ComAtprotoServerRequestPasswordReset from './types/com/atproto/server/requestPasswordReset' +import * as ComAtprotoServerReserveSigningKey from './types/com/atproto/server/reserveSigningKey' +import * as ComAtprotoServerResetPassword from './types/com/atproto/server/resetPassword' +import * as ComAtprotoServerRevokeAppPassword from './types/com/atproto/server/revokeAppPassword' +import * as ComAtprotoServerUpdateEmail from './types/com/atproto/server/updateEmail' +import * as ComAtprotoSyncGetBlob from './types/com/atproto/sync/getBlob' +import * as ComAtprotoSyncGetBlocks from './types/com/atproto/sync/getBlocks' +import * as ComAtprotoSyncGetCheckout from './types/com/atproto/sync/getCheckout' +import * as ComAtprotoSyncGetHead from './types/com/atproto/sync/getHead' +import * as ComAtprotoSyncGetLatestCommit from './types/com/atproto/sync/getLatestCommit' +import * as ComAtprotoSyncGetRecord from './types/com/atproto/sync/getRecord' +import * as ComAtprotoSyncGetRepo from './types/com/atproto/sync/getRepo' +import * as ComAtprotoSyncListBlobs from './types/com/atproto/sync/listBlobs' +import * as ComAtprotoSyncListRepos from './types/com/atproto/sync/listRepos' +import * as ComAtprotoSyncNotifyOfUpdate from './types/com/atproto/sync/notifyOfUpdate' +import * as ComAtprotoSyncRequestCrawl from './types/com/atproto/sync/requestCrawl' +import * as ComAtprotoSyncSubscribeRepos from './types/com/atproto/sync/subscribeRepos' +import * as ComAtprotoTempFetchLabels from './types/com/atproto/temp/fetchLabels' +import * as ComAtprotoTempImportRepo from './types/com/atproto/temp/importRepo' +import * as ComAtprotoTempPushBlob from './types/com/atproto/temp/pushBlob' +import * as ComAtprotoTempTransferAccount from './types/com/atproto/temp/transferAccount' +import * as AppBskyActorGetPreferences from './types/app/bsky/actor/getPreferences' +import * as AppBskyActorGetProfile from './types/app/bsky/actor/getProfile' +import * as AppBskyActorGetProfiles from './types/app/bsky/actor/getProfiles' +import * as AppBskyActorGetSuggestions from './types/app/bsky/actor/getSuggestions' +import * as AppBskyActorPutPreferences from './types/app/bsky/actor/putPreferences' +import * as AppBskyActorSearchActors from './types/app/bsky/actor/searchActors' +import * as AppBskyActorSearchActorsTypeahead from './types/app/bsky/actor/searchActorsTypeahead' +import * as AppBskyFeedDescribeFeedGenerator from './types/app/bsky/feed/describeFeedGenerator' +import * as AppBskyFeedGetActorFeeds from './types/app/bsky/feed/getActorFeeds' +import * as AppBskyFeedGetActorLikes from './types/app/bsky/feed/getActorLikes' +import * as AppBskyFeedGetAuthorFeed from './types/app/bsky/feed/getAuthorFeed' +import * as AppBskyFeedGetFeed from './types/app/bsky/feed/getFeed' +import * as AppBskyFeedGetFeedGenerator from './types/app/bsky/feed/getFeedGenerator' +import * as AppBskyFeedGetFeedGenerators from './types/app/bsky/feed/getFeedGenerators' +import * as AppBskyFeedGetFeedSkeleton from './types/app/bsky/feed/getFeedSkeleton' +import * as AppBskyFeedGetLikes from './types/app/bsky/feed/getLikes' +import * as AppBskyFeedGetListFeed from './types/app/bsky/feed/getListFeed' +import * as AppBskyFeedGetPostThread from './types/app/bsky/feed/getPostThread' +import * as AppBskyFeedGetPosts from './types/app/bsky/feed/getPosts' +import * as AppBskyFeedGetRepostedBy from './types/app/bsky/feed/getRepostedBy' +import * as AppBskyFeedGetSuggestedFeeds from './types/app/bsky/feed/getSuggestedFeeds' +import * as AppBskyFeedGetTimeline from './types/app/bsky/feed/getTimeline' +import * as AppBskyFeedSearchPosts from './types/app/bsky/feed/searchPosts' +import * as AppBskyGraphGetBlocks from './types/app/bsky/graph/getBlocks' +import * as AppBskyGraphGetFollowers from './types/app/bsky/graph/getFollowers' +import * as AppBskyGraphGetFollows from './types/app/bsky/graph/getFollows' +import * as AppBskyGraphGetList from './types/app/bsky/graph/getList' +import * as AppBskyGraphGetListBlocks from './types/app/bsky/graph/getListBlocks' +import * as AppBskyGraphGetListMutes from './types/app/bsky/graph/getListMutes' +import * as AppBskyGraphGetLists from './types/app/bsky/graph/getLists' +import * as AppBskyGraphGetMutes from './types/app/bsky/graph/getMutes' +import * as AppBskyGraphGetSuggestedFollowsByActor from './types/app/bsky/graph/getSuggestedFollowsByActor' +import * as AppBskyGraphMuteActor from './types/app/bsky/graph/muteActor' +import * as AppBskyGraphMuteActorList from './types/app/bsky/graph/muteActorList' +import * as AppBskyGraphUnmuteActor from './types/app/bsky/graph/unmuteActor' +import * as AppBskyGraphUnmuteActorList from './types/app/bsky/graph/unmuteActorList' +import * as AppBskyNotificationGetUnreadCount from './types/app/bsky/notification/getUnreadCount' +import * as AppBskyNotificationListNotifications from './types/app/bsky/notification/listNotifications' +import * as AppBskyNotificationRegisterPush from './types/app/bsky/notification/registerPush' +import * as AppBskyNotificationUpdateSeen from './types/app/bsky/notification/updateSeen' +import * as AppBskyUnspeccedGetPopular from './types/app/bsky/unspecced/getPopular' +import * as AppBskyUnspeccedGetPopularFeedGenerators from './types/app/bsky/unspecced/getPopularFeedGenerators' +import * as AppBskyUnspeccedGetTimelineSkeleton from './types/app/bsky/unspecced/getTimelineSkeleton' +import * as AppBskyUnspeccedSearchActorsSkeleton from './types/app/bsky/unspecced/searchActorsSkeleton' +import * as AppBskyUnspeccedSearchPostsSkeleton from './types/app/bsky/unspecced/searchPostsSkeleton' + +export const COM_ATPROTO_ADMIN = { + DefsReviewOpen: 'com.atproto.admin.defs#reviewOpen', + DefsReviewEscalated: 'com.atproto.admin.defs#reviewEscalated', + DefsReviewClosed: 'com.atproto.admin.defs#reviewClosed', +} +export const COM_ATPROTO_MODERATION = { + DefsReasonSpam: 'com.atproto.moderation.defs#reasonSpam', + DefsReasonViolation: 'com.atproto.moderation.defs#reasonViolation', + DefsReasonMisleading: 'com.atproto.moderation.defs#reasonMisleading', + DefsReasonSexual: 'com.atproto.moderation.defs#reasonSexual', + DefsReasonRude: 'com.atproto.moderation.defs#reasonRude', + DefsReasonOther: 'com.atproto.moderation.defs#reasonOther', + DefsReasonAppeal: 'com.atproto.moderation.defs#reasonAppeal', +} +export const APP_BSKY_GRAPH = { + DefsModlist: 'app.bsky.graph.defs#modlist', + DefsCuratelist: 'app.bsky.graph.defs#curatelist', +} + +export function createServer(options?: XrpcOptions): Server { + return new Server(options) +} + +export class Server { + xrpc: XrpcServer + com: ComNS + app: AppNS + + constructor(options?: XrpcOptions) { + this.xrpc = createXrpcServer(schemas, options) + this.com = new ComNS(this) + this.app = new AppNS(this) + } +} + +export class ComNS { + _server: Server + atproto: AtprotoNS + + constructor(server: Server) { + this._server = server + this.atproto = new AtprotoNS(server) + } +} + +export class AtprotoNS { + _server: Server + admin: AdminNS + identity: IdentityNS + label: LabelNS + moderation: ModerationNS + repo: RepoNS + server: ServerNS + sync: SyncNS + temp: TempNS + + constructor(server: Server) { + this._server = server + this.admin = new AdminNS(server) + this.identity = new IdentityNS(server) + this.label = new LabelNS(server) + this.moderation = new ModerationNS(server) + this.repo = new RepoNS(server) + this.server = new ServerNS(server) + this.sync = new SyncNS(server) + this.temp = new TempNS(server) + } +} + +export class AdminNS { + _server: Server + + constructor(server: Server) { + this._server = server + } + + deleteAccount( + cfg: ConfigOf< + AV, + ComAtprotoAdminDeleteAccount.Handler>, + ComAtprotoAdminDeleteAccount.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.admin.deleteAccount' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + disableAccountInvites( + cfg: ConfigOf< + AV, + ComAtprotoAdminDisableAccountInvites.Handler>, + ComAtprotoAdminDisableAccountInvites.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.admin.disableAccountInvites' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + disableInviteCodes( + cfg: ConfigOf< + AV, + ComAtprotoAdminDisableInviteCodes.Handler>, + ComAtprotoAdminDisableInviteCodes.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.admin.disableInviteCodes' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + emitModerationEvent( + cfg: ConfigOf< + AV, + ComAtprotoAdminEmitModerationEvent.Handler>, + ComAtprotoAdminEmitModerationEvent.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.admin.emitModerationEvent' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + enableAccountInvites( + cfg: ConfigOf< + AV, + ComAtprotoAdminEnableAccountInvites.Handler>, + ComAtprotoAdminEnableAccountInvites.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.admin.enableAccountInvites' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getAccountInfo( + cfg: ConfigOf< + AV, + ComAtprotoAdminGetAccountInfo.Handler>, + ComAtprotoAdminGetAccountInfo.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.admin.getAccountInfo' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getAccountInfos( + cfg: ConfigOf< + AV, + ComAtprotoAdminGetAccountInfos.Handler>, + ComAtprotoAdminGetAccountInfos.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.admin.getAccountInfos' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getInviteCodes( + cfg: ConfigOf< + AV, + ComAtprotoAdminGetInviteCodes.Handler>, + ComAtprotoAdminGetInviteCodes.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.admin.getInviteCodes' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getModerationEvent( + cfg: ConfigOf< + AV, + ComAtprotoAdminGetModerationEvent.Handler>, + ComAtprotoAdminGetModerationEvent.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.admin.getModerationEvent' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getRecord( + cfg: ConfigOf< + AV, + ComAtprotoAdminGetRecord.Handler>, + ComAtprotoAdminGetRecord.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.admin.getRecord' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getRepo( + cfg: ConfigOf< + AV, + ComAtprotoAdminGetRepo.Handler>, + ComAtprotoAdminGetRepo.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.admin.getRepo' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getSubjectStatus( + cfg: ConfigOf< + AV, + ComAtprotoAdminGetSubjectStatus.Handler>, + ComAtprotoAdminGetSubjectStatus.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.admin.getSubjectStatus' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + queryModerationEvents( + cfg: ConfigOf< + AV, + ComAtprotoAdminQueryModerationEvents.Handler>, + ComAtprotoAdminQueryModerationEvents.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.admin.queryModerationEvents' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + queryModerationStatuses( + cfg: ConfigOf< + AV, + ComAtprotoAdminQueryModerationStatuses.Handler>, + ComAtprotoAdminQueryModerationStatuses.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.admin.queryModerationStatuses' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + searchRepos( + cfg: ConfigOf< + AV, + ComAtprotoAdminSearchRepos.Handler>, + ComAtprotoAdminSearchRepos.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.admin.searchRepos' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + sendEmail( + cfg: ConfigOf< + AV, + ComAtprotoAdminSendEmail.Handler>, + ComAtprotoAdminSendEmail.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.admin.sendEmail' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + updateAccountEmail( + cfg: ConfigOf< + AV, + ComAtprotoAdminUpdateAccountEmail.Handler>, + ComAtprotoAdminUpdateAccountEmail.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.admin.updateAccountEmail' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + updateAccountHandle( + cfg: ConfigOf< + AV, + ComAtprotoAdminUpdateAccountHandle.Handler>, + ComAtprotoAdminUpdateAccountHandle.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.admin.updateAccountHandle' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + updateSubjectStatus( + cfg: ConfigOf< + AV, + ComAtprotoAdminUpdateSubjectStatus.Handler>, + ComAtprotoAdminUpdateSubjectStatus.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.admin.updateSubjectStatus' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } +} + +export class IdentityNS { + _server: Server + + constructor(server: Server) { + this._server = server + } + + resolveHandle( + cfg: ConfigOf< + AV, + ComAtprotoIdentityResolveHandle.Handler>, + ComAtprotoIdentityResolveHandle.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.identity.resolveHandle' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + updateHandle( + cfg: ConfigOf< + AV, + ComAtprotoIdentityUpdateHandle.Handler>, + ComAtprotoIdentityUpdateHandle.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.identity.updateHandle' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } +} + +export class LabelNS { + _server: Server + + constructor(server: Server) { + this._server = server + } + + queryLabels( + cfg: ConfigOf< + AV, + ComAtprotoLabelQueryLabels.Handler>, + ComAtprotoLabelQueryLabels.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.label.queryLabels' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + subscribeLabels( + cfg: ConfigOf< + AV, + ComAtprotoLabelSubscribeLabels.Handler>, + ComAtprotoLabelSubscribeLabels.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.label.subscribeLabels' // @ts-ignore + return this._server.xrpc.streamMethod(nsid, cfg) + } +} + +export class ModerationNS { + _server: Server + + constructor(server: Server) { + this._server = server + } + + createReport( + cfg: ConfigOf< + AV, + ComAtprotoModerationCreateReport.Handler>, + ComAtprotoModerationCreateReport.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.moderation.createReport' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } +} + +export class RepoNS { + _server: Server + + constructor(server: Server) { + this._server = server + } + + applyWrites( + cfg: ConfigOf< + AV, + ComAtprotoRepoApplyWrites.Handler>, + ComAtprotoRepoApplyWrites.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.repo.applyWrites' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + createRecord( + cfg: ConfigOf< + AV, + ComAtprotoRepoCreateRecord.Handler>, + ComAtprotoRepoCreateRecord.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.repo.createRecord' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + deleteRecord( + cfg: ConfigOf< + AV, + ComAtprotoRepoDeleteRecord.Handler>, + ComAtprotoRepoDeleteRecord.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.repo.deleteRecord' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + describeRepo( + cfg: ConfigOf< + AV, + ComAtprotoRepoDescribeRepo.Handler>, + ComAtprotoRepoDescribeRepo.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.repo.describeRepo' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getRecord( + cfg: ConfigOf< + AV, + ComAtprotoRepoGetRecord.Handler>, + ComAtprotoRepoGetRecord.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.repo.getRecord' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + listRecords( + cfg: ConfigOf< + AV, + ComAtprotoRepoListRecords.Handler>, + ComAtprotoRepoListRecords.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.repo.listRecords' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + putRecord( + cfg: ConfigOf< + AV, + ComAtprotoRepoPutRecord.Handler>, + ComAtprotoRepoPutRecord.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.repo.putRecord' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + uploadBlob( + cfg: ConfigOf< + AV, + ComAtprotoRepoUploadBlob.Handler>, + ComAtprotoRepoUploadBlob.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.repo.uploadBlob' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } +} + +export class ServerNS { + _server: Server + + constructor(server: Server) { + this._server = server + } + + confirmEmail( + cfg: ConfigOf< + AV, + ComAtprotoServerConfirmEmail.Handler>, + ComAtprotoServerConfirmEmail.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.server.confirmEmail' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + createAccount( + cfg: ConfigOf< + AV, + ComAtprotoServerCreateAccount.Handler>, + ComAtprotoServerCreateAccount.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.server.createAccount' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + createAppPassword( + cfg: ConfigOf< + AV, + ComAtprotoServerCreateAppPassword.Handler>, + ComAtprotoServerCreateAppPassword.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.server.createAppPassword' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + createInviteCode( + cfg: ConfigOf< + AV, + ComAtprotoServerCreateInviteCode.Handler>, + ComAtprotoServerCreateInviteCode.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.server.createInviteCode' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + createInviteCodes( + cfg: ConfigOf< + AV, + ComAtprotoServerCreateInviteCodes.Handler>, + ComAtprotoServerCreateInviteCodes.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.server.createInviteCodes' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + createSession( + cfg: ConfigOf< + AV, + ComAtprotoServerCreateSession.Handler>, + ComAtprotoServerCreateSession.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.server.createSession' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + deleteAccount( + cfg: ConfigOf< + AV, + ComAtprotoServerDeleteAccount.Handler>, + ComAtprotoServerDeleteAccount.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.server.deleteAccount' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + deleteSession( + cfg: ConfigOf< + AV, + ComAtprotoServerDeleteSession.Handler>, + ComAtprotoServerDeleteSession.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.server.deleteSession' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + describeServer( + cfg: ConfigOf< + AV, + ComAtprotoServerDescribeServer.Handler>, + ComAtprotoServerDescribeServer.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.server.describeServer' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getAccountInviteCodes( + cfg: ConfigOf< + AV, + ComAtprotoServerGetAccountInviteCodes.Handler>, + ComAtprotoServerGetAccountInviteCodes.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.server.getAccountInviteCodes' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getSession( + cfg: ConfigOf< + AV, + ComAtprotoServerGetSession.Handler>, + ComAtprotoServerGetSession.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.server.getSession' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + listAppPasswords( + cfg: ConfigOf< + AV, + ComAtprotoServerListAppPasswords.Handler>, + ComAtprotoServerListAppPasswords.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.server.listAppPasswords' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + refreshSession( + cfg: ConfigOf< + AV, + ComAtprotoServerRefreshSession.Handler>, + ComAtprotoServerRefreshSession.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.server.refreshSession' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + requestAccountDelete( + cfg: ConfigOf< + AV, + ComAtprotoServerRequestAccountDelete.Handler>, + ComAtprotoServerRequestAccountDelete.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.server.requestAccountDelete' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + requestEmailConfirmation( + cfg: ConfigOf< + AV, + ComAtprotoServerRequestEmailConfirmation.Handler>, + ComAtprotoServerRequestEmailConfirmation.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.server.requestEmailConfirmation' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + requestEmailUpdate( + cfg: ConfigOf< + AV, + ComAtprotoServerRequestEmailUpdate.Handler>, + ComAtprotoServerRequestEmailUpdate.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.server.requestEmailUpdate' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + requestPasswordReset( + cfg: ConfigOf< + AV, + ComAtprotoServerRequestPasswordReset.Handler>, + ComAtprotoServerRequestPasswordReset.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.server.requestPasswordReset' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + reserveSigningKey( + cfg: ConfigOf< + AV, + ComAtprotoServerReserveSigningKey.Handler>, + ComAtprotoServerReserveSigningKey.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.server.reserveSigningKey' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + resetPassword( + cfg: ConfigOf< + AV, + ComAtprotoServerResetPassword.Handler>, + ComAtprotoServerResetPassword.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.server.resetPassword' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + revokeAppPassword( + cfg: ConfigOf< + AV, + ComAtprotoServerRevokeAppPassword.Handler>, + ComAtprotoServerRevokeAppPassword.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.server.revokeAppPassword' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + updateEmail( + cfg: ConfigOf< + AV, + ComAtprotoServerUpdateEmail.Handler>, + ComAtprotoServerUpdateEmail.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.server.updateEmail' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } +} + +export class SyncNS { + _server: Server + + constructor(server: Server) { + this._server = server + } + + getBlob( + cfg: ConfigOf< + AV, + ComAtprotoSyncGetBlob.Handler>, + ComAtprotoSyncGetBlob.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.sync.getBlob' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getBlocks( + cfg: ConfigOf< + AV, + ComAtprotoSyncGetBlocks.Handler>, + ComAtprotoSyncGetBlocks.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.sync.getBlocks' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getCheckout( + cfg: ConfigOf< + AV, + ComAtprotoSyncGetCheckout.Handler>, + ComAtprotoSyncGetCheckout.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.sync.getCheckout' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getHead( + cfg: ConfigOf< + AV, + ComAtprotoSyncGetHead.Handler>, + ComAtprotoSyncGetHead.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.sync.getHead' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getLatestCommit( + cfg: ConfigOf< + AV, + ComAtprotoSyncGetLatestCommit.Handler>, + ComAtprotoSyncGetLatestCommit.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.sync.getLatestCommit' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getRecord( + cfg: ConfigOf< + AV, + ComAtprotoSyncGetRecord.Handler>, + ComAtprotoSyncGetRecord.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.sync.getRecord' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getRepo( + cfg: ConfigOf< + AV, + ComAtprotoSyncGetRepo.Handler>, + ComAtprotoSyncGetRepo.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.sync.getRepo' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + listBlobs( + cfg: ConfigOf< + AV, + ComAtprotoSyncListBlobs.Handler>, + ComAtprotoSyncListBlobs.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.sync.listBlobs' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + listRepos( + cfg: ConfigOf< + AV, + ComAtprotoSyncListRepos.Handler>, + ComAtprotoSyncListRepos.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.sync.listRepos' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + notifyOfUpdate( + cfg: ConfigOf< + AV, + ComAtprotoSyncNotifyOfUpdate.Handler>, + ComAtprotoSyncNotifyOfUpdate.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.sync.notifyOfUpdate' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + requestCrawl( + cfg: ConfigOf< + AV, + ComAtprotoSyncRequestCrawl.Handler>, + ComAtprotoSyncRequestCrawl.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.sync.requestCrawl' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + subscribeRepos( + cfg: ConfigOf< + AV, + ComAtprotoSyncSubscribeRepos.Handler>, + ComAtprotoSyncSubscribeRepos.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.sync.subscribeRepos' // @ts-ignore + return this._server.xrpc.streamMethod(nsid, cfg) + } +} + +export class TempNS { + _server: Server + + constructor(server: Server) { + this._server = server + } + + fetchLabels( + cfg: ConfigOf< + AV, + ComAtprotoTempFetchLabels.Handler>, + ComAtprotoTempFetchLabels.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.temp.fetchLabels' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + importRepo( + cfg: ConfigOf< + AV, + ComAtprotoTempImportRepo.Handler>, + ComAtprotoTempImportRepo.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.temp.importRepo' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + pushBlob( + cfg: ConfigOf< + AV, + ComAtprotoTempPushBlob.Handler>, + ComAtprotoTempPushBlob.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.temp.pushBlob' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + transferAccount( + cfg: ConfigOf< + AV, + ComAtprotoTempTransferAccount.Handler>, + ComAtprotoTempTransferAccount.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.temp.transferAccount' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } +} + +export class AppNS { + _server: Server + bsky: BskyNS + + constructor(server: Server) { + this._server = server + this.bsky = new BskyNS(server) + } +} + +export class BskyNS { + _server: Server + actor: ActorNS + embed: EmbedNS + feed: FeedNS + graph: GraphNS + notification: NotificationNS + richtext: RichtextNS + unspecced: UnspeccedNS + + constructor(server: Server) { + this._server = server + this.actor = new ActorNS(server) + this.embed = new EmbedNS(server) + this.feed = new FeedNS(server) + this.graph = new GraphNS(server) + this.notification = new NotificationNS(server) + this.richtext = new RichtextNS(server) + this.unspecced = new UnspeccedNS(server) + } +} + +export class ActorNS { + _server: Server + + constructor(server: Server) { + this._server = server + } + + getPreferences( + cfg: ConfigOf< + AV, + AppBskyActorGetPreferences.Handler>, + AppBskyActorGetPreferences.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.actor.getPreferences' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getProfile( + cfg: ConfigOf< + AV, + AppBskyActorGetProfile.Handler>, + AppBskyActorGetProfile.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.actor.getProfile' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getProfiles( + cfg: ConfigOf< + AV, + AppBskyActorGetProfiles.Handler>, + AppBskyActorGetProfiles.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.actor.getProfiles' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getSuggestions( + cfg: ConfigOf< + AV, + AppBskyActorGetSuggestions.Handler>, + AppBskyActorGetSuggestions.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.actor.getSuggestions' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + putPreferences( + cfg: ConfigOf< + AV, + AppBskyActorPutPreferences.Handler>, + AppBskyActorPutPreferences.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.actor.putPreferences' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + searchActors( + cfg: ConfigOf< + AV, + AppBskyActorSearchActors.Handler>, + AppBskyActorSearchActors.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.actor.searchActors' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + searchActorsTypeahead( + cfg: ConfigOf< + AV, + AppBskyActorSearchActorsTypeahead.Handler>, + AppBskyActorSearchActorsTypeahead.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.actor.searchActorsTypeahead' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } +} + +export class EmbedNS { + _server: Server + + constructor(server: Server) { + this._server = server + } +} + +export class FeedNS { + _server: Server + + constructor(server: Server) { + this._server = server + } + + describeFeedGenerator( + cfg: ConfigOf< + AV, + AppBskyFeedDescribeFeedGenerator.Handler>, + AppBskyFeedDescribeFeedGenerator.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.feed.describeFeedGenerator' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getActorFeeds( + cfg: ConfigOf< + AV, + AppBskyFeedGetActorFeeds.Handler>, + AppBskyFeedGetActorFeeds.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.feed.getActorFeeds' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getActorLikes( + cfg: ConfigOf< + AV, + AppBskyFeedGetActorLikes.Handler>, + AppBskyFeedGetActorLikes.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.feed.getActorLikes' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getAuthorFeed( + cfg: ConfigOf< + AV, + AppBskyFeedGetAuthorFeed.Handler>, + AppBskyFeedGetAuthorFeed.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.feed.getAuthorFeed' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getFeed( + cfg: ConfigOf< + AV, + AppBskyFeedGetFeed.Handler>, + AppBskyFeedGetFeed.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.feed.getFeed' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getFeedGenerator( + cfg: ConfigOf< + AV, + AppBskyFeedGetFeedGenerator.Handler>, + AppBskyFeedGetFeedGenerator.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.feed.getFeedGenerator' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getFeedGenerators( + cfg: ConfigOf< + AV, + AppBskyFeedGetFeedGenerators.Handler>, + AppBskyFeedGetFeedGenerators.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.feed.getFeedGenerators' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getFeedSkeleton( + cfg: ConfigOf< + AV, + AppBskyFeedGetFeedSkeleton.Handler>, + AppBskyFeedGetFeedSkeleton.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.feed.getFeedSkeleton' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getLikes( + cfg: ConfigOf< + AV, + AppBskyFeedGetLikes.Handler>, + AppBskyFeedGetLikes.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.feed.getLikes' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getListFeed( + cfg: ConfigOf< + AV, + AppBskyFeedGetListFeed.Handler>, + AppBskyFeedGetListFeed.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.feed.getListFeed' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getPostThread( + cfg: ConfigOf< + AV, + AppBskyFeedGetPostThread.Handler>, + AppBskyFeedGetPostThread.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.feed.getPostThread' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getPosts( + cfg: ConfigOf< + AV, + AppBskyFeedGetPosts.Handler>, + AppBskyFeedGetPosts.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.feed.getPosts' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getRepostedBy( + cfg: ConfigOf< + AV, + AppBskyFeedGetRepostedBy.Handler>, + AppBskyFeedGetRepostedBy.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.feed.getRepostedBy' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getSuggestedFeeds( + cfg: ConfigOf< + AV, + AppBskyFeedGetSuggestedFeeds.Handler>, + AppBskyFeedGetSuggestedFeeds.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.feed.getSuggestedFeeds' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getTimeline( + cfg: ConfigOf< + AV, + AppBskyFeedGetTimeline.Handler>, + AppBskyFeedGetTimeline.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.feed.getTimeline' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + searchPosts( + cfg: ConfigOf< + AV, + AppBskyFeedSearchPosts.Handler>, + AppBskyFeedSearchPosts.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.feed.searchPosts' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } +} + +export class GraphNS { + _server: Server + + constructor(server: Server) { + this._server = server + } + + getBlocks( + cfg: ConfigOf< + AV, + AppBskyGraphGetBlocks.Handler>, + AppBskyGraphGetBlocks.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.graph.getBlocks' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getFollowers( + cfg: ConfigOf< + AV, + AppBskyGraphGetFollowers.Handler>, + AppBskyGraphGetFollowers.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.graph.getFollowers' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getFollows( + cfg: ConfigOf< + AV, + AppBskyGraphGetFollows.Handler>, + AppBskyGraphGetFollows.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.graph.getFollows' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getList( + cfg: ConfigOf< + AV, + AppBskyGraphGetList.Handler>, + AppBskyGraphGetList.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.graph.getList' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getListBlocks( + cfg: ConfigOf< + AV, + AppBskyGraphGetListBlocks.Handler>, + AppBskyGraphGetListBlocks.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.graph.getListBlocks' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getListMutes( + cfg: ConfigOf< + AV, + AppBskyGraphGetListMutes.Handler>, + AppBskyGraphGetListMutes.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.graph.getListMutes' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getLists( + cfg: ConfigOf< + AV, + AppBskyGraphGetLists.Handler>, + AppBskyGraphGetLists.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.graph.getLists' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getMutes( + cfg: ConfigOf< + AV, + AppBskyGraphGetMutes.Handler>, + AppBskyGraphGetMutes.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.graph.getMutes' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getSuggestedFollowsByActor( + cfg: ConfigOf< + AV, + AppBskyGraphGetSuggestedFollowsByActor.Handler>, + AppBskyGraphGetSuggestedFollowsByActor.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.graph.getSuggestedFollowsByActor' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + muteActor( + cfg: ConfigOf< + AV, + AppBskyGraphMuteActor.Handler>, + AppBskyGraphMuteActor.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.graph.muteActor' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + muteActorList( + cfg: ConfigOf< + AV, + AppBskyGraphMuteActorList.Handler>, + AppBskyGraphMuteActorList.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.graph.muteActorList' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + unmuteActor( + cfg: ConfigOf< + AV, + AppBskyGraphUnmuteActor.Handler>, + AppBskyGraphUnmuteActor.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.graph.unmuteActor' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + unmuteActorList( + cfg: ConfigOf< + AV, + AppBskyGraphUnmuteActorList.Handler>, + AppBskyGraphUnmuteActorList.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.graph.unmuteActorList' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } +} + +export class NotificationNS { + _server: Server + + constructor(server: Server) { + this._server = server + } + + getUnreadCount( + cfg: ConfigOf< + AV, + AppBskyNotificationGetUnreadCount.Handler>, + AppBskyNotificationGetUnreadCount.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.notification.getUnreadCount' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + listNotifications( + cfg: ConfigOf< + AV, + AppBskyNotificationListNotifications.Handler>, + AppBskyNotificationListNotifications.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.notification.listNotifications' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + registerPush( + cfg: ConfigOf< + AV, + AppBskyNotificationRegisterPush.Handler>, + AppBskyNotificationRegisterPush.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.notification.registerPush' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + updateSeen( + cfg: ConfigOf< + AV, + AppBskyNotificationUpdateSeen.Handler>, + AppBskyNotificationUpdateSeen.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.notification.updateSeen' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } +} + +export class RichtextNS { + _server: Server + + constructor(server: Server) { + this._server = server + } +} + +export class UnspeccedNS { + _server: Server + + constructor(server: Server) { + this._server = server + } + + getPopular( + cfg: ConfigOf< + AV, + AppBskyUnspeccedGetPopular.Handler>, + AppBskyUnspeccedGetPopular.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.unspecced.getPopular' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getPopularFeedGenerators( + cfg: ConfigOf< + AV, + AppBskyUnspeccedGetPopularFeedGenerators.Handler>, + AppBskyUnspeccedGetPopularFeedGenerators.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.unspecced.getPopularFeedGenerators' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + getTimelineSkeleton( + cfg: ConfigOf< + AV, + AppBskyUnspeccedGetTimelineSkeleton.Handler>, + AppBskyUnspeccedGetTimelineSkeleton.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.unspecced.getTimelineSkeleton' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + searchActorsSkeleton( + cfg: ConfigOf< + AV, + AppBskyUnspeccedSearchActorsSkeleton.Handler>, + AppBskyUnspeccedSearchActorsSkeleton.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.unspecced.searchActorsSkeleton' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + + searchPostsSkeleton( + cfg: ConfigOf< + AV, + AppBskyUnspeccedSearchPostsSkeleton.Handler>, + AppBskyUnspeccedSearchPostsSkeleton.HandlerReqCtx> + >, + ) { + const nsid = 'app.bsky.unspecced.searchPostsSkeleton' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } +} + +type SharedRateLimitOpts = { + name: string + calcKey?: (ctx: T) => string + calcPoints?: (ctx: T) => number +} +type RouteRateLimitOpts = { + durationMs: number + points: number + calcKey?: (ctx: T) => string + calcPoints?: (ctx: T) => number +} +type HandlerOpts = { blobLimit?: number } +type HandlerRateLimitOpts = SharedRateLimitOpts | RouteRateLimitOpts +type ConfigOf = + | Handler + | { + auth?: Auth + opts?: HandlerOpts + rateLimit?: HandlerRateLimitOpts | HandlerRateLimitOpts[] + handler: Handler + } +type ExtractAuth = Extract< + Awaited>, + { credentials: unknown } +> diff --git a/packages/ozone/src/lexicon/lexicons.ts b/packages/ozone/src/lexicon/lexicons.ts new file mode 100644 index 00000000000..258d297c69e --- /dev/null +++ b/packages/ozone/src/lexicon/lexicons.ts @@ -0,0 +1,8065 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { LexiconDoc, Lexicons } from '@atproto/lexicon' + +export const schemaDict = { + ComAtprotoAdminDefs: { + lexicon: 1, + id: 'com.atproto.admin.defs', + defs: { + statusAttr: { + type: 'object', + required: ['applied'], + properties: { + applied: { + type: 'boolean', + }, + ref: { + type: 'string', + }, + }, + }, + modEventView: { + type: 'object', + required: [ + 'id', + 'event', + 'subject', + 'subjectBlobCids', + 'createdBy', + 'createdAt', + ], + properties: { + id: { + type: 'integer', + }, + event: { + type: 'union', + refs: [ + 'lex:com.atproto.admin.defs#modEventTakedown', + 'lex:com.atproto.admin.defs#modEventReverseTakedown', + 'lex:com.atproto.admin.defs#modEventComment', + 'lex:com.atproto.admin.defs#modEventReport', + 'lex:com.atproto.admin.defs#modEventLabel', + 'lex:com.atproto.admin.defs#modEventAcknowledge', + 'lex:com.atproto.admin.defs#modEventEscalate', + 'lex:com.atproto.admin.defs#modEventMute', + 'lex:com.atproto.admin.defs#modEventEmail', + ], + }, + subject: { + type: 'union', + refs: [ + 'lex:com.atproto.admin.defs#repoRef', + 'lex:com.atproto.repo.strongRef', + ], + }, + subjectBlobCids: { + type: 'array', + items: { + type: 'string', + }, + }, + createdBy: { + type: 'string', + format: 'did', + }, + createdAt: { + type: 'string', + format: 'datetime', + }, + creatorHandle: { + type: 'string', + }, + subjectHandle: { + type: 'string', + }, + }, + }, + modEventViewDetail: { + type: 'object', + required: [ + 'id', + 'event', + 'subject', + 'subjectBlobs', + 'createdBy', + 'createdAt', + ], + properties: { + id: { + type: 'integer', + }, + event: { + type: 'union', + refs: [ + 'lex:com.atproto.admin.defs#modEventTakedown', + 'lex:com.atproto.admin.defs#modEventReverseTakedown', + 'lex:com.atproto.admin.defs#modEventComment', + 'lex:com.atproto.admin.defs#modEventReport', + 'lex:com.atproto.admin.defs#modEventLabel', + 'lex:com.atproto.admin.defs#modEventAcknowledge', + 'lex:com.atproto.admin.defs#modEventEscalate', + 'lex:com.atproto.admin.defs#modEventMute', + 'lex:com.atproto.admin.defs#modEventResolveAppeal', + ], + }, + subject: { + type: 'union', + refs: [ + 'lex:com.atproto.admin.defs#repoView', + 'lex:com.atproto.admin.defs#repoViewNotFound', + 'lex:com.atproto.admin.defs#recordView', + 'lex:com.atproto.admin.defs#recordViewNotFound', + ], + }, + subjectBlobs: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#blobView', + }, + }, + createdBy: { + type: 'string', + format: 'did', + }, + createdAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + reportView: { + type: 'object', + required: [ + 'id', + 'reasonType', + 'subject', + 'reportedBy', + 'createdAt', + 'resolvedByActionIds', + ], + properties: { + id: { + type: 'integer', + }, + reasonType: { + type: 'ref', + ref: 'lex:com.atproto.moderation.defs#reasonType', + }, + comment: { + type: 'string', + }, + subjectRepoHandle: { + type: 'string', + }, + subject: { + type: 'union', + refs: [ + 'lex:com.atproto.admin.defs#repoRef', + 'lex:com.atproto.repo.strongRef', + ], + }, + reportedBy: { + type: 'string', + format: 'did', + }, + createdAt: { + type: 'string', + format: 'datetime', + }, + resolvedByActionIds: { + type: 'array', + items: { + type: 'integer', + }, + }, + }, + }, + subjectStatusView: { + type: 'object', + required: ['id', 'subject', 'createdAt', 'updatedAt', 'reviewState'], + properties: { + id: { + type: 'integer', + }, + subject: { + type: 'union', + refs: [ + 'lex:com.atproto.admin.defs#repoRef', + 'lex:com.atproto.repo.strongRef', + ], + }, + subjectBlobCids: { + type: 'array', + items: { + type: 'string', + format: 'cid', + }, + }, + subjectRepoHandle: { + type: 'string', + }, + updatedAt: { + type: 'string', + format: 'datetime', + description: + 'Timestamp referencing when the last update was made to the moderation status of the subject', + }, + createdAt: { + type: 'string', + format: 'datetime', + description: + 'Timestamp referencing the first moderation status impacting event was emitted on the subject', + }, + reviewState: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#subjectReviewState', + }, + comment: { + type: 'string', + description: 'Sticky comment on the subject.', + }, + muteUntil: { + type: 'string', + format: 'datetime', + }, + lastReviewedBy: { + type: 'string', + format: 'did', + }, + lastReviewedAt: { + type: 'string', + format: 'datetime', + }, + lastReportedAt: { + type: 'string', + format: 'datetime', + }, + lastAppealedAt: { + type: 'string', + format: 'datetime', + description: + 'Timestamp referencing when the author of the subject appealed a moderation action', + }, + takendown: { + type: 'boolean', + }, + appealed: { + type: 'boolean', + description: + 'True indicates that the a previously taken moderator action was appealed against, by the author of the content. False indicates last appeal was resolved by moderators.', + }, + suspendUntil: { + type: 'string', + format: 'datetime', + }, + }, + }, + reportViewDetail: { + type: 'object', + required: [ + 'id', + 'reasonType', + 'subject', + 'reportedBy', + 'createdAt', + 'resolvedByActions', + ], + properties: { + id: { + type: 'integer', + }, + reasonType: { + type: 'ref', + ref: 'lex:com.atproto.moderation.defs#reasonType', + }, + comment: { + type: 'string', + }, + subject: { + type: 'union', + refs: [ + 'lex:com.atproto.admin.defs#repoView', + 'lex:com.atproto.admin.defs#repoViewNotFound', + 'lex:com.atproto.admin.defs#recordView', + 'lex:com.atproto.admin.defs#recordViewNotFound', + ], + }, + subjectStatus: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#subjectStatusView', + }, + reportedBy: { + type: 'string', + format: 'did', + }, + createdAt: { + type: 'string', + format: 'datetime', + }, + resolvedByActions: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#modEventView', + }, + }, + }, + }, + repoView: { + type: 'object', + required: [ + 'did', + 'handle', + 'relatedRecords', + 'indexedAt', + 'moderation', + ], + properties: { + did: { + type: 'string', + format: 'did', + }, + handle: { + type: 'string', + format: 'handle', + }, + email: { + type: 'string', + }, + relatedRecords: { + type: 'array', + items: { + type: 'unknown', + }, + }, + indexedAt: { + type: 'string', + format: 'datetime', + }, + moderation: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#moderation', + }, + invitedBy: { + type: 'ref', + ref: 'lex:com.atproto.server.defs#inviteCode', + }, + invitesDisabled: { + type: 'boolean', + }, + inviteNote: { + type: 'string', + }, + }, + }, + repoViewDetail: { + type: 'object', + required: [ + 'did', + 'handle', + 'relatedRecords', + 'indexedAt', + 'moderation', + ], + properties: { + did: { + type: 'string', + format: 'did', + }, + handle: { + type: 'string', + format: 'handle', + }, + email: { + type: 'string', + }, + relatedRecords: { + type: 'array', + items: { + type: 'unknown', + }, + }, + indexedAt: { + type: 'string', + format: 'datetime', + }, + moderation: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#moderationDetail', + }, + labels: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.label.defs#label', + }, + }, + invitedBy: { + type: 'ref', + ref: 'lex:com.atproto.server.defs#inviteCode', + }, + invites: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.server.defs#inviteCode', + }, + }, + invitesDisabled: { + type: 'boolean', + }, + inviteNote: { + type: 'string', + }, + emailConfirmedAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + accountView: { + type: 'object', + required: ['did', 'handle', 'indexedAt'], + properties: { + did: { + type: 'string', + format: 'did', + }, + handle: { + type: 'string', + format: 'handle', + }, + email: { + type: 'string', + }, + relatedRecords: { + type: 'array', + items: { + type: 'unknown', + }, + }, + indexedAt: { + type: 'string', + format: 'datetime', + }, + invitedBy: { + type: 'ref', + ref: 'lex:com.atproto.server.defs#inviteCode', + }, + invites: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.server.defs#inviteCode', + }, + }, + invitesDisabled: { + type: 'boolean', + }, + emailConfirmedAt: { + type: 'string', + format: 'datetime', + }, + inviteNote: { + type: 'string', + }, + }, + }, + repoViewNotFound: { + type: 'object', + required: ['did'], + properties: { + did: { + type: 'string', + format: 'did', + }, + }, + }, + repoRef: { + type: 'object', + required: ['did'], + properties: { + did: { + type: 'string', + format: 'did', + }, + }, + }, + repoBlobRef: { + type: 'object', + required: ['did', 'cid'], + properties: { + did: { + type: 'string', + format: 'did', + }, + cid: { + type: 'string', + format: 'cid', + }, + recordUri: { + type: 'string', + format: 'at-uri', + }, + }, + }, + recordView: { + type: 'object', + required: [ + 'uri', + 'cid', + 'value', + 'blobCids', + 'indexedAt', + 'moderation', + 'repo', + ], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + cid: { + type: 'string', + format: 'cid', + }, + value: { + type: 'unknown', + }, + blobCids: { + type: 'array', + items: { + type: 'string', + format: 'cid', + }, + }, + indexedAt: { + type: 'string', + format: 'datetime', + }, + moderation: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#moderation', + }, + repo: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#repoView', + }, + }, + }, + recordViewDetail: { + type: 'object', + required: [ + 'uri', + 'cid', + 'value', + 'blobs', + 'indexedAt', + 'moderation', + 'repo', + ], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + cid: { + type: 'string', + format: 'cid', + }, + value: { + type: 'unknown', + }, + blobs: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#blobView', + }, + }, + labels: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.label.defs#label', + }, + }, + indexedAt: { + type: 'string', + format: 'datetime', + }, + moderation: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#moderationDetail', + }, + repo: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#repoView', + }, + }, + }, + recordViewNotFound: { + type: 'object', + required: ['uri'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + }, + }, + moderation: { + type: 'object', + properties: { + subjectStatus: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#subjectStatusView', + }, + }, + }, + moderationDetail: { + type: 'object', + properties: { + subjectStatus: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#subjectStatusView', + }, + }, + }, + blobView: { + type: 'object', + required: ['cid', 'mimeType', 'size', 'createdAt'], + properties: { + cid: { + type: 'string', + format: 'cid', + }, + mimeType: { + type: 'string', + }, + size: { + type: 'integer', + }, + createdAt: { + type: 'string', + format: 'datetime', + }, + details: { + type: 'union', + refs: [ + 'lex:com.atproto.admin.defs#imageDetails', + 'lex:com.atproto.admin.defs#videoDetails', + ], + }, + moderation: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#moderation', + }, + }, + }, + imageDetails: { + type: 'object', + required: ['width', 'height'], + properties: { + width: { + type: 'integer', + }, + height: { + type: 'integer', + }, + }, + }, + videoDetails: { + type: 'object', + required: ['width', 'height', 'length'], + properties: { + width: { + type: 'integer', + }, + height: { + type: 'integer', + }, + length: { + type: 'integer', + }, + }, + }, + subjectReviewState: { + type: 'string', + knownValues: [ + 'lex:com.atproto.admin.defs#reviewOpen', + 'lex:com.atproto.admin.defs#reviewEscalated', + 'lex:com.atproto.admin.defs#reviewClosed', + ], + }, + reviewOpen: { + type: 'token', + description: + 'Moderator review status of a subject: Open. Indicates that the subject needs to be reviewed by a moderator', + }, + reviewEscalated: { + type: 'token', + description: + 'Moderator review status of a subject: Escalated. Indicates that the subject was escalated for review by a moderator', + }, + reviewClosed: { + type: 'token', + description: + 'Moderator review status of a subject: Closed. Indicates that the subject was already reviewed and resolved by a moderator', + }, + modEventTakedown: { + type: 'object', + description: 'Take down a subject permanently or temporarily', + properties: { + comment: { + type: 'string', + }, + durationInHours: { + type: 'integer', + description: + 'Indicates how long the takedown should be in effect before automatically expiring.', + }, + }, + }, + modEventReverseTakedown: { + type: 'object', + description: 'Revert take down action on a subject', + properties: { + comment: { + type: 'string', + description: 'Describe reasoning behind the reversal.', + }, + }, + }, + modEventResolveAppeal: { + type: 'object', + description: 'Resolve appeal on a subject', + properties: { + comment: { + type: 'string', + description: 'Describe resolution.', + }, + }, + }, + modEventComment: { + type: 'object', + description: 'Add a comment to a subject', + required: ['comment'], + properties: { + comment: { + type: 'string', + }, + sticky: { + type: 'boolean', + description: 'Make the comment persistent on the subject', + }, + }, + }, + modEventReport: { + type: 'object', + description: 'Report a subject', + required: ['reportType'], + properties: { + comment: { + type: 'string', + }, + reportType: { + type: 'ref', + ref: 'lex:com.atproto.moderation.defs#reasonType', + }, + }, + }, + modEventLabel: { + type: 'object', + description: 'Apply/Negate labels on a subject', + required: ['createLabelVals', 'negateLabelVals'], + properties: { + comment: { + type: 'string', + }, + createLabelVals: { + type: 'array', + items: { + type: 'string', + }, + }, + negateLabelVals: { + type: 'array', + items: { + type: 'string', + }, + }, + }, + }, + modEventAcknowledge: { + type: 'object', + properties: { + comment: { + type: 'string', + }, + }, + }, + modEventEscalate: { + type: 'object', + properties: { + comment: { + type: 'string', + }, + }, + }, + modEventMute: { + type: 'object', + description: 'Mute incoming reports on a subject', + required: ['durationInHours'], + properties: { + comment: { + type: 'string', + }, + durationInHours: { + type: 'integer', + description: 'Indicates how long the subject should remain muted.', + }, + }, + }, + modEventUnmute: { + type: 'object', + description: 'Unmute action on a subject', + properties: { + comment: { + type: 'string', + description: 'Describe reasoning behind the reversal.', + }, + }, + }, + modEventEmail: { + type: 'object', + description: 'Keep a log of outgoing email to a user', + required: ['subjectLine'], + properties: { + subjectLine: { + type: 'string', + description: 'The subject line of the email sent to the user.', + }, + comment: { + type: 'string', + description: 'Additional comment about the outgoing comm.', + }, + }, + }, + }, + }, + ComAtprotoAdminDeleteAccount: { + lexicon: 1, + id: 'com.atproto.admin.deleteAccount', + defs: { + main: { + type: 'procedure', + description: 'Delete a user account as an administrator.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['did'], + properties: { + did: { + type: 'string', + format: 'did', + }, + }, + }, + }, + }, + }, + }, + ComAtprotoAdminDisableAccountInvites: { + lexicon: 1, + id: 'com.atproto.admin.disableAccountInvites', + defs: { + main: { + type: 'procedure', + description: + 'Disable an account from receiving new invite codes, but does not invalidate existing codes.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['account'], + properties: { + account: { + type: 'string', + format: 'did', + }, + note: { + type: 'string', + description: 'Optional reason for disabled invites.', + }, + }, + }, + }, + }, + }, + }, + ComAtprotoAdminDisableInviteCodes: { + lexicon: 1, + id: 'com.atproto.admin.disableInviteCodes', + defs: { + main: { + type: 'procedure', + description: + 'Disable some set of codes and/or all codes associated with a set of users.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + properties: { + codes: { + type: 'array', + items: { + type: 'string', + }, + }, + accounts: { + type: 'array', + items: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + ComAtprotoAdminEmitModerationEvent: { + lexicon: 1, + id: 'com.atproto.admin.emitModerationEvent', + defs: { + main: { + type: 'procedure', + description: 'Take a moderation action on an actor.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['event', 'subject', 'createdBy'], + properties: { + event: { + type: 'union', + refs: [ + 'lex:com.atproto.admin.defs#modEventTakedown', + 'lex:com.atproto.admin.defs#modEventAcknowledge', + 'lex:com.atproto.admin.defs#modEventEscalate', + 'lex:com.atproto.admin.defs#modEventComment', + 'lex:com.atproto.admin.defs#modEventLabel', + 'lex:com.atproto.admin.defs#modEventReport', + 'lex:com.atproto.admin.defs#modEventMute', + 'lex:com.atproto.admin.defs#modEventReverseTakedown', + 'lex:com.atproto.admin.defs#modEventUnmute', + 'lex:com.atproto.admin.defs#modEventEmail', + ], + }, + subject: { + type: 'union', + refs: [ + 'lex:com.atproto.admin.defs#repoRef', + 'lex:com.atproto.repo.strongRef', + ], + }, + subjectBlobCids: { + type: 'array', + items: { + type: 'string', + format: 'cid', + }, + }, + createdBy: { + type: 'string', + format: 'did', + }, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#modEventView', + }, + }, + errors: [ + { + name: 'SubjectHasAction', + }, + ], + }, + }, + }, + ComAtprotoAdminEnableAccountInvites: { + lexicon: 1, + id: 'com.atproto.admin.enableAccountInvites', + defs: { + main: { + type: 'procedure', + description: "Re-enable an account's ability to receive invite codes.", + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['account'], + properties: { + account: { + type: 'string', + format: 'did', + }, + note: { + type: 'string', + description: 'Optional reason for enabled invites.', + }, + }, + }, + }, + }, + }, + }, + ComAtprotoAdminGetAccountInfo: { + lexicon: 1, + id: 'com.atproto.admin.getAccountInfo', + defs: { + main: { + type: 'query', + description: 'Get details about an account.', + parameters: { + type: 'params', + required: ['did'], + properties: { + did: { + type: 'string', + format: 'did', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#accountView', + }, + }, + }, + }, + }, + ComAtprotoAdminGetAccountInfos: { + lexicon: 1, + id: 'com.atproto.admin.getAccountInfos', + defs: { + main: { + type: 'query', + description: 'Get details about some accounts.', + parameters: { + type: 'params', + required: ['dids'], + properties: { + dids: { + type: 'array', + items: { + type: 'string', + format: 'did', + }, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['infos'], + properties: { + infos: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#accountView', + }, + }, + }, + }, + }, + }, + }, + }, + ComAtprotoAdminGetInviteCodes: { + lexicon: 1, + id: 'com.atproto.admin.getInviteCodes', + defs: { + main: { + type: 'query', + description: 'Get an admin view of invite codes.', + parameters: { + type: 'params', + properties: { + sort: { + type: 'string', + knownValues: ['recent', 'usage'], + default: 'recent', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 500, + default: 100, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['codes'], + properties: { + cursor: { + type: 'string', + }, + codes: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.server.defs#inviteCode', + }, + }, + }, + }, + }, + }, + }, + }, + ComAtprotoAdminGetModerationEvent: { + lexicon: 1, + id: 'com.atproto.admin.getModerationEvent', + defs: { + main: { + type: 'query', + description: 'Get details about a moderation event.', + parameters: { + type: 'params', + required: ['id'], + properties: { + id: { + type: 'integer', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#modEventViewDetail', + }, + }, + }, + }, + }, + ComAtprotoAdminGetRecord: { + lexicon: 1, + id: 'com.atproto.admin.getRecord', + defs: { + main: { + type: 'query', + description: 'Get details about a record.', + parameters: { + type: 'params', + required: ['uri'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + cid: { + type: 'string', + format: 'cid', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#recordViewDetail', + }, + }, + errors: [ + { + name: 'RecordNotFound', + }, + ], + }, + }, + }, + ComAtprotoAdminGetRepo: { + lexicon: 1, + id: 'com.atproto.admin.getRepo', + defs: { + main: { + type: 'query', + description: 'Get details about a repository.', + parameters: { + type: 'params', + required: ['did'], + properties: { + did: { + type: 'string', + format: 'did', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#repoViewDetail', + }, + }, + errors: [ + { + name: 'RepoNotFound', + }, + ], + }, + }, + }, + ComAtprotoAdminGetSubjectStatus: { + lexicon: 1, + id: 'com.atproto.admin.getSubjectStatus', + defs: { + main: { + type: 'query', + description: + 'Get the service-specific admin status of a subject (account, record, or blob).', + parameters: { + type: 'params', + properties: { + did: { + type: 'string', + format: 'did', + }, + uri: { + type: 'string', + format: 'at-uri', + }, + blob: { + type: 'string', + format: 'cid', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['subject'], + properties: { + subject: { + type: 'union', + refs: [ + 'lex:com.atproto.admin.defs#repoRef', + 'lex:com.atproto.repo.strongRef', + 'lex:com.atproto.admin.defs#repoBlobRef', + ], + }, + takedown: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#statusAttr', + }, + }, + }, + }, + }, + }, + }, + ComAtprotoAdminQueryModerationEvents: { + lexicon: 1, + id: 'com.atproto.admin.queryModerationEvents', + defs: { + main: { + type: 'query', + description: 'List moderation events related to a subject.', + parameters: { + type: 'params', + properties: { + types: { + type: 'array', + items: { + type: 'string', + }, + description: + 'The types of events (fully qualified string in the format of com.atproto.admin#modEvent) to filter by. If not specified, all events are returned.', + }, + createdBy: { + type: 'string', + format: 'did', + }, + sortDirection: { + type: 'string', + default: 'desc', + enum: ['asc', 'desc'], + description: + 'Sort direction for the events. Defaults to descending order of created at timestamp.', + }, + subject: { + type: 'string', + format: 'uri', + }, + includeAllUserRecords: { + type: 'boolean', + default: false, + description: + 'If true, events on all record types (posts, lists, profile etc.) owned by the did are returned', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['events'], + properties: { + cursor: { + type: 'string', + }, + events: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#modEventView', + }, + }, + }, + }, + }, + }, + }, + }, + ComAtprotoAdminQueryModerationStatuses: { + lexicon: 1, + id: 'com.atproto.admin.queryModerationStatuses', + defs: { + main: { + type: 'query', + description: 'View moderation statuses of subjects (record or repo).', + parameters: { + type: 'params', + properties: { + subject: { + type: 'string', + format: 'uri', + }, + comment: { + type: 'string', + description: 'Search subjects by keyword from comments', + }, + reportedAfter: { + type: 'string', + format: 'datetime', + description: 'Search subjects reported after a given timestamp', + }, + reportedBefore: { + type: 'string', + format: 'datetime', + description: 'Search subjects reported before a given timestamp', + }, + reviewedAfter: { + type: 'string', + format: 'datetime', + description: 'Search subjects reviewed after a given timestamp', + }, + reviewedBefore: { + type: 'string', + format: 'datetime', + description: 'Search subjects reviewed before a given timestamp', + }, + includeMuted: { + type: 'boolean', + description: + "By default, we don't include muted subjects in the results. Set this to true to include them.", + }, + reviewState: { + type: 'string', + description: 'Specify when fetching subjects in a certain state', + }, + ignoreSubjects: { + type: 'array', + items: { + type: 'string', + format: 'uri', + }, + }, + lastReviewedBy: { + type: 'string', + format: 'did', + description: + 'Get all subject statuses that were reviewed by a specific moderator', + }, + sortField: { + type: 'string', + default: 'lastReportedAt', + enum: ['lastReviewedAt', 'lastReportedAt'], + }, + sortDirection: { + type: 'string', + default: 'desc', + enum: ['asc', 'desc'], + }, + takendown: { + type: 'boolean', + description: 'Get subjects that were taken down', + }, + appealed: { + type: 'boolean', + description: 'Get subjects in unresolved appealed status', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['subjectStatuses'], + properties: { + cursor: { + type: 'string', + }, + subjectStatuses: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#subjectStatusView', + }, + }, + }, + }, + }, + }, + }, + }, + ComAtprotoAdminSearchRepos: { + lexicon: 1, + id: 'com.atproto.admin.searchRepos', + defs: { + main: { + type: 'query', + description: 'Find repositories based on a search term.', + parameters: { + type: 'params', + properties: { + term: { + type: 'string', + description: "DEPRECATED: use 'q' instead", + }, + q: { + type: 'string', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['repos'], + properties: { + cursor: { + type: 'string', + }, + repos: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#repoView', + }, + }, + }, + }, + }, + }, + }, + }, + ComAtprotoAdminSendEmail: { + lexicon: 1, + id: 'com.atproto.admin.sendEmail', + defs: { + main: { + type: 'procedure', + description: "Send email to a user's account email address.", + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['recipientDid', 'content', 'senderDid'], + properties: { + recipientDid: { + type: 'string', + format: 'did', + }, + content: { + type: 'string', + }, + subject: { + type: 'string', + }, + senderDid: { + type: 'string', + format: 'did', + }, + comment: { + type: 'string', + description: + "Additional comment by the sender that won't be used in the email itself but helpful to provide more context for moderators/reviewers", + }, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['sent'], + properties: { + sent: { + type: 'boolean', + }, + }, + }, + }, + }, + }, + }, + ComAtprotoAdminUpdateAccountEmail: { + lexicon: 1, + id: 'com.atproto.admin.updateAccountEmail', + defs: { + main: { + type: 'procedure', + description: "Administrative action to update an account's email.", + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['account', 'email'], + properties: { + account: { + type: 'string', + format: 'at-identifier', + description: 'The handle or DID of the repo.', + }, + email: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + ComAtprotoAdminUpdateAccountHandle: { + lexicon: 1, + id: 'com.atproto.admin.updateAccountHandle', + defs: { + main: { + type: 'procedure', + description: "Administrative action to update an account's handle.", + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['did', 'handle'], + properties: { + did: { + type: 'string', + format: 'did', + }, + handle: { + type: 'string', + format: 'handle', + }, + }, + }, + }, + }, + }, + }, + ComAtprotoAdminUpdateSubjectStatus: { + lexicon: 1, + id: 'com.atproto.admin.updateSubjectStatus', + defs: { + main: { + type: 'procedure', + description: + 'Update the service-specific admin status of a subject (account, record, or blob).', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['subject'], + properties: { + subject: { + type: 'union', + refs: [ + 'lex:com.atproto.admin.defs#repoRef', + 'lex:com.atproto.repo.strongRef', + 'lex:com.atproto.admin.defs#repoBlobRef', + ], + }, + takedown: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#statusAttr', + }, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['subject'], + properties: { + subject: { + type: 'union', + refs: [ + 'lex:com.atproto.admin.defs#repoRef', + 'lex:com.atproto.repo.strongRef', + 'lex:com.atproto.admin.defs#repoBlobRef', + ], + }, + takedown: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#statusAttr', + }, + }, + }, + }, + }, + }, + }, + ComAtprotoIdentityResolveHandle: { + lexicon: 1, + id: 'com.atproto.identity.resolveHandle', + defs: { + main: { + type: 'query', + description: 'Provides the DID of a repo.', + parameters: { + type: 'params', + required: ['handle'], + properties: { + handle: { + type: 'string', + format: 'handle', + description: 'The handle to resolve.', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['did'], + properties: { + did: { + type: 'string', + format: 'did', + }, + }, + }, + }, + }, + }, + }, + ComAtprotoIdentityUpdateHandle: { + lexicon: 1, + id: 'com.atproto.identity.updateHandle', + defs: { + main: { + type: 'procedure', + description: 'Updates the handle of the account.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['handle'], + properties: { + handle: { + type: 'string', + format: 'handle', + }, + }, + }, + }, + }, + }, + }, + ComAtprotoLabelDefs: { + lexicon: 1, + id: 'com.atproto.label.defs', + defs: { + label: { + type: 'object', + description: + 'Metadata tag on an atproto resource (eg, repo or record).', + required: ['src', 'uri', 'val', 'cts'], + properties: { + src: { + type: 'string', + format: 'did', + description: 'DID of the actor who created this label.', + }, + uri: { + type: 'string', + format: 'uri', + description: + 'AT URI of the record, repository (account), or other resource that this label applies to.', + }, + cid: { + type: 'string', + format: 'cid', + description: + "Optionally, CID specifying the specific version of 'uri' resource this label applies to.", + }, + val: { + type: 'string', + maxLength: 128, + description: + 'The short string name of the value or type of this label.', + }, + neg: { + type: 'boolean', + description: + 'If true, this is a negation label, overwriting a previous label.', + }, + cts: { + type: 'string', + format: 'datetime', + description: 'Timestamp when this label was created.', + }, + }, + }, + selfLabels: { + type: 'object', + description: + 'Metadata tags on an atproto record, published by the author within the record.', + required: ['values'], + properties: { + values: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.label.defs#selfLabel', + }, + maxLength: 10, + }, + }, + }, + selfLabel: { + type: 'object', + description: + 'Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel.', + required: ['val'], + properties: { + val: { + type: 'string', + maxLength: 128, + description: + 'The short string name of the value or type of this label.', + }, + }, + }, + }, + }, + ComAtprotoLabelQueryLabels: { + lexicon: 1, + id: 'com.atproto.label.queryLabels', + defs: { + main: { + type: 'query', + description: 'Find labels relevant to the provided URI patterns.', + parameters: { + type: 'params', + required: ['uriPatterns'], + properties: { + uriPatterns: { + type: 'array', + items: { + type: 'string', + }, + description: + "List of AT URI patterns to match (boolean 'OR'). Each may be a prefix (ending with '*'; will match inclusive of the string leading to '*'), or a full URI.", + }, + sources: { + type: 'array', + items: { + type: 'string', + format: 'did', + }, + description: + 'Optional list of label sources (DIDs) to filter on.', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 250, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['labels'], + properties: { + cursor: { + type: 'string', + }, + labels: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.label.defs#label', + }, + }, + }, + }, + }, + }, + }, + }, + ComAtprotoLabelSubscribeLabels: { + lexicon: 1, + id: 'com.atproto.label.subscribeLabels', + defs: { + main: { + type: 'subscription', + description: 'Subscribe to label updates.', + parameters: { + type: 'params', + properties: { + cursor: { + type: 'integer', + description: 'The last known event to backfill from.', + }, + }, + }, + message: { + schema: { + type: 'union', + refs: [ + 'lex:com.atproto.label.subscribeLabels#labels', + 'lex:com.atproto.label.subscribeLabels#info', + ], + }, + }, + errors: [ + { + name: 'FutureCursor', + }, + ], + }, + labels: { + type: 'object', + required: ['seq', 'labels'], + properties: { + seq: { + type: 'integer', + }, + labels: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.label.defs#label', + }, + }, + }, + }, + info: { + type: 'object', + required: ['name'], + properties: { + name: { + type: 'string', + knownValues: ['OutdatedCursor'], + }, + message: { + type: 'string', + }, + }, + }, + }, + }, + ComAtprotoModerationCreateReport: { + lexicon: 1, + id: 'com.atproto.moderation.createReport', + defs: { + main: { + type: 'procedure', + description: 'Report a repo or a record.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['reasonType', 'subject'], + properties: { + reasonType: { + type: 'ref', + ref: 'lex:com.atproto.moderation.defs#reasonType', + }, + reason: { + type: 'string', + }, + subject: { + type: 'union', + refs: [ + 'lex:com.atproto.admin.defs#repoRef', + 'lex:com.atproto.repo.strongRef', + ], + }, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: [ + 'id', + 'reasonType', + 'subject', + 'reportedBy', + 'createdAt', + ], + properties: { + id: { + type: 'integer', + }, + reasonType: { + type: 'ref', + ref: 'lex:com.atproto.moderation.defs#reasonType', + }, + reason: { + type: 'string', + maxGraphemes: 2000, + maxLength: 20000, + }, + subject: { + type: 'union', + refs: [ + 'lex:com.atproto.admin.defs#repoRef', + 'lex:com.atproto.repo.strongRef', + ], + }, + reportedBy: { + type: 'string', + format: 'did', + }, + createdAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + }, + }, + }, + }, + ComAtprotoModerationDefs: { + lexicon: 1, + id: 'com.atproto.moderation.defs', + defs: { + reasonType: { + type: 'string', + knownValues: [ + 'com.atproto.moderation.defs#reasonSpam', + 'com.atproto.moderation.defs#reasonViolation', + 'com.atproto.moderation.defs#reasonMisleading', + 'com.atproto.moderation.defs#reasonSexual', + 'com.atproto.moderation.defs#reasonRude', + 'com.atproto.moderation.defs#reasonOther', + 'com.atproto.moderation.defs#reasonAppeal', + ], + }, + reasonSpam: { + type: 'token', + description: 'Spam: frequent unwanted promotion, replies, mentions', + }, + reasonViolation: { + type: 'token', + description: 'Direct violation of server rules, laws, terms of service', + }, + reasonMisleading: { + type: 'token', + description: 'Misleading identity, affiliation, or content', + }, + reasonSexual: { + type: 'token', + description: 'Unwanted or mislabeled sexual content', + }, + reasonRude: { + type: 'token', + description: + 'Rude, harassing, explicit, or otherwise unwelcoming behavior', + }, + reasonOther: { + type: 'token', + description: 'Other: reports not falling under another report category', + }, + reasonAppeal: { + type: 'token', + description: 'Appeal: appeal a previously taken moderation action', + }, + }, + }, + ComAtprotoRepoApplyWrites: { + lexicon: 1, + id: 'com.atproto.repo.applyWrites', + defs: { + main: { + type: 'procedure', + description: + 'Apply a batch transaction of creates, updates, and deletes.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['repo', 'writes'], + properties: { + repo: { + type: 'string', + format: 'at-identifier', + description: 'The handle or DID of the repo.', + }, + validate: { + type: 'boolean', + default: true, + description: 'Flag for validating the records.', + }, + writes: { + type: 'array', + items: { + type: 'union', + refs: [ + 'lex:com.atproto.repo.applyWrites#create', + 'lex:com.atproto.repo.applyWrites#update', + 'lex:com.atproto.repo.applyWrites#delete', + ], + closed: true, + }, + }, + swapCommit: { + type: 'string', + format: 'cid', + }, + }, + }, + }, + errors: [ + { + name: 'InvalidSwap', + }, + ], + }, + create: { + type: 'object', + description: 'Create a new record.', + required: ['collection', 'value'], + properties: { + collection: { + type: 'string', + format: 'nsid', + }, + rkey: { + type: 'string', + maxLength: 15, + }, + value: { + type: 'unknown', + }, + }, + }, + update: { + type: 'object', + description: 'Update an existing record.', + required: ['collection', 'rkey', 'value'], + properties: { + collection: { + type: 'string', + format: 'nsid', + }, + rkey: { + type: 'string', + }, + value: { + type: 'unknown', + }, + }, + }, + delete: { + type: 'object', + description: 'Delete an existing record.', + required: ['collection', 'rkey'], + properties: { + collection: { + type: 'string', + format: 'nsid', + }, + rkey: { + type: 'string', + }, + }, + }, + }, + }, + ComAtprotoRepoCreateRecord: { + lexicon: 1, + id: 'com.atproto.repo.createRecord', + defs: { + main: { + type: 'procedure', + description: 'Create a new record.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['repo', 'collection', 'record'], + properties: { + repo: { + type: 'string', + format: 'at-identifier', + description: 'The handle or DID of the repo.', + }, + collection: { + type: 'string', + format: 'nsid', + description: 'The NSID of the record collection.', + }, + rkey: { + type: 'string', + description: 'The key of the record.', + maxLength: 15, + }, + validate: { + type: 'boolean', + default: true, + description: 'Flag for validating the record.', + }, + record: { + type: 'unknown', + description: 'The record to create.', + }, + swapCommit: { + type: 'string', + format: 'cid', + description: + 'Compare and swap with the previous commit by CID.', + }, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['uri', 'cid'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + cid: { + type: 'string', + format: 'cid', + }, + }, + }, + }, + errors: [ + { + name: 'InvalidSwap', + }, + ], + }, + }, + }, + ComAtprotoRepoDeleteRecord: { + lexicon: 1, + id: 'com.atproto.repo.deleteRecord', + defs: { + main: { + type: 'procedure', + description: "Delete a record, or ensure it doesn't exist.", + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['repo', 'collection', 'rkey'], + properties: { + repo: { + type: 'string', + format: 'at-identifier', + description: 'The handle or DID of the repo.', + }, + collection: { + type: 'string', + format: 'nsid', + description: 'The NSID of the record collection.', + }, + rkey: { + type: 'string', + description: 'The key of the record.', + }, + swapRecord: { + type: 'string', + format: 'cid', + description: + 'Compare and swap with the previous record by CID.', + }, + swapCommit: { + type: 'string', + format: 'cid', + description: + 'Compare and swap with the previous commit by CID.', + }, + }, + }, + }, + errors: [ + { + name: 'InvalidSwap', + }, + ], + }, + }, + }, + ComAtprotoRepoDescribeRepo: { + lexicon: 1, + id: 'com.atproto.repo.describeRepo', + defs: { + main: { + type: 'query', + description: + 'Get information about the repo, including the list of collections.', + parameters: { + type: 'params', + required: ['repo'], + properties: { + repo: { + type: 'string', + format: 'at-identifier', + description: 'The handle or DID of the repo.', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: [ + 'handle', + 'did', + 'didDoc', + 'collections', + 'handleIsCorrect', + ], + properties: { + handle: { + type: 'string', + format: 'handle', + }, + did: { + type: 'string', + format: 'did', + }, + didDoc: { + type: 'unknown', + }, + collections: { + type: 'array', + items: { + type: 'string', + format: 'nsid', + }, + }, + handleIsCorrect: { + type: 'boolean', + }, + }, + }, + }, + }, + }, + }, + ComAtprotoRepoGetRecord: { + lexicon: 1, + id: 'com.atproto.repo.getRecord', + defs: { + main: { + type: 'query', + description: 'Get a record.', + parameters: { + type: 'params', + required: ['repo', 'collection', 'rkey'], + properties: { + repo: { + type: 'string', + format: 'at-identifier', + description: 'The handle or DID of the repo.', + }, + collection: { + type: 'string', + format: 'nsid', + description: 'The NSID of the record collection.', + }, + rkey: { + type: 'string', + description: 'The key of the record.', + }, + cid: { + type: 'string', + format: 'cid', + description: + 'The CID of the version of the record. If not specified, then return the most recent version.', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['uri', 'value'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + cid: { + type: 'string', + format: 'cid', + }, + value: { + type: 'unknown', + }, + }, + }, + }, + }, + }, + }, + ComAtprotoRepoListRecords: { + lexicon: 1, + id: 'com.atproto.repo.listRecords', + defs: { + main: { + type: 'query', + description: 'List a range of records in a collection.', + parameters: { + type: 'params', + required: ['repo', 'collection'], + properties: { + repo: { + type: 'string', + format: 'at-identifier', + description: 'The handle or DID of the repo.', + }, + collection: { + type: 'string', + format: 'nsid', + description: 'The NSID of the record type.', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + description: 'The number of records to return.', + }, + cursor: { + type: 'string', + }, + rkeyStart: { + type: 'string', + description: + 'DEPRECATED: The lowest sort-ordered rkey to start from (exclusive)', + }, + rkeyEnd: { + type: 'string', + description: + 'DEPRECATED: The highest sort-ordered rkey to stop at (exclusive)', + }, + reverse: { + type: 'boolean', + description: 'Flag to reverse the order of the returned records.', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['records'], + properties: { + cursor: { + type: 'string', + }, + records: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.repo.listRecords#record', + }, + }, + }, + }, + }, + }, + record: { + type: 'object', + required: ['uri', 'cid', 'value'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + cid: { + type: 'string', + format: 'cid', + }, + value: { + type: 'unknown', + }, + }, + }, + }, + }, + ComAtprotoRepoPutRecord: { + lexicon: 1, + id: 'com.atproto.repo.putRecord', + defs: { + main: { + type: 'procedure', + description: 'Write a record, creating or updating it as needed.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['repo', 'collection', 'rkey', 'record'], + nullable: ['swapRecord'], + properties: { + repo: { + type: 'string', + format: 'at-identifier', + description: 'The handle or DID of the repo.', + }, + collection: { + type: 'string', + format: 'nsid', + description: 'The NSID of the record collection.', + }, + rkey: { + type: 'string', + description: 'The key of the record.', + maxLength: 15, + }, + validate: { + type: 'boolean', + default: true, + description: 'Flag for validating the record.', + }, + record: { + type: 'unknown', + description: 'The record to write.', + }, + swapRecord: { + type: 'string', + format: 'cid', + description: + 'Compare and swap with the previous record by CID.', + }, + swapCommit: { + type: 'string', + format: 'cid', + description: + 'Compare and swap with the previous commit by CID.', + }, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['uri', 'cid'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + cid: { + type: 'string', + format: 'cid', + }, + }, + }, + }, + errors: [ + { + name: 'InvalidSwap', + }, + ], + }, + }, + }, + ComAtprotoRepoStrongRef: { + lexicon: 1, + id: 'com.atproto.repo.strongRef', + description: 'A URI with a content-hash fingerprint.', + defs: { + main: { + type: 'object', + required: ['uri', 'cid'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + cid: { + type: 'string', + format: 'cid', + }, + }, + }, + }, + }, + ComAtprotoRepoUploadBlob: { + lexicon: 1, + id: 'com.atproto.repo.uploadBlob', + defs: { + main: { + type: 'procedure', + description: + 'Upload a new blob to be added to repo in a later request.', + input: { + encoding: '*/*', + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['blob'], + properties: { + blob: { + type: 'blob', + }, + }, + }, + }, + }, + }, + }, + ComAtprotoServerConfirmEmail: { + lexicon: 1, + id: 'com.atproto.server.confirmEmail', + defs: { + main: { + type: 'procedure', + description: + 'Confirm an email using a token from com.atproto.server.requestEmailConfirmation.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['email', 'token'], + properties: { + email: { + type: 'string', + }, + token: { + type: 'string', + }, + }, + }, + }, + errors: [ + { + name: 'AccountNotFound', + }, + { + name: 'ExpiredToken', + }, + { + name: 'InvalidToken', + }, + { + name: 'InvalidEmail', + }, + ], + }, + }, + }, + ComAtprotoServerCreateAccount: { + lexicon: 1, + id: 'com.atproto.server.createAccount', + defs: { + main: { + type: 'procedure', + description: 'Create an account.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['handle'], + properties: { + email: { + type: 'string', + }, + handle: { + type: 'string', + format: 'handle', + }, + did: { + type: 'string', + format: 'did', + }, + inviteCode: { + type: 'string', + }, + password: { + type: 'string', + }, + recoveryKey: { + type: 'string', + }, + plcOp: { + type: 'unknown', + }, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['accessJwt', 'refreshJwt', 'handle', 'did'], + properties: { + accessJwt: { + type: 'string', + }, + refreshJwt: { + type: 'string', + }, + handle: { + type: 'string', + format: 'handle', + }, + did: { + type: 'string', + format: 'did', + }, + didDoc: { + type: 'unknown', + }, + }, + }, + }, + errors: [ + { + name: 'InvalidHandle', + }, + { + name: 'InvalidPassword', + }, + { + name: 'InvalidInviteCode', + }, + { + name: 'HandleNotAvailable', + }, + { + name: 'UnsupportedDomain', + }, + { + name: 'UnresolvableDid', + }, + { + name: 'IncompatibleDidDoc', + }, + ], + }, + }, + }, + ComAtprotoServerCreateAppPassword: { + lexicon: 1, + id: 'com.atproto.server.createAppPassword', + defs: { + main: { + type: 'procedure', + description: 'Create an App Password.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['name'], + properties: { + name: { + type: 'string', + }, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'ref', + ref: 'lex:com.atproto.server.createAppPassword#appPassword', + }, + }, + errors: [ + { + name: 'AccountTakedown', + }, + ], + }, + appPassword: { + type: 'object', + required: ['name', 'password', 'createdAt'], + properties: { + name: { + type: 'string', + }, + password: { + type: 'string', + }, + createdAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + }, + }, + ComAtprotoServerCreateInviteCode: { + lexicon: 1, + id: 'com.atproto.server.createInviteCode', + defs: { + main: { + type: 'procedure', + description: 'Create an invite code.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['useCount'], + properties: { + useCount: { + type: 'integer', + }, + forAccount: { + type: 'string', + format: 'did', + }, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['code'], + properties: { + code: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + ComAtprotoServerCreateInviteCodes: { + lexicon: 1, + id: 'com.atproto.server.createInviteCodes', + defs: { + main: { + type: 'procedure', + description: 'Create invite codes.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['codeCount', 'useCount'], + properties: { + codeCount: { + type: 'integer', + default: 1, + }, + useCount: { + type: 'integer', + }, + forAccounts: { + type: 'array', + items: { + type: 'string', + format: 'did', + }, + }, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['codes'], + properties: { + codes: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.server.createInviteCodes#accountCodes', + }, + }, + }, + }, + }, + }, + accountCodes: { + type: 'object', + required: ['account', 'codes'], + properties: { + account: { + type: 'string', + }, + codes: { + type: 'array', + items: { + type: 'string', + }, + }, + }, + }, + }, + }, + ComAtprotoServerCreateSession: { + lexicon: 1, + id: 'com.atproto.server.createSession', + defs: { + main: { + type: 'procedure', + description: 'Create an authentication session.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['identifier', 'password'], + properties: { + identifier: { + type: 'string', + description: + 'Handle or other identifier supported by the server for the authenticating user.', + }, + password: { + type: 'string', + }, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['accessJwt', 'refreshJwt', 'handle', 'did'], + properties: { + accessJwt: { + type: 'string', + }, + refreshJwt: { + type: 'string', + }, + handle: { + type: 'string', + format: 'handle', + }, + did: { + type: 'string', + format: 'did', + }, + didDoc: { + type: 'unknown', + }, + email: { + type: 'string', + }, + emailConfirmed: { + type: 'boolean', + }, + }, + }, + }, + errors: [ + { + name: 'AccountTakedown', + }, + ], + }, + }, + }, + ComAtprotoServerDefs: { + lexicon: 1, + id: 'com.atproto.server.defs', + defs: { + inviteCode: { + type: 'object', + required: [ + 'code', + 'available', + 'disabled', + 'forAccount', + 'createdBy', + 'createdAt', + 'uses', + ], + properties: { + code: { + type: 'string', + }, + available: { + type: 'integer', + }, + disabled: { + type: 'boolean', + }, + forAccount: { + type: 'string', + }, + createdBy: { + type: 'string', + }, + createdAt: { + type: 'string', + format: 'datetime', + }, + uses: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.server.defs#inviteCodeUse', + }, + }, + }, + }, + inviteCodeUse: { + type: 'object', + required: ['usedBy', 'usedAt'], + properties: { + usedBy: { + type: 'string', + format: 'did', + }, + usedAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + }, + }, + ComAtprotoServerDeleteAccount: { + lexicon: 1, + id: 'com.atproto.server.deleteAccount', + defs: { + main: { + type: 'procedure', + description: "Delete an actor's account with a token and password.", + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['did', 'password', 'token'], + properties: { + did: { + type: 'string', + format: 'did', + }, + password: { + type: 'string', + }, + token: { + type: 'string', + }, + }, + }, + }, + errors: [ + { + name: 'ExpiredToken', + }, + { + name: 'InvalidToken', + }, + ], + }, + }, + }, + ComAtprotoServerDeleteSession: { + lexicon: 1, + id: 'com.atproto.server.deleteSession', + defs: { + main: { + type: 'procedure', + description: 'Delete the current session.', + }, + }, + }, + ComAtprotoServerDescribeServer: { + lexicon: 1, + id: 'com.atproto.server.describeServer', + defs: { + main: { + type: 'query', + description: + "Get a document describing the service's accounts configuration.", + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['availableUserDomains'], + properties: { + inviteCodeRequired: { + type: 'boolean', + }, + availableUserDomains: { + type: 'array', + items: { + type: 'string', + }, + }, + links: { + type: 'ref', + ref: 'lex:com.atproto.server.describeServer#links', + }, + }, + }, + }, + }, + links: { + type: 'object', + properties: { + privacyPolicy: { + type: 'string', + }, + termsOfService: { + type: 'string', + }, + }, + }, + }, + }, + ComAtprotoServerGetAccountInviteCodes: { + lexicon: 1, + id: 'com.atproto.server.getAccountInviteCodes', + defs: { + main: { + type: 'query', + description: 'Get all invite codes for a given account.', + parameters: { + type: 'params', + properties: { + includeUsed: { + type: 'boolean', + default: true, + }, + createAvailable: { + type: 'boolean', + default: true, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['codes'], + properties: { + codes: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.server.defs#inviteCode', + }, + }, + }, + }, + }, + errors: [ + { + name: 'DuplicateCreate', + }, + ], + }, + }, + }, + ComAtprotoServerGetSession: { + lexicon: 1, + id: 'com.atproto.server.getSession', + defs: { + main: { + type: 'query', + description: 'Get information about the current session.', + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['handle', 'did'], + properties: { + handle: { + type: 'string', + format: 'handle', + }, + did: { + type: 'string', + format: 'did', + }, + email: { + type: 'string', + }, + emailConfirmed: { + type: 'boolean', + }, + didDoc: { + type: 'unknown', + }, + }, + }, + }, + }, + }, + }, + ComAtprotoServerListAppPasswords: { + lexicon: 1, + id: 'com.atproto.server.listAppPasswords', + defs: { + main: { + type: 'query', + description: 'List all App Passwords.', + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['passwords'], + properties: { + passwords: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.server.listAppPasswords#appPassword', + }, + }, + }, + }, + }, + errors: [ + { + name: 'AccountTakedown', + }, + ], + }, + appPassword: { + type: 'object', + required: ['name', 'createdAt'], + properties: { + name: { + type: 'string', + }, + createdAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + }, + }, + ComAtprotoServerRefreshSession: { + lexicon: 1, + id: 'com.atproto.server.refreshSession', + defs: { + main: { + type: 'procedure', + description: 'Refresh an authentication session.', + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['accessJwt', 'refreshJwt', 'handle', 'did'], + properties: { + accessJwt: { + type: 'string', + }, + refreshJwt: { + type: 'string', + }, + handle: { + type: 'string', + format: 'handle', + }, + did: { + type: 'string', + format: 'did', + }, + didDoc: { + type: 'unknown', + }, + }, + }, + }, + errors: [ + { + name: 'AccountTakedown', + }, + ], + }, + }, + }, + ComAtprotoServerRequestAccountDelete: { + lexicon: 1, + id: 'com.atproto.server.requestAccountDelete', + defs: { + main: { + type: 'procedure', + description: 'Initiate a user account deletion via email.', + }, + }, + }, + ComAtprotoServerRequestEmailConfirmation: { + lexicon: 1, + id: 'com.atproto.server.requestEmailConfirmation', + defs: { + main: { + type: 'procedure', + description: + 'Request an email with a code to confirm ownership of email.', + }, + }, + }, + ComAtprotoServerRequestEmailUpdate: { + lexicon: 1, + id: 'com.atproto.server.requestEmailUpdate', + defs: { + main: { + type: 'procedure', + description: 'Request a token in order to update email.', + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['tokenRequired'], + properties: { + tokenRequired: { + type: 'boolean', + }, + }, + }, + }, + }, + }, + }, + ComAtprotoServerRequestPasswordReset: { + lexicon: 1, + id: 'com.atproto.server.requestPasswordReset', + defs: { + main: { + type: 'procedure', + description: 'Initiate a user account password reset via email.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['email'], + properties: { + email: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + ComAtprotoServerReserveSigningKey: { + lexicon: 1, + id: 'com.atproto.server.reserveSigningKey', + defs: { + main: { + type: 'procedure', + description: 'Reserve a repo signing key for account creation.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + properties: { + did: { + type: 'string', + description: 'The did to reserve a new did:key for', + }, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['signingKey'], + properties: { + signingKey: { + type: 'string', + description: 'Public signing key in the form of a did:key.', + }, + }, + }, + }, + }, + }, + }, + ComAtprotoServerResetPassword: { + lexicon: 1, + id: 'com.atproto.server.resetPassword', + defs: { + main: { + type: 'procedure', + description: 'Reset a user account password using a token.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['token', 'password'], + properties: { + token: { + type: 'string', + }, + password: { + type: 'string', + }, + }, + }, + }, + errors: [ + { + name: 'ExpiredToken', + }, + { + name: 'InvalidToken', + }, + ], + }, + }, + }, + ComAtprotoServerRevokeAppPassword: { + lexicon: 1, + id: 'com.atproto.server.revokeAppPassword', + defs: { + main: { + type: 'procedure', + description: 'Revoke an App Password by name.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['name'], + properties: { + name: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + ComAtprotoServerUpdateEmail: { + lexicon: 1, + id: 'com.atproto.server.updateEmail', + defs: { + main: { + type: 'procedure', + description: "Update an account's email.", + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['email'], + properties: { + email: { + type: 'string', + }, + token: { + type: 'string', + description: + "Requires a token from com.atproto.sever.requestEmailUpdate if the account's email has been confirmed.", + }, + }, + }, + }, + errors: [ + { + name: 'ExpiredToken', + }, + { + name: 'InvalidToken', + }, + { + name: 'TokenRequired', + }, + ], + }, + }, + }, + ComAtprotoSyncGetBlob: { + lexicon: 1, + id: 'com.atproto.sync.getBlob', + defs: { + main: { + type: 'query', + description: 'Get a blob associated with a given repo.', + parameters: { + type: 'params', + required: ['did', 'cid'], + properties: { + did: { + type: 'string', + format: 'did', + description: 'The DID of the repo.', + }, + cid: { + type: 'string', + format: 'cid', + description: 'The CID of the blob to fetch', + }, + }, + }, + output: { + encoding: '*/*', + }, + }, + }, + }, + ComAtprotoSyncGetBlocks: { + lexicon: 1, + id: 'com.atproto.sync.getBlocks', + defs: { + main: { + type: 'query', + description: 'Get blocks from a given repo.', + parameters: { + type: 'params', + required: ['did', 'cids'], + properties: { + did: { + type: 'string', + format: 'did', + description: 'The DID of the repo.', + }, + cids: { + type: 'array', + items: { + type: 'string', + format: 'cid', + }, + }, + }, + }, + output: { + encoding: 'application/vnd.ipld.car', + }, + }, + }, + }, + ComAtprotoSyncGetCheckout: { + lexicon: 1, + id: 'com.atproto.sync.getCheckout', + defs: { + main: { + type: 'query', + description: 'DEPRECATED - please use com.atproto.sync.getRepo instead', + parameters: { + type: 'params', + required: ['did'], + properties: { + did: { + type: 'string', + format: 'did', + description: 'The DID of the repo.', + }, + }, + }, + output: { + encoding: 'application/vnd.ipld.car', + }, + }, + }, + }, + ComAtprotoSyncGetHead: { + lexicon: 1, + id: 'com.atproto.sync.getHead', + defs: { + main: { + type: 'query', + description: + 'DEPRECATED - please use com.atproto.sync.getLatestCommit instead', + parameters: { + type: 'params', + required: ['did'], + properties: { + did: { + type: 'string', + format: 'did', + description: 'The DID of the repo.', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['root'], + properties: { + root: { + type: 'string', + format: 'cid', + }, + }, + }, + }, + errors: [ + { + name: 'HeadNotFound', + }, + ], + }, + }, + }, + ComAtprotoSyncGetLatestCommit: { + lexicon: 1, + id: 'com.atproto.sync.getLatestCommit', + defs: { + main: { + type: 'query', + description: 'Get the current commit CID & revision of the repo.', + parameters: { + type: 'params', + required: ['did'], + properties: { + did: { + type: 'string', + format: 'did', + description: 'The DID of the repo.', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['cid', 'rev'], + properties: { + cid: { + type: 'string', + format: 'cid', + }, + rev: { + type: 'string', + }, + }, + }, + }, + errors: [ + { + name: 'RepoNotFound', + }, + ], + }, + }, + }, + ComAtprotoSyncGetRecord: { + lexicon: 1, + id: 'com.atproto.sync.getRecord', + defs: { + main: { + type: 'query', + description: + 'Get blocks needed for existence or non-existence of record.', + parameters: { + type: 'params', + required: ['did', 'collection', 'rkey'], + properties: { + did: { + type: 'string', + format: 'did', + description: 'The DID of the repo.', + }, + collection: { + type: 'string', + format: 'nsid', + }, + rkey: { + type: 'string', + }, + commit: { + type: 'string', + format: 'cid', + description: 'An optional past commit CID.', + }, + }, + }, + output: { + encoding: 'application/vnd.ipld.car', + }, + }, + }, + }, + ComAtprotoSyncGetRepo: { + lexicon: 1, + id: 'com.atproto.sync.getRepo', + defs: { + main: { + type: 'query', + description: + "Gets the DID's repo, optionally catching up from a specific revision.", + parameters: { + type: 'params', + required: ['did'], + properties: { + did: { + type: 'string', + format: 'did', + description: 'The DID of the repo.', + }, + since: { + type: 'string', + description: 'The revision of the repo to catch up from.', + }, + }, + }, + output: { + encoding: 'application/vnd.ipld.car', + }, + }, + }, + }, + ComAtprotoSyncListBlobs: { + lexicon: 1, + id: 'com.atproto.sync.listBlobs', + defs: { + main: { + type: 'query', + description: 'List blob CIDs since some revision.', + parameters: { + type: 'params', + required: ['did'], + properties: { + did: { + type: 'string', + format: 'did', + description: 'The DID of the repo.', + }, + since: { + type: 'string', + description: 'Optional revision of the repo to list blobs since.', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 1000, + default: 500, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['cids'], + properties: { + cursor: { + type: 'string', + }, + cids: { + type: 'array', + items: { + type: 'string', + format: 'cid', + }, + }, + }, + }, + }, + }, + }, + }, + ComAtprotoSyncListRepos: { + lexicon: 1, + id: 'com.atproto.sync.listRepos', + defs: { + main: { + type: 'query', + description: 'List DIDs and root CIDs of hosted repos.', + parameters: { + type: 'params', + properties: { + limit: { + type: 'integer', + minimum: 1, + maximum: 1000, + default: 500, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['repos'], + properties: { + cursor: { + type: 'string', + }, + repos: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.sync.listRepos#repo', + }, + }, + }, + }, + }, + }, + repo: { + type: 'object', + required: ['did', 'head', 'rev'], + properties: { + did: { + type: 'string', + format: 'did', + }, + head: { + type: 'string', + format: 'cid', + }, + rev: { + type: 'string', + }, + }, + }, + }, + }, + ComAtprotoSyncNotifyOfUpdate: { + lexicon: 1, + id: 'com.atproto.sync.notifyOfUpdate', + defs: { + main: { + type: 'procedure', + description: + 'Notify a crawling service of a recent update; often when a long break between updates causes the connection with the crawling service to break.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['hostname'], + properties: { + hostname: { + type: 'string', + description: + 'Hostname of the service that is notifying of update.', + }, + }, + }, + }, + }, + }, + }, + ComAtprotoSyncRequestCrawl: { + lexicon: 1, + id: 'com.atproto.sync.requestCrawl', + defs: { + main: { + type: 'procedure', + description: 'Request a service to persistently crawl hosted repos.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['hostname'], + properties: { + hostname: { + type: 'string', + description: + 'Hostname of the service that is requesting to be crawled.', + }, + }, + }, + }, + }, + }, + }, + ComAtprotoSyncSubscribeRepos: { + lexicon: 1, + id: 'com.atproto.sync.subscribeRepos', + defs: { + main: { + type: 'subscription', + description: 'Subscribe to repo updates.', + parameters: { + type: 'params', + properties: { + cursor: { + type: 'integer', + description: 'The last known event to backfill from.', + }, + }, + }, + message: { + schema: { + type: 'union', + refs: [ + 'lex:com.atproto.sync.subscribeRepos#commit', + 'lex:com.atproto.sync.subscribeRepos#handle', + 'lex:com.atproto.sync.subscribeRepos#migrate', + 'lex:com.atproto.sync.subscribeRepos#tombstone', + 'lex:com.atproto.sync.subscribeRepos#info', + ], + }, + }, + errors: [ + { + name: 'FutureCursor', + }, + { + name: 'ConsumerTooSlow', + }, + ], + }, + commit: { + type: 'object', + required: [ + 'seq', + 'rebase', + 'tooBig', + 'repo', + 'commit', + 'rev', + 'since', + 'blocks', + 'ops', + 'blobs', + 'time', + ], + nullable: ['prev', 'since'], + properties: { + seq: { + type: 'integer', + }, + rebase: { + type: 'boolean', + }, + tooBig: { + type: 'boolean', + }, + repo: { + type: 'string', + format: 'did', + }, + commit: { + type: 'cid-link', + }, + prev: { + type: 'cid-link', + }, + rev: { + type: 'string', + description: 'The rev of the emitted commit.', + }, + since: { + type: 'string', + description: 'The rev of the last emitted commit from this repo.', + }, + blocks: { + type: 'bytes', + description: 'CAR file containing relevant blocks.', + maxLength: 1000000, + }, + ops: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.sync.subscribeRepos#repoOp', + }, + maxLength: 200, + }, + blobs: { + type: 'array', + items: { + type: 'cid-link', + }, + }, + time: { + type: 'string', + format: 'datetime', + }, + }, + }, + handle: { + type: 'object', + required: ['seq', 'did', 'handle', 'time'], + properties: { + seq: { + type: 'integer', + }, + did: { + type: 'string', + format: 'did', + }, + handle: { + type: 'string', + format: 'handle', + }, + time: { + type: 'string', + format: 'datetime', + }, + }, + }, + migrate: { + type: 'object', + required: ['seq', 'did', 'migrateTo', 'time'], + nullable: ['migrateTo'], + properties: { + seq: { + type: 'integer', + }, + did: { + type: 'string', + format: 'did', + }, + migrateTo: { + type: 'string', + }, + time: { + type: 'string', + format: 'datetime', + }, + }, + }, + tombstone: { + type: 'object', + required: ['seq', 'did', 'time'], + properties: { + seq: { + type: 'integer', + }, + did: { + type: 'string', + format: 'did', + }, + time: { + type: 'string', + format: 'datetime', + }, + }, + }, + info: { + type: 'object', + required: ['name'], + properties: { + name: { + type: 'string', + knownValues: ['OutdatedCursor'], + }, + message: { + type: 'string', + }, + }, + }, + repoOp: { + type: 'object', + description: + "A repo operation, ie a write of a single record. For creates and updates, CID is the record's CID as of this operation. For deletes, it's null.", + required: ['action', 'path', 'cid'], + nullable: ['cid'], + properties: { + action: { + type: 'string', + knownValues: ['create', 'update', 'delete'], + }, + path: { + type: 'string', + }, + cid: { + type: 'cid-link', + }, + }, + }, + }, + }, + ComAtprotoTempFetchLabels: { + lexicon: 1, + id: 'com.atproto.temp.fetchLabels', + defs: { + main: { + type: 'query', + description: + 'Fetch all labels from a labeler created after a certain date.', + parameters: { + type: 'params', + properties: { + since: { + type: 'integer', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 250, + default: 50, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['labels'], + properties: { + labels: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.label.defs#label', + }, + }, + }, + }, + }, + }, + }, + }, + ComAtprotoTempImportRepo: { + lexicon: 1, + id: 'com.atproto.temp.importRepo', + defs: { + main: { + type: 'procedure', + description: + "Gets the did's repo, optionally catching up from a specific revision.", + parameters: { + type: 'params', + required: ['did'], + properties: { + did: { + type: 'string', + format: 'did', + description: 'The DID of the repo.', + }, + }, + }, + input: { + encoding: 'application/vnd.ipld.car', + }, + output: { + encoding: 'text/plain', + }, + }, + }, + }, + ComAtprotoTempPushBlob: { + lexicon: 1, + id: 'com.atproto.temp.pushBlob', + defs: { + main: { + type: 'procedure', + description: + "Gets the did's repo, optionally catching up from a specific revision.", + parameters: { + type: 'params', + required: ['did'], + properties: { + did: { + type: 'string', + format: 'did', + description: 'The DID of the repo.', + }, + }, + }, + input: { + encoding: '*/*', + }, + }, + }, + }, + ComAtprotoTempTransferAccount: { + lexicon: 1, + id: 'com.atproto.temp.transferAccount', + defs: { + main: { + type: 'procedure', + description: 'Transfer an account.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['handle', 'did', 'plcOp'], + properties: { + handle: { + type: 'string', + format: 'handle', + }, + did: { + type: 'string', + format: 'did', + }, + plcOp: { + type: 'unknown', + }, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['accessJwt', 'refreshJwt', 'handle', 'did'], + properties: { + accessJwt: { + type: 'string', + }, + refreshJwt: { + type: 'string', + }, + handle: { + type: 'string', + format: 'handle', + }, + did: { + type: 'string', + format: 'did', + }, + }, + }, + }, + errors: [ + { + name: 'InvalidHandle', + }, + { + name: 'InvalidPassword', + }, + { + name: 'InvalidInviteCode', + }, + { + name: 'HandleNotAvailable', + }, + { + name: 'UnsupportedDomain', + }, + { + name: 'UnresolvableDid', + }, + { + name: 'IncompatibleDidDoc', + }, + ], + }, + }, + }, + AppBskyActorDefs: { + lexicon: 1, + id: 'app.bsky.actor.defs', + description: 'A reference to an actor in the network.', + defs: { + profileViewBasic: { + type: 'object', + required: ['did', 'handle'], + properties: { + did: { + type: 'string', + format: 'did', + }, + handle: { + type: 'string', + format: 'handle', + }, + displayName: { + type: 'string', + maxGraphemes: 64, + maxLength: 640, + }, + avatar: { + type: 'string', + }, + viewer: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#viewerState', + }, + labels: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.label.defs#label', + }, + }, + }, + }, + profileView: { + type: 'object', + required: ['did', 'handle'], + properties: { + did: { + type: 'string', + format: 'did', + }, + handle: { + type: 'string', + format: 'handle', + }, + displayName: { + type: 'string', + maxGraphemes: 64, + maxLength: 640, + }, + description: { + type: 'string', + maxGraphemes: 256, + maxLength: 2560, + }, + avatar: { + type: 'string', + }, + indexedAt: { + type: 'string', + format: 'datetime', + }, + viewer: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#viewerState', + }, + labels: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.label.defs#label', + }, + }, + }, + }, + profileViewDetailed: { + type: 'object', + required: ['did', 'handle'], + properties: { + did: { + type: 'string', + format: 'did', + }, + handle: { + type: 'string', + format: 'handle', + }, + displayName: { + type: 'string', + maxGraphemes: 64, + maxLength: 640, + }, + description: { + type: 'string', + maxGraphemes: 256, + maxLength: 2560, + }, + avatar: { + type: 'string', + }, + banner: { + type: 'string', + }, + followersCount: { + type: 'integer', + }, + followsCount: { + type: 'integer', + }, + postsCount: { + type: 'integer', + }, + indexedAt: { + type: 'string', + format: 'datetime', + }, + viewer: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#viewerState', + }, + labels: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.label.defs#label', + }, + }, + }, + }, + viewerState: { + type: 'object', + properties: { + muted: { + type: 'boolean', + }, + mutedByList: { + type: 'ref', + ref: 'lex:app.bsky.graph.defs#listViewBasic', + }, + blockedBy: { + type: 'boolean', + }, + blocking: { + type: 'string', + format: 'at-uri', + }, + blockingByList: { + type: 'ref', + ref: 'lex:app.bsky.graph.defs#listViewBasic', + }, + following: { + type: 'string', + format: 'at-uri', + }, + followedBy: { + type: 'string', + format: 'at-uri', + }, + }, + }, + preferences: { + type: 'array', + items: { + type: 'union', + refs: [ + 'lex:app.bsky.actor.defs#adultContentPref', + 'lex:app.bsky.actor.defs#contentLabelPref', + 'lex:app.bsky.actor.defs#savedFeedsPref', + 'lex:app.bsky.actor.defs#personalDetailsPref', + 'lex:app.bsky.actor.defs#feedViewPref', + 'lex:app.bsky.actor.defs#threadViewPref', + ], + }, + }, + adultContentPref: { + type: 'object', + required: ['enabled'], + properties: { + enabled: { + type: 'boolean', + default: false, + }, + }, + }, + contentLabelPref: { + type: 'object', + required: ['label', 'visibility'], + properties: { + label: { + type: 'string', + }, + visibility: { + type: 'string', + knownValues: ['show', 'warn', 'hide'], + }, + }, + }, + savedFeedsPref: { + type: 'object', + required: ['pinned', 'saved'], + properties: { + pinned: { + type: 'array', + items: { + type: 'string', + format: 'at-uri', + }, + }, + saved: { + type: 'array', + items: { + type: 'string', + format: 'at-uri', + }, + }, + }, + }, + personalDetailsPref: { + type: 'object', + properties: { + birthDate: { + type: 'string', + format: 'datetime', + description: 'The birth date of account owner.', + }, + }, + }, + feedViewPref: { + type: 'object', + required: ['feed'], + properties: { + feed: { + type: 'string', + description: + 'The URI of the feed, or an identifier which describes the feed.', + }, + hideReplies: { + type: 'boolean', + description: 'Hide replies in the feed.', + }, + hideRepliesByUnfollowed: { + type: 'boolean', + description: + 'Hide replies in the feed if they are not by followed users.', + }, + hideRepliesByLikeCount: { + type: 'integer', + description: + 'Hide replies in the feed if they do not have this number of likes.', + }, + hideReposts: { + type: 'boolean', + description: 'Hide reposts in the feed.', + }, + hideQuotePosts: { + type: 'boolean', + description: 'Hide quote posts in the feed.', + }, + }, + }, + threadViewPref: { + type: 'object', + properties: { + sort: { + type: 'string', + description: 'Sorting mode for threads.', + knownValues: ['oldest', 'newest', 'most-likes', 'random'], + }, + prioritizeFollowedUsers: { + type: 'boolean', + description: 'Show followed users at the top of all replies.', + }, + }, + }, + }, + }, + AppBskyActorGetPreferences: { + lexicon: 1, + id: 'app.bsky.actor.getPreferences', + defs: { + main: { + type: 'query', + description: 'Get private preferences attached to the account.', + parameters: { + type: 'params', + properties: {}, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['preferences'], + properties: { + preferences: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#preferences', + }, + }, + }, + }, + }, + }, + }, + AppBskyActorGetProfile: { + lexicon: 1, + id: 'app.bsky.actor.getProfile', + defs: { + main: { + type: 'query', + description: 'Get detailed profile view of an actor.', + parameters: { + type: 'params', + required: ['actor'], + properties: { + actor: { + type: 'string', + format: 'at-identifier', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#profileViewDetailed', + }, + }, + }, + }, + }, + AppBskyActorGetProfiles: { + lexicon: 1, + id: 'app.bsky.actor.getProfiles', + defs: { + main: { + type: 'query', + description: 'Get detailed profile views of multiple actors.', + parameters: { + type: 'params', + required: ['actors'], + properties: { + actors: { + type: 'array', + items: { + type: 'string', + format: 'at-identifier', + }, + maxLength: 25, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['profiles'], + properties: { + profiles: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#profileViewDetailed', + }, + }, + }, + }, + }, + }, + }, + }, + AppBskyActorGetSuggestions: { + lexicon: 1, + id: 'app.bsky.actor.getSuggestions', + defs: { + main: { + type: 'query', + description: 'Get a list of suggested actors, used for discovery.', + parameters: { + type: 'params', + properties: { + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['actors'], + properties: { + cursor: { + type: 'string', + }, + actors: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#profileView', + }, + }, + }, + }, + }, + }, + }, + }, + AppBskyActorProfile: { + lexicon: 1, + id: 'app.bsky.actor.profile', + defs: { + main: { + type: 'record', + description: 'A declaration of a profile.', + key: 'literal:self', + record: { + type: 'object', + properties: { + displayName: { + type: 'string', + maxGraphemes: 64, + maxLength: 640, + }, + description: { + type: 'string', + maxGraphemes: 256, + maxLength: 2560, + }, + avatar: { + type: 'blob', + accept: ['image/png', 'image/jpeg'], + maxSize: 1000000, + }, + banner: { + type: 'blob', + accept: ['image/png', 'image/jpeg'], + maxSize: 1000000, + }, + labels: { + type: 'union', + refs: ['lex:com.atproto.label.defs#selfLabels'], + }, + }, + }, + }, + }, + }, + AppBskyActorPutPreferences: { + lexicon: 1, + id: 'app.bsky.actor.putPreferences', + defs: { + main: { + type: 'procedure', + description: 'Set the private preferences attached to the account.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['preferences'], + properties: { + preferences: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#preferences', + }, + }, + }, + }, + }, + }, + }, + AppBskyActorSearchActors: { + lexicon: 1, + id: 'app.bsky.actor.searchActors', + defs: { + main: { + type: 'query', + description: 'Find actors (profiles) matching search criteria.', + parameters: { + type: 'params', + properties: { + term: { + type: 'string', + description: "DEPRECATED: use 'q' instead.", + }, + q: { + type: 'string', + description: + 'Search query string. Syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended.', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 25, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['actors'], + properties: { + cursor: { + type: 'string', + }, + actors: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#profileView', + }, + }, + }, + }, + }, + }, + }, + }, + AppBskyActorSearchActorsTypeahead: { + lexicon: 1, + id: 'app.bsky.actor.searchActorsTypeahead', + defs: { + main: { + type: 'query', + description: 'Find actor suggestions for a prefix search term.', + parameters: { + type: 'params', + properties: { + term: { + type: 'string', + description: "DEPRECATED: use 'q' instead.", + }, + q: { + type: 'string', + description: 'Search query prefix; not a full query string.', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 10, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['actors'], + properties: { + actors: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#profileViewBasic', + }, + }, + }, + }, + }, + }, + }, + }, + AppBskyEmbedExternal: { + lexicon: 1, + id: 'app.bsky.embed.external', + description: + 'A representation of some externally linked content, embedded in another form of content.', + defs: { + main: { + type: 'object', + required: ['external'], + properties: { + external: { + type: 'ref', + ref: 'lex:app.bsky.embed.external#external', + }, + }, + }, + external: { + type: 'object', + required: ['uri', 'title', 'description'], + properties: { + uri: { + type: 'string', + format: 'uri', + }, + title: { + type: 'string', + }, + description: { + type: 'string', + }, + thumb: { + type: 'blob', + accept: ['image/*'], + maxSize: 1000000, + }, + }, + }, + view: { + type: 'object', + required: ['external'], + properties: { + external: { + type: 'ref', + ref: 'lex:app.bsky.embed.external#viewExternal', + }, + }, + }, + viewExternal: { + type: 'object', + required: ['uri', 'title', 'description'], + properties: { + uri: { + type: 'string', + format: 'uri', + }, + title: { + type: 'string', + }, + description: { + type: 'string', + }, + thumb: { + type: 'string', + }, + }, + }, + }, + }, + AppBskyEmbedImages: { + lexicon: 1, + id: 'app.bsky.embed.images', + description: 'A set of images embedded in some other form of content.', + defs: { + main: { + type: 'object', + required: ['images'], + properties: { + images: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.embed.images#image', + }, + maxLength: 4, + }, + }, + }, + image: { + type: 'object', + required: ['image', 'alt'], + properties: { + image: { + type: 'blob', + accept: ['image/*'], + maxSize: 1000000, + }, + alt: { + type: 'string', + }, + aspectRatio: { + type: 'ref', + ref: 'lex:app.bsky.embed.images#aspectRatio', + }, + }, + }, + aspectRatio: { + type: 'object', + description: + 'width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit.', + required: ['width', 'height'], + properties: { + width: { + type: 'integer', + minimum: 1, + }, + height: { + type: 'integer', + minimum: 1, + }, + }, + }, + view: { + type: 'object', + required: ['images'], + properties: { + images: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.embed.images#viewImage', + }, + maxLength: 4, + }, + }, + }, + viewImage: { + type: 'object', + required: ['thumb', 'fullsize', 'alt'], + properties: { + thumb: { + type: 'string', + }, + fullsize: { + type: 'string', + }, + alt: { + type: 'string', + }, + aspectRatio: { + type: 'ref', + ref: 'lex:app.bsky.embed.images#aspectRatio', + }, + }, + }, + }, + }, + AppBskyEmbedRecord: { + lexicon: 1, + id: 'app.bsky.embed.record', + description: + 'A representation of a record embedded in another form of content.', + defs: { + main: { + type: 'object', + required: ['record'], + properties: { + record: { + type: 'ref', + ref: 'lex:com.atproto.repo.strongRef', + }, + }, + }, + view: { + type: 'object', + required: ['record'], + properties: { + record: { + type: 'union', + refs: [ + 'lex:app.bsky.embed.record#viewRecord', + 'lex:app.bsky.embed.record#viewNotFound', + 'lex:app.bsky.embed.record#viewBlocked', + 'lex:app.bsky.feed.defs#generatorView', + 'lex:app.bsky.graph.defs#listView', + ], + }, + }, + }, + viewRecord: { + type: 'object', + required: ['uri', 'cid', 'author', 'value', 'indexedAt'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + cid: { + type: 'string', + format: 'cid', + }, + author: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#profileViewBasic', + }, + value: { + type: 'unknown', + }, + labels: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.label.defs#label', + }, + }, + embeds: { + type: 'array', + items: { + type: 'union', + refs: [ + 'lex:app.bsky.embed.images#view', + 'lex:app.bsky.embed.external#view', + 'lex:app.bsky.embed.record#view', + 'lex:app.bsky.embed.recordWithMedia#view', + ], + }, + }, + indexedAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + viewNotFound: { + type: 'object', + required: ['uri', 'notFound'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + notFound: { + type: 'boolean', + const: true, + }, + }, + }, + viewBlocked: { + type: 'object', + required: ['uri', 'blocked', 'author'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + blocked: { + type: 'boolean', + const: true, + }, + author: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#blockedAuthor', + }, + }, + }, + }, + }, + AppBskyEmbedRecordWithMedia: { + lexicon: 1, + id: 'app.bsky.embed.recordWithMedia', + description: + 'A representation of a record embedded in another form of content, alongside other compatible embeds.', + defs: { + main: { + type: 'object', + required: ['record', 'media'], + properties: { + record: { + type: 'ref', + ref: 'lex:app.bsky.embed.record', + }, + media: { + type: 'union', + refs: ['lex:app.bsky.embed.images', 'lex:app.bsky.embed.external'], + }, + }, + }, + view: { + type: 'object', + required: ['record', 'media'], + properties: { + record: { + type: 'ref', + ref: 'lex:app.bsky.embed.record#view', + }, + media: { + type: 'union', + refs: [ + 'lex:app.bsky.embed.images#view', + 'lex:app.bsky.embed.external#view', + ], + }, + }, + }, + }, + }, + AppBskyFeedDefs: { + lexicon: 1, + id: 'app.bsky.feed.defs', + defs: { + postView: { + type: 'object', + required: ['uri', 'cid', 'author', 'record', 'indexedAt'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + cid: { + type: 'string', + format: 'cid', + }, + author: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#profileViewBasic', + }, + record: { + type: 'unknown', + }, + embed: { + type: 'union', + refs: [ + 'lex:app.bsky.embed.images#view', + 'lex:app.bsky.embed.external#view', + 'lex:app.bsky.embed.record#view', + 'lex:app.bsky.embed.recordWithMedia#view', + ], + }, + replyCount: { + type: 'integer', + }, + repostCount: { + type: 'integer', + }, + likeCount: { + type: 'integer', + }, + indexedAt: { + type: 'string', + format: 'datetime', + }, + viewer: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#viewerState', + }, + labels: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.label.defs#label', + }, + }, + threadgate: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#threadgateView', + }, + }, + }, + viewerState: { + type: 'object', + properties: { + repost: { + type: 'string', + format: 'at-uri', + }, + like: { + type: 'string', + format: 'at-uri', + }, + replyDisabled: { + type: 'boolean', + }, + }, + }, + feedViewPost: { + type: 'object', + required: ['post'], + properties: { + post: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#postView', + }, + reply: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#replyRef', + }, + reason: { + type: 'union', + refs: ['lex:app.bsky.feed.defs#reasonRepost'], + }, + }, + }, + replyRef: { + type: 'object', + required: ['root', 'parent'], + properties: { + root: { + type: 'union', + refs: [ + 'lex:app.bsky.feed.defs#postView', + 'lex:app.bsky.feed.defs#notFoundPost', + 'lex:app.bsky.feed.defs#blockedPost', + ], + }, + parent: { + type: 'union', + refs: [ + 'lex:app.bsky.feed.defs#postView', + 'lex:app.bsky.feed.defs#notFoundPost', + 'lex:app.bsky.feed.defs#blockedPost', + ], + }, + }, + }, + reasonRepost: { + type: 'object', + required: ['by', 'indexedAt'], + properties: { + by: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#profileViewBasic', + }, + indexedAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + threadViewPost: { + type: 'object', + required: ['post'], + properties: { + post: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#postView', + }, + parent: { + type: 'union', + refs: [ + 'lex:app.bsky.feed.defs#threadViewPost', + 'lex:app.bsky.feed.defs#notFoundPost', + 'lex:app.bsky.feed.defs#blockedPost', + ], + }, + replies: { + type: 'array', + items: { + type: 'union', + refs: [ + 'lex:app.bsky.feed.defs#threadViewPost', + 'lex:app.bsky.feed.defs#notFoundPost', + 'lex:app.bsky.feed.defs#blockedPost', + ], + }, + }, + }, + }, + notFoundPost: { + type: 'object', + required: ['uri', 'notFound'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + notFound: { + type: 'boolean', + const: true, + }, + }, + }, + blockedPost: { + type: 'object', + required: ['uri', 'blocked', 'author'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + blocked: { + type: 'boolean', + const: true, + }, + author: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#blockedAuthor', + }, + }, + }, + blockedAuthor: { + type: 'object', + required: ['did'], + properties: { + did: { + type: 'string', + format: 'did', + }, + viewer: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#viewerState', + }, + }, + }, + generatorView: { + type: 'object', + required: ['uri', 'cid', 'did', 'creator', 'displayName', 'indexedAt'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + cid: { + type: 'string', + format: 'cid', + }, + did: { + type: 'string', + format: 'did', + }, + creator: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#profileView', + }, + displayName: { + type: 'string', + }, + description: { + type: 'string', + maxGraphemes: 300, + maxLength: 3000, + }, + descriptionFacets: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.richtext.facet', + }, + }, + avatar: { + type: 'string', + }, + likeCount: { + type: 'integer', + minimum: 0, + }, + viewer: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#generatorViewerState', + }, + indexedAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + generatorViewerState: { + type: 'object', + properties: { + like: { + type: 'string', + format: 'at-uri', + }, + }, + }, + skeletonFeedPost: { + type: 'object', + required: ['post'], + properties: { + post: { + type: 'string', + format: 'at-uri', + }, + reason: { + type: 'union', + refs: ['lex:app.bsky.feed.defs#skeletonReasonRepost'], + }, + }, + }, + skeletonReasonRepost: { + type: 'object', + required: ['repost'], + properties: { + repost: { + type: 'string', + format: 'at-uri', + }, + }, + }, + threadgateView: { + type: 'object', + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + cid: { + type: 'string', + format: 'cid', + }, + record: { + type: 'unknown', + }, + lists: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.graph.defs#listViewBasic', + }, + }, + }, + }, + }, + }, + AppBskyFeedDescribeFeedGenerator: { + lexicon: 1, + id: 'app.bsky.feed.describeFeedGenerator', + defs: { + main: { + type: 'query', + description: + 'Get information about a feed generator, including policies and offered feed URIs.', + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['did', 'feeds'], + properties: { + did: { + type: 'string', + format: 'did', + }, + feeds: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.feed.describeFeedGenerator#feed', + }, + }, + links: { + type: 'ref', + ref: 'lex:app.bsky.feed.describeFeedGenerator#links', + }, + }, + }, + }, + }, + feed: { + type: 'object', + required: ['uri'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + }, + }, + links: { + type: 'object', + properties: { + privacyPolicy: { + type: 'string', + }, + termsOfService: { + type: 'string', + }, + }, + }, + }, + }, + AppBskyFeedGenerator: { + lexicon: 1, + id: 'app.bsky.feed.generator', + defs: { + main: { + type: 'record', + description: 'A declaration of the existence of a feed generator.', + key: 'any', + record: { + type: 'object', + required: ['did', 'displayName', 'createdAt'], + properties: { + did: { + type: 'string', + format: 'did', + }, + displayName: { + type: 'string', + maxGraphemes: 24, + maxLength: 240, + }, + description: { + type: 'string', + maxGraphemes: 300, + maxLength: 3000, + }, + descriptionFacets: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.richtext.facet', + }, + }, + avatar: { + type: 'blob', + accept: ['image/png', 'image/jpeg'], + maxSize: 1000000, + }, + labels: { + type: 'union', + refs: ['lex:com.atproto.label.defs#selfLabels'], + }, + createdAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + }, + }, + }, + AppBskyFeedGetActorFeeds: { + lexicon: 1, + id: 'app.bsky.feed.getActorFeeds', + defs: { + main: { + type: 'query', + description: 'Get a list of feeds created by the actor.', + parameters: { + type: 'params', + required: ['actor'], + properties: { + actor: { + type: 'string', + format: 'at-identifier', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['feeds'], + properties: { + cursor: { + type: 'string', + }, + feeds: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#generatorView', + }, + }, + }, + }, + }, + }, + }, + }, + AppBskyFeedGetActorLikes: { + lexicon: 1, + id: 'app.bsky.feed.getActorLikes', + defs: { + main: { + type: 'query', + description: 'Get a list of posts liked by an actor.', + parameters: { + type: 'params', + required: ['actor'], + properties: { + actor: { + type: 'string', + format: 'at-identifier', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['feed'], + properties: { + cursor: { + type: 'string', + }, + feed: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#feedViewPost', + }, + }, + }, + }, + }, + errors: [ + { + name: 'BlockedActor', + }, + { + name: 'BlockedByActor', + }, + ], + }, + }, + }, + AppBskyFeedGetAuthorFeed: { + lexicon: 1, + id: 'app.bsky.feed.getAuthorFeed', + defs: { + main: { + type: 'query', + description: "Get a view of an actor's feed.", + parameters: { + type: 'params', + required: ['actor'], + properties: { + actor: { + type: 'string', + format: 'at-identifier', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + filter: { + type: 'string', + knownValues: [ + 'posts_with_replies', + 'posts_no_replies', + 'posts_with_media', + 'posts_and_author_threads', + ], + default: 'posts_with_replies', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['feed'], + properties: { + cursor: { + type: 'string', + }, + feed: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#feedViewPost', + }, + }, + }, + }, + }, + errors: [ + { + name: 'BlockedActor', + }, + { + name: 'BlockedByActor', + }, + ], + }, + }, + }, + AppBskyFeedGetFeed: { + lexicon: 1, + id: 'app.bsky.feed.getFeed', + defs: { + main: { + type: 'query', + description: + "Get a hydrated feed from an actor's selected feed generator.", + parameters: { + type: 'params', + required: ['feed'], + properties: { + feed: { + type: 'string', + format: 'at-uri', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['feed'], + properties: { + cursor: { + type: 'string', + }, + feed: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#feedViewPost', + }, + }, + }, + }, + }, + errors: [ + { + name: 'UnknownFeed', + }, + ], + }, + }, + }, + AppBskyFeedGetFeedGenerator: { + lexicon: 1, + id: 'app.bsky.feed.getFeedGenerator', + defs: { + main: { + type: 'query', + description: 'Get information about a feed generator.', + parameters: { + type: 'params', + required: ['feed'], + properties: { + feed: { + type: 'string', + format: 'at-uri', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['view', 'isOnline', 'isValid'], + properties: { + view: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#generatorView', + }, + isOnline: { + type: 'boolean', + }, + isValid: { + type: 'boolean', + }, + }, + }, + }, + }, + }, + }, + AppBskyFeedGetFeedGenerators: { + lexicon: 1, + id: 'app.bsky.feed.getFeedGenerators', + defs: { + main: { + type: 'query', + description: 'Get information about a list of feed generators.', + parameters: { + type: 'params', + required: ['feeds'], + properties: { + feeds: { + type: 'array', + items: { + type: 'string', + format: 'at-uri', + }, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['feeds'], + properties: { + feeds: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#generatorView', + }, + }, + }, + }, + }, + }, + }, + }, + AppBskyFeedGetFeedSkeleton: { + lexicon: 1, + id: 'app.bsky.feed.getFeedSkeleton', + defs: { + main: { + type: 'query', + description: 'Get a skeleton of a feed provided by a feed generator.', + parameters: { + type: 'params', + required: ['feed'], + properties: { + feed: { + type: 'string', + format: 'at-uri', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['feed'], + properties: { + cursor: { + type: 'string', + }, + feed: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#skeletonFeedPost', + }, + }, + }, + }, + }, + errors: [ + { + name: 'UnknownFeed', + }, + ], + }, + }, + }, + AppBskyFeedGetLikes: { + lexicon: 1, + id: 'app.bsky.feed.getLikes', + defs: { + main: { + type: 'query', + description: 'Get the list of likes.', + parameters: { + type: 'params', + required: ['uri'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + cid: { + type: 'string', + format: 'cid', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['uri', 'likes'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + cid: { + type: 'string', + format: 'cid', + }, + cursor: { + type: 'string', + }, + likes: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.feed.getLikes#like', + }, + }, + }, + }, + }, + }, + like: { + type: 'object', + required: ['indexedAt', 'createdAt', 'actor'], + properties: { + indexedAt: { + type: 'string', + format: 'datetime', + }, + createdAt: { + type: 'string', + format: 'datetime', + }, + actor: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#profileView', + }, + }, + }, + }, + }, + AppBskyFeedGetListFeed: { + lexicon: 1, + id: 'app.bsky.feed.getListFeed', + defs: { + main: { + type: 'query', + description: 'Get a view of a recent posts from actors in a list.', + parameters: { + type: 'params', + required: ['list'], + properties: { + list: { + type: 'string', + format: 'at-uri', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['feed'], + properties: { + cursor: { + type: 'string', + }, + feed: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#feedViewPost', + }, + }, + }, + }, + }, + errors: [ + { + name: 'UnknownList', + }, + ], + }, + }, + }, + AppBskyFeedGetPostThread: { + lexicon: 1, + id: 'app.bsky.feed.getPostThread', + defs: { + main: { + type: 'query', + description: 'Get posts in a thread.', + parameters: { + type: 'params', + required: ['uri'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + depth: { + type: 'integer', + default: 6, + minimum: 0, + maximum: 1000, + }, + parentHeight: { + type: 'integer', + default: 80, + minimum: 0, + maximum: 1000, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['thread'], + properties: { + thread: { + type: 'union', + refs: [ + 'lex:app.bsky.feed.defs#threadViewPost', + 'lex:app.bsky.feed.defs#notFoundPost', + 'lex:app.bsky.feed.defs#blockedPost', + ], + }, + }, + }, + }, + errors: [ + { + name: 'NotFound', + }, + ], + }, + }, + }, + AppBskyFeedGetPosts: { + lexicon: 1, + id: 'app.bsky.feed.getPosts', + defs: { + main: { + type: 'query', + description: "Get a view of an actor's feed.", + parameters: { + type: 'params', + required: ['uris'], + properties: { + uris: { + type: 'array', + items: { + type: 'string', + format: 'at-uri', + }, + maxLength: 25, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['posts'], + properties: { + posts: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#postView', + }, + }, + }, + }, + }, + }, + }, + }, + AppBskyFeedGetRepostedBy: { + lexicon: 1, + id: 'app.bsky.feed.getRepostedBy', + defs: { + main: { + type: 'query', + description: 'Get a list of reposts.', + parameters: { + type: 'params', + required: ['uri'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + cid: { + type: 'string', + format: 'cid', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['uri', 'repostedBy'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + cid: { + type: 'string', + format: 'cid', + }, + cursor: { + type: 'string', + }, + repostedBy: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#profileView', + }, + }, + }, + }, + }, + }, + }, + }, + AppBskyFeedGetSuggestedFeeds: { + lexicon: 1, + id: 'app.bsky.feed.getSuggestedFeeds', + defs: { + main: { + type: 'query', + description: 'Get a list of suggested feeds for the viewer.', + parameters: { + type: 'params', + properties: { + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['feeds'], + properties: { + cursor: { + type: 'string', + }, + feeds: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#generatorView', + }, + }, + }, + }, + }, + }, + }, + }, + AppBskyFeedGetTimeline: { + lexicon: 1, + id: 'app.bsky.feed.getTimeline', + defs: { + main: { + type: 'query', + description: "Get a view of the actor's home timeline.", + parameters: { + type: 'params', + properties: { + algorithm: { + type: 'string', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['feed'], + properties: { + cursor: { + type: 'string', + }, + feed: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#feedViewPost', + }, + }, + }, + }, + }, + }, + }, + }, + AppBskyFeedLike: { + lexicon: 1, + id: 'app.bsky.feed.like', + defs: { + main: { + type: 'record', + description: 'A declaration of a like.', + key: 'tid', + record: { + type: 'object', + required: ['subject', 'createdAt'], + properties: { + subject: { + type: 'ref', + ref: 'lex:com.atproto.repo.strongRef', + }, + createdAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + }, + }, + }, + AppBskyFeedPost: { + lexicon: 1, + id: 'app.bsky.feed.post', + defs: { + main: { + type: 'record', + description: 'A declaration of a post.', + key: 'tid', + record: { + type: 'object', + required: ['text', 'createdAt'], + properties: { + text: { + type: 'string', + maxLength: 3000, + maxGraphemes: 300, + }, + entities: { + type: 'array', + description: 'Deprecated: replaced by app.bsky.richtext.facet.', + items: { + type: 'ref', + ref: 'lex:app.bsky.feed.post#entity', + }, + }, + facets: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.richtext.facet', + }, + }, + reply: { + type: 'ref', + ref: 'lex:app.bsky.feed.post#replyRef', + }, + embed: { + type: 'union', + refs: [ + 'lex:app.bsky.embed.images', + 'lex:app.bsky.embed.external', + 'lex:app.bsky.embed.record', + 'lex:app.bsky.embed.recordWithMedia', + ], + }, + langs: { + type: 'array', + maxLength: 3, + items: { + type: 'string', + format: 'language', + }, + }, + labels: { + type: 'union', + refs: ['lex:com.atproto.label.defs#selfLabels'], + }, + tags: { + type: 'array', + maxLength: 8, + items: { + type: 'string', + maxLength: 640, + maxGraphemes: 64, + }, + description: 'Additional non-inline tags describing this post.', + }, + createdAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + }, + replyRef: { + type: 'object', + required: ['root', 'parent'], + properties: { + root: { + type: 'ref', + ref: 'lex:com.atproto.repo.strongRef', + }, + parent: { + type: 'ref', + ref: 'lex:com.atproto.repo.strongRef', + }, + }, + }, + entity: { + type: 'object', + description: 'Deprecated: use facets instead.', + required: ['index', 'type', 'value'], + properties: { + index: { + type: 'ref', + ref: 'lex:app.bsky.feed.post#textSlice', + }, + type: { + type: 'string', + description: "Expected values are 'mention' and 'link'.", + }, + value: { + type: 'string', + }, + }, + }, + textSlice: { + type: 'object', + description: + 'Deprecated. Use app.bsky.richtext instead -- A text segment. Start is inclusive, end is exclusive. Indices are for utf16-encoded strings.', + required: ['start', 'end'], + properties: { + start: { + type: 'integer', + minimum: 0, + }, + end: { + type: 'integer', + minimum: 0, + }, + }, + }, + }, + }, + AppBskyFeedRepost: { + lexicon: 1, + id: 'app.bsky.feed.repost', + defs: { + main: { + description: 'A declaration of a repost.', + type: 'record', + key: 'tid', + record: { + type: 'object', + required: ['subject', 'createdAt'], + properties: { + subject: { + type: 'ref', + ref: 'lex:com.atproto.repo.strongRef', + }, + createdAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + }, + }, + }, + AppBskyFeedSearchPosts: { + lexicon: 1, + id: 'app.bsky.feed.searchPosts', + defs: { + main: { + type: 'query', + description: 'Find posts matching search criteria.', + parameters: { + type: 'params', + required: ['q'], + properties: { + q: { + type: 'string', + description: + 'Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended.', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 25, + }, + cursor: { + type: 'string', + description: + 'Optional pagination mechanism; may not necessarily allow scrolling through entire result set.', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['posts'], + properties: { + cursor: { + type: 'string', + }, + hitsTotal: { + type: 'integer', + description: + 'Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits.', + }, + posts: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#postView', + }, + }, + }, + }, + }, + errors: [ + { + name: 'BadQueryString', + }, + ], + }, + }, + }, + AppBskyFeedThreadgate: { + lexicon: 1, + id: 'app.bsky.feed.threadgate', + defs: { + main: { + type: 'record', + key: 'tid', + description: + "Defines interaction gating rules for a thread. The rkey of the threadgate record should match the rkey of the thread's root post.", + record: { + type: 'object', + required: ['post', 'createdAt'], + properties: { + post: { + type: 'string', + format: 'at-uri', + }, + allow: { + type: 'array', + maxLength: 5, + items: { + type: 'union', + refs: [ + 'lex:app.bsky.feed.threadgate#mentionRule', + 'lex:app.bsky.feed.threadgate#followingRule', + 'lex:app.bsky.feed.threadgate#listRule', + ], + }, + }, + createdAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + }, + mentionRule: { + type: 'object', + description: 'Allow replies from actors mentioned in your post.', + properties: {}, + }, + followingRule: { + type: 'object', + description: 'Allow replies from actors you follow.', + properties: {}, + }, + listRule: { + type: 'object', + description: 'Allow replies from actors on a list.', + required: ['list'], + properties: { + list: { + type: 'string', + format: 'at-uri', + }, + }, + }, + }, + }, + AppBskyGraphBlock: { + lexicon: 1, + id: 'app.bsky.graph.block', + defs: { + main: { + type: 'record', + description: 'A declaration of a block.', + key: 'tid', + record: { + type: 'object', + required: ['subject', 'createdAt'], + properties: { + subject: { + type: 'string', + format: 'did', + }, + createdAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + }, + }, + }, + AppBskyGraphDefs: { + lexicon: 1, + id: 'app.bsky.graph.defs', + defs: { + listViewBasic: { + type: 'object', + required: ['uri', 'cid', 'name', 'purpose'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + cid: { + type: 'string', + format: 'cid', + }, + name: { + type: 'string', + maxLength: 64, + minLength: 1, + }, + purpose: { + type: 'ref', + ref: 'lex:app.bsky.graph.defs#listPurpose', + }, + avatar: { + type: 'string', + }, + viewer: { + type: 'ref', + ref: 'lex:app.bsky.graph.defs#listViewerState', + }, + indexedAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + listView: { + type: 'object', + required: ['uri', 'cid', 'creator', 'name', 'purpose', 'indexedAt'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + cid: { + type: 'string', + format: 'cid', + }, + creator: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#profileView', + }, + name: { + type: 'string', + maxLength: 64, + minLength: 1, + }, + purpose: { + type: 'ref', + ref: 'lex:app.bsky.graph.defs#listPurpose', + }, + description: { + type: 'string', + maxGraphemes: 300, + maxLength: 3000, + }, + descriptionFacets: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.richtext.facet', + }, + }, + avatar: { + type: 'string', + }, + viewer: { + type: 'ref', + ref: 'lex:app.bsky.graph.defs#listViewerState', + }, + indexedAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + listItemView: { + type: 'object', + required: ['uri', 'subject'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + subject: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#profileView', + }, + }, + }, + listPurpose: { + type: 'string', + knownValues: [ + 'app.bsky.graph.defs#modlist', + 'app.bsky.graph.defs#curatelist', + ], + }, + modlist: { + type: 'token', + description: + 'A list of actors to apply an aggregate moderation action (mute/block) on.', + }, + curatelist: { + type: 'token', + description: + 'A list of actors used for curation purposes such as list feeds or interaction gating.', + }, + listViewerState: { + type: 'object', + properties: { + muted: { + type: 'boolean', + }, + blocked: { + type: 'string', + format: 'at-uri', + }, + }, + }, + }, + }, + AppBskyGraphFollow: { + lexicon: 1, + id: 'app.bsky.graph.follow', + defs: { + main: { + type: 'record', + description: 'A declaration of a social follow.', + key: 'tid', + record: { + type: 'object', + required: ['subject', 'createdAt'], + properties: { + subject: { + type: 'string', + format: 'did', + }, + createdAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + }, + }, + }, + AppBskyGraphGetBlocks: { + lexicon: 1, + id: 'app.bsky.graph.getBlocks', + defs: { + main: { + type: 'query', + description: 'Get a list of who the actor is blocking.', + parameters: { + type: 'params', + properties: { + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['blocks'], + properties: { + cursor: { + type: 'string', + }, + blocks: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#profileView', + }, + }, + }, + }, + }, + }, + }, + }, + AppBskyGraphGetFollowers: { + lexicon: 1, + id: 'app.bsky.graph.getFollowers', + defs: { + main: { + type: 'query', + description: "Get a list of an actor's followers.", + parameters: { + type: 'params', + required: ['actor'], + properties: { + actor: { + type: 'string', + format: 'at-identifier', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['subject', 'followers'], + properties: { + subject: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#profileView', + }, + cursor: { + type: 'string', + }, + followers: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#profileView', + }, + }, + }, + }, + }, + }, + }, + }, + AppBskyGraphGetFollows: { + lexicon: 1, + id: 'app.bsky.graph.getFollows', + defs: { + main: { + type: 'query', + description: 'Get a list of who the actor follows.', + parameters: { + type: 'params', + required: ['actor'], + properties: { + actor: { + type: 'string', + format: 'at-identifier', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['subject', 'follows'], + properties: { + subject: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#profileView', + }, + cursor: { + type: 'string', + }, + follows: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#profileView', + }, + }, + }, + }, + }, + }, + }, + }, + AppBskyGraphGetList: { + lexicon: 1, + id: 'app.bsky.graph.getList', + defs: { + main: { + type: 'query', + description: 'Get a list of actors.', + parameters: { + type: 'params', + required: ['list'], + properties: { + list: { + type: 'string', + format: 'at-uri', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['list', 'items'], + properties: { + cursor: { + type: 'string', + }, + list: { + type: 'ref', + ref: 'lex:app.bsky.graph.defs#listView', + }, + items: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.graph.defs#listItemView', + }, + }, + }, + }, + }, + }, + }, + }, + AppBskyGraphGetListBlocks: { + lexicon: 1, + id: 'app.bsky.graph.getListBlocks', + defs: { + main: { + type: 'query', + description: 'Get lists that the actor is blocking.', + parameters: { + type: 'params', + properties: { + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['lists'], + properties: { + cursor: { + type: 'string', + }, + lists: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.graph.defs#listView', + }, + }, + }, + }, + }, + }, + }, + }, + AppBskyGraphGetListMutes: { + lexicon: 1, + id: 'app.bsky.graph.getListMutes', + defs: { + main: { + type: 'query', + description: 'Get lists that the actor is muting.', + parameters: { + type: 'params', + properties: { + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['lists'], + properties: { + cursor: { + type: 'string', + }, + lists: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.graph.defs#listView', + }, + }, + }, + }, + }, + }, + }, + }, + AppBskyGraphGetLists: { + lexicon: 1, + id: 'app.bsky.graph.getLists', + defs: { + main: { + type: 'query', + description: 'Get a list of lists that belong to an actor.', + parameters: { + type: 'params', + required: ['actor'], + properties: { + actor: { + type: 'string', + format: 'at-identifier', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['lists'], + properties: { + cursor: { + type: 'string', + }, + lists: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.graph.defs#listView', + }, + }, + }, + }, + }, + }, + }, + }, + AppBskyGraphGetMutes: { + lexicon: 1, + id: 'app.bsky.graph.getMutes', + defs: { + main: { + type: 'query', + description: 'Get a list of who the actor mutes.', + parameters: { + type: 'params', + properties: { + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['mutes'], + properties: { + cursor: { + type: 'string', + }, + mutes: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#profileView', + }, + }, + }, + }, + }, + }, + }, + }, + AppBskyGraphGetSuggestedFollowsByActor: { + lexicon: 1, + id: 'app.bsky.graph.getSuggestedFollowsByActor', + defs: { + main: { + type: 'query', + description: 'Get suggested follows related to a given actor.', + parameters: { + type: 'params', + required: ['actor'], + properties: { + actor: { + type: 'string', + format: 'at-identifier', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['suggestions'], + properties: { + suggestions: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#profileView', + }, + }, + }, + }, + }, + }, + }, + }, + AppBskyGraphList: { + lexicon: 1, + id: 'app.bsky.graph.list', + defs: { + main: { + type: 'record', + description: 'A declaration of a list of actors.', + key: 'tid', + record: { + type: 'object', + required: ['name', 'purpose', 'createdAt'], + properties: { + purpose: { + type: 'ref', + ref: 'lex:app.bsky.graph.defs#listPurpose', + }, + name: { + type: 'string', + maxLength: 64, + minLength: 1, + }, + description: { + type: 'string', + maxGraphemes: 300, + maxLength: 3000, + }, + descriptionFacets: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.richtext.facet', + }, + }, + avatar: { + type: 'blob', + accept: ['image/png', 'image/jpeg'], + maxSize: 1000000, + }, + labels: { + type: 'union', + refs: ['lex:com.atproto.label.defs#selfLabels'], + }, + createdAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + }, + }, + }, + AppBskyGraphListblock: { + lexicon: 1, + id: 'app.bsky.graph.listblock', + defs: { + main: { + type: 'record', + description: 'A block of an entire list of actors.', + key: 'tid', + record: { + type: 'object', + required: ['subject', 'createdAt'], + properties: { + subject: { + type: 'string', + format: 'at-uri', + }, + createdAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + }, + }, + }, + AppBskyGraphListitem: { + lexicon: 1, + id: 'app.bsky.graph.listitem', + defs: { + main: { + type: 'record', + description: 'An item under a declared list of actors.', + key: 'tid', + record: { + type: 'object', + required: ['subject', 'list', 'createdAt'], + properties: { + subject: { + type: 'string', + format: 'did', + }, + list: { + type: 'string', + format: 'at-uri', + }, + createdAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + }, + }, + }, + AppBskyGraphMuteActor: { + lexicon: 1, + id: 'app.bsky.graph.muteActor', + defs: { + main: { + type: 'procedure', + description: 'Mute an actor by DID or handle.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['actor'], + properties: { + actor: { + type: 'string', + format: 'at-identifier', + }, + }, + }, + }, + }, + }, + }, + AppBskyGraphMuteActorList: { + lexicon: 1, + id: 'app.bsky.graph.muteActorList', + defs: { + main: { + type: 'procedure', + description: 'Mute a list of actors.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['list'], + properties: { + list: { + type: 'string', + format: 'at-uri', + }, + }, + }, + }, + }, + }, + }, + AppBskyGraphUnmuteActor: { + lexicon: 1, + id: 'app.bsky.graph.unmuteActor', + defs: { + main: { + type: 'procedure', + description: 'Unmute an actor by DID or handle.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['actor'], + properties: { + actor: { + type: 'string', + format: 'at-identifier', + }, + }, + }, + }, + }, + }, + }, + AppBskyGraphUnmuteActorList: { + lexicon: 1, + id: 'app.bsky.graph.unmuteActorList', + defs: { + main: { + type: 'procedure', + description: 'Unmute a list of actors.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['list'], + properties: { + list: { + type: 'string', + format: 'at-uri', + }, + }, + }, + }, + }, + }, + }, + AppBskyNotificationGetUnreadCount: { + lexicon: 1, + id: 'app.bsky.notification.getUnreadCount', + defs: { + main: { + type: 'query', + description: 'Get the count of unread notifications.', + parameters: { + type: 'params', + properties: { + seenAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['count'], + properties: { + count: { + type: 'integer', + }, + }, + }, + }, + }, + }, + }, + AppBskyNotificationListNotifications: { + lexicon: 1, + id: 'app.bsky.notification.listNotifications', + defs: { + main: { + type: 'query', + description: 'Get a list of notifications.', + parameters: { + type: 'params', + properties: { + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + seenAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['notifications'], + properties: { + cursor: { + type: 'string', + }, + notifications: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.notification.listNotifications#notification', + }, + }, + seenAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + }, + }, + notification: { + type: 'object', + required: [ + 'uri', + 'cid', + 'author', + 'reason', + 'record', + 'isRead', + 'indexedAt', + ], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + cid: { + type: 'string', + format: 'cid', + }, + author: { + type: 'ref', + ref: 'lex:app.bsky.actor.defs#profileView', + }, + reason: { + type: 'string', + description: + "Expected values are 'like', 'repost', 'follow', 'mention', 'reply', and 'quote'.", + knownValues: [ + 'like', + 'repost', + 'follow', + 'mention', + 'reply', + 'quote', + ], + }, + reasonSubject: { + type: 'string', + format: 'at-uri', + }, + record: { + type: 'unknown', + }, + isRead: { + type: 'boolean', + }, + indexedAt: { + type: 'string', + format: 'datetime', + }, + labels: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.label.defs#label', + }, + }, + }, + }, + }, + }, + AppBskyNotificationRegisterPush: { + lexicon: 1, + id: 'app.bsky.notification.registerPush', + defs: { + main: { + type: 'procedure', + description: 'Register for push notifications with a service.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['serviceDid', 'token', 'platform', 'appId'], + properties: { + serviceDid: { + type: 'string', + format: 'did', + }, + token: { + type: 'string', + }, + platform: { + type: 'string', + knownValues: ['ios', 'android', 'web'], + }, + appId: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + AppBskyNotificationUpdateSeen: { + lexicon: 1, + id: 'app.bsky.notification.updateSeen', + defs: { + main: { + type: 'procedure', + description: 'Notify server that the user has seen notifications.', + input: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['seenAt'], + properties: { + seenAt: { + type: 'string', + format: 'datetime', + }, + }, + }, + }, + }, + }, + }, + AppBskyRichtextFacet: { + lexicon: 1, + id: 'app.bsky.richtext.facet', + defs: { + main: { + type: 'object', + required: ['index', 'features'], + properties: { + index: { + type: 'ref', + ref: 'lex:app.bsky.richtext.facet#byteSlice', + }, + features: { + type: 'array', + items: { + type: 'union', + refs: [ + 'lex:app.bsky.richtext.facet#mention', + 'lex:app.bsky.richtext.facet#link', + 'lex:app.bsky.richtext.facet#tag', + ], + }, + }, + }, + }, + mention: { + type: 'object', + description: 'A facet feature for actor mentions.', + required: ['did'], + properties: { + did: { + type: 'string', + format: 'did', + }, + }, + }, + link: { + type: 'object', + description: 'A facet feature for links.', + required: ['uri'], + properties: { + uri: { + type: 'string', + format: 'uri', + }, + }, + }, + tag: { + type: 'object', + description: 'A hashtag.', + required: ['tag'], + properties: { + tag: { + type: 'string', + maxLength: 640, + maxGraphemes: 64, + }, + }, + }, + byteSlice: { + type: 'object', + description: + 'A text segment. Start is inclusive, end is exclusive. Indices are for utf8-encoded strings.', + required: ['byteStart', 'byteEnd'], + properties: { + byteStart: { + type: 'integer', + minimum: 0, + }, + byteEnd: { + type: 'integer', + minimum: 0, + }, + }, + }, + }, + }, + AppBskyUnspeccedDefs: { + lexicon: 1, + id: 'app.bsky.unspecced.defs', + defs: { + skeletonSearchPost: { + type: 'object', + required: ['uri'], + properties: { + uri: { + type: 'string', + format: 'at-uri', + }, + }, + }, + skeletonSearchActor: { + type: 'object', + required: ['did'], + properties: { + did: { + type: 'string', + format: 'did', + }, + }, + }, + }, + }, + AppBskyUnspeccedGetPopular: { + lexicon: 1, + id: 'app.bsky.unspecced.getPopular', + defs: { + main: { + type: 'query', + description: + 'DEPRECATED: will be removed soon. Use a feed generator alternative.', + parameters: { + type: 'params', + properties: { + includeNsfw: { + type: 'boolean', + default: false, + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['feed'], + properties: { + cursor: { + type: 'string', + }, + feed: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#feedViewPost', + }, + }, + }, + }, + }, + }, + }, + }, + AppBskyUnspeccedGetPopularFeedGenerators: { + lexicon: 1, + id: 'app.bsky.unspecced.getPopularFeedGenerators', + defs: { + main: { + type: 'query', + description: 'An unspecced view of globally popular feed generators.', + parameters: { + type: 'params', + properties: { + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + query: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['feeds'], + properties: { + cursor: { + type: 'string', + }, + feeds: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#generatorView', + }, + }, + }, + }, + }, + }, + }, + }, + AppBskyUnspeccedGetTimelineSkeleton: { + lexicon: 1, + id: 'app.bsky.unspecced.getTimelineSkeleton', + defs: { + main: { + type: 'query', + description: + 'DEPRECATED: a skeleton of a timeline. Unspecced and will be unavailable soon.', + parameters: { + type: 'params', + properties: { + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 50, + }, + cursor: { + type: 'string', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['feed'], + properties: { + cursor: { + type: 'string', + }, + feed: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.feed.defs#skeletonFeedPost', + }, + }, + }, + }, + }, + errors: [ + { + name: 'UnknownFeed', + }, + ], + }, + }, + }, + AppBskyUnspeccedSearchActorsSkeleton: { + lexicon: 1, + id: 'app.bsky.unspecced.searchActorsSkeleton', + defs: { + main: { + type: 'query', + description: 'Backend Actors (profile) search, returns only skeleton.', + parameters: { + type: 'params', + required: ['q'], + properties: { + q: { + type: 'string', + description: + 'Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. For typeahead search, only simple term match is supported, not full syntax.', + }, + typeahead: { + type: 'boolean', + description: "If true, acts as fast/simple 'typeahead' query.", + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 25, + }, + cursor: { + type: 'string', + description: + 'Optional pagination mechanism; may not necessarily allow scrolling through entire result set.', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['actors'], + properties: { + cursor: { + type: 'string', + }, + hitsTotal: { + type: 'integer', + description: + 'Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits.', + }, + actors: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.unspecced.defs#skeletonSearchActor', + }, + }, + }, + }, + }, + errors: [ + { + name: 'BadQueryString', + }, + ], + }, + }, + }, + AppBskyUnspeccedSearchPostsSkeleton: { + lexicon: 1, + id: 'app.bsky.unspecced.searchPostsSkeleton', + defs: { + main: { + type: 'query', + description: 'Backend Posts search, returns only skeleton', + parameters: { + type: 'params', + required: ['q'], + properties: { + q: { + type: 'string', + description: + 'Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended.', + }, + limit: { + type: 'integer', + minimum: 1, + maximum: 100, + default: 25, + }, + cursor: { + type: 'string', + description: + 'Optional pagination mechanism; may not necessarily allow scrolling through entire result set.', + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['posts'], + properties: { + cursor: { + type: 'string', + }, + hitsTotal: { + type: 'integer', + description: + 'Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits.', + }, + posts: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:app.bsky.unspecced.defs#skeletonSearchPost', + }, + }, + }, + }, + }, + errors: [ + { + name: 'BadQueryString', + }, + ], + }, + }, + }, +} +export const schemas: LexiconDoc[] = Object.values(schemaDict) as LexiconDoc[] +export const lexicons: Lexicons = new Lexicons(schemas) +export const ids = { + ComAtprotoAdminDefs: 'com.atproto.admin.defs', + ComAtprotoAdminDeleteAccount: 'com.atproto.admin.deleteAccount', + ComAtprotoAdminDisableAccountInvites: + 'com.atproto.admin.disableAccountInvites', + ComAtprotoAdminDisableInviteCodes: 'com.atproto.admin.disableInviteCodes', + ComAtprotoAdminEmitModerationEvent: 'com.atproto.admin.emitModerationEvent', + ComAtprotoAdminEnableAccountInvites: 'com.atproto.admin.enableAccountInvites', + ComAtprotoAdminGetAccountInfo: 'com.atproto.admin.getAccountInfo', + ComAtprotoAdminGetAccountInfos: 'com.atproto.admin.getAccountInfos', + ComAtprotoAdminGetInviteCodes: 'com.atproto.admin.getInviteCodes', + ComAtprotoAdminGetModerationEvent: 'com.atproto.admin.getModerationEvent', + ComAtprotoAdminGetRecord: 'com.atproto.admin.getRecord', + ComAtprotoAdminGetRepo: 'com.atproto.admin.getRepo', + ComAtprotoAdminGetSubjectStatus: 'com.atproto.admin.getSubjectStatus', + ComAtprotoAdminQueryModerationEvents: + 'com.atproto.admin.queryModerationEvents', + ComAtprotoAdminQueryModerationStatuses: + 'com.atproto.admin.queryModerationStatuses', + ComAtprotoAdminSearchRepos: 'com.atproto.admin.searchRepos', + ComAtprotoAdminSendEmail: 'com.atproto.admin.sendEmail', + ComAtprotoAdminUpdateAccountEmail: 'com.atproto.admin.updateAccountEmail', + ComAtprotoAdminUpdateAccountHandle: 'com.atproto.admin.updateAccountHandle', + ComAtprotoAdminUpdateSubjectStatus: 'com.atproto.admin.updateSubjectStatus', + ComAtprotoIdentityResolveHandle: 'com.atproto.identity.resolveHandle', + ComAtprotoIdentityUpdateHandle: 'com.atproto.identity.updateHandle', + ComAtprotoLabelDefs: 'com.atproto.label.defs', + ComAtprotoLabelQueryLabels: 'com.atproto.label.queryLabels', + ComAtprotoLabelSubscribeLabels: 'com.atproto.label.subscribeLabels', + ComAtprotoModerationCreateReport: 'com.atproto.moderation.createReport', + ComAtprotoModerationDefs: 'com.atproto.moderation.defs', + ComAtprotoRepoApplyWrites: 'com.atproto.repo.applyWrites', + ComAtprotoRepoCreateRecord: 'com.atproto.repo.createRecord', + ComAtprotoRepoDeleteRecord: 'com.atproto.repo.deleteRecord', + ComAtprotoRepoDescribeRepo: 'com.atproto.repo.describeRepo', + ComAtprotoRepoGetRecord: 'com.atproto.repo.getRecord', + ComAtprotoRepoListRecords: 'com.atproto.repo.listRecords', + ComAtprotoRepoPutRecord: 'com.atproto.repo.putRecord', + ComAtprotoRepoStrongRef: 'com.atproto.repo.strongRef', + ComAtprotoRepoUploadBlob: 'com.atproto.repo.uploadBlob', + ComAtprotoServerConfirmEmail: 'com.atproto.server.confirmEmail', + ComAtprotoServerCreateAccount: 'com.atproto.server.createAccount', + ComAtprotoServerCreateAppPassword: 'com.atproto.server.createAppPassword', + ComAtprotoServerCreateInviteCode: 'com.atproto.server.createInviteCode', + ComAtprotoServerCreateInviteCodes: 'com.atproto.server.createInviteCodes', + ComAtprotoServerCreateSession: 'com.atproto.server.createSession', + ComAtprotoServerDefs: 'com.atproto.server.defs', + ComAtprotoServerDeleteAccount: 'com.atproto.server.deleteAccount', + ComAtprotoServerDeleteSession: 'com.atproto.server.deleteSession', + ComAtprotoServerDescribeServer: 'com.atproto.server.describeServer', + ComAtprotoServerGetAccountInviteCodes: + 'com.atproto.server.getAccountInviteCodes', + ComAtprotoServerGetSession: 'com.atproto.server.getSession', + ComAtprotoServerListAppPasswords: 'com.atproto.server.listAppPasswords', + ComAtprotoServerRefreshSession: 'com.atproto.server.refreshSession', + ComAtprotoServerRequestAccountDelete: + 'com.atproto.server.requestAccountDelete', + ComAtprotoServerRequestEmailConfirmation: + 'com.atproto.server.requestEmailConfirmation', + ComAtprotoServerRequestEmailUpdate: 'com.atproto.server.requestEmailUpdate', + ComAtprotoServerRequestPasswordReset: + 'com.atproto.server.requestPasswordReset', + ComAtprotoServerReserveSigningKey: 'com.atproto.server.reserveSigningKey', + ComAtprotoServerResetPassword: 'com.atproto.server.resetPassword', + ComAtprotoServerRevokeAppPassword: 'com.atproto.server.revokeAppPassword', + ComAtprotoServerUpdateEmail: 'com.atproto.server.updateEmail', + ComAtprotoSyncGetBlob: 'com.atproto.sync.getBlob', + ComAtprotoSyncGetBlocks: 'com.atproto.sync.getBlocks', + ComAtprotoSyncGetCheckout: 'com.atproto.sync.getCheckout', + ComAtprotoSyncGetHead: 'com.atproto.sync.getHead', + ComAtprotoSyncGetLatestCommit: 'com.atproto.sync.getLatestCommit', + ComAtprotoSyncGetRecord: 'com.atproto.sync.getRecord', + ComAtprotoSyncGetRepo: 'com.atproto.sync.getRepo', + ComAtprotoSyncListBlobs: 'com.atproto.sync.listBlobs', + ComAtprotoSyncListRepos: 'com.atproto.sync.listRepos', + ComAtprotoSyncNotifyOfUpdate: 'com.atproto.sync.notifyOfUpdate', + ComAtprotoSyncRequestCrawl: 'com.atproto.sync.requestCrawl', + ComAtprotoSyncSubscribeRepos: 'com.atproto.sync.subscribeRepos', + ComAtprotoTempFetchLabels: 'com.atproto.temp.fetchLabels', + ComAtprotoTempImportRepo: 'com.atproto.temp.importRepo', + ComAtprotoTempPushBlob: 'com.atproto.temp.pushBlob', + ComAtprotoTempTransferAccount: 'com.atproto.temp.transferAccount', + AppBskyActorDefs: 'app.bsky.actor.defs', + AppBskyActorGetPreferences: 'app.bsky.actor.getPreferences', + AppBskyActorGetProfile: 'app.bsky.actor.getProfile', + AppBskyActorGetProfiles: 'app.bsky.actor.getProfiles', + AppBskyActorGetSuggestions: 'app.bsky.actor.getSuggestions', + AppBskyActorProfile: 'app.bsky.actor.profile', + AppBskyActorPutPreferences: 'app.bsky.actor.putPreferences', + AppBskyActorSearchActors: 'app.bsky.actor.searchActors', + AppBskyActorSearchActorsTypeahead: 'app.bsky.actor.searchActorsTypeahead', + AppBskyEmbedExternal: 'app.bsky.embed.external', + AppBskyEmbedImages: 'app.bsky.embed.images', + AppBskyEmbedRecord: 'app.bsky.embed.record', + AppBskyEmbedRecordWithMedia: 'app.bsky.embed.recordWithMedia', + AppBskyFeedDefs: 'app.bsky.feed.defs', + AppBskyFeedDescribeFeedGenerator: 'app.bsky.feed.describeFeedGenerator', + AppBskyFeedGenerator: 'app.bsky.feed.generator', + AppBskyFeedGetActorFeeds: 'app.bsky.feed.getActorFeeds', + AppBskyFeedGetActorLikes: 'app.bsky.feed.getActorLikes', + AppBskyFeedGetAuthorFeed: 'app.bsky.feed.getAuthorFeed', + AppBskyFeedGetFeed: 'app.bsky.feed.getFeed', + AppBskyFeedGetFeedGenerator: 'app.bsky.feed.getFeedGenerator', + AppBskyFeedGetFeedGenerators: 'app.bsky.feed.getFeedGenerators', + AppBskyFeedGetFeedSkeleton: 'app.bsky.feed.getFeedSkeleton', + AppBskyFeedGetLikes: 'app.bsky.feed.getLikes', + AppBskyFeedGetListFeed: 'app.bsky.feed.getListFeed', + AppBskyFeedGetPostThread: 'app.bsky.feed.getPostThread', + AppBskyFeedGetPosts: 'app.bsky.feed.getPosts', + AppBskyFeedGetRepostedBy: 'app.bsky.feed.getRepostedBy', + AppBskyFeedGetSuggestedFeeds: 'app.bsky.feed.getSuggestedFeeds', + AppBskyFeedGetTimeline: 'app.bsky.feed.getTimeline', + AppBskyFeedLike: 'app.bsky.feed.like', + AppBskyFeedPost: 'app.bsky.feed.post', + AppBskyFeedRepost: 'app.bsky.feed.repost', + AppBskyFeedSearchPosts: 'app.bsky.feed.searchPosts', + AppBskyFeedThreadgate: 'app.bsky.feed.threadgate', + AppBskyGraphBlock: 'app.bsky.graph.block', + AppBskyGraphDefs: 'app.bsky.graph.defs', + AppBskyGraphFollow: 'app.bsky.graph.follow', + AppBskyGraphGetBlocks: 'app.bsky.graph.getBlocks', + AppBskyGraphGetFollowers: 'app.bsky.graph.getFollowers', + AppBskyGraphGetFollows: 'app.bsky.graph.getFollows', + AppBskyGraphGetList: 'app.bsky.graph.getList', + AppBskyGraphGetListBlocks: 'app.bsky.graph.getListBlocks', + AppBskyGraphGetListMutes: 'app.bsky.graph.getListMutes', + AppBskyGraphGetLists: 'app.bsky.graph.getLists', + AppBskyGraphGetMutes: 'app.bsky.graph.getMutes', + AppBskyGraphGetSuggestedFollowsByActor: + 'app.bsky.graph.getSuggestedFollowsByActor', + AppBskyGraphList: 'app.bsky.graph.list', + AppBskyGraphListblock: 'app.bsky.graph.listblock', + AppBskyGraphListitem: 'app.bsky.graph.listitem', + AppBskyGraphMuteActor: 'app.bsky.graph.muteActor', + AppBskyGraphMuteActorList: 'app.bsky.graph.muteActorList', + AppBskyGraphUnmuteActor: 'app.bsky.graph.unmuteActor', + AppBskyGraphUnmuteActorList: 'app.bsky.graph.unmuteActorList', + AppBskyNotificationGetUnreadCount: 'app.bsky.notification.getUnreadCount', + AppBskyNotificationListNotifications: + 'app.bsky.notification.listNotifications', + AppBskyNotificationRegisterPush: 'app.bsky.notification.registerPush', + AppBskyNotificationUpdateSeen: 'app.bsky.notification.updateSeen', + AppBskyRichtextFacet: 'app.bsky.richtext.facet', + AppBskyUnspeccedDefs: 'app.bsky.unspecced.defs', + AppBskyUnspeccedGetPopular: 'app.bsky.unspecced.getPopular', + AppBskyUnspeccedGetPopularFeedGenerators: + 'app.bsky.unspecced.getPopularFeedGenerators', + AppBskyUnspeccedGetTimelineSkeleton: 'app.bsky.unspecced.getTimelineSkeleton', + AppBskyUnspeccedSearchActorsSkeleton: + 'app.bsky.unspecced.searchActorsSkeleton', + AppBskyUnspeccedSearchPostsSkeleton: 'app.bsky.unspecced.searchPostsSkeleton', +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/actor/defs.ts b/packages/ozone/src/lexicon/types/app/bsky/actor/defs.ts new file mode 100644 index 00000000000..c20177ca50e --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/actor/defs.ts @@ -0,0 +1,235 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs' +import * as AppBskyGraphDefs from '../graph/defs' + +export interface ProfileViewBasic { + did: string + handle: string + displayName?: string + avatar?: string + viewer?: ViewerState + labels?: ComAtprotoLabelDefs.Label[] + [k: string]: unknown +} + +export function isProfileViewBasic(v: unknown): v is ProfileViewBasic { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.actor.defs#profileViewBasic' + ) +} + +export function validateProfileViewBasic(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.actor.defs#profileViewBasic', v) +} + +export interface ProfileView { + did: string + handle: string + displayName?: string + description?: string + avatar?: string + indexedAt?: string + viewer?: ViewerState + labels?: ComAtprotoLabelDefs.Label[] + [k: string]: unknown +} + +export function isProfileView(v: unknown): v is ProfileView { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.actor.defs#profileView' + ) +} + +export function validateProfileView(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.actor.defs#profileView', v) +} + +export interface ProfileViewDetailed { + did: string + handle: string + displayName?: string + description?: string + avatar?: string + banner?: string + followersCount?: number + followsCount?: number + postsCount?: number + indexedAt?: string + viewer?: ViewerState + labels?: ComAtprotoLabelDefs.Label[] + [k: string]: unknown +} + +export function isProfileViewDetailed(v: unknown): v is ProfileViewDetailed { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.actor.defs#profileViewDetailed' + ) +} + +export function validateProfileViewDetailed(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.actor.defs#profileViewDetailed', v) +} + +export interface ViewerState { + muted?: boolean + mutedByList?: AppBskyGraphDefs.ListViewBasic + blockedBy?: boolean + blocking?: string + blockingByList?: AppBskyGraphDefs.ListViewBasic + following?: string + followedBy?: string + [k: string]: unknown +} + +export function isViewerState(v: unknown): v is ViewerState { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.actor.defs#viewerState' + ) +} + +export function validateViewerState(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.actor.defs#viewerState', v) +} + +export type Preferences = ( + | AdultContentPref + | ContentLabelPref + | SavedFeedsPref + | PersonalDetailsPref + | FeedViewPref + | ThreadViewPref + | { $type: string; [k: string]: unknown } +)[] + +export interface AdultContentPref { + enabled: boolean + [k: string]: unknown +} + +export function isAdultContentPref(v: unknown): v is AdultContentPref { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.actor.defs#adultContentPref' + ) +} + +export function validateAdultContentPref(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.actor.defs#adultContentPref', v) +} + +export interface ContentLabelPref { + label: string + visibility: 'show' | 'warn' | 'hide' | (string & {}) + [k: string]: unknown +} + +export function isContentLabelPref(v: unknown): v is ContentLabelPref { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.actor.defs#contentLabelPref' + ) +} + +export function validateContentLabelPref(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.actor.defs#contentLabelPref', v) +} + +export interface SavedFeedsPref { + pinned: string[] + saved: string[] + [k: string]: unknown +} + +export function isSavedFeedsPref(v: unknown): v is SavedFeedsPref { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.actor.defs#savedFeedsPref' + ) +} + +export function validateSavedFeedsPref(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.actor.defs#savedFeedsPref', v) +} + +export interface PersonalDetailsPref { + /** The birth date of account owner. */ + birthDate?: string + [k: string]: unknown +} + +export function isPersonalDetailsPref(v: unknown): v is PersonalDetailsPref { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.actor.defs#personalDetailsPref' + ) +} + +export function validatePersonalDetailsPref(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.actor.defs#personalDetailsPref', v) +} + +export interface FeedViewPref { + /** The URI of the feed, or an identifier which describes the feed. */ + feed: string + /** Hide replies in the feed. */ + hideReplies?: boolean + /** Hide replies in the feed if they are not by followed users. */ + hideRepliesByUnfollowed?: boolean + /** Hide replies in the feed if they do not have this number of likes. */ + hideRepliesByLikeCount?: number + /** Hide reposts in the feed. */ + hideReposts?: boolean + /** Hide quote posts in the feed. */ + hideQuotePosts?: boolean + [k: string]: unknown +} + +export function isFeedViewPref(v: unknown): v is FeedViewPref { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.actor.defs#feedViewPref' + ) +} + +export function validateFeedViewPref(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.actor.defs#feedViewPref', v) +} + +export interface ThreadViewPref { + /** Sorting mode for threads. */ + sort?: 'oldest' | 'newest' | 'most-likes' | 'random' | (string & {}) + /** Show followed users at the top of all replies. */ + prioritizeFollowedUsers?: boolean + [k: string]: unknown +} + +export function isThreadViewPref(v: unknown): v is ThreadViewPref { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.actor.defs#threadViewPref' + ) +} + +export function validateThreadViewPref(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.actor.defs#threadViewPref', v) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/actor/getPreferences.ts b/packages/ozone/src/lexicon/types/app/bsky/actor/getPreferences.ts new file mode 100644 index 00000000000..88d78a57cba --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/actor/getPreferences.ts @@ -0,0 +1,44 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyActorDefs from './defs' + +export interface QueryParams {} + +export type InputSchema = undefined + +export interface OutputSchema { + preferences: AppBskyActorDefs.Preferences + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/actor/getProfile.ts b/packages/ozone/src/lexicon/types/app/bsky/actor/getProfile.ts new file mode 100644 index 00000000000..802afda5361 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/actor/getProfile.ts @@ -0,0 +1,41 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyActorDefs from './defs' + +export interface QueryParams { + actor: string +} + +export type InputSchema = undefined +export type OutputSchema = AppBskyActorDefs.ProfileViewDetailed +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/actor/getProfiles.ts b/packages/ozone/src/lexicon/types/app/bsky/actor/getProfiles.ts new file mode 100644 index 00000000000..2549b264e33 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/actor/getProfiles.ts @@ -0,0 +1,46 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyActorDefs from './defs' + +export interface QueryParams { + actors: string[] +} + +export type InputSchema = undefined + +export interface OutputSchema { + profiles: AppBskyActorDefs.ProfileViewDetailed[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/actor/getSuggestions.ts b/packages/ozone/src/lexicon/types/app/bsky/actor/getSuggestions.ts new file mode 100644 index 00000000000..a6d4d6102af --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/actor/getSuggestions.ts @@ -0,0 +1,48 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyActorDefs from './defs' + +export interface QueryParams { + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + actors: AppBskyActorDefs.ProfileView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/actor/profile.ts b/packages/ozone/src/lexicon/types/app/bsky/actor/profile.ts new file mode 100644 index 00000000000..7dbc4c1ccec --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/actor/profile.ts @@ -0,0 +1,32 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs' + +export interface Record { + displayName?: string + description?: string + avatar?: BlobRef + banner?: BlobRef + labels?: + | ComAtprotoLabelDefs.SelfLabels + | { $type: string; [k: string]: unknown } + [k: string]: unknown +} + +export function isRecord(v: unknown): v is Record { + return ( + isObj(v) && + hasProp(v, '$type') && + (v.$type === 'app.bsky.actor.profile#main' || + v.$type === 'app.bsky.actor.profile') + ) +} + +export function validateRecord(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.actor.profile#main', v) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/actor/putPreferences.ts b/packages/ozone/src/lexicon/types/app/bsky/actor/putPreferences.ts new file mode 100644 index 00000000000..1e5ee2d834e --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/actor/putPreferences.ts @@ -0,0 +1,39 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyActorDefs from './defs' + +export interface QueryParams {} + +export interface InputSchema { + preferences: AppBskyActorDefs.Preferences + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/actor/searchActors.ts b/packages/ozone/src/lexicon/types/app/bsky/actor/searchActors.ts new file mode 100644 index 00000000000..f072b8a4d04 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/actor/searchActors.ts @@ -0,0 +1,52 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyActorDefs from './defs' + +export interface QueryParams { + /** DEPRECATED: use 'q' instead. */ + term?: string + /** Search query string. Syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. */ + q?: string + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + actors: AppBskyActorDefs.ProfileView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/actor/searchActorsTypeahead.ts b/packages/ozone/src/lexicon/types/app/bsky/actor/searchActorsTypeahead.ts new file mode 100644 index 00000000000..0cf56753db2 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/actor/searchActorsTypeahead.ts @@ -0,0 +1,50 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyActorDefs from './defs' + +export interface QueryParams { + /** DEPRECATED: use 'q' instead. */ + term?: string + /** Search query prefix; not a full query string. */ + q?: string + limit: number +} + +export type InputSchema = undefined + +export interface OutputSchema { + actors: AppBskyActorDefs.ProfileViewBasic[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/embed/external.ts b/packages/ozone/src/lexicon/types/app/bsky/embed/external.ts new file mode 100644 index 00000000000..f42a6cfd95c --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/embed/external.ts @@ -0,0 +1,82 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' + +export interface Main { + external: External + [k: string]: unknown +} + +export function isMain(v: unknown): v is Main { + return ( + isObj(v) && + hasProp(v, '$type') && + (v.$type === 'app.bsky.embed.external#main' || + v.$type === 'app.bsky.embed.external') + ) +} + +export function validateMain(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.embed.external#main', v) +} + +export interface External { + uri: string + title: string + description: string + thumb?: BlobRef + [k: string]: unknown +} + +export function isExternal(v: unknown): v is External { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.embed.external#external' + ) +} + +export function validateExternal(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.embed.external#external', v) +} + +export interface View { + external: ViewExternal + [k: string]: unknown +} + +export function isView(v: unknown): v is View { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.embed.external#view' + ) +} + +export function validateView(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.embed.external#view', v) +} + +export interface ViewExternal { + uri: string + title: string + description: string + thumb?: string + [k: string]: unknown +} + +export function isViewExternal(v: unknown): v is ViewExternal { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.embed.external#viewExternal' + ) +} + +export function validateViewExternal(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.embed.external#viewExternal', v) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/embed/images.ts b/packages/ozone/src/lexicon/types/app/bsky/embed/images.ts new file mode 100644 index 00000000000..4864fad3dea --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/embed/images.ts @@ -0,0 +1,96 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' + +export interface Main { + images: Image[] + [k: string]: unknown +} + +export function isMain(v: unknown): v is Main { + return ( + isObj(v) && + hasProp(v, '$type') && + (v.$type === 'app.bsky.embed.images#main' || + v.$type === 'app.bsky.embed.images') + ) +} + +export function validateMain(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.embed.images#main', v) +} + +export interface Image { + image: BlobRef + alt: string + aspectRatio?: AspectRatio + [k: string]: unknown +} + +export function isImage(v: unknown): v is Image { + return ( + isObj(v) && hasProp(v, '$type') && v.$type === 'app.bsky.embed.images#image' + ) +} + +export function validateImage(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.embed.images#image', v) +} + +/** width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit. */ +export interface AspectRatio { + width: number + height: number + [k: string]: unknown +} + +export function isAspectRatio(v: unknown): v is AspectRatio { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.embed.images#aspectRatio' + ) +} + +export function validateAspectRatio(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.embed.images#aspectRatio', v) +} + +export interface View { + images: ViewImage[] + [k: string]: unknown +} + +export function isView(v: unknown): v is View { + return ( + isObj(v) && hasProp(v, '$type') && v.$type === 'app.bsky.embed.images#view' + ) +} + +export function validateView(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.embed.images#view', v) +} + +export interface ViewImage { + thumb: string + fullsize: string + alt: string + aspectRatio?: AspectRatio + [k: string]: unknown +} + +export function isViewImage(v: unknown): v is ViewImage { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.embed.images#viewImage' + ) +} + +export function validateViewImage(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.embed.images#viewImage', v) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/embed/record.ts b/packages/ozone/src/lexicon/types/app/bsky/embed/record.ts new file mode 100644 index 00000000000..cea5742a45e --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/embed/record.ts @@ -0,0 +1,120 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import * as ComAtprotoRepoStrongRef from '../../../com/atproto/repo/strongRef' +import * as AppBskyFeedDefs from '../feed/defs' +import * as AppBskyGraphDefs from '../graph/defs' +import * as AppBskyActorDefs from '../actor/defs' +import * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs' +import * as AppBskyEmbedImages from './images' +import * as AppBskyEmbedExternal from './external' +import * as AppBskyEmbedRecordWithMedia from './recordWithMedia' + +export interface Main { + record: ComAtprotoRepoStrongRef.Main + [k: string]: unknown +} + +export function isMain(v: unknown): v is Main { + return ( + isObj(v) && + hasProp(v, '$type') && + (v.$type === 'app.bsky.embed.record#main' || + v.$type === 'app.bsky.embed.record') + ) +} + +export function validateMain(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.embed.record#main', v) +} + +export interface View { + record: + | ViewRecord + | ViewNotFound + | ViewBlocked + | AppBskyFeedDefs.GeneratorView + | AppBskyGraphDefs.ListView + | { $type: string; [k: string]: unknown } + [k: string]: unknown +} + +export function isView(v: unknown): v is View { + return ( + isObj(v) && hasProp(v, '$type') && v.$type === 'app.bsky.embed.record#view' + ) +} + +export function validateView(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.embed.record#view', v) +} + +export interface ViewRecord { + uri: string + cid: string + author: AppBskyActorDefs.ProfileViewBasic + value: {} + labels?: ComAtprotoLabelDefs.Label[] + embeds?: ( + | AppBskyEmbedImages.View + | AppBskyEmbedExternal.View + | View + | AppBskyEmbedRecordWithMedia.View + | { $type: string; [k: string]: unknown } + )[] + indexedAt: string + [k: string]: unknown +} + +export function isViewRecord(v: unknown): v is ViewRecord { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.embed.record#viewRecord' + ) +} + +export function validateViewRecord(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.embed.record#viewRecord', v) +} + +export interface ViewNotFound { + uri: string + notFound: true + [k: string]: unknown +} + +export function isViewNotFound(v: unknown): v is ViewNotFound { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.embed.record#viewNotFound' + ) +} + +export function validateViewNotFound(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.embed.record#viewNotFound', v) +} + +export interface ViewBlocked { + uri: string + blocked: true + author: AppBskyFeedDefs.BlockedAuthor + [k: string]: unknown +} + +export function isViewBlocked(v: unknown): v is ViewBlocked { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.embed.record#viewBlocked' + ) +} + +export function validateViewBlocked(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.embed.record#viewBlocked', v) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/embed/recordWithMedia.ts b/packages/ozone/src/lexicon/types/app/bsky/embed/recordWithMedia.ts new file mode 100644 index 00000000000..f8f1ae50b9e --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/embed/recordWithMedia.ts @@ -0,0 +1,53 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import * as AppBskyEmbedRecord from './record' +import * as AppBskyEmbedImages from './images' +import * as AppBskyEmbedExternal from './external' + +export interface Main { + record: AppBskyEmbedRecord.Main + media: + | AppBskyEmbedImages.Main + | AppBskyEmbedExternal.Main + | { $type: string; [k: string]: unknown } + [k: string]: unknown +} + +export function isMain(v: unknown): v is Main { + return ( + isObj(v) && + hasProp(v, '$type') && + (v.$type === 'app.bsky.embed.recordWithMedia#main' || + v.$type === 'app.bsky.embed.recordWithMedia') + ) +} + +export function validateMain(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.embed.recordWithMedia#main', v) +} + +export interface View { + record: AppBskyEmbedRecord.View + media: + | AppBskyEmbedImages.View + | AppBskyEmbedExternal.View + | { $type: string; [k: string]: unknown } + [k: string]: unknown +} + +export function isView(v: unknown): v is View { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.embed.recordWithMedia#view' + ) +} + +export function validateView(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.embed.recordWithMedia#view', v) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/defs.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/defs.ts new file mode 100644 index 00000000000..382d3f58ecf --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/defs.ts @@ -0,0 +1,308 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import * as AppBskyActorDefs from '../actor/defs' +import * as AppBskyEmbedImages from '../embed/images' +import * as AppBskyEmbedExternal from '../embed/external' +import * as AppBskyEmbedRecord from '../embed/record' +import * as AppBskyEmbedRecordWithMedia from '../embed/recordWithMedia' +import * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs' +import * as AppBskyRichtextFacet from '../richtext/facet' +import * as AppBskyGraphDefs from '../graph/defs' + +export interface PostView { + uri: string + cid: string + author: AppBskyActorDefs.ProfileViewBasic + record: {} + embed?: + | AppBskyEmbedImages.View + | AppBskyEmbedExternal.View + | AppBskyEmbedRecord.View + | AppBskyEmbedRecordWithMedia.View + | { $type: string; [k: string]: unknown } + replyCount?: number + repostCount?: number + likeCount?: number + indexedAt: string + viewer?: ViewerState + labels?: ComAtprotoLabelDefs.Label[] + threadgate?: ThreadgateView + [k: string]: unknown +} + +export function isPostView(v: unknown): v is PostView { + return ( + isObj(v) && hasProp(v, '$type') && v.$type === 'app.bsky.feed.defs#postView' + ) +} + +export function validatePostView(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.defs#postView', v) +} + +export interface ViewerState { + repost?: string + like?: string + replyDisabled?: boolean + [k: string]: unknown +} + +export function isViewerState(v: unknown): v is ViewerState { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.feed.defs#viewerState' + ) +} + +export function validateViewerState(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.defs#viewerState', v) +} + +export interface FeedViewPost { + post: PostView + reply?: ReplyRef + reason?: ReasonRepost | { $type: string; [k: string]: unknown } + [k: string]: unknown +} + +export function isFeedViewPost(v: unknown): v is FeedViewPost { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.feed.defs#feedViewPost' + ) +} + +export function validateFeedViewPost(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.defs#feedViewPost', v) +} + +export interface ReplyRef { + root: + | PostView + | NotFoundPost + | BlockedPost + | { $type: string; [k: string]: unknown } + parent: + | PostView + | NotFoundPost + | BlockedPost + | { $type: string; [k: string]: unknown } + [k: string]: unknown +} + +export function isReplyRef(v: unknown): v is ReplyRef { + return ( + isObj(v) && hasProp(v, '$type') && v.$type === 'app.bsky.feed.defs#replyRef' + ) +} + +export function validateReplyRef(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.defs#replyRef', v) +} + +export interface ReasonRepost { + by: AppBskyActorDefs.ProfileViewBasic + indexedAt: string + [k: string]: unknown +} + +export function isReasonRepost(v: unknown): v is ReasonRepost { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.feed.defs#reasonRepost' + ) +} + +export function validateReasonRepost(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.defs#reasonRepost', v) +} + +export interface ThreadViewPost { + post: PostView + parent?: + | ThreadViewPost + | NotFoundPost + | BlockedPost + | { $type: string; [k: string]: unknown } + replies?: ( + | ThreadViewPost + | NotFoundPost + | BlockedPost + | { $type: string; [k: string]: unknown } + )[] + [k: string]: unknown +} + +export function isThreadViewPost(v: unknown): v is ThreadViewPost { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.feed.defs#threadViewPost' + ) +} + +export function validateThreadViewPost(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.defs#threadViewPost', v) +} + +export interface NotFoundPost { + uri: string + notFound: true + [k: string]: unknown +} + +export function isNotFoundPost(v: unknown): v is NotFoundPost { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.feed.defs#notFoundPost' + ) +} + +export function validateNotFoundPost(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.defs#notFoundPost', v) +} + +export interface BlockedPost { + uri: string + blocked: true + author: BlockedAuthor + [k: string]: unknown +} + +export function isBlockedPost(v: unknown): v is BlockedPost { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.feed.defs#blockedPost' + ) +} + +export function validateBlockedPost(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.defs#blockedPost', v) +} + +export interface BlockedAuthor { + did: string + viewer?: AppBskyActorDefs.ViewerState + [k: string]: unknown +} + +export function isBlockedAuthor(v: unknown): v is BlockedAuthor { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.feed.defs#blockedAuthor' + ) +} + +export function validateBlockedAuthor(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.defs#blockedAuthor', v) +} + +export interface GeneratorView { + uri: string + cid: string + did: string + creator: AppBskyActorDefs.ProfileView + displayName: string + description?: string + descriptionFacets?: AppBskyRichtextFacet.Main[] + avatar?: string + likeCount?: number + viewer?: GeneratorViewerState + indexedAt: string + [k: string]: unknown +} + +export function isGeneratorView(v: unknown): v is GeneratorView { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.feed.defs#generatorView' + ) +} + +export function validateGeneratorView(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.defs#generatorView', v) +} + +export interface GeneratorViewerState { + like?: string + [k: string]: unknown +} + +export function isGeneratorViewerState(v: unknown): v is GeneratorViewerState { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.feed.defs#generatorViewerState' + ) +} + +export function validateGeneratorViewerState(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.defs#generatorViewerState', v) +} + +export interface SkeletonFeedPost { + post: string + reason?: SkeletonReasonRepost | { $type: string; [k: string]: unknown } + [k: string]: unknown +} + +export function isSkeletonFeedPost(v: unknown): v is SkeletonFeedPost { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.feed.defs#skeletonFeedPost' + ) +} + +export function validateSkeletonFeedPost(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.defs#skeletonFeedPost', v) +} + +export interface SkeletonReasonRepost { + repost: string + [k: string]: unknown +} + +export function isSkeletonReasonRepost(v: unknown): v is SkeletonReasonRepost { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.feed.defs#skeletonReasonRepost' + ) +} + +export function validateSkeletonReasonRepost(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.defs#skeletonReasonRepost', v) +} + +export interface ThreadgateView { + uri?: string + cid?: string + record?: {} + lists?: AppBskyGraphDefs.ListViewBasic[] + [k: string]: unknown +} + +export function isThreadgateView(v: unknown): v is ThreadgateView { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.feed.defs#threadgateView' + ) +} + +export function validateThreadgateView(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.defs#threadgateView', v) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/describeFeedGenerator.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/describeFeedGenerator.ts new file mode 100644 index 00000000000..d329bf20a5a --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/describeFeedGenerator.ts @@ -0,0 +1,80 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export type InputSchema = undefined + +export interface OutputSchema { + did: string + feeds: Feed[] + links?: Links + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput + +export interface Feed { + uri: string + [k: string]: unknown +} + +export function isFeed(v: unknown): v is Feed { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.feed.describeFeedGenerator#feed' + ) +} + +export function validateFeed(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.describeFeedGenerator#feed', v) +} + +export interface Links { + privacyPolicy?: string + termsOfService?: string + [k: string]: unknown +} + +export function isLinks(v: unknown): v is Links { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.feed.describeFeedGenerator#links' + ) +} + +export function validateLinks(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.describeFeedGenerator#links', v) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/generator.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/generator.ts new file mode 100644 index 00000000000..757e74db845 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/generator.ts @@ -0,0 +1,35 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import * as AppBskyRichtextFacet from '../richtext/facet' +import * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs' + +export interface Record { + did: string + displayName: string + description?: string + descriptionFacets?: AppBskyRichtextFacet.Main[] + avatar?: BlobRef + labels?: + | ComAtprotoLabelDefs.SelfLabels + | { $type: string; [k: string]: unknown } + createdAt: string + [k: string]: unknown +} + +export function isRecord(v: unknown): v is Record { + return ( + isObj(v) && + hasProp(v, '$type') && + (v.$type === 'app.bsky.feed.generator#main' || + v.$type === 'app.bsky.feed.generator') + ) +} + +export function validateRecord(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.generator#main', v) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/getActorFeeds.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/getActorFeeds.ts new file mode 100644 index 00000000000..3e930cbe201 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/getActorFeeds.ts @@ -0,0 +1,49 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyFeedDefs from './defs' + +export interface QueryParams { + actor: string + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + feeds: AppBskyFeedDefs.GeneratorView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/getActorLikes.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/getActorLikes.ts new file mode 100644 index 00000000000..df2f291e1a7 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/getActorLikes.ts @@ -0,0 +1,50 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyFeedDefs from './defs' + +export interface QueryParams { + actor: string + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + feed: AppBskyFeedDefs.FeedViewPost[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: 'BlockedActor' | 'BlockedByActor' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/getAuthorFeed.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/getAuthorFeed.ts new file mode 100644 index 00000000000..25f51f6fe5f --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/getAuthorFeed.ts @@ -0,0 +1,56 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyFeedDefs from './defs' + +export interface QueryParams { + actor: string + limit: number + cursor?: string + filter: + | 'posts_with_replies' + | 'posts_no_replies' + | 'posts_with_media' + | 'posts_and_author_threads' + | (string & {}) +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + feed: AppBskyFeedDefs.FeedViewPost[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: 'BlockedActor' | 'BlockedByActor' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/getFeed.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/getFeed.ts new file mode 100644 index 00000000000..e72b1010aea --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/getFeed.ts @@ -0,0 +1,50 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyFeedDefs from './defs' + +export interface QueryParams { + feed: string + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + feed: AppBskyFeedDefs.FeedViewPost[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: 'UnknownFeed' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/getFeedGenerator.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/getFeedGenerator.ts new file mode 100644 index 00000000000..fab3b30c316 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/getFeedGenerator.ts @@ -0,0 +1,48 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyFeedDefs from './defs' + +export interface QueryParams { + feed: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + view: AppBskyFeedDefs.GeneratorView + isOnline: boolean + isValid: boolean + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/getFeedGenerators.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/getFeedGenerators.ts new file mode 100644 index 00000000000..d7e082f2362 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/getFeedGenerators.ts @@ -0,0 +1,46 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyFeedDefs from './defs' + +export interface QueryParams { + feeds: string[] +} + +export type InputSchema = undefined + +export interface OutputSchema { + feeds: AppBskyFeedDefs.GeneratorView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/getFeedSkeleton.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/getFeedSkeleton.ts new file mode 100644 index 00000000000..1c8f349b42b --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/getFeedSkeleton.ts @@ -0,0 +1,50 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyFeedDefs from './defs' + +export interface QueryParams { + feed: string + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + feed: AppBskyFeedDefs.SkeletonFeedPost[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: 'UnknownFeed' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/getLikes.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/getLikes.ts new file mode 100644 index 00000000000..d581f5bfa9c --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/getLikes.ts @@ -0,0 +1,69 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyActorDefs from '../actor/defs' + +export interface QueryParams { + uri: string + cid?: string + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + uri: string + cid?: string + cursor?: string + likes: Like[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput + +export interface Like { + indexedAt: string + createdAt: string + actor: AppBskyActorDefs.ProfileView + [k: string]: unknown +} + +export function isLike(v: unknown): v is Like { + return ( + isObj(v) && hasProp(v, '$type') && v.$type === 'app.bsky.feed.getLikes#like' + ) +} + +export function validateLike(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.getLikes#like', v) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/getListFeed.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/getListFeed.ts new file mode 100644 index 00000000000..e24c3f8ed22 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/getListFeed.ts @@ -0,0 +1,50 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyFeedDefs from './defs' + +export interface QueryParams { + list: string + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + feed: AppBskyFeedDefs.FeedViewPost[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: 'UnknownList' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/getPostThread.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/getPostThread.ts new file mode 100644 index 00000000000..61de94b729d --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/getPostThread.ts @@ -0,0 +1,53 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyFeedDefs from './defs' + +export interface QueryParams { + uri: string + depth: number + parentHeight: number +} + +export type InputSchema = undefined + +export interface OutputSchema { + thread: + | AppBskyFeedDefs.ThreadViewPost + | AppBskyFeedDefs.NotFoundPost + | AppBskyFeedDefs.BlockedPost + | { $type: string; [k: string]: unknown } + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: 'NotFound' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/getPosts.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/getPosts.ts new file mode 100644 index 00000000000..4282f5d349f --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/getPosts.ts @@ -0,0 +1,46 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyFeedDefs from './defs' + +export interface QueryParams { + uris: string[] +} + +export type InputSchema = undefined + +export interface OutputSchema { + posts: AppBskyFeedDefs.PostView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/getRepostedBy.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/getRepostedBy.ts new file mode 100644 index 00000000000..0b9c1a6f68b --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/getRepostedBy.ts @@ -0,0 +1,52 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyActorDefs from '../actor/defs' + +export interface QueryParams { + uri: string + cid?: string + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + uri: string + cid?: string + cursor?: string + repostedBy: AppBskyActorDefs.ProfileView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/getSuggestedFeeds.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/getSuggestedFeeds.ts new file mode 100644 index 00000000000..9b271335466 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/getSuggestedFeeds.ts @@ -0,0 +1,48 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyFeedDefs from './defs' + +export interface QueryParams { + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + feeds: AppBskyFeedDefs.GeneratorView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/getTimeline.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/getTimeline.ts new file mode 100644 index 00000000000..832caf5c6f7 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/getTimeline.ts @@ -0,0 +1,49 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyFeedDefs from './defs' + +export interface QueryParams { + algorithm?: string + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + feed: AppBskyFeedDefs.FeedViewPost[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/like.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/like.ts new file mode 100644 index 00000000000..1da9dd940dc --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/like.ts @@ -0,0 +1,26 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import * as ComAtprotoRepoStrongRef from '../../../com/atproto/repo/strongRef' + +export interface Record { + subject: ComAtprotoRepoStrongRef.Main + createdAt: string + [k: string]: unknown +} + +export function isRecord(v: unknown): v is Record { + return ( + isObj(v) && + hasProp(v, '$type') && + (v.$type === 'app.bsky.feed.like#main' || v.$type === 'app.bsky.feed.like') + ) +} + +export function validateRecord(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.like#main', v) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/post.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/post.ts new file mode 100644 index 00000000000..93870b4452d --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/post.ts @@ -0,0 +1,102 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import * as AppBskyRichtextFacet from '../richtext/facet' +import * as AppBskyEmbedImages from '../embed/images' +import * as AppBskyEmbedExternal from '../embed/external' +import * as AppBskyEmbedRecord from '../embed/record' +import * as AppBskyEmbedRecordWithMedia from '../embed/recordWithMedia' +import * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs' +import * as ComAtprotoRepoStrongRef from '../../../com/atproto/repo/strongRef' + +export interface Record { + text: string + /** Deprecated: replaced by app.bsky.richtext.facet. */ + entities?: Entity[] + facets?: AppBskyRichtextFacet.Main[] + reply?: ReplyRef + embed?: + | AppBskyEmbedImages.Main + | AppBskyEmbedExternal.Main + | AppBskyEmbedRecord.Main + | AppBskyEmbedRecordWithMedia.Main + | { $type: string; [k: string]: unknown } + langs?: string[] + labels?: + | ComAtprotoLabelDefs.SelfLabels + | { $type: string; [k: string]: unknown } + /** Additional non-inline tags describing this post. */ + tags?: string[] + createdAt: string + [k: string]: unknown +} + +export function isRecord(v: unknown): v is Record { + return ( + isObj(v) && + hasProp(v, '$type') && + (v.$type === 'app.bsky.feed.post#main' || v.$type === 'app.bsky.feed.post') + ) +} + +export function validateRecord(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.post#main', v) +} + +export interface ReplyRef { + root: ComAtprotoRepoStrongRef.Main + parent: ComAtprotoRepoStrongRef.Main + [k: string]: unknown +} + +export function isReplyRef(v: unknown): v is ReplyRef { + return ( + isObj(v) && hasProp(v, '$type') && v.$type === 'app.bsky.feed.post#replyRef' + ) +} + +export function validateReplyRef(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.post#replyRef', v) +} + +/** Deprecated: use facets instead. */ +export interface Entity { + index: TextSlice + /** Expected values are 'mention' and 'link'. */ + type: string + value: string + [k: string]: unknown +} + +export function isEntity(v: unknown): v is Entity { + return ( + isObj(v) && hasProp(v, '$type') && v.$type === 'app.bsky.feed.post#entity' + ) +} + +export function validateEntity(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.post#entity', v) +} + +/** Deprecated. Use app.bsky.richtext instead -- A text segment. Start is inclusive, end is exclusive. Indices are for utf16-encoded strings. */ +export interface TextSlice { + start: number + end: number + [k: string]: unknown +} + +export function isTextSlice(v: unknown): v is TextSlice { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.feed.post#textSlice' + ) +} + +export function validateTextSlice(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.post#textSlice', v) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/repost.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/repost.ts new file mode 100644 index 00000000000..4c836d76e2a --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/repost.ts @@ -0,0 +1,27 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import * as ComAtprotoRepoStrongRef from '../../../com/atproto/repo/strongRef' + +export interface Record { + subject: ComAtprotoRepoStrongRef.Main + createdAt: string + [k: string]: unknown +} + +export function isRecord(v: unknown): v is Record { + return ( + isObj(v) && + hasProp(v, '$type') && + (v.$type === 'app.bsky.feed.repost#main' || + v.$type === 'app.bsky.feed.repost') + ) +} + +export function validateRecord(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.repost#main', v) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/searchPosts.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/searchPosts.ts new file mode 100644 index 00000000000..36ac7cbb67d --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/searchPosts.ts @@ -0,0 +1,54 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyFeedDefs from './defs' + +export interface QueryParams { + /** Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. */ + q: string + limit: number + /** Optional pagination mechanism; may not necessarily allow scrolling through entire result set. */ + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + /** Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. */ + hitsTotal?: number + posts: AppBskyFeedDefs.PostView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: 'BadQueryString' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/threadgate.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/threadgate.ts new file mode 100644 index 00000000000..6a190d6e98a --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/threadgate.ts @@ -0,0 +1,84 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' + +export interface Record { + post: string + allow?: ( + | MentionRule + | FollowingRule + | ListRule + | { $type: string; [k: string]: unknown } + )[] + createdAt: string + [k: string]: unknown +} + +export function isRecord(v: unknown): v is Record { + return ( + isObj(v) && + hasProp(v, '$type') && + (v.$type === 'app.bsky.feed.threadgate#main' || + v.$type === 'app.bsky.feed.threadgate') + ) +} + +export function validateRecord(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.threadgate#main', v) +} + +/** Allow replies from actors mentioned in your post. */ +export interface MentionRule { + [k: string]: unknown +} + +export function isMentionRule(v: unknown): v is MentionRule { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.feed.threadgate#mentionRule' + ) +} + +export function validateMentionRule(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.threadgate#mentionRule', v) +} + +/** Allow replies from actors you follow. */ +export interface FollowingRule { + [k: string]: unknown +} + +export function isFollowingRule(v: unknown): v is FollowingRule { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.feed.threadgate#followingRule' + ) +} + +export function validateFollowingRule(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.threadgate#followingRule', v) +} + +/** Allow replies from actors on a list. */ +export interface ListRule { + list: string + [k: string]: unknown +} + +export function isListRule(v: unknown): v is ListRule { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.feed.threadgate#listRule' + ) +} + +export function validateListRule(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.feed.threadgate#listRule', v) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/graph/block.ts b/packages/ozone/src/lexicon/types/app/bsky/graph/block.ts new file mode 100644 index 00000000000..947463af422 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/graph/block.ts @@ -0,0 +1,26 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' + +export interface Record { + subject: string + createdAt: string + [k: string]: unknown +} + +export function isRecord(v: unknown): v is Record { + return ( + isObj(v) && + hasProp(v, '$type') && + (v.$type === 'app.bsky.graph.block#main' || + v.$type === 'app.bsky.graph.block') + ) +} + +export function validateRecord(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.graph.block#main', v) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/graph/defs.ts b/packages/ozone/src/lexicon/types/app/bsky/graph/defs.ts new file mode 100644 index 00000000000..be2d8c385d9 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/graph/defs.ts @@ -0,0 +1,104 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import * as AppBskyActorDefs from '../actor/defs' +import * as AppBskyRichtextFacet from '../richtext/facet' + +export interface ListViewBasic { + uri: string + cid: string + name: string + purpose: ListPurpose + avatar?: string + viewer?: ListViewerState + indexedAt?: string + [k: string]: unknown +} + +export function isListViewBasic(v: unknown): v is ListViewBasic { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.graph.defs#listViewBasic' + ) +} + +export function validateListViewBasic(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.graph.defs#listViewBasic', v) +} + +export interface ListView { + uri: string + cid: string + creator: AppBskyActorDefs.ProfileView + name: string + purpose: ListPurpose + description?: string + descriptionFacets?: AppBskyRichtextFacet.Main[] + avatar?: string + viewer?: ListViewerState + indexedAt: string + [k: string]: unknown +} + +export function isListView(v: unknown): v is ListView { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.graph.defs#listView' + ) +} + +export function validateListView(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.graph.defs#listView', v) +} + +export interface ListItemView { + uri: string + subject: AppBskyActorDefs.ProfileView + [k: string]: unknown +} + +export function isListItemView(v: unknown): v is ListItemView { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.graph.defs#listItemView' + ) +} + +export function validateListItemView(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.graph.defs#listItemView', v) +} + +export type ListPurpose = + | 'app.bsky.graph.defs#modlist' + | 'app.bsky.graph.defs#curatelist' + | (string & {}) + +/** A list of actors to apply an aggregate moderation action (mute/block) on. */ +export const MODLIST = 'app.bsky.graph.defs#modlist' +/** A list of actors used for curation purposes such as list feeds or interaction gating. */ +export const CURATELIST = 'app.bsky.graph.defs#curatelist' + +export interface ListViewerState { + muted?: boolean + blocked?: string + [k: string]: unknown +} + +export function isListViewerState(v: unknown): v is ListViewerState { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.graph.defs#listViewerState' + ) +} + +export function validateListViewerState(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.graph.defs#listViewerState', v) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/graph/follow.ts b/packages/ozone/src/lexicon/types/app/bsky/graph/follow.ts new file mode 100644 index 00000000000..4b74a58a5df --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/graph/follow.ts @@ -0,0 +1,26 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' + +export interface Record { + subject: string + createdAt: string + [k: string]: unknown +} + +export function isRecord(v: unknown): v is Record { + return ( + isObj(v) && + hasProp(v, '$type') && + (v.$type === 'app.bsky.graph.follow#main' || + v.$type === 'app.bsky.graph.follow') + ) +} + +export function validateRecord(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.graph.follow#main', v) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/graph/getBlocks.ts b/packages/ozone/src/lexicon/types/app/bsky/graph/getBlocks.ts new file mode 100644 index 00000000000..d380a14880a --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/graph/getBlocks.ts @@ -0,0 +1,48 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyActorDefs from '../actor/defs' + +export interface QueryParams { + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + blocks: AppBskyActorDefs.ProfileView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/graph/getFollowers.ts b/packages/ozone/src/lexicon/types/app/bsky/graph/getFollowers.ts new file mode 100644 index 00000000000..b337be52c1b --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/graph/getFollowers.ts @@ -0,0 +1,50 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyActorDefs from '../actor/defs' + +export interface QueryParams { + actor: string + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + subject: AppBskyActorDefs.ProfileView + cursor?: string + followers: AppBskyActorDefs.ProfileView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/graph/getFollows.ts b/packages/ozone/src/lexicon/types/app/bsky/graph/getFollows.ts new file mode 100644 index 00000000000..71e9ca0270c --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/graph/getFollows.ts @@ -0,0 +1,50 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyActorDefs from '../actor/defs' + +export interface QueryParams { + actor: string + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + subject: AppBskyActorDefs.ProfileView + cursor?: string + follows: AppBskyActorDefs.ProfileView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/graph/getList.ts b/packages/ozone/src/lexicon/types/app/bsky/graph/getList.ts new file mode 100644 index 00000000000..fc45dd20985 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/graph/getList.ts @@ -0,0 +1,50 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyGraphDefs from './defs' + +export interface QueryParams { + list: string + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + list: AppBskyGraphDefs.ListView + items: AppBskyGraphDefs.ListItemView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/graph/getListBlocks.ts b/packages/ozone/src/lexicon/types/app/bsky/graph/getListBlocks.ts new file mode 100644 index 00000000000..04cca70b44d --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/graph/getListBlocks.ts @@ -0,0 +1,48 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyGraphDefs from './defs' + +export interface QueryParams { + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + lists: AppBskyGraphDefs.ListView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/graph/getListMutes.ts b/packages/ozone/src/lexicon/types/app/bsky/graph/getListMutes.ts new file mode 100644 index 00000000000..04cca70b44d --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/graph/getListMutes.ts @@ -0,0 +1,48 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyGraphDefs from './defs' + +export interface QueryParams { + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + lists: AppBskyGraphDefs.ListView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/graph/getLists.ts b/packages/ozone/src/lexicon/types/app/bsky/graph/getLists.ts new file mode 100644 index 00000000000..8acf9362c00 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/graph/getLists.ts @@ -0,0 +1,49 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyGraphDefs from './defs' + +export interface QueryParams { + actor: string + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + lists: AppBskyGraphDefs.ListView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/graph/getMutes.ts b/packages/ozone/src/lexicon/types/app/bsky/graph/getMutes.ts new file mode 100644 index 00000000000..0034095b975 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/graph/getMutes.ts @@ -0,0 +1,48 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyActorDefs from '../actor/defs' + +export interface QueryParams { + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + mutes: AppBskyActorDefs.ProfileView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/graph/getSuggestedFollowsByActor.ts b/packages/ozone/src/lexicon/types/app/bsky/graph/getSuggestedFollowsByActor.ts new file mode 100644 index 00000000000..a2245846fd2 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/graph/getSuggestedFollowsByActor.ts @@ -0,0 +1,46 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyActorDefs from '../actor/defs' + +export interface QueryParams { + actor: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + suggestions: AppBskyActorDefs.ProfileView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/graph/list.ts b/packages/ozone/src/lexicon/types/app/bsky/graph/list.ts new file mode 100644 index 00000000000..36a7fb17a3f --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/graph/list.ts @@ -0,0 +1,36 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import * as AppBskyGraphDefs from './defs' +import * as AppBskyRichtextFacet from '../richtext/facet' +import * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs' + +export interface Record { + purpose: AppBskyGraphDefs.ListPurpose + name: string + description?: string + descriptionFacets?: AppBskyRichtextFacet.Main[] + avatar?: BlobRef + labels?: + | ComAtprotoLabelDefs.SelfLabels + | { $type: string; [k: string]: unknown } + createdAt: string + [k: string]: unknown +} + +export function isRecord(v: unknown): v is Record { + return ( + isObj(v) && + hasProp(v, '$type') && + (v.$type === 'app.bsky.graph.list#main' || + v.$type === 'app.bsky.graph.list') + ) +} + +export function validateRecord(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.graph.list#main', v) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/graph/listblock.ts b/packages/ozone/src/lexicon/types/app/bsky/graph/listblock.ts new file mode 100644 index 00000000000..59f2e057eb5 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/graph/listblock.ts @@ -0,0 +1,26 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' + +export interface Record { + subject: string + createdAt: string + [k: string]: unknown +} + +export function isRecord(v: unknown): v is Record { + return ( + isObj(v) && + hasProp(v, '$type') && + (v.$type === 'app.bsky.graph.listblock#main' || + v.$type === 'app.bsky.graph.listblock') + ) +} + +export function validateRecord(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.graph.listblock#main', v) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/graph/listitem.ts b/packages/ozone/src/lexicon/types/app/bsky/graph/listitem.ts new file mode 100644 index 00000000000..69eff329ed4 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/graph/listitem.ts @@ -0,0 +1,27 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' + +export interface Record { + subject: string + list: string + createdAt: string + [k: string]: unknown +} + +export function isRecord(v: unknown): v is Record { + return ( + isObj(v) && + hasProp(v, '$type') && + (v.$type === 'app.bsky.graph.listitem#main' || + v.$type === 'app.bsky.graph.listitem') + ) +} + +export function validateRecord(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.graph.listitem#main', v) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/graph/muteActor.ts b/packages/ozone/src/lexicon/types/app/bsky/graph/muteActor.ts new file mode 100644 index 00000000000..52d1b864989 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/graph/muteActor.ts @@ -0,0 +1,38 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + actor: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/graph/muteActorList.ts b/packages/ozone/src/lexicon/types/app/bsky/graph/muteActorList.ts new file mode 100644 index 00000000000..bf803f388af --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/graph/muteActorList.ts @@ -0,0 +1,38 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + list: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/graph/unmuteActor.ts b/packages/ozone/src/lexicon/types/app/bsky/graph/unmuteActor.ts new file mode 100644 index 00000000000..52d1b864989 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/graph/unmuteActor.ts @@ -0,0 +1,38 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + actor: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/graph/unmuteActorList.ts b/packages/ozone/src/lexicon/types/app/bsky/graph/unmuteActorList.ts new file mode 100644 index 00000000000..bf803f388af --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/graph/unmuteActorList.ts @@ -0,0 +1,38 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + list: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/notification/getUnreadCount.ts b/packages/ozone/src/lexicon/types/app/bsky/notification/getUnreadCount.ts new file mode 100644 index 00000000000..6cf3c84beb5 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/notification/getUnreadCount.ts @@ -0,0 +1,45 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams { + seenAt?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + count: number + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/notification/listNotifications.ts b/packages/ozone/src/lexicon/types/app/bsky/notification/listNotifications.ts new file mode 100644 index 00000000000..b50d6e8282e --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/notification/listNotifications.ts @@ -0,0 +1,87 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyActorDefs from '../actor/defs' +import * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs' + +export interface QueryParams { + limit: number + cursor?: string + seenAt?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + notifications: Notification[] + seenAt?: string + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput + +export interface Notification { + uri: string + cid: string + author: AppBskyActorDefs.ProfileView + /** Expected values are 'like', 'repost', 'follow', 'mention', 'reply', and 'quote'. */ + reason: + | 'like' + | 'repost' + | 'follow' + | 'mention' + | 'reply' + | 'quote' + | (string & {}) + reasonSubject?: string + record: {} + isRead: boolean + indexedAt: string + labels?: ComAtprotoLabelDefs.Label[] + [k: string]: unknown +} + +export function isNotification(v: unknown): v is Notification { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.notification.listNotifications#notification' + ) +} + +export function validateNotification(v: unknown): ValidationResult { + return lexicons.validate( + 'app.bsky.notification.listNotifications#notification', + v, + ) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/notification/registerPush.ts b/packages/ozone/src/lexicon/types/app/bsky/notification/registerPush.ts new file mode 100644 index 00000000000..9923aeb058e --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/notification/registerPush.ts @@ -0,0 +1,41 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + serviceDid: string + token: string + platform: 'ios' | 'android' | 'web' | (string & {}) + appId: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/notification/updateSeen.ts b/packages/ozone/src/lexicon/types/app/bsky/notification/updateSeen.ts new file mode 100644 index 00000000000..136191edc40 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/notification/updateSeen.ts @@ -0,0 +1,38 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + seenAt: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/richtext/facet.ts b/packages/ozone/src/lexicon/types/app/bsky/richtext/facet.ts new file mode 100644 index 00000000000..2c5b2d723a9 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/richtext/facet.ts @@ -0,0 +1,97 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' + +export interface Main { + index: ByteSlice + features: (Mention | Link | Tag | { $type: string; [k: string]: unknown })[] + [k: string]: unknown +} + +export function isMain(v: unknown): v is Main { + return ( + isObj(v) && + hasProp(v, '$type') && + (v.$type === 'app.bsky.richtext.facet#main' || + v.$type === 'app.bsky.richtext.facet') + ) +} + +export function validateMain(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.richtext.facet#main', v) +} + +/** A facet feature for actor mentions. */ +export interface Mention { + did: string + [k: string]: unknown +} + +export function isMention(v: unknown): v is Mention { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.richtext.facet#mention' + ) +} + +export function validateMention(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.richtext.facet#mention', v) +} + +/** A facet feature for links. */ +export interface Link { + uri: string + [k: string]: unknown +} + +export function isLink(v: unknown): v is Link { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.richtext.facet#link' + ) +} + +export function validateLink(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.richtext.facet#link', v) +} + +/** A hashtag. */ +export interface Tag { + tag: string + [k: string]: unknown +} + +export function isTag(v: unknown): v is Tag { + return ( + isObj(v) && hasProp(v, '$type') && v.$type === 'app.bsky.richtext.facet#tag' + ) +} + +export function validateTag(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.richtext.facet#tag', v) +} + +/** A text segment. Start is inclusive, end is exclusive. Indices are for utf8-encoded strings. */ +export interface ByteSlice { + byteStart: number + byteEnd: number + [k: string]: unknown +} + +export function isByteSlice(v: unknown): v is ByteSlice { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.richtext.facet#byteSlice' + ) +} + +export function validateByteSlice(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.richtext.facet#byteSlice', v) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/unspecced/defs.ts b/packages/ozone/src/lexicon/types/app/bsky/unspecced/defs.ts new file mode 100644 index 00000000000..59a6b38064c --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/unspecced/defs.ts @@ -0,0 +1,41 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' + +export interface SkeletonSearchPost { + uri: string + [k: string]: unknown +} + +export function isSkeletonSearchPost(v: unknown): v is SkeletonSearchPost { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.unspecced.defs#skeletonSearchPost' + ) +} + +export function validateSkeletonSearchPost(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.unspecced.defs#skeletonSearchPost', v) +} + +export interface SkeletonSearchActor { + did: string + [k: string]: unknown +} + +export function isSkeletonSearchActor(v: unknown): v is SkeletonSearchActor { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'app.bsky.unspecced.defs#skeletonSearchActor' + ) +} + +export function validateSkeletonSearchActor(v: unknown): ValidationResult { + return lexicons.validate('app.bsky.unspecced.defs#skeletonSearchActor', v) +} diff --git a/packages/ozone/src/lexicon/types/app/bsky/unspecced/getPopular.ts b/packages/ozone/src/lexicon/types/app/bsky/unspecced/getPopular.ts new file mode 100644 index 00000000000..8471ed77a6c --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/unspecced/getPopular.ts @@ -0,0 +1,49 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyFeedDefs from '../feed/defs' + +export interface QueryParams { + includeNsfw: boolean + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + feed: AppBskyFeedDefs.FeedViewPost[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/unspecced/getPopularFeedGenerators.ts b/packages/ozone/src/lexicon/types/app/bsky/unspecced/getPopularFeedGenerators.ts new file mode 100644 index 00000000000..97937e926c2 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/unspecced/getPopularFeedGenerators.ts @@ -0,0 +1,49 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyFeedDefs from '../feed/defs' + +export interface QueryParams { + limit: number + cursor?: string + query?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + feeds: AppBskyFeedDefs.GeneratorView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/unspecced/getTimelineSkeleton.ts b/packages/ozone/src/lexicon/types/app/bsky/unspecced/getTimelineSkeleton.ts new file mode 100644 index 00000000000..4ccad20c902 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/unspecced/getTimelineSkeleton.ts @@ -0,0 +1,49 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyFeedDefs from '../feed/defs' + +export interface QueryParams { + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + feed: AppBskyFeedDefs.SkeletonFeedPost[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: 'UnknownFeed' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/unspecced/searchActorsSkeleton.ts b/packages/ozone/src/lexicon/types/app/bsky/unspecced/searchActorsSkeleton.ts new file mode 100644 index 00000000000..5c45b9fb622 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/unspecced/searchActorsSkeleton.ts @@ -0,0 +1,56 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyUnspeccedDefs from './defs' + +export interface QueryParams { + /** Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. For typeahead search, only simple term match is supported, not full syntax. */ + q: string + /** If true, acts as fast/simple 'typeahead' query. */ + typeahead?: boolean + limit: number + /** Optional pagination mechanism; may not necessarily allow scrolling through entire result set. */ + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + /** Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. */ + hitsTotal?: number + actors: AppBskyUnspeccedDefs.SkeletonSearchActor[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: 'BadQueryString' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/app/bsky/unspecced/searchPostsSkeleton.ts b/packages/ozone/src/lexicon/types/app/bsky/unspecced/searchPostsSkeleton.ts new file mode 100644 index 00000000000..15532087b82 --- /dev/null +++ b/packages/ozone/src/lexicon/types/app/bsky/unspecced/searchPostsSkeleton.ts @@ -0,0 +1,54 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as AppBskyUnspeccedDefs from './defs' + +export interface QueryParams { + /** Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. */ + q: string + limit: number + /** Optional pagination mechanism; may not necessarily allow scrolling through entire result set. */ + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + /** Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. */ + hitsTotal?: number + posts: AppBskyUnspeccedDefs.SkeletonSearchPost[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: 'BadQueryString' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/admin/defs.ts b/packages/ozone/src/lexicon/types/com/atproto/admin/defs.ts new file mode 100644 index 00000000000..8236f848fa0 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/admin/defs.ts @@ -0,0 +1,719 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import * as ComAtprotoRepoStrongRef from '../repo/strongRef' +import * as ComAtprotoModerationDefs from '../moderation/defs' +import * as ComAtprotoServerDefs from '../server/defs' +import * as ComAtprotoLabelDefs from '../label/defs' + +export interface StatusAttr { + applied: boolean + ref?: string + [k: string]: unknown +} + +export function isStatusAttr(v: unknown): v is StatusAttr { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#statusAttr' + ) +} + +export function validateStatusAttr(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#statusAttr', v) +} + +export interface ModEventView { + id: number + event: + | ModEventTakedown + | ModEventReverseTakedown + | ModEventComment + | ModEventReport + | ModEventLabel + | ModEventAcknowledge + | ModEventEscalate + | ModEventMute + | ModEventEmail + | { $type: string; [k: string]: unknown } + subject: + | RepoRef + | ComAtprotoRepoStrongRef.Main + | { $type: string; [k: string]: unknown } + subjectBlobCids: string[] + createdBy: string + createdAt: string + creatorHandle?: string + subjectHandle?: string + [k: string]: unknown +} + +export function isModEventView(v: unknown): v is ModEventView { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#modEventView' + ) +} + +export function validateModEventView(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#modEventView', v) +} + +export interface ModEventViewDetail { + id: number + event: + | ModEventTakedown + | ModEventReverseTakedown + | ModEventComment + | ModEventReport + | ModEventLabel + | ModEventAcknowledge + | ModEventEscalate + | ModEventMute + | ModEventResolveAppeal + | { $type: string; [k: string]: unknown } + subject: + | RepoView + | RepoViewNotFound + | RecordView + | RecordViewNotFound + | { $type: string; [k: string]: unknown } + subjectBlobs: BlobView[] + createdBy: string + createdAt: string + [k: string]: unknown +} + +export function isModEventViewDetail(v: unknown): v is ModEventViewDetail { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#modEventViewDetail' + ) +} + +export function validateModEventViewDetail(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#modEventViewDetail', v) +} + +export interface ReportView { + id: number + reasonType: ComAtprotoModerationDefs.ReasonType + comment?: string + subjectRepoHandle?: string + subject: + | RepoRef + | ComAtprotoRepoStrongRef.Main + | { $type: string; [k: string]: unknown } + reportedBy: string + createdAt: string + resolvedByActionIds: number[] + [k: string]: unknown +} + +export function isReportView(v: unknown): v is ReportView { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#reportView' + ) +} + +export function validateReportView(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#reportView', v) +} + +export interface SubjectStatusView { + id: number + subject: + | RepoRef + | ComAtprotoRepoStrongRef.Main + | { $type: string; [k: string]: unknown } + subjectBlobCids?: string[] + subjectRepoHandle?: string + /** Timestamp referencing when the last update was made to the moderation status of the subject */ + updatedAt: string + /** Timestamp referencing the first moderation status impacting event was emitted on the subject */ + createdAt: string + reviewState: SubjectReviewState + /** Sticky comment on the subject. */ + comment?: string + muteUntil?: string + lastReviewedBy?: string + lastReviewedAt?: string + lastReportedAt?: string + /** Timestamp referencing when the author of the subject appealed a moderation action */ + lastAppealedAt?: string + takendown?: boolean + /** True indicates that the a previously taken moderator action was appealed against, by the author of the content. False indicates last appeal was resolved by moderators. */ + appealed?: boolean + suspendUntil?: string + [k: string]: unknown +} + +export function isSubjectStatusView(v: unknown): v is SubjectStatusView { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#subjectStatusView' + ) +} + +export function validateSubjectStatusView(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#subjectStatusView', v) +} + +export interface ReportViewDetail { + id: number + reasonType: ComAtprotoModerationDefs.ReasonType + comment?: string + subject: + | RepoView + | RepoViewNotFound + | RecordView + | RecordViewNotFound + | { $type: string; [k: string]: unknown } + subjectStatus?: SubjectStatusView + reportedBy: string + createdAt: string + resolvedByActions: ModEventView[] + [k: string]: unknown +} + +export function isReportViewDetail(v: unknown): v is ReportViewDetail { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#reportViewDetail' + ) +} + +export function validateReportViewDetail(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#reportViewDetail', v) +} + +export interface RepoView { + did: string + handle: string + email?: string + relatedRecords: {}[] + indexedAt: string + moderation: Moderation + invitedBy?: ComAtprotoServerDefs.InviteCode + invitesDisabled?: boolean + inviteNote?: string + [k: string]: unknown +} + +export function isRepoView(v: unknown): v is RepoView { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#repoView' + ) +} + +export function validateRepoView(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#repoView', v) +} + +export interface RepoViewDetail { + did: string + handle: string + email?: string + relatedRecords: {}[] + indexedAt: string + moderation: ModerationDetail + labels?: ComAtprotoLabelDefs.Label[] + invitedBy?: ComAtprotoServerDefs.InviteCode + invites?: ComAtprotoServerDefs.InviteCode[] + invitesDisabled?: boolean + inviteNote?: string + emailConfirmedAt?: string + [k: string]: unknown +} + +export function isRepoViewDetail(v: unknown): v is RepoViewDetail { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#repoViewDetail' + ) +} + +export function validateRepoViewDetail(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#repoViewDetail', v) +} + +export interface AccountView { + did: string + handle: string + email?: string + relatedRecords?: {}[] + indexedAt: string + invitedBy?: ComAtprotoServerDefs.InviteCode + invites?: ComAtprotoServerDefs.InviteCode[] + invitesDisabled?: boolean + emailConfirmedAt?: string + inviteNote?: string + [k: string]: unknown +} + +export function isAccountView(v: unknown): v is AccountView { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#accountView' + ) +} + +export function validateAccountView(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#accountView', v) +} + +export interface RepoViewNotFound { + did: string + [k: string]: unknown +} + +export function isRepoViewNotFound(v: unknown): v is RepoViewNotFound { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#repoViewNotFound' + ) +} + +export function validateRepoViewNotFound(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#repoViewNotFound', v) +} + +export interface RepoRef { + did: string + [k: string]: unknown +} + +export function isRepoRef(v: unknown): v is RepoRef { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#repoRef' + ) +} + +export function validateRepoRef(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#repoRef', v) +} + +export interface RepoBlobRef { + did: string + cid: string + recordUri?: string + [k: string]: unknown +} + +export function isRepoBlobRef(v: unknown): v is RepoBlobRef { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#repoBlobRef' + ) +} + +export function validateRepoBlobRef(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#repoBlobRef', v) +} + +export interface RecordView { + uri: string + cid: string + value: {} + blobCids: string[] + indexedAt: string + moderation: Moderation + repo: RepoView + [k: string]: unknown +} + +export function isRecordView(v: unknown): v is RecordView { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#recordView' + ) +} + +export function validateRecordView(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#recordView', v) +} + +export interface RecordViewDetail { + uri: string + cid: string + value: {} + blobs: BlobView[] + labels?: ComAtprotoLabelDefs.Label[] + indexedAt: string + moderation: ModerationDetail + repo: RepoView + [k: string]: unknown +} + +export function isRecordViewDetail(v: unknown): v is RecordViewDetail { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#recordViewDetail' + ) +} + +export function validateRecordViewDetail(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#recordViewDetail', v) +} + +export interface RecordViewNotFound { + uri: string + [k: string]: unknown +} + +export function isRecordViewNotFound(v: unknown): v is RecordViewNotFound { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#recordViewNotFound' + ) +} + +export function validateRecordViewNotFound(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#recordViewNotFound', v) +} + +export interface Moderation { + subjectStatus?: SubjectStatusView + [k: string]: unknown +} + +export function isModeration(v: unknown): v is Moderation { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#moderation' + ) +} + +export function validateModeration(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#moderation', v) +} + +export interface ModerationDetail { + subjectStatus?: SubjectStatusView + [k: string]: unknown +} + +export function isModerationDetail(v: unknown): v is ModerationDetail { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#moderationDetail' + ) +} + +export function validateModerationDetail(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#moderationDetail', v) +} + +export interface BlobView { + cid: string + mimeType: string + size: number + createdAt: string + details?: + | ImageDetails + | VideoDetails + | { $type: string; [k: string]: unknown } + moderation?: Moderation + [k: string]: unknown +} + +export function isBlobView(v: unknown): v is BlobView { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#blobView' + ) +} + +export function validateBlobView(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#blobView', v) +} + +export interface ImageDetails { + width: number + height: number + [k: string]: unknown +} + +export function isImageDetails(v: unknown): v is ImageDetails { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#imageDetails' + ) +} + +export function validateImageDetails(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#imageDetails', v) +} + +export interface VideoDetails { + width: number + height: number + length: number + [k: string]: unknown +} + +export function isVideoDetails(v: unknown): v is VideoDetails { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#videoDetails' + ) +} + +export function validateVideoDetails(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#videoDetails', v) +} + +export type SubjectReviewState = + | 'lex:com.atproto.admin.defs#reviewOpen' + | 'lex:com.atproto.admin.defs#reviewEscalated' + | 'lex:com.atproto.admin.defs#reviewClosed' + | (string & {}) + +/** Moderator review status of a subject: Open. Indicates that the subject needs to be reviewed by a moderator */ +export const REVIEWOPEN = 'com.atproto.admin.defs#reviewOpen' +/** Moderator review status of a subject: Escalated. Indicates that the subject was escalated for review by a moderator */ +export const REVIEWESCALATED = 'com.atproto.admin.defs#reviewEscalated' +/** Moderator review status of a subject: Closed. Indicates that the subject was already reviewed and resolved by a moderator */ +export const REVIEWCLOSED = 'com.atproto.admin.defs#reviewClosed' + +/** Take down a subject permanently or temporarily */ +export interface ModEventTakedown { + comment?: string + /** Indicates how long the takedown should be in effect before automatically expiring. */ + durationInHours?: number + [k: string]: unknown +} + +export function isModEventTakedown(v: unknown): v is ModEventTakedown { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#modEventTakedown' + ) +} + +export function validateModEventTakedown(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#modEventTakedown', v) +} + +/** Revert take down action on a subject */ +export interface ModEventReverseTakedown { + /** Describe reasoning behind the reversal. */ + comment?: string + [k: string]: unknown +} + +export function isModEventReverseTakedown( + v: unknown, +): v is ModEventReverseTakedown { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#modEventReverseTakedown' + ) +} + +export function validateModEventReverseTakedown(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#modEventReverseTakedown', v) +} + +/** Resolve appeal on a subject */ +export interface ModEventResolveAppeal { + /** Describe resolution. */ + comment?: string + [k: string]: unknown +} + +export function isModEventResolveAppeal( + v: unknown, +): v is ModEventResolveAppeal { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#modEventResolveAppeal' + ) +} + +export function validateModEventResolveAppeal(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#modEventResolveAppeal', v) +} + +/** Add a comment to a subject */ +export interface ModEventComment { + comment: string + /** Make the comment persistent on the subject */ + sticky?: boolean + [k: string]: unknown +} + +export function isModEventComment(v: unknown): v is ModEventComment { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#modEventComment' + ) +} + +export function validateModEventComment(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#modEventComment', v) +} + +/** Report a subject */ +export interface ModEventReport { + comment?: string + reportType: ComAtprotoModerationDefs.ReasonType + [k: string]: unknown +} + +export function isModEventReport(v: unknown): v is ModEventReport { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#modEventReport' + ) +} + +export function validateModEventReport(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#modEventReport', v) +} + +/** Apply/Negate labels on a subject */ +export interface ModEventLabel { + comment?: string + createLabelVals: string[] + negateLabelVals: string[] + [k: string]: unknown +} + +export function isModEventLabel(v: unknown): v is ModEventLabel { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#modEventLabel' + ) +} + +export function validateModEventLabel(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#modEventLabel', v) +} + +export interface ModEventAcknowledge { + comment?: string + [k: string]: unknown +} + +export function isModEventAcknowledge(v: unknown): v is ModEventAcknowledge { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#modEventAcknowledge' + ) +} + +export function validateModEventAcknowledge(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#modEventAcknowledge', v) +} + +export interface ModEventEscalate { + comment?: string + [k: string]: unknown +} + +export function isModEventEscalate(v: unknown): v is ModEventEscalate { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#modEventEscalate' + ) +} + +export function validateModEventEscalate(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#modEventEscalate', v) +} + +/** Mute incoming reports on a subject */ +export interface ModEventMute { + comment?: string + /** Indicates how long the subject should remain muted. */ + durationInHours: number + [k: string]: unknown +} + +export function isModEventMute(v: unknown): v is ModEventMute { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#modEventMute' + ) +} + +export function validateModEventMute(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#modEventMute', v) +} + +/** Unmute action on a subject */ +export interface ModEventUnmute { + /** Describe reasoning behind the reversal. */ + comment?: string + [k: string]: unknown +} + +export function isModEventUnmute(v: unknown): v is ModEventUnmute { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#modEventUnmute' + ) +} + +export function validateModEventUnmute(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#modEventUnmute', v) +} + +/** Keep a log of outgoing email to a user */ +export interface ModEventEmail { + /** The subject line of the email sent to the user. */ + subjectLine: string + /** Additional comment about the outgoing comm. */ + comment?: string + [k: string]: unknown +} + +export function isModEventEmail(v: unknown): v is ModEventEmail { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.admin.defs#modEventEmail' + ) +} + +export function validateModEventEmail(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.admin.defs#modEventEmail', v) +} diff --git a/packages/ozone/src/lexicon/types/com/atproto/admin/deleteAccount.ts b/packages/ozone/src/lexicon/types/com/atproto/admin/deleteAccount.ts new file mode 100644 index 00000000000..13e68eb5c7d --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/admin/deleteAccount.ts @@ -0,0 +1,38 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + did: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/admin/disableAccountInvites.ts b/packages/ozone/src/lexicon/types/com/atproto/admin/disableAccountInvites.ts new file mode 100644 index 00000000000..62864923dfd --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/admin/disableAccountInvites.ts @@ -0,0 +1,40 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + account: string + /** Optional reason for disabled invites. */ + note?: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/admin/disableInviteCodes.ts b/packages/ozone/src/lexicon/types/com/atproto/admin/disableInviteCodes.ts new file mode 100644 index 00000000000..2b64371f1ed --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/admin/disableInviteCodes.ts @@ -0,0 +1,39 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + codes?: string[] + accounts?: string[] + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/admin/emitModerationEvent.ts b/packages/ozone/src/lexicon/types/com/atproto/admin/emitModerationEvent.ts new file mode 100644 index 00000000000..df44702b51c --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/admin/emitModerationEvent.ts @@ -0,0 +1,66 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as ComAtprotoAdminDefs from './defs' +import * as ComAtprotoRepoStrongRef from '../repo/strongRef' + +export interface QueryParams {} + +export interface InputSchema { + event: + | ComAtprotoAdminDefs.ModEventTakedown + | ComAtprotoAdminDefs.ModEventAcknowledge + | ComAtprotoAdminDefs.ModEventEscalate + | ComAtprotoAdminDefs.ModEventComment + | ComAtprotoAdminDefs.ModEventLabel + | ComAtprotoAdminDefs.ModEventReport + | ComAtprotoAdminDefs.ModEventMute + | ComAtprotoAdminDefs.ModEventReverseTakedown + | ComAtprotoAdminDefs.ModEventUnmute + | ComAtprotoAdminDefs.ModEventEmail + | { $type: string; [k: string]: unknown } + subject: + | ComAtprotoAdminDefs.RepoRef + | ComAtprotoRepoStrongRef.Main + | { $type: string; [k: string]: unknown } + subjectBlobCids?: string[] + createdBy: string + [k: string]: unknown +} + +export type OutputSchema = ComAtprotoAdminDefs.ModEventView + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: 'SubjectHasAction' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/admin/enableAccountInvites.ts b/packages/ozone/src/lexicon/types/com/atproto/admin/enableAccountInvites.ts new file mode 100644 index 00000000000..fb3aa8b8375 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/admin/enableAccountInvites.ts @@ -0,0 +1,40 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + account: string + /** Optional reason for enabled invites. */ + note?: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/admin/getAccountInfo.ts b/packages/ozone/src/lexicon/types/com/atproto/admin/getAccountInfo.ts new file mode 100644 index 00000000000..88a2b17a4b8 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/admin/getAccountInfo.ts @@ -0,0 +1,41 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as ComAtprotoAdminDefs from './defs' + +export interface QueryParams { + did: string +} + +export type InputSchema = undefined +export type OutputSchema = ComAtprotoAdminDefs.AccountView +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/admin/getAccountInfos.ts b/packages/ozone/src/lexicon/types/com/atproto/admin/getAccountInfos.ts new file mode 100644 index 00000000000..46d917293a8 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/admin/getAccountInfos.ts @@ -0,0 +1,46 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as ComAtprotoAdminDefs from './defs' + +export interface QueryParams { + dids: string[] +} + +export type InputSchema = undefined + +export interface OutputSchema { + infos: ComAtprotoAdminDefs.AccountView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/admin/getInviteCodes.ts b/packages/ozone/src/lexicon/types/com/atproto/admin/getInviteCodes.ts new file mode 100644 index 00000000000..1eb099aae66 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/admin/getInviteCodes.ts @@ -0,0 +1,49 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as ComAtprotoServerDefs from '../server/defs' + +export interface QueryParams { + sort: 'recent' | 'usage' | (string & {}) + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + codes: ComAtprotoServerDefs.InviteCode[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/admin/getModerationEvent.ts b/packages/ozone/src/lexicon/types/com/atproto/admin/getModerationEvent.ts new file mode 100644 index 00000000000..7de567a73db --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/admin/getModerationEvent.ts @@ -0,0 +1,41 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as ComAtprotoAdminDefs from './defs' + +export interface QueryParams { + id: number +} + +export type InputSchema = undefined +export type OutputSchema = ComAtprotoAdminDefs.ModEventViewDetail +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/admin/getRecord.ts b/packages/ozone/src/lexicon/types/com/atproto/admin/getRecord.ts new file mode 100644 index 00000000000..48222d9d819 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/admin/getRecord.ts @@ -0,0 +1,43 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as ComAtprotoAdminDefs from './defs' + +export interface QueryParams { + uri: string + cid?: string +} + +export type InputSchema = undefined +export type OutputSchema = ComAtprotoAdminDefs.RecordViewDetail +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: 'RecordNotFound' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/admin/getRepo.ts b/packages/ozone/src/lexicon/types/com/atproto/admin/getRepo.ts new file mode 100644 index 00000000000..19911baa90a --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/admin/getRepo.ts @@ -0,0 +1,42 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as ComAtprotoAdminDefs from './defs' + +export interface QueryParams { + did: string +} + +export type InputSchema = undefined +export type OutputSchema = ComAtprotoAdminDefs.RepoViewDetail +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: 'RepoNotFound' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/admin/getSubjectStatus.ts b/packages/ozone/src/lexicon/types/com/atproto/admin/getSubjectStatus.ts new file mode 100644 index 00000000000..7315e51e8c2 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/admin/getSubjectStatus.ts @@ -0,0 +1,54 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as ComAtprotoAdminDefs from './defs' +import * as ComAtprotoRepoStrongRef from '../repo/strongRef' + +export interface QueryParams { + did?: string + uri?: string + blob?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + subject: + | ComAtprotoAdminDefs.RepoRef + | ComAtprotoRepoStrongRef.Main + | ComAtprotoAdminDefs.RepoBlobRef + | { $type: string; [k: string]: unknown } + takedown?: ComAtprotoAdminDefs.StatusAttr + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/admin/queryModerationEvents.ts b/packages/ozone/src/lexicon/types/com/atproto/admin/queryModerationEvents.ts new file mode 100644 index 00000000000..f3c4f1fbb95 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/admin/queryModerationEvents.ts @@ -0,0 +1,56 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as ComAtprotoAdminDefs from './defs' + +export interface QueryParams { + /** The types of events (fully qualified string in the format of com.atproto.admin#modEvent) to filter by. If not specified, all events are returned. */ + types?: string[] + createdBy?: string + /** Sort direction for the events. Defaults to descending order of created at timestamp. */ + sortDirection: 'asc' | 'desc' + subject?: string + /** If true, events on all record types (posts, lists, profile etc.) owned by the did are returned */ + includeAllUserRecords: boolean + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + events: ComAtprotoAdminDefs.ModEventView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/admin/queryModerationStatuses.ts b/packages/ozone/src/lexicon/types/com/atproto/admin/queryModerationStatuses.ts new file mode 100644 index 00000000000..6e1aea1f679 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/admin/queryModerationStatuses.ts @@ -0,0 +1,72 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as ComAtprotoAdminDefs from './defs' + +export interface QueryParams { + subject?: string + /** Search subjects by keyword from comments */ + comment?: string + /** Search subjects reported after a given timestamp */ + reportedAfter?: string + /** Search subjects reported before a given timestamp */ + reportedBefore?: string + /** Search subjects reviewed after a given timestamp */ + reviewedAfter?: string + /** Search subjects reviewed before a given timestamp */ + reviewedBefore?: string + /** By default, we don't include muted subjects in the results. Set this to true to include them. */ + includeMuted?: boolean + /** Specify when fetching subjects in a certain state */ + reviewState?: string + ignoreSubjects?: string[] + /** Get all subject statuses that were reviewed by a specific moderator */ + lastReviewedBy?: string + sortField: 'lastReviewedAt' | 'lastReportedAt' + sortDirection: 'asc' | 'desc' + /** Get subjects that were taken down */ + takendown?: boolean + /** Get subjects in unresolved appealed status */ + appealed?: boolean + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + subjectStatuses: ComAtprotoAdminDefs.SubjectStatusView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/admin/searchRepos.ts b/packages/ozone/src/lexicon/types/com/atproto/admin/searchRepos.ts new file mode 100644 index 00000000000..1e7e1a36bb6 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/admin/searchRepos.ts @@ -0,0 +1,51 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as ComAtprotoAdminDefs from './defs' + +export interface QueryParams { + /** DEPRECATED: use 'q' instead */ + term?: string + q?: string + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + repos: ComAtprotoAdminDefs.RepoView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/admin/sendEmail.ts b/packages/ozone/src/lexicon/types/com/atproto/admin/sendEmail.ts new file mode 100644 index 00000000000..f94cfb3a083 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/admin/sendEmail.ts @@ -0,0 +1,54 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + recipientDid: string + content: string + subject?: string + senderDid: string + /** Additional comment by the sender that won't be used in the email itself but helpful to provide more context for moderators/reviewers */ + comment?: string + [k: string]: unknown +} + +export interface OutputSchema { + sent: boolean + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/admin/updateAccountEmail.ts b/packages/ozone/src/lexicon/types/com/atproto/admin/updateAccountEmail.ts new file mode 100644 index 00000000000..9e6140256ef --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/admin/updateAccountEmail.ts @@ -0,0 +1,40 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + /** The handle or DID of the repo. */ + account: string + email: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/admin/updateAccountHandle.ts b/packages/ozone/src/lexicon/types/com/atproto/admin/updateAccountHandle.ts new file mode 100644 index 00000000000..c378f421926 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/admin/updateAccountHandle.ts @@ -0,0 +1,39 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + did: string + handle: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/admin/updateSubjectStatus.ts b/packages/ozone/src/lexicon/types/com/atproto/admin/updateSubjectStatus.ts new file mode 100644 index 00000000000..559ee948380 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/admin/updateSubjectStatus.ts @@ -0,0 +1,61 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as ComAtprotoAdminDefs from './defs' +import * as ComAtprotoRepoStrongRef from '../repo/strongRef' + +export interface QueryParams {} + +export interface InputSchema { + subject: + | ComAtprotoAdminDefs.RepoRef + | ComAtprotoRepoStrongRef.Main + | ComAtprotoAdminDefs.RepoBlobRef + | { $type: string; [k: string]: unknown } + takedown?: ComAtprotoAdminDefs.StatusAttr + [k: string]: unknown +} + +export interface OutputSchema { + subject: + | ComAtprotoAdminDefs.RepoRef + | ComAtprotoRepoStrongRef.Main + | ComAtprotoAdminDefs.RepoBlobRef + | { $type: string; [k: string]: unknown } + takedown?: ComAtprotoAdminDefs.StatusAttr + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/identity/resolveHandle.ts b/packages/ozone/src/lexicon/types/com/atproto/identity/resolveHandle.ts new file mode 100644 index 00000000000..ef90e99bb30 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/identity/resolveHandle.ts @@ -0,0 +1,46 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams { + /** The handle to resolve. */ + handle: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + did: string + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/identity/updateHandle.ts b/packages/ozone/src/lexicon/types/com/atproto/identity/updateHandle.ts new file mode 100644 index 00000000000..1f639c344e9 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/identity/updateHandle.ts @@ -0,0 +1,38 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + handle: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/label/defs.ts b/packages/ozone/src/lexicon/types/com/atproto/label/defs.ts new file mode 100644 index 00000000000..7268650129a --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/label/defs.ts @@ -0,0 +1,73 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' + +/** Metadata tag on an atproto resource (eg, repo or record). */ +export interface Label { + /** DID of the actor who created this label. */ + src: string + /** AT URI of the record, repository (account), or other resource that this label applies to. */ + uri: string + /** Optionally, CID specifying the specific version of 'uri' resource this label applies to. */ + cid?: string + /** The short string name of the value or type of this label. */ + val: string + /** If true, this is a negation label, overwriting a previous label. */ + neg?: boolean + /** Timestamp when this label was created. */ + cts: string + [k: string]: unknown +} + +export function isLabel(v: unknown): v is Label { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.label.defs#label' + ) +} + +export function validateLabel(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.label.defs#label', v) +} + +/** Metadata tags on an atproto record, published by the author within the record. */ +export interface SelfLabels { + values: SelfLabel[] + [k: string]: unknown +} + +export function isSelfLabels(v: unknown): v is SelfLabels { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.label.defs#selfLabels' + ) +} + +export function validateSelfLabels(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.label.defs#selfLabels', v) +} + +/** Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel. */ +export interface SelfLabel { + /** The short string name of the value or type of this label. */ + val: string + [k: string]: unknown +} + +export function isSelfLabel(v: unknown): v is SelfLabel { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.label.defs#selfLabel' + ) +} + +export function validateSelfLabel(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.label.defs#selfLabel', v) +} diff --git a/packages/ozone/src/lexicon/types/com/atproto/label/queryLabels.ts b/packages/ozone/src/lexicon/types/com/atproto/label/queryLabels.ts new file mode 100644 index 00000000000..1d7f8a4def5 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/label/queryLabels.ts @@ -0,0 +1,52 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as ComAtprotoLabelDefs from './defs' + +export interface QueryParams { + /** List of AT URI patterns to match (boolean 'OR'). Each may be a prefix (ending with '*'; will match inclusive of the string leading to '*'), or a full URI. */ + uriPatterns: string[] + /** Optional list of label sources (DIDs) to filter on. */ + sources?: string[] + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + labels: ComAtprotoLabelDefs.Label[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/label/subscribeLabels.ts b/packages/ozone/src/lexicon/types/com/atproto/label/subscribeLabels.ts new file mode 100644 index 00000000000..9d4b4441ae0 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/label/subscribeLabels.ts @@ -0,0 +1,67 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth, ErrorFrame } from '@atproto/xrpc-server' +import { IncomingMessage } from 'http' +import * as ComAtprotoLabelDefs from './defs' + +export interface QueryParams { + /** The last known event to backfill from. */ + cursor?: number +} + +export type OutputSchema = + | Labels + | Info + | { $type: string; [k: string]: unknown } +export type HandlerError = ErrorFrame<'FutureCursor'> +export type HandlerOutput = HandlerError | OutputSchema +export type HandlerReqCtx = { + auth: HA + params: QueryParams + req: IncomingMessage + signal: AbortSignal +} +export type Handler = ( + ctx: HandlerReqCtx, +) => AsyncIterable + +export interface Labels { + seq: number + labels: ComAtprotoLabelDefs.Label[] + [k: string]: unknown +} + +export function isLabels(v: unknown): v is Labels { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.label.subscribeLabels#labels' + ) +} + +export function validateLabels(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.label.subscribeLabels#labels', v) +} + +export interface Info { + name: 'OutdatedCursor' | (string & {}) + message?: string + [k: string]: unknown +} + +export function isInfo(v: unknown): v is Info { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.label.subscribeLabels#info' + ) +} + +export function validateInfo(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.label.subscribeLabels#info', v) +} diff --git a/packages/ozone/src/lexicon/types/com/atproto/moderation/createReport.ts b/packages/ozone/src/lexicon/types/com/atproto/moderation/createReport.ts new file mode 100644 index 00000000000..96aaf4a9c29 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/moderation/createReport.ts @@ -0,0 +1,65 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as ComAtprotoModerationDefs from './defs' +import * as ComAtprotoAdminDefs from '../admin/defs' +import * as ComAtprotoRepoStrongRef from '../repo/strongRef' + +export interface QueryParams {} + +export interface InputSchema { + reasonType: ComAtprotoModerationDefs.ReasonType + reason?: string + subject: + | ComAtprotoAdminDefs.RepoRef + | ComAtprotoRepoStrongRef.Main + | { $type: string; [k: string]: unknown } + [k: string]: unknown +} + +export interface OutputSchema { + id: number + reasonType: ComAtprotoModerationDefs.ReasonType + reason?: string + subject: + | ComAtprotoAdminDefs.RepoRef + | ComAtprotoRepoStrongRef.Main + | { $type: string; [k: string]: unknown } + reportedBy: string + createdAt: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/moderation/defs.ts b/packages/ozone/src/lexicon/types/com/atproto/moderation/defs.ts new file mode 100644 index 00000000000..08e555c2422 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/moderation/defs.ts @@ -0,0 +1,32 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' + +export type ReasonType = + | 'com.atproto.moderation.defs#reasonSpam' + | 'com.atproto.moderation.defs#reasonViolation' + | 'com.atproto.moderation.defs#reasonMisleading' + | 'com.atproto.moderation.defs#reasonSexual' + | 'com.atproto.moderation.defs#reasonRude' + | 'com.atproto.moderation.defs#reasonOther' + | 'com.atproto.moderation.defs#reasonAppeal' + | (string & {}) + +/** Spam: frequent unwanted promotion, replies, mentions */ +export const REASONSPAM = 'com.atproto.moderation.defs#reasonSpam' +/** Direct violation of server rules, laws, terms of service */ +export const REASONVIOLATION = 'com.atproto.moderation.defs#reasonViolation' +/** Misleading identity, affiliation, or content */ +export const REASONMISLEADING = 'com.atproto.moderation.defs#reasonMisleading' +/** Unwanted or mislabeled sexual content */ +export const REASONSEXUAL = 'com.atproto.moderation.defs#reasonSexual' +/** Rude, harassing, explicit, or otherwise unwelcoming behavior */ +export const REASONRUDE = 'com.atproto.moderation.defs#reasonRude' +/** Other: reports not falling under another report category */ +export const REASONOTHER = 'com.atproto.moderation.defs#reasonOther' +/** Appeal: appeal a previously taken moderation action */ +export const REASONAPPEAL = 'com.atproto.moderation.defs#reasonAppeal' diff --git a/packages/ozone/src/lexicon/types/com/atproto/repo/applyWrites.ts b/packages/ozone/src/lexicon/types/com/atproto/repo/applyWrites.ts new file mode 100644 index 00000000000..61d1e7c28e4 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/repo/applyWrites.ts @@ -0,0 +1,103 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + /** The handle or DID of the repo. */ + repo: string + /** Flag for validating the records. */ + validate: boolean + writes: (Create | Update | Delete)[] + swapCommit?: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string + error?: 'InvalidSwap' +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput + +/** Create a new record. */ +export interface Create { + collection: string + rkey?: string + value: {} + [k: string]: unknown +} + +export function isCreate(v: unknown): v is Create { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.repo.applyWrites#create' + ) +} + +export function validateCreate(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.repo.applyWrites#create', v) +} + +/** Update an existing record. */ +export interface Update { + collection: string + rkey: string + value: {} + [k: string]: unknown +} + +export function isUpdate(v: unknown): v is Update { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.repo.applyWrites#update' + ) +} + +export function validateUpdate(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.repo.applyWrites#update', v) +} + +/** Delete an existing record. */ +export interface Delete { + collection: string + rkey: string + [k: string]: unknown +} + +export function isDelete(v: unknown): v is Delete { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.repo.applyWrites#delete' + ) +} + +export function validateDelete(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.repo.applyWrites#delete', v) +} diff --git a/packages/ozone/src/lexicon/types/com/atproto/repo/createRecord.ts b/packages/ozone/src/lexicon/types/com/atproto/repo/createRecord.ts new file mode 100644 index 00000000000..df8c5d9e600 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/repo/createRecord.ts @@ -0,0 +1,62 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + /** The handle or DID of the repo. */ + repo: string + /** The NSID of the record collection. */ + collection: string + /** The key of the record. */ + rkey?: string + /** Flag for validating the record. */ + validate: boolean + /** The record to create. */ + record: {} + /** Compare and swap with the previous commit by CID. */ + swapCommit?: string + [k: string]: unknown +} + +export interface OutputSchema { + uri: string + cid: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: 'InvalidSwap' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/repo/deleteRecord.ts b/packages/ozone/src/lexicon/types/com/atproto/repo/deleteRecord.ts new file mode 100644 index 00000000000..f45118a3769 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/repo/deleteRecord.ts @@ -0,0 +1,48 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + /** The handle or DID of the repo. */ + repo: string + /** The NSID of the record collection. */ + collection: string + /** The key of the record. */ + rkey: string + /** Compare and swap with the previous record by CID. */ + swapRecord?: string + /** Compare and swap with the previous commit by CID. */ + swapCommit?: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string + error?: 'InvalidSwap' +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/repo/describeRepo.ts b/packages/ozone/src/lexicon/types/com/atproto/repo/describeRepo.ts new file mode 100644 index 00000000000..7b8a2b995eb --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/repo/describeRepo.ts @@ -0,0 +1,50 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams { + /** The handle or DID of the repo. */ + repo: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + handle: string + did: string + didDoc: {} + collections: string[] + handleIsCorrect: boolean + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/repo/getRecord.ts b/packages/ozone/src/lexicon/types/com/atproto/repo/getRecord.ts new file mode 100644 index 00000000000..35c9b4b7166 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/repo/getRecord.ts @@ -0,0 +1,54 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams { + /** The handle or DID of the repo. */ + repo: string + /** The NSID of the record collection. */ + collection: string + /** The key of the record. */ + rkey: string + /** The CID of the version of the record. If not specified, then return the most recent version. */ + cid?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + uri: string + cid?: string + value: {} + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/repo/listRecords.ts b/packages/ozone/src/lexicon/types/com/atproto/repo/listRecords.ts new file mode 100644 index 00000000000..a6cf6abd1f3 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/repo/listRecords.ts @@ -0,0 +1,77 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams { + /** The handle or DID of the repo. */ + repo: string + /** The NSID of the record type. */ + collection: string + /** The number of records to return. */ + limit: number + cursor?: string + /** DEPRECATED: The lowest sort-ordered rkey to start from (exclusive) */ + rkeyStart?: string + /** DEPRECATED: The highest sort-ordered rkey to stop at (exclusive) */ + rkeyEnd?: string + /** Flag to reverse the order of the returned records. */ + reverse?: boolean +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + records: Record[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput + +export interface Record { + uri: string + cid: string + value: {} + [k: string]: unknown +} + +export function isRecord(v: unknown): v is Record { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.repo.listRecords#record' + ) +} + +export function validateRecord(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.repo.listRecords#record', v) +} diff --git a/packages/ozone/src/lexicon/types/com/atproto/repo/putRecord.ts b/packages/ozone/src/lexicon/types/com/atproto/repo/putRecord.ts new file mode 100644 index 00000000000..f10f773c1c4 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/repo/putRecord.ts @@ -0,0 +1,64 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + /** The handle or DID of the repo. */ + repo: string + /** The NSID of the record collection. */ + collection: string + /** The key of the record. */ + rkey: string + /** Flag for validating the record. */ + validate: boolean + /** The record to write. */ + record: {} + /** Compare and swap with the previous record by CID. */ + swapRecord?: string | null + /** Compare and swap with the previous commit by CID. */ + swapCommit?: string + [k: string]: unknown +} + +export interface OutputSchema { + uri: string + cid: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: 'InvalidSwap' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/repo/strongRef.ts b/packages/ozone/src/lexicon/types/com/atproto/repo/strongRef.ts new file mode 100644 index 00000000000..8b21a6ddf81 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/repo/strongRef.ts @@ -0,0 +1,26 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' + +export interface Main { + uri: string + cid: string + [k: string]: unknown +} + +export function isMain(v: unknown): v is Main { + return ( + isObj(v) && + hasProp(v, '$type') && + (v.$type === 'com.atproto.repo.strongRef#main' || + v.$type === 'com.atproto.repo.strongRef') + ) +} + +export function validateMain(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.repo.strongRef#main', v) +} diff --git a/packages/ozone/src/lexicon/types/com/atproto/repo/uploadBlob.ts b/packages/ozone/src/lexicon/types/com/atproto/repo/uploadBlob.ts new file mode 100644 index 00000000000..ad6002df925 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/repo/uploadBlob.ts @@ -0,0 +1,47 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import stream from 'stream' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export type InputSchema = string | Uint8Array + +export interface OutputSchema { + blob: BlobRef + [k: string]: unknown +} + +export interface HandlerInput { + encoding: '*/*' + body: stream.Readable +} + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/server/confirmEmail.ts b/packages/ozone/src/lexicon/types/com/atproto/server/confirmEmail.ts new file mode 100644 index 00000000000..ffaeeb8fe75 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/server/confirmEmail.ts @@ -0,0 +1,40 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + email: string + token: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string + error?: 'AccountNotFound' | 'ExpiredToken' | 'InvalidToken' | 'InvalidEmail' +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/server/createAccount.ts b/packages/ozone/src/lexicon/types/com/atproto/server/createAccount.ts new file mode 100644 index 00000000000..109d34cf202 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/server/createAccount.ts @@ -0,0 +1,67 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + email?: string + handle: string + did?: string + inviteCode?: string + password?: string + recoveryKey?: string + plcOp?: {} + [k: string]: unknown +} + +export interface OutputSchema { + accessJwt: string + refreshJwt: string + handle: string + did: string + didDoc?: {} + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: + | 'InvalidHandle' + | 'InvalidPassword' + | 'InvalidInviteCode' + | 'HandleNotAvailable' + | 'UnsupportedDomain' + | 'UnresolvableDid' + | 'IncompatibleDidDoc' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/server/createAppPassword.ts b/packages/ozone/src/lexicon/types/com/atproto/server/createAppPassword.ts new file mode 100644 index 00000000000..8e4a0a519e0 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/server/createAppPassword.ts @@ -0,0 +1,69 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + name: string + [k: string]: unknown +} + +export type OutputSchema = AppPassword + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: 'AccountTakedown' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput + +export interface AppPassword { + name: string + password: string + createdAt: string + [k: string]: unknown +} + +export function isAppPassword(v: unknown): v is AppPassword { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.server.createAppPassword#appPassword' + ) +} + +export function validateAppPassword(v: unknown): ValidationResult { + return lexicons.validate( + 'com.atproto.server.createAppPassword#appPassword', + v, + ) +} diff --git a/packages/ozone/src/lexicon/types/com/atproto/server/createInviteCode.ts b/packages/ozone/src/lexicon/types/com/atproto/server/createInviteCode.ts new file mode 100644 index 00000000000..acfac56ba76 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/server/createInviteCode.ts @@ -0,0 +1,50 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + useCount: number + forAccount?: string + [k: string]: unknown +} + +export interface OutputSchema { + code: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/server/createInviteCodes.ts b/packages/ozone/src/lexicon/types/com/atproto/server/createInviteCodes.ts new file mode 100644 index 00000000000..5887d77fada --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/server/createInviteCodes.ts @@ -0,0 +1,72 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + codeCount: number + useCount: number + forAccounts?: string[] + [k: string]: unknown +} + +export interface OutputSchema { + codes: AccountCodes[] + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput + +export interface AccountCodes { + account: string + codes: string[] + [k: string]: unknown +} + +export function isAccountCodes(v: unknown): v is AccountCodes { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.server.createInviteCodes#accountCodes' + ) +} + +export function validateAccountCodes(v: unknown): ValidationResult { + return lexicons.validate( + 'com.atproto.server.createInviteCodes#accountCodes', + v, + ) +} diff --git a/packages/ozone/src/lexicon/types/com/atproto/server/createSession.ts b/packages/ozone/src/lexicon/types/com/atproto/server/createSession.ts new file mode 100644 index 00000000000..2cd448703a6 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/server/createSession.ts @@ -0,0 +1,58 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + /** Handle or other identifier supported by the server for the authenticating user. */ + identifier: string + password: string + [k: string]: unknown +} + +export interface OutputSchema { + accessJwt: string + refreshJwt: string + handle: string + did: string + didDoc?: {} + email?: string + emailConfirmed?: boolean + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: 'AccountTakedown' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/server/defs.ts b/packages/ozone/src/lexicon/types/com/atproto/server/defs.ts new file mode 100644 index 00000000000..9bd67c9d7a5 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/server/defs.ts @@ -0,0 +1,48 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' + +export interface InviteCode { + code: string + available: number + disabled: boolean + forAccount: string + createdBy: string + createdAt: string + uses: InviteCodeUse[] + [k: string]: unknown +} + +export function isInviteCode(v: unknown): v is InviteCode { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.server.defs#inviteCode' + ) +} + +export function validateInviteCode(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.server.defs#inviteCode', v) +} + +export interface InviteCodeUse { + usedBy: string + usedAt: string + [k: string]: unknown +} + +export function isInviteCodeUse(v: unknown): v is InviteCodeUse { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.server.defs#inviteCodeUse' + ) +} + +export function validateInviteCodeUse(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.server.defs#inviteCodeUse', v) +} diff --git a/packages/ozone/src/lexicon/types/com/atproto/server/deleteAccount.ts b/packages/ozone/src/lexicon/types/com/atproto/server/deleteAccount.ts new file mode 100644 index 00000000000..37ddbba13e0 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/server/deleteAccount.ts @@ -0,0 +1,41 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + did: string + password: string + token: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string + error?: 'ExpiredToken' | 'InvalidToken' +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/server/deleteSession.ts b/packages/ozone/src/lexicon/types/com/atproto/server/deleteSession.ts new file mode 100644 index 00000000000..e4244870425 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/server/deleteSession.ts @@ -0,0 +1,31 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export type InputSchema = undefined +export type HandlerInput = undefined + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/server/describeServer.ts b/packages/ozone/src/lexicon/types/com/atproto/server/describeServer.ts new file mode 100644 index 00000000000..bc73d541a04 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/server/describeServer.ts @@ -0,0 +1,63 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export type InputSchema = undefined + +export interface OutputSchema { + inviteCodeRequired?: boolean + availableUserDomains: string[] + links?: Links + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput + +export interface Links { + privacyPolicy?: string + termsOfService?: string + [k: string]: unknown +} + +export function isLinks(v: unknown): v is Links { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.server.describeServer#links' + ) +} + +export function validateLinks(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.server.describeServer#links', v) +} diff --git a/packages/ozone/src/lexicon/types/com/atproto/server/getAccountInviteCodes.ts b/packages/ozone/src/lexicon/types/com/atproto/server/getAccountInviteCodes.ts new file mode 100644 index 00000000000..e387a5e38e4 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/server/getAccountInviteCodes.ts @@ -0,0 +1,48 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as ComAtprotoServerDefs from './defs' + +export interface QueryParams { + includeUsed: boolean + createAvailable: boolean +} + +export type InputSchema = undefined + +export interface OutputSchema { + codes: ComAtprotoServerDefs.InviteCode[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: 'DuplicateCreate' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/server/getSession.ts b/packages/ozone/src/lexicon/types/com/atproto/server/getSession.ts new file mode 100644 index 00000000000..4f95acf523d --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/server/getSession.ts @@ -0,0 +1,47 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export type InputSchema = undefined + +export interface OutputSchema { + handle: string + did: string + email?: string + emailConfirmed?: boolean + didDoc?: {} + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/server/listAppPasswords.ts b/packages/ozone/src/lexicon/types/com/atproto/server/listAppPasswords.ts new file mode 100644 index 00000000000..ebd74da9d39 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/server/listAppPasswords.ts @@ -0,0 +1,62 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export type InputSchema = undefined + +export interface OutputSchema { + passwords: AppPassword[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: 'AccountTakedown' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput + +export interface AppPassword { + name: string + createdAt: string + [k: string]: unknown +} + +export function isAppPassword(v: unknown): v is AppPassword { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.server.listAppPasswords#appPassword' + ) +} + +export function validateAppPassword(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.server.listAppPasswords#appPassword', v) +} diff --git a/packages/ozone/src/lexicon/types/com/atproto/server/refreshSession.ts b/packages/ozone/src/lexicon/types/com/atproto/server/refreshSession.ts new file mode 100644 index 00000000000..35874f78a69 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/server/refreshSession.ts @@ -0,0 +1,48 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export type InputSchema = undefined + +export interface OutputSchema { + accessJwt: string + refreshJwt: string + handle: string + did: string + didDoc?: {} + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: 'AccountTakedown' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/server/requestAccountDelete.ts b/packages/ozone/src/lexicon/types/com/atproto/server/requestAccountDelete.ts new file mode 100644 index 00000000000..e4244870425 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/server/requestAccountDelete.ts @@ -0,0 +1,31 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export type InputSchema = undefined +export type HandlerInput = undefined + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/server/requestEmailConfirmation.ts b/packages/ozone/src/lexicon/types/com/atproto/server/requestEmailConfirmation.ts new file mode 100644 index 00000000000..e4244870425 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/server/requestEmailConfirmation.ts @@ -0,0 +1,31 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export type InputSchema = undefined +export type HandlerInput = undefined + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/server/requestEmailUpdate.ts b/packages/ozone/src/lexicon/types/com/atproto/server/requestEmailUpdate.ts new file mode 100644 index 00000000000..6876d44ca46 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/server/requestEmailUpdate.ts @@ -0,0 +1,43 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export type InputSchema = undefined + +export interface OutputSchema { + tokenRequired: boolean + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/server/requestPasswordReset.ts b/packages/ozone/src/lexicon/types/com/atproto/server/requestPasswordReset.ts new file mode 100644 index 00000000000..47fb4bb62f3 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/server/requestPasswordReset.ts @@ -0,0 +1,38 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + email: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/server/reserveSigningKey.ts b/packages/ozone/src/lexicon/types/com/atproto/server/reserveSigningKey.ts new file mode 100644 index 00000000000..ad5a5a8758c --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/server/reserveSigningKey.ts @@ -0,0 +1,51 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + /** The did to reserve a new did:key for */ + did?: string + [k: string]: unknown +} + +export interface OutputSchema { + /** Public signing key in the form of a did:key. */ + signingKey: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/server/resetPassword.ts b/packages/ozone/src/lexicon/types/com/atproto/server/resetPassword.ts new file mode 100644 index 00000000000..9e6ece3e4c4 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/server/resetPassword.ts @@ -0,0 +1,40 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + token: string + password: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string + error?: 'ExpiredToken' | 'InvalidToken' +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/server/revokeAppPassword.ts b/packages/ozone/src/lexicon/types/com/atproto/server/revokeAppPassword.ts new file mode 100644 index 00000000000..4627f68eaa2 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/server/revokeAppPassword.ts @@ -0,0 +1,38 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + name: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/server/updateEmail.ts b/packages/ozone/src/lexicon/types/com/atproto/server/updateEmail.ts new file mode 100644 index 00000000000..c88bd3021b2 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/server/updateEmail.ts @@ -0,0 +1,41 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + email: string + /** Requires a token from com.atproto.sever.requestEmailUpdate if the account's email has been confirmed. */ + token?: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string + error?: 'ExpiredToken' | 'InvalidToken' | 'TokenRequired' +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/sync/getBlob.ts b/packages/ozone/src/lexicon/types/com/atproto/sync/getBlob.ts new file mode 100644 index 00000000000..60750902472 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/sync/getBlob.ts @@ -0,0 +1,43 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import stream from 'stream' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams { + /** The DID of the repo. */ + did: string + /** The CID of the blob to fetch */ + cid: string +} + +export type InputSchema = undefined +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: '*/*' + body: Uint8Array | stream.Readable + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/sync/getBlocks.ts b/packages/ozone/src/lexicon/types/com/atproto/sync/getBlocks.ts new file mode 100644 index 00000000000..e73410efb41 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/sync/getBlocks.ts @@ -0,0 +1,42 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import stream from 'stream' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams { + /** The DID of the repo. */ + did: string + cids: string[] +} + +export type InputSchema = undefined +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/vnd.ipld.car' + body: Uint8Array | stream.Readable + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/sync/getCheckout.ts b/packages/ozone/src/lexicon/types/com/atproto/sync/getCheckout.ts new file mode 100644 index 00000000000..63a657e56b9 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/sync/getCheckout.ts @@ -0,0 +1,41 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import stream from 'stream' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams { + /** The DID of the repo. */ + did: string +} + +export type InputSchema = undefined +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/vnd.ipld.car' + body: Uint8Array | stream.Readable + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/sync/getHead.ts b/packages/ozone/src/lexicon/types/com/atproto/sync/getHead.ts new file mode 100644 index 00000000000..586ae1a4189 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/sync/getHead.ts @@ -0,0 +1,47 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams { + /** The DID of the repo. */ + did: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + root: string + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: 'HeadNotFound' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/sync/getLatestCommit.ts b/packages/ozone/src/lexicon/types/com/atproto/sync/getLatestCommit.ts new file mode 100644 index 00000000000..9b91e878724 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/sync/getLatestCommit.ts @@ -0,0 +1,48 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams { + /** The DID of the repo. */ + did: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cid: string + rev: string + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: 'RepoNotFound' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/sync/getRecord.ts b/packages/ozone/src/lexicon/types/com/atproto/sync/getRecord.ts new file mode 100644 index 00000000000..297f0ac7794 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/sync/getRecord.ts @@ -0,0 +1,45 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import stream from 'stream' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams { + /** The DID of the repo. */ + did: string + collection: string + rkey: string + /** An optional past commit CID. */ + commit?: string +} + +export type InputSchema = undefined +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/vnd.ipld.car' + body: Uint8Array | stream.Readable + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/sync/getRepo.ts b/packages/ozone/src/lexicon/types/com/atproto/sync/getRepo.ts new file mode 100644 index 00000000000..495d31a1a22 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/sync/getRepo.ts @@ -0,0 +1,43 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import stream from 'stream' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams { + /** The DID of the repo. */ + did: string + /** The revision of the repo to catch up from. */ + since?: string +} + +export type InputSchema = undefined +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/vnd.ipld.car' + body: Uint8Array | stream.Readable + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/sync/listBlobs.ts b/packages/ozone/src/lexicon/types/com/atproto/sync/listBlobs.ts new file mode 100644 index 00000000000..b397bb3b3df --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/sync/listBlobs.ts @@ -0,0 +1,51 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams { + /** The DID of the repo. */ + did: string + /** Optional revision of the repo to list blobs since. */ + since?: string + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + cids: string[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/sync/listRepos.ts b/packages/ozone/src/lexicon/types/com/atproto/sync/listRepos.ts new file mode 100644 index 00000000000..783a8e314c2 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/sync/listRepos.ts @@ -0,0 +1,66 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams { + limit: number + cursor?: string +} + +export type InputSchema = undefined + +export interface OutputSchema { + cursor?: string + repos: Repo[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput + +export interface Repo { + did: string + head: string + rev: string + [k: string]: unknown +} + +export function isRepo(v: unknown): v is Repo { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.sync.listRepos#repo' + ) +} + +export function validateRepo(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.sync.listRepos#repo', v) +} diff --git a/packages/ozone/src/lexicon/types/com/atproto/sync/notifyOfUpdate.ts b/packages/ozone/src/lexicon/types/com/atproto/sync/notifyOfUpdate.ts new file mode 100644 index 00000000000..3d310c1139a --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/sync/notifyOfUpdate.ts @@ -0,0 +1,39 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + /** Hostname of the service that is notifying of update. */ + hostname: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/sync/requestCrawl.ts b/packages/ozone/src/lexicon/types/com/atproto/sync/requestCrawl.ts new file mode 100644 index 00000000000..87ef20d7297 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/sync/requestCrawl.ts @@ -0,0 +1,39 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + /** Hostname of the service that is requesting to be crawled. */ + hostname: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/sync/subscribeRepos.ts b/packages/ozone/src/lexicon/types/com/atproto/sync/subscribeRepos.ts new file mode 100644 index 00000000000..fb334778bf6 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/sync/subscribeRepos.ts @@ -0,0 +1,161 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth, ErrorFrame } from '@atproto/xrpc-server' +import { IncomingMessage } from 'http' + +export interface QueryParams { + /** The last known event to backfill from. */ + cursor?: number +} + +export type OutputSchema = + | Commit + | Handle + | Migrate + | Tombstone + | Info + | { $type: string; [k: string]: unknown } +export type HandlerError = ErrorFrame<'FutureCursor' | 'ConsumerTooSlow'> +export type HandlerOutput = HandlerError | OutputSchema +export type HandlerReqCtx = { + auth: HA + params: QueryParams + req: IncomingMessage + signal: AbortSignal +} +export type Handler = ( + ctx: HandlerReqCtx, +) => AsyncIterable + +export interface Commit { + seq: number + rebase: boolean + tooBig: boolean + repo: string + commit: CID + prev?: CID | null + /** The rev of the emitted commit. */ + rev: string + /** The rev of the last emitted commit from this repo. */ + since: string | null + /** CAR file containing relevant blocks. */ + blocks: Uint8Array + ops: RepoOp[] + blobs: CID[] + time: string + [k: string]: unknown +} + +export function isCommit(v: unknown): v is Commit { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.sync.subscribeRepos#commit' + ) +} + +export function validateCommit(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.sync.subscribeRepos#commit', v) +} + +export interface Handle { + seq: number + did: string + handle: string + time: string + [k: string]: unknown +} + +export function isHandle(v: unknown): v is Handle { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.sync.subscribeRepos#handle' + ) +} + +export function validateHandle(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.sync.subscribeRepos#handle', v) +} + +export interface Migrate { + seq: number + did: string + migrateTo: string | null + time: string + [k: string]: unknown +} + +export function isMigrate(v: unknown): v is Migrate { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.sync.subscribeRepos#migrate' + ) +} + +export function validateMigrate(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.sync.subscribeRepos#migrate', v) +} + +export interface Tombstone { + seq: number + did: string + time: string + [k: string]: unknown +} + +export function isTombstone(v: unknown): v is Tombstone { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.sync.subscribeRepos#tombstone' + ) +} + +export function validateTombstone(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.sync.subscribeRepos#tombstone', v) +} + +export interface Info { + name: 'OutdatedCursor' | (string & {}) + message?: string + [k: string]: unknown +} + +export function isInfo(v: unknown): v is Info { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.sync.subscribeRepos#info' + ) +} + +export function validateInfo(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.sync.subscribeRepos#info', v) +} + +/** A repo operation, ie a write of a single record. For creates and updates, CID is the record's CID as of this operation. For deletes, it's null. */ +export interface RepoOp { + action: 'create' | 'update' | 'delete' | (string & {}) + path: string + cid: CID | null + [k: string]: unknown +} + +export function isRepoOp(v: unknown): v is RepoOp { + return ( + isObj(v) && + hasProp(v, '$type') && + v.$type === 'com.atproto.sync.subscribeRepos#repoOp' + ) +} + +export function validateRepoOp(v: unknown): ValidationResult { + return lexicons.validate('com.atproto.sync.subscribeRepos#repoOp', v) +} diff --git a/packages/ozone/src/lexicon/types/com/atproto/temp/fetchLabels.ts b/packages/ozone/src/lexicon/types/com/atproto/temp/fetchLabels.ts new file mode 100644 index 00000000000..39341fd3a0e --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/temp/fetchLabels.ts @@ -0,0 +1,47 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as ComAtprotoLabelDefs from '../label/defs' + +export interface QueryParams { + since?: number + limit: number +} + +export type InputSchema = undefined + +export interface OutputSchema { + labels: ComAtprotoLabelDefs.Label[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/temp/importRepo.ts b/packages/ozone/src/lexicon/types/com/atproto/temp/importRepo.ts new file mode 100644 index 00000000000..d88361d9856 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/temp/importRepo.ts @@ -0,0 +1,45 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import stream from 'stream' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams { + /** The DID of the repo. */ + did: string +} + +export type InputSchema = string | Uint8Array + +export interface HandlerInput { + encoding: 'application/vnd.ipld.car' + body: stream.Readable +} + +export interface HandlerSuccess { + encoding: 'text/plain' + body: Uint8Array | stream.Readable + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/temp/pushBlob.ts b/packages/ozone/src/lexicon/types/com/atproto/temp/pushBlob.ts new file mode 100644 index 00000000000..97e890dbb14 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/temp/pushBlob.ts @@ -0,0 +1,39 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import stream from 'stream' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams { + /** The DID of the repo. */ + did: string +} + +export type InputSchema = string | Uint8Array + +export interface HandlerInput { + encoding: '*/*' + body: stream.Readable +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | void +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/types/com/atproto/temp/transferAccount.ts b/packages/ozone/src/lexicon/types/com/atproto/temp/transferAccount.ts new file mode 100644 index 00000000000..86c1d750e07 --- /dev/null +++ b/packages/ozone/src/lexicon/types/com/atproto/temp/transferAccount.ts @@ -0,0 +1,62 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' + +export interface QueryParams {} + +export interface InputSchema { + handle: string + did: string + plcOp: {} + [k: string]: unknown +} + +export interface OutputSchema { + accessJwt: string + refreshJwt: string + handle: string + did: string + [k: string]: unknown +} + +export interface HandlerInput { + encoding: 'application/json' + body: InputSchema +} + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string + error?: + | 'InvalidHandle' + | 'InvalidPassword' + | 'InvalidInviteCode' + | 'HandleNotAvailable' + | 'UnsupportedDomain' + | 'UnresolvableDid' + | 'IncompatibleDidDoc' +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/ozone/src/lexicon/util.ts b/packages/ozone/src/lexicon/util.ts new file mode 100644 index 00000000000..d7e70440d6e --- /dev/null +++ b/packages/ozone/src/lexicon/util.ts @@ -0,0 +1,13 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +export function isObj(v: unknown): v is Record { + return typeof v === 'object' && v !== null +} + +export function hasProp( + data: object, + prop: K, +): data is Record { + return prop in data +} diff --git a/packages/ozone/src/logger.ts b/packages/ozone/src/logger.ts new file mode 100644 index 00000000000..42b0a78b2a4 --- /dev/null +++ b/packages/ozone/src/logger.ts @@ -0,0 +1,19 @@ +import pinoHttp from 'pino-http' +import { subsystemLogger } from '@atproto/common' + +export const dbLogger: ReturnType = + subsystemLogger('ozone:db') +export const httpLogger: ReturnType = + subsystemLogger('ozone') + +export const loggerMiddleware = pinoHttp({ + logger: httpLogger, + serializers: { + err: (err) => { + return { + code: err?.code, + message: err?.message, + } + }, + }, +}) diff --git a/packages/ozone/src/mod-service/index.ts b/packages/ozone/src/mod-service/index.ts new file mode 100644 index 00000000000..4c1c84e55dc --- /dev/null +++ b/packages/ozone/src/mod-service/index.ts @@ -0,0 +1,758 @@ +import { CID } from 'multiformats/cid' +import { AtUri, INVALID_HANDLE } from '@atproto/syntax' +import { InvalidRequestError } from '@atproto/xrpc-server' +import { addHoursToDate } from '@atproto/common' +import { Database } from '../db' +import { AppviewAuth, ModerationViews } from './views' +import { Main as StrongRef } from '../lexicon/types/com/atproto/repo/strongRef' +import { + isModEventComment, + isModEventLabel, + isModEventMute, + isModEventReport, + isModEventTakedown, + isModEventEmail, + RepoRef, + RepoBlobRef, +} from '../lexicon/types/com/atproto/admin/defs' +import { + adjustModerationSubjectStatus, + getStatusIdentifierFromSubject, +} from './status' +import { + ModEventType, + ModerationEventRow, + ModerationSubjectStatusRow, + ReversibleModerationEvent, +} from './types' +import { ModerationEvent } from '../db/schema/moderation_event' +import { StatusKeyset, TimeIdKeyset, paginate } from '../db/pagination' +import AtpAgent from '@atproto/api' +import { Label } from '../lexicon/types/com/atproto/label/defs' +import { Insertable, sql } from 'kysely' +import { + ModSubject, + RecordSubject, + RepoSubject, + subjectFromStatusRow, +} from './subject' +import { BlobPushEvent } from '../db/schema/blob_push_event' +import { BackgroundQueue } from '../background' +import { EventPusher } from '../daemon' + +export type ModerationServiceCreator = (db: Database) => ModerationService + +export class ModerationService { + constructor( + public db: Database, + public backgroundQueue: BackgroundQueue, + public eventPusher: EventPusher, + public appviewAgent: AtpAgent, + private appviewAuth: AppviewAuth, + ) {} + + static creator( + backgroundQueue: BackgroundQueue, + eventPusher: EventPusher, + appviewAgent: AtpAgent, + appviewAuth: AppviewAuth, + ) { + return (db: Database) => + new ModerationService( + db, + backgroundQueue, + eventPusher, + appviewAgent, + appviewAuth, + ) + } + + views = new ModerationViews(this.db, this.appviewAgent, this.appviewAuth) + + async getEvent(id: number): Promise { + return await this.db.db + .selectFrom('moderation_event') + .selectAll() + .where('id', '=', id) + .executeTakeFirst() + } + + async getEventOrThrow(id: number): Promise { + const event = await this.getEvent(id) + if (!event) throw new InvalidRequestError('Moderation event not found') + return event + } + + async getEvents(opts: { + subject?: string + createdBy?: string + limit: number + cursor?: string + includeAllUserRecords: boolean + types: ModerationEvent['action'][] + sortDirection?: 'asc' | 'desc' + }): Promise<{ cursor?: string; events: ModerationEventRow[] }> { + const { + subject, + createdBy, + limit, + cursor, + includeAllUserRecords, + sortDirection = 'desc', + types, + } = opts + let builder = this.db.db.selectFrom('moderation_event').selectAll() + if (subject) { + builder = builder.where((qb) => { + if (includeAllUserRecords) { + // If subject is an at-uri, we need to extract the DID from the at-uri + // otherwise, subject is probably a DID already + if (subject.startsWith('at://')) { + const uri = new AtUri(subject) + return qb.where('subjectDid', '=', uri.hostname) + } + return qb.where('subjectDid', '=', subject) + } + return qb + .where((subQb) => + subQb + .where('subjectDid', '=', subject) + .where('subjectUri', 'is', null), + ) + .orWhere('subjectUri', '=', subject) + }) + } + if (types.length) { + builder = builder.where((qb) => { + if (types.length === 1) { + return qb.where('action', '=', types[0]) + } + + return qb.where('action', 'in', types) + }) + } + if (createdBy) { + builder = builder.where('createdBy', '=', createdBy) + } + + const { ref } = this.db.db.dynamic + const keyset = new TimeIdKeyset( + ref(`moderation_event.createdAt`), + ref('moderation_event.id'), + ) + const paginatedBuilder = paginate(builder, { + limit, + cursor, + keyset, + direction: sortDirection, + tryIndex: true, + }) + + const result = await paginatedBuilder.execute() + + const infos = await this.views.getAccoutInfosByDid([ + ...result.map((row) => row.subjectDid), + ...result.map((row) => row.createdBy), + ]) + + const resultWithHandles = result.map((r) => ({ + ...r, + creatorHandle: infos.get(r.createdBy)?.handle, + subjectHandle: infos.get(r.subjectDid)?.handle, + })) + + return { cursor: keyset.packFromResult(result), events: resultWithHandles } + } + + async getReport(id: number): Promise { + return await this.db.db + .selectFrom('moderation_event') + .where('action', '=', 'com.atproto.admin.defs#modEventReport') + .selectAll() + .where('id', '=', id) + .executeTakeFirst() + } + + async getCurrentStatus( + subject: { did: string } | { uri: AtUri } | { cids: CID[] }, + ) { + let builder = this.db.db.selectFrom('moderation_subject_status').selectAll() + if ('did' in subject) { + builder = builder.where('did', '=', subject.did) + } else if ('uri' in subject) { + builder = builder.where('recordPath', '=', subject.uri.toString()) + } + // TODO: Handle the cid status + return await builder.execute() + } + + async logEvent(info: { + event: ModEventType + subject: ModSubject + createdBy: string + createdAt?: Date + }): Promise { + this.db.assertTransaction() + const { event, subject, createdBy, createdAt = new Date() } = info + + const createLabelVals = + isModEventLabel(event) && event.createLabelVals.length > 0 + ? event.createLabelVals.join(' ') + : undefined + const negateLabelVals = + isModEventLabel(event) && event.negateLabelVals.length > 0 + ? event.negateLabelVals.join(' ') + : undefined + + const meta: Record = {} + + if (isModEventReport(event)) { + meta.reportType = event.reportType + } + + if (isModEventComment(event) && event.sticky) { + meta.sticky = event.sticky + } + + if (isModEventEmail(event)) { + meta.subjectLine = event.subjectLine + } + + const modEvent = await this.db.db + .insertInto('moderation_event') + .values({ + comment: event.comment ? `${event.comment}` : null, + action: event.$type as ModerationEvent['action'], + createdAt: createdAt.toISOString(), + createdBy, + createLabelVals, + negateLabelVals, + durationInHours: event.durationInHours + ? Number(event.durationInHours) + : null, + meta, + expiresAt: + (isModEventTakedown(event) || isModEventMute(event)) && + event.durationInHours + ? addHoursToDate(event.durationInHours, createdAt).toISOString() + : undefined, + ...subject.info(), + }) + .returningAll() + .executeTakeFirstOrThrow() + + await adjustModerationSubjectStatus(this.db, modEvent, subject.blobCids) + + return modEvent + } + + async getLastReversibleEventForSubject(subject: ReversalSubject) { + // If the subject is neither suspended nor muted don't bother finding the last reversible event + // Ideally, this should never happen because the caller of this method should only call this + // after ensuring that the suspended or muted subjects are being reversed + if (!subject.reverseMute && !subject.reverseSuspend) { + return null + } + + let builder = this.db.db + .selectFrom('moderation_event') + .where('subjectDid', '=', subject.subject.did) + + if (subject.subject.recordPath) { + builder = builder.where( + 'subjectUri', + 'like', + `%${subject.subject.recordPath}%`, + ) + } + + // Means the subject was suspended and needs to be unsuspended + if (subject.reverseSuspend) { + builder = builder + .where('action', '=', 'com.atproto.admin.defs#modEventTakedown') + .where('durationInHours', 'is not', null) + } + if (subject.reverseMute) { + builder = builder + .where('action', '=', 'com.atproto.admin.defs#modEventMute') + .where('durationInHours', 'is not', null) + } + + return await builder + .orderBy('id', 'desc') + .selectAll() + .limit(1) + .executeTakeFirst() + } + + async getSubjectsDueForReversal(): Promise { + const now = new Date().toISOString() + const subjects = await this.db.db + .selectFrom('moderation_subject_status') + .where('suspendUntil', '<', now) + .orWhere('muteUntil', '<', now) + .selectAll() + .execute() + + return subjects.map((row) => ({ + subject: subjectFromStatusRow(row), + reverseSuspend: !!row.suspendUntil && row.suspendUntil < now, + reverseMute: !!row.muteUntil && row.muteUntil < now, + })) + } + + async isSubjectSuspended(did: string): Promise { + const res = await this.db.db + .selectFrom('moderation_subject_status') + .where('did', '=', did) + .where('recordPath', '=', '') + .where('suspendUntil', '>', new Date().toISOString()) + .select('did') + .limit(1) + .executeTakeFirst() + return !!res + } + + async revertState({ + createdBy, + createdAt, + comment, + action, + subject, + }: ReversibleModerationEvent): Promise { + const isRevertingTakedown = + action === 'com.atproto.admin.defs#modEventTakedown' + this.db.assertTransaction() + const result = await this.logEvent({ + event: { + $type: isRevertingTakedown + ? 'com.atproto.admin.defs#modEventReverseTakedown' + : 'com.atproto.admin.defs#modEventUnmute', + comment: comment ?? undefined, + }, + createdAt, + createdBy, + subject, + }) + + if (isRevertingTakedown) { + if (subject.isRepo()) { + await this.reverseTakedownRepo(subject) + } else if (subject.isRecord()) { + await this.reverseTakedownRecord(subject) + } + } + + return result + } + + async takedownRepo( + subject: RepoSubject, + takedownId: number, + isSuspend = false, + ) { + const takedownRef = `BSKY-${ + isSuspend ? 'SUSPEND' : 'TAKEDOWN' + }-${takedownId}` + const values = TAKEDOWNS.map((eventType) => ({ + eventType, + subjectDid: subject.did, + takedownRef, + })) + const repoEvts = await this.db.db + .insertInto('repo_push_event') + .values(values) + .onConflict((oc) => + oc.columns(['subjectDid', 'eventType']).doUpdateSet({ + takedownRef, + confirmedAt: null, + attempts: 0, + lastAttempted: null, + }), + ) + .returning('id') + .execute() + + this.db.onCommit(() => { + this.backgroundQueue.add(async () => { + await Promise.all( + repoEvts.map((evt) => this.eventPusher.attemptRepoEvent(evt.id)), + ) + }) + }) + } + + async reverseTakedownRepo(subject: RepoSubject) { + const repoEvts = await this.db.db + .updateTable('repo_push_event') + .where('eventType', 'in', TAKEDOWNS) + .where('subjectDid', '=', subject.did) + .set({ + takedownRef: null, + confirmedAt: null, + attempts: 0, + lastAttempted: null, + }) + .returning('id') + .execute() + + this.db.onCommit(() => { + this.backgroundQueue.add(async () => { + await Promise.all( + repoEvts.map((evt) => this.eventPusher.attemptRepoEvent(evt.id)), + ) + }) + }) + } + + async takedownRecord(subject: RecordSubject, takedownId: number) { + this.db.assertTransaction() + const takedownRef = `BSKY-TAKEDOWN-${takedownId}` + const values = TAKEDOWNS.map((eventType) => ({ + eventType, + subjectDid: subject.did, + subjectUri: subject.uri, + subjectCid: subject.cid, + takedownRef, + })) + const recordEvts = await this.db.db + .insertInto('record_push_event') + .values(values) + .onConflict((oc) => + oc.columns(['subjectUri', 'eventType']).doUpdateSet({ + takedownRef, + confirmedAt: null, + attempts: 0, + lastAttempted: null, + }), + ) + .returning('id') + .execute() + + this.db.onCommit(() => { + this.backgroundQueue.add(async () => { + await Promise.all( + recordEvts.map((evt) => this.eventPusher.attemptRecordEvent(evt.id)), + ) + }) + }) + + const blobCids = subject.blobCids + if (blobCids && blobCids.length > 0) { + const blobValues: Insertable[] = [] + for (const eventType of TAKEDOWNS) { + for (const cid of blobCids) { + blobValues.push({ + eventType, + subjectDid: subject.did, + subjectBlobCid: cid.toString(), + takedownRef, + }) + } + } + const blobEvts = await this.db.db + .insertInto('blob_push_event') + .values(blobValues) + .onConflict((oc) => + oc + .columns(['subjectDid', 'subjectBlobCid', 'eventType']) + .doUpdateSet({ + takedownRef, + confirmedAt: null, + attempts: 0, + lastAttempted: null, + }), + ) + .returning('id') + .execute() + + this.db.onCommit(() => { + this.backgroundQueue.add(async () => { + await Promise.all( + blobEvts.map((evt) => this.eventPusher.attemptBlobEvent(evt.id)), + ) + }) + }) + } + } + + async reverseTakedownRecord(subject: RecordSubject) { + this.db.assertTransaction() + const recordEvts = await this.db.db + .updateTable('record_push_event') + .where('eventType', 'in', TAKEDOWNS) + .where('subjectDid', '=', subject.did) + .where('subjectUri', '=', subject.uri) + .set({ + takedownRef: null, + confirmedAt: null, + attempts: 0, + lastAttempted: null, + }) + .returning('id') + .execute() + this.db.onCommit(() => { + this.backgroundQueue.add(async () => { + await Promise.all( + recordEvts.map((evt) => this.eventPusher.attemptRecordEvent(evt.id)), + ) + }) + }) + + const blobCids = subject.blobCids + if (blobCids && blobCids.length > 0) { + const blobEvts = await this.db.db + .updateTable('blob_push_event') + .where('eventType', 'in', TAKEDOWNS) + .where('subjectDid', '=', subject.did) + .where( + 'subjectBlobCid', + 'in', + blobCids.map((c) => c.toString()), + ) + .set({ + takedownRef: null, + confirmedAt: null, + attempts: 0, + lastAttempted: null, + }) + .returning('id') + .execute() + + this.db.onCommit(() => { + this.backgroundQueue.add(async () => { + await Promise.all( + blobEvts.map((evt) => this.eventPusher.attemptBlobEvent(evt.id)), + ) + }) + }) + } + } + + async report(info: { + reasonType: NonNullable['reportType'] + reason?: string + subject: ModSubject + reportedBy: string + createdAt?: Date + }): Promise { + const { + reasonType, + reason, + reportedBy, + createdAt = new Date(), + subject, + } = info + + const event = await this.logEvent({ + event: { + $type: 'com.atproto.admin.defs#modEventReport', + reportType: reasonType, + comment: reason, + }, + createdBy: reportedBy, + subject, + createdAt, + }) + + return event + } + + async getSubjectStatuses({ + cursor, + limit = 50, + takendown, + appealed, + reviewState, + reviewedAfter, + reviewedBefore, + reportedAfter, + reportedBefore, + includeMuted, + ignoreSubjects, + sortDirection, + lastReviewedBy, + sortField, + subject, + }: { + cursor?: string + limit?: number + takendown?: boolean + appealed?: boolean | null + reviewedBefore?: string + reviewState?: ModerationSubjectStatusRow['reviewState'] + reviewedAfter?: string + reportedAfter?: string + reportedBefore?: string + includeMuted?: boolean + subject?: string + ignoreSubjects?: string[] + sortDirection: 'asc' | 'desc' + lastReviewedBy?: string + sortField: 'lastReviewedAt' | 'lastReportedAt' + }) { + let builder = this.db.db.selectFrom('moderation_subject_status').selectAll() + + if (subject) { + const subjectInfo = getStatusIdentifierFromSubject(subject) + builder = builder + .where('moderation_subject_status.did', '=', subjectInfo.did) + .where((qb) => + subjectInfo.recordPath + ? qb.where('recordPath', '=', subjectInfo.recordPath) + : qb.where('recordPath', '=', ''), + ) + } + + if (ignoreSubjects?.length) { + builder = builder + .where('moderation_subject_status.did', 'not in', ignoreSubjects) + .where('recordPath', 'not in', ignoreSubjects) + } + + if (reviewState) { + builder = builder.where('reviewState', '=', reviewState) + } + + if (lastReviewedBy) { + builder = builder.where('lastReviewedBy', '=', lastReviewedBy) + } + + if (reviewedAfter) { + builder = builder.where('lastReviewedAt', '>', reviewedAfter) + } + + if (reviewedBefore) { + builder = builder.where('lastReviewedAt', '<', reviewedBefore) + } + + if (reportedAfter) { + builder = builder.where('lastReviewedAt', '>', reportedAfter) + } + + if (reportedBefore) { + builder = builder.where('lastReportedAt', '<', reportedBefore) + } + + if (takendown) { + builder = builder.where('takendown', '=', true) + } + + if (appealed !== undefined) { + builder = + appealed === null + ? builder.where('appealed', 'is', null) + : builder.where('appealed', '=', appealed) + } + + if (!includeMuted) { + builder = builder.where((qb) => + qb + .where('muteUntil', '<', new Date().toISOString()) + .orWhere('muteUntil', 'is', null), + ) + } + + const { ref } = this.db.db.dynamic + const keyset = new StatusKeyset( + ref(`moderation_subject_status.${sortField}`), + ref('moderation_subject_status.id'), + ) + const paginatedBuilder = paginate(builder, { + limit, + cursor, + keyset, + direction: sortDirection, + tryIndex: true, + nullsLast: true, + }) + + const results = await paginatedBuilder.execute() + + const infos = await this.views.getAccoutInfosByDid( + results.map((r) => r.did), + ) + const resultsWithHandles = results.map((r) => ({ + ...r, + handle: infos.get(r.did)?.handle ?? INVALID_HANDLE, + })) + + return { + statuses: resultsWithHandles, + cursor: keyset.packFromResult(results), + } + } + + async isSubjectTakendown(subject: ModSubject): Promise { + const builder = this.db.db + .selectFrom('moderation_subject_status') + .where('did', '=', subject.did) + .where('recordPath', '=', subject.recordPath || '') + + const result = await builder.select('takendown').executeTakeFirst() + + return !!result?.takendown + } + + async formatAndCreateLabels( + src: string, + uri: string, + cid: string | null, + labels: { create?: string[]; negate?: string[] }, + ): Promise { + const { create = [], negate = [] } = labels + const toCreate = create.map((val) => ({ + src, + uri, + cid: cid ?? undefined, + val, + neg: false, + cts: new Date().toISOString(), + })) + const toNegate = negate.map((val) => ({ + src, + uri, + cid: cid ?? undefined, + val, + neg: true, + cts: new Date().toISOString(), + })) + const formatted = [...toCreate, ...toNegate] + await this.createLabels(formatted) + return formatted + } + + async createLabels(labels: Label[]) { + if (labels.length < 1) return + const dbVals = labels.map((l) => ({ + ...l, + cid: l.cid ?? '', + neg: !!l.neg, + })) + const { ref } = this.db.db.dynamic + const excluded = (col: string) => ref(`excluded.${col}`) + await this.db.db + .insertInto('label') + .values(dbVals) + .onConflict((oc) => + oc.columns(['src', 'uri', 'cid', 'val']).doUpdateSet({ + neg: sql`${excluded('neg')}`, + cts: sql`${excluded('cts')}`, + }), + ) + .execute() + } +} + +const TAKEDOWNS = ['pds_takedown' as const, 'appview_takedown' as const] + +export type TakedownSubjects = { + did: string + subjects: (RepoRef | RepoBlobRef | StrongRef)[] +} + +export type ReversalSubject = { + subject: ModSubject + reverseSuspend: boolean + reverseMute: boolean +} diff --git a/packages/bsky/src/services/moderation/status.ts b/packages/ozone/src/mod-service/status.ts similarity index 94% rename from packages/bsky/src/services/moderation/status.ts rename to packages/ozone/src/mod-service/status.ts index 151f6137a05..598ebe20712 100644 --- a/packages/bsky/src/services/moderation/status.ts +++ b/packages/ozone/src/mod-service/status.ts @@ -1,18 +1,17 @@ // This may require better organization but for now, just dumping functions here containing DB queries for moderation status import { AtUri } from '@atproto/syntax' -import { PrimaryDatabase } from '../../db' -import { ModerationSubjectStatus } from '../../db/tables/moderation' +import { Database } from '../db' +import { ModerationSubjectStatus } from '../db/schema/moderation_subject_status' import { REVIEWOPEN, REVIEWCLOSED, REVIEWESCALATED, -} from '../../lexicon/types/com/atproto/admin/defs' +} from '../lexicon/types/com/atproto/admin/defs' import { ModerationEventRow, ModerationSubjectStatusRow } from './types' import { HOUR } from '@atproto/common' -import { CID } from 'multiformats/cid' import { sql } from 'kysely' -import { REASONAPPEAL } from '../../lexicon/types/com/atproto/moderation/defs' +import { REASONAPPEAL } from '../lexicon/types/com/atproto/moderation/defs' const getSubjectStatusForModerationEvent = ({ action, @@ -96,9 +95,9 @@ const getSubjectStatusForModerationEvent = ({ // If there's no existing status, it will create one // If the action event does not affect the status, it will do nothing export const adjustModerationSubjectStatus = async ( - db: PrimaryDatabase, + db: Database, moderationEvent: ModerationEventRow, - blobCids?: CID[], + blobCids?: string[], ) => { const { action, @@ -193,7 +192,7 @@ export const adjustModerationSubjectStatus = async ( if (blobCids?.length) { const newBlobCids = sql`${JSON.stringify( - blobCids.map((c) => c.toString()), + blobCids, )}` as unknown as ModerationSubjectStatusRow['blobCids'] newStatus.blobCids = newBlobCids subjectStatus.blobCids = newBlobCids @@ -224,7 +223,7 @@ type ModerationSubjectStatusFilter = | Pick | Pick export const getModerationSubjectStatus = async ( - db: PrimaryDatabase, + db: Database, filters: ModerationSubjectStatusFilter, ) => { let builder = db.db diff --git a/packages/ozone/src/mod-service/subject.ts b/packages/ozone/src/mod-service/subject.ts new file mode 100644 index 00000000000..2ea41eed42e --- /dev/null +++ b/packages/ozone/src/mod-service/subject.ts @@ -0,0 +1,136 @@ +import { AtUri } from '@atproto/syntax' +import { InputSchema as ReportInput } from '../lexicon/types/com/atproto/moderation/createReport' +import { InputSchema as ActionInput } from '../lexicon/types/com/atproto/admin/emitModerationEvent' +import { InvalidRequestError } from '@atproto/xrpc-server' +import { ModerationEventRow, ModerationSubjectStatusRow } from './types' +import { RepoRef } from '../lexicon/types/com/atproto/admin/defs' +import { Main as StrongRef } from '../lexicon/types/com/atproto/repo/strongRef' + +type SubjectInput = ReportInput['subject'] | ActionInput['subject'] + +export const subjectFromInput = ( + subject: SubjectInput, + blobs?: string[], +): ModSubject => { + if ( + subject.$type === 'com.atproto.admin.defs#repoRef' && + typeof subject.did === 'string' + ) { + if (blobs && blobs.length > 0) { + throw new InvalidRequestError('Blobs do not apply to repo subjects') + } + return new RepoSubject(subject.did) + } + if ( + subject.$type === 'com.atproto.repo.strongRef' && + typeof subject.uri === 'string' && + typeof subject.cid === 'string' + ) { + return new RecordSubject(subject.uri, subject.cid, blobs) + } + throw new InvalidRequestError('Invalid subject') +} + +export const subjectFromEventRow = (row: ModerationEventRow): ModSubject => { + if ( + row.subjectType === 'com.atproto.repo.strongRef' && + row.subjectUri && + row.subjectCid + ) { + return new RecordSubject(row.subjectUri, row.subjectCid) + } else { + return new RepoSubject(row.subjectDid) + } +} + +export const subjectFromStatusRow = ( + row: ModerationSubjectStatusRow, +): ModSubject => { + if (row.recordPath && row.recordCid) { + // Not too intuitive but the recordpath is basically / + // which is what the last 2 params of .make() arguments are + const uri = AtUri.make(row.did, ...row.recordPath.split('/')).toString() + return new RecordSubject(uri.toString(), row.recordCid) + } else { + return new RepoSubject(row.did) + } +} + +type SubjectInfo = { + subjectType: 'com.atproto.admin.defs#repoRef' | 'com.atproto.repo.strongRef' + subjectDid: string + subjectUri: string | null + subjectCid: string | null +} + +export interface ModSubject { + did: string + recordPath: string | undefined + blobCids?: string[] + isRepo(): this is RepoSubject + isRecord(): this is RecordSubject + info(): SubjectInfo + lex(): RepoRef | StrongRef +} + +export class RepoSubject implements ModSubject { + blobCids = undefined + recordPath = undefined + constructor(public did: string) {} + isRepo() { + return true + } + isRecord() { + return false + } + info() { + return { + subjectType: 'com.atproto.admin.defs#repoRef' as const, + subjectDid: this.did, + subjectUri: null, + subjectCid: null, + } + } + lex(): RepoRef { + return { + $type: 'com.atproto.admin.defs#repoRef', + did: this.did, + } + } +} + +export class RecordSubject implements ModSubject { + parsedUri: AtUri + did: string + recordPath: string + constructor( + public uri: string, + public cid: string, + public blobCids?: string[], + ) { + this.parsedUri = new AtUri(uri) + this.did = this.parsedUri.hostname + this.recordPath = `${this.parsedUri.collection}/${this.parsedUri.rkey}` + } + isRepo() { + return false + } + isRecord() { + return true + } + info() { + return { + subjectType: 'com.atproto.repo.strongRef' as const, + subjectDid: this.did, + subjectUri: this.uri, + subjectCid: this.cid, + } + } + lex(): StrongRef { + return { + $type: 'com.atproto.repo.strongRef', + uri: this.uri, + cid: this.cid, + } + } +} diff --git a/packages/bsky/src/services/moderation/types.ts b/packages/ozone/src/mod-service/types.ts similarity index 64% rename from packages/bsky/src/services/moderation/types.ts rename to packages/ozone/src/mod-service/types.ts index 77a8baf71ff..94fc58a8d33 100644 --- a/packages/bsky/src/services/moderation/types.ts +++ b/packages/ozone/src/mod-service/types.ts @@ -1,25 +1,8 @@ import { Selectable } from 'kysely' -import { - ModerationEvent, - ModerationSubjectStatus, -} from '../../db/tables/moderation' -import { AtUri } from '@atproto/syntax' -import { CID } from 'multiformats/cid' +import { ModerationEvent } from '../db/schema/moderation_event' +import { ModerationSubjectStatus } from '../db/schema/moderation_subject_status' import { ComAtprotoAdminDefs } from '@atproto/api' - -export type SubjectInfo = - | { - subjectType: 'com.atproto.admin.defs#repoRef' - subjectDid: string - subjectUri: null - subjectCid: null - } - | { - subjectType: 'com.atproto.repo.strongRef' - subjectDid: string - subjectUri: string - subjectCid: string - } +import { ModSubject } from './subject' export type ModerationEventRow = Selectable export type ReversibleModerationEvent = Pick< @@ -27,7 +10,7 @@ export type ReversibleModerationEvent = Pick< 'createdBy' | 'comment' | 'action' > & { createdAt?: Date - subject: { did: string } | { uri: AtUri; cid: CID } + subject: ModSubject } export type ModerationEventRowWithHandle = ModerationEventRow & { diff --git a/packages/ozone/src/mod-service/views.ts b/packages/ozone/src/mod-service/views.ts new file mode 100644 index 00000000000..1ae32126b8f --- /dev/null +++ b/packages/ozone/src/mod-service/views.ts @@ -0,0 +1,531 @@ +import { sql } from 'kysely' +import { AtUri, INVALID_HANDLE, normalizeDatetimeAlways } from '@atproto/syntax' +import AtpAgent from '@atproto/api' +import { dedupeStrs } from '@atproto/common' +import { BlobRef } from '@atproto/lexicon' +import { Database } from '../db' +import { + ModEventView, + RepoView, + RepoViewDetail, + RecordView, + RecordViewDetail, + ReportViewDetail, + BlobView, + SubjectStatusView, + ModEventViewDetail, + AccountView, +} from '../lexicon/types/com/atproto/admin/defs' +import { OutputSchema as ReportOutput } from '../lexicon/types/com/atproto/moderation/createReport' +import { Label, isSelfLabels } from '../lexicon/types/com/atproto/label/defs' +import { + ModerationEventRowWithHandle, + ModerationSubjectStatusRowWithHandle, +} from './types' +import { REASONOTHER } from '../lexicon/types/com/atproto/moderation/defs' +import { subjectFromEventRow, subjectFromStatusRow } from './subject' + +export type AppviewAuth = () => Promise< + | { + headers: { + authorization: string + } + } + | undefined +> + +export class ModerationViews { + constructor( + private db: Database, + private appviewAgent: AtpAgent, + private appviewAuth: AppviewAuth, + ) {} + + async getAccoutInfosByDid(dids: string[]): Promise> { + if (dids.length === 0) return new Map() + const auth = await this.appviewAuth() + if (!auth) return new Map() + const res = await this.appviewAgent.api.com.atproto.admin.getAccountInfos( + { + dids: dedupeStrs(dids), + }, + auth, + ) + return res.data.infos.reduce((acc, cur) => { + return acc.set(cur.did, cur) + }, new Map()) + } + + async repos(dids: string[]): Promise> { + if (dids.length === 0) return new Map() + const [infos, subjectStatuses] = await Promise.all([ + this.getAccoutInfosByDid(dids), + this.getSubjectStatus(dids), + ]) + + return dids.reduce((acc, did) => { + const info = infos.get(did) + if (!info) return acc + const status = subjectStatuses.get(did) + return acc.set(did, { + // No email or invite info on appview + did, + handle: info.handle, + relatedRecords: info.relatedRecords ?? [], + indexedAt: info.indexedAt, + moderation: { + subjectStatus: status ? this.formatSubjectStatus(status) : undefined, + }, + }) + }, new Map()) + } + + formatEvent(event: ModerationEventRowWithHandle): ModEventView { + const eventView: ModEventView = { + id: event.id, + event: { + $type: event.action, + comment: event.comment ?? undefined, + }, + subject: subjectFromEventRow(event).lex(), + subjectBlobCids: [], + createdBy: event.createdBy, + createdAt: event.createdAt, + subjectHandle: event.subjectHandle ?? undefined, + creatorHandle: event.creatorHandle ?? undefined, + } + + if ( + [ + 'com.atproto.admin.defs#modEventTakedown', + 'com.atproto.admin.defs#modEventMute', + ].includes(event.action) + ) { + eventView.event = { + ...eventView.event, + durationInHours: event.durationInHours ?? undefined, + } + } + + if (event.action === 'com.atproto.admin.defs#modEventLabel') { + eventView.event = { + ...eventView.event, + createLabelVals: event.createLabelVals?.length + ? event.createLabelVals.split(' ') + : [], + negateLabelVals: event.negateLabelVals?.length + ? event.negateLabelVals.split(' ') + : [], + } + } + + // This is for legacy data only, for new events, these types of events won't have labels attached + if ( + [ + 'com.atproto.admin.defs#modEventAcknowledge', + 'com.atproto.admin.defs#modEventTakedown', + 'com.atproto.admin.defs#modEventEscalate', + ].includes(event.action) + ) { + if (event.createLabelVals?.length) { + eventView.event = { + ...eventView.event, + createLabelVals: event.createLabelVals.split(' '), + } + } + + if (event.negateLabelVals?.length) { + eventView.event = { + ...eventView.event, + negateLabelVals: event.negateLabelVals.split(' '), + } + } + } + + if (event.action === 'com.atproto.admin.defs#modEventReport') { + eventView.event = { + ...eventView.event, + reportType: event.meta?.reportType ?? undefined, + } + } + + if (event.action === 'com.atproto.admin.defs#modEventEmail') { + eventView.event = { + ...eventView.event, + subjectLine: event.meta?.subjectLine ?? '', + } + } + + if ( + event.action === 'com.atproto.admin.defs#modEventComment' && + event.meta?.sticky + ) { + eventView.event.sticky = true + } + + return eventView + } + + async eventDetail( + result: ModerationEventRowWithHandle, + ): Promise { + const subjectId = + result.subjectType === 'com.atproto.admin.defs#repoRef' + ? result.subjectDid + : result.subjectUri + if (!subjectId) { + throw new Error(`Bad subject: ${result.id}`) + } + const subject = await this.subject(subjectId) + const eventView = this.formatEvent(result) + const allBlobs = findBlobRefs(subject.value) + const subjectBlobs = await this.blob( + allBlobs.filter((blob) => + eventView.subjectBlobCids.includes(blob.ref.toString()), + ), + ) + return { + ...eventView, + subject, + subjectBlobs, + } + } + + async repoDetail(did: string): Promise { + const [repos, labels] = await Promise.all([ + this.repos([did]), + this.labels(did), + ]) + const repo = repos.get(did) + if (!repo) return + + return { + ...repo, + moderation: { + ...repo.moderation, + }, + labels, + } + } + + async fetchRecords( + subjects: RecordSubject[], + ): Promise> { + const auth = await this.appviewAuth() + if (!auth) return new Map() + const fetched = await Promise.all( + subjects.map(async (subject) => { + const uri = new AtUri(subject.uri) + try { + return await this.appviewAgent.api.com.atproto.repo.getRecord( + { + repo: uri.hostname, + collection: uri.collection, + rkey: uri.rkey, + cid: subject.cid, + }, + auth, + ) + } catch { + return null + } + }), + ) + return fetched.reduce((acc, cur) => { + if (!cur) return acc + const data = cur.data + const indexedAt = new Date().toISOString() + return acc.set(data.uri, { ...data, cid: data.cid ?? '', indexedAt }) + }, new Map()) + } + + async records(subjects: RecordSubject[]): Promise> { + const uris = subjects.map((record) => new AtUri(record.uri)) + const dids = uris.map((u) => u.hostname) + + const [repos, subjectStatuses, records] = await Promise.all([ + this.repos(dids), + this.getSubjectStatus(subjects.map((s) => s.uri)), + this.fetchRecords(subjects), + ]) + + return uris.reduce((acc, uri) => { + const repo = repos.get(uri.hostname) + if (!repo) return acc + const record = records.get(uri.toString()) + if (!record) return acc + const subjectStatus = subjectStatuses.get(uri.toString()) + return acc.set(uri.toString(), { + uri: uri.toString(), + cid: record.cid, + value: record.value, + blobCids: findBlobRefs(record.value).map((blob) => blob.ref.toString()), + indexedAt: record.indexedAt, + repo, + moderation: { + subjectStatus: subjectStatus + ? this.formatSubjectStatus(subjectStatus) + : undefined, + }, + }) + }, new Map()) + } + + async recordDetail( + subject: RecordSubject, + ): Promise { + const [records, subjectStatusesResult] = await Promise.all([ + this.records([subject]), + this.getSubjectStatus([subject.uri]), + ]) + const record = records.get(subject.uri) + if (!record) return undefined + + const status = subjectStatusesResult.get(subject.uri) + + const [blobs, labels, subjectStatus] = await Promise.all([ + this.blob(findBlobRefs(record.value)), + this.labels(record.uri), + status ? this.formatSubjectStatus(status) : Promise.resolve(undefined), + ]) + const selfLabels = getSelfLabels({ + uri: record.uri, + cid: record.cid, + record: record.value, + }) + return { + ...record, + blobs, + moderation: { + ...record.moderation, + subjectStatus, + }, + labels: [...labels, ...selfLabels], + } + } + + formatReport(report: ModerationEventRowWithHandle): ReportOutput { + return { + id: report.id, + createdAt: report.createdAt, + // Ideally, we would never have a report entry that does not have a reasonType but at the schema level + // we are not guarantying that so in whatever case, if we end up with such entries, default to 'other' + reasonType: report.meta?.reportType + ? (report.meta?.reportType as string) + : REASONOTHER, + reason: report.comment ?? undefined, + reportedBy: report.createdBy, + subject: subjectFromEventRow(report).lex(), + } + } + // Partial view for subjects + + async subject(subject: string): Promise { + if (subject.startsWith('did:')) { + const repos = await this.repos([subject]) + const repo = repos.get(subject) + if (repo) { + return { + $type: 'com.atproto.admin.defs#repoView', + ...repo, + } + } else { + return { + $type: 'com.atproto.admin.defs#repoViewNotFound', + did: subject, + } + } + } else { + const records = await this.records([{ uri: subject }]) + const record = records.get(subject) + if (record) { + return { + $type: 'com.atproto.admin.defs#recordView', + ...record, + } + } else { + return { + $type: 'com.atproto.admin.defs#recordViewNotFound', + uri: subject, + } + } + } + } + + // Partial view for blobs + + async blob(blobs: BlobRef[]): Promise { + if (!blobs.length) return [] + const { ref } = this.db.db.dynamic + const modStatusResults = await this.db.db + .selectFrom('moderation_subject_status') + .where( + sql`${ref( + 'moderation_subject_status.blobCids', + )} @> ${JSON.stringify(blobs.map((blob) => blob.ref.toString()))}`, + ) + .selectAll() + .executeTakeFirst() + const statusByCid = (modStatusResults?.blobCids || [])?.reduce( + (acc, cur) => Object.assign(acc, { [cur]: modStatusResults }), + {}, + ) + // Intentionally missing details field, since we don't have any on appview. + // We also don't know when the blob was created, so we use a canned creation time. + const unknownTime = new Date(0).toISOString() + return blobs.map((blob) => { + const cid = blob.ref.toString() + const subjectStatus = statusByCid[cid] + ? this.formatSubjectStatus(statusByCid[cid]) + : undefined + return { + cid, + mimeType: blob.mimeType, + size: blob.size, + createdAt: unknownTime, + moderation: { + subjectStatus, + }, + } + }) + } + + async labels(subject: string, includeNeg?: boolean): Promise { + const res = await this.db.db + .selectFrom('label') + .where('label.uri', '=', subject) + .if(!includeNeg, (qb) => qb.where('neg', '=', false)) + .selectAll() + .execute() + return res.map((l) => ({ + ...l, + cid: l.cid === '' ? undefined : l.cid, + neg: l.neg, + })) + } + + async getSubjectStatus( + subjects: string[], + ): Promise> { + const parsedSubjects = subjects.map((subject) => parseSubjectId(subject)) + const filterForSubject = (did: string, recordPath?: string) => { + return (clause: any) => { + clause = clause + .where('moderation_subject_status.did', '=', did) + .where('moderation_subject_status.recordPath', '=', recordPath || '') + return clause + } + // TODO: Fix the typing here? + } + + const builder = this.db.db + .selectFrom('moderation_subject_status') + .where((clause) => { + parsedSubjects.forEach((subject, i) => { + const applySubjectFilter = filterForSubject( + subject.did, + subject.recordPath, + ) + if (i === 0) { + clause = clause.where(applySubjectFilter) + } else { + clause = clause.orWhere(applySubjectFilter) + } + }) + + return clause + }) + .selectAll() + + const [statusRes, accountsByDid] = await Promise.all([ + builder.execute(), + this.getAccoutInfosByDid(parsedSubjects.map((s) => s.did)), + ]) + + return statusRes.reduce((acc, cur) => { + const subject = cur.recordPath + ? formatSubjectId(cur.did, cur.recordPath) + : cur.did + const handle = accountsByDid.get(cur.did)?.handle + return acc.set(subject, { + ...cur, + handle: handle ?? INVALID_HANDLE, + }) + }, new Map()) + } + + formatSubjectStatus( + status: ModerationSubjectStatusRowWithHandle, + ): SubjectStatusView { + return { + id: status.id, + reviewState: status.reviewState, + createdAt: status.createdAt, + updatedAt: status.updatedAt, + comment: status.comment ?? undefined, + lastReviewedBy: status.lastReviewedBy ?? undefined, + lastReviewedAt: status.lastReviewedAt ?? undefined, + lastReportedAt: status.lastReportedAt ?? undefined, + lastAppealedAt: status.lastAppealedAt ?? undefined, + muteUntil: status.muteUntil ?? undefined, + suspendUntil: status.suspendUntil ?? undefined, + takendown: status.takendown ?? undefined, + appealed: status.appealed ?? undefined, + subjectRepoHandle: status.handle ?? undefined, + subjectBlobCids: status.blobCids || [], + subject: subjectFromStatusRow(status).lex(), + } + } +} + +type RecordSubject = { uri: string; cid?: string } + +type SubjectView = ModEventViewDetail['subject'] & ReportViewDetail['subject'] + +type RecordInfo = { + uri: string + cid: string + value: Record + indexedAt: string +} + +function parseSubjectId(subject: string) { + if (subject.startsWith('did:')) { + return { did: subject } + } + const uri = new AtUri(subject) + return { did: uri.hostname, recordPath: `${uri.collection}/${uri.rkey}` } +} + +function formatSubjectId(did: string, recordPath?: string) { + return recordPath ? `at://${did}/${recordPath}` : did +} + +function findBlobRefs(value: unknown, refs: BlobRef[] = []) { + if (value instanceof BlobRef) { + refs.push(value) + } else if (Array.isArray(value)) { + value.forEach((val) => findBlobRefs(val, refs)) + } else if (value && typeof value === 'object') { + Object.values(value).forEach((val) => findBlobRefs(val, refs)) + } + return refs +} + +export function getSelfLabels(details: { + uri: string | null + cid: string | null + record: Record | null +}): Label[] { + const { uri, cid, record } = details + if (!uri || !cid || !record) return [] + if (!isSelfLabels(record.labels)) return [] + const src = new AtUri(uri).host // record creator + const cts = + typeof record.createdAt === 'string' + ? normalizeDatetimeAlways(record.createdAt) + : new Date(0).toISOString() + return record.labels.values.map(({ val }) => { + return { src, uri, cid, val, cts, neg: false } + }) +} diff --git a/packages/ozone/src/util.ts b/packages/ozone/src/util.ts new file mode 100644 index 00000000000..ab96998642a --- /dev/null +++ b/packages/ozone/src/util.ts @@ -0,0 +1,26 @@ +import { AxiosError } from 'axios' +import { XRPCError, ResponseType } from '@atproto/xrpc' +import { RetryOptions, retry } from '@atproto/common' + +export async function retryHttp( + fn: () => Promise, + opts: RetryOptions = {}, +): Promise { + return retry(fn, { retryable: retryableHttp, ...opts }) +} + +export function retryableHttp(err: unknown) { + if (err instanceof XRPCError) { + if (err.status === ResponseType.Unknown) return true + return retryableHttpStatusCodes.has(err.status) + } + if (err instanceof AxiosError) { + if (!err.response) return true + return retryableHttpStatusCodes.has(err.response.status) + } + return false +} + +const retryableHttpStatusCodes = new Set([ + 408, 425, 429, 500, 502, 503, 504, 522, 524, +]) diff --git a/packages/ozone/test.env b/packages/ozone/test.env new file mode 100644 index 00000000000..b854b5ae3c7 --- /dev/null +++ b/packages/ozone/test.env @@ -0,0 +1,2 @@ +LOG_ENABLED=true +LOG_DESTINATION=test.log diff --git a/packages/bsky/tests/admin/__snapshots__/get-record.test.ts.snap b/packages/ozone/tests/__snapshots__/get-record.test.ts.snap similarity index 100% rename from packages/bsky/tests/admin/__snapshots__/get-record.test.ts.snap rename to packages/ozone/tests/__snapshots__/get-record.test.ts.snap diff --git a/packages/bsky/tests/admin/__snapshots__/get-repo.test.ts.snap b/packages/ozone/tests/__snapshots__/get-repo.test.ts.snap similarity index 100% rename from packages/bsky/tests/admin/__snapshots__/get-repo.test.ts.snap rename to packages/ozone/tests/__snapshots__/get-repo.test.ts.snap diff --git a/packages/bsky/tests/admin/__snapshots__/moderation-events.test.ts.snap b/packages/ozone/tests/__snapshots__/moderation-events.test.ts.snap similarity index 54% rename from packages/bsky/tests/admin/__snapshots__/moderation-events.test.ts.snap rename to packages/ozone/tests/__snapshots__/moderation-events.test.ts.snap index 8fa16b311f2..0ebda08b84e 100644 --- a/packages/bsky/tests/admin/__snapshots__/moderation-events.test.ts.snap +++ b/packages/ozone/tests/__snapshots__/moderation-events.test.ts.snap @@ -5,60 +5,82 @@ Object { "createdAt": "1970-01-01T00:00:00.000Z", "createdBy": "user(2)", "event": Object { - "$type": "com.atproto.admin.defs#modEventReport", - "comment": "X", - "reportType": "com.atproto.moderation.defs#reasonMisleading", + "$type": "com.atproto.admin.defs#modEventLabel", + "comment": "[AutoModerator]: Applying labels", + "createLabelVals": Array [ + "test-label", + ], + "negateLabelVals": Array [], }, "id": 1, "subject": Object { - "$type": "com.atproto.admin.defs#repoView", - "did": "user(0)", - "handle": "alice.test", + "$type": "com.atproto.admin.defs#recordView", + "blobCids": Array [], + "cid": "cids(0)", "indexedAt": "1970-01-01T00:00:00.000Z", - "moderation": Object { - "subjectStatus": Object { - "createdAt": "1970-01-01T00:00:00.000Z", - "id": 1, - "lastReportedAt": "1970-01-01T00:00:00.000Z", - "lastReviewedAt": "1970-01-01T00:00:00.000Z", - "lastReviewedBy": "user(1)", - "reviewState": "com.atproto.admin.defs#reviewEscalated", - "subject": Object { - "$type": "com.atproto.admin.defs#repoRef", - "did": "user(0)", + "moderation": Object {}, + "repo": Object { + "did": "user(0)", + "handle": "alice.test", + "indexedAt": "1970-01-01T00:00:00.000Z", + "moderation": Object { + "subjectStatus": Object { + "createdAt": "1970-01-01T00:00:00.000Z", + "id": 1, + "lastReportedAt": "1970-01-01T00:00:00.000Z", + "lastReviewedAt": "1970-01-01T00:00:00.000Z", + "lastReviewedBy": "user(1)", + "reviewState": "com.atproto.admin.defs#reviewEscalated", + "subject": Object { + "$type": "com.atproto.admin.defs#repoRef", + "did": "user(0)", + }, + "subjectBlobCids": Array [], + "subjectRepoHandle": "alice.test", + "takendown": false, + "updatedAt": "1970-01-01T00:00:00.000Z", }, - "subjectBlobCids": Array [], - "subjectRepoHandle": "alice.test", - "takendown": false, - "updatedAt": "1970-01-01T00:00:00.000Z", }, - }, - "relatedRecords": Array [ - Object { - "$type": "app.bsky.actor.profile", - "avatar": Object { - "$type": "blob", - "mimeType": "image/jpeg", - "ref": Object { - "$link": "cids(0)", + "relatedRecords": Array [ + Object { + "$type": "app.bsky.actor.profile", + "avatar": Object { + "$type": "blob", + "mimeType": "image/jpeg", + "ref": Object { + "$link": "cids(2)", + }, + "size": 3976, + }, + "description": "its me!", + "displayName": "ali", + "labels": Object { + "$type": "com.atproto.label.defs#selfLabels", + "values": Array [ + Object { + "val": "self-label-a", + }, + Object { + "val": "self-label-b", + }, + ], }, - "size": 3976, }, - "description": "its me!", - "displayName": "ali", - "labels": Object { - "$type": "com.atproto.label.defs#selfLabels", - "values": Array [ - Object { - "val": "self-label-a", - }, - Object { - "val": "self-label-b", - }, - ], + ], + }, + "uri": "record(0)", + "value": Object { + "$type": "app.bsky.feed.post", + "createdAt": "1970-01-01T00:00:00.000Z", + "embed": Object { + "$type": "app.bsky.embed.record", + "record": Object { + "cid": "cids(1)", + "uri": "record(1)", }, }, - ], + "text": "yoohoo label_me", + }, }, "subjectBlobCids": Array [], "subjectBlobs": Array [], @@ -76,7 +98,7 @@ Array [ "comment": "X", "reportType": "com.atproto.moderation.defs#reasonSpam", }, - "id": 7, + "id": 9, "subject": Object { "$type": "com.atproto.admin.defs#repoRef", "did": "user(0)", @@ -93,7 +115,7 @@ Array [ "comment": "X", "reportType": "com.atproto.moderation.defs#reasonSpam", }, - "id": 3, + "id": 5, "subject": Object { "$type": "com.atproto.admin.defs#repoRef", "did": "user(0)", @@ -115,7 +137,7 @@ Array [ "comment": "X", "reportType": "com.atproto.moderation.defs#reasonSpam", }, - "id": 6, + "id": 8, "subject": Object { "$type": "com.atproto.repo.strongRef", "cid": "cids(0)", @@ -133,7 +155,7 @@ Array [ "comment": "X", "reportType": "com.atproto.moderation.defs#reasonSpam", }, - "id": 2, + "id": 4, "subject": Object { "$type": "com.atproto.repo.strongRef", "cid": "cids(0)", diff --git a/packages/bsky/tests/admin/__snapshots__/moderation-statuses.test.ts.snap b/packages/ozone/tests/__snapshots__/moderation-statuses.test.ts.snap similarity index 100% rename from packages/bsky/tests/admin/__snapshots__/moderation-statuses.test.ts.snap rename to packages/ozone/tests/__snapshots__/moderation-statuses.test.ts.snap diff --git a/packages/bsky/tests/admin/__snapshots__/moderation.test.ts.snap b/packages/ozone/tests/__snapshots__/moderation.test.ts.snap similarity index 97% rename from packages/bsky/tests/admin/__snapshots__/moderation.test.ts.snap rename to packages/ozone/tests/__snapshots__/moderation.test.ts.snap index 33a973e714f..d2f5731d42d 100644 --- a/packages/bsky/tests/admin/__snapshots__/moderation.test.ts.snap +++ b/packages/ozone/tests/__snapshots__/moderation.test.ts.snap @@ -4,7 +4,7 @@ exports[`moderation reporting creates reports of a record. 1`] = ` Array [ Object { "createdAt": "1970-01-01T00:00:00.000Z", - "id": 4, + "id": 6, "reasonType": "com.atproto.moderation.defs#reasonSpam", "reportedBy": "user(0)", "subject": Object { @@ -15,7 +15,7 @@ Array [ }, Object { "createdAt": "1970-01-01T00:00:00.000Z", - "id": 5, + "id": 7, "reason": "defamation", "reasonType": "com.atproto.moderation.defs#reasonOther", "reportedBy": "user(1)", @@ -32,7 +32,7 @@ exports[`moderation reporting creates reports of a repo. 1`] = ` Array [ Object { "createdAt": "1970-01-01T00:00:00.000Z", - "id": 1, + "id": 3, "reasonType": "com.atproto.moderation.defs#reasonSpam", "reportedBy": "user(0)", "subject": Object { @@ -42,7 +42,7 @@ Array [ }, Object { "createdAt": "1970-01-01T00:00:00.000Z", - "id": 2, + "id": 4, "reason": "impersonation", "reasonType": "com.atproto.moderation.defs#reasonOther", "reportedBy": "user(2)", diff --git a/packages/ozone/tests/_util.ts b/packages/ozone/tests/_util.ts new file mode 100644 index 00000000000..8d39a0f9c2c --- /dev/null +++ b/packages/ozone/tests/_util.ts @@ -0,0 +1,192 @@ +import { AtUri } from '@atproto/syntax' +import { lexToJson } from '@atproto/lexicon' +import { CID } from 'multiformats/cid' +import { + FeedViewPost, + PostView, + isPostView, + isThreadViewPost, +} from '../src/lexicon/types/app/bsky/feed/defs' +import { isViewRecord } from '../src/lexicon/types/app/bsky/embed/record' + +// Swap out identifiers and dates with stable +// values for the purpose of snapshot testing +export const forSnapshot = (obj: unknown) => { + const records = { [kTake]: 'record' } + const collections = { [kTake]: 'collection' } + const users = { [kTake]: 'user' } + const cids = { [kTake]: 'cids' } + const unknown = { [kTake]: 'unknown' } + const toWalk = lexToJson(obj as any) // remove any blobrefs/cids + return mapLeafValues(toWalk, (item) => { + const asCid = CID.asCID(item) + if (asCid !== null) { + return take(cids, asCid.toString()) + } + if (typeof item !== 'string') { + return item + } + const str = item.startsWith('did:plc:') ? `at://${item}` : item + if (str.startsWith('at://')) { + const uri = new AtUri(str) + if (uri.rkey) { + return take(records, str) + } + if (uri.collection) { + return take(collections, str) + } + if (uri.hostname) { + return take(users, str) + } + return take(unknown, str) + } + if (str.match(/^\d{4}-\d{2}-\d{2}T/)) { + if (str.match(/\d{6}Z$/)) { + return constantDate.replace('Z', '000Z') // e.g. microseconds in record createdAt + } else if (str.endsWith('+00:00')) { + return constantDate.replace('Z', '+00:00') // e.g. timezone in record createdAt + } else { + return constantDate + } + } + if (str.match(/^\d+::bafy/)) { + return constantKeysetCursor + } + if (str.match(/\/img\/[^/]+\/.+\/did:plc:[^/]+\/[^/]+@[\w]+$/)) { + // Match image urls + const match = str.match( + /\/img\/[^/]+\/.+\/(did:plc:[^/]+)\/([^/]+)@[\w]+$/, + ) + if (!match) return str + const [, did, cid] = match + return str.replace(did, take(users, did)).replace(cid, take(cids, cid)) + } + let isCid: boolean + try { + CID.parse(str) + isCid = true + } catch (_err) { + isCid = false + } + if (isCid) { + return take(cids, str) + } + return item + }) +} + +// Feed testing utils + +export const getOriginator = (item: FeedViewPost) => { + if (!item.reason) { + return item.post.author.did + } else { + return (item.reason.by as { [did: string]: string }).did + } +} + +// Useful for remapping ids in snapshot testing, to make snapshots deterministic. +// E.g. you may use this to map this: +// [{ uri: 'did://rad'}, { uri: 'did://bad' }, { uri: 'did://rad'}] +// to this: +// [{ uri: '0'}, { uri: '1' }, { uri: '0'}] +const kTake = Symbol('take') +export function take(obj, value: string): string +export function take(obj, value: string | undefined): string | undefined +export function take( + obj: { [s: string]: number; [kTake]?: string }, + value: string | undefined, +): string | undefined { + if (value === undefined) { + return + } + if (!(value in obj)) { + obj[value] = Object.keys(obj).length + } + const kind = obj[kTake] + return typeof kind === 'string' + ? `${kind}(${obj[value]})` + : String(obj[value]) +} + +export const constantDate = new Date(0).toISOString() +export const constantKeysetCursor = '0000000000000::bafycid' + +const mapLeafValues = (obj: unknown, fn: (val: unknown) => unknown) => { + if (Array.isArray(obj)) { + return obj.map((item) => mapLeafValues(item, fn)) + } + if (obj && typeof obj === 'object') { + return Object.entries(obj).reduce( + (collect, [name, value]) => + Object.assign(collect, { [name]: mapLeafValues(value, fn) }), + {}, + ) + } + return fn(obj) +} + +export const paginateAll = async ( + fn: (cursor?: string) => Promise, + limit = Infinity, +): Promise => { + const results: T[] = [] + let cursor + do { + const res = await fn(cursor) + results.push(res) + cursor = res.cursor + } while (cursor && results.length < limit) + return results +} + +// @NOTE mutates +export const stripViewer = }>( + val: T, +): T => { + delete val.viewer + return val +} + +// @NOTE mutates +export const stripViewerFromPost = (postUnknown: unknown): PostView => { + if (postUnknown?.['$type'] && !isPostView(postUnknown)) { + throw new Error('Expected post view') + } + const post = postUnknown as PostView + post.author = stripViewer(post.author) + const recordEmbed = + post.embed && isViewRecord(post.embed.record) + ? post.embed.record // Record from record embed + : post.embed?.['record'] && isViewRecord(post.embed['record']['record']) + ? post.embed['record']['record'] // Record from record-with-media embed + : undefined + if (recordEmbed) { + recordEmbed.author = stripViewer(recordEmbed.author) + recordEmbed.embeds?.forEach((deepEmbed) => { + const deepRecordEmbed = isViewRecord(deepEmbed.record) + ? deepEmbed.record // Record from record embed + : deepEmbed['record'] && isViewRecord(deepEmbed['record']['record']) + ? deepEmbed['record']['record'] // Record from record-with-media embed + : undefined + if (deepRecordEmbed) { + deepRecordEmbed.author = stripViewer(deepRecordEmbed.author) + } + }) + } + return stripViewer(post) +} + +// @NOTE mutates +export const stripViewerFromThread = (thread: T): T => { + if (!isThreadViewPost(thread)) return thread + delete thread.viewer + thread.post = stripViewerFromPost(thread.post) + if (isThreadViewPost(thread.parent)) { + thread.parent = stripViewerFromThread(thread.parent) + } + if (thread.replies) { + thread.replies = thread.replies.map(stripViewerFromThread) + } + return thread +} diff --git a/packages/ozone/tests/db.test.ts b/packages/ozone/tests/db.test.ts new file mode 100644 index 00000000000..30ca5fde5ec --- /dev/null +++ b/packages/ozone/tests/db.test.ts @@ -0,0 +1,184 @@ +import { sql } from 'kysely' +import { wait } from '@atproto/common' +import { TestNetwork } from '@atproto/dev-env' +import { Database } from '../src' + +describe('db', () => { + let network: TestNetwork + let db: Database + + beforeAll(async () => { + network = await TestNetwork.create({ + dbPostgresSchema: 'ozone_db', + }) + db = network.ozone.ctx.db + }) + + afterAll(async () => { + await network.close() + }) + + it('handles client errors without crashing.', async () => { + const tryKillConnection = db.transaction(async (dbTxn) => { + const result = await sql`select pg_backend_pid() as pid;`.execute( + dbTxn.db, + ) + const pid = result.rows[0]?.['pid'] as number + await sql`select pg_terminate_backend(${pid});`.execute(db.db) + await sql`select 1;`.execute(dbTxn.db) + }) + // This should throw, but no unhandled error + await expect(tryKillConnection).rejects.toThrow() + }) + + it('handles pool errors without crashing.', async () => { + const conn1 = await db.pool.connect() + const conn2 = await db.pool.connect() + const result = await conn1.query('select pg_backend_pid() as pid;') + const conn1pid: number = result.rows[0].pid + conn1.release() + await wait(100) // let release apply, conn is now idle on pool. + await conn2.query(`select pg_terminate_backend(${conn1pid});`) + conn2.release() + }) + + describe('transaction()', () => { + it('commits changes', async () => { + const result = await db.transaction(async (dbTxn) => { + return await dbTxn.db + .insertInto('repo_push_event') + .values({ + eventType: 'takedown', + subjectDid: 'x', + }) + .returning('subjectDid') + .executeTakeFirst() + }) + + if (!result) { + return expect(result).toBeTruthy() + } + + expect(result.subjectDid).toEqual('x') + + const row = await db.db + .selectFrom('repo_push_event') + .selectAll() + .where('subjectDid', '=', 'x') + .executeTakeFirst() + + expect(row).toMatchObject({ + eventType: 'takedown', + subjectDid: 'x', + }) + }) + + it('rolls-back changes on failure', async () => { + const promise = db.transaction(async (dbTxn) => { + await dbTxn.db + .insertInto('repo_push_event') + .values({ + eventType: 'takedown', + subjectDid: 'y', + }) + .returning('subjectDid') + .executeTakeFirst() + + throw new Error('Oops!') + }) + + await expect(promise).rejects.toThrow('Oops!') + + const row = await db.db + .selectFrom('repo_push_event') + .selectAll() + .where('subjectDid', '=', 'y') + .executeTakeFirst() + + expect(row).toBeUndefined() + }) + + it('indicates isTransaction', async () => { + expect(db.isTransaction).toEqual(false) + + await db.transaction(async (dbTxn) => { + expect(db.isTransaction).toEqual(false) + expect(dbTxn.isTransaction).toEqual(true) + }) + + expect(db.isTransaction).toEqual(false) + }) + + it('asserts transaction', async () => { + expect(() => db.assertTransaction()).toThrow('Transaction required') + + await db.transaction(async (dbTxn) => { + expect(() => dbTxn.assertTransaction()).not.toThrow() + }) + }) + + it('does not allow leaky transactions', async () => { + let leakedTx: Database | undefined + + const tx = db.transaction(async (dbTxn) => { + leakedTx = dbTxn + await dbTxn.db + .insertInto('repo_push_event') + .values({ eventType: 'takedown', subjectDid: 'a' }) + .execute() + throw new Error('test tx failed') + }) + await expect(tx).rejects.toThrow('test tx failed') + + const attempt = leakedTx?.db + .insertInto('repo_push_event') + .values({ eventType: 'takedown', subjectDid: 'b' }) + .execute() + await expect(attempt).rejects.toThrow('tx already failed') + + const res = await db.db + .selectFrom('repo_push_event') + .selectAll() + .where('subjectDid', 'in', ['a', 'b']) + .execute() + + expect(res.length).toBe(0) + }) + + it('ensures all inflight queries are rolled back', async () => { + let promise: Promise | undefined = undefined + const names: string[] = [] + try { + await db.transaction(async (dbTxn) => { + const queries: Promise[] = [] + for (let i = 0; i < 20; i++) { + const name = `user${i}` + const query = dbTxn.db + .insertInto('repo_push_event') + .values({ + eventType: 'takedown', + subjectDid: name, + }) + .execute() + names.push(name) + queries.push(query) + } + promise = Promise.allSettled(queries) + throw new Error() + }) + } catch (err) { + expect(err).toBeDefined() + } + if (promise) { + await promise + } + + const res = await db.db + .selectFrom('repo_push_event') + .selectAll() + .where('subjectDid', 'in', names) + .execute() + expect(res.length).toBe(0) + }) + }) +}) diff --git a/packages/bsky/tests/admin/get-record.test.ts b/packages/ozone/tests/get-record.test.ts similarity index 92% rename from packages/bsky/tests/admin/get-record.test.ts rename to packages/ozone/tests/get-record.test.ts index 3807724fa6c..303e0f054d0 100644 --- a/packages/bsky/tests/admin/get-record.test.ts +++ b/packages/ozone/tests/get-record.test.ts @@ -1,12 +1,11 @@ -import { SeedClient, TestNetwork } from '@atproto/dev-env' +import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import AtpAgent from '@atproto/api' import { AtUri } from '@atproto/syntax' import { REASONOTHER, REASONSPAM, -} from '../../src/lexicon/types/com/atproto/moderation/defs' -import { forSnapshot } from '../_util' -import basicSeed from '../seeds/basic' +} from '../src/lexicon/types/com/atproto/moderation/defs' +import { forSnapshot } from './_util' describe('admin get record view', () => { let network: TestNetwork @@ -15,7 +14,7 @@ describe('admin get record view', () => { beforeAll(async () => { network = await TestNetwork.create({ - dbPostgresSchema: 'views_admin_get_record', + dbPostgresSchema: 'ozone_admin_get_record', }) agent = network.pds.getClient() sc = network.getSeedClient() diff --git a/packages/bsky/tests/admin/get-repo.test.ts b/packages/ozone/tests/get-repo.test.ts similarity index 93% rename from packages/bsky/tests/admin/get-repo.test.ts rename to packages/ozone/tests/get-repo.test.ts index 1e95f8cc0fc..1e0491465f5 100644 --- a/packages/bsky/tests/admin/get-repo.test.ts +++ b/packages/ozone/tests/get-repo.test.ts @@ -1,11 +1,10 @@ -import { SeedClient, TestNetwork } from '@atproto/dev-env' +import { SeedClient, TestNetwork, basicSeed } from '@atproto/dev-env' import AtpAgent from '@atproto/api' import { REASONOTHER, REASONSPAM, -} from '../../src/lexicon/types/com/atproto/moderation/defs' -import { forSnapshot } from '../_util' -import basicSeed from '../seeds/basic' +} from '../src/lexicon/types/com/atproto/moderation/defs' +import { forSnapshot } from './_util' describe('admin get repo view', () => { let network: TestNetwork @@ -14,7 +13,7 @@ describe('admin get repo view', () => { beforeAll(async () => { network = await TestNetwork.create({ - dbPostgresSchema: 'views_admin_get_repo', + dbPostgresSchema: 'ozone_admin_get_repo', }) agent = network.pds.getClient() sc = network.getSeedClient() diff --git a/packages/bsky/tests/admin/moderation-appeals.test.ts b/packages/ozone/tests/moderation-appeals.test.ts similarity index 94% rename from packages/bsky/tests/admin/moderation-appeals.test.ts rename to packages/ozone/tests/moderation-appeals.test.ts index 8b2af9a5a42..81f230bef82 100644 --- a/packages/bsky/tests/admin/moderation-appeals.test.ts +++ b/packages/ozone/tests/moderation-appeals.test.ts @@ -1,20 +1,19 @@ -import { TestNetwork, SeedClient } from '@atproto/dev-env' +import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' import AtpAgent, { ComAtprotoAdminDefs, ComAtprotoAdminEmitModerationEvent, ComAtprotoAdminQueryModerationStatuses, } from '@atproto/api' -import basicSeed from '../seeds/basic' import { REASONMISLEADING, REASONSPAM, -} from '../../src/lexicon/types/com/atproto/moderation/defs' +} from '../src/lexicon/types/com/atproto/moderation/defs' import { REVIEWCLOSED, REVIEWOPEN, } from '@atproto/api/src/client/types/com/atproto/admin/defs' import { REASONAPPEAL } from '@atproto/api/src/client/types/com/atproto/moderation/defs' -import { REVIEWESCALATED } from '../../src/lexicon/types/com/atproto/admin/defs' +import { REVIEWESCALATED } from '../src/lexicon/types/com/atproto/admin/defs' describe('moderation-appeals', () => { let network: TestNetwork @@ -27,7 +26,7 @@ describe('moderation-appeals', () => { ) => { return pdsAgent.api.com.atproto.admin.emitModerationEvent(eventData, { encoding: 'application/json', - headers: network.bsky.adminAuthHeaders('moderator'), + headers: network.ozone.adminAuthHeaders('moderator'), }) } @@ -35,14 +34,14 @@ describe('moderation-appeals', () => { statusQuery: ComAtprotoAdminQueryModerationStatuses.QueryParams, ) => agent.api.com.atproto.admin.queryModerationStatuses(statusQuery, { - headers: network.bsky.adminAuthHeaders('moderator'), + headers: network.ozone.adminAuthHeaders('moderator'), }) beforeAll(async () => { network = await TestNetwork.create({ - dbPostgresSchema: 'bsky_moderation_statuses', + dbPostgresSchema: 'ozone_moderation_statuses', }) - agent = network.bsky.getClient() + agent = network.ozone.getClient() pdsAgent = network.pds.getClient() sc = network.getSeedClient() await basicSeed(sc) @@ -65,6 +64,7 @@ describe('moderation-appeals', () => { expect(data.subjectStatuses[0]?.appealed).toEqual(appealed) return data.subjectStatuses[0] } + describe('appeals from users', () => { const getBobsPostSubject = () => ({ $type: 'com.atproto.repo.strongRef', diff --git a/packages/bsky/tests/admin/moderation-events.test.ts b/packages/ozone/tests/moderation-events.test.ts similarity index 94% rename from packages/bsky/tests/admin/moderation-events.test.ts rename to packages/ozone/tests/moderation-events.test.ts index 174167034db..73149dc06d8 100644 --- a/packages/bsky/tests/admin/moderation-events.test.ts +++ b/packages/ozone/tests/moderation-events.test.ts @@ -1,11 +1,10 @@ -import { TestNetwork, SeedClient } from '@atproto/dev-env' +import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' import AtpAgent, { ComAtprotoAdminDefs } from '@atproto/api' -import { forSnapshot } from '../_util' -import basicSeed from '../seeds/basic' +import { forSnapshot } from './_util' import { REASONMISLEADING, REASONSPAM, -} from '../../src/lexicon/types/com/atproto/moderation/defs' +} from '../src/lexicon/types/com/atproto/moderation/defs' describe('moderation-events', () => { let network: TestNetwork @@ -71,9 +70,9 @@ describe('moderation-events', () => { beforeAll(async () => { network = await TestNetwork.create({ - dbPostgresSchema: 'bsky_moderation_events', + dbPostgresSchema: 'ozone_moderation_events', }) - agent = network.bsky.getClient() + agent = network.ozone.getClient() pdsAgent = network.pds.getClient() sc = network.getSeedClient() await basicSeed(sc) @@ -197,10 +196,10 @@ describe('moderation-events', () => { const defaultEvents = await getPaginatedEvents() const reversedEvents = await getPaginatedEvents('asc') - expect(allEvents.data.events.length).toEqual(4) + expect(allEvents.data.events.length).toEqual(5) expect(defaultEvents.length).toEqual(allEvents.data.events.length) expect(reversedEvents.length).toEqual(allEvents.data.events.length) - expect(reversedEvents[0].id).toEqual(defaultEvents[3].id) + expect(reversedEvents[0].id).toEqual(defaultEvents[4].id) }) }) diff --git a/packages/bsky/tests/admin/moderation-statuses.test.ts b/packages/ozone/tests/moderation-statuses.test.ts similarity index 93% rename from packages/bsky/tests/admin/moderation-statuses.test.ts rename to packages/ozone/tests/moderation-statuses.test.ts index 5109cc43b0e..5f63dbfe9a4 100644 --- a/packages/bsky/tests/admin/moderation-statuses.test.ts +++ b/packages/ozone/tests/moderation-statuses.test.ts @@ -1,14 +1,13 @@ -import { TestNetwork, SeedClient } from '@atproto/dev-env' +import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env' import AtpAgent, { ComAtprotoAdminDefs, ComAtprotoAdminQueryModerationStatuses, } from '@atproto/api' -import { forSnapshot } from '../_util' -import basicSeed from '../seeds/basic' +import { forSnapshot } from './_util' import { REASONMISLEADING, REASONSPAM, -} from '../../src/lexicon/types/com/atproto/moderation/defs' +} from '../src/lexicon/types/com/atproto/moderation/defs' describe('moderation-statuses', () => { let network: TestNetwork @@ -74,9 +73,9 @@ describe('moderation-statuses', () => { beforeAll(async () => { network = await TestNetwork.create({ - dbPostgresSchema: 'bsky_moderation_statuses', + dbPostgresSchema: 'ozone_moderation_statuses', }) - agent = network.bsky.getClient() + agent = network.ozone.getClient() pdsAgent = network.pds.getClient() sc = network.getSeedClient() await basicSeed(sc) diff --git a/packages/ozone/tests/moderation.test.ts b/packages/ozone/tests/moderation.test.ts new file mode 100644 index 00000000000..20cab2f2b49 --- /dev/null +++ b/packages/ozone/tests/moderation.test.ts @@ -0,0 +1,961 @@ +import { + TestNetwork, + ImageRef, + RecordRef, + SeedClient, + basicSeed, +} from '@atproto/dev-env' +import AtpAgent, { + ComAtprotoAdminEmitModerationEvent, + ComAtprotoAdminQueryModerationStatuses, + ComAtprotoModerationCreateReport, +} from '@atproto/api' +import { AtUri } from '@atproto/syntax' +import { forSnapshot } from './_util' +import { + REASONMISLEADING, + REASONOTHER, + REASONSPAM, +} from '../src/lexicon/types/com/atproto/moderation/defs' +import { + ModEventLabel, + ModEventTakedown, + REVIEWCLOSED, + REVIEWESCALATED, +} from '../src/lexicon/types/com/atproto/admin/defs' +import { EventReverser } from '../src' +import { TestOzone } from '@atproto/dev-env/src/ozone' + +type BaseCreateReportParams = + | { account: string } + | { content: { uri: string; cid: string } } +type CreateReportParams = BaseCreateReportParams & { + author: string +} & Omit + +type TakedownParams = BaseCreateReportParams & + Omit + +describe('moderation', () => { + let network: TestNetwork + let ozone: TestOzone + let agent: AtpAgent + let pdsAgent: AtpAgent + let sc: SeedClient + + const createReport = async (params: CreateReportParams) => { + const { author, ...rest } = params + return agent.api.com.atproto.moderation.createReport( + { + // Set default type to spam + reasonType: REASONSPAM, + ...rest, + subject: + 'account' in params + ? { + $type: 'com.atproto.admin.defs#repoRef', + did: params.account, + } + : { + $type: 'com.atproto.repo.strongRef', + uri: params.content.uri, + cid: params.content.cid, + }, + }, + { + headers: await network.serviceHeaders( + author, + network.ozone.ctx.cfg.service.did, + ), + encoding: 'application/json', + }, + ) + } + + const performTakedown = async ({ + durationInHours, + ...rest + }: TakedownParams & Pick) => + agent.api.com.atproto.admin.emitModerationEvent( + { + event: { + $type: 'com.atproto.admin.defs#modEventTakedown', + durationInHours, + }, + subject: + 'account' in rest + ? { + $type: 'com.atproto.admin.defs#repoRef', + did: rest.account, + } + : { + $type: 'com.atproto.repo.strongRef', + uri: rest.content.uri, + cid: rest.content.cid, + }, + createdBy: 'did:example:admin', + ...rest, + }, + { + encoding: 'application/json', + headers: ozone.adminAuthHeaders(), + }, + ) + + const performReverseTakedown = async (params: TakedownParams) => + agent.api.com.atproto.admin.emitModerationEvent( + { + event: { + $type: 'com.atproto.admin.defs#modEventReverseTakedown', + }, + subject: + 'account' in params + ? { + $type: 'com.atproto.admin.defs#repoRef', + did: params.account, + } + : { + $type: 'com.atproto.repo.strongRef', + uri: params.content.uri, + cid: params.content.cid, + }, + createdBy: 'did:example:admin', + ...params, + }, + { + encoding: 'application/json', + headers: ozone.adminAuthHeaders(), + }, + ) + + const getStatuses = async ( + params: ComAtprotoAdminQueryModerationStatuses.QueryParams, + ) => { + const { data } = await agent.api.com.atproto.admin.queryModerationStatuses( + params, + { headers: ozone.adminAuthHeaders() }, + ) + + return data + } + + beforeAll(async () => { + network = await TestNetwork.create({ + dbPostgresSchema: 'ozone_moderation', + }) + ozone = network.ozone + agent = network.ozone.getClient() + pdsAgent = network.pds.getClient() + sc = network.getSeedClient() + await basicSeed(sc) + await network.processAll() + }) + + afterAll(async () => { + await network.close() + }) + + describe('reporting', () => { + it('creates reports of a repo.', async () => { + const { data: reportA } = await createReport({ + reasonType: REASONSPAM, + account: sc.dids.bob, + author: sc.dids.alice, + }) + const { data: reportB } = await createReport({ + reasonType: REASONOTHER, + reason: 'impersonation', + account: sc.dids.bob, + author: sc.dids.carol, + }) + expect(forSnapshot([reportA, reportB])).toMatchSnapshot() + }) + + it("allows reporting a repo that doesn't exist.", async () => { + const promise = createReport({ + reasonType: REASONSPAM, + account: 'did:plc:unknown', + author: sc.dids.alice, + }) + await expect(promise).resolves.toBeDefined() + }) + + it('creates reports of a record.', async () => { + const postA = sc.posts[sc.dids.bob][0].ref + const postB = sc.posts[sc.dids.bob][1].ref + const { data: reportA } = await createReport({ + author: sc.dids.alice, + reasonType: REASONSPAM, + content: { + $type: 'com.atproto.repo.strongRef', + uri: postA.uriStr, + cid: postA.cidStr, + }, + }) + const { data: reportB } = await createReport({ + reasonType: REASONOTHER, + reason: 'defamation', + content: { + $type: 'com.atproto.repo.strongRef', + uri: postB.uriStr, + cid: postB.cidStr, + }, + author: sc.dids.carol, + }) + expect(forSnapshot([reportA, reportB])).toMatchSnapshot() + }) + + it("allows reporting a record that doesn't exist.", async () => { + const postA = sc.posts[sc.dids.bob][0].ref + const postB = sc.posts[sc.dids.bob][1].ref + const postUriBad = new AtUri(postA.uriStr) + postUriBad.rkey = 'badrkey' + + const promiseA = createReport({ + reasonType: REASONSPAM, + content: { + $type: 'com.atproto.repo.strongRef', + uri: postUriBad.toString(), + cid: postA.cidStr, + }, + author: sc.dids.alice, + }) + await expect(promiseA).resolves.toBeDefined() + + const promiseB = createReport({ + reasonType: REASONOTHER, + reason: 'defamation', + content: { + $type: 'com.atproto.repo.strongRef', + uri: postB.uri.toString(), + cid: postA.cidStr, // bad cid + }, + author: sc.dids.carol, + }) + await expect(promiseB).resolves.toBeDefined() + }) + }) + + describe('actioning', () => { + it('resolves reports on repos and records.', async () => { + const post = sc.posts[sc.dids.bob][1].ref + + await Promise.all([ + createReport({ + reasonType: REASONSPAM, + account: sc.dids.bob, + author: sc.dids.alice, + }), + createReport({ + reasonType: REASONOTHER, + reason: 'defamation', + content: { + uri: post.uri.toString(), + cid: post.cid.toString(), + }, + author: sc.dids.carol, + }), + ]) + + await performTakedown({ + account: sc.dids.bob, + }) + + const moderationStatusOnBobsAccount = await getStatuses({ + subject: sc.dids.bob, + }) + + // Validate that subject status is set to review closed and takendown flag is on + expect(moderationStatusOnBobsAccount.subjectStatuses[0]).toMatchObject({ + reviewState: REVIEWCLOSED, + takendown: true, + subject: { + $type: 'com.atproto.admin.defs#repoRef', + did: sc.dids.bob, + }, + }) + + // Cleanup + await performReverseTakedown({ + account: sc.dids.bob, + }) + }) + + it('supports escalating a subject', async () => { + const alicesPostRef = sc.posts[sc.dids.alice][0].ref + const alicesPostSubject = { + $type: 'com.atproto.repo.strongRef', + uri: alicesPostRef.uri.toString(), + cid: alicesPostRef.cid.toString(), + } + await agent.api.com.atproto.admin.emitModerationEvent( + { + event: { + $type: 'com.atproto.admin.defs#modEventEscalate', + comment: 'Y', + }, + subject: alicesPostSubject, + createdBy: 'did:example:admin', + }, + { + encoding: 'application/json', + headers: ozone.adminAuthHeaders('triage'), + }, + ) + + const alicesPostStatus = await getStatuses({ + subject: alicesPostRef.uri.toString(), + }) + + expect(alicesPostStatus.subjectStatuses[0]).toMatchObject({ + reviewState: REVIEWESCALATED, + takendown: false, + subject: alicesPostSubject, + }) + }) + + it('adds persistent comment on subject through comment event', async () => { + const alicesPostRef = sc.posts[sc.dids.alice][0].ref + const alicesPostSubject = { + $type: 'com.atproto.repo.strongRef', + uri: alicesPostRef.uri.toString(), + cid: alicesPostRef.cid.toString(), + } + await agent.api.com.atproto.admin.emitModerationEvent( + { + event: { + $type: 'com.atproto.admin.defs#modEventComment', + sticky: true, + comment: 'This is a persistent note', + }, + subject: alicesPostSubject, + createdBy: 'did:example:admin', + }, + { + encoding: 'application/json', + headers: ozone.adminAuthHeaders('triage'), + }, + ) + + const alicesPostStatus = await getStatuses({ + subject: alicesPostRef.uri.toString(), + }) + + expect(alicesPostStatus.subjectStatuses[0].comment).toEqual( + 'This is a persistent note', + ) + }) + + it('reverses status when revert event is triggered.', async () => { + const alicesPostRef = sc.posts[sc.dids.alice][0].ref + const emitModEvent = async ( + event: ComAtprotoAdminEmitModerationEvent.InputSchema['event'], + overwrites: Partial = {}, + ) => { + const baseAction = { + subject: { + $type: 'com.atproto.repo.strongRef', + uri: alicesPostRef.uriStr, + cid: alicesPostRef.cidStr, + }, + createdBy: 'did:example:admin', + } + return agent.api.com.atproto.admin.emitModerationEvent( + { + event, + ...baseAction, + ...overwrites, + }, + { + encoding: 'application/json', + headers: ozone.adminAuthHeaders(), + }, + ) + } + // Validate that subject status is marked as escalated + await emitModEvent({ + $type: 'com.atproto.admin.defs#modEventReport', + reportType: REASONSPAM, + }) + await emitModEvent({ + $type: 'com.atproto.admin.defs#modEventReport', + reportType: REASONMISLEADING, + }) + await emitModEvent({ + $type: 'com.atproto.admin.defs#modEventEscalate', + }) + const alicesPostStatusAfterEscalation = await getStatuses({ + subject: alicesPostRef.uriStr, + }) + expect( + alicesPostStatusAfterEscalation.subjectStatuses[0].reviewState, + ).toEqual(REVIEWESCALATED) + + // Validate that subject status is marked as takendown + + await emitModEvent({ + $type: 'com.atproto.admin.defs#modEventLabel', + createLabelVals: ['nsfw'], + negateLabelVals: [], + }) + await emitModEvent({ + $type: 'com.atproto.admin.defs#modEventTakedown', + }) + + const alicesPostStatusAfterTakedown = await getStatuses({ + subject: alicesPostRef.uriStr, + }) + expect(alicesPostStatusAfterTakedown.subjectStatuses[0]).toMatchObject({ + reviewState: REVIEWCLOSED, + takendown: true, + }) + + await emitModEvent({ + $type: 'com.atproto.admin.defs#modEventReverseTakedown', + }) + const alicesPostStatusAfterRevert = await getStatuses({ + subject: alicesPostRef.uriStr, + }) + // Validate that after reverting, the status of the subject is reverted to the last status changing event + expect(alicesPostStatusAfterRevert.subjectStatuses[0]).toMatchObject({ + reviewState: REVIEWCLOSED, + takendown: false, + }) + // Validate that after reverting, the last review date of the subject + // DOES NOT update to the the last status changing event + expect( + new Date( + alicesPostStatusAfterEscalation.subjectStatuses[0] + .lastReviewedAt as string, + ) < + new Date( + alicesPostStatusAfterRevert.subjectStatuses[0] + .lastReviewedAt as string, + ), + ).toBeTruthy() + }) + + it('negates an existing label.', async () => { + const { ctx } = ozone + const post = sc.posts[sc.dids.bob][0].ref + const bobsPostSubject = { + $type: 'com.atproto.repo.strongRef', + uri: post.uriStr, + cid: post.cidStr, + } + const modService = ctx.modService(ctx.db) + await modService.formatAndCreateLabels( + ctx.cfg.service.did, + post.uriStr, + post.cidStr, + { create: ['kittens'] }, + ) + await emitLabelEvent({ + negateLabelVals: ['kittens'], + createLabelVals: [], + subject: bobsPostSubject, + }) + await expect(getRecordLabels(post.uriStr)).resolves.toEqual([]) + + await emitLabelEvent({ + createLabelVals: ['kittens'], + negateLabelVals: [], + subject: bobsPostSubject, + }) + await expect(getRecordLabels(post.uriStr)).resolves.toEqual(['kittens']) + // Cleanup + await modService.formatAndCreateLabels( + ctx.cfg.service.did, + post.uriStr, + post.cidStr, + { negate: ['kittens'] }, + ) + }) + + it('no-ops when negating an already-negated label and reverses.', async () => { + const { ctx } = ozone + const post = sc.posts[sc.dids.bob][0].ref + const modService = ctx.modService(ctx.db) + await emitLabelEvent({ + negateLabelVals: ['bears'], + createLabelVals: [], + subject: { + $type: 'com.atproto.repo.strongRef', + uri: post.uriStr, + cid: post.cidStr, + }, + }) + await expect(getRecordLabels(post.uriStr)).resolves.toEqual([]) + await emitLabelEvent({ + createLabelVals: ['bears'], + negateLabelVals: [], + subject: { + $type: 'com.atproto.repo.strongRef', + uri: post.uriStr, + cid: post.cidStr, + }, + }) + await expect(getRecordLabels(post.uriStr)).resolves.toEqual(['bears']) + // Cleanup + await modService.formatAndCreateLabels( + ctx.cfg.service.did, + post.uriStr, + post.cidStr, + { negate: ['bears'] }, + ) + }) + + it('creates non-existing labels and reverses.', async () => { + const post = sc.posts[sc.dids.bob][0].ref + await emitLabelEvent({ + createLabelVals: ['puppies', 'doggies'], + negateLabelVals: [], + subject: { + $type: 'com.atproto.repo.strongRef', + uri: post.uriStr, + cid: post.cidStr, + }, + }) + await expect(getRecordLabels(post.uriStr)).resolves.toEqual([ + 'puppies', + 'doggies', + ]) + await emitLabelEvent({ + negateLabelVals: ['puppies', 'doggies'], + createLabelVals: [], + subject: { + $type: 'com.atproto.repo.strongRef', + uri: post.uriStr, + cid: post.cidStr, + }, + }) + await expect(getRecordLabels(post.uriStr)).resolves.toEqual([]) + }) + + it('creates labels on a repo and reverses.', async () => { + await emitLabelEvent({ + createLabelVals: ['puppies', 'doggies'], + negateLabelVals: [], + subject: { + $type: 'com.atproto.admin.defs#repoRef', + did: sc.dids.bob, + }, + }) + await expect(getRepoLabels(sc.dids.bob)).resolves.toEqual([ + 'puppies', + 'doggies', + ]) + await emitLabelEvent({ + negateLabelVals: ['puppies', 'doggies'], + createLabelVals: [], + subject: { + $type: 'com.atproto.admin.defs#repoRef', + did: sc.dids.bob, + }, + }) + await expect(getRepoLabels(sc.dids.bob)).resolves.toEqual([]) + }) + + it('creates and negates labels on a repo and reverses.', async () => { + const { ctx } = ozone + const modService = ctx.modService(ctx.db) + await modService.formatAndCreateLabels( + ctx.cfg.service.did, + sc.dids.bob, + null, + { create: ['kittens'] }, + ) + await emitLabelEvent({ + createLabelVals: ['puppies'], + negateLabelVals: ['kittens'], + subject: { + $type: 'com.atproto.admin.defs#repoRef', + did: sc.dids.bob, + }, + }) + await expect(getRepoLabels(sc.dids.bob)).resolves.toEqual(['puppies']) + + await emitLabelEvent({ + negateLabelVals: ['puppies'], + createLabelVals: ['kittens'], + subject: { + $type: 'com.atproto.admin.defs#repoRef', + did: sc.dids.bob, + }, + }) + await expect(getRepoLabels(sc.dids.bob)).resolves.toEqual(['kittens']) + }) + + it('does not allow triage moderators to label.', async () => { + const attemptLabel = agent.api.com.atproto.admin.emitModerationEvent( + { + event: { + $type: 'com.atproto.admin.defs#modEventLabel', + negateLabelVals: ['a'], + createLabelVals: ['b', 'c'], + }, + createdBy: 'did:example:moderator', + reason: 'Y', + subject: { + $type: 'com.atproto.admin.defs#repoRef', + did: sc.dids.bob, + }, + }, + { + encoding: 'application/json', + headers: network.bsky.adminAuthHeaders('triage'), + }, + ) + await expect(attemptLabel).rejects.toThrow( + 'Must be a full moderator to label content', + ) + }) + + it('does not allow take down event on takendown post or reverse takedown on available post.', async () => { + await performTakedown({ + account: sc.dids.bob, + }) + await expect( + performTakedown({ + account: sc.dids.bob, + }), + ).rejects.toThrow('Subject is already taken down') + + // Cleanup + await performReverseTakedown({ + account: sc.dids.bob, + }) + await expect( + performReverseTakedown({ + account: sc.dids.bob, + }), + ).rejects.toThrow('Subject is not taken down') + }) + + it('fans out repo takedowns to pds', async () => { + await performTakedown({ + account: sc.dids.bob, + }) + await ozone.processAll() + + const res1 = await pdsAgent.api.com.atproto.admin.getSubjectStatus( + { + did: sc.dids.bob, + }, + { headers: network.pds.adminAuthHeaders() }, + ) + expect(res1.data.takedown?.applied).toBe(true) + + // cleanup + await performReverseTakedown({ account: sc.dids.bob }) + await ozone.processAll() + + const res2 = await pdsAgent.api.com.atproto.admin.getSubjectStatus( + { + did: sc.dids.bob, + }, + { headers: network.pds.adminAuthHeaders() }, + ) + expect(res2.data.takedown?.applied).toBe(false) + }) + + it('fans out record takedowns to pds', async () => { + const post = sc.posts[sc.dids.bob][0] + const uri = post.ref.uriStr + const cid = post.ref.cidStr + await performTakedown({ + content: { uri, cid }, + }) + await ozone.processAll() + const res1 = await pdsAgent.api.com.atproto.admin.getSubjectStatus( + { uri }, + { headers: network.pds.adminAuthHeaders() }, + ) + expect(res1.data.takedown?.applied).toBe(true) + + // cleanup + await performReverseTakedown({ content: { uri, cid } }) + await ozone.processAll() + + const res2 = await pdsAgent.api.com.atproto.admin.getSubjectStatus( + { uri }, + { headers: network.pds.adminAuthHeaders() }, + ) + expect(res2.data.takedown?.applied).toBe(false) + }) + + it('allows full moderators to takedown.', async () => { + await agent.api.com.atproto.admin.emitModerationEvent( + { + event: { + $type: 'com.atproto.admin.defs#modEventTakedown', + }, + createdBy: 'did:example:moderator', + subject: { + $type: 'com.atproto.admin.defs#repoRef', + did: sc.dids.bob, + }, + }, + { + encoding: 'application/json', + headers: network.bsky.adminAuthHeaders('moderator'), + }, + ) + // cleanup + await reverse({ + subject: { + $type: 'com.atproto.admin.defs#repoRef', + did: sc.dids.bob, + }, + }) + }) + + it('does not allow non-full moderators to takedown.', async () => { + const attemptTakedownTriage = + agent.api.com.atproto.admin.emitModerationEvent( + { + event: { + $type: 'com.atproto.admin.defs#modEventTakedown', + }, + createdBy: 'did:example:moderator', + subject: { + $type: 'com.atproto.admin.defs#repoRef', + did: sc.dids.bob, + }, + }, + { + encoding: 'application/json', + headers: network.bsky.adminAuthHeaders('triage'), + }, + ) + await expect(attemptTakedownTriage).rejects.toThrow( + 'Must be a full moderator to perform an account takedown', + ) + }) + it('automatically reverses actions marked with duration', async () => { + await createReport({ + reasonType: REASONSPAM, + account: sc.dids.bob, + author: sc.dids.alice, + }) + const { data: action } = await performTakedown({ + account: sc.dids.bob, + // Use negative value to set the expiry time in the past so that the action is automatically reversed + // right away without having to wait n number of hours for a successful assertion + durationInHours: -1, + }) + await ozone.processAll() + + const { data: statusesAfterTakedown } = + await agent.api.com.atproto.admin.queryModerationStatuses( + { subject: sc.dids.bob }, + { headers: network.bsky.adminAuthHeaders('moderator') }, + ) + + expect(statusesAfterTakedown.subjectStatuses[0]).toMatchObject({ + takendown: true, + }) + + // In the actual app, this will be instantiated and run on server startup + const reverser = new EventReverser( + network.ozone.ctx.db, + network.ozone.ctx.modService, + ) + await reverser.findAndRevertDueActions() + await ozone.processAll() + + const [{ data: eventList }, { data: statuses }] = await Promise.all([ + agent.api.com.atproto.admin.queryModerationEvents( + { subject: sc.dids.bob }, + { headers: network.bsky.adminAuthHeaders('moderator') }, + ), + agent.api.com.atproto.admin.queryModerationStatuses( + { subject: sc.dids.bob }, + { headers: network.bsky.adminAuthHeaders('moderator') }, + ), + ]) + + expect(statuses.subjectStatuses[0]).toMatchObject({ + takendown: false, + reviewState: REVIEWCLOSED, + }) + // Verify that the automatic reversal is attributed to the original moderator of the temporary action + // and that the reason is set to indicate that the action was automatically reversed. + expect(eventList.events[0]).toMatchObject({ + createdBy: action.createdBy, + event: { + $type: 'com.atproto.admin.defs#modEventReverseTakedown', + comment: + '[SCHEDULED_REVERSAL] Reverting action as originally scheduled', + }, + }) + }) + + async function emitLabelEvent( + opts: Partial & { + subject: ComAtprotoAdminEmitModerationEvent.InputSchema['subject'] + createLabelVals: ModEventLabel['createLabelVals'] + negateLabelVals: ModEventLabel['negateLabelVals'] + }, + ) { + const { createLabelVals, negateLabelVals } = opts + const result = await agent.api.com.atproto.admin.emitModerationEvent( + { + event: { + $type: 'com.atproto.admin.defs#modEventLabel', + createLabelVals, + negateLabelVals, + }, + createdBy: 'did:example:admin', + reason: 'Y', + ...opts, + }, + { + encoding: 'application/json', + headers: network.bsky.adminAuthHeaders(), + }, + ) + return result.data + } + + async function reverse( + opts: Partial & { + subject: ComAtprotoAdminEmitModerationEvent.InputSchema['subject'] + }, + ) { + await agent.api.com.atproto.admin.emitModerationEvent( + { + event: { + $type: 'com.atproto.admin.defs#modEventReverseTakedown', + }, + createdBy: 'did:example:admin', + reason: 'Y', + ...opts, + }, + { + encoding: 'application/json', + headers: network.bsky.adminAuthHeaders(), + }, + ) + } + + async function getRecordLabels(uri: string) { + const result = await agent.api.com.atproto.admin.getRecord( + { uri }, + { headers: network.bsky.adminAuthHeaders() }, + ) + const labels = result.data.labels ?? [] + return labels.map((l) => l.val) + } + + async function getRepoLabels(did: string) { + const result = await agent.api.com.atproto.admin.getRepo( + { did }, + { headers: network.bsky.adminAuthHeaders() }, + ) + const labels = result.data.labels ?? [] + return labels.map((l) => l.val) + } + }) + + describe('blob takedown', () => { + let post: { ref: RecordRef; images: ImageRef[] } + let blob: ImageRef + let imageUri: string + beforeAll(async () => { + const { ctx } = network.bsky + post = sc.posts[sc.dids.carol][0] + blob = post.images[1] + imageUri = ctx.imgUriBuilder + .getPresetUri( + 'feed_thumbnail', + sc.dids.carol, + blob.image.ref.toString(), + ) + .replace(ctx.cfg.publicUrl || '', network.bsky.url) + // Warm image server cache + await fetch(imageUri) + const cached = await fetch(imageUri) + expect(cached.headers.get('x-cache')).toEqual('hit') + await performTakedown({ + content: { + uri: post.ref.uriStr, + cid: post.ref.cidStr, + }, + subjectBlobCids: [blob.image.ref.toString()], + }) + await ozone.processAll() + }) + + it('sets blobCids in moderation status', async () => { + const { subjectStatuses } = await getStatuses({ + subject: post.ref.uriStr, + }) + + expect(subjectStatuses[0].subjectBlobCids).toEqual([ + blob.image.ref.toString(), + ]) + }) + + it('prevents resolution of blob', async () => { + const blobPath = `/blob/${sc.dids.carol}/${blob.image.ref.toString()}` + const resolveBlob = await fetch(`${network.bsky.url}${blobPath}`) + expect(resolveBlob.status).toEqual(404) + expect(await resolveBlob.json()).toEqual({ + error: 'NotFoundError', + message: 'Blob not found', + }) + }) + + it('prevents image blob from being served, even when cached.', async () => { + const fetchImage = await fetch(imageUri) + expect(fetchImage.status).toEqual(404) + expect(await fetchImage.json()).toEqual({ message: 'Image not found' }) + }) + + it('fans takedown out to pds', async () => { + const res = await pdsAgent.api.com.atproto.admin.getSubjectStatus( + { + did: sc.dids.carol, + blob: blob.image.ref.toString(), + }, + { headers: network.pds.adminAuthHeaders() }, + ) + expect(res.data.takedown?.applied).toBe(true) + }) + + it('restores blob when action is reversed.', async () => { + await performReverseTakedown({ + content: { + uri: post.ref.uriStr, + cid: post.ref.cidStr, + }, + subjectBlobCids: [blob.image.ref.toString()], + }) + + await ozone.processAll() + + // Can resolve blob + const blobPath = `/blob/${sc.dids.carol}/${blob.image.ref.toString()}` + const resolveBlob = await fetch(`${network.bsky.url}${blobPath}`) + expect(resolveBlob.status).toEqual(200) + + // Can fetch through image server + const fetchImage = await fetch(imageUri) + expect(fetchImage.status).toEqual(200) + const size = Number(fetchImage.headers.get('content-length')) + expect(size).toBeGreaterThan(9000) + }) + + it('fans reversal out to pds', async () => { + const res = await pdsAgent.api.com.atproto.admin.getSubjectStatus( + { + did: sc.dids.carol, + blob: blob.image.ref.toString(), + }, + { headers: network.pds.adminAuthHeaders() }, + ) + expect(res.data.takedown?.applied).toBe(false) + }) + }) +}) diff --git a/packages/bsky/tests/admin/repo-search.test.ts b/packages/ozone/tests/repo-search.test.ts similarity index 94% rename from packages/bsky/tests/admin/repo-search.test.ts rename to packages/ozone/tests/repo-search.test.ts index 9e643ba12e0..0d41b014c1b 100644 --- a/packages/bsky/tests/admin/repo-search.test.ts +++ b/packages/ozone/tests/repo-search.test.ts @@ -1,7 +1,6 @@ -import { SeedClient, TestNetwork } from '@atproto/dev-env' +import { SeedClient, TestNetwork, usersBulkSeed } from '@atproto/dev-env' import AtpAgent from '@atproto/api' -import { paginateAll } from '../_util' -import usersBulkSeed from '../seeds/users-bulk' +import { paginateAll } from './_util' describe('admin repo search view', () => { let network: TestNetwork @@ -11,7 +10,7 @@ describe('admin repo search view', () => { beforeAll(async () => { network = await TestNetwork.create({ - dbPostgresSchema: 'views_admin_repo_search', + dbPostgresSchema: 'ozone_admin_repo_search', }) agent = network.pds.getClient() sc = network.getSeedClient() diff --git a/packages/ozone/tests/server.test.ts b/packages/ozone/tests/server.test.ts new file mode 100644 index 00000000000..4224a636739 --- /dev/null +++ b/packages/ozone/tests/server.test.ts @@ -0,0 +1,76 @@ +import { AddressInfo } from 'net' +import express from 'express' +import axios, { AxiosError } from 'axios' +import { TestNetwork } from '@atproto/dev-env' +import { handler as errorHandler } from '../src/error' +import { TestOzone } from '@atproto/dev-env/src/ozone' + +describe('server', () => { + let network: TestNetwork + let ozone: TestOzone + + beforeAll(async () => { + network = await TestNetwork.create({ + dbPostgresSchema: 'ozone_server', + }) + ozone = network.ozone + }) + + afterAll(async () => { + await network.close() + }) + + it('preserves 404s.', async () => { + const promise = axios.get(`${ozone.url}/unknown`) + await expect(promise).rejects.toThrow('failed with status code 404') + }) + + it('error handler turns unknown errors into 500s.', async () => { + const app = express() + app.get('/oops', () => { + throw new Error('Oops!') + }) + app.use(errorHandler) + const srv = app.listen() + const port = (srv.address() as AddressInfo).port + const promise = axios.get(`http://localhost:${port}/oops`) + await expect(promise).rejects.toThrow('failed with status code 500') + srv.close() + try { + await promise + } catch (err: unknown) { + const axiosError = err as AxiosError + expect(axiosError.response?.status).toEqual(500) + expect(axiosError.response?.data).toEqual({ + error: 'InternalServerError', + message: 'Internal Server Error', + }) + } + }) + + it('healthcheck succeeds when database is available.', async () => { + const { data, status } = await axios.get(`${ozone.url}/xrpc/_health`) + expect(status).toEqual(200) + expect(data).toEqual({ version: '0.0.0' }) + }) + + it('healthcheck fails when database is unavailable.', async () => { + await ozone.ctx.db.close() + let error: AxiosError + try { + await axios.get(`${ozone.url}/xrpc/_health`) + throw new Error('Healthcheck should have failed') + } catch (err) { + if (axios.isAxiosError(err)) { + error = err + } else { + throw err + } + } + expect(error.response?.status).toEqual(503) + expect(error.response?.data).toEqual({ + version: '0.0.0', + error: 'Service Unavailable', + }) + }) +}) diff --git a/packages/ozone/tsconfig.build.json b/packages/ozone/tsconfig.build.json new file mode 100644 index 00000000000..02a84823b65 --- /dev/null +++ b/packages/ozone/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["**/*.spec.ts", "**/*.test.ts"] +} diff --git a/packages/ozone/tsconfig.json b/packages/ozone/tsconfig.json new file mode 100644 index 00000000000..3f6ca1c27ec --- /dev/null +++ b/packages/ozone/tsconfig.json @@ -0,0 +1,21 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist", + "emitDeclarationOnly": true + }, + "module": "nodenext", + "include": ["./src", "__tests__/**/**.ts"], + "references": [ + { "path": "../api/tsconfig.build.json" }, + { "path": "../common/tsconfig.build.json" }, + { "path": "../crypto/tsconfig.build.json" }, + { "path": "../identifier/tsconfig.build.json" }, + { "path": "../lexicon/tsconfig.build.json" }, + { "path": "../lex-cli/tsconfig.build.json" }, + { "path": "../repo/tsconfig.build.json" }, + { "path": "../uri/tsconfig.build.json" }, + { "path": "../xrpc-server/tsconfig.build.json" } + ] +} diff --git a/packages/pds/src/api/app/bsky/actor/getProfile.ts b/packages/pds/src/api/app/bsky/actor/getProfile.ts index 4c4f0958abe..732c7babe1a 100644 --- a/packages/pds/src/api/app/bsky/actor/getProfile.ts +++ b/packages/pds/src/api/app/bsky/actor/getProfile.ts @@ -16,7 +16,7 @@ export default function (server: Server, ctx: AppContext) { auth.credentials.type === 'access' ? auth.credentials.did : null const res = await ctx.appViewAgent.api.app.bsky.actor.getProfile( params, - requester ? await ctx.serviceAuthHeaders(requester) : authPassthru(req), + requester ? await ctx.appviewAuthHeaders(requester) : authPassthru(req), ) if (res.data.did === requester) { return await handleReadAfterWrite(ctx, requester, res, getProfileMunge) diff --git a/packages/pds/src/api/app/bsky/actor/getProfiles.ts b/packages/pds/src/api/app/bsky/actor/getProfiles.ts index bc78a26044e..2f0f1405378 100644 --- a/packages/pds/src/api/app/bsky/actor/getProfiles.ts +++ b/packages/pds/src/api/app/bsky/actor/getProfiles.ts @@ -14,7 +14,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did const res = await ctx.appViewAgent.api.app.bsky.actor.getProfiles( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) const hasSelf = res.data.profiles.some((prof) => prof.did === requester) if (hasSelf) { diff --git a/packages/pds/src/api/app/bsky/actor/getSuggestions.ts b/packages/pds/src/api/app/bsky/actor/getSuggestions.ts index 70f6bb6adef..5fd8b260276 100644 --- a/packages/pds/src/api/app/bsky/actor/getSuggestions.ts +++ b/packages/pds/src/api/app/bsky/actor/getSuggestions.ts @@ -8,7 +8,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did const res = await ctx.appViewAgent.api.app.bsky.actor.getSuggestions( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/actor/searchActors.ts b/packages/pds/src/api/app/bsky/actor/searchActors.ts index 86b028f5242..7c184de1116 100644 --- a/packages/pds/src/api/app/bsky/actor/searchActors.ts +++ b/packages/pds/src/api/app/bsky/actor/searchActors.ts @@ -8,7 +8,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did const res = await ctx.appViewAgent.api.app.bsky.actor.searchActors( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/actor/searchActorsTypeahead.ts b/packages/pds/src/api/app/bsky/actor/searchActorsTypeahead.ts index 9e969c4700a..c1a8738488d 100644 --- a/packages/pds/src/api/app/bsky/actor/searchActorsTypeahead.ts +++ b/packages/pds/src/api/app/bsky/actor/searchActorsTypeahead.ts @@ -9,7 +9,7 @@ export default function (server: Server, ctx: AppContext) { const res = await ctx.appViewAgent.api.app.bsky.actor.searchActorsTypeahead( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/feed/getActorFeeds.ts b/packages/pds/src/api/app/bsky/feed/getActorFeeds.ts index 1a5f3a15ed3..384d68500d4 100644 --- a/packages/pds/src/api/app/bsky/feed/getActorFeeds.ts +++ b/packages/pds/src/api/app/bsky/feed/getActorFeeds.ts @@ -8,7 +8,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did const res = await ctx.appViewAgent.api.app.bsky.feed.getActorFeeds( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/feed/getActorLikes.ts b/packages/pds/src/api/app/bsky/feed/getActorLikes.ts index d0d18787f9d..07fb66fd828 100644 --- a/packages/pds/src/api/app/bsky/feed/getActorLikes.ts +++ b/packages/pds/src/api/app/bsky/feed/getActorLikes.ts @@ -17,7 +17,7 @@ export default function (server: Server, ctx: AppContext) { const res = await ctx.appViewAgent.api.app.bsky.feed.getActorLikes( params, - requester ? await ctx.serviceAuthHeaders(requester) : authPassthru(req), + requester ? await ctx.appviewAuthHeaders(requester) : authPassthru(req), ) if (requester) { return await handleReadAfterWrite(ctx, requester, res, getAuthorMunge) diff --git a/packages/pds/src/api/app/bsky/feed/getAuthorFeed.ts b/packages/pds/src/api/app/bsky/feed/getAuthorFeed.ts index 26c001990e3..17ae8f0ac10 100644 --- a/packages/pds/src/api/app/bsky/feed/getAuthorFeed.ts +++ b/packages/pds/src/api/app/bsky/feed/getAuthorFeed.ts @@ -17,7 +17,7 @@ export default function (server: Server, ctx: AppContext) { auth.credentials.type === 'access' ? auth.credentials.did : null const res = await ctx.appViewAgent.api.app.bsky.feed.getAuthorFeed( params, - requester ? await ctx.serviceAuthHeaders(requester) : authPassthru(req), + requester ? await ctx.appviewAuthHeaders(requester) : authPassthru(req), ) if (requester) { return await handleReadAfterWrite(ctx, requester, res, getAuthorMunge) diff --git a/packages/pds/src/api/app/bsky/feed/getFeed.ts b/packages/pds/src/api/app/bsky/feed/getFeed.ts index 3a768905dc2..82bb2e30b16 100644 --- a/packages/pds/src/api/app/bsky/feed/getFeed.ts +++ b/packages/pds/src/api/app/bsky/feed/getFeed.ts @@ -10,7 +10,7 @@ export default function (server: Server, ctx: AppContext) { const { data: feed } = await ctx.appViewAgent.api.app.bsky.feed.getFeedGenerator( { feed: params.feed }, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) const res = await ctx.appViewAgent.api.app.bsky.feed.getFeed( params, diff --git a/packages/pds/src/api/app/bsky/feed/getFeedGenerator.ts b/packages/pds/src/api/app/bsky/feed/getFeedGenerator.ts index 78ee243bc08..57c4731db53 100644 --- a/packages/pds/src/api/app/bsky/feed/getFeedGenerator.ts +++ b/packages/pds/src/api/app/bsky/feed/getFeedGenerator.ts @@ -8,7 +8,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did const res = await ctx.appViewAgent.api.app.bsky.feed.getFeedGenerator( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/feed/getFeedGenerators.ts b/packages/pds/src/api/app/bsky/feed/getFeedGenerators.ts index 064525afcec..1370fbbd6f3 100644 --- a/packages/pds/src/api/app/bsky/feed/getFeedGenerators.ts +++ b/packages/pds/src/api/app/bsky/feed/getFeedGenerators.ts @@ -8,7 +8,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did const res = await ctx.appViewAgent.api.app.bsky.feed.getFeedGenerators( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/feed/getLikes.ts b/packages/pds/src/api/app/bsky/feed/getLikes.ts index 20d96690ac6..ad656dfbd4c 100644 --- a/packages/pds/src/api/app/bsky/feed/getLikes.ts +++ b/packages/pds/src/api/app/bsky/feed/getLikes.ts @@ -8,7 +8,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did const res = await ctx.appViewAgent.api.app.bsky.feed.getLikes( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/feed/getListFeed.ts b/packages/pds/src/api/app/bsky/feed/getListFeed.ts index 7cc5d1f2bd2..06e2abcbfe5 100644 --- a/packages/pds/src/api/app/bsky/feed/getListFeed.ts +++ b/packages/pds/src/api/app/bsky/feed/getListFeed.ts @@ -8,7 +8,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did const res = await ctx.appViewAgent.api.app.bsky.feed.getListFeed( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/feed/getPostThread.ts b/packages/pds/src/api/app/bsky/feed/getPostThread.ts index 93cd5fd641f..00bf0b01d82 100644 --- a/packages/pds/src/api/app/bsky/feed/getPostThread.ts +++ b/packages/pds/src/api/app/bsky/feed/getPostThread.ts @@ -44,7 +44,7 @@ export default function (server: Server, ctx: AppContext) { try { const res = await ctx.appViewAgent.api.app.bsky.feed.getPostThread( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return await handleReadAfterWrite( @@ -207,7 +207,7 @@ const readAfterWriteNotFound = async ( try { const parentsRes = await ctx.appViewAgent.api.app.bsky.feed.getPostThread( { uri: highestParent, parentHeight: params.parentHeight, depth: 0 }, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) thread.parent = parentsRes.data.thread } catch (err) { diff --git a/packages/pds/src/api/app/bsky/feed/getPosts.ts b/packages/pds/src/api/app/bsky/feed/getPosts.ts index 2f7a75d71fc..f04927a4997 100644 --- a/packages/pds/src/api/app/bsky/feed/getPosts.ts +++ b/packages/pds/src/api/app/bsky/feed/getPosts.ts @@ -8,7 +8,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did const res = await ctx.appViewAgent.api.app.bsky.feed.getPosts( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/feed/getRepostedBy.ts b/packages/pds/src/api/app/bsky/feed/getRepostedBy.ts index b84a9dc27b7..e797967fc2a 100644 --- a/packages/pds/src/api/app/bsky/feed/getRepostedBy.ts +++ b/packages/pds/src/api/app/bsky/feed/getRepostedBy.ts @@ -8,7 +8,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did const res = await ctx.appViewAgent.api.app.bsky.feed.getRepostedBy( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/feed/getSuggestedFeeds.ts b/packages/pds/src/api/app/bsky/feed/getSuggestedFeeds.ts index 179570f6d4f..17fbf947471 100644 --- a/packages/pds/src/api/app/bsky/feed/getSuggestedFeeds.ts +++ b/packages/pds/src/api/app/bsky/feed/getSuggestedFeeds.ts @@ -8,7 +8,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did const res = await ctx.appViewAgent.api.app.bsky.feed.getSuggestedFeeds( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/feed/getTimeline.ts b/packages/pds/src/api/app/bsky/feed/getTimeline.ts index d8515bcbfbb..6139432580a 100644 --- a/packages/pds/src/api/app/bsky/feed/getTimeline.ts +++ b/packages/pds/src/api/app/bsky/feed/getTimeline.ts @@ -14,7 +14,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did const res = await ctx.appViewAgent.api.app.bsky.feed.getTimeline( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return await handleReadAfterWrite(ctx, requester, res, getTimelineMunge) }, diff --git a/packages/pds/src/api/app/bsky/feed/searchPosts.ts b/packages/pds/src/api/app/bsky/feed/searchPosts.ts index 85384751ea1..e9942432fde 100644 --- a/packages/pds/src/api/app/bsky/feed/searchPosts.ts +++ b/packages/pds/src/api/app/bsky/feed/searchPosts.ts @@ -8,7 +8,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did const res = await ctx.appViewAgent.api.app.bsky.feed.searchPosts( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/graph/getBlocks.ts b/packages/pds/src/api/app/bsky/graph/getBlocks.ts index 14aa3b3de5f..ff1f299f43f 100644 --- a/packages/pds/src/api/app/bsky/graph/getBlocks.ts +++ b/packages/pds/src/api/app/bsky/graph/getBlocks.ts @@ -8,7 +8,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did const res = await ctx.appViewAgent.api.app.bsky.graph.getBlocks( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/graph/getFollowers.ts b/packages/pds/src/api/app/bsky/graph/getFollowers.ts index e3e5d8ba64e..18f1e0df397 100644 --- a/packages/pds/src/api/app/bsky/graph/getFollowers.ts +++ b/packages/pds/src/api/app/bsky/graph/getFollowers.ts @@ -10,7 +10,7 @@ export default function (server: Server, ctx: AppContext) { auth.credentials.type === 'access' ? auth.credentials.did : null const res = await ctx.appViewAgent.api.app.bsky.graph.getFollowers( params, - requester ? await ctx.serviceAuthHeaders(requester) : authPassthru(req), + requester ? await ctx.appviewAuthHeaders(requester) : authPassthru(req), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/graph/getFollows.ts b/packages/pds/src/api/app/bsky/graph/getFollows.ts index 821b83fa359..91955965ed6 100644 --- a/packages/pds/src/api/app/bsky/graph/getFollows.ts +++ b/packages/pds/src/api/app/bsky/graph/getFollows.ts @@ -10,7 +10,7 @@ export default function (server: Server, ctx: AppContext) { auth.credentials.type === 'access' ? auth.credentials.did : null const res = await ctx.appViewAgent.api.app.bsky.graph.getFollows( params, - requester ? await ctx.serviceAuthHeaders(requester) : authPassthru(req), + requester ? await ctx.appviewAuthHeaders(requester) : authPassthru(req), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/graph/getList.ts b/packages/pds/src/api/app/bsky/graph/getList.ts index 6b4f3762d38..fb5776f5df2 100644 --- a/packages/pds/src/api/app/bsky/graph/getList.ts +++ b/packages/pds/src/api/app/bsky/graph/getList.ts @@ -8,7 +8,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did const res = await ctx.appViewAgent.api.app.bsky.graph.getList( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/graph/getListBlocks.ts b/packages/pds/src/api/app/bsky/graph/getListBlocks.ts index 4e1ba8de8ca..376de0ba914 100644 --- a/packages/pds/src/api/app/bsky/graph/getListBlocks.ts +++ b/packages/pds/src/api/app/bsky/graph/getListBlocks.ts @@ -8,7 +8,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did const res = await ctx.appViewAgent.api.app.bsky.graph.getListBlocks( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/graph/getListMutes.ts b/packages/pds/src/api/app/bsky/graph/getListMutes.ts index fc0d8c2f051..c489124642c 100644 --- a/packages/pds/src/api/app/bsky/graph/getListMutes.ts +++ b/packages/pds/src/api/app/bsky/graph/getListMutes.ts @@ -8,7 +8,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did const res = await ctx.appViewAgent.api.app.bsky.graph.getListMutes( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/graph/getLists.ts b/packages/pds/src/api/app/bsky/graph/getLists.ts index 0c680321f9c..61a1cb89079 100644 --- a/packages/pds/src/api/app/bsky/graph/getLists.ts +++ b/packages/pds/src/api/app/bsky/graph/getLists.ts @@ -8,7 +8,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did const res = await ctx.appViewAgent.api.app.bsky.graph.getLists( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/graph/getMutes.ts b/packages/pds/src/api/app/bsky/graph/getMutes.ts index 51177137b3a..0dc0e72412c 100644 --- a/packages/pds/src/api/app/bsky/graph/getMutes.ts +++ b/packages/pds/src/api/app/bsky/graph/getMutes.ts @@ -8,7 +8,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did const res = await ctx.appViewAgent.api.app.bsky.graph.getMutes( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/graph/getSuggestedFollowsByActor.ts b/packages/pds/src/api/app/bsky/graph/getSuggestedFollowsByActor.ts index b8d578bfd25..0a11361f05c 100644 --- a/packages/pds/src/api/app/bsky/graph/getSuggestedFollowsByActor.ts +++ b/packages/pds/src/api/app/bsky/graph/getSuggestedFollowsByActor.ts @@ -9,7 +9,7 @@ export default function (server: Server, ctx: AppContext) { const res = await ctx.appViewAgent.api.app.bsky.graph.getSuggestedFollowsByActor( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/graph/muteActor.ts b/packages/pds/src/api/app/bsky/graph/muteActor.ts index 7e38d21ee42..2b2f218b44d 100644 --- a/packages/pds/src/api/app/bsky/graph/muteActor.ts +++ b/packages/pds/src/api/app/bsky/graph/muteActor.ts @@ -8,7 +8,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did await ctx.appViewAgent.api.app.bsky.graph.muteActor(input.body, { - ...(await ctx.serviceAuthHeaders(requester)), + ...(await ctx.appviewAuthHeaders(requester)), encoding: 'application/json', }) }, diff --git a/packages/pds/src/api/app/bsky/graph/muteActorList.ts b/packages/pds/src/api/app/bsky/graph/muteActorList.ts index c224d85e3f3..97d524900f7 100644 --- a/packages/pds/src/api/app/bsky/graph/muteActorList.ts +++ b/packages/pds/src/api/app/bsky/graph/muteActorList.ts @@ -8,7 +8,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did await ctx.appViewAgent.api.app.bsky.graph.muteActorList(input.body, { - ...(await ctx.serviceAuthHeaders(requester)), + ...(await ctx.appviewAuthHeaders(requester)), encoding: 'application/json', }) }, diff --git a/packages/pds/src/api/app/bsky/graph/unmuteActor.ts b/packages/pds/src/api/app/bsky/graph/unmuteActor.ts index 37166420f31..0f7a1610321 100644 --- a/packages/pds/src/api/app/bsky/graph/unmuteActor.ts +++ b/packages/pds/src/api/app/bsky/graph/unmuteActor.ts @@ -8,7 +8,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did await ctx.appViewAgent.api.app.bsky.graph.unmuteActor(input.body, { - ...(await ctx.serviceAuthHeaders(requester)), + ...(await ctx.appviewAuthHeaders(requester)), encoding: 'application/json', }) }, diff --git a/packages/pds/src/api/app/bsky/graph/unmuteActorList.ts b/packages/pds/src/api/app/bsky/graph/unmuteActorList.ts index 0dea669feb6..aaf5225bded 100644 --- a/packages/pds/src/api/app/bsky/graph/unmuteActorList.ts +++ b/packages/pds/src/api/app/bsky/graph/unmuteActorList.ts @@ -8,7 +8,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did await ctx.appViewAgent.api.app.bsky.graph.unmuteActorList(input.body, { - ...(await ctx.serviceAuthHeaders(requester)), + ...(await ctx.appviewAuthHeaders(requester)), encoding: 'application/json', }) }, diff --git a/packages/pds/src/api/app/bsky/notification/getUnreadCount.ts b/packages/pds/src/api/app/bsky/notification/getUnreadCount.ts index da8be8aec50..bca4bf3d46f 100644 --- a/packages/pds/src/api/app/bsky/notification/getUnreadCount.ts +++ b/packages/pds/src/api/app/bsky/notification/getUnreadCount.ts @@ -9,7 +9,7 @@ export default function (server: Server, ctx: AppContext) { const res = await ctx.appViewAgent.api.app.bsky.notification.getUnreadCount( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/notification/listNotifications.ts b/packages/pds/src/api/app/bsky/notification/listNotifications.ts index 21f4e8db642..4a514ae03f4 100644 --- a/packages/pds/src/api/app/bsky/notification/listNotifications.ts +++ b/packages/pds/src/api/app/bsky/notification/listNotifications.ts @@ -9,7 +9,7 @@ export default function (server: Server, ctx: AppContext) { const res = await ctx.appViewAgent.api.app.bsky.notification.listNotifications( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/app/bsky/notification/updateSeen.ts b/packages/pds/src/api/app/bsky/notification/updateSeen.ts index 3678cacd37f..dc0217ffb67 100644 --- a/packages/pds/src/api/app/bsky/notification/updateSeen.ts +++ b/packages/pds/src/api/app/bsky/notification/updateSeen.ts @@ -8,7 +8,7 @@ export default function (server: Server, ctx: AppContext) { const requester = auth.credentials.did await ctx.appViewAgent.api.app.bsky.notification.updateSeen(input.body, { - ...(await ctx.serviceAuthHeaders(requester)), + ...(await ctx.appviewAuthHeaders(requester)), encoding: 'application/json', }) }, diff --git a/packages/pds/src/api/app/bsky/unspecced/getPopularFeedGenerators.ts b/packages/pds/src/api/app/bsky/unspecced/getPopularFeedGenerators.ts index 0d7eb366a03..08466ed9f5c 100644 --- a/packages/pds/src/api/app/bsky/unspecced/getPopularFeedGenerators.ts +++ b/packages/pds/src/api/app/bsky/unspecced/getPopularFeedGenerators.ts @@ -10,7 +10,7 @@ export default function (server: Server, ctx: AppContext) { const res = await ctx.appViewAgent.api.app.bsky.unspecced.getPopularFeedGenerators( params, - await ctx.serviceAuthHeaders(requester), + await ctx.appviewAuthHeaders(requester), ) return { encoding: 'application/json', diff --git a/packages/pds/src/api/com/atproto/admin/emitModerationEvent.ts b/packages/pds/src/api/com/atproto/admin/emitModerationEvent.ts index cea8a9fb664..b2befdd53cc 100644 --- a/packages/pds/src/api/com/atproto/admin/emitModerationEvent.ts +++ b/packages/pds/src/api/com/atproto/admin/emitModerationEvent.ts @@ -7,7 +7,7 @@ export default function (server: Server, ctx: AppContext) { auth: ctx.authVerifier.role, handler: async ({ req, input }) => { const { data: result } = - await ctx.appViewAgent.com.atproto.admin.emitModerationEvent( + await ctx.moderationAgent.com.atproto.admin.emitModerationEvent( input.body, authPassthru(req, true), ) diff --git a/packages/pds/src/api/com/atproto/admin/getAccountInfo.ts b/packages/pds/src/api/com/atproto/admin/getAccountInfo.ts index 9953dc9d56b..7b94a8c57d8 100644 --- a/packages/pds/src/api/com/atproto/admin/getAccountInfo.ts +++ b/packages/pds/src/api/com/atproto/admin/getAccountInfo.ts @@ -1,15 +1,12 @@ import { Server } from '../../../../lexicon' import AppContext from '../../../../context' import { InvalidRequestError } from '@atproto/xrpc-server' -import { ensureValidAdminAud } from '../../../../auth-verifier' import { INVALID_HANDLE } from '@atproto/syntax' export default function (server: Server, ctx: AppContext) { server.com.atproto.admin.getAccountInfo({ auth: ctx.authVerifier.roleOrAdminService, - handler: async ({ params, auth }) => { - // any admin role auth can get account info, but verify aud on service jwt - ensureValidAdminAud(auth, params.did) + handler: async ({ params }) => { const [account, invites, invitedBy] = await Promise.all([ ctx.accountManager.getAccount(params.did, true), ctx.accountManager.getAccountInvitesCodes(params.did), diff --git a/packages/pds/src/api/com/atproto/admin/getModerationEvent.ts b/packages/pds/src/api/com/atproto/admin/getModerationEvent.ts index 3ac6e0f72be..d368c3bfd72 100644 --- a/packages/pds/src/api/com/atproto/admin/getModerationEvent.ts +++ b/packages/pds/src/api/com/atproto/admin/getModerationEvent.ts @@ -7,7 +7,7 @@ export default function (server: Server, ctx: AppContext) { auth: ctx.authVerifier.role, handler: async ({ req, params }) => { const { data } = - await ctx.appViewAgent.com.atproto.admin.getModerationEvent( + await ctx.moderationAgent.com.atproto.admin.getModerationEvent( params, authPassthru(req), ) diff --git a/packages/pds/src/api/com/atproto/admin/getRecord.ts b/packages/pds/src/api/com/atproto/admin/getRecord.ts index 9b6860ca1f2..90575354028 100644 --- a/packages/pds/src/api/com/atproto/admin/getRecord.ts +++ b/packages/pds/src/api/com/atproto/admin/getRecord.ts @@ -7,7 +7,7 @@ export default function (server: Server, ctx: AppContext) { auth: ctx.authVerifier.role, handler: async ({ req, params }) => { const { data: recordDetailAppview } = - await ctx.appViewAgent.com.atproto.admin.getRecord( + await ctx.moderationAgent.com.atproto.admin.getRecord( params, authPassthru(req), ) diff --git a/packages/pds/src/api/com/atproto/admin/getRepo.ts b/packages/pds/src/api/com/atproto/admin/getRepo.ts index f70ddc7e0fe..85592c52b14 100644 --- a/packages/pds/src/api/com/atproto/admin/getRepo.ts +++ b/packages/pds/src/api/com/atproto/admin/getRepo.ts @@ -6,7 +6,7 @@ export default function (server: Server, ctx: AppContext) { server.com.atproto.admin.getRepo({ auth: ctx.authVerifier.role, handler: async ({ req, params }) => { - const res = await ctx.appViewAgent.com.atproto.admin.getRepo( + const res = await ctx.moderationAgent.com.atproto.admin.getRepo( params, authPassthru(req), ) diff --git a/packages/pds/src/api/com/atproto/admin/getSubjectStatus.ts b/packages/pds/src/api/com/atproto/admin/getSubjectStatus.ts index ad212391c58..767714cec36 100644 --- a/packages/pds/src/api/com/atproto/admin/getSubjectStatus.ts +++ b/packages/pds/src/api/com/atproto/admin/getSubjectStatus.ts @@ -4,12 +4,11 @@ import { InvalidRequestError } from '@atproto/xrpc-server' import { Server } from '../../../../lexicon' import AppContext from '../../../../context' import { OutputSchema } from '../../../../lexicon/types/com/atproto/admin/getSubjectStatus' -import { ensureValidAdminAud } from '../../../../auth-verifier' export default function (server: Server, ctx: AppContext) { server.com.atproto.admin.getSubjectStatus({ auth: ctx.authVerifier.roleOrAdminService, - handler: async ({ params, auth }) => { + handler: async ({ params }) => { const { did, uri, blob } = params let body: OutputSchema | null = null if (blob) { @@ -18,7 +17,6 @@ export default function (server: Server, ctx: AppContext) { 'Must provide a did to request blob state', ) } - ensureValidAdminAud(auth, did) const takedown = await ctx.actorStore.read(did, (store) => store.repo.blob.getBlobTakedownStatus(CID.parse(blob)), ) @@ -34,7 +32,6 @@ export default function (server: Server, ctx: AppContext) { } } else if (uri) { const parsedUri = new AtUri(uri) - ensureValidAdminAud(auth, parsedUri.hostname) const [takedown, cid] = await ctx.actorStore.read( parsedUri.hostname, (store) => @@ -54,7 +51,6 @@ export default function (server: Server, ctx: AppContext) { } } } else if (did) { - ensureValidAdminAud(auth, did) const takedown = await ctx.accountManager.getAccountTakedownStatus(did) if (takedown) { body = { diff --git a/packages/pds/src/api/com/atproto/admin/queryModerationEvents.ts b/packages/pds/src/api/com/atproto/admin/queryModerationEvents.ts index 4ccb0ac9f6b..00e12439649 100644 --- a/packages/pds/src/api/com/atproto/admin/queryModerationEvents.ts +++ b/packages/pds/src/api/com/atproto/admin/queryModerationEvents.ts @@ -7,7 +7,7 @@ export default function (server: Server, ctx: AppContext) { auth: ctx.authVerifier.role, handler: async ({ req, params }) => { const { data: result } = - await ctx.appViewAgent.com.atproto.admin.queryModerationEvents( + await ctx.moderationAgent.com.atproto.admin.queryModerationEvents( params, authPassthru(req), ) diff --git a/packages/pds/src/api/com/atproto/admin/queryModerationStatuses.ts b/packages/pds/src/api/com/atproto/admin/queryModerationStatuses.ts index 4f6c85e17d2..d2b2f36a1fe 100644 --- a/packages/pds/src/api/com/atproto/admin/queryModerationStatuses.ts +++ b/packages/pds/src/api/com/atproto/admin/queryModerationStatuses.ts @@ -7,7 +7,7 @@ export default function (server: Server, ctx: AppContext) { auth: ctx.authVerifier.role, handler: async ({ req, params }) => { const { data } = - await ctx.appViewAgent.com.atproto.admin.queryModerationStatuses( + await ctx.moderationAgent.com.atproto.admin.queryModerationStatuses( params, authPassthru(req), ) diff --git a/packages/pds/src/api/com/atproto/admin/searchRepos.ts b/packages/pds/src/api/com/atproto/admin/searchRepos.ts index 4125b84eed9..5e21b2ab894 100644 --- a/packages/pds/src/api/com/atproto/admin/searchRepos.ts +++ b/packages/pds/src/api/com/atproto/admin/searchRepos.ts @@ -7,7 +7,7 @@ export default function (server: Server, ctx: AppContext) { auth: ctx.authVerifier.role, handler: async ({ req, params }) => { const { data: result } = - await ctx.appViewAgent.com.atproto.admin.searchRepos( + await ctx.moderationAgent.com.atproto.admin.searchRepos( params, authPassthru(req), ) diff --git a/packages/pds/src/api/com/atproto/admin/updateSubjectStatus.ts b/packages/pds/src/api/com/atproto/admin/updateSubjectStatus.ts index 649f906cd7e..29991da2b2c 100644 --- a/packages/pds/src/api/com/atproto/admin/updateSubjectStatus.ts +++ b/packages/pds/src/api/com/atproto/admin/updateSubjectStatus.ts @@ -8,7 +8,6 @@ import { } from '../../../../lexicon/types/com/atproto/admin/defs' import { isMain as isStrongRef } from '../../../../lexicon/types/com/atproto/repo/strongRef' import { AuthRequiredError, InvalidRequestError } from '@atproto/xrpc-server' -import { ensureValidAdminAud } from '../../../../auth-verifier' export default function (server: Server, ctx: AppContext) { server.com.atproto.admin.updateSubjectStatus({ @@ -24,16 +23,13 @@ export default function (server: Server, ctx: AppContext) { const { subject, takedown } = input.body if (takedown) { if (isRepoRef(subject)) { - ensureValidAdminAud(auth, subject.did) await ctx.accountManager.takedownAccount(subject.did, takedown) } else if (isStrongRef(subject)) { const uri = new AtUri(subject.uri) - ensureValidAdminAud(auth, uri.hostname) await ctx.actorStore.transact(uri.hostname, (store) => store.record.updateRecordTakedownStatus(uri, takedown), ) } else if (isRepoBlobRef(subject)) { - ensureValidAdminAud(auth, subject.did) await ctx.actorStore.transact(subject.did, (store) => store.repo.blob.updateBlobTakedownStatus( CID.parse(subject.cid), diff --git a/packages/pds/src/api/com/atproto/moderation/createReport.ts b/packages/pds/src/api/com/atproto/moderation/createReport.ts index 315b72c080a..7b3cc998e22 100644 --- a/packages/pds/src/api/com/atproto/moderation/createReport.ts +++ b/packages/pds/src/api/com/atproto/moderation/createReport.ts @@ -7,10 +7,13 @@ export default function (server: Server, ctx: AppContext) { handler: async ({ input, auth }) => { const requester = auth.credentials.did const { data: result } = - await ctx.appViewAgent.com.atproto.moderation.createReport(input.body, { - ...(await ctx.serviceAuthHeaders(requester)), - encoding: 'application/json', - }) + await ctx.moderationAgent.com.atproto.moderation.createReport( + input.body, + { + ...(await ctx.moderationAuthHeaders(requester)), + encoding: 'application/json', + }, + ) return { encoding: 'application/json', body: result, diff --git a/packages/pds/src/auth-verifier.ts b/packages/pds/src/auth-verifier.ts index 7a09135a72c..dc5f0bc29d5 100644 --- a/packages/pds/src/auth-verifier.ts +++ b/packages/pds/src/auth-verifier.ts @@ -217,7 +217,7 @@ export class AuthVerifier { } const payload = await verifyServiceJwt( jwtStr, - null, + this.dids.entryway ?? this.dids.pds, async (did, forceRefresh) => { if (did !== this.dids.admin) { throw new AuthRequiredError( @@ -381,21 +381,6 @@ export const parseBasicAuth = ( return { username, password } } -export const ensureValidAdminAud = ( - auth: RoleOutput | AdminServiceOutput, - subjectDid: string, -) => { - if ( - auth.credentials.type === 'service' && - auth.credentials.aud !== subjectDid - ) { - throw new AuthRequiredError( - 'jwt audience does not match account did', - 'BadJwtAudience', - ) - } -} - const authScopes = new Set(Object.values(AuthScope)) const isAuthScope = (val: unknown): val is AuthScope => { return authScopes.has(val as any) diff --git a/packages/pds/src/config/config.ts b/packages/pds/src/config/config.ts index c1676c25908..2f8f295b2b0 100644 --- a/packages/pds/src/config/config.ts +++ b/packages/pds/src/config/config.ts @@ -167,18 +167,21 @@ export const envToCfg = (env: ServerEnvironment): ServerConfig => { repoBackfillLimitMs: env.repoBackfillLimitMs ?? DAY, } - if (!env.bskyAppViewUrl) { - throw new Error('Must configure PDS_BSKY_APP_VIEW_URL') - } else if (!env.bskyAppViewDid) { - throw new Error('Must configure PDS_BSKY_APP_VIEW_DID') - } + assert(env.bskyAppViewUrl) + assert(env.bskyAppViewDid) const bskyAppViewCfg: ServerConfig['bskyAppView'] = { url: env.bskyAppViewUrl, did: env.bskyAppViewDid, - proxyModeration: env.bskyAppViewModeration ?? false, cdnUrlPattern: env.bskyAppViewCdnUrlPattern, } + assert(env.modServiceUrl) + assert(env.modServiceDid) + const modServiceCfg: ServerConfig['modService'] = { + url: env.modServiceUrl, + did: env.modServiceDid, + } + const redisCfg: ServerConfig['redis'] = env.redisScratchAddress ? { address: env.redisScratchAddress, @@ -211,6 +214,7 @@ export const envToCfg = (env: ServerEnvironment): ServerConfig => { moderationEmail: moderationEmailCfg, subscription: subscriptionCfg, bskyAppView: bskyAppViewCfg, + modService: modServiceCfg, redis: redisCfg, rateLimits: rateLimitsCfg, crawlers: crawlersCfg, @@ -229,6 +233,7 @@ export type ServerConfig = { moderationEmail: EmailConfig | null subscription: SubscriptionConfig bskyAppView: BksyAppViewConfig + modService: ModServiceConfig redis: RedisScratchConfig | null rateLimits: RateLimitsConfig crawlers: string[] @@ -330,6 +335,10 @@ export type RateLimitsConfig = export type BksyAppViewConfig = { url: string did: string - proxyModeration: boolean cdnUrlPattern?: string } + +export type ModServiceConfig = { + url: string + did: string +} diff --git a/packages/pds/src/config/env.ts b/packages/pds/src/config/env.ts index bfcf4e36956..cc5f698fa80 100644 --- a/packages/pds/src/config/env.ts +++ b/packages/pds/src/config/env.ts @@ -1,4 +1,4 @@ -import { envInt, envStr, envBool, envList } from './util' +import { envInt, envStr, envBool, envList } from '@atproto/common' export const readEnv = (): ServerEnvironment => { return { @@ -69,9 +69,12 @@ export const readEnv = (): ServerEnvironment => { // appview bskyAppViewUrl: envStr('PDS_BSKY_APP_VIEW_URL'), bskyAppViewDid: envStr('PDS_BSKY_APP_VIEW_DID'), - bskyAppViewModeration: envBool('PDS_BSKY_APP_VIEW_MODERATION'), bskyAppViewCdnUrlPattern: envStr('PDS_BSKY_APP_VIEW_CDN_URL_PATTERN'), + // mod service + modServiceUrl: envStr('PDS_MOD_SERVICE_URL'), + modServiceDid: envStr('PDS_MOD_SERVICE_DID'), + // rate limits rateLimitsEnabled: envBool('PDS_RATE_LIMITS_ENABLED'), rateLimitBypassKey: envStr('PDS_RATE_LIMIT_BYPASS_KEY'), @@ -165,9 +168,12 @@ export type ServerEnvironment = { // appview bskyAppViewUrl?: string bskyAppViewDid?: string - bskyAppViewModeration?: boolean bskyAppViewCdnUrlPattern?: string + // mod service + modServiceUrl?: string + modServiceDid?: string + // rate limits rateLimitsEnabled?: boolean rateLimitBypassKey?: string diff --git a/packages/pds/src/context.ts b/packages/pds/src/context.ts index 8f47992c008..6a5b2927df1 100644 --- a/packages/pds/src/context.ts +++ b/packages/pds/src/context.ts @@ -43,6 +43,7 @@ export type AppContextOptions = { redisScratch?: Redis crawlers: Crawlers appViewAgent: AtpAgent + moderationAgent: AtpAgent entrywayAgent?: AtpAgent authVerifier: AuthVerifier plcRotationKey: crypto.Keypair @@ -67,6 +68,7 @@ export class AppContext { public redisScratch?: Redis public crawlers: Crawlers public appViewAgent: AtpAgent + public moderationAgent: AtpAgent public entrywayAgent: AtpAgent | undefined public authVerifier: AuthVerifier public plcRotationKey: crypto.Keypair @@ -87,6 +89,7 @@ export class AppContext { this.redisScratch = opts.redisScratch this.crawlers = opts.crawlers this.appViewAgent = opts.appViewAgent + this.moderationAgent = opts.moderationAgent this.entrywayAgent = opts.entrywayAgent this.authVerifier = opts.authVerifier this.plcRotationKey = opts.plcRotationKey @@ -159,6 +162,7 @@ export class AppContext { : undefined const appViewAgent = new AtpAgent({ service: cfg.bskyAppView.url }) + const moderationAgent = new AtpAgent({ service: cfg.modService.url }) const entrywayAgent = cfg.entryway ? new AtpAgent({ service: cfg.entryway.url }) @@ -185,7 +189,7 @@ export class AppContext { dids: { pds: cfg.service.did, entryway: cfg.entryway?.did, - admin: cfg.bskyAppView.did, + admin: cfg.modService.did, }, }) @@ -226,6 +230,7 @@ export class AppContext { redisScratch, crawlers, appViewAgent, + moderationAgent, entrywayAgent, authVerifier, plcRotationKey, @@ -234,11 +239,15 @@ export class AppContext { }) } - async serviceAuthHeaders(did: string, audience?: string) { - const aud = audience ?? this.cfg.bskyAppView.did - if (!aud) { - throw new Error('Could not find bsky appview did') - } + async appviewAuthHeaders(did: string) { + return this.serviceAuthHeaders(did, this.cfg.bskyAppView.did) + } + + async moderationAuthHeaders(did: string) { + return this.serviceAuthHeaders(did, this.cfg.modService.did) + } + + async serviceAuthHeaders(did: string, aud: string) { const keypair = await this.actorStore.keypair(did) return createServiceAuthHeaders({ iss: did, diff --git a/packages/pds/src/lexicon/index.ts b/packages/pds/src/lexicon/index.ts index 40c50cd1687..386f77196e7 100644 --- a/packages/pds/src/lexicon/index.ts +++ b/packages/pds/src/lexicon/index.ts @@ -15,6 +15,7 @@ import * as ComAtprotoAdminDisableInviteCodes from './types/com/atproto/admin/di import * as ComAtprotoAdminEmitModerationEvent from './types/com/atproto/admin/emitModerationEvent' import * as ComAtprotoAdminEnableAccountInvites from './types/com/atproto/admin/enableAccountInvites' import * as ComAtprotoAdminGetAccountInfo from './types/com/atproto/admin/getAccountInfo' +import * as ComAtprotoAdminGetAccountInfos from './types/com/atproto/admin/getAccountInfos' import * as ComAtprotoAdminGetInviteCodes from './types/com/atproto/admin/getInviteCodes' import * as ComAtprotoAdminGetModerationEvent from './types/com/atproto/admin/getModerationEvent' import * as ComAtprotoAdminGetRecord from './types/com/atproto/admin/getRecord' @@ -265,6 +266,17 @@ export class AdminNS { return this._server.xrpc.method(nsid, cfg) } + getAccountInfos( + cfg: ConfigOf< + AV, + ComAtprotoAdminGetAccountInfos.Handler>, + ComAtprotoAdminGetAccountInfos.HandlerReqCtx> + >, + ) { + const nsid = 'com.atproto.admin.getAccountInfos' // @ts-ignore + return this._server.xrpc.method(nsid, cfg) + } + getInviteCodes( cfg: ConfigOf< AV, diff --git a/packages/pds/src/lexicon/lexicons.ts b/packages/pds/src/lexicon/lexicons.ts index c0e7e51fddc..258d297c69e 100644 --- a/packages/pds/src/lexicon/lexicons.ts +++ b/packages/pds/src/lexicon/lexicons.ts @@ -436,6 +436,12 @@ export const schemaDict = { email: { type: 'string', }, + relatedRecords: { + type: 'array', + items: { + type: 'unknown', + }, + }, indexedAt: { type: 'string', format: 'datetime', @@ -1046,6 +1052,45 @@ export const schemaDict = { }, }, }, + ComAtprotoAdminGetAccountInfos: { + lexicon: 1, + id: 'com.atproto.admin.getAccountInfos', + defs: { + main: { + type: 'query', + description: 'Get details about some accounts.', + parameters: { + type: 'params', + required: ['dids'], + properties: { + dids: { + type: 'array', + items: { + type: 'string', + format: 'did', + }, + }, + }, + }, + output: { + encoding: 'application/json', + schema: { + type: 'object', + required: ['infos'], + properties: { + infos: { + type: 'array', + items: { + type: 'ref', + ref: 'lex:com.atproto.admin.defs#accountView', + }, + }, + }, + }, + }, + }, + }, + }, ComAtprotoAdminGetInviteCodes: { lexicon: 1, id: 'com.atproto.admin.getInviteCodes', @@ -7875,6 +7920,7 @@ export const ids = { ComAtprotoAdminEmitModerationEvent: 'com.atproto.admin.emitModerationEvent', ComAtprotoAdminEnableAccountInvites: 'com.atproto.admin.enableAccountInvites', ComAtprotoAdminGetAccountInfo: 'com.atproto.admin.getAccountInfo', + ComAtprotoAdminGetAccountInfos: 'com.atproto.admin.getAccountInfos', ComAtprotoAdminGetInviteCodes: 'com.atproto.admin.getInviteCodes', ComAtprotoAdminGetModerationEvent: 'com.atproto.admin.getModerationEvent', ComAtprotoAdminGetRecord: 'com.atproto.admin.getRecord', diff --git a/packages/pds/src/lexicon/types/com/atproto/admin/defs.ts b/packages/pds/src/lexicon/types/com/atproto/admin/defs.ts index 4be9efb21a9..8236f848fa0 100644 --- a/packages/pds/src/lexicon/types/com/atproto/admin/defs.ts +++ b/packages/pds/src/lexicon/types/com/atproto/admin/defs.ts @@ -255,6 +255,7 @@ export interface AccountView { did: string handle: string email?: string + relatedRecords?: {}[] indexedAt: string invitedBy?: ComAtprotoServerDefs.InviteCode invites?: ComAtprotoServerDefs.InviteCode[] diff --git a/packages/pds/src/lexicon/types/com/atproto/admin/getAccountInfos.ts b/packages/pds/src/lexicon/types/com/atproto/admin/getAccountInfos.ts new file mode 100644 index 00000000000..46d917293a8 --- /dev/null +++ b/packages/pds/src/lexicon/types/com/atproto/admin/getAccountInfos.ts @@ -0,0 +1,46 @@ +/** + * GENERATED CODE - DO NOT MODIFY + */ +import express from 'express' +import { ValidationResult, BlobRef } from '@atproto/lexicon' +import { lexicons } from '../../../../lexicons' +import { isObj, hasProp } from '../../../../util' +import { CID } from 'multiformats/cid' +import { HandlerAuth } from '@atproto/xrpc-server' +import * as ComAtprotoAdminDefs from './defs' + +export interface QueryParams { + dids: string[] +} + +export type InputSchema = undefined + +export interface OutputSchema { + infos: ComAtprotoAdminDefs.AccountView[] + [k: string]: unknown +} + +export type HandlerInput = undefined + +export interface HandlerSuccess { + encoding: 'application/json' + body: OutputSchema + headers?: { [key: string]: string } +} + +export interface HandlerError { + status: number + message?: string +} + +export type HandlerOutput = HandlerError | HandlerSuccess +export type HandlerReqCtx = { + auth: HA + params: QueryParams + input: HandlerInput + req: express.Request + res: express.Response +} +export type Handler = ( + ctx: HandlerReqCtx, +) => Promise | HandlerOutput diff --git a/packages/pds/src/util/date.ts b/packages/pds/src/util/date.ts deleted file mode 100644 index af9767a0f7f..00000000000 --- a/packages/pds/src/util/date.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * This function takes a number as input and returns a Date object, - * which is the current date and time plus the input number of hours. - * - * @param {number} hours - The number of hours to add to the current date and time. - * @param {Date} startingDate - If provided, the function will add `hours` to the provided date instead of the current date. - * @returns {Date} - The new Date object, which is the current date and time plus the input number of hours. - */ -export function addHoursToDate(hours: number, startingDate?: Date): Date { - // When date is passe, let's clone before calling `setHours()` so that we are not mutating the original date - const currentDate = startingDate ? new Date(startingDate) : new Date() - currentDate.setHours(currentDate.getHours() + hours) - return currentDate -} diff --git a/packages/pds/tests/admin-auth.test.ts b/packages/pds/tests/admin-auth.test.ts new file mode 100644 index 00000000000..4cf7d5c26a5 --- /dev/null +++ b/packages/pds/tests/admin-auth.test.ts @@ -0,0 +1,145 @@ +import { TestNetworkNoAppView, SeedClient } from '@atproto/dev-env' +import AtpAgent from '@atproto/api' +import { Secp256k1Keypair } from '@atproto/crypto' +import { createServiceAuthHeaders } from '@atproto/xrpc-server' +import usersSeed from './seeds/users' +import { RepoRef } from '../src/lexicon/types/com/atproto/admin/defs' + +describe('admin auth', () => { + let network: TestNetworkNoAppView + let agent: AtpAgent + let sc: SeedClient + + let repoSubject: RepoRef + + const modServiceDid = 'did:example:mod' + const altModDid = 'did:example:alt' + let modServiceKey: Secp256k1Keypair + let pdsDid: string + + beforeAll(async () => { + network = await TestNetworkNoAppView.create({ + dbPostgresSchema: 'pds_admin_auth', + pds: { + modServiceDid, + }, + }) + + pdsDid = network.pds.ctx.cfg.service.did + + modServiceKey = await Secp256k1Keypair.create() + const origResolve = network.pds.ctx.idResolver.did.resolveAtprotoKey + network.pds.ctx.idResolver.did.resolveAtprotoKey = async ( + did: string, + forceRefresh?: boolean, + ) => { + if (did === modServiceDid || did === altModDid) { + return modServiceKey.did() + } + return origResolve(did, forceRefresh) + } + + agent = network.pds.getClient() + sc = network.getSeedClient() + await usersSeed(sc) + await network.processAll() + repoSubject = { + $type: 'com.atproto.admin.defs#repoRef', + did: sc.dids.bob, + } + }) + + afterAll(async () => { + await network.close() + }) + + it('allows service auth requests from the configured appview did', async () => { + const headers = await createServiceAuthHeaders({ + iss: modServiceDid, + aud: pdsDid, + keypair: modServiceKey, + }) + await agent.api.com.atproto.admin.updateSubjectStatus( + { + subject: repoSubject, + takedown: { applied: true, ref: 'test-repo' }, + }, + { + ...headers, + encoding: 'application/json', + }, + ) + + const res = await agent.api.com.atproto.admin.getSubjectStatus( + { + did: repoSubject.did, + }, + headers, + ) + expect(res.data.subject.did).toBe(repoSubject.did) + expect(res.data.takedown?.applied).toBe(true) + }) + + it('does not allow requests from another did', async () => { + const headers = await createServiceAuthHeaders({ + iss: altModDid, + aud: pdsDid, + keypair: modServiceKey, + }) + const attempt = agent.api.com.atproto.admin.updateSubjectStatus( + { + subject: repoSubject, + takedown: { applied: true, ref: 'test-repo' }, + }, + { + ...headers, + encoding: 'application/json', + }, + ) + await expect(attempt).rejects.toThrow('Untrusted issuer for admin actions') + }) + + it('does not allow requests with a bad signature', async () => { + const badKey = await Secp256k1Keypair.create() + const headers = await createServiceAuthHeaders({ + iss: modServiceDid, + aud: pdsDid, + keypair: badKey, + }) + const attempt = agent.api.com.atproto.admin.updateSubjectStatus( + { + subject: repoSubject, + takedown: { applied: true, ref: 'test-repo' }, + }, + { + ...headers, + encoding: 'application/json', + }, + ) + await expect(attempt).rejects.toThrow( + 'jwt signature does not match jwt issuer', + ) + }) + + it('does not allow requests with a bad aud', async () => { + // repo subject is bob, so we set alice as the audience + const headers = await createServiceAuthHeaders({ + iss: modServiceDid, + aud: sc.dids.alice, + keypair: modServiceKey, + }) + const attempt = agent.api.com.atproto.admin.updateSubjectStatus( + { + subject: repoSubject, + takedown: { applied: true, ref: 'test-repo' }, + }, + { + ...headers, + encoding: 'application/json', + }, + ) + await expect(attempt).rejects.toThrow( + 'jwt audience does not match service did', + ) + }) +}) diff --git a/packages/pds/tests/blob-deletes.test.ts b/packages/pds/tests/blob-deletes.test.ts index 019f6dec92f..e40883afc95 100644 --- a/packages/pds/tests/blob-deletes.test.ts +++ b/packages/pds/tests/blob-deletes.test.ts @@ -47,7 +47,7 @@ describe('blob deletes', () => { it('deletes blob when record is deleted', async () => { const img = await sc.uploadFile( alice, - 'tests/sample-img/key-portrait-small.jpg', + '../dev-env/src/seed/img/key-portrait-small.jpg', 'image/jpeg', ) const post = await sc.post(alice, 'test', undefined, [img]) @@ -64,12 +64,12 @@ describe('blob deletes', () => { it('deletes blob when blob-ref in record is updated', async () => { const img = await sc.uploadFile( alice, - 'tests/sample-img/key-portrait-small.jpg', + '../dev-env/src/seed/img/key-portrait-small.jpg', 'image/jpeg', ) const img2 = await sc.uploadFile( alice, - 'tests/sample-img/key-landscape-small.jpg', + '../dev-env/src/seed/img/key-landscape-small.jpg', 'image/jpeg', ) await updateProfile(sc, alice, img.image, img.image) @@ -93,12 +93,12 @@ describe('blob deletes', () => { it('does not delete blob when blob-ref in record is not updated', async () => { const img = await sc.uploadFile( alice, - 'tests/sample-img/key-portrait-small.jpg', + '../dev-env/src/seed/img/key-portrait-small.jpg', 'image/jpeg', ) const img2 = await sc.uploadFile( alice, - 'tests/sample-img/key-landscape-small.jpg', + '../dev-env/src/seed/img/key-landscape-small.jpg', 'image/jpeg', ) await updateProfile(sc, alice, img.image, img.image) @@ -119,7 +119,7 @@ describe('blob deletes', () => { it('does not delete blob when blob is reused by another record in same commit', async () => { const img = await sc.uploadFile( alice, - 'tests/sample-img/key-portrait-small.jpg', + '../dev-env/src/seed/img/key-portrait-small.jpg', 'image/jpeg', ) const post = await sc.post(alice, 'post', undefined, [img]) @@ -166,12 +166,12 @@ describe('blob deletes', () => { it('does delete blob from user blob store if another user is using it', async () => { const imgAlice = await sc.uploadFile( alice, - 'tests/sample-img/key-landscape-small.jpg', + '../dev-env/src/seed/img/key-landscape-small.jpg', 'image/jpeg', ) const imgBob = await sc.uploadFile( bob, - 'tests/sample-img/key-landscape-small.jpg', + '../dev-env/src/seed/img/key-landscape-small.jpg', 'image/jpeg', ) const postAlice = await sc.post(alice, 'post', undefined, [imgAlice]) diff --git a/packages/pds/tests/crud.test.ts b/packages/pds/tests/crud.test.ts index 19470e38394..e675119dca2 100644 --- a/packages/pds/tests/crud.test.ts +++ b/packages/pds/tests/crud.test.ts @@ -173,7 +173,9 @@ describe('crud operations', () => { }) it('attaches images to a post', async () => { - const file = await fs.readFile('tests/sample-img/key-landscape-small.jpg') + const file = await fs.readFile( + '../dev-env/src/seed/img/key-landscape-small.jpg', + ) const uploadedRes = await aliceAgent.api.com.atproto.repo.uploadBlob(file, { encoding: 'image/jpeg', }) diff --git a/packages/pds/tests/file-uploads.test.ts b/packages/pds/tests/file-uploads.test.ts index fd4c7ad1a17..7cde753bfb0 100644 --- a/packages/pds/tests/file-uploads.test.ts +++ b/packages/pds/tests/file-uploads.test.ts @@ -69,7 +69,9 @@ describe('file uploads', () => { }) it('uploads files', async () => { - smallFile = await fs.readFile('tests/sample-img/key-portrait-small.jpg') + smallFile = await fs.readFile( + '../dev-env/src/seed/img/key-portrait-small.jpg', + ) const res = await agent.api.com.atproto.repo.uploadBlob(smallFile, { headers: sc.getHeaders(alice), encoding: 'image/jpeg', @@ -125,7 +127,7 @@ describe('file uploads', () => { let largeFile: Uint8Array it('does not allow referencing a file that is outside blob constraints', async () => { - largeFile = await fs.readFile('tests/sample-img/hd-key.jpg') + largeFile = await fs.readFile('../dev-env/src/seed/img/hd-key.jpg') const res = await agent.api.com.atproto.repo.uploadBlob(largeFile, { headers: sc.getHeaders(alice), encoding: 'image/jpeg', @@ -154,7 +156,9 @@ describe('file uploads', () => { }) it('permits duplicate uploads of the same file', async () => { - const file = await fs.readFile('tests/sample-img/key-landscape-small.jpg') + const file = await fs.readFile( + '../dev-env/src/seed/img/key-landscape-small.jpg', + ) const { data: uploadA } = await agent.api.com.atproto.repo.uploadBlob( file, { @@ -218,7 +222,9 @@ describe('file uploads', () => { }) it('corrects a bad mimetype', async () => { - const file = await fs.readFile('tests/sample-img/key-landscape-large.jpg') + const file = await fs.readFile( + '../dev-env/src/seed/img/key-landscape-large.jpg', + ) const res = await agent.api.com.atproto.repo.uploadBlob(file, { headers: sc.getHeaders(alice), encoding: 'video/mp4', @@ -236,7 +242,7 @@ describe('file uploads', () => { }) it('handles pngs', async () => { - const file = await fs.readFile('tests/sample-img/at.png') + const file = await fs.readFile('../dev-env/src/seed/img/at.png') const res = await agent.api.com.atproto.repo.uploadBlob(file, { headers: sc.getHeaders(alice), encoding: 'image/png', diff --git a/packages/pds/tests/moderation.test.ts b/packages/pds/tests/moderation.test.ts index 562795af581..ba58bcc70eb 100644 --- a/packages/pds/tests/moderation.test.ts +++ b/packages/pds/tests/moderation.test.ts @@ -1,8 +1,6 @@ import { TestNetworkNoAppView, ImageRef, SeedClient } from '@atproto/dev-env' import AtpAgent from '@atproto/api' import { BlobNotFoundError } from '@atproto/repo' -import { Secp256k1Keypair } from '@atproto/crypto' -import { createServiceAuthHeaders } from '@atproto/xrpc-server' import basicSeed from './seeds/basic' import { RepoBlobRef, @@ -20,30 +18,11 @@ describe('moderation', () => { let blobSubject: RepoBlobRef let blobRef: ImageRef - const appviewDid = 'did:example:appview' - const altAppviewDid = 'did:example:alt' - let appviewKey: Secp256k1Keypair - beforeAll(async () => { network = await TestNetworkNoAppView.create({ dbPostgresSchema: 'moderation', - pds: { - bskyAppViewDid: appviewDid, - }, }) - appviewKey = await Secp256k1Keypair.create() - const origResolve = network.pds.ctx.idResolver.did.resolveAtprotoKey - network.pds.ctx.idResolver.did.resolveAtprotoKey = async ( - did: string, - forceRefresh?: boolean, - ) => { - if (did === appviewDid || did === altAppviewDid) { - return appviewKey.did() - } - return origResolve(did, forceRefresh) - } - agent = network.pds.getClient() sc = network.getSeedClient() await basicSeed(sc) @@ -221,7 +200,7 @@ describe('moderation', () => { it('prevents blob from being referenced again.', async () => { const uploaded = await sc.uploadFile( sc.dids.carol, - 'tests/sample-img/key-alt.jpg', + '../dev-env/src/seed/img/key-alt.jpg', 'image/jpeg', ) expect(uploaded.image.ref.equals(blobRef.image.ref)).toBeTruthy() @@ -319,98 +298,4 @@ describe('moderation', () => { ) }) }) - - describe('auth', () => { - it('allows service auth requests from the configured appview did', async () => { - const headers = await createServiceAuthHeaders({ - iss: appviewDid, - aud: repoSubject.did, - keypair: appviewKey, - }) - await agent.api.com.atproto.admin.updateSubjectStatus( - { - subject: repoSubject, - takedown: { applied: true, ref: 'test-repo' }, - }, - { - ...headers, - encoding: 'application/json', - }, - ) - - const res = await agent.api.com.atproto.admin.getSubjectStatus( - { - did: repoSubject.did, - }, - headers, - ) - expect(res.data.subject.did).toBe(repoSubject.did) - expect(res.data.takedown?.applied).toBe(true) - }) - - it('does not allow requests from another did', async () => { - const headers = await createServiceAuthHeaders({ - iss: altAppviewDid, - aud: repoSubject.did, - keypair: appviewKey, - }) - const attempt = agent.api.com.atproto.admin.updateSubjectStatus( - { - subject: repoSubject, - takedown: { applied: true, ref: 'test-repo' }, - }, - { - ...headers, - encoding: 'application/json', - }, - ) - await expect(attempt).rejects.toThrow( - 'Untrusted issuer for admin actions', - ) - }) - - it('does not allow requests with a bad signature', async () => { - const badKey = await Secp256k1Keypair.create() - const headers = await createServiceAuthHeaders({ - iss: appviewDid, - aud: repoSubject.did, - keypair: badKey, - }) - const attempt = agent.api.com.atproto.admin.updateSubjectStatus( - { - subject: repoSubject, - takedown: { applied: true, ref: 'test-repo' }, - }, - { - ...headers, - encoding: 'application/json', - }, - ) - await expect(attempt).rejects.toThrow( - 'jwt signature does not match jwt issuer', - ) - }) - - it('does not allow requests with a bad signature', async () => { - // repo subject is bob, so we set alice as the audience - const headers = await createServiceAuthHeaders({ - iss: appviewDid, - aud: sc.dids.alice, - keypair: appviewKey, - }) - const attempt = agent.api.com.atproto.admin.updateSubjectStatus( - { - subject: repoSubject, - takedown: { applied: true, ref: 'test-repo' }, - }, - { - ...headers, - encoding: 'application/json', - }, - ) - await expect(attempt).rejects.toThrow( - 'jwt audience does not match account did', - ) - }) - }) }) diff --git a/packages/pds/tests/proxied/__snapshots__/admin.test.ts.snap b/packages/pds/tests/proxied/__snapshots__/admin.test.ts.snap index 85e2e3b99e5..5e9b4e0882a 100644 --- a/packages/pds/tests/proxied/__snapshots__/admin.test.ts.snap +++ b/packages/pds/tests/proxied/__snapshots__/admin.test.ts.snap @@ -4,7 +4,7 @@ exports[`proxies admin requests creates reports of a repo. 1`] = ` Array [ Object { "createdAt": "1970-01-01T00:00:00.000Z", - "id": 2, + "id": 4, "reasonType": "com.atproto.moderation.defs#reasonSpam", "reportedBy": "user(0)", "subject": Object { @@ -14,7 +14,7 @@ Array [ }, Object { "createdAt": "1970-01-01T00:00:00.000Z", - "id": 3, + "id": 5, "reason": "impersonation", "reasonType": "com.atproto.moderation.defs#reasonOther", "reportedBy": "user(2)", @@ -34,7 +34,7 @@ Array [ "event": Object { "$type": "com.atproto.admin.defs#modEventAcknowledge", }, - "id": 5, + "id": 7, "subject": Object { "$type": "com.atproto.admin.defs#repoRef", "did": "user(0)", @@ -51,7 +51,7 @@ Array [ "comment": "impersonation", "reportType": "com.atproto.moderation.defs#reasonOther", }, - "id": 3, + "id": 5, "subject": Object { "$type": "com.atproto.admin.defs#repoRef", "did": "user(0)", @@ -67,7 +67,7 @@ Array [ "$type": "com.atproto.admin.defs#modEventReport", "reportType": "com.atproto.moderation.defs#reasonSpam", }, - "id": 2, + "id": 4, "subject": Object { "$type": "com.atproto.admin.defs#repoRef", "did": "user(0)", @@ -83,48 +83,93 @@ Object { "createdAt": "1970-01-01T00:00:00.000Z", "createdBy": "user(1)", "event": Object { - "$type": "com.atproto.admin.defs#modEventReport", - "reportType": "com.atproto.moderation.defs#reasonSpam", + "$type": "com.atproto.admin.defs#modEventLabel", + "comment": "[AutoModerator]: Applying labels", + "createLabelVals": Array [ + "test-label", + "test-label-2", + ], + "negateLabelVals": Array [], }, "id": 2, "subject": Object { - "$type": "com.atproto.admin.defs#repoView", - "did": "user(0)", - "handle": "bob.test", + "$type": "com.atproto.admin.defs#recordView", + "blobCids": Array [ + "cids(1)", + ], + "cid": "cids(0)", "indexedAt": "1970-01-01T00:00:00.000Z", - "moderation": Object { - "subjectStatus": Object { - "createdAt": "1970-01-01T00:00:00.000Z", - "id": 1, - "lastReportedAt": "1970-01-01T00:00:00.000Z", - "lastReviewedAt": "1970-01-01T00:00:00.000Z", - "lastReviewedBy": "did:example:admin", - "reviewState": "com.atproto.admin.defs#reviewClosed", - "subject": Object { - "$type": "com.atproto.admin.defs#repoRef", - "did": "user(0)", + "moderation": Object {}, + "repo": Object { + "did": "user(0)", + "handle": "bob.test", + "indexedAt": "1970-01-01T00:00:00.000Z", + "moderation": Object { + "subjectStatus": Object { + "createdAt": "1970-01-01T00:00:00.000Z", + "id": 1, + "lastReportedAt": "1970-01-01T00:00:00.000Z", + "lastReviewedAt": "1970-01-01T00:00:00.000Z", + "lastReviewedBy": "did:example:admin", + "reviewState": "com.atproto.admin.defs#reviewClosed", + "subject": Object { + "$type": "com.atproto.admin.defs#repoRef", + "did": "user(0)", + }, + "subjectBlobCids": Array [], + "subjectRepoHandle": "bob.test", + "takendown": false, + "updatedAt": "1970-01-01T00:00:00.000Z", }, - "subjectBlobCids": Array [], - "subjectRepoHandle": "bob.test", - "takendown": false, - "updatedAt": "1970-01-01T00:00:00.000Z", }, + "relatedRecords": Array [ + Object { + "$type": "app.bsky.actor.profile", + "avatar": Object { + "$type": "blob", + "mimeType": "image/jpeg", + "ref": Object { + "$link": "cids(3)", + }, + "size": 3976, + }, + "description": "hi im bob label_me", + "displayName": "bobby", + }, + ], }, - "relatedRecords": Array [ - Object { - "$type": "app.bsky.actor.profile", - "avatar": Object { - "$type": "blob", - "mimeType": "image/jpeg", - "ref": Object { - "$link": "cids(0)", + "uri": "record(0)", + "value": Object { + "$type": "app.bsky.feed.post", + "createdAt": "1970-01-01T00:00:00.000Z", + "embed": Object { + "$type": "app.bsky.embed.images", + "images": Array [ + Object { + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", + "image": Object { + "$type": "blob", + "mimeType": "image/jpeg", + "ref": Object { + "$link": "cids(1)", + }, + "size": 4114, + }, }, - "size": 3976, + ], + }, + "reply": Object { + "parent": Object { + "cid": "cids(2)", + "uri": "record(1)", + }, + "root": Object { + "cid": "cids(2)", + "uri": "record(1)", }, - "description": "hi im bob label_me", - "displayName": "bobby", }, - ], + "text": "hear that label_me label_me_2", + }, }, "subjectBlobCids": Array [], "subjectBlobs": Array [], @@ -139,7 +184,7 @@ Array [ "event": Object { "$type": "com.atproto.admin.defs#modEventAcknowledge", }, - "id": 4, + "id": 6, "subject": Object { "$type": "com.atproto.repo.strongRef", "cid": "cids(0)", @@ -323,7 +368,7 @@ Object { "event": Object { "$type": "com.atproto.admin.defs#modEventAcknowledge", }, - "id": 4, + "id": 6, "subject": Object { "$type": "com.atproto.repo.strongRef", "cid": "cids(0)", @@ -340,7 +385,7 @@ Object { "event": Object { "$type": "com.atproto.admin.defs#modEventAcknowledge", }, - "id": 5, + "id": 7, "subject": Object { "$type": "com.atproto.admin.defs#repoRef", "did": "user(0)", diff --git a/packages/pds/tests/proxied/__snapshots__/feedgen.test.ts.snap b/packages/pds/tests/proxied/__snapshots__/feedgen.test.ts.snap index 107ae5667be..1ece8243e57 100644 --- a/packages/pds/tests/proxied/__snapshots__/feedgen.test.ts.snap +++ b/packages/pds/tests/proxied/__snapshots__/feedgen.test.ts.snap @@ -79,7 +79,7 @@ Object { "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(3)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(3)/cids(5)@jpeg", }, @@ -91,7 +91,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(3)", "val": "test-label", }, @@ -99,7 +99,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(3)", "val": "test-label-2", }, @@ -112,7 +112,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -190,7 +190,7 @@ Object { Object { "post": Object { "author": Object { - "did": "user(4)", + "did": "user(5)", "handle": "carol.test", "labels": Array [], "viewer": Object { @@ -335,7 +335,7 @@ Object { "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(3)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(3)/cids(5)@jpeg", }, @@ -347,7 +347,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(3)", "val": "test-label", }, @@ -355,7 +355,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(3)", "val": "test-label-2", }, @@ -368,7 +368,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -524,14 +524,14 @@ Object { "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "did": "user(5)", + "did": "user(6)", "handle": "dan.test", "labels": Array [ Object { "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", - "uri": "user(5)", + "src": "user(4)", + "uri": "user(6)", "val": "repo-action-label", }, ], @@ -548,7 +548,7 @@ Object { "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "did": "user(4)", + "did": "user(5)", "handle": "carol.test", "labels": Array [], "viewer": Object { @@ -571,7 +571,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -582,7 +582,7 @@ Object { }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -643,7 +643,7 @@ Object { "cid": "cids(7)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(9)", "val": "test-label", }, @@ -745,7 +745,7 @@ Object { Object { "post": Object { "author": Object { - "did": "user(4)", + "did": "user(5)", "handle": "carol.test", "labels": Array [], "viewer": Object { @@ -762,14 +762,14 @@ Object { "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(5)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(5)@jpeg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(7)/cids(5)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(7)/cids(5)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(10)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(10)@jpeg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(7)/cids(10)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(7)/cids(10)@jpeg", }, ], }, @@ -818,7 +818,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -829,7 +829,7 @@ Object { }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", diff --git a/packages/pds/tests/proxied/__snapshots__/views.test.ts.snap b/packages/pds/tests/proxied/__snapshots__/views.test.ts.snap index 165257220d2..73781d5435a 100644 --- a/packages/pds/tests/proxied/__snapshots__/views.test.ts.snap +++ b/packages/pds/tests/proxied/__snapshots__/views.test.ts.snap @@ -103,7 +103,7 @@ Object { Object { "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "user(2)", "val": "repo-action-label", }, @@ -183,7 +183,7 @@ Array [ Object { "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(6)", "uri": "user(5)", "val": "repo-action-label", }, @@ -258,7 +258,7 @@ Array [ Object { "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(6)", "uri": "user(5)", "val": "repo-action-label", }, @@ -296,7 +296,7 @@ Object { "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(1)/cids(2)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(1)/cids(2)@jpeg", }, @@ -308,7 +308,7 @@ Object { "cid": "cids(0)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(2)", "uri": "record(0)", "val": "test-label", }, @@ -316,7 +316,7 @@ Object { "cid": "cids(0)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(2)", "uri": "record(0)", "val": "test-label-2", }, @@ -329,7 +329,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -362,8 +362,8 @@ Object { "parent": Object { "$type": "app.bsky.feed.defs#postView", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(3)/cids(1)@jpeg", - "did": "user(2)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(4)/cids(1)@jpeg", + "did": "user(3)", "displayName": "ali", "handle": "alice.test", "labels": Array [ @@ -371,7 +371,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "user(2)", + "src": "user(3)", "uri": "record(4)", "val": "self-label-a", }, @@ -379,7 +379,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "user(2)", + "src": "user(3)", "uri": "record(4)", "val": "self-label-b", }, @@ -406,8 +406,8 @@ Object { "root": Object { "$type": "app.bsky.feed.defs#postView", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(3)/cids(1)@jpeg", - "did": "user(2)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(4)/cids(1)@jpeg", + "did": "user(3)", "displayName": "ali", "handle": "alice.test", "labels": Array [ @@ -415,7 +415,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "user(2)", + "src": "user(3)", "uri": "record(4)", "val": "self-label-a", }, @@ -423,7 +423,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "user(2)", + "src": "user(3)", "uri": "record(4)", "val": "self-label-b", }, @@ -746,7 +746,7 @@ Object { "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(3)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(3)/cids(5)@jpeg", }, @@ -758,7 +758,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(3)", "val": "test-label", }, @@ -766,7 +766,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(3)", "val": "test-label-2", }, @@ -779,7 +779,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -874,7 +874,7 @@ Object { "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(3)/cids(5)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(3)/cids(5)@jpeg", }, @@ -886,7 +886,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(3)", "val": "test-label", }, @@ -894,7 +894,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(3)", "val": "test-label-2", }, @@ -907,7 +907,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1063,14 +1063,14 @@ Object { "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "did": "user(4)", + "did": "user(5)", "handle": "dan.test", "labels": Array [ Object { "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", - "uri": "user(4)", + "src": "user(4)", + "uri": "user(5)", "val": "repo-action-label", }, ], @@ -1087,7 +1087,7 @@ Object { "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "did": "user(5)", + "did": "user(6)", "handle": "carol.test", "labels": Array [], "viewer": Object { @@ -1110,7 +1110,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1121,7 +1121,7 @@ Object { }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1182,7 +1182,7 @@ Object { "cid": "cids(6)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(4)", "uri": "record(6)", "val": "test-label", }, @@ -1435,12 +1435,12 @@ Object { "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(3)/cids(3)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(3)/cids(3)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(3)/cids(4)@jpeg", "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(3)/cids(4)@jpeg", }, @@ -1491,7 +1491,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1502,7 +1502,7 @@ Object { }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1621,7 +1621,7 @@ Object { Object { "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "user(2)", "val": "repo-action-label", }, @@ -1638,8 +1638,8 @@ Object { "parent": Object { "$type": "app.bsky.feed.defs#postView", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(4)/cids(1)@jpeg", - "did": "user(3)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(1)@jpeg", + "did": "user(4)", "displayName": "bobby", "handle": "bob.test", "labels": Array [], @@ -1655,9 +1655,9 @@ Object { "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(4)/cids(5)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(4)/cids(5)@jpeg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(5)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(5)@jpeg", }, ], }, @@ -1667,7 +1667,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(3)", "val": "test-label", }, @@ -1675,7 +1675,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(3)", "val": "test-label-2", }, @@ -1688,7 +1688,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1816,7 +1816,7 @@ Object { Object { "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "user(2)", "val": "repo-action-label", }, @@ -1839,7 +1839,7 @@ Object { Object { "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "user(2)", "val": "repo-action-label", }, @@ -1856,7 +1856,7 @@ Object { "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "did": "user(5)", + "did": "user(6)", "handle": "carol.test", "labels": Array [], "viewer": Object { @@ -1874,14 +1874,14 @@ Object { "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(5)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(5)@jpeg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(7)/cids(5)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(7)/cids(5)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(8)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(8)@jpeg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(7)/cids(8)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(7)/cids(8)@jpeg", }, ], }, @@ -1889,8 +1889,8 @@ Object { "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(4)/cids(1)@jpeg", - "did": "user(3)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(1)@jpeg", + "did": "user(4)", "displayName": "bobby", "handle": "bob.test", "labels": Array [], @@ -1930,7 +1930,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -1941,7 +1941,7 @@ Object { }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -2001,7 +2001,7 @@ Object { "reason": Object { "$type": "app.bsky.feed.defs#reasonRepost", "by": Object { - "did": "user(5)", + "did": "user(6)", "handle": "carol.test", "labels": Array [], "viewer": Object { @@ -2072,8 +2072,8 @@ Object { "parent": Object { "$type": "app.bsky.feed.defs#postView", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(4)/cids(1)@jpeg", - "did": "user(3)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(1)@jpeg", + "did": "user(4)", "displayName": "bobby", "handle": "bob.test", "labels": Array [], @@ -2089,9 +2089,9 @@ Object { "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(4)/cids(5)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(4)/cids(5)@jpeg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(5)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(5)@jpeg", }, ], }, @@ -2101,7 +2101,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(3)", "val": "test-label", }, @@ -2109,7 +2109,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(3)", "val": "test-label-2", }, @@ -2122,7 +2122,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -2200,7 +2200,7 @@ Object { Object { "post": Object { "author": Object { - "did": "user(5)", + "did": "user(6)", "handle": "carol.test", "labels": Array [], "viewer": Object { @@ -2328,8 +2328,8 @@ Object { Object { "post": Object { "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(4)/cids(1)@jpeg", - "did": "user(3)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(1)@jpeg", + "did": "user(4)", "displayName": "bobby", "handle": "bob.test", "labels": Array [], @@ -2345,9 +2345,9 @@ Object { "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(4)/cids(5)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(4)/cids(5)@jpeg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(5)/cids(5)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(5)/cids(5)@jpeg", }, ], }, @@ -2357,7 +2357,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(3)", "val": "test-label", }, @@ -2365,7 +2365,7 @@ Object { "cid": "cids(4)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(3)", "val": "test-label-2", }, @@ -2378,7 +2378,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -2540,7 +2540,7 @@ Object { Object { "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "user(2)", "val": "repo-action-label", }, @@ -2558,7 +2558,7 @@ Object { "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "did": "user(5)", + "did": "user(6)", "handle": "carol.test", "labels": Array [], "viewer": Object { @@ -2581,7 +2581,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -2592,7 +2592,7 @@ Object { }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -2653,7 +2653,7 @@ Object { "cid": "cids(11)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "record(13)", "val": "test-label", }, @@ -2680,8 +2680,8 @@ Object { Object { "post": Object { "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(4)/cids(1)@jpeg", - "did": "user(3)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(1)@jpeg", + "did": "user(4)", "displayName": "bobby", "handle": "bob.test", "labels": Array [], @@ -2761,7 +2761,7 @@ Object { Object { "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "user(2)", "val": "repo-action-label", }, @@ -2778,7 +2778,7 @@ Object { "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "did": "user(5)", + "did": "user(6)", "handle": "carol.test", "labels": Array [], "viewer": Object { @@ -2796,14 +2796,14 @@ Object { "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(5)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(5)@jpeg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(7)/cids(5)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(7)/cids(5)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(8)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(8)@jpeg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(7)/cids(8)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(7)/cids(8)@jpeg", }, ], }, @@ -2811,8 +2811,8 @@ Object { "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(4)/cids(1)@jpeg", - "did": "user(3)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(1)@jpeg", + "did": "user(4)", "displayName": "bobby", "handle": "bob.test", "labels": Array [], @@ -2852,7 +2852,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -2863,7 +2863,7 @@ Object { }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -2930,7 +2930,7 @@ Object { Object { "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(3)", "uri": "user(2)", "val": "repo-action-label", }, @@ -2959,7 +2959,7 @@ Object { Object { "post": Object { "author": Object { - "did": "user(5)", + "did": "user(6)", "handle": "carol.test", "labels": Array [], "viewer": Object { @@ -2976,14 +2976,14 @@ Object { "$type": "app.bsky.embed.images#view", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(5)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(5)@jpeg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(7)/cids(5)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(7)/cids(5)@jpeg", }, Object { - "alt": "tests/sample-img/key-alt.jpg", - "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(6)/cids(8)@jpeg", - "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(6)/cids(8)@jpeg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", + "fullsize": "https://bsky.public.url/img/feed_fullsize/plain/user(7)/cids(8)@jpeg", + "thumb": "https://bsky.public.url/img/feed_thumbnail/plain/user(7)/cids(8)@jpeg", }, ], }, @@ -2991,8 +2991,8 @@ Object { "record": Object { "$type": "app.bsky.embed.record#viewRecord", "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(4)/cids(1)@jpeg", - "did": "user(3)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(1)@jpeg", + "did": "user(4)", "displayName": "bobby", "handle": "bob.test", "labels": Array [], @@ -3032,7 +3032,7 @@ Object { "$type": "app.bsky.embed.images", "images": Array [ Object { - "alt": "tests/sample-img/key-landscape-small.jpg", + "alt": "../dev-env/src/seed/img/key-landscape-small.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -3043,7 +3043,7 @@ Object { }, }, Object { - "alt": "tests/sample-img/key-alt.jpg", + "alt": "../dev-env/src/seed/img/key-alt.jpg", "image": Object { "$type": "blob", "mimeType": "image/jpeg", @@ -3075,8 +3075,8 @@ Object { Object { "post": Object { "author": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(4)/cids(1)@jpeg", - "did": "user(3)", + "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(1)@jpeg", + "did": "user(4)", "displayName": "bobby", "handle": "bob.test", "labels": Array [], @@ -3215,7 +3215,7 @@ Object { Object { "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "did:example:labeler", + "src": "user(1)", "uri": "user(0)", "val": "repo-action-label", }, @@ -3227,9 +3227,9 @@ Object { }, }, Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(2)/cids(0)@jpeg", + "avatar": "https://bsky.public.url/img/avatar/plain/user(3)/cids(0)@jpeg", "description": "its me!", - "did": "user(1)", + "did": "user(2)", "displayName": "ali", "handle": "alice.test", "indexedAt": "1970-01-01T00:00:00.000Z", @@ -3238,7 +3238,7 @@ Object { "cid": "cids(1)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "user(1)", + "src": "user(2)", "uri": "record(1)", "val": "self-label-a", }, @@ -3246,7 +3246,7 @@ Object { "cid": "cids(1)", "cts": "1970-01-01T00:00:00.000Z", "neg": false, - "src": "user(1)", + "src": "user(2)", "uri": "record(1)", "val": "self-label-b", }, @@ -3258,9 +3258,9 @@ Object { }, ], "subject": Object { - "avatar": "https://bsky.public.url/img/avatar/plain/user(4)/cids(0)@jpeg", + "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(0)@jpeg", "description": "hi im bob label_me", - "did": "user(3)", + "did": "user(4)", "displayName": "bobby", "handle": "bob.test", "indexedAt": "1970-01-01T00:00:00.000Z", diff --git a/packages/pds/tests/proxied/admin.test.ts b/packages/pds/tests/proxied/admin.test.ts index fd8538e802a..9906e4d129a 100644 --- a/packages/pds/tests/proxied/admin.test.ts +++ b/packages/pds/tests/proxied/admin.test.ts @@ -17,8 +17,6 @@ describe('proxies admin requests', () => { network = await TestNetwork.create({ dbPostgresSchema: 'proxy_admin', pds: { - // @NOTE requires admin pass be the same on pds and appview, which TestNetwork is handling for us. - bskyAppViewModeration: true, inviteRequired: true, }, }) @@ -222,6 +220,7 @@ describe('proxies admin requests', () => { encoding: 'application/json', }, ) + await network.processAll() // check profile and labels const tryGetProfileAppview = agent.api.app.bsky.actor.getProfile( { actor: sc.dids.alice }, @@ -250,6 +249,7 @@ describe('proxies admin requests', () => { encoding: 'application/json', }, ) + await network.processAll() // check profile and labels const { data: profileAppview } = await agent.api.app.bsky.actor.getProfile( { actor: sc.dids.alice }, @@ -283,6 +283,7 @@ describe('proxies admin requests', () => { encoding: 'application/json', }, ) + await network.processAll() // check thread and labels const tryGetPost = agent.api.app.bsky.feed.getPostThread( { uri: post.ref.uriStr, depth: 0 }, @@ -306,6 +307,7 @@ describe('proxies admin requests', () => { encoding: 'application/json', }, ) + await network.processAll() // check thread and labels const { data: threadAppview } = await agent.api.app.bsky.feed.getPostThread( { uri: post.ref.uriStr, depth: 0 }, diff --git a/packages/pds/tests/proxied/read-after-write.test.ts b/packages/pds/tests/proxied/read-after-write.test.ts index 52507a2730a..ca01b135c5b 100644 --- a/packages/pds/tests/proxied/read-after-write.test.ts +++ b/packages/pds/tests/proxied/read-after-write.test.ts @@ -45,7 +45,7 @@ describe('proxy read after write', () => { it('handles image formatting', async () => { const blob = await sc.uploadFile( alice, - 'tests/sample-img/key-landscape-small.jpg', + '../dev-env/src/seed/img/key-landscape-small.jpg', 'image/jpeg', ) await sc.updateProfile(alice, { displayName: 'blah', avatar: blob.image }) @@ -125,7 +125,7 @@ describe('proxy read after write', () => { it('handles read after write on threads with record embeds', async () => { const img = await sc.uploadFile( alice, - 'tests/sample-img/key-landscape-small.jpg', + '../dev-env/src/seed/img/key-landscape-small.jpg', 'image/jpeg', ) const replyRes1 = await agent.api.app.bsky.feed.post.create( diff --git a/packages/pds/tests/sample-img/at.png b/packages/pds/tests/sample-img/at.png deleted file mode 100644 index c5ee42f3a9252b099543d94807ed9662f9458983..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 251838 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
e(*NK-G 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 gXQBb64k%k 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

& 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%0AfuXdg)zuizD0wN|SPs0FF`3zxz&)DIrSnSa;sA zV6dd5qy}aca@o7ryVyh;n#&nGvsqhmx68mE)xMbttus3Tr*?=g6U(Q)DfoePHR?Nk zLe4m(N8G!vh=GKXrcG*Z3(QiAPH9fV_0OCqp1SYcIUY*9iG0`kUrdC)1q!ygK$4)q z{{Sh5{p;x%!d_uoaf?vJiSE^Oax4SWv)@P>l2*kcgHh;X?(?{YhLckU?kWPwpexaF z>-zP`K`NoeZJT3XBG5GA4uaReQ58LI@rc_@rMXw><{UIySNx|?kl>T=@qOUal$0c; zz-w6gYTD=L2)pkXhipE2meiH96uVfXlHNYOX-Jj`c3^7yZRP11lU7J7L2}#al|Qi* z?(4=iJBc!bP#hPzt}?iZjD335mn@_twH4&Y-;@n0Ah8&ZW!T%-(g%*djN`gem*&Kn zCUU?m+U0n!N?x>*g@Rd%RYEd;qpQ*uQZS)TUc+&%KYAB|wY$(Kv_+~JUi$zyCU`$g zbDo+^uj7c~!^(%fIz>Vgfng=ei-W5M0`|~)#1ZdhDC8Jc1RpbmFE`C#`}Ax8DC?-p zx_%%jOw<8%y}9ZtVqecCwki#LsmyMzFDJL#p^0e$Oh1;t*Sp6{N&?De1!5+Kl>YOk z)T|}(O&DrNQ&7^U@@E!kkrUM%kz{{S+E-f#N_^|LPu(h@_xo6h=c90_!%2`gqgQ!O4Sz9-tp5}nAZb^<0=tis%W znCXdXT2!C_uD#{!6`Cfwg-ACkdulWlxvI4=RkF@H*x{E< zDmAb=^zETVNJ`W^UKJXRa-qM>RU@OfTID1qGBB?;(&GmSWc^=C>Ef&@EGzHR<`gI( zk{4n?1C{_2+n^O!XJ7I}lD7O_&l2YL_+0>$dT= zdp%P|B&D#E5>7_)rKXYlY}Lcpz{$XiMvc@wIRpLn-oCvT64u1>WeO*kUxtz>v+0| z!la}GfPBsW01&TN%c{!J0*{tbC=BPD3j6hR5rl>ndX_$yc!a3nN)PijrAEGQlv_ME zy40L>;7ibz$K4ABmpQjSzQ;>UW+9!k)O5(2e^5k^?mm@`imIIIe&Y zpc&ln`TRxEJt2^y!8CJoyO#IOp~>9LcWv^K8;i)8MRL`BOX_h25RysIyTgLOre}!I zYx;vD-o>Sng3GbXlZ#p$b-@I?jQiROiHbr(R0&Q%YpL(%4DGwv(AqTC9tz}K`hNca zPPnB&mNf6A6A&i~jsQ!7{`qy%kl#bRmYi-goFuHOGN|MV^t=AwUZ)BRIdhwhEYA!j zMN2?rsVe?eHu&2pv-nSmCdYWmrKKAvRw3-aw@_t;5L7V(=yvsn0#hu!q2UFp#h$P0 zdR8qx-maH-*y=-5WUEfH-HrKE+n$n}F9~u;8vdeZDGC6R3XSpvoV9v)Xwd#S2==ifL)Gl(i#a zCWp;}LOyI|_WeVqzy-nqDc^f<@I0d~YSL0&MaSe+I4}6tHTQ~m%iQWQg`qIq%x*(N zPY)UO^?G_o3=#oR>00aFuocS$C&gEF6J~7ePdf`jsLoT2MUje&$XmG_=Z<;JUrkdJ zrIP(NrkOe(1Yg7!83;+^qVX{W6IU=t7}xW+RJujZ_OL#w_DsFnhxbgx6CComB; zMX?37I_*le>lD2o3DeQ;A*{qtnLcPmTfQ?Zvp3D;=*dwe_^FV#e-TCDQFH>5Z&&Ha zw((731eeISZT&`dV0ZSDGDp_*jzYb-gU5T>jcBOAS1R~XznM3R2{i7 z{aVMfBpIaQOEU^p^oz>k5)#Vs1m!~KbEjlunJ}3TGL7rIX$zbcNUIg__N_1Zwc<_Ej>BIPElvP z9MZ*pQtHQ^OZ4m1@H}c~OAcyi$8U}6ta+*Y8s*Gd3Vz;TocyiP-tnWnLrQvG%%eLE z(vvByMiD>&e9}?6M)G{O!{5SMU3XMAVZuBw;3B zEViQUlt9iXzfQEJp#K0Y#@#O$RQX9sDy9JT54LtOqPY|U#uw0!Rn9TVeaE*~2(!Af$ykkCxtH+hl;8gN@0GiVo8*e?6y<|`D~A^ z-|g?zDB>?@U1&xuN-mQ@mwnbVg+gJt4hXQa+dTp^&2Ci)syP%i8-u3Q~!L z^#Io@Q=aXt5!-7^x7DJ1LPqVwi4ra*ag@*N>(x~1KydZyL{Onga%w?yv)E`mYR1Cw zuN97@Aq`ffE#jDs&|I)xzW)H*tnMO9)B?e)`S!Qw8<95(Fs$JvsNO@ji-&8i9bKf7 zfsoXIqOot4NVvxbSkq7tl@J`7AB~uF>kohmFsV$F__sdxiw|zFoET2yJ&xp#OP1@~ zUTw)q&)2NE_;9NDgT329-|i?9q>w>jd*u&w0u>>LAUlk zV5(CGY7GaIccozcKILa4Q_ZxZ!KC7f%k5lO*QHl2fGMC=DW2T9z!f@Y5S65yD^Ej) zl_xBz1Zm8nqmo`!=AaF*W8?CN=gt=;?0sswm4VS25)nMYB#UlRxjRIoaZMriZ`uivdFa0M|HMsjc~!rp2l#7{)_XKYP#X(Nc!4D&|St@9_&O zh)D`clG53ne@y}YT={6WLdWR5S1}#GeZ$caGYM-uWm@kEli^VYpimq9`^VDlglP*n zWp!&?iuK3)K8>P!T+_%mlX?FDa3)e~f`{7uzHqy^?AQ^iDI}5$$Wo)1aNqsG5iuTx05##eO8LUJu;SC4P?_3892)8S;-*I4C%T3J3kiOt%u zBiikeIFFH)T&)&7Rg_ZS_vy4w3UH%E3xTEJKW73|La_m>mu9|%{6-FhqADfGknV4V zkku*X=LRt6qb6WcHMU;P{%sV*3W-qg>6i9sTlXF^gdMB51ZeYAaka6aySjaPy-h$D zJ9QllScIh7gH0)yxUNwQijAn+1I{RUQk%TE&(!MS!ASv#@8>Awr8tDdsHmFXXYP@X zmafS=#Y-EUL(}FTpmbFwYDfW8H)p?nV!>&td?5LE%Fw{o)62fH?dI6T$W~-y zHD{yHic}mmM}3&*2~w0rjrQ}i?Fu`I{{YmKZqjH@nBO-@Ww-kD_}x(#H&pG*fNK7{^aZGr03!}?1tgS(1eBor-2VV}f;5Fy z#fX@w`j+~be&<6j)VxYbWcZmph#=OKz2iBAr5MD7qKY}Dv+sjB=wPtEAL}@ftV+W8 zl5%kW06w`uy6_;_EOxx!0!8NW>HB)$MwD?Ry+5M?n3-w95?HGyt#$P~z%vcLP%hi7 z`pC=1L-gtCMB)URfXv4(`M{Lq7C3PE`EP1M?&c#2Ew@XBE11U(at&eW>1xGN8T!(- zZ#WFuhYMn50bccmI+5K!nw#gGSw;*~Pu%IGD6<-*bg93mC|xr=ETrq-K9Pi#sK_gC zt_D|CLgKUk0B%Zzq!L}qjrQ%Mjs|c`n~whgs0UL|Gh*E%8sbZUs;j#C6BQaG+?{+&yaN{5bQCCNo;O?Lg|oJ099qcF{R{XOvYY+DGg+9s)2ho9s}?8c{Y z6H!26xdd|^rGiDqeY*T~lr+2|hv4h`kE)epnd3j&$Y@!j(&~)-4L897*YH#U*_YcP`H>D z?x#?*P;+gwf!#}1idR04M$e@^RcNTEj=cMBSBr_H<0?)OZN6AWMCEZXeUwWt-yib& zs05Za(Apral5l}i3aamFTlILH)}CohRBH@vqaOBuUa9ud&tq~m?{8RwwWURBMRYIJ za%O@JR!B*cMYkj)M=5xIyyu}5woVK6e|QrGl0cxi2GqX%;H?hkdQ?@y#r2U%Qmf8P zH|x;Muudw1I(fyV%uocdTQ*guuiYTE{KNB0m8&9mZdc1I4qC4-S>} zgPd3~wxrTtZQD%qbxr$!Y-6jWxo{b%`t#8H#g&0!v0@^ok6vTu z6>IrMFtvCk><1q~KdD_gE%1jfe{dqFX8u6mAJ48(``hyQB@Wy5vu2p(DvxT zOn@+l8Rzo_3d1a_Vk&+!)8aAIhSUW&RS}|99N8HeK5wmhUsghaa-sZl@8St9sN?_! zto~Z^k4-(Jn-gyNKi#O`c5+pKblsYwA=8r!h(@I*pM8shmtGoMWQ^-@R# zg72P!E|N(BObFY*KTTwb?=82o}X_CN;}M`M2iwLp*Go=$7-$NO!6HCQ&d40<}cepr3qw93RwZ#rj=?? z)6d!+_IfWkZdgohDj;s=`OodrYg?>RiJ@~+eYt5GGQdQ&EX^}ge~ks4mV1zOtNBAX zXca_fH+WTGk~46Hn=jOPZ;qB+%CR_2No%#OaOYTT6oLVFH6CNUtqim~ZLHKRlzwZ& z{LGa`S1DC~mC{pYDM>;@l;jzq@3gQ2rFc|YnQK~_!woGbYzUY@OT3v`JRE;sdFW>a zK_uvZP|9(vg1Qky^UtsD3yzXD05^Ydtm7@8Pp(&?fH}mFmn1uK@8_IJ1m6=Dg^UB& zKR3Up^y`}H(we+U6f`(puE!>CLDa$edSs-7#~XnUc%M#lPgGLM1E|uy_tqsWutGoz zEbsmMLk&GRv5?hzP+f7hG%ecu4LQD+EC_4n9nV~wrd?r_DL~;0#Ih*b2B{wJ8S7|9 zl#EL(N=i#TFo*tg)srxQ&u8b~#8(Pfl_V<-h~-u;2<_e%>S;!JxQQL8Bxpug9v?!l zoVU{nQ5in>^N3KYRs#U^H#@tx^#guL-qrHBYOt1;b7t2V&pln#Dh*;%rH~5PK3VoR zq+$6@+ScZxKg`}1l)4+EHhsFVt*TA?-X#-V(glT1hduPvLHb$@Cx987nMK@z4?MQ| z@KO78C9E+4*k8`w`bPyT02fP<)4M@1(}ZM1C`FW{M)yS+$bBxO>*@FDWre6IV2!J< z%X)JWZ?}N~P7Wdo4%w}Cf$gFkTQu9c#g<*HnJp=`aa8*9^kN-=Pl?MjU*wL0DJ){2 zH7;HEYin-r3$X&!I;+ zs^#e!z8pZ+`oRJl!ryHMrJE}B)`y&2`v)O@vRJ7EGDbiV)$@k^roT9n zZ9+<^6(bncd9F*(y?gYEf>KMQIosa7*JvpZP{4vu=Qt{Qj89syv;P2b9F^+g{VR@w z7^}gpk5-GBlM0dcfH_m&tbW+rsJGh<_dUddFKJt{eq<=v1MO6^3!3~9Q%xwCD`SsFUGJm`^vjx zxs8$}V7qqv`r7dDnq+5TRPi9kEhYDezfdBqkmOa&>S zHU`|!ye#fz9Z0fdP@Y$FY=xlz05$#i{n?k`P)HUHzxD4GAudibS=x^JK(d~uo2MyU zY#GWDsU=Ync)@(-&qYdQl0cyvjW*ZQC@GaO08A-qZs79Q^$9!v?@ntHqHa=qn7k%P zR%)~K^m=AorKA#0ClzD^WE61@0;}VU;fDPFV zxV{2-^nTrO#7NhDpo*C#XnZ6n*FgGZ>NJKMcEpoXM*uNoL(>jQ57X7@Y(+#QmJeUf zoqup36oBjT6H6OtbuchEEUHk9U%p#-uYc{)nSmg=)c*Ow<>8o>8EC?xk<(YpD3yy8 zNQX9#cRwlzBa2t)eQH*~fTtp$d-l=EmQ_Un0tkHj*@fb0gix22L9dwOY0djTK>Kt8 zR6xN{3qJHaF!eWwrz%o#DXbcTGK^G(#7rR;(#l^p60i05I)y5PTYR}dflAb+%S#mo zdWzcHK`|LhG@e#Mq9G=~WDEMfy>Va`32asJ+n=Msl0d){;;@?}qLWWSwytjRgo3u+->Z4x3Vl5+`t@YFG^rU3hQBdT08=l* zcQ5bX&$@7Ap}7k}jv8skT)(}YM8z;-8O7a=G!!v!wo)7XXy-dw5+zMpUX&v z`GVeVIQ#UPrV>~i42|@9bRr5R6#`|@1_vW*n^+op>kRaCVqFwi233w(B^aqcvx_=a zN;#Za*Iz%(TgCR(Ed#_$migRsXl>eP>BnhukjB`NB`C_mPtF5B1MN`)f*-g^S&)--sBRmEki}Ml=>5)_2Mg?Nok&W(2FRHhN{3eji^g(Lh*bL zzeJj(vj!Ncy?XbYBv7m*3Lw-_)vRwvhERe>b}I8CzV-FP_d3s-_<$yf^BW!e5p=f)w3fX3-#7dI^>CGVO(}No(vd}i%sfE(*5jWj_=rS}VycF#oH@zV zVkO?{@0RfhPl#qLYx7@UILRpWr9pUcpT0l8Jyr@3p^d71!)ABNGN+ry<38L~ms_jX zt|s7Hy2a26+=Gbn+r2+Ng|v!97P%wt{d3ni1ULidzHual1vn%O_x#q}gb@fs%%o>k z#sg?!4qLDF>M^JsDFhQ|z281x5di^cN31%1dv&4>^qGaU9s3$f4 zUJj&8Qi~{a+xsy>2o*H5zn;3DvEddjWo&EBb#zuFV~W4+)xwJ;j}Z9f5CBN=7u@X` z#oFB#Hn@4C7t3$@`gK*8{{T{P0L|UvLQ{yU>bJ`XccZpY7~M8R!&X&S`G@}i*6T8G zILn{G+?=2Ki=g5q7tc3v^l)kVf^@VaB&Z=y=2CYcs-R{0c=uJ$O3YCYiBGdTX>%1J zMrcb60gKwX`Bx}59jM;u)R?)+U%w4z$Jg}fMNT5bpD*sbqU8Z5!SX+>k9Ul9w2BCT zZALgFExb7`F^{>_B4fMKzVGBc^NJGWBqohe*B6g;G@=`%N|_Nzo2rAKHPydwZmT$w z=?!PUf12d+WMK*gPF|Gl`9TrG12GGx?+yZ!%=>@JR$#;(+}PM#ukH(n48cYT%#-I& zVGOh?Ol(BScmse>Nm=yc?b3>5hc!A2{{T(S4is355vJK$Cxa8?I z5NO^nF4`(UJ{ybY%Hw&i~Q~>CA@2pu!QUWG` z3RmRAuX)3bF5h%wd85i^RkTvdK%zLWWAD&D&JuAn!Fq=~jZJ*Ar697_fP~Bdl{s;! z@}L)CoLICpM{2@O$dwr)O8sA@XVSW-+9I!oDy=TxqXx#T7)-;3N;Ea(F;XPe>~!RO zh*4nfE6}f6e|pbMN=k+imEOchV|*ZtK?D(%zYveP(4L&A^HT2NUu6%J1COik)2Nh3 ziJ7UhZNGX$LU1CA(wVkl$sS_Qv?Y6MLoFvZx_?D<<%n%G(7abt^2wE&>UmUlgJtTXI9Vp=jJO^Q77 z5yzJe%J&@py)v0fagB@R%eqBTJxpbXDGG8kr=8;C+x$m1M3xDIZX=q!Zal?*Y;NRNarAs!N@B7J45|5pF^EXKJ8u5~ME2-{NyHMBItBG6_RA>br6OnvE(q~gs}GJw zBksIsM?hs36~_4u3`?+iIez^a63D8u@4cez5|>=eT#I@1r|u~}A@L*`tEnwnKxlc0 z%vBcyXW065$`X@+1A`F&Q@r6dP9;gg0#I#t{`)ao?!F?Mr*L+wiz>6t`n6w7{;Trj zAb%t6Q}6KsKXPK#jb%X5t={`uD;oXgroQRQQ&TaI9D;2k7{DdU07zjB$IYxm|+rjbX1(*R31?;0YLrr5=E1UiwlwYD!Y+d_cBjQ)}~# zCF1&UjANxLoybD)H}iXx@y|UyB_GH$3-vwH7Ct19uoUk8`FG9-d`2v+Bs+IGBo?TV zd3S%?rVuXb4eERJj#6k6kktfcf2hOw@YIa=l8kpW5-nSS=6tU?eQ2xCOeG;nI8GDH zKcrG*llKs!wgJ2+I#Bo03)Ao8Cv@1{R0!@GE~3rk4X@Vy`lEp9Pl^1G>+u!h0K|!c zTQfMNbjrOWF8jo^Bim{*)Je)LWLSf32${@%c&<8tl?HUxBpa7)yXql%;F5!cOT|~v z-nkBurhIQ-Mq09#8A^+a3H;a$Zo2wnvyQaoVnYQM8FJ+S3;T-zha*b|p|0Y)dBrEh zJIx&ud!?sETW0I?ME?NovtQ|bH7O=x1Of?qWwE30=>)`(;YnbYa&KD~=ayHEed2w_ zl%c6DIb~!^PU57IZnqTkRADn+YVhe^FzN6!xO)vgYgkrf#LAYk2q{xDRh;}rukmah@qkGir0T)&_Q&Tbx zFVY0=v}BQ#BN~m_6o`{^SHzYgwBYET5=ukYGWH$xgQ3=D081&0jGDmq8KQp+?sn>$ zQsi({L9wg%sGsv4M9FLcO23wO@B7*#3X*Y!V+64|5P8t<(Xccb&M_q^N--#j$ShU9 zeQO{1LTZx5)BM`Jtlp$~Mb%tB00MKn=>GtiWv8pHqTCq{a~zU0#(C!d0KN3PAiB-H zy>f_HN{v9TmbqmQ`%f9w(1zIzuA@?1aQRE8_UL$Bz!cPe3w4X)SOG~j&Xm4T+qUs- zDbcB@#!{19)p{0~PBZV+IhM>QAm4dmSlE%Bi}KBkJMH`J2{B`+T0FEHc>b@i>Cuo% zu@Gi*=)iPcOv0zyA9QngtF6JqR%zGl@?ZfP^_UJ(>3Ly8VZ{-s&iV09cO9ff| zp7(20d&3^v#LX$i-YJ&Sw{dypX#Kc)f><*U*>v>%L!*dDP5>~4UwrRI-&nF~{6M-g zv@B>PPT-=m!|(UUuTZ3gCGUoScJNd73JQsK0kh8MK2+pmNPKniHkV~`{K)Th86wxM z)(6|~)g?;%lRy+rd+YnOdEPR5XH8fNWG0!r=|FN}SkZm=#E|c1NYso=Sio5N;4Jet zKAxA>=MNCT=$v&5QVPWOkIX;K$@Wg5rw9O48rNMRX@w+WC&i|ao5cHlKHs({2*r@qg{=zN zeE$Hce%%oXN|XVh0PWjE1cZksgbEFN(kl9Tx|+48fLhxtCxM{ksz=-X7<@oEBMzdT zTlQkk66XnEZ*f3cx4au?Zx>TiL|UdJMMp6Q*{phJJq}`;f`-I3duSFVthxgcU+yZt zH{+0whPKs-80Foy`Lka5#y{||24d0$g*ENqp#+sKVepL&Tz}Vp5EPm- z(V%kv>PY*n-nQ~LiDF7cNF&Y!B2qNB zds-;Hzygiq0Hr z-$X+t)T36+(|*Ji)RY1CLX=5%W&-tV`G`NV)%>|zwoscBSd-;QrrAb}9Q%IVR$>Bz zsZ+b_X393JrCOD190qot?x&8X2xrRv- zC8(sMOzZ6T4eb-e@W`HoDRS_sIhSL%?^xm=k9-?f!F)$wMo?oGQX=gXB0Fi92FE_s z`}OWVk;VT2$(4*2Uw5Xh&(b`P5)z5UAv6Z1w$#*jXwcp@+{aH#Rkq~2Y1>gb+iSlU z#aFLh(}6UHuq_2q@cVG5WKf0?d>Mm2ln(W!g2)Sjg7G_L09TElN8S3bRZ zX=4aVMZjUJMsW#pMG%|Xr_=g{AyGx z#P~o_@v6S`)04&;WgEFyWKz7MT%=lYjPmtGrHd9VT5F>~QiZBnnT3{46uUn@UlExr zlwwtqi92wC^D4A`Ki2x8Pld^Mw@pT#*~EX{_XNBo0aYLTj#aBPH0|}Lr!6)uT5Y2~ zY%VVsR&({}3PD&Pcy-N&e&3iOLT4pJE5wuHsb}xbE`Ax}@`RvjOK>%{kVaVx;}gHu z&a(KK4uuc~Epxx9i^-XZlC{>`XJ?G3IJa9Y~Drad~s;v_9N z$VqC~Q?EgnE#cum9J47vOG1lKPyltQbIylowCQ&?1rHZ1BF0iKI2)?0@r-lUGSEu3 zY_9s(v*crnT<$YPO2kcAFsOI7eo&mri%NhJ#I&mU8qt8M z^T>!<;vO~mahOW?k{gs{iHa&z#{HjOizkCf0}u|1?bLg_K<7^gN`Wp7($wc~YQ+b< z@eOTlSxQrq#3E;~L!( zo^iETo_@LLiegC(O!vG2NHYcuBrO(f>q@@&qsPCH%_X?oP9vI?oQ7_s0gRlTR4gPA zO>fWRu?71iqzWXF{6TW#VE5D38AC=clu44@H6#K_l`O&fW~J{`5Tcb53nbKOms`9t zB_v4zrwYb@k!^FUqNLO$hG17FKMbwSJs` z$E_47kZSGm-{$ZVpBi76zo$3`dT7oSx@o+c+wMvf_KmK{{Y+%tER@I2@#B9uG12B z@pbBR{{Y9MOHe8#oIvU~?0<1Yp(#p1d_-o=3$-;Qrs&2f+$2#FqiwaGM~_T&;!@?V z1xW9F?H5S#c$tU3-PRyATP~#}mffJCk@Xy&r}XKZKglh-pI&}Z(*aQd*rePaEWRQb z>dI_jN+I&bWd-7e^vTu268MgF_=!q@d{hSU=BrKJHgk3*U0<%}tE9a~R&Bey31Aaz zrVlafW>w-z@+6TFKzvG9ko>a!zLS#N#yK6r5{RXJ(~fZabX1pWcip3iDZ=9sQ`f(2;eNN2ps{w|NeVX8$;VB~2M{Fg zd3V+oQ58!7q3fqE-WF@BBXT)n`ZaXR+Mi#yS`xqj004b6fUO1brC5Rs5L%~v{NYTZ z#!Q0u4mWv9$QEM{_37Y2NJFqmcW*O%p>m+0Nn`<5ZvOxg3+jt#HH_h-Ys^ViSMSjS zVqun>{&VEf#8hG-jc?mp(GbWNI3x)g2E7N?-`}E?f*!?N@A#x~s*;cyC)%v~K=Xt{ z+~mVzm5gv-_UM?0^3n(%#8i6nfs&>4#tZevaYfPkbacKDNpt&)7G~=I0IJ7_<`|79 zqi6ej^+KxH9%48V*b(~S+;>qo#x~0B$I6JU`rWtdmanhLGSi7q{{W79$I>TGQGd5Z zCiHvjOXmw^s<$j5Tc3R2{{U=%x6`JGa*>6}K2RV-B}xFKJFu>&mf6D2<6ZLwf`%5s zc@Or^Gu6_Nl>kGNUR3$`g-WY2Plypt^5x4Y2$Y!)K`5uqWRG^ee!TQm0L^#rco-^C z#H^{M#Ufb9P^znQ#|H&@vHElspoEcdremdb)7m9U1watSyou%W88a^UV_vTf7gz1; z(9#sts1<%*)bx%j1Th#@N@ed~#UgmMkUpb;bNvh_*QzNuqXVbo(h83fNX3Hpv-2W^ z*pDL;>29QK2;JDpr;A%4k@m|PzHsn<9W3r#{;8=uu_$|pHaDyqtJnhW3@df%@d zQ2WG!Qc^&2)wp`Mna=S%b)^H#WwzP!-EnROv+nxzJOHWgea2MQB(qfn9-6;CO<0%s zl_}*#G00IX`jYBGLR3_eK{3uiQ&{V+T`TbsPg@eG?Y}WZmcqRrXig5S1GA~?6~Y4r z5|XWGFYI@`1wBcz&z0QBF3Qa=F-N=odMgKVr*X^PI09x6s)UN(x}1U2A$u4OY?fKE zRarC?;jc{on8!tzgcQ=Fy882iOLVD7!sxp{Ufu_E4j(E-(n^6OoH}V=V;-7QmT10Hg1EEWKfT{o zQoz6aQ@;6_Jg?)3B$jV0QLhtdY0Ffk-V-x-n~&u3S)=>n?oTgDip>Qy|ekH zVUCw=sUqSrZxmB#C;hYQeJr)u6+OFuLf&?U5(NOMEw_H}4!eHd5rznh>wAbbNPFY$ zcU&1vscI$7Jx+YIhY-042mYd|if~eYkr(mX$MV0=b^mM3yK<(V-1v+b{zB}Ah%*Ybz*x#yql(lciV#fiwfKc4x< zoT+J$EdISp#1jC*)(rZ&F;Vk;+zf#nP43ZNptp5P< z)Cb6Whp#v{@5? zLX9d#E#BEh@thz438hU5ufM!Wu}cmD%A%VAJ?rVzcw7q@;PfR<*Zo$}>~xY_jXIE< zQNtUl264~ZsecO!2qI=A5S1qpHg>gp9bvAIY*y(-3b4x5YWe>FZcn`|W+>8>y9e?Q z23kfUqMS{W+h_Hwu&f+4J*+@Nfe7tOwM=5L{Z5uqN&f(Iiob@=+`Qrvg&?hXe%ewQ zCt`Ea&zwOy6(WScIVM7ZaUw1yf9=)LhKxxh`E&R9i>$0C6)>9f8y`F85fO{#oKH73 zA2K0Zs<%}?Z(fh%2MAGrPcPh6Qyn2n6e5j&?-9-fYB(YvD^kON+*dirL`s1G-DBP; zya-`(s)ws&_peBcPEm~GWB^>q5QFN)i+Q^Hdv$UNb}mo6NI@j1983WNQ=qq~+6&W! zB`C@uq@u%ddq5=;(|~v%r@vHEl$J_^xG(tY49h~F2{=I*tCre9GtpF$DcmBo*hrGO z+F~}@k-O=9K%nA7V!01aUe$`sI8da&h}FZ8-QJnfGM1wP&oXI<&=q{3ac$mAok~y{ zmq2wj(wpVhDv*_{4Ye7J>FWc!%z>a;+k2W)qXn*9QGc#FDiMUJB+;4Sf{>6)JvlvM zBT!YeN->+lSEV(Ndt3DC#Q*}ps-HPqIHod*h)x2hYOx_X)c*iXQc4u2R!1Vx%21UirII;Q)7v<; z_MO^kk&I$8+hHIF-wSxZtLs@h&s>p=ERs}`{p|;$(j|ld*^H@vu+h~nG6GjElbk%k zTS}siD?XXys-!pp@SB12tO{CEykW^G%Uwq|`GO%h$~P8GG_`WQ(a1iD&)v>?2}Tec zhd!gHD6&BW5*+XGzR-VdF(hu=Dk`Nw-7Lh&O2jz&-$_iCq)aq)2Q_NbLGPC48JB@- zT7v?LHObRDbM%Qddy*p<$&q_l`q;6OM!cq9u5CJ`xk|IdtWoGsMul$kq>OH0FhV<5oupVRBpiIS9;Np)ty!`DBaksyVoMP~HvPKU?VEWw4MLO22;bP?Vz@R^*T3a^JEbC%R=8M5eW~bb?ZL%XY?$ z3a7W~^nbPgkpUG!4u3 z?-VmgWhH<0(XPWGPk4%b)QSZZD-lGH%B0uLON#w{IZsqExW4aj9<4o>O`W)QR>@k(m4x3SxnTan)z2SV<%oWd;b8L zlUT_aMlnN+jr!up()yr6gJBG&{6D-jFsXrANGhX%XvV%@m|xv@QX@GsjsQl|RNg(0 zZXYw#GUYh{Rw=~sDpnMvW5VIA8M3ElDm}+>yHZstHMom=uJ36W#PwtA>+RN(Q-y<2 z*3E0*_VB6#0Z0i61cwwFKVk^&Bu-L_SX_A9W+&+SdR=<`(9Re}Ax5u!^M*i4n8BEe zYCexgvafKohJkOf~y{lN~R)Z&KV zB^S#iOv!g3dVBlx&~PM{B7pN36#3~)qJHX-k^#aE_tNF*lx3%@zU3M#XjD{cTdE_D zE%n9Yt0_2GkV}#qf}IDP5&7|AF*itRM57@byd3<#udnIV1hyd{%YJa&fR($cl7n4-KN>-rQ45jf-9hDw z$isV#EpGNP>f@m;c!&>+RxRe@gQd+`ql!riU6PYR-kw$Rg4nfIvSRR`MCTr@eNVSa zg31i09^A6_yci(ON>qQAZ%kRzorsEnDpr*se5AShf9E|g6rgG-tn~SaNQSB;ik^@r2l#Avu_r5s3p=!(uc{z)rD8>!SjmQ)%-nkufjN%ZndA?j0R}00< z2RELER0 z^Mj$LkHI*hB{kv@_earP_$4vzn1FT-`}Ma6ch!OMz>DioE}ub zq`H9wdiCemAxMi-sJo+W`}#!x0H68l=mlhw1y8<_3qdm|vO-5rTemn8Xp-F&+kr1{ z`Gzl`7kKr@O(XzPQm0DmTmBrDY@jMomI{b0yZ-=QRT)6?Wfmjm#oG`F{M!%@Yrj#3adXl=)q|ZmWqqWmaA1^y2# z{HCu3p%dn9w5Qhv{=9Wkp@^_+@~3~iplU&6lB^=trg}4tqBP1GrjBWGfugd#bAz+@ zwCDYPVqGwgH7wC z8wcCKW`-uAo}lmfts}-)a&Sc`WzRcP*AMNC^=ddtd`kGV4-s0NrIIPnM$dCiI(&QA zBNj=VdM#UO-`vko6d8>(=M1Qdtw$14FoFYkvNd9NA+H|k#^hbl0Tz$joH?$Eg`WbS zO(03}9g^ox`{fe;OqlMYXx+sncy7HY$L;UbC3g(#CdQnfYCJ#zWl5$dp|I73FQ=?Q zIuHhu+oFtSH|fp4Oyub31x}+vIv+g!=pb_vP_RR@X5D=CkAma|auUGRsc~^mvyG1ajb26FJ2GFR{Wbh7a!(B(AI>0QCBP=cc2E)sb@bmi~LFTIy%2@!!1 z-6-0F$?HYc;{BZS(q>C|h_;_TkmR+bf2$<6Ro}}lQ2HJlTW&U7n9BhGc|(}_eR4SJ z0!Rl7fU#XqvF+j%C6tnq$w_b-!)60Dbsq4*?X=g3PEBYXVbo0 zM`EDHC`0qwn`N9-yU!2S)0EwkmYCBs)L&ZT%zl=1&)X{iwiOFe?djcOi%hZrO4!kb zZTPHJJKY8$MTv`uZA`QWul(ZrI#6f@6j|H9I7w~_N|00mvrx0;B;s7$oE4$K)jxN8qP&i?U)EH*P$0jw3l}^GE zDuJ#?^XnPw_`b<({K+oC0rHK2t6q=l`gLi1JEW)v4%NA*q(L(j3KpOGv@d=}1&4}j z2^&_5j9WK5sTUQQ_C_GAMDx>@W;t>&f|tPc6mUIZrk9FpLL0Sa7?ie-_i3AD zT)4lroe=~ALM!lge_nCJ7%Uu=(d}rg_@Bg*oTsM^No*Re$iC+1fRmgZH!ez)mpS+A z1WF9Rvc#~i`)#R;(c)XAGo5d_ZK)@&(N}~I-_xFqBt3y8EvBXXyxJygwS-Glq`Q|X zKBAp@M9+OW(0~!Ox+)}DJ8PP2Japu=fGgrUHMw)oT13i~FohCWvx+w`UIf!L|;#Gk%*ws}u8AaD11Qmr4q3c@qcZE8-v)7%EGCpLLVG3&pAJ^Bd zG|f-j0U%U&)%&Cj1_TiAmcP2f%~o)eyHcW4fD2k6;ZaiSiXNSm!dgxSCBZJ%u_WG( zeBo*Gl30MsbN%<6XAaWP9$j*s0NOrXxN6YW!Pu2Bvy(5G|TAm;w9wK7Gfk|p?+E-Hj(kPwJ zk83fO`AR#GlDyeOUt{0>I@XoL)tD#&V`lPrTq!{%ECN+lG_SV&;U=E9@qNae-Af}e zwWO(En7i7QUYO{MN83Xs1p!Gt^M#0+;|fkCB$5lY8_~C?q;(g5a`HiKd648Piip)+H0{MO1 zXW#n)0zd|%%9am)dYHK= zBMMCo^xICpu*35t=|X%9X+>g5bgjoNo{IZ)JSoJa;$;C#U%x1nq?M2bZ`S!=q)(uJ zYy)(i$XYVaS`Sw_y2n*oh}i?p=yHdcsI51@5$6Prq$jW6c=(w-#Ncv zdJrXGfFG;Cz*^K3V4bz|ZKGgzrjexy#boUaQ_Mz}HekPR>CzJtqO2+mMaz1(E^z`_ zNmE?VoWOjx=J0fNwA%Sf`Drq#UY=L!dHQuY5E4?S7_;wqD0GK*K104yF0ArDH34N5 zzKC;>zi+MebxQ>a3R5LHbnn(BBNC5^{{UXL5faAGKrO+FM$-7U{{ZJAGRZIgrk(d_ zhw$P8`p1#gnAs$5tz7#ze{QOTl!5?uA3prDihxEUOV*iNzEED5i1(U8eq^@oXv_3! z_%c)VsH8z zr#RG~8+e)ALs&H=u_YC|xmAdLvGvDSOuPw0uu_dZo8FKWkb;DhMVBl$&puX-4L<$T zSwmH*i-~QgfRtWK{eGQnN(#$8b^O7nOhF)^V@gGvJs#fw0GVO&FL2aUVON^;a47n> z$LrCIqTrk9u3PpaFodZ@kwtZFtG;n=@c#gbw5l@HmY(C7y!#E_TEDJ3q{O8ykrd{6 zz~>dqAd*fRYexO~XBQ63#JfJ>-xN>FywCxfP~!bMSxHh`GWDbKJ?H2FJQMr@Zja^d z3OrxMI~c)?wGE>plnV?Iw=N90!O>*}F;)jV(w!^YM@({l<`RrG`ElN+DB8ae_E42* z!*hUmd82MPQ~i25mpHZogbdFnesAj?{{UeL7@VArjdSY?JMSNkrku5VsXAIUFDokD zgdFCtE$4Gh$UPw3sr`!Qr<6lJ z5|TEt`Dk)V3W-`(id$BdZbWJ$JxFSPY?(%aAwYshbrD#Yu&e&PLR6dp3zF}>;Fw8R zDDle!la|Z2+9LC9yCZV4O~eie=3g#c=C@Z@OJX_FnYs9jOG#1-oGMWkHrkr!SoGB{ zLT+jaPIFs;th`^ZBX`k2Qc&Po@27i5DbX+`V5Fot4{{AM)JK|niDFY7yN#kUlV_H( zKr8V8jo1Ecz&cij@|9&BDCPKlNmeo(VRl1UpE-_bJCNB6yr4pq|kYO;HxVs zNhGKW7i(0Dh~^K*{{RDzd80o60JewyZ6{NB6kx5)tIUP^=Ih(7zwzn+0A^^Ge~O4= zS-CcZ`CdHl);MxPW=jPif=O)N{n|Ja;%#5c)YR?OWI{oAWUyo^*Xel29esQ0$tpq? zC;Ec=40L#&DNnUnk$JYaMy9l1tRIV_CAUtl}@}*Q7&$>0(1Se4$jj$BV-B z13G2DVg}vCjY(9f)f5Be_GQiIq9r(*mU@%4L70pHfI$=`{cB+!Mse9KwxVUHXcQwy zn{)jSeuT7;r)CD*!IDW$dF@{50!){gS}nWzh2SsHAJICxMiR{LeKzmb22e^Ar(}nz z1N!X55w9)D!{m2aShW_gC)YhnlJ(A)+r8m*gr@*1xp7)^*mJH?i>Q+VSovJg;ddVK zN)PSTN(fFZE9=Ua@`}w`)VC8@4-0B@FV(vcZjP#KiH8*(v1H2uxxRnl(3LL>sDi^i zw4+nnBo!et!hB0r>U1~DsjNQHp52>jGP3e~!C?dzw+ndV+36L6UXF~Y)Tr0GK@<{H z0b&TPKqEKjm0{;?uc-i$C8cEfa=9^W7*A)8I?Y%Qgog$yW+5)gClLaUIYr0Ayh~Jx z7GBZ4#BnTDjv^)p@9EY@6D=f`4~q6+*|xDs#W+AoGV`I#_q17b{7P{lDOh?+F%nYr zyMCN{->+G#l7)W}LCfCFybRA+DN@NywxMkI<(I@Ar{ZxTDc8#6`FzNs66)XAj)1u= z_&`&2^Z1J*aS5n!2o_^XyAAUdh#;sgg1YeYoB%Y>QgOP>T0WU%WjaA)no9a zkQg~Mtyex99GyQR8IE25g+DISY& zpmY*hoUo${`u^f21BR@rfS(h$rsd(zj165UbYom?U8d3_ImmgWJ#Q5Bti}DMxF)xw z*JG4S;sQV>rnaNKo~`fJAnvr{=VW3bwUlnsODM8jQ4#ep`}KJ<4avlATSI0I6e&WI z6!<`>X0}W%(y?FHp^|w?GUnLY9=G&;I?|M-5)eE@9z=}Z65?dB6A8qX5-CCr-hvnE z65W>BSY>VXNgj?bZgh05Fq?5$m^o8Y7gWKdW4pH~g>GJo`URhyv2}0qRH3I8+i9hM*>(>6TZa z@`xp*fQc>kStJ(6%&(dtzg%@>%yL0-g|zpJl{rX30<7&)JlJM4^ng2^C`yK+)$VD> z0unhX#X4^voS#;1*iffA9Q8UjUTy(-fwX}{=Zx@_Pt0>8^^HFYU=)PQ; zzkJo<>SfC;rz{1xW83Op7sjAiRI2)cTG&&2We{#lbpTX?OyLO#HVmoK5Vf z5nFO$3$Wv#*YxOWH7=&Dw9oMt2_RL}NZY+{1;R|7l2M#0GF`C`GE@Ayqu-&aI9!kQ zF5LeBzhh{Wl^+U7!bJh74Oo)XRut}BF++?JH&zQIhcDZqhBC-B0Ox*ed$d_~E)FKW zHPc8cJ7n#H$#O4|#s`*{o;n%U@VgJ<1M%^`lPb$BJYZqTNct~34mZc7eebgwvG zazI%)NTzvm5VN|CMoA>aPb=oZXz~Sq*VFP8rBR&Z(4oYVO>0mAyW6`$SxP0;q}mLJ z1>OD1`Z;>hLR3--0A1eapM4-@PH>R)r+?H%#H^C;XdC9NbIwrxFRP_49ac-%E?tVn zNqPVQKODO;15&KCWmU;}`{uvfqczGv!qnf-NU~iis05eqlTtB}aY4YSrLK4{(vRuY zoKf>=;WNeJ2Ec4P+3f*K%4g-4Ht3tMg9=CL?7=+EHer@(uICivC;htomcW#NnjFFO=VyfR`>w@Qr_6 z^^WiY2}o?W{=EF+XvCpYlOSC#(<|@k`}%YeTD4=}?kGZ(TzPCR+O!#`3|&TyS$6QP zUN1NAUfm3mOPiP=#E=}3T=dgum5n0NifbOE5zjBRC9Q@mKdp5FVhh$dDJeb^iHlmb z>F4KY^HWIzLzi`xn=Em8IQ{zM%*3LWX8GGMXsVLI$TfC)Qrh2?48pLUpEHrX5kr$c zzuTgMO~dEQuYS?N8HN(U6cpy6`Ou6()mfn}!othmSJYWc<2*Xz`! zKoq&cOB~|CB%q2C23IG_1(uZ{92EL_M7dX{L(~55TpT6A$+^8?Z84Ki1Nn!)qjhM{ z@;3s73Vl(#m8MdU+P%7kOaOrHPkq)Ml%$u&oFHmChu^(mkH{(_l1S1>rdi8p2-S0V zI$!Q7)UXLl+Gsa{)}l!;fNU4002JhUZiA28{Q4l?W2#&jBTsh7(m83 zD8KaSS+mvwErm7*v;D(zWXhCDY-<$-s6K0}UEzkGYHARg1X&TX?5Y~4CSS1MNtvyP zJx`bRZO?c&+gK)P4lAR63|RC#L-O>;F{sIl94C}DD)QY`RsEXjf4Tutwoc^q^7w{i zf|L}|pFF@BRogKPwEI}@-jWnX_;*?>dH(=Q_s2prhD<=$Z435clEkK9SBM7A&gW_y zd%+)-ww61H;2psEKx#%C8vdPGD+(ozPTrmGNGfLJrVUqW_4#Pd8dTD;u=6wph2G;I zwe&TpC=g!u+g{Bhmb58=b*SX+Q*MCUEn;}aFFUig&`WV+f2aO>g21tCRiodVe{m{6 z00gWWc!|qkE4{R|8`|kcQbwodqCSS_D@P&69^TzAK51crOmqAf)|Q4PtjkcAu;DhK zHn9YOPVOOtrxqBEh7ipFyx%wdaPiWgaX_fto|Ve|`@zJ*q8J=x*KpU$q6e0oLUI_d z`CFuYF3(4wPpx!x%mV`oFr^=I{@&2KNefUT5G9Bt*7OG>u24MT7Qn+Txf>^OVk^O% z`}*~C79fo3G-}si8V}t@Roc<%7BN`XLYxLHs0dWB-|f-9<|0x>M|pnW zh(b_23UHgfe4np45_H26if+4ah_{uE4=d^QdN88uSo&x^qk&0A5{lKotu)>TaZ;91 z5tSg1pcm_2%moQ+!S1|er+&3flB#Zua$-W380ZT@NddM6sZR5OU{MYOX7{J#PdEcu+)as5 zlyYtqtnL|@$>pzCm!r#3WQ8aKPouZ&-XdCXlm4nEg|g@IXa$s~DB+A&A?<|Sw;o}o z_<$((+PY!16$G| z*42w~xTv;CHrNea-BV-7t})RQEQ6g#rvCsjAxxl>l2V~|pxEc$a3idBP?dgRhKW7Bsi8o-LA8yrr{tkrtB}z^++SAkkxDUJJ!)> z?4s)9Q_2^UXzC<}_LxMZZ=RA|#HPXDyTMQj<_t**3ZYi|(6D$s&`Ad9fU+gEaMVF- z4K&x^COQ$C^(m|q?XuLBR3^tZ{D){GMsA#tNed-YF_LiC%3~bz{W@KKAW1YL-R%WJ z89^vdfkP4J*RQ7W=C}PebB@Jhd$^J|(Z>ra_gv=sgp#n4j)3~^chfpWNy9NqP!7Nh z%Vr$veXj|7oogosn8#}Ficlbd2cCGZew~&8V^HGxS{F>vCKX}AMO!hi#bGS<$dZ%_ z-6o^$KmmEnYUdp|kepZtU~0K7J&0a0BBhJnR8#aRKTXSK6m91rKrrnL(4i}`iQlAsKd(LDh5m9{q06tk|5b67e z7$BErGq^eVzjT6hbp?sctg%=T;_vIv_2@GI0YHjtcjz;Z+atfWSTAB|0;gu-~P+XvJs8niSuch>Ze>jvQDaudg zN;M`scA);NL&u}gM6!}WKp1+&tbf#2PBN^88$7@}e&R^#NQ6kZg{+W(F}kH1!<;#4 z`l$e`_=han_VEc))McSJsTp}baVxnmY}ArUBUgkgX_dwLeueeHJK+?)eEL`O4Xr9H z48Tpmps38>;o@yQM=T>L5T%S{znH{!?Wt26lKz?M3Il*h@jpOsy{I*dOG?xfSU7iW zb?4XC4bY11WRaGnZdkW)x5uho-?{bZD_|I9l{4?&E{sTZGc9F^9*4Z3-8P|7KnSks z9%$qJF0s!z;7UuC5?iNyzfoyv#o1W?*w@@OkA^_OhQ%YNU}tAybo5Z^EDgqDmc$k^Al`H(^j_d zdAZwH!;JlJ?mTXH3@M>GcJOkhPBJP@sY6c8W=1Tot@CDFzT{hW$fV#ij;a)(qG^S@ zclWGWK`K&67(f90A3H(XQHvsyc7%ypa^Q$5S8jM~piWUCn1=rMv|Rwq3Med*xVbym z;uy{tE=t8i7v*>W_qyi)0Iy3WR{%5DcZ(`o<)oE6gNEgrw(s5nlQc#t5L9lRv+9I1hS}8EclCD z5H3BAN2FMLc!VJujHJIdQdRRA!N>K_Ni5Xi4e|5kNN4RKNtTxdM_lRUPwp5%lWox; zGt66&>GGi$_vi~-q=G^7r^in?IZ9V7go1E^N8i8H5iNX-I26wG9^nvFxQK+`BnIfc`E6}E#9QAMrrddFiQG(#8 z8;U75zG)EF11&yhhh0!pi_<&kF z&7&yFF^BA%#p6ntLl@t}I1BRnq%{UHX9`QM-5sV@R$u0USG4o#~RexLRfh9z!l0vDY2d5$;=3AsLSqgCA zLWAXDU+A_{>9T0jaO zr*AgX$|TrHiyhG7I8TP)ot1ICr_vMsIlSUOvyu9rgM65Mp@0DE`8$B;L{d(nLAgd-}r=$D8ii$ie z%tMe#1E=-UK9oyalYXzwf=CKyA^UYeq6>-`Ffz(gLXIN&QN8~FCI>XF%|$L$TUo#r z<;q_?ecred=lz1N{_qs6B{&TVO=Qi{zUEQm$pa(dQt&{a7_PQwZ8K$fLYCg}~%uE&$)-jRRo zyC2FbxCU1$Oc!bQf44(Yot)y$+9@tn#Sl|KOSOi0u8Md^NFg|ex!0Uf%?d2eEc&)>5(Hz3U0Z-Xcx*A3IOvkNaVUojMXTSuR~cR) z1JaxN#8YD^(Q#48=MinQmXed-ho=Az2>_^A{{Vi`D92HBq`OnGyFePy*#$L4X89ed zcjk)Aj&GFyheiksQ-s>(>0Vjn&_v-YB(s5Gr@wC${{R!wgozZ!M5Pc*mgY6Zd*AP# zn@qH*0)bt#%y+a4iNMLkLPOjNHd^g$qgMFWYTUN9Ej!$NyYKtTvU<_evSl_Bq`4hi zpQhVJc$yNjkXiff;(@I_T`fRGrj!?OxS-+v@K;U*M)9Za!WR)>f3I{#^08uEA zx`jDmZQjJ~dO-c}jO{i?bb6Ngl~fGZ9Q}Hka`5<+mpq-1Ju`|RAd`*3ISrb_-qBgr z@e@)*9oEf}aNQJr0`r0Wy}5o;LQ>ZU-*{qfDQYDL0V1Fam%TakgNH0a z`XB%dDGoLf(xxb+l`&4Hgi?i~!QlQ4<6b#9X!tjUc(03UYI#U_cVpdmyQEUaa_#h` z7(U}Ha`ehLP9b9uMg)Rfs)M(RE_y(~wE&`Oz>?kmqka54{t`bQ{wVFVyROIZ_r!ZX z+ga26x%kI(q1b9m^M#8Z-cyw9fV74TrbX!-JerBTLRqq_HTmC8P%}DeLa<3v!b68- zHb9p@txR9LkMJw_pW!+h9oNLZKk%1yM@(AU@eQ21sWf_kur zdEs%Mkv3Z$x}DO>NL@Hg*H%vx!y%AmOeHT&D(j>Z?QyC|IHjcusB$R$&Gw{Ld{6ul z_b~4DJ5LV$OZZDuQ%6PC)H}Zz@R%VO#!O=!9_IBV&{0*oBbw>d@jN%$4<%q75_7(} zLhF^sq!glDvJ-QNW-@2Lq-y^FiNC_1;vd6W8lCt4q2L|=0Am7Dk8|62uVt%I4rdJ= zd2HRfKQOl7_2}~d0OG6xEUOYlicY;dydb&LxOC#5BLG+aBp$g?+bGpq--5r26YaHo z?+*BHU&cEg-Y|9byeGKryP0W6R%|qT|(Sk&&~Wpv{n(fGvM%McFC@2iVrl zXHa^ zN*3_Zf~jlXIkU&4&Q7-Gab(HcA&c_}N<3n`t=FeskA*=%VwM~0L*>43q`;Mx<5@v) zMSqa5r*9h9ywv>SYi+w@8ht)mAD7CUbJo143Tg^pyrBun3Uv_gXV66>#dYPRk&^+b z0rNC*xn5|$r&_!^RpKBX^zP6SueB(WpdHw9ZGBCIDe(UN(C&$DNX|vXvNgzs!Y48t-LtnGfH*b_<6y%jYZTDAB+P0`O z&U{DI^p5e2oltZxrN4@ zv|6Eu>znCSf@tpN%J539Ac8QfYO_?=I3K&$W2iRBftW|;VzuQ1j%)h#P>>P=Km`1J zYXriYCl&={ZuvK)AKLfNItS;?E+s+@MioS$pPBsAHY{POFFi|B+OS1&}>)qo&<6$qBUYD5GEz6&3zxj0g z1u1f;>hKk-0|i}0n777$k)D@zr(#T&;#eumTt@zd9ZC`6Q6YjyDmNyZu4% zp7K&^_Ka&H22ta1`(vu8CHx*CnA13gy_7?y)*gc0U=H)Pj=W05!s37?Fkh)>9<|pY zcng%@x(j#GAtZ-#<4SexLd`R|(VU6P$sHough5FBxXaJczqdtMLeLmgk!^SF#*kTy zLXyc&6+T7iK0TvRd}rRnLr-1bx{32cPnt}h^5gU<=)oAUC59o)_Hy13NXIp6H5CkP zcK6mfW4`#WT0PdOxHOsKDdvbtHxu++ze=O8NhgB=DL5TX@L%y*>8Aw3aZ#PEL6+;UH<@3sV{|c@U`oHO|{3gS@b+} zN!5m#s}@RCFO(SDa>*$=$9ZLntBsD#|cnF%6%PW|YNjZ1Z;x>PSc(#+Ia5Gz$c=1Ox4xH|#|NyZDp0?WCQ*{Y_1(+>BJJu=$em z@O}DzUk;^$6mWq`3v+zoB~4%4Aqrq9!tC49DLyIj7kA<|eriB-7)hcfHRS_!MdbZ! zr)6-dmc*vNJoMT2g_I1*t5{YbIa8}^aTSBau5yeb-t4SsOJhjk$l5>H>D5SZ0?W9w z=hMy>JVH`Tye_2DhtF$os{{S}7*Z8?>Zlsve$tg*)G;r7@{`l!(BqWEYpXWGv6Uu=={ySV3%=h`j zX4^rm;>P}?MnaPrrnA=+wjxzgX8Fsp1(H=LC21InugK@#vFY2-n1|*?-EWjyDBqfk z&GIiDaZ$nQWyq__8LE8|SF(ryfVr${hBvH2hqX_A+)ZHPJAWYjdg-!lkUVOf|{(~f^2nq15 zKtD!t$`3ALmXgjAi$0`3x0Eu`@8PF8%!+Bz04iTGwS2+m^ICmQI^_pSWvNb2J6F9R zi<;@eQQ6oH_)U)lbl+HghJ~q&npNaR7jCRU8$r=TeuAf`uipDzoN6}RB66$iprhL5P z=R8qRn6?ZHSlqphAH1VjcM)4DgA^xmktN~f!?wLX?_P}-bDguVdB6!tQc@^-zqhn6 z)S0;fuakBR3W5)=KYx4Z=?n=`Y8r2D#BokEDGE57DtGZ1Mp=+igWlKt(!O(9_j-br zFeb0t$0bt9zymXN?>!)Sw#qY=k|1rvQp-wke_VZQtCTnjLQNmyC4g};Obv!lr$5w2 zF6Jc^PZweSVxOAV?EB-Ps5m+f{{XmID^jt`VCV*wr5&GBqr4A87{*H!8nZUGb6!^8 ze@>-E>36@dedzETE#@x>um+6#=51H7Fn4eB1WHm(C>bcN%@&94@5p9LRIuu(+0Vot zM9E;OL4Z*=up*h46s%agI7(IdlBsPJW3_7_zP_*N(i5M=5SJRe{{T@bT4zmIQT_k{ zOzzc%4H3lzg)oyXJqhrd}Wk`lEcB(Qp( z*uv9XsR;m(?^_@1C@|XCp)6E}_b&-?tMyys-=QrmF*Aco>1Ybc3B(xZCUp>)(*Pd6D}bB|7l;{gm$dGmo3 zt#cAeTxeh0T|W?BpDxzMBC0J(^rJbufA@V(g)juO5(wp64w~v>##)(32O0oRy(hwd9_?%4yruNQGNf)?RAdvDGL?xnL=JLWh6HpPByIFWxs zzNK_-9U#gKKqBRf+_kJ=X`;)5L$J(0zg*!jdj<$4?nw`#Ui=*H^H-<6b*ICc&{~9T zZHy0z0WN?%N@{F7-_jH67`bBHW7WT782V@5tu$hA62%Xp1~W(i7V#w7^yGWk)9TnaJryK27@Dg&?_6p^qmm zrJl98$%LW$hJW+Z64K)f5TO46-&bf=ctI)xs$g<0*G(f2%@fK$G_od2up7&^x#*w) zQdowe7kCMpTwp`9haTNMqFoJS)TQ;@AaE9u-E`L-MA;!|Bs2c0*gp^na|%|Z&8Tbs z4SO+S(wC4Ml2-|zP_V{t{$s4EfB@hz_5Jp11W9!g3#FUVwNY6dc^cDC5u!SlY%ma}nb)&UxuV^{Yc`DP@1QMu*-d+goYepe1s~R$Qo}oBa+m z)KCX%cixb++LBTj5n*-~>_p(VV1TusEuw&M)gH8ZbR`ProL1lS`HM?QAW-kg{{TOT zlHIXn5($%6J0jz2%1QgzvD5|`kXy{fRF_a8l;)a&P+VyD)JKz+mdc_(H6=<$9nR$j zOkZDP+p8cfD3V+bW208q^MzDpzwroCi3HS(-(qgog;IoD7K(Tgp+kq7ucLh4dUYj1 zo{isaSfbFuK%7G&ec9nZcc*Zf8@k$UtE1Ad{tsG`2}#6Qq&JxOfG7fzSQo9IuAPWQ zsAFMc>2a)pJh;VU2U$Le%c)4d?+V21wy z%WqQNP&2t!x%PyU^iFyx7=xNV{{Xm;`-Lym{v-8QxYb!KVp~H>xy80)>5ji8NJ(Pl z%4ww^-`+lhHANz;#t3>l*M9X7vQn}u$IM2C@#tT({+%|EMIF_dq1rs<|#F*-BcxCCD?hre?t1;K>>@^ z`!E$b6)Zrvz=E{KuIMVWSH%l{jbGcII$C0daJq?ie7v&CIV6A?-!>3jA$UcOUOHUQWQjSsk`()C&e!ho@8po&c`z3^+@u9LeSTE^ zGhk4J(y>rL=GV7k2!(=X0)n8fpj1`cw}>^UqB8kWlNt_h1s6Jv5LA1f_?>S#0j-!_RZ(ExWv7dxzQK zUukn^7;ud;sq<)7Nm-p&MhQcZo0m78fTE4oPc?gx# zqT5`xRAw|e;~;-dqcHX~5n`|6a8|eYdvu76E2z*`WN~VLEji8q0N<`9%vxD<;S8f& zi*M@~&qg)GY(J@myY~;jR>YtfDxaUs5?X@hEla6peGTqKt;#)na)}0IcA`9{UOXk(RyRYqc^m67X zgK`s<+qy=$`++K5++WJn%OPlO+jxAGp9~~K1KKvpeIs{#@X^w1o(&0bL-c=o7$mP6 ze&d%W+c%$j!P*_64Jinu=-hxtQ35Po&5Cni&~zEIh)_~&oe!p6KQMkA39^)srz*(U zok!~M`?k~6mch3K8AQdQ#74vPuUuD3nZPAV!{E6F{QUc@G6M_>Y-zht9Q^$u%sW<5 zjQpZ*IrTV7GF^M~>CnFV6zqlrTb-NwfvG_uRb&&HYt@fpG1TqkM&FsLpcXjXM?4tE zzXoffCTdAYO+7pPMs#`IN>B<(LpawyVTkoF3^a6@ z!-mO9y#!osJq&+b^oo>A6)EWqnWAP8P|HAXeBRcHzc=#gIW0MT}}e>$hx#2Lgws`}*`mhNHV5&aKkA!4ty}(*nZgC{e8X+&c>7HG%cDC3QDy zV63MyB8S%)cyFGLgaQ(vmpt_SR<6;1;)C}TWm z9Y!M>8A*#Bz(&F@Me>11>Fdx*@dA7x8nG`IV4$TbZiUn~L!16%=EX z=RaPk330zlX5H@vQoKnZvWRA4e7VFk)u`=g4a`CE)8?^o)5kbN->bD>Ui<7tRDe!3 z9B-xVWAgy&>dI2{B&tP1&oz{=DXJ~37GjQxK*2S3a&qsi4rU}N3qvU@EK{bGh@z6! zaY{0$F@2W4q0b!`5<^^!#l3cmpJ}U5hS+QZ%RxfP6!XgczMW;v@hE_*oiq8$y&=>WNJTlB!sYY96ADD4U*xnJWdUTw_g?Jss+&lH#C}BxTh9ajRTsvu|QH-QR7e$pU zTKu&VAh5W+wj=4)k`57s5PRw66-2^3OQ9?(G8=ouTKeL^(CP#_VPZ-01E-O33$VUfFPCg4E^Q477ppMPGPmX!hkpe*`y zABbDR6Ew}bC<|5e{{Zo_v%)QTULrUAt>Q$fYy94Y*Dp^>3b|DjdeG&$Fcm1R03kq> zgF*=h&5a>+^)}`gC1{AoJT7-H06$E0+CviJ;)mC%g;R}e01s#HKCm41;|Y;h3%*je z${UQHYER#eh$VuR62#;OpQ}d%f`N#PMaHM|%CY3Nm?0;8Z7PUvlgW2%cFO*|^>4Ha z91IE}iOhUQCS3P zDG_~@E9Lurui1PhN+Gb3Thms8DN9HOQ3^s$jqTleN6^&sNhdG*l8r>g$8l_LfQ_8} zIwu?(v z6sce8rvTYNCcin;A=VjJmLZpqF4GHjMOG{5^s%X~XU(9TI*N!1DGts}>8}0OGqzHe z{{ZCL#w%_uB@>FG&L}g`+#?ATD&=YxJL{}nVKWcfBM}6gM^5b$!%Spb8;wZaAu}7r zp1<|d^gbjv6tm*uqt@{DCHB_{W2BPg%Y<0nEt_9PVo zadUbSD$v40lFCY5Myd}^LH4W1(vZqluIRBhd9aM5awW}vhAZ2upcI6t24dx@v8QGj zO43M3Nd%23`|4?U_7tc@{k z032Z>l7_iPy|17wJF1v@Ie$M(LC{$)q=dL;xv!tLahW!avaEs>OS0s`r^`w%j;xkv;x%je$k<3o7(1&91Cs1W8g;4ZOT&)cF(OpC02)HL8a2bt9Cbh_CO!nsjYHDdqP`$-UAuEnb{%E{&A^UsubS7X;8m?QP z_4$E?OIpmpU3mrR9a!`;!4SKlCEVJ}CfR!lBQA;AN z{S&YCc#BnPJCH4+$tRYt268n0Z>uB?9*@tzSR~Z~5{9evEu=u|5F_TSq5)h0tZwLW zj9*p(-GvWy$^@(ul$nV>Fl^oWLA|E43Ik}{ayYOO^P9i5^f`$H7t2oTZm|lSq^PX{ zg1caTVaYAW{{U*2am1-AM(54+_Bup@4kc8bvhIY4ASB6hlFO^ylcBG(#JX=ZX7BY+ zudSc?bI=wrk_{VJ8dD4Z|s6E?K!;s0iDa2f5c`EO3gB+~ovD6eUkW z-XYDh=qqT>L?TCtEr`|ul|1lLnR)A<7Q}kJ-Mpf}OkAa;fGa~!?Z(^X5TyjJS-RYr zk2Dp>x7(|gD5!%&n``L+2pCp=I!8S3~+=T?&i7Q^Aj2}K3wfLS1Mi_zh@tAxieT7IA6Yy&`MK)l|Ck^02*aS=>$hj zh;F)M#L5To%>&ewpwH#UDZ{AyunMG!VERiWbBX*!5+zj2V7)wc5h$&lwtc;mlwgw#Sb`zONpgEk0^+ z7A$q&GyQXcCQ4McXJJD?E56#=EZwvvR>HRuC~fwJ)cPFymtS0Y!~#Gr%y!hj^%f{f zLYIUoRbyu9%9*~9T&^r*l?+T&B4xZ`tG~T*%H#zCR6_%8Ym*;%kU>k4;(9ej0l4`W zg0zf-lJSP0E&3%jb?NWW7R9i*1HO^QVIbnEW@e$z{{WtR${9!yV^N|qJueT_H~aK5 zD#45C9Gqleb_p(f-tVuJV8}eRwpVg$;*L`p`F7VF*HXo?63jif-YfSKlAr(;^N(W< z+goXi@9oW=lzQ;=C7dL=r2`AsmXTCUTCpO4CdS{by<-VzE$mTc9Ehdm1m<6_ufJ8q zF(itBD)sF5yjddysb$Kv?xr62Plq~_E<8%&V6vl8WSD9D=i8ypniiofj3oEoPXbe< z0uzWG3$u&!JeoGwgm@gMrKYgjG_}pN%L%!cOv{(Y5F@M&M-1cJc z+59~iK$POhipu2xF^}^*mzMobIYSY%B3f{eaVU>2u4@xAV%Crm<0E@#tB+`Cb{(dSJn`SDBLtGl z6_a6he{6MeDM~&8;Z9ele7$0%Eg_Vl_Z5>fb2WPJ1Ii{KMiC-45H}72)XInT>6E1@ zXGo(~;PT!h4ivLG!E#CUy|fzZ3w5-ume*)9yQ=gA6Wi_4nbHff)4d>0YIXDTg<8WJ z+bE!}e9{ZA+OGcq*P)>cE>x3<)H6o{pnM<~zf7X3uik5tNXl_ws<=|t_S=e2`1PcT zU=2crTG?FZ3`zv8Dq67u8({VH8vg)m_54p#8)rF*Wksar{#(W~e1C44l9YJHCu`?T zU8vrXNzc!uxT_v^14>fnkKhvh=$-rGHCGr>Yg(fW|GD#^G zaBr=%itl|LJy^+NNs#%9K7}XD@#%iu7Xq9u9uQ5sSHE~hWfUoeSN`(p8qdZwNX}Ap z=?jnl0BT)0^R0T9(Su=dU5!D8rA=C8thOR8ujAKUV_SEAFZm9xobD`2CFVAjbbCp) z=k~`>BZmh8LYUud?il5)4ou>pZWcjn(x#uNNPI>4GG!S!1#And4Cd%>_Ii8lC1eFB z-1pKgEG;jG!+=$t^}A~fv^;Klqd3gnBjlQ-Otlj6laE~Es9c1&6=9{1_Xd~5%qt`k zO25~3$a}L^2i5PVHX}VvNzYOcgknvczMQ9uZbZ5;GuNW?&wF5@hkwY@$f z$(X@PBq2%;;)jvtmi*(ae+qxW-{Vi>Gu!x=h=r*d=vP8+e5>@ z48IFL9qct@yGyk39_LfF?)AHl;yBaLghCp9yh%b+l!I(Y-f%9X=~KAIRPG?6Q7)hp zVXvbBnQK4~)nstxUt(PiJVYdCR|64!%QcwBl<`0Df%uE#+A`Gmuj5&Egqe38$8F%9 z!QtJPVcLxffGbdPdO_h{?X0A4f(cr-$KGpjk=5t7`q8cXIryQ%&(%5gv^*yw5rJ! zQF;xt{aQ&+n0HAs@y z{u{IHT}#x|)`&(cQH@$*>u2ddOySioVVs;nG!n=GAnHqHp1hhA;(oiurgX`2r+tu+ z9M-k;V0t`IpTzBM{uA#!SI4|-!#i%zx7XL#(e1ob#0?(O8_g{fS56v)HT8*75f^l* z6l+v{E?NpvCxw?iYAhWg%hZjAM4W@dTvyh3z_Mp?9uNrx7Y*(G(@3{`Ir#nYufm6I z;@%nY_j%hI=AMqPZQ`2o@1MzGx3$yN(ZL@r$@S?jJLnuIABs}`pW#S%Lx!`} zpRKJ2;Qs)~Cvd1}TA&4Jb@#tQ{{S-KIN8hL{=9_!iL%V6LQ)ifP*Q@I3{-;32~#0T4n%ZE z;?LqY{{Tkk_>%Bm+rxGK3-Iso&-kMq4&%7(J}3AC!L>X;z&q~pJ->SPUI*fRu802s zQt@uyedecXYj+NWbs(NiUAxmG{{Z8!q8Za>aH;Hv$RbTs(zX&QoB&js5OAzcF zg9o4VkEZbQ7O$uO0Fo=}isOn^_GidSXQ4<*3oDq0K|!!eZlViN$K==I7vO)!Uk`R& z*Nu2)w}bpo@Ya@xf86Q#{{VyduVX&mUB72CI(+fg z>RbmDq)Qn1ZX}eX%34(6M(kRROVZbP@^j_PK>=?s9a!bdQ10BGhTMzdf5b{sCn>Rx z!l008@P&Ic#$0Ot@;&VXl?UOF%E`^Mwj>uBjpUQKF*UDdTjtY6U1E?3u* z`mYRdD-VfjscMQE_5^M4Wf)ZEg)|*(_Ig%^k<@+@+#1>t*=w?>V!e9Wty1K;6Ay&4e~5Ic?ug zk!tY1-HapLYJ(9|83eItx@UOy^*RjIg%u^OPV}d%!2rZ1pi~204&*;%5ruMy_%*Ax|>*P_fAl27tbulJ*SMaz&ApyqtCtMZ32 z?xh_5V<^694sYL+&~MnkUV;!m@psThti7GI~Q^u{{27hs^xm~Q)|LV_k#5W(07 zqi1f75l6X6MT1hqcCC)*3*~P3_v@Ac#8f(dwAjQ;P*4fX-#TkrxgpMQ*H6VY2#}bu z0HLd{YPh%W{rXtRN}QyWl1D4&05R;BBB|OrOORH7 z+LL9g!U*Nw@VccbF7yXI;|XiZT3y27(_~v%iODJ}pZsI1E?7!XrX|mpmz_&RRzBa` z{{VbO!$a%uN`oBD_=Dcg8hzp=ke$VnV>P*_4StoJXQ%i?1x`Q|!d}BdeDdoGrD4cX zCEfD!?w5{B@AX|y;$lWVYE#X7s#~04udiOdMFMJSDceUV6}Q|t5O;j(>lkYHM{fRs);k z)#Dvc{A3zEulT2aaG_FCgssR*vdlMiylj7me0y2#JE=OXnQUV_+?NI{OHxYb(~SG| zo5jdUS`y3?e1Q((`@A2AQ@J20EU=-bVz~%Y4z*(4bF^sMsd80aQgClVYH((S$Avbd5{g=DH( zH3EgUYH0!M=$g8d2{4SMWkuVNZ;QLX-S;}Yxk?}XB?~_-U$(wbQ8+8^5q&+Gu155M zd#w-QbR~M9nTb&poS6c}&#gsM+Fx$0m8ohNfE=g*@4TX^n}mcY6006`r|!`~_>Nk- zv6=}9Xw<0-iaV>3a#eBl&sv-+LlUclLDrr7!rVgUCS2KS1b|EBOu(jY`fB0h^W*U^ zvvhoKykq1YO~ibRgiHEbn4=~*>*}9Em<)+&A=ET{-M=;DBgAoTR#hyTZL3t-*j_Z( zb*CiX9Ofs6`Rgyyw39iOnBC7pSj1Q#c45v053maOuH4$)Md9~n+@{z`Htr%aWI0d?4h^->>(+M>DX|ciAXot1{vl-os;Z&stMxaB zG1LlRIhdJ`mD_|%xY%%0eDr`yh)`ZuEmB5hh!f}yFW zNL_NBKw`q6MT>=Of32Vme%aFfl-j{S#76k1y{9I^eHlu ziHz7-zIo}FowYC^3X)l85@_VxptZ-OB<_qxwIw`e)e0$%rQ1e-Pj0ki(2x??ySVg) zIHUt@*jS+C9nx8B}1E@PwxpSGX@%92j05&@Eqn_ z7F6QQJSVC0w)4duGlYhtgYy+o3`tdVd;3SxB8o9e5{#RQy!}&?*Q{V~wgj8zZ&>zqQsmOvrGtoc*B!@kqGj@nzR z0^SnErpWQd)6yJ7vx&%OZz10+L1dHwPAn~8<1U9c{lk4JGN49x6U~Yn6wL?weL6;J z018p6eSEtyDNrPf;xr@9`&tc*U?f>eGs5Jd%04bh=w9t@uZ671FNhD%&T>Ju?4yYQHAGrQ;1*Zwj);C|bnU(=i#AqteHI)Sa0QHL< zHS+d=^()PFnKkc^H=%x=JenjZ2P9UbZ7A;mSyE2g8rMysMz)lsqQAj_;`gfdN#xDu}IdsmE1k|DOg|}dbreEow?a>o^JXqfE z14;8VHEm@70Dg=JAQGStSgtE^GB!-w-Aj+l; zdsP_c{v8ENf8wG*zCir>M+BB6ungVzSe1$Qy1cUeTQTkLo`;P`{f#`mJtDv*%5eCL z9PL7H`M;$4T1=Hjqe+V0?2C)PPK7aPs1_vB>_1xP6>=6q0mJ$7?>KSWcFmHRi$k5v zk;VOwO8az_$%XKtob5_?`-%{;iABLZ^RfP+#*Uu&klK5)lx=-WZ`Y2qrYRvsK~&n^ zk4<9bWhx;_aQ7|FxmPBFYlJ zD{{u?N2faP8A=2~qb;g9QdjWkpQ+Qvgpr)REhWSpKOQ;8-8hP{S9FR~645Fg-$Pi6`SyJr^btM?L6@yERX_?1+@+{^XB!6gpw3VY$ryz-}G7r)(!SIk*5{9Cp6aw`+6M`Ss^J5;-cT5 zkIYTzxI7RqZo@+4ZC4AyzSPPyIo zi5>+cfW+^uJ7~(JiyffdESz6IV1Au-jhsg*M4EVj%-^P2^^8bdUR25j)zxwQwMSfN zS=sFpkU~HK)=!|;r=Kk1M@mRCB5!XVqCQvc)p4XacW+2Exk^?Lp@AwUy1rbrBy*%g zA(BV=f#*J@m1ScOR}3mmyWS3<0+NEFwIGb{)&LuCpEw>+XtFg*F|i3?qTRHg*P@|e z4hS{#@3x6rCMhX6aFIgV9E;>Ok4Tn)#@FVwHjm4k3;JiM3t~!x@1NqGAl66;@a0fN zGyPPJBo=0EyWGT@dIKiMJb6{*#TU+PCxtLcBO^Z_tpAOIM+J^Mujr4mV2AfZ+9Z-P^p9jp%@NCnhh&%RfuGb$ZX&p+||_|TPueCofLp< z;eQ#QC}RZGt!PmWkPCBQ^t&z<1(UMi@QmpwPp7T_h(PZBeo9wu&VT8Q6J;IYdyhMC8V05%UdFjJYyq{^9A>)R3YQMim^KcIFIa zVQ>g$pceJNbc}U%X6?+BNG=6)XInZf+MC%KyDU3SlY=f;16q0N_v;V zl1X4Wb@kIYlsRw|0ea_q=LT7zfQm)mk}5~iRPnd>_Rmy7QkRGsFJLSRB&IILxTgs zM^*r&C9@Ry^YVigAtqW1SUG$AXUwz-hfo1)%~qEsy{(x~M!0&ijYxJq_onbQ6aZ?Hh)JI&?a!`FX5|bdp+$2mBc8NlBOWO+|K8b zhcWN;^;tI(P1ftR^eRm)7mrSWsVjE{pD&RO35l3MEEEM^$CK;*z*6o!`kN&gNZdpy z0NZfe?^S;FUY#5Q!@@=;r_X%h1*Jr(SgpMP&rZxL?sc^(+{v+)@+M*{O_n>P(E5EV zrjscoQG&E~zjbbLU%QP;NW!UPRM#$axZaHbGrDA^YYrO~@_wcBT^)i!!ox~do9b%= zMHZs6Rre@V1ppMneLY}ZT`kKmmg7|-<7FlmhdA{woMn_K4+}Uu*L^>20R$oOEUC{g zYj5R9U8y1v%=b13vHt)n8>Q$a9NFnu=;;MYASRnWza5B>LQ5+OLy|S`+|m+vJ|t=G zj8H)Na#A;yHyeF#)2ETc0s&PYUi`gcvnNc%$PN$tIC0xFCe-icsU|TQWZEJ!+swBQ zm+o+M(2^1oXmMQ9l;7t_2`p4n9~DbxZd@L*5w8}m+Q?%G>2}r+eAnsKN)((VH4gOy z-;`NDYYrShlUvoYuAAprCr)vZTVobcZN!R1xZCqr>5sQUQdE5Rl9Q z&UfhczqC&sN93(MzG<+IV^YRnO8)>}hN)>#Dt2cL<(+6^*wkKFVT$dWTRyRit_v8+ z+JjDZkxBwJ{@HqwB#@G;3iZg=046F{APetY^*;m35AAh=TXs5dY!c;iYPZqly7c|} zT6CogvWUOtoS~$tY?4ug8_>h9-%ul`i;n2abc$r3D%)qFR)zjjOjv zXYL_kC77k$3+{Zn-VBQwP0k|~vAKR@5Glo!RpXqU1f`PZnO?*4UeO|2CKQZVUdN`~ z^MiD!v?fL`5oN=;%%C-w2d#O!5|L1XOR+lNUYbLgWuYM}QjXNmV%VuAEr+d)g3E}Ygqo~uJlPQyEC(^wkGma+v^d|B6*<1>_e)iqfO zL}h{8Swn*Pb5wA3!7f;rI^;X~i_21y5=f-O*H7x5B3&}*k(M;ng%rZj+MC9Du?;^iQzI+ZcHG?o=AX}GF-cO{c-Ei+rvQW z^F8Wf;ny_cP(~+ipAScaH1*{XjEc1g@e}F>FN!Ly_s>F9ut*|+4!_h{1v1pEL;^gv zr^I6FNK%&LOi>uTm1gf2$Y2ecCvvtgTGySkL-du7D(-#-%c+5=I zJrH`u65%BW`87b-`^r6n!Z)^@M~IH(QQvkL^ufESP;vlsn66!$K!JA(1Rb^W1Lh)R zv6cBrF%qn}-Ily_`}JltV?k~E_>15nBrFhZx9Et9LvfY@RBm?3=M|e8$27Iol0l`2 z%DtEt5se@mL0RAN8R^ca7+lFaXvV<3qSvZ^-BhN8(S$;d1r!ogl4vr1pV*5JZ7|be zg*R~X8*`ZYXY~EL&zzHtC>nI~&!E-{l>!8`f}%^X{867S-c2oL##d9cjcu=K+ssD) z0O8P=Eh-F~r(EmajRKabp+^zIG!N$e(hZFLC77mE7ChkE<1KW#NFta0=LQN20gHjV zwYl`=1pLvE+7XT;60>AtOLyCzEj_vzAtsj(pRei*_X`99F#|#e<{?{+mtK`yg6Jht z<;V2*>QX#F9&k_;P*jps`HF$DZ1l<`gIMRwMPas-B0ip}S$dKxRj0%aOTy_%3RV_X zC_QhkPgszQ=@X#qh?Q;K|(Uh|Kk+e%Vr7>Q((=@SVf*M}xwPN7p!4ic&ky+@XD6A-19F~lk5 zZtvv{^gDWtStXY3ZG9gx=`3OT^n}@>wWTx>Q7oWgBLGP6ui_o)$4t}Pwexwr$$n!A z>a-X?->l`8DN0Z+hfCACM@>Nq)h7P{*YyI;35BRxApT>RjB#~T{{YG|UkEv!Yw6jA z@Ej=svQlYHGT3yZ2scJsa79o9++6y&xR;DIj+a`0`d8<+*?Ghy07}b>(AAr+x_Lp7 zfhv|_HFd#-l$vpu+Y8d=SJZm#-?R}#1tb9E>z9idWCy4&@$_xIzg6eOisgSTV7;-q21z?}5w%SdV3 zXga!tNV#Ga%y{Omvy6XUkeEM-3T0NFd$nMgf)kBS*$zXm?l&L8{{Rm8VXdvEMlss# zWAiw=;>&sGJoJGJTEia|i)GYjxQok3!c+-$fZ^Z9`RUm_I22DesXUInzGBJ*mnXyn)#!4+%rVlB=R2ekgm?=qIAv}l?EO7@I-Gb3 zs;|5SrWZ=oNKku*>9>&2XeU!wVJOCcj@2CVeC@~mz50ZLFtZYqdwKk{5AFnkE?V%6 z?%dt$3pHl4mCDruSHWJ-A6}c3GZY5lsCx5@;&2F23jw>l4=K^GQN`UQoe`6alEm8N z7Tzg|$S1|mZD2iJRw&BKu5G=x#Ha24ndm#I)rYv#B+XFKAuax7_}i>6A)K6oG{L{6Z6zFfBO4 zq*b!fn(wY%VxipkTO!I^Kw8U{O2@3MeR^>ZK$Q@$JHRCcOj{KY8TnlINa#^hpSP3Wqimyvi17cT3kAioG5zN zsLXT}G1C$d%rJv$(`wq8zM?f(aXFf31Kio(1?n{v7`R!M9`E zc;Dg&b*K1`__L#zr~Meu zLX5Ovl3Nm$ovT~4BR`DcxOu7js{8ywBMh`rDJ^={i(K5+f;GqDulS?!uf!h@?=)lL zozKJFmWGr+BjN7|o7(B>eq$*Qb=)#%teYVRTT)F_r5md0iF`D^8F*z%$B3U1uG9>` zX2SM`IM1m};u59KoA%P-z%)F_HX7VV=jX-$0E-?M9bI@c?zDSUT_S&}a2368974-xI{{T_LEERZ;ZIE&p z8o3%qnel&*ygltD7Qw*rwu!fnW5WRDQar5S${UrR8TeLeKK+; z{{Y99ms5YJ#7Q@EqIc<>1O8B(j%5Uu5mJ1Bu4bpLVwK~ciXRQVkB|3EWv3lZ*S79E zIO=N7J(jMQVW#P5>1oFQ0PE`NYR=mo(w@i(5$jWi`cD=n@RIRjDJlvfoD))CAO`%} zGGBcEPsAPn0COqNvC`Lz zr>P#=QWHyFP@Ll#E%1EucidK`-l^H2LU|nJQH9_<+gliCSe% zhIAP-cp38KtSxvHR0wN;9?yNwnnerYZ;AYC!@O5lvhlwU)Y9;PG_?FQ{LLw9Y~QUN zU1^lDV-iz$NvR_xzP7mk0H*M~R|=V&8pO^ZmnxyyhV~SM_)b5F;bvgsP*W`;nv2xg z_cza(o+0?5`P0?Z*V66Z4bs&+JuN9ggkR!e7)$ci{{W%~4rJCCoT88Mm8mLal+0%) z;+pTxz=xOqL{TsdL?nL_<=<*hX{qHEKOTM~gtfchfxad0G`lHE5tnDJ-fMnDb$=|> zmv5t@>g|#e%>Z6<(@qzJ;UtkS>U;`J#Mcl=1+3(=@^bz{9GUfgHepoRb5v14&s>NC z{Oz18?Ee4|`#$?ex$v)yJTFtjyjwyVP|)#+J0&^9Vt#go)~PK-FAaOwN^yTfP+B;S z0(hOnFA-F&ITL2zmT{#g>mp>diGu>uoeRF)?nRz}UNipyrof+X+-Y}uGTW^UO&5Gh z$F4__63w};vnEJfsf?s5Sp43# zD3D5pL{$qvXoQi8M4c<|)%>Da$b@AwqeVFiL)QH(+YeB$8wOwn0rwOG@eCCq2vI6# z6=yZ+lbThcx7_y(qaldNl%3JKYJscu0=Vg!a>5efMS-#9-6DXbC^#b)Yz>-+o6@}j zfel@OnvnZ|R~6}aKTF3)mXeq7;|hKI^np!U2~&7*>DHu^=j=0Kq24ls88RrK6Lgdc zOZ|O1qNTAWQ4U34D*NUAMdi&&N>i^;2Ioxtvx#2u(vU0Aahv`6s=)@Kh%9%DrD#w9GD)jv<0!Ae`6~Fao^o;a%n4=rze~UcGdQGYS#_!br~j=McVUpmV1`D9GX!HDY3dk^&1}!SbcgZ58h0#p_&w zAqg9A03n&}d^;`c$1~CDO)iYV7ZPes_F8{ z{V;WI9!MxgTeXgrZ+M3XTn+=gI4BKtu-zvkHwD1#|{t0vrez5SnTu_)uXbhnjy zWql!Oh)QJv_J%YN&2stQeDsWTHFY$la#V;$LAaQ?%3&0E^u~DVR)noI@VMiIND#w8-w?y;Z!-34=Q3bB&TzyZ^?yfr8;T*WDA10lac&AENVJJRf; z5!9$cG|S6-NbSn+dEJb@r|KfM@T4)Y{6%psR6#8w;j+U?HqOYby$#&d}^84RUtVwbR!ZMmZTuiLE&E0P&R zVbI+CbJi~=V$>5YA=Z-buRVrP7m4<+wuB8$Jh}`+BqfU@Yj{VT;`7mDtRZSCTZJ0x zI@im1yuxNWCL_cKd5dmu93A+{;gjwBT2ge_t1?K~vZ+w|d4`(Lr>9>={{SB1aY|?K zkUc3LH;c2Gc}i8K7?n-#U$qaXUea2XLJO0h&D*_W zHF$o}B(cNYvx?TfnFiNnRCj$#+EJL{&0p`8SNxK0beJb&M!r1{f-WSXR<;%U{Y{-f&N>yoo{5!pNu5wo$Jiw%Z zSA|s5Ct)gZDW{j_FoMQWQB_tWWz{KP%a2T~v7V^3gokZw<$iI>4=!dB$(LcT@9}4b z9k~}zcyOnh#;h(orES0R@zSeK1rH16M!$~oh2^~LM-~L6^784{CeuN+m#GviL5h~( zGUFFr45X+~0na~}I+B$Dqhy*Kh~Fpt#L*Kmv&>V)wSGh1l>K@didcQYK}H#65~lzp z93gE{dp_{fOIfT1k(8t)cC|>EeeLx#(n~n}qd1`_IgOS_IcaInv-SFPisj;W zEOL8tXjx8@aalTd(k)$+6c3naYd@5cfZ4mu|F$5eq4P2iQ_Ol8`dV0mj znJIYmi_MP`&OhZ;%Oxb55Z&+C&LJvF2ql(IjtKla?*u8R15}wCs&YkFA)5R20-R1m z)A;lLyxJmR3jh`!bj$PW5s|4#Fy!^RHqk+xzQ2B|q|gIaIWRTp04T(T3l`;3?%8Z3 z(@q?MM!h~_%iYFue@=#=NEa=gx_mWW?dqH)b;C8wd)GCC3}<>xe%~3 z_bc}G>ro(vtw(>mP%iyhGtD5l$a8}`Y5r%g(hO-Li!`TT7IP7v+^z)dYooc8dqT5;4cxq?)s0puw? zxb;0>qVf__ShKj^&ld_6AUILdqn+Rw#Vtj)QQUu+cV5@|eY$NcNY8VldR6_5To6TS z2b;h;^4h7uHkL;>Qi$X${W@k-lS5P8HRl4FP#u)RQum7fq@T>GdP{Rjc@(PU+n=%4 z)SuuBeA`{)JcJOUq0H-DuO7yB)uYWUmYmfl53jFA!oZkTV$h`|fWQk7*6rVRiDRi! zE8X|7^gh{t*Q#Lz7rvi4YJB1raRjvnUU_wfIy$U;*XHD+EOT*2{c{}gj+B^yx5OL= z*RcbZM7JclQ&F5ZI`g*M!@k$JNZ$otrfoe(%&CW*^_?w60U)L(y{H|gMAS8oVa&M(Rd&&iz%8_LZhC+fNVxr%hK802~VVux8Hs=Eq0dPUCc~d4jcXJWc zN@9^uYQcO(IL%Y^>zJ{-L@b9Y!Z3r;wgBIKUIf;ODOm+SnmCIrZEa6#ahAP(N`sL# z*1Z1!S&pzl{{U$PDRiElU8+d5ELE`dY0dD~bLOD>ew{ik;yI39`@o9|kZqOw{^A*& z;_P#F26(UhXQG3fH+x4GE*Zz?E|KTu$f^LMvlIF+R|-yG`TpX+^@=eq{{Yb^)<017 zBTS6DTq9^>k9Mom>(}JORf#MKJw$y8L&Oq)l16;nuSa~MCN50dS5$JXHTAFCqJ^+@ zy{T^P3(O!DC90OF)1P;Y;}v$%mj|r9DE%A%0GHJkreX(&K6*i=%L5TonL?oJUwvSh zX$lf+FQVYC1oLA066Sy6C>osJ?fu0|l3Y<#aQ^_`r^FkjrU=J%C$YN&h~}hK^Pf(a zn5Gp1{RWQ_H6XSWGQ~S1CcEVfwDiS{P$0xbUDxO&PbqGF@1B%Wu!3L24q5s8bc#y^ zj0nm%e0A&U?@AnOvf?Tx#KH^rYoWUIGX>GHJq$%Zz^CK0!UA3BT zocm@g^yH8dL0t$V zvy=>iwJ5j%R2z=Bv1TxyceinJrH;@-I8e3Y9C6l?333g&v-y5vp-jO^U{6Bl<6P|! z6)9Af+FPVt;oHe}^>g6>4%?j|s}2LvHr0k)hS4_IZIp*BtSf6xk|^c&_d2Ljv86ak z2RHJp2nQft&o4cPtt%OOe5o2rFfGs*P2qar050SeYqqgsg%A>w>|Kjdw-oiHOQ#LZ zGJvMwlu+Kbh4AkCV6LKJzy=hP$ct;IUucB7u_%z1*HL!$*H|O+03_9~&O1cfn^3Sl z@s53Z3TIdWh>Wz~C$ad0pdh8tNtkjM76cKipP2S=gorVTa)QMrNW?@)#3WsPzgz32 zsbI{+Xp^Pk$z&->069u%U5kQ6M%8x8&@`aJdv@<#yO@=}%u?|2&T+>~q=MwppSI7+ z3KFy^crmDlD#+~Pr=$<4T=?C7T%*Szyh|tj`XWgoiDDmW{vzaff|4BPw=APLXvvqG zZo|x7)r+)H`~4bvfTY+Oo9FwBnzR1^0h4)t;r{?@+o(e=ra-gOHM=eh*Qcd*m&8s; zY%~?+`s7<^dxuy;2?%g&h&!BsH1al!k71-}=>VSK0TS%6iNu_~_I-Nu{92T$mZ|eC zuP5aiyegG}MQXy7nt~W=DO&1b=7y6!vLhTv|!E1}%P9JZ- zRYQ|s0UGzxIZ6VdIEz$LAlB0eVPXyNh=L;hn||FLGXje$rMB+TaVlC;F$I04J$c^# zx$6s^DM^jSTWiX<9wU3U!)Snwr5Dgjs5rF`~@DwY2L;MAfBG%U~2zd6KH z(~}{U#J9@%Sn~OXHghjuPH|mWsRR`jU#p$IDYar-?jPlc4FELX&AGf}#i{@!5~u); zxRsnM{=HGyg8Ap)<`0Boz=BeeA6FubP1{I~CdrJ8j9Ml^8{(?U{#OU5JzXIoE>+@H z!{x7D_9}RV6EP@tFagC_{(&%7mWk(Nlov@+^5syiPeG#%O|T9lbsCX7=9*H*RZV&ALAENvz8R_Tpw&S=~6&|}f+5AwU8jr-{q02Heo zUc$9)OZmjamg$pg5V9`S2Wnra=jqQ?P0fF}fB}3%!^!lmV+-a=6e(C0mF87V2OoRt zS;+>&&MLL3fJz)Ia4+vj#u}lO5`++^+{0O-zTVwbpp>(*_uumnk^+9=m*P_b&u;!= zNb5$}#w<@Qw-$zE+uU&G`Fg6QlUJ%=+iJy>61jhJTcka;X2^P-A)jyGOGWn z?&HQZVBHiggrgHN+Di*umF_(;FNZ3i@fK}!sNY?pqH5$Mpqw&~o089`SLX{gymI3x z>C%!14NS``-7Bw5f0vWhnS3Ax)LACHvdDY&f&z)-Ab4}f4llYBp{gP>_)ml9lYH& zoTku9M5vY`)v>$&Z%om7=ra6q8-y)`q#Oq!E;4;x}7tm5s{0 zi4z}BO!b{IUI~kI;XUu!hWK^eB_Mz*OV?)n^MmxYCB8AaV%Jc@Mj`l_TjYj!r|C{pjk&7`#h3kAD=TST6ucDaNuYLYzI?%z0&$ z6WeP^SS=~Bw4ao(Ge|_RG5&AdQ)QtkDqC$RV31&`pi>Q61q@NH~vwnY*2WjdthU>2|BPC~?vWjDzdVbvn zXeuEl-o^+@(pkJJ9V_1d0D`pjw`NY(GEehuUA6S9lg~g>3Q`iE6Z5a8-O>i4610@j zy4w3|Zk3O8wFyd69I|XH5gUx->$c2Onmsy+h#@Hy3^jV@Ikwb-%QErfD9{Y(eI@&N?631~{uh7nVD3mXSiE8EE z)Pf{{3Y4>jT?q8g+8}k@a*YhHX!(RJu**xujYeo+`mV24R~$~u?^y{f80 z;qyxP{)KfU666+s`|QDNK_&kH`X<-8rQyeEsTO5sF)XIpHk-J|5v$H`r01XnkpBS7 zF8!kDnpU?|zX;NVivj&|cxN3{M{J~=cNA9ONRg`o_lsF7c&S@Oprh| zb3s~HTU=LqoqE2S4LK;b{i@2`8-IVlM7Em-knE-T6HXfitbepwNA zF4RJ;3Xl##U;gLpbQK_gKv#<52qvW}#s(xk9*x%gpE#YKnHfw}+hwqoO9^G>DxdGw z1|mQ-IkVgIuf$zwK?PySS1LaAp+DRY9cgbk9lR2_mhriK&4=rE(J%lGU>$)y_jnws zipPYOBToCYWa>gD>a`Z)&{&lFH-EPsRVgNhhB<2k#FXM*cJ_#6+(j?m+d(tSy8fmy zZh9b;Y8sxtSEjG?5}AO4;1w%2sO8t*F^t9%h*FDJW^lB6(DUnkNl6N>UH7%1X;3bL z2qfoG-#3p(01N4vRTv&4m3GeZ!emmYdws_WgRPJCR>T>ffIzgvpjlmyf_kOgzXBPgp8CF=^c? zWPeWen}^FJ{p zi7QD7bS|6O^UHb&D{1CkizOSdIL*JO-=#{OoR9<@05K>5VYkR7Xa=y9f3s3~r z{{R}-NOD}TnPGTd`J`^IAAN*Cyej~XAF{3S1Wb$*co{0szJs<6>UK8N=GtQmr(H4nW^m2m99kE zM$##|I4Do^XOE{tBO_HGBLg6eUM7|tP}i2Cu{0qaN~)y150M)){IXHv)7Gn@sYav! z03ThsK;@*62?sk~Hc!JI4H;^~S6c$^M%o$?m3?1x*1F7E@hZ+<{{THdqX$gAKhdbn z2;a&#PlxEnFobl80Y%k2W14D;+t03gEV+6zN!_dN{!uH$>X>LfJM`Ke2IPcFtWfd? zF79#v0B5I@{{UJlZ`-^;vPmV$p}pwVw>V9>W zAp;A7O*V7huqNpwn@YO0LCW3oeO^Aj8G&XGu1+%B*K*Lj;F6@_@nR1^b<5{?0(z0R zb{SRMV#|?}ivIv!juNCAc#=<$?`Ww3C5UvNJ%xMH1Js^cN-*Mq#jbN+{{T$&Y69v6 z1Io7ejsVbGqzA7*T2P2MJ#Mgi->*|ZNW?JMAKYCs+~Ooy-|@~X9p@eBz}kJFZ-hnBAOlL&uuE z`f(})_?PFD8^lYqwX)?I9md3XGBj}?P#jQ?P!o-Xp56Mv(&|CPSf0dId~>&ta|yAb zkwj|pREyf=OZ#3rA^=DV0FwRp(`e-*5Hi)_P%h@aUDU?%{{Rf%;D_RG$6otK<6nzj z7Ffv&1F6>~?9?D)6*Kzs-IU+`~n_*?!R z`%cHw>9XahBz{#AIV;tz;- z$BuZ1#Ql_e&mQp46zyl>bN(|^z3sK3+-%m2{Aaz?lRoRbH8i)Bkh$(|f%MbRXRbnc zS;agg)Er=pCDP#GPKDaJQqLHph7!cds#Yn~a^#xT!PmP+g7~xXh8_>%-S>0e_j>yM z{{V9s>gZ_c{#&J`sd3VT-8~qwJAEpZN0u?QGMZd3(iJ*Pw4nn6OIGcA6IVLxXQXD# zT7K$f&Y3`5Cqd<1vfeo_<3Gkv9{8ig`^b1id%xklKS-B<;<}nM{JHj@oxf9CPeVot zDa&4IrbJ~qZH!D=?f#wgSsWykFNjh?=9Wq^2LuWNPJ;Og)-ZU!J?8zs91w{nrGb7y zwX0^!PL>&Ieu2=wdEB2%UJ_Ta%*t>2MfcA zlm6hCs(%pqxUeIZM*P*A#Lwb_WlIKFNH1}dR_E3l_CFDKeTJ8Ds}%8W%fdT8+ql$q zG&D5h9{E_tF#N(>yLd^O1`57*ogq3%o}?xJ0OL&J6hi{%3+DIDFl!j zrIJRJYnMBA9zN+_WoTPf{_9Js87CcIfH( zbFczU=2Dg4r&Qs-m&Jma^BG8!LhN3J@3px>=FgWg3PKl!Wll!l>N!}PiM`?9f_VP` zi1w=u6hIIN=x@r4gSagrrZohnKs;-0bz zN`LW5b|)v-oF9c$$#SRTn#fS_;XFxmxpQT>h>B??lfm{j;v#)+r^TPa?v>fvJrW< zoViGo!KPy5%^!MsIOtqze2-Jg4Kh^8^Af44zz|#uzJk9E%*8L`Ux=RX#Pp@99_L4N z^!rZZyq9e=LUEp~w6t{e9eu3H5n~BCW2VZf>(YG_7Z1bC1xX=_!a*2=RJ(Q`lwy5K zN;rv#M6gaybFNRlH;sewC*g-<;$H~(SA=+emu;uw29~FJr{Yo5(2lQ(ciNg!+aJj_ zH)}^i5+N3XPD@_0_%HHll768+eB~8Ld?gN92zu3;tmizS)Bc7J4xA`rk>RCDZouE9 zXwLxn1LH%ukA!w`)bF*tJ6F5cl%C=mIya-XGoH4zq(@ndu3wi0mg8&cb?Lazu6-#; zJWRq6CopDm98rTmQyA#rxQRp{f}#n}uOh%bBi|kEyen6ireyI21JRM4DzT@6hR z)=sXcbU|HBOhX@PKjye4(<*LX$AG#sMrgzbjwL zG@pCfd_nM!Z!Zw=-ttrMozmCT(PjStU5@!Wo>lV4aahJW-v0pYKdOJ##7PO_8tqE} zK5LvQD~p{WN^(#V%tn0&$c>%whsJ%E#NDiQv?geGow|O0j-;Y7oy3H6w`WpK=8s=Y zop`USeHMQJwG1V4R_s8noW6~`d!MI$USAt5Vp#jgXHm~)$-mnw#_aHqil^Flx)Wr^ zLy}Rc1q&Loh1_$C>&MUFO3=LVcjVrC#>twTX-a_x;EqC#$oj``{u%iH0Bz$Pj-TdA zGnAkf%H&9osF*_-^pCGzH;b089%_??nz{?I@1$#Rlch{jKISBZ(6(UM($AhzvULy2 zm!&nfYB4yv�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�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�Eh=>3R#jllU0>H&k{M-94Ze>j60Qxeql)9I zl4vS$<=6A?)+sZw`KHxmx1Y0 zx(28(mX5{_WvG@&N@fBcwfz8TUE*j$Kr9Jvjnq@t!iuoCx%B8OP*ET+_|n~tKe&~v z0eOfHKm_kv3bw$*ZpBoLhN{R}J2!GKrYi36;jWdQw1AUxU73bQy&-gkB_#y`szKB} zGVH-gGg~mz%B6{Rtqz%xuhxpi^_ZgIim=#v?sm@b)Qm||l3C3`ZLLi+=h7SK!Naj) zW-l%z0*jaJmY$GWfN&JU%Vy;S!0x;lmXN}?hZ-7k1%UZ%^G2B#F$6MOS6rQE&QenO zh1b!omwUv7sHR)HrL=o@Xlthms;0ay)N~aFk#vQnBMN|5y`Ly0(;5Om zM6X##B@#U!uctiqM;9g~bIF*LB@7vbL%w=PrkQHooz}7Rx~5n4_P#xOf=)rZ+p_~g zl-L%0La&h)u0xbh6{&f0n6=7!+reC%wSejl5E2c?ewxMc3}gf20ADa~&b?zSq<0yj zLbkR(jA%mt0KZT`E;}vp5@r*K07*+T(er+tyhAwLR>=V>Y04CmqTl(0t3*vq)qqKL zB(Tf7ULcnPbO$s=A4@F4`u#rrO&OZ8S);??yAWwj?|q284XA;bg6#~BMwvIx5BZ*q z0a2kUI_%ckD1?2a6MH=#+@NJuY)8!d*5xhD;~!pnG_VkGkW%#aq*Royg<(MCY1x5$ ziGYpys~5o6^HzP{nwAs@pd@LaiYSqdnadHK2bI~Ye^^o6YSsh^H5EciHMNysQNkSh zao-3E8-Xc1j3613!K{EkDUAnx@yZ6cA_DhyDOWhhcplE0g$Wu!T9Ni^OT z;wP;b6DflSA>Q;pnIAZ+cUsPr=1T&3T(QVLQeKv|pSN1FWg=o;fPgf5YpK>EO2YyM zdDQyC+3U+vNT(FG0!$iTO25BNqy&l&h+<-sGsXZx2AN+z?jd%qiZU5eoTDHyjMz8& z^l5JH)@teA`a-h`NJ>_+PL~h8eBuIh?$fq0jms={-e3M%{b~KKq^yvV04~9VQ6QyD zOt&Bk^6&Q#`!5*T66Bs(gDZ+2$a9eACE@l;e-DTh;dMRocr>}MQQ`zO>C>!Vd?Vr= zit5Vu2G}`RL=x5X^v5!K$l^F9*)BkCPpfaw^9)Oxw9Kg>k^D^oaeVpoi$<4^cGIlJ zH*LgYB7W_Z6lKNR(0}8tAQo-1I*-PX`gnnbPFZAo`}EgXVt9^@w%7AbyKd*ii=t}3 z(>!CL8EOD9sJ6@vAiweuWhD+2tm|I2El7r4&XnUikc~#-OUyLL#7aO1-`e=Nm4qe7 zc{tNgcp?=ofiAS1fuQN%I2?>F_rqd1+hCVvu5P9c*DlRGAB8!_V3fSUOjUP>|T3wAS3= zUYSs($1QtU`*q8g;txVQVjzj)@T3GXNlndrJ4UqpPxyC3;x7f4iD|JsTjBj4^SSLQ zS$A47jCH%d$&MLrj*NC6=ZUtLuUY;f^_6`m>M4-2+#epKC2kxfxd~Y0OC3RvJ@xJl zJYNU*(_SNnHwBIm#DS|dG`w>+gm=>L{{RvAf5x;sv$xUF?^q2 zp4>deGJ!r46=$sgyWb{@*TxxcGHh(;a%>&k*TYv ztJ{;8=IKFY9V>Gg45Pd_S!n+wY!MQTG8#|tbZ$J zqRVj@$MVYrI`q;+wWkLeBMi|@Aw*DEmZ>GFnU4|2$(Z2C@dbx^7dea2b77Pz)a?8( zPr2xEaeJAULu3Wjmgs=)J493(9#@$?RV`xzfi4JRLe+n0^-5R?#vL-;2Liq! z-zb~6mFuh_7{fA^8BjMRjjQzZuDAq|<0Png2)v-IM6(3hu5)wG)0`cpG}PW$EQBLl zQ2y8L{{Wk>2@6PKpxxK2=>$SY-o&Bz6;}jQ1MD}~M~B`Ut$O-%+suQ{8C+t?w;Uv} ze@?UbfN-%;0FPY(wX39QaPuXseZ=_Y7Y3ilY~x@R38d^Fqi?c6_lm7rK zhx#|tWhP@JP3eM9Nv?M(W=)n*i7{{Z8ZfWav&5){U( zBl!~Tkjgmo{73#be}=EauM6=%iM%J_SodAWZ!J$3)X>-Xd%^ru!Mt0!(bCrKq2Zo6 zrQK=4?z>s`+Paq?&-~3tOa?F!cZ>QD*8a07a1sWDy4SxS%!fyM}O2qLs*yk~tQ z>R&_peB;G&GQ#+DB}An`f|Np-QH#_zMPL0FkHSC0uf#uzKOO!${{YZ`3p^XJ@Xqg3 zz42Xt5!LvDPiyf0k8dvSdi}I!_S1j#bnOi@WF0}&p4b%->(+fk{2PG!X9AV|cZyO= zASBAH%t0(@M~oAzIKFX-EBvF309o8r5E+_|PbmE|@DK2jbb58n{} zBm7^b+IRl|5%%4TwKY5&!z)iqTf{YWT|W%)e*@9(c53*fp5{@lU32p_89Lg;V-hfa zchGolGl`M(pQR`5Nq^>};$S>WnAULQflP!a!~X!1aU3L>oL?9|=M^wAP}E7V2^S&n znP)l=%kPUn68ul&KNs)+02#hD)9*Z6yZEbDy75mE?5C+7_qgnJJC=Rck8R=RlX{(} zW!OVYMq99>AS}Gksmn9wtLa=k!6*JH2uZM0cwFS`Q<3WL8sAKtFNX$y5sGZ-ps1@n zN~ybA)!4`6XZWK0Y4~fz^n7E-J8eGmPg#tl{{RuIquPHD2*uLTBiZT6pXJIhJgP1E zford&{{V%5jd8N3@cc5AmN#Hj33oN1ajmm>^S@pCq@~JK@<764kBvC6r%WAiWI zGCnWkTHg|Qu8(ozecyZDOaA~&?IEV>YDpB))t$6LB~kjg=kEM^2MfcagyG1Ri76P% zuy%4Sb63_rZ!UM=n7OkHlB0$4y|xq;^4F$L`%}X^e;DmG`)v;E;thV+w*Dr4{PeYt z4DCSFj)ZjOB!;q)ypo6q)2|uz34umW+gX*vIShyKDA1Eiiavbf(0wn50p_d+1W>gF z&cr?Q2AfAQ{wjQ9rK6yDR5fEAZCxo#yVKE>Hp+6A`ePRn-Zy@po}F%gkNq)o=6}j4 zDnd&ns_ksW+w@|;TI1!)l)`Qh)ne|}13xxrjZyez_+jxM;_t+|UKin}r*GlfQ`4V} zc($Y@_TC%Xvbp<5Q@WWM8hU1Ao`t8U{{SQZ03-Tu_@C2H6~vJq^gl0C zy6+_jJ@<)s5sCSo$9b+7si?~8H?jj!F@1hf{{SNT=hZ*TxVhX<)Mpi9{wN2)gq)Hc zm}_%$AE17X^na)Q4p8B^NhuR3RJQRbiWetWw0?m88h#*POI`eOKHl?0Y2dLP4SlzVv`LP`KhIMG9wLOsWvb|1lC6+=Q=do>eDj5kL8 z>g0>{_T}~K$??26s+atRd9eL;+8qlDO0gE2i%?OuZg9W1#)PRR}BSa}>o z)T;_+6;<3)yp0@d|iF7i2pfrN<`+YiHd^k8k3~~HT`Y+DbsgF)M3s@2B+;snb%DOxH?9e*v@iiqC!HUB;&3T9T6b6aWn>OPlxh z>8VH=0F;is-T=9-DOT?>Puy3vd#UTph&xfbmHD1|%R|#?KuC9Ygx0J|APWFKe7Zy$ z`nr9toTaGkNZs33+Ld&0{@%CLsX?67j{5Yp3Sj$gRHh!Dk*K~d_>Z@YXC2{m11@r{ z=Pe$X#(jE}IW2OntKPAV#qob{3XVa8oorZq#)t7g5IecbZ0Ovo1_AQ6*p zvV^&-SI+hBl#Ds6GgekjZ2j+(Hu0~%An|<&=u1u-v8dQN=N?sg&$k%q;7Dvqt1tkX zy)DYMj*AB?5&p#ATx19BLC8-k%xx2Q)$C%6M^m^Ce<|2@Ny{{8lb zR02NYU6P)z;?|B9{CfN)_#^Qj!u9)46!85cxp)3YeWFK8yX~gMlyx*@R?~ZIaz4KO zeMkH={Kx9QxfOVmkF#lGE$g>;C}p@A94p{HN){ zY_tS%NesDejV(U`>UJ9kpe2}Et%O<8?>-~7MmpYW%D?%XKD#PIe3z*u*}rn`$i zaqfS|eyBL^7;qCoQBiG6)HrwEp7B%sM)()Re-3<0UIO^fh4&JNapC>(sX2aToYF>= zrXEQ|TQP$Ey+8gr_0AXT{5lF-h2l^!%tHqRW(NN7FRgtxcLKG`Q2U7?(sDh&c8d4F z-Twe{r{WH*H6@{?Jw|%4H6yFPMMaEAl@MBO{e3#t`l=$=VcF@2@C0 zr6EX15#uQ=5*fqoZciE%ZQ%|_%_=Xr^-y#Cj!M34G18$x40QcrI9#J1u8H0z;mEB9QA}T*ObXIkL8V#Acd(V z^4q&KKhf%|@R3|u*MFM%K?(5!AH`w?JintJcG?=6lgO!wH!Z>gCV|47@p$THEs^|y za9Op}zw45ftddnk7cWNZO3>^wi%)0UYDN%*wnd8=o0vtG zY@VBw(i%Wi#U}<7VIT(}IMMTaAIw<$PYCXH%{?tX-&a~%#F)cNM^jdF88Uw^5Q^#{ z1$K%9b=GXz##60c966Q)&W*G5hLIsjK}eQnIkG_{-_T#SjAh~a+Hs6&(^+kg=0Z?O z3ZoeSCk^Jx=N$=rK}qo;N;f&_rFnCUC1Dbbsc310hbt8o6wqC{!u@X3QBl*~R$!}E zu+~ct+d1o{@hKtI;U({<_0}isvXT@;#w=Lhcg>(!LQ$25P+9;= zS*k_zeMpM#zNEQsMe&Rh&GU(4{{RnKs0nue0Boo#GmPo8f>fs%m2ErEevqqQK%L7* z)dh+GNJSXGG-zK>?)3DTs+OP@86w`cfGnIPSiCbDg@bfG-UA1EZ9{e@k{cqZmycXm z`gGww98TbiQ1uWDNi=@|8qxIcFDT1a8=^?S73LVG*lv_A_}s_e2OU)lIEW$NaepU? z`-xCeStkf*&+za%1dBI~?PEYUxa7&@ez*H{%4i*!(fz#p))q{(DP=>(;O+-Ur$6o^ z?sS>L@?F(N?NN?u)0@9~`t^BJ4m(lXe!PdwRTAZpLP>C^@m=$#cI#-a_j*ga%6YAK z+gnEC3To4f_QTfa4zMqfV8h7zn|&h1No5rDlpEz1U~cCexms?kC1-LO#DtV1B6^_2@?sHlg#q%v==|fRGAo;<{?V z^3D#?oj_GaIc`FF)VJ za&p<1`t_c$>LleBOOQznD3regpwB8Qk&#-@`#u)yQn3s{0MgnrV~?t==oQ%P~Y+D0z+5CkNB+bXj~p z5Ff&H1Ti|hUNdH-<00IP+Wd?xSxRQ&*smz1B{I($u9!*!U9+#I+HFXy010MzCrVAL zrkIUPk+zTKYUxJbw?kb&+0LK7>j0X{1toMG-qhZZd^I9a$sAF0?7h z!sjsT-9IoVc0n$6=Lcx&o={XGu}kALp_iFfFX__L5J)6d=y~n=$}E(mC}Kar(y&3T zB1o)g8A)jXj6rk0b3sY(_WR?i{kt2TKW$i&wK-(78Xo)38ENXX(<+3!Hw3sT-S1WU ze?b{z5C-N56cmti&N0*;<6e(zUC3J4aKfl+h!s#S9C9~z1uP8791U*IW z?aV=Nlp6*uK3Kj~m(pBa0iSMwLr~?P>i+z-(T zeu|X1N?p)>JLl^h5KOf!hfTn)zVGP~GG!7}jF#KT+Fh^Hrcjq)Zj$`R=#2A*6EQO- zf)c|$+dj|CNGgEZV%a7NL-+pOGFqjW7_W)Ls)6fvhB|YGj2&%N7;cntTV=E&Tk^m8 z>3P-&49ef)2$dW!Foh(JWF7f>#RJ6q!&|sy%gbqw7dHJWLHqRo01Yb$6e>AvJ&a{f zTaZC@D%nsL6w{n1l;f!%ne#}%)m0X8g!K1%bpWM9A}bU~WfvY3eR@C|`$}-4$Ix+# zy2xXndcK&J8T6;EUM_Hu4U!-83w34;t)(%H=C2Q~Kd(%oIGi)u6k5uc;SLVEv;b;c z*US~`i~duOtNK^pra}e~k}(fBqkswnrL*p^R7lE})WKQ3yi$D{`t&ljB}z(cMKbJO zFDWGWLWWfBqbU@&@kObZ9R8o%->Rd;Qb-JM>kLgomXMM_Z&uq;oMKiK9#j1rPOMb0 zNJ(M5E`fB0#FpegFCS3<04!gsm;L%EcB+q=hT=(bAJfp<-RC+ie10{fSvY1Pir4rq%}T6JZiIaLbo( zH1UML-=1iaim{rriV6<5^41fYlqD&a#%2@zty0HA-dx)x^72!0R_>*WH&IFEc+MR4 zppsNdN=O|#^we~K%t{mf&ehw_weOI+vW_lMTEzlxp}Ak%969vppeWD+0E#3i&|S@K z>#PSoI|)X@@YXP@rK==8rUbNGPuwLdQCz&CqGcP$CU`X1dd zg<^LsNfy&_^ORJl5}sW^YX1Omx_ZL2SD+=;c?{#-{o9%TF&jYyzbC zQ-q6eXe&smO|8w<=BW?>=Nqj(v(RQJ;YkF8-hJLI>JD2yJz>{tsF3qDRc)>*7?IU6Thk{YV=>Tbu{4K85-sYnDf7Y^4COvj`&($s{d8(9=zKQ}o?ibm@pTyzrY#8do$ z-)e8DtQ7)KQd2c5F4>B8dvk`cc0&?k(nyF(Y7Iue-mvtM#7b18cuyhy-{Kn+WdNkR zl2}}a{0)sR(IKd`30P$oZU=yA&EFjTx-60aS;D}UwJDc$i_A*K5Q(CKi6!wL%T?^r zlu|5Q<;K#JaH7j;UfAfRM1qh2DXDtV$1P59+7e1Il@I|Wy&pgt?ft}ZoT^IjZi*&L z+R9bUN+;W?s#Am}pwhiryYqo6V@<-Ni=hBJ=a9bC92kCguddH;Z|aeX40|bJB>7{rr6+&n5>!uA2Er2FOE8<6$J(iRP|!RQ|ZnoSg>qp zNjdqFJ28f~u|n!ld8pj(V}3w*z#RH?M4+mJm2$m$UM(#osJfpOdwRgTV#}G3^BRf? z7HFLO&gb;AJrOG@0-&rKa{M1CG9`qll)1x0n?LoOZolyV0QfcWFZhW3V)zg6i{U*f z9wG6EjrQG_b>bRPH8lJWz&m;W02T2ckLwdQ$4|8IjV|w0-HGa&dU<9JAJ+b{FX(?w zpY;jVT3IMXjLEB{v{I~8*qBivM=10kK>BI=r_^OgDkzkbj%t8*mVt>+a4|LzEr_IN zAJY%x=i(2+pW&nM%d`9i{2!Nwd>i<4_-){NIzBh48O9yYig%`_p1*lN5bp$+d*V9! z`}MoY%g?W`tdjCXiRVAWcx2DwzxNNRKNs~cs4oz3>_}`uCfNjwB_IIN?!LIG;RlD| z0O93I2nC(e1ye072ZRsiNbxDjtbPxFiI4GZ@u$byy_aLy%Ui>IBVWGl&3#64()`}r zwqojPMp_{q9@|q&aYPwFM?HRs{{SEV03YG_c}n7DtW8)+!jNoD0L{qI(fP;B{;9=r zCVFN4prTdcQKJDNf6P7qb1dxzxz7b za+f=Aj=gB$_(VvRDr!=-s1jTUf!@{B+8k z-Xhin-LL5zQd9L4_LLWm3h@jkq>*A=0q!yeHurdZdE9blx} zqqkOik(z18a~P(4%k5oYOW{740@9g+aF{>Yye|3Pf*F}Rjs>PXqKdH4GiV(8LE0V9 z#;m2{efF1*_MM(%4Q}JQpKsdgMlqWd+dov)Ji~0xYowLJaI*gZ>5(>C)Gm-6Lci6z z=?#C#UL>htkuZQ%%+zj9O$XtiUeDtH0E=hhKl*oP<30V#8HBr?@$K|kkkZo8(+~QH z4oXb6&0ZS?_I^+fE&Mr8mkmUpIpkzG=H+D6)QJ05)G5#dzcDfro zZ9dKJYgb1@xFM$~Og1srH)B|mIOONktIqlamCRbz#w}$G923u|h?mDp!z~Gv09zV> z;GDU)NPFM>fAOBDW%-@wX&(#Lgh}?j*h*Sj`kUbyY3ifS<;H$cs%;MmAfjLrxP!zZ zp-D8L(z$J~NTk(p>JF)43mLV^-}EnNrpNIw@m25T;j!@^?^m&xWNRKL+GuFAm*z%O z){CP#W)Mk5NV1OGyX$crKMN*MpG;v)5T#kDD%2-Kcn~O>S10Y^@VHQFu9BkAK=|cHQoeh|jt09Zh+DL?b;N8B6k^tvOC4wW?^b59akbH1!X(Rzjr!rWH56 zG_}kIR}CR52>U>SD{2NmH1~^dfqo?XbKdF7ek<^{mucbMgnOMi_@UZN)$Vl-U*XR3 zkqAmCfPXW`rdJq#)Wh~Zpl3{)LcZJ4BKTeJl}vPz!?6jFscDu-u`iY(a5+Oy75q@~ zFAwg!ZqG}@dyeu`?ewMF>c_N!tm;jSVHw6ue5|AjH{}Gi>$qv$T;xocsp(1*SfrW( zn{?*!RilTNRD~f*T>!0fXBGqZ1Zn;xc($g7pXc~qw{PEn87(bn$FFnf7FXP8K9~%^iew$wf*U-NC|YZQqP-#Y8Ktz<_MI_ zN|TCW$uy&f2HDWlt2|shGx4Y5Uc!DMJue9DJ1Ij%p0s@0lG~{n=<9xD^;df+&Mlc| zJC7YJHgt)}l9I2uUWSw+wCr&;vVNyw%x1T-->vSgmg2s(KNJ{GKE4F84d2SIqK7Xmo-F9mL!R5 zY$20e&aIx6q#ZM*q>3e?MPSTgALb zMkjBj6H`h$5Y*HSyI~!xmP4OTvnB~>N7`T6Dg}ci5=*fp-RtDkg9M3l07Uhd4yREK zqfw#HhkuL@6PI{tN8%red>2=^($?-Y$#|c6plWv-Y{^Gg{;DK$*v2vesyd1M0#hWZ zTnxG35EQ}abff#2lyURI(vilhTFpa{UH2CLqhKH6&*EKe9W8x-ivA^$+QJ%|o#u~? zz05WA*b&x}&Th@JlyOvFxz==^8;6oqfx)8^i2*7}4WO@|NNM|x>}m#STZLVKtDDt;%uU+rrabc;bg4{ z;y##@GHs}!lG#~)02{{V>8 zH|lp1kLAgfWvi(zH*T$MDgIC~M@LTy!OxbZAESW9fd#y^b6lVZ;&{}k6#YOH>e=dP zoLzfg@z3$Mig=UQYJN0)LTXE})9-&aT79;g4%Hbl($hdAP$N4p&3LYsUjf2Nl8LGM zOQ#V{6rx`2PpBP+M;ph^d|Yx~`TzwPpG%v;kpBQ1ABfu8x@Us^EcZJ*Ju9DkJ)O_- zE~M2b4MdD0laHFQ`9tkwM+fxGC-40|VRH%a+X!t%&m)^eOyd5ek`*I~K?xUf1L#JD z=*--!7QYAo03Bb69l5I=f5shsX~rg(br|+vo7-rcc7A@RbE0g7Ny;0kF*~d;RGswS zri2VU5|9*W;;z5OrY|Rs`mqxNxP&PnUhHgG=TFpG{5$-6ekAyolzU#w@q@tUr`f@W z@migXr!MPN-zh*>WP5ah5m|1CwjCokf%6zALcW|wpLiSWm79^*=Xo!j@i8V;tpros>jM)yKQhE!30 z+2{!1ewa++luw#vkizy@Shy` z3%cy|wH-Zw5r=Q5rLU>nY01)-lHxk>jYK5KD6dY9_CA{_08O1fT*FYB&>YU1HB2b3 zD~(RGY+oK0#Uk0N&?Js11ac zYk^DYZ-|L$Gw^}*d2*D`M2eQxsQP7c(N90bkBURZd++^6@Q>iX67Ds%-9O9jW7%ox zJ-(#$p)TJ{)fDZnQB-NPqZOifo)ToaYT^F2Wq>XLqiS_JGxKQ6PXUEfmBf7*D5*{o zLjp2ymyN68AL1)t!t|YA4EzB6H}19jeMUXUYuR^x6zg_-nQAlqnCYhP%WROWdd;83 zaLZFn{{SL22C52T;k`DzX-ktLLQqlkG$kofrW$~ECb`3Te~N#BJC5sHU&VjJm%_TP zyx6eR@V^G`bv3)5)=%b1p08%cTNNcN=3HTVT}b0rgeqUxg8)C+ut_x1;i&b8C9mm9 zT7mjdILm+#>M8=&4EYioBJ4lJ$KcP1YHMitkN8^nH}hfMM^8&qUkm&s8}(r%bmyz# z_o*)}0D{Y?pTcp#rfk2jp-3rn<5@S@u*lWUw1Uf<^rWQAne^46WlX|Y3FL7Ht!!`2 z%6}C6WB&jP-X+}0@qh4>@MnGA=@QZIyDfi$z8Q5`7RyuequJi3tz47PiN&2U!^--a z3TF?kB?&bOGZlorHR-KkY12NCw5>n;adf+~NM^tK*i^Z$?+g4t<3I34@dk#Dmy3Ud zKZPMZU41PrZ{a=!@P5)inI>P8vrZknbtdhLbt=QpMVNlS!>L4lR$9_SgN$1}b*7Lh zGQNX10X!iJQKEeILR#KF4l4dXciBev+&@&w%Q@)@6JbvLRohesfr7=0z{Z7E1 zaY{c7Kl(ZKoo?^PKLq9BJ)F&bZ4Td0vGK`w-K_QX3HI>Umucb`7{)TI4kS}%B5+i{`O_rIN`M3?u_ylkBJ69pISNP5_;3FJ=(_PJ_?&+$$GkFqj5Ot|{2#<$ z81_10sU2Bq{!!fblVmXsv5mJ@=cLwu$&jfWb zQT9KQF_845CCkY-6vf;u;#C zl1X4o(&W>Qxm;(}W#IeYMHA>qAqLlW10iefD;7Ub;T#?p>mpDjI3*>C$USSAchV?+ zEB^q|`ThrWd}G5qe-He7_`kz6d-!X*y}p-!;odE_T1Kq(HD%xT9uu>+?MTKuB_U>@ zbWizwVz_mz{T8So5(1M#LsJv;wQC6@g_kFY`(OL4wStlkB!{Dt#;hOsoh_VL^ndy< z{{X@av}QlzE8=--NV)B+l#ts=4FKm8b=;h#=ji{XFbGvayacN&a! zCTRR2-)eTcMzA{l&YZh#78)^xvX_{zr$k>I2wDFC+f)=T30TV_4g1ant_ot+Eh*!r z0<7Aixr38gwX6@V{{Yd0_$}J^8X6ss_^Hv=*Vj9}PS3M^3&1sXyPYoGNI%5Gy@VMN z7DKmmTsi4waY|ilT$3d{_Sf z(b@Q8@b_`xy@UQJd@6nC#5#v-;a$J~0D3*IdmUc;Q@ECo@S58G9ph|!SwxJPN?11B zqynsPz|WOFaQb?}cyr=qr~oq|(&TC7v?;{nMA=do#LE*nkmzf2J}-E&Yk%}gc+YjC zrK{mTk6#9NIy$k?boI5o33qAgCfUI4{C(dWBu0-lT&U;>R{Z z`H|L?d`3=_x^Vyz2E87NpQ(K_6NJu6D(*vrw}cis@(mEbr~O9}X%fi*7YcJq8y34U z@@NxV{{W%)@tCzApZcwM6|VayDy8s3;VZAS<;jx-F!pY zkeNX@^ZYKz@3El`w{_8n*FKn%5Jb>Ozl4M2eLFQDOXJ;BOo53&mJTiDpRTZ{y8i&^ ziT?l;aMYfTkBa^kcN-%_^!_CAeK_h%Y-c@^mw=?{krl~p4@Lg~-#(6zlBu&^j4%s1 z{{ZPyml}H0{{Uj6SjSWlQ^mic&%U0O%4%l*LZk7Dom3B@&68I7*RbQ;X|h zG}lO3-GB65{{W1y4%27<0Oaq$d&`97`8}`4J_RjR)10Fy$4|JPmicauHm{}Qs{a7) z-%3#gakxp$ptqPNv1NTfiy(o+6^pPS^~s3KoK(A?{*UkRec{@ZhjI8V;?k5InwovD zi~KX(&MD?gkBbTm8ltm~tgb8R#HR<;P_kUVjjPkn11eV%l&QE$iArceOIG^1=}1f5 ze}b>^QQ^e3JHNosjpL?jLN2s4JS$T~mZaSv{K$B!Fu!T&Lv?gG8DX2LET>c^%e}v!hCE8E&r}!86jlL_VdOiuI+!2(aDaQ3X ze(qpPPBWHUry1#NGUiwQY^qg?$n+yp1Np&1<;zr%scV+CT!a-fSNU!&ln?&^^wItx z^yO0g5d2UnjO_R~#PyKcIXiesVOhH2&qJ9kB#?NSDpLmnYIE}C1y2wrsGqi^JyN4B zVA|Byw6rhoe*=FQyGC;Ee+d5o5_^5Sp*DX5d`G)ZdU4%2&Qb8>jL7X#%@*UJFNd0w zfXqfSP(I=Vza?y7YgD=D`=Mo$;L%^}dJt=E9s!5p-^YEHsUGj(KaD$WO-a-tukeq= z8V>Rs*qi(`xe?yb@L$)ZC-9s}LzIFON+=(euCZXL7^RQ8`2PUbxPuJeIPzZzd_xUW zQeO^yL#1%RKLGKV$P|qi*c7Y!ZTfYaGl$|*l787O$o!wo7E-0EVJVq~DRLZyntYQ% z6Y2OzecQ|azlZpTY{H5De`DR~FmMFjO%rL&S`A;Nb(1%T<3S1%6tG^&EPr~mGz__j z7-s|)b}C39Z(V6tF*Hpmn_0k>q=`x~mIhcR`I@CYhts5{@Z3-?sS9uQ@F}ZGu%^+- zDOfmW1!1C&B+<8cD^Kzh8rn|lLD$o|kY6+6y}AnJaS3;lpvV6J5(D{XyNHFMKq73l z{lKb$az@4L=+JasAa`nMBw8wQ-F%kYcu(7<6)s^kN`Y-2j>efA-{K454=_~ctDeMt zwk(vKWpn{C(l0?GnaXE|-RF|2rL$dLp~3v!m2M7lPM^>}*Xrb#y=zkK4v5U&vMjETP{ z%hyPcSGS$qM9X<{!_(KUO578E>+2L%l%nZVu&v*ni)8>hbA{N35>+5l!Z9CP zf2TyD0j=cRy~MLGc8YV`~PnJ=1s!k`{uXlABcAzm@x}EA9zMv@pvC zFO;Z;Z|_!gbUIY0Q@*)sJgox+3gQ@Z#42uT&re>EtGL_|m7`ZFZGKfj=Oc`kUp+f4 z0##4%^}S#d3TrT{5{RQ^&Emb>sV%#A1rmuFVap=%QUHHi2hsULfk5HVl0A96D>h0N znQ9~zkyBcE+!(KST5Q=PG%i~Lmbq*{%oKY(Us`fhkdZ-L{cV%SC22~Cn8k|LZccn3Rd&Q3Y$umNT@Jijs6iCT(--q``4bC*{E z+hRY7A<1nn8{1eC{{Za3AIJXy(IiuHF7z-f2*RRXJQ^ibBFk!lg9@U!}Il$FbcDxkO58nOWwkDe1*#@$~3RC}H3vsq5RtrOU!5 zD69Yt06e~6{VwKub-7%|mvc?E<}$laPCu_pkO*tGz(2LOf`YdSn7ksx+}^F1I4@7d zwKVVkrt&u+^ua_!hXwj)E%o1FDgc&AJr2*E;z$ku0LV&E0RR>oj_p`39}xEuMiZ2Q zXtjwJfg@!$ayI9xju8v0&=MMkkLOe8Y@+I#$x7vq;3@;Yncm{C!$;zNdFgT)!tI?P?`M^5=026DmSWYmBX%!h})WeQFDzB@j z>FF*?JXC!e)b6*7{m_upCU}5-ANtCl5nJ!RBG-{9n#8waO!F3_TyQ-5Da?q_MKIv(4-?nuK=v`EDx zqphrB=#1oCiypqI^e?K3yf4|Drky1t5Xndas;PWQ7rAX?$9+%fvv^6VnJ9nqsO4v? zHAVS3w0-z>_>b_Ud}A2u=~lG_U67p| zT;5dc+Hul;{J9HJ2s{}`SV$#nd(%r+JS?6eas|F6dHTnY;y#-%ha&gLSGK}v3?mKcK%SFAZLJvv( zPyAzsu{f;Sr{BsEKsM`e0fi?=w^`vOs#5->HMtXNB>Bu#-^&1%LX{jw8LxwUc@1DMA^^c={N9ePD&le?9 zi;9qNk+Ehy?;fw|oL3LWP7`EJ6A%*TTHU~?BTb^)Ejd7Q6hN}X>l$-qP6`SNbWCAK4mIgbv@l0+Im1#0=`5JUMp>>L@Sa-xbQJ`wufQ3N z4qJav%2O|fkcnwHjKw>LsV3(2-(wpW!~2iU(1OY&W3?Yfysz_lxIUQmI>=f|R6!Lw zL!^{p3Sv|$bmbiv{u@3R@NbQO7rqkk4;=7c8~BIA`_B;VH+Uz*rq1`hj+c3%+;=~j zuIj+;I~_jDOS+!6qbQM#0`t*$WX(dAGF-&UC~{P?01g?3sz2*aP(;iql(mEvgd|W^ zL}Cx*Ds*W6i9Z-S&hy4U!cXHyhl%$ZUInA2F2mvocmz9w9mj`w7LKN&r`u|GIvSU) zqot>%p{G5S7gJ1&DLj+tYmvc!mVGszXi`*wpdBhv4Eh6_Uhd(eGwUDnIPdY&1Tu{7<*m>|vwZ_g#Ul;T^QQtxbO7J?C$wCr`fa zbtP`3$g*V`t4Ne_^k1g^RT96+P!O*;tO#6BDEiK(kN>aL@y9Ybs&26tJ{UwQh6(|9kb zaMIPpaEY5E3*uFP_;dM>m+<_58Np1M{{S0^QV3G2Jgd^JX#G9-Bm80hHT*5v>BqJ4 zNcSJa>&AWGapPYQcTv>tO^kIlb$d?BZ~Y=MNl_RBB0Rl#ek1%x=+l=+l$3@7T0;$i zFRkiLBhX3z043vo+62@NBNv6uF>@T7r6Xv3GyXik#21Zf_geCw!y5gEgz9b4mwDP~ zJ-njSNoZ>8>wa@KFd-K*j0|m8q&UCu{{W(J=nuwCNt;?4yI6*9f{zZ#{{SPKI$}_M zo`RuDIC9TQy&9Exx%S`vBmV%59}V{%&aS7zUj%D-*0*n|qu}nphidEgJ*o_~b@g;5 z-Cnk=iN>PKVVijC27mac0X9$n0Bik9aFUWSngU#~0JQ*Plg8AKsv_&)Qi+1a%^L12 zLr+-XFULRet@x+-iSb5{j{YY2&xm(=-M4k8soVHhYdCm+fcR%`q=a<44-4%RM@>Ps zB`0^AQ?Fh0Z}Eu|_*F{a6!^gfL^{+>9}%eZ$%94*)PAN96)JS*mJ(b5JR0^96Nh=Lu1dA_;THBnTS)FqlwYToGMC5k@_wDdEE!=#8kqP%HXEIR5$HtJ zaNIKIOcen5UwRg6KDtLe{vLiF{7LxB@qyTOa@3BVtd8f!d`ns~pKsyaglBr1h+&mG zVGda*v)8Tq@7F$^{vq^}K64p~1v1bmW-hdIVD%=geB%@8pGo6?$$q3Iq@T1%Dmei4 zty+Uy+*&_X{toyT;r{@`uL14+3*r9CJ-=_EQ|@(k$N0YcxnooA`>k=kO?Ka1pn*Vj z`G4x)Tl$arAJiAdar26lx5Afnp*O+?L7Q?#WA8sp`cDb;P6Zr41tluObpXmG+>&;B zdpiiTNs+2eMz*pUF3?*r&=U6jaeZYHl#D3x0$KTT`RNYK3kph-pAE%Dhg_@AlwN)n z@y_GJyUiU)YRZ-@Mxu+7V}Hy51+T6SvHqjOiRfBN943bEeQ!u^MAl^mRFji)_v;;% z@JGj*UDlS4o2=<~F)DkTW<~UUN_{=v}7YGCZQ|irf-M)qlaiw^W7@)8^ z^UAs~&N{c@AH*Fg$4^bvivTOkyL0@xxgqHKe!XO^1Sb+!#r?J}V@5|DWs;eQ!fx+F zZ(39Pjoab>01)=Q=A2VdlAP}MzbzTy{+$hTD}{j}^U=G`Hso<>QNrMsbC(8X5x$<@W<87(Z^Lp$RDmIyFzX&-cZ6h{a>By?OJ2_UdX) zC5Y2)g_$d#HD~@`Rskt0WBTN8U(|3bB`(jXvu;nHln<|~q1lpm#6qPj^yLlCJv00D z-|{8kJ}(k&e5fnG?y*&XfC(*n&^}SAeku6dw$e3pH1%T2k(TQmEk_l|7V&uMvdqb< z1bC)u1qNNV-7`3jI#N`r3`)Stx6HOy2TUk05Ewy!F;0wm`9)=+2mZyfLpxE4wTSH2G>60=5=&BYO+tks9l;t20h0b@ ze_lFvM5LrMxmC-P*rrXbVA!Rp*s(Tx3R+r{NwW@OO^u_-}iwt)-=-sa?Nw32k+>3q}lDx}((+y?Xrz!*To{`3KVx#7jz6 zr3P9KM#pbHk?_^Z<35YVkmgze1te0(_={iPXz5>tJWIiTJoszGJ_Yf;9_L%X)zQ_| z@Luj3q&tJThMc9Rr*hoNQ+CDX*-`1&%D%h6alhlARFU=02}wr^m5;oZrWX~+Fd5`y z>i+;p;y6$8J^_3r)Rl3CJ{1b95TFO0&gJ)xcJZIX{{R>KKk;XDTI z(2k*}AIXNiv^2Cf?UV;%8ga!$%Ds86EmJsYQlz0}L^~24@2{KM8Id3;sYy#Ebfbfp zL)JU5@FT)|4~e_29@|T@(Cnw#M_tp^f{@dcbjMd#2BfcBTVS^)QRaZ7ua^G+n0-%) z;U$n}sbXt5*wv{)T2Oq)v-$_oq)(QzQY91ubtIg(_Vzqk{yV+__-n%aXRz^4fn(!- zCHx<5_ntfPAAcxEvFt~7I~zoc^?h4{b!0DRvH_+N7w8r}C{ zsi)d&xBmcIaY7m)YRzQSVtU8luSNAQq)w5?@iJu~lug7^0DRvp&aTaP!un?z0))AX z2}rt$)IQo#s`QTG`~m*}0^f`O0F8!^iBCtc_#fexP@KG5;xk%3=W(RAz8m10G5#aE zmfCJ^lqG*Mb%Df4961JQE=6rlYP00Q`BkCS{a1uZQW5_EVuAkvTJ*{M!{;5>;J@Mb z{0;vAhX`sPjrv|c_^0t#ZY$Vp_=dNK_+)jDDGhH2@Q&k38afQUJDq9CA2IKl#qgh5 zo`SvtY7;O20HT*V{{SU9Cy;BkA&v`=;pZr$h?Y>9fRG8hWkLKwqiXJA(W(9-zr#;s z9@bv~e})gje+uyZO=lmD_~r)qp)bl#DB#EJ4tFs;O~Jy2>utS zcRF(KJR8GwVdC1FUEgay(_c?R#384wM6&L4+V?jMVp#HLvOI7*(BdK+^Q=eWPC za1*Bextu-)6a0x_?duv_?4!CN3IoNmXC8$CgvV=AJJ!#rM!grbze>E|<$&W{- zBz-fCoc{oLCRicpNKn%fPPrOV65=OtvH)C}gdsYIPcVKpjV;`G7ilSXU%+>I8lA^% zS8?I}%d@&QA1LTMYgQu0%8eZhiQzcD5h)X8D*>|795z^+*E0s;IPMvEl|@V;fi%4z zT(WT*@5FTVBRT2IN>EvCk@B!?z6QVZ@6#M9DG63LEc(CaXj*j4Mu}u9kB}cF?G>$9 zOLoo`aI=`tknO}}Gj^R4Y$!Og>f?f( zgVch`58r!0jS7fJ#HOzP_NeO>?(QKu45KR<2bYZ^WG^rM+hvyY8(-xz>c8|wX_E> z%Pgd$0Lh1&arEhufT7_IePCl0kd-N6AdyPHFPG^BX?G-L7IK&v3!>av{$~FF0B)CD zv*&WpYBlZ4I4aYLAxUGoxgBBVpKwAki&eWB+gIzwUUBw)de2;kB)w|wSM~Gf6qevA zB_Q&n9Y1F%G8*ePPNGIMyQmp)oEBvLy?O%WB!>y{A5T-9Tsa_xVM21ZPF%Xdntjwk zcWtGL&V|U?=v`y!@6c5xL;%F+&%Y>wWX=vv65t&=N*_yHo~Kp_ z2@d@;$VPIM!wN^aIz|!8SCv-on4d40eXFQoXak4}fl(#cGlzdczL6mi7N}y3j4Di| zBw;94$S0M{{8wuNhE+We{AAOl7{S5Y!ynawmWzR!>T#~1d8pM+9;&C(COVb zk95B^1m%v+&f7o8KSe&D?PUaqD!s>lK5qd+ST;AQz1o?Ie{{|cfW<9jj_C!Q$i>x} z{mzyt1SsLdkf3gN{XoxwV2>BidqEDQX=8D4$hl-2aQ^@)9COR{>2Q!+{eTAd9p_D= zR8@x%ORd?c!%cd8Wj2>{D9g=BWf2mcqTiRyW|$EYnzlb$6C8g1aF&t)RV&vo zI5{;9QhWHcc`Zq7+DSmOG*<~4^!ojJxI$9u1Lcp&?8Vl#1Yine=c62&{nkAROA(b- zd+_>mpI(lUXQx<~1OyxRtxzpk7R$eB-N=hNgz^`G$a9Fy7VMUT~Mj zJW8SbKAQP=MpWSz!*IT@+a8BgCP&^y^UxVi@z~-j{?`FA9MLlCNsh-zdZ6VlOfYM%CiPzIgtfSdgGd4B7I(>hAGC zR04WB%5jQ&?X@`jT?sW zGgnsLXnD)Ww@%6cP$kKF(AP)NnjoYsD31$em*xkIaJ)Xdxh--bYfWR0jY|xozimDe ztoz^24%3WyER;dTJl*rh_33q$5-RDw`({_| zNyP7a)0|jhDG4LQ4G7aB{{Y-WwWre?i@Sb-@B4i^u)S(P)LyISw7_F;L7C{a*Tj&J7Kbb#d|?28HnL@pNJ?#2v$YlVdy?nn#iGeCuLJCa@*Z0!)uCTsSCn7Hf zRB1s9Z=RS+NT_c6&M1&r6sDq%?kYR>jCD1(3`F^UX7OjKURR$_POO<_Omh50B_j|^ z;}1|N@@wOc&A;x}Zx(S(e+Xs3q7qQTGG*P|qXqq%Tx%o|_n!CI8F0o#z)GEYT;NTLF#^tIG zUpwUnY00i|jfqwl^Bh&b*1qGKl!TH6N%e~+UNr)yBvs$0a9)&_wlT16$eW6JFjyG& z=_!c;%7ba+UyW@^KZ-+koz5v~L< ztIiV*arNnWm_kd37d2<{^bpcP6BFUatqxkfe4nf}WhkG{gnnJg98&u`s_XC4LSmMn zk>P()Kq(qXLPElb!jSo9`+u+&I`k3j^;pU=-Lxv0n`OT)+8kr~y({$SpamsBq@8(Z z->h0;Mky;$0U*(;PLHJ=pTrvtc+__l41y(H@$ZF~@9)sUloVM^2)A#xeIb<)F#-!3 zIM0@FF1v5d6cVSxMctbYP6G3H>CwOo0I7Zw7*IA|{{R$)CgL+ZDi~Vo2A2+Vr_Ets zcE&N&Js^e&M)|2(c&-A~^u_elj5Sfs-ShSGg=eZtq)JGv$!9{vuGv|b(iBQb8A4)} zlxdV)Q^mac^7P1-m&Di9`Fuiy#6p1xI%t0#Dar$sn6L7HfR`Fjr2hc$lpm)V=!9aS zsXBK@hLSu9T7Qu79N#Wm{716Zi&16faT#r8sgE>RV~iN~`(hIh9V618c|aum1o= z4`bMV9()J>CV#}occa?F#eNa+e+m3N_(!?!b#$Qi{vqOhljB|}=tgMIR&&+xn9Vr? z6z8v!f0`*jQU3rS`Zv+nG<}IER~0c1#HnlhNF!i`%wtw6CXw|o@IDz5exLO&F9WV} z(Ip_Jo(~WNwJ|MdI*^vh<5+jS$HYI3KN0tz3;4dbd*a?V@pp*#y4}QkzUEQwVdCB| zt*b3PN$MMzXcC*x0k;QQa{jL?>3mGCEDxXbCw!#`!nzawGqcp~{6q6Jr0FrKMjEX)cIh1v@ZX7i zFYteFAB8?0&@^;)Aa~k&QI@v6JUT%V5$*0wAw9C0C6glWuMzbbTxTCVaokd|Ej|*| z#0H_B^^KWiN|uQ->XdGprb>v!7IAR4-{j;Sb0 z7RDrvvsAxKb5Ezv;ib$Gt5z;mf!~PlYZ-1%c`saP!!^EZ7_HxkF*6p;TrMG^Zd#wm)tGWzHgsV1Q zT;}myM-?bYllFm>N`Yccg$wHSilI2ll`d(;;UU-p`2@CH#4hi?0{;N-qr^4)Ux&`z z?R+Qmd!0>L>N>sT4f=bu=Mpyni60?Asyr#>eQ6vNq@E>3GbeaJV8^qcq+VYHsftkv z#))R`)g)W-x1Hbr0KJ)i>2vVj<(7wadL8DUYc@T^;_689f>Q*9jJ4+}zOto#K`G)< zIVlENDoG-PT!+P~Vt9@gVx1%v6;{<1a_yF0ajvyIcj1o%?{(+i##&w9hU<4)I$gV? zrKH1GS4`9HbcoMI4JPB}Wweo%2d_ahh2nUbAV_72jHhyQa7Ai+Xii-3w=kKB!;$|0 z=;ZlToJH@k_+#MT81a77#q_)%LVug#`aPzHbGALir5$+bYZ`j`+C)esok7$OnyB^b z8h01R$&ojPn>?HgOwlq`WvEr_OVd&0`$oy|KZd*~yY1)MJ$a{i=8TBW*KCHM~H)US=qE>(i}khX;N4z zCe{t6_tNo?Yv8{Kcvpt&_g&}1y1pgi{{WTWNBE6p?lk)Yc`n*!q@At7i*dD8x|Ry1 z{X%^7Askqd!n$Y+6+P*Fi`Z&R42fb;o%a6#>}G4Rav87P;C|D>{7YL)xBde|!?pCa zy9oCh@$Pi{eLYUrZ*a5KCpL%45v8K>)J#_nmCX~TEhQ=-F(ue&JvqV1m_E@61quME z^*UyB$W`dj-@o`z!@O(7`yS6*!@NAv?dPMd-fQ;Sx^vO(KphrBmd8hiA+U0=>2+h}NZaE9pWGJiIHc=-vCk}|J#N#wlPGC2hL`5T zdiq_)pXEjFHDXFQwuwGkI&xG$1+ziS^1o|GdEJwDrBT66CsD`U1YBa6v0t36~D@iJr? zMnaObC?B})Ng=?fremEBHBKk-Vgjj_y=FbejV^W)8M}c_-n*9d(AVp z?q%F|{id&btEH=}Jqc<}lm-!t2_<0OD{0cdNBXbY<2aRlQ;C}>0t!GX!U$pjzbja2 z72>!#Buo2p#M(2kvtLZABboajhW<3r?tUonj?=+=F7rdewSO(v(Cx#u?57eE)QsgR zU+2XbYC$Tc#T|Q@vp$ft@Ke>qlue!-1s~;bI%W>J##FGWzj+2&WE?oI12)0WA?zZ_ z*!(r6r`l*t_)cCMsp4mCF5|{0s=u7aN(uQryd=gfU`&m3P3NSrnX^Yml{oecj2N&+$ zz0dbK=X_2yeD`@yTao|X4*u7)k`u_I6JXkCh7_*<7)tC9CT3ath;pGoJL(U1lD&gX zpGcjcj=f0t6t#@#zvsu9{GGWU8IyQ?@^!*bH|n-NWkrl+unbC`x~V9RwGe4)`Yx6& z?6v-?5g|O2z~UqKv6t9&XvgGdAcuc1+~0wCjt*@AK8L2{ryV3@KWB4AMg3)Wojf}} zIn+MR&t<3Fj&GABP7pg1MyI*1(1)PC8pgJjKM-|ba0vp)2q~^<#EUI*g_}Kz?I#6u z?N`adF-#{H(keaYXHQW~PmV7x8#$KH-gTuNzYM)?y~-y1{7YK&jcjVR?MrkVMoqgE z_S`6_c#Lldas<`*>tDuc82-b_VraCfjwA<+Bx{sRo9eTQ?{8w?iH&z-oikn!z!6B9 z;TqdDZ$H1KNw+HRhnz|o&2~S(Y@NlwqZftFtU^}r*v%52`#fWHkEG(82~WaumtR;H z`5nq2>}&X)0}i8nZHT*XJoR$yAC>9i`CWhGHRfHp|FV5uR`m^M@m2f3w2R=FjEvGO zM>|6Z+qdAP_yci*W6xcr~0%|U@&AT+C1=gOV>E}xxnXA z-^d^Ul<45-{c>S`=6vGc`%aFEt85Fq36q}5 zS3KZ1+5CqYh<*ZWA%LIU-G)kRxu}u70J$D4Kylp7cy2~_CM`E$xndV&<|d=H$z|n3 z#lL6d$NuMV;aJV2Tt?hC|GDcwaST_a#-E*6aKm1#CZ?CaDD}F*y2+exR>-wt+%qf7 zYkvucN+k{;Ksuj>VYbds^nuE#y_(juuRwheQsRBIIc6DbNB9pKVB zJ$2%r*)bm%EF{@}EYLW0BKmb$H_nnwB&Kut!B5LLpCJZN?6zI+>9Mnm6qK-diq zFDYU5^Jo{NuTrYn*2vgs>s#;Oz%851r^NtZ||>}27RiaD!2owh%_ z6Nr+Q^)qRSzBgHMP&aGE&@@|CSA$3=J7-K(eG&to@FR918f--Tx!dqoU4C~?K50QU zh;a;gp}SM|-fKKF+HXR}aNehy`=F|TyGHIgw8!T9lhaFS#dZ`TW@4{^z0MM0$InDy6!^i9UlNUzy z+%=O2M!`aa67+1VWWL9L8I%aj5t}~Y*MSQWk@idIf~a7+>XMbK?_ng)z79h(^KHoZWB{=?!5=f8gz4%T&mfWp1Yuli3ec zkB|+7sT=Zey<8yeT{L^qZx-1@-|2NeaovcL1AKxfnwmj>K?v&-BxhDN)221IqFMWF ziVCE|((QS_+?cax&?{Te^^OJ-UBdB*sG4FYNldKk7qc`M*~O3=s}G^RcnWrHtZh2h zx9j-C4ZyJ?i@(-|uv`wHLQb8@0qi*V$5P9cqr*|ZK!m;cVeh8VpSd8j@y_H4E}+S! zt1xTikOemPyg~6ZZRP7G#~@2h^6vaXjv_*}*G}xfZNj0e==pW89Q|F;QOh}IPZ!BJ`~AF!bQYLb?9_F2I~Guh z&;C5Q=Fg~!7yA|qhZliZE;9)2%;L=EIQX4P-Neha*a)*iDBihgSEWXs;3f~8TR#E# z*qEi)xKf$pCm$xf4ir!>0Jsiiijg#BJHL*(k|p`=^E7vh@m40RBk1V8snGJ$p`Bm> zilK=_;<44Ckow5`6mdj_>k3<$Ra>q`ugbY+C2L`(tI~6)C(qKQz94OCzz`!{-jtNR z0prAy_o~h-K_ckK5iQo0e+nqjJ}%4hCzi;_cpppB^(JdBrFs9vv6+Q=FA+NU&p3x) zzbe7Te*LLJZ{T31(fZHZO$Jsxy|YFGM__qRln0JHBe^?vJ4Jq5GIb9jpq|N*qHPDt zqk_p$)L|DLwOZ>cUGpgZQ+oI4n!`hHBb`Y12@h-9NzX_vJtg}>U0>5zF0@vx#?8#+ zk2SE|ucjO7lJrnuA#%hGkuJ5nqhFk1hdX^=7XqDgLORlcB3&ND$W1R4IM=Rv2i6tD z`21tL84P}5N?)H!p_2=5{4Dr8l9n5pk(I(efh?`Cz=jkycM13!Ykf@{HxjQ5o0n%G z85>Id4t(+-CO!V3ojQ635%D5kcRyr$+wF?sd(h=4(y!?E!ZEA?f$(*^ z|FACY?Z^H}!5@Z^&92$9l_O;iL1&EAr8-fxS_!W!ogEfp*8!`* z=E!DZ^xZE5`yep@-OpBa)xJ7n3pk8Ly|w)4jh3>jZ{m*QUU(QP)~v~eZFJ{>d2%l1 ztF;O0jzy`s>RhkMh5}V$u+=tUiic_ zVXvq=#P;V(rc>&du69OqwH%jQdvNm8T~1dsLl26Jto@9%A7-SLB~;k3`l*YFtflk6 zzKF^qN26WV4~$GycuMvbC(07mWGomSz~Lb3Z^G7fuaD-P^#OSJM%@hM2#IS@y@R6i z$Bg=CDVnQ1t)HUcG7xldiG{s;c?VY2Z-X4O+fD`Fp2}C?VjbobBCL}S%H^it7z@yS z_a6(q?R-py&lmjxd-8Cc^-9Xranr@7{X(M0lYIr9M5oyH?a3R{7z8|!N?s#egO&3X4cqGwaCbleY1DzM& zgck>6gWZRs*qgQFv1U~q27Yk5oEOXa#oV>sPt^ zT`e6N5=%_n#bv1+4gSMQeTn;J6Z;1S@!^*(>yw^}EHxk$6qS;M{EAPKqxap)b2RBp z@!li|40KuE$r7MxhNM(|UW!47Jy{SkjJrnJ9~1KP!$7Nj<#0}em&q*&6~2tP;h~p9 zqdaQNl;XI;#xV>5Lvq(2K2rw8aB@GTRQUSsKP>Zf`5$jU>*&sVwfV)9i!Jo~a}nf< z{r<}y(21C1(7TSx@^Z#CKevqBr~}r;v^2eU?KWmJnCvY1>Z7k|NrNBQ@|;w(^gail z&QcbqUcflQ$WsxkbsFOQ{cy8yZ@B0@w;#&nlHZ?MA*d9SG6aop6D z32jVk^1PX)Q{vVcGMpTs zLhA^G2H;xX!sMRy^y&NaAIeOk{Z1P@4C(z$5U%&2WiEfQ78V3zIj`lTq~LU}>PZf0 zc8)fsXeMgv0D;A4+*6$R)@r)3}K|@;D1EP)vAGpFp-~8@p zUtb-05MIjlGob~f@}2;5t#6OdvQO7=C0vFqDu4(Qm{8zSLN5va&xk7KtVrfia}^p=zkyn_b0W;Mj)W!h z)XLJE#?+QmX-?(nw!~~rRk{y;?Ks_=Nrl!yy1k> z@^Tr~k*3oE;>bOylLfEEiS^jX8;xyswULWIVN!U+o2CS^Kdk60(l$^a3HN@0K-GcWVQQL4Q)xX{1=Jk;EMawm zQHAP~krbjZ-&@PAYAfF7IuHNk-}~%>RMx79N1uYv1E%IWSUD+lXY)r%eMs(>D+pk> z9(XftLVLHCd$KV;9!OKNm7{|Zh>q0PLwh^l?kqmte}vM-%Ia@tA075UzkY5DknY!; ztH$@PrVsjHyZ;}Sep(5?1>79x(hpWN0ICswW-Er1 zGzIPcA%ErrUAx@Vnq7P0lyKtbGL#RB2d#u}d0bW?RiFytDlN~sD8iu3%QwI7qBY`p z)Wa>l@Aw4TIZcTK-?9YpoeulSZ8Ds<&c?Cuk(llQbssGeC4BbwxIfU{^m z0g@1OJ}5T@e<>G)VyDb*Vio~%> zh^*v4y1fk)I0SRQKu*E1c_4bqY{{hHN_>8|I%!M5@)mio?JZL(wKm&xFN{(>v{Qu9 z)5}r#bQQQ&$^b}Ymy&V>Qt19f>E#fvikEGP`lf6~QM9o_3QYAw?3aSS=0@KFH;ke9 zm+YTaaGRMaQyQl))g}Civnj8FA1LL3wt~x!TGH8ud&#&CXH63(%y(4FdGe`kF==&4 zPd|IRr4Sp>%3gJO{4I=Ja8etXmiDDg%Lgax8?lYa<{(L>t}!~4I)nH_%83f*WM067 zW{(l|mvMHM15Qlc1Z(?t4iNgTJ$qD3=vZ^q*gLsAfr&6t#@%en-v2R?HH z@on-q^j^sM8kfxqnfX*b>D0-=1ixYF${^ggEhXom@H|azaeuYGU~`-Kv$ck2xZ%MTh_DPFPVUF2@(l%dNN9_$FnVc+k3c*c~+JiNW^P3|b72!52p*?(BQQ1p)z|6f5P@6TUsX6k<@@bSw- zMBR(7dUrJ+Ogvik0jf}MjQICOgjyVCXr|-pK*T*aGYi?jtA3Tpe$wYI_6@f%((lu{ zt9aGtvrzh^G(ZOuN#p$7#xNX`z@K2-}WEY;yqa_TY1^ltxehYWnaJz$eY$t z`$$8b}239pF;vauRzKHv_(mQdoU{C-kn_*l; zxiFyZPXk=~0@#`p1J`_zAdm?OiL<4Og5Q$KM5&jT*Q((t{|~i{1+NyFpom)mGJu^J ziWGOLC=wEHOGt@yRmGbALXy`zD*JjkP=`XiGSye9qRgQ0#=n~>cHFhz)U+W zT;Sk)^j$bjhGtqnoJ&TAZS8^L(DF!{0BIvYM)LyQ^Vh&)%gf%DVR%NGVaVTw@c5$R zj3_^$+(k^w$m)vTeU@&5-j7g~_J=Fi*P z#tqgHsoy&E8$zw76w#YD#qKy9Nw0^AaDt=NzBj#Idm$R2Lc|V6Q3(tCM)F2zsvZbL z1UMpt6N0FxPw)MePCN23Cik6YEoWY2qbH(4&b0k*|LiGFH#Y1xo@5{=%or}ZC5)v* zucil(z4dZQey!j73j&Kf^=JRX+H-9v2cQ*y2}6^|Ujavm>2+$%W4qH6sh&r(r&6YO zZBq;RnQjCsP*anUk6P}TABUp(=*TTdkHR$n_+19j+z2v9Z}S_e;?hqYwYD{WGJSF2 z3rT&^U-PT;3)^+|2&Xp_u}=@qy~oP648je*kuOkwW7FciY2=s9NVWwk@EbbiU>#6w zgKddNw;K{2EkCG4A-lUStX%Kk^xOymT)e0Hd}tHdg`+j9I@dSAq|bRqK0OLNTo9@iovWSpxFCAwO? z_L|!v&6`!Rw6}qb$>e2Hl;0lrzRQ;NvwbZ6CY=k1lO9Bfb1| znewB!Fc`eU;3&IRuBwIHWna8u$k83`PNR?V*7&0vA*xY<-CIp+njM*t1XQdA#|CEh zG9?B_m=Yno&g{wJf>=@f*SgA&8~?+SYdq)nWr}}S?ncf_!WaBhgj_05P4Ro?U-(&| z@V#U7R(JfRK=rSTqF&b`FkZp)6;-_N=cUb&)ZfA{&1y%Hwqv(W;dpMw3ItLdY3?O* zIj`Jq&sOd~p%(qo`e+nV?zxZTnvn0=z>-Yn0I1*-Qu{pKc0g+K+3}qm>72iUS=LH> z_RQR3bWNPdCF?g1<|DBLB>Ll{!(f%1ffrbs`mg|b@b6}5hIvE6t%8-P~WU zSOVG`-|)2=n*&S!BJTA8;8Q*mGM}jk`G9aKLFO|cZ^JI7d`Cb2w9m;?+uS}%>D8gt zm)Ku_oyX||l5}|r=W!Z}p?`Z5w3Ze(SuvK~4N|Mf08JFWt(Y4pwUNu0QIiFsv(^vo zAd-GbD3Faihn|C@Mox3XTz3z`tfm#b?y>LgMo7tyHP22M>=|geZLHUjAYsmd;%;F> z40_fzC&tSlTo6_EdF4UMHk~%=@Bg;2t7;ioNp-dnI!XRJ++v42s0O!zPn=h)lsdHGQoU*A_iE0U^*G4+G(C}J`OJ%#51r)(M+ms zbght8B;hwlkU^r5qnp8WG7CT{C<%){T0i4X{ST}2EGi(lWfny`J9t+&%G*T3$A1Jf zYVQF1kf)_W)v|V?_-IZR0@ka~pR-Pqyizr^eTS{mWw(8^SR-A>5MvaxqjjEH)Jk@I zxt60`h~7d%<2|M7MuWKE@Xa8Kb|YQYgChsEi1lCIKRK%0_JJy;hZl*rhL905k)Qd! zF-Z)ZMc5Dj;__Kls1JpA!r93mMau9SR-G(}PDcBB=O?tBgUUT>|0tSiX~+Ti$>i)G z_mv`Vu&V#VT5W!Kc%IL!^{HCHhVm(qZ?1!|2mE`SHC$0|wE^UD+A-rF93lk-oKfP} z^#zWbg7a+d)1-U)T1Lq$p=zBQfoD_;y|-ame?zeDl-Q@H?=L4Pgv#(X-|88Dr{U@z zbY>hIyhtQFmEu42Yp0Kh^K87>Aw!l|W@2)SNJ@)~933M3er;N%V9OKVO1Tv5dqjwT zLff)fr3@EU=cldM&xovVMke~?a|jTl9hGNnE z_Wbx0CZqqbX0ynx0>K_I0^|9o?=8Exffi~NQ%42Kxp38QkB^0DOt0Sh?IF^CD&ume z{7#79C23-n*&bmoEDibS(XIC}NW0t&>XiIVC$uf@^=1n#Y|MFc-Mk*(2-N(g zPJc<&{T-)-jl|Ld3Eq_$VfI@Ns0Xtc$1|bCu13$egDUR~#P(9;{AB9{Ju-;{`QkMM zX8d;9=Bm>vm;jJ5e$M1_v6;83Im;)!+AOsZ|Fk@|z(vI(jQyIXtgB_*3C?!P;XcN5 zlDynPcgAqNaW=>YbDKGB;^@nE@_}ld}ddcgs>mPs*cu1K+dXFe+|QGXQ%Y1 znp|`3fcvd*Pi``WYCcUx z50DhY4P394cam1<)~lSuKFzgI4uZWC>}$v|rye+zdS5#?eNYypgXnbJl=~UBQ!8$F zkYqL%xBt2+b^pbK$8>~54Ni3bN6@5Z`dayU3K&?0y$2*K)3fXBm@lSK57I(Wq!v6Xk^uKj4)^UOgF^-3NVNDGG74xH??RTxYx)f00kM;BX!k_%QWm8B~IM`YwzDC=Z& z=XfyW7)uBsm@rB&4pPysHm+)e&%^WNr}oyqwOv&9=%l|aGrq*-HY$q!<{;|PXp64h zSQFeb$&B)~bz8T;Uaj$QkTgoQvdhV`Q7tQC_=|WcPzIccTkFUo^vPt6Q&~Mes|){j zw}kwQ6Zk9Qc5k4a^Rmv+Cm`NA0OOuGzK)0PXup4XuNY@b(RJ)^MlQOw?C?y)i(}bg zL{~G5sSdu;kT}0Cb(GG(e#TPBPW! z0RxAs?I5Gn`E`V^kNI!!V1j*UW1LjoHK5a!tozngK7t7BDp+-xE>&G1HEOKcf#jsy zy6UDiUBmd6G;5(K#r|uloaZGTAP<2ZOZgm18zq=bJDU{LrVLgi-G<@id&<2G79^!8leASshK4t z@2e2-Iez*_0meDx`G7xWH9amXg+`u}IU^qmLecn<*QVeVyX)-s?1%Ljbncz(Tz1fV z8OF(PZH~iQ3xE1KT=V?3i0*@rzVB&l`p%cVDNZ5}<04NOf_z|@AO{+ZUqNOP=z`r8 z!czK%LlrEUB7>>#0{OT8HFgFZPmZmxcrW>Nh^RI2D|a`xIN*Fz#7E5Cn@w|u0icZm z9*GwupI#QOtV24 zpEVyp=KOKR$V8{2uJrlFq?RB@lI+iBsk$^jcJF9=Seuic7c7dsjf(P_7bH{CJlB?P zr(B{7V`#1DFRy@Qe5>L+|h2+oAM@z2|LuLd)pddD1GE@&C`Wo{E zC0oi>XMf~iuLvyoIBwjcmnMJJzIw^g{vK-6{udThc}WIGF`+Q<-h6>@-V}L`{7W`; zr0e`>{rwr7(@$f9Df$V_Ax%nK2AmUbnS7Tgd)IgOAJzlYrsK@){p6Umx~kWQsyCLb zElQWfjSqgyTe9&lqLGsf7lYvz*h-X?T@5cw>jdo{g>ODkwi%-oL+yI3bf}e z^}6s;om~i1pr0OIaxSq02c<9OscG}J1v{(x;PdqOEIfzgwrlc&4`yi8AzegE>zR+Y z9Ymcp%i#}%`}^5EpgyTvuX}k_BSCKQVKVdYQC_SNUI#CZYD<;Oscl}lcefvn=2B8M z^d|;puqdM^(n1VA+h;Wg&KlG@s#qK}8NAA5P+=CB={d=7hF2t|+txgdV^4BTa+v=& zr~EQZ*WyjFJnWvxjIa zr11oq1)UH#c2umWX*vrru-Gveo&_N=3W=%BqSGV$6Y*@p zT0V_`$2ywuY3CB&>7@|i z^g3tJe4X3KK@TU@YAx^JCe)InO5^wL{RG=V0XJs7)rK88kljJoAFT*iC*&=Vecz}_ z6L)*-zs)BhaO?kX=Bs*h;ME7G?fMTTxmKFXv~^_TqpF1cDPK6?B>bO7S z)zVhc(G4?PK1iN5&{oVPcyehiaTAP(=WCp`_B3jiuO_*#s5q$(_rH49HQ~;e8Cu1o z_BQ;z+1UbrX{H+M=l6Uk2YdJ6TT-o!M4uCtXdJ!7!rq3krJ4qSC-4Q1#E6MXsY z8|JQ2RZYbiYmr25eDAn>-RxsI7U_2G4P#esLkM1o(~wGeuprBe(w$DKk$J?8i87T$ zNhjnB49Eooy;EBPhX!on-=E3c7-PCjz#o)t|K)#D3VBEL==JZjYuvs#1(;n~!~=d> zue0x-%rm8M%`WB&76Tyt@yw~?EKLB#L>b3CpyHgnIXgP{<(J{nk3Gw-1hbLS{ z`rgL}PjlYsx0{+i#Zh~=CwH}9I%Uo*Cw@kr=9bOH{ZHQ@nsw}_GB0Dq7R^hzEiJsjCi*A1pK z*F(dIndYtH=WIffOi`Pk)!5}=Y*!HXSo0%KNaWe4PE_#q(RmCcnoRlFNDQaUu$N2h zH0|H#OM}whsNz6+o*Ws+EAjn(9v+f+EfXj_wkLy%6lSr98ogM92!ol$e=42)NLrAOPPtyQlaNC`C-o1Bg^-ZzM;iVC4v4CLVg>uJIlf44m*j(Qoi||7tVPq_D4HHBmrwZHEjojSVZ@Q)gRdD@LdDUvf+^L{Ka7a1 zYgY-{I)FA0M)-6U)ZR3a%_h8CE!GshNEs^SV5I%0f45hs^8=p7Jd^m>D;=_WN>+g2 zo)8wcSj@t%L3Z%GD_E>*Nj?*|C&CtK9ka}uDW7?g0Dtv7!rE-yzTfL?k9E+H zaY{I=LT{mjM9l-^7eNm8*jIiS);<<60T#WWU+SbsE=6f+qF5~xA8c3X@8W3F$y7#C zp;k!y^#O&p-9}lc%kYv?=4-OFA~Mm_Z*i)1TbzMV=wi(!dsW#Mvj_gAoi)!uJT%>` z$5${V<%KYn03{0uLAQ(U@!MBbReMCr0%>aUlT}EvhEkBL$^DGQXAKX{^XOFU;5Le7 zmCb2wZ5rYUG>xe*(eM9K&>B0M%_)FJD;aX+CdR*^=zhylK}{+8IkD0{r^fGAh8Rx! z@rcYsD{*bQIICfgLn)*__$kS!br(NdIyEPY&iiTWaJL;6&+8b_59N<+uBz&uoOMtD%aRiM@4JF3oj5(3Tuxmj*5$%jex{h4b^s9mi2$e62_7#dO0RbPM*8AQ($W7 z9zHuCGatHJ7%*6%I2A98$)n@4oHwi*j?sKDpEc%=RgYi==N&*8MTwU2Uu zz1w$dZgRRbWScUActm?(@*lNA4B3+Ul<5WoU?s3;%${f%g$dJcyD4CQI3XPA=~0Af z6ou2J22|#(EW*L6+yp!v9>M9Mhh)NYw~ph?B+8QtH^R9h)FHFL zG5ymSxCmT^ulaDGaE$WH5>8hRF^eMaAN5^Nu(!H{`^yLN79uxQ26{j~d4PuF%b&)! zeh9QYG{qY<%+F0n6#N}Cn2Gt~y*dqC(0K5VSyrP~u*Xx|QNS%j&D`qhA>;jHWQ7XD zArSyJ{`mo~oZNuiAZgn;bCGvREO^Uh%LkcI9ur`)SwM{LMtGnyooiRF>ARUW{Wv2+ zD@o`SK)Ks92YLn#V-cJHh6O#n*;>bN@V7PL>G=$G8g3=~)5j$QPEaO_+sPSD^_)R| zLye#2R+al|G`0KK^sjW#ndorzO%Y;KmSx4>7eCayTeK2U4GNSYouLOBItAx4cfN@! z${Vu3X>4>pI_o5x5wA?yh8tS|Q2j3o>biW8qT)kKe?KizDB$z~|g*a|KD@n*2f{>?0Z;e7uPG$V4VZ}&lod@F?wjx^Vw1~_)xJ-V zzckEOjR98NI71KHWrdQ6k5Q1<=R#PcJG}Tbs)QmR7B?4q;s8vdEZ35cwX3}IL-Ep`N?TC7WtToYed4kfq9uSp^Y{^fEXz_UA?*TC{PDyp0#n5BD|M%vF zjI~=X*WA$m|BvsDZ1Tu7>c~>y=^VYNUr})o|6t}1ALn=HJn#x_Q zyJktzwGjs>1_8okU7_HL}|({+qyB49&Zc>4wp9JxN=k%l`*}li^GLl zE7s~>ZKGgee@HQG=@NO*hX6K!G|TTVwjPxe4EH1`Tb~UI6y3e%%7A)jrgh2s_0sID z))J@`&NLP#BGxbk?823et?NQB?E|=Iv%pAFUY`D>Q%KeG+)06`XdHXkP9-h*Jm<1- zzzpaxh!ZUqIi@U$0hh0%gJZA%CLqkqRP@zbPQHGO+o=UFODMc4VMB3p&LB98)pAI{v6GWgnLIL3+aBLq{;+?*4TtK>>Md+tn zH1m9wD!bWVxo6O6bakIJkaLt)MAxdS|J`_<=vY!-X0HsE$c}4qJRCEQ`Lp{a&ZEq_ zO7Fl9JQT4(|JUXN!@{$4ULL)nFPrb2);pS~Cj0LS@GxS4CpjJ^KzhQl?4!1No!7W` z6S(Mtpmx0nexR~yl7L|Jbm?Vt0%Fk379)+~BmDZr^AV<0yKPGJmqmm4+pLCBL(b94 z3e43g0%Ud`RM2NK5(m7G(AT!>D&Nj!w9bIlOy^Xht9tX|jO}l`mkF!jG5yvrpVF!X z@kRf+RJ!Hbr*Tdq;|kk8vwX2({#;UvSL?y>b0Z^jxVUtTN_E`UagDDF5febR@lcSU zUVkhtRevgNHY6%~m%peBg|^S5$Y?!9wpOlz2Pgj9bVYuRGG*=s-Po2d{QUEzQCun3 z#!Cg$&)%E$biq(9f^9Vpfhe5ILXU&4S|Xr!0Lc`~1+TgSMcN|+YozkbDCZY5@{?tc z6q|tpsgM0nUm5RlIiDLxEk~BUh`BXxiq19492^Jtk`tV#oN69;OesN$v&Iy<7a#0! zJLc*w@V<8C_=XM^gm+5fpRa*RR(&}O%&RMxy|YbLI4VK*_5%>@c^iOfT?_FZ{*gR% z(@vZB%AQcT=gzKruoc?zlIek>zf)yM-TlGq>xnBLUZJKdpog- zrn7AT$($hXF5nYhKwrA)qCa_XLhtr&BH^*2Ngq5eVt(D4Yn0Yfk)Nha7(6w~t)9M^ z1@ao**aDAHi8SY=z*bKBeUs;=oxKw2vRT`yi=zIwZJE5h8rzY2a{@7JUul5b=!*O|AI@U~6(jvexbKG{SI7!hem47Z#R_ zyOD2?^=nIOZWdZ*c==SaaohjdzbD!XT>TsM-?75e3JBh+iot2086!H4G@@zK<2jg#-@HSIGQKS< z$yHywSKlxjw7XvFDi6udXIu4tNIZWS2gx{-fJ|)2ESFT&R!KhDsc4m@>&Ca$Rb@$= z(lreJ{K`(O#X~@s=_l3Nu_Q$a*PwN1;(nCmEZQQef*4>TbsT9$37PcRuZ+P2BU*eR zf%$b|YGW;7q6qF-^5iz_)0N#&}`Q3-+de*K6<5igtL`9gsVLSK8=Vnkl1?Yg6#-Ie6SV(=yq z^$ILmR%}1HxGb+FU2mS9QvmREg9q(yMQQb}TzZ?`U6;6!?8<70-rI06fja?~1S>MO zO==f4gDKz(?z6(p)hmKO`upnHhch{RWQpwT=ET;}y;QyDUH2|5bXkjjJ$adzg@26( zHh*8s_w%jJN*iNRGDa&pI;)R>=PM=Fe^{u5#<^LKQYvHK18WNEaxkC8&iBvDfGsqpO2W8m{(@;*3!HdBkQ8OJazMkn{x)hrU6bcTo=B zpl{39x9*l8&9gmpLi@+uJvdiL{Lkn3s^>UXKPv(DhBylkA$#e`n^>}E@Jrqg#^yo+ zu#vU*OEr(1uiSif&qsnc8|EVc$<1d44V3Q6Ej?R26BWsmo$0WV{DuO_NND~kznK;3 z5BtNOdJy!=j5zE+tP$jA1$6N-iDCrzu9DhS$j`h%J`N8K@wD;x)%Vu>=OgboF?)kM zn-3X?h{<-qR#H~lp%teh5`pQHN@M9r0uxknn6kXp7UqlKV9&W|6w)9B~c& zXMV;zgpB+aVL$DasiyK)k3Zc;sjmdcl`kJ1`X0b`HQfDBEOaBTv_L^jtz zO9$#5vr=Nv<~gs9sKbHxO4HL^H)14)>Iy>1xE7*z7cS*)0k)5>7P+E$$UEOQz4q{n znZ8-0*uw4RP=6sm^>TYM_3ygDB(i5<5^HAGAEb1*|q7 zGHHt2B=)TJV@Dg8W}wPpfYrG0l+mXrc*}#J8^MJWT%tJaR^-2zeiq%=bl z8I8clPq8p%kjebr5fQ(G)i3)eFJNPpyy~$!#}D*ind?3b(A;A(iHY2j>{^TTA)!6I z@-yr6&c3zUxre%{sIo9_WK>Kze@s~Fzbs4;j?5s$rxG}+6o7407kjZ@jMj^6!M^A< zv4?Ckzm%XSVsdLVEJ3TRq5(L8Z=(Im1XrZ8%$_s6c1^*gAb67=G{?m!aV=AS#FbZ!aBskIr`(=o)ULQ1(^;rp5R$q;m> zh|isLui4K%p~xrRqk8?xM$l;>{3Zq+MS4Ly2dmX3SUi2lRlm>s|h?Q_0PGa=l0qo(}}(B&K~ zH-mhl?DiF5|D)(E1Db5xFiaS9E1?4sCJoX^N_PzuBn6}eL}HT~BHb}YNW++bgwiz{ zq>)roHX4aZjeNi7`@bJ-JllQU*BQs1hKiB_Lk+=*OzvXN9syazwdVG&d0L-$oH12( zTXGl0GqXN-xM=zPzV;3 z6R7Xg+wo~Kg;iB=a{6c5<4+%mmx5^^@O{(zU^{V9ZbaE(RPR%)q>rlJxjG^JaGe(d z=54Om)~Dh8JFoancTfI7BfdIXj%J|cFbN)65`5H|EdFy)-4CvNB9b06)uM2x>G) zpx%>o?P8{q*~6>5`ja1qd+!Qp*S!-^E3aEKjlWCqU>^bb z4706>O3036oa`%_kvMycgA{MumAz!px>es5NEML{hU=w?1sH>0zSGwh>`%&-Le)jK ztV95aNiJ+~27F=B_atxiMjB#~y5}4C#Z|Rwzjf4n8_1bmd$9KCe@N)>zcBlc=mSo% zvS&24B&;Nxo0guY>v8q--tD{c5}3O&$|}pRXe}X?xubW+{Gt>Yf&b=Ch`3O&&3KRV zpSUGMZDc6|hozUq0a>EcK^|jr^oG`BhTaylcp#d^5eXzF0H3toEzv_rdTBayiDl!lC|LXV@(hlAx)!QZQ2)yjkPCkCZI-s$ zpw{J4DT>q7iJy~CD`;zIo$|2M&OywT9H}jA6KW91-wBIfL)wy3p?Y=nZixu;k;~n zb)@-fP5{WE3x3^J~&O^UW_OK6~@? ztGw)#{8UTRZr{8ZbQ|x!plWM4(59+mbbwOu#5E>)FZ6V`j= z+DN~o7ZWq}UM2}$<|qy(Lfz34^d`CO|Nak;l)p=!z>RO2i^a=#pOIfU7k%EIO{<06 zJ4E+R1}g3=3gB{qy@mMX^uDCrwe7Wr*hGv1$aCJOV{}3;*uzkAI>w{X?PO8yhKm1f zeqF>pDf)1`$}V?yzqlW{l2cFhc_FSAjE4Of@9#mHb%eCuE0LZyRY2H2=-{%o#q1q# zE<&?gmJ%D#*Fs8ka}z(a+1e+&#ioWhKCl04oP8$GLoN2E`QK!^7;+OU5mP`BTxqR?DiwhYY0 zR63zIYO7xwTyJbS^D?c*=yWp_Aq)t?)O0?85!>l*MykO6*lKXUgqP!DpT@#0==9n1 z3yw&@usuIk9c_qXIg`!)7ZtnZf5FaGv2aHJQ!+!fhkaQL;4c-b?@D-Gb#MI`8LxUL zfs}diD2W&>EOeFQQUyA2x%#!exMdX}x9NnTnd<`JN8BryL1-5yTxYFz7kl7QrvBxndT|+zW~*lySwg9 zH8-dLu}$fzHfKhWyLX?x(aKN&clLG?TcqM1(V7DZwipxoPyv!=cGE)lR6b=6|C?t7 zbg_c@DF@w-0_N+9Uz`4oh^|@d?baI^& zsjEMGxLsw$(WcC2_fc|Kle&%%@5O%Qjc?TK^Ht=TH~@0vzn{)bBkay)FOnrRtg}pf zIoX%}KQRVzhz84bk6ys3m><8X2fOO$lyz4BlL$x{cBhwx(u?w0IF{f%?!2IpWZtGx zx+=I)f)TN`(EH3R)T2mnB6y8;5Urj2_a7Pm{X61V$^I85ZuRxZ6|LCSIT9BSM#$ zRmnb87Z~lIX0T~iH$9oH*%+;ItDfw8swi8)Ov>^3dt+d1W2hCO{APTQ3Cb*z7CIX` zh6AUTu!FdTRG? z=Ox1s5easa$Hz!k!>mdvcrotjgM?oH#hxDJ#h^H6 zvMSo3nL^1mh`B1fmH?n!ZAXG;+3ms z*!Je-8&J@*a}n3#N-mRbTygbscDB!=fx=f7{}w@EE_R~?>-PJG^hyb@X`s=Bs8G*qcBfvxcnd z#T(BIkFrW$u^SGRrwJR6Mj5_M`tW!|APBB_?m=!o4+v2!K->AZGtw*%#OxU0`!&y~ zh5ycY+!EgJpu1u=2)S1jMBxUtn9sdx9hHHKP3>I4jj51S=Fdcg)0q~9myeqLjFVhl zKMZ>KEq*l9wBlB!3daBEzc|nQUWI)4>Qa8Z>lJ-9kTAt?po+ycJLYa!^Kw`W0~LW& z{i_6yWpKg7w~@5foPdRQ^)}z?>uvB& zy>H4BiC&$o*G=!e*Hok$-b%zO@|<$=>-(?5W$#hrMj3r0&zUJq+8<^kr2~KUG~Xz= zLVr$$*N5;;{G8lhUV*TMaPexIsA~Qj+}_nyeQBJSw0>J}k-|g0UQfx6-(pR-zu;Iu zW<&U#Oli@UUXoMZVk&YC2o%1@#80EYk^+h5B!vtocXucU^OeW%(+lg`l2c$|xC7-j zABN}(JsZ(?*-P`57NxqZ?PB#wPL?58cQoUwA+4t}i?_X>#BuZIIci_zaH&nZns8aB zVAIdeOo+g5M!CCeY52??1UX>#>m((7`xTn}<9q5qFS>WR>Asu)@RlvPii|uTzWu!v z?DmKVY47z??(bYUAtKn?O(o@oLC5mkl#W;a->x^UoXEg9Ta@eKj(dn;kT)$$hF7uT z@P9;O7THEg!B>_g!)+5e4AyPOYeb@HbvPafDp+2qS7lfcp7?5FY?wkgHs zA!Zv;**J0`75Z}Fiy!IT*W7$Qo58$@bYAX~?^YPLO^q{H2y|Mp<`>vodCb(Gz(F@` zdu0_O8N`KUXRThfO~P>C1(skTXpb_*GhGu)-LC(LWZ9BGqY6>L>cYfwn0KE$RSR+Z z!V*KNneurW;(%qRMZNd$H8 zIH|ZgmSOFXaUGF5`ZVonJ^8I)%xnEK}k-lSxT>0@&!59CQi5W2`k! zhy!*!jNzF3S11g?7NB= z0moMy1R$vRJ^N*0p>hp+EN`a5t_R~A>Qzs}gXs`00F=&$Xcg+h9|cosD^{~Z_q9&Vc6m(vIc z9yCGJ+iR5H;)~8(2m>5M{}HjI*8PAmm7sgO+}%^vDe2Q#@Hy~v%^9B3H-ixHSN=qG z^~@-ydV@>NP1=F{nE&%G9zb)KlX~->Ey3b(l{5=F5MZVU#m7mhJI6c zHDoK1eqlI8uq`?yM^>?tSTJQs`($lsqm|idU zy90T_VN14)iR0wD@mP*dlqg30&^GfX+7S& znaL$|DM1NkwFxbKQ7u4=9R|<7(yJ)&w@q`^mTo_B!LSaG8CEq=sQBUn{Ds~Xpj&Y* z92uEIUEHs$(imZmKg_7RE9C=7vB>Wmf4wYTMAo(2om;8hum?EvFx3qcH5C>!+XWm` zyR;L~Sk2z{26TkWl_d(K??pWk zguR{C7DI1yU?m8)U%-xT*=Xb#SxkL%XQT4HY-*W01nOJ9v15fJBjeW}v;8$(1#Y;JQ}^k~<&gSs{)u7o zMIyw>j8(`e_~elF+QP2}*J%vYFkEDMg<^Kn_k}D&B?9H8@Esq69^e(^s$*;xdJeh+ zX;wPxIaeHy5k(48x4D5CRNmtYSGp!y5Di9gXsozc))~*Qyv7; z#>(wu*+HnoudQD3av=*{a>9#|b(hzM_y5XkD$gEVCfICvC#JCWf^Jc0qV=lrh84oL zv{G8DMmyq3^Ge=-lhY}7pnD* z&c9=@G*|>!rBPy=XiK~q-VAZL@Q@QvB_Phg?runUJdowb%RAGbO!Zx>KHNq>XkCnS zDzMXe6|u`v^Zy^8*brje3J2kC_YLuKdvo>TX&(Lmcegv+8W!_Q`5#zSf%VeN)HF~m zkcZ`URe>OK1;Y(6)cx0rZ>#P=S;cI)4?D{QDv9s)42!8cvExt13-vQ(-~QG*6ml(a zH)`g2{FXF7)9gktgal7ZMWF4w0q;u&@)ABA4i>@8>=w2@nA0OJGumgZwcTbJM5Vzr z0sr7?7j1b0JMz+`!j^iF6;__X2$42d?;HlyyR?v9rjK!CigXWx_Rqe;xokv%CIUj? zvTVTH|A?e}C7o1M`DizW3<%XD_D9zN*Fe(~pOPvfN6!cuNJ(obpxF~r@(~Co={=f8 zKFp5quiOOr9UgRBw&80SgYDRM^t-WesDEN!Io)ia<7;bYOyq%lb~Ij zV>`@ALrH6A@!pp;|Aj>fcZy)TIcdSzMSBrrccqmwOAPUj&%eT;M6<_IhVa9?z00hB zEP`hNtJCkDal@v_rTlCcwRS1{GNC%K?HaYMsG(yoWW5J!FV^ zO;O`rFm|qyO31>4sBK55k~ZC3wnTi2c60)svV*ksiUNbnr}pLw|2Y02X|O)rCBKex1)Tis)8?Y%UlIe6@TmTh5KItHnko+=l9nlRn&ec(RZK`rYW zX7bpTDp2;u?!_=8glanMoX8SaX(5^4yG#Xpi(7<+RCRcOYNk2SPeXrb7-al=XeOZh zVy@`IYnoYdN*?US?z>#w-rR3U-$O(&xcB}C&4>I&?n(SOU0|>(&>DDo&8TbE@N*hr z@4jVdW7#2nL^Y-s*4`NC_x*{sHVc4OXXf12PaqOG^k5Z0d{;J>@sS{P_hPHSe(+x! z@Ix=3S_5{6<6{)60$oOjJo4vZ-nei0&^X_wp$T}JUuDRe>%1I#XS?uon<(=oMQD+A zKd!B%&WrZ&i16um5F<`>5-5O?Gi0Gz>1*Z1ShIe0C|=oqNcB=L$z*qK9B4wLyz+xv zu2Lk&o4`b4Esi+bwB+s=7Te040WGLj9EMnvp7G3(k;z_?PM3u_`F17UAf@KX{bPyx zW61>TXWJ?P7Bz3ScT{}4RhTUy2g^AtwmF-+RuQi=pO)PUBl}j%G0w#SMV8v;9_ zCRXF92b+J@+q#TnCe33SOw}1MPQ$ugDXo2hC%IzwkiyuZkjs-#BZ!b4a1G!trM6rd z=8bDq5-}>YTzY0~Y)oBv41;`9;FIf(yb-vSf-Kn`zUURbjaB!YgE5E6sSHspD2W6pI*uA|;XAj5s@$IBc8 ze^ve?@=)eQ7SOPLOrfrp&r#p4yE2>$H=RqJ6)v|af_TK_1?SHx1hGxB^6{>n{w#<_ zq;oS0g7*cF{b#d#%tLtG4RAsla>bxY?+5P}J}|Oe2NX4Z=u`TUEGr(kf36AdC(DW; zF91XfnvQH`kpU_!P^?+)^z%0x#_F0wcL$OlMh7u>Qq+~pELzKQW`x;_`LC1gUU{J) z>|0#AkL+y(JgHVt@Q`Roee%;}jnKxkHqp>@FdvfPh4Zk|=+Ogp_YT5}rh!>pvN9rhgC0J#2o6GYnG3EBRq%Q(svOMhgH?h^@j z(#^KFIQhiq@!La+pP7W|XrX=xIqhRwYMby>W5OGSjx#^rPdzEtp)|0qoxR`&3K_9~ zA9QGqUlxLO$oo@43%{G!E+fN1{Y|aD(;Q;zPuGw;N#jl8pVzDE2=A2fcOSVL1~mQK zB*rrGshc20Z-<_Mvp-_&{Oi^gB#aZy(u4$Kgnnfn4^KsNa`R=`_|MeEXZ>JIR%ug% z6hGP{cs6UwUb(JL940*o%-RCJ_nz1H<=*_Adyc?)g5Q{Y-2H2dRWg;gy(RNvZynupaa*t?cU(S+n?EgZ+OL>Jxf6W-Bnv^B z4g0NM++6)z=IQe|%iVTVN;2+)Ei=~gFB&_m!*DVp)sJ7ND(2LD9|Q4m>U^0doyaJ7 ztO)G`l_it2X&_4Xeg?y3-t3k6c5XBp`CS!4#44$90?7;8V<3Nv_}i*`Anr$kQmV!m|48 zy+Y3^CI#1bWrl3^RQ7sxB%-{vn4JpSBbHjC)p@r(yTV6zh51R%n;Ur-^P_Bd@Ln;l z{!69Rj>`mSG^|)g7Svyw;a-heP*FvL^g;KJ*TD&zPz3vn-LY$*h(9vkQqGHdzr}p? zm7lEtU7DAaVdsg#>X;58UYgg~KNnu}sPTa<0V84%mq_>}EzKMu$+GX53u_^UEG>~! z(3Oi;L-=004q5tre(m$9?PMb)eL!G`u{7^C!`!JZkrq=$S|-|j>H;V=;iAG}olzV@ zvYKnsxWDo|b%f8ott*r_TrYWiD#}4uzRNiEpkBWYuA$NNp(tjXrt1ecT+*?hy9U!0 zP!(h}8IF=H@Aq&x+gHz1q`Vfu-@XMfj`Lp($U)(;HlpSJ_^Fx1_&{?NS+Qsh?m`Bx zhKCdE6?5M;2`f~)kW{RPmgGCAQtkl@ZYPcV4>iufqy4(4R^4_$QJ(N=00}w(n4Wa; zTzrNQJ%@Wm(qTuZCpa`gsW4dSz53?i&WxbKBal z5Vejnybfs;5|wV;DIwgc@M-qAK}9ObnLtaZtfrpNP0T}J+4XH1e%2RRYA|ZptmkZ2 zbM(S@%m`MfTmKOa3h2b#LQx1=)C*N*B$Qm=-F34FLoo@lRY(QJR6{?usU8mFy*iIi zB>m*YdmW04z9U){e41jum1?eyrgd!vS{x6M-#Ff|p4lLhRWNY+kh$w1tK!Y*f&u)?JTh>Ft_fC7_pPy}3(r|5Y z7+&Pm_8z*c_3;-JB+0VnyQ{l{RvTW3!j=o&aOI=;np4Mpp z`M1Yw+XE1TqF;?tX3&t~gSp5H^n@mrX%$$>`^(+|<}}HyD_HmD- z514c>02k>11&NCg;cbSE_g70g`ZXJ-649>9d#`r^)ZAH!&04P)4dvVOYDS)2TRmLV zy`JPU3JKkO2I~c~;(>yPO5}Y%ES`ut(~+5%GTN?xS$FRb#aDuCKgnB~^jxXFz>5&? z`;nct_XhRH^ykF%pAN_IwhSiL!^TU|J6A+l!kgecNzQ3%a>0iWOgPiFSz@qH4t=P; zx4mEC()cmI@l`_5LVjk-cTFjCToodEhI$9P#KI~&VKD|~l$XivvBZB>X63g(0soXZ4cc$EY zdzJx~m}8MkmCc_6`JJQK;jz5r{;pgYQoK6cZXcalEYng`;s+ntA(`~huM|{1hrTo} zrY}Fm<>fpcu}dA<7_2UNGbGBhX+alaK4Iku86!O&pDMe@)jfNYkMVvHQPC$jAzJOb z|I-xDdcKev58?FOwh6*SYTy%r^Cm5Z&z!2i5~bjJ8OszQXfODC_NoZAxHI7GVd*0M z`Y;ChS%f(Lq!mnrEij?k4RKoQme-rSZ*;8h8lo{iOZ3uByOy}rOXWBjA>yg$vEczYaxMOjlSX_ky} z`RBKv;mTgu0clrZ7LmslzMqCyhq|&0MxCWkU7QQQo(HWed@ZHDmKloV0^ptn7e3Yk zQkEQ89osM0lEiVh84k1~o)k=u+nlR%nG)0cWB#$Slp40IOqHYyGTdQ%GP=K%Ne+R8 zH45u%H}WbOzA%3Pqt{q_)hC$;SIrA|B;vOo*F4a&c{8D^>svCtK~A=+4~T3yzR4H5yE@?PLyHO1`nlOceUs`&qq* zFg-++jHm!tNWyZ!3vDBCudN4XLtYiuw68{oL{tw&qeHRncZV~zyW`g`Wf}3&Ee+Z1 z&yleo#DfBg-&);ZuIb72m8T}n|*^i-oD9feq^YBWCkSurS>rT@`@NG5Hg389tb-EDu zI7$gZt#_CI4N37LPY|TNd{m>J#jr2bi7h z45i)|+c~~c8Rl0RLVmTpP@o`pXB9?5`M*Shz3$L}hb{(CZGp}2O=GB-+X zhzm_M9_~#gaak$A`Xe@B{~wxZj%;(G@Q-mXQGwS|!4Gp)25*J=CpQ8rT#w(SjXm?< z%qwT8fyZzu-aOuTcPA{bCaw+d@?C3?%U|RBuME{O7>?vKsP9~4(B z06lI9ZV^=`uZ%Z0q+}uYbNAA-t^y7y6ln&qLJ!l&VXbMe#9`|dlZ6oiCE z$`%L~t)&LFDEF2K+PhI6XoQRevYKqMlz82<%E`;Mex5wvN!0E8p#6jMo$b*#tk8RQ zt^;Vy{hM6Dx*DKJ>S;I4Gha#n;LE)NLT5@tNYBQ+ROqtk#-A-J7j?;l4Uq`*kH-FI zNgaGoznk3Gy3-EZnU?dt?iF}|?6mHf#3xsKl3f0fDFVu_T{I4 zhZ&ZTk_Fg9c}rgh>avTIqEH>xQsmP2^{T7F53$;o;q9M59@g4pBrBY+1ny@@Nvizx zHG(gchAHdD^2$7Louvt{riXMyGZ)hj9lQBI7Bb~@qznvdc=sz{A2sY}b21%j3K7sr z4XPjpV1Z#|`kk|p1K%GhOogp2PYRl^3Z@@o6BT4di49mMS!@;lBYMgmmb8BL<+A-ERVZ$bbGkv;RE~lQWaK_||OZIkeB!w)eyf3*?{XC4&ocgx=taY=S3N6}-%`rnXADu)-)qW%>(5FX zZqL*tlR8#5VthZ9$j0zf7!PvSu%$t4T9qSF{jcJD!@^6-ax%?A)P6Nn=`+<>9G?u^6aUFxIZPL*Du!=qQ%^zVYpa&G8l3v&=5f5c47y zNZfpf2+K*Mys!N4Uo^WJ>8q(>&CfZPB%g8nJX7Pyf3T#nEB3>N0KD(!!RuwGa@I_{}<{_E(j4ZOAZqVH*DtowK>WnVYH3<_e_uI_q1xtO%M0Y|~KfWh*#8eL@XPC8? zzCE*~=ORtLD)($U%Kv+eeUnZc7B>HJHgBSQ{TpRJxsB>n%JAD&z02rYL}p4aQu^}` zdbjwFO5X`&K{&TnZN3kIp23b=#w;cVgSj zml5JjDlYCL&`HI_DlQV`z+|RZ5RbwEj_uQORH&#Vu;v82LgM>U;(2bT81aW$d0G~foy z;A%fNp_H67v2r1zz+iIXnl}B^9=T0wzh}`@`?L6L?n?Yh|B%Cd6<{rp9~5kj<^yi- zv;T;Y?(J2WNWd0f1Xdm7WAgs4JK7PgG)6Ei|8X%7OO!Px4k0PQ_M9=GWVqQ4Y%LE%QY18{Dv+VeEupUX5erZQJrn zOOwTBr)P5t(F?99x@3U~%lJpN-ns*_F+n&+p%EGGAZd z!(1KBZK+)=-N=_Yx>$8RXMw${u7Gw}WKv%bCP{*;KAdblXP)+y% z_9QRqL)ES-pfR#+xt|?)JsYwJsAuibprD%uHD6!}yANV7;18XKo@=WZV|9p`@B2VT zYc=wz#UmJyTD_($Na&psD@*?8OXK~^^Z?)(At{MQ7lJ?>KN8D#4K>)#78xRQ5>kDa z>XAcRlLU4lxDSI#%nSeGZ%!!aRh@v;o03XtvW##m#&EW<-;K5|(zbY|#yz>wkQL32 zt9EJyeIW(*fsn6tD0DS-FVvdhQzLWI;lgipS;AH~ai;cXN_)xX?Nb8i}Niu^Auf^!Uo!&xOUDPX4HeMu+TM9M9J zeBl6|ABMmA!7uO}3)@_29CVQvi=%FENs9-;T45v+m+O{WmwWU*Ex(;r(^T zCg%hN<^@!ZmvS4txWV1oe9{}m)UY-VPxG5c6OI27RV?&--8=a(^>kS0cZ9pY9Q>4SQ$p>z5Nk97Qhcn9rnxWj1 zF4ORFtq|K;XEeEK$%w9~AcJ`vV}Q-r2UQNnE5pBXpkU#Fns6TW3yXl<#91p z_Kb7zF0_^0i)rX(my*Rk=t1(tPJQZaItQoy-`} zqTqxa4n1CvUh4#2zgcr-`B$E+BS&5!q|RC@cpSRq#vlRuE^WI0QkdP8Jw5kWktZfC zF8a+Eqz;6Pe`9`SL|F!2ewgnEnT)#iLe0o?-l9h{9!IFfUgV+!fsVzC;5p~zogTB^ z%Q4(b+0^O1T&ON^n>`ZCOF8cld@JOh_cgz0P-T5Yj438nnM{isOFWeL9NFQVuBc@( z@q|28`?d~>LD$IYxS+jwe-2xN&}C`wtiXb|@)Ze6qs1*$2G_XThE;1i>~DgpR_|L%W8XhwuzV3@^a zy<|PA+~$vCUBhy4OIsE%F3U|>Wmf608->wR*}hF(TZ)`p4$3#&p{CY@Rmxkpb)D~1 zizNEOkDJE(gH%l?kx}l&3oxih^%u7MZn3=GPj3>$@}aCEC1#z1c-w0ZO$rJ`O7vaMoO;*KZBO?)m?S0FE2|4D$$AVpvZQ@lZb?{|@T+*dF}JRAFVw$y z(@QVpE?lc)Jr?Ycc1oc)O)UD+C$l*3?}h406r8zLK}fT=O}Yu0k+7`}up7(BLzMY+ z4gKqmSIZiFDjzr67^LAsqIwB$47AKBw1jUs-xG0r+4f5JjIEXqF%lgABbtxA&67L! zJ4`6YGO%MHpLIX5($(T1d*mpAxMpKKTI)T7ked7N_LBe3n~QwzA`I!^*zfJR2F`nhWG- zRf@KE(4H%Jg~jQ|^RB%VuUA-Yu)l-*2RY`XAHTg6OLoFW!d6!fI0 zw1nDqOlVn&aI~7uczFGc&K{ zKRIvt9=|QrCg2yL@AJ^`)ohEK2MayM2a=bA*{QPtlnUfGnOK5*tjhX4cdBJqK{ly~ zj~~hHeaiqmnamdNl@9-662tH#vnC43H&pN8V15RV0a8g-iVq5DHdU-kOWy3r25y2p zcaQ2i#O&i&S-Yj_{%!qh4-kG3npx68_dSAp;>D*s4X?ACNB;hdEd$Gpl%#V4ZOwV( zdPToiIapv(@Z#U&{a2bMCM}awz-?mcN_4-NW&z`MRL5D~xrAaFNqMjPG~gJ`c#5iW zS^fEkf(1FF-z80RHgev>`v<93PzVwHt9xcVUKA6;9i)s^XpDk!tnI)wKM~X}M}rwn zIufftV4v;>CSf-hc6Mg36%>S=^cRz8YlphDVVfq8~k%knnVB z=?r^fkV!A3IqqXrtg1tq)2yb3w%oma>N@ly#(z++)V1|i0VS5^G-sZoX2w&%@ z5CMO7fn|RP{(w5kaej9fG#x|^NQRpL@89veuitc;7!>$&w+vbMdysN>M6N zw9@-ROqU5MWmKLv3EiRNH zge*BXN-pXDOelf#(@#$?2?mw<|NN3vj8Eg%%`Ve`z(TdaohA?B7wao2m`V&y>%Y$k zbeD4WTqIZ-?cQG=#_z6TX5Trkf->MZ+3XPTukG;`KvCao^_*&pXP*!5aHjiMP5tu? z#$!&Vm`!{$m^snH^vE=kiRnw^d(>U1aoJsECsG-H*emlZpr`N~qEoWoxo~(^>MoS9 zc{t!O4}(K-?Nu4EccIHrXF%W#KlTHc6`osfdi_ojG1U4**8gZ3Kh2=r9n<2-A$+LV{ymJ>ov! z=nhoz2bvHCbPV9^US$ie_E|ceZ=b4I*ai(mZJ*A2dAgkXCjaDC9X(Q8dUm_ossq(x z#_v0WQ!$_;=Tui;+_1QupNY_<+pPbeAPa{pOMHl~3<6;BLk`PR&gu zewq(4h^%(5#0FTmxVl3b9{iLGrika}RNreX`-4dlQ;QIW(x{-4ty0O5rw_-n&b#8v z-1=i&iz4_kQK!?6ZO?#|L@#a6GRGf9)?ZheE2lO4ZPKkXQ+xG6T&-6(XRYyoic;c$*Xb7s~$@pL^7V#hPo`sM49vqe&*AC9nn0P)B3651YL3)O&C0M{shg<@vA>O z1C%nmW#D|xAGTSk#nYVGTC6VYrJaA4pyo^Kbr6LZYT6PH;30@Ihc2*k>J6BiIK;8f zZ8|iI4{`5NX{|uCZ06_PS{G<&kSgA`OQOxJAM@xZ0RbR@e7?;E3Fyzv90VdmII0)a z_WUY8lDWDb;;dgvMSO&i!98gl} z)|v``M%uR(hQoWu!wH-2^Mtz|Si`6@&}l}ryCK9v*5qnz#jNoPvp@(I8pxe_KmF-} ziG?bnhb+cb#7qvXj>Br42ebMT-1?=l4WVFz~Q<9L0P z6Rg_nPk=%rRCrdlqidjLCf}o0M`6FTP4bNfy)a>qBw|sA|%Xe z{#^L^N}(iMAK{f&mXP8j5|@IY#SIP%^;$pzKUAX2NcxXx_eNmJu(Pi2{OA5?rpXTHaM*nuy(ZTOB!-(rU7*P4Ijo&Pt)ITJZEJ+*Q36#oUaQv)4b@&`r)=2*6|1?Y@qh`jr)2_J_3d}+Qb()*HbdI5 zl-cK9v*`4bm|?vJN|mGp;nRY?T7?c(ksGEGA@L0HJ|oKe_MrLtVyC-Yq=3`gmIij< zvnq;A@^$aSgFM*JRJ?DbzwND~&f~Rp-qy36Sr&P94-bhle=(#Sc$eA~M)C4f#H1}n zT)kjdCT2qI@H>F5>g{HVawIiv@4rkN=AqrJ`~&Je9yJ6_93HhCj!o&>8d$HEEuVqf z>QTI|Yz$-Zqb>FK<%b}2?qBQhZ4i1<-c|2Pev|u$5qD^?SAE-=k!i<+?%CRzkgOOQ zrGM-VQ$z6eGX?K$P-J^%~uVM^X6h@-tx=2 zcLFYb^ON_>e?-kRM9r^Njp7#9sVhDq!ehiQPVN5-8RuMmyYv;xaM9^_-MOlvJjS`ohOf zZqH?6z+(4HxE@ZE3`zvl$_ycCrd5UrNw7Oe1Xlnl>sqCWwPkJQ|x?!%|QJY0CZ8{`rVyktx4i zKT{8wy%Ra2oNsr>NKieWZC^OJKSAK?laN$o|J!3qUthoC!rwdo*ZJ_@ZtmmlQ!_^jiQ!!6C8%hQUFpHxbo{ZoYx=X= zjl}Sd^56l}ai;o@5w%8wX%JriHP`zYoq|-Z8dSIJ%WlOl_#eUQgRBbyNM(@HY6sP6 z?cS9@(|#a)1P|2fy5x?bJrt~6)53FqPR^3Mzs!Ns#}6B@TtM%MM`c$%EvY7EF+Jw@ z@`6?0>tc-|Ctf%1(d~0C$p)GyyJ=V-nBS`KSKcB!F@BxXEp2010JH*UP-L>-=-#>!$pXH-2 zFxG}|S+g$w(%NRT=5SEcI_bkA%%IV`_=+1~=8$d4CMK4aEQ(zfMB5r@;RtJZxD!M) z`CXaAqZ)ztx^krHu0)@^xV2zgyX z-dx>2u6PN)om(PjbhSTcz_SLYFB4-xtne+^W>sZfgpE^yOCo~*)O|+!Bw zCth8vvNttNJN+TWWA}1cpa=d5AYD5A@(8`WJkht3t`dISS~vGJqm~rQ zh`DV;1krMO-FxSY{^zs_mN^^dd6={-?uPY`A~Cw`Hw+=K7`%_T)aSs;2|+QEJY~hz zShapOh33L1l~Ai^>7PwrNO_Tq$70iCAqYkb`iRUwGX{NqEcZ(|h1LGriA_RY4VyCR z{sZYl;|`oFXleciz1a`U+tuv4QZj(f8_>@l$TdSF<3|&#c(+RcCi<_>BCM>oxQ?Yzm!DKI8OLmRhxTHec(Q>e((57sqc!mTQbNXz&2$;N4VOxnA$^ja$-WF_}rTd zW$`_X{80@}eUsluAvZ?)-cj;*x}w}x86uWcb+LL7%s;vk1ktO$P!x-}Pkbw%{~@8& zx=ykw zj;-~zT()5F4@*!5OhegHBWIH9Lg%lwyf$?aD&2e@=6Nh)>Sby#MS3WUWVsJ3Dd{C+ za%vp`b(@l5)NHYaDUeP1dc~n~0eGrbV0v}9Wy96$kd;2U_GdZ)99^1b1`4?Oeh>F; z%_cDFJjH?ZrO;zDZJpe+TZ1Msyo@Bt`8Vn2{9%KG0S@hQF}q*4+_y< zGC=Tw8fu*p;p(ER0@{d*hh-!X+LDIAi_q~m2YYg!<1N!O#X9eQ2By!8bBU>LvNsUc z#;`Bj)P(i2-uEbwRGG4!+a!`bjW2L4(4*+AXJFf?^Wf(QtP3uyz;5;_jO9E3xvq+= z_O6&eQxrip6wYt$`pa53uFD=aaimiV3H=ls;>uDGJzWzBMLKx{1-^8nsozKj%p`xj z<@D3b%&H|prKU4Kl6+|P}?rGIM8Rn|DT=20> z;^eCv`)=Q*=a|Gj{Oo9Hr}yMCp|aT)xtp#suI{Zt+KCA5WX4emN?B&o$6izPl1jlcJd6Z=*&D($fAtLY z_bm^Z5qVmh+$E$Sc{8!0IQ38&a?&PUPTM|;r#O|Fh} z(G-$2CZ}3_9z_nMX6T_6j_(5)%%m?ocy`QRulrjBtWal#toDqNkM3aJ)>M|S^mO}R z`F2Y5WF0siYrS=(u(9^cxDHT%B=Y#?XP)kVz~h6lL`W@T10RbO%tQm#Oc$pil~q`l2o)xsa|fei3J&Ru!B84M35axYdGQJ& zx)7e0ndL0nbK%{!q5aZQUcTvv^Z!Qyc>r(9>&E_IG%z!lC+Sdht{GGO=78;lHJ4es z)F7Tt0&C~W`W8j|<_7lwYVc&TO&b$LGdN(oO@mtx;|?P^m*l3I{w~}StVDeFlXuF# z8U_pLv!-Uzi&aT9o^Tlpw2!tRmhmG@-*U}%c=B|OzSig8i)B+<7!1|=%_@j*wt{8#Eyo!k)p@K`=m>WJsksk(_gb!U@O=P3|zX$Ba$9y>CU zWp|rE5gO!ai0qyTL*}-YghiD`|PRlYXHPPzK~Gv`m|n#}KnyN+6Gj3rDcW zSih?2UfvVo=mae(L7oYI+YYN1i7_fUe4+H$_S*HBEyxR|2<5CtQCBw{yb%%#(i+P+ zzUyhM2c0|Q{S@&;ifjHtaANTfYr22Cl`JaXJH1*?>4CHFrZ9VPpPefRB|IM=qG^%T0F+LMMd zgmBsTN2D_;?dD6@-5=d<7S@*siT#FF{ILPcSI;cTs5e@${M!c)tU2XXT@q2diH%VeZMb3h3zd_INbBg~8jl9d#17H(Ju_*a|9|9t4Qj@!-RiYtWoUJvo<3{mqy9x)E- ziE#nwk`JPErRXPq=VU(OGtVedmHDIcV9&;u8+7416^DZ^G9hsS=@%VFEo zw$+S!D(Aw^`jzUsLd}C79I7(MK3EU>W#iz`IlBswXV8f6s(&BvoI`3%V=UZ;2KP$|P0BzR;{n{-S81 zTu3fh>%NJRe3HY?m$B)vlJy!|;HrN89(eAgzWnt7vQsTD+aU)zO^Vl#Hp{BURoY^N zHoTYjtji5!4q-89jknbZG{bdm5uCRK`56w0j_P&4P!OFn;_^-|P0?i zFZQOjXyy*H+Y{Q*^B{lBQ%u%JD%Rqs)dG0WSsDtmn18UgOlv99M|+uo!w(u9xIbRv z-I)vl-)U{o$K>COb1BZ1^|kEUhU!f==+W@66QZr0bi^5o#23sppBnTFY>XH6L8R=SH~X|a<_8=Nnk@k)gcPOFvhnuiz*lML%sMM;N@TXx8*z`?U&f@y!;yCPE1FFldJ*2)ge zPy8ZW`zTdc_g~_<5;zk?(TyW@Uy*zdG|cJT|Xq96#%Q< zIs#lFuR5PA9anFg%%=#?jK_)Wsb@tSMY$A0@Y%hZYG3Nb4X+Gp}Bdu(fN=59Q!{IWbQNu%%1t=}}`KG}wXo-HK+ivlQ zdbjP_3-4~mK_M33Rh`6^=5Uesc{kSf&yJ@_L;nd(!vr2_k_&!rWwY(5QN^PNS|2&53s~mzvnUf} z4XI+I0@oEkH^vjBo&7rfzP3mi+TUK8;=;3(y~Ki+Jy8D z^x;v>s6pO6!u+b7`W=NH%$X4n!CMb0^L;;3hS(5&R;viFbq65XyU`^^nBMpO-0EYq zFvIvyaa6sPwx!Oe#U^O!t`b@V}dfYaYF6|;EE{=(x88h2F-QgPzQ|uV$M@h&74956qElm zcIPnWXP#hMoD(d2(Z2kd`)A*tU9O$WE44wp<$y znpM?s3v^0nYbGY1evz(~*)_PEHBBtD*`gbf>GPFJ=lyxSuuqV6t7UgQ;=>2aaW^uX zTgK6MR-P7yHfAPreto@zKJ-9(xHf1BGiRcbqx>Ua9|E+Jr+Bs6`O1{VVS*U8N?x0~ z9*KWqBK@Xa&-+yXbyQ&_h@g1Fnc$%_fOVp=E6}2 z$~y5&A6rch@YTM;;@F3y5`1DHA)7UP6E77QgvhmqGD`i=&-G>TauRqibl=c$*i^ld zydV*F(GuqTwH2skVx&Zq2IbHE(^c26-N#H)kC57|m#3%b*}zb{*Oo*RGX_T{H~|Vh zwA6qCj1Gp{iz`}l&2^(39b3yRCqoU zEMf0$D>yk6@+U-sa69&!Q^Z)|?I~TjF*{i*KgZNZ0o)p-bwuYe&bn&S{a3XT%dXa* z27A_Cqc6; zBBNfhXUAwk+NPgj!EtcVJf}!{npaCX&rZnx zi$gX!AI*K2pr&W=XnnN!Sw~0HR3zhYrn5qgZu?a$C^TdfUfU~qx!ZmDQ*}Z)v@VWk zSCtXmZX3rrKEM-jdwVh;mIVK{-CGic_T0=CNimzex+GP2&x>Bi8p&ep!?18ww+!4k z25Cnq3h)u>zkv%x{kns%G|-6f;HlJr(@n0uBImUU2#I?mk?RDYv#FJr)Mx1K) zP@Q39J~qIuYm&CwdZv8HtHXIJ4bK>^Ro%|~o@oz5ePtq!q2=*l{SP!J_dD#BUoY;Z z{SLT|59Sk?zFQUBgoHrLJ8T#|pRqiY8W_EPv~-10oL-l29!~-3xI9*I!Noi~dA)f~zGmOA zzV}d%ZA6El*dL8;R@&y&BjyM}6T|gomGv*8XC9cj+;Xbw`3awRM2>nGonPnxn&m$b zMKBTKeV;RKSVFg?x^7VKfu6a}nUHXa;&hKc6a_I{U$>6Ty)+) z90lEn&9tLQ<}H}!p^|pcgNmU%a;E?~`weMx*(osgDeLJyLbeZh)?Hhqc~gHR^YwZd zOTUHTvyWxvfK$@A8eMu#oR_a-W_pVOC)-#S@CUgp5os`!e%`EI5})vFeF zDyv$V@|G6ee>BCf;q*zeZL502uW=@_ZG=DiPB0Dq*E^h>;bn_=J2EZ(&$7`Lgu|Kx zaco15zHbipxoNJO<=0TimH|BXphLc)lf58jwDi>lJQJMDZVg0Kh*EKZ?2t)!x7>z5ex<}&PkXkf$ z=Z)RuS6JO0)A>a%<(k9I9JBk}4<*`Woq`GIsAhN75@7Qvrr#@42yNJ7_3COLx zmW}qA_Z`aa(;5SPl3%0TyX7;u_}FxrnO=R}4`Wpsc&J3&;g5vpF+j5PBU^qfoPIom zdQ1<|f}T_n&b!J!s}vifQJs;^l1Tz`1X*7fTob9b>-#K3c zV;hmI^PD)`N1TiT`9AG=vA!nZW%jTiTa$Z1u{Z0lT0)ega57aO81b!6hGu@r1(&^B z{W4sabti+8h@+F_yj>c=UiH&;UQb)gB1>9K3yJIkL)7qM8M?#bu}(`6_jg8@t6^Z0 zggU89#9u;8hT8K#aPPKit{dhylVjy;9iiu{ z$6?@>mV4xDBJSr0$2V$F(kO7e+V`=RC>=gZ*DnE5$6rI#>#Yl#E#v9gzlDp=F)V)_ zCi{XcN5Ap<+7sTw#eKJ1GOop}(^8QAar%TfE)MCxJ+;Rrj{KLBDFZ{YnSkKt@2%!_ z+HD<62k4(7qx8d_LrS9L-hQIiko0h+;vf>Em`N|T{;vTdpGA{bqzrl?$qxKfut@s)S@ZY>@5F9y61)6sdJ9V z6!iF@>6^yV0dMFo2zf|Q+GoL8j@YrKWqrh(N73`IRNw0J)gsB>DOgi8qXqfB*Bsh@=6z?Q+xy;&AAbw&63!$m`&!zB2W`>wYW5EF?+CJgEo73u{ZU!E>tj*M6cg$R0k+1UK0W-LL@Lt7cNr`t7t?h~M;9bUYM0xM z(jrXnL|~nB-!4#0&32AcT+7+%;W)1A$6o#n{j@(m81(tvr7)T5y&mnsiEo_;0$Z`4 z!1X&S;&&Gyhz_`zFVQYPmdM?>MuTG`dhR>Q^(gsEk5C3WsE{CvMJ4wRBZlA~=t`?Q zXMiq`)v?9*-izGjz`>%W;K|3`IF?K0a}8G&C|n*3b?+JPjJTT23R-?F+B)9Cc#^XG zsKfM{-;yH#ez6|oqrem`IVm~bNgGt&+38)W?$tZjsB0AOK8+Cm#Q~t{39{@OIzysi zT7ov?HD5iWByi3WKh_M==init3Z!ifIDS{OAD%4}d`qd!0DUb+bo8P)+9PzKGG5zs zZ(6GybwzqKy7o;UX&bMzN$f&QT$i4mK4pmx&*v#$RnPgCe-Mx6iB<|N58?hDGMd)WDLox#=Ng zZDeimvpdVukPLtQpa^EQuD_>ohlrN>m6?XzD45bdyl3SHfw`~zJ%jsqJ56C4y#+mLGhE+>CWgV``_MiM*65x#kFN3cvZbXa1rx6m zg_AjA+f)VJdbp7-Hny76^T7t)V$@~m#GymMh}MXb@2E|(Fc0__-*MIjzN*2Rj=_b z?=tKQoBGUqZ1!H$ul-{u^QdLNRq(+3w=cz5^D=*ii#3j=ad7a*sy;nNXe8SaeUG{h zpt$+=+{sj_*3CYI(raC?g-=4(0A+h_<$oLDNRCmI&X>I~j}fGX~3`;hvY=g$@J2+#fD z;%s$jDl?ChK1$Yy9|Y|4b26DVBKvWqt?ORa3_RG3!SI51rVc-l=rDu15j5{DdGu<0 z_+AZOXam#DdrczWc7|AGmty97ZMRAd5E&bRYUm3C_Q3QdQ+T@CJl`#>s)Kxp0M-a* z@)XH6UIdwIR>-XM))9XqIM@8R|Dqc}G-Hr#MaF?`U|EyvHf(({S*z+Q>gq}|VgmG? zx<{mx9xaB;r%`-z)_Sa=fu!0Aq^9922;8wL0V*q=;j3r}c%TGoQ2o{_iQFw>?e0hz*+HKQ=PAe@O`VCaNII-a zHrV(43;WEMs$HMh|J*;-No!oc!uB1Gfmcm67-&G5TZypB4+D~iUauaPwH^zIDx@YH zyHwP>GKOYa9qNJ4^>lDu*^j6hN3gY{)T(XOO`OeN71YX`lyRJ`u_ScfyZy}FO*m9l z;i%2!c`E+QZxoNb!a>LPm)A0+=z|c;VV+AhcznElm$lZOnj~Ewn&Vv1JwzxF$C+7z zsp27j-zMQZBU4wm%2ez}oxSaJ71TX;D_vb(%(Q^PunTVu{_RCXAkUJh`uY``vf=e7 z;h-c<@c?_)Spub6wHt!bwS^<7y8ITAa`YyAEN=+4U0p;zhwszD<`me#^fkMRvkThm zky)9nc`PWhgM0IPn}Kp>OOu_PSPTmjU%tT4g@Izj4+mML<8rEg7t=gf@i6}c5VCq$ z$m3f`nqwKKmv(&x|A_RngcVoC*lxPodahsAB%YHe__IB?yZ!74P#P1-=jq^uh~tq9 zq%f$@g4#K`+<)=-+qg>h{p6(ZEan^P2P-g!8wm;~(q*o)Vpt5#i}dpFGq9Lxd*4nE znUg+=x(YIq-{laSaoR@nWcF4&4l&=I4E+OTt3FDJV%?xlJQl($5|!VodY~0Hl)YLkfOM%=TOve2-Y?H}YO1=tru@ds*YK zxMyGQI*LG6t~xjD40XLiES08TMxS9RV*sf{67IMwOZB9>vyl}7t1sR})O)Nusb8^b zY#4%hmb8WvKc&!``aDzvkieHbv9RJ0&gfh=dQY2Tu7LuIi^2k3#3K-V6NB|VUMy6o z<`{5$>C5@KJFTKOVYEzoJV_a!OLmNVc?ZRznkjiON)VmX3Z-Z4pVU`ZN9cE`4kUUG z8=+`L_v&6jJ#6y)8(d1d`Sz!j={!bQ{penQ{CMmY zk#Ly8$zm3_*jsi%z8KJ*f1KA`T!KbZ6sJx|(%6mNYUq233%%K6hH7uNN) zYqt_DYfghIiFCO_DvbEK`{ZHc=%ran!$8n$hl(m zz=CaBeYC}=Bz5_zM^j~5Pp<>&>m->!pU831Tu4|-d%g+3@Po4ktjY7Amf~HhQKX^USo3AK2KHq$tM+E4*JWHE>0u`h*s#mD z(HW;LOP!Hs-w=H&Z21SWBw<>Yd2Z&BVHLft>uv6P==LLATC%4mJ65w%`q=BTMB5r@ z4W#(MdVKWwiL>cmZCV|x$n`Kf7@Fd^QHO9(hYP-BUwklYJL9VFte%Zk^~O&Q$QWf| zCU-?;W#g22TKe^rfZn9}AJBfjD@FINqJ`e?%(qag?GLIQ)%tp!5E6w^VM%cZWyFSy zi`b-yQc$R|_|p9RYaKh9(7Z+lji`QwhsmYWGRgJ~omZx`3j!ijr)=a}+m<5pc%B+pJ_A8oMcbDMa z&(<;ee~Og{(%;X^JSbK-Bc=zhyJ@wx)w|9s`?{Ain_F&d#d9Rm*VYaXhtpey-*=lF zjhIfCd2sAN%T-jc-dd*e@Te~JSOEz2O?ev@h&{U#2UCaaP?n_tWsg;4s6>iA&;`Dj znOtct_VHY(m`!DA&Nf^C2`o1F;Ei%^oc=|Kj!>MrpKj*ja%McVA&yw*gw{pXiEwTc z?zM!dA84_zuKndl`+&*{V865qFQ;08bIaX(>5<&3<~ioM3gwzIcPV*LhK%7;1vsG# zWZaM|6SXxtlGDC|O)qbm78j>En4j}BD$S1jqyVS={z9qToE5Z=NRA8w`YLf~CsWHQwg=pvUFf?YCba72%vq?*gw4cEbPw%7(u z%hH|71(fi5`whaG6c3(F0;q6UtgI+lLig-CZgPdwcUhE&>!?Mm^T1CeXfs;T7K> z0{ZV=8b}rbf5tfO zMT7c8x5ocTdE2a@t}m#3!?C9>I*yuJYm?&hy2CjC3hs=v@2!bzpGoH z#V|URVp8s~m`~Ly8T8JD+&1cpKn~$YS9@&XuwK*C)P%aWa_7u^W@H#=cV1_%avN{m2}v zd6})L|4Z}60x$0SuW&RfB$rwU)lCv0^Y8IC7y5 zo1CYj955ctuM%+-3R_f~0Y+R0i>K@+?70ehy7&y~X!`=Io%zr5OM&Yl(x2s{)cL(tjIS&#Kf0t(xeafj-1~q5r65EdD2^`a5 zh3gFk(Goo+ zFGE7wTsGg$SDE^FH)rRjJfxLy85`J5FPHnLz>fs~gp9>u>v#6PYhh#1y>T3kH!VSu z1Eku+gxs04uSqG}Td}}pX)9nof7xsO_)cJcCX$ics8fQE%tu%7a$< zD^xu*vWyv&-XVg25T>%Z-9AO({Wo;mW*+au;^75Z*xk+VO(4^j69SM!Rzog=DyvtV z@6K!TU3bCm(7re*tDmSB!HY#uZ)|ApsOA@@pF7y)YPP7t5i{5`=r=WJUcLFe2|K6_ zS9WnFIr*CJ3;kxJEQdsX=ahg|b(@Bz zgO*0~om;l+T3w?uinP~0heqD71`+0sLtLW^3hZ2FOe8O4{c57+Xx%o?&f;j@9J3aOLk~TD<-n_$$^ylm>vmG_s=@8T-CmtZbqR077LY*9a9(& z3;nlfop%hRkQUMBwf*qrMOJ4nQdo$2dzC-Ax|SW_NG{}=u?LVHi@$EbuU8v?(8lNS zVh6!&sO*v;c<&sojjV!=fZ&n>9}qN0%_Oaqbts$I!KXOK8}#!4LdfpRJ!W{zS`dkx zhS|j6CgriJaFaOmkicKsI0JyZoO(pe0^>?6!NgbdT-~sy_7eLZhoj04)s(kbmUlXz zbv=FI5c0OzX$f*+d$B9@p&9Ky50f2}oRB~D*>KTz} zMr>6$)n3I%RIpKOyK(TcgcTilP%Z<{7iej(+`$;4F0?LPx$T5)`F97^61U7kagCgu z<@rCapEzyp9j4kwB$#^Qxy`pbrid%Q^pchBP@vef+A9#$F~)+^Ic&0W8r4jXZ#{Co z6I-N$x=+2AsIP^j>>CQ*sI_)HUpUPr2qQ?FPj9TGj&gDm?DR<_$|4z@;tkm9qw}sC zylhEZGnOt$b9ro_#c#u#8-)IW%+Q)7x}`4*hYO~tCu(bP&3D^pfiztdV<~QGW^~=` zJe_Fmx|YoWyLifeZyxtZ2vJ}fv@BAcl`yD%+7eAd&fitQFpfi2?L_A$Bzd<;`ol7B z%HyGdinD$JJ*CxV>|uxP5IyWY7^?7|j)$PM-{z6c};l`R@ zXUOo|*;%0zkMgot45f;eC(56Hi^aw2Z!#FJ%F%zNB~q!*S{Ag%f>X)s@(ZL3af83< zjXh21;7?*~(gwo&GJ%BS+~&-PuAO3OAQo=#ReO(BEwk-YbhLVS zIuFg)qy^6tDc4L<9tzMjp(7=5P_H*p*W+;>D=M<5GnK1O7RoN>aG8@MvUYMH4>X)x zcaJSWcgn4z>Q}qPL`1ndOdp{wB?7!BdB|Qb`P?d|aaimcHEQqQtx5bPNh0^s(a*@? zaK`B%@jREh5=lzgwTP!Bb9VH1ivS$S#cRHOU!HifJa9E>b}ib@?e0R7lg5QN9KH*a ztGWtW2UFX)_i6qnzH3j*c&*{CX7ot`jXI?V0vBvwfkDJRd{W_tyzy%?l(-+x>hB}J zmQ?ZeD(Lfh3bWlL_HI_zYd8-&{E`{B9_pg}oma?%R#HgR2rScy2 z7(klK?_>|g6#yR$19qkybXGm}WWyuUeAy`IGDUBIicd8}Ym z7_ig$N!higrCN(Q0*ue?UGkDYq?MLT7CUjj|yBo^Cezyvq zJ!`&be@Y$~D9G}_a&jCrXZq#HX0Q*4JNPcx_@A5*|wQ{#n>9>ZMc4Qq8x@itlfJihx)tX-b0U0wF z>-UOIs`KY|7yg<2(@NRbz0?ARZ0^Tu`>hO=3^%0JzE+OR-~~fzRWKOm)i7mNy%-F! zg@`zPG8~iy>}$(e05=$zyl(UBe^R?XNZ)yFOoddm7IbjW%CbNj8L`6~Y-DOK3*~nF zRsU9w>*fnPaIB=EgiAZoz_sYX?Vq5Z!%K6!kRh2Odsw@OmP?Cp|GZ#;8+0;qeY0B% zqa`@+igN^NO!t2(=$r*@2-~__kK?k&90;*l#HX2wmf4!did`eL>G^iZ~}w_oVFX^G)9C!J?4*OKR>3d$xOK3$sP{?VTSvd@Xb z6jx9{j>mk2f_wN|8t6j|;`As_LL*KdvX@%&7EXZEKp$7D%y%2p9*`%)%<>_>U(H#W zrEIRlJZp*e)*=Byom}s=L;L2?fqK+y3*qMhWSHyfDk8gN(asLaVe1YjPCsO2LMCmI zB?xgF(`4)co{fKaw(9Tw4{zlgBTUtWP+!HXr>Tw;s>th?|9qqKVR8(;M#+9HPjfdc zAr!5;4p9kIs7tXT{He37$}yUk=KxDc>Dtj~UqZ!;Yj#cO$G8JW!b4NqdH)hrn8UD; z3^Of(FmpQOO_8%XYofgToQJ>u=ogA#f{nF~#J94sIS?Aa?|d-SNA8#NLb<&P=`0|| z-w_IyY&;Ws%s11zf>20M2qstb!qyd(1Qr*}Rs(|=2%W$E{QYWpI;;N@NzktFHFg}s zr$e?sB7wuq>be4xNBtZ~a|$4Zo+jSI-*eMX%J9locn=$pgg9gO>#2-%cDU`Npq@h@NQ8qP~$ zV!+r8k>2brNG^0MU2$^Kws?1TvvFWWY+(T1U*6xBEO&eRkb=uBWdlpdgsEv?4PXtO zffcEm_{NhL64asPs`|}ET;HZ!P5WA-sqcn~fC{Z&w;@|r)ZZ5`n0MwDXOc^C(ek{v z#YTOT>-P@T_$vVy-ozED*TUrv#C`HBNlAr@0_Cr?yRNGu;I6s@O&c9ZA)Wz0ZDxy9 zpj}RnoDVMrW6Kbi$^ajl((*0;-U#HtknC!5 zVk&_cY|FK>c(->+J8RPYos6=2OdI@m`nzf6Ozz{uS3jUwh&sz}OI=}mD@KY{dAKT?Nb9ZMZ>ST^9b*3VUnOxzCqjnTq0da9p+-x15HR{$_Af^PF zDznEQTabj^y(`(Av-V$GO7o{-a`#&1jaGiu0vboZ#rE;OqZYof<$>)! zRwbs077_7Yl%V)GGBYfbpr$$miOyMmMUhbfZvEp0|GZlPB0cJ}Qy{$NAN*LiLlH__ zz2zSql!ABO>Zm?YT8cJ%&Rj7f8HZKLt@>ZZ!?NMr!Lz(+nWaWD6)a6HTchZJvMJ_u z#hQHDQnu3o7|W;;-}=kubeR~UX?Kedut`TeYSSXL2ZAMsf;J2XB+p#5b`dVD%~^4G zp^O_2$1amM^kr4*#Pg|6YLOBa;oDy%lPqvXwAtkOnLsaGSSSMh*NqKpuGb%k*! zg~-!}#+Z8A33S2`4_i+O>8A*DUV88B+<^XflGBf#Zt8w2P5xmCPXfWJzvmDU16|2? zK++c|Z?k{nDYUn7sHT_Yys0J-2jg~dm+S1L6HGW5vSm<6kQCj0?gBC=THO)B-@g~&!-~|&ST~mt-XF=N2 zXO-Lgt-S@kb$LRitG=t!HFvJdc|rys{$pl00c2+Xk81dMhOwhf4CiK)CpZh^R038nw$!<^>qoW|XSu~?A9OI- z6S_05mzmm*m-}U?faqO#c?N6@{Oy1kN0bHaQ;3z~rLCHdJT-*ha&fPZUyu0K90!*i zVHg0fi|(^t^Xo}2$Qpd1$7r(#+8^q=o39yv-S&N@Zgafv8&dOvYKuCv{$wW&$a7`V zQl4jF`B2W54dYd06KC2tuDTy$jgoaIA7j_W!y>mCRPMTtH%vef!ZxP=fz;s1Cx34q zJB|)-S0yMq6L(?4$!&i3dI@`TsxM|=po5+x!b|nIH%uYW>ey7&p-+218t_2ZUKz!& zFR#=t4Uq!BbU9|MRS!<%BEl5vD$j0alRW{;l5ixobEay(slI#tA~EncLBAP z(w+8~Ibc~Hxi?;M&M~415Ald(9^-dK$z+{&{-3H)Ba@uVO;~^qh`BgsqbJ8Iv=hr` z2`SR8+x+!V(z83?`uJdV-ZvM)^5*xxqG1P$)ozij~O%Zpa z1rvA8G_i(AI6aj>DpKa2oE*E|RAipAZa4jB$G2kGZ}9&*k@C8H`vGp5LpgoaI_bUq z$urS==HpXHa?!kb&^i+X@7$;ds8+}nO&3B+;KijFen935+G*#!9oqV<`j;s#?X7+}JG&03N}@J8 z*>za{n7$U1^T;NhkBP-s-}0>Blzp$+%Wo&a76Y$-7{8Fh0J7x5s8NkYs4yckk!09|pY?Lv1L=|tGx00e%l6>%cTKx1lUDP2lxI220a-YNXt`8*x8)7kqP*McCk{{IhrG^(edu0A2`CdpCB zV$k8(@L6-LYCs%H>CS6jpnPxI!48c(Cic8@u+r;cbxv#3m#%x1>1gi`R zHs<|tMr2Utf`bM_sm`sQ?45u4QXfS4KG0^sDtwFm+fn}O+QHtQ28Mq$|nYyKH$8jyPsJ=v9D{au^8l; z80fZ8_<`l%YgX2EK>{$VlOOxegX)$C%n!7i&T&J4=1tdy=tBEiPWeh$*(uk^cyA{x zt#4l)%{EQ#EnWlGD>-hxqdb8)}86W&E?-oW;D~vLz2A2 zr$7+NLSfjavdq8IgXTbEX*RjgnkBH4&(EPSo87eo1*f<2=pV?47Ob|PtsIlBQwBOJ zALBwfQ$!%XfivZ{gu|Wl^c_%-Fht-l9p(Xm2)RBndU)( zQWpTCj|gx!bz6a=Rn5thRL(Jb83g)6fi6SR4B*x5Ox zGG_0ka&(kB-(|XlI;!?;coK{;TUKFD$j5BUgOY4I#?&mzc+~B;NT5cb(FOy0YmfNs z_mz!$LfOM&2DfQZ;8?ezyzA4WK{T5Zs}#~ev4690Q0OL4r4O05ZlaHHJ7a}n&+;6t z%0G~B`Y7BX6NWno(@+7HDzwi`xLOTuv@g;_m*B)bE`1`U;EquOf5W6B|E)M*3p_`l zv28f0_wH}LgKS3Sw^03TC2-TnHYl1wM{jSE7>@;BFY{Y+cG9^v6p8nZ2jK(y<1!2j z&TX|X)=hwb&-SjZ#1x^R$$wlby)*p+9 z;p?MdH$){(1Ygml+`xkH8+Wg{4aPIt2j$^%S_qP7=p&0I4-cj#%HP*Kaw(^xPexBJ z+ac2fK-Mx8r+VcsXJdN6J-RIcVG&SXjw{%Cx(gHclbH8Y5f(N3`?h%0A_c(4i;4GX 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·>9_O)_W!iWSj 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%0DZA6aFAO&xm{1 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

&Y6dauNP3UsJl2VCGDtryV%QY!}`1zPy$t zO8S(vFNaK}OiBJO$ryZ|x8ErA(@>>-IF!vZ5){M}m?vieg$s<%k!bi|QWNlQ#zZFw zPqosP(Tv!PAuX!%dwb*S*Udh-l@F+KAeSL(8dcA49>?j)`@9^5tw|UV8#?s-P>xY< zj-;gnETF*KBg$Sx+wGgrx4m_SQVA_Zf#H zKH0nf0KYv*2qE38L3(OMpsSWh632ukt7`nxC5kbOizLZd#W|PFa%rd?AFD?4f&6%`j62OMM->Ga%f>?Z7D%P84#!b zxiJ-d%WDI;knRcvW@U_97z(Z^OUnu;B&-RTf8C@8T=05R8)(|9LKS|pf~k+M-4 zCSsP>8?B;!eNH-}l1K_7_itJO<-A!F5J^f&!knu^w#*AbdOg8$(vn4p*EWhUX*|s) z4_{-b66=i#a&;YgM}5cesD!ASo9$E4{zNg;oL?=A?;8~}{{ZUN3+2y4!b1`m7`Vbo z305*L(d5Bh(n@YpjY`bew}&yK*siXW=~8Wf)^Q3-nAD_-lOFzH(TU(LU&@kpxNh#f z%5T%D!lxjNDjDkWECUc+5!v(pK*yV)7DAG=7ugZ3sxb=+w5D^B_O1-Ywi7fMKO#?0cQ$`xNfXs4P8loVKAVeolzVO zM7&4J=bZFZBvcygGt`~y*ow|lfpbw{K&3uCbBLp@GPcW={Z{_~(Utwqxk+lX0c$`? znE`1yfXIF}<{-^2X=*Vd)dm*VAZPraZZDve01I5_3?gj8pp>YG)OWM?VdraX;x>TW zUh5+wUAI+_?b36ZjagR*<{6bRiNRO|(_$L^C>(i3kGJln6rSyoVDPoL;3F)iayc*W z)=bG(afrQpw^(!TDrqwk=p^|Fv-Wzj)OR~o;-k(g)Oj&~Pq$f|LJ$*$DXAg${X;67 zFodWaLX`owe7~(>%p~%xY(~M_`)Ah7e)ZBAlA4xMlFgC%-_jkIhzco^s+O-Og7jzS zJl4uWdNH6GMMj_R%HIK9N~wDJ?**2h2`EXJ4fPdrLCZX?54&#SAs9*XIRVO>w$M6&B1RC>EbpR&~|BxmL>Hy&%7t*&qPAAYkqiDf04 zroGk}AI&Z*GpC_{h_GpD`J`Kdj5eittWBj}I?YtD5*m(jq;sh=mw`v^5tGsnhOF3z z>DAEYgXkY$^{nTmRD^=$1JHi`Acc777D`4&9d??(nH!a?KxK=UHgYyaKA*2hO+Z4h zy$LkY?cenbO2aWg%x`Koqb_jL8j*zd?v~zv%x|$(c&}bee!VWFlKKi?zw2nIP?oWS z!lu^bmalq44Lw03+kD6ymF+SA0LOsobxX(q22`e=dSnDLQ0SE~pSDt5m!r9Q=5~lR z_2&@@G9 zQ_$z@isj|lU>I0P|g8u*-R9?HneO6?p!jUBg{#!Da&kyg%P9Z56R1OmC zcdHKV09pmZq~)P*@6yn`kC|t3kTg`9&f&Ge$GOE2Ay@nNt$9xna<^ zdNz?1#w^h)v$^Clqgi=*vfi$jI73ucjej@p@e>wPHe!nL1qNtC-fBWJkz9PlqgS2P zNzUEBbFB$URuC&*{GVt|BoLya$rgGr?^vpL+N{QLZZhUa33YVdNxOK%tS{d!_n5EO8|C~|--U@B#Wr_>#PI(2~c6ba2YZjhsdsw0?{m+hZ^nU)gl zkxFHl&pT5m))zrd<`DOLYCzkpC)b%ORT(r5JX>{HEc#{X^rW*sUH+g;X@yD-;F=nB z<=tUkw5D!iM)Qh2Y>JLo9@zKjpam4azir(jfdsG#cE6k^?llPvr5Q3XFv$~u^r=;2 z_38N%)IW&kSgAX?WhTjCzm|-?_v&4YZ}R|%&4-<%?; zYZDg9rA_VSPt*zd%#(0~V1c!31@6ZgzhB>@lm}9h1wH%kLSYL4C&CGO?E2-~!99;} zuiy85zh~O$&$#Y;t!)hs+e1z=malWKuQ=)GXlTMV&sKW6kc2|kQVxSPX_GB;CKg1X zR8D{bN}kLG->fsh@Y6n_#qj(TlmRky#GnRue8Wff+xS25r-Og=bpHT=9}Up)JuMx7 zihdRNQ&-~;iaTNy_|M|^$46_a9}Lorl3L%xcb(sc_7FWZygE{AJ$z{s7xmw&&*Lhe z`HG|043qH>rH{<&Ho#%PoX*%oqADgM&>O#Qs z_QZ7RBi1wVUtRj>lPO9^(&VTo1F#4~01GpkK6Nj6YG_9Z!v#xPO68=2SUFO!%(*q` zc>H_#m%@9$8u*jE_>0GUep;!isi)fZo$rUm)}Ln;oG5uoo<7Bj-O+MD=keh@UVi0+?E$UD#Y{(4MVli+cs=n8ER>< zWXWYYETy#I!9{iJ{)fWx98VUNCcpALM?we}=x6r3e41xcp9d+Vff zufV?!>V6@7YuomH-{(Fbr>P$i@kxf@?7Mm6MgIURsX1xG8L7C(Uq$-o)RX=<^eL02 zv7SfUm;V6QP{02Gi+^bFKS$tC);_TR^A1ignVl`U4Fp=;=d8MiA1{($kC~ zr>7PX(~g{D80f|)%K{)6R;jC0$*1luWRgy&J>&F03nE%18FJ1aw45w1TRnr* zQKe(a>DJja#4WjJZb7#vm=*NsE(uaa6m8F?`bEUGVG3GOQjqmGAD>8qW@3_Qi*52o znuwlPGW{RFMMfrbmy`}_LU0tMq$~{U`4Qt|cOgTZzfh)$Bklb@~U`ZBAS z($x!5X(1JXTFr&hyj|i|VS=>+xA85<-S2@V;@jVvrJfpF2W+<|d!KojA27E4fhH7Eds0 zCjv^82y$tq_p8@O&q!Lwb0$)Z7K(06XB4}#*0R;|UOF}`At5Ppn)3&`LaD~IOj^_k zN|=ige>>Q=kt?MgGGbbJz&4U9h$LJ2kJ|a@MP_Ca3j!GG{rQ-r#7hcJAO19K&P`44 zqx6ilWxANcH!qem!2}@|GmLl*s#X&Ir(H26A*upJ^Q-jJmXXU=6#@`YSF>KjK7TI^ zw9VTkR+_A?K5ryi3%p3G8~bOaRzOmL(!{ov^9s07qk@Xo$~^?#+|72+ifQpng;R=1(cmExc9cZ&Fj!ah0S9x-~5)$HfnoyNYLVX3=Blr;O0 zhM`iGsFYRlp1tS!Pt#=mZ|Ph_mkJY7qL66n!b)l^DMM)SU*SJdoAiIG@Zw~{DQQqj z%UD+sDb4fLa*o0LNBC#LyWJUh+dlWX()jPOkA2wp8#Mb(Js#(FlzWJpno@~4{%kFH zj1+jTz7zf@^3;Ha>Eopp2pu1&5>Ptu4{{YLrn35C3q<{C)QbUT8Mp;x; zwLscANAYvvUf0CF1My!8p1ftBDp=9->XN@Bu@xZRFj2B)cO{#UUAUBf`5n} zA=qo{#&VBwq1)+d>+Jm43c=kN=>z1MFEfj)>*v4a-$#<6El6}KVF{o#rC!c51NR?7 z{{S81(=jVV>4OL^0XC(DYg&xMQ#k!2@IQ&Z75r8BE4J`|5%8@!c($gNu8(WqOH`6F zgvKtjDxRDryd!CC^Vi1LE06jY)c*9j&BFo-OC6e)t>1b_q2vCaBaGqIF(?NcmltZc zO}=RyKk>)m&*Bf^$9vstcnp6tM_*P@?tC*=GS=)n?+$}05!TX-HtI%3?>!Z3W*)x9 z^slOYC+iZW4kXnf!ovcUk(EiNVBXR5xuc2TCd@)yrncup(yf@Q!rz2H6XB#sOGi-DAt%7Qxyf{)=KlcfT8kg@$Sb8jvHmQH$vj38;Uf&>y>lON zA)M~cN0Ih_ya?EFRx+UlQ}45i!7}aVy~IJFF2<@heQ&PqLnN@48J#cp(1 zI6aTYSXZy8#w29RaDVnlsU;|WxPQM~sYy`^NCLG3K7LV0nI>A3F@7}w#A{*ax1=c4 z)?(RL%!PduG!4;xFqvs2r2haP@8tJ*SwsY+s%9)Apu39X8JWZPNTuBomB2-fq>|W* z0v|0`2fsuTpTesRD92-Zm=K+TOEP7;lqgM3V=qXK9m1?zBRgZBRAaVP%eu~ee)TGq zVgSUBq&s|j-a1l=Dwi;j6dbm9fnhb;x0Z8!-uSf0ap^vnn#l^QKODQCoF5;v|%Myb>=6=0hWT{lRYcT);Ucc7x zX-fm{hB#74B>w=hdRI)VQIuZ(1o#W${{X~a8|*$F_$%SB7xRgDYMcMBne=T6W<9umS4gkdS@KsEKjvNlBZeLC|zT*8TGjrxqz600B| z5q)-G!ZD=r6OdOYg$|5^`3QqyR%b`#PqpvGhSIQWc znLInr;tn+tQcDw&eMz{>&`0K<#y{d0xA^y0$Nn<-)4S904*n7j!?E!G*wfMQ$Z78( z{2?jNaT&AXMu2@^nA z{zh2-In>_#&avlaaOvZC#c>k>0Jh2KEC$wmqO;y>{5PgbU8av~sp2|1vhDOVWv>!D z_nLCOEd&WJ3o4JNTqbeqAkA44lpV@m^`TZx-64T4LO@DDBnkjaxGZgNHoR7RYs9`H z?e(GCe-YgF-K?hv_{v^gp2eGGdtHz>q;Dub>>d8^@UXw;e45#4!~LR#DG3Bn0KtW+ z%aMh;y4ta~osp?+DpgKg*=`WdGtp&AKw+AVA75{1NqCkN-V7o4Kd4BR8p4&Zoe-d~tRh0akWoCmE~b!X}27{k4hs4SE!%(1r{ZblG^l&gN- zT=3wa_*wZs^#M>JSkN%bQOcm7_WfkgLElcmm#c+Jw4%ceHhsFM{8o1q3^~CPCnOn& z7|W$hef0c@lApGjiYBVg{n8Zc8NgmF;G&yvnOIxX^2-43 zG`KI>&MKr8AS)K-{XB#!?r(B3s~2tuYrD;LjvhbD#dPv0n>*jnwuM&8OQc=F<<=G< zDMmoK<}&xlN`uXo{V?azi;z&@&G6SNT?c(eEa7W5^<)g!=SAijeDL} zfai4~qOzvx2<=1v0ElGIuTd<~RIdK_U|?vLq>_?J0Q7GAF$}YL;N0yZAE|kAmB+1f z(J=x6V&g2lpryf3{voU`-d%`-X_%F{j^Ia-OWW#O^!oH^VP^>dgy#TCiC7qXITGN5 zsObW08)G&xsURv*5jd)^Ok>{pzKoSQ0Fo2)@1O2EbizDIK@j3ud~(E0+LHtz4X(pBC@ce1DrWGJo&U235;VPs>U4NZ2IT>bS1Dj z4IDubwW%RQ1Q%=5nCnZ##Hv?}ja~BJ_2_H~02)DEj!JB@f+MQl<#2k^?XPcd_s3IE zNNRpLz|^c$0)b^qU*Bx;2BxYaIE&&7q&70Fc`9m!|Q*#)` z_JfWD5J9SP{@ipm(IM4(4M^_i$_$c8U_XzSNHQ{raht|)yd~am9P)j70SY7(w)~qc z;NU63tYDojKw@sG4WLD#4h|Vpo`W@&h+d7PFpv_j5TV;&Z|)gs%B11iJPA@zsHpl| z_O3C~#1;-*pExm`Bzet|Hu87XXE*GImViXu)B zOW{#Jzj$Idl_C+11*u6udgA(8&cicakqa370XRxc>ffGC5);}exhhdFmlyh%>(vNy z*5AG0?60zLp$4*rq z-M3hoPNf-YEP!au>zqubeAkLSZ-A!Hsqc=2)Fg^WOhRSVoUFBaW%KC+>qrZtO<^Qr z)oeXN`LCOfi!IbfL~BRVx_+Xw6EPCb6@M+hVMes$Fk&9jlx6(68UyY7b)hLGE>%}K z#W9mCVneMxk+z<&Do9ZSbvG)nmv0`J2EMm_6~{5A&i93tg(1R*gnH^}&nT7)cqlgI z3-tPV8(+{Ks6bHEn|nkr{-mYU=9H}~Z7I`8W%+|PvE}m=$##Kj#o^%TU$&&aM0Z^v zE5fxBl(9L`^Q3!f?#!IoWrBIR&OfiGTmZtvurUP~=qewZQ`#{mnZ2QTtF`0y#xd7n zb4us6Az7$O6bP;tsIz`_kE1l?J$FkCLw|KBzlgfloH#?#n$7(i^aSKTxIwQ{wl)>IQBN@?^G_}=N2lx4(#M63NTcl36wg11O+cElW+aDmd*!E1 z1S!^J`(YOSy|8orI%-k^gQ|@FmTxYQv7A((2qlMpn!=9Z7K>*a7LQtRk>fG?m0x`+ zDWNAbPPg=m0!axKB=&Z1>J)cv3~g>Qqz895%jNXD$L-POj6@I}Ce^O_AJjzEq_!Y2 zJ@cn^gc_1a!>+Ll1rX>@-5wM)QFlTVu{o@_wXV%3rgFcP9f3HXw~`nZ-{xO4jF5&`~64B6XW-ZOO~;>9H!u$3h{VpkXLeL9kZQpeBV^$a3x#TpV1 z&UAt_wXRTwu}#*{QDBt3nB(4#s-$>HXVLc^ydFxi6$KY2>>9ge4tsfR!7D1vun91)lBCLDK~e);zRz2ExiHU5Q_7Nj^+($nm6<4se@-#b zS1nF3iaVEmDc#`8M54T4;8>t0&3E5_?j&bDgrtX^O8JUdsS}#V(!;8N8At?@lV6s9 zTb@xN6C9ilACnr6Uhyn-2`@HnZ1WMqvdipe-=K+P7gvSfKPpAcqe2E7FnjXMb-Ygr z5^m5b_p{!woM(d_P^6J(-%h=HM57v1ECMcC*(UTSxigj z_s^}ntTE!m;G8A5dTY7z=O0QjV{1)R0~hFG_z&1Cj<_jUfWwKd{rthylC*|fXd1T6 z?arNHZlsZF?lNKlh334+`A?@FuT7;R5?s*N%YMuzRI;Rk;D;TXpG)2sYE6`-=2ruD zMUR@8%CBgr*3&dSIFx|Z0NUF-jH8kFM9@J61UYbfec75a@b2DS$BK5kP$)H^u564Q z(v)x19(`||bka@!=CKzd!0CHYECf% z=LC!805k9IiO?feFK6-$)O>Oa;{wJ`7~wyPwB|TF-jpM3KxFAtz(YA6F(7Q z+5Z3%!&rBdM|jk3)CV-iku!e0b@Y#=eLwGn6(y8CDPfWLk1ITm9~Kf>H`Vm-D#r-^ zAbfQ%6PBc9s>=5yhxu~lUzy2OMOAh0zMu4wB!Gmta&_Cuxxx$L(=jBe77tsVev!-G zJK|E*byEX*QI^`J8!UMZ%bF5vagE?aSbUOGCzm`D^)D%jInKXr`{w$htAcW-Ffe-6O> zyEcyD^C<4KCU99#w^=+|lop^8NoMJn#1dLVq`52s=eF^(dpQ1X(-I~CVY*C>ac>`A zr&-D&DPjmv9-Hl_^%hEr!~$9Mhn>HF-gq{=b#!$lr?rlxO~@trR3H7P>U5m$5?327 zNm4?BoE@{vu?LgIOp`GR6$PC+5tusVT&o>{_(%A|+jr3a0Mk56T+-Il(}5RKZ6XXgntXTBBsLpmV30eqCG?nGXdFMNQdd*ao1b_pS-<9*NsjXo0XH5$y?i7;zi_)NH z(c;12zB{GiJ~!KVtX|mfJU7C-p5srr*3fk&qoWN-%TxG&E3;9OZo%b-amJU@I2Cbn z_>K$%gNRyEL(rUowKvyD^?yM6kl@IhHBB-?RG`^y%#R@-oIe=r>3HA7-aFrD_i^l{ z-S@h^&ts{rqdjd-=epI`)SbzdMiZ^MTBjUWU#q^CDDZzv;W%?FFYO^HSV;kZ4ShWG zc=)%~=L!D+R^qsXEGzF!D;SRM26=fspgm1kJ}21s9o*n{nmxXrzjdjpEzfz~!3bzT zgh0`bqq=ssLXLnF{{U3??Lbggpy!4o}8;$_TQMgTxI4BMRZv@Vy$5z+5F zW3uqgx{&X534a$Z+B!OVF_f2ATXU8~>FT;VJ;sl1+-gQT^6sUo?$*@Qn|WC~ zLnU+8f#J;Xq^OyA*pL_mhGA>h{1WUH=|MD%d;mnm&G?2^h*pv}VyzwR5FgE0x6{{Zbn zvkQ-G$E-!Ir{X>y=;-P8l03{Osx0($HK7yp;W)}(Xuz3m)s=k}21N9!MQ<|tIClhY zc{u3_&6*NYC9O%84MkWS`uW5E0K`830JqTiOToK;%X>&_LsC8=DG%rOGCZ=84Mp0K zTtFN;q~CyIPU*ywlK`u_lyM^YV}qP?GN#V=t8bMGl%Uzfl2d;E`x`oH-P5%l>p zF>qf?TBU^6vp@VI=xRst2O!`_)W5|3nSs*fk8^W43$B2zuIu~EL zgo2|bRo(^=X~(Up?M8a}WRxfpaWGa#r!H~oW)+a=K~stw*D;_6$TR_|uEd>}BF`yK zGAi@VE9yNQO9f2-0D;qA%n4I)B|%7erNAIi7IRaTKQ)4T4;Iz%=e~mocM$Oo&s((a zdwoVq{;r;^Aw4tE`g01D2}00tDq4dPeZ_zB6gxtuVx*;Ln53x8cm0;j zAT0^CBRxw)lG5>px%%U#F{p>c zLGo|ZT^It1`)^8G_i^s^a~dD~Lwq0Gd`s|`hIpQqj)tds;6D*~Uc4FU#nyX1?pnRS zaoed2{H9aVl#Cel>*^o+PxYDn2iK?lJj_yff2qirlj87|pamqe{{SY%;^nM)U-J*A zh4B0@91Ud5Ks2aHdRnz=#)kOw#JgV4!h9pR@!Icu&hNr|IOxYieuTd(cAVj?#uDWs z>6{f1tLyIn07cDm=N?b$yh;)FrcGCfr7USsEL$sDHCf&F z-Z|nC(Vyo+GSHr%ZKd7o$5s&Sm-3mya{mDAWM9iRm{nEl(XL83Ie3Er?ntF>A5eWM zt#g0nCy6*fIHn{3PIY(Ex<=g4((Zl@@XrPAq1;DSES(v4ou8Au?liSDH9K8S;O=xv zj<4lwYMZV&IOnf2rK9S6M-wa{poTb=XLkb$qd3Z$ylim8{xqo~VFgLj_P;Xy-aPT2 zkNkJL*4NOFYvA4i;972`idi9bz{ zgdu8}z9WcYaTO9VUey?EIRRJ{-Z`d}rdX1aT8S6Sx}P%@zU#Q|{7X%od^1D2)YR`Z zC#$cmu4w9Z+HR?Z9mPS(+EJ7GCo`Ak_u77nR7vq zvK%0t>R4RX^?k6podcwQKkkV*ih zJexb&%~~wl9m%A|GGt|Az^tQ*=I)P67O;C`u31wkc!O`{mv@ahC21m_7pvs-cRA~n z8>y$lc1&z~Hg_R#;@1BH&g5(w>*_x*#BNl|P26+kzcvBS)ydUKKgC9g`0t}dfDR^0miYZ2Z95U;IW1o3+Y(!>9NQ}A zpHcm~GEje$Xit2gYb8s)~*@HOq|vUHB}?0D6<8&sU5gJ&Dr+o7yt!I3>~?1 z9$LRhZ|+PuWlB(40o?7Tdj9}XJZ7Y0DI2I{6;!RpOk5m)%j=3;#6bYl<-@^JR>=ym z4sEG$eluwJ)v3vfjBPWN8@n+sWmo8PeOMvDD^G<)0@^b+vB7CLu#?~!dG6z#Ae}9F zO$K{V+{Kd^$7GzbC;7nFnjx~Ac@*52 z62J4FsH1_B4kcG?v>D~@BBg4biRF+I8R?N7deeAgr7}Ss(2KBQxEVa;Jk^`cdAZ=~ zpeQjQfDfm`){w$N5JnOO9*inSxEB%Q+)6d4Elu0hlEu0jB!Po*i^-p((ES#6;nQ2SzX;cUq0PkC{R`;*owGw$ZZr+#VDmj zx`l(&n0xw1kk(^SWw^bjLaZ8#{%kq_0MA7GPLe?(L)QB{4zRFa+Mp#!&h$ESBg!*1 z;zmVOSW9WRP1lJ|+=bUZm+ecLYAi~;Ltj5XCW;|RKXtKTQ?*I1M7YRX<}-|#nUFhN zv2K(WEB^qw#%!*vpyiScYDvHjlD8@~SU9mRX>}AKNx8KvLDWxb?*^WZef{>uX zwl~NhF%m*dWJ)+=C(JqI#tt!Wqkm4Sq!uF+f-CXXI8OfnuzkBEisoF~MyyzSPU2S? z&^BVI;G+EuAL-U~*=bP2T2lAcG^NZqL0S$qZKvm0dE3pFph}}EU9DVm^GZhs*Y}m@ ztof+IfIkH&EGx9)cl+@;gDQ3aWUD~lYC61eL>h?0?u3!Q7}$Ys_UmZaiM za0O+%SN3&=u$_W(n^bJaImf>oe_oPiSt@ebv}vMX2v!C`v3D4Tzo7NapuHVwMnk!X z`pP%5FY{pMfA#8wVo7A;CcWhr6IPUh0UwH^Ne0vRhw!kLBUfAmhzlN~AX7M|C;BoZo+l#SGq#l`yY{{U;e zW6qMaxFW@YyN14yWUW%rKv&x@zpLMNhk7#|xuxbdVvBFq{+#~ZXQ?EEM`L>%+xHOU zs1j;wNDcb@!%ZDjJd&?0wny6T)e~{Q$A1CQzjzs86wSPn*Vn`mg^0VClph-#%CUcmD9tW?dKq=YQuNT@e&)go!;_Pe{K~HeA`t&r) zEmu2tYrs`8KmwG4=a+w&Td5$rh`%;>RW%?z<7InN^vY18kfK>NZ*D`}v{4HrjA?Zb zKP$lcn!A-E3FWQSfH$8)-Z%>Ah?W9FDaUm$2b(b~!lf2#>CnJhlQiF$+}_fqTdSD| z>vxO4zf2_xQT{l9se3n=g{DnHQb1&{&J_1u*&ie&A1?Vxv0~SjMYQnQcax`OaNx3y zN~|s4ch5OW69W+C1;yX`BPe9Q?mf4x}X6 zI?bY>)!LxG$FZMYh#2mBrcec?X;2|dlVez4s1c3vxqe$O6pC77?T(t38~{8mu9f%o zFs#y)k_xc`#`JuuH{{R;vZ6{M8AROesKP0Wmh8xVKWpivA&UuwF`&)gmU_VEI!hGz zRyE1cDOf_lyS~1= zLURaanCe||B=ELfYDE2w_I%EO> za_#NUyTYPqQprie8iX1@CLM0j8zCesDUx@8G-QR5g(f!9ia1R4P@E+y3=pluw(n~B zz)4DilCz0=P=elCYY@*?I0-ajQMYL!DgxCg^YpvwxJV}wT&es`SmLx0mR=Uhpnvsi zznm-XB<=PY`DC2a^5OG2e%}0a;sX#89+lgcn(G5wq=0~1{fV%DepajnJxbn;TN0|> zp+IJs`<}Pa{{ZnyQbL0ht$u%~uu?IoOjy8mbM5Q>82ujq0O+aw6VUu|{{R`EhMljA z_7d-Y5&S#U?>`lOER6I?_J?EeR-8NE2<^MVQQIEhTjELhHl9RCN+9*)zs`8?_+Ld- zgschQQCO4(jtZ(_&bSg%ZB>g={a^Uc4(s}l)R3$vf|Y_n0`upoGNpjz5>gbYl&He? zkLXYT0HlxOuFK+Ih<^qD0K@*Di$k{Vej)glUx+^x=*LQZ=C+?>+jlVSybDXZ?cpkq zZ$AG3x$d@&=#}~ z@s1cF276&y0X{;!pZkv$_5LL*oBseFS;qO=_k6q3Ht+a;_;X*d@Gleb-F+Px$Hn{2 zEe_H`eti3W#s;L>6iOO0mb@wAN$XvBzx_h`f+z7ZI2mdr@W~}wVo}NS40%Vc z^2vnagSPfdaWhx*rlw)eX)3qTD({6)==xaQK<1?Lxx+A!m6KLg~mE zN=1~hka;t|1zC?=bkv6j#D)L{(B@lxc8biDwo@>xN zXxZ!gY@u0d!qXJOS?1x516HmdmT-q4D@@2j?1;-$r@y=!FVt4>5i3Lu!d1n0NmUA&Ei$W z%$R{JrwqG2pL5EYSUp^r*Pjx0(d_m0wBrfJ8vAv0W2rOFBv~3@+omhW7uVLm$M}QB z{T@+Lf|o7QX=XHkike5rzO^K9A6S?|*vwK?$2*@18=huANj?CJ@!$At_+P|f-08>0 zehKfp-wD;yAsv4ZmX~n|YWDK&dv+;3Jvl*SwRf3O*X2*FxA^z|r~O-mGL)Vd>mf5i za+zd;#3@hcE45?we5D_)e}VlYjtiDoDo6`73Iza+B_^P%jzw}8jzRd&9p7o<8rr&1 zfa_~%#(Hvwo}{&P3!bcGLdYy>qyr-H*WEsa_UCZP#HJ_(jYADZoDOf!KRbVt0FEMH zLNNu<=Ea=a!Kq$R`I-3b@b7ux{{S9%-+7_iPqotVwDEq<1PDh?I9kC-!{&c?t^WY1eHk2Q3dH~vvXWT4;sdofW6-Nv(hzZ$6w(yvwR;%xrb?|qvBp6 zsjuChA)};C)6krutqD$Dx|5lwAT-CyTe&mWuKI8J{Kd{FT*j1u6M&nRXRV)8Lmxll zeuFoKT82620Jv>vr{{YkB+~~(v2@P(`#xJ$*H0Mv3w(p?q*5LWeT3X|*emDGghme89B_#%7 zaHLf%bxqUL<~_dy{$a$WK^#F7WzZ0#;%1{8tKv33w}p6@b)_9h_I`)6MAn4n zM$NjqTcY7OPJQ#&o%<-3R1+~JAh{snK1Ro+dr4nb;rOX&#DbEr;MhA-+^kwCz9ZRp z8f^6E3BytdNZTbQwhAd2-Qm0y&rG6ONejV=CdX~ZZv&k@6Vi!trr;s*0&kn&T5AX= zq{UB|y{^_RQN)P-Z`t=Nrh&&`X#Q#G3R8lOccIU{;ZJb}PTle$IeCeBOQKlGMG^l1m(f503Jfs~JM#?{ zQCf_!ToXb_v*>-|yWGqEvayrAu!Bb&iD2$-ihoX-l%ER*OKrZIZ%lxJ6&IcKM1}q?>h}=PxAa*zVO-jCxrf7@aspv@s~zAx_3{JmKP13 zCo_-wcL#{^JbD2Fz~Uof68^0LGXkapiDg(AJKmY>el(BRFTij9g`WWM?%T2Wi~LFc zBWlLuqupzK8SqI6zm+C4muKJnN!~$PF*mo-0J_v_`t!VB`J}g0zo&465OI!U9h@Lh z^m0z34K7a*wJ8cE2qnqP@+a2gb04N32k8F*gZ}{Vx#8Ns4*n2$Ps9Ej<552+Q$xWu zJAV}Tm&7$Li1?R{cN(+Qhz99ypEm6ZI`ceF)IP1psLtcUzR9bX2}lDV7*@;#UTnS| zPl{T~<^Xgjsj%t3SLQ#(&&FTHkBansYrgNJ;$98#Hs?pS@Slczpz%)X8k&Xb`1g!! zN)XV|j+oC=PejSYpH?_-KY$BFo*79zVY=oAO$CsVTG$tiDbi=pS`#%`WfS2oLCjId zJ7gn=el-685WY9?H^aLA3-Cu_q{F$8!^Pz&%fHdpbvE}Jy0g{Qcj`w?j@tFMTwhP{ z{{TRj^-eSI{Y#1!T?eZ!vOUy$1-OwF^b-5JNM`hNm=MH##@%)Sy>!b9Aq!nCGM zu;h&S@+Kq&zuZ$WHyhJEyt0im;*-$q&fmfNZuhnD?HxURJx=3ZVXGeM8e=C-hMOi) zynpuHYl5lRxT(_BIb;w6*qzOfxFRblQqr&zw51{HX-{$F@lo#lf4uRJ6o!m@iB27? zoi4^QpX7G%(vF;iQ@8DyyKNPmtBa$eCx(|IQkFwvs;K47OPu*cJ~agY03b~ptt@G< zAinWl@ogS@NW(6JUg({{Jz_>(2ks83X3_B zH_BpBDM{x&esB7R8^nD_i{dz*AiAcgv*env=sV6n-NA5jI8Gi+sZ5ZBfHHC}f4ajR zPCVXduG;k~0!wqvP#<2CNTI@5iq}1W^XUvtQc5r^j3>P4`fmz5nyDzlAd(2XkSLbs z^SpSw7m7N5NF*i8mlw74qf(tCDqzAUI4KBZixPQm{pA(D;&P0n30qZ9oodlX<>wep z-o0weKwwP^`FEUUOgLUnJPMf1O>3AsWo=<_ZX>j+c=J<3$ey%+&KxMa=ikI6Q#M+_ zQrv*fELz@M`A5PDCvAn~+{i_sytTLX>w-ykdh6XEY@$@6pk=540d}Q24f;f|Ioz(& zoDnFe793+fw~mHf5xuJIvC{Iitym8EH2i#=lyu;fLvintM}fqRm)x!tcFd4j{LNRQ_>vaE~76r zf&pvhJk9QLo(?*3B!sfaeD;OIB})nffZ3bU#qG9Lfn-G7))M@v{Ppa=M?U>`gjD!R z(yn*yp^0n2g(*#l`PR`4l@ro-}$E?IFLN6jifr`M(u zk`MA=`9K#kS`gr4QqN)R>|qwTgr_epgs^i=mMJI7<~)Dl#1Tw2W0~#VwblXmaR5Jo z4@bXWYC_a4Y;O26UM$bGe$P#$xMO#0+d4k6MTDdhk;mlU~v=Wo1o`e=B!b=(|N$lo3@?r~%I49cy^@P-IZl zYdO2;8

U`t`uISb1L?G*h;$BGt3ee0p97p+>v=kpXQ5|J$mHCX55)`>}H*Agp;;lppM z{{42DJPj#Irl_R05GWiu-(6x-Ln<3-c*r=fwmRZk_U~9QP$Y_C9Zy|3Z3bvaWGuGu zWc7K#V)*y<>WV1=g${k?7a=MMQbSNwU>8|la&%doTD8edA}B0j%JE}n0MBSss%ft6*n=7ZLyr8~7->z)HrJHPZJUzL3O|2m0A3PYTfbg$$(T~IQkNO* zI%@`L$f_tt@8&PcM2Hvu)pf@~RnvVm>je|QK_;qBc^9*740N@lJ+&#(QGDF{R^ArR z)#WRtmV%5`40P`fX<0@RR zoE{|+Pz#35?-9;IZBzsKLBf|}XOq|Z9b6{NE1|!=e4wF}((DB~<=eoJf9ktt(PTt$ zfpo2v4mMM(^l(0S*RZCE!?OxhzGBNuh3$0F5Xy7jJ?Qr%Sq47tU=*-j-2 zy7n7ZQN@35X1NX0CT7bZ0V=tI9~w(nQCOJ{Nvij4^a?r*{m44{{UX4fCnK9 zDx@W`6IRwd+M*X$Ni9Y{D?)mw@6|{*+xqg_C_)^97*{U#j7dtdkENx3z~`vOMG~^Y z)clwkl7$>t!F_6doPxkz^!V#&QLgUhD@~?qOlcpWsr|1RW?I0gQRnbt6jHF|Ae4%S zXVIyU7ci=6Ic}S#DB-Uuou$=N>z;V&)c8ed`+$`uVw{AcgmPf$-zh6vspp{`uSYIj%#Z*&= z5I!Uik=7D-F=YlMk&U5A;FVE+JKo=5@lcuha3 zl;R}j3ub{u01Bcl5vOXt+rwtr4@kr)uW|PbaSp*H%hE zAYYyNMbcbh{{UY90CD50uHGmtGT)|NGCBVMYwG4$XH`c1kIY>Q63gKr{{XAxFW+J( zhO1<7A%t1IAGX#mkw8#LH>F$4Gvy3>e&l5yX~g1`uz4w7 zF8=^-fi_bLpAfe`=?o@h!lV*E>sCYLWX7lFELvKS)rH40Dp6%C^HG!2i^+Uv9cQTh zwH##lo}Z9CyzbGYtRW~0pl1ql+G+dtg0z~6xRs6(N|5B3Ika(f-Z~M$ONT?$jc(Cl zJSmDnP!v;K(S<8}kLo6luDLxoCbVlPS;v%y+=wqh$%5gW5_tN#Gt z(n0mdR8*jrB&3}6?Dc|4QUZKL;lA2Y>GESK%0}8^kCsRwS-U;6_IjCUNqkfn=lhOQ zlnQXHHgqQaeqnC3*(%qTX>p#`GN!R7=vO?R{WOVbW=LW~^AvroU4>!t8*71ycx6u-m6MzxY?X$!Jp+X!S`cbxebIFW0_+WK>PkBtV zp*@O%Nn%Oko?7O(=<^TTmX-v9M|e3i3I}|0qdr>jqTyyE&l+fx?RPT1ZOA9 z6bwo&`((a)!s1c)mZYGyUf$!<&mVvKCj_2tsm`nHjAhyp*YM8;diE5z8?6HmAeJ(h`*)Dz?&yB70{aZhFk( z17fQxzFY78MG!-P90on<_@r%54AQ1D+q$MwM|6MtV#|$xUw*Q9h0r0xD_wHw7u z5nh3>5BzJkW!vdaBF|0{liG{TT~b4&Dc0RD&IS|+DFwl|d+ij+YWKbw z+-diEGM1Rlp6JRzRI6;5x%2T|F*-!9CQ{|80YN|pxaV6_)WZ^ID~DKGW)Meyx$?Yq zpWxr)Kji8|zm#3whY2QfQb+i5}ES@f8gvxwG7iVT_K2Ce2H~#=COqoV(!U+f| zAky`)zj+6a1M%Mz@gEiOPS^80S+LaaCm#ungHK0SM^9E-dV1<1Cir;rqu1%q7DT=u zhEkNUq7n-1Sdn4-kCX8eRXd9%QvTYC&J2g1nq{0+d`HFnUr)W3pK%>2>F64rw9Uux z@@BGibR`4)-qz;0=(4y@9dbhD5`w=Fdya4YS|J=skuarc1Q!jvW$k{j&#>_x+xRca z)a>MT`u)c3Zu?F!bs-Wzm#3qv5K~E2A{-XyMlfKzhI5CRvjtZ@LU_Z* zOjM7wWld1RNH#f|HaNIRrTu2Ou14O!i0&77gZ~uB)v!#5JIyta@15(01THb?92du`Nf~& zEj?IxXNC7r*Y5kS-&0A3zjL5(JEu-jj;@?^<8uBQGkns<^`oSInza4-=qXAj58{;@ zd^u(s4=BGGD1=HaMh@Lr~d%!ET3XN zBkZ4l?IKi^_(~9zfJ0Rv0?k~S(QJo^T-0tPhEcV(JjhD8wz>DNu}pvkoT`)_UmlR` zt}SSqkmmJBA()G{j{4RnHHpY0J0P;L!bz!Oyx61Ho}nSCP|7;D_Xe1iGG(QB)`CkK zBt7c&-IqI_%nRO+DcWmHdL7cFIG1eRbTU;9C+Q-s{#5}Vv z(plRptSGYPs}6C}c)s8&9v3-_RrZk~CEaM~Lv86AdY#D~ILU17_qa~KM1PI(yk8ct zsqxD};bbOquuB)hmq;qr+Pv6pFhi?Kq^)+PTI0;!?b?JDSvnR;Lm3_b)2pOo*0%|Fp zbdNtR5|cTUl7TO%0j@dZISR#(v+-RI8)2o}_S(AM2jP*`h-&I-$5wLDjCJD}k}^wG zcY5vha&?@!GdMwrs3Lsks16vGuOK>@)s(q&zzG<_My$+wLeAq;#Jo-s)SqqGIuh<< z+vs-MaAJ2o#)@|Y8eLB3xg)C(ljWi@ymavrQIpx{ro;-Op*^+Pb>B-M{^9y`H|WZ`=0Hrrl4@?g>_kX}Y!1MyeG{0GIm{_Deh z6Gy+*?|ekltp`d|jN?6F`MZfaQ6m-dm5RQ*>eG0h7*68&c}bnc6ojKU4jJ?S)QiG= z44FJiKgc_dks~ylfANJCBFq@F$OUJ`vl8YcCY+^!pzBRg0}Y*Gf9fbpHT9 zcGv#Et9rncIOFwB6NutVtjkea1F%w>tj|M0J|k*$sbBDC%9f(0SYj&acF(Xi zF*krpIsgkn^uB%<+eDV=8X9rDQm_rc;&Qm>&`)l>Pt{#~T-6#CDC?Y!gG@SrP$ z;J_fM3DZXgzWZ7oYU<)CA0dEHjAI3;)LShU&w3p7oRk+(CB}Vo?(Jx8Dsr^Du+EQ7 z@)~E%N3iZ#oU)b1qg5ygA(Tl+*-N|62R%>Q4#0R>-y@}cX#_$;C` zcO|9Sy6nkZ`*i|d9AcoKZt^i67eWcb5cCcYHvPAxcWn@VCf!!r*&Bx!X z1Yrji>vMf6@8=Rq6osH47De;7>um1@$5CrGMyl@R?&AZK57UlA{P#j^x zTqP2@)c!eABsB-iE4#G=G$D^iH|>7CaLNmH zn!A-@qic&UuIvxnu2KWOMUD06^JrpHl)PvO0YZe^vrmy9X=*WD(qd3c<-0v32fOXn zmV!Z0L$ljWkHl6?#bYR#yeT5)x$D;75k8){jZoTTt3-xV^{NxA zO#A_1DxytX8js9L9b5BT8kGs@8w4?Se&4CpM705fUi#8FPAVl#QVF5dX6$JP=}G*t z-6=%CfNh3UWgc70>hvZ7XTs{xy<11?;{{Np#cfEXy1Zi?+z z!ACzWeZKt_C|$@k$oE&YQB!5%N`M$iB8O|6^@1I8Q4P-FxX8p9+Z1TBSiJlD-$WRY zr5r4V4{o*hq!BY@gt1X7Kg5CPa|B3r(@R&Lk#|hQFfOVPD{-5* zJ4R%-Ra()y(c12!r6RVz*>Ux*rK^b0_wCXLF<4ZTumJ0x{{Y-c9YXP2TLD#$1oz18 ztkyb=0m;nte<-PXl%y!6`NW2#qF(Dh;KvlLx9GL>>M$ncGtl?Bg_J_n_y8|f9*wb& zqpV&l5;p=BklmgwJ^09DswqAZqi^NBSxLaKsfEr%+Qpk=)(X==6LQ+rj2W=wodvr2rBb3h8|`Cbzsh zE^MSFV;_lOfxUb6ix+RH7}XdeR@oV>NOvtCU*9#>N|H_|tKIwbh5{yuVJ_@hM_lOM z-C?GeaI%T=Sb0EHaLO(G+l(0KE0mQCk9q05O3MV0oLC2~>kagE7=|6!P14#RS0Ib` z=}EH6!2~`RW*(cv1MVdx72sNqe63$xxkC*-K|l8T17weQ8Z04XW0spp-IGK&vu z-2P&!1TW1gR^h0PdtawK-&wO|1ROObK!$FuNTZdn#4xELwDQ}#!+3X~?UbUVT8}D* zO1o80-=v2QOSJ>$;-9a0CNf=!8Ds{ZhmTJ2oG~rAmg_Ajjgd)tOZEQ%gqaCRcEk%0 zTb+4Dijys+tyqM^xNl!vs~<O8w-GPKG6^EC3-QnbG(6+i2w(XtM=@)vwYAp1fnmR*{hH3j|ur&OK|MIx1xqF(ra& zOSsoEW32*iBZ65>VXsb}LRx@ZKR(PZ0TRekX!m;Z z{OJodwFr`=+!2l?x@IUcH0}4sKTevIg6Sks^cnBu)-hDbm~e~~EXCg05wQ1)_i-yw zs4gV#m&&isry>>yp^WvYgs^|)M#JOa#g`H^i&zD5ljQq|`!Yi*yk*G!=RkXR}5$?4D2 z&p@myU{cVhN;0voy8-Lc1k|~C@l3$-sZ30(!(vz0_F))7Pz8%ur96(`s97X4GrbOf z5Tm))0y{;iJA;?aM7HppA5NW>EuQ`%O8R$54Aq6G6cz}$BIj61tu!Q|w+h)oYJ_g! z`yW^7(`ZN}3|L6Ewty?flF4j7dHJ>46l%%TlFFh2F~wNfCl^oe!_)HRg!q5hwek=z z`&JT=lYnH^eM3DU9bNmF#bx9ilN^%WxH0PAzR)^hB>)1T!(RG)#~}q%!WUvQp%s3w zYQm{I3_FHN69hz&L!O!sgsFoM ze*XY*oDzQNN<0c`*Q*Y8h*;JmwPPtR#N3#}UcbICj<~3dIG+t0F#Y$Xf({@0*x@Jm z-G)cX0@kh4cCjTAqOoZ%n8o>Gr@G^!Atr_KD^T>?Du|-g7FJ3MP(Y(l5oXcv3bk7^ zBq70mV&75qY9hTmEEcF`W@}iyq!5A>Ng5V&-86;MAC%mey6%*^Ok%8Q<>`U^ly&!n z{?Jl_iD%laufxam+5Z60QSc9M@Ymsg<4@x!cRt@sz4-UzKZkz_{2yCd5jAvtC*iKf zUln-qr>F}U>-YX4;rb5|lcf>d(0o(;{{W9y6aGQN@I(PGg)r(7EIHk* z@$|2y@aW;bi}a}>)_CqBXA)ILc}f2Ok1a2HW16h1g-rE~{{R^O01&)m#(%_5_=Wso z?PcNJ*JJRnjp=?F{59czC8r%u<awIy z;J$_QbrmI3(r3(44LoF=1*pX=D`EsQ!Y}QfGIj?GUJ-CWNNed!HLD+*zl=W>Yj}@s z-cMh};i=*p9l_rBnmY2*@gunJyg<~{?j@_Xf>PJin(k*I3QDfMNBH*!i9A9HkVK*i zP@w6;63p4Na^)FcQkbJEV#6P{EtP3}`I?O5m%LxZdyQVlw$jtl?0h|!d40(a)@F{6 zX{4H+#;K~?sVPPk5pa6bpKmD%MA@ZFRKS#$txB>DpfxAZW#pEm%np=p09hQrJ>lvw$jt=;iDPo=;>*NOkt#DSxr~gy7eDN;p7?I zKm0T)YM96*sGk#%NqaFmF!hWMGGe4kn7OJ6DRKY|8uYa^xz8y4_}0+Y_`l-~7)na` z&xmR1M^8kHEf{NRK-HANO+O&+eF087`&v|wr2Qspg+Jn;mpQO-H>sw*W9F%UsQqOK zN@}%GK3JanjPlAmv$5>^KM(CR`%cG0Pqpo|G~*2|Ef~~c9XLZyG^S7tzh1vT@qA4F zDs;)y)MhNG)S8z$k4*(*^fbAKXAdC&87Y@7C_+*&ga8?VVB>vnSR#6sRH#Fj%elNo zN0O+2uRuyd0K!0HP+z~qQgT4Rxrqi^MN8FBZ^>qeuM&ii5y2}5G!RI^B749OHP=w+p@_q8zqcH=LTSh9bW zLl5tMK*I@?iE>vtWP%(fz$oXSnH z{3#kc@19-ko?7piv|?-|F&f-VVqZ75+Va=GOyGPayhgRlFIVemRZ|cZFgl42+Iio* zK$@M_t?gQgDNZ7ql*#0x?dSLRu85Q+ot;+FfWE%aDMY%7C5SFr>M8@}ua!h&9cju= zY#7IA(CtFd;$CCv{+vSq0|j}pI(tVMg+U_#4N*+bJd8|hvHY@yjr_!9TQK=UDAq5J zzg0}KqPH&hXd0BXDT|N1GBn&%T`3H^d2O63d$B1{mlx)ZM&B;##}s0{SDGiWkPZdhqyz!1d*+BSXIJJG}=)xzF=7CAuv{HpgzK zy`jrZd!O+6sZRsP$fL_rRN{i6yxd+q2lulQr}oi5Me55yl1 z?PJ_J-Irsd-ohH)>~te7U5=KnoTzU`db+R}`wgvEUl{)Y)s6(K{EO%_&J?10)RW=F zOOQbn$O1_Q>;R9rf9b~+Eq~$Me2IxO#|%rK_E0D)!djFevhA1wYxsY zw(omgJwDnJ@aV_4?R$MmkLGTaWPWb0;91*sLG9~4gC=hUEhJ7<$uleCsXB5QG3y^c z{{SIZ3brVc6F3_NU=FzxsjJe_$3Kjo1>1P9XB}?;0KV4md%nlE*U;^!r42JnKqAX# zptcjGyk~>2v44zlOX0C5Ora`V^#Z3Pxy`v{&OSZ$&Jh!g#i(Ie2ANYQ$<2;ii2TF& zqqf!XzZTZgjJ6ZDxFbk}mz)nj*RQ>OJ!s-Ma8HX3yt}8Qe7}i#b7mv~;XZt|VahkJ z;0NPgx8eT)kM_E~{s$cpvl6@YMZpfS8#F>`o!V zg$}Gsk6-KD{{V>p0F(a!?UNBIdBrFI25c#3eO%j=cmAj1Uxs+ka~~M^S4X_??Hzqj z;v?H>MmkzBjojg*`A?MJDOlupYi@HfJx!LqcJmPBw=%MMX^2T*t~r?5t$&HnFVTb?+o`A5flU9u{z&!^;e$l;X&_e2$c? zc{#i}moWulh^Tj=8d00t8GIF|_>b_$w0qBnJa@9v($MZ>{1S~hgB5suRUo$VAxXR3R^PV&4GYYYN zEBuXIFmlqSmo){2bZd)VJ>L!W?f^|l<2ZaKfT;mCdXO8Gbbo;Mzx^E_iXJK3%i{k4 z1Ngh}<67Mh5Yg;4wV|U4)U`Ao+qKiuW1>b<26F~w?_RvT!T$iMe@K?EvL*dWQFQ_e zNnt_>Ro%5=T$(*Zum0w^)Rgf508vU-2&}<@Kvyeu&v>%<=lDAR007?-b}{e%75ruR zqv77?U&E6_LsLQVKGR#qbm1M^7>h33vbeG3oaV_S2m|52%zw{{Z*2q&1li3mwU}TEb`O{9*$pV3-s|$#m*619;rt z6aN6w%l-*I1=7&*KZ$#fg#1Ud?KGh-_J0)qCiipE*PE)uXW{*yeiBX4-3}eQv0Wyw z^KYunSK5}PCSuJ5xhbZ=;W|;Ao;oD8#n69@f%BF*4kzxW6ID)DI_1o$_? z9x3CxI=A8dufcx?zY%xltZrIT)9*W|$ou@eMjp&RHZIA5AXat zR{Ji}UBK%1pFBK6#I?1zOY$M6M{b-pU(3f{gM$A66yaygmBw(=Qi+n+QmTwPC9@`k zmumBX@gG)|_JS1Tq#U!zlgsyL<^Jd5F6-k7>gh+ud`rIVv}5^@)76REb~+5CN=BZU z0n~ps)m4_$A;+a$g#9=t7YvDOSt0)bl9bx%PTnvTFwS4x##RtTG8Z(~y1Yl<&%u5e z@CkRFwv;>X7Vf;A-+1auTAFap{{RfK#KuXxo-$_h(!Mi|<9^9MXNE%*hG1Tx7VK#c zN<2CcXDK-5*p_y?2KkK@;yy2@+QVDA(1xdL9ZgBkwbIp$e~6K(W~Q#L@mMl!s>HFJ zo{=)wF-Vs&L39B}AVq~ePv#exu`x?pMjR~T{{W?Inwt?wq`on&rLX)1wnF@$&$U`Y%i_Ry3Js_~!X?(cdb;cw(7F3Q&AO_79e?OtXgF&wt!&cs%2&sjD8~ z)wtd5dO0trts~3vJYW1#G)z$- z5)0cl_3n|(-X-HY{ypLkW7#vFoV7?X2K6PVfE47my^8yF@8ocZ;3O)1UMu1{T6*2eL|rI8c=qLj zO52yaM_&>D05JOEzO%-vOsD?4HtlLvG#J#8=95iyZp&!V~`hh@iIr z0Gy)f3B+kux3wW=q-x!}lz32~+R3Ns>+kmIxo%xAS3Nd?C}1-QEJ$EEKsts=A+|~s z*vFjxY4zjj(cbHt?Wojn78knDT;|m* zdXflbtWxd1V|%;B6DYY*I2+&E2V#Y!ZXlL?!dO^Z-5h#n4_8u$@vGz(ayvrkqt_4A~+&*0K{{Sna zOCB#0XgRi#*ie+DVIC?TcWt}8ChqTh7|YB2*sR-a)-vETo-@<(l*xOak2if@5S}Hb zX(^(UZ8?$F_Jwi_;d0ZH5%s~%bN>Jyo<`LKY7Jm1P&kxSX#AV33#oMxlE%w3Qom1k zKe}h5rnxyC*S=8;ClFQ!2AkJ7h0>C{B@!T<+_xU-bk%#G=^;$vR}d9qOQB7PCBYfi zAVoIHHxf!p%Ms>B(>!}uLsMOiX^KELt-FQ*OQIB?o3OiE48yEtBONyj|E@r?a+?jm|X#qvVWYhy|Ss$e8Djp zH(4HB{Imt$9Jkj%k{2;-r$|CWH8eFFj;8S@n{sl*KCXH7;mQ8}RdgKU(ugw_1%SI} zL0>M~3)7x!oKR)9!w;@rhEqocz=Mg5r2#{z_jqlkHbBV$TgNqO%3iqt0Dh`ez&og$ z0r`uuAhaJ1O|fEaWlI{j9*3E>RewyMeuFhZN(D}kf<+?#l zM}75%I#sZp{(~%C^XtGk#bcn7Tt8m_08qkkU`mw5s@APt_vd`#SZhnlBzDS}yJJz? zyXnB?8}!drGQq8g_4R@RNi-M@m{Y%)C-d*hGQ~6*S#yIz@=t5GeNdfO_4WcmB z@iW8{)||B?9n{Ej*+U`;@aC6Xyp z1iEM*a;4FqUv7#4qHgc~e0xHwQvyf?A57jcH(X^B2yoRgp;*d`yW{G0e+a@Wi#D2@`@HvHG6)`y2xM%n4 ztYjNn!b{f`it^yZT8aiMyhB4|pY#~~R2Eipur*8(>F zr$SI5g)_ZNMGBOJs1-RjJ^Fe?%uD5`gu!1x`hL0UxQkuRw`2PFfu(A|MUSt1uO7)t zsJ48u=hrEoarVEzTmS?;0M9r9bfq|Jgudn@N&MV9QD`_?Hm)+~)2j?8!c9r;y*e18 z8A7g7?|*!<dZi_XC94Sqhxfbzs>sYT|nwFA;;SEhG^A{9JI_OL< z?gk^DGkFydKRS)2eM?b_S)SDzPn~bA`+~5`D zs`Wj(epqM17+k=D%2pj9pi!SaRZATqexbJOYJ-6;k9XG@v);Y>Y!?8FJ3{IzOMn`k z*S(>3qg3$F&~sk*^mF&%!O=r4u#y|UL#zWBSpzT{l=JKTm|Lrz*%1&c(5WPHT(*y| zPRL@QYFzy3qn?l%%Th)F0CqGPe{hSq)Eq|Ta#Brt;270&Tyk}wk%YOR^R}0TRIppF zBkDtU=M}!@a%Z;wS1p1VxNeuFwa?eztw|{WC2Yl1f0onwil79fmc;hYzOW-y))ihH z-WcG+W_|i?Epp|z?vPhghNwAvK=M*pNbP*X&8docUtW&Mvrzd#NAXp3fh1R%3s%fs zUM)(hKKJ&?k(+nlv|TX_heSNs=H;I#t$P80f+_?V# z0Jvcj$pJV*lA7cnZczRtr*nk1;U+5}lNwl*jz`ne9=#wI00~lES!F@1UGLjP5s6d6 z(*7C|KsjBXuUEEua@%aJ7{uJlF`^|~7lU%Xn69B<;$S>N%;%srw<8QBtj$_N!+`Bm z&iQn^$F96DCz;$wD;7hAPH-Q#dA^`aX9N(Eb9d>X*oZnw1x0LB*$ZdtX_bRSknSVJ ziYT(EygbqVzLvdNQh*PIf#2~JQk0Sj4gjDAgRS{m2;9y)i3Cgpa0*|Ut}6XGT=Xz7 z66x`&uE)CkMUYCUu}d(@*XCdz;i+yQ@~RP)Z5j|fvZ+Nst>6xjrU}J_oUP9Ow)Bpl zF!<7y;AGLoZZh-q(iCe>5`#jeF&rbCd9=E}Qp-AZC(+3Pe&`_4ZCabx(OEa#wXX9CUVH}smKf&ovWT~J!6tS zEL}}~Sr@nS9%Rv+5*`aZtFNbhEz>OsRTYGKY3Uyg`tiiKNU0~4w%nN4ed3XmUnuf= zjnXgLzP)Xvgon<}&+#5$k^;dL0+i1?(D_Ec@8q*g(w5nE?U(3vrNaUSCmt_8^p7p| zS&Bd*=r-@?q*S~|U-IEmp-Bn!q<+OO?T>!9ICK>dONPsqx%7DP^X3v&Kmf~?xAi?^ zU-*W*FDb>br=CUq>+jZy@PZB2JsZ08g7BzejNj6^4p28`PP}5SXbVfG>cPiUatI(h z^!N4igU&36(1_fg0o#t5B;-9@8t}HSf*itcke3^MP71Hgij7`htuFDJ;ZOH}5}~JH)&~T5{9XiE!H( zZIH2ck&A)i!Tox?v}1GvU7XlElab{BBvfIke}7)E2Xn2b-}V|>bZ&(87`SYax?Yx^ zRnN1Yh=-7}3Q1-!pIc|39E?FqaFq%>26iRBIX}EoC9SF3Ywd=sr!6_{CM8i<2sHd`WywPwy*|-t>u=IY?S?tfZvn-ci;cgWr#G@Hlqf5%F%WuXosKMm?s7 za7url*~7|dOHV)bAUmvmuj$vyf6PC?Wc@@;;(nbhB6_Mt8Ah)A==zxT{{Tz+;*Z*s zJyb~n`tOht-I`u2+V}ns*y;FhhtI~l{{W3Obi6C!oqY**+J>tx+q&-NXtT^@Pfe3Z zz|u$4uaW%=ft~cuKa5`zp~K4haK|(dLsTRK-CP*-d|*_>%0gB5f8@AB8Z~Tg2suX? zd`BHW3-5a#!eBld+|N%_^R>T-)`J~uJ9z0pc0=r%eH=fWuQQfAH`5j`M=3%#j@O+Lf0?R$+=P0*KWvC`1dh``gA z`K2wanymXRb#JAo4EdnWQqYHRf7qPqNg!?T>nqB90DC%f-{id{MBT8CvGp(Up*-zca9b=+I z?iz6=WiwyGky1ftcCmb~4ytlEgo#N94SZYw09pLUnw|yW-VxjX0P1?({{a4_qa7`6 z1GeoA`q9&tl%)>iOx5FbH6TH!11X7a`uKPz)P`4}P7QJ6?l9@9P&_Bp0eWI13T;$!HB?@C|a)L_=SJl3lg)Ne`OHiOS zDzVhlX#FwmyT}?Edzj)7lzh>uqEdcaiMyQrIP3A0*=tH0l#i|@XewEl zyh|2fDotLt{@}QGY?frwGDak7mN>%J6LZq4P7=n#_V~JNJIUo$fQuzoO*ANsS?rN&&OXr-G_VlBpeYRjKbj$K!GNz=n zj4LI9V8n8@VSc+Rkr~PwWj1X_WM89Ae^=c>lqH=+Vm_^ETc*6AQ&TgDRK%@DOu1$8 zUlV71wy26f#~svR@b7=CsX6Is>FDZfPg74)r5N`58r{mXk_FBhW>=qVKEM1ghciCE zz$5@&RwGu^oqHNx&M8<30U*~3iF}-9LtfF(e~3OO*>=`*N=4$_u!8M z@eaqb?sQ!ZKI^;fyFEVEP>#r~^oVF|mZ!X2@OAnl=`s~FhWek=q$JD1#LYsMDneAJ zeT{ATj~T>G`+P)+^OpFfB!OU9Hdki9tZF}rd{4djqs2Rq7LSMNb{*G=R-_}@X=_in z(<%jidaI`&C|(L*PPTX{QvRPJUka(FawIiLVq0xYXU&*r&6=r1qGZ5zAU&(Mv^VX1 z54r7oZpXSEKKgy0vD@l)U5>mZrQB*jCpbe&DJF8==95dk2BTdKd`!8sCQCj9uBlRm zQVpwYsNDoGnR9q_1qy;$TjpE3$J6n@1Jc&;$5&6h?esMD_r2F{L-RDX?flINLNc;C zb08kB^?mvf;W(uUwMv{e7a)<9PPMV58}9J0El0vjvVdymtX)1M_>Z`k!kx~Cg!rF- z+junfv|#p~wvXD^#rPXq^pU-SgRm2NXtgK z6?cbtjv=^JV3pWLJ_T6 zC?kQBo;uX}lG2$eOsP&m7BygM?{0Zz89WTLGHxl06*e0DGc#)!j~~*~KMuT4Uru_E zmY<7u9lvSX>O|6nbd5gZI^D*OlyMyfT2*V8Je=lAW>S=yDa!P0vee0p= z9;<|wkNBK92NIN!$1vQQpPNC_)|_TYki?RP(ZV?p$Can)_UHi;)RL7Z`M;&%yeUiJ zBD^$BJzdfOTD`RGSjcy6$I3Es>Cdl2ATydXZ@8wkd&N_PDNAQ@RtCJQn{Uo0 zWCL5NB@!cT3|PzE=QUMdPPr*{;-j#7Q+jLGAyUEd1d`#~Ot;hX6KU&(MpU#Ak-Iqg zWqD;|Z=t9%QW?n8+6bSz z%OQf5m9zX&oufU(vMc4jHiaiR$3L%D2`yW9*=*o%FswdWTG5y0C4vs*s|BhY92`Hl zP!a-8AWLR4vM_^36el)r@`+(F7?vA?kU8Z;n<~Ap9Z5J;l3XZx_wf@cNWf5%N>oFWpMBml zj<1?K=<_VDA~lQ;3RgbY>(@{*9wK!<=bl=?kVu;I3nf;i-kiGiiDRu&asgXL@ytw| zoO*tj)C=KNU;FR+fv#eN(}99gXx531L~BrFQ%!-ItdBQ%d849)u>=evgxUMr(PYjm z#0ra>5`F!=qEF0)V|NK$1%;=%Mc?%5LH<>0>izeW5mORV;i{9M9&emvYSKhaxK(q1 z`@OubGt`s}PA~Y15=nDa9S>sBAumsrrL}-&Ns#%2E_0l9QV0N%MMo{tQj{c;qQspt zZGIv{RH|ePjkXHsa6Z^5bJP@)0T#Q~ktIYQ0$3V3q5jUy9z1nLtvb0Z7?JiHTO0DS z=M=p{60!W*g@a--Ux(GDd7z9L43xwphKBqSMU0LDY|&FOAqJmSlt ztq8^$q>UPQlxLB-ysLP9e%)hCmaJ-OidQf#Xx1|bmOMC$L7>k{)*0yPM5!v-<%Sf_ zQb!mQ>znrJa*|0Ny_l@DJIqs|MZ72Bsl8YqC}XGG-X<}L6LQ$W-BA+0Yoi~2giul$ z3`zd|BI`&h6(j*#iXLriY04SGba_igw+c$jm9crj{a!j-4mj z!xX8CMK!BE_x!^ktzeSHvjEbTCG~F16%P?vMBbo8jMl7?AAi#;>G$e~hf5U{c!;pg zy(<UQkp!>Bd#NbOsj|LZ>tf=KlbL$3s^Rh1UxyvZY$OcUXc|h@{K# zjo$3u@I<@zQdvvOFXe~=M%dAKcYV0%fAP|g0KQf89$uOlx>6H`jfpkUsk1>keej2s zc9E1-sI^;}M)?IwzIqDyWhGQB4JaJHJ2BQc;Ze0fEpYyf1HJQxI(^+iV?SERzL%J| z3|->7T*>hSl-O%Z8rA}-fT)YDMz7~m{{S&7+>1EQGE|o<9kFDwW49)0_51ZhC^L#F z>CW7ZKTxSqa3=y-^aEb?fVK5ELR%aGHQX|xeCY5Xv>5tybfwggMGK2(`gn!UD@WT; zi6YJ`b6>|ON3X9L%26b54Ym?VWk-18ptR>F7WJTn6o8T`cFbA7esOtoR+I@?P9;{P zzm>bBFV@;JyG!!2L(1l=E*h`e`Z5ZvSRJeQft8fwVnIn@UoU>|3w3G`+b%YS){V+} zWcpVHSkrwp48nOv4;7zBqaYHr zl!i%WdkWXt?aC`KB3$K5Qe8(t!zx!VI9;!+vgkIz6x+;b3oA7vDbteBN@{AY^SP}% zq#&g&3UpK;)|75cADD{vyBNx?T(2e(_rcD6ZF+SyprvxOC{#kpSz+>fFt1vB#v{!# z2`jjBa--?#$FtLtkfbOm*EY{i&EiT@Kn_9`-{s+Uq_!5!w%m|ROUqYJ9*yUxgQ${` zpuW|9>>|NQLd3H%it+-(r(_MFJx5YYwq-^0gmRLuZ!w*4Q}W+NbdTnoSgo500y8JfIoWX2mW)QP<>&6~hdNL5;w~If|u8<=zj3A(ka;|jC))ddpDI`kmvsT_3o26Ac1o2}8$BJK zqMooM;s>5f6xu~sY;u(s-Mk*T&XCeJU&f+JS z!kB0(te|}>rVy+ZU6v5Z>^!Jrha#Kr{F#X*hBK$V@D*fuYz&hYJRKruc^;6O1}R97I;)R zfBK{}utvpLl=i7;`X3&X!OoGu%UcctOtv6`l`ddP)k(nvk(JZv25!ePm214 z`I4ofEa&-wYu>eH&m**JPZ-qkD0e;1jJ!ru?R&Gc)X>rIq%+mtN6Df>1$OKq3#T>v zY;gYoVN#N_C8kR%1g9;{O?&5qH}6YR1^5=nqtUPFz)^z8i+|Rd`usXVD5avEwF0Zd${vpGY#Y;kx5~LSV4D9|8rl2P?apfL+ z>&r-&FohBn13Ttxd$ol$j(7YP@L%HoD2IwpD;~$O?)%VBDXrb={{RKs!IA1|y3#nT z(bus505s#r3-pC>=_CHtB^-wJZVUBEfGcoJ+RZqk<6rTL;Qh!LGC z8B-2oXWGe3#I`i}kA9Z;hQg&_nt-B{nV}$1vsw9b=kusZC%Ri1#fW^YLQ$$MqaK&- z)qo+=12enb`*<9nC#0fUjyItskOKkE_8Ofd9a+We;UARSSWI8vsFn*Q zE=CjIpLU5_R#z=5a=BmllTnd7(aS>3T~tNGmE+Af$mp_>a3* zr&xnkl9rXWhB@6E^EmmOXZz=?%LxHO?UCL5qm?mV{AB?TM;VRV_YuYtobPt#N{hRk zIFZK*`upduC5cV8?Dk+P;lWanf>fd$c#ShB&n%$rIFjADDsnFlDv~G}knW|npS1*> zEJv@E50pfdEcjM{r4UHi4ad!3%`7@?-B84!i%s+L#k$8IuS1v|8ds^mZwyEaWdIo@ zYu&Q)fqo~BjQbA{@d@_*yrtN8(fqmU%B80+<4f|YAulr}k1d~0wLivGQS}MjKiw%j zLTzwxy=~=`V1JcM3E(76T(GsvB{j**J&VxSsg1$-4cN=R_?zM{1Mamnw0ln)_+Px7 zU8jyeATXDC`LUmb(CZv~7Rsk>a?I zru}b$MBlQKhZhb@g6*S%Zb%&Br{SHyiFQ5Tb>Sbv$G^V+0KT7hrQF`BGedmjMJiIJ zH9}EzUt4Qjo+pOk_@uAw;+BjhH2ze~v(@)_^7E!o;pfibmPF8kK_!SdO9Bn*G`E~; zZ^bVN?z^7~?t8s1)X|4?H+OB@Mk5(bA)>O3mReO&^ILB`*RKBn9ODr#awM*9GcL+e zIbQT}e@z5qLR6rwNjF$lV2%`KP#5 zcv|%9@1NrwQfJ6gP_MZ!BE_6vr<8n~>e7`iYB2^=S5HpISkry3uCHaU4QNS?u_QvA z)-zldf86WS&6Jt)l!XV+^|T=>a#E)R6(k>9kJNOx;jiMyiTph+9?Q99ui?6qgf%Cz zocnk*TqTuhQEdMJJhd_H{)zrYH-;#aHAJDqDcpxF z?Q2lzbdS&xG{Ne>lK`qVOS$ONqPWoavgnju(0Y%*9Yd=vM61bv7$#W#*(X#31)Wy@kpTi#& zb{+R^@rQ(WU9@!JKJT{I@Q=yV?zA-|EC*k>`5@{?Pji-p_Uil>6UKcuY@hwRh!YEh zs4js*k3ecbdyxon+ysg8%9SjoKsas9HfwJhkHx+o_>;kWH&4BnjrP6ggla}Q-LK`( zOxNvWx>3`HzMhauQ>f|gOc#{Cy_XI3FQ@TyunrMYc#}mt;U_X4oh#NneCZS99}^5d zZILX0s1x9i#orq6e;V!dwRJnQweA>c>+0xl?&B6u}4%a6YWppG&Yf*rk0kjk^cZn5|!MSb95bIO8N&A#PHlCz!xnt=mJS&qk?N^VNYn+ zPaaCZDhYOS)dBNtvW>Iw-{LReua0~&&%f>bJK@g|((bjtJGj%=?{xLMqFP^-+v)b5 zrk12*qo8WVWvJUJCAD{t#r+TKd@mOYTx#!rKMC&4>z-&64a z0K&gJ!(m!|wyd>#zU##Me&QiLe*0c>+oVJyN>IAGF1kin`0p1#i(1q51!0_OaDWg& z{{T@(+4)5AKVJ)yP^pR`p9`N3mJ}ImO24ECBH7u@&#>#3*O zc4WL$wCprB1`lncrQAl#^8BH-$kEpS0M)<8B+uZaaQs4y%nANQkW_L}%8Y7qykzjd zSem0T1e5m-60Z|wr80O&_=EU?_@VLliuN7HhJ0P)9wXiNS`zN1r>orR_$OiE`jOP% zt)r(66g!kSJzN7yDQev?X%b%(K zslopMkI&&sq$SL-!vFx2LMSNJsk~q5oLAJo=tR^wQidm}APcz6=|_#9_=)j9hC{H@ z@mY9*t>YTHdJ&nU-2VU(9W6~WcBZbbjAyXY8Ac>6YFN)+Q|Z5TQ%?)_+CU_V0Zf28 z=1h7HBm@t-mL*jnvB+Jr9{I+B@jo2+U&nR7^*wI)x|fP-X=`Zrn!WF9quO{>GZ;nf znR%uT`=c!eGuNb$KBdB>$(1MxDIli_Dqijb`qD7ClyH-#j0!1ItNd9n>P<5gieH3y z--dP`AozE04#<~uN*%{>ue_h|(QPqCoMZ+lv(@x38jdP*4Ed85=w?b;-=#}d55Vx_ z?kZRV2n^c zF}ZP@HwD8^pEVM=X@wS1QtRSpAQt(HO_qSHYe+zLWQs6$H8lA#q`X7E@Shx+{62=i z=F9_2^EUoeb21H|D{Z)O$aUytf5_p1DS{Y(V@_I|VjM;-Hrt#(tvznY;AQcpLPVA>#*Wshe)NFO;?=@R zCVbMsYo&!MW1N05_|LldhrWAV2}y+K#A78%wv-r+-F^D^e@OZwI4Mb(vd!(b`I_21 zN7X*Cc=i36NhKt;E>AByM)Uk4{5sO`-5no@yj!-5+{`D~cKVRFMiMt2)}Zq`E;q-s zU3gFPAM#aAQvRL6Omtdefzp^qw0d9h&!DbK6UFfo@es`StwB7VIy+Ojgf;;w51Hji z%A(1TEVyvqZo2toxj6Ba8oA`+tz9GE%$_BtQc?iKElcO^Z&<~YB!APAN~b!OU zA(WPE+}#e-C)3vW>4|Al$toC$w*VtS+`cUHr|R&anzRK=Si~&Enj80Dkqajx!Ag{K zW0c%oZO#(^0Jl#hDAhL_WfTC6N>xoG82P6?lZMxLnsghtOBX7#_Q{U$4^tJ#59%ptQBg@qIH_$vKDCG;M-W)H z+4t+5E}D)Plv^1J9Qsyj{-?K2q__tQZI#-+-Y9{Qp-#Kz&?JhUOO#VMWZ-X#uTRsX z$_m0rW>=S&q+FmDP^m%kfwiJ$D|u)}!z~!bf8V1eHYB+{(d!A%NyZe+k)Ha(y?MZV z!*ng@c-C#K-RJb_l%+{Hi3C(@*!g%8)hswxB^@4?*{cC-MPiW`6@XpDlk~{v9DPoX zfKsMe&hM9grm#tp)RcgPumhWPy*k3Vi*g0A5NaY~!oAENUYrh=#7n(3>z7ynW;Hgc zJ^uhu7OYM@!*RN_F_@$5E0?ROY5);jL7yhuc&SH#Bq^Lb@~6!V1twRG*s_EgTo(G! z=hJn2bs#+mcLDORZ3`c`oCJ8#hc8BJQ}S9M)J97jV?5!-;llCz^h>BE+|W}`n4;Dk zDq4I~FV>dN+7tIKX6~1yWL1`+Nm%;cYaDdi5D0sbV)bnyN!ZY66sEn$SE)Wwm$;g& za~jP?K9Z_2>C5)%ga!cTzRDH#XM!hpZN6R2o(j7eEs8; zoIty>jXxCkh$m4(vX2-n##EuR_5C_JLBdWdcHH^E0@Q#8E@1X!3L4r`ife1~=k3Sa zHPn*s^(H8w6!{Ts$cS}IIZ$vIMXS#ix1Vl$x>V-XF+)crzeX9k<_D}UnOD!JE$wYo zZ{HvNx6`H)rvMc)N3ZG^6V4>!Q3^lmA1Y~fk0S(>Z5H7Qye-<$V-L6PFZ8c^^y;J$eBeq-rI3XJ20%V~=55e5?Gkx# z2qmO>&#P(6b)G%Cs+#0H5rRQWHX&E8OaX#m+)bi#Tg{jk-~QZnQ$SLA)6O|08AAxd zQ%xB8=n?Rgaea!N|XV+o9I19Od0$lGL0mtEP{aK3&ooY3fx{M8fU%M;1A4 zI$mNz$Rs{3MZG<8h9!_HP9QSxz2MC`kpO(sx6T|PdraAd_j-l8!kn=J!o~Nec7ml! zARCSH=?20{XUtWXRJ50O^5pj8q{a+Du}VSy{JumqtRo7Y+*?EXFvCkw2*=r_svdIF zYF#G=I)#7>fXO}diz5P3K`y0K@}U5CLh&~3!>PE5JFBY*jx6-XD)RI&T#y5rdcg=a znfEXPNN1=TetO1m)QNj;t{}Pjsv|5|ap{ZW9ay+vMPfw6%X}(upHhALvlzouQI*0* zYjDMWX#?oi+#k1ANIKHR`|h#In>3nB@eAsIFR6_5&Z))VaN?UREG17pVgU*HfFjXXkBM~aVb`;Vf)YFlgDNEq7ZvAW5 z_r9kP{vg#gtC(GE&Xlv8J+=oueBwD$B7|7H4M-m>k5Ctkd%ai|u4g{)=M^9*;jlUB z)|=I>lwl1rS+>HDD~-wwWhWA^bBB(OrP7Dj(gdk$!kh|eb~)2$ulErR_=!t(jOb`;n46kIJUo34q$@E(4_?|S zgpf$_etXt2a8;FA4|9nX!T#Cfs2}X1lW#-6SQ1LcB$Gn#OX=lU7xNPi0^tk6ybs}kt}x6#_a^7{OIQawa^!U3X~sMaH$#_JjL4k+gC zFYndaE*j>{eN7#^w00{C1!inD=gZa?Yf3Da2$juN=JNWPFNXRgwD{d7fxmaOMAQ6I zl#&4PQz857XjiI$A~qEW()%g(DZhT7Ng$N7Fn{m*v;-6+39^;^s8e(5_M;r3X0D-Y zcSS;Fl6Ffp)%~8WmjZYI0p-+^Q?fq%YQG7}5sXBga4HbL+_ZIq;sRarwCe5xdv9H+w0B*Ep5)hGcky@7Y_SW#Sl&Y+d zNdS;(Pgq0VwYl=8Z6g%5p&b2d7ee#agn&V+v1WY%?>JoemgOKeo^D61S2gtsWv6wl zRg)N;7g@WPzgrSzgZzmEQ=fis7nG2ifaGaz$9X`KL3pYNVXQz}@6*x#3 zN2kRaC)0fREX})YV)Oq1+hA)IT~S2gBR>5ygZ;t-0K{kI47+fW85OYMzI`${&$sK) zW*i~i(l4*H9V$^FF7>2XyK00IOlV4}K$K)YlG>=0zP)EGVo(4Yy-VBLo>0yOp&+a{ z8X9uj)(rkKP>e{j2uk9}-FJy1wB?tlufIV&FnmOchHm{Jp-eyPNfn43wx5iANC3oU?ZwhKV%hskM_T=Xa0<^*DUoXC?8T zxTKR($?whj#nf1Ymm`%w70WXRM^%tUEMn2R8jDH>+`lw-#c$HjULZJNm5d<6>hYem;82D{gT3qf}x#vI$9_1d*@F} zQbQ$KPCys$Nq;7O_{T<-AQhyMM6-L-eg0$bA4=jCCx=316OCrsH7}#anE0Q%^6NKq zV<1ULi6Y-8sQj&Z(sk?poRCPR4Y@e;W91ni_9Bub^;f!olc3X3Lg-dKmc6)zp%rMaz;J_w(3u-Zk%vPxAC@y{xLBU^WR(YZDWbT2;7*Pp-Nt+^7)LVwvrS8cYB4fR>L zijWgLED0I@spq}p%wk&95-e|%@3`LdiZ^j0 zT9!5?pQ`@=&(o%qT!Qo#YiZu~jaf-4Kn8?&>j(Hggu9OOOHLVQEwp9y{!=y0{kjs= z5iLqJV1FIb@zWULOF1M){{Zl>3)Ir>p@}awLC*kCjyUK0^@BEgKH;bw{f4#n$}Wjz z2{?RUz3exxmL6gm>de#A1eNLKtO{6H`Ii3xez_?QR4%sfVcyUdQ6!~6C>9m2<@ULQ zJIzfwcxHs)$9##hCC=qy$M13C>pc!xA9$fj!V{*OwHrL*Xjvq=d--?!ip0CAX+{q1 zgohMX;z@Y)s>XV3N=lS!1Ner0_hYFZ>QR?u_j*rlsOS-u zKw~)+97zs(^Iuv202biq@PAa8t{pAKN@a$3!%#`ql)a;Ofcn(*@f;Awr6yARC;tGf z3$u;SSlxP_B_89(yh2^nH2a--cM|T|>CRhWuc^J&b@jDdj9^KU7`XjP!$g(;0K?(L zp8^t)mLjAJFc)@UbgRL{`AFj@u3^NyRIMD+q~7njePJJr`0s1oYaNc1W8Zc<+er61 zdU}D`B}NXK8H`b9{%!UxWc)u0xoG>u{kh0@1dkT9HgQ3u3T*!XytN`?aV3}$mcW+y ziyw928hZV=WggE`G3@*((9t`N<6CPjUgmDEbGt>%rzNNd0C04St}#ed;;{24Q2UcV`(bKQuUmIP*3r2L$|h0*6y)X z%qy5eOQpbLVTQhD(DS$M!Xngd7}Z)zBbMqv?sL);cyi&1G^_2(9vnbQ7L+W7DT^_! zd%QFJ{t`nhrxCWy?vDUpKAbnwWgaCsWcm7b&}AthE|LiWssr?ITSu>PAo8nqOs{Y} z?c2v3`rjASr7ZNr%E!%|Yo3wFDwL3M<9ar3b=Uf?zdgh@3A$3al0gfz%2~}L@Ac=X z66OUInm;1r@#s0g!hl#R7+jYC4%qqc3w8UcG4sXSYZfhTrbL>P<&CGI&79Xx%9L_r z@F{J^eo$$XQ-w*Ak|ivfo02a|5F(fHhkXv$z`MThRvJClhij$X_r1?+t`hC_wEIrS zxb8nMRyGWOGfb23vm!lvU+`%rZ}|@fg#Q56w_rs`as%tHo}xVW`3XvR5~X;ORODpf z5(9J;tF&=v;@8JMIpW9R=V#+_)9w2&1^hkm9>>FbPS- z6>iJopAhW47CpydtEr_WbTv{*r>hM{5Oj2-Bg-A5ztash)u(+vT+S+DCJGvdIqOW$ zL(gl=;ukJjRUi^mLiyq~=E9~g-UaaoXW`xt+-mFV=<9giy!8&=9lR$kPRmmC$#;6X zkQjrbEkjIPlac}*V{tqp*Tf_x1aQdyMNGt72psQt+mx`55r1%lFq#YDt?RI)Q2VWU zc#fX`01q|f_Z{Z3u0|WQdwFQwAuTvS#F)vF`meuQ=mJ?HXdV!pE`O8me>9A>%tXYa z0*(S)=nls0cl4xMv^%Lo;q5OE)A0#ITfBz0uZU?%0jv4Fn;jiL;b%EeYe!fl$0T5$ zoo3*}#wv2+>Gtgg7KimZON_6*O%JKTmj{Qdu_M)5{p296;3_9>@OW163~=^g@Gdd??~dXrD8Na*hjj3Ck1R}6eaE~c(+Sg2CcRFPCD_*#qxwYf0D9n4xuTNUOl!Id->f~z&@ z^yzabvyjf+N8$441T!VM7_pN}A9k;?f=zAqs}}b}6awG>02cm&)_NIBP>R8mFad;y zZngM=O;&goO`ztvO{Jb(*Y)@6g&;f7H)bpj5SQ^2>FC?MWJ$WDthDDS6)Um7`Oj8k z*!{%;HLHu=xx|LKRl5ARE|#wL&aUc3W9xpMK}7=!TP~3f2_Zfe8+ZBr!4d9a$c|A) zOkj{An{e}2w<*b0)ERCGv*hJ+|v>%VO`=MW{h4a{S{-KDisksFK0 zKBqp_2qb_knzp=BY*?22`ZzLS{eOOl zP?{SYk0^nKOKexuzUuLlsl3|B;^Vi4C?floe}8_g znI%*^9QsCI!~+px`SIo5Qe4z;>e_$Xs8R{2VoiE=&y*Qc(cl|^`Mzw?o2_+58D^Ul z%T4^&dtfowBrsw8jctDa0CCf1iGT#9k}UPl%cJiTetcIATjiBid;b6{d~wtaY~*BV z-96)g36PbkPPJGYH+$^`XzNRYPJFW<#VSK(w^ix(<2?y<7>Zw?I3hx4OCYMLux{x7 zZ4GpFok>yVEMmm-ScH}*HWJULJpq0YE;V}))cnQeaLGt|tw+deK+U4Z+3LsSjBE1E z!*xaA7c#kf^M2iB%}SX{pvB%( zuRi{rWlT!~NXW6*nT-i+B&7hkZ|_E}vxd4_pcE$wPYPtK;;^2_N-9}VE^h}3QK()m z&Uo20Gjj#!x` zE1*|6J=*oNp%jK-81J+9lwM9Xl>noKH72yy)#-kb?w@ifRmv*Jr)(*x$zBiv_O3eO zf+#JQzvdxfl#-K-0ORr;IBy~#y$(uyRRyA6RX<|-NpedSpC`|5+`MQ=;)0ch2`rg93#iup#7C7D1otN{O9QniHPy|ok_TA)Uz{m9`I&|aVSx? z*7?en<+}MopWmK?F*$`Z@_xVFbTCFUFqJ6F2D^@6c|q{*35;AcvWSUDoWD~%o`Z*= zlro*c78JjiJmMw*qM1rJyLwb)+VX}P2I}-lTf7LySdl2(OlX%r__63Six)q~v7Vi@ zN{8C;hGcMDK`)pLd+GRv9mjES zl_WR(?a+hiA|<&m4ih~&E=W)E1mQFnXW9IssFtKkDJ@N^HqdJdr`*MtnqI3Z91VF} z9#fytJ-Td3qk%!K`_PQzl9qH^38gX`n*efam>*MJoHkT1&A1bKRi)jHk>l+3DMKp| z3`datZ5B`Qn58Hb2Q=8;&C=aq8O+KTZT|q&+BZfWu0pZ2ogThLOimfE}~ z?mLM};s)GdEh)@LcQ;|^^y+2d0Gp30_oOE^YY8Qo7NOR?xblT_fh#y9Mp81dJ^q+q zw?|1J;uIkJ_f6m^1+ghKAm8x->(|O{XsEFwDB8)8HYYdwdUVvXNGb)CqrbPb5h+TM zhZCH(<=eu|ORda^%_SYpfD6dcy1kqaJva(ShxuD8{0~?faTKj&B{QYcw;*|WS^$+1 za87dO+NHr5wz8t|)%4H%1`L$hg?isWW{QFORQGAPg$P9^LbW)sGTnODJIf4QK;gp%q>6d#(F47!av=`^Y2&<48jzW5>5G39!Avb18ZthRwN4(az(Kn ztY4b_`FgyhA=uH+Us3B3Hj@!jkO%+}!15zMdeRqaYCCh5zDYMJB~_An7a8=%I$$FS zE*NdS?RVGO3bGJ{kXZy+nv(gBc{eCutF}ydW?0(RN(mMm`hR|`kk&4Pk@u(LXjqVt z6jT{p{Qe@r@JEGq-Z}A?!hQ+g$ch9~`%ep=w}<>a+t+IpVWp|z`g*!>(xKg} zsW7=cd|&B*P5%IkCxM&AtgdvHRKNjsEFnu-r5_bkZIoT^`Fgw2?u)GU&) z0DRa{zY)dXjXx0Shl6}G;63zo`%c^8-7e3>i0Ma89mcHmJ8tL1HG4f>X#ARe)FBK~ zLs26cT8IAt5aCny_>Mb@Mm5ZwREoI+5eW*_#dEF9YJZVVd4^Q7^4kiI*XY*t$~f8V z`#$f)bu{~kLPvF_IB4pUmY$FC8c97U=*ke2B0%|kq?|GizN)FyQzMul}3JlzyT0J~b*-;lz@sQn4l4fjTuDe8-Ug z04|)B@ccBi;X-79kVVLPlbh%ctZ7)*AA>!c+jgEUtVZL%!~1PLNf}~kPhU{RXr8TO z-#uvm0GX{b=J2R?{{ZAx7tO#2n^mCS;d0a^&zOf8h+-eqZLDtzYQ`+$Av*xcTd`M7 zD!=yYz?2tBX9p*_9yT$r#21H#uMAExoZ0KGxOsRH%YY z17**9cjP%HSemd&NFT+3ey6&`G8o3Snq)2Cm?p|FmHNmcdYn`B;8Ilb)Zk=w6(gbk zp|7|KzUC)b79S<3)p4Jc1F0R-mzubW5|0$QdE;qgk6iM=d?|3{TYCJ!=Y>p`sfaA0 zabwRX+nhnG2%Ler_HH@BA#&7O&1U+LNqW?Idv8$)CR(R0Ak0b}nip|L_3qFu=CPIe z%mjyv{{YKf6oAj8w*Bb^nky|NvV{-8et)fF$Z}kQHhHMQ87cst&%2y(b$)@)5 zrcq?d31uYVRm%qie^+j`gES=nJ|`31N^x3`ca{DJP2iQ&vhs z$t_|TIaEQ~N>5FuHkQCbJ9BAD7suN?;YGWtteV!Oy|nZmk$GVU8j{7{`FHGf5U1mf z8TUR3+h}PdcX-Ex!f}N|^CSFFvACmaH$P9)t#9#FVfwO_Fk(=ZF!CiiUf$V85BV~t zuj%SU(L@xGzyWXw>N@$x?D!wTyieh;#2*fXbo4a)UgxpZKRQyJC7}{3cJLVtwPhnK zX-d~i{{Wh&hvWW)wJC0-EhGwfi?JtR=y||@^!JZn3C7KqgaQgwD*hDmH|v&BaPhAK z?KON;N5ynIuG>Sy^mH|+-N#3`J6`_)xz?7TP7#!4a%CsY#kZQiy!X=h*^>A#__HOc zbDbeBF(Dy`wZ?|5@vZd^0$jHlsH^=-vlQO1(y*3s@U1_GJYQS7@ZSs7)Yk2F zw6x>iI<=wO>9Ura7!!zVvXng1&OZHYB4-u<06&C8z9DEzR0+ZbN%bRL4P(afasqfM zlm5mfhX4xzEHWVGKN0xZ`0JtC_nP{h_Kn9fUPyYai zu4I&^RLX^bLC^Ttrn;L5_{Z1M7cpunXD#`+ePd;Q2mb(vKY_m!e+#@<#5>t{njaL$ zzwY~P-@S)(w@bAi-%nSx)cz78YQdbQE1pA+yvO;M{-FJ9{B!)9hv8)*6F!zvEk!td zO7Re}ionns?H=p=OaA~*ewqG5{yoHTYM8(M%ftm)DFKRD59H>Ru#GX}zlDDr{uKDB z*nCIe+P&Y0>Plb3c(-Q>_Z^ROrcEH~${KZ}HX$vt$$a{C?tY#AP4s{AUK{T498zV@ zAUw4)R+D;Gx_@!veyRR3^*^BTDwoB`P?TsCkm+Z+IXlJIz`T3^07uf$@BBBpmW(uH zN$h0F(*l_~cg9b?e@?SLrSyq>aF~hGoREBA2hof%^slV(A5K|mmTc@smALYbr1&54 zPr&ab7KC{rdRl*MG&h-V9Ec!^P(msvdA+orMN6> zceZ-+(!QNGT%@mvmbnb>Lk8;6zd!6x#3f7xCZIh<2(#r4{vY_~x$ut~j-QHlUK!u^ z@SF(t{nSZzf0bmV+sKXV9w_x|qj4M@x%?qt4>@v{K_H~~p3hvtuJMp~c_m>J0GTMe zg#tX8tn_TmZyxCUH~53adv6o$yf?!91G(0Ql;zv#k<#$pEoi`yG1H51-9;sv?peCR zk;naWh2iFK)2ApI%2q&=>doS?0dHmBWQdTj5mO`Rf7)Hr~&li~pc zh86J>=y`}%e+R=z3RHki$#bjLo#n}o!87GCHZ`_+t`%K$U6XLpUM;~qcw zXW~8fynI(d{tLG7>1cNU0F?IKoV2AfQqVh%O(ssITn}|>y?XOJGQPVmT(9`=jcdd~ za^O(2@;8kM-%t8tf|9AhN?<__2yae;D}Ec}pN3xx_$lH(9k1Hyc#K_H>Gt~i=Bzu3 z$rze(lr9~!5>b??k+`A3)`a=LVQSX=sR5I~a1z3lCOH;z{R7lL zUpS|Dm*Z!Ey}p-o+4v`6;qvV@nD6X0bzMz;DW~RXPI`_s85xO6Ieng!^bR~NQs(hS zVkU=TC<|COrjS{S;ieQQNWi4!TH1yAc4J+9W%!9djAz1(~Nziq3f`C58fO#5?B zMiM8ZDd}8eHZzW7*;cpKm(#wV{{Xj%shj@*a%KZ^TpeqZ`!p-XaYU^OLVntGwYT4X zT(u95d~f2u2d}TG2x@mds2UnNF#d4b%^SkbpELZI$2&4Umm`ZzwBiX{xiro0%x$D6 zGmccEw6P=jmgSj>lzuhU@tMQKJWI0Ik8h_qI(@E;rtZ~@s1u0640MBbsOQb787{wkbyN->RwPSHVWBOaL~}QWAB&z{AQ49dvt`>u4%b(; z@J$_05bt&SO)XKJW=>|K5<(D!2^Fiu?Tqv(^5$^`GG!%G1uOs@iPKXJ@X1VoS2Uzd zy-2fn-6KN$dHA8Fqpzu}{9kVkEjX~!sE()RB5#Z%{{Z1C@m{{1p3CTevIHCsONzH!XHG4V%={8!!nPiZ}Qy0c*z#w@2H`AQ2_#Rc{B zUI*!%FVf}x$*D>bo4FTk`EN+@d~eh^kEqN_QVNOwAbU1`vA#bHzX;{pM@z>(DAGSP zA*#5xZFKBF6NebV<)+Rcm`iMlMA$V^N}DCCi|_UIyWp;%fTuwfOY&>B zT?8>IVr9Cp;BWP3B<)K!REc#KcGQ%_cL50G5klmHJ8voI#uj|2As1t zT(ycChH4J9HLbIObtVPMZBj#$T0@TaFLZf zS?QeqoiQznK_>`Kx9PM@)P$%IkjemsYv1PZ2DQ*8)C>={G7ZPe{{VdSbhs`J2&cR+ z#3kxS@ylM%>HyV>k_C;FJf$gyMK}ht$GbGe%)SLNhO>b0zU`V0-2w2DpQaL zePLwh9Hcj|mGc1dUOt)s0F}|O7A$Bp&ubU}p3Z=m_y<~NpH_f1CdM<*zT5`v+7#uh zziy8$AgBQ39PQUXNM3BxR8*v}0*ozseC6v3r>S?jjN=lSZ7{9xuU|sFYo?j)O8&fr z1Wi)$k})lrF7>(c?Qi+(-^0RKF3f?H7I=`^3+xdQp#6w?De79fcNPV z!n2a>;WCG%+Ids-dZL51XasUl${|Ye7HtnF{KUXfYWrj;=CkXceyRvJ05ls5f&$!h zJtBQHv)gt@k6R>uztgG`Z=6^HCO&(-~E(uRyKTUPqpVg+~&|7;T?H?aGj3ECnPpkqmUxAc{QN2Rn9^ zfb)N+)e=-)-wuOM%rT6GVh%xkocTd;K$Vi*0~v4v7bpwQjk;&l^)x_-Zrxy?%UurcQW=Mt%Xk<8Dk)&g^w9V56C^>!VzKu3 z^u>Ge_v)t;hdjr3c;zKXE?A7T<#&NK9B<90y9(zA8gZq)PANe((PaazPmu41G{{XVDTMAd#)6N#^ND3U*1@)gN z9F0?t>6Zfq79Jb-SOH4Zd_y7)2(i=9Y9SwetVEVE5H}XPmyEQ?PJh2z96AXgJ9})+ z3##O$C&Nb%yS_~Nb;>K6^Cc#Yw$oTq#cuVNtB+2$C<{v zk3r4^Wn@yRDR~Y^(^r$H2&HKS1%ac#ZBKX}YhfXH+n-YLUbk5FdNOJN6$0>9H6fDs z9=@+wA1{|G3+6r3HSb=ZUapc8uyF=TfDALd4>1~QHiqTGxZB2ZaQpORkfWc6YxWFI zB;h=%*RFn1o`}L#QQc-Dwnc6uW+vsMpMJSyDL9yf^AH5r}as-5E0TQCJ#l+lo38lI6`syX?JT zkTC!;IY@CzKf`C3jLzZNZV?$s7KaEQ%-64{RQqM_>^uF(V@gR1TNP2jp>}?};~&ps zmPs5O`HK6rnZJH>!PSJId?^e~^Bw6N6EhPjhy)iJZgqM!;(y|Z$|6coil{qV4Y3@! zrTd*xQkWV5qk4C3dBdN36vQUUPLAc8`H_2cgS2~yk%Y+%8B>MDsboVmbM(H1Wz}91 z2m`mwLkgKJc)=_wt!p4yVB7^J-;kJjAvH7wU}-M^?^U`)nThEUh! z+WwY_Bdi{Mtal+4mz|voEpn!B()sF`9ALX$g&WfxWEE)>` z0GR1@l$peff(MrQ+{e5B02$#FCUE%D8x@W84o+QfNl0;(@(Aw4U z>CakR67jeP5Z;&Te@OdOnF^6D1k3RdNG=X~Y+E<$8YkkO>++Dp~+b1heO%y}m6TE9>(X6E#?v0i8)Cv2OhYXkQW6XRSTOkz_*|L=so+ z{{RlX^pHffwI7ihwde+dK0(ILnKo$#peedi`o$B*^-s%TDGjn}#d!5H8Rhip$p|HA zBlwRlf2#g6c&VW{oc{n0XQXRC5Y?#5YUFDeO|)%!3%}d1MZ(Hbs?Ue>o>Aa_t2F{` zd>}hi=Kj3|QM^Y}6Dx+)aY|tqmcLu;ZdyZ=pe=nPBZdV^Ni|aI-|8z0$;)}iP*^fS zcDBFVYR1F-Kk&!B@xI()WHz!Bl^<6IFYVTE)TW6XAXAW~dIsD3i}3RP^x%SMI(K@s zcOPr`e<^reJDoikp$e3vAG7Jj$j`lFuLPf}1x-*YVn_^n)WPSC5sKR<<9#E&zKG%Nv^t%{{XWTSG(4R zl)HUPAqHewHA9|npZDpuLRM5NSY%7`zrEt7U@qdhH7fm>U9G7tc}5&w@1uBb-VgWc z;NT#r(CKjXYx^CbO9o*800lQLbM*W)Ht?T>{8z>GB`(vq)R`v?V4*0julZZz{W$mP zRW@1&{fYr9EzRoA)rw1y;a_n~K_Z3RZ;>9ifxLI%KNRdVrcXms64Sj|F9>^X=6ncx zHuUt4B2wrGbujXHq|O;kN=`3(c5NEJ!M}^}?}@ujN$Jiynmx%W1u3>f;>NzA?St*p z9AuxnB5DA1DJ@*yob_k4Fo}}>+@cifLV?nwBl8^-r|~C$-1dGb=x#f`eI^q~GSr@& zq)Sl2QQXGl-MIVp<;MdqM9v*6tfF5msxz?D)(*85C2CUwUX{K5GKSv_YwPHCu%C$Q zYielg{$vi{MsSX%jH0uIXBHkg7fo*w)9!VB2gZ*X}g_Y3jvqUAh@b;VX<~B1)4jW@}7Q zQ4VOrwsA+kuMZixsEP!!8G=S-^{>oZzx(KyW#Rh2m)>_1)z$60f8w-1E?S+uXRE0e z^%`NP{{T+S%E%;{>nR)oT+j@#mc+%tEHtq@dBf}CL6q3BVgM2oV@-Vo9pZl#_&1I| zC*1hL|cmDxM`@Gj1H+`kZq<~MK9rB9`1e}?=*YO4(0^)!2TK3+YK3O>ZY9Z zh)pR5C7!MO^|kdL0UUg+3qcB({>)r}3xfXMP=^V`tA&J0ecz^K^@(c+nSrbL- z0b$aStM?Rsx5431IB>D44%TCE^by#Q?xi^CoA$_$nA%1)w5k&lYnv;RugwaU2~i^( z*wx2ZYCl-|Aeg*KSPr3?$?m`&T0uR&yCN&|HL!_92&}T4;V<6(`d)Ofkk08BCgtf) zTft?8lCnTj$#5Kc3wF_9)9xktan0MIO1d(EaYAq#GzR^($P%PRW%XQ0fKnm32@ua`JxSw;dem9TJc-c*AB0EwJ@ z)0J5%MlzzA0mL(@o;Wj~UVtToKpX>;{F-yDN+yrC^BgFas0>D07uS?SsoqQ?MsqH! zY?zKQDUr8z2p;dH^hC%@lAsiK)MO5ioLH$U0f;YATlc7-h$YF=6KB?^YBsLhs~{G!tr_MJgwBn^DVQLq015hJOu@YjfTh{{O znW-)z5Sec{_Uqq&>CyoI03wh`@HLw^4A110Pvp(*P72yQ(Iacrj%i(31}u<*pD23n))=UyfnTntsoi zz?z+lcS!lS7_{+A;r`HdOF~ks++@c-w2gh+$G7g|tD)cPPe){3O)WhM%#5`*hL>$S z`DnxLk3BU#WfKsoNDH%;u*{8er<8QG6)2+-Nlj>TV(-{|<7|8-{{W_Fc&~2vI(l>M zH2c2A?lnmMW}oJ1=|&JW`*}#;+eMtCC;6p-dhc_U!?c`{kzMi(MW#x&TDJGkW zs*qj1B{4il7c+rh+$c=63`tdA2(A2sXAKEFJh@y#Wriyx1M2;V*WMx7Yinrh_=cXV zEloJH(Ctmmu9lvgw@wh&{(VMBb9b8Sc1+n=<;hwCQliA_TBlIi9IY73l`=ra4kC{b zYn@{*%R|Ss{6AN|J2@S`?KpS3hLb&VI)NQ65o3)-gqeHQv=`K`{urEOCVQv{O;}Kk z4TqdeiPM%QPMCs}6XGpU3AHZm);BM4@h5j5!cPtG_d`Rq{v+Z@Ye!2x65=|VCKnWCJ)sImpi4wk-DJe*G&7~{V z>qC0&lv+C}zrpA_vR&|uu5GtC*P2w+c+aO^1Bpv2KoLTDwU;f5S9QvSTLxd&#@A{$+|YiB3YkOiWI@kdc9dPgE2`e z6+E*3pkS#kqLxm%X-|m4UDR)MsMu$gL1id86ZWp8N-h8fhL#o6f1P5YgTx7KhnGmt z_?bRk{#7bWouFeC&&&rLX0dimvHYyv^VY^HNh(OdN>ugkyFn*&2*lkqrDBdN%Wc!S zA~btvs+mNwN*se)d254o zFQAD;e=}w+%VT|_idkC~D-%$Ltt(%D+!>|Z2h2)Rwq9N{jNh&Cjz6f%RL)tt-@fS< zQXj;U3yl5*5j|2ej6?}SK5c?6+(Le`v;*tw)lvyaBpo;YpaZ}$8Wf(sUcON)t`Vop zDCr#*2B zu?%nX<-5TWUlWJV_AePnR0*y_4LoNbO85F*UsAN10Z5|M!x*dg+eT5;!F8DrEgQH? zytn&$b*#d`;8+-OC1^-PiZkpW5BFv1dZlgAk@qZN4DQ9bjU&%D2Jk5?gtW zIKHZ?f&i%Z(k_(*xBCtA+bD6Psyj`|CAn|_jUo+DwZo1*!lbnb%bV66MAD>{qUqA_ z=h3&UKkRk6^ILm2Nr__cdZ-VkZ|l+%l8j7F8an~Ceatx^V#1{yD^ghc{{T^B?X}pv zDe_hA#!odVd#dl=udJ!^(ncG-b?=mD$qWV&jRuc?S;I{|ZQF8jbBaW^HEJest(C_} zs!;%wMC4)MlqCoXnT2U25w5v6q!*{DB8A;(5-p86e``F@slewSRNyEDDN zaWbY%mIEWhdX1>sK5)hwhw}}Xo!;>U7?Ma+8a3EU5}`luLu6yLbx1k^G&i1ufoCKBDYun-CLr8)N03JxV)q6Y8^x{-2fuC4u= z>4#1mRN3Ftt^f!@_r9@Vpj^9#JY2CVtuUPCkeSX~;1Tc24 zm**2OpAbtW^Y7<4RjEzTjqYs{6jil~#y|OV(hE>2&7FvTRCrjU@1!7-g$viqXE&v< zNDETkyP}e0-tJAH(gS&oefj#8E#m;Y1|DZK&MpGfscLspNuktbW^3NLyerkzS*?Lc zHm#NhOWpHV+m4w_GhuO`bZzMaRK*3ZVt@k7=a*&&UGlXu@Yd*w$~9PDYy0(dfDjY_ z#qX~;<&_$xI8%Cbrtz?U340g4{7d*c2A;02mu=&Eej%?NG2C{(8Kte_ea5GdzsrW7 zYO1vw-0<{|)YpgU+)-c^F&G2c)6NmdD%h!_)6?koxP16QPXkHxC02KpJ+$;jW<+^8q&QDI`pZs=1bSkcJG~y?SIgc*N*lCvjVS2p$|8>1vQoaYKg1@v8hSm(q271el8Wi- zCvU5(DCtcjsDIMZ(p(9M^3m7Su!-wkLPWG%P%Uj*tVdYz98y3DT(DhAt=vA8qaAAq zd!EO}JR8P49}w*|`?$t>`uk0qaM9Huz}Aq&^U4H;+fSlR`ep56eLuUt2VL9pW?*vO;3q@B0cuE=AI|19`V(6^>y8CPU2c| zCpqe#O}b{Bb_hn$E3cq`>EPj!!0|>}8FB$lfMywL^{q`K$NvD5m8y6{cu6MbUHrZx zf5V9X01e>1#+l@q-pfvLM#*XDXvCbe!?~|ky2$?kCrj~?mK=hTcOa9MM*Bym{{RnK zrSP+ivw_q`y-m0N?Xa2dvL033Mw_NBWq7wI^y|)GQ7I}6)hq|Ed0sv0W+h1plrT(N zj8uIpMz;@99!6Cdl5S?<+N5O>!}8>-zx#E|EL0hRYV?arQBDCeZZ(Hs9h$-Ev9`|< z&P=6+q1$0=fOg-d`W}bVu1H8J1+feE*VIHVa#mK!!VB+*BZo0usTne&mPB@#sW%m| zkT-b$0F~5)C>nrX#oY6*`9o6D-^tjIOtdD|%gzMWgR%)ABpYO#oy7{qjo5D7m-XnW z%$l{>_m)iqpD8k>q{^3xPjmgfUIdh?Oace!;NpPWUJ#)$f)|9C(F|ys#B1k?~oL7`9{_j^oN>s(jK9Bvorn`ptF?ncFN)tMzLBXTy)v-2e z$I*)?a!m;B7^sRS?bzCL?t5N(s??OE2LzJ&TfX(D+fttjN|h<@)D;a&l4@hw0#+_S zUgaW&DNiAM;Y%wi(8_R{3^;TG$2J-M_lZK(iDe}qC_0$j8&cKY%>gx-XHGOok_P(5 z*Ky`|55F9AU{ytbA}G&o{HX9hyZ06;;ZSDD>z^$v5O*>Sv7Tr*Y_^ePT%K;^X7hhT ztIA0=1hT3IzEHBj6J-}DNX%t$9_AFzX7G~Zg0K~gdO7K!oJjDO!&_fpcp_&10NQaH zS?x~rT1^ppT}-)=h6())QBvJ zGPBDoZv}$Z*XwxW*7_3CNo3Skqn3Vsv<$5QWhPpJvc+z0bIP~%g0yvOQA@bElAEh) z0@hQT`tbA#i0}}jMOCuz-U}%$i|&jeN&$m8CnD8tqWSQ*!d>Uanvv~$eGN|IQ?~E? zH@TfpPfJTjOG~-a-#O}Pq-fHV&s_8C(SDsca9m(nP)IV?6R9K`HS}(AkN!xMAE%`$ zQiHG{ht#{ita)x)H?QI^!>7aF9rj)$p#!&vZ`jAT)a?6d%U4H8)$9#DKJ!CgR&}jC zN6frhyl0?&LUMS|r4AKJ#8j|chHw^LDoChfO~hmW0E#VKB>p0D08v;V=6Q}|=CPvw zBJU^I#u{DZbl~=##MyT+?lm>#sSQ!q(>3K=K;F<@aPaGpsfx><~l|+&N58wa#uK@C>s}I*^M-4{O9~= z>~uACd_?SLr?1#{{nT_cb+q9qI{8nBrB$K}YR+n?>vUpC?RnY=2Jt{!QZF*R`Fx4y(j)8}xU4sG)A1BbomI5kCODBgFK3uMzl1Lr23rNsP5+*d9*9z0@v9MZe+YD7=_t`gQeh z@vr?s;`nd3!+lkM@+5dhI%7!rX!#fUSN@#vvsS7907_5Un3r%ripx8VEgUoB{ukpv z2Y1@KJ>PGy;l0+Duun@`69RB-V=gr!jS@Jsj=smkPT)SbBpFLg)G00sT91(rf82a+ zaz3NXH6hC#5Kwl%*o- z6(y->{TSJvANZ}Ir>4uoyiyvl0M*ixYI&sH$S-uueQ-Id>k4=H+~Bf!jvoSrh!p5@ zdbB?)>k?-uB3T3f8*r|B?y765f9_+Pr`=0Z}wY0Rh z{#>>7hiW9hE)tDP^4rb|PfT>goLnr#DH2kWXjn7ucl6d0JPJ)j^0X@KJc` z!%7jJ9175?5-CJv6Q%Dp3D1*YMu!TSrS%L&eVt)P|;}r*quLy6z>RtEEhhElpWDiz*5W-O}mexO`+x zk^cZ83jhGY!LTi`*0IUp_=KXAIk_)qb8b|P4e=+(e-L(FDc*M7zj55_cCeWpO>Nrn z(3~I|f0-NkrFMz>+t;!Bf6_P!yez4z!j+nVKy|j60~uUT)VQu1Xi7t%(BT_ze6G=5 z)%efGbt9*$y1$Z4)0V!bl*z=5cLhoEnY%HY_Xkt-o)g59KwCHt4_|wFLTLJj5`|+W zKm$@d6*Pn;#&ON@rb+4^B>PtwLwajH1Zg)!%q{pXOv$#~IY7iEbBxgd` zZn2>&kDG;fl1ipjIcEo5`BE5ne-(JwY1wH(?LQ;)%h}t^jNu6sTy)!Ho@JL7+n$q` z^zI&X)nc89BT+~Eb$y~0#?A=<%V*GAUA;GW0Pp-$#Pu|1+-vJj8gPpq-&Puqp4mlg zlz5lBmLU+YKXDGe(W9;RzJTH#8aPNzw^IN8B?p-Hw~zq2;7#OG5>eBkcjGuH(GC;;G$u zoOS2lPF^V*(bjdCNrmabS8Q~mW>vbayMBjTDUh@xKoScSfG_4%X62M93Na|DZ@3Km z2CrDxJ~{EvYum|}Z`?{U32l?Anv!=5Dal-X#RXCH>t09FX0t9pAhtulJoSN0`lN|T z!ikP-&d+L}?li~6KObxNk|U|FIFOW`EmnGqA(y5`Z#4RThhC@YpG8O^X-+CJU;qRT zfIntDuhjmsyi1mq5cF}LZIPjhr-6Ji@h8Wf)}D`s_L{n#xjovw=CovK!m!PrrI3zH zWvlx2t;YRJ>EA(+web_uCO7a&4tibkdkD$lex1jCUT932Mq(ZD7s3G!&rn&b9e40A z;U9wh9CrQJbqIKui#}&xPzY#9j_>}jriIIL8{d99`488>%y{3d{mDE!j|;;lgacJq zGg@u$A4~c#_`e18p)ZKyhuxf@k|_0UJGSw%wf7QD)I~#eTBd9kus7@N*ONk=BwU)4 zm*cv$Z3&p%V8W1UE!K<MV8N+aCK897h*4JgoHVhz&7A)L=brU^tDqbY6VHp!J zQL-7nLt2aH0?MVx#toN7(Y%+=5Pxr8n<*hA02Z*;rD=Wl(h^Q25=yxd-C$i^J+s@v zB#^ODK>3E+<;VHHon4fm8IBwE^vg5S2`EZ(rJOD^dh2SK5?Xw!gJ$U7;}00juFU&= zx*|fTKz2OF`JQl98FNWOYM=pen9{H^RpkoijnM{}mmfA4)24$k1mVrO`$q(l>~OsU z<<$E`1d*at(k*2!CoBA269!zC5{z;O8g$^urQTS=jeZ>l9W30$Ae*%xA5RnLrw{r)rCJ z&2Hf$FRgnVy)pqQ32Zr?k9+w*CQQRu#qQr1JHWG6GM3UU4%RCo=&)5AKc_@U!myOo z+VCtwYDrkbg4xjLXal$ijWT4H@~-4YLFpE~ac>`1QCgD7PHx)&09|28iAf~gA-3xZ zb@ewhER6|^F>4&W(0|T)Whp)t0!zdwN*)YZ63uhJI8EGYY_>G~#ha0~fdtN9UtXF@ z2qh~20BgR?{Wr@&EHMwr9ls>k49ThJ0urRx=OJu6fDAwFlI9oP}X98B}+bLcz z{J2Za3DMHb5=HaVtVlQ=&BG9Lu6^1CmPN;w>3y?!%T@Yx!V&-u2qn1=^Mw>{#24w& z`}2Xy8ZuhP(J;KcXVSg?-5HHsbId@(l$=Q>_uFlK`9?MkUpQ4b=Z{nN`f=AsU>8v! zZ|*zi0&2>oaJeO5+qVK$rTd0`7pqhyvS-})oDEY_P81g}aosx*9MVZ=nXw}!eOs#K z{+xTg8NmJ~-jPCokU#_maDGVd&M_uQDceIzV3H*SPnw)Q$5sV_OI(N5hi?IwASG_U z;mb3Xf4Cw!7O8l-TIU;&Pw$?g=+6OfxiVk_5Y$iusLHx!k$8|rxU8z&^3~84b#J%d zs@^Pwj4Z^GGXw&3>634~6BxB)?*8ka@6c31C4)l=N|Kg+_1`}J2-1zDaZj~{oNiBC zXE^GFur+3hN-U5{K`%%?F(sRERZ?!n;q@r#cNH4n%Qz`Qg^M+9?*4Rw^x5vae6$Ae zLReNu>&N+ALCYW`HK+9mK1>2a9U`TinOR$5aU`uZtPql44^I=D*~ zH7BJrizuYA1H-nO?;l->RNaAAxaH#U)!2E&f894oq`zd={`Je07I4In1B^{mT6gkujN#l$)EglJqYxPgf?piB^!gof zl!DJ!CtmsOv<#NOLY!IbC@$MuC}*QR(9EgfBIK)}E7cF%r4)dYQrEFP>laD;sWfGS zet)a^!FvWK+7pbqX}|gP=tK}pm?FiA4x^a-dqg+Y0tNKrz8IR+!Wf2nlgEE{(!$rO&pZXvq>0ZVzTeOv4CXitOyetUmN^~e~CgE67+yHLP7k=njjaP4B?EK=*3 z?dRxpYk`GVpaV_Yc(MR1n3A6j4Bo{xchX}q@(~_lS2d?xL?adXPGl>abC;h_UY|n}pA|%9Oh{SA6NCa<^f%}6XNCH@m~y#V!RGgu zzaR3tW>QOl>=aJBzE${vOizOlE>lqZHIKHivs+SCaYpRUKSy!TJv}4(laFD2J#zS9a0tU};%p3@%TuLjG*#66y-M zX)iq0(~o@P?bfWI0B}Kae43Vtt^tLC%CvzuN)q~9vCYSIRUFu3=;NlxiJ0PezxswR zPcs7QO`MrZC`R_VuiW8OuU~5D>F~P~7CSrrije4A4whkK0eG>Ix0*jow zK~kqI1305*@0t1hN4nzEN1Mv2M1>QF%brrYw6Yn62=g7<4vZ=c1+{NHzcD6|uJFby z%^|=SDr+*nJ-U+Cb|>fNENG&`!f&sp_0!8PaS$ z>k>|oiAdgPA3-;IeZGfONFmLRLs%mMoW$E@MR4W5^5 zU8Zwfd9R#x%(~(jn=ann?b4Pd;!#NemMnUneqyjzo}}XWnFONPfJ!Ja%lc#6swoIA z0rBNqRv8ne6#|k}0ky}LS_aM9Cx*IN6aJjB3sS72g>kv}<+JO`mI%b7go4|sWc2Ql zY16*if=XDgJh^Kb8vCLQnv8`OLmkoEEzi2$KW>Cl0z4WD%}P za&qVV-F+A763SAAD0od=c~nQp{{YDNgq2JMWjk`CdHP0=@jl~YsW{@K-KH|sTlre9 zdiJsMwFKCT zzDF&4uKxh1-v;=0k>UD%w{xW#LQ%_CWT0jBP<=hEdif6>kg9jfv11xz@q_TgTS{7sOeou?s~>5Q1#%_K+V@}9h3t@Z2w0LT8ZE^<*R zegY_Y>(JG$Y~#-HJTj!MNLhDwdy(!n{YM-4*Mw{Ky1I_8lNK0}ZK;}%-h-S6zh2%- z(x3uJP*!8-@$05k$wZO@igKu<3ia5)12*Hg+WE&%e0}~7j_0-RT`vxasXaLA z5`+a{jW3qIYFqyRH>X(NPX7QdLP~$^p*5~!E>!ijQfCJ-KpE1NEQZLlJ6`q9jj)f+ zFT_vq$>P5Y__n8Y4-VBMr0Wp>0HogYO^X$jY_*RU^y}zcFW2SqQV?Cq>+bvJY zoM#Wq)CgusHD0%#r;6cb6d_WS;#(CRb*+Q*GMrKtf1IlE6std1pLYm1h&kK{-NMUI7q+e6iw z989E%B?hWzwac3BEGu22x!v|PZ*gv)aoi@3wziD4`?pYFM^9jp(e2Yx^GBBzROrf_ zR9z<#LVt_8L+84w2~S2A1QeB6^A0qq|AHLws7A zOp`*^I?PD3O79-8z2l_#mMN-S6I*J~;+D(8d^v+)*RJ{A(A1Qg7F8lK^@+^`TyVGj z`p#e+f8$fFG|sNaXp}s~0JM>dA#nO$3DVSHvXLfHubOuGZFfOwQEu_&_u`94El@TB zm$zS7B4i;`60|IWiYYqlZBK6uC#r(3;Zmcz+}S3w+waA5>C)jeptts6fKt3be+1KJ z*10}+qr@M?Vc|Dlm}n6U2RprS@APgEON$US9oj0KG7wz&)lvF39Jh}hQMOVRF^qPI zNaLENex=<$y+}dGe=OUv%Q(23Dr!a~*D!4Htv?bCZu`OYye~t1rQdda^fe8!qfRet zr0Pmct4=WfCr!Kc1J|#m{{ZQvoIhI}N|~gAdeoCasW?x(d5`k`Ek}iwAp^!iu&E3I zb9zwQK=I2z7x*`8;eQ?cLmwaQ{7COR9eIwHqX$p(v^4a{=uca9G(;@PdE>9pOX4Ta z;W&Tzvk(xx!9T>D^p6w4CPcF_Q=Ciy5C~==+yZ;@jd$Sl((gO|=f!mNwKTMz^HWxE z)YB!RXpv2jj4m#v&&t=YxqTCh$0l699~fGKMU7qVP20Oc_*BYKT=JR{c@Rjp`)KSU z+pXgt`iF?d8a@@L*t$!qv(%F|I#Q42%U4D*#H7b{%MR@E)?#>dB1=r2_d@6?nYet~ z95Vr$KH3TsxnWJ5^y!>D)b4vNQ%&%W+A{BTH8mmK_qzJ^+Qw3pW22)DIYcEW##0$I zExw%sT)Ci;#48N6wiJO<24vaIH;c?tR*;zk8jF=yogaR2Qtvx%?_agi)Yb7wk?i&L z^xn@$P_0Un9XM(1=A$Wj^_$~=k#M~h`hw{@} zWk!GQDmacUNC;5{D?F{Z0@(|BnA(37>v*?k@K1ngc&XdH&vWAu)|Q@$4J}P0_sQQNsD4eK$j@V{%%jDby+DTNh8D!PF6l&+d#1)K|x={UEDd#x_%aG>SGU@bS(l89c2xpHwHwdbyr2`o3c^N=#faA`{$M6?WK^jY;_!19ALcpsJvr%+RJmjn zgtlI}Lg6@$11x|l2)WJ3%k#Wv9Z_Q!aVx`*<`{|@tG<1&r~?bQa!A|1#UX@ERSVtn zqgwVBtVtbqGuqllmu^V`<%=ig_4TZEb1V^v2gKu-lp0LQB5#SxwzWMg>&hnnE^L~| zm&)4^je!*Z04<-p>(vC1lmIH%@4q-a*`aD?pcE9f@}>J|CVk;2&@Q69s)*6UUrt|B zk)}aNVrg1!T5k3CiJLnTli>h0t;#bynM%vJ&6ApphWNBnkAH3+p)!DThs2*OtRiM{ zUv5?v2SU$KcReUfXCCNZJy=K^Sw&FVw_9s1^M6jbN+3{GTVMAA98y>(4S_t304HM; z>30NJ!BpDiMTm&UC4P^$+p4NrQ}{wiXQk@(V*S@RnR5t0D>N_VTHg8g(KL0FY*nqq znOTG#r4I;JeZNkmrl-SGa1DP=5K2(xx8fUrg- z8U|~3uSl^V5JB;2mrc988y#|aBtB8u$fcJ@KToOc(&j>tKv4_}J?R5n#gf4;2xD7( zvF92801~ZULAF#5c9s|H@y{OJLQqqPxi7a{^D%4*2y#k_YIXfaan;)>n6^PCVI`0o zL3u8$TyZFp>(=D^P7`9KDQB8OkJ#qRLn&{ zFDlmMq4nJq&-(NtkOpLB_%-Vgpe3m!Qmh)C-VW1mZ=N8S3QEGE{%jBQ>Vz~qE&M4Y zBv@70a&Gm8I(mdcBg(3yTvf`kfImv=uZzS(7HBcTfD(mb2BiFN4tsv%XPa=1-9=F1 z@hjx#>3*Fixk78PWhcHzNH9^B7ND2I;T>&Lm#88ic6!)BvP@mJU__cxg-__;)gC1z zmm;E>bd3%bWv*}*BDN;>dV@^4L*Cz9EQw8RF430O(Z7(l)0Z7*O_z#_Bz2CGOYv`qZG| zESmXuZDQc5X~KnLNDV^wxTm+w7o{dFbt3KLWVXArdrwW@Or0+=Ad-@w7N58plBr`6 zbUtM5P5agk($(fNmzGIjl&_n8Uz8ks`Aj@?B9?P@qusmg#F^NZ0?9JeDqh;t-Wo$x z!c9ghtgzH@OV;Y^=svwJq~dVQ`**ZAI4qPdQbq=M4BKh_>hQxyUvUv?L5wkWxDozt zdCyC(Ss=AH{ca$Mo(#8`f?VaE{rtiDTFhv(YeLhwPFHt6Q;*Z6S1ls9VL`7?eHt8= ztVzVpiK)9b*#KG&((bBEcQ{dzPB0~$xcg(&=t@IXx_9`CE@2MIVlvy{#K&=DqX}GP zw54jIsU645!|HX$T7pud7@V6dk9orLRt&W)B+60DhaKN7UL%)rU<;U_gYu1qocio3w0!HrG&A!hVOv;~bB71r<@D;fR&f9c2fttH z0Gvfjnu1D$gOM+o78<~k)rlz^kl!U_3|GxanGdJ74_=u}l{!H1h92He6_+)rv=0l^ z+`S9_plx2_qacFlk=QlpB&KJ(u%Mqr5mn9a;Dsk@9$3_L166yyg z?fpFB%25cIX!&S)z?znBjhF>g8lu3DG3NMsWeXk`=|;;wznETB&MIOQe%MP6eogs> z^JOM2vsMEuqEcc4zU)ubzM5bU@L)~z^6j;xSSU*Y7=nw{x3j%{y50iTV;D|RINYTL zx3-lrGNsCU^mKwkQcInEePC-!a7-yt8MEf#u>*bW3-#&Z31Hiq4mqx5S0LW+*Q3iA zO-tRo(kzk)!+@0rAdXIan|`TruHo z+bEwbtk2&DdN?&8y*_&RMOIyks8jE}L9#&@#fk6ks#w{WTl!Z_wF3&}PV3&WLE;3J zGC|K+y#5{d-iO1UC-Dc1>P?2ekHNnZ_T7f2?V4wQ;(fPo;V^YbJDoE_z3yKvBOBuS zOOD}{#jAmk4~1MrqM@o#>n)HtfY|2?ag$XqgW_-uYAGNWU;!cDJ#Ad$usk1Iy4U#c z;SEV^_U4~-{4J;9uAZL#OYrW&)70*Jon|Q?`nr0PpR8lZQGO5nkV{|q_teTkQsgFa zSa$wOW&<+BHl$JG)qjWZ>tEJ*FqMRvxD>{K1f|KbdWhTq0EwN~{*m!Fjr>L89y6`q zX-mWOW2K|o>uP@m2=_DB?mKz+J;b!wYia9uGFd_ezn6HR>&$*;b7l*tlg0CD(Kvr~xDwe!)f9v6xS?j>qw z3MHEDr$58RXT9-#JzZTt9hZh`Nz%|fJHvZ3y43uwEeK2VJDpDFNh|o7>P|O5O_g5E zaQrHglfnt0g&a#>8oLkxY@2G{F?ilAl^M$nnU=BWI?!Vo z>gdZuOK!-KWf3&U^Bv@KZcD3B`bYQ(kb(6HDE|OZpiLdw>iM(t=^j7)p=195wPz7R z&Kj(D$&KI6CHP7%pN32GG~FFtNomVlPLuwp<)obOta!dlIqM_qj;ZM{jVJ^HPDi`? zWgesaSw$QK);J5hUG*I4`!R3RmBEZGklMBnr_EPXX8yfk6r`;yQn4_|`Ny-9I~N&#RoCQvK}X9SnpNmISL`+#M;Hj7Ksm`x~Bjr#Ol!I4YG?OBIPz zw~D{7R>D$3hqY`{d5sf5Rxo%lF2j8Lq z7?P|)?AHBe8#pAhGFeiID+r)-M%$lJA3BlA5n|og(!wbqZvqwn0NV8+3S|C!7Q9Mk z<5H5&l{HBrtn_nxQT`!Z?PnU0Zj{5GZO!^#Yw78eq7uXqaVpMp?y+^t2v#Jo5KnC9 z%iO@4l4m6d%G`og5wH-oDaRT5^>qIL098ir&~m&Ig4igXJuLBqEsIqaPTQL18%t1e zP2=mHpgOMQtJf;%PJLh|WY$XMhbso=pbWr&?(r;pf+UIRNWDo-+V5i*<|P>8h5bKX zs-$BegaD8lz4<{>X30yYVNp4AJhiX1do4(VsSwk|Vp-<5a7ZZM8gK6B2V4+Bl9J~A zZF|=!jB^Pp68`1tb-tEtgFetJs79p}k`kn-j~iNek!f6U%hZI>q=EqJ>-&Y3HEa@6 zQeLFnqkLFG{^oO;7gK2^mE&yy0cbHTO5+_GP!81rz0O*j9#9Ye00^vAAT~PTBSWX8 zE}o|6IH~}ou{g7fu73P<&_gAXOTBw`qyQ)=tOC--n^({JkD;lxvaYNiERngUua)QY z>M)X$6`dZA`aS)*#Da|RXq)U?duC8Vbs%IN!m z#6DSr(^$8EjDLq`;D3v8_<7cseXH1b2XW#(=WXGKY{T;V-FbdamY?u?5szyq3kbo# z%a4?KdJog5E^h#psUam(0#cFWOg892bxbf=}E{9Lsm-@uNY#n5LU z(>G-k_0L|yeEFC@)A-%g-^A+dSQfbg-8UpqSo4)$5a0RhRB+K z2Y0%J2)f<(ZaSPR9^1_o{{Sx6{yluh{Qm&Q^?7Mgf3|~5fN^{4y<_Wt`e+o7r_U*5 zlBBUe{Zspni8ZSc!7MVfbH*HF6_fgP;6B1spi~{Xx377})g{eBP*RTymeskdS;ZRR zxn3esj@i3qjN5Dcswb4Ura&wT03cDhbMM|3E}&(s1gVMUMT=3MD1RFMAAB+K-(joS z_}6C{&4Z_<-DvEGaoaf~si&%zrQJAq>wD<`0ABi+(PjnkvyK8>q`Mty-{;HyXZ&;N zzgpqciOC6=lFk4Mdua5yFVu+OU&Iga&+%u&oyMnm@XY1$2ZZNVFowu?+HfsNXs`WA z91M9!52xFHhyMVmKTZ0A1dctpJ|yOUi8dr0xf@5s{l4O*p0P8Oe6q&S`tDh)7& zr+atj8XP|uMlZIKgO>I7HK8?&cW3dRdE1Vkh<6?QAWAa)$VyP00$Ylfp6JX#AHP`B zzLzCrnKF@!FhkXjtj(zTjeZ-Bn34YgVu@yA3wjN8jfdO*Eq49XyKN5NU&J)y+iB-d zS5xw%tvxwYsVQAdafS5suCUeqG-U~kSV0p`LlzKn9lto!m-W=lX-Nmb+j+(7xBOPn z*Zinz_nJ}eVHm{iV*0R$f+Lu1uW)U*a4=mYImEi7pd< zZ_hCH=@mcZTq<#)Qs`>-7w?pP4~%_#@b6%B;`(OV6 zYvQFKC2Cxyr!i1AapX3Df6d`0sH96m!u;Vki}7Euu$pk5BQiySgIXtTsnt-J#2nkLtgV?k5(mn9s9?|gqS$6vU{+^>PKQ_G5 z5sCv&>ScjIDY`o8{2bmUT4u?XuL-qY`#txqU{bNm#VnMw(ZDvQdqAE40L0!6AJ5e9 zJWoSYMkA)CujOkq0;8sZzUrF6ReemKr}3>VGI(_)lI+Beuh+2>rN~6Usk4%~Md|!Y z*EjU{g_=K#{uSAFQ-pLhwDff6Kg!f~Nq0J=P-KflRz8=;J-Rag0LM6)^O97uRJxiR zAorGKpu_6?4-F}QZwLt{_sX=be4||WkK-qO-fPSy4Q(AcP8wGTq#~_Fhzx+nbDq6C zzwrqYWr9_OL;}xK@g9D6`AAy8Ot4?`vyYh8zA^Eicc~p$S6UskH5nO)ROZc+`AC=9r-Q>S=|oCnio8NX2Ck;A1S*}x}D*Ly}(wDBBt(2f#Pr!J1p zTS5(*ukjrh@K5-6)O9qxPvd^=)zza=@XZZP@T!c6>+3$bE-|XUdilrJzx5tMWv_+$ z9Gcti8=gbho>A_8k^U7jeALeRwA>+y!ujM5q4IAy>5jv~yfeXjczAz>_BuVDhMZzU zM?*(sDjr*t0}F0*VBPieIh=1D^$CmOIJwH2wK=M_HW#*0?{@dNd-C{F~ew)tJ}Te zfB^FSy10B_EmK?TQJ8HqfD{CwMM@Z~*@MovABdAece=(PkyO3{iA&X?$5OPYBnJhn z-?Rq+7giuNeBq57VvJ~8g`h+hH2(lRF5LR4^r}_@&LrPEzPpT|>ic*SsY_*>zErk- zS>q_Mt2apU9&LwwJfeddAj?2Oe2`+o*DK z;PvZ}964nX)0S~100jjpsg`fb`wjDtw&4jjAsCYZu&Tv4!T$iqo~#Mc#q}U%*np&X z-dH4%M~alzpQwgfTU^qNkh)oC%e#j2dB-;NR1(b0_RqWgM2T!!D#!Nj7mu*{ff zqrogVSYeRrHJDr}C)HsS35G$(!rX&E`1V zT)i=0O}#lNB`8f88as7`W;rTL;yY_kCZqv9K()CjUT&iENEpA+u9-}|LE6CUya<4l zsX#QrmAyZF;cmX69o9V5Jfy8n)DOs8`qnslW?BhQ@nRKc_j3rXNp%w}zdZFKht>hr z)R7&rX}Z)05k;Z;tMzU6=!ikYOH|Z9e$c$xiXlEGDadEn`h}XVZEz0_5tiKTuSLc$ z+osVkP|xZHz1%|KYCv1~*LD^fbJV~Z-eC&#psqrwaE*`F-i{DiELe)w-=E?KHezN1 zaGX?k%cgm>CGK+5xQ5(S0GUv{RfXprHWEnDwIAJcg(d@pu_3#)!@v@%yQxxGm^V@X z0LLe6QN%#Z_=nvSsu zRut3zuvzn~+g2G3H-M!F(y79$c}>fg)O|R5oKzr(CcQ^=dO&6+ij=itT70^9coIjN zowzFnqGVrY@9on_B`GRu6GyARFIZn51qCEmZR*^=a6GRgRTiy~RGLe%c|OD`F3>AEkbn{l8A7E|5u6lh51r10)oXOJeQo-f#@Cp(`zDrx~rr zFV+2h@1p{0O(8!FtR({wS31|d%tPx=3K=|BrPF8rM0e^ckL2I8Bu&n*p^DN6?j)T#Tn|vfR#F^ zS)eLR)B?!>79{>_+re6G%XZNY0cd6G7uBld^yo@qPvTD9v=uW6TLKg`YjV6568M#& z6mfO_zTFIhC}4o4WU)RI?^Ye!2rQ`<3J%fQON@KC>K{=^xh&LuPM~sY_EKN#v@3x6cfM58Exxe)XX}r8i z#hjsaBhjy0_x*sjN!Wb*dqtM9OcZ_JvU|=8f=aDUDzTh%md<|NQ6mW@Ipr22$|ZoX zd$?}eC5)>Xl(_{cN_@}L9{m`ALP%4L#Z5mw(kd5)Bo=);_>A8&p5@Tn>x3&GeAlO^ zT}KpdV%F{Z&K&6wLbf>k;={0;IlF*Igi&T1-GaDyz;=d2iXP3dh%=iD?S)Idb=> zeBp&mNfk{_OwI5?(AowiE&fb4ZV^JO(fN`_Pwjmiq%j8BY2P>$)sTQ(j{bizXKmcN zX$0I-CL>v74dzu8ue;D^N(y2CN{x;7%GHa?QAs#Ui`SQ@>K^v`v7K@t)uD%j52xw= z`O{^nIM+w--V6!~K?Ic~)0SY5m@4BmrK^tTiYUiFPJX!PVI(DwNTwV>5Sl8ZZMKXj z8&-j_EW9Vb=zhIeZGPS$C&U2^QCqgu*1aGmakUx@nSN_hh32d2&rATO0g2`xqxCSV z$ukO&$q4noM~LUD?ksWvcje@AJURVO*r`BJB!FvQh^pqJ4ksl+v$50xv;{p4c-ikeu(|W)#F!r&HJe02}@r)&SJhz0zBX$}D;LT-1V;`$- z?@-)~uW|EnU^o)Ky?!aimtZ#A&OJg@#lXIym~+VdXAn)YQplBKLgw4c$J_gKX-Y^m zP9k!*V_jmVYZY8Jf#`MLI9J^So&NyMWQ3%^oFy^5nCaO{Q49koJh$uTPe>HxpSGd* zF%=gS^9MV^ZEa-V7BP!$Q$$M|X!jdG+osZ%Ah|T(zOaE=7}0<-oHmrLyrDk4)o9}& zKJ`VV*RTApnL?^QVK;Rsf^q&{U;bNf(*{$Y*QX=} z6*5hG_ka+RS==3YHFkJQsXVJgW>)F?<+?q7oot~vQV6Lu%kbWja>%7gJ<^&FC<9wi zkC){<&RcEbt2I~u057Hx4jp#RCRi%*IVya+w~>Lh8d-&v5R59;n;UqtJpTYrj*RLc=c`4~s)RNrCn^r3llj3qdvzroq@$<{bf)ZsADM6T;pj!u z;`oKWc7g&Dgq$8A$IOvNJ3TYBY`q;xXz2c15rpCqva-e@BPviB$Q@-Z30W9l70)+z z>~xQ`e}<2?Q8W-og)K@^zJFphx5a(jV+m3s$z8Q5*P@)~pU@7yFVf_xK?zz&YhI?U z<|qzv^bf3YlF=b+8Kp$gtER8%(m9vnKK?uP)>#>B++Yf#jC{9_zMu5o8CWH-!jtd4 ze5mp8f30z;SKTO?;u@O0>GQN{&k^onDQd|8h`Vi-s!@-7KHYlW9!ips2&vDPD&@;~ z`M(py3621$Jt%6`&wKQZY2w|(JxeLwB)eJ`J(_w)04kgmsuq7S`so_H1K?3eWWJt{(fM5efsIOMy#UJoaL>D! zZQOSA?Yq4g>S(b^MFklslH$O9F^_JAAyXx+DoU`B&8EI)_0}!L$(FfzR);2_=xg7> zj&b<=@R!5V>*z~Pa_+RF8iay(F%L97s=ogHd#N03t|m&R zOI|dPSd=Bqg1`0W1i+eT>CD=!#q>7?ezQ3+e=kq zZkk7gL1p~eVj0h0ESJU2mbEDhDHS6vvLp`qN2Zy;1bx7~gEKwOr%v^aHTaAE96lcS zq8b|7J*JMP&3S8T#!(|OGmAwL^F)&2v)8Te1N^3c3yNBnP9VcN-}4yL{)&P==mJx9 z1>LAB4?0H)ek=a~guOWE_uc1j;fnwlLFm5!08L#uX$9>ak&NPDWFK;jy?V|I{JZWM za+N)fMadhuIS+@*Gba5Va>T_6Lno^WZ1xNjCG`XSZ z&AYr7UkXTCmI?^ZQXb-#%Q&r0U;XdH!#iyb!@2FhiFGI3__ng_?OLwTu(D9u;ZtAxq&<+@hVxFGXkmx zU|1Gs(@0N;3Or1LwK4$|IzOIt^`vZH4DO@iACH0CYyNkJ_C5BtmuV=ArfKN-V;%6Q z`D1Phqv_Yr{{YC)sej=dP9))kR!8vFh) zL7W`QDMDB?-^ksG7h`{T)IW)?yP?{CUZ$*Jqa8_W5!<&|k9*8znQjpF5$hnRrbVg6#2>CZUwpX7;^!=r|rvy6hP*G_r9(W!qBej(BE&lK-GN5i`< zElqzD?t7TdT4Zq(i%4bz`6xLx(%?2j zlwxrTMC7V$gyR!~=*6zozGj@Gn!9f6zwo_2^Rd;Ov@~bj#%{ibw5mUss7qE*Cgu%9 z^gOxi*UjPN@iQe)9wHLhPGLfTwwD>kT$!^ar|jVgNKr2DPkP)KyZA)A*>}3$FrDms zZxPbl+Db7sJB?n{(A3hFw{aM7%UUik>h+bxi3yaR9V$p%qH$G#Q@8>27Chm}XqrFn z2`WU&YT~X~a`g=dc3sJ*qdyPTHDc>WMse2Efu-B_y4q5n$6jrIcBa|MLBMCFxP&s1 zIV32iggdCGZ8^4?L8L9vQ8U7(ELaBo<-e39@p$Rz8oDvA=TEqt^z^%pIsR02B^^>q zX5*s%jJkh?#&ECr5FCOWid&zgB{a%OQwPRP{upI#;=|ycCoK-+vxbjn{{X0XpKsm5 zdODi>4$H|M+C9YdCO@C43Bp8UCvTeNVO=f6@RXcP&$TH+pjB1L+%xA&LFCU;rplD0 zVqCIHPC@e^UqR~|8{*Fu@V@im{{R5f(C%Gs`~Lt~?sdEAYBQGJ?^Zp$b?;kJ_e)b+ zI;i-C_&<8-~3>+*mb( zkyFYr)z*Zllw=@=-K#*~Qv05!U=%MU`?qho_KzQ0b1gb--_%yL2{j0!lx z1lo>kN_@s}?k9`1-Sd37l5VRqtb(|%ulCRrh#ZYIZt{*32*4Dd63wk))Y|bpX5E}v zd7G6dt-m$?me(CYNFZU0q)Y)pDFtBAoWaS#^0a3iS}A13GPNontHt?#-_xiv-P)=h z+w&Dtrh){**oElAv=6QS0JxRZbGcUN^HQo)Ueqf6dVrLY16KW?D23ygkd`VT*uG+i zNB!j)>FOyGlW~p%b+~Nc&;B}vCZ+9_Z{?qQ#bm4@1u9RBv(}W$;tA8#psXSh8qQIs z@s2<3(258l>JRtp454XSCJ-o^4e13#SOTMX+SprzF{e0w`07lur4W@fmulO7+35=@ zM1kS}rq8cPni{c*jvgb8qCRJzZ+@zzR|7c$`Si*xW-XAVFA7Z@dywy_iH%*h?YIKt zfMTjVpEuj6Au9ryR7b_KtBB(`pqv8|Q%vX{;Cw;w?rupLF|sn$l5ISNtLsT#&Kz{G zmZXOz)CmFW>1tLPQcf59o;nebcF^~ckAI0GWMjWO8B|8=O}n)QPH~@et9`JrqDwU% zXiY*7-!R)>}plcL6Up>bG@QqaH4Yb^CNR%MFAJekq=!!%M^= zX;^uQC{jn6EY^mryOxXUvNt3nMc znS-?T*o=lzjeO0b1zc|dey5|Jf}{kH5-}^(0cUP?7m6&a_%DCC3{YbGY zCRmOUB;2HKtM~T2H_!=672*w#N3j=nbD(&kbj%nDI)j}$IroWUCzZJvWtJ%UsEy^e zSbd(VwIHxbbgHeLDN}vk7+Ub8AGZ1O8~2^y-6=$0X?5S0L^nh$?iYNp$K>Ps2Cv8g|lgxRDs` zr-d>O8jvq~gk7bwOK{1uC=|KC{;qiHi^DNUBoF|j zdDz+xx$@>Z0*ERM^r?E)y|e2E$6UB>FuyHCwyrsSF21==mr^`Mju2=`t9!&IT(YE~ zr^B0?j=s=dhQ6Z~$g&mW0`LTHkRM#rSJ0O%Qoa_Wd!N{g13e_63dMx5%n#}r=uS~W zQUr@ugd_khNbhmIB)X!`GGFR_ zdIF_8F}A(l4>D+ANhokAHpsX=b2Wkv<`nt;QthqQTyC<_`t&m)=+8=PPd#E4#H66D z#SZ?!Hu02uh$oh1#@wNW!!J)pj(t6PgvcVQ2P@aht>UWUlDrH-Ko94rrMH8dY3YMUvTA!L*n}1L=s#@i!h2p|(_~tbfh;@5_AyXyj$xF;xEv_1mt$%)s ziABqRHUj1C{bvi!D@aH}9|O6i&%N3K*6!)@$x!_zX=;^i7eT|vMoI~1u0okNJnIQf zm{hQ&k}+MZ{-2l{ec513HDm-y93_X#%hklP&xW4e`c^8Hl%+}nniG3o1eb7%Re&a4 zi6X*=gXzwHa;9Ctqqjcq6ab}8l@bqDeRj{vK6{x?BF8PWB(2f%kt5F9=hY9VP*4Sw z2p)Os5~P!W)Tvh|Gx%ZW5^fm58c=BgyC^gB2_H-9q!RUE-ScRoi3Lr2pUcEEh~1HV z)>s~6=~&P0_v%5vo^MSLe-T2L&BC+HXU-P)8jd4j6$evnwnx_Y9K0#+(bH0;s-zl> zv+}!d7N7tzEY2wJzS@`p7_9|X5Ll+>#^qLxWA60Rf<~`x23a$>{XoRIp>qNhCCgny zRC#NZ2P)cPQjCcs7K{v5QF3FR67hWWRJ)LFp6D6|iV=ZTsZrX*AAYe8tyb9)H^h=z zb48`KQqlEs&!xB7t-uFVE6Qm(TFwMi;NLQ;Wzcn_zrC!kwc-CmgOrSe3si!{m zh)T*qC&HlOgwy+d;RkcvLQ?+#rlGxx`;emqpLh4qPs*0C1~L3>_phBhXc?O53Y0?2 zoczECr<^aHt(Q$xTt^`1m)gDhI0*qD)DH5>1fsH}g(|n{t7O*H#7YetAH} z{+&ZCl>$6Ex2JT7arX#H!BUAWL3(>Y^QUr*a>*hbi-_F4yNwv1U7w#imHxFi{F zd_hS7i-%B4hou~r=?d|K{{Xe81eavzdv#}K>i3SQ_(#6+-x2tO;GI7XUc+1Sd_POE z)|{m{cGB?~>gmh3(2_2oXm^@qvAR%4p1fE2ClA1I-%k3>&M(C$3e>Qg6<`kJJt~(O zJ?S2s{5o$OzpVW=Tr{vJ5CBmw89|g9hJewoEm+)tiM|iqXn2(TH^+Qtzx3U()HLA3 zM@{XdLDkpoh~p>7ROKR2K%fT7asZ&HcdpT#o&_9I zQ!;T$GWr6=#cinPlya~5&va!U1n+wd0zMtuX!bf9T6%H(jV|9(T3_`)D@S`M=(Ez2 zD%&jO$GiUk(>Di;l(iL3np9lXz_Xh@S%i5%^3=;Jl(ZqxkO3NB(wbLX;*ao0dk*iz z=XzSvcaz^Ll(l224LQO>xGBku$@}$x@(E^4IzEOBo+KeiN|IKDih-6!wQvo3+Ay5dV-jbY<5hs%G&sEH9CZK` zsno`w*XgeYKr;e>KWzZLY{mU~-tau6#R?)4QQa%`6s|LlGhbe;66X=**>-usIDnv2 zEG3Y^v^Rc3tYbY%Mm}AsJ=eH)C{rBg5U*d~q6{E{L19V|`!-QYML?kn$=6m zw>A2m8wnxJ2gbj+D%Ma6C3wP1JL_B_nYo@(^z~&Jk&2+QJgk(esbf5Pe*ISpLX>Pf z*YOpSRgdnBNNNy4BIC{adqxnI+C=jv>0kMsq(O0h&nK^3TI8B!^yYVqDrOmksYK&q z8qI1wui1>Xbpq~Fk11h5Pvz{9(WRu7f~(=PH865ZDze>@s4tA}zHa&| zW%#orzWQqwoiqNgv=YJUbpp+y8UES_oP*NZ=O5fYzQ0b6kfK>dk{n_Dj_V7Ol%U`? zsBF%sy`mYuYV=(H0GP%K_P_647YJrxTEof$g0=XuGn(y7f^yc7MxM4drb3AsKu2wG z;BocobxOvfYK%sscDeJ0(yz802T&o6OCIZ`q5lA7rtA4*9nzGDks~0qSdHUwx0|%* zr6&IX)V*8P&3k@u_YRNwN>h@VqyYNAvk3m2{{Z?he*pVW0RI3D{m0@*jdss#-+XK1 z`p1U%uCos3L&JMBOR~|_hLZvsnse248Ao+Hb6tGz>wI#jeOhFhETl+I5|+>T8q~Pg zoLB2yHWYBkQvTiqxi4CWO*&Ek0M_}(=V#-0$6b%a-{K?jqsR3;J4d_I_+Q2Ke-At< z(TuxZ&%FNt(zNBJ-1ptauuPo)0E^VuBu5qi;jKP9fa0a_Uq|6&&BBf$Cy7|0DGDwU zkxPI-laU#JO`F4>6*?x$4(e$~ zPxB?RFxQ-v(pjbRXVB}@{V$9{5R`zGOiO|ut^++b^f86?X^JyKK>Lzdc$(QWwc|zj zkG7~XCVk`S- zRSmiGd$Fgacwen8PC%D{Dvy(2yYzVJzwqm&ID8AOt2C{D5D`QO>2~pe8?d~T74O%~ zf6i7F^{|wRr5hJ=`8M^ueT)A9Ptc+Cd8!Hr5|effLPkcJeq()pWTOcqMSQX@%(-*s zMqhSpS|k`%M%Fnd*XaV>(H zfb#zB_pb&5GOrA>1Kn9<@=QDeSaW9D7Tae2q``_~xt>yttga>6eyNno{$ zlE?Jt%P3pjMk-ybo$){;TdY|6;XiC&Rzit*34dvD%`AdiVwtp z2YfN{Pj9KA<6aNi_i&Kx)s~SBZ8=i@WP5?#7jy6aoo#SGTKbpM<|SM&5UFg=9FWgq zoc{o~jBY>ZKTYG(q|cCos#SxQ&A@T4RmwTb;!p6~*lIeupA7iMw`U-dcAed7=>r|n zj`1ZJCIK+>j=kpr{{W~ngAb^1pLG;ooF zln5D(?q5Tu5%p|X@GtHpe;g*`cNcvRD4_acrI03uQMe(1>vkNu!cOntZtt|$lzU0) z>|#He+V?to%qILlr2G@F3c}7KuW=vIba6=0Au9d z^@2|l@8P2zICrqpfIy6;t*JT6-egEs&Hk5;dQE&Rwah9q3W}}(4GxYiQjp?vsWf}! zF8W>d>kGTS_q>TIPsL@c0Nl<@$8#K)JbH8cQgrVNB`60E3x!6O7UcBa6Pr40(v==0 zlpEz;p&q}BcEZMe?yjk~ZrI$dF3OVa;QO6Ao)UW5Nt6+r*_z#t+$ydvT(^1UM@pLQ zUa!hB(L3J$agT@g9oKlui0snU)d=Iu7(zIjrzusQqF~{8bmHP?qDU8YBze1T$JQt& zPn-|glBv9bAQEWwJb~6P{tfs+_=DreOqL8BPlUk-nVKZpAn>FfMS z;u`)puLctSA5JpuyG#P<&fU|6^7`0gJ$Qer{{ZTD9XSe@^sW^=5>1wBrh9=v=lTYb z>$ordKanXxe^Z`kr~q&#i8+u>*ct}A$3pl=f_O)P=pCnn_;+X6cF>@QZK7%7A@jF# zlU&~|_48go>YRVnmL~DMQs+!BbsD~wrqyku+VGqQ)A$BY3&EuThAIHiXli@)b0|(R zl6i>|l(M)>GX0;nJvz^puu4**!N6>(&i%A8#Gr%)0ss|z=)ks}>jKYAH?aYpnC_Jk zD)S~zb0)EVojEN^EDDPQlm4p06)vLc7!x!Kklfm?9j&}9mB(`!*r%puPBvX0Xg>Hq zTck_Q)WYAvloj^EW|?{XV@=kX#V$LEe2eyTO#Ogc)L6%xAygK`gRG+c>KF z9*KvZJwH#ULt+3HRiE{zIGJh+KwQLx3){#IYg11+pGHK;Me|IFDO|B651GZaAj!*K zomE~C^>01Ayx^qRAYm!X<8O$Y`Q^R3MTJCEJi{a9EHm_alo9|5AIKVvyAMl8A!HnC z9wG}@r^H*>`p=bIzrRd`mQZ`p zbs6_~Qm=`IBTAT2+{`Yb40k0|t7By1S0R6^(-Og9QbMnM@+{r+g=Q6mtsxjxI)l{b zZ<<2QO<7NFB`S)^Ryix$Jb?ZEdTA2C1QjxJ&#zuy(5k9Zr3@=($cuN_fpsOiKBdLm zB8D%i$$<6f;4ulWJN)wNSQzkyC=cc5>i|x6Osr8OCQmIR#$IdC>4eK4$dibMKbD1) zF(fG@P@gUT0H|HA5|;YP23X&{*t|$M_0L4{R0@G-e(&i3n34!CNI46CaISKua=6v8 zW3{%4Q}iyY?d{1>Dwh-+xblI_RFIUcvVs2q#^Jj6$^(?53`E9fuU~+n%W=-DX`u?7;M?oq`1NiH1e~1H+q^S6uob`b<3YP1zjU)H<&p+C~bBvtU zm4U6y#VOe>0?$@4QaFvtyFnyk+-DqpJ-U@3sVBu#-Qa3cLXr?2Co=u=fc0f^#fB4_ zEZzFFNUy)wtE3hWZ##GA0a8Iygtm9DxTifHFxpVK`I|rrvh2;>6@Oaisl)+b4STt~ z5iC*xIEz#rbl;p|x|WsN62|40GUw%g-ny`@=>u94STI7ex9ip=(~p^qcgJyd+Z76s zt|IZrq4(;lY7!m2H;Mr@&La0`wUR%aadZLSy41|ZrXVU&qNg$+d46drMTkXx$O?6TMB<9T*EW(%c zf?>2h5oiIaFWG&LhO9(@#CP7XPveA!FX{1mbQ~!f%eToEY=mL zV`znv;f)h#$j9yQt?>&*P~rXA?iTq z5)=ZwMe%xdf+HXXSV+`sC#E8Lx&FOF0>Oh{vz$>%QdDpdMyKDp$He5do&hjEt|jZ# zlmJ5)eLoRzx-lfFKgq_ihU-&no_?+`nxpOL^g@sl0&?%M7Xiq|SpG8Zkt_z&pDN{B zrC6_{hn{+=2?2}#`DQl|b1_Ls@M8l10GmOYdeV&05;eM6!tLb_PI>x!bOj_3Ne)H3 zFeJ=aphG{OtT58=kfN8>yfJ-?!_9I7_33qR;l=&?>jeA6;Yb9n?N507Q@kYd((Poc zRY+NtEBfaha%7Oya65YB-;AIW<~o!@T#WDOrE>CsC*19yu&)*kQY!uZ`01f6s1_9+ zOydbRn$teFIE zQUe=pJw*pDeLkHW1}>T^pBd#6TM=F+r8gbdc#PCfbB)Yyfl{1tjy}Cupp_S^wb=UD zXI`;DjA7c92WXA_%flcjDpi21p~oE%1ZF|&7W-+VrO!XyeyW<*{{Su{Y@3!Nl|Z7u z;n(7^ETa>L#70)u=b>|ck?1DHRq9=oqM)ovr;qmHd=X@Kpf! zJc)pNsgN0Mvmy@Rih@z~Gml=Il`jAwmp-B4Y10W{-Vu9OO#Ln*zujtCWK5W2$V{YF zq~|}xi_O9N(#cs0M*!TKdhl2bEzT{W8{|>MRu+?HDQ50zt>(^2l)pAt*r)L z(Ev;;T|6P^a|5Tb_Jz{boUTsViA7zs2_H0CiD$Pp8EHkFqNp`3aB=HdEZSUHMxlwl^Byg?URfG;gjQ-|&s3eNsl)pH)+#yDdwopN-5+z7W zj8w^Wo;_%j$L{sapsI##eLLkBDnnyBc|CmND6wdi>=dChjnozFaaW3Z zv>Yn4+nMW5-X`7vaPLmg@&{j@@}tF*ixQUjhE0~f zX1-DMWp!a2DpVye{CNKWPP%|$NgxgT>*WMWaV!DhB>7hQM~k+_Lelexkx#8-)2krR zk4QAYnQA(p}T9ElLw{Ati}nUX^@|UUl{2Xd!n^sZ6$|=XH?->CZ1oOF%0~ zFI_Ut&sLAM{{W4xA8Y~ODoSl@4%+dj{x9!X!g97Uj8&?3^GYUgzjV(XdrzcD#etO7 zr$5wbeRqmfz8?5WU51}Ij=sFb@gICjdXzq9Vv@UaHC0@Hsb2kkGwJ*}!UNfxa5Ml= z$HP9g#i-0A_?^KZw^Q?$AX*25~bt; zVM~g9*t^9OyVi9zXl|Of(w7zcbkwO>Qm47o<(zl4X3m&q97NffiS}-Av%7YlgjnXA z%g?7ddTkWPPZca_miFac<33}Oic!fN^Ct05@0hIWuFJ+bs`@ouG*yKuVR8HKmz!KT zAXeS`!*2)e9_L%Ofd$>E2>yyjNscQY^CO(GEefqlPg-Zv-f;^qvN2SCLw0$`=||v) zf&Ncv+g_59i8qcT74uik=Hs8!uabX|@k(6Pkfy1&{{XMldQKWrj}8hQlx<2iJIb-w z-Ly?TDGD+CxHbu5B`2;-*WT~14zLWuP@GD0Ls5GEBVhq)NH3OR+wE5uc*@_a#P;|Y1Yrpjs4(qto(bV0isZx!`S(Jm!bM94R zk8YhzoKOD%(zZs|&+`lY;OR%-MM?W^&h7H0D*r8>U=TT zXhtCz>F7gjfKFqusyH+1x9Qi6{{SK5QN?}26mCIxdf%h;1I|4c(PS+%l9Y!+MZ@Y1 ze5&@2=J96!dw_NGyg)6KaD)A*GpXN5s2&8zw3)QfQZ0huVRu@YG6XK)Ud z$_?*47sGr@w$#w>yJ&0aYi^FGkhqe?fL}h|oh*3uNWieR0D=v?$*o6}a<~Ly{v;{+ zhHSy7NY=h9_yOQu?4#XicDizu2}?>+(bJm}bsX>Y3x0vt%#ZR3*l>x3fCP%=llF9s zt}p4*r5TF*AiLE%ZkugZjT77WGK;zeEWSPAL>6(m_=n_N`T}@70Z^9`A_(Z_*vr~ z4c|IWhPd|g*FQ5{n;**3E6b#mPJs8x*VjIo^$8PYct~lN8NO$huT0~}@f<3vj1hvt zvdBJmwWCG&KZ;Ah{v+)>j}!3iKJT|Xh-mjP?qO^+we_M(a*WTIUB%-8#r3Pk@T;G} zP7-GQrKKfFVM0bhj)UeA;nsDIn3jMy_(FIQ3iy4pa4! zCS6%2L5O2ceDsdg)BgaaAYu}Xr4n?=zD05vKV8}D^NPckdN(Y(N6w(e%_0^~|5n<`l_U#Iu4ezWGu00QN!xqt2%BJQ#h3xF-i>s!MjOomK}Nxh7@ zVgr!%DgNCeLX&DRV$|*P=^V(Im8k?0Dg(7MYJde`tu1KMNgQAoY5c|emY=_`Kw4V0 zbzkxNi|~q4!qTL&H3vHpzP%}wPaR0em864`Hf{9Wk2K%z^*{(VV-8A0v;u^OP#5cO z)=}i6irz{xFr|->Y{xbI`08p+oQ>ipOGp^V3MY1{Z1O(v4|B&3MU+vBH;EYYq8{Ge zGcAgqfD1LWBVhqbSA|7XmTnKgzpw95{Czzs!%IU`M^Vo_S&=5?ld7E&0^~JEGF!cMH|-*rSaF<{+%rG6Pt)b36F%DI|^4= z!Qy6~ABRbjfiNIwDX?p>-*~2Y2gA_u{TX<-{-vX+>uSb5?uTMFSK&ZxA zw{Z_fhPu$=`2PU-ivIwM_6ih{;7}jTi-y={?W;nvI9y>oN@gWe*Lu|_<-E<~Yj|&o z_C5itF4tRLQ}Delc*kE?u#9zN=;=dlmX~QQWB#tJ^?x=aTVhF)d->VCG~O)ZmY1AE zfU6U7OId|YJ>ys|PY#s{iok$hrcKXRir;as*>~T>cM^|rq1b9O(eS?4TYQ61)rwDB zTgpybcRHA&+!xl8Bu$hOkjt7F%p;aSZ9$)`B)%e75h-O}8E@eQ>sz>B_0lT-Io#^$ zOI7YaD_RQn`bL%_YRHVGI5Fls1l_^!eQR(s0RsRbO08_cz#9JEGkCStDN_otIdt8F zy^W!t!g~7M?{#qQyMEL7W(RMp-0qKu_PTnKi6>WD3nhq6F)2C4^sm*BnKIu3mKXeh z{zQwn;vC=TL~Zr1;OS;>g|+oPsFbV_OOJB>|w_>XpJ>GuBs z#(0diyIP*_M(JmnRAsur?0g$N@)c z$D`tSS!f?m`%_+8+YxhB79@<=)C}oZZw*LCM@x3^E}Q|mZ5kcBO7#HrvGnW35Ti9} zARI*HUfS{M6eKvrd{Tg7qFRlm$L=GZsdtvhq=wAfa5nPb`~KZs2vU?uW=(o#{kNP^ zDh6OG0o0dsKyq>g~5^+7t?u-RFya&rUshWfI&aF4>;{02F|Uszx$W9ho8A z-q};q0@T%vhat43r7sprSI!SlPI_$#01Q>dm8qAUQ8S9=qy>}|-L3JrouFB3ZdnqP zs;Q1nTZ?w?`h7ogB3UW}01Pub+}orVhnmwCW)h_&S3QGezKv+i)lg+*RJB4yODmif zap}<%8AJtwM^WCbeBg;GnTVwa60;zZGRn|Kp0aV%+*$My>@`To=D6c-8j8Qp zRkFpOp!LRHC!-Z!ue~98Z{k{ugHm4A-(NU3IX)upv}d2FthNDe|%UQh40k&EJ4O~GMSI)7F28o`=# z0K<{H7O&o|Zr@+O&}#%Jy&S#0kLo5#4oE!Sxp$w$8K)!!wI5N6xTSqCW9?Uc42Jmc zykj3Ek`2tsrYb>`Z=eh$;tlrFw$MUSXNUn?&wa{k|5mt4QN zQu$Q=DeDcVia}CXfDH}k`sCnj;ttX8n2RNyHN5$@x0bz3ef_!;_-sYeFb1ycFW6%#)>^?=xnk; z01QXB+pJVfWFPip*E)67>3AbgTQRLdGK_Ii6;(2No}P~{(T}#El{zY{^1fdnyV4v& z!exvrWhezyGm6k0z8(qF?i;64QqG&Y4nUzKtwhOnkL%D?FAyXmwiIge?c#|FQqlp$ zhpQXCZ?<}A1)cP_ZjYNQwc0jNN;YE~u|;$vAP2-4k3kVWVJd(18Bv8UE-TU|d)Q2x z$|AH`EOAt=K5yF?>c3@4ZN6{TASpj(SpNW)SGJtv$m=_)Xc6445hecsxc6*7dpeSU zz>77tJ?9F`NJ#>WvtC*LvgZ<-#Ae8mg@IDaR#4(4?)2l|s$p=#nV$P3@{1Gp=DeUr z6VbWZ`H##)soauhU(HDwS#45a%ZDZr^uDeos0X=A+rG?Jdj90XN{T_dRP6(5YFaA+ zk&C^rmhn%q`gLT6c5r%Amu3M#FpNwpMIsN(TiVmWN%i4L268VPwb59x3Jx2)MS?&z z7>3pdm&cT3NT`7yTe~rMZy784`*mV*24=tov-0@-z*wbsB&w_~8@{pYJ)p&_a^jk# zfcj<6@6~XH5*gaxKHb_1taw6HTCV3Ud31c^BUIbw;o*qNL%Sy1w}JG|dZLgWE!`ps z37|NGRCDuV7)xE;)T6W>6~_Tw`k4B4aV@~11x(%8X%I}c1eC7|1p)2)9bg?!;0f(Z zBt`R*M9i5RLN{^y?kkRtnI(tZ34=ZjPCFaFVh!?y*DnR<(i(5}ewYYfRXvY6v%b^bjL4NJ@qhN~?;E zT8@k}-<&JdNiIsvn3TtfrTW^?&i7F{UP(#-)paGVSV0kqwC<-V- zs_&QPpvSxVb!H_PLy}&t-98{G04+r-@SB518u{8HBqY?3f<<WZO6yd!sZA1S6w!5>Twij`T0t;>kBD}z-taQmnWTFxV zB?1f5mM$}Q`HsE(Fx8KS_@}|%DH%P~JU7OC15;id!>2iSQSJOgw$uE+))Q+%{u577 zWm(yEeSH4_{L%RT0Hpn5LH_`(@fuZ_he#`INxy|e9EfzAl#m&Oaredk820}F6zg`L4X@%l`kMW$dqP{~F2;Hq zv4g3trx_bbFx=u*0$J^5 zcK{N_tDa@(3=gT=c-LnS4($FIo{ooxX?|(kYHBLa@}nbCADK4w;k$8IjklARWgZfG zr%dC4GZffawY@*TXw96dygESPhwuXn==A_soO6fxiSVBq)ciQ@^*nAcd`nBXd%a)! z+Fi$StKt2|tfAS>bfa1@hP7oGjD|6;P?EAUlB` zKkHxe6)9@sD6r&%Q|JQ<{-aTT6L^Gsj{zg8+#0%(J9BLiVfngJ(KJhy>P|B4WVM=e zo-{wocyG5kN=&v%e?klFD*lky_>}aeb(nwcNC0GC)!bF%ZLMD*`DI*Y_%DW^w_Ytt z1*q+3?c?7SnPjCPB`PKIVPAikj#7DX1mZWl^5gu{v9_4=i|R12H&ZdIQ_34jLc=6r zNELryI|^DNp0??`V=5{tF?Q+{pAd#s3}P&3IG%peVmJr zi1Ip@4b@r70V48ZsK|SJbyZP8IGyWf>hwIn4HYYxm4}$6m6KeO0qa)DsS#>VbfcSN zW0P$mjko2buSY!*gIfqZuMbK}3B-w*mYmHC+~=3#0@a+Ajog*SaY;`cf5WQ;vl1QI z-ta`aKnhdLQN8_zuYKBr0aZY$0LnvUwYc_7C+y!$5Q-A|a@qIR&=MBKAcnbZIS%XR zh%Rz@a^)>N+fej<3+QahVjZ6FNeFpr!!))QzwyjB=O8tBiI!XqQT}VUHC%Ii^iZJe z)N5ut%d-QUg)2|~XalLXRQ&tlsjA9N`)#J;H%?qudf<|P_Gc^_hku=*d_=`gQ;|f| zmU;uNAWdCZC37N!CKU^+zByOZqDz*g5TZ%ec=suY(GnXj@eXtoyXA~qF z`Zb?e{>^_J{ww%X{1ShKkA(jK54(R2>@_>DgntY>?$kT2n(mLpecys>OHaIms_mC> zcgr~8H!-fhW&S_(&LitQdibTNwAsm0w{0L$7kf6G3vD5%IvKIF-c5a4(y&&XcF z<5>P#`%cf|PY3t}@hxuqyYK!W_{Ueod|SnPyn)$I}H zdi7sT;bi{+$XJ-Rlf!^RC|07!Z2e;giJdVLft4!}bCczEBcHvahJPA7Tet4Jj|%Xu zI6^(nhkd6$_ww}iLUM!})dgQ(IL>`K`j`0M3aLNxxR?I`u3|_G*fRej3MmcRJd-`kUfc<|JUTh~CCAKT^K`03!bYDqP9` z09xWfBNVU`&~nUwarV#f*<*+LQV1?o#|Z@M(%ik{YHN2Z8>q4X*+{M}4{vL(KVH22 zxgyCmJ=B)UJ!0micmO^UDU%<^#h`OrVHW{M%;uX59wbRC>6fAuRE0RxFgbF)S|ut4 zK?*pSRMz>88M>G(?t(jqhK(`Z9oda}!pkzAh4e49ph`)$W|Zk;9GS{0EC~n&lXl6N z(XCHd3s+Jz#J0v#P?T+qXk24Cz9_~pX3P>(hM_DiU(8i03Q_R@r0VPi*f2F7P$Z=Z z#2~dPL5)%|k^HYVO0fEM1d^b^*i@eR=4%AE-SGs447RAXv-F6L-PLPpw#gEsDJ_X9 z4O<(>HTCH3prMF{0kgL#T46-7jVx5E89=&LA z(!S#qq<}d%JvZ~pF!;VAT1mo}QMHbD%O)PM3*g=tuF3B^eGOrSu$(mJN!l`r z^sinz)RuUuU>R#DAlwoyY6o-K-x_4z8F-A;B~@;xUrIo-_y^!ERn*q-%^f{PEZJ%5 z>S+J!lW9{b>}JIH@3voS%Aj@tHH}-%gsRnh3-)plve!z+Ks*HYBNsbt0=Zmf6#Wy?y#Be!cayD6D{`4MTNo;dx)<{{T#yr35WR0cU@mD_Tan z@h`#egL{@?t==T13`@AVLz`XExS$@OuN^c$%f7877nYX*{Bq|!(baLj$fKY#HF~E zc~l=wzQzh`8T8LKbxZ)TC60Y_=lISjxzh^H1e1z{Y&7r63V>J360*yU%jqwr8THBb z=n6PWYT%CfX`zcIZX^?f#+n@+vpVL&CW0A^SePoCipS=%gyxT2bxhoxKz7hC5JIZu z!zHLa1YtcFY@+$2FvvxSnHYI+<+nV0=c7uUfk`=yT)s^bq|2CvrAaAUc{N-QKAXa= zPzq%%D7Etik(NsJLzf+D${?3gLO`uG&%4H2jxfn`pyJnSY2BI?_YqN+7M~&k3R{z0 zmCva3aKGXKU_Ac-TGlg`6IBF<7diXTc6LuQayJ-^>}8kOjDO7Ho)1>5rxH#O!OC*p z-h(%V=LEEs0f>^vr&Cyx5@ojz*vJy9*(16~B^LX7bJbKZz9iPQG}(k!Wk8rzai;jG zPt9Ucj_|YwiBT5gRtn=LdC87CqYxZdGv;s0E^v8M48)ocMS12aulEH-lvUk|II*R+ zHzMNVs?J}hR4%4_44{jcnQ1cz@_O6~dBFy$bb}qlSjL$pBZ}d1`gKz+*_6j2R)5Su zS(uYJrJkFCzjn$pgroAsNT&uUB~rtZC^hMQSmIJZHw1o<#1HNiuK=Jd=CrPD?S7Gz zm@!MJf`nzd$t4aN&D+n|>Sg0f%hj*&&+)u7F_ZQ~z6^_jtDjIg#3>j?Ql)LFRl<}d z80EKj2RY}Xf>Z`Td+Wg<90HHxeSMNaory$@H(U>C>_a0ZGEnE(o`KM5uV( zDGc}g@_;*u>P1FXxR=aY$u_^r?za!6Tfx!Llz`v>tk}L~pmQ5@Po(f0R%gq4C+SxnB=Z({tQT~;;e87^fjv~LnUX`uA0Ix0eeTarUk z{j*Xh0}+S@0miV0y;eI}M`)}h;`T;FzFglv+zw8j;lgM|9^(Cb_l)i+0=xj=3co+y zAx!n95v|Nt;vn6i;;`B4o_+dqQZW*9Zd&&CtYl9}Q(>(@>HWa7*NpFqAO_@jJRblB zLHfQeTYlcn-$z11UXDq~WPh%3Fr^ffn*pKq&Hn&7WDca73zW8rP9iyri8yTN=}EYw z-(KwiQdE&dj~Dji&=>-GhSo2bB(b5R6y!02^UZZ4ssy|3?Xz#|0t*QST)~K&w)XGR z0oK|glm*mfn^3yEJA>DwN@Ar~l^gqRP@2;&Qj`MRYfSw5+h_|@>Zp`v)82~B{-4{U zI3J$!ip|2JmN;q6v>f~7KAly!86qy}S#0I@o| ze`W%d@k~^{64hv~Fj?#G(Lx1k-TT7R7Nnd7Kqv=$zb1P7L^4dFQlo?ASfOR-)USWH zQmYJr()!i|;uw@Ek3DMdw<<&uZmuciRdUCgXj*9X_vfffkX+ZjAc-jo3QHVDy4ttX zHm1>;7E%=**&B;oVT$>XNQKNO!m^sV8R&bg69^G@*uG>ER~5_mjw|0h^#;!D z1REMk5KUBS-+}$XaUG;)mQ!?6yPj(tpKgH{!W05jky_cj{{S(RWSmQk7k7i{i=(c) zG)qtc;qPdgHzmz_DCIpL{oMZmTyu#bq8O>%Gas55E+`)`hnNd-Aq_#VrnvX~?N`8MtsO~wl zn&T~@_Wqz+DDQgy^4*|;MP3kSE0tf)pSWkFh`8LtJ1fj8(`Gow+x6%wazLRD)%5)B z5SB_+gau;HUi!f|zANiP%~hB%RpGB(dt<369uRGi`4Pw?!dKzNwYjs$hMgg4MWIc4 zU^wH9bJd1nzfehQDJsG-J3HH_EWP9ATTJBVb^WjbmnR;_QY!R#v!oG6CoS{r#&DGx zSIh$17i(={r`Mtcvd9crXX)|l160DI$Ve^Kt<&+&J>7hkI8JW3qtids>OvF_CK_Ay zq*y5>oB~09y7^Kw7X~qJ(p$ZA$@_m^xTt_!Fv+y(z2M3rLl6w3bDw9i8OHDb0E>M3 z0;pe`AEr8z!~&wu&V8Fm;W13b#@Tg@hAdAof0){>weqjs^*#Ej3o7u6?epI_8kS7r zLP|jbu2^=|zm$6h+Tg9FERIdc-#9)00MvyfCbvBz=~|LhN_v;6d@z>&o40#fKhGx46 z-F2{21ctj*gT6++If&0uDy~-|Hol-WPwCVo5Y9jeYInWjiBgglgr&m4p{+L=8dI|g z`^{Ll2ZwO}BK! z!F>M!cSceGKu{*V_xOYZlAu%))h=4rt3VSdzg68zyS)O_4?KM_(+EqF^aHxVA0(?0 zUO-UM{XZ}krlGRC^l; zB&CCsL;1Zs+6EGp0x~}T0Nf_lpPnk*GbTUGIRlL6-`_avSs+(l+@D5^;UmI;YAX5u z81v-;YM=zDgH+oo1aVFcz(1xj(UOvC4ei%naV5|JA;GC5Ca9-;pmSC`fGC~e%J2fk zt6RIfGkqAOpX6T%yAU<8$}Uxz@b=Lxq-m;|MXn0TN_yIU{{T*RP4-8ee;4X)}$Ar@3!Z>m9A%fR*vsa8Dm~Cu%^lW_|xPly!;T*g9 ziy);*O$IZOP?pj4lSe@_%^wz^+)) zR;Fs~`ak#RVI-*BB~~3GK?xNE*FZIkEnuMv zBTsEI=^hdwZOyJXP^c{`W`X;4Nr@^`;(c4+zbKH9pc<{#_pjz8jMnodz9_bkEleAK zS~?oi5l45ZBir*FlCj}Jm?-G=*jFesvq)=h5MdcI$j~4$qL#D%p5jtepaw+#`c^bJ zbW4{pAx5OPT=|ZpHfXSS9mHeX67w|{f|e_qv-wxkg8u+&NtQ(FGaYlSImgz1jG-!A zl?C`stH=j^52R?njCEBSDAxNVm!!tId6@p1zU5p(F&5?AFXSdsEIn74^lal@u(3_9r(z z(^%GiC#|*;R_k}KqT3&TYxL{UB3M#cu(!XnN06Ac1q6dtUtyP49hj(^jI~v{H)cSr z*RRvp`*guTMixr|)_R_z-5M&9cP#Hq{A+%3k9Tr{dK`Iyq%Hct(;vN%QsqW~_Vm^l zoD%5-F%>kYSf+R1{g87{E_gBR?OhzGvRSk`>ekTb4RGO*Mus*Qz`dK?cfFh{>U*0T z^bC$m{p+mXs7(o$r4JJ);=R0HQUuA$C0J5ba9x@|RKE$lE*-ar_UxiUUzHf%E+p+l zc{t$o&)4I>Sej-{C8(z)YTUHxd&jEa`~?UrpmO)MoK!H>WL`H{aVSE)$|OoHQZ|fZ z?_YZ>tSmDW(U=yIic}7Up5_nBDLP@qb!A6C95!Bsr;rtZhB^22w>$pe{hcw zhe-h78j7Ec;^>APNnqB)%$&8TZTYd6reyNmS-QYnEhn<8$is~X&puwhdG$pHP%0#Vr_0;3SoMEMMiK}}BJ{1@hvwNdZr_IH z>UVGyY7&+eF6CuBn`88^SFbTN0LT9T6Y))B)Xxd~Dj0Bz0xtU1-+0+x9o=e2xROai zTVxK{gby}ZXEo2i+pHyo%v{wg!sGxAcX8jOGc6)t4=F#y=0R$`&U#eE>$UEqvql?+ zPSqskH#KwiSDiEv_Q-*>`Z$(bTyJY>kqn zSJ0R8@%HuSu1x%DB_|0R4wkpf1za-EjRO!-W@~3!UA*24mv^D7y_pmZsF4=|dBdMi zudhwYnK453>sL9yydyJ(CSeLrAbkPMXMSTSsCehV9t-ggZ?B`RrKLSRc*tWdIEg79 zRu0>*oA(~Jcup#8wIrd5PWF5AY_I1Syk8G7DZ>5>4q1aAn_rLL;WNYg*>`=%Z{g6C zw(80ZArQSrx2PNrE1Ro2`ltB+0QoHGWfIph(i*Rla;@ppYe$vicri6B6NCz8`kL5{ zkK#WYe-=N(SBQ9jb=-D3ehsY|>T5zV?mK-aQ(9Bf)&BsdiyL(ohB^7Mj=sV4-|{(2 zk`!iwfDH*?9CfdyqsPwrYJ~7YO2{;+s0HdZe?c0<;2(j!SK;r){at?dw${`B6S46f zZCPu>Y@@3)x6qE1wE5Git}D}v>&SnZ&6mdi0F5q8l>(K_NB|pvN{Q&-5$pboD4(e& zVL=KBRwMrah-+&?bk5P%=Wh=0Y^4O46gF_(p7!SNug`o}3b_S9&})WVLB?@wK z*Rf{uj3L|4M^PO#fl8KaJ>PVBGG@-RCX<4yWmpqqw_LWRZyk+lCRmpEZgw3aO-*#+ z*|P~0MK96)pM-nVPhZ4*2TM<8w{x%JJ%??f*+v-doo^NF*+t>vr{DfN^MYt zOD7RO#geaD)%1@u^{FCf5yML(9L18r3$li8Dh(-kq+pWR!v)jvD%s+H;RDK4;ikr7g$= zyH%hjBN-H=$&a6VhM7Bibm2}+jo+50rRAo$) z{8U4`)50}ocZimMT1LDjqm42 zTS_I+uF!4rzix#kG7~mxW&%`J89)}$gVOL>lIP9Bppk)@oyZy8`diWfd(Qs=y4BO| zywimHctR7@AjTS+k<*^Mh-t+%)RY@)!k(B+xk#3&!Avnd%~+5wT<1=r7f=kDcwAg* zU5&Z#5$pI=V>m*6yfx<;EST%5F4_ppls9>9Nma@2bV*!dYOHJn1|r1WkG`H}6PYI& z2ri_)XWg>-);`hh{4=nW^j&B~j<)?dXlY4?{Yc7MS~A^-X6z}IFWak56Zn+kQZS{e z=DYd9l*`j7u6b7t;N65x4wTPqFQO68tjlduP1V?zKC=74c59YWpS zQ07+zP_a|ir16K;>x7_@L;R1HyF)VgkvJ8tI6_9WYwZ!sxRPCjs#FwE-r*l}6no>N zAqfsHJvN2R@KkWH4A1&&w0oznDY}CNg0!Av=<`pd^%x!5mF?cU!i7W^#O3U5&Ag&% zYgitUL~LrFN^Y?IamPYTqLQLTYA;X5m5D-w5TNC#OAx!6vQ(Ua;RLyNzfSvjU@21qYQTphT(8}rh-w$TOs3)VEgzdJ zL7p$DPYzTHeN; z-U!i{`OVQns~&GPF>O5J747@=MFIdo4ixp@C)-$nqctivZCHNb{W*`8q{!OlB;*LB zxXAwi`>)rfmIrI?r$5`JXu&PwI>C~uc$wYZxAq-*!TMUMaTIaEbQaxvbNl@s zxkzEC@AVB!!bxRdBE&WS0HFtHcRO9GT%|49SZ#illCSN32}uMvp-znONqkwBRV_rU zE{*{rxxKW1XlEUAi)D#nxSL{G@0B0B>ClxeNdcIQ_viYHph_xPavbSx{{UJQt#>BaCFU>2~tCWKrA`Ix;?-_`M1u(yxvfzg=uZ{dJM@*#uShk zXKyp6)bxjB@d>Jwr3KZ+&yjrd%S#A89ojLD*zLe1m6A}E=u^iIL#3A@g+!cJGy|@X zQn_knl{h@TbnW4Wk8>$2ry#W@a`_C=IJNuzdIII#C^eYtpQpqURMm%43q1~WIf0IyV3wEqAi8MDpc;&B*omQqQ7{7o(_UtJmu)9#6FWX8&^ ztp+(x1hdi3anKbkq|&c_V6rA4f|V!+1o>s86Q|wEF^j$1Pm)Nm13EYTR^mMSDO{}Kd(`P z5!Hj9n(2I^5(^cj!CM-TTWUwL)iMs^Leq`Z#l_&|9x-RyKG_UNAOb7TlOM$*3jWwG z9csuvxqP{d4N>(k%vZeWYIh-97Rl8oc`Xu6$mOXg~N31 zqLZ;QNmdpi#<{jbPLMb85%Uq+CM%Xwu&0a0?BM71H`*n!9s7E7XrP-dWQ8OWt)DBF z%OKgnv(z@uUnw2TL3t%b#W3DIG1btOGF;a`E>TamnR3kon~Jfm18oZXoqLT5n&LGr zw?QYA8p5A84w{ylyD+hO`|Ao#m=fwx45kELnGCw;3MV`&v}!DiK`CrLflsH>`gU4W z4i<1g0o$%#UhzapOz^BrD8fl2A}LLdP!#nrifw7eSKTP*1^)owqooW<0m%om7EHk} z8WK#zC0;Q z$5s9oYRgT~@jmJh)zj>I9@D$hp7-*TyOecwwKTNjAO6pwuMJqvaudrc5IXTc01RG<;jIpK_f8TgqH1vBv4At%XO+Le0!Q~^ylhnmB8`8K>q-Wv?u&lY~-aAK`U5P#Z3F9Ze0dqm4zmt01SPL{P*ap2Z#E! zxyhKXsiYT15(}lt4RVrLm#t{gr@VjRtse{QJMSIs^!xt+%AG6| z&u<}Pr=_+fMpm>5>U}eS`kCStBse-= zFnF#b{&x#HO!Q)=rOx8Tg$q1!x8cukr{UidcmDtn_=cqPHM|?dwdbdL&XlCiI*`); z0HhVDnx>&IL->oq*U>(>lf`fe;^ibMJW>I6vu|-mZCcUiK9MmJIK;}TOtnY!PpHcH4Q%aPyN>B_GH6Ma+-cgL@ZA(dOKVSItJ_F81z`!bONOh`r(w<_{K&^;yK}lygp_dYX)=qB zImUXSLWxjMiNzlEyK{|nO#6}$qK3slb0lA3S7`eYe791FMI>Ta^8=K{dhx~e7!*J* z>@QK@C|X%BFa(;LojKFJ9wF6~Wg%HDB8kr14aH@?1D<-SaRMwk*Q`2_kP$~yxi%eZ z*8N~P%G!?+je$Z1BBR59rak&#N-j#3Q=V1H%RweD45Wmq(ve(?zqZcMHt7tcL_Dks zXBhS8aaUh{dX*)qj}sSfk)hiDa0Eovx-^u)4IUZLM|kQ(xRZ%)#3jDztf_y zaQ^_v`ErXZ!dy`)1PavZKLh3mmZi19OBUVb`@Vv4@72>SDsrOrVtI7@LhG1AU<9b! zN^9S&3ohYig3vc%kT8MiLVd@pi7iqblbJT@oIxOfkgO^J*y{pnYDP1}{$klQn6Q&x z^na~%$U~$A*)|^#HB2Fd)sGHcb&MlBhbflI`HIRXrT+l8Qlzm5QP_&jnnMBN3I(?P z##`B5+Q?;7aa5lQ-L zRuZsCM$X4j4pIFW{{ZwAe}*pz_{Z@F$G;suG4Q=!q0ZNkNNc>#?01^GxuVvyrw}kjViFaL&kAcL~?z?`&y`Od1c3RM_Egdf5 zh(kwGFtLGc%NV|m{xqb|mbtt{p)~Of*oGA-5biS|n`GO;KB#`gwBS)mch$BaPp1+uatVJ$_ro5=Ks+Xc(wYxVW~M)DUeP6~O}o6uMB7`lX+ zGB#X6y+tEWw2bCOe|%<0@Z1s(l+ynI+ePsrS;B-lRkIDxCmQbXA^A?N+dM^@x`^R%k;4^eo0R(U<1UkIOJ_b>%k#H~v{wRbFnu>I|S#l9EQJ zy)_L2n>3+IBr*$Hx5y3k8bKY$c^=L+7yhQ&+_9<&QyEfE*BGYp$4_v)FWvwscv02) zi;izm7`$f|l(z@;or!j_@;rbkaG)t?joD|S8!2*Y2$KQ*r=oQY29j_GZkM6X1& z{=VPo{{Z5mcuLhP2yENiXMCg0P5PwFM+CqJ{zl~IpO&$%bw3`vUGgGpO$H*!FFYz| zmCvtRC;U!ISd`*pX6Lm$;)?pPI1(onz4RV!pOhD+_~{LBgmlQ18(D4^K&+&mwIY|- z9A8LI{{Rw~<54cwUEwyqgB6s3H!Vaq;Ry!d+&Fo>bnK~)z!FJkKF-D>T%skae8iNS zur57W^?)TALggLMO{H;$RsdCFb`zY}Oac|*Q3b)Msd3Kmu}aY`Q<9P#{{Rv<%Rcup zh%BY%J?bXp$-3C(z+XO{5Rd{&lJ7@)Ij_yntOeAyDMVp>{pqH|+9rc4iE*SWadMFx z8W!r#ez#T7m4xD8g{z&ctlHhTYn%Nk z_Iep0y9Oex{JlCt>YT8$pdAWfT`KnW_K&3!qO#iswwWPU5mn9He}1l+fdGP>N(J;S zwIB;wQr2bA8WKs;^UaBKo9jkV`-(^p?ihMg@c}?G6imTI zSPw`^+*si9$D2_R&o4D!O!cCI4HZI~LW&7iAPH+zyYz(`)xC)sj8ZO25Az<1W}YhX zo|%>uQtB-4T&e8{Oh04=EB$On{+#oVqU?l{am<5FC6pt$DQ-^Z)W3eXkf14M_ibW` z2~!oUfUL46ji=$ak0YqbH>zG`BY7BGx-3~>ZAuicTk7R1NK-Q!0lVKyL6-883lS{& zjrxB=Bz5JdsK*N$iB?dDIpUY~I)uo?kf7t0hvK@y0Q-pW*B0!2nx2i)Gc`9XcX?TP zlq0zgRl08dx#OtAg+Qn|76JY!SZrc&8FKLxRX>Cm0DD=w!Fp(|G9=o?EU+5p-9Isk z`?%_-5Cy51q z)R=x;i;{VDHxtC08OXfnkMGlH2vG`3m?tm8!KJNIP*PMp-Nue%MZ_|&l&sRYpD+qs99`R5fjLmCv3q+E>l)}8JSJtl%kOEMaWj@RgJvWT5 zHe$Z&koZ{NDrC@;TUtUMX&bUwBVL|graqbLMF<5Z!2D%V843l$kY6HS`nQ|Flhmt} zZMcu5rX@Ar6Cbi*w`k%%e518n>Fh-W*ysI50y<fb7mVMhRuaf& zRw5dm`F{kFbgguOr{)`w8+pa0*k8TN-F-ftRG_6!2a7iMrCt2JU&N{I0;+86sFZ+oF z#=Dlb+HI@>+)BupOgn0*9HfUAj+vAjuapH&v*0z*_p|{l#^e&KrcE)tZTs=`=)g6u zU~^EV07&s94HzAJ{lrPdjnZzSxZz1L`*fDdVl5WwvKODnH2Kahv}0(XPl1~Q`beRLBbe;sfi-pNR~m3Djv;$ zr|HyGQzCom9DG6SQU_u(h20XvkVZ%qa>@1nzo%TQP&s21QJBnuh@JgljTzQYF_p$# zh-K$%{+&XSFyTHH^o7Fy*a=UF9Uo!nb1>gaP{fZ`?&;5@nDRCB=k`>j{{Rdl5_2^V z$>8$lEDsV%YX*M3dUJwdt>s#fC^2^6NhGT1`e*IS)GAgL06bt-^x5uoIX19Vs7!hg zqVLM@Q2fael;-ltHyHvYQ(U}Y{@qGKLWXBUogcc#D;YRKh7vQ|$a+BRw#Zf57rKkP zyb1O9&3g386OAQUKwW@(0sDcOm=>Q2SR-op&LxDbt9UnfK57@z84IUH<@mjNrvd7E5=^@t$suPE$F&xb(+X z4#4lyzLD**wP`@QKU{kCWd?9+4`K{Jdekd!vF7V3v^o0OS?ci`Z9&LmjCynF*AP?+a@*!8ry!-s7UkY?lywPNEAv;a&^N_o&j(d(Bg0Pp zBb|kB837XsA=~oD`HyuzTdMnY&*HNlewXY-B%DMPumbO{L%vZGrGa&AAczHB^i6Hs+_plAqn2LuwdlR(r0!$ZjTyG0a1NfZR` z-8=liTJ1?qv`}*2(~`2iH7Z^qS_8K}oSrJFi9&(67GnPZj>fQ`xYmrFNUU&OZcO?& ze9->@Z(g33kODv^wx-YtjHN3GA?WAVQ-4TFt*R;x5pLAYU43XU(Tw}_?36flhHZ0e zQJ&_IH3F2Tt^v63*LQ{5+LuUV0Bk}vd3_h@#dQ3HVREahr!Mn>q%#F1kVaJgn*Q(v zrAk&)a@Hkw5-Ztrcg^(RN{T_Su&#P{zHmg86%qVGZq)tXp3uLzkuAc3^TaBsqM|iR ze|qVJB~F~%oy+N#(aJ6WRkGKo_Y0=wMxDwEG&M|@mAoHbn*iNb4Nr}&@f-*$aZ|2z z&b7~+N%{7ETT){n83si2QCP+P{Xj>Er~<@f^ z-MXCB#=QW@f8Xo{AcEy3h`)cRG`XG^Cl(xz&{TB{+7TFuKm>scBWPnDw|<>arBq=4 zo%SPy)fM6c3PxFa@;;^`b#kgyQkseHR(dsl{B>fN0j_<0VpO8)Td)KJ%OG{mJ^af( z7nLu~6Pl0t%Q^Kr8BRnq_uECnzS;=`7A9u3Gxd*IqBU|UIb&OEah^Rr{qWaP+7Vqg zi=?e3Dq96#HWsC9{plZ0Qg=kc#~V|gOEXx{{{U@x>Hq@53{+NBFyRK)73q{@Y60)G zljgd&%BJp8{dx+KjYX(Mg`<%%%8HReL0cNum%S-SY2jLbn>|UT!Vr}gEXk}iTk{$8 zqv_B{s6hk~UHW^&Tr8E$Azry%Js(PD_Ue zJfGsx^?#$Fi4vVoNDdm*rRlbDp#Cn^B1$`wRVKKS+`T>R_x1X9^e>~ND+2(aTDnpE zz9TQ|gkhYbS)Z3(`w`CGF)1?CkTT4ax;>;eeebWM@JI>5_Mm&ebdQOBRex}-l1g!V zY59$B;xmu^OP9(b#yD!yjAX|>ZVIG?h9$Z6J&!2!3w2EucJ=PGIz@N4sp{1VRu-=P zBHdk6TzhAtthy}Kropp&#gtT<0>D>S^3Emh^wtu1Q#a3ukqcW zE5blgsSF?1`8_Wb&g)Blv?4a{Pe8wRxXSeEZQ{3e{6i9^VNAtXTvxDTeEt&nQQUZ! zYviz)McUx7FF5D=T|If9u1~=!WE%Q6e~4#>lnRlI235=I#F~3ICXdwLfjl}rzhk2i zuljM2m`ITUQui1tv*`VPJM|gltejK_*RRbZ*zjmTNm7%EKmZRrmcCsg*WP-KsLDQB zdS+JHmAwA|@%GP33C4^HK^f;=J9uGu)UpJ!5GlUx6#oDa-ZY~ejnU@U zu;5M^X)Y2}&;J1B0pD2tLhuMjN3`u~zxxxZIKvew?t~hdA;gyVWP!o)qK~Tpx=eVEt z7Nhk!A3Z>gdBDp8TD(O{1OPS5PgAaOZ|pmR@}V+AImvHv^J-3_vJd{rLHDk(CnSQT zgN2W#&(D->BZmVDR7r7cfo`;JrJ~FK0I3k~du<)$e=aHt$x&GnUPauGx3^gwdT}k8 z)wPC%cG0Q9N=m-qDZ)L@Oisb;`ioCz;~Vs}$)PQ6R2Z1rD;C!+58s}%Pzc3@xFw6; z_hzgXe+_`CNKq-m;1b~NOO1KM?LOyperp?952oyTzfbMy*35*ds-{!s3CmqZ(ThCP zIKn~d`u;YHcY^B1yw@w#jg~x!Aty0HJawxn3@DZ?YCFsNjJ_&h&p&Dg>sxw3ely_x zhl=TbUvr}kVpLp;k$HK$q`zFgy*Q7rv zQ~c@bYE4a&+yz;CFm>vFkH#;H;W&w0Z040IumeieZuIToQx`5r7cO@W0*y+|Dh1xT zcJa$Nk}M8DQbF#G_AJwjTt<2 zo-x#efoU$nmdI3I&Hcq+{{T?a{P}6?CCQ52q)q@r+y(Jlj=Ue#ewMTXgr=1#EZJxM zL-M8x(+Wa<*&?j;YoFHf4|f7_l=R6|q7lFwWrs(ppzSR-r#nk?q6CsJ^gxMC4-X3Y`%LCWUL~fFanjM9beif(wb)J zktsV`VhcwfEs5#JHPsdakwONw?B^Dkw9N=WP)dbZ4`?m!jVPkZ<`&-SmM)^+Eyq0z z>|-L>Q&!%~goeg&k+^U^Po!lYV{J=Qdo;poS&sV zqS92Apvp}qDz!A!fn6E{mxIg1d}G4AQ%_1-n!X9%cK#~}lB?6~yNxd5WEnp@5?-9Q zVb`Pj2h^qTBZ=W=CkAr+;x9xkb=!v7-%U4a) z(U*M)I=Y>_7{$V~8O%VxmB+7Izx&SwsgjVT<1JH$fGVe8T87-|2@j=liVI|rlH1ie zY&k?<{pxq!$8V(w&K<{ltEc(ekirX83>Lj~VR`5bk^DQ%g#E729_DAnI$%0Vt84r}?E>Kg-fT zQ2PG>1VouqROQYikaoyu1UJKdH;Q?f8F@Bdet+2f+{{A{W26Hu1Kr=}~CG97v66kpS4%Bquu13=Xv*GK)w-w*yB zc)!G6G1_=fhV~j}{e2By@4D_^%I!NnKI>T1hP>rA%?QqW+GQjhQPVTNxx;YWJkBGC z;us|?fGVXBA1XNy)&VQ&bJsB_967{QT2aeAW4eD6e*pd@?7RoypB(IaO%E9OYr%Xw z!uuZ+_@lFobi6lP#PxNx`<~)@9lGz)?Z4`pT04STpOYz3XJ0Mg{=LA=SJhB>gC~oc zR;0;M@dPt5IntzmtF(IAzfGMXd>r*l23`<=rwxc)*4hoPlxw|D4DE{<3J)>z#;jAH zF#W#Voq7KN`7<99Qto|Dukrhh>2ffsN?(l%0i0WKb3Yvn0WS~jX4dGuq-A#URIpN6 z&%NWLo*`)oB_QrTBBOyuGI3KN^u7N8P_Mc0Eir#B5u3MaZ?(AXL@NEUlh)~}d}(2E zOJw7oM_l1GaLY+o+?MG-#j14$x^jy5b>SMLCv2%5)>o-&hbteU){L$xBn%~=XY}t_ z0*u6BQl*^=jmKZc@n7!yeP}X_V9RqESeDA}kw?vCnYyfcKO$mtQxN_0XcW~<`(;1s zo1L-;(z(LPH89%mp?2NJ*ni3kNMZNspm70(UJW(obvZy1f~1g`RWj@LJoXBE#L_s?9FGSh@R(B4UL{d_+p-`iL>s*9FgZMyvM=t$5;E3wf zg|u!-%}3HBb+_yE=w?|U6#oFPmUaBwtXKv~O_Z%Iwk~JduuOFT7`IL=}wZJhKv|P+~sXg~`1e%CNl%*kt zWC!y$wtZCp0EyLE%76eDiw_V>hGBNzog!j;sU6s-b=sELkFtAn)oqg);@AFKw!Qqs z+tG)q90S10%!BiF8APUG1Q36XL;Lz=YQb>Vrp6IS`IHt%`CL~aUf0mdO-ZQB`l*6T zm=@rQYBB=7{{T>4mZ?3rD`Uy&$^{3T2d-&es-%`KSiN=pXZV7xjKHL?6YF-`{oV-D z+RzT#ssW@2JX%-vzJQ>ls09#7uj%`>AY}xsiGC5DgLcjh)0ni;A%@l5^I1a{(MR8^ zDcI&J-Ly%Ph9OEMr^|7C;f9{52IfgoSxBhHVR@IUL;nDtlv*lVH=#Ll{;Lm4S{8>w zZTy9OhI$)ygCVUgnV#saV2xoF1i*p)+?`QK4v~e41-UnO^@y20Vz@$)DTV4X>rC>3 z;ja-=m(Bdgr_%USlJ(KOqNbYpkOZK3S>r zQykc-fESKh&!oW4facJ`j;<->W{`~<-BDgS% z*MG!xvalH^5?Y&{eF468i=KD|1_4L;#_RFKGxM$T%39RC2N zbyAd)2^EX|$*iP?0XHC2?+0n?T{yv50w5wMvCsZ`648)TKR(P7QiwR%DA<~L({6B7 zHDfRGp|q?=DR+17A6rkqLm;M(b2{hB9+xs%qR=p=zHTjT`PR{%o~sn+Ijr)l92pw- z!(CBm3l2si1u0$cPV$aQ#wG*=lg~Z2>_bgH@Q&+uUexr&i^7c?id=p8>0=?yCg)d9EKozA0Jd23;e!W-h zD1xNW0at%0k;J8E0?}0FGNms}$E-`I-0o7z5eSc}S|$46KCkwL$}GS#i=V@G%^i(P zaWzboSZ7=Ab%KA2BD67Vuuo7j)*OF+h9#9TJ9OWF)Igq6x|WuzkW1FawqhuHM2B{u z5-KQUWr{~DoK|nsJoN@sVkV%q>FhO&nSx=!gt%%BjYFV}p{`X~DwgfUcAzW)9x;4= zn7+I1l0_NLe6^>{3S8OfP8ozKq|nit%|cqQLfqOUdx#>I*#m7=B#|w1E3ezCiDkee zz58e?<`od?#a3sl^KDoI&OAG#a7`QeL7P5AnO#*_FTo3?q zTCaX)*54?aJ;1V%(ihD+M|Isu#h$pwzd}+JQUXOZ^}b!!&|<7cVnOhwgNie=F{6XE zWADxv46kzOz)0-@cZIZDEb&d(UH0t#>{>cvK_v$g3V)4#a=xc%^IKUMr={kbv;VYh{5`uz-@pB#AdWaOshFO-@B)LBHy&Jzs-+cN8h49i6936=WOmd zRlgA`m-dnN(_DG&mtBl6)z%nBAj)JyrE=YSg_eA%oc%e+MoK(R6cRnTKoqp4Dj0Dn z*zeCzXkD$S%07DC4Y#$;pUEi6%Y%<^-HB)zpZ!bR`50MX%|e2hDFNI#dek<0z#5fj znFl4J3bljRcjz`dN<>S<9(fC+Y^!mBEnLewgq13xi% z9hy5=6?ncYhTHV?{@oFh)HT!b5L7|_BEEii^p91qEKy6Qjod0XKtH{mKo6aC&I~{( zQznf27>DyC7_yYI?#<@L#82ht{@qCh%L{dYpy6qTrl1`nIa%hkv`doM(!N}J6^{v?)TJoTpD3s)GZGexSdoB``M7uU5a$fJBZ%Q=EckH{rw$a>wLr_I z9wPr{w?ucIe1k3DqYsOt=wpL(UymG3B9yCopV!G8YZ@zow3?eV4k5}eRJs&LZ_pM zOre5VLy<)g5AtpDv1^Fb!MBxAie+k82rM_a% z;qvkR@8SOd745riKF_i4JQq=PJKozwhjpvl_x0QB>FZ4MYG@JD9fuBR>gq=e{{SzB zT*aztIFMZhR0TB*EDO=kD9)TFGQ_k5eZ0s207x^Db6e#cUHF0Ehr+*!U7w2SYR6l( z?E#)3^ zWTi;sl1hUx1dBUet4%sa{qJ=2bhP^}>$ca1zi;05r*jl{MiY`c{k+~T8l?o_0N2v~jm1ly!i3IWi6Bs9ekj{(SXAm;CN3P;rWc&&BDd=O zIuHSlAxk#8?@gmu5eq`4v9od+Z{AUnsgz8{FFRPpu_#Y2FCVYhp)CO>mLH9NVZ3CL zkg&p}3Rvyc?Ot}g!lUQj7uMQzj%pC~pOsHBA;v-&#>kM0LpNv*YZT`F+a z<@#0qa&>hnL&OOnb@XnrD^ifAG?p77-q1d_sfHp*MUAf?%C(o@)2kpa#7GAayLZ$_ zE@BG*0P)9B$a!l3Yibg-q{@_Mj9;xSU$N1p%OHg*L=m1}5Gj)afI(mrS7KP?$G6rO z>g%zweR#O4*OhaRUSC{#9Wayz4Po;ERKNwCZP@R46H`{LvWg_;L}eT!UbLUSO6Z9| zH*)^bLx>x=6(sMMdgT~g5o#fKy`_`3j3!Q6{kq`qSL8dS41_JoU>uOGPa~$0oNhN# zu$LP^EQ+-gg%7_{rY5Ok-2P}{$q6NCSzrx?hKxs>oZ|thPxARjKvGkN>(bw+KHONc zP=Z6&uJ7NrT0{hbf9n>`{nkE)oT5r3+fq_gjG9>le3v5STwS@mbs$tqc&BOMy_apKGL*IZtzr>o#Hi`r zvy+I%ESwn%=Sz_;Z279eE<#kN%7ZQQ12ag_;bjSvCA}q&-0KV^zwe`Es!^1VDqXWXe7bcyDXWBw?4&Qc->uMfVbxU^v(fH0L zS06b)PvKVlFVp-Og_f~ZldBp7n^HW|I4Oxy#*>9iwUEKhd_5dKRL(yl{{X}v$9f&- zb=~$p4cTh;-WjXEQ@wSx4%<_`?&m47lIgNFq)Ba8)6<`({{V{pEkGi75i}}#SRo*| zNX_2D-1KpYP9XV=5ipJeSZ~p*g zwBh$YoqZFEkflipa1wJYdQf@Cmf`1r^sxmSU#YF=?{Nu!F7a7w_;+)yuc@gfJ)d(K z#xxstOJd6K+j;i=I=9l~34Cmn00AmX9-;Z^41HR7ne^|shxr0kaN{bDw7Awd7vVm~ zU&X#Kk7=VhYf63oo}4#iBdM(tjjb(9{#RdY`ri_cAL)i_h7<{AnzCr`&(ufFzsLA_ zv;L}t%V1Wv=Uq8cKUX_Q9j|HI_L0+ocHO^kq3F~!G$9L$S&}O%agz^UnkGEe%$y0u zFsR<-lSA>7N9leRPuQ0&1z3nk8Zk{PYwvi))s(6>f(as{M6-%B5nt0EPNWMEn(pQI z=jjh80tPa?7?1JDoXssB&r#D!07R1=syUfVnBmR)V!p3Xq`GJrjN7&_bt!2>j}urp zYi0ZA0cz^`t8s4XumQceBD-bf`)54$DVF%?a-py6k9g#Q$w?TB!?9`>%)Qz$gpWv@ zr53=I6xBs}cLD8hw?kS^EEtN?XaHs(rt7RyVV1!K7*x7zYSVtOc{z67yr#wc$wie$ zMM4q?8%wfR$@_ED5@h32QYe6H%v8U{f#nEst5OiTa*h;%Y|Uyl>|Qm0#C|{d8=yN~ zGED7a#>OFzOX8acuWj_tr-cl7Xsc7s`qB4~1NDwPq!1QCP3pw{nYx(dzr?S_X?R3+ zdoIITyRBWsre=C}*66DFia4rz`q%jX0MK0@@+Tl0Flr6AIrPdtb;kWfm8-^8Uo8Ri z+uH7P0t0fcR1pP!y^xS2IdNW@4b+52u$a_zhm zUq@`+(Uva*WT`4Ehaa-~^_w3TnXr03{jwb%n*sM9fJZB59pSuczicZ`1g$CPM`h$ZPypT`OH8$Ju;z_7jHg z@OGt!s;=DC7_U>0)$7jjpFH=yWdSZ(@5!0 z0PnQCQ?!KPQIsLSk*2CcBI`6)*6zCbN7Q&_aI=mt79+~t^Nqd-jYQ=He*y)ZmpdDD zgFC*$GQl0w2JDDAxG}|D4Zgf*JpxY^gZY0C?cDiOD9~KSQA*2$V$>hK_KK%*+R6mP z7?fP5{MQpN19$tJ^|dZ=I7lsgvfHC`V(>JA615KySgWb|9UcR8;?W*fq={w}CGE-n z{TC5;CB-=tpOeKF5M==@vgR7+(8saUHv!5>yD=t;7PD(ti{kp_C{qYvJzB1RIl_Sk zT*VA-RN=Cwn{8_62WXMYGEu`EM3hMwsT`*2J&)Ks` zR!kL~4;br2W&;2KuD#dN0VPP7RJo%8Rz=zM50{h!tE61kg0RG)qRT@FUmX7cPNga* z2sHt}ZO^>md`QHkr9d?UX`8t1;cm6^g~mQmMNkMej{knu=NCB;JvC}8d_Y8osETtqQqJisAaAIh%88XU5y~gEG-A>%Z zW9nWWq*xa_Q}MUrCDc-otBmz`^XCU?Nx>bewHU@$nFdawep@Q<6^!Gd6un5Uf7h>^ zP~ikonyv8#GmMrBnuNC`B~`U!!dEBUTD;;=l7zXUTTZ@S@gc}!N`W+~anG@Q?GWmb zS8VOwDO6cIZZ#<1vnMA$Z?{)X3*qUv>NFCAEd>IIJxNw)rrlsIZKUfWp&{&MILQs{3#xOlFO+r!O1lRE2x@8Q6CksqS ze6;-JDGT-C82)4VbztuGFcoQzf2Y%?1Na$U5l(tn<`+@|NdY=gYwrv7U@-?Wg^1M> z0ozP-E9kC3AQ~I@-mnltNhGp>^m=n=ui(P{Xo$$Dmyk&#b$oGE^?1R35h_YRNflOa z`0KP&0VK>&rNGl}b&8jXl4jhjWRw&I6mj!yN7Q{f*pNa{mLJ8puGRRAx#dbzmaT=n z>$F$(o1CMB#@MPa`KTPOe^1w~Nnz89pq$#xPW6PnGf)6Bh5*Lu z{%=d;rUUp`)Kh+97n-1GQt3Ka9Xj%XCph5Y72|bLYvsaUul>3q!lG4UPd)p*4K9@7 zQ1F`20o^IxAe@%Me=qYnE?kLzsAr2hHGn7s5~zE$2O3J$li>-o^7b0Qb5-)MtF|u; zZjAcvJ)6F&kVBTmhrdW&V5VTgrg7`NThaoTuQc5>Rq|h_H|guq2}2Aafua8H#uYVu zSIGHWIKo71Wlk2DinQjwg&v;WLzMVZ9~SNFw$B74BqY8}bn<}pO{cA&RnymNKw`t>w$`9Rd1 zL2F9gB#VQHSIWAG$}s_Ut9!R@Xcj^-L(JKKt~wONoQ>LZDarv8vjP5~~gepM^f&(j{a zj;hr;Hc&v8C=MRhs{xiw_xFs$4(q--v+q^^0FJr|Ml`H?!_5#*a9U7|k4z2@q%f;@ z{d>TsB4HpUOp}&FI(7ZWq?ql6P%4f`9{2YBx`??^K?!o@`4-n+kt;*EDvL4)7@)QL zeLnqI0!0O)lP94iH2zz5(UzJq-DUv{+PKK`%R&2JR3O_UpLg!DD)AsK2MZ0~*VZMB zm)h3w(#w@TnEstuct|*EGdGGA5mY1^JO1@NpqOeRi*5YTd9u=y#~1o_CR$d+fEX9c z=CNTpAOfL;y}zuXhK$6Q^GPZ`TlJyOr~JQ8mzgM|#gmFZ>iR*-!AUr()fM#p!3==g zXt%ia3c4}FyWWc9u9ksJfHdphSQuIsj4DM`EBPOWfpugg5p0NUWAgwMftqv9bJHkE z4o+qJ(g3@Jindn$ThG!YiWHvw{{S}Bv^i_ji!b-%Qn1w(8gs6Epus6*5NaycB8{v0 z!EmW?t4{JwIp(jEo|aHjSxj3lkYp$+Br_{Fzs|8RdetRXYJ{q<`NvRkS4g`L4U=kG zmv1&dsL4ykSY&G$s;}+TF}qM_7AC-uYwyawZ65<~v7gh~Jvy>dRPB^Wp=*x(qvEdp zOBSzf(geMIIOk`9l zE_O<(7YQr9rzRTv=Z>hy5_AX9{x*xGm4E>WDetGmc`z@QC7ZC-a<%<`uS7^BGL3Sj z`w>ww2}uLQ=A>5oz_UW=u>fw>3TyRWT>k)Gn@U;6VEl81)Jk2d6-RF9{UgZW;;pJ) zTK&#`r?*xrum;!9`uC1W1Py(CBg>bkA41Qsr@vhLdqhyywcGU{r5ZZsoQ5vu$_^Vq zv)BI4I{bLKWTl#e`-c*vhy;gQ@^6STebG3HVh}kQD&%6vk}ffy?i9)(lZyVG_Cy|H z(Nv@a6GpfsT)w`Lv$)m0(O|{hLgK8sZW?QjdTLq}$vB)0{e)2oN^vQf#k;Rfc7Ziy zL?wP|Jxfk5SIv*7>C-a7`+()wEV;!O<4z1N-9N7A@Qb_FLP-&7O0Tkck9k+=`*o=$ z1SA4(Y4Npr!ewU>DDc&=+mlD7~X;QeX+SJscytrJp+*k#lJh?NGLdAN{U+F#bsuIKj_52(ST6e~|+E@7*DGqf)Ip zsW%!2k9V6>)6%`Va!ACV9awVm*Q^Oa)Igy&JO1EJO-T~rk|tXAF1_3S{T^CD6&Oob zVU_6&l@Nf8M7XY=Bk8(;eBU`{S5lU1faTD7$Ty-P>LX<*Mz)+iWb{h84JY@|-b>Iq#9AUfk+-^(H4SRJ26dWd`T)%$Qg9MeN z5&TkX{c?%5HKIkpSs3I6mJE@rs(!xr(9n|SGUW6+XQP-hn1&Tdru}=$Fl7`!%72vz zjWIZEEPlA^1J&+z^@;{8QdlRaoMjeFub8BtE?;_;HJ)#(kjW(FwSAsA5^#_mDzPo! zSBHKXGBP5vBO`2w041fIHl;J4>%X9;)7w*yLez+86%?nck?Y$q)G!KnLgQ`X-ZbR41*b%S(EBfQF zpm1wa&pQ0YQ{@rf?p9mxQHof1Zc{L!3 zuZFLuvF)KRX9iP~i;CGm;3}&%XCL?K(-Z(67au;cRpG)&9J4+8Q=~BNw9*lFh98tL z6>m5_KToCf1gpf@stpdCb|HCgLc+XHO1<~Uwy{r^i$3h~yvd^|`(1mV(dqD6B-olh zUHV1kCEk}-}mdpe~`~8Lk$h{6z5xhDI0tQ zq^OlFe;We%Hl4J7l6*hg$G7aE79(15iw`gJM*aT)&7OTdI{9?}0Q=UXi!)oDG>=om zq_I#@NE85RdSz;PM7`|f`H0lz^Bh<5h(yPy?axX#h$NRvZQsYlGPSZw<&r~Ixfcec zS>4;tkxTJ4CID^?wk$^T7>!a}FZ=bQ!?8(AxV?ue9G`O-^Af`5TzMGULXaJpONx-{TT3;6{i*>5;__~bVf0WEk|T*96a7@ zubOd5IF(&U=4=7>k9+i>6)D14g!o;o)Ec|=$VSTWtxw4C-s@Cl32N_ocX{2>*rz9! z%FW{?^^3%(78Nidz{=irePdK5Qzyujq=3SQDrDZ>y@#;XWOl*BIKtnWa?^#XZp8uV zRvlz-?ETfuS9@P^0_QrU}TIfPV zvxzkprJcFdW@878N>qgq;3qfc_orV-xBmbY7AEi(SOT`)+gV>v-v?IvCC(Fnf7EAq zRFIUKH!o4XkdwxBBRvg5qb5)zM=fKHe*APgXD5`jk3nbgLR z@&5pYJTu3;lT*0u;Opp;ly!E%TM8#x+GnfD`ii8iOA7x0tw!C_w70}3H-*BLOpz=C zuvsRfEUpP19ixZ8#6RGfr{LY+kN8%Q>vqPZ^~lDo+a@!1bAh!UE7a@VeH-d>r>Jn# zLkWPfCBQli`DL7WnTB@-G|eF43<&pk(_b?mlU^a?f53RAu7!e$JBfC4l%8Xs{)W)25 zl*B?)mVAXi{+`#@%=pd)NGezH67Cy42gdY|L&6Wb5Sf6fQz`&8r7agIcvo+)2{H4^ z6w7i^D@~*6XQ}O)>lJELwJ{6}wQAb7uzoXyl`WAjZ-`wqFU(h$^$2_K4SQYAjO8QD z0xYj~NbTTk#tQZ5vesrOl_i+n$4@VKS$sK=QvU$OVAn&vC`Qp-ob@#3#!;MFuvs=Y z6VscsKfg_cf*cS>W(Kt_DM@Ra16FW7OMYYLxY~sgBWB(kGa%0&UZhK<+??R$Z-qfP z5|e8anXdMOG<)4xYQ|c6lF>nt7|9t}#*|tSaa_@h!WNiq|BS`SR#IqQ8N`i1odNLK+N zZE`^bj-NiTu=+xiF+_1oN=WdBcIWMxiMubr{{RTmr%U1w8f7L+sLMu7i5^)I1IjNM zZob__-~B}66iHvxWPk%TY1Hz9N%|teAskAUMxYWYdxx#xZQ|kDe}}H~#e2TbL$~;^ z#*O-r(a?;YEzpd%wF7o#w*4zMdUT|({X`Q93;IN=-Jd7DDOhG-(0G-VDDh<>ATb~g zf~JQ1$4B@N_%@!OWb1dm_lS6dsijbsww-Fg{IVP2H1hLeQFi-vX`lLoHPR(;iIOf@ zI5(!6Z&rrK&{nbx-YXFUZB46RJo1lqKMDJvfxEN0zVEp-B52MU{l0~2X~G0*QrqU9 z+z$sdH`3F;$w$;BlqyP4R7(`7u;vX%qq{>W`fT16=Bj#Dl(-2X7a2Zp-sUfj{{Rxc zCGn4kJ5Pf&v`+~5W3tyf$#`aj$|o0f z_xp7B+zCoqh&g%shz>GPKZt8k*xlQI#0u#~a*>FUZ*s(T(H?4~w(<1#>gk$5Do_V% z<}~z*tP+%xNg&)%_s%>tP3W>EE!>9UQ>0|a7mGb>>(zw7P)oQ6eeIa1o5YE4F$zf~ z0<{;_xn&q?_H2`MjY#ENz)DG|?jvSz`*q0Tu!afoJqEfsv_hq(Z`?wIB_yyHHKyF* zCwbto)r{w-8cEjDH=<9Z?@gmINc(DKf>47|NAtIwBA;!vWhO%d5u+uP z(QAyaIO*h07?@D2I9QgU3{OtYa)C$==#?K^So3s0XEo3F>4D)XIG>huh+a1ZRHrzN z)1Y!>6>%413@v?jo7HqHEL1nZsL!(zf@u! z^6v3uj6l0{%yQldH9n<)qU0Q|W1QFR)qSFhA(*A0y*U^Br0HK~@=GmIkK3WBIORc; zK~fO1kV#3}z39+(j-*=?B)K;NymoZ5EcGDCaRfD!m}BEo>31jy{*>ecJRhe5G_H%fv|`pRo){ zoRFfFTnoM1T)tqfJzO=lyOV0J5P+VRpYt6I%5cQHTWZw#dHTUZ+1|;%gdII#-4|<0 zs=I+vr<%JTH|bUN=~WjcLXB-lZTf@C1xg3*P*63_fNWxTYC3YO7}N6xYz9(2iapWm zl$6c{l(L&zSoHGL#lrBRN^nI(8@M$GznDKuR^?l~&FWil2)>(+UGF_Cw3MGA%+{?; zwl#t!WZ*biIcHv$>_ITsixkzAB<&2wK*es#`Jjj$8`eM-zUrUc3-?#70SI!tSN=i~y;TP|`qH|r1?o`0i=Itz#>+a(nP^S?D z1}9iBVgsn*%e(uu7o(~2$(2$fWGN`mGO_0cdUPp(5>Nn8($)MylC$AR0VqGv=apd3 z&WH`NJj|oG$h0Vwqg7ts*V5QYt`;VoyB&QZ=l~TF;BsEI?!UOq?qjJevW&UK>{!J_ z3%Mow`eyopD9a!}gx@1~&7gv8w@?_G+ft#oj9%kwyAqU>3XV_ak zb<(+a)+mJ#RLKHjj$)u?oqsVe@o|J@M1gDus#k{3O#L2&sVgKBK?6T>&`Fc$w$$^uaz;$_qr|mbQMWjZXfd!l_23H6s!{D-1{{BS9Bjz?6(NNIoXGIaciL%SifN-2|g1OrykPTq90$-#5qi>f%W! z3Yi@0{#1ya_Y$Op3}oJ}2T^{Hq zpi8JVCo!?|iOpdVkX{Q-)+t78=Fi`u6p+M-DJ5PUY^66|>qwqG*%(N6Z5oo=`xg3V zA4<05>n-ZsqN_sPMEw>@eD{Mt_iMQKF@|F4<7DQ@V$WzfWuG$&}+08dE3dN2fTX z)u1JT`-&ukn{>~y0P0AgV-d72#t*vRxsPY*(=xEyu0?-CI0DKFQb58|7~5ZOXb)0$ zZo?HUv8FVisXLX?{%Ti9I)}%Ef1=@R4=ymS?jm89tQzc8nNy4=jC}Ir=$fTI@UtQpokG$#& z%ry)9SM?gMJ|EbS?sdDzx$JedbhRGSwVtCXNYe>abpB|RtHm{rI`(Pe7mW#)ku@nJ z60#edxn1ucKH?CZDpH*aE}1H>UMDR+-`7{|EQ*V2}rzipv5 zBy~j0wTRBP$mP5*OZ`Z#e0+kHU=qk+4GF0uksvu56Py-YnNv6^jHa5fE*olVO>>S_ z{8RX7@$UZs#k@DOjOVM`cOB1h+M4k+H5kGnJG9wx1;1QZUr72_6eMumHxQ$T7)Vnb zOi8y*A9(ri87^<#Qj4qY78d?C8Q^w}^Z-+IT;6qQ}HOAJx~>*3o78y4szt zuD9f9_Y_LuCuT&>!R6|oSo(k4;%3f5o>v%@k#GWok{_sRk)*gjTAb_J+U}$UBz0y7Wl;a^`Y{PpU&b8Vx z-o(c8QXnH}pC`=|t(s3?$WPgcs^h+i#t zbcr=COK!ZVVzOkv>-AwM0hj=JGw0U5X%rzPYEgAd1ku?0ccc$F$&aZoWKmZ4H-2nC z^MWKKsNyV<`L(^GNpM*%Ir=~vl0>>jjpV%>wIvp_$MopP0FvrrPL23Jkpmi#0W3~> zR?X=UJA-i~Fm1+Gv$a3X{@qxFl>~-x9s4m86F{I!$jCQ-`$kIbB`DIj3P`@&PfKoJ zwmPd-NFFAke*JpI1E~s1k_H<+Df#(~onI}RqlB4uDtgP?KkLsjnNBs#GtsZ#ND^=? z0+LeXQ1@E;M7mme!XC1cimSJZxqy!~H2rv1lrkQVeH$z5K zm$^Bl=(e0O)o90118*;eH=K$G?v}9x(5B z>TCE1apF)RKM(Mp)ZeMx_S#y}^XvCB+Hb2gqLF;vcrWuGsLn_K0BK5FB%}h7WhmM7 z3HPanrO!YKl$#`lOd#Y7;X5-H);e$eTYfrthvToto!`SB2}iq^!k-Iw64mjYUc+0q z)9$=$U$Y}EF9*_>aGG$0r5Ku=Bx*cgUL8x9^iB~1a>x9xEK?9Z5UZ%QLuHYA)-!mL zKB2@ODJa1zQ6U3T8Pvq(uf%>u{w{du!~PrJ{72$mBjUa*sp1{rXzF-xcid09pJTEg zmT31|CoMkPP8vxV#uP~mE!N-DIC-<>@KR*($U*_djUtPyf(;2Kr%h=9RMl|OR#nAf z6>GOzv*mL3kIr9@ekSaEbHqF8c6!4e-$aga_ibK)1oP6zh^yu_TfEQX;1Qv z7?G5vq{lHDLxK8Lb?H$c@e>q+rJ`J#u^<<7d-~omg3~5&NI(U_e64WW2j*KS&|ek! z`yUPQ-ED16D0ZZKo6>b70Mazu*vQTK44GQ%(eNKnE8=)RwlPfwHLcuKi|-5Zyj-Cw zXjQ99)26_6q-l@v>+tvftMQ!tVbYP?cz&j@eRJ}=_igRtDf{l6YQM|ZtN#ExdE4ghLt5nb`3&XU)j`0=o2-7Moi?>8yMQ(<}Pb> zuIzfNU3^6>RFFIYJsVFxZ>W#CljBeVr2fv;cIyy+Y>lEtsgz1J{MOLE++V*;fL%)j zr!MJgK`^5VK}aD^TK1)Dc*)k3h!G<pA2?<)fX$7_4f0&7AGQx%; zv2dLk#=oeavhdFL#C0Pb4GmezrWn5^;riv`zV+%~wo(o?0D*t+a{ye#5L9LmLjnP6 z>#wg!-9HEZ2z*E5v(nU;YpDq8BC~-VINmdijjM~J>0J(I6DCqrK>#Mj>e=-k)-a6T zF$g%9HmWoNq!F2Ie4}sozv0ul?EF7dxbF2~80o^L`JS3!3y^O2eG2>6aGY-rsevK! zFE(IyYPj6jJ4O#5^%6>qtVNhT6>`DIuatgo{{V?C4-5DgweEFc-03>{uC|_sZ>1=b z9Xh#LEI_E0?|JL&AL5cf<*f)PaVQF%?biPQ+z9;%O!()D z_Z~0eTH5-uXFW|xse6#T1Aebcs!SHpf8 zxrCE5sw&dCa{cq^pI(>Zr-^7_s*~~X(7c%+O^wED3# z^`jk7v8Xz*9*^B`4~3LfhfBH7Fh9LxTKLb4>z|nj>N0~Qjg=&h0Y~49_AjQmehys4 z0z)aC>20;|I3E-BX_C{0Dqu!e>UJ@%JD(Nqe?H*qHH*a&pnYtS)|lX>H9#-YGNye} zXbQkvyL;!OM&JBC_=jJ&?>k~zjI_5#GJ|Xl)oxpUet74vAO1u1i8Hu)qz0PDCObP) zu-XSX#EQOJMLMXyBS`Wai?`?$~Y{iiZkuaHh#m;)-wu5X52*`3oB6_W6y++~^Uwu?_J2#cD$kipD9uKo1smpiOp>*M_%t}r> z3iRE-LNh72-h8toQDl}G4@}q4G3(Tkbzxyq{X*$cOUp_7lS`_kyHcN#zgQ*_tN;~U zg0wLKQW+)m$FEc>sLUSnyasX>KH8E9B>063ILj;kghi<7+D1D-l~ZV-;*7hhy|;RF zKno8Q3p?78pEXHD)TUIoB>0`nQHy+a))RLLXy@Gy3^e7y->uzS&sy9%RHhEWJ^J)v z3KY7^l#zpDZf8F@Td8vSv0jeYw^qBF2~}UyfO^tN6b)bRy`U3iEk#Qd0rw-lGa5j8 z{$g8GX%%EH$v(Vsl0UWe2@FeyFG1GtXoUn6g(Y~FtNggBgj$2gnlvn-TaAEIZerDx z-QBHp^I|n)UkgyaUGs#>>Y}N)1t4FUrefoJ$D4Otz!F6O7N|xnS3DRR%hUkCAzmQN zcL4f`gi0(_l5nM%i~MzoA*R4qQL)?^vau4MUDsZf>bUAuaTdcvLrPX2LJAT@#S-~94@OOz!9OaaAxS%)Z}N@)p7GJLqI+a0-;%7tXvgV&y{qDqo5 zQ(ON4TRd7oPuv8SA@y>3i;lWRJK$-^0Mx=p+p^>)eI>`g>C}L%OaV|G_vrBQf>xIc zIIq(A=d1-ZDfw>Ltz$JtaF+g^GL(W{u@K##DB!S~VYRcqa4w=!d1S1c_X^5TRu8|} z>4{e)(I8v8pJ5#_!bGr~L{;%OvewXu9OpdXbI~x7OPHVmZl<@LdH(=Vw_i~#v&tm0CE+s> zwG)n*lz^g=DtGejsSC_1Af*&0$5y^$OyafPQ*NebDMtYnVtmq+w|QD{X14XGED*sq z7RviuuPDf$ETE}GvVmcvUCnO#dzeA33YV0KlA#5Xja?==eg6P%wIwY@ELDlcL+5zT zUMYn|NW!WM+*!s)T3QzC8zf{&0!otY_PoB!eDRK%ltRb;C8|5`qylO{2?C*Aw?9fi za@typCv^zZS-x{zp4}ZOcMi$g{!` zkW$827>TXu;8YgNmYKkni9re=g$j|^FL44)ppivN_$ZRlnZ6ujtEC}SQe1(PcgfafZC*08fx^J-C1LOIREwvw#JKk@0508$C59rcbR20?B82A~Y0 z3?zjF^4(&%vh#P3*P=C`7$qcv1ypD+oeqp5CL*dL#ZPjZU$g67aei-nkvzpqeO(^y_)^!OPVFpE7I<1jBaCK1b3S1RrG?iMUK;SLvpkue}B{W=u;@CxIOfTICe7dgy1{p<@2;mM$w?!V?LM5 z_0LfBBUrW^L?8TL$mDs(WrYRX>F%v()1IO%#)mwkErAhI^J|ni;{E=Y)B^8DXtI+> zch)kJZ6wC<9)%@c{WAXm=dOrSfB=vWGT+o=ghlfLiSASFmcO?~6-ujJ!~sHC1w;`} zS2YDbs#Yy0&eZ+MY0R5(G)y5|Pz>LrDbu0CE`Z=8dM zu;-x}K}FO~5tc;iVZ2yUR453~*UHdQEz7xMixZ2^)n8w4PN1YD3?LSz&sQAscoTiG zFPbecseu9coM)<(0vOOco_?`;Gm;ikoL4im=$@%k!kd&;2W{NhEJ=RwkWtVJg=~?I@B$g~rSvZ501m}e7@0?;y z#D?)yU@Du3Je&0}^^SpS@xMPzh1rD~-IKBP7|D2~fgZ;--uSnfbu6 zBngTDrSm!RrF*PlC_BjU<+?(UwF=By40`(YDFFD5NIqFM_lQVxkX&MF8sz;AqYbqx zC4f*VmmF2s9=&!W$l2cUaVP~Sl{<`?;C<_u%3FOZ>-t0Aq5`I~b^Sn&AWKXw&Al2w zMNL(fZjMV1Mcugd!G5{x@==$F;052lKy@(YB%vW@`E|*Me$YfaiAFLlY;C&TE=wyE zKfXE&q=gW7rgZ79u~n#o$pw#=UHimaMDmA z!fZ>izfA_7khfA+N>Z1bCg{s0Qk49;^v~C)(3T?#Sv$diOBNQ$>z92)hzC-`eYG92 z3oex1xV$5OXO5di2mny+V-x|MZQ=(<9~oDjVml=W$zoC?NQEgQK2q`bIwRx-O*N>> zE=!gPV9lE~AT4ccjN^)t^X4Iw1a|qW*VjK@j)`O`C0<=Kh)5#)^M#t3tEnHaI6Sza zr_%WSI(AsQ(DK_jfCKXGrUKQgYQoV>pFtNq99JD30ZgE4O6BdeT$H2&0}ahz+ms4P zgqYUhb7$Elh~w|h9*$Fp1_!=zB$YC;IPKi%bb<{;5M8#OY;dQ(UoHN<4+wWRJl(yZ zi2#IzmQy>opP%YIb;!gPAk|PjZi_BCIQsK_b`nW7t>0gl>7+?ZxC0Z9pI;#!LUE;T zIaF7Noz-5;UZ1~Rgt~v&_IK+NRDi&$gtIjtUUrWcba3n(X0Y1bd*=A{zIw4G{8do= z_V7YO1d5#Y9WPC<7;j+3R#hwt$cVHexh>`Q$551qU>K`^U+N;jxejv-E%^{sb>y2j zv1w{awkF_O^)CHCQu?Bhmv#7Dzas|eYTuNISVaWRBo}xx``14GDzqsl5hY63 zp8o)wzygp>Ljy~if zjrNNdYumydtQ@nJtx`9(F{Ly9WUKV`>XOu=wGZ_JQ-9vO#>WNdwN zzY+JOVYLG?vQ*Fnp>n?{WA(;5)%s+DrQ=BL^snwdk0*(TzK=7(uUK$)3IM)8ruzoi=W9=Dx4QDRR`eY<2^D{o_k`-nQmzQn^*}Si{Gs z)8DUOz^4hs?r+n*M10@sN(w4TP%a0S=7F^ltNdF~WQX~iQvS{Q`k!96C6yA!ga&&s z1hqeXBg@Sx3S@v-(X)SHyDv8AxlWqF+yt=K(!d27T&sOCNA$~AJ07Z9gX~@})9@MLL-MsaC z(gAGsBN6mX*3s%5`tbDR)r81VH39k@{{RqKQyE7$dT!x}tJ>zxXzyRZ?**JAp{NMR zfki7KL0tJtkNP<4=KlcXbJ)u>K^LYue-=&AG?6;RrIYp$wo! zS%tR94|v$K)czmCyDbYg>T5#5OWH*TCf0-7jk{l@d3;M&(mEuuZV#1dWd290( z7rJ$2-fWeAW~4Nv5-Q2=!V2O;`s1u=l9Hu30@pqFNc7w)KHRx3DMNaixg)QXTl_n_ ze~Q$LOk>;j{kd7ow3RA)-|78DDp^(rqJx(2)+2~nB5HwRvt0ve`HidL^Jl4|rTIe& zUh0Su!RY?~08X|gA(E7_I9M7}cP@OR%5gJ_u`%&0OR!;b%nhnNYa17`lcs6NTZlOU zz+L9AIQ_jkbtNYfO#$z3)FnBlp;jS7q081RhjSKiiZ`&EV;9WPRM3UF^y*3&(6bD@ z{{W$`(V8VGC{ZkLYknI72&p4y{lum$_c}v zND5WlWqs>khV+elr`{jL_Yz(EV=A>uR7~^5f8Vb@c#-$b3R7xiX>W|+>*1bJULX&+ z?;{i+j5Rxc`?BtPUgJ#F?R%{$>314a48mc1ZRc+uw{7+5zL`Bpn=WEh%9l`ebDv-8 zJnt96rg|o!-FHc#w)wt?-ansD@nQIL;=hKU9Ctn;+UZJu2jY5+e5Iog?eNOh`%p0KQULLYRXFanA1^Q-zs3gPk{rn?)0d3pmm4;`(hA zAB4Uw(0fe~l)o*|i>)^^{L)@{4dET4db#Vt{a@%RE12Mg17@KaSX=s!XCvxnRG^tj z#H5FMKIiirhp_S3OG*-g$4ASu8|j<01XQa)dE@u+9B!dnN*o@vWKJqlNGyH2{{V3Wb!EQg7}}2MTej>ZKrT-He_ZrT zDPjVNck7!yt^GrsEaViBd@DC9({r2eW3(1`k_=3q;Ftmd%1KN}e|xJs36cO5V`KWg z{RfmWF%tunt;U+yFX{`@bo;xENlSCJcNdy4-hJLPAs<3X)bF zirU@l7XJVX@aXAjn*GE|jAI~}JYcwvaV&cIe#cpprmA9!P!1DHZ%@wJn9$*prV1;- zF$0S}uW^>T$3lJq_*S39--x~)+G^?l0MXIY)z*v}B9Pgoxvrre<^W`73-wl2bb~?Tnqa(J{W3n(77T=>^%5z-t)r_*R z3YJQZfFhlk@yCebCd?^GQW&!WSU$T7xZGB>)qjW|fSs3nr`%~hwv^=W0&y6~$U1YQ zZ>yhvh=92&3jnJLrn;Q!9yBF!E0-*$c>C;4MHD%l`{f^>e~I6K8vUI0p4+pRlXCej z8G6Bq&DTEPUbXmcIesTJCdaRIrlJ~?F%#2>C@ClnYHs<1v~l;uKLPlsgzC;ZoxI{j zlbCsc!IRf)kNI6ZiPENF2vvS|JD$WYt{p)|X`&Ti#Ewqpnje;m6#OY`$j3l;;t z>FE{3s|7F~z4`5?8lAq;BBg1e!z!!;Bg)n1HAg*6xvN+5ODLKS{#q&)ph&nrpV9P) ze}e`xu-z1q5|&9)o(wlvUWM6h*v(rOd_dDT^|NxWQDm1iV!xbxas z$$0kl{=I0*n4977m$@tlP2zwh1hE8+s{!i8(^5krji1W!EuOWzE;-`Po0g!rb5MNw zY2K|B2?nK1M_Roj&7>kNW>H2dw3MhNcax5I`!7XG)#4a@8`N^|taFlCs6Ap+%3Vjy zD-w;g3{yWXUmm>`%7eM4buL=mzo@VRhaul@84^n(*u}619)xrM04v|BC=yGt1N+`3 z!?+a|+r8uCc4u-}w%B>1$7m_`efbWo*oZ;@0A{wkS%%ckDL~`@053jq=`vMLLR)C_ zUgg{?iB)5oZ|T&K5~u$FQ=V4PJ=?p*kf4&FQte_}w(gN6B*1AvsuXFuaDle*@1Cks zROD2qwA0SMQ8)o-IJDd4y&%0k zOS@Cd#>TFtoL3+2dUP@wha z8B&s^RYPybeo(_tRxD$=#z1pxPIH4kx%YYklFBS@$EJPxMe)m8h)`$mE$vTeCKHY* zs~a;`)pFICbaBU`bp?PgU^dU-!&j(I zAfjsZX3~RT@OGZ0r7KF!?GiVV!)a``-TU5eq|^WbH!aUrJiFc+moXtj?WNw&NHz$( z?PqrxDh;Z}uw&DTeK_bus4+_%It#tOadfU(DpJTQCb|>1D{B)HX&*HfqU9~J+_t#C zUZ`tO7>$jyv>7wf7$pue-SoA#jQ;?Lk`%&Gq}rD%W#-+Cwr4e*b!DIs#1Q&BIP~QO zGf<$Bhy`dLAzJgd>I%~CSPYp`M(UxsYSWGe>n$An^d(Bf^!`Pv_V#n0OdcyVEhiBH zN+&Hoc~T3~?_+JrB`ewrlVx;Ag~hr50B(f77`RnDG&u@fb$~4@RKzXlTpY9KUirb= zedR1Bgf z8!^jw(AO-aSd*PC?+qnFYJe&O7W!B}dO^_dN-b+c=sb$nhmH>haxh;w!Z1<(9E}Cahvzvadd_ew^k!cKY zxR)?2rl~grTEC~Jl#gTF-xF%B!B43DCC42}l|V{yHd%MP7F_mk8xdedzq)S{{&R&< zqiJekQB&++zpvJ*N?3qjyK?+Q{qsFQ6ZXKPjcLzF%00}poP=9kjiDmFeg6RO*AxO8 zmAyRs>;+1gxqu-+C|C~j=M(AcMERF&k*MXvxCtJ+jQ#o&<&*qqQ?GW4qY@NC(nuse zb+`cIKpel+QV5T8C4^bT0k4cO(kq!BYGDQQZVfTrYJ zjWewxO-|p6#2=b`(u*1;W*XYrcHv4xq7)FNBr2xae}A|dib-^*17)|psqq+VP7d9Z zmEAWetYp$$W%cx4qF64WH6R9|YwSG?OCuT=Dao--z+p!oeBpehB(x+JMI*HX4(v40 zzTeZP(8ypMDOo%9?!K{6EKxwZ)kd%!wi{=7g#di^wvq!8eV5-k^sb5u$z~hGfB{hs zrK-4nv;v%x?qEQjnG$xk9&bBM+PX`jn6qGciP3o2q|&Iw&msyJ&Ja<;y)-`(WociKJ+Jv}*gy4$<0O;}1gk?wy#Mmk!O(@7GA zY046-uQ4L(y7`aRkWUJ)sG_6{AQqtn^tfhiL62edDW7g&;FPe8B$Wbk70R_5nAg7( zd@go=JFne#I=Ta?+0RGA_4NCPxo6zy3^ivkf9V4dqb!y7=?|p+RSV#y%bo~jg0!|D z39zN#*fef^PlA|}GIY6kg40UfgObMX+~YxfU*NIRmuuhacN6|DQhT2JwuIx{YRMxX z%`~G1qojfydRV4Dk@Su`9w`Wy{{T{aC|L{`+N5vLN6dbu!htyxfd2sHClWz?I<;Px z=cV9XFB|WrJub_^bmQTjzjddk_WGT`&RX)0t?EW`n|gbr0T(9F>D0)U3a0TS&Qc9R zY&5<19#NUZB~yGHI&ibGF7&zO$=VToL*YG#cipq@JE%S>32S#9%b^)F?(Qb9bq#G& zt|L*Yb4_v9_Xou-956(*pR{P4Ruv#Hz4MPX#PF#5gv>6YPAW6FbNzFUJovY=?tTFH zvrpo$4DEHJ+v?4HOT#qMaqhe>QjslaFfk~|iU`)uG1t7|NPg)DVrvx{Y9!YX!680?o}>U1YJ45;a5#c@e$|wj>3_w%zW4`{D(ldcH*(m=2H;xESk02%P##DBz2 z&;I~R{5kN=eIEKfhj|%k_ntEd$})`Sp^0hsY{PEg-bVgjvOcx-t{>>~R)m~fQo{q1 zeDiv2Z=@+Zh+M_1hT%$AGMJ6<19#D1_`B;&{{U_O0K`Y*r^DZc-U;Eqfxm-Yw14%D ze!@N*+-mqwZKo{{1MEmcwAAkV{^vq0J6P$&o2RFHr!&$gUo=wB5IB#j{X$?8rMXHJ zL#(raknTx0Y5`bWVMM{gB(fAvSl=;qb>$dn!djY%B0rS| zbt<+Z7BqjyuO5kC`FK)p<*7@Dw0l*~lP!2v{B?28&ye(skAeIF@js7hLOrjB_c13Z z4y@q7RBWj@9DQ%55iI~H1!F=%ENTY(>k9E-S>fe^5~nn+kFNg!6^^F(FZ?L@=Xcua z_@|D`_)gjRNiYpoF(k$*h{!E|k4aAAr6Fcg6^NSh=~C9n^Nh*gUP6HZ*0Evfk#^r) z<6>y|SK&|L&v72xy6!tZ>%Q$BKhM$8+1%=C)MBuUNfw$~3q5P2BZA|2v=t#GGS(^n zpl@8W0M)A)b3Us&V*o-4EY4g2M_St75XZ$o#Bam?52$H)2ZiXy8f4`e>JU>>M40LA z+j~ti9NaYR1qyW8s6mo zBg6euj#|7bRSul(*0Ia|i}}6GTdUM)EonTp#(&$dVK5Oa=A`A_SjUzp#y|wUwkP@> zEgPfZ_%M!;!q64rg&dAcTdeSPg~gh=Q@Qp0U9Rz|!lg(-Br=_-GTr%9-$=Z=?wl%0 zKl^2XEPZLlJ!^MLCR->GLO;I!<3%$}urUWpt}+~tesG7xd`>!gdtq^DxS+3;wF!B! zs=vdNXEs&*qhfZ z?PEY9`kC4l`}aelu2Wc^xBDN{;pMw?#r=jzbc3b2`oC%`dZE3wO) z$LN>g4~#-xmuU|yr>C+a5uAv=Rh7P0>94O}nSaiHoUi#4RFLUeb5`B7_m8Um6No@U z6t55gfz8WS?k(7kr11?6Ird$?zMP^uv4ZWuZX#V%mRS9LFRzOXY2p?XmI;6F%DYF? zKANOVllL8qkO8GN^MBrTy=^GU3}w2eNenMFc?(yJ76{S9KL;vJ^RN^}i+eA1}Z7(BN9RB_hV3p^Tdy<5*7kR3KB@8mfo!d>G`n&<~$O&bW0e)`Yrn2 zD*B^Y!3pHuAEYcymYRgC64n~#;p!gl`EGN8wWaxS#R`|Ty1U#UWZjawW?DkX3k4?K;Y+&My?NYI&y-g+q_SB`NxNZ?krLad)jpn_Ut2Ox7D!7y^nQK%!V8>~ zDM>US)EZdi@HlyrTiA_O-PW;a7Fd;DODxAtkiaU1M2mZz{oyrESKUzxz=c-asoy9I zQa_rl>H%sMwsrFQU)=RyPK+6yoSelBeJDI_RjAkw+!`7{h^>{}v{mJz}QQy9=n?XxevbYiC(KR=jt z2q^@t+_fshKD!w9CzW%&6fWY7adHehQoh&svQ84>fkBUYend%0Kv7z-kX%-*>?v+< z&N2<#eBN7&&&r}X3rYbxhX9rU<AGJa2TwDiW`Pe+}l@_eu4Gtu&5j=px5yQNm>f9q%2+8 z^7*AX$I_WqOHz=0q&)_%xjn0fxXgr*&R88U`_`rzNh%ehfbYvY!19|eDJjKO@IIcc z=KXSXWQ2tSiJMyd`aueqf>JQ|oJPoFwJ!&hEy@d3g7{yzr$s4Ji76f&kHhEc(Zs1m zN(TTwkgvF$V`k-`APfAYumOx5{eIm!C>mrNpI ztYkIA(!Ad1;t}h{lI0D|nGGPSUSongYxObH$tBGxZ!dh`)-mVdNI*3p($$6fgrrEt z?c7{IcP$Rn14;M#bkYlY>+EAbe8zVS?i@m0c(JHSh{agcve@9-CEfb_oj)y! z#doXzE5E!bq!gqDc)9IS@e60a3Ppzmuz6A1IP`ze$4!Mx0Yei^40_Nru*w3XG5kq5 zT8Clr)&`X$=HjmT&4bUm>F?7RgtkCKvlC17*WKVH1wlmw3{1i8{q=#SO2>034IWio zyRC9y#(g@unTPV2>-FN<-4Z$uEg(KT|5|FBu7Xr;+TJ_cdos&uz z-!w8W%nvOuM+|By-thvYI$gsJ$D}~|*Erwhez_Ny$HkaDj0%Y%?K8|9it*EloUMFagR%V(;rT`>d>*4W~D1NHXu;b zN1--w^p9d?vY)!GUB9+*@9)(}BnsLuC`&?uPl0U4x9H`yzR@umMz*09%Cw?$^?zoL zhy0$07k%dj!l!9!2}!Bcz1iYZ>e;}Q(jO}NnaAI#8SNG$!pbL@q)8LZ6yW-Q_exi{ z`}G%dnT|;hgp=X!=iWRC#_~2Laq4+*?^*Zjqp?g*BZcW}`SgsyP14{7jI4&RW7U6d zxyb1i!d8b+AZ9)~=d?=1Xp2rzVxoeQs;j;~->G&@OAY#0zL6j#Bmfv``H13H8;N!o zS9e>FMYr|nfq-&c3qr{%69`CQT37+g);&4JDiv-^_4>SH>C^=Hf}O$dq+MkJIMH(S zIqEk)Q6x;*;JY}t4M_EB{{ZGXBr7ubtWH+Hb^SpC{Fl(+D&OhHT@oftBkhWo z&7H4TKRq5N)0+^8`d(?s@IUzHs3GBuOG!ksF(pZJuJI+b;oHdaFRiu5)9a48s`q$U z5)`~5fKjQQU{in0V9z2@ilr!-EANW^e!W}=xPOS5zrm7Ro3phWXUn0C$y|Bc$J1$t z8N+W->}gO84qCw_z{E4Cspa0S1d>o0Dz!tK{W&xC#(J(|9;sqh$WsTXuYP`UE2)aY z6c>DPT>XFNJw^~SA>ghQaM472>E7^MD``&L4SJY;Ym2j?99JR9KfaywhCmoV6wWh> z1Z@J48ppNcg3n%kx`LG~xTyy{d(t})OK%yFc7^R$i^a;=($&1awd>HRNDK)#{EVWd zM3zaXrhR)lN2P;}%@oRm2n3!s<1fG5>wp9dMT!pZ_=u|%{{SK?+eR0=5~bWkk+*7= zraAqq9Ti1bK>>lO*6i(S#Y&2?VzxkEYe$-?SId+`%yF8#yR7n6&0+K?vTSr&X(Ll zKId7K?(ww(Qi_e@$k02j5*eLf+zX1<5-r)+iaK@?BmJ zw@yevP{hX%tM}&;kd`4Ph1|EGeKm!8+O9Uy7jqje#j7XN=~>U;tr>EF<=E`BKe_o9%5l}6OyXZY0E8s%Q&>ngEbAYub1dyx|qE#GTL_NA; zDKA!ceg6Qi=@6x*)D4=HxvjDvjNlo{nz3&F?UcXs*QQb&l8STq?c(xr0pdYW%k|x( z(^kbISyjgl1d03G)mD%QF3xfVprVQJsHkl3df%5V^NfO1Ho~a6B$9+H^F8m}`u_ak zEcwtLb?xA;kP=8|^^aU5yL3?8U0s6iQr6M0K*o|wl0uRWBXRm_Z68W| zbB--?o1dx4VO?`OuqOSOgs3HgQs8@e*k@*V!sU)7=rVlRyW#pL(0S{yl3WIGNg6ox z6@HOmv=?)TK2`I`c}LKcn{?_jj?lH=w{7M7hw16m5|RK=yVOEsUYQ-<|O>t zNC?v=LNN{l80E|K&mB~yi@OBsef9T(B?&` z4IC%8OHV3h31t!K(>%Fa@piRZ+6m!6$%8F+r1DaOnGVHXzJZ>gXBb<+qAKqV{% zstdKi1a@mk0?L9)RBX`zd{6c2&z_=MQpr#t zln^a@P}0887sCCI@xC*q8f6&jT{+=BLoIZEEm$P1i<@kIB4q*hmU2<+Ltn>Tqx6^X zpTWO|?KGveBx%Ksj8fBXYbal*x4&N~`t;AaHAw&^&0IaY_q=cL>RFbQqN^6ISiOz3 z75I*d)oVeCUQyd|4XW808GX6+^y|p51OsyWyKiqe^s>;ev~Zr*7dM?iehmg0F=Fajk6 zQ&xMuiEREO+i--OL^uvA2-7xdHO9V|&i%Rgc9bbUDpQek)JllwnlbnE>nN$!FsM{8 z9eQW|L;nCzm=I>nsAmMTfL@}tW~t>!6IWdA`+o0UQxD71j0blz232>4<(y~H>ppm7 zFa@eh+fR>(eq6OFNOAngwM#hVcMLyqQSi-KYR^Hm{Qm3nHv8gJ3fq$6mj3{ojAWzs!r)DVm!xKsYyceGsm8(LbL-Nv%S9_hnUBxy2KUrv7Rea^0q90K^V@};?Y z#(eq9Otd6WT+}(c9NpeGM}y5>GKb0)MJXRWXA!6UdVPizl3QjivxxFsOw}f8fk-Jd za03k37O>FynAzQuF}rPut4U22SH~Ca`}M#iy9OgMet*2+NnHWL>I1s=(A!3TnK0e* z#FR?EF?DEL%b$PgW*~(G;s)i*>C2oAO9d{X0J*hBp^dwNjjiZ7)o7A=|XnPO=DJeejy!M_cGIwTiDq(Wfqrj zu>C!rytr{Om2!RlL}_snQ!9r+Shxgaf3A10IIMg}s7pgp7b;?u<^3-HmtA_Vr#UDA zF5f#|g!H_5iL$_2)(8m>z|?f#%k#|Ni5~&{HTaX@UB|-z02X$Jw_~rl?Yp><{wu?^ z(GKIboXUiTmN&LxN$c0J`bX9HpQQ0(e3jaYOVL9@FI!Tz$}zbA0H>pg4jxqbWDrIC z>y}+FAB(??e}X?7{s4IKt=x9{o-go^eW@)^3-R99PH$(eqb*1NmvcDdwC`d-B?(hS zmN(bdczz@4{{ZCNDyMK{B6>fZv;4sqAZC-Oj8FNK_$kPf#H72>wH2F#VO*^6pTT}E z?K_<@XCTOw&^y3|QJ|pQ%mz$HFGVS5C%qb;IR7IG(a_H8J7Ke*% zBFl8dWJWu0ZN|%&E*$Yib%(@oDq2l2gyumX7VfabiN;t$=C8u`6)aA68&<%r<6j$RICVCIS^aT&U~_HTQAIw?jI{k)$KhT`hkA5^kBuR{{WhM zKParMMQH&`AvYvY1`ZwE7q+fC+58u`jOC{}K(<%KUN>z(wkS)F(>)=@5^+|W@4mSR z*5P<{%m)I=N=|3KcZ(l)-PEO}7EmIw2|BB_WBhVxOKIo3%Z~1Oas^ zM3Qp>pOdhSSpgEhm&GiB{{U_f24raZ0iKtS=s)3|JuNQ@?W45+0PG<~a6vA=Ty!aA zWhx|L0RHIL%C?M-9$2El!jpR3^sDdX82Fcl_Wj%+%#3%Dc1Z?S#Wtm8o8|QBl+F8$ z0%@540QI_!1)?YLh?q{G0PJmAA2`w975oR-_wdx5yG<=vC*{ht#U|ZJ#(r)y$3~eY z1RN{Ep_9>%EW0qIv?@x=cogguHOc)dZaK#)d~^5#*m$h9rKj4$VoJ7=5lXb;K|piC z(h8YBhfeV>ZvNsh3#dU&N2_``q>t)R$-4%2Fh|VH%Mf zw3~4(*j2PwS{ygjfgnt>16HOPNs~09bhR>*RzJqMW@+U4M=JQ|;m?iuZ05bLutfw$ z+J0)0oS#EKSFMRtWG;qdW<0ga+7+86YgtsOLk^nV$GtysFYSzx`Yco+gzzg`G)AK6pmAIgiXTzY4!W{P_+V(3W-AoIrHwDL^8r0f~2Xy z%D=B86|WiapW-1ceKI?uRFRffFC%3*>raE@LR3&`U5)`Qkhc8So@;m4C)=+{!*M94B{6*&##H^n-){);fUv5*Z=lx9(OlN; zo%JJXF5JZ3YhG?br1RFixuXbT;DNn&9Xz2$Clb_z{{Ys;$C$VE>jANpN!$c2y5aS| zMbD;ROk<}~pu(&O>D_aVQzX!_C9U6gk9KX_EthO^Nf^k@1?MU0>D7XQfe)2wc(77d z;HwK-p5#|&^^av%qXfw12JdZPzg*_)*y_S*DImM;wtuLmCc+y1>VK-oyv3ArWgr!8 z(6yJ2F`uK?VgiJ-TYtxwyh#@q9rtL7ix98OBnI=5iOU+iac{Bd(M-Um1tSTdIX#ib?g-E;l=0@6dI(34%_stN|o3wqWMhO2Ru zrDM28w%sv_mx`}L+o2pGz)hQ*XLuqU0z*GX^1L6VDLZ(SL?u*`JweL9_~WJ25;7u` z)5;|!b5!K82eI*c!BIl%E-L7y8vy4Xm+9@$<}8+BPFZga2PrPQ*}uNbOASp#te7J3 zP)MTdH2(lzs8SLFm>0J1woxg>NCiZaZw6`Wie=nL1(wnvI5U2}xX(iSWvWAvY#sBh zAcbB6g)F2$p8jz$sInWX^IfcG8!lUi3As5|tFC0QrB%yjZpN^2Fq17IAxTK3yxja} zc#+f#nHPxC+Z05{u~&9g^}sVEo4-0e+cz0xV#reQtx8XcHVsgH`(saIYs59B_SYQ`)0$eAEU1* zZQ70d2t++trb0#De_H8vOU2>-6*-Qhd&QEll@?PdYnin*>j%TR!zh=!(5DEa^$G#g~)_Pslyw&H@{{Y*o{{Y9rz^eUye;0`=E}|%2j94A@ z-U&OXfZTa*(u*_mb6dIk`e&*tRoM64-Y%Kx2uLV!Z(u!d5<|SHUFI}O=-nm$S$gF3 zzIw0PP-19LcFX1<&NyrvHl=yx6T`e?wT(n=kl=l3kLcxnx}ig*MNX>F177xtMA3yH zj20x3ai=qpv=aAGLAPwTmsYWAoS#Rkln_JH4p37u1cjk02{#N2@E<+3)V z4Q?*E$J6c9nPdc#YO3}!2lWz}iJ16{gyhT^Tb_@+d;DDFk^)g9^1`hdAI)J)cV36< z)cv%P;-Mr|+9-+6XrBnuJv*hACnS|%#tr~)%a{B0Dw6b2@eeNP$|&S0gm^)>Zw5oS zC>70@i_fJ4ig5n`uRtiEAvN!RZ`3o3_@zr_WaYh}nD+p4C8n?!CfMyl&tFbTuVASp zsp!a!5Z#0!hIW6my>khP3B zX}S06)_c|n-6RV}QQfB{F8=_UzJz_b&(o#Yxi`XV*Yg1(N(U2ys-)}9?M(ADk3TzT z7K~nR&y=itSONM!TVMo|8JgbTgBDEHp$nEJ_~n=Nt!?rn7h6s+Q%+KpjK9lc=BVGF zBglT|U4dmlm3VEx=x#ELW0150lz-WMyuJSbP#mU#^Cs&~EpjW*7;)`=GL(!0uU2>T z9`QvLq>3^?1X{d{gVH14wEEgRU-MesH0HSW{dzVGEmEPrO%Nu#AL349C-g07@sTUF zkyUNr^#MTRHC3Lu3Iv*A_c20{9-(-iply0*vltswS80OXscr5@-RCBA{{Vi8NDxq9 zQ&2Va9W#M7H776x0I;gtXWKrN_vnbg6hi7Uij|TGusL^MSP>hOD=#--9-vlzb6@!H zwn$MG17j7XUC%oY-7D!B%4~g4QmfE7b6)=dzf&y*MXOCO6k71G6;X&aB{>|#Le2~l zz^|@r7|%rkC{q$~D%UPevS^`Fl;nnP^@t~^oF_6HPcADyubDW{)1r(^#0UWmyZR4E z)A~DAcQp3UZHkGmJBMWE8rRNAd;35nn3x5u?5#_i$$>1#IPvElxu!cP0bWS|Gz zCWWh4AKjaHs>8hTICz9Vi`9m%{WM{+8nDv*h&r&-hOU|a07e$t`kcLb54Xer0LT9T ztW38ziFqbP3nSi39F8HZt)rMA#E-`7DG^I%Znp^nRs$(Lwmj!p`Gc zxa@U%Lsvsm6424q($I{xJ6SijI+~5`w8O@F-{58uEi=(G0)r@wL6l9{bhX;~#~7DXrOfuWzrb@TZDu%Tu`1E^_RpsGs%wb&W$%+$riG zTkF-#k;DCdNSVVd52#21g$61!5vgYOjJ_9)pTW-iQyd_gAN&X|DQ3yNV`}SZcN#h! zkA39td>_Teeh=eaocHz}*cs54q5lBr{q%P`p)_5q5bMfJ;ek}qEjW0YE+$G)Wu@*w z%_kxW$Qb%B(|)h_1i3sz7XXFR3Ycq`B0-Ei@vY3=vdL0*f_?R&Gip3C5;>|Hyf$CAr&Uo&@Q1|I zp&|^#;|lPg_WjZXl%&gOB}kC&1ur;W3y<&7QZRr?rGU$(dR{02NhwGK0{3(7{j^E> zlgK-9l9Xc_%5Zw~e16mjNl0EqPjA9v*m~+0P^;sWJA7(_v%;FV7L3VtS-dV?+<36i1iN_;?B%-2Z$})L9 z4(89DBlL^$6Z}nhH{s`RFT(G^8FoGAi9Lp=XWr}ff!;^LSw~JV)$TR4B^WxFpu~b>qIFB{QTRKkAA5Qb8CJP8>sFa_yHhcuRv^#E~O`C1z*xS*nz1LI`*|JIqp9D-@d$bs}RvkiQt5x z!j?r4LU5%btP550FXtXQawlV2)i9M3aRQ>`6P86SlM2T;{Cnb^lizmU9ou(Z*Ly8( zB71Cw&r%qczOlegfEC(u#gTKvWG$QkpdK1T9C9PU{ZsI9I9@^VH$H! zxzzZ7weLH>{;2EEUP4b(Y$FLvbma-IXHIL|uS7~X^~;o!pn+RCC8_ayMq-cJL0L5< zK2#TPh|u2}d}*aP>VFTWcKw+t{$!cPPU#mdU9ZeE1Iu~q*nKPMY9xiMt!+WI13&c` z{{T?qf>5P9C0P?~ayNVWM=N|G@h^b)zlyz|fAJT6rPz2!@x;5%{{UV)w6ye~+_jiO z*_1UCo(%Q$&!})bRFCo5lDIiWXA^>mp(d6d@6NI0xG9PM0Nf>U6VwEdqV5YZAk;Ud z-aB8u{CfC5v+lG!C-CpXJD-UNx>`CuBjRv7KFt6nICffc-zc~|(#@~eua@wC;M{)_ zg>fHOnm972#FUp&(bTPuK!HFb>2v=8&17)0k;CvQGg6QMATY4>H8c+!Q{i8UekAc; z^SALo8SyUd{_cG`Wulq2(Oj3P2pAS-Sy=*s^99{N`aEmGyl`|}w1mP(1s zlV)Qwclk%uW`sm9e^*QY0LYm%sb#Kzy>c78P&|M9W_~05 zN8884G`r`q?6h4{8hR3RWB&kF$uru7q{2ew{ebDIKjFL&2{Z1gA8~4DEcVcIv4c$d z+LbIMC;)UmCbL}MH@;08@8R!?yhp~n?QZkLd_!Mab7v{edYkT7=OZaTXom&=0A8Qt zI9YO0hFq{S0h_*m+$xSKYbjV!#9hsUHum;6i??~=T3UU+wzOtz#yWD;l%=?kph8%> zZFwFsjxtjrZV`k6OFb)|y<=WP!lbDE(54PUxdVS%HGR2H@k`=ueSY6pMbwe9Y-159 zj_Q=1r6PW>qt~hWPY9W0D6z$JpH5MoJxdED5_9s{X{>&B{vddl@m?pZrX;FcB_i{) zoc;d*<@5Ca0Hw*pEj1zD?QQdqFUQRLi*l@0?Y+OasCaafUJ@!SWgO5TzG(r0&3$^% zoRr}-xFfxDjJ!%psB@-$HMDMzhqbMM`C`QyJhoen-zrz>ePD4(2}n{IRm|F9I&4Yj|*A6-Ur5GC6c#5%w{q-YUdT7 z6b3fktC08N(fS^kuYR?7atcp{l9D?4`NmR~2rrd0`MHXwsL4m=eo)OV=Kbh?xc2G9 zsVv|#dwxGKqc8vygcE&^&)JIiccz1!M0lY`@Ac!_y0{pakX)YaLHmkLY(bRo&$hK9 zUjpu34(1`{V^W1-4b3l^wO_7I3+Nnb9RyuPgJoO0H$NeGJc)-ILGb`X`p`RV(mO-& zhsXA6$3jv9P-Ph{$;F6E9GRo**Ta9#xB#hYoQmKr$a~S~@$_GyPAWzR0ZF;ccG~(! zc=#uH_=kn)YC4M|G~*H3MI@HgvlZ9o->JzwKNhs%0W~K1<|${SeQ)X0e(a>FDkLF@ zV|4pc-6DNsQ&Q@&b*7Qqwu{YWX!gs2=|q&I083Ku&i??o+#sw~B@}Q?j<#V4JWEG( zE=K7Ed2&04n^oIiv!1kgNr5Y1S=`mTtSvbJ0f9JzfwgN!XsQS0q^*q=8e+0M!ciQj z7shYXt&*4UhOJIp-@4Ken=k-nuI|BujnYV{+}N~E>P8XYBoPA8W$Ve#SD#Vi9aIIA zg(9b~^wFNMnJZBXz?7WZFn0-E0+HNMvLGdGnSVn75bfPB?(ChKya-4w(*)}sbNzl zuL6kX2b4n>C2nIDc@(^;r}DIg@s68f-XH;`E*sJz1u1nc1x;l?Hm0#0h?8R+K*X=+ z2?0?;?&}Gf$6OLHIW41eiv-Ik#uivPR(GI(k)#i;8Aej%2-rKLb~0>}&MOqx4_5-j zF)v?BR*?ZR(m_R(G#pd^B}FJs2@K)9NV^x`XR=I9B ze&4;+#M#2Tf9e=a#4SN!r70dqKQ@UWD6u9n^B|dt7dxZ14E?YjP^DE%Q3E@-X3*57 zIDA-|?O$Jwqs+-$q9+CU-`rY+(mPvG$YWMx~c#wQb4dM6h^oVt3Ah7(&5K0=5 zzc-nWm*)0da`j{=6=t3C?^bS*S13qkG`Hu=tU^vvi6oW_kx7h;wK?_r{{Uv0)O#L( z5oCr+T-xOOQJZLAts+vA4M^R&jZt)M$Ca=4u8b5?TxaW(7!1j&1Sk&?x67S75Vux9 zT7xQ+wZx)Y#jYlt@y;>PQR7>YPt6~rMHEs2Rw73`a@rPmEKit>iZLp=9(bEt!L*BS z9W^YFd=5w?R^GSi-TG{K_kT%pa}}m@Ljyh&?v-ij*NnVM+C4)V5h| z0?evS!)mf4S@kIY0GFPkXYwILfAo8!b|FRV>c!o4{J=W0idZT)C9EkS%$z^3IQn!z zhG4MImas`@00BkCNp5-T0!~pN(%k&GDM75EL;8NbS(H_J8wDGQn&FC_56)Y15oe$f|GCoIg~~Pi}^g`L{|z0{~8EZrYke`f;?b3wiom zgR0WTktsXamzqpBFNvQ6yepcQq54E>T===40 z0$8)>uXc`QP|z{Xy}x&iWf3&?INXDxHS5G^F>6ITs{c+W=11VCA00L8( ze`oJjjH9%x{{Z9&`f*;|{{UXCg_8NZTtKjZ3#$?BqG+egRc9PA`tzT+RU!zLD2xeH zW#`Y~<2}?i(dEH*w?k8#~_Fi*$k_jnXovO- z$Ge}#(E?dQ(1M~tyX&QIu2BZ3akg`%qFYehAUQ+XqMTnJPNYi&5LjtnK7HCJ3gxVl zptSl2{C7x?PrP@lQsTD~UzrjuTJ270EwJj!k>R-n4)4#cAb3HWjY(vaXRz0i=MeWD z-I8|!E>ux4TeP(s{f@69NdExE$Z_Z2Jce+})C(vjiMbcGN1%k-oyOhKxi(oV6y?I0 zJipg8kBot)m2Y>arU~-9<&oL_~6|!#1OnOj@1y`SR8*1t zsMiMGT)gNb$;@}LJhkLf*wr~@TUOt;->*bUFofa+k#@O#wAevN@T&;$z0Z01Ky#Kz zsg7fW3^w1UU%yQxH-tGI(%x5!02wM!0a?9m%>4Vndb725+(T`*>wFyg@EP~$r~ohp ziL6S>h!{X@vg_>%byShg)*~5baAvRdtn~6y6qgJL%b$_*ihbFV!9X-uU3%V|Uau2q z%2rr8Fmj(NYh$GvN;K3%g?8#GIbKApSl5NQED3Zrt!DHCmK=@g+YUz z>rHC@VWUrcRo|nja`L4B)-vslyo^EnoqNxt$OI&_n?IGuFKAzXQ>Bdjjs>=aHDAW(de1kaL>N5b4p-d*(UpKe4BI-Z^Osv_MwQkqsa%lZC_zSbs?fgGMLGtd*WfUkj$-I;) z^}n}YBl^i)&LUtH3C;Z5VaSN}A4@XAlZXJcwM&e~Rs7Hf&Mw{|t5KmNM#L^SiDa2@ z`JdLW?dOynj8#Y$dii?g8?$C9Sb|OvbIVr`SM!RVw{&gQjDjdiHOxMuQFuLT+n%n3 zGJ_fo>e=_41MSTyQA)uZ-Srjep0$b>iEEOS;GhzeV-X1`Hj<80^~K|@G$HV;RG%h_ z;#rqaF%F^}{u=gj?>;H*r8w_2Qei_<`C`q;V8dB``YiE=T@={7+SL48(kU>k%Ox#{ z-R)}}xyS1-;rC)`csFej8OuwzgvPDkDKc6)u6=XsU3ibFEUIge!6c6=QRfwOv}m^KNY?IWa=B<}M@%D_#!o*kK@Kk{`gNS3G{cOR2K0QKIInewWgoLCWcZQ} zM{0W4_Z8n9?%gj6?rGf}eQ9BQ(Qbn8F~$2EtE70TU=ozjh7Ydo8-GsZ559V?wD)BDdYb+h$=GAmIujvge-kVmZP3T8PS5w!qw6Xi5dT_WSfQr6>*9gM2h#^s?TS;}!q`bSe&LWzlDVo=HAQym`D;9F{ZJzU z17ZnHOa8mjqc0ql=opZyVce7wi~j(+?XPO<)9^smkMRTFA@8q8k0z`tGX^UM$WgyJ zdq$-3IAsfW$pm6&!u&!qLciHOKKaQq;n6-7nm7I0AT=A^9uW)1@M0!@NW0v z-->)Ev+>`Dd`C^~yWbD*G|9qHlvtg{kFJM#r@5A%q+2EQYol0iD1~<0MS`sRb#cnikbIsP8!Zoc{n3AK=@^KMbDp~BjHS$P92|lp{EpGv_?e;UNUv|FQfkek^MjXmP#Z}mL+{bgQT-4fW(KdF_w|z zr||rD($=LcnY=Ihk$r*b9E0J%64axi-o|#$CHx6{;DjZst;a}UV8Q%c;KnA~0I7uJ^GtKDlx0T_sIH4F4 zkd&IR*KIk)m$C6O$5KqbR~IQq{J^g}YwcgYFBib7-~^FNGwAN-`?N5CiA6ZPWkJCI z0L1Thr&o7}T2s;QrbZGmFP4W6-P~Q^j~UNBWlfg3334h%R?j?!kikl)t#XHh4M?Ll z?VIbCQGM)tL$vLquNaKBM{Z)PDAQKpquk@utgrrAm{dwZCFxC%K9RG*x)7wOIl|OA z2BuX#VOFl8DOBXLyCaizvN2f@ucbVC^vaWljKNu)y7yQV!jv&2s$)JE&CM8XAEEyM z;A6pEZxZi2?O35M_9SIhExHlgWS^MbFQ=v7NO9^P^&u$=EY{4OEaj}kw(+MmYL)b) zOC`SIfo#Ti^AzPs{lD;SMjeN544zx6zg#$QZT+5vixTwp3V=v2OpSBu zTzNrL?xQzk@YwlyrEng;pSMRsR0br_lfS2V!KWksYz&Uc4$eKQ&X;=M5wfKYZ`?Bw~b$>fYLs|rnGF0P>+)!EbbCU7&PGpef zQr#fl!_)BrN>wbWL&Bh5lm|nx+1@$x;}5{E3h&{sv$oTgqj4gD`LVlp-<%J+{{0M1 zn=BfV1x~lKQ^-F^GI*(}U_&MATKZM|$;Uy&|?@nMG^{ILj9Ha4H;LnKoKBlZC+iMYliDilsNWhhQ z7~-+h(s<-e2_)eppIqBdI=o1diN!%)5Sum4GA4}GaPg=+?}vN-#(On;c|hQH)n%1T zd2PohOsPpOu)JFPYv&5g;T8a5$lm@#-V|zfXPOdeU9_1bR_MR`TdqHTf@Uox!dz|X zeWHq#0Ks%9xc>lR;8Zm)oNNC88StpXQgYf7S|_v_mF6~|&2^WW_Um_q;>ywz6iZ(w zNk70)uAx{(E>v zbg<7c1X+kT`G06jui7!OL(61=4cR!p5x=Jy>t0OYu)we;&ygRWXkBP5j9Jt;>EEO( z)X|hw0as?)M3b~B_5Pgn+GZr0k^^g|x_?m#0mvcWzwRK^j@lGyziZ(+aQ^^*UW+MU zlAs$c{W{V+2&hl-8SBvPe!F&O<)@`gC*vY#dZ{*Jn5Mi+ECy5-Qct z)4zDm3}*#$hD>Ji{ag0*uA$c8f33QAo^U0Cl2|vX>N05YtMZ|^e=}(q$0BaC@Atvc z0W5Lc5=M2>_TDP&#G31;v4}r4+_al&Ak<`~3Jp^8$E_VQnjlrmtlyZNAc6qDKIzgX zhNSb2&g0RsJuD9`1(($plqD~V=c{Yy7Ic8vtJ|J%%S%#HB(bCm$!dy^rPmy|=|v?W zfG+1lPQLkW@d;3G7mOMZav5t3V>ZFE?zn08s^dR=^tym9MM%GXkaY#rCYaxG{nfIA zG_^l0^7*I=%?ssHoMAKc=xRw_PlpX{M;S*IEdT_Xky~H$*Pg~hT1hTe<1EtS(2qYi zt^1EbQbUs04DNkm$yNmvfL7k^U40^W>UnI#E!jf_xi95fe%$mNJ|;E&cJOqP$s_uS zV=_;hG7?G@U5MS`TKm^r086lMcNsA6SRtABFk?t0A6(t8{oW-eH@A)40G4H?`E&mO zGt`8N6$U4pdS$+`d`?{;A+oMjrcg{KM2`6_)dj3<4Ev5g)zwJ~pcVJ)my{b6-xS2M zg(`m@UT{e`$8;6l8ry?wivS#R9Jg1Vs1b-_N?2XX-+zpve&o=pWomS);4`&BcO4_x zYc|EE{Kp^4`q!t^*7}vo7%^rWdz#lR?*tq`MC>HAume*u@uu-Kb*5jKN^6M~Aja=P z!|nFyA8ZF=#p*o|mpJKSY{lYGB3Y>AkYQm;`o!j-lu1ypHAo{GeOk-!^sbCr~Z@n(d@m%XJ}X zttjtK{{V3@u1;~-gy<5;%2c4p(`*xfYL9NK_SBhdp^1eyv)s4FSAwSz4oC_IA>`3K zyQyu6O4%8zWK;7g&MTACn(L*ZB$gO?*o%%;9=2#8B=|x@Ijsk+bcm(g2NDXZ;#Npe zlX!Cbb#W{d;ttb1wbP*I0{{XJqJeIY-S7vD9?9Bv97Fox?L=wOZMkC3) z($N9K0zq#++B1iBNlMP{=8BtEu3tCJ_P6WRS1b@iXOPdG_Pj!p_Fy2Vyz=R>-Eme| zAsEj)SnbaT6@!k3nQ8$+L=bDp_x;3_g$5?1wxj#=gETw%?edq%M3)|4EB3ng!^PvE ztA z8ah&xsijI3H_#3H&oLPt%p)}Q5eYj_l%mV^s`~NKQz=df4wFX}>-p{Aq=h6)P*5kn zUeHW+BH)=Oa$hE;F{>?!%^sg_s$H=*6r?pp_UEsZ5HdoYL1kwrajDC9)(VWsrr9no zJj)+fif{DepdSe$IETU$Tw3b}$5u61!=8OwsHuX#e@=pEuL!C2zvrACMp|4bP}J*t z_gJ1ftY0gSlWpWO5^J2_?Og<=N(v;fO>{+edy(805ZtKfbZZTiYCb5$pRdiWM4prS5{Nip^K#(n%x92F1TBM}qzG!lV z@>O0xr$?5600A~WN3OcSNJ`w}#1rdF*3tLoM;`Tcet`bQO#OP`RAw@$lWvjAQc43Q z$*$+#-jN^XwInJyRgK{?Hu~4r`Sj?R0)`weF9MdLj}a#iLM!Svfmwi6jub2t{HM1A z$5#b_%xMEGb}7BX_n3%fB65gGJkCwUmv!dmKcVZ_CpR@9^@vxAPEHZG_2;ZXIf2cE z)$@R$D~>;Yi!7EP0#1*7wu&iYfyHvjck>Wf+awytICDi`9`)_jl(iv2P2n`AW3Q|% z6w6j607<4rxAz%{i%_s*Sw#N;-NmYyE8O~7(NE+HTZlZ9!_EO1xOIgM~gY98rlK{{V5Z{{RU-IPLxp_^(1< zE2%T#{{R`$d?&{A*oNNUy3~u>_uER`_Wjn)Oj5&qMxL_%ufU!ohBJ6{0mN{}8aE^P zCb=k4tnCbN^DwB&SRZ9{Q-`iZaz2loc2v9%wvTx}+f%sImxk-dU$Q?ga&)z|b=kUF z+D4g1h09KGV*da=-(NoZ$WrA><9K8z?~E(0!!ao|a99vulzPvi@kv7Ga6CfF5}-nJ ztwX1ouOjh8@ehP_dv6QuVXfj%cdOxA6YXWB%2Mv99R_=LPD;iMH6lxaZ{G`WzgJY= zDq>N?2}6lcP^X0?-_#bVq&>!PCRz|yaUpi=4>zdbJ{<;&6tyVCqM@hi%;V6Lcrr_WFjFl+8U=(kdlt%XDMUwVu6haBEU$ zDFp^%5*#T(%e6+pa}~}oc)l1+LZ=}3tj3PToHg_Gcvs?m#JgV&(tCXgYijE2T)a!T zoMo$}I7Bu*sHC*xsQk(defrno9(2_ub1)!T0>?TVgSVSTEcs;scrh-e>wUWZVx939 z!`dGeczpDG&fmB1JI?M8@e$S}=;}r>B1=XQ9hHaD_&qw(;dqbu6S1Ocmn{aEav;6M z^t@*AGF3e+lmMegAc7w!=V<4tcwfaog__;ZYYz|A_=DiS_f|UH@5BAct^6LRoF%Q< z#trD}#tevR!lfR4I`rRrgZkzfh@3c2s7nl)fUz{P^$&5Q@{FX-o50OfnWW5-=D<>i zQRz)%V0q)R;@y;)M&YNaIy>DRtfLk#`@^2R{{Yn# zz7}F-{YFLwDaYPG{{XFfmZECU=^oqYzfqed1ffQJf@lkpHezaSSaZ@Q@jnLfPY2cf zuMzA!&evL3D0mnmD?+FT0cdPXvgb21B>0OCc2 zs$4F9p8Zr~QDALb<jyL?4cM=uC@Ddc329n(* zjr{MS^2nGt?lDUL0FlJ~o*0}#DK7M&aL>rm_KN=i;+Oc%_>1v8@o&T5!LHY`@Lz_s zdr9hdzZXYQd(RQ@{UMKYq2c|na~SCM8oHWfwz54C9Chb7-Vq!blg9l@X;kH^l9;e2 zfT)KgWWkyqkdSy)%i-jtf-iRhfD>l~_?kI8Q{w*D@VmhLOTX|B4(+x4Tff(Ib-TTO z??YF*JD%#^@_pBEMU3P!RgVmW=?*Sj{{ZqXB1(9^Awo>5fE*_ZZAy7NWfb9+FX^RA znukj0&MsJiO$dFeV~W2Oza73R_@lj#gm%5|uV>r#T5oBtlZLNr+|NoU6!8+gAg3M}`x@4fVn3Sm&1i9soPz4dYL zl|2^YXMrmZ@>u>v+#7-Mp5{46@eks!%+NbMBsFG!TOBMIk0@rnJ^ui&Urql2ANptg zpL$|lC?vh=boc(_#Qjf-JU~iNXevYAxBYs?j-P_}nqQUN>%fVxA&sjhEQ5f;{{UmJ zY$l+UgclOkJl4p2REFgeI+cV$HZhwb6t$z=6bvsQxEj>*=Jt>lm_B2x6%aB?y z=d5lrT6ln@th#$<<-8Y$n5kvLsGVzC-R)sY(JcHQrDrpiR5n$kCV zG{wYr*w+PKI>epA$d-`u!Dq_6t9PM|GsLQJA@K$O0IPsGzc1=GH-`96iT88W*3^{s zR#Tp|n5?9MDfy|zHYcY^sYt*DF$QL%51%dK0*aOrQs_(2Rr&t8yj&;X(bVl>8A5TK z$fR`102Z>kr_`CqqwDQfwn- zLYYcU7T(&4^4j~~S-f@`8Jx6xt+h~x z<@u!+J7P8i>Q~pF)2y_}Wh5!;LEfY1$~2{TPAO{fk$Y2doN?dccaFnPQ&&t@PMykm zV{saA<2n6$_8(8-l<6RNP+a6|lWKOY;44`|R1MWY=FiljSnB&@75&Z6jTauhHoyOk)a`EAf|wxjqdt8#r#GwT-a@J zeH!#Jj8mU(mXd2sji7u|N?evHd+kp?T)D+}#bf4*9$Jy}C?ktKzRT^;TU;@DL}Xak zFyGW<%tjQchw?Sv`nY`rSG5GRriDI@xnEl^Cl_5AsZm_uB}qsCDaolU*gQj{60PsYXf3(ur1TQquYHAZ8}&A!T@#_+NBoS7%ZQpc-z2=_n834AemAZ(s;o~a$XX(>Y z3rtRAb`PhP@s<}jte`roUG#lGzDy#GsSQYKObSsWmo5FzNgl=zelRFcFc{NjO%TZ|AL^2As%A!tNPKghbQM z77KDt0{A}NSO)|W&0(*9+$Sz#rvCu)DS)l{wac7wGl8?$bbnxWCk*}L8(NZad z7TDi+t#+(j5X(sgM3xr2-aM47cTH%vt2b#a?$-g zUZpC+Nd~UW*B^(1%M${KqLS|9KPJt_mwU!Ks=k|xcFI)})Fcu4sW2}s^VQQaN~7Rw zFmLOz2PCTz6a!zF8fwKyb#7u@V%%J%$IDAx)tq!tNKnN}wznFJ8yuoeCL)A&h1#+k zt+}@iap(h<%U`BGjT|8buStvbl7UK`4;~!t4)zC1pYS3@f zyWRrHa#o^JO)H?x`a;cHn#NIC15!5Ii=g$0NT=TOo}FNj=~Fomdi(YEg}&kh#Yl9C;s+4p~tVJWCm*MKAo<>y!wyjvbaG*t!5 z57QX0PL2u`hDdb`hv!I9NGQaWF$c-V?l5EXe9hdcjUy9nmUFhK{{2aq%1T9El{Mwo zD}`88u&QQ0b<5%v>qXw1T8FmpaZmm>-#^!;l31`T?*9N8RuU@(K&1}GuR#3Z3C84s zN@No6GH5X>efa3ebh1e#6VbWXmeEDa1xiwY3O3f6jZb0%V?EZ$H&W3}gXOx(gWmY* z>`5sA4-zUlUjG0cVQH9=g(*woxwo5XtAOw(sQ-+~XLGaxst`38io0aB8|ISb%R|riu8bCD6p|PV4ws}=BN1#tKm%=S?F%N7 zn{lY6Q_mii>u>4xdN4@|CF&x?DFGu0TCN(jCY|0sB8rPr2KkK@?eiFa?N`?|TEzF? zI0GC+l#tD9a^c=A>|NJ;cF zM&3ka>r|a{1||OhCwfOA0#X!8K~WSn%9X7-`DYlLZKzU;{{Zgv#gzSiokg6JNCGAW ztu$j=hG53J(1dBkurPzFN*3Tlz>8lhljrQ)-$03SLLSV zLV6T?HP=KOBm}b!<0gdK7CyKIMzf9+KTbN7hkEpgSA>9yvsbO+LMG&lq@hb4tuGC) z7ykWO&EC3sJP^|ol3JQOKHc(&(c4vs;+$p5i_T6z_jP6osTDp#0ztw-Vp~s$#ScS( zsGMDvA47>lOFcTm>q!bw#XvIi z@1$l*QcI5qwc6f4YWMwmy8sPcj#Z~9hDaj`dtdO`(^^E)I1J-CR*bgSI6r=<&ue#B z;1q=iOA&ADYsaaa)x0z-QmV~fM~wB|BC1l!Bv6_@y<-+R_K2~w)1H33WqCTXRKS27 zp8dV!f)ohUQsuAdyk!$5Cg1QAQ*T?!@oq=@l%p6v4x`-yI_&NCdZU zGsEfS3Hop!za4VW$_+%SgfO+sQaGpqQs*Ob@rJghQbh_Zi!TP~#=S26@^vVefI4dW z*FTM#BlwV#7#*vtlLK8o!&JCSt0;1%^g>Mo);fluV%?6h;N?QkPzsUF(q{|%a#vGu z38#BfEF1!&khJO@xgGOp_=LS8R%>)~SBtKoomAdYB}gQeBcyig+^CS9$~0cspaWku z-<8L)*XIPu0J_5@y(zWYjjTcnu$4J`kX)TB5ldE&{>dekvbsbZQb(0DUi}atsfHg4 zd+QP7nCVpltWV4h`SRajql>F^c7rY{^nE=&4ygbERyVJ9=eAJ@AIaHAAxyeg;xN?J zlZkFmT0FF1qWHe8E>b}XNOc35>t2~xXpmW`JMw^MEzxR}+zRDsD<(btF1YEm04Pl& zsX~Cn1vIx_%mm)wQcGtTOUaCtf8FVwV1;C*AO@v>b%AxI8bNF#Q(QdceP8cg5?FNr zO9S4V>76>lh$#T85Nl)x{dO=cC$+e?UC6BEqQ7#!{B%`^1Zp;>+~TRFQcJeJaTcWR zB?4btE%{}?R!Nf@gy^d^0w>S=Z zfoRioQgMYqaMk-bIyw+@0|>jfeUlS}vZfX^ZtItyI1RKLB&`Y-M2(ZdVd zp{|C#v^@7Zrd`_GtE_393?td{k zs*#d18Brack)U&2bNh6;OROY{{_p#VNyITHO&+>){KPxp*kGuwM|S5cX5TN&zotF< zI7k;16zs%HQEYBNC&)%|TDmI@dk!eSchJsr)ksdI_3qug5a9{{s1S7J5^W~fAfBc+K-Wz3&LAm5%B3`=Vo28Jw@CR54>4xxS%Nt~cd8Xo0>eJ*tzd)+ zigyVk-@8LCGi+GKqbXM0mRVyLgUjp6V;w0ll6-YYyVkV#=LJWFNlC6Vaoxmah+nP` zPExlN^Db-;TJ`Dy3u5d}&HY7ZQCL!OVi$guIfjY!W#@qIV$Ly4KRu-$zfs9wOXy@= zSfoCI!*{$ENFh6t#Obq*V2>H@&fJp;?T?lfyA>RkRRxt_PM`XGq|5;&Ad_DrJHNbY z@Y4bZiikscvMCHP5n_nc)F5~D|B^3=?>XD)G2*NHu85lTK>Um3yZ z*G5VI0IZWzd+%78xbUR`Sg{u)m**(5cyvti7Hx=muC9wJP4o8l={40sL)M;WHpqNM z7DCp9p8+EMC^py1828fKpvILT(t^?`xGjI>b!kP^OSrG%f(JCY453o))u)Ebo5xgCPo9P?f!FdWQGkoPLS?H>P&|hLFaR z5qDcdTn=uBAAI%lzCF~XsJO)L+6#H+FCL%i#U)M@Kke`;}~!h&e-eA}&J-*USUY3*D`iN!<2zyR$-LhsZ1 zv{m$V*w4O^E886{2-XYQGmCFNWB2svDL{83_38NK8wO&XAeRL8GNf)VgVs{*wCl|e z%8PjZQbLQ2m43B-RUk6PPX7QF*mI1psH_AmJN52@)M|3LxCGJ+v(zMMY$xgE>?3+4)i}(A4r$Q4m>M$&JMD;>40KLtKW7P0s9bdrpq%Y;%YqryNg#lGuz``_!?G|6>OBx=00UfMY=Ma zb(g}2aL(t}jh+7hJmYKXg{3J)0|*Sji@x12(lhay1Y@-#?UK@N5xvsIr$2X(UcFxg zLXt{}AtSc1cka>Sm5UnKF?tI|z3%jP>dH#(-DFF}RD9p7_AjT76(uRcKssCw{PT*c zSwe9II|08)kz_dX05MP0P&iMiC?kotd{{U~V`FdK8ow1xGPCitXmmII(Z?9g1ir{4NF1chV zwoH7+e-J(w>S_Tp=OBzXdyYZ+));nPDHnB2B_f!qR}{kTv9DQa$_!0;KECK4; z{{V5lE_zfx;uH!GnC2QSeXon@kqK66r4=(}EjT&9Pky}r02B1mR7+6r*RS^s%bucL zC7R&xts>*#J|IuJ)7v~u&4S8EE9EGaV1B)MZ>VrYNmHbPlTVI^NYj_ZG}K`@QntlQ zonJGM_Rco(;(AYSqubnR^C@;QkDBPrXgKT6Cxu!`QK|RZHvZ@;T2e*p){_VXJ`&Jtf@r+DA_{ZMn79W!4HG}N5dVj zcP%#iiE3*!42|=Q1ao#%&TkjiClOvTzlcdc{%9mqpOZ${9=4Ui%PApBK_s{%GBcy; zAFG{?r{#9KSAJbG%D+n7`(6J4T=YqD@gy**qwCXe&q{Er!jIzNw9nJZ)-bzYxE)lC zt7(#yu@?uWxB8tvgy9JUFj2lh{^F&0<`RXg5<`=nOHeT;_0yDL4&>h$s{LQ(Ox8Iv zb!CDBVCP=zwKC-aMhTNh2M9@GO@L}Su<1wX4I``(S|zkL-bLE(#bXCNJt$E3Q5`FP zZp<>NiNp{K5lxRR2Jc8w9^w*=r!VG`5ev&;H}xN{o2n&drJN4f=1(Xr$w|V5fW~Hx z(a%Ft9pHZBPqx-!328=Blv&HsmgbAcJpTa9^$IC1j8~Vj1?#*gGlrKjWF!?WEI^~0 zAPq;i;uN02*T(ZpOHkKD_n4C2La~7tcON zF&XnDsIXdCXx9Ah(M<0>$pw@SEy%>>O+Nbn?BFl`>sQ@+~)I6I>5N@a33l;kiz??2no z^eSExOE&KV#25ao`(M2x2mYE@*XFxpniG$HIv_Zk7DDbT9D#`>y#UU={0>p%)=>!D zUzIJF%CFmZ9Qt+1P)TJc5b2#8R?;X1$*}LAW+2@eZrn_s=9{|_^jFp|6_4Ada1f+~ zQ3EeO@AVcKzt-NdJT+wO+M*S@F%bhX$kzsH^7JLRClyi+iygLiF;bA~1H=t(-TFcL zbDe~mFvY#QfEuPZUYY&Ww!|{I`3aeL3gXkE_)%kW?9)l^@rn z7w!>IS=qr3T;}(Qp{u#iBSj(WkD=-B)o?XMPtLGZ1g8qk3A^6C_VG97ezdE%<-4N? zqCcb61p=73G#d^^(PEHEP_8=P%ezF;)U~R87uy&w6s3A*zh0q|_?onW1*%)6CW-=w z&m*i5Y73S^5o7$t->TSJe{a7~Tmlk5tm6LwY&r=nwcHUz>|-y?z1ykwbLoff3gg$I zl8*}|g?l{W>Jw$HM*t~PZaO?k9ZPN(ESC^W)ioJ^H6O9m{j`M=s*2Z}=SoDWN-6?e z!08@Mv1iUEHAm&dQ7Or^!(+xc`*lMpMB-9`Df9F0ka=@}bcA6FyIZrEiQ}wB3NZ{N z3OjH+Q=UI((~1-*uMQgY^*!qZGv&YN)Tq|e2|?-feY%pCBsnjw z`otuK7fp$wi6N~hv`Y$F9$Rngc0W(ot~gZ5!)EXC7YgwTxwGZoTSSrWBw|wEZRDex zG5215K&rH((>ktqZ_5Jyh>$0VH1`~5*t z))9#+8oP5D14aJ;FCX^k1OP{bm)o9|&h(37P#_0$X72GUdxBCYB2qw;xs4zYwo$F6 zg#&r6r|p!Wgq#G}wTI?^p^D;f4%YnRij;RUF}PI~u95^<}< z9D-jWdbmDbQIoAHZwWhT%U-7v#a4Yi`s@kP81bl=Q>5~J80F3*mb(#`v0hYM(eiYcG{W_wOUq!+|3Ic>*(ibXG zaI-*ih-D&DDX&T>aPVckpV!~6OTHGV`HHBeN5U8naS_i@xkP<(=8Fm|*B?{*bVSP} zIV^onl`%!Bs1;EdCzkKcZ5gq;QLMFpPPpMoqKFl9k>{q+GF>2>`)mEc^T;LRk9$EA z-1>j#qdF8Eh5&gJvHd{QM6lsE((#7y+)_kUY1_cHBLjz@?a|XK!p=!nrruniIHba* zI4Yw7T&qgm+bADaP;YW>`AH7uq!Epmk-zSbL`f-Tqi^5iSiHAFLQn>?` zNdx^?LX)fI8sBMMX&SfVe+ks_Db5|9r+M2!(w@GrZKbHb8tH0O$!YFtD#_YL!8+OcN7N+BN@h<9 znJ|zX{{SSY7PE49u&jCSsc=b~GGwV_qFQPjH?LiCuAW=3;nVh(f`p`#QVWC9nM4}e zlJ2`LN%ql>j-Hz?=TlEkaEzTXjhcI+%5mCAMML`Z^p$<3q)k~_GzzH?y}K2RiO59h ziYaUc;?z1)xAuV_5b(a+xzf?>U0p8wQ$jlP)qnd0qDm_t%aMthi%D_krvf;MsF-HU z#UOZh^z+Dix|6=trKjzjMFP3{Tw1N9H|`^?Uh6 z&6KtKZAo5)5>Z^!QcA9Y!-2vnQ)JDUW+jQlC`L?0*@)NL7N03IrK#lrRkiGEpPXpk z>+qI7IpTfafAC(vb=dg7Wvls`QtdUJEgs@zf^LL>b_w%1YKM-!O1`ipaHvPrkS1{R zQp6}Z6wcMkk((+^)Tt}r%D&(=NXQG4dj`>Y@DIjsk3JHI{{VV_h(8PV-xqjRlMM}d z_uaI$yNLGW<@xhFok+8WpfVORGyC;}#D9)(9Bc94NaN21H9(M%SubY8Z#eZ_7uL+B zi9B}>77KW-*3Mfuj^uuw!{e>tB%K`z==R-? zu9Ua-(EcIT32IJD7V6%-Y~QGVnf)GeC2=23N7VQ<{{SheP{sq7Q5Q67H(cY{ju+|t zPYS*xg8Gn=HB1DxI4_nENgF+Y$>|$U;Qs*dBltJtelM@t_^0AO#QoQX>&j8=yieg? z$F}AIq`?ZI{nt1bvskK@m|Nmyfl>~4P6}#Eji3J zjk39fNW63d{#vzS{{W9BT$GElN{FtcoU&}-Q)YcqY7#!_LfYvUp%2vWlx`0M@h|YH z{vPzBr{Mnp27DLc{vn~;M&;P|eZRzBC*Et!@?U!yYRDPJsgOd8=|z20>OWCQ5~rz2 zCY}TIXm&UzZN&wDA2n$MZXlw!%wJ+oXC^iB}8|fyHqOnxRmHD(5^(du?&7Eha)G zm3@?iok~RouY5G&_xc_F6s<*y_oscKwHj zX-j5~n=LsKV**uK#i@_0@tA(s)3|AJICPNo1!QN5L_aOz{HgC{~dM%CS?218M|7MJVMW=i7zqr`B3bpXmi ztxK>D7DY9W%#4xe&^yyotI@jKHswJ^&u^O=5dQX zU3stON+dNrx`el9G+(D)u15hUfd*>QRXSs`MSv6loX0zsePa@I^-duxQ3>{Xznv)> zC*p4RRqr0p!h7upOI8z(u9t5eGgDcMdb-;BnRL&gmanb80$Nol&f;YkNeu5xumRY@ zf?Csng6JfU&A+(TJ@<*~cD>Z}^>w4HX~EOel;yrM-yN(p=RcI@t37O@UMXbC7;!1h zx#a;}R;g=V7p*h5N_u4)!^V5Vw9@apxDx#N&4!kYilZwzILQ>MzhkZ586sl%c}qyb z04g=i*|$HJyk~I}5X&I2mtsQ~^d6mKnm#o6pSJAuwe@EwQ@N2Viy@mm<e{yc7L; z`UlcJmp*!uFtoA_Kn%>)%7Ty5FgV^hGE$_KVp_Agr{lJ~A^a8mG}ioE_}jNUT3Wrg zglT?%ci(qkku6h4x9#-jtF{qpGn!+Y%JJ8y`oAA9=wD64C6_R=K&43_S2|KKI9?rG zbk&fiU{C04TJ2G+H2h2WG9Dk}+Wn@28d`CTv|$|`u|F)T%-z zEWR^Z-SfT2>H$7h5^#8mMnhbw>hy{yWf!)bbak}Z$ek4oM`T^h<;N6P`}L(drxFyx zg}+VP($FbG5JZ&Igd?XH%n^y}8V)k^);|@A zPDo^X{#!V1T^8z7H2|ReZQI91{5#@${f>r?gtas^J9bH}6Y|f@CQ33Hw$lpZ7QUxm zW@fMJYtYvV&CR>qg}p2_fP=)|27AsVy04NcnuRnWeXEU*;lH z?7y!{x{)nLdXL-&j(6JUFU%fVB!!iQ6eNmP{J%Oru=aiqX!v|i?38A@ag1^ioV4R7 zWN>ZI-kkjuOz-;?Qf<>cee}v2Au33~w3eU&?Ap2KXw@DysOV{H=}Iz`W2vagP5_ly z89tuoT-QvYB~t>xU@1)A-t7z%hF$JIth3TM$MH|PWcM?HBE}fOhE<*x`T8AuKc>hb zNUdJiAG>}dJB*k@5&$JYs|hoQ%&dFQOT z*m1IdkR0wa-{!HU!xzMor%JsUv+VSZiP^!Pj1f_Z0QJR%7SUPHJs?y|JroVsyg0#TUV1V}3?99m`E-oA@}`M`Vhf-(9heH9-{LjLi0b}a=NQ;qZHgkr zxUstVS|47$ZwDZ)Da0McHm7y#8Qfger6ySg2`=q@p4r`^y{@z4D;UY71g71uEpEGg z9=5n?Uo{E5#AGi%#nrWw&Tf$RPN)Qxq zmm!Jy6ldNc1qR~EM0r(cYN_Jo96avmie!Kqmg&w3GY{KjkOm!Uc~Y^9DMB^ATUiK6 zkch(L9ji|te{Omn5Tisf17d%zyKZ39V~E<%uf4_&&zTF{K%6yMGacAKzdWF-bEN=Kutx=Htv}<4=eZaU($` zjDkp5$NaeUs+HSzUA%NaK@LMG`t#@dhZ0n>SBC*j*|yhHpIcHrjHdaRvYBx!YS!Ol z(H~D=w^jfL0J1;_KYn-GACyT4ABjWt+t9=+?qw7kLM*u&RY>8@(*CERLZ}kDi_`Ub zXPg#V+^_&Bmj$a&L)pqQmaKHQI}Orfxs4!hBMxk3=KK3~$xb{;c1YLPcI6Ge6IbzO zKQR>b7|DuTC6dpajSGq}`kyyeN&?e}22x8F_lvqxFoWV={(sa9tv@mb)6KRrp;H)@ z@Cq&Z^7MH@EJ;=++hN}*tjVcCVy%N4`MYlc&QZ$XrtAc&`9RBA{=A(T%9siWhbd>G zKzrT$>j3JzR9kY*kbwNfhC=J!&YG4Kr6>>-+0(jg1Oj4^kY)rqQKO4erJ;9osVI`4 ztfOENl#4MGr^}NZgVQKTB_Pn>XZ*AzNJ>{RoF@Kl=kc^9)QqK0;-wq%kpequMJjw( z(z(0o)Zs2j2fea|CaP#4rC3uk)~7x4FO)+tjB7R)js&K-`Ei~;$3#I(xK(*M>EFyL zG$;h6LbPQyA6Lo!ezpp((V^obpW-9$T$0Z@th|qNF&uE8VNKL>Z zRUTADLp*=m)70{mT!LLgKJUB@X>52Cgm!b&o#_d6;~SEfgkxv&v>E3$o4>D2jA2L( zoyGa(oGLs;mMvX9YYVj`0U|5rqle4@(ReD~)8DNGf#HAT)gPb433yRfe7br<{X>>5 z4EG~VU!^C@SD${4l+y{Q7CvG8p)!m`WG4=m=dO?jtQpG(0)izg^K;D=jOVMMAphE7u8Bh1c2PKivVd{S=PKJITn6f?Tx_f5{{V+pKzF4K zRAWL)aJgCLEuNli{bSjzK}@O?*cWduU)R&C3RAxKi(*?33#&~lo#PAIv8z68dnQ0n zclzY&X{EG^<0)AS52nre&wg>8GR_vxYShOehtsQoK`-ThOE;teb4rN-3bC~g<4;JI zG4m5r%4=(Q4o~xE`t@RHQr2h^3PZaUYo9jxg5wc|w56sJvVSP?U-{^Dta8*8wj`Gg zaZ|Q@xyQ_N85c!`=FTwsOFaEL=c7eXa8NjIue5!&mMD=@td_>`^OukH>!Y!NT|g{@ zQImX+#CaI)#!^iVJf)oCw^DU4P+$A}dd0`uSi~GD+q0Jc02xRCSl%coz+N2j{;oRh zjpD&X0HnQ3QvS8|iDJBETH*Dl_AuX7I>SlsAZRWK?0azC6aa^-?wPa0VyW; z%N$wDdsOxcYdPboQNk)ek;>vAF|``;mg2SvwpmrTaq~F!AMMpJvaU*z?baZ@lBNzi z+sl+<)Y?*tEk_1Om42_LKK&8MWitk}RTol8a`!rE?H*lw5#J?dV2~ER#h#sWJzl#- z{6dKpdz$%VA{mKIyQ=*xHz|8~=j(j&)q$mH&N)SyBBA&GuO0=KOb3F)A7))tirAkh zgHq)ec~Mtu_!pL`A0RJx{~$RlOK4AtvOt!k)#@3uIt2dIQrM-*Y>V$#oODzM1-wM)8+hU}A^X?kIE5h;0P{c$zgbE{a(3QWr4;iJ=jqWxR$Kta z!Ns2a>kxo|q=#VVcRTg@0tVKRxMJ?S14YWpaQkEH`*dk(XUJz)?B@iTfXpmt2K6~N zue-o{x{P8)jU{@tC0!oBPxk4VNFE{;h#E6_z(R2k2_d>L&$~1MIV-wXd}O*+#9}|B7%jfl5MUuo4lTCjVW)Tuf%dA~(9AL-?(fZ>T)sj-m3|*)-*Uphifofuw z2{%8!>liv^P_b$`qa?YyrEs-%?=MUUpfDzH`tBZRKq3(##5&NN-2E4pRv=(oAPFje&_Q<56J`Es_JEY)0>9jHpT zS`U{_h~O^n&$}G@bOez2KnGgb<+1$1zUB#F(M;FwqCAxMCfkb=Hoqd+tW%iL{rZ3~ zxhljB_XAx$=>Zc0#v|gyZMVmCiF6d!(%O_rQooubHz&};>(x|TC;;K9)q}UED#22; znW(}D1GAfVNKfOv#F9c>n;AHX6!ph8`rii~Zhb0KDKC~+uYR?SU`UphXEm$Z)!*Zt zG-t#;!gm^wvutP;$t2Bs=Dyt5UrG9Wzxq(Lng^pB7yNa*N1fw1l1im5SdD8+5NZ90 z*S*}VWg^zhBx>+&rx|@4>uy-_Bo7bAzES66rL<;7#x^1Rvg z_3KSaB2i)uuYTGTTa08U3hU(e%J+DzZC>I*8yR4+xbvTEUHW6`(Fti!Vg;?~+rZN? zNmCQy0lcgM$T@84@n!4*MPtvE#LJ_P{lD$|B%+)k5B^84)PB68CNP*E!-q}ne^?{E zRuYW4m0dfJP_;eR^g6u14~T~W!xOc0>l9j;vGEj_<*6Bb$4h<<_6|a(?oT>+smex9s%nQZa~v-O4v&1w7yV z`uUF*e&Up@s%e=8tNQhiSHR#zwJQs~#oL$d_k=z#ueUM64hdAZaanyM>3;cBrDY&0 z^~Kkp?j0r6Ft$$dLhiMtEk;t3!QB~H-EAGsxo)qEeL83)1h5XEXgjy!2$O^)jJ&B8 z4-wa2HQCLU3c1^Um38;&$w^>O@qGa6oj-6Xiv*|u1x9q|zLC*pMGCoH7m#&gTFe2rt!@JK0?kGNQyuok9;k4V`52`|b!&0{zD%uwNv4sxGP zOxIZ4NhGHc32JU0g|+o)^oc1%nR0^^%&WD=t&x0=P;`5c>}MHDH>)U~Q4o}wNwPdE z$Jg}fWjI(Q_yze2SFsHJq9#fx9uS=Jy__&Q#RKBL@YnGU+e%U&%7MBijcLVK8M_N} z^L_dPQgEn`;`#4m8=p@grD|eoNi;QaLvJfqEB%V=cA9dJJ?DP1%mZ)ck)baBPrvo* z(^G{Y8d0d^&{u1lUNp(Vq<{2*FQEbZ_Kn@}u$u6uTcaYSS45;~ma?HD9{4`}ETmzU zT95HvH_tf7;}jN^CWY!vT%7rSBcZ$+d!kttsKBf#=*rx_RI1?W6dfSdFI^sksE;h5 zNnolX`hnf{^N0HS(bLSOwIgUt>5tcs-;8x5#FE0?`#z94lL8CBjAeY^rLw$v+jmja z)41lNDVSu1eP4fP{dyTo8s*c<-aas^c1A1EQiR}z=pQEJR|UN4H{^MlvzuUD?t!nn(y`K91sLH7kstO zoht_V%77D6ngUzOgY^@5#StncRX&oAdE)kmx2^p;^;{SYc6z?P&e7x6q6)k?pIhc! z{6$An8Lg~_hQtztq&c_xHPb`@0+c`{?abVHdBg%$;Yb(*U#F}}_WD*NZr(DEY(A0Q zS6IjHvVzislB)!Ya92x(tt2TcDJiz!n1fW17)K)hJ%5M)00sD~ zvhMtQ!FxR|4*vjb^*hZCC=rgMnL65Fa^v+q`T7s|=lMj$re6ofsFOgF`BB{DJG5eP zzfBVXnI>Kp8-bp^ntR9O{{Y3`hn^$w_j}yw{!XTm8OS2oNfi>zU_RHLzJ!Ugc&TBF z?rz=sZx|{2(iT#ogbeFplWS@m>uA@})$V&uLr+pE5>idV66ejkXk{PuzLnxQM5!dC zHM-E;DKf*P9nPKW z8v#U;l#rz)Js39c>*)=9Zt>P*rqpI;it`+#Z;JK(`Rgidf(@KF=X}6#?h7JfXDVEx zvJ?mQi(!KAc77O?k6acqez#U@JSBg=@ms-EuS028ZLvF*wqpC?_oDya0Vx)aQ zrTu?SlbD4eWr$HB>6h*842e=ulC>O4)vI>4-h#J-dx>f4#EJ;n<)DdPhpp$=qe@a% zkQG%DFL&EMMw`MsOq776Ar5Z$BDH$HyG4J#@Lu1$(v)Kpae^#vE^rIQ14pg?okZRq zTJ2R_jKfA=A_z$i0lCYk>HMQz_`kqjAKk)#pV;YYvb5BUBfI5ewXSln^uCc_1aab% zG>6K$yWiBq2%HkYcw7Gf7p?C4a*ZGHf8c+F_@{5Hqo>;G?vz;uqzJ7J2^5~S^=S6% zr6zop;>;iQ{@UA8D83V)Lsm?ghP?6#0(rA^12rK~<^anm{@vi&dhkQr0+-i2ZgDfKo zlz6)R@$G!QK7y6eE2?u9f6ufdHcFCaDoR47t)Ee=X>V4nRy(fSQ%qwm8CBNi2_aUk z-RZ+teSLarQb+*fu0ikTOv`K`VhBmXf)kZ0`I{duP`YrPw}m5ADu}hijFr*Ss-Z3>Rat1@tkD0`y5iuIO{+)4_4a<;C2`p~kh?c5B z4mLhreKUe|b)Cdza%2^a)|7)2<-yMs@s5PF1cGeMceg&g;ANGFq=p^#A(SU1jWj%- zOTHgoEYC`)6sVSQsLwxR-D80vE6f^OPikghsA@Om^uB0)FV~75s6cW+uVKfWatpe9 ze*XYgg0%HU%fQ_r7sWNsIvRm2Z|AS4Js_!C3a}MAhE?Csq)tr9W%>idexrY1uR~Hu zU_);fA%z3s&uEy`r1e289%)+(^nE@0;0bch&_OUO1;T~s3S0x^`o@2pn2#+otd(V1 z?tka$A8fWaVGJ4A08PcsFV6hKL3(-0 zS0*`c{a2s%>bf|fFhmsvI9G`^tqX2V{lsUx)t4hp`p|Iv#T`IkU4e@g5ML3(Y#g4y zh>)Ei<7|Yx^*{GDOl!)c8CCn^kI?4o_~)wt#+P@C zs$xR$B~1C~HP0-fQ&eiGE9EHkvVpT9)d@)jDhx~C-Mu*o;1E`o$}ZOxYZ~|M851ua zxgK2A$oEh6J-QhRBBA@x>lR0aY9@f>*5^*|7|UAaM1{@D(x?-jA1TkbJxU26DA9-O zZDPt<#6UDj1>Y<4k0q*=A-mwRuOp94e{Zi>a-c`?N(*j5+VC`&Dw?H?EcI*Int*=e zBV3W>ubXKXjJC>En&%&3?gHoC^BlpKKXNuw}XnLiO80ir`3P+ z&2@C7x{JGvw9J1|IEVm%$4>K!W2>JnT?@!Aa0e|>?bj42fQkT`4NP#DN`gXq<;o*oGd9B}&L{d4_#uJ?U%&fMU` z3Bsh+?k)P|6GvZ7Z%=jkR7;dcnyRv^ip;+KSHxH>umIaLyS>kpaUhUof@xRF^w7^k zSd5CB8>W*sMuti3OYUC}O3Xk|Q6M|Nt+^X@im42z!W@dxm|eSgDm~m|6_mFUSkeV; zid_L_;r0u)=s#sjSMkH0-u44=V_VuI11gtLa&@<-pjKas1p}m!5!eRfW6d6iy;Y z49V#q8kHoBi;SJthm=EouM5UbJv!n|13sTG7Ih(HI45sozrevWAAV5A(r)CDFVJPter@g~vTl4;-$!eh@ zBf9BgIK{?RmAgLg-tpCvlsZX1662B2-$;T~6hdmN_orBjI_`7Ec7!jKxaT8-{kkIY z6ZXXt?BhrYT7VWL^p9h&coR1yHr$FMyK#u7exF{bsbx5lDn?}W^8TZgtN>N>E#3Pu z7v@BU*zS#t;wdH~(Y0jWeKW(+(uHCnOjr%+)`KrTkT>xYa56lHoJdV$duWc_C1dIC z{{Y*iO+nS_I>aqX2?SH*XR!Q$BNaiAf`V6>%2f|Jvy+aEEoo*Uk~Op2*zd{$RsQNw zC0ag@%e%n6#;aRuFP(#aRgT@vNryaDdmjBXlrph9y*t(|FAT>dRhrLU{{TFd%UosU zoa1co0Vbndu5hQmanlA`lFCwC5xaU=Ckx{{SyV zmKBAucvasxwlsw$4_eTFQ0w8Jh`dMPZyfAAcfvJIF8jl~h-+!7dRl}Hy4}9Cc+}9; z)7=e7yvI@cQrv$BCyU{i!^|{TX9A-zMXC!CS8)tWo%R-$B!v_Fv?DM^Zyo*chsGWS z@ppx4c%O&%M6|ojJxvbd!lyEE?K`8kH9MZt8>Fz*D^Sy)u9!T<>*v2w;CPTz!_Aw6 zh>*lAIK~}S1H>bS;zH6faI@S1YEn)>uJVuBR0yH3w?RDNtS0WaRyx3YG2(9YIUGyH6&^;9+q^` zHbP}eK$~Lpa0z;n9@LE|@ke8;*lKs0J;#SSySvR^-Y@35v1IL&sTo_$QlnV9$z6JX zr_VD{DrBA`zz_+eQr6h~#t$38aOPUE@aG$m*6uT6?N94lc+ZAuN3@5F>C3$A^!w%Q zwEKNGY;`p>;kIiT9!e-mA7igw!0|H_ktIPB46+nSxCNTo=GBiG#c(N+GZK6XC-{;` zXSsaEoO(fi2ibOC!yVs?=;{#Ai3n@yY07Tt-~Am*ib7JT`*Fv#@qBdu0JtUas|>uI zi;TnRT0*0QlQ6DfBq((cqqkG}Fw#B8hG;t8Bi!~~w`?OHa7a?sbNJtnONS zSjzPE3D^b=yqt8o;*}y|RF$b{0D=eIZEa|peYke|33;Nx5}k*xYK=S@f>f{mBKDmucM=c;w7jY zX-FtrQ}~g}H6`)y( zPmlYq{{TzFejnG->^mO!w}*#^eW5A$J*JOkDN9pQ5dhL82se9L>LmR$=?LN1#POuA zVmw47fRz;r4ah7_tYJBveDg6pG`T>e3$=sPmZ9d(eInP~ekXPw52M>?_@{5#_>YNb z_S(|!t55!huBYYxSMeHJkk#D{P0r=Wwou<#iTZrWs#)R5M4Uqoqc$!pnDTgOVJb*7 z8AVJOR;ODwq2JOud+}TG6S41n1OEU^)fmrHy3?0u-F8>oP0}?ZuPAHjZ>%v!N|l~^ z^?yX*r^@3*^Z=j|prD}P%YZ?xSlR=`s$8xeVMhp=QB#(n+0OP3ZyG%Di0k%lj@Wj+ zqzSR^4Q5;QHEm_7s~XPPJ8w9zZoLoMS)8egb*)CBvKfAUFBr+5lqJB}Kjt;O*y!rc zT0%i}2x_yQoaYwUv5xCk>h-Rr34jGqhM*6n3uWi53k=2uGXgP(sd}2)*8JWP>yK@r zsjIKtMp4=tI(oE8lDlBb{OeWw`d3V16G~GqS*fWG&8>ZYOcMZ61!XRsPkq)j{{Y4x z5JR`^JE`|`j-IR`DG-VO08(Ul342mo%^2&{{UhnhoiD`Nz=;t>6ywrOuij_XA;u)lfPAax9EbSx;hooSVEBm);epJ6OkirG(>#@HN{GA;+Tt6~08jJ#ZsaTy0GW6-tzp;!MGa)PeHRUKKM8!z>^X zt%WXkjT`a5Z4Sq=?lmqqt*bbJ0o#m5g2WkH@BJI#-E+_}IY`l-{kD+NQrSr;bqZ6| zoi=aWa983-Z7omDj5kQtoTnE)XEG4>=l926>*?Vs!sHOuZR>8fyf4HhO9T+aSEn}C zIrme;r5$CIUAC1~RhMWuY!9{d=mg*pFx=Ory(0>2qCqJ*aGQCH<~*{7x*e3`7{~(J z3LV6AjAIA&^yziYN{LH?kQ~*vYTs|n2`RuxAZ2_0>uj4?vG{CAN+gpF&?WJ@KSw-e zyz$c0K~M?>$iH@_sv*u5NlMs?s>e=yM#=0*{zOO&ViXm*ET@m=wYL8Nr&*;zD=H<_ zPG62fk+&o!WVK-<2^HM;)-dlOT6>luGM&IU#ocm<@s}L*)Tycj8#P-h(VFm|8N(#_ zjTFNo^w!$NH@$>OGzI$+N^YARar#^9*2-5}9-RO&hdx+lAdY@i{QhFC-7<)ntn+Rw z*0{mP(c`BO<%j@~du?MfXb*%WsRwI$e)Y-|Oszp%H%6Ro1J&ah>hmzC#ekJ^xjJvF zL`zaa(r~a8r4uM@SDCv`oNsd0*AMD}-KZL+TiUy=U+%w?av3V)Ju4*Zxx$sizh1q^)1{~F0fmD;gF20vdFdGZT6_pmusYNafv$SOJxL5uwoz55 zf;{bu><%xjLE!-dF8{z)kb1Up&jb9z9sj?z-Ale1%3xhltRtgo8RI=N7wPVc^k7Mm%O zrKCCqMO=3MBN7=)k+`yfN;uk<6p0%wMgQ~*w`y6T`%)+SKPjfaH^0GmzJ%}ouG*{SqziQO*`uX$}*1F5zavu_{C+9`KU_%{aKhAxd*%cVcA3N zOBnMy_xtx6Qjo_olO?9*v}Co;6o{N~-$el`O90KIew*{o3V!ASsb9+@X6G12O32=1 z^4zIrWny}H7O>>|b;<+;u*3=jl((2{z;$oHC@UR|Cajx+Jon_O6`4(B;Wa3Q2TcxNG2`Vd zPga^)N-kS&;#fUYmNa{3mwr%G5)!2qB$8-17O9}!^oZppKw}ZNWQh7j6pTdMY0Z6o z`XE9>sj*?c-C<>{sDOMV<)R-|Joq|YoaNn>`>DZpQ^^y$Drv0`j@=iYRMR0rH*JQ@!$5678>y3}Q{ z7LF+{v+a1#x9QVzfFKe>kihvp;8O|-U;;|E>C4-!1uBw>R+)}fcn~p^c;lwO@hLus zu3`WJoS(Q3O`yEN)F^JPR7nIWGDdu{arNq3mTAbvj$ZQ+|4Mg0$?W zOTp%A-mr6ZSo-uO0YaLMKM~AHBsg$?GS(!RRWZZ`|o(l zC5^dxcURCEX8!<6=N(+8t{L@;tlt8h3Kyk&Z#edva<=-UtK04$^Vg{Xn`mBS#z;_8 zV$464vagq)q;0gY11%+RjJ-Jj0JmLc1N(|8W@sQJ62QCJsQsMdGVc8V5=~(-NBMZ? z-|N-vaxlGch7<=cO}%1$JX+G%>U$jKEJs(5b`5}VUK*qI_CDA; zmjR1M1O;MCvb_$+F_d~3%x{YXF={;VkLlDBGc52~V*nVE0NyRUr^kin=g! z_5R&(as^x%E)^w1#e|)zFG7Ddk4lc(F1dYPaUA+5{{V~ES1Li}r3oUAKw@%Zn6G@J z%gQnrnh?FuKe6{dy>n-0jt*uiM1=&`uD=|jUC~)DH9>2}B#L9}%l&$Q0AZ8&&+!+= zg^w9xpc=L|JiRNdWf|4`b7<0*U-duRsUgE_6LJU))_3cX{71XK*<~uiycn;k^y)v^ z@&or0Nk|0O-2NK-#xb>MG9F$;uT#|H2kX}s3`y(Qj!nYF&vrfe#Hw1n8O3D3TYY+v z3mVtH?H6&EgnV_3B{dlrxx%*HO5?WN6n#1B7+8k8>0JBg5bl%26m7zO{4TC=mW2OH<^{Ub}op(wrj~ z%PLw5K^1((dk-9X^~si{kV#>ozeu=HNq2QvhRpS#fi-m&PS)c2np!|ImzUQT-lO}0CRE=k zRF>ueO(k*bpQlGj1Qs=Zw%^O%I|R1@yeiK|tH5%HB2eUS0=CiXil^VEoI9mJl)q7z z%mqMWQCEx{#&>3jbu{n_5=#}$3uAmrpXrXS2^3})J!t1X+9d%mTQg;T?E_0nRH1lV zQJThBBlO99@zuhG4U|6|;#G!NWhcT(8aFCgSfLcRRwU2^=-q$ADb2%~?K{qKo=$=i9GG^u&@97`n)8+q1hv`s{o5BBWb#s2kGm^L$9XrGQtpqg*&7@U(343kmHu?{wxt}iO=*R ziQei{C@59D@)V?T^*+C;*2J`v;v%Qhc*Q^V5`f~ypx)uNw zeKYszgF%EB?)!U147r2~0IpT%`p89hPCxaQHaF$5Onk*I52yQdRja@<9gFL{5TPI_ zs5nsb{pI_3v-VK}DOn^m*^?EYaQ^`AZ=}M(1pv2o^rtq2)_|gdQd^}6_iZ4JZ6{N> z(S$%9NS|Qfrun=6of2DruyO$>sBZQV3T3UE7AuR_J4a^z5BPuO>2|di-^x>ID#1*X z*C*Dx^B-H9FiZsau#tN|=u$LzV9PiI;bG;sc}H1BQjc#Kv~7*4>lc+4gK{6~j=p-f z9x!Tq9o6H}$i|Q*s9;K}7(EVW+P+!EAI5bpl(!k3i(XOU!-Jpr^)i&jOq?_i=iB2v244&%9!>c?kEd@+w{ z;q1&Bah}=&Oz`JCw9|KeW&KS|C#fJ316M10u*xefQt=@R4oa|xqrdiD^R#}B_!gU^ z+v(0VQHn7W29}w)OXRcMqO;e}xPnzMf;?TYuDth;XTyY{D8ddD3Nf<^c}2ss)|5Oq zR#)Yb5-^js3D4&}?4#P%>n3_pjVJxw`)cHM&7)>Sxsz8ZOJJO-k*!0%{NpWoR+fZT z_i7Tvi$5)8vacbJz1{S@)&Pvy+BlGcW_VCZgL$_wZnjj6PIy*%4I3Z{A<8QnZJ1Sy}?= z18*T7bxJsZ4#&E@1>^nH^rum%#T&S`WCqOesPmsrizxu8sm(6iRwxE3peo0&zj?-8 zk9M83mkf03i8Y+>`kwyRo`W?Z)WqUre@gA^7h04`5^b;Ve~8nc8uwDv?xCk8B|TU~ zkw|WnQT=P5uU=b^RwAMejb8oht>fB#3SIzIKn?-dl`l(eV+Z&p?PVeJM!4GfR+2aL z{{WozJQxQE6(P3Q;>`$sO~IN}T_r^MngdL_d&XWU45FKhilR~?o3GSzdKl}|@THIg zTFu^3=9!CyVhXGNUJ)=SC6h!^s&?dCNmCHj9}p@r#C$vR?@eQtzZgFSd_Tvub^KGq`)ERQ(~+y9 zN6bm*QA^u!9GJnLy`Rv&xUkZusmg3mPOYqG@jMzPrAh!7t*UzEtbT2LY4}^+_+N9c zr~Eob6Q3~5eE|~{!J4mbzJzi!#&_LmLM+I`>Gi z>&suZ)|;yuA`Kz5BM@$iPj5_~oq6SO>0G7+o7Xq=J(%t|A(`k%^vViDTaSz~eYDge^tE0rRU@msr*MW)Jyt!cxp!t1!pa z^rqI2=?DBd_x=73SpYdM4#nAqf7Bo*kgHHQp(gD9E%YClA5K!! z)tf0dCN?%pYA)&zG^kH}b!CD;p(N(cHhnfU-Uy`P@d}m|HGOl?+nodn;@a~59w8-+ z<`nO3pj&^JpRO~cUR>5#)+)FPB&Aih@Ejah+o7&mSp_sS z=b;34@o7s^QBVjqZ5qcW8a7ZymvIs@wwB1R0~#Mrah@|SgtDEN{Cuo_t3UE?6Am8byM^Ex{or=6n~q!F9u zl~xRqwaV5g`}Dn(bEp>9qbtQ#ElEmLL#aaf9T4|eHj6B6ZLh7l z_Gs#*{!^SpDf#NUG+C)i4QdVRL2?nS8tF5`QS zGk%6nw>WR9%9&hM8F$~DW~+fhN|K=JRf<`etOEf}Zevk*{{RAb&uuxe(A1G0U9^2T zb4~hZt%+PjselsOZReKIoX#CUkdomx8wjfRJ_X_$3eUFGg*fsyHkR9hg?&ru#LbpG zBg58^DUyy9JEd2pto`;OfAD?DFaE=*RJMT$dD`^9LfZTEVwYyIt@QW&K!_sdk?Y#` z5ug1{IYf`q4`shrzrVj!P(Vo-U-EN!s*ngulEjZK;(b3O^2tyI{$!UT@N?S6sdztu0?APA1?i3XLhk*Y)=3SV~AZs7{0Xh7!4D1SKwY zBeL*JXLNJs8?(!T{Tmzl^;IxY091~d)wO})bpb3sw$r-AgF}ekOy#5cS5>blx)SAN zkTCi5dPMQmJgG$mN9&7yEdKy*pl@FN;hAL^T_hx&hbx?|NSM?}#BEPl;I;Js05?C= zsuYhC79IISr9~tI;!@tuK&O4YPZ=U+C|)`B#rk2chSd%jmT0gla-u7^cIg>zS2aS~ z`{MT!Gb(zBlG6wZ6n|Y}NX!f;uPcivKIh+;_o#G$Swrf~As{ zFH2}omRiPJqy^NYQIW;ViyVBpy!&(SU~WhIKTNx%OUy17he;WKZ{?k%FV2*2ASt#r zfNKp6O1RIj?*%DZSR6_)53@abI1<)ezqQl~x;d9&EG6CGW=$m461 z>17|g)n;KNH}Mv4*X|67g^Q>FbnV-_LD1CG2rcdu7?_nCl{p$YKhveu6jZ#!b~?qu za_;!I{>wH{LEQ^=kTHteyLIAUGj09Os+m><&_A8Iu*x`);l)ROe(-ENkg3iwVU{Sj zMK7*mrfbo9T~dIeO0g4O+b)n!WxpbJu>#fmj2lD&BK&s3Qp zH9SgYz3WHwFP)%e0Hlyh>NASI>ZQaHMAmhsZcmZbP_{{R|(TvPRY zq7y5`4N@~XbAi7(-6l*ONj_=$qN7DnPzFCo-==~cDIk~eGRG?CnC&I?N?X+7Fd_|mR@^wA5XZ%E>5sa18SxsRb(UN(XT4L*teZ6|BQYI-! z1`#fRes${H@_>YelC=l!kIK}Kjae5HQfzlJZBkpJ3Z$@)r(G~h1RN|t7TD8oF|T2fxks8`kY(U3XlO_CsKeUQ>(-jvTJ@efRc`olBv1CQVjy)co zmI8xfBmfJW?cZKR4#B?^_vih>=10vPs8U!2i18GvyY%$+>8C0mY@ZXB+4A^~3MnKN zGC+IVcidC45YBQohca@4d8>gOwa=z;o{E4#-Fi@)Lj0LR`V@Gp&N_=jt|U$NDh z9{&Kdbv8#{5wbId<4?JOtYlM56{YJx>Yq)Q$IB@P1msmEkCAWnG#u(9M}*>tDM=26 z-mJ}@#8;knj^^;+AMn47dp!>m(3X#R;l0;q+i7;X-MoCAzj>vpyH(cGbJ_Q_k(3u| zM3HA-KH~nIw3)J-?Qv-&s41*L0l)G|6$~6&k+&m^{{W9VTGxqE7yMKM1{ZK@2+VnH zOZeYMOT)kP{{Rs14&S`-Nl(9qm+<(Fqscv*;F-be~3!lFejKpDrK zW6E(7IIbOdWlJP0`2r0duG?kO1ns-+PV2tZ{xO^>>$>^p5eX#*`i14}xQ9ke0ub9AqDpIm)#3 zipTz+;hoRt>-f)u>go5oTAF(OuCHgU56bLzvWC;P)|vUX?A>`b@dVR#TG$E@PskSbh zrT+j*TUyWF`ZCm&5HHp*{lQE5CedUq&P{~oNn)0DF8B&ykH9i;kL$U9CJH_-nj}Y-5&$!dl z(e8VA&r)aScN2rFeZ;4Y03~Z&S2cE*^{y^-ncOVdNR>KM;UoZ9X4igS5MTYFQr2b} z>Qu8}?i!amJCgkjG4Y>{{s`~~OGDvb2<;y8x0GS8uly{{O;b%|4BQ$qnr&|~Yvs>N zjvwmWbhG~eDsh)4ZBoh?u1qS=OL;)0$>8NpGb&bST9!JIy<(5zKa0BBS{mK&Z>(te zfjw<$Yw32d?qv;aX>80jApZc=7Cw&^Rb3iS(iXKMOu}YLU@()0g138m!z-J^NkN)j zEciofo6}F!X@2YCU2h%!Bfs$v;{O0Yw*1X%r$yAeSi?*!Y~(WASY+d`MK6UsHWW+1 zQ8JBo-&X@V(h!|96r!LRE3KN@o8NJ!QLRqvvGHkldY&z-T2j{?KG#|^p8Yn%Y)M=K zI(1mO{T-yGd@+*@fRMFe2*~DjYC-0nhj-dbN4JLkJsnLw zDfaNxcE&rO%ba1WD3d&o;%o{6MZ+q4P z@oxhp8hzfZbYr6#Ys0wEjYsm>gtX>LH0|V;c%Ux&iClENWXL~osDzMi??xie`^qPY z;gq~fSo?TE)010EX&S@CyRQqDmcMVI-Rbu|#-5rQkddfHdSm9CuA-HnTWXHIKLf$> z{6y3*?HN)OL%v|?M{OQ4xUMIK;n1ve9&ij8gI)4}ah!7Z#a*9y@gIz7_)mrQ{nvTl zcXF1L_QraW)E6d}oCP$<+xlJ(zN_@nBZJ|BizO1pZFccjI{A4=f|@vvCVG^zRfv}4 z^aoGHbB^--C;SiaFT?MHJAUK2)6?(%D)D~nM@zlcj+9+559}q|_FdMOY1>V=^O<*F z^=Dr!82jIm`oGraeMgB}5R)&2Ksa9NRYoG&Qi1d_yTbi7JSt@^N5)S;MVm4XdkoBU zAH-f2;r)+!KHp2ZhjrX`+7+)p&$e~6ySaBd64ai#tvJ_l4IbmR(}ZOJY+~cAJ`oF< zC=|;h7l=7xkPVw6L3^9!4o;NiNeaW0rK(0a@lMk4}<>z!5_q*5Xu^|?KRy<_a@y5XeOMYD3?9!Qc0M_eeu)tzsq<|5`=)3 zEJ1SPyB>Cmjsjt#l1Vgd_MqClvX15aCjS5dUEgP^+e^Rfm@=GCKA4(OW1df&FCPA` zI`aPjQ~v-n1^&sz0M)egyH@!|gukYQgd~SkSO5c;H4aLSuSop~_+R`Lcu$A+-JYy_ z4NYxGM9jN*?UK?YCCh5sRxY~md|&xw<*j8?LQ-o(Z8gY7l&%<|Cls(rxh+jH4a)Jg zyZ-?2-Qm6;;FYV}Y3aI9lt{<&{LOhyyJ{6*@77X&xK}XYUNsY`9<_fcAmP?j58EjM z^s9WlazDr4gZ;jT=IO_^(9w>c@dWi)z>B6qD2?Q--C1X+UW0=Auw~_XYLzJ|22f ziE~yGF$DbS%A&S`aM;~qU}UU<9f>6JsI8-ezC7?9M_O#4%WU@5Qxeoj`W~LO*QMb& z)TJN=I#pg}nXA)oP~!MGg$bF3&W)9Qx_L&N?mix!$=e3$^KP^M0FoJevHt+E*0MO{ zyMj$B9)i6+<05|u3t~@;k)`?HKbTM5_P@hBNbT6|ERjeTw!IO5Pp&#*T9Gj0#fd5u z&N64qOtO&9`8B-;&_8V=I)!J{R`JRA=Z=keORKX|+36SIlnm6ZLdKk!1EWRz!?j~A z5F}X`?iVDSHrKD~$62#OEaDh$#=^Ar{YKP@sZJD{l1@Xj&Is=)_*w0QBan(;(k;G+bcU>5^K(+ zNlG*6SmO^aE9=#kO5F(q2m;i4`}BdJIRIT<^rT$=5bn13x(hh%B>=EbGMp!(b>_ab zf~gY#O9B{+?mlDGeI;Y=OBhNN_Zu3D>fD5Wi+&mStEUdxH!QUDL6y_w8C4i@Lg25j zUzUH%ctEwzVT8JlRINH~A7c7U(Je`97HtS%-D=#-bcg55S}~AFKQ1$EQgJWL<*rX# z=hLs8Cx=KF6dh0NlX-d4J?e3pNm_wRSQATU)|}xFi0jT#mYkzoK_e=Y0)>s1H@A}| zeN(Mo7E)3|fv1z4&fJ-+3aMn1;;MzuJgIErgWt=}vAJ*K01beG{MF6akGYRi!=;df zxGkr*AzCx}#$OdN7}-FQq4>*R%qf!wE+j5)NP-wfvFO$=sOiv1F7)qqKe*1Eg0z$& znKl{dZV8^J9+6C%BQt|GBJf^{!*K%AX^?e$JY9( zU>IN1F7}EkKp|=+u$+gy4vdydf~wX|)76(V%6`|>f~sLR(0AUju~A+pNDWX&w?9r% z1gXvW+%)@#nUysZudh7xagZT_53kGK1aT#>sodAkx8(xrZiM#{metvJo%?F{E(H!a zudi22C^NGQY5jh$45c#g1kqCfa?em++O!KfvKyx9Hw_hrr5{E~SC^&|5`sm@{`uMM zNGcg7;ea&Knr#?0B)cjlyhI1hi?Uv>e`~&^77A(utxrv~8%C%?W~B;p=^fLzh*^1d z5~#>TP{e9Lt<&`Nx2m8JLBshuKVxVxaD<@>btv0TeV7(a%T;I#+!&0XSf}!q-|5lc z#(|kmN6xMvY}dOGj+>e zyz|jQT;c+utwF7}Y@>sKq=n)M{!dd|+TO4>q=>4~93JHsZbycfFHRr@rxs&J{n8bf zq`9(FY?_*nSWBYdPZF7s+gcKGDdp9Y;(bk zZH$=hijL^lryQ48Z%0WXEGeI-E5OSVg#n3XoU}St&;7;|f_$}EQ4uPveI>#7E2@HW z$k%dn>8G3@>^fa)0czHbw*2A*z6)xW;x&@T)Vluw?z%Wqa3A%q><_FgpbNNnAFhx- zt;Q|fR!O$-7gpPkPxU&wd{|0SFxMeoW0-}os3euBg+Hd?diz4z0eQ0YQe|9w(v6*898m- z4SlZODE|KdPKa=BZBJJupnu`3AyjjVk8e~9%WB}gh8>Lyu-I@3G=;>K04`0`j71P=*umCAd2`+2q#OBxRKziDHWIr@g zG&N%sQQKIyMf(+xQlV*5R2kHtDu}KXHgvsSn|>o16z(F&%$tHMR?0HG<#Ac#t`AU4 zzkTz8H4R;=K4aV4PSr}ftTF^Pl}=yVj-Us`Nx#J}0&GNu5SC{;^n+n+NTXODWyRgs zz5f3Iw^b<*QULOXa3lfZ@V6%O^z6ju2$77Kf)=IZ!+*Eiq0*ojTw)l4L!|OUzw%-A0(8UZD1OY2wl&qPQ(pPjV*#5g#}Q)TN) zc}8APAMLB#1G)-b#={y~RDaeeu^4#J4^BS4LR3qe`gijIn#fT|IES{u zp8oOaBEp4;TJ0|VIm=i3@zuy+`ohX0*D3GktV~FGuPxo)EVZ-OpMI+rDN}+k-FttC zk`3RQJf#D49^4JDTt;_jxe6cv2*LxqcUbx|Evx68Dl7YeTy+c$;!?E|5^LxAt5xDl zUJc7;ZtUTz&N$DfPzACYLuo=vOe@h5W=c&<199i* z-qDSg1%bNkLk(7GbH#gg%|n@jCS?$rYGa;s_UJ1aM?S?+<k>GGHnw!LP(*LBJ*Bv!k?#3bjqu7`#51=k3?P$SOFjGVJRHq79g}OCJ3q8MIpQTX{|#sd&$! z>CsX#7IuAm>_9O9vYNSf5CpYtoJh>H%{e&RATBvC?bA3;puAY9VlD}`VcR~ZyTmNy zPYnt!N-sYt%Zh&e7YM>=NlWB^s4FGZ5aTP4XNfn2MvO=|FDjOp%@3#a>H3Iez)_k7Et@#ZqU? zk@u>>o;@o1j6_x4_JXBOk|rkOr{)9I3u7B=09h2Q8FKQ!@6$;XDl7r5DtZ1Qg)W=1 zHoLcU=U5L??D~42RWf?CCNl{4b^Y4@ktDFU^a-b3=CV$IA$My6u zAQJQgtMA)IKw3hSmSkU+Ux$c?c4Qfi5%Ra2Z8<)b>7KZyiDwzSb~jB+tIhp)=@`lv z!6ikn_!0EGWR>moklj)0aOJ=1^;~S=DuBPO zFW!;LN`(|$nm0_peBfPO85M+NkFH{#qr#3py&hb^pyH|>*m>o=1xdoRq*%Let#uhz zBa9T55lGh8auF=2(-}wn-)^N#La>E+icPX}-f+MHAOgHZjLz5opxqVxsUqCTM!B~6 zN19Ln02|u+0-qQQIEcPP_tMsjCS?W><6d6Tjn8TowpLvR>W$^}ivO#_0;V$-Ar(*pgjF z_U($%ZMPibJed3Yb#)N32&v85{{Yu@hWIi*;R^7B*Z}4I#dG2w=rr}902{Zsqsm9n z^#T2E`t^TEm03@Gfu%BIrf;5+rN)3IDwtG}>GFN!o_u0^wRI_F9rB|USBtWO*PgzU z!yf`lznB;NXO~u_c#bfr&6*0IZh^Yx1(87V4Ly@rGLy!zuLY1r4=CTYSzdJ$avZMj9OwE05wwwW#7DHGEnU+vP#IDt?AsQU}rls=HU zmf?dXMBnw5K4FiCXu94h+r$cFDSlwwlEKSQuSG5;sZ3sjJJ)+eO9Ss0smX^X<)^%N zr{RZU==S;yM2uk{T4>vAjNmE%0Nb9tH`eAP1p+`SQPg^Q_gLBBlvGsA38i-O>l@d( z)FYy#h>S8qlzvj=;WuLy&)csUxqc_8FP*jT`;SKPWNl9F{hoiIgmtZN1^II8ETr6rR=Zz!N7gaAl! zr98RkAEsY{ULO-fww~06lyvmd=0i(NL*}f>!u93;uQUWKJyvqlmrk%w6cx;qj#vN} z2RcV@_-$!+cFsTjiPVc2vJcPBbk15s9^H7k>cu#c3)Ejj+jEas!=#cfqIAeUOwLYw z=@z|6?CrZ<5-93U8;n$=1Xe0F<}J@93w>owNLrSlaR6*}%7XXuyl%@_6A}taMpv&~ ztGo%`>TH}H$@yA3lPJdN2^Lotoug0G$4e>7N?E`l5wEdlXNTp?N|Lb5R5N{jqf2)> z+LD)fF{ixmbo+Qp3|1p5cCFsSg7;r?MFFtjmP2R z7!j06u`27CBID5wr>%7aj3A0RH9sx*^Mn+X;-awX3;K5Xz+O4pz0Qr=Oq@a70iDew zcUAgyR4pldG<=KL(!2XY;l$BbCu(WkVSdTzc9Ud;SnX*ENQ`R~T#Nqz&!z)Gr?4qG7B+ul6) z)u!WK6q2CiidFWuQRj%u{-BIrDM<#@2=m7!@281!%IdFX`7}cB=yS58r)8SBJuUquJ>}t15wQ%u{@jGt@EbVlpI)ssK7NScl-?@Zmy4+;4Mm3Zi#wl*REC-0OY?)M3mxF5D4=0 zr&t1d5C$@c!a_(zjPvR|%ir6ch78F}LYYHNbn=M891OE@K}`Fm@ufaJ{3h&te@|Om zwb0Xy^*1si7Y8zHH@A;l&t8-1{{UH3pp?u}BwoJP^0X(!@JLu7AYwP)v9F|X{{Y87 zgFV-W>g%U#DvX`8j4w8242}AJy?Xu=>nNOxm(|(%5$PE7xFUsx6cFq|3_U*?Mu73Z zhI~`QnaqsPHnEnNj7uHZ^5gq@)%5ay#Nkg0t5@gqoJ5q*mZcP}(x1(5VOQtPppU|z z43~(0A^bVn>uAePPl;)2%25hGFHoFq^e(T{tZ%GvikHDpoGOr#E%Dy5x%4Tee^Bv| zLIxtwQ@3qM{*=E4bYt3hFNWz1WJk9oQD5aZbC26Sd~Rfdl}t8KIY*&0Lg!6TB%DII zUc}sw#BVP1RG~c~z$_XlBO~4>ivhS8~v&5#ZglIPIllQkQPf@OZ-7P$)28CJv%{fCT zB}(vy539eQJ48AYj5Osq-G#Jp9;07h+WJH?RK&YiGqg1_U;#)f40Gw*(=q~>IhMCSOWbclBNxCf!{umPL;|7V|16sZC{$wgYWk0Q~)e0X-{(;CIY0m4er95 za^(lYJJ_4Hn9FCVG(4ccx3^qVM_^khlQL?EMi(X7i;pT$G+ASF5FLvclesLG)1jO?X1ql{D;rzVu?Pd;x zhwYUmNGw1A>yYc|yi}!XF0rAN=dSPaQj2}+oga_k>KIoY{Jsqt^ae#g9yyBKN9 zR#8ZVV-ti%NqeaO0Cno+NpyhbS>C5QWzp&Ez*iS70DZu;h9CeT$LaibZOyIk_k6o9W3j%1?oN7tG(CKg zlJ0c7ZrimF;wG2*YaOeZ8)J;WOdV`+-&Y7pQpt4Fc&JpV#VjuFL8qQwLx`#Ce}sKa zIO|XNXpWE{B&`81K3c_kIji;Q&;9(fIUz%Bd&%RMB2rQnjN+GOVoy8!MvwT*{62Sn z5)p@KGJ2Y|edKCl$a6D6r2c!>@u6xV#eEfqZ< z@bTjNMeOyNNOvq4%D`RK2C#bZeHnjKl;;^vRQB)EDyb*{xWd%9zL&48RsJRX6Y(Dh z?c=Md+Umkm6kW|rD-$o~N7lb4rtfV@NS z>%}`ANa=o7tX%nJrjjqqS0GY_&NFWvLU@U4C5R+Y<~G}`PuLikcnWr70mI;b8>;>n zQxzp*)9qQw@9p~ZHBOY9shi9{m*OEjI8jQ+g&^i~8H>|Ckf*xvZxHNe>FQ|8R?$}O zr)|VD{%S9S+o>OIb}V%Ei%ga=6DVU!Y3H!%(lU>P_>`^w4_g!%t8R*J@&5oly6hJ)*5Rm4h)ipx<-A?Z#0tbcLp&dVCk<&2!Yj4DLNCip4;v^y? zW^()FF0sQ${O72`Up`+w+Aac9;iDY%k810N!i@3v47L4AIO=Mff&>y!K_kR7ch8r_ zD;^C+1Z}iIEjaq+J^uYgUw9%WCaAj3uH3o&);_9@NC?rK%8dF4IR5}&PPhW}yc8u# zlv26`<}zyQ`i!@cGmN$Cg7J@-xpDRC03_;9yj{{11D3z#yAk23Qj*Iw9A${$#nx-- zpMIsCf{6(|`bDwhTHMfECjy?Ce8xoOB=cNz7jfy&7lz((T|+femgVkiyZ|d4#WONG z5If(bWK6qM1UAc*8*V}B`*8EoFeP@sw{+(PQc|EuBN3%`sEoffi6h+N}QZ3QCCqWzO1YMteqQaT49xx2^8^O^p$ssbAN7c zsrytU2PXQyep~d5iQp=Yhih~0(eLMyNkpy0g=AH?cV8rLKc`hBu?CcfW!N|aRPbrj6jo!dx)aIheg ztt-D;oTDROY;B3A@06`RYKWNKftM)p>haeEf2r|;Jx%<)pbD7N76>IG+`T-YEp2Gc zB_b~1t+{F{w{7jNI&ws%1S(iohdK;~kX0(cCaPuv=TAr#)${G#L=pO3`E%<1ubwf{ zRDzm;ivIwgj#Rt`Vp60d8{$@nJ^Ak+O$wi+o!ez@M}juc2dC-RCmPd)2E<+K&ivt3 zOiCuGEd>cka@n_#ezD|@N#-%!iq@Gd?xC^%Q}@lC5eW${4~Kt!2cI}He$WDPRe>t2 z79Ba|5=XM`X6=rSrP&eK(-Gs$0MKXt{aH&11wldDgV@vB3XURGaH-02V&B&&+CPUM z6MRkZXML+K&qMg%3GoL?9xLGe%OgX()66@ekij4N-p1j1VGgh#P$w&N|6=Gw^pI)PiT;3{Tku5)Fg0v{*OB1iOZ2dgTktC*J6XrRncVnM6zc>p^P3?7|soZNa z@b2qIdL6c(=3jfE-RY8_n@RML(n+%z_Zq+KLei8GJq6T2@D$J%IkRbfU_#U16y3yj_p{-T0>FR)0k>%7i0^3)cW-LMER0s z&YGp64TNDdEk`3mnYAMah>;;nn<`ooqBOlupob#lbfhirI|z4LqEOySSmnK>#0Mgy+D2PkDT&}6J4UJ_i@=r2HZ z*ZYY3ua9G|-owJQbvAarsTt}+M^{pC{w4%>5`yuWcm2&J5|b|s z#|lf3cjcz}R7ECm!9=K>IEXLG!GwF>>-blL_MOzV&f~On;S;;jhL!8dSgxVJ=ee6ozL%PxKbUUqW zeK^J)w{N4XsoqOVTRKeV8F?od$Q1+j>G=wfXRb<+q@@O`CXNMq7Nu)f)-(8@yId*% z0I8@2`4M3XejWIGy7-gDdoIhk?GD@XHPP<1^!15N(JNDYh}6S5ePfQA`iB;t21MDi zRrd%K0kg~utMeC;!J~{)aZ3AYB7hq+R-C9Fu*2g201)iI5Bsmk?R$9l#-z10w0q4h z9gL<4`9x_;q|3*teOKt;OX9!C!c?^xE(4|M&z^Y>aXe=mC+R?|9x#_*9}&ek1O?sDJ6Mk7cUMM@PdnG&MDQzU90_8(-mn@WJt4iF`k);@&Udn!XLD4{_V} zg8qK9KQ^3o{rAM4BjEkybbH52KmKj}-^$Q*yImx`JxO*wdPw3t0nv2|RnyBO z&bNb1;YkwMmISg%Vg)j$UF97W@F)0F?7S{o8ok$VtKWATx&$3vb5e1Jq_s(E=|@9S zDJ?LY$wJvrSbSgk4AtTZSKE{n>?u~(`L#Of4XRAFN=af=6xGjH$+C{F@IUaurQ%S~ z)YR-C{#0Y74Nl+$(bK5t=`Nv|M@R~{uRgD?{go_z+(BfP7Jhr2^NSu8bMU5L43&|X z2G*}Ca*gfq=im>+9}l{Eoy2=6ZH-DAT2U_Hn`ImRSb^FhL6AFtD-rg7Xv#JO2x_-?QJ zjWm50RyI&0?bXR<1AobkJI{!SX>9G|rK1sc?T7&5_T_*1bbwN(DU=D;#g#61{ZchQ#GWs&-S*m$CMM}DZMWTXLvOE5%UMdXB(ZDydf31Z4wTDMl`LW* zo|Zd`(wpU+a|g!140z9v!@1Gzw6!Z#)QRM*NJZQ^GJCl8>(KBVLITjBrzs$}r@745 zGo~kp;pC|cNOcMpe=(GBFUB9?6XL%X@ecF5j*oGz4OdcVY05xJ%q}Byzp~#4Uqm0| zJTiD>fEj2EDjt*+HrO^%=cUY+sizPh^_pk~_UBFG^T+Yu{6BZ!1owJRb)ZGpkr+p6 z%Hk}_BabR`mc6=nhWg@XNl-$MfaYrX?cF2S@Vo@hAt88OIkidLYwT+rW$_oo8hxho z^3BfVl5GcUimJyy*Z17|f7Dj6lZnQT;i>1gxkeweC*bd!7Yn0IM+vrL*TyLv@cA#UTB~xeTEDy_$^AZzqaonJDT@Ht@Zq~N*7m988B(zYfCDU0HvIJ()HGatD_Sur3v-&lmBn*c`# z6DX*&&~*pC>l-rWDB&0jsB7t@6W(g-B#5L+TO)0&v}Nh?{f1T7aOp{GMc7-rk(FY+ zT9yz10Hs&gyyA`BOU<{|OJ*N0GW-7kUMsIlC4yWUCAw()>Lbf>B;v%_koC8g{W<9X zYDdb^xqWK+3>*#*@6#bb*CAa$J+vt4P7su0L)3iK)|G@k;bZGm?LdBSdgOh*U$<9k zmQyK0nbV|ICDv310BQa0@kn#7 z&+;@KZOT5$^d*^#lD-SG9)to_NKJdD>iojiqieRm~?~E1sYx z5-7yIc@CeL_o+&hf`tYQD+xSbQY3aBYb$F&o@4I3;cA@y9^jCmMkaUY1^eGefv5t3 zED%a^dh$HEv}^wKW2m$YrEy003H;T8qmNI1y7(BPGs zfLfGnb4qiJdh|sb09{7*>EGreNJA(Uf|3Y!0{iBEV0qA>4k%rs2yJNlp4{~*ATc4m zdEPPBg$1n3V3d>Ib;=^uH%PZ_NW@y*g6*Slg$D(%JwPYKK=E>a-9J&^acX2A5jy3i ze_pC)Z?y24Mbv7x}B}~d-(?59z@4w z6bwW$8+m_h`@}BXHN;bY63zNVriVV6^uDYDoRL6sKKFY60CCDv48RhXNCm-b+Kr}r z2+C3_PHiGbEPZky(Bl69@72aDT!UtOvgsE})DWyi$fZ9v?$9io-0}q%>Vv|TyxR23 z4*?^^sblEHfb-K>szQ{NCBQ>pcYD&hmQ;P8qE}F0I!==eAWQg)0CsSNi||b+*Cm^rXMqZr>&hHTB^V|oq5ni&19uh z2>u`umGb_wcp1}DC(UTISqLK;ZdrM)k0+tgaaT@V(g1{|ejo@@InjaLn1}p8y3veo zHZ-l%E_e~(r;l70)xkJjwh!&)c$u=%{>7AY%b>U8oDJn2*`v)LloLD^hU@z_bW*TV zUCtogD8tRpW$Oy50O7z0M@)~i`Pw1WuQuX>l@2|8vPzV*o{1^2ur3Zz8HxiIHv*dT zZfDvRPBe>jW{Ue!k1d|(x2H{|ZVFnbKKraHwINEv3jpj5DX+IUf>Gq%>m-k>w9V%n z^hXXD0h70^42=P;?cU!IB;tt{$llXzccD!!ms~!-UYQeu!2kuRv!mDF-)IlpAUc(v zPVg+Wk+=(S!4dOYxMKQ8pVI@!MM{FnaLs2vm#KlP`7%r5)16H-h~*57pqY5Ji6CVx z84Cig_kAy*tc+M(5KRcv^nY8zC6r=O4h6u;v?la7{6;f`q*Q<-%5X=4#!3u+&(>Fj zt%XvDuRPCr#1w)F{wgKKS^YgADZv-Zc36o`4o3cm?bVZ9>ODd2p=ThF2>`yr*)!jq z4J(pRP&(tDuT#FiS7Yh&81xp((vCr*X_`Na7YA`-=s)L!YVyq zlx0E#lb&&Wyu9b1r&SJ1H+|(4DFT;wjEI!UQjppQwq4hj>-Ok?kWRg|qOMKLCqA3U z!EGeHoOz>xxi8Hx_v*=3MAY;7g=Tn^kSd(p-X+=>w}Cin?8Vom-}SzsMy@MJfTR*- zwh|3ABL4s}?L-+=Lg_iOxjpPpq4ny?b3z%Q6H*g4fx_+|Ug!jPr3jQ(3skk*(}wxa zuT}xgE?_e#11PB{%y+41%+1+egJtq3ugk+@ zi!BED6@WhTYyXyT3JK87pXK){LI{v#yCqRYo9aTD0X76`EdLFmfwD+@L7QiPBj(+-;9U0n#6GiJlbAbxRsx= z_Ue5iC8V)jumA>+wnr$!`JhBuU7Lc#)8@zg=dRalX$M*fID;aE$S=R2Vl!n(pj5bN zODs&|FI*Bx6&3Y?qHMGPl)DO@g|8UyUCDc{_VYxJUwr=nPNErLOX4BT9@_vb?#4X6 zDv1Uf{{Y>e(wFUjuUr7BCY{nDL{|!!D?9bnaxv*^(`i{I+sttgAg2uY-U90921Ed}|sBS^-K)#7L>Bt9pmi+98$gWHzW@tyUlY zH81#QqK3o)1Pi$C{)~D+7N#l*0o=7YKJXs3L1m5GsA9;^2p7#$>&M@sAQdpUi>(Pl zLo5Eq2R9=&9gOmTH6}`1q*phPUUzf$dTk(tuz$es&MK6ZFm84Ei1+QNUg$-!KDaQv zar<>8BCBr`MUupT+P6;W2AXc5N+x1ZGBRLnIC6g71T3XQErNMPiiiLZ?N8obnZ(+= zwDhW8X z^#pXNAxI8&uXKTAlHFm3_^00Siu!ZwGJT&G>btjwtAdVWp$I>CW7VgTo{IV9}-?t~HuU9w=iln!(&cfsg97vESvjies2HXpF3G zPJNzVTXE~xyy3%&7q!D>p)`*l#1&&(pAd>?e<7L(oMfxBn>de^>taey0GD!o2z>X_ zGFG4*oxy6|_WbP?p7E&9gA7bGicyY!pT8YgrwqiFe9fHd{{V>Os}MmYh2F%ok-MKG z&IatUAWST6a%BzFKA8Rbtl|_&PM)8R?*&l{Kp=uecI(P5-MJ0COiFPA4J%*ezh1sk`U&`Z+s8+=(PSQ7ID}Lh+k8a9NlEEleEaJw24X;R zDs8E~e6#5rTnIvwiAM@mTM%;|TgCqX#C0}l$s~NWw{);w-G)pV_5B{a(w$4U@uRiL z7j1X-c-xQy6ma;G#jCGM^XVGv#QTXXbKyxZ!X`%^w`EkX9;Rk zOzD&$OCFcI=-*y5>qQC!H8}yO*RQoTu!jDc7P;uc2ol4WrdoC*tF*PD4GkC!h|gb2 zFTF(U7F0-ZR}W(eWKuQX>sG=-K6{ zkR?Vflac=bZj>Po5|r!N+xpryWk1_UN)8f0<=@YiqlBfX_+Ff)QlEJD698Ed)RdvQ zkEM_8_3GdNCJ|7O&gH5*{Ko309F$XmK15{0P|x{`Z^N3pn%(bpsz3dgzcj=Fbo8Pa zSLQDl?e*wtB8(sHq`uC3tOZK@TsR2@*Wx-k_U+@TJ{ng}6qLtIuwsZ=yYEM@>C)){ zDN17H>Ti)1r5v8=9#(2yY9^JSt=yN5x!A09_ZFK{R@az~ZjK9U^!LwHP)PwP1>S+{ z)ah7ROInB+1HSHZ);;bu1=1xOwsMk6rDX!VTYt7XqJp0aRQ9DZ>lT(2vaC|v4R4pb zH@qtGjc93has)tHSIbmx5XODKZkCz|OvC=icF(pZ(NqPQ!6h|&Yf;Vo>m23XYC~Vf z=jMOuvMTW0s`6I>^{n;f=Q^gg8W%6jmSMH2tbGfEOtkQG3X76iFPmIb(`eZq52i!6 zfyEYoFh~)UQBziza6bcV)5DaPiO+V8x152-C`oKj927jKuPeV~64lIrSWOB#w} zCfXak<#~VawJpL1qP6(%;xW)HpjkwneE$HgAzTJ7HmsejhYKHX*gC4bPAm!UFWfW$ zNF-M}`oVf-ghV;D70wWsG*_<&QAAZhlT7;!0#b^KTst*7Ur#+?tvRfJFK|LAe6g14 zC54$BpGfG*S^!US2A{wky(%B2(&;=)|8$mUw7 zC*^2TcM9n#l`Ms<3a}s8_>F1!Y4}Gj)A0kf?=^c;CvHnolw$c#BQGdXxw{`i`0HDa z`iSB*ri(!c~MauU++P(6=#2)8Rl=r7$3^Lam|h=i)YZeXjh4VSR9*fs)Hs(;Y9v z%OC6OXMA#dts$^acpO)d~rcp?(`wjiy`OixU zQwj>Q9;|luyhPcUN)(iW{{Yo|{cQ|8c}icFMYN;(Q*ZqJ`sPt$C;%hNJ>q`iO>n+_ zTG!Xho!Jw~mzJ|Z??x*>-`}H4KvIZMVk-OeZ`5`o_|Qs98rAjhCxi9%f9YxI-s?2? z&Q{c;a*=-4#_I>aRZ=kh*L0;$!pq^{nj+HbnZZa-x0jSjbk*p0JSw?$|f}XtQ z*n(h+pQlTiWoZEhsmhgXxqQLapj1!sN`S6pR)w=SC!{srOHK@P6L#ubYMEU%Cm+|< z>QJ0M1p+1>OyvIne<7h}iTAFc6=F)C3R~0Enwrv)asoq}9>aNeXgA8~O|rLD zP#@*Id_;=v?`Wm{ChK`J78E%A_sxe&7wb&sQH%X9ZZuW?@0Cb?&hr`*#o$Rulm@{y?=0y_;`3Muqr~@N>a@W5qinT3T{D zeQ(c^`9lVFZHQIfztib`Y)Sf}<;s|(DUz@OeLcM@AaXca!AI^4cwB{MmZKK;^M<{r z;BSWN>P!Css_EV7RO9*@<FLq~T+y4Ohx+bi2H03C|MCbXDj8)u~E8~yZ z=rca4F-lX;q01(_AMP4o64O`q<&%b`^KPDJCXH3`ANXnQ8!UJjrtqR

Q=UOn#TRq_3=lm-6oxg``Yn_z0 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

-1(=*F1Sb%?ZPJmpNc{-+%S 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≶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%0D-Te`Z!Nh%@o;{O1D+tl!< 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

Fs*tn&+>#Qfil4W?q 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%0A~*4yX`xf$sXHFRvLPL%PDG1 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 E0QWpFkN^Mx diff --git a/packages/pds/tests/sample-img/key-landscape-large.jpg b/packages/pds/tests/sample-img/key-landscape-large.jpg deleted file mode 100644 index 40d1be748be2d8fc483d2ab657aa00d12d415bb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 263263 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⁣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%0AI!7!9?mGDn9{{SvHe4wa_k^ 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

  • dEaVMJ+5~4zY0s&$U22UcD^(xvL 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�*> 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 K_c|eDkN?@54H8iR diff --git a/packages/pds/tests/sample-img/key-landscape-small.jpg b/packages/pds/tests/sample-img/key-landscape-small.jpg deleted file mode 100644 index f449e0b4949ba60450920bd62e18a729c02ff4b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4114 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 diff --git a/packages/pds/tests/sample-img/key-portrait-large.jpg b/packages/pds/tests/sample-img/key-portrait-large.jpg deleted file mode 100644 index 39e7f7ae844277ca188a2fed5a23ad20ce5da7f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262697 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%0DANF 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 V`JXT^_~}4*K7lZ14fx;R{|~)ylFR@A diff --git a/packages/pds/tests/sample-img/key-portrait-small.jpg b/packages/pds/tests/sample-img/key-portrait-small.jpg deleted file mode 100644 index 6e457191eab70a0739e11c0f30e3ef8817a9eb78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3976 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 diff --git a/packages/pds/tests/seeds/basic.ts b/packages/pds/tests/seeds/basic.ts index 1085e2b381e..1590fda3d05 100644 --- a/packages/pds/tests/seeds/basic.ts +++ b/packages/pds/tests/seeds/basic.ts @@ -37,12 +37,12 @@ export default async ( }) const img1 = await sc.uploadFile( carol, - 'tests/sample-img/key-landscape-small.jpg', + '../dev-env/src/seed/img/key-landscape-small.jpg', 'image/jpeg', ) const img2 = await sc.uploadFile( carol, - 'tests/sample-img/key-alt.jpg', + '../dev-env/src/seed/img/key-alt.jpg', 'image/jpeg', ) await sc.post( @@ -103,7 +103,7 @@ export default async ( const replyImg = await sc.uploadFile( bob, - 'tests/sample-img/key-landscape-small.jpg', + '../dev-env/src/seed/img/key-landscape-small.jpg', 'image/jpeg', ) // must ensure ordering of replies in indexing diff --git a/packages/pds/tests/transfer-repo.test.ts b/packages/pds/tests/transfer-repo.test.ts index f2e6dca0bfd..53393fa89d1 100644 --- a/packages/pds/tests/transfer-repo.test.ts +++ b/packages/pds/tests/transfer-repo.test.ts @@ -75,7 +75,7 @@ describe('transfer repo', () => { } const img = await entrywaySc.uploadFile( did, - 'tests/sample-img/key-landscape-small.jpg', + '../dev-env/src/seed/img/key-landscape-small.jpg', 'image/jpeg', ) await entrywaySc.post(did, 'img post', undefined, [img]) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 860cce537ad..dc2fd699490 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -356,6 +356,9 @@ importers: '@atproto/lexicon': specifier: workspace:^ version: link:../lexicon + '@atproto/ozone': + specifier: workspace:^ + version: link:../ozone '@atproto/pds': specifier: workspace:^ version: link:../pds @@ -401,7 +404,7 @@ importers: devDependencies: ts-node: specifier: ^10.8.1 - version: 10.8.2(@swc/core@1.3.42)(@types/node@20.10.4)(typescript@5.3.3) + version: 10.8.2(@swc/core@1.3.42)(@types/node@18.17.8)(typescript@4.8.4) packages/identity: dependencies: @@ -473,6 +476,106 @@ importers: specifier: ^3.21.4 version: 3.21.4 + packages/ozone: + dependencies: + '@atproto/api': + specifier: workspace:^ + version: link:../api + '@atproto/common': + specifier: workspace:^ + version: link:../common + '@atproto/crypto': + specifier: workspace:^ + version: link:../crypto + '@atproto/identity': + specifier: workspace:^ + version: link:../identity + '@atproto/lexicon': + specifier: workspace:^ + version: link:../lexicon + '@atproto/syntax': + specifier: workspace:^ + version: link:../syntax + '@atproto/xrpc-server': + specifier: workspace:^ + version: link:../xrpc-server + '@did-plc/lib': + specifier: ^0.0.1 + version: 0.0.1 + compression: + specifier: ^1.7.4 + version: 1.7.4 + cors: + specifier: ^2.8.5 + version: 2.8.5 + express: + specifier: ^4.17.2 + version: 4.18.2 + express-async-errors: + specifier: ^3.1.1 + version: 3.1.1(express@4.18.2) + http-terminator: + specifier: ^3.2.0 + version: 3.2.0 + kysely: + specifier: ^0.22.0 + version: 0.22.0 + multiformats: + specifier: ^9.9.0 + version: 9.9.0 + p-queue: + specifier: ^6.6.2 + version: 6.6.2 + pg: + specifier: ^8.10.0 + version: 8.10.0 + pino: + specifier: ^8.15.0 + version: 8.15.0 + pino-http: + specifier: ^8.2.1 + version: 8.4.0 + typed-emitter: + specifier: ^2.1.0 + version: 2.1.0 + uint8arrays: + specifier: 3.0.0 + version: 3.0.0 + devDependencies: + '@atproto/dev-env': + specifier: workspace:^ + version: link:../dev-env + '@atproto/lex-cli': + specifier: workspace:^ + version: link:../lex-cli + '@atproto/pds': + specifier: workspace:^ + version: link:../pds + '@atproto/xrpc': + specifier: workspace:^ + version: link:../xrpc + '@did-plc/server': + specifier: ^0.0.1 + version: 0.0.1 + '@types/cors': + specifier: ^2.8.12 + version: 2.8.12 + '@types/express': + specifier: ^4.17.13 + version: 4.17.13 + '@types/express-serve-static-core': + specifier: ^4.17.36 + version: 4.17.36 + '@types/pg': + specifier: ^8.6.6 + version: 8.6.6 + '@types/qs': + specifier: ^6.9.7 + version: 6.9.7 + axios: + specifier: ^0.27.2 + version: 0.27.2 + packages/pds: dependencies: '@atproto/api': @@ -763,6 +866,15 @@ importers: specifier: 3.13.2 version: 3.13.2 + services/ozone: + dependencies: + '@atproto/ozone': + specifier: workspace:^ + version: link:../../packages/ozone + dd-trace: + specifier: 3.13.2 + version: 3.13.2 + services/pds: dependencies: '@atproto/aws': @@ -782,7 +894,7 @@ importers: version: 4.20.0 opentelemetry-plugin-better-sqlite3: specifier: ^1.1.0 - version: 1.1.0(better-sqlite3@9.2.2) + version: 1.1.0(better-sqlite3@7.6.2) packages: @@ -861,7 +973,7 @@ packages: p-queue: 6.6.2 pg: 8.10.0 pino: 8.15.0 - pino-http: 8.2.1 + pino-http: 8.4.0 sharp: 0.31.3 typed-emitter: 2.1.0 uint8arrays: 3.0.0 @@ -5587,12 +5699,6 @@ packages: /@types/node@18.17.8: resolution: {integrity: sha512-Av/7MqX/iNKwT9Tr60V85NqMnsmh8ilfJoBlIVibkXfitk9Q22D9Y5mSpm+FvG5DET7EbVfB40bOiLzKgYFgPw==} - /@types/node@20.10.4: - resolution: {integrity: sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==} - dependencies: - undici-types: 5.26.5 - dev: true - /@types/nodemailer@6.4.6: resolution: {integrity: sha512-pD6fL5GQtUKvD2WnPmg5bC2e8kWCAPDwMPmHe/ohQbW+Dy0EcHgZ2oCSuPlWNqk74LS5BVMig1SymQbFMPPK3w==} dependencies: @@ -6200,14 +6306,6 @@ packages: bindings: 1.5.0 prebuild-install: 7.1.1 - /better-sqlite3@9.2.2: - resolution: {integrity: sha512-qwjWB46il0lsDkeB4rSRI96HyDQr8sxeu1MkBVLMrwusq1KRu4Bpt1TMI+8zIJkDUtZ3umjAkaEjIlokZKWCQw==} - requiresBuild: true - dependencies: - bindings: 1.5.0 - prebuild-install: 7.1.1 - dev: false - /big-integer@1.6.51: resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} engines: {node: '>=0.6'} @@ -7658,6 +7756,7 @@ packages: resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} dependencies: punycode: 1.4.1 + dev: false /fast-xml-parser@4.0.11: resolution: {integrity: sha512-4aUg3aNRR/WjQAcpceODG1C3x3lFANXRo8+1biqfieHmg9pyMt7qB4lQV/Ta6sJCTbA5vfD8fnA8S54JATiFUA==} @@ -9626,7 +9725,7 @@ packages: mimic-fn: 2.1.0 dev: true - /opentelemetry-plugin-better-sqlite3@1.1.0(better-sqlite3@9.2.2): + /opentelemetry-plugin-better-sqlite3@1.1.0(better-sqlite3@7.6.2): resolution: {integrity: sha512-yd+mgaB5W5JxzcQt9TvX1VIrusqtbbeuxSoZ6KQe4Ra0J/Kqkp6kz7dg0VQUU5+cenOWkza6xtvsT0KGXI03HA==} peerDependencies: better-sqlite3: ^7.1.1 || ^8.0.0 || ^9.0.0 @@ -9635,7 +9734,7 @@ packages: '@opentelemetry/core': 1.18.1(@opentelemetry/api@1.7.0) '@opentelemetry/instrumentation': 0.44.0(@opentelemetry/api@1.7.0) '@opentelemetry/semantic-conventions': 1.18.1 - better-sqlite3: 9.2.2 + better-sqlite3: 7.6.2 transitivePeerDependencies: - supports-color dev: false @@ -9879,6 +9978,7 @@ packages: pino: 8.15.0 pino-std-serializers: 6.2.2 process-warning: 2.2.0 + dev: false /pino-http@8.4.0: resolution: {integrity: sha512-9I1eRLxsujQJwLQTrHBU0wDlwnry2HzV2TlDwAsmZ9nT3Y2NQBLrz+DYp73L4i11vl/eudnFT8Eg0Kp62tMwEw==} @@ -10098,6 +10198,7 @@ packages: /punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + dev: false /punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} @@ -11012,7 +11113,7 @@ packages: yn: 3.1.1 dev: true - /ts-node@10.8.2(@swc/core@1.3.42)(@types/node@20.10.4)(typescript@5.3.3): + /ts-node@10.8.2(@swc/core@1.3.42)(@types/node@18.17.8)(typescript@4.8.4): resolution: {integrity: sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA==} hasBin: true peerDependencies: @@ -11032,14 +11133,14 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.10.4 + '@types/node': 18.17.8 acorn: 8.10.0 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.3.3 + typescript: 4.8.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -11181,12 +11282,6 @@ packages: hasBin: true dev: true - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true - dev: true - /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} @@ -11208,10 +11303,6 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true - /unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} diff --git a/services/bsky/api.js b/services/bsky/api.js index 42737d72b56..534c102971d 100644 --- a/services/bsky/api.js +++ b/services/bsky/api.js @@ -27,7 +27,6 @@ const { ServerConfig, BskyAppView, makeAlgos, - PeriodicModerationEventReversal, } = require('@atproto/bsky') const main = async () => { @@ -133,18 +132,9 @@ const main = async () => { algos, }) - const periodicModerationEventReversal = new PeriodicModerationEventReversal( - bsky.ctx, - ) - const periodicModerationEventReversalRunning = - periodicModerationEventReversal.run() - await bsky.start() // Graceful shutdown (see also https://aws.amazon.com/blogs/containers/graceful-shutdowns-with-ecs/) const shutdown = async () => { - // Gracefully shutdown periodic-moderation-event-reversal before destroying bsky instance - periodicModerationEventReversal.destroy() - await periodicModerationEventReversalRunning await bsky.destroy() } process.on('SIGTERM', shutdown) diff --git a/services/ozone/Dockerfile b/services/ozone/Dockerfile new file mode 100644 index 00000000000..04fa0e851c7 --- /dev/null +++ b/services/ozone/Dockerfile @@ -0,0 +1,55 @@ +FROM node:18-alpine as build + +RUN npm install -g pnpm + +# Move files into the image and install +WORKDIR /app +COPY ./*.* ./ +# NOTE ozones's transitive dependencies go here: if that changes, this needs to be updated. +COPY ./packages/ozone ./packages/ozone +COPY ./packages/api ./packages/api +COPY ./packages/common ./packages/common +COPY ./packages/common-web ./packages/common-web +COPY ./packages/crypto ./packages/crypto +COPY ./packages/identity ./packages/identity +COPY ./packages/syntax ./packages/syntax +COPY ./packages/lexicon ./packages/lexicon +COPY ./packages/xrpc ./packages/xrpc +COPY ./packages/xrpc-server ./packages/xrpc-server +COPY ./services/ozone ./services/ozone + +# install all deps +RUN pnpm install --frozen-lockfile > /dev/null +# build all packages with external node_modules +RUN ATP_BUILD_SHALLOW=true pnpm build > /dev/null +# update main with publishConfig +RUN pnpm update-main-to-dist > /dev/null +# clean up +RUN rm -rf node_modules +# install only prod deps, hoisted to root node_modules dir +RUN pnpm install --prod --shamefully-hoist --frozen-lockfile --prefer-offline > /dev/null + +WORKDIR services/ozone + +# Uses assets from build stage to reduce build size +FROM node:18-alpine + +RUN apk add --update dumb-init + +# Avoid zombie processes, handle signal forwarding +ENTRYPOINT ["dumb-init", "--"] + +WORKDIR /app/services/ozone +COPY --from=build /app /app + +EXPOSE 3000 +ENV PORT=3000 +ENV NODE_ENV=production + +# https://github.com/nodejs/docker-node/blob/master/docs/BestPractices.md#non-root-user +USER node +CMD ["node", "--enable-source-maps", "api.js"] + +LABEL org.opencontainers.image.source=https://github.com/bluesky-social/atproto +LABEL org.opencontainers.image.description="Ozone" +LABEL org.opencontainers.image.licenses=MIT diff --git a/services/ozone/api.js b/services/ozone/api.js new file mode 100644 index 00000000000..f8d3f48f8f5 --- /dev/null +++ b/services/ozone/api.js @@ -0,0 +1,58 @@ +'use strict' /* eslint-disable */ + +require('dd-trace') // Only works with commonjs + .init({ logInjection: true }) + .tracer.use('express', { + hooks: { + request: (span, req) => { + maintainXrpcResource(span, req) + }, + }, + }) + +// Tracer code above must come before anything else +const path = require('path') +const { + OzoneService, + envToCfg, + envToSecrets, + readEnv, + httpLogger, +} = require('@atproto/ozone') + +const main = async () => { + const env = readEnv() + const cfg = envToCfg(env) + const secrets = envToSecrets(env) + const ozone = await OzoneService.create(cfg, secrets) + + await ozone.start() + + httpLogger.info('ozone is running') + + // Graceful shutdown (see also https://aws.amazon.com/blogs/containers/graceful-shutdowns-with-ecs/) + process.on('SIGTERM', async () => { + httpLogger.info('ozone is stopping') + + await ozone.destroy() + + httpLogger.info('ozone is stopped') + }) +} + +const maintainXrpcResource = (span, req) => { + // Show actual xrpc method as resource rather than the route pattern + if (span && req.originalUrl?.startsWith('/xrpc/')) { + span.setTag( + 'resource.name', + [ + req.method, + path.posix.join(req.baseUrl || '', req.path || '', '/').slice(0, -1), // Ensures no trailing slash + ] + .filter(Boolean) + .join(' '), + ) + } +} + +main() diff --git a/services/ozone/daemon.js b/services/ozone/daemon.js new file mode 100644 index 00000000000..a36df00d87f --- /dev/null +++ b/services/ozone/daemon.js @@ -0,0 +1,25 @@ +'use strict' /* eslint-disable */ + +require('dd-trace/init') // Only works with commonjs + +// Tracer code above must come before anything else +const { + OzoneDaemon, + envToCfg, + envToSecrets, + readEnv, +} = require('@atproto/ozone') + +const main = async () => { + const env = readEnv() + const cfg = envToCfg(env) + const secrets = envToSecrets(env) + const daemon = await OzoneDaemon.create(cfg, secrets) + + await daemon.start() + process.on('SIGTERM', async () => { + await daemon.destroy() + }) +} + +main() diff --git a/services/ozone/package.json b/services/ozone/package.json new file mode 100644 index 00000000000..bc959ff8e4d --- /dev/null +++ b/services/ozone/package.json @@ -0,0 +1,8 @@ +{ + "name": "ozone-service", + "private": true, + "dependencies": { + "@atproto/ozone": "workspace:^", + "dd-trace": "3.13.2" + } +} diff --git a/tsconfig.json b/tsconfig.json index e9a88ea1164..3307ccb7e4b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -25,6 +25,7 @@ "references": [ { "path": "./packages/pds/tsconfig.build.json" }, { "path": "./packages/bsky/tsconfig.build.json" }, + { "path": "./packages/ozone/tsconfig.build.json" }, { "path": "./packages/api/tsconfig.build.json" }, { "path": "./packages/aws/tsconfig.build.json" }, { "path": "./packages/common/tsconfig.build.json" },

    sZRQM;Wp+7lsHeH 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

  • x=4X@n>I=o>!p_4omt6r|~>JoJ$jd`t#T3>1fBL~rR4oRJ6k+VWNG20C%( zYI+wVD?j_y@$}J2d`Rv#j={!m5sv!Uy8vbVdV&N)&%ogLu0!F(eOyJlFD3>sLPe{A*|pXBYc57q2RJX4?^X&tuep%g{b0Mj_9RNj{~hqlOrWZ zNOTfg;EpNsOG>mBcfd738XVrvK|)QQg$JU;-~^?+#<<_V>o`f-N^Y5}8NyKqf#-3y!(F4Wx( z$7Cm*mEx$t>DUQJh0{NrpQ54JNukB;UVtTcR1!v2=%_s5;#e3!XN89N^p7b8Env_~ z{XB{E7LL{b7$Yk`d*}1?yN}PM<2Y*nDn?c|?&}0wuzW3{zBOtkj^B1v+V#TL_MrOl zT!A;SL5isJfEx8dUqrM7OW(GmQddx4Uj04rRkq93CQ$p~w)K$FN^}q{ku|@bk1e7R zGLoY=YPKiy%AO4HL{6p=@ildyP_TS7`+0&a1%Vc1t>i{yQl^Bss_1EHMM*M2d z4uJ!P)>ntm1=rOfHMQD2_0y5l0km25Ku|%Xpu<)pB&I{SIiO~%#oGH3B2@71Q1oc> zJ90N?Yhi7z3eF^$Ir41U|DC_K?aE6pyp*O_md&tcV`hhi3L6*em1X5+3lEX7Jbvh` zVB@HdtiTE3$jTz(MIe?inzDoiElbllffjk5DEbgL&ja`Y_u;9m!z)>bY+iI!7^sUn zz-red0JFHJG2Jr_2W6a&3a5T{!tqF$%0X<4X&Lj}6?0T5iB1ZoP%adb_Q?j4a8j_l z$EJShq;PvOM^xe*QbGSvhefUAle`-+AGh z74YTXM#76Ew3}j-`l$$9Or{f7)CKJr8_^N66^m0GfsCxMRy9D0N^s>{B9ZChyAbCQ zToNSF;lc_ks*ZvnWS?k-xS>@3t~^1UOSz7ime7(B9d{lvC|?{xhu3nIFOu4+eE;_l zcEJvj{Bd9od(Z-JJ1SA5su1;qZbgp*ffS4|Of2n93opEaMYZ2d z2fp+Dv~ctpjH=+oTAWeQ3@vAc?{_Gd9qJ$!Q!ElpbD)G%LOu-y#{__Va7+#WxPl>< z87yewx|9ukp>P8-d96phhP(70oEJ>om>kL)hfE&RKLg=&a6INPk}`{Fof(XpOkh0< zM^ttoPI1Xm;WlMkqrw}>MpfvjFt8vTQGruoj!LXiv3VvsDxkOXR1ov2!G$s`xW!ER z$jZ&zYw0+gm0$hgbo%{A7ZRs|E?mJkJT`D_I-DP40eR!i##}e=Q2eT9p^G6RfrWKs z6YUtisD&@FI3+MJkrh^YL?yWLMV_a+_%5VPDG8G3^nF~ir&AANmpJQytPe+YwxiVFTd73u{QM5S)mN_OIFha>nQk9hanB!9Xc31UY{Q- zT!oKt2+qnL#Po&u6=jZ`Z14ijeZ(A#co2Ew8Ngx-b?4x*tU$pYI4bjWRN#cn!BH8< z$jL5qRJc9`61YYMPKfXNfrF8q6$mnCg;Fun@`R3r@A~0r3KzrJwq&kP;T)7470x~J z1!$EAcvPZ|tiTz$b!QFE$<6fP@k{Anetk0i;nPd$%mo~+j$`=!ybbD8h(alw-@pP0 zPo1T%Jtvy2!^JP@MN*_PfhacDU-P%QYHTwvO2M*X0a~%BMU^{W1~|Fs#HuFyDZHwu+JZvClyo#_OEG52N{S|&#`BV?_=x7wLtylP3 zPn(L$+Yq&a%#yxt#}h?67X9cWD#0&CiIX91^MplQA*yV_OHhNA+@UYmQyZOg#Vje1 zJmoWKl?ePWvf!%8wjGsG>$$3SWmTcg2DTGxamwTDGcTk=Km5DI9YA}YeJ)KdF0x06 z)!xx1GdPvW!6r_QgmC=AoD~4~0I&+LV}=Oi>4?xV;e?H?Ng)hrez5R5zdwa@R?esQ=&W44h3~)c zlv7MCQ8u)e+OZ6NLXNVz_S)2&Q)T9gyTHYdDjXa#fhacDUkhn-)!1fUl!9f&0<>aL zi>j}Hq7!p=00hX48L(+$+fj+?$rYOuo7P*6%+G}_)_?2yQwwe7huBr2<#6b3ETSsH zg0PhM`in7yKhS#q_SK8Z=e{ zwmcstsIBlX$59FURX>A^(=Obgoa*Ok`Sbflg0hk}pv+-sf+`{Uu;j~@PX!9GmGri5 zRN@YN{B2?dUsuNWfA+rlt#t4^f0gF&b>*EnI@V5$1xLPl+T4~?I|!vb_0k_PX9XEL z8xzRTNnva^zKm;0QIjldK!cL#vSU9`WoRn}* z=%Ce`)6Z(5nBCCT$t4 zf@MUdRuvlfK63RKiK$<(rQAUw!b)Aqwh8+5X8KH?6B$(!e2#c7PZMXPBZSZ3NT@ya z0?PQ!)MX+jL|BzX;1+E&vpGSrcXPU?L{E=KFZsRY&w?edDqqG|36W=T2aqwIaJ=lP zkOQ)nyeeDXi!~xd39RBsgW$P6g%F_#>b&SYF69`FzRlgti9cYG6|}Y@->1{DJy{hY zgT&BOF-p2tI0{dTMv5gUBin#KYe&Uw#uN}gufG3qT7KotbmT{WmzG|9DNW4H#)-A< z^5kMNQK8f(1PjFnJ=2VNY(5by6C2Goal_)$LPtW%eT_|pIl6T_~?B4&HES9@iW(P{>nPOtjq6( zz+utTDI_8)fod2~-pxZ0NY+sLN?MN|iOJ|l=)GD=dFt%8qY^c(W{jFt{i|a0126!8 zevXP;tb2dkQK?%{E!mDseL1}2sAY1=%XehP3`~eTBRhbM@r2`LPlX(it>jf%y`Qt^ zT1ybUiX*(>od=%?MNsD@z~fSm(dgUU&7AlH7Fj`SEAo9hv-*nR>KnBwdZe^8h*+AH zuj3KvC8j2?#r5Tf^4EgJ&?ivz!|1@j6VpGtre^KL+JoQ!aaw)t&9vv((KNAV5BeJf zl-BQPYoSQmpb$V7s1JZH{w$|k*1S^7ryWEffzU`@?|Vd z@5LMfRw^$#D!AzQ&{4s~b6lPv{}{A9a{tzy^>p&gwe-99E~MYVVR;XZ%h`*!vB;KR z*~L^-zM~=Ps|u*6B9<8j+B>0 zvz)5bGEZRHrF`p#$-t7(1F#8Ux~nfBT|}@BM##QyIfW^jJvCTPZBhNTVTjaVgrIf3m-^`lssNHufu%L0b7C-IKxIcS_0|zBeWhG3DEI%6tLiLj zB2@q_dEHD!SY`9$DZ_K3D+&}=I18`FIBVNFi4-b0ViG{P+Geiztaz;4i zgS6J4*r*B}4dUTUu!qy}pff^;gnc%r8JMKfJmg34$fzu#|#YRCe za-mTbIwc%kF(-v|7}H?hoDt#x3MZxIsIb0pSGa@23=FmDBRoRPQ31?iM08r{aX|nn zAK>t}J9qA5}_C?Y&NhB&pELR&?$iA)`Vhk zxUixYHpe2!08ePDrGDWRv&AUM%2$G_Y%N#v{0|)xyBxulml$bNzGzj-DY642@X+>> zM31Gv`$CrmS#U7c`984d`sDQS1-z#m9jPjS*dkVY_Mj{3L0M@ET$QakgwCbah>C7F zA!^2LN2OCEZGb9HH5^!GcZ}`EIVv-09*4gj{+oZ3_P+jRnmcqDA1$26OBfW<`eHR6 z@-YD?f}$lJNxKKtVT=|(6vJIW3o%Oa9EMits9eW8{x-Nbkmi)nBwqO3j?4wLOYm$s z-9x8k9G>AWTR6*+6gnz&Qsk&`)WkvLp4|f%T7*kUDUZXfH(p_JBm~P%!OP|3(@$JhO)5-HU(q$eF zhwlgRSbiRSR~}{%|CI++B*K?*R9u1^rZlT(P!L|YE?t{KxtdP!ET;wtQN`PiiYi1E zrkYhg@XB`3LP$;>3ophtUN7u6w2>3LKz|}fh3fTkV_MIv)=f-AzNszK`=fG8rsOFv zM!{>jb#0bvQpzc|9TnAwYSd%ZbE)4pet52uTV-p0q1A2!wkOvt?YtgTc>K2!eL0ay zb01v=7rEFgbbnS163|ciN5RmH9sFt_K4m<)k5fQz*+Fpo-~JYy6-)u)TR_CC1CXAB z2b`MWG5B2k%5BCxeuPEiWkth}Vmc}0nMQ(BIEQf^ffF(d{x$GDjP)L4fKOp@DrNI1 z{wdH;K{t2*?4)x*Pa@sNWf~FFQK8d9CxtNLX$YN>%28oYmgB<1-5B7Y*qRk%Bi>jM z!(b~6oe0p;d+`LBP%r>7nqqarQ5Aky2zEOhG5^CEdW=(UA7XUn#?7^K`uxrG*{N$7 zT{)k4INb5GSJTy-_^2U{?|($Qo-$Y+gBL0X2O&f_n5qE{Lh*%UwSNXTINC`m8b&F) zHg|q6h`om_dRN8V&5FGim-8YB#mWl5)d!%SKiQHHD0vwk3F#~FfQT;`J9Hg@B=jHz z?lUB_i%@{gW4)kzsU)t}s}9x6SRt|;B?jY#E$Reudgh4hs&CU((g$RnUQ=Bfp{NO6 zPm!(uBs$qq+gmt9S;ZnKj7}hdnY>L{(1K^e%@c*OMJFl63_*e{^A!rmRCFz={TYc< zeJkJ3QDLN3<_r-~lNV{iIAq&VDK+!8q*UGfNZQ!!LYg^vBrV|}xWhmEo5bVwC$X@0 zYzn8=0?*w$92KF1!E;e2kiG}2ZsI+A6E9|-Lf;H@P}mPRFx(+@$xYlJ#gLMxcr+YY8<>KYr_MM;) zKfjzlIDRpGe(qYjeB+L7Z|1s{$4}v~psFlT-M}D(2nP~1fk7xfD@b{;XK<6Hm6oDm zl%i`fLs8_#u6#vS2s?-tKF) zDyr6Yy$CuiR`>jib5vAZJ$UMZ4#U^m7j;K{QC4hmEL z7ph80M?n{z6*(%5o9kA9qqCx?0%CJo=)7<=g%@F*0wP&!jS674pcW#L%ua{NGJqrS z>$U)9YgIS}1duft>4^9Eag464uRTh)v3BJG9F|W{UP|vBzmR_Y;i+`u!u51#Z9U!R z#}Q>S*_*-S0nq3NOsZx?Dl+BkSoFi_hE1jBhL*rkq^yRhYyD9%Fx)A3M0q>(5~LE! z;0%{!A(XG<4nvEee$m#{k}kON5>msJm)U9|@nyUO6heb!IuQyG^vVj|5u+!$5Mofi zmXihLL`AuIwy4`Gf6!NK%F67LS88*6N_B2dU)o)oB-iBi|9z0SqMUFHfx}@7e3?*yc02@Kh({(YEJ&4djmjT%A|F!WHJR>f z!H15hh){Z3*0TTs=)>3az4;K39v7o1;07h~t-y++vqDYHkrg^BoED1F z72EBDEama3!xL*`?MgX?7INsbm^jcV&3ve_2Nu)3%<(`%X%Uf;X3}BF4Q52nWAZR2 z1P6#~e7Vr}0?u6d_{7EZs}J!}LpUuLuH8!4Zr@Ay);H`-7LKko&s}ky)PW0u(p58x z1!vqBL@Vq1=(ZgduNl=-U%l0E<#XdiqLx$YJ#!c+(+MmWicPay3SaY&$AZVO}w+o}rFPuI9RD zXT%>TA%kl(l>g&c(XXYpFH<%RG$Kp^P0wP>@;>YW!nc5a^pmvz>*48kvF9F%IVg11;$qe1K2z!Jg|Jp+MkTlUZC`Tk;q$XZRsD&BHtgFX+H<+J{?| z7lGuul$|&hpG#%T%P~jAG5`z;)FW?#&I(6V=%n!CVq4}(!vgU_njaygV}k?XxPHYB zdV{@rRE4%vBrbDYVpOF#DwK!7C<6(Q9fk-3!WjyWu|Ot=EFWQxY#oQdUB7h?XRO>z zC(d6uk?oQi$&LK5DTG>% zL*!R4FI9-0-Bgg^T(b~2fzQrbnuP0 z(lakTpN{TbPKU8AX9-h4T%V$C#FTXt9tb}wNXKOyJ_d1gHLyIxW?DG@!7nA>#l=px z1V@JJROqP8&{4r@vvzC?j`sJb9pc`!aM?qMX{usuKSX%CJzbNDh|Hw<#^7Hh=CHsboT+ke4ae_ay`7Gq zyPQ5geKCD>@_agV;cB{g{Z_hlZ_P$mc=B!jW{~N0(e?{*qXiMx0(!VbCbk~38Z7c{ zM`ddj*rirY)-@dYjLwN3!X9vD%ZVPs8r-JW3qvnzz}f=OcjziPgSh~$==yJzUI~9*h^joT@}U>(z%HPP#g(-1 z+>2=+9F?O#z?zlkpG|X9lWArgJA_ager)g{hDTN~R5Aw-h0Y15e0Z^*xi*x$f!5#z z+=9LvNMD0P!#=`e@mJuWaLvmC)~1YO>W7PU;U(e663pO|p^TepWGzo8g;#TAg&qfK z=``pH8cqT6#V<$2927b&g)}=VWQDQrs6ZY^S!4neKx7<94e5Xeoy%}O=eLI=#i1@9 zp@KH z*q-hE)yRf8vVA$x!zx9A&i7ZqOTHrP5jPC12VId?QqHRqJG`AM(goK8EHADMl3X7m ztko1zRjN%Wb`i;b<)y#mds10!PV^8C13SO$ux<|)<-6RKzMgDd&W=D4RQ$vAW%8U5 zM+YFpkhslPms|CrcB%12cw0_^SE*jIUPMcPrn+QTuRTHxC6xFf`ZGEwf>8}QqMYpU zh|lH8TuB){4tr!)h?P8PQTyq6R`P94+m1@RKEAq~TB2&G+#jH6*W`2>hqJQujhFE) zpr54GS6)r?`}d{E*%{lF!w(Ivz~SIj&|!EdT(?5!g;PA-0mSPO9Dz0Hx(OK1Ou5b* z06Lezw-=)+{Lmo3-!lP6g*$!RQQ>Hc0u42f0dX@;JmK^(>Wgq)bXtT*T04U1sKh7= z*Q{hmg(SubTNr0YB}DRtOEVCBp)E3zcdx||hA(ht>F|(N{Oy>yH5>$Y_2%t#;@p+= z`{Sq5r)P2e{^jfG5~hM~-0}4*4<6#|6?lLy%f-2}ujdz5T2K*(X~{3@V1-+uTs5ay@-~8ZAYb59mqtzsrsV5)K0ni zM3*1tVra|55&AD1Pho5meEFOd577|lOdSb5nDN@%)RfHEp&E=C4DB$Nm!ud5kPHHe zTviXvV^n45_=Ig)UVZbMX)lh~-~ZN|Y4*T=Ox5hP9XdQomTOIT)cqkiAI~73fx>%u z;d3fTE&{)b%wzKJp`N(2hYrm$9F=`=P!_l~8LMu`Y>^6`6geuij*bQ|N|N(II4|af zS1ca$GJq$aaER%J@I_DO#K34dE}SvPg`_Z)qdvAqg=w%f)tRHw7-caWe-K(}hh<)N zc)hF*#k{jAeuQrUap%wNd+RvC_HMdx^#+dKznVTfcPV{z`g}Tb`5NH2ZNV)U+M2V{ z77@8kBI&G2bcf2A8lUs9yA@nu4b_97Pn|?aZKhMAD==7k5r!95Vro6It5m*o)O^b8 zIc4oAVa>QIfU>z7gdfT$!Yp7&!s%sJ-5+Y^`bA&kyZN>~MNgNK5KWb~xquKr>E_)z9|eYl2Y!A4S^q?NHpSa^$FKSqNeb5cNL zfrZnw4!sIF9V#@P5njY8O&rsV%@c_@@N`sg`DjWwDIm+EDs)tsH*%y&PEjTnc@)BM z2Ez|y2FrWwH%}86<uA~o7pTjzqOBi9fmabsb z<<8n#TEBnaK6LmPPM0|@*%-5E@K5OIAoG*7k3bwz7G*P>C|z8ugxyvPF%>8ayh+@%5;pV zbR<0`psltmWEj57;gFh7dC^zZm7in63s6_M_%hv>O-NuEnC-0KW)F}A@0^%OyKxxY z!t*a;aqSOqzRDYE;n*{2YH1NWiE%I+jOKxEbD&=W{WM|@QkdI;AATX3C(TYE9>ars z+SaA;`#q0wj>;pPKFbdc@^Cj=qtO%=l#Yg+6FMx+hr?l((K_avvC^Vz@&rtd3XSCG z38sK-bj8-Kz=oEi(r`>-jf#!7@D8CWT}UczH&2E`9@7kpEzPnb0H&MGvX*~hj>iKy zD{EN4atDiQuiw6#&Rx9@XXT)ai!vyxZ0jB(Nyg`dF%~;r zjMxR5p#iQf3d##4qn=g;P20Gr>nS60{0rJB3s3x~s$kDTOgJ1V8hzLHecL2|WM za6J(Cz@{_8#kEs=@!`VPUdIvpZ>4>2y`2`09!|Tbr_va{w2XuH?R*qY`|x}e%H=j> zo-)ftw#$&Qfa#rC?(%_S!cmlIO#4h>x6c^hbX5H11Y!#`NKOWw6<%~S1e3u4b(|OR zHfiO!Am)$=o+N(In>#AzoHQI2cUEBh7qBN-w3s%Js5BSXQY9{XKt)=0m}8oXQs##k zE0;V5cV1&P80O**R|tp905ws`741oO*DRAGSZ5cvOR?@hez zxUF-~x+5oX5Gjh(Ov#dENtWX&PV(~7y*mB>ukKFLE8VY?m&A!J%aSEgoG$Og{(gJo z1FBG`c+RC1$w^pb9RPaFdm2-5nl2dKBOW8*Wi-PBs%PFkx;|=oL3KXtg3< zi_R3+E;g%4Y2_4jxsTZTZUDExZ!AmlwpaCg!BTGbp{eAwv`RT8@+gnb_)fDcHc3Zl z+qReGnVK7*zaja=G~ebH(ldALZs^tFE_i`FuR#dg-cvNEEIVGXSA^&Fvb^iNugn)f(MZac z-sI}1B=Ufd!Af+|va~8Cs&T;N$3Vq-Qg}VT&;SEG`O^UvTt4wym1BU4zy!bqTBuT% z*%(nVErCT1tGJ*{*1#mlK@h2cl>jA(6xjeRDv*X7;vrAGN@IjY(?U!MeRlWm@EfgL z`Jeyx+u_%r{(ku6v(NP+xw~3$`zY41@P+2%<6{AxlcFyJY$d5DMpDo4t9nni4GmhY zh}WVs#ionRYEoJ`1znzmqJs6Ec@9+EQf`^P+_&JgJnzt_{8`Bzg56la?p>ax3j($` zlV2j(@q)dgHm{fEt#A9LyX@5Tly6}s-BzYjqw~`zXffBzKL;un+_!}Q06+jqL_t(; zIk)#&Q|p(OZ3n0`WI2;(MKP}f1`!rs4neYo=09Zdm!JiPhe|7v(y z-vfG4qbgU@6?>`$p{ezwo`s%CU>-+cht`-*F9?M2~w3!%38!gX9EUUH|zYQs*xCK@zk7=Ep zi*vupQ4583<6C2Fbe^|Vug3@;o9Vrr%PIAgUkjFYaC6jw3#(er<;AoU?25i2ZmK@3 zU{#zMuAIzF`O`lnnkeTdTf6U1^^%J~&25m*N|&ZtYTnOxz3*tlhtAGoI5}4U%5J5)8g9KwYc{6 zk3Smj+<9|&?Z&m?ral04QI9F}-5VCpvXJ(QfXXesBLAxPeeJsfDfvwt0}rg?iQPa2 zkL<{dQx)sxsLV$efZ`qcm^UuNDnKO`)5>>om5(i}iv*kqr~p_1DM2rzD6^>_T@YME zb$VLcqo4^EpEk{X!B6$Fb!HRVPtN?I=U-U&h){{TH81Bn^_w?ep zFNfa>tS~L~`4?XdUuZh$?tQ&D?!kS@=xw);4+6CC#pY-O*`npyu)AuT@t^euU_-@; zi*vupc@9*3G~7}ycWKXdgHGs^LTA9msmybr;&z#)t;2GAt!(hw^4!+ zfsFUxdoiuU@bQ_tUtg;FYg@2NrcpaIdA+Ntg!K!xZ$O9B4%k$^r#pdC>BQexG{1zQCjx@bspX+HMeNX6sH{Rw53#~rhWUFMB z`v9uN4Kvoab(=3`hf^E2lke$PU%F59>WumBYGmcyL;FaCTSgQZx=BSFAPRAf+Ot-#L8b^DA5~TnV z?R7dwYHd`7H7aE^g@v_hAml8Y07Yf&DWdS=#;4$_6kf>aCjg4T1yeW)RuXWanjI5WH&J8gP_mg z(Q9S&Kll;>TpS+>qzHWg2*yCAf)oiyO-QwK;nIo#mMjBOQieF-=SWLJ!ze?;7jL{3 z7 z^DhaiR%}h85H?L_ciMH9>~YCK@-1a+6|gL+6}t5-W__Qgu7A((^~_&Rry9PGOsT81 zdkK}*h5=G|ll1ofu(NkwBcA7#UL1DzFX`0+8rRebfBg8~@c8TB4JU_R&yMRVPtf`f zVo9!D$3>zKb5Zf>f<8U!aqxjyuxI%>`{{m~yyeoP>+egz_FFmSU3Pf3((F1{I7l@!0z8I5bAd*|A%6O*~cKdX+HE%-A!+RK6>Th$Mn#oq@-Z|b{ zJY(u|e#MB24cfDnSJPKht+PqmStxER)tR-XEZE1rR&gTW8|5DZP$4ib$&)ABB^7XxTmT0= z;znCWsZRyyT`@ZV74?$*q3aERa-ozPY1*x)fZu zc#-Ui%lc0j^y%T_IP=pPwtPoc@#%h=yyeoP>tC@S>+ z^=)`&CnH<}DxI2(^R%;D<8r1pMAvYY-c0WA?G6|9;U;OIB z;mtQ*9(FaVLPxExZL~MtX>Kfo4m&-(oswrqE>J|tk4II;zD9Iz${c+D3kAe4QgT$87uoG;3QPk}3R~O~S^$+p zrey?H6w9&DNQ9=J98pmi5+8#U@&Fa&%o_uhlm)nC9FBw=EwOMO^1hmFO~GwH(OZ56 zSeWMF-7I{)nWutSjQe$2)AENeJ|8~UT9(h0exWCazWn-LJo3zo=a?D_P(|w#kT$Bu z=JT>r%t$r@)2;GrX38%mbDO$z$?hE}LeeSm^TBJ)0f1Q}M?9hRm zUehz$D|*$et7}5F+h_U!I={93?4YDpTdePD#*8{6r2RUg;v0*veEW4ZdVTYs0~NPW zmzDImtltm}1!xM%?00vCy#Au4dVsWeh z3e!6Pm1CvakpZ;Cj;=0(96=!sGXV?&FpO>_dYz1(Y|>Lte8VV!ieQXP@&pCVc%qS% zqsJ_K1AQ^B72M6DFyG2e3pC4q`ZQ;<`>#FKytutFQqdUS5`9aB(%rvxndG)MX) zCZ?Yb^{6v1l)I-Vgzjn$%NJh?qUZ-5R*P47=EbWc*`(FshKgi=FM&D&Lzj^vF{VqiOuvZ;XWBvt}uH0 zF3-bCPH(5#&s^1am=>rEJBFZLf#&t0BUaa#Xnl!BLpXW1Nm*~g^iF^jjhJY(B!SAc zNO#Y@ppTDh+J~v0Sg(?xmC=;b6M@mYza8%V_HT#BU;W!~e0X2y_o1VDN}2)p?HDmn zv=%Db*SG4JVZDX2$@2qIEKT)moKv!7tDzdfG}H5^25h&TSG{~%Yy7G8-hZ{;o2eab zk*NHd3B!)ZUgmzM@|J69;ja_3f*m?=(`$N0dquCBb#+ascKb{pK6}$ZKcSi2_#0 z#+nm}#ApeC2vBmYzd(<6hbNDBweT=US6GvBA|7A>kibo$f(6Xz;z%0_3IHm5T1dPf zK;<+>RJN2SrqBhT941gX#wK7zi~uTOyT~bD!HVPpkOZI6oaBYQGW}F#)n*1NbjXaT zrA3!AN$%nqh)Q|KGY5*y1$99``C+}kQ-w}L16$7@r zXwT>Ah(DF6ka;&m<1)WgSjf&^BW@(@CaZ~UmIukS_i z*{HQAjHWy}+#8-8><^~`EGL>0iXE^bbASP-+`Kr^S>)P)ik^mI%13YC<;f>@rhXXF zK$;n-7*P>WVU3EOCN67K60Fd{j(x;bPyr$_q7(id3nM9v$QZ<6gBm*?xm2Euo)Hwf zue?DLGtp#S(8(JyddMh#N$hVO>rKOthh0q*J<(Lb@!>(dp8vkS+{{~X?+U2!{h_b4 ze+gJ&fA}a~K=()=N@Q&d-yY&cbNMvUiQ1CU7IvH#5EK6OQ_lzT#FS^BS}n@sAD@?v zRwyO;et?SFPyRCmezWa^633vF8ST*M$Tm|m+8H5X!7J-bVj(P}A}ok4Kqd146F`Z; zisVy=Cwe%!(pMhCY?0Px9MfoEtxfr2c=Y){4v)V4m*G&;KP;-9ZzcLn=Il!8156R-(n%bmUcjF;fkN#D6@XQr=9v_IPv+(ElM+**;TDaQnFI zbVE6-_u@9Qm|DRGIzf{y*0H~N(T444LyH!-`dAGfC)oM(=Z33SFAeX#b9?x2zxvVe zi=VwaeEj3LhTFHU4LdQig4QYvV{6VMH{MMjr|{`|iGUaQ16b&m{g)+EKn$U1_ozzr z?xi#2A`2I~scS^#i2%y!!MWk|@t!)^ZH+SQ2n=j#ElGL-NYD}F{okE_z<{W~fyz06 z3JYqZFTsKIqH91WYC~tHvJ?2_+wp+_W(553!sv^xo)P!6fRY__@B45 zyg|x_Vxh$}xFgVzzz5KU3azLX&^Mb-^wsMleK_(^t$M7rEsRL%5m!y~06q>i?ZcaK zd2h>o0h9X=9}B2xor}Ij1c+h81wg~X+y??T4_KUAo+vueRD`FCPMMmBMx{*?yeNdI zFKHf}%mu*7Z2S@{n{RC9*Bf{dFmTB)bT^CEPb*=mWTWxwl7TJXh|MjEQ$Hd`1Bq&Sjhjk_7Sp*9>0kp&}5Ti_h8vQ6g-U*=X6_{k$I*uhk z$1BRQ7EnLF`L`l-A{axzMo5^uTC zbs*J{GgE^ub=nq=_OFGFGHKE7TfIxX#ZgX~V$cz!@fwFSgnGUStJ zm5oY^69{i~tK-d)K!Z=$%LZT=??Kd$__0n!PdjAK9wy_j_AswbT3{g7s2l=R&T9lA zfy#-1$`L?Ca$Hz+hNzH_R5z_MUZEUy2cYN$ciQ!oc0Bo$5FnM94&m|STu6(ZG7=(s zjEJ}#zVN3#z{nV+2#kncr;SuNt{|r9l$$9)B)6OfipQKqphc~susG$#GWK~SuDEL0g~ z-1({+v5ArgigdE6rln~zabcV$=s++#?~=yJtC0~#M`DCT=UiP|Vp@WXZGn>F~TTAz7}osIZ(+~owtKqw45U;*3PVs&HZ5Iwm_~YsitrkLmzO6RCiaN8nN~pG1^*fU)cD^xCxtZVk>BDONmN`vk^V~XX>-fDV z%lib3n`STc$6W4?aDP0PLgxa%ctLNeees3iy&t?f{Mj#lIQ;xi-Wfjn@XZ)m$u%oe zZBE)e-^suuB><<;V6X#5+`7@_s%)^LY?VVs`WRPd9@9RNii{eaIBXWzo~nD+)X%Aa z%9BHlAsh*)XzC|+$uXjmW;BYCR#i3xp=;;11W;koY6B~J@JUplj2vmF!wrxkR07zb z6T&V#BPr~$cBRme$vtE6f?m@BD?B+Apo2KI!y7-&EXNU_$O%dm5i$X8phZ1gmux*v zeCfMP2~;jCy`VP?@5kGPvp&Qf>sn+8pmL}<4i2>_m-n`?Ys7_}MY;zu`l2`H@{|#I z=ylh^+*q8O;N>_Th0grRv7Sy6FH+XdXe0(e!>CRGnHY^>Dv41Uc1C3KKxMm9W7=1# zc1q*T9Z{wQgm4rYy)f`7BO);}A{rpvz$4a%#I%j3ZnVY(AhM;j2Pg3a4t8SaX&lKi zVp67m7&+nO55OB2K^_ajW{dENKL1x*WXeyr(;ZuwqK~dIlFCQixN}2vr?}&6=?RS z^j4bc*SPw6TFe4Au--wDv;ixoA)mjdu1%Nx>H23gyAQM3bsR;)#UjA{kInkko(V(%bdB<^^|qi*717}mUo5b zx5{4QkF4wytW;!Eph7KJJiDi_D&M+!ZTRqquMa;HP+=oN{0Vph(CB;Uuqg-YsL*Ip2b*8a4g%h04nKPNEet5!% zN0eDes~wPXqG_NLffq&`qC=NHojZTgM}+9hf9}8#bzpMA!d2d%vKPBXA(ZYYek75i zBc+39A9pU;W=1MLI4DNUPK7^w7GMEiYia!c7Ge=5P>cdUij$F_BgxVdIYk8U!Lw|{ z$O%m%Td@}zctr*|Z;YHU<#SO0<;u3EfOK5=90K2P($Zpy5o7w-lh(1`#-l`PX2p|x z)JJk2c{xzU9&2&Vp#TS<=8${^DoiV}7+1S!$6DiZEU;_Kl88a#mm4UkfS%4oVK zcmNQAmH;B%^bH^=0SPS_p|zAa%K;$F*eQ4PA`*#hB+c3`aYmLr?INIec<&PdmA{Lp ze@>6?X*Tb%1X6DKhHNV(wcylU6KZZ7Epm&DshsT>YOiItO>9wOYIj!Z^`-*N{*>NI zQ~erOY0oNWF$GTCf#N{vX z0#wwQ15WarM@*S$q(xG^$7Cz69)gH&GISyoRUqnr4XaWuZ6M!V%<3jiV z1<8cGQUjF$E7Ak7ggkldpcCEt<kyfkeU9Z*NA`0$P(?s=Ac|oYW*!zr4EoysUp)%W!KD<-<9mv3$I=7#8wn- z-}SVJ=}TqHr`*z-mA;-+E!pnf*xfQCBwGCz4HQe}&papJ?CRHLHW8i*a5@a=f8)!y1! zz1WWR`f_i-@_U6|urHrgzSFl~lWmSNC+m*>I=!utm7je0*6?$^!S+`_|KafN+gh`t zk(CSao)tOhN>QM-U=_il%RlG>#yUa(tp)Acn`1nL=?VPs->+0GB#Kq45Qca`0C->>1S;YSa1o0^K?0R60RoSz z&?0~ur4ere6%`|Xyl0az@<5y6pEPoT4~dbdf3&PPrhp>VG1&vGh(`PY7^Ih@I_bk8 zh4_gP@IqXVwF6iTW<1S>|Je0I4AhmBX}TV0#AsH~%czt`r=$=dMZ7wa5_#IT*ipP; z7u%8N7k*SbYgF=3qVtP87d2(mkt%nxv0lrkRQL$}^cSj8wqH^RSyq@ehKRND$e5S0 zCIwphikOfwW0Xr$Tp%NP9jixo^@#F64Ue@}dV|ewzh9uTD%L5@^{>>L=_|R&2tn6(Z9CTXn|V%$i*5?T`~~&( z{!{V43{bgL)~IyXWq)*M<-VO~0%s*G9Q7zm+Sqb7pwyRJ{h}n`}st7d~~k4 zC8g2F)D^Myf-6K!!UKLTux91@Wqk|i_VA}ad2jgHkAECeKe!SsTKqcythQ%Nl2c({#JP3sjjR$?`kyZ4E1cMDQ5iLJBs5~!vW9ml$ zKfnrdeJ*Qp(0^5U@i3Au3P%{E4*rQX7T|To}67WRr z#H01t45S!Ui76npC+kyKP|GMw1u7+O09M2z8(uF%Oc4tpMR6Qz_oC#C1yDg}UUmZG ze=U#lrimY5Mdh42OI_Q6=6u>o8)15614kiYT!_)s-4qBAU0V{gQutkb} z@`ac-(tedgCWWgkafS^gK5lFFsVzuI3ZwdnS8yup@^J>NM(x1k+yqSWspi4m3|Gi zfDi^ig&sLaP9&%sV}J^J=>R68Rgfb15bHnmln;+3KT%qM3O63wka2_e#6PHxWtf1$7AL2b21UV6D~JC^9nNq-JhO1sqaW}%%*Gx|Jn zt1hM0O3f@unx2BQsUPe2r?u6bZYpQ_dW~DLGB(Rttu@F}giUg#Xyf^%uk(H0$9$vk5J-)cSvx6kv zhq}`kO~G39VDWH7{`I9YV!|ak9i)~I&?2J54N{&QtIVj1I`UXF8>V!#rp$U3)~Ezv z(TIxjry4~$WmG~tQ$L3RRG8XvN0c3Vc9hv)9$+ zo)MxPR&_VzhKNl%*q9Pg_2|qQorq3drr}LBUtpRh-J^uQJpkYpOg!X`{x(yUVDG@=OQC6qaaopzMI9w3%yWu+0-X z{O0JCr_#{N^(1O=1tCEUkj75Z>?aF=0?j<9DQ9p(iV*s%^x%aowMI13VmIn!8nw4f z^5LWoM>v_GkCo0=VM7ih=tb5xk`XZ`UB414V&SLK3)MED=T_n)R10dg=4W}E`kBcsvdwU0rEGFFWJ1bKO9+`#6(*VX7y5*JhCKJ&onbC*A$en41Qwqb@U(Ouor8cV={E))d{Y zK7U(%)+m~7x4Mr^w-TTo6y}1IxIJfTtuJ+E7xkY5m8Eu_oj`pPcjYzmc4IMX&*&ED z82tgYnC*;HPEuaH_0sjL!;jv1b@-DH-X4DS)AxrTzWZ8C16{tPw{QYL04eGeGnGZq zGdmY$q)PZxpS%G}iOUOT^JTPR7N8OU1rsXg#|LFi;A9L^Vzfd4TrDE>Q!z=QR#}K3*Sd*ZX1gAo-Q@lwVpXu-$R7LbNk!+s2|Ge#A27h zs0=Aa>_A26F&!iZDO*u{awL$VPCFLMszZ;dA3zIYk*Wg~pOKV&6d54Ev`>xz9G&Xv zpE9b_Jd(>2V54o_sEX=HsGRJc0*bE}E4ZBgp-R#ZbJ;;^06sd|9Q^>GB%p{93*`fB z1WiDs11gMMuzm%Ql2a{hR6`#QNL~2?@Wd`z{U2>at8f$(JDb6jfr%j7up=HI1!?30 zT!mc#Rst020Z=hm$u`Up9y;g%68I=Pqc$O2$|N*QEQ}35DoHW@CC_n=Q$SDRom_02 z=CW<8ob1{TsftiCl!K*O*9T+O!!eKvTAGIopSWx_rt^A|9vi~)$8@+=^u+!{mzWeor$T!o+l}1 zb3MPBp9#ze>8_AnuQPXaeFK$%`i{u<`*>Y$ejR7l#Pu;XE_y4G&IHV?8YV>A$HkSn zax>ZXtB@Im&=nW$S>N)u>$3Sv@l^im%*OSq>NCf|u^oq3#TPSEJJXVsW`rd}s|B9} z6=c0-LtIU?t=njj;O+!(oZ#L`pmBG1cY-^-AxJkG+}+*Xo!~CPU4j#w(`Vni@0a@r z)|Xkes%p&fj7b%-a9%&3miRV|rj8N|$%;!XPe#&o?B?-%$rtW_e>$W>Z|LA!_c^|H zmZW6~N_^t#rz~l4=u1KC`*io?zv8Zoh{d#dAZ3s&9OJrxsXyu~ZI1+p4}_NjDaV{~ z+&YqIzN|bty+O!&u$Kud^WmYUp$-s9%+-erbZ0Y0qBtHJiM)$Qj8+it*_Oz3i1x!K z>ya_RE8e?~Aa#G3CgC-qlN44HWz~;jw3C=RCPW|z#$TaW`;C(q^r6Ku{Te^NUn82q zy#h{=F5^zVH(bzk>H$CvEdqc=%Hrn~P*qF5!53CI2_-8W=j^$2OxFhc)6*BJV(QLt zY|-mtwvjTsp@|Z$N8iTIWPyOpx~F6TAxcaMX+}FP zPJdeB&&EU%^5fL+esa*u3eGT^NNQm=7kmU>h{$J}#dOV|-o9H^Xb8SN@snz7uZa)J z%9Lf7>3(L{3KshXFK4>&B5w>v>7S38IG+K0n_YSr`%`u2u(>bh5a7UJxAT-jO7x=b z&0uV~!1+masToIWe1R`zJ|zWNI-9TQ0M9`9BK zE0`dWjVS1A9ZsmdLobsD2A%bHm0cpjm+5k@l8LWM@xk~5RKbZgv|auRb5P+5t@f5J z0nmh>i{4n=R%b$Ol<~`y$e>K?h{SJTvgQbpoFt{sG7B(JbL(EAs zL!;ZGqOUi?aEXBwnD3WZ{iFHf(y<;Hz(_+khdu_PIiy}BSMFc%gr~GNOWpKo2Xn4g zOLEWmPEO+%a;%an52pi>Z5On1i%G|s|5ZJl`3x#=0y4j}*J}?~{gayWFKgU2i&oQP z-LJ9+7F(`$ugwIoE)_4{*lgUKJ{n;t(Ptqf+W0oKD?6-|28}vS0so~Z^EGytlH+_D zM|BU4OVlzX6`RKU68Lo0-XG>edNgUre^-?_-rvP3U+KE(-nW&bc5_i5 zVfXqIrkhuwH%C!_j1A=#9CL-tc6H!JM4!=XMJe@!WR85m-jERHVrq?25E{V@IR2N| zJd1SbVh~#9ch(vW(mH*ZZz;R4L8;=Kias*)f_a$qY#1eoTR{G;j({8ghO!WvN8ohL5hER;DyiJ(WL#l{i3yT8>q9x z3Oyo;*?MCKktO#=hB;E1=C0av61Eu#L*gSR+eof)@;{naSQH@nBc#SkBBgR>dJB>y z_xo-aze5?#Ym`*TEQ-zb1Z5X2WeEZYx7NX`_O$M36UYoUf-~~wZGw4&N_Tv(jDf#&V6ig&HlP>ENvh7kd&m) zm~bSs)#87H*#KBh{u(D&u+0g7Ft}Q|i_GnU6Z+4?sy6yHo4CY{ir(#83!LtMDRWFo zk9>0*kn#K4vrg%!$vKwQ9?wLfY4+$UZKpooIds1{uZVAaT+Y%yL#k8raXeR=!qvxZJT+^^crv)M56568~gtl$_;W7mSu2*vT za&XZtc!l7lKTT>E=Pi4Op#?EN#KCK-G86|j{X`f&G}R5#jCTAjrCvwd!$Ed+i~#S` zx`yZfLwS=~HPciUx#)$Out(zDJe}m16mH)uX0_B|s0oxvyN3Vg* z09tqatMihreHTn$6~%~oV8B;BaSN7%$l;Bc*TR~ZICrACkNLF}*0}4mTV9$yBxTSKK`_7rfRKEMTWw4F{^D^@plppAIBCCrzj){B_DDQ>2V`m6l71tEM z>1ccgP0vU-k>wCM!XYwN1-d3xZwt%~A7B4={#0OiSVW|mkUlzr|9rpyHpmANA9cih z-(OfNla9ibqXS-`jlslHsGFvRuprSNKX#&pD($u6=Cj@X8&d;e{@0Cfu9ikhe+S8( z?1I5IL*1PjuWPX7VB9v&#uk64I3utrHyP|fa1?p>Qju!7m5#hQ82tEM*WCB~8omG7 z(~#utnL~WuZCVeWodb)%+K7bRK!EDPG&NJZX_qC~1G$8Wr+VA5Wxo zR`4?}9LmUYLfK}Nfy;HgU`)Y)bi~d-m=zRh=P*Q=30B!l=8NR2?K@>$Bb zUaWCQb@UqCEx*$t+Ck&H%8dH0_T}Uu5KB!lX z{j=6dnA+R0lKy0}hf-L&@9ICLpIVbQgsY6T8~fWci_ZU??Y!t}cJ4T07No;gBY+@K z>3{Jx*o`R3Ab&(JxBvEDgFo?Ze`N?v>fx~h+}^Pg$e z1|6*e=xSom@%7z^{W}I_IToQxf(n0b8Bzu3%KNGLI}N)y^a5pLo`a+_;_NHQ2k+~3 z4PGR{bCP9OFjva_N3rODeDfs?c5zMr-j?sh3KT-D^ZLg*G}h?u`m15kso){1JJhs z$}?Hjxl@XwLIGC*PB_jnnF$4^ijy!r;V-htXwxOe2tB!<^XZv>2*2*lu`U0Q*D60| zbAKy^V8#z5o=Uk6(1>ph4?h#jc$0%9Gdn;U0ncH}c-ABz0WGFKB%5$68sa{Jd6}g@ zQDJg};rGE3`p_c%8K$vQcwjSwFEU-Sb}7Ql#9lVK}CPw9zl&NRJTyW>}oAm~AYx)p&z(xl6tN@vEh9G7H& zfc~F{CD~1${vBHPSeTa@)8JsihIjJqnc!n|ayP3^@%2M_AZ%6*IZ)L9CGiJq^{=2x zI-TXcW;N&9G+q_Gme`Q_KTLr|5=v{L#!BV{2ZrZO^=i zF*L|ma5p9uZdS6kZ>BejBz$Yx2bmfK#Xj|?c}x{Z%zV27htX(*@S58Ae&C@H|8{QQ z$~(hpWTC;?;f36l=+|>1ilwh2HwY)#6-U=Rje>HmQ2fl9zmt>Bk2{as^p$$v7nNE+ z#h*v9!eTc4?H+nhn|B+ZeSJ*BIXL;>>!{6KXf>@;0zX4wX5T>TVRf+Ei`$!9-idzV z(AU*f9bCA;&QqRAOM<&)yH2F6;vn+D9QIp(|K9U&WkUt~T%o z2XwJaO%mX@V6A*{o;lPsJT|I<%AzB8T%6PtK~Z><7ouds+t)& z*XzKuel%j}4nlV#U3Jw4X+RR;EIW2#MzCn%ij4ZExPBM zG;Ek^vbw}dOG);;#+{SVRh7q!l7`E2sw~Vryv@q4+Ez;!G&-yvcT6tofa7Ra&G*nC z{-pF17=`!;&h@6{bpgwdf9>SPWX~6f%@QpkrDLZvwjU?$=bakbRK4!!@-XV_gduME z-kV;#b$fl z^C1vFs5FRS#Y`8ts%WG5I_+3iymxy0YwYUN*M%2l-{^t{cgB^;1~eS}AXS=3MW(;b zqmUW=XbzBtmFMybp0W$=*zxFgToDK6&p9cqFo&X`Xi7UYX=UJI`5uolv;tsjTI`r_ zfYTyRkr87yg5^TsvnTgW(b@#zZwWhYPZED(AEt%cgp*BNQ&6H+sbY~v`Y7aSlsJ?C z-S#o$a}1Em@5%G(JX^a!gs|?9h8SZ5Z-}L^*gx||5iZSVBQ=Uy*oGzq9;bO^AcR)+ zj=NlK*SgD1+_7EV&YNT!bVJN*k5G!?HwBeTspxO7m`eM7eYhJBbmBelm^Vqd7X?fF zSe8K+=0oNX_cNW^k!O&ezkk%M>P6A1+d&g+`c&M(ZTYtp+r6K*})X|h;S<;p#)dBXM1gg*C|$T#Y+X3 zbXaOa@)w*w@Bjhq9j^kMsNn(&9$K*a4-t55YAP25byxHLIp$F!1r-^={djnO2k4+n_k!5f=MNMcMjXYP2}SRe1zb{Xa4BvuY%{j4O`nBh@| zb$;)dkqQP-pv;6ll4Gr13~)$y4%GCgG5$>jEE@FGNHw6Y`JAy(w{5*>Hwh!QblkUb zF=kD-p$K<{bob>M$DP$&BqG(bE9vXw8Cuv|yt=<%>GpQ2b2GBYgeM4wkB=eDo~lD z0^UFD`R=AyQmOtG3bZ>zw4Z&hZQsV)pb^o-j>96?++9c$M+Ai9nl-_S)Bn3-5Nn!7&efSju3m^CyR^L@w#k`&uVBFnHRTicX zZO=GFtNJ4>spU}ZOMJ|>w~rJc90m(yva2ybd5BBAP7o2 ziwv}>;5h&ofI*v#IhcwR9<#i97 zguT&RlSiU*IGT;*2Kc{8&~t(KV)@HxYQvz zMf;0O{~pap_Q>HG+xP`1)O#;mbQu26CGHax-M~m-=ydhyui#c3%j`FH$RLL zYlrZ~uyw5tXc?V0kQO)#L2CT0a2A9VlS5}ML;Z`&6$ioxB;a94R zX5KNAuQg>}C&UmgWTEBQQ`kO9sfmlgHS|A&Oo_6Qkt&XUpuhn58OokeVs)vW2r9Lr ziuW%u_mG#CkG$iG|Apvd>n4*AUVn3_r5Kc#-3X0uBi4UOkWcd+u&{7!4E7m5S{B==KeaAACm2wjS_vORo0*VK zU;G}$yHwAAcujgo(%#IEr%iK<3CVr`4GJxC_MM5lQt2<}(4SwkbArJlmj;yvFpgad z-O;Gi+h7y5jp?mxZ=tpn4|abp%m084+bv)?x^G6By^(${xCpueL^^b9Le66>HMTo3vXt+@#wO(T%a$J?{Bq^ER!Wh@! zGy$k^s(n9CB$-cPgLlK@5=M53-f@{KrDQ5`jag0#+xD5{7P&xj)7SU%PyjyI)k_>5 zG(ZcSG0anOgjm9{psLoa#}x3y&N?19$agl+bX><-5D=?Ge8LCGLhq=R`2;_dSW9f7 z+NohuVF(A|CpM!?qjrI0{dkFM@^ZfO&`W6(N9iJ|3y2{Tq&n>bK1&2S(xD8$$Ajr5 zLLi{+FQ|bs_tmf3W42Kj>jLg%sbD=pqgm&eDb^)EzV>Ng7Wp~_=I#7c?tOlH_us5H zAR6y6d8_e%OYp+SC=z%6T&c5%noiR zSB?W$M#BrM#Z%OxW^^{TiL+E?eCDm%;Ek)F7UgR%y1eK@(TctHBk~AW^HYg($v@XP z4Ca1;U`ZY~ncMkP9b6sN%`06mJG@u_<~7Q`t1)6JU*V%05hK^Yn9O{*t0%uj==8DW zA!Xo?(@9At!Ka)!TweLU=#D!teEOb9MDG{kAlD6$Bzy+?9fE(IQt^_I*j1m^6J`!g z0Du{+)4=`OPumBZl<7MrzUTfvGJt8_)1^8nqe}(R)G3G4};p zHZT&Yx^plT^#{NlgmW$!pI6FYvnxC{R!>NO)9RI!6!|ZgX+m>+KC5uGC;Yk=CwA}D zNWkTjipKzOC^RE8vSJ`lM?sC;j&A?bB?up^rY+yDL8%r!gP-`Fs}c|iA2UNh5l$=< zS9=vMtN5z?{(}^m=z-2LnHKYFh~YgeO=5%bEb^Dn{%Jp*nFOr5#%DO0={lQY&YB!D zoYYP4UQ1NClesM3ZjXAM3p~rn(F(}@?*H|V{x>zS^-(q(nAm+k;4)D;!YWXgP3T#x zHb22JWIH>q1)kVi;!@v%pEyj98E?tpJJ_zS6TPkN@pP92l=5H|i zvtZVmBS1TaGLhhV^YA;MEvxXrrg(|q@VcmiutMF+kGWkRYZ_|OKi66_l zgXo;oU%a~%bFcqjpEc^^8J!I?n9lSZiZ%@gJZxaP%lm0`pLi{S?XXEWG5g7tbk?Pi zLP!#!004g-SQ5>%IK!lv)zQikbluo9W)M{(f~bvTENu)Q3&;SF;uaLVl8**~<>=YI zum62WzLF{n7wO!$q0VLj#Cy$E&T31rh$19hviLyjP)g{G;d9J8NmP3MvjS!MeMPBG zGZj^^!vo?a1W~XX6a5-eStOoERfBLU=V3uLRXu3=K;b-kWfij_YcyJB-SMvhCQrkl z(Bo|S9Nb~WzgOdgoD5@o|MfWKGiqFu1dfD(W;i^)0tw_6{k{)5Y!{Kt4SAnpTOF(! zokdAiT`kBnhNX%5a*8bGtxD;Z$3tuvsv4Y{SJGo>d7~X%f2XP5m`#+nJSz0Rl=@9o z2lxl52QT8L%szuf)QX73Pu*AW#pmd3ua9?0yg4uzubacEWJ_(@iw zkRD;@SCGXmw|8^@T~Dsb~SvA7-knz$xw+wp^ecBl4l06J-mP!#)^nkYiNu} zfH8lTZHqW`dmP{bHN^I9eJ$}m$ zUU_Mo;r)~Lb$s9Q1?4HG{nA&YTv^9+4H*N=s7}dy8nePzWIEr@uCu2#`R#wEjoXlQ z=;rYhX3(oVfx+iyU9NoC$k0X`E@NSjE!P>(nKR49i~@PNya|*=o_<0DzU~4Bz29eF zjfC?|AFUJ)--;7#j&(XKmg=eG?$1r0>WluLiU<6^6%R{D#}qzQGh9%g7EVKZI{L#O z_HWbAq2>GY{`USU2WIkQcTTa?JrenC02Tnf-7pj8kC8<}bTy|}^Hg7l9S8*3YEGC; zxxRU0P$Gcw(XH9)Fvvn&N|V^ZMEwAivs)W08H9dUzD~5fV4xY>D~;)LIf=i4GQOj; z1N)!MW7(-wDkGB*u=@kxJ<2-avGFtI6aO;j-x+leOiUsxo2a9(1<8gaX1u}GD02YF zV#sga@D-}|tfP5|d1Z2T;_y$n4LRi~$fV;^1;nEJRm`nEN$o$3+Di;M+1oOSD^@`5 zlg1YDmHYk$M28u;H^@H&)SH-<;q>XWBTBPJ)D-nvgPH&YD?G}hd=tC>v0TQ&$qwXf z<0F!phK{>+7|Tw;e=gd;JzB5Mj=3}` z)w=SCdOO|D$1bDAtRLp6xmD}WX1`qgyp zh3{^$)I|S9--5N_@Osc_nJVN=o{(y=PeJq8Wpxz`&%hphBWDq{zO2#~MD7q7a!mD8b=a!iX62$m)NiK0*;C z-GO#XC>cifiH6@7QSQ%*U0FdikymNZ` zI*u-t<`8RNdgW$0s^-BmKdb6%VIM6wk@52sG|^3;g^b;`X^y}G`KGA5%4XeOON#38 zN`v#pxn`YuqB(p&Om#xCBR$iHhh=?1(7Q_TSPN-KWl{{;#^P!s*2NyrbPO-S?bw7~ z{~#ne?9X>19+5in4EqaI2^5qBMq6nh)yWyMNX^{y8A`!rnfIdebTCZd`L=%>1OCKA z4yQcI%bY-;|2c?8EFhe1CHHq|zhmrIs*E|sj&%p(zmyk8cXz0m0OpuTj3NWvoaqRD zVH^yLua&|*!EE^s{QrrJK(k_LVZg>{8|POE(Go^7bWaR*%q;5@`B_wTVi`CgC_wf~ zvU53{WlkC_zO7?XOfQG)`D^|gTx>iou%ND-!WhmAvA}*1C9YnUN36_p=B49sDWonQSXqlDlu`1!N@mTINuCy@`#`3%0Y9*ezG z=Iw;{a8($F_^g^$&63>QLkU}6eqsu(=PxIZi{;nR)k7MB<=j=ttz@Tby|zf{?j7vk zF%+5=yRDQ$r3&%aU#`rbYa>WirfNXhLUjw*iEH%}Ob7aBgFa6Ft;db}9N!*~*EL8t zq4x&Q-y68Q9hJFR9}*HEVM`}Q)2oSg937k;uDgf+#a;1}S(9-%87T)UFyne#7%*8X-n#_9rvC`(l`pgG?exQi&62{WCTkf_ zvB?Y{1#?=`lD+vD&h*=tHzGrLDgT)d;>HLanS3n7U>F)&b)=mmL}HsR%nV>VAs6nb zUOIXY5O}!G4jcBV9vl6Z^;Y}Jyu89PNa8E&Ji6#ZTaQ^y#B?YNVMMCncapks7{O`D zDBZOIumIV$0`ExEPNw9_UvFKb+l!lBt%_Or1P>R{3byi=6Shy<3=Eo@lN4cbNd{F% z3ct$sc2!X!sS9r`jh6O3h`!FPm+g6t2R3M8AD9isTVB^YD4z8=0+!zNgHw&PmOr99 z#=3HEo!9zBq)H`iw)o2#@84}lX&F)&w)*?F_?!%6}K&?}WG}zc}lkMaY)) zrxV0@A-h@FjG>c?S{dPBlS)t-Yor26Rn^+UzSX_38tYq;Oyadm>5swRJdO|z+lgCp z-y_7f|EVCm;_GjMBK+s=Ard`@$6k4TR82>hkUg z2TCU#j~2`UzNDjrz^T&y^M1FL;fVeiR(`~;0YAkUE~DAqF)j8^&h<8!`0*UY|5LcS zo44cYX{~?1od0Kj=1u?hVgS^h-0L+G`kCgd6@l3Y7xrx#;fR3CUTZX}f9N?hU!l@J z!XIRh`@Sm~MqB>~KEfwa@XqN9nt^Cj{nvm=4xrDzhnoiVTP>oK*~gkLVY$o}5{tzC zY`FN$OekBx? zwVs-vNEmtYkxZRl9@dNa1JxxThhCpP(9YO2{S)4=VsdxTr=Rchdp>-K3qp$lzGwH( zEOo2UiV$YTeD;#_*VF0f9w4#IygRkJm_Y{`s zZBVPDZ`=UNs@nLNs9$?X_EcdY9B5FR_I=Rug>LVT{+L}cJDEaf>C22BwA|3;=ag7Va_o~`)VcUR`=+lz#HQJj$U_o4vNphCkN^m_00 z^(Kz=ee^@tCe6{Om(*dsg5>BqT>r#h7r~3o9!6CZV3QQ3lJ$??8INU@Ispc>%$|lz zG;7TPoE^8b=O+JVA^lBRABFz33y@!AKyVO+Y{44W9QM%!QNMh%G*`4)OFEgP4(CI; znYT;v3?|0%^LVNA>KT3{loDo9&yH^|pdQ(vgVh^`?XLInYI?zfV08&VNzFET`k7k+ z)DOTsB4q_th=8ZA^ZiFsA*XX&P$ULI3c_ta69AtKsY!Ow(s!k>=D5=3d`&I(RkR47 zk6|dT_F!ie7`Y$wh<9<=71=+_s54Ah)A&Le6lWu=oW!_sp3Ap(;9?FtKCV}Fl5t^5 z(R{1|cHEpWoB*zOcvxiyG8)r2;Uw28wcNK2ZcI}ZMW5Z}617|;3d0rE>Cil@1Ch+| zspVb15J6YIvB`PM9~+a}AS*CHB=Gsr=@wo_6?VQh_NHV=0!u{|*{t$u5mo#wYKw8b7lO8x&i$`fyN@(2QfaI5|1B zcx{J>xq7*`xV#Qs&Q56kOmDtbpPpC>BXaDZnRZn$w%}N--opdAnYS6qWuqq(e~vyY z08n1}Q^^280A^`Uiv&B}ppOuf{bE02*%%vN5h%X^8ND3V1 zqr?>EtR5Cu93b!uB7^Mqc)n+9Bt}jj@<^{HYZig73#E@+hin9@F|N{=(Hx=~+$FqD zHqBiUI72TV=HlSXQLty0_Zp1{U$M@t6QX(uTHcLWX#8-QkSYj`!_92l9-d$y4v18t z%>XAsrV>%dyg!3KhI&@_I+|UAQ|cLAVxE<W5A z<2&!s*!<)#s+fGH(;n2IfKl(S-!BK>!?jMRHlHPw-q*8bmcnHjrkn@Jr4v(*qfyfl z5^4z_7w+}$etU{6@^^CRRqc8X>UNfi5!Af9wrQ6IU3Cz^~KJ}t&0(94pF21pA@62X4JX?(WXB)yKLn6qR%5k;Eq)@gn5A*G6M1?wi;62G?NwO)Z+Z1KiFeHT zja!}HLKe&PsT}|KIJ8_{pY}tVH^|vLAFgX|`Wj76*9W)N^H~`6L~=4txsFBvtoCtb zP;{Y3K9YFsVAts*X}K(-5jcD8hPLX2;)sV~p9Cp*#F+Uj1a(|uE&_E&$LszzC!^^} zHNi{oPSF?+Mr9di1Zk6TbnS+}@c&_eB9MB}(*E@ijGujF@mJwE;7;;;`LVj_VwP2+@A z!dV8Nf}&Fh2mXphN>OXG7olb`pL@E+APuy5C?)h62|Evu{ECe6=P?b~p{qD^sZ&SB zP`)Re~}`+uEX>$8&YFQ z4qTJhv5gHuwz5tE{Wh4o;Cg=GjL~y_verLHR*m_b=WuQ`>lU^ZEEbzg;q0+Epd1Er zm$Eh^9)pl<(Sah{JTd{jT4M?0(W*VL`$xJky7jJ#aUnEk+N3Wxzu+$*!#_Au?(@fo zh&$T&yJwAX2u9}mM^)Kz;HP0s=~n6nH$xyO6o0#aDJFhHEHnUK*l2 zvBRiJ;x&HkUcLjJG}?%a7eoC{Z7G^Nq+&cj9rObyB=lGW=rGD|jzi15&(^?NP)W-y z!7N7Mea1YTr^{O1c-B3#<6AjGCvFbo|i_Iq&pCNqwwGhne2sEeJj!$Jk-z%La zkzLrZ^_)R(Q9g^Y(=IQpM7 zyjl!2r6s*X#&lFN$C`#_^F~>noQ!dQ;rSkjJ^=^vNA3 zE{(_Tjot2p!)Aa%Q{ddWXT;`AdtQZmLe(cTV0Zn?)~iPmc(bm7@czS(bz|8-^d zb6;JcV~gAInDgV)`Sufw=T8=nZXwuc2)kw9?LiYIr4J5vKP0Dku#}p3z4MQ;z&fVo zy|FT&uTmOP+Om|oAw*XRAE*JEC3*m?JA?w(twG#OS~7?6C!GH)KITHnX@RYd64#PV z2HkKF23qEht*CIbt7^*pE+)N030lm}luHt7Ngy?SP$U#=#ct5;h8Y`g%1juHNY9_9s$psIsKSaN!{COXb`H zJQyS{dBEbVLjD8SN0y#aZ;LWlyDTO~=6SoY5%QlmQu)wWi$0v(#P3NIo1)k$^6rV1>hXK0Hl+gk0I7?} zxUJ}+y#s0H?Yo|> zq3u!ajdaq-iPe>QuNR(-<^u!r5LgVFtNenHX;}@mA^Eb9g^wZpToBR#5)G3v#_o)aEjl>aAr$P0&-e61 z`K)7FHSh+$Lq+PJasHbNN8Z9toz-b_#hDyai#65;1(#C(M-Wp2Fdm!7Iu8;7ASloE zLg}lXm~bW|?2quK$v{4$-QO zcX=iKlNR-P;?B?a=*YmuHb0Sd@z4J1v2}1!-n#6LgsJ9{hTBwRWiip_Clz=WR9_8!tz|c}bI#%3wU{s7^ zP5Y?#9`>UCzt7l>?L1QPbQ9Z8y>|y-cSF#f-hF9)jgy<7G)_fpOO`y=E9o0`# z3~Zru1Qu6ikDu$?B-l(QDY%0uI$3nvl-QaCm21IHHVUm;H|}e5kW@5v`$gBPs^j$H z!4QmTxffr1IZK1!K&))5nq$tSK7AewBr{Jn1)F#jb6SqopCs-CFM6h}EvFL+IM-DxG*O^fXaS0_gcu4zA^@H&&*pD(f zl1*0`vtLjR$n6j~xsdu2usHI}{(PL1=RzuQtx|}Cb|?nRB7jk2OO(JeX$NNdbT0s! zB0XR_xgWt$=`|n$k-0T|F~_1DnnQiT3*6ITg+u_Tdi&{k=IS#*NSxo+M~dy-*vQCJ zEFePiW1Qe0vHc(wV#ado-r|XMLo=jnGy22K`?~V+mEh{EYa1(#Cn2BPN9W71cPD|D z>+IX}>`hoe?y2>7jlM7Y^FNZ-)#^bTr6zZ^PX|(D#o!r8!C;)^tK#dww=(U~l+C&F z%+l6Y?ZN`%dVUSJmntRUpFl0W>aqp-JI;v|Bi^MNUvCKGAD8Erl+%Vmhq0p4SN4%= z6aLE59J$7O2A*VaPc+tV+jp?Jvq7cKDDg!%hM05C>v%hwaXm;8) z162<@?6H~lNpLK&a%c4Jt%cetQn36|nTYCyW(ZFYh*I_=2~s}r5J{b#Yo9hJeohQp z*TdL!mT_E@8e;l|0~D%4U?@TqV>7!;Z?P-4hf8l!3tK^WpD}C>Y6%z9eLc{C}6;*B15f2a6Q40lMW%kn(5u!eO z=k0-W7B4G2d%JFbUEwh`;rdWfdytd1Oa4yPmI1t(;X3Ee2XNV;lSk5C#0-B5D+?da zudHe0SnSUJ6G#v9aKsf?PB^d-Ai{RW+Nk&%xsF?B7 zE5$YQS^Yq^Kg|Az3jB{)lZF(1Ma36FcL5o;lhKMjUHM!W9MB9))Z^ZS=ju)J*vgxC z6V#%}ZSvo*-4C!X#4A8qaO;>#0coErE^Ba@AuImh4^2)V^o$g( zl8W;zl}cG;)p~78Ghf;M5-^0!+p&*ma9P=ovog_n^X1KwP9tZPy$|=hwNwR0{61`d z9#uG9N-b?>(OULv=k-q_3}(K7B01y~r@vDaW9DOx?-x4zbf#utfdr}LuA?vkBREME zY;AwqscT%%E!dhCP{!}H!fv#jkhD#D&nMr!gUO<5taZcPInIf{cWdqK!*-f#X@s@R z&+M7DGh+R)4r#oUo_u-xFQ2Bw3p;*96OCsQDYt5a)d9euWbGRoaa2__W!O2iQyj2k zz+5-DI|d+u;X_Q3M@OU;F!LZQy<6dA`?Ke5p${R?%D#2je9@bUWGamB@tgIE)2s3; zd?lvu-E?a}jKS*(kxir*U!|qA2jYp-=R)_fF>{~P20}RER+5HWV;TJjY*T4RHT|qi z2AwoeRtVr(q?^v&SWQW7viOU2MaG3Sys~A*UT^exuj0PW#Wg=H52#&xSIIX15WQIT z{crclq~);MV{y&lO?5*vy)g+rLN((!@p<5TPF>p{vW0U&r(>6AzQ@9hbGkrX+hoX8 zIXz2y7XSHeU2*7xuoO#>EaO!r(KBF4KwAwU+`AGPuf!r7YJI~ovi@ZVu)tE*XS};Ngd$&bcqberIPPyeE-If@6dG4_#qS}hC z)M4hehk-!eW4&sJDaMk(eBi2RT6{i}YV61BGXQMHj|sz#7q9ZCAfea%kO4Esk`bw& zBEi-yHgvp3UcgVOztt(`GBrinyu-XxQn806ow8N6BvEU zPHy+8|1WU$>;0S3`%&VP6xRH2pQqv{J%?dJmL7u-!#GTCknr z#rbEC8?S@ifVrO9*Jq+?jOR2=v>Mkti_ZV{hiW)#>WYUmy;Z|)aveG$lKrf%K~9fR z6HoI$P&n^lcmj=fit=|_OdfKVSIG4OGn;R=%AdJs>D#Hg|Pqn33? zBZsq2gm%rbctf|zs%5a)jVifF${;4}Tj%BZc5z_2*2#N4EQaEn*efjmt$sC$P3!NG zKDSev<|we0<<9b{$=W@I`JU~#+=97q)|40mjfkLs$IE5H_f1cAIB^7Ml`Lh?_y$`> z>ho&d>N{d^aSQNHC)@XY7=pFA9Rzoqe7O0eif5Kc^#8XAXzD(^VUOw#T)v{?Q@7~3 zeBm(f_Nz*op3BzGy4kk2F))W-oZ^qAkZa|kP(XDv-R8LH_Z3XO%6}yL4ozC$A5(V? zmCs%$2HfBsZc^%sd^`{(QV3TCJ%LiXw*ohUqKkgplIKfCcwViP`J5Hrxi@2ws0InD zh~s-YQxjpr?D`6&tH%#f>GX7}Jt%&L?NcGEDSuVO)FY2gn-b~*5eo$PTm=*1s{yz; z2n7iV$2stfG=x$!4Srsd;N}7SG`f|e27~R*B)H3bjn%`XgdyzU#tqc-nJNVXM?QA9KUDG`q8ILh^%;g;0c}+ivjB6=f zBqWcX5-u(N1^n1i0hI;V=0jcqAFrne*B>4+md`7!jxPBfkvtkTE|F>ilfo78$X$|v zg9;VadA{FF~#!48#-OU=ud0JHd2!qYr?Wd zT$2@@Jrl(M5r-gq*`6&9uZE_|V4}>&Jso!)r3bvbZZ8D$ii6iPXus-}=vXO}D^?hHD_{Ed(%W+zn-#lV| zhq}O!V0BHMI|@lsms5{Esx{HUb%Q75i+RUwAP1kTiwC_^3GXF>N6_Z2vH<>7_ldIK zp-{?}8(5g&vE3Q5Xo^J6NjqzX^72#esr4%x5Ab_~BB*>r$i>*a#j(|_RWjpxQLN6amMn|zYD|9rAfbOJUYMCK`%0)#$3<$Ns16WCiSU1>>m zGoGX3J3x^%;G|^JJM{*?nL(4ehmMW5Zdg8}Zi(&A15m%m>)rwc5~IwA6vnx)f2<@p z=KJ3tWS8yud2jS!UH$yn5c7SDpbty=-9XGXM z|GDh>`5fDH&AKqAZSM6(a=ad+_?YuI%3@@Mdy6HNP4QcUIW8cEJtreEd5h|iG*lHSPw{&jg)r`Y4r3?J|6}H(M??!`GV-bZsBPfw z+_R_Q-Y7dyJKt1l22K1FCPd^0(Kj|8OAv%G=LCW4aas;%zylW0Y$)YG=b*3A#3pi? z0huq-+wiFgs3b_*ny!6n?DDO)jNzRx2EoC5>p5rpwKbN zg)-KY`l)q1ol?m^wvaH}4`bvh0-@!EFw#dO;rd-kQYlbjFgLILS4YzfxXe8?dm4pU zYvf=51655?u7lrKo>(V5x(hibg+Rv}Pgu1gAM@9(t7UO-3(d>bvAlm~48}#yYs)fk z5r!Y$rxgrjJscZNp#IIsNOs#|?yv8_H_99>EbO$+ZKJ#?+iCfOZl^x|&18l}$L$>v zGOU{kep+>Hb2|ln3Eqg;h)AG3p8fZh07+8?IP-MJ{j7YeKRr&n1KZAQ$(EuGJbc@@1D2oPw3;pJSn5uy0Hebj~FJxgMf8(Ax-~Yv^ zD$Y;I%U}G_MyrcW@2*2h87C$(#_tw$*!4X$;c}#>{IpwJv}B@I@OwTr?g!ycx$kqr z$KuLBa7k@7?Rlm9cLL+vKm!>vDqX1BKD4gD(l=vY!IAIhsx(lk1^XQ*IM#pqwY6C?2$~bM5JjJdqoelTd=TU8j$b;)7$O-v$YmPkZZ@+38f&mZj}X?W*h7 z>)xM~&XB9?jjp&SVMS2+eP?)+D#l#>>c2l9*YeU9=6{i{dF`~oDPr5@8Cy-ysHKG) z@SF+NPq)X*{x7oGfTz0cww90C+Lfo+Xuo0q4~cf(H@>A-tJ1kgnbL%x6vGWc9i@0b zvU%Ut?{btaJ2GpmEu)`y*ujInRYItMk)kH`Q?x&Pe_HR->Sk`uVu{{=mfC3SW2p2t zB@1x-s&;(zt<96x<*~%Y9sT_CL_5Of5z92&rq`A|&QQ!t6kFD<0S7#LEUS5KH%!M} zu`}10m?OcnQ(Av6`?NL%`2!CR^8FWjUM@XU0j&`>0pQC3N0ZVW(Z_|WdR^K<7AA>) z5*b<~4Otg6jxjEWqZOVh&ka}be>dhMU(J3%If-7a5cb#a@N-Y&v{c)n&BDQ;) z5(L^D+grj*{QxmM%xm=zR;8zx4vHXzO^?e3=_jz_hh+4va{K$wKkmw{Av-EmX&vuv zGNl2uKXE<#mT~IIWJ2cH^p#uFc~F{| z)NFAyS}VVOeC8(MQgI71oArC=@pvff_h;9_pD6(w*F~$Fd8!RF-jC~W!13$w_pr^@ zxNbSJwHC19D|wms&4u-sy6}HDKZs(jo8I3BP}fbAiY4A%_N*tW+&U}5C3R0u3yKn~w){e5iMkGWT%dn)b6u`}X}mG@8=cxau7!F}^U@~U!%+y8o5E8qEL-W$(Hk%0u)PUd1-zSCfU{Pzq1 z(zCX)A#`b`4>|+SZNJ6QnW zzl2C_$Mu{14TA>Z)a{Q#gGM;^M8$_t(+oY9{bcH6ezs9U2P1N5lz+fm+i8Q(-*(zm z@w?kPS>IJ+{GfAr_@_pDu6nnAdaa1cKh*MkGikXR>e1fmfvbJ*2KG#BlzBqzKQ^%U zO!h|}lLm;KCVz(8&^E>`*RNKcud9wam$+%}8%5{mj&`l1-ib=De7zm~VXkS{Vm}bD z5ckRt?Ospp*duH|(cxjr&D4spJ>Ia$s=mCG^7N}y(B+cFzVNRNpilONV(ixz)5Tvg`+?vVzak;R0rF0{!sz{%bmYTiw5p z`)iPan4PAJG2m%Q&^`pR2~a!~k_9(2zp=b)Vuwr7T+1Zn`=Scp z(N2BY-p4{At9K;By~361G9~uPqh)ghY{tB`=1xn-2O5ni-qpq66uE}oy(%bnr3+Mg?r6mnKS2nSyz?VPw!_m@C(2U#QLkQXjFah*w3-iZc5 zzEq@ns}Z5G8!AZ`oAGa7i3W6k>s@+JbQa12xiY;M>Vx9bo(yB&yQx96k(YMhosEyW z%Ye@FyQ#W-(N$NrOVnfE?O*86OFEQ!J^s(Few!~9@6tzQPlTx(CS(rc0UH$Y?~sMg zGJw?on46O0XxR!qvs9sXk;5UM57%ohUY^crfq(tMadDmP%P>hNMq{% zJv}8U0c_AI1|r7;9p3T5u9ugExg)%C<7>-zZ&5#c6p%GalX{J4gd2__u`UVKGvAju z`Rt9}X`jVG;sfY~d~#b4QPCEloM>zKLCU+MRsyvfv%8#HKX#rJwD;%wKvoppt4V_(NpxGKlD!U zNjOh$2OH3M%FXRT3{Q(3AG20T6&dO;tsAM^5S#xHHqVK0PWzQ<`OT_pPLLciFWzBP zcG|)B5CJV@YEvzc0@~gDi;WgrYDLhhS#$s2vk%naQwSdL-Q}apgZQS(gyNgo80;Sx zwP1Go6ewbu0{?=w!G=qit*f+$Yg^lys@1LE5MH$as^{zV9jdzsmw=@aOp}1;hr({@ zhp7lm)n3Ti`@&970O;ZQ@+rD|>7gzkApBnISF`baNil)xxDD{L4@fBw2r|ek9D(^a zR%`VxF{{yZQElaS;o2*;8b*-&Q!0BS=8Xmj$w3+wu(($&IQ_S)T^t+`yJh*}b~)sQ zSFLB`60iaMrti>7acxE-Jw`6XM>GNeZZ^{UVmi2k~(Y7MI88L*~Am4)F%K^MZ&%a_XA;d0_Bih|E=8(9Y9dZ!}`8P04i#KTFJdkk$SJ8`CKMdWp$s~@!sj7e%85EnP}UAOfBsAgSHlW zU!OM0J`D)|$L(6dkWa?5(+fI2^>FO)yfBS&d!QZ0vdum=Jbp zEc{3aA6j0lYq;Ex+0N;(dGLA;n*vuUs4?9)rce0OjO5Q@zcy7^8~(XSq?l&|kFNgQ z{_cok&uwthsLruu&oxjYFrV44*{Y|8uCo2(_RkQ1jd;Vya>$3@IH)L-)-*Z7WBp#-5iE z0vMehmwX5PmNg-}WJ@}$M&Tk>lF&z1zaj)p+L}%Y-*SUZgo~-EFnsS-ex)&weMzhX zEH1`fdXF4pm<4GE(GhtUX*=B^rvIu8qE5ig=`PlqU!*{RO0P%^YYV+%2 zJf#_KBsCcpZkf~=S-o?~YwS{BC5Y z1=;I#d^1X;-1Y-Kj6Op?W-j};X0Cf20_N)d_Hy2dp+MY8?|gYLBZj0qYaSiVo&xIFDzULxtKu=oeTfRUlASY6kB$}jP4URj&H0?SU99eAMc3BdhVvSi&dz1AGK5x;a? zw*i+%m+i$#f4_yzAjB*ljNnXsJcGk_54c7bqFPSZ|D{RuHq5_lH~6hc#u7Q%j>_?D z#9cX1rNCS~hCGlok(u8B%5c5{1_meIg89~Z^z|EsmAH}-JBXZd{kNdyR!rF&D-;x$ zth|)CmOG{DNUmE01PP>Au!r*i*N%p1C1`IjqJ=X zxTKZ~9@=8{Dc(8P=34;YS0Crb>S=^d{2b)lK8RfAe_7p8>J`?Wo@4epSc~>&Rn_b; zZi?nQ(HQp{B*&qQx1R_0d=c7mwypP{-=AD^nYNwTfpTTL3TW3fSN@k!1Kpsy+pN0o z3+@-CuygV z2La`%TqV$EHp;o!p9tf)m5a;T$X;m+(n4I`+?}un-mlkV51sVk32n~R6=U?nSFx+I zVKp2Ls{5WH^Z6{NGryaAYZk6cR*eXJR+sqoSym~6-Tf6ujME0!CVsf?we%54Gsyo` z8u3p}Q?4iG<83>4&8CYvN1R5dbr|!4sE&$KlPt;S9R&kGrFd{RWX}ylIkGPIPC2{f zlyM5bqk<3JzsD$Bk{+qL3L;<$K$D0ec@*6YV>|@QSYj|fG~Eg$R|}mJ8(wOyTNhgh zV-Ap)m(b1~-pa4f*oG4n+@STTa)UDOOxHpK-j@ilks@E0U}uKpLbt*ua9yBu0M-v} zKS|1kxO3y4(o`JvFJAHN4A&zvd|(e;KgOB@z-w2PzDoeVMG{hA+Tjn#!U^zI-L3cXF!y~s+17%avYYr{n*$hn1tKip={gWn z4XGft7kx^=*zibeMi{xyS|!H`uvyN+b@W}=ei+gVt3G2SK-F=(AX?OV#(gSg{0{*t zKY9XJxsM!iC%IqxIFm4Ku{LF+Yqz+t5Tiwtzr=(piBOhBC1fQAxu>qs;d)pPhm29=2ZxeMKsH)MF8arf1yDfmv>SG-m;Zz3BmVyr z&x1giwzqyHbBc!j6?VF~-v|ReYSTM1jp1J)aAJ-s7pQ0Y3-j4{9~6W>J*8WDr^?Yh z%zJEKP)HW^}pgQmL${Wi=wB5J5Gt|)L4(>>PQs0GiMFCvr z9SXVqKs(vgj#8}tbeXU$y7;ZjPtpBh2Qvc&XU4cJ>7)`$G~=J7vXO3>4n@(AiSBOy z3xX85uegqndrXmb<9;Mw^X5B^17U-c!sCZW-1t(2ZAFU1N_DK#)o=`m5cgj`cmyN# z$lV5vGX*#J^I50q>I(0_AZ}$5>e^8T3Rb*hg@pGG+O8Kn!-wZMy}AORnDN@24Fv_} z*Yau|W*YWDroS*58TWCai_cL!%rdk7%~5=C+jI{R_68Paj_1v?p4nR@SR_d4%GMsr zlPfzA4p0L&2W4kWNdDGO4$9v1OwNWT^6>5UB3`F7iURyxf8Gp zitu9WvD~YQ0opFy0lM{q;RZUxYlIVh<;ekTt*Zc=&zzYvDzBE6Dd$h~Ctt~CRehtu zmVFB&9gtUjDrOk>yw8%ivRwDr$-V&Jjnm^kUgqnyH>_YjHeCKqMHg8o(8%{KCM>x6 zVKrZ9Af|UjI$$T`5ycxLG?hH=c<**Lcs-3_e$n%$9_2-YGUYcczmtP_cm#i@j?$aY z{pH1P4?y+pHv?Yc?P^`z`D{v(45FGf0bYge_KX1VjI|C;v47hDNlZ)Ot{#q~8rUJ4 zhdBNxWNQU%?!SBIc2?P0r4zL1Ajv2vHP40ncOMwuR_dn~jC52cCGfhB3k@ zuCGy)i;@ZRS8qe7sj8L>xH6G&B7;10G?XlKPBr!o)GMy=}mQ#h$Yh&*eT`M3>3gzqJ8l_+( zTTa&cdtbl{BAe6eww{aipZ8-;K65mVcDurd#z%D9Vv`FL zT_73lk1*7Wn3zn&s8E_mX@t~wV?Xf^G&lT?BEivoI~EL#9p^QPrkfH8l$ym|jRcrp z?xCT}0s=dtyHFajhZ#F9)-0^(@>i;+tXtCKSt9x`M-wvAnTcCwx2nUjl9eOE{b3*N zYOJB~VXRQMl|GI887TRzXVTOdO=E9qm;8e&B?8mC>L;<9=gdN)6HV>KazhHvv$0(_ zLPU-#@Cg}a>WuO*R+8}P2NAvkY}U!GsZiy6jlv8tpP#aEUm;TD99OtIS>zmGc2C2k zJ8>$732y%WXSY)>m4k+hJD{V^pM<`dLGHI}R1*eIbxf<5jZ4@9C|^M@uZ<&)5M$gV zuSuRNcP7z$DBK0t2)6*EyDF%iQg8OruwzsTx6PQ3t>;c4*A4o zIS2%)$z+g?BCD+QznTW@MS7CBW6%m@lw&}PzZ(V=5_>caP{E$h9ME6VB}a=wCul!c zE!i#Y+F7u1nF$CCj0?Obj#@gB*&Pqy5Cb+$Y()<4K$?wWXACZ^Igh}nSYb_e2T8hw zLV@XI_TLt--zeuIIug86>m^V``g^LHCLRb@rWNT>A2m9jIuoZWg z^mU=kMUz_uoYh^;E2k-U(>M;Wkiux^DtBT@%4(!3qd!$O{1P>F)3Y2zJQQciIH6-{ zOeoksGDS%m2bI<#n=jYH=-jJ*?TzxiRBU7G9;0;H3)kOk?_O??(OhGB z-|{+zNhRu_!3Y?y`!#q;la$kUTlc!RG*;XDlYDf`#!H0emQyrkf;MTmP|dZUiq`aE zWo!Teoai4`B5G!0T8Rb5@f^{t6ZV@t9tI`WZ}eRcj6;$flvHRkQSQsR#8}zR1#x%= z=|^th)@42EOAX#;e9pDfEdRwsruIK>Mio%tleAVBK&`kTnPRHX)q^DEU>z9$#ye5&)YVuHjJ zd`N7d2uW(Sp;CEljND_cX1}wUygm^OAq^pk>0dzXd*=I94&n!gAOx@|RRouaB~y+QhVT)qEf8br{pU_Ocq8D9 z_&~Q5fFqEfL;*oXk%Yo!e;cmT5MHU<_o;<+c)+nAdsqFH;h4y2LlN=*cZb)|u z%>{RQ(4o&)f<4-E{c<>}hhOl$zvzf zvzB9M>F%;m#(0lh4;(vV33o(i9%GeqlYQfb2gd%*$E-i#WRq3Ms0aR4Ua7MfrRv3{aJ2 zIfeYk94{v_OtZpx^NZOX`PuMbhk8>d4z`F(%MK9V)){F=4{#^Hzwpm9gTR%p94?FR z1|*AFq5{Y^Wb6%M6;%SZTXsm)Bu2-3^DAY`EI&DZ=rBXoAaZPM~oIi($~Z#H)yqXxU>4z}}~a zg(3s(Yq(!;k$jV*{q-pLm_O5TJeWg3bBUk2K`EQ;M#BKJ&&N>rL>T7!Kbm6;3qpK_G~_l z2v!d|am#V;yg3s&%(Px>`JyV`c0XQCjoHe67g^S{W>Uihd%&l62zNox{}L=?d@}Ry z`a1Dk9%}h{3BmyWVqZzVN{>0fei(SX@JyveEu;(X?5ur3WPiAb?8rxnzj==T7f@%h z8{qxHTy*Z{18f}ls(L~VbQ1_9OJB3CR~Z;VC;-<0Qj(pCQR0|~i+D#SMeJ=P)a<37i%}svF zktMr?`-LpaI=T*QE=LP`$ysl$koH!C)k_=NQB5$e5zH^RGk6PB3 zzX4NVP2FGJ%5X0U36 zhn8?y_@rS5iG{1Q(<1rjd`({z4@KNrM;mh1&Us2F3sPvX_qJbNcFsL+-^BGn>SuaK z_ZPm;#7ITazYGA?)lhK@KuBXoe@Efp5YFOQ*JZkZS_B{FH>s8q*dMEz@H8+^=Cq=W zU}BwZF>MTfHj5*ue3{^ayTR#`_7?wDVm@D6E0;V%4?KdZztlkYCtis<96)lbR z`or(OMoVF}a@{!$eHa7WO`qzFa%x0yOe3o9yxe;>;PBL>|JG1yYX^?J>h0(QoUWd2 zv??#vPrMS8r_w#t>H-|{!w}&&ko88mxy%3=&IvNZ=i+Y5e>HnM9OPgFNJqm?=gPky znJ1@S-<3186Q`Z9dZ-ME5BEWTlyWmK4K{DwOKVFIzTJ=M=?oCQIuGoLL4|K{G6#x5 zOKA}a3kkLVuT+JZ;>l%59eEI%r#=~I3>ym9_YvlOQqbXB)cMyK=6g@=ZnwV*QGR=> z!HtAu-WXV>+Cvx#5kv1i$!+T}Omv1%y#20ngcgH>bM|&qRh@}Jn8Eh1<38m1*gCty zN28q+9Stbfq5&+k?<4zk!B3@i#CopD`@CxTC7CSeJD!E|AKf7LwXTQ;TsnqkrG=3*WdZp{vzVzZaA4uRJpZb$B<4O6$A7&XN=+8YSacej z8)Nwkh8Q%JxiMHmeXo6x)4#ZeNJ5qBixh#!VtbSq`#zD>m;BwQp=icTeEx~_gK2Qi zOo!8C3478p|3P20lz_%VH<^(v6JqcB7t1M$$%z$}K!zQ3zhYEOvcVwlXu-i^Rrr)@ z)M#Kl5Zgt>)+#v6^CW3zH0g>5Y>MoA%1fF!mfW6WvzCa;_Eh)yRa|y}>+Y`y@BMdC z@xk1f#X4kny0gvvG;T2|c&xP#0&unNN+uk+oY5_f6c0RCz& z(A!@;{fc96NVb@`USJ|A`fM$~K>4spPEn~fa4iUZ6yx`mK;|uT7{JB`B_l5m|Ebyc zj3J8f#Exkh$sR2x&@Bo<4k|K(uvbm1-EH*$9~NYFhPu}C>2j_)4YJZjWP#o`CxQwB zFH3Apb_C|fZ)rbn4m%4S{r7?__|;U^^M~Y9RU6rgKFdJwE;7#Lxo}x`=V>)L>dkMxe~qqRjg=ysHy2(tdK%8$Ct(0wjwb#XU>d%cABC`qc(q5 zssol?^$$j|-({>NWc~#_67%O%TTjQ(d`*r#L(N1Vjn4xMFp(hx`DbU#HN*Rrp-%!T zg_!A-DD0sQf$=vz1UpBbRSA@hiXB&tYR;rKffal zQmkP^1HlbL%7XOKV%N9)H;tIl+&2TFKEz`@QK-G=lHW!W8N&5)ofWqGtRZ7FZhgIm zM1dAi3wyh7&Ou@U$7N*nhM~`xi_ywg0Um<~)d(du{JWqEfhP&IiZll@8AF=X6h!WO zN_|eC+%R{=JzO{dJF(%M=!sluD{I2p^QUGy-7OwwVd^U}rwGG*0u3C@!VA?0_HBJEq%F`<}5XOG{)!{Mg%b-Mja0+FuFEPyZi?eZ`Qeys46Yq1kNB&thAl;vaPse}0AN(a@}Qvz$l zue;A?pN++F{yW)R~m#g-VuR&IPXu(osj z=$)ORlvOW*$0P06@ff8o{N8cwg6Jl^0b(2q=#>{K1-j^s;(;cNPbLU6cP;Zw>bAaT zEu`n<@59aP>Zf6T9~)d+p?W7aBVygU!)`l-4lA@=tR8h)_*j%zB>RfOPD0JRHC*(%-+;gA21viOKP?0rsSi7H+R&047Xa;=Vbf8nqvBj zvPjrCYF=)j`XVg<6ube+)x*Lvbi-xIzj^ zGseY1Rcq3S&lNyF;B1!Re8O-;7nmMaoL8?brwfl20Uu5iHPkMY8Ftv+5MrhMa(S+>+wW=H>b3#nO*F3DGUCld06C564 zM-ex!pJ`0nYHda_I#q6ypX%9P+Wu+j7(%M77I5e5G-sLuw*yfX~a%`#NX zyi@a#e+oy9rg-%DoP~EnIh|V(6oqG~_kCT*_Wx3j%w|o^5l4bjoX{#fw@Yee;ixdY zY>7N+)dDHi$X|3R24G_iDoC0(taWdAZPQAU<&{JS&=}8d}ZwH;2nkrlo5T@B%)p#6Y zQaU>AiI3>d*YmsXA${O0h%ib#&=**KMaxRCa`Wq@-lst7i0)x53DbWZ7R@JBl>Y*@ zjsQ#4CBkyosMotDD?XN7KY&ZK`ObAhHX%aTB9UHd30d@#f2iEs9V-YO8*#;cPek39 z2r=9EWWfbN`M{Z`4{H>%hcDggX+xh@^6%fAZ-xbC8Y2|?81!n{BBBp3qy0%{{FGm# z7c7z}Y@yl!T#m}v!6H9XO#6n@A^vw7Dh`Tbvj{XWLAMRov^8&tm^fivg>&5IBDsQIb^2C}WFC%kZXo3+t|E z*j`eTahutPj2CfvB>HINn({q-(cEcUBS^os*V9>@2uPw3rb$ zNs4{no5mOlo8*16^DsS%Q{Z_5mA9S@)py;Zu}_Wh#?bh_7Hl*_*-7T;HPv-9mx$(d zES>K_>2@ZVrx z(gm_7c*o1D3ehS9YO9?IDPUl<`lf4Nge(VetboS*)KF^JKb_iPt8AXUGptH}L=8g6 z3j3@<_Vc*m25Vy-#8FM|B7$KFH+K~i3I((GK3@o@D_v(T3nd6S&tT`vh!c?;e2fur#h zURE7nq&M$x_{cto?$lE(sLK)@qb*z^ZoQTf-l0W=p z&Y%sC{aPS9lIM-a2xUm-9P-DdGrB6EDKAq|R9Px$OuTGHsT>r^96#tJs>wf8Bs+vg z?5%=!(tk^Uk$<-rNX{p;Wx*}ck2O?HD*7U8coTzA9vjc{`WvC(EX)nN3KrviA1j(O zkD=gdMYV4jMk6;x02{{2cvr0+YsEr3+k!}@hiXq;B_U(ddtQBUcbF4YXf%qB;rhrr zufT6R0uilH4Mmdb!VRtBg_^X~gPw#gXK_39l$p8J-`GQi2s`oJM&mNM9gv14MM+T5 z0$5{#&JB%uN8P=2tf>5q_A*4fwr;TKPf+xxS@jez1x9z-T_oql>PgXE$r+?nFRMK# zNyzE{&*)j=>%v+O7o_ka$zsW#FUHP9VPX!x<;>t=G@M{_NQN6@N;!QlCWYY)28lUZ zjdpciGEn(d&aM{b77?KYU#TF&9!`{4j#rSRINbkRi1)?nr=`WyWY_0Uk-^RbMGhLC z;1P0tluI#^6xm`Nx4mz3g7IzsjHW?&qZ2g0W=-6Ei4&bddnf;3V2KABJ+5{PjNnt~ zUcE4)_*S+#AaV;^EmljZ$LCmvW+K0~(;>7<7S+tev=j0x7uKgL#Y8Z8cR{(pwehzWz zLi326)1qycqq^7b+KsIGu{n!~p`MPMlZ1+S=O5}NbH+Ks#o~(4=~*!G9)1JM&mfU2 zB_zc#>l=|v93&y*>u%`zyF4<2gfB^8`}rJe)W}axbxT7OanUQV%n7Sdwuk?ZfeM=- z3~H}epQjIZzO#8}l!)-B>9~GiHpGYa*X*^3F}yhcfC>G7h>=u%wcZzgqwqsVML#jM zVkl9d#6u$mUS}BkoD{VfS8oY@U}BIl;22Ho>gWp?0;Qzo?FiG|LJmT;jEX+XK(v@q zWlKj13ex(pc#%N%=}Wtp`JK@Yr=5M7$Fr9>vy*$fxEAN zrn`EN8_xqpQcW{96RJ#jJb3-{9db>ZaE4;;XUhb>y(@LGCN!sWe}giFs;i#$WLD&# zhZ*s=Y*T9JP?TdF6d(Go>ZdXg%4&}N^)lWRCc(; zW7A4z37GAE8_;_aD|6CyV-wZqok-kox#$MdO!Tkr8~YC!sl!IG-B2i=C<|@Bf9Du2 z#59q}CEgdYW~!?{0j33}doR`Zq+{7!NZe3CiomaZA|U}0^x(d@Ozcu}9+W#t%DcUI zlt{aSU9;mP?rok{k!VIL_EG3^IIRB;T;G{RA50?CkHl5m$vB{t1_`rlgj2t;+Cm@n z`F*k$VwB=A94<@va3v88nakM8+gD z>z=c0+403Sp@y0bgte|vwPNM ziEe}8=^iXm&4!`E>K|hMR%Dw6#Ab#eXezQ`eoXW(gAoG}&p(LKLbA_wdH+%O$PmBP z*IOjM^Ss9bax@T1rvfea8Ld{0T>#T{yQAcA+)Iqk(!%l&IX1Vj1g~M` z6JKV6Fp82fOX5={hZ4|7$VnfqeEN#wR%fdiz?FdXHI>64-+0j<|EPX39n+!d?G@ku zC2rWy6XFfuC_eW4@ZOz)GsLFxXw*eN;Sf~oTBv?44MG>eo5{xJ?A1s*2we;WZ;I_9P9YtT97a+opXu;MvFv+?89-s%Sc;O|%pZL+pUTfRdclRN z91Lb-C^K+<-z=2zg1~EPDfDrE_vHU9JJu0 zUNTIdHB(N=(shZsCT23&v?*B}Osl1qpYUvKni^(vQYQ`X=SMfa`|01ah9QSkD3oFU zmxBT7*1!r7^dzm5jr-k&pE!>B%MxzJS=|J@>qX*gwi2AiujP*FY;RAi z7+$+@S@{rjd2(y&eixEM!y2T??M8P<#t>=M5L8) zLCfuxrQoW22r~&uK35F>6)SJ6Rxoxo>YoORD>z%~0J!^$e@C21ux>Jyzn?3YD`bx; z-Y;V#{XAm?YS!^fFZ$d6Cw^cb7?#NvOL*;%9meJ%{#az0e$l#~EBD;G3!a8gc5yM2 z*JIG)e4xSjWlNNJ5PSJ4bu}`#o?GdSyQGC53gox%uotKcs9v|U=>HK`m7)?Hyo8w0 z6JS%#2bS(|q5lm`4wrI5qM|vTH$gjN=+$cg16S1dMKr(bDgHGOeasH3V%-l>ev=oGnrd#JdN<6dg-U@v~${zW7CSUm4U zz~QPINWEnmjI?_ z8@TZ9>Yi@pL;|IllkhBd0APh#!wxtzM{vUBM2@Wft6cGbbUXDLY0iG2haHWNk49y# zhf0q|MJqDP?9c4qzr04J+VkgiJX<b9RTY1%D5#Djkj!h03?DOOglpC$y@LQEe9r1=y#FV(F1Tn z;m*kIC}Tf|Z={(sOwSvk;ZBFLU`J2FS^(^f_$3|#BLL*{kqZR%-Gv=2!Y^Wp8wQ`@ z_ri5RyXH>-5RB*goqxWEFF?{)_N74qz?eKRoad$I&)s$-?h*z?IacxAfpp2Xq{-v_ z903njF2JhCUXPNmi0U`YV`dm#&-FZlXQtDzP2K{;hm7!JMDOt3elX(BekZr+B>uTr z-%){|JkR}~t*vOQu;?`)Je9pHm=YE8%8$k!9*s&AjtwxEXQ?V?;0vHUu+$@%c7)iI zx8R9H^hCjhbj=fu2Y56pb3Kr%aetyKJ!eC1-&sA5d)0@GAG-r`!WTta&L+Cw)bY=G zcm9t?#jDQdI@<=WJFhQzt@EQ%p)!nAm^w0|k19tYIX`M$$NoS2y?&!Y-mg5KFZ-2) z{58?VexN&w>>ekr`!kCKF&h$^N{>Cp%1vM+Uv$*d}B27E?7aEhpCid??Zn1!HOGfc^dkkB$Xzp;qr9&knORwqse(BvQ{b%#(%anRU)b3TAqw zidD~V11I^52=5pjP~TA*$XA__7m2?r`ClVh6jJxgrM{|QL)=?4c+|hr3xDM%u)~q7 z7GXdnKJd_Uy?!(*6s8&}WMx-91y=nvd4J(3@$TqjHs3!u--i%EEFyKhw?{ z@*WqQ*?!K0*EkGjuVMeC&UWkC=B*13!p(8sXfH;NBPRK(grG~iC?Zb|K++b}vR8ml z+L-8mGUOSl{KM*&JdVRaUf}RYkDT>e3NsL$BgE35K;;+&#L4YeI*7sjt2zp}iRbyR zIMs-snvoNh6D+6Wn)fxoK{n%+@6o7?O8IQAm+lUVu4JwAvR_q>1Z02b02Ms^99Lp) zqO3yzY0ZfMHvWnp@RD$G=?WHt^)IebA@SYFmWujNCe%Cku|cnU>^WD&OY^$lf6d{G zXeb*AJ~IgJ(A6~8kw=cbmm*w73)g2ofd~L`tOE@UKB67CS)T`f063m`FLtmwVDK>; zh$FLF^*pF{Wmz6hV*y)7XBzNuz;75NBmhxw#H?2=5P5ZjzeoV{>KGaUAQp6k2B2$@ za091z7SQiU7-!_Z4l^E!yl9BWFIo}jJX~`x4N&)S&8zT3&5nyav7HGU;KsaL2ku#? zP>hFX({h&FK^Kk?hDF5ug+}$7XGUFthnQ_^ZjX}*eh8z)8BrW6G5nzkclL)ZTl&Eh z9_a|6ijRKAUB9D(|8C5L97s6SJNHrX>mGZ~74g!%?)P7F_#zt0MuN`_f;)6I&2{9F zWACL1m(jxYXjG&kY%oz%FC7Ow9Pk?kaRDIejhH98?FktEA_2^0JOLn{(qUZ5u;Av1 z))rt`U2bS9r|0s~mW(!K34R*#RJpn?uthO^x~Z~Pdfac=4<>5P-KO-$fa1Ah;~^Z| z8yQOUCeL99(()UU0rB395FUecmms*xQ-pyYGj&wGCG06!z%e^6gcMIxI#m*N9Y=iP zDrRh#*KbrJ7CEypO`(>>69Uw=<0T6;(C(e^a3m$Y?!S+4L=dgy#{dxL(6jM@VP-_H z?%3}iVG8C=0737=;Q&(kRR))%5+Kix=UNWeB->7uXLWD{+ev>zCoA=XSM{qbND-gz z{mobXGhk^*gip?KtY5%Q4E*A@C|1`q%}Jo4dJg9`A7c1L;ogSC&oXeFEo;@?&da%O zW8gIGydSFHxPWxr!OYbCkzm&Gw!K^J2e3J*rpKVXLk58>@<1H;Q+bL?Yv$862P{EA z9!#jt#|l{KXO?Xll!iQ2-xr1wki|kb$5m;Y$KrtEjDObsKZXVm)KyEK#{d8T07*qo IM6N<$f>J`Ky8r+H diff --git a/packages/pds/tests/sample-img/hd-key.jpg b/packages/pds/tests/sample-img/hd-key.jpg deleted file mode 100644 index cd0a4a79a1259ab01454d47d1ba9ac49255bab96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1317339 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%0A$|X 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 z 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