<?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-rfc2629 version 1.5.12 -->
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-cpbs-pseudorandom-ctls-00" category="exp" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.10.0 -->
  <front>
    <title abbrev="Pseudorandom cTLS">The Pseudorandom Extension for cTLS</title>
    <seriesInfo name="Internet-Draft" value="draft-cpbs-pseudorandom-ctls-00"/>
    <author initials="B." surname="Schwartz" fullname="Benjamin Schwartz">
      <organization>Google LLC</organization>
      <address>
        <email>bemasc@google.com</email>
      </address>
    </author>
    <author initials="C." surname="Patton" fullname="Christopher Patton">
      <organization>Cloudflare, Inc.</organization>
      <address>
        <email>cpatton@cloudflare.com</email>
      </address>
    </author>
    <date year="2021" month="October" day="25"/>
    <area>Security</area>
    <workgroup>TLS WG</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This draft describes a cTLS extension that allows each party to emit a purely pseudorandom bitstream.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/bemasc/pseudorandom-ctls"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="conventions-and-definitions" numbered="true" toc="default">
      <name>Conventions and Definitions</name>
      <t>The contents of a two-party protocol as perceived by a third party are called the "wire image".</t>
      <t>A Strong Tweakable Pseudorandom Permutation (STPRP) is a variable-input-length block cipher that accepts a high-entropy "key" and low-entropy "tweak".</t>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/> when, and only when, they
appear in all capitals, as shown here.</t>
    </section>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <section anchor="background" numbered="true" toc="default">
        <name>Background</name>
        <t>Compact TLS <xref target="cTLS" format="default"/> is a compact representation of TLS 1.3 (or later), intended for uses where compatibility with previous versions of TLS is not required.  It defines a pre-configuration object called a "template" that contains a profile of the capabilities and behaviors of a TLS server, which is known to both client and server before they initiate a connection.  The template allows both parties to omit information that is irrelevant or redundant, allowing a secure connection to be established while exchanging fewer bits on the wire.</t>
        <t>Every cTLS template potentially results in a distinct wire image, with important implications for user privacy and ossification risk.</t>
        <t>One interesting consequence of conventional wire formats (i.e. not pseudorandom) is the risk of protocol confusion attacks.  For example, in the NAT Slipstreaming attacks <xref target="SLIPSTREAM" format="default"/>, a web server causes a browser to send HTTP data that can be confused for another protocol (e.g. SIP) that is processed by a firewall.  Because firewalls are typically focused on attacks arriving from outside the network, malicious payloads sent from a trusted client can trick some firewalls into disabling their own protections.</t>
      </section>
      <section anchor="goal" numbered="true" toc="default">
        <name>Goal</name>
        <t>The goal of this extension is to enable two endpoints to agree on a TLS-based protocol whose wire image is purely pseudorandom.</t>
        <section anchor="requirements" numbered="true" toc="default">
          <name>Requirements</name>
          <ul spacing="normal">
            <li>Protocol confusion attack resistance: Neither party has any influence over the bytes emitted by the other party.</li>
            <li>Privacy: A third party without access to the template cannot tell whether two connections are using the same pseudorandom cTLS template, or two different pseudorandom cTLS templates.</li>
            <li>Ossification risk: Every byte sent on the underlying transport is pseudorandom to an observer who does not know the cTLS template.</li>
            <li>Efficiency: Zero size overhead and minimal CPU cost.  Support for servers with many cTLS templates, when appropriately constructed.</li>
          </ul>
        </section>
        <section anchor="non-requirements" numbered="true" toc="default">
          <name>Non-requirements</name>
          <ul spacing="normal">
            <li>Efficient support for demultiplexing arbitrary cTLS templates.</li>
            <li>Addressing information leakage in the length and timing of transmissions.</li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="the-pseudorandom-extension" numbered="true" toc="default">
      <name>The Pseudorandom Extension</name>
      <section anchor="form" numbered="true" toc="default">
        <name>Form</name>
        <t>A cTLS template is structured as a JSON object.  This extension is represented by an additional key, "pseudorandom", whose value is an object with two string-valued keys: "stprp" (a name from the STPRP registry (see <xref target="iana" format="default"/>)) and "key" (a base64-encoded shared secret whose length is specified by the STPRP).  For example, a cTLS template might contain an entry like:</t>
        <sourcecode type="json"><![CDATA[
"pseudorandom": {
  "stprp": "aes-128-cbc-mask-cbc",
  "key": "nx2kEm50FCE...TyOhGOw477EHS"
},
]]></sourcecode>
        <ul empty="true">
          <li>
            <t>TODO: Talk about compatibility.  Pseudorandom isn't backwards-compatible.  Is there even such a thing as a "cTLS extension"?</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>TODO: Consider having two keys, one for sending data from client to server and another for sending data from server to client, to align better with the TLS key schedule.  These could be specified explicitly or generated from a single secret by a KDF.</t>
          </li>
        </ul>
      </section>
      <section anchor="use" numbered="true" toc="default">
        <name>Use</name>
        <t>The cTLS Record Layer protocol is comprised of AEAD-encrypted ciphertext fragments interleaved with plaintext fragments.  Each record is prefixed by a plaintext header, and some records, like those containing the ClientHello and ServerHello, are not encrypted at all.  The ciphertext fragments are pseudorandom already, so this extension specifies a transformation of the plaintext fragments that ensures that all bits written to the wire are pseudorandom.</t>
        <t>Conceptually, the extension sits between the cTLS Record Layer and the underlying transport (e.g. TCP, UDP).  The transformation is based on an STPRP with the following syntax:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
