<?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.19 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-thomson-scone-train-protocol-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title abbrev="TRAIN Protocol">Transparent Rate Adaptation Indications for Networks (TRAIN) Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-thomson-scone-train-protocol-00"/>
    <author fullname="Martin Thomson">
      <organization>Mozilla</organization>
      <address>
        <email>mt@lowentropy.net</email>
      </address>
    </author>
    <author fullname="Christian Huitema">
      <organization>Private Octopus Inc.</organization>
      <address>
        <email>huitema@huitema.net</email>
      </address>
    </author>
    <author fullname="奥 一穂" asciiFullname="Kazuho Oku">
      <organization>Fastly</organization>
      <address>
        <email>kazuhooku@gmail.com</email>
      </address>
    </author>
    <date year="2024" month="October" day="15"/>
    <keyword>chugga chugga chugga chugga</keyword>
    <keyword>mitm</keyword>
    <abstract>
      <?line 49?>

<t>On-path network elements can sometimes be configured to apply rate limits to
flows that pass them.  This document describes a method for signaling to
endpoints that rate limiting policies are in force and approximately what that
rate limit is.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://martinthomson.github.io/train-protocol/draft-thomson-train-protocol.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-thomson-scone-train-protocol/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/martinthomson/train-protocol"/>.</t>
    </note>
  </front>
  <middle>
    <?line 57?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Many access networks limit the maximum data rate that attached devices are able
to attain.  This is often done without any indication to the applications
running on devices.  The result can be that application performance is degraded,
as the manner in which rate limits are enforced can be incompatible with the
rate estimation or congestion control algorithms used at endpoints.</t>
      <t>Having the network indicate what its rate limiting policy is, in a way that is
accessible to endpoints, might allow applications to use this inforation when
adapting their send rate.</t>
      <t>The Transparent Rate Adaptation Indications for Networks (TRAIN) protocol is
negotiated by QUIC endpoints.  This protocol provides a means for network
elements to signal the maximum available sustained throughput, or rate limits,
for flows of UDP datagrams that transit that network element to a QUIC endpoint.</t>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>QUIC endpoints can negotiate the use of TRAIN by including a transport parameter
(<xref target="tp"/>) in the QUIC handshake.  Endpoints then occasionally coalesce a TRAIN
packet with ordinary QUIC packets that they send.</t>
      <t>Network elements that have rate limiting policies can detect flows that include
TRAIN packets.  The network element can indicate a maximum sustained throughput
by modifying the TRAIN packet as it transits the network element.</t>
      <artset>
        <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="192" width="472" viewBox="0 0 472 192" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
            <path d="M 8,32 L 8,80" fill="none" stroke="black"/>
            <path d="M 40,80 L 40,176" fill="none" stroke="black"/>
            <path d="M 80,32 L 80,80" fill="none" stroke="black"/>
            <path d="M 120,32 L 120,80" fill="none" stroke="black"/>
            <path d="M 160,80 L 160,176" fill="none" stroke="black"/>
            <path d="M 200,32 L 200,80" fill="none" stroke="black"/>
            <path d="M 248,32 L 248,80" fill="none" stroke="black"/>
            <path d="M 288,80 L 288,176" fill="none" stroke="black"/>
            <path d="M 336,32 L 336,80" fill="none" stroke="black"/>
            <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
            <path d="M 120,32 L 200,32" fill="none" stroke="black"/>
            <path d="M 248,32 L 336,32" fill="none" stroke="black"/>
            <path d="M 8,80 L 80,80" fill="none" stroke="black"/>
            <path d="M 120,80 L 200,80" fill="none" stroke="black"/>
            <path d="M 248,80 L 336,80" fill="none" stroke="black"/>
            <path d="M 40,112 L 64,112" fill="none" stroke="black"/>
            <path d="M 128,112 L 152,112" fill="none" stroke="black"/>
            <path d="M 160,128 L 192,128" fill="none" stroke="black"/>
            <path d="M 256,128 L 280,128" fill="none" stroke="black"/>
            <polygon class="arrowhead" points="288,128 276,122.4 276,133.6" fill="black" transform="rotate(0,280,128)"/>
            <polygon class="arrowhead" points="160,112 148,106.4 148,117.6" fill="black" transform="rotate(0,152,112)"/>
            <g class="text">
              <text x="44" y="52">QUIC</text>
              <text x="160" y="52">Network</text>
              <text x="292" y="52">QUIC</text>
              <text x="44" y="68">Sender</text>
              <text x="160" y="68">Element</text>
              <text x="292" y="68">Receiver</text>
              <text x="96" y="116">TRAIN</text>
              <text x="228" y="116">TRAIN+rate</text>
              <text x="96" y="132">+QUIC</text>
              <text x="224" y="132">+QUIC</text>
              <text x="340" y="148">Validate</text>
              <text x="396" y="148">QUIC</text>
              <text x="444" y="148">packet</text>
              <text x="320" y="164">and</text>
              <text x="364" y="164">record</text>
              <text x="412" y="164">rate</text>
            </g>
          </svg>
        </artwork>
        <artwork type="ascii-art"><![CDATA[
+--------+    +---------+     +----------+
|  QUIC  |    | Network |     |   QUIC   |
| Sender |    | Element |     | Receiver |
+---+----+    +----+----+     +----+-----+
    |              |               |
    +--- TRAIN --->|   TRAIN+rate  |
    |    +QUIC     +---- +QUIC --->|
    |              |               |  Validate QUIC packet
    |              |               |  and record rate
    |              |               |
]]></artwork>
      </artset>
      <t>QUIC endpoints that receive modified TRAIN packets observe the indicated
version, process the QUIC packet, and then record the indicated rate.</t>
      <t>Indicated rate limits apply only in a single direction.  Separate indications
can be sent for the client-to-server direction and server-to-client direction.
The indicated rates do not need to be the same.</t>
      <t>Indicated rate limits only apply to the path on which they are received.  A
connection that migrates or uses multipath <xref target="QUIC-MP"/>
cannot assume that rate limit indications from one path apply to new paths.</t>
    </section>
    <section anchor="applicability">
      <name>Applicability</name>
      <t>This protocol only works for flows that use the TRAIN packet (<xref target="packet"/>).</t>
      <t>The protocol requires that packets are modified as they transit a
network element, which provides endpoints strong evidence that the network
element has the power to drop packets; though see <xref target="security"/> for potential
limitations on this.</t>
      <t>The rate limit signal that this protocol carries is independent of congestion
signals, limited to a single path and UDP packet flow, unidirectional, and
strictly advisory.</t>
      <section anchor="independent-of-congestion-signals">
        <name>Independent of Congestion Signals</name>
        <t>Rate limit signals are not a substitute for congestion feedback.  Congestion
signals, such as acknowledgments, provide information on loss, delay, or ECN
markings <xref target="ECN"/> that indicate the real-time condition of a network
path.  Congestion signals might indicate a throughput that is different from the
signaled rate limit.</t>
        <t>Endpoints cannot assume that a signaled rate limit is achievable if congestion
signals indicate otherwise.  Congestion could be experienced at a different
point on the network path than the network element that indicates a rate limit.
Therefore, endpoints need to respect the send rate constraints that are set by a
congestion controller.</t>
      </section>
      <section anchor="unspecified-scope">
        <name>Unspecified Scope</name>
        <t>Modifying a packet does not prove that the rate limit that is indicated would be
achievable.  A signal that is sent for a specific flow is likely enforced at a
different scope.  The extent of that scope is not carried in the signal.</t>
        <t>For instance, limits might apply at a network subscription level, such
