<?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.1 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-dmoskvitin-quic-short-message-fec-00" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.1 -->
  <front>
    <title abbrev="FEC for QUIC">Forward Erasure Correction for Short-Message Delay-Sensitive QUIC Connections</title>
    <seriesInfo name="Internet-Draft" value="draft-dmoskvitin-quic-short-message-fec-00"/>
    <author initials="D." surname="Moskvitin" fullname="Dmitry Moskvitin">
      <organization>Huawei</organization>
      <address>
        <email>dmitry.moskvitin@huawei.com</email>
      </address>
    </author>
    <author initials="E." surname="Onegin" fullname="Evgeny Onegin">
      <organization>Huawei</organization>
      <address>
        <email>onegin.evgeny@huawei.com</email>
      </address>
    </author>
    <author initials="R." surname="Huang" fullname="Rachel Huang">
      <organization>Huawei</organization>
      <address>
        <email>rachel.huang@huawei.com</email>
      </address>
    </author>
    <author initials="H." surname="Luo" fullname="Hanlin Luo">
      <organization>Huawei</organization>
      <address>
        <email>luohanlin2@huawei.com</email>
      </address>
    </author>
    <author initials="Q." surname="Chen" fullname="Qichang Chen">
      <organization>Huawei</organization>
      <address>
        <email>chenqichang1@huawei.com</email>
      </address>
    </author>
    <date year="2023" month="October" day="23"/>
    <area>Transport Area</area>
    <workgroup>QUIC Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 54?>

