Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
0d74414
fix: don't die if we can't encode file metadata on upload
icewind1991 Jul 15, 2026
b554ab9
chore(core/share): Centralize logic for checking if a share is passwo…
theCalcaholic Jul 9, 2026
9174cd9
fix(files): preserve encryptedVersion when copying cache entries
leftybournes Jul 16, 2026
4019df6
test: add tests for encryptedVersion cache entry preservation
leftybournes Jul 16, 2026
66f55cb
fix(files): properly handle folders without permissions
susnux Jul 16, 2026
47e18a2
test: add and fix e2e tests for cases where copy/move not allowed
susnux Jul 16, 2026
0d000c0
chore: compile assets
susnux Jul 17, 2026
f3f4308
Merge pull request #61946 from theCalcaholic/feature/refactor-share-i…
AndyScherzinger Jul 17, 2026
2058212
Merge pull request #62208 from nextcloud/filemetadata-serialize-fail
icewind1991 Jul 17, 2026
c401458
fix(files_external/SMB): Use 'null' explicitly for no workgroup
oblivioncth Jun 26, 2026
f3874e0
fix(jobs): resolve portability issues with background job cleanup
stklcode Jul 5, 2026
5a4737e
fix(jobs): restore background_jobs_expiration_days behavior
stklcode Jul 5, 2026
188d7f6
Merge pull request #61830 from stklcode/fix/61635-ps
susnux Jul 17, 2026
4f15ddd
Merge pull request #61622 from oblivioncth/bugfix/external-files-smb-…
susnux Jul 17, 2026
abcb09d
test(users): prevent flaky tests with hardcoded values
susnux Jul 17, 2026
a91e4ec
test(files): wait for PUT before continue with tests
susnux Jul 17, 2026
8b48dee
test(files): wait for actual requests when deleting files
susnux Jul 17, 2026
89adeb7
fix(l10n): Update translations from Transifex
nextcloud-bot Jul 18, 2026
763c48a
Merge pull request #62254 from nextcloud/fix/copy-move
susnux Jul 18, 2026
d49f90b
fix(l10n): Update translations from Transifex
nextcloud-bot Jul 19, 2026
cbbbe5a
refactor: Apply rector changes
nextcloud-command Jul 19, 2026
6b2ce7b
fix(l10n): Update translations from Transifex
nextcloud-bot Jul 20, 2026
ff8a119
feat(lib/Sharing): Init
provokateurin May 4, 2026
c2f88dd
feat(sharing): Init
provokateurin May 4, 2026
f1f0a86
feat(core/Sharing): Init
provokateurin May 4, 2026
00caf27
feat(files/Sharing): Init
provokateurin May 4, 2026
1700c71
feat(Interaction): Add support for Unified Sharing permissions
provokateurin Jul 1, 2026
86b97d5
Merge pull request #60888 from nextcloud/automated/noid/rector-changes
joshtrichards Jul 20, 2026
0bf8efd
Merge pull request #62241 from nextcloud/unified-sharing
provokateurin Jul 20, 2026
86ca905
test: mark installation tests as slow
susnux Jul 17, 2026
7e3af67
refactor(core): Use constructor properties in Sharing
provokateurin Jul 20, 2026
513ecea
refactor(files): Use constructor properties in Sharing
provokateurin Jul 20, 2026
2bb23b2
Merge pull request #62283 from nextcloud/test/user-hardcoded
susnux Jul 20, 2026
52d02b7
Merge pull request #62255 from nextcloud/leftybournes/fix/cache-inclu…
leftybournes Jul 20, 2026
227458b
feat(Sharing): Hard fail on federated shares for now
provokateurin Jul 20, 2026
ee1b854
perf(ShareUser): Only fetch display name instead of user object
provokateurin Jul 20, 2026
a025ba4
Merge pull request #62286 from nextcloud/test/file-delete-flaky
susnux Jul 20, 2026
fb27fd5
Merge pull request #62284 from nextcloud/fix/files-tests
susnux Jul 20, 2026
8399785
Merge pull request #62282 from nextcloud/test/install-slow
susnux Jul 20, 2026
7d51b70
fix: Mark some parameters as sensitive
nickvergessen Jul 20, 2026
d59f07a
Merge pull request #62336 from nextcloud/bugfix/noid/mark-some-parame…
nickvergessen Jul 20, 2026
f308eef
Merge pull request #62341 from nextcloud/perf/shareuser/display-name
provokateurin Jul 20, 2026
b1e2697
fix(l10n): Update translations from Transifex
nextcloud-bot Jul 21, 2026
4ad68f0
Merge pull request #62335 from nextcloud/refactor/sharing/use-constru…
provokateurin Jul 21, 2026
c355ee9
refactor(sharebymail): extract createEMailTemplate params into $templ…
printminion-co Jun 15, 2026
3ff2742
feat(sharebymail): add BeforeShare*MailSentEvent dispatched before ea…
printminion-co Jun 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ node_modules/
!/apps/provisioning_api
!/apps/settings
!/apps/sharebymail
!/apps/sharing
!/apps/systemtags
!/apps/testing
!/apps/updatenotification
Expand Down
6 changes: 6 additions & 0 deletions .tx/config
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,12 @@ source_file = translationfiles/templates/sharebymail.pot
source_lang = en
type = PO