that multiple flows receive the same signal.</t>
        <t>Endpoints can therefore be more confident in the rate limit signal as an
indication of the maximum achievable throughput than as any indication of
expected throughput.  That throughput will only be achievable when there is no
significant data flowing in the same scope.  In the presence of other flows,
congestion limits are likely to determine actual throughput.</t>
        <t>This makes the application of signals most usefully applied to a downlink flow
in access networks, close to an endpoint. In that case, capacity is less likely
to be split between multiple active flows.</t>
      </section>
      <section anchor="per-flow-signal">
        <name>Per-Flow Signal</name>
        <t>The same UDP address tuple might be used for multiple QUIC connections.  A
single signal might be lost or only reach a single application endpoint.
Network elements that signal about a flow might choose to send additional
signals, using connection IDs to indicate when new connections could be
involved.</t>
      </section>
      <section anchor="undirectional-signal">
        <name>Undirectional Signal</name>
        <t>The endpoint that receives a rate limit signal is not the endpoint that might
adapt its sending behavior as a result of receiving the signal.  This ensures
that the rate limit signal is attached to the flow that it is mostly likely to
apply to.</t>
        <t>An endpoint might need to communicate the value it receives to its peer in order
to ensure that the limit is respected.  This document does not define how that
signaling occurs as this is specific to the application in use.</t>
      </section>
      <section anchor="advisory-signal">
        <name>Advisory Signal</name>
        <t>A signal does not prove that a higher rate would not be successful.  Endpoints
that receive this signal therefore need to treat the information as advisory.</t>
        <t>As an advisory signal, network elements cannot assume that endpoints will
respect the signal.  Though this might reduce the need for more active rate
limiting, how rate limit enforcement is applied is a matter for network policy.</t>
        <t>The time and scope over which a rate limit applies is not specified.  The
effective rate limit might change without being signaled.  The signaled limit
can be assumed to apply to the flow of packets on the same UDP address tuple for
the duration of that flow.  Rate limiting policies often apply on the level of a
device or subscription, but endpoints cannot assume that this is the case.  A
separate signal can be sent for each flow.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="BCP14"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="packet">
      <name>TRAIN Packet</name>
      <t>A TRAIN packet is a QUIC long header packet that follows the QUIC invariants;
see <xref section="5.1" sectionFormat="of" target="INVARIANTS"/>.</t>
      <t><xref target="fig-train-packet"/> shows the format of the train packet using the conventions
from <xref section="4" sectionFormat="of" target="INVARIANTS"/>.</t>
      <figure anchor="fig-train-packet">
        <name>TRAIN Packet Format</name>
        <sourcecode type="artwork"><![CDATA[
TRAIN Packet {
  Header Form (1) = 1,
  Reserved (1),
  Rate Signal (6),
  Version (32) = 0xTBD,
  Destination Connection ID Length (8),
  Destination Connection ID (0..2040),
  Source Connection ID Length (8),
  Source Connection ID (0..2040),
}
]]></sourcecode>
      </figure>
      <t>The most significant bit (0x80) of the packet indicates that this is a QUIC long
header packet.  The next bit (0x40) is reserved and can be set according to
<xref target="QUIC-BIT"/>.</t>
      <t>The entire payload of the TRAIN packet is carried in the Rate Signal field that
forms the low 6 bits (0x3f) of the first byte.  Values for this field are
described in <xref target="rate-signal"/>.</t>
      <t>This packet includes a Destination Connection ID field that is set to the same
value as other packets in the same datagram; see <xref section="12.2" sectionFormat="of" target="QUIC"/>.</t>
      <t>The Source Connection ID field is set to match the Source Connection ID field of
any packet that follows.  If the next packet in the datagram does not have a
Source Connection ID field, which is the case for packets with a short header
(<xref section="5.2" sectionFormat="of" target="INVARIANTS"/>), the Source Connection ID field is empty.</t>
      <t>TRAIN packets <bcp14>SHOULD</bcp14> be included as the first packet in a datagram.  This is
necessary in many cases for QUIC versions 1 and 2 because packets with a short
header cannot precede any other packets.</t>
      <section anchor="rate-signal">
        <name>Rate Signals</name>
        <aside>
          <t>Note: The exact set of rates that are included is subject to negotiation.
We should aim to find typical rate limits that are used in real networks
and by real applications.</t>
        </aside>
        <t>The Rate Signal field of a TRAIN packet is set to 0xTBD when sent by a QUIC
endpoint.  Receiving value indicates that there is no rate limit in place or
that the TRAIN protocol is not supported by network elements on the path.</t>
        <t>The values from <xref target="_table-rates"/> are specified to carry a the corresponding rate
limit signal.</t>
        <table anchor="_table-rates">
          <name>Table of Rate Signals and Rate Limits</name>
          <thead>
            <tr>
              <th align="left">Rate Signal</th>
              <th align="left">Rate Limit</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0xTBD</td>
              <td align="left">X Mbps</td>
            </tr>
            <tr>
              <td align="left">0xTBD</td>
              <td align="left">X Mbps</td>
            </tr>
            <tr>
              <td align="left">0xTBD</td>
              <td align="left">X Mbps</td>
            </tr>
            <tr>
              <td align="left">0xTBD</td>
              <td align="left">X Mbps</td>
            </tr>
            <tr>
              <td align="left">0xTBD</td>
              <td align="left">X Mbps</td>
            </tr>
            <tr>
              <td align="left">0xTBD</td>
              <td align="left">X Mbps</td>
            </tr>
            <tr>
              <td align="left">0xTBD</td>
              <td align="left">X Mbps</td>
            </tr>
            <tr>
              <td align="left">0xTBD</td>
              <td align="left">X Mbps</td>
            </tr>
          </tbody>
        </table>
        <ul empty="true">
          <li>
            <t>TODO: Work out how reserved values can be used, if at all.</t>
          </li>
        </ul>
      </section>
      <section anchor="processing-train-packets">
        <name>Processing TRAIN Packets</name>
        <t>Processing a TRAIN packet involves reading the value from the Rate Signal field.
However, this value <bcp14>MUST NOT</bcp14> be used unless another packet from the same
datagram is successfully processed.  Therefore, a TRAIN packet always needs to
be coalesced with other QUIC packets.</t>
        <t>A TRAIN packet is defined by the use of the longer header bit (0x80 in the first
byte) and the TRAIN protocol version (0xTBD in the next four bytes).  A TRAIN
packet <bcp14>MAY</bcp14> be discarded, along with any packets that come after it in the same
datagram, if the Source Connection ID is not consistent with those coalesced
packets, as specified in <xref target="packet"/>.</t>
        <t>A TRAIN packet <bcp14>MUST</bcp14> be discarded if the Destination Connection ID does not match
one recognized by the receiving endpoint.</t>
      </section>
    </section>
    <section anchor="tp">
      <name>Negotiating TRAIN</name>
      <t>A QUIC endpoint indicates that it is willing to receive TRAIN packets by
including the train_supported transport parameter (0xTBD).</t>
      <t>This transport parameter is valid for QUIC versions 1 <xref target="QUIC"/> and 2
<xref target="QUICv2"/> and any other version that recognizes the versions,
transport parameters, and frame types registries established in Sections <xref target="QUIC" section="22.2" sectionFormat="bare"/>, <xref target="QUIC" section="22.3" sectionFormat="bare"/>, and <xref target="QUIC" section="22.4" sectionFormat="bare"/> of <xref target="QUIC"/>.</t>
    </section>
    <section anchor="deployment">
      <name>Deployment</name>
      <t>QUIC endpoints can enable the use of the TRAIN protocol by sending TRAIN packets
