<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-plants-merkle-tree-certs-08" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title>Merkle Tree Certificates</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-plants-merkle-tree-certs-08"/>
    <author initials="D." surname="Benjamin" fullname="David Benjamin">
      <organization>Google LLC</organization>
      <address>
        <email>davidben@google.com</email>
      </address>
    </author>
    <author initials="D." surname="O'Brien" fullname="Devon O'Brien">
      <organization>Apple Inc.</organization>
      <address>
        <email>asymmetric@apple.com</email>
      </address>
    </author>
    <author initials="B. E." surname="Westerbaan" fullname="Bas Westerbaan">
      <organization>Cloudflare</organization>
      <address>
        <email>bas@cloudflare.com</email>
      </address>
    </author>
    <author initials="L." surname="Valenta" fullname="Luke Valenta">
      <organization>Cloudflare</organization>
      <address>
        <email>lvalenta@cloudflare.com</email>
      </address>
    </author>
    <author initials="F." surname="Valsorda" fullname="Filippo Valsorda">
      <organization>Geomys</organization>
      <address>
        <email>ietf@filippo.io</email>
      </address>
    </author>
    <date year="2026" month="November" day="02"/>
    <area>Security</area>
    <workgroup>PKI, Logs, And Tree Signatures</workgroup>
    <abstract>
      <?line 215?>

<t>This document describes Merkle Tree certificates, a new form of X.509 certificates which integrate public logging of the certificate, in the style of Certificate Transparency. The integrated design reduces logging overhead in the face of both shorter-lived certificates and large post-quantum signature algorithms, while still achieving comparable security properties to existing X.509 constructions and Certificate Transparency. Merkle Tree certificates additionally admit an optional size optimization that avoids signatures altogether, at the cost of only applying to up-to-date relying parties and older certificates.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-plants-wg.github.io/merkle-tree-certs/draft-ietf-plants-merkle-tree-certs.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-plants-merkle-tree-certs/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        PKI, Logs, And Tree Signatures Working Group mailing list (<eref target="mailto:plants@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/plants"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/plants/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-plants-wg/merkle-tree-certs"/>.</t>
    </note>
  </front>
  <middle>
    <?line 219?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>In Public Key Infrastructures (PKIs) that use Certificate Transparency (CT) <xref target="RFC6962"/> for a public logging requirement, an authenticating party must present Signed Certificate Timestamps (SCTs) alongside certificates. CT policies often require two or more SCTs per certificate <xref target="APPLE-CT"/> <xref target="CHROME-CT"/>, each of which carries a signature. These signatures are in addition to those in the certificate chain itself.</t>
      <t>Current signature schemes can use as few as 32 bytes per key and 64 bytes per signature <xref target="RFC8032"/>, but post-quantum replacements are much larger. For example, ML-DSA-44 <xref target="FIPS204"/> uses 1,312 bytes per public key and 2,420 bytes per signature. ML-DSA-65 uses 1,952 bytes per public key and 3,309 bytes per signature. Even with a directly-trusted intermediate (<xref section="9.5" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>), two SCTs and a leaf certificate signature add 7,260 bytes of authentication overhead with ML-DSA-44 and 9,927 bytes with ML-DSA-65.</t>
      <t>This increased overhead additionally impacts CT logs themselves. Most of a log's costs scale with the total storage size of the log. Each log entry contains both a public key, and a signature from the CA. With larger public keys and signatures, the size of each log entry will grow.</t>
      <t>Additionally, as PKIs transition to shorter-lived certificates <xref target="CABF-153"/> <xref target="CABF-SC081"/>, the rate at which entries are added to the log will increase.</t>
      <t>This document introduces Merkle Tree Certificates (MTCs), a new form of X.509 certificate that integrates logging with certificate issuance. Each CA maintains logs of everything it issues, signing views of its logs to assert it has issued the contents. The CA signature is combined with cosignatures from other parties who verify correct operation and optionally mirror the logs. These signatures, together with an inclusion proof for an individual entry, constitute a certificate.</t>
      <t>This achieves the following:</t>
      <ul spacing="normal">
        <li>
          <t>Log entries do not scale with public key and signature sizes. Entries replace public keys with hashes and do not contain signatures, while preserving non-repudiability (<xref target="non-repudiation"/>).</t>
        </li>
        <li>
          <t>Long-expired entries can be revoked from relying parties in bulk (see <xref target="revoked-ranges"/>). This allows logging and monitoring infrastructure to scale by retention policies, not the lifetime of the log, even as certificate lifetimes decrease.</t>
        </li>
        <li>
          <t>After a processing delay, authenticating parties can obtain a second "landmark-relative" certificate for the same log entry. This second certificate is an optional size optimization that avoids the need for any signatures, assuming an up-to-date client that has some predistributed log information.</t>
        </li>
      </ul>
      <t><xref target="overview"/> gives an overview of the system. <xref target="subtrees"/> describes a Merkle Tree primitive used by this system. <xref target="issuance-logs"/> describes the log structure. Finally, <xref target="certificates"/> and <xref target="relying-parties"/> describe how to construct and consume a Merkle Tree certificate.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>This document additionally uses the TLS presentation language defined in <xref section="3" sectionFormat="of" target="RFC9846"/>, as well as the notation defined in <xref section="2.1.1" sectionFormat="of" target="RFC9162"/>. It extends the numeric types defined in <xref section="3.3" sectionFormat="of" target="RFC9846"/> with a big-endian, 48-bit integer:</t>
      <sourcecode type="tls-presentation"><![CDATA[
uint8 uint48[6];
]]></sourcecode>
      <t><tt>U+</tt> followed by four hexadecimal characters denotes a Unicode codepoint, to be encoded in UTF-8 <xref target="RFC3629"/>. <tt>0x</tt> followed by two hexadecimal characters denotes a byte value in the 0-255 range.</t>
      <t>The <em>decimal representation</em> of a non-negative integer is its base-ten representation, written with the ASCII digits <tt>0</tt> through <tt>9</tt> (U+0030 through U+0039). Zero is written as the single digit <tt>0</tt>, and no other value is written with a leading <tt>0</tt>.</t>
      <t><tt>[start, end)</tt>, where <tt>start &lt;= end</tt>, denotes the half-open interval containing integers <tt>x</tt> such that <tt>start &lt;= x &lt; end</tt>.</t>
      <t>Given a non-negative integer <tt>n</tt>,</t>
      <ul spacing="normal">
        <li>
          <t><tt>LSB(n)</tt> refers to the least-significant bit of <tt>n</tt>'s binary representation. Equivalently, it is the remainder when <tt>n</tt> is divided by 2.</t>
        </li>
        <li>
          <t><tt>BIT_WIDTH(n)</tt> refers to the smallest number of bits needed to represent <tt>n</tt>. <tt>BIT_WIDTH(0)</tt> is zero.</t>
        </li>
        <li>
          <t><tt>POPCOUNT(n)</tt> refers to the number of set bits in <tt>n</tt>'s binary representation.</t>
        </li>
        <li>
          <t><tt>BIT_CEIL(n)</tt> refers to the smallest power of 2 that is greater or equal to <tt>n</tt>.</t>
        </li>
      </ul>
      <t>To <em>left-shift</em> a non-negative integer <tt>n</tt> is to shift each bit in its binary representation to one upper position. Equivalently, it is <tt>n</tt> times 2. Given non-negative integers <tt>a</tt> and <tt>b</tt>, <tt>a &lt;&lt; b</tt> refers to <tt>a</tt> left-shifted <tt>b</tt> times.</t>
      <t>To <em>right-shift</em> a non-negative integer <tt>n</tt> is to shift each bit in its binary representation to one lower position, discarding the least-significant bit. Equivalently, it is the floor of <tt>n</tt> divided by 2. Given non-negative integers <tt>a</tt> and <tt>b</tt>, <tt>a &gt;&gt; b</tt> refers to <tt>a</tt> right-shifted <tt>b</tt> times.</t>
      <t>Given two non-negative integers <tt>a</tt> and <tt>b</tt>, <tt>a &amp; b</tt> refers to the non-negative integer such that each bit position is set if the corresponding bit is set in both <tt>a</tt> and <tt>b</tt>, and unset otherwise. This is commonly referred to as the bitwise AND operator.</t>
      <section anchor="terminology-and-roles">
        <name>Terminology and Roles</name>
        <t>This document discusses the following roles:</t>
        <dl>
          <dt>Authenticating party:</dt>
          <dd>
            <t>The party that authenticates itself in the protocol. In TLS, this is the side sending the Certificate and CertificateVerify message.</t>
          </dd>
          <dt>Certification authority (CA):</dt>
          <dd>
            <t>The service that issues certificates to the authenticating party, after performing some validation process on the certificate contents.</t>
          </dd>
          <dt>Relying party:</dt>
          <dd>
            <t>The party to whom the authenticating party presents its identity. In TLS, this is the side receiving the Certificate and CertificateVerify message.</t>
          </dd>
          <dt>Monitor:</dt>
          <dd>
            <t>Parties who watch logs for certificates of interest, analogous to the role in <xref section="8.2" sectionFormat="of" target="RFC9162"/>.</t>
          </dd>
          <dt>Issuance log:</dt>
          <dd>
            <t>A log, maintained by the CA, containing certification statements issued by that CA. A CA operates some number of issuance logs, which together contain all statements issued by that CA.</t>
          </dd>
          <dt>Cosigner:</dt>
          <dd>
            <t>A service that signs views of an issuance log, to assert correct operation and other properties about the entries.</t>
          </dd>
        </dl>
        <t>Additionally, there are several terms used throughout this document to describe this proposal. This section provides an overview. They will be further defined and discussed in detail throughout the document.</t>
        <dl>
          <dt>Checkpoint:</dt>
          <dd>
            <t>A description of the complete state of the log at some time.</t>
          </dd>
          <dt>Entry:</dt>
          <dd>
            <t>An individual element of the log, describing information which the CA has validated and certified.</t>
          </dd>
          <dt>Subtree:</dt>
          <dd>
            <t>A smaller Merkle Tree over a portion of the log, defined by an interior node of some snapshot of the log. Subtrees can be efficiently shown to be consistent with the whole log.</t>
          </dd>
          <dt>Inclusion proof:</dt>
          <dd>
            <t>A sequence of hashes that efficiently proves some entry is contained in some checkpoint or subtree.</t>
          </dd>
          <dt>Consistency proof:</dt>
          <dd>
            <t>A sequence of hashes that efficiently proves a checkpoint or subtree is contained within another checkpoint.</t>
          </dd>
          <dt>Cosignature:</dt>
          <dd>
            <t>A signature from either the CA or other cosigner, over some checkpoint or subtree.</t>
          </dd>
          <dt>Landmark:</dt>
          <dd>
            <t>One of a sequence of tree sizes, infrequently chosen and used to calculate landmark subtrees for predistribution to relying parties.</t>
          </dd>
          <dt>Landmark subtree:</dt>
          <dd>
            <t>One of the two (possibly empty) subtrees determined by an interval between two landmarks. Predistributed and used as the basis for landmark-relative certificates.</t>
          </dd>
          <dt>Standalone certificate:</dt>
          <dd>
            <t>A certificate containing an inclusion proof to some subtree, and several cosignatures over that subtree.</t>
          </dd>
          <dt>Landmark-relative certificate:</dt>
          <dd>
            <t>An optimized certificate containing an inclusion proof to a landmark subtree. The landmark subtree is assumed to be known to the relying party, rather than authenticated by cosignatures.</t>
          </dd>
          <dt>Directly-signed certificate:</dt>
          <dd>
            <t>A certificate issued using the existing, non-MTC construction, where the TBSCertificate is passed directly to the private key's signing operation.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>In Certificate Transparency, a CA first certifies information by signing it, then submits the resulting certificate (or precertificate) to logs for logging. Merkle Tree Certificates invert this process: the CA certifies information by logging it, then submits the log to cosigners to verify log operation. A certificate is assembled from the result and proves the information is in the CA's log.</t>
      <figure anchor="fig-issuance-overview">
        <name>A diagram of the MTC issuance architecture, detailed below</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="528" width="544" viewBox="0 0 544 528" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,272" fill="none" stroke="black"/>
              <path d="M 8,352 L 8,480" fill="none" stroke="black"/>
              <path d="M 24,480 L 24,512" fill="none" stroke="black"/>
              <path d="M 72,80 L 72,112" fill="none" stroke="black"/>
              <path d="M 128,280 L 128,320" fill="none" stroke="black"/>
              <path d="M 256,32 L 256,272" fill="none" stroke="black"/>
              <path d="M 256,352 L 256,480" fill="none" stroke="black"/>
              <path d="M 272,384 L 272,512" fill="none" stroke="black"/>
              <path d="M 296,32 L 296,272" fill="none" stroke="black"/>
              <path d="M 296,352 L 296,464" fill="none" stroke="black"/>
              <path d="M 536,32 L 536,272" fill="none" stroke="black"/>
              <path d="M 536,352 L 536,464" fill="none" stroke="black"/>
              <path d="M 8,32 L 24,32" fill="none" stroke="black"/>
              <path d="M 232,32 L 256,32" fill="none" stroke="black"/>
              <path d="M 296,32 L 312,32" fill="none" stroke="black"/>
              <path d="M 504,32 L 536,32" fill="none" stroke="black"/>
              <path d="M 224,64 L 312,64" fill="none" stroke="black"/>
              <path d="M 72,160 L 96,160" fill="none" stroke="black"/>
              <path d="M 224,176 L 312,176" fill="none" stroke="black"/>
              <path d="M 40,224 L 104,224" fill="none" stroke="black"/>
              <path d="M 8,272 L 256,272" fill="none" stroke="black"/>
              <path d="M 296,272 L 536,272" fill="none" stroke="black"/>
              <path d="M 8,352 L 24,352" fill="none" stroke="black"/>
              <path d="M 240,352 L 256,352" fill="none" stroke="black"/>
              <path d="M 296,352 L 312,352" fill="none" stroke="black"/>
              <path d="M 400,352 L 536,352" fill="none" stroke="black"/>
              <path d="M 72,384 L 96,384" fill="none" stroke="black"/>
              <path d="M 256,384 L 272,384" fill="none" stroke="black"/>
              <path d="M 240,432 L 312,432" fill="none" stroke="black"/>
              <path d="M 40,448 L 104,448" fill="none" stroke="black"/>
              <path d="M 296,464 L 536,464" fill="none" stroke="black"/>
              <path d="M 8,480 L 256,480" fill="none" stroke="black"/>
              <path d="M 24,512 L 272,512" fill="none" stroke="black"/>
              <path d="M 72,384 L 104,448" fill="none" stroke="black"/>
              <path d="M 72,160 L 104,224" fill="none" stroke="black"/>
              <path d="M 156,280 L 176,320" fill="none" stroke="black"/>
              <path d="M 40,224 L 72,160" fill="none" stroke="black"/>
              <path d="M 80,320 L 100,280" fill="none" stroke="black"/>
              <path d="M 40,448 L 72,384" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="320,176 308,170.4 308,181.6" fill="black" transform="rotate(0,312,176)"/>
              <polygon class="arrowhead" points="248,432 236,426.4 236,437.6" fill="black" transform="rotate(180,240,432)"/>
              <polygon class="arrowhead" points="232,64 220,58.4 220,69.6" fill="black" transform="rotate(180,224,64)"/>
              <polygon class="arrowhead" points="184,320 172,314.4 172,325.6" fill="black" transform="rotate(63.43494882292201,176,320)"/>
              <polygon class="arrowhead" points="136,320 124,314.4 124,325.6" fill="black" transform="rotate(90,128,320)"/>
              <polygon class="arrowhead" points="88,320 76,314.4 76,325.6" fill="black" transform="rotate(116.56505117707799,80,320)"/>
              <polygon class="arrowhead" points="80,112 68,106.4 68,117.6" fill="black" transform="rotate(90,72,112)"/>
              <circle cx="48" cy="240" r="6" class="closeddot" fill="black"/>
              <circle cx="48" cy="464" r="6" class="closeddot" fill="black"/>
              <circle cx="64" cy="240" r="6" class="closeddot" fill="black"/>
              <circle cx="64" cy="464" r="6" class="closeddot" fill="black"/>
              <circle cx="80" cy="240" r="6" class="closeddot" fill="black"/>
              <circle cx="80" cy="464" r="6" class="closeddot" fill="black"/>
              <circle cx="96" cy="240" r="6" class="closeddot" fill="black"/>
              <circle cx="96" cy="464" r="6" class="closeddot" fill="black"/>
              <circle cx="384" cy="208" r="6" class="closeddot" fill="black"/>
              <g class="text">
                <text x="88" y="36">Certification</text>
                <text x="184" y="36">Authority</text>
                <text x="388" y="36">Authenticating</text>
                <text x="472" y="36">Party</text>
                <text x="36" y="68">2.</text>
                <text x="84" y="68">Validate</text>
                <text x="152" y="68">request</text>
                <text x="340" y="68">1.</text>
                <text x="384" y="68">Request</text>
                <text x="464" y="68">certificate</text>
                <text x="388" y="84">issuance</text>
                <text x="36" y="148">3.</text>
                <text x="64" y="148">Add</text>
                <text x="92" y="148">to</text>
                <text x="140" y="148">issuance</text>
                <text x="192" y="148">log</text>
                <text x="104" y="164">[</text>
                <text x="124" y="164">CA</text>
                <text x="164" y="164">cosign</text>
                <text x="200" y="164">]</text>
                <text x="340" y="180">5.</text>
                <text x="388" y="180">Download</text>
                <text x="476" y="180">certificates</text>
                <text x="432" y="212">tbscert</text>
                <text x="352" y="228">=</text>
                <text x="368" y="228">=</text>
                <text x="384" y="228">=</text>
                <text x="440" y="228">inclusion</text>
                <text x="504" y="228">proof</text>
                <text x="144" y="244">tbscert</text>
                <text x="208" y="244">entries</text>
                <text x="344" y="244">[</text>
                <text x="364" y="244">CA</text>
                <text x="384" y="244">]</text>
                <text x="452" y="244">cosignatures</text>
                <text x="312" y="260">[</text>
                <text x="348" y="260">mirror</text>
                <text x="384" y="260">]</text>
                <text x="212" y="308">4.</text>
                <text x="252" y="308">Submit</text>
                <text x="296" y="308">log</text>
                <text x="324" y="308">to</text>
                <text x="376" y="308">cosigners</text>
                <text x="240" y="324">for</text>
                <text x="308" y="324">cosignatures</text>
                <text x="68" y="356">Mirrors,</text>
                <text x="128" y="356">other</text>
                <text x="192" y="356">cosigners</text>
                <text x="356" y="356">Monitors</text>
                <text x="104" y="388">[</text>
                <text x="124" y="388">CA</text>
                <text x="164" y="388">cosign</text>
                <text x="200" y="388">]</text>
                <text x="104" y="404">[</text>
                <text x="140" y="404">mirror</text>
                <text x="196" y="404">cosign</text>
                <text x="232" y="404">]</text>
                <text x="340" y="436">6.</text>
                <text x="384" y="436">Monitor</text>
                <text x="428" y="436">CA</text>
                <text x="480" y="436">operation</text>
                <text x="80" y="500">...quorum</text>
                <text x="132" y="500">of</text>
                <text x="196" y="500">cosigners...</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+-- Certification Authority ---+    +--  Authenticating Party ----+
|                              |    |                             |
|  2. Validate request     <---+----+--  1. Request certificate   |
|       |                      |    |       issuance              |
|       |                      |    |                             |
|       V                      |    |                             |
|                              |    |                             |
|  3. Add to issuance log      |    |                             |
|       +---[ CA cosign ]      |    |                             |
|      / \                 ----+----+->  5. Download certificates |
|     /   \                    |    |                             |
|    /     \                   |    |          *  tbscert         |
|   +-------+                  |    |      = = =  inclusion proof |
|    * * * *  tbscert entries  |    |     [ CA ]  cosignatures    |
|                              |    | [ mirror ]                  |
+------------------------------+    +-----------------------------+
           /   |   \
          /    |    \    4. Submit log to cosigners
         V     V     V      for cosignatures

+-- Mirrors, other cosigners --+    +-- Monitors -----------------+
|                              |    |                             |
|       +---[ CA cosign ]      +-+  |                             |
|      / \  [ mirror cosign ]  | |  |                             |
|     /   \                    | |  |                             |
|    /     \                 <-+-+--+--  6. Monitor CA operation  |
|   +-------+                  | |  |                             |
|    * * * *                   | |  +-----------------------------+
+-+----------------------------+ |
  |  ...quorum of cosigners...   |
  +------------------------------+
]]></artwork>
        </artset>
      </figure>
      <t>Merkle Tree Certificates are issued as follows. <xref target="fig-issuance-overview"/> depicts this process.</t>
      <ol spacing="normal" type="1"><li>
          <t>The authenticating party requests a certificate, e.g. over ACME <xref target="RFC8555"/></t>
        </li>
        <li>
          <t>The CA validates each incoming issuance request, e.g. with ACME challenges. From there, the process diverges from CT-based PKIs.</t>
        </li>
        <li>
          <t>The CA operates a series of append-only <em>issuance logs</em> (<xref target="issuance-logs"/>). Unlike a CT log, these logs only contain entries added by the CA:  </t>
          <ol spacing="normal" type="a"><li>
              <t>The CA adds a TBSCertificateLogEntry (<xref target="log-entries"/>, abbreviated "tbscert entries" in the diagram) to an issuance log, describing the information it is certifying.</t>
            </li>
            <li>
              <t>The CA signs a <em>checkpoint</em>, which describes the current state of the log. A signed checkpoint certifies that the CA issued <em>every</em> entry in the Merkle Tree (<xref target="certification-authority-cosigners"/>).</t>
            </li>
            <li>
              <t>The CA additionally signs <em>subtrees</em> (<xref target="subtrees"/>) that together contain certificates added since the last checkpoint (<xref target="arbitrary-intervals"/>). This is an optimization to reduce inclusion proof sizes. A signed subtree certifies that the CA has issued <em>every</em> entry in the subtree.</t>
            </li>
          </ol>
        </li>
        <li>
          <t>The CA submits the new log state to <em>cosigners</em>. Cosigners validate the log is append-only and optionally provide additional services, such as mirroring its contents. They cosign the CA's checkpoints and subtrees.</t>
        </li>
        <li>
          <t>The CA now has enough information to construct a certificate and give it to the authenticating party. A certificate contains:  </t>
          <ul spacing="normal">
            <li>
              <t>The TBSCertificate being certified</t>
            </li>
            <li>
              <t>An inclusion proof from the TBSCertificate to some subtree</t>
            </li>
            <li>
              <t>Cosignatures from the CA and cosigners on the subtree</t>
            </li>
          </ul>
        </li>
        <li>
          <t>As in Certificate Transparency, monitors observe the CA's issuance logs to ensure the CA is operated correctly.</t>
        </li>
      </ol>
      <t>A certificate with cosignatures is known as a <em>standalone certificate</em>. Analogous to X.509 trust anchors and trusted CT logs, relying parties are configured with trusted cosigners (<xref target="trusted-cosigners"/>) that allow them to accept Merkle Tree certificates. The inclusion proof proves the TBSCertificate is part of some subtree, and cosignatures from trusted cosigners prove the subtree was certified by the CA and available to monitors. Where CT logs entire certificates, the issuance log's entries are smaller TBSCertificateLogEntry (<xref target="log-entries"/>) structures, which do not scale with public key or signature size.</t>
      <t>This same issuance process also produces a <em>landmark-relative certificate</em>. This is an optional, optimized certificate that does not need subtree cosignatures, including any from the CA. Landmark-relative certificates are available after a short period of time and usable with up-to-date relying parties.</t>
      <figure anchor="fig-landmark-cert-overview">
        <name>A diagram of landmark-relative certificate construction and usage, detailed below</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="416" width="488" viewBox="0 0 488 416" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,112" fill="none" stroke="black"/>
              <path d="M 8,192 L 8,384" fill="none" stroke="black"/>
              <path d="M 224,96 L 224,184" fill="none" stroke="black"/>
              <path d="M 272,32 L 272,112" fill="none" stroke="black"/>
              <path d="M 272,192 L 272,384" fill="none" stroke="black"/>
              <path d="M 296,48 L 296,112" fill="none" stroke="black"/>
              <path d="M 296,240 L 296,288" fill="none" stroke="black"/>
              <path d="M 296,320 L 296,368" fill="none" stroke="black"/>
              <path d="M 432,80 L 432,224" fill="none" stroke="black"/>
              <path d="M 464,48 L 464,112" fill="none" stroke="black"/>
              <path d="M 480,240 L 480,288" fill="none" stroke="black"/>
              <path d="M 480,320 L 480,368" fill="none" stroke="black"/>
              <path d="M 8,32 L 24,32" fill="none" stroke="black"/>
              <path d="M 232,32 L 272,32" fill="none" stroke="black"/>
              <path d="M 296,48 L 312,48" fill="none" stroke="black"/>
              <path d="M 448,48 L 464,48" fill="none" stroke="black"/>
              <path d="M 264,80 L 432,80" fill="none" stroke="black"/>
              <path d="M 32,96 L 72,96" fill="none" stroke="black"/>
              <path d="M 8,112 L 272,112" fill="none" stroke="black"/>
              <path d="M 296,112 L 464,112" fill="none" stroke="black"/>
              <path d="M 8,192 L 24,192" fill="none" stroke="black"/>
              <path d="M 208,192 L 272,192" fill="none" stroke="black"/>
              <path d="M 296,240 L 312,240" fill="none" stroke="black"/>
              <path d="M 440,240 L 480,240" fill="none" stroke="black"/>
              <path d="M 264,256 L 288,256" fill="none" stroke="black"/>
              <path d="M 296,288 L 480,288" fill="none" stroke="black"/>
              <path d="M 296,320 L 312,320" fill="none" stroke="black"/>
              <path d="M 432,320 L 480,320" fill="none" stroke="black"/>
              <path d="M 176,352 L 288,352" fill="none" stroke="black"/>
              <path d="M 296,368 L 480,368" fill="none" stroke="black"/>
              <path d="M 8,384 L 272,384" fill="none" stroke="black"/>
              <path d="M 52,56 L 72,96" fill="none" stroke="black"/>
              <path d="M 32,96 L 52,56" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="440,224 428,218.4 428,229.6" fill="black" transform="rotate(90,432,224)"/>
              <polygon class="arrowhead" points="296,352 284,346.4 284,357.6" fill="black" transform="rotate(0,288,352)"/>
              <polygon class="arrowhead" points="296,256 284,250.4 284,261.6" fill="black" transform="rotate(0,288,256)"/>
              <polygon class="arrowhead" points="232,184 220,178.4 220,189.6" fill="black" transform="rotate(90,224,184)"/>
              <g class="text">
                <text x="88" y="36">Certification</text>
                <text x="184" y="36">Authority</text>
                <text x="348" y="52">Update</text>
                <text x="408" y="52">Channel</text>
                <text x="92" y="84">1.</text>
                <text x="140" y="84">Allocate</text>
                <text x="216" y="84">landmarks</text>
                <text x="20" y="148">2.</text>
                <text x="52" y="148">Make</text>
                <text x="144" y="148">landmark-relative</text>
                <text x="324" y="148">3.</text>
                <text x="380" y="148">Distribute</text>
                <text x="52" y="164">cert</text>
                <text x="376" y="164">landmarks</text>
                <text x="92" y="196">Authenticating</text>
                <text x="176" y="196">Party</text>
                <text x="88" y="228">landmark-relative</text>
                <text x="180" y="228">cert</text>
                <text x="64" y="244">tbscert</text>
                <text x="364" y="244">Up-to-date</text>
                <text x="420" y="244">RP</text>
                <text x="72" y="260">inclusion</text>
                <text x="136" y="260">proof</text>
                <text x="172" y="260">to</text>
                <text x="220" y="260">landmark</text>
                <text x="340" y="260">landmark</text>
                <text x="404" y="260">hashes</text>
                <text x="336" y="276">trusted</text>
                <text x="408" y="276">cosigners</text>
                <text x="60" y="308">standalone</text>
                <text x="124" y="308">cert</text>
                <text x="64" y="324">tbscert</text>
                <text x="360" y="324">Unupdated</text>
                <text x="412" y="324">RP</text>
                <text x="72" y="340">inclusion</text>
                <text x="136" y="340">proof</text>
                <text x="332" y="340">(stale</text>
                <text x="372" y="340">or</text>
                <text x="396" y="340">no</text>
                <text x="440" y="340">hashes)</text>
                <text x="84" y="356">cosignatures</text>
                <text x="336" y="356">trusted</text>
                <text x="408" y="356">cosigners</text>
                <text x="180" y="404">4.</text>
                <text x="220" y="404">Select</text>
                <text x="296" y="404">certificate</text>
                <text x="356" y="404">by</text>
                <text x="380" y="404">RP</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+-- Certification Authority -----+
|                                |  +-- Update Channel --+
|    /\                          |  |                    |
|   /  \  1. Allocate landmarks -+--+----------------+   |
|  +----+                  |     |  |                |   |
+--------------------------+-----+  +----------------+---+
                           |                         |
 2. Make landmark-relative |           3. Distribute |
    cert                   |              landmarks  |
                           V                         |
+-- Authenticating Party --------+                   |
|                                |                   |
| landmark-relative cert         |                   V
|   tbscert                      |  +-- Up-to-date RP -----+
|   inclusion proof to landmark -+->| landmark hashes      |
|                                |  | trusted cosigners    |
|                                |  +----------------------+
| standalone cert                |
|   tbscert                      |  +-- Unupdated RP ------+
|   inclusion proof              |  | (stale or no hashes) |
|   cosignatures     ------------+->| trusted cosigners    |
|                                |  +----------------------+
+--------------------------------+
                     4. Select certificate by RP
]]></artwork>
        </artset>
      </figure>
      <t>Landmark-relative certificates are constructed and used as follows. <xref target="fig-landmark-cert-overview"/> depicts this process.</t>
      <ol spacing="normal" type="1"><li>
          <t>Periodically, the tree size of the CA's most recent checkpoint is designated as a <em>landmark</em>. This determines <em>landmark subtrees</em>, which are common points of reference between relying parties and landmark-relative certificates.</t>
        </li>
        <li>
          <t>Once some landmark includes the TBSCertificate, the landmark-relative certificate is constructed with:  </t>
          <ul spacing="normal">
            <li>
              <t>The TBSCertificate being certified</t>
            </li>
            <li>
              <t>An inclusion proof from the TBSCertificate to a landmark subtree</t>
            </li>
          </ul>
        </li>
        <li>
          <t>In the background, landmark subtrees are predistributed to relying parties, with cosignatures checked against relying party requirements. This occurs periodically in the background, separate from the application protocol.</t>
        </li>
        <li>
          <t>During the application protocol, such as TLS <xref target="RFC9846"/>, if the relying party already supports the landmark subtree, the authenticating party can present the landmark-relative certificate. Otherwise, it presents a standalone certificate. The authenticating party may also select between several landmark-relative certificates, as described in <xref target="certificate-renewal"/>.</t>
        </li>
      </ol>
    </section>
    <section anchor="subtrees">
      <name>Subtrees</name>
      <t>This section extends the Merkle Tree definition in <xref section="2.1" sectionFormat="of" target="RFC9162"/> by defining a <em>subtree</em> of a Merkle Tree. A subtree is itself a Merkle Tree, built over an interval of entries from the original tree. <xref target="definition-of-a-subtree"/> defines a subtree formally, including the constraints on those intervals.</t>
      <t>As with Merkle Trees, a subtree inclusion proof, defined in <xref target="subtree-inclusion-proofs"/>, can prove an entry is contained in some subtree. Subtrees, and thus their inclusion proofs, are smaller than those of the original tree, so this document uses subtree inclusion proofs as a certificate size optimization.</t>
      <t>Not all intervals can form subtrees. Subtrees are limited to intervals that can be efficiently proven consistent with the original tree, using subtree consistency proofs defined in <xref target="subtree-consistency-proofs"/>. However, every interval of a Merkle Tree can be efficiently covered by two subtrees. <xref target="arbitrary-intervals"/> describes how to determine these subtrees.</t>
      <t><xref target="accumulated-subtree-test-vectors"/> and <xref target="large-subtree-test-vectors"/> provide test vectors for the algorithms defined in this section.</t>
      <section anchor="definition-of-a-subtree">
        <name>Definition of a Subtree</name>
        <t>Given an ordered list of <tt>n</tt> inputs, <tt>D_n = {d[0], d[1], ..., d[n-1]}</tt>, <xref section="2.1.1" sectionFormat="of" target="RFC9162"/> defines the Merkle Tree via the Merkle Tree Hash <tt>MTH(D_n)</tt>.</t>
        <t>A <em>subtree</em> of this Merkle Tree is itself a Merkle Tree, defined by <tt>MTH(D[start:end])</tt>. <tt>start</tt> and <tt>end</tt> are integers such that:</t>
        <ul spacing="normal">
          <li>
            <t><tt>0 &lt;= start &lt;= end &lt;= n</tt></t>
          </li>
          <li>
            <t><tt>start</tt> is a multiple of <tt>BIT_CEIL(end - start)</tt></t>
          </li>
        </ul>
        <t>The second condition ensures that <tt>MTH(D[start:end])</tt>, built over <tt>D[start:end]</tt> as an independent list, is sufficiently aligned with the original Merkle Tree to support subtree consistency proofs. See <xref target="subtrees-explain"/> for more details.</t>
        <t>In implementations using fixed-width integers, <tt>BIT_CEIL(end - start)</tt> above may exceed <tt>end</tt> and potentially overflow. For example, if <tt>start</tt> is zero and <tt>end</tt> is 2<sup>63</sup>+1, <tt>BIT_CEIL(end - start)</tt> is 2<sup>64</sup>. The following is an example C++ implementation that handles this condition.</t>
        <sourcecode type="c++"><![CDATA[
bool is_valid_subtree(uint64_t start, uint64_t end) {
  if (start > end) {
    return false;
  }
  uint64_t size = end - start;
  if (size > (uint64_t{1} << 63)) {
    return start == 0;  // bit_ceil below will overflow.
  }
  return (start & (std::bit_ceil(size) - 1)) == 0;
}
]]></sourcecode>
        <t>For all <tt>x</tt>, <tt>[0, x)</tt> is a valid subtree (0 is a multiple of everything), and <tt>[x, x)</tt> is a valid subtree (<tt>BIT_CEIL(0)</tt> is 1).</t>
        <t>The <em>size</em> of the subtree is <tt>end - start</tt>.</t>
        <t>In the context of a single Merkle Tree, this document denotes subtree <tt>MTH(D[start:end])</tt> by half-open interval <tt>[start, end)</tt>. It contains the entries whose indices are in that half-open interval.</t>
        <t>As a Merkle Tree grows, its subtrees remain unchanged. That is, if <tt>end &lt;= m &lt;= n</tt>, the subtree <tt>[start, end)</tt> of <tt>MTH(D[0:m])</tt> and the subtree <tt>[start, end)</tt> of <tt>MTH(D_n)</tt> are both valid and identical.</t>
      </section>
      <section anchor="example-subtrees">
        <name>Example Subtrees</name>
        <t><xref target="fig-subtree-example"/> shows the subtrees <tt>[4, 8)</tt> and <tt>[8, 13)</tt>:</t>
        <figure anchor="fig-subtree-example">
          <name>Two example subtrees</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="464" width="200" viewBox="0 0 200 464" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,96 L 8,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,352 L 8,384" fill="none" stroke="black"/>
                <path d="M 8,416 L 8,448" fill="none" stroke="black"/>
                <path d="M 24,160 L 24,192" fill="none" stroke="black"/>
                <path d="M 24,416 L 24,448" fill="none" stroke="black"/>
                <path d="M 32,32 L 32,64" fill="none" stroke="black"/>
                <path d="M 32,288 L 32,320" fill="none" stroke="black"/>
                <path d="M 40,160 L 40,192" fill="none" stroke="black"/>
                <path d="M 40,416 L 40,448" fill="none" stroke="black"/>
                <path d="M 56,96 L 56,128" fill="none" stroke="black"/>
                <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 56,416 L 56,448" fill="none" stroke="black"/>
                <path d="M 64,352 L 64,384" fill="none" stroke="black"/>
                <path d="M 72,96 L 72,128" fill="none" stroke="black"/>
                <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                <path d="M 72,416 L 72,448" fill="none" stroke="black"/>
                <path d="M 80,352 L 80,384" fill="none" stroke="black"/>
                <path d="M 88,160 L 88,192" fill="none" stroke="black"/>
                <path d="M 96,416 L 96,448" fill="none" stroke="black"/>
                <path d="M 104,32 L 104,64" fill="none" stroke="black"/>
                <path d="M 104,160 L 104,192" fill="none" stroke="black"/>
                <path d="M 112,288 L 112,320" fill="none" stroke="black"/>
                <path d="M 112,416 L 112,448" fill="none" stroke="black"/>
                <path d="M 120,96 L 120,128" fill="none" stroke="black"/>
                <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                <path d="M 136,416 L 136,448" fill="none" stroke="black"/>
                <path d="M 144,352 L 144,384" fill="none" stroke="black"/>
                <path d="M 152,416 L 152,448" fill="none" stroke="black"/>
                <path d="M 168,264 L 168,408" fill="none" stroke="black"/>
                <path d="M 176,416 L 176,448" fill="none" stroke="black"/>
                <path d="M 192,224 L 192,256" fill="none" stroke="black"/>
                <path d="M 32,32 L 104,32" fill="none" stroke="black"/>
                <path d="M 32,64 L 104,64" fill="none" stroke="black"/>
                <path d="M 8,96 L 56,96" fill="none" stroke="black"/>
                <path d="M 72,96 L 120,96" fill="none" stroke="black"/>
                <path d="M 8,128 L 56,128" fill="none" stroke="black"/>
                <path d="M 72,128 L 120,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 24,160" fill="none" stroke="black"/>
                <path d="M 40,160 L 56,160" fill="none" stroke="black"/>
                <path d="M 72,160 L 88,160" fill="none" stroke="black"/>
                <path d="M 104,160 L 120,160" fill="none" stroke="black"/>
                <path d="M 8,192 L 24,192" fill="none" stroke="black"/>
                <path d="M 40,192 L 56,192" fill="none" stroke="black"/>
                <path d="M 72,192 L 88,192" fill="none" stroke="black"/>
                <path d="M 104,192 L 120,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 192,224" fill="none" stroke="black"/>
                <path d="M 56,256 L 192,256" fill="none" stroke="black"/>
                <path d="M 32,288 L 112,288" fill="none" stroke="black"/>
                <path d="M 32,320 L 112,320" fill="none" stroke="black"/>
                <path d="M 8,352 L 64,352" fill="none" stroke="black"/>
                <path d="M 80,352 L 144,352" fill="none" stroke="black"/>
                <path d="M 8,384 L 64,384" fill="none" stroke="black"/>
                <path d="M 80,384 L 144,384" fill="none" stroke="black"/>
                <path d="M 8,416 L 24,416" fill="none" stroke="black"/>
                <path d="M 40,416 L 56,416" fill="none" stroke="black"/>
                <path d="M 72,416 L 96,416" fill="none" stroke="black"/>
                <path d="M 112,416 L 136,416" fill="none" stroke="black"/>
                <path d="M 152,416 L 176,416" fill="none" stroke="black"/>
                <path d="M 8,448 L 24,448" fill="none" stroke="black"/>
                <path d="M 40,448 L 56,448" fill="none" stroke="black"/>
                <path d="M 72,448 L 96,448" fill="none" stroke="black"/>
                <path d="M 112,448 L 136,448" fill="none" stroke="black"/>
                <path d="M 152,448 L 176,448" fill="none" stroke="black"/>
                <g class="text">
                  <text x="56" y="52">[4,</text>
                  <text x="84" y="52">8)</text>
                  <text x="40" y="84">/</text>
                  <text x="96" y="84">\</text>
                  <text x="32" y="116">[4,6)</text>
                  <text x="96" y="116">[6,8)</text>
                  <text x="24" y="148">/</text>
                  <text x="40" y="148">\</text>
                  <text x="88" y="148">/</text>
                  <text x="104" y="148">\</text>
                  <text x="16" y="180">4</text>
                  <text x="48" y="180">5</text>
                  <text x="80" y="180">6</text>
                  <text x="112" y="180">7</text>
                  <text x="112" y="244">[8,</text>
                  <text x="144" y="244">13)</text>
                  <text x="80" y="276">/</text>
                  <text x="56" y="308">[8,</text>
                  <text x="88" y="308">12)</text>
                  <text x="48" y="340">/</text>
                  <text x="104" y="340">\</text>
                  <text x="36" y="372">[8,10)</text>
                  <text x="112" y="372">[10,12)</text>
                  <text x="24" y="404">/</text>
                  <text x="40" y="404">\</text>
                  <text x="96" y="404">/</text>
                  <text x="112" y="404">\</text>
                  <text x="16" y="436">8</text>
                  <text x="48" y="436">9</text>
                  <text x="84" y="436">10</text>
                  <text x="124" y="436">11</text>
                  <text x="164" y="436">12</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
   +--------+
   | [4, 8) |
   +--------+
    /      \
+-----+ +-----+
|[4,6)| |[6,8)|
+-----+ +-----+
  / \     / \
+-+ +-+ +-+ +-+
|4| |5| |6| |7|
+-+ +-+ +-+ +-+

      +----------------+
      |     [8, 13)    |
      +----------------+
         /          |
   +---------+      |
   | [8, 12) |      |
   +---------+      |
     /      \       |
+------+ +-------+  |
|[8,10)| |[10,12)|  |
+------+ +-------+  |
  / \      / \      |
+-+ +-+ +--+ +--+ +--+
|8| |9| |10| |11| |12|
+-+ +-+ +--+ +--+ +--+
]]></artwork>
          </artset>
        </figure>
        <t>Both can be viewed as subtrees of a Merkle Tree of size 13, depicted in <xref target="fig-subtree-containment-example"/>. Nodes in common with <tt>[4, 8)</tt> and <tt>[8, 13)</tt> are marked with doubled and wavy lines, respectively.</t>
        <figure anchor="fig-subtree-containment-example">
          <name>A Merkle Tree of size 13</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="456" viewBox="0 0 456 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 8,288 L 8,320" fill="none" stroke="black"/>
                <path d="M 24,288 L 24,320" fill="none" stroke="black"/>
                <path d="M 32,160 L 32,192" fill="none" stroke="black"/>
                <path d="M 40,288 L 40,320" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 56,288 L 56,320" fill="none" stroke="black"/>
                <path d="M 64,96 L 64,128" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 72,288 L 72,320" fill="none" stroke="black"/>
                <path d="M 88,288 L 88,320" fill="none" stroke="black"/>
                <path d="M 104,160 L 104,192" fill="none" stroke="black"/>
                <path d="M 104,288 L 104,320" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 120,288 L 120,320" fill="none" stroke="black"/>
                <path d="M 136,32 L 136,64" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 136,288 L 136,320" fill="none" stroke="black"/>
                <path d="M 152,288 L 152,320" fill="none" stroke="black"/>
                <path d="M 160,160 L 160,192" fill="none" stroke="black"/>
                <path d="M 168,288 L 168,320" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 184,288 L 184,320" fill="none" stroke="black"/>
                <path d="M 200,96 L 200,128" fill="none" stroke="black"/>
                <path d="M 200,224 L 200,256" fill="none" stroke="black"/>
                <path d="M 200,288 L 200,320" fill="none" stroke="black"/>
                <path d="M 216,288 L 216,320" fill="none" stroke="black"/>
                <path d="M 232,160 L 232,192" fill="none" stroke="black"/>
                <path d="M 232,288 L 232,320" fill="none" stroke="black"/>
                <path d="M 248,224 L 248,256" fill="none" stroke="black"/>
                <path d="M 248,288 L 248,320" fill="none" stroke="black"/>
                <path d="M 264,224 L 264,256" fill="none" stroke="black"/>
                <path d="M 264,288 L 264,320" fill="none" stroke="black"/>
                <path d="M 280,288 L 280,320" fill="none" stroke="black"/>
                <path d="M 288,160 L 288,192" fill="none" stroke="black"/>
                <path d="M 296,288 L 296,320" fill="none" stroke="black"/>
                <path d="M 312,96 L 312,128" fill="none" stroke="black"/>
                <path d="M 312,288 L 312,320" fill="none" stroke="black"/>
                <path d="M 320,224 L 320,256" fill="none" stroke="black"/>
                <path d="M 328,288 L 328,320" fill="none" stroke="black"/>
                <path d="M 336,224 L 336,256" fill="none" stroke="black"/>
                <path d="M 352,288 L 352,320" fill="none" stroke="black"/>
                <path d="M 368,160 L 368,192" fill="none" stroke="black"/>
                <path d="M 368,288 L 368,320" fill="none" stroke="black"/>
                <path d="M 376,32 L 376,64" fill="none" stroke="black"/>
                <path d="M 392,288 L 392,320" fill="none" stroke="black"/>
                <path d="M 400,224 L 400,256" fill="none" stroke="black"/>
                <path d="M 408,288 L 408,320" fill="none" stroke="black"/>
                <path d="M 424,144 L 424,272" fill="none" stroke="black"/>
                <path d="M 432,288 L 432,320" fill="none" stroke="black"/>
                <path d="M 448,96 L 448,128" fill="none" stroke="black"/>
                <path d="M 136,32 L 376,32" fill="none" stroke="black"/>
                <path d="M 136,64 L 376,64" fill="none" stroke="black"/>
                <path d="M 64,96 L 200,96" fill="none" stroke="black"/>
                <path d="M 312,96 Q 314,92.8 316,96 Q 318,99.2 320,96 Q 322,92.8 324,96 Q 326,99.2 328,96 Q 330,92.8 332,96 Q 334,99.2 336,96 Q 338,92.8 340,96 Q 342,99.2 344,96 Q 346,92.8 348,96 Q 350,99.2 352,96 Q 354,92.8 356,96 Q 358,99.2 360,96 Q 362,92.8 364,96 Q 366,99.2 368,96 Q 370,92.8 372,96 Q 374,99.2 376,96 Q 378,92.8 380,96 Q 382,99.2 384,96 Q 386,92.8 388,96 Q 390,99.2 392,96 Q 394,92.8 396,96 Q 398,99.2 400,96 Q 402,92.8 404,96 Q 406,99.2 408,96 Q 410,92.8 412,96 Q 414,99.2 416,96 Q 418,92.8 420,96 Q 422,99.2 424,96 Q 426,92.8 428,96 Q 430,99.2 432,96 Q 434,92.8 436,96 Q 438,99.2 440,96 Q 442,92.8 444,96 Q 446,99.2 448,96 " fill="none" stroke="black"/>
                <path d="M 64,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 312,128 Q 314,124.8 316,128 Q 318,131.2 320,128 Q 322,124.8 324,128 Q 326,131.2 328,128 Q 330,124.8 332,128 Q 334,131.2 336,128 Q 338,124.8 340,128 Q 342,131.2 344,128 Q 346,124.8 348,128 Q 350,131.2 352,128 Q 354,124.8 356,128 Q 358,131.2 360,128 Q 362,124.8 364,128 Q 366,131.2 368,128 Q 370,124.8 372,128 Q 374,131.2 376,128 Q 378,124.8 380,128 Q 382,131.2 384,128 Q 386,124.8 388,128 Q 390,131.2 392,128 Q 394,124.8 396,128 Q 398,131.2 400,128 Q 402,124.8 404,128 Q 406,131.2 408,128 Q 410,124.8 412,128 Q 414,131.2 416,128 Q 418,124.8 420,128 Q 422,131.2 424,128 Q 426,124.8 428,128 Q 430,131.2 432,128 Q 434,124.8 436,128 Q 438,131.2 440,128 Q 442,124.8 444,128 Q 446,131.2 448,128 " fill="none" stroke="black"/>
                <path d="M 32,160 L 104,160" fill="none" stroke="black"/>
                <path d="M 160,158 L 232,158" fill="none" stroke="black"/>
                <path d="M 160,162 L 232,162" fill="none" stroke="black"/>
                <path d="M 288,160 Q 290,156.8 292,160 Q 294,163.2 296,160 Q 298,156.8 300,160 Q 302,163.2 304,160 Q 306,156.8 308,160 Q 310,163.2 312,160 Q 314,156.8 316,160 Q 318,163.2 320,160 Q 322,156.8 324,160 Q 326,163.2 328,160 Q 330,156.8 332,160 Q 334,163.2 336,160 Q 338,156.8 340,160 Q 342,163.2 344,160 Q 346,156.8 348,160 Q 350,163.2 352,160 Q 354,156.8 356,160 Q 358,163.2 360,160 Q 362,156.8 364,160 Q 366,163.2 368,160 " fill="none" stroke="black"/>
                <path d="M 32,192 L 104,192" fill="none" stroke="black"/>
                <path d="M 160,190 L 232,190" fill="none" stroke="black"/>
                <path d="M 160,194 L 232,194" fill="none" stroke="black"/>
                <path d="M 288,192 Q 290,188.8 292,192 Q 294,195.2 296,192 Q 298,188.8 300,192 Q 302,195.2 304,192 Q 306,188.8 308,192 Q 310,195.2 312,192 Q 314,188.8 316,192 Q 318,195.2 320,192 Q 322,188.8 324,192 Q 326,195.2 328,192 Q 330,188.8 332,192 Q 334,195.2 336,192 Q 338,188.8 340,192 Q 342,195.2 344,192 Q 346,188.8 348,192 Q 350,195.2 352,192 Q 354,188.8 356,192 Q 358,195.2 360,192 Q 362,188.8 364,192 Q 366,195.2 368,192 " fill="none" stroke="black"/>
                <path d="M 8,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,222 L 184,222" fill="none" stroke="black"/>
                <path d="M 136,226 L 184,226" fill="none" stroke="black"/>
                <path d="M 200,222 L 248,222" fill="none" stroke="black"/>
                <path d="M 200,226 L 248,226" fill="none" stroke="black"/>
                <path d="M 264,224 Q 266,220.8 268,224 Q 270,227.2 272,224 Q 274,220.8 276,224 Q 278,227.2 280,224 Q 282,220.8 284,224 Q 286,227.2 288,224 Q 290,220.8 292,224 Q 294,227.2 296,224 Q 298,220.8 300,224 Q 302,227.2 304,224 Q 306,220.8 308,224 Q 310,227.2 312,224 Q 314,220.8 316,224 Q 318,227.2 320,224 " fill="none" stroke="black"/>
                <path d="M 336,224 Q 338,220.8 340,224 Q 342,227.2 344,224 Q 346,220.8 348,224 Q 350,227.2 352,224 Q 354,220.8 356,224 Q 358,227.2 360,224 Q 362,220.8 364,224 Q 366,227.2 368,224 Q 370,220.8 372,224 Q 374,227.2 376,224 Q 378,220.8 380,224 Q 382,227.2 384,224 Q 386,220.8 388,224 Q 390,227.2 392,224 Q 394,220.8 396,224 Q 398,227.2 400,224 " fill="none" stroke="black"/>
                <path d="M 8,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,254 L 184,254" fill="none" stroke="black"/>
                <path d="M 136,258 L 184,258" fill="none" stroke="black"/>
                <path d="M 200,254 L 248,254" fill="none" stroke="black"/>
                <path d="M 200,258 L 248,258" fill="none" stroke="black"/>
                <path d="M 264,256 Q 266,252.8 268,256 Q 270,259.2 272,256 Q 274,252.8 276,256 Q 278,259.2 280,256 Q 282,252.8 284,256 Q 286,259.2 288,256 Q 290,252.8 292,256 Q 294,259.2 296,256 Q 298,252.8 300,256 Q 302,259.2 304,256 Q 306,252.8 308,256 Q 310,259.2 312,256 Q 314,252.8 316,256 Q 318,259.2 320,256 " fill="none" stroke="black"/>
                <path d="M 336,256 Q 338,252.8 340,256 Q 342,259.2 344,256 Q 346,252.8 348,256 Q 350,259.2 352,256 Q 354,252.8 356,256 Q 358,259.2 360,256 Q 362,252.8 364,256 Q 366,259.2 368,256 Q 370,252.8 372,256 Q 374,259.2 376,256 Q 378,252.8 380,256 Q 382,259.2 384,256 Q 386,252.8 388,256 Q 390,259.2 392,256 Q 394,252.8 396,256 Q 398,259.2 400,256 " fill="none" stroke="black"/>
                <path d="M 8,288 L 24,288" fill="none" stroke="black"/>
                <path d="M 40,288 L 56,288" fill="none" stroke="black"/>
                <path d="M 72,288 L 88,288" fill="none" stroke="black"/>
                <path d="M 104,288 L 120,288" fill="none" stroke="black"/>
                <path d="M 136,286 L 152,286" fill="none" stroke="black"/>
                <path d="M 136,290 L 152,290" fill="none" stroke="black"/>
                <path d="M 168,286 L 184,286" fill="none" stroke="black"/>
                <path d="M 168,290 L 184,290" fill="none" stroke="black"/>
                <path d="M 200,286 L 216,286" fill="none" stroke="black"/>
                <path d="M 200,290 L 216,290" fill="none" stroke="black"/>
                <path d="M 232,286 L 248,286" fill="none" stroke="black"/>
                <path d="M 232,290 L 248,290" fill="none" stroke="black"/>
                <path d="M 264,288 Q 266,284.8 268,288 Q 270,291.2 272,288 Q 274,284.8 276,288 Q 278,291.2 280,288 " fill="none" stroke="black"/>
                <path d="M 296,288 Q 298,284.8 300,288 Q 302,291.2 304,288 Q 306,284.8 308,288 Q 310,291.2 312,288 " fill="none" stroke="black"/>
                <path d="M 328,288 Q 330,284.8 332,288 Q 334,291.2 336,288 Q 338,284.8 340,288 Q 342,291.2 344,288 Q 346,284.8 348,288 Q 350,291.2 352,288 " fill="none" stroke="black"/>
                <path d="M 368,288 Q 370,284.8 372,288 Q 374,291.2 376,288 Q 378,284.8 380,288 Q 382,291.2 384,288 Q 386,284.8 388,288 Q 390,291.2 392,288 " fill="none" stroke="black"/>
                <path d="M 408,288 Q 410,284.8 412,288 Q 414,291.2 416,288 Q 418,284.8 420,288 Q 422,291.2 424,288 Q 426,284.8 428,288 Q 430,291.2 432,288 " fill="none" stroke="black"/>
                <path d="M 8,320 L 24,320" fill="none" stroke="black"/>
                <path d="M 40,320 L 56,320" fill="none" stroke="black"/>
                <path d="M 72,320 L 88,320" fill="none" stroke="black"/>
                <path d="M 104,320 L 120,320" fill="none" stroke="black"/>
                <path d="M 136,318 L 152,318" fill="none" stroke="black"/>
                <path d="M 136,322 L 152,322" fill="none" stroke="black"/>
                <path d="M 168,318 L 184,318" fill="none" stroke="black"/>
                <path d="M 168,322 L 184,322" fill="none" stroke="black"/>
                <path d="M 200,318 L 216,318" fill="none" stroke="black"/>
                <path d="M 200,322 L 216,322" fill="none" stroke="black"/>
                <path d="M 232,318 L 248,318" fill="none" stroke="black"/>
                <path d="M 232,322 L 248,322" fill="none" stroke="black"/>
                <path d="M 264,320 Q 266,316.8 268,320 Q 270,323.2 272,320 Q 274,316.8 276,320 Q 278,323.2 280,320 " fill="none" stroke="black"/>
                <path d="M 296,320 Q 298,316.8 300,320 Q 302,323.2 304,320 Q 306,316.8 308,320 Q 310,323.2 312,320 " fill="none" stroke="black"/>
                <path d="M 328,320 Q 330,316.8 332,320 Q 334,323.2 336,320 Q 338,316.8 340,320 Q 342,323.2 344,320 Q 346,316.8 348,320 Q 350,323.2 352,320 " fill="none" stroke="black"/>
                <path d="M 368,320 Q 370,316.8 372,320 Q 374,323.2 376,320 Q 378,316.8 380,320 Q 382,323.2 384,320 Q 386,316.8 388,320 Q 390,323.2 392,320 " fill="none" stroke="black"/>
                <path d="M 408,320 Q 410,316.8 412,320 Q 414,323.2 416,320 Q 418,316.8 420,320 Q 422,323.2 424,320 Q 426,316.8 428,320 Q 430,323.2 432,320 " fill="none" stroke="black"/>
                <g class="text">
                  <text x="248" y="52">[0,</text>
                  <text x="280" y="52">13)</text>
                  <text x="160" y="84">/</text>
                  <text x="352" y="84">\</text>
                  <text x="120" y="116">[0,</text>
                  <text x="148" y="116">8)</text>
                  <text x="368" y="116">[8,</text>
                  <text x="400" y="116">13)</text>
                  <text x="72" y="148">/</text>
                  <text x="192" y="148">\</text>
                  <text x="336" y="148">/</text>
                  <text x="56" y="180">[0,</text>
                  <text x="84" y="180">4)</text>
                  <text x="184" y="180">[4,</text>
                  <text x="212" y="180">8)</text>
                  <text x="312" y="180">[8,</text>
                  <text x="344" y="180">12)</text>
                  <text x="40" y="212">/</text>
                  <text x="96" y="212">\</text>
                  <text x="168" y="212">/</text>
                  <text x="224" y="212">\</text>
                  <text x="304" y="212">/</text>
                  <text x="360" y="212">\</text>
                  <text x="32" y="244">[0,2)</text>
                  <text x="96" y="244">[2,4)</text>
                  <text x="160" y="244">[4,6)</text>
                  <text x="224" y="244">[6,8)</text>
                  <text x="292" y="244">[8,10)</text>
                  <text x="368" y="244">[10,12)</text>
                  <text x="24" y="276">/</text>
                  <text x="40" y="276">\</text>
                  <text x="88" y="276">/</text>
                  <text x="104" y="276">\</text>
                  <text x="152" y="276">/</text>
                  <text x="168" y="276">\</text>
                  <text x="216" y="276">/</text>
                  <text x="232" y="276">\</text>
                  <text x="280" y="276">/</text>
                  <text x="296" y="276">\</text>
                  <text x="352" y="276">/</text>
                  <text x="368" y="276">\</text>
                  <text x="16" y="308">0</text>
                  <text x="48" y="308">1</text>
                  <text x="80" y="308">2</text>
                  <text x="112" y="308">3</text>
                  <text x="144" y="308">4</text>
                  <text x="176" y="308">5</text>
                  <text x="208" y="308">6</text>
                  <text x="240" y="308">7</text>
                  <text x="272" y="308">8</text>
                  <text x="304" y="308">9</text>
                  <text x="340" y="308">10</text>
                  <text x="380" y="308">11</text>
                  <text x="420" y="308">12</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                +-----------------------------+
                |            [0, 13)          |
                +-----------------------------+
                   /                       \
       +----------------+             +~~~~~~~~~~~~~~~~+
       |     [0, 8)     |             |     [8, 13)    |
       +----------------+             +~~~~~~~~~~~~~~~~+
        /              \                 /          |
   +--------+      +========+      +~~~~~~~~~+      |
   | [0, 4) |      | [4, 8) |      | [8, 12) |      |
   +--------+      +========+      +~~~~~~~~~+      |
    /      \        /      \         /      \       |
+-----+ +-----+ +=====+ +=====+ +~~~~~~+ +~~~~~~~+  |
|[0,2)| |[2,4)| |[4,6)| |[6,8)| |[8,10)| |[10,12)|  |
+-----+ +-----+ +=====+ +=====+ +~~~~~~+ +~~~~~~~+  |
  / \     / \     / \     / \     / \      / \      |
+-+ +-+ +-+ +-+ +=+ +=+ +=+ +=+ +~+ +~+ +~~+ +~~+ +~~+
|0| |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| |11| |12|
+-+ +-+ +-+ +-+ +=+ +=+ +=+ +=+ +~+ +~+ +~~+ +~~+ +~~+
]]></artwork>
          </artset>
        </figure>
        <t>In some cases, not every node of a subtree will appear in the larger Merkle Tree. <xref target="fig-subtree-containment-example-2"/> depicts a Merkle Tree of size 14. Nodes in common with <tt>[4, 8)</tt> and <tt>[8, 13)</tt> are marked as above. While all nodes of <tt>[4, 8)</tt> appear in the tree, non-leaf nodes on <tt>[8, 13)</tt>'s right edge do not. However, there is still sufficient overlap to construct subtree consistency proofs (<xref target="subtree-consistency-proofs"/>).</t>
        <figure anchor="fig-subtree-containment-example-2">
          <name>A Merkle Tree of size 14</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="488" viewBox="0 0 488 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 8,288 L 8,320" fill="none" stroke="black"/>
                <path d="M 24,288 L 24,320" fill="none" stroke="black"/>
                <path d="M 32,160 L 32,192" fill="none" stroke="black"/>
                <path d="M 40,288 L 40,320" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 56,288 L 56,320" fill="none" stroke="black"/>
                <path d="M 64,96 L 64,128" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 72,288 L 72,320" fill="none" stroke="black"/>
                <path d="M 88,288 L 88,320" fill="none" stroke="black"/>
                <path d="M 104,160 L 104,192" fill="none" stroke="black"/>
                <path d="M 104,288 L 104,320" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 120,288 L 120,320" fill="none" stroke="black"/>
                <path d="M 136,32 L 136,64" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 136,288 L 136,320" fill="none" stroke="black"/>
                <path d="M 152,288 L 152,320" fill="none" stroke="black"/>
                <path d="M 160,160 L 160,192" fill="none" stroke="black"/>
                <path d="M 168,288 L 168,320" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 184,288 L 184,320" fill="none" stroke="black"/>
                <path d="M 200,96 L 200,128" fill="none" stroke="black"/>
                <path d="M 200,224 L 200,256" fill="none" stroke="black"/>
                <path d="M 200,288 L 200,320" fill="none" stroke="black"/>
                <path d="M 216,288 L 216,320" fill="none" stroke="black"/>
                <path d="M 232,160 L 232,192" fill="none" stroke="black"/>
                <path d="M 232,288 L 232,320" fill="none" stroke="black"/>
                <path d="M 248,224 L 248,256" fill="none" stroke="black"/>
                <path d="M 248,288 L 248,320" fill="none" stroke="black"/>
                <path d="M 264,224 L 264,256" fill="none" stroke="black"/>
                <path d="M 264,288 L 264,320" fill="none" stroke="black"/>
                <path d="M 280,288 L 280,320" fill="none" stroke="black"/>
                <path d="M 288,160 L 288,192" fill="none" stroke="black"/>
                <path d="M 296,288 L 296,320" fill="none" stroke="black"/>
                <path d="M 312,96 L 312,128" fill="none" stroke="black"/>
                <path d="M 312,288 L 312,320" fill="none" stroke="black"/>
                <path d="M 320,224 L 320,256" fill="none" stroke="black"/>
                <path d="M 328,288 L 328,320" fill="none" stroke="black"/>
                <path d="M 336,224 L 336,256" fill="none" stroke="black"/>
                <path d="M 352,288 L 352,320" fill="none" stroke="black"/>
                <path d="M 368,160 L 368,192" fill="none" stroke="black"/>
                <path d="M 368,288 L 368,320" fill="none" stroke="black"/>
                <path d="M 376,32 L 376,64" fill="none" stroke="black"/>
                <path d="M 392,288 L 392,320" fill="none" stroke="black"/>
                <path d="M 400,224 L 400,256" fill="none" stroke="black"/>
                <path d="M 408,288 L 408,320" fill="none" stroke="black"/>
                <path d="M 416,224 L 416,256" fill="none" stroke="black"/>
                <path d="M 432,136 L 432,216" fill="none" stroke="black"/>
                <path d="M 432,288 L 432,320" fill="none" stroke="black"/>
                <path d="M 448,96 L 448,128" fill="none" stroke="black"/>
                <path d="M 448,288 L 448,320" fill="none" stroke="black"/>
                <path d="M 472,288 L 472,320" fill="none" stroke="black"/>
                <path d="M 480,224 L 480,256" fill="none" stroke="black"/>
                <path d="M 136,32 L 376,32" fill="none" stroke="black"/>
                <path d="M 136,64 L 376,64" fill="none" stroke="black"/>
                <path d="M 64,96 L 200,96" fill="none" stroke="black"/>
                <path d="M 312,96 L 448,96" fill="none" stroke="black"/>
                <path d="M 64,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 312,128 L 448,128" fill="none" stroke="black"/>
                <path d="M 32,160 L 104,160" fill="none" stroke="black"/>
                <path d="M 160,158 L 232,158" fill="none" stroke="black"/>
                <path d="M 160,162 L 232,162" fill="none" stroke="black"/>
                <path d="M 288,160 Q 290,156.8 292,160 Q 294,163.2 296,160 Q 298,156.8 300,160 Q 302,163.2 304,160 Q 306,156.8 308,160 Q 310,163.2 312,160 Q 314,156.8 316,160 Q 318,163.2 320,160 Q 322,156.8 324,160 Q 326,163.2 328,160 Q 330,156.8 332,160 Q 334,163.2 336,160 Q 338,156.8 340,160 Q 342,163.2 344,160 Q 346,156.8 348,160 Q 350,163.2 352,160 Q 354,156.8 356,160 Q 358,163.2 360,160 Q 362,156.8 364,160 Q 366,163.2 368,160 " fill="none" stroke="black"/>
                <path d="M 32,192 L 104,192" fill="none" stroke="black"/>
                <path d="M 160,190 L 232,190" fill="none" stroke="black"/>
                <path d="M 160,194 L 232,194" fill="none" stroke="black"/>
                <path d="M 288,192 Q 290,188.8 292,192 Q 294,195.2 296,192 Q 298,188.8 300,192 Q 302,195.2 304,192 Q 306,188.8 308,192 Q 310,195.2 312,192 Q 314,188.8 316,192 Q 318,195.2 320,192 Q 322,188.8 324,192 Q 326,195.2 328,192 Q 330,188.8 332,192 Q 334,195.2 336,192 Q 338,188.8 340,192 Q 342,195.2 344,192 Q 346,188.8 348,192 Q 350,195.2 352,192 Q 354,188.8 356,192 Q 358,195.2 360,192 Q 362,188.8 364,192 Q 366,195.2 368,192 " fill="none" stroke="black"/>
                <path d="M 8,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,222 L 184,222" fill="none" stroke="black"/>
                <path d="M 136,226 L 184,226" fill="none" stroke="black"/>
                <path d="M 200,222 L 248,222" fill="none" stroke="black"/>
                <path d="M 200,226 L 248,226" fill="none" stroke="black"/>
                <path d="M 264,224 Q 266,220.8 268,224 Q 270,227.2 272,224 Q 274,220.8 276,224 Q 278,227.2 280,224 Q 282,220.8 284,224 Q 286,227.2 288,224 Q 290,220.8 292,224 Q 294,227.2 296,224 Q 298,220.8 300,224 Q 302,227.2 304,224 Q 306,220.8 308,224 Q 310,227.2 312,224 Q 314,220.8 316,224 Q 318,227.2 320,224 " fill="none" stroke="black"/>
                <path d="M 336,224 Q 338,220.8 340,224 Q 342,227.2 344,224 Q 346,220.8 348,224 Q 350,227.2 352,224 Q 354,220.8 356,224 Q 358,227.2 360,224 Q 362,220.8 364,224 Q 366,227.2 368,224 Q 370,220.8 372,224 Q 374,227.2 376,224 Q 378,220.8 380,224 Q 382,227.2 384,224 Q 386,220.8 388,224 Q 390,227.2 392,224 Q 394,220.8 396,224 Q 398,227.2 400,224 " fill="none" stroke="black"/>
                <path d="M 416,224 L 480,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,254 L 184,254" fill="none" stroke="black"/>
                <path d="M 136,258 L 184,258" fill="none" stroke="black"/>
                <path d="M 200,254 L 248,254" fill="none" stroke="black"/>
                <path d="M 200,258 L 248,258" fill="none" stroke="black"/>
                <path d="M 264,256 Q 266,252.8 268,256 Q 270,259.2 272,256 Q 274,252.8 276,256 Q 278,259.2 280,256 Q 282,252.8 284,256 Q 286,259.2 288,256 Q 290,252.8 292,256 Q 294,259.2 296,256 Q 298,252.8 300,256 Q 302,259.2 304,256 Q 306,252.8 308,256 Q 310,259.2 312,256 Q 314,252.8 316,256 Q 318,259.2 320,256 " fill="none" stroke="black"/>
                <path d="M 336,256 Q 338,252.8 340,256 Q 342,259.2 344,256 Q 346,252.8 348,256 Q 350,259.2 352,256 Q 354,252.8 356,256 Q 358,259.2 360,256 Q 362,252.8 364,256 Q 366,259.2 368,256 Q 370,252.8 372,256 Q 374,259.2 376,256 Q 378,252.8 380,256 Q 382,259.2 384,256 Q 386,252.8 388,256 Q 390,259.2 392,256 Q 394,252.8 396,256 Q 398,259.2 400,256 " fill="none" stroke="black"/>
                <path d="M 416,256 L 480,256" fill="none" stroke="black"/>
                <path d="M 8,288 L 24,288" fill="none" stroke="black"/>
                <path d="M 40,288 L 56,288" fill="none" stroke="black"/>
                <path d="M 72,288 L 88,288" fill="none" stroke="black"/>
                <path d="M 104,288 L 120,288" fill="none" stroke="black"/>
                <path d="M 136,286 L 152,286" fill="none" stroke="black"/>
                <path d="M 136,290 L 152,290" fill="none" stroke="black"/>
                <path d="M 168,286 L 184,286" fill="none" stroke="black"/>
                <path d="M 168,290 L 184,290" fill="none" stroke="black"/>
                <path d="M 200,286 L 216,286" fill="none" stroke="black"/>
                <path d="M 200,290 L 216,290" fill="none" stroke="black"/>
                <path d="M 232,286 L 248,286" fill="none" stroke="black"/>
                <path d="M 232,290 L 248,290" fill="none" stroke="black"/>
                <path d="M 264,288 Q 266,284.8 268,288 Q 270,291.2 272,288 Q 274,284.8 276,288 Q 278,291.2 280,288 " fill="none" stroke="black"/>
                <path d="M 296,288 Q 298,284.8 300,288 Q 302,291.2 304,288 Q 306,284.8 308,288 Q 310,291.2 312,288 " fill="none" stroke="black"/>
                <path d="M 328,288 Q 330,284.8 332,288 Q 334,291.2 336,288 Q 338,284.8 340,288 Q 342,291.2 344,288 Q 346,284.8 348,288 Q 350,291.2 352,288 " fill="none" stroke="black"/>
                <path d="M 368,288 Q 370,284.8 372,288 Q 374,291.2 376,288 Q 378,284.8 380,288 Q 382,291.2 384,288 Q 386,284.8 388,288 Q 390,291.2 392,288 " fill="none" stroke="black"/>
                <path d="M 408,288 Q 410,284.8 412,288 Q 414,291.2 416,288 Q 418,284.8 420,288 Q 422,291.2 424,288 Q 426,284.8 428,288 Q 430,291.2 432,288 " fill="none" stroke="black"/>
                <path d="M 448,288 L 472,288" fill="none" stroke="black"/>
                <path d="M 8,320 L 24,320" fill="none" stroke="black"/>
                <path d="M 40,320 L 56,320" fill="none" stroke="black"/>
                <path d="M 72,320 L 88,320" fill="none" stroke="black"/>
                <path d="M 104,320 L 120,320" fill="none" stroke="black"/>
                <path d="M 136,318 L 152,318" fill="none" stroke="black"/>
                <path d="M 136,322 L 152,322" fill="none" stroke="black"/>
                <path d="M 168,318 L 184,318" fill="none" stroke="black"/>
                <path d="M 168,322 L 184,322" fill="none" stroke="black"/>
                <path d="M 200,318 L 216,318" fill="none" stroke="black"/>
                <path d="M 200,322 L 216,322" fill="none" stroke="black"/>
                <path d="M 232,318 L 248,318" fill="none" stroke="black"/>
                <path d="M 232,322 L 248,322" fill="none" stroke="black"/>
                <path d="M 264,320 Q 266,316.8 268,320 Q 270,323.2 272,320 Q 274,316.8 276,320 Q 278,323.2 280,320 " fill="none" stroke="black"/>
                <path d="M 296,320 Q 298,316.8 300,320 Q 302,323.2 304,320 Q 306,316.8 308,320 Q 310,323.2 312,320 " fill="none" stroke="black"/>
                <path d="M 328,320 Q 330,316.8 332,320 Q 334,323.2 336,320 Q 338,316.8 340,320 Q 342,323.2 344,320 Q 346,316.8 348,320 Q 350,323.2 352,320 " fill="none" stroke="black"/>
                <path d="M 368,320 Q 370,316.8 372,320 Q 374,323.2 376,320 Q 378,316.8 380,320 Q 382,323.2 384,320 Q 386,316.8 388,320 Q 390,323.2 392,320 " fill="none" stroke="black"/>
                <path d="M 408,320 Q 410,316.8 412,320 Q 414,323.2 416,320 Q 418,316.8 420,320 Q 422,323.2 424,320 Q 426,316.8 428,320 Q 430,323.2 432,320 " fill="none" stroke="black"/>
                <path d="M 448,320 L 472,320" fill="none" stroke="black"/>
                <g class="text">
                  <text x="248" y="52">[0,</text>
                  <text x="280" y="52">14)</text>
                  <text x="160" y="84">/</text>
                  <text x="352" y="84">\</text>
                  <text x="120" y="116">[0,</text>
                  <text x="148" y="116">8)</text>
                  <text x="368" y="116">[8,</text>
                  <text x="400" y="116">14)</text>
                  <text x="72" y="148">/</text>
                  <text x="192" y="148">\</text>
                  <text x="336" y="148">/</text>
                  <text x="56" y="180">[0,</text>
                  <text x="84" y="180">4)</text>
                  <text x="184" y="180">[4,</text>
                  <text x="212" y="180">8)</text>
                  <text x="312" y="180">[8,</text>
                  <text x="344" y="180">12)</text>
                  <text x="40" y="212">/</text>
                  <text x="96" y="212">\</text>
                  <text x="168" y="212">/</text>
                  <text x="224" y="212">\</text>
                  <text x="304" y="212">/</text>
                  <text x="360" y="212">\</text>
                  <text x="32" y="244">[0,2)</text>
                  <text x="96" y="244">[2,4)</text>
                  <text x="160" y="244">[4,6)</text>
                  <text x="224" y="244">[6,8)</text>
                  <text x="292" y="244">[8,10)</text>
                  <text x="368" y="244">[10,12)</text>
                  <text x="448" y="244">[12,14)</text>
                  <text x="24" y="276">/</text>
                  <text x="40" y="276">\</text>
                  <text x="88" y="276">/</text>
                  <text x="104" y="276">\</text>
                  <text x="152" y="276">/</text>
                  <text x="168" y="276">\</text>
                  <text x="216" y="276">/</text>
                  <text x="232" y="276">\</text>
                  <text x="280" y="276">/</text>
                  <text x="296" y="276">\</text>
                  <text x="352" y="276">/</text>
                  <text x="368" y="276">\</text>
                  <text x="432" y="276">/</text>
                  <text x="448" y="276">\</text>
                  <text x="16" y="308">0</text>
                  <text x="48" y="308">1</text>
                  <text x="80" y="308">2</text>
                  <text x="112" y="308">3</text>
                  <text x="144" y="308">4</text>
                  <text x="176" y="308">5</text>
                  <text x="208" y="308">6</text>
                  <text x="240" y="308">7</text>
                  <text x="272" y="308">8</text>
                  <text x="304" y="308">9</text>
                  <text x="340" y="308">10</text>
                  <text x="380" y="308">11</text>
                  <text x="420" y="308">12</text>
                  <text x="460" y="308">13</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                +-----------------------------+
                |            [0, 14)          |
                +-----------------------------+
                   /                       \
       +----------------+             +----------------+
       |     [0, 8)     |             |     [8, 14)    |
       +----------------+             +----------------+
        /              \                 /           |
   +--------+      +========+      +~~~~~~~~~+       |
   | [0, 4) |      | [4, 8) |      | [8, 12) |       |
   +--------+      +========+      +~~~~~~~~~+       |
    /      \        /      \         /      \        |
+-----+ +-----+ +=====+ +=====+ +~~~~~~+ +~~~~~~~+ +-------+
|[0,2)| |[2,4)| |[4,6)| |[6,8)| |[8,10)| |[10,12)| |[12,14)|
+-----+ +-----+ +=====+ +=====+ +~~~~~~+ +~~~~~~~+ +-------+
  / \     / \     / \     / \     / \      / \       / \
+-+ +-+ +-+ +-+ +=+ +=+ +=+ +=+ +~+ +~+ +~~+ +~~+ +~~+ +--+
|0| |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| |11| |12| |13|
+-+ +-+ +-+ +-+ +=+ +=+ +=+ +=+ +~+ +~+ +~~+ +~~+ +~~+ +--+
]]></artwork>
          </artset>
        </figure>
        <t><xref target="subtrees-explain"/> discusses subtrees in more detail.</t>
      </section>
      <section anchor="subtree-inclusion-proofs">
        <name>Subtree Inclusion Proofs</name>
        <t>Subtrees are Merkle Trees, so entries can be proven to be contained in the subtree. A subtree inclusion proof for entry <tt>index</tt> of the subtree <tt>[start, end)</tt> is a Merkle inclusion proof, as defined in <xref section="2.1.3.1" sectionFormat="of" target="RFC9162"/>, where <tt>m</tt> is <tt>index - start</tt> and the tree inputs are <tt>D[start:end]</tt>.</t>
        <t>Subtree inclusion proofs contain a sequence of nodes that are sufficient to reconstruct the subtree hash, <tt>MTH(D[start:end])</tt>, out of the hash for entry <tt>index</tt>, <tt>MTH({d[index]})</tt>, thus demonstrating that the subtree hash contains the entry's hash.</t>
        <t>A subtree inclusion proof for a subtree of size <tt>n</tt> contains at most ceil(log2(n)) hashes, or <tt>BIT_WIDTH(n - 1)</tt> hashes.</t>
        <section anchor="example-subtree-inclusion-proofs">
          <name>Example Subtree Inclusion Proofs</name>
          <t>The inclusion proof for entry 10 of subtree <tt>[8, 13)</tt> contains the hashes <tt>MTH({d[11]})</tt>, <tt>MTH(D[8:10])</tt>, and <tt>MTH({d[12]})</tt>, depicted in  <xref target="fig-subtree-inclusion-proof"/>. <tt>MTH({d[10]})</tt> is not part of the proof because the verifier is assumed to already know its value.</t>
          <figure anchor="fig-subtree-inclusion-proof">
            <name>An example subtree inclusion proof</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="200" viewBox="0 0 200 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                  <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                  <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                  <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                  <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                  <path d="M 56,32 L 56,64" fill="none" stroke="black"/>
                  <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                  <path d="M 64,160 L 64,192" fill="none" stroke="black"/>
                  <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                  <path d="M 80,160 L 80,192" fill="none" stroke="black"/>
                  <path d="M 96,224 L 96,256" fill="none" stroke="black"/>
                  <path d="M 112,96 L 112,128" fill="none" stroke="black"/>
                  <path d="M 112,224 L 112,256" fill="none" stroke="black"/>
                  <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                  <path d="M 144,160 L 144,192" fill="none" stroke="black"/>
                  <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                  <path d="M 168,72 L 168,208" fill="none" stroke="black"/>
                  <path d="M 176,224 L 176,256" fill="none" stroke="black"/>
                  <path d="M 192,32 L 192,64" fill="none" stroke="black"/>
                  <path d="M 56,32 L 192,32" fill="none" stroke="black"/>
                  <path d="M 56,64 L 192,64" fill="none" stroke="black"/>
                  <path d="M 32,96 L 112,96" fill="none" stroke="black"/>
                  <path d="M 32,128 L 112,128" fill="none" stroke="black"/>
                  <path d="M 8,158 L 64,158" fill="none" stroke="black"/>
                  <path d="M 8,162 L 64,162" fill="none" stroke="black"/>
                  <path d="M 80,160 L 144,160" fill="none" stroke="black"/>
                  <path d="M 8,190 L 64,190" fill="none" stroke="black"/>
                  <path d="M 8,194 L 64,194" fill="none" stroke="black"/>
                  <path d="M 80,192 L 144,192" fill="none" stroke="black"/>
                  <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                  <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                  <path d="M 72,224 Q 74,220.8 76,224 Q 78,227.2 80,224 Q 82,220.8 84,224 Q 86,227.2 88,224 Q 90,220.8 92,224 Q 94,227.2 96,224 " fill="none" stroke="black"/>
                  <path d="M 112,222 L 136,222" fill="none" stroke="black"/>
                  <path d="M 112,226 L 136,226" fill="none" stroke="black"/>
                  <path d="M 152,222 L 176,222" fill="none" stroke="black"/>
                  <path d="M 152,226 L 176,226" fill="none" stroke="black"/>
                  <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                  <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                  <path d="M 72,256 Q 74,252.8 76,256 Q 78,259.2 80,256 Q 82,252.8 84,256 Q 86,259.2 88,256 Q 90,252.8 92,256 Q 94,259.2 96,256 " fill="none" stroke="black"/>
                  <path d="M 112,254 L 136,254" fill="none" stroke="black"/>
                  <path d="M 112,258 L 136,258" fill="none" stroke="black"/>
                  <path d="M 152,254 L 176,254" fill="none" stroke="black"/>
                  <path d="M 152,258 L 176,258" fill="none" stroke="black"/>
                  <g class="text">
                    <text x="112" y="52">[8,</text>
                    <text x="144" y="52">13)</text>
                    <text x="80" y="84">/</text>
                    <text x="56" y="116">[8,</text>
                    <text x="88" y="116">12)</text>
                    <text x="48" y="148">/</text>
                    <text x="104" y="148">\</text>
                    <text x="36" y="180">[8,10)</text>
                    <text x="112" y="180">[10,12)</text>
                    <text x="24" y="212">/</text>
                    <text x="40" y="212">\</text>
                    <text x="96" y="212">/</text>
                    <text x="112" y="212">\</text>
                    <text x="16" y="244">8</text>
                    <text x="48" y="244">9</text>
                    <text x="84" y="244">10</text>
                    <text x="124" y="244">11</text>
                    <text x="164" y="244">12</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
      +----------------+
      |     [8, 13)    |
      +----------------+
         /          |
   +---------+      |
   | [8, 12) |      |
   +---------+      |
     /      \       |
+======+ +-------+  |
|[8,10)| |[10,12)|  |
+======+ +-------+  |
  / \      / \      |
+-+ +-+ +~~+ +==+ +==+
|8| |9| |10| |11| |12|
+-+ +-+ +~~+ +==+ +==+
]]></artwork>
            </artset>
          </figure>
        </section>
        <section anchor="evaluating-a-subtree-inclusion-proof">
          <name>Evaluating a Subtree Inclusion Proof</name>
          <t>Given a subtree inclusion proof, <tt>inclusion_proof</tt>, for entry <tt>index</tt>, with hash <tt>entry_hash</tt>, of a subtree <tt>[start, end)</tt>, the subtree inclusion proof can be <em>evaluated</em> to compute the expected subtree hash:</t>
          <!-- If changing this procedure, remember to update {{inclusion-proof-evaluation-explain}} -->

<ol spacing="normal" type="1"><li>
              <t>Check that <tt>[start, end)</tt> is a valid subtree (<xref target="definition-of-a-subtree"/>), and that <tt>start &lt;= index &lt; end</tt>. If either does not hold, fail proof evaluation.</t>
            </li>
            <li>
              <t>Set <tt>fn</tt> to <tt>index - start</tt> and <tt>sn</tt> to <tt>end - start - 1</tt>.</t>
            </li>
            <li>
              <t>Set <tt>r</tt> to <tt>entry_hash</tt>.</t>
            </li>
            <li>
              <t>For each value <tt>p</tt> in the <tt>inclusion_proof</tt> array:  </t>
              <ol spacing="normal" type="1"><li>
                  <t>If <tt>sn</tt> is 0, then stop the iteration and fail proof evaluation.</t>
                </li>
                <li>
                  <t>If <tt>LSB(fn)</tt> is set, or if <tt>fn</tt> is equal to <tt>sn</tt>, then:      </t>
                  <ol spacing="normal" type="1"><li>
                      <t>Set <tt>r</tt> to <tt>HASH(0x01 || p || r)</tt>.</t>
                    </li>
                    <li>
                      <t>Until <tt>LSB(fn)</tt> is set, right-shift <tt>fn</tt> and <tt>sn</tt> equally.</t>
                    </li>
                  </ol>
                  <t>
Otherwise:      </t>
                  <ol spacing="normal" type="1"><li>
                      <t>Set <tt>r</tt> to <tt>HASH(0x01 || r || p)</tt>.</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>Finally, right-shift both <tt>fn</tt> and <tt>sn</tt> one time.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>If <tt>sn</tt> is not zero, fail proof evaluation.</t>
            </li>
            <li>
              <t>Return <tt>r</tt> as the expected subtree hash.</t>
            </li>
          </ol>
          <t>This is the same as the procedure in <xref section="2.1.3.2" sectionFormat="of" target="RFC9162"/>, where <tt>leaf_index</tt> is <tt>index - start</tt>, <tt>tree_size</tt> is <tt>end - start</tt>, and <tt>r</tt> is returned instead of compared with <tt>root_hash</tt>.</t>
          <t><xref target="inclusion-proof-evaluation-explain"/> explains this procedure in more detail.</t>
        </section>
        <section anchor="verifying-a-subtree-inclusion-proof">
          <name>Verifying a Subtree Inclusion Proof</name>
          <t>Given a subtree inclusion proof, <tt>inclusion_proof</tt>, for entry <tt>index</tt>, with hash <tt>entry_hash</tt>, of a subtree <tt>[start, end)</tt> with hash <tt>subtree_hash</tt>, the subtree inclusion proof can be <em>verified</em> to verify the described entry is contained in the subtree:</t>
          <ol spacing="normal" type="1"><li>
              <t>Let <tt>expected_subtree_hash</tt> be the result of evaluating the inclusion proof as described <xref target="evaluating-a-subtree-inclusion-proof"/>. If evaluation fails, fail the proof verification.</t>
            </li>
            <li>
              <t>If <tt>subtree_hash</tt> is equal to <tt>expected_subtree_hash</tt>, the entry is contained in the subtree. Otherwise, fail the proof verification.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="subtree-consistency-proofs">
        <name>Subtree Consistency Proofs</name>
        <t>A subtree <tt>[start, end)</tt> can be efficiently proven to be consistent with the full Merkle Tree. That is, given <tt>MTH(D[start:end])</tt> and <tt>MTH(D_n)</tt>, the proof demonstrates that the input <tt>D[start:end]</tt> to the subtree hash was equal to the corresponding elements of the input <tt>D_n</tt> to the Merkle Tree hash.</t>
        <t>Subtree consistency proofs contain sufficient nodes to reconstruct both the subtree hash, <tt>MTH(D[start:end])</tt>, and the original tree hash, <tt>MTH(D_n)</tt>, in such a way that every input to the subtree hash was also incorporated into the original tree hash.</t>
        <section anchor="generating-a-subtree-consistency-proof">
          <name>Generating a Subtree Consistency Proof</name>
          <t>The subtree consistency proof, <tt>SUBTREE_PROOF(start, end, D_n)</tt> is defined similarly to <xref section="2.1.4.1" sectionFormat="of" target="RFC9162"/>.</t>
          <t>If <tt>start = end</tt>, the consistency proof is empty:</t>
          <sourcecode type="pseudocode"><![CDATA[
SUBTREE_PROOF(start, start, D_n) = {}
]]></sourcecode>
          <t>Otherwise, <tt>start &lt; end</tt> and <tt>SUBTREE_PROOF</tt> is defined by a helper function:</t>
          <sourcecode type="pseudocode"><![CDATA[
SUBTREE_PROOF(start, end, D_n) =
    SUBTREE_SUBPROOF(start, end, D_n, true)
]]></sourcecode>
          <t>The boolean parameter tracks whether the first hash in the proof will be omitted by the base case. The first hash is omitted when it's equal to the original subtree hash <tt>MTH(D[start:end])</tt>, since the verifier will already know that hash. That happens when the original subtree's root is a node in the Merkle Tree constructed from <tt>D_n</tt>, or equivalently, when the original subtree is full or has <tt>end = n</tt>.</t>
          <t>If <tt>start = 0</tt> and <tt>end = n</tt>, the subtree is the root (base case):</t>
          <sourcecode type="pseudocode"><![CDATA[
SUBTREE_SUBPROOF(0, n, D_n, true) = {}
SUBTREE_SUBPROOF(0, n, D_n, false) = {MTH(D_n)}
]]></sourcecode>
          <t>Otherwise, <tt>n &gt; 1</tt>. Let <tt>k</tt> be the largest power of two smaller than <tt>n</tt>. The consistency proof is defined recursively as:</t>
          <ul spacing="normal">
            <li>
              <t>If <tt>end &lt;= k</tt>, the subtree is on the left of <tt>k</tt>. The proof proves consistency with the left child and includes the right child:  </t>
              <sourcecode type="pseudocode"><![CDATA[
SUBTREE_SUBPROOF(start, end, D_n, b) =
    SUBTREE_SUBPROOF(start, end, D[0:k], b) : MTH(D[k:n])
]]></sourcecode>
            </li>
            <li>
              <t>If <tt>k &lt;= start</tt>, the subtree is on the right of <tt>k</tt>. The proof proves consistency with the right child and includes the left child.  </t>
              <sourcecode type="pseudocode"><![CDATA[
SUBTREE_SUBPROOF(start, end, D_n, b) =
    SUBTREE_SUBPROOF(start - k, end - k, D[k:n], b) : MTH(D[0:k])
]]></sourcecode>
            </li>
            <li>
              <t>Otherwise, <tt>start &lt; k &lt; end</tt>, which implies <tt>start = 0</tt>. The proof proves consistency with the right child and includes the left child.  </t>
              <sourcecode type="pseudocode"><![CDATA[
SUBTREE_SUBPROOF(0, end, D_n, b) =
    SUBTREE_SUBPROOF(0, end - k, D[k:n], false) : MTH(D[0:k])
]]></sourcecode>
            </li>
          </ul>
          <t>When <tt>start</tt> is zero, this computes a Merkle consistency proof:</t>
          <sourcecode type="pseudocode"><![CDATA[
SUBTREE_PROOF(0, end, D_n) = PROOF(end, D_n)
]]></sourcecode>
          <t>When <tt>end = start + 1</tt>, this computes a Merkle inclusion proof:</t>
          <sourcecode type="pseudocode"><![CDATA[
SUBTREE_PROOF(start, start + 1, D_n) = PATH(start, D_n)
]]></sourcecode>
          <t><xref target="consistency-proof-structure"/> explains the structure of a subtree consistency proof in more detail.</t>
        </section>
        <section anchor="example-subtree-consistency-proofs">
          <name>Example Subtree Consistency Proofs</name>
          <t>The subtree consistency proof for <tt>[4, 8)</tt> and a tree of size 14 contains <tt>MTH(D[0:4])</tt> and <tt>MTH(D[8:14])</tt>, depicted in <xref target="fig-subtree-consistency-example-1"/> with doubled lines. The verifier is assumed to know the subtree hash, so there is no need to include <tt>MTH(D[4:8])</tt>, depicted with wavy lines, in the consistency proof.</t>
          <figure anchor="fig-subtree-consistency-example-1">
            <name>An example subtree consistency proof that begins at the root of the subtree</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="528" width="488" viewBox="0 0 488 528" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,96 L 8,128" fill="none" stroke="black"/>
                  <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                  <path d="M 8,416 L 8,448" fill="none" stroke="black"/>
                  <path d="M 8,480 L 8,512" fill="none" stroke="black"/>
                  <path d="M 24,160 L 24,192" fill="none" stroke="black"/>
                  <path d="M 24,480 L 24,512" fill="none" stroke="black"/>
                  <path d="M 32,32 L 32,64" fill="none" stroke="black"/>
                  <path d="M 32,352 L 32,384" fill="none" stroke="black"/>
                  <path d="M 40,160 L 40,192" fill="none" stroke="black"/>
                  <path d="M 40,480 L 40,512" fill="none" stroke="black"/>
                  <path d="M 56,96 L 56,128" fill="none" stroke="black"/>
                  <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                  <path d="M 56,416 L 56,448" fill="none" stroke="black"/>
                  <path d="M 56,480 L 56,512" fill="none" stroke="black"/>
                  <path d="M 64,288 L 64,320" fill="none" stroke="black"/>
                  <path d="M 72,96 L 72,128" fill="none" stroke="black"/>
                  <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                  <path d="M 72,416 L 72,448" fill="none" stroke="black"/>
                  <path d="M 72,480 L 72,512" fill="none" stroke="black"/>
                  <path d="M 88,160 L 88,192" fill="none" stroke="black"/>
                  <path d="M 88,480 L 88,512" fill="none" stroke="black"/>
                  <path d="M 104,32 L 104,64" fill="none" stroke="black"/>
                  <path d="M 104,160 L 104,192" fill="none" stroke="black"/>
                  <path d="M 104,352 L 104,384" fill="none" stroke="black"/>
                  <path d="M 104,480 L 104,512" fill="none" stroke="black"/>
                  <path d="M 120,96 L 120,128" fill="none" stroke="black"/>
                  <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                  <path d="M 120,416 L 120,448" fill="none" stroke="black"/>
                  <path d="M 120,480 L 120,512" fill="none" stroke="black"/>
                  <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                  <path d="M 136,416 L 136,448" fill="none" stroke="black"/>
                  <path d="M 136,480 L 136,512" fill="none" stroke="black"/>
                  <path d="M 152,480 L 152,512" fill="none" stroke="black"/>
                  <path d="M 160,352 L 160,384" fill="none" stroke="black"/>
                  <path d="M 168,480 L 168,512" fill="none" stroke="black"/>
                  <path d="M 184,416 L 184,448" fill="none" stroke="black"/>
                  <path d="M 184,480 L 184,512" fill="none" stroke="black"/>
                  <path d="M 200,288 L 200,320" fill="none" stroke="black"/>
                  <path d="M 200,416 L 200,448" fill="none" stroke="black"/>
                  <path d="M 200,480 L 200,512" fill="none" stroke="black"/>
                  <path d="M 216,480 L 216,512" fill="none" stroke="black"/>
                  <path d="M 232,352 L 232,384" fill="none" stroke="black"/>
                  <path d="M 232,480 L 232,512" fill="none" stroke="black"/>
                  <path d="M 248,416 L 248,448" fill="none" stroke="black"/>
                  <path d="M 248,480 L 248,512" fill="none" stroke="black"/>
                  <path d="M 264,416 L 264,448" fill="none" stroke="black"/>
                  <path d="M 264,480 L 264,512" fill="none" stroke="black"/>
                  <path d="M 280,480 L 280,512" fill="none" stroke="black"/>
                  <path d="M 288,352 L 288,384" fill="none" stroke="black"/>
                  <path d="M 296,480 L 296,512" fill="none" stroke="black"/>
                  <path d="M 312,288 L 312,320" fill="none" stroke="black"/>
                  <path d="M 312,480 L 312,512" fill="none" stroke="black"/>
                  <path d="M 320,416 L 320,448" fill="none" stroke="black"/>
                  <path d="M 328,480 L 328,512" fill="none" stroke="black"/>
                  <path d="M 336,416 L 336,448" fill="none" stroke="black"/>
                  <path d="M 352,480 L 352,512" fill="none" stroke="black"/>
                  <path d="M 368,352 L 368,384" fill="none" stroke="black"/>
                  <path d="M 368,480 L 368,512" fill="none" stroke="black"/>
                  <path d="M 376,224 L 376,256" fill="none" stroke="black"/>
                  <path d="M 392,480 L 392,512" fill="none" stroke="black"/>
                  <path d="M 400,416 L 400,448" fill="none" stroke="black"/>
                  <path d="M 408,480 L 408,512" fill="none" stroke="black"/>
                  <path d="M 416,416 L 416,448" fill="none" stroke="black"/>
                  <path d="M 432,336 L 432,408" fill="none" stroke="black"/>
                  <path d="M 432,480 L 432,512" fill="none" stroke="black"/>
                  <path d="M 448,288 L 448,320" fill="none" stroke="black"/>
                  <path d="M 448,480 L 448,512" fill="none" stroke="black"/>
                  <path d="M 472,480 L 472,512" fill="none" stroke="black"/>
                  <path d="M 480,416 L 480,448" fill="none" stroke="black"/>
                  <path d="M 32,32 Q 34,28.8 36,32 Q 38,35.2 40,32 Q 42,28.8 44,32 Q 46,35.2 48,32 Q 50,28.8 52,32 Q 54,35.2 56,32 Q 58,28.8 60,32 Q 62,35.2 64,32 Q 66,28.8 68,32 Q 70,35.2 72,32 Q 74,28.8 76,32 Q 78,35.2 80,32 Q 82,28.8 84,32 Q 86,35.2 88,32 Q 90,28.8 92,32 Q 94,35.2 96,32 Q 98,28.8 100,32 Q 102,35.2 104,32 " fill="none" stroke="black"/>
                  <path d="M 32,64 Q 34,60.8 36,64 Q 38,67.2 40,64 Q 42,60.8 44,64 Q 46,67.2 48,64 Q 50,60.8 52,64 Q 54,67.2 56,64 Q 58,60.8 60,64 Q 62,67.2 64,64 Q 66,60.8 68,64 Q 70,67.2 72,64 Q 74,60.8 76,64 Q 78,67.2 80,64 Q 82,60.8 84,64 Q 86,67.2 88,64 Q 90,60.8 92,64 Q 94,67.2 96,64 Q 98,60.8 100,64 Q 102,67.2 104,64 " fill="none" stroke="black"/>
                  <path d="M 8,96 L 56,96" fill="none" stroke="black"/>
                  <path d="M 72,96 L 120,96" fill="none" stroke="black"/>
                  <path d="M 8,128 L 56,128" fill="none" stroke="black"/>
                  <path d="M 72,128 L 120,128" fill="none" stroke="black"/>
                  <path d="M 8,160 L 24,160" fill="none" stroke="black"/>
                  <path d="M 40,160 L 56,160" fill="none" stroke="black"/>
                  <path d="M 72,160 L 88,160" fill="none" stroke="black"/>
                  <path d="M 104,160 L 120,160" fill="none" stroke="black"/>
                  <path d="M 8,192 L 24,192" fill="none" stroke="black"/>
                  <path d="M 40,192 L 56,192" fill="none" stroke="black"/>
                  <path d="M 72,192 L 88,192" fill="none" stroke="black"/>
                  <path d="M 104,192 L 120,192" fill="none" stroke="black"/>
                  <path d="M 136,224 L 376,224" fill="none" stroke="black"/>
                  <path d="M 136,256 L 376,256" fill="none" stroke="black"/>
                  <path d="M 64,288 L 200,288" fill="none" stroke="black"/>
                  <path d="M 312,286 L 448,286" fill="none" stroke="black"/>
                  <path d="M 312,290 L 448,290" fill="none" stroke="black"/>
                  <path d="M 64,320 L 200,320" fill="none" stroke="black"/>
                  <path d="M 312,318 L 448,318" fill="none" stroke="black"/>
                  <path d="M 312,322 L 448,322" fill="none" stroke="black"/>
                  <path d="M 32,350 L 104,350" fill="none" stroke="black"/>
                  <path d="M 32,354 L 104,354" fill="none" stroke="black"/>
                  <path d="M 160,352 Q 162,348.8 164,352 Q 166,355.2 168,352 Q 170,348.8 172,352 Q 174,355.2 176,352 Q 178,348.8 180,352 Q 182,355.2 184,352 Q 186,348.8 188,352 Q 190,355.2 192,352 Q 194,348.8 196,352 Q 198,355.2 200,352 Q 202,348.8 204,352 Q 206,355.2 208,352 Q 210,348.8 212,352 Q 214,355.2 216,352 Q 218,348.8 220,352 Q 222,355.2 224,352 Q 226,348.8 228,352 Q 230,355.2 232,352 " fill="none" stroke="black"/>
                  <path d="M 288,352 L 368,352" fill="none" stroke="black"/>
                  <path d="M 32,382 L 104,382" fill="none" stroke="black"/>
                  <path d="M 32,386 L 104,386" fill="none" stroke="black"/>
                  <path d="M 160,384 Q 162,380.8 164,384 Q 166,387.2 168,384 Q 170,380.8 172,384 Q 174,387.2 176,384 Q 178,380.8 180,384 Q 182,387.2 184,384 Q 186,380.8 188,384 Q 190,387.2 192,384 Q 194,380.8 196,384 Q 198,387.2 200,384 Q 202,380.8 204,384 Q 206,387.2 208,384 Q 210,380.8 212,384 Q 214,387.2 216,384 Q 218,380.8 220,384 Q 222,387.2 224,384 Q 226,380.8 228,384 Q 230,387.2 232,384 " fill="none" stroke="black"/>
                  <path d="M 288,384 L 368,384" fill="none" stroke="black"/>
                  <path d="M 8,416 L 56,416" fill="none" stroke="black"/>
                  <path d="M 72,416 L 120,416" fill="none" stroke="black"/>
                  <path d="M 136,416 L 184,416" fill="none" stroke="black"/>
                  <path d="M 200,416 L 248,416" fill="none" stroke="black"/>
                  <path d="M 264,416 L 320,416" fill="none" stroke="black"/>
                  <path d="M 336,416 L 400,416" fill="none" stroke="black"/>
                  <path d="M 416,416 L 480,416" fill="none" stroke="black"/>
                  <path d="M 8,448 L 56,448" fill="none" stroke="black"/>
                  <path d="M 72,448 L 120,448" fill="none" stroke="black"/>
                  <path d="M 136,448 L 184,448" fill="none" stroke="black"/>
                  <path d="M 200,448 L 248,448" fill="none" stroke="black"/>
                  <path d="M 264,448 L 320,448" fill="none" stroke="black"/>
                  <path d="M 336,448 L 400,448" fill="none" stroke="black"/>
                  <path d="M 416,448 L 480,448" fill="none" stroke="black"/>
                  <path d="M 8,480 L 24,480" fill="none" stroke="black"/>
                  <path d="M 40,480 L 56,480" fill="none" stroke="black"/>
                  <path d="M 72,480 L 88,480" fill="none" stroke="black"/>
                  <path d="M 104,480 L 120,480" fill="none" stroke="black"/>
                  <path d="M 136,480 L 152,480" fill="none" stroke="black"/>
                  <path d="M 168,480 L 184,480" fill="none" stroke="black"/>
                  <path d="M 200,480 L 216,480" fill="none" stroke="black"/>
                  <path d="M 232,480 L 248,480" fill="none" stroke="black"/>
                  <path d="M 264,480 L 280,480" fill="none" stroke="black"/>
                  <path d="M 296,480 L 312,480" fill="none" stroke="black"/>
                  <path d="M 328,480 L 352,480" fill="none" stroke="black"/>
                  <path d="M 368,480 L 392,480" fill="none" stroke="black"/>
                  <path d="M 408,480 L 432,480" fill="none" stroke="black"/>
                  <path d="M 448,480 L 472,480" fill="none" stroke="black"/>
                  <path d="M 8,512 L 24,512" fill="none" stroke="black"/>
                  <path d="M 40,512 L 56,512" fill="none" stroke="black"/>
                  <path d="M 72,512 L 88,512" fill="none" stroke="black"/>
                  <path d="M 104,512 L 120,512" fill="none" stroke="black"/>
                  <path d="M 136,512 L 152,512" fill="none" stroke="black"/>
                  <path d="M 168,512 L 184,512" fill="none" stroke="black"/>
                  <path d="M 200,512 L 216,512" fill="none" stroke="black"/>
                  <path d="M 232,512 L 248,512" fill="none" stroke="black"/>
                  <path d="M 264,512 L 280,512" fill="none" stroke="black"/>
                  <path d="M 296,512 L 312,512" fill="none" stroke="black"/>
                  <path d="M 328,512 L 352,512" fill="none" stroke="black"/>
                  <path d="M 368,512 L 392,512" fill="none" stroke="black"/>
                  <path d="M 408,512 L 432,512" fill="none" stroke="black"/>
                  <path d="M 448,512 L 472,512" fill="none" stroke="black"/>
                  <g class="text">
                    <text x="56" y="52">[4,</text>
                    <text x="84" y="52">8)</text>
                    <text x="40" y="84">/</text>
                    <text x="96" y="84">\</text>
                    <text x="32" y="116">[4,6)</text>
                    <text x="96" y="116">[6,8)</text>
                    <text x="24" y="148">/</text>
                    <text x="40" y="148">\</text>
                    <text x="88" y="148">/</text>
                    <text x="104" y="148">\</text>
                    <text x="16" y="180">4</text>
                    <text x="48" y="180">5</text>
                    <text x="80" y="180">6</text>
                    <text x="112" y="180">7</text>
                    <text x="248" y="244">[0,</text>
                    <text x="280" y="244">14)</text>
                    <text x="160" y="276">/</text>
                    <text x="352" y="276">\</text>
                    <text x="120" y="308">[0,</text>
                    <text x="148" y="308">8)</text>
                    <text x="368" y="308">[8,</text>
                    <text x="400" y="308">14)</text>
                    <text x="72" y="340">/</text>
                    <text x="192" y="340">\</text>
                    <text x="336" y="340">/</text>
                    <text x="56" y="372">[0,</text>
                    <text x="84" y="372">4)</text>
                    <text x="184" y="372">[4,</text>
                    <text x="212" y="372">8)</text>
                    <text x="312" y="372">[8,</text>
                    <text x="344" y="372">12)</text>
                    <text x="40" y="404">/</text>
                    <text x="96" y="404">\</text>
                    <text x="168" y="404">/</text>
                    <text x="224" y="404">\</text>
                    <text x="304" y="404">/</text>
                    <text x="360" y="404">\</text>
                    <text x="32" y="436">[0,2)</text>
                    <text x="96" y="436">[2,4)</text>
                    <text x="160" y="436">[4,6)</text>
                    <text x="224" y="436">[6,8)</text>
                    <text x="292" y="436">[8,10)</text>
                    <text x="368" y="436">[10,12)</text>
                    <text x="448" y="436">[12,14)</text>
                    <text x="24" y="468">/</text>
                    <text x="40" y="468">\</text>
                    <text x="88" y="468">/</text>
                    <text x="104" y="468">\</text>
                    <text x="152" y="468">/</text>
                    <text x="168" y="468">\</text>
                    <text x="216" y="468">/</text>
                    <text x="232" y="468">\</text>
                    <text x="280" y="468">/</text>
                    <text x="296" y="468">\</text>
                    <text x="352" y="468">/</text>
                    <text x="368" y="468">\</text>
                    <text x="432" y="468">/</text>
                    <text x="448" y="468">\</text>
                    <text x="16" y="500">0</text>
                    <text x="48" y="500">1</text>
                    <text x="80" y="500">2</text>
                    <text x="112" y="500">3</text>
                    <text x="144" y="500">4</text>
                    <text x="176" y="500">5</text>
                    <text x="208" y="500">6</text>
                    <text x="240" y="500">7</text>
                    <text x="272" y="500">8</text>
                    <text x="304" y="500">9</text>
                    <text x="340" y="500">10</text>
                    <text x="380" y="500">11</text>
                    <text x="420" y="500">12</text>
                    <text x="460" y="500">13</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
   +~~~~~~~~+
   | [4, 8) |
   +~~~~~~~~+
    /      \
+-----+ +-----+
|[4,6)| |[6,8)|
+-----+ +-----+
  / \     / \
+-+ +-+ +-+ +-+
|4| |5| |6| |7|
+-+ +-+ +-+ +-+

                +-----------------------------+
                |            [0, 14)          |
                +-----------------------------+
                   /                       \
       +----------------+             +================+
       |     [0, 8)     |             |     [8, 14)    |
       +----------------+             +================+
        /              \                 /           |
   +========+      +~~~~~~~~+      +---------+       |
   | [0, 4) |      | [4, 8) |      | [8, 12) |       |
   +========+      +~~~~~~~~+      +---------+       |
    /      \        /      \         /      \        |
+-----+ +-----+ +-----+ +-----+ +------+ +-------+ +-------+
|[0,2)| |[2,4)| |[4,6)| |[6,8)| |[8,10)| |[10,12)| |[12,14)|
+-----+ +-----+ +-----+ +-----+ +------+ +-------+ +-------+
  / \     / \     / \     / \     / \      / \       / \
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +--+ +--+ +--+ +--+
|0| |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| |11| |12| |13|
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +--+ +--+ +--+ +--+
]]></artwork>
            </artset>
          </figure>
          <t>The subtree consistency proof for <tt>[8, 13)</tt> and a tree of size 14 contains <tt>MTH({d[12]})</tt>, <tt>MTH({d[13]})</tt>, <tt>MTH(D[8:12])</tt>, and <tt>MTH(D[0:8])</tt>, depicted in <xref target="fig-subtree-consistency-example-2"/> with doubled lines. Not every node in <tt>[8, 13)</tt> is also in the overall tree, so the proof must include sufficient nodes to reconstruct both hashes. However, there is enough overlap for the proof to be possible.</t>
          <figure anchor="fig-subtree-consistency-example-2">
            <name>An example subtree consistency proof that decomposes the subtree</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="592" width="488" viewBox="0 0 488 592" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                  <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                  <path d="M 8,480 L 8,512" fill="none" stroke="black"/>
                  <path d="M 8,544 L 8,576" fill="none" stroke="black"/>
                  <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                  <path d="M 24,544 L 24,576" fill="none" stroke="black"/>
                  <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                  <path d="M 32,416 L 32,448" fill="none" stroke="black"/>
                  <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                  <path d="M 40,544 L 40,576" fill="none" stroke="black"/>
                  <path d="M 56,32 L 56,64" fill="none" stroke="black"/>
                  <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                  <path d="M 56,480 L 56,512" fill="none" stroke="black"/>
                  <path d="M 56,544 L 56,576" fill="none" stroke="black"/>
                  <path d="M 64,160 L 64,192" fill="none" stroke="black"/>
                  <path d="M 64,352 L 64,384" fill="none" stroke="black"/>
                  <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                  <path d="M 72,480 L 72,512" fill="none" stroke="black"/>
                  <path d="M 72,544 L 72,576" fill="none" stroke="black"/>
                  <path d="M 80,160 L 80,192" fill="none" stroke="black"/>
                  <path d="M 88,544 L 88,576" fill="none" stroke="black"/>
                  <path d="M 96,224 L 96,256" fill="none" stroke="black"/>
                  <path d="M 104,416 L 104,448" fill="none" stroke="black"/>
                  <path d="M 104,544 L 104,576" fill="none" stroke="black"/>
                  <path d="M 112,96 L 112,128" fill="none" stroke="black"/>
                  <path d="M 112,224 L 112,256" fill="none" stroke="black"/>
                  <path d="M 120,480 L 120,512" fill="none" stroke="black"/>
                  <path d="M 120,544 L 120,576" fill="none" stroke="black"/>
                  <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                  <path d="M 136,288 L 136,320" fill="none" stroke="black"/>
                  <path d="M 136,480 L 136,512" fill="none" stroke="black"/>
                  <path d="M 136,544 L 136,576" fill="none" stroke="black"/>
                  <path d="M 144,160 L 144,192" fill="none" stroke="black"/>
                  <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                  <path d="M 152,544 L 152,576" fill="none" stroke="black"/>
                  <path d="M 160,416 L 160,448" fill="none" stroke="black"/>
                  <path d="M 168,72 L 168,208" fill="none" stroke="black"/>
                  <path d="M 168,544 L 168,576" fill="none" stroke="black"/>
                  <path d="M 176,224 L 176,256" fill="none" stroke="black"/>
                  <path d="M 184,480 L 184,512" fill="none" stroke="black"/>
                  <path d="M 184,544 L 184,576" fill="none" stroke="black"/>
                  <path d="M 192,32 L 192,64" fill="none" stroke="black"/>
                  <path d="M 200,352 L 200,384" fill="none" stroke="black"/>
                  <path d="M 200,480 L 200,512" fill="none" stroke="black"/>
                  <path d="M 200,544 L 200,576" fill="none" stroke="black"/>
                  <path d="M 216,544 L 216,576" fill="none" stroke="black"/>
                  <path d="M 232,416 L 232,448" fill="none" stroke="black"/>
                  <path d="M 232,544 L 232,576" fill="none" stroke="black"/>
                  <path d="M 248,480 L 248,512" fill="none" stroke="black"/>
                  <path d="M 248,544 L 248,576" fill="none" stroke="black"/>
                  <path d="M 264,480 L 264,512" fill="none" stroke="black"/>
                  <path d="M 264,544 L 264,576" fill="none" stroke="black"/>
                  <path d="M 280,544 L 280,576" fill="none" stroke="black"/>
                  <path d="M 288,416 L 288,448" fill="none" stroke="black"/>
                  <path d="M 296,544 L 296,576" fill="none" stroke="black"/>
                  <path d="M 312,352 L 312,384" fill="none" stroke="black"/>
                  <path d="M 312,544 L 312,576" fill="none" stroke="black"/>
                  <path d="M 320,480 L 320,512" fill="none" stroke="black"/>
                  <path d="M 328,544 L 328,576" fill="none" stroke="black"/>
                  <path d="M 336,480 L 336,512" fill="none" stroke="black"/>
                  <path d="M 352,544 L 352,576" fill="none" stroke="black"/>
                  <path d="M 368,416 L 368,448" fill="none" stroke="black"/>
                  <path d="M 368,544 L 368,576" fill="none" stroke="black"/>
                  <path d="M 376,288 L 376,320" fill="none" stroke="black"/>
                  <path d="M 392,544 L 392,576" fill="none" stroke="black"/>
                  <path d="M 400,480 L 400,512" fill="none" stroke="black"/>
                  <path d="M 408,544 L 408,576" fill="none" stroke="black"/>
                  <path d="M 416,480 L 416,512" fill="none" stroke="black"/>
                  <path d="M 432,392 L 432,472" fill="none" stroke="black"/>
                  <path d="M 432,544 L 432,576" fill="none" stroke="black"/>
                  <path d="M 448,352 L 448,384" fill="none" stroke="black"/>
                  <path d="M 448,544 L 448,576" fill="none" stroke="black"/>
                  <path d="M 472,544 L 472,576" fill="none" stroke="black"/>
                  <path d="M 480,480 L 480,512" fill="none" stroke="black"/>
                  <path d="M 56,32 L 192,32" fill="none" stroke="black"/>
                  <path d="M 56,64 L 192,64" fill="none" stroke="black"/>
                  <path d="M 32,94 L 112,94" fill="none" stroke="black"/>
                  <path d="M 32,98 L 112,98" fill="none" stroke="black"/>
                  <path d="M 32,126 L 112,126" fill="none" stroke="black"/>
                  <path d="M 32,130 L 112,130" fill="none" stroke="black"/>
                  <path d="M 8,160 L 64,160" fill="none" stroke="black"/>
                  <path d="M 80,160 L 144,160" fill="none" stroke="black"/>
                  <path d="M 8,192 L 64,192" fill="none" stroke="black"/>
                  <path d="M 80,192 L 144,192" fill="none" stroke="black"/>
                  <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                  <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                  <path d="M 72,224 L 96,224" fill="none" stroke="black"/>
                  <path d="M 112,224 L 136,224" fill="none" stroke="black"/>
                  <path d="M 152,222 L 176,222" fill="none" stroke="black"/>
                  <path d="M 152,226 L 176,226" fill="none" stroke="black"/>
                  <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                  <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                  <path d="M 72,256 L 96,256" fill="none" stroke="black"/>
                  <path d="M 112,256 L 136,256" fill="none" stroke="black"/>
                  <path d="M 152,254 L 176,254" fill="none" stroke="black"/>
                  <path d="M 152,258 L 176,258" fill="none" stroke="black"/>
                  <path d="M 136,288 L 376,288" fill="none" stroke="black"/>
                  <path d="M 136,320 L 376,320" fill="none" stroke="black"/>
                  <path d="M 64,350 L 200,350" fill="none" stroke="black"/>
                  <path d="M 64,354 L 200,354" fill="none" stroke="black"/>
                  <path d="M 312,352 L 448,352" fill="none" stroke="black"/>
                  <path d="M 64,382 L 200,382" fill="none" stroke="black"/>
                  <path d="M 64,386 L 200,386" fill="none" stroke="black"/>
                  <path d="M 312,384 L 448,384" fill="none" stroke="black"/>
                  <path d="M 32,416 L 104,416" fill="none" stroke="black"/>
                  <path d="M 160,416 L 232,416" fill="none" stroke="black"/>
                  <path d="M 288,414 L 368,414" fill="none" stroke="black"/>
                  <path d="M 288,418 L 368,418" fill="none" stroke="black"/>
                  <path d="M 32,448 L 104,448" fill="none" stroke="black"/>
                  <path d="M 160,448 L 232,448" fill="none" stroke="black"/>
                  <path d="M 288,446 L 368,446" fill="none" stroke="black"/>
                  <path d="M 288,450 L 368,450" fill="none" stroke="black"/>
                  <path d="M 8,480 L 56,480" fill="none" stroke="black"/>
                  <path d="M 72,480 L 120,480" fill="none" stroke="black"/>
                  <path d="M 136,480 L 184,480" fill="none" stroke="black"/>
                  <path d="M 200,480 L 248,480" fill="none" stroke="black"/>
                  <path d="M 264,480 L 320,480" fill="none" stroke="black"/>
                  <path d="M 336,480 L 400,480" fill="none" stroke="black"/>
                  <path d="M 416,480 L 480,480" fill="none" stroke="black"/>
                  <path d="M 8,512 L 56,512" fill="none" stroke="black"/>
                  <path d="M 72,512 L 120,512" fill="none" stroke="black"/>
                  <path d="M 136,512 L 184,512" fill="none" stroke="black"/>
                  <path d="M 200,512 L 248,512" fill="none" stroke="black"/>
                  <path d="M 264,512 L 320,512" fill="none" stroke="black"/>
                  <path d="M 336,512 L 400,512" fill="none" stroke="black"/>
                  <path d="M 416,512 L 480,512" fill="none" stroke="black"/>
                  <path d="M 8,544 L 24,544" fill="none" stroke="black"/>
                  <path d="M 40,544 L 56,544" fill="none" stroke="black"/>
                  <path d="M 72,544 L 88,544" fill="none" stroke="black"/>
                  <path d="M 104,544 L 120,544" fill="none" stroke="black"/>
                  <path d="M 136,544 L 152,544" fill="none" stroke="black"/>
                  <path d="M 168,544 L 184,544" fill="none" stroke="black"/>
                  <path d="M 200,544 L 216,544" fill="none" stroke="black"/>
                  <path d="M 232,544 L 248,544" fill="none" stroke="black"/>
                  <path d="M 264,544 L 280,544" fill="none" stroke="black"/>
                  <path d="M 296,544 L 312,544" fill="none" stroke="black"/>
                  <path d="M 328,544 L 352,544" fill="none" stroke="black"/>
                  <path d="M 368,544 L 392,544" fill="none" stroke="black"/>
                  <path d="M 408,542 L 432,542" fill="none" stroke="black"/>
                  <path d="M 408,546 L 432,546" fill="none" stroke="black"/>
                  <path d="M 448,542 L 472,542" fill="none" stroke="black"/>
                  <path d="M 448,546 L 472,546" fill="none" stroke="black"/>
                  <path d="M 8,576 L 24,576" fill="none" stroke="black"/>
                  <path d="M 40,576 L 56,576" fill="none" stroke="black"/>
                  <path d="M 72,576 L 88,576" fill="none" stroke="black"/>
                  <path d="M 104,576 L 120,576" fill="none" stroke="black"/>
                  <path d="M 136,576 L 152,576" fill="none" stroke="black"/>
                  <path d="M 168,576 L 184,576" fill="none" stroke="black"/>
                  <path d="M 200,576 L 216,576" fill="none" stroke="black"/>
                  <path d="M 232,576 L 248,576" fill="none" stroke="black"/>
                  <path d="M 264,576 L 280,576" fill="none" stroke="black"/>
                  <path d="M 296,576 L 312,576" fill="none" stroke="black"/>
                  <path d="M 328,576 L 352,576" fill="none" stroke="black"/>
                  <path d="M 368,576 L 392,576" fill="none" stroke="black"/>
                  <path d="M 408,574 L 432,574" fill="none" stroke="black"/>
                  <path d="M 408,578 L 432,578" fill="none" stroke="black"/>
                  <path d="M 448,574 L 472,574" fill="none" stroke="black"/>
                  <path d="M 448,578 L 472,578" fill="none" stroke="black"/>
                  <g class="text">
                    <text x="112" y="52">[8,</text>
                    <text x="144" y="52">13)</text>
                    <text x="80" y="84">/</text>
                    <text x="56" y="116">[8,</text>
                    <text x="88" y="116">12)</text>
                    <text x="48" y="148">/</text>
                    <text x="104" y="148">\</text>
                    <text x="36" y="180">[8,10)</text>
                    <text x="112" y="180">[10,12)</text>
                    <text x="24" y="212">/</text>
                    <text x="40" y="212">\</text>
                    <text x="96" y="212">/</text>
                    <text x="112" y="212">\</text>
                    <text x="16" y="244">8</text>
                    <text x="48" y="244">9</text>
                    <text x="84" y="244">10</text>
                    <text x="124" y="244">11</text>
                    <text x="164" y="244">12</text>
                    <text x="248" y="308">[0,</text>
                    <text x="280" y="308">14)</text>
                    <text x="160" y="340">/</text>
                    <text x="352" y="340">\</text>
                    <text x="120" y="372">[0,</text>
                    <text x="148" y="372">8)</text>
                    <text x="368" y="372">[8,</text>
                    <text x="400" y="372">14)</text>
                    <text x="72" y="404">/</text>
                    <text x="192" y="404">\</text>
                    <text x="336" y="404">/</text>
                    <text x="56" y="436">[0,</text>
                    <text x="84" y="436">4)</text>
                    <text x="184" y="436">[4,</text>
                    <text x="212" y="436">8)</text>
                    <text x="312" y="436">[8,</text>
                    <text x="344" y="436">12)</text>
                    <text x="40" y="468">/</text>
                    <text x="96" y="468">\</text>
                    <text x="168" y="468">/</text>
                    <text x="224" y="468">\</text>
                    <text x="304" y="468">/</text>
                    <text x="360" y="468">\</text>
                    <text x="32" y="500">[0,2)</text>
                    <text x="96" y="500">[2,4)</text>
                    <text x="160" y="500">[4,6)</text>
                    <text x="224" y="500">[6,8)</text>
                    <text x="292" y="500">[8,10)</text>
                    <text x="368" y="500">[10,12)</text>
                    <text x="448" y="500">[12,14)</text>
                    <text x="24" y="532">/</text>
                    <text x="40" y="532">\</text>
                    <text x="88" y="532">/</text>
                    <text x="104" y="532">\</text>
                    <text x="152" y="532">/</text>
                    <text x="168" y="532">\</text>
                    <text x="216" y="532">/</text>
                    <text x="232" y="532">\</text>
                    <text x="280" y="532">/</text>
                    <text x="296" y="532">\</text>
                    <text x="352" y="532">/</text>
                    <text x="368" y="532">\</text>
                    <text x="432" y="532">/</text>
                    <text x="448" y="532">\</text>
                    <text x="16" y="564">0</text>
                    <text x="48" y="564">1</text>
                    <text x="80" y="564">2</text>
                    <text x="112" y="564">3</text>
                    <text x="144" y="564">4</text>
                    <text x="176" y="564">5</text>
                    <text x="208" y="564">6</text>
                    <text x="240" y="564">7</text>
                    <text x="272" y="564">8</text>
                    <text x="304" y="564">9</text>
                    <text x="340" y="564">10</text>
                    <text x="380" y="564">11</text>
                    <text x="420" y="564">12</text>
                    <text x="460" y="564">13</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
      +----------------+
      |     [8, 13)    |
      +----------------+
         /          |
   +=========+      |
   | [8, 12) |      |
   +=========+      |
     /      \       |
+------+ +-------+  |
|[8,10)| |[10,12)|  |
+------+ +-------+  |
  / \      / \      |
+-+ +-+ +--+ +--+ +==+
|8| |9| |10| |11| |12|
+-+ +-+ +--+ +--+ +==+

                +-----------------------------+
                |            [0, 14)          |
                +-----------------------------+
                   /                       \
       +================+             +----------------+
       |     [0, 8)     |             |     [8, 14)    |
       +================+             +----------------+
        /              \                 /           |
   +--------+      +--------+      +=========+       |
   | [0, 4) |      | [4, 8) |      | [8, 12) |       |
   +--------+      +--------+      +=========+       |
    /      \        /      \         /      \        |
+-----+ +-----+ +-----+ +-----+ +------+ +-------+ +-------+
|[0,2)| |[2,4)| |[4,6)| |[6,8)| |[8,10)| |[10,12)| |[12,14)|
+-----+ +-----+ +-----+ +-----+ +------+ +-------+ +-------+
  / \     / \     / \     / \     / \      / \       / \
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +--+ +--+ +==+ +==+
|0| |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| |11| |12| |13|
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +--+ +--+ +==+ +==+
]]></artwork>
            </artset>
          </figure>
        </section>
        <section anchor="verifying-a-subtree-consistency-proof">
          <name>Verifying a Subtree Consistency Proof</name>
          <t>The following procedure can be used to verify a subtree consistency proof.</t>
          <t>Given a Merkle Tree over <tt>n</tt> elements, a subtree defined by <tt>[start, end)</tt>, a consistency proof <tt>proof</tt>, a subtree hash <tt>node_hash</tt>, and a root hash <tt>root_hash</tt>:</t>
          <!-- If changing this procedure, remember to update {{consistency-proof-verification-explain}} -->

<ol spacing="normal" type="1"><li>
              <t>Check that <tt>[start, end)</tt> is a valid subtree (<xref target="definition-of-a-subtree"/>), and that <tt>end &lt;= n</tt>. If either does not hold, fail proof verification. These checks imply <tt>0 &lt;= start &lt;= end &lt;= n</tt>.</t>
            </li>
            <li>
              <t>If <tt>start</tt> equals <tt>end</tt>, check the following conditions:
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>proof</tt> is an empty array.</t>
                </li>
                <li>
                  <t><tt>node_hash</tt> is equal to <tt>HASH()</tt>, the hash of the empty string.</t>
                </li>
              </ul>
              <t>
If either condition does not hold, stop and fail the proof verification. If both hold, stop and accept the proof.</t>
            </li>
            <li>
              <t>Set <tt>fn</tt> to <tt>start</tt>, <tt>sn</tt> to <tt>end - 1</tt>, and <tt>tn</tt> to <tt>n - 1</tt>.</t>
            </li>
            <li>
              <t>If <tt>sn</tt> is <tt>tn</tt>, then:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>Until <tt>fn</tt> is <tt>sn</tt>, right-shift <tt>fn</tt>, <tt>sn</tt>, and <tt>tn</tt> equally.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>Otherwise:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>Until <tt>fn</tt> is <tt>sn</tt> or <tt>LSB(sn)</tt> is not set, right-shift <tt>fn</tt>, <tt>sn</tt>, and <tt>tn</tt> equally.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>If <tt>fn</tt> is <tt>sn</tt>, set <tt>fr</tt> and <tt>sr</tt> to <tt>node_hash</tt>.</t>
            </li>
            <li>
              <t>Otherwise:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>If <tt>proof</tt> is an empty array, stop and fail verification.</t>
                </li>
                <li>
                  <t>Remove the first value of the <tt>proof</tt> array and set <tt>fr</tt> and <tt>sr</tt> to the removed value.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>For each value <tt>c</tt> in the <tt>proof</tt> array:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>If <tt>tn</tt> is <tt>0</tt>, then stop the iteration and fail the proof verification.</t>
                </li>
                <li>
                  <t>If <tt>LSB(sn)</tt> is set, or if <tt>sn</tt> is equal to <tt>tn</tt>, then:
                  </t>
                  <ol spacing="normal" type="1"><li>
                      <t>If <tt>fn &lt; sn</tt>, set <tt>fr</tt> to <tt>HASH(0x01 || c || fr)</tt>.</t>
                    </li>
                    <li>
                      <t>Set <tt>sr</tt> to <tt>HASH(0x01 || c || sr)</tt>.</t>
                    </li>
                    <li>
                      <t>Until <tt>LSB(sn)</tt> is set, right-shift <tt>fn</tt>, <tt>sn</tt>, and <tt>tn</tt> equally.</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>Otherwise:
                  </t>
                  <ol spacing="normal" type="1"><li>
                      <t>Set <tt>sr</tt> to <tt>HASH(0x01 || sr || c)</tt>.</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>Right-shift <tt>fn</tt>, <tt>sn</tt>, and <tt>tn</tt> once more.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>Compare <tt>tn</tt> to <tt>0</tt>, <tt>fr</tt> to <tt>node_hash</tt>, and <tt>sr</tt> to <tt>root_hash</tt>. If any are not equal, fail the proof verification. If all are equal, accept the proof.</t>
            </li>
          </ol>
          <t><xref target="consistency-proof-verification-explain"/> explains this procedure in more detail.</t>
        </section>
      </section>
      <section anchor="arbitrary-intervals">
        <name>Efficiently Covering Arbitrary Intervals</name>
        <t>This document uses subtrees to sign over arbitrary intervals, <tt>[start, end)</tt>, of a Merkle Tree. However, not all intervals are valid subtrees. While a protocol could build a smaller Merkle Tree, <tt>MTH(D[start:end])</tt>, and compute inclusion proofs of any element, this smaller Merkle Tree cannot, in general, be efficiently proven consistent with the overall Merkle Tree.</t>
        <t>Enlarging the interval to a valid subtree would mitigate this. However, the smallest subtree containing <tt>[start, end)</tt> may be much larger than <tt>[start, end)</tt>. For example, <xref target="fig-subtree-counterexample"/> shows the smallest subtree that contains <tt>[7, 9)</tt> in a 9-element tree. The smallest single subtree that contains the interval is <tt>[0, 9)</tt>, but this is the entire tree.</t>
        <figure anchor="fig-subtree-counterexample">
          <name>An example showing an inefficient choice of a single subtree</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="304" viewBox="0 0 304 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 8,288 L 8,320" fill="none" stroke="black"/>
                <path d="M 24,288 L 24,320" fill="none" stroke="black"/>
                <path d="M 32,160 L 32,192" fill="none" stroke="black"/>
                <path d="M 40,288 L 40,320" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 56,288 L 56,320" fill="none" stroke="black"/>
                <path d="M 64,96 L 64,128" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 72,288 L 72,320" fill="none" stroke="black"/>
                <path d="M 88,288 L 88,320" fill="none" stroke="black"/>
                <path d="M 104,160 L 104,192" fill="none" stroke="black"/>
                <path d="M 104,288 L 104,320" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 120,288 L 120,320" fill="none" stroke="black"/>
                <path d="M 136,32 L 136,64" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 136,288 L 136,320" fill="none" stroke="black"/>
                <path d="M 152,288 L 152,320" fill="none" stroke="black"/>
                <path d="M 160,160 L 160,192" fill="none" stroke="black"/>
                <path d="M 168,288 L 168,320" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 184,288 L 184,320" fill="none" stroke="black"/>
                <path d="M 200,96 L 200,128" fill="none" stroke="black"/>
                <path d="M 200,224 L 200,256" fill="none" stroke="black"/>
                <path d="M 200,288 L 200,320" fill="none" stroke="black"/>
                <path d="M 216,288 L 216,320" fill="none" stroke="black"/>
                <path d="M 232,160 L 232,192" fill="none" stroke="black"/>
                <path d="M 232,288 L 232,320" fill="none" stroke="black"/>
                <path d="M 248,224 L 248,256" fill="none" stroke="black"/>
                <path d="M 248,288 L 248,320" fill="none" stroke="black"/>
                <path d="M 264,288 L 264,320" fill="none" stroke="black"/>
                <path d="M 272,80 L 272,272" fill="none" stroke="black"/>
                <path d="M 280,288 L 280,320" fill="none" stroke="black"/>
                <path d="M 296,32 L 296,64" fill="none" stroke="black"/>
                <path d="M 136,32 Q 138,28.8 140,32 Q 142,35.2 144,32 Q 146,28.8 148,32 Q 150,35.2 152,32 Q 154,28.8 156,32 Q 158,35.2 160,32 Q 162,28.8 164,32 Q 166,35.2 168,32 Q 170,28.8 172,32 Q 174,35.2 176,32 Q 178,28.8 180,32 Q 182,35.2 184,32 Q 186,28.8 188,32 Q 190,35.2 192,32 Q 194,28.8 196,32 Q 198,35.2 200,32 Q 202,28.8 204,32 Q 206,35.2 208,32 Q 210,28.8 212,32 Q 214,35.2 216,32 Q 218,28.8 220,32 Q 222,35.2 224,32 Q 226,28.8 228,32 Q 230,35.2 232,32 Q 234,28.8 236,32 Q 238,35.2 240,32 Q 242,28.8 244,32 Q 246,35.2 248,32 Q 250,28.8 252,32 Q 254,35.2 256,32 Q 258,28.8 260,32 Q 262,35.2 264,32 Q 266,28.8 268,32 Q 270,35.2 272,32 Q 274,28.8 276,32 Q 278,35.2 280,32 Q 282,28.8 284,32 Q 286,35.2 288,32 Q 290,28.8 292,32 Q 294,35.2 296,32 " fill="none" stroke="black"/>
                <path d="M 136,64 Q 138,60.8 140,64 Q 142,67.2 144,64 Q 146,60.8 148,64 Q 150,67.2 152,64 Q 154,60.8 156,64 Q 158,67.2 160,64 Q 162,60.8 164,64 Q 166,67.2 168,64 Q 170,60.8 172,64 Q 174,67.2 176,64 Q 178,60.8 180,64 Q 182,67.2 184,64 Q 186,60.8 188,64 Q 190,67.2 192,64 Q 194,60.8 196,64 Q 198,67.2 200,64 Q 202,60.8 204,64 Q 206,67.2 208,64 Q 210,60.8 212,64 Q 214,67.2 216,64 Q 218,60.8 220,64 Q 222,67.2 224,64 Q 226,60.8 228,64 Q 230,67.2 232,64 Q 234,60.8 236,64 Q 238,67.2 240,64 Q 242,60.8 244,64 Q 246,67.2 248,64 Q 250,60.8 252,64 Q 254,67.2 256,64 Q 258,60.8 260,64 Q 262,67.2 264,64 Q 266,60.8 268,64 Q 270,67.2 272,64 Q 274,60.8 276,64 Q 278,67.2 280,64 Q 282,60.8 284,64 Q 286,67.2 288,64 Q 290,60.8 292,64 Q 294,67.2 296,64 " fill="none" stroke="black"/>
                <path d="M 64,96 L 200,96" fill="none" stroke="black"/>
                <path d="M 64,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 32,160 L 104,160" fill="none" stroke="black"/>
                <path d="M 160,160 L 232,160" fill="none" stroke="black"/>
                <path d="M 32,192 L 104,192" fill="none" stroke="black"/>
                <path d="M 160,192 L 232,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 200,224 L 248,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 184,256" fill="none" stroke="black"/>
                <path d="M 200,256 L 248,256" fill="none" stroke="black"/>
                <path d="M 8,288 L 24,288" fill="none" stroke="black"/>
                <path d="M 40,288 L 56,288" fill="none" stroke="black"/>
                <path d="M 72,288 L 88,288" fill="none" stroke="black"/>
                <path d="M 104,288 L 120,288" fill="none" stroke="black"/>
                <path d="M 136,288 L 152,288" fill="none" stroke="black"/>
                <path d="M 168,288 L 184,288" fill="none" stroke="black"/>
                <path d="M 200,288 L 216,288" fill="none" stroke="black"/>
                <path d="M 232,286 L 248,286" fill="none" stroke="black"/>
                <path d="M 232,290 L 248,290" fill="none" stroke="black"/>
                <path d="M 264,286 L 280,286" fill="none" stroke="black"/>
                <path d="M 264,290 L 280,290" fill="none" stroke="black"/>
                <path d="M 8,320 L 24,320" fill="none" stroke="black"/>
                <path d="M 40,320 L 56,320" fill="none" stroke="black"/>
                <path d="M 72,320 L 88,320" fill="none" stroke="black"/>
                <path d="M 104,320 L 120,320" fill="none" stroke="black"/>
                <path d="M 136,320 L 152,320" fill="none" stroke="black"/>
                <path d="M 168,320 L 184,320" fill="none" stroke="black"/>
                <path d="M 200,320 L 216,320" fill="none" stroke="black"/>
                <path d="M 232,318 L 248,318" fill="none" stroke="black"/>
                <path d="M 232,322 L 248,322" fill="none" stroke="black"/>
                <path d="M 264,318 L 280,318" fill="none" stroke="black"/>
                <path d="M 264,322 L 280,322" fill="none" stroke="black"/>
                <g class="text">
                  <text x="200" y="52">[0,</text>
                  <text x="228" y="52">9)</text>
                  <text x="160" y="84">/</text>
                  <text x="120" y="116">[0,</text>
                  <text x="148" y="116">8)</text>
                  <text x="72" y="148">/</text>
                  <text x="192" y="148">\</text>
                  <text x="56" y="180">[0,</text>
                  <text x="84" y="180">4)</text>
                  <text x="184" y="180">[4,</text>
                  <text x="212" y="180">8)</text>
                  <text x="40" y="212">/</text>
                  <text x="96" y="212">\</text>
                  <text x="168" y="212">/</text>
                  <text x="224" y="212">\</text>
                  <text x="32" y="244">[0,2)</text>
                  <text x="96" y="244">[2,4)</text>
                  <text x="160" y="244">[4,6)</text>
                  <text x="224" y="244">[6,8)</text>
                  <text x="24" y="276">/</text>
                  <text x="40" y="276">\</text>
                  <text x="88" y="276">/</text>
                  <text x="104" y="276">\</text>
                  <text x="152" y="276">/</text>
                  <text x="168" y="276">\</text>
                  <text x="216" y="276">/</text>
                  <text x="232" y="276">\</text>
                  <text x="16" y="308">0</text>
                  <text x="48" y="308">1</text>
                  <text x="80" y="308">2</text>
                  <text x="112" y="308">3</text>
                  <text x="144" y="308">4</text>
                  <text x="176" y="308">5</text>
                  <text x="208" y="308">6</text>
                  <text x="240" y="308">7</text>
                  <text x="272" y="308">8</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                +~~~~~~~~~~~~~~~~~~~+
                |      [0, 9)       |
                +~~~~~~~~~~~~~~~~~~~+
                   /             |
       +----------------+        |
       |     [0, 8)     |        |
       +----------------+        |
        /              \         |
   +--------+      +--------+    |
   | [0, 4) |      | [4, 8) |    |
   +--------+      +--------+    |
    /      \        /      \     |
+-----+ +-----+ +-----+ +-----+  |
|[0,2)| |[2,4)| |[4,6)| |[6,8)|  |
+-----+ +-----+ +-----+ +-----+  |
  / \     / \     / \     / \    |
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +=+ +=+
|0| |1| |2| |3| |4| |5| |6| |7| |8|
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +=+ +=+
]]></artwork>
          </artset>
        </figure>
        <t>While one subtree can be inefficient, two subtrees are sufficient to efficiently cover any interval, as described below.</t>
        <section anchor="selecting-two-subtrees">
          <name>Selecting Two Subtrees</name>
          <t>Given any interval, <tt>[start, end)</tt>, this section defines a procedure for selecting two subtrees, <tt>left</tt> and <tt>right</tt>, such that:</t>
          <ul spacing="normal">
            <li>
              <t><tt>left</tt> and <tt>right</tt> are valid subtrees, so it is possible to compute subtree consistency proofs.</t>
            </li>
            <li>
              <t>The disjoint union of <tt>left</tt>, followed by <tt>right</tt>, contains <tt>[start, end)</tt>. That is, <tt>left.start &lt;= start &lt;= left.end = right.start &lt;= end &lt;= right.end</tt>.</t>
            </li>
            <li>
              <t>While <tt>left</tt> may contain extra elements before <tt>start</tt>, <tt>right</tt> does not contain any extra elements. That is, <tt>end = right.end</tt>.</t>
            </li>
            <li>
              <t>Each subtree's size is at most <tt>BIT_CEIL(end - start)</tt>.</t>
            </li>
          </ul>
          <t>The pair of subtree hashes for <tt>left</tt> and <tt>right</tt> can support inclusion proofs for any element of <tt>[start, end)</tt>. The largest such inclusion proof is no bigger than the largest inclusion proof in <tt>MTH(D[start:end])</tt>. Unlike <tt>MTH(D[start:end])</tt>, these subtree hashes can be shown consistent with the overall Merkle Tree using subtree consistency proofs.</t>
          <t>The subtrees are selected as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>If <tt>end - start</tt> is less than or equal to 1, return the subtrees <tt>[start, end)</tt> and <tt>[end, end)</tt>.</t>
            </li>
            <li>
              <t>Otherwise:  </t>
              <ol spacing="normal" type="1"><li>
                  <t>Let <tt>last</tt> be <tt>end - 1</tt>, the last index in <tt>[start, end)</tt>.</t>
                </li>
                <li>
                  <t>Let <tt>split</tt> be the bit index of the most significant bit where <tt>start</tt> and <tt>last</tt> differ. Bits are numbered from the least significant bit, starting at zero. <tt>split</tt> is the height at which <tt>start</tt> and <tt>last</tt>'s paths in the tree diverge.</t>
                </li>
                <li>
                  <t>Let <tt>mid</tt> be <tt>last</tt> with the least significant <tt>split</tt> bits set to zero. <tt>mid</tt> is the leftmost leaf node in the above divergence point's right branch.</t>
                </li>
                <li>
                  <t>Within the least significant <tt>split</tt> bits of <tt>start</tt>, let <tt>b</tt> be the bit index of the most significant bit with value zero, if any:      </t>
                  <ol spacing="normal" type="1"><li>
                      <t>If there is such a bit, let <tt>left_split</tt> be <tt>b + 1</tt>.</t>
                    </li>
                    <li>
                      <t>Otherwise, let <tt>left_split</tt> be zero.</t>
                    </li>
                  </ol>
                  <t>
<tt>left_split</tt> is the height of the lowest common ancestor of the nodes in <tt>[start, mid)</tt>.</t>
                </li>
                <li>
                  <t>Let <tt>left_start</tt> be <tt>start</tt> with the least significant <tt>left_split</tt> bits set to zero. <tt>left_start</tt> is the above lowest common ancestor's leftmost leaf node.</t>
                </li>
                <li>
                  <t>Return the subtrees <tt>[left_start, mid)</tt> and <tt>[mid, end)</tt>.</t>
                </li>
              </ol>
            </li>
          </ol>
          <t>Intuitively, this procedure considers the tree <tt>MTH(D[0:end])</tt> and finds the lowest common ancestor of the elements in <tt>[start, end)</tt>. It splits the interval by that ancestor's left and right children and returns the lowest common ancestor of each half.</t>
          <t>The following Python code implements this procedure:</t>
          <sourcecode type="python"><![CDATA[
def find_subtrees(start, end):
    """ Returns a pair of subtrees that efficiently cover
    [start, end). """
    assert start <= end
    if end - start <= 1:
        return (start, end), (end, end)
    last = end - 1
    # Find where start and last's tree paths diverge. The two
    # subtrees will be on either side of the split.
    split = (start ^ last).bit_length() - 1
    mask = (1 << split) - 1
    mid = last & ~mask
    # Maximize the left endpoint. This is just before start's
    # path leaves the right edge of its new subtree.
    left_split = (~start & mask).bit_length()
    left_start = start & ~((1 << left_split) - 1)
    return (left_start, mid), (mid, end)
]]></sourcecode>
          <t><xref target="fig-subtree-pair-example"/> shows the subtrees which cover <tt>[5, 13)</tt> in a Merkle Tree of 13 elements in wavy lines. The two subtrees selected are <tt>[4, 8)</tt> and <tt>[8, 13)</tt>. Note that the subtrees cover a slightly larger interval than <tt>[5, 13)</tt>.</t>
          <!-- Ideally we'd use the Unicode box-drawing characters for the text form, but aasvg doesn't support them: https://github.com/martinthomson/aasvg/issues/9 -->

<figure anchor="fig-subtree-pair-example">
            <name>An example selection of subtrees to cover an interval</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="456" viewBox="0 0 456 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                  <path d="M 8,288 L 8,320" fill="none" stroke="black"/>
                  <path d="M 24,288 L 24,320" fill="none" stroke="black"/>
                  <path d="M 32,160 L 32,192" fill="none" stroke="black"/>
                  <path d="M 40,288 L 40,320" fill="none" stroke="black"/>
                  <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                  <path d="M 56,288 L 56,320" fill="none" stroke="black"/>
                  <path d="M 64,96 L 64,128" fill="none" stroke="black"/>
                  <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                  <path d="M 72,288 L 72,320" fill="none" stroke="black"/>
                  <path d="M 88,288 L 88,320" fill="none" stroke="black"/>
                  <path d="M 104,160 L 104,192" fill="none" stroke="black"/>
                  <path d="M 104,288 L 104,320" fill="none" stroke="black"/>
                  <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                  <path d="M 120,288 L 120,320" fill="none" stroke="black"/>
                  <path d="M 136,32 L 136,64" fill="none" stroke="black"/>
                  <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                  <path d="M 136,288 L 136,320" fill="none" stroke="black"/>
                  <path d="M 152,288 L 152,320" fill="none" stroke="black"/>
                  <path d="M 160,160 L 160,192" fill="none" stroke="black"/>
                  <path d="M 168,288 L 168,320" fill="none" stroke="black"/>
                  <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                  <path d="M 184,288 L 184,320" fill="none" stroke="black"/>
                  <path d="M 200,96 L 200,128" fill="none" stroke="black"/>
                  <path d="M 200,224 L 200,256" fill="none" stroke="black"/>
                  <path d="M 200,288 L 200,320" fill="none" stroke="black"/>
                  <path d="M 216,288 L 216,320" fill="none" stroke="black"/>
                  <path d="M 232,160 L 232,192" fill="none" stroke="black"/>
                  <path d="M 232,288 L 232,320" fill="none" stroke="black"/>
                  <path d="M 248,224 L 248,256" fill="none" stroke="black"/>
                  <path d="M 248,288 L 248,320" fill="none" stroke="black"/>
                  <path d="M 264,224 L 264,256" fill="none" stroke="black"/>
                  <path d="M 264,288 L 264,320" fill="none" stroke="black"/>
                  <path d="M 280,288 L 280,320" fill="none" stroke="black"/>
                  <path d="M 288,160 L 288,192" fill="none" stroke="black"/>
                  <path d="M 296,288 L 296,320" fill="none" stroke="black"/>
                  <path d="M 312,96 L 312,128" fill="none" stroke="black"/>
                  <path d="M 312,288 L 312,320" fill="none" stroke="black"/>
                  <path d="M 320,224 L 320,256" fill="none" stroke="black"/>
                  <path d="M 328,288 L 328,320" fill="none" stroke="black"/>
                  <path d="M 336,224 L 336,256" fill="none" stroke="black"/>
                  <path d="M 352,288 L 352,320" fill="none" stroke="black"/>
                  <path d="M 368,160 L 368,192" fill="none" stroke="black"/>
                  <path d="M 368,288 L 368,320" fill="none" stroke="black"/>
                  <path d="M 376,32 L 376,64" fill="none" stroke="black"/>
                  <path d="M 392,288 L 392,320" fill="none" stroke="black"/>
                  <path d="M 400,224 L 400,256" fill="none" stroke="black"/>
                  <path d="M 408,288 L 408,320" fill="none" stroke="black"/>
                  <path d="M 424,144 L 424,272" fill="none" stroke="black"/>
                  <path d="M 432,288 L 432,320" fill="none" stroke="black"/>
                  <path d="M 448,96 L 448,128" fill="none" stroke="black"/>
                  <path d="M 136,32 L 376,32" fill="none" stroke="black"/>
                  <path d="M 136,64 L 376,64" fill="none" stroke="black"/>
                  <path d="M 64,96 L 200,96" fill="none" stroke="black"/>
                  <path d="M 312,96 Q 314,92.8 316,96 Q 318,99.2 320,96 Q 322,92.8 324,96 Q 326,99.2 328,96 Q 330,92.8 332,96 Q 334,99.2 336,96 Q 338,92.8 340,96 Q 342,99.2 344,96 Q 346,92.8 348,96 Q 350,99.2 352,96 Q 354,92.8 356,96 Q 358,99.2 360,96 Q 362,92.8 364,96 Q 366,99.2 368,96 Q 370,92.8 372,96 Q 374,99.2 376,96 Q 378,92.8 380,96 Q 382,99.2 384,96 Q 386,92.8 388,96 Q 390,99.2 392,96 Q 394,92.8 396,96 Q 398,99.2 400,96 Q 402,92.8 404,96 Q 406,99.2 408,96 Q 410,92.8 412,96 Q 414,99.2 416,96 Q 418,92.8 420,96 Q 422,99.2 424,96 Q 426,92.8 428,96 Q 430,99.2 432,96 Q 434,92.8 436,96 Q 438,99.2 440,96 Q 442,92.8 444,96 Q 446,99.2 448,96 " fill="none" stroke="black"/>
                  <path d="M 64,128 L 200,128" fill="none" stroke="black"/>
                  <path d="M 312,128 Q 314,124.8 316,128 Q 318,131.2 320,128 Q 322,124.8 324,128 Q 326,131.2 328,128 Q 330,124.8 332,128 Q 334,131.2 336,128 Q 338,124.8 340,128 Q 342,131.2 344,128 Q 346,124.8 348,128 Q 350,131.2 352,128 Q 354,124.8 356,128 Q 358,131.2 360,128 Q 362,124.8 364,128 Q 366,131.2 368,128 Q 370,124.8 372,128 Q 374,131.2 376,128 Q 378,124.8 380,128 Q 382,131.2 384,128 Q 386,124.8 388,128 Q 390,131.2 392,128 Q 394,124.8 396,128 Q 398,131.2 400,128 Q 402,124.8 404,128 Q 406,131.2 408,128 Q 410,124.8 412,128 Q 414,131.2 416,128 Q 418,124.8 420,128 Q 422,131.2 424,128 Q 426,124.8 428,128 Q 430,131.2 432,128 Q 434,124.8 436,128 Q 438,131.2 440,128 Q 442,124.8 444,128 Q 446,131.2 448,128 " fill="none" stroke="black"/>
                  <path d="M 32,160 L 104,160" fill="none" stroke="black"/>
                  <path d="M 160,160 Q 162,156.8 164,160 Q 166,163.2 168,160 Q 170,156.8 172,160 Q 174,163.2 176,160 Q 178,156.8 180,160 Q 182,163.2 184,160 Q 186,156.8 188,160 Q 190,163.2 192,160 Q 194,156.8 196,160 Q 198,163.2 200,160 Q 202,156.8 204,160 Q 206,163.2 208,160 Q 210,156.8 212,160 Q 214,163.2 216,160 Q 218,156.8 220,160 Q 222,163.2 224,160 Q 226,156.8 228,160 Q 230,163.2 232,160 " fill="none" stroke="black"/>
                  <path d="M 288,160 L 368,160" fill="none" stroke="black"/>
                  <path d="M 32,192 L 104,192" fill="none" stroke="black"/>
                  <path d="M 160,192 Q 162,188.8 164,192 Q 166,195.2 168,192 Q 170,188.8 172,192 Q 174,195.2 176,192 Q 178,188.8 180,192 Q 182,195.2 184,192 Q 186,188.8 188,192 Q 190,195.2 192,192 Q 194,188.8 196,192 Q 198,195.2 200,192 Q 202,188.8 204,192 Q 206,195.2 208,192 Q 210,188.8 212,192 Q 214,195.2 216,192 Q 218,188.8 220,192 Q 222,195.2 224,192 Q 226,188.8 228,192 Q 230,195.2 232,192 " fill="none" stroke="black"/>
                  <path d="M 288,192 L 368,192" fill="none" stroke="black"/>
                  <path d="M 8,224 L 56,224" fill="none" stroke="black"/>
                  <path d="M 72,224 L 120,224" fill="none" stroke="black"/>
                  <path d="M 136,224 L 184,224" fill="none" stroke="black"/>
                  <path d="M 200,224 L 248,224" fill="none" stroke="black"/>
                  <path d="M 264,224 L 320,224" fill="none" stroke="black"/>
                  <path d="M 336,224 L 400,224" fill="none" stroke="black"/>
                  <path d="M 8,256 L 56,256" fill="none" stroke="black"/>
                  <path d="M 72,256 L 120,256" fill="none" stroke="black"/>
                  <path d="M 136,256 L 184,256" fill="none" stroke="black"/>
                  <path d="M 200,256 L 248,256" fill="none" stroke="black"/>
                  <path d="M 264,256 L 320,256" fill="none" stroke="black"/>
                  <path d="M 336,256 L 400,256" fill="none" stroke="black"/>
                  <path d="M 8,288 L 24,288" fill="none" stroke="black"/>
                  <path d="M 40,288 L 56,288" fill="none" stroke="black"/>
                  <path d="M 72,288 L 88,288" fill="none" stroke="black"/>
                  <path d="M 104,288 L 120,288" fill="none" stroke="black"/>
                  <path d="M 136,288 L 152,288" fill="none" stroke="black"/>
                  <path d="M 168,286 L 184,286" fill="none" stroke="black"/>
                  <path d="M 168,290 L 184,290" fill="none" stroke="black"/>
                  <path d="M 200,286 L 216,286" fill="none" stroke="black"/>
                  <path d="M 200,290 L 216,290" fill="none" stroke="black"/>
                  <path d="M 232,286 L 248,286" fill="none" stroke="black"/>
                  <path d="M 232,290 L 248,290" fill="none" stroke="black"/>
                  <path d="M 264,286 L 280,286" fill="none" stroke="black"/>
                  <path d="M 264,290 L 280,290" fill="none" stroke="black"/>
                  <path d="M 296,286 L 312,286" fill="none" stroke="black"/>
                  <path d="M 296,290 L 312,290" fill="none" stroke="black"/>
                  <path d="M 328,286 L 352,286" fill="none" stroke="black"/>
                  <path d="M 328,290 L 352,290" fill="none" stroke="black"/>
                  <path d="M 368,286 L 392,286" fill="none" stroke="black"/>
                  <path d="M 368,290 L 392,290" fill="none" stroke="black"/>
                  <path d="M 408,286 L 432,286" fill="none" stroke="black"/>
                  <path d="M 408,290 L 432,290" fill="none" stroke="black"/>
                  <path d="M 8,320 L 24,320" fill="none" stroke="black"/>
                  <path d="M 40,320 L 56,320" fill="none" stroke="black"/>
                  <path d="M 72,320 L 88,320" fill="none" stroke="black"/>
                  <path d="M 104,320 L 120,320" fill="none" stroke="black"/>
                  <path d="M 136,320 L 152,320" fill="none" stroke="black"/>
                  <path d="M 168,318 L 184,318" fill="none" stroke="black"/>
                  <path d="M 168,322 L 184,322" fill="none" stroke="black"/>
                  <path d="M 200,318 L 216,318" fill="none" stroke="black"/>
                  <path d="M 200,322 L 216,322" fill="none" stroke="black"/>
                  <path d="M 232,318 L 248,318" fill="none" stroke="black"/>
                  <path d="M 232,322 L 248,322" fill="none" stroke="black"/>
                  <path d="M 264,318 L 280,318" fill="none" stroke="black"/>
                  <path d="M 264,322 L 280,322" fill="none" stroke="black"/>
                  <path d="M 296,318 L 312,318" fill="none" stroke="black"/>
                  <path d="M 296,322 L 312,322" fill="none" stroke="black"/>
                  <path d="M 328,318 L 352,318" fill="none" stroke="black"/>
                  <path d="M 328,322 L 352,322" fill="none" stroke="black"/>
                  <path d="M 368,318 L 392,318" fill="none" stroke="black"/>
                  <path d="M 368,322 L 392,322" fill="none" stroke="black"/>
                  <path d="M 408,318 L 432,318" fill="none" stroke="black"/>
                  <path d="M 408,322 L 432,322" fill="none" stroke="black"/>
                  <g class="text">
                    <text x="248" y="52">[0,</text>
                    <text x="280" y="52">13)</text>
                    <text x="160" y="84">/</text>
                    <text x="352" y="84">\</text>
                    <text x="120" y="116">[0,</text>
                    <text x="148" y="116">8)</text>
                    <text x="368" y="116">[8,</text>
                    <text x="400" y="116">13)</text>
                    <text x="72" y="148">/</text>
                    <text x="192" y="148">\</text>
                    <text x="336" y="148">/</text>
                    <text x="56" y="180">[0,</text>
                    <text x="84" y="180">4)</text>
                    <text x="184" y="180">[4,</text>
                    <text x="212" y="180">8)</text>
                    <text x="312" y="180">[8,</text>
                    <text x="344" y="180">12)</text>
                    <text x="40" y="212">/</text>
                    <text x="96" y="212">\</text>
                    <text x="168" y="212">/</text>
                    <text x="224" y="212">\</text>
                    <text x="304" y="212">/</text>
                    <text x="360" y="212">\</text>
                    <text x="32" y="244">[0,2)</text>
                    <text x="96" y="244">[2,4)</text>
                    <text x="160" y="244">[4,6)</text>
                    <text x="224" y="244">[6,8)</text>
                    <text x="292" y="244">[8,10)</text>
                    <text x="368" y="244">[10,12)</text>
                    <text x="24" y="276">/</text>
                    <text x="40" y="276">\</text>
                    <text x="88" y="276">/</text>
                    <text x="104" y="276">\</text>
                    <text x="152" y="276">/</text>
                    <text x="168" y="276">\</text>
                    <text x="216" y="276">/</text>
                    <text x="232" y="276">\</text>
                    <text x="280" y="276">/</text>
                    <text x="296" y="276">\</text>
                    <text x="352" y="276">/</text>
                    <text x="368" y="276">\</text>
                    <text x="16" y="308">0</text>
                    <text x="48" y="308">1</text>
                    <text x="80" y="308">2</text>
                    <text x="112" y="308">3</text>
                    <text x="144" y="308">4</text>
                    <text x="176" y="308">5</text>
                    <text x="208" y="308">6</text>
                    <text x="240" y="308">7</text>
                    <text x="272" y="308">8</text>
                    <text x="304" y="308">9</text>
                    <text x="340" y="308">10</text>
                    <text x="380" y="308">11</text>
                    <text x="420" y="308">12</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
                +-----------------------------+
                |            [0, 13)          |
                +-----------------------------+
                   /                       \
       +----------------+             +~~~~~~~~~~~~~~~~+
       |     [0, 8)     |             |     [8, 13)    |
       +----------------+             +~~~~~~~~~~~~~~~~+
        /              \                 /          |
   +--------+      +~~~~~~~~+      +---------+      |
   | [0, 4) |      | [4, 8) |      | [8, 12) |      |
   +--------+      +~~~~~~~~+      +---------+      |
    /      \        /      \         /      \       |
+-----+ +-----+ +-----+ +-----+ +------+ +-------+  |
|[0,2)| |[2,4)| |[4,6)| |[6,8)| |[8,10)| |[10,12)|  |
+-----+ +-----+ +-----+ +-----+ +------+ +-------+  |
  / \     / \     / \     / \     / \      / \      |
+-+ +-+ +-+ +-+ +-+ +=+ +=+ +=+ +=+ +=+ +==+ +==+ +==+
|0| |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| |11| |12|
+-+ +-+ +-+ +-+ +-+ +=+ +=+ +=+ +=+ +=+ +==+ +==+ +==+
]]></artwork>
            </artset>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="certification-authorities">
      <name>Certification Authorities</name>
      <t>A CA consists of the following components:</t>
      <ul spacing="normal">
        <li>
          <t>A CA ID (<xref target="ca-ids"/>), which uniquely identifies the CA.</t>
        </li>
        <li>
          <t>A collision-resistant cryptographic hash function, used by the CA's issuance logs. SHA-256 <xref target="SHS"/> is <bcp14>RECOMMENDED</bcp14>. Throughout this document, this hash function is referred to as HASH, and the size of its output in bytes is referred to as HASH_SIZE.</t>
        </li>
        <li>
          <t>A series of issuance logs (<xref target="issuance-logs"/>), which contain all statements the CA has certified. One issuance log is designated as the current log.</t>
        </li>
        <li>
          <t>A CA cosigner (<xref target="certification-authority-cosigners"/>), which signs subtrees of issuance logs to certify their contents.</t>
        </li>
        <li>
          <t>Optionally, a landmark sequence per log (<xref target="landmark-tree-sizes"/>), to support optimized landmark-relative certificates.</t>
        </li>
      </ul>
      <t><xref target="representing-certification-authorities"/> defines an X.509 certificate representation of a CA.</t>
      <section anchor="ca-ids">
        <name>Certification Authority Identifiers</name>
        <t>Each Merkle Tree Certificate CA has a <em>CA ID</em> to identify it. This CA ID is a trust anchor ID <xref target="I-D.ietf-tls-trust-anchor-ids"/>.</t>
        <t>Once allocated, the ID's entire object identifier (OID) arc is reserved by this protocol. Given a CA ID whose OID representation is <tt>caID</tt>, this document allocates the following OIDs:</t>
        <ul spacing="normal">
          <li>
            <t>For each positive integer <tt>N</tt>, the OID <tt>{caID logs(0) N}</tt> represents the issuance log <tt>N</tt> (<xref target="issuance-logs"/>).</t>
          </li>
          <li>
            <t>For each positive integer <tt>N</tt> and <tt>L</tt>, the OID <tt>{caID landmarks(1) N L}</tt> represents landmark <tt>L</tt> (<xref target="landmark-tree-sizes"/>) of issuance log <tt>N</tt>. These OIDs may be used as trust anchor IDs, as described in <xref target="landmark-relative-certificates-tls"/>. These OIDs are used when it is necessary to identify an individual landmark, e.g. as in the recovery mechanism described in <xref section="5.6" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>.</t>
          </li>
          <li>
            <t>For each positive integer <tt>N</tt> and <tt>L</tt>, the OID <tt>{caID landmarkGroups(2) N L}</tt> represents a trust anchor group (<xref section="6" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>) containing landmark <tt>L</tt> of log <tt>N</tt> and earlier landmarks of that log, as defined in <xref target="single-log-landmark-groups"/>. These OIDs may be used to advertise a series of landmarks at once.</t>
          </li>
        </ul>
        <t>Future extensions to this protocol <bcp14>MAY</bcp14> define further allocations by adding to the registry defined in <xref target="mtc-ca-identifier-child-components"/>.</t>
        <t>The CA's ID determine's the CA's PKIX distinguished name using the construction described in <xref section="4.1" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>.</t>
      </section>
      <section anchor="issuance-logs">
        <name>Issuance Logs</name>
        <t>A CA operates a series of issuance logs, each identified by a positive integer <em>log number</em>. Log numbers are numbered consecutively from 1 to at most 65535 (2<sup>16</sup>-1).</t>
        <t>Each issuance log has a <em>log ID</em>, which is a trust anchor ID constructed by concatenating the following OID components:</t>
        <ul spacing="normal">
          <li>
            <t>The CA ID (<xref target="ca-ids"/>)</t>
          </li>
          <li>
            <t>The constant 0</t>
          </li>
          <li>
            <t>The log number of the log</t>
          </li>
        </ul>
        <t>A log ID specifies both the CA and the log number in a single ID.</t>
        <t>Each issuance log describes an append-only sequence of at most 2<sup>48</sup>-1 <em>entries</em> (<xref target="log-entries"/>). Each entry is identified by an integer <em>index</em>, assigned consecutively starting from zero. Each entry is an assertion that the CA has certified. The entries in the issuance log are represented as a Merkle Tree, described in <xref section="2.1" sectionFormat="of" target="RFC9162"/>.</t>
        <t>Unlike <xref target="RFC6962"/> and <xref target="RFC9162"/>, an issuance log does not have a public submission interface. The log only contains entries which the log operator, i.e. the CA, chose to add. As entries are added, the Merkle Tree is updated to be computed over the new sequence.</t>
        <t>A snapshot of the log is known as a <em>checkpoint</em>. A checkpoint is identified by its <em>tree size</em>, that is the number of elements committed to the log at the time. Its contents can be described by the Merkle Tree Hash (<xref section="2.1.1" sectionFormat="of" target="RFC9162"/>) of entries zero through <tt>tree_size - 1</tt>.</t>
        <t>At any point in time, one of the CA's issuance logs is its <em>current</em> log. Initially, this is log 1. A CA <bcp14>MUST NOT</bcp14> append to any log that is not the current log. Logs before the current log may have historical entries. Logs after the current log <bcp14>MUST</bcp14> be empty. A CA <bcp14>MAY</bcp14> increment its current log number as part of recovering from certain operational failures. See <xref target="log-failures"/> for further discussion.</t>
        <section anchor="log-entries">
          <name>Log Entries</name>
          <t>Each entry in the log is an MTCLogEntry, defined with the TLS presentation syntax below. An MTCLogEntry describes certificate information that the CA has validated and certified.</t>
          <sourcecode type="tls-presentation"><![CDATA[
struct {} Empty;

enum { (2^16-1) } MTCLogEntryExtensionType;

struct {
    MTCLogEntryExtensionType extension_type;
    opaque extension_data<0..2^16-1>;
} MTCLogEntryExtension;

enum {
    null_entry(0), tbs_cert_entry(1), (2^16-1)
} MTCLogEntryType;

struct {
    MTCLogEntryExtension extensions<0..2^16-1>;
    MTCLogEntryType type;
    select (type) {
       case null_entry: Empty;
       case tbs_cert_entry: opaque tbs_cert_entry_data[N];
       /* May be extended with future types. */
    }
} MTCLogEntry;
]]></sourcecode>
          <t>The <tt>extensions</tt> field is a list of tag-length-value extensions associated with the log entry. Extensions <bcp14>MUST</bcp14> appear in the list in ascending order by <tt>extension_type</tt>, and the list <bcp14>MUST NOT</bcp14> contain two extensions with the same <tt>extension_type</tt>.</t>
          <t>When <tt>type</tt> is <tt>null_entry</tt>, the entry does not represent any information. Entries at any index in the log <bcp14>MAY</bcp14> have type <tt>null_entry</tt>.</t>
          <t>When <tt>type</tt> is <tt>tbs_cert_entry</tt>, <tt>N</tt> is the number of bytes needed to consume the rest of the input. An MTCLogEntry is expected to be decoded in contexts where the total length of the entry is known.</t>
          <t><tt>tbs_cert_entry_data</tt> contains the contents octets (i.e. excluding the initial identifier and length octets) of the DER <xref target="X.690"/> encoding of a TBSCertificateLogEntry, defined below. Equivalently, <tt>tbs_cert_entry_data</tt> contains the DER encodings of each field of the TBSCertificateLogEntry, concatenated. This construction allows a single-pass implementation in <xref target="verifying-certificate-signatures"/>.</t>
          <sourcecode type="asn.1"><![CDATA[
TBSCertificateLogEntry ::= SEQUENCE {
    version               [0] EXPLICIT Version DEFAULT v1,
    issuer                    Name,
    validity                  Validity,
    subject                   Name,
    subjectPublicKeyAlgorithm AlgorithmIdentifier{PUBLIC-KEY,
                                  {PublicKeyAlgorithms}},
    subjectPublicKeyInfoHash  OCTET STRING,
    issuerUniqueID        [1] IMPLICIT UniqueIdentifier OPTIONAL,
    subjectUniqueID       [2] IMPLICIT UniqueIdentifier OPTIONAL,
    extensions            [3] EXPLICIT Extensions{{CertExtensions}}
                                           OPTIONAL
}
]]></sourcecode>
          <t>The fields of a TBSCertificateLogEntry are defined as follows:</t>
          <ul spacing="normal">
            <li>
              <t><tt>version</tt>, <tt>validity</tt>, <tt>subject</tt>, <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, and <tt>extensions</tt> have the same semantics as the corresponding TBSCertificate fields, defined in <xref section="4.1.2" sectionFormat="of" target="RFC5280"/>.</t>
            </li>
            <li>
              <t><tt>issuer</tt> is the CA ID as a PKIX distinguished name, as described in <xref section="4.1" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>.  </t>
              <ul spacing="normal">
                <li>
                  <t>The <tt>issuer</tt> field is not human-readable. A TBSCertificateLogEntry <bcp14>MAY</bcp14> carry a human-readable label for the CA, suitable for display in user interfaces, in an issuer alternative name extension (<xref section="4.2.1.7" sectionFormat="of" target="RFC5280"/>). If present, the extension <bcp14>MUST</bcp14> be marked non-critical. The <tt>IssuerAltName</tt> SEQUENCE <bcp14>MUST</bcp14> contain a single <tt>GeneralName</tt> of type <tt>directoryName</tt>, whose <tt>Name</tt> <bcp14>MUST</bcp14> use the <tt>rdnSequence</tt> CHOICE. Each <tt>RelativeDistinguishedName</tt> <bcp14>MUST</bcp14> contain a single <tt>AttributeTypeAndValue</tt>. The extension is purely cosmetic, and <bcp14>MUST NOT</bcp14> be used in path validation or any other trust decision. The value <bcp14>MUST NOT</bcp14> be assumed unique across issuance logs and <bcp14>MAY</bcp14> change across entries in the same issuance log.</t>
                </li>
              </ul>
            </li>
            <li>
              <t><tt>subjectPublicKeyAlgorithm</tt> describes the algorithm of the subject's public key. It is constructed identically to the <tt>algorithm</tt> field of a SubjectPublicKeyInfo (<xref section="4.1.2.7" sectionFormat="of" target="RFC5280"/>).</t>
            </li>
            <li>
              <t><tt>subjectPublicKeyInfoHash</tt> contains the hash of the subject's public key, encoded as a SubjectPublicKeyInfo. The hash uses the CA's hash function (<xref target="certification-authorities"/>) and is computed over the SubjectPublicKeyInfo's DER <xref target="X.690"/> encoding.</t>
            </li>
          </ul>
          <t>Note the subject's public key algorithm is incorporated into both <tt>subjectPublicKeyAlgorithm</tt> and <tt>subjectPublicKeyInfoHash</tt>.</t>
          <t>MTCLogEntry is an extensible structure. Future documents <bcp14>MAY</bcp14> define new values for MTCLogEntryType or MTCLogEntryExtensionType by adding to the registries defined in <xref target="mtc-log-entry-types"/> and <xref target="mtc-log-entry-extension-types"/>, respectively. See <xref target="certification-authority-cosigners"/> and <xref target="extensibility"/> for additional discussion.</t>
          <t>An MTCLogEntry's size <bcp14>MUST NOT</bcp14> exceed 65535 (2<sup>16</sup>-1) bytes. TBSCertificateLogEntry does not include signatures and hashes public keys, so post-quantum algorithms do not contribute to this size.</t>
        </section>
        <section anchor="publishing-logs">
          <name>Publishing Logs</name>
          <t>This protocol aims to enable monitors to detect misissued certificates by observing the issuance log. See <xref target="transparency"/>.</t>
          <t>This document does not prescribe a particular method of observing the issuance log. The access protocols do not affect certificate interoperability, and different applications could have different needs. For example, a PKI that authenticates public services might publicly serve issuance logs, while a PKI that authenticates a single organization's intranet services might keep the log private to the organization. Relying parties <bcp14>SHOULD</bcp14> define log serving requirements, including the allowed protocols and expected availability, as part of their policies on which CAs to support. See also <xref target="log-availability"/>.</t>
          <t>If a serving protocol supports serving only a portion of the log, relying party policies <bcp14>SHOULD</bcp14> include requirements on which portions to serve.</t>
          <t>For example, <xref target="MTC-TLOG"/> defines a profile for Merkle Tree Certificates that uses <xref target="TLOG-TILES"/>.</t>
          <ul empty="true">
            <li>
              <t><strong>RFC Editor's Note:</strong> <xref target="MTC-TLOG"/> and other non-normative C2SP references cite this document and are themselves versioned. Ideally, the final RFC would reference C2SP versions that reference the final RFC. After the final RFC number is allocated, the authors can help coordinate the document clustering across those references, including tagging the appropriate versions of the C2SP documents.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="cosigners">
        <name>Cosigners</name>
        <t>This section defines a log <em>cosigner</em>. A cosigner follows some append-only view of the log and signs subtrees (<xref target="subtrees"/>) consistent with that view. The signatures generated by a cosigner are known as <em>cosignatures</em>. All subtrees signed by a cosigner <bcp14>MUST</bcp14> be consistent with each other. The cosigner may be external to the log, in which case it might ensure consistency by checking consistency proofs. The cosigner may be operated together with the log, in which case it can trust its log state.</t>
        <t>A cosignature <bcp14>MAY</bcp14> implicitly make additional statements about a subtree, determined by the cosigner's role. This document defines one concrete cosigner role, a CA cosigner (<xref target="certification-authority-cosigners"/>), to authenticate the log and certify entries. Other documents and specific deployments <bcp14>MAY</bcp14> define other cosigner roles, to perform different functions in a PKI. For example, <xref target="TLOG-WITNESS"/> defines a cosigner that only checks the log is append-only, and <xref target="TLOG-MIRROR"/> defines a cosigner that mirrors a log.</t>
        <t>Each cosigner has a public key and a <em>cosigner ID</em>, which uniquely identifies the cosigner. The cosigner ID is a trust anchor ID <xref target="I-D.ietf-tls-trust-anchor-ids"/>. By identifying the cosigner, the cosigner ID specifies the public key, signature algorithm, and any additional statements made by the cosigner's signatures. If a single operator performs multiple cosigner roles in an ecosystem, each role <bcp14>MUST</bcp14> use a distinct cosigner ID and <bcp14>SHOULD</bcp14> use a distinct key.</t>
        <t>Following the principle of key separation <xref target="KeyReuse"/>, cosigner keys <bcp14>SHOULD NOT</bcp14> be used for purposes outside this document. Additional uses <bcp14>MAY</bcp14> be defined but <bcp14>MUST NOT</bcp14> overlap with the signature format defined in <xref target="signature-format"/>. See <xref target="signature-domain-separation"/> for additional discussion.</t>
        <t>A single cosigner, with a single cosigner ID and public key, <bcp14>MAY</bcp14> generate cosignatures for multiple logs. In this case, signed subtrees only need to be consistent with others for the same log.</t>
        <section anchor="signature-format">
          <name>Signature Format</name>
          <t>A cosigner computes a <em>subtree signature</em> for a subtree in a log by signing a CosignedSubtree, defined below using the TLS presentation language (<xref section="3" sectionFormat="of" target="RFC9846"/>):</t>
          <sourcecode type="tls-presentation"><![CDATA[
opaque HashValue[HASH_SIZE];

struct {
    uint8 label[12] = "subtree/v1\n\0";
    opaque cosigner_name<1..2^8-1>;
    uint64 timestamp;
    opaque log_origin<1..2^8-1>;
    uint64 start;
    uint64 end;
    HashValue subtree_hash;
} CosignedSubtree;
]]></sourcecode>
          <t>This signature format is designed to be compatible with the ML-DSA-44 signature construction in <xref target="TLOG-COSIGNATURE"/>, but it supports signature algorithms other than ML-DSA-44 and tree hashes other than SHA-256.</t>
          <t><tt>label</tt> is a fixed prefix for domain separation. Its value <bcp14>MUST</bcp14> be the string <tt>subtree/v1</tt>, followed by a newline (U+000A), followed by a zero byte (U+0000).</t>
          <t><tt>cosigner_name</tt> and <tt>log_origin</tt> are computed from the cosigner ID and the issuance log's ID (<xref target="ca-ids"/>), respectively. They contain the concatenation of:</t>
          <ul spacing="normal">
            <li>
              <t>The 16-byte ASCII string <tt>oid/1.3.6.1.4.1.</tt></t>
            </li>
            <li>
              <t>The trust anchor ID's ASCII representation (<xref section="4" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>)</t>
            </li>
          </ul>
          <t>This is equivalent to the concatenation of:</t>
          <ul spacing="normal">
            <li>
              <t>The four-byte ASCII string <tt>oid/</tt></t>
            </li>
            <li>
              <t>The trust anchor ID as a full OID, in dotted decimal notation</t>
            </li>
          </ul>
          <t>For example, the trust anchor ID 32473.1 would be encoded as the ASCII string <tt>oid/1.3.6.1.4.1.32473.1</tt>.</t>
          <t>OID components in a trust anchor ID can be arbitrarily large. Implementations <bcp14>MAY</bcp14> set an upper bound on supported OID components, based on the guidance in <xref section="8" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>. Such implementations <bcp14>MUST</bcp14> fail signature generation or verification if an OID component is out of range.</t>
          <t><tt>start</tt> and <tt>end</tt> <bcp14>MUST</bcp14> define a valid subtree of the log, and <tt>subtree_hash</tt> <bcp14>MUST</bcp14> be the subtree's hash value in the cosigner's view of the log. See <xref target="definition-of-a-subtree"/>.</t>
          <t>If <tt>timestamp</tt> is non-zero, it <bcp14>MUST</bcp14> be the time that the signature was produced. This time is represented as seconds since the Epoch, as defined in Section 4.19 of Volume 1 of <xref target="POSIX"/>. Additionally, if <tt>timestamp</tt> is non-zero, the following <bcp14>MUST</bcp14> be true:</t>
          <ul spacing="normal">
            <li>
              <t><tt>start</tt> <bcp14>MUST</bcp14> be zero.</t>
            </li>
            <li>
              <t><tt>end</tt> <bcp14>MUST</bcp14> be the size of the largest consistent tree that the cosigner has observed for the log.</t>
            </li>
          </ul>
          <t><tt>timestamp</tt> <bcp14>MAY</bcp14> be zero, in which case no additional constraints are placed on <tt>start</tt> or <tt>end</tt> (beyond being a valid subtree), and no statement is made about the signing time or largest observed tree.</t>
        </section>
        <section anchor="signature-semantics">
          <name>Signature Semantics</name>
          <t>Before signing a subtree of some log, the cosigner <bcp14>MUST</bcp14> ensure that <tt>subtree_hash</tt> is consistent with its view of the log. Different cosigner roles will obtain this assurance differently. For example:</t>
          <ul spacing="normal">
            <li>
              <t>A cosigner <bcp14>MAY</bcp14> maintain a full copy of the log, e.g. if it's the log operator. The cosigner can then compute <tt>subtree_hash</tt> from this copy.</t>
            </li>
            <li>
              <t>A cosigner <bcp14>MAY</bcp14> maintain the hash of the largest consistent tree observed by the log. The cosigner can then check <tt>subtree_hash</tt> with a subtree consistency proof (<xref target="subtree-consistency-proofs"/>).</t>
            </li>
            <li>
              <t>A cosigner <bcp14>MAY</bcp14> maintain any other representation of the log which allows it to verify the consistency of the log.</t>
            </li>
          </ul>
          <t>In all cases, the cosigner <bcp14>MUST</bcp14> ensure that, as it updates its view of the log, the old and new views are consistent.</t>
          <t>When a cosigner signs a subtree, it is held separately responsible <em>both</em> for the subtree being consistent with its other signatures, <em>and</em> for the cosigner-specific additional statements. That is, if a cosigner signs an inconsistent subtree, it is held responsible for its additional statements on all entries in the inconsistent subtree, even if some other signed subtree exists that asserts different entries.</t>
          <t>Subtree signatures can be used to sign timestamped log checkpoints by using a non-zero <tt>timestamp</tt>. A signature with a non-zero <tt>timestamp</tt> asserts the complete state of the cosigner's view of the log at a given time. These signatures are not directly used in Merkle Tree Certificates (<xref target="certificate-format"/>), but cosigners <bcp14>MAY</bcp14> generate them, subject to the rules above, as part of other functions in a PKI, such as log serving or integrating an issuance log into a transparency ecosystem. For example, <xref target="TLOG-TILES"/> and <xref target="TLOG-WITNESS"/> use such signatures.</t>
        </section>
        <section anchor="signature-algorithms">
          <name>Signature Algorithms</name>
          <t>The cosigner's public key specifies both the key material and the signature algorithm to use with the key material. In order to change key or signature parameters, a cosigner operator <bcp14>MUST</bcp14> deploy a new cosigner, with a new cosigner ID. Signature algorithms <bcp14>MUST</bcp14> fully specify the algorithm parameters, such as hash functions used. Signatures are computed over the CosignedSubtree described in <xref target="signature-format"/>.</t>
          <t>Log clients that accept cosignatures from some cosigner are assumed to be configured with all parameters necessary to verify that cosigner's signatures, including the signature algorithm and version of the signature format.</t>
        </section>
      </section>
      <section anchor="certification-authority-cosigners">
        <name>Certification Authority Cosigners</name>
        <t>A <em>CA cosigner</em> is a cosigner (<xref target="cosigners"/>) that certifies the contents of a log. Each CA <bcp14>MUST</bcp14> operate a CA cosigner whose cosigner ID is the same as its CA ID (<xref target="ca-ids"/>). A CA cosigner <bcp14>MUST NOT</bcp14> sign checkpoints or subtrees for logs not part of this CA instance.</t>
        <t>When a CA cosigner signs a subtree, it makes the additional statement that it has certified each entry in the subtree. For example, a domain-validating CA states that it has performed domain validation for each entry, at some time consistent with the entry's validity dates. CAs are held responsible for every entry in every subtree they sign. Proving an entry is included (<xref target="subtree-inclusion-proofs"/>) in a CA-signed subtree is sufficient to prove the CA certified it.</t>
        <t>What it means to certify an entry depends on the entry type:</t>
        <ul spacing="normal">
          <li>
            <t>To certify an entry of type <tt>null_entry</tt> is a no-op. A CA <bcp14>MAY</bcp14> freely certify <tt>null_entry</tt> without being held responsible for any validation.</t>
          </li>
          <li>
            <t>To certify an entry of type <tt>tbs_cert_entry</tt> is to certify the TBSCertificateLogEntry, as defined in <xref target="log-entries"/>.</t>
          </li>
        </ul>
        <t>Entries are extensible. Future documents <bcp14>MAY</bcp14> define <tt>type</tt> and <tt>extension_type</tt> values and the semantics of the data that they contain. A CA <bcp14>MUST NOT</bcp14> sign a subtree if it contains an entry with <tt>type</tt> or <tt>extension_type</tt> that it does not recognize. Doing so would certify that the CA has validated the information in some not-yet-defined format. <xref target="extensibility"/> further discusses security implications of such extensions.</t>
        <t>If the CA issues certificate revocation lists (CRLs) <xref target="RFC5280"/> or Online Certificate Status Protocol (OCSP) responses <xref target="RFC6960"/>, the CA's cosigner key <bcp14>MAY</bcp14> be used to directly sign TBSCertList or OCSP ResponseData structures, respectively, but only for this CA instance. Such uses remain subject to other X.509 constraints, such as the key usage extension, which are out of scope for this document. See <xref target="signature-domain-separation"/> for a discussion of domain separation.</t>
        <t>If the CA operator additionally operates a directly-signing X.509 CA, that CA key <bcp14>MUST</bcp14> be distinct from any Merkle Tree CA cosigner keys. In particular, a CA cosigner key <bcp14>MUST NOT</bcp14> be used to directly sign TBSCertificate structures. A CA cosigner key issues certificates by signing subtrees.</t>
      </section>
      <section anchor="representing-certification-authorities">
        <name>Representing Certification Authorities</name>
        <t>This section defines the X.509 Certificate <xref target="RFC5280"/> representation of a Merkle Tree CA. It identifies the CA cosigner (<xref target="certification-authority-cosigners"/>) and associated issuance logs. This information is encoded as follows:</t>
        <ul spacing="normal">
          <li>
            <t>The <tt>subject</tt> field <bcp14>MUST</bcp14> be the CA ID as a PKIX distinguished name, as described in <xref section="4.1" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>.</t>
          </li>
          <li>
            <t>The <tt>subjectPublicKeyInfo</tt> field <bcp14>MUST</bcp14> be the public key of the CA cosigner <xref target="certification-authority-cosigners"/>.</t>
          </li>
          <li>
            <t>The <tt>extensions</tt> field <bcp14>MUST</bcp14> contain a critical Merkle Tree CA extension. This is defined below.</t>
          </li>
          <li>
            <t>The subject key identifier extension (<xref section="4.2.1.2" sectionFormat="of" target="RFC5280"/>), if present, <bcp14>SHOULD</bcp14> be set to the CA ID <xref target="ca-ids"/>. The CA ID is encoded in its binary representation, as defined in <xref section="4" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>.</t>
          </li>
        </ul>
        <t>Other fields and extensions in <xref target="RFC5280"/> apply unmodified. In particular:</t>
        <ul spacing="normal">
          <li>
            <t>The key usage extension (<xref section="4.2.1.3" sectionFormat="of" target="RFC5280"/>) <bcp14>MUST</bcp14> be present and assert at least the <tt>keyCertSign</tt> bit.</t>
          </li>
          <li>
            <t>The basic constraints extension (<xref section="4.2.1.9" sectionFormat="of" target="RFC5280"/>) <bcp14>MUST</bcp14> be present and set the <tt>cA</tt> field to TRUE.</t>
          </li>
        </ul>
        <t>The Merkle Tree CA extension defines the remaining parameters specific to this protocol. It indicates that the subject of the certificate is a CA that issues Merkle Tree Certificates. If present, it <bcp14>MUST</bcp14> be marked as critical. The extension type identifies the Merkle Tree construction, and the contents define additional parameters of the CA cosigner.</t>
        <t>This document defines one extension type, id-pe-mtcCertificationAuthority-SHA256, which indicates hashing with SHA-256 <xref target="SHS"/>. Other documents <bcp14>MAY</bcp14> define corresponding extensions for other hash functions or new versions of the tree construction.</t>
        <sourcecode type="asn.1"><![CDATA[
id-pe-mtcCertificationAuthority-SHA256 OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) pe(1) 38 }

ext-mtcCertificationAuthority-SHA256 EXTENSION ::= {
    SYNTAX MTCCertificationAuthority
    IDENTIFIED BY id-pe-mtcCertificationAuthority-SHA256
    CRITICALITY TRUE
}

-- This is 2^48, the minimum possible serial number in this protocol.
mtcMinSerial INTEGER ::= 281474976710656

-- This is 2^64-1, the maximum possible serial number in this protocol.
mtcMaxSerial INTEGER ::= 18446744073709551615

MTCCertificationAuthority ::= SEQUENCE {
    sigAlg    AlgorithmIdentifier{SIGNATURE-ALGORITHM, {...}},
    minSerial INTEGER (mtcMinSerial..mtcMaxSerial),
    maxSerial INTEGER (mtcMinSerial..mtcMaxSerial)
}
]]></sourcecode>
        <t>The fields of an MTCCertificationAuthority structure are defined as follows:</t>
        <ul spacing="normal">
          <li>
            <t><tt>sigAlg</tt> is the CA cosigner's signature algorithm (<xref target="signature-algorithms"/>).</t>
          </li>
          <li>
            <t><tt>minSerial</tt> and <tt>maxSerial</tt> describe the minimum and maximum allowed serial numbers from this CA, respectively. See <xref target="revoked-ranges"/> for discussion on setting these values.</t>
          </li>
        </ul>
        <t>If this extension is present, the key described in <tt>subjectPublicKeyInfo</tt> is a CA cosigner key and subject to the usage restrictions described in <xref target="certification-authority-cosigners"/>. In particular, it <bcp14>MUST NOT</bcp14> be used to directly sign TBSCertificate structures.</t>
        <t>This extension indicates the subtree signature format defined in <xref target="signature-format"/>. If a later version of the protocol defines a new format, this <bcp14>SHOULD</bcp14> be represented in CA certificates with a new extension type.</t>
        <t>A CA certificate using this format <bcp14>SHOULD NOT</bcp14> be self-signed by the CA. Doing so would require writing the information in the issuance log. Instead, if used to represent a trust anchor, the certificate <bcp14>SHOULD</bcp14> be an unsigned certificate <xref target="RFC9925"/>.</t>
      </section>
    </section>
    <section anchor="certificates">
      <name>Certificates</name>
      <t>This section defines how to construct Merkle Tree Certificates, which are X.509 Certificates <xref target="RFC5280"/> that assert the information in an issuance log entry.</t>
      <section anchor="certificate-inputs">
        <name>Certificate Inputs</name>
        <t>A Merkle Tree Certificate is constructed from the following inputs:</t>
        <ul spacing="normal">
          <li>
            <t>A TBSCertificateLogEntry (<xref target="log-entries"/>) contained in one of the CA's issuance logs (<xref target="issuance-logs"/>)</t>
          </li>
          <li>
            <t>A subject public key whose hash matches the TBSCertificateLogEntry</t>
          </li>
          <li>
            <t>The <tt>log_number</tt> and the zero-based entry <tt>index</tt> of that log entry within the issuance log, used to construct the certificate's <tt>serialNumber</tt> (<xref target="certificate-format"/>).</t>
          </li>
          <li>
            <t>An <tt>MTCProof</tt> (<xref target="certificate-format"/>) proving the entry's inclusion in a subtree, along with zero or more signatures (<xref target="cosigners"/>) over that subtree, which together satisfy relying party requirements (<xref target="trusted-cosigners"/>)</t>
          </li>
        </ul>
        <t>By varying the choice of subtree and signatures, there can be multiple ways to prove the entry is in the log, and thus certified by the CA. <xref target="certificate-format"/> defines how a certificate is constructed based on those choices. <xref target="standalone-certificates"/> and <xref target="landmark-relative-certificates"/> define two profiles of Merkle Tree Certificates, standalone certificates and landmark-relative certificates, and how to select the subtree and signatures for them.</t>
      </section>
      <section anchor="certificate-format">
        <name>Certificate Format</name>
        <t>The information is encoded in an X.509 Certificate <xref target="RFC5280"/> as follows:</t>
        <t>The TBSCertificate's <tt>version</tt>, <tt>issuer</tt>, <tt>validity</tt>, <tt>subject</tt>, <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, and <tt>extensions</tt> <bcp14>MUST</bcp14> be equal to the corresponding fields of the TBSCertificateLogEntry. If any of <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, or <tt>extensions</tt> is absent in the TBSCertificateLogEntry, the corresponding field <bcp14>MUST</bcp14> be absent in the TBSCertificate. Per <xref target="log-entries"/>, this means <tt>issuer</tt> <bcp14>MUST</bcp14> be the issuance log's CA ID as a PKIX distinguished name, as described in <xref section="4.1" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>.</t>
        <t>The TBSCertificate's <tt>serialNumber</tt> is constructed from the zero-based index of the TBSCertificateLogEntry in the log and the log's number (<xref target="issuance-logs"/>). The <tt>serialNumber</tt> <bcp14>MUST</bcp14> be equal to <tt>(log_number &lt;&lt; 48) | index</tt>. All serial numbers constructed in this way will be positive and at most 2<sup>64</sup>-1.</t>
        <t>The TBSCertificate's <tt>subjectPublicKeyInfo</tt> contains the specified public key. Its <tt>algorithm</tt> field <bcp14>MUST</bcp14> match the TBSCertificateLogEntry's <tt>subjectPublicKeyAlgorithm</tt>. Its hash <bcp14>MUST</bcp14> match the TBSCertificateLogEntry's <tt>subjectPublicKeyInfoHash</tt>.</t>
        <t>The TBSCertificate's <tt>signature</tt> and the Certificate's <tt>signatureAlgorithm</tt> <bcp14>MUST</bcp14> contain an AlgorithmIdentifier whose <tt>algorithm</tt> is id-alg-mtcProof, defined below, and whose <tt>parameters</tt> is omitted.</t>
        <sourcecode type="asn.1"><![CDATA[
id-alg-mtcProof OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) algorithms(6) 67 }
]]></sourcecode>
        <t>The <tt>signatureValue</tt> contains an MTCProof structure, defined below using the TLS presentation language (<xref section="3" sectionFormat="of" target="RFC9846"/>):</t>
        <sourcecode type="tls-presentation"><![CDATA[
/* From Section 4 of draft-ietf-tls-trust-anchor-ids */
opaque TrustAnchorID<1..2^8-1>;

struct {
    TrustAnchorID cosigner_id;
    opaque signature<0..2^16-1>;
} Cosignature;

struct {
    MTCLogEntryExtension extensions<0..2^16-1>;
    uint48 start;
    uint48 end;
    opaque inclusion_proof<0..2^16-1>;
    Cosignature signatures<0..2^24-1>;
} MTCProof;
]]></sourcecode>
        <t><tt>extensions</tt> <bcp14>MUST</bcp14> contain the log entry's <tt>extensions</tt> value (<xref target="log-entries"/>).</t>
        <t><tt>start</tt> and <tt>end</tt> <bcp14>MUST</bcp14> contain the corresponding parameters of the chosen subtree. <tt>inclusion_proof</tt> <bcp14>MUST</bcp14> contain a subtree inclusion proof (<xref target="subtree-inclusion-proofs"/>) for the log entry and the subtree. Each hash in the proof is concatenated in order. <tt>signatures</tt> contains the chosen subtree signatures. In each signature, <tt>cosigner_id</tt> contains the cosigner ID (<xref target="cosigners"/>) in its binary representation (<xref section="4" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>), and <tt>signature</tt> contains the signature value as described in <xref target="signature-format"/>. The <tt>timestamp</tt> field used when computing the signature <bcp14>MUST</bcp14> be zero.</t>
        <t>Each element of the <tt>signatures</tt> field <bcp14>MUST</bcp14> have a unique <tt>cosigner_id</tt>. Elements <bcp14>MUST</bcp14> be ordered by <tt>cosigner_id</tt> (excluding length prefix) as follows:</t>
        <ul spacing="normal">
          <li>
            <t>Shorter byte strings are ordered before longer byte strings</t>
          </li>
          <li>
            <t>Byte strings of the same length are ordered lexicographically</t>
          </li>
        </ul>
        <t>An MTCProof parser <bcp14>MUST</bcp14> reject the input if there are duplicate <tt>cosigner_id</tt> values, or if they are not ordered correctly. This can be done by checking each <tt>cosigner_id</tt> value comes strictly after the previous one in the above order.</t>
        <t>CAs, or other parties, <bcp14>MAY</bcp14> include GREASE <xref target="RFC8701"/> cosignatures in an MTCProof by allocating an unused cosigner ID and inserting it into the <tt>signatures</tt> field. The <tt>cosigner_id</tt> is the unused cosigner ID and the <tt>signature</tt> is an arbitrary byte string. A cosigner ID allocated for GREASE <bcp14>MUST NOT</bcp14> be later repurposed for a real cosigner.</t>
        <t>The MTCProof is encoded into the <tt>signatureValue</tt> with no additional ASN.1 wrapping. The most significant bit of the first octet of the signature value <bcp14>SHALL</bcp14> become the first bit of the bit string, and so on through the least significant bit of the last octet of the signature value, which <bcp14>SHALL</bcp14> become the last bit of the bit string</t>
      </section>
      <section anchor="standalone-certificates">
        <name>Standalone Certificates</name>
        <t>A <em>standalone certificate</em> is a Merkle Tree certificate which contains sufficient signatures to allow a relying party to trust the choice of subtree, without any predistributed information beyond the cosigner(s) parameters. Standalone certificates can be issued without significant processing delay.</t>
        <t>When issuing a certificate, the CA first adds the TBSCertificateLogEntry to its issuance log. It then schedules a job to construct a checkpoint and collect cosignatures. The job proceeds as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>The CA signs the checkpoint with its key(s) (<xref target="certification-authority-cosigners"/>).</t>
          </li>
          <li>
            <t>Using the procedure in <xref target="arbitrary-intervals"/>, the CA determines the two subtrees that cover the entries added between this checkpoint and the most recent checkpoint.</t>
          </li>
          <li>
            <t>The CA signs each subtree with its key(s) (<xref target="cosigners"/>).</t>
          </li>
          <li>
            <t>The CA requests sufficient subtree cosignatures from external cosigners to meet relying party requirements (<xref target="trusted-cosigners"/>). Depending on the protocol for requesting subtree cosignatures (e.g. <xref target="TLOG-WITNESS"/> and <xref target="TLOG-MIRROR"/>), this step may require first requesting a checkpoint cosignature (<xref target="cosigners"/>) from each cosigner.</t>
          </li>
          <li>
            <t>For each log entry in the interval, the CA constructs a certificate (<xref target="certificate-format"/>) from the inputs in <xref target="certificate-inputs"/>, using the covering subtree and the subtree cosignatures collected in steps 3 and 4.</t>
          </li>
        </ol>
        <t>Step 4 is analogous to requesting SCTs from CT logs in Certificate Transparency, except that a single run of this job collects signatures for many certificates at once. The CA <bcp14>MAY</bcp14> request signatures from a redundant set of cosigners and select the ones that complete first.</t>
        <t>This document does not place any requirements on how frequently this job runs. More frequent runs result in lower issuance delay, but higher signing overhead. It is <bcp14>RECOMMENDED</bcp14> that CAs run at most one instance of this job at a time, starting the next instance after the previous one completes. A single run collects signatures for all entries since the most recent checkpoint, so there is little benefit to overlapping them. Less frequent runs may also aid relying parties that wish to directly audit signatures, as described in Section 5.2 of <xref target="AuditingRevisited"/>, though this document does not define such a system.</t>
        <t>This document does not prescribe the specific cosigner roles, or a particular protocol for requesting cosignatures. Protocols for cosigners can vary depending on the needs of that cosigner. Some example protocols are described in <xref target="TLOG-WITNESS"/> and <xref target="TLOG-MIRROR"/>. It is <bcp14>RECOMMENDED</bcp14> that the CA collect cosignatures for the authenticating party, but the authenticating party <bcp14>MAY</bcp14> collect additional cosignatures and add them to the certificate.</t>
      </section>
      <section anchor="landmark-relative-certificates">
        <name>Landmark-Relative Certificates</name>
        <t>A <em>landmark-relative certificate</em> is a Merkle Tree certificate which authenticates its subtree by assuming the relying party had predistributed information about which subtrees were trusted. This allows the certificate to omit subtree cosignatures.</t>
        <t>Landmark-relative certificates are an optional size optimization. They require a processing delay to construct, and only work in a sufficiently up-to-date relying party. Authenticating parties thus <bcp14>SHOULD</bcp14> deploy a corresponding standalone certificate alongside any landmark-relative certificate, and use some application-protocol-specific mechanism to select between the two. <xref target="use-in-tls"/> discusses such a mechanism for TLS <xref target="RFC9846"/>.</t>
        <section anchor="landmark-tree-sizes">
          <name>Landmark Tree Sizes</name>
          <t>A CA that issues landmark-relative certificates <bcp14>MUST</bcp14> additionally maintain a <em>landmark sequence</em>. A landmark sequence is a sequence of <em>landmarks</em>, defined below. Landmarks are used as a common point of reference across the ecosystem for optimizing certificates.</t>
          <t>Each landmark consists of:</t>
          <ul spacing="normal">
            <li>
              <t>A landmark number, used as an identifier for the landmark</t>
            </li>
            <li>
              <t>A tree size, which is the size of the tree at the time the landmark was allocated</t>
            </li>
            <li>
              <t>An expiration time, represented as seconds since the Epoch (Section 4.19 of Volume 1 of <xref target="POSIX"/>)</t>
            </li>
          </ul>
          <t>The landmark sequence is append-only, with landmarks numbered consecutively from zero. Landmark zero <bcp14>MUST</bcp14> have a tree size of zero and an expiration of zero seconds since the Epoch. For each subsequent landmark, the tree size <bcp14>MUST</bcp14> be greater than that of the previous landmark, and the expiry <bcp14>MUST</bcp14> be greater or equal to that of the previous landmark.</t>
          <t>Each landmark has two <em>landmark subtrees</em>. The landmark subtrees for landmark number <tt>L</tt> as determined follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>If <tt>L</tt> is zero, the landmark subtrees are <tt>[0, 0)</tt> and <tt>[0, 0)</tt>.</t>
            </li>
            <li>
              <t>Otherwise, let <tt>tree_size</tt> be landmark <tt>L</tt>'s tree size and <tt>prev_tree_size</tt> be that of landmark <tt>L - 1</tt>.</t>
            </li>
            <li>
              <t>The landmark subtrees are the two subtrees that cover <tt>[prev_tree_size, tree_size)</tt>, as described in <xref target="arbitrary-intervals"/>.</t>
            </li>
          </ol>
          <t>A landmark's expiration time <bcp14>MUST</bcp14> be greater or equal to the <tt>notAfter</tt> time of every TBSCertificateLogEntry whose index is less than the tree size. When allocating a landmark, CAs <bcp14>SHOULD</bcp14> set the expiration time to the current time plus the CA's maximum certificate lifetime.</t>
          <t>A landmark that is not yet expired is said to be <em>active</em>. Landmark zero is never active. At any time, a log's <em>active landmark subtrees</em> are the landmark subtrees of each currently active landmark. Active landmark subtrees are predistributed to the relying party as trusted subtrees, as described in <xref target="trusted-subtrees"/>.</t>
          <t>The above conditions imply that every unexpired entry in the log is either contained in some landmark subtree or was allocated sometime after the latest landmark.</t>
          <t>As the issuance log grows, CAs continuously allocate new landmarks. More frequent allocation reduces landmark-relative certificate delay, while less frequent allocation reduces the size of the relying party's predistributed state. As described in <xref target="trusted-subtrees"/>, relying parties maintain some upper bound on active landmarks per CA. CAs <bcp14>SHOULD</bcp14> allocate landmarks such that the number of active landmarks, across all their logs, is within the bound for supported relying parties. <xref target="allocating-landmarks"/> gives a <bcp14>RECOMMENDED</bcp14> procedure for allocating landmarks.</t>
          <t>Mistakes in landmark sequence allocation only impact availability, not security. That is, they will not cause the relying party to accept certificates for entries the CA did not certify. However, they might cause a relying party to reject some of the CA's otherwise valid landmark-relative certificates.</t>
        </section>
        <section anchor="allocating-landmarks">
          <name>Allocating Landmarks</name>
          <t>It is <bcp14>RECOMMENDED</bcp14> that landmarks be allocated using the following procedure:</t>
          <ol spacing="normal" type="1"><li>
              <t>Let <tt>max_cert_lifetime</tt> by some upper bound on the CA's certificate lifetime.</t>
            </li>
            <li>
              <t>Select some <tt>time_between_landmarks</tt> duration.</t>
            </li>
            <li>
              <t>Define a series of consecutive, non-overlapping time intervals, each of duration <tt>time_between_landmarks</tt>.</t>
            </li>
            <li>
              <t>At most once per time interval, run the following:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>If the current log's tree size is equal to the its landmark's tree size, do nothing.</t>
                </li>
                <li>
                  <t>Otherwise, append a landmark to the current log whose tree size is the current tree size and whose expiry is the current time plus <tt>max_cert_lifetime</tt>.</t>
                </li>
              </ol>
            </li>
          </ol>
          <t>This procedure ensures there are at most <tt>ceil(max_cert_lifetime / time_between_landmarks) + 1</tt> active landmarks across all of the CA's logs. For example, if <tt>max_cert_lifetime</tt> is 7 days and <tt>time_between_landmarks</tt> is one hour, there will be at most 169 active landmarks, or 338 active landmark subtrees. The relying party state is then 10,816 bytes with SHA-256.</t>
        </section>
        <section anchor="publishing-landmarks">
          <name>Publishing Landmarks</name>
          <t>The following format can be used to represent a CA's active landmarks. The format <bcp14>MUST</bcp14> contain the following sequence of lines. Each line <bcp14>MUST</bcp14> be terminated by a newline character (U+000A):</t>
          <ul spacing="normal">
            <li>
              <t>A header line consisting of a decimal integer, <tt>latest_landmark</tt>, with the landmark number of the CA's most recent landmark at the time of publishing. This value <bcp14>MUST</bcp14> be at most 2<sup>48</sup>-1.</t>
            </li>
            <li>
              <t>A sequence of <tt>num_active_landmarks + 1</tt> lines, where <tt>num_active_landmarks</tt> is the number of active landmarks at the time of publishing. Decoders <bcp14>MUST</bcp14> reject documents where there are greater than <tt>latest_landmark + 1</tt> such lines. Numbered consecutively from zero, line <tt>i</tt> in this sequence consists of:  </t>
              <ul spacing="normal">
                <li>
                  <t>The tree size for landmark <tt>latest_landmark - i</tt> as a decimal integer. This value <bcp14>MUST</bcp14> be at most 2<sup>48</sup>-1.</t>
                </li>
                <li>
                  <t>A single space character (U+0020).</t>
                </li>
                <li>
                  <t>The expiration time for landmark <tt>latest_landmark - i</tt> as a decimal integer containing seconds since the Epoch (Section 4.19 of Volume 1 of <xref target="POSIX"/>).</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>Tree sizes <bcp14>MUST</bcp14> be strictly monotonically decreasing, and expiration times <bcp14>MUST</bcp14> be monotonically decreasing. There <bcp14>MUST</bcp14> be at least one expiration time before the current time.</t>
          <t>Decoders <bcp14>MUST</bcp14> reject documents that do not strictly conform to the above requirements, including extraneous whitespace and the lack of an expired landmark. A decoder <bcp14>MAY</bcp14> process only a prefix of this document, provided there is at least one expired landmark to denote the end of the active landmarks.</t>
        </section>
        <section anchor="constructing-landmark-relative-certificates">
          <name>Constructing Landmark-Relative Certificates</name>
          <t>Given the inputs in <xref target="certificate-inputs"/> and the corresponding log's landmark sequence, a landmark-relative certificate is constructed as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Let <tt>idx</tt> be the entry index.</t>
            </li>
            <li>
              <t>Let <tt>L</tt> be the lowest numbered landmark whose tree size is strictly greater than <tt>idx</tt>. If no such landmark has been allocated yet, wait for one to be allocated. If the entry has already expired and historical landmark information is unavailable, abort the procedure.</t>
            </li>
            <li>
              <t>Determine the <tt>L</tt>'s subtrees (<xref target="landmark-tree-sizes"/>) and select the unique one whose <tt>[start, end)</tt> interval contains <tt>idx</tt>.</t>
            </li>
            <li>
              <t>Construct a certificate (<xref target="certificate-format"/>) using the selected subtree. No cosignatures are required to authenticate the subtree, though the certificate <bcp14>MAY</bcp14> include cosignatures for other purposes, such as GREASE <xref target="RFC8701"/> cosignatures as described in <xref target="certificate-format"/>.</t>
            </li>
          </ol>
          <t>The procedure above is not specific to the CA. Any party holding a standalone certificate (<xref target="standalone-certificates"/>) can construct the corresponding landmark-relative certificate by recovering the certificate inputs from it and obtaining the landmark sequence and inclusion proof hashes from the issuance log.</t>
        </section>
      </section>
      <section anchor="size-estimates">
        <name>Size Estimates</name>
        <t>The inclusion proofs in standalone and landmark-relative certificates scale logarithmically with the size of the subtree. These sizes can be estimated with the CA's issuance rate. The byte counts below assume the issuance log's hash function is SHA-256.</t>
        <t>Some organizations have published statistics which can be used to estimate this rate for the Web PKI. As of September 18th, 2026:</t>
        <ul spacing="normal">
          <li>
            <t><xref target="LetsEncrypt"/> reported around 682,000,000 active certificates for a single CA</t>
          </li>
          <li>
            <t><xref target="CloudflareRadar"/> reported around 2,900,000,000 unexpired certificates in CT logs, across all CAs</t>
          </li>
          <li>
            <t><xref target="CloudflareRadar"/> reported an issuance rate of around 591,000 certificates per hour, across all CAs</t>
          </li>
        </ul>
        <t>The current issuance rate across the Web PKI may not necessarily be representative of the Web PKI after a transition to short-lived certificates. Assuming a certificate lifetime of 7 days, and that subscribers will update their certificates 75% of the way through their lifetime (see <xref target="certificate-renewal"/>), every certificate will be reissued every 126 hours. This gives issuance rate estimates of around 5,400,000 certificates per hour and 23,000,000 certificates per hour, for the first two values above. Note the larger estimate is across all CAs, while subtrees would only span one CA.</t>
        <t>Using the per-CA short lifetime estimate, if the CA mints a checkpoint every 2 seconds, standalone certificate subtrees will span around 3,000 certificates, leading to 12 hashes in the inclusion proof, or 384 bytes. Standalone certificates additionally must carry a sufficient set of signatures to meet relying party requirements.</t>
        <t>If a new landmark is allocated every hour, landmark-relative certificate subtrees will span around 5,400,000 certificates, leading to 23 hashes in the inclusion proof, giving an inclusion proof size of 736 bytes, with no signatures. This is significantly smaller than a single ML-DSA-44 signature, 2,420 bytes, and almost ten times smaller than the three ML-DSA-44 signatures necessary to include post-quantum SCTs.</t>
        <t>Proof sizes grow logarithmically, so 32 hashes, or 1024 bytes, is sufficient for subtrees of up to 2<sup>32</sup> (4,294,967,296) certificates.</t>
      </section>
    </section>
    <section anchor="relying-parties">
      <name>Relying Parties</name>
      <t>This section discusses how relying parties verify Merkle Tree Certificates.</t>
      <section anchor="relying-party-configuration">
        <name>Relying Party Configuration</name>
        <t>In order to accept certificates from a Merkle Tree CA, a relying party <bcp14>MUST</bcp14> be configured with:</t>
        <ul spacing="normal">
          <li>
            <t>The CA's ID (<xref target="ca-ids"/>)</t>
          </li>
          <li>
            <t>The CA's log hash algorithm, e.g. SHA-256</t>
          </li>
          <li>
            <t>The CA cosigner, and any other supported cosigners, as pairs of cosigner ID and public key</t>
          </li>
          <li>
            <t>A policy on which combinations of cosigners to accept in a certificate (<xref target="trusted-cosigners"/>)</t>
          </li>
          <li>
            <t>An optional list of trusted subtrees that are known to be consistent with the relying party's cosigner requirements (<xref target="trusted-subtrees"/>)</t>
          </li>
          <li>
            <t>A list of revoked ranges of serial numbers (<xref target="revoked-ranges"/>)</t>
          </li>
        </ul>
        <t>This information may be obtained from a CA certificate structure, defined in <xref target="representing-certification-authorities"/>:</t>
        <ul spacing="normal">
          <li>
            <t>The CA ID is determined from the certificate's subject. Note that, while a general RELATIVE-OID can be arbitrarily long, <xref section="4" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/> limits trust anchor IDs to 32 bytes.</t>
          </li>
          <li>
            <t>The log hash algorithm is determined from the type of the Merkle Tree CA extension.</t>
          </li>
          <li>
            <t>The CA cosigner is determined from the certificate's subject public key and Merkle Tree CA extension. The CA's cosigner ID is the same as its CA ID. The relying party incorporates this cosigner into its cosigner policy based on the guidance in <xref target="trusted-cosigners"/>.</t>
          </li>
          <li>
            <t>No trusted subtrees are directly represented by the CA certificate structure, but the relying party <bcp14>MAY</bcp14> incorporate trusted subtrees from out-of-band information.</t>
          </li>
          <li>
            <t>The revoked serial number ranges include the half-open ranges <tt>[0, minSerial)</tt> and <tt>[maxSerial+1, 2^64)</tt>, but the relying party <bcp14>MAY</bcp14> incorporate additional ranges from out-of-band information.</t>
          </li>
        </ul>
      </section>
      <section anchor="verifying-certificate-signatures">
        <name>Verifying Certificate Signatures</name>
        <t>When verifying the signature of an X.509 certificate (Step (a)(1) of <xref section="6.1.3" sectionFormat="of" target="RFC5280"/>) whose issuer is a Merkle Tree CA, the relying party performs the following procedure:</t>
        <ol spacing="normal" type="1"><li>
            <t>Check that the TBSCertificate's <tt>signature</tt> field is <tt>id-alg-mtcProof</tt> with omitted parameters. If this check fails, abort this process and fail verification.</t>
          </li>
          <li>
            <t>Decode the <tt>signatureValue</tt> as an MTCProof, as described in <xref target="certificate-format"/>. If decoding fails, including if <tt>signatureValue</tt> is not a multiple of 8 bits or has extra data after the MTCProof, abort this process and fail verification.</t>
          </li>
          <li>
            <t>Let <tt>serial</tt> be the certificate's serial number. If <tt>serial</tt> is negative or greater than 2<sup>64</sup>-1, abort this process and fail verification.</t>
          </li>
          <li>
            <t>If <tt>serial</tt> is contained in one of the relying party's revoked ranges (<xref target="revoked-ranges"/>), abort this process and fail verification.</t>
          </li>
          <li>
            <t>Let <tt>index</tt> be the least significant 48 bits of <tt>serial</tt> and let <tt>log_number</tt> be <tt>serial &gt;&gt; 48</tt>. If <tt>log_number</tt> is zero, abort this process and fail verification.</t>
          </li>
          <li>
            <t>Let <tt>log_id</tt> be the log ID constructed from the CA ID in <tt>issuer</tt> and the <tt>log_number</tt> (<xref target="issuance-logs"/>).</t>
          </li>
          <li>
            <t>Construct a TBSCertificateLogEntry as follows:
            </t>
            <ol spacing="normal" type="1"><li>
                <t>Copy the <tt>version</tt>, <tt>issuer</tt>, <tt>validity</tt>, <tt>subject</tt>, <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, and <tt>extensions</tt> fields from the TBSCertificate.</t>
              </li>
              <li>
                <t>Set <tt>subjectPublicKeyAlgorithm</tt> to the <tt>algorithm</tt> field of the <tt>subjectPublicKeyInfo</tt>.</t>
              </li>
              <li>
                <t>Set <tt>subjectPublicKeyInfoHash</tt> to the hash of the DER encoding of <tt>subjectPublicKeyInfo</tt>.</t>
              </li>
            </ol>
          </li>
          <li>
            <t>Construct an MTCLogEntry as follows:
            </t>
            <ol spacing="normal" type="1"><li>
                <t>Set <tt>type</tt> to <tt>tbs_cert_entry</tt>.</t>
              </li>
              <li>
                <t>Set <tt>extensions</tt> to the MTCProof's <tt>extensions</tt> value.</t>
              </li>
              <li>
                <t>Set <tt>tbs_cert_entry_data</tt> to the TBSCertificateLogEntry, encoded as described in <xref target="log-entries"/>.</t>
              </li>
            </ol>
          </li>
          <li>
            <t>Let <tt>entry_hash</tt> be the hash of the entry, <tt>MTH({entry}) = HASH(0x00 || entry)</tt>, as defined in <xref section="2.1.1" sectionFormat="of" target="RFC9162"/>.</t>
          </li>
          <li>
            <t>Let <tt>expected_subtree_hash</tt> be the result of evaluating the MTCProof's <tt>inclusion_proof</tt> for entry <tt>index</tt>, with hash <tt>entry_hash</tt>, of the subtree described by the MTCProof's <tt>start</tt> and <tt>end</tt>, following the procedure in <xref target="evaluating-a-subtree-inclusion-proof"/>. If evaluation fails, abort this process and fail verification.</t>
          </li>
          <li>
            <t>If <tt>log_number</tt>, <tt>start</tt>, and <tt>end</tt> match a trusted subtree (<xref target="trusted-subtrees"/>) for the CA, check that <tt>expected_subtree_hash</tt> is equal to the trusted subtree's hash. Return success if it matches and failure if it does not.</t>
          </li>
          <li>
            <t>Otherwise, check that the MTCProof's <tt>signatures</tt> contain a sufficient set of valid signatures from cosigners to satisfy the relying party's cosigner requirements (<xref target="trusted-cosigners"/>). Unrecognized cosigners <bcp14>MUST</bcp14> be ignored.  </t>
            <t>
Signatures are verified as described in <xref target="signature-format"/>. For each signature verification, the CosignedSubtree structure is constructed as follows:  </t>
            <ol spacing="normal" type="1"><li>
                <t>Set the CosignedSubtree's <tt>cosigner_name</tt> based on the cosigner ID as described in <xref target="signature-format"/>.</t>
              </li>
              <li>
                <t>Set the CosignedSubtree's <tt>timestamp</tt> to zero.</t>
              </li>
              <li>
                <t>Set the CosignedSubtree's <tt>log_origin</tt> based on <tt>log_id</tt> as described in <xref target="signature-format"/>.</t>
              </li>
              <li>
                <t>Set the CosignedSubtree's <tt>start</tt> and <tt>end</tt> to the MTCProof's <tt>start</tt> and <tt>end</tt>, respectively.</t>
              </li>
              <li>
                <t>Set the CosignedSubtree's <tt>subtree_hash</tt> to <tt>expected_subtree_hash</tt>.</t>
              </li>
            </ol>
          </li>
        </ol>
        <t>This procedure only replaces the signature verification portion of X.509 path validation. The relying party <bcp14>MUST</bcp14> continue to perform other checks, such as checking expiry.</t>
        <t>In this procedure, <tt>entry_hash</tt> can equivalently be computed in a single pass from the DER-encoded TBSCertificate, without storing the full TBSCertificateLogEntry or MTCLogEntry in memory:</t>
        <ol spacing="normal" type="1"><li>
            <t>Initialize a hash instance.</t>
          </li>
          <li>
            <t>Write the octet 0x00 to the hash. This is the domain separator for leaf nodes.</t>
          </li>
          <li>
            <t>Write the <tt>extensions</tt> field from the MTCProof to the hash.</t>
          </li>
          <li>
            <t>Write the big-endian, two-byte <tt>tbs_cert_entry</tt> value to the hash.</t>
          </li>
          <li>
            <t>Write the TBSCertificate's <tt>version</tt>, <tt>issuer</tt>, <tt>validity</tt>, and <tt>subject</tt> fields to the hash.</t>
          </li>
          <li>
            <t>Write the <tt>subjectPublicKeyInfo</tt>'s <tt>algorithm</tt> field to the hash.</t>
          </li>
          <li>
            <t>Write the octet 0x04 to the hash. This is an OCTET STRING identifier.</t>
          </li>
          <li>
            <t>Write the octet L to the hash, where L is the hash length. (This assumes L is at most 127.)</t>
          </li>
          <li>
            <t>Write H to the hash, where H is the hash of the entire <tt>subjectPublicKeyInfo</tt> field.</t>
          </li>
          <li>
            <t>Write the remainder of the TBSCertificate contents octets to the hash, starting just after the <tt>subjectPublicKeyInfo</tt> field.</t>
          </li>
          <li>
            <t>Finalize the hash and set <tt>entry_hash</tt> to the result.</t>
          </li>
        </ol>
        <t>This is possible because the structure in <xref target="log-entries"/> omits the TBSCertificateLogEntry's identifier and length octets.</t>
      </section>
      <section anchor="trusted-cosigners">
        <name>Trusted Cosigners</name>
        <t>A relying party's cosigner policy determines the sets of cosigners that must sign a view of the issuance log before it is trusted.</t>
        <t>This document does not prescribe a particular policy, but gives general guidance. Relying parties <bcp14>MAY</bcp14> implement policies other than those described below, and <bcp14>MAY</bcp14> incorporate cosigners acting in roles not described in this document.</t>
        <t>In picking trusted cosigners, the relying party <bcp14>SHOULD</bcp14> ensure the following security properties:</t>
        <dl>
          <dt>Authenticity:</dt>
          <dd>
            <t>The relying party only accepts entries certified by the CA</t>
          </dd>
          <dt>Transparency:</dt>
          <dd>
            <t>The relying party only accepts entries that are publicly accessible, so that monitors, particularly the subject of the certificate, can notice any unauthorized certificates</t>
          </dd>
        </dl>
        <t>Relying parties <bcp14>SHOULD</bcp14> ensure authenticity by requiring a signature from the CA cosigner key. This is analogous to the signature in a directly-signed X.509 certificate. If the relying party obtains CA information from a CA certificate, the CA cosigner key is determined as in <xref target="relying-party-configuration"/>.</t>
        <t>While a CA signature is sufficient to prove a subtree came from the CA, this is not enough to ensure the certificate is visible to monitors. A misbehaving CA might not operate the log correctly, either presenting inconsistent versions of the log to relying parties and monitors, or refusing to publish some entries.</t>
        <t>To mitigate this, relying parties <bcp14>SHOULD</bcp14> ensure transparency by requiring a quorum of signatures from additional cosigners. At minimum, these cosigners <bcp14>SHOULD</bcp14> enforce a consistent view of the log. For example, <xref target="TLOG-WITNESS"/> describes a lightweight "witness" cosigner role that checks this with consistency proofs. This is not sufficient to ensure durable logging. <xref target="revoked-ranges"/> discusses mitigations for this. Alternatively, a relying party <bcp14>MAY</bcp14> require that cosigners serve a copy of the log, in addition to enforcing a consistent view. For example, <xref target="TLOG-MIRROR"/> describes a "mirror" cosigner role.</t>
        <t>Relying parties <bcp14>MAY</bcp14> accept the same set of additional cosigners across CAs.</t>
        <t>In applications that do not enforce transparency requirements, a relying party <bcp14>MAY</bcp14> implement a policy that only checks for a signature from the CA cosigner. This fits the pattern of many existing X.509 applications, where CA information is determined directly from a CA certificate, with no additional out-of-band information. Unrecognized cosignatures are ignored, so such applications can interoperate with certificates issued for transparency-enforcing applications that require additional cosigners.</t>
        <t>Cosigner roles are extensible without changes to certificate verification itself. Future specifications and individual deployments <bcp14>MAY</bcp14> define other cosigner roles to incorporate in relying party policies.</t>
        <t><xref target="choosing-cosigners"/> discusses additional deployment considerations in cosigner selection.</t>
      </section>
      <section anchor="trusted-subtrees">
        <name>Trusted Subtrees</name>
        <t>As an optional optimization, a relying party <bcp14>MAY</bcp14> incorporate a periodically updated, predistributed list of trusted subtrees from the CA. This allows the relying party to accept landmark-relative certificates (<xref target="landmark-relative-certificates"/>) constructed against those subtrees.</t>
        <t>Each trusted subtree contains:</t>
        <ul spacing="normal">
          <li>
            <t>The log number of the containing log</t>
          </li>
          <li>
            <t>The <tt>start</tt> and <tt>end</tt> values that define the subtree</t>
          </li>
          <li>
            <t>The hash of the subtree</t>
          </li>
        </ul>
        <t>Trusted subtrees for a CA are determined by its active landmark subtrees, as described in <xref target="landmark-tree-sizes"/>. Before configuring the subtrees as trusted, the relying party <bcp14>MUST</bcp14> obtain assurance that each subtree is consistent with checkpoints observed by a sufficient set of cosigners (see <xref target="cosigners"/>) to meet its cosigner requirements. It is not necessary that the cosigners have generated signatures over the specific subtrees, only that they are consistent.</t>
        <t>This criterion can be checked given:</t>
        <ul spacing="normal">
          <li>
            <t>Some <em>reference checkpoint</em> whose tree size is greater or equal to that of the latest landmark</t>
          </li>
          <li>
            <t>For each cosigner, either:
            </t>
            <ul spacing="normal">
              <li>
                <t>A cosignature on the reference checkpoint</t>
              </li>
              <li>
                <t>A cosigned checkpoint containing the referenced checkpoint and a valid Merkle consistency proof (<xref section="2.1.4" sectionFormat="of" target="RFC9162"/>) between the two</t>
              </li>
            </ul>
          </li>
          <li>
            <t>For each subtree, a valid subtree consistency proof (<xref target="subtree-consistency-proofs"/>) between the subtree and the reference checkpoint</t>
          </li>
        </ul>
        <t>If a relying party is unable to validate some active landmark, it <bcp14>MAY</bcp14> discard that landmark, along with all landmarks in the log newer than it, while still using the older active landmarks that it was able to validate. For example, suppose the active landmarks have tree sizes 200, 300, 400, and 500, and the relying party was unable to validate any reference checkpoint of size 500 or higher. If the relying party is able to validate a reference checkpoint of size 350, it <bcp14>MAY</bcp14> incorporate subtrees from the first two landmarks.</t>
        <t>To bound local state, the relying party <bcp14>SHOULD</bcp14> define some upper bound on the number of active landmarks accepted per CA. If the CA exceeds this bound, the relying party <bcp14>SHOULD</bcp14> similarly discard the newest active landmarks to meet its limit.</t>
        <t>This document does not prescribe how relying parties obtain trusted subtrees. A relying party <bcp14>MAY</bcp14>, for example, use an application-specific update service, such as the services described in <xref target="CHROMIUM"/> and <xref target="FIREFOX"/>. If the relying party considers the service sufficiently trusted (e.g. if the service provides the trust anchor list or certificate validation software), it <bcp14>MAY</bcp14> trust the update service to perform these checks.</t>
        <t>The relying party <bcp14>SHOULD</bcp14> incorporate its trusted subtree configuration in application-protocol-specific certificate selection mechanisms, to allow an authenticating party to select a landmark-relative certificate. The trust anchor IDs of the landmarks may be used as efficient identifiers in the application protocol. <xref target="use-in-tls"/> discusses how to do this in TLS <xref target="RFC9846"/>.</t>
      </section>
      <section anchor="revoked-ranges">
        <name>Revoked Ranges</name>
        <t>For each supported Merkle Tree CA, the relying party maintains a list of revoked ranges of serial numbers. This can be used to revoke both ranges of entries in an issuance log and ranges of issuance logs, even if the contents are not known.</t>
        <t>When a relying party is first configured to trust an issuance log, it <bcp14>SHOULD</bcp14> be configured to revoke all serial numbers before the first available unexpired certificate at the time. This revocation <bcp14>SHOULD</bcp14> be periodically updated as entries expire. If using the format defined in <xref target="representing-certification-authorities"/>, this can be configured with the <tt>minSerial</tt> value.</t>
        <t>This revocation allows the rest of a PKI to disregard old entries, even if they are not known to be expired. In particular:</t>
        <ul spacing="normal">
          <li>
            <t>A relying party could permit a CA to skip serving old entries (see <xref target="publishing-logs"/>) if long-expired and revoked.</t>
          </li>
          <li>
            <t>Newly-established monitors can skip processing long-expired and revoked entries.</t>
          </li>
        </ul>
        <t>A relying party with transparency requirements additionally <bcp14>SHOULD</bcp14> revoke all log numbers above some threshold to bound monitoring overhead. If using the format defined in <xref target="representing-certification-authorities"/>, this can be configured with the <tt>maxSerial</tt> value. See <xref target="limiting-issuance-logs"/>.</t>
        <t>A misbehaving CA might correctly construct a globally consistent log, but refuse to make some entries or intermediate nodes available. Consistency proofs between checkpoints and subtrees would pass, but monitors cannot observe the entries themselves. Relying parties whose cosigner policies (<xref target="trusted-cosigners"/>) do not require durable logging (e.g. via <xref target="TLOG-MIRROR"/>) are particularly vulnerable to this. In this case, the indices of the missing entries will still be known, so relying parties can use this mechanism to revoke the unknown entries, possibly as an initial, targeted mitigation before complete CA removal.</t>
        <t>When a CA is found to be untrustworthy, relying parties <bcp14>SHOULD</bcp14> remove trust in that CA. To minimize the compatibility impact of this mitigation, index-based revocation can be used to only distrust entries after some index, while leaving existing entries accepted. This is analogous to the <xref target="SCTNotAfter"/> mechanism used in some PKIs.</t>
        <t>The revocation mechanism in this section is complementary to certificate-level revocation mechanisms. Because log entries are uniquely identified by their serial number and issuer, existing revocation mechanisms like CRLs <xref target="RFC5280"/> and OCSP <xref target="RFC6960"/> apply unchanged.</t>
      </section>
    </section>
    <section anchor="use-in-tls">
      <name>Use in TLS</name>
      <t>Most X.509 fields such as subjectPublicKeyInfo and X.509 extensions such as subjectAltName are unmodified in Merkle Tree certificates. They apply to TLS-based applications as in any X.509 certificate. The primary new considerations for use in TLS are:</t>
      <ul spacing="normal">
        <li>
          <t>Whether the authenticating party should send a certificate from one Merkle Tree CA, another Merkle Tree CA, or a directly-signing X.509 CA</t>
        </li>
        <li>
          <t>Whether the authenticating party should send a standalone or landmark-relative certificate</t>
        </li>
        <li>
          <t>What the relying party should communicate to the authenticating party to help it make this decision</t>
        </li>
      </ul>
      <t>Certificate selection in TLS, described in <xref section="4.5.1.2" sectionFormat="of" target="RFC9846"/>, incorporates both explicit relying-party-provided information in the ClientHello and CertificateRequest messages and implicit deployment-specific assumptions. This section describes a <bcp14>RECOMMENDED</bcp14> integration of Merkle Tree certificates into TLS trust anchor IDs (<xref target="I-D.ietf-tls-trust-anchor-ids"/>), but applications <bcp14>MAY</bcp14> use application-specific criteria in addition to, or instead of, this recommendation.</t>
      <t>Relying parties <bcp14>SHOULD NOT</bcp14> include Merkle Tree CAs in the <tt>certificate_authorities</tt> extension (<xref section="4.3.4" sectionFormat="of" target="RFC9846"/>). Doing so might inadvertently signal an unsupported landmark-relative certificate because they have the same <tt>issuer</tt> field as standalone certificates.</t>
      <section anchor="standalone-certificates-tls">
        <name>Standalone Certificates</name>
        <t>Authenticating and relying parties <bcp14>SHOULD</bcp14> use the <tt>trust_anchors</tt> extension to determine whether a standalone certificate would be acceptable. A standalone certificate has a trust anchor ID of the corresponding CA ID (<xref target="ca-ids"/>). This trust anchor ID is additionally contained in the trust anchor groups defined in <xref target="single-log-landmark-groups"/>.</t>
        <t>CA IDs <bcp14>MAY</bcp14> be incorporated into other trust anchor groups, following the guidance in <xref section="6" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>.</t>
        <t>A standalone certificate <bcp14>MAY</bcp14> also be sent without explicit relying party trust signals, however doing so means the authenticating party implicitly assumes the relying party trusts the issuing CA. This may be viable if, for example, the CA is relatively ubiquitous among supported relying parties.</t>
      </section>
      <section anchor="landmark-relative-certificates-tls">
        <name>Landmark-Relative Certificates</name>
        <t>An authenticating party <bcp14>SHOULD NOT</bcp14> send a landmark-relative certificate without a signal that the relying party trusts the corresponding landmark subtree. Even if the relying party is assumed to trust the issuing CA, the relying party may not have sufficiently up-to-date trusted subtrees. This can be represented with the <tt>trust_anchor_negotiation</tt> property in a CertificatePropertyList (see <xref section="7.3" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>), or other local configuration.</t>
        <t>TLS implementations <bcp14>SHOULD</bcp14> use the <tt>trust_anchors</tt> extension to determine this. A landmark-relative certificate issued by a CA with ID <tt>caID</tt>, log number <tt>N</tt>, and constructed from landmark <tt>L</tt> has a trust anchor ID of <tt>{caID landmarks(1) N L}</tt>.</t>
        <t>For example, the trust anchor ID for landmark 42 of CA <tt>32473.100</tt> and log number <tt>8</tt> is <tt>32473.100.1.8.42</tt>.</t>
        <t>These trust anchor IDs are used when it is necessary to identify an individual landmark, e.g. as in the recovery mechanism described in <xref section="5.6" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>. To more efficiently express a relying party's complete landmark state, these IDs are contained in trust anchor groups defined in <xref target="single-log-landmark-groups"/>, which allow relying parties to express their landmark state with a single ID.</t>
        <t>If both a landmark-relative and a standalone certificate are usable, an authenticating party <bcp14>SHOULD</bcp14> preferentially use the landmark-relative certificate. A landmark-relative certificate asserts the same information as its standalone counterpart, but is expected to be smaller.</t>
        <section anchor="single-log-landmark-groups">
          <name>Single-Log Landmark Groups</name>
          <t>Relying parties support many landmarks per log at a time. To compactly represent this, each log ID implicitly defines a series of trust anchor groups (<xref section="6" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>) called <em>landmark groups</em>.</t>
          <t>For each Merkle Tree Certificates CA with ID <tt>caID</tt>, each log number <tt>N</tt>, and each landmark number <tt>L</tt>, the ID <tt>{caID landmarkGroups(2) N L}</tt> defines a landmark group. It contains the following trust anchor IDs:</t>
          <ul spacing="normal">
            <li>
              <t><tt>caID</tt> itself (see <xref target="standalone-certificates-tls"/>). This selects all standalone certificates.</t>
            </li>
            <li>
              <t><tt>{caID landmarks(1) N M}</tt> for all <tt>M</tt> from 0 to <tt>L</tt>, inclusive. This selects landmark-relative certificates from active landmarks up to <tt>L</tt>.</t>
            </li>
          </ul>
          <t>To support these groups in the authenticating party, CAs <bcp14>SHOULD</bcp14> configure certificates to match the following trust anchor groups (Sections <xref target="I-D.ietf-tls-trust-anchor-ids" section="5.3" sectionFormat="bare"/> and <xref target="I-D.ietf-tls-trust-anchor-ids" section="7.2" sectionFormat="bare"/> of <xref target="I-D.ietf-tls-trust-anchor-ids"/>):</t>
          <ul spacing="normal">
            <li>
              <t>A standalone certificate <bcp14>SHOULD</bcp14> include a trust anchor ID pattern of <tt>caID.2.{0-}.{0-}</tt>.</t>
            </li>
            <li>
              <t>A landmark-relative log number <tt>N</tt> and landmark <tt>L</tt> <bcp14>SHOULD</bcp14> include a trust anchor ID pattern of <tt>caID.2.N.{L-}</tt>.</t>
            </li>
          </ul>
          <t>For example, suppose a CA with ID <tt>32473.100</tt> issues a certificate in landmark 42 of log 8:</t>
          <ul spacing="normal">
            <li>
              <t>The standalone certificate has a trust anchor ID of <tt>32473.100</tt> and is contained in groups <tt>32473.100.2.{0-}.{0-}</tt>.</t>
            </li>
            <li>
              <t>The landmark-relative certificate has a trust anchor ID of <tt>32473.100.1.8.42</tt> and is contained in groups <tt>32473.100.2.8.{42-}</tt>.</t>
            </li>
          </ul>
          <t>A relying party whose latest trusted subtree (<xref target="trusted-subtrees"/>) in log <tt>N</tt> is landmark <tt>L</tt> <bcp14>SHOULD</bcp14> configure the <tt>trust_anchors</tt> extension to advertise the above landmark group. This signals support for both standalone certificates and supported landmarks. For example, a relying party which is up-to-date as of landmark 42 of log 8 of CA <tt>32473.100</tt> would send an ID of <tt>32473.100.2.8.42</tt>. This would signal the following certificates:</t>
          <ul spacing="normal">
            <li>
              <t>Any standalone certificate from <tt>32473.100</tt>, no matter the log or landmark number.</t>
            </li>
            <li>
              <t>Any landmark-relative certificate from <tt>32473.100</tt> from landmarks 23 through 42, inclusive, of log 8.</t>
            </li>
          </ul>
          <t>If this landmark information becomes too stale, such a relying party <bcp14>SHOULD</bcp14> switch to advertising just the CA ID. In the above example, this would be <tt>32473.100</tt>.</t>
        </section>
        <section anchor="timestamped-landmark-groups">
          <name>Timestamped Landmark Groups</name>
          <t>Landmark groups for a single CA, described above, allow relying parties to advertise one ID per supported CA. Depending on the number of trust anchors, this can be sufficient to efficiently represent relying party state. When needed, <xref section="6" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/> describes how PKIs can use trust anchor groups that span multiple CAs. This section defines a variation of the versioning construction described in <xref section="6.1" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>, as applied to landmarks.</t>
          <t>Trust anchor groups containing Merkle Tree CAs can represent landmarks with an OID component based on a predictable clock. Concretely, the family of groups is parameterized by:</t>
          <ul spacing="normal">
            <li>
              <t>A base OID arc <tt>base</tt></t>
            </li>
            <li>
              <t>A timestamp <tt>start_time</tt></t>
            </li>
            <li>
              <t>A time duration <tt>tick_duration</tt></t>
            </li>
          </ul>
          <t>Given non-negative integers <tt>V</tt> and <tt>T</tt>, the group <tt>base.V</tt> contains standalone certificates issued by some CA in version <tt>V</tt> of the group. The group <tt>base.V.T</tt> contains:</t>
          <ul spacing="normal">
            <li>
              <t>Standalone certificates issued by some CA in version <tt>V</tt> of the group.</t>
            </li>
            <li>
              <t>Landmark-relative certificates issued one of the above CAs, provided the landmark was active at time <tt>start_time + T * tick_duration</tt>.</t>
            </li>
          </ul>
          <t><tt>start_time</tt> <bcp14>SHOULD</bcp14> be set to sometime before the group is in use. <tt>tick_duration</tt> <bcp14>SHOULD</bcp14> be set near the expected time between landmarks in the group, e.g. one hour. This predictable cadence allows the CA to describe the trust anchor groups (<xref section="7.2" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>) for issued certificates without additional coordination. Concretely, if a CA was added in <tt>V_min</tt>, was removed in <tt>V_max + 1</tt>, and issues a certificate whose landmark was first active at time <tt>T_min</tt> and last active at time <tt>T_max</tt>:</t>
          <ul spacing="normal">
            <li>
              <t>The standalone certificate is contained in groups <tt>base.{V_min-V_max}</tt> and <tt>base.{V_min-V_max}.{0-}</tt>.</t>
            </li>
            <li>
              <t>The landmark-relative certificate is contained in groups <tt>base.{V_min-V_max}.{T_min-T_max}</tt></t>
            </li>
          </ul>
          <t>If the CA has not been removed in the latest version, <tt>V_max</tt> is infinity, similar to the construction described in <xref section="6.1" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>. <tt>T_min</tt> and <tt>T_max</tt> are measured based on <tt>start_time</tt> and <tt>tick_duration</tt> as described above.</t>
          <t>A relying party sets <tt>V</tt> based on its current trust anchors and <tt>T</tt> based on the age of its landmark information. If its landmarks are too stale, it sends <tt>base.V</tt> without any landmark timestamp.</t>
          <t>In some cases, the relying party's landmark information may only be partially up-to-date. The relying party, or its update service, may be unable to reach one CA in the group, e.g. due to a transient outage. This complicates timestamp-based strategies:</t>
          <ul spacing="normal">
            <li>
              <t>If the relying party uses an older timestamp, it will not signal its up-to-date state for the reachable CAs. This means a single unreachable CA can disrupt service for certificates issued by unrelated CAs.</t>
            </li>
            <li>
              <t>If the relying party uses a newer timestamp, the relying party may signal support for landmarks it does not have. This risks connection failures. If the unreachable CA issued recent landmark-relative certificates, those certificates will fail validation.</t>
            </li>
          </ul>
          <t>The relying party can mitigate this in a number of ways:</t>
          <ul spacing="normal">
            <li>
              <t>If the trust anchor group consists of CAs from the same operator, waiting until all CAs are reachable will be minimally disruptive.</t>
            </li>
            <li>
              <t>The relying party can opt to send the group with an older timestamp, combined with other, smaller groups at newer timestamps to better describe its state.</t>
            </li>
            <li>
              <t>A client relying party can send the newer timestamp and, in the event the unreachable CA did issue recent landmark-relative certificates, rely on the recovery mechanism described in <xref section="5.6" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/> to recover from any signaling failures.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="acme-extensions">
      <name>ACME Extensions</name>
      <t>This section describes how to issue Merkle Tree certificates using ACME <xref target="RFC8555"/>.</t>
      <section anchor="optional-certificates">
        <name>Optional Certificates</name>
        <t><xref section="7.4.2" sectionFormat="of" target="RFC8555"/> describes how an ACME server uses the "alternate" link relation <xref target="RFC8288"/> to serve multiple certificate chains for an ACME order. An ACME client might fetch all of them and deploy them in the authenticating party. Different relying parties need different chains, so the ACME client might reasonably treat any unavailable alternate as an error.</t>
        <t>This behavior is not ideal for a landmark-relative certificate, which is available asynchronously and is not intended to delay the corresponding standalone certificate. This section defines the "acme-optional-alternate" link relation. When serving a certificate, an ACME server <bcp14>MAY</bcp14> provide one or more link relation header fields of type "acme-optional-alternate". "acme-optional-alternate" identifies an alternate certificate chain, but one that is optional. Relying parties that accept the optional alternate are expected to also accept either the original certificate chain or chains served under the "alternate" link relation. If the certificate chain is not yet available, the "acme-optional-alternate" URL <bcp14>SHOULD</bcp14> serve an HTTP 202 (Accepted) response, with a Retry-After header (<xref section="10.2.3" sectionFormat="of" target="RFC9110"/>) estimating when it will become available.</t>
        <t>An ACME client <bcp14>MAY</bcp14> fetch these URLs to collect additional alternate certificate chains. If the resource is unavailable, the ACME client <bcp14>SHOULD NOT</bcp14> fail the overall transaction. If the resource returns an HTTP 202 (Accepted) response, the ACME client <bcp14>SHOULD</bcp14> retry the request later, according to the Retry-After header, but this process <bcp14>SHOULD</bcp14> be independent of deploying other chains in the ACME order. In particular, if deploying a new service, the ACME client <bcp14>SHOULD NOT</bcp14> block deployment on optional alternates.</t>
        <t>If renewing certificates, the ACME client <bcp14>MAY</bcp14> opt to wait for optional alternates to simplify certificate replacement, but only while the previous certificates remain valid.</t>
      </section>
      <section anchor="using-acme-with-merkle-tree-certificates">
        <name>Using ACME with Merkle Tree Certificates</name>
        <t>Standalone and landmark-relative certificates represent a single issuance event, so they are returned from the same order. When processing an order for a Merkle Tree certificate, the ACME server moves the order to the "valid" state after the standalone certificate is available. The order's certificate URL then serves the standalone certificate, constructed as described in <xref target="standalone-certificates"/>.</t>
        <t>The standalone certificate response <bcp14>SHOULD</bcp14> additionally carry an "acme-optional-alternate" URL for the landmark-relative certificate. The landmark-relative certificate will typically not yet be available, so it initially serves an HTTP 202 response, as described in <xref target="optional-certificates"/>. Once the next landmark is allocated, the ACME server constructs a landmark-relative certificate, as described in <xref target="landmark-relative-certificates"/>, and serves it from the "acme-optional-alternate" URL.</t>
        <t>When downloading either certificate (<xref section="7.4.2" sectionFormat="of" target="RFC8555"/>), ACME clients supporting Merkle Tree certificates <bcp14>SHOULD</bcp14> send "application/pem-certificate-chain-with-properties" in their Accept header (<xref section="12.5.1" sectionFormat="of" target="RFC9110"/>). ACME servers issuing Merkle Tree certificates <bcp14>SHOULD</bcp14> then respond with that content type to include a CertificatePropertyList.</t>
        <t>The CertificatePropertyList <bcp14>SHOULD</bcp14> include trust anchor ID information as described in <xref section="7.5" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>. <xref target="use-in-tls"/> describes the trust anchor ID assignments for standalone and landmark-relative certificates. At minimum, the ACME server <bcp14>SHOULD</bcp14> include:</t>
        <ul spacing="normal">
          <li>
            <t>A <tt>trust_anchor_id</tt> property with the trust anchor IDs described in <xref target="standalone-certificates-tls"/> and <xref target="landmark-relative-certificates-tls"/></t>
          </li>
          <li>
            <t>A <tt>trust_anchor_groups</tt> property with the information described in <xref target="single-log-landmark-groups"/></t>
          </li>
        </ul>
        <t>If the CA participates in other landmark groups, e.g. <xref target="timestamped-landmark-groups"/>, the ACME server <bcp14>SHOULD</bcp14> include the corresponding information in <tt>trust_anchor_groups</tt>.</t>
        <t>The ACME server <bcp14>SHOULD</bcp14> include a <tt>trust_anchor_negotiation</tt> property with the landmark-relative certificate. This indicates the landmark-relative certificate requires a trust anchor ID match to indicate that the relying party recognizes the landmark. The ACME server <bcp14>MAY</bcp14> include or omit <tt>trust_anchor_negotiation</tt> with the standalone certificate, based on the criteria described in Sections <xref target="I-D.ietf-tls-trust-anchor-ids" section="7.3" sectionFormat="bare"/> and <xref target="I-D.ietf-tls-trust-anchor-ids" section="7.5" sectionFormat="bare"/> of <xref target="I-D.ietf-tls-trust-anchor-ids"/>.</t>
      </section>
    </section>
    <section anchor="deployment-considerations">
      <name>Deployment Considerations</name>
      <section anchor="operational-costs">
        <name>Operational Costs</name>
        <section anchor="certification-authority-costs">
          <name>Certification Authority Costs</name>
          <t>While Merkle Tree certificates expect CAs to operate logs, the costs of these logs are expected to be much lower than a CT log from <xref target="RFC6962"/> or <xref target="RFC9162"/>:</t>
          <t><xref target="publishing-logs"/> does not constrain the API to the one defined in <xref target="RFC6962"/> or <xref target="RFC9162"/>. If the PKI uses a tile-based protocol, such as <xref target="TLOG-TILES"/> (profiled for Merkle Tree Certificates in <xref target="MTC-TLOG"/>), the issuance log benefits from the improved caching properties of such designs.</t>
          <t>Unlike a CT log, an issuance log does not have public submission APIs. Log entries are only added by the CA directly. Costs are thus expected to scale with the CA's own issuance.</t>
          <t>A CA only needs to produce a digital signature for every checkpoint, rather than for every certificate. The lower signature rate requirements could allow more secure and/or economical key storage choices.</t>
          <t>Individual entries are kept small and do not scale with public key or signature sizes. This mitigates growth from post-quantum algorithms. Public keys in entries are replaced with fixed-sized hashes. There are no signatures in entries themselves, and only signatures on the very latest checkpoint are retained. Every new checkpoint completely subsumes the old checkpoint, so there is no need to retain older signatures. Likewise, a subtree is only signed if contained in another signed checkpoint.</t>
          <t>Explicit revocation of old entries (<xref target="revoked-ranges"/>) allows a long-lived log to serve only the more recent entries, scaling with the size of the retention window, rather than the log's total lifetime.</t>
          <t>Mirrors of the log can also reduce CA bandwidth costs, because monitors can fetch data from mirrors instead of CAs directly. In PKIs that deploy mirrors as part of cosigner policies, relying parties could set few availability requirements on CAs, as described in <xref target="log-availability"/>.</t>
        </section>
        <section anchor="cosigner-costs">
          <name>Cosigner Costs</name>
          <t>The costs of cosigners vary by cosigner role. A consistency-checking cosigner, such as <xref target="TLOG-WITNESS"/>, requires very little state and can be run with low cost.</t>
          <t>A mirroring cosigner, such as <xref target="TLOG-MIRROR"/>, performs a role comparable to CT logs, but several of the cost-saving properties in <xref target="certification-authority-costs"/> also apply: improved protocols, smaller entries, less frequent signatures, and partial log serving. While a mirror does need to accommodate another party's (the CA's) growth rate, it grows only from new issuances from that one CA. If one CA's issuance rate exceeds the mirror's capacity, that does not impact the mirror's copies of other CAs. Mirrors also do not need to defend against a client uploading a large number of existing certificates all at once. Submissions are naturally batched and serialized.</t>
        </section>
        <section anchor="monitor-costs">
          <name>Monitor Costs</name>
          <t>In a CT-based PKI, every log carries a potentially distinct subset of active certificates. Monitors must check the contents of every CT log. At the same time, certificates are commonly synchronized between CT logs. As a result, a monitor will typically download each certificate multiple times, once for every log. In Merkle Tree Certificates, each entry appears in exactly one log. A relying party might require a log to be covered by a quorum of mirrors, but each mirror is cryptographically verified to serve the same contents. Once a monitor has obtained some entry from one mirror, it does not need to download it from the others.</t>
          <t>In addition to downloading each entry only once, the entries themselves are smaller, as discussed in <xref target="certification-authority-costs"/>.</t>
        </section>
      </section>
      <section anchor="choosing-cosigners">
        <name>Choosing Cosigners</name>
        <t>In selecting trusted cosigners and cosigner requirements (<xref target="trusted-cosigners"/>), relying parties navigate a number of trade-offs:</t>
        <t>A consistency-checking cosigner, such as <xref target="TLOG-WITNESS"/>, is inexpensive to run, but does not guarantee durable logging. A mirroring cosigner is more expensive and may take longer to cosign structures. Requiring a mirror signature provides stronger guarantees to the relying party, which in turn can reduce the requirements on CAs (see <xref target="log-availability"/>), however it may cause certificate issuance to take longer. That said, mirrors are comparable to CT logs, if not cheaper (see <xref target="operational-costs"/>), so they may be appropriate in PKIs where running CT logs is already viable.</t>
        <t>Relying parties that require larger quorums of trusted cosigners can reduce the trust placed in any individual cosigner. However, larger quorums result in larger, more expensive standalone certificates. The cost of standalone certificates will depend on how frequently the landmark optimization occurs in a given PKI. Conversely, relying parties that require smaller quorums have smaller standalone certificates, but place more trust in their cosigners.</t>
        <t>Relying party policies also impact monitor operation. If a relying party accepts any one of three cosigners, monitors <bcp14>SHOULD</bcp14> check the checkpoints of all three. Otherwise, a malicious CA may send different split views to different cosigners. More generally, monitors <bcp14>SHOULD</bcp14> check the checkpoints in the union of all cosigners trusted by all supported relying parties. This is an efficient check because, if the CA is operating correctly, all cosigners will observe the same tree. Thus the monitor only needs to check consistency proofs between the checkpoints, and check the log contents themselves once. Monitors <bcp14>MAY</bcp14> also rely on other parties in the transparency ecosystem to perform this check.</t>
      </section>
      <section anchor="log-availability">
        <name>Log Availability</name>
        <t>CAs and mirrors are expected to serve their log contents over HTTP. It is possible for the contents to be unavailable, either due to temporary service outage or because the log does not serve long-expired entries. If some resources are unavailable, they may not be visible to monitors.</t>
        <t>As in CT, PKIs that deploy Merkle Tree certificates <bcp14>SHOULD</bcp14> establish availability policies. These policies <bcp14>SHOULD</bcp14> be adhered to by trusted CAs and mirrors, and enforced by relying party vendors as a condition of trust. Exact availability policies for these services are out of scope for this document, but this section provides some general guidance.</t>
        <t>Availability policies <bcp14>MAY</bcp14> permit CAs and mirrors to stop serving old, long-expired entries. If so, such policies <bcp14>SHOULD</bcp14>, at minimum, require CAs and mirrors to retain entries until they have been revoked in up-to-date relying parties. See <xref target="revoked-ranges"/> for details. This is analogous to the CT practice of temporal sharding <xref target="CHROME-CT"/>, except the issuance log remains compatible with older, unupdated relying parties.</t>
        <t>PKIs that require mirror cosignatures (<xref target="trusted-cosigners"/>) can impose minimal to no availability requirements on CAs without compromising transparency goals. If a CA never makes an entry available, mirrors will be unable to update. This will prevent relying parties from accepting the undisclosed entries. However, a CA that is persistently unavailable may not offer sufficient benefit to be used by authenticating parties or trusted by relying parties.</t>
        <t>However, if a mirror's interface becomes unavailable, monitors may be unable to check for unauthorized issuance, if the entries are not available in another mirror. This does compromise transparency goals. As such, availability policies <bcp14>SHOULD</bcp14> set availability expectations on mirrors. This can also be mitigated by using multiple mirrors, either directly enforced in cosigner requirements, or by keeping mirrors up-to-date with each other.</t>
        <t>In PKIs that do not require mirroring cosigners, the CA's serving endpoint is more crucial for monitors. Such PKIs <bcp14>SHOULD</bcp14> set availability requirements on CAs.</t>
        <t>In each of these cases, the serial numbers of unavailable entries are known. Availability failures can thus be mitigated by revocation, as described in <xref target="revoked-ranges"/>, likely as a first step in a broader distrust.</t>
      </section>
      <section anchor="certificate-renewal">
        <name>Certificate Renewal</name>
        <t>When an authenticating party requests a certificate, the landmark-relative certificate will not be available until the next landmark is ready. From there, the landmark-relative certificate will not be available until relying parties receive new trusted subtrees.</t>
        <t>To maximize coverage of landmark-relative certificates, authenticating parties performing routine renewal <bcp14>SHOULD</bcp14> request a new Merkle Tree certificate before the previous Merkle Tree certificate expires. Renewing around 75% of the way through the previous certificate's lifetime is <bcp14>RECOMMENDED</bcp14>. Authenticating parties additionally <bcp14>SHOULD</bcp14> retain both the new and old certificates in the certificate set until the old certificate expires. As the new subtrees are delivered to relying parties, certificate negotiation will transition relying parties to the new certificate, while retaining the old certificate for relying parties that are not yet updated.</t>
        <t>The above also applies if the authenticating party is performing a routine key rotation alongside the routine renewal. In this case, certificate negotiation would pick the key as part of the certificate selection. This slightly increases the lifetime of the old key but maintains the size optimization continuously.</t>
        <t>If the service is rotating keys in response to a key compromise, this option is not appropriate. Instead, the service <bcp14>SHOULD</bcp14> immediately discard the old key and request a standalone certificate and the revocation of the previous certificate. This will interrupt the size optimization until the new landmark-relative certificate is available and relying parties are updated.</t>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>The Privacy Considerations described in <xref section="10" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/> apply to their use with Merkle Tree Certificates.</t>
      <t>In particular, relying parties that share an update process for trusted subtrees (<xref target="trusted-subtrees"/>) will fetch the same stream of updates. However, updates may reach different users at different times, resulting in some variation across users. This variation may contribute to a fingerprinting attack <xref target="RFC6973"/>. If the Merkle Tree CA trust anchors are sent unconditionally in <tt>trust_anchors</tt>, this variation will be passively observable. If they are sent conditionally, e.g. gated on the recovery flow, the trust anchor list will require active probing.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="authenticity">
        <name>Authenticity</name>
        <t>A key security requirement of any PKI scheme is that relying parties only accept assertions that were certified by a trusted certification authority. Merkle Tree certificates achieve this by ensuring the relying party only accepts authentic subtree hashes:</t>
        <ul spacing="normal">
          <li>
            <t>In standalone certificates, the relying party's cosigner requirements (<xref target="trusted-cosigners"/>) are expected to include some signature by the CA's cosigner. The CA's cosigner (<xref target="certification-authority-cosigners"/>) is defined to certify the contents of every checkpoint and subtree that it signs.</t>
          </li>
          <li>
            <t>In landmark-relative certificates, the cosigner requirements are checked ahead of time, when the trusted subtrees are predistributed (<xref target="trusted-subtrees"/>).</t>
          </li>
        </ul>
        <t>Given a subtree hash computed over entries that the CA certified, it must be computationally infeasible to construct an entry not on this list, and an inclusion proof, such that inclusion proof verification succeeds. This requires using a collision-resistant hash in the Merkle Tree construction.</t>
        <t>The subject public key is itself also hashed before incorporating into the log. This hash depends on second-preimage resistance. To authorize the wrong public key for some existing log entry (e.g. one that describes a target's identity), an attacker must find some other public key with the same hash. While an attacker able to compute collisions might find two public keys with the same hash, that hash will not be in any existing log entry. The attacker would need to be authorized to request certification of a new entry with this hash. Such an attacker could only certify colliding pairs of public keys for its own identities.</t>
      </section>
      <section anchor="transparency">
        <name>Transparency</name>
        <t>The transparency mechanisms in this document do not prevent a CA from issuing an unauthorized certificate. Rather, they provide comparable security properties as Certificate Transparency <xref target="RFC9162"/> in ensuring that all certificates are either rejected by relying parties, or visible to monitors and, in particular, the subject of the certificate.</t>
        <t>Compared to Certificate Transparency, some of the responsibilities of a log have moved to the CA. All signatures generated by the CA in this system are assertions about some view of the CA's issuance log. However, a CA does not need to function correctly to ensure transparency properties. Relying parties are expected to require a quorum of additional cosigners, which together enforce properties of the log (<xref target="trusted-cosigners"/>) and prevent or detect CA misbehavior:</t>
        <t>A CA might violate the append-only property of its log and present different views to different parties. However, each individual cosigner will only follow a single append-only view of the log history. Provided the cosigners are correctly operated, relying parties and monitors will observe consistent views. Views that were not cosigned at all may not be detected, but they also will not be accepted by relying parties.</t>
        <t>If the CA sends one view to some cosigners and another view to other cosigners, it is possible that multiple views will be accepted by relying parties. However, in that case monitors will observe that cosigners do not match each other. Relying parties can then react by revoking the range of inconsistent serials (<xref target="revoked-ranges"/>), and likely removing the CA. If the cosigners are mirrors, the underlying entries in both views will also be visible.</t>
        <t>A CA might correctly construct its log, but refuse to serve some unauthorized entry. The impact depends on the relying party's cosigner policy:</t>
        <ul spacing="normal">
          <li>
            <t>If the relying party requires cosignatures from trusted mirrors, the entry will either be visible to monitors in the mirrors, or have never reached a mirror. In the latter case, the entry will not have been cosigned, so the relying party would not accept it.</t>
          </li>
          <li>
            <t>If the relying party accepts log views without a trusted mirror, the unauthorized entry may not be available. However, the existence of <em>some</em> entry at that index will be visible, so monitors will know the CA is failing to present an entry. This is sufficient to determine the serial number, so relying parties can then react by revoking the undisclosed entries (<xref target="revoked-ranges"/>), and likely removing the CA.</t>
          </li>
        </ul>
        <section anchor="log-failures">
          <name>Log Failures</name>
          <t>Merkle Tree Certificates introduce additional state to PKI deployments and thus new kinds of operational failures. CAs are required to only sign subtree hashes that are consistent with a single append-only view of each issuance log. A CA might violate this as a result of operational failures. For example:</t>
          <ul spacing="normal">
            <li>
              <t>A CA loses some state and signs subtree hashes from two inconsistent copies of the log</t>
            </li>
            <li>
              <t>A CA miscalculates some hash and signs a subtree hash that cannot be computed from some underlying sequence of entries</t>
            </li>
          </ul>
          <t>As described in <xref target="transparency"/>, PKIs can use additional cosigners to provide transparency guarantees even in the face of such CA violations. In doing so, individual cosigners may be locked to only one of two views of the log or unable to sign further checkpoints because some hash's preimage is unknown. It may then no longer be possible to add entries to the log that are trusted by existing relying parties.</t>
          <t>Whether by accident or compromise, these violations are ultimately CA failures. However, it is useful for the CA instance to remain functional during and after incident management:</t>
          <ul spacing="normal">
            <li>
              <t>While the incident is diagnosed, authenticating parties may still need new certificates.</t>
            </li>
            <li>
              <t>If relying parties consider the CA operator and the CA instance still trustworthy, repairing the incident without changing the CA requires less overhead.</t>
            </li>
            <li>
              <t>If relying parties consider either the CA operator or the CA instance no longer trustworthy and in need of replacement, the CA may still be needed to serve older, unupdated relying parties.</t>
            </li>
          </ul>
          <t>This is mitigated by a CA instance consisting of a series of issuance logs (<xref target="issuance-logs"/>). After a log failure, the CA <bcp14>SHOULD</bcp14> increment its current issuance log to restore availability. Both the underlying log failure and the use of a new issuance log will be visible to monitors and <bcp14>SHOULD</bcp14> be treated as a PKI incident. Such PKI incidents can be handled by some combination of:</t>
          <ul spacing="normal">
            <li>
              <t>Revoking the diverging log indices (<xref target="revoked-ranges"/>)</t>
            </li>
            <li>
              <t>Reevaluating trusted CAs and, if necessary, removing the old CA instance and switching to a new CA instance</t>
            </li>
          </ul>
          <t>In the latter case, the CA operator <bcp14>MAY</bcp14> continue to operate the removed CA instance if, for example, there remain unupdated relying parties that require it.</t>
        </section>
        <section anchor="limiting-issuance-logs">
          <name>Limiting Issuance Logs</name>
          <t>While multiple issuance logs help mitigate log failures, as described in <xref target="log-failures"/>, they introduce transparency risks. If a CA violates the requirement to only use one issuance log at a time, it might add an entry in some far future log number. To be accepted in transparency-enforcing relying parties, the log state must still be cosigned. However, monitors may not know which log numbers to monitor.</t>
          <t>PKIs with transparency requirements <bcp14>SHOULD</bcp14> mitigate this by only accepting a limited range of log numbers in relying parties, transparency cosigners, or both. This limit <bcp14>MAY</bcp14> be set to a fixed value or a rolling value that is updated whenever the CA switches its current log. Fixed values require committing to a limit of recoverable log failures over the lifetime of a CA.</t>
          <t>Log number limits in relying parties can be implemented by revoking all serial numbers above some threshold. (See <xref target="revoked-ranges"/>.) If using the format described in <xref target="representing-certification-authorities"/>, this can be implemented with the <tt>maxSerial</tt> field.</t>
        </section>
      </section>
      <section anchor="public-key-hashes">
        <name>Public Key Hashes</name>
        <t>Unlike Certificate Transparency, the mechanisms in this document do not provide the subject public keys, only the hashed values. This is intended to reduce log serving costs, particularly with large post-quantum keys. As a result, monitors look for unrecognized hashes instead of unrecognized keys. Any unrecognized hash, even if the preimage is unknown, indicates an unauthorized certificate.</t>
        <t>This optimization complicates studies of weak public keys, e.g. <xref target="SharedFactors"/>. Such studies will have to retrieve the public keys separately, such as by connecting to the TLS servers, or fetching from the CA if it retains the unhashed key. This document does not define a mechanism for doing this, or require that CAs or mirrors retain unhashed keys. The transparency mechanisms in this protocol are primarily intended to allow monitors to observe certificate issuance.</t>
      </section>
      <section anchor="non-repudiation">
        <name>Non-Repudiation</name>
        <t>When a monitor finds an unauthorized certificate issuance in a log or mirror, it must be possible to prove the CA indeed certified the information in the entry. However, only the latest signed checkpoint may be retained by the transparency ecosystem, so it may not be possible to reconstruct the exact certificate seen by relying parties.</t>
        <t>However, per <xref target="certification-authority-cosigners"/>, any subtree signature is a binding assertion by the CA that it has certified every entry in the subtree. Thus, given <em>any</em> signed checkpoint that contains the unauthorized entry, a Merkle inclusion proof (<xref section="2.1.3" sectionFormat="of" target="RFC9162"/>) is sufficient to prove the CA issued the entry. This is analogous to how, in <xref section="3.2.1" sectionFormat="of" target="RFC9162"/>, CAs are held accountable for signed CT precertificates.</t>
        <t>The transparency ecosystem does not retain unhashed public keys, so it also may not be possible to construct a complete certificate from the signed checkpoint and inclusion proof. However, if the log entry's <tt>subjectPublicKeyInfoHash</tt> does not correspond to an authorized key for the subject of the certificate, the entry is still unauthorized. A Merkle Tree CA is held responsible for all log entries it certifies, whether or not the preimage of the hash is known.</t>
      </section>
      <section anchor="extensibility">
        <name>Extensibility</name>
        <t>MTCLogEntry (<xref target="log-entries"/>) contains several extension points:</t>
        <ul spacing="normal">
          <li>
            <t>New X.509 extensions can be added to TBSCertificateLogEntry.</t>
          </li>
          <li>
            <t>New MTCLogEntryType values define new formats for the entry contents.</t>
          </li>
          <li>
            <t>New MTCLogEntryExtensionType values define new entry extension fields.</t>
          </li>
        </ul>
        <t>X.509 extensions apply to Merkle Tree Certificates without any modifications. The two entry-level extension points are new to this protocol. Older CAs, cosigners, relying parties, and monitors may encounter unrecognized entries:</t>
        <t>Different cosigner roles interact with extensions differently. Some roles, e.g. <xref target="TLOG-MIRROR"/> and <xref target="TLOG-WITNESS"/>, do not interpret entry contents. Unrecognized extensions do not impact these roles. Other roles, such as CA cosigners, have semantics that depend on the entry contents. If a cosigner role interprets log entry contents, it <bcp14>MUST</bcp14> define how it interacts with unrecognized types and extensions.</t>
        <t><xref target="certification-authority-cosigners"/> forbids a CA from logging or signing entries that it does not recognize. A CA cannot faithfully claim to certify information if it does not understand it. This is analogous to how a correctly-operated X.509 CA can never sign an unrecognized X.509 extension.</t>
        <t>Unrecognized entry types do not impact older relying parties. In <xref target="verifying-certificate-signatures"/>, the relying party constructs the MTCLogEntry that it expects. The unrecognized entry will have a different <tt>type</tt> value, so the proof will never succeed, assuming the underlying hash function remains collision-resistant.</t>
        <t>However, unrecognized entry extensions will be ignored by relying parties, analogously to a non-critical X.509 extension. Entry extensions thus <bcp14>SHOULD</bcp14> be defined so that this is safe.</t>
        <t>If a monitor observes an entry with unknown type or entry extension, it may not be able to determine if it is of interest. For example, it may be unable to tell whether it covers some relevant DNS name. Until the monitor is updated to reflect the current state of the PKI, the monitor may be unable to detect all misissued certificates.</t>
        <t>This situation is analogous to the addition of a new X.509 extension. When relying parties add support for log entry types or new X.509 extensions, they <bcp14>SHOULD</bcp14> coordinate with monitors to ensure the transparency ecosystem is able to monitor the new formats.</t>
      </section>
      <section anchor="certificate-malleability">
        <name>Certificate Malleability</name>
        <t>An ASN.1 structure like X.509's Certificate is an abstract data type that is independent of its serialization. There are multiple encoding rules for ASN.1. Commonly, protocols use DER <xref target="X.690"/>, such as <xref section="4.5.1" sectionFormat="of" target="RFC9846"/>. This aligns with <xref section="4.1.1.3" sectionFormat="of" target="RFC5280"/>, which says X.509 signatures are computed over the DER-encoded TBSCertificate. After signature verification, applications can assume the DER-encoded TBSCertificate is not malleable.</t>
        <t>When the signature verification process in <xref target="verifying-certificate-signatures"/> first transforms the TBSCertificate into a TBSCertificateLogEntry, it preserves this non-malleability. There is a unique valid DER encoding for every abstract TBSCertificate structure, so malleability of the DER-encoded TBSCertificate reduces to malleability of the TBSCertificate value:</t>
        <ul spacing="normal">
          <li>
            <t>The <tt>version</tt>, <tt>issuer</tt>, <tt>validity</tt>, <tt>subject</tt>, <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, and <tt>extensions</tt> fields are copied from the TBSCertificate to the TBSCertificateLogEntry unmodified, so they are directly authenticated by the inclusion proof.</t>
          </li>
          <li>
            <t><tt>serialNumber</tt> is omitted from TBSCertificateLogEntry, but its value determines the inclusion proof index, which authenticates it.</t>
          </li>
          <li>
            <t>The redundant <tt>signature</tt> field in TBSCertificate is omitted from TBSCertificateLogEntry, but <xref target="verifying-certificate-signatures"/> checks for an exact value, so no other values are possible.</t>
          </li>
          <li>
            <t><tt>subjectPublicKeyInfo</tt> is hashed as <tt>subjectPublicKeyInfoHash</tt> in TBSCertificateLogEntry. Provided the underlying hash function is collision-resistant, no other values are possible for a given log entry.</t>
          </li>
        </ul>
        <t>X.509 implementations often implement <xref section="4.1.1.3" sectionFormat="of" target="RFC5280"/> by equivalently retaining the original received DER encoding, rather than recomputing the canonical DER encoding TBSCertificate. This optimization is compatible with the assumptions above.</t>
        <t>Some non-conforming X.509 implementations use a BER <xref target="X.690"/> parser instead of DER, and then apply this optimization to the received BER encoding. BER encoding is not unique, so this does not produce the same result. In such implementations, the BER-encoded TBSCertificate becomes also non-malleable, and applications may rely on this. To preserve this property in Merkle Tree Certificates, such non-conforming implementations <bcp14>MUST</bcp14> do the following when implementing <xref target="verifying-certificate-signatures"/>:</t>
        <ul spacing="normal">
          <li>
            <t>Reparse the initial identifier (the SEQUENCE tag) and length octets of the TBSCertificate structure with a conforming DER parser and fail verification if invalid.</t>
          </li>
          <li>
            <t>When copying the <tt>version</tt>, <tt>issuer</tt>, <tt>validity</tt>, <tt>subject</tt>, <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, and <tt>extensions</tt> fields, either copy over the observed BER encodings, or reparse each field with a conforming DER parser and fail verification if invalid.</t>
          </li>
          <li>
            <t>Reparse the <tt>serialNumber</tt> field with a conforming DER parser and fail verification if invalid.</t>
          </li>
          <li>
            <t>Reparse the <tt>signature</tt> field with a conforming DER parser and fail verification if invalid. Equivalently, check for an exact equality with the expected, DER-encoded value.</t>
          </li>
          <li>
            <t>When hashing <tt>subjectPublicKeyInfo</tt>, either hash the observed BER encoding, or reparse the structure with a conforming DER parser and fail verification if invalid.</t>
          </li>
        </ul>
        <t>These additional checks are redundant in X.509 implementations that use a conforming DER parser.</t>
        <t><xref target="log-entries"/> requires that the TBSCertificateLogEntry in an MTCLogEntry be DER-encoded, so applying a stricter parser will be compatible with conforming CAs. While these existing non-conforming implementations may be unable to switch to a DER parser due to compatibility concerns, Merkle Tree Certificates are new, so there is no existing deployment of malformed BER-encoded TBSCertificateLogEntry structures.</t>
        <t>The above only ensures the TBSCertificate portion is non-malleable. In Merkle Tree Certificates, similar to an ECDSA X.509 signature, the signature value is malleable. Multiple MTCProof structures may prove a single TBSCertificate structure. Additionally, in all X.509-based protocols, a BER-based parser for the outer, unsigned Certificate structure will admit malleability in those portions of the encoding. Applications that derive a unique identifier from the Certificate <bcp14>MUST</bcp14> instead use the TBSCertificate, or some portion of it, for Merkle Tree Certificates.</t>
      </section>
      <section anchor="revocation">
        <name>Revocation</name>
        <t>This document does not define a new certificate-level revocation mechanism. Existing mechanisms like CRLs and OCSP apply unchanged to Merkle Tree certificates. The sequential serial numbers assigned by issuance logs may enable future improvements to revocation, but such work is out of scope for this document.</t>
      </section>
      <section anchor="signature-domain-separation">
        <name>Signature Domain Separation</name>
        <t>The signature format defined in <xref target="signature-format"/> includes a fixed label prefix to ensure domain separation. Provided other uses of the same key use a non-overlapping prefix, signatures in one context cannot be substituted for those in another.</t>
        <t><xref target="certification-authority-cosigners"/> permits a CA cosigner key to be used to sign CRLs and OCSP responses. These signatures do not include a domain separation prefix. Instead, X.509 relies on an undocumented assumption that the TBSCertificate, TBSCertList, and OCSP ResponseData structures do not overlap at the level of individual ASN.1 fields.</t>
        <t>These ASN.1 structures all begin with a SEQUENCE tag, which is encoded in DER as 0x30 or the ASCII digit "0". The domain separation label used in <xref target="signature-format"/>, <tt>subtree/v1\n\0</tt>, does not begin with "0", so their inputs do not overlap. More generally, this label is not a prefix of any DER or BER encoding.</t>
        <t>Domain separation analysis based on the structures themselves is fragile, particularly when individual ASN.1 fields must be analyzed. This document depends on a structure-level analysis for CRLs and OCSP responses due to how these legacy protocols were defined. Future uses of the key <bcp14>SHOULD</bcp14> use a more robust mechanism, namely a fixed label prefix or a context string parameter if the signature scheme supports it.</t>
      </section>
      <section anchor="subordinate-certification-authorities">
        <name>Subordinate Certification Authorities</name>
        <t>Merkle Tree Certificates' transparency properties only apply to certificates directly issued by the CA, not certification paths. The CA might issue a certificate that describes an unconstrained, subordinate, non-MTC CA. Certificates issued by the subordinate CA would not be visible in the MTC CA's issuance log and thus may not be visible to monitors. However, the subordinate CA certificate that enables this bypass will still be visible in the issuance logs.</t>
        <t>Although the scope is larger, this scenario is similar to an unauthorized end-entity certificate and can be handled analogously:</t>
        <t>Relying parties with transparency requirements <bcp14>SHOULD</bcp14> define policy requirements on trusted CAs that prevent these bypasses, with any violation treated as an unauthorized certificate. For example, a relying party might require that all subordinate CAs have name constraints (<xref section="4.2.1.10" sectionFormat="of" target="RFC5280"/>) or forbid subordinate CAs entirely. In addition to holding CAs responsible for meeting these policies, relying parties <bcp14>SHOULD</bcp14> programmatically enforce these policies as part of certification path validation.</t>
        <t>Monitors <bcp14>SHOULD</bcp14> monitor for adherence to applicable policies as part of monitoring for unauthorized certificates. For example, a monitor that looks for entries covering <tt>example.com</tt> <bcp14>SHOULD</bcp14> look for either a subject alternative name (<xref section="4.2.1.6" sectionFormat="of" target="RFC5280"/>) of <tt>example.com</tt> or a basic constraints (<xref section="4.2.1.9" sectionFormat="of" target="RFC5280"/>) extension with the cA boolean set to true.</t>
        <t>It is not sufficient to constrain the MTC CA with a path length constraint (<xref section="4.2.1.9" sectionFormat="of" target="RFC5280"/>) of zero. Self-issued certificates do not contribute to path length constraints, so such an MTC CA might still issue CA certificates with the same name as itself.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="additions-to-existing-registries">
        <name>Additions to Existing Registries</name>
        <section anchor="module-identifier">
          <name>Module Identifier</name>
          <t>IANA is requested to add the following entry in the "SMI Security for PKIX Module Identifier" registry <xref target="RFC7299"/>:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Decimal</th>
                <th align="left">Description</th>
                <th align="left">References</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">TBD</td>
                <td align="left">id-mod-mtc-2025</td>
                <td align="left">[this-RFC]</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="algorithm">
          <name>Algorithm</name>
          <t>IANA is requested to add the following entry to the "SMI Security for PKIX Algorithms" registry <xref target="RFC7299"/>:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Decimal</th>
                <th align="left">Description</th>
                <th align="left">References</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">67</td>
                <td align="left">id-alg-mtcProof</td>
                <td align="left">[this-RFC]</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="certificate-extension">
          <name>Certificate Extension</name>
          <t>IANA is requested to add the following entry to the "SMI Security for PKIX Certificate Extension" registry <xref target="RFC7299"/>:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Decimal</th>
                <th align="left">Description</th>
                <th align="left">References</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">38</td>
                <td align="left">id-pe-mtcCertificationAuthority-SHA256</td>
                <td align="left">[this-RFC]</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="link-relation-type">
          <name>Link Relation Type</name>
          <t>IANA is requested to add the following entry to the "Link Relation Types" registry <xref target="RFC8288"/>:</t>
          <dl>
            <dt>Relation Name:</dt>
            <dd>
              <t>acme-optional-alternate</t>
            </dd>
            <dt>Description:</dt>
            <dd>
              <t>Refers to an optional alternate certificate chain, which may not be available immediately. Relying parties that accept the alternate are expected to also accept the original certificate, so it is not an error if the alternate is unavailable.</t>
            </dd>
            <dt>Reference:</dt>
            <dd>
              <t>[this-RFC], <xref target="optional-certificates"/></t>
            </dd>
          </dl>
        </section>
      </section>
      <section anchor="new-registries">
        <name>New Registries</name>
        <t>IANA is requested to add a new top-level registry, "Merkle Tree Certificates", to the "Protocol Registries" page at <eref target="https://www.iana.org/protocols">https://www.iana.org/protocols</eref></t>
        <t>The rest of this section defines the subregistries requested within the new "Merkle Tree Certificates" registry.</t>
        <section anchor="mtc-log-entry-types">
          <name>MTC Log Entry Types</name>
          <t>IANA is requested to add a new registry, "MTC Log Entry Types" with the
following registration policies from <xref target="RFC8126"/>:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Range</th>
                <th align="left">Registration Policy</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0x0000 - 0xEFFF</td>
                <td align="left">Specification Required</td>
              </tr>
              <tr>
                <td align="left">0xF000 - 0xFFFF</td>
                <td align="left">Private Use</td>
              </tr>
            </tbody>
          </table>
          <t>The registry initially consists of:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Value</th>
                <th align="left">Name</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0x0000</td>
                <td align="left">null_entry</td>
                <td align="left">[this-RFC]</td>
              </tr>
              <tr>
                <td align="left">0x0001</td>
                <td align="left">tbs_cert_entry</td>
                <td align="left">[this-RFC]</td>
              </tr>
              <tr>
                <td align="left">0x0002 - 0xEFFF</td>
                <td align="left">Unassigned</td>
                <td align="left"> </td>
              </tr>
              <tr>
                <td align="left">0xF000 - 0xFFFF</td>
                <td align="left">Reserved for Private Use</td>
                <td align="left">[this-RFC]</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="mtc-log-entry-extension-types">
          <name>MTC Log Entry Extension Types</name>
          <t>IANA is requested to add a new registry, "MTC Log Entry Extension Types" with the
following registration policies from <xref target="RFC8126"/>:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Range</th>
                <th align="left">Registration Policy</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0x0000 - 0xEFFF</td>
                <td align="left">Specification Required</td>
              </tr>
              <tr>
                <td align="left">0xF000 - 0xFFFF</td>
                <td align="left">Private Use</td>
              </tr>
            </tbody>
          </table>
          <t>The registry initially consists of:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Value</th>
                <th align="left">Name</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0x0000 - 0xEFFF</td>
                <td align="left">Unassigned</td>
                <td align="left"> </td>
              </tr>
              <tr>
                <td align="left">0xF000 - 0xFFFF</td>
                <td align="left">Reserved for Private Use</td>
                <td align="left">[this-RFC]</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="mtc-ca-identifier-child-components">
          <name>MTC CA Identifier Child Components</name>
          <t>IANA is requested to add a new registry, "MTC CA Identifier Child Components", whose registration policy is Specification Required <xref target="RFC8126"/>. Values shall be any non-negative integer. The registry initially consists of:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Value</th>
                <th align="left">Name</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0</td>
                <td align="left">logs</td>
                <td align="left">[this-RFC]</td>
              </tr>
              <tr>
                <td align="left">1</td>
                <td align="left">landmarks</td>
                <td align="left">[this-RFC]</td>
              </tr>
              <tr>
                <td align="left">2</td>
                <td align="left">landmarkGroups</td>
                <td align="left">[this-RFC]</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="X.690" target="https://www.itu.int/rec/T-REC-X.690">
          <front>
            <title>Information technology - ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2021" month="February"/>
          </front>
          <seriesInfo name="ISO/IEC" value="8825-1:2021"/>
        </reference>
        <reference anchor="I-D.ietf-tls-trust-anchor-ids">
          <front>
            <title>TLS Trust Anchor Identifiers</title>
            <author fullname="Bob Beck" initials="B." surname="Beck">
              <organization>OpenSSL</organization>
            </author>
            <author fullname="David Benjamin" initials="D." surname="Benjamin">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Devon O'Brien" initials="D." surname="O'Brien">
         </author>
            <author fullname="Kyle Nekritz" initials="K." surname="Nekritz">
              <organization>Meta</organization>
            </author>
            <date day="1" month="November" year="2026"/>
            <abstract>
              <t>   This document defines the TLS Trust Anchors extension, a mechanism
   for a TLS client or server to select a certificate to present based
   on the peer's trusted certification authorities.  It describes
   certification authorities more succinctly than the TLS Certificate
   Authorities extension.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-trust-anchor-ids-07"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC9846">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="July" year="2026"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document obsoletes RFC 8446, which specified TLS 1.3. This document obsoletes RFC 5246 (specifying TLS 1.2) and RFCs 5077, 6961, 7627, and 8422, all of which pertain to TLS 1.2 or earlier, and updates RFCs 5705 and 6066. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9846"/>
          <seriesInfo name="DOI" value="10.17487/RFC9846"/>
        </reference>
        <reference anchor="RFC9162">
          <front>
            <title>Certificate Transparency Version 2.0</title>
            <author fullname="B. Laurie" initials="B." surname="Laurie"/>
            <author fullname="E. Messeri" initials="E." surname="Messeri"/>
            <author fullname="R. Stradling" initials="R." surname="Stradling"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>This document describes version 2.0 of the Certificate Transparency (CT) protocol for publicly logging the existence of Transport Layer Security (TLS) server certificates as they are issued or observed, in a manner that allows anyone to audit certification authority (CA) activity and notice the issuance of suspect certificates as well as to audit the certificate logs themselves. The intent is that eventually clients would refuse to honor certificates that do not appear in a log, effectively forcing CAs to add all issued certificates to the logs.</t>
              <t>This document obsoletes RFC 6962. It also specifies a new TLS extension that is used to send various CT log artifacts.</t>
              <t>Logs are network services that implement the protocol operations for submissions and queries that are defined in this document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9162"/>
          <seriesInfo name="DOI" value="10.17487/RFC9162"/>
        </reference>
        <reference anchor="RFC3629">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="RFC8555">
          <front>
            <title>Automatic Certificate Management Environment (ACME)</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="J. Hoffman-Andrews" initials="J." surname="Hoffman-Andrews"/>
            <author fullname="D. McCarney" initials="D." surname="McCarney"/>
            <author fullname="J. Kasten" initials="J." surname="Kasten"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>Public Key Infrastructure using X.509 (PKIX) certificates are used for a number of purposes, the most significant of which is the authentication of domain names. Thus, certification authorities (CAs) in the Web PKI are trusted to verify that an applicant for a certificate legitimately represents the domain name(s) in the certificate. As of this writing, this verification is done through a collection of ad hoc mechanisms. This document describes a protocol that a CA and an applicant can use to automate the process of verification and certificate issuance. The protocol also provides facilities for other certificate management functions, such as certificate revocation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8555"/>
          <seriesInfo name="DOI" value="10.17487/RFC8555"/>
        </reference>
        <reference anchor="SHS">
          <front>
            <title>Secure hash standard</title>
            <author>
              <organization/>
            </author>
            <date year="2015"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.180-4"/>
          <refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
        </reference>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="POSIX">
          <front>
            <title>IEEE/Open Group Standard for Information Technology--Portable Operating System Interface (POSIX™) Base Specifications, Issue 8</title>
            <author>
              <organization/>
            </author>
            <date month="June" year="2024"/>
          </front>
          <seriesInfo name="DOI" value="10.1109/ieeestd.2024.10555529"/>
          <seriesInfo name="ISBN" value="[&quot;9798855707939&quot;]"/>
          <refcontent>IEEE</refcontent>
        </reference>
        <reference anchor="RFC6960">
          <front>
            <title>X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP</title>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="M. Myers" initials="M." surname="Myers"/>
            <author fullname="R. Ankney" initials="R." surname="Ankney"/>
            <author fullname="A. Malpani" initials="A." surname="Malpani"/>
            <author fullname="S. Galperin" initials="S." surname="Galperin"/>
            <author fullname="C. Adams" initials="C." surname="Adams"/>
            <date month="June" year="2013"/>
            <abstract>
              <t>This document specifies a protocol useful in determining the current status of a digital certificate without requiring Certificate Revocation Lists (CRLs). Additional mechanisms addressing PKIX operational requirements are specified in separate documents. This document obsoletes RFCs 2560 and 6277. It also updates RFC 5912.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6960"/>
          <seriesInfo name="DOI" value="10.17487/RFC6960"/>
        </reference>
        <reference anchor="RFC9925">
          <front>
            <title>Unsigned X.509 Certificates</title>
            <author fullname="D. Benjamin" initials="D." surname="Benjamin"/>
            <date month="February" year="2026"/>
            <abstract>
              <t>This document defines a placeholder X.509 signature algorithm that may be used in contexts where the consumer of the certificate is not expected to verify the signature. As part of this, it updates RFC 5280.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9925"/>
          <seriesInfo name="DOI" value="10.17487/RFC9925"/>
        </reference>
        <reference anchor="RFC8701">
          <front>
            <title>Applying Generate Random Extensions And Sustain Extensibility (GREASE) to TLS Extensibility</title>
            <author fullname="D. Benjamin" initials="D." surname="Benjamin"/>
            <date month="January" year="2020"/>
            <abstract>
              <t>This document describes GREASE (Generate Random Extensions And Sustain Extensibility), a mechanism to prevent extensibility failures in the TLS ecosystem. It reserves a set of TLS protocol values that may be advertised to ensure peers correctly handle unknown values.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8701"/>
          <seriesInfo name="DOI" value="10.17487/RFC8701"/>
        </reference>
        <reference anchor="RFC8288">
          <front>
            <title>Web Linking</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="October" year="2017"/>
            <abstract>
              <t>This specification defines a model for the relationships between resources on the Web ("links") and the type of those relationships ("link relation types").</t>
              <t>It also defines the serialisation of such links in HTTP headers with the Link header field.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8288"/>
          <seriesInfo name="DOI" value="10.17487/RFC8288"/>
        </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>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC5912">
          <front>
            <title>New ASN.1 Modules for the Public Key Infrastructure Using X.509 (PKIX)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="June" year="2010"/>
            <abstract>
              <t>The Public Key Infrastructure using X.509 (PKIX) certificate format, and many associated formats, are expressed using ASN.1. The current ASN.1 modules conform to the 1988 version of ASN.1. This document updates those ASN.1 modules to conform to the 2002 version of ASN.1. There are no bits-on-the-wire changes to any of the formats; this is simply a change to the syntax. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5912"/>
          <seriesInfo name="DOI" value="10.17487/RFC5912"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CHROME-CT" target="https://googlechrome.github.io/CertificateTransparency/ct_policy.html">
          <front>
            <title>Chrome Certificate Transparency Policy</title>
            <author>
              <organization>Google Chrome</organization>
            </author>
            <date year="2022" month="March" day="17"/>
          </front>
        </reference>
        <reference anchor="APPLE-CT" target="https://support.apple.com/en-us/HT205280">
          <front>
            <title>Apple's Certificate Transparency policy</title>
            <author>
              <organization>Apple</organization>
            </author>
            <date year="2021" month="March" day="05"/>
          </front>
        </reference>
        <reference anchor="CHROMIUM" target="https://chromium.googlesource.com/chromium/src/+/main/components/component_updater/README.md">
          <front>
            <title>Component Updater</title>
            <author>
              <organization>Chromium</organization>
            </author>
            <date year="2022" month="March" day="03"/>
          </front>
        </reference>
        <reference anchor="FIREFOX" target="https://wiki.mozilla.org/Firefox/RemoteSettings">
          <front>
            <title>Firefox Remote Settings</title>
            <author>
              <organization>Mozilla</organization>
            </author>
            <date year="2022" month="August" day="20"/>
          </front>
        </reference>
        <reference anchor="LetsEncrypt" target="https://letsencrypt.org/stats/">
          <front>
            <title>Let's Encrypt Stats</title>
            <author>
              <organization>Let's Encrypt</organization>
            </author>
            <date year="2026" month="September" day="18"/>
          </front>
        </reference>
        <reference anchor="CloudflareRadar" target="https://radar.cloudflare.com/certificate-transparency">
          <front>
            <title>Cloudflare Radar Certificate Transparency</title>
            <author>
              <organization>Cloudflare, Inc.</organization>
            </author>
            <date year="2026" month="September" day="18"/>
          </front>
        </reference>
        <reference anchor="SharedFactors" target="https://bora.uib.no/bora-xmlui/bitstream/handle/11250/3001128/Masters_thesis__for_University_of_Bergen.pdf">
          <front>
            <title>Finding shared RSA factors in the Certificate Transparency logs</title>
            <author initials="H. F." surname="Våge" fullname="Henry Faltin Våge">
              <organization/>
            </author>
            <author>
              <organization>University of Bergen</organization>
            </author>
            <date year="2022" month="May" day="13"/>
          </front>
        </reference>
        <reference anchor="KeyReuse" target="https://eprint.iacr.org/2019/519">
          <front>
            <title>Security in the Presence of Key Reuse: Context-Separable Interfaces and their Applications</title>
            <author initials="C." surname="Patton" fullname="Christopher Patton">
              <organization/>
            </author>
            <author initials="T." surname="Shrimpton" fullname="Thomas Shrimpton">
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="STH-Discipline" target="https://mailarchive.ietf.org/arch/msg/trans/Zm4NqyRc7LDsOtV56EchBIT9r4c/">
          <front>
            <title>STH Discipline &amp; Security Considerations</title>
            <author initials="R." surname="Barnes" fullname="Richard Barnes">
              <organization/>
            </author>
            <date year="2017" month="March" day="03"/>
          </front>
        </reference>
        <reference anchor="CABF-153" target="https://cabforum.org/2015/11/11/ballot-153-short-lived-certificates/">
          <front>
            <title>Ballot 153 – Short-Lived Certificates</title>
            <author>
              <organization>CA/Browser Forum</organization>
            </author>
            <date year="2015" month="November" day="11"/>
          </front>
        </reference>
        <reference anchor="CABF-SC081" target="https://cabforum.org/2025/04/11/ballot-sc081v3-introduce-schedule-of-reducing-validity-and-data-reuse-periods/">
          <front>
            <title>Ballot SC081v3: Introduce Schedule of Reducing Validity and Data Reuse Periods</title>
            <author>
              <organization>CA/Browser Forum</organization>
            </author>
            <date year="2025" month="April" day="11"/>
          </front>
        </reference>
        <reference anchor="SCTNotAfter" target="https://dadrian.io/blog/posts/sct-not-after/">
          <front>
            <title>How to distrust a CA without any certificate errors</title>
            <author initials="D." surname="Adrian" fullname="David Adrian">
              <organization/>
            </author>
            <date year="2025" month="March"/>
          </front>
        </reference>
        <reference anchor="AuditingRevisited" target="https://eprint.iacr.org/2025/556.pdf">
          <front>
            <title>Private SCT Auditing, Revisited</title>
            <author initials="L." surname="Heimberger" fullname="Lena Heimberger">
              <organization/>
            </author>
            <author initials="C." surname="Patton" fullname="Christopher Patton">
              <organization/>
            </author>
            <author initials="B." surname="Westerbaan" fullname="Bas Westerbaan">
              <organization/>
            </author>
            <date year="2025" month="April" day="25"/>
          </front>
        </reference>
        <reference anchor="MTC-TLOG" target="https://c2sp.org/mtc-tlog@v0.1.0">
          <front>
            <title>Merkle Tree Certificates With Tiled Transparency Logs</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2026" month="October"/>
          </front>
        </reference>
        <reference anchor="TLOG-TILES" target="https://c2sp.org/tlog-tiles@v1.0.0">
          <front>
            <title>Tiled Transparency Logs</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2026" month="October"/>
          </front>
        </reference>
        <reference anchor="TLOG-WITNESS" target="https://c2sp.org/tlog-witness@v1.1.0">
          <front>
            <title>Transparency Log Witness Protocol</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2026" month="October"/>
          </front>
        </reference>
        <reference anchor="TLOG-MIRROR" target="https://c2sp.org/tlog-mirror@v0.1.0">
          <front>
            <title>Transparency Log Mirrors</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2026" month="October"/>
          </front>
        </reference>
        <reference anchor="TLOG-COSIGNATURE" target="https://c2sp.org/tlog-cosignature@v1.1.0">
          <front>
            <title>Transparency Log Cosignatures</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2026" month="October"/>
          </front>
        </reference>
        <reference anchor="Accumulated" target="https://words.filippo.io/accumulated/">
          <front>
            <title>Accumulated Test Vectors</title>
            <author initials="F." surname="Valsorda" fullname="Filippo Valsorda">
              <organization/>
            </author>
            <date year="2024" month="October"/>
          </front>
        </reference>
        <reference anchor="LargeInclusionProofs" target="https://github.com/ietf-plants-wg/merkle-tree-certs/tree/main/demo/large_inclusion_proofs.txt">
          <front>
            <title>Large Inclusion Proof Test Vectors</title>
            <author>
              <organization>IETF</organization>
            </author>
            <date year="2026" month="August"/>
          </front>
        </reference>
        <reference anchor="LargeConsistencyProofs" target="https://github.com/ietf-plants-wg/merkle-tree-certs/tree/main/demo/large_consistency_proofs.txt">
          <front>
            <title>Large Consistency Proof Test Vectors</title>
            <author>
              <organization>IETF</organization>
            </author>
            <date year="2026" month="August"/>
          </front>
        </reference>
        <reference anchor="RFC6962">
          <front>
            <title>Certificate Transparency</title>
            <author fullname="B. Laurie" initials="B." surname="Laurie"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Kasper" initials="E." surname="Kasper"/>
            <date month="June" year="2013"/>
            <abstract>
              <t>This document describes an experimental protocol for publicly logging the existence of Transport Layer Security (TLS) certificates as they are issued or observed, in a manner that allows anyone to audit certificate authority (CA) activity and notice the issuance of suspect certificates as well as to audit the certificate logs themselves. The intent is that eventually clients would refuse to honor certificates that do not appear in a log, effectively forcing CAs to add all issued certificates to the logs.</t>
              <t>Logs are network services that implement the protocol operations for submissions and queries that are defined in this document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6962"/>
          <seriesInfo name="DOI" value="10.17487/RFC6962"/>
        </reference>
        <reference anchor="RFC8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>
        <reference anchor="FIPS204">
          <front>
            <title>Module-lattice-based digital signature standard</title>
            <author>
              <organization/>
            </author>
            <date month="August" year="2024"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.204"/>
          <refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
        </reference>
        <reference anchor="RFC6973">
          <front>
            <title>Privacy Considerations for Internet Protocols</title>
            <author fullname="A. Cooper" initials="A." surname="Cooper"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="J. Morris" initials="J." surname="Morris"/>
            <author fullname="M. Hansen" initials="M." surname="Hansen"/>
            <author fullname="R. Smith" initials="R." surname="Smith"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document offers guidance for developing privacy considerations for inclusion in protocol specifications. It aims to make designers, implementers, and users of Internet protocols aware of privacy-related design choices. It suggests that whether any individual RFC warrants a specific privacy considerations section will depend on the document's content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6973"/>
          <seriesInfo name="DOI" value="10.17487/RFC6973"/>
        </reference>
        <reference anchor="RFC7299">
          <front>
            <title>Object Identifier Registry for the PKIX Working Group</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>When the Public-Key Infrastructure using X.509 (PKIX) Working Group was chartered, an object identifier arc was allocated by IANA for use by that working group. This document describes the object identifiers that were assigned in that arc, returns control of that arc to IANA, and establishes IANA allocation policies for any future assignments within that arc.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7299"/>
          <seriesInfo name="DOI" value="10.17487/RFC7299"/>
        </reference>
      </references>
    </references>
    <?line 2049?>

<section anchor="asn1-module">
      <name>ASN.1 Module</name>
      <t>This ASN.1 module uses the conventions established by <xref target="RFC5912"/>.</t>
      <sourcecode type="asn.1"><![CDATA[
MerkleTreeCertificates
  { iso(1) identified-organization(3) dod(6) internet(1)
    security(5) mechanisms(5) pkix(7) id-mod(0)
    id-mod-mtc-2025(TBD) }

DEFINITIONS IMPLICIT TAGS ::=
BEGIN

IMPORTS
  SIGNATURE-ALGORITHM, DIGEST-ALGORITHM, AlgorithmIdentifier{},
  FROM AlgorithmInformation-2009 -- in [RFC5912]
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-algorithmInformation-02(58) }
  Extensions{}
  FROM PKIX-CommonTypes-2009 -- in [RFC5912]
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-pkixCommon-02(57) }
  CertExtensions
  FROM PKIX1Implicit-2009 -- in [RFC5912]
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-pkix1-implicit-02(59) }
  Version, Name, Validity, UniqueIdentifier, PublicKeyAlgorithms
  FROM PKIX1Explicit-2009 -- in [RFC5912]
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-pkix1-explicit-02(51) } ;

TBSCertificateLogEntry ::= SEQUENCE {
    version               [0] EXPLICIT Version DEFAULT v1,
    issuer                    Name,
    validity                  Validity,
    subject                   Name,
    subjectPublicKeyAlgorithm AlgorithmIdentifier{PUBLIC-KEY,
                                  {PublicKeyAlgorithms}},
    subjectPublicKeyInfoHash  OCTET STRING,
    issuerUniqueID        [1] IMPLICIT UniqueIdentifier OPTIONAL,
    subjectUniqueID       [2] IMPLICIT UniqueIdentifier OPTIONAL,
    extensions            [3] EXPLICIT Extensions{{CertExtensions}}
                                           OPTIONAL
}

id-alg-mtcProof OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) algorithms(6) 67 }

sa-mtcProof SIGNATURE-ALGORITHM ::= {
    IDENTIFIER id-alg-mtcProof
    PARAMS ARE absent
}

id-pe-mtcCertificationAuthority-SHA256 OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) pe(1) 38 }

ext-mtcCertificationAuthority-SHA256 EXTENSION ::= {
    SYNTAX MTCCertificationAuthority
    IDENTIFIED BY id-pe-mtcCertificationAuthority-SHA256
    CRITICALITY TRUE
}

-- This is 2^48, the minimum possible serial number in this protocol.
mtcMinSerial INTEGER ::= 281474976710656

-- This is 2^64-1, the maximum possible serial number in this protocol.
mtcMaxSerial INTEGER ::= 18446744073709551615

MTCCertificationAuthority ::= SEQUENCE {
    sigAlg    AlgorithmIdentifier{SIGNATURE-ALGORITHM, {...}},
    minSerial INTEGER (mtcMinSerial..mtcMaxSerial),
    maxSerial INTEGER (mtcMinSerial..mtcMaxSerial)
}

END
]]></sourcecode>
    </section>
    <section anchor="merkle-tree-structure">
      <name>Merkle Tree Structure</name>
      <t>This non-normative section describes how the Merkle Tree structure relates to the binary representations of indices. It is included to help implementers understand the procedures described in <xref target="subtrees"/>.</t>
      <section anchor="binary-representations">
        <name>Binary Representations</name>
        <t>Within a Merkle Tree whose size is a power of two, the binary representation of a leaf's index gives the path to that leaf. The leaf is a left child if the least-significant bit is unset and a right child if it is set. The next bit indicates the direction of the parent node, and so on. <xref target="fig-merkle-tree-bits-full"/> demonstrates this in a Merkle Tree of size 8:</t>
        <figure anchor="fig-merkle-tree-bits-full">
          <name>An example Merkle Tree of size 8</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="328" viewBox="0 0 328 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 64,32 L 64,64" fill="none" stroke="black"/>
                <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 88,224 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,96 L 104,128" fill="none" stroke="black"/>
                <path d="M 104,224 L 104,256" fill="none" stroke="black"/>
                <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,160 L 136,192" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                <path d="M 160,96 L 160,128" fill="none" stroke="black"/>
                <path d="M 168,224 L 168,256" fill="none" stroke="black"/>
                <path d="M 184,160 L 184,192" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 200,32 L 200,64" fill="none" stroke="black"/>
                <path d="M 200,160 L 200,192" fill="none" stroke="black"/>
                <path d="M 200,224 L 200,256" fill="none" stroke="black"/>
                <path d="M 216,224 L 216,256" fill="none" stroke="black"/>
                <path d="M 232,96 L 232,128" fill="none" stroke="black"/>
                <path d="M 232,224 L 232,256" fill="none" stroke="black"/>
                <path d="M 248,160 L 248,192" fill="none" stroke="black"/>
                <path d="M 248,224 L 248,256" fill="none" stroke="black"/>
                <path d="M 64,32 L 200,32" fill="none" stroke="black"/>
                <path d="M 64,64 L 200,64" fill="none" stroke="black"/>
                <path d="M 32,96 L 104,96" fill="none" stroke="black"/>
                <path d="M 160,96 L 232,96" fill="none" stroke="black"/>
                <path d="M 32,128 L 104,128" fill="none" stroke="black"/>
                <path d="M 160,128 L 232,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 56,160" fill="none" stroke="black"/>
                <path d="M 72,160 L 120,160" fill="none" stroke="black"/>
                <path d="M 136,160 L 184,160" fill="none" stroke="black"/>
                <path d="M 200,160 L 248,160" fill="none" stroke="black"/>
                <path d="M 8,192 L 56,192" fill="none" stroke="black"/>
                <path d="M 72,192 L 120,192" fill="none" stroke="black"/>
                <path d="M 136,192 L 184,192" fill="none" stroke="black"/>
                <path d="M 200,192 L 248,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 88,224" fill="none" stroke="black"/>
                <path d="M 104,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 152,224" fill="none" stroke="black"/>
                <path d="M 168,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 200,224 L 216,224" fill="none" stroke="black"/>
                <path d="M 232,224 L 248,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 152,256" fill="none" stroke="black"/>
                <path d="M 168,256 L 184,256" fill="none" stroke="black"/>
                <path d="M 200,256 L 216,256" fill="none" stroke="black"/>
                <path d="M 232,256 L 248,256" fill="none" stroke="black"/>
                <g class="text">
                  <text x="120" y="52">[0,</text>
                  <text x="148" y="52">8)</text>
                  <text x="288" y="52">level</text>
                  <text x="320" y="52">3</text>
                  <text x="72" y="84">/</text>
                  <text x="192" y="84">\</text>
                  <text x="56" y="116">[0,</text>
                  <text x="84" y="116">4)</text>
                  <text x="184" y="116">[4,</text>
                  <text x="212" y="116">8)</text>
                  <text x="288" y="116">level</text>
                  <text x="320" y="116">2</text>
                  <text x="40" y="148">/</text>
                  <text x="96" y="148">\</text>
                  <text x="168" y="148">/</text>
                  <text x="224" y="148">\</text>
                  <text x="32" y="180">[0,2)</text>
                  <text x="96" y="180">[2,4)</text>
                  <text x="160" y="180">[4,6)</text>
                  <text x="224" y="180">[6,8)</text>
                  <text x="288" y="180">level</text>
                  <text x="320" y="180">1</text>
                  <text x="24" y="212">/</text>
                  <text x="40" y="212">\</text>
                  <text x="88" y="212">/</text>
                  <text x="104" y="212">\</text>
                  <text x="152" y="212">/</text>
                  <text x="168" y="212">\</text>
                  <text x="216" y="212">/</text>
                  <text x="232" y="212">\</text>
                  <text x="16" y="244">0</text>
                  <text x="48" y="244">1</text>
                  <text x="80" y="244">2</text>
                  <text x="112" y="244">3</text>
                  <text x="144" y="244">4</text>
                  <text x="176" y="244">5</text>
                  <text x="208" y="244">6</text>
                  <text x="240" y="244">7</text>
                  <text x="288" y="244">level</text>
                  <text x="320" y="244">0</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
       +----------------+
       |     [0, 8)     |        level 3
       +----------------+
        /              \
   +--------+      +--------+
   | [0, 4) |      | [4, 8) |    level 2
   +--------+      +--------+
    /      \        /      \
+-----+ +-----+ +-----+ +-----+
|[0,2)| |[2,4)| |[4,6)| |[6,8)|  level 1
+-----+ +-----+ +-----+ +-----+
  / \     / \     / \     / \
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5| |6| |7|  level 0
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
]]></artwork>
          </artset>
        </figure>
        <t>The binary representation of <tt>4</tt> is <tt>0b100</tt>. It is the left (0) child of <tt>[4, 6)</tt>, which is the left (0) child of <tt>[4, 8)</tt>, which is the right (1) child of <tt>[0, 8)</tt>.</t>
        <t>Each level in the tree corresponds to a bit position and can be correspondingly numbered, with 0 indicating the least-significant bit and the leaf level, and so on. In this numbering, a node's level can be determined as follows: if the node is a root of subtree <tt>[start, end)</tt>, the node's level is <tt>BIT_WIDTH(end - start - 1)</tt>.</t>
        <t>Comparing two indices determines the relationship between two paths. The highest differing bit gives the level at which paths from root to leaf diverge. For example, the bit representations of 4 and 6 are <tt>0b100</tt> and <tt>0b110</tt>, respectively. The highest differing bit is bit 1. Bits 2 and up are the same between the two indices. This indicates that the paths from the root to leaves 4 and 6 diverge when going from level 2 to level 1.</t>
        <t>This can be generalized to arbitrary-sized Merkle Trees. <xref target="fig-merkle-tree-bits-partial"/> depicts a Merkle Tree of size 6:</t>
        <figure anchor="fig-merkle-tree-bits-partial">
          <name>An example Merkle Tree of size 6</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="272" viewBox="0 0 272 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 64,32 L 64,64" fill="none" stroke="black"/>
                <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 88,224 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,96 L 104,128" fill="none" stroke="black"/>
                <path d="M 104,224 L 104,256" fill="none" stroke="black"/>
                <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,160 L 136,192" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                <path d="M 160,72 L 160,152" fill="none" stroke="black"/>
                <path d="M 168,224 L 168,256" fill="none" stroke="black"/>
                <path d="M 184,32 L 184,64" fill="none" stroke="black"/>
                <path d="M 184,160 L 184,192" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 64,32 L 184,32" fill="none" stroke="black"/>
                <path d="M 64,64 L 184,64" fill="none" stroke="black"/>
                <path d="M 32,96 L 104,96" fill="none" stroke="black"/>
                <path d="M 32,128 L 104,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 56,160" fill="none" stroke="black"/>
                <path d="M 72,160 L 120,160" fill="none" stroke="black"/>
                <path d="M 136,160 L 184,160" fill="none" stroke="black"/>
                <path d="M 8,192 L 56,192" fill="none" stroke="black"/>
                <path d="M 72,192 L 120,192" fill="none" stroke="black"/>
                <path d="M 136,192 L 184,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 88,224" fill="none" stroke="black"/>
                <path d="M 104,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 152,224" fill="none" stroke="black"/>
                <path d="M 168,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 152,256" fill="none" stroke="black"/>
                <path d="M 168,256 L 184,256" fill="none" stroke="black"/>
                <circle cx="160" cy="112" r="6" class="closeddot" fill="black"/>
                <g class="text">
                  <text x="120" y="52">[0,</text>
                  <text x="148" y="52">6)</text>
                  <text x="232" y="52">level</text>
                  <text x="264" y="52">3</text>
                  <text x="72" y="84">/</text>
                  <text x="56" y="116">[0,</text>
                  <text x="84" y="116">4)</text>
                  <text x="232" y="116">level</text>
                  <text x="264" y="116">2</text>
                  <text x="40" y="148">/</text>
                  <text x="96" y="148">\</text>
                  <text x="32" y="180">[0,2)</text>
                  <text x="96" y="180">[2,4)</text>
                  <text x="160" y="180">[4,6)</text>
                  <text x="232" y="180">level</text>
                  <text x="264" y="180">1</text>
                  <text x="24" y="212">/</text>
                  <text x="40" y="212">\</text>
                  <text x="88" y="212">/</text>
                  <text x="104" y="212">\</text>
                  <text x="152" y="212">/</text>
                  <text x="168" y="212">\</text>
                  <text x="16" y="244">0</text>
                  <text x="48" y="244">1</text>
                  <text x="80" y="244">2</text>
                  <text x="112" y="244">3</text>
                  <text x="144" y="244">4</text>
                  <text x="176" y="244">5</text>
                  <text x="232" y="244">level</text>
                  <text x="264" y="244">0</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
       +--------------+
       |     [0, 6)   |   level 3
       +--------------+
        /          |
   +--------+      |
   | [0, 4) |      *      level 2
   +--------+      |
    /      \       |
+-----+ +-----+ +-----+
|[0,2)| |[2,4)| |[4,6)|   level 1
+-----+ +-----+ +-----+
  / \     / \     / \
+-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5|   level 0
+-+ +-+ +-+ +-+ +-+ +-+
]]></artwork>
          </artset>
        </figure>
        <t>When the size of a Merkle Tree is not a power of two, some levels on the rightmost edge of the tree are skipped. The rightmost edge is the path to the last element. The skipped levels can be seen in its binary representation. Here, the last element is 5, which has binary representation <tt>0b101</tt>. When a bit is set, the corresponding node is a right child. When it is unset, the corresponding node is skipped.</t>
        <t>In a tree of the next power of two size, the skipped nodes in this path are where there <em>would</em> have been a right child, had there been enough elements to construct one. Without a right child, the hash operation is skipped and a skipped node has the same value as its singular child. <xref target="fig-merkle-tree-bits-partial-comparison"/> depicts this for a tree of size 6.</t>
        <figure anchor="fig-merkle-tree-bits-partial-comparison">
          <name>An example Merkle Tree of size 6, viewed as a subset of a tree of size 8</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="328" viewBox="0 0 328 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 64,32 L 64,64" fill="none" stroke="black"/>
                <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 88,224 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,96 L 104,128" fill="none" stroke="black"/>
                <path d="M 104,224 L 104,256" fill="none" stroke="black"/>
                <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,160 L 136,192" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                <path d="M 160,96 L 160,128" fill="none" stroke="black"/>
                <path d="M 168,224 L 168,256" fill="none" stroke="black"/>
                <path d="M 184,160 L 184,192" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 200,32 L 200,64" fill="none" stroke="black"/>
                <path d="M 200,160 L 200,192" fill="none" stroke="black"/>
                <path d="M 200,224 L 200,256" fill="none" stroke="black"/>
                <path d="M 216,224 L 216,256" fill="none" stroke="black"/>
                <path d="M 232,96 L 232,128" fill="none" stroke="black"/>
                <path d="M 232,224 L 232,256" fill="none" stroke="black"/>
                <path d="M 248,160 L 248,192" fill="none" stroke="black"/>
                <path d="M 248,224 L 248,256" fill="none" stroke="black"/>
                <path d="M 64,32 L 200,32" fill="none" stroke="black"/>
                <path d="M 64,64 L 200,64" fill="none" stroke="black"/>
                <path d="M 32,96 L 104,96" fill="none" stroke="black"/>
                <path d="M 160,96 L 232,96" fill="none" stroke="black"/>
                <path d="M 32,128 L 104,128" fill="none" stroke="black"/>
                <path d="M 160,128 L 232,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 56,160" fill="none" stroke="black"/>
                <path d="M 72,160 L 120,160" fill="none" stroke="black"/>
                <path d="M 136,160 L 184,160" fill="none" stroke="black"/>
                <path d="M 200,160 L 248,160" fill="none" stroke="black"/>
                <path d="M 8,192 L 56,192" fill="none" stroke="black"/>
                <path d="M 72,192 L 120,192" fill="none" stroke="black"/>
                <path d="M 136,192 L 184,192" fill="none" stroke="black"/>
                <path d="M 200,192 L 248,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 88,224" fill="none" stroke="black"/>
                <path d="M 104,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 152,224" fill="none" stroke="black"/>
                <path d="M 168,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 200,224 L 216,224" fill="none" stroke="black"/>
                <path d="M 232,224 L 248,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 152,256" fill="none" stroke="black"/>
                <path d="M 168,256 L 184,256" fill="none" stroke="black"/>
                <path d="M 200,256 L 216,256" fill="none" stroke="black"/>
                <path d="M 232,256 L 248,256" fill="none" stroke="black"/>
                <g class="text">
                  <text x="120" y="52">[0,</text>
                  <text x="148" y="52">6)</text>
                  <text x="288" y="52">level</text>
                  <text x="320" y="52">3</text>
                  <text x="72" y="84">/</text>
                  <text x="192" y="84">\</text>
                  <text x="56" y="116">[0,</text>
                  <text x="84" y="116">4)</text>
                  <text x="184" y="116">[4,</text>
                  <text x="212" y="116">6)</text>
                  <text x="288" y="116">level</text>
                  <text x="320" y="116">2</text>
                  <text x="40" y="148">/</text>
                  <text x="96" y="148">\</text>
                  <text x="168" y="148">/</text>
                  <text x="224" y="148">\</text>
                  <text x="32" y="180">[0,2)</text>
                  <text x="96" y="180">[2,4)</text>
                  <text x="160" y="180">[4,6)</text>
                  <text x="288" y="180">level</text>
                  <text x="320" y="180">1</text>
                  <text x="24" y="212">/</text>
                  <text x="40" y="212">\</text>
                  <text x="88" y="212">/</text>
                  <text x="104" y="212">\</text>
                  <text x="152" y="212">/</text>
                  <text x="168" y="212">\</text>
                  <text x="216" y="212">/</text>
                  <text x="232" y="212">\</text>
                  <text x="16" y="244">0</text>
                  <text x="48" y="244">1</text>
                  <text x="80" y="244">2</text>
                  <text x="112" y="244">3</text>
                  <text x="144" y="244">4</text>
                  <text x="176" y="244">5</text>
                  <text x="288" y="244">level</text>
                  <text x="320" y="244">0</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
       +----------------+
       |     [0, 6)     |        level 3
       +----------------+
        /              \
   +--------+      +--------+
   | [0, 4) |      | [4, 6) |    level 2
   +--------+      +--------+
    /      \        /      \
+-----+ +-----+ +-----+ +-----+
|[0,2)| |[2,4)| |[4,6)| |     |  level 1
+-----+ +-----+ +-----+ +-----+
  / \     / \     / \     / \
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5| | | | |  level 0
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
]]></artwork>
          </artset>
        </figure>
        <t>Zero bits also indicate skipped nodes in paths that have not yet diverged from the rightmost edge (i.e. the path to the last element), when viewed from root to leaf. In the example, the binary representation of 4 is <tt>0b100</tt>. While bit 0 and bit 1 are both unset, they manifest in the tree differently. Bit 0 indicates that 4 is a left child. However, at bit 1, <tt>0b100</tt> has not yet diverged from the last element, <tt>0b101</tt>. That instead indicates a skipped node, not a left child.</t>
      </section>
      <section anchor="subtrees-explain">
        <name>Subtrees</name>
        <t>Given a list of elements and Merkle Tree over them, it is possible to construct a smaller Merkle Tree over any interval of elements. However, those smaller trees may not have the same structure as the original tree.</t>
        <t><xref target="fig-misaligned-tree"/> shows a Merkle Tree of size 8, and a tree built over elements <tt>[1, 5)</tt>. When <tt>[1, 5)</tt> is considered as an independent, 4-element sequence, it does not align with the portion of the overall tree that covers <tt>[1, 5)</tt>. The two trees do not share any intermediate nodes. This prevents constructing subtree consistency proofs (<xref target="subtree-consistency-proofs"/>).</t>
        <figure anchor="fig-misaligned-tree">
          <name>An example misaligned tree</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="480" width="328" viewBox="0 0 328 480" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                <path d="M 40,368 L 40,400" fill="none" stroke="black"/>
                <path d="M 40,432 L 40,464" fill="none" stroke="black"/>
                <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 56,432 L 56,464" fill="none" stroke="black"/>
                <path d="M 64,32 L 64,64" fill="none" stroke="black"/>
                <path d="M 64,304 L 64,336" fill="none" stroke="black"/>
                <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 72,432 L 72,464" fill="none" stroke="black"/>
                <path d="M 88,224 L 88,256" fill="none" stroke="black"/>
                <path d="M 88,368 L 88,400" fill="none" stroke="black"/>
                <path d="M 88,432 L 88,464" fill="none" stroke="black"/>
                <path d="M 104,96 L 104,128" fill="none" stroke="black"/>
                <path d="M 104,224 L 104,256" fill="none" stroke="black"/>
                <path d="M 104,368 L 104,400" fill="none" stroke="black"/>
                <path d="M 104,432 L 104,464" fill="none" stroke="black"/>
                <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 120,432 L 120,464" fill="none" stroke="black"/>
                <path d="M 136,160 L 136,192" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 136,304 L 136,336" fill="none" stroke="black"/>
                <path d="M 136,432 L 136,464" fill="none" stroke="black"/>
                <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                <path d="M 152,368 L 152,400" fill="none" stroke="black"/>
                <path d="M 152,432 L 152,464" fill="none" stroke="black"/>
                <path d="M 160,96 L 160,128" fill="none" stroke="black"/>
                <path d="M 168,224 L 168,256" fill="none" stroke="black"/>
                <path d="M 184,160 L 184,192" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 200,32 L 200,64" fill="none" stroke="black"/>
                <path d="M 200,160 L 200,192" fill="none" stroke="black"/>
                <path d="M 200,224 L 200,256" fill="none" stroke="black"/>
                <path d="M 216,224 L 216,256" fill="none" stroke="black"/>
                <path d="M 232,96 L 232,128" fill="none" stroke="black"/>
                <path d="M 232,224 L 232,256" fill="none" stroke="black"/>
                <path d="M 248,160 L 248,192" fill="none" stroke="black"/>
                <path d="M 248,224 L 248,256" fill="none" stroke="black"/>
                <path d="M 64,32 L 200,32" fill="none" stroke="black"/>
                <path d="M 64,64 L 200,64" fill="none" stroke="black"/>
                <path d="M 32,96 L 104,96" fill="none" stroke="black"/>
                <path d="M 160,96 L 232,96" fill="none" stroke="black"/>
                <path d="M 32,128 L 104,128" fill="none" stroke="black"/>
                <path d="M 160,128 L 232,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 56,160" fill="none" stroke="black"/>
                <path d="M 72,160 L 120,160" fill="none" stroke="black"/>
                <path d="M 136,160 L 184,160" fill="none" stroke="black"/>
                <path d="M 200,160 L 248,160" fill="none" stroke="black"/>
                <path d="M 8,192 L 56,192" fill="none" stroke="black"/>
                <path d="M 72,192 L 120,192" fill="none" stroke="black"/>
                <path d="M 136,192 L 184,192" fill="none" stroke="black"/>
                <path d="M 200,192 L 248,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 88,224" fill="none" stroke="black"/>
                <path d="M 104,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 152,224" fill="none" stroke="black"/>
                <path d="M 168,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 200,224 L 216,224" fill="none" stroke="black"/>
                <path d="M 232,224 L 248,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 152,256" fill="none" stroke="black"/>
                <path d="M 168,256 L 184,256" fill="none" stroke="black"/>
                <path d="M 200,256 L 216,256" fill="none" stroke="black"/>
                <path d="M 232,256 L 248,256" fill="none" stroke="black"/>
                <path d="M 64,304 L 136,304" fill="none" stroke="black"/>
                <path d="M 64,336 L 136,336" fill="none" stroke="black"/>
                <path d="M 40,368 L 88,368" fill="none" stroke="black"/>
                <path d="M 104,368 L 152,368" fill="none" stroke="black"/>
                <path d="M 40,400 L 88,400" fill="none" stroke="black"/>
                <path d="M 104,400 L 152,400" fill="none" stroke="black"/>
                <path d="M 40,432 L 56,432" fill="none" stroke="black"/>
                <path d="M 72,432 L 88,432" fill="none" stroke="black"/>
                <path d="M 104,432 L 120,432" fill="none" stroke="black"/>
                <path d="M 136,432 L 152,432" fill="none" stroke="black"/>
                <path d="M 40,464 L 56,464" fill="none" stroke="black"/>
                <path d="M 72,464 L 88,464" fill="none" stroke="black"/>
                <path d="M 104,464 L 120,464" fill="none" stroke="black"/>
                <path d="M 136,464 L 152,464" fill="none" stroke="black"/>
                <g class="text">
                  <text x="120" y="52">[0,</text>
                  <text x="148" y="52">8)</text>
                  <text x="288" y="52">level</text>
                  <text x="320" y="52">3</text>
                  <text x="72" y="84">/</text>
                  <text x="192" y="84">\</text>
                  <text x="56" y="116">[0,</text>
                  <text x="84" y="116">4)</text>
                  <text x="184" y="116">[4,</text>
                  <text x="212" y="116">8)</text>
                  <text x="288" y="116">level</text>
                  <text x="320" y="116">2</text>
                  <text x="40" y="148">/</text>
                  <text x="96" y="148">\</text>
                  <text x="168" y="148">/</text>
                  <text x="224" y="148">\</text>
                  <text x="32" y="180">[0,2)</text>
                  <text x="96" y="180">[2,4)</text>
                  <text x="160" y="180">[4,6)</text>
                  <text x="224" y="180">[6,8)</text>
                  <text x="288" y="180">level</text>
                  <text x="320" y="180">1</text>
                  <text x="24" y="212">/</text>
                  <text x="40" y="212">\</text>
                  <text x="88" y="212">/</text>
                  <text x="104" y="212">\</text>
                  <text x="152" y="212">/</text>
                  <text x="168" y="212">\</text>
                  <text x="216" y="212">/</text>
                  <text x="232" y="212">\</text>
                  <text x="16" y="244">0</text>
                  <text x="48" y="244">1</text>
                  <text x="80" y="244">2</text>
                  <text x="112" y="244">3</text>
                  <text x="144" y="244">4</text>
                  <text x="176" y="244">5</text>
                  <text x="208" y="244">6</text>
                  <text x="240" y="244">7</text>
                  <text x="288" y="244">level</text>
                  <text x="320" y="244">0</text>
                  <text x="88" y="324">[1,</text>
                  <text x="116" y="324">5)</text>
                  <text x="288" y="324">level</text>
                  <text x="320" y="324">2</text>
                  <text x="72" y="356">/</text>
                  <text x="128" y="356">\</text>
                  <text x="64" y="388">[1,3)</text>
                  <text x="128" y="388">[3,5)</text>
                  <text x="288" y="388">level</text>
                  <text x="320" y="388">1</text>
                  <text x="56" y="420">/</text>
                  <text x="72" y="420">\</text>
                  <text x="120" y="420">/</text>
                  <text x="136" y="420">\</text>
                  <text x="48" y="452">1</text>
                  <text x="80" y="452">2</text>
                  <text x="112" y="452">3</text>
                  <text x="144" y="452">4</text>
                  <text x="288" y="452">level</text>
                  <text x="320" y="452">0</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
       +----------------+
       |     [0, 8)     |        level 3
       +----------------+
        /              \
   +--------+      +--------+
   | [0, 4) |      | [4, 8) |    level 2
   +--------+      +--------+
    /      \        /      \
+-----+ +-----+ +-----+ +-----+
|[0,2)| |[2,4)| |[4,6)| |[6,8)|  level 1
+-----+ +-----+ +-----+ +-----+
  / \     / \     / \     / \
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5| |6| |7|  level 0
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+


       +--------+
       | [1, 5) |                level 2
       +--------+
        /      \
    +-----+ +-----+
    |[1,3)| |[3,5)|              level 1
    +-----+ +-----+
      / \     / \
    +-+ +-+ +-+ +-+
    |1| |2| |3| |4|              level 0
    +-+ +-+ +-+ +-+
]]></artwork>
          </artset>
        </figure>
        <t>The numerical constraints on <tt>start</tt> and <tt>end</tt> in <xref target="definition-of-a-subtree"/> restrict subtrees to ensure that they are properly aligned with the original tree as to permit subtree consistency proofs. A Merkle Tree built over <tt>[start, end)</tt> has size <tt>end - start</tt>, and is constructed as if <tt>start</tt> were the first element of the sequence at index zero. To be aligned, <tt>start</tt> must be the leftmost leaf of the lowest common ancestor of <tt>start</tt> and <tt>end - 1</tt> in the original tree:</t>
        <ul spacing="normal">
          <li>
            <t>Numerically, this means the least significant <tt>BIT_WIDTH(end - start - 1)</tt> bits of <tt>start</tt> must be zero. Equivalently, <tt>start</tt> must be divisible by <tt>BIT_CEIL(end - start)</tt>.</t>
          </li>
          <li>
            <t>In the tree, this means subtrees are constructed by taking any node in the tree, setting <tt>start</tt> to the leftmost leaf under the node, and <tt>end</tt> to one past any other leaf under the node.</t>
          </li>
        </ul>
        <t>Though most nodes overlap, not every node of the subtree is necessarily in the larger Merkle Tree, as shown in <xref target="fig-subtree-containment-example-2"/>. In general:</t>
        <ul spacing="normal">
          <li>
            <t>Subtrees whose sizes are a power of two are called <em>full subtrees</em>. A full subtree's root node will always be in the original tree.</t>
          </li>
          <li>
            <t>Subtrees whose sizes are not a power of two are called <em>partial subtrees</em>. A partial subtree's root node will be in the original tree of size <tt>n</tt>, if and only if <tt>n = end</tt>. Otherwise, non-leaf nodes along the partial subtree's right edge will not be part of the original tree.</t>
          </li>
        </ul>
        <t>The difference between full and partial subtrees does not impact their usage, but they can help in understanding the proof constructions below.</t>
      </section>
      <section anchor="inclusion-proof-evaluation-explain">
        <name>Inclusion Proof Evaluation</name>
        <t>The procedure in <xref target="evaluating-a-subtree-inclusion-proof"/> builds up a subtree hash in <tt>r</tt> by starting from <tt>entry_hash</tt> and iteratively hashing elements of <tt>inclusion_proof</tt> on the left or right. That means this procedure, when successful, must return <em>some</em> hash that contains <tt>entry_hash</tt>.</t>
        <t>Treating <tt>[start, end)</tt> as a Merkle Tree of size <tt>end - start</tt>, the procedure hashes based on the path to <tt>index</tt>. Within this smaller Merkle Tree, it has index <tt>fn = index - start</tt> (first number), and the last element has index <tt>sn = end - start - 1</tt> (second number).</t>
        <t>Step 4 iterates through <tt>inclusion_proof</tt> and the paths to <tt>fn</tt> and <tt>sn</tt> in parallel. As the procedure right-shifts <tt>fn</tt> and <tt>sn</tt> and looks at the least-significant bit, it moves up the two paths, toward the root. When <tt>sn</tt> is zero, the procedure has reached the top of the tree. The procedure checks that the two iterations complete together.</t>
        <t>Iterating from level 0 up, <tt>fn</tt> and <tt>sn</tt> will initially be different. While they are different, step 4.2 hashes on the left or right based on the binary representation, as discussed in <xref target="binary-representations"/>.</t>
        <t>Once <tt>fn = sn</tt>, the remainder of the path is on the right edge. At that point, the condition in step 4.2 is always true. It only incorporates proof entries on the left, once per set bit. Unset bits are skipped.</t>
        <t>Inclusion proofs can also be evaluated by considering these two stages separately. The first stage consumes <tt>l1 = BIT_WIDTH(fn XOR sn)</tt> proof entries. The second stage consumes <tt>l2 = POPCOUNT(fn &gt;&gt; l1)</tt> proof entries. A valid inclusion proof must then have <tt>l1 + l2</tt> entries. The first <tt>l1</tt> entries are hashed based on <tt>fn</tt>'s least significant bits, and the remaining <tt>l2</tt> entries are hashed on the left.</t>
      </section>
      <section anchor="consistency-proof-structure">
        <name>Consistency Proof Structure</name>
        <t>A subtree consistency proof for <tt>[start, end)</tt> and the tree of <tt>n</tt> elements is similar to an inclusion proof for element <tt>end - 1</tt>. If one starts from <tt>end - 1</tt>'s hash, incorporating the whole inclusion proof should reconstruct <tt>root_hash</tt> and incorporating a subset of the inclusion proof should reconstruct <tt>node_hash</tt>. Thus <tt>end - 1</tt>'s hash and this inclusion proof can prove consistency. A subtree consistency proof in this document applies two optimizations over this construction:</t>
        <ol spacing="normal" type="1"><li>
            <t>Instead of starting at level 0 with <tt>end - 1</tt>, the proof can start at a higher level. Any ancestor of <tt>end - 1</tt> shared by both the subtree and the overall tree is a valid starting node to reconstruct <tt>node_hash</tt> and <tt>root_hash</tt>. Use the highest level with a common ancestor. This truncates the inclusion proof.</t>
          </li>
          <li>
            <t>If this starting node is the entire subtree, omit its hash from the consistency proof. The verifier is assumed to already know <tt>node_hash</tt>.</t>
          </li>
        </ol>
        <t>A Merkle consistency proof, defined in <xref section="2.1.4" sectionFormat="of" target="RFC9162"/>, applies these same optimizations.</t>
        <t><xref target="fig-truncate-consistency-proof"/> depicts a subtree consistency proof between the subtree <tt>[0, 6)</tt> and the Merkle Tree of size 8. The consistency proof begins at level 1, or node <tt>[4, 6)</tt>. The inclusion proof portion is similarly truncated to start at level 1: <tt>[6, 8)</tt> and <tt>[0, 4)</tt>. If the consistency proof began at level 0, the starting node would be leaf 5, and the consistency proof would additionally include leaf 4.</t>
        <figure anchor="fig-truncate-consistency-proof">
          <name>A subtree consistency proof that starts at level 1 instead of level 0</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="544" width="336" viewBox="0 0 336 544" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 8,432 L 8,464" fill="none" stroke="black"/>
                <path d="M 8,496 L 8,528" fill="none" stroke="black"/>
                <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                <path d="M 24,496 L 24,528" fill="none" stroke="black"/>
                <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                <path d="M 32,368 L 32,400" fill="none" stroke="black"/>
                <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                <path d="M 40,496 L 40,528" fill="none" stroke="black"/>
                <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 56,432 L 56,464" fill="none" stroke="black"/>
                <path d="M 56,496 L 56,528" fill="none" stroke="black"/>
                <path d="M 64,32 L 64,64" fill="none" stroke="black"/>
                <path d="M 64,304 L 64,336" fill="none" stroke="black"/>
                <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 72,432 L 72,464" fill="none" stroke="black"/>
                <path d="M 72,496 L 72,528" fill="none" stroke="black"/>
                <path d="M 88,224 L 88,256" fill="none" stroke="black"/>
                <path d="M 88,496 L 88,528" fill="none" stroke="black"/>
                <path d="M 104,96 L 104,128" fill="none" stroke="black"/>
                <path d="M 104,224 L 104,256" fill="none" stroke="black"/>
                <path d="M 104,368 L 104,400" fill="none" stroke="black"/>
                <path d="M 104,496 L 104,528" fill="none" stroke="black"/>
                <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 120,432 L 120,464" fill="none" stroke="black"/>
                <path d="M 120,496 L 120,528" fill="none" stroke="black"/>
                <path d="M 128,96 L 128,128" fill="none" stroke="black"/>
                <path d="M 136,160 L 136,192" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 136,432 L 136,464" fill="none" stroke="black"/>
                <path d="M 136,496 L 136,528" fill="none" stroke="black"/>
                <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                <path d="M 152,496 L 152,528" fill="none" stroke="black"/>
                <path d="M 160,368 L 160,400" fill="none" stroke="black"/>
                <path d="M 168,224 L 168,256" fill="none" stroke="black"/>
                <path d="M 168,496 L 168,528" fill="none" stroke="black"/>
                <path d="M 184,160 L 184,192" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 184,432 L 184,464" fill="none" stroke="black"/>
                <path d="M 184,496 L 184,528" fill="none" stroke="black"/>
                <path d="M 200,32 L 200,64" fill="none" stroke="black"/>
                <path d="M 200,96 L 200,128" fill="none" stroke="black"/>
                <path d="M 200,304 L 200,336" fill="none" stroke="black"/>
                <path d="M 200,432 L 200,464" fill="none" stroke="black"/>
                <path d="M 200,496 L 200,528" fill="none" stroke="black"/>
                <path d="M 216,496 L 216,528" fill="none" stroke="black"/>
                <path d="M 232,368 L 232,400" fill="none" stroke="black"/>
                <path d="M 232,496 L 232,528" fill="none" stroke="black"/>
                <path d="M 248,432 L 248,464" fill="none" stroke="black"/>
                <path d="M 248,496 L 248,528" fill="none" stroke="black"/>
                <path d="M 64,32 L 200,32" fill="none" stroke="black"/>
                <path d="M 64,64 L 200,64" fill="none" stroke="black"/>
                <path d="M 32,94 L 104,94" fill="none" stroke="black"/>
                <path d="M 32,98 L 104,98" fill="none" stroke="black"/>
                <path d="M 128,96 L 200,96" fill="none" stroke="black"/>
                <path d="M 32,126 L 104,126" fill="none" stroke="black"/>
                <path d="M 32,130 L 104,130" fill="none" stroke="black"/>
                <path d="M 128,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 56,160" fill="none" stroke="black"/>
                <path d="M 72,160 L 120,160" fill="none" stroke="black"/>
                <path d="M 136,160 Q 138,156.8 140,160 Q 142,163.2 144,160 Q 146,156.8 148,160 Q 150,163.2 152,160 Q 154,156.8 156,160 Q 158,163.2 160,160 Q 162,156.8 164,160 Q 166,163.2 168,160 Q 170,156.8 172,160 Q 174,163.2 176,160 Q 178,156.8 180,160 Q 182,163.2 184,160 " fill="none" stroke="black"/>
                <path d="M 8,192 L 56,192" fill="none" stroke="black"/>
                <path d="M 72,192 L 120,192" fill="none" stroke="black"/>
                <path d="M 136,192 Q 138,188.8 140,192 Q 142,195.2 144,192 Q 146,188.8 148,192 Q 150,195.2 152,192 Q 154,188.8 156,192 Q 158,195.2 160,192 Q 162,188.8 164,192 Q 166,195.2 168,192 Q 170,188.8 172,192 Q 174,195.2 176,192 Q 178,188.8 180,192 Q 182,195.2 184,192 " fill="none" stroke="black"/>
                <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 88,224" fill="none" stroke="black"/>
                <path d="M 104,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 152,224" fill="none" stroke="black"/>
                <path d="M 168,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 152,256" fill="none" stroke="black"/>
                <path d="M 168,256 L 184,256" fill="none" stroke="black"/>
                <path d="M 64,304 L 200,304" fill="none" stroke="black"/>
                <path d="M 64,336 L 200,336" fill="none" stroke="black"/>
                <path d="M 32,366 L 104,366" fill="none" stroke="black"/>
                <path d="M 32,370 L 104,370" fill="none" stroke="black"/>
                <path d="M 160,368 L 232,368" fill="none" stroke="black"/>
                <path d="M 32,398 L 104,398" fill="none" stroke="black"/>
                <path d="M 32,402 L 104,402" fill="none" stroke="black"/>
                <path d="M 160,400 L 232,400" fill="none" stroke="black"/>
                <path d="M 8,432 L 56,432" fill="none" stroke="black"/>
                <path d="M 72,432 L 120,432" fill="none" stroke="black"/>
                <path d="M 136,432 Q 138,428.8 140,432 Q 142,435.2 144,432 Q 146,428.8 148,432 Q 150,435.2 152,432 Q 154,428.8 156,432 Q 158,435.2 160,432 Q 162,428.8 164,432 Q 166,435.2 168,432 Q 170,428.8 172,432 Q 174,435.2 176,432 Q 178,428.8 180,432 Q 182,435.2 184,432 " fill="none" stroke="black"/>
                <path d="M 200,430 L 248,430" fill="none" stroke="black"/>
                <path d="M 200,434 L 248,434" fill="none" stroke="black"/>
                <path d="M 8,464 L 56,464" fill="none" stroke="black"/>
                <path d="M 72,464 L 120,464" fill="none" stroke="black"/>
                <path d="M 136,464 Q 138,460.8 140,464 Q 142,467.2 144,464 Q 146,460.8 148,464 Q 150,467.2 152,464 Q 154,460.8 156,464 Q 158,467.2 160,464 Q 162,460.8 164,464 Q 166,467.2 168,464 Q 170,460.8 172,464 Q 174,467.2 176,464 Q 178,460.8 180,464 Q 182,467.2 184,464 " fill="none" stroke="black"/>
                <path d="M 200,462 L 248,462" fill="none" stroke="black"/>
                <path d="M 200,466 L 248,466" fill="none" stroke="black"/>
                <path d="M 8,496 L 24,496" fill="none" stroke="black"/>
                <path d="M 40,496 L 56,496" fill="none" stroke="black"/>
                <path d="M 72,496 L 88,496" fill="none" stroke="black"/>
                <path d="M 104,496 L 120,496" fill="none" stroke="black"/>
                <path d="M 136,496 L 152,496" fill="none" stroke="black"/>
                <path d="M 168,496 L 184,496" fill="none" stroke="black"/>
                <path d="M 200,496 L 216,496" fill="none" stroke="black"/>
                <path d="M 232,496 L 248,496" fill="none" stroke="black"/>
                <path d="M 8,528 L 24,528" fill="none" stroke="black"/>
                <path d="M 40,528 L 56,528" fill="none" stroke="black"/>
                <path d="M 72,528 L 88,528" fill="none" stroke="black"/>
                <path d="M 104,528 L 120,528" fill="none" stroke="black"/>
                <path d="M 136,528 L 152,528" fill="none" stroke="black"/>
                <path d="M 168,528 L 184,528" fill="none" stroke="black"/>
                <path d="M 200,528 L 216,528" fill="none" stroke="black"/>
                <path d="M 232,528 L 248,528" fill="none" stroke="black"/>
                <g class="text">
                  <text x="120" y="52">[0,</text>
                  <text x="148" y="52">6)</text>
                  <text x="296" y="52">level</text>
                  <text x="328" y="52">3</text>
                  <text x="72" y="84">/</text>
                  <text x="168" y="84">|</text>
                  <text x="56" y="116">[0,</text>
                  <text x="84" y="116">4)</text>
                  <text x="152" y="116">[4,</text>
                  <text x="180" y="116">6)</text>
                  <text x="296" y="116">level</text>
                  <text x="328" y="116">2</text>
                  <text x="40" y="148">/</text>
                  <text x="96" y="148">\</text>
                  <text x="168" y="148">|</text>
                  <text x="32" y="180">[0,2)</text>
                  <text x="96" y="180">[2,4)</text>
                  <text x="160" y="180">[4,6)</text>
                  <text x="296" y="180">level</text>
                  <text x="328" y="180">1</text>
                  <text x="24" y="212">/</text>
                  <text x="40" y="212">\</text>
                  <text x="88" y="212">/</text>
                  <text x="104" y="212">\</text>
                  <text x="152" y="212">/</text>
                  <text x="168" y="212">\</text>
                  <text x="16" y="244">0</text>
                  <text x="48" y="244">1</text>
                  <text x="80" y="244">2</text>
                  <text x="112" y="244">3</text>
                  <text x="144" y="244">4</text>
                  <text x="176" y="244">5</text>
                  <text x="296" y="244">level</text>
                  <text x="328" y="244">0</text>
                  <text x="120" y="324">[0,</text>
                  <text x="148" y="324">8)</text>
                  <text x="296" y="324">level</text>
                  <text x="328" y="324">3</text>
                  <text x="72" y="356">/</text>
                  <text x="192" y="356">\</text>
                  <text x="56" y="388">[0,</text>
                  <text x="84" y="388">4)</text>
                  <text x="184" y="388">[4,</text>
                  <text x="212" y="388">8)</text>
                  <text x="296" y="388">level</text>
                  <text x="328" y="388">2</text>
                  <text x="40" y="420">/</text>
                  <text x="96" y="420">\</text>
                  <text x="168" y="420">/</text>
                  <text x="224" y="420">\</text>
                  <text x="32" y="452">[0,2)</text>
                  <text x="96" y="452">[2,4)</text>
                  <text x="160" y="452">[4,6)</text>
                  <text x="224" y="452">[6,8)</text>
                  <text x="296" y="452">level</text>
                  <text x="328" y="452">1</text>
                  <text x="24" y="484">/</text>
                  <text x="40" y="484">\</text>
                  <text x="88" y="484">/</text>
                  <text x="104" y="484">\</text>
                  <text x="152" y="484">/</text>
                  <text x="168" y="484">\</text>
                  <text x="216" y="484">/</text>
                  <text x="232" y="484">\</text>
                  <text x="16" y="516">0</text>
                  <text x="48" y="516">1</text>
                  <text x="80" y="516">2</text>
                  <text x="112" y="516">3</text>
                  <text x="144" y="516">4</text>
                  <text x="176" y="516">5</text>
                  <text x="208" y="516">6</text>
                  <text x="240" y="516">7</text>
                  <text x="296" y="516">level</text>
                  <text x="328" y="516">0</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
       +----------------+
       |     [0, 6)     |         level 3
       +----------------+
        /           |
   +========+  +--------+
   | [0, 4) |  | [4, 6) |         level 2
   +========+  +--------+
    /      \        |
+-----+ +-----+ +~~~~~+
|[0,2)| |[2,4)| |[4,6)|           level 1
+-----+ +-----+ +~~~~~+
  / \     / \     / \
+-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5|           level 0
+-+ +-+ +-+ +-+ +-+ +-+


       +----------------+
       |     [0, 8)     |         level 3
       +----------------+
        /              \
   +========+      +--------+
   | [0, 4) |      | [4, 8) |     level 2
   +========+      +--------+
    /      \        /      \
+-----+ +-----+ +~~~~~+ +=====+
|[0,2)| |[2,4)| |[4,6)| |[6,8)|   level 1
+-----+ +-----+ +~~~~~+ +=====+
  / \     / \     / \     / \
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5| |6| |7|   level 0
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
]]></artwork>
          </artset>
        </figure>
        <t>Note that the truncated inclusion proof may include nodes from lower levels, if the corresponding level was skipped on the right edge. <xref target="fig-truncate-consistency-proof-2"/> depicts a subtree consistency proof between the subtree <tt>[0, 6)</tt> and the Merkle Tree of size 7. As above, the starting node is <tt>[4, 6)</tt> at level 1. The inclusion proof portion includes leaf 6 at level 0. This is because leaf 6 is taking the place of its skipped parent at level 1. (A skipped node can be thought of as a duplicate of its singular child.)</t>
        <figure anchor="fig-truncate-consistency-proof-2">
          <name>The interaction between inclusion proof truncation and skipped levels</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="544" width="320" viewBox="0 0 320 544" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 8,432 L 8,464" fill="none" stroke="black"/>
                <path d="M 8,496 L 8,528" fill="none" stroke="black"/>
                <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                <path d="M 24,496 L 24,528" fill="none" stroke="black"/>
                <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                <path d="M 32,368 L 32,400" fill="none" stroke="black"/>
                <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                <path d="M 40,496 L 40,528" fill="none" stroke="black"/>
                <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 56,432 L 56,464" fill="none" stroke="black"/>
                <path d="M 56,496 L 56,528" fill="none" stroke="black"/>
                <path d="M 64,32 L 64,64" fill="none" stroke="black"/>
                <path d="M 64,304 L 64,336" fill="none" stroke="black"/>
                <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 72,432 L 72,464" fill="none" stroke="black"/>
                <path d="M 72,496 L 72,528" fill="none" stroke="black"/>
                <path d="M 88,224 L 88,256" fill="none" stroke="black"/>
                <path d="M 88,496 L 88,528" fill="none" stroke="black"/>
                <path d="M 104,96 L 104,128" fill="none" stroke="black"/>
                <path d="M 104,224 L 104,256" fill="none" stroke="black"/>
                <path d="M 104,368 L 104,400" fill="none" stroke="black"/>
                <path d="M 104,496 L 104,528" fill="none" stroke="black"/>
                <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 120,432 L 120,464" fill="none" stroke="black"/>
                <path d="M 120,496 L 120,528" fill="none" stroke="black"/>
                <path d="M 128,96 L 128,128" fill="none" stroke="black"/>
                <path d="M 136,160 L 136,192" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 136,432 L 136,464" fill="none" stroke="black"/>
                <path d="M 136,496 L 136,528" fill="none" stroke="black"/>
                <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                <path d="M 152,496 L 152,528" fill="none" stroke="black"/>
                <path d="M 160,368 L 160,400" fill="none" stroke="black"/>
                <path d="M 168,224 L 168,256" fill="none" stroke="black"/>
                <path d="M 168,496 L 168,528" fill="none" stroke="black"/>
                <path d="M 184,160 L 184,192" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 184,432 L 184,464" fill="none" stroke="black"/>
                <path d="M 184,496 L 184,528" fill="none" stroke="black"/>
                <path d="M 200,32 L 200,64" fill="none" stroke="black"/>
                <path d="M 200,96 L 200,128" fill="none" stroke="black"/>
                <path d="M 200,304 L 200,336" fill="none" stroke="black"/>
                <path d="M 200,432 L 200,464" fill="none" stroke="black"/>
                <path d="M 200,496 L 200,528" fill="none" stroke="black"/>
                <path d="M 208,480 L 208,488" fill="none" stroke="black"/>
                <path d="M 216,432 L 216,464" fill="none" stroke="black"/>
                <path d="M 216,496 L 216,528" fill="none" stroke="black"/>
                <path d="M 232,368 L 232,400" fill="none" stroke="black"/>
                <path d="M 64,32 L 200,32" fill="none" stroke="black"/>
                <path d="M 64,64 L 200,64" fill="none" stroke="black"/>
                <path d="M 32,94 L 104,94" fill="none" stroke="black"/>
                <path d="M 32,98 L 104,98" fill="none" stroke="black"/>
                <path d="M 128,96 L 200,96" fill="none" stroke="black"/>
                <path d="M 32,126 L 104,126" fill="none" stroke="black"/>
                <path d="M 32,130 L 104,130" fill="none" stroke="black"/>
                <path d="M 128,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 56,160" fill="none" stroke="black"/>
                <path d="M 72,160 L 120,160" fill="none" stroke="black"/>
                <path d="M 136,160 Q 138,156.8 140,160 Q 142,163.2 144,160 Q 146,156.8 148,160 Q 150,163.2 152,160 Q 154,156.8 156,160 Q 158,163.2 160,160 Q 162,156.8 164,160 Q 166,163.2 168,160 Q 170,156.8 172,160 Q 174,163.2 176,160 Q 178,156.8 180,160 Q 182,163.2 184,160 " fill="none" stroke="black"/>
                <path d="M 8,192 L 56,192" fill="none" stroke="black"/>
                <path d="M 72,192 L 120,192" fill="none" stroke="black"/>
                <path d="M 136,192 Q 138,188.8 140,192 Q 142,195.2 144,192 Q 146,188.8 148,192 Q 150,195.2 152,192 Q 154,188.8 156,192 Q 158,195.2 160,192 Q 162,188.8 164,192 Q 166,195.2 168,192 Q 170,188.8 172,192 Q 174,195.2 176,192 Q 178,188.8 180,192 Q 182,195.2 184,192 " fill="none" stroke="black"/>
                <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 88,224" fill="none" stroke="black"/>
                <path d="M 104,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 152,224" fill="none" stroke="black"/>
                <path d="M 168,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 152,256" fill="none" stroke="black"/>
                <path d="M 168,256 L 184,256" fill="none" stroke="black"/>
                <path d="M 64,304 L 200,304" fill="none" stroke="black"/>
                <path d="M 64,336 L 200,336" fill="none" stroke="black"/>
                <path d="M 32,366 L 104,366" fill="none" stroke="black"/>
                <path d="M 32,370 L 104,370" fill="none" stroke="black"/>
                <path d="M 160,368 L 232,368" fill="none" stroke="black"/>
                <path d="M 32,398 L 104,398" fill="none" stroke="black"/>
                <path d="M 32,402 L 104,402" fill="none" stroke="black"/>
                <path d="M 160,400 L 232,400" fill="none" stroke="black"/>
                <path d="M 8,432 L 56,432" fill="none" stroke="black"/>
                <path d="M 72,432 L 120,432" fill="none" stroke="black"/>
                <path d="M 136,432 Q 138,428.8 140,432 Q 142,435.2 144,432 Q 146,428.8 148,432 Q 150,435.2 152,432 Q 154,428.8 156,432 Q 158,435.2 160,432 Q 162,428.8 164,432 Q 166,435.2 168,432 Q 170,428.8 172,432 Q 174,435.2 176,432 Q 178,428.8 180,432 Q 182,435.2 184,432 " fill="none" stroke="black"/>
                <path d="M 200,430 L 216,430" fill="none" stroke="black"/>
                <path d="M 200,434 L 216,434" fill="none" stroke="black"/>
                <path d="M 8,464 L 56,464" fill="none" stroke="black"/>
                <path d="M 72,464 L 120,464" fill="none" stroke="black"/>
                <path d="M 136,464 Q 138,460.8 140,464 Q 142,467.2 144,464 Q 146,460.8 148,464 Q 150,467.2 152,464 Q 154,460.8 156,464 Q 158,467.2 160,464 Q 162,460.8 164,464 Q 166,467.2 168,464 Q 170,460.8 172,464 Q 174,467.2 176,464 Q 178,460.8 180,464 Q 182,467.2 184,464 " fill="none" stroke="black"/>
                <path d="M 200,462 L 216,462" fill="none" stroke="black"/>
                <path d="M 200,466 L 216,466" fill="none" stroke="black"/>
                <path d="M 8,496 L 24,496" fill="none" stroke="black"/>
                <path d="M 40,496 L 56,496" fill="none" stroke="black"/>
                <path d="M 72,496 L 88,496" fill="none" stroke="black"/>
                <path d="M 104,496 L 120,496" fill="none" stroke="black"/>
                <path d="M 136,496 L 152,496" fill="none" stroke="black"/>
                <path d="M 168,496 L 184,496" fill="none" stroke="black"/>
                <path d="M 200,496 L 216,496" fill="none" stroke="black"/>
                <path d="M 8,528 L 24,528" fill="none" stroke="black"/>
                <path d="M 40,528 L 56,528" fill="none" stroke="black"/>
                <path d="M 72,528 L 88,528" fill="none" stroke="black"/>
                <path d="M 104,528 L 120,528" fill="none" stroke="black"/>
                <path d="M 136,528 L 152,528" fill="none" stroke="black"/>
                <path d="M 168,528 L 184,528" fill="none" stroke="black"/>
                <path d="M 200,528 L 216,528" fill="none" stroke="black"/>
                <g class="text">
                  <text x="120" y="52">[0,</text>
                  <text x="148" y="52">6)</text>
                  <text x="280" y="52">level</text>
                  <text x="312" y="52">3</text>
                  <text x="72" y="84">/</text>
                  <text x="168" y="84">|</text>
                  <text x="56" y="116">[0,</text>
                  <text x="84" y="116">4)</text>
                  <text x="152" y="116">[4,</text>
                  <text x="180" y="116">6)</text>
                  <text x="280" y="116">level</text>
                  <text x="312" y="116">2</text>
                  <text x="40" y="148">/</text>
                  <text x="96" y="148">\</text>
                  <text x="168" y="148">|</text>
                  <text x="32" y="180">[0,2)</text>
                  <text x="96" y="180">[2,4)</text>
                  <text x="160" y="180">[4,6)</text>
                  <text x="280" y="180">level</text>
                  <text x="312" y="180">1</text>
                  <text x="24" y="212">/</text>
                  <text x="40" y="212">\</text>
                  <text x="88" y="212">/</text>
                  <text x="104" y="212">\</text>
                  <text x="152" y="212">/</text>
                  <text x="168" y="212">\</text>
                  <text x="16" y="244">0</text>
                  <text x="48" y="244">1</text>
                  <text x="80" y="244">2</text>
                  <text x="112" y="244">3</text>
                  <text x="144" y="244">4</text>
                  <text x="176" y="244">5</text>
                  <text x="280" y="244">level</text>
                  <text x="312" y="244">0</text>
                  <text x="120" y="324">[0,</text>
                  <text x="148" y="324">7)</text>
                  <text x="280" y="324">level</text>
                  <text x="312" y="324">3</text>
                  <text x="72" y="356">/</text>
                  <text x="192" y="356">\</text>
                  <text x="56" y="388">[0,</text>
                  <text x="84" y="388">4)</text>
                  <text x="184" y="388">[4,</text>
                  <text x="212" y="388">7)</text>
                  <text x="280" y="388">level</text>
                  <text x="312" y="388">2</text>
                  <text x="40" y="420">/</text>
                  <text x="96" y="420">\</text>
                  <text x="168" y="420">/</text>
                  <text x="208" y="420">|</text>
                  <text x="32" y="452">[0,2)</text>
                  <text x="96" y="452">[2,4)</text>
                  <text x="160" y="452">[4,6)</text>
                  <text x="208" y="452">6</text>
                  <text x="280" y="452">level</text>
                  <text x="312" y="452">1</text>
                  <text x="24" y="484">/</text>
                  <text x="40" y="484">\</text>
                  <text x="88" y="484">/</text>
                  <text x="104" y="484">\</text>
                  <text x="152" y="484">/</text>
                  <text x="168" y="484">\</text>
                  <text x="16" y="516">0</text>
                  <text x="48" y="516">1</text>
                  <text x="80" y="516">2</text>
                  <text x="112" y="516">3</text>
                  <text x="144" y="516">4</text>
                  <text x="176" y="516">5</text>
                  <text x="208" y="516">6</text>
                  <text x="280" y="516">level</text>
                  <text x="312" y="516">0</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
       +----------------+
       |     [0, 6)     |       level 3
       +----------------+
        /           |
   +========+  +--------+
   | [0, 4) |  | [4, 6) |       level 2
   +========+  +--------+
    /      \        |
+-----+ +-----+ +~~~~~+
|[0,2)| |[2,4)| |[4,6)|         level 1
+-----+ +-----+ +~~~~~+
  / \     / \     / \
+-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5|         level 0
+-+ +-+ +-+ +-+ +-+ +-+


       +----------------+
       |     [0, 7)     |       level 3
       +----------------+
        /              \
   +========+      +--------+
   | [0, 4) |      | [4, 7) |   level 2
   +========+      +--------+
    /      \        /    |
+-----+ +-----+ +~~~~~+ +=+
|[0,2)| |[2,4)| |[4,6)| |6|     level 1
+-----+ +-----+ +~~~~~+ +=+
  / \     / \     / \    |
+-+ +-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5| |6|     level 0
+-+ +-+ +-+ +-+ +-+ +-+ +-+
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="consistency-proof-verification-explain">
        <name>Consistency Proof Verification</name>
        <t>The procedure in <xref target="verifying-a-subtree-consistency-proof"/> is structured similarly to inclusion proof evaluation (<xref target="inclusion-proof-evaluation-explain"/>). It iteratively builds two hashes, <tt>fr</tt> (first root) and <tt>sr</tt> (second root), which are expected to equal <tt>node_hash</tt> and <tt>root_hash</tt>, respectively. Everything hashed into <tt>fr</tt> is also hashed into <tt>sr</tt>, so success demonstrates that <tt>root_hash</tt> contains <tt>node_hash</tt>.</t>
        <t>Step 2 initializes <tt>fn</tt> (first number), <tt>sn</tt> (second number), and <tt>tn</tt> (third number) to follow, respectively, the paths to <tt>start</tt>, <tt>end - 1</tt> (the last element of the subtree), and <tt>n - 1</tt> (the last element of the tree).</t>
        <t>Steps 3 and 4 then skip to the starting node, described in <xref target="consistency-proof-structure"/>. The starting node may be:</t>
        <ul spacing="normal">
          <li>
            <t>The entire subtree <tt>[start, end)</tt> if the subtree root is in the tree. This will occur if <tt>end</tt> is <tt>n</tt> (step 3), or if <tt>[start, end)</tt> is a full subtree (exiting step 4 because <tt>fn</tt> is <tt>sn</tt>).</t>
          </li>
          <li>
            <t>Otherwise, the highest full subtree along the right edge of <tt>[start, end)</tt>. This corresponds to the process exiting step 4 because <tt>LSB(sn)</tt> is not set.</t>
          </li>
        </ul>
        <t>Steps 5 and 6 initialize the hashes <tt>fr</tt> and <tt>sr</tt>:</t>
        <ul spacing="normal">
          <li>
            <t>In the first case above, <tt>fn</tt> will equal <tt>sn</tt> after truncation. Step 5 will then initialize the hashes to <tt>node_hash</tt> because the consistency proof does not need to include the starting node.</t>
          </li>
          <li>
            <t>In the second case above, <tt>fn</tt> is less than <tt>sn</tt>. Step 6 will then initialize the hashes to the first value in the consistency proof.</t>
          </li>
        </ul>
        <t>Step 7 incorporates the remainder of the consistency proof into <tt>fr</tt> and <tt>sr</tt>:</t>
        <ul spacing="normal">
          <li>
            <t>All hashes are incorporated into <tt>sr</tt>, with hashing on the left or right determined the same as in inclusion proof evaluation.</t>
          </li>
          <li>
            <t>A subset of the hashes is incorporated into <tt>fr</tt>. It skips any hash on the right because those contain elements greater than <tt>end - 1</tt>. It also stops incorporating when <tt>fn</tt> and <tt>sn</tt> have converged.</t>
          </li>
        </ul>
        <t>This reconstructs the hashes of the subtree and original tree, which are then compared to expected values in step 8.</t>
        <t>In the case when <tt>fn</tt> is <tt>sn</tt> in step 5, the condition in step 7.2.1 is always false, and <tt>fr</tt> is always equal to <tt>node_hash</tt> in step 8. In this case, steps 6 through 8 are equivalent to verifying an inclusion proof for the truncated subtree <tt>[fn, sn + 1)</tt> and truncated tree <tt>tn + 1</tt>.</t>
      </section>
    </section>
    <section anchor="test-vectors">
      <name>Test Vectors</name>
      <section anchor="accumulated-subtree-test-vectors">
        <name>Accumulated Subtree Test Vectors</name>
        <t>The following are "accumulated" <xref target="Accumulated"/> test vectors for the various subtree algorithms defined in <xref target="subtrees"/>.</t>
        <t>They are hash values of the outputs of all possible inputs for each algorithm, for trees of sizes up to 130. They can be used to verify that an implementation matches the specification, without having to include a large number of individual test vectors.</t>
        <t>For all the test vectors, a tree <tt>D_n</tt> of size <tt>n</tt> is constructed with leaf values <tt>d[0] = 0x00, d[1] = 0x01, ...</tt>. The hash function used is SHA-256. The hash values are encoded in hexadecimal.</t>
        <section anchor="subtree-hash-vectors">
          <name>Subtree Hashes</name>
          <t>For each value of <tt>end</tt> from 0 to 130, and each value of <tt>start</tt> from 0 to <tt>end</tt>, if <tt>[start, end)</tt> is a valid subtree, add to the rolling hash the ASCII string <tt>[START, END) HASH</tt> followed by a newline (U+000A), where <tt>START</tt> and <tt>END</tt> are the decimal representations of <tt>start</tt> and <tt>end</tt>, respectively, and <tt>HASH</tt> is the hexadecimal encoding of <tt>MTH(D[start:end])</tt>, according to <xref target="subtrees"/>.</t>
          <t>The final hash value is</t>
          <artwork><![CDATA[
b82806ad4265bb151c1119c0f4db437bb4d1a1f887b3a7fba1cd4ebf552e3e81
]]></artwork>
          <t>In Python, this can be expressed as:</t>
          <sourcecode type="python"><![CDATA[
import hashlib
h = hashlib.sha256()
for end in range(0, 131):
    for start in range(end + 1):
        if valid_subtree(start, end):
            subtree_hash = MTH(D[start:end])
            h.update(f'[{start}, {end}) {subtree_hash.hex()}\n'.encode())
assert h.hexdigest() == 'b82806ad4265bb151c1119c0f4db437bb4d1a1f887b3a7fba1cd4ebf552e3e81'
]]></sourcecode>
          <t>This test exercises both an implementation's subtree hash calculation as well as the subtree validity check. In a CA, both of these operations apply. In a relying party, only the subtree validity check applies. A relying party implementation <bcp14>SHOULD</bcp14> implement a Merkle Tree in testing logic so the above will exercise the subtree validity check.</t>
        </section>
        <section anchor="subtree-inclusion-proof-vectors">
          <name>Subtree Inclusion Proofs</name>
          <t>For each value of <tt>end</tt> from 0 to 130, and each value of <tt>start</tt> from 0 to <tt>end</tt>, if <tt>[start, end)</tt> is a valid subtree, for each value of <tt>index</tt> from <tt>start</tt> to <tt>end - 1</tt>, add to the rolling hash the ASCII string <tt>INDEX [START, END)</tt>, then, for each hash in the inclusion proof (<xref target="subtree-inclusion-proofs"/>) for <tt>d[index]</tt> in the subtree <tt>[start, end)</tt>, a space (U+0020) followed by the hexadecimal encoding of that hash, and finally a newline (U+000A), where <tt>INDEX</tt> is the decimal representation of <tt>index</tt>, and <tt>START</tt> and <tt>END</tt> are the decimal representations of <tt>start</tt> and <tt>end</tt>, respectively.</t>
          <t>The final hash value is</t>
          <artwork><![CDATA[
ac2a8f989e44d99e399db448050ff5f19757df53cfb716aa81015d3955d8163f
]]></artwork>
          <t>In Python, this can be expressed as:</t>
          <sourcecode type="python"><![CDATA[
import hashlib
h = hashlib.sha256()
for end in range(0, 131):
    for start in range(end + 1):
        if valid_subtree(start, end):
            for index in range(start, end):
                inclusion_proof = get_inclusion_proof(D, start, end, index)
                line = f'{index} [{start}, {end})'
                for p in inclusion_proof:
                    line += f' {p.hex()}'
                h.update(f'{line}\n'.encode())
assert h.hexdigest() == 'ac2a8f989e44d99e399db448050ff5f19757df53cfb716aa81015d3955d8163f'
]]></sourcecode>
          <t>This test exercises constructing subtree inclusion proofs, as computed by a CA. A relying party instead evaluates untrusted subtree inclusion proofs. This test can be used to exercise this logic as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>If not available, implement a Merkle Tree in testing logic to compute subtree hashes and subtree inclusion proofs. This logic can be validated by the above test and <xref target="subtree-hash-vectors"/>.</t>
            </li>
            <li>
              <t>For each subtree inclusion proof in the above test, evaluate the inclusion proof and assert the resulting hash matches the corresponding subtree hash.</t>
            </li>
            <li>
              <t>For each non-empty subtree inclusion proof in the above test, truncate the proof by both one byte and a full hash. Assert that evaluating each proof fails.</t>
            </li>
            <li>
              <t>For each subtree inclusion proof in the above test, extend the proof by both one byte and an arbitrary full hash. Assert that evaluating each proof fails.</t>
            </li>
          </ol>
        </section>
        <section anchor="subtree-consistency-proof-vectors">
          <name>Subtree Consistency Proofs</name>
          <t>For each value of <tt>n</tt> from 0 to 130, and each value of <tt>end</tt> from 0 to <tt>n</tt>, and each value of <tt>start</tt> from 0 to <tt>end</tt>, if <tt>[start, end)</tt> is a valid subtree, add to the rolling hash the ASCII string <tt>[START, END) N</tt>, then, for each hash in the consistency proof (<xref target="subtree-consistency-proofs"/>) for the subtree <tt>[start, end)</tt> and tree of size <tt>n</tt>, a space (U+0020) followed by the hexadecimal encoding of that hash, and finally a newline (U+000A), where <tt>START</tt> and <tt>END</tt> are the decimal representations of <tt>start</tt> and <tt>end</tt>, respectively, and <tt>N</tt> is the decimal representation of <tt>n</tt>.</t>
          <t>The final hash value is</t>
          <artwork><![CDATA[
10fa99b37bf9bf9ffa26b412fbd98bd75363256d0b75d61bc4538b9c9c5a0a74
]]></artwork>
          <t>In Python, this can be expressed as:</t>
          <sourcecode type="python"><![CDATA[
import hashlib
h = hashlib.sha256()
for n in range(131):
    for end in range(0, n + 1):
        for start in range(end + 1):
            if valid_subtree(start, end):
                consistency_proof = get_consistency_proof(D, n, start, end)
                line = f'[{start}, {end}) {n}'
                for p in consistency_proof:
                    line += f' {p.hex()}'
                h.update(f'{line}\n'.encode())
assert h.hexdigest() == '10fa99b37bf9bf9ffa26b412fbd98bd75363256d0b75d61bc4538b9c9c5a0a74'
]]></sourcecode>
          <t>This test exercises constructing subtree consistency proofs. Other parties will check these proofs (e.g. <xref target="trusted-subtrees"/> and <xref target="TLOG-WITNESS"/>). This test can be used to exercise this logic as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>If not available, implement a Merkle Tree in testing logic to compute subtree hashes and subtree consistency proofs. This logic can be validated by the above test and <xref target="subtree-hash-vectors"/>.</t>
            </li>
            <li>
              <t>For each subtree consistency proof in the above test, check the proof and assert it succeeds.</t>
            </li>
            <li>
              <t>For each non-empty subtree consistency proof in the above test, truncate the proof by both one byte and a full hash. Assert that checking each proof fails.</t>
            </li>
            <li>
              <t>For each subtree consistency proof in the above test, extend the proof by both one byte and an arbitrary full hash. Assert that checking each proof fails.</t>
            </li>
            <li>
              <t>For each subtree consistency proof in the above test, flip a bit in the input subtree hash. Assert that checking each proof fails.</t>
            </li>
            <li>
              <t>For each subtree consistency proof in the above test with a non-empty subtree, flip a bit in the input tree hash. Assert that checking each proof fails.</t>
            </li>
          </ol>
        </section>
        <section anchor="efficient-covering-subtrees">
          <name>Efficient Covering Subtrees</name>
          <t>For each value of <tt>end</tt> from 0 to 130, and each value of <tt>start</tt> from 0 to <tt>end</tt>, add to the rolling hash the ASCII string <tt>[LEFT_START, LEFT_END) [RIGHT_START, RIGHT_END)</tt> followed by a newline (U+000A), where <tt>LEFT_START</tt>, <tt>LEFT_END</tt>, <tt>RIGHT_START</tt>, and <tt>RIGHT_END</tt> are the decimal representations of the start and end of the left and right subtrees, respectively, that efficiently cover (<xref target="arbitrary-intervals"/>) <tt>[start, end)</tt>.</t>
          <t>The final hash value is</t>
          <artwork><![CDATA[
7fd9c8b926e9d2b5cf831560e8ce295a5ef97ad5c5ede4ea0dea28a8c8fc8bb0
]]></artwork>
          <t>In Python, this can be expressed as:</t>
          <sourcecode type="python"><![CDATA[
import hashlib
h = hashlib.sha256()
for end in range(0, 131):
    for start in range(end + 1):
        left_start, left_end, right_start, right_end = get_covering_subtrees(start, end)
        h.update(f'[{left_start}, {left_end}) [{right_start}, {right_end})\n'.encode())
assert h.hexdigest() == '7fd9c8b926e9d2b5cf831560e8ce295a5ef97ad5c5ede4ea0dea28a8c8fc8bb0'
]]></sourcecode>
        </section>
      </section>
      <section anchor="large-subtree-test-vectors">
        <name>Large Subtree Test Vectors</name>
        <t><xref target="accumulated-subtree-test-vectors"/> exhaustively tests subtree algorithms for trees of size up to 130. An implementation may also encounter overflow conditions with very large trees. This is primarily a concern for a relying party, which must act on untrusted tree sizes.</t>
        <t>The largest possible Merkle Tree in this protocol is 2<sup>48</sup>-1. In particular, the MTCProof structure in <xref target="certificate-format"/> cannot express larger values. These sizes will fit comfortably in 64-bit integers, whether signed or unsigned. To exercise more general implementations, this section includes test vectors for trees bounded by 2<sup>48</sup>-1, 2<sup>63</sup>-1, and 2<sup>64</sup>-1.</t>
        <t>Implementations <bcp14>MAY</bcp14> skip tests above 2<sup>48</sup>-1 if they do not support such trees.</t>
        <section anchor="subtree-validity-large-vectors">
          <name>Subtree Validity</name>
          <t>The following are valid subtrees (<xref target="definition-of-a-subtree"/>):</t>
          <ul spacing="normal">
            <li>
              <t>start is 0 and end is 2<sup>47</sup> + 1</t>
            </li>
            <li>
              <t>start is 0 and end is 2<sup>48</sup> - 1</t>
            </li>
            <li>
              <t>start is 0 and end is 2<sup>62</sup> + 1</t>
            </li>
            <li>
              <t>start is 0 and end is 2<sup>63</sup> - 1</t>
            </li>
            <li>
              <t>start is 0 and end is 2<sup>63</sup> + 1</t>
            </li>
            <li>
              <t>start is 0 and end is 2<sup>64</sup> - 1</t>
            </li>
          </ul>
          <t>The following are not valid subtrees:</t>
          <ul spacing="normal">
            <li>
              <t>start is 2<sup>46</sup> and end is 2<sup>47</sup> + 1</t>
            </li>
            <li>
              <t>start is 2<sup>46</sup> and end is 2<sup>48</sup> - 1</t>
            </li>
            <li>
              <t>start is 2<sup>61</sup> and end is 2<sup>62</sup> + 1</t>
            </li>
            <li>
              <t>start is 2<sup>61</sup> and end is 2<sup>63</sup> - 1</t>
            </li>
            <li>
              <t>start is 2<sup>62</sup> and end is 2<sup>63</sup> + 1</t>
            </li>
            <li>
              <t>start is 2<sup>62</sup> and end is 2<sup>64</sup> - 1</t>
            </li>
          </ul>
        </section>
        <section anchor="subtree-inclusion-proof-large-vectors">
          <name>Subtree Inclusion Proofs</name>
          <t><xref target="LargeInclusionProofs"/> contains additional test vectors for subtree inclusion proofs (<xref target="subtree-inclusion-proofs"/>).</t>
        </section>
        <section anchor="subtree-consistency-proof-large-vectors">
          <name>Subtree Consistency Proofs</name>
          <t><xref target="LargeConsistencyProofs"/> contains additional test vectors for subtree consistency proofs (<xref target="subtree-consistency-proofs"/>).</t>
        </section>
        <section anchor="efficient-covering-subtrees-large-vectors">
          <name>Efficient Covering Subtrees</name>
          <t>This section contains sample inputs and outputs for the procedure in <xref target="selecting-two-subtrees"/>.</t>
          <t>Given range <tt>[0x0, 0x800000000000)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0x0, 0x400000000000)</tt></t>
            </li>
            <li>
              <t><tt>[0x400000000000, 0x800000000000)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0x500000000000, 0xd00000000000)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0x400000000000, 0x800000000000)</tt></t>
            </li>
            <li>
              <t><tt>[0x800000000000, 0xd00000000000)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0x7fffffffffff, 0x800000000001)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0x7fffffffffff, 0x800000000000)</tt></t>
            </li>
            <li>
              <t><tt>[0x800000000000, 0x800000000001)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0xfffffffffffe, 0xffffffffffff)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0xfffffffffffe, 0xffffffffffff)</tt></t>
            </li>
            <li>
              <t><tt>[0xffffffffffff, 0xffffffffffff)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0xffffffffffff, 0xffffffffffff)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0xffffffffffff, 0xffffffffffff)</tt></t>
            </li>
            <li>
              <t><tt>[0xffffffffffff, 0xffffffffffff)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0x0, 0x4000000000000000)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0x0, 0x2000000000000000)</tt></t>
            </li>
            <li>
              <t><tt>[0x2000000000000000, 0x4000000000000000)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0x2800000000000000, 0x6800000000000000)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0x2000000000000000, 0x4000000000000000)</tt></t>
            </li>
            <li>
              <t><tt>[0x4000000000000000, 0x6800000000000000)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0x3fffffffffffffff, 0x4000000000000001)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0x3fffffffffffffff, 0x4000000000000000)</tt></t>
            </li>
            <li>
              <t><tt>[0x4000000000000000, 0x4000000000000001)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0x7ffffffffffffffe, 0x7fffffffffffffff)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0x7ffffffffffffffe, 0x7fffffffffffffff)</tt></t>
            </li>
            <li>
              <t><tt>[0x7fffffffffffffff, 0x7fffffffffffffff)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0x7fffffffffffffff, 0x7fffffffffffffff)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0x7fffffffffffffff, 0x7fffffffffffffff)</tt></t>
            </li>
            <li>
              <t><tt>[0x7fffffffffffffff, 0x7fffffffffffffff)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0x0, 0x8000000000000000)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0x0, 0x4000000000000000)</tt></t>
            </li>
            <li>
              <t><tt>[0x4000000000000000, 0x8000000000000000)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0x5000000000000000, 0xd000000000000000)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0x4000000000000000, 0x8000000000000000)</tt></t>
            </li>
            <li>
              <t><tt>[0x8000000000000000, 0xd000000000000000)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0x7fffffffffffffff, 0x8000000000000001)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0x7fffffffffffffff, 0x8000000000000000)</tt></t>
            </li>
            <li>
              <t><tt>[0x8000000000000000, 0x8000000000000001)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0xfffffffffffffffe, 0xffffffffffffffff)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0xfffffffffffffffe, 0xffffffffffffffff)</tt></t>
            </li>
            <li>
              <t><tt>[0xffffffffffffffff, 0xffffffffffffffff)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0xffffffffffffffff, 0xffffffffffffffff)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0xffffffffffffffff, 0xffffffffffffffff)</tt></t>
            </li>
            <li>
              <t><tt>[0xffffffffffffffff, 0xffffffffffffffff)</tt></t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>This document stands on the shoulders of giants and builds upon decades of work in TLS authentication, X.509, and Certificate Transparency. The authors would like to thank all those who have contributed over the history of these protocols.</t>
      <t>The authors additionally thank Bob Beck, Corey Bonnell, Ryan Dickson, Aaron Gable, Nick Harper, Jacob Hoffman-Andrews, Russ Housley, Dennis Jackson, Ilari Liusvaara, Matthew McPherrin, Sanketh Menda, Matt Mueller, Mike Ounsworth, Chris Patton, Michael Richardson, Ryan Sleevi, Emily Stark, and Rob Stradling for many valuable discussions and insights which led to this document, as well as feedback and contributions to the document itself. We wish to thank Mia Celeste in particular, whose implementation of an earlier draft revealed several pitfalls.</t>
      <t>The idea to mint tree heads infrequently was originally described by Richard Barnes in <xref target="STH-Discipline"/>. The size optimization in Merkle Tree Certificates is an application of this idea to the certificate itself.</t>
      <t>The transparency log architecture and APIs are based on designs developed by the Go and Sigsum projects.</t>
    </section>
    <section numbered="false" anchor="change-log">
      <name>Change log</name>
      <ul empty="true">
        <li>
          <t><strong>RFC Editor's Note:</strong> Please remove this section prior to publication of a
final version of this document.</t>
        </li>
      </ul>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-00">
        <name>Since draft-davidben-tls-merkle-tree-certs-00</name>
        <ul spacing="normal">
          <li>
            <t>Simplify hashing by removing the internal padding to align with block size. #72</t>
          </li>
          <li>
            <t>Avoid the temptation of floating points. #66</t>
          </li>
          <li>
            <t>Require <tt>lifetime</tt> to be a multiple of <tt>batch_duration</tt>. #65</t>
          </li>
          <li>
            <t>Rename window to validity window. #21</t>
          </li>
          <li>
            <t>Split Assertion into Assertion and AbridgedAssertion. The latter is used in the Merkle Tree and HTTP interface. It replaces <tt>subject_info</tt> by a hash, to save space by not serving large post-quantum public keys. The original Assertion is used everywhere else, including BikeshedCertificate. #6</t>
          </li>
          <li>
            <t>Add proper context to every node in the Merkle Tree. #32</t>
          </li>
          <li>
            <t>Clarify we use a single <tt>CertificateEntry</tt>. #11</t>
          </li>
          <li>
            <t>Clarify we use POSIX time. #1</t>
          </li>
          <li>
            <t>Elaborate on CA public key and signature format. #27</t>
          </li>
          <li>
            <t>Miscellaneous changes.</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-01">
        <name>Since draft-davidben-tls-merkle-tree-certs-01</name>
        <ul spacing="normal">
          <li>
            <t>Minor editorial changes</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-02">
        <name>Since draft-davidben-tls-merkle-tree-certs-02</name>
        <ul spacing="normal">
          <li>
            <t>Replace the negotiation mechanism with TLS Trust Anchor Identifiers.</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-03">
        <name>Since draft-davidben-tls-merkle-tree-certs-03</name>
        <ul spacing="normal">
          <li>
            <t>Switch terminology from "subscriber" to "authenticating party".</t>
          </li>
          <li>
            <t>Use &lt;1..2^24-1&gt; encoding for all certificate types in the CertificateEntry TLS message</t>
          </li>
          <li>
            <t>Clarify discussion and roles in transparency ecosystem</t>
          </li>
          <li>
            <t>Update references</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-04">
        <name>Since draft-davidben-tls-merkle-tree-certs-04</name>
        <t>Substantially reworked the design. The old design was essentially the landmark checkpoint and CA-built logs ideas, but targeting only the optimized and slow issuance path, and with a more bespoke tree structure:</t>
        <t>In both draft-04 and draft-05, a CA looks like today's CAs except that they run some software to publish what they issue and sign tree heads to certify certificates in bulk.</t>
        <t>In draft-04, the CA software publishes certificates in a bunch of independent Merkle Trees. This is very easy to do as a collection of highly cacheable, immutable static files because each tree is constructed independently, and never appended to after being built. In draft-05, the certificates are published in a single Merkle Tree. The <xref target="TLOG-TILES"/> interface allows such trees to also use highly cacheable, immutable static files.</t>
        <t>In draft-04, there only are hourly tree heads. Clients are provisioned with tree heads ahead of time so we can make small, inclusion-proof-only certificates. In draft-05, the ecosystem must coordinate on defining "landmark" checkpoints. Clients are provisioned with subtrees describing landmark checkpoints ahead of time so we can make small, inclusion-proof-only certificates.</t>
        <t>In draft-04, each tree head is independent. In draft-05, each landmark checkpoint contains all the previous checkpoints.</t>
        <t>In draft-04, the independent tree heads were easily prunable. In draft-05, we define how to prune a Merkle Tree.</t>
        <t>In draft-04, there is no fast issuance mode. In draft-05, frequent, non-landmark checkpoints can be combined with inclusion proofs and witness signatures for fast issuance. This is essentially an STH and inclusion proof in CT.</t>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-05">
        <name>Since draft-davidben-tls-merkle-tree-certs-05</name>
        <ul spacing="normal">
          <li>
            <t>Add some discussion on malleability</t>
          </li>
          <li>
            <t>Discuss the monitoring impacts of the responsibility shift from CA with log quorum to CA+log with mirror quorum</t>
          </li>
          <li>
            <t>Sketch out a more concrete initial ACME extension</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-06">
        <name>Since draft-davidben-tls-merkle-tree-certs-06</name>
        <ul spacing="normal">
          <li>
            <t>Fix mistyped reference</t>
          </li>
          <li>
            <t>Removed now unnecessary placeholder text</t>
          </li>
          <li>
            <t>First draft at IANA registration and ASN.1 module</t>
          </li>
          <li>
            <t>Added a prose version of the procedure to select subtrees</t>
          </li>
          <li>
            <t>Rename 'landmarks checkpoint' to 'landmarks'</t>
          </li>
          <li>
            <t>Clarify and fix an off-by-one error in recommended landmark allocation scheme</t>
          </li>
          <li>
            <t>Add some diagrams to the Overview section</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-07">
        <name>Since draft-davidben-tls-merkle-tree-certs-07</name>
        <ul spacing="normal">
          <li>
            <t>Clarify landmark zero</t>
          </li>
          <li>
            <t>Clarify signature verification process</t>
          </li>
          <li>
            <t>Improve subtree consistency proof verification algorithm</t>
          </li>
          <li>
            <t>Add an appendix that explains the Merkle Tree proof procedures</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-08">
        <name>Since draft-davidben-tls-merkle-tree-certs-08</name>
        <ul spacing="normal">
          <li>
            <t>Improvements to malleability discussion</t>
          </li>
          <li>
            <t>Improvements to subtree definition</t>
          </li>
          <li>
            <t>Improvements to <tt>trust_anchors</tt> integration</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-09">
        <name>Since draft-davidben-tls-merkle-tree-certs-09</name>
        <ul spacing="normal">
          <li>
            <t>Editorial fixes</t>
          </li>
          <li>
            <t>Set a more accurate intended status</t>
          </li>
          <li>
            <t>Fixes to ASN.1 module</t>
          </li>
          <li>
            <t>Make log entry more friendly to single-pass verification</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-10">
        <name>Since draft-davidben-tls-merkle-tree-certs-10</name>
        <ul spacing="normal">
          <li>
            <t>Adopted by working group</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-plants-merkle-tree-certs-00">
        <name>Since draft-ietf-plants-merkle-tree-certs-00</name>
        <ul spacing="normal">
          <li>
            <t>Address editorial comments from WG adoption call</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-plants-merkle-tree-certs-01">
        <name>Since draft-ietf-plants-merkle-tree-certs-01</name>
        <ul spacing="normal">
          <li>
            <t>Renamed full certificate to standalone certificate, signatureless certificate to landmark certificate.</t>
          </li>
          <li>
            <t>Included subject public key algorithm in log entries</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-plants-merkle-tree-certs-02">
        <name>Since draft-ietf-plants-merkle-tree-certs-02</name>
        <ul spacing="normal">
          <li>
            <t>Renamed landmark certificate to landmark-relative certificate</t>
          </li>
          <li>
            <t>Relaxed restrictions on <tt>null_entry</tt></t>
          </li>
          <li>
            <t>Clarify that CRLs and OCSPs apply to MTCs unmodified</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-plants-merkle-tree-certs-03">
        <name>Since draft-ietf-plants-merkle-tree-certs-03</name>
        <ul spacing="normal">
          <li>
            <t>Use a tlog-compatible signature scheme for ease of deployment</t>
          </li>
          <li>
            <t>Define a CA certificate representation</t>
          </li>
          <li>
            <t>Remove the one-to-many relationship between MTC CAs and CA cosigners</t>
          </li>
          <li>
            <t>Discuss domain separation for signatures</t>
          </li>
          <li>
            <t>Recommend a maximum log entry size for tlog compatibility</t>
          </li>
          <li>
            <t>Prescribe landmark OID allocation</t>
          </li>
          <li>
            <t>Update TLS integration now that trust anchor IDs extension has been moved to the base draft</t>
          </li>
          <li>
            <t>A single CA now operates a series of issuance logs, instead of a one-to-one correspondence</t>
          </li>
          <li>
            <t>Group components of a CA into a CA-specific section that enumerates the parts of a CA</t>
          </li>
          <li>
            <t>Canonicalize the order of cosignatures in MTCProofs</t>
          </li>
          <li>
            <t>Remove sketch of tlog subtree signer API in favor of https://github.com/C2SP/C2SP/pull/245 in <xref target="TLOG-WITNESS"/></t>
          </li>
          <li>
            <t>Add an extensions block to log entries</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-plants-merkle-tree-certs-04">
        <name>Since draft-ietf-plants-merkle-tree-certs-04</name>
        <ul spacing="normal">
          <li>
            <t>Fix some mistakes in the single-pass signature verification algorithm</t>
          </li>
          <li>
            <t>Editorial fixes</t>
          </li>
          <li>
            <t>Discuss the implications of subordinate CAs in Security Considerations</t>
          </li>
          <li>
            <t>Added subtree test vector appendix</t>
          </li>
          <li>
            <t>Define a CA's current issuance log and rules around that</t>
          </li>
          <li>
            <t>Switch the ACME construction to a new link relation and change the HTTP status code</t>
          </li>
          <li>
            <t>Add a maxSerial field to the CA format</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-plants-merkle-tree-certs-05">
        <name>Since draft-ietf-plants-merkle-tree-certs-05</name>
        <ul spacing="normal">
          <li>
            <t>Use 24-bit length prefix for MTCProof subtree signatures.</t>
          </li>
          <li>
            <t>Renamed MerkleTreeCertEntry, etc., structures to MTCLogEntry to be consistent with MTCProof, shorter, and help disambiguate the many English meanings of "entry".</t>
          </li>
          <li>
            <t>Fixed one of the accumulated test vectors to better reflect one of the edge cases in subtree covering.</t>
          </li>
          <li>
            <t>Make empty subtrees valid, so the subtree covering function always returns two subtrees.</t>
          </li>
          <li>
            <t>Add an informative reference to the MTC-TLOG profile (c2sp.org/mtc-tlog) and mention it where tile-based logs are discussed.</t>
          </li>
          <li>
            <t>Clarify that a landmark consists of both a number and a tree size, and that a landmark's subtrees share its landmark number.</t>
          </li>
          <li>
            <t>Give an exact procedure for selecting the landmark and covering subtree when constructing a landmark-relative certificate.</t>
          </li>
          <li>
            <t>Prune the pruning discussion. It's really a property of the log serving protocol and is better described in <xref target="MTC-TLOG"/> and <xref target="TLOG-TILES"/>.</t>
          </li>
          <li>
            <t>Fix the maximum log index to account for also <tt>end</tt> being 48-bit.</t>
          </li>
          <li>
            <t>Discuss a potential overflow in the valid subtree definition.</t>
          </li>
          <li>
            <t>Describe how a party holding a standalone certificate can construct the corresponding landmark-relative certificate itself.</t>
          </li>
          <li>
            <t>Added test vectors for subtree algorithms in larger trees.</t>
          </li>
          <li>
            <t>Align the experimental OID with the final one in the X.509 name construction in using RELATIVE-OID directly.</t>
          </li>
          <li>
            <t>Lifted the tree hash into the MTC CA extension OID, so it can capture new tree constructions more generally.</t>
          </li>
          <li>
            <t>Update for draft-ietf-tls-trust-anchor-ids-05, and spell out certificate configuration explicitly.</t>
          </li>
          <li>
            <t>Define active landmarks around landmark expiry and put the expiry time in the landmark format.</t>
          </li>
          <li>
            <t>Fix an interaction between landmark-relative certs and TLS <tt>certificate_authorities</tt>.</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-plants-merkle-tree-certs-06">
        <name>Since draft-ietf-plants-merkle-tree-certs-06</name>
        <ul spacing="normal">
          <li>
            <t>OIDs have been allocated.</t>
          </li>
          <li>
            <t>Set up registries for extensible parameters.</t>
          </li>
          <li>
            <t>Allow GREASE cosignatures in MTCProof.</t>
          </li>
          <li>
            <t>Use versioned URLs for (non-normative) C2SP references.</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-plants-merkle-tree-certs-07">
        <name>Since draft-ietf-plants-merkle-tree-certs-07</name>
        <ul spacing="normal">
          <li>
            <t>Moved <tt>id-rdna-trustAnchorID</tt> to the trust anchor ID draft.</t>
          </li>
          <li>
            <t>No changes were made to the wire format. draft-07 and draft-08 are compatible.</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+y961obSbYo+F9Pkdv9zS7AkkAYMKarajfGuMw0Nj6Aq7u3
d20rJSWQbSlTnZkC07jqm9/zd15gnmV+z1PMk8y6RcSKyEyBXdW9zznfcXfZ
IGXGZcWKdb/0er1OlVbTZC96nRQfp0l0XiRJdJAUVXqRjuMqKTuTfJzFM3hi
UsQXVS9NqovefBpnVdmb0Tu9Ct7pjeGdsrex2ykXo1lalmmeVbdzeO3o8Pxl
B4e6zIvbvaisJp1sMRslxV5nAp/udcZ5ViZZuSj3oqpYJJ3rvehJJy6SeC96
dJaMF0Va3T7q3OTFx8siX8zh07d/POpGx/ll2Y32swmv+Sy9zOJqUSTlo851
ki1g4Ch66AtRxGt99CeYJc0uox/wRfx8FqdT+Jw3/AfcfD8vLvGbuBhfwTdX
VTUv99bX8UH8KL1O+uaxdfxgfVTkN2WyzkPgm5dpdbUYwbsaljeX6zVw4sNT
PIRKTeS/1OfB+mlef339ASfWv6pm00edTryornI4kqgHc0ZRmsFpPHrRj54n
2V/jWZo9oo8ZER69iK/TSfAVbDfO0r/HFRw8PPJDnl8COh0fH/DXCQNygm+O
kuwPl/R9f5zPOrU5T755XqRJMGVynWf+N8GM+/M5THiUjfvejHF5O5slVZGO
/xDjEw1TPu8f9qM/AZSTYhTH/rzP47L2VTDxwTRfTC7g8BNv4lFc/mFsv2qY
9rgf/RhPk6yKvRmPFx8T/4uHzTe95neWT/qSJi3zYuLP+jKdpvN5HnwZHmqS
z25Lb1ZErj9c8MuAhJ1OlhczeP6a7t+f+zvPNvboeSEzj46yC34CjrNKxldZ
Ps0vb6NetH/2pj+IkmycT/AGFotpAgs+mydjJkX4Qn4RwYGk4+jQPHaKj0Ur
zw9PV7vRQZzlGTw7rX1/AN9HMVz9F2lZweeLtLxKJrXHXsBjvL0qLi4TuHbm
1t3c3PTTatFPs2q9SMbr573Tw4Me7Y+eJ1IWvUxGxSIubqPNjc0BfW7vVSTw
BIJ4/q53Th+UCWBzmQJEzANHZyfrR4cHe9Hu7uZ2b7BH43RSAzOG6sGr05PX
h72Dcw+yB1dFPvNoN9C5OCvngAjZ+DZ6m0/T8W3j5vgyjmkARVDUUHqk9XH1
YU6DEfFQ24fVbvY2nvQGT2t77/HehSzwWgE1o/23b49rW6Gr/E3Zvpd5+17K
BWBiUfXtZV9Pst6iXH91vrmxvbm74S93gMvd2G5bLi2kY0B+9O61D/F8Ns8z
uHPRuzmOWDQuiMCaLmZ9hnKZL4oxL8x8s14W4/XHyEGy9bEZs3Q/fljw8Oun
h/svXh/2Z5MGmG88advEgUyD+3h5dHr48uTP3jZepkVykX+KTpNZDoA+Syq8
IWXzNUg/pv1Z/vd0Oo2Jw8nL6/yy965e325vc6Ntfa95OFzecVKVcCeL23nl
LRE+B3SQb6KzKq6alzeF9xN+ilZX4pPr/mp2ehvPeoPdttV4U9HRW3J6Gk/i
wscA+11EX7ZibONqC3yl75Pr9bEbAdh0MMJDN+HW1SWOiPs4u4JfJy/jcZUX
ZYAAGRHBkp6ITs/2owt+DJhGVF0tISpAu5tPYpQXcX+RjvpZTj/3Ps2mi3R9
lFYlCB/xbP0KqPE0WR8MNrc31p9sbMAPu+uvY+S05QeYs0zLDx+A7H14lwHZ
K0oQAj/kFx+eJzBP1p9PLmo4BvSy6Q4wg3uVZECWX8ZTwE9gcv/v/3mZaIC5
SYjH0CQItD8mt6fJokx8HmakUgOetyBEAjgSfBfeiPgVoA9ZlXyqemcJgCse
kXQC2wPYAq9BZgTvpgURGWFwZTPzSeYF8J1+Go8LQuvNjcGz9e3BMw8E8mvT
5oECANvL51dJEb2NqyrPvK/Pr/IZiDln8NRsjl8itpy/6gGvHKewtszfPnwV
ua+if40sOGDDZTpJCt5L41baxeRZeblOCL/+77OtN3+7PR0/PX5RnlQ/bu8c
jq+eH50/K7bG/l0ePG2lfLyz03QMOA2ialxkoMrgbd5//rI32H7i7eh5PJ3m
VQQfR//f//F/ASCAgfSOYYkTXxVqJO/xCLAUyLsczDagNP5/RGPiVL2Sxpvi
eD11vYUwNV3f/fXnpDQU0Usc29804PkA/m93c3awsTvwEVQ2RN9cP9lDvCvy
yQIw9GwMcg8IO4iqp/DTGC8+CH3pBA+QJKS4ihmDo7cgn+STFqQMNr65vb6x
pTZejmnuXmqmhk946l5+0Stk6t61TN2DqXuwxRi+gql7c57660AEotPGloDo
7OD8TV7tX1SJT7pf5TdRlUcTuBjFoqyiGIaMbkD2yRfwS3YbqZOKkqIAatgI
hkk8KdI4Q3lpBNRwfZ6XwHLKcdXLAAoxzquR9jXierTTpVW24i0rWPs0MklJ
C4ARgOs0uU6BSCUTbytvi/QaVwlbtU92I/vsA0kKHOD29k6dshIsl6z1OMli
IK8pqvSXIgM9kPD4yhVu9PX5Qe/8+OQHb39tponoT3Bc0Xk6TSY+Vzpu40rj
zXJO251V414Fx/WH643+oK+FwhNgfLATYrJtEvzB5tlbXC2utHd+dHx45q33
q1aEq+lV8Gb5h2tY0a9b05+Ozt8cngWrCtaD0AOiWAL65FU+zqcPWN8Nv4Ir
/JVQe310enpyunyBr9P2a+eva0ZP/gaHeXBydvTDm/3zd6eHy9d2kJfWfvSA
BY7d478OePvj8WK2QKOQTwPU59E5XKnox4QkuGYpHjT8su+09vXYvb3esLBn
RK62WklAaDwgUR7nBNlzukBTIOBYfuFLnfRAZJ+I6JH71y7qKYrK95nP1vFH
VqsmoJ6sT3GoD6mZ8cOcFtWvPlVqz/uLS2QHy86CLJpmiyTzAAkDxGjdpHrm
n7bNsZvzV2603wf9odfrRfEIeCUoBp3O+VVaRpMckAa130lSjot0BARZU2ot
6XSBvWbJTYRmDJQ8/tzf3njmPRHdXIGsBgJ1lVwWyMzmixFIxahgXKKIAi+h
pK1e6Rrpu6xuWZ5p01L6IOEmbugJLhhuY0RCCExt5wAV4CqJJ2ZgFNRx3FEO
bIaEuKRgMc5fOkpNBPQImX/vbws4qsUssjc+iqeXOQjIVzMABOxzimsGlTeK
QQ4GLg1To64vOkJppGk4tTlOAzOAoJJ8YsuVgR0cLwguY5K0aQXtu287lSie
oLCQZyCxgew3maUo+UT5nD+DDfw9od9mYgIEqMTwyHWeTkq3PRhnWuWAvcDl
4aArPiiABMIuz3Bo0HBuce2wj8W8V+Uo6SUAf/4UFkq7xF3kU9AfvFUK8s3S
yQRtMb+zwiyuqNM5AsrBqIKa11F2UcQMGFrZyts/HpWrvG6UaFsV2ZWD89Xo
7u7fTl8e7Dzb2fz5Z8RVwNoADYvkb4u0SBDtuwgrvDTwM6lvspPbaIb3ak46
YUVuhiQ4nXQG1z+ezWF9ILPB+uJpnl2i6uTvPAKBjkxdCJ0cRMnMLCCqbnK4
o9EsL0juK6O5DzbYizGtwV7u7qzN8Oefu1ECiIeHw3duHBcFgd8dKd0YAJc+
4wKvkEUZPEqgF2ViLoueG5Qu+BRU/WR6Acd3sCgKBIW7EKgKAAxg6oyOBeTA
CyAP8M+TzWh0i7iJ+/mYsEqys6U+dKPwce1uPNnETY1AbvfuX5EA0RzTWfHy
ZwvYLV3Uoo9aA9wpOIQpUJLXx70XZ/u9rS0c8+XR27PNja3vXpwc9Qcb/Z2N
zd31N0dn5338og/fAEBh0WU06D4Z6OUKrphVb3a3NjeaFt438+1sm4GebS8Z
6En3Cdz4xoEOrwEnUGuB05sAXoyr6W2PFJpkQhSvmCWTFM9k5e4O9HQ6umf9
bTz9fzvqvSAdHCThkl8CLWwMdK4H9/vnn1e7hGWEXbiMOJom8YV30IrETSbR
0+7mjtkwjK/vBtruDXWl5TqI49DPus82n8qb+uud7b4wG+DaRRKXsCs7jke9
UqCfYzhnuDFok0KUnAH6XeMtei20KMavvimJNgH9GsdAFGk2xN8qr5DkAUOO
LxMhfcxz4CUANF4Z+CmCHRW3SH4rwPGSeUOsTqwrsHKguSjyGVvR9vussjAO
qpcYwO62dZmxySISf+4bZB2XoPwCbPYVDLp4f5DeRWRGsdd0CecCuiD2ECYS
1pyAFwqXQKwYaCdTCpw/FVoA0IfRiAoQiHhZ5pj6oYxgzQBluzq3AtpfuXqv
rMDU3LJzx7/pLPWDaVkCLRgncnyg4KOUxAdHWILABXS6ra7wfWB/+AaCH48C
P7pOkxt6DIiZIFYOYC5hEnz8CiBOr0yE6cGigNqwwAHTOSRIEe1moxR5Aa9T
KRCMIjkyUMsMb67yCJaWXiCyFXizIxQH+C4Rp5xb5Gf1x5xEWafecJjCoIVY
ZJEVgyOSDpnd4ceT9DqdLOAuELZ1WdJIqwUigoauOWIWYpKSRaZ8Os1vAHJ7
nc4aKUoGZyZ5lOWVvnUBlVPcAfAeNnEobwod964LDQDQvxKxQUaXa+ntnAUu
YscFyVpZnvVgzAXQxREoLsCwgTaqDxGsQP36vIPsspd8mqdoGDdbQa41QvHl
Ov8IH9PhhbIMLGK0mH6MVsoEGZU824OLeZkgbcUzQuAhuBwG41ZmeZYCFSKE
9KQZussEvtEtzIeYRscnAkKXIEA4kF4kILRpAtZFPM+QQOj7YR6E00nsvV2L
yFiGRK3I4b6WuJJJMo2RwNTFHQOQfESQj1F+zWEbj0Bhmczi4iOAdUquy0fe
3BeCsCVokI64CVhkDP8uf4FsigNnCZ4NYfWthxBwfRczhraWRsfTFAkVDYP3
ukRvKqANWQhTkC5gOFxn6hzYAK27O+RHSCaAgl6m1wkvUz4zJ1DeAkOe9QER
ysUI1TVAAaU2xR5NnBewKQQYCgcTPOyKYGLHMGSth5fdG8jQYoszfXTuMHO4
u9OkH15DZEPMJMTtyVmq4aIrNpFaVYPewN+ApAdr9unC71DjvWb85Pv5IrlI
s5TdAh0kjnjryQwRPXr97uz8UZf/jd6c0M+nh//t3dHp4Qv8+ezV/vGx/aEj
T5y9Onl3/ML95N48OHn9+vDNC34ZPo28jzqPXu//5RFz6Ucnb8+PTt7sHz9i
KVYzrJgv3IgVx2KOFw74etkx4CE18fnB2//n/x6g2PgvIIpuDgbPiJHiL7uD
pygp3sCF4dlIFeJf4ZxuO6AVJXFBQjVwznE8T0ECIfxEln2TRUCu6UK+R8j8
tBd9OxrPB1vfywe4Ye9DAzPvQ4JZ/ZPaywzEho8aprHQ9D4PIO2vd/8v3u8G
7urDb/+NvEm9we6/fd8JpQdP1CORGTH9/PjMqFlMAoDkXC5QfJsguvEJObH3
Cd5GPJlnu1s7KOAAoG8SVMOFYOQyTOPbm/1Bf2BHGKCK2I+OKtAhgBAbkgOr
LYBFYTBZ2bKIfrAMI72PUmA0wHxjQI+t3d4oFREH3RadX375BWV0vdnOAr7e
jfDvrd33Oz/9Hh/qdIbvHg+FCzPtuMgXBWDSpxhIfDoDyokeMRCVkwJXCHsm
+vMuS8c5qp/w1zxPUbtl5Kd4HN7Eu/OXvV1B7ic7m88QAMONT/50qDHcOxsK
+tF1PF1Y7XGjt7m9HRF37DOBWDMjAFdW215jQR7ZdZZcEl8xcEIWgWLaCPhY
j3Vl/SZIAkVaVUZfwln3zw6OjkBvusTXhhtD+LDIF5dX0fDZMFp593hj48mG
/Yx+fQaM+9+TIse5zHCCPsgngRzSaDgYX/osF7lOtlv6qyCdipzv8AbsfPi+
rIAQA7vOJqtDFF6ABkRD+jD69jv8GD41kMRpr+LpRQ8kw4zp1DXCnKUgliAI
NLA7OKcS9V/ib27AT9G3NCjM/UNKIkIzbIfZsIuywfD47PlKtjoE4F7guEYB
AOGh6pHUjFwAriwiMBwVvAcaF8i9GBXlHwhIeH9bpBy1hgyKxG/WOjC4LEND
EJJLHAO/IcGUsWyT5JTh86PzD386enH+qmFFJeDOFK2sHGxKdjw8ZhQLWHGx
q8EJ+nq0jVWa8O9w0DzR25O3Byfv3pw3zOOGL5OKp0izpdu2Sz84PDpetvI5
XCoaeVNUnhLUvgQjgdD0k/wNhXR4B1cPdyaP1qbJBRzCVXpRrS05R4IyqoXw
HOuWTGz48jQtGR/PgTgv5mSdyFm3bD4/nIBlys1+xCjVtBB4MB7SDRmOAKOH
cfTtt9FIgwK/dxtK6EEeWXZbpJdX/9DtTgn+Zrtd9BWP44JuayvOtyP1xTTP
C7kSPi5/EZi+/74OJgWJAE48MhLlh43+r/7gzBYb4OpIiYWogVNE8jtsWyz2
qLyW85xDjEYMD/o+Y+OJtwT8YZHh10Q1b9IyEZWAFegZCVG0wIJvsVBfGBgf
jvbfvBA9OS9QEv1ddJ4UIO1zlCkOf5pPk7LmwoCjXZRlqMVGBT4MDHi/wc67
19kjPZ+Nvqx+uMeSUgyghsXNxc0KUkOGokuXBc7UcI8Jmv4zi13aYByY939k
swCccBkTv3TfkXGAHDmk1x7sr5pVkvY7NsYTMnP4tiA57iaLNpwLqYQAV9R9
KFYMtSMK3uBJRVeM8gZrsLGKdDqnSksO4ZejyWPWugYj6TGPB2jB99XtEmAW
yThJr78GnK9ZA8f1vVXWmJu4YjtcSWqlBzy0ECH7BbKNSBzDU/nCwhSxyBcD
d/ubZIJ1smSncyRqHU6Bc++z4m5MVkYVRMNSV/P4sXf6GPIoNm+xTI0EOdH8
uI9WKb4fiai4joGlagFsOMFLbgxHxraCysrSSQAfybaVFLwLD/Pwi9KZ1dDi
pGbtKvNai9WLjWTONRaPMGAHwSLmmZpVtCIZCvW5Eo19yDSBJJSsXYt0x2No
ioCxQUYRpm9wzryMp85EYRAfSbmn9pMBTgy18PrFoqBVG4WADFZCcEiyniQA
2am/lsQuBQF6lYw/klzOIOWVzU1MPNNZdGWgTR7PRpl+0HxLB408AcZCsxrd
vX3f2jelA/VsRgIAMUXZsH1BDDZxoqlE6IBsTfAxmcBkZ2zuEEQgwabwDAcI
MjQ15YXejMx+YbA+Fuk2hXuXoZ6C4hbuqcziOSjLlWerl0mtoS65uEALGTJk
0axZt7Eu8sqpBHDRpzwMuhY9E6nB5r8tTKynGCCZD6pJECfM9WKbPXEvc43R
QIlfje2pojwnliG6Pi5c4OtmjpvH9peBe8b7nPGdcm/YG0wWM5ncd2ckKb0j
OIByjdAIvvhdPteluzwW+yCOf5IlrNfpPdKKyRbcJUsofYWbHKPfkckB3+Ec
Tno6pviVyJgdzUxMrLUdTyS8wGKrVmReVSsjDxFIUStAAsp0BItIZvPqdtXN
AneYBA0fYVEdGyXVTSJSmFld2cegYW1atLsxAk0MOEBrrxlSQ/f4WQVPoAvZ
+4bPLWTEwjMaHAAoI9OV4h2xLGYopuetoLNlal47zcZFCrURc63vhLp/VXHt
TNm/En5KJmK07TJKwAX/mMllZ6VSyR5d9GwxBvtefD4+vV3Y3AvjWS3Zmb8U
ysIQF6URPUzkRpdE6dfnB17whtHxyaD1/OzAN3nPY+IRxrVr9jKXiM+Pye03
pXVWWU5JJtgTYUYUItEW99DluNeLtAB90xDu0qP2o1s7QVoRN80iyvGsjLJe
LqaVL4gk0QpfOvXRKi7eSk/i8ei3ewPT7BrFAMN7UbrcMwSndaXGkdK4UmSG
ZM9mIkXimbjY8CsHvtqJkkwyG02Nt8ftm26JUN2KoozcelKXP7H/TSlM5Zdf
fonj8vqy87jXi3zBfd8K7r1e7zFGYeEzUaB7vCVpuIePdD5HS/98tn+1P4Jj
bPY5BJyDcoDMAjLgn29xkh7/FUWDfnQqX2royBhuwnvWYeW9+joePMaSvdCf
H3+DMdoeeOAYTwCLJkSItID7FevAA3hPSE94G/305WOsR/9R+7Lnzvb7KNru
Ry+AVk7zOIgQMGOsw3/1Qb5oHev0S9Mg4RhrUVSNSlxHMAYt2FyO9jG+o//V
eImsY03+Z+cwfl09BkEcQO0xvujh+PHeOOV/aoKH2UfLH3P3lz3SUQOuy7z/
0fE/48UQxLdILMYIv5AKund+rP3Niq4OdSayJYHZ3UDqKyNFtkSJLqOGpf9G
VywyYGq4Ho9xJV9yPeyBuXE+4wAPG2PJ9XjoGG3X41u4oY+FBO/0DVydHo/4
/ZDr8dB12OvRPMZ9aPm4t/SJxzANLaTf7/9tgZk7KF5bDIJPaSX3zQMTobvr
bi/63UV62bMecet4p/jr7x6BqpzGl0U8M0I8il+WIFMiWpWQp7wrWjgKgMk0
v3n0c6fTKptQMCTLeRi6SObCEl3zjYshn/o8HZMY4qQZEAYGLMk22ruEEZd+
1E03SvogNZEIvn/w+tAEQW5vb/8MK960oUdGJy/ZQgu0MCfDnd28jC8DkgJM
A46vUEvHMJV+9FKEHQSP2DDJyjfBbMlLE7h0cN4bUWgeBp/Brp7YRVhLUyy5
7qTlzedJNumRJXfNszmtYSROEN2w2o/eZdP0I0YccHAfLaVMJIILRzGmKRuf
Nploa9keButHgCvol/3uUQxHG5E4I6uEx3GFvvR9nF+SpQSXhBkcMjb5jUej
IrlOSVl4FDCRR0bkE7wjqbdm5VKGlZrQSAZyPnHUVyh3N9r0QspwtWtOr14z
tjo/EGRswm4Dg1Bf1HlUZJxu7kRq0uxE0BYkX6MouTVjzOAd6tuxoqNLYBs9
a4Tu2bvNMVURiUYO8s6vzztbMxo1IYMLl5Eg7po5MgxoTzCSLBuzQjWNUVh1
m4QR42KUVkVc3PaMgq7CsVyQkQsryiVPoCZOSJiaBaZRQ5shqUIFG6HpVOkt
d9ZKecGQSA7toRDIHBDAAHatHx1YFmzuvdV4cE/qxgWhg2K+VCdh7LUYBYle
Hlg3c0bWq0o/ytHoyk7NceCWqFY5QtjZtt0ZKOYEkSQj37q+AH7Ekadq4HCX
5IaqlrkrQv3NBOsyHVijNQSq9ihRCiynTK6xgTSIkjTaX/B+YDzh9w9qIZ6C
CxxHZU4s9xCg0wEmv0+aY7vSPjPCVT7C00oc9D16SnkjWbkoEnefDU2eGAP7
9BYt5h7A6gGq8B4bU2KiPWWjxQnwcF+7PjhyV9JrKbBc0t4lPl1itbv1RJCC
Dg2Y6aIw8bLmJQc3uMzyoUdjxBOHLJmiwIkAj8fJvGpNhDEJQv5ZK62+yTBT
VM4KrU1m9cDe+tJpaH3q0Y0LzdSsi4PJrzFpHnODYCvm6PvRn8huZALe8RIU
YdYVMReFEd+UXgy3Mcg/kPOturhC6x5aGtabF0FUr4kZpqBPuzAjVWD2IP7C
YeKAZkstn2s1mo3Uq9tiZSSkmOQwLi6XYkMtvVYH1mUsmLA18taP3V9q45So
eHtUsQTRUvR9xOnsxIQxMJeNvfQcwaw9KeoLLEYP0KwikeClYE10cBVnWTKN
7KvrjUqMfbVxeNYb1kl3AaFqH27eWFviQQV83KtrBY/Nq49bVZa2WT9H9yjR
j80M9Vl7ge7cPGvzPlEMex1/TBpM8vo1kG9eWMs+KTNR5BkzWmdzIJPXWv60
2LciAUu7ybAF1PebNZoBg681X9Klr/1Is4UmnnA2xlN7MU7faiRv8BNYfwCa
tNy6jK/sC/b5uYFkP/jlFrTEZQdsswmaDwRLxiWhJhYqLWCp72wFFoHpsuhI
FdCsysyhrcsz3RBM/xFguUfRb72uaNFKphghoOk8cM7Tt55twOInPrbcQLCU
33heG0PBLxvtBg9gFHawwPUX2BKaF7/UoMBFW7AKngQ/OEeqUQJJUpxhVhx6
aDJPRcIYiITxgFek+LBhudbXWbrvrJxvtVHeJoZsRaIOwPQUukUeXuMWbcoC
vtflCYT4BAch8csugXl3o8zWFX1w2QGzd9weC3Lmf6zKUPdskvHkKBMP8Jgq
nmaTboNXG6EbZKfUndrdBlGezhqP9hJ1osr3i+oE51JOOx+PF0UpIgzjlVFa
9RJLqnJVqXzH2BW2ctFvpN++WBTG9tH0kNM8McSfLVwmaF/CCv1Vx9MiiSe3
kRT/K73DduJ5a2wZBoqYYOB78QRQz8QmUnynDUyLQwJvX2g18s3iWxZ7SyZl
5lIYv/vyi0ApDF4+ipfkAy9lyU08peiy39mwGCODSwCTTmDQCtLEpuzUEiH8
NAikufwwCs3WgCOR+mpIspU4X72ER3qPYBp3Oq0kLEgFUWCmpmguFr9A8r3E
7KaIYwLu7tySscZU3JPJiFxeELmK7QLI4EAk0kn8HEeFFCBmeoVYzjnuYipC
VdmkKLtVU30LuzP//nf9PBB5qmef6nFxDkRtxkLUDONsWdyQjYIwJ9qVanIL
OsW0CNeADyh1j2IeeGPCEDxIwu3Lg2A4Srlp2WDJTMJPCw+S8wBsb3JSyh0o
abuU5GstRC5yC5c7xTQ4JmvuJdLjGuK6CG5ZY0hXsDkOzHDKXxBrVTafl3rO
nlgfi4jhRe1yFrGHrUF+XH3FY8RxlzTjgNBio1TWXUnMs2xYDOLK0gZjuJI+
5h70sJJ075qrztgEQEpGb3vEmAfx40g+tqmbrqyJhlmliAtHYLvkPwbMmeF1
knECHxcTgsU0LU3WCAw1X1SAucMXH7Lou+hu8n7jJ7hM7wfwd7/fxx+z3uCn
n4fd5Vla9u6HBO46jWufvQKBOBq+Pn+1ArOuDsky5hE02p1+o5WQqfBFHpBT
e/aA2P60ivkm9KvEvmMKjpTYkMh8G2FPmdTRcAOzdXQeEP6TDTGXRAZCQ0g0
w1icOdfDcUkm+HiP314dcn6VSbHFwHzmA2QolBvWsGKPNA/1d0OiABRNmqCh
GW8fnmSXQv0XCufjKZvK63dTgxSNqczIl1xTlP4TlVCLWdpToJNSuYUKo7Bk
XlIoJ1aI4BBXrk4pdOAi/QQX5CadVFcW9t02yGGwMVBnZNrJpzHakOTgMAYo
p4Rsko4QRBcgxgdVRkB0UWeF2UXq8OGTzW9h29/vPPkWixh//3jQvg738BY/
zCKGy1tgo5jMHB08fhxsP5I0Z6zBKkqExQQ2OY0fP+6M8hwIdvmBfAofBNIr
mHK4s/WhiiRVzf6OOWvRHQjCsNEVRtXv3YcR5qwvCqD5QM6S38Mn6IZzgyHP
YMSWff7ejITffB/Zee8GP2Oy0M6T1WBgnvK776KN30fR+jrmhHwYJ+mUFTMO
x7ZHI/PLq7Lcf8UfJnt75k2aexUWNIC5aODOz5xniQeL7Gz4CRNn3m90o0+r
cgUJWhZzVzbqF9PVnFhl1j18/6l9AIcEkpc2WDU5kri8NZtk7kSroQLjkNFf
ZBssSCuhtpyv6NGsKqjrxWmGZuAGooDUrSED0U9jpDxZWzFFhepjtDVJV5N0
7EoMCWqGg7Lo5bNVrIKCNtuqdIoRJw9Gi2x8hemkE7walPLCF1Ao54zJZ9eD
nL9sIqG85Y29GW5Wavbe+zyyDtoNJTjxceK7nLUypr0AXzyU6+kEc1b6DS+W
6wsUDaPWSz01HPH7rW60K4savt/tRoMnq8M9ZS6OlNGFbCifI36HbYv+dxJ+
Ev1Hx9hOHxuzEry0s/o5+vx+p7u7+rn2vQsvW6e3H0fqv87nLXhzG/7bgf+e
fq59L7adup22Yy1H8Ee2x9ame95we7GPu2cfq08/87Cbq8ZGueRZBx877mPz
lIq6+QzQ2u0ONghcg40uDP65/VkVmGd/0BDSf3U+78KYz+C/wQb+NcC/Nluf
1gawAJ2M5ev8JrcMwmAVGq+eI86KvIrGJrYCWbyribbiCYfz6YpVysjOenK5
/khXHF73ozf5hIuliKGIBINm1OYSXqALG/lhki8oIhefuomvbyMsIEDexHKO
4uB1Qq5NfR+8P18QYKdQUf4gxReM9NDkV4zvI673xwb2NXpR1JS/BH/sLJ/t
qndX67tpv2ZfP2O4mbpnqfWayhSPv5M/5nc3iXrrM+1qy91iS+Xs78uu+RfN
FVKB2u9tZMKSS5lI/WtmeezmQzKy0d0kKrLZ3aJ/PSIcLSMzXzqXR8CX/ttM
puS/74L/fjH/6b86n4l6wX+b8N8T+M/nD9G9ZO6LZmsigw2UyDkDmgkbksUj
k7QVl6bWEiv9Jh/NWYBI0HTVXdigSBXfPGPYvQSyt6kM/S1Ed+uraWhcsjqD
gQRYIQul2YyGQjnGvu5tgy0omMZCpQDl8cxN8E3JyehRMsEyLBQcoMwknIqJ
WiHVP3W6Icnl03juR/8sMdKsLDfNrP5jCf/Wf3eEv3WWhxP+rS8j/O37+hLC
/5XU+CtJ/6+a7YuJ/9dRZCsifg0TgJ82u3CSv3Lmr2EJTeL/A+m0SLhfxRrg
rydfyx/aZeVGanwPm9hCNtFokHLVJawYDQRVmahYHxQ9MKyJXto0alaRfcdD
mYd1CcUUbnOcnfdAx5lqX0xDKUh2PwzRpPdpGFoYAr03Vdyp5v2IWwphoaX2
SWirtQWPZjQqT28NGVb/llWjfZgg4lsjXdp53VVhixh4mcbMxzhuEP0kji2R
S9UxJA0EjJ3oNhtKMYNfQIZP1QEq791N3tPvP/28SpaIBcJqxg6oih1ScX3S
uikFk0DxGzJXLztVJ6MYrEVLux0PJqOoADJ9TfPLzZVsdVWCRLoYMqIrLpFV
bCjfEgLXLBoNmNwUaOnAM9ighVk0M2KLt2OJ5zEQHAwYfHISu3uDDToEEnzM
M5v8jNZPA/krcMhRcTPz9ga+jQiJUp+J/JR8CKwrlYxjrGKNn1A+acrFyFQy
snFQYxAtmauoHFhdSPkf0Q5ieOdD7CCNz96jYBChFtZ1vx3Ef7qJtgcnbal6
FppDQkRF+k5YjofHFzRuQ3VXTq3VLzwMOlEAfjYQClvpFk2X8M0H/BlpjNY4
wrJxnjk4uG3CJdYS3kUyWWOhezZfSNYAMK6EbommOnudzrf/0utFRxcRGVaZ
PJngowllUGHcCBWToTr/Ey5DH4C7J/PiB45D9nrfU/ASFToRF1QDkwks40s8
/qvGJ+5Vu2N+IhXvcCtSx8IGBl/l0wkcA1ZjYWi51XJ01VkC411gjbO8kT0N
S/lOWeCRUg7V64V5wh4nf0nOIkzW4lqBw/nQMO0aqgCfKuJbjk4a0E5oYgDS
hkl8r/I5x39Xun5O29bcOFjg7yJjiJdJRXQfDecXPL4rO1eK+TzbM1bcYIOv
9s9erWx82hhEnz9Hc/yrIJeqffhdBmpgw4yqnhnPayFLs5NZjwexkTgPWkNB
CzFrGKjiuHpGrkrmTYsBPVI+x4c24gw68pbizCn7mHBJUtyj8YbZUvdi6ccY
eXne3rEmGWqzRYZCFf2DCHB1YQroD878AaWAYc1nJOyzoG/YR0ZcE9TseMIZ
m9iwxJhih7DvyqLyA++8/FQGZKRJNP5dxEW6/rslufodecK89RBaLFIDk2Ip
SUFJhDa2qzkcSI29R6h2jKhvsOuDt5JolOi6FQpPbRaivzgvtuzuzj3t6GyT
1HSkLwBdi1Juh5OYeL9jdUfoTnnL9WhN85a6TgJeBhovYG/5SpQWVmvaVGrp
Ojj+9oik9lJTF4vp1LcIWkflJSFyk7/VSrXkZOyqnTjNQWcekpYUhmuYQqNa
qcAEJAtvdhbrwo1SHqw0kq8Z90Nmh9NKsdAzA8sGA54t1e+ULVHDfJWLqPED
9S6jH3oRX94LDDSaFgNMYddSt84EcOGu2sBDgZqYSF3Mc06hSzN5tj6j0K0f
kiwpQlmxhloSktMGLVj92bvn56eHhx/enp6cvFxxuNeN2NucOjW7TGfYY5Wr
BfnMYqtWwrrTOTJRKZEpL2zCIL010H3EmlfsYp6XyWKSY23oTuPS5B9cHAZv
SdSEuodGKItsBI2/R29LWFErukqmWH72YpHRhh62Dgui6DsSEMxD8G/jc13M
cUhWebl4KBgDk2BgZlwAQ8acLuyB9hFjFzgRma4y1U8iRHHVPrHBklQAzGdY
89nm9WG2PDkSJGxHvV3aZ6n0cYrNqL1raTHNQ8/G6+DyoK1Wyq4JrYyafgdX
Qn6uKFm45OmbJkQTP3B7FsjJ+dGQD67j6ClelyhFV+oWq/q4rdPg+EQh4RXM
FCbxBEM2ApTdcBF0UT2iwxSUxgWvWLCvtuKORQsQozONEIzEyx6jsCZ6zlCa
BqTPou9RF2A+/dHyZHIP6YrPFBGqw3WpRPV528U096TA3nEleb6BfVPk4JGL
eflYB47kHmOdZXL7fJRZvAxYPaXlXvTK+CqdSmiLTr1gFxB9SXK5D+uHXMKR
ua/3Pfx+Y+/jT/T8XsR34ONe9tMqT2r2/9HGTrZCgJf8ZSBQ26zDwMGn/w8C
AQjrH7sSMPcRQYE790CBsFGgaKK+H4UCm6QdDBNEW7K6X/8l4Nh4KCg2GkAg
V7ERDH+iivJ+GGbXRECSDURZs2uX7R6ms+ExnIg/tJ901AKYXDGQHwNJaF1C
IJV/AffFcd1S9gEUiinzWu7uas7Tns3x9lW0xCV/+4pQA0FqUuBC03CTeL1U
CCJNzXNrx5Fnyh5sOTuxjdvb8oVmNA9v/RSagmueeAsS4/sZmEYdJuiIYo34
ZrSYfIW7hoIr5VaIFzzLOROdMhzosphlbu3t+qukyXWUU5o1y2mBTdn6Mpsi
AP2Ynf/aCED3539G9/x3wZ9/vHu+dcavcc+3OcjN77VF/Cr3/NfN9pu45xv/
9eI2/1Hu+S+Z+bdzz7f+1xCA+lu6579g3hb3fJ1EL3Hk1JkJqT2j5FLcnlZJ
8D3d6PF5CFOy4VUP4ErKHWl/fxK6MDd9FyZyst2vYFubLWzrjR+9lqoILuJi
bOhgvYwSUb3MQCMMUp9jw7geZMcRZ3FDQJgUgjJhYCbFzBZ3GFFzbSy9/c/3
mn4XEKRlXtPGZ/9ro8cf4jX1n/6fgyXXOODyKX8Dlvy1M/4WEXPh77VF/KYR
cw+b7X+x5IZ/fz1LdrEQ/1yWvDSqopH9fDlLniSoAuemE5Piw21ewBZjusuF
dJ5F8dKYphHiaFuiyqqueLWmJRg5ZbwiOv9f5/0GYRlxw66HxhEZBxZd5KLG
zcVyBQko/KXzt351XEZd89e+sH9abIbNZH5YPIbnr5M+11TRpCTT1W1ronTf
ehnZ9ENGdTYrA4DHsjeNNzYhttzj4i5yVCa5Fp0hHIfRl+/dkfneSwpCMN46
OkARM3kMrOBiCr06GLjM7AAaFNlhYzlaXJk4EItc/jtSCdG+1a8FtdjwAD+S
ZWDk0Uo+ziSsxQ+IwK9NVEikgzwkfISjRsIAj658biewcR6Dvo7xaBuRYhMx
jKTMXKBeYyjJ0pmOLoJ1lgSYwkSCSEyJO+bm9R1dtKNKeHy+/zmSLgszUx6S
XUMcDyQ4Y4am4aRJS8Mq2dWPA01MsGFDiNHYhRj5gUVuJ5UAZGP4gMiiNsd6
5IUXlQ3hRWUYXuQjkhvgIou+jfzTqQX6jPGvC4o2su8SkpetT5f+0yo0qVwW
mtSOTzyOjxz3raSkCKWxrARR4b7pcnTxobWVjveAo3LcJcVDsyAKOYpdg4re
QRBj4UschXKccDvLoyboFXQrwivyeJ3KNJqaWxjOFwQGRYcq4uIA+TJS7n1T
PyU6soVj7n7XVFUl7AO58IL0sRAF1jbmakR2UPt6t8bh6yWPrKqb1QrgIMA8
rlnaXCxbCgvYwGI6odIbKAI0tFBbEgthgjprYfA5H7KIL+J7aGrPBhITrJus
zZcUyQCH+wWVd8R2oAGCDejQ3emijqRmANVD84WIG9r7DLjgJddwTQPbgeuV
q0Q4000qEFKwagcsfYaBH5KOx57VoFaBV7IjNLEsqMljU15+uBAuVGQtP++f
dqNnq0Rt4+hZz3TbqwrTzcoNwHUZmsfxIIZUGdW5Z1ycRXolpTYvAOsBVwzz
9ly4MH/3F53Ca9Uy/ocn8zS8Lx8rCtXdB5i0P9+vm3/JKO369gO03Qfo0Q8d
Zbl+fL9G+oBE4YeNcq/Weo++yFlWD9FHHzROs36p716TYnnFYjsVIrIECpsF
pmPjsvSuFiqVTG4xvNcSENYR1RBdrz5XQ4ZQraoXEVdzTYMifVSLRnyiXL8U
F43FGFwZEFMXSw9SD/FXNfxceTvHLdGEWtoJ9Ba6GBt8YQLWSaIZdoOCU/Un
GtgV2YO5YYUxzupcgiXFmzpcUnOSln+lqqOLTKqD8bxdUcNEjTZLVOTUp9k2
cJJe71vtz/5AH7PPnQbrhwoif0p5AbA2RguBATIO22HkE4gALhhylFygQOJ0
JgGV1dhsvhlyW+9dvWi9MLOEQ5TSXcgV+RJSl6LVUhlKCgPN47TQmVSSMkXO
ivrBIsqbgls1UYHSxpyswMnhIfRdBBNhURhJzK7uUXp56aoPuldqTzdGvto2
MI3STqUL4JntylXmlq8PlE/uLQ/Y9zxCQg7omnkFfPdsVLMOq0dITLHUPQGB
g+FY9Bl0TSmqSo8eyDCczE8BJQx7roTrJ0GYMHBsfkIRZkqDZ7gT0DEZIK2J
P6bbDI1QzqdpZYPUqHc7vSaaKCEi9YZEIR4Ai09I8oFOieGFTNKLi6ToR89T
ydrkxtO6peI0iesjSjQLkXZOtujblYmsc5VQ6FFcSRBTffZvsGNDdWUbMrKl
jrsY2aY0tOdZOmGg8apVvFu4NgseKj+VECuQ5dEgqYt8IkjZkglmEVxNTlZB
jRCQFtoSCqMCm2bw6rZAM+B2vQ9YS37hKNIU9zT60jNMK2Mh4PColPQFnWNz
dOF8dxJLTWdF8+GWPzjkGY4oxMlo15tePH7TCwRFM5n3pX/gtqfRDTWl5PIX
2FKixA5p8m1mymNYTIfTMZi+be4KzcFYM3Lou+z0vTXXUUCPKKvm825eLfYH
rSEKr3HHZhAFpMFNIXsS+gA/u+sMGvAi5WJI3VChJuo2oU6o5k5Yd7PKNwDZ
YlI+ANKWLdbJClaAI1gFKoxpGx+AgaZV8YSFtHtmEnnfWsjAhQXk+qEr4O1t
dZUjL8BLaAoihnYGCbGjRzsgWdH+TeJJqQI1V9mm8+jRIzkgEsB81tvQo5tE
RHpTw6iP49Cn2Gu2qDwTNn2eXujqiPjNYM9qNF4dQx6xG61YTkHPEeE3JRYH
9NHvMAVuIkSbx+X66yXSIcIIppuGVhKzB2FS3ra7tJHumbFfI2bZcAo8er7/
9COsQmJY/5PmWu1jxUXsOlddraza1c3i8iM+OsB6j/Si+i5FmYm29K/RL/ik
LOl1/In6v7iwU9gw9zW3DWP+ipELIrzROr4p5W3cLV7Aay+UmarZoGgCyIKN
uExiEYPVEgJc6y+mkiQuyd+XelqCa82zv6zwHt1QXHSyo482vO5wvvamm3BO
rTEhJi6vIcjcklWW4fttEwBSc3ddwBfe7XaBiBYh3KhOGkJBoLEOEUWgJFFY
3qA06lNUThHucFnEUuOsRGyykbX2jfNrklDh1ZvkG2qlQIO+y1K66KP8U29S
xOzTuYqLGBanqhhTRUysQ802FDKTkACffVNZsRgenO1FV1U1L/fW1y8Bwxej
PpCe9RmJJkAqZmWerdPL69TmrVx/xp6zf2AZov9Vf+4fW3/uvsDD37L+3IPm
+i3qzzX+Ww9E+k3qzz1ort+o/pyzHwX/6b9+s/pzD5utyZClyXKTGYtNNmwN
0Z6IcdgTgYIiWhqCpQllq1JbZNJgbeKm9m/P5nmGJJ0sPvT00Qtq5Rn30klJ
jnpmEYss/dsCk4q4gq00t6SuaPzqGEZNKQ+4SHA6lJDHxe28yi+LeA5jSCEc
yd3rcgyGbXMXNi7sR2ev9nub2zvR3d2/nL06++7FyVF/sNHf2djcXX9zdHbe
f3n09qw/2N3obQFrA45+enhw8vr14ZsXhy+QJRUYTZgbk7hx74gA7C2FE9xB
My2kUksZoUvOJZOaxjmkWS0qTBAFDji6rbgtYsO7H86O/v1QAOPa3vqdGRsa
3XYtPxabEVbIw26fRki1fURt0xnsguN3+Kv376EsAWkFi91f7VmbJk4Pbd5q
1sd9WnVB2FrTSWlfi3OnhWsYSklItvdo1+t/Y8oxYYon7gObD5rmJ3RvqN0q
LUPVh3fN/u5tGXR3VyTSqgVz2Jt3TH0OnTk1kx6WurmFHSV2HQ3oHvyu7TLe
onzC16ZAR6Rcr06HbHwtTabNWcfRGt1LKg0g1w/uoRFm+c5SAI5utIkfwtU5
6r3op0l10aumZY++7/H3fL9h0dRFKZaWfRM2EB29+Mb2k8xHf8W+NPbeA7ac
HL1YxdbZjP3Uf1SuMmtR3OcnMoFTvEKu9A2vhvBDJ9Y4PnphTNrWFWsWVQZk
C8ZggmVjGeaApHTiUsA/Gr4RUxfON7zD4Qk1VzZWozc/D90SRBvV9wfebexC
fe+MLOEeN8xsmvqtDGD66NhfgL0B8Go70oe3DCc04U8IEOPdNG3EAlxo7BRU
uzE9fWMQZbCcg5oD5XmaQFKTya6bYOcx9Ipr9ORmEOl1OlmoJkbSajy2VjiM
D6co9FmCsWtpOQvXaJLXt/s7lLh+P0L/2lP6AVjHvFzZbDiq4Iph46s5HplZ
5IOWuKpd1N7hYwM6QUBcZBIXU7xvriekiZGkFuJhXT32bSG6uqZxtMLwFDWm
IM+aXOOpl4nXo91NCvNhjAlA9uWCkv+oX1RJLTSq3L/00ev9v8iqgL8WZAaQ
a0zPYxr/hDstmQClS+xfdutvZVaNe0QjDc3pkRGo5wQWOulzIzrA6dlWON+U
TqR4+8ejP6OLCen9Ii2vYPwMi+qwid9kz9mWfi2oZ2om3I96wACOzB09BrIh
Epg0XC49AHsss8v4ajcsBQ9q+LuG+MFm87U+TiG/BPZ03FUyXrDRj63rAzpq
8R3tbG8/2Y5WuIPIYIc7iPSoqwRxJI/QCA/CH4EJ2TThJoajk/5H5DNDSpK5
CjMeEQ/lTz7OUAKVL2hoFCo35AMHCdXZHgHOC42wBDzLqbaAiHRTrvy3uRgk
O4aPXjSCwDVeArqme6nrGpIGuAzVrV0D1WhNynOu1fsp99nLZwvYBAiQuYMn
m/0a3nppNu+fsfWQ0GGzBdofGldOdkXb/KVZnjy/ct05hEp7sEBEsyTRNIgM
+h41XqNa2zgAtXj0uMHfzjPq1sRNqf5NlbNCOHjHYcNh42sKleKG0yCQzuA5
7lcH1OAiHou5El+i87L+Y9d/JB1fWYzgi5oX3Sjtw6sMIIwNRtGFSOWEWrPr
FtrwmRGbgq5QpkOrKQBEPvEJx5KRXwLtiIJAXLgzi+flVa7cGpdh33XXp3ON
mtx7bTt97EF1ZY0MuNQkpsuHLp4Id3OsVQ/t6Fx4RGgznTajCZU+i46q0ory
xreq4hpua0CgZlorS5tzrerGftQRqWLdTVUnM+Xz9ityRMt+M1pVl2I3dFtT
Xxfh7lwAOFaA1kgDio4wLN30R2WLMO4Wm1fjlXj97uw8enNyLnedjh4mxkcM
EBH9QsWKaL6xKgdfEtclfIX5AMWwCYzZt7zIDcPD92gtI4kUN+sDLptmY+7S
SfvTb8jZxq5HvYhZlj7gdUcFk/GdtDEK8MT2X6atFhIq85m01DIcXaoZm4JZ
vyNGdMh7EfIpZCfTeAwI8/r8wDSXd/3RrI8Ne316qkF5Cz99kogZbK2q3ldE
2WvhmlFfx0YqR7ErsWm462gemWiRqevJO5K2ePdzdIig/32nkwBkozvgm/85
2AFuGf2s13NopKLz23kCD5vXyWrX9pyTpT5U9Bo+nM9jIArqK1hz/O1Gv8/z
fv/7TvPEdoU0SraYTj/QMYDS08Wm0h9wx/LRAJ0Hsg9/uIcuX4mB3tqC52mX
bm/S5XQFPzHNu+AP1uRRK94zINdf+zvYM2DyPyZYvX/zk311fS16zfIutzk1
+HbBsiyuA1B+bZ2e/9kHxe9dEaih2+0wAqSZTlgCMv0KqxikbvLy9NhtroRk
YLv5OI0rjep4JWjBwKbdk3TXg74RKcVqwCDjhAuxUatEiorykUeVP6OXLBEz
5qSK+v3YyexaqM5kOFjf1Cmh30hJd+fj1d2z3NhKBRK4Zi9i3xCHKDbfSeyJ
AQUSNCKOOJs3U8M6/BPHoKs3wzpfY/scVtdgjoby0mJmKyBaJksV32rEBRMR
TIlO5t+YlzZhmUa6qJXiNSUGmVeo5xIGWG+4GYkYOGxk2ICrQWlry15zmBr+
WSFBJPmkG9SmzLy0SYZctjI5vbhqFvHi8BSI+Z/7O882MLA+g00QEqHRyu9H
XSfMQncPvXpdD9gEzmlmKq0/nm+NLKttaqcysCyqO3JTngnFVlmBvTeHyxV2
NiSp89okCmqbRs91wSbxEz1zZdYfdJqXE+3tfRedHf63d4dvDg6FWMG4RP38
P+83fooO//z2+Ojg6BxzFOmRF4cv998dn0fXgy6779ErWEQNf97ADeRniEWh
wbD250f5hp8DWZfMcsvGkmfeknT8x+R233RrjexPzix59/bdc1h+74+Hf+k2
OQaDP3f1UbGDceO8R0AJSBKMTg7OD8+js/PTozc/aJi8I+8CKG0GnIOfoqPX
Ak750iH7ydvzo5M3+8febMEQ7zcfPoKiifpIn6gjdTT67g4Rxf3+888PgJb9
YyY2TSQpOAXvRbnsRpKeYS6lF2G4Fg0FIZEMGuShJCEGC/7ow1h9qT7iCnqK
xzE1NtyhTGYxNi4srT/Bqw0aNLbnHQV9r5U1xRUs3t7c3RCjnSzTUnK2BJDW
02LGaTJpfrnNBvM2icOb+S13Jw1zARvvYbXEGAtPgPjdckTIwcZxUVCdSu+l
aBoDIbXRBqhQlou0oq/wQ9jYfBqTsLwoTaQD6q5c40mUXzKkwRcZuzbIjGXP
S+tYW33Usp76EF6leD1hz8K87ctGw5C2UNjcaYyeEGxTyaA5ogXsTyskLkNH
EulN1VGDjShDLnk65YeR4BNTn6QFtY++pc+74hAY8lM0konbGBaT7EwU42F0
8Ork6OBQzBnDUzFVv9DooMaor2a/AtljBKo3iqL72eRHlM8kaNkBAY2YwBfI
RlDOEtg9XworRRmLaZpxiJAoE+QB4gDpnJQjtomBtEDeUCkQRiKhHsqUCWO/
ahSPi7wMVVeaHtGK2piaZwLbDF1P/R5fplbaP1R6E4UkWqbgCt/gmxgvy2aV
j8ktRe9pVpyoVqZcZpbOLXazWG5Pefo1fuBjLFCEOsY27sPwkoaOIMs20GV5
xJirmlbEJ0UDLcpEGZF9Z3Grq5QNelz3sGyw9jTNCaM3y2eweYmPat6POja0
XtQqEnMF+yVIwNmfbcCF6QNhOLb6HpItWwiwH4lPwDjtSu0BQAMXoT7HWoVa
of+Rrxe3OQoQ82uuAmNTve2ROmdtiP539q6bp4JGoWL3eIAjXIY3AEmn8L2Y
SHDRYlDxrCS+emHSOSxFkGbibXZ5Vmb6bbzHamC2FJMVc2mpkg3h0IfzduY5
cMO/AeGoFjOHUKU07aMLxoTTunlw0WLyIaQpsYO1eDrOPT9QnM7IOwSSPCLM
LAedJS/oI/TUgOQ6A/qIbGXiuenx4PMRupSttqNpm5xRVcRZiXnO2fhWPEFe
22oDD2R4ROsoLBdmGS+moFoDeb/KiTgtmwrJAaYxl25bFjbxxQXuwTc8AXcm
gxojBLMPznkgnXg+n6bGD8Y5vSRjuSdQVy2D9FMSfiRCGlCRSW7lDpOWj62z
ZxSmyp+SY6K49jdUkueGUotbhrQsMy8u4yz9O60VDaoZwjupwsk+JsncavDz
AnREgyr+EBi9PqWaLXQG8P7Zq5N3xy8MmcDXzTEUWBy6MDVVGJ/N8cSSEOZO
g7ykRk2Pr+N06oBf6j5NaQHYPsUAbKr3y1b/g/1SRZIwblHhMzZ+6vFMnfTY
LtRiurxe2m/I0YC+u8KEhwiMkN44ONy6FQk4zO3VMHCrlfF4yXi6fe5BrzKV
gcL0zo9PftABLLjQi1REzZZIEwlRJ7Z3d4cj9M6Pjg/PaNffR2trwJWjw0nK
4fnImPbW1vz58CRY/kHxMWPLD2DgwebZW46QQmEOED+VNG4V5pFxoDBG2JbJ
FOOuRadBE4AE9rLMekH1wXE1nBhuB+Z55DXZjvvSexVkeGtnd+MZX2AZhsIw
A2B3B9afh6ubF4CSsXBnuw1MYavYxi6SWkUCrtu8h8/xpU2AB8oAhKNAC6Hb
gvFo4L4sc5UYI8OJhO7Vc0DxRq0ZhsWOIhPqJbojt7LVrkzs9K0dT1RXxA/0
ci1XTRhDkFAHUMdhJJ/dMSGuHFAZt7ZdDB679W7JgvkVXPR0qkLK2enpv24U
l3AhZG4ibDQV0+WFmbMEF5mrqE93MzUXjYzNaSVEDji8TZSRNED0bKPfTUoE
hemBjVNKCAAaEy+5a4A2BTfMjvjGqgS6d4hEYiQg+QkVoNgVhCW74WbBKc7i
j4kWQlT4YDzCcEhbZKrrQias786smir8TxMxwDm+KgiGHjc01BUwgNspvtHl
cK8vDyxED5tiRh4WmlhC6y07YS+UFTkJVdndP8b6mNP8tiaLMnHyFlvStHAw
aKhWfNjI+iWHBgC3rNWEIBr5p6PzN4dnZx61tRPQZWCfMxen0o4wd+26IkvS
gK+PTk9PTpeMN0uLAolRLIoeqcT2EQ7U0EoCFQ2zhECHb7TF85pnAyz+FRGG
0XM7ya2LuuFxu95vftQGfqMVOIfyVlSVsmjZbQvGz+JJ0oDajspw5Ror9oj3
36AEDLCYVul8GiB5KWaZBD69hbs/k+gd/M4ZMmKxWKGYqDaIKxZ+HzyFejay
dBMhQwAAfjKmFQBlxiMtE2xDQuT+7g5UttMERkFVxs6B4r2ZQdstkP/PFwVX
1gNKQNlZHicGkuvASMIA3p+RKmi3UF4lU6jVuZHsAbHjJ4xOk297/C1iBgvz
7ptJPgONvuf2eJ9SZU7O4ROtJg4/N4DX+IR7M3xJU1TWVe3JczD6UcagQurc
NczIBUDjNTd13Bv4EdEel29EJhu+wFQDwsLtJUHGUXgiWLYdwJpJSbdLXQta
uhK5QhoDOE+ZqlQmUcSFyZmj+8q9o2Lhau73aZxdLuLLRBtrntjwjd2tHSDd
e83Oc3HOojWB7G3vbVj8T6FzeQH6xS4bSbEucvRd9Eg2tH49+I/sPzYeeW5x
A5oPaAL9doCe513reMaxdrYoMATowGzuvQmQ+cBNZlpeoyAq7xMg0/y73YgB
NlXLQk98AF7rM07L+o2wofleVBBADHVke5FeH/denO33trbUAJ4TjC4UcYyD
k7OjH97sn787PUQigBc0rZRKUqeZpTFTYhqdm4k8x6pygnpIEjHQf0mHJNUe
L9JPpIsBMn1iOzbdXkWhOGBI2T4lBZ2rHdpub3DKQbmPGC1HmFwYrbx7vLGx
sb8afk+BQmgUkSc20Fw49FDDJP/bQ+f6JdYwZ2sOhEQitARwfKmfFOMbjoBV
ugIh4sU1gY+kAdrwxsFOj1a9f3ZwdGQBkaeTdezjuMMNuvpDeTrgtrAQfi8I
oNem1AcFILs2k64Vk2v61rL0i3xRtC2+ZcFsbKUeTidHL0jIneQUYYbm8RmQ
8ywXeuGrslXDWE82t55iu3DW/FCKdxZdfH45SOVttGz6kadMNGuBrBzcZiq+
pSYPFVDa8zUzi8S8f3gBbh0GZuQL1IVtQRVYoT9jl7p/TUzfoctFOiFU8/xX
uw/yXkVnC+nY4y0J7xrV63P3XzideCt02T0u7eCvkdoicQvzAn0PeLl0RQ3q
2EbTiHQd1m3TRg9jaladHT1qYCvckKGdyYW9R1ZoC9RTIzy0lpiVJmGWE0hR
0Kwn9SwqbxH4mAsXc2DDpn+g1k0WYxuOQI9S4osXA1tipftJqVquHc7z8VUY
pq98Hs9wOz/mUwxKIWclCNNvgZ7/2eS6DQYbz9aPDg8Pz85f9Dc3NuGdjW34
s/kMj97JaqhFpEv2WnmB13bbxSJhD7KcrPmCa2+s6VM2RyWJcHQGUrtHyTqu
Wp1HVlEtYTurSKHmCDEgxi1ZZE05Hk8dznItAjIrBFIrVWTm03jM18nsBIsc
0eJXRsktnAqMy6KQh6RShBgGtyoDwo2UBtaVDS6QgITHnhd233ZHUl/Pl+TO
jL+803kuRQasPKbuCBlh6JJ4ECOYi+FB+leHjVFDEZM6yodX5IVVaQP9hWo1
5CPhV9K1qCAqZNVgZGyKKO+ZNE+zRjgu5PfibCUiP87nt97Vp2yf9IKbGBoF
2KhZgYo55qJQmS0eFmxa+DXtfX7bX7ac0CPYhqv2DEVHtGb/hkVReehgSUbZ
aC1o7gxmXnV0NhQZH2crUK1LuZ5waGDJl0SCotIqaB6sF6TwAkvCUG4pXq7y
HtwjAgYjczB72YRoPEIuTd/I6QcPlCJuGZCbQD5l02DzorJIcUbZFXqORYxE
EwUHmrDncQ09m2tOlRLQ8wVvuhQMQafddaM1WKUbwSymZw1IjbYEVawN+WVt
Dxk5Ye30TTvS28DZqQpWo92C49xqWRiNEySYY5kKKXGbVZ3Fk0+U/c0OH8oA
KZWxyxjVXKtepQkH5fKpFK4l2Zhym1+qFARy3rE6GVv2o9kSGqIVb+Xb0/Sg
XSefENKfKmEIGbxrFw0oyFQaKHPewjnXhlNOUaltzCEp01sb2dHqIPEMmc6G
sco6l7Vl+lYF9Gh0baiecWQvkAJTJSjPS8VnV7c9Sl3GuPT8ZDnHCV2azsJB
hgwFAaBY6/ykzlzVbM0Uj4+2RzoD54Jq60nqt9jOQp7nAgE5rk2dkLJJNqRl
4ccATaBbcA1c0n1NdaXmBaVSlPWLZKPh0GgM9uWQGXwgV7ff9fAtu/oSW8uf
yLRoQWYttG5a0h9ivpiCgFKyWQZfYHAM7/g2iLbRKzEH7EWalISUavjS119t
YElggAgj4hoMb50OJmyMp2mSWcLA9bp9OxhyXKIrnsNGdThkW9dFerkoTHA7
Ei63Nz872LKmuNLYoYmz7/FtQgJEEBOEayJ+AjvL8lR85T7bp9R66yhjw4bn
vFBOClm3ZI2E4doXYpTnMDWTQyRun8ArwpFvgXHdWgZjZrL1TMh+ULXBmmKJ
Lms6jDhvjJPIaiicjAIirEucKweklFRJ6WfCnPUETfwZHUwSOdbAuxhGaeUn
FbJ53EsJMvWzwmgHMQGb4DrAA1gQDV96Y4uJHk0JbHZS4XgXJv074ZhyeIuw
mET4piqgicTk2OBrEnX6FCCAGN/Ivrl7mt0U/+pqdidsgu1jR5prIdEuzZM9
/RMtINoiqE48ZB5wsN8LODpVXNT1h6kCu0SsKbCnLHQx1GZJnHmlOeyCgN4l
qLqKQYI/xBgptv00vGFjOlWihmkH3svnKkvtAtaLPjAZwXsB4Y9qFgtvjUBG
GdidbP++5QSZIXStvFokrXkHYTK9l6ZLJetdxqcLhFse/iYpK35oNWfXmLA4
y+1sfLWQNMyqsLq0NS6G6Yl08ZX9/4I8xyYw0sKHEF1WQ7pxsBhzsVQmzzgH
dfXvsMEXOVXDzcXu5mDZllrHoqpLwkOTMN4+GLd3m1Q9A2Yh1U1xdH6aIRWU
Gy+IdrOnW+xcVB4Jr7kNW2ejjyyLi7AFlVuupRQBpUiBWHdwelyuouXFBp4i
hE4ysj7rmPYzoEGLEm8zh/2snBycvV01CEuBM//COcwbaImvTPSo9ssZG4eR
p634SecoqHlMGWWwBhg/OpXhXyA62KjL0jdAswxKTijWagLazlZCcugVCdvo
nUjKYqcUuXGWFSeUGEFrUaInyMLaOJLxQoipsATFPHFLcG7FB/v5lHsPB6x7
FPT5WqEtVpYwXWvBgLdnbC+8SwzAJ/SFMehQxMJlHbEk9yDl8bSBfe8o2Sfo
YgrDwAc7sHbBth25wTF3wCGrx+Hq+FxqR5/tIELCz6mqdLSsQlhjABECWGCl
VuddkqYaSD64OGY8rBb2xaEh7OJ3GZRBlTB2ZGhyU2rHgM6UQZ3EpsVIfLq2
bv6zEk78lXjB103LUrqTzXJ3UHwQEN2k9SzWIGnCJH6EuG9fdCVU/SxBM4Uh
LYSxLuNqSapKkAy0ShYWm6oikQxYxT2xOjQflRON+6p2iEKANCNJepRmqID4
KFtn+V/kQ0M/EivsnL3Fkag2j4wGVNcFg3+BhGazfCJlNjzqYfGzgdDWAfYk
AJhFF5d+OzE1hONKKlcj2IYwPN5oVCmpZLU9tVFcAo5py/qS+Z89ZH46LZxz
vG9QDQ7v/PTdoRTuaUMwjwoxv5KQWaNTWktdWH2ISU420UGtlcJJYzrSUdsl
E24p60AUts0I5OdQKQ+SJE6hyuPlTbk9kXgaEEOvy5Jy77s0bqtdGi+b07gU
OOpUoR4QrwL3/EXBPia9edKbVWOPS1h1uXf2an9ze8eW/bHQRWMFHgwJl36x
RryQYYyekov93EF1a1AGYHkksITA52RWDoJjqxB0OqX3YfuKTp7/74cH50A4
Dt+cH708OjylpN87SU7NsWKbK6vS02HtK09WYX+TlZ1Vjv3PkgqfNrLqyjYX
b7aVzUr4JJp/TD+tPIV/E3z2yW70c6cDELh/nYd/Pj98c3Z08kat7+wvb873
/4yJJc3v0kN2Zy+i53954GnTiwenR+dHB/vHR+d/oXvbgaX2epb8b/7n1i7L
uTO4obPFzHWAKdmU5+or+be0A9O/TrMzfurozfnhDwL2zd3B1tOtZ093ng42
dmAZ/nw7W72BzIgVvr90xvhTw4yD3a2tnadbWxtPnzzdeLa9PdgZbFPyUzN8
mjLC4c7tTy/xp6a0ahuf09s//uEEQPrqdTe66/f7Jlt6VoPEioZPv6/Xvirv
1Pay7J2WZOOsHXGcJLo09Zh3rjN2m6x6yna3orWAWCWOS7afhYVozXafLmvR
wzh8yOCCyQ7xUKFUbkOU+5sSvlApBPLdo0gHU+pGKyKogVSmhFkp2ZxW10zL
IItUJ9kiP/cExhaxz7AhT+AnNuo7D1g2wPIVRSq0MZBHHyIOhqpLWv0qXUW4
jYKCYsHOR/fl8aEUnDtFA39o8bXZNy5SGhkEvyo1nZzkqEM1YDJnI+NFKsO+
zxz7poKy2rcJl0xLsw0/1rZMphfGXmerG9fMKJLiE92gvGDLenhGkzAMDU+t
rJJ4QvKxOSNVc8ULYurWJB0HDgxVymSJ45qC9+zZ5jYXM/SEnxZV8Sq/McVV
OKazTXjS9oKabln60rJyVTZBJnR2cR2dwOafALjmi4qM/G0FdoOMZhsR6IJl
qDiMqY7dkn1ZK+pn1CnGtuXlyRoKzXLVaLn3SvtjrwFJRgCL8ZVcr+ZVGYUP
wx+ZFA6tWIne1h7HoLF9cEj1eIa6vKiyHDbgYtfinzv4AN++wQ7KRIrfyPRt
LlS06u5Tx6+Dt9yBuO1JsnOb62KM9q55WJppX0U8zY10Su5lDOo2gTji4Aod
POJSi5V7XeoDmqSdEpCwvLgNEvm8hL0VTE/FVLCJZ8fodJ6jKbtwORC2LaEh
kCbjyvjCKqouJD54G5B+E9+Wvs1fuRVcSAYf9kJ7YRQ5agawd6vjUE/yinu6
CEZyZdFeShwXbY4ThL1fTNg6lpfXHLZroGJVkrpI4ko7XXEz+mSd29gsqwnO
UBISJpXJNMfyD8SEjMzqpMYE7p+HxMqzRdhi4q1WNU/AOq9dbrxTqtyLFCz5
jQu/2HqDpjEda6JaZXNCZDsBsn2ksRfZQxbiOSZKFolGxNkErdtcNy3rsxtZ
Nko/ektGNI+Ai/zADjNbFkbb5ILw8H+W5bAZI3wq28bTFNH32r+1MDVVm02V
zIXpRMVqKpAudk1vOTVsGq44loQNj7aoTwozIMn59AV4r+aIKHZAA22/KVsj
maxeXg3enS1TQaEdeI3iuFdbxESsTIKCKGVDvRPaLnHnJcBtmteV5uChic1/
9Wi6kEfLvg1Zc2JB2xOqaohvLM6aFF5T1keBhirTorqHdgdi8UEOElMhedFZ
tujNnGvSBpYdPdh/lQnH6a/4/s7TSKnZDnpcbchzyhpBx+lQ/5ycrPW16CWS
A8/QPSnii6rXSnewMqakT53jV/v0zdELnUHlp3N5j7lsrXTi5WJZ+AR1TQ9c
ANKvLUKKKVxbu2FSF3xik7pkLVaC/ECRF7WB1JqUOMCPbW65gqx0qJL/VWep
Oj/ICth40fSTnP1QLxPemn/hZx1pJli3EFMZ68yF3gyDjdcraNm8Qr8/7z1R
KyrGX2RTG+Zgpj7kBo3llWE0tk2wLgBJ6hOG9PXVhSrDipnervzk3ozjgOxn
IHgohKyV3nTxWKFmsMyT9OX5VyYnxtFgn+FYbGN0qIsOTcYSIjsqhJYZkuvW
wYGD9cg6P+1Dqje7Vs+VR818t6GUX5caZh5o4YhNXXEzAZ0kqyH+Kay48qZS
w5SzCldDg+PZFeZTFZz4x5leHJFjh+ZcC9T8gsfg7ef6LRM5SKm4PKkeaJp8
SsemcxXGFZgKTky44W6VJgCvSP5q9AayFqB1hjU3Mp0uOGAlAI/YEEnq5edv
bVCyWQNd53HFCYapK7iOio4uQUEo3jA6njjGzpCpEEvS2LInAN7rNF+wP8hr
Rcy3rdM52Oe1sTdGyvZ0Td1xqlLzw+nh/tmh6C+7TzcGoL944aMsIliYYd6m
dALhaLhFRsgZpl/CLUi4lQF1Kjal5WooKBjv7VsM0S0j++MMTVMEyfG71fji
lUzB101RGCJusnVtM2UrJRAGzrCfSDxLkVDCknLLJQ4innZY26cIDmTA8BOg
9s/eYB4kIOecloqDNnZxNg3f0gJDirAucD1illHl7NX+8THsY5zPEvWOGgR/
ZNgw9SpzVv+5Vj+R+6be3S4F554lGFNLbSX0ZuNCSA0/c9q/b67cj9aaLQMS
5uu5X5VC7rVg8wItFW5jdD3SJTpibQrCYyQzbKOJp2tjHqmPAdxyqmk3WjCz
c4YDyVvTbGmlXFU8va837pk9hExIbTUznz4W6nNckog5SabxrQn+xVc4eUMN
aELZBCMADZeZHakHVFWGhmsCB/BooFkTTn+I/pqPfPthrJtZUNkXoPzJ2I9J
Z2THd2kTyaT0ecTARoJw7DKfgh3WZgWBCofwfGAMUr+z2Y/eWZnctc8mZmwJ
SM/0ZSxdBKArsiMttnWfXAmEN4H8Jt+HOorAGVY3SWLqTvigqcyNBwZB6X32
637nSQACloBEOmoCgLfRLfs2GjUTjJHUN8BmuoVpArakkkuFgdOdJUn1FbbS
fvSCQpK5mprv8EG6KktTUW/+ilYo77CWxNJQaWdVbD2whDmVajKOGcZ2NZGH
nroAUygqMjh0YZ5+Z7vvepI5qdjmdTHWWJSxd6IMjLCtdnFr5WF/RegJRDEd
P0e01K2vpCWINndq86cHU7mNLIEiuEpQO/GNLUwdQ/BtMUMFknSJsgU5pyz4
zg7OBVNAU+fGLJlnBz1XqUpdqoc5l2wCW82lWGQ2dwFJgCypDG20MySuvilY
WpgZ3EY5RhYXhZiMFH2yANKK+M7syuE0RzZZQ3GeuVssSWqEOEsqUmKyMlH/
sMofmqEvaFHUI97uEnYNZO81yrXma/oMvcCLKdk10fFdOJpLRJ2Dgq/SS5MR
SJcJTvwqiSemnq/qmRpJSGxJYDZ2NBYQOY7Ygz2dC/ffsa2nECIZ9tK2b7SI
nAZYJScE2sNtO1CdDOny65sJIFU2Zfkbm/qkVTXF9NAMFAqOd+ayRXNZ8Kwf
HWOFTx+0SAmoEmScTjz6lZrzvknLK89HHoMCU3num1Btc50MNznbfx9fgZFP
ATRlCleL2YYIVI3oI84Rjs2OJJ3vAeVPlR1zHCSDk5zvlUdto7U+I35rq3Di
Y+6KoPyBfi5JK1E0nOqbWiejqzR2llMtc+5+rIp7FrVctvsJeitmW9paFyqs
wUJVoLMMi+9R27dcn1vG9GoU6GxTNExPiLbOrENF+SBIjj02nipT4Lwuzi51
Zj1IqvXrvaaVre1I2hnm9Zl77DPtq3iyTFrlagnSG9gINzfUGoW5u2iwkqce
RibgrZylzdIF5iou9eFxSmJGfYA5F42KVHBXYClDdI7qteHscU3+9eRQ1m4o
meImLz4ap7IRgTCKd96r8t6E80kUlPoUWR9gCBOMhSp5K7mlvrGuWVNhHzYV
aqP2Y8sAweumPF2p7GkSZXrmSrkUd9dt1Tk+nbxJUirKTzAaSA7cB1Zn4zD1
cYPg/UFDtQSQkBHadAYz/U0JI8+wma0E1eiI2+VuWmmLpLM8VOWJtVoHaSp4
Wu8rnXL/Tdew0b5ZrtV63ph1q563MSeHzmZoByUxkDqrmSKztuhr4jKtOaKV
cZEoqI4mFlubXajq0y4BJ/Yr9oV13ToyHVtv7a3yOL1rG/+php2sdrsaLiz1
uQ5/3ihU+8baPThGI/k0T6WKEPP+hxXBiVZ+q7I3q2xCaT5cXVWTFB3Xw3ZZ
Z1RulmkRlYJFtHnTQhIXS99y1UkNDfNNCwCU+A9ErhRRw3VFtofhqsID074s
krgyVdi4nuiFL0y5EYzsTmu6rQ2Bszt//pKRaliJyX2otKprJhR+TXprhp9z
xrGPutTemAQiW3LWU9qxVNMxWeRcyaL6wHgVh+83utHGqjhC5BdS0CniHOQy
QEsQLlX7yCEb6FyjZSxGY6FN4yAcPvgvGDCpF6UP5ZO2jcemGViLkj9878/T
jeyPq8OmEIFG0wJFJZrJvynDS3nP2WPSbl5RCeyhFDW6kOTlFpMO+2WlZRtg
SkJULs58rO1HnECuTLwKPVGvEA5oEkPCZRvBSBpZ0mfz6UI14jCRvppDTtOL
hIp8aKAY3kJC8C3MR3NR8lhUokjPpQvWYooEXgsvPzU1x/Pi74GbsL2OSV4s
gRDydh0N1iwe1DHE9EKTXaLe4I8Ck7UMy7WufCHM9sbQwppp/q4qlDbhljG8
uIreYp9mTwDSsVQqkczmU8n4ZURZZAagSRgsgjbttOJSyyoIkgtdBVtCzPSY
DD1GB+8URzSsl5WmT/tlLQYHO7HflIxmOG+aLYCoTa3HgVuRWHYQqtOuQznp
/uP7JBKjYXM/hamnPzaMFbJd77i+KcND5Trf2Gb43hPr1pRTKxgRxIOKhAGu
URUFCgdU19NCzD1F8p5VolyHxXC4rpGBUF+vqOkC951ISx1Iysu5oBoVpkJi
sA0UPh0lse3sUQzFuj4oiGkFzxlkxVpgSJA78U7nNYCYalekWYP8oI6NZH/A
+RhVOq+nBJITExuiCkKR947CkahtSmzaWNU8A6bIipZtqZSE2DaMyTid8Eic
a9+PXuU3ePFkJq5Lz9M0uB/EH8n1oFTccW7Yo1TBWy5zi/i+72BpJeJOp0XF
dhgzStSldhZHF1dtT4zZ/zHyayDvXLzB0PQhpTc34LHdUzMnGGBmx9QCgZzi
H0S9+WAXOYxgfskq30SLsxSyxPAzptRKVuxSmSrPdkRlIA1XlgrgGE8jg7ZO
S/LDvrWvAe7h3rzhumQN8yC2h5EoLChpLsmsyAkzXNLV8XrqHeBEBaUUcCOb
K+o1BUP78pO0vY4VR83DeUUu8Ob2GLgnYfHDIp2GT1pW34ADfddZSO44F6cr
lZPdWCuH4ySdrtTGiNaj5rNYjR6DQFcni4qM6RvEGedewRosu9mAt7Dep9EE
A7VJumxDwJTNoVf5ojDR3iaq0WxpsPOsgc7CEp482Q2/cCUASD71KQMXT2PI
Z9Fgo7s72JEeuTqDs6G7k7v3594dlvSXoEacTkghqIWr70s1YXq5FsPkhtea
OlbjKCVqiCpz2GBc0iZcZxFTN3p8FRcwMQaqSgVpUanR+g2f8kOscKemHa4p
SkyF1ZDcDln4sEc27KquHYGCoxFFW6btc1rPxhASC2Exjvl1sv1A1q1dFchK
6SEKOENYwQeGskMuxmyCW1faFDc+19A4uX4d2lf+gpoiF6UXCuOSfm1/ZLmo
nkYbQpeXTMKGnPebe7T2Lp/jMB3ayGALGN+aYpp8OqLkKam1pfSidMgGnwAp
vvCwcF7r4ijn6PsJUHMTS5eb5YU60Vcu0twovkb/aJMMUmgDVhftZcOOZjnw
mTyTTpGwUsCB0oaRBDt277e9RuSj8GDPgSec2+7DT+LBQmYDK74HcUmekV5v
didY6g47xQgvZD2prWFZ8omapqFtBdQEOLg5O/4klj4ef5QkXKNKKQ1Qeo1z
PVixVtu2Ylxw3/jizJK7nBs14QJM7Pyqg0ZNw534MtNkEtm9kLAawWaWcGDz
7BVTaPNW/MDVNx/gkVbFDrRBnAWbmpzeVTJJs2oW5D+E0SEkaaaTT0OTymE0
2EnyCTa6KU8c2+/RtwogtAZEZx6tiz8WU3w6h9OR5IalphehcW2UOLMJjH+b
wFnexGnFtuMsEWOFfcLKgLxyavozxV7Dt/aMKasJiF9eUCkXO12QmrTIRL2h
0nujXLItraQF8HiCJF5Mdmw8IuuZ7ghmj4PigYkImLI9ylMuMaK4H4nzf09+
Y2zMOlkdWtHXBV4x2DoYkXKgg4QeEg/hVA5egjOFAFPJA+9cYS/xpLENlY3d
sq5ZH+N0UGTNrSgBlNJ3x1XVujd6sm6wadqqmGyccMxESUxffqEUzvzbx8Az
durl04lUJG/2Pq0syeZbJbkvyP70b/DSazq6pSJzEoESglSIBjH6lEOeuFq5
ebhBgafQUT9OXXqZuOgYv00yVa+Fm3sIMuDM5DjXot1LDnixELo/rTAq4dbR
JDHlhwgPU42SnC3IouW51Cj+uwvhS2RdE/eqn0FckKEI10yhq2PQjzFInVJI
uEprbdu1fsaUKG9Ef/LE6wSZkp0gIvKJcQpl5nFpC/R74r9ZM3Mnqn1q3FN/
SkbcS22ftOuzZF4lJHMOdqurbgRixQ4J6Xd3QILLw2xc3M4rLjXGRqK4IAPA
zu5mF0R6/M/wqppFxcYMHezTiAfTfDG5mMJdP40ncdEw6mb3GY9J4zoLpzc0
xiydi1FLKYkH++W9s2T+sRHz55m3nw1oTm8mtAmwXhjMw6WVRZjxh1QeSIE1
BbIgJTBleLGRiS6IwMgruGheYuOrVI9OWZoCzoXB971peh0ABc9TAgfiRoMM
Ds/asHFTcYI1E7dCuhFwfXkxG3qgeLr9v5kVYt6fCjlGA6OZZKUMujcncDlB
HYynFOXHhmsvIkI07SKRUFl+ZLC5Q4A3teXY3ugD2iB5qU+xuyW403iOtPPN
JxbBWg7b3BUOP0Q/kikUinS9H9mm4NTSoHDXLS0DRDHWaRePQYUnSIoEWZTr
EgBD6HRUYGtS9DBuFE/aQdbM0ZVMBTRRzrj7ho6JZPBtGoWjLS9bLQgPgJYi
IHxSgwx68mLTBXywaQi6K4ivCTWbRXa3TLPstgBpP5AAY7XHcYFJSl6kK0f+
+SHf94SzmhbB2tfgdZQVGPFRL+eP7VBqRjQPUptP7oMUYLUpGx/wTMOcnj4R
81DXpiD4YdhclUnFlSNigRI6NXKvpcEN/cyA3He3NjfMDORQn5IOXSVGE/QG
IwPEFQrbDaMFZcaNMOb1N8cAVDigt3aTJTmNQi5N4YNPDKYRSg1A3zUL9Ssv
X+g62zDsYk7QJyvAk022AkQrW93NZ1vdZztP4d+d1ZqV3TbHfsu+j7DQig27
wQDR0N0jFdVbK9ZJLVA3AZY/54Lt0ndLV81v9E9wTKxfra9bczyoVry6HLwt
bEiCS1DPXH+FBmUSTFRzT4riFuHEPqsK8sfS/FO6Xlhnko1FlP4KaVHqKN56
M0gyqVE37lvXb3uczzDdz5Ya9gLbBVJcMtMXmRuLf1D0jA1Rm1KJ34uam5ZZ
o2uK3NxNssmF6EI6W8LrVd9mDi2SJUjxK27zxSWV/fT7lXqBLNs/TqmTps3x
SHy+gjZB8aSGhGdSbQpVrVYpGjojgxJhFTpJqU8dUGIb+nmJ7JIbb3kn1odi
1hhLp45pdHp4vH9+9ONh76Sl91uO9qovTPMEGM/Q/xL0liP8AQrDXMpsqI7/
bbujUpIiD7UWae3U78sXQSvsIrysGmxY6HpJO4MmxwS2tQHtmIs2S38ns+JM
0onsJ3JJlzTQa7h+BI03ef26UYSxCeDWoWy2Uk4b9pqY4IAIsiXAbKc+IQE9
X1TYq27EGqu9QvbMzJX0axrKBTW8DSe/iqcXvXwODFO+pHAoW0PPxkjZKnqP
B10qo4jBRg/bgQppljnu2QKwmx+JJ/l1pxPVxkSyza7tY6wTm3watopKQXJN
WinJZCVexQoNZKM2t3GnqSauRC1R8ZZ6aDTXAA93b/s+L3VWH1ArMBsPsbS2
BidLp2TN8opWSGKnVLfwEvtMVUFuOYZ9HEtnnjOe0JJdi9TlUXdz7NMS2brN
BrswoTT2alA0RQY1GppwWWSWJtcfL8pZu9EPGk4kRqjYla6CI9rF/E0q6IqG
SzKSc68DF/GjlvZFmybDbSnlIsV6GxA3faM46NA8TzFfl6IOF74BNywm86UL
C+Zpqw4X8vSANTcx4q8CkRR7M/btWtbuljkjtWwyeuHLup7cyFb7ib7/Hl5j
I7f3iA3o/Ip14jiY1G0N8ZfUmbWpuJGIA5mr1mS8Ct5qmooW8ZVWBuaWKEjt
SOBQjAPsdkhz/MNrcknBLbvfoIiVLOgsqZYVFrLxn7WqRbbMQ1MxpKWj20JD
ZnDddvHF4SknuIuHvW384AQyXemlAe60EGlcktd6vnjL1TCUBRrq0lh5xXvZ
H/gDUik7SlstMtV6ICCqYUMZg+U8OPeTHCU1GEoLo+Hr81crd/QL8LbvIuym
vrLxaWMj+vyZn7EBxA0V7bFo+8DWCBrsbPor+DQnF8kHv7nlyASxUZYhBQkD
iGKb6acBWSskY6LabG1JsSLQ1vSeu4EhXIFNhDA9T1gDp6u4tOe64v27FbvO
wGHFGmFt5lFsH/U1HDcgfF2z1q5brFTyikOxsEVNs7ZAlFXGTuZoO68w9CuY
RQz//eg0AR6N9XLGtCfuGWQKipodEggvdE8g3qaKERv7YpB3TPVaPY3WNWnH
GyTgeoq2Kbj5VUqvn1P+LrNtjZSNwFou4Ne8oEJjWFnd9w/yeTfe66ZSPC7Z
w9W4UBgjid5B2z5XcnuZC9vRp4YxEPa2HgqWHRz6mpJnAXnITu6fThUcgtPi
GkL3voQXBTjQZZqpBVp+/xutrFYvq4EB1OmJVyD8AZN4VxDZUfPtrEcxkiEe
dE7MB6+VfdLt2dGoJSlGrBTN4+pKN0Vr0KltWF2aLSiAQDQbMZXR1VXOaFdK
iOIzuUFw5a2363MqtJHgpYNlcBrDSHWmTJXtdx6XSm4BiaBnWKTPQl1lFApb
MAHD2FW6RSDDbp1KToBJZ8ksL24loQibwgOMMPzUFBozrQ7h6z+B/MP8jWvS
ECtVIowzcOMnfh+qnDPuQHDGiI4JGnG8ERua7FgA2No/ei7/9VGKgsIkjZFO
3OQ9cu3WOttxAFr7KF9eOJYugd8eqVwyQbMw901TUcz2QSzwt5qBD1h2cnB+
eB6dnZ8evflBJT02DnSsRzFhj8fmFAkLuNZXP1o5N23P0dVwLOFSHHK7+bS/
6oZ/1TToK29QJ6thgvGyzk7Bsrm9zcSFjwZF9l17Udxf6a/E1l34K9kXrf58
7/wv04xvht1ALA17vDtuk4tQADQEDGmCaboxSlyug+JeNWmXrBzLqgZhTINL
Z2Vdk0qy8bbZrHQu8ozXvrVVJBBDYVB9p0yq0JaP8gs5AanJQew1k/ZSjCSW
kBt6m7z2B5Re8Esr0LLY+saeZWOCNlbMvnXXGB8P2eQw3JxmoBEoQYFIuTjH
0NalJGdXVDU06KlSJhzJB8dFZSCkvITiu34TP+IJ85T5hJEtlaelbk2ThCLb
S94P7paGjsBg5gntE+i2zZ+Hb/Y6ew2MjYMgyflS2rSZhgrnGJLq6sl8wVjW
A8MGcHmCEV5KixCdAPaS47bd2U5vjR7T0muqS1wTwJxKBZhFJs6NvwchFZ1O
iAM+LGMFJ46kQvlXYrlclw1lHdF9RTR5VcV6fBGEeLjXQBHWWDPK2ljEALIj
DuGjJpTOR9ToE+o2LTHwVcSlcRPRLD2apTfWjkzSaP8kbp0D3WY+bW6W66qb
jtFLoYAlJaHEfJlkHG2Sa0QOAk6xfAsSRAwREMzAKN5ZWo6Sq5g87RQzgXlb
VOFxbvvDE2mxlR67JnlSNW/E22sdgGEHLHybki58dMGb73CUqrhcSExkboK5
ODlK8B4JGSweZKZLE7xVzy0MLrTuLR8g4d8WebGYBQEUfPxhjRQyeWM6FLf0
IXQoNZ2yswIi4cXR/lBNrKnSXFNje1cvxpA39AZM8TRuEjqTRyB7AosoH/ml
cfius7DMOEE2DDv/+FYiBN2NoqhLD9sEWpgWNuKgwEuKYm/oO+Rc/XIQtika
To7F0anGmmn6WnPBS1GrtDArtzAsk+KaQTe/VfDq0jWXE+HFIpAllMsHczNs
TdkdD7SPZmlR5EUAzX6dquGKxZNu3YViGmjCExPhdLBfMjtSRU78kH2DLB6O
+pH6TdBzXDY2AgRXAUBOIXhgoguXUVnBhwsj9YDGhieH+6LaZMknSTtigqq3
YQTMgHT69ND6LFsoakPN0DaPXZNVRBk+xChCnI+1RQ3yMcUPwbIMQeP74UVM
cmwdIbE6jJ7CtNoh2ko9TbSi0znQWBV25LZqJNamuUxU/2+m1p5qDeeTTC9s
E28TLi1rYVBN0ut0gmY1rtxTa2YoGrW/Jg5CskIXyli+o1GEONjN3d34Ks9L
Cnxw5ipFCxQU3BL4dk6SQtaaZm4JHPJu3bFGbharRUkJ9Lpgkq6V1HIvtEcY
bQlpPpGgZg7bnHTDJPbWEBd1X+pVodoypu+Jt165v63Mqm9Su0T5pBLBWXVO
pgzD0D5rUhL2dLCGn/anEq7gS9viNzRBSTAnkyrpc+Ns3/KaVinNN53zGhyJ
DsHN5zJpljYAJ0ay05Ya2uTvbczg6EfPWeExYpb11NvoCasGNUn/ZIJiQZDU
7CLm/DMsIqErkoqxUwc4uaBSkHNGxLskvbNuQnbMwQQA61qcJmbTiyHxQjal
XJyOkVbN7d3oFAbPuhodgyOTtnyrzbZwsCbGYUbjCt9us0Z5xJ6xeKUyE3lE
+4dJUEHMuPA5imprrtaUg9BaUx7SfVV/gpoaMIG1WLvoOpZE9ySFUVc8FWty
03K8p5Gh6Jqpmc7gsG9PwuK2sfgFJF6jJm7pevvo2dryPVurYSUzvT3XHcw4
H9wdr89iXEbqS9XmQE8TllBthA1HBwfRT5SGJcqDGHVNCTf/CnObRmQ8wBri
QuLoVQUo1+8MQ8Bd+q6qzpIlN8ZmkNowOBBFMP7eRoHn04mtfaOG4Zo6FVds
CRYcCIcUiimGodo4dJMsupbR5sZGN3qCf2FcM0Fw2/xQJys4ewPAuKBqHeaR
iWiGISnohOqhtqitaX1jdF5Lhn2yvWHPRXPJOrtzEf06sRKULq5qgRHiU07S
X2JLMeU/W2piLMvhJkaKkUZS8uXIxvJjrd1kIhoOjbdkBSWICmzscGhI1XWQ
oNRxRtFfioZ8iMGsKc5ZGEkoTaCWXRNXOIvCIiOVSfF0BVcHUZJOkMWk48Q5
RNhWSB/WuOXBq9OT10fvXtv6oy+PTg9fnvxZHMl1yBlRzRvWLylp9sWFqyXN
wjwpib2l8+qaYFIWsgpfwLWOIUCTi+oGeM6qRVFXmt7fuXYRif5N2o6kFzZi
gifgVmWT1OTMM6RoLi1J6QVaGglWdV7qqpr7WXMtVlfL8p4k4b7UAgjici13
NOgrQc2m6mJihQ9nrbbkVe1O9aNvraEpTQcn0sEeBmksoBmdShDYKWkznY7i
ZCbc/f64RlMUiu0eDwv89puOuOoe+BZQCeAy7k1jPG3ozYpXxD3o9T6lpKzM
YLt1dZg2KBQCb1oTNLBNJqgq38C2XgjWQNjvut/6b8iG4nrfOVU7QFofmGTp
5uxAXSZDgIeDC0q4+ZvUJ8IuASIPTbREV06qd0x+aNC82DONcOknaLDHSPXd
ljioTrgBT0tjFKJuh1wEuyySS2QGIDuYjXjHe+sfq2Q2CBSDftRSqSUkopi9
NkcthyvL0G3/mM6ZhGGAmZva6AKuUokJ98PloJzU06nychU4TDy5md72MKTB
ZLwaOyoBkGZU9YPbxlJ21XAnDPU2w5SfnSZYo5DUqZ6SE8jCAKZGlZjQTZAl
mUDWnfpl3/+ZSOWatzNSSb91EgRw+CAWk2DVaDO39nGvXcjlNB8RlJT+SNcd
nWtk8GaLfPwx8Wzd1HMJrVazZJJSbUB04rvrzcGIvoXXCvtaN40zpY9zeiWG
O/ACNNqQzZ8VWeMoNvXeZsCxrlGQCW2jrNb5/sw0aQ1vMpZPYzsL7M0iWVyn
ca0DBnu7tBvrejFFPVdEYbY9m4CQcVyKgEpN3hPLNeHgCLHM3jhvsZIkW7r1
ZEUMJTvEIHYiU8tVVZdasJ6klYzJhiUt4oO+NcWQOdoDFoZpsUhQnQXdEHLb
oYF6m8xywEnHXdDcijYVvDhMmxYZgfkGeOzVbasvhAYyokQqVXrJspWzR8O4
2XF2WA5XEjTVBU0RF7fYLlcikUativwGfJgMC2Rvw4lt4xiKASBcp2FchUq+
UNbubF8QrWCJSxB07YPzN1IxFkQYd0SLUtX2BE7gpEW7avewq89kyw7wgSDV
k7xNnXcwBeYxbRyqRMsUBx6YViqpmIG5yAhWb7TtPsUlnBZBOg0ZdykMpuvA
0jgdSEyAhQenx0GTehzh5ODsrXy682yHPp1jrdRFxubnCSV4vqPyuSjgdTqv
McKEzf4SYmN0jqaoDZqEn3ZBReEb+9P/v7137W7jStaDv+tX9NKsLIkyAPNO
SjmeLEqibeboFpHyeF7PRGgADbIjsJsHDYhiZJ3fnl1PVe1duy8gKNsz82ZF
yRxLZPfufald93pq8QqFVtiBS6dbYOHuix3NACpBxOe5uo13MxOKi5zxqWh0
N22B3zOk2+aXdHZU8FxzSJMJtvTrprlBrLvrJmkLHf0UnBAjPlox/KBVr7jw
qKgXvZGjgH3w9Z/DQRqFsEPIBbAQd5yMqWc3sFytBgYGT9sKrGRIgpFfFr79
QecM3O8ustkVp+h+EC5JaF8VineftRpNvOe97n7Te4Mt7kESrI1eXIcHBd/p
NSR0fMm7xN090FQUoBJUzhnZRz9mTlkE7ZoJvpV+O5fkZD2XIDVF3PCJENoI
JiGysxClUGvEF0WbaKOFIQX+WYBk76J/LiwkumzYgE68rtG+kwR8dFXIuIaj
oc3LIA7etBZt5eaPTp9xmllC5U4MmUKd79w+TDS5vCMVhPoOajFgTPneJB2a
Nb832tswMJOod+lgx/hSuZPwIHleIl+nFFUsL9KJ0yYX7LeAT3jGzRyDQXoL
8k/IGrsRZ6DGfn31DucNEotrx3AYrGr9l3z+UwdsEaxwk2akrSibPX5kkzW7
bQgqeM9UEO0fUNQUIOtaGEonohIriZQUBsHL2uZR19OA9qqTaIg4WbAlLoCy
xfVyY+pv5zULIypGaziYzufl8qpWVMKJvaSze1zmPj8HFR4z4QsxyixTkSaX
krbW/Eq9liMu6/W1nutUXsOS6NhU5BxQayfCKNSQEwWM69xOOfBckwMB83vB
UMxO3dZrkaXSZ7CVgSuDm934ZNOWQCd9I6Ca84HKAYoPymnupI/n05p3U3y4
YBwzSQ1JliOnBznrw2lx6SVFBbqBttfoPeTu0+roql6rDrecYVhVjCrcziB8
i0xlL4t2UWp2rR15zLSbNo6mps8f52L8R/E5tDvUGFYJ7KurOVDTWW09arbc
PNjMls+8L7Lz0pk1RPdDTZS84cw8cz5v5BcvyLEnjg+9LQdSF327RPNQdRyI
iJy3pNc7WemzY0TmfR2PlFSmW1EckTaCoK8jb2yQ417DcYoCSROAH76S3PVG
Yajt+NHNS4efaczg9KXq8lfJiy9UsvF9/abV34/wWXehUrnZDne2dw92Blub
m1I4a2Z7iEKt8ITTxA4Hu9tcIJJVLV5p338IXbw5/TiGu2Fj54YNYZ+vEiKD
MP1TrxYI7t6Nsc46NMW9wXrsFtYu2diZuQmOn85RNNeSpC2WeLioPu7ldkAX
HYum3yKWtAUShw8a/fxKP1e2FONpSUhVC1pOnjPMEzTkNlaW1o2FyEeMwxTE
zdX88koCj+TYIMZSxT1FOgIbt10sx+zcvww8R9THTXrCmbkTpGA2vwJSJ2m9
ORzUDKnJjhKBaRKU2FM+hhdlwIhNfsAxNDVZkUqcExc3pUDoQFtMgr7gQImB
OiRN1XdVJfUmiFumjipC9G+jood3VC4I+dIteGI6IvFIjwYmPNOFyNTGzfwC
6iwtizoxhU5KzIxohJh58UY/3BYOZrYgniqyXjzQ6iLKzK/zH5jtPFPJl1Mh
s0rJ9vonW6WMStepzD/q4MIvvwx9/8/hyyGzddRpYROkkvdjVvvWLdlinDRZ
D1Uzdpcbl6PySpvMkoRUNNTX2ibS9FDx7vD4w3BGL8YXq3a8QZSV48LcaPdA
bPbb6FPiJx0cKERvYTo2ZaJJVsWxD7YHnzf7X/B/hoOoL13Y4Jh6I4xUiN+v
+eqrwecX/aYc1uSSWDEwIld6CsbeI9v0hQU1TfnQp/Td1QSry/g6roecoxH0
9W08u42Zr/NxVR/WnsPh4PPuNu9qIzCFiIPkhq1Zo47mw+c487xqPfJwF25V
EtmzkGviEKJbdcbFF52tMX9JiUdAHndwGInU1P0T9WYe9SCz75tolPq0inrC
GVJqUf6ujfuwaJ7dtqh+vCh5WE0eyyHsWvh2FzddFAvuZiZBnWuI7fh+Wm6u
zf58Axl0NUHWx4717IpwJxWddXfb8Oee3yTWneDoakUlH5H3C6yypAXOfE5O
RzaSu//jC0s7vh5SDGPCHDspDEEZfd5vOgHZhFWJJnOmle2OYhqqzItY9Ncx
h63vFZ/tdeuegerpKIkVRmCG5Ah43uikHJKPDXeo4qBsrQ7FqOZBg2rpESON
/KhZM2X23lE7Mq5ZSnGhsFAI8bUIOgYDJnhTjxJF5R11d6/qMR/Tee7du7QT
UhCFW+IbFBgPcc2i2RcclFtWgSxp+HJZzY1S9lpWYXJb675YWnzY73BX2Koo
EiAOOt3WHb77vUdDSDmhfgwfYTJ2VvkHxKXHc2c4UfUPOER6SeiEbkGqoFQB
SQwFHaMb0QZoYHwrnY+TIf1ryG1ilcolW/09Ghj5X0XtrMYf3us/h9rigdpi
eeAsaT/iRM5PkvV+Jroq5sffHfw0DLpnF8MO9j+ii6iG0bPG6HL8XirUPjE4
Cx/hDOrf5UNuoBerlUsZz8B6MdsBIrNt0VHrs8vqaCrNsMxZJN8kZ8mjJN59
R4b2uEx2EbprlqGRosli4g3iZDN3HQf1I62NUmQpS4xg7/GAnAjRyC/G8OJs
0K5Wco8jUk4nvuHetW95BxeR6VV/i6G2rioMvixHEh2T9zHaEqNyPhHA1/iq
5VNRNlM4z5mnDH96f5kTmgL9lNMA/M/TT+hl1AtR5ro6qrqWIQFJMqsRwhm+
Igp1++/TT8Pb1NguzRCX5TNW0se8v8i9bf7iLorr+p8bfMYC+2f8cdEOQBKk
/ZKPFf1RzAabAga5pz3Z9CET95SyQQjImVOVfeu63088DKJzkTOAb+cySyuk
QQVYG3tPU+4GF926qB6HYd6bujmAC4gd+XFR0uJb7RklQBlvDP2TnoMh2X6A
cR3gSfxLaWYc1LB8AUW2Ckzc3yGjNwZ5whWaYKqUM9SGEPCgQwkk7zoSXEaS
mCSpkqqEtyDecCx1UTUyujWF15cMzLlRY6G8vs66Jgyrot0PaHvdIt32qfu+
vOQQL2lvuljJnnD05X5+nouW3poNvkRNXyFVFn4EbLDvISpWAC/I2x7sjlRY
MCwEqwoKEwejvCK6LOxDUEUoVXN5tfCJ39Ny3iUQ6e1ZyjooAxWvWJCWloT1
tEdNZGXWcjOSxNQDUGhF02jz6gM4SiHXVBDKKp9wX1uorKHWga9dYqOtT5XV
xYM7CEZ6CzhLbbnwtKVR1TyHZ4J+fp3eRMTQFGy2Ux00Rl8yAv8sl9aWc24K
RV9eFgs3MWnzIO2LdPHa1AK5Z9w5jQ88B1t51Lw5WEJ5xVpDJjU3PDFVURuk
ytDoGrhC3Kjn4fqF2aeLOklU7DCGJeqFvfibF5k0NhwjgaRlin5utVGJ3fX0
IlPG8aKNIqilLqhiXaKgCYRCt985YMJ8iHvCszey0JuRC7ouyJuSx46evTxO
jn3yV707QGRtUTAIi+xMfOHkX4wpraf29va01uC1VgTHvdys2rUb8ob4zdoM
3EFhcOS6zpk30BbeTwW7ILtPPRs/SLS6LHQa24eHvC+cJeuNQatWuM3PJbVM
v4PWBdTUiv8p1MOpKtNswTEf0cQvIRk50Yj/vcKf64zufMrxl4bRTqaxoyj9
NU9LwGGylolQ58KSBBDFrLN0oeAvvp7Ab46ks2YEn6A5+JwODT0WjNEZEO6I
2OGwkop7wYFlPlXdOEKcl4X0R2e3Ical+osJ27vob94SWW9XLzusdT738WXW
11LzfhcViM9BU/nTeBk1opKmiGRJJZKMh+BjTFfS6FWSLIkCCDe/cz6DFVP1
2aQ4nHBYDdrkEBl69nFvcF9k38zvZqChAH7hy/ENMcyzKNiGtBV5RXBi8CaQ
FMmCqc8HtWF8aaSKegmwsZU3MvSYbgwnlHKTmWKY3i3n/O7tC++tYxSSIvnx
7OwN9ftKHh5JAvJGwlRWKXpFSjil85s+0o71MI0FuEXuUw/6/nhrC6Dv0qqI
9lmj5SIRx6io9Sn+yFaxN5WIihkGR3zeUb4v5SSXM64oC4biCgKoTAlg5ezf
cdbos1hnESY7BgoHTvQjQYLNWAVNx9Gp+IHnwHGtbt/Pji/OaX9lSM7MJGUP
DcfGsITP1XJqnoS2DzDYuMF5QKnn5K/MuE6WGS6clwsGnwRBCu+1XDyqAoLZ
Hd7lrkperV+xiyPylVmojLJouVzSrAktwuou9ubwRB2iI4XWnM0xIb8Qgp7G
vcYE55MbtTKPmN1Icv4CidSZY/HLKhbWjA7IKihL6HdBfOOWdEWZ7907vVPD
Qtu0W2wHX0EHnUql243om0R6FoCdVVU+RrByUyOVaochllkduonZdOHzZPFX
wuGkQRFYDfbjvlhDAfaw2/VhKnvOdLQH0V6DSy1UBClYYOuAvTo2bx2rtqtj
ptgPHdPU66qUHCdpcn+y4hY2q5bhGrWvt2XgEfO5uZIiReX5o8yy/apEMhJX
3lAuMO+cZUeBBzX3yS+itkvJa+1TXWSfTPt020etSSv+TKrbtaIVACgd4DE9
AcjEAun6K9mvPA+tLpqU18Ws5OZsIrZrLaNW6NcbPcuIfMizHmmIbrMXt27S
901G+rdX2aVdWR+suE+cpB9wGO8La87nCUuTNum7TTUENek7sCdS+QzK26aJ
ayc6pmZCpgutB2a1zTR168x9lPvVlRlZy0Bo5EXHaVAd9t3BYG89/2C97tsb
SW1ZhGlFth+Xf6Kl3F14dwM8L7oX8aolFhRnmRLktk8u9ZmojTTE9dicrJeB
EdbIGv7SMiF2ILRNyh5SAyK8O/3PepVZwcivpAxEk17jcK64Aj9/XoQYcFtW
4erdbrGfahUzresWOl4xbrpWnrDftVvFAbxWE/Vp3iodpMS0LTdF0ptKP15X
7rbHnIs/yMKpbuzpuknpovLvFasPPZY7hHeMh6+FOe3XvUL+NKderXfvyWHz
PGiez6KaOPGxyD/JzVJWi4qTDQLXItI4klqdG32EgU07OSkbiXAHUoWFgPEx
xgITobgX2bahXzSMS3Iaojd96SGCUml2zPLu8+f/xmWO24ToPJd/M+bSE/IS
NartgzOXxXOqOv+bE1Xm6HyiNN7ub3gLiEAHxOm8cNsivnfF3AggLlLofHby
4pjAPx+6J6b5TMAIO/MzMYuXZ8/69DLk7+KigQRdZMB2DI3FLwEqO3Ga2vgC
VO7FKZA1aEaOxhyXJ7vjXYGSUt3eXgM0I3KCayu+ajlCjTXRx5sTx/df1Kpf
Gc8Y8cnQv07rHwdMShzVuVjGWbzcrzxuMk7l1jopBKTcYPhCwWBBwNGdLIHI
OsnP8wV59QMqJuVVcctlXzDfo+bJHrPaPNFQTkGCYbC54TosJRkNglNq4PsB
njTE5bc0rqO3Eg1dASZMHQUo/uUuKlWsIzLl0+TtDn4gbQd+bHYVckm92R3T
FbG0MwSSlcZgJBzA/WXdS6CSqBetR8h377zxQ4L27HTEahStaJp/ouQ7pHVw
d1rs1jwTaA2LSWcGWniMAdZiuQG0ga8rNI/mRsOqFo+NrT1EclFGo9W+FteN
s/lp2OUolDgRGIU9fDYgGZDZzRZOVPjBgezEMQbbYfiFuyPcaSZANZNHTedP
HGMax5m1ErgBPkfIjqG8yxd5u6sZoYa0dFjTPIWUoT64/bmgLrM/SzD+MiZE
CS94oAIinlxx2SCYpL8yy0RScWkm105gEmS7vSGSrfeALtsCXWO5IbdbzEsA
7EYo0GO4JgGwgFv5jHJ+isl1PgFkcUWYt1p6GUGasNcLPfhAqZcydqhMhWAJ
jOSk4LQuQbGEO11fQr/deYTM6KErmiAKY8mPJF/9tdqWjJAQXXe3Qcifae+q
Zd+TUMaffJcAlaBnVgwGWMePVEMzuqkhFQPBMED++fYoARyxJmM8xHQvaEd8
o/LFYqaRW1QpSfXXsmCSIA5G8xLwE9rFlV9S2I5eaFaZMlg1CiQ8ageLFsEi
qTI4FEPpqONFFUNCGEFV6/1oIV8IbN3tHWn28EETcMCTIPVU9lYhCugvwCxD
AxhyMRYLc8GZG0l4HxQs3n9yIDGMO2+HSENhF+ScvLwsBfSPr7smEzxU4bWh
rHcOnc9devq38A4QOfEwlW5ejqcLyQuAqsF/fVAF0Qw5FNDyMpkguZLSq3SM
pBNBoRb5LTgf8bPllagFPHtE7/VCY3tF7uiSnX6EDGLBrE3VKbm8Uq8CuTzm
5zYt1ENaxGnQJNhokdRm4tTrE4K5RecCT84IzcAm6vTgNjoTuVgvmXfovTph
NVGUMMcXeiLVmSfNWZg5HrDwlUwTTG28gLgQtO9xi137UrkU2nNouzHbFGUq
32JihyXsnZHEKXu15TMKzCWLEImDcZqkJLXJrXEjcd0adT4h+SMMs+4YU8+O
QKcaG8nHL2FB9rDlRuXBbE+KTi1UaoK4g567bVnKQHPZJy6BItrkFddTLCTg
KADaKqkA0eS+rCWVAZ9fGDfzCXxUbh2AaW+uFuX5PL26kAX7Pmhe+vn91lMR
B17YM8rj8m3BPQ7TTcDz4A/2ouwPT/u6w9brhnujEPAGvT5ytIX9w3HTAbAq
31SMQBjCuFjICExfox9uK09k1/wzQfG2/WkoAYpROYqWnilStXqHHnZNCVo4
Lo7ckzTKCU8nWb+cTtFT5etFGfwCZCcUlMQPZW0pMU5/UOdLJ3Pcybd0OGiT
ZzQmV4r6YWkXKDNoQfgmpGSxq5/fCH2FAJEVOkwIlQYV3KNkujd4ED81j2VU
SxmT8LijHWqIyIna0J00KFZTQLTwral0bARgACC1kMt+WdUDESJGaDJhraTE
Uwp8mk96QY2ad8rzfMoW9UWWUqGATKkMbgUly40Qs5EkOMdInLSf51IPBSWO
uw24c0XyunyFne1zp/3dCPBACw5JBNUP+TMXvhJKLSNyr20w+47EwhGcIVO+
HHop/Mg726t/RDqTorKLftGrU1ZXvWGiyiBs847EcLB6DmTS8VNyi2oxou97
p6EF0E/KsbNEJQ0MAN60z8gnJq848okbRSB2J1WB0lUyxID8sGOyfCexlbwH
Bo+M/Pi2e8LbSF54WDkoHqKuKOf2RAV9qF6Co52T6Nx8ujsDv/qmUN7Q0GKw
IMQtxvsUmgnejlqMumue0vwoMkpggJQ/SOcRcm8qZ9Rxf5KKgSh9Uk5oLvOS
dkTabNH2rzcp8VUtCzEUaYambZhQN0nT2WwFvoZtZRfwY/mTYo71FJmCcTxk
14uoLVD8ddCmBRRkjQfbd0bOHTZH5RQjpw1/udnCJkIzN/sg2Ap+i7hdkShg
RoSyTulVNo+yonl0QVMXU4NZgEHBzNz6btycLmMw4lzaUwpSifv8kWG9hDcj
7Y4M64x8W7pJ+TyePLLvKFSpPQB8XzuNo4Z1CiKgiX5KIE+yhd2sCeRmfuPz
ajlnmLxEtkte5NzjmUUIoooaSvcNqpJmeyi+XZxIEoBIgBDTbEKFXh856bW9
ps1+W2DOg6DGlrnvXUJs1K3Ls5CQAZJOLjLB1x0FcOvaSUmJO3fqmXAHKctf
HOuciEsBzYhEz1PRMkiOSRlun5seYWVgvOEiXTLPdzaYHrMBIzdZLZrLFrQK
Oo1Grz63v62fR4oaY9XW6ZNIclFGsLW9VUQgClptl3voVqlRP5UdLd8S95oq
vZw7vPDQW1JcwZi1VBcUss0bnIzRWxtdq2gbJ/SVWcTtajCSTrO4mpOZN2ZJ
wRfGcc6LlHONBFj9uP/sjHRPMrOvAhSPd41zTkzl8TTVMwv/Yc+tTxGVm0BH
4QLofokSGXU96sJXRa+jS1SeS3I1LY2aLN3itgodiUryl1xyjWrE+s7LdFaJ
kHVCoIAiSXh/LDbYCgw3X49Xk71DcQMvXguK6deUWdSWwyogCLTJCri1LMju
mZWVpUGvfDHmsqQ1XlHhTSUgcDaTVflRSXLYVqBKzERZaSWys5l5KwC9RsA2
T9JPCpVZ3rMCUN8pKUFaRhwxTC/3GzUhLN4AWWlbMirheQFtnfO0yrBu43zm
6cgZgNn7g89aj/2IET17HazMZ3PUeB0LOcFioqoZpgqDMqUwZxqR4KoOkJ/3
T3hmrAJNW4t5xmxbS8Ut1Ei43SQfsuwKQwpVGhaCm8n1NjQ4W+xGDsWQxU1r
sVJ8sweV55dOKnDcQS3JsTMQc8mIDt0XT4lp4lNd+9dyVXmCPGENlpripRpA
vHvEkn4USAJ2faSp+Kx+HA1CcPWjCZGJNld3nfH2AEwrEMhSPeiuzBWbHqN5
iaQdxQgWJ4WxR99S6mM6UwjkDjAiyQ2t1S/21kgT8MVMNm0sCKBmehfszUHy
vbh55r/5K3WeR7EZep+cvw1wNm6AmX5iyGZ4y6Rm7rZSkQ4mJioscIUd+yfs
szlvecjA5bxbzm3tUMdsBa9PE+16llUIuEokrzWdA9P6YO+/qPf/Gpn9jNLQ
lXtKlXkSbaKTMRCrg+SofbntuPVQPgDNwUd+zTHIWa0cV+yBuAfIwhBL7Y2w
0KPKjxwak6EjGoXqfJOHiBAit3Bi8kfEv4vCP/y7Ba5Bv1YvtJhpoFTFaX3K
U7RhbSsCEGlCKZaivUgOEJeO+5ALLCcpKm/FmoyILvVkR+HqebnQPg5O16Ss
FPZyxZRZx3nv3CcGu8/FKKQPmMhf8yi1IaEUiqD3KsF0U411qjVCnuJkCNpA
Ghlo+r6DSYihWq8LmWp5sURRy8Dne6kxRswF63fbooF2n3CLYk/6ThDTgqPB
eZ1a9WC8Z7RNCI72os9omtalNBaoNUnS9aTAm9Wr3wUU57tf2Wh11321Gh+0
INR4tm+V5cDXtxdym9KhFpxcWKWeZv+UvJnnH9PxTSPziai5/XddqZZbm2tV
0nkMc7bwydBemRkvfcxNmUHrnSSzBKUqUk+sVQ5To5p6ftOBjcRFpFpTIt1t
qQAMgRce2GrY8hOop1ylHNxZbl1z1FSGH0lkib2gnFzIVmrASJF+uXhZSCT8
El7qspCOnXwNpjm5pB2Rc+vpdLFI3RXXrKyDHZOFFeOc1EvQ5wKuuyy85Q7B
UE96rIZy18K81KqhVhoMZ8ueLk7gPzHtZCp29JnxJXGTNap69eZ0RhkWjeRW
NETCR33YjKOR7sxHFMgguj7VfvUtKX22az3FW5BypM8bLRNexOIG+WuVMzlY
topBWmt3FlrTC2Jj7rvjXmcBV07jed7ZHqUR+kjVoNvXQ/lq2UepXR7dcLtq
FWG1ru5hUlUQQD43h3OSuNa56PZUN8Z90NGas9MSr3v4ND0UxB8CQj4HznyA
Xf/RjwCa3R3gC5/NA+Co71WhNZL1gHSto6VukbZQ1ERA7NTt5elZxwYhSiS9
QtMLydXhuDeq3zypW2aFbi9xr952/jVQiJ80OmKISbwGB2qIpqYec8sTJ2K6
iN6PMnkvNaxg6mS/uixNYx/1eMCPIOoIXVJ2GALkFrhi7J4j4Hx4yHhz41/F
7Z7dY8jd8N25JFOHTeIUtX5orOCOgtwbabHgJYt6Gl0igyailT3cjsMmCeaV
YmZCicMVmahGH7DRmXuLcom4PiaIb3MIChZqRXmNk747vfySbBOd5ZgRUr3n
gtV8ioLauaCyAOF3zQ3R9ik30h3IF67a9grcUYe8K6iCXdxsMHItRAO5O+h4
3bWQ2L74+cNnQ+IbyT9akk/wMaN4TwwTVziKSou56QvUPfPK5Es2x5YEHOyc
NQ0lvthcOnMEPw9WbDX7YJQlxh0EQ4LVtpjPohUaKVO8mTIrOUBxRdjFctob
N5UXNoL1Tpgn5uxbsAudCroJknL5HDx4+5lxKTEhRk4m08hGe/CY5pvaevMj
1/65ywvHoNbuoLGD2YJI5XyLXEUJRGhBtolaexlocsyclWB9EHbuUbI3Z7B6
UURW0mxWk1wkBthpNc/+F0uDprcQXqqW0IiHjbCq4MLc4qYdg9bztDqmha51
9OQi+HJdMjO48ZPkfXFaDvzvjGqkPvIjZ8/OZjY7N3ScDindvpUSR8ugqAYd
wdmMlPEHRTB3NFlOgxi0nvS6a7eRejN1upvYVtp9jWAE6VBqJBbOt1nmXhfW
ITUp5CBFIFze88fZGYvynHtqiD+yllmvQbVOXYFyDIW8OU7BhRKhz1w5fyLZ
7cxo3E9mXLiChAnHe/u4qb6uRlGUpLmlFs4GxbwlGu1jKH7Pod+3pDtIbBeJ
iiV3O9WKXDsbe7QgppyS3B03e2Mh5kyq0Twz5ygVIpOm8ZMWpuFhFGY2Tfaw
wEHyE6/T66Rc6CG513JjTXyS954+ylE2UuJJKEYePO1S3Or2D1VclYhEoXEB
vKulVqlDXh+R8vNAYXkc9sVKvGOcT1GNkVUTC4eqDeDIedKxjVLbqPMUDsx1
U8ZT3rhH7DRGsI6inuIt/uA1dXIKgzQLc1DssG5PbGdtSlzIgFfTsUx36JiA
fKxAokXZnOeoOqC6+szWaQhCOPAgumptbR3latWbOPLmcd9rK5CMDJfkFaMv
rTQ1EF+56cbp8tphFB3kHETRqaP9UNnvFi1SqT0mr8qkfxkpkvBKf4QoSzn3
1seRTjzkHVW6h/6L5oO+VAjhXL2DHpGmhmrMKk7p0UfQlbtjF9TcIx6jx6rd
WeJtUKqoH45lAaYQ398ZLOUTJ6OAgt/TKb/XqOdC9fpJ9snfRtlWLDC+ZhR4
Mbk0FHMRIAsPcFAEouFYdYyTazuV1EI+nf0rV1zMlqDq3a8jZ15T7sv3EkS6
d29FAdtCC7OCXOUCBLc8cj4EbIxK/IzLCvqrmzVj5Zh0QgO2FuDGcDVCI0rO
1Iz8AMG1bfhR3EmjTZ6xWIzUlFbZnEteiOQAdk7Z4HtL8bMbjE5DMjpCYQZs
8voi+LpflzFbDRn8In514Evy9s5ImVzoB2CJhPFrtrRIi0Luhzet8V3hdp7N
Vsg+5EsipIT8npoD1apmFCWMIJjbVC2p5YP6HsenQwItt3JmToQIu1Y1ulXz
qeTo0ndS+M5YvTb1xgffCaTFUJAmELqtZjZjdBsOywsbBalNl3OW5SZfT9Os
/K4/AO4sW8oA4ZGg7Akn6OLOFqVmHJPD0SsCBModrmuwywNRm/QE0z20rrBo
g8kRGGk+ES00DjRQkDlsIXvUZ4AxIlZAFpmn5qBoQHNxy50uZz5dDaYB+wNY
0wZ6jKrx7hAmbE5BNwJsiqNqntRlWrhtIo4gXToVmMY/QWZjnp4XxMg6Q55I
0ETLXxgRtTAZGn0Ac6deBcYuVV2EIh76GIhdGA9fa81LNrOySz9jn3ZDnVgD
Mw2CHZVJvjX2LXMzeFt2ii1bH2jKzJKB1hhVnWg7AgSSEcLujTKBXzdVhrfn
N6k8i3IK0mhuwsSQdzaNOuNYngsJVWvOTegeoBk2XoUm/dwDQoH4ui08bZTA
BcokYyWL0jEGyVONEhuWZz7lqYEuufe4REPX1IO6uW8SFAHDx/A93MReqSYk
jvgfeTx9R0eTmcEKZxRMdQHh4ry1on9CAehzXYa2y24T/ngzoybpaVQqIvl8
nPSvLb96sXpAUUV7xJA1aIsgig9vlHkEEbBWldJSNqUwSlQ1s6gCrCOy38J+
t60zIXQFcKFOuk2ihLx8obqO9IhPTvSAnfbjgRC8kRZTLTrlejRWQzudpaP6
ewHzuDHKUyQJgUAbEvRED9FWjiHCo+JsKd0cIvL0/azYLQ6NhuSMd3hrAG+a
zh3bRhAj9NWBi9daomiKFubYZwdJiyDqefHF2g48tp7RqLVgpEuUKEeqCbRq
9seECVXmfml2Jbs+o52zAQu5gDFg7iiKLEk5Ix0/EYuatfazeSMvoxd/05j4
0hhGlH0Mq61JBSk/5cJ6QllbZtwzek7OWDc6/0hzHpWAKbQCU019EbhsWRWx
PGiu34eBfbQBBYj5YuEvJ88JIoGTjqSGKuSLlfoxmyCRsl3wIvRdwkBtu6P8
y/dvDNlm4FUoYIhT2zjxBMRIVRnVheMyg+RhewbwYIMuBgdRoB8C4qaZviYW
GOGDtAfccr2IeeucQ5fMy/TTKSYsnYLZES5ICv/urvGPUN890ka3qxaW+Doe
clGPW8M8qO+UoiAJ8fChBxvTgqtKDZQpedb6/OCLnkkYget6I/AI+mCtQNVf
2FlZah6rR9hRtAhb0B/9WgYsbppv9UTx95kndXW6Z5CDVgULRDup5ewEJPVq
sZyIJnKdpR/izRUwplPKyZh876zscg6QLYhqfRPCn9tJI+t9LmHtLAqkVBlF
J7itgxY+ovyfscUD5iU1PBUkM3AR5HHQ730VKgk/cgVL2lcluosQgPuaTwH2
tCQedg4jk4vH40kjib7kG5TzF5VhgP+QJlDOfY6tJNbZr0lZ222xHy3Vlziw
O895jmBsoE+FVRGaIpmmPuCWcka+e6/cNX6bXS0nnMShSaW+CGkKz8IKCgmi
EumrYveZ0mANI1srDfADQQGfZGFM8YC3tKgX74+Xdv7qCvpJAzxETVbFQdFQ
THv1kgIjGreXnTJdMPV1suuLvEZxtpzbudVp71T4uVbWQo+RxcXlEHIjyH2S
jHIGJfPBIxNj0kwFKt4OO8rJDV5ZEW4Y6s56UvH4yH31UctGemA/c1/q/sJe
gAitB/MNAOH2YIvRf0PIcKPpy4vpg5sCGBJoLVa5oCShKBNtZ7DNWIfhWz3v
C7tAo/ox+qSmWjwmK0fNSxZbwM0Abah78wyifr0jbsjkBcd6B42ZXAqPztPs
48bZgfUjYjs12nfrdwheGezhgyoZijxk6euE74m7ciR/hxb+S0HwwF8KG1XX
1ITVsVfr8qZjhvZqiYf8hLWUtLzi0/EhWDkd0nd0BTkDeiqJI+zIPhv3IE09
knsyL84JqSTLH/xPAPq1KPHl2TOnmR1zbgWbGvI1lBL57leCyxK6ILIzC7bk
K2e1/TzY23wcfu3VIkb5cnt59vTUKDf6zYG8bqZxRjCaooqK/CGzkLmjr5eT
HfZYDs1xfCeCjgF5gLAgxl93m9RYis/c7PRk2wYzl+XE8zoVddclf64/c/vY
3EVOrObYXyT7BslroE0BU8gYCw2rIoqG0mVzF5YbIseqkpytO7bnjQJkgPNI
bRKxeq6JCdvgg8QErXSKmk96wWs9EeqPAGvWgRpES8U3HLEu6seYvItmaz5e
1mBqKvm8lGHrXFRVouSusF9cmu4MfPIEhtpSqZhvISc2oKOdCZOuTD6SvgHJ
//Ld6ZmSGJXh5wu/m2JxRodBgLHs7wkLHRA+4Rryku7BKCdNxafCCJyF4r3Z
eKcKScO3ZRYStRDPvrPkFhfTJZCcZ2l+afMHIwVlGo0GPxjyKMkv0imtsKMS
SO1rZF84hzT9YXsVrnOoYGa3atcS6IQ1yr6RLY2JhQHbGrHwE5KcyLq7iQ29
rB/CqIqdWuvyEjCckW1neKjuNGeSyP1vXMEbYwSkJvtiSPMfMrPyQVFWKTh8
ytvD2YHkKqqWlyZ+p85IsH2fFRMKURtJg1ZVa5mkuX/qsXQ7U8478pf8eTO3
TNFykZBLgW9YP7/kuP4NRPeC61NzWLENqZQ7k0hNpxnnWAStXfR+U4Uq1w2S
j6GZy3l9Wb2a+quhmxBZZULP2fFMVzmjeu6oF2++aJZpOrNt5uUzSe0SQNNS
KO+EACVsPn91mhQpNY1/5wsddD3GiwNVfIrWDlA1xG/DHrLSA432ovcbM5J8
ImS6OCJoNhpUw7fKF8tUq0kaxdEexMj7tRvH+hcOMdeydSa+rTF30vIMlG8s
6TAtWoT4On2DZul7KJUT1vDTbK9unZWWE/va8bTRLZqVhy8JzMQDOFAjjtNX
TsP2UD8Ig/OsH8T5goyjkY4ITJZyPQi0kAHCxUlX6z2B7lKCYJZqBZJCZnov
Mkl1WELz5UywAzAjQm1htLBegLiDb/f58VvH5n4e7D/eJF4WIJTUZthVfHTY
DIe7++SvACW4qZwXIrfs81vWotnbPsTA7HOt0ptKDtGkoihGUMjFpo13M+tj
Pe6HsXKoAZxgBdrk6F5igOKlfJj4YHbLqFoddclnihSfv2jyefunfDFNvp6s
kNpWECAjHsJBU5tGAd7Yrg+DncD9KM0dMOmif2kIUSkDpvGyyP9jmXHnDRy2
J5GA4eapsDYTT8acnmI+oXxlxW6yb5Bd6y1v1p6GRPO9P4fSDnPYS4ZgRXP6
G9bghqC/i30VHniHdZ48N780P0IjycA2htpMiSnvKs9MA5DazNSL1nocbntZ
nQ85SlzQ44vPTXw5+FvqZimte8i3+xX81uj/SQjhPoWiixwouYx4A3v4vWCq
2r7DuUd6F+3MKk2dOrvgkysmJIGGnnhlx4jQm7dm7YmudUdgwvveaOxVCgpP
odmPYrDB+SceA9nHFise+ykuiHSlpd9YoLdE44TUTm0qb1WkeisnLv1k2OUU
EvrV1PShA4VIcNyvCD+9jfkiteM/lrn7cCZN06PqXm26JUXlMZuIgXxJAyQ+
re865upEJWlvEWups+umxzxv4p5AfSBGfeXTv9HpEZYkNMWy0Irg9n1BWlDy
1Eo0UjAq5If4iIGbaU9D8IXa7o0Jepw92ZOnZn2D6F8qN5jTChtQwAwJuXio
OJR3cLADFgbkbW0drKk97WatigkCz5nh/rNMCous/OMaTG0BmVeIvqoE8d4E
TgjPV+F4Yqq1c6ifABu4pQTPyPtOT3EDM32UIXJuZwSShoADFG6GBj2hid2c
cXJPj//Hu+NXz46TRXrOefKOzs8JSWe8yHy3gE7hprl8ZllEzEI4NBy3T7Vy
n9T+QrtZPWKV1smRG70X/ygB5sFO6ONBdRJrJ6ZajcXwhiI9kXn6b1+/PaWa
HPtjPlEXS79t/OTYcMeewdDx8sexzxTai+dUWgnSi3Qg8PZAEiQZaDLtMskf
niRQdpxbdGzgIb8b5Z7BTWYzKVn2cmqsagGOK7TzW5gqzHRbpwBfVeQxDilr
vsqyQ7FCmVvkORlF6ib4LJg351lQDeh4wcB8lRafSCKqlTJmooCr9gmClSkn
vIXLNYxnTpxgn4Y5AYHU0ymw/jsmfME5cflOb7F4exuNBvz8bEvAKanXNFMm
mw6Z4XfRoNBaZA6EDtlGbjVK0KlLESSMwLkF+9k0rnenefzs+elR3fzr1e0r
KLKU/Be+8VLtW0cPb6DJhmXgNDg85vOxu1i9MxwntsSeiGwmnqda8xVyV2E/
5cd8ohpcKJcLdolpfKxDsFDdyOQyX8QmEAKOZeV31YuooGAcWREu7ug5MIbV
ojNSMATyrWuCRLGqPYraGG8MOAt8Tnq8cDT0VraVYSfIWw/mIW6hFbkBteRZ
iXEYOBAf3CckRCFxE/DnxBfqYkos7fWz0zeitTmVmzJi2QfWhQvAHlbOOIf6
UE8QquQMRze1JDwOk3AolHPYpE0Ap4DB7xZgrtCdgFSk65JBoFYjNPI2nnqy
f14iu/CUszpkX+298LlIpsWQ/22ff4tqU0AIVD4bbJaOMoDnuX8aR9iEv1f5
7xn7hu0UNCYSwoTaSvFN5vbEAkjZmLlzgBcPo/dqfVuAmEDhj0+2MoCg8hf5
gosDsCt0EwLq3NoBDkallACHj8TQJA0yn+bZx+SjiDke+dNM3EegtENZY6dk
uQY6h1ma07IZ8YJDE3rSMDnVrOmSez399wsPD4CZvpWZPif/oGF6Mks5hETG
5JvFhr7WK7BH0gcveb01NyX3Uxhlzg5UncIq1ab9tkoX9yAJOmdLb37a2dTk
8aPTZycn3EMpub95n69ec/+YJJdVNxmzDkzpGN9+3Ppb8bfNYS8wFjNP9xGV
kjkZec40re9NEzWZYRgwBwVE0vshuCa0NLekyOa7d+95YyHk/r6pKPPT9mIz
27oIsMJUwzVPz3My0uLsOFhH7Qfmc4XwJSQH1LhtqBE09CEs1k+P7lnHDVAl
5YKrzainWnaecim0uIlREit8Z5B8z6zQcocPwQXP/IH7B5Ujmrxn5D0EM8gl
1saZ4ABRbkHKHAcH3Bso75jWtARBnZGQQaXp1tQKxMcA2jvR5atKzh50lYNL
Yq8G+qPyfe/rk6iJzz3qccpINA2nCV5UCt4iqdN4L4YlTOroFQUDEHHvOai/
YaU9MGSnG6HgNS6hi6ZU2d05MvWTptRAEUIwWq3SPtTY3YLWHBdF1j7bWCYL
WfFmj24ILol1J5/aXZtcJKepEndG6RWCAsgCF1ecsfQZYmDsvjLPSwQII620
lrg16TM4SAPDrFY7YYKZT5otBdZLHxcViQt4GzCetnYC+6Tl/3xPeaOQ6AOW
XdyE4quoLGQV8kUUqazj4sctWDx2RXycgutfSOcUJlDGPApeSUpyExg075bc
QDIqshQaQ9IR0FxgXtjGKJS+LbZbIxvqMsvUMWnAvJvIALL57nKfO/5CGQvc
EkZxGeL3o0ZgjavMgZVUsHNe1vD4fc4ocTcgiUtFm3joaOZt35H3NErTdXxV
4/xC4DJdIIWaeb+meSDMDIeEvDNwtulQZ+tTrsUtkfosNu0GnetBNw53v3G2
09pHwOCdnMzHq8nkcX2kkAzlnS/jo2RUls6gKrT2wd0VxPwXKtLj9Mm4ayfz
NtV0cIziMQwzW2Ni7p//O5uXBCc+m/ZbQuaqicTYdO3f43TISgB2ZIZ8AZkL
spCI2WcdNwhnkypSE+DeTo5eHbVCvcmlgh3jra63TrWqpB6XW2RNlo5GT7yt
6baYBhTMqaySBAQK38c+3yi19v7py5MAPEck9ubfT35ujn7fjYoJKITOwfbj
x/AE/5o8z8aAKqe/kVRkdZr+/OqmPeW7VSW/3vu1r3/C31p/4h51WvdzGSOf
9C9L97/FuL+9ub3nfvILCY6+m8Xf3ajYjiPtdnnHbZBgQsc2+FGrf/z69w+S
sP50dk7rZw9L2/qtf8GnT/6ue9H6ha/blo4/d9itjj+NTdw5NJt4ldEeRrqn
b4LcP/3xaHtvv3VvX+TFB8JKYdlCOalfubHNgWK6IhZ2uH14iA30z71yrOPJ
vSdJOr7M+gwXm876yvjdXMz20nPYxEpUKH3eC4o4SdsZAHmhRmQbiIYFmm0C
xrDiMfZdFMJH6pBMjC8cnvShzSj/mtPO1fQrkoy7xE1rg+cR6D76DQnd0PrD
AfbQtEo7VhnmTO3aqaAku474auehppLie+U9ZHxmveR+l73irF899jdaDhO+
dd9t4TlBwiX/drFYXFVPvv32+vp6kDvVdVDOz7/1Jt6f2dlEyWts05m+Iayj
VqrIz/3oZgEkhYTV0xK6p+vXpC0YnZyjwj/2TYNWb90guy3N1+97kXgvXBB5
RdQ231mFe4HjPmxt7/N9QJlmzC3Mu2+gqd9byRHCn3ubnzbdn6SfbH46/v77
791op45Ygwb5VuBH3IPf64Pf84OAGHZU+K7K9HDkBksYVLCGcm4E66b+Exzn
dup0p9s53+0rsD/QdZiRiuVs9p75Dv8g3Ad+ess+vRhV7+lmyBvNp7ftHr0r
vE8Wr7fszttMAmUQHGGr4qFbSMzLlN9KbLWB/h/Z/XFk94eShlOog/6ZPLvI
CYSgvHSGJZnhd6WP1aPdJxlI3u4mYaAWqP2UIloZJD9x+lB1kQqeW3ED90+R
nbOBRmnI5woQvObxrXFotxyVvIXAiR3G7PmWPiMwwVXLM9u1Z36Yl8urqnZ2
7oPOkhx/IPuGvaVsSUgoin90ycbFUjH5x9S2sGCTx/cDY9cYb/De461ttED9
z//8z7QqBlviJSQpZoXYvST57E6rfLi1EYJwk74TqGkh2UMPdzac7Td5uL/B
SeFFtnBP36OlKZTow70NE+Oif119yD89PNgQQ+ThJj9fM0seOoNlI3GKxfPj
709enZydvH51mpy8fPPi5NnJWXJ29MNp8uTJd/eeHv9w8soR78s3r9+enbqB
Tk9+eHV09u7tcf/oxQ+v356c/fiylzw/+eH49Mz+xJsigYo/f+m5979/+/ql
+W0o9XCz2nycuANx8v8X2cW/Y+a/YZPuvk1+o9K2OW5uP9w7pG1LAt+uPn/R
dZHl0ecEaTDzf7U10a95eljJAa+EaDKsxq5l6wTl6PniX3EhW/1cZ0eLecyL
+YnzpXrgQz1icsiU6iWSA+XJsZf4JJpgN0eLP/70r7z47JNZvJvCl+S/OrbV
nqvhbnKIw33GaJJXlsR/ftn8e3L8szAB2crEcYijdy/Oko9bPeYkSDNLWv5g
z3l42ffmM/5EmIuJY3DVWPWcJ39crVzmzbunbvr9fz/+a+9e2xzjP59biODL
l/bvam5vkrx+dnZ8lpyevT159YPdE82z89u59ffAU+sEmLx+Q1z36EX0tdoQ
v2yvP4IpcLJHumOO1DCtz/G1//Jljd3yf/TD95wAqft7Xj/978fPzpKT58ev
zk6+Pzl+C/L7LNt09+tiLwoGab8snl9X9P7+Acm2Kg3TahFcZmJmtrX14Ndv
jt4evTxNjt4eU42Dm7wsfB0fzT9pP64yenbnkPbBUcbt8zz++ez41ak7VjO/
07++Ojv6mfTb9nfjvXuePP3rmp4rvPjMncLJs6MXJ2d/Tc7evjumTXVsVqs6
t//n7qEUm3FXz5DmHqXeNIA8Bvfc51/mBQPiJCevzo5/kG3fPtzaPdh9fLB/
sLW576YRf29/t78lX6SuZ3f9okLwRF/cOtzd3T/Y3d082DnYfLy3t7W/tYdq
+Pb9aePVzlBx3In+1sbwWjWyz4PBQPnYZWMnHtr9GQzs3DfkncZaVr1DB3f8
6jkpvKRKW6/NqaYSiE4NC4P1KVRKq29I49OSPhCNERLh0A8k4E8S1tyc4p2C
o+TLGhRaTvsYSxIObC5AogUQJWrPGKqKpQx2nE04OyYGbAqtQDhJ4Cl//238
/Xv3/sJurDRaBVtsaD6Fgqqr8powFYDw2etejqDjZ+n0QSWYv1TewbYIQkAL
KVulZ9hYo7/xR2bZlOAeyXxUoIosrRbIjwfxUR9Sgc4s0A+S0v6TOYNR63v8
gPs1D482hXjLAx3RyJy+kJu2XCkKSItyIvUEFWHBUQX/NHcMFnvTpw3tu8Gq
PpWDf/ni9vySg1kLjeQ3tpKy4WgfD5+wkZVWH89VfH1TNy+/0d/8yvJws5c4
FT78wP1hN+nO7UMk38Zy8G/37OPf1F7Ha7/ii7sb+jX3713M4Nfw5e3bh9Ev
/602k7/d+0Ze6vjvvV/d97c3fk1+/WW7t4v/7vb28d/93qH7r8xh69aB6Jt/
k283/uvepic7/3fv1033yS33v233vx33v133vz33v333vwM/jc1bByIm8/lJ
8qdOGkoW+WKWfXf/qNCIdjvx3P/CnqnOazfcRbnXcHO0tbk5VF7Cl8hdK6eY
yxWhZ+lU9zeGJsVtxYOHjQf5xpHINk+CVIeO1xxTkQVvkO8Tn2UGRIYDKLiU
TmTlklTmc03Cg5TXfCNijLJ/4G3c1JusZSftTEIZJNgLZhNda+2TyIOj4CDF
5afWmZi7zMYXFyKthN2c1RNlUPQGMy+nfnHmq4A1DX9xTHq+6FFyzcaw55/2
49NhPT05e/+Xk+dnPz4k0I1+glfcf7ewkdytBMsEhDUDkNaqHecSy6ou8is3
38U1wU+h0U7Iubpw50VRDoZUoAFphwJnlsS5hZwy3mSPLVblTgu7yICo9fwZ
FgaLNsG2ix3fR8RKCJNretzftyi7kc45Q7e22c2qqVKGlPvP1sBJsYVTfjDK
8oqhnDUPwC9esGW8WGWdybB/SRw168ROhrXSxujkZdWcsXheegw54Yb8BpiS
ggUI5UjypfYeSuduCXN3efsVfmSuedUpZhANTFnSXOVjJP628Yf924VLi2jZ
35B/rpYprRLl1zYx8GubEHlk5Var9Pi1TWj82sXjO4XErdKhXSp0MfFOKXAr
+1/N9uVM1+T8+8T5TUX+/xb4UPtsSOiN1DQUOWCqoZ0Gce7L0l2wbBIAscCw
0JHxQ351xfm2jWfzuhZHiHv0S9ZNpeKAB9Cvyk0AJJ6TBXR3WwXYIPnR9IsO
g9JH91T4EJZdu/gDb9kaCspGqizD6YDafs9IFMuzg+Yo7xrtctWruk+AYk55
/2QvoW/ac8CZSUqo7A4NYyAdaUdp969R9cS1T4+QpvrItAWJpkvgTRN5FL/N
CqSCyr5VMYxcWTim/Rff+CMah+aFUjzfgMEsUDRsO28cg+e5XLfEyVeoQ6L0
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
nvuykXy2Iw3cGT7c+PK34sGAb9XDjY171FmA1k6/nOTnjhk83Ei++y558FuP
4gGfBUcYicdkn7L5OCeUPoRDG2zvQRWnjI3TGXVOYVOempNQTl0VyXePYoXE
Gu4hgHYc+AIz9CoLZX4VN/aQB6MeCD3OC+keXQOGFKqOuyfUuLeA7IeurbXC
1QLbAadxeZ6PpauNtGdjLV12atVaYwZYy/mzrLDuLvjnc8Vp87uc4SapDyHx
10Tj12elJ6+eH/+cWIbKwfzCfFlzEtvyHUwtS23vqJKFk0Imv2DGf/eJ3F0Q
CKkT4OTeBtve3tyIuPoqvipVdZT5gf6OOYc+VwgCrNvz63bubzZbmPwfID5u
Y/LpeDs9nD4+fJzt7k4eP852Hj92LGX3cHNvczrdm249Ptg7mEz3dsbT0cHW
fpoebm1u7U12Hu/tTQ639nem/5cweRqOsyz9cJ3PYuQ4k9LN/zxbvK/99OHz
XhJG6fEHNhpjgYK+S6YPPuOBL0ldcjxovELTvYrsTP5ic6L+A9/QF5LPVyJ4
mmMa0fWZ3lhXNv1WClohm1or3mosokK2IzfIVv2MGjI1BIMEIzX5j6rstddP
19Cak4NqkthoMGKBHCEQHgafhXOcppyQr2j2vfXlkDQwpeYlVg5nXPZ5y3x5
CJmwtMoJTI5lG9ZEYwUGG+npTjvcFqAV4tEdX1SOG8bs+Q1u5eeo3mRKYh8O
9eT28sPaWnFI127C4N6OmRnVFGSXV+6E7zBHNZ5NXplmhlHy3+hGuk+JOxNf
TY503tQ8y6fg8yzEgHcH7Uy63a/cOMKXnNw6pSIguXzV7CJdpRF9sdpKW+Rl
hb5SrKOt1JQa1I78q5h6r1brJk3/4m2Vtt4x0uGTZz9OvZTmH6im/HH26qt1
lJ9ieJt6srU5TR8/HjkTZ/rY/f/pNN3eH+1ubU9Hk8eHo8nB3s7+jlMXJpuj
g73J/tZovLu3czh6PH483ks304PdP1Y9KYK2EGsmdb2lqCkma2kvd9Ng6I8h
wkgvafycNJPCKicrtJKmHVu0aA9eI2l865+hk/xWsrmrTtJWVIuIlmlNOJNG
72IHa7F+NjinZCRRRfrBPSPS+ezF6x/6fzk5e3V8eopY8r+2StK2E3+0UtKR
pB5LV7/3TU0E1dHjcZZRr97VusVan/rN2gXmur5usdakfj/tYsXs9r52dtNZ
fqXAWeoJuFouYr1v3Vnsf90sNDG/cerd07v73KB9Hfsuic+0N6SW9P4RnqA7
qEMvjr8/ey86Ef4OxeiXtyc//Oh/zv+AL2ddv3gYltIvdGD6uxlZvSB+/LXU
ER+75h0pJh4FgEK19DOOkCpjbaaIkMKsB4JOLVS24lS7AJiooDjQ6WrZBrco
MAfTyeOxEy3b+9njyfZobzw93Nna29/MDsfZ9uO9dC+bPj5IJ3vjvWyS7Wbp
5iRLtw/Tw/Hh1L022vyX9q/QFr+X3cDf4ebAfuuP+R/0qqoiTPCq0FQP25SQ
yI0evkI6iH7HncQvn82n6Hf+Y1821lQUfuvxiKJAnQQR8GsPrjpaCsFTn4hG
PCeINneYF6nTAThDjH7XGkdthDdtdPOoJXp5wxF+2oslkTHKnKbu0obIuDQ0
BcICxy3xhZAyfDV3tw/oCugWPs7mhWDk1dz20myQShFT4P4ZJwtWgoCs3Bl8
qlqEqG5d/bCg8cCc/7dqefXn3cN/+5b+20cVmenqzvH+l2fPOI0wAFBxdlVo
9eEb3tM9ArgE3yMFjeCIJ0KgHl0B+ts0B6qIe506GQFrYn+3z1IB7Z8qcDwo
ftIwC42E+e8ANPFKGrq1C7ZE7dQq7Z4tJVM+q7sZdAcljErCJQAPrm9RT36y
vxN+QjxRfrrrt9LxmHgOycujv0ryGmiR5WR9fEkru/F4VtwanlvqMhXFDgft
aGLcDBpM6WP7jY+hmZMQ2flAuurE09lAqo+wsErA5TIGqpFVHPAqiKnd9qgs
mOIftzy6v732qHoo64y6s/6ou2bUlj2kY4r3Md4pWfG+jLL2tt36Xsceyqy3
ut7r2tBb3+vY3dqoa2/1re9F+/6VAcH6Ffj8GXLFj/BGXEshvzYU4zXZQ5ef
+Jaw2m/zEXYswYzydYv4OqS7W9RttxKv+/VVN/FGeAtHMmzZz75ihDBJSkKe
m+Qtqf+vlpZeZbMMDoT+4ro0Jv9A4R6hcFEV0SenlG1+OtwMfxTL3WI64QL7
p3ejp+U39ofNIZvf3as9P1l3Crd8iB86rD0Uj96czcE0/KkNurVyNite7J5N
PHpzNmbMjJ43/56unM3qF5sPTVseWjWblufXm03bh75uNg0KXI9mtxtvyG/r
v2gfvjmP7cPme/uH9fdWTGvNDzeJvvtrzVnuTOM/LR9ZTd9rDLB6ls2vrb59
Srq1n62mtPUGaH942vHwbbPseG/9WXZ9+LfNssETbyXEu1Nec/jV/F3fmzTe
W5PPr/hwk8N2f229M62NtT7/7xhg9SybX1vNgactrP1WyltvgPaHG1y5i/LW
e2/9WXZ9+G6zpGbCY8IVmVE1D6oV7n1+oi13vruP5Pz7qnp50Blg8Hl4KEbF
IbhlZ/ef56nCY3sEPHRNG6cTdptcl/MPpIidvThN0iVFfBc+p/vnwd7mY7aR
TXPQ5MztY4U66LFAQaVoQlcJJMYs/5BJb7Hig6RzlyhPKH3VxGKej5Cjokjd
iVuSUyxvQnKkejvURaIfiRA3+BtPy1HyNBt/6Dmldu4M8KdlUWSzWS95e5MW
yfN8/KGi9Rylc7f4HzjW88r9NPkxnV8RlPd/T8duiB/L6fQyLfpHxWSeXVfu
9WVVuZ8uq1l200ueZ0Xh9t09y8OdOI04T17ky+pjms7TXvIyXbipXycvx28u
srnTnnvJqZtetrhIXjrzSJ5IXi4zQshz/6KNer0sKncIiws3+Yu5G/+Ne4aG
f5mPL9Jslryl/84n+CTWczrLso95Lzm+JC/UqbPJPvAhvXVrOF3M0wnc2qRv
X1KFDBIgyKckMGicbwpvZ0VOwkpcVbNMXOOGuHo2w3WaZRPqes0NovQQMZy4
1D1N5gun108HyV8oc7S6COTwMk8dMc2okblA6nmPFQN41px2iE4lWTqfERTP
ZJ5OCRHxY5bSbKsMMEXJVb5wd8NTSj7JUvriZV5oWCJLJ1Q3M0UTdbi2CRJB
S3DcP0P94ehGtzx5ms4Lrrf5/Pn07Mf+c7eB+RWCr1qEiB4wBp6HHra+O9u3
G/kZBefrjv3yGIxKpozcCnPXZB95XQtz8SiG6DjS+CJfZAIt7w7l6M0JVyd4
9DK3rvy8oJqTj9msvApRxh9KvHGan1fUrnJeUhNZeKgcHYJRui+0s58/J48e
vf3+WXLsLmI5f1AlBGPx5NGj5A2BpKEaDXEkayBezfMS6GNX6IobDteNxgED
bSysW6K0JI0BcgK8w/n3J+nHfDLKiv5iVkW9KGjnqv7mZvu0+24Qavw8DQCe
oxuerEI+cLdUoijiMlwmYMDuR7PSUT+d+SD508E2DXn0scwFeY3iZH5d01nJ
SUdAAqzc8/vUNDR5SzVQFAZy88gc2WTIJyZo5+SS0r/IeKb41YjSv947Mxkj
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
0juUntBq6Q3u/R8hXVOy0u0CAA==

-->

</rfc>