[o:nextcloud:p:nextcloud:r:sharing]
file_filter = translationfiles/<lang>/sharing.po
source_file = translationfiles/templates/sharing.pot
source_lang = en
type = PO

[o:nextcloud:p:nextcloud:r:systemtags]
file_filter = translationfiles/<lang>/systemtags.po
source_file = translationfiles/templates/systemtags.pot
Expand Down
2 changes: 1 addition & 1 deletion REUSE.toml
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,7 @@ SPDX-FileCopyrightText = "2019 Fabian Wiktor <https://www.pexels.com/photo/green
SPDX-License-Identifier = "CC0-1.0"

[[annotations]]
path = ["openapi.json", ".envrc", "flake.nix", "flake.lock", "build/eslint-baseline.json", "build/eslint-baseline-legacy.json"]
path = ["openapi.json", ".envrc", "flake.nix", "flake.lock", "build/eslint-baseline.json", "build/eslint-baseline-legacy.json", "apps/sharing/openapi.json"]
precedence = "aggregate"
SPDX-FileCopyrightText = "2025 Nextcloud GmbH and Nextcloud contributors"
SPDX-License-Identifier = "AGPL-3.0-or-later"
2 changes: 0 additions & 2 deletions apps/admin_audit/lib/AppInfo/Application.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@

namespace OCA\AdminAudit\AppInfo;

use OCA\AdminAudit\Actions\Auth;
use OCA\AdminAudit\Actions\Console;
use OCA\AdminAudit\Actions\Files;
use OCA\AdminAudit\Actions\Sharing;
use OCA\AdminAudit\Actions\Trashbin;
Expand Down
125 changes: 85 additions & 40 deletions apps/appstore/l10n/el.js

Large diffs are not rendered by default.

125 changes: 85 additions & 40 deletions apps/appstore/l10n/el.json

Large diffs are not rendered by default.

