<?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.7.38 (Ruby 3.3.8) -->


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

<!ENTITY RFC9421 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9421.xml">
<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC9651 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9651.xml">
<!ENTITY RFC4033 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4033.xml">
<!ENTITY RFC8032 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8032.xml">
<!ENTITY RFC9530 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9530.xml">
<!ENTITY RFC8126 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml">
<!ENTITY RFC6234 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6234.xml">
<!ENTITY RFC1035 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1035.xml">
<!ENTITY RFC8484 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8484.xml">
<!ENTITY RFC7858 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7858.xml">
]>


<rfc ipr="trust200902" docName="draft-callec-dive-02" category="exp" submissionType="IETF">
  <front>
    <title abbrev="DIVE">Domain-based Integrity Verification Enforcement (DIVE) Version 0.1</title>

    <author initials="M. F." surname="Callec" fullname="Mateo Florian Callec">
      <organization>Independent</organization>
      <address>
        <postal>
          <country>France</country>
        </postal>
        <email>mateo@callec.net</email>
      </address>
    </author>

    <date year="2026" month="June" day="16"/>

    <area>Security</area>
    
    <keyword>integrity</keyword> <keyword>dns</keyword> <keyword>dnssec</keyword> <keyword>signature</keyword> <keyword>http</keyword>

    <abstract>


<?line 47?>

<t>Domain-based Integrity Verification Enforcement (DIVE) is an application-layer protocol that provides cryptographic integrity and authenticity verification of HTTP response bodies by leveraging the Domain Name System Security Extensions (DNSSEC) as an out-of-band distribution channel for public keys.</t>

<t>DIVE is designed for non-browser automated clients operating in controlled infrastructure: software update agents, package managers, and IoT device fleets. It is specifically suited to the distribution of static, pre-signable content (firmware images, packages, and versioned binary artifacts), where signatures can be computed offline and injected at deployment time.</t>

<t>DIVE has two independent components: (1) an object-security layer, which uses HTTP Message Signatures (RFC 9421) to carry per-resource signatures in HTTP response headers, and (2) a DNS key-distribution layer, which publishes public keys and policy in DNSSEC-protected TXT records. A client implementing DIVE verifies each covered resource against the corresponding DNS-published public key before accepting it. An attacker must therefore compromise both the DNS infrastructure and the origin server simultaneously to deliver a tampered resource to a DIVE-compliant client.</t>



    </abstract>



  </front>

  <middle>


<?line 55?>

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

<section anchor="problem-statement"><name>Problem Statement</name>

<t>Transport-layer security protects data in transit but does not protect against a compromised origin server that serves malicious content over a legitimate TLS session.</t>

<t>For automated clients distributing static artifacts such as firmware images, packages, and binaries, the dominant mitigations are:</t>

<t><list style="numbers" type="1">
  <t><strong>Embedded trust anchors</strong>: the client ships with a public key baked in, and verifies a signature over each downloaded artifact. This works but creates a circular dependency: rotating a compromised key requires pushing an update to all deployed clients through the very update mechanism whose trust anchor is now compromised. In IoT environments, where devices may be deployed for years with infrequent or unreliable update cycles, this is a critical operational risk.</t>
  <t><strong>CA-based signing</strong>: an operator uses a Certificate Authority to sign distributed artifacts, either by running their own private CA or by obtaining a code-signing certificate from a publicly recognised CA. This addresses the key-rotation problem for operators with sufficient security infrastructure, but introduces a dependency on a third party that the operator does not fully control. A private CA requires significant operational sophistication that is not realistic for smaller manufacturers or resource-constrained organisations. A publicly recognised CA, while operationally simpler, introduces both an external trust dependency and additional operational costs: a CA that is compromised or coerced can issue a fraudulent certificate that is indistinguishable from a legitimate one to the client.</t>
</list></t>

<t>In practice, the operational complexity and cost of both approaches lead smaller manufacturers and resource-constrained organisations to deploy no artifact integrity verification at all. DIVE is designed to address this gap by providing a lightweight, incrementally deployable mechanism that does not require dedicated security infrastructure or dependency on a third-party CA.</t>

<t>DIVE offers a third path: integrity verification is decoupled from both the server and the client by anchoring it in the DNS. Public keys are published as DNS resource records secured by DNSSEC, giving operators a revocation mechanism as simple and fast as updating a DNS record, with no changes required to deployed clients and no dependency on a third-party CA.</t>

</section>
<section anchor="scope"><name>Scope</name>

<t>DIVE is designed exclusively for static, pre-signable content: firmware images, packages, archives, and versioned binary artifacts. The requirement that private signing keys be stored offline (<xref target="private-key-storage"/>) is a deliberate design choice, not an operational inconvenience: keeping a signing key off the origin server eliminates the risk of that key being compromised through the origin server itself. This constraint limits DIVE to content whose signatures can be computed before deployment and injected into the serving infrastructure at distribution time.</t>

<t>DIVE is not designed for dynamically generated HTTP responses. Operators serving mixed static and dynamic content MUST NOT apply DIVE verification to dynamic resources.</t>

<t>DIVE is designed for non-browser automated clients such as software update agents and CLI tools operating in controlled infrastructure environments, including enterprise networks, IoT device fleets, and managed update pipelines. Browser clients MUST NOT implement or enforce DIVE.</t>

</section>
<section anchor="design"><name>Design</name>

<t>DIVE addresses the above threat by separating two concerns:</t>

<t><list style="symbols">
  <t><strong>Object security</strong>: HTTP Message Signatures <xref target="RFC9421"/> carry a cryptographic signature over the response body. The signature travels with the resource and can be verified at any point after receipt.</t>
  <t><strong>Key distribution</strong>: DNSSEC-protected DNS TXT records publish the authoritative public keys and policy. Because DNS is administered independently from the origin server, an attacker who controls only the origin cannot forge a valid DNS-published key.</t>
</list></t>

<t>DIVE is incrementally deployable: servers add DNS records and HTTP signatures; clients that do not implement DIVE are unaffected.</t>

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

<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"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>

<dl>
  <dt>DIVE client:</dt>
  <dd>
    <t>An HTTP client that implements the verification algorithm defined in this document.</t>
  </dd>
  <dt>DIVE server:</dt>
  <dd>
    <t>An HTTP origin server that publishes DIVE DNS records and includes DIVE-conformant HTTP Message Signatures on covered resources.</t>
  </dd>
  <dt>Resource:</dt>
  <dd>
    <t>A single HTTP response body received with status code 200.</t>
  </dd>
  <dt>Scope:</dt>
  <dd>
    <t>A named category of resources subject to DIVE verification (<xref target="scopes"/>).</t>
  </dd>
  <dt>Key ID:</dt>
  <dd>
    <t>An operator-assigned label that names a specific DNS key record and is referenced in HTTP Message Signatures via the <spanx style="verb">keyid</spanx> parameter (<xref target="RFC9421"/> Section 2.3).</t>
  </dd>
  <dt>Policy record:</dt>
  <dd>
    <t>The <spanx style="verb">_dive</spanx> DNS TXT record that publishes the DIVE configuration for a domain (<xref target="dive-record"/>).</t>
  </dd>
  <dt>Key record:</dt>
  <dd>
    <t>A DNS TXT record that publishes a public key, placed at <spanx style="verb">&lt;Key-ID&gt;._divekey.&lt;domain&gt;</spanx> (<xref target="key-records"/>).</t>
  </dd>
  <dt>Structured Field:</dt>
  <dd>
    <t>A value encoded per <xref target="RFC9651"/>.</t>
  </dd>
  <dt>Unix timestamp:</dt>
  <dd>
    <t>Seconds since 1970-01-01T00:00:00Z (UTC), excluding leap seconds, as a signed integer.</t>
  </dd>
</dl>

</section>
<section anchor="architecture"><name>Architecture</name>

<t>DIVE separates object security from key distribution:</t>

<figure title="DIVE Architecture and Verification Flow" anchor="architecture-diagram"><artwork><![CDATA[
  Origin Server                   DNS (DNSSEC)
  +---------------+               +-----------------------+
  | Body response |               | _dive TXT: policy     |
  | signed with   |               | <keyid>._divekey TXT: |
  | private key   |               |   public key, params  |
  | (offline)     |               |                       |
  +--------+------+               +-----------+-----------+
           |                                  |
           | HTTP response                    | DNS/DNSSEC query
           | (Signature: header)              |
           v                                  v
  +--------+----------------------------------+-----------+
  |                      DIVE Client                      |
  |  1. Discover policy via _dive DNS record              |
  |  2. Determine resource scope                          |
  |  3. Resolve public key from _divekey DNS record       |
  |  4. Verify HTTP Message Signature over response body  |
  +-------------------------------------------------------+
]]></artwork></figure>

<t>The Signature and Signature-Input headers are defined by <xref target="RFC9421"/>. The DNS records are defined by this document. The private signing key is held offline and never deployed to the origin server; signatures are pre-computed and injected at distribution time (<xref target="private-key-storage"/>).</t>

</section>
<section anchor="scopes"><name>Scopes</name>

<t>A scope identifies the category of resources to which DIVE verification applies.</t>

<section anchor="standard-scopes"><name>Standard Scopes</name>

<dl>
  <dt><spanx style="verb">strict</spanx>:</dt>
  <dd>
    <t>DIVE verification MUST be applied to ALL resources served under the domain covered by the policy record.</t>
  </dd>
</dl>

</section>
<section anchor="custom-scopes"><name>Custom Scopes</name>

<t>Operators MAY define custom scopes for application-specific resource categories. Custom scope names MUST begin with <spanx style="verb">x-</spanx>, be entirely lowercase, and contain only <spanx style="verb">a-z</spanx> and <spanx style="verb">-</spanx> after the prefix.</t>

