<?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-connolly-cfrg-hpke-mlkem-04" category="info" consensus="true" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title abbrev="hpke-mlkem">ML-KEM for HPKE</title>
    <seriesInfo name="Internet-Draft" value="draft-connolly-cfrg-hpke-mlkem-04"/>
    <author fullname="Deirdre Connolly">
      <organization>SandboxAQ</organization>
      <address>
        <email>durumcrustulum@gmail.com</email>
      </address>
    </author>
    <date year="2024" month="October" day="19"/>
    <area>IRTF</area>
    <workgroup>Crypto Forum</workgroup>
    <keyword>post quantum</keyword>
    <keyword>kem</keyword>
    <keyword>PQ</keyword>
    <keyword>hpke</keyword>
    <keyword>hybrid encryption</keyword>
    <abstract>
      <?line 65?>

<t>This document defines Module-Lattice-Based Key-Encapsulation Mechanism
(ML-KEM) KEM options for Hybrid Public-Key Encryption (HPKE). ML-KEM is
believed to be secure even against adversaries who possess a
cryptographically-relevant quantum computer.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://dconnolly.github.io/draft-connolly-cfrg-hpke-mlkem/draft-connolly-cfrg-hpke-mlkem.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-connolly-cfrg-hpke-mlkem/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Crypto Forum Research Group mailing list (<eref target="mailto:cfrg@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/search/?email_list=cfrg"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cfrg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/dconnolly/draft-connolly-cfrg-hpke-mlkem"/>.</t>
    </note>
  </front>
  <middle>
    <?line 72?>

<section anchor="intro">
      <name>Introduction</name>
      <section anchor="motivation">
        <name>Motivation</name>
        <t>ML-KEM <xref target="FIPS203"/> is a Key-Encapsulation Mechanism (KEM) which is believed
to be secure against both classical and quantum cryptographic attacks. For
parties that must move to exclusively post-quantum algorithms, this document
defines pure post-quantum algorithms for the Hybrid Public-Key Encryption
(HPKE) protocol <xref target="RFC9180"/>. ML-KEM as a post-quantum IND-CCA2-secure KEM
fits nicely into HPKE's design. Supporting multiple security levels for
ML-KEM allows a spectrum of use cases including settings where the (United
States) National Institute of Standards (NIST) security category 5 is
required.</t>
      </section>
      <section anchor="S-notauth">
        <name>Not an authenticated KEM</name>
        <t>ML-KEM is a plain KEM that does not support the static-static key exchange
that allows HPKE based on Diffie-Hellman (DH) based KEMs and their (optional)
authenticated modes.</t>
      </section>
    </section>
    <section anchor="conventions">
      <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?>

<t>The following terms are used throughout this document to describe the
operations, roles, and behaviors of HPKE:</t>
      <ul spacing="normal">
        <li>
          <t><tt>concat(x0, ..., xN)</tt>: returns the concatenation of byte
strings. <tt>concat(0x01, 0x0203, 0x040506) = 0x010203040506</tt>.</t>
        </li>
        <li>
          <t><tt>random(n)</tt>: return a pseudorandom byte string of length <tt>n</tt> bytes produced
by a cryptographically-secure random number generator, specifically <bcp14>MUST</bcp14> be
a FIPS-approved random bit generator (RBG) as described in section 3.3 of
<xref target="FIPS203"/>.</t>
        </li>
      </ul>
      <t><tt>GenerateKeyPair</tt>, <tt>DeriveKeyPair</tt>, <tt>SerializePublicKey</tt>,
<tt>DeserializePublicKey</tt>, <tt>Encap</tt>, <tt>Decap</tt>, <tt>AuthEncap</tt>, <tt>AuthDecap</tt>,
<tt>Nsecret</tt>, <tt>Nenc</tt>, <tt>Npk</tt>, and <tt>Nsk</tt> are defined in Section 4 of <xref target="RFC9180"/>.</t>
      <t>When used in the Security Consideration section, <tt>PK</tt> refers to public key
