<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 4.0.5) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-mimi-room-policy-04" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="MIMI Room Policy">Room Policy for the More Instant Messaging Interoperability (MIMI) Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-mimi-room-policy-04"/>
    <author fullname="Rohan Mahy">
      <organization>Rohan Mahy Consulting Services</organization>
      <address>
        <email>rohan.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="July" day="06"/>
    <area>Applications and Real-Time</area>
    <workgroup>More Instant Messaging Interoperability</workgroup>
    <keyword>room policy</keyword>
    <abstract>
      <?line 34?>

<t>This document describes a set of concrete room policies for the
More Instant Messaging Interoperability (MIMI) Working Group. It describes
several independent properties and policy attributes which can be combined
to model a wide range of chat and multimedia conference types.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-mimi.github.io/mimi-room-policy/draft-ietf-mimi-room-policy.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-mimi-room-policy/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        More Instant Messaging Interoperability Working Group mailing list (<eref target="mailto:mimi@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/mimi/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/mimi/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-mimi/mimi-room-policy"/>.</t>
    </note>
  </front>
  <middle>
    <?line 41?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The MIMI architecture <xref target="I-D.ietf-mimi-arch"/> describes how each room
has an associated policy. Providers offer a "policy envelope"
of supported and allowed policy settings, from which the creator of a room
selects a specific room policy. The room policy might further allow
individual participants to make specific choices (for example, allowing
but not requiring read-message notifications), while constraining other
choices (for example, prohibiting self-deleting messages). Individual
users can examine the room policy to determine if it is consistent with
policies they accept either before or immediately on joining a room.
<xref section="4.4" sectionFormat="of" target="I-D.ietf-mimi-arch"/></t>
      <t>Making rooms interoperable across existing clients is challenging, as rooms
and clients can support different policies and capabilities across vendors
and providers. Our goal is to balance the policy and authorization goals of
the room with the policy and authorization goals of the end user, so we can support a broad range of vendors and providers.</t>
      <t>Each room is owned by one provider at a time. The owning provider controls the range of acceptable policies. The user responsible for the room can further choose among the acceptable policies. Users (regardless if on other providers) can either accept the policies of the room or not.</t>
      <t>However we want to make it as easy as possible for clients from other providers to comply with the room policy primitives without enumerating specific features or requiring all clients implementations to present an identical user experience. An important aspect of this is the system of configurable Role-based access control with granular capabilities per role (described in <xref target="roles"/>).
Each user in the participant list (defined in <xref target="I-D.ietf-mimi-protocol"/>) has
exactly one role. By virtue of a user's credential, a user might also be
<em>preauthorized</em> with a specific role as described in <xref target="preauth"/>.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t><strong>Room ID</strong>:
An identifier which uniquely identifies a room.</t>
      <t><strong>User ID</strong>:
An internal identifier which uniquely identifies a user.</t>
      <t><strong>Nickname</strong>:
The identifier by which a user is referred inside a room. Depending on the context it may be a display name, handle, pseudonym, or temporary identifier. The nickname in one room need not correlate with the nickname for the same user in a different room.</t>
      <t><strong>Client ID</strong>:
An internal identifier which uniquely identifies one client/device instance of one user account.</t>
      <t><strong>Persistent vs. Temporary rooms</strong>:
A temporary room is no longer joinable once the last participant exits whereas a persistent room is not destroyed when the last participant exist. As MLS has no notion of a group with no members, a persistent room could consist of a sequence of distinct MLS groups, zero or one of which would exist at a time.</t>
      <section anchor="moderation-terms">
        <name>Moderation Terms</name>
        <t><strong>Knock</strong>:
To request entry into a room.</t>
        <t><strong>Ban</strong>:
To remove a user from a room such that the user is not allowed to re-enter the room (until and unless the ban has been removed). It is distinct from merely removing a user from a room.</t>
        <t><strong>Kick</strong>:
To temporarily remove a participant's clients from a room. The user is allowed to re-enter the room at any time.</t>
        <t><strong>Voice (noun)</strong>:
The privilege to send messages in a room.</t>
        <t><strong>Revoke Voice</strong>:
To remove the permission to send messages in a room.</t>
        <t><strong>Grant Voice</strong>:
To grant the permission to send messages in a room.</t>
      </section>
    </section>
    <section anchor="roles">
      <name>Role-Based Access Control</name>
      <t>Most instant messaging systems have a concept of room membership being managed by a set of moderators or administrators, or collectively managed by existing members.
In some cases, rooms are completely open to new joiners unless they have been banned in some way.
In an enterprise context, it is also common (but not required) for users from a particular domain, group, or workgroup to be pre-authorized to add themselves to various types of rooms.
All these variations of room access are managed in MIMI using roles, capabilities (<xref target="caps"/>), and preauthorization (<xref target="preauth"/>).</t>
      <t>The Role-Based Access Control component contains a list of all the roles in the room, and the capabilities associated with them.
It contains a <tt>role_index</tt>, which is used to refer to the role elsewhere. (Note that role indexes might not be contiguous.)
The <tt>role_index</tt> zero is reserved to refer to a participant that does not (yet) or no longer appears (or will no longer appear) in the participant list.</t>
      <t>The component also contains a <tt>role_name</tt> (a human-readable text string name for the
role), and a <tt>role_description</tt> (another string, which can have zero length).</t>
      <t>Each Role also can contain constraints on the minimum and maximum number of participants, and the minimum and maximum number of active participants.
If the minimum number is zero, there is no minimum number of participants for that particular role.
If there is no maximum number of participants for a particular role, that parameter is absent.</t>
      <ul empty="true">
        <li>
          <t>If the maximum number of active participants is zero, then no participants are allowed to have clients in the room's MLS group.</t>
        </li>
      </ul>
      <t>The <tt>authorized_role_changes</tt> field is used to provide fine-grained control about which transitions are allowed when adding and removing participants and when moving participants to new roles, including banning/unbanning, and promoting/demoting to or from roles with moderator or administrator privileges.
A more detailed discussion is in the description of the specific capabilities in the next section.</t>
      <ul empty="true">
        <li>
          <t>This design results in each participant only having a single role at a time, with a single list of capabilities and an explicit list of allowed role transitions. It makes the authorization process for a verifier consistent regardless of the complexity of the set of authorization rules.</t>
        </li>
      </ul>
      <t>Some examples are provided in <xref target="role-examples"/>.</t>
      <t>RoleData is the format of the <tt>data</tt> field inside the ComponentData struct for the Role-Based Access Control component in the <tt>app_data_dictionary</tt> GroupContext extension defined in <xref target="I-D.ietf-mls-extensions"/>.</t>
      <sourcecode type="tls-presentation"><![CDATA[
/* See MIMI Capability Types IANA registry */
uint16 CapabilityType;

struct {
   uint32 from_role_index;
   uint32 target_role_indexes<V>;
} SingleSourceRoleChangeTargets;

struct {
  uint32 role_index;
  opaque role_name<V>;
  opaque role_description<V>;
  CapabilityType role_capabilities<V>;
  uint32 minimum_participants_constraint;
  optional uint32 maximum_participants_constraint;
  uint32 minimum_active_participants_constraint;
  optional uint32 maximum_active_participants_constraint;
  SingleSourceRoleChangeTargets authorized_role_changes<V>;
} Role;

struct {
  Role roles<V>;
} RoleData;

RoleData roles_list;
RoleData RoleUpdate;
]]></sourcecode>
      <t>RoleUpdate (which has the same format as RoleData) is the format of the <tt>update</tt> field inside the AppDataUpdate struct in an AppDataUpdate Proposal for the Role-Based Access Control component.
If the contents of the <tt>update</tt> field are valid and if the proposer is authorized to generate such an update, the value of the <tt>update</tt> field completely replaces the value of the <tt>data</tt> field.</t>
      <ul empty="true">
        <li>
          <t>Note that in the MIMI environment, changing the definitions of roles is anticipated to be very rare over the lifetime of a room (for example changing a room which has grown dramatically from cooperatively managed by all participants to explicitly moderated or administered).</t>
        </li>
      </ul>
      <t>Changing Role definitions is sufficiently disruptive, that an update to this component is not valid if it appear in the same commit as any Participant List change.</t>
    </section>
    <section anchor="preauth">
      <name>Preauthorized Users</name>
      <t>Preauthorized users are MIMI users and external senders that have authorization to adopt a role in a room by virtue of certain credential claims or properties, as opposed to being individually enumerated in the participant list.
For example, a room for employee benefits might be available to join with the regular participant role to all full-time employees with a residence in a specific country; while anyone working in the human resources department might be able to join the same room as a moderator.
This data structure is consulted in two situations: for external joins (external commits) and external proposals when the requester does not already appear in the participant list; and separately when an existing participant explicitly tries to change its <em>own</em> role.</t>
      <ul empty="true">
        <li>
          <t>Only consulting Preauthorized users in these cases prevents several attacks. For example, it prevents an explicitly banned user from rejoining a group based on a preauthorization.</t>
        </li>
      </ul>
      <t>PreAuthData is the format of the <tt>data</tt> field inside the ComponentData struct for the Preauthorized Participants component in the <tt>application_data</tt> GroupContext extension.</t>
      <t>The individual <tt>PreAuthRoleEntry</tt> rules in <tt>PreAuthData</tt> are consulted one at a time.
A <tt>PreAuthRoleEntry</tt> matches for a requester when every <tt>Claim.claim_id</tt> has a corresponding claim in the requester's MLS Credential which exactly matches the corresponding <tt>claim_value</tt>.
When the rules in a Preauthorized users struct match multiple roles, the requesting client receives the first role which matches its claims.</t>
      <ul empty="true">
        <li>
          <t><strong>TODO</strong>: refactor Claims</t>
        </li>
      </ul>
      <sourcecode type="tls-presentation"><![CDATA[
struct {
  /* MLS Credential Type of the "claim"  */
  CredentialType credential_type;
  /* the binary representation of an X.509 OID, a JWT claim name  */
  /* string, or the CBOR map claim key in a CWT (an int or tstr)  */
  opaque id<V>;
} ClaimId;

struct {
  ClaimId claim_id;
  opaque claim_value<V>;
} Claim;

struct {
  /* when all claims in the claimset are satisfied, the claimset */
  */ is satisfied */
  Claim claimset<V>;
  Role target_role;
} PreAuthRoleEntry;

struct {
  PreAuthRoleEntry preauthorized_entries<V>;
} PreAuthData;

PreAuthData preauth_list;
PreAuthData PreAuthUpdate;
]]></sourcecode>
      <!--
struct {
  select (Credential.credential_type) {
    case basic:
        struct {}; /* only identity */
    case x509:
        /* ex: subjectAltName (2.5.29.17) = hex 06 03 55 1d 1e */
        opaque oid<V>;
        /* for sequence or set types, the specific item (1-based) */
        /* in the collection. zero means any item in a collection */
        uint8 ordinal;
    case jwt:
        opaque json_path<V>;
    case cwt:
        CborKeyNameOrArrayIndex cbor_path<V>;
  };
} Claim;

struct {
    /* a CBOR CDE encoded integer, tstr, bstr, or tagged version of */
    /* any of those map key types. Ex: -1 = 0x20, "hi" = 0x626869,  */
    /* 1(3600) = 0xC1190E10 */
    opaque cbor_encoded_claim<V>;
    optional uint array_index;
} CborKeyNameOrArrayIndex;
-->

<t>PreAuthUpdate (which has the same format as PreAuthData) is the format of the <tt>update</tt> field inside the AppDataUpdate struct in an AppDataUpdate Proposal for the Preauthorized Participants component.
If the contents of the <tt>update</tt> field are valid and if the proposer is authorized to generate such an update, the value of the <tt>update</tt> field completely replaces the value of the <tt>data</tt> field.</t>
      <ul empty="true">
        <li>
          <t>As with the definition of roles, in MIMI it is not expected that the definition of Preauthorized users would change frequently. Instead the claims in the underlying credentials would be modified without modifying the preauthorization policy.</t>
        </li>
      </ul>
      <t>Changing Preauthorized user definitions is sufficiently disruptive, that an update to this component is not valid if it appears in the same commit as any Participant List change, except for user removals.</t>
      <t>Because the Preauthorized users component usually authorizes non-members, it is also a natural choice for providing concrete authorization for policy enforcing systems incorporated into or which run in coordination with the MIMI Hub provider or specific MLS Distribution Services. For example, a preauthorized role could allow the Hub to remove participants and to ban them, but not to add any users or devices. This unifies the authorization model for members and non-members.</t>
    </section>
    <section anchor="base-room-policy-component-syntax">
      <name>Base Room policy component syntax</name>
      <t>The following format is an MLS component which expresses top-level policy constraints, including global rules related to how membership is interpreted.
The rest of the rules about membership (the bulk) are expressed using roles <xref target="roles"/>, capabilities <xref target="caps"/>, and preauthorization <xref target="preauth"/>.</t>
      <t>Rooms with <tt>fixed_membership</tt> set to true (fixed-membership rooms) have the list of participants specified when they are created.
While clients of existing participants can be added, other users cannot be added, so none of its non-zero, non-banned roles can contain the <tt>canAddParticipant</tt> capability.
Ordinary users cannot leave or be removed, however a user can remove all its clients from the associated MLS group.
The most common case of a fixed-membership room is a 1:1 conversation.
This room membership style is used to implement Direct Message (DM) and Group DM features.
Only a single fixed-membership room can exist for any unique set of participants.</t>
      <t>In rooms with <tt>parent_dependent</tt> set to true (a parent-dependent room), the list of participants of the room <bcp14>MUST</bcp14> be a strict subset of the participants of the parent room.
If a user leaves or is removed from the parent room, that user is automatically removed from any parent-dependent rooms of that parent.
A parent-dependent room is always hosted on the same Hub as the parent room.</t>
      <t>If <tt>parent-dependent</tt> is true, the <tt>parent_room</tt> <bcp14>MUST</bcp14> be set with the room ID of the parent. Otherwise the field is zero-length.</t>
      <ul empty="true">
        <li>
          <t>Note: A room can be both <tt>fixed_membership</tt> and <tt>parent_dependent</tt>, for example, for room used for a multi-media call of clients in a Group DM.</t>
        </li>
      </ul>
      <t>If <tt>multi_device</tt> is true (the default), the MLS group may contain multiple clients per user.
If false only a single client can be an MLS member at one time.
<!--
Multi-device vs. Single-device:
A multi-device room can have multiple simultaneous clients of the same user as participants in the room. A single-device room can have a maximum of one client per user in the room at any moment.
-->
      </t>
      <t>When <tt>max_clients</tt> has a value, the room's associated MLS group <bcp14>MUST NOT</bcp14> have more clients than the provided value.
Likewise when <tt>max_users</tt> has a value, the room <bcp14>MUST NOT</bcp14> have more non-banned entries in the participant list than that value.</t>
      <artwork><![CDATA[
enum {
  false(0),
  true(1)
} bool;

struct {
    bool fixed_membership;
    bool parent_dependant;
    Uri parent_room<V>;
    bool multi_device;
    optional uint32 max_clients;
    optional uint32 max_users;
    bool pseudonyms_allowed;
    bool persistent_room;
    bool discoverable;
    Component policy_component_ids<V>;
} BaseRoomPolicy;

BaseRoomPolicy BaseRoomData;
BaseRoomPolicy BaseRoomUpdate;
]]></artwork>
      <t>If <tt>pseudonyms_allowed</tt> is true, clients in the MLS group are free to use pseudonymous identifiers in their MLS credentials.
Otherwise the policy of the room is that "real" long-term identifiers are required in MLS credentials in the room's corresponding MLS group.</t>
      <t>If <tt>persistent_room</tt> is false, the room will be automatically inaccsessible when the corresponding MLS group is destroyed (when there are no clients in the group).
If <tt>persistent_room</tt> is true, the room policy will remain and a client whose user has appropriate authorization can create a new MLS group for the same room.</t>
      <t>If <tt>discoverable</tt> is true, the room is searchable in some way.
Presumably this means that if <tt>discoverable</tt> is false, the only way to join the room in a client user interface is to be added by an administrator or to use a joining link.</t>
      <t>Finally, the Component IDs of the other policy components that are relevant to this room are listed in the <tt>policy_component_ids</tt> vector, including the <tt>roles_list</tt> (from <xref target="roles"/>) and <tt>preauth_list</tt> components (from <xref target="preauth"/>), if present.
This extensibility mechanism allows for future addition or replacement of new room policies.</t>
    </section>
    <section anchor="other-mimi-policy-components">
      <name>Other MIMI policy components</name>
      <section anchor="status-notification">
        <name>Status Notifications component</name>
        <t>Delivery and Read notifications are a very popular feature of instant messaging systems, but also can leak private information such as the online status of participants.
Such status notifications can also consume a large amount of resources, especially in large rooms.</t>
        <artwork><![CDATA[
enum {
  optional(0),
  required(1),
  forbidden(2)
} Optionality;

struct {
  Optionality delivery_notifications;
  Optionality read_receipts;
} StatusNotificationPolicy;

StatusNotificationPolicy StatusNotificationPolicyData;
StatusNotificationPolicy StatusNotificationPolicyUpdate;
]]></artwork>
        <t>The <tt>delivery_notifications</tt> value can be set to "forbidden", "optional", or "required".
If the value is set to "optional", the client uses its local configuration to determine if it should send delivery notifications in the room.</t>
        <t>The <tt>read_receipts</tt> value can be set to "forbidden", "optional", or "required".
If the value is set to "optional", the client uses its local configuration to determine if it should send read receipts in the room.</t>
        <t>The format for delivery notifications and read receipts is described in <xref target="I-D.mahy-mimi-message-status"/>.</t>
      </section>
      <section anchor="join-link">
        <name>Join Link policies component</name>
        <t>Inside the JoinLinkPolicy are several fields that describe the behavior of new join links.</t>
        <t>If the <tt>on_request</tt> field is true, a maximum of one joining link will be persisted in the room policy; the client will need to fetch a joining link out-of-band or generate a valid one for itself before a new one can be generated.
If present, the URI in <tt>link_requests</tt> can be used by the client to request an invite code.</t>
        <t>If the <tt>on_request</tt> field is false, multiple joining links can be generated and persisted.
If links can be generated for multiple users, <tt>multiuser</tt> is true.
The <tt>expiration</tt> field represents the duration in seconds that a new link can be valid after creation.</t>
        <sourcecode type="tls"><![CDATA[
struct {
  bool on_request;
  opaque join_link<V>;
  bool multiuser;
  uint32 expiration;
} JoinLinkPolicy;

JoinLinkPolicy JoinLinkPolicyData;
JoinLinkPolicy JoinLinkPolicyUpdate;
]]></sourcecode>
        <t>The active join links in a room are persisted separately in a JoinLinks Component.</t>
        <sourcecode type="tls"><![CDATA[
struct {
  opaque join_link<V>;
} JoinLink;

JoinLink JoinLinksData<V>;

struct {
  uint32 removedIndices<V>;
  JoinLink added_links<V>;
} JoinLinksUpdate;
]]></sourcecode>
      </section>
      <section anchor="link-preview">
        <name>Link Preview policy component</name>
        <t>Link preview policy is concerned with the safe rendering of explicit or implicit hyperlinks in the text of an instant message.</t>
        <t>The <tt>autodetect_hyperlinks_in_text</tt> setting indicates if a message composer is expected to detect hyperlinks from text which resembles links (ex: <tt>http://example.com</tt>).
The value of <tt>autodetect_hyperlinks_in_text</tt> <bcp14>MUST NOT</bcp14> be <tt>mandatory</tt>.
The <tt>send_link_previews</tt> setting indicates if the sender of a message including a link preview (a desirable feature, but a malicious sender could generate a preview inconsistent with the actual link content) is mandatory, optional, or forbidden.</t>
        <t>The <tt>automatic_link_previews</tt> setting indicates if the receiver of a message generating link previews (a desirable feature, but a potential privacy concern) is mandatory, optional, or forbidden.
The <tt>link_preview_proxy_use</tt> setting indicates if using a specialized link preview proxy is mandatory, optional, or forbidden when link previews are generated.</t>
        <t>The <tt>link_preview_proxy</tt> setting <bcp14>MUST</bcp14> include the URI of a link preview proxy if <tt>link_preview_proxy_use</tt> is <tt>mandatory</tt> or <tt>optional</tt>.</t>
        <sourcecode type="tls"><![CDATA[
struct {
  Optionality autodetect_hyperlinks_in_text;
  Optionality send_link_previews;
  Optionality automatic_link_previews;
  Optionality link_preview_proxy_use;
  select (link_preview_proxy_use) {
    case mandatory:
      Uri link_preview_proxy<V>;
    case optional:
      Uri link_preview_proxy<V>;
    case forbidden:
      struct {};
  }
} LinkPreviewPolicy;

LinkPreviewPolicy LinkPreviewPolicyData;
LinkPreviewPolicy LinkPreviewPolicyUpdate;
]]></sourcecode>
      </section>
      <section anchor="assets">
        <name>Asset policies component</name>
        <t>Assets refer to attached files, images, audio files, and video files.</t>
        <t>The <tt>asset_upload_location</tt> could be <tt>unspecified</tt>, indicating any location; <tt>localProvider</tt>, indicating that each client uploads assets to its local provider; or <tt>hub</tt>, indicating that all clients upload assets to the hub.
Using <tt>localProvider</tt> is <bcp14>RECOMMENDED</bcp14>.</t>
        <t>The <tt>asset_upload_domains</tt> is a list of <tt>asset_upload_destinations</tt> per <tt>provider</tt> domain name.
If the <tt>asset_upload_location</tt> is <tt>hub</tt>, only one <tt>provider</tt> matching the hub domain is present in <tt>asset_upload_domains</tt>.</t>
        <t>Unless <tt>asset_upload_location</tt> is <tt>unspecified</tt>, the clients verify that assets in the host part of the <tt>url</tt> of any MIMI content <xref target="I-D.ietf-mimi-content"/> ExternalPart corresponds to an entry in <tt>asset_upload_domains</tt>.
If the <tt>asset_upload_location</tt> is <tt>localProvider</tt> the <tt>asset_upload_domains</tt> list is from the <tt>provider</tt> domain name that exactly matches the sender URI domain name.</t>
        <t><tt>download_privacy</tt> describes the mechanisms acceptable for downloading assets.
The <tt>allowed_download_types</tt> and <tt>forbidden_download_types</tt> specify the download mechanisms which are are allowed and forbidden, respectively.
The <tt>default_download_type</tt> is the default or suggested download mechanism.
<tt>direct</tt> refers to client direct download as described in <xref section="5.10.1" sectionFormat="of" target="I-D.ietf-mimi-protocol"/>.
<tt>hubProxy</tt> refers to client download through a proxy on the hub as described in <xref section="5.10.2" sectionFormat="of" target="I-D.ietf-mimi-protocol"/>.
<tt>ohttp</tt> refers to client download through Oblivious HTTP <xref target="RFC9458"/> through the hub as described in <xref section="5.10.3" sectionFormat="of" target="I-D.ietf-mimi-protocol"/>.</t>
        <sourcecode type="tls"><![CDATA[
enum {
  unspecified(0),
  localProvider(1),
  hub(2),
  (255)
} AssetUploadLocation;

struct {
  opaque domain<V>;
} DomainName;

struct {
  DomainName provider;
  DomainName asset_upload_destinations<V>;
} ProviderAssetUploadDomains;

enum {
  direct(0),
  hubProxy(1),
  ohttp(2),
  (255)
} DownloadPrivacyType;

struct {
  DownloadPrivacyType allowed_download_types<V>;
  DownloadPrivacyType forbidden_download_types<V>;
  DownloadPrivacyType default_download_type;
} DownloadPrivacy;

struct {
  AssetUploadLocation asset_upload_location;
  ProviderAssetUploadDomains upload_domains<V>;
  DownloadPrivacy download_privacy;
  uint64 max_image;
  uint64 max_audio;
  uint64 max_video;
  uint64 max_attachment;
  MediaType forbidden_media_types<V>;
  optional<MediaType> permitted_media_types<V>;
} AssetPolicy;

AssetPolicy AssetPolicyData;
AssetPolicy AssetPolicyUpdate;
]]></sourcecode>
        <t>The <tt>max_image</tt>, <tt>max_audio</tt>, <tt>max_video</tt>, and <tt>max_attachment</tt> fields indication the maximum size in bytes of the corresponding assets that will be accepted.
These amounts could be further limited at the client according to local policy or at the upload location based on various forms of authorization and quotas.</t>
        <t>The following paragraph refers to fields that use the <tt>MediaType</tt> struct defined in <xref section="6.2.2" sectionFormat="of" target="I-D.ietf-mls-extensions"/>.
<tt>forbidden_media_types</tt> is a list of media types (type and subtype) that are not allowed at all in the room.
If present, <tt>permitted_media_types</tt> is a list of media types that are permitted.
When it is present, media types <bcp14>MUST</bcp14> be one of the entries in the <tt>permitted_media_types</tt> list, and <bcp14>MUST NOT</bcp14> be in the <tt>forbidden_media_types</tt> list.
If a media type with no parameters (for example, <tt>text/markdown</tt>) is present in one of these lists, that entry matches all media types of that type and subtype that contain additional parameters.</t>
      </section>
      <section anchor="logging">
        <name>Logging policy component</name>
        <t>Some messaging systems (for example in the health care or financial services sectors) often require mandatory logging of calls and messages.
The goal of these policies is to make detection of such policies automatic, to allow clients to make appropriate local policy decisions when such policies exist.</t>
        <t>Inside the LoggingPolicy, the <tt>logging</tt> field can be forbidden, optional, or required.
If <tt>logging</tt> is forbidden then the other fields are empty.
If logging is required, the list of <tt>logging_clients</tt> needs to contain at least one logging URI.
Each provider should have no more than one logging client at a time in a room.
The <tt>machine_readable_policy</tt> and <tt>human_readable_policy</tt> fields optionally contain pointers to the owning provider's machine readable and human readable logging policies, respectively.
If logging is optional and there is at least one <tt>logging_client</tt> then logging is active for the room.</t>
        <sourcecode type="tls"><![CDATA[
struct {
  Optionality logging;
  select (logging) {
    case mandatory:
      Uri logging_clients<V>;
      Uri machine_readable_policy;
      Uri human_readable_policy;
    case optional:
      Uri logging_clients<V>;
      Uri machine_readable_policy;
      Uri human_readable_policy;
    case forbidden:
      struct {};
  }
} LoggingPolicy;

LoggingPolicy LoggingPolicyData;
LoggingPolicy LoggingPolicyUpdate;
]]></sourcecode>
      </section>
      <section anchor="history">
        <name>Chat history policy component</name>
        <t>One of the most requested features of instant messaging systems is that new joiners can view some or all of the message history before joining.
While useful, it has serious implications to the privacy of existing members, and substantially weakens forward secrecy (FS) (See <xref section="8.2.2" sectionFormat="of" target="RFC9750"/>).</t>
        <t>Inside the HistoryPolicy, if <tt>history_sharing</tt> is forbidden, this means that clients (including bots) are expected to not to share chat history with new joiners, in which case <tt>roles_that_can_share</tt> is empty, <tt>automatically_share</tt> is false, and <tt>max_time_period</tt> is zero.
Otherwise <tt>roles_that_can_share</tt> is a list of roles that are authorized to share history (for example, only admins and owners can share). The role index zero (non-participant) and one (banned) cannot be used in the <tt>who_can_share</tt> list, nor can any role where <tt>max_active_participants</tt> is zero.
If <tt>automatically_share</tt> is true, clients can share history with new joiners without user initiation.
The history that is shared is limited to <tt>max_time_period</tt> seconds worth of history.</t>
        <sourcecode type="tls"><![CDATA[
struct {
  Optionality history_sharing;
  select (history_sharing) {
    case mandatory:
      uint32 roles_that_can_share<V>;
      bool automatically_share;
      uint32 max_time_period;
    case optional:
      uint32 roles_that_can_share<V>;
      bool automatically_share;
      uint32 max_time_period;
    case forbidden:
      struct {};
  }
} HistoryPolicy;

HistoryPolicy HistoryPolicyData;
HistoryPolicy HistoryPolicyUpdate;
]]></sourcecode>
      </section>
      <section anchor="bots">
        <name>Chat bot policy component</name>
        <t>There are several types of chat bot in instant messaging systems, some of which only interact with the local client.</t>
        <t>Inside the BotPolicy there is a list of <tt>allowed_bots</tt>, each of which has several fields.
The <tt>name</tt>, <tt>description</tt>, and <tt>homepage</tt> are merely descriptive.</t>
        <t>If <tt>local_client_bot</tt> is true, the bot would not act as a participant; it would have access to the contents of the room only with another client operated by a (presumably human) user.</t>
        <t>The <tt>bot_role_index</tt> indicates the role index in which the bot operates; this controls the capabilities of the bot.
A <tt>bot_role_index</tt> of zero indicates that the bot is not a active participant in the room.
A bot with <tt>local_client_bot</tt> set to true has a <tt>bot_role_index</tt> of 0.</t>
        <t>If <tt>can_target_message_in_group</tt> is true it indicates that the chat bot can send an MLS targeted message (see Section 2.2 of <xref target="I-D.ietf-mls-extensions"/>) or use a different conversation or out-of-band channel to send a message to specific individual users in the room.</t>
        <t>If <tt>per_user_content</tt> is true, the chat bot is allowed to send messages with distinct content to each member.
(For example a poker bot could deal a different hand to each user in a chat).</t>
        <t>Users could set policies to reject or leave groups with bots rights that are inconsistent with the user's privacy goals.</t>
        <sourcecode type="tls"><![CDATA[
struct {
  opaque name<V>;
  opaque description<V>;
  Uri homepage;
  bool local_client_bot;
  uint32 bot_role_index;
  bool can_target_message_in_group;
  bool per_user_content;
} Bot;

struct {
  Bot allowed_bots<V>;
} BotPolicy;

BotPolicy BotPolicyData;
BotPolicy BotPolicyUpdate;
]]></sourcecode>
      </section>
      <section anchor="message-expiration">
        <name>Message expiration policy component</name>
        <t>Many instant messaging systems have an automatically expiring messages feature.</t>
        <t>If expiring messages are required, optional, or forbidden is controlled by the <tt>expiring_messages</tt> field.</t>
        <t>When <tt>expiring_messages</tt> are required or optional, the <tt>min_expiration_duration</tt> indicates the shortest acceptable expiration duration in seconds.
The <tt>max_expiration_duration</tt> indicates the longest acceptable duration in seconds.
The <tt>default_expiration_duration</tt> optionally indicates a preferred duration in seconds.</t>
        <t>When <tt>expiring_messages</tt> is forbidden, both the <tt>min_expiration_duration</tt> and the <tt>max_expiration_duration</tt> are set to zero, and the <tt>default_expiration_duration</tt> is not present.</t>
        <sourcecode type="tls"><![CDATA[
struct {
  Optionality expiring_messages;
  select (expiring_messages) {
    case mandatory:
      uint32 min_expiration_duration;
      uint32 max_expiration_duration;
      optional uint32 default_expiration_duration;
    case optional:
      uint32 min_expiration_duration;
      uint32 max_expiration_duration;
      optional uint32 default_expiration_duration;
    case forbidden:
      struct {};
  }
} MessageExpiration;

MessageExpiration MessageExpirationData;
MessageExpiration MessageExpirationUpdate;
]]></sourcecode>
      </section>
    </section>
    <section anchor="operational">
      <name>Operational policy component</name>
      <t>Section 7 of the <xref target="RFC9750"/> defines a set of operational
policy considerations that influence interoperability of MLS clients. MIMI
explicitly address a handful of the issues in the document by taking a position on ordering (Proposals referenced in a Commit need to be received before the Commit; the Commit entering a new epoch needs to be received before any other messages in that epoch), privacy of handshake messages (handshakes can be a PublicMessage or SemiPrivateMessage), and GroupInfo storage (committers need to provide a valid GroupInfo to the Hub). The rest of these issues are described here. Just because a topic is listed does not mean that a room needs to take a position; nor different rooms on a Hub need to have different policies for these items.</t>
      <section anchor="some-mls-related-policy-that-could-be-tied-to-a-room">
        <name>Some MLS-related policy that could be tied to a room</name>
        <ul spacing="normal">
          <li>
            <t>any mandatory or forbidden MLS extensions.</t>
          </li>
          <li>
            <t>which proposals are valid to have in a commit, including but not limited to:
            </t>
            <ul spacing="normal">
              <li>
                <t>when, and under what circumstances, a reinitialization proposal is allowed.</t>
              </li>
              <li>
                <t>when proposals from external senders are allowed and how to authorize those proposals.</t>
              </li>
              <li>
                <t>when external joiners are allowed and how to authorize those external commits.</t>
              </li>
              <li>
                <t>which other proposal types are allowed.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>when members should commit pending proposals in a group.</t>
          </li>
          <li>
            <t>when two credentials represent the same client.</t>
          </li>
          <li>
            <t>how long to allow a member to stay in a group without updating its leaf keys before removing them.</t>
          </li>
          <li>
            <t>When and how to pad messages.</t>
          </li>
          <li>
            <t>When to send a reinitialization proposal.</t>
          </li>
          <li>
            <t>How often clients should update their leaf keys.</t>
          </li>
          <li>
            <t>Whether to prefer sending full commits or partial/empty commits.</t>
          </li>
          <li>
            <t>Whether there should be a required_capabilities extension in groups.</t>
          </li>
          <li>
            <t>minimum and maximum lifetime of KeyPackages</t>
          </li>
          <li>
            <t>if last resort KeyPackages are allowed</t>
          </li>
          <li>
            <t>how long to store resumption PSK (how much time and how many epochs)</t>
          </li>
          <li>
            <t>minimum and maximum number past epochs to keep</t>
          </li>
          <li>
            <t>how long to keep unused nonce and key pairs for a sender</t>
          </li>
          <li>
            <t>maximum number of unused key pairs to keep</t>
          </li>
          <li>
            <t>maximum number of steps that clients will move a secret tree ratchet forward in response to a single message before rejecting it</t>
          </li>
          <li>
            <t>tolerance to out of order app messages</t>
          </li>
          <li>
            <t>tolerance to out of order handshake messages</t>
          </li>
          <li>
            <t>handshakes may be which of PublicMessage, PrivateMessage, or SemiPrivateMessage.</t>
          </li>
          <li>
            <t>if external joiners are allowed</t>
          </li>
          <li>
            <t>if external proposals are allowed
            </t>
            <ul spacing="normal">
              <li>
                <t>if so, who can submit</t>
              </li>
              <li>
                <t>which member(s) are responsible for submitting pending proposals</t>
              </li>
            </ul>
          </li>
          <li>
            <t>how a joiner gets access to the ratchet_tree</t>
          </li>
        </ul>
        <t>The structure below describes provides a way to describe many of these parameters.</t>
        <sourcecode type="tls"><![CDATA[
struct {
  ProtocolVersion versions<V>;
  CipherSuite cipher_suites<V>;
  ExtensionType extensions<V>;
  ProposalType proposals<V>;
  CredentialType credentials<V>;
  WireFormats wire_formats<V>;
  ComponentID component_ids<V>;
  ComponentID safe_aad_types<V>;
  MediaType media_types<V>;
  ContentType content_types<V>;
} ExtendedCapabilities;

enum {
  unspecified(0),
  immediate_commit(1),
  random_delay(2),
  (255)
} PendingProposalStrategy;

struct {
  PendingProposalStrategy pending_proposal_strategy;
  select (pending_proposal_strategy) {
    case unspecified:
      struct {};
    case immediate_commit:
      struct {};
    case random_delay:
      uint64 minimum_delay_ms;
      uint64 maximum_delay_ms;
    case extension:
      ComponentID id_of_strategy_params;
  }
} PendingProposalPolicy;

struct {
  uint64 minimum_time;
  uint64 default_time;
  uint64 maximum_time;
} MinDefaultMaxTime;

struct {
  uint8  epoch_tolerance;
  uint16 pad_to_size;
  uint32 max_generations_skipahead;
} AppMessagePolicy;

struct {
  ExtendedCapabilities mandatory_capabilities;
  ExtendedCapabilities default_capabilities;
  ExtendedCapabilities forbidden_capabilities;
  WireFormats handshake_formats<V>;
  bool external_proposal_allowed;
  bool external_commit_allowed;
  PendingProposalPolicy pending_proposal_policy;
  MinDefaultMaxTime LeafNode_update_time;
  AppMessagePolicy app_message_policy;
  unit64 max_kp_lifetime;
  uint64 max_credential_lifetime;
  uint64 resumption_psk_lifetime;
  MinDefaultMaxTime sender_nonce_keypair_lifetime;
  uint32 max_keypairs;
  MinDefaultMaxTime buffer_incoming_message_time;
  uint32 max_buffered_messages;
} OperationalParameters;

OperationalParameters OperationalParametersData;
OperationalParameters OperationalParametersUpdate;
]]></sourcecode>
      </section>
      <section anchor="not-relevant-to-mimi-between-client-and-its-provider">
        <name>Not relevant to MIMI (between client and its provider)</name>
        <ul spacing="normal">
          <li>
            <t>how many KPs to keep active</t>
          </li>
          <li>
            <t>how group IDs are constructed</t>
          </li>
        </ul>
      </section>
      <section anchor="areas-for-future-works">
        <name>Areas for future works</name>
        <t>How to protect and share the GroupInfo objects needed for external joins.</t>
        <t>If an application wishes to detect and possibly discipline members that send malformed commits with the intention of corrupting a group's state, there must be a method for reporting and validating malformed commits.</t>
        <t>MLS requires the following parameters to be defined, which must be the same for two implementations to interoperate:</t>
        <t>Application-level identifiers of public key material (specifically the application_id extension as defined in <xref section="5.3.3" sectionFormat="of" target="RFC9420"/>).</t>
      </section>
    </section>
    <section anchor="caps">
      <name>Role Capabilities</name>
      <t>As described in <xref target="roles"/>, each role has a list of capabilities, which in rare cases could be empty.
When we say that the holder of a capability can take some action, we mean that whatever entity is taking the action (a participant, a potential future participant, or an external party) has a specific entry in the Participant List struct and a corresponding role--or is preauthorized to take action with a specific role via the Preauthorized Users struct--and that the <tt>role_capabilities</tt> list contains the relevant capability.</t>
      <t>Unless otherwise specified, capabilities apply both to sending a set of consistent MLS proposals that could be committed by any member of the corresponding MLS group, and to sending an MLS commit containing a set of consistent MLS proposals.</t>
      <section anchor="membership-capabilities">
        <name>Membership Capabilities</name>
        <t>The membership capabilities below allow authorized holders to update the Participant list, or change the active participants (by removing and adding MLS clients corresponding to those participants), or both.</t>
        <section anchor="adding">
          <name>Adding</name>
          <ul spacing="normal">
            <li>
              <t><tt>canAddParticipant</tt> - the holder of this capability can add another user, that is not already in the participant list, to the participant list.
(This capability does not apply to the holder adding itself.)
The <tt>authorized_role_changes</tt> list in the holder's role is consulted to authorize the added user's target role.
The <tt>authorized_role_changes</tt> list <bcp14>MUST</bcp14> have an entry where the <tt>authorized_role_changes.from_role_index</tt> equals zero, and that entry's <tt>target_role_indexes</tt> list includes the target role.
The proposed action is only authorized if the action respects both the <tt>maximum_participants_constraint</tt> (if present) and <tt>maximum_active_participants_constraint</tt> (if present) for the added user's target role.
When the participant list addition for the target role is authorized, the holder is also authorized to add any MLS clients matching the added user to the room's MLS group .</t>
            </li>
            <li>
              <t><tt>canAddOwnClient</tt> - a holder of this capability that is in the participant list, can add its own client (via an external commit or external proposal); and can add other clients that share the same user identity (via Add proposals) if the holder's client is already a member of the corresponding MLS group.</t>
            </li>
            <li>
              <t><tt>canOpenJoin</tt> - when this capability appears on role zero, any user who is not already in the participant list can add itself externally, with certain conditions.
The <tt>authorized_role_changes</tt> list <bcp14>MUST</bcp14> have an entry with <tt>from_role_index</tt> equal to zero.
The holder can add itself with any non-zero <tt>target_role_indexes</tt> from that entry, if the action respects both the <tt>maximum_participants_constraint</tt> (if present) and <tt>maximum_active_participants_constraint</tt> (if present) for the added user's target role.
<tt>canOpenJoin</tt> <bcp14>MUST NOT</bcp14> appear in any non-zero role.</t>
            </li>
            <li>
              <t><tt>canJoinIfPreauthorized</tt> - when this capability appears on a non-zero role, a client that is not already in the participant list can externally join as that target role if authorized for that role as the first matching role in the Preauthorized users mechanism.
The <tt>authorized_role_changes</tt> list is not consulted for this capability.
The action <bcp14>MUST</bcp14> respect both the <tt>maximum_participants_constraint</tt> (if present) and <tt>maximum_active_participants_constraint</tt> (if present) for the added user's target role.</t>
            </li>
            <li>
              <t><tt>canUseJoinCode</tt> - the holder of this capability can externally join a room using a join code for that room, provided the join code is valid, the join code refers to a valid target role, and both the <tt>maximum_participants_constraint</tt> (if present) and <tt>maximum_active_participants_constraint</tt> (if present) constraints are respected.</t>
            </li>
          </ul>
        </section>
        <section anchor="removing">
          <name>Removing</name>
          <ul spacing="normal">
            <li>
              <t><tt>canRemoveParticipant</tt> - the holder of this capability can propose a) the removal of another user (excluding itself) from the participant list, and b) removal of all of that user's clients, as a single action.