<t>Custom scopes are intended for closed environments where server and client are under the same operator's control. Detection logic for custom scopes is application-defined.</t>

<t>A DIVE client that does not recognise a custom scope MUST ignore it.</t>

</section>
</section>
<section anchor="dns-configuration"><name>DNS Configuration</name>

<section anchor="dnssec-requirement"><name>DNSSEC Requirement</name>

<t>A DIVE server SHOULD enable DNSSEC <xref target="RFC4033"/> for all zones publishing DIVE records. If a client retrieves a <spanx style="verb">_dive</spanx> record without DNSSEC validation, it MUST treat DIVE as not supported for that domain.</t>

</section>
<section anchor="record-format"><name>Record Format</name>

<t>All DIVE DNS records are DNS TXT records. Values MUST be formatted as Structured Field Values <xref target="RFC9651"/>. Parameter names and values MUST be lowercase unless otherwise stated. Timestamps are Unix timestamps represented as Structured Field Integers.</t>

</section>
<section anchor="dive-record"><name>Policy Record (<spanx style="verb">_dive</spanx>)</name>

<t>The <spanx style="verb">_dive</spanx> TXT record is placed at the <spanx style="verb">_dive</spanx> label of the domain or subdomain it governs (e.g., <spanx style="verb">_dive.example.com</spanx>). A record at a given level applies to all subordinate labels unless overridden by a more specific record.</t>

<section anchor="example"><name>Example</name>

<figure title="Example of a DIVE Policy Record" anchor="dns-example-dive"><sourcecode type="dns-rr"><![CDATA[
_dive.example.com.  300  IN  TXT  (
  "v=\"dive-draft-01\", "
  "scopes=(\"strict\"), "
  "directives=(\"https-required\"), "
  "cache=300, "
  "invalidate-keys-cache=1700000000, "
  "report-to=\"https://reports.example.com/dive\""
)
]]></sourcecode></figure>

</section>
<section anchor="parameters"><name>Parameters</name>

<dl>
  <dt><spanx style="verb">v</spanx> (REQUIRED):</dt>
  <dd>
    <t>Protocol version string. MUST be <spanx style="verb">"dive-draft-01"</spanx>. If absent, unrecognised, or unparseable, the client MUST treat DIVE as not supported for this domain.</t>
  </dd>
  <dt><spanx style="verb">scopes</spanx> (OPTIONAL):</dt>
  <dd>
    <t>Structured Field List of scope names (Strings). If absent or empty, no resource-level verification is performed, though other directives still apply.</t>
  </dd>
  <dt><spanx style="verb">directives</spanx> (OPTIONAL):</dt>
  <dd>
    <t>Structured Field List of behavioural directives (Strings):</t>
  </dd>
</dl>

<t><list style="symbols">
  <t><spanx style="verb">"https-required"</spanx>: the client MUST refuse or upgrade plain-HTTP requests for resources under the covered domain.</t>
  <t><spanx style="verb">"report-only"</spanx>: the client MUST NOT block resources that fail DIVE verification; it MUST report failures per <xref target="reporting"/> instead.</t>
</list></t>

<t>Unrecognised directive values MUST be ignored.</t>

<dl>
  <dt><spanx style="verb">cache</spanx> (OPTIONAL):</dt>
  <dd>
    <t>Structured Field Integer. Number of seconds the client MAY cache this record (default: 0). MUST NOT exceed 3600 (<xref target="cache-management"/>).</t>
  </dd>
  <dt><spanx style="verb">invalidate-keys-cache</spanx> (OPTIONAL):</dt>
  <dd>
    <t>Structured Field Integer (Unix timestamp). When present, the client MUST purge cached key records for the domain stored at or before this timestamp. If the timestamp is in the future, the client MUST issue a fresh DNS query on each verification attempt until the timestamp has passed.</t>
  </dd>
  <dt><spanx style="verb">report-to</spanx> (OPTIONAL):</dt>
  <dd>
    <t>Structured Field String. An absolute HTTPS URL to which failure reports MUST be sent (<xref target="reporting"/>). Plain HTTP URLs MUST be ignored.</t>
  </dd>
</dl>

<t>Unrecognised parameters MUST be ignored.</t>

<t><strong>Operational note:</strong> Operators SHOULD set the DNS TTL of <spanx style="verb">_dive</spanx> records to 300 seconds.</t>

</section>
</section>
<section anchor="key-records"><name>Key Records</name>

<t>When one or more scopes are declared, at least one key record MUST be present and valid. If no valid key record is reachable, the client MUST refuse all resources in the declared scopes.</t>

<t>Key records are DNS TXT records at <spanx style="verb">&lt;Key-ID&gt;._divekey.&lt;domain&gt;</spanx>. A Key ID MAY contain <spanx style="verb">A-Z</spanx>, <spanx style="verb">a-z</spanx>, <spanx style="verb">0-9</spanx>, and <spanx style="verb">_</spanx>; it MUST NOT contain other characters; it is case-sensitive.</t>

<section anchor="example-1"><name>Example</name>

<figure title="Example of a DIVE Key Record" anchor="dns-example-key"><sourcecode type="dns-rr"><![CDATA[
keyABC._divekey.example.com.  900  IN  TXT  (
  "sig=\"ed25519\", "
  "key=:BASE64RAWKEY:, "
  "allowed-hash=(\"sha256\" \"sha384\" \"sha3-256\"), "
  "cache=900"
)
]]></sourcecode></figure>

</section>
<section anchor="parameters-1"><name>Parameters</name>

<dl>
  <dt><spanx style="verb">sig</spanx> (REQUIRED):</dt>
  <dd>
    <t>Signature algorithm. MUST be one of <spanx style="verb">"ed25519"</spanx> (<xref target="RFC8032"/> Section 5.1) or <spanx style="verb">"ed448"</spanx> (<xref target="RFC8032"/> Section 5.2). All other algorithms MUST be rejected.</t>
  </dd>
  <dt><spanx style="verb">key</spanx> (REQUIRED):</dt>
  <dd>
    <t>Structured Field Byte Sequence containing the raw public key bytes for the declared algorithm (32 bytes for Ed25519, 57 bytes for Ed448).</t>
  </dd>
  <dt><spanx style="verb">allowed-hash</spanx> (OPTIONAL):</dt>
  <dd>
    <t>Structured Field List of permitted hash algorithms (Strings). Permitted values: <spanx style="verb">"sha256"</spanx>, <spanx style="verb">"sha384"</spanx>, <spanx style="verb">"sha512"</spanx>, <spanx style="verb">"sha3-256"</spanx>, <spanx style="verb">"sha3-384"</spanx>, <spanx style="verb">"sha3-512"</spanx>. MD5, CRC32, and SHA-1 MUST NOT be listed and MUST be rejected. When present, the hash algorithm used in the corresponding signature MUST appear in this list; otherwise verification MUST be treated as failed.</t>
  </dd>
  <dt><spanx style="verb">cache</spanx> (OPTIONAL):</dt>
  <dd>
    <t>Structured Field Integer. Number of seconds the client MAY cache this record (default: 0). MUST NOT exceed 86400 (<xref target="cache-management"/>).</t>
  </dd>
</dl>

<t>Unrecognised parameters MUST be ignored.</t>

<t><strong>Operational note:</strong> Operators SHOULD set the DNS TTL of key records to 900 seconds and SHOULD perform regular key rotation (<xref target="key-rotation"/>). A Key ID SHOULD NOT be reused after its associated record has been removed.</t>

</section>
</section>
<section anchor="subdomain-specific-records"><name>Subdomain-Specific Records</name>

<t>Operators MAY publish policy and key records at any subdomain level. The most specific matching record takes precedence.</t>

</section>
</section>
<section anchor="http-signatures"><name>HTTP Signatures</name>

<t>DIVE uses HTTP Message Signatures <xref target="RFC9421"/> to carry per-resource signatures. A DIVE server MUST include <spanx style="verb">Signature</spanx> and <spanx style="verb">Signature-Input</spanx> response headers on all 200 responses for resources within a declared scope.</t>

<section anchor="signature-coverage"><name>Signature Coverage</name>

<t>Each DIVE signature MUST cover the <spanx style="verb">content-digest</spanx> derived component (<xref target="RFC9421"/> Section 2.4), which commits the signature to the response body. Servers MUST include a <spanx style="verb">Content-Digest</spanx> header <xref target="RFC9530"/> in each covered response.</t>

</section>
<section anchor="key-identification-and-multiple-signatures"><name>Key Identification and Multiple Signatures</name>

<t>The <spanx style="verb">keyid</spanx> parameter in <spanx style="verb">Signature-Input</spanx> MUST be set to the Key ID of the DNS key record used to create the signature. The <spanx style="verb">alg</spanx> parameter MUST be set to <spanx style="verb">"ed25519"</spanx> or <spanx style="verb">"ed448"</spanx> as appropriate.</t>

<t>To support key rotation (<xref target="key-rotation"/>), a server MAY include multiple signatures in a single response by providing multiple <spanx style="verb">Signature</spanx> and <spanx style="verb">Signature-Input</spanx> entries (<xref target="RFC9421"/> Section 4.2), each referencing a different Key ID.</t>

<t>A DIVE client MUST attempt verification using the available signature entries in order. The client MUST NOT assume prior knowledge of key ordering semantics beyond the order provided in the response. If the client has previously cached a public key matching a given <spanx style="verb">keyid</spanx>, it SHOULD prefer using the cached key for verification of the corresponding signature entry. Otherwise, the client MUST use the first available signature entry, and proceed to the next entry only if verification fails. The resource MUST be accepted as soon as one verification succeeds.</t>

<section anchor="example-2"><name>Example</name>

<t>The following example illustrates two concurrent signatures for key rotation. <spanx style="verb">keyDEF</spanx> is the newly introduced signing key being rolled in, while <spanx style="verb">keyABC</spanx> is the previously active key.</t>

