<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.39 (Ruby 2.6.10) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-strbac-totp2-00" category="info">
  <front>
    <title>TOTP2 Authentication Scheme</title>

    <author initials="D." surname="Strbac" fullname="Dejan Strbac">
      <organization abbrev="Mercata">Mercata SagL</organization>
      <address>
        <postal>
          <street>via E. Bosia 5c.</street>
          <city>Paradiso</city>
          <code>6900</code>
          <country>Switzerland</country>
        </postal>
        <phone>+41-78-6144568</phone>
        <email>dejan@mercata.com</email>
      </address>
    </author>

    <date year="2023" month="July" day="23"/>

    
    <workgroup>ietf</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 28?>

<t>We present a second-factor authentication scheme that extends the Time-Based One-Time Password (TOTP) method to provide superior protection against phishing attacks.</t>

<t>Unlike traditional one-time password flows that solely authenticate the user with the service, our approach introduces an extended flow that seamlessly authenticates both the user and the service to each other. This enhanced process ensures a secure submission of the user's second-factor authentication via a secondary and secure communication channel.</t>

<t>By verifying the service's authenticity to the user, our scheme establishes a robust defence against potential phishing attempts, enhancing the overall security of the authentication process.</t>



    </abstract>



  </front>

  <middle>


<?line 37?>

<section anchor="introduction"><name>Introduction</name>

<t>The TOTP2 authentication scheme builds on the Time-Based One-Time Password (TOTP) algorithm method defined in <xref target="RFC6238"/>. It enhances the security by incorporating two TOTP shared secrets, strictly linked to a specific service, and provides a mechanism for securely transferring and verifying TOTP codes via HTTPS. TOTP2 offers enhanced protection against phishing attacks without penalizing the user experience.</t>

<t>The TOTP2 scheme replaces manual code input with a secure submission process directly from the TOTP2 authenticator to a verification URL tied specifically to the service being authenticated. By performing an XOR operation on the two one-time codes, the authentication scheme ensures that the on-screen one-time code becomes meaningless to potential attackers.</t>

<t>The authentication process can be further streamlined through the use of QR codes and automatic submission from the authenticators, simplifying the user experience. The TOTP2 authenticator requires an active Internet connection to facilitate the communication and submission of generated codes.</t>

<section anchor="naming"><name>Naming</name>

<t>The name "TOTP2" is intended to be understood as TOTP "duo" rather than a TOTP versioning scheme. This naming choice reflects the use of two secret keys and codes in the authentication scheme, emphasizing the dual nature of the authentication process.</t>

</section>
<section anchor="background"><name>Background</name>

<t>The usage of two codes in the TOTP2 authentication scheme offers distinct advantages over using a single TOTP code, as outlined below:</t>

<t><list style="symbols">
  <t>Authentication of the Service: The service-provided one-time code serves as a means of authenticating the service to the user. By presenting this code, the service demonstrates that it possesses the shared secret, thus assuring the user that they are interacting with the genuine service and not a phishing attempt. This additional layer of authentication enhances security and instills trust in the user.</t>
  <t>Session Identification: The one-time code can be utilized to identify and manage multiple active sessions. Each session can be associated with a unique one-time code, allowing for the simultaneous authentication of multiple sessions. This capability enables greater flexibility and convenience, particularly in scenarios where users may need to access the service from multiple devices or locations concurrently.</t>
</list></t>

<t>By incorporating two codes in TOTP2, the authentication process becomes more robust and versatile, providing enhanced security and improved user experience.</t>

<t>The traditional one-time code verification process is susceptible to phishing attacks since attackers can reuse the code within its validity window. To counter this threat, TOTP2  enhances security by using a non-interactive channel to submit the one-time code.</t>

<t>By using a non-interactive channel, such as an automated submission process directly from the TOTP2 authenticator to the service's verification endpoint, the user is not required to manually input the one-time code. This reduces the risk of exposing the code to potential phishing attacks during the submission process.</t>

<t>The non-interactive channel ensures that the one-time code is securely transmitted to the service, reducing the window of opportunity for attackers to intercept and reuse the code. This approach significantly enhances the security of the TOTP2 authentication scheme and provides increased protection against phishing attempts.</t>

</section>
</section>
<section anchor="terminology"><name>Terminology</name>

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED",  "MAY", and "OPTIONAL" in this document are to be interpreted as described in <xref target="RFC2119"/>.</t>

<t><list style="symbols">
  <t>TOTP: Time-Based One-Time Password, an algorithm that generates one-time passwords based on a shared secret and the current time.</t>
  <t>Service: The entity or application that requires TOTP codes for authentication.</t>
  <t>TOTP2: The scheme that enables the secure transmission of TOTP codes from a TOTP2 authenticator to a service, incorporating two shared secrets.</t>
  <t>Authenticator: An application installed on a user's device that verifies, generates, and submits TOTP2 one-time codes.</t>
</list></t>

</section>
<section anchor="authentication-scheme-overview"><name>Authentication Scheme Overview</name>

<t>The TOTP2 scheme follows these steps:</t>

