<?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.43 (Ruby 3.4.9) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-moq-transport-21" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="moq-transport">Media over QUIC Transport</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-21"/>
    <author initials="S." surname="Nandakumar" fullname="Suhas Nandakumar">
      <organization>Cisco</organization>
      <address>
        <email>snandaku@cisco.com</email>
      </address>
    </author>
    <author initials="V." surname="Vasiliev" fullname="Victor Vasiliev">
      <organization>Google</organization>
      <address>
        <email>vasilvv@google.com</email>
      </address>
    </author>
    <author initials="I." surname="Swett" fullname="Ian Swett" role="editor">
      <organization>Google</organization>
      <address>
        <email>ianswett@google.com</email>
      </address>
    </author>
    <author initials="A." surname="Frindell" fullname="Alan Frindell" role="editor">
      <organization>Meta</organization>
      <address>
        <email>afrind@meta.com</email>
      </address>
    </author>
    <date/>
    <area>Web and Internet Transport</area>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>media over quic</keyword>
    <abstract>
      <?line 62?>

<t>This document defines Media over QUIC Transport (MOQT), a publish/subscribe
protocol that runs over QUIC and WebTransport. MOQT leverages the features of
these transports, such as streams, datagrams, priorities, and partial
reliability. MOQT operates both point-to-point and through intermediate relays,
enabling scalable low-latency delivery. Despite its name, MOQT is media
agnostic and can be used for a wide range of use cases.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://moq-wg.github.io/moq-transport/draft-ietf-moq-transport.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-moq-transport/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Media Over QUIC Working Group mailing list (<eref target="mailto:moq@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/moq/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/moq/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/moq-wg/moq-transport"/>.</t>
    </note>
  </front>
  <middle>
    <?line 71?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Media Over QUIC Transport (MOQT) is a publish/subscribe protocol that runs over
QUIC <xref target="QUIC"/> or WebTransport <xref target="WebTransport"/>. Publishers produce data that is
delivered to subscribers either point-to-point or through intermediate relays.
MOQT leverages transport features such as streams, datagrams, priorities, and
partial reliability to support a wide range of use cases with different
resiliency and latency needs, from live to interactive, without compromising
scalability.</t>
      <t>Despite its name, MOQT is content agnostic. MoQ Streaming Formats define how
specific content types are encoded, packaged, and mapped to MOQT objects, along
with policies for discovery and subscription.</t>
      <section anchor="document-structure">
        <name>Document Structure</name>
        <t>This document describes the MOQT protocol and is structured as follows:</t>
        <ul spacing="normal">
          <li>
            <t>The core concepts and functionality are described first
            </t>
            <ul spacing="normal">
              <li>
                <t>Section 2 <xref target="model"/> Object Data Model describes how Objects, Tracks and Namespaces relate</t>
              </li>
              <li>
                <t>Section 3 <xref target="publishing-and-receiving-tracks"/> Describes how Objects in Tracks are Published and Retrieved.</t>
              </li>
              <li>
                <t>Section 4 <xref target="track-discovery"/> Describes mechanisms for discovering Namespaces and Tracks</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Next, the document describes how Objects are transmitted and MOQT Sessions
            </t>
            <ul spacing="normal">
              <li>
                <t>Section 5 <xref target="object-transmission"/> Describes ways MOTQ allows a subscriber to influence Object transmission order</t>
              </li>
              <li>
                <t>Section 6 <xref target="session-init"/> Describes how to initiate a session and key properties of a session, such as extensibility.</t>
              </li>
              <li>
                <t>Section 7 <xref target="relays-moq"/> Describes key properties and requirements of MOQT relays</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Then the document describes how Control Messages and Objects are serialized and sent
            </t>
            <ul spacing="normal">
              <li>
                <t>Section 8 <xref target="notational-conventions-and-common-structures"/> Notational Conventions and Common Structures details structures used by subsequent sections</t>
              </li>
              <li>
                <t>Section 9 <xref target="message"/> Control Messages details how Control Messages are sent, including their wire encoding</t>
              </li>
              <li>
                <t>Section 10 <xref target="moqt-properties"/> MOQT Properties describes Track and Object properties defined in the core protocol</t>
              </li>
              <li>
                <t>Section 11 <xref target="data-streams"/> Data streams describes the mapping and serialization of Objects onto streams and datagrams</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Finally, the document discusses deployment related considerations
            </t>
            <ul spacing="normal">
              <li>
                <t>Section 12 <xref target="error-handling"/> Discusses MOQT errors and how to best handle them</t>
              </li>
              <li>
                <t>Section 13 <xref target="grease"/> Describes how to utilize unspecified codepoints to prevent protocol ossification.</t>
              </li>
              <li>
                <t>Section 14 <xref target="transport-considerations"/> Discusses transport related considerations, including congestion control</t>
              </li>
              <li>
                <t>Section 15 <xref target="security"/> Discusses security considerations, including denial-of-service and authentication</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="motivation">
        <name>Motivation</name>
        <t>The development of MOQT is driven by goals in a number of areas -
specifically latency, the robust feature set of QUIC and relay
support.</t>
        <section anchor="latency">
          <name>Latency</name>
          <t>Latency is necessary to correct for variable network throughput. Ideally live
content is consumed at the same bitrate it is produced. End-to-end latency would
be fixed and only subject to encoding and transmission delays. Unfortunately,
networks have variable throughput, primarily due to congestion. Attempting to
deliver content encoded at a higher bitrate than the network can cause
queuing along the path from producer to consumer. The speed at which a protocol
can detect and respond to congestion determines the overall latency. TCP-based
protocols are simple but are slow to detect congestion and suffer from
head-of-line blocking. Protocols utilizing UDP directly can avoid queuing, but
the application is then responsible for the complexity of fragmentation,
congestion control, retransmissions, receiver feedback, reassembly, and
more. One goal of MOQT is to achieve the best of both these worlds: leverage the
features of QUIC to create a simple yet flexible low latency protocol that can
rapidly detect and respond to congestion.</t>
        </section>
        <section anchor="leveraging-quic">
          <name>Leveraging QUIC</name>
          <t>The parallel nature of QUIC streams can provide improvements in the face
of loss. A goal of MOQT is to design a streaming protocol to leverage
the transmission benefits afforded by parallel QUIC streams as well as
exercising options for flexible loss recovery.</t>
        </section>
        <section anchor="convergence">
          <name>Convergence</name>
          <t>Some live media architectures today have separate protocols for ingest and
distribution, for example RTMP and HTTP based HLS or DASH. Switching protocols
necessitates intermediary origins which re-package the
media content. While specialization can have its benefits, there are efficiency
gains to be had in not having to re-package content. A goal of MOQT is to
develop a single protocol which can be used for transmission from contribution
to distribution. A related goal is the ability to support existing encoding and
packaging schemas, both for backwards compatibility and for interoperability
with the established content preparation ecosystem.</t>
        </section>
        <section anchor="relays">
          <name>Relays</name>
          <t>An integral feature of a protocol being successful is its ability to
deliver media at scale. Greatest scale is achieved when third-party
networks, independent of both the publisher and subscriber, can be
leveraged to relay the content. These relays must cache content for
distribution efficiency while simultaneously routing content and
deterministically responding to congestion in a multi-tenant network. A
goal of MOQT is to treat relays as first-class citizens of the protocol
and ensure that objects are structured such that information necessary
for distribution is available to relays while the media content itself
remains opaque and private.</t>
        </section>
      </section>
      <section anchor="terms-and-definitions">
        <name>Terms 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>The following terms are used with the first letter capitalized.</t>
        <dl>
          <dt>Application:</dt>
          <dd>
            <t>The entity using MOQT to transmit and receive data.</t>
          </dd>
          <dt>Client:</dt>
          <dd>
            <t>The party initiating a Transport Session.</t>
          </dd>
          <dt>Server:</dt>
          <dd>
            <t>The party accepting an incoming Transport Session.</t>
          </dd>
          <dt>Endpoint:</dt>
          <dd>
            <t>A Client or Server.</t>
          </dd>
          <dt>Peer:</dt>
          <dd>
            <t>The other endpoint than the one being described.</t>
          </dd>
          <dt>Publisher:</dt>
          <dd>
            <t>An endpoint that handles subscriptions by sending requested Objects from the requested track.</t>
          </dd>
          <dt>Subscriber:</dt>
          <dd>
            <t>An endpoint that subscribes to and receives tracks.</t>
          </dd>
          <dt>Original Publisher:</dt>
          <dd>
            <t>The initial publisher of a given track.</t>
          </dd>
          <dt>End Subscriber:</dt>
          <dd>
            <t>A subscriber that initiates a subscription and does not send the data on to other subscribers.</t>
          </dd>
          <dt>Relay:</dt>
          <dd>
            <t>An entity that is both a Publisher and a Subscriber, is not the Original
Publisher or End Subscriber, and conforms to all requirements in <xref target="relays-moq"/>.</t>
          </dd>
          <dt>Upstream:</dt>
          <dd>
            <t>In the direction of the Original Publisher.</t>
          </dd>
          <dt>Downstream:</dt>
          <dd>
            <t>In the direction of the End Subscriber(s).</t>
          </dd>
          <dt>Transport Session:</dt>
          <dd>
            <t>A raw QUIC connection or a WebTransport session.</t>
          </dd>
          <dt>Stream:</dt>
          <dd>
            <t>A bidirectional or unidirectional bytestream provided by the
QUIC transport or WebTransport.</t>
          </dd>
          <dt>Congestion:</dt>
          <dd>
            <t>Packet loss and queuing caused by degraded or overloaded networks.</t>
          </dd>
          <dt>Group:</dt>
          <dd>
            <t>A collection of objects within a track. A group represents a join point
in a track. See (<xref target="model-group"/>).</t>
          </dd>
          <dt>Subgroup:</dt>
          <dd>
            <t>A sequence of one or more objects from the same group, sent on a single
transport stream whenever possible. See (<xref target="model-subgroup"/>).</t>
          </dd>
          <dt>Object:</dt>
          <dd>
            <t>An object is an addressable unit whose payload is a sequence of
bytes. Objects form the base element in the MOQT data model. See
(<xref target="model-object"/>).</t>
          </dd>
          <dt>Track:</dt>
          <dd>
            <t>A track is a collection of groups. See (<xref target="model-track"/>).</t>
          </dd>
        </dl>
      </section>
      <section anchor="stream-management-terms">
        <name>Stream Management Terms</name>
        <t>This document uses stream management terms described in <xref section="1.3" sectionFormat="comma" target="RFC9000"/> including STOP_SENDING, RESET_STREAM, and FIN. It also uses
RESET_STREAM_AT from <xref target="I-D.draft-ietf-quic-reliable-stream-reset"/>.
RESET_STREAM_AT can be used by MOQT, but the protocol is also designed to work
correctly when the extension is not supported.</t>
        <t>When this document says an endpoint "resets" a stream, it means the endpoint
sends a RESET_STREAM or RESET_STREAM_AT frame on that stream (see
<xref target="closing-subgroup-streams"/> for considerations on choosing between them).</t>
      </section>
      <section anchor="modularity">
        <name>Modularity</name>
        <t>MOQT defines all messages necessary to implement both simple publishing or
subscribing endpoints as well as fully capable Relays.  Non-Relay endpoints
<bcp14>MAY</bcp14> implement only the subset of functionality required to perform necessary
tasks.  For example, a limited media player could operate using only SUBSCRIBE
related messages.  Limited endpoints <bcp14>SHOULD</bcp14> respond to any unsupported messages
with the appropriate <tt>NOT_SUPPORTED</tt> error code, rather than ignoring them.</t>
        <t>Relays <bcp14>MUST</bcp14> implement all MOQT messages defined in this document, as well as
processing rules described in <xref target="relays-moq"/>.</t>
      </section>
    </section>
    <section anchor="model">
      <name>Object Data Model</name>
      <t>MOQT has a hierarchical data model, comprised of tracks which contain
groups, and groups that contain objects. Inside of a group, the objects
can be organized into subgroups.</t>
      <t>To give an example of how an application might use this data model,
consider an application sending high and low resolution video using a
codec with temporal scalability. Each resolution is sent as a separate
track to allow the subscriber to pick the appropriate resolution given
the display environment and available bandwidth. Each independently
coded sequence of pictures in a resolution is sent as a group as the
first picture in the sequence can be used as a random access point.
This allows the client to join at the logical points where decoding
of the media can start without needing information before the join
points. The temporal layers are sent as separate subgroups to allow
the priority mechanism to favor lower temporal layers when there is
not enough bandwidth to send all temporal layers. Each frame of video
is sent as a single object.</t>
      <section anchor="model-object">
        <name>Objects</name>
        <t>The basic data element of MOQT is an object.  An object is an
addressable unit whose payload is a sequence of bytes.  All objects
belong to a group, indicating ordering and potential
dependencies (see <xref target="model-group"/>).  An object is uniquely identified by
its track namespace, track name, group ID, and object ID, and must be an
identical sequence of bytes regardless of how or where it is retrieved.
An Object can become unavailable, but its contents <bcp14>MUST NOT</bcp14> change over
time.</t>
        <section anchor="canonical-object-fields">
          <name>Canonical Object Fields</name>
          <t>Objects are comprised of two parts: metadata and a payload.  The metadata is
never encrypted and is always visible to relays (see <xref target="relays-moq"/>). The
payload portion may be encrypted, in which case it is only visible to the
Original Publisher and End Subscribers. The Original Publisher is solely
responsible for the content of the object payload. This includes the
underlying encoding, compression, any end-to-end encryption, or
authentication.</t>
          <t>From the perspective of a subscriber or a cache, an Object can be in three
possible states:</t>
          <ol spacing="normal" type="1"><li>
              <t>The Object is known to not exist. This state is permanent.  All signals
that an Object does not exist are authoritative.</t>
            </li>
            <li>
              <t>The Object is known to exist. From this state, it can transition to not
existing, but not vice versa.</t>
            </li>
            <li>
              <t>The state of the Object is unknown, either because it has not yet been
received, or it has not yet been produced.</t>
            </li>
          </ol>
          <t>A gap in the observed Object IDs does not by itself convey any information about
the skipped Objects. Skipped Objects remain in the unknown state until they are
received or their non-existence is signalled, for example in a FETCH stream (see
<xref target="fetch-header"/>) or via a Prior Object ID Gap (see <xref target="prior-object-id-gap"/>).</t>
          <t>Since Objects can be delivered out of order, an endpoint can receive an Object
after it has already recorded that the Object does not exist (e.g., via a FETCH
gap from one source and delayed delivery via a subscription).  This is not a
protocol error and the Track is not malformed.</t>
          <t>Whenever the publisher communicates that certain objects do not exist, this
fact is expressed as a contiguous range of non-existent objects and
by including Properties indicating the group/object gaps; MOQT
implementers should take that into account when selecting appropriate data
structures.</t>
        </section>
      </section>
      <section anchor="model-subgroup">
        <name>Subgroups</name>
        <t>A subgroup is a sequence of one or more objects from the same group
(<xref target="model-group"/>) in ascending order by Object ID. Objects in a subgroup
have a dependency and priority relationship consistent with sharing a
stream and are sent on a single stream whenever possible. A Group is delivered
using at least as many streams as there are Subgroups in the Group,
typically with a one-to-one mapping between Subgroups and streams.</t>
        <t>When an Object's forwarding preference (see <xref target="object-properties"/>) is
"Datagram", it is not sent in Subgroups, does not belong to a Subgroup in any
way, and the description in the remainder of this section does not apply.</t>
        <t>Streams offer in-order reliable delivery and the ability to cancel sending and
retransmission of data. Furthermore, many QUIC and WebTransport implementations
offer the ability to control the relative scheduling priority of pending stream
data.</t>
        <t>Every Object within a Group belongs to exactly one Subgroup or Datagram.</t>
        <t>When Objects are sent in a subscription (see <xref target="subscriptions"/>),  Objects
from two subgroups <bcp14>MUST NOT</bcp14> be sent on the same stream, and Objects from the
same Subgroup <bcp14>MUST NOT</bcp14> be sent on different streams, unless one of the streams
was reset prematurely, or upstream conditions have forced objects from a Subgroup
to be sent out of Object ID order.</t>
        <t>Original publishers assign each Subgroup a Subgroup ID, and do so as they see fit.  The
scope of a Subgroup ID is a Group, so Subgroups from different Groups <bcp14>MAY</bcp14> share a Subgroup
ID without implying any relationship between them. In general, publishers assign
objects to subgroups in order to leverage the features of streams as described
above.</t>
        <t>In general, if Object B is dependent on Object A, then delivery of B can follow
A, i.e. A and B can be usefully delivered over a single stream.  If an Object is
dependent on all previous Objects in a Subgroup, it likely fits best in that
Subgroup.  If an Object is not dependent on any of the Objects in a Subgroup, it
likely belongs in a different Subgroup.</t>
        <t>When assigning Objects to different Subgroups, the Original Publisher makes a
reasonable tradeoff between having an optimal mapping of Object relationships in
a Group and minimizing the number of streams used.</t>
        <t>When the Original Publisher opens a new subgroup, it <bcp14>MUST</bcp14> set the FIRST_OBJECT
bit (<xref target="subgroup-header"/>) to indicate that the first object in the subgroup
stream is the first object ever published in that subgroup. A relay forwarding a
subgroup that begins with the first object ever published in that subgroup <bcp14>MUST</bcp14>
set the FIRST_OBJECT bit.</t>
      </section>
      <section anchor="model-group">
        <name>Groups</name>
        <t>A group is a collection of Objects and is a sub-unit of a Track
(<xref target="model-track"/>).  Groups <bcp14>SHOULD</bcp14> be independently useful, so Objects within a
Group <bcp14>SHOULD NOT</bcp14> depend on Objects in other Groups. A Group provides a join
point for subscriptions, so a subscriber that does not want to receive the
entire Track can opt to receive only Groups starting from a given Group ID.
Groups can contain any number of Objects.</t>
        <section anchor="group-ids">
          <name>Group IDs</name>
          <t>Within a track, the original publisher <bcp14>SHOULD</bcp14> publish Group IDs which increase
with time (where "time" is defined according to the internal clock of the media
being sent). In some cases, Groups will be produced in increasing order, but sent
to subscribers in a different order, for example when the subscription's Group
Order is Descending.  Due to network reordering and the partial reliability
features of MOQT, Objects from different Groups can always be received out of order.</t>
          <t>As a result, subscribers cannot infer the existence of a Group until an object in
the Group is received. This can create gaps in a cache that can be filled
by doing a Fetch upstream, if necessary.</t>
          <t>Applications that do not produce Group IDs that increase with time are limited
to the subset of MOQT that does not compare group IDs. Subscribers to these
Tracks <bcp14>SHOULD NOT</bcp14> use Location filters which span multiple Groups in FETCH or
SUBSCRIBE.  SUBSCRIBE and FETCH delivery use Group Order, so they could have
an unexpected delivery order if Group IDs do not increase with time.</t>
          <t>The amount of time elapsed between publishing an Object in Group ID N and in a
Group ID &gt; N, or even which will be published first, is not defined by this
specification and is defined by the applications using MOQT.</t>
        </section>
      </section>
      <section anchor="model-track">
        <name>Track</name>
        <t>A track is a sequence of groups (<xref target="model-group"/>). It is the entity
against which a subscriber issues a subscription request.  A subscriber
can request to receive individual tracks starting at a group boundary,
including any new objects pushed by the publisher while the track is
active.</t>
        <section anchor="track-name">
          <name>Track Naming</name>
          <t>In MOQT, every track is identified by a Full Track Name, consisting of a Track
Namespace and a Track Name.</t>
          <t>Track Namespace is an ordered set of between 0 and 32 Track Namespace Fields,
encoded as described in <xref target="track-namespace-structure"/>.</t>
          <t>The structured nature of Track Namespace allows relays and applications to
manipulate prefixes of a namespace.</t>
          <t>Track Name is a sequence of bytes, possibly empty, that identifies an individual
track within the namespace.</t>
          <t>In this specification, both the Track Namespace Fields and the Track Name
are not constrained to a specific encoding. They carry a sequence of bytes and
comparison between two Track Namespace Fields or Track Names is done by
exact comparison of the bytes. Specifications that use MOQT may constrain the
information in these fields, for example by restricting them to UTF-8. Any such
specification needs to specify the canonicalization into the bytes in the Track
Namespace Fields or Track Name such that exact comparison works.</t>
        </section>
        <section anchor="reserved-namespaces">
          <name>Reserved Namespaces</name>
          <t>MOQT reserves all Track Namespace values whose first tuple field begins with
a period (0x2e, <tt>.</tt>). These namespaces <bcp14>MUST NOT</bcp14> be used unless their meaning
is defined through IANA registration. Unless otherwise specified, an
endpoint that receives a request for an unrecognized reserved namespace <bcp14>MUST</bcp14>
pass it to the Application, so that future extensions can define new reserved
namespaces without breaking older implementations.</t>
          <t>A Track Namespace whose first field is exactly <tt>.</tt> (a single period, 0x2e)
is reserved and <bcp14>MUST NOT</bcp14> be used for any purpose; endpoints <bcp14>MUST NOT</bcp14> publish
tracks or namespaces under it and <bcp14>MUST</bcp14> reject requests referencing it with
DOES_NOT_EXIST.</t>
        </section>
      </section>
      <section anchor="track-scope">
        <name>Scope</name>
        <t>An MOQT scope is a set of servers (as identified by their connection
URIs) for which a Full Track Name is guaranteed to be unique and identify a
specific track. It is up to the application using MOQT to define how broad or
narrow the scope is. An application that deals with connections between devices
on a local network may limit the scope to a single connection; by
contrast, an application that uses multiple CDNs to serve media may
require the scope to include all of those CDNs.</t>
        <t>A single MOQT transport session is tied to the scope that is negotiated in the
beginning of the session. Unless the application has additional information,
two tracks are assumed to belong to the same scope if and only if the
<tt>authority</tt> and <tt>path-abempty</tt> components (<xref target="moqt-uri-scheme"/>) of their
connection URIs are equal. These values are communicated through the SETUP
message in case of raw QUIC, and through HTTP request header fields in case of
WebTransport.</t>
        <t>The <tt>query</tt> component of the connection URI is not part of the scope; two
connection URIs that differ only in their <tt>query</tt> components identify the same
scope.</t>
        <t>Because each Full Track Name is unique within an MOQT scope, they can be used as
a cache key for the track. If, at a given moment in time, two tracks within the
same scope contain different data, they <bcp14>MUST</bcp14> have different names and/or
namespaces. MOQT provides subscribers with the ability to alter the specific
manner in which tracks are delivered via Parameters, but the actual content of
the tracks does not depend on those parameters; this is in contrast to protocols
like HTTP, where request headers can alter the server response.</t>
        <t>A publisher that loses state (e.g. crashes) and intends to resume publishing on
the same Track risks colliding with previously published Objects and violating
the above requirements.  A publisher can handle this in application specific
ways, for example:</t>
        <ol spacing="normal" type="1"><li>
            <t>Select a unique Track Name or Track Namespace whenever it resumes
publishing. For example, it can base one of the Namespace Fields on the
current time, or select a sufficiently large random value.</t>
          </li>
          <li>
            <t>Resume publishing under a previous Track Name and Namespace and set the
initial Group ID to a unique value guaranteed to be larger than all
previously used groups.  This can be done by choosing a Group ID based on the
current time.</t>
          </li>
          <li>
            <t>Use TRACK_STATUS or similar mechanism to query the previous state to
determine the largest published Group ID.</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="publishing-and-receiving-tracks">
      <name>Publishing and Receiving Tracks</name>
      <section anchor="subscriptions">
        <name>Subscriptions</name>
        <t>All subscriptions begin in the <tt>Idle</tt> state. A subscription can be
initiated and moved to the <tt>Pending</tt> state by either a publisher or a
subscriber.  A publisher initiates a subscription to a track by
sending the PUBLISH message.  The subscriber either accepts or rejects
the subscription using PUBLISH_OK (<xref target="message-request-ok"/>) or
REQUEST_ERROR.  A subscriber
initiates a subscription to a track by sending the SUBSCRIBE message.
The publisher either accepts or rejects the subscription using
SUBSCRIBE_OK or REQUEST_ERROR.  Once either of these sequences is
successful, the subscription moves to the <tt>Established</tt> state and can
be updated by the subscriber using REQUEST_UPDATE.  Either endpoint
can terminate an <tt>Established</tt> subscription, moving it to the
<tt>Terminated</tt> state.  The subscriber terminates a subscription in the
<tt>Pending (Subscriber)</tt> or <tt>Established</tt> states by sending STOP_SENDING.
The publisher terminates a subscription in the
<tt>Pending (Publisher)</tt> or <tt>Established</tt> states by sending PUBLISH_DONE
and closing the stream.</t>
        <t>This diagram shows the subscription state machine:</t>
        <artwork><![CDATA[
                              +--------+
                              |  Idle  |
                              +--------+
                                |    |
                      SUBSCRIBE |    | PUBLISH
                    (subscriber)|    | (publisher)
                                V    V
                   +--------------+ +--------------+
                   | Pending      | | Pending      |
              +----| (Subscriber) | | (Publisher)  |----+
              |    +--------------+ +--------------+    |
              |                 |    |                  |
REQUEST_ERROR |    SUBSCRIBE_OK |    | PUBLISH_OK       | REQUEST_ERROR
(publisher)   |      (publisher)|    | (subscriber)     | (subscriber)
              |                 V    V                  |
              |            +-------------+              |
              |            | Established | ------+
              |            |             |       | REQUEST_UPDATE
              |            +-------------+ <-----+
              |                 |    |                  |
              +--- STOP_SENDING |    | PUBLISH_DONE ----+
              |     (subscriber)|    | (publisher)      |
              |                 V    V                  |
              |            +-------------+              |
              +----------->| Terminated  | <------------+
                           +-------------+
]]></artwork>
        <t>A publisher <bcp14>MUST</bcp14> send exactly one SUBSCRIBE_OK or REQUEST_ERROR in response to
a SUBSCRIBE. A subscriber <bcp14>MUST</bcp14> send exactly one PUBLISH_OK
(<xref target="message-request-ok"/>) or REQUEST_ERROR in response to a PUBLISH. The peer <bcp14>SHOULD</bcp14> close the session with a protocol error
if it receives more than one.</t>
        <t>All <tt>Established</tt> subscriptions have a Forward State which is either 0 or 1.
The publisher does not send Objects if the Forward State is 0, and does send them
if the Forward State is 1.  The initiator of the subscription sets the initial
Forward State in either PUBLISH or SUBSCRIBE.  The subscriber can send
REQUEST_UPDATE to update the Forward State. Control messages, such as
PUBLISH_DONE (<xref target="message-publish-done"/>) are sent regardless of the forward state.</t>
        <t>Either endpoint can initiate a subscription to a track without exchanging any
prior messages other than SETUP.  Relays <bcp14>MUST NOT</bcp14> send any PUBLISH messages
without knowing the client is interested in and authorized to receive the
content. The communication of intent and authorization can be accomplished by
the client sending SUBSCRIBE_NAMESPACE, or conveyed in other mechanisms out of
band.</t>
        <t>An endpoint <bcp14>MAY</bcp14> SUBSCRIBE to a Track it is publishing, though only Relays are
required to handle such a SUBSCRIBE.  Such self-subscriptions are identical to
subscriptions initiated by other endpoints, and all published Objects will be
forwarded back to the endpoint, subject to priority and congestion response
rules.</t>
        <t>An endpoint <bcp14>MAY</bcp14> have multiple concurrent subscriptions to the same Track,
each identified by a unique Request ID. A publisher <bcp14>MAY</bcp14> assign the same or
different Track Aliases to these subscriptions.</t>
        <t>When an Object matches the filters of multiple subscriptions to the same Track,
the publisher <bcp14>MUST</bcp14> send the Object once for each matching subscription, even
when those subscriptions share the same Track Alias. Because subscriptions can
share a Track Alias, the subscriber re-applies each subscription's filter to
determine which subscription a received Object belongs to. Subscribers <bcp14>SHOULD</bcp14>
avoid overlapping filters across subscriptions to the same Track, as they are
responsible for deduplicating any resulting duplicate Objects.</t>
        <t>A publisher <bcp14>SHOULD</bcp14> begin sending incomplete objects when available to avoid
incurring additional latency.</t>
        <t>Publishers <bcp14>MAY</bcp14> start sending Objects on PUBLISH-initiated subscriptions before
receiving a PUBLISH_OK response to reduce latency.  Doing so can consume
unnecessary resources in cases where the Subscriber rejects the subscription
with REQUEST_ERROR or sets Forward=0 in REQUEST_UPDATE. It can also result in
the Subscriber dropping Objects if its buffering limits are exceeded (see
<xref target="datagrams"/> and <xref target="subgroup-header"/>).</t>
        <t>An object published or received in a subgroup or datagram is
<strong>subscription-delivered</strong>.</t>
        <section anchor="subscription-state-management">
          <name>Subscription State Management</name>
          <t>A subscriber keeps subscription state until it cancels the request
(see <xref target="request-cancellation"/>), or until receipt of a PUBLISH_DONE or
REQUEST_ERROR. Note that PUBLISH_DONE does not usually indicate that state
can immediately be removed, see <xref target="message-publish-done"/>.</t>
          <t>The Publisher can remove subscription state as soon as it has received
STOP_SENDING. It <bcp14>MUST</bcp14> reset any open streams associated with the SUBSCRIBE.</t>
          <t>The Publisher can also immediately delete subscription state after sending
PUBLISH_DONE, but <bcp14>MUST NOT</bcp14> send it until it has closed all related streams.</t>
          <t>A REQUEST_ERROR indicates no objects will be delivered, and both endpoints can
immediately remove relevant state. Objects <bcp14>MUST NOT</bcp14> be sent for requests that
end with an error.</t>
        </section>
        <section anchor="track-alias">
          <name>Track Alias</name>
          <t>To optimize wire efficiency, Subgroups and Datagrams refer to a track by a
numeric identifier, rather than the Full Track Name.  Track Alias is chosen by
the publisher and included in SUBSCRIBE_OK (<xref target="message-subscribe-ok"/>) or PUBLISH
(<xref target="message-publish"/>).</t>
          <t>The same Track Alias <bcp14>MUST NOT</bcp14> be used by a publisher to refer to two different
Tracks simultaneously in the same session. If a subscriber receives a
PUBLISH or SUBSCRIBE_OK that uses the same Track Alias as a different Track
with an <tt>Established</tt> subscription, it <bcp14>MUST</bcp14> close the session with error
<tt>DUPLICATE_TRACK_ALIAS</tt>.</t>
          <t>Objects can be sent before the Subscriber knows the Track Alias, requiring
buffering Objects with an unknown Track Alias. If a Track Alias
is used for two concurrent subscriptions to the same Track, an
Object that arrives with the Track Alias could be for either
Subscription. Reusing the same Track Alias for concurrent
subscriptions to the same Track can lead to missed delivery
if objects for the new subscription arrive
before the control message establishing the shared Alias.
The Subscriber can assume the Track Alias is reused until
told otherwise, in order to avoid missing Objects.</t>
          <t>To avoid a protocol violation and to ensure the Subscriber knows which Track
Objects are from, Publishers <bcp14>SHOULD NOT</bcp14> reuse a Track Alias for different Tracks
within a session, unless it is certain the prior Subscription has been
completely closed and no Objects are scheduled to be sent or in flight.</t>
          <t>Objects can arrive after a subscription has been cancelled.  Subscribers <bcp14>SHOULD</bcp14>
retain sufficient state to quickly discard these unwanted Objects, rather than
treating them as belonging to an unknown Track Alias.</t>
        </section>
        <section anchor="largest-object">
          <name>Largest Object</name>
          <t>The <tt>Largest Object</tt> is the Object with the largest Location
(<xref target="location-structure"/>) in the Track from the perspective of the publisher
processing the message. Largest Object updates when the first byte of an Object
with a Location larger than the previous value is published or received through
a subscription.</t>
          <t>The <tt>Next Object</tt> is the Location immediately following <tt>Largest Object</tt>, which
is <tt>{Largest Object.Group, Largest Object.Object + 1}</tt>, or {0, 0} if no content
has been delivered yet.</t>
        </section>
      </section>
      <section anchor="fetch">
        <name>Fetch</name>
        <section anchor="fetch-state-management">
          <name>Fetch State Management</name>
          <t>The publisher <bcp14>MUST</bcp14> send exactly one FETCH_OK or REQUEST_ERROR in response to a
FETCH.</t>
          <t>A subscriber keeps FETCH state until it cancels the request
(see <xref target="request-cancellation"/>), receives REQUEST_ERROR, or the FETCH data stream
receives a FIN or is reset. If the data stream is already open,
the subscriber wishing to cancel the FETCH <bcp14>MAY</bcp14> send STOP_SENDING for the
data stream as well as the bidi request stream. It <bcp14>MUST</bcp14> send STOP_SENDING
for the bidi request stream.</t>
          <t>The Publisher can remove fetch state as soon as it has received a
STOP_SENDING. It <bcp14>MUST</bcp14> reset the bidi request stream and unidirectional
data stream associated with the FETCH. It can also remove state after closing
the FETCH data stream.</t>
          <t>It can remove all FETCH state after closing the data stream with a FIN.</t>
          <t>A REQUEST_ERROR indicates that both endpoints can immediately remove state.
Since a relay can start delivering FETCH Objects from cache before determining
the result of the request, some Objects could be received even if the FETCH
results in error.</t>
        </section>
      </section>
      <section anchor="filtering-tracks-and-objects">
        <name>Filtering Tracks and Objects</name>
        <section anchor="location-filters">
          <name>Location Filters</name>
          <t>A Location filter specifies an inclusive range of Locations.  Only objects
with Locations within the inclusive range pass the filter.  A Location filter
is encoded as specified in <xref target="location-filter"/>.</t>
          <t>Subscribers can specify a Location filter on a subscription indicating to the
publisher which Objects to send.  Subscriptions without a filter pass all
Objects published or received via upstream subscriptions.</t>
          <t>Fetch requests can also specify a Location filter.  Fetch requests without a
filter include all Locations from {0, 0} up to <tt>Largest Object</tt>
(<xref target="largest-object"/>).</t>
          <t>Some Location filters are defined to be relative to the <tt>Largest Object</tt>
(<xref target="largest-object"/>).</t>
          <t>A Location Filter on a subscription is always valid, even if it specifies a
range entirely before Largest Object.</t>
          <t>Note that due to network reordering or prioritization, relays can receive
Objects with Locations smaller than <tt>Largest Object</tt> after the filter is
processed, but these Objects do not pass a filter that starts at the Next
Object.</t>
          <t>A publisher <bcp14>MUST NOT</bcp14> send subscription-delivered objects from outside the
requested range.  Because updating filters is asynchronous, subscribers can
receive objects outside the current filter.</t>
          <t>A publisher does not end a subscription solely because the Largest Object
advances past the end of the current Location Filter.</t>
          <t>Fill-delivered objects are governed by the Location filter in
FILL_PARAMETERS (see <xref target="fill-semantics"/>).</t>
        </section>
        <section anchor="range-filters">
          <name>Range Filters</name>
          <t>Range Filters are parameters in SUBSCRIBE, FETCH, or SUBSCRIBE_TRACKS that
tell a publisher to filter tracks (via TRACK PROPERTY FILTER) and objects
according to subscriber-provided criteria.  Range filters are specified as
ranges of integer values in Track and Object Properties and other
Object header fields (Subgroup ID, Object ID, and Publisher Priority).
There are five Range Filter parameter types, 0x25-0x29.  They share the
encoding specified in <xref target="range-filter-structure"/>.</t>
          <t>An object matches the filter if its value falls within any Range (i.e., Ranges
are OR'd within a filter parameter).</t>
          <t>Filter parameters with the same SetID are AND'd; distinct SetIDs are OR'd.
The final result is SetID=0 OR SetID=1 OR ... SetID=255, where each
SetID=i is the AND of all filter parameters carrying that SetID.</t>
          <t>The Track Property filter parameter <bcp14>MAY</bcp14> appear multiple times in a
SUBSCRIBE_TRACKS message or REQUEST_UPDATE for it.
All other filter parameters <bcp14>MAY</bcp14> appear multiple times in a FETCH, SUBSCRIBE,
SUBSCRIBE_TRACKS, or REQUEST_UPDATE (on a subscription, from the subscriber only)
message.  If the same combination of Parameter Type, SetID, and Property Type
(only in the Track and Object Property Filters) repeat in any message,
an endpoint <bcp14>MUST</bcp14> reject this with REQUEST_ERROR with error code INVALID_FILTER.</t>
          <t>In REQUEST_UPDATE, Length of 0 removes the filter; non-zero replaces it
entirely.  If a filter parameter is omitted from REQUEST_UPDATE, it is
unchanged.  If omitted from other messages, the default is no filter.</t>
          <t>Range Filters are only allowed if the setup option MAX_FILTER_RANGES
is non-zero, which limits the total number of Ranges allowed
in all Range Filter parameters for a given subscription or fetch.
If this limit is exceeded, an endpoint <bcp14>MUST</bcp14> reject this with REQUEST_ERROR
with error code INVALID_FILTER.</t>
          <t>The Track Property Filter can be used in SUBSCRIBE_TRACKS to filter PUBLISH
messages with required Track Property types and values.  PUBLISH messages
which pass the filter will be forwarded while those which do not pass it
will not be forwarded nor will any Objects.</t>
          <t>The Object Property Filter can be used to filter Objects with required
Object Property types and values.  It only filters Object Properties in
the Object header, and does not evaluate Track Properties in PUBLISH
messages.</t>
        </section>
        <section anchor="combining-filters">
          <name>Combining Filters</name>
          <t>All filter types are combined using logical "AND" operations
to further restrict which tracks and objects pass all filter criteria.
This includes all Range Filters <xref target="range-filters"/> and Location
Filters <xref target="location-filters"/>, which can be evaluated in any order.
The Forward parameter is also a type of filter.  The publisher <bcp14>MUST</bcp14>
forward only objects that pass all filters.</t>
          <artwork><![CDATA[
Pass = Forward AND Location Filters AND Range Filters
]]></artwork>
        </section>
      </section>
      <section anchor="fill-semantics">
        <name>Fill Semantics</name>
        <t>A subscription that carries a FILL_PARAMETERS parameter (see
<xref target="fill-parameters"/>) causes the publisher to open a unidirectional stream
beginning with a FETCH_HEADER (see <xref target="fetch-header"/>) and delivered as a FETCH
response (see <xref target="message-fetch"/>).  This is called a fill fetch stream.</t>
        <t>The <strong>fill range</strong> is the range of Locations selected by the Location filter
inside FILL_PARAMETERS, or the subscription's Location filter if it is
omitted. The filter is evaluated using the rules for a Fetch in
<xref target="location-filters"/>, so the fill range never extends beyond <tt>Largest
Object</tt>. When the subscription has no Location filter, or the LOCATION_FILTER
inside FILL_PARAMETERS is zero-length, the fill range is the entire track up to
<tt>Largest Object</tt>.  The subscriber learns the <tt>Largest Object</tt> from the
<tt>LARGEST_OBJECT</tt> parameter in SUBSCRIBE_OK or REQUEST_UPDATE_OK.</t>
        <t>Because the fill range is specified independently of the subscription's
Location filter, a subscriber can retrieve a range of Groups prior to the live
edge while the subscription itself starts at the Next Group.  If the fill range
is empty, or starts after Largest Object, the publisher does not open a fill fetch stream.</t>
        <t>The fill fetch stream inherits the subscription's parameters, including
subscriber priority, range filters and authorization; parameters carried inside
FILL_PARAMETERS override them for the fill fetch stream.  FILL_TIMEOUT (see
<xref target="fill-timeout"/>) applies to fill fetch streams in the same way it applies to a
FETCH.</t>
        <t>The FETCH_HEADER on the fill fetch stream carries the Request ID of the message
that initiated it: the SUBSCRIBE Request ID for the initial fill, or the
REQUEST_UPDATE Request ID for a subsequent fill.  As a result of
REQUEST_UPDATE, a subscription can have
multiple fill fetch streams open at once, each identified by its Request ID;
opening a new fill fetch stream does not implicitly cancel any previously
opened fill fetch streams.</t>
        <t>An object delivered on the fill fetch stream is <strong>fill-delivered</strong>.  When the
fill range overlaps the subscription's Location filter, an object can be both
fill-delivered and subscription-delivered.  A subscriber that wants each Object
delivered exactly once uses the Next Object Subscription Location Filter coupled
with an open-ended fill range, which the publisher will end at Largest Object.</t>
        <section anchor="opening-and-closing-fill-fetch-streams">
          <name>Opening and Closing Fill Fetch Streams</name>
          <t>A publisher opens a fill fetch stream when it processes a SUBSCRIBE or
REQUEST_UPDATE that carries FILL_PARAMETERS while Forward State is 1.</t>
          <ul spacing="normal">
            <li>
              <t>FILL_PARAMETERS carried while Forward State is 0 opens no fill fetch stream.
Transitioning to Forward State 1 without re-sending FILL_PARAMETERS does not
open one either.</t>
            </li>
            <li>
              <t>A REQUEST_UPDATE that does not carry FILL_PARAMETERS does not open a new fill
fetch stream.</t>
            </li>
            <li>
              <t>When the subscription is cancelled, the publisher <bcp14>MUST</bcp14> reset any open fill fetch streams.</t>
            </li>
          </ul>
          <t>The publisher signals that the fill is complete by closing the stream with a
FIN once all objects in the fill range have been delivered.  Because there is
no REQUEST_ERROR associated with a fill fetch stream, the publisher signals a
fill failure by resetting the stream; it <bcp14>MUST</bcp14> open a fill fetch stream and reset
it immediately after the FETCH_HEADER if necessary.  A subscriber can cancel a
fill fetch stream independently using STOP_SENDING.  Resetting or
cancelling a fill fetch stream, by either endpoint, does not affect the
subscription, which continues to deliver objects using subscribe subgroups and
datagrams.</t>
        </section>
      </section>
      <section anchor="joining-tracks">
        <name>Joining an Ongoing Track</name>
        <t>The MOQT Object model is designed with the concept that the beginning of a Group
is a join point, so in order for a subscriber to join a Track, it needs to
request an existing Group or wait for a future Group.  Different applications
will have different approaches for when to begin a new Group.</t>
        <t>To join a Track immediately, the subscriber sends a SUBSCRIBE with a Location
Filter <xref target="location-filters"/> that starts at the Next Object.  Delivery begins
with the next Object and can begin mid-group.</t>
        <t>To join a Track at the current Group, the subscriber sends a SUBSCRIBE with a
Location Filter that starts at the Next Object and a FILL_PARAMETERS parameter
(see <xref target="fill-parameters"/>) whose Location filter has StartGroup=1, which fills
the current Group from its start.</t>
        <t>To join a Track at a past Group, the subscriber sends a SUBSCRIBE with a
FILL_PARAMETERS parameter whose Location filter selects the intended Groups,
which can be relative.  The publisher delivers the fill range on a fill fetch
stream and subscription-delivered Objects in subgroups or
datagrams (see <xref target="fill-semantics"/>).</t>
        <t>To join a Track at the next Group, the subscriber sends a SUBSCRIBE with
a Location Filter <xref target="location-filters"/> that starts at the Next Group.</t>
        <section anchor="dynamically-starting-new-groups">
          <name>Dynamically Starting New Groups</name>
          <t>While some publishers will deterministically create new Groups, other
applications might want to only begin a new Group when needed.  A subscriber
joining a Track might detect that it is more efficient to request the Original
Publisher create a new group than to fill the current group.  Publishers
indicate a Track supports dynamic group creation using the DYNAMIC_GROUPS
Track Property (<xref target="dynamic-groups"/>).</t>
          <t>One possible subscriber pattern is to SUBSCRIBE to a Track using a Location Filter
that starts at the Next Object and observe the <tt>Largest Object</tt> in the response.  If the
Object ID is below the application's threshold, the subscriber sends a FETCH for
the beginning of the Group.  If the Object ID is above the threshold and the
Track supports dynamic groups, the subscriber sends a REQUEST_UPDATE message with the
NEW_GROUP_REQUEST parameter equal to the Next Group (see <xref target="new-group-request"/>).</t>
          <t>Another possible subscriber pattern is to send a SUBSCRIBE with a Location Filter
that starts at the Next Group and NEW_GROUP_REQUEST equal to 0.  The value of
DYNAMIC_GROUPS in SUBSCRIBE_OK will indicate if the publisher supports dynamic
groups. A publisher that does will begin the next group as soon as practical.</t>
        </section>
      </section>
      <section anchor="mandatory-track-properties">
        <name>Mandatory Track Properties</name>
        <t>Property types in the range 0x4000-0x7FFF are designated as Mandatory Track
Properties. These properties <bcp14>MUST</bcp14> have Track scope. Mandatory Track Properties
have special handling rules that prevent tracks with required properties from
being forwarded to or processed by endpoints that do not understand them.</t>
        <t>An Object received with a Mandatory Track Property as an Object Property is
malformed (see <xref target="malformed-tracks"/>).</t>
        <t>When an endpoint receives a Mandatory Track Property in PUBLISH,
SUBSCRIBE_OK, or FETCH_OK that it does not
understand, it <bcp14>MUST NOT</bcp14> process or forward that track:</t>
        <ul spacing="normal">
          <li>
            <t>For PUBLISH messages: the subscriber <bcp14>MUST</bcp14> respond with REQUEST_ERROR with
error code UNSUPPORTED_EXTENSION.</t>
          </li>
          <li>
            <t>For SUBSCRIBE_OK messages: the subscriber <bcp14>MUST</bcp14> cancel the subscription
(see <xref target="request-cancellation"/>).  If the subscriber is a relay with pending
downstream subscribers, it <bcp14>MUST</bcp14> send REQUEST_ERROR with error code
UNSUPPORTED_EXTENSION to the downstream subscribers.</t>
          </li>
          <li>
            <t>For FETCH_OK messages: the subscriber <bcp14>MUST</bcp14> cancel the fetch
(see <xref target="request-cancellation"/>).  If the subscriber is a relay and has not yet
sent a FETCH_OK or REQUEST_ERROR downstream, it <bcp14>MUST</bcp14> send REQUEST_ERROR with
error code UNSUPPORTED_EXTENSION to the downstream fetch requester.  If the
relay has already forwarded data on a fetch stream, it <bcp14>MUST</bcp14> reset the stream.</t>
          </li>
        </ul>
        <t>A publisher that knows a subscriber does not support a Mandatory Track Property
<bcp14>SHOULD</bcp14> take the following action:</t>
        <ul spacing="normal">
          <li>
            <t>For SUBSCRIBE: respond with REQUEST_ERROR with error code UNSUPPORTED_EXTENSION.</t>
          </li>
          <li>
            <t>For FETCH: respond with REQUEST_ERROR with error code UNSUPPORTED_EXTENSION.</t>
          </li>
          <li>
            <t>For PUBLISH: do not publish the track to that subscriber.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="track-discovery">
      <name>Namespace Discovery</name>
      <t>Discovery of MOQT servers is always done out-of-band. Namespace discovery can be
done in the context of an established MOQT session using SUBSCRIBE_NAMESPACE
(see <xref target="subscribing-to-namespaces"/>).</t>
      <t>Given sufficient out of band information, it is valid for a subscriber to send a
SUBSCRIBE or FETCH message to a publisher (including a relay) without any
previous MOQT messages besides SETUP. However, SUBSCRIBE_NAMESPACE, SUBSCRIBE_TRACKS, PUBLISH and
PUBLISH_NAMESPACE messages provide an in-band means of discovery of publishers
for a namespace.</t>
      <t>The syntax of these messages is described in <xref target="message"/>.</t>
      <section anchor="subscribing-to-namespaces">
        <name>Subscribing to Namespaces</name>
        <t>If the subscriber is aware of a namespace of interest, it can send
SUBSCRIBE_NAMESPACE or SUBSCRIBE_TRACKS to publishers/relays it has established
a session with. The Track Namespace Prefix carried in these messages is
compared against the namespaces known to the receiver using Namespace Prefix
Matching (<xref target="namespace-prefix-matching"/>).</t>
        <t>SUBSCRIBE_NAMESPACE requests namespace discovery: the publisher sends relevant
NAMESPACE and NAMESPACE_DONE messages for namespaces matching the prefix,
including echoing back Track Namespaces under the prefix that have been published
to it.</t>
        <t>SUBSCRIBE_TRACKS requests track subscriptions: the publisher sends PUBLISH
messages for tracks within matching namespaces, excluding tracks published
by the subscriber.</t>
        <t>Either message with zero Track Namespace fields indicates the sender is
interested in all namespaces or all tracks from the receiver, respectively.</t>
        <t>By sending SUBSCRIBE_NAMESPACE, the subscriber indicates that it trusts the
relay to be authoritative for namespaces matching the requested prefix.
NAMESPACE messages received on the SUBSCRIBE_NAMESPACE response stream inherit
this trust and do not independently carry authorization.</t>
        <t>The subscriber sends SUBSCRIBE_NAMESPACE or SUBSCRIBE_TRACKS on a new
bidirectional stream and the publisher <bcp14>MUST</bcp14> send a single REQUEST_OK or
REQUEST_ERROR as the first message on the bidirectional stream in response.</t>
        <t>If a Subscription cannot be created because there are no available bidirectional
streams or any other reason, the Publisher sends a PUBLISH_SKIPPED message on the
SUBSCRIBE_TRACKS response stream to indicate the Full Track Name of the
Subscription that was not created. The Publisher <bcp14>MUST NOT</bcp14> send a PUBLISH for a
Track for a given SUBSCRIBE_TRACKS after PUBLISH_SKIPPED has been sent,
scoped to a single PUBLISH.  If, for example, the publisher disconnects from
a relay and later reconnects and sends a new PUBLISH, the relay <bcp14>MAY</bcp14> send the new
PUBLISH downstream.
If desired, the subscriber can issue a SUBSCRIBE to establish a subscription to
that track.</t>
        <t>The receiver of a REQUEST_OK or REQUEST_ERROR ought to
forward the result to the application, so the application can decide which other
publishers to contact, if any.</t>
        <t>A SUBSCRIBE_NAMESPACE or SUBSCRIBE_TRACKS is cancelled as described in
<xref target="request-cancellation"/>, by resetting or sending STOP_SENDING on the stream.
Cancelling SUBSCRIBE_TRACKS does not prohibit original publishers
from sending further PUBLISH messages, but relays <bcp14>MUST NOT</bcp14>
send any further PUBLISH messages to a client without knowing the client is
interested in and authorized to receive the content.</t>
      </section>
      <section anchor="publishing-namespaces">
        <name>Publishing Namespaces</name>
        <t>A publisher <bcp14>MAY</bcp14> send PUBLISH_NAMESPACE messages to any subscriber. A
PUBLISH_NAMESPACE indicates to the subscriber that the publisher has tracks
available in that namespace. A subscriber <bcp14>MAY</bcp14> send SUBSCRIBE or FETCH for tracks
in a namespace without having received a PUBLISH_NAMESPACE for it.</t>
        <t>If a publisher is the Original Publisher for one or more tracks in a given
namespace, or is a relay that has received an authorized PUBLISH_NAMESPACE for
that namespace from an upstream publisher, it <bcp14>MUST</bcp14> send a NAMESPACE message
that includes this namespace to any subscriber that has sent a
SUBSCRIBE_NAMESPACE whose prefix matches this namespace.</t>
        <t>A subscriber can receive a PUBLISH_NAMESPACE on a request stream for a
namespace that falls within an active SUBSCRIBE_NAMESPACE prefix. This
occurs when SUBSCRIBE_NAMESPACE or its response is in flight at the same time
as a PUBLISH_NAMESPACE, or when an original publisher sends PUBLISH_NAMESPACE
to advertise namespaces within the prefix being discovered. Such a
PUBLISH_NAMESPACE is valid and <bcp14>MAY</bcp14> carry an AUTHORIZATION TOKEN parameter.
Its lifetime is independent of the SUBSCRIBE_NAMESPACE stream.</t>
        <t>An endpoint <bcp14>SHOULD</bcp14> report the reception of a REQUEST_OK or
REQUEST_ERROR to the application to inform the search for additional
subscribers for a namespace, or to abandon the attempt to publish under this
namespace. A
subscriber <bcp14>MUST</bcp14> send exactly one REQUEST_OK or REQUEST_ERROR as the first
message on the bidi stream in response to a PUBLISH_NAMESPACE. The publisher
<bcp14>SHOULD</bcp14> close the session with a protocol error if it receives more than one.</t>
        <t>A PUBLISH_NAMESPACE is withdrawn by cancelling the request
(see <xref target="request-cancellation"/>), although it is not a protocol error for
the subscriber to send a SUBSCRIBE or FETCH message for a track in a
namespace after the namespace is withdrawn.</t>
        <t>A subscriber can cancel the request (see <xref target="request-cancellation"/>) to revoke
acceptance of a PUBLISH_NAMESPACE. If the reason for cancellation is expiration
of authorization credentials, the publisher can send PUBLISH_NAMESPACE again
on a new bidi stream with refreshed authorization, or close the stream and
discard associated state.</t>
        <t>While PUBLISH_NAMESPACE indicates to relays how to connect publishers and
subscribers, it is not a full-fledged routing protocol and does not protect
against loops and other phenomena. In particular, PUBLISH_NAMESPACE <bcp14>SHOULD NOT</bcp14>
be used to find paths through richly connected networks of relays.</t>
        <t>A subscriber <bcp14>MAY</bcp14> send a SUBSCRIBE or FETCH for a track to any publisher. If it
has accepted a PUBLISH_NAMESPACE with a namespace that exactly matches the
namespace for that track, it <bcp14>SHOULD</bcp14> only request it from the senders of those
PUBLISH_NAMESPACE messages.</t>
      </section>
      <section anchor="filtering-subscribetracks">
        <name>Filtering SUBSCRIBE_TRACKS</name>
        <t>Range Filters <xref target="range-filters"/> can be used in SUBSCRIBE_TRACKS to filter
Tracks in a namespace using the Track Property Filter. Objects published in
the resulting Subscriptions can be filtered by any Range Filter.</t>
        <section anchor="large-namespaces">
          <name>Relay Resource Protection in Large Namespaces</name>
          <t>Relays <bcp14>SHOULD</bcp14> aggregate and propagate filters upstream on subscriptions,
especially namespace subscriptions,
to conserve and protect their resources from excessive load.  They <bcp14>MAY</bcp14>
also impose limits on the number of publishers in a namespace, by rejecting
or closing namespace subscriptions with the error NAMESPACE_TOO_LARGE, or
CONFLICTING_FILTERS if too many disjoint filters are requested on downstream
subscriptions across a large number of subscribers, or PREFIX_OVERLAP if different
subscribers force an aggregated upstream subscription to overlap.</t>
        </section>
      </section>
    </section>
    <section anchor="object-transmission">
      <name>Object Transmission</name>
      <section anchor="priorities">
        <name>Priorities</name>
        <t>MOQT priorities allow a subscriber and original publisher to influence
the transmission order of Objects within a session in the presence of
congestion.</t>
        <section anchor="definitions">
          <name>Definitions</name>
          <t>MOQT maintains priorities between different schedulable objects.
A schedulable object in MOQT is either:</t>
          <ol spacing="normal" type="1"><li>
              <t>The first or next Object in a Subgroup that is in response to a subscription.</t>
            </li>
            <li>
              <t>An Object with forwarding preference Datagram.</t>
            </li>
            <li>
              <t>An Object in response to a FETCH where that Object is the next
Object in the response.</t>
            </li>
          </ol>
          <t>An Object is not schedulable if it is known that no part of it can be written
due to underlying transport flow control limits.</t>
          <t>A single subgroup or datagram has a single publisher priority. Within a
subscription, it can be useful to conceptualize this process as
scheduling subgroups or datagrams instead of individual objects on them.
FETCH responses however can contain objects with different publisher
priorities.</t>
          <t>A <tt>priority number</tt>is an unsigned integer with a value between 0 and 255.
A lower priority number indicates higher priority; the highest priority is 0.</t>
          <t><tt>Subscriber Priority</tt> is a priority number associated with an individual
request.  It is carried in the SUBSCRIBER_PRIORITY parameter
(<xref target="subscriber-priority"/>), and can be updated.  The subscriber priority of an
individual schedulable object is the subscriber priority of the request that
caused that object to be sent. When subscriber priority is changed, a best
effort <bcp14>SHOULD</bcp14> be
made to apply the change to all objects that have not been scheduled, but it is
implementation dependent what happens to objects that have already been
scheduled.</t>
          <t><tt>Publisher Priority</tt> is a priority number associated with an individual
schedulable object.  A default for the subscription is specified in the
DEFAULT_PUBLISHER_PRIORITY Track Property (<xref target="publisher-priority"/>). Publisher
priority can also be set per subgroup or datagram in the subgroup header or
datagram (see <xref target="data-streams"/>), which overrides the default.</t>
          <t><tt>Group Order</tt> is a property of an individual subscription.  It can be either
'Ascending' (groups with lower group ID are sent first), or 'Descending'
(groups with higher group ID are sent first).  The subscriber optionally
communicates its group order preference in the SUBSCRIBE or SUBSCRIBE_TRACKS
message; the publisher's preference, carried in the
DEFAULT_PUBLISHER_GROUP_ORDER Track Property (<xref target="group-order-pref"/>), is used if
the subscriber did not express one (by omitting the Group Order parameter). The
group order of an existing subscription cannot be changed.</t>
        </section>
        <section anchor="scheduling-algorithm">
          <name>Scheduling Algorithm</name>
          <t>When an MOQT publisher has multiple schedulable objects it can choose between,
the objects <bcp14>SHOULD</bcp14> be selected as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>If two objects have different subscriber priorities associated with them,
the one with <strong>the highest subscriber priority</strong> is scheduled to be sent first.</t>
            </li>
            <li>
              <t>If two objects have the same subscriber priority, but different publisher
priorities, the one with <strong>the highest publisher priority</strong> is scheduled to be
sent first.</t>
            </li>
            <li>
              <t>If two objects in the same subscription have the same subscriber and
publisher priority, but belong to two different groups of the same track,
<strong>the group order</strong> of the subscription is used to decide the one that is
scheduled to be sent first. When a subscription fill's Group Order differs
from the subscription's Group Order, the subscription-delivered object is scheduled
first.</t>
            </li>
            <li>
              <t>If two objects in the same subscription have the same subscriber
and publisher priority and belong to the same group of the same track, and
one is delivered by the fill fetch stream while the other is
subscription-delivered, the fill-delivered object is scheduled first. Otherwise,
the one with <strong>the lowest Subgroup ID</strong> (for objects with forwarding preference
Subgroup), or <strong>the lowest Object ID</strong> (for objects with forwarding preference
Datagram) is scheduled to be sent first.  If the two objects have
different Forwarding Preferences the datagram is sent first.</t>
            </li>
          </ol>
          <t>Within the same group, fill-delivered objects win the tie-break over
subscription-delivered objects (rule 4) because objects with smaller Locations
are assumed to be needed before those with larger Locations.</t>
          <t>The definition of "scheduled to be sent first" in the algorithm is implementation
dependent and is constrained by the prioritization interface of the underlying
transport. For some implementations, it could mean that the object is serialized
and passed to the underlying transport first.  Other implementations can
control the order packets are initially transmitted.</t>
          <t>This algorithm does not provide a well-defined ordering for objects that belong
to different subscriptions or FETCH responses, but have the same subscriber and
publisher priority.  The ordering in those cases is implementation-defined,
though the expectation is that all subscriptions will be able to send some data.</t>
          <t>A publisher might not utilize the entire available congestion window,
session flow control, or all available streams for lower
priority Objects if it expects higher priority Objects will be available to send
in the near future or it wants to reserve some bandwidth for control messages.</t>
          <t>Given the critical nature of control messages and their relatively
small size, the control streams <bcp14>SHOULD</bcp14> be prioritized highest, followed by the
bidi request streams and then all Objects. Bidi request streams <bcp14>MAY</bcp14> be
prioritized within themselves by Subscriber Priority if specified.</t>
        </section>
        <section anchor="considerations-for-setting-priorities">
          <name>Considerations for Setting Priorities</name>
          <t>For downstream subscriptions, relays <bcp14>SHOULD</bcp14> respect the subscriber and original
publisher's priorities.  Relays can receive subscriptions with conflicting
subscriber priorities or Group Order preferences.  Relays <bcp14>SHOULD NOT</bcp14> directly
use Subscriber Priority or Group Order from incoming subscriptions for upstream
subscriptions. A Relay's use of these fields for upstream subscriptions can be
based on factors specific to it, such as the popularity of the content or
policy, or relays can specify the same value for all upstream subscriptions.</t>
          <t>MOQT Sessions can span multiple namespaces, and priorities might not
be coordinated across namespaces.  The subscriber's priority is
considered first, so there is a mechanism for a subscriber to fix
incompatibilities between different namespaces prioritization schemes.
Additionally, it is anticipated that when multiple namespaces
are present within a session, the namespaces could be coordinating,
possibly part of the same application.  In cases when pooling among
namespaces is expected to cause issues, multiple MOQT sessions, either
within a single connection or on multiple connections can be used.</t>
          <t>Implementations that have a default priority <bcp14>SHOULD</bcp14> set it to a value in
the middle of the range (eg: 128) to allow non-default priorities to be
set either higher or lower.</t>
        </section>
      </section>
      <section anchor="delivery-timeouts">
        <name>Delivery Timeouts and Data Reliability</name>
        <t>Each MOQT subscription has two timeout values associated with it: a
SUBGROUP_DELIVERY_TIMEOUT and an OBJECT_DELIVERY_TIMEOUT.  Both of those values
are expressed in milliseconds and both are optional; a value of 0 means that
there is no timeout set.</t>
        <t>The publisher communicates both timeout values as a Track Property; the
subscriber communicates them as Message Parameters.  Either timeout value can
also be set as an Object Property on the first object in a subgroup, overriding
the Track-level value for that subgroup.  If either timeout is set as an Object
Property on any object other than the first in a subgroup, it is ignored.  For
each type of timeout, the
publisher's value is the Object Property when present on the first object of the
subgroup, and the Track Property otherwise.  If both the publisher's value and
the subscriber's value are non-zero, the smaller of the two is used.</t>
        <t>If the OBJECT_DELIVERY_TIMEOUT is not zero, the MOQT implementation <bcp14>MUST</bcp14> retain
the time at which the last header byte of every object has been either
received from the upstream subscription, or provided by the original publisher
application.  The actual mechanism by which the timeout works depends on the
Object Forwarding Preference:</t>
        <ul spacing="normal">
          <li>
            <t>For subgroups, the implementation <bcp14>MUST</bcp14> check the time elapsed
before attempting to pass it to the underlying transport
for transmission; if the time elapsed exceeds OBJECT_DELIVERY_TIMEOUT, it
<bcp14>MUST</bcp14> reset the underlying transport stream with the reset stream code
DELIVERY_TIMEOUT (see <xref target="closing-subgroup-streams"/>) and <bcp14>SHOULD NOT</bcp14> attempt to
open a new stream to deliver additional Objects in that Subgroup.  The
implementation <bcp14>SHOULD</bcp14> check object delivery timeouts before retransmitting
object data if the underlying transport implementation allows.  The
implementations <bcp14>SHOULD</bcp14> minimize the amount of data buffered at the underlying
transport layer, as any data buffered at this layer can no longer be timed
out, potentially leading to transmission of expired data.</t>
          </li>
          <li>
            <t>For datagrams, the implementation <bcp14>MUST</bcp14> drop the datagrams if the time elapsed
exceeds OBJECT_DELIVERY_TIMEOUT.  Similar to subgroups,
implementations <bcp14>SHOULD</bcp14> either minimize datagram queueing, or use datagram
queueing mechanisms that support time bounds (such as the <tt>outgoingMaxAge</tt>
parameter in the W3C WebTransport API).</t>
          </li>
        </ul>
        <t>If the Object Forwarding Preference is Subgroup and the value of
SUBGROUP_DELIVERY_TIMEOUT is not zero, the MOQT implementation <bcp14>MUST</bcp14>
start a timer of SUBGROUP_DELIVERY_TIMEOUT duration once it becomes
aware that all of the objects on the subgroup have been published
(either by receiving a FIN from the upstream subscription, or, in case
of the original publisher, through being notified of this fact by the
application).  If the timer expires before the underlying transport
stream reaches "all data committed" state
(<xref section="4.3" sectionFormat="comma" target="I-D.ietf-webtrans-overview"/>), the implementation
<bcp14>MUST</bcp14> reset the stream.  This ensures that MOQT can time out subgroups
where all of the data has been sent but not yet fully delivered due to
packet loss.</t>
        <t>For objects whose Object Forwarding Preference is Datagram, the
SUBGROUP_DELIVERY_TIMEOUT acts the same way as OBJECT_DELIVERY_TIMEOUT; if both
are non-zero, the smaller of the two is used.</t>
        <table anchor="timeout-comparison">
          <name>Comparison of the delivery timeout mechanisms</name>
          <thead>
            <tr>
              <th align="left"> </th>
              <th align="left">SUBGROUP_DELIVERY_TIMEOUT</th>
              <th align="left">OBJECT_DELIVERY_TIMEOUT</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Timeout starts</td>
              <td align="left">When the FIN for the subgroup is received</td>
              <td align="left">When the last byte of the object header is received</td>
            </tr>
            <tr>
              <td align="left">Timeout checked at</td>
              <td align="left">Via a timer until all data is acknowledged</td>
              <td align="left">When the object is sent to the underlying transport</td>
            </tr>
            <tr>
              <td align="left">Action upon timeout</td>
              <td align="left">Reset for subgroups, drop for datagrams</td>
              <td align="left">Reset for subgroups, drop for datagrams</td>
            </tr>
          </tbody>
        </table>
        <t>Publishers can, at their discretion, discontinue forwarding Objects before
either timeout occurs, subject to stream closure and ordering
constraints described in <xref target="closing-subgroup-streams"/>.  However, if neither
timeout is set to a non-zero value, all Objects in the track matching the
subscription filter are delivered as indicated by their Group Order and
Priority.  If a subscriber fails to consume Objects at a sufficient rate,
causing the publisher to exceed its resource limits, the publisher <bcp14>MAY</bcp14>
terminate the subscription using PUBLISH_DONE with error <tt>TOO_FAR_BEHIND</tt>.</t>
      </section>
    </section>
    <section anchor="session">
      <name>Sessions</name>
      <section anchor="moqt-uri-scheme">
        <name>MOQT URI Scheme</name>
        <t>An MOQT server is identified using a URI with the "moqt" scheme.  The "moqt"
URI scheme is defined as follows, using definitions from <xref target="RFC3986"/>:</t>
        <artwork><![CDATA[
moqt-URI = "moqt" "://" authority path-abempty [ "?" query ]
]]></artwork>
        <t>The <tt>authority</tt> portion <bcp14>MUST NOT</bcp14> contain an empty <tt>host</tt> portion.
The <tt>moqt</tt> URI scheme supports the <tt>/.well-known/</tt> path prefix defined in
<xref target="RFC8615"/>.</t>
        <t>The <tt>moqt</tt> URI scheme follows the generic URI syntax of <xref target="RFC3986"/> for
the <tt>authority</tt>, <tt>path-abempty</tt>, and <tt>query</tt> components, including the
use of reserved characters and percent-encoding defined therein.  A <tt>moqt</tt>
URI can be converted to an <tt>https</tt> URI by replacing the scheme (see
<xref target="webtransport"/>), so the <tt>path-abempty</tt> and <tt>query</tt> components use the same
syntax as <tt>https</tt> URIs.</t>
        <section anchor="moqt-fragment">
          <name>Fragment Identifiers</name>
          <t>The media type for resources identified by <tt>moqt</tt> URIs is
<tt>application/moqt</tt> (see <xref target="iana-media-type"/>).</t>
          <t>Fragment identifiers <bcp14>MAY</bcp14> be used with <tt>moqt</tt> URIs. The fragment is not
transmitted to the server; it is processed locally by the client after
establishing the MOQT session.</t>
          <t>A <tt>moqt</tt> URI fragment <bcp14>MUST</bcp14> begin with a registered fragment type
identifier, followed by a colon (<tt>:</tt>), followed by a type-specific value:</t>
          <artwork><![CDATA[
moqt://example.com/app#<type>:<value>
]]></artwork>
          <t>Fragment type identifiers <bcp14>MUST</bcp14> consist of ASCII lowercase letters,
digits, and hyphens (<tt>a-z</tt>, <tt>0-9</tt>, <tt>-</tt>). The
semantics of the value after the colon are defined by the specification
that registers the fragment type.</t>
          <t>Fragment type identifiers are registered in the "MOQT URI Fragment
Types" registry (<xref target="iana-fragment-types"/>).</t>
        </section>
        <section anchor="dereferencing-a-moqt-uri">
          <name>Dereferencing a MOQT URI</name>
          <t>The default operation for dereferencing a <tt>moqt</tt> URI is to establish a
MOQT session to the identified server.</t>
          <t>The <tt>moqt</tt> URI scheme has the following security considerations:</t>
          <ul spacing="normal">
            <li>
              <t>The <tt>authority</tt> component is sent in the TLS SNI extension during
connection establishment, exposing the target server identity to
on-path observers. Encrypted Client Hello (ECH) <xref target="RFC9580"/> can
mitigate this exposure.</t>
            </li>
            <li>
              <t>The <tt>path-abempty</tt> and <tt>query</tt> components are visible to the relay
that terminates the client's connection.</t>
            </li>
          </ul>
          <t>TODO: Add internationalization statement per RFC 7595 Section 3.6.</t>
          <t>The client resolves the <tt>host</tt> subcomponent of the <tt>authority</tt> to one or
more network addresses, most commonly using DNS A <xref target="RFC1035"/> and AAAA <xref target="RFC3596"/> records.</t>
          <t>When SVCB-compatible records <xref target="RFC9460"/> are published for the <tt>authority</tt>,
a client <bcp14>MAY</bcp14> use them to learn the server's endpoints and supported ALPN
protocols before connecting. A client using WebTransport resolves the
<tt>https</tt> URI derived in <xref target="webtransport"/> using HTTPS resource records as for
any <tt>https</tt> origin.
TODO: reference moqt SVCB record draft once available.</t>
          <t>If the port is omitted in the URI, a default port of 443 is used.</t>
          <t>The client <bcp14>MAY</bcp14> use either native QUIC or WebTransport. On a QUIC connection,
the client offers any combination of MOQT ALPNs (e.g. <tt>moqt-1</tt>, <tt>moqt-2</tt>)
and <tt>h3</tt> that it supports in its TLS ClientHello, in preference order. If the
server selects an MOQT ALPN, the session proceeds as described in
<xref target="native-quic"/>. If the server selects <tt>h3</tt>, the client establishes a
WebTransport session as described in <xref target="webtransport"/>. On a TCP+TLS
connection, the client offers <tt>h2</tt> in its TLS ClientHello and establishes a
WebTransport session as described in <xref target="webtransport"/>.</t>
        </section>
      </section>
      <section anchor="session-establishment">
        <name>Session establishment</name>
        <t>This document defines a protocol that can be used interchangeably both
over a QUIC connection directly <xref target="QUIC"/>, and over WebTransport
<xref target="WebTransport"/>.  Both provide streams and datagrams with similar
semantics (see <xref section="4" sectionFormat="comma" target="I-D.ietf-webtrans-overview"/>); thus, the
main difference lies in how the servers are identified and how the
connection is established. The QUIC DATAGRAM extension (<xref target="RFC9221"/>)
<bcp14>MUST</bcp14> be supported and negotiated in the QUIC connection used for MOQT,
which is already a requirement for WebTransport over HTTP/3.</t>
        <t>There is no definition of the protocol over other transports,
such as TCP, and applications using MOQT might need to fallback to
another protocol when QUIC or WebTransport aren't available.</t>
        <t>MOQT uses ALPN in QUIC and "WT-Available-Protocols" in WebTransport
(<xref section="3.3" sectionFormat="comma" target="WebTransport"/>) to perform version negotiation.</t>
        <t>The ALPN value <xref target="RFC7301"/> for the final version of this specification
is <tt>moqt</tt>.</t>
        <t>[[RFC editor: please remove the remainder of this section before publication.]]</t>
        <t>ALPNs used to identify IETF drafts are created by appending
the draft number to "moqt-". For example, draft-ietf-moq-transport-13
would be identified as "moqt-13".</t>
        <t>Note: Draft versions prior to -15 all used moq-00 ALPN, followed by version
negotiation in the SETUP messages.</t>
        <section anchor="webtransport">
          <name>WebTransport</name>
          <t>When the client uses WebTransport, it constructs an <tt>https</tt> URI from the <tt>moqt</tt>
URI by replacing the scheme with <tt>https</tt>.
For example, <tt>moqt://example.com/path</tt> becomes
<tt>https://example.com/path</tt>. The client sends an extended CONNECT request to this
URI to establish a WebTransport session, as described in
(<xref section="3" sectionFormat="comma" target="WebTransport"/>). The client includes MOQT protocol identifiers in
the WT-Available-Protocols header (<xref section="3.3" sectionFormat="comma" target="WebTransport"/>).</t>
        </section>
        <section anchor="native-quic">
          <name>Native QUIC</name>
          <t>The client establishes a QUIC connection to the host and port identified by the
<tt>authority</tt> section of the URI.
When the client uses native QUIC, the <tt>authority</tt>, <tt>path-abempty</tt> and <tt>query</tt>
portions of the URI are transmitted in Setup Options (see <xref target="message-setup"/>).</t>
        </section>
      </section>
      <section anchor="session-init">
        <name>Session initialization</name>
        <t>MOQT uses a pair of unidirectional streams for creating the session and
exchanging control messages. Each peer opens one control stream beginning with
a SETUP message. Using a pair of unidirectional streams rather than a single
bidirectional stream allows either peer to send data as soon as it is able.
Depending on whether 0-RTT is available on the QUIC connection, either the client or
the server might be able to send stream data first.</t>
        <t>In addition to the control streams, this specification uses bidirectional streams
to carry requests.  A request stream begins with one of these seven message types:
TRACK_STATUS, SUBSCRIBE, PUBLISH, FETCH, PUBLISH_NAMESPACE,
SUBSCRIBE_NAMESPACE, and SUBSCRIBE_TRACKS. Bidirectional streams <bcp14>MUST NOT</bcp14>
begin with any other message type unless negotiated. If they do, the peer <bcp14>MUST</bcp14>
close the Session with a <tt>PROTOCOL_VIOLATION</tt>. Objects are sent on unidirectional
streams.</t>
        <t>As such, a client can initiate a MOQT session, subscribe, and
start publishing Objects all in parallel. When this is done before the
handshake completes using 0-RTT, the security implications described in
<xref target="zero-rtt"/> apply.</t>
        <t>Unidirectional streams containing Objects or bidirectional stream(s) beginning
with a request message could arrive prior to the control streams, in which case
the data <bcp14>SHOULD</bcp14> be buffered until both control streams arrive and setup is
complete. If an implementation does not want to buffer or if the message type is
not supported, it <bcp14>MAY</bcp14> reset such bidirectional streams before the session and
control streams are established.</t>
        <t>A control stream <bcp14>MUST NOT</bcp14> be closed at the underlying transport layer during the
session's lifetime.  Doing so results in the session being closed as a
<tt>PROTOCOL_VIOLATION</tt>.</t>
        <t>Prior to receiving the peer's SETUP message, it's unknown what extensions
a peer will support. Message Parameters requiring negotiation <bcp14>SHOULD NOT</bcp14>
be used prior to receiving the peer's SETUP message unless the application
requires the extension or the endpoint knows the peer supports the
extension. If an unsupported Message Parameter is used, the peer will be
unable to process it and the session will be terminated. See <xref target="message-params"/>.</t>
        <section anchor="zero-rtt">
          <name>0-RTT</name>
          <t>QUIC supports 0-RTT (<xref section="2.3" sectionFormat="of" target="RFC8446"/>), but WebTransport over QUIC
is not expected to use 0-RTT, because initializing a WebTransport session
uses CONNECT, which is not a safe method. <xref target="RFC8470"/> describes the use of
0-RTT with HTTP in more detail. If 0-RTT is used with an existing or future
version of WebTransport, the following would apply to it as well as QUIC.</t>
          <t>MOQT Messages and Objects as defined in this draft are safe to replay in most
circumstances.</t>
          <ul spacing="normal">
            <li>
              <t>TRACK_STATUS gets the Largest Object and Track Properties, but does not
change the state of a Track or any Object in the Track.</t>
            </li>
            <li>
              <t>SUBSCRIBE requests Objects be delivered, but does not change the Objects
being requested.</t>
            </li>
            <li>
              <t>PUBLISH initiates a Subscription. Objects can be immediately sent to
the Subscriber. Processing the same Objects multiple times is
idempotent, as the subscriber or relay can identify and discard
duplicates based on the Group ID and Object ID.</t>
            </li>
            <li>
              <t>SUBSCRIBE_NAMESPACE requests a list of namespaces and the establishment
of new subscriptions, but does not change the available Namespaces,
Tracks, or Objects contained within a Track.</t>
            </li>
            <li>
              <t>PUBLISH_NAMESPACE requests that Subscriptions under the namespace be sent
to that Publisher. If a Subscription was sent to the replaying endpoint, it
would fail because the endpoint cannot complete the handshake.</t>
            </li>
          </ul>
          <t>Some potential side effects of replay are:</t>
          <ul spacing="normal">
            <li>
              <t>Publishing Objects that were previously published could cause those
Objects to be distributed to active Subscriptions if the relays do
not identify them as already having been published. This re-distribution could
also make them available in cache again after they previously expired.</t>
            </li>
          </ul>
          <t>Replays could increase load on the MOQT network. For relay to client
traffic, this is no worse than 0-RTT in HTTP/3, since the server is limited by
the amplification factor until address validation. However, it could cause
the relay to initiate new upstream Subscriptions. For a SUBSCRIBE_TRACKS
request, sending that upstream could cause the Relay to receive a number of new
Subscriptions on the replaying client's behalf.</t>
          <t>Relays <bcp14>MAY</bcp14> defer initiating upstream subscriptions until the handshake is complete
or reject 0-RTT entirely to mitigate resource exhaustion from replayed packets.</t>
        </section>
        <section anchor="extension-negotiation">
          <name>Extension Negotiation</name>
          <t>Endpoints use the exchange of Setup messages to negotiate MOQT extensions.
Extensions can define new Message types, new Parameters, new Properties,
new Parameter values, or new framing for Streams and Datagrams.</t>
          <t>The client and server <bcp14>MUST</bcp14> include all Setup Options <xref target="message-setup"/>
required for the negotiated MOQT version in SETUP.</t>
          <t>Each endpoint declares the extensions it supports and provides any initial
values required by those extensions as Setup Options in SETUP. Once an endpoint
has both sent and received SETUP messages, it determines the set of negotiated
extensions.</t>
          <t>New versions of MOQT <bcp14>MUST</bcp14> specify which existing extensions can be used with
that version. New extensions <bcp14>MUST</bcp14> specify the existing versions with which they
can be used.</t>
        </section>
      </section>
      <section anchor="stream-usage">
        <name>Stream Usage</name>
        <section anchor="stream-types">
          <name>Unidirectional Streams</name>
          <t>All unidirectional MOQT streams start with a variable-length integer indicating
the type of the stream.</t>
          <table>
            <thead>
              <tr>
                <th align="right">ID</th>
                <th align="left">Type</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">0x05</td>
                <td align="left">FETCH_HEADER  (<xref target="fetch-header"/>)</td>
              </tr>
              <tr>
                <td align="right">0b0XX1XXXX</td>
                <td align="left">SUBGROUP_HEADER  (<xref target="subgroup-header"/>)</td>
              </tr>
              <tr>
                <td align="right">0x2F00</td>
                <td align="left">SETUP (<xref target="message-setup"/>)</td>
              </tr>
              <tr>
                <td align="right">0x132B3E28</td>
                <td align="left">PADDING  (<xref target="padding-streams"/>)</td>
              </tr>
            </tbody>
          </table>
          <t>An endpoint that receives an unknown stream type <bcp14>MUST</bcp14> close the session.</t>
          <t>Control streams (SETUP) are described in <xref target="session-init"/>.
Data streams (FETCH_HEADER, SUBGROUP_HEADER) are described in <xref target="data-streams"/>.
Padding streams are described in <xref target="padding"/>.</t>
        </section>
        <section anchor="bidirectional-request-streams">
          <name>Bidirectional Request Streams</name>
          <section anchor="request-id">
            <name>Request ID</name>
            <t>Request ID is included in request messages and is used to identify
requests across messages. For example, fetch streams reference
the Request ID of a SUBSCRIBE, PUBLISH, FETCH, or REQUEST_UPDATE.</t>
            <t>The client generates even numbered Request IDs, starting at 0, and the
server generates odd numbered Request IDs, starting at 1.  Each
endpoint increments its Request ID by 2 for each new request.</t>
            <t>Each SUBSCRIBE, PUBLISH, FETCH, SUBSCRIBE_NAMESPACE, SUBSCRIBE_TRACKS,
PUBLISH_NAMESPACE, REQUEST_UPDATE, and TRACK_STATUS message consumes a
Request ID. Only
request messages include a Request ID; response messages do not, since
they are sent on the same bidirectional stream as the request.</t>
            <t>If an endpoint receives a Request ID where the least significant bit is
incorrect for the sender, or a duplicate Request ID, it <bcp14>MUST</bcp14> close the
session with <tt>INVALID_REQUEST_ID</tt>.</t>
          </section>
          <section anchor="graceful-request-closure">
            <name>Graceful Request Stream Closure</name>
            <t>A request stream is bidirectional and each direction is closed independently,
either gracefully with a FIN or abruptly with RESET_STREAM.</t>
            <t>A FIN only indicates that an endpoint will send no further messages in that
direction; it is not a request cancellation. An endpoint <bcp14>MUST NOT</bcp14> send a FIN on
a direction of a request stream until it has sent all required messages on that
direction for its request type. In particular, an endpoint sending a response to
a request <bcp14>MUST</bcp14> send the corresponding response message, and the publisher of an
<tt>Established</tt> subscription <bcp14>MUST</bcp14> send PUBLISH_DONE, before sending a FIN. A FIN
sent by the responder after its response and any subsequent messages for the
request signals that the request is complete; if it has not already done so, the
requester <bcp14>SHOULD</bcp14> then send a FIN on its direction, gracefully closing the stream.
An endpoint that receives a FIN before all required messages have arrived treats
the request as failed.</t>
            <t>An endpoint <bcp14>SHOULD</bcp14> send a FIN promptly after a message when it has nothing
further to send on that direction and will not need to respond to a future
REQUEST_UPDATE. A requester, with the exception of the sender of PUBLISH,
<bcp14>MAY</bcp14> FIN immediately after sending a message if it will not send a
REQUEST_UPDATE.</t>
          </section>
          <section anchor="request-cancellation">
            <name>Request Cancellation and Rejection</name>
            <t>Once a request stream has been opened, the request <bcp14>MAY</bcp14> be cancelled by either
endpoint. Senders cancel requests if the response is no longer of interest;
Receivers cancel requests if they are unable to or choose not to respond.
Implementations cancel a request by abruptly terminating any directions of the
stream that are still open, using RESET_STREAM for a direction they are sending
and STOP_SENDING for a direction they are receiving. An endpoint that has
already sent a FIN on its sending direction and subsequently wishes to cancel
sends STOP_SENDING on the receiving direction.</t>
            <t>When an endpoint rejects a request without performing any application
processing, it <bcp14>SHOULD</bcp14> send a REQUEST_ERROR and FIN the stream.</t>
          </section>
        </section>
      </section>
      <section anchor="session-level-tracks">
        <name>Session-Level Tracks and Namespaces</name>
        <t>MOQT defines the <tt>.session</tt> namespace (the bytes 0x2e, 0x73, 0x65, 0x73,
0x73, 0x69, 0x6f, 0x6e) in the first position of the Track Namespace for
session-level tracks and namespaces. Session-level tracks and namespaces are
managed by the MOQT implementation, not the Application. They provide a
mechanism for extending MOQT transport functionality using existing
subscription and object delivery machinery, without defining new control
messages or stream types.</t>
        <t>The Application <bcp14>MUST NOT</bcp14> publish tracks or namespaces whose first
field is <tt>.session</tt>. Relays <bcp14>MUST NOT</bcp14> forward requests for session-level
tracks and namespaces to other sessions.</t>
        <t>The empty track name in the <tt>.session</tt> namespace is defined to not exist.
A request with a Track Namespace whose first field is <tt>.session</tt> and an
empty Track Name <bcp14>MUST</bcp14> be rejected with DOES_NOT_EXIST.</t>
        <t>An endpoint that receives a request for an unrecognized session-level track
or namespace <bcp14>MUST</bcp14> reject it with REQUEST_ERROR using error code
DOES_NOT_EXIST rather than passing it to the Application.</t>
        <t>The track names and namespaces available under the <tt>.session</tt> namespace are
defined by extensions to this specification and registered with IANA (see
<xref target="iana-session-level-tracks"/>).</t>
      </section>
      <section anchor="session-termination">
        <name>Termination</name>
        <t>The Transport Session can be terminated at any point.  When native QUIC
is used, the session is closed using the CONNECTION_CLOSE frame
(<xref section="19.19" sectionFormat="comma" target="QUIC"/>).  When WebTransport is used, the session is
closed using the CLOSE_WEBTRANSPORT_SESSION capsule (<xref section="6" sectionFormat="comma" target="WebTransport"/>).</t>
        <t>The error codes used when terminating a Session are defined in
<xref target="session-termination-codes"/>.</t>
        <t>An endpoint <bcp14>MAY</bcp14> choose to treat a subscription or request specific error as a
session error under certain circumstances, closing the entire session in
response to a condition with a single subscription or message. Implementations
need to consider the impact on other outstanding subscriptions before making
this choice.</t>
        <section anchor="session-migration">
          <name>Graceful Session Migration</name>
          <t>MOQT requires a long-lived and stateful session. However, a service
provider needs the ability to shutdown/restart a server without waiting for all
sessions to drain naturally, as that can take days for long-form media.
MOQT enables proactively draining sessions via the GOAWAY message (<xref target="message-goaway"/>).</t>
          <t>A GOAWAY on the control stream migrates the entire session, as described in
this section. A GOAWAY on a single request stream instead migrates only that
request, leaving the rest of the session in place; see <xref target="message-goaway"/>.</t>
          <t>The server sends a GOAWAY message, signaling the client to establish a new
session and migrate any <tt>Established</tt> subscriptions. The GOAWAY message optionally
contains a new URI for the new session, otherwise the current URI is
reused. The GOAWAY message contains a Timeout indicating how long, in
milliseconds, the sender intends to wait before closing the session. The sender
<bcp14>SHOULD</bcp14> close the session with <tt>GOAWAY_TIMEOUT</tt> after the indicated timeout if
there are still open subscriptions or fetches on a connection.</t>
          <t>When the server is a subscriber, it <bcp14>SHOULD</bcp14> send a GOAWAY message to downstream
subscribers prior to unsubscribing from upstream publishers.</t>
          <t>After the client receives a GOAWAY, it's <bcp14>RECOMMENDED</bcp14> that the client waits until
there are no more <tt>Established</tt> subscriptions before closing the session with NO_ERROR.
Ideally this is transparent to the application using MOQT, which involves
establishing a new session in the background and migrating <tt>Established</tt> subscriptions
and published namespaces. The client can choose to delay closing the session if
it expects more OBJECTs to be delivered. The sender closes the session with a
<tt>GOAWAY_TIMEOUT</tt> if the peer doesn't close the session within the
indicated Timeout.</t>
        </section>
      </section>
    </section>
    <section anchor="relays-moq">
      <name>Relays</name>
      <t>Relays are leveraged to enable distribution scale in the MOQT
architecture. Relays can be used to form an overlay delivery network,
similar in functionality to Content Delivery Networks
(CDNs). Additionally, relays serve as policy enforcement points by
validating subscribe and publish requests at the edge of a network.</t>
      <t>Relays are endpoints, which means they terminate Transport Sessions in order to
have visibility of MOQT Object metadata.</t>
      <section anchor="caching-relays">
        <name>Caching Relays</name>
        <t>Relays <bcp14>MAY</bcp14> cache Objects, but are not required to.</t>
        <t>A caching relay saves Objects to its cache identified by the Object's Full Track
Name, Group ID and Object ID. If multiple objects are received with the same
Full Track Name, Group ID and Object ID, Relays <bcp14>MAY</bcp14> ignore subsequently received
Objects or <bcp14>MAY</bcp14> use them to update certain cached fields. Implementations that
update the cache need to protect against cache poisoning.  The only Object
fields that can be updated are the following:</t>
        <ol spacing="normal" type="1"><li>
            <t>Object can transition from existing to not existing in cases where the
object is no longer available.</t>
          </li>
          <li>
            <t>Object Properties can be added, removed or updated, subject
to the constraints of the specific property.</t>
          </li>
        </ol>
        <t>An endpoint that receives a duplicate Object with a different Forwarding
Preference, Subgroup ID, Priority or Payload <bcp14>MUST</bcp14> treat the track as Malformed.</t>
        <t>For ranges of objects that do not exist, relays <bcp14>MAY</bcp14> change the representation
of a missing range to a semantically equivalent one.  For instance, a relay may
change an End-of-Group="Y" Subgroup Header to an equivalent object with an End
of Group status, or a Prior Group ID Gap property could be removed in FETCH,
where it's redundant.</t>
        <t>As described in <xref target="model-object"/>, an endpoint can receive an Object after it has
already recorded that the Object does not exist.  A caching relay <bcp14>SHOULD NOT</bcp14>
cache or forward the Object in this case.</t>
        <t>A cache <bcp14>MUST</bcp14> store all fields of an Object defined in <xref target="object-header"/>,
with the exception of any Object Properties (<xref target="object-properties"/>)
that specify otherwise.</t>
      </section>
      <section anchor="forward-handling">
        <name>Forward Handling</name>
        <t>If one or more downstream subscribers to a track have Forward=1, the relay
<bcp14>MUST</bcp14> set Forward=1 upstream in order to receive and forward the requested
Objects. When no downstream subscriber has Forward=1, the relay chooses the
upstream Forward value at its discretion, considering the following
tradeoffs and deployment considerations:</t>
        <ul spacing="normal">
          <li>
            <t>Setting Forward=1 upstream starts object delivery and pre-warms the
relay's cache, so objects are available when a downstream subscriber
sets Forward=1. This reduces latency but consumes upstream and publisher
resources for content no downstream subscriber is currently receiving.</t>
          </li>
          <li>
            <t>Setting Forward=0 upstream avoids that work, at the cost of higher
latency when forwarding is later enabled.</t>
          </li>
        </ul>
      </section>
      <section anchor="multiple-publishers">
        <name>Multiple Publishers</name>
        <t>A Relay can receive PUBLISH_NAMESPACE for the same Track Namespace or PUBLISH
messages for the same Track from multiple publishers.  The following sections
explain how Relays maintain subscriptions to all available publishers for a
given Track.</t>
        <t>There is no specified limit to the number of publishers of a Track Namespace or
Track.  An implementation can use mechanisms such as REQUEST_ERROR or
unsubscribing (see <xref target="request-cancellation"/>) if it cannot accept an additional
publisher due to implementation constraints. Implementations can consider the
establishment or idle time of the session or subscription to determine which
publisher to reject or disconnect.</t>
        <t>Relays <bcp14>MUST</bcp14> handle Objects for the same Track from multiple publishers and
forward them to matching <tt>Established</tt> subscriptions. The Relay <bcp14>SHOULD</bcp14> attempt to
deduplicate Objects before forwarding, subject to implementation constraints.</t>
      </section>
      <section anchor="subscriber-interactions">
        <name>Subscriber Interactions</name>
        <t>Subscribers request Tracks by sending a SUBSCRIBE (see
<xref target="message-subscribe-req"/>) or FETCH (see <xref target="message-fetch"/>) control message for
each Track of interest. Relays <bcp14>MUST</bcp14> ensure subscribers are authorized to access
the content associated with the Track. The authorization information can be part
of request itself or part of the encompassing session. The specifics of how a
relay authorizes a user are outside the scope of this specification.</t>
        <t>The relay <bcp14>MUST</bcp14> have an <tt>Established</tt> upstream subscription before sending
SUBSCRIBE_OK in response to a downstream SUBSCRIBE.  If a relay does not have
sufficient information to send a FETCH_OK immediately in response to a FETCH, it
<bcp14>MUST</bcp14> withhold sending FETCH_OK until it does.  Relays <bcp14>MUST</bcp14> follow the
constraints on LARGEST_OBJECT defined in <xref target="largest-param"/>.</t>
        <t>Publishers maintain a list of <tt>Established</tt> downstream subscriptions for
each Track. Relays use the Track Alias (<xref target="track-alias"/>) of an incoming Object
to identify its Track and find the current subscribers.  Each new Object
belonging to the Track is forwarded to each subscriber, as allowed by the
subscription's filter (see <xref target="message-subscribe-req"/>), and delivered according
to the priority (see <xref target="priorities"/>) and delivery timeout (see
<xref target="delivery-timeouts"/>).</t>
        <t>A relay <bcp14>MUST NOT</bcp14> reorder or drop objects received on a multi-object stream when
forwarding to subscribers.</t>
        <t>Relays <bcp14>MAY</bcp14> aggregate authorized subscriptions for a given Track when
multiple subscribers request the same Track. Subscription aggregation
allows relays to make only a single upstream subscription for the
Track. The published content received from the upstream subscription
request is cached and shared among the pending subscribers.
Relays that aggregate subscriptions <bcp14>MAY</bcp14> combine filters from downstream
subscribers on the upstream subscription, up to the peer's MAX_FILTER_RANGES.
If adding filters to an upstream subscription is not possible, the relay can either
remove some or all filters, or make additional subscriptions to the same Track.
Multiple subscriptions to the same Track with non-disjoint filter sets will result in
duplicate objects arriving at the relay.  Using wider upstream filters can protect the
relay from churn as subscribers with disparate filters subscribe and unsubscribe from
a Track, at the cost of receiving more objects.</t>
        <t>A subscriber remains subscribed to a Track at a Relay until it unsubscribes, the
upstream publisher terminates the subscription, or the subscription expires (see
<xref target="message-subscribe-ok"/>).  A subscription with a filter can reach a state where
all possible Objects matching the filter have been delivered to the subscriber.
Since tracking this can be prohibitively expensive, Relays are not required or
expected to do so.</t>
        <section anchor="graceful-subscriber-switchover">
          <name>Graceful Subscriber Relay Switchover</name>
          <t>This section describes a behavior that a Subscriber <bcp14>MAY</bcp14> implement to improve
user experience when a relay sends a GOAWAY or the Subscriber switches between
networks, such as WiFi to Cellular, and QUIC Connection Migration is not possible.</t>
          <t>When a subscriber receives the GOAWAY message, it starts the process
of connecting to a new relay and sending the SUBSCRIBE requests for
all <tt>Established</tt> subscriptions to the new relay. The new relay will send a
response to the subscribes and if they are successful, the subscriptions
to the old relay can be cancelled (see <xref target="request-cancellation"/>).</t>
        </section>
      </section>
      <section anchor="publisher-interactions">
        <name>Publisher Interactions</name>
        <t>There are two ways to publish through a relay:</t>
        <ol spacing="normal" type="1"><li>
            <t>Send a PUBLISH message for a specific Track to the relay. The relay <bcp14>MAY</bcp14>
pause the Subscription with REQUEST_UPDATE in Forward State=0 until there are
known subscribers for new Tracks.</t>
          </li>
          <li>
            <t>Send a PUBLISH_NAMESPACE message for a Track Namespace to the relay. This
enables the relay to send SUBSCRIBE or FETCH messages to publishers for Tracks
in this Namespace in response to requests received from subscribers.</t>
          </li>
        </ol>
        <t>Relays <bcp14>MUST</bcp14> verify that publishers are authorized to publish the set of Tracks
whose Track Namespace matches the namespace in a PUBLISH_NAMESPACE, or the Full
Track Name in PUBLISH. Relays <bcp14>MUST NOT</bcp14> assume that an authorized publisher of a single
Track is implicitly authorized to publish any other Tracks or Track Namespaces.
If a Publisher would like Subscriptions in a Namespace routed to it, it <bcp14>MUST</bcp14> send
an explicit PUBLISH_NAMESPACE.
The authorization and identification of the publisher depends on the way the
relay is managed and is application specific.</t>
        <t>When a publisher wants to stop new subscriptions for a published namespace, it
cancels the request (see <xref target="request-cancellation"/>) to withdraw the PUBLISH_NAMESPACE.
A subscriber indicates it will no longer subscribe to Tracks in a namespace it
previously responded PUBLISH_NAMESPACE_OK to by cancelling the
PUBLISH_NAMESPACE request.</t>
        <t>A Relay connects publishers and subscribers by managing sessions based on the
Track Namespace or Full Track Name. When a SUBSCRIBE message is sent, its Full
Track Name is matched exactly against existing upstream subscriptions.</t>
        <t anchor="namespace-prefix-matching">Namespace Prefix Matching is further used to decide which publishers receive a
SUBSCRIBE and which subscribers receive a PUBLISH. In this process, the fields
in the Track Namespace are matched sequentially, requiring an exact match for
each field. If the published or subscribed Track Namespace has the same or fewer
fields than the Track Namespace in the message, it qualifies as a match.</t>
        <t>For example:
A SUBSCRIBE message with namespace=(foo, bar) and name=x will match sessions
that sent PUBLISH_NAMESPACE messages with namespace=(foo) or namespace=(foo,
bar).  It will not match a session with namespace=(foobar).</t>
        <t>Relays <bcp14>MUST</bcp14> send SUBSCRIBE messages to all matching publishers. This includes
matching both Established subscriptions on the Full Track Name and Namespace
Prefix Matching against published Namespaces.  Relays <bcp14>MUST</bcp14> forward
PUBLISH_NAMESPACE or PUBLISH messages to all matching subscribers.</t>
        <t>When a Relay needs to make an upstream FETCH request, it determines the
available publishers using the same matching rules as SUBSCRIBE. When more than
one publisher is available, the Relay <bcp14>MUST</bcp14> send the FETCH to at least one of them.</t>
        <t>When a Relay receives a SUBSCRIBE with FILL_PARAMETERS, it serves the fill
range from its cache and retrieves any missing objects upstream using
a SUBSCRIBE with FILL_PARAMETERS or FETCHes (see <xref target="fill-semantics"/>).</t>
        <t>When a Relay receives an authorized SUBSCRIBE for a Track with one or more
<tt>Established</tt> upstream subscriptions, it <bcp14>MUST</bcp14> reply with SUBSCRIBE_OK.  If the
SUBSCRIBE has Forward State=1 and the upstream subscriptions are in Forward
State=0, the Relay <bcp14>MUST</bcp14> send REQUEST_UPDATE with Forward=1 to all publishers.
If there are no <tt>Established</tt> upstream subscriptions for the requested Track, the Relay
<bcp14>MUST</bcp14> send a SUBSCRIBE request to each publisher that has published the
subscription's namespace or prefix thereof.  If the SUBSCRIBE has Forward=1,
then the Relay <bcp14>MUST</bcp14> use Forward=1 when subscribing upstream.</t>
        <t>When a relay receives an incoming PUBLISH message, it <bcp14>MUST</bcp14> send a PUBLISH
request to each subscriber that has sent SUBSCRIBE_TRACKS for the Track's
namespace or a prefix thereof. However, if the relay is
holding a downstream SUBSCRIBE awaiting a publisher for this Track (see
<xref target="rendezvous-timeout"/>), it <bcp14>MUST</bcp14> proceed with the SUBSCRIBE and
<bcp14>MUST NOT</bcp14> also forward the PUBLISH to that subscriber.</t>
        <t>When a relay receives an authorized PUBLISH_NAMESPACE for a namespace that
matches one or more existing subscriptions to other upstream sessions, it <bcp14>MUST</bcp14>
send a SUBSCRIBE to the publisher that sent the PUBLISH_NAMESPACE for each
matching subscription.  When it receives an authorized PUBLISH message for a
Track that has <tt>Established</tt> downstream subscriptions, it <bcp14>MUST</bcp14> respond with
PUBLISH_OK.  If at least one downstream subscriber for the Track has
Forward State=1, the Relay <bcp14>MUST</bcp14> change the Forward State to 1 with
REQUEST_UPDATE.</t>
        <t>If a Session is closed due to an unknown or invalid control message or Object,
the Relay <bcp14>MUST NOT</bcp14> propagate that message or Object to another Session, because
it would enable a single Session error to force an unrelated Session, which
might be handling other subscriptions, to be closed.</t>
        <section anchor="graceful-publisher-switchover">
          <name>Graceful Publisher Relay Switchover</name>
          <t>This section describes a behavior that a publisher <bcp14>MAY</bcp14> implement to improve
user experience when a relay sends a GOAWAY or the publisher switches between
networks, such as WiFi to Cellular, and QUIC Connection Migration is not possible.</t>
          <t>A new Session is established, to a new URI if specified in a GOAWAY. The
publisher sends PUBLISH_NAMESPACE and/or PUBLISH messages to begin publishing
on the new Session, but it does not immediately stop publishing Objects on the
old Session.</t>
          <t>Once the subscriptions have migrated over to the new session, the publisher
can stop publishing Objects on the old session. The relay will attempt
to deduplicate Objects received on both subscriptions. Ideally, the
subscriptions downstream from the relay do not observe this change, and keep
receiving the Objects on the same subscription.</t>
        </section>
      </section>
      <section anchor="relay-track-handling">
        <name>Relay Track Handling</name>
        <t>A relay <bcp14>MUST</bcp14> include all Properties associated with a Track when sending any PUBLISH,
SUBSCRIBE_OK, TRACK_STATUS_OK, or FETCH_OK, unless
allowed by the property's specification (see <xref target="properties"/>).</t>
      </section>
      <section anchor="relay-object-handling">
        <name>Relay Object Handling</name>
        <t>MOQT encodes the delivery information in the Object header (<xref target="object-header"/>).
A relay <bcp14>MUST NOT</bcp14> modify Object fields when forwarding, except for
Object Properties as specified in <xref target="properties"/>.</t>
        <t>A relay <bcp14>MUST</bcp14> treat the object payload as opaque.  A relay <bcp14>MUST NOT</bcp14>
combine, split, or otherwise modify object payloads.</t>
        <t>Relays prioritize forwarded Objects as described in <xref target="priorities"/>.</t>
      </section>
    </section>
    <section anchor="notational-conventions-and-common-structures">
      <name>Notational Conventions and Common Structures</name>
      <t>This document uses the conventions detailed in (<xref section="1.3" sectionFormat="comma" target="RFC9000"/>)
when describing the binary encoding.</t>
      <section anchor="variable-length-integers">
        <name>Variable-Length Integers</name>
        <t>MOQT requires a variable-length integer encoding with the following properties:</t>
        <ol spacing="normal" type="1"><li>
            <t>The encoded length can be determined from the first encoded byte.</t>
          </li>
          <li>
            <t>The range of 1 byte values is as large as possible.</t>
          </li>
          <li>
            <t>All 64 bit numbers can be encoded.</t>
          </li>
        </ol>
        <t>The variable-length integer encoding uses the number of leading 1 bits of the
first byte to indicate the length of the encoding in bytes. The remaining bits
after the first 0 and subsequent bytes, if any, represent the integer value,
encoded in network byte order.</t>
        <t>Integers are encoded in 1 to 9 bytes and can encode up to 64
bit unsigned integers. The following table summarizes the encoding properties.</t>
        <table>
          <name>Summary of Integer Encodings</name>
          <thead>
            <tr>
              <th align="left">Leading Bits</th>
              <th align="left">Length (bytes)</th>
              <th align="left">Usable Bits</th>
              <th align="left">Range</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">7</td>
              <td align="left">0-127</td>
            </tr>
            <tr>
              <td align="left">10</td>
              <td align="left">2</td>
              <td align="left">14</td>
              <td align="left">0-16383</td>
            </tr>
            <tr>
              <td align="left">110</td>
              <td align="left">3</td>
              <td align="left">21</td>
              <td align="left">0-2097151</td>
            </tr>
            <tr>
              <td align="left">1110</td>
              <td align="left">4</td>
              <td align="left">28</td>
              <td align="left">0-268435455</td>
            </tr>
            <tr>
              <td align="left">11110</td>
              <td align="left">5</td>
              <td align="left">35</td>
              <td align="left">0-34359738367</td>
            </tr>
            <tr>
              <td align="left">111110</td>
              <td align="left">6</td>
              <td align="left">42</td>
              <td align="left">0-4398046511103</td>
            </tr>
            <tr>
              <td align="left">1111110</td>
              <td align="left">7</td>
              <td align="left">49</td>
              <td align="left">0-562949953421311</td>
            </tr>
            <tr>
              <td align="left">11111110</td>
              <td align="left">8</td>
              <td align="left">56</td>
              <td align="left">0-72057594037927935</td>
            </tr>
            <tr>
              <td align="left">11111111</td>
              <td align="left">9</td>
              <td align="left">64</td>
              <td align="left">0-18446744073709551615</td>
            </tr>
          </tbody>
        </table>
        <t>The following table contains some example encodings:</t>
        <table>
          <name>Example Integer Encodings</name>
          <thead>
            <tr>
              <th align="left">Byte Sequence</th>
              <th align="left">Decimal Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x25</td>
              <td align="left">37</td>
            </tr>
            <tr>
              <td align="left">0x8025</td>
              <td align="left">37</td>
            </tr>
            <tr>
              <td align="left">0xbbbd</td>
              <td align="left">15,293</td>
            </tr>
            <tr>
              <td align="left">0xed7f3e7d</td>
              <td align="left">226,442,877</td>
            </tr>
            <tr>
              <td align="left">0xfaa1a0e403d8</td>
              <td align="left">2,893,212,287,960</td>
            </tr>
            <tr>
              <td align="left">0xfc8998abc66bc0</td>
              <td align="left">151,288,809,941,952</td>
            </tr>
            <tr>
              <td align="left">0xfefa318fa8e3ca11</td>
              <td align="left">70,423,237,261,249,041</td>
            </tr>
            <tr>
              <td align="left">0xffffffffffffffffff</td>
              <td align="left">18,446,744,073,709,551,615</td>
            </tr>
          </tbody>
        </table>
        <t>Variable-length integers do not need to be encoded using the minimum number of
bytes; any encoding length that can represent the value is valid. Note that, as
a result, the same numeric value can be represented by more than one byte
sequence. For example, the value 0 can be encoded as <tt>0x00</tt>, <tt>0x8000</tt>,
<tt>0xc00000</tt>, or any longer form.</t>
        <dl>
          <dt>x (vi64):</dt>
          <dd>
            <t>Indicates that x holds an integer value using the variable-length
encoding as described above.</t>
          </dd>
        </dl>
      </section>
      <section anchor="location-structure">
        <name>Location Structure</name>
        <t>Location identifies a particular Object in a Group within a Track.</t>
        <figure anchor="moq-location">
          <name>Location structure</name>
          <artwork><![CDATA[
Location {
  Group (vi64),
  Object (vi64)
}
]]></artwork>
        </figure>
        <t>In this document, a Location can be expressed in the form of {GroupID,
ObjectID}, where GroupID and ObjectID indicate the Group ID and Object ID of the
Location, respectively.  The constituent parts of any Location A can be referred
to using A.Group or A.Object.</t>
        <t>Location A &lt; Location B if:</t>
        <t><tt>A.Group &lt; B.Group || (A.Group == B.Group &amp;&amp; A.Object &lt; B.Object)</tt></t>
      </section>
      <section anchor="key-value-pair-structure">
        <name>Key-Value-Pair Structure</name>
        <t>Key-Value-Pair is a flexible structure that carries key/value
pairs in which the key is a variable-length integer and the value
is either a variable-length integer or a byte field of arbitrary
length.</t>
        <t>Key-Value-Pairs encode a Type value as a delta from the previous Type value,
or from 0 if there is no previous Type value. This is efficient on the wire
and makes it easy to ensure there is only one instance of a type when needed.
The previous Type value plus the Delta Type <bcp14>MUST NOT</bcp14> be greater than 2^64 - 1.
If a Delta Type is received that would be too large, the Session <bcp14>MUST</bcp14> be closed
with a <tt>PROTOCOL_VIOLATION</tt>.</t>
        <t>Key-Value-Pair is used in both the data plane and control plane, but
is optimized for use in the data plane.</t>
        <figure anchor="moq-key-value-pair">
          <name>MOQT Key-Value-Pair</name>
          <artwork><![CDATA[
Key-Value-Pair {
  Delta Type (vi64),
  [Length (vi64),]
  Value (..)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Delta Type: an unsigned variable-length integer identifying the Type
as a delta encoded value from the previous Type, if any. The Type identifies
the type of value and also the subsequent serialization.</t>
          </li>
          <li>
            <t>Length: Only present when Type is odd. Specifies the length of the Value field
in bytes. The maximum length of a value is 2^16-1 bytes.  If an endpoint
receives a length larger than the maximum, it <bcp14>MUST</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>.</t>
          </li>
          <li>
            <t>Value: A single variable-length integer when Type is even, otherwise a
sequence of Length bytes.</t>
          </li>
        </ul>
        <t>If a receiver understands a Type, and the following Value or Length/Value does
not match the serialization defined by that Type, the receiver <bcp14>MUST</bcp14> close
the session with error code <tt>KEY_VALUE_FORMATTING_ERROR</tt>.</t>
        <t>Key-Value-Pairs are always parsed with a known byte length, which bounds
the sequence. The source of this length varies by context.</t>
      </section>
      <section anchor="properties">
        <name>Track and Object Properties</name>
        <t>Tracks and Objects can have additional relay-visible fields, known as
Properties, which do not require negotiation, and can be used to alter
MOQT Object distribution.</t>
        <t>Properties are defined in <xref target="moqt-properties"/> as well as external
specifications and are registered in an IANA table <xref target="iana"/>. These
specifications define the type and value of the property, along with any rules
concerning processing, modification, caching and forwarding.</t>
        <t>If a Relay does not support a Property, it <bcp14>MUST NOT</bcp14> be modified, <bcp14>MUST</bcp14> be
forwarded, and <bcp14>MUST</bcp14> be cached with the Track or Object, unless it is a Mandatory
Track Property as described in <xref target="mandatory-track-properties"/>.  If a Track or Object
arrives with a different set of unknown properties than previously cached,
the most recent set <bcp14>SHOULD</bcp14> replace any cached values, removing any unknown
values not present in the new set.  Relays <bcp14>MUST NOT</bcp14> attempt to merge sets
of unknown properties received in different messages.</t>
        <t>If a Relay supports a Property, it <bcp14>MUST</bcp14> follow the processing rules in the
Property's definition.  Unless those rules permit otherwise, a Relay <bcp14>MUST NOT</bcp14>
modify, add, or remove the Property; it <bcp14>MUST</bcp14> forward the Property to downstream
subscribers and <bcp14>MUST</bcp14> cache it with the Track or Object if the Track or Object is
cached.</t>
        <t>Properties are serialized as Key-Value-Pairs (see <xref target="moq-key-value-pair"/>).
Track Properties always appear as the final field in the messages that
carry them; their length is the remaining bytes of the message after all
preceding fields have been consumed. Object Properties (<xref target="object-properties"/>)
are preceded by an explicit length field.</t>
        <t>Property types are registered in the IANA table 'MOQ Properties'.
See <xref target="iana"/>.</t>
        <t>Certain Property type ranges are reserved for application-specific
use and will never be allocated by IANA in future MOQT specifications:</t>
        <ul spacing="normal">
          <li>
            <t>0x78 to 0x7F (1-byte encoding): 8 code points for applications with
tight space constraints</t>
          </li>
          <li>
            <t>0x3800 to 0x3FFF (2-byte encoding): 2048 code points (including grease
<xref target="grease"/>) for applications with moderate space constraints</t>
          </li>
        </ul>
        <t>Applications <bcp14>MAY</bcp14> use code points in these ranges without registration for
format-specific metadata or other application-defined purposes. Relays that
do not understand the application format <bcp14>MUST</bcp14> forward these properties
unchanged but <bcp14>MUST NOT</bcp14> attempt to interpret their semantic meaning. Different
applications using the same code point in these ranges may assign different
meanings; the interpretation depends on the track or application
context known to the publisher and subscriber.</t>
      </section>
      <section anchor="reason-phrase">
        <name>Reason Phrase Structure</name>
        <t>Reason Phrase provides a way for the sender to encode additional diagnostic
information about an error condition, where appropriate.</t>
        <artwork><![CDATA[
Reason Phrase {
  Reason Phrase Length (vi64),
  Reason Phrase Value (..)
}
]]></artwork>
        <ul spacing="normal">
          <li>
            <t>Reason Phrase Length: A variable-length integer specifying the length of the
reason phrase in bytes. The reason phrase length has a maximum value of
1024 bytes. If an endpoint receives a length exceeding the maximum, it <bcp14>MUST</bcp14>
close the session with a <tt>PROTOCOL_VIOLATION</tt></t>
          </li>
          <li>
            <t>Reason Phrase Value: Additional diagnostic information about an error condition.
The reason phrase value is encoded as UTF-8 string and does not carry information,
such as language tags, that would aid comprehension by any entity other than
the one that created the text.</t>
          </li>
        </ul>
      </section>
      <section anchor="range-filter-structure">
        <name>Range Filter Structure</name>
        <t>Each Range Filter parameter (see <xref target="range-filters"/>) carries a sequence of
Ranges, encoded as follows:</t>
        <artwork><![CDATA[
Range {
  Start (vi64),
  [End (vi64)]
}
]]></artwork>
        <t>Length (vi64) is the byte count of all fields after itself.  When Length
is 0, there is no filter and no further fields are present.  This can be
used in REQUEST_UPDATE to remove a filter.  The Object Property and Track
Property Filters include a Property Type (vi64) which follows SetID.</t>
        <t>Each Range is an inclusive Start/End pair.  End is optional in the last
pair; if omitted it indicates the last Range is open-ended.</t>
        <t>Each Start is delta encoded from the prior Range's End (or from 0 for the
first Range), and End is delta encoded from its own Start.  If adding the delta
would exceed 2^64-1, the request <bcp14>MUST</bcp14> be rejected with <tt>INVALID_FILTER</tt>.
For example, ranges 3-5 and 10-15 encode as: Start=3, End=2, Start=5, End=5.</t>
      </section>
      <section anchor="track-namespace-structure">
        <name>Track Namespace Structure</name>
        <t>Track Namespace (<xref target="track-name"/>) is encoded as follows:</t>
        <artwork><![CDATA[
Track Namespace {
  Number of Track Namespace Fields (vi64),
  Track Namespace Field (..) ...
}
]]></artwork>
        <ul spacing="normal">
          <li>
            <t>Number of Track Namespace Fields: A variable-length integer specifying
the number of Track Namespace Fields in the Track Namespace.</t>
          </li>
        </ul>
        <t>Each Track Namespace Field is encoded as follows:</t>
        <artwork><![CDATA[
Track Namespace Field {
  Track Namespace Field Length (vi64),
  Track Namespace Field Value (..)
}
]]></artwork>
        <ul spacing="normal">
          <li>
            <t>Track Namespace Field Length: A variable-length integer specifying the length
of the Track Namespace Field in bytes.</t>
          </li>
          <li>
            <t>Track Namespace Field Value: A sequence of bytes that forms a Track Namespace
Field.</t>
          </li>
        </ul>
        <t>Each Track Namespace Field Value <bcp14>MUST</bcp14> contain at least one byte. If an endpoint
receives a Track Namespace Field with a Track Namespace Field Length of 0, it
<bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
        <t>If an endpoint receives a Track Namespace consisting of greater than 32 Track
Namespace Fields, it <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
        <t>The maximum total length of a Full Track Name is 4,096 bytes. The length of a
Full Track Name is computed as the sum of the Track Namespace Field Length
fields and the Track Name Length field. The length of a Track Namespace is the
sum of the Track Namespace Field Length fields. If an endpoint receives a Track
Namespace or a Full Track Name exceeding 4,096 bytes, it <bcp14>MUST</bcp14> close the session
with a <tt>PROTOCOL_VIOLATION</tt>.</t>
      </section>
      <section anchor="namespace-name-format">
        <name>Representing Namespace and Track Names</name>
        <t>There is often a need to render namespace tuples and track names for
purposes such as logging, representing track filenames, or use in
certain authorization verification schemes. The namespace and track name
are binary and need to be converted to a safe form.</t>
        <t>The following format is <bcp14>RECOMMENDED</bcp14>:</t>
        <ul spacing="normal">
          <li>
            <t>Each of the namespace tuples are rendered in order with a hyphen (-)
between them followed by the track name with a double hyphen (--)
between the last namespace and track name.</t>
          </li>
          <li>
            <t>Bytes in the range a-z, A-Z, 0-9 as well as _ (0x5f) are output verbatim,
while all other bytes are encoded as a period (.) symbol followed by
exactly two lowercase hexadecimal digits.</t>
          </li>
        </ul>
        <t>This format allows many common names to be rendered in an easily human readable
form while still supporting binary values.  Note that while the character set
is chosen to be generally both filename and URL safe, filename safety is
platform specific; for instance, on case-insensitive filesystems, track names
can collide.</t>
        <section anchor="parsing-serialized-names">
          <name>Parsing Serialized Names</name>
          <t>When parsing a serialized namespace or track name back to its binary form,
implementations <bcp14>MUST</bcp14> apply the following rules to ensure a canonical encoding:</t>
          <ul spacing="normal">
            <li>
              <t>A period (.) <bcp14>MUST</bcp14> be followed by exactly two hexadecimal digits. A trailing period
or a period followed by fewer than two hexadecimal digits is invalid.</t>
            </li>
            <li>
              <t>The hexadecimal digits following a period (.) <bcp14>MUST</bcp14> be lowercase (a-f). Uppercase
hexadecimal digits (A-F) are invalid and <bcp14>MUST</bcp14> cause parsing to fail.</t>
            </li>
            <li>
              <t>Bytes that can be represented literally (a-z, A-Z, 0-9, _) <bcp14>MUST NOT</bcp14> appear
in their hex-encoded form. For example, <tt>.61</tt> is invalid because <tt>a</tt> must
be represented as the literal character <tt>a</tt>. A parser <bcp14>MUST</bcp14> reject such
redundant encodings.</t>
            </li>
          </ul>
          <t>These rules ensure that the encoding is bijective: every binary value has
exactly one valid serialized representation, and every valid serialized
string maps to exactly one binary value. This property simplifies comparison
of serialized names without requiring full deserialization.</t>
          <t>Implementations that receive an invalid serialized name <bcp14>SHOULD</bcp14> treat it as
an error. The specific error handling behavior is application-defined.</t>
          <t>Example:</t>
          <artwork><![CDATA[
example.2enet-team2-project_x--report
  Namespace tuples: (example.net, team2, project_x)
  Track name: report
]]></artwork>
        </section>
      </section>
      <section anchor="auth-token-compression">
        <name>Authorization Token Compression</name>
        <t>Authorization tokens are carried in the AUTHORIZATION TOKEN message parameter
(see <xref target="authorization-token"/>) and the AUTHORIZATION TOKEN Setup Option (see
<xref target="setup-auth-token"/>).  Both use the wire format and semantics defined in this
section.</t>
        <t>The value is a Token structure containing an optional Session-specific
Alias. The Alias allows the sender to reference a previously transmitted Token
Type and Token Value in future messages. The Token structure is serialized as
follows:</t>
        <figure anchor="moq-token">
          <name>Token structure</name>
          <artwork><![CDATA[
Token {
  Alias Type (vi64),
  [Token Alias (vi64),]
  [Token Type (vi64),]
  [Token Value (..)]
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Alias Type - an integer defining both the serialization and the processing
behavior of the receiver. This Alias type has the following code points:</t>
          </li>
        </ul>
        <dl>
          <dt>DELETE (0x0):</dt>
          <dd>
            <t>There is an Alias but no Type or Value. This Alias and the Token Value it was
previously associated with <bcp14>MUST</bcp14> be retired. Retiring removes them from the pool
of actively registered tokens.</t>
          </dd>
          <dt>REGISTER (0x1):</dt>
          <dd>
            <t>There is an Alias, a Type and a Value. This Alias <bcp14>MUST</bcp14> be associated with the
Token Value for the duration of the Session or it is deleted. This action is
termed "registering" the Token.</t>
          </dd>
          <dt>USE_ALIAS (0x2):</dt>
          <dd>
            <t>There is an Alias but no Type or Value. Use the Token Type and Value
previously registered with this Alias.</t>
          </dd>
          <dt>USE_VALUE (0x3):</dt>
          <dd>
            <t>There is no Alias and there is a Type and Value. Use the Token Value as
provided. The Token Value <bcp14>MAY</bcp14> be discarded after processing.</t>
          </dd>
        </dl>
        <ul spacing="normal">
          <li>
            <t>Token Alias - a Session-specific integer identifier that references a Token
Type and Token Value. There are separate Alias spaces for the client and server (e.g.: they
can each register Alias=1). Once a Token Alias has been registered, it cannot
be re-registered by the same endpoint in the Session without first being
deleted. Use of the Token Alias is optional.</t>
          </li>
          <li>
            <t>Token Type - a numeric identifier for the type of Token payload being
transmitted. This type is defined by the IANA table "MOQT Auth Token Type" (see
<xref target="iana"/>). Type 0 is reserved to indicate that the type is not defined in the
table and is negotiated out-of-band between client and receiver.</t>
          </li>
          <li>
            <t>Token Value - the payload of the Token. The contents and serialization of this
payload are defined by the Token Type.</t>
          </li>
        </ul>
        <t>If the Token structure cannot be decoded, the receiver <bcp14>MUST</bcp14> close the Session
with <tt>KEY_VALUE_FORMATTING_ERROR</tt>.  The receiver of a message attempting to
register an Alias which is already registered <bcp14>MUST</bcp14> close the Session with
<tt>DUPLICATE_AUTH_TOKEN_ALIAS</tt>. The receiver of a message referencing an Alias
that is not currently registered <bcp14>MUST</bcp14> reject the message with
<tt>UNKNOWN_AUTH_TOKEN_ALIAS</tt>.</t>
        <t>The receiver of a message containing a well-formed Token structure that is
otherwise invalid <bcp14>MUST</bcp14> reject that message with an <tt>MALFORMED_AUTH_TOKEN</tt>
error.</t>
        <t>The receiver of a message carrying an Authorization Token with Alias Type
REGISTER that does not result in a Session error <bcp14>MUST</bcp14> register the Token Alias
in the token cache, even if the message fails for other reasons, including
<tt>Unauthorized</tt>.  This allows senders to pipeline messages that refer to
previously registered tokens without potentially terminating the entire Session.
A receiver <bcp14>MAY</bcp14> store an error code (eg: <tt>UNAUTHORIZED</tt> or
<tt>MALFORMED_AUTH_TOKEN</tt>) in place of the Token Type and Token Alias if any future
message referencing the Token Alias will result in that error. However, it is
important to not store an error code for a token that might be valid in the
future or due to some other property becoming fulfilled which currently
isn't. The size of a registered cache entry includes the length of the Token
Value, regardless of whether it is stored.</t>
        <t>If a receiver detects that an authorization token has expired, it <bcp14>MUST</bcp14> retain
the registered Alias until it is deleted by the sender, though it <bcp14>MAY</bcp14> discard
other state associated with the token that is no longer needed.  Expiration does
not affect the size occupied by a token in the token cache.  Any message that
references an expired token with Alias Type USE_ALIAS fails with <tt>EXPIRED_AUTH_TOKEN</tt>.</t>
        <t>Using an Alias to refer to a previously registered Token Type and Value is for
efficiency only and has the same effect as if the Token Type and Value was
included directly.  Retiring an Alias that was previously used to authorize a
message has no retroactive effect on the original authorization, nor does it
prevent that same Token Type and Value from being re-registered.</t>
        <t>Senders of tokens <bcp14>SHOULD</bcp14> only register tokens which they intend to re-use during
the Session and <bcp14>SHOULD</bcp14> retire previously registered tokens once their utility
has passed.</t>
        <t>By registering a Token, the sender is requiring the receiver to store the Token
Alias and Token Value until they are deleted, or the Session ends. The receiver
can protect its resources by sending a Setup Option defining the
MAX_AUTH_TOKEN_CACHE_SIZE limit (see <xref target="max-auth-token-cache-size"/>) it is
willing to accept. If a registration is attempted which would cause this limit
to be exceeded, the receiver <bcp14>MUST</bcp14> terminate the Session with a
<tt>AUTH_TOKEN_CACHE_OVERFLOW</tt> error.</t>
        <t>An Authorization Token <bcp14>MAY</bcp14> be repeated within a message as long as the
combination of Token Type and Token Value are unique after resolving any
aliases.</t>
        <t>Messages carrying an Authorization Token can appear on different
control streams. Because stream processing order can be different than send order, the
receiver and sender can have inconsistent views of the token cache state.</t>
        <t>Senders <bcp14>MUST NOT</bcp14> send USE_ALIAS on one control stream for an alias registered on a
different stream until the sender has received a response to the message
containing the REGISTER. Senders <bcp14>MAY</bcp14> use USE_ALIAS on the same control stream as the
REGISTER without waiting for a response.</t>
        <t>Senders <bcp14>MUST NOT</bcp14> send DELETE for an alias while any message using USE_ALIAS with
that alias has not received a response.</t>
      </section>
    </section>
    <section anchor="message">
      <name>Control Messages</name>
      <t>MOQT uses a pair of unidirectional streams to exchange control messages, as
defined in <xref target="session-init"/>.  Every message on a control or request stream is
formatted as follows:</t>
      <figure anchor="moq-transport-message-format">
        <name>MOQT Control Message</name>
        <artwork><![CDATA[
MOQT Control Message {
  Message Type (vi64),
  Message Length (16),
  Message Body (..),
}
]]></artwork>
      </figure>
      <t>The following Message Types are defined. The Stream column indicates
which stream type each message is sent on: Control indicates the
control stream (<xref target="session-init"/>), and Request indicates a bidirectional
request stream. Messages marked "First" <bcp14>MUST</bcp14> be the first message on a
new request stream.</t>
      <table>
        <thead>
          <tr>
            <th align="right">ID</th>
            <th align="left">Messages</th>
            <th align="left">Stream</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">0x01</td>
            <td align="left">RESERVED (SETUP for version 00)</td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="right">0x40</td>
            <td align="left">RESERVED (CLIENT_SETUP for &lt;= 10)</td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="right">0x41</td>
            <td align="left">RESERVED (SERVER_SETUP for &lt;= 10)</td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="right">0x20</td>
            <td align="left">RESERVED (CLIENT_SETUP in &lt;= 16)</td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="right">0x21</td>
            <td align="left">RESERVED (SERVER_SETUP in &lt;= 16)</td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="right">0x2F00</td>
            <td align="left">SETUP (<xref target="message-setup"/>)</td>
            <td align="left">Control</td>
          </tr>
          <tr>
            <td align="right">0x10</td>
            <td align="left">GOAWAY (<xref target="message-goaway"/>)</td>
            <td align="left">Control, Request</td>
          </tr>
          <tr>
            <td align="right">0x3</td>
            <td align="left">SUBSCRIBE (<xref target="message-subscribe-req"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x4</td>
            <td align="left">SUBSCRIBE_OK (<xref target="message-subscribe-ok"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0x22</td>
            <td align="left">PUBLISH_STATE_NOTIFY (<xref target="ps-notify"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0x1D</td>
            <td align="left">PUBLISH (<xref target="message-publish"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x1E</td>
            <td align="left">RESERVED (PUBLISH_OK in &lt;= 17)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0xB</td>
            <td align="left">PUBLISH_DONE (<xref target="message-publish-done"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0x16</td>
            <td align="left">FETCH (<xref target="message-fetch"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x18</td>
            <td align="left">FETCH_OK (<xref target="message-fetch-ok"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0xD</td>
            <td align="left">TRACK_STATUS (<xref target="message-track-status"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x6</td>
            <td align="left">PUBLISH_NAMESPACE (<xref target="message-pub-ns"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x50</td>
            <td align="left">SUBSCRIBE_NAMESPACE (<xref target="message-subscribe-ns"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x51</td>
            <td align="left">SUBSCRIBE_TRACKS (<xref target="message-subscribe-tracks"/>)</td>
            <td align="left">Request, First</td>
          </tr>
          <tr>
            <td align="right">0x8</td>
            <td align="left">NAMESPACE (<xref target="message-namespace"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0xE</td>
            <td align="left">NAMESPACE_DONE (<xref target="message-namespace-done"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0xF</td>
            <td align="left">PUBLISH_SKIPPED (<xref target="message-publish-skipped"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0x2</td>
            <td align="left">REQUEST_UPDATE (<xref target="message-request-update"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0x7</td>
            <td align="left">REQUEST_OK (<xref target="message-request-ok"/>)</td>
            <td align="left">Request</td>
          </tr>
          <tr>
            <td align="right">0x5</td>
            <td align="left">REQUEST_ERROR (<xref target="message-request-error"/>)</td>
            <td align="left">Request</td>
          </tr>
        </tbody>
      </table>
      <t>An endpoint that receives an unknown message type <bcp14>MUST</bcp14> close the session.
Control messages have a length to simplify parsing, but no control messages
are intended to be ignored. The length is set to the number of bytes in the
Message Body, which is defined by each message type.  If the length does not
match the length of the Message Body, the receiver <bcp14>MUST</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>.</t>
      <section anchor="message-setup">
        <name>SETUP</name>
        <t>The <tt>SETUP</tt> message is the first message each endpoint sends on its control
stream (see <xref target="session-init"/>); it allows the endpoints to agree on the initial
configuration before any other control messages are exchanged. An endpoint that
is not offering extensions which modify control message semantics <bcp14>MAY</bcp14> pipeline
other control messages after SETUP without waiting for the peer's SETUP.</t>
        <t>The messages contain a sequence of key-value pairs called Setup Options; the
semantics and format of which can vary based on whether the client or server is
sending.  To ensure future extensibility of MOQT, endpoints <bcp14>MUST</bcp14> ignore unknown
Setup Options.</t>
        <t>The wire format of the Setup message is as follows:</t>
        <figure anchor="moq-transport-setup-format">
          <name>MOQT SETUP Message</name>
          <artwork><![CDATA[
SETUP Message {
  Type (vi64) = 0x2F00,
  Length (16),
  Setup Options (..) ...,
}
]]></artwork>
        </figure>
        <t>Setup Options are serialized as Key-Value-Pairs <xref target="moq-key-value-pair"/>,
spanning the entire message payload, bounded by the message Length field.
Setup Options use a namespace that is constant across all MOQT versions,
separate from Message Parameters.  Receivers <bcp14>MUST</bcp14> ignore unrecognized Setup
Options.  Senders <bcp14>MUST NOT</bcp14> repeat the same Option Type in a message unless
the option definition explicitly allows multiple instances. Receivers <bcp14>MUST</bcp14>
allow duplicates of unknown Setup Options.</t>
        <t>The available Setup Options are detailed in the next sections.</t>
        <section anchor="authority">
          <name>AUTHORITY</name>
          <t>The AUTHORITY option (Option Type 0x05) allows the client to specify the
authority component of the MoQ URI when using native QUIC (<xref target="native-quic"/>).  It <bcp14>MUST
NOT</bcp14> be used by the server, or when WebTransport is used.  When an AUTHORITY
option is received from a server, or when an AUTHORITY option is received
while WebTransport is used, or when an AUTHORITY option is received by a
server but the server does not support the specified authority, the session <bcp14>MUST</bcp14>
be closed with <tt>INVALID_AUTHORITY</tt>.</t>
          <t>The AUTHORITY option follows the URI formatting rules <xref target="RFC3986"/>.
When connecting to a server using a URI with the "moqt" scheme, the
client <bcp14>MUST</bcp14> set the AUTHORITY option to the <tt>authority</tt> portion of the
URI. If an AUTHORITY option does not conform to
these rules, the session <bcp14>MUST</bcp14> be closed with <tt>MALFORMED_AUTHORITY</tt>.</t>
        </section>
        <section anchor="path">
          <name>PATH</name>
          <t>The PATH option (Option Type 0x01) allows the client to specify the path
of the MoQ URI when using native QUIC (<xref target="native-quic"/>).  It <bcp14>MUST NOT</bcp14> be used by
the server, or when WebTransport is used.  When a PATH setup option is received
from a server, or when a PATH parameter is received while WebTransport is used,
or when a PATH parameter is received by a server but the server does not
support the specified path, the session <bcp14>MUST</bcp14> be closed with <tt>INVALID_PATH</tt>.</t>
          <t>The PATH option follows the URI formatting rules <xref target="RFC3986"/>.
When connecting to a server using a URI with the "moqt" scheme, the
client <bcp14>MUST</bcp14> set the PATH option to the <tt>path-abempty</tt> portion of the
URI; if <tt>query</tt> is present, the client <bcp14>MUST</bcp14> concatenate <tt>?</tt>, followed by
the <tt>query</tt> portion of the URI to the option. If a PATH does not conform to
these rules, the session <bcp14>MUST</bcp14> be closed with <tt>MALFORMED_PATH</tt>.</t>
        </section>
        <section anchor="max-auth-token-cache-size">
          <name>MAX_AUTH_TOKEN_CACHE_SIZE</name>
          <t>The MAX_AUTH_TOKEN_CACHE_SIZE option (Option Type 0x04) communicates the
maximum size in bytes of all actively registered Authorization tokens that the
endpoint is willing to store per Session. This option is optional. The default
value is 0 which prohibits the use of token Aliases.</t>
          <t>The token size is calculated as 16 bytes + the size of the Token Value field
(see <xref target="moq-token"/>). The total size as restricted by the
MAX_AUTH_TOKEN_CACHE_SIZE option is calculated as the sum of the token sizes
for all registered tokens (Alias Type value of 0x01) minus the sum of the token
sizes for all deregistered tokens (Alias Type value of 0x00), since Session
initiation.</t>
        </section>
        <section anchor="setup-auth-token">
          <name>AUTHORIZATION TOKEN</name>
          <t>The AUTHORIZATION TOKEN Setup Option (Option Type 0x03) is functionally
equivalent to the AUTHORIZATION TOKEN message parameter, see <xref target="authorization-token"/>.
The endpoint can specify one or more tokens in SETUP
that the peer can use to authorize MOQT session establishment.</t>
          <t>The option value is a Token structure, whose wire format and semantics are
defined in <xref target="auth-token-compression"/>.</t>
          <t>If a server receives Alias Type DELETE (0x0) or USE_ALIAS (0x2) in a SETUP
message, it <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          <t>If an endpoint receives an AUTHORIZATION TOKEN option in SETUP with Alias
Type REGISTER that exceeds its MAX_AUTH_TOKEN_CACHE_SIZE, it <bcp14>MUST NOT</bcp14> fail
the session with <tt>AUTH_TOKEN_CACHE_OVERFLOW</tt>.  Instead, it <bcp14>MUST</bcp14> treat the
option as Alias Type USE_VALUE.  Since each endpoint's SETUP may be sent before
the peer's SETUP is received, the sender <bcp14>MUST</bcp14> handle registration failures
of this kind by purging any Token Aliases that failed to register based on the
peer's MAX_AUTH_TOKEN_CACHE_SIZE option in SETUP (or the default value of 0).</t>
        </section>
        <section anchor="moqt-implementation">
          <name>MOQT IMPLEMENTATION</name>
          <t>The MOQT_IMPLEMENTATION option (Option Type 0x07) identifies the name and
version of the sender's MOQT implementation.  This <bcp14>SHOULD</bcp14> be a UTF-8 encoded
string <xref target="RFC3629"/>, though the message does not carry information, such as
language tags, that would aid comprehension by any entity other than the one
that created the text.</t>
          <t>An endpoint <bcp14>SHOULD</bcp14> send a MOQT_IMPLEMENTATION option unless specifically
configured not to do so. This option helps identify the scope of interoperability
problems and work around implementation-specific limitations.</t>
          <t>Senders <bcp14>SHOULD</bcp14> limit the value to the implementation name and version, avoiding
advertising or other nonessential information. Implementations <bcp14>SHOULD NOT</bcp14> use
the identifiers of other implementations to declare compatibility, as this
undermines the usefulness of implementation identification for debugging.</t>
        </section>
        <section anchor="max-filter-ranges">
          <name>MAX FILTER RANGES</name>
          <t>The MAX_FILTER_RANGES option (Type 0x06) limits the peer's total number of Ranges
(Start/End pairs) allowed concurrently in all Range filter <xref target="range-filters"/>
parameters for a given subscription or fetch.  The default value is 0, so if not
specified, the peer <bcp14>MUST NOT</bcp14> send any such filter parameters.  If this limit is
exceeded, an endpoint <bcp14>MUST</bcp14> reject this with REQUEST_ERROR with error code INVALID_FILTER.</t>
        </section>
        <section anchor="max-request-updates">
          <name>MAX_REQUEST_UPDATES</name>
          <t>The MAX_REQUEST_UPDATES option (Option Type 0x08) communicates the maximum
number of unacknowledged REQUEST_UPDATE messages per request stream that
the endpoint is willing to receive.</t>
          <t>A REQUEST_UPDATE is considered outstanding from when it is sent until the
sender receives the corresponding REQUEST_OK or REQUEST_ERROR response.
The sender <bcp14>MUST NOT</bcp14> have more than MAX_REQUEST_UPDATES outstanding
REQUEST_UPDATEs on any single request stream at a time. Each REQUEST_OK
or REQUEST_ERROR response restores one credit on that stream. An
implementation that processes and responds to a REQUEST_UPDATE immediately
might not detect when a peer has pipelined messages exceeding its limit;
coalescing REQUEST_UPDATE processing (see <xref target="message-request-update"/>) can be
more effective at enforcing MAX_REQUEST_UPDATES.</t>
          <t>The value is encoded as a variable-length integer. A value of 0 means the
endpoint does not limit REQUEST_UPDATE concurrency. If not present, the default
value is 0.</t>
          <t>If an endpoint receives a REQUEST_UPDATE on a stream that already has
MAX_REQUEST_UPDATES outstanding REQUEST_UPDATEs, it <bcp14>MUST</bcp14> close the session
with <tt>TOO_MANY_REQUEST_UPDATES</tt>.</t>
        </section>
      </section>
      <section anchor="message-goaway">
        <name>GOAWAY</name>
        <t>An endpoint sends a <tt>GOAWAY</tt> message on its control stream to inform the peer
it intends to close the session soon.  When sent by a server, it can initiate
session migration (<xref target="session-migration"/>) with an optional URI.  A client <bcp14>MUST</bcp14>
send a zero-length New Session URI in any GOAWAY, as clients cannot instruct
servers to initiate connections.</t>
        <t>A <tt>GOAWAY</tt> <bcp14>MAY</bcp14> also be sent on a request stream to initiate migration of
that individual request.  Upon receiving a GOAWAY on a request stream, the
endpoint <bcp14>SHOULD</bcp14> re-issue that specific request on a session at the specified
URI (or the current session if no URI is provided), and close the old request
stream using the appropriate mechanism (e.g. FIN, stream reset, or PUBLISH_DONE).
This allows, for example, moving the publishers and subscribers of a common set
of tracks to a common relay without draining their entire session.</t>
        <t>The GOAWAY message does not impact subscription state. A subscriber
<bcp14>SHOULD</bcp14> individually unsubscribe from each existing subscription, while a
publisher <bcp14>MAY</bcp14> reject new requests after sending a GOAWAY.</t>
        <t>Upon receiving a GOAWAY on the control stream, an endpoint <bcp14>SHOULD NOT</bcp14> initiate new requests to the
peer including SUBSCRIBE, PUBLISH, FETCH, PUBLISH_NAMESPACE,
SUBSCRIBE_NAMESPACE, SUBSCRIBE_TRACKS and TRACK_STATUS.</t>
        <t>Sending a GOAWAY does not prevent the sender from initiating new requests,
though the sender <bcp14>SHOULD</bcp14> avoid initiating requests unless required by migration
(see (<xref target="graceful-subscriber-switchover"/> and <xref target="graceful-publisher-switchover"/>).
An endpoint that receives a GOAWAY <bcp14>MAY</bcp14> reject new requests with an appropriate
error code (e.g., REQUEST_ERROR with error code GOING_AWAY).</t>
        <t>The endpoint <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>
(<xref target="session-termination-codes"/>) if it receives more than one GOAWAY on the
control stream or on a single request stream.</t>
        <figure anchor="moq-transport-goaway-format">
          <name>MOQT GOAWAY Message</name>
          <artwork><![CDATA[
GOAWAY Message {
  Type (vi64) = 0x10,
  Length (16),
  New Session URI Length (vi64),
  New Session URI (..),
  Timeout (vi64),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>New Session URI: When received by a client, indicates where the client can
connect to continue this session or re-issue this request.  The client <bcp14>MUST</bcp14>
use this URI for the new session if provided. If the URI is zero bytes long,
the current URI is reused instead. The new session URI <bcp14>SHOULD</bcp14> use the same scheme
as the current URI to ensure compatibility.  The maximum length of the New
Session URI is 8,192 bytes.  If an endpoint receives a length exceeding the
maximum, it <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.  </t>
            <t>
If a server receives a GOAWAY with a non-zero New Session URI Length it <bcp14>MUST</bcp14>
close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          </li>
          <li>
            <t>Timeout: The time in milliseconds the sender will wait for graceful closure.
When sent on the control stream, the sender closes the session with
<tt>GOAWAY_TIMEOUT</tt> after the indicated timeout if there are still open requests.
When sent on a request stream, the sender <bcp14>SHOULD</bcp14> reset the stream with
<tt>GOING_AWAY</tt> after the indicated timeout.  A value of 0 indicates the sender has no
specific timeout, but the recipient <bcp14>SHOULD</bcp14> migrate as quickly as
possible. This is a hint; the sender of the GOAWAY <bcp14>MAY</bcp14> close the session or
reset the request stream before the indicated timeout has elapsed.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-request-ok">
        <name>REQUEST_OK</name>
        <t>The REQUEST_OK message is sent in response to PUBLISH, REQUEST_UPDATE,
TRACK_STATUS, SUBSCRIBE_NAMESPACE, SUBSCRIBE_TRACKS and PUBLISH_NAMESPACE
requests.</t>
        <t>This document uses the shorthand PUBLISH_OK, REQUEST_UPDATE_OK,
TRACK_STATUS_OK, SUBSCRIBE_NAMESPACE_OK, SUBSCRIBE_TRACKS_OK and
PUBLISH_NAMESPACE_OK to refer to a REQUEST_OK sent in response to the
corresponding request type.</t>
        <figure anchor="moq-transport-request-ok">
          <name>MOQT REQUEST_OK Message</name>
          <artwork><![CDATA[
REQUEST_OK Message {
  Type (vi64) = 0x7,
  Length (16),
  Number of Parameters (vi64),
  Parameters (..) ...,
  Track Properties (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
          <li>
            <t>Track Properties : A sequence of Properties. See <xref target="properties"/>. The
length of Track Properties is the remaining length of the message
after parsing all previous fields. Track Properties are populated in
TRACK_STATUS_OK; they are empty in PUBLISH_OK, REQUEST_UPDATE_OK,
SUBSCRIBE_NAMESPACE_OK and PUBLISH_NAMESPACE_OK.  If an endpoint
receives Track Properties in one of these messages it <bcp14>MUST</bcp14> close the
session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-request-error">
        <name>REQUEST_ERROR</name>
        <t>The REQUEST_ERROR message is sent in response to any request (SUBSCRIBE, FETCH,
PUBLISH, SUBSCRIBE_NAMESPACE, SUBSCRIBE_TRACKS, PUBLISH_NAMESPACE, TRACK_STATUS,
REQUEST_UPDATE).</t>
        <section anchor="redirect-structure">
          <name>Redirect Structure</name>
          <t>A Redirect provides a way for an endpoint to direct the peer to retry a
request at a different URI and/or for a different Full Track Name.</t>
          <artwork><![CDATA[
Redirect {
  Connect URI Length (vi64),
  Connect URI (..),
  Track Namespace (..),
  Track Name Length (vi64),
  Track Name (..),
}
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>Connect URI: The URI to connect to for the redirected request. If the length is
zero, the requester <bcp14>SHOULD</bcp14> use the current session's URI. If a server
receives a Redirect with a non-zero Connect URI Length it <bcp14>MUST</bcp14> close the
session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
            </li>
            <li>
              <t>Track Namespace and Track Name: The Track Namespace and Track Name to use
for the redirected request, together referred to as the Redirect target.  </t>
              <t>
Track Name is not meaningful for namespace-scoped requests
(SUBSCRIBE_NAMESPACE, PUBLISH_NAMESPACE, SUBSCRIBE_TRACKS) and <bcp14>MUST</bcp14> be empty;
an endpoint that receives a non-empty Track Name in a Redirect for a
namespace-scoped request <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
            </li>
          </ul>
        </section>
        <section anchor="requesterror-message-format">
          <name>REQUEST_ERROR Message Format</name>
          <figure anchor="moq-transport-request-error">
            <name>MOQT REQUEST_ERROR Message</name>
            <artwork><![CDATA[
REQUEST_ERROR Message {
  Type (vi64) = 0x5,
  Length (16),
  Error Code (vi64),
  Retry Interval (vi64),
  Error Reason (Reason Phrase),
  [Redirect (Redirect),]
}
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>Error Code: Identifies an integer error code for request failure.</t>
            </li>
            <li>
              <t>Retry Interval: The minimum time (in milliseconds) before the request <bcp14>SHOULD</bcp14> be
sent again, plus one. If the value is 0, the request <bcp14>SHOULD NOT</bcp14> be retried.</t>
            </li>
            <li>
              <t>Error Reason: Provides a text description of the request error. See
 <xref target="reason-phrase"/>.</t>
            </li>
            <li>
              <t>Redirect: Present only when Error Code is REDIRECT. See
<xref target="redirect-structure"/>.</t>
            </li>
          </ul>
          <t>If a request is retryable with the same parameters at a later time, the sender
of REQUEST_ERROR includes a non-zero Retry Interval in the message. To minimize
the risk of synchronized retry storms, the sender can apply randomization to
each retry interval so that retries are spread out over time.  A Retry Interval
value of 1 indicates the request can be retried immediately.</t>
          <t>The error codes used in REQUEST_ERROR are defined in <xref target="request-error-codes"/>.</t>
        </section>
      </section>
      <section anchor="message-request-update">
        <name>REQUEST_UPDATE</name>
        <t>The sender of a request (SUBSCRIBE, PUBLISH, FETCH, PUBLISH_NAMESPACE,
SUBSCRIBE_NAMESPACE, SUBSCRIBE_TRACKS) can later send a REQUEST_UPDATE on the
same bidi stream as the request to modify it.  A subscriber can also send
REQUEST_UPDATE to modify parameters of a subscription established with PUBLISH.</t>
        <t>An endpoint that receives a REQUEST_UPDATE other than in the two cases above
<bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
        <t>The receiver of a REQUEST_UPDATE <bcp14>MUST</bcp14> respond with exactly one REQUEST_OK
or REQUEST_ERROR message indicating if the update was successful, unless it
is coalescing failed updates to produce just one REQUEST_ERROR for multiple
REQUEST_UPDATE messages.</t>
        <t>The number of outstanding REQUEST_UPDATEs on a single request stream is
limited by the MAX_REQUEST_UPDATES Setup Option (<xref target="max-request-updates"/>).</t>
        <t>If a parameter previously set on the request is not present in
<tt>REQUEST_UPDATE</tt>, its value remains unchanged.</t>
        <t>There is no mechanism to remove a parameter from a request.</t>
        <t>The format of REQUEST_UPDATE is as follows:</t>
        <figure anchor="moq-transport-request-update-format">
          <name>MOQT REQUEST_UPDATE Message</name>
          <artwork><![CDATA[
REQUEST_UPDATE Message {
  Type (vi64) = 0x2,
  Length (16),
  Request ID (vi64),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
        </ul>
        <section anchor="updating-subscriptions">
          <name>Updating Subscriptions</name>
          <t>When a subscriber decreases the Start Location of the Location Filter
(see <xref target="location-filters"/>), the Start Location can be smaller than the Track's
Largest Location, similar to a new Subscription. Including FILL_PARAMETERS
(see <xref target="fill-parameters"/>) in the REQUEST_UPDATE causes the publisher to deliver
the new fill range by opening a new fill fetch stream (see
<xref target="fill-semantics"/>).  FETCH can also be used to retrieve any necessary Objects
smaller than the current Largest Location.</t>
          <t>When a subscriber increases the End Location, the Largest Object at
the publisher might already be larger than the previous End Location. This will
create a gap in the subscription. The REQUEST_UPDATE_OK will include the
LARGEST_OBJECT parameter, and the subscriber
can issue a FETCH to retrieve the omitted Objects, if any.</t>
          <t>When a subscriber narrows their subscription (increase the Start Location and/or
decrease the End Group), it might still receive Objects outside the
new range if the publisher sent them before the update was processed.</t>
          <t>When a REQUEST_UPDATE is unsuccessful, the publisher <bcp14>MUST</bcp14> also terminate
the subscription by sending a
PUBLISH_DONE with error code <tt>UPDATE_FAILED</tt>. When a REQUEST_UPDATE fails for
a FETCH, the publisher <bcp14>MUST</bcp14> reset the FETCH data stream. When a REQUEST_UPDATE
fails for a SUBSCRIBE_NAMESPACE, SUBSCRIBE_TRACKS or PUBLISH_NAMESPACE, the
responder <bcp14>MUST</bcp14> close the bidi stream (see <xref target="graceful-request-closure"/>).</t>
          <t>A receiver of multiple REQUEST_UPDATE messages on the same stream <bcp14>MAY</bcp14>
coalesce their processing by applying only the cumulative result.
Parameter values from later REQUEST_UPDATE messages override values
from earlier ones. The receiver <bcp14>MUST</bcp14> still send a REQUEST_OK for
each successful update, but it is not required to process
intermediate states individually. If the coalesced REQUEST_UPDATE
results in REQUEST_ERROR, only a single REQUEST_ERROR will be
sent and the sender of the REQUEST_UPDATEs will not always be
able to determine which caused an error.</t>
        </section>
        <section anchor="updating-namespace-subscriptions">
          <name>Updating Namespace Subscriptions</name>
          <t>A subscriber can update the Track Namespace Prefix of an established
SUBSCRIBE_NAMESPACE or SUBSCRIBE_TRACKS by including the
TRACK_NAMESPACE_PREFIX parameter (<xref target="track-namespace-prefix-param"/>) in a
REQUEST_UPDATE.  The overlap restriction applies independently per type: the
new prefix <bcp14>MUST NOT</bcp14> share a common prefix with any other active
SUBSCRIBE_NAMESPACE (for a SUBSCRIBE_NAMESPACE update) or SUBSCRIBE_TRACKS
(for a SUBSCRIBE_TRACKS update) in the same session.  If the update is
accepted, NAMESPACE and NAMESPACE_DONE messages following the
REQUEST_OK will contain Track Namespace suffixes relative to the
updated prefix.  Updating the prefix of a SUBSCRIBE_TRACKS has
no effect on existing subscriptions.  If the subscriber is no longer
interested it can cancel the corresponding bidirectional stream.</t>
        </section>
      </section>
      <section anchor="message-subscribe-req">
        <name>SUBSCRIBE</name>
        <t>SUBSCRIBE initiates a subscription to a track.  The associated parameters
determine the range and mechanism of object delivery; the Location Filter
(see <xref target="location-filters"/>) selects which Objects are sent, and a
FILL_PARAMETERS parameter (see <xref target="fill-parameters"/>) additionally retrieves the
fill range on a fill fetch stream (see <xref target="fill-semantics"/>).</t>
        <t>The format of SUBSCRIBE is as follows:</t>
        <figure anchor="moq-transport-subscribe-format">
          <name>MOQT SUBSCRIBE Message</name>
          <artwork><![CDATA[
SUBSCRIBE Message {
  Type (vi64) = 0x3,
  Length (16),
  Request ID (vi64),
  Track Namespace (..),
  Track Name Length (vi64),
  Track Name (..),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace: Identifies the namespace of the track as defined in
(<xref target="track-namespace-structure"/>).</t>
          </li>
          <li>
            <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
        </ul>
        <t>On successful subscription, the publisher <bcp14>MUST</bcp14> reply with a SUBSCRIBE_OK,
allowing the subscriber to determine the start group/object when not explicitly
specified, and start sending objects.</t>
      </section>
      <section anchor="message-subscribe-ok">
        <name>SUBSCRIBE_OK</name>
        <t>A publisher sends a SUBSCRIBE_OK as the first response message on the
bidi stream for successful subscriptions.</t>
        <figure anchor="moq-transport-subscribe-ok">
          <name>MOQT SUBSCRIBE_OK Message</name>
          <artwork><![CDATA[
SUBSCRIBE_OK Message {
  Type (vi64) = 0x4,
  Length (16),
  Track Alias (vi64),
  Number of Parameters (vi64),
  Parameters (..) ...,
  Track Properties (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Alias: The identifer used for this track in Subgroups or Datagrams (see
<xref target="track-alias"/>).</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
          <li>
            <t>Track Properties : A sequence of Properties. See <xref target="properties"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-publish">
        <name>PUBLISH</name>
        <t>The publisher sends PUBLISH as the first message on a new bidirectional stream
to initiate a subscription for a Track. The receiver verifies the publisher is
authorized to publish this track.</t>
        <figure anchor="moq-transport-publish-format">
          <name>MOQT PUBLISH Message</name>
          <artwork><![CDATA[
PUBLISH Message {
  Type (vi64) = 0x1D,
  Length (16),
  Request ID (vi64),
  Track Namespace (..),
  Track Name Length (vi64),
  Track Name (..),
  Track Alias (vi64),
  Number of Parameters (vi64),
  Parameters (..) ...,
  Track Properties (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace: Identifies a track's namespace as defined in
(<xref target="track-namespace-structure"/>)</t>
          </li>
          <li>
            <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Track Alias: The identifer used for this track in Subgroups or Datagrams (see
<xref target="track-alias"/>).</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>. Parameters such
as FORWARD, GROUP_ORDER, SUBSCRIBER_PRIORITY, SUBGROUP_DELIVERY_TIMEOUT,
OBJECT_DELIVERY_TIMEOUT, and LOCATION FILTER can appear in the Parameters
of a PUBLISH to inform the Subscriber of the initial Subscription parameters.
If the PUBLISH is the result of a SUBSCRIBE_TRACKS, the parameters are handled
as described in <xref target="parameters-on-subscribe-tracks"/>, otherwise, they represent
the publisher's initial settings for the subscription, which the subscriber can
change.</t>
          </li>
          <li>
            <t>Track Properties : A sequence of Properties. See <xref target="properties"/>.</t>
          </li>
        </ul>
        <t>A subscriber receiving a PUBLISH for a Track it does not wish to receive <bcp14>SHOULD</bcp14>
send REQUEST_ERROR with error code <tt>UNINTERESTED</tt>, and abandon reading any
publisher initiated streams associated with that subscription using a
STOP_SENDING frame.</t>
        <t>A publisher that sends the FORWARD parameter (<xref target="forward-parameter"/>) equal to 0
indicates that it will not transmit any objects until the subscriber sets the
Forward State to 1. If the FORWARD parameter is omitted or equal to 1, the
publisher will start transmitting objects immediately, possibly before
PUBLISH_OK. Delivery starts at the Next Object relative to the Largest Object
at the time the publisher begins sending.</t>
      </section>
      <section anchor="message-publish-done">
        <name>PUBLISH_DONE</name>
        <t>A publisher sends a <tt>PUBLISH_DONE</tt> message as the final message before
closing the subscription's bidi stream to indicate it is done publishing Objects
for that subscription.  The Status Code indicates why the subscription
ended, and whether it was an error. Because PUBLISH_DONE is sent on a request
stream, it is likely to arrive at the receiver before late-arriving objects, and
often even late-opening streams. However, the receiver uses it as an indication
that it should receive any late-opening streams in a relatively short time.</t>
        <t>Note that some objects in the subscribed track might never be delivered,
because a stream was reset, or never opened in the first place, due to the
delivery timeouts (see <xref target="delivery-timeouts"/>).</t>
        <t>A sender <bcp14>MUST NOT</bcp14> send PUBLISH_DONE until it has closed all streams it will ever
open, and has no further datagrams to send, for a subscription. After sending
PUBLISH_DONE, the sender can immediately destroy subscription state, although
stream state can persist until delivery completes. The sender might persist
subscription state to enforce the subgroup delivery timeout.</t>
        <t>A sender <bcp14>MUST NOT</bcp14> destroy subscription state until it sends PUBLISH_DONE, though
it can choose to stop sending objects (and thus send PUBLISH_DONE) for any
reason.</t>
        <t>A subscriber that receives PUBLISH_DONE <bcp14>SHOULD</bcp14> set a timer of at least the
larger of SUBGROUP_DELIVERY_TIMEOUT or OBJECT_DELIVERY_TIMEOUT in case some
objects are still inbound due to prioritization or packet loss. The subscriber
<bcp14>MAY</bcp14> dispense with a timer if it unsubscribed or is otherwise no longer
interested in objects from the track. Once the timer has expired, the receiver
destroys subscription state once all open streams for the subscription have
closed. A subscriber <bcp14>MAY</bcp14> discard subscription state earlier, at the cost of
potentially not delivering some late objects to the application.  The
subscriber <bcp14>SHOULD</bcp14> send STOP_SENDING on all streams related to the subscription
when it deletes subscription state.</t>
        <t>The format of <tt>PUBLISH_DONE</tt> is as follows:</t>
        <figure anchor="moq-transport-subscribe-fin-format">
          <name>MOQT PUBLISH_DONE Message</name>
          <artwork><![CDATA[
PUBLISH_DONE Message {
  Type (vi64) = 0xB,
  Length (16),
  Status Code (vi64),
  Stream Count (vi64),
  Error Reason (Reason Phrase)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Status Code: An integer status code indicating why the subscription ended.</t>
          </li>
          <li>
            <t>Stream Count: An integer indicating the number of data streams the publisher
opened for this subscription, including streams that contained no Objects (e.g.,
an empty Subgroup) and including any fill fetch streams (see
<xref target="fill-semantics"/>).  This helps the subscriber know if it has received
all of the data published in this subscription by comparing the number of
streams received.  The subscriber can immediately remove all subscription state
once the same number of streams have been processed.  If the publisher did not open any streams
for this subscription, the publisher <bcp14>MUST</bcp14> set Stream Count to 0.  If
the publisher is unable to set Stream Count to the exact number of streams
opened for the subscription, it <bcp14>MUST</bcp14> set Stream Count to 2^64 - 1. Subscribers
<bcp14>SHOULD</bcp14> use a timeout or other mechanism to remove subscription state in case
the publisher set an incorrect value, reset a stream before the SUBGROUP_HEADER,
or set the maximum value.  If a subscriber receives more streams for a
subscription than specified in Stream Count, it <bcp14>MAY</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>.</t>
          </li>
          <li>
            <t>Error Reason: Provides the reason for subscription error. See <xref target="reason-phrase"/>.</t>
          </li>
        </ul>
        <t>The status codes used in PUBLISH_DONE are defined in <xref target="publish-done-codes"/>.</t>
      </section>
      <section anchor="ps-notify">
        <name>PUBLISH_STATE_NOTIFY</name>
        <t>A publisher sends PUBLISH_STATE_NOTIFY on a subscription's bidirectional
stream to notify the subscriber that the state of the subscription has changed for a
reason other than a subscriber sent REQUEST_UPDATE.  Unlike REQUEST_UPDATE
(<xref target="message-request-update"/>), it is a unilateral notification: the receiver
does not respond with REQUEST_OK or REQUEST_ERROR, and the message is not
subject to the MAX_REQUEST_UPDATES limit (<xref target="max-request-updates"/>).</t>
        <t>PUBLISH_STATE_NOTIFY applies only to subscriptions, and is sent only by
the publisher.  An endpoint that receives a PUBLISH_STATE_NOTIFY for any
other request type, or from the subscriber, <bcp14>MUST</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>.</t>
        <t>A PUBLISH_STATE_NOTIFY carries the parameters whose values have changed.
If a parameter is not present, its value is unchanged.  The semantics of each
parameter, including whether it may appear in PUBLISH_STATE_NOTIFY, are
defined by the parameter.</t>
        <t>A publisher <bcp14>MUST NOT</bcp14> use PUBLISH_STATE_NOTIFY to
change the value of a subscriber controlled subscription parameter
unless the subscriber requested the change.</t>
        <t>The publisher <bcp14>MUST</bcp14> include the LARGEST_OBJECT parameter (<xref target="largest-param"/>), if
known, in PUBLISH_STATE_NOTIFY so the subscriber can determine the point in the
Track at which the change took effect.</t>
        <t>This message is informative and no action is required by the recipient.</t>
        <t>The format of PUBLISH_STATE_NOTIFY is as follows:</t>
        <figure anchor="moq-transport-ps-notify-format">
          <name>MOQT PUBLISH_STATE_NOTIFY Message</name>
          <artwork><![CDATA[
PUBLISH_STATE_NOTIFY Message {
  Type (vi64) = 0x22,
  Length (16),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-fetch">
        <name>FETCH</name>
        <t>A subscriber sends FETCH as the first message on a new bidi stream to a
publisher to request a range of already published objects within a track.</t>
        <t>The format of FETCH is as follows:</t>
        <figure anchor="moq-transport-fetch-format">
          <name>MOQT FETCH Message</name>
          <artwork><![CDATA[
FETCH Message {
  Type (vi64) = 0x16,
  Length (16),
  Request ID (vi64),
  Track Namespace (..),
  Track Name Length (vi64),
  Track Name (..),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace: Identifies the namespace of the track as defined in
(<xref target="track-namespace-structure"/>).</t>
          </li>
          <li>
            <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
        </ul>
        <t>A publisher responds to a FETCH request with either a FETCH_OK or a REQUEST_ERROR
message.  The publisher creates a new unidirectional stream that is used to send the
Objects.  The FETCH_OK or REQUEST_ERROR can come at any time relative to object
delivery.</t>
        <t>The publisher responding to a FETCH is
responsible for delivering all available Objects in the requested range in the
requested order (see <xref target="group-order"/>). The Objects in the response are delivered on a single
unidirectional stream. Any gaps in the Group and Object IDs in the response
stream indicate objects that do not exist unless filters were requested.  For Ascending Group Order this
includes ranges between the first requested object and the first object in the
stream; between objects in the stream; and between the last object in the
stream and the Largest Group/Object indicated in FETCH_OK, so long as the fetch
stream is terminated by a FIN.  If no Objects exist in the requested range, the
publisher opens the unidirectional stream, sends the FETCH_HEADER (see
<xref target="fetch-header"/>) and closes the stream with a FIN.</t>
        <t>A relay that has cached objects from the beginning of the range <bcp14>MAY</bcp14> start
sending objects immediately in response to a FETCH.  If it encounters an object
in the requested range that is not cached and has unknown status, the relay <bcp14>MUST</bcp14>
pause subsequent delivery until it has confirmed the object's status upstream.
If the upstream FETCH fails, the relay sends a REQUEST_ERROR and can reset the
unidirectional stream.  It can choose to do so immediately or wait until the
cached objects have been delivered before resetting the stream.</t>
        <t>The Object Forwarding Preference does not apply to fetches.</t>
        <t>Fetch can include a Location Filter parameter (see <xref target="location-filter"/>)
which specifies an inclusive range of Objects starting at Start Location and
ending at End Location.</t>
        <t>Objects with Locations larger than the <tt>Largest Object</tt> at the time the request
is processed will not be retrieved by a FETCH.  If the
requested End Location exceeds the <tt>Largest Object</tt>, the actual end of
the FETCH response is indicated in the FETCH_OK End Location.</t>
        <t>If no Objects have been published for the track or Start Location is greater
than the <tt>Largest Object</tt> (<xref target="message-subscribe-req"/>) the publisher <bcp14>MUST</bcp14> return
REQUEST_ERROR with error code <tt>INVALID_RANGE</tt>.</t>
        <t>A publisher <bcp14>MUST</bcp14> send fetched groups in the requested group order, either
ascending or descending. Within each group, objects are sent in Object ID order;
subgroup ID is not used for ordering.</t>
        <t>If a Publisher receives a FETCH with a range that includes one or more Objects with
unknown status (e.g. a Relay has temporarily lost contact with the Original
Publisher and does not have the Object in cache), it can choose to reset the
FETCH data stream with UNKNOWN_OBJECT_STATUS (<xref target="stream-reset-codes"/>), or indicate
the range of unknown Objects and continue serving other known Objects.</t>
      </section>
      <section anchor="message-fetch-ok">
        <name>FETCH_OK</name>
        <t>A publisher sends a FETCH_OK as the first message on the bidi stream in response
to a successful fetch. A publisher <bcp14>MAY</bcp14> send Objects in response to a FETCH before
the FETCH_OK message is sent, but the FETCH_OK <bcp14>MUST NOT</bcp14> be sent until the
End Location is known.</t>
        <figure anchor="moq-transport-fetch-ok">
          <name>MOQT FETCH_OK Message</name>
          <artwork><![CDATA[
FETCH_OK Message {
  Type (vi64) = 0x18,
  Length (16),
  End Of Track (8),
  End Location (Location),
  Number of Parameters (vi64),
  Parameters (..) ...
  Track Properties (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>End Of Track: 1 if all Objects have been published on this Track, and
the End Location is the final Object in the Track, 0 if not.</t>
          </li>
          <li>
            <t>End Location: The end of the range covered by the FETCH response.
This is the End Location from the FETCH request Location Filter parameter unless
the requested range extends beyond Largest Object at the time
the request was processed, or the last Object in the Track.
If End Location is smaller than the Start Location in the corresponding FETCH
the receiver <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
          <li>
            <t>Track Properties : A sequence of Properties. See <xref target="properties"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-track-status">
        <name>TRACK_STATUS</name>
        <t>A potential subscriber sends <tt>TRACK_STATUS</tt> as the first and only message on a
new bidi stream to obtain information about the current status of a given track.</t>
        <t>The TRACK_STATUS message format is identical to the SUBSCRIBE message
(<xref target="message-subscribe-req"/>), but subscriber parameters related to Track
delivery (e.g. SUBSCRIBER_PRIORITY) are not included.</t>
        <t>The receiver of a TRACK_STATUS message treats it identically as if it had
received a SUBSCRIBE message, except it does not create downstream subscription
state or send any Objects.  If successful, the publisher responds with a
TRACK_STATUS_OK with the same parameters and Track Properties it would have
set in a SUBSCRIBE_OK. Track Alias is not used.  A publisher responds to a
failed TRACK_STATUS with an
appropriate REQUEST_ERROR message.  The bidi stream is closed with a FIN after
TRACK_STATUS_OK or REQUEST_ERROR are sent.</t>
        <t>Relays without an <tt>Established</tt> subscription <bcp14>MAY</bcp14> forward TRACK_STATUS to one or more
publishers, or <bcp14>MAY</bcp14> initiate a subscription (subject to authorization) as
described in <xref target="publisher-interactions"/> to determine the response. The publisher
does not send PUBLISH_DONE for this request, and the subscriber cannot send
REQUEST_UPDATE.</t>
      </section>
      <section anchor="message-pub-ns">
        <name>PUBLISH_NAMESPACE</name>
        <t>The publisher sends the PUBLISH_NAMESPACE message as the first message on a
new bidi stream to advertise that it has tracks available within a Track Namespace.
The receiver verifies the publisher is authorized to publish tracks under this
namespace.</t>
        <figure anchor="moq-transport-pub-ns-format">
          <name>MOQT PUBLISH_NAMESPACE Message</name>
          <artwork><![CDATA[
PUBLISH_NAMESPACE Message {
  Type (vi64) = 0x6,
  Length (16),
  Request ID (vi64),
  Track Namespace (..),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace: Identifies a track's namespace as defined in
<xref target="track-namespace-structure"/>.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-subscribe-ns">
        <name>SUBSCRIBE_NAMESPACE</name>
        <t>The subscriber sends a SUBSCRIBE_NAMESPACE control message on a new
bidirectional stream to a publisher to request the current set of matching
published namespaces, as well as future updates to the set.</t>
        <figure anchor="moq-transport-subscribe-ns-format">
          <name>MOQT SUBSCRIBE_NAMESPACE Message</name>
          <artwork><![CDATA[
SUBSCRIBE_NAMESPACE Message {
  Type (vi64) = 0x50,
  Length (16),
  Request ID (vi64),
  Track Namespace Prefix (..),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace Prefix: A Track Namespace structure as described in
<xref target="track-namespace-structure"/> with between 0 and 32 Track Namespace Fields.
This prefix is matched against track namespaces known to the publisher.  For
example, using the serialized format from <xref target="namespace-name-format"/>, if the
publisher is a relay that has received PUBLISH_NAMESPACE messages for
namespaces <tt>example.2ecom-123-100</tt> and <tt>example.2ecom-123-200</tt>, a
SUBSCRIBE_NAMESPACE for <tt>example.2ecom-123</tt> would match both.  If an endpoint
receives a Track Namespace Prefix consisting of greater than 32 Track
Namespace Fields, it <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>.</t>
          </li>
        </ul>
        <t>The publisher will respond with REQUEST_OK or REQUEST_ERROR on the response half
of the stream. If the subscriber receives any message other than a REQUEST_OK or a
REQUEST_ERROR as the first message on the response half of the stream, then it <bcp14>MUST</bcp14>
close the session with a PROTOCOL_VIOLATION. If the SUBSCRIBE_NAMESPACE is
successful, the publisher will send matching NAMESPACE messages on the response
stream. If it is an error, the stream will be immediately closed via FIN. When
there are changes to the namespaces being published and the subscriber is
subscribed to them, the publisher sends the corresponding NAMESPACE or
NAMESPACE_DONE messages.</t>
        <t>Within a session, if a publisher receives a SUBSCRIBE_NAMESPACE with a
Track Namespace Prefix that shares a common prefix with an established
SUBSCRIBE_NAMESPACE, it <bcp14>MUST</bcp14> respond with REQUEST_ERROR with error code
<tt>PREFIX_OVERLAP</tt>.  SUBSCRIBE_NAMESPACE and SUBSCRIBE_TRACKS have independent
overlap spaces (see <xref target="message-subscribe-tracks"/>).</t>
        <t>The publisher <bcp14>MUST</bcp14> ensure the subscriber is authorized to perform this
namespace subscription.</t>
        <t>The publisher <bcp14>MUST NOT</bcp14> send NAMESPACE_DONE for a namespace suffix before the
corresponding NAMESPACE. If a subscriber receives a NAMESPACE_DONE before the
corresponding NAMESPACE, it <bcp14>MUST</bcp14> close the session with a 'PROTOCOL_VIOLATION'.</t>
        <t>If the publisher is unable to send NAMESPACE or NAMESPACE_DONE messages in a
timely manner because the SUBSCRIBE_NAMESPACE response stream is blocked by flow
control, the publisher <bcp14>MAY</bcp14> reset the SUBSCRIBE_NAMESPACE response stream.  When
a subscriber receives a stream reset or FIN on a SUBSCRIBE_NAMESPACE response
stream, it <bcp14>SHOULD</bcp14> treat this as though each active namespace received a
NAMESPACE_DONE. Subscriptions established via PUBLISH on separate bidi streams
are not affected by closure of the SUBSCRIBE_NAMESPACE stream.</t>
      </section>
      <section anchor="message-namespace">
        <name>NAMESPACE</name>
        <t>The NAMESPACE message is similar to the PUBLISH_NAMESPACE message, except
it is sent on the response stream of a SUBSCRIBE_NAMESPACE request.
All NAMESPACE messages are in response to a SUBSCRIBE_NAMESPACE, so only
the namespace tuples after the 'Track Namespace Prefix' are included
in the 'Track Namespace Suffix'.</t>
        <figure anchor="moq-transport-ns-format">
          <name>MOQT NAMESPACE Message</name>
          <artwork><![CDATA[
NAMESPACE Message {
  Type (vi64) = 0x8,
  Length (16),
  Track Namespace Suffix (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace Suffix: Specifies the final portion of a track's
namespace as defined in <xref target="track-namespace-structure"/> after removing
namespace tuples included in 'Track Namespace Prefix'
<xref target="message-subscribe-ns"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-namespace-done">
        <name>NAMESPACE_DONE</name>
        <t>The publisher sends the <tt>NAMESPACE_DONE</tt> control message to indicate its
intent to stop serving new subscriptions for tracks within the provided Track
Namespace. All NAMESPACE_DONE messages are in response to a SUBSCRIBE_NAMESPACE,
so only the namespace tuples after the 'Track Namespace Prefix' are included
in the 'Track Namespace Suffix'.</t>
        <figure anchor="moq-transport-ns-done-format">
          <name>MOQT NAMESPACE_DONE Message</name>
          <artwork><![CDATA[
NAMESPACE_DONE Message {
  Type (vi64) = 0xE,
  Length (16),
  Track Namespace Suffix (..)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace Suffix: Specifies the final portion of a track's
namespace as defined in <xref target="track-namespace-structure"/>. The namespace begins
with the 'Track Namespace Prefix' specified in <xref target="message-subscribe-ns"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="message-subscribe-tracks">
        <name>SUBSCRIBE_TRACKS</name>
        <t>The subscriber sends a SUBSCRIBE_TRACKS control message on a new bidirectional
stream to a publisher to request PUBLISH messages for all tracks within matching
namespaces, as well as future track publications within those namespaces.</t>
        <figure anchor="moq-transport-subscribe-tracks-format">
          <name>MOQT SUBSCRIBE_TRACKS Message</name>
          <artwork><![CDATA[
SUBSCRIBE_TRACKS Message {
  Type (vi64) = 0x51,
  Length (16),
  Request ID (vi64),
  Track Namespace Prefix (..),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Request ID: See <xref target="request-id"/>.</t>
          </li>
          <li>
            <t>Track Namespace Prefix: A Track Namespace structure as described in
<xref target="track-namespace-structure"/> with between 0 and 32 Track Namespace Fields.
This prefix is matched against track namespaces known to the publisher.  If
an endpoint receives a Track Namespace Prefix consisting of greater than 32
Track Namespace Fields, it <bcp14>MUST</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>.</t>
          </li>
          <li>
            <t>Parameters: The parameters are defined in <xref target="message-params"/>, though they
are handled differently from the same Parameters on Subscriptions, as outlined
below.</t>
          </li>
        </ul>
        <t>The publisher will respond with REQUEST_OK or REQUEST_ERROR on the response half
of the stream. If the subscriber receives any message other than a REQUEST_OK or a
REQUEST_ERROR as the first message on the response half of the stream, then it <bcp14>MUST</bcp14>
close the session with a PROTOCOL_VIOLATION. If the SUBSCRIBE_TRACKS is
successful, the publisher will send PUBLISH messages on new bidirectional streams
for tracks within matching namespaces. If it is an error, the stream will be
closed via FIN after REQUEST_ERROR is sent.</t>
        <t>Within a session, if a publisher receives a SUBSCRIBE_TRACKS with a
Track Namespace Prefix that shares a common prefix with an established
SUBSCRIBE_TRACKS, it <bcp14>MUST</bcp14> respond with REQUEST_ERROR with error code
<tt>PREFIX_OVERLAP</tt>.  SUBSCRIBE_TRACKS and SUBSCRIBE_NAMESPACE have independent
overlap spaces (see <xref target="message-subscribe-ns"/>).</t>
        <t>The publisher <bcp14>MUST</bcp14> ensure the subscriber is authorized to perform this
namespace subscription.</t>
        <t>SUBSCRIBE_TRACKS is not required for a publisher to send PUBLISH messages to
a subscriber.  It is useful for subscribers that are
only interested in or authorized to access a subset of available tracks.</t>
        <section anchor="parameters-on-subscribe-tracks">
          <name>Parameters on SUBSCRIBE_TRACKS</name>
          <t>Any Parameter that can be specified on a Subscription (ie: in SUBSCRIBE) is valid
in SUBSCRIBE_TRACKS, unless otherwise specified. These parameters are used by the
publisher as the initial Subscription parameters when a PUBLISH is sent as a result of
SUBSCRIBE_TRACKS. These Parameters are explicitly communicated in PUBLISH.
When omitted by the publisher in PUBLISH, the subscriber uses the default value for each.</t>
          <t>To join Tracks initiated via the resulting PUBLISHes, the subscriber can specify a
Location Filter and optionally include FILL_PARAMETERS, as described in <xref target="joining-tracks"/>.</t>
        </section>
      </section>
      <section anchor="message-publish-skipped">
        <name>PUBLISH_SKIPPED</name>
        <t>The publisher sends the <tt>PUBLISH_SKIPPED</tt> control message to indicate it will
not send a PUBLISH message to initiate a new Subscription for a Track in the
SUBSCRIBE_TRACKS's Track Namespace. All PUBLISH_SKIPPED messages are in
response to a SUBSCRIBE_TRACKS, so only the namespace tuples after the
'Track Namespace Prefix' are included in the 'Track Namespace Suffix'.</t>
        <figure anchor="moq-transport-publish-blocked-format">
          <name>MOQT PUBLISH_SKIPPED Message</name>
          <artwork><![CDATA[
PUBLISH_SKIPPED Message {
  Type (vi64) = 0xF,
  Length (16),
  Track Namespace Suffix (..),
  Track Name Length (vi64),
  Track Name (..),
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Track Namespace Suffix: Specifies the final portion of a track's
namespace as defined in <xref target="track-namespace-structure"/>. The namespace begins
with the 'Track Namespace Prefix' specified in <xref target="message-subscribe-tracks"/>.</t>
          </li>
          <li>
            <t>Track Name: Identifies the track name as defined in (<xref target="track-name"/>).</t>
          </li>
        </ul>
      </section>
      <section anchor="message-params">
        <name>Control Message Parameters</name>
        <t>Some control messages include a field that encodes optional Message Parameters.
Message Parameters are serialized as follows:</t>
        <figure anchor="moq-message-param">
          <name>Message Parameter</name>
          <artwork><![CDATA[
Message Parameter {
  Type Delta (vi64),
  Value (..)
}
]]></artwork>
        </figure>
        <t>Type Delta: The difference between this Parameter Type and the previous
   Parameter Type in the message, or the Parameter Type itself for the first
   parameter. Parameters <bcp14>MUST</bcp14> be serialized in ascending order by Type.
   If the resulting Type would be greater than 2^64 - 1, the endpoint
   <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
        <ul spacing="normal">
          <li>
            <t>Value: The encoding is specified by each parameter definition.
The encodings defined in this draft are:
            </t>
            <ul spacing="normal">
              <li>
                <t>uint8: A single-byte unsigned integer (0-255)</t>
              </li>
              <li>
                <t>varint: A variable-length integer</t>
              </li>
              <li>
                <t>Location: Two consecutive varints (Group, Object)</t>
              </li>
              <li>
                <t>Length-prefixed: A varint length followed by that many bytes</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Message Parameters are intended for the peer only and are not
forwarded by Relays, though relays can consider received parameter values when
making a request.</t>
        <t>All Message Parameters <bcp14>MUST</bcp14> be defined in the negotiated version of MOQT or
negotiated via Setup Options. An endpoint that receives an unknown Message
Parameter <bcp14>MUST</bcp14> close the session with <tt>PROTOCOL_VIOLATION</tt>. Because the receiver
has to understand every Message Parameter, there is no need for a mechanism to
skip unknown parameters. Because unknown parameters cannot be skipped, the block
is bounded by a parameter count rather than a length.</t>
        <t>The Message Parameter types defined in this version of MOQT are defined in
the following subsections.</t>
        <t>Senders <bcp14>MUST NOT</bcp14> repeat the same Parameter Type in a message unless the
parameter definition explicitly allows multiple instances of that type to
be sent in a single message. Receivers <bcp14>SHOULD</bcp14> check that there are no
unexpected duplicate parameters and close the session with <tt>PROTOCOL_VIOLATION</tt>
if found.</t>
        <t>The number of Message Parameters is not specifically limited, but the total
length of a control message is limited to 2^16-1 bytes.</t>
        <t>Message Parameters in SUBSCRIBE and FETCH <bcp14>MUST NOT</bcp14> cause the
publisher to alter the payload of the objects it sends, as that would violate
the track uniqueness guarantee described in <xref target="track-scope"/>.</t>
        <section anchor="parameter-scope">
          <name>Parameter Scope</name>
          <t>Message Parameters are always intended for the peer endpoint only and are not
forwarded by Relays, though relays can consider received parameter values when
making a request. Track information not specific to the Message or Session
is encoded in Track Properties. See <xref target="properties"/>.</t>
          <t>Each Message Parameter definition indicates the message types in which
it can appear. If it appears in some other type of message, the receiving
endpoint <bcp14>MUST</bcp14> close the connection with a <tt>PROTOCOL_VIOLATION</tt>.
Note that since Setup Options use a separate namespace, it is impossible for
Message Parameters to appear in Setup messages.</t>
        </section>
        <section anchor="allowed-parameters-by-control-message">
          <name>Allowed Parameters By Control Message</name>
        </section>
        <section anchor="authorization-token">
          <name>AUTHORIZATION TOKEN Parameter</name>
          <t>The AUTHORIZATION TOKEN parameter (Parameter Type 0x03) uses Length-prefixed
encoding. It <bcp14>MAY</bcp14> appear in a PUBLISH, SUBSCRIBE, REQUEST_UPDATE,
SUBSCRIBE_NAMESPACE, SUBSCRIBE_TRACKS, PUBLISH_NAMESPACE, TRACK_STATUS or FETCH message. This
parameter conveys information to authorize the sender to perform the operation
carrying the parameter. This Parameter <bcp14>MUST NOT</bcp14> be copied from a SUBSCRIBE_TRACKS
to the resulting PUBLISH message Parameters.</t>
          <t>The parameter value is a Token structure, whose wire format and semantics are
defined in <xref target="auth-token-compression"/>.</t>
        </section>
        <section anchor="subgroup-delivery-timeout">
          <name>SUBGROUP_DELIVERY_TIMEOUT Parameter</name>
          <t>The SUBGROUP_DELIVERY_TIMEOUT parameter (Parameter Type 0x06) is a varint. It
<bcp14>MAY</bcp14> appear in a SUBSCRIBE, PUBLISH, or REQUEST_UPDATE message.  Its
semantics are defined in <xref target="delivery-timeouts"/>.</t>
          <t>This parameter is intended to be specific to a subscription, so it <bcp14>SHOULD NOT</bcp14>
be forwarded upstream by a relay that intends to serve multiple subscriptions
for the same track.</t>
        </section>
        <section anchor="object-delivery-timeout">
          <name>OBJECT_DELIVERY_TIMEOUT Parameter</name>
          <t>The OBJECT_DELIVERY_TIMEOUT parameter (Parameter Type 0x02) is a varint. It
<bcp14>MAY</bcp14> appear in a SUBSCRIBE, PUBLISH, or REQUEST_UPDATE message.  Its
semantics are defined in <xref target="delivery-timeouts"/>.</t>
          <t>This parameter is intended to be specific to a subscription, so it <bcp14>SHOULD NOT</bcp14>
be forwarded upstream by a relay that intends to serve multiple subscriptions
for the same track.</t>
        </section>
        <section anchor="fill-timeout">
          <name>FILL TIMEOUT Parameter</name>
          <t>The FILL_TIMEOUT parameter (Parameter Type 0x0A) <bcp14>MAY</bcp14> appear in a FETCH message,
or inside a FILL_PARAMETERS parameter (see <xref target="fill-parameters"/>) in a SUBSCRIBE
or REQUEST_UPDATE (for a subscription), where it applies to the fill fetch
stream.</t>
          <t>It is the maximum total duration in milliseconds a relay <bcp14>SHOULD</bcp14> spend waiting
for upstream sources to provide Objects that are not immediately available
before reporting them as Timed-Out gaps in the FETCH response. When a relay
encounters Objects within the requested range that are not immediately available
and have unknown status, it issues upstream FETCHes to retrieve them. The Fill
Timeout represents a total budget for all such upstream FETCHes generated by
this request. If the budget is exhausted, the relay reports any remaining
unavailable Objects as Timed-Out gaps (<tt>End of Timed-Out Range</tt>, see
<xref target="end-of-range"/>) and continues delivering available Objects in the range.</t>
          <t>A value of 0 indicates the subscriber only wants Objects that are immediately
available; the relay <bcp14>MUST NOT</bcp14> wait for upstream delivery and <bcp14>MUST</bcp14> report any
unavailable Objects as Timed-Out gaps.</t>
          <t>If the Fill Timeout parameter is absent, the relay waits for an implementation
specific duration before reporting Timed-Out gaps. If the subscriber specifies a
Fill Timeout larger than the relay is willing to wait, the relay <bcp14>MAY</bcp14> use a
shorter timeout without informing the subscriber.</t>
        </section>
        <section anchor="rendezvous-timeout">
          <name>RENDEZVOUS TIMEOUT Parameter</name>
          <t>The RENDEZVOUS_TIMEOUT parameter (Parameter Type 0x04) <bcp14>MAY</bcp14> appear in a
SUBSCRIBE message.</t>
          <t>It is the duration in milliseconds the subscriber is willing to wait for a
publisher to become available. This applies when a relay receives a SUBSCRIBE
for a Track that has no current publisher.</t>
          <t>If the RENDEZVOUS_TIMEOUT is present, the relay <bcp14>SHOULD</bcp14> hold the subscription
and wait for a publisher to appear, up to the specified duration. The relay
does not send SUBSCRIBE_OK until a publisher becomes available. If a publisher
becomes available within this time, the relay proceeds with the subscription
normally. If the timeout expires without a publisher, the relay <bcp14>SHOULD</bcp14> respond
with REQUEST_ERROR with error code TIMEOUT.</t>
          <t>The relay <bcp14>MAY</bcp14> use a shorter timeout than requested by the subscriber. For
example, a relay might limit the maximum rendezvous timeout to protect its
resources.</t>
          <t>A value of 0 indicates the subscriber does not want to wait and expects an
immediate response.  The relay <bcp14>MUST</bcp14> immediately return REQUEST_ERROR with error
code DOES_NOT_EXIST if no publisher is available</t>
          <t>If RENDEZVOUS_TIMEOUT is absent, the default is 0.</t>
        </section>
        <section anchor="subscriber-priority">
          <name>SUBSCRIBER PRIORITY Parameter</name>
          <t>The SUBSCRIBER_PRIORITY parameter (Parameter Type 0x20) is a uint8. It <bcp14>MAY</bcp14>
appear in a SUBSCRIBE, PUBLISH, FETCH, or REQUEST_UPDATE
(for a subscription or FETCH). It is an integer expressing the priority of a
subscription relative to other subscriptions and fetch responses in the same
session. Lower numbers get higher priority. See <xref target="priorities"/>.</t>
          <t>If omitted from SUBSCRIBE or FETCH, the publisher uses the value 128.</t>
        </section>
        <section anchor="group-order">
          <name>GROUP ORDER Parameter</name>
          <t>The GROUP_ORDER parameter (Parameter Type 0x22) is a uint8. It <bcp14>MAY</bcp14> appear in a
SUBSCRIBE, PUBLISH, SUBSCRIBE_TRACKS, or FETCH, or inside a FILL_PARAMETERS
parameter (see <xref target="fill-parameters"/>).</t>
          <t>Its value indicates how to prioritize Objects from different groups within
the same subscription (see <xref target="priorities"/>), or how to order Groups in a Fetch
response (see <xref target="message-fetch"/>). When it appears inside FILL_PARAMETERS, it
governs the fill fetch stream and its ordering relative to subscription-delivered
Objects (see <xref target="priorities"/>). The allowed values are Ascending (0x1) or Descending
(0x2). If an endpoint receives a value outside this range, it <bcp14>MUST</bcp14>
close the session with <tt>PROTOCOL_VIOLATION</tt>.</t>
          <t>If omitted from SUBSCRIBE or SUBSCRIBE_TRACKS, the publisher's preference from
the Track is used. If omitted from FETCH, the receiver uses Ascending (0x1).</t>
        </section>
        <section anchor="location-filter">
          <name>LOCATION FILTER Parameter</name>
          <t>The LOCATION_FILTER parameter (Parameter Type 0x21) <bcp14>MAY</bcp14> appear in a FETCH,
SUBSCRIBE, PUBLISH, REQUEST_UPDATE (for a subscription) or
PUBLISH_STATE_NOTIFY message. It is a Location Filter (see
<xref target="location-filters"/>).</t>
          <t>A Location filter parameter has the following length-prefixed structure:</t>
          <artwork><![CDATA[
LOCATION_FILTER Parameter {
  Parameter Type (vi64) = 0x21,
  Length (vi64),
  [StartGroup (vi64),]
  [StartObject (vi64),]
  [EndGroupDelta (vi64),]
  [EndObject (vi64),]
}
]]></artwork>
          <t>Length (in bytes) determines how many optional vi64 fields are present.
A length of 0 indicates no filter, for example to remove the filter in REQUEST_UPDATE.
  * If only one field is present, it is StartGroup.
  * If only two fields are present, they are StartGroup and StartObject.
  * If only three fields are present, they are StartGroup, StartObject, and EndGroupDelta.</t>
          <t>If only StartGroup is present, it is a relative number of groups prior to the Next Group,
hence the start Location is <tt>{Largest Object.Group + 1 - StartGroup, 0}</tt>. For example:
  * StartGroup=0 will start at the Next Group
  * StartGroup=1 will start at the current group
  * StartGroup=2 will start at 1 group prior to the current group
  * StartGroup=N will start at N-1 groups prior to the current group</t>
          <t>If only StartGroup and StartObject are present and both 0, the start Location
is the Next Object (see <xref target="largest-object"/>).  An open-ended filter that starts
at absolute Location {0, 0} is equivalent to unfiltered, so the subscriber need
not include a Location filter.</t>
          <t>If a relative start group results in a computed absolute group less than 0, the
computed value is set to 0; if greater than 2^64 - 1, it is set to 2^64 - 1.</t>
          <t>Otherwise, all fields are absolute.  EndGroupDelta is delta
encoded from StartGroup, but both the start and end groups are absolute, not
relative to <tt>Largest Object</tt>.  If StartGroup + EndGroupDelta exceeds 2^64 - 1,
the endpoint <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          <t>When EndGroupDelta and EndObject are omitted from a subscription filter, the
subscription is open-ended. When they are omitted from a Fetch, the
EndGroup and EndObject are <tt>Largest Object</tt>.</t>
          <t>When EndObject is omitted, the filter includes all objects in the End Group.</t>
          <t>If omitted from FETCH or SUBSCRIBE, the fetch or subscription is
unfiltered.  If omitted from REQUEST_UPDATE or PUBLISH_STATE_NOTIFY, the
value is unchanged.  When sent in PUBLISH_STATE_NOTIFY, it reports the
Location Filter now in effect at the publisher.</t>
        </section>
        <section anchor="subgroup-filter">
          <name>SUBGROUP FILTER Parameter</name>
          <t>The SUBGROUP_FILTER parameter (Type 0x25) selects objects with specified
Ranges of Subgroup ID.  See <xref target="range-filters"/> and <xref target="range-filter-structure"/>.</t>
          <artwork><![CDATA[
SUBGROUP_FILTER {
  Type (vi64) = 0x25,
  Length (vi64),
  [SetID (8)],
  [Range (..) ...]
}
]]></artwork>
        </section>
        <section anchor="objectid-filter">
          <name>OBJECTID FILTER Parameter</name>
          <t>The OBJECTID_FILTER parameter (Type 0x26) selects objects with specified
Ranges of Object ID.  See <xref target="range-filters"/> and <xref target="range-filter-structure"/>.</t>
          <artwork><![CDATA[
OBJECTID_FILTER {
  Type (vi64) = 0x26,
  Length (vi64),
  [SetID (8)],
  [Range (..) ...]
}
]]></artwork>
        </section>
        <section anchor="priority-filter">
          <name>PRIORITY FILTER Parameter</name>
          <t>The PRIORITY_FILTER parameter (Type 0x27) selects objects with specified
Ranges of Publisher Priority.  See <xref target="range-filters"/> and
<xref target="range-filter-structure"/>.
If a decoded value exceeds 255, the endpoint <bcp14>MUST</bcp14> reject this with
REQUEST_ERROR with error code INVALID_FILTER since Publisher Priority
is an 8-bit field.</t>
          <artwork><![CDATA[
PRIORITY_FILTER {
  Type (vi64) = 0x27,
  Length (vi64),
  [SetID (8)],
  [Range (..) ...]
}
]]></artwork>
        </section>
        <section anchor="object-property-filter">
          <name>OBJECT PROPERTY FILTER Parameter</name>
          <t>The OBJECT_PROPERTY_FILTER parameter (Type 0x28) selects objects with
required Ranges of Property Value for a required Object Property
Type which <bcp14>MUST</bcp14> be even, i.e. a single integer value
(see <xref target="moq-key-value-pair"/>), otherwise the endpoint <bcp14>MUST</bcp14> reject this with
REQUEST_ERROR with error code INVALID_FILTER. See <xref target="range-filters"/> and
<xref target="range-filter-structure"/>.</t>
          <artwork><![CDATA[
OBJECT_PROPERTY_FILTER {
  Type (vi64) = 0x28,
  Length (vi64),
  [SetID (8)],
  [Property Type (vi64)],
  [Range (..) ...]
}
]]></artwork>
        </section>
        <section anchor="track-property-filter">
          <name>TRACK PROPERTY FILTER Parameter</name>
          <t>The TRACK_PROPERTY_FILTER parameter (Type 0x29) selects tracks with
required Ranges of Property Value for a required Track Property
Type which <bcp14>MUST</bcp14> be even, i.e. a single integer value
(see <xref target="moq-key-value-pair"/>), otherwise the endpoint <bcp14>MUST</bcp14> reject this with
REQUEST_ERROR with error code INVALID_FILTER. See <xref target="range-filters"/> and
<xref target="range-filter-structure"/>.</t>
          <artwork><![CDATA[
TRACK_PROPERTY_FILTER {
  Type (vi64) = 0x29,
  Length (vi64),
  [SetID (8)],
  [Property Type (vi64)],
  [Range (..) ...]
}
]]></artwork>
        </section>
        <section anchor="fill-parameters">
          <name>FILL PARAMETERS Parameter</name>
          <t>The FILL_PARAMETERS parameter (Parameter Type 0x23) uses length-prefixed
encoding. It <bcp14>MAY</bcp14> appear in a SUBSCRIBE or REQUEST_UPDATE (for a subscription)
message. Its value is a sequence of Parameters that apply to the fill fetch
stream (see <xref target="fill-semantics"/>), encoded as if they were Parameters for a
separate message (see <xref target="message-parameters"/>).  Its presence is what requests a
fill fetch stream; a subscription with no FILL_PARAMETERS opens none.</t>
          <t>The following parameters <bcp14>MAY</bcp14> appear inside FILL_PARAMETERS:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Parameter Type</th>
                <th align="left">Parameter Name</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0x0A</td>
                <td align="left">FILL_TIMEOUT</td>
                <td align="left">
                  <xref target="fill-timeout"/></td>
              </tr>
              <tr>
                <td align="left">0x20</td>
                <td align="left">SUBSCRIBER_PRIORITY</td>
                <td align="left">
                  <xref target="subscriber-priority"/></td>
              </tr>
              <tr>
                <td align="left">0x21</td>
                <td align="left">LOCATION_FILTER</td>
                <td align="left">
                  <xref target="location-filter"/></td>
              </tr>
              <tr>
                <td align="left">0x22</td>
                <td align="left">GROUP_ORDER</td>
                <td align="left">
                  <xref target="group-order"/></td>
              </tr>
              <tr>
                <td align="left">0x25</td>
                <td align="left">SUBGROUP_FILTER</td>
                <td align="left">
                  <xref target="range-filters"/></td>
              </tr>
              <tr>
                <td align="left">0x26</td>
                <td align="left">OBJECTID_FILTER</td>
                <td align="left">
                  <xref target="range-filters"/></td>
              </tr>
              <tr>
                <td align="left">0x27</td>
                <td align="left">PRIORITY_FILTER</td>
                <td align="left">
                  <xref target="range-filters"/></td>
              </tr>
              <tr>
                <td align="left">0x28</td>
                <td align="left">OBJECT_PROPERTY_FILTER</td>
                <td align="left">
                  <xref target="range-filters"/></td>
              </tr>
            </tbody>
          </table>
          <t>The LOCATION_FILTER inside FILL_PARAMETERS selects the fill range and is
evaluated using the rules for a Fetch (see <xref target="location-filter"/>); it is
independent of the subscription's own Location filter.</t>
          <t>A parameter that is omitted from FILL_PARAMETERS takes the value it has for the
subscription; FILL_PARAMETERS therefore carries only the settings that
differ. An endpoint that receives a parameter inside FILL_PARAMETERS that is not
listed above <bcp14>MUST</bcp14> close the session with <tt>PROTOCOL_VIOLATION</tt>.</t>
          <t>The value of FILL_PARAMETERS is a separate parameter scope. Parameters inside
it are not considered to appear in the enclosing message for the purposes of
<xref target="message-params"/>, so a Parameter Type <bcp14>MAY</bcp14> appear both in the message and
inside FILL_PARAMETERS.</t>
          <t>FILL_PARAMETERS is not retained as subscription state. It applies only to the
message that carries it, so the sticky-parameter rules in
<xref target="message-request-update"/> do not apply to it.</t>
        </section>
        <section anchor="expires">
          <name>EXPIRES Parameter</name>
          <t>The EXPIRES parameter (Parameter Type 0x8) is a varint. It <bcp14>MAY</bcp14> appear in
SUBSCRIBE_OK, PUBLISH, PUBLISH_OK, SUBSCRIBE_NAMESPACE_OK, SUBSCRIBE_TRACKS_OK,
PUBLISH_NAMESPACE_OK, or REQUEST_UPDATE_OK. It encodes the time
in milliseconds after which the sender of the parameter will terminate
the subscription. The sender will terminate the subscription using PUBLISH_DONE
or by cancelling the request (see <xref target="request-cancellation"/>).  This value is advisory and the sender
can terminate the subscription prior to or after the expiry time.</t>
          <t>The receiver of the parameter can attempt to extend the subscription by sending
a REQUEST_UPDATE with 0 or more updated parameters. If the receiver has one or
more updated AUTHORIZATION_TOKENs, it <bcp14>SHOULD</bcp14> include those in the
REQUEST_UPDATE. If the extension is granted, the sender includes a new EXPIRES
value in REQUEST_UPDATE_OK. Relays that send this parameter and applications that
receive it <bcp14>MAY</bcp14> introduce jitter to prevent many endpoints from updating
simultaneously.</t>
          <t>If the EXPIRES parameter is 0 or is not present in a message, the subscription
does not expire or expires at an unknown time.</t>
        </section>
        <section anchor="largest-param">
          <name>LARGEST OBJECT Parameter</name>
          <t>The LARGEST_OBJECT parameter (Parameter Type 0x9) is a Location. It <bcp14>MAY</bcp14> appear
in SUBSCRIBE_OK, PUBLISH, REQUEST_UPDATE_OK, TRACK_STATUS_OK, or
PUBLISH_STATE_NOTIFY.  It contains the largest Location (see
<xref target="location-structure"/>) in the Track observed by the sending endpoint (see
<xref target="location-filters"/>). If Objects have been published on this Track the
Publisher <bcp14>MUST</bcp14> include this parameter.</t>
          <t>If omitted from a message, the sending endpoint has not published or received
any Objects in the Track.</t>
          <t>A relay <bcp14>MUST</bcp14> set LARGEST_OBJECT to the largest of the following:</t>
          <ol spacing="normal" type="1"><li>
              <t>Any LARGEST_OBJECT value received from the upstream publisher in SUBSCRIBE_OK,
PUBLISH, or REQUEST_UPDATE_OK</t>
            </li>
            <li>
              <t>The largest Location of an Object received on an upstream subscription</t>
            </li>
          </ol>
        </section>
        <section anchor="forward-parameter">
          <name>FORWARD Parameter</name>
          <t>The FORWARD parameter (Parameter Type 0x10) is a uint8. It <bcp14>MAY</bcp14> appear in
SUBSCRIBE, REQUEST_UPDATE (for a subscription or a SUBSCRIBE_TRACKS request),
PUBLISH, SUBSCRIBE_TRACKS and PUBLISH_STATE_NOTIFY. It
specifies the Forwarding State on affected subscriptions (see <xref target="subscriptions"/>).
The allowed values are 0 (don't forward) or 1 (forward). If an endpoint receives
a value outside this range, it <bcp14>MUST</bcp14> close the session with <tt>PROTOCOL_VIOLATION</tt>.</t>
          <t>In the case of a REQUEST_UPDATE for SUBSCRIBE_TRACKS, it specifies the
Forwarding State on future subscriptions that match the prefix. Existing
subscriptions are unaffected.</t>
          <t>If the parameter is omitted from REQUEST_UPDATE or PUBLISH_STATE_NOTIFY,
the value for the subscription remains unchanged.  If the parameter is omitted
from any other message, the default value is 1.  When sent in
PUBLISH_STATE_NOTIFY, it reports the Forwarding State now in effect at the
publisher.</t>
        </section>
        <section anchor="new-group-request">
          <name>NEW GROUP REQUEST Parameter</name>
          <t>The NEW_GROUP_REQUEST parameter (Parameter Type 0x32) is a varint. It <bcp14>MAY</bcp14> appear
in SUBSCRIBE or REQUEST_UPDATE for a subscription.  It represents the largest Group
ID in the Track known by the subscriber, plus 1. A value of 0 indicates that the
subscriber has no Group information for the Track.  A subscriber <bcp14>MUST NOT</bcp14> send
this parameter in REQUEST_UPDATE if the Track did not
include the DYNAMIC_GROUPS Property with value 1.  A subscriber <bcp14>MAY</bcp14>
include this parameter in SUBSCRIBE without foreknowledge of support.  If the
original publisher does not support dynamic Groups, it ignores the parameter in that
case.</t>
          <t>When an Original Publisher that supports dynamic Groups receives a
NEW_GROUP_REQUEST with a value of 0 or a value larger than the current Group,
it <bcp14>SHOULD</bcp14> end the current Group and begin a new Group as soon as practical.  The
Original Publisher <bcp14>MAY</bcp14> delay the NEW_GROUP_REQUEST subject to
implementation specific concerns, for example, achieving a minimum duration for
each Group. The Original Publisher chooses the next Group ID; there are no
requirements that it be equal to the NEW_GROUP_REQUEST parameter value.</t>
          <t>Relay Handling:</t>
          <t>A relay that receives a NEW_GROUP_REQUEST for a Track without an <tt>Established</tt>
subscription <bcp14>MUST</bcp14> include the NEW_GROUP_REQUEST when subscribing upstream.</t>
          <t>A relay that receives a NEW_GROUP_REQUEST for an <tt>Established</tt> subscription with a
value of 0 or a value larger than the Largest Group <bcp14>MUST</bcp14> send a REQUEST_UPDATE
including the NEW_GROUP_REQUEST to the publisher unless:</t>
          <ol spacing="normal" type="1"><li>
              <t>The Track does not support dynamic Groups</t>
            </li>
            <li>
              <t>There is already an outstanding NEW_GROUP_REQUEST from this Relay with a
greater or equal value</t>
            </li>
          </ol>
          <t>If a relay receives a NEW_GROUP_REQUEST with a non-zero value less than or equal
to the Largest Group, it does not send a NEW_GROUP_REQUEST upstream.</t>
          <t>After sending a NEW_GROUP_REQUEST upstream, the request is considered
outstanding until the Largest Group increases.</t>
        </section>
        <section anchor="track-namespace-prefix-param">
          <name>TRACK_NAMESPACE_PREFIX Parameter</name>
          <t>The TRACK_NAMESPACE_PREFIX parameter (Parameter Type 0x34) uses the Track
Namespace encoding described in <xref target="track-namespace-structure"/>.  It <bcp14>MAY</bcp14> appear in
REQUEST_UPDATE for a SUBSCRIBE_NAMESPACE or SUBSCRIBE_TRACKS request.  It
updates the Track Namespace Prefix for that subscription.  If the new prefix
would share a common prefix with another active subscription of the same type
in the same session, the receiver <bcp14>MUST</bcp14> respond with REQUEST_ERROR with error
code <tt>PREFIX_OVERLAP</tt>.</t>
        </section>
        <section anchor="include-properties-param">
          <name>INCLUDE_PROPERTIES Parameter</name>
          <t>The INCLUDE_PROPERTIES parameter (Parameter Type 0x35) is a uint8. It <bcp14>MAY</bcp14> appear
in SUBSCRIBE, TRACK_STATUS, FETCH or SUBSCRIBE_TRACKS. It specifies whether the
OK message sent in response includes Track Properties or whether the resulting PUBLISH
messages include Track Properties in the case of SUBSCRIBE_TRACKS. If INCLUDE_PROPERTIES
is 0, the Track Properties are still present in the message, but they <bcp14>SHOULD</bcp14> be empty.
The allowed values are 0 (do not send Properties) or 1 (send Properties), and the
default is 1. If an endpoint receives a value outside this range, it <bcp14>MUST</bcp14> close the
session with <tt>PROTOCOL_VIOLATION</tt>.</t>
        </section>
      </section>
    </section>
    <section anchor="moqt-properties">
      <name>MOQT Properties</name>
      <t>The following Properties are defined in MOQT. Each Property
specifies whether it can be used with Tracks, Objects, or both.</t>
      <t>Property types in ranges reserved for application-specific use
(0x78-0x7F, 0x3800-0x3FFF) are not defined by MOQT.
See <xref target="properties"/> for usage guidance.</t>
      <section anchor="subgroup-delivery-timeout-ext">
        <name>SUBGROUP_DELIVERY_TIMEOUT</name>
        <t>SUBGROUP_DELIVERY_TIMEOUT (Property Type 0x06) is a Track and Object Property.
It is a variable-length integer.  Its semantics are defined in <xref target="delivery-timeouts"/>.  As an
Object Property on the first object in a subgroup, it overrides the Track-level
value for that subgroup; it is ignored on any other object in the subgroup.</t>
      </section>
      <section anchor="object-delivery-timeout-ext">
        <name>OBJECT_DELIVERY_TIMEOUT</name>
        <t>OBJECT_DELIVERY_TIMEOUT (Property Type 0x02) is a Track and Object Property.
It is a variable-length integer.  Its semantics are defined in <xref target="delivery-timeouts"/>.  As an
Object Property on the first object in a subgroup, it overrides the Track-level
value for that subgroup; it is ignored on any other object in the subgroup.</t>
      </section>
      <section anchor="max-cache-duration">
        <name>MAX CACHE DURATION</name>
        <t>MAX_CACHE_DURATION (Property Type 0x04) is a Track Property.</t>
        <t>It is an integer expressing
the number of milliseconds an Object can be served from a cache. If present, the
relay <bcp14>MUST NOT</bcp14> start forwarding any individual Object received through this
subscription or fetch after the specified number of milliseconds has elapsed
since the beginning of the Object was received.  This means Objects earlier in a
multi-object stream will expire earlier than Objects later in the stream. Once
Objects have expired from cache, their state becomes unknown (see
<xref target="model-object"/>).</t>
        <t>If MAX_CACHE_DURATION is not sent by the publisher, the Objects
can be cached until implementation constraints cause them to be evicted.</t>
      </section>
      <section anchor="publisher-priority">
        <name>DEFAULT PUBLISHER PRIORITY</name>
        <t>DEFAULT PUBLISHER PRIORITY (Property Type 0x0E) is a Track Property
that specifies the priority of a subscription relative to other subscriptions
in the same session.  The value is from 0 to 255 and lower numbers get higher
priority.  See <xref target="priorities"/>. Priorities above 255 are invalid. Subgroups and
Datagrams for this subscription inherit this priority, unless they specifically
override it.</t>
        <t>If omitted, the Default Publisher Priority is 128.</t>
      </section>
      <section anchor="group-order-pref">
        <name>DEFAULT PUBLISHER GROUP ORDER</name>
        <t>DEFAULT_PUBLISHER_GROUP_ORDER (Property Type 0x22) is a Track Property.</t>
        <t>It is an enum indicating the publisher's preference for prioritizing Objects
from different groups within the
same subscription (see <xref target="priorities"/>). The allowed values are Ascending (0x1) or
Descending (0x2). If an endpoint receives a value outside this range, it <bcp14>MUST</bcp14>
close the session with <tt>PROTOCOL_VIOLATION</tt>.</t>
        <t>If omitted, the publisher's preference is Ascending (0x1).</t>
      </section>
      <section anchor="dynamic-groups">
        <name>DYNAMIC GROUPS</name>
        <t>DYNAMIC_GROUPS (Property Type 0x30) is a Track Property.
The allowed values are 0 or 1. When the value is 1, it indicates
that the subscriber can request the Original Publisher to start a new Group
by including the NEW_GROUP_REQUEST parameter in REQUEST_UPDATE
for this Track. If an endpoint receives a value larger than 1, it <bcp14>MUST</bcp14> close
the session with <tt>PROTOCOL_VIOLATION</tt>.</t>
        <t>If omitted, the value is 0.</t>
      </section>
      <section anchor="immutable-properties">
        <name>Immutable Properties</name>
        <t>Immutable Properties (Property Type 0xB) is a Track or Object Property that
contains a sequence of Key-Value-Pairs (see <xref target="moq-key-value-pair"/>) that are
themselves Track or Object Properties, respectively.</t>
        <artwork><![CDATA[
Immutable Properties {
  Type (0xB),
  Length (vi64),
  Key-Value-Pair (..) ...
}
]]></artwork>
        <t>This Property can be added by the Original Publisher, but <bcp14>MUST NOT</bcp14> be added by
Relays. This Property <bcp14>MUST NOT</bcp14> be modified or removed and the serialization
(e.g. variable-length integer encodings) of the Key-Value-Pairs <bcp14>MUST NOT</bcp14>
change). Like other Properties, Relays <bcp14>MUST</bcp14> cache Immutable Properties if the
Object or Track are cached and <bcp14>MUST</bcp14> forward it. Relays <bcp14>MAY</bcp14> decode and view
the Properties in the Key-Value-Pairs.</t>
        <t>Unless specified by a particular Property specification, Properties
<bcp14>MAY</bcp14> appear either in the mutable property list or inside Immutable Properties.
When looking for the value of a property, processors <bcp14>MUST</bcp14> search both the
mutable properties and the contents of Immutable Properties.</t>
        <t>If a Property allows multiple values, the same Property Type <bcp14>MAY</bcp14> appear in
both the mutable list and inside Immutable Properties, unless prohibited by
the Property specification.</t>
        <t>A Track is considered malformed (see <xref target="malformed-tracks"/>) if any of the
following conditions are detected:</t>
        <ul spacing="normal">
          <li>
            <t>An Object contains an Immutable Properties property that contains another
Immutable Properties key.</t>
          </li>
          <li>
            <t>A Key-Value-Pair cannot be parsed.</t>
          </li>
        </ul>
        <t>The following figure shows an example Object structure with a combination of
mutable and immutable properties and end to end encrypted metadata in the Object
payload.</t>
        <artwork><![CDATA[
                   Object Header                      Object Payload
<------------------------------------------------> <------------------->
+--------+-------+------------+-------+-----------+--------------------+
| Object | Ext 1 | Immutable  | Ext N | [Payload] | Private Properties |
| Fields |       | Properties |       | [Length]  | App Payload        |
+--------+-------+------------+-------+-----------+--------------------+
                  xxxxxxxxxxxx                     xxxxxxxxxxxxxxxxxxxx
                                                   yyyyyyyyyyyyyyyyyyyy
x = e2e Authenticated Data
y = e2e Encrypted Data
EXT 1 and EXT N can be modified or removed by Relays
]]></artwork>
        <t>An Object <bcp14>MUST NOT</bcp14> contain more than one instance of this property.</t>
      </section>
      <section anchor="prior-group-id-gap">
        <name>Prior Group ID Gap</name>
        <t>Prior Group ID Gap only applies to Objects, not Tracks.</t>
        <t>Prior Group ID Gap (Property Type 0x3C) is a variable-length integer
containing the number of Groups prior to the current Group that do not, and will
never, exist. For example, if the Original Publisher is publishing an Object in
Group 7 and knows it will never publish any Objects in Group 8 or Group 9, it
can include Prior Group ID Gap = 2 in any number of Objects in Group 10, as it
sees fit.  A Track is considered malformed (see <xref target="malformed-tracks"/>) if any of
the following conditions are detected:</t>
        <ul spacing="normal">
          <li>
            <t>An Object contains more than one instance of Prior Group ID Gap.</t>
          </li>
          <li>
            <t>A Group contains more than one Object with different values for Prior Group
 ID Gap.</t>
          </li>
          <li>
            <t>An Object has a Prior Group ID Gap larger than the Group ID.</t>
          </li>
          <li>
            <t>An endpoint receives an Object with a Prior Group ID Gap covering an Object
it previously received.</t>
          </li>
          <li>
            <t>An endpoint receives an Object with a Group ID within a previously
communicated gap.</t>
          </li>
        </ul>
        <t>Use of this property is optional, as publishers might not know the prior gap size,
or there may not be a gap. If Prior Group ID Gap is not present, the receiver
cannot infer any information about the existence of prior groups (see
<xref target="group-ids"/>).</t>
        <t>This property can be added by the Original Publisher, but <bcp14>MUST NOT</bcp14> be added by
relays. This property <bcp14>MAY</bcp14> be removed by a relay when the object in question is
served via FETCH, and the gap that the property communicates is already
communicated implicitly in the FETCH response; it <bcp14>MUST NOT</bcp14> be modified or
removed otherwise.</t>
        <t>An Object <bcp14>MUST NOT</bcp14> contain more than one instance of this property.</t>
      </section>
      <section anchor="prior-object-id-gap">
        <name>Prior Object ID Gap</name>
        <t>Prior Object ID Gap only applies to Objects, not Tracks.</t>
        <t>Prior Object ID Gap (Property Type 0x3E) is a variable-length integer
containing the number of Objects prior to the current Object that do not, and
will never, exist. For example, if the Original Publisher is publishing Object
10 in Group 3 and knows it will never publish Objects 8 or 9 in this Group, it
can include Prior Object ID Gap = 2.  A Track is considered malformed (see
<xref target="malformed-tracks"/>) if any of the following conditions are detected:</t>
        <ul spacing="normal">
          <li>
            <t>An Object contains more than one instance of Prior Object ID Gap.</t>
          </li>
          <li>
            <t>An Object has a Prior Object ID Gap larger than the Object ID.</t>
          </li>
          <li>
            <t>An endpoint receives an Object with a Prior Object ID Gap covering an Object
it previously received.</t>
          </li>
          <li>
            <t>An endpoint receives an Object with an Object ID within a previously
communicated gap.</t>
          </li>
        </ul>
        <t>Use of this property is optional, as publishers might not know the prior gap size,
or there might not be a gap. If Prior Object ID Gap is not present, the receiver
cannot infer any information about the existence of prior objects (see
<xref target="model-object"/>).</t>
        <t>This property can be added by the Original Publisher, but <bcp14>MUST NOT</bcp14> be added by
relays. This property <bcp14>MAY</bcp14> be removed by a relay when the object in question is
served via FETCH, and the gap that the property communicates is already
communicated implicitly in the FETCH response; it <bcp14>MUST NOT</bcp14> be modified or
removed otherwise.</t>
        <t>An Object <bcp14>MUST NOT</bcp14> contain more than one instance of this property.</t>
      </section>
    </section>
    <section anchor="data-streams">
      <name>Data Streams and Datagrams</name>
      <t>A publisher sends Objects matching a subscription on Data Streams or Datagrams
and sends Objects matching a FETCH request on one Data Stream.</t>
      <t>Unidirectional stream types are defined in <xref target="stream-types"/>. Data streams
use SUBGROUP_HEADER or FETCH_HEADER types.</t>
      <t>All MOQT datagrams start with a variable-length integer indicating the type of
the datagram.  See <xref target="object-datagram"/>.</t>
      <t>An endpoint that receives an unknown datagram type <bcp14>MUST</bcp14> close the session.</t>
      <t>Every Object has a 'Object Forwarding Preference' and the Original Publisher
<bcp14>MAY</bcp14> use both Subgroups and Datagrams within a Group or Track.</t>
      <section anchor="message-object">
        <name>Objects</name>
        <t>An Object contains a range of contiguous bytes from the
specified track, as well as associated metadata required to deliver,
cache, and forward it.  Objects are sent by publishers.</t>
        <section anchor="object-header">
          <name>Object Header</name>
          <t>A canonical MOQT Object has the following fields:</t>
          <ul spacing="normal">
            <li>
              <t>Track Namespace and Track Name: The track this object belongs to.</t>
            </li>
            <li>
              <t>Group ID: The identifier of the Object's Group (see <xref target="model-group"/>) within
the Track.</t>
            </li>
            <li>
              <t>Object ID: The order of the object within the group.</t>
            </li>
            <li>
              <t>Publisher Priority: An 8 bit integer indicating the publisher's priority for
the Object (<xref target="priorities"/>).</t>
            </li>
            <li>
              <t>Object Forwarding Preference: An enumeration indicating how a publisher sends
an object. The preferences are Subgroup and Datagram.  <tt>Object Forwarding
Preference</tt> is a property of an individual Object and can vary among
Objects in the same Track.  In a subscription, an Object <bcp14>MUST</bcp14> be sent
according to its <tt>Object Forwarding Preference</tt>.</t>
            </li>
            <li>
              <t>Subgroup ID: The identifier of the Object's Subgroup (see <xref target="model-subgroup"/>)
within the Group. This field is omitted if the <tt>Object Forwarding Preference</tt>
is Datagram.</t>
            </li>
            <li>
              <t>Object Status: An enumeration used to indicate whether the Object is a normal Object
or mark the end of a group or track. See <xref target="object-status"/> below.</t>
            </li>
            <li>
              <t>Object Properties : A sequence of Properties associated with the object.
See <xref target="object-properties"/>.</t>
            </li>
            <li>
              <t>Object Payload: An opaque payload intended for an End Subscriber and <bcp14>SHOULD
NOT</bcp14> be processed by a relay. Only present when 'Object Status' is Normal (0x0).</t>
            </li>
          </ul>
        </section>
        <section anchor="object-status">
          <name>Object Status</name>
          <t>The Object Status is a field that is only present in objects that are delivered
via a SUBSCRIPTION, and is absent in Objects delivered via a FETCH.  It allows
the publisher to explicitly communicate that a specific range of objects does
not exist.</t>
          <t><tt>Status</tt> can have following values:</t>
          <ul spacing="normal">
            <li>
              <t>0x0 := Normal object. This status is implicit for any non-zero length object.
       Zero-length objects explicitly encode the Normal status.</t>
            </li>
            <li>
              <t>0x3 := Indicates End of Group. Indicates that no objects with the specified
       Group ID and the Object ID that is greater than or equal to the one
       specified exist in the group identified by the Group ID.</t>
            </li>
            <li>
              <t>0x4 := Indicates End of Track. Indicates that no objects with the location
       that is equal to or greater than the one specified exist.</t>
            </li>
          </ul>
          <t>All of those <bcp14>SHOULD</bcp14> be cached.</t>
          <t>There is no Object Status value indicating the end of a Subgroup. The end of a
Subgroup is signaled by closing its stream with a FIN
(see <xref target="closing-subgroup-streams"/>).</t>
          <t>Any other value <bcp14>SHOULD</bcp14> be treated as a protocol error and the session <bcp14>SHOULD</bcp14>
be closed with a <tt>PROTOCOL_VIOLATION</tt> (<xref target="session-termination-codes"/>).
An Object <bcp14>MUST</bcp14> have an empty payload unless its Object Status value is
registered as permitting a payload in the Object Status registry
(<xref target="iana-object-status"/>). Of the values defined in this document, only Normal
(0x0) permits a payload.</t>
        </section>
        <section anchor="object-properties">
          <name>Object Properties</name>
          <t>Any Object with status Normal can have properties (<xref target="properties"/>).
If an endpoint receives properties on an Object with status that is
not Normal, it <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          <t>Object Properties are visible to relays and are intended to be relevant
to MOQT Object distribution. Any Object metadata never intended to be accessed
by the transport or Relays <bcp14>SHOULD</bcp14> be serialized as part of the Object payload
and not as an Object Property.</t>
          <t>Object Properties set by the Original Publisher that are intended to be visible
to relays, but not modified by them, <bcp14>SHOULD</bcp14> be placed in Immutable Properties
(<xref target="immutable-properties"/>), which enables end-to-end authentication schemes.</t>
          <t>Object Properties are serialized as a length in bytes followed by
Key-Value-Pairs (see <xref target="moq-key-value-pair"/>).</t>
          <artwork><![CDATA[
Object Properties {
  Properties Length (vi64),
  Properties (..),
}
]]></artwork>
          <t>Object Property types are registered in the IANA table
'MOQ Properties'. See <xref target="iana"/>.</t>
        </section>
      </section>
      <section anchor="datagrams">
        <name>Datagrams</name>
        <t>A single object can be conveyed in a datagram.  The Track Alias field
(<xref target="track-alias"/>) indicates the track this Datagram belongs to.  If an endpoint
receives a datagram with an unknown Track Alias, it <bcp14>MAY</bcp14> drop the datagram or
choose to buffer it for a brief period to handle reordering with the control
message that establishes the Track Alias.</t>
        <t>An Object received in an <tt>OBJECT_DATAGRAM</tt> message has an <tt>Object Forwarding
Preference</tt> = <tt>Datagram</tt>.</t>
        <t>To send an Object with <tt>Object Forwarding Preference</tt> = <tt>Datagram</tt>, determine
the length of the header and payload and send the Object as datagram.  When the
total size is larger than the maximum datagram size for the session, the Object
will be dropped without any explicit notification.</t>
        <t>Each session along the path between the Original Publisher and End Subscriber
might have different maximum datagram sizes. Additionally, Object Properties
(<xref target="object-properties"/>) can be added to Objects as they pass
through the MOQT network, increasing the size of the Object and the chances it
will exceed the maximum datagram size of a downstream session and be dropped.</t>
        <section anchor="object-datagram">
          <name>Object Datagram</name>
          <t>An <tt>OBJECT_DATAGRAM</tt> carries a single object in a datagram.</t>
          <figure anchor="object-datagram-format">
            <name>MOQT OBJECT_DATAGRAM</name>
            <artwork><![CDATA[
OBJECT_DATAGRAM {
  Type Flags (vi64),
  Track Alias (vi64),
  Group ID (vi64),
  [Object ID (vi64),]
  [Publisher Priority (8),]
  [Properties (..),]
  [Object Status (vi64),]
  [Object Payload (..),]
}
]]></artwork>
          </figure>
          <t>The Type Flags field in the OBJECT_DATAGRAM is a variable-length integer that
encodes a set of flags. All values defined in this specification fit in a
single-byte encoding (values less than 128). If a received value has bit 4 set,
or has a bit set whose meaning is not specified, the endpoint <bcp14>MUST</bcp14> close the
session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
          <t>The four low-order bits and bit 5 of the Type Flags field determine which fields
are present in the datagram:</t>
          <ul spacing="normal">
            <li>
              <t>The <strong>PROPERTIES</strong> bit (0x01) indicates when the Properties field is
present. When set to 1, the Object Properties structure defined in
<xref target="object-properties"/> is present. When set to 0, the field is absent.
If an endpoint receives a datagram with the PROPERTIES bit set and an
Properties Length of 0, it <bcp14>MUST</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>.</t>
            </li>
            <li>
              <t>The <strong>END_OF_GROUP</strong> bit (0x02) indicates End of Group. When set to 1, this
indicates that no Object with the same Group ID and an Object ID greater than
the Object ID in this datagram exists.</t>
            </li>
            <li>
              <t>The <strong>ZERO_OBJECT_ID</strong> bit (0x04) indicates when the Object ID field is
present.  When set to 1, the Object ID field is omitted and the Object ID
is 0. When set to 0, the Object ID field is present.</t>
            </li>
            <li>
              <t>The <strong>DEFAULT_PRIORITY</strong> bit (0x08) indicates when the Priority field is
present. When set to 1, the Priority field is omitted and this Object inherits
the Publisher Priority specified in the control message that established the
subscription. When set to 0, the Priority field is present.</t>
            </li>
            <li>
              <t>The <strong>STATUS</strong> bit (0x20) indicates whether the datagram contains an Object
Status or Object Payload. When set to 1, the Object Status field is present
and there is no Object Payload. When set to 0, the Object Payload is present
and the Object Status field is omitted. There is no explicit length field for
the Object Payload; the entirety of the transport datagram following the
Object header contains the payload.</t>
            </li>
          </ul>
          <t>The following Type Flags values are invalid. If an endpoint receives a datagram
with any of these values, it <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>:</t>
          <ul spacing="normal">
            <li>
              <t>Values with both the STATUS bit (0x20) and END_OF_GROUP bit (0x02) set.</t>
            </li>
            <li>
              <t>Values with bit 4 (0x10) set. This bit is reserved and <bcp14>MUST</bcp14> be zero.</t>
            </li>
            <li>
              <t>Values with a bit set whose meaning is not specified.</t>
            </li>
          </ul>
          <t>If an Object Datagram includes both the STATUS bit and PROPERTIES bit, and the
Object Status is not Normal (0x0), the endpoint <bcp14>MUST</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>, because only Normal Objects can have Properties.</t>
        </section>
      </section>
      <section anchor="subgroup-streams">
        <name>Subgroup Streams</name>
        <t>When Objects are sent on streams, the stream begins with a Subgroup or Fetch
Header and is followed by one or more sets of serialized Object fields.
If a stream ends gracefully (i.e., the stream terminates with a FIN) in the
middle of a serialized Object, the session <bcp14>SHOULD</bcp14> be closed with a
<tt>PROTOCOL_VIOLATION</tt>.</t>
        <t>A publisher <bcp14>SHOULD NOT</bcp14> open more than one stream at a time with the same Subgroup
Header field values.</t>
        <section anchor="subgroup-header">
          <name>Subgroup Header</name>
          <t>All Objects on a Subgroup stream belong to the track identified by <tt>Track Alias</tt>
(see <xref target="track-alias"/>) and the Subgroup indicated by 'Group ID' and <tt>Subgroup
ID</tt> indicated by the SUBGROUP_HEADER.</t>
          <t>If an endpoint receives a subgroup with an unknown Track Alias, it <bcp14>MAY</bcp14> abandon
the stream, or choose to buffer it for a brief period to handle reordering with
the control message that establishes the Track Alias.  The endpoint <bcp14>MAY</bcp14> withhold
stream flow control beyond the SUBGROUP_HEADER until the Track Alias has been
established.  To prevent deadlocks, endpoints <bcp14>MUST</bcp14> allocate connection flow
control to the control streams before allocating it to any data streams. Otherwise,
a receiver might wait for a control message containing a Track Alias to release
flow control, while the sender waits for flow control to send the message.</t>
          <figure anchor="object-header-format">
            <name>MOQT SUBGROUP_HEADER</name>
            <artwork><![CDATA[
SUBGROUP_HEADER {
  Type Flags (vi64),
  Track Alias (vi64),
  Group ID (vi64),
  [Subgroup ID (vi64),]
  [Publisher Priority (8),]
}
]]></artwork>
          </figure>
          <t>All Objects received on a stream opened with <tt>SUBGROUP_HEADER</tt> have an
<tt>Object Forwarding Preference</tt> = <tt>Subgroup</tt>.</t>
          <t>The Type Flags field in the SUBGROUP_HEADER is a variable-length integer that
encodes a set of flags. All values defined in this specification fit in a
single-byte encoding (values less than 128).</t>
          <t>Bit 4 is always set to 1. The four low-order bits and bits 5-6 determine which
fields are present in the header:</t>
          <ul spacing="normal">
            <li>
              <t>The <strong>PROPERTIES</strong> bit (0x01) indicates when the Properties field is present
in all Objects in this Subgroup. When set to 1, the Object Properties structure
defined in <xref target="object-properties"/> is present in all Objects; Objects with no
properties set Properties Length to 0. When set to 0, the field is never present.</t>
            </li>
            <li>
              <t>The <strong>SUBGROUP_ID_MODE</strong> field (bits 1-2, mask 0x06) is a two-bit field that
determines the encoding of the Subgroup ID. To extract this value, perform a
bitwise AND with mask 0x06 and right-shift by 1 bit:  </t>
              <ul spacing="normal">
                <li>
                  <t>0b00: The Subgroup ID field is absent and the Subgroup ID is 0.</t>
                </li>
                <li>
                  <t>0b01: The Subgroup ID field is absent and the Subgroup ID is the Object ID
of the first Object transmitted in this Subgroup.</t>
                </li>
                <li>
                  <t>0b10: The Subgroup ID field is present in the header.</t>
                </li>
                <li>
                  <t>0b11: Reserved for future use.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>The <strong>END_OF_GROUP</strong> bit (0x08) indicates that this subgroup contains the
largest Object in the Group. When set to 1, the subscriber can infer the final
Object in the Group when the data stream is terminated by a FIN. In this case,
Objects that have the same Group ID and an Object ID larger than the last
Object received on the stream do not exist. This does not apply when the data
stream is reset.</t>
            </li>
            <li>
              <t>The <strong>DEFAULT_PRIORITY</strong> bit (0x20) indicates when the Priority field is
present. When set to 1, the Priority field is omitted and this Subgroup
inherits the Publisher Priority specified in the control message that
established the subscription. When set to 0, the Priority field is present in
the Subgroup header.</t>
            </li>
            <li>
              <t>The <strong>FIRST_OBJECT</strong> bit (0x40) indicates that the first object in this
subgroup stream is the first object published in the subgroup by the original publisher.</t>
            </li>
          </ul>
          <t>The following Type Flags values are invalid. If an endpoint receives a stream
header with any of these values, it <bcp14>MUST</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>:</t>
          <ul spacing="normal">
            <li>
              <t>Values with SUBGROUP_ID_MODE set to 0b11. This mode
is reserved for future use.</t>
            </li>
            <li>
              <t>Values where bit 4 is not set. Bit 4 <bcp14>MUST</bcp14> be 1 for SUBGROUP_HEADER.</t>
            </li>
            <li>
              <t>Values of 128 or greater (i.e., any value that requires more than a one-byte
variable-length integer encoding).</t>
            </li>
          </ul>
          <t>To send an Object with <tt>Object Forwarding Preference</tt> = <tt>Subgroup</tt>, find the open
stream that is associated with the subscription, <tt>Group ID</tt> and <tt>Subgroup ID</tt>,
or open a new one and send the <tt>SUBGROUP_HEADER</tt>. Then serialize the
following fields.</t>
          <t>The Object Status field is only sent if the Object Payload Length is zero.</t>
          <t>The Object ID Delta + 1 is added to the previous Object ID in the Subgroup
stream if there was one.  The Object ID is the Object ID Delta if it's the first
Object in the Subgroup stream. If the resulting Object ID would be greater
than 2^64 - 1, the endpoint <bcp14>MUST</bcp14> close the session with a
<tt>PROTOCOL_VIOLATION</tt>. For example, a Subgroup of sequential Object IDs
starting at 0 will have 0 for all Object ID Delta values. A consumer cannot
infer information about the existence of Objects between the current and
previous Object ID in the Subgroup (e.g. when Object ID Delta is non-zero)
unless there is a Prior Object ID Gap property (see
<xref target="prior-object-id-gap"/>).</t>
          <figure anchor="object-subgroup-format">
            <name>MOQT Subgroup Object Fields</name>
            <artwork><![CDATA[
{
  Object ID Delta (vi64),
  [Properties (..),]
  Object Payload Length (vi64),
  [Object Status (vi64),]
  [Object Payload (..),]
}
]]></artwork>
          </figure>
        </section>
        <section anchor="closing-subgroup-streams">
          <name>Closing Subgroup Streams</name>
          <t>Subscribers will often need to know if they have received all objects in a
Subgroup, particularly if they serve as a relay or cache. QUIC and Webtransport
streams provide signals that can be used for this purpose. Closing Subgroups
promptly frees system resources and often unlocks flow control credit to open
more streams.</t>
          <t>If a sender has delivered all objects in a Subgroup to the QUIC stream, except
any Objects with Locations smaller than the subscription's Start Location, it
<bcp14>MUST</bcp14> close the stream with a FIN.</t>
          <t>If a sender closes the stream before delivering all such objects to the QUIC
stream, it <bcp14>MUST</bcp14> reset the stream. This includes, but is
not limited to:</t>
          <ul spacing="normal">
            <li>
              <t>Either of the delivery timeouts defined in <xref target="delivery-timeouts"/></t>
            </li>
            <li>
              <t>Early termination of subscription due to request cancellation</t>
            </li>
            <li>
              <t>A publisher's decision to end the subscription early</t>
            </li>
            <li>
              <t>A REQUEST_UPDATE moving the subscription's End Group to a smaller Group or
the Start Location to a larger Location</t>
            </li>
            <li>
              <t>Omitting a Subgroup Object due to the subscriber's Forward State</t>
            </li>
          </ul>
          <t>When RESET_STREAM_AT is used, the
reliable_size <bcp14>SHOULD</bcp14> include the stream header so the receiver can identify the
corresponding subscription and accurately account for reset data streams when
handling PUBLISH_DONE (see <xref target="message-publish-done"/>).  Publishers that reset
data streams without using RESET_STREAM_AT with an appropriate reliable_size can
cause subscribers to hold on to subscription state until a timeout expires.</t>
          <t>A sender might send all objects in a Subgroup and the FIN on a QUIC stream,
and then reset the stream. In this case, the receiving application would receive
the FIN if and only if all objects were received. If the application receives
all data on the stream and the FIN, it can ignore any subsequent reset.</t>
          <t>If a sender will not deliver any objects from a Subgroup, it <bcp14>MAY</bcp14> send
a SUBGROUP_HEADER on a new stream, with no objects, and then send RESET_STREAM_AT
with a reliable_size equal to the length of the stream header. This explicitly
tells the receiver there is an unsent Subgroup.</t>
          <t>A relay <bcp14>MUST NOT</bcp14> forward an Object on an existing Subgroup stream unless it is
the next Object in that Subgroup.  A relay determines that an Object is the next
Object in the Subgroup if at least one of the following is true:</t>
          <ul spacing="normal">
            <li>
              <t>The Object ID is one greater than the previous Object sent on this Subgroup
stream.</t>
            </li>
            <li>
              <t>The Object was received on the same upstream Subgroup stream as the
previously sent Object on the downstream Subgroup stream, with no other
Objects in between, unless the intervening Objects did not pass the
subscriber's filters.</t>
            </li>
            <li>
              <t>It determined all Object IDs between the current and previous Object IDs
on the Subgroup stream belong to different Subgroups or do not exist,
or do not pass the subscriber's filters.</t>
            </li>
          </ul>
          <t>If the relay does not know if an Object is the next Object, it <bcp14>MUST</bcp14> reset the
Subgroup stream and open a new one to forward it.</t>
          <t>Since SUBSCRIBEs always end on a group boundary, an ending subscription can
always cleanly close all its subgroups. A sender that terminates a stream
early for any other reason (e.g., to handoff to a different sender) <bcp14>MUST</bcp14>
reset the stream. Senders <bcp14>SHOULD</bcp14> terminate a stream on
Group boundaries to avoid doing so.</t>
          <t>An MOQT implementation that processes a stream FIN is assured it has received
all objects in a subgroup from the start of the subscription. If a relay, it
can forward stream FINs to its own subscribers once those objects have been
sent. A relay <bcp14>MAY</bcp14> treat receipt of EndOfGroup or EndOfTrack objects as a signal
to close corresponding streams even if the FIN has not arrived, as further
objects on the stream would be a protocol violation.</t>
          <t>Similarly, an EndOfGroup message indicates the maximum Object ID in the
Group, so if all Objects in the Group have been received, a FIN can be sent on
any stream where the entire subgroup has been sent. This might be complex to
implement.</t>
          <t>Processing a reset means that there might be other
objects in the Subgroup beyond the last one received. A relay might immediately
reset the corresponding downstream stream, or it might attempt to recover the
missing Objects in an effort to send all the Objects in the subgroups and the FIN.
It also might send RESET_STREAM_AT with reliable_size set to the last Object it
has, so as to reliably deliver the Objects it has while signaling that other
Objects might exist.</t>
          <t>A subscriber <bcp14>MAY</bcp14> send a QUIC STOP_SENDING frame for a subgroup stream if the Group
or Subgroup is no longer of interest to it. The publisher <bcp14>SHOULD</bcp14> respond with
a reset. If RESET_STREAM_AT is sent, note that the receiver
has indicated no interest in the objects, so setting a reliable_size beyond the
stream header is of questionable utility.</t>
          <t>Resets and STOP_SENDING on SUBSCRIBE data streams have no impact on other
Subgroups in the Group or the subscription, although applications might cancel all
Subgroups in a Group at once.</t>
          <t>A publisher that receives a STOP_SENDING on a Subgroup stream <bcp14>SHOULD NOT</bcp14> attempt
to open a new stream to deliver additional Objects in that Subgroup.  However,
if the publisher subsequently receives a REQUEST_UPDATE that changes the Forward
State from 0 to 1, it <bcp14>MAY</bcp14> open a new stream to deliver Objects in that Subgroup,
as the update indicates the subscriber has renewed interest in forwarded Objects.</t>
          <t>The application <bcp14>SHOULD</bcp14> use a relevant error code when resetting a stream,
as defined in <xref target="stream-reset-codes"/>.</t>
        </section>
      </section>
      <section anchor="fetch-streams">
        <name>Fetch Streams</name>
        <section anchor="fetch-header">
          <name>Fetch Header</name>
          <t>When a stream begins with <tt>FETCH_HEADER</tt>, all objects on the stream belong to the
track requested in the message identified by <tt>Request ID</tt>.</t>
          <figure anchor="fetch-header-format">
            <name>MOQT FETCH_HEADER</name>
            <artwork><![CDATA[
FETCH_HEADER {
  Type (vi64) = 0x5,
  Request ID (vi64),
}
]]></artwork>
          </figure>
          <t>Each Object sent on a FETCH stream after the FETCH_HEADER has the following
format:</t>
          <figure anchor="object-fetch-format">
            <name>MOQT Fetch Object Fields</name>
            <artwork><![CDATA[
{
  Serialization Flags (vi64),
  [Group ID Delta (vi64),]
  [Subgroup ID (vi64),]
  [Object ID Delta (vi64),]
  [Publisher Priority (8),]
  [Properties (..),]
  Object Payload Length (vi64),
  [Object Payload (..),]
}
]]></artwork>
          </figure>
          <t>The Serialization Flags field defines the serialization of the Object.  It is
a variable-length integer.  When less than 128, the bits represent flags described
below.  The following additional values are defined:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Value</th>
                <th align="left">Meaning</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0x8C</td>
                <td align="left">End of Non-Existent Range</td>
              </tr>
              <tr>
                <td align="left">0x10C</td>
                <td align="left">End of Unknown Range</td>
              </tr>
              <tr>
                <td align="left">0x20C</td>
                <td align="left">End of Timed-Out Range</td>
              </tr>
            </tbody>
          </table>
          <t>Any other value is a <tt>PROTOCOL_VIOLATION</tt>.</t>
          <section anchor="flags">
            <name>Flags</name>
            <t>The two least significant bits (LSBs) of the Serialization Flags form a two-bit
field that defines the encoding of the Subgroup.  To extract this value, the
Subscriber performs a bitwise AND operation with the mask 0x03.</t>
            <table>
              <thead>
                <tr>
                  <th align="left">Bitmask Result (Serialization Flags &amp; 0x03)</th>
                  <th align="left">Meaning</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">0x00</td>
                  <td align="left">Subgroup ID is zero</td>
                </tr>
                <tr>
                  <td align="left">0x01</td>
                  <td align="left">Subgroup ID is the prior Object's Subgroup ID</td>
                </tr>
                <tr>
                  <td align="left">0x02</td>
                  <td align="left">Subgroup ID is the prior Object's Subgroup ID plus one</td>
                </tr>
                <tr>
                  <td align="left">0x03</td>
                  <td align="left">The Subgroup ID field is present</td>
                </tr>
              </tbody>
            </table>
            <t>The following table defines additional flags within the Serialization Flags
field. Each flag is an independent boolean value, where a set bit (1) indicates
the corresponding condition is true.</t>
            <table>
              <thead>
                <tr>
                  <th align="left">Bitmask</th>
                  <th align="left">Condition if set</th>
                  <th align="left">Condition if not set (0)</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">0x04</td>
                  <td align="left">Object ID Delta is present</td>
                  <td align="left">Object ID is the prior Object's ID plus one</td>
                </tr>
                <tr>
                  <td align="left">0x08</td>
                  <td align="left">Group ID Delta is present</td>
                  <td align="left">Group ID is the prior Object's Group ID</td>
                </tr>
                <tr>
                  <td align="left">0x10</td>
                  <td align="left">Priority field is present</td>
                  <td align="left">Priority is the prior Object's Priority</td>
                </tr>
                <tr>
                  <td align="left">0x20</td>
                  <td align="left">Properties field is present</td>
                  <td align="left">Properties field is not present</td>
                </tr>
                <tr>
                  <td align="left">0x40</td>
                  <td align="left">Datagram: ignore the two least significant bits</td>
                  <td align="left">Decode the Subgroup ID as indicated by the two least significant bits</td>
                </tr>
              </tbody>
            </table>
            <t>The first Object <bcp14>MUST</bcp14> include a Group ID Delta and Object ID Delta, and
these values are the absolute Group ID and Object ID. If the first Object in
the FETCH response uses a flag that references fields in the prior Object,
the Subscriber <bcp14>MUST</bcp14> close the session with a <tt>PROTOCOL_VIOLATION</tt>.</t>
            <t>If the Group ID Delta field is present on an Object other than the first, the
Group ID is computed from the Group ID Delta and the prior Object's Group ID.
If the Group Order is Ascending, the Group ID is the prior Object's Group ID
plus the Group ID Delta + 1.  If the Group Order is Descending, the Group ID is
the prior Object's Group ID minus the (Group ID Delta + 1). If the computed
Group ID would be less than 0 or greater than 2^64-1, the Subscriber <bcp14>MUST</bcp14>
close the Session with error 'PROTOCOL_VIOLATION'.</t>
            <t>When the Group ID Delta field is present, the Object ID is the value of Object ID Delta if
present. When the Group ID Delta field is not present, the Object ID is the prior Object's ID
plus the Object ID Delta if present. If Object ID Delta is not present, the Object ID is the
prior Object's ID plus one, regardless of which group it belongs to. If the computed Object ID
would be greater than 2^64-1, the Subscriber <bcp14>MUST</bcp14> close the Session with error
'PROTOCOL_VIOLATION'.</t>
            <t>The Object Properties structure is defined in <xref target="object-properties"/>.</t>
            <t>When encoding an Object with a Forwarding Preference of "Datagram" (see
<xref target="object-properties"/>), the object has no Subgroup ID. The publisher <bcp14>MUST</bcp14> SET bit 0x40 to '1'.
When 0x40 is set, it <bcp14>SHOULD</bcp14> set the two least significant bits to zero and the subscriber
<bcp14>MUST</bcp14> ignore the bits.</t>
          </section>
          <section anchor="end-of-range">
            <name>End of Range</name>
            <t>When Serialization Flags indicates an End of Range (e.g. values 0x8C, 0x10C, or
0x20C), the Group ID and Object ID fields are present.  Subgroup ID, Priority and
Properties are not present. All Objects with Locations between the last
serialized Object, if any, and this Location, inclusive, either do not exist
(when Serialization Flags is 0x8C), are unknown (0x10C), or timed out (0x20C).  A
publisher <bcp14>SHOULD NOT</bcp14> use <tt>End of Non-Existent Range</tt> in a FETCH response except to
split a range of Objects that will not be serialized into those that are known
not to exist and those with unknown or timed out status.</t>
            <t>When an Object follows an End of Range indicator and uses flags that reference
the "prior Object", the prior Object fields are determined as follows:</t>
            <ul spacing="normal">
              <li>
                <t>Prior Group ID and prior Object ID: The values from the End of Range indicator.</t>
              </li>
              <li>
                <t>Prior Subgroup ID: The Subgroup ID from the last actual Object before the
End of Range indicator. If there was no prior Object, using a flag that
references the prior Subgroup ID is a <tt>PROTOCOL_VIOLATION</tt>.</t>
              </li>
              <li>
                <t>Prior Priority: The Priority from the last actual Object before the End of
Range indicator. If there was no prior Object, using a flag that references
the prior Priority is a <tt>PROTOCOL_VIOLATION</tt>.</t>
              </li>
            </ul>
          </section>
        </section>
      </section>
      <section anchor="padding">
        <name>Padding</name>
        <t>An endpoint <bcp14>MAY</bcp14> send padding on unidirectional streams or datagrams.  Padding
does not carry Objects or any other application data.  An endpoint can use
padding to probe for additional bandwidth while minimizing the impact on the
delivery of application data.</t>
        <t>To avoid interfering with the delivery of Objects, senders <bcp14>SHOULD</bcp14> send padding
streams at a lower priority than any control stream or Object data.</t>
        <section anchor="padding-streams">
          <name>Padding Streams</name>
          <t>An endpoint <bcp14>MAY</bcp14> open a unidirectional stream with a stream type of 0x132B3E28 to send
padding data. The stream begins with the stream type, followed by zero or more
bytes that <bcp14>MUST</bcp14> all be set to zero.</t>
          <figure anchor="padding-format">
            <name>MOQT Padding Stream</name>
            <artwork><![CDATA[
PADDING STREAM {
  Type (vi64) = 0x132B3E28,
  Padding Data (..) = 0x00..
}
]]></artwork>
          </figure>
          <t>The receiver <bcp14>MUST</bcp14> discard all data received on a padding stream to prevent
exhausting flow control.</t>
          <t>Either the sender or the receiver <bcp14>MAY</bcp14> cancel a padding stream at any time
without affecting any MOQT application state.</t>
        </section>
        <section anchor="padding-datagrams">
          <name>Padding Datagrams</name>
          <t>An endpoint <bcp14>MAY</bcp14> send a datagram with a type of 0x132B3E29 to send padding data.
The datagram contains the type followed by zero or more bytes that <bcp14>MUST</bcp14> all be
set to zero.</t>
          <figure anchor="padding-datagram-format">
            <name>MOQT Padding Datagram</name>
            <artwork><![CDATA[
PADDING DATAGRAM {
  Type (vi64) = 0x132B3E29,
  Padding Data (..) = 0x00..
}
]]></artwork>
          </figure>
          <t>The receiver <bcp14>MUST</bcp14> discard all data received in a padding datagram.</t>
        </section>
      </section>
    </section>
    <section anchor="error-handling">
      <name>Error Handling</name>
      <section anchor="malformed-tracks">
        <name>Malformed Tracks</name>
        <t>There are multiple ways a publisher can transmit a Track that does not conform
to MOQT constraints. Such a Track is considered malformed.  Some example
conditions that constitute a malformed track when detected by a receiver
include:</t>
        <ol spacing="normal" type="1"><li>
            <t>An Object with a particular Subgroup ID is received, but its
 Publisher Priority is different from that of the previous Object with the same
 Subgroup ID.</t>
          </li>
          <li>
            <t>An Object is received whose Object ID is larger than the final Object in the
Subgroup.  The final Object in a Subgroup is the last Object received on a
Subgroup stream before a FIN.</t>
          </li>
          <li>
            <t>A Subgroup is received over multiple transport streams terminated by FIN with
different final Objects.</t>
          </li>
          <li>
            <t>An Object is received in a Group whose Object
ID is larger than the final Object in the Group.  The final Object in a Group
is the Object with Status END_OF_GROUP, or the last Object before a FIN in a
Subgroup which has the END_OF_GROUP bit set.  If the end of a Group is
implicitly determined via a gap in a FETCH response, the final Object in the
Group remains unknown.</t>
          </li>
          <li>
            <t>An Object is received whose Group and Object ID are larger than
the final Object in the Track.  The final Object in a Track is the Object
with Status END_OF_TRACK or the last Object sent in a FETCH whose response
indicated End of Track.</t>
          </li>
          <li>
            <t>The same Object is received more than once with different Payload or
other immutable properties.</t>
          </li>
          <li>
            <t>An Object is received with a different Forwarding Preference than previously
observed.</t>
          </li>
        </ol>
        <t>The above list of conditions is not considered exhaustive.</t>
        <t>When a subscriber detects a Malformed Track, it <bcp14>MUST</bcp14> cancel any corresponding
subscription or fetches for that Track from that publisher
(see <xref target="request-cancellation"/>), and <bcp14>SHOULD</bcp14> deliver an error to the application.
If a relay detects a Malformed Track, it <bcp14>MUST</bcp14> immediately terminate downstream
subscriptions with PUBLISH_DONE and reset any fetch streams with
Status Code <tt>MALFORMED_TRACK</tt>. Object(s) triggering Malformed Track status
<bcp14>MUST NOT</bcp14> be cached.</t>
      </section>
      <section anchor="session-termination-codes">
        <name>Session Termination Codes</name>
        <t>When terminating the Session (<xref target="session-termination"/>), the application <bcp14>MAY</bcp14> use
any error message and <bcp14>SHOULD</bcp14> use a relevant code, as defined below:</t>
        <dl>
          <dt>NO_ERROR (0x0):</dt>
          <dd>
            <t>The session is being terminated without an error.</t>
          </dd>
          <dt>INTERNAL_ERROR (0x1):</dt>
          <dd>
            <t>An implementation specific error occurred.</t>
          </dd>
          <dt>UNAUTHORIZED (0x2):</dt>
          <dd>
            <t>The client is not authorized to establish a session.</t>
          </dd>
          <dt>PROTOCOL_VIOLATION (0x3):</dt>
          <dd>
            <t>The remote endpoint performed an action that was disallowed by the
specification.</t>
          </dd>
          <dt>INVALID_REQUEST_ID (0x4):</dt>
          <dd>
            <t>The endpoint received a Request ID with an incorrect least significant
bit for the sender, or a duplicate Request ID. See <xref target="request-id"/>.</t>
          </dd>
          <dt>DUPLICATE_TRACK_ALIAS (0x5):</dt>
          <dd>
            <t>The endpoint attempted to use a Track Alias that was already in use.</t>
          </dd>
          <dt>KEY_VALUE_FORMATTING_ERROR (0x6):</dt>
          <dd>
            <t>The key-value pair has a formatting error.</t>
          </dd>
          <dt>INVALID_PATH (0x8):</dt>
          <dd>
            <t>The PATH parameter was used by a server, on a WebTransport session, or the
server does not support the path.</t>
          </dd>
          <dt>MALFORMED_PATH (0x9):</dt>
          <dd>
            <t>The PATH parameter does not conform to the rules in <xref target="path"/>.</t>
          </dd>
          <dt>GOAWAY_TIMEOUT (0x10):</dt>
          <dd>
            <t>The session was closed because the peer took too long to close the session
in response to a GOAWAY (<xref target="message-goaway"/>) message. See session migration
(<xref target="session-migration"/>).</t>
          </dd>
          <dt>CONTROL_MESSAGE_TIMEOUT (0x11):</dt>
          <dd>
            <t>The session was closed because the peer took too long to respond to a
control message.</t>
          </dd>
          <dt>DATA_STREAM_TIMEOUT (0x12):</dt>
          <dd>
            <t>The session was closed because the peer took too long to send data expected
on an open Data Stream (see <xref target="data-streams"/>). This includes fields of a
stream header or an object header within a data stream. If an endpoint
times out waiting for a new object header on an open subgroup stream, it
<bcp14>MAY</bcp14> send a STOP_SENDING on that stream or terminate the subscription.</t>
          </dd>
          <dt>AUTH_TOKEN_CACHE_OVERFLOW (0x13):</dt>
          <dd>
            <t>The Session limit <xref target="max-auth-token-cache-size"/> of the size of all
registered Authorization tokens has been exceeded.</t>
          </dd>
          <dt>DUPLICATE_AUTH_TOKEN_ALIAS (0x14):</dt>
          <dd>
            <t>Authorization Token attempted to register an Alias that was in use (see
<xref target="auth-token-compression"/>).</t>
          </dd>
          <dt>MALFORMED_AUTH_TOKEN (0x16):</dt>
          <dd>
            <t>Invalid Auth Token serialization during registration (see
<xref target="auth-token-compression"/>).</t>
          </dd>
          <dt>UNKNOWN_AUTH_TOKEN_ALIAS (0x17):</dt>
          <dd>
            <t>No registered token found for the provided Alias (see
<xref target="auth-token-compression"/>).</t>
          </dd>
          <dt>EXPIRED_AUTH_TOKEN (0x18):</dt>
          <dd>
            <t>Authorization token has expired (<xref target="auth-token-compression"/>).</t>
          </dd>
          <dt>INVALID_AUTHORITY (0x19):</dt>
          <dd>
            <t>The specified AUTHORITY does not correspond to this server or cannot be
used in this context.</t>
          </dd>
          <dt>MALFORMED_AUTHORITY (0x1A):</dt>
          <dd>
            <t>The AUTHORITY value is syntactically invalid.</t>
          </dd>
          <dt>TOO_MANY_REQUEST_UPDATES (0x1B):</dt>
          <dd>
            <t>The endpoint received a REQUEST_UPDATE that exceeded the per-stream limit
communicated via the MAX_REQUEST_UPDATES Setup Option
(<xref target="max-request-updates"/>).</t>
          </dd>
        </dl>
      </section>
      <section anchor="request-error-codes">
        <name>Request Error Codes</name>
        <t>The application <bcp14>SHOULD</bcp14> use a relevant error code in REQUEST_ERROR
(<xref target="message-request-error"/>), as defined below and assigned in
<xref target="iana-request-error"/>. Most codepoints have identical meanings for various
request types, but some have request-specific meanings.</t>
        <dl>
          <dt>INTERNAL_ERROR:</dt>
          <dd>
            <t>An implementation specific or generic error occurred.</t>
          </dd>
          <dt>UNAUTHORIZED:</dt>
          <dd>
            <t>The subscriber is not authorized to perform the requested action on the given
track.  This might be retryable if the authorization token is not yet valid.</t>
          </dd>
          <dt>TIMEOUT:</dt>
          <dd>
            <t>The subscription could not be completed before an implementation specific
timeout. For example, a relay could not establish an upstream subscription
within the timeout.</t>
          </dd>
          <dt>NOT_SUPPORTED:</dt>
          <dd>
            <t>The endpoint does not support the type of request.</t>
          </dd>
          <dt>MALFORMED_AUTH_TOKEN:</dt>
          <dd>
            <t>Invalid Auth Token serialization during registration (see
<xref target="auth-token-compression"/>).</t>
          </dd>
          <dt>EXPIRED_AUTH_TOKEN:</dt>
          <dd>
            <t>Authorization token has expired (<xref target="auth-token-compression"/>).</t>
          </dd>
          <dt>GOING_AWAY:</dt>
          <dd>
            <t>The endpoint has received a GOAWAY and <bcp14>MAY</bcp14> reject new requests.</t>
          </dd>
          <dt>EXCESSIVE_LOAD:</dt>
          <dd>
            <t>The responder is overloaded and cannot process the request at this time. The
sender <bcp14>SHOULD</bcp14> use the Retry Interval to indicate when the request can be retried.</t>
          </dd>
          <dt>UNSUPPORTED_EXTENSION:</dt>
          <dd>
            <t>The track contains a Mandatory Track Property
(see <xref target="mandatory-track-properties"/>) that the endpoint does not understand.</t>
          </dd>
          <dt>REDIRECT:</dt>
          <dd>
            <t>The request cannot be fulfilled by this endpoint, but could succeed at the
location specified in the Redirect structure. The requester <bcp14>SHOULD</bcp14> establish a
new session to the provided URI (if present) and retry the request using the
Redirect target. A Retry Interval of 0 indicates the original request <bcp14>SHOULD NOT</bcp14> be retried as sent;
it does not prevent the requester from following a Redirect to a different
URI or Redirect target. This error code can appear in
response to SUBSCRIBE, FETCH, TRACK_STATUS, PUBLISH, PUBLISH_NAMESPACE,
SUBSCRIBE_NAMESPACE, and SUBSCRIBE_TRACKS. Relays are not required to follow
redirects from upstream
and <bcp14>MAY</bcp14> forward a REDIRECT response to matching downstream requests. A relay
<bcp14>MAY</bcp14> cache a REDIRECT response for up to Retry Interval
milliseconds and use it to respond to subsequent matching requests without
forwarding them upstream.</t>
          </dd>
        </dl>
        <t>Below are errors for use by the publisher. They can appear in response to
SUBSCRIBE, FETCH, TRACK_STATUS, SUBSCRIBE_NAMESPACE, and SUBSCRIBE_TRACKS,
unless otherwise noted.</t>
        <dl>
          <dt>DOES_NOT_EXIST:</dt>
          <dd>
            <t>The track or namespace is not available at the publisher.</t>
          </dd>
          <dt>INVALID_RANGE:</dt>
          <dd>
            <t>In response to SUBSCRIBE or FETCH, specified Filter or range of Locations
cannot be satisfied.</t>
          </dd>
          <dt>INVALID_FILTER:</dt>
          <dd>
            <t>A filter parameter is invalid.</t>
          </dd>
          <dt>MALFORMED_TRACK:</dt>
          <dd>
            <t>In response to a FETCH, a relay publisher detected the track was
malformed (see <xref target="malformed-tracks"/>).</t>
          </dd>
        </dl>
        <t>The following are errors for use by the subscriber. They can appear in response
to PUBLISH or PUBLISH_NAMESPACE, unless otherwise noted.</t>
        <dl>
          <dt>UNINTERESTED:</dt>
          <dd>
            <t>The subscriber is not interested in the track or namespace.</t>
          </dd>
        </dl>
        <t>Errors below can only be used in response to one message type.</t>
        <dl>
          <dt>PREFIX_OVERLAP:</dt>
          <dd>
            <t>In response to SUBSCRIBE_NAMESPACE or SUBSCRIBE_TRACKS, the namespace prefix
shares a common prefix with another subscription of the same type in the same session.
SUBSCRIBE_NAMESPACE and SUBSCRIBE_TRACKS have independent overlap spaces, so a
SUBSCRIBE_NAMESPACE and a SUBSCRIBE_TRACKS may share the same prefix.</t>
          </dd>
          <dt>NAMESPACE_TOO_LARGE:</dt>
          <dd>
            <t>In response to SUBSCRIBE_NAMESPACE or SUBSCRIBE_TRACKS, the namespace prefix
matches more publishers than the relay is willing to enumerate.</t>
          </dd>
          <dt>CONFLICTING_FILTERS:</dt>
          <dd>
            <t>In response to SUBSCRIBE_TRACKS, the filter parameters conflict among
too many subscribers to aggregate the subscription upstream or otherwise
efficiently service it.</t>
          </dd>
        </dl>
      </section>
      <section anchor="publish-done-codes">
        <name>Publish Done Codes</name>
        <t>The application <bcp14>SHOULD</bcp14> use a relevant status code in PUBLISH_DONE
(<xref target="message-publish-done"/>), as defined below:</t>
        <dl>
          <dt>INTERNAL_ERROR (0x0):</dt>
          <dd>
            <t>An implementation specific or generic error occurred.</t>
          </dd>
          <dt>UNAUTHORIZED (0x1):</dt>
          <dd>
            <t>The subscriber is no longer authorized to subscribe to the given track.</t>
          </dd>
          <dt>TRACK_ENDED (0x2):</dt>
          <dd>
            <t>The track is no longer being published.</t>
          </dd>
          <dt>GOING_AWAY (0x4):</dt>
          <dd>
            <t>The subscriber or publisher issued a GOAWAY message.</t>
          </dd>
          <dt>TOO_FAR_BEHIND (0x5):</dt>
          <dd>
            <t>The publisher's queue of objects to be sent to the given subscriber exceeds
its implementation defined limit.</t>
          </dd>
          <dt>EXPIRED (0x6):</dt>
          <dd>
            <t>The publisher reached the timeout specified in SUBSCRIBE_OK.</t>
          </dd>
          <dt>MALFORMED_TRACK (0x12):</dt>
          <dd>
            <t>A relay publisher detected that the track was malformed (see
<xref target="malformed-tracks"/>).</t>
          </dd>
          <dt>UPDATE_FAILED (0x8):</dt>
          <dd>
            <t>REQUEST_UPDATE failed on this subscription (see
<xref target="message-request-update"/>).</t>
          </dd>
          <dt>EXCESSIVE_LOAD (0x9):</dt>
          <dd>
            <t>The publisher is overloaded and is terminating the subscription.</t>
          </dd>
        </dl>
      </section>
      <section anchor="stream-reset-codes">
        <name>Stream Reset Error Codes</name>
        <t>The application <bcp14>SHOULD</bcp14> use a relevant error code when resetting or sending
STOP_SENDING on any stream.</t>
        <dl>
          <dt>INTERNAL_ERROR (0x0):</dt>
          <dd>
            <t>An implementation specific error.</t>
          </dd>
          <dt>CANCELLED (0x1):</dt>
          <dd>
            <t>The stream was cancelled by either endpoint. For Subscriptions,
PUBLISH_DONE (<xref target="message-publish-done"/>) may have a more detailed status code.</t>
          </dd>
          <dt>DELIVERY_TIMEOUT (0x2):</dt>
          <dd>
            <t>A delivery timeout (<xref target="delivery-timeouts"/>) was exceeded for this stream.</t>
          </dd>
          <dt>SESSION_CLOSED (0x3):</dt>
          <dd>
            <t>The session is being closed.</t>
          </dd>
          <dt>GOING_AWAY (0x4):</dt>
          <dd>
            <t>The endpoint is rejecting this request because it has sent or received a GOAWAY.</t>
          </dd>
          <dt>TOO_FAR_BEHIND (0x5):</dt>
          <dd>
            <t>The corresponding subscription has exceeded the publisher's resource limits and
is being terminated (see <xref target="delivery-timeouts"/>).</t>
          </dd>
          <dt>UNKNOWN_OBJECT_STATUS (0x6):</dt>
          <dd>
            <t>In response to a FETCH, the publisher is unable to determine the status
of the next Object in the requested range.</t>
          </dd>
          <dt>EXPIRED_AUTH_TOKEN (0x7):</dt>
          <dd>
            <t>The authorization token for the request has expired.</t>
          </dd>
          <dt>EXCESSIVE_LOAD (0x9):</dt>
          <dd>
            <t>The endpoint is overloaded and is resetting this stream.</t>
          </dd>
          <dt>MALFORMED_TRACK (0x12):</dt>
          <dd>
            <t>A relay publisher detected that the track was malformed (see
<xref target="malformed-tracks"/>).</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="grease">
      <name>Grease</name>
      <t>To ensure that implementations correctly handle unknown values and do not
fail when encountering protocol extensions they do not understand, this document
reserves a range of values for the purpose of greasing; see <xref section="3.3" sectionFormat="of" target="RFC9170"/>.</t>
      <t>Grease values follow the pattern <tt>0x7f * N + 0x9D</tt> for non-negative
integer values of N (that is, 0x9D, 0x11C, ..., 0x3fffffffffffffde).</t>
      <t>The following registries include GREASE reservations:</t>
      <ul spacing="normal">
        <li>
          <t>Setup Options (<xref target="iana-setup-options"/>)</t>
        </li>
        <li>
          <t>Properties (<xref target="iana-properties"/>)</t>
        </li>
        <li>
          <t>Session Termination Error Codes (<xref target="iana-session-termination"/>)</t>
        </li>
        <li>
          <t>REQUEST_ERROR Codes (<xref target="iana-request-error"/>)</t>
        </li>
        <li>
          <t>PUBLISH_DONE Codes (<xref target="iana-publish-done"/>)</t>
        </li>
        <li>
          <t>Stream Reset Error Codes (<xref target="iana-reset-stream"/>)</t>
        </li>
        <li>
          <t>MOQT Auth Token Type</t>
        </li>
      </ul>
      <t>Because new values in these registries can be defined without negotiation,
implementations <bcp14>MUST</bcp14> handle unknown values gracefully. Endpoints <bcp14>MUST NOT</bcp14>
close the session solely because they received an unknown value. The
following rules apply:</t>
      <t>Setup Options with reserved identifiers have no semantics and can carry
arbitrary values. Endpoints <bcp14>MUST</bcp14> ignore unknown Setup Options as specified
in <xref target="message-setup"/>.</t>
      <t>Unknown Properties <bcp14>MUST</bcp14> be handled as specified in <xref target="properties"/>.</t>
      <t>Receipt of an unknown error code in any error context (Session Termination,
REQUEST_ERROR, PUBLISH_DONE, or Data Stream Reset) <bcp14>MUST</bcp14> be treated as
equivalent to <tt>INTERNAL_ERROR</tt> for that context. An endpoint <bcp14>MUST NOT</bcp14> close
the session because it received an unknown error code in a REQUEST_ERROR
or PUBLISH_DONE.</t>
    </section>
    <section anchor="transport-considerations">
      <name>Transport Considerations</name>
      <section anchor="congestion-control-considerations">
        <name>Congestion Control Considerations</name>
        <t>MOQT does not specify a congestion controller, but there are important attributes
to consider when selecting a congestion controller for use with an application
built on top of MOQT.</t>
        <section anchor="bufferbloat">
          <name>Bufferbloat</name>
          <t>Traditional AIMD congestion controllers (ex. CUBIC <xref target="RFC9438"/> and Reno <xref target="RFC6582"/>)
are prone to Bufferbloat. Bufferbloat occurs when elements along the path build up
a substantial queue of packets, commonly more than doubling the round trip time.
These queued packets cause head-of-line blocking and latency, even when there is
no packet loss.</t>
        </section>
        <section anchor="application-limited">
          <name>Application-Limited</name>
          <t>The average bitrate for latency sensitive content needs to be less than the available
bandwidth, otherwise data will be queued and/or dropped. As such,
many MOQT applications will typically be limited by the available data to send, and
not the congestion controller. Many congestion control algorithms
only increase the congestion window or bandwidth estimate if fully utilized. This
combination can lead to underestimating the available network bandwidth. As a result,
applications might need to periodically ensure the congestion controller is not
app-limited for at least a full round trip to ensure the available bandwidth can be
measured.</t>
          <t>Some applications might have APIs to allow sending duplicate data or forward error
correction to probe for more bandwidth while also limiting the impact of probing
in case it causes packet loss. Subscribers wanting to switch to an alternate
representation of a Track can subscribe to it at a lower priority, or subscribe
to additional Tracks at the lowest (255) priority to fill the congestion window
during probing intervals while minimizing the impact on higher priority
media. Publishers can send padding (<xref target="padding"/>) to probe for additional
bandwidth without requiring additional subscriptions.
Network-assisted bandwidth estimation mechanisms such as SCONE
<xref target="I-D.ietf-scone-protocol"/> can provide receivers with sustainable bandwidth hints,
which subscribers can use to inform track selection decisions and potentially avoid
unnecessary probing.</t>
        </section>
        <section anchor="consistent-throughput">
          <name>Consistent Throughput</name>
          <t>Congestion control algorithms are commonly optimized for throughput, not consistency.
For example, BBR's PROBE_RTT state halves the sending rate for more than a round trip
in order to obtain an accurate minimum RTT. Similarly, Reno halves its congestion
window upon detecting loss.  In both cases, the large reduction in sending rate might
cause issues with latency sensitive applications.</t>
        </section>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>MOQT is a protocol used hop-by-hop between original
publishers to relay, (possibly) relay to relay, and relay to end
subscribers. Thus, the security considerations need to consider first
what happens between two Endpoints, but also consider the impacts end to
end over several hops of MOQT.</t>
      <t>MOQT uses a trust model where on each hop the Endpoints need to be
securely identified, authorized to use resources of the peer, provide
confidentiality and integrity to prevent third party attacks and limit
monitoring and leakage of privacy sensitive information. The relays
within the chain from original publisher to end subscribers will have
access to Track names, Track Properties, Object Properties, as well as the object's content
unless it is end-to-end encrypted <xref target="sec-media"/>.</t>
      <t>Publishers, including Relays, require authorization to prevent unauthorized
subscriptions to content. Subscription requests can carry
authorization tokens (see <xref target="sec-authorization"/>) to prove the
subscriber's right to access specific tracks or namespaces. Relays
that aggregate subscriptions from multiple downstream subscribers <bcp14>MUST</bcp14>
ensure each subscriber is independently authorized.</t>
      <section anchor="subscription-amplification">
        <name>Subscription Amplification</name>
        <t>A malicious subscriber could attempt to overwhelm a publisher or relay
by requesting subscriptions to many tracks simultaneously. Relays
<bcp14>SHOULD</bcp14> implement rate limiting on subscription requests and <bcp14>MAY</bcp14> reject
excessive subscriptions with REQUEST_ERROR using the EXCESSIVE_LOAD error code.
Publishers <bcp14>SHOULD</bcp14> monitor
the number of active subscriptions and enforce limits to prevent
resource exhaustion from a single subscriber or session.</t>
        <t>TODO: Describe Cache Poisoning attacks</t>
      </section>
      <section anchor="communication-security">
        <name>Communication Security</name>
        <t>MOQT depends on a secure transport to provide confidentiality,
integrity and endpoint authentication between subscriber and
publisher. Implementations use QUIC or WebTransport to fulfill
the basic communication security requirements and these
implementations <bcp14>SHOULD</bcp14> follow best practices for TLS 1.3 and QUIC.
Relays <bcp14>MUST</bcp14> use authentication to prevent impersonation
(<xref target="preventing-impersonation"/>).</t>
        <t>Note that the basic security protection offered by QUIC or TCP/TLS
does not prevent traffic pattern analysis. Object sizes, sizes of
request messages, etc can make it possible for a third party observer
to identify media content, user patterns and media stream origin.</t>
      </section>
      <section anchor="sec-authorization">
        <name>Authorization</name>
        <t>MOQT supports authorization via mutual TLS (mTLS) for endpoint
identification and via token-based schemes for fine-grained,
application-defined access control. The two mechanisms can be used together.</t>
        <section anchor="sec-mtls">
          <name>Mutual TLS</name>
          <t>In mutual TLS, both peers present an X.509 certificate during the TLS 1.3
handshake (<xref target="RFC8446"/>), carried in the underlying transport. An endpoint that
verifies a server certificate does so following <xref target="RFC9525"/>.  An application
that authenticates clients via mTLS defines how a client certificate maps to
identity.</t>
          <t>Once a peer is authenticated, an application <bcp14>MAY</bcp14> use attributes in the peer's
certificate as an input to authorization decisions; the granularity and policy
of such authorization is out of scope for this document.
### Authorization Tokens {#sec-tokens}</t>
          <t>MOQT has functionality to carry Authorization tokens as message
parameters. These tokens can vary based on the application
requirements. Two variants of authorization tokens have already
been defined for MOQT, and more are expected in the future. The
current tokens are Privacy Pass Authentication for Media over QUIC
<xref target="PPA"/> and Authentication scheme for MOQT using Common Access Tokens
<xref target="CAT"/>.</t>
          <t>Tokens are expected to contain information about which actions and
which resources the endpoint providing the token is authorized to
perform and access. Relays will verify the
token to ensure that the request is authorized.</t>
        </section>
        <section anchor="replay-attacks">
          <name>Replay Attacks</name>
          <t>Replay protection for authorization tokens is the responsibility of
the specific token scheme used. Token schemes such as <xref target="CAT"/> and
<xref target="PPA"/> include requirements for relays when processing tokens and
requests.</t>
        </section>
        <section anchor="preventing-impersonation">
          <name>Preventing Impersonation</name>
          <t>A relay <bcp14>MUST</bcp14> ensure that a client cannot publish to namespaces or
tracks belonging to another identity. Impersonation occurs when a
client publishes objects that appear to originate from a different
publisher — for example, by targeting a namespace containing another
user's identifier.</t>
          <t>To prevent impersonation, a relay <bcp14>MUST</bcp14> verify that the
authenticated identity or token scope permits publishing to the
specific namespace. The mapping from authenticated identity to
permitted namespaces is determined by the authorization framework
in use.</t>
          <t>When using bearer token-based authentication (e.g., <xref target="CAT"/>), a token
that is bound to a client-held key via a confirmation claim prevents
a stolen token from being replayed by a different party.</t>
          <t>When unlinkable access is used (e.g., <xref target="PPA"/>), the token's scope
extensions determine which namespaces the bearer can publish to.
Impersonation is still prevented because the token does not grant
access beyond its defined scope.</t>
          <t>A relay that does not enforce these checks allows any connected
client to inject content into arbitrary namespaces, breaking the
integrity of content delivery.</t>
        </section>
      </section>
      <section anchor="sec-media">
        <name>Media Security</name>
        <t>MOQT uses secure transports that provide confidentiality and integrity
protection. However, media objects are accessible to relays,
and are subject to both intentional and accidental modification,
unless they are additionally end-to-end protected.</t>
        <t>The media objects transported by MOQT in various tracks from various
original publishers are subject to several considerations. The first
is source authenticity, i.e. to know that the received media objects
are what the original publisher actually published. In addition to
the media objects, it can also be important to authenticate some
Track and Object Properties. For example, timestamps are crucial to
understand where on the timeline this media fragment belongs.</t>
        <t>The second aspect is content confidentiality. Beyond direct relay
access to media objects, object sizes and traffic patterns enable
analysis of content. Track namespace and track name can also be
analyzed and correlated between end subscribers by relays.</t>
        <t>Consistent with the principle of confidential operation by default,
publishers can apply end-to-end object encryption, for example using Secure Objects
(<xref target="I-D.ietf-moq-secure-objects"/>), so that relays retain access only to
the metadata required for forwarding. Such end-to-end security
mechanisms are external to this specification and additionally provide
source authenticity. MOQT's object model enables both the object data
and Object Properties to be confidentiality and integrity protected, or
integrity protected only.</t>
        <t>Secure key distribution for end-to-end encryption is specific to the
encryption system and deployment, and outside the scope of this document.</t>
      </section>
      <section anchor="resource-exhaustion">
        <name>Resource Exhaustion</name>
        <t>Live content requires significant bandwidth and resources.  Failure to
set limits will quickly cause resource exhaustion.</t>
        <t>MOQT uses stream limits and flow control to impose resource limits at
the network layer.  Endpoints <bcp14>SHOULD</bcp14> set flow control limits based on the
anticipated bitrate.</t>
        <t>Endpoints <bcp14>MAY</bcp14> impose a MAX STREAM count limit which would restrict the
number of concurrent streams which an application could have in
flight.</t>
        <t>The publisher prioritizes and transmits streams out of order.  Streams
might be starved indefinitely during congestion.  The publisher and
subscriber <bcp14>MUST</bcp14> cancel a stream, preferably the one with the lowest
priority, after reaching a resource limit.</t>
      </section>
      <section anchor="security-timeouts">
        <name>Timeouts</name>
        <t>Implementations are advised to use timeouts to prevent resource
exhaustion attacks by a peer that does not send expected data within
an expected time.  Each implementation is expected to set its own timeouts.</t>
        <section anchor="idle-connection-handling">
          <name>Idle Connection Handling</name>
          <t>The transport connection (e.g., QUIC) underlying a MOQT session can close due to
idle timeout if no data is exchanged, either because there are no established
subscriptions or the established subscriptions are not publishing Objects
frequently.  This includes publisher sessions that have issued a
PUBLISH_NAMESPACE and are waiting for subscribers.</t>
          <t>Implementations that want to keep idle sessions open have several options:</t>
          <ul spacing="normal">
            <li>
              <t>Use transport-layer keep-alive mechanisms, such as QUIC PING frames, to
prevent idle timeout closure.</t>
            </li>
            <li>
              <t>Send periodic control messages, for example REQUEST_UPDATE with no
modified Message Parameters.</t>
            </li>
            <li>
              <t>Accept that idle connections can close and implement reconnection logic when
needed.</t>
            </li>
          </ul>
          <t>The choice of mechanism is implementation-specific.</t>
        </section>
      </section>
      <section anchor="relay-security-considerations">
        <name>Relay security considerations</name>
        <section anchor="state-maintenance">
          <name>State maintenance</name>
          <t>A Relay <bcp14>SHOULD</bcp14> have mechanisms to prevent malicious endpoints from flooding it
with PUBLISH_NAMESPACE, SUBSCRIBE_NAMESPACE, or SUBSCRIBE_TRACKS requests that
could bloat data structures. It could use QUIC stream limits to limit the number
of such requests, or could have application-specific policies that can reject
incoming requests that cause the state maintenance for the session to be
excessive.</t>
        </section>
        <section anchor="subscribenamespace-and-subscribetracks-with-short-prefixes">
          <name>SUBSCRIBE_NAMESPACE and SUBSCRIBE_TRACKS with short prefixes</name>
          <t>A Relay can use authorization rules in order to prevent subscriptions closer
to the root of a large prefix tree. Otherwise, if an entity sends a relay a
SUBSCRIBE_NAMESPACE or SUBSCRIBE_TRACKS message with a short prefix, it can
cause the relay to send a large volume of NAMESPACE or PUBLISH messages. As
changes occur in the tree of namespaces, the relay would have to send matching
NAMESPACE/NAMESPACE_DONE messages or initiate new PUBLISH streams.</t>
        </section>
      </section>
      <section anchor="impl-fingerprinting">
        <name>Implementation Identification Fingerprinting</name>
        <t>The MOQT_IMPLEMENTATION option (<xref target="moqt-implementation"/>) can reveal information
that contributes to fingerprinting, a set of techniques for identifying a
specific endpoint over time through its unique set of characteristics.</t>
        <t>Detailed implementation information, including specific version numbers,
build identifiers, or platform details, can create a unique fingerprint that
enables tracking endpoints across sessions without their awareness. When
combined with other session characteristics, even minimal implementation
identification can contribute to distinguishing one endpoint from another.</t>
        <t>To mitigate fingerprinting risks:</t>
        <ul spacing="normal">
          <li>
            <t>Implementations <bcp14>SHOULD</bcp14> send only the minimum information necessary for
interoperability debugging. A short implementation name and major version
number are typically sufficient.</t>
          </li>
          <li>
            <t>Implementations <bcp14>SHOULD NOT</bcp14> include detailed system information, build
numbers, or other attributes that could uniquely identify a specific
instance or user.</t>
          </li>
          <li>
            <t>Privacy-conscious deployments <bcp14>MAY</bcp14> omit the MOQT_IMPLEMENTATION option
entirely or send a generic value.</t>
          </li>
          <li>
            <t>Implementations <bcp14>MAY</bcp14> provide users with the ability to configure or disable
the MOQT_IMPLEMENTATION option.</t>
          </li>
        </ul>
        <t>Operators are advised that detailed implementation identification
facilitates the same privacy concerns as persistent identifiers, since it
enables correlation of sessions across time.</t>
      </section>
      <section anchor="logging-untrusted-strings">
        <name>Logging of Untrusted String Fields</name>
        <t>The Reason Phrase (<xref target="reason-phrase"/>) and MOQT_IMPLEMENTATION option
(<xref target="moqt-implementation"/>) carry sender-controlled text that is commonly written
to logs. Even though these fields are UTF-8 encoded, an endpoint that logs or
renders them <bcp14>SHOULD</bcp14> sanitize them first (for example, by escaping bytes outside
the printable ASCII range), since unsanitized values can enable log injection or
terminal escape sequence injection.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>TODO: fill out currently missing registries:</t>
      <ul spacing="normal">
        <li>
          <t>MOQT ALPN values</t>
        </li>
        <li>
          <t>Message types</t>
        </li>
        <li>
          <t>Session-Level Track Names</t>
        </li>
      </ul>
      <section anchor="uri-scheme-registrations">
        <name>URI Scheme Registrations</name>
        <t>This document requests the registration of the following URI schemes in the
"Uniform Resource Identifier (URI) Schemes" registry, per <xref target="RFC7595"/>:</t>
        <section anchor="moqt-uri-scheme-registration">
          <name>"moqt" URI Scheme Registration</name>
          <t>Scheme name: moqt</t>
          <t>Status: Permanent</t>
          <t>Applications/protocols that use this scheme name: Media over QUIC Transport
(MOQT) over native QUIC or WebTransport, as defined in this document.</t>
          <t>Contact: IETF MoQ Working Group (moq@ietf.org)</t>
          <t>Change controller: IETF</t>
          <t>References: This document</t>
        </section>
      </section>
      <section anchor="iana-media-type">
        <name>Media Type Registration</name>
        <t>This document registers the following media type in the "Media Types"
registry <xref target="RFC6838"/>:</t>
        <t>Type name: application</t>
        <t>Subtype name: moqt</t>
        <t>Required parameters: N/A</t>
        <t>Optional parameters: N/A</t>
        <t>Encoding considerations: This media type is used to identify resources
accessed via the <tt>moqt</tt> URI scheme. It is not used to label the
content of MOQT objects, which are defined by separate media types in
application-specific specifications.</t>
        <t>Security considerations: See the Security Considerations section of
this document.</t>
        <t>Interoperability considerations: N/A</t>
        <t>Published specification: This document</t>
        <t>Applications that use this media type: Implementations of the Media
over QUIC Transport (MOQT) protocol.</t>
        <t>Fragment identifier considerations: Fragment identifiers for
<tt>application/moqt</tt> follow the syntax defined in <xref target="moqt-fragment"/>.</t>
        <t>Additional information: N/A</t>
        <t>Contact: IETF MoQ Working Group (moq@ietf.org)</t>
        <t>Change controller: IETF</t>
      </section>
      <section anchor="iana-fragment-types">
        <name>MOQT URI Fragment Types</name>
        <t>This document establishes the "MOQT URI Fragment Types" registry. This
registry governs fragment type identifiers used in <tt>moqt</tt> URI fragments
as defined in <xref target="moqt-fragment"/>.</t>
        <t>New fragment type identifiers are registered using the Specification
Required policy (<xref section="4.6" sectionFormat="comma" target="RFC8126"/>).</t>
        <t>Each entry in the registry contains the following fields:</t>
        <t>| Fragment Type | Description | Specification |
|:--------------|:------------|:--------------|</t>
        <t>This registry is initially empty.</t>
      </section>
      <section anchor="iana-setup-options">
        <name>Setup Options</name>
        <table>
          <thead>
            <tr>
              <th align="right">Type</th>
              <th align="left">Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x01</td>
              <td align="left">PATH</td>
              <td align="left">
                <xref target="path"/></td>
            </tr>
            <tr>
              <td align="right">0x03</td>
              <td align="left">AUTHORIZATION_TOKEN</td>
              <td align="left">
                <xref target="setup-auth-token"/></td>
            </tr>
            <tr>
              <td align="right">0x04</td>
              <td align="left">MAX_AUTH_TOKEN_CACHE_SIZE</td>
              <td align="left">
                <xref target="max-auth-token-cache-size"/></td>
            </tr>
            <tr>
              <td align="right">0x05</td>
              <td align="left">AUTHORITY</td>
              <td align="left">
                <xref target="authority"/></td>
            </tr>
            <tr>
              <td align="right">0x06</td>
              <td align="left">MAX_FILTER_RANGES</td>
              <td align="left">
                <xref target="max-filter-ranges"/></td>
            </tr>
            <tr>
              <td align="right">0x07</td>
              <td align="left">MOQT_IMPLEMENTATION</td>
              <td align="left">
                <xref target="moqt-implementation"/></td>
            </tr>
            <tr>
              <td align="right">0x08</td>
              <td align="left">MAX_REQUEST_UPDATES</td>
              <td align="left">
                <xref target="max-request-updates"/></td>
            </tr>
            <tr>
              <td align="right">0x7f * N + 0x9D</td>
              <td align="left">Reserved for greasing</td>
              <td align="left">
                <xref target="grease"/></td>
            </tr>
          </tbody>
        </table>
        <t>Endpoints <bcp14>MUST</bcp14> ignore unknown Setup Options as specified in
<xref target="message-setup"/>.</t>
        <t>New Setup Option types are registered using the Specification Required
policy (<xref section="4.6" sectionFormat="comma" target="RFC8126"/>).  Provisional registrations are
permitted to allow experimentation and avoid codepoint collisions
between independent implementations.  There is no reserved range for
private or application-specific use; implementations that need custom
Setup Options <bcp14>SHOULD</bcp14> request a provisional registration.</t>
      </section>
      <section anchor="authorization-token-alias-type">
        <name>Authorization Token Alias Type</name>
        <table>
          <thead>
            <tr>
              <th align="right">Code</th>
              <th align="left">Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x0</td>
              <td align="left">DELETE</td>
              <td align="left">
                <xref target="auth-token-compression"/></td>
            </tr>
            <tr>
              <td align="right">0x1</td>
              <td align="left">REGISTER</td>
              <td align="left">
                <xref target="auth-token-compression"/></td>
            </tr>
            <tr>
              <td align="right">0x2</td>
              <td align="left">USE_ALIAS</td>
              <td align="left">
                <xref target="auth-token-compression"/></td>
            </tr>
            <tr>
              <td align="right">0x3</td>
              <td align="left">USE_VALUE</td>
              <td align="left">
                <xref target="auth-token-compression"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="iana-auth-token-type">
        <name>MOQT Auth Token Type</name>
        <table>
          <thead>
            <tr>
              <th align="right">Code</th>
              <th align="left">Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x0</td>
              <td align="left">Reserved</td>
              <td align="left">
                <xref target="auth-token-compression"/></td>
            </tr>
            <tr>
              <td align="right">0x7f * N + 0x9D</td>
              <td align="left">Reserved for greasing</td>
              <td align="left">
                <xref target="grease"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="message-parameters">
        <name>Message Parameters</name>
        <table>
          <thead>
            <tr>
              <th align="left">Parameter Type</th>
              <th align="left">Parameter Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x02</td>
              <td align="left">OBJECT_DELIVERY_TIMEOUT</td>
              <td align="left">
                <xref target="object-delivery-timeout"/></td>
            </tr>
            <tr>
              <td align="left">0x03</td>
              <td align="left">AUTHORIZATION_TOKEN</td>
              <td align="left">
                <xref target="authorization-token"/></td>
            </tr>
            <tr>
              <td align="left">0x04</td>
              <td align="left">RENDEZVOUS_TIMEOUT</td>
              <td align="left">
                <xref target="rendezvous-timeout"/></td>
            </tr>
            <tr>
              <td align="left">0x06</td>
              <td align="left">SUBGROUP_DELIVERY_TIMEOUT</td>
              <td align="left">
                <xref target="subgroup-delivery-timeout"/></td>
            </tr>
            <tr>
              <td align="left">0x08</td>
              <td align="left">EXPIRES</td>
              <td align="left">
                <xref target="expires"/></td>
            </tr>
            <tr>
              <td align="left">0x09</td>
              <td align="left">LARGEST_OBJECT</td>
              <td align="left">
                <xref target="largest-param"/></td>
            </tr>
            <tr>
              <td align="left">0x0A</td>
              <td align="left">FILL_TIMEOUT</td>
              <td align="left">
                <xref target="fill-timeout"/></td>
            </tr>
            <tr>
              <td align="left">0x10</td>
              <td align="left">FORWARD</td>
              <td align="left">
                <xref target="forward-parameter"/></td>
            </tr>
            <tr>
              <td align="left">0x20</td>
              <td align="left">SUBSCRIBER_PRIORITY</td>
              <td align="left">
                <xref target="subscriber-priority"/></td>
            </tr>
            <tr>
              <td align="left">0x21</td>
              <td align="left">LOCATION_FILTER</td>
              <td align="left">
                <xref target="location-filter"/></td>
            </tr>
            <tr>
              <td align="left">0x22</td>
              <td align="left">GROUP_ORDER</td>
              <td align="left">
                <xref target="group-order"/></td>
            </tr>
            <tr>
              <td align="left">0x23</td>
              <td align="left">FILL_PARAMETERS</td>
              <td align="left">
                <xref target="fill-parameters"/></td>
            </tr>
            <tr>
              <td align="left">0x25</td>
              <td align="left">SUBGROUP_FILTER</td>
              <td align="left">
                <xref target="subgroup-filter"/></td>
            </tr>
            <tr>
              <td align="left">0x26</td>
              <td align="left">OBJECTID_FILTER</td>
              <td align="left">
                <xref target="objectid-filter"/></td>
            </tr>
            <tr>
              <td align="left">0x27</td>
              <td align="left">PRIORITY_FILTER</td>
              <td align="left">
                <xref target="priority-filter"/></td>
            </tr>
            <tr>
              <td align="left">0x28</td>
              <td align="left">OBJECT_PROPERTY_FILTER</td>
              <td align="left">
                <xref target="object-property-filter"/></td>
            </tr>
            <tr>
              <td align="left">0x29</td>
              <td align="left">TRACK_PROPERTY_FILTER</td>
              <td align="left">
                <xref target="track-property-filter"/></td>
            </tr>
            <tr>
              <td align="left">0x32</td>
              <td align="left">NEW_GROUP_REQUEST</td>
              <td align="left">
                <xref target="new-group-request"/></td>
            </tr>
            <tr>
              <td align="left">0x34</td>
              <td align="left">TRACK_NAMESPACE_PREFIX</td>
              <td align="left">
                <xref target="track-namespace-prefix-param"/></td>
            </tr>
            <tr>
              <td align="left">0x35</td>
              <td align="left">INCLUDE_PROPERTIES</td>
              <td align="left">
                <xref target="include-properties-param"/></td>
            </tr>
          </tbody>
        </table>
        <ul spacing="normal">
          <li>
            <t>Message Parameters - List which params can be repeated in the table.</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-properties">
        <name>Properties</name>
        <table>
          <thead>
            <tr>
              <th align="right">Type</th>
              <th align="left">Name</th>
              <th align="left">Scope</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x02</td>
              <td align="left">OBJECT_DELIVERY_TIMEOUT</td>
              <td align="left">Track, Object</td>
              <td align="left">
                <xref target="object-delivery-timeout-ext"/></td>
            </tr>
            <tr>
              <td align="right">0x04</td>
              <td align="left">MAX_CACHE_DURATION</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="max-cache-duration"/></td>
            </tr>
            <tr>
              <td align="right">0x06</td>
              <td align="left">SUBGROUP_DELIVERY_TIMEOUT</td>
              <td align="left">Track, Object</td>
              <td align="left">
                <xref target="subgroup-delivery-timeout-ext"/></td>
            </tr>
            <tr>
              <td align="right">0x0B</td>
              <td align="left">IMMUTABLE_PROPERTIES</td>
              <td align="left">Track, Object</td>
              <td align="left">
                <xref target="immutable-properties"/></td>
            </tr>
            <tr>
              <td align="right">0x0E</td>
              <td align="left">DEFAULT_PUBLISHER_PRIORITY</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="publisher-priority"/></td>
            </tr>
            <tr>
              <td align="right">0x22</td>
              <td align="left">DEFAULT_PUBLISHER_GROUP_ORDER</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="group-order-pref"/></td>
            </tr>
            <tr>
              <td align="right">0x30</td>
              <td align="left">DYNAMIC_GROUPS</td>
              <td align="left">Track</td>
              <td align="left">
                <xref target="dynamic-groups"/></td>
            </tr>
            <tr>
              <td align="right">0x3C</td>
              <td align="left">PRIOR_GROUP_ID_GAP</td>
              <td align="left">Object</td>
              <td align="left">
                <xref target="prior-group-id-gap"/></td>
            </tr>
            <tr>
              <td align="right">0x3E</td>
              <td align="left">PRIOR_OBJECT_ID_GAP</td>
              <td align="left">Object</td>
              <td align="left">
                <xref target="prior-object-id-gap"/></td>
            </tr>
            <tr>
              <td align="right">0x7f * N + 0x9D</td>
              <td align="left">Reserved for greasing</td>
              <td align="left">Any</td>
              <td align="left">
                <xref target="grease"/></td>
            </tr>
          </tbody>
        </table>
        <t>The following table contains provisional registrations for other active drafts in the moq wg.
These entries share the same Property Type space as the table above.</t>
        <table>
          <thead>
            <tr>
              <th align="right">Type</th>
              <th align="left">Name</th>
              <th align="left">Scope</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x10</td>
              <td align="left">TIMESTAMP</td>
              <td align="left">Object</td>
              <td align="left">draft-ietf-moq-loc</td>
            </tr>
            <tr>
              <td align="right">0x08</td>
              <td align="left">TIMESCALE</td>
              <td align="left">Track, Object</td>
              <td align="left">draft-ietf-moq-loc</td>
            </tr>
            <tr>
              <td align="right">0x09</td>
              <td align="left">VIDEO_FRAME_MARKING</td>
              <td align="left">Object</td>
              <td align="left">draft-ietf-moq-loc</td>
            </tr>
            <tr>
              <td align="right">0x0C</td>
              <td align="left">AUDIO_LEVEL</td>
              <td align="left">Object</td>
              <td align="left">draft-ietf-moq-loc</td>
            </tr>
            <tr>
              <td align="right">0x0D</td>
              <td align="left">VIDEO_CONFIG</td>
              <td align="left">Track, Object</td>
              <td align="left">draft-ietf-moq-loc</td>
            </tr>
            <tr>
              <td align="right">0x0F</td>
              <td align="left">AUDIO_CONFIG</td>
              <td align="left">Track, Object</td>
              <td align="left">draft-ietf-moq-loc</td>
            </tr>
            <tr>
              <td align="right">0x0A</td>
              <td align="left">ENCRYPTED_LIST</td>
              <td align="left">Object</td>
              <td align="left">draft-ietf-moq-secure-objects</td>
            </tr>
            <tr>
              <td align="right">0x32</td>
              <td align="left">PADDING</td>
              <td align="left">Object</td>
              <td align="left">draft-ietf-moq-secure-objects</td>
            </tr>
          </tbody>
        </table>
        <t>Endpoints <bcp14>MUST</bcp14> ignore unknown Property types, skipping them according
to the Key-Value-Pair encoding; odd types use their length field, even
types are skipped by parsing a variable-length integer value.</t>
        <ul spacing="normal">
          <li>
            <t>MOQ Properties - we wish to define the following registration policies:
            </t>
            <ul spacing="normal">
              <li>
                <t>0x00 to 0x77: Standards Action or IESG Approval (1-byte encoding)</t>
              </li>
              <li>
                <t>0x78 to 0x7F: Reserved for application-specific use (1-byte encoding,
no registration permitted)</t>
              </li>
              <li>
                <t>0x80 to 0x37FF: Specification Required (2-byte encoding)</t>
              </li>
              <li>
                <t>0x3800 to 0x3FFF: Reserved for application-specific use (2-byte encoding,
no registration permitted)</t>
              </li>
              <li>
                <t>0x4000 to 0x7FFF: Reserved for Mandatory Track Properties
(see <xref target="mandatory-track-properties"/>). Properties registered in this range
<bcp14>MUST</bcp14> have Track scope; Object scope properties <bcp14>MUST NOT</bcp14> be registered in
this range.</t>
              </li>
              <li>
                <t>0x8000 and above: First Come First Served</t>
              </li>
            </ul>
            <t>
Code points reserved for application-specific use will never be allocated
by IANA. Applications using these values do not need to coordinate with
IANA.  Note that applications consuming tracks from uncoordinated sources may
encounter different semantics for the same code points, creating potential
collision risks.</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-object-status">
        <name>Object Status</name>
        <t>This document establishes a registry for Object Status values (see
<xref target="object-status"/>). The "Payload" column indicates whether an Object with that
status is permitted to carry a non-empty payload.</t>
        <table>
          <thead>
            <tr>
              <th align="right">Code</th>
              <th align="left">Name</th>
              <th align="left">Payload</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x0</td>
              <td align="left">Normal</td>
              <td align="left">Yes</td>
              <td align="left">
                <xref target="object-status"/></td>
            </tr>
            <tr>
              <td align="right">0x3</td>
              <td align="left">End of Group</td>
              <td align="left">No</td>
              <td align="left">
                <xref target="object-status"/></td>
            </tr>
            <tr>
              <td align="right">0x4</td>
              <td align="left">End of Track</td>
              <td align="left">No</td>
              <td align="left">
                <xref target="object-status"/></td>
            </tr>
          </tbody>
        </table>
        <t>New Object Status values are registered using the Specification Required
policy (<xref section="4.6" sectionFormat="comma" target="RFC8126"/>). Each registration <bcp14>MUST</bcp14> indicate whether the
status permits a payload.</t>
      </section>
      <section anchor="iana-session-level-tracks">
        <name>Session-Level Track Names</name>
        <t>This document establishes a registry for session-level track names
under the <tt>.session</tt> namespace (see <xref target="session-level-tracks"/>). The
registration policy is Specification Required (per <xref section="4.6" sectionFormat="comma" target="RFC8126"/>).</t>
        <t>Each registration must include:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Track Namespace</td>
              <td align="left">The track namespace under the <tt>.session</tt> namespace, can be empty</td>
            </tr>
            <tr>
              <td align="left">Track Name</td>
              <td align="left">The track name (bytes) within the full namespace</td>
            </tr>
            <tr>
              <td align="left">Description</td>
              <td align="left">Brief description of the track's purpose</td>
            </tr>
            <tr>
              <td align="left">Change Controller</td>
              <td align="left">Who may update the registration</td>
            </tr>
            <tr>
              <td align="left">Specification</td>
              <td align="left">Reference to the defining specification</td>
            </tr>
          </tbody>
        </table>
        <t>This document does not define any initial entries.</t>
      </section>
      <section anchor="iana-error-codes">
        <name>Error Codes</name>
        <section anchor="iana-session-termination">
          <name>Session Termination Error Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">NO_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">UNAUTHORIZED</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">PROTOCOL_VIOLATION</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_REQUEST_ID</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">DUPLICATE_TRACK_ALIAS</td>
                <td align="center">0x5</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">KEY_VALUE_FORMATTING_ERROR</td>
                <td align="center">0x6</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_PATH</td>
                <td align="center">0x8</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_PATH</td>
                <td align="center">0x9</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">GOAWAY_TIMEOUT</td>
                <td align="center">0x10</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">CONTROL_MESSAGE_TIMEOUT</td>
                <td align="center">0x11</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">DATA_STREAM_TIMEOUT</td>
                <td align="center">0x12</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">AUTH_TOKEN_CACHE_OVERFLOW</td>
                <td align="center">0x13</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">DUPLICATE_AUTH_TOKEN_ALIAS</td>
                <td align="center">0x14</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_AUTH_TOKEN</td>
                <td align="center">0x16</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">UNKNOWN_AUTH_TOKEN_ALIAS</td>
                <td align="center">0x17</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED_AUTH_TOKEN</td>
                <td align="center">0x18</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_AUTHORITY</td>
                <td align="center">0x19</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_AUTHORITY</td>
                <td align="center">0x1A</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">TOO_MANY_REQUEST_UPDATES</td>
                <td align="center">0x1B</td>
                <td align="left">
                  <xref target="session-termination-codes"/></td>
              </tr>
              <tr>
                <td align="left">Reserved for greasing</td>
                <td align="center">0x7f * N + 0x9D</td>
                <td align="left">
                  <xref target="grease"/></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="iana-request-error">
          <name>REQUEST_ERROR Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">UNAUTHORIZED</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">TIMEOUT</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">NOT_SUPPORTED</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_AUTH_TOKEN</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED_AUTH_TOKEN</td>
                <td align="center">0x5</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">GOING_AWAY</td>
                <td align="center">0x6</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">EXCESSIVE_LOAD</td>
                <td align="center">0x9</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">DOES_NOT_EXIST</td>
                <td align="center">0x10</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_RANGE</td>
                <td align="center">0x11</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_TRACK</td>
                <td align="center">0x12</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">UNINTERESTED</td>
                <td align="center">0x20</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">PREFIX_OVERLAP</td>
                <td align="center">0x30</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">NAMESPACE_TOO_LARGE</td>
                <td align="center">0x31</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">UNSUPPORTED_EXTENSION</td>
                <td align="center">0x33</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">REDIRECT</td>
                <td align="center">0x34</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">CONFLICTING_FILTERS</td>
                <td align="center">0x35</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">INVALID_FILTER</td>
                <td align="center">0x36</td>
                <td align="left">
                  <xref target="request-error-codes"/></td>
              </tr>
              <tr>
                <td align="left">Reserved for greasing</td>
                <td align="center">0x7f * N + 0x9D</td>
                <td align="left">
                  <xref target="grease"/></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="iana-publish-done">
          <name>PUBLISH_DONE Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="publish-done-codes"/></td>
              </tr>
              <tr>
                <td align="left">UNAUTHORIZED</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="publish-done-codes"/></td>
              </tr>
              <tr>
                <td align="left">TRACK_ENDED</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="publish-done-codes"/></td>
              </tr>
              <tr>
                <td align="left">GOING_AWAY</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="publish-done-codes"/></td>
              </tr>
              <tr>
                <td align="left">TOO_FAR_BEHIND</td>
                <td align="center">0x5</td>
                <td align="left">
                  <xref target="publish-done-codes"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED</td>
                <td align="center">0x6</td>
                <td align="left">
                  <xref target="publish-done-codes"/></td>
              </tr>
              <tr>
                <td align="left">UPDATE_FAILED</td>
                <td align="center">0x8</td>
                <td align="left">
                  <xref target="publish-done-codes"/></td>
              </tr>
              <tr>
                <td align="left">EXCESSIVE_LOAD</td>
                <td align="center">0x9</td>
                <td align="left">
                  <xref target="publish-done-codes"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_TRACK</td>
                <td align="center">0x12</td>
                <td align="left">
                  <xref target="publish-done-codes"/></td>
              </tr>
              <tr>
                <td align="left">Reserved for greasing</td>
                <td align="center">0x7f * N + 0x9D</td>
                <td align="left">
                  <xref target="grease"/></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="iana-reset-stream">
          <name>Stream Reset Error Codes</name>
          <table>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="center">Code</th>
                <th align="left">Specification</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">INTERNAL_ERROR</td>
                <td align="center">0x0</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">CANCELLED</td>
                <td align="center">0x1</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">DELIVERY_TIMEOUT</td>
                <td align="center">0x2</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">SESSION_CLOSED</td>
                <td align="center">0x3</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">GOING_AWAY</td>
                <td align="center">0x4</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">TOO_FAR_BEHIND</td>
                <td align="center">0x5</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">UNKNOWN_OBJECT_STATUS</td>
                <td align="center">0x6</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">EXPIRED_AUTH_TOKEN</td>
                <td align="center">0x7</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">EXCESSIVE_LOAD</td>
                <td align="center">0x9</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">MALFORMED_TRACK</td>
                <td align="center">0x12</td>
                <td align="left">
                  <xref target="stream-reset-codes"/></td>
              </tr>
              <tr>
                <td align="left">Reserved for greasing</td>
                <td align="center">0x7f * N + 0x9D</td>
                <td align="left">
                  <xref target="grease"/></td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
    </section>
    <section numbered="false" anchor="contributors">
      <name>Contributors</name>
      <t>The original design behind this protocol was inspired by three independent
proposals: WARP <xref target="I-D.draft-lcurley-warp"/> by Luke Curley, RUSH
<xref target="I-D.draft-kpugin-rush"/> by Kirill Pugin, Nitin Garg, Alan Frindell, Jordi
Cenzano and Jake Weissman, and QUICR <xref target="I-D.draft-jennings-moq-quicr-proto"/> by
Cullen Jennings, Suhas Nandakumar and Christian Huitema.  The authors of those
documents merged their proposals to create the first draft of moq-transport.
The IETF MoQ Working Group received an enormous amount of support from many
people. The following people provided substantive contributions to this
document:</t>
      <ul spacing="normal">
        <li>
          <t>Ali Begen</t>
        </li>
        <li>
          <t>Charles Krasic</t>
        </li>
        <li>
          <t>Christian Huitema</t>
        </li>
        <li>
          <t>Cullen Jennings</t>
        </li>
        <li>
          <t>James Hurley</t>
        </li>
        <li>
          <t>Jordi Cenzano</t>
        </li>
        <li>
          <t>Kirill Pugin</t>
        </li>
        <li>
          <t>Luke Curley</t>
        </li>
        <li>
          <t>Martin Duke</t>
        </li>
        <li>
          <t>Mike English</t>
        </li>
        <li>
          <t>Mo Zanaty</t>
        </li>
        <li>
          <t>Will Law</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="use-of-generative-ai">
      <name>Use of Generative AI</name>
      <t>Generative AI tools were used to assist with drafting and editing text for this
document. All AI-generated content was reviewed and approved by the editors.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="WebTransport">
          <front>
            <title>WebTransport over HTTP/3</title>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Meta</organization>
            </author>
            <author fullname="Eric Kinnear" initials="E." surname="Kinnear">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   WebTransport over HTTP/3 is a binding of the WebTransport protocol
   framework [OVERVIEW] to HTTP/3 [HTTP3].  It provides support for
   unidirectional streams, bidirectional streams, and datagrams, all
   multiplexed within the same HTTP/3 connection.  WebTransport enables
   application clients constrained by the Web security model to
   communicate with a remote application server using a secure
   multiplexed transport.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-http3-16"/>
        </reference>
        <reference anchor="RFC2119">
          <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">
          <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.draft-ietf-quic-reliable-stream-reset">
          <front>
            <title>QUIC Stream Resets with Partial Delivery</title>
            <author fullname="Marten Seemann" initials="M." surname="Seemann">
         </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <date day="6" month="September" year="2026"/>
            <abstract>
              <t>   QUIC defines a RESET_STREAM frame to abort sending on a stream.  When
   a sender resets a stream, it also stops retransmitting STREAM frames
   for this stream in the event of packet loss.  On the receiving side,
   there is no guarantee that any data sent on that stream is delivered.

   This document defines a new QUIC frame, the RESET_STREAM_AT frame,
   that allows resetting a stream, while guaranteeing delivery of stream
   data up to a certain byte offset.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-reliable-stream-reset-11"/>
        </reference>
        <reference anchor="I-D.ietf-webtrans-overview">
          <front>
            <title>The WebTransport Protocol Framework</title>
            <author fullname="Eric Kinnear" initials="E." surname="Kinnear">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   The WebTransport Protocol Framework enables clients constrained by
   the Web security model to communicate with a remote server using a
   secure multiplexed transport.  It consists of a set of individual
   protocols that are safe to expose to untrusted applications, combined
   with an abstract model that allows them to be used interchangeably.

   This document defines the overall requirements on the protocols used
   in WebTransport, as well as the common features of the protocols,
   support for some of which is optional.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-overview-13"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC8615">
          <front>
            <title>Well-Known Uniform Resource Identifiers (URIs)</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="May" year="2019"/>
            <abstract>
              <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
              <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8615"/>
          <seriesInfo name="DOI" value="10.17487/RFC8615"/>
        </reference>
        <reference anchor="RFC9221">
          <front>
            <title>An Unreliable Datagram Extension to QUIC</title>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <author fullname="E. Kinnear" initials="E." surname="Kinnear"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <date month="March" year="2022"/>
            <abstract>
              <t>This document defines an extension to the QUIC transport protocol to add support for sending and receiving unreliable datagrams over a QUIC connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9221"/>
          <seriesInfo name="DOI" value="10.17487/RFC9221"/>
        </reference>
        <reference anchor="RFC7301">
          <front>
            <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
            <author fullname="S. Friedl" initials="S." surname="Friedl"/>
            <author fullname="A. Popov" initials="A." surname="Popov"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Stephan" initials="E." surname="Stephan"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7301"/>
          <seriesInfo name="DOI" value="10.17487/RFC7301"/>
        </reference>
        <reference anchor="RFC3629">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="RFC7595">
          <front>
            <title>Guidelines and Registration Procedures for URI Schemes</title>
            <author fullname="D. Thaler" initials="D." role="editor" surname="Thaler"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <author fullname="T. Hardie" initials="T." surname="Hardie"/>
            <date month="June" year="2015"/>
            <abstract>
              <t>This document updates the guidelines and recommendations, as well as the IANA registration processes, for the definition of Uniform Resource Identifier (URI) schemes. It obsoletes RFC 4395.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="35"/>
          <seriesInfo name="RFC" value="7595"/>
          <seriesInfo name="DOI" value="10.17487/RFC7595"/>
        </reference>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC8126">
          <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="CAT">
          <front>
            <title>Authorization scheme for MOQT using Common Access Tokens</title>
            <author fullname="Will Law" initials="W." surname="Law">
              <organization>Akamai</organization>
            </author>
            <author fullname="Chris Lemmons" initials="C." surname="Lemmons">
              <organization>Comcast</organization>
            </author>
            <author fullname="Gwendal Simon" initials="G." surname="Simon">
              <organization>Synamedia</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <date day="18" month="June" year="2026"/>
            <abstract>
              <t>   A token-based authorization scheme for use with Media Over QUIC
   Transport.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-c4m-01"/>
        </reference>
        <reference anchor="PPA">
          <front>
            <title>Privacy Pass Authentication for Media over QUIC (MoQ)</title>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Cullen Fluffy Jennings" initials="C. F." surname="Jennings">
              <organization>Cisco</organization>
            </author>
            <author fullname="Thibault Meunier" initials="T." surname="Meunier">
              <organization>Cloudflare Inc.</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   This document specifies the use of Privacy Pass architecture and
   issuance protocols for authorization in Media over QUIC (MoQ)
   transport protocol.  It defines how Privacy Pass tokens can be
   integrated with MoQ's authorization framework to provide privacy-
   preserving authentication for subscriptions, fetches, publications,
   and relay operations while supporting fine-grained access control
   through prefix-based track namespace and track name matching rules.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-privacy-pass-auth-03"/>
        </reference>
        <reference anchor="I-D.ietf-moq-secure-objects">
          <front>
            <title>End-to-End Secure Objects for Media over QUIC Transport</title>
            <author fullname="Cullen Fluffy Jennings" initials="C. F." surname="Jennings">
              <organization>Cisco</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   This document specifies an end-to-end authenticated encryption scheme
   for application objects transmitted via Media over QUIC (MoQ)
   Transport.  The scheme enables original publishers that share a
   symmetric key with end subscribers, to ensuring that MoQ relays are
   unable to decrypt object contents.  Additionally, subscribers can
   verify the integrity and authenticity of received objects, confirming
   that the content has not been modified in transit.  Additionally it
   allows MoQ parameters to be protected so the publisher can select if
   they are readable and/or modifiable by relays.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-secure-objects-01"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC9580">
          <front>
            <title>OpenPGP</title>
            <author fullname="P. Wouters" initials="P." role="editor" surname="Wouters"/>
            <author fullname="D. Huigens" initials="D." surname="Huigens"/>
            <author fullname="J. Winter" initials="J." surname="Winter"/>
            <author fullname="Y. Niibe" initials="Y." surname="Niibe"/>
            <date month="July" year="2024"/>
            <abstract>
              <t>This document specifies the message formats used in OpenPGP. OpenPGP provides encryption with public key or symmetric cryptographic algorithms, digital signatures, compression, and key management.</t>
              <t>This document is maintained in order to publish all necessary information needed to develop interoperable applications based on the OpenPGP format. It is not a step-by-step cookbook for writing an application. It describes only the format and methods needed to read, check, generate, and write conforming packets crossing any network. It does not deal with storage and implementation questions. It does, however, discuss implementation issues necessary to avoid security flaws.</t>
              <t>This document obsoletes RFCs 4880 ("OpenPGP Message Format"), 5581 ("The Camellia Cipher in OpenPGP"), and 6637 ("Elliptic Curve Cryptography (ECC) in OpenPGP").</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9580"/>
          <seriesInfo name="DOI" value="10.17487/RFC9580"/>
        </reference>
        <reference anchor="RFC1035">
          <front>
            <title>Domain names - implementation and specification</title>
            <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
            <date month="November" year="1987"/>
            <abstract>
              <t>This RFC is the revised specification of the protocol and format used in the implementation of the Domain Name System. It obsoletes RFC-883. This memo documents the details of the domain name client - server communication.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="13"/>
          <seriesInfo name="RFC" value="1035"/>
          <seriesInfo name="DOI" value="10.17487/RFC1035"/>
        </reference>
        <reference anchor="RFC3596">
          <front>
            <title>DNS Extensions to Support IP Version 6</title>
            <author fullname="S. Thomson" initials="S." surname="Thomson"/>
            <author fullname="C. Huitema" initials="C." surname="Huitema"/>
            <author fullname="V. Ksinant" initials="V." surname="Ksinant"/>
            <author fullname="M. Souissi" initials="M." surname="Souissi"/>
            <date month="October" year="2003"/>
            <abstract>
              <t>This document defines the changes that need to be made to the Domain Name System (DNS) to support hosts running IP version 6 (IPv6). The changes include a resource record type to store an IPv6 address, a domain to support lookups based on an IPv6 address, and updated definitions of existing query types that return Internet addresses as part of additional section processing. The extensions are designed to be compatible with existing applications and, in particular, DNS implementations themselves. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="88"/>
          <seriesInfo name="RFC" value="3596"/>
          <seriesInfo name="DOI" value="10.17487/RFC3596"/>
        </reference>
        <reference anchor="RFC9460">
          <front>
            <title>Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)</title>
            <author fullname="B. Schwartz" initials="B." surname="Schwartz"/>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <author fullname="E. Nygren" initials="E." surname="Nygren"/>
            <date month="November" year="2023"/>
            <abstract>
              <t>This document specifies the "SVCB" ("Service Binding") and "HTTPS" DNS resource record (RR) types to facilitate the lookup of information needed to make connections to network services, such as for HTTP origins. SVCB records allow a service to be provided from multiple alternative endpoints, each with associated parameters (such as transport protocol configuration), and are extensible to support future uses (such as keys for encrypting the TLS ClientHello). They also enable aliasing of apex domains, which is not possible with CNAME. The HTTPS RR is a variation of SVCB for use with HTTP (see RFC 9110, "HTTP Semantics"). By providing more information to the client before it attempts to establish a connection, these records offer potential benefits to both performance and privacy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9460"/>
          <seriesInfo name="DOI" value="10.17487/RFC9460"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8470">
          <front>
            <title>Using Early Data in HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="W. Tarreau" initials="W." surname="Tarreau"/>
            <date month="September" year="2018"/>
            <abstract>
              <t>Using TLS early data creates an exposure to the possibility of a replay attack. This document defines mechanisms that allow clients to communicate with servers about HTTP requests that are sent in early data. Techniques are described that use these mechanisms to mitigate the risk of replay.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8470"/>
          <seriesInfo name="DOI" value="10.17487/RFC8470"/>
        </reference>
        <reference anchor="RFC9170">
          <front>
            <title>Long-Term Viability of Protocol Extension Mechanisms</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>The ability to change protocols depends on exercising the extension and version-negotiation mechanisms that support change. This document explores how regular use of new protocol features can ensure that it remains possible to deploy changes to a protocol. Examples are given where lack of use caused changes to be more difficult or costly.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9170"/>
          <seriesInfo name="DOI" value="10.17487/RFC9170"/>
        </reference>
        <reference anchor="RFC9438">
          <front>
            <title>CUBIC for Fast and Long-Distance Networks</title>
            <author fullname="L. Xu" initials="L." surname="Xu"/>
            <author fullname="S. Ha" initials="S." surname="Ha"/>
            <author fullname="I. Rhee" initials="I." surname="Rhee"/>
            <author fullname="V. Goel" initials="V." surname="Goel"/>
            <author fullname="L. Eggert" initials="L." role="editor" surname="Eggert"/>
            <date month="August" year="2023"/>
            <abstract>
              <t>CUBIC is a standard TCP congestion control algorithm that uses a cubic function instead of a linear congestion window increase function to improve scalability and stability over fast and long-distance networks. CUBIC has been adopted as the default TCP congestion control algorithm by the Linux, Windows, and Apple stacks.</t>
              <t>This document updates the specification of CUBIC to include algorithmic improvements based on these implementations and recent academic work. Based on the extensive deployment experience with CUBIC, this document also moves the specification to the Standards Track and obsoletes RFC 8312. This document also updates RFC 5681, to allow for CUBIC's occasionally more aggressive sending behavior.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9438"/>
          <seriesInfo name="DOI" value="10.17487/RFC9438"/>
        </reference>
        <reference anchor="RFC6582">
          <front>
            <title>The NewReno Modification to TCP's Fast Recovery Algorithm</title>
            <author fullname="T. Henderson" initials="T." surname="Henderson"/>
            <author fullname="S. Floyd" initials="S." surname="Floyd"/>
            <author fullname="A. Gurtov" initials="A." surname="Gurtov"/>
            <author fullname="Y. Nishida" initials="Y." surname="Nishida"/>
            <date month="April" year="2012"/>
            <abstract>
              <t>RFC 5681 documents the following four intertwined TCP congestion control algorithms: slow start, congestion avoidance, fast retransmit, and fast recovery. RFC 5681 explicitly allows certain modifications of these algorithms, including modifications that use the TCP Selective Acknowledgment (SACK) option (RFC 2883), and modifications that respond to "partial acknowledgments" (ACKs that cover new data, but not all the data outstanding when loss was detected) in the absence of SACK. This document describes a specific algorithm for responding to partial acknowledgments, referred to as "NewReno". This response to partial acknowledgments was first proposed by Janey Hoe. This document obsoletes RFC 3782. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6582"/>
          <seriesInfo name="DOI" value="10.17487/RFC6582"/>
        </reference>
        <reference anchor="I-D.ietf-scone-protocol">
          <front>
            <title>Standard Communication with Network Elements (SCONE) Protocol</title>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christian Huitema" initials="C." surname="Huitema">
              <organization>Private Octopus Inc.</organization>
            </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Matt Joras" initials="M." surname="Joras">
              <organization>Meta</organization>
            </author>
            <author fullname="Marcus Ihlar" initials="L. M." surname="Ihlar">
              <organization>Ericsson</organization>
            </author>
            <date day="20" month="August" year="2026"/>
            <abstract>
              <t>   This document describes a protocol where on-path network elements can
   communicate their perspective on the maximum sustainable throughput
   for QUIC flows to endpoints.  This throughput advice suggests an
   upper bound on long-term average throughput, independent of and
   complementary to real-time congestion control signals.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-scone-protocol-07"/>
        </reference>
        <reference anchor="RFC9525">
          <front>
            <title>Service Identity in TLS</title>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <author fullname="R. Salz" initials="R." surname="Salz"/>
            <date month="November" year="2023"/>
            <abstract>
              <t>Many application technologies enable secure communication between two entities by means of Transport Layer Security (TLS) with Internet Public Key Infrastructure using X.509 (PKIX) certificates. This document specifies procedures for representing and verifying the identity of application services in such interactions.</t>
              <t>This document obsoletes RFC 6125.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9525"/>
          <seriesInfo name="DOI" value="10.17487/RFC9525"/>
        </reference>
        <reference anchor="I-D.draft-lcurley-warp">
          <front>
            <title>Warp - Live Media Transport over QUIC</title>
            <author fullname="Luke Curley" initials="L." surname="Curley">
              <organization>Twitch</organization>
            </author>
            <author fullname="Kirill Pugin" initials="K." surname="Pugin">
              <organization>Meta</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="13" month="March" year="2023"/>
            <abstract>
              <t>   This document defines the core behavior for Warp, a live media
   transport protocol over QUIC.  Media is split into objects based on
   the underlying media encoding and transmitted independently over QUIC
   streams.  QUIC streams are prioritized based on the delivery order,
   allowing less important objects to be starved or dropped during
   congestion.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-lcurley-warp-04"/>
        </reference>
        <reference anchor="I-D.draft-kpugin-rush">
          <front>
            <title>RUSH - Reliable (unreliable) streaming protocol</title>
            <author fullname="Kirill Pugin" initials="K." surname="Pugin">
              <organization>Meta</organization>
            </author>
            <author fullname="Nitin Garg" initials="N." surname="Garg">
              <organization>Meta</organization>
            </author>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Meta</organization>
            </author>
            <author fullname="Jorge Cenzano Ferret" initials="J. C." surname="Ferret">
              <organization>Meta</organization>
            </author>
            <author fullname="Jake Weissman" initials="J." surname="Weissman">
              <organization>Meta</organization>
            </author>
            <date day="21" month="April" year="2025"/>
            <abstract>
              <t>   RUSH is an application-level protocol for ingesting live video.  This
   document describes the protocol and how it maps onto QUIC.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Discussion of this document takes place on the mailing list (), which
   is archived at .

   Source for this draft and an issue tracker can be found at
   https://github.com/afrind/draft-rush.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-kpugin-rush-03"/>
        </reference>
        <reference anchor="I-D.draft-jennings-moq-quicr-proto">
          <front>
            <title>QuicR - Media Delivery Protocol over QUIC</title>
            <author fullname="Cullen Fluffy Jennings" initials="C. F." surname="Jennings">
              <organization>cisco</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Christian Huitema" initials="C." surname="Huitema">
              <organization>Private Octopus Inc.</organization>
            </author>
            <date day="11" month="July" year="2022"/>
            <abstract>
              <t>   Recently new use cases have emerged requiring higher scalability of
   media delivery for interactive realtime applications and much lower
   latency for streaming applications and a combination thereof.

   draft-jennings-moq-arch specifies architectural aspects of QuicR, a
   media delivery protocol based on publish/subscribe metaphor and Relay
   based delivery tree, that enables a wide range of realtime
   applications with different resiliency and latency needs.

   This specification defines the protocol aspects of the QuicR media
   delivery architecture.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-jennings-moq-quicr-proto-01"/>
        </reference>
      </references>
    </references>
    <?line 5733?>

<section anchor="change-log">
      <name>Change Log</name>
      <t>RFC Editor's Note: Please remove this section prior to publication of a final version of this document.</t>
      <t>Issue and pull request numbers are listed with a leading octothorp.</t>
      <section anchor="since-draft-ietf-moq-transport-20">
        <name>Since draft-ietf-moq-transport-20</name>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Add a Document Structure section (#1903)</t>
          </li>
          <li>
            <t>Move-only restructuring across the document (#1877)</t>
          </li>
          <li>
            <t>Restructure and reorder Publishing and Receiving Tracks (#1885, #1893)</t>
          </li>
          <li>
            <t>Move Error Handling and Grease ahead of the considerations sections (#1899)</t>
          </li>
          <li>
            <t>Promote each Setup Option to its own section (#1896)</t>
          </li>
          <li>
            <t>Collect Session Termination, Request Error, and Publish Done codes into
Error Handling (#1879, #1880, #1881)</t>
          </li>
          <li>
            <t>Extract common wire format sections: Authorization Token Compression, Track
Namespace, Location Filter, and Range Filter (#1882, #1887, #1888, #1892)</t>
          </li>
          <li>
            <t>Remove the Connection URL, Stream Cancellation, and Examples sections (#1878)</t>
          </li>
          <li>
            <t>Restructuring pull requests that also made editorial clarifications are
included as moves only; the clarifications are deferred (#1887, #1888, #1892)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-19">
        <name>Since draft-ietf-moq-transport-19</name>
        <t><strong>Session and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Replace Joining FETCH with fill fetch streams (#1673)
            </t>
            <ul spacing="normal">
              <li>
                <t>Add the FILL_PARAMETERS parameter, whose presence on a subscription
requests a fill; it carries a sequence of Parameters (#1868)</t>
              </li>
              <li>
                <t>Remove the Joining variant of FETCH and the "standalone" moniker</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Restructure the Location Filter to match the other filter parameters, and
carry the FETCH range in LOCATION_FILTER instead of message fields (#1809)</t>
          </li>
          <li>
            <t>Add PUBLISH_STATE_NOTIFY message (#1820)</t>
          </li>
          <li>
            <t>Add INCLUDE_PROPERTIES parameter (#1813, #1847)</t>
          </li>
          <li>
            <t>PUBLISH can carry Subscription Parameters, and AUTHORIZATION TOKEN is never
copied from SUBSCRIBE_TRACKS (#1834)</t>
          </li>
          <li>
            <t>Subscription parameters appear in REQUEST_UPDATE, not PUBLISH_OK (#1790)</t>
          </li>
          <li>
            <t>Allow FORWARD on a REQUEST_UPDATE for SUBSCRIBE_TRACKS (#1812)</t>
          </li>
          <li>
            <t>Remove PUBLISH_DONE status code SUBSCRIPTION_ENDED; a subscription does not
end because Largest Object passes the end of the Location Filter (#1833)</t>
          </li>
          <li>
            <t>Change the maximum Stream Count in PUBLISH_DONE to 2^64 - 1 (#1831)</t>
          </li>
          <li>
            <t>Remove the requirement for a publisher to retain Largest Location (#1872)</t>
          </li>
          <li>
            <t>Remove the VERSION_NEGOTIATION_FAILED session error (#1867)</t>
          </li>
          <li>
            <t>A relay <bcp14>MUST</bcp14> send an upstream FETCH to at least one publisher (#1804)</t>
          </li>
          <li>
            <t>Discuss the tradeoffs of aggregating downstream filters onto an upstream
subscription (#1735)</t>
          </li>
          <li>
            <t>Resolve REDIRECT ambiguity with empty Track Namespace and Track Name (#1824)</t>
          </li>
          <li>
            <t>Clarify Retry Interval of 0 with REDIRECT (#1785)</t>
          </li>
          <li>
            <t>Define host resolution for moqt URIs (#1817)</t>
          </li>
          <li>
            <t>Exclude the URI query component from the MOQT scope (#1855)</t>
          </li>
          <li>
            <t>SUBSCRIBE_TRACKS Parameters are the publisher's initial Subscription
parameters and are explicitly communicated in the resulting PUBLISH
(#1815, #1869)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Describe OBJECT_DATAGRAM and SUBGROUP_HEADER types as Type Flags bitfields;
a set bit with no specified meaning is a <tt>PROTOCOL_VIOLATION</tt> (#1774)</t>
          </li>
          <li>
            <t>Add <tt>End of Timed-Out Range</tt> for Objects abandoned when Fill Timeout
expires (#1822)</t>
          </li>
          <li>
            <t>OBJECT_DELIVERY_TIMEOUT starts at the last header byte instead of the first
payload byte (#1844)</t>
          </li>
          <li>
            <t>Define scheduling between fill-delivered and subscription-delivered Objects
(#1673)</t>
          </li>
          <li>
            <t>Beware re-using a Track Alias for concurrent subscriptions (#1856)</t>
          </li>
        </ul>
        <t><strong>Security Considerations</strong></t>
        <ul spacing="normal">
          <li>
            <t>Add a Preventing Impersonation section (#1737, #1789)</t>
          </li>
          <li>
            <t>Expand mutual TLS and authorization guidance (#1786)</t>
          </li>
          <li>
            <t>Add moqt URI scheme security considerations (#1772)</t>
          </li>
          <li>
            <t>Add a security consideration for logging untrusted string fields (#1823)</t>
          </li>
          <li>
            <t>Recommend end-to-end object encryption for confidentiality from relays
(#1755)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Clarify the Range Filters section for readability (#1851)</t>
          </li>
          <li>
            <t>Note that the recommended name encoding is not guaranteed filename-safe
(#1863)</t>
          </li>
          <li>
            <t>Fix LOC and Secure Objects entries in the provisional Property registry
(#1807, #1818, #1848)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-18">
        <name>Since draft-ietf-moq-transport-18</name>
        <t><strong>Session and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Add Range Filters that can filter Objects from Subscriptions and
SUBSCRIBE_TRACKS (#1765)</t>
          </li>
          <li>
            <t>Add MAX_REQUEST_UPDATES Setup Option and TOO_MANY_REQUEST_UPDATES error
(#1613)</t>
          </li>
          <li>
            <t>Allow multiple concurrent subscriptions per Track (#1775)</t>
          </li>
          <li>
            <t>Move GROUP_ORDER from PUBLISH_OK to SUBSCRIBE_TRACKS (#1777)</t>
          </li>
          <li>
            <t>Rename PUBLISH_BLOCKED to PUBLISH_SKIPPED (#1779)</t>
          </li>
          <li>
            <t>Remove Request ID from GOAWAY (#1623)</t>
          </li>
          <li>
            <t>Clarify session vs. per-request GOAWAY migration (#1787)</t>
          </li>
          <li>
            <t>Define FIN vs. RST/STOP_SENDING semantics on request streams (#1698)</t>
          </li>
          <li>
            <t>Unexpected REQUEST_UPDATE is a session error (#1784)</t>
          </li>
          <li>
            <t>Update Forward State handling for relays (#1782)</t>
          </li>
          <li>
            <t>Clarify authorization trust model for namespace subscriptions (#1656)</t>
          </li>
          <li>
            <t>Clarify namespace discovery and NAMESPACE sending (#1710)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Delivery timeouts are both Track and Object Properties (#1476)</t>
          </li>
          <li>
            <t>Make the Object Status payload rule extensible via IANA registry (#1760)</t>
          </li>
          <li>
            <t>Datagrams take precedence in cross-forwarding-preference scheduling ties
(#1780)</t>
          </li>
          <li>
            <t>Remove relay exception for reordering or dropping objects (#1762)</t>
          </li>
          <li>
            <t>Specify relay processing rules for known Track Properties (#1771)</t>
          </li>
          <li>
            <t>Recommend Immutable Properties for relay-visible, unmodifiable data (#1759)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Rename control Message Payload field to Message Body (#1756)</t>
          </li>
          <li>
            <t>Clarify Group and Subgroup terminology and object model (#1708)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-17">
        <name>Since draft-ietf-moq-transport-17</name>
        <t><strong>Session and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Unified moqt:// URI scheme for QUIC and WebTransport (#1486)</t>
          </li>
          <li>
            <t>Add fragment identifier support for moqt URIs (#1571)</t>
          </li>
          <li>
            <t>Split SUBSCRIBE_NAMESPACE into SUBSCRIBE_NAMESPACE and SUBSCRIBE_TRACKS
(#1542)</t>
          </li>
          <li>
            <t>Remove Required Request ID (#1615)</t>
          </li>
          <li>
            <t>Add REDIRECT for request errors and established subscriptions (#1534)</t>
          </li>
          <li>
            <t>Allow GOAWAY on request streams to migrate individual requests (#1617)</t>
          </li>
          <li>
            <t>Add Request ID to GOAWAY (#1559)</t>
          </li>
          <li>
            <t>Remove PUBLISH_OK message type, make it a REQUEST_OK alias (#1611)</t>
          </li>
          <li>
            <t>Generalize stream reset codes to all request streams, add new codes,
align with PUBLISH_DONE (#1606)</t>
          </li>
          <li>
            <t>Add Track Properties to REQUEST_OK (#1576)</t>
          </li>
          <li>
            <t>Add support for mandatory-to-understand track extensions (#1509)</t>
          </li>
          <li>
            <t>Exclude your own tracks from SUBSCRIBE_NAMESPACE (#1596)</t>
          </li>
          <li>
            <t>Add Session-Level Tracks reserved namespace (#1562)</t>
          </li>
          <li>
            <t>Allow coalescing REQUEST_UPDATE processing (#1540)</t>
          </li>
          <li>
            <t>SUBSCRIBE takes precedence over SUBSCRIBE_NAMESPACE at relay (#1533)</t>
          </li>
          <li>
            <t>Don't close the Session for unknown errors (#1561)</t>
          </li>
          <li>
            <t>Clarify REQUEST_UPDATE failure behavior for all request types (#1539)</t>
          </li>
          <li>
            <t>Clarify SUBSCRIBE_NAMESPACE stream closure semantics (#1541)</t>
          </li>
          <li>
            <t>FETCH to a track with no objects returns INVALID_RANGE (#1537)</t>
          </li>
          <li>
            <t>Clarify FETCH_OK End Location semantics (#1536)</t>
          </li>
          <li>
            <t>Clarify definition of scope (#1629)</t>
          </li>
          <li>
            <t>Clarify Joining Fetch behavior:
            </t>
            <ul spacing="normal">
              <li>
                <t>Joining FETCH is unaffected by forward changing to 0 (#1620)</t>
              </li>
              <li>
                <t>Joining Fetch forward state mismatch is a request error (#1609)</t>
              </li>
              <li>
                <t>Clarify Joining Fetch ordering with Forward State transitions (#1577)</t>
              </li>
            </ul>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Make Object ID and Group ID delta encoded in Fetch responses (#1586)</t>
          </li>
          <li>
            <t>Add FIRST_OBJECT bit to SUBGROUP_HEADER type (#1618)</t>
          </li>
          <li>
            <t>Split DELIVERY_TIMEOUT into two types of timeout (#1605)</t>
          </li>
          <li>
            <t>FILL_TIMEOUT parameter (#1490)</t>
          </li>
          <li>
            <t>Forbid relays from lying about LARGEST_OBJECT (#1621)</t>
          </li>
          <li>
            <t>Allow publisher to reopen subgroup after REQUEST_UPDATE forward 0-&gt;1
(#1583)</t>
          </li>
          <li>
            <t>Allow 7-byte varint and non-minimal encodings (#1595)</t>
          </li>
          <li>
            <t>Padding streams and datagrams (#1475)</t>
          </li>
          <li>
            <t>Close session when delta encoding wraps (#1560)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Clarify Object existence and cross-source contradictions (#1566)</t>
          </li>
          <li>
            <t>Clarify immutable track properties (#1535)</t>
          </li>
          <li>
            <t>Improve Startup Latency and 0-RTT guidance (#1544)</t>
          </li>
          <li>
            <t>Improve Security Considerations section (#1625)</t>
          </li>
          <li>
            <t>Rewrite abstract and introduction (#1556)</t>
          </li>
          <li>
            <t>Define textual aliases for REQUEST_OK by request type (#1610)</t>
          </li>
          <li>
            <t>Add IANA registry for Setup Options (#1564)</t>
          </li>
          <li>
            <t>Add provisional registry for LOC properties (#1624)</t>
          </li>
          <li>
            <t>Update MOQ Properties registration policies (#1525)</t>
          </li>
          <li>
            <t>Add stream type column to message type table (#1555)</t>
          </li>
          <li>
            <t>Fix grease examples to match 0x7f multiplier (#1569)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-16">
        <name>Since draft-ietf-moq-transport-16</name>
        <t><strong>Session and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Change control stream from bidi to a pair of uni streams (#1510)</t>
          </li>
          <li>
            <t>Collapse CLIENT_SETUP and SERVER_SETUP into a single SETUP message (#1510)</t>
          </li>
          <li>
            <t>Move requests to bidirectional streams; remove cancel messages (#1389)</t>
          </li>
          <li>
            <t>Remove MAX_REQUEST_ID/REQUESTS_BLOCKED (#1471)</t>
          </li>
          <li>
            <t>New variable-length integer encoding (#1016)</t>
          </li>
          <li>
            <t>Encode Message Parameters as Type-Value pairs (#1462)</t>
          </li>
          <li>
            <t>Add GREASE for Setup Options, Properties, and error code registries (#1460)</t>
          </li>
          <li>
            <t>Add RENDEZVOUS_TIMEOUT parameter for SUBSCRIBE (#1447)</t>
          </li>
          <li>
            <t>Add PUBLISH_BLOCKED message for SUBSCRIBE_NAMESPACE flow control (#1452)</t>
          </li>
          <li>
            <t>Add Timeout field to GOAWAY message (#1497)</t>
          </li>
          <li>
            <t>Add GOING_AWAY to REQUEST_ERROR codes (#1434)</t>
          </li>
          <li>
            <t>Add EXCESSIVE_LOAD error code (#1479)</t>
          </li>
          <li>
            <t>Add NAMESPACE_TOO_LARGE error and stream reset for large namespaces (#1496)</t>
          </li>
          <li>
            <t>Add TOO_FAR_BEHIND stream reset code (#1445)</t>
          </li>
          <li>
            <t>Add REQUEST_UPDATE to list of REQUEST_ERROR causes (#1466)</t>
          </li>
          <li>
            <t>Enforce REQUEST_OK/ERROR as first message on the response stream (#1499)</t>
          </li>
          <li>
            <t>Allow joining FETCH for PUBLISH and REQUEST_UPDATE with forward=1 (#1335)</t>
          </li>
          <li>
            <t>Allow DELIVERY_TIMEOUT value of 0 to mean no timeout (#1450)</t>
          </li>
          <li>
            <t>Allow zero-element namespaces (#1472)</t>
          </li>
          <li>
            <t>Clarify EXPIRES parameter update mechanism (#1448)</t>
          </li>
          <li>
            <t>Remove TRACK_STATUS from REQUEST_UPDATE (#1436)</t>
          </li>
          <li>
            <t>Define how to use auth token cache safely with multiple streams (#1430)</t>
          </li>
          <li>
            <t>Constrain encoding/parsing of track namespace and names (#1512)</t>
          </li>
          <li>
            <t>Reserve Property type ranges for application-specific use (#1473)</t>
          </li>
          <li>
            <t>Make EndGroup in Subscription Filters a delta (#1470)</t>
          </li>
          <li>
            <t>Copy DELIVERY_TIMEOUT min requirement from parameter to property (#1427)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Clarify prior Object semantics after End of Range indicators in FETCH (#1513)</t>
          </li>
          <li>
            <t>Clarify datagram status and properties cases (#1444)</t>
          </li>
          <li>
            <t>Clarify Stream Count includes empty subgroups (#1449)</t>
          </li>
          <li>
            <t>Clarify language for malformed tracks in a subgroup with END_OF_GROUP (#1464)</t>
          </li>
          <li>
            <t>Properties can appear in mutable list or inside Immutable Properties (#1442)</t>
          </li>
          <li>
            <t>Clarify immutable property preservation requirements (#1441)</t>
          </li>
          <li>
            <t>Clarification for Track Alias uniqueness (#1418)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Rename Setup Parameters to Setup Options (#1461)</t>
          </li>
          <li>
            <t>Rename Extension Headers to Properties (#1504)</t>
          </li>
          <li>
            <t>Add security/privacy considerations for MOQT_IMPLEMENTATION (#1511)</t>
          </li>
          <li>
            <t>Add editorial text on bandwidth probing techniques (#1477)</t>
          </li>
          <li>
            <t>Explain idle connection handling (#1443)</t>
          </li>
          <li>
            <t>Fix "SUBSCRIBE_NAMESPACE with short prefixes" (#1502)</t>
          </li>
          <li>
            <t>Add generative AI disclosure per IRTF guidelines</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-15">
        <name>Since draft-ietf-moq-transport-15</name>
        <t><strong>Setup and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Delta encode Key-Value-Pairs for Parameters and Headers (#1315)</t>
          </li>
          <li>
            <t>Use Request ID in PUBLISH_NAMESPACE_{DONE/CANCEL} (#1329)</t>
          </li>
          <li>
            <t>Remove delivery related params from TRACK_STATUS for Subscribers (#1325)</t>
          </li>
          <li>
            <t>PUBLISH does not imply PUBLISH_NAMESPACE (#1364)</t>
          </li>
          <li>
            <t>Allow Start Location to decrease in SUBSCRIBE_UPDATE (#1323)</t>
          </li>
          <li>
            <t>Change SUBSCRIBE_UPDATE to REQUEST_UPDATE and expand ability to update (#1332)</t>
          </li>
          <li>
            <t>Put SUBSCRIBE_NAMESPACE on a stream, make Namespaces and PUBLISH independent
(#1344)</t>
          </li>
          <li>
            <t>Require NAMESPACE before NAMESPACE_DONE (#1392)</t>
          </li>
          <li>
            <t>Allow the '*' or the empty namespace in SUBSCRIBE_NAMESPACE (#1393)</t>
          </li>
          <li>
            <t>Relays match SUBSCRIBE to both Tracks and Namespaces (#1397)</t>
          </li>
          <li>
            <t>Clarify sending requests after sending GOAWAY (#1398)</t>
          </li>
          <li>
            <t>Add Retry Interval to REQUEST_ERROR (#1339)</t>
          </li>
          <li>
            <t>Add Extension Headers to PUBLISH, SUBSCRIBE_OK, and FETCH_OK (#1374)</t>
          </li>
          <li>
            <t>Move track properties to extensions, scope parameters (#1390)</t>
          </li>
          <li>
            <t>Add LARGEST_OBJECT parameter to TRACK_STATUS (#1367)</t>
          </li>
          <li>
            <t>Duplicate subscription processing (#1341)</t>
          </li>
          <li>
            <t>Address Track Name/Namespace edge cases (#1399)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Enable mixing datagrams with streams in one track (#1350)</t>
          </li>
          <li>
            <t>Clarify datagrams and subgroups (#1382)</t>
          </li>
          <li>
            <t>Redo the way we deal with missing Objects and Object Status (#1342)</t>
          </li>
          <li>
            <t>Allow unknown ranges in a FETCH response (#1331)</t>
          </li>
          <li>
            <t>Do not reopen subgroups after delivery timeout or STOP_SENDING (#1396)</t>
          </li>
          <li>
            <t>Clarify handling of unknown extensions (#1395)</t>
          </li>
          <li>
            <t>Clarify Delivery Timeout for datagrams (#1406)</t>
          </li>
          <li>
            <t>Disallow DELIVERY_TIMEOUT=0 (#1330)</t>
          </li>
          <li>
            <t>Malformed track due to multiple priorities for one subgroup (#1317)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Subscribers can migrate networks too (#1410)</t>
          </li>
          <li>
            <t>Rename Version Specific Parameters to Message Parameters (#1411)</t>
          </li>
          <li>
            <t>Clarify valid joining fetch subscription states (#1363)</t>
          </li>
          <li>
            <t>Formatting names for logs (#1355)</t>
          </li>
          <li>
            <t>A Publisher might not use the congestion window (#1408)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-14">
        <name>Since draft-ietf-moq-transport-14</name>
        <t><strong>Setup and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Always use ALPN for version negotiation (#499)</t>
          </li>
          <li>
            <t>Consolidate all the Error Message types (#1159)</t>
          </li>
          <li>
            <t>Change MOQT IMPLEMENTATION code point to 0x7 (#1191)</t>
          </li>
          <li>
            <t>Add Forward to SUBSCRIBE_NAMESPACE (#1220)</t>
          </li>
          <li>
            <t>Parameters for Group Order, Subscribe Priority and Subscription Filter (redo) (#1273)</t>
          </li>
          <li>
            <t>REQUEST_OK message (#1274)</t>
          </li>
          <li>
            <t>Subscribe Update Acknowledgements (#1275)</t>
          </li>
          <li>
            <t>Disallow DELETE and USE_ALIAS in CLIENT_SETUP (#1277)</t>
          </li>
          <li>
            <t>Remove Expires field from SUBSCRIBE_OK (#1282)</t>
          </li>
          <li>
            <t>Make Forward a Parameter (#1283)</t>
          </li>
          <li>
            <t>Allow SUBSCRIBE_UPDATE to increase the end location (#1288)</t>
          </li>
          <li>
            <t>Add default port for raw QUIC (#1289)</t>
          </li>
          <li>
            <t>Unsubscribe Namespace should be linked to Subscribe Namespace (#1292)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Fetch Object serialization optimization (#949)</t>
          </li>
          <li>
            <t>Make default PUBLISHER PRIORITY a parameter, optional in Subgroup/Datagram (#1056)</t>
          </li>
          <li>
            <t>Allow datagram status with object ID=0 (#1197)</t>
          </li>
          <li>
            <t>Disallow object extension headers in all non-Normal status objects (#1266)</t>
          </li>
          <li>
            <t>Objects for malformed track must not be cached (#1290)</t>
          </li>
          <li>
            <t>Remove NO_OBJECTS fetch error code (#1303)</t>
          </li>
          <li>
            <t>Clarify what happens when max_cache_duration parameter is omitted (#1287)</t>
          </li>
        </ul>
        <t><strong>Notable Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Rename Request ID field in MAX_REQUEST_ID (#1250)</t>
          </li>
          <li>
            <t>Define and draw subscription state machine (#1296)</t>
          </li>
          <li>
            <t>Omitting a subgroup object necessitates reset (#1295)</t>
          </li>
          <li>
            <t>Define duplication rules for header extensions (#1293)</t>
          </li>
          <li>
            <t>Clarify joining fetch end location (#1286)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-13">
        <name>Since draft-ietf-moq-transport-13</name>
        <t><strong>Setup and Control Plane</strong></t>
        <ul spacing="normal">
          <li>
            <t>Add an AUTHORITY parameter (#1058)</t>
          </li>
          <li>
            <t>Add a free-form SETUP parameter identifying the implementation (#1114)</t>
          </li>
          <li>
            <t>Add a Request ID to SUBSCRIBE_UDPATE (#1106)</t>
          </li>
          <li>
            <t>Indicate which params can appear PUBLISH* messages (#1071)</t>
          </li>
          <li>
            <t>Add TRACK_STATUS to the list of request types affected by GOAWAY (#1105)</t>
          </li>
        </ul>
        <t><strong>Data Plane Wire Format and Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Delta encode Object IDs within Subgroups (#1042)</t>
          </li>
          <li>
            <t>Use a bit in Datagram Type to convey Object ID = 0 (#1055)</t>
          </li>
          <li>
            <t>Corrected missed code point updates to Object Datagram Status (#1082)</t>
          </li>
          <li>
            <t>Merge OBJECT_DATAGRAM and OBJECT_DATAGRAM_STATUS description (#1179)</t>
          </li>
          <li>
            <t>Objects are not schedulable if flow-control blocked (#1054)</t>
          </li>
          <li>
            <t>Clarify DELIVERY_TIMEOUT reordering computation (#1120)</t>
          </li>
          <li>
            <t>Receiving unrequested Objects (#1112)</t>
          </li>
          <li>
            <t>Clarify End of Track (#1111)</t>
          </li>
          <li>
            <t>Malformed tracks apply to FETCH (#1083)</t>
          </li>
          <li>
            <t>Remove early FIN from the definition of malformed tracks (#1096)</t>
          </li>
          <li>
            <t>Prior Object ID Gap Extension header (#939)</t>
          </li>
          <li>
            <t>Add Extension containing immutable extensions (#1025)</t>
          </li>
        </ul>
        <t><strong>Relay Handling</strong></t>
        <ul spacing="normal">
          <li>
            <t>Explain FETCH routing for relays (#1165)</t>
          </li>
          <li>
            <t><bcp14>MUST</bcp14> for multi-publisher relay handling (#1115)</t>
          </li>
          <li>
            <t>Filters don't (usually) determine the end of subscription (#1113)</t>
          </li>
          <li>
            <t>Allow self-subscriptions (#1110)</t>
          </li>
          <li>
            <t>Explain Namespace Prefix Matching in more detail (#1116)</t>
          </li>
        </ul>
        <t><strong>Explanatory</strong></t>
        <ul spacing="normal">
          <li>
            <t>Explain Modularity of MOQT (#1107)</t>
          </li>
          <li>
            <t>Explain how to resume publishing after losing state (#1087)</t>
          </li>
        </ul>
        <t><strong>Major Editorial Changes</strong></t>
        <ul spacing="normal">
          <li>
            <t>Rename ANNOUNCE to PUBLISH_NAMESPACE (#1104)</t>
          </li>
          <li>
            <t>Rename SUBSCRIBE_DONE to PUBLISH_DONE (#1108)</t>
          </li>
          <li>
            <t>Major FETCH Reorganization (#1173)</t>
          </li>
          <li>
            <t>Reformat Error Codes (#1091)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-12">
        <name>Since draft-ietf-moq-transport-12</name>
        <ul spacing="normal">
          <li>
            <t>TRACK_STATUS_REQUEST and TRACK_STATUS have changed to directly mirror
SUBSCRIBE/OK/ERROR (#1015)</t>
          </li>
          <li>
            <t>SUBSCRIBE_ANNOUNCES was renamed back to SUBSCRIBE_NAMESPACE (#1049)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-11">
        <name>Since draft-ietf-moq-transport-11</name>
        <ul spacing="normal">
          <li>
            <t>Move Track Alias from SUBSCRIBE to SUBSCRIBE_OK (#977)</t>
          </li>
          <li>
            <t>Expand cases FETCH_OK returns Invalid Range (#946) and clarify fields (#936)</t>
          </li>
          <li>
            <t>Add an error code to FETCH_ERROR when an Object status is unknown (#825)</t>
          </li>
          <li>
            <t>Rename Latest Object to Largest Object (#1024) and clarify what to
do when it's incomplete (#937)</t>
          </li>
          <li>
            <t>Explain Malformed Tracks and what to do with them (#938)</t>
          </li>
          <li>
            <t>Allow End of Group to be indicated in a normal Object (#1011)</t>
          </li>
          <li>
            <t>Relays <bcp14>MUST</bcp14> have an upstream subscription to send SUBSCRIBE_OK (#1017)</t>
          </li>
          <li>
            <t>Allow AUTHORIZATION TOKEN in CLIENT_SETUP, SERVER_SETUP and
other fixes (#1013)</t>
          </li>
          <li>
            <t>Add PUBLISH for publisher initiated subscriptions (#995) and
fix the PUBLISH codepoints (#1048, #1051)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-moq-transport-10">
        <name>Since draft-ietf-moq-transport-10</name>
        <ul spacing="normal">
          <li>
            <t>Added Common Structure definitions - Location, Key-Value-Pair and Reason
Phrase</t>
          </li>
          <li>
            <t>Limit lengths of all variable length fields, including Track Namespace and Name</t>
          </li>
          <li>
            <t>Control Message length is now 16 bits instead of variable length</t>
          </li>
          <li>
            <t>Subscribe ID became Request ID, and was added to most control messages. Request ID
is used to correlate OK/ERROR responses for ANNOUNCE, SUBSCRIBE_NAMESPACE,
and TRACK_STATUS.  Like Subscribe ID, Request IDs are flow controlled.</t>
          </li>
          <li>
            <t>Explain rules for caching in more detail</t>
          </li>
          <li>
            <t>Changed the SETUP parameter format for even number parameters to match the
Object Header Extension format</t>
          </li>
          <li>
            <t>Rotated SETUP code points</t>
          </li>
          <li>
            <t>Added Parameters to TRACK_STATUS and TRACK_STATUS_REQUEST</t>
          </li>
          <li>
            <t>Clarified how subscribe filters work</t>
          </li>
          <li>
            <t>Added Next Group Filter to SUBSCRIBE</t>
          </li>
          <li>
            <t>Added Forward flag to SUBSCRIBE</t>
          </li>
          <li>
            <t>Renamed FETCH_OK field to End and clarified how to set it</t>
          </li>
          <li>
            <t>Added Absolute Joining Fetch</t>
          </li>
          <li>
            <t>Clarified No Error vs Invalid Range FETCH_ERROR cases</t>
          </li>
          <li>
            <t>Use bits in SUBGROUP_HEADER and DATAGRAM* types to compress subgroup ID and
extensions</t>
          </li>
          <li>
            <t>Coalesced END_OF_GROUP and END_OF_TRACK_AND_GROUP status</t>
          </li>
          <li>
            <t>Objects that Do Not Exist cannot have extensions when sent on the wire</t>
          </li>
          <li>
            <t>Specified error codes for resetting data streams</t>
          </li>
          <li>
            <t>Defined an Object Header Extension for communicating a known Group ID gap</t>
          </li>
          <li>
            <t>Replaced AUTHORIZATION_INFO with AUTHORIZATION_TOKEN, which has more structure,
compression, and additional Auth related error codes (#760)</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA8S97XYbR5I2+D+vokb6YckDwJJsd7fl/hhapGy+I4kckrK7
t6ePWASKZLVBFBtVEMWWNdey17JXthFPRGRGVhUoeWb2rM+ZHhFAVX5Fxnc8
MZ1OQ1d3y+ppce9ltajLonlbrYv/eL3/rDhZl6v2ull390J5drau3j4trpp/
TDv7OCya+aq8okcX6/K8m9ZVdz7NfjF98jgsyo5+8X5352TvQ5jTHxfN+vZp
0XaLEOrr9dOiW2/a7smjR988ehLKdVU+LYp7P1VnRblaFPurrlqvqs7Ppd2c
XdVtWzerk9trevX+3snzcNOsf75YN5vruI4DW8e98HN1S98vnoZiWlylRf5j
U8/D22q1qeibYuvTRdFhnHs/0Rj16qL4nn/Jn1+V9ZI+pyX/G6991qwv+ONy
Pb+kjy+77rp9+sUX/Cv+qH5bzexnX/AHX5ytm5u2+oKe/4Kfu6i7y82ZvHB6
c/FFtpX8gyXtXtv5V+OHM3lwVjf5I19sO5bZZXe1vBdC29EevymXzYqWd1u1
ob0q192bf2waGudpsWrCdf20+GvXzCdFS8+tq/OW/nV7Jf+g478qr69pS/4W
QrnpLps1b+SU/q8o6hW94XhWvKIhyp839GJ8LPRyvLks2/5XtC3lqv5n2dHJ
Pi2e1e28weeVbHO7kp//25y/mc2bq5AP9uOs+LFs62VdvXVD/VjPu2adf5OP
9H3TXCwrP9Rb/vHbt/92gW9GhtqfFcc3Vde5cfbLlfvsYyPUdBL8Yz8Ef71u
+CYSBdKce2PuzIrn63q1qJZLN+zOksbNPs+Hfll1pR+4POff/tsVfbxl0FWz
vqKH3+JS8A14Whw9f/bNo0eP6G+6l/Em0pqnu6Do6U11BuKaMmF+Sfd6de7f
8mznxP2YSXH+FQ99eLjT+/x6Xb8t57fT67Jtp0xS9KvsB20136yraXP292re
tU9DmE6nRXnW0vDzLoSTy7plutxcVauuWFTn9apqi62MrXjw8uA/Th5OirK4
3pwt6/byC+Iu7Xxdn1Xhet0Q5TfLorssu2K9WbXuFcyc/GbMCn5TsazoF+UF
jdldVsV5VXY0W3ruPNDfbVXEK8j3aDO/LOga0Nyr8orvU9mVF2v8k/ahWddd
XdG/eahrupd1uQzralmXZ0TJ3a2O2FzTgHRdi7Omuyyum3rVTbtmin/g0e6S
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
TQ1sOwSbFK0NCwho17y/O6rAHGrip3wzoFgUawA5bunV7rxSQq4OWOzR+xjx
b43e/IdivRhG/R/9eoR6riwYZaOEX3w7sry9lmkXv05/vZ75tRhUZ7kHNpIH
1hkpNhr10hZeJC28GK5npy5uJLcuyb6wq0+A6F4fK0aDzJQ7NnEtBbEgMDOz
Cvm0iRVua4qY5EMO1dYTTXQmRmPgJ/aqczNZeKVel/X9CJYLfVB/X9T+IuOy
x8WUWgCXVJeTBbI5nMHCs4KTnhNEXN2CNDZaB4oEsVYBkZgFXETaOfoR5zr4
K5dmx+kPNSaEFeVNMXoCpkRP2pYULMckas7tzZXcHHx45mxKP9aK+NwhHTL8
w0kMmS5ns/Eh2wAXNKwm2lVTxTC2LxhgtNzqNCn6MoHAmN30h6RLgjmt43U2
Te3TctRQfYtfwzLIbOFIe0hsFhHZ88C0eSkyJGxR1hNVACYtorJJbUhfMt3o
TFjoviCLKpH4IL4tGHwZqRFjzya4Tvk26Khi5NK2ahg3i3prShBXty4cJFrM
qLVEdfGP50mkYBayvFU4WMnfyT9bz9WTDM2kCg4yRk6ZJ0mkq3VT2choTt/T
eGik72kUtKvviZZ3f9X3fIITb4l3gnPK7RNeDLD2BhBuKNShukb4NihkuDvi
TxPQNq4QjfqVZV6636NQVXMoC91c/Rv+ib3Tkk7ViUI80v84M1801nocz5c8
sWS+HnzEfCmK+W+brbRX2dl68FtnS50tmdkSv0I8W/LEktl6+BGzFbDRX6ob
o3/a3LJpw0tvXNH9QEdWZfT9+3EWscQrCLDzvGbU9+XuSIHO55FTBk93AI5c
RZvDY/AJw+UmJRHJ1GWX9OHnOQBQL/lyZz+/shyP52Sr69xxeC3PL1nnzfw6
Oy11M8vMr+JUebIT9Xd8ZORHlAVPvBaSxFu9BXL5eq1aC7mS4ozDtXbiE2n+
PnxTXQ/xw+FlWc/IuSI6x+feBmufuFvNIe/MdXZjbN5qY+hEm+dv3DLozVi6
YyiXMb9hKFHqFvvlUdgvppD247dLlDz4/6Pdkp/o7GZ59PttFkweMYkbnfwR
4041KST5VI+uA0oyAScfkwkYeelu4ZRyxvnU2kS3CBLepFVivFw4fLK5I5FH
2bKGDzTvlVDHUetG1jDzAmZblsxPyc5L/LyxoxozltigPcH+X1FJAkbAIHjd
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
i1M/rwbuoJ3Ofdl917PdoZfN1c6oe9W95tzD+oTQy9ZKvTSc0VTC8OT0/Ffp
Zfsb74vpjy8Netn5xjMy1XDMivZWfI1c5qcxE+llf6VeWuryRLt78E13N3js
414O/4V9ifpBL92VeqHSTO+7Z781/PTSy9uVemm3wvm51I12da/dd60lWITX
xBVY/iqXSf86o2FW8wyTEFYTTf5b2MPmc+3bqI1pv/Vc+6i4e7P99nPtn3mW
O8+1f+Yp7T7X3lQua1v/3vPjR/Ci9faHz7WPqws3z2/jmfZRQeGW899cef+5
/Fa9/daz9y8Uym27P8/NP65t27w/z7VvqecatX9u/a316E377Wfa++Lazf95
J+FT7VtKvUbtd1c8f/F1Nsbfe27+f5XktpSxUieirWK1hOA+T2iXkNnnyesS
6mqoaks92qVE1RDTpc1srVb7Bp5p1kKCDOlbPlpcDVGb7T7TTOun1i7K3nNb
EpUt9c0Onh2tQR4NWVzarIUqGWq0tNkyL94q9/iJmqbNAmvLxYd/+UL/lTsd
X+uWEqx/8rhpqHJaP//NZ9s2HOL1C/5E21pVUUugnm3bzqGtvrm8bcsbiZ/J
E23bK3pa3XJ523apBBdxhbZtEoXVI5e3befmVmNb3vZffjxstaKEy3JWJb+/
4YTMfPRvL26zcZW/kHQ7D1vmBi3uyPh2XwC/u6hCNQ2q5FlMKpQbZUxFyg83
IaeERTctK9fxm/TX7uAildIw7OgcDxezcf7Y+ZLNyNfvOjhdfMrTI/y6lg4+
XP6URA0+TRduUp3Zorrn738uZuRWuaCf19IzAu1I32Wzu7W0O84m6cmM5jIe
r6V/IxdHcpRP/plNSvh4/kboy7/mRVU9ZJM1jyw+iKf4j3xC9rgK/liCMJpx
LRsMnxwtxoTI+Df5aC29XBDA7xl5uz4tHjKA4qRH98hFdvP5aVHM84dMoHM4
rk9SP6henpr3KFNkdsflb4tZ6vcQLgZOsp4rYh37jIGK4WYYMKJxiEtSL2wB
vnxSzh4oVTZ7AGgRwCCA4y3lELLJYzLNy+lYQDiDN5Z/1aTXUSjuJvhRinBV
KaSXXyCqgXbHRfo2v8sn7r+P7rMZpZT+PCO8dfxQ2zP6Ld5t98vfYKj/CfeF
/kmHnMohu3/b2+H+aS4XFdzMZnRbjt2P9K/iE1U3uSNORf8s0393bGROH/5K
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
UdFTnZV2vS+/QxbR/wXos2bfG0oEAA==

-->

</rfc>