<figure title="Example of Concurrent Signatures for Key Rotation" anchor="http-example-rotation"><sourcecode type="http-message"><![CDATA[
Content-Digest: sha-256=:BASE64DIGEST:
Signature-Input: sigDEF=("content-digest");keyid="keyDEF"; \
                 alg="ed25519", \
                 sigABC=("content-digest");keyid="keyABC"; \
                 alg="ed25519"
Signature: sigDEF=:BASE64SIG2:, \
           sigABC=:BASE64SIG1:
]]></sourcecode></figure>

<t>Clients that have already cached <spanx style="verb">keyDEF</spanx> will verify using <spanx style="verb">sigDEF</spanx> directly. Clients that have not cached any key will attempt verification starting with the first signature entry (<spanx style="verb">sigDEF</spanx>), and will fall back to <spanx style="verb">sigABC</spanx> if needed. Clients that have cached <spanx style="verb">keyABC</spanx> MAY directly use <spanx style="verb">sigABC</spanx> for verification, but MUST still follow the ordered fallback behavior if verification fails.</t>

<t>The list of signatures SHOULD contain no more than three entries to maintain compatibility with HTTP implementations that impose header-length limits.</t>

</section>
</section>
<section anchor="hash-algorithm-binding"><name>Hash Algorithm Binding</name>

<t>The hash algorithm used to compute <spanx style="verb">Content-Digest</spanx> MUST be consistent with the <spanx style="verb">allowed-hash</spanx> parameter of the key record (<xref target="key-records"/>), when that parameter is present.</t>

<t>Permitted hash algorithms for <spanx style="verb">Content-Digest</spanx>: <spanx style="verb">sha-256</spanx>, <spanx style="verb">sha-384</spanx>, <spanx style="verb">sha-512</spanx>, <spanx style="verb">sha3-256</spanx>, <spanx style="verb">sha3-384</spanx>, <spanx style="verb">sha3-512</spanx>. MD5, CRC32, and SHA-1 MUST NOT be used and MUST be rejected by the client.</t>

</section>
</section>
<section anchor="client-implementation"><name>Client Implementation</name>

<section anchor="policy-discovery"><name>Step 1: Policy Discovery</name>

<t>The client MUST locate the applicable <spanx style="verb">_dive</spanx> TXT record by querying from the resource's full FQDN upward, one label at a time, until a record is found or no labels remain. The most specific (deepest) record found applies.</t>

<t>If no record is found, DIVE is not supported.</t>

<t>If the policy record was retrieved without DNSSEC validation, the client MUST treat DIVE as not supported.</t>

<t>If a valid cached copy of the policy record has not expired, the client MUST use it.</t>

<t>Upon retrieving the record, the client MUST verify the <spanx style="verb">v</spanx> parameter and parsability. It MUST apply <spanx style="verb">invalidate-keys-cache</spanx> and the <spanx style="verb">https-required</spanx> directive as specified in <xref target="dive-record"/>. It MUST cache the record per the <spanx style="verb">cache</spanx> parameter, subject to the 3600-second cap.</t>

<t>DIVE verification is based on the resource's own origin. If a resource is fetched from a third-party domain, the client MUST look up that domain's <spanx style="verb">_dive</spanx> record, not the referring domain's.</t>

<t>If DIVE is not supported, the client MAY choose to block the resource based on its own requirements.</t>

</section>
<section anchor="step-2-scope-determination"><name>Step 2: Scope Determination</name>

<t>If <spanx style="verb">scopes</spanx> is absent or empty, no resource-level verification is performed. Other directives (e.g., <spanx style="verb">https-required</spanx>) still apply.</t>

<t>If the resource falls within at least one declared scope, proceed to Step 3. Standard scope detection:</t>

<t><list style="symbols">
  <t><spanx style="verb">strict</spanx>: all resources under the covered domain are in scope.</t>
</list></t>

<t>Custom scope detection is application-defined.</t>

</section>
<section anchor="step-3-signature-header-validation"><name>Step 3: Signature Header Validation</name>

<t>The client MUST verify that <spanx style="verb">Signature</spanx> and <spanx style="verb">Signature-Input</spanx> headers are present and syntactically conformant per <xref target="RFC9421"/>. If either header is absent or invalid, the client MUST refuse the resource.</t>

<t>The client MUST also verify that a <spanx style="verb">Content-Digest</spanx> header is present and parseable per <xref target="RFC9530"/>.</t>

</section>
<section anchor="key-resolution"><name>Step 4: Key Resolution</name>

<t>For each signature entry in <spanx style="verb">Signature-Input</spanx>, the client resolves the key record as follows:</t>

<t>If <spanx style="verb">keyid</spanx> contains an <spanx style="verb">@</spanx>-qualified FQDN (e.g., <spanx style="verb">keyABC@example.com</spanx>), the client MUST verify that the specified FQDN is equal to or a parent of the resource's origin FQDN. If not, the entry MUST be treated as invalid. The client MUST query exactly <spanx style="verb">&lt;Key-ID&gt;._divekey.&lt;fqdn&gt;</spanx> and MUST NOT search at levels above the specified FQDN.</t>

<t>Otherwise, the client queries from the resource's FQDN upward, label by label, stopping at the level of the applicable policy record, querying <spanx style="verb">&lt;Key-ID&gt;._divekey.&lt;level&gt;</spanx> at each step. The first record found is used.</t>

<t>In all cases, the DNS query MUST be DNSSEC-validated. A record retrieved without DNSSEC validation MUST be treated as absent.</t>

<t>If no key record is found after cache eviction and a fresh DNS query, the Key ID is unresolvable and verification fails for that entry.</t>

<t>The client MUST cache a valid key record per its <spanx style="verb">cache</spanx> parameter, subject to the 86400-second cap and any <spanx style="verb">invalidate-keys-cache</spanx> constraint.</t>

</section>
<section anchor="step-5-signature-verification"><name>Step 5: Signature Verification</name>

<t>For each signature entry, the client MUST:</t>

<t><list style="numbers" type="1">
  <t>Recompute the <spanx style="verb">Content-Digest</spanx> over the received response body using the hash algorithm declared in the <spanx style="verb">Content-Digest</spanx> header and verify it matches.</t>
  <t>Reconstruct the signature base as defined by <xref target="RFC9421"/> Section 2.5 from the <spanx style="verb">Signature-Input</spanx> components.</t>
  <t>Retrieve the public key from the resolved key record.</t>
  <t>If <spanx style="verb">allowed-hash</spanx> is present in the key record, verify the hash algorithm in <spanx style="verb">Content-Digest</spanx> is listed; if not, fail this entry.</t>
  <t>Verify the decoded signature over the signature base using the algorithm declared in <spanx style="verb">sig</spanx> of the key record.</t>
</list></t>

<t>If at least one entry verifies successfully, the resource MUST be accepted.</t>

<t>If all entries fail:</t>

<t><list style="symbols">
  <t>By default, the resource MUST be rejected.</t>
  <t>If <spanx style="verb">report-to</spanx> is present, a report MUST be sent per <xref target="reporting"/>.</t>
  <t>If <spanx style="verb">report-only</spanx> is present, the resource MUST be accepted.</t>
</list></t>

<t>The client MUST NOT act upon the resource body before completing verification. The body MAY be downloaded concurrently with DNS resolution, but MUST NOT be delivered to the application until verification is complete.</t>

</section>
<section anchor="reporting"><name>Step 6: Reporting</name>

<t>When a resource fails verification (whether blocked or allowed under <spanx style="verb">report-only</spanx>), and <spanx style="verb">report-to</spanx> is set, the client MUST POST to that URL with <spanx style="verb">Content-Type: application/json</spanx>:</t>

<figure title="Example of a DIVE Issue Report" anchor="report-example-json"><sourcecode type="json"><![CDATA[
{
  "report-version": "0.1",
  "timestamp": 1700000000,
  "client": {
    "user-agent": "ExampleClient/1.0"
  },
  "policy": {
    "domain": "example.com",
    "fqdn": "sub.example.com",
    "dnssec-validated": true
  },
  "resource": {
    "url": "https://sub.example.com/downloads/invalid.zip",
    "method": "GET",
    "status-code": 200,
    "scope": "strict"
  },
  "headers-received": {
    "signature-input":
      "sig1=(\"content-digest\");keyid=\"keyABC\";alg=\"ed25519\"",
    "signature": "sig1=:BASE64SIG:",
    "content-digest": "sha-256=:BASE64DIGEST:"
  },
  "key-resolution": [
    {
      "key-id": "keyABC",
      "fqdn-queried": "keyABC._divekey.sub.example.com",
      "found": true,
      "dnssec-validated": true,
      "sig-algorithm": "ed25519"
    }
  ],
  "validation": {
    "hash-algorithm": "sha-256",
    "hash-computed": "BASE64HASHVALUE",
    "signature-valid": false,
    "failure-reason": "signature-mismatch",
    "final-decision": "blocked"
  }
}
]]></sourcecode></figure>

<t>Fields that are absent or not applicable MUST be set to JSON <spanx style="verb">null</spanx>.</t>

<t><spanx style="verb">failure-reason</spanx> permitted values: <spanx style="verb">"missing-headers"</spanx>, <spanx style="verb">"key-not-found"</spanx>, <spanx style="verb">"key-invalid"</spanx>, <spanx style="verb">"dnssec-unavailable"</spanx>, <spanx style="verb">"hash-algorithm-not-allowed"</spanx>, <spanx style="verb">"signature-mismatch"</spanx>, <spanx style="verb">"no-valid-key"</spanx>.</t>

<t><spanx style="verb">final-decision</spanx> permitted values: <spanx style="verb">"blocked"</spanx>, <spanx style="verb">"allowed-report-only"</spanx>.</t>

<t>Failure to deliver a report MUST NOT affect the resource acceptance decision.</t>