<t><list style="symbols">
  <t>TOTP2 Registration: The user initiates the registration process on the TOTP2 authenticator by providing the necessary information provided by the service.</t>
  <t>Service OTC Generation: During authentication with the service, the service generates an on-screen one-time TOTP code intended for the user's TOTP2 authenticator.</t>
  <t>Service OTC Verification: The TOTP2 authenticator verifies the received TOTP code. If the verification fails, the authentication process is interrupted.</t>
  <t>Client OTC Generation: Using the registered service information and the provided service one-time code, the TOTP2 authenticator generates its own TOTP2 one-time code.</t>
  <t>TOTP2 Code Submission: The TOTP2 authenticator securely submits the generated TOTP2 code to the service.</t>
  <t>Authentication: The service receives the TOTP2 code and verifies it to complete the authentication flow.</t>
</list></t>

</section>
<section anchor="detailed-scheme-description"><name>Detailed Scheme Description</name>

<section anchor="totp2-registration"><name>TOTP2 Registration</name>

<t>The TOTP2 registration process starts with the user initiating the registration on the TOTP2 authenticator. During registration, the user provides the authenticator with the required information provided by the service, which includes the two shared secrets, "service_secret" and "client_secret," along with the "verification_endpoint" URI for TOTP2 code submission.</t>

<t>Once the registration is complete, the provided information, including the shared secrets and verification endpoint, is securely stored locally on the TOTP2 authenticator for future use.</t>

<t>To simplify the registration process, QR codes are commonly used to transfer the information to the authenticator. The service registration information is encoded as an OTP URI within the QR code, containing all the required service details.</t>

<t>Once the registration information is provided, the authenticator generates a TOTP OTC (One-Time Code) for each shared secret. These codes are then combined using an XOR operation, resulting in the final TOTP2 code. This final code is then submitted to the provided endpoint to conclude the registration process.</t>

<section anchor="registration-uri"><name>Registration URI</name>

<t>The OTP URI format for TOTP2 service registration is as follows:</t>

<figure><artwork><![CDATA[
otpauth://totp/LABEL?PARAMETERS
]]></artwork></figure>

<t>The LABEL is used to identify which account a key is
 associated with. It contains an account name, which is a URI-encoded
 string, optionally prefixed by an issuer string identifying the
 provider or service managing that account. This issuer prefix can be
 used to prevent collisions between different accounts with different
 providers that might be identified using the same account name, e.g.,
 the user's email address.</t>

<t>The issuer prefix and account name should
 be separated by a literal or URL-encoded colon, and optional spaces
 may precede the account name. Neither the issuer nor the account
 name may contain a colon. The representation in ABNF according to
 <xref target="RFC5234"/> is as follows:</t>

<figure><artwork><![CDATA[
label = accountname / issuer (":" / "%3A") *"%20" accountname
]]></artwork></figure>

<t>Valid values for LABEL might include examples like:</t>

<t><list style="symbols">
  <t>"Example:alice@gmail.com"</t>
  <t>"Provider1:Alice%20Smith"</t>
  <t>"Big%20Corporation%3A%20alice%40bigco.com"</t>
</list></t>

<t>We recommend using both an issuer label prefix and an issuer
 parameter, described below.</t>

<t>The PARAMETERS provided in the TOTP URI format include:</t>

<t><list style="symbols">
  <t>password_entry: A 'yes' or 'no' (default) value, indicating whether the password entry should be made within the authenticator</t>
  <t>service_secret: The shared secret used by the service to generate
codes for verification in the TOTP client app.</t>
  <t>client_secret: The shared secret used by the TOTP client app to
generate TOTP codes for verification by the service.</t>
  <t>algorithm: The algorithm used for generating the TOTP codes (e.g.,
SHA1, SHA256).</t>
  <t>digits: The number of digits in the generated TOTP codes (e.g.,
6, 8).</t>
  <t>counter: The initial counter value for the TOTP algorithm.</t>
  <t>period: The time period (in seconds) for which a TOTP code is
valid.</t>
  <t>verification_endpoint: The URL to which the TOTP client app should submit
the client TOTP code and previously received service code. It must start with "https://" protocol prefix.</t>
</list></t>

</section>
</section>
<section anchor="service-otc-generation"><name>Service OTC Generation</name>

<t>Upon authentication request, the service generates a one-time code based on the service secret (service_secret) associated with the user's account. This code is then used to construct a QR code containing a TOTP2 request for the authenticator. The QR code includes the following value represented in ABNF syntax:</t>

<figure><artwork><![CDATA[
REQUEST = LABEL (":" / "%3A") *"%20" OTC (":" / "%3A") *"%20" TIMESTAMP
]]></artwork></figure>

<t>The LABEL SHOULD BE the same as the one provided in the OTP registration URI.</t>

<t>OTC represents the generated TOTP one-time code using the service secret.</t>

<t>The TIMESTAMP represents a Unix timestamp identifying the time of otc generation.</t>

<t>The QR code serves as a visual representation of the TOTP2 request, allowing for easy transfer of the code to the authenticator app. Valid request might include examples such as:</t>