<xref target="packet"/>.  Network elements then apply or replace the Rate Signal field
(<xref target="apply"/>) according to their policies.</t>
      <section anchor="apply">
        <name>Applying Rate Limit Signals</name>
        <t>A network element detects a TRAIN packet by observing that a packet has a QUIC
long header and the TRAIN protocol version of 0xTBD.</t>
        <t>A network element then conditionally replaces the six bits of the Rate Signal
field with a value of its choosing.</t>
        <t>A network element might receive a packet that already includes a rate limit
signal.  If the network element wishes to signal a lower rate limit, they can
replace the Rate Signal field with a different value that indicates the lower
limit.  If the network element wishes to signal a higher rate limit, they leave
the Rate Signal field alone, preserving the signal from the network element that
has a lower rate limit policy.</t>
        <t>The following pseudocode indicates how a TRAIN packet might be detected and
replaced.  This assumes a target rate that is preconfigured and a means of
comparing the rate signal in the packet to the target rate signal.</t>
        <sourcecode type="pseudocode"><![CDATA[
target_rate_signal = rate_signal_for(target_rate)

is_long = packet[0] & 0x80 == 0x80
is_train = compare(packet[1..5], TRAIN_VERSION)
if is_long and is_train:
  packet_rate_signal = packet[0] & 0x3f
  if target_rate_signal.is_lower_than(packet_rate_signal):
    packet[0] = packet[0] & 0xc0 | target_rate_signal
]]></sourcecode>
        <aside>
          <t>TODO: When defining the signal values, make this comparison easy.</t>
        </aside>
      </section>
      <section anchor="extra-packets">
        <name>Providing Opportunities to Apply Rate Limit Signals</name>
        <t>Endpoints that wish to offer network elements the option to add rate limit
markings can send TRAIN packets at any time.  This is a decision that a sender
makes when constructing datagrams, so TRAIN packets can be sent as frequently as
the application requires.</t>
        <t>Endpoints <bcp14>MUST</bcp14> send any TRAIN packet they send as the first packet of a
datagram, coalesced with additional packets.  An endpoint that receives and
discards a TRAIN without also successfully processing another packets from the
same datagram <bcp14>SHOULD</bcp14> ignore any rate limit signal.  Such a datagram might be
entirely spoofed.</t>
      </section>
      <section anchor="feedback">
        <name>Feedback To Sender About Signals</name>
        <t>Information about rate limits is intended for the sending application.  Any
signal from network elements can be propagated to the receiving application
using an implementation-defined mechanism.</t>
        <t>This document does not define a means for indicating what was received.
That is, the expectation is that any signal is propagated to the application
for handling, not handled automatically by the transport layer.
How a receiving application communicates the rate limit signal to a
sending application will depend on the application in use.</t>
        <t>Different applications can choose different approaches. For example,
in an application where a receiver drives rate adaptation, it might
not be necessary to define additional signaling.</t>
        <t>A sender can use any acknowledgment mechanism provided by the QUIC version in
use to learn whether datagrams containing TRAIN packets were likely received.
This might help inform whether to send additional TRAIN packets in the event
that a datagram is lost. However, rather than relying on transport signals, an
application might be better able to indicate what has been received and
processed.</t>
        <t>TRAIN packets could be stripped from datagrams in the network, which cannot be
reliably detected.  This could result in a sender falsely believing that no
network element applied a rate limit signal.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>The modification of packets provides endpoints proof that a network element is
in a position to drop datagrams and thereby enforce the indicated rate limit.
<xref target="extra-packets"/> states that endpoints only accept signals if the datagram
contains a packet that it accepts to prevent an off-path attacker from inserting
spurious rate limit signals.</t>
      <t>Some off-path attackers may be able to both
observe traffic and inject packets. Attackers with such capabilities could
observe packets sent by an endpoint, create datagrams coalescing an
arbitrary TRAIN packet and the observed packet, and send these datagrams
such that they arrive at the peer endpoint before the original
packet. Spoofed packets that seek to advertise a higher limit
than might otherwise be permitted also need to bypass any
rate limiters. The attacker will thus get arbitrary TRAIN packets accepted by
the peer, with the result being that the endpoint receives a false
or misleading rate limit.</t>
      <t>The recipient of a rate limit signal therefore cannot guarantee that
the signal was generated by an on-path network element. However,
the capabilities required of an off-path attacker are substantially
similar to those of on path elements.</t>
      <t>The actual value of the rate limit signal is not authenticated.  Any signal
might be incorrectly set in order to encourage endpoints to behave in ways that
are not in their interests.  Endpoints are free to ignore limits that they think
are incorrect.  The congestion controller employed by a sender provides
real-time information about the rate at which the network path is delivering
data.</t>
      <t>Similarly, if there is a strong need to ensure that a rate limit is respected,
network elements cannot assume that the signaled limit will be respected by
endpoints.</t>
    </section>
    <section anchor="privacy">
      <name>Privacy Considerations</name>
      <t>The focus of this analysis is the extent to which observing TRAIN
packets could be used to gain information about endpoints.
This might be leaking details of how applications using QUIC
operate or leaks of endpoint identity when using additional
privacy protection, such as a VPN.</t>
      <t>Any network element that can observe the content of that packet can read the
rate limit that was applied.  Any signal is visible on the path, from the point
at which it is applied to the point at which it is consumed at an endpoint.
On path elements can also alter the TRAIN signal to try trigger specific
reactions and gain further knowledge.</t>
      <t>In the general case of a client connected to a server through the
Internet, we believe that TRAIN does not provide much advantage to attackers.
The identities of the clients and servers are already visible through their
IP addresses. Traffic analysis tools already provide more information than
the data rate limits set by TRAIN.</t>
      <t>There are two avenues of attack that require more analysis:</t>
      <ul spacing="normal">
        <li>
          <t>that the passive observation of TRAIN packets might help identify or
distinguish endpoints; and</t>
        </li>
        <li>
          <t>that active manipulation of TRAIN signals might help reveal the
identity of endpoints that are otherwise hidden behind VPNs or proxies.</t>
        </li>
      </ul>
      <section anchor="passive-attacks">
        <name>Passive Attacks</name>
        <t>If only few clients and server pairs negotiate the usage of TRAIN, the
occasional observation of TRAIN packets will "stick out". That observation,
could be combined with observation of timing and volume of traffic to
help identify the endpoint or categorize the application that they
are using.</t>
        <t>A variation of this issue occurs if TRAIN is widely implemented, but
only used in some specific circumstances. In that case, observation of
TRAIN packets reveals information about the state of the endpoint.</t>
        <t>If multiple servers are accessed through the same front facing server,
Encrypted Client Hello (ECH) may be used to prevent outside parties to
identify which specific server a client is using. However, if only
a few of these servers use TRAIN, any TRAIN packets
will help identify which specific server a client is using.</t>
        <t>This issue will be mitigated if TRAIN becomes widely implemented, and
if the usage of TRAIN is not limited to the type of applications
that make active use of the signal.</t>
        <t>QUIC implementations are therefore encouraged to make the feature available
unconditionally.  Endpoints might send TRAIN packets whenever a peer can accept
them.</t>
      </section>
      <section anchor="active-attacks">
        <name>Active Attacks</name>
        <t>Suppose a configuration in which multiple clients use a VPN or proxy