</section>
<section anchor="cache-management"><name>Cache Management</name>

<t>Clients MUST enforce an absolute maximum cache duration of 3600 seconds for all <spanx style="verb">_dive</spanx> records and 86400 seconds for all <spanx style="verb">_divekey</spanx> records, regardless of the <spanx style="verb">cache</spanx> parameter. When a key record cannot be resolved, the client MUST evict any cached entry and issue a fresh DNS query before failing.</t>

</section>
</section>
<section anchor="operational-security"><name>Operational Security</name>

<section anchor="key-rotation"><name>Key Rotation</name>

<t>To rotate a signing key without service disruption:</t>

<t><list style="numbers" type="1">
  <t>Generate a new key pair and publish the new public key under a new Key ID in DNS.</t>
  <t>Wait for the new key record to propagate throughout the DNS.</t>
  <t>Begin including both the old and new signatures in HTTP responses (using multiple <spanx style="verb">Signature</spanx> entries per <xref target="http-signatures"/>).</t>
  <t>Once the new signature has been successfully validated across all resources (ensuring no service disruption), remove the old signature from HTTP responses.</t>
  <t>Remove the old key record from DNS.</t>
</list></t>

<t>Key IDs MUST NOT be reused after their associated key records have been removed from DNS.</t>

</section>
<section anchor="response-to-key-compromise"><name>Response to Key Compromise</name>

<t>Upon discovering a compromised private key, the operator MUST:</t>

<t><list style="numbers" type="1">
  <t>Immediately begin key rotation (<xref target="key-rotation"/>).</t>
  <t>Set <spanx style="verb">invalidate-keys-cache</spanx> in all applicable <spanx style="verb">_dive</spanx> policy records to a timestamp at or after the time of compromise.</t>
  <t>Remove the compromised key record from DNS as soon as the new key is operational.</t>
  <t>Maintain the <spanx style="verb">invalidate-keys-cache</spanx> directive for at least 86400 seconds to ensure all clients have flushed the compromised key, then remove it from the policy record to restore normal caching behavior.</t>
</list></t>

<t>Operators MUST NOT set <spanx style="verb">report-only</spanx> as a temporary measure during key compromise remediation.</t>

</section>
<section anchor="private-key-storage"><name>Private Key Storage</name>

<t>Private signing keys MUST NOT be stored on origin servers. They MUST be kept in offline environments or within Hardware Security Modules (HSMs). This requirement is fundamental to DIVE's security model: the protocol assumes that the signing key is never present on the system serving the content. As a result, compromise of an origin server alone does not enable an attacker to obtain the private key or generate signatures that a DIVE client will accept.</t>

<t>This design constrains DIVE to content whose signatures can be generated prior to deployment. Accordingly, DIVE is intended for static, pre-signable artifacts such as firmware images, software packages, archives, and other versioned binary resources. Dynamically generated responses cannot be signed offline and are therefore outside the scope of this protocol.</t>

<t>Where HSMs or remote signing services are used, access to signing operations MUST be strongly authenticated, authorized, rate-limited, and audited. Although such systems prevent extraction of private key material, an attacker may still obtain unauthorized signatures by abusing a signing interface. Wherever practical, signatures SHOULD be pre-computed and embedded during deployment rather than generated on demand.</t>

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

<section anchor="threat-model"><name>Threat Model</name>

<t>DIVE protects against an attacker who has compromised the origin web server but not the DNS infrastructure. Such an attacker cannot publish a forged DNSSEC-validated key record, so a DIVE-compliant client will reject any response not signed with a DNS-published key. Because private signing keys are stored offline and never deployed to the origin server, a server compromise does not expose the signing material needed to forge a valid signature.</t>

<t>DIVE does NOT protect against simultaneous compromise of both the DNS infrastructure and the origin server, compromise of the private signing keys or the signing pipeline itself, or failure of the underlying cryptographic assumptions on which the signature scheme relies.</t>

</section>
<section anchor="dnssec-as-trust-anchor"><name>DNSSEC as Trust Anchor</name>

<t>DNSSEC is the root of trust for DIVE. Clients MUST obtain DNSSEC validation status for all DNS records they retrieve. Two models are recognised:</t>

<t><list style="symbols">
  <t><strong>Stub validator</strong> (RECOMMENDED): the client performs DNSSEC verification itself.</t>
  <t><strong>Validating resolver</strong>: the client trusts the AD bit from a resolver. The connection to the resolver MUST be over DoH <xref target="RFC8484"/> or DoT <xref target="RFC7858"/>.</t>
</list></t>

<t>A record for which DNSSEC validation cannot be confirmed MUST be treated as absent.</t>

</section>
<section anchor="algorithm-restrictions"><name>Algorithm Restrictions</name>

<t>Only Ed25519 and Ed448 are permitted for signing. Only SHA-256, SHA-384, SHA-512, SHA3-256, SHA3-384, and SHA3-512 are permitted for hashing. Clients MUST reject records or responses referencing any other algorithm. This prevents downgrade attacks.</t>

</section>
<section anchor="cache-poisoning"><name>Cache Poisoning</name>

<t>Enforcing bounded cache lifetimes for <spanx style="verb">_dive</spanx> and <spanx style="verb">_divekey</spanx> records limits the impact of cache-poisoning attacks in which a malicious record with an artificially long <spanx style="verb">cache</spanx> value is injected. DNSSEC substantially mitigates this attack.</t>

</section>
<section anchor="privacy"><name>Privacy</name>

<t>DNS queries for <spanx style="verb">_dive</spanx> and <spanx style="verb">_divekey</spanx> records may reveal resource-access patterns to the resolver. Clients SHOULD use DoH or DoT.</t>

<t>Failure reports sent to <spanx style="verb">report-to</spanx> include the resource URL and User-Agent. Operators MUST handle report data in accordance with applicable privacy regulations.</t>

</section>
<section anchor="scope-of-protection"><name>Scope of Protection</name>

<t>DIVE verifies response body integrity and authenticity for static, pre-signed artifacts. It does not protect HTTP response headers other than those defined in <xref target="RFC9421"/> and <xref target="RFC9530"/>, nor request parameters or cookies. It does not apply to dynamically generated content.</t>

</section>
<section anchor="interaction-with-http-caches"><name>Interaction with HTTP Caches</name>

<t>The client MUST NOT hide, suppress, or otherwise obscure HTTP resources or HTTP header fields.</t>

</section>
<section anchor="relationship-to-webpki"><name>Relationship to WebPKI</name>

<t>WebPKI certificates bind a key to a domain name and guarantee transport-channel integrity, but make no assertion about the content delivered over that channel. A valid TLS certificate does not attest that the artifact served is legitimate; it only attests that the connection reaches the expected server. DIVE operates at the content layer: it binds the artifact itself to a key that the origin server does not hold, providing integrity guarantees that remain valid even if the origin server is fully compromised.</t>

<t>More broadly, any CA-based signing scheme introduces a third-party trust dependency. A CA that is compromised or coerced can issue a fraudulent code-signing certificate that is indistinguishable from a legitimate one to the client. DIVE has no such intermediary: the only authoritative source for the public key is the operator's own DNS zone, under their direct control.</t>

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

<section anchor="dive-scope-registry"><name>DIVE Scope Registry</name>

<t>IANA is requested to create the registry "DIVE Scope Names" under a new registry group "Domain-based Integrity Verification Enforcement (DIVE)", with policy "Specification Required" <xref target="RFC8126"/>.</t>

<t>Initial contents:</t>

<texttable title="Initial Contents of the DIVE Scope Names Registry" anchor="iana-scope-registry">
      <ttcol align='left'>Scope Name</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Detection Criterion</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c><spanx style="verb">strict</spanx></c>
      <c>All resources in the covered domain</c>
      <c>Applies to all resources.</c>
      <c>This document</c>
</texttable>

<t>Custom scopes using the <spanx style="verb">x-</spanx> prefix are not subject to IANA registration.</t>

</section>
<section anchor="dive-directive-registry"><name>DIVE Directive Registry</name>

<t>IANA is requested to create the registry "DIVE Directive Names" under the same registry group, with policy "Specification Required" <xref target="RFC8126"/>.</t>

<t>Initial contents:</t>

<texttable title="Initial Contents of the DIVE Directive Names Registry" anchor="iana-directive-registry">
      <ttcol align='left'>Directive Name</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c><spanx style="verb">https-required</spanx></c>
      <c>Client MUST NOT issue plain-HTTP requests; MUST upgrade or abort.</c>
      <c>This document</c>
      <c><spanx style="verb">report-only</spanx></c>
      <c>Client MUST NOT block failures; MUST report them instead.</c>
      <c>This document</c>
</texttable>

</section>
<section anchor="hash-algorithms-for-http-digest-fields"><name>Hash Algorithms for HTTP Digest Fields</name>

<t>DIVE requires hash algorithms beyond those currently registered in the IANA "Hash Algorithms for HTTP Digest Fields" registry <xref target="RFC9530"/>. IANA is requested to add the following entries to that registry:</t>

<texttable title="Additions to the Hash Algorithms for HTTP Digest Fields Registry" anchor="iana-digest-algorithms">
      <ttcol align='left'>Key</ttcol>
      <ttcol align='left'>Status</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c><spanx style="verb">sha-384</spanx></c>
      <c>Active</c>
      <c>SHA-384</c>
      <c><xref target="RFC6234"/></c>
      <c><spanx style="verb">sha3-256</spanx></c>
      <c>Active</c>
      <c>SHA3-256</c>
      <c><xref target="FIPS202"/></c>
      <c><spanx style="verb">sha3-384</spanx></c>
      <c>Active</c>
      <c>SHA3-384</c>
      <c><xref target="FIPS202"/></c>
      <c><spanx style="verb">sha3-512</spanx></c>
      <c>Active</c>
      <c>SHA3-512</c>
      <c><xref target="FIPS202"/></c>