and <tt>CT</tt> refers to ciphertext as modeled in <xref target="CDM23"/>.</t>
      <t><strong>TODO</strong>: explain or reference IND-CCA, IND-CCA2, MAL-BIND-K-PK,
MAL-BIND-K-CT, and LEAK-BIND-K-PK.</t>
    </section>
    <section anchor="usage">
      <name>Usage</name>
      <t><xref target="FIPS203"/> supports two different key formats -  this document only supports
the 64-byte seed <tt>(d, z)</tt>. This format supports stronger binding properties
for ML-KEM than the expanded format. The 64-byte seed format protects against
re-encapsulation attacks. This format provides properties closer to the
generic DHKEM binding properties defined in Section 4.1 of <xref target="RFC9180"/>.</t>
      <t>The encapsulation and decapsulation keys are computed, serialized, and
deserialized as described in <xref target="FIPS203"/> where the decapsulation keys <bcp14>MUST</bcp14> be
in the 64-byte <tt>(d, z)</tt> format. The 'expanded' format where the decapsulation
key is expanded into a variable size based on the parameter set but includes
the hash of the encapsulation key is not used.</t>
      <section anchor="generate-key-pair">
        <name>Key generation</name>
        <t>ML-KEM satisfies the HPKE KEM function <tt>GenerateKeyPair()</tt>, the randomized
algorithm to generate a key pair, via Algorithm 19 <tt>ML-KEM.KeyGen()</tt> in
<xref target="FIPS203"/>. To be explicit, we use only the seed format <tt>(d, z)</tt> generated
by lines 1 and 2 of Algorithm 19 <tt>ML-KEM.KeyGen()</tt> of <xref target="FIPS203"/> and stored
securely as described in section 7.1 of <xref target="FIPS203"/>.</t>
        <artwork><![CDATA[
def GenerateKeyPair():
    d = random(32) # `random(n)` MUST comply with {{FIPS203}}'s RBG requirements
    z = random(32) # `random(n)` MUST comply with {{FIPS203}}'s RBG requirements
    (ek, _) = ML-KEM.KeyGen_internal(d, z)
    return (concat(d, z), ek)
]]></artwork>
      </section>
      <section anchor="derive-key-pair">
        <name>Key derivation</name>
        <t>ML-KEM satisfies the HPKE KEM function <tt>DeriveKeyPair(ikm)</tt>, the
deterministic algorithm to derive a key pair from the byte string <tt>ikm</tt>,
where <tt>ikm</tt> <bcp14>SHOULD</bcp14> have at least <tt>Nsk</tt> bytes, via Algorithm 16
<tt>ML-KEM.KeyGen_internal(d, z)</tt> in <xref target="FIPS203"/>.</t>
        <t>The input <tt>ikm</tt> is the 64-byte decapsulation key <tt>(d, z)</tt>, described as the
seed in section 7.1 in <xref target="FIPS203"/>. The 64 bytes of <tt>ikm</tt> <bcp14>MUST</bcp14> be generated
according to section 7.1, Algorithm 19, of <xref target="FIPS203"/>, that is by freshly
sourcing 32 random bytes for <tt>d</tt> and then freshly sourcing another 32 random
bytes for <tt>z</tt> from a FIPS-approved RBG.</t>
        <t>The RBG <bcp14>MUST</bcp14> have a security strength of at least 128 bits for ML-KEM-512, at
least 192 bits for ML-KEM-768, and at least 256 bits for ML-KEM-1024.</t>
      </section>
      <section anchor="serialize-public-key">
        <name>Public key serialization</name>
        <t>The HPKE KEM function <tt>SerializePublicKey()</tt> is the identity function, since
the ML-KEM already uses fixed-length byte strings for public encapsulation
keys per parameter set.</t>
      </section>
      <section anchor="deserialize-public-key">
        <name>Public key deserialization</name>
        <t>The HPKE KEM function <tt>DeserializePublicKey()</tt> is the identity function,