service to access the same server. The attacker sees the IP addresses
in the packets behind VPN and proxy and also between the users and the VPN,
but it does not know which VPN address corresponds to what user address.</t>
        <t>Suppose now that the attacker selects a flow on the link between the
VPN/proxy and server. The attacker applies rate limit signals to TRAIN packets
in that flow. The attacker chooses a bandwidth that is
lower than the "natural" bandwidth of the connection. A reduction
in the rate of flows between client and VPN/proxy might allow
the attacker to link the altered flow to the client.</t>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="256" width="448" viewBox="0 0 448 256" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
              <path d="M 8,96 L 8,128" fill="none" stroke="black"/>
              <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
              <path d="M 80,32 L 80,64" fill="none" stroke="black"/>
              <path d="M 80,96 L 80,128" fill="none" stroke="black"/>
              <path d="M 80,160 L 80,192" fill="none" stroke="black"/>
              <path d="M 200,64 L 200,160" fill="none" stroke="black"/>
              <path d="M 264,64 L 264,160" fill="none" stroke="black"/>
              <path d="M 312,144 L 312,176" fill="none" stroke="black"/>
              <path d="M 368,80 L 368,144" fill="none" stroke="black"/>
              <path d="M 440,80 L 440,144" fill="none" stroke="black"/>
              <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
              <path d="M 88,48 L 136,48" fill="none" stroke="black"/>
              <path d="M 8,64 L 80,64" fill="none" stroke="black"/>
              <path d="M 200,64 L 264,64" fill="none" stroke="black"/>
              <path d="M 152,80 L 192,80" fill="none" stroke="black"/>
              <path d="M 368,80 L 440,80" fill="none" stroke="black"/>
              <path d="M 8,96 L 80,96" fill="none" stroke="black"/>
              <path d="M 272,94 L 360,94" fill="none" stroke="black"/>
              <path d="M 272,98 L 360,98" fill="none" stroke="black"/>
              <path d="M 88,112 L 192,112" fill="none" stroke="black"/>
              <path d="M 272,110 L 360,110" fill="none" stroke="black"/>
              <path d="M 272,114 L 360,114" fill="none" stroke="black"/>
              <path d="M 8,128 L 80,128" fill="none" stroke="black"/>
              <path d="M 272,126 L 360,126" fill="none" stroke="black"/>
              <path d="M 272,130 L 360,130" fill="none" stroke="black"/>
              <path d="M 152,144 L 192,144" fill="none" stroke="black"/>
              <path d="M 368,144 L 440,144" fill="none" stroke="black"/>
              <path d="M 8,160 L 80,160" fill="none" stroke="black"/>
              <path d="M 200,160 L 264,160" fill="none" stroke="black"/>
              <path d="M 88,174 L 136,174" fill="none" stroke="black"/>
              <path d="M 88,178 L 136,178" fill="none" stroke="black"/>
              <path d="M 8,192 L 80,192" fill="none" stroke="black"/>
              <path d="M 136,192 L 152,224" fill="none" stroke="black"/>
              <path d="M 136,48 L 152,80" fill="none" stroke="black"/>
              <path d="M 136,176 L 152,144" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="368,128 356,122.4 356,133.6" fill="black" transform="rotate(0,360,128)"/>
              <polygon class="arrowhead" points="368,112 356,106.4 356,117.6" fill="black" transform="rotate(0,360,112)"/>
              <polygon class="arrowhead" points="368,96 356,90.4 356,101.6" fill="black" transform="rotate(0,360,96)"/>
              <polygon class="arrowhead" points="320,144 308,138.4 308,149.6" fill="black" transform="rotate(270,312,144)"/>
              <polygon class="arrowhead" points="280,128 268,122.4 268,133.6" fill="black" transform="rotate(180,272,128)"/>
              <polygon class="arrowhead" points="280,112 268,106.4 268,117.6" fill="black" transform="rotate(180,272,112)"/>
              <polygon class="arrowhead" points="280,96 268,90.4 268,101.6" fill="black" transform="rotate(180,272,96)"/>
              <polygon class="arrowhead" points="200,144 188,138.4 188,149.6" fill="black" transform="rotate(0,192,144)"/>
              <polygon class="arrowhead" points="200,112 188,106.4 188,117.6" fill="black" transform="rotate(0,192,112)"/>
              <polygon class="arrowhead" points="200,80 188,74.4 188,85.6" fill="black" transform="rotate(0,192,80)"/>
              <polygon class="arrowhead" points="144,192 132,186.4 132,197.6" fill="black" transform="rotate(243.43494882292202,136,192)"/>
              <g class="text">
                <text x="44" y="52">Client</text>
                <text x="232" y="100">VPN</text>
                <text x="44" y="116">Client</text>
                <text x="232" y="116">/</text>
                <text x="404" y="116">Server</text>
                <text x="232" y="132">Proxy</text>
                <text x="44" y="180">Client</text>
                <text x="248" y="196">Apply</text>
                <text x="292" y="196">rate</text>
                <text x="336" y="196">limit</text>
                <text x="388" y="196">signal</text>
                <text x="152" y="244">Observe</text>
                <text x="212" y="244">change</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+--------+
| Client |------.
+--------+       \      +-------+
                  '---->|       |            +--------+
+--------+              |  VPN  |<==========>|        |
| Client |------------->|   /   |<==========>| Server |
+--------+              | Proxy |<==========>|        |
                  .---->|       |     ^      +--------+
+--------+       /      +-------+     |
| Client |======'                     |
+--------+      ^           Apply rate limit signal
                 \
                  \
               Observe change
]]></artwork>
        </artset>
        <t>An attacker that can manipulate TRAIN headers can also simulate
congestion signals by dropping packets or by setting the ECN CE bit.
That will also likely result in changes in the congestion response by
the affected client.</t>
        <t>A VPN or proxy could defend against this style of attack by removing TRAIN (and
ECN) signals. There are few reasons to provide per-flow rate limit signals in
that situation.  Endpoints might also either disable this feature or ignore any
signals when they are aware of the use of a VPN or proxy.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document registers a new QUIC version (<xref target="iana-version"/>) and a QUIC
transport parameter (<xref target="iana-tp"/>).</t>
      <section anchor="iana-version">
        <name>TRAIN Version</name>
        <t>This document registers the following entry to the "QUIC Versions" registry
maintained at <eref target="https://www.iana.org/assignments/quic">https://www.iana.org/assignments/quic</eref>, following the guidance
from <xref section="22.2" sectionFormat="of" target="QUIC"/>.</t>
        <dl spacing="compact">
          <dt>Value:</dt>
          <dd>
            <t>0xTBD</t>
          </dd>
          <dt>Status:</dt>
          <dd>
            <t>permanent</t>
          </dd>
          <dt>Specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF (iesg@ietf.org)</t>
          </dd>
          <dt>Contact:</dt>
          <dd>
            <t>QUIC Working Group (quic@ietf.org)</t>
          </dd>
          <dt>Notes:</dt>
          <dd>
            <t>TRAIN Protocol</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-tp">
        <name>train_supported Transport Parameter</name>
        <t>This document registers the train_supported transport parameter in the "QUIC