</texttable>

<t>These algorithms are required to satisfy the cryptographic posture mandated by CNSA Suite 2.0 <xref target="CNSA2"/> and to provide algorithm diversity between the SHA-2 and SHA-3 families, ensuring continued integrity guarantees in the event of a weakness discovered in either family.</t>

<t>SHA-384 provides a stronger security margin than SHA-256 within the SHA-2 family at acceptable performance cost. The SHA-3 family (Keccak) has an entirely different internal construction from SHA-2, meaning a structural break in one family does not compromise the other. For high-assurance environments, the ability to mandate SHA-3 exclusively via the <spanx style="verb">allowed-hash</spanx> key record parameter is a deliberate design goal of DIVE.</t>

<t>MD5, CRC32, and SHA-1 MUST NOT be registered or used within DIVE.</t>

</section>
<section anchor="dns-resource-record-types"><name>DNS Resource Record Types</name>

<t>No new DNS resource record types are defined. DIVE uses DNS TXT records (type 16) <xref target="RFC1035"/>.</t>

</section>
</section>
<section anchor="implementation-status"><name>Implementation Status</name>

<t>An experimental implementation of the DIVE protocol is available:</t>

<t><list style="symbols">
  <t>OpenDIVE Client: <eref target="https://github.com/diveprotocol/opendive-client">https://github.com/diveprotocol/opendive-client</eref></t>
  <t>Protocol information: <eref target="https://diveprotocol.org">https://diveprotocol.org</eref></t>
</list></t>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">

&RFC9421;
&RFC2119;
&RFC8174;
&RFC9651;
&RFC4033;
&RFC8032;
&RFC9530;
&RFC8126;
&RFC6234;
&RFC1035;


    </references>

    <references title='Informative References' anchor="sec-informative-references">

<reference anchor="FIPS202" >
  <front>
    <title>SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions</title>
    <author >
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <date year="2015" month="August"/>
  </front>
  <seriesInfo name="DOI" value="10.6028/NIST.FIPS.202"/>
</reference>
<reference anchor="CNSA2" target="https://media.defense.gov/2025/May/30/2003728741/-1/-1/0/CSA_CNSA_2.0_ALGORITHMS.PDF">
  <front>
    <title>Commercial National Security Algorithm Suite 2.0</title>
    <author >
      <organization>National Security Agency</organization>
    </author>
    <date year="2022" month="September"/>
  </front>
</reference>
&RFC8484;
&RFC7858;


    </references>

</references>


<?line 566?>

<section numbered="false" anchor="Acknowledgements"><name>Acknowledgements</name>