There <bcp14>MUST NOT</bcp14> be any clients of the removed user in the MLS group after the corresponding commit.
A proposer holding this capability consults its role's <tt>authorized_role_changes</tt> entries for an entry where <tt>from_role_index</tt> matches the target user's current role; if the <tt>target_role_indexes</tt> for that entry contains zero, and the <tt>minimum_participants_constraint</tt> and <tt>minimum_active_participants_constraint</tt> are satisfied, the proposal is authorized.</t>
            </li>
            <li>
              <t><tt>canRemoveOwnClient</tt> - the holder of this capability can propose to remove its own client using an MLS Remove or SelfRemove proposal without changing the Participant list.
Due to restrictions in MLS which insure the consistency of the group, this action cannot be committed by the leaving user.
If the <tt>minimum_active_participants_constraint</tt> is satisfied, the proposal is authorized.</t>
            </li>
            <li>
              <t><tt>canRemoveSelf</tt> - the holder of this capability can propose to remove itself from (i.e. leave) the participant list; it <bcp14>MUST</bcp14> simultaneously propose to remove all of its remaining clients from the corresponding MLS group.
Due to restrictions in MLS which insure the consistency of the group, this action cannot be committed by the leaving user.
A proposer holding this capability consults its role's <tt>authorized_role_changes</tt> entries for an entry where <tt>from_role_index</tt> matches its current role; if the <tt>target_role_indexes</tt> for that entry contains zero, and the <tt>minimum_participants_constraint</tt> and <tt>minimum_active_participants_constraint</tt> are satisfied, the proposal is authorized.</t>
            </li>
            <li>
              <t><tt>canKick</tt> - the holder of this capability can propose removal of another participant's clients, without changing the Participant List.