<t><list style="symbols">
  <t>"Example:alice@gmail.com:1689694239"</t>
  <t>"Provider1:Alice%20Smith:1689694239"</t>
  <t>"Big%20Corporation%3A%20alice%40bigco.com:1689694239"</t>
</list></t>

<t>These examples demonstrate how the label and one-time code can be combined within the TOTP2 request for inclusion in the QR code.</t>

</section>
<section anchor="service-otc-verification"><name>Service OTC Verification</name>

<t>Upon scanning the QR TOTP2 request with the authenticator application, the authenticator decodes the information contained within.</t>

<t>The authenticator performs the following actions:</t>

<t><list style="numbers">
  <t>Time Synchronization Check: The authenticator compares the Unix timestamp obtained from the QR code with the local time. If the time difference exceeds a certain threshold, indicating a significant time discrepancy, the authentication fails. In such cases, an out-of-sync warning is presented to the user, indicating the need for time synchronization.</t>
  <t>Account Identification: If the authenticator supports multiple accounts, it uses the label part of the TOTP2 request to identify the corresponding registered account. The label acts as a unique identifier for the account within the authenticator.</t>
  <t>TOTP Code Verification: Using the service secret associated with the identified account, the authenticator verifies the provided TOTP code. The TOTP code is generated based on the client secret and the current time.</t>
  <t>Authentication Result: If the registered account is successfully identified and the provided TOTP code is verified, the authentication process is considered successful, granting access to the service. However, if no registered account can be identified using the label or the provided TOTP code fails to verify, the authentication process fails.</t>
</list></t>

<t>In case of authentication failure, appropriate feedback is presented to the user, indicating the reason for the failure, such as an incorrect label or an invalid TOTP code.</t>

</section>
<section anchor="client-otc-generation"><name>Client OTC Generation</name>

<t>After successfully verifying the service-provided TOTP one-time code, the TOTP2 authenticator generates a new TOTP one-time code using the "client_secret." The authenticator then performs a bitwise XOR operation between the service-provided one-time code and the newly generated one-time code. This XOR operation results in a new combined TOTP2 code, which is now ready for submission to the service.</t>

</section>
<section anchor="optional-password-entry"><name>Optional Password Entry</name>

<t>The TOTP2 scheme provides an optional feature known as "Optional Password Entry." In typical TOTP implementations, when the second-factor authentication is initiated, some form of primary authentication has already occurred. However, in phishing scenarios, the user's credentials might have been stolen before the TOTP authentication takes place.</t>

<t>To enhance security further, the TOTP2 registration process includes a "password_entry" parameter. When this parameter is present and set to "yes," the password entry is deferred until after the TOTP2 authentication.</t>

<t>Once the TOTP2 authenticator generates the TOTP2 one-time code, it prompts the user to enter their password. The user then provides the password, and both the TOTP2 code and the password are submitted together to the service for final authentication.</t>

<t>By deferring the password entry until after TOTP2 authentication, this optional feature adds an extra layer of security, reducing the risk of exposing the password to potential phishing attempts during the initial authentication phase.</t>

</section>
<section anchor="totp2-code-submission"><name>TOTP2 Code Submission</name>

<t>The verification URL for TOTP2 code submission follows the format:</t>

<t>VERIFICATION_ENDPOINT ("?" / "&amp;") PARAMETERS</t>

<t>The VERIFICATION_ENDPOINT is provided during the TOTP2 registration process, which must begin with the 'https://' protocol prefix.</t>

<t>The PARAMETERS included in the verification URL are as follows:</t>

<t><list style="symbols">
  <t>"code": The TOTP2 one-time code generated by the TOTP2 authenticator application.</t>
  <t>"account": The account name provided during the TOTP2 authenticator registration, present in the TOTP2 OTP URI as label.</t>
</list></t>

<t>If the verification endpoint already includes query parameters, the new parameters SHOULD be correctly appended.</t>

<t>To ensure secure submission of the TOTP2 code, the TOTP2 authenticator application makes an HTTP GET request using the HTTPS protocol defined in <xref target="RFC9110"/>. If an untrusted HTTPS connection is detected, the authentication process MUST fail.</t>

<t>A successful authentication is indicated by receiving a HTTP 2xx status code. The response body of the message should be discarded. Any other status code indicates a failed authentication.</t>

</section>
<section anchor="authentication"><name>Authentication</name>

<t>Upon receiving the TOTP2 code from the user, the service performs the following steps to validate the code and authenticate the user:</t>

<t><list style="numbers">
  <t>The service looks up the corresponding account associated with the TOTP2 code.</t>
  <t>Using the shared secrets (service_secret and client_secret), the service calculates its own TOTP2 code.</t>
  <t>The service compares the calculated code with the received TOTP2 code.</t>
  <t>If the codes match, the validation is successful, and the user is considered authenticated.</t>
  <t>The service grants the user access to the requested service or resources.</t>
  <t>In response to the code submission request, the service sends an HTTP 2xx status code to indicate a successful authentication process.</t>