<t>The author would like to thank Benjamin Schwartz for his review and constructive feedback on earlier versions of this document, Eric Rescorla for his thorough review and identification of framing issues in draft-callec-dive-01, and S. Kishore for his careful reading and feedback on the static content scope of the protocol.</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA819aXPbSJL2d/6KeukPI7kJWofltunxviPLclvbPrSmPLOH
N5ogUCIxAgE2Dsls2/PbN6+6QMhy925srKKjTRJAHVlZmU8elYiiaDBosibX
EzV8Ua7irIjmca1TdVY0elFlzUb9VVfZZZbETVYW6rS4LKtEr3TRqJ0XZ389
3cXrNV7aG+8PB/F8XulrbAyuDQdpmRTxChpPq/iyiZI4z3USpdm1jvYOBnU7
X2U1Ptxs1nDT2enFy0EaN/DxYO/gUbT3KNp/NICe9aKsNhOlP60H2bqaqKZq
6+Zgb+8JNBJXOp6oqU5aHO3gpqyuFlXZrieDK72Bb+lkMIhUZqYDn9Oi5v/X
OoEPdbYo4qatNHxeNs16MKibuEijOC8LGMlG14N6FVdN9GtbNrqeqKIcDOK2
WZaVNA2/vRmrl2N1QvMbKMWTfgMjL9XLvKyyuHAXy2oBcy1Svdbwv6KBnzRQ
Pp+oFT7wF6bSuNAN3Zxk6UTtwWQj+N9e9Hjv4Cg6Ojzag4tJ2RYNUuZlFReJ
HgwyXB5oBQg8gesvz86nQEn8qJRZ5umr4+hQTXGOMVBHnetq1Ta0vNFzWvtX
cb1UcFmdfmpgiPE819G7tlm3jXrZFgneWQ+pTUMGRX8RT+0ttRXnMMcaOm0b
rcpL22FNLV/oZFmUebnY0LNm0fePor3H9EsNXKdrnI9p/cW7s4na3xs/2jt4
/ODt2fRijNMbw/zghpO30+POPE/K1UoD9WAgdkSGTdRxDiyVNcuVmrYZDPBg
vPc9M3LPL3SRhGM/OIj2nvAI4mqhmwlxUz158GCl0ywep/pSF7UeL8rrB3D3
0YM38ebB4R583jv88eDxjw/3H0T0396Dk+nxLzijX2BYvxy//und+7OLV2+m
4/MXL4HjokjF87qp4qQZDP7gps1wGVS8XudyU5THG12pdVU2ZVLmqlnGDX67
zlJdq6TarJtyUcXrZZa4zURLiRSDlrMEf7j2+4VVf3Vxca4qXa+BZbSalyks
qppvVK7hzniRFQvoSSueBdB5pdV0Uzd65UhNTIhCoobBv51OT092VUzDL9sm
Ki9h7jCKNAOKZPOWOk6WcVHoXMG01bqdwxwVCIN6DOSC2ePkYVKw7YFkeEsB
059X5Q3wHM6mxG2YqiTPYFq1Ktcw0gZHCiNMQFZVJezPFL5dVjF02iYoPCaq
Li+bG5BGql0jS6h4gY+P1DpOruAzbO4C/qngFxzvWXkBg7jOEq0uc62beqzO
GhxZvdYJkTDPN6pG5kxVUxKVgjkCcWvctQn0UOmIpBhsVBohLfRlVq1oPNkK
+nUDkQFcs9iG1udZEVewllWTXQJP1bsjdbPU8KCVjMAAQO45Nr4CKQDPlJeX
eVZoaikr/q4T/BE4BoRaXm6I05pspQ3Fl7BgzU0Jt1qpR21B/0CjidrZ36UF
nWNLUW2WnngSR5MlS9XWMA7ipze6rpGiUze+nfcvT9SThwfQDhAriSuYEKxb
BNfKFnjfnwssY8iWSx2ndmF2DmAoChgNWSYKSB4Mh/iqXkJ7HodRC+sSvm6w
G2bXCDcVU+jiXy+g2wS0Eqz3sbAYLNA6p92JTEb04m0EbesYukpK+A5P28nE
C9gtdUNMAY3xRFJ6+u00MiNLvZHB4gGnw5NJotfMzA2MAERA0wBbAOOvWm6w
4htxdaoS1DPu2mbJuxSIEnI9zRcvgTCFzYxSG4YKxF61Och7XbY1cDGsSKrz
DK/EIBxX63A2cDmmaUfYaQ66shHKjFnarbI0zUG73UMBV5VpSyoIvt9T51UJ
TL9C7dIQCQeDC9CFQA9Q2CzSLDfJMtQosWNcngbvzBoFy6vSEqhdlI25y9I4
9kiRduZJQpI+17C9gdQZTNjuwJInnOtFBnsBRcLF6yncTogHpvay7BM3juNg
kXiHu60JAgH4ATbTHZubtnSG30huwOALpOoKBrIg2QycCjJrMNgfq/v3T1dz
naYoZxBXQQMJqMD6/v0JMxgzab3M1rW6AZ0Jc/IZK74iYWilCjNu7HYcE4I4
OS1viryMsS8zp7G6WILYQ9xW00okAOgaaiHJqqTN40oZoZEA1IHlYWkcLgwO
pdK/tllFOxJGi7cURhgjj+W5iCeP2s0SsOKC2RtGuTH3rzTqkKxewW4vYQ/4
lEEpXZQ3fvcgvAsS6bq4zqqyWLHoZzHKYh45BLehGwOqno2OK6Eq7iyYAHFO
pdqigi1DEl2GlGySnFcU+s+IPsDWqCiMiiKIUmX1FTDXAS7sybEAA1wLIAgu
KYpZuh07qYnOJxrXArW2VseEf3C7AMnwMceQ3qLBMHSGwgJ1edUWhSjyrFKw
wrCHsmts7OQYpwK3lPMGdpNZtZTVFX5NvK4vgZiWt/INCUq4C8d/cixsEqcp
LDAOG1cMJTTzQ4mdsihAspoZCmnr9hL6YDY20iAUZCNivUzEC1HFMZ2C1mOk
ewUiFUiw4Y1Pcs+Q0sqPyxYVt+AEFPIeMSyD0vRx2rjY3uLVJQCsujEAirrJ
uF3YFTldogmCRQIgpEJQ0eKCwBRgsnDBSFWQpQVixKwgqbVAZuadT2PqpTGp
tlz7I0IMQuoJ9J5HHVIJwEkasFmFA+f94ZGMkGGaZjIxf5JJWaPOj5EiZoah
jIWvgNxxm0IfYCG2oGiAPeI2bXOCDh7XmBYAWiB5ikULuo/2jfCTJ38Bbhgs
ZRXMGXIOUBC26MhbUjNUnPsnA3Vx5Ai8ePprGDEINSBHDgDiliXBx+5eE1aR
KBdgre0u84B2gKthwtDVWG2BWZRyvEFYSiziNe4+hvG8+/JssWxuNP4fVxSE
LcoqWmgeAJHOiT8ir2VuYWC4NSXqp7ftJ1zE3g0U8QaCDS3QEJAk0cnur2Y5
uW3iNFcweteIv2l5LTYRjWzwiCit+UZkNiMeUvoMZMbq3IdtMGIHm0C/ItSx
AEUQG88VAfNGkN1ILbJrbNrJmxjuvi5lvI6McS37iEZ4GaMyqVmy87pwh9jP
iGUW8AE+DCrdUD11XOJpMGyvKO8mNoClaQLj7LGB9Kckb2vAZ8AEJFy+YVdM
vgk9qmQJzdxpYaAw12ZabCywucmS0igHWhrQmDVQ1rM5dj5/ljsjVAB4Fbr/
+pWtWoKac1wOLTMEOpa0u5GDrfrjDQ47oCyudQG0TMCGu9J6zevhjQE77gG5
0A3CqkZ0EepdlA00E0bcpOA8weaDjbCtrKl1fik6zkqJRmEXsMa0YmjXCLJk
TPIN80zQvmeNBYYaNF3aXcOWbYjqm9DW9E05UUeBAZ1uinglJitYvUT8NDSy
YM3f2U1iul1ln1CECMhFK54bshN982F6od6+uyBPxca3jYyGLO0zZrv+QTPf
IOt+M55Gd/L6DDos8+/1CXTQIPBa3pIYhu+6Ah6GRSx0Q9B3tO0R4F3EboPU
DGedrTXuAqDnc5mLmYEllrUnUQprdv4Q7VgMvCCiCJFCQBXPAasjnwIERzFX
a5AgPFE032GmoHqLmvye9++/I3PdqgBEl7fZ558//z+w0NFA//pVzPO441Xq
2Au0pzzH0YaFhrsLtghILEF4creYx0VqdoTYI+SbiAtQhSVuq/gS6I/iVmdr
wAA4l59hx/o8j5PZMt9RSHsmvFEZTDoBzuR8vcUnAGumkxhQN5vSCGdBhECv
ZBB7zhEUxKjetiTFiNx2xmYHOWC4D3iyQFPbPQAUIDwKQAPh0zXAx7TjH4Dh
eZvlNjQwkb4JfXuKimdGK+5E0VPPtCLkQNLCcSQzHW6vIgbNj2RFrlQXugJS
kEdYfb7XuG9fwaJnqI82InQ6RD4fjvhf5Hf8/P70Xz6cvT99gZ+nr45fv7Yf
zB3TV+8+vH7hPrknT969eXP69gU/jPun89Ob438b8l4cvju/OHv39vj1kJEE
SpgyaVnAVoQtgecy3t26YSgBMggMtTktsHp+cq72H8p2ONjffwLbgb883v/x
IXwBk1FMaVpP/gqrukERCMYiNoKWbBKvgddyFBIgs5ZodaGxaZaTF2EymKCP
h5ZIEBHDZbMctTF8PXBpPeOpviSk2p2q6YO5wu+jxzvi3GT0TJd7WCbKVcTH
FL+Acd4mSNC723GHocB/L59pNMCOxQIgy5bzecN7/hoeZrsQdis5bFKtDvb2
oB2CSNwIxnBQjnD0CVW77RCUBYs+WPBtnQT4pMZmaoAk0CRKlrMXQiYDFKO4
Fs2Ux3Mt7nbskTwn4gI2XkihGBMM4SAgZsQrqXVl9hDqOotpcWfQQJbO0HCF
5lHu7QTCeKrJm6YOxoc42nN2XnKPOGjcfLNfMGQ368i/7gITsibmg2XMFi2D
LFK9Mfqg0MMPfVP0j1twBHL9Hd/Ri+98AuyZxwlL99mfoZ3o7MU/jWmwKNr+
zJ3+0wy7JV8Bcx53OzVqOlUvM51L5yAmW1TcyBMpupCN6np0BNSCxz4U2ScC
RDV6MvEhoGBZoHkAzKzV/pMf96K9ffjvYm9vQv/9u9r5cHGyO2KgTQgALMY1
Kk58kLYwI07GZnqhKxKKx4inUfdgdNJsOtLIuBNC7csK46qjxkBTf56oe7HX
UJRmMejcFQfKnlGkNuiJ+CwIIL3My5vh18E//vGPgVLveJNPeZNv/+HymUAN
3P5DFP790Lm9e93eB89+Uc9508oW/tJ59ouitUZumRi3O/1OzwpBaaernmf/
TDvD8Qs3w88aUwR/7ntWhVyIe6s2/e6IobJr7+0+2/f3xafVD3fT6ocOre7s
oNOXd38oJ/vux0V9wGuqfm11tQkb2LFyZyLBlN1vdHh99wCve4jxrb8uMW6h
AbH6CSvC3j9eQLU/Vi+ymvSMYSsUp8xsToX1PnsAz2rGLx4kJYVw+3zl2cOx
QkWWBwCSN7Zl0q3u5dmHY96zm1s0AqPqUBuGTPc7/34geUDgzHWCosN+i84K
zBmQ8BohJIMpwLbwtRBj+wAchDeHAITu7vEWoHZcgigPwpMFhpqd30Qs3wCq
PPVtafIFVTqyxvRWjLNrGt/ukSApTpgCTKB7ggoGg2PhhwyxPsdLyGnVizVg
wBxx3EYaFL8n/IPeHUmwkP4GgxkOM2lmqKO2nyX0DGiV2yC6IFr2MA6SBuxO
MEgqE0aKMwe/5mxtrH3AwCM5aYECKzsOZ/cDkpZFVQnfwyRhjOAlI1gEZDeQ
0AZna9pnGjJoktngkpK8n32KZiOcHhK4QscWqDBdJXGtR+LKLTAkwSh7Fke/
zejnWTQT65DmBlAr+wSTOglGS84vdFCk4llI8hL9O765b0Lozi0pAJxtH0PT
GjMeDCj8U+3iBihDGJiBESRO/5BmaD56JJPNMkbu8kyALQeu+PvR/PbJSASE
TYBuo6whvsXteBJAuc/30qKOAnj3lV0KrBreO4+eHYZQQIwuzc5EuZ9FwMO9
w0MAosQDYNn8VhbamtY2Im6j5meXOHSeG9hYwBHXhAoNRhXZiFxQgvCRnsj6
pQGP0A9Ms23Iy8EGKVOnbtcYOJZVFcoh0zNfv+emX1KKFUwQBrtt1FS66yYA
wYyg0jKp4hwtMQ+7MNTcHMBOdW7RuxgJ6F8NW7UMDuyVYwigxADdDa412jkY
pLwwsJXHGUJZNCyA4Wt0TvWP7IyhqcgbsRSEKDtC/11kEg/hs4Iwi+PBemBf
B94b7x42iMpLX+agU7qdyxdYvwXKIEwI0uPFeCSPjvWnGA3bMUju2S6GuYzd
hFH8BdxRUN5RbuSmiQpD03Ab+XK599qSELqpshTENIUS1Aq3hyecrMy7p065
c8bbuE1kNJTtaLC23ISz45SHkIqMsTE1MaqqwdakxoAQ9vaUOnuriJJqB9T3
8PrZxyFRnHMs9/Y/otMCr7CgeLbzccia4ONwV66ksEsTdFTRVcpTi0yUwd2V
YHTrGXQp37NCthGpORAEdH3/xz35k9uAjTD7oimfSdOTBw/4t9qfzQMc9Mfh
cLDLQAKJaNkc1dc12G3Gr7OLSuzcJKdJZEHhtIrF2G6BWUiI4YzFxRx5ekQh
dRPtHHGMHYB7rVEijfyo0XdKB0IkIh1mTGsYsXER0Yi3ttDrjCOIvu7amdI0
6l1vtOS5Xa2bDUYtXACR2bcbEwP1gSIFZ4VCb7Hkra/cKgOlspz5Hj1+M3fl
u0c818v4OoNhxLnfsB08+YRnHV4aziZbhAWdih5QpP8a7NBUoxzIikisEDAv
6oYRgcMiTmEa9GEoj30Kw6Eq7+sQXXrzvEyufFCFsv0yzvJtZPTUKghul24j
ZMjeAP4V5gw6CzOEAN2SW8ALpVv6dGU0K1i8f0ab507qi8gdq7ftag7dI+uI
u8GfJuAqao+5UsTeDkCCuM2bidrbHTtS6E+JhvYPH4EoAeBKz0UcZUDFzah1
1rvXv3e4aidULdD935YaA+2at2J3idYtOqmpj9TzeNWy06wekEhgTPtDglw0
ZdsV7SF8wv7Crm367bLlXI9u9y7FQNdLUt9k5KKzkdKWOtH3Bncm8CTsqU5X
mOe4juual9gKwjvpNhVBhgl5czAAMWca98NUfXj/2lkAwonCmI6tSGLsBKwJ
JD/HbcXWILTSx4QB01oHYd+d9++/86KmIA315P59L6In8K7Wjc0UvLh4jewa
4jLSuajEhIsZSqAH8L1c/3zP99QNBsQ4mLgBK87q14HwVCc5/AtyDzgi1xhV
xzs9l6mZiXCewU1ZSnwCopXDIt4TtH9g0fu1gggvRA1OmAh3mdHICAPPZi8w
vMttiRCGvce8w8VkmR1H/w7GDRkt8M9e9GTGNs3sl5kTXrjVrZFD6gDmhIku
sMB0F0aaAS1GNWZXo7C6C8ggkW7FMW4JQxADDx0/P3GTC+HMk204A5Y44Aad
Hhwd7T+xUAYefTZ5fjw9ffTw/fHffj79t4lcgJUA3JtGsPOWhHSW8cHRo49D
RR8PHz+0HyP6PcQ20P/t+ANG0kUgnqPDhEkc+iAmBYY3gx/OjKv98d7hgedq
Pxrv7yI7450PHz7+xn0HCGOB13gBbZ9uh1b67yaGho7+rfF2Bc3zDUiWKaUZ
Jtrwh8nCr+KbILNz02hPAhvudgGincMD76ZTnvVIHf0Y/AozJI3ir9R3o441
OtLIVFrSoRRHAQ81ndubWN1OgLLMB0PcIMII9vPR/oH7PQruivz7DiO6Exb4
xdFInbw/OTzgfYYnaPY9bAFWA8Zw2VO0tTI9qi+cC6ZhpkaIhOncLtpNzboQ
ICk97PWpZ+b1+ncIx7JBh+rj/wb4ePzo4bfQx/+GXvJRBuikJ04nyRrTgwKt
4c4FZSLTUybj1ESV5DspXSuxXZSZuYEWmV1LmNIDIKFMMloZoRhih7kGVqn0
CkCu+NKmxuyNpsbsFE3ZdayZZARxyOEk/DlKAoQzo8mWYFfqCvMarVm7ipuE
HC8mABdfIfjF0CkmmJGeYFjhJ3jcQ+QfOT/qVwlYffPYRhCJvOvgBhLXdykx
dOMAsprZVsWR1/FCz7aOe1CeHMjWA1h5m6XUsTvQi4QB945ul6Wxm/OkpNNM
oDNPY+Oo7WzdxCa1zCS5KUqzBcDGGbRdUUjaHoi5NUL7cNecPoF7KTOsCVNi
yr60malkbwT0itXsRMbxQsbBdDFrcnS4RwbO1hEUatrhtjPxYRt0jCIQ9n2G
8MCttLiBtmLRCGe2VsrB2sZMSTaVeIU6cXHaWsg9JOpCmjCDg/JZ+N12evBV
dqCX45rTfNcVblWY9EVp3AB3iYIRhnSFUWF3GrqvDG3CA0mxyVlwa+fn7dqn
7mZzWA30kt/CQw8BUox4SU0aAec7ptklfW2E1Ft+ZFZAYvsEmqatDYCIr0HD
kIPX8aQZD3nxUtQmFz32OYjDdkUxHaD/VVHegKJaaCOn6UHShxqTQ7IEJeWm
tGePUj65iGcVrSK1nGoMQumSTLRKoysDzyaJzRkcabEC0HgNhW/JdWwUA5HP
m7tnvKIM6R6E/JZuRxLBPn1nFPm22YE2BxmwWYWZw7eQecPwBChBSla2TqE/
NXyZgx3ZZTg4RAU2I1eErg0O0XExRg91idu7JpgbNFC3CfZXd+0HbPGyRNRH
OY9iMmR53mJ6K+XNSk5hWxHneVsCSehvsDGtwYvTlzO0W3haNzgZcyYhDeKA
nHtrkzLNwYYZWyO2DY8PYvbXcEYcWj6kzozpY/f5tv1z4sY/DcdPJpE8KEYR
NbpiPTgI5e9EAeRENGrsnBdnP51OLyaDzg6f4ESBEM92hqEiGe4+JTZ9NmRK
DZ+qj4OtSDMIwmdW2o367oDmgUbfbh5u+I7m3dDtoGVu07OfDiad3qVfd8f+
hA2zEz+hcBlfo/EFkj61m9eyxg06Oa85Cs47c8b9zsQll8M2224OnbtGDgBE
olRDcpf2Sbu6icnF4vJOeVN2tqLaMV3v8q6kFi8RcMzj5Iq0Ds94hjuygA2E
tsL24Lw50s0UQ5XJkFywzXTFDp9poq3M7l/ejE5moicbBkTjEfdudYt44N2c
G++1Y3QRh8bTUJTspIHxF5RH7BQAzBhxZ8Mx5NUamp9nOWYuESUJItrERHMs
RrIVSwvbolwXC7idM+MZhlC9Anei/3lGApaH3GdqUSY9Bfe3QZCRfJiEj0Yd
Ztubhe6YsA5OiHz3IMlWwhkdBpQTXR78qY1hiKl3t9q6uLLdkYKRKwID7VX8
CLar+QiGq3w89O449G4h4/a7bFs2XHosW5MBYI9S3TO5NWfBMoJtwLdE4fJ+
lbQFvVb7ExMIM3k3mAXMlgyeweafJJjoK8a8TAzkk2A4qsWecCOMlXy6uHNt
arXRd3+q6dieevkvL96qdn0T4ykc1HMci6T4ITp5R+L0jT1n4WXZFnRmDVhf
goeVpthEj2kFVrFew+rtmgb4aZfHwU7JTusj5Z+8sGEovn0rB0PdxLWNjH8z
EP47Ql7cl8kiF5kEptDG8H44hKU8rz+ts4rjUtuAhtIMPgAcMqO1fig5B9V9
SCQ7bcVrf/8R6omrOmaBQqUUjMME0ztuCWaYw2KzMGg18+I3sS3IwMiyk77q
ejIeEDN6Chaxuced2dGO/OxhvAMjMRH7HjCt26RXd6N8fJK3LLqci6nfnM0k
yREWxSH/6IaWSs5C+qfC2A2wTeW8LK9gE/jpD9BL6Mbns1Q8kEsMkcPKmVuZ
VXo5NuwM/UbLkk5XlxKgC45x2AmjoYuz9A6M2ZwnEB4HE041snl3MZcHgFHY
sCwmy/w3AqsCzoPAp6QedHhntxNqlR1qJ4UK1/kV/KhF6GIY+TCepnk4dile
HD5OTY4Qx15NulcnOnFb7FTSmKxHI8iqsk3fnmZkyH/ou8VfsQ/hr1bKbIts
u4sx+nGnOesnD/pBnHoDWiRp5NCZd3DAS9mW1EJYAjmsLh6OgBlENtwa6vFX
b7w9mzivy2BKtztWnLK3AotyD/whk9fFI+7DiURWKCjIypSBhfnhKxeSIJO+
i0H7vCvBRCvONq278AWdxQQW8agX7iNx3AjMo+o7s7/Mol9boB3JRlKdZk8w
Vv1LkI/zDXEuCUBO0FJjQC6N7eMGoCMEQDBas8stCci5nPiUhPXEz85U6PGE
y6Jv+yI47gsDJ3jdF5y7/DXFEwUWECFKgnWs8PRgw07V2p6j604KVrbfysd+
EST3QZMAlTAiwQpK+GGEEfE1H1llIrIgExp5kCjQzyOHhfqmSG3gHBthK+BE
JhWbOgF2gWVqOd59Zk4m1abwiIukmzWQI3VGHadeltZ3QJa+peSdbKFTGMkV
eEVed9bQeMDSOiq3Iv4j39mIMyt4hxAJXX0T3zRyqYLsxtkWEdxxvB1qXkss
4G6IQPESDyPw6IvboY07Q+wJkyNfUvsHPG4XIVu7lmvGYAiCDSiCOF2B5x3g
lONWYd6585p1zDOrA8WJd5sotUuxQZcc+esQPh/wyAo+gdtxjiOc4PN4vSno
npv9yG3DbYXkylaNB5Svz1zLILiTtG82cn4dpLWMBw9JTnXsSU8/yPTdIyMf
/HaIhlK+SyeJDur0KXkXUCBSthOF6IRRj+yJAYnv0pGnnmO4HRp6/t7ehePA
+ZZNLCaED3lYPtuaQeRIrGuqoDIKYVPXISmNgbgx7gWcHuGg53h2lWKPt7Th
YuYRrYKXpuOWYERAmhz9QZbNVg5YpxV0sYbt3DWPXnc4cG+77mB93jtzV58r
1+SI8mUSi2m6EfE1lhtyJZecqzUXp4spc8FQwnMYie0vZbucM9mDgmILdzGz
DEx7cufRBLaJEAzwiyOeZPfEPjxGkRoep7xZakJvZCJwfRjZOIJtA9qLu62z
qrXuyTo7f4dGb8nSGxOt+OiA2UsXVJTUm/GDv9dlMZMjddK+8RDjpduzY84o
wYyJIK5gfGDw2cuXlaTW4UQNsZTqCC/ZzDL41cuzpQQWmgj8/pmcqENQwlVE
xQqwBRkC+2Me7HN1y6/0ICMB9yBbA/iQh9eoe7iIaAcvgT4a91zmIqpOnQ+p
Nqu2fZl19YZZ5dieyQvutPvAcGv9wEC037K16Q1047LEPoY/nV6YH/kMb4TC
a4hlOPfM72jH0NDJLHLzF4siMrrJjc3KuShDWT80VUDxwj4mF4Ue8Y/WJf5R
fOIfh0/RAe6lL9lRmqZpRNic83NPzE0dhzve2RsScHMJTQF44j+opc9m4Hg9
I4qJ035kruDCRow6vesOBPYvOD6IkErW2f54Cx+MPAJGVlkQq5kQAV7+Cv//
T5qPg3puVVDbhQ8LVQzZ6AZzWguvM7FeHU9f/fX49YfTrTXgccKdYIzX2nA6
51YCOeOad6G7f5XVhDHsrsiKOAdTOMnMjhXZRCsz4JOyA0qiER82mq/O5qRC
NA6bd6LR/zx991bNCtCCM8zVCQc281KiXLYTlVEuFpHwNqcw4eJDTxGvmP1J
Nhb/IAvXFjamyL+HRKdmROZKetQ2bej3omTiIhgd8vADWvUP31CPmjCgKMjq
xnKJkvwaVJP0VTQpTqopEapN1rVYIFmZYcg5NQLmb2zyETqqu/lILvxEfZhq
KrGXqLuKP2WrdiU4PzWHpUD6U461ySoy55u6CbGorTgfqv9OSuuTm0eYiAR2
IB9Ouex3MErGWeybGlIMZO7w6LY6JNOIrArx7zI846oD/QnSAkaQRTF/GUMA
fj6WreH7+Z5XdMnWd/3qkn9LGyoI0igo4YK+6U5NJmMjUimhhGrjVu1anGFg
ofwkZYjgsULf0CPrOBNXsVe2BS96sJ0BBT9jzECq40rGxd/irLEJkaZZkyVV
osduHS84HkGVnnCAYgeTsfCcDii6OkC2elmZp3JW9eZblWprtcPguzcfxCBh
hqjddCxMrAOz4x1uAzN8B+xt8pmPwZWV57CHqhJYLvQs7uiibsn3C4b39kLs
jiSVzU7R9UfmUadAFBok78MHPPrSE0RIqahRB0g1SLBrqBKll2LnJ8JRVNVP
tPObplN+YqrCimJPJ7aCl0QrTDxquwipVzXAryVYVp7pfLaicuANnknlA6t3
5RQi501BNdxm60tFmJ74V+D04eNu3mEFPkXhTrvSUWYQKm5GYuHaJdkuuBos
jZ8l4u+QrPZrrhEbvjGRYJJgt0zMhWFIIhrLMRSWMCliQ07KN8WHaJEv85bK
HPUMnZbHcAD6EKy9HgayGooR4KkT4PFqhSUhY84NMgHzcZCH6TyCTcckpBof
mE9QVlgLbwVTwUGnvIGQTF7JZQxyIJNYVXUunIUMOeXj5Rgg7Tl0Phic95XR
8/eKqadXhKfgOQnI+equQGtS2pYcpg+ON8OCSBDjFegjKphmpf2bEut0gnx4
NX2D+dkXnBfsqv2hZw4kbczFpkwVnT/VrpjJCuB8PpEkHTn1xzlitecwDk/+
80F/40IR47nmavKm4hyzAsHssTrmco01uQo86qPd1qGNordBuHPUco7ZL8aF
buq55Wm/gAjQylTF86W7hAv8JDtOOyG8Qp4BW8LOOfS+vxqgq8THaXW2eiTX
UDhOEjr1ukBni6sB5h1r760D+R21qG0JvdsqQ/Jxhq36kK6gk3rRW1HQ6UGH
Z6TKi1/xgUpx2UrmoITrLBVvPAW3CDiRi4Y5a0x+CIxeAb9yEd1V6W0gUW0c
hGrp9GhMWtLUSHYlQClrxeL5BrbLApPLzCsSYgqCSqm43/AzTiyiZBa6Qu9T
SDP2jOdympMIzYzMuYu46voTvQFCkKbPbljXsMriPKwVh9WnOTQpXAqY347D
5x486DxnmOEgF9U0g2XXBC4r2WkSgBv1JATNe4poaFNnXISeV54SyLDkkmGF
t96obDHjk0vEWflygrk5qSX353tGbFCBXXeF8eUFVzN8gxJFQuu2Erwt8t4p
qodwKKzcaSuG3Oi5kQnoLTNx8O3a+KC0aYN4TQvXGvwZc3G+dCsqEjh+61vL
47O4YHcm4XbrZaeou1f+KO4p/GdrEfaWXUVW79Rd/c5iKl7isydTneT8RNlc
vvw2DCtZcNhqWLXQZXPLAlJrqM261fr9Nw90RPrvfo1BVyf4Yj2gVVkF0zEl
OqWqKx01Nyc3pRkyM3IKwIVFMEnHrZmvgfs52T/0wdeAjVYIEVzpFwmUAdNe
UB3uY6p5DLTi3yXbtSpLjp7SPSjgqSaoCgxcEQ7boTeplWdsU7/mRbMkduVA
CKj7m5L1N3ORO8ojZUOnTTs3LZfV/ft4Zs0WXNwNzm9LAkZtxxM4m7loLrVp
Eg7o1AoZuFXn/QU0aybEMYgnA/lie78Eg8uikECQO01B1905P/zyonwFRtb/
x0N7Dx9j4UYkZ3khv/34+OgxxfFtdBPpJmV8tkjrlBmVVsGEk29GOmHFXbYj
mCvk4ESWASiKGd5yEo9f4YQnGTh7wjpeSLczs6JBCE9g1t/B0aMRfTh8/JA/
HO0f0IdDe+2QL0qiIOUQ9rSNziNqO+AskVOGacrKU+fBWQQQZJ3zjgIhRfXV
FNPg0gEsWmvfn3NeZnVZUAIov/iILe2WYA37aPLsUpMdxJmVYi3xEdquy8XU
YEZWyFZrjMygjUR+orXpyowD4TKvcuy9EMQrSUPqgIvXZwRuAFYurAuHiw8S
DDOHB4Vb6naObyVr+CF5j4eWMu/cuWcoJBva+y6r4O5ZIjxA8sbOwI8E5Kwx
D7riIvX+hnDrKzqfCtvCvuCt4LnszHl1AuaY+ewHZ+RgTOCyw2AMDvQDBjXw
XVuNXz6a2AmQQpqbpu0rXWICteTrY3J7GRBMGTnKx69CcGXRcVHPWZlQQDx8
DU8Yvv7G+6/6YLNO/crnZz3vmul9HZFsAsmkRp3pFWQNItc4Cj9/CFPbKiWl
NPzzk/RmhfKKimj54+A0SVdLuwO7jcFE1MJDoQZ4usRt2np1fzBzCYhsREmA
WGma1KE7s1rO64QSx4QE4lqCe+gXifdfkivd+Gdk9ZbZGsf8Nz0///kMIDz9
678bokbDIhVHKDk/JPMN664Q1RYtEAcmpPldQMSU5uVhdpU5LLqKrzS9nKGu
sQf0csyNf89YYi5cWtoCuNLcmGuLApjBlwD5L7BwqwDbrG6ceWtfAyGV2DCm
b99lQUf46TwPP+aZxZ4Ko0oGkt4FwIvTthndyOsj2GzRtYrDqdC7kybYCdKw
DgfEmpdJSrS1r0MJbGY7s2WZpyPvOJvbQHYBZPycOi2UQmmP6QvbLWe1fc+K
ewfPYPAG7b15VcZpTmeh8NUH4RtwDHoK3vTiZ8V2X2SC6/bH31Ny26tu/nsv
LVH2nWrod0Ujg8wzchnh2yCJXoXYna4muQmxC1z1vN4CEL06dJhuixoEi7GN
XAppZlJgbaE6eivX8dvjbaMMDJW41yCj0bPQfQ/TBPgC6oraEDeRrputA52V
3MlvFpXH8X2B9TBw2tv76CWgf/SlpkN5CYc4A4fm7DXf/95UN7Kluw8eEdo7
KzLU0GYT1ZIqQJQg10NkhyepAuYJyTmwQZ3uJC2lhl8HX7wLWJqV6ouTzbB1
HMv8ffHqCZ4AAWD29u4v0LYUlObv0IGr8qn8L7f+feuu7jXqwCQrU//HfdVU
OsnKcFdYtM1zFn1heGhLsX/pFmx0GUtYF1LKOhJw5fR0m2tHXChr5Hlfucqf
9Ub/Ya51TQScS/ZdvNId5v2f50HrUP99fNgZdsiL4UXhtbs58tt/3+bJ38OZ
v49vmTe7x0G+mHNN7g0bJOt76pY9leMtUtkMjeU5gIo+Hv3SCRDQtLsd8bEI
U4HsaVCXDNZnZSuQeaTb2gxbR+TYIqCBc8IgF/yoBfba15R1z6HZQ9eIRl0q
GTOT9vI2aV8Mv6/ToWP7IAle9W4ufAUF9uAdLHbnCwVCcGsh42OHkTcV4ftj
eUWZNW6+b8zhFvhZbyzxp+wmCTdBh50DbrYsGPJihzNFaMopP5SGvOe+GItd
umcKPjo4RJeEeYbPAIbP0G/mGXlPNDziPYMddZ+Rjm59Bs8Udp9BH0HfM2gr
1NpnL/YWuXdd4cvRaklPDd1k67ImXxj6hmM5iogvTHZvc4be6J3QYh5xdB4L
BPhJqxmFIBoMxDY3WjPvki/EnoU8hM23ynJ6l6YNd6NszYpWp/1IVjYB++kp
CfBGx1cF2tImdsxbRY6lUA+YOW7W0r53OZYYgv8a01VcLagHwJzitzGhODd8
bpJOLnL2i5wz4VMyVPqpljra3iw3audnnSTx1S6hS3zBnymf7OpDENbkl+NJ
ojXlwiNupb5HGNuUdz0aDyvcPQeteEXhxEKb3qyB4DlaCYgiWcZYaBeMx8US
X5bR0hvOO29UIqNEDhHT8WLiBpmR/1Yz+zKMMOPaz8X3z+T2vURsUcZ0rkLe
o3T3uVlPKvKrNlOzTN6rmABim1eXmEq6mHYKkvhtSXi250V0qtm4Anh8Gku5
UjvdGnM7eLfaf7QrsmF/7/CIjxh1j+my6BoMjguyFatMwrPhqd0AGdjYLBLN
ZJCRm/cdGFBeuf2J+g+T8gmGzbKd2wqwpokHJZpciE3YyvnPnd/5wC70aivE
ZnwejPKBXNf+4+OyWrg+uld2+c3DeDSeXsSR2JokHP7+fK/701fUNgUVytLp
syGlFg7lxDLbYeqmbPNU5dmVGHRxcaWe6+LvsBmA+snyBizQ39iDSmrvOgMG
kGLlstMwq0HrlI7sU3XKCuZuQ6m1DW0a9T9SpxWVjAKxU+WxbRzHQ7FFr5cs
rOQDTYEpuyJ7HeEOyTUurYsOIp1QZeNob182wFj9DEYspYNJJ0mMZ+gQqsf8
9kl89aE3esK9/PI343bwArTai8/+F4nj9DqoggAA

-->

</rfc>