If the <tt>minimum_active_participants_constraint</tt> is satisfied, the proposal is authorized.</t>
            </li>
          </ul>
        </section>
        <section anchor="role-changes">
          <name>Role Changes</name>
          <ul spacing="normal">
            <li>
              <t><tt>canChangeUserRole</tt> - the holder of this capability is authorized to change the role of another participant (but not itself), according to the holder's <tt>authorized_role_changes</tt> list, from a role represented by an entry where the target's current role matches <tt>from_role_index</tt> to any of the non-zero <tt>target_role_indexes</tt> in the same element of <tt>authorized_role_changes</tt>.
The <tt>minimum_participants_constraint</tt> and <tt>minimum_active_participants_constraint</tt> for the target user's current role, and the <tt>maximum_participants_constraint</tt> (if present) and <tt>maximum_active_participants_constraint</tt> (if present) for the target user's target role must also be satisfied.</t>
            </li>
            <li>
              <t><tt>canChangeOwnRole</tt> - the holder of this capability is authorized to change its own role to the first non-zero role it matches in the Preauthorized users component (see <xref target="preauth"/>).
The <tt>authorized_role_changes</tt> list is <em>not</em> consulted.
The <tt>minimum_participants_constraint</tt> and <tt>minimum_active_participants_constraint</tt> for the holder's original role, and the
<tt>maximum_participants_constraint</tt> (if present) and <tt>maximum_active_participants_constraint</tt> (if present) for the holder's target role must also be satisfied.</t>
            </li>
            <li>
              <t><tt>canBan</tt> - the holder of this capability can propose to "ban" another user.