Transport Parameters" registry maintained at
<eref target="https://www.iana.org/assignments/quic">https://www.iana.org/assignments/quic</eref>, following the guidance from <xref section="22.3" sectionFormat="of" target="QUIC"/>.</t>
        <dl spacing="compact">
          <dt>Value:</dt>
          <dd>
            <t>0xTBD</t>
          </dd>
          <dt>Parameter Name:</dt>
          <dd>
            <t>train_supported</t>
          </dd>
          <dt>Status:</dt>
          <dd>
            <t>Permanent</t>
          </dd>
          <dt>Specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Date:</dt>
          <dd>
            <t>This date</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF (iesg@ietf.org)</t>
          </dd>
          <dt>Contact:</dt>
          <dd>
            <t>QUIC Working Group (quic@ietf.org)</t>
          </dd>
          <dt>Notes:</dt>
          <dd>
            <t>(none)</t>
          </dd>
        </dl>
      </section>
    </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="INVARIANTS">
          <front>
            <title>Version-Independent Properties of QUIC</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the properties of the QUIC transport protocol that are common to all versions of the protocol.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8999"/>
          <seriesInfo name="DOI" value="10.17487/RFC8999"/>
        </reference>
        <referencegroup anchor="BCP14" target="https://www.rfc-editor.org/info/bcp14">
          <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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>
        </referencegroup>
        <reference anchor="QUIC-BIT">
          <front>
            <title>Greasing the QUIC Bit</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes a method for negotiating the ability to send an arbitrary value for the second-most significant bit in QUIC packets.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9287"/>
          <seriesInfo name="DOI" value="10.17487/RFC9287"/>
        </reference>
        <reference anchor="QUICv2">
          <front>
            <title>QUIC Version 2</title>
            <author fullname="M. Duke" initials="M." surname="Duke"/>
            <date month="May" year="2023"/>
            <abstract>
              <t>This document specifies QUIC version 2, which is identical to QUIC version 1 except for some trivial details. Its purpose is to combat various ossification vectors and exercise the version negotiation framework. It also serves as a template for the minimum changes in any future version of QUIC.</t>
              <t>Note that "version 2" is an informal name for this proposal that indicates it is the second version of QUIC to be published as a Standards Track document. The protocol specified here uses a version number other than 2 in the wire image, in order to minimize ossification risks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9369"/>
          <seriesInfo name="DOI" value="10.17487/RFC9369"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="QUIC-MP">
          <front>
            <title>Multipath Extension for QUIC</title>
            <author fullname="Yanmei Liu" initials="Y." surname="Liu">
              <organization>Alibaba Inc.</organization>
            </author>
            <author fullname="Yunfei Ma" initials="Y." surname="Ma">
              <organization>Uber Technologies Inc.</organization>
            </author>
            <author fullname="Quentin De Coninck" initials="Q." surname="De Coninck">
              <organization>University of Mons (UMONS)</organization>
            </author>
            <author fullname="Olivier Bonaventure" initials="O." surname="Bonaventure">
              <organization>UCLouvain and Tessares</organization>
            </author>
            <author fullname="Christian Huitema" initials="C." surname="Huitema">
              <organization>Private Octopus Inc.</organization>
            </author>
            <author fullname="Mirja Kühlewind" initials="M." surname="Kühlewind">
              <organization>Ericsson</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   This document specifies a multipath extension for the QUIC protocol
   to enable the simultaneous usage of multiple paths for a single
   connection.

Discussion Venues

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

   Discussion of this document takes place on the QUIC Working Group
   mailing list (quic@ietf.org), which is archived at
   https://mailarchive.ietf.org/arch/browse/quic/.

   Source for this draft and an issue tracker can be found at
   https://github.com/quicwg/multipath.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-multipath-10"/>
        </reference>
        <reference anchor="ECN">
          <front>
            <title>The Addition of Explicit Congestion Notification (ECN) to IP</title>
            <author fullname="K. Ramakrishnan" initials="K." surname="Ramakrishnan"/>
            <author fullname="S. Floyd" initials="S." surname="Floyd"/>
            <author fullname="D. Black" initials="D." surname="Black"/>
            <date month="September" year="2001"/>
            <abstract>
              <t>This memo specifies the incorporation of ECN (Explicit Congestion Notification) to TCP and IP, including ECN's use of two bits in the IP header. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3168"/>
          <seriesInfo name="DOI" value="10.17487/RFC3168"/>
        </reference>
      </references>
    </references>
    <?line 596?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA91c23Icx3m+76fogFUxYO4uD5IVCRJlQSBpoiICDAHJcfnA