since the ML-KEM already uses fixed-length byte strings for public
encapsulation keys per parameter set.</t>
      </section>
      <section anchor="encap">
        <name>Encapsulation</name>
        <t>ML-KEM satisfies the HPKE KEM function <tt>Encap(pkR)</tt> via Algorithm 20,
<tt>ML-KEM.Encaps(ek)</tt>, of <xref target="FIPS203"/>, where an ML-KEM encapsulation key check
failure causes an HPKE <tt>EncapError</tt>.</t>
      </section>
      <section anchor="decap">
        <name>Decapsulation</name>
        <t>ML-KEM satisfies the HPKE KEM function <tt>Decap(enc, skR)</tt> via Algorithm 21,
<tt>ML-KEM.Decaps(dk, c)</tt>, of <xref target="FIPS203"/>, where an ML-KEM ciphertext check
failure or decapsulation key check failure or hash check failure cause an
HPKE <tt>DecapError</tt>.</t>
        <t>To be explicit, we derive the expanded decapsulation key from the 64-byte
seed format and invoke <tt>ML-KEM.Decaps(dk)</tt> with it:</t>
        <artwork><![CDATA[
def Decap(enc, skR):
    (sk, _) = DeriveKeyPair(skR) # expand decapsulation key from 64-byte format
    return ML-KEM.Decaps(sk, enc)
]]></artwork>
      </section>
      <section anchor="S-auth">
        <name>AuthEncap and AuthDecap</name>
        <t>HPKE-ML-KEM is not an authenticated KEM and does not support AuthEncap() nor
AuthDecap(), see <xref target="S-notauth"/>.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>HPKE's IND-CCA2 security relies upon the IND-CCA and IND-CCA2 security of the
underlying KEM and AEAD schemes, respectively. ML-KEM is believed to be
IND-CCA secure via multiple analyses.</t>
      <t>The HPKE key schedule is independent of the encapsulated KEM shared secret