Specifically, a successful ban changes the target user's role to a special "banned" role (if it exists), and removes all the banned user's clients.
The "banned" role always has <tt>role_index</tt> = 1 and <tt>role_name</tt> = "banned" (without quotes).  </t>
              <ul empty="true">
                <li>
                  <t>A "banned" role does not have to exist in a room, but to use the <tt>canBan</tt> and <tt>canUnban</tt> capabilities, the role needs to exist exactly as described above.
While holding <tt>canChangeUserRole</tt> and <tt>canKick</tt> capabilities would allow the same action, it could potentially allow the holder other actions which might be undesirable in some contexts, such as kicking clients without banning.</t>
                </li>
              </ul>
              <t>
A proposer holding this capability consults its role's <tt>authorized_role_changes</tt> entries for an entry where <tt>from_role_index</tt> matches the target user's current role; if the <tt>target_role_indexes</tt> for that entry contains the <tt>role_index</tt> 1; that <tt>role_name</tt> = "banned" for the role with role_index = 1, and the <tt>minimum_participants_constraint</tt> and <tt>minimum_active_participants_constraint</tt> are satisfied, the proposal is authorized.</t>
            </li>
            <li>
              <t><tt>canUnban</tt> - the holder of this capability can propose to "unban" another user.
Specifically, a successful unban changes the target user's role from <tt>role_index</tt> = 1 to another non-zero <tt>role_index</tt> allowed by the holder's <tt>authorized_role_changes</tt> list.
Adding clients for that unbanned user is <em>not</em> authorized by this capability.
The authorization of this capability is identical to the <tt>canChangeUserRole</tt> capability, except that the <tt>from_role_index</tt> for the unbanned user <bcp14>MUST</bcp14> be 1, and the <tt>role_name</tt> of role 1 <bcp14>MUST</bcp14> be "banned".</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="adjust-metadata">
        <name>Adjust metadata</name>
        <t>The holder of each of the following capabilities is authorized to update the Room metadata defined in <xref target="I-D.ietf-mimi-protocol"/>, changing the relevant field:</t>
        <ul spacing="normal">
          <li>
            <t><tt>canChangeRoomName</tt></t>
          </li>
          <li>
            <t><tt>canChangeRoomDescription</tt></t>
          </li>
          <li>
            <t><tt>canChangeRoomAvatar</tt></t>
          </li>
          <li>
            <t><tt>canChangeRoomSubject</tt></t>
          </li>
          <li>
            <t><tt>canChangeRoomMood</tt></t>
          </li>
        </ul>
      </section>
      <section anchor="message-capabilities">
        <name>Message Capabilities</name>
        <t>The capabilities below refer to functionality related to the instant messages, for example sent using the MIMI content format <xref target="I-D.ietf-mimi-content"/>.</t>
        <ul spacing="normal">
          <li>
            <t><tt>canSendMessage</tt> - the holder can send instant messages to the room. Setting specific message fields may require additional capabilities.</t>
          </li>
          <li>
            <t><tt>canReceiveMessage</tt> - the holder can receive instant messages from the room.</t>
          </li>
          <li>
            <t><tt>canCopyMessage</tt> - the holder can copy content from a received instant
message.</t>
          </li>
          <li>
            <t><tt>canReportAbuse</tt> - the holder can report a franked instant message as abusive.</t>
          </li>
          <li>
            <t><tt>canReplyToMessage</tt> - the holder can send a message replying to another message.</t>
          </li>
          <li>
            <t><tt>canReactToMessage</tt> - the holder can send a reaction, replying to another message, and using the "reaction" disposition.</t>
          </li>
          <li>
            <t><tt>canEditReaction</tt> - the holder can replace its own previous reaction with another reaction</t>
          </li>
          <li>
            <t><tt>canDeleteOwnReaction</tt> - the holder can retract (unlike) its own previous reaction.</t>
          </li>
          <li>
            <t><tt>canDeleteOtherReaction</tt> - the holder can delete the reaction of another user's previous reaction</t>
          </li>
          <li>
            <t><tt>canEditOwnMessage</tt> - the holder can edit the content of one of its own previously sent messages</t>
          </li>
          <li>
            <t><tt>canDeleteOwnMessage</tt> - the holder can retract one of its own previously sent messages</t>
          </li>
          <li>
            <t><tt>canDeleteOtherMessage</tt> - the holder can retract messages for other users.</t>
          </li>
          <li>
            <t><tt>canStartTopic</tt> - the holder can set the topic for a message</t>
          </li>
          <li>
            <t><tt>canReplyInTopic</tt> - the holder can send a message replying to a previous message, using the same topic as the original sender.</t>
          </li>
          <li>
            <t><tt>canEditOwnTopic</tt> - the holder can change the topic of a previously sent message</t>
          </li>
          <li>
            <t><tt>canEditOtherTopic</tt> - the holder can change the topic of a message previously sent by another user.</t>
          </li>
          <li>
            <t><tt>canSendLink</tt> - the holder can send an inline link</t>
          </li>
          <li>
            <t><tt>canSendLinkPreview</tt> - the holder can send an inline link with an associated
preview.</t>
          </li>
          <li>
            <t><tt>canFollowLink</tt> - the holder can open a sent inline link.</t>
          </li>
          <li>
            <t><tt>canCopyLink</tt> - the holder can copy the URL of a sent inline link.</t>
          </li>
        </ul>
        <t>The Hub can enforce whether a member can send a message. It can also withhold fanout of application messages to clients of a user. The other capabilities in this section can only be enforced by other clients.</t>
      </section>
      <section anchor="asset-capabilities">
        <name>Asset Capabilities</name>
        <ul spacing="normal">
          <li>
            <t><tt>canUploadAttachment</tt> - the holder can upload a file with the "attachent" disposition.</t>
          </li>
          <li>
            <t><tt>canDownloadAttachment</tt> - the holder can download a file with the "attachent" disposition.</t>
          </li>
          <li>
            <t><tt>canUploadImage</tt> - the holder can upload a file with the media type of "image" and the disposition of "render"</t>
          </li>
          <li>
            <t><tt>canDownloadImage</tt> - the holder can download a file with the media type of "image" and the disposition of "render"</t>
          </li>
          <li>
            <t><tt>canUploadVideo</tt> - the holder can upload a file with the media type of "video" and the disposition of "render"</t>
          </li>
          <li>
            <t><tt>canDownloadVideo</tt> - the holder can download a file with the media type of "video" and the disposition of "render"</t>
          </li>
          <li>
            <t><tt>canUploadAudio</tt> - the holder can upload a file with the media type of "audio" and the disposition of "render"</t>
          </li>
          <li>
            <t><tt>canDownloadAudio</tt> - the holder can download a file with the media type of "audio" and the disposition of "render"</t>
          </li>
        </ul>
      </section>
      <section anchor="real-time-media">
        <name>Real-time media</name>
        <t>The MIMI Working has not yet defined requirements for real-time media, however the capabilities below are widely representative of the permissions that would be required.</t>
        <ul spacing="normal">
          <li>
            <t><tt>canStartCall</tt> - the holder can initiate a new real-time call/conference</t>
          </li>
          <li>
            <t><tt>canJoinCall</tt> - the holder can join an existing real-time call/conference</t>
          </li>
          <li>
            <t><tt>canSendAudio</tt> - the holder is authorized to contribute audio in a call/conference.</t>
          </li>
          <li>
            <t><tt>canReceiveAudio</tt> - the holder is authorized to receive audio in a call/conference.</t>
          </li>
          <li>
            <t><tt>canSendVideo</tt> - the holder is authorized to contribute video in a call/conference.</t>
          </li>
          <li>
            <t><tt>canReceiveVideo</tt> - the holder is authorized to receive video in a call/conference.</t>
          </li>
          <li>
            <t><tt>canShareScreen</tt> - the holder is authorized to contribute screen sharing in a call/conference</t>
          </li>
          <li>
            <t><tt>canViewSharedScreen</tt> - the holder is authorized to receive screen sharing in a call/conference</t>
          </li>
        </ul>
      </section>
      <section anchor="disruptive-policy-changes">
        <name>Disruptive Policy Changes</name>
        <ul spacing="normal">
          <li>
            <t><tt>canChangeRoomMembershipStyle</tt> - the holder is authorized to modify the base room membership style.</t>
          </li>
          <li>
            <t><tt>canChangeRoleDefinitions</tt> - the holder is authorized to make changes to the definitions of the Roles component.</t>
          </li>
          <li>
            <t><tt>canChangePreauthorizedUserList</tt> - the holder is authorized to make changes to the Preauthorized Users component.</t>
          </li>
          <li>
            <t><tt>canDestroyRoom</tt> - the holder is authorized to completely destroy the room.</t>
          </li>
          <li>
            <t><tt>canSendMLSReinitProposal</tt> - the holder is authorized to send an MLS ReInit proposal.</t>
          </li>
        </ul>
      </section>
      <section anchor="reserved-capabilities">
        <name>Reserved Capabilities</name>
        <t>The following capability names are reserved for possible future use</t>
        <ul spacing="normal">
          <li>
            <t><tt>canCreateJoinCode</tt></t>
          </li>
          <li>
            <t><tt>canDeleteJoinCode</tt></t>
          </li>
          <li>
            <t><tt>canKnock</tt></t>
          </li>
          <li>
            <t><tt>canAcceptKnock</tt></t>
          </li>
          <li>
            <t><tt>canCreateSubgroup</tt></t>
          </li>
          <li>
            <t><tt>canSendDirectMessage</tt></t>
          </li>
          <li>
            <t><tt>canTargetMessage</tt></t>
          </li>
          <li>
            <t><tt>canChangeOwnName</tt></t>
          </li>
          <li>
            <t><tt>canChangeOwnPresence</tt></t>
          </li>
          <li>
            <t><tt>canChangeOwnMood</tt></t>
          </li>
          <li>
            <t><tt>canChangeOwnAvatar</tt></t>
          </li>
          <li>
            <t><tt>canCreateRoom</tt></t>
          </li>
          <li>
            <t><tt>canChangeMlsOperationalPolicies</tt></t>
          </li>
          <li>
            <t><tt>canChangeOtherPolicyAttribute</tt></t>
          </li>
          <li>
            <t>MLS specific
            </t>
            <ul spacing="normal">
              <li>
                <t>update - update policy</t>
              </li>
              <li>
                <t>PSK - psk policy</t>
              </li>
              <li>
                <t>external proposal - general operational policy rules</t>
              </li>
              <li>
                <t>external commit - general operational policy rules</t>
              </li>
            </ul>
          </li>
        </ul>
        <!--If `knock_allowed` is true, a non-participant can send a knock requesting access to the target room. If false, a user cannot. This option can only be enabled if the membership_style is members-only. The default is false.