</list></t>

<t>If the TOTP2 code fails to validate, the authentication flow on the user's screen indicates a failure, and the user is not granted access to the service or resources.</t>

</section>
</section>
<section anchor="recovery-procedure"><name>Recovery Procedure</name>

<t>Authenticators can be lost or become inaccessible, making it essential for service providers to establish a reliable recovery procedure for users. While the specifics of the account recovery process vary between providers, one common approach is the use of recovery keys during TOTP2 registration.</t>

<t>Recovery keys serve as a secondary authentication factor and should be securely stored by users. In case of losing access to the authenticator, users can utilize these keys to regain account access. However, it is crucial to emphasize that recovery keys should only be used on trusted devices.</t>

<t>By limiting the usage of recovery keys to trusted devices, service providers can mitigate the risk of unauthorized account access. Trusted devices are previously authorized and meet security criteria such as device registration or multi-factor authentication.</t>

<t>Service providers should validate the trustworthiness of devices during the recovery process, ensuring their identity and adherence to security measures. This helps maintain the overall security of the account recovery process and protects user accounts from unauthorized access.</t>

<t>Clear documentation and instructions on using recovery keys should be provided to users, making the recovery procedure easily accessible. Service providers should also consider security implications and implement appropriate measures to safeguard user accounts during the recovery process.</t>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>The TOTP2 scheme introduces several security considerations to ensure the confidentiality and integrity of the authentication process:</t>

<t><list style="symbols">
  <t>Strong Encryption: The side channel communication between the TOTP2 authenticator and the service should utilize strong encryption mechanisms. This protects the confidentiality and integrity of the transmitted data, preventing unauthorized access or tampering.</t>
  <t>Verification of Service-Generated Code: The service-generated code provided to the user must be verified to prevent man-in-the-middle and phishing attacks. Users should carefully validate the code to ensure they are communicating with the authentic service and not an imposter.</t>
  <t>Secure Storage of Secrets: Both the service secret and client secret should be securely stored and protected. Unauthorized access to these secrets could compromise the security of the TOTP2 authentication process. Measures such as encryption and access controls should be implemented to safeguard the secrets.</t>
  <t>Validation of TLS Certificate: The TOTP2 client app should validate the TLS certificate presented by the service. This ensures that the communication is established with the legitimate service and helps prevent potential phishing attacks.</t>
  <t>Separate Authenticator and Authenticated Devices: It is recommended to use separate devices for the TOTP2 authenticator and the device being authenticated. This reduces the risk of exposing sensitive authentication information if the same device is compromised.</t>
</list></t>

<t>By addressing these security considerations, service providers can enhance the overall security of the TOTP2 authentication process and protect user accounts from unauthorized access and attacks.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This document has no IANA actions.</t>

</section>


  </middle>

  <back>


    <references title='Normative References'>



<reference anchor="RFC6238">
  <front>
    <title>TOTP: Time-Based One-Time Password Algorithm</title>
    <author fullname="D. M'Raihi" initials="D." surname="M'Raihi"/>
    <author fullname="S. Machani" initials="S." surname="Machani"/>
    <author fullname="M. Pei" initials="M." surname="Pei"/>
    <author fullname="J. Rydell" initials="J." surname="Rydell"/>
    <date month="May" year="2011"/>
    <abstract>
      <t>This document describes an extension of the One-Time Password (OTP) algorithm, namely the HMAC-based One-Time Password (HOTP) algorithm, as defined in RFC 4226, to support the time-based moving factor. The HOTP algorithm specifies an event-based OTP algorithm, where the moving factor is an event counter. The present work bases the moving factor on a time value. A time-based variant of the OTP algorithm provides short-lived OTP values, which are desirable for enhanced security.</t>
      <t>The proposed algorithm can be used across a wide range of network applications, from remote Virtual Private Network (VPN) access and Wi-Fi network logon to transaction-oriented Web applications. The authors believe that a common and shared algorithm will facilitate adoption of two-factor authentication on the Internet by enabling interoperability across commercial and open-source implementations. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6238"/>
  <seriesInfo name="DOI" value="10.17487/RFC6238"/>
</reference>

<reference anchor="RFC9110">
  <front>
    <title>HTTP Semantics</title>
    <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
    <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
    <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
    <date month="June" year="2022"/>
    <abstract>
      <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
      <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="97"/>
  <seriesInfo name="RFC" value="9110"/>
  <seriesInfo name="DOI" value="10.17487/RFC9110"/>
</reference>




    </references>

    <references title='Informative References'>



<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="RFC5234">
  <front>
    <title>Augmented BNF for Syntax Specifications: ABNF</title>
    <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
    <author fullname="P. Overell" initials="P." surname="Overell"/>
    <date month="January" year="2008"/>
    <abstract>
      <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="68"/>
  <seriesInfo name="RFC" value="5234"/>
  <seriesInfo name="DOI" value="10.17487/RFC5234"/>
</reference>




    </references>



  </back>

