<?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.14 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-amsuess-core-stateless-oscore-01" category="exp" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title>Stateless OSCORE</title>
    <seriesInfo name="Internet-Draft" value="draft-amsuess-core-stateless-oscore-01"/>
    <author initials="C." surname="Amsüss" fullname="Christian Amsüss">
      <organization/>
      <address>
        <postal>
          <country>Austria</country>
        </postal>
        <email>christian@amsuess.com</email>
      </address>
    </author>
    <date year="2024" month="October" day="16"/>
    <workgroup>core</workgroup>
    <keyword>oscore</keyword>
    <keyword>stateless</keyword>
    <keyword>server</keyword>
    <keyword>symmetric</keyword>
    <keyword>key distribution</keyword>
    <abstract>
      <?line 31?>

<t>OSCORE (Object Security for Constrained Restful Environemnts, <xref target="RFC8613"/>)
provides secure communication between peers that share symmetric key material.
This document describes how a server can operate with an arbitrarily large number of peers,
and how key material for this kind of operation can be provisioned to the client.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-amsuess-core-stateless-oscore/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        CoRE Working Group mailing list (<eref target="mailto:core@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/core/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://codeberg.org/chrysn/stateless-oscore"/>.</t>
    </note>
  </front>
  <middle>
    <?line 38?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>[ See also abstract. ]</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>For the purpose of this document,
a server is stateless
if a new client can establish an OSCORE context with the server,
and the server’s storage requirements are only porportional to the the logarithm of the number of existing clients.
(Practically, the storage requirements are not increased at all per new client,
but the required counter of established clients may increase to the point of requiring a longer identifier and thus counter).</t>
      </section>
      <section anchor="motivating-background">
        <name>Motivating background</name>
        <t>The Network Time Security mechanism (<xref target="RFC8915"/>)
describes cookies that enable a client to request time from a server in a secure way
while the server remains stateless.</t>
        <t>Applied to OSCORE,
the same mechanism may protect any CoAP based time retrievals
as well as other CoAP based information discovery
where a server acting on a replayed request is not harmful,
for example DNS over CoAP <xref target="I-D.ietf-core-dns-over-coap"/>.</t>
        <t>Storing OSCORE contexts is not very costly in terms of memory:
When deriving from the master key without a master salt,
then a minimal a security context
(containing a recipient ID,
a 4-byte recipient ID,
but no sender sequence number (could be global),
no sender ID (it can be fixed 0-byte as suitable for servers without role reversal),
and no replay window (see <xref target="sec-impl-reqs"/>))
uses 20 bytes.
Storing 4 billion contexts (using up all identifiers) “just” takes 80 Gigabytes,
which is managable for a server in the mid-2020s and may well fit in its RAM.
However, when used with clients that are unilaterally authenticated,
that limit can be exceeded by attackers,
creating a denial-of-service problem.</t>
        <t>Stateless OSCORE can also be used remove the need for synchronization in a distributed server:
When a CoAP server is distributed over a network
(e.g. using an anycast address),
it removes the need to synchronize information about every single established client context.</t>
      </section>
      <section anchor="sec-ops">
        <name>Operating a stateless OSCORE server</name>
        <section anchor="prerequisites">
          <name>Prerequisites</name>
          <t>An OSCORE server may operate in a stateless way
under a set of requirements.</t>
          <ul spacing="normal">
            <li>
              <t>The server does not perform role reversal with its clients.</t>
            </li>
            <li>
              <t>All resources accessible through that security context are safe in the sense of <xref target="RFC7252"/>,
meaning they do not take any other action on the resource than retrieval,
i.e., they are only GET and FETCH requests.  </t>
              <t>
A server MAY also use support methods that are not defined to be safe,
as long as the allowed operations take no actions other than retrieval
or the application is otherwise robust against replays sent in any order.</t>
            </li>
          </ul>
          <t>That the server may establish OSCORE contexts that are not stateless;
the constraints above do not apply to those contexts.
The server may tell those contexts apart from
a prefix to the KID,
the KID context,
or by using different lengths of KIDs / KID contexts
for the stateful contexts.</t>
        </section>
        <section anchor="sec-impl-reqs">
          <name>Implementation requirements</name>
          <t>As a stateless OSCORE server can not store a OSCORE context per peer,
it needs to re-derive the security context from data provided by the client as part of the request.
It also needs to encode the scope of the client’s authorization in there;
that information needs to be verified.
That information can be encoded in the KID or in the KID context.</t>
          <t>As the key material is re-derived,
the replay window is in an uninitialized state.
Consequently, the server can not decide whether a request is a replay.
Therefore, it MUST NOT use the sender’s nonce for the response, and MUST instead use an own sequence number.
As the sender sequence number for that context is not stored, it needs to use some global counter for sender sequence numbers.</t>
          <t>Some justification for why potentially replayed requests can safely be responded to
can be found in <xref section="3.1" sectionFormat="of" target="I-D.amsuess-lwig-oscore-00"/>.</t>
          <section anchor="distributed-implementation">
            <name>Distributed implementation</name>
            <t>Operating in stateless OSCORE mode enables running a server distributed over multiple physical systems
without the need to distribute key material per client.
Instead, servers MUST take measures to synchronize their sender sequence numbers such that under no circumstances,
a sender sequence number can be used in two different responses.</t>
            <t>One way of doing this is to use the lowest N bits of the sequence number field
to indicate which of the up to 2^N servers sent the response, and count in the higher fields.</t>
            <t>As this mechanisms negatively affects the total number of messages that can be sent with a key
(which, as per the previous section, is a global limit rather than a per-client limit),
alternatives are being investigated:
Potential options are sending a sender ID in the response
or using the not-capable form of KUDOS <xref target="I-D.ietf-core-oscore-key-update"/>.</t>
            <t>Users of such a server can transparently switch between different physical servers.
Caveats are that switching is not possible during an EDHOC exchange
(unless the EDHOC servers support recovering EDHOC state in the distributed server),
and that clients that perform replay window checks on responses will fail when
switching from a busy server to a less busy server.</t>
          </section>
        </section>
        <section anchor="sec-impl-suggestion">
          <name>Suggested implementation</name>
          <t>A stateless server may use the following pattern to re-derive its keys:</t>
          <t>The server partitions its recipient IDs into two fields, an Internal Key ID (IKI) and an Internal Key Counter (IKC).
Their total length limits the number of clients an OSCORE context is active with at any time;
the separation allows the server to roll over its internal keys and notify clients whose state may get lost.
The IKC can be incremented but can not overflow;
instead, a new internal key with a new IKI needs to be created.
When the IKI number space is exhausted,
a new internal key may replace an old key (with the IKI wrapping in modulo arithmetic),
and clients using the replaced key lose access to the server through this mechanism.</t>
          <t>A typical size of the IKI is 1 byte,
while the IKC is sized 4 bytes.
This allows serving 2^40 or roughly 1 trillion clients,
and can be expanded to a total of 7 bytes (10^16 clients) within the default algorithm’s KID.</t>
          <t>If there are differentiated scopes for a client’s authorization on a server,
that information can be appended to the KID if it is short
(for example, with the default algorithm, 1 byte IKI and 4 byte IKC leave 2 byte for the authorization),
or in the KID Context.
Alternatively, different IKIs can be used for different authorizations
if the set of possible authorization values is very small.</t>
          <t>For every IKI, the server maintains an internal key that is exclusively used as input material for OSCORE master keys.
The master secret of the OSCORE context corresponding to a key ID is derived by applying an extraction function
such as HKDF <xref target="RFC5869"/> to the key and the IKC.
The other parameters of the OSCORE context are pre-agreed.</t>
          <t>When a new client is provisioned,
the KID (consisting of IKI and IKC) and the master secret
are sent to the client through a secure channel.
From then on, the client can use that KID to send safe requests to the server,
and the server can reconstruct the security context from the IKI and IKC.</t>
          <t>The IKI and IKC are not protected:
The server can be made to derive the OSCORE context for any IKI/IKC combination by an attacker.
They are only verified when the derived key material successfully decrypts the request.
The authentication is likewise verified by being part of the key derivation in the <tt>id</tt> or <tt>id_context</tt> field of the info array.
All information is thus verified at the time the request’s plaintext becomes available.</t>
          <t>When a client sends a request from a IKI that may be reused with a new key in the foreseeable future
(possibly taking into account some estimate of the request intervals of clients),
the server provisions the client with a new key through <xref target="sec-option"/>.</t>
          <t>There is no requirement in this specification to use this particular implementation.
For example, a server may also use information sent in the KID Context,
and may store the encrypted key material in the KID context instead of re-deriving it.
However, there is no known advantage to that.</t>
        </section>
      </section>
      <section anchor="sec-option">
        <name>Distributing key material</name>
        <t>The previously standardized methods of establishing an OSCORE context,
EDHOC <xref target="RFC9528"/> and the ACE-OSCORE profile <xref target="RFC9203"/> create key material by mutual agreement --
but for stateless servers, transfer from the server is necessary.</t>
        <t>Stateless contexts can be set up from non-stateless contexts:
When a client sends a request to a server,
the server can tell the client to switch to a stateless context using the OSCORE-Context-Setup option.
That option can be sent along with a successful response when there is room in the message,
or with an unsuccessful 4.01 Unauthorized response
(in which case the content of the OSCORE-Context-Setup indicate a context that is authorized).</t>
        <t>The OSCORE-Context-Setup option is Elective, Safe-to-Forward and NoCacheKey.
It is repeatable, and only sent in response messages.
The option number is CPA220.
Future specifications may describe their semantics of repeated options or their presence in a request;
recipients unaware of those semantics ignore them in requests, and ignore all but the first in the response.</t>
        <t>The content of the option is
[ yet to be specified, but will be some cnf/osc representation of the master secret and the server’s recipient ID ].
The KID context, the client’s recipient ID and the master salt are absent (KID context) or the empty byte string unless specified in the option.
The defaults for OSCORE version, HKDF and algorithm are those of the encapsulating OSCORE context
(if there is one -- this could also be established through CoAP over (D)TLS),
otherwise OSCORE’s defaults apply.</t>
        <t>A client receiving this option SHOULD NOT continue using the security session through which that option was received
any more for requests that are safe.
Instead, it SHOULD establish an OSCORE context with the provided details for further requests.
The client MAY rely on the server not to send requests
(and therefore does not need to process requests to the server-dictated / empty recipient ID),
and MAY forego the creation of keeping a replay window if it does not intend to send requests with multiple responses.</t>
        <t>A client MUST treat the KID context and its Sender ID as opaque values.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is requested to register into the CoAP Option Numbers Registry in the CoRE Parameters group:</t>
      <ul spacing="normal">
        <li>
          <t>Number: CPA220.  </t>
          <t>
The RFC Editor is requested to replace “CPA220” with the assigned number at registration time,
and remove this paragraph.
The number 220 is suggested: It has the right properties,
is free,
and is the largest free number in the 1-byte extended space.
This leaves smaller numbers of the same space free for more new numbers
where delta encoding with other typical options
would allow the new number to use a shorter serialization.</t>
        </li>
        <li>
          <t>Name: OSCORE-Context-Setup</t>
        </li>
        <li>
          <t>Reference: <xref target="sec-option"/> of this document</t>
        </li>
      </ul>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t><xref section="8.2" sectionFormat="of" target="RFC8915"/> on Cookie Encryption Key Compromise applies to the Internal Key.</t>
      <t>Failure to follow the requirement of using an own sequence number
would result in nonce reuse and thus possibly compromise of that security context’s key material.</t>
      <t>In OSCORE, it is crucial to the system’s security that every sender sequence number is used only by one server.
This deserves special mention here because it is not trivial to uphold in a distributed system.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration. Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC8915">
          <front>
            <title>Network Time Security for the Network Time Protocol</title>
            <author fullname="D. Franke" initials="D." surname="Franke"/>
            <author fullname="D. Sibold" initials="D." surname="Sibold"/>
            <author fullname="K. Teichel" initials="K." surname="Teichel"/>
            <author fullname="M. Dansarie" initials="M." surname="Dansarie"/>
            <author fullname="R. Sundblad" initials="R." surname="Sundblad"/>
            <date month="September" year="2020"/>
            <abstract>
              <t>This memo specifies Network Time Security (NTS), a mechanism for using Transport Layer Security (TLS) and Authenticated Encryption with Associated Data (AEAD) to provide cryptographic security for the client-server mode of the Network Time Protocol (NTP).</t>
              <t>NTS is structured as a suite of two loosely coupled sub-protocols. The first (NTS Key Establishment (NTS-KE)) handles initial authentication and key establishment over TLS. The second (NTS Extension Fields for NTPv4) handles encryption and authentication during NTP time synchronization via extension fields in the NTP packets, and holds all required state only on the client via opaque cookies.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8915"/>
          <seriesInfo name="DOI" value="10.17487/RFC8915"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-core-dns-over-coap">
          <front>
            <title>DNS over CoAP (DoC)</title>
            <author fullname="Martine Sophie Lenders" initials="M. S." surname="Lenders">
              <organization>TUD Dresden University of Technology</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Cenk Gündoğan" initials="C." surname="Gündoğan">
              <organization>Huawei Technologies</organization>
            </author>
            <author fullname="Thomas C. Schmidt" initials="T. C." surname="Schmidt">
              <organization>HAW Hamburg</organization>
            </author>
            <author fullname="Matthias Wählisch" initials="M." surname="Wählisch">
              <organization>TUD Dresden University of Technology &amp; Barkhausen Institut</organization>
            </author>
            <date day="26" month="September" year="2024"/>
            <abstract>
              <t>   This document defines a protocol for sending DNS messages over the
   Constrained Application Protocol (CoAP).  These CoAP messages are
   protected by DTLS-Secured CoAP (CoAPS) or Object Security for
   Constrained RESTful Environments (OSCORE) to provide encrypted DNS
   message exchange for constrained devices in the Internet of Things
   (IoT).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-dns-over-coap-08"/>
        </reference>
        <reference anchor="I-D.amsuess-lwig-oscore-00">
          <front>
            <title>OSCORE Implementation Guidance</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="29" month="April" year="2020"/>
            <abstract>
              <t>   Object Security for Constrained RESTful Environments (OSCORE) is a
   means of end-to-end protection of short request/response exchanges
   for tiny devices, typically transported using the Constrained
   Application Protocol (CoAP).  This document aims to assist
   implementers in leveraging the optimizations catered for by the
   combination of CoAP and OSCORE, and by generally providing experience
   from earlier implementations.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-amsuess-lwig-oscore-00"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-key-update">
          <front>
            <title>Key Update for OSCORE (KUDOS)</title>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   This document defines Key Update for OSCORE (KUDOS), a lightweight
   procedure that two CoAP endpoints can use to update their keying
   material by establishing a new OSCORE Security Context.  Accordingly,
   it updates the use of the OSCORE flag bits in the CoAP OSCORE Option
   as well as the protection of CoAP response messages with OSCORE, and
   it deprecates the key update procedure specified in Appendix B.2 of
   RFC 8613.  Thus, this document updates RFC 8613.  Also, this document
   defines a procedure that two endpoints can use to update their OSCORE
   identifiers, run either stand-alone or during a KUDOS execution.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-key-update-08"/>
        </reference>
        <reference anchor="RFC5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="RFC9528">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Preuß Mattsson" initials="J." surname="Preuß Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <date month="March" year="2024"/>
            <abstract>
              <t>This document specifies Ephemeral Diffie-Hellman Over COSE (EDHOC), a very compact and lightweight authenticated Diffie-Hellman key exchange with ephemeral keys. EDHOC provides mutual authentication, forward secrecy, and identity protection. EDHOC is intended for usage in constrained scenarios, and a main use case is to establish an Object Security for Constrained RESTful Environments (OSCORE) security context. By reusing CBOR Object Signing and Encryption (COSE) for cryptography, Concise Binary Object Representation (CBOR) for encoding, and Constrained Application Protocol (CoAP) for transport, the additional code size can be kept very low.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9528"/>
          <seriesInfo name="DOI" value="10.17487/RFC9528"/>
        </reference>
        <reference anchor="RFC9203">
          <front>
            <title>The Object Security for Constrained RESTful Environments (OSCORE) Profile of the Authentication and Authorization for Constrained Environments (ACE) Framework</title>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="M. Gunnarsson" initials="M." surname="Gunnarsson"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies a profile for the Authentication and Authorization for Constrained Environments (ACE) framework. It utilizes Object Security for Constrained RESTful Environments (OSCORE) to provide communication security and proof-of-possession for a key owned by the client and bound to an OAuth 2.0 access token.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9203"/>
          <seriesInfo name="DOI" value="10.17487/RFC9203"/>
        </reference>
      </references>
    </references>
    <?line 263?>

<section anchor="change-log">
      <name>Change log</name>
      <t>Since draft-amsuess-core-stateless-oscore-00:</t>
      <ul spacing="normal">
        <li>
          <t>Added use case of distributed systems.</t>
        </li>
        <li>
          <t>Pointed out limitations to differentiated client authorizations.</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to Tamme Dittrich for setting me on the track to this with his presentation of time synchronization on the RIOT Summit 2024.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA41abXMbuZH+Pr8CsT+slCJpWevdeLV1dVFJcqxy1nZZcqVS
t9ksOAOSiGYwzAAjmqfyP7tv98fu6W4AM0Npc/mwa5HES6Nfnn66gfl8Xtyf
qW+LIthQmzP17CboYGrjvfpwc/Hh09WzompLpxv8VnV6Fea68T1+npdtZ+Y+
jZ63nr84eVmU+GrddvszZb5sCx86o5szdX11+6Yodm13t+7afnumaHhxb1xv
zgql4pcX7acrfGq0rWXEH60Jq0XbrfFtZ7btmdqEsPVnL16UbWWWplvTjy/K
Tbf37sWhOEVxZ/bYs6It5ip+SX/mkfLJdPemkz/3TWNCZ0v+hOmqsjiDXfbB
tq4ofKO78Pd/9m0w/kztjS8K3YdN22GLOeYoJcq62HSYZ7VT543/3//hjRSO
1LtAqjnvaVHNX5p43DTjj1HFi7JtiqKYz+dKLzFcl6EoxCrq6MPyH6YM6saU
fWfDXq3aDtpzNMw6U6lPxodVX6srd2+71pnGBT9TDw+/+/Tm4vX3L7/9+vW4
2Hbtva2Mx/mxioF0TdM7CwPiqGppws4Yp7bGdF6FjQ7KbzSGZRWxehooEiep
F8XtxnoFb+kb44LCuiXUhtU37U7pqGNVQiPt1nSYpXY2bBQ+625pIXdn672q
dbc2yvUNbKvalew+K7SreJ3xjnzmQJveWfyMwbIwCU/bLI3iE3p8AY2EFoNx
yNpCvIXotbFVVcNNnqtr2KWt+lKs/PN/QbNG6dq3WfcL9fPfMPK5ujVdY11b
t+t9UbxhGbBT321bb0iKMNYDRE9Hx7eD29kVdOLMLsrDAsNkellbz0qJhi5b
F8yXILqijWQx0cjw+Rtau+00dNeZf/a2M7S5V2Sv1kGv2xbydXQ6KC6qgv7D
KaD4sGlE8rHqzRfyR7eOIvpFcfSRFAEHqev9THb/rU1dG5R1JYLfQ/fwHcyB
MbvRmWcFgopXibMriY+4e1IGfS0CwPL7vGg6xLa1UB8myCIkr8ap3Jo0XmGa
XVn8KerqfdrieMG2/KkN9l7zKZe6ZGxyVQFXNuo9/B9wpW5tY4Y4a0y50c76
Rh09PFAs/fDyO4qlwd3Ltr2zJkaMcTgEHCmZGUKTnDicCrTuqmubITis4785
GHd6X+w2tjYjK2MusMKN/AinON9usTb7t/jMrOAZgKGRtKQ6REMg0NBuD6w4
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

-->

</rfc>
