<?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 xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-tsvwg-fq-pie-03" category="exp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="FQ-PIE">Flow Queue PIE: A Hybrid Packet Scheduler and Active Queue Management Algorithm</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-tsvwg-fq-pie-03"/>
    <author initials="M. P." surname="Tahiliani" fullname="Mohit P. Tahiliani">
      <organization>National Institute of Technology Karnataka</organization>
      <address>
        <postal>
          <street>P. O. Srinivasnagar, Surathkal</street>
          <city>Mangalore, Karnataka - 575025</city>
          <country>India</country>
        </postal>
        <email>tahiliani@nitk.edu.in</email>
        <uri>http://tahiliani.in</uri>
      </address>
    </author>
    <date year="2026" month="October" day="14"/>
    <area>Web and Internet Transport</area>
    <workgroup>Transport and Services Working Group</workgroup>
    <keyword>Bufferbloat</keyword>
    <keyword>Flow Queuing</keyword>
    <keyword>PIE</keyword>
    <abstract>
      <?line 78?>

<t>This document presents Flow Queue Proportional Integral controller Enhanced (FQ-PIE), a hybrid packet scheduler and Active Queue Management (AQM) algorithm to isolate flows and tackle the problem of bufferbloat. FQ-PIE uses hashing to classify incoming packets into different queues and provide flow isolation. Packets are dequeued by using a variant of the round robin scheduler. Each such flow is managed by the PIE algorithm to maintain high link utilization while controlling the queue delay to a target value.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://mohittahiliani.github.io/draft-ietf-tsvwg-fq-pie/draft-ietf-tsvwg-fq-pie.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-tsvwg-fq-pie/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Transport and Services Working Group mailing list (<eref target="mailto:tsvwg@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/tsvwg/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/tsvwg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/mohittahiliani/draft-ietf-tsvwg-fq-pie"/>.</t>
    </note>
  </front>
  <middle>
    <?line 82?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Flow Queue Proportional Integral Controller Enhanced (FQ-PIE) combines flow queuing with the PIE (Proportional Integral controller Enhanced) <xref target="RFC8033"/> Active Queue Management (AQM) algorithm to provide flow isolation and reduce bufferbloat by controlling queue delay. This is similar to how Flow Queue Controlled Delay (FQ-CoDel) <xref target="RFC8290"/> integrates flow queuing with the CoDel (Controlled Delay) AQM algorithm <xref target="RFC8289"/>.</t>
      <t>When a packet is enqueued, it is classified into different queues to ensure isolation between flows. While the goal of flow queuing is to assign a unique queue to each flow, flows can instead be hashed into a set of buckets using a hash function, where each bucket corresponds to its own queue. The PIE AQM operates independently on each of these queues, enabling each flow to receive appropriate congestion signals either implicitly (via packet drops) or explicitly (via mechanisms such as Explicit Congestion Notification (ECN) <xref target="RFC3168"/>). For dequeuing, FQ-PIE employs the Deficit Round Robin (DRR) based scheduler described in <xref target="RFC8290"/>, which ensures fair packet scheduling across the different queues.</t>
      <t>An implementation of FQ-PIE has been incorporated into the mainline Linux kernel as a queuing discipline (qdisc) <xref target="LINUX-FQ-PIE"/> and is supported by several Linux distributions. Another implementation has also been incorporated into FreeBSD <xref target="FREEBSD-FQ-PIE"/>. Finally, an implementation of FQ-PIE is also available in the ns-3 network simulator <xref target="ns-3-FQ-PIE"/>.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>This document uses the terms defined in Section 1.1 of <xref target="RFC8290"/> and Sections 4 and 5 of <xref target="RFC8033"/>.</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="the-fq-pie-algorithm">
      <name>The FQ-PIE Algorithm</name>
      <t>The FQ-PIE algorithm consists of two main components: (i) flow queuing, which isolates competing flows by treating flows that build queues differently from those that do not, and (ii) the PIE AQM algorithm, which manages each queue and maintains a target queue delay (such as the 15 ms default in <xref target="RFC8033"/>). Flow queuing works by classifying incoming packets into different queues during the enqueue phase and then scheduling outgoing packets from these queues during the dequeue phase. The PIE algorithm, however, only operates during enqueue.</t>
      <t>The details of flow queuing and the PIE algorithm are not covered here; for more information, please refer to <xref target="RFC8290"/> and <xref target="RFC8033"/>, respectively.</t>
      <section anchor="enqueue">
        <name>Enqueue</name>
        <t>The packet enqueue process is described as follows: first, the incoming packets are classified into different queues by hashing the 5-tuple, which includes the protocol number, source and destination IP addresses, and source and destination port numbers, similar to the approach used in FQ-CoDel.</t>
        <t>Next, the packet is passed to the PIE algorithm, which uses a drop probability to determine whether the packet should be enqueued or dropped, as outlined in <xref target="RFC8033"/>. This drop probability is updated periodically (such as the 15 ms default in <xref target="RFC8033"/>) based on the current queue delay's deviation from the target delay and whether the delay is trending up or down.</t>
        <t><xref target="RFC8033"/> presents two methods for calculating the current queue delay: one uses Little's Law, estimating delay based on the queue length and the average dequeue rate; the other takes direct measurements using timestamps, as implemented in CoDel and FQ-CoDel. However, experimental studies on the PIE algorithm <xref target="REVISIT-PIE"/> indicate that while the dequeue rate is intended to estimate the transmission rate of packets over the outgoing link, it may instead reflect the rate at which packets move from the host stack (e.g., Linux qdisc) to the device driver's transmission ring. Additionally, in FQ-PIE, queue delay estimates from Little's Law can be unreliable, as it's challenging to calculate an accurate per-queue dequeue rate. Consequently, the FQ-PIE algorithm <bcp14>SHOULD</bcp14> calculate the current queue delay using direct measurements with timestamps.</t>
        <t>It is important to note that the timestamping approach provides a per-packet queue delay, while the drop probability is calculated periodically. Therefore, at each periodic probability update, FQ-PIE uses the queue delay value derived from the most recently dequeued packet.</t>
        <t>At the time of writing this document, the Linux, FreeBSD and ns-3 implementations use timestamps to calculate the current queue delay and consider the measurements from the most recently dequeued packet when calculating the drop probability. Additionally, these implementations offer an option to use the dequeue rate estimation technique based on Little's Law.</t>
        <t>Lastly, if an incoming packet arrives when the total number of enqueued packets has already saturated the queue capacity, FQ-PIE drops the packet without further processing. In contrast, FQ-CoDel identifies the queue with the largest current byte count (i.e., a "fat flow") when the queue capacity is saturated and drops half of the packets from this queue (up to a maximum of 64 packets, as specified in Section 4.1 of <xref target="RFC8290"/>). FQ-PIE does not adopt this approach for the reasons explained below.</t>
        <t>Since CoDel performs its queue control operations during the dequeue phase and does not drop incoming packets until the queue is full, it tends to fill its queues more quickly than PIE, which drops packets randomly during the enqueue phase. This is especially true when CoDel has just entered the dropping phase, as it takes time to ramp up its packet dropping frequency. Therefore, the strategy of dropping half of the packets from a fat flow's queue suits FQ-CoDel but is not appropriate for FQ-PIE. Dropping packets in bulk might lead to underutilization of link capacity, as FQ-PIE already enforces queue control during the enqueue phase.</t>
      </section>
      <section anchor="dequeue">
        <name>Dequeue</name>
        <t>The packet dequeue process in FQ-PIE is similar to that in FQ-CoDel, where a DRR-based scheduler is used to dequeue packets from each queue. The key difference is that in FQ-CoDel, CoDel operates during this phase, whereas in FQ-PIE, PIE operates during the enqueue phase. The method for obtaining direct measurements of per-packet queue delay is the same in both FQ-PIE and FQ-CoDel, and is performed during the dequeue phase.</t>
      </section>
      <section anchor="ecn-support">
        <name>ECN Support</name>
        <t>FQ-PIE <bcp14>MAY</bcp14> support ECN by marking ECN-Capable Transport (ECT) packets <xref target="RFC3168"/> instead of dropping them, in accordance with the recommendations in Section 5.1 of <xref target="RFC8033"/>. The Linux, FreeBSD and ns-3 implementations of FQ-PIE comply with these recommendations at the time of writing this document.</t>
      </section>
    </section>
    <section anchor="scope-of-experimentation">
      <name>Scope of Experimentation</name>
      <t>The design of the FQ-PIE algorithm as described in this document has been a part of the Linux kernel since version 5.6 (released on March 29, 2020), FreeBSD since version 11.0-RELEASE (released on October 10, 2016), and the ns-3 network simulator since version 3.34 (released on July 14, 2021). The following aspects can be explored for further study and experimentation:</t>
      <ul spacing="normal">
        <li>
          <t>The scenarios similar to those summarized in Figure 4 of <xref target="RFC7928"/> may be considered for in-depth experimentation of FQ-PIE.</t>
        </li>
        <li>
          <t>Interactions between flow queuing and new congestion control algorithms, such as Bottleneck Bandwidth and Round-trip propagation time (BBR) <xref target="I-D.draft-ietf-ccwg-bbr"/>.</t>
        </li>
        <li>
          <t>Different packet drop probability thresholds to switch from marking packets to dropping packets.</t>
        </li>
        <li>
          <t>Evaluation of the enhancements to the PIE algorithm described in Section 5 in <xref target="RFC8033"/> to decide which enhancements are suitable for deployment with FQ-PIE.</t>
        </li>
        <li>
          <t>Effectiveness of FQ-PIE in terms of providing isolation and minimal latency for low volume traffic (short flows) such as web applications, instant messaging applications, interactive applications and IoT applications.</t>
        </li>
        <li>
          <t>Different hashing mechanisms to improve the overall working of flow queuing.</t>
        </li>
      </ul>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The FQ-PIE algorithm introduces no specific security exposures. The flow queuing aspect of the FQ-PIE algorithm is the same as FQ-CoDel, and hence has similar advantages from the security perspective as outlined in Section 8 of <xref target="RFC8290"/>. The PIE aspect of the FQ-PIE algorithm is the same as described in <xref target="RFC8033"/> that does not have any security exposures.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC8033">
          <front>
            <title>Proportional Integral Controller Enhanced (PIE): A Lightweight Control Scheme to Address the Bufferbloat Problem</title>
            <author fullname="R. Pan" initials="R." surname="Pan"/>
            <author fullname="P. Natarajan" initials="P." surname="Natarajan"/>
            <author fullname="F. Baker" initials="F." surname="Baker"/>
            <author fullname="G. White" initials="G." surname="White"/>
            <date month="February" year="2017"/>
            <abstract>
              <t>Bufferbloat is a phenomenon in which excess buffers in the network cause high latency and latency variation. As more and more interactive applications (e.g., voice over IP, real-time video streaming, and financial transactions) run in the Internet, high latency and latency variation degrade application performance. There is a pressing need to design intelligent queue management schemes that can control latency and latency variation, and hence provide desirable quality of service to users.</t>
              <t>This document presents a lightweight active queue management design called "PIE" (Proportional Integral controller Enhanced) that can effectively control the average queuing latency to a target value. Simulation results, theoretical analysis, and Linux testbed results have shown that PIE can ensure low latency and achieve high link utilization under various congestion situations. The design does not require per-packet timestamps, so it incurs very little overhead and is simple enough to implement in both hardware and software.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8033"/>
          <seriesInfo name="DOI" value="10.17487/RFC8033"/>
        </reference>
        <reference anchor="RFC8290">
          <front>
            <title>The Flow Queue CoDel Packet Scheduler and Active Queue Management Algorithm</title>
            <author fullname="T. Hoeiland-Joergensen" initials="T." surname="Hoeiland-Joergensen"/>
            <author fullname="P. McKenney" initials="P." surname="McKenney"/>
            <author fullname="D. Taht" initials="D." surname="Taht"/>
            <author fullname="J. Gettys" initials="J." surname="Gettys"/>
            <author fullname="E. Dumazet" initials="E." surname="Dumazet"/>
            <date month="January" year="2018"/>
            <abstract>
              <t>This memo presents the FQ-CoDel hybrid packet scheduler and Active Queue Management (AQM) algorithm, a powerful tool for fighting bufferbloat and reducing latency.</t>
              <t>FQ-CoDel mixes packets from multiple flows and reduces the impact of head-of-line blocking from bursty traffic. It provides isolation for low-rate traffic such as DNS, web, and videoconferencing traffic. It improves utilisation across the networking fabric, especially for bidirectional traffic, by keeping queue lengths short, and it can be implemented in a memory- and CPU-efficient fashion across a wide range of hardware.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8290"/>
          <seriesInfo name="DOI" value="10.17487/RFC8290"/>
        </reference>
        <reference anchor="RFC8289">
          <front>
            <title>Controlled Delay Active Queue Management</title>
            <author fullname="K. Nichols" initials="K." surname="Nichols"/>
            <author fullname="V. Jacobson" initials="V." surname="Jacobson"/>
            <author fullname="A. McGregor" initials="A." role="editor" surname="McGregor"/>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <date month="January" year="2018"/>
            <abstract>
              <t>This document describes CoDel (Controlled Delay) -- a general framework that controls bufferbloat-generated excess delay in modern networking environments. CoDel consists of an estimator, a setpoint, and a control loop. It requires no configuration in normal Internet deployments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8289"/>
          <seriesInfo name="DOI" value="10.17487/RFC8289"/>
        </reference>
        <reference anchor="RFC3168">
          <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>
        <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="RFC7928">
          <front>
            <title>Characterization Guidelines for Active Queue Management (AQM)</title>
            <author fullname="N. Kuhn" initials="N." role="editor" surname="Kuhn"/>
            <author fullname="P. Natarajan" initials="P." role="editor" surname="Natarajan"/>
            <author fullname="N. Khademi" initials="N." role="editor" surname="Khademi"/>
            <author fullname="D. Ros" initials="D." surname="Ros"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>Unmanaged large buffers in today's networks have given rise to a slew of performance issues. These performance issues can be addressed by some form of Active Queue Management (AQM) mechanism, optionally in combination with a packet-scheduling scheme such as fair queuing. This document describes various criteria for performing characterizations of AQM schemes that can be used in lab testing during development, prior to deployment.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7928"/>
          <seriesInfo name="DOI" value="10.17487/RFC7928"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="LINUX-FQ-PIE" target="https://ieeexplore.ieee.org/abstract/document/9000684">
          <front>
            <title>FQ-PIE Queue Discipline in the Linux Kernel: Design, Implementation and Challenges</title>
            <author initials="G." surname="Ramakrishnan" fullname="Gautam Ramakrishnan">
              <organization/>
            </author>
            <author initials="M." surname="Bhasi" fullname="Mohit Bhasi">
              <organization/>
            </author>
            <author initials="V." surname="Saicharan" fullname="V. Saicharan">
              <organization/>
            </author>
            <author initials="L." surname="Monis" fullname="Leslie Monis">
              <organization/>
            </author>
            <author initials="S. D." surname="Patil" fullname="Sachin D. Patil">
              <organization/>
            </author>
            <author initials="M. P." surname="Tahiliani" fullname="Mohit P. Tahiliani">
              <organization/>
            </author>
            <date year="2019" month="October"/>
          </front>
          <seriesInfo name="2019 IEEE 44th LCN Symposium on Emerging Topics in Networking (LCN Symposium)" value=""/>
        </reference>
        <reference anchor="FREEBSD-FQ-PIE" target="https://web.archive.org/web/20241018123533/http://caia.swin.edu.au/reports/160418A/CAIA-TR-160418A.pdf">
          <front>
            <title>Dummynet AQM v0. 2–CoDel, FQ-CoDel, PIE and FQ-PIE for FreeBSDs ipfw/dummynet Framework</title>
            <author initials="R." surname="Al-Saadi" fullname="Rasool Al-Saadi">
              <organization/>
            </author>
            <author initials="G." surname="Armitage" fullname="Grenville Armitage">
              <organization/>
            </author>
            <date year="2016" month="October"/>
          </front>
          <seriesInfo name="Centre for Advanced Internet Architectures, Swinburne University of Technology, Melbourne, Australia, Tech. Rep. A, 160418" value=""/>
        </reference>
        <reference anchor="ns-3-FQ-PIE" target="https://www.nsnam.org/docs/models/html/fq-pie.html">
          <front>
            <title>FQ-PIE Queue Discipline in ns-3</title>
            <author>
              <organization/>
            </author>
            <date year="2021" month="July"/>
          </front>
        </reference>
        <reference anchor="REVISIT-PIE" target="https://www.sciencedirect.com/science/article/pii/S1389128619313775">
          <front>
            <title>Revisiting Design Choices in Queue Disciplines: The PIE Case</title>
            <author initials="P." surname="Imputato" fullname="Pasquale Imputato">
              <organization/>
            </author>
            <author initials="S." surname="Avallone" fullname="Stefano Avallone">
              <organization/>
            </author>
            <author initials="M. P." surname="Tahiliani" fullname="Mohit P. Tahiliani">
              <organization/>
            </author>
            <author initials="G." surname="Ramakrishnan" fullname="Gautam Ramakrishnan">
              <organization/>
            </author>
            <date year="2020" month="April"/>
          </front>
          <seriesInfo name="Computer Networks" value=""/>
        </reference>
        <reference anchor="I-D.draft-ietf-ccwg-bbr">
          <front>
            <title>BBR Congestion Control</title>
            <author fullname="Neal Cardwell" initials="N." surname="Cardwell">
              <organization>Google</organization>
            </author>
            <author fullname="Ian Swett" initials="I." surname="Swett">
              <organization>Google</organization>
            </author>
            <author fullname="Joseph Beshay" initials="J." surname="Beshay">
              <organization>Meta</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   This document specifies the BBR congestion control algorithm.  BBR
   ("Bottleneck Bandwidth and Round-trip propagation time") uses recent
   measurements of a transport connection's delivery rate, round-trip
   time, and packet loss rate to build an explicit model of the network
   path.  BBR then uses this model to control both how fast it sends
   data and the maximum volume of data it allows in flight in the
   network at any time.  Relative to loss-based congestion control
   algorithms such as Reno [RFC5681] or CUBIC [RFC9438], BBR offers
   substantially higher throughput for bottlenecks with shallow buffers
   or random losses, and substantially lower queueing delays for
   bottlenecks with deep buffers (avoiding "bufferbloat").  BBR can be
   implemented in any transport protocol that supports packet-delivery
   acknowledgment.  Thus far, open source implementations are available
   for TCP [RFC9293] and QUIC [RFC9000].  This document specifies
   version 3 of the BBR algorithm, BBRv3.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ccwg-bbr-06"/>
        </reference>
      </references>
    </references>
    <?line 172?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The author would like to thank Michael Welzl, Sebastian Moeller, Chris Box, and Greg White for suggesting improvements to this document. The author also thanks the developers and contributors of the FQ-PIE implementations in Linux, FreeBSD, and ns-3. Vishal Kamath and Arun Kumar R contributed to the FQ-PIE experiments.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
mc3sOh7W12UCJv9/tOg2T4AvAAA=

-->

</rfc>