-->
<!-- Knock-Enabled vs. Knock-Disabled:
In a knock-enabled room, non-banned users are allowed to programmatically request entry into the room. In a knock-disabled room this functionality is disabled.
-->

</section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This entire document focuses on authorization policy.
TODO More Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>RFC EDITOR: Please replace XXXX throughout with the RFC number assigned to this document.</t>
      <section anchor="new-mls-application-components">
        <name>New MLS application components</name>
        <t>This document registers the following MLS Component Types per <xref section="7.5" sectionFormat="of" target="I-D.ietf-mls-extensions"/>.</t>
        <section anchor="mlsoperationalpolicy-mls-component-type">
          <name>mls_operational_policy MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD0 (suggested value 0x0024)</t>
            </li>
            <li>
              <t>Name: mls_operational_policy</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="operational"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="roleslist-mls-component-type">
          <name>roles_list MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD1 (suggested value 0x0025)</t>
            </li>
            <li>
              <t>Name: roles_list</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="roles"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="preauthlist-mls-component-type">
          <name>preauth_list MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD2 (suggested value 0x0026)</t>
            </li>
            <li>
              <t>Name: preauth_list</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="preauth"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="baseroompolicy-mls-component-type">
          <name>base_room_policy MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD3 (suggested value 0x0027)</t>
            </li>
            <li>
              <t>Name: base_room_policy</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="preauth"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="statusnotificationpolicy-mls-component-type">
          <name>status_notification_policy MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD4 (suggested value 0x0028)</t>
            </li>
            <li>
              <t>Name: status_notification_policy</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="status-notification"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="joinlinkpolicy-mls-component-type">
          <name>join_link_policy MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD5 (suggested value 0x0029)</t>
            </li>
            <li>
              <t>Name: join_link_policy</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="join-link"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="joinlinks-mls-component-type">
          <name>join_links MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD6 (suggested value 0x002A)</t>
            </li>
            <li>
              <t>Name: join_links</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="join-link"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="linkpreviewpolicy-mls-component-type">
          <name>link_preview_policy MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD7 (suggested value 0x002B)</t>
            </li>
            <li>
              <t>Name: link_preview_policy</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="link-preview"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="assetpolicy-mls-component-type">
          <name>asset_policy MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD8  (suggested value 0x002C)</t>
            </li>
            <li>
              <t>Name: asset_policy</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="assets"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="loggingpolicy-mls-component-type">
          <name>logging_policy MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD9 (suggested value 0x002D)</t>
            </li>
            <li>
              <t>Name: logging_policy</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="logging"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="chathistorypolicy-mls-component-type">
          <name>chat_history_policy MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD10 (suggested value 0x002E)</t>
            </li>
            <li>
              <t>Name: chat_history_policy</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="history"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="botpolicy-mls-component-type">
          <name>bot_policy MLS Component Type</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD11 (suggested value 0x002F)</t>
            </li>
            <li>
              <t>Name: bot_policy</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="bots"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
        <section anchor="message-expiration-policy-component">
          <name>Message expiration policy component</name>
          <ul spacing="normal">
            <li>
              <t>Value: TBD12 (suggested value 0x0030)</t>
            </li>
            <li>
              <t>Name: message_expiration_policy</t>
            </li>
            <li>
              <t>Where: GC</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: <xref target="message-expiration"/> of RFCXXXX</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="new-mimi-role-capabilities-registry">
        <name>New MIMI Role Capabilities registry</name>
        <t>This document requests the creation of a new IANA "MIMI Role Capabilities" registry.
