Commit c609ecd
chore: move
* first
* moved exporting to job, sending email notification on completion, needs scheduled command/cron
* prepare for first release
* added command and readme
* Update for beta 15 (#3)
* Rename bokts to blomstras
* Update for beta 15
- Translate emails
- Register notification type so emails are sent
- Use ServiceProvider extender instead of our own
- Add ExportSerializer for notifications
- Mithril 2 fixes
* Request erasure controller (#13)
* Update composer meta
* Add logo.svg
* Create first step deletion request controller, table migration, blueprint, model
* Move logic to controller, rename delete to erasure
* Update blueprint ref
* Line endings
* Create blade for confirm with token
* Set processedBy as relation
* Add placeholder for confirm route
* Another line end
* Use new classname for controller
* Update translation key
* Remove dispatcher
* Update route name and path
* Reguard
* Add processedBy model relationship
* Add build action
* Bundled output for commit c7d6075 [skip ci]
* Users can request erasure (#14)
* Basic erasure request system
* Login user, show alert on erasure request confirmation
* Improve confirmation/status UI
* Allow cancelling a current erasure request
Only the user who made the request can cancel it. They will be notified via email to create a paper record.
* Ensure notifications always sent
If a user requests, cancels, and immediately requests again, the second request confirmation email won't be sent, as the ID will be the same, so NotificationSyncer will think it's the same notification. By logging the timestamp, we avoid this.
* No alert necessary for confirming erasure requests
* Apply fixes from StyleCI
* Bundled output for commit 3d7d5fe [skip ci]
* Admins can act on erasure requests (#15)
* Basic erasure request system
* Login user, show alert on erasure request confirmation
* Improve confirmation/status UI
* Allow cancelling a current erasure request
Only the user who made the request can cancel it. They will be notified via email to create a paper record.
* Ensure notifications always sent
If a user requests, cancels, and immediately requests again, the second request confirmation email won't be sent, as the ID will be the same, so NotificationSyncer will think it's the same notification. By logging the timestamp, we avoid this.
* Add settings and permissions
* Admins can process requests
* Apply fixes from StyleCI
Co-authored-by: Ian Morland <[email protected]>
* Bundled output for commit 246f249 [skip ci]
* Fix missing semicolon
* Apply fixes from StyleCI
* npm audit fix
* Update permission translation & key
* WIP - Create ErasureJob
* Apply fixes from StyleCI
* remove commented line
* remove nickname
* Remove unset
* Remove console.log
* npm audit fix
* Flarum 1.0
* Bundled output for commit bbb1d8d
Includes transpiled JS/TS.
[skip ci]
* WIP - Create ErasureJob
* Apply fixes from StyleCI
* remove commented line
* remove nickname
* Remove unset
* npm audit fix
* Apply fixes from StyleCI
* fix readme
* wip
* Apply fixes from StyleCI
* remove log in logic, verify actor vs user
* chore: cleaning up and php 8.1 compat
* Apply fixes from StyleCI
* Bundled output for commit 16f202c
Includes transpiled JS/TS.
[skip ci]
* chore: remove dep for ext-zip, fix zip generation
* chore(wip): adding extensibility for anonymization and deletion
* Apply fixes from StyleCI
* feat: implement delete and anonymize in erase request job
* Apply fixes from StyleCI
* feat: added events
* Apply fixes from StyleCI
* feat: add scheduled command for erase requests deletion
* Apply fixes from StyleCI
* chore: clean up erasure job and create new data types
* Apply fixes from StyleCI
* chore: simplify query to update ip address
* fix: constraint blocks deletion
* chore: working towards completion
- implement erasure completed email
- add export for tokens
- add export for user
- add ability to ignore user db columns from export
* Apply fixes from StyleCI
* Update and rename build.yml to frontend.yml
* Update package.json
* lock
* Bundled output for commit 2a60003
Includes transpiled JS/TS, and Typescript declaration files (typings).
[skip ci]
* fix: two bugs grexxl found, controllers
* fix: using addFile instead of string, fixes #18;
* chore: repo maintenance (#25)
* chore: add workflows
* chore: bump js deps, format
* chore: as we are using webpack 5, we need a min of core 1.2
* Apply fixes from StyleCI
---------
Co-authored-by: StyleCI Bot <[email protected]>
* Bundled output for commit d45abeb
Includes transpiled JS/TS, and Typescript declaration files (typings).
[skip ci]
* chore: update package name name in README (#26)
* chore: add workflows
* chore: bump js deps, format
* chore: as we are using webpack 5, we need a min of core 1.2
* Apply fixes from StyleCI
* chore: update readme (correct package name)
---------
Co-authored-by: StyleCI Bot <[email protected]>
* chore: use default settings extender rather than deprecated migration
* feat: working data export (#27)
* feat: working data export
* fix: erase console command not registered #24
* add destory console cmd to schedule
* Bundled output for commit a87e2b2
Includes transpiled JS/TS, and Typescript declaration files (typings).
[skip ci]
* chore: minor translation tweak
* feat: data exporter initial tests (#28)
* feat: data exporter initial tests
* Apply fixes from StyleCI
* chore: enable backend testing
* use the 2.x test backend, as we are targetting php8+
---------
Co-authored-by: StyleCI Bot <[email protected]>
* fix: file already exists 500 error
* fix: Email not send after erasure
* chore: light cleanup and refactor
* Apply fixes from StyleCI
* improve user settings UI (#29)
* Bundled output for commit 4beddeb
Includes transpiled JS/TS, and Typescript declaration files (typings).
[skip ci]
* chore: typings
* Apply fixes from StyleCI
* Bundled output for commit 5a4ad04
Includes transpiled JS/TS, and Typescript declaration files (typings).
[skip ci]
* chore: update extender example, use pretty print in exports
* chore: install whilst in beta example
* feat: oauth users may request erasure also
* Bundled output for commit d5a562d
Includes transpiled JS/TS, and Typescript declaration files (typings).
[skip ci]
* fix: export user uploaded avatar from filesystem
* feat: organize posts and tokens in folders
* fix: update tokens test to new path
* Apply fixes from StyleCI
* feat: include discussion title in exported data
* allow overloading the constructor
* feat: include forum info file in export
* Apply fixes from StyleCI
* test forum attrs, restrict post exports to commentposts only
* Apply fixes from StyleCI
* chore: tests for UserData extender
* Apply fixes from StyleCI
* feat: allow specifying which queue to push gdpr jobs on to
* Apply fixes from StyleCI
* chore: document specifying queue name
* fix: constructor params not passed
* Apply fixes from StyleCI
* feat: request erasure test
* Apply fixes from StyleCI
* feat: confirm erasure tests
* Apply fixes from StyleCI
* chore: prep frontend for refactor
* Bundled output for commit 25ee01a
Includes transpiled JS/TS, and Typescript declaration files (typings).
[skip ci]
* feat: display user entered reason during erasure flow
* Bundled output for commit 94a2ca0
Includes transpiled JS/TS, and Typescript declaration files (typings).
[skip ci]
* chore: add erasure tests (#30)
* chore: add erasure tests, deletion working erasure still not
* Apply fixes from StyleCI
* fix: anonymiztion mode
* feat: utility function to get the table columns for a model
* feat: ensure api does not allow erasure methods which are disabled
* Apply fixes from StyleCI
---------
Co-authored-by: StyleCI Bot <[email protected]>
* dont delete discussion on erasure, let the cascade handle it. Shorten random username
* feat: eye-friendly erasure usernames
* Apply fixes from StyleCI
* fix: show wrong password instead of not authorized
* Apply fixes from StyleCI
* chore: add test for flarum/nicknames and fof/user-bio anonymization
* ensure user groups are removed
* Apply fixes from StyleCI
* chore: cancel erasure tests
* Apply fixes from StyleCI
* chore: use constants for status and mode
* feat: export data on behalf of user (#31)
* chore: use mode constant for default mode
* feat: admin may generate exports on behalf of users
* Apply fixes from StyleCI
* chore: format
* add frontend to request export data for others, replace delete user action with gdpr version
* Apply fixes from StyleCI
* fix: remove route test
---------
Co-authored-by: StyleCI Bot <[email protected]>
* Bundled output for commit 5f1c189
Includes transpiled JS/TS, and Typescript declaration files (typings).
[skip ci]
* chore: update readme with latest extender information
* fix: anonymous username contained invalid char
* use model change functions to ensure events are fired
* fix: process erasure in anon mode not working
* fix: pass the mode correctly
* Apply fixes from StyleCI
* Bundled output for commit db550f4
Includes transpiled JS/TS, and Typescript declaration files (typings).
[skip ci]
* fix: deletion mode via confirmed request
* Apply fixes from StyleCI
* fix: empty notification remains after export is destroyed
* Apply fixes from StyleCI
* fix: manual erasure
* Apply fixes from StyleCI
* Bundled output for commit 1b53d07
Includes transpiled JS/TS, and Typescript declaration files (typings).
[skip ci]
* fix: console error when downloading export file from alert notification
* Bundled output for commit a081768
Includes transpiled JS/TS, and Typescript declaration files (typings).
[skip ci]
* add foreign key to erasure table
* deletion mode disabled by default
* show usercard in process erasure modal
* Apply fixes from StyleCI
* Bundled output for commit 3e3503c
Includes transpiled JS/TS, and Typescript declaration files (typings).
[skip ci]
* feat: show user avatar on data export modal
* Bundled output for commit 958f8a1
Includes transpiled JS/TS, and Typescript declaration files (typings).
[skip ci]
* chore: format
* Bundled output for commit ccf1a3f
Includes transpiled JS/TS, and Typescript declaration files (typings).
[skip ci]
* chore: add screenshot to readme
* chore: bump core req, use revised extenders
* chore: enable phpstan (#32)
* chore: enable phpstan
* fix: phpstan errors
* remove no actor check, as it was never called anyway
* store exports with meaningful filename, improve exists test
* Apply fixes from StyleCI
* fix: use unicode characters rather then encoding them
* expand unit test of Type
* Apply fixes from StyleCI
* fix: process erasure not respecting method settings
* chore: DataProcessor unit tests
* Apply fixes from StyleCI
* Distinguish between erasure modes for final confirmation email
* Apply fixes from StyleCI
* chore: show conditional extender usage example, add extension requirements
* tweak help text for erasure modes
* feat: gdpr admin info (#33)
* npm audit fix
* refactor DataProcessor, create ListDataTypes controller
* Apply fixes from StyleCI
* format js
* ensure Data\User::class is always the last item to be processed
* feat: gdpr admin page
* Apply fixes from StyleCI
---------
Co-authored-by: StyleCI Bot <[email protected]>
* Bundled output for commit 2c49695
Includes transpiled JS/TS, and Typescript declaration files (typings).
[skip ci]
* chore: extract filesystem ops to StorageManager
* Apply fixes from StyleCI
* feat: translatable action descriptions, zipmanager, refactoring (#34)
* feat: translatable action descriptions, zipmanager, refactoring
* Apply fixes from StyleCI
* return type is now string
* feat: allow setting a custom anonymization username
* translation
* link between the two gdpr pages
* chore: list compatible extensions
* feat: allow either erasure method (when enabled) for direct user deletion
* Apply fixes from StyleCI
* ensure invalid modes are handled appropriately
* Apply fixes from StyleCI
---------
Co-authored-by: StyleCI Bot <[email protected]>
* Bundled output for commit ff491a2
Includes transpiled JS/TS, and Typescript declaration files (typings).
[skip ci]
* beta.19 (#35)
* feat: translatable action descriptions, zipmanager, refactoring
* Apply fixes from StyleCI
* return type is now string
* feat: allow setting a custom anonymization username
* translation
* link between the two gdpr pages
* chore: list compatible extensions
* feat: allow either erasure method (when enabled) for direct user deletion
* Apply fixes from StyleCI
* ensure invalid modes are handled appropriately
* Apply fixes from StyleCI
* wip: user columns management
* Apply fixes from StyleCI
* add additional extensions to support list
* Add ianm/twofactor to supported list
* fix: extensions with svg icons do not render their link button
* chore: update supported extension list
* chore: prettier
* include User model in Erased event
* feat: mark which users are anonymized, remove most permissions on them
* Apply fixes from StyleCI
* chore: format
* fix: users see export in controls, admin panel allows export for anonimized users
* add credit to GlowingBlue
* allow 'reservedAbilities' to be extended
* Apply fixes from StyleCI
* chore: test on php 8.3
* chore: reusable workflow for 1.x
---------
Co-authored-by: StyleCI Bot <[email protected]>
* Bundled output for commit bcdd85b
Includes transpiled JS/TS, and Typescript declaration files (typings).
[skip ci]
* fix: route conflict with profile-cover and ban-ips (#37)
* Bundled output for commit c503221
Includes transpiled JS/TS, and Typescript declaration files (typings).
[skip ci]
* Update README.md
Sponsoring by third parties will not be massive banners inside the readme.
* Update README.md
This extension was never meant to be part of blomstra, but commercial or the foundation.
* chore: refactor to flarum namespace
* fix: gate breaks other extensions, fixes #42
* Update README.md
* chore(2.0): update dependencies
Update dependencies to Flarum 2.0 compatible versions.
* chore(2.0): update infrastructure
Update the extension infrastructure
* chore(2.0): adapt to extending lazy modules
Some Flarum modules are now lazy loaded. Extending them requires a different approach.
* chore(2.0): misc frontend changes
Miscellaneous frontend changes
* chore(2.0): misc backend changes
Miscellaneous backend changes
* chore(2.0): code formatting with prettier
Start by formatting your code with Prettier.
* chore: conventional naming to help the tool
* chore(2.0): JSON:API changes
Flarum 2.0 completely changes the JSON:API implementation
* chore(2.0): Backend tests + PHPUnit 9 to 11 changes
Flarum 2.0 uses PHPUnit 11 and encourages use of model factories for easier cross-database testing.
* chore(2.0): `LESS` code changes
Many variables have been renamed to light/dark specific names and most are now used as CSS variables instead.
* chore: misc fixes & namespace change
* fix: conventional view namespace
* chore(2.0): notification emails now require both plain text and HTML views
You now need to provide both plain text and HTML views for notification emails.
* fix: emails
* chore: todo
* fix: misc compatibility changes
* feat: set cancellation data
* feat: less chances of guessing files even if deleted after 1 day
* chore: component based
* fix
* fix: cannot replace itself
@SychO9 must have been a global str replace that did this, ammended
* chore: switch to yarn
* chore: move conditional logic to fof/oauth
* chore: more types
* chore: misc fixes & changes
* chore: migrate settings to flarum
* chore: update workflow
* chore: migrate migrations
* chore: use UserList userActionItems
* fix: unable to cancel erasure request after confirmation
* chore: move user-bio tests to fof/user-bio, update header comment
* chore: move modules
* docs: fix install command
* Apply fixes from StyleCI
* chore: no more beta (well technically yes, but..)
* fix
* chore
* Bundled output for commit b7598e9
Includes transpiled JS/TS, and Typescript declaration files (typings).
[skip ci]
* chore: prepare 2.0.0-beta.1
* chore: housekeeping
* Bundled output for commit 2231865
Includes transpiled JS/TS, and Typescript declaration files (typings).
[skip ci]
* chore: preparations
* chore: minor admin frontend cleanup (#60)
* chore: remove unused classname
This change left aligns the button in the dropdown
* fix: add title for adminnav button
* chore: increase type safety
* chore: rework some admin translations
* Ditch `username()` for use in translations
* Rename translation keys to better match structure of core
* fix: extract text
* Bundled output for commit cefe772
Includes transpiled JS/TS, and Typescript declaration files (typings).
[skip ci]
* fix: type error on delete endpoint (#63)
* fix: type error on delete endpoint
* Apply fixes from StyleCI
* chore: remove php versions
* fix: cancel erasure tests
* fix: delete user tests
* Apply fixes from StyleCI
* fix: list datatype tests
* fix: process erasure tests
* fix: request erasure request tests
* Apply fixes from StyleCI
---------
Co-authored-by: StyleCI Bot <[email protected]>
* chore: move flarum/gdpr into the framework monorepo
* Apply fixes from StyleCI
* chore: format js
* chore: update licence
* chore: update tsconfig for monorepo location
* chore: more move to framework stuff
* fix: typings
---------
Co-authored-by: Daniël Klabbers <[email protected]>
Co-authored-by: Alexander Skvortsov <[email protected]>
Co-authored-by: flarum-bot <[email protected]>
Co-authored-by: Ian Morland <[email protected]>
Co-authored-by: Alexander Skvortsov <[email protected]>
Co-authored-by: Daniel Klabbers <[email protected]>
Co-authored-by: Daniël Klabbers <[email protected]>
Co-authored-by: StyleCI Bot <[email protected]>
Co-authored-by: Sami Mazouz <[email protected]>
Co-authored-by: Davide Iadeluca <[email protected]>flarum/gdpr into monorepo (#4290)1 parent 456b6ba commit c609ecd
File tree
153 files changed
+10071
-1
lines changed- .github/workflows
- extensions/gdpr
- js
- dist-typings
- @types
- admin
- components
- models
- common
- components
- models
- forum
- components
- extenders
- states
- dist
- src
- @types
- admin
- components
- models
- common
- components
- models
- forum
- components
- extenders
- states
- migrations
- resources
- less
- locale
- views/email
- html
- plain
- src
- Access
- Api
- Resource
- Console
- Contracts
- Data
- Events
- Extend
- Http/Controller
- Jobs
- Models
- Notifications
- Providers
- tests
- fixtures
- integration
- api
- forum
- unit
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
153 files changed
+10071
-1
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
| 11 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
| 45 | + | |
45 | 46 | | |
46 | 47 | | |
47 | 48 | | |
| |||
67 | 68 | | |
68 | 69 | | |
69 | 70 | | |
| 71 | + | |
70 | 72 | | |
71 | 73 | | |
72 | 74 | | |
| |||
90 | 92 | | |
91 | 93 | | |
92 | 94 | | |
| 95 | + | |
93 | 96 | | |
94 | 97 | | |
95 | 98 | | |
| |||
147 | 150 | | |
148 | 151 | | |
149 | 152 | | |
| 153 | + | |
150 | 154 | | |
151 | 155 | | |
152 | 156 | | |
| |||
188 | 192 | | |
189 | 193 | | |
190 | 194 | | |
| 195 | + | |
191 | 196 | | |
192 | 197 | | |
193 | 198 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
0 commit comments