6p3p3e1wdmY9PQNwBcKVypPkxhd5g1znWZLKa+Q/9WFml7RSrspFWC4LO4fu
v//+D99/6JlOp6pzXWWP9cFVa2q/Ma2tO/3adFaflGbTmc41tT6rS1fQn14v
mlaf2+6mad96fXj1+uTs/Ei/apuuKZrqQJn5vLXXOB7eyW7A+3bZtNtj7epF
o1TZFLVZw8xlaxbdtFs1a9/UU180tZ12rXH1dCMvTx8+VL6fr533QEK33cBb
Z8+unqu6X89te6xKGPtYwZve1r73x7pre6uAik/UPQ1LMsf65PWzE/iBZC/b
pt8c61//Sv8afrl6qX+FV9Rbu4Xb5bHSU12s+uXS7P0P3l67bq2ubd3DtPe0
jiPiD6ZvODRcXhtX4SPf2HdmvansrGjWeN20xepYr7pu448fPMhuPoDhYGjX
rfo58HNt2s7VwqYHQwYdwIMV8MB38GAYavDCjMeZuWb06oMh+4c3Z6tuDYMr
08P9FhkDE2m96KuK9+4lzaGv+G262bRLU7sfSVrggeZHV1WG7lhmwbr7pmpu
QMzaZrOd1bbbHfZ01TrfOVPrF73r4L0w8jEIlLtG6bwoumbTexDNYpaPvuIX
vpH/7h2ffml9fKz/689/1v/57//83//2L3LN+MK5Y/335sd+1eiLt32a+bnx
XbXN53pLTzVv+2+WeIF2VKm6adew+mua5x++Pzs91q+fn37xEIRY67PzH05e
n52cX13S1c+/+OILpVAh4jtKTadTbeYetqLolLqA7TDdStesc9pWdg3M87oA
9vhmbTu3tl7PrQb5X7hl39pSd402m0211S3yqnIgrx4uqgVwHv5YmU5vjMe/
7HqmYf+c16CQPY6sS+uL1s1hUKNh+FVTktJ7t6xNhTINA9m63DQOyaDB0jR4
f9NUrnD4fmtB2/HtwmpTl0hU27xzsFYLxN3gq/i+Su9r52fCg7Ury8oqUJIz
FJayL1CmlHpp6q02RWFhAXWwRPwyrAcUDSbo1xqMgmHCiETTdaZYAW9Ke+0K
Ic7MYQJkFtx0deAE/K9ZdLYGltRW34DmND0MALO6aAiRxTgbsjnYRtX2dY0M
gNsyCw1pdWt9X3W0ZfNAT3pRb2xLElADm3An7LI1pS0nynhZUl3bFll5s3LF
arCruAxbE4vLMIGrQRRBahwsj+jHUZjJYCOQ/Tgr7CmIzBKvwC/4E5hcaVOB
lYZX1l73HoYEUuNmw868MNckAkBVkEhhiuX9RJr2iAPwzk9wBUbfmC2zwHnF
20h0AkPjRBPY/OUKmFSBwA54jI8BXTAAbhSumxdzs7K1MuiyhDwHEgvjES1A
N+7CX+Xigk1EqmvwZGCeOmDPfEs6nvFIhCg+D39cu1K0ycjwwjsVtRmWxQo2
kGFzDXYFhVSDW0MRRd1egUtZrjZ9N8EtzGRhonBo1vFmob9/+oqUAIRpLXra
IQccK93YopDRGC4GNfGevri27bWzN0oNV0rSFllBdOPOwMzs++eoL0XVl7gj
hufeNC2aHqDIdrZVh7e33ebu7ggFA9+nCVZgKfzKvLXAymeZnQGFbIrCIAYA
udiCxJoKTBXoIE+oNqZ4azsWeHDkrjat7A7fCUxY2S3JBizvfGxV6YmVubYf
smm46BKILzqdWVNeqFW8cplOlH/MZxwh6oyJe71vhxXwcN2UbrENSpdPAN5K
u7ipfqCUMhks8U9/+pM2xl8v1f2p/LuPTiz+4p/Z7+l99Z5dl9bv8db7oA78
k/6fb+v38Ogl8BLMkzz6TJYZHn1tCwueDe4TAfeHBNwfEXBfCAjTZP9GP2G8
8JZwBf76Gh+iX/dp/+QhevW+kCwzyW966SdNp/UP4P8Qa+ZC9RNfRe/X2gLE
kgTrp60Ptm5H6djfMk9ZNhyIzEDudDP3oLKskkHSSsCrLerOBC0SOc+ocfze
hIgkPRNKB+8HS3o2uBDdEMGNpq62bOQ9CCyYrdLBUGhVQRcuLSp+ZzMv6pV4
LI8Sg9YLpywqBz+nXTOlZbRpFKKQL+JtfjCbhMz8kGIENrpu0NwxMJozXzyY
oA+uhtbBSxI/TxisCQ6YTAh6XtmIEpZ3ggFILXTSLoEPYwpgXWAZvV4DCHA0
0u3tL5Hz05evnpxNn86c7RbTP/aumMZH7u6QN0g4ADUAZmOglXNRL9pmrRGs
0OCR8Nre0BXPhvyE/ejcVa7bokvM3RQtmV1e8iI0J7vbkekBy81/gfUW9xqH
ai0sBSBPAJoslMiuKK8MbLbRIRk1MlwT4XT0nkkDABkDbNEWryNiCkZ97FTB
jLOMbyDcaJEfJYQcgZ4vNcK65QrEycJ2eFv0AHu2d3e0/E0D+A/8WqWI2cJm
2lgCqATq0l5E102U5GwtTNui2yC0UtoNmkogDZxkwl6KXwfUQ6MJfg8qxFsK
co/+XLiPuzPRfe2i6JuK1FcBc1zRofSW185DvA3E3kMEPZj7NOG+S55bqdfj
5fCWkQSCc4KAxHU9PLIY4sYFqNUcqAINON2zIt/DJsI+wBN1c1PZckl+dhI2
VsfgBxFpravGw83SVmZL8ObZ6bmCSBZjaY9aA7+fQOD0yaPPPoetEt8rvrQj
pG2qKYZESGPpeNgFrCAIB7JzQGtcLUPOzDMnPxzwKpiaxcISgCSVQ1jNrw8M
CPD8WY6Sxlps9J6XcHiIUJy9JsDn9klIoq6Bqdsb5+1wLUXTVyWaOPsOggqH
+kEQ3iTKFdHFspzwAkkZEFfvQxFDPiOSzdcKutBa2EQ7yZQ0WFswAxvESmRy
Ax7HlXlKNQSHhpLmQbAB7xi1G5VUtmU5/r7G4diGXBbNBsLDlxEfmaAeZQNE
ItNRyDIDkTE7bGhyFjfCOpU2Aa36QLfhheipYBOZlILUEe9V7i3GtTEcw4Wp
JDIeCRZQaN91oos0MN3CIZBqthllAMVMAKz/eYMxIKBE2NVJcFUSKJHJp40O
e4cqC3H8hvhY2WtbsTYq9k3kZ0DO2NAHQBE8Y5p0IMh4n/caZWyN/6WsA9kV
IXfXLKL61yqLnWnVWZSTpH6ocjW/Ooi7m4VC2S66AVAmrtIux/dvXCVeDUjN
psBIkdfB/Cbdwm00CCUwaYAsQXkK/Cd+yN6d8bUNyDU5H1gKqSLzcZLLbhag
i2CgC8K4Zw0wH0jqepKruAZxyWsIffw4uYATRUPVePLKmNBimOKCzyibm7py
9VsiRyESG+ZJJgCuGk/BNnA3xnm8LIOi50G0CgOKBM6QZBpfZ/oVoycP84Gm
wogWOBkFCdaDEkR8YGV9BSjtOaoG+xj2msRNdGWmLFtCoT2+zWI8t5x0QP2K
AxNETdjKE9YS5ygSFt+ukDXwMu07+AJ0PsGR5txMEe7+CDBI7pwyP6zgPEmx
aoSBZM5gFY79b/J5PU6YUazPnlKAnyVKbE3gLFtVNN2wa9dNhZhSLF7m4wec
DGsYhARD4xzWIYal23mL1sR5E8rc4JqQ+LmFGNihlaMBOX0FIsizhGBUjIRk
PDD3Dk+qfeY20RHzcAKsibVsXMm+onDD3kWNUQHNAjtO0sbJbgQ3UzTrNcCh
CAOuTdVbHDGyBfkPC9xYTqRBeGNbRTknpDr5iOiLxXMRth8lSIN7Ke0CNXkl
K1ApRdoUACc9w1zOKEZnsZs4RHpA7Hm/TwS3xa2OHmifVzN6BXywkgZiF4aP
oJr2pPpgJPI8ihrEj0RcyjuJaQ9M7UCBOgkCE0hDiUjY8gQNdLwgY032ZqvH
KCiBBTTVaoAUkmARRic6ecdbW/aFFZQSTAVSLfaHouuQtpnQ3mRyKK6ZttH5
aDsdZedANNGQp/ScpC4F7xOqpACUnHWDkSkHKQOV4zF90LmIV9jxKwtoIFEq
7wTTYsB5xITz3KIkBaQouCECR3oxhM/M1izvnysXqG1MDGQebdcGw8oV3i77
NvPThsMNmD9FCIOMGOfKQwKAlQjhBuFuxYlwtMk5IJnoed8NU4lj8QiKQxkB
Q0AXzH7IIYjQjtMHZPGJXIp4ARlfYxyH9hV37ikqrOPMA+3pW0tBb+n1wcvv
L68OJvxffX5Bf79+Bs7n9bOn+Pfli5Pvvot/KHni8sXF9989TX+lN08vXr58
dv6UX4arenBJHbw8+c0Bp1wOLl5dnV2cn3x3wJAjtzWIHtjtAp9sC7ijo/BZ
hSoNwcRvT1/9x78++hQCpL+BPx99CqER+hgeniN7+okxNxpUa8gImgo5uIH4
Ft0WKLYHdak1GgLg389/i6z4/bH+al5sHn36tVzAFQ4uBiYNLhKTdq/svMxc
23NpzzSRfYPrI9YO6T35zeB3YHR28atfVmjDp48+/+XXioRGKtccStzekzQH
GuJBBoRsBmGTCtMRK2swCSo3WW2aSrIoAmLAs5vWAc70XypOO1wKQvjF7BGq
SyoP3t3BDtzeLtwy1GQl20J7xGOyTQ5omh4L8zMEIdVJKqAoZk2TfrpnSsoW
txwqDxmhtH7Ba4Q4ZK0PHx3pJ/rRBC6/tpSSK/Ea/UYFZfelDz+jSz9w7lEf
fvIYX3v47urbp3j9KWLlmq3NaQ6Y9He2XkJIevj50cefO3w4mz1++OlDeuyy
6bHU+LGR9j6SDXJHWdfbY31vzHtNrRJPDgZseU57cHDH5oSQeR5PzMG4Hz58
9/nDo7BNQXpiMD0wdplEqYFExVrCuzgokCs4hbmPuh7tYYfIn4ogVK8Fw0D5
xm/PrjB98sXjz/+OtptxZAcIE+bZVo0pA51jWR8Fpfkeg3erSkZAKJIsnOh5
PkNSPdL6ySIyYOFaj4F+hxb9B8RpXjK/MAsPBUZvaN9ub9HoT9noC+GYZQu8
pOILcu/DcpKI5Ci+Cz4SnaFivAgWkIO54C/zCDCU0r7UQ9V99Hj2GNeG/I08
3StlTEKaHQSHc8kfexziXYyA99gVjEYXAoTedYkZdClQm1AjFbWM+vBUIeWa
+VzOhQozqK5m0P60nZg7LOAlE/Z4bE+OJn9pdRg2rDcdQaxBCUOcABezcXdD
zljkJ63WxLWm+r2CiQDXYP0PnlgjA3E5LGikYVIM8foR6c1jmKkwmOnet9qg
ioJSNgifS0uZiYG8EOi4l+uGBweSiy7Y9GPjXWnv1Nf6vOnssWSDAL2SWGCM
lcwCN1DI+lFw+vk/EUZuYuGVyh5f619bJBXhv3FrvA9Ap8ReJLAy1bANJAxM
kbarKWUaEwQwFPJjvuXLeeldRHtX8ym/OrYXIuNk6TngJZCGCT7aAZWSD1Ii
RFMlcdvYOMZkzbAAojeVIWyZYk4hIxXrGYT3G6w8c71+JzYR0EqZYV7jtZgl
9pcd5o2mtC3gfylVGZOQGHuCZdxSuhi9bYtxTMNRdIpFUj7t/YCB8us7eua9
en88zf4NfmGhlZkZqoX/qF/ON15Khf+PbqLvzVge3S5l70DWBuqFwppY6A8A
pmHaj7RSdpHrdOwkZwMFvLp4esGtehoDLooVgzeVl8Whoq5MMCdvqClFFP0V
F1Jxq3NQALFFdmesGpzdQb9tygDSWOxDSWFXxWbqRXMDMVU7YTfJzwc0HtNm
fU3ZOlPnVikNS54uOgYyJyFFABGCVIVDpBlS+iPyTXVjtpzep44y6jvjPoxS
Oi9o7rztYrYPO3PuhBQy6xxh5ABRcBsAdURQwbOR/VeIH45CwXqs9dcBbbKU
uTp5yQX4IgIf/oiy+4POEQgXkJel86DT2IAFy0Vsz74gemExS0WD+YAF5gxc
l0OFyGOSmA96wJDtB9PqPFUDpFUL84uRqUKbxGfR7hAoCjHBLoNJNPKlBEo+
DJAiUCBYorCajG0AgGV/TNuU8n/DHqHz4I2iKtze6zYUNA36F8amnVNtmP9h
oBozU0M0MN+q1EoUg503yazvaS6S3T8KYHHfI6xKrtyLC25vGdIxQAgQ+vox
AehPPvtC7iQUEMQupNiYd4xawrgTtYcOz4H6An9S/zBah6XDWi5Wvj1aQ+dX
YdsvQ8r4MUDPiYL//4QHgL8+HUBR2JmndlM1W3R0e/u3bC11l4EKjvRpvo2J
4cG+qEwEtd6TSU95oRZWxN56r4FDIElPYjNYHrlobuULySYxvNjJQCW/zHsm
wMUDoeyN65jcuOXHRg3Wxy0zLF6UV5VbKxOCMpWH+X/B8AAbSfhm+4ggtsTq
NLWyCW+8JD/fcdwkm5ExSzHgEmzKXgCewoepLgH0750ypE5Zt8wgmjAVeqJt
HkUlkKViJjaGGsORb1Au8/ZFg5GfzfsSOe2E0qY+KgNhWalgygscFZ8luITg
g+vP/xvS8mR5TltlIThS+6lCF2AnXPFrR6WP5Fv3VcwVC8+YH8OsMgdzlFD1
ti9BjMocACMmGUlrLHaxNHPkH1gbqxWcSsX5O9MubZe1QlN/is3axcmMSXcq
xJvUPNyGlebpVheQMosPB9D5+BHmYh4pLUjxM2/wmTcy1hOd/XoDBvgwe+hI
KeffkMY9kel++/D3+m81IYEnT+i/+AhnvZ5optkeyrOPZrNf/H7CfHvzw7PX
l2cX50cKfGAYFZccXsdGfX5vROBw4k8W8By60Z21zGhU2OU3WLQ+3B3riM8c
pPHGYxcPAQXvDswdgLuIFS0IAaiRODJonVAJmZGi7KXHmqfx2wRcrx1Z2Avy
oD0mxVlXyLTut6uAn1ojyTB/l7cGkFihvuEIDarvbpSFZDab0Dtvyrz3JbX4
0KkGLKwOAYDh/nsswWRd+mArAA8ln2voVbAMXEK/EUMLfhTPDsBqYzv0RPtm
NEVeSjAY+9k/9vA3Vti9GlfsQovboEGCQBdXhYHWgc52oed4bxaDCyURNI4A
dSoxZ43FeSl0VP8FYyCwLzm6eIihgnXvg/0UqdTD7FdqccrzXyE1A2JBZbd6
u1voxW5PavxKbwWrpTjdCDMDCGoWFJKhSD6XPjJ91YSG4hOqvif5C61md9i2
mRUk6bE8xUF9PR0OUsam0gBgsl0kNm5Vbsr3nrKZU2/jxixNl+rWCQlnI6pe
GKkdHuPCIej6NEQ7a4tFPufXAZV+sKicnxYI7S8YipCmGZ86T9UV23TOtXFv
jJSVQ7Kn3mYF+N2l5AvA6bABv6LqKecN4Rc6ib5rkOMFIRaJBxKYrcwWm7Re
kL/ay5y8SO8/0CCAlkHt2Sru5uEexpCv2VtBfxrBw+DUCG6jdG6U+RNtg80I
oFDYWyWH7ybUN1MPp6cUVFgYtiS3pGy0AhOPkUx0KOYqqcKnRCQ1//DWJoWO
HQME29h6EbEIxvmcU943meQn9E/GyCyPXoAdqucmFUA2LZFPmp2Og2BjnWH/
MTSDNzb1K+UyFgvwK1ttpCEgjrvbDTMaVYCDxVKUEludZyKwb2emY5ID2ErD
YgsY2go5VJWkLfbaAKjM9ylio7mlYr6Rk0XDM0qIy+aW+9xpgWQ0UwJknIyO
XZUYkW02aFXQWCRuukHbZEikS7oYbB6swQEp2wjZghPjkaW/hhvnWQYWsDpL
vWuVsykuqZtxo3TsYdjT98MR4KW0NmO8jziiFZ24vRebnkP1qqS6Vaj9h+Xv
6cGGS6E5wOxgX+dJgwDnehf8PbVeJ4ZJ/NTaeWyXlEaT3Xb8GYSZQ+hxBxuR
cgiJKm7bB+e2ST3MkvcIUysRfD+KglwnLxIIAnh8TbxFPiz4ACY1Lr3FrcG9
hxEsnn1dKr8BHja932U/ooNLTBLtjIFNftyXKPI5B8+r4rGN1iywU4gwak0J
/+j4T+IIhA2ovRrb9aipn84noUTFocIWxtx7gg2AM7C/xw6MAgEPdmHKtBCF
tmi6hhlACX1linJweoSsANz12bCKiExHr7CQiFEoJ+ypIStCmTl3INH4rVs6
xMChAHrJeGGYhPPWvmU8eY37gVYzRHmMLMmGsFmIPdPk0bENs6PoCTFRPB2y
pYOxYHqzQ6nA7hnVaaIMkDvqVrDrGPrs55QXiSIbrcJaJ/FAZlB77vOJFYzI
i6yjj6yBwk4n5yvJGw/aza8YkbiNk67ifV2AqcNLLNOyN2BRO8txocoCCUQY
S1ujrWAXg5qw/yRyMtuKy4aZMApM5hLRPl2iYgqeLTB02qJCNLZ2lWkZmzSc
ksIjsvhaQGWyYOmgjWmQ/ZBC0qx4hh2hJ1kXRn7yhIpOA8/NtthsieiUq4vU
J8hnU0GzWrO0+Vmshhsl6ZQz5cWJj+HYBHsF13LrjvUE3FO4gI9BlMH+icF0
XqIjXYEYrn6rpAzItEknwN4meSymVs1Wtiz4kmC/VToc4Xbwc2Qe4stwyGl4
PICy9hXCH7R7qN9o4Hi/qm1IdnOpzoRjOkGx8j7LgXDmrZaTsXf7QGfYuA+O
9XFu00iocvm55Xv85YBijxfc8I27kI8pekm94TJgkq1PjWjStg/rYR6ltGFe
SMgQA9Vl4PElpil2uZ6RmEEsbGS2hr4fAYDBuIoIWo2PQnOwQbnJZkOqinlW
fJOeTzl3bM9HAEABsYQoqW9Z1k9ZTM4sZ8d29A+vzqnzdqduKkUQVOvsuCHK
Yn6wQZxGQUDOkG/IT/t3IZwRFDNQTErPOz4dntVoJynrRutTUWLdoKkznNwj
HoyewawAdUxSeJQVMy5GpoYoJw9hqs62WdI3RSwdonvwVli1Cm2+qGtFajyk
7V/0LcHagOj5/CENyba24qYLMt9ytlE6xOOZMD4QKYcGiJtnaFxqdMA3VuCi
6AnTOWgbxhNXa9rb8hpMLpoz+fwBgQo5QMnywr2dvKtEjM+OX8r3EyR3HHYp
o8u16iw2mGKEdRVRjahU1zRYwJUhInVNOzRP6MBVgHCDMF8ODNEy2SUgSWhk
bmBN9HkWWgEvL6RJyCNJy7CQcqzUz5NpQQCAAIXFOqLhoWvPYyFi1wKLHEpj
xQ1hYY/JsKjdX1KAIXNIo/Ia4rhNX43GHx5Go/ERi7L3xvxj0OVMwbOejgRx
Vq6ER9E/YSMIaDEdQ6XPb9hwPkMWypjSgzAuGEIv8GjCzpbD2l3rd078owwF
8ikHodIp/Y/zkIz2AbCroPr7wYzP8GTv4HkaMaRFs55TCoWLzMNxwac5Sepe
N1W/ZjggAtc1arhPA5SFpxn500TuR7uTV4ieWHHHTIjUqY8z9UiTg/CIQrjv
34WlUnGzxEAuJoSwrDzvO0WcDj04+CGXdESgcG3Rr/mglx8fzhkufRSpsqz4
D/h3ipqCTmcFXNj3eNpmoN4FB8S5XnMzHFhg7Lg2FCvwKxP1rC7aLeHdUzZe
L2xVNfrw2emLoxDwBH8YIiwgDb0x1kIlA63iPrHBjlwRKYym0YkHzPIGjgVY
GRJhXqhPa8KciMjpOEPrFUnjUFB+KgGSy2MRCFAE2+Q5zRalYW6xZ2C/SKCB
kFh1qFMBwGZngynztt2wp8g/QMNnejD5L0Ymq+nGlAC3Ig/yk7zdKT6IYLfk
PsW3rBkLiBcRxMXPkqi+HhQyB/iWTdieZD7CEMucpOiPXCyFSmjn13IOhhcQ
bdMl1vopvAuFq5j5422KEhwsF6XQ0PIFwwfBBYK1gn1eEb+BwAf8aHNHYR5E
l/xI7srUoArmMxNLBohm4pIawoZwTk4q7G3MfeALE4XHIFyW/UVsIAuiAeWA
Ruor8ww++Vx+Gx6YJQbV4TxVN1xJJZVvPhMi5zTwqGBGoYI5H6QF7OVJON+y
m+5AyoY65cRy8QGSwTCcjUWC5jAVaES3CtVJxRXTeBr5oEaxM9VB9mgAJrGF
ZaZP+GwQpbHzs6jwKB9yDQsV9TW8abLe7INDasA5TKIim+giYkBM/9GhtSbD
Rh/40Ip6H2zhe74yG32FBf79jv9zP76jd/79bBq+bbLzoZBsrp2R0/MoS/r9
V0/ivzgYdeMNaZR/9MgDvfPeJZvB9x+Z7xWx9EPz7a5vtmd9f/jL63sw4tzO
enjun+1OSM+Nx/tDdvdk9Pm0kCvYGeZ3e5azc+1CIiQ+4cVV3ZM6k7EQSkVQ
GKIM7jfJwhDv1nQ/P2kc9A/AMOZZN9RNEI58tdy+04UPY+EnFfTpM2wxkdoR
eSwaPOb9Qz6aCY4J7mxONkeYS+PclqFzbfgNsqAPJwPbKyFxaRdUKMCAyMu5
B99tubNTgDo1H6+bFFbrQ/SOQPdRzKzqhPbR1UMM4eXrYCGQgIh4Snq6x1C5
Wskx364PpcCx4yKGWMd1E+elTQrPKIgXxMJcrIHGLzSE4+X8fRhzQ6g8+HWJ
7XK+UG7i7OT8ZDcx4SA+uRvXCbkxjPwIHSEe1H0Ob2/xpan8pmYq6u2gJMHe
Jjl5gz7DJaVY5nk4ssN0xCE/TE836GbBDzzGc4gHRKWM6A9Cd9tWrfEbEPzV
K9iOr8K3K29ubmY466xplw8wSlnWFI0/wG/kfD3JpqHguXclQuXx+abH45MZ
dNrkWB1zcxa4TEA/vccLmA02NTXJXQrc4y9YquPh4V+lTvmU5mlMuuEz+DlS
fQhucfkNfssH6T6CR7HWUHT4ADFg8FFQfYiLyR/H8wBEzfDbqdgQ7TcEtZ8c
UD9HQQeOcKvGfZBXcYtfxS2WDaR2zI/t3U/pqRQ7QPup9kyW7a0e7K36K/dW
D/eWmh4/urdp/ef0zc/j8fry7X/107f/qelsuoyG+P9CIg7rprZHH5IE/JoZ
NkbQR56GH9qBV/grubZ8ckBlBDqrdvH0Iist25n6H4Y7u30LWAAA

-->

</rfc>