45 changes: 45 additions & 0 deletions apps/appstore/l10n/en_GB.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,33 @@ OC.L10N.register(
{
"App store" : "App store",
"Apps" : "Apps",
"Nextcloud Appstore" : "Nextcloud Appstore",
"Appstore" : "Appstore",
"App name" : "App name",
"Version" : "Version",
"Support level" : "Support level",
"Groups" : "Groups",
"Actions" : "Actions",
"Show details" : "Show details",
"is loading…" : "is loading…",
"Filter view" : "Filter view",
"Grid size" : "Grid size",
"Small grid size" : "Small grid size",
"Medium grid size" : "Medium grid size",
"Large grid size" : "Large grid size",
"Show incompatible" : "Show incompatible",
"Grid view" : "Grid view",
"Force enable {suite}?" : "Force enable {suite}?",
"Enabling {suite} requires force enabling the app. This may cause issues with your Nextcloud instance. Are you sure you want to proceed?" : "Enabling {suite} requires force enabling the app. This may cause issues with your Nextcloud instance. Are you sure you want to proceed?",
"Force enable" : "Force enable",
"Cancel" : "Cancel",
"Office suite switching is managed through the Nextcloud All-in-One interface." : "Office suite switching is managed through the Nextcloud All-in-One interface.",
"Please use the AIO interface to switch between office suites." : "Please use the AIO interface to switch between office suites.",
"Select your preferred office suite." : "Select your preferred office suite.",
"Please note that installing requires manual server setup." : "Please note that installing requires manual server setup.",
"Disable office suites" : "Disable office suites",
"installed" : "installed",
"Features" : "Features",
"Learn more" : "Learn more",
"Daemon" : "Daemon",
"Deploy Daemon" : "Deploy Daemon",
Expand Down Expand Up @@ -53,10 +69,14 @@ OC.L10N.register(
"Developer documentation" : "Developer documentation",
"Details" : "Details",
"This app cannot be installed because the following dependencies are not fulfilled:" : "This app cannot be installed because the following dependencies are not fulfilled:",
"Missing dependencies" : "Missing dependencies",
"This app cannot be limited to groups because it provides functionality that is executed before group membership is determined." : "This app cannot be limited to groups because it provides functionality that is executed before group membership is determined.",
"Limited to groups" : "Limited to groups",
"Latest updated" : "Latest updated",
"Author" : "Author",
"Categories" : "Categories",
"Resources" : "Resources",
"Documentation resources" : "Documentation resources",
"Changelog" : "Changelog",
"Supported" : "Supported",
"Featured" : "Featured",
Expand All @@ -75,9 +95,17 @@ OC.L10N.register(
"Choose slide to display" : "Choose slide to display",
"{index} of {total}" : "{index} of {total}",
"Limit to groups" : "Limit to groups",
"Restrict the usage of {app} to members of the following groups." : "Restrict the usage of {app} to members of the following groups.",
"Reset limitation" : "Reset limitation",
"Save" : "Save",
"Failed to update app {appName}" : "Failed to update app {appName}",
"Update all apps" : "Update all apps",
"Are you sure you want to update all apps?" : "Are you sure you want to update all apps?",
"Update done" : "Update done",
"View website" : "View website",
"Update all" : "Update all",
"Loading app list" : "Loading app list",
"No matching apps found" : "No matching apps found",
"Search everywhere" : "Search everywhere",
"Download and enable all" : "Download and enable all",
"Could not load app discover section" : "Could not load app discover section",
Expand All @@ -86,14 +114,26 @@ OC.L10N.register(
"Could not load section content from app store." : "Could not load section content from app store.",
"Loading" : "Loading",
"Fetching the latest news…" : "Fetching the latest news…",
"Update all applications" : "Update all applications",
"Appstore categories" : "Appstore categories",
"Search apps…" : "Search apps…",
"Loading categories" : "Loading categories",
"Please enter more characters to search." : "Please enter more characters to search.",
"Search apps" : "Search apps",
"Version {version}, {license}-licensed" : "Version {version}, {license}-licensed",
"Version {version}" : "Version {version}",
"Disable" : "Disable",
"Enable" : "Enable",
"Deploy and enable" : "Deploy and enable",
"Download and enable" : "Download and enable",
"Install and enable" : "Install and enable",
"Deploy and force enable" : "Deploy and force enable",
"Download and force enable" : "Download and force enable",
"Install and force enable" : "Install and force enable",
"Rate the app" : "Rate the app",
"Report a bug" : "Report a bug",
"Ask questions or discuss the app" : "Ask questions or discuss the app",
"Visit the website" : "Visit the website",
"Remove" : "Remove",
"Update to {version}" : "Update to {version}",
"Discover" : "Discover",
Expand All @@ -104,6 +144,8 @@ OC.L10N.register(
"App bundles" : "App bundles",
"Featured apps" : "Featured apps",
"Supported apps" : "Supported apps",
"Search results" : "Search results",
"Powered by Euro-Office" : "Powered by Euro-Office",
"Good Nextcloud integration" : "Good Nextcloud integration",
"Open source" : "Open source",
"Best performance" : "Best performance",
Expand All @@ -114,6 +156,9 @@ OC.L10N.register(
"Best security: documents never leave your server" : "Best security: documents never leave your server",
"Best ODF compatibility" : "Best ODF compatibility",
"Best support for legacy files" : "Best support for legacy files",
"Could not load app categories. Please try again later." : "Could not load app categories. Please try again later.",
"Could not load apps list. Please try again later." : "Could not load apps list. Please try again later.",
"Could not update the app. Please try again later." : "Could not update the app. Please try again later.",
"An error occurred during the request. Unable to proceed." : "An error occurred during the request. Unable to proceed."
},
"nplurals=2; plural=(n != 1);");
45 changes: 45 additions & 0 deletions apps/appstore/l10n/en_GB.json
Original file line number Diff line number Diff line change
@@ -1,17 +1,33 @@
{ "translations": {
"App store" : "App store",
"Apps" : "Apps",
"Nextcloud Appstore" : "Nextcloud Appstore",
"Appstore" : "Appstore",
"App name" : "App name",
"Version" : "Version",
"Support level" : "Support level",
"Groups" : "Groups",
"Actions" : "Actions",
"Show details" : "Show details",
"is loading…" : "is loading…",
"Filter view" : "Filter view",
"Grid size" : "Grid size",
"Small grid size" : "Small grid size",
"Medium grid size" : "Medium grid size",
"Large grid size" : "Large grid size",
"Show incompatible" : "Show incompatible",
"Grid view" : "Grid view",
"Force enable {suite}?" : "Force enable {suite}?",
"Enabling {suite} requires force enabling the app. This may cause issues with your Nextcloud instance. Are you sure you want to proceed?" : "Enabling {suite} requires force enabling the app. This may cause issues with your Nextcloud instance. Are you sure you want to proceed?",
"Force enable" : "Force enable",
"Cancel" : "Cancel",
"Office suite switching is managed through the Nextcloud All-in-One interface." : "Office suite switching is managed through the Nextcloud All-in-One interface.",
"Please use the AIO interface to switch between office suites." : "Please use the AIO interface to switch between office suites.",
"Select your preferred office suite." : "Select your preferred office suite.",
"Please note that installing requires manual server setup." : "Please note that installing requires manual server setup.",
"Disable office suites" : "Disable office suites",
"installed" : "installed",
"Features" : "Features",
"Learn more" : "Learn more",
"Daemon" : "Daemon",
"Deploy Daemon" : "Deploy Daemon",
Expand Down Expand Up @@ -51,10 +67,14 @@
"Developer documentation" : "Developer documentation",
"Details" : "Details",
"This app cannot be installed because the following dependencies are not fulfilled:" : "This app cannot be installed because the following dependencies are not fulfilled:",
"Missing dependencies" : "Missing dependencies",
"This app cannot be limited to groups because it provides functionality that is executed before group membership is determined." : "This app cannot be limited to groups because it provides functionality that is executed before group membership is determined.",
"Limited to groups" : "Limited to groups",
"Latest updated" : "Latest updated",
"Author" : "Author",
"Categories" : "Categories",
"Resources" : "Resources",
"Documentation resources" : "Documentation resources",
"Changelog" : "Changelog",
"Supported" : "Supported",
"Featured" : "Featured",
Expand All @@ -73,9 +93,17 @@
"Choose slide to display" : "Choose slide to display",
"{index} of {total}" : "{index} of {total}",
"Limit to groups" : "Limit to groups",
"Restrict the usage of {app} to members of the following groups." : "Restrict the usage of {app} to members of the following groups.",
"Reset limitation" : "Reset limitation",
"Save" : "Save",
"Failed to update app {appName}" : "Failed to update app {appName}",
"Update all apps" : "Update all apps",
"Are you sure you want to update all apps?" : "Are you sure you want to update all apps?",
"Update done" : "Update done",
"View website" : "View website",
"Update all" : "Update all",
"Loading app list" : "Loading app list",
"No matching apps found" : "No matching apps found",
"Search everywhere" : "Search everywhere",
"Download and enable all" : "Download and enable all",
"Could not load app discover section" : "Could not load app discover section",
Expand All @@ -84,14 +112,26 @@
"Could not load section content from app store." : "Could not load section content from app store.",
"Loading" : "Loading",
"Fetching the latest news…" : "Fetching the latest news…",
"Update all applications" : "Update all applications",
"Appstore categories" : "Appstore categories",
"Search apps…" : "Search apps…",
"Loading categories" : "Loading categories",
"Please enter more characters to search." : "Please enter more characters to search.",
"Search apps" : "Search apps",
"Version {version}, {license}-licensed" : "Version {version}, {license}-licensed",
"Version {version}" : "Version {version}",
"Disable" : "Disable",
"Enable" : "Enable",
"Deploy and enable" : "Deploy and enable",
"Download and enable" : "Download and enable",
"Install and enable" : "Install and enable",
"Deploy and force enable" : "Deploy and force enable",
"Download and force enable" : "Download and force enable",
"Install and force enable" : "Install and force enable",
"Rate the app" : "Rate the app",
"Report a bug" : "Report a bug",
"Ask questions or discuss the app" : "Ask questions or discuss the app",
"Visit the website" : "Visit the website",
"Remove" : "Remove",
"Update to {version}" : "Update to {version}",
"Discover" : "Discover",
Expand All @@ -102,6 +142,8 @@
"App bundles" : "App bundles",
"Featured apps" : "Featured apps",
"Supported apps" : "Supported apps",
"Search results" : "Search results",
"Powered by Euro-Office" : "Powered by Euro-Office",
"Good Nextcloud integration" : "Good Nextcloud integration",
"Open source" : "Open source",
"Best performance" : "Best performance",
Expand All @@ -112,6 +154,9 @@
"Best security: documents never leave your server" : "Best security: documents never leave your server",
"Best ODF compatibility" : "Best ODF compatibility",
"Best support for legacy files" : "Best support for legacy files",
"Could not load app categories. Please try again later." : "Could not load app categories. Please try again later.",
"Could not load apps list. Please try again later." : "Could not load apps list. Please try again later.",
"Could not update the app. Please try again later." : "Could not update the app. Please try again later.",
"An error occurred during the request. Unable to proceed." : "An error occurred during the request. Unable to proceed."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
16 changes: 8 additions & 8 deletions apps/appstore/l10n/pt_BR.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ OC.L10N.register(
"Features" : "Recursos",
"Learn more" : "Saiba mais",
"Daemon" : "Daemon",
"Deploy Daemon" : "Deploy daemon",
"Deploy Daemon" : "Deploy Daemon",
"Type" : "Tipo",
"Name" : "Nome",
"Display Name" : "Nome de exibição",
Expand All @@ -45,14 +45,14 @@ OC.L10N.register(
"ExApp container environment variables" : "Variáveis de ambiente do contêiner ExApp",
"No environment variables defined" : "Nenhuma variável de ambiente definida",
"Mounts" : "Montagens",
"Define host folder mounts to bind to the ExApp container" : "Definir montagens de pastas no host para vincular ao contêiner do ExApp",
"Must exist on the Deploy daemon host prior to installing the ExApp" : "Deve existir no host do Deploy daemon antes da instalação do ExApp",
"Host path" : "Caminho no host",
"Define host folder mounts to bind to the ExApp container" : "Definir montagens de pastas no hospedeiro para vincular ao contêiner do ExApp",
"Must exist on the Deploy daemon host prior to installing the ExApp" : "Deve existir no hospedeiro do Deploy Daemon antes da instalação do ExApp",
"Host path" : "Caminho no hospedeiro",
"Container path" : "Caminho no contêiner",
"Read-only" : "Somente leitura",
"Remove mount" : "Remover montagem",
"New mount" : "Nova montagem",
"Enter path to host folder" : "Digite o caminho para a pasta no host",
"Enter path to host folder" : "Digite o caminho para a pasta no hospedeiro",
"Enter path to container folder" : "Digite o caminho para a pasta no contêiner",
"Toggle read-only mode" : "Alternar o modo somente leitura",
"Confirm adding new mount" : "Confirmar adição da nova montagem",
Expand Down Expand Up @@ -84,10 +84,10 @@ OC.L10N.register(
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Os aplicativos em destaque são desenvolvidos pela comunidade. Eles oferecem funcionalidade central e estão prontos para uso em produção.",
"Community rating: {score}/5" : "Avaliação da comunidade: {score}/5",
"Choose Deploy Daemon for {appName}" : "Escolha um Deploy Daemon para {appName}",
"No Deploy daemons configured" : "Nenhum Deploy daemon configurado",
"No Deploy daemons configured" : "Nenhum Deploy Daemon configurado",
"Register a custom one or setup from available templates" : "Registre um personalizado ou configure a partir dos modelos disponíveis",
"Manage Deploy daemons" : "Gerenciar Deploy daemons",
"Registered Deploy daemons list" : "Lista de Deploy daemons registrados",
"Manage Deploy daemons" : "Gerenciar Deploy Daemons",
"Registered Deploy daemons list" : "Lista de Deploy Daemons registrados",
"Default" : "Padrão",
"Carousel" : "Carrossel",
"Previous slide" : "Slide anterior",
Expand Down
16 changes: 8 additions & 8 deletions apps/appstore/l10n/pt_BR.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
"Features" : "Recursos",
"Learn more" : "Saiba mais",
"Daemon" : "Daemon",
"Deploy Daemon" : "Deploy daemon",
"Deploy Daemon" : "Deploy Daemon",
"Type" : "Tipo",
"Name" : "Nome",
"Display Name" : "Nome de exibição",
Expand All @@ -43,14 +43,14 @@
"ExApp container environment variables" : "Variáveis de ambiente do contêiner ExApp",
"No environment variables defined" : "Nenhuma variável de ambiente definida",
"Mounts" : "Montagens",
"Define host folder mounts to bind to the ExApp container" : "Definir montagens de pastas no host para vincular ao contêiner do ExApp",
"Must exist on the Deploy daemon host prior to installing the ExApp" : "Deve existir no host do Deploy daemon antes da instalação do ExApp",
"Host path" : "Caminho no host",
"Define host folder mounts to bind to the ExApp container" : "Definir montagens de pastas no hospedeiro para vincular ao contêiner do ExApp",
"Must exist on the Deploy daemon host prior to installing the ExApp" : "Deve existir no hospedeiro do Deploy Daemon antes da instalação do ExApp",
"Host path" : "Caminho no hospedeiro",
"Container path" : "Caminho no contêiner",
"Read-only" : "Somente leitura",
"Remove mount" : "Remover montagem",
"New mount" : "Nova montagem",
"Enter path to host folder" : "Digite o caminho para a pasta no host",
"Enter path to host folder" : "Digite o caminho para a pasta no hospedeiro",
"Enter path to container folder" : "Digite o caminho para a pasta no contêiner",
"Toggle read-only mode" : "Alternar o modo somente leitura",
"Confirm adding new mount" : "Confirmar adição da nova montagem",
Expand Down Expand Up @@ -82,10 +82,10 @@
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Os aplicativos em destaque são desenvolvidos pela comunidade. Eles oferecem funcionalidade central e estão prontos para uso em produção.",
"Community rating: {score}/5" : "Avaliação da comunidade: {score}/5",
"Choose Deploy Daemon for {appName}" : "Escolha um Deploy Daemon para {appName}",
"No Deploy daemons configured" : "Nenhum Deploy daemon configurado",
"No Deploy daemons configured" : "Nenhum Deploy Daemon configurado",
"Register a custom one or setup from available templates" : "Registre um personalizado ou configure a partir dos modelos disponíveis",
"Manage Deploy daemons" : "Gerenciar Deploy daemons",
"Registered Deploy daemons list" : "Lista de Deploy daemons registrados",
"Manage Deploy daemons" : "Gerenciar Deploy Daemons",
"Registered Deploy daemons list" : "Lista de Deploy Daemons registrados",
"Default" : "Padrão",
"Carousel" : "Carrossel",
"Previous slide" : "Slide anterior",
Expand Down
Loading
Loading