(()=>{var t,n,e,r={16096:(t,n,e)=>{"use strict";var r=e(85471),i=e(76333),u=e(32981),o=e(53334),a=e(85168),s=e(2543),c=e(17334),l=e.n(c);const f=(0,r.pM)({name:"SelectSharingPermissions",components:{NcCheckboxRadioSwitch:i.AO},props:{value:{type:Number,required:!0}},emits:{"update:value":t=>"number"==typeof t},data:()=>({PERMISSION_UPDATE:2,PERMISSION_CREATE:4,PERMISSION_DELETE:8,PERMISSION_SHARE:16}),computed:{canCreate(){return!!(this.value&this.PERMISSION_CREATE)},canUpdate(){return!!(this.value&this.PERMISSION_UPDATE)},canDelete(){return!!(this.value&this.PERMISSION_DELETE)},canShare(){return!!(this.value&this.PERMISSION_SHARE)}},methods:{t:o.Tl,toggle(t){this.$emit("update:value",this.value^t)}}});var h=e(85072),p=e.n(h),g=e(97825),d=e.n(g),v=e(77659),_=e.n(v),y=e(55056),m=e.n(y),w=e(10540),b=e.n(w),x=e(41113),A=e.n(x),S=e(10844),k={};k.styleTagTransform=A(),k.setAttributes=m(),k.insert=_().bind(null,"head"),k.domAPI=d(),k.insertStyleElement=b(),p()(S.A,k),S.A&&S.A.locals&&S.A.locals;var C=e(14486);const E=(0,C.A)(f,(function(){var t=this,n=t._self._c;return t._self._setupProxy,n("fieldset",{staticClass:"permissions-select"},[n("NcCheckboxRadioSwitch",{attrs:{checked:t.canCreate},on:{"update:checked":function(n){return t.toggle(t.PERMISSION_CREATE)}}},[t._v("\n\t\t"+t._s(t.t("settings","Create"))+"\n\t")]),t._v(" "),n("NcCheckboxRadioSwitch",{attrs:{checked:t.canUpdate},on:{"update:checked":function(n){return t.toggle(t.PERMISSION_UPDATE)}}},[t._v("\n\t\t"+t._s(t.t("settings","Change"))+"\n\t")]),t._v(" "),n("NcCheckboxRadioSwitch",{attrs:{checked:t.canDelete},on:{"update:checked":function(n){return t.toggle(t.PERMISSION_DELETE)}}},[t._v("\n\t\t"+t._s(t.t("settings","Delete"))+"\n\t")]),t._v(" "),n("NcCheckboxRadioSwitch",{attrs:{checked:t.canShare},on:{"update:checked":function(n){return t.toggle(t.PERMISSION_SHARE)}}},[t._v("\n\t\t"+t._s(t.t("settings","Reshare"))+"\n\t")])],1)}),[],!1,null,"fa9fc04c",null).exports,N=(0,r.pM)({name:"AdminSettingsSharingForm",components:{NcCheckboxRadioSwitch:i.AO,NcSettingsSelectGroup:i.C7,NcTextArea:i.gb,NcTextField:i.v,SelectSharingPermissions:E},data(){const t=(0,u.C)("settings","sharingSettings");return{settingsData:t,publicShareDisclaimerEnabled:""!==t.publicShareDisclaimerText}},computed:{settings(){return console.warn("new proxy"),new Proxy(this.settingsData,{get:(t,n)=>t[n],set(t,n,e){const r=`shareapi_${(0,s.snakeCase)(n)}`,i="boolean"==typeof e?e?"yes":"no":"string"==typeof e?e:JSON.stringify(e);return window.OCP.AppConfig.setValue("core",r,i),t[n]=e,!0}})}},watch:{publicShareDisclaimerEnabled(){!1===this.publicShareDisclaimerEnabled&&this.onUpdateDisclaimer("")}},methods:{t:o.Tl,onUpdateDisclaimer:l()((function(t){const n={success(){""!==t?(0,a.Te)((0,o.Tl)("settings","Changed disclaimer text")):(0,a.Te)((0,o.Tl)("settings","Deleted disclaimer text"))},error(){(0,a.Qg)((0,o.Tl)("settings","Could not set disclaimer text"))}};""===t?window.OCP.AppConfig.deleteKey("core","shareapi_public_link_disclaimertext",n):window.OCP.AppConfig.setValue("core","shareapi_public_link_disclaimertext",t,n),this.settingsData.publicShareDisclaimerText=t}),500),onUpdateExcludeGroups:l()((function(t){window.OCP.AppConfig.setValue("core","excludeGroups",t),this.settings.excludeGroups=t}),500)}}),R=N;var I=e(95506),D={};D.styleTagTransform=A(),D.setAttributes=m(),D.insert=_().bind(null,"head"),D.domAPI=d(),D.insertStyleElement=b(),p()(I.A,D),I.A&&I.A.locals&&I.A.locals;const O=(0,C.A)(R,(function(){var t=this,n=t._self._c;return t._self._setupProxy,n("form",{staticClass:"sharing"},[n("NcCheckboxRadioSwitch",{attrs:{"aria-controls":"settings-sharing-api settings-sharing-api-settings settings-sharing-default-permissions settings-sharing-privary-related",type:"switch",checked:t.settings.enabled},on:{"update:checked":function(n){return t.$set(t.settings,"enabled",n)}}},[t._v("\n\t\t"+t._s(t.t("settings","Allow apps to use the Share API"))+"\n\t")]),t._v(" "),n("div",{directives:[{name:"show",rawName:"v-show",value:t.settings.enabled,expression:"settings.enabled"}],staticClass:"sharing__sub-section",attrs:{id:"settings-sharing-api-settings"}},[n("NcCheckboxRadioSwitch",{attrs:{checked:t.settings.allowResharing},on:{"update:checked":function(n){return t.$set(t.settings,"allowResharing",n)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Allow resharing"))+"\n\t\t")]),t._v(" "),n("NcCheckboxRadioSwitch",{attrs:{checked:t.settings.allowGroupSharing},on:{"update:checked":function(n){return t.$set(t.settings,"allowGroupSharing",n)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Allow sharing with groups"))+"\n\t\t")]),t._v(" "),n("NcCheckboxRadioSwitch",{attrs:{checked:t.settings.onlyShareWithGroupMembers},on:{"update:checked":function(n){return t.$set(t.settings,"onlyShareWithGroupMembers",n)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Restrict users to only share with users in their groups"))+"\n\t\t")]),t._v(" "),n("div",{directives:[{name:"show",rawName:"v-show",value:t.settings.onlyShareWithGroupMembers,expression:"settings.onlyShareWithGroupMembers"}],staticClass:"sharing__labeled-entry sharing__input",attrs:{id:"settings-sharing-api-excluded-groups"}},[n("label",{attrs:{for:"settings-sharing-only-group-members-excluded-groups"}},[t._v(t._s(t.t("settings","Ignore the following groups when checking group membership")))]),t._v(" "),n("NcSettingsSelectGroup",{staticStyle:{width:"100%"},attrs:{id:"settings-sharing-only-group-members-excluded-groups",label:t.t("settings","Ignore the following groups when checking group membership")},model:{value:t.settings.onlyShareWithGroupMembersExcludeGroupList,callback:function(n){t.$set(t.settings,"onlyShareWithGroupMembersExcludeGroupList",n)},expression:"settings.onlyShareWithGroupMembersExcludeGroupList"}})],1)],1),t._v(" "),n("div",{directives:[{name:"show",rawName:"v-show",value:t.settings.enabled,expression:"settings.enabled"}],staticClass:"sharing__section",attrs:{id:"settings-sharing-api"}},[n("NcCheckboxRadioSwitch",{attrs:{type:"switch","aria-controls":"settings-sharing-api-public-link",checked:t.settings.allowLinks},on:{"update:checked":function(n){return t.$set(t.settings,"allowLinks",n)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Allow users to share via link and emails"))+"\n\t\t")]),t._v(" "),n("fieldset",{directives:[{name:"show",rawName:"v-show",value:t.settings.allowLinks,expression:"settings.allowLinks"}],staticClass:"sharing__sub-section",attrs:{id:"settings-sharing-api-public-link"}},[n("NcCheckboxRadioSwitch",{attrs:{checked:t.settings.allowPublicUpload},on:{"update:checked":function(n){return t.$set(t.settings,"allowPublicUpload",n)}}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Allow public uploads"))+"\n\t\t\t")]),t._v(" "),n("NcCheckboxRadioSwitch",{attrs:{checked:t.settings.enableLinkPasswordByDefault},on:{"update:checked":function(n){return t.$set(t.settings,"enableLinkPasswordByDefault",n)}}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Always ask for a password"))+"\n\t\t\t")]),t._v(" "),n("NcCheckboxRadioSwitch",{attrs:{checked:t.settings.enforceLinksPassword,disabled:!t.settings.enableLinkPasswordByDefault},on:{"update:checked":function(n){return t.$set(t.settings,"enforceLinksPassword",n)}}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Enforce password protection"))+"\n\t\t\t")]),t._v(" "),t.settings.enforceLinksPasswordExcludedGroupsEnabled?n("label",{staticClass:"sharing__labeled-entry sharing__input"},[n("span",[t._v(t._s(t.t("settings","Exclude groups from password requirements")))]),t._v(" "),n("NcSettingsSelectGroup",{staticStyle:{width:"100%"},attrs:{disabled:!t.settings.enforceLinksPassword||!t.settings.enableLinkPasswordByDefault},model:{value:t.settings.enforceLinksPasswordExcludedGroups,callback:function(n){t.$set(t.settings,"enforceLinksPasswordExcludedGroups",n)},expression:"settings.enforceLinksPasswordExcludedGroups"}})],1):t._e(),t._v(" "),n("label",{staticClass:"sharing__labeled-entry sharing__input"},[n("span",[t._v(t._s(t.t("settings","Exclude groups from creating link shares")))]),t._v(" "),n("NcSettingsSelectGroup",{staticStyle:{width:"100%"},attrs:{label:t.t("settings","Exclude groups from creating link shares")},model:{value:t.settings.allowLinksExcludeGroups,callback:function(n){t.$set(t.settings,"allowLinksExcludeGroups",n)},expression:"settings.allowLinksExcludeGroups"}})],1)],1),t._v(" "),n("label",[t._v(t._s(t.t("settings","Limit sharing based on groups")))]),t._v(" "),n("div",{staticClass:"sharing__sub-section"},[n("NcCheckboxRadioSwitch",{attrs:{checked:t.settings.excludeGroups,name:"excludeGroups",value:"no",type:"radio"},on:{"update:checked":[function(n){return t.$set(t.settings,"excludeGroups",n)},t.onUpdateExcludeGroups]}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Allow sharing for everyone (default)"))+"\n\t\t\t")]),t._v(" "),n("NcCheckboxRadioSwitch",{attrs:{checked:t.settings.excludeGroups,name:"excludeGroups",value:"yes",type:"radio"},on:{"update:checked":[function(n){return t.$set(t.settings,"excludeGroups",n)},t.onUpdateExcludeGroups]}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Exclude some groups from sharing"))+"\n\t\t\t")]),t._v(" "),n("NcCheckboxRadioSwitch",{attrs:{checked:t.settings.excludeGroups,name:"excludeGroups",value:"allow",type:"radio"},on:{"update:checked":[function(n){return t.$set(t.settings,"excludeGroups",n)},t.onUpdateExcludeGroups]}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Limit sharing to some groups"))+"\n\t\t\t")]),t._v(" "),n("div",{directives:[{name:"show",rawName:"v-show",value:"no"!==t.settings.excludeGroups,expression:"settings.excludeGroups !== 'no'"}],staticClass:"sharing__labeled-entry sharing__input"},[n("NcSettingsSelectGroup",{staticStyle:{width:"100%"},attrs:{id:"settings-sharing-excluded-groups","aria-describedby":"settings-sharing-excluded-groups-desc",label:"allow"===t.settings.excludeGroups?t.t("settings","Groups allowed to share"):t.t("settings","Groups excluded from sharing"),disabled:"no"===t.settings.excludeGroups},model:{value:t.settings.excludeGroupsList,callback:function(n){t.$set(t.settings,"excludeGroupsList",n)},expression:"settings.excludeGroupsList"}}),t._v(" "),n("em",{attrs:{id:"settings-sharing-excluded-groups-desc"}},[t._v(t._s(t.t("settings","Not allowed groups will still be able to receive shares, but not to initiate them.")))])],1)],1),t._v(" "),n("NcCheckboxRadioSwitch",{attrs:{type:"switch","aria-controls":"settings-sharing-api-expiration",checked:t.settings.defaultInternalExpireDate},on:{"update:checked":function(n){return t.$set(t.settings,"defaultInternalExpireDate",n)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Set default expiration date for internal shares"))+"\n\t\t")]),t._v(" "),n("fieldset",{directives:[{name:"show",rawName:"v-show",value:t.settings.defaultInternalExpireDate,expression:"settings.defaultInternalExpireDate"}],staticClass:"sharing__sub-section",attrs:{id:"settings-sharing-api-expiration"}},[n("NcCheckboxRadioSwitch",{attrs:{checked:t.settings.enforceInternalExpireDate},on:{"update:checked":function(n){return t.$set(t.settings,"enforceInternalExpireDate",n)}}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Enforce expiration date"))+"\n\t\t\t")]),t._v(" "),n("NcTextField",{staticClass:"sharing__input",attrs:{type:"number",label:t.t("settings","Default expiration time of new shares in days"),placeholder:t.t("settings","Expire shares after x days"),value:t.settings.internalExpireAfterNDays},on:{"update:value":function(n){return t.$set(t.settings,"internalExpireAfterNDays",n)}}})],1),t._v(" "),n("NcCheckboxRadioSwitch",{attrs:{type:"switch","aria-controls":"settings-sharing-remote-api-expiration",checked:t.settings.defaultRemoteExpireDate},on:{"update:checked":function(n){return t.$set(t.settings,"defaultRemoteExpireDate",n)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Set default expiration date for shares to other servers"))+"\n\t\t")]),t._v(" "),n("fieldset",{directives:[{name:"show",rawName:"v-show",value:t.settings.defaultRemoteExpireDate,expression:"settings.defaultRemoteExpireDate"}],staticClass:"sharing__sub-section",attrs:{id:"settings-sharing-remote-api-expiration"}},[n("NcCheckboxRadioSwitch",{attrs:{checked:t.settings.enforceRemoteExpireDate},on:{"update:checked":function(n){return t.$set(t.settings,"enforceRemoteExpireDate",n)}}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Enforce expiration date for remote shares"))+"\n\t\t\t")]),t._v(" "),n("NcTextField",{staticClass:"sharing__input",attrs:{type:"number",label:t.t("settings","Default expiration time of remote shares in days"),placeholder:t.t("settings","Expire remote shares after x days"),value:t.settings.remoteExpireAfterNDays},on:{"update:value":function(n){return t.$set(t.settings,"remoteExpireAfterNDays",n)}}})],1),t._v(" "),n("NcCheckboxRadioSwitch",{attrs:{type:"switch","aria-controls":"settings-sharing-api-api-expiration",checked:t.settings.defaultExpireDate,disabled:!t.settings.allowLinks},on:{"update:checked":function(n){return t.$set(t.settings,"defaultExpireDate",n)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Set default expiration date for shares via link or mail"))+"\n\t\t")]),t._v(" "),n("fieldset",{directives:[{name:"show",rawName:"v-show",value:t.settings.allowLinks&&t.settings.defaultExpireDate,expression:"settings.allowLinks && settings.defaultExpireDate"}],staticClass:"sharing__sub-section",attrs:{id:"settings-sharing-api-api-expiration"}},[n("NcCheckboxRadioSwitch",{attrs:{checked:t.settings.enforceExpireDate},on:{"update:checked":function(n){return t.$set(t.settings,"enforceExpireDate",n)}}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Enforce expiration date for remote shares"))+"\n\t\t\t")]),t._v(" "),n("NcTextField",{staticClass:"sharing__input",attrs:{type:"number",label:t.t("settings","Default expiration time of shares in days"),placeholder:t.t("settings","Expire shares after x days"),value:t.settings.expireAfterNDays},on:{"update:value":function(n){return t.$set(t.settings,"expireAfterNDays",n)}}})],1)],1),t._v(" "),n("div",{directives:[{name:"show",rawName:"v-show",value:t.settings.enabled,expression:"settings.enabled"}],staticClass:"sharing__section",attrs:{id:"settings-sharing-privary-related"}},[n("h3",[t._v(t._s(t.t("settings","Privacy settings for sharing")))]),t._v(" "),n("NcCheckboxRadioSwitch",{attrs:{type:"switch","aria-controls":"settings-sharing-privacy-user-enumeration",checked:t.settings.allowShareDialogUserEnumeration},on:{"update:checked":function(n){return t.$set(t.settings,"allowShareDialogUserEnumeration",n)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Allow account name autocompletion in share dialog and allow access to the system address book"))+"\n\t\t")]),t._v(" "),n("fieldset",{directives:[{name:"show",rawName:"v-show",value:t.settings.allowShareDialogUserEnumeration,expression:"settings.allowShareDialogUserEnumeration"}],staticClass:"sharing__sub-section",attrs:{id:"settings-sharing-privacy-user-enumeration"}},[n("em",[t._v("\n\t\t\t\t"+t._s(t.t("settings",'If autocompletion "same group" and "phone number integration" are enabled a match in either is enough to show the user.'))+"\n\t\t\t")]),t._v(" "),n("NcCheckboxRadioSwitch",{attrs:{checked:t.settings.restrictUserEnumerationToGroup},on:{"update:checked":function(n){return t.$set(t.settings,"restrictUserEnumerationToGroup",n)}}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Restrict account name autocompletion and system address book access to users within the same groups"))+"\n\t\t\t")]),t._v(" "),n("NcCheckboxRadioSwitch",{attrs:{checked:t.settings.restrictUserEnumerationToPhone},on:{"update:checked":function(n){return t.$set(t.settings,"restrictUserEnumerationToPhone",n)}}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Restrict account name autocompletion to users based on phone number integration"))+"\n\t\t\t")])],1),t._v(" "),n("NcCheckboxRadioSwitch",{attrs:{type:"switch",checked:t.settings.restrictUserEnumerationFullMatch},on:{"update:checked":function(n){return t.$set(t.settings,"restrictUserEnumerationFullMatch",n)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Allow autocompletion when entering the full name or email address (ignoring missing phonebook match and being in the same group)"))+"\n\t\t")]),t._v(" "),n("NcCheckboxRadioSwitch",{attrs:{type:"switch",checked:t.publicShareDisclaimerEnabled},on:{"update:checked":function(n){t.publicShareDisclaimerEnabled=n}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Show disclaimer text on the public link upload page (only shown when the file list is hidden)"))+"\n\t\t")]),t._v(" "),t.publicShareDisclaimerEnabled?n("div",{staticClass:"sharing__sub-section",attrs:{"aria-describedby":"settings-sharing-privary-related-disclaimer-hint"}},[n("NcTextArea",{staticClass:"sharing__input",attrs:{label:t.t("settings","Disclaimer text"),"aria-describedby":"settings-sharing-privary-related-disclaimer-hint",value:t.settings.publicShareDisclaimerText},on:{"update:value":t.onUpdateDisclaimer}}),t._v(" "),n("em",{staticClass:"sharing__input",attrs:{id:"settings-sharing-privary-related-disclaimer-hint"}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","This text will be shown on the public link upload page when the file list is hidden."))+"\n\t\t\t")])],1):t._e()],1),t._v(" "),n("div",{staticClass:"sharing__section",attrs:{id:"settings-sharing-default-permissions"}},[n("h3",[t._v(t._s(t.t("settings","Default share permissions")))]),t._v(" "),n("SelectSharingPermissions",{attrs:{value:t.settings.defaultPermissions},on:{"update:value":function(n){return t.$set(t.settings,"defaultPermissions",n)}}})],1)],1)}),[],!1,null,"72869ad4",null).exports,P=(0,r.pM)({name:"AdminSettingsSharing",components:{AdminSettingsSharingForm:O,NcNoteCard:i.mQ,NcSettingsSection:i.rE},data:()=>({documentationLink:(0,u.C)("settings","sharingDocumentation",""),sharingAppEnabled:(0,u.C)("settings","sharingAppEnabled",!1)}),methods:{t:o.Tl}}),j=(0,C.A)(P,(function(){var t=this,n=t._self._c;return t._self._setupProxy,n("NcSettingsSection",{attrs:{"data-cy-settings-sharing-section":"","limit-width":!0,"doc-url":t.documentationLink,name:t.t("settings","Sharing"),description:t.t("settings","As admin you can fine-tune the sharing behavior. Please see the documentation for more information.")}},[t.sharingAppEnabled?n("AdminSettingsSharingForm"):n("NcNoteCard",{attrs:{type:"warning"}},[t._v("\n\t\t"+t._s(t.t("settings","You need to enable the File sharing App."))+"\n\t")])],1)}),[],!1,null,null,null).exports;new r.Ay({name:"AdminSettingsSharingSection",el:"#vue-admin-settings-sharing",render:t=>t(j)})},95506:(t,n,e)=>{"use strict";e.d(n,{A:()=>a});var r=e(71354),i=e.n(r),u=e(76314),o=e.n(u)()(i());o.push([t.id,".sharing[data-v-72869ad4]{display:flex;flex-direction:column;gap:12px}.sharing__labeled-entry[data-v-72869ad4]{display:flex;flex:1 0;flex-direction:column;gap:4px}.sharing__section[data-v-72869ad4]{display:flex;flex-direction:column;gap:4px;margin-block-end:12px}.sharing__sub-section[data-v-72869ad4]{display:flex;flex-direction:column;gap:4px;margin-inline-start:44px;margin-block-end:12px}.sharing__input[data-v-72869ad4]{max-width:500px;margin-inline-start:14px}.sharing__input[data-v-72869ad4] .v-select.select{width:100%}@media only screen and (max-width: 350px){.sharing__sub-section[data-v-72869ad4]{margin-inline-start:14px}}","",{version:3,sources:["webpack://./apps/settings/src/components/AdminSettingsSharingForm.vue"],names:[],mappings:"AACA,0BACC,YAAA,CACA,qBAAA,CACA,QAAA,CAEA,yCACC,YAAA,CACA,QAAA,CACA,qBAAA,CACA,OAAA,CAGD,mCACC,YAAA,CACA,qBAAA,CACA,OAAA,CACA,qBAAA,CAGD,uCACC,YAAA,CACA,qBAAA,CACA,OAAA,CAEA,wBAAA,CACA,qBAAA,CAGD,iCACC,eAAA,CAEA,wBAAA,CAEA,kDACC,UAAA,CAKH,0CAGE,uCACC,wBAAA,CAAA",sourceRoot:""}]);const a=o},10844:(t,n,e)=>{"use strict";e.d(n,{A:()=>a});var r=e(71354),i=e.n(r),u=e(76314),o=e.n(u)()(i());o.push([t.id,"\n.permissions-select[data-v-fa9fc04c] {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: 4px;\n}\n","",{version:3,sources:["webpack://./apps/settings/src/components/SelectSharingPermissions.vue"],names:[],mappings:";AA6EA;CACA,aAAA;CACA,eAAA;CACA,QAAA;AACA",sourcesContent:["\x3c!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n--\x3e\n\n\t\n\n\n