ciphertext and public key of the ciphersuite KEM, and dependent on the shared
secret produced by the KEM. If HPKE had committed to the encapsulated shared
secret ciphertext and public key, we wouldn't have to worry about the binding
properties of the ciphersuite KEM's X-BIND-K-CT and X-BIND-K-PK
properties. These computational binding properties for KEMs were formalized
in <xref target="CDM23"/>. <xref target="CDM23"/> describes DHKEM as MAL-BIND-K-PK and MAL-BIND-K-CT
secure as a result of the inclusion of the serialized DH public keys (the
KEM's PK and CT) in the DHKEM Key Derivation Function (KDF). MAL-BIND-K-PK
and MAL-BIND-K-CT security ensures that the shared secret K 'binds' (is
uniquely determined by) the encapsulation key and/or the ciphertext, even
when the adversary is able to create or modify the key pairs or has access to
honestly-generated leaked key material.</t>
      <t>ML-KEM as specified in <xref target="FIPS203"/> with the seed key format provides
MAL-BIND-K-CT security and LEAK-BIND-K-PK security <xref target="KEMMY24"/>.
LEAK-BIND-K-PK security is resiliant where the involved key pairs are output
by the honest key generation algorithm of the KEM and then leaked to the
adversary. MAL-BIND-K-CT security strongly binds the shared secret and the
ciphertext even when an adversary can manipulate key material like the
decapsulation key.</t>
      <t>ML-KEM using the seed key format (providing MAL-BIND-K-CT and LEAK-BIND-K-PK)
nearly matches the binding properties of DHKEM (the default HPKE KEM
construction). The ML-KEM ciphertext is strongly bound by the shared
secret. The encapsulation key is more weakly bound, and protocols integrating
HPKE using ML-KEM even with the seed key format should evaluate whether they
need to strongly bind to the PK elsewhere (outside of ML-KEM or HPKE) to be
resilient against a MAL adversary, or to achieve other tight binding to the
encapsulation key PK to achieve properties like implicit authentication or
session independence.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document requests/registers two new entries to the "HPKE KEM
Identifiers" registry.</t>
      <dl>
        <dt>Value:</dt>
        <dd>
          <t>0x0040 (please)</t>
        </dd>
        <dt>KEM:</dt>
        <dd>
          <t>ML-KEM-512</t>
        </dd>
        <dt>Nsecret:</dt>
        <dd>
          <t>32</t>
        </dd>
        <dt>Nenc:</dt>
        <dd>
          <t>768</t>
        </dd>
        <dt>Npk:</dt>
        <dd>
          <t>800</t>
        </dd>
        <dt>Nsk:</dt>
        <dd>
          <t>64</t>
        </dd>
        <dt>Auth:</dt>
        <dd>
          <t>no</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>This document</t>
        </dd>
        <dt>Value:</dt>
        <dd>
          <t>0x0041 (please)</t>
        </dd>
        <dt>KEM:</dt>
        <dd>
          <t>ML-KEM-768</t>
        </dd>
        <dt>Nsecret:</dt>
        <dd>
          <t>32</t>
        </dd>
        <dt>Nenc:</dt>
        <dd>
          <t>1088</t>
        </dd>
        <dt>Npk:</dt>
        <dd>
          <t>1184</t>
        </dd>
        <dt>Nsk:</dt>
        <dd>
          <t>64</t>
        </dd>
        <dt>Auth:</dt>
        <dd>
          <t>no</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>This document</t>
        </dd>
        <dt>Value:</dt>
        <dd>
          <t>0x0042 (please)</t>
        </dd>
        <dt>KEM:</dt>
        <dd>
          <t>ML-KEM-1024</t>
        </dd>
        <dt>Nsecret:</dt>
        <dd>
          <t>32</t>
        </dd>
        <dt>Nenc:</dt>
        <dd>
          <t>1568</t>
        </dd>
        <dt>Npk:</dt>
        <dd>
          <t>1568</t>
        </dd>
        <dt>Nsk:</dt>
        <dd>
          <t>64</t>
        </dd>
        <dt>Auth:</dt>
        <dd>
          <t>no</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>This document</t>
        </dd>
      </dl>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9180">
          <front>
            <title>Hybrid Public Key Encryption</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="K. Bhargavan" initials="K." surname="Bhargavan"/>
            <author fullname="B. Lipp" initials="B." surname="Lipp"/>
            <author fullname="C. Wood" initials="C." surname="Wood"/>
            <date month="February" year="2022"/>
            <abstract>
              <t>This document describes a scheme for hybrid public key encryption (HPKE). This scheme provides a variant of public key encryption of arbitrary-sized plaintexts for a recipient public key. It also includes three authenticated variants, including one that authenticates possession of a pre-shared key and two optional ones that authenticate possession of a key encapsulation mechanism (KEM) private key. HPKE works for any combination of an asymmetric KEM, key derivation function (KDF), and authenticated encryption with additional data (AEAD) encryption function. Some authenticated variants may not be supported by all KEMs. We provide instantiations of the scheme using widely used and efficient primitives, such as Elliptic Curve Diffie-Hellman (ECDH) key agreement, HMAC-based key derivation function (HKDF), and SHA2.</t>
              <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9180"/>
          <seriesInfo name="DOI" value="10.17487/RFC9180"/>
        </reference>
        <reference anchor="FIPS203">
          <front>
            <title>Module-Lattice-Based Key-Encapsulation Mechanism Standard</title>
            <author>
              <organization/>
            </author>
            <date month="August" year="2024"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.203"/>
          <refcontent>National Institute of Standards and Technology</refcontent>
        </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="CDM23" target="https://eprint.iacr.org/2023/1933.pdf">
          <front>
            <title>Keeping Up with the KEMs: Stronger Security Notions for KEMs and automated analysis of KEM-based protocols</title>
            <author initials="C." surname="Cremers" fullname="Cas Cremers">
              <organization>CISPA Helmholtz Center for Information Security</organization>
            </author>
            <author initials="A." surname="Dax" fullname="Alexander Dax">
              <organization>CISPA Helmholtz Center for Information Security</organization>
            </author>
            <author initials="N." surname="Medinger" fullname="Niklas Medinger">
              <organization>CISPA Helmholtz Center for Information Security</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="KEMMY24" target="https://eprint.iacr.org/2024/523.pdf">
          <front>
            <title>Unbindable Kemmy Schmidt: ML-KEM is neither MAL-BIND-K-CT nor MAL-BIND-K-PK</title>
            <author initials="S." surname="Schmieg" fullname="Sophie Schmieg">
              <organization/>
            </author>
            <date year="2024"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 339?>

<section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to thank Cas Cremers for their input.</t>
    </section>
    <section anchor="change-log">
      <name>Change log</name>
      <ul empty="true">
        <li>
          <t><strong>RFC Editor's Note:</strong> Please remove this section prior to publication of a
final version of this document.</t>
        </li>
      </ul>
      <t>TODO</t>
      <section anchor="since-draft-connolly-cfrg-hpke-mlkem-00">
        <name>Since draft-connolly-cfrg-hpke-mlkem-00</name>
        <t>TODO</t>
      </section>
    </section>
    <section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>This section contains test vectors formatted similary to that which are found
in <xref target="RFC9180"/>, with two changes.  First, we only provide vectors for the
non-authenticated modes of operation.  Secondly, as ML-KEM encapsulation does
not involve an ephemeral keypair, we omit the ikmE, skEm, pkEm entries and
provide an ier entry instead.  The value of ier is the randomness used to
encapsulate, so <tt>ier[0:32]</tt> is the seed that is fed to H in the first step of
ML-KEM encapsulation in <xref target="FIPS203"/>.</t>
      <section anchor="ml-kem-512">
        <name>ML-KEM-512</name>
        <t>TODO</t>
      </section>
      <section anchor="ml-kem-768">
        <name>ML-KEM-768</name>
        <t>TODO</t>
      </section>
      <section anchor="ml-kem-1024">
        <name>ML-KEM-1024</name>
        <t>TODO</t>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA61a63IbN7L+j6fAkX+YdHEoUpIdW7WbrCLKsUrWJZa8u6mt
rXA4A5Iozi2DGcm0ynmW8yznyfbrBuZGUs4mJ/5hcTAAutHXrxvjeZ4odBGp
Y7l3+d67OLuU8zSX724uzvaEP5vl6v5YLrOV8uJopWIR+IVapPn6WOpkngoR
pkHix1gd5v688II0SdIoWnvBPF94zTpvdCRMOYu1MTpNinWGFecf7t6KpIxn
Kj8WIfY9FlhuVGJKcyyLvFQCtA+Fnysf3NH0PfGQ5qtFnpYZRk7zdVak8m2a
l/GeWKk1XobHQnoyS00hfyn9pChjeibO8efmR/qfuOK/61muQ6mSgPYBW+Je
JSW4kHI3BSkt43sflFF+HizlDzSPXsS+jvCCTv03rYr5MM0XNE6zML4siswc
7+/TNBrS92pYTdungX274f53iqb8HGlT/JU2oz0WuliWM+wSVtLd/7qwaVEE
eZqiRbpePLT7DXX6G9v8xuvhsoijPSH8slimOYkdZKWcl1FkLWKidB7mSp66
Dfg1Duwn+rNP8j6Wt34SztJPJz/yO2WlGJaQdpCXpiijMv7bgkaHQRoLkaR5
jJX3rKMPb0/fjF+P6Ofb85vbg9EhSF6fD8ej4avRwev9q/PbuyG9GeKVEGSu
rdWnk8uDw2MmW5n/hVKZThbyYyYfICJZLJWEP8AWb4s8TRYql7cqKHNdrOVV
Sgcw7Cs0R+IgEpJIQUHhV+JHa6ONTOf02pv5BqNZnhZpkEZmz9L184WCiioN
qSzXSTHUfpCzXRyMDg73x28OD4dZOOcV7CSSxvmxljz/89xfCc8Ez6dDeZqr
WOWmHrdqOfXN1huQw4vz25sT+U5F8TKNis/yVCUFzkxHPK+Elya1DHaTPRnK
if9pg+RJpD5BQNis/e7PI3o1lJcq1KSiDcpXehXhvFtv/yBt6PLyp4Ojrt18
TGY6Cf1ZBHNRcbyWt8Ey1iE06wIq7CBRsCjsfXny3vv+/GriXXindxL23B65
ufivDeNo/+XBDrs4+m27uB1a/tRiQ1S3abbUqn4pPM+T/swUuR8UQtwtcQoE
+zKGkGSo5jpRkGsalpHy3vtFoQPlfc9mfqHW3lkS+JkpIyvBSxUs4fUmFj0r
kj5JUqZZ40TvbDC+KWeRDjxsIc/quCx7lI76w0aeYqYire5BDNF5pqQhFSmJ
kUT6Cx8HLaQf3sPE/VyDz4dlSjnBKANPFbxvush9HDjwKbTlKlL3yBZVzpAI
N1kJYxhaOUCdYaSEeAbDQCwIy4D5enym6fELXjyDLBBbfDce1w946dh+fHRx
6ssXMgn/a4KSPZbSAxhc0uTqvKJz3uqosxThKoChGzoPx6L6IO2zSujJD1Zm
SBlNZH5ekHCKpV/IGOFWxum9IomqT0FUGkTKaM2p1Kt28yPkflhybAZY1rII
UVlERnw9sYYVTVH1a8oWVtl1sITYXKT/8qW2AJ/E16FCHnR6enLgOdFglpjr
Ap4Hw8QxoKiUUc1zMK2MXiTwgzLLUsgAMT8uo0JnkZMsRXgYhIqY5Up/sJT0
gQibTAWAJzFF99IoGcDsDShAaBRmsEdBm5LZKbBCJ+59TDQSg7gtKC/35RXr
G7o6h/50AVOjzfAWgSQPjexR9uo33FSwS74k68/VL6XOVThkw0MugsrZ66EJ
HXAGYoN7duslaUEvGitky8siGA7PYeWHKfjHTGmsRJhlA1ahHfsHCGpNZgHr
XCjBi5w4SKbS5jcY8ETP51p5iKlRDJ56k3d997LOkthb57Jnnd+P+qLLeJxC
PXQwwg33NE4hghZOyMS0fX58FjRvv1B4UswiIUADJPvx9m5vYP/Kq2v+/eHs
x4/nH84m9Pv23cn79/UP4Wbcvrv++H7S/GpWnl5fXp5dTexijMrOkNi7PPkJ
b4jJveubu/Prq5P3ezCIro8ADCoXrzQlmixXjBUMnMcEuZ7hAWu+P735v/8d
H8Hu/weGfzAev0G8sA+vx98c4QFmlVhqaQLTto+Q4Vr4WQYcSbtAOzCaTBd+
BF+Fv5hl+pBIMkgI98W/SDL/PpZ/mQXZ+OhbN0AH7gxWMusMssy2R7YWWyHu
GNpBppZmZ3xD0l1+T37qPFdybw3+5bsIMUl649fffSusjcxTslpyUigAEYlU
UpJ5FktA+cUyLYsNpUFhlXpIxiLNVM7OC7HmaaSM1cRMLf17neYM+cgnjpE5
5BRWCrPufRoN5HA4HMhPV/3psYTiyzwx7GZ2hkpsAsDi2bpAeQL3yymGDOs9
Rp9G44HE/8gg/Pdo9HL0qi//Sr/HNGpHpkMinIOpNO4lDTlye6PKMLWvmI6j
QmQjlSyQRabJlN8YCsDIc4hZEgNYvJ01Xah1+9lKTi5UQgJK8wHHST23kyXb
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
rPT5VCt81VbUDh2bg9ZpefQ/g8070sUsAAA=

-->

</rfc>