The registry should be under the heading of "More Instant Messaging Interoperability (MIMI)".
Assignments to this registry in the range 0x0000 to 0xF000 are via Specification Required policy <xref target="RFC8126"/> using the MIMI Designated Experts.
Assignments in the range 0xF000 to 0xFFFF are for private use.</t>
        <t>Template:</t>
        <ul spacing="normal">
          <li>
            <t>Value: The numeric value of the role capability</t>
          </li>
          <li>
            <t>Name: The name of the role capability</t>
          </li>
          <li>
            <t>Reference: The document where this role capability is defined</t>
          </li>
        </ul>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Name</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0000</td>
              <td align="left">canAddParticipant</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0001</td>
              <td align="left">canRemoveParticipant</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0002</td>
              <td align="left">canAddOwnClient</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0003</td>
              <td align="left">canRemoveOwnClient</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0004</td>
              <td align="left">canOpenJoin</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0005</td>
              <td align="left">canJoinIfPreauthorized</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0006</td>
              <td align="left">canRemoveSelf</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0007</td>
              <td align="left">canCreateJoinCode (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0008</td>
              <td align="left">canDeleteJoinCode (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0009</td>
              <td align="left">canUseJoinCode</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x000a</td>
              <td align="left">canBan</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x000b</td>
              <td align="left">canUnBan</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x000c</td>
              <td align="left">canKick</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x000d</td>
              <td align="left">canKnock (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x000e</td>
              <td align="left">canAcceptKnock (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x000f</td>
              <td align="left">canChangeUserRole</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0010</td>
              <td align="left">canChangeOwnRole</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0011</td>
              <td align="left">canCreateSubgroup (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0100</td>
              <td align="left">canSendMessage</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0101</td>
              <td align="left">canReceiveMessage</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0102</td>
              <td align="left">canCopyMessage</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0103</td>
              <td align="left">canReportAbuse</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0104</td>
              <td align="left">canReplyToMessage</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0105</td>
              <td align="left">canReactToMessage</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0106</td>
              <td align="left">canEditReaction</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0107</td>
              <td align="left">canDeleteOwnReaction</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0108</td>
              <td align="left">canDeleteOtherReaction</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0109</td>
              <td align="left">canEditOwnMessage</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x010a</td>
              <td align="left">canDeleteOwnMessage</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x010b</td>
              <td align="left">canDeleteOtherMessage</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x010c</td>
              <td align="left">canStartTopic</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x010d</td>
              <td align="left">canReplyInTopic</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x010e</td>
              <td align="left">canEditOwnTopic</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x010f</td>
              <td align="left">canEditOtherTopic</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0110</td>
              <td align="left">canSendDirectMessage (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0111</td>
              <td align="left">canTargetMessage (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0200</td>
              <td align="left">canUploadImage</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0201</td>
              <td align="left">canUploadAudio</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0202</td>
              <td align="left">canUploadVideo</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0203</td>
              <td align="left">canUploadAttachment</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0204</td>
              <td align="left">canDownloadImage</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0205</td>
              <td align="left">canDownloadAudio</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0206</td>
              <td align="left">canDownloadVideo</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0207</td>
              <td align="left">canDownloadAttachment</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0208</td>
              <td align="left">canSendLink</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0209</td>
              <td align="left">canSendLinkPreview</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x020a</td>
              <td align="left">canFollowLink</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x020b</td>
              <td align="left">canCopyLink</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0300</td>
              <td align="left">canChangeRoomName</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0301</td>
              <td align="left">canChangeRoomDescription</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0302</td>
              <td align="left">canChangeRoomAvatar</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0303</td>
              <td align="left">canChangeRoomSubject</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0304</td>
              <td align="left">canChangeRoomMood</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0380</td>
              <td align="left">canChangeOwnName (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0381</td>
              <td align="left">canChangeOwnPresence (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0382</td>
              <td align="left">canChangeOwnMood (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0383</td>
              <td align="left">canChangeOwnAvatar (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0400</td>
              <td align="left">canStartCall</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0401</td>
              <td align="left">canJoinCall</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0402</td>
              <td align="left">canSendAudio</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0403</td>
              <td align="left">canReceiveAudio</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0404</td>
              <td align="left">canSendVideo</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0405</td>
              <td align="left">canReceiveVideo</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0406</td>
              <td align="left">canShareScreen</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0407</td>
              <td align="left">canViewSharedScreen</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0500</td>
              <td align="left">canCreateRoom (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0501</td>
              <td align="left">canDestroyRoom</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0502</td>
              <td align="left">canChangeRoomMembershipStyle</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0503</td>
              <td align="left">canChangeRoleDefinitions</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0504</td>
              <td align="left">canChangePreauthorizedUserList</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0505</td>
              <td align="left">canChangeOtherPolicyAttribute (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0600</td>
              <td align="left">canChangeMlsOperationalPolicies (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0601</td>
              <td align="left">canSendMLSReinitProposal</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0602</td>
              <td align="left">canSendMLSUpdateProposal (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0603</td>
              <td align="left">canSendMLSPSKProposal (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0604</td>
              <td align="left">canSendMLSExternalProposal (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">0x0605</td>
              <td align="left">canSendMLSExternalCommit (reserved)</td>
              <td align="left">RFCXXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.ietf-mimi-arch" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-mimi-arch.xml">
          <front>
            <title>An Architecture for More Instant Messaging Interoperability (MIMI)</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <date day="20" month="October" year="2025"/>
            <abstract>
              <t>The More Instant Messaging Interoperability (MIMI) working group is defining a suite of protocols that allow messaging providers to interoperate with one another. This document lays out an overall architecture enumerating the MIMI protocols and how they work together to enable an overall messaging experience.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mimi-arch-02"/>
        </reference>
        <reference anchor="I-D.ietf-mimi-protocol">
          <front>
            <title>More Instant Messaging Interoperability (MIMI) using HTTPS and MLS</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <author fullname="Matthew Hodgson" initials="M." surname="Hodgson">
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <author fullname="Konrad Kohbrok" initials="K." surname="Kohbrok">
              <organization>Phoenix R&amp;D</organization>
            </author>
            <author fullname="Rohan Mahy" initials="R." surname="Mahy">
              <organization>Rohan Mahy Consulting Services</organization>
            </author>
            <author fullname="Travis Ralston" initials="T." surname="Ralston">
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <author fullname="Raphael Robert" initials="R." surname="Robert">
              <organization>Phoenix R&amp;D</organization>
            </author>
            <date day="25" month="April" year="2026"/>
            <abstract>
              <t>   This document specifies the More Instant Messaging Interoperability
   (MIMI) transport protocol, which allows users of different messaging
   providers to interoperate in group chats (rooms), including to send
   and receive messages, share room policy, and add participants to and
   remove participants from rooms.  MIMI describes messages between
   providers, leaving most aspects of the provider-internal client-
   server communication up to the provider.  MIMI integrates the
   Messaging Layer Security (MLS) protocol to provide end-to-end
   security assurances, including authentication of protocol
   participants, confidentiality of messages exchanged within a room,
   and agreement on the state of the room.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mimi-protocol-06"/>
        </reference>
        <reference anchor="RFC2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="I-D.ietf-mls-extensions">
          <front>
            <title>The Messaging Layer Security (MLS) Extensions</title>
            <author fullname="Raphael Robert" initials="R." surname="Robert">
              <organization>Phoenix R&amp;D</organization>
            </author>
            <date day="2" month="March" year="2026"/>
            <abstract>
              <t>   The Messaging Layer Security (MLS) protocol is an asynchronous group
   authenticated key exchange protocol.  MLS provides a number of
   capabilities to applications, as well as several extension points
   internal to the protocol.  This document provides a consolidated
   application API, guidance for how the protocol's extension points
   should be used, and a few concrete examples of both core protocol
   extensions and uses of the application API.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mls-extensions-09"/>
        </reference>
        <reference anchor="I-D.ietf-mimi-content">
          <front>
            <title>More Instant Messaging Interoperability (MIMI) message content</title>
            <author fullname="Rohan Mahy" initials="R." surname="Mahy">
              <organization>Rohan Mahy Consulting Services</organization>
            </author>
            <date day="2" month="March" year="2026"/>
            <abstract>
              <t>   This document describes content semantics common in Instant Messaging
   (IM) systems and describes a profile suitable for instant messaging
   interoperability of messages end-to-end encrypted inside the MLS
   (Message Layer Security) Protocol.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mimi-content-08"/>
        </reference>
        <reference anchor="RFC9420" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9420.xml">
          <front>
            <title>The Messaging Layer Security (MLS) Protocol</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="B. Beurdouche" initials="B." surname="Beurdouche"/>
            <author fullname="R. Robert" initials="R." surname="Robert"/>
            <author fullname="J. Millican" initials="J." surname="Millican"/>
            <author fullname="E. Omara" initials="E." surname="Omara"/>
            <author fullname="K. Cohn-Gordon" initials="K." surname="Cohn-Gordon"/>
            <date month="July" year="2023"/>
            <abstract>
              <t>Messaging applications are increasingly making use of end-to-end security mechanisms to ensure that messages are only accessible to the communicating endpoints, and not to any servers involved in delivering messages. Establishing keys to provide such protections is challenging for group chat settings, in which more than two clients need to agree on a key but may not be online at the same time. In this document, we specify a key establishment protocol that provides efficient asynchronous group key establishment with forward secrecy (FS) and post-compromise security (PCS) for groups in size ranging from two to thousands.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9420"/>
          <seriesInfo name="DOI" value="10.17487/RFC9420"/>
        </reference>
        <reference anchor="RFC8126" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.mahy-mimi-message-status" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.mahy-mimi-message-status.xml">
          <front>
            <title>A Message Status format for the More Instant Messaging Interoperability (MIMI) content format</title>
            <author fullname="Rohan Mahy" initials="R." surname="Mahy"/>
            <date day="2" month="March" year="2026"/>
            <abstract>
              <t>The More Instant Messaging Interoperability (MIMI) content format describes a message format for instant messaging. This specification defines a concise, efficient format for communicating status of messages sent using MIMI content.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-mahy-mimi-message-status-01"/>
        </reference>
        <reference anchor="RFC9458">
          <front>
            <title>Oblivious HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="January" year="2024"/>
            <abstract>
              <t>This document describes Oblivious HTTP, a protocol for forwarding encrypted HTTP messages. Oblivious HTTP allows a client to make multiple requests to an origin server without that server being able to link those requests to the client or to identify the requests as having come from the same client, while placing only limited trust in the nodes used to forward the messages.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9458"/>
          <seriesInfo name="DOI" value="10.17487/RFC9458"/>
        </reference>
        <reference anchor="RFC9750">
          <front>
            <title>The Messaging Layer Security (MLS) Architecture</title>
            <author fullname="B. Beurdouche" initials="B." surname="Beurdouche"/>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="E. Omara" initials="E." surname="Omara"/>
            <author fullname="S. Inguva" initials="S." surname="Inguva"/>
            <author fullname="A. Duric" initials="A." surname="Duric"/>
            <date month="April" year="2025"/>
            <abstract>
              <t>The Messaging Layer Security (MLS) protocol (RFC 9420) provides a group key agreement protocol for messaging applications. MLS is designed to protect against eavesdropping, tampering, and message forgery, and to provide forward secrecy (FS) and post-compromise security (PCS).</t>
              <t>This document describes the architecture for using MLS in a general secure group messaging infrastructure and defines the security goals for MLS. It provides guidance on building a group messaging system and discusses security and privacy trade-offs offered by multiple security mechanisms that are part of the MLS protocol (e.g., frequency of public encryption key rotation). The document also provides guidance for parts of the infrastructure that are not standardized by MLS and are instead left to the application.</t>
              <t>While the recommendations of this document are not mandatory to follow in order to interoperate at the protocol level, they affect the overall security guarantees that are achieved by a messaging application. This is especially true in the case of active adversaries that are able to compromise clients, the Delivery Service (DS), or the Authentication Service (AS).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9750"/>
          <seriesInfo name="DOI" value="10.17487/RFC9750"/>
        </reference>
      </references>
    </references>
    <?line 1191?>

<section anchor="role-examples">
      <name>Role examples</name>
      <section anchor="cooperatively-administered-room">
        <name>Cooperatively administered room</name>
        <t>This is an example set of role policies, which is suitable for friends and family rooms and small groups of peers in a workgroup or club.</t>
        <ul spacing="normal">
          <li>
            <t>no_role
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 0</t>
              </li>
              <li>
                <t>no capabilities</t>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>banned
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 1</t>
              </li>
              <li>
                <t>no capabilities</t>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>ordinary_user
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 2</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>canAddParticipant</t>
                  </li>
                  <li>
                    <t>canRemoveParticipant</t>
                  </li>
                  <li>
                    <t>canAddOwnClient</t>
                  </li>
                  <li>
                    <t>canRemoveOwnClient</t>
                  </li>
                  <li>
                    <t>canRemoveSelf</t>
                  </li>
                  <li>
                    <t>canSendMessage</t>
                  </li>
                  <li>
                    <t>canReceiveMessage</t>
                  </li>
                  <li>
                    <t>canCopyMessage</t>
                  </li>
                  <li>
                    <t>canReportAbuse</t>
                  </li>
                  <li>
                    <t>canReplyToMessage</t>
                  </li>
                  <li>
                    <t>canReactToMessage</t>
                  </li>
                  <li>
                    <t>canDeleteOwnReaction</t>
                  </li>
                  <li>
                    <t>canEditOwnMessage</t>
                  </li>
                  <li>
                    <t>canDeleteOwnMessage</t>
                  </li>
                  <li>
                    <t>canStartTopic</t>
                  </li>
                  <li>
                    <t>canReplyInTopic</t>
                  </li>
                  <li>
                    <t>canEditOwnTopic</t>
                  </li>
                  <li>
                    <t>canUploadImage</t>
                  </li>
                  <li>
                    <t>canUploadVideo</t>
                  </li>
                  <li>
                    <t>canUploadAudio</t>
                  </li>
                  <li>
                    <t>canUploadAttachment</t>
                  </li>
                  <li>
                    <t>canDownloadImage</t>
                  </li>
                  <li>
                    <t>canDownloadVideo</t>
                  </li>
                  <li>
                    <t>canDownloadAudio</t>
                  </li>
                  <li>
                    <t>canDownloadAttachment</t>
                  </li>
                  <li>
                    <t>canSendLink</t>
                  </li>
                  <li>
                    <t>canSendLinkPreview</t>
                  </li>
                  <li>
                    <t>canFollowLink</t>
                  </li>
                  <li>
                    <t>canCopyLink</t>
                  </li>
                  <li>
                    <t>canChangeRoomName</t>
                  </li>
                  <li>
                    <t>canChangeRoomAvatar</t>
                  </li>
                  <li>
                    <t>canChangeRoomSubject</t>
                  </li>
                  <li>
                    <t>canChangeRoomMood</t>
                  </li>
                  <li>
                    <t>canChangeOwnName</t>
                  </li>
                  <li>
                    <t>canChangeOwnPresence</t>
                  </li>
                  <li>
                    <t>canChangeOwnMood</t>
                  </li>
                  <li>
                    <t>canChangeOwnAvatar</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[2]), (2,[0])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>group_admin
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 3</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(include all the capabilities authorized for an ordinary_user)</t>
                  </li>
                  <li>
                    <t>canBan</t>
                  </li>
                  <li>
                    <t>canUnBan</t>
                  </li>
                  <li>
                    <t>canKick</t>
                  </li>
                  <li>
                    <t>canRevokeVoice</t>
                  </li>
                  <li>
                    <t>canGrantVoice</t>
                  </li>
                  <li>
                    <t>canChangeUserRole</t>
                  </li>
                  <li>
                    <t>canDeleteOtherMessage</t>
                  </li>
                  <li>
                    <t>canEditOtherTopic</t>
                  </li>
                  <li>
                    <t>canChangeRoomDescription</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[1,2,3]), (1,[0,2,3]), (2,[0,1,3]), (3,[0,1,2])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>super_admin
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 4</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(include all the capabilities authorized for a group_admin)</t>
                  </li>
                  <li>
                    <t>canChangeRoomMembershipStyle</t>
                  </li>
                  <li>
                    <t>canChangePreauthorizedUserList</t>
                  </li>
                  <li>
                    <t>canDestroyRoom</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[1,2,3,4]), (1,[0,2,3,4]), (2,[0,1,3,4]), (3,[0,1,2,4]), (4,[0,1,2,3])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>policy_enforcer
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 5</t>
              </li>
              <li>
                <t>capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(does not include any other capabilities)</t>
                  </li>
                  <li>
                    <t>canRemoveParticipant</t>
                  </li>
                  <li>
                    <t>canChangeUserRole</t>
                  </li>
                  <li>
                    <t>canBan</t>
                  </li>
                  <li>
                    <t>canUnban</t>
                  </li>
                  <li>
                    <t>canChangeRoleDefinitions</t>
                  </li>
                  <li>
                    <t>canChangePreauthorizedUserList</t>
                  </li>
                  <li>
                    <t>canChangeMlsOperationalPolicies</t>
                  </li>
                  <li>
                    <t>canDestroyRoom</t>
                  </li>
                  <li>
                    <t>canSendMLSReinitProposal</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = 2</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[1]), (1,[0]), (2,[0,1]), (3,[0,1]), (4,[0,1])]</tt></t>
                  </li>
                </ul>
              </li>
              <li>
                <t>Notes: can remove a banned user from the list (cleanup) but not restore them</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="strictly-administered-room">
        <name>Strictly administered room</name>
        <t>This is an example set of role policies, which is suitable for friends and family rooms and small groups of peers in a workgroup or club.</t>
        <ul spacing="normal">
          <li>
            <t>no_role
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 0</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>canUseJoinCode</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[2])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>banned
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 1</t>
              </li>
              <li>
                <t>no capabilities</t>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>ordinary_user
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 2</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>canAddOwnClient</t>
                  </li>
                  <li>
                    <t>canJoinIfPreauthorized</t>
                  </li>
                  <li>
                    <t>canRemoveOwnClient</t>
                  </li>
                  <li>
                    <t>canRemoveSelf</t>
                  </li>
                  <li>
                    <t>canChangeOwnRole</t>
                  </li>
                  <li>
                    <t>canSendMessage</t>
                  </li>
                  <li>
                    <t>canReceiveMessage</t>
                  </li>
                  <li>
                    <t>canCopyMessage</t>
                  </li>
                  <li>
                    <t>canReportAbuse</t>
                  </li>
                  <li>
                    <t>canReactToMessage</t>
                  </li>
                  <li>
                    <t>canDeleteOwnReaction</t>
                  </li>
                  <li>
                    <t>canEditOwnMessage</t>
                  </li>
                  <li>
                    <t>canDeleteOwnMessage</t>
                  </li>
                  <li>
                    <t>canStartTopic</t>
                  </li>
                  <li>
                    <t>canReplyInTopic</t>
                  </li>
                  <li>
                    <t>canUploadImage</t>
                  </li>
                  <li>
                    <t>canUploadVideo</t>
                  </li>
                  <li>
                    <t>canUploadAudio</t>
                  </li>
                  <li>
                    <t>canUploadAttachment</t>
                  </li>
                  <li>
                    <t>canDownloadImage</t>
                  </li>
                  <li>
                    <t>canDownloadVideo</t>
                  </li>
                  <li>
                    <t>canDownloadAudio</t>
                  </li>
                  <li>
                    <t>canDownloadAttachment</t>
                  </li>
                  <li>
                    <t>canSendLink</t>
                  </li>
                  <li>
                    <t>canSendLinkPreview</t>
                  </li>
                  <li>
                    <t>canFollowLink</t>
                  </li>
                  <li>
                    <t>canCopyLink</t>
                  </li>
                  <li>
                    <t>canChangeOwnName</t>
                  </li>
                  <li>
                    <t>canChangeOwnPresence</t>
                  </li>
                  <li>
                    <t>canChangeOwnMood</t>
                  </li>
                  <li>
                    <t>canChangeOwnAvatar</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[2]), (2,[0])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>group_admin
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 3</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(include all the capabilities authorized for an ordinary_user)</t>
                  </li>
                  <li>
                    <t>canAddParticipant</t>
                  </li>
                  <li>
                    <t>canRemoveParticipant</t>
                  </li>
                  <li>
                    <t>canBan</t>
                  </li>
                  <li>
                    <t>canUnBan</t>
                  </li>
                  <li>
                    <t>canKick</t>
                  </li>
                  <li>
                    <t>canChangeUserRole</t>
                  </li>
                  <li>
                    <t>canCreateJoinCode - reserved for future use</t>
                  </li>
                  <li>
                    <t>canDeleteJoinCode - reserved for future use</t>
                  </li>
                  <li>
                    <t>canDeleteOtherReaction</t>
                  </li>
                  <li>
                    <t>canDeleteOtherMessage</t>
                  </li>
                  <li>
                    <t>canEditOwnTopic</t>
                  </li>
                  <li>
                    <t>canEditOtherTopic</t>
                  </li>
                  <li>
                    <t>canChangeRoomDescription</t>
                  </li>
                  <li>
                    <t>canChangeRoomName</t>
                  </li>
                  <li>
                    <t>canChangeRoomAvatar</t>
                  </li>
                  <li>
                    <t>canChangeRoomSubject</t>
                  </li>
                  <li>
                    <t>canChangeRoomMood</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[1,2,3]), (1,[0,2,3]), (2,[0,1,3]), (3,[0,1,2])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>super_admin
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 4</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(include all the capabilities authorized for a group_admin)</t>
                  </li>
                  <li>
                    <t>canChangeRoomMembershipStyle</t>
                  </li>
                  <li>
                    <t>canChangeRoleDefinitions</t>
                  </li>
                  <li>
                    <t>canChangePreauthorizedUserList</t>
                  </li>
                  <li>
                    <t>canDestroyRoom</t>
                  </li>
                  <li>
                    <t>canSendMLSReinitProposal</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[1,2,3,4]), (1,[0,2,3,4]), (2,[0,1,3,4]), (3,[0,1,2,4]), (4,[0,1,2,3])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>policy_enforcer
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 5</t>
              </li>
              <li>
                <t>capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(does not include any other capabilities)</t>
                  </li>
                  <li>
                    <t>canRemoveParticipant</t>
                  </li>
                  <li>
                    <t>canChangeUserRole</t>
                  </li>
                  <li>
                    <t>canBan</t>
                  </li>
                  <li>
                    <t>canUnban</t>
                  </li>
                  <li>
                    <t>canChangeRoleDefinitions</t>
                  </li>
                  <li>
                    <t>canChangePreauthorizedUserList</t>
                  </li>
                  <li>
                    <t>canChangeMlsOperationalPolicies</t>
                  </li>
                  <li>
                    <t>canDestroyRoom</t>
                  </li>
                  <li>
                    <t>canSendMLSReinitProposal</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = 2</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[1]), (1,[0]), (2,[0,1]), (3,[0,1]), (4,[0,1])]</tt></t>
                  </li>
                </ul>
              </li>
              <li>
                <t>Notes: can remove a banned user from the list (cleanup) but not restore them</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="moderated-room">
        <name>Moderated room</name>
        <ul spacing="normal">
          <li>
            <t>no_role
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 0</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>canUseJoinCode</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[2,3])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>banned
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 1</t>
              </li>
              <li>
                <t>no capabilities</t>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>guest
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 2</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>canRemoveSelf</t>
                  </li>
                  <li>
                    <t>canReceiveMessage</t>
                  </li>
                  <li>
                    <t>canCopyMessage</t>
                  </li>
                  <li>
                    <t>canReactToMessage</t>
                  </li>
                  <li>
                    <t>canDeleteOwnReaction</t>
                  </li>
                  <li>
                    <t>canFollowLink</t>
                  </li>
                  <li>
                    <t>canCopyLink</t>
                  </li>
                  <li>
                    <t>canDownloadImage</t>
                  </li>
                  <li>
                    <t>canDownloadVideo</t>
                  </li>
                  <li>
                    <t>canDownloadAudio</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[2]), (2,[0])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>attendee
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 3</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(include all the capabilities authorized for a guest)</t>
                  </li>
                  <li>
                    <t>canAddOwnClient</t>
                  </li>
                  <li>
                    <t>canJoinIfPreauthorized</t>
                  </li>
                  <li>
                    <t>canRemoveOwnClient</t>
                  </li>
                  <li>
                    <t>canChangeOwnRole</t>
                  </li>
                  <li>
                    <t>canReportAbuse</t>
                  </li>
                  <li>
                    <t>canReplyInTopic</t>
                  </li>
                  <li>
                    <t>canDownloadAttachment</t>
                  </li>
                  <li>
                    <t>canChangeOwnName</t>
                  </li>
                  <li>
                    <t>canChangeOwnPresence</t>
                  </li>
                  <li>
                    <t>canChangeOwnAvatar</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[3]), (3,[0])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>speaker
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 4</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(include all the capabilities authorized for a speaker)</t>
                  </li>
                  <li>
                    <t>canSendMessage</t>
                  </li>
                  <li>
                    <t>canEditOwnMessage</t>
                  </li>
                  <li>
                    <t>canDeleteOwnMessage</t>
                  </li>
                  <li>
                    <t>canStartTopic</t>
                  </li>
                  <li>
                    <t>canUploadImage</t>
                  </li>
                  <li>
                    <t>canUploadVideo</t>
                  </li>
                  <li>
                    <t>canUploadAudio</t>
                  </li>
                  <li>
                    <t>canUploadAttachment</t>
                  </li>
                  <li>
                    <t>canSendLink</t>
                  </li>
                  <li>
                    <t>canSendLinkPreview</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[4]), (4,[0])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>moderator
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 5</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(include all the capabilities authorized for an ordinary_user)</t>
                  </li>
                  <li>
                    <t>canAddParticipant</t>
                  </li>
                  <li>
                    <t>canRemoveParticipant</t>
                  </li>
                  <li>
                    <t>canBan</t>
                  </li>
                  <li>
                    <t>canUnBan</t>
                  </li>
                  <li>
                    <t>canKick</t>
                  </li>
                  <li>
                    <t>canChangeUserRole</t>
                  </li>
                  <li>
                    <t>canCreateJoinCode - reserved for future use</t>
                  </li>
                  <li>
                    <t>canDeleteJoinCode - reserved for future use</t>
                  </li>
                  <li>
                    <t>canDeleteOtherReaction</t>
                  </li>
                  <li>
                    <t>canDeleteOtherMessage</t>
                  </li>
                  <li>
                    <t>canEditOwnTopic</t>
                  </li>
                  <li>
                    <t>canEditOtherTopic</t>
                  </li>
                  <li>
                    <t>canChangeRoomName</t>
                  </li>
                  <li>
                    <t>canChangeRoomAvatar</t>
                  </li>
                  <li>
                    <t>canChangeRoomSubject</t>
                  </li>
                  <li>
                    <t>canChangeRoomMood</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[1,2,3,4,5]), (1,[0,2,3,4,5]), (2,[0,1,3,4,5]), (3,[0,1,2,4,5]), (4,[0,1,2,3,5]), (5,[0,1,2,3,4])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>super_admin
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 6</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(include all the capabilities authorized for a moderator)</t>
                  </li>
                  <li>
                    <t>canChangeRoomDescription</t>
                  </li>
                  <li>
                    <t>canChangeRoomMembershipStyle</t>
                  </li>
                  <li>
                    <t>canChangeRoleDefinitions</t>
                  </li>
                  <li>
                    <t>canChangePreauthorizedUserList</t>
                  </li>
                  <li>
                    <t>canDestroyRoom</t>
                  </li>
                  <li>
                    <t>canSendMLSReinitProposal</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[1,2,3,4,5,6]), (1,[0,2,3,4,5,6]), (2,[0,1,3,4,5,6]), (3,[0,1,2,4,5,6]), (4,[0,1,2,3,5,6]), (5,[0,1,2,3,4,6]), (6,[0,1,2,3,4,5])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>policy_enforcer
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 7</t>
              </li>
              <li>
                <t>capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(does not include any other capabilities)</t>
                  </li>
                  <li>
                    <t>canRemoveParticipant</t>
                  </li>
                  <li>
                    <t>canChangeUserRole</t>
                  </li>
                  <li>
                    <t>canBan</t>
                  </li>
                  <li>
                    <t>canUnban</t>
                  </li>
                  <li>
                    <t>canChangeRoleDefinitions</t>
                  </li>
                  <li>
                    <t>canChangePreauthorizedUserList</t>
                  </li>
                  <li>
                    <t>canChangeMlsOperationalPolicies</t>
                  </li>
                  <li>
                    <t>canDestroyRoom</t>
                  </li>
                  <li>
                    <t>canSendMLSReinitProposal</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = 2</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[1]), (1,[0]), (2,[0,1]), (3,[0,1]), (4,[0,1]), (5, [0,1]), (6, [0,1])]</tt></t>
                  </li>
                </ul>
              </li>
              <li>
                <t>Notes: can remove a banned user from the list (cleanup) but not restore them</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="multi-organization-administered-room">
        <name>Multi-organization administered room</name>
        <t>In this example room policy, Alice from organization A is a super admin.
