Page MenuHomePhorge

No OneTemporary

Size
19 KB
Referenced Files
None
Subscribers
None
diff --git a/kolab2.schema b/kolab2.schema
index 58084a9..7693389 100644
--- a/kolab2.schema
+++ b/kolab2.schema
@@ -1,357 +1,366 @@
# $Id$
# (c) 2003, 2004 Tassilo Erlewein <tassilo.erlewein@erfrakon.de>
# (c) 2003, 2004 Martin Konold <martin.konold@erfrakon.de>
# (c) 2003 Achim Frank <achim.frank@erfrakon.de>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# The name of the author may not be used to endorse or promote products derived
# from this software without specific prior written permission.
#
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# This schema highly depends on the core.schema, cosine.schema and the inetorgperson.schema
# as provided by 3rd parties like OpenLDAP.
#
# slapd.conf then looks like
# include /kolab/etc/openldap/schema/core.schema
# include /kolab/etc/openldap/schema/cosine.schema
# include /kolab/local/etc/openldap/schema/inetorgperson.schema
# include /kolab/local/etc/openldap/schema/kolab2.schema
#
####################
# kolab attributes #
####################
# helper attribute to make the kolab root easily findable in
# a big ldap directory
attributetype ( 1.3.6.1.4.1.19414.2.1.1
NAME ( 'k' 'kolab' )
SUP name
DESC 'Kolab attribute' )
# kolabDeleteflag used to be a boolean but describes with Kolab 2
# the fqdn of the server which is requested to delete this objects
# in its local store
attributetype ( 1.3.6.1.4.1.19414.2.1.2
NAME 'kolabDeleteflag'
DESC 'Per host deletion status'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
# alias used to provide alternative rfc822 email addresses for kolab users
attributetype ( 1.3.6.1.4.1.19414.2.1.3
NAME 'alias'
DESC 'RFC1274: RFC822 Mailbox'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
# kolabEncryptedPassword is an asymmetrically (RSA) encrypted copy of the
# cleartext password. This is required in order to pass the password from
# the maintainance/administration application to the kolabHomeServer running the
# resource handler application in a secure maner
attributetype ( 1.3.6.1.4.1.19419.2.1.4
NAME 'kolabEncryptedPassword'
DESC 'base64 encoded public key encrypted Password'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
# hostname including the domain name like kolab-master.bsi.de
attributetype ( 1.3.6.1.4.1.19414.2.1.5
NAME ( 'fqhostname' 'fqdnhostname' )
DESC 'Fully qualified Hostname including full domain component'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
# fqdn of all hosts in a multi-location setup
attributetype ( 1.3.6.1.4.1.19414.2.1.6
NAME 'kolabHost'
DESC 'Multivalued -- list of hostnames in a Kolab setup'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
# fqdn of the server containg the actual user data
attributetype ( 1.3.6.1.4.1.19419.1.1.1.1
NAME 'kolabHomeServer'
DESC 'server which keeps the users mailbox'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
# flag for allowing unrestriced length of mails
attributetype ( 1.3.6.1.4.1.19419.1.1.1.2
NAME 'unrestrictedMailSize'
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
- EQUALITY booleanMatch )
+ EQUALITY booleanMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 )
# allow delegates to act in your name (vacation/secretary boss use case)
# we use the syntax of rfc822 email addresses in order identify
# users allow to act in the name of others
attributetype ( 1.3.6.1.4.1.19419.1.1.1.3
NAME 'kolabDelegate'
DESC 'Kolab user allowed to act as delegates - RFC822 Mailbox/Alias'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
# For user, group and resource Kolab accounts
# Describes how to respond to invitations
# We keep the attribute as a string, but actually it can only have one
# of the following values:
#
# ACT_ALWAYS_ACCEPT
# ACT_ALWAYS_REJECT
# ACT_REJECT_IF_CONFLICTS
# ACT_MANUAL_IF_CONFLICTS
# ACT_MANUAL
# In addition one of these values may be prefixed with a primary email
# address followed by a colon like
# user@domain.tld: ACT_ALWAYS_ACCEPT
attributetype ( 1.3.6.1.4.1.19419.1.1.1.4
NAME ( 'kolabInvitationPolicy' 'kolabResourceAction' )
DESC 'Used by user, group and resource accounts to determine how to respond to invitations'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
-
+# time span from now to the future used for the free busy data
+# measured in days
+attributetype ( 1.3.6.1.4.1.19419.1.1.1.5
+ NAME 'kolabFreeBusyDuration'
+ DESC 'time in days for fb data'
+ EQUALITY integerMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
######################
# postfix attributes #
######################
attributetype ( 1.3.6.1.4.1.19414.2.1.501
NAME 'postfix-mydomain'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
attributetype ( 1.3.6.1.4.1.19414.2.1.502
NAME 'postfix-relaydomains'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
attributetype ( 1.3.6.1.4.1.19414.2.1.503
NAME 'postfix-mydestination'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
attributetype ( 1.3.6.1.4.1.19414.2.1.504
NAME 'postfix-mynetworks'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
attributetype ( 1.3.6.1.4.1.19414.2.1.505
NAME 'postfix-relayhost'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
attributetype ( 1.3.6.1.4.1.19414.2.1.506
NAME 'postfix-transport'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
attributetype ( 1.3.6.1.4.1.19414.2.1.507
NAME 'postfix-enable-virus-scan'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 )
attributetype ( 1.3.6.1.4.1.19414.2.1.508
NAME 'postfix-allow-unauthenticated'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 )
##########################
# cyrus imapd attributes #
##########################
attributetype ( 1.3.6.1.4.1.19414.2.1.601
NAME 'cyrus-autocreatequota'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
attributetype ( 1.3.6.1.4.1.19414.2.1.602
NAME 'cyrus-admins'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
# enable plain imap without ssl
attributetype ( 1.3.6.1.4.1.19414.2.1.603
NAME 'cyrus-imap'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
EQUALITY booleanMatch )
# enable legacy pop3
attributetype ( 1.3.6.1.4.1.19414.2.1.604
NAME 'cyrus-pop3'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
EQUALITY booleanMatch )
# user specific quota on the cyrus imap server
attributetype ( 1.3.6.1.4.1.19414.2.1.605
NAME 'cyrus-userquota'
DESC 'Mailbox hard quota limit in MB'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
# cyrus imapd access control list
# acls work with users and groups
attributetype ( 1.3.6.1.4.1.19414.2.1.651
NAME 'acl'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
# enable secure imap
attributetype ( 1.3.6.1.4.1.19414.2.1.606
NAME 'cyrus-imaps'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
EQUALITY booleanMatch )
# enable secure pop3
attributetype ( 1.3.6.1.4.1.19414.2.1.607
NAME 'cyrus-pop3s'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
EQUALITY booleanMatch )
# enable sieve support (required for forward and vacation services)
attributetype ( 1.3.6.1.4.1.19414.2.1.608
NAME 'cyrus-sieve'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
EQUALITY booleanMatch )
# installation wide percentage which determines when to send a
# warning to the user
attributetype ( 1.3.6.1.4.1.19414.2.1.609
NAME 'cyrus-quotawarn'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
#############################
# apache and php attributes #
#############################
# enable plain http (no ssl)
attributetype ( 1.3.6.1.4.1.19414.2.1.701
NAME 'apache-http'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
EQUALITY booleanMatch )
######################
# proftpd attributes #
######################
attributetype ( 1.3.6.1.4.1.19414.2.1.901
NAME 'proftpd-defaultquota'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
attributetype ( 1.3.6.1.4.1.19414.2.1.902
NAME 'proftpd-ftp'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
EQUALITY booleanMatch )
attributetype ( 1.3.6.1.4.1.19414.2.1.903
NAME 'proftpd-userPassword'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
########################
# kolab object classes #
########################
# main kolab server configuration
objectclass ( 1.3.6.1.4.1.19414.2.2.1
NAME 'kolab'
DESC 'Kolab server configuration'
SUP top STRUCTURAL
MUST k
MAY ( kolabHost $
postfix-mydomain $
postfix-relaydomains $
postfix-mydestination $
postfix-mynetworks $
postfix-relayhost $
postfix-transport $
postfix-enable-virus-scan $
postfix-allow-unauthenticated $
cyrus-autocreatequota $
cyrus-quotawarn $
cyrus-autocreatequota $
cyrus-admins $
cyrus-imap $
cyrus-pop3 $
cyrus-imaps $
cyrus-pop3s $
cyrus-sieve $
apache-http $
proftpd-ftp $
proftpd-defaultquota $
uid $
userPassword ) )
# shared folders are typically visible to everyone subscribed to
# the server without the need for an extra login
objectclass ( 1.3.6.1.4.1.19414.2.2.9
NAME 'kolabSharedFolder'
DESC 'Kolab public shared folder'
SUP top STRUCTURAL
MUST cn
MAY ( acl $
cyrus-userquota $
kolabHomeServer $
kolabDeleteflag ) )
# used as a plain node for the LDAP tree. In contrast to unix filesystem directories
# LDAP nodes can and often do also have contents/attributes. We use kolabNamedObject
# in order to put more structure in the directory tree.
objectclass ( 1.3.6.1.4.1.5322.13.1.1
NAME 'kolabNamedObject'
SUP top STRUCTURAL
MAY (cn $ ou) )
# kolab account with country support
# we use an auxiliary in order to ease integration
# with existing inetOrgPerson objects
objectclass ( 1.3.6.1.4.1.19414.3.2.2
NAME 'kolabInetOrgPerson'
DESC 'Kolab Internet Organizational Person'
SUP top AUXILIARY
MAY ( kolabHomeServer $
c $
unrestrictedMailSize $
kolabDelegate $
kolabEncryptedPassword $
- kolabDeleteflag $
alias $
cyrus-userquota $
- kolabInvitationPolicy ) )
+ kolabInvitationPolicy $
+ kolabFreeBusyDuration $
+ calFBURL $
+ kolabDeleteflag ) )
# kolab organization with country support
objectclass ( 1.3.6.1.4.1.19414.3.2.3
NAME 'kolabOrganization'
DESC 'RFC2256: a Kolab organization'
SUP organization STRUCTURAL
MAY ( c $
mail $
kolabDeleteflag $
alias ) )
# kolab organizational unit with country support
objectclass ( 1.3.6.1.4.1.19414.3.2.4
NAME 'kolabOrganizationalUnit'
DESC 'a Kolab organizational unit'
SUP organizationalUnit STRUCTURAL
MAY ( c $
mail $
kolabDeleteflag $
alias ) )
+
# kolab groupOfNames with extra kolabDeleteflag
objectclass ( 1.3.6.1.4.1.19414.3.2.5
NAME 'kolabGroupOfNames'
DESC 'Kolab group of names (DNs) derived from RFC2256'
SUP groupOfNames STRUCTURAL
MAY kolabDeleteflag )
diff --git a/rfc2739.schema b/rfc2739.schema
index 406aa8d..5525fc7 100644
--- a/rfc2739.schema
+++ b/rfc2739.schema
@@ -1,98 +1,132 @@
+# (c) 2004 Martin Konold <martin.konold@erfrakon.de>
+
+# This schema is derived from RFC 2739 and may act as a substitute
+#
+# Copyright (C) The Internet Society (2000). All Rights Reserved.
#
-# http://www.faqs.org/rfcs/rfc2739.html
-#
-# From the RFC:
-# The calCalURI contains the URI to a snapshot of the user's entire
-# default calendar. The calFBURL contains the URI to the user's default
-# busy time data. The calCAPURI represents contains a URI that can be
-# used to communicate with the user's calendar. The calCalAdrURI
-# contains a URI that points to the location to which event requests
-# should be sent for that user.
+# This document and translations of it may be copied and furnished to
+# others, and derivative works that comment on or otherwise explain it
+# or assist in its implementation may be prepared, copied, published
+# and distributed, in whole or in part, without restriction of any
+# kind, provided that the above copyright notice and this paragraph are
+# included on all such copies and derivative works. However, this
+# document itself may not be modified in any way, such as by removing
+# the copyright notice or references to the Internet Society or other
+# Internet organizations, except as needed for the purpose of
+# developing Internet standards in which case the procedures for
+# copyrights defined in the Internet Standards process must be
+# followed, or as required to translate it into languages other than
+# English.
#
-# The calOtherCalURIs is a multi-valued property containing URIs to
-# snapshots of other calendars that the user may have. The
-# calOtherFBURLs is a multi-valued property containing URIs to other
-# free/busy data that the user may have. The calOtherCAPURIs attribute
-# is a multi-valued property containing URIs to other calendars that
-# the user may have. The calOtherCalAdrURIs attribute is a multi-valued
-# property containing URIs to other locations that a user may want
-# event requests sent to.
+# The limited permissions granted above are perpetual and will not be
+# revoked by the Internet Society or its successors or assigns.
#
-# There is no predetermined order to the values in either multi-valued
-# property.
+# This document and the information contained herein is provided on an
+# "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
+# TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+# BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
+# HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-# EQUALITY caseIgnoreIA5Match
+# slapd.conf then looks like
+# include /kolab/etc/openldap/schema/core.schema
+# include /kolab/etc/openldap/schema/cosine.schema
+# include /kolab/local/etc/openldap/schema/inetorgperson.schema
+# include /kolab/local/etc/openldap/schema/rfc2739.schema
+# include /kolab/local/etc/openldap/schema/kolab2.schema
+
+#
+################################
+# rfc 2739 calendar attributes #
+################################
-attribute (1.2.840.113556.1.4.478
+# contains the URI to a snapshot of the user's entire
+# default calendar
+attributetype (1.2.840.113556.1.4.478
NAME 'calCalURI'
- DESC 'Snapshot of users entire default calendar'
- EQUALITY caseIgnoreIA5Match
- SUBSTR caseIgnoreIA5SubstringsMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
- )
+ DESC 'RFC2739: URI of entire default calendar'
+ EQUALITY caseIgnoreMatch
+ SUBSTRING caseIgnoreMatch
+ SYNTAX 'IA5String'
+ USAGE userApplications )
-attribute (1.2.840.113556.1.4.479
+# contains the URI to the user's default
+# busy time data
+attributetype (1.2.840.113556.1.4.479
NAME 'calFBURL'
- DESC 'URI of the uses free and busy information'
- EQUALITY caseIgnoreIA5Match
- SUBSTR caseIgnoreIA5SubstringsMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
- )
+ DESC 'RFC2739: URI to the users default freebusy data'
+ EQUALITY caseIgnoreMatch
+ SUBSTRING caseIgnoreMatch
+ SYNTAX 'IA5String'
+ USAGE userApplications )
-attribute (1.2.840.113556.1.4.480
+# contains a URI that can be used to communicate with
+# the user's calendar
+attributetype (1.2.840.113556.1.4.480
NAME 'calCAPURI'
- DESC 'URI used to communicate with the users calendar'
- EQUALITY caseIgnoreIA5Match
- SUBSTR caseIgnoreIA5SubstringsMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
- )
+ DESC 'RFC2739: URI used to communicate with the users calendar'
+ EQUALITY caseIgnoreMatch
+ SUBSTRING caseIgnoreMatch
+ SYNTAX 'IA5String'
+ USAGE userApplications )
-attribute (1.2.840.113556.1.4.481
+# contains a URI that points to the location to which event
+# requests should be sent for that user
+attributetype (1.2.840.113556.1.4.481
NAME 'calCalAdrURI'
- DESC 'URI to which event requests should be sent for the user'
- EQUALITY caseIgnoreIA5Match
- SUBSTR caseIgnoreIA5SubstringsMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
- )
+ DESC 'RFC2739: URI for event equests destination'
+ EQUALITY caseIgnoreMatch
+ SUBSTRING caseIgnoreMatch
+ SYNTAX 'IA5String'
+ USAGE userApplications )
-attribute (1.2.840.113556.1.4.482
+# multi-valued property containing URIs to snapshots of
+# other calendars that the user may have
+attributetype (1.2.840.113556.1.4.482
NAME 'calOtherCalURIs'
- DESC 'URIs to non-default calendars belonging to the user'
- EQUALITY caseIgnoreIA5Match
- SUBSTR caseIgnoreIA5SubstringsMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
- )
+ DESC 'RFC2739: multi-value URI for snapshots of other calendars'
+ EQUALITY caseIgnoreMatch
+ SUBSTRING caseIgnoreMatch
+ SYNTAX 'IA5String'
+ MULTI-VALUE
+ USAGE userApplications )
-attribute (1.2.840.113556.1.4.483
+# multi-valued property containing URIs to snapshots of other
+# free/busy data that the user may have
+attributetype (1.2.840.113556.1.4.483
NAME 'calOtherFBURLs'
- DESC 'URIs to non-default free and busy information files'
- EQUALITY caseIgnoreIA5Match
- SUBSTR caseIgnoreIA5SubstringsMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
- )
+ DESC 'RFC2739: multi-value URI for other free/busy data'
+ EQUALITY caseIgnoreMatch
+ SUBSTRING caseIgnoreMatch
+ SYNTAX 'IA5String'
+ MULTI-VALUE
+ USAGE userApplications )
-attribute (1.2.840.113556.1.4.484
+# multi-valued property containing URI to other calendars that
+# the user may have
+attributetype (1.2.840.113556.1.4.484
NAME 'calOtherCAPURIs'
- DESC 'URIs for communicating with non-default calendars'
- EQUALITY caseIgnoreIA5Match
- SUBSTR caseIgnoreIA5SubstringsMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
- )
+ DESC 'RFC2739: multi-value URI to other calendars'
+ EQUALITY caseIgnoreMatch
+ SUBSTRING caseIgnoreMatch
+ SYNTAX 'IA5String'
+ MULTI-VALUE
+ USAGE userApplications )
-attribute (1.2.840.113556.1.4.485
+# URIs to other locations that a user may want
+# event requests sent to
+attributetype (1.2.840.113556.1.4.485
NAME 'calOtherCalAdrURIs'
- DESC 'Destinations for event requests to non-default calendars'
- EQUALITY caseIgnoreIA5Match
- SUBSTR caseIgnoreIA5SubstringsMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
- )
+ DESC 'RFC2739: multi-value URI to other request destinations'
+ EQUALITY caseIgnoreMatch
+ SUBSTRING caseIgnoreMatch
+ SYNTAX 'IA5String'
+ MULTI-VALUE
+ USAGE userApplications )
objectclass (1.2.840.113556.1.5.87
- NAME 'calEntry'
- DESC 'Calendering and Free Busy information'
- SUP top AUXILIARY
- MAY (calCalURI $ calFBURL $ calCAPURI $ calCalAdrURI $
- calOtherCalURIs $ calOtherFBURLs $ calOtherCAPURIs $
- calOtherCalAdrURIs
- )
- )
+ NAME 'calEntry'
+ DESC 'RFC2739: Calendar Entry'
+ SUP top AUXILIARY
+ MAY (calCalURI calFBURL calOtherCalURIs calOtherFBURLs calCAPURI
+ calOtherCAPURLs ) )

File Metadata

Mime Type
text/x-diff
Expires
Wed, Feb 4, 11:30 AM (8 h, 58 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
427619
Default Alt Text
(19 KB)

Event Timeline