<!-- ##markdown-source:
H4sIAKmQvWQAA6VcbXPbOJL+zl+B0tRckjlJSZxMbqKqrV3H9sy4KomztjN7
92mKIiEJZ4rQEqQdzdb89+s3gABFOdm61L7YEgn0ez/daHg2m2WtaSu9ULdX
t59O1GnXbnTdmiJvja3VTbHRW52VtqjzLTxUNvmqnbm2WebFrLXt7mT24kUG
Dy+UqVc2e7DN3bqx3Q5+1+0qM7tmodqmc+3JixdvX5xkd3oPz5QLdVm3uql1
OzvHJTPX5nX5e17ZGnbZa5flQIhtFplSM/ivguXdQp3P1Q3tTR8xSef6f/M6
/tg264X6oBugKlc3+fo9fZovl42+D1/QZ8CH1kD6vcnVxVy9sw5++LGY05eF
afcL9Slv8tI4yx/ZEjZ88xZY5l+7um3goZsH0/6hmwpYoC92G2LjP1+/nP3X
T7M3L1+//vHNT/SN3uamAjEizX/bMinzwm6z2jZbEPm9Ro6vfz57c/LqJ/nx
7cuXLxYZijd95OTly7fy448nr14vsmw2mwGfwFVetFn2D612jXagTZUrpwtb
l7MVfGMbladadqRl1W7yVukvra5LB79odWu2evYud7pUV7We4a8gEOdQg+op
GswztdWgp1K1Fjaz96bUynU73RjYBT5odUE75OscFNiCZIzbmHqt8rbNizs3
z7LPdWXuYHOUMz6bVwqkN2txs53fbFXZB8cEOlvpah+zoInYzulGgSI29Bv8
cm8KPVW2A3Z3QEpebMCI2saWXaGdApthVjWvLovrfFtp5wYbOLW0sjBtA4qO
d0HuNa4PD+lmrm6BS6XrTV4XsDrsDRviB65rcGdUBvwEglpujXMoH7sKiz9x
jysLjdXrM2/2RIssCIa07Wr/YAH717oCEb/bq3tQyWqPko/ohq3C4mDtyIan
ggUnhqHBO5cVaI6ob+wS/BlseKWBv161oGxYCNQXK1lvd62bijD89haoyauK
ycaNhf0BpyI4YIAse2vKstLwy6VoER/K/hL9y7JbtFoKZOMmvuxMBcYNH3yr
fefV2gKNm623dODb1PCGqdW//iWe+uefc3XZepU7kbEwt9zDs4VtdrYBWlAE
D5aIVG6TN5q012iUEniuKVqwvcrUd5qcCjS904VZmaI3adS4OBvqY6tR08Zt
FUQIMQVYAxyqdivdNKQJeKU3Adocg5kja/r19vbTzVzkZlfwTmq9X3Ni8jrb
wRcavNf84dVMrqK/YDRAS5nH6hF9NHpX5SixbV53YDpIFEhrB4uRK4/5iven
0jSapLVq7Jb1OdQ8yINkSKx7U/h8/V61BuUukgVTDLbvPXqpicEoBpSQIPbA
YoNxmGWq/vvqWln4iBcWq0L1hghGUp6OWbf3LYkKFH7IOeqZA3vQdboIUATu
jZLSoOx6jVGKom5wO9YGKE8EPe5NqgC6l1qtugaDFeVAiHlk0u0GUvc6xDl0
y79fi6GgBcGKFlNQEasjSD+RO1qz2e6qKOgMzUGNOiuorNH/7EzDMRpCIGS8
gBaAGIhpbI7APERIU5nWp4A0/lFgTELsWteoK+CUeAI5fcxRlRhe4B+LDVGF
mhBdEwVxHHIGZwnYD+TWwc+Nay1EgtyxJ03Kzk4ULIzyBD3C1vwFmB1ujQJg
bUtqqGlXCNAWTa3RqwpYcrHY0YY4LChATCx91oOpjxsTxNntbpO73gVLdKo6
b9GFvhZk34H1IHYDEDML/1gmncvXga6EjseCrYQSgE8Q9gpAIeV9XrewkqMM
AKuSGylH5txHpSlKFuIJG+VSQ3YGcPPDEJsKPzfssQsyJ3HfmYTHcuBD+DXa
FYdNiI+4SEx8mh/jhMjez3iKHwNFMrXxG6Xe2hoRWOt92mBqdE7jf/jROOrj
2x1SBFEgcRQfDyDBN5qMEFEdPhIwDphzByIKe6OR1BbR3jADi93lZYBYVb6H
TQbcg1BDCgvpC1fFsG+qyjGU97onsYBebjR72GWJC/k4ywpJ5S+xp4PFzB/s
UoZf4n0gC6ChbbuqNTswCfF+xxu4ubpAlCW/+tVAdrYw5NaSMyAG/LMb7A1G
VYEhoVAwTZIiDG6U19p2bigHkEygot+epFjku3yJYWcP0gJcBMJaQwwFBQGQ
1F+MfMcuW9/rmsLdFMBsA8t3Vd5UiAjAS+B1AMqQPyFwsDgxEe5VrSX5FxSx
Y/uiaBsoKzV+CFbcqMoy5WiUNaiuAWaqPYO/Q/gRfJj8dzQ/+XwR8o4FGgX7
CZxw8GSFnJG34doBNqTms8Un4NNxRDAK/clekrztCQIVuA6Et2sNCJ9y4BCQ
QERBf/AJkSyl0RhbOU3A0mgqwL+BuHsPoKVEWsE6SvsAarZc25EbGlQA6ncq
wW7ERwDi+WBWQ/4O3gq2KygcyaRk5JN8xCYr6SsLQD7twPZzzoqciHX5/8JF
aSWQyBoy3s4CFdM+IGHeguAiyZnsk0EbWTMitkPG2GHg6c6j4sa4O3QuMALr
fMAjhSRY5kCjZR8eD1kWOzom+hGIFRuZcQPQDEpqmcGkkiQ2PBFsKsiJ3YFn
tRBywA4wsvRWh9ENyUFTJT9ITdAHZV+cOrOuSQPouEdqCcl5j2XdpDoAPwDT
dV/H8VSnoRw1gltb2fU+O6isAIoorI2cmnz4fHM7mfL/q49X9PP1xd8/X15f
nOPPN7+evn8ffvBP3Px69fn9ef9T/+bZ1YcPFx/P6WVY9fR/JlznTK4+3V5e
fTx9P+GsAwIrbdFtqavRaAFlJGZIzqg28BDgvGjMMirSsFcCRRqiCJTd4tHS
b0ouFuo+MhsPHd1hcwJCJK2Dkk2Te+gTSDxW+B5nzAizoApRtdSnqLw2adeA
hKOKbXXQEpgLVyeCgeJujiSoYETam3gAxfHSGDDy42VUcIXDhJKWsvMUrdlm
oU7rhD00QAgdXmzS+OB8xqRzPMLiKch+2mP61vl6Nam0QMOjHUx1dY+064ek
X3D4b6REXdlKmk+A/aBc0ju38HZ0oq712hDcC4iHgyWEAyMYEBF+/1AI0/YI
gAZhL/dRSsWHoOSBV7DbE9qAvBKDXHg+ilSRgamr2zP1C4uPCDznMDqIHIdd
sxhy9Kaf12PVaTCgvlTyCEvUOsLjkMjfouyzOFoZepsQqRbaIKoIBMzVJcfH
JJetclONl+ARoqAI0nQ7rPOBtLPKoL8Oxfc5pCxWqWabZzZi1XjHDyryDw0w
6TEL6GWOlm4f6jFrD36vzlD6NyEvHhdgSHTeiaSOkLKYX/HpeGBTqWMl9ZbX
hYsYolVC38kQK7gqoEmArlKxDxSCjVhw4XPdgs6AHnHec4rnu4N+34Hzfvfd
iFvGPj3qiRCJmtb1XhB7cKrvtNEzZtbew+LnIxAVEvNBw6TfPiCsb/D1KdQO
hhrbRdX5dQ/jMaRYeeF3/mTCybUgM5fPpvBhZeMCcxL70e8eE07U5+tLcvFI
0T0oA/1d1YU+lBrVy6z7aeocEaNTYSWAvYSPyJ4OgGoM4xwIFN7Cmgjh6SOh
FtlYddQfAQUhALKhcXU0dk+jtpi03W1dIYQX2CitV1og1qI41cBkUkeKJRa9
SicKuGcpNQAGPVSEFDK4rlA1xRIQPIgaT9hnT6yq71Sgk7nj6ko398o6CKRJ
tJLGF8bNpwFXYXR6RpKmQ5JEpcS905E0cWEU6ZK6P1IVDVqtCMYdFsHwnfC+
Mlg+9hYp6Jo/9jif1ubQFyH8YIfemDhMsUsdNYI5hpvvkkiD+uBo45XDIoyc
ZVzP1JISoAHggk4x2x0KefH8OR6zPn9/+u7i/V8/nV6ffri4vbi+4W3oU3zd
W17opnBYyAuqY0EtCN2Ny4bNEjq2EGuRfiu/gV3QEFxQr8DNTAwwo4OKej0F
hXDZXlFrbGW+cIDKkSXXcXeZdCRkiVdnXuSNopzEIqHmDz8BIhNCRI2yHG8i
jZ8scA0f32O6LkCChlo18HX7gCilNNiEpGqBF5Q4Hz7vaZECcWvWm5aKCmln
BSukeITd4VRIer6eT7MY79ApL3bbGrYT8vCUBWqnR8uAV9iuAtEuMRbscs7H
KEtVGSxpKxTV5+v3XgnILDoCLuTVoNwOD1MyaiLtMCeL/cY7zdVHDRLw0Ymp
qgWwyYMZ04TLiHEAHbQhR6tGSyfUhwp1+u7jz/R2w6HbZlx44cn0n3+OWniV
L6E4/4vfk3Z87gl6OllM4LfJ969OJ8/UD5PvT15M4iczWOM37Ntg96aTsojd
gRUoGVHpLznmHKfwlBl3/kFNLvizBbxf6L+tUVt4CD+hLz+JObxcnOLXsPEN
hIsNf/nOrOGDM1/82Brogw9ooe9fv1iadWF5qUz9g2AR5AYIK2JBdIrcewdL
ILYI/1WG3UJgs8WT2L6cpV64dDv6WBAn0pDo4vAjsmDufdkK+ZyGF07Vk712
T9C8ntT2iXpa6lUOsfUZSxYTcul74w8bHSwnnM3TOmK/aL7bvG+vHeQKpCCF
IgIkk7qZHDtFOujnPs9kMovBWk/wQCwBRjdYds5x2wTsfG3XwQJk0CoQMKzH
ExKG1RhsHZoJvG3fW6AtV30K9WEmWv+pxBelbn49fTnF/z358c0zWrc0awDx
vGjdbZfc0udPvShSdH+w6Jup+okXk5Ynr8bwtwp9ULKFUNfRSoELeptmPkp+
mdsj9IF6ip1uGlZwjAEkM8Vlo0NCqAtLS42iTl6Zzm6trDGmJzFDzvG4LLVf
+Pt+R+6R6XtjOxz1CJWktzUpJiEZYLeb6gNOG5NN20L9//z5hBpqFmKi+C9O
KYxX3dFpWvwvyz7vbD2sgBCmadcercCHh8K+8xQ/Lub8NPWzZwcHJVHGSrNt
Apd8ki3oXKvDczwPNBOcGSosYiCYygjW9W8nRQvnBlyJTS2kGA5rlF/cHrb7
IukDu40XN7eQQDjsj2YMAqJjX9xefoCXTz98ioGUNCXfXUSp3vmO8UGURWtq
BugP0TRsGYgfK7AHKoywRaI/Py7hCY0XBThWQ8rARcA4t7shwGIPxOZ0W4TQ
QqVZLP/4NPTeODwqHiT2pN0cTDM5SNO562dN/AtxByEtFTAYS+L2lnIkX8tx
B/XajmXsxcs3P7198/b1yau3k+x47h4+9q1ZPHkv40Il0Bed9KoNzY9pSegE
ycbOPUNVE2XHQ68hSbgomYm+hhEmbpkdiTEhyjigoPbGAeulu4ZocKAr368d
q/pKzblkWORKUAhsHo6j4Gwgz9EMfT+nEwpU+ss59ejVzb4uNo2tzR+8+tlG
F3eSRpMVsbeQN0LPwD3sUigKR2LeBwLr1CvgBr3vIpL+fKFQoOoLrUv0lkI3
BIrxYBAyTlUmKCmPj3L8Ktg13eV1sR/tRFKPEjau2ewLCOvU7cYxiJldzSDy
Feohb0iHVI372JjM7EVEtNQ29r1YpMGlkgS1nMzVqVQGw7P7y4NhEazUOjrr
cvEBPRdVU2zudX7CQXAtZs2xCJIUqhwuGuAH7LTsW2fUWo3SUnAunJShkCWn
/KFMa/qcI0wdA6HA+iued+POadp8/nwkII/mz6hIlF3HXCXpW4c8EvWtfYcy
pN4+ZSQpXpDMo8dL2ev5cFTmmrolQauHEuZDdRo3WHV0ohvxNexlJ4QKa4d9
oUGDHeEDhmY6s/YbTdUaMgc7jcw6pG1n9at9gNoeTXsFReoY5RJbR6t1Nhmx
ihH6ye1wT56NfJSHlXTLLmtyz5HZGXyia3DSBI90dw2ailqBDy7z4u7bvRYP
bHE1ITusGp3/0/kbnvL3HNKnhKEju4KMMXqSMZ4usux0hVg/MYTRweFZKst/
+1Ajh9D08DgYSnvT88lIxCd4GhJJrpamfTCgmXQq03eCRslPd/eWDsQB570L
jg01pJtwO5JqLuYtpPq+Ixm102rAC6DmkicGooGG4alLduVbO2Eu+QLL7WP5
fuT8sp8UrvtG0UrzTOBdjWdLYFSTIxuB4MHg2/0Ox2RZY9gd11uPER2yFcT7
yNw6HbLxqSgEC2fpaLXZoh+Bq2xplD19Y4PGXrGcbEFBrowjQt1PMIRZqv6s
BaoasJySB0qcoMxNfo+TtNgFbm2l0TpWlpvOUtSmJLT5HUiOZpT5bEDGMvqJ
DJmjnSZpbuSQKRQ7uZqkLZhJ3+uZq3+wLDFY+A+jyCHD/pRBJ3uACJOxVgzO
SGic/MZYCLxA0ly1uhn3y8GJzeN+2z8xcHkccgRoteunWGlkQMsMlTZNIHLe
n5KzA8dHYrtoBKPsL10MThQTnnM/HS4t/bW0qNJ5bjrnobOAA97f7UVcPvQM
xBmLcEx8U9bXgW/lZemvmTR5P3DpLWcwUDQ6GBUoOTocRXM78XSUb9wMsxg4
E+WD0QPjY/kANXUwO3/05C8elZDWI9fqv11cX/58eXaKkzy/X3w8/3R1+fEW
6vK/Ul3+H1CVDw82xt+IjqFilo97nQ+51MZZwgPRrMMT38p5MtLKuU0brOK8
ofQ/kAkaYdLghioTpTOJj+LTZBMhvP1R14tKMDyCnwjokWWTA4TjkhlO18cn
0z6wJNWobx8DR4QvEPWMDFaE4zIfpEOMA1wOjhMimERlzIv9Z77bshT8TyOL
wC9NkPhg6+jux7HrUnFu/QYJqi1Fc3BJvPGifrm4DRVJjzvoMkxvEcPbPngZ
j277rHAdvP8HpgXf82vR7QQKwjhx9xVoTAN0iPFwdCmCXqPps+SbKGgx3LPk
cpPYOfnyBTuVbeeimoLLKsBES1uG6cEtzhKtddSyx/I0b1Du6rTe8zW2eLGw
NaavFc9mHMTRtObIhrGE+hA91YOwHgpzhsRx6D7SKqBJLMLuCHr7KyCSI0bv
B0pfIVq8svbOqW43UoeGw9ORsi86Z8YqOioZ03mFQQ+Wh8JjYPss5RVAFk6I
Hw7+8FavUuKTlkd4tRx0NpI5Kb/S69Dl4CYOxOpiw7SIPMXo4mLN514/DxzV
dOlNqezHlFCq8iJokBZ74oTxlBSGKWe7psCRvjfUGAmmLG8Nk89o59zRXVbv
8QMX4QFdNmxs2hz1vf7E/3IYeKISUsxwvL+DN0xtf20CL3nyGN3Qs7iAHAga
B69Jhlz3HhbKA4ll2TVA8XsMwp+QdkgJemRyKvFZ24S7YZWFkIhziDT6DyTy
njhuP8UgSk2oVuGVFkYkq+gYPzpOt/3NUbw3qiuD06h0Kkq07TxttADdf0AE
bCr2WH8/z4WrS+KR6QIOJ/jhF1/oBQKm1Lbn6ZzoDnBy0SosRdesJHUeAop5
JFF6knrn3IeKruIO+wFcByFmD6F2OKNEVweI8aixUDEETFWd5LWpXBdBjcl1
GnzIaSavpVYJndv7KEZrxeUTNX2KBiBoTtcT/N0xmb9NJSMM0JjTUvOhENqz
pD+5iMJoujIAxvvLTHJ1LF2PpqSSd6cjFoTc4VprH8Q9Su5q/vsAdItoyOJt
ujCBs+i0L34T7xxp3fblXNHgtIXJQ7dFRpLT+b+GO6Djle68b9P3nIj8klxF
AgB4j01KmgheBZIjDDc09inDIvkaCivufMlVm7zcSLe6tT1XW53TFQjpXWx0
tcOQb2rpYj9yJfuYy8k1g5ZuLvqgzgM2lMuHGuL4eVbpvAkT/P2srJGzRZrd
sbXgsVETXEZQF3gkNwhR6VBgFF6AfYOaD2Fsro6qKK+cDZmtlwfNBPorVnKp
idsgSbvPS5rEn6/0ugNcNZDPI8rlMx7Z8kyI4E2PTb6OtHyiP3PgNCk2MvBk
US7SCWVzTq1XRlom/d2/Vq+/fkufap4b2Bc4u6iLZr+LpoTxz0L42zjpJd24
OzcK3wd/aUGU5EOe4w112LC/De+NPRjpNzMYXwICZ82nfsAMtTZi19Rgzrc4
8FCv6Y5JfKCAq4qxzX4JNd8Z/SmRCCPN0svJiY0HKCB1bGi6x8Nv2xxvP83g
2Rn/pQR20eEf3ACsGhk7oH4tfd4DFJ2Yxj5Muoru4jnhoLLDq6g1+onFlj0J
5oZLuRtQraSFG0bKC/XOppcQ1AFk9p8cT6ZRUMJa5vOIrlicTgeIXrAgLN5R
3Bq5n/VNF668z6oP3ul90ojsUQb96Oa9Rb+s4kgWggjrso8YQgRfpkGL6kE5
3tl5f6POdCMHdjpuMhzOwiSaxTeL/s3oSGIwtuT/iMng6lzqvfhE+NsgUXlU
QbZsDd5QTCyC84432OO3/cRUeAoyvUhE65zGxYY655y5wHkdum0oM3chP4SB
ypBe4zmmYxFHEv/oH4L4+rVGEKozdAtxWMfHY9VsXDRoItvJkDybYsl4SgZJ
JWc4fSyYH0NQvmf9WJ5/zMBjt/rGVM9mH7SZXZ5+PP038ll8yw9PAWqraAUZ
D5jzH4TBY7Xs/wClhTvKwkoAAA==

-->

</rfc>