<t>This document proposes a FEC scheme for single packet protection in accordance to the sender observed packet loss rate..</t>
    </abstract>
  </front>
  <middle>
    <?line 58?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The QUIC protocol <xref target="QUICv1"/> is general purpose transport protocol, which supports both reliable and unreliable data transmission. Depending on application-specific use cases, one can choose either to rely on QUIC built-in loss recovery mechanism <xref target="QUIC-RECOVERY"/> or to use application layer retransmission mechanism. In both cases it takes more than one round-trip time to retransmit lost data, which may be crucial in delay-sensitive applications (e.g. RTC) if RTT is high enough. Forward erasure coding allows to avoid or minimize extra delay incurred by the retransmission of lost data, while redundancy adaptation minimizes data overhead generated by FEC..</t>
      <t>There are several works considering the use of Forward Erasure Correction (FEC) in QUIC protocol: <xref target="I-D.roca-nwcrg-rlc-fec-scheme-for-quic"/>, <xref target="I-D.swett-nwcrg-coding-for-quic"/> and <xref target="I-D.michel-quic-fec"/>. These works share the common idea of protecting a sequence of packets each containing protected data. But there is a broad area of applications there it’s only needed to send short messages of data (one or couple QUIC packets) in timely manner with relatively high time gap in-between, for example instant messaging, control channels, notifications, etc. In this case it’s more beneficial to protect every message independently of each over.</t>
      <t>This document defines extensions to the QUIC protocol to add the ability to protect single packets independently and make it able to recover from packet losses prior to retransmission using FEC.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="design-overview">
      <name>Design Overview</name>
      <t>In this document it’s proposed to protect whole QUIC packet, motivated by the applications described in introduction. Therefore, each protected packet corresponds to several repair symbols, and each repair symbol correspond to one protected packet. Prior to encryption, serialized QUIC packet is divided into several parts, called shards, each shard acts as source symbol and sequence of shards corresponding to single QUIC packet act as message (see <xref target="quic-shad"/>).</t>
      <figure anchor="quic-shad">
        <name>Example of packet division into two shards</name>
        <artwork><![CDATA[
            +---------------+ - - - - - - +---------------+
            |  QUIC header  |             |               |
            +---------------+             |    Shard 1    |
            |               |             |               |
            |               | - - - - - - +---------------+
            |    Payload    |             |               |
            |               |             |    Shard 2    |
            |               |             |               |
            +---------------+ - - - - - - +---------------+
]]></artwork>
      </figure>
      <t>Number of shards depend on encoding algorithm and parameters used for protection.  If the size of protected packet is either too small or can’t be evenly divided, then the protected packet may be padded with PADDING frame during serialization to achieve desirable size. It is noted that this method only protect the application data space.</t>
      <t>After sending protected packet, sender <bcp14>SHOULD</bcp14> encode corresponding shards into repair symbols and send them afterwards. Several repair symbols <bcp14>MAY</bcp14> be sent in one QUIC packet, but it’s <bcp14>RECOMMENDED</bcp14> to send repair symbols in separate packets. In general, distribution of repair symbols between packets depends on properties of concrete erasure code used. Each repair symbol <bcp14>MUST</bcp14> contain information about corresponding protected packet number. It allows to avoid marking protected packets with some FEC-specific id.</t>
      <t>Receiver <bcp14>MAY</bcp14> ignore repair symbols, particularly in the cases when corresponding protected packet is either already received or recovered. Repair symbols are accumulated on receiver either until recovery or the moment when recovery of corresponding lost packet is not possible anymore.</t>
      <figure anchor="figdo">
        <name>Example of protected packet recovery after two corresponding repair symbols received</name>
        <artwork><![CDATA[
          Network                Receiver side
        Sender                 QUIC Packet             Decoder
           |                   Processing                 |
           |                        |                     |
        Protected                   |                     |
        Packet 1  - - - - X Loss    |                     |
           |                        |                     |
        Repair                      |                     |
        Symbol 1  - - - - - - - - > | - - - - - - - - - > |
           |                        |                     |
        Repair                      |                     |
        Symbol 2  - - - - - - - - > | - - - - - - - - - > |
           |                        |             Protected Packet 1
           |                        | < - - - - - - - Recovered
]]></artwork>
      </figure>
    </section>
    <section anchor="fec-and-loss-recovery">
      <name>FEC and Loss Recovery</name>
      <t>The FEC extension described in this document <bcp14>SHOULD</bcp14> work as an addition to built-in QUIC loss recovery mechanism and intended only for faster recovery of data lost during transmission through network. Modules of QUIC, which rely on precise loss rate measurements (e.g. congestion control) during transmission, should be provided with actual packet loss rate from wire, rather than loss rate measured after recovery. Depending on repair symbol scheduling, packet recovery may be observed as packet reordering in wire, therefore should be properly accounted. Finally, FEC adaptive redundancy mechanism should consider possible losses incurred by congestion control overshooting and avoid positive feedback loop: recursively increase redundancy as a reaction to increased packet loss rate.</t>
    </section>
    <section anchor="protocol-extensions">
      <name>Protocol Extensions</name>
      <t>QUIC protocol extensions are specified in this sectioin.</t>
      <section anchor="handshake-negotiation-and-transport-parameter">
        <name>Handshake Negotiation and Transport Parameter</name>
        <t>This extension defines a new transport parameter,  used to negotiate the use of FEC extensions during the connection handshake, as specified in <xref target="QUICv1"/>. The new transport parameter is defined as follows:</t>
        <t>enable_FEC: The enable_FEC transport parameter is included if the endpoint supports FEC mechanism and FEC extensions as defined in this draft. This parameter specify the the support FEC algorithm. How the FEC algorithm is encoded will be added in future versions.</t>
      </section>
      <section anchor="fecrepair">
        <name>Repair Symbol Frame</name>
        <t>FEC-REPAIR Frame are used by a sender to contain the FEC symbol which will be used by  the receiver to recover a lost packet. FEC_REPAIR frames are formatted as follow <xref target="fig-fec-repair"/>.</t>
        <figure anchor="fig-fec-repair">
          <name>FEC_REPAIR frame format</name>
          <artwork><![CDATA[
FEC_REPAIR {
   Type (i) = TBD,
   FEC Version (i),
   Packet Number Length (2),
   Protected Packet Number (8..32),
   FEC Meta Data (..),
   Reserved (i) = 0,
   FEC Payload (..)
}
]]></artwork>
        </figure>
        <t>It contains the following fields:</t>
        <t>FEC Version: A variable-length integer which specifies the encoding algorithm used and the structure of the following FEC Meta Data field.</t>
        <t>Packet Number Length: As defined in <xref target="QUICv1"/></t>
        <t>Protected Packet Number:  The corresponding source packet number that the FEC frame protects. As defined in the packet number definition in <xref target="QUICv1"/>.</t>
        <t>FEC Meta Data: A structure, which is intended for additional information about repair symbol, such as identificator of repair symbol in the coding block, encoding parameters, FEC Payload size, etc. Contents of this structure depend on concrete implementation and encoding algorithm used.</t>
        <t>Reserved: A variable-length integer reserved for future use. Default value is 0.