There are per organization user and admin roles for orgs A, B, and C.
Organizational admins can only move users to and from their org user role, their org admin role, the no_role; and can ban (but not unban) their own org users.
The non-host orgs do not have the <tt>canChangeOwnRole</tt> and <tt>canJoinIfPreauthorized</tt>, and are limited to 3 admins per org.</t>
        <ul spacing="normal">
          <li>
            <t>no_role
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 0</t>
              </li>
              <li>
                <t>no capabilities</t>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>banned
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 1</t>
              </li>
              <li>
                <t>no capabilities</t>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>org_a_user
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 2</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(all capabilities of org_b_user)</t>
                  </li>
                  <li>
                    <t>canChangeOwnRole</t>
                  </li>
                  <li>
                    <t>canJoinIfPreauthorized</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[2]), (2,[0])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>org_b_user
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 3</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>canRemoveSelf</t>
                  </li>
                  <li>
                    <t>canAddOwnClient</t>
                  </li>
                  <li>
                    <t>canRemoveOwnClient</t>
                  </li>
                  <li>
                    <t>canSendMessage</t>
                  </li>
                  <li>
                    <t>canReceiveMessage</t>
                  </li>
                  <li>
                    <t>canCopyMessage</t>
                  </li>
                  <li>
                    <t>canReportAbuse</t>
                  </li>
                  <li>
                    <t>canReplyInTopic</t>
                  </li>
                  <li>
                    <t>canReactToMessage</t>
                  </li>
                  <li>
                    <t>canDeleteOwnReaction</t>
                  </li>
                  <li>
                    <t>canEditOwnMessage</t>
                  </li>
                  <li>
                    <t>canSendLink</t>
                  </li>
                  <li>
                    <t>canSendLinkPreview</t>
                  </li>
                  <li>
                    <t>canFollowLink</t>
                  </li>
                  <li>
                    <t>canCopyLink</t>
                  </li>
                  <li>
                    <t>canDownloadImage</t>
                  </li>
                  <li>
                    <t>canDownloadVideo</t>
                  </li>
                  <li>
                    <t>canDownloadAudio</t>
                  </li>
                  <li>
                    <t>canDownloadAttachment</t>
                  </li>
                  <li>
                    <t>canChangeOwnName</t>
                  </li>
                  <li>
                    <t>canChangeOwnPresence</t>
                  </li>
                  <li>
                    <t>canChangeOwnAvatar</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[3]), (3,[0])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>org_c_user
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 4</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(same capabilities as org_b_user)</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[4]), (4,[0])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>org_a_admin
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 5</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(all capabilities of org_b_admin)</t>
                  </li>
                  <li>
                    <t>canChangeOwnRole</t>
                  </li>
                  <li>
                    <t>canJoinIfPreauthorized</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[2,5]), (2,[0,1,5]), (5,[0,1,2])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>org_b_admin
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 6</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(all capabilities of org_b_user)</t>
                  </li>
                  <li>
                    <t>canDeleteOwnMessage</t>
                  </li>
                  <li>
                    <t>canStartTopic</t>
                  </li>
                  <li>
                    <t>canUploadImage</t>
                  </li>
                  <li>
                    <t>canUploadVideo</t>
                  </li>
                  <li>
                    <t>canUploadAudio</t>
                  </li>
                  <li>
                    <t>canUploadAttachment</t>
                  </li>
                  <li>
                    <t>canAddParticipant</t>
                  </li>
                  <li>
                    <t>canRemoveParticipant</t>
                  </li>
                  <li>
                    <t>canBan</t>
                  </li>
                  <li>
                    <t>canKick</t>
                  </li>
                  <li>
                    <t>canChangeUserRole</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = 3</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[3,6]), (3,[0,1,6]), (6,[0,1,3])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>org_c_admin
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 7</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(all capabilities of org_b_admin)</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = 3</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[4,7]), (4,[0,1,7]), (7,[0,1,4])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>super_admin
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 8</t>
              </li>
              <li>
                <t>authorized capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(include all the capabilities authorized for org_a_admin)</t>
                  </li>
                  <li>
                    <t>canUnBan</t>
                  </li>
                  <li>
                    <t>canDeleteOtherReaction</t>
                  </li>
                  <li>
                    <t>canDeleteOtherMessage</t>
                  </li>
                  <li>
                    <t>canEditOwnTopic</t>
                  </li>
                  <li>
                    <t>canEditOtherTopic</t>
                  </li>
                  <li>
                    <t>canChangeRoomDescription</t>
                  </li>
                  <li>
                    <t>canChangeRoomName</t>
                  </li>
                  <li>
                    <t>canChangeRoomAvatar</t>
                  </li>
                  <li>
                    <t>canChangeRoomSubject</t>
                  </li>
                  <li>
                    <t>canChangeRoomMood</t>
                  </li>
                  <li>
                    <t>canChangeRoomMembershipStyle</t>
                  </li>
                  <li>
                    <t>canChangeRoleDefinitions</t>
                  </li>
                  <li>
                    <t>canChangePreauthorizedUserList</t>
                  </li>
                  <li>
                    <t>canDestroyRoom</t>
                  </li>
                  <li>
                    <t>canSendMLSReinitProposal</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = null</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[1,2,3,4,5,6,7,8]), (1,[0,2,3,4,5,6,7,8]), (2,[0,1,5,8]), (3,[0,1,6]), (4,[0,1,7]), (5,[0,1,2,8]), (6,[0,1,3]), (7,[0,1,4]), (8,[0,1,2,5])]</tt></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>policy_enforcer
            </t>
            <ul spacing="normal">
              <li>
                <t>role_index = 9</t>
              </li>
              <li>
                <t>capabilities
                </t>
                <ul spacing="normal">
                  <li>
                    <t>(does not include any other capabilities)</t>
                  </li>
                  <li>
                    <t>canRemoveParticipant</t>
                  </li>
                  <li>
                    <t>canChangeUserRole</t>
                  </li>
                  <li>
                    <t>canBan</t>
                  </li>
                  <li>
                    <t>canUnban</t>
                  </li>
                  <li>
                    <t>canChangeRoleDefinitions</t>
                  </li>
                  <li>
                    <t>canChangePreauthorizedUserList</t>
                  </li>
                  <li>
                    <t>canChangeMlsOperationalPolicies</t>
                  </li>
                  <li>
                    <t>canDestroyRoom</t>
                  </li>
                  <li>
                    <t>canSendMLSReinitProposal</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>constraints
                </t>
                <ul spacing="normal">
                  <li>
                    <t>minimum_participants_constraint = 1</t>
                  </li>
                  <li>
                    <t>maximum_participants_constraint = 2</t>
                  </li>
                  <li>
                    <t>minimum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>maximum_active_participants_constraint = 0</t>
                  </li>
                  <li>
                    <t>authorized_role_changes = <tt>[(0,[1]), (1,[0]), (3,[0,1]), (4,[0,1]), (5,[0,1]), (6,[0,1]), (7,[0,1]), (8,[0,1])]</tt></t>
                  </li>
                </ul>
              </li>
              <li>
                <t>Notes: can remove a banned user from the list (cleanup) but not restore them</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="complete-tls-presentation-language-syntax">
      <name>Complete TLS Presentation Language Syntax</name>
      <artwork><![CDATA[
enum {
  false(0),
  true(1)
} bool;

struct {
  /* a valid Uniform Resource Identifier (URI) */
  opaque uri<V>;
} Uri;

struct {
  opaque domain<V>;
} DomainName;

enum {
  optional(0),
  required(1),
  forbidden(2)
} Optionality;


/* See MIMI Capability Types IANA registry */
uint16 CapabilityType;

struct {
   uint32 from_role_index;
   uint32 target_role_indexes<V>;
} SingleSourceRoleChangeTargets;

struct {
  uint32 role_index;
  opaque role_name<V>;
  opaque role_description<V>;
  CapabilityType role_capabilities<V>;
  uint32 minimum_participants_constraint;
  optional uint32 maximum_participants_constraint;
  uint32 minimum_active_participants_constraint;
  optional uint32 maximum_active_participants_constraint;
  SingleSourceRoleChangeTargets authorized_role_changes<V>;
} Role;

struct {
  Role roles<V>;
} RoleData;

RoleData roles_list;
RoleData RoleUpdate;


struct {
  /* MLS Credential Type of the "claim"  */
  CredentialType credential_type;
  /* the binary representation of an X.509 OID, a JWT claim name  */
  /* string, or the CBOR map claim key in a CWT (an int or tstr)  */
  opaque id<V>;
} ClaimId;

struct {
  ClaimId claim_id;
  opaque claim_value<V>;
} Claim;

struct {
  /* when all claims in the claimset are satisfied, the claimset */
  */ is satisfied */
  Claim claimset<V>;
  Role target_role;
} PreAuthRoleEntry;

struct {
  PreAuthRoleEntry preauthorized_entries<V>;
} PreAuthData;

PreAuthData preauth_list;
PreAuthData PreAuthUpdate;


struct {
    bool fixed_membership;
    bool parent_dependant;
    Uri parent_room<V>;
    bool multi_device;
    optional uint32 max_clients;
    optional uint32 max_users;
    bool pseudonyms_allowed;
    bool persistent_room;
    bool discoverable;
    Component policy_component_ids<V>;
} BaseRoomPolicy;

BaseRoomPolicy BaseRoomData;
BaseRoomPolicy BaseRoomUpdate;


struct {
  Optionality delivery_notifications;
  Optionality read_receipts;
} StatusNotificationPolicy;

StatusNotificationPolicy StatusNotificationPolicyData;
StatusNotificationPolicy StatusNotificationPolicyUpdate;


struct {
  bool on_request;
  opaque join_link<V>;
  bool multiuser;
  uint32 expiration;
} JoinLinkPolicy;

JoinLinkPolicy JoinLinkPolicyData;
JoinLinkPolicy JoinLinkPolicyUpdate;

struct {
  opaque join_link<V>;
} JoinLink;

JoinLink JoinLinksData<V>;

struct {
  uint32 removedIndices<V>;
  JoinLink added_links<V>;
} JoinLinksUpdate;


struct {
  Optionality autodetect_hyperlinks_in_text;
  Optionality send_link_previews;
  Optionality automatic_link_previews;
  Optionality link_preview_proxy_use;
  select (link_preview_proxy_use) {
    case mandatory:
      Uri link_preview_proxy<V>;
    case optional:
      Uri link_preview_proxy<V>;
    case forbidden:
      struct {};
  }
} LinkPreviewPolicy;

LinkPreviewPolicy LinkPreviewPolicyData;
LinkPreviewPolicy LinkPreviewPolicyUpdate;


enum {
  unspecified(0),
  localProvider(1),
  hub(2),
  (255)
} AssetUploadLocation;

struct {
  DomainName provider;
  DomainName asset_upload_destinations<V>;
} ProviderAssetUploadDomains;

enum {
  direct(0),
  hubProxy(1),
  ohttp(2),
  (255)
} DownloadPrivacyType;

struct {
  DownloadPrivacyType allowed_download_types<V>;
  DownloadPrivacyType forbidden_download_types<V>;
  DownloadPrivacyType default_download_type;
} DownloadPrivacy;

struct {
  AssetUploadLocation asset_upload_location;
  ProviderAssetUploadDomains upload_domains<V>;
  DownloadPrivacy download_privacy;
  uint64 max_image;
  uint64 max_audio;
  uint64 max_video;
  uint64 max_attachment;
  MediaType forbidden_media_types<V>;
  optional<MediaType> permitted_media_types<V>;
} AssetPolicy;

AssetPolicy AssetPolicyData;
AssetPolicy AssetPolicyUpdate;


struct {
  Optionality logging;
  select (logging) {
    case mandatory:
      Uri logging_clients<V>;
      Uri machine_readable_policy;
      Uri human_readable_policy;
    case optional:
      Uri logging_clients<V>;
      Uri machine_readable_policy;
      Uri human_readable_policy;
    case forbidden:
      struct {};
  }
} LoggingPolicy;

LoggingPolicy LoggingPolicyData;
LoggingPolicy LoggingPolicyUpdate;


struct {
  Optionality history_sharing;
  select (history_sharing) {
    case mandatory:
      uint32 roles_that_can_share<V>;
      bool automatically_share;
      uint32 max_time_period;
    case optional:
      uint32 roles_that_can_share<V>;
      bool automatically_share;
      uint32 max_time_period;
    case forbidden:
      struct {};
  }
} HistoryPolicy;

HistoryPolicy HistoryPolicyData;
HistoryPolicy HistoryPolicyUpdate;


struct {
  opaque name<V>;
  opaque description<V>;
  Uri homepage;
  bool local_client_bot;
  uint32 bot_role_index;
  bool can_target_message_in_group;
  bool per_user_content;
} Bot;

struct {
  Bot allowed_bots<V>;
} BotPolicy;

BotPolicy BotPolicyData;
BotPolicy BotPolicyUpdate;


struct {
  Optionality expiring_messages;
  select (expiring_messages) {
    case mandatory:
      uint32 min_expiration_duration;
      uint32 max_expiration_duration;
      optional uint32 default_expiration_duration;
    case optional:
      uint32 min_expiration_duration;
      uint32 max_expiration_duration;
      optional uint32 default_expiration_duration;
    case forbidden:
      struct {};
  }
} MessageExpiration;

MessageExpiration MessageExpirationData;
MessageExpiration MessageExpirationUpdate;


struct {
  ProtocolVersion versions<V>;
  CipherSuite cipher_suites<V>;
  ExtensionType extensions<V>;
  ProposalType proposals<V>;
  CredentialType credentials<V>;
  WireFormats wire_formats<V>;
  ComponentID component_ids<V>;
  ComponentID safe_aad_types<V>;
  MediaType media_types<V>;
  ContentType content_types<V>;
} ExtendedCapabilities;

enum {
  unspecified(0),
  immediate_commit(1),
  random_delay(2),
  (255)
} PendingProposalStrategy;

struct {
  PendingProposalStrategy pending_proposal_strategy;
  select (pending_proposal_strategy) {
    case unspecified:
      struct {};
    case immediate_commit:
      struct {};
    case random_delay:
      uint64 minimum_delay_ms;
      uint64 maximum_delay_ms;
    case extension:
      ComponentID id_of_strategy_params;
  }
} PendingProposalPolicy;

struct {
  uint64 minimum_time;
  uint64 default_time;
  uint64 maximum_time;
} MinDefaultMaxTime;

struct {
  uint8  epoch_tolerance;
  uint16 pad_to_size;
  uint32 max_generations_skipahead;
} AppMessagePolicy;

struct {
  ExtendedCapabilities mandatory_capabilities;
  ExtendedCapabilities default_capabilities;
  ExtendedCapabilities forbidden_capabilities;
  WireFormats handshake_formats<V>;
  bool external_proposal_allowed;
  bool external_commit_allowed;
  PendingProposalPolicy pending_proposal_policy;
  MinDefaultMaxTime LeafNode_update_time;
  AppMessagePolicy app_message_policy;
  unit64 max_kp_lifetime;
  uint64 max_credential_lifetime;
  uint64 resumption_psk_lifetime;
  MinDefaultMaxTime sender_nonce_keypair_lifetime;
  uint32 max_keypairs;
  MinDefaultMaxTime buffer_incoming_message_time;
  uint32 max_buffered_messages;
} OperationalParameters;

OperationalParameters OperationalParametersData;
OperationalParameters OperationalParametersUpdate;
]]></artwork>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
RhgHnl5ZdUraDh8P/X0LMDgyt4VRJ5VGGPcCGK/Pvt8AoA3G/QDGM3F7aQXU
CONBIwxJRnbTXDr9fj8ax5NLG85ZXqsVnKE5k7v5K6OpzslRQRw9xMqOvl+p
98zNZlW3mbVsOOciwqQdseYpmeWJwQTf6LQ7ixcJepxQyi6KO75AtiyZUjG8
tZGEsTEFK2ebBMa6na/G5BabZvTOElMu9MOHvHf4W5oFXrn80QtAJskabEKe
tve7CpHrbg5cAHXT1XxeA735hXBjDzs0aXlPC3VGf/7LCJHFbkANuDr4gqsq
rihGTJyvKXdtA8rudiqAaqhj7FWt+n5JzVZfaWat5/VGG4rQTu1/9axxYWXf
wOaXeGazsIG1hFU+e8atsMQ3WfklNSOSXxhadhqbNZQ5G0ptcGIVaeij9t3T
+OufST6qfybxreGzVSyDKfgqdFNBrZNAYW4saOxI9cqmb6Jr+kVOhaxSQu1b
oOQ1l7B831wm6lRzISoX9RLRfhoLVKVpLGwF5wb4u2JwQUebeFz3Tu/Pd/+y
34u6d3t/vvOXfeZ5dLwO6chv4Hj3tuN4XYkPbkPPhIH+wwi0cRoy2n1/tZ7G
AV94V/2A1z/hZr/KLs2PWRJSwx9zQFTta3jf0sBlPItujXNY+2YzFXuWi59D
Ygf/9CR20Lvbu0dkdgBkZn8gzfUO5Mc9/nFXibBYYcb4NiK8/zmI0Cf8/RbG
FCpx9UqNGlZIVlap/NfmO0QUvfsBWchPJQz5qaQhP+/rz3tMK0As7OQylMe3
TXLaA0F2I5XYYFSWXGxeZr/BfshlNght7VylxszG4YdGXf8TyGyTnr2BHPVz
o4r9azGxu78hLYAo1dKoR50eZXpUSRRJQH/A6GdPEJc2+qsffc2FQSH/8e5k
buJ0tdy3SZ0xxqukGl9IyrAzCvr6e9DGt1CXPAeV3x2f3J707HH4RWffBmWf
QWdv1LAbvMl+lm4eeOz8qkr7b1Y1/6KCb6mCf9GK/yW14k80J+6qTLdLshVP
1n74NNt7ke1vlNBzdYc2gZfYjmp6g4HvE9T3eoXPaPj6Yiv4F7AV/Hwt79fS
3v75+fkXa8MXa8MXa8O21gZ8KJhRxARrYPii1f+y8qXyky+q/S6q/Tk+5fxZ
Kn2zAv4JCvUnac7bK3e/gHr6u6KSn6m9xWWJ746buNdnUd2YUqsa2y9sTGo1
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

-->

</rfc>