STPRP-Encipher(key, tweak, message) -> ciphertext
STPRP-Decipher(key, tweak, ciphertext) -> message
]]></artwork>
        <t>The STPRP specifies the length (in bytes) of the key.  The tweak is a byte string of any length.  The STPRP uses the key and tweak to encipher the input message, which also may have any length.  The output ciphertext has the same length as the input message.</t>
        <t>The Pseudorandom cTLS design assumes that the negotiated AEAD algorithm produces pseudorandom ciphertexts.  This is not a requirement of the AEAD specification <xref target="RFC5116" format="default"/>, but it is true of popular AEAD algorithms like AES-GCM and ChaCha20-Poly1305.</t>
        <t>Pseudorandom cTLS uses the STPRP to encipher all plaintext handshake records, including the record headers.  As long as there is sufficient entropy in the <tt>key_share</tt> extension or <tt>random</tt> field of the ClientHello (resp. ServerHello) the STPRP output will be pseudorandom.</t>
        <ul empty="true">
          <li>
            <t>TODO: Check that the assumptions hold for HelloRetryRequest.  As long as no handshake messages are repeated verbatim, it should be fine, but we need to check whether an active attacker can trigger a replay.</t>
          </li>
        </ul>
        <t>Pseudorandom cTLS also enciphers every record header.  In addition to the header, 16 bytes of the AEAD ciphertext itself is enciphered to ensure the input has enough entropy.  All currently registered AEAD algorithms produce at least this much ciphertext from any input.  Any AEAD algorithm that can produce smaller ciphertexts is not compatible with this specification.</t>
        <section anchor="with-streaming-transports" numbered="true" toc="default">
          <name>With Streaming Transports</name>
          <t>When used over a streaming transport, Pseudorandom cTLS requires that headers have predictable lengths.  This creates the following limitations:</t>
          <ul spacing="normal">
            <li>If a Connection ID is negotiated, it MUST always be included.</li>
            <li>If the Sequence Number is not suppressed in the template, it MUST always have 16-bit length.</li>
          </ul>
          <t>Normally, when TLS runs on top of a streaming transport, Connection IDs are not enabled and Sequence Numbers are omitted, so this is not expected to be a significant limitation.</t>
          <t>The transformation performed by the sender takes the following inputs:</t>
          <ul spacing="normal">
            <li>
              <tt>STPRP-Encipher()</tt> and <tt>key</tt> from <tt>template.pseudorandom</tt></li>
            <li>
              <tt>template.profile_id</tt> from the cTLS template</li>
          </ul>
          <t>The sender first constructs any CTLSPlaintext records as follows:</t>
          <ol spacing="normal" type="1"><li>Set <tt>tweak = "client hs" + profile_id</tt> if sent by the client, or <tt>"server hs" + profile_id</tt> if sent by the server.</li>
            <li>Replace the message with <tt>STPRP-Encipher(key, tweak, message)</tt>.</li>
            <li>Fragment the message if necessary, ensuring at least 16 bytes of message in each fragment.</li>
            <li>Change the <tt>content_type</tt> of the final fragment to <tt>ctls_handshake_end(TBD)</tt>.</li>
          </ol>
          <t>Note: This procedure assumes that handshake messages are at least 16 bytes long.  This condition is automatically true in most configurations.</t>
          <t>The sender then constructs cTLS records as usual, but applies the following transformation before sending each record:</t>
          <ol spacing="normal" type="1"><li>Let <tt>hdr_length</tt> be the length of the record header (normally 3 for CTLSCiphertext or 4 for CTLSPlaintext).</li>
            <li>Let <tt>prefix</tt> be the first <tt>hdr_length + 16</tt> bytes of the record.</li>
            <li>Set <tt>tweak = "client"</tt> if sent by the client, or <tt>"server"</tt> if sent by the server.</li>
            <li>If the record is CTLSCiphertext, append the 64-bit Sequence Number to <tt>tweak</tt>.</li>
            <li>Replace <tt>prefix</tt> with <tt>STPRP-Encipher(key, tweak, prefix)</tt>.</li>
          </ol>
          <ul empty="true">
            <li>
              <t>OPEN ISSUE: How should we actually form the tweaks?  Can we assume arbitrary length?  Should we add some kind of chaining, within a stream or binding ServerHello to ClientHello?</t>
            </li>
          </ul>
        </section>
        <section anchor="with-datagram-transports" numbered="true" toc="default">
          <name>With Datagram Transports</name>
          <t>Pseudorandom cTLS applies to datagram applications of cTLS without restriction.  If there are multiple records in the datagram, encipherment starts with the last record header and proceeds back-to-front.</t>
          <t>Given the inputs:</t>
          <ul spacing="normal">
            <li>
              <tt>payload</tt>, an entire datagram that may contain multiple cTLS records.</li>
            <li>
              <tt>STPRP-Decipher()</tt> and <tt>key</tt> from <tt>template.pseudorandom</tt></li>
            <li>
              <tt>template.profile_id</tt></li>
            <li>
              <tt>connection_id</tt>, the ID expected on incoming CTLSCiphertext records</li>
          </ul>
          <t>The recipient deciphers the datagram as follows:</t>
          <ol spacing="normal" type="1"><li>Let <tt>max_hdr_length = max(16, len(connection_id) + 5)</tt>.  This represents the most data that might be needed to read the DTLS Handshake header (<xref section="5.2" sectionFormat="of" target="DTLS13" format="default"/>) or the CTLSCiphertext header.</li>
            <li>Let <tt>index = 0</tt>.</li>
            <li>
              <t>While <tt>index != len(payload)</tt>:
              </t>
              <ol spacing="normal" type="1"><li>Let <tt>prefix = payload[index : min(len(payload), index + max_hdr_length + 16)]</tt></li>
                <li>Let <tt>tweak = "client datagram" + len(payload) + index</tt> if sent by the client, or <tt>"server datagram" + len(payload) + index</tt> if sent by the server.</li>
                <li>Replace <tt>prefix</tt> with <tt>STPRP-Decipher(key, tweak, prefix)</tt>.</li>
                <li>Set <tt>index</tt> to the end of this record.</li>
              </ol>
            </li>
          </ol>
          <t>CTLSPlaintext records are subject to an additional decipherment step:</t>
          <ol spacing="normal" type="1"><li>Perform fragment reassembly to recover the complete <tt>Handshake.body</tt> (<xref section="5.5" sectionFormat="of" target="DTLS13" format="default"/>).</li>
            <li>Let <tt>tweak</tt> be <tt>"client datagram hs" + profile_id + Handshake.msg_type</tt> if sent by the client, or <tt>"server datagram hs" + profile_id + Handshake.msg_type</tt> if sent by the server.</li>
            <li>Replace <tt>Handshake.body</tt> with <tt>STPRP-Decipher(key, tweak, Handshake.body)</tt>.</li>
          </ol>
        </section>
      </section>
    </section>
    <section anchor="plaintext-alerts" numbered="true" toc="default">
      <name>Plaintext Alerts</name>
      <t>Representing plaintext alerts (i.e. CTLSPlaintext messages with <tt>content_type = alert(TBD)</tt>) requires additional steps, because Alert fragments have little entropy.</t>
      <t>A standard TLS Alert fragment is always 2 bytes long.  In Pseudorandom cTLS, senders MUST append at least 16 random bytes to any plaintext Alert fragment.  Enciphering and deciphering then proceed identically to other CTLSPlaintext messages.  The recipient MUST remove these bytes before passing the CTLSPlaintext to the cTLS implementation.</t>
      <t>Servers SHOULD expand any Alert message following the ClientHello to the same size as their usual ServerHello, and SHOULD send additional random TCP segments or datagrams to match the sizes of subsequent components of their ordinary success response.  Otherwise, an adversary could use probing to learn the allowed lengths of ClientHellos and the fraction of ciphertexts that decipher to valid ClientHellos.</t>
      <ul empty="true">
        <li>
          <t>QUESTION: Are there client-issued Alerts in response to malformed ServerHello?</t>
        </li>
      </ul>
    </section>
    <section anchor="operational-considerations" numbered="true" toc="default">
      <name>Operational Considerations</name>
      <t>Pseudorandom cTLS can interfere with the use of multiple profiles on a single server.  To use Pseudorandom cTLS with multiple profiles, servers must use the same STPRP key and the same lengths of <tt>connection_id</tt>.</t>
      <t>Pseudorandom cTLS adds a constant, symmetric computational cost to sending and receiving every record, roughly similar to the cost of encrypting a very small record.  The cryptographic cost of delivering small records will therefore be increased by a constant factor, and the computational cost of delivering large records will be almost unchanged.</t>
      <ul empty="true">
        <li>
          <t>TODO: Key rotation.  How does it work?  We could possibly use trial decryption, with parsing and profile-id matching as an implicit MAC, but it feels a bit soft.  Does it help if we put a "key ID" in the tweak?</t>
        </li>
      </ul>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>Pseudorandom cTLS operates as a layer between cTLS and its transport, so the security properties of cTLS are largely preserved.  However, there are some small differences.</t>
      <t>In datagram mode, the <tt>profile_id</tt> and <tt>connection_id</tt> fields allow a server to reject almost all packets from a sender who does not know the template (e.g. a DDoS attacker), with minimal CPU cost.  Pseudorandom cTLS requires the server to apply a decryption operation to every incoming datagram before establishing whether it might be valid.  This operation is O(1) and uses only symmetric cryptography, so the impact is expected to be bearable in most deployments.</t>
      <ul empty="true">
        <li>
          <t>TODO: More precise security properties and security proof.  The goal we're after hasn't been widely considered in the literature so far, at least as far as we can tell.  The basic idea is that the "real" protocol (Pseudorandom cTLS) should be indistinguishable from some "target" protocol that the network is known tolerate.  The assumption is that middleboxes would not attempt to parse packets whose contents are pseudorandom.  (The same idea underlies QUIC's wire encoding format <xref target="RFC9000" format="default"/>.)   A starting point might be the formal notion of "Observational Equivalence" (https://infsec.ethz.ch/content/dam/ethz/special-interest/infk/inst-infsec/information-security-group-dam/research/publications/pub2015/ASPObsEq.pdf).</t>
        </li>
      </ul>
    </section>
    <section anchor="privacy-considerations" numbered="true" toc="default">
      <name>Privacy Considerations</name>
      <t>Pseudorandom cTLS is intended to improve privacy in scenarios where the adversary lacks access to the cTLS template.  However, if the adversary does have access to the cTLS template, and the template does not have a distinctive <tt>profile_id</tt>, Pseudorandom cTLS can reduce privacy, by enabling strong confirmation that a connection is indeed using that template.</t>
    </section>
    <section anchor="iana" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>We assume the existence of an IANA registry of Strong Tweakable Pseudorandom Permutations (STPRPs).  However, no such registry exists at present.  This draft is blocked until someone documents and registers a suitable STPRP algorithm.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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="cTLS">
          <front>
            <title>Compact TLS 1.3</title>
            <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>Arm Limited</organization>
            </author>
            <date day="25" month="October" year="2021"/>
            <abstract>
              <t>   This document specifies a "compact" version of TLS 1.3.  It is
   isomorphic to TLS 1.3 but saves space by trimming obsolete material,
   tighter encoding, a template-based specialization technique, and
   alternative cryptographic techniques. cTLS is not directly
   interoperable with TLS 1.3, but it should eventually be possible for
   a cTLS/TLS 1.3 server to exist and successfully interoperate.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-ctls-04"/>
        </reference>
        <reference anchor="RFC5116">
          <front>
            <title>An Interface and Algorithms for Authenticated Encryption</title>
            <author fullname="D. McGrew" initials="D." surname="McGrew">
              <organization/>
            </author>
            <date month="January" year="2008"/>
            <abstract>
              <t>This document defines algorithms for Authenticated Encryption with Associated Data (AEAD), and defines a uniform interface and a registry for such algorithms.  The interface and registry can be used as an application-independent set of cryptoalgorithm suites.  This approach provides advantages in efficiency and security, and promotes the reuse of crypto implementations.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5116"/>
          <seriesInfo name="DOI" value="10.17487/RFC5116"/>
        </reference>
        <reference anchor="DTLS13">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
              <organization>RTFM, Inc.</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>Arm Limited</organization>
            </author>
            <author fullname="Nagendra Modadugu" initials="N." surname="Modadugu">
              <organization>Google, Inc.</organization>
            </author>
            <date day="30" month="April" year="2021"/>
            <abstract>
              <t>   This document specifies Version 1.3 of the Datagram Transport Layer
   Security (DTLS) protocol.  DTLS 1.3 allows client/server applications
   to communicate over the Internet in a way that is designed to prevent
   eavesdropping, tampering, and message forgery.

   The DTLS 1.3 protocol is intentionally based on the Transport Layer
   Security (TLS) 1.3 protocol and provides equivalent security
   guarantees with the exception of order protection/non-replayability.
   Datagram semantics of the underlying transport are preserved by the
   DTLS protocol.

   This document obsoletes RFC 6347.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-dtls13-43"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="SLIPSTREAM" target="https://samy.pl/slipstream/">
          <front>
            <title>NAT Slipstreaming v2.0</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments" toc="default">
      <name>Acknowledgments</name>
      <t>TODO</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIABwVd2EAA6VbbXMbN5L+Pr8CYT5EuiVpSX7JhlVJVpYUW7u2pZhyue62
tixwBiQRDQezg6EoxqX8lvst98vu6W5gXih5k73b2opJzgBo9MvTTzeg0WiU
1LbOzUQNrpZGXXqzzlyli8yt1NldbQpvXaHmrlLp1ZvpINGzWWVu8XbvTXmW
ubTQK0yVVXpej9Jy5kdl57VRWud+dHCQpLo2C1dtJ8rclUliy2qi6mrt66OD
g+8OjhJdGT1RU5OuK1tvk42rbhaVW5cThXXUx1fJjdnix2yizovaVIWpR6e0
ZJL4Git90rkrIMbW+KS0E/X32qVD5V1VV2bu8Wm7og//SBK9rpeumiRqlCj8
zxZ+ol6O1TRdbnRV/8o/ypZemuIXvbJF/5mrFrqwv+oaSpqoV84tcqPevDnh
h2albT5RM/zr078s+OE4daveaidjdanr2hWdtU6WlfW1K5em6j7sL3aSu3U2
z6GqIbSQjrtLpiWP+kvavMPrJoWrVhh+a7Bj9f6nk6PDw+8m0H8x7z6Yvjm/
nF69Pzt+O+FJa10tTD1Ry7ou/eTJE69X23GZP/G5LT1UqldP5D3xo3fHV2ra
PLLFQt0ejQ+SJBmNRkrP8LNOYamrpfXiKCozPq3szHil2ZPgFdHx6qWulc5z
t/HK6HSpSuh+q2qHrVo8UeW6MvlWdd1MzWwti49l0ZXNstwkydfqxBW3piAF
Yq0iU6dmbgvL30kio1IHhypqr9wck9cbN5IFy8rBiVyutFelqVIDXWVqtqWX
lrbKglzQtEohLp7VmG2wsfjBrvTCDCDLsZrWlYNCrjZG3+hZvhNvl6ZarWu2
r9qbXl2+v9xXlpRyqytLr49sUa7rUW6KRb1Us9ylNyq17CeiqDQ1ZU0jlnax
HGEjlSu3aoBwGfB+ocf215qkILlo43hFUUh5NXj7YXo1GMq/6t0Ff35/9vOH
8/dnp/R5+vr4zZvmQxLemL6++PDmtP3Ujjy5ePv27N2pDMavqvdTMnh7/J94
QuINLi6vzi/eHb8ZIDhIsfAQl65XEJlVC7PPoE+K+bIyNbSsfRK9J6MxL08u
/+e/D5+pz5+/Cv59fx++/Pnw22f4slmaQlZzBRxHvsJY20SXpdEVzQILwoyl
rXUOuIDJ/dJtCgU9G6gLfnROOszWKZkK379WL3XKEFVkSXLiViVcnLEKS5NH
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
uTcDKIdgOflfmFqB4MI2AAA=

-->

</rfc>