FEC Payload: The bytes generated by FEC encoder for corresponding repair symbol.</t>
      </section>
      <section anchor="acknowledgement-of-recovered-packets">
        <name>Acknowledgement of recovered packets</name>
        <t>In order to inform sender about what packets have been recovered, acknowledgement of recovered packets <bcp14>MUST</bcp14> be provided. There are two alternatives to be consider:</t>
        <section anchor="alternative1">
          <name>Alternative 1: New FEC ACK Frame</name>
          <t>A new frame is proposed. Receiver <bcp14>SHOULD</bcp14> send FEC_ACK frame either after each recovery or with the first ACK frame after recovery.</t>
          <figure anchor="fig-fec-ack">
            <name>FEC_ACK frame format</name>
            <artwork><![CDATA[
            FEC_ACK {
               Type (i) = TBD,
               FEC Latest Restored Packet Number (i),
               FEC Restored Bytes (i),
               FEC Restored Packets (i),
               FEC Restored Packet List Size (i),
               FEC Restored Packet Number (i) ...
            }
]]></artwork>
          </figure>
          <t>FEC Latest Restored Packet Number: A variable-length integer which contains latest restored packet number.</t>
          <t>FEC Restored Bytes: A variable-length integer which contains number of bytes restored on receiver side. This field is intended for statistics collection and analysis on sender.</t>
          <t>FEC Restored Packets: A variable-length integer which contains number of packets restored on receiver side. This field is intended for statistics collection and analysis on sender.</t>
          <t>FEC Restored Packet List Size: A variable-length integer which contains amount of packet numbers following after in that frame.</t>
          <t>FEC Restored Packet Number: A list of recovered packet numbers listed in restoring order (newer first).</t>
          <t>This alternative doesn't modify the existing QUIC mechanisms and can be easily as a add-on to the current QUIC implementation.</t>
        </section>
        <section anchor="alternative-2-extended-ack-frame">
          <name>Alternative 2: Extended ACK Frame</name>
          <t>This alternative is to extend ACK Frame to include optional FEC recovery information as defined in  <xref target="alternative1"/>.</t>
        </section>
      </section>
    </section>
    <section anchor="loss-rate-calculation">
      <name>Loss Rate Calculation</name>
      <t>Using FEC recovery acknowledgement mechanism it’s possible to measure packet loss rate in network, considering the diagram as follow.</t>
      <figure anchor="fig-loss-calc">
        <name>Relationship between acked and FEC acked protected packets</name>
        <artwork><![CDATA[
                +-----------------------+
                |Sent packets           |
                | +-----------------+   |
                | |Acked packets    |   |
                | | +---------------+-+ |
                | | | +----------+  | | |
                | | | | FEC      |  | | |
                | | | | acked    |  | | |
                | | | | packets  |  | | |
                | | | +----------+  | | |
                | +-+---------------+ | |
                |   |Protected packets| |
                |   +-----------------+ |
                +-----------------------+
]]></artwork>
      </figure>
      <t>It is suggested that FEC_ACK is a subset of ACK. In another words, if some PN is FEC acked, then it’s also is acked.</t>
      <t>To avoid the retransmssion of repaired lost packets, the receiver <bcp14>SHOULD</bcp14> include the recovered packets as the received packets in  the ACK frames. When calculating the loss rate, the recovered packets <bcp14>SHOULD</bcp14> be considered as the lost packets as well.</t>
    </section>
    <section anchor="adaptive-redundancy">
      <name>Adaptive redundancy</name>
      <t>In order to achieve maximum efficiency, sender should change encoding algorithm parameters to match network conditions. To be precise, from a set of algorithm parameters, which provide a certain protection level at current network packet loss rate ( we provide example of relation between loss rate in BEC and performance of FEC scheme with fixed parameters as follow), choose one that have maximum coding rate. This way it will tend to reduce redundancy while providing certain level of protection.</t>
      <figure anchor="fig-adaptive">
        <name>Example of performance profile of a given FEC scheme</name>
        <artwork><![CDATA[
    Success ▲
    rate,%  │
         100│_____.....................................
            │     ─────____
            │              ──__
            │                  ──
            │                    ──
            │                      ─_
            │                        _
            │                         _
            │                          ─__
            │                             -___
          ──┼─────────────────────────────────|───────►
           0│                                100%  Packet
                                                   loss
                                                   rate,%
]]></artwork>
      </figure>
    </section>
    <section anchor="security-consideration">
      <name>Security Consideration</name>
      <t>The FEC mechanism for QUIC only runs under 0-RTT and 1-RTT encryption levels and only operates inside the encrypted payload.</t>
      <section anchor="dos-due-to-difficult-symbols-recoveries">
        <name>DoS due to difficult symbols recoveries</name>
        <t>An attacker could try to cause a DoS of a receiver by selectively sending repair symbols to trigger intensive erasure correction operations on the receiver. A QUIC receiver is never forced to perform any erasure correction and may ignore any received repair symbol if it has doubts in its capabilities to decode it in a reasonable amount of time.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document defines a new transport parameter for supporting FEC mechanisms, and possibly 2 new frame types.</t>
      <figure anchor="fig-new-frames">
        <name>List of new frames</name>
        <artwork><![CDATA[
    +==========+===========+==============+
    |Frame ID  |Frame name |Specification |
    +==========+===========+==============+
    |TBD       |FEC Repair |{{fecrepair}} |
    +----------+-----------+--------------+
    |TBD       |FEC Ack    |{{alternative1}}|
    +----------+-----------+--------------+
]]></artwork>
      </figure>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="QUIC-RECOVERY">
          <front>
            <title>QUIC Loss Detection and Congestion Control</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="I. Swett" initials="I." role="editor" surname="Swett"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes loss detection and congestion control mechanisms for QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9002"/>
          <seriesInfo name="DOI" value="10.17487/RFC9002"/>
        </reference>
        <reference anchor="QUICv1">
          <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="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="rfc9265">
          <front>
            <title>Forward Erasure Correction (FEC) Coding and Congestion Control in Transport</title>
            <author fullname="N. Kuhn" initials="N." surname="Kuhn"/>
            <author fullname="E. Lochin" initials="E." surname="Lochin"/>
            <author fullname="F. Michel" initials="F." surname="Michel"/>
            <author fullname="M. Welzl" initials="M." surname="Welzl"/>
            <date month="July" year="2022"/>
            <abstract>
              <t>Forward Erasure Correction (FEC) is a reliability mechanism that is distinct and separate from the retransmission logic in reliable transfer protocols such as TCP. FEC coding can help deal with losses at the end of transfers or with networks having non-congestion losses. However, FEC coding mechanisms should not hide congestion signals. This memo offers a discussion of how FEC coding and congestion control can coexist. Another objective is to encourage the research community to also consider congestion control aspects when proposing and comparing FEC coding solutions in communication systems.</t>
              <t>This document is the product of the Coding for Efficient Network Communications Research Group (NWCRG). The scope of the document is end-to-end communications; FEC coding for tunnels is out of the scope of the document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9265"/>
          <seriesInfo name="DOI" value="10.17487/RFC9265"/>
        </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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.michel-quic-fec">
          <front>
            <title>Forward Erasure Correction for QUIC loss recovery</title>
            <author fullname="François Michel" initials="F." surname="Michel">
              <organization>UCLouvain</organization>
            </author>
            <author fullname="Olivier Bonaventure" initials="O." surname="Bonaventure">
              <organization>UCLouvain</organization>
            </author>
            <date day="21" month="October" year="2022"/>
            <abstract>
              <t>   This documents lays down the QUIC protocol design considerations
   needed for QUIC to apply Forward Erasure Correction on the data sent
   through the network.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-michel-quic-fec-00"/>
        </reference>
        <reference anchor="I-D.roca-nwcrg-rlc-fec-scheme-for-quic">
          <front>
            <title>Sliding Window Random Linear Code (RLC) Forward Erasure Correction (FEC) Schemes for QUIC</title>
            <author fullname="Vincent Roca" initials="V." surname="Roca">
              <organization>INRIA</organization>
            </author>
            <author fullname="François Michel" initials="F." surname="Michel">
              <organization>UCLouvain</organization>
            </author>
            <author fullname="Ian Swett" initials="I." surname="Swett">
              <organization>Google</organization>
            </author>
            <author fullname="Marie-Jose Montpetit" initials="M." surname="Montpetit">
              <organization>Triangle Video</organization>
            </author>
            <date day="9" month="March" year="2020"/>
            <abstract>
              <t>   This document specifies Sliding Window Random Linear Code (RLC)
   Forward Erasure Correction (FEC) Schemes for the QUIC transport
   protocol, in order to recover from packet losses.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-roca-nwcrg-rlc-fec-scheme-for-quic-03"/>
        </reference>
        <reference anchor="I-D.swett-nwcrg-coding-for-quic">
          <front>
            <title>Coding for QUIC</title>
            <author fullname="Ian Swett" initials="I." surname="Swett">
              <organization>Google</organization>
            </author>
            <author fullname="Marie-Jose Montpetit" initials="M." surname="Montpetit">
              <organization>Triangle Video</organization>
            </author>
            <author fullname="Vincent Roca" initials="V." surname="Roca">
              <organization>INRIA</organization>
            </author>
            <author fullname="François Michel" initials="F." surname="Michel">
              <organization>UCLouvain</organization>
            </author>
            <date day="9" month="March" year="2020"/>
            <abstract>
              <t>   This document focuses on the integration of FEC coding in the QUIC
   transport protocol, in order to recover from packet losses.  This
   document does not specify any FEC code but defines mechanisms to
   negotiate and integrate FEC Schemes in QUIC.  By using proactive loss
   recovery, it is expected to improve QUIC performance in sessions
   impacted by packet losses.  More precisely it is expected to improve
   QUIC performance with real-time sessions (since FEC coding makes
   packet loss recovery insensitive to the round trip time), with short
   sessions (since FEC coding can help recovering from tail losses more
   rapidely than through retransmissions), with multicast sessions
   (since the same repair packet can recover several different losses at
   several receivers), and with multipath sessions (since repair packets
   add diversity and flexibility).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-swett-nwcrg-coding-for-quic-04"/>
        </reference>
      </references>
    </references>
    <?line 285?>



  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
