<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.3.12) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

<?rfc tocindent="yes"?>

<rfc ipr="trust200902" docName="draft-dogru-cedulon-decision-profile-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Cedulon Decision Profile">Cedulon Decision Profile: Reconciling an Agent's Decisions Against Its Effects</title>

    <author initials="E. C." surname="Dogru" fullname="Emek Can Dogru">
      <organization>VERAX TEKNOLOJI LIMITED SIRKETI</organization>
      <address>
        <postal>
          <country>Turkey</country>
        </postal>
        <email>e.dogru@cedulon.com</email>
      </address>
    </author>

    <date year="2026" month="September" day="04"/>

    <area>sec</area>
    
    <keyword>Cedulon</keyword> <keyword>agent</keyword> <keyword>decision</keyword> <keyword>reconciliation</keyword> <keyword>completeness</keyword>

    <abstract>


<?line 55?>

<t>The Cedulon core document reconciles an issuer's signed Spend Receipts
against an authenticated extract of a payment rail and reports, over a
declared population, that no settlement lacks a receipt and no settled
receipt is absent from the rail. Money is the special case that
document implements. This document defines a second population on the
same reconciler. A Decision Record is signed by the party that decided
whether an agent may act; an Effect Extract is an authenticated list
of the effects that actually occurred on a channel. An allow must be
matched by exactly one effect whose content hash the record named; a
refusal must be matched by none. The Decision Record claim set, the
Effect Extract shape, the points at which the reconciliation departs
from the spend rules, the finding codes, and one media type are
defined. The text is provisional and the companion implementation
carries the profile prepared and unpublished.</t>



    </abstract>



  </front>

  <middle>


<?line 72?>

<section anchor="introduction"><name>Introduction</name>

<t>The Cedulon core document <xref target="CEDULON"/> answers one question
about an agent that spends: did every settlement on the rail have a
receipt behind it, and did every settled receipt reach the rail? It
answers it by closing three signed objects over a declared population:
the issuer's records, an authenticated extract of the counterparty
system, and epoch checkpoints that total the records. The verifier
holds the keys out of band and the report names the population it
covered.</t>

<t>An agent that acts without spending raises the same question with
different nouns. A party decided whether the agent may reply, post,
send, or call; a channel carried whatever the agent then did. Did every
effect on the channel have a decision behind it? Did every allowed
action occur, once, with the content that was allowed? Did anything
occur that was refused? Section 19 of <xref target="CEDULON"/> reserves later
profiles in name only, and its Section 19.3 sketches the same
completeness calculus for other consumable resources: compute, data,
energy. This document is a different population on the same
reconciler, decisions against effects rather than another unit of
spend, and it is the first profile written out.</t>

<t>The profile keeps the core's three roles and its verification
algorithm. What changes is the record, the row, the binding between
them, and the words the report uses. What does not change is
measured: the companion implementation holds the spend behaviour byte
for byte behind a golden file, and every rule in this document that
departs from the spend rules is stated as a departure.</t>

<t>This document is a companion to the core document, not a revision of
it. It is not an IETF working-group item. Its requirement language is
provisional in the sense Section 19 of <xref target="CEDULON"/> gives the
structures it reserves: a direction written with the core's
discipline, not a commitment, and a later revision may change it. The
companion implementation carries the profile prepared and
unpublished.</t>

</section>
<section anchor="terminology"><name>Terminology</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>Terms defined in the core document keep their meaning here: Policy
Decision Point, epoch checkpoint, trust root, population, finding,
warning, guarantee. The following are specific to this profile.</t>

<dl>
  <dt>Decider:</dt>
  <dd>
    <t>The party that decides, per request, whether the agent may act. It
signs Decision Records and epoch checkpoints over them. Its key is
the issuer root of this profile (<xref target="roots"/>).</t>
  </dd>
  <dt>Subject:</dt>
  <dd>
    <t>The party on whose request the decision was taken, named in the
record as an opaque identifier.</t>
  </dd>
  <dt>Decision Record:</dt>
  <dd>
    <t>A COSE_Sign1 object signed by the Decider stating one decision:
allow, deny, or defer, with the request it answered, the policy it
applied, and, for an allow, the reference and the content hash of
the effect it allowed (<xref target="record"/>).</t>
  </dd>
  <dt>Effect:</dt>
  <dd>
    <t>One thing that happened on a channel as a result of, or in the
absence of, a decision: a message sent, a post made, a call placed.
It is identified by a reference, classed by a short name, and bound
by the SHA-256 of its content.</t>
  </dd>
  <dt>Channel:</dt>
  <dd>
    <t>The system on which effects occur and from which an Effect Extract
is taken. It plays the role a rail plays in the core document.</t>
  </dd>
  <dt>Effect Extract:</dt>
  <dd>
    <t>The authenticated list of effects on one channel, for one Decider,
over one window (<xref target="extract"/>). It plays the role a rail extract
plays in the core document.</t>
  </dd>
  <dt>Refusal:</dt>
  <dd>
    <t>A Decision Record whose decision is deny or defer. A refusal expects
no effect.</t>
  </dd>
</dl>

</section>
<section anchor="population"><name>The population</name>

<t>The core document's reconciler closes an issuer record against a
counterparty row over a declared population. This profile fills the
same three roles:</t>

<texttable>
      <ttcol align='left'>Role</ttcol>
      <ttcol align='left'>Spend (core)</ttcol>
      <ttcol align='left'>Decision (this document)</ttcol>
      <c>Issuer record</c>
      <c>Spend Receipt</c>
      <c>Decision Record</c>
      <c>Counterparty row</c>
      <c>settlement record on a rail extract</c>
      <c>effect row on an Effect Extract</c>
      <c>Match key</c>
      <c><spanx style="verb">ref</spanx></c>
      <c><spanx style="verb">ref</spanx></c>
      <c>Content binding</c>
      <c>amount and currency equal</c>
      <c>allow: a row exists and <spanx style="verb">effectHash</spanx> is equal; refusal: no row</c>
      <c>Record that expects no row</c>
      <c><spanx style="verb">outcome</spanx> aborted</c>
      <c><spanx style="verb">decision</spanx> deny or defer</c>
      <c>Aggregate witness</c>
      <c>checkpoint <spanx style="verb">totals</spanx> per currency</c>
      <c>checkpoint <spanx style="verb">totals</spanx> per decision kind</c>
      <c>Declared population</c>
      <c>account, rail, window</c>
      <c>decider, channel, window</c>
</texttable>

<t>Which population a presented document belongs to is the verifier's
call, made by the profile it applies, and never the document's. A
verifier applying this profile <bcp14>MUST</bcp14> read every presented record as a
Decision Record and every presented extract as an Effect Extract, and
<bcp14>MUST</bcp14> refuse by name a document that does not have that shape; it <bcp14>MUST
NOT</bcp14> infer the population from members a body happens to carry
(<spanx style="verb">MUST-DP-1</spanx>). The companion found the alternative wrong in both
directions: a rail extract that added a member named <spanx style="verb">effects</spanx> was
re-routed away from the spend rules it was subject to, and an Effect
Extract handed to the spend rules crashed before any report existed.
Under this profile a rail extract is the wrong document and is refused
as one; under the spend rules an Effect Extract is refused the same
way.</t>

</section>
<section anchor="record"><name>Decision Record</name>

<t>A Decision Record is COSE_Sign1 with the header profile of Section 6.2
of <xref target="CEDULON"/>: deterministic CBOR, <spanx style="verb">alg</spanx> <spanx style="verb">-19</spanx> (Ed25519,
<xref target="RFC9864"/>), <spanx style="verb">kid</spanx> mandatory and computed as the core states, an empty
unprotected header refused by name if not empty, and the payload the
CBOR encoding of the claim map below. The content type header
parameter is <spanx style="verb">application/cedulon-decision-record+cbor</spanx> (<xref target="iana"/>).</t>

<section anchor="record-labels"><name>Claim labels</name>

<t>The labels lie in the Private Use range of the CWT Claims registry
<xref target="RFC8392"/>, below the block the core document uses for the Decision
Token (<spanx style="verb">-70301</spanx> to <spanx style="verb">-70305</spanx>) and the countersignature (<spanx style="verb">-70401</spanx>,
<spanx style="verb">-70402</spanx>), so that no two Cedulon claim maps share a label. Every
claim annotated <spanx style="verb">hash</spanx> carries a SHA-256 <xref target="RFC6234"/> digest rendered
as exactly 64 lowercase hexadecimal characters, the grammar of Section
6.1 of <xref target="CEDULON"/>, and a value outside that grammar is
refused by name at signing and at verification.</t>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Claim</ttcol>
      <ttcol align='left'>CBOR type</ttcol>
      <c>-70501</c>
      <c>decider</c>
      <c>tstr</c>
      <c>-70502</c>
      <c>subject</c>
      <c>tstr</c>
      <c>-70503</c>
      <c>requestHash</c>
      <c>tstr (hash)</c>
      <c>-70504</c>
      <c>policyHash</c>
      <c>tstr (hash)</c>
      <c>-70505</c>
      <c>inputsHash</c>
      <c>tstr (hash) / null</c>
      <c>-70506</c>
      <c>decision</c>
      <c>tstr (<spanx style="verb">allow</spanx> / <spanx style="verb">deny</spanx> / <spanx style="verb">defer</spanx>)</c>
      <c>-70507</c>
      <c>reasonCode</c>
      <c>tstr</c>
      <c>-70508</c>
      <c>ref</c>
      <c>tstr / null</c>
      <c>-70509</c>
      <c>effectHash</c>
      <c>tstr (hash) / null</c>
      <c>-70510</c>
      <c>timestampMs</c>
      <c>uint</c>
      <c>-70511</c>
      <c>nonce</c>
      <c>tstr</c>
      <c>-70512</c>
      <c>prevRecordHash</c>
      <c>tstr (hash) / null</c>
</texttable>

<t>All twelve labels are always present; a nullable claim carries CBOR
null when it has no value.</t>

<t><spanx style="verb">decider</spanx> and <spanx style="verb">subject</spanx> are opaque identifiers chosen by the
deployment. <spanx style="verb">requestHash</spanx> is the SHA-256 of the request the Decider
evaluated, in the canonical encoding of Section 7 of
<xref target="CEDULON"/> when the request is a JSON document and over its
UTF-8 octets when it is text; this document does not fix the request's
fields, and a deployment <bcp14>MUST</bcp14> state what it hashes. <spanx style="verb">policyHash</spanx> is
the SHA-256 of the canonical policy document the Decider applied.
<spanx style="verb">inputsHash</spanx>, when not null, is the SHA-256 of whatever further
context the Decider consulted, encoded the same way, so that a later
reader can tell two decisions on the same request apart by what else
was on the table. <spanx style="verb">reasonCode</spanx> is a short token the deployment
defines; it is carried, not interpreted.</t>

<t><spanx style="verb">ref</spanx> is the reference under which the allowed effect will appear on
the channel, and the key on which the reconciliation matches.
<spanx style="verb">effectHash</spanx> is the SHA-256 of the content of the effect the Decider
allowed, over the octets the channel will carry: for a text reply, the
UTF-8 octets of the text. The Effect Extract computes the same digest
over the same octets (<xref target="extract"/>), so equality of the two is equality
of content.</t>

<t><spanx style="verb">timestampMs</spanx> is the decision time in POSIX milliseconds. <spanx style="verb">nonce</spanx>
identifies the record. <spanx style="verb">prevRecordHash</spanx> links records into the
Decider's chain: it is the SHA-256 of the previous record's COSE_Sign1
octets, the same input the core's <spanx style="verb">receiptHash</spanx> takes on the COSE path
(Section 7.1 of <xref target="CEDULON"/>), or null for the first record
of a chain.</t>

</section>
<section anchor="record-rules"><name>Claim rules</name>

<t>A signer <bcp14>MUST</bcp14> refuse to sign, and a verifier <bcp14>MUST</bcp14> reject, a claim set
that breaks any of the following, naming the rule in the refusal
(<spanx style="verb">MUST-DP-2</spanx>):</t>

<t><list style="symbols">
  <t><spanx style="verb">decision</spanx> is one of <spanx style="verb">allow</spanx>, <spanx style="verb">deny</spanx>, <spanx style="verb">defer</spanx>.</t>
  <t>Every hash-annotated claim that is not null matches the hash grammar.</t>
  <t><spanx style="verb">timestampMs</spanx> is a non-negative integer of magnitude at most 2^53 - 1,
the <spanx style="verb">uint</spanx> the label table states; a CBOR decoder hands back any
number, and the rule is what makes the table true.</t>
  <t>An allow carries a non-empty <spanx style="verb">ref</spanx> and a non-null <spanx style="verb">effectHash</spanx>. An
allow that names no effect is a decision the reconciliation cannot
close, and an allow that names no reference is one it cannot find.</t>
  <t>A refusal carries <spanx style="verb">effectHash</spanx> null. A refusal binds to the absence
of an effect, never to a content hash, so a hash on a refusal would
be a claim the audit cannot measure and a second reading of whether
the effect occurred. A refusal <bcp14>MAY</bcp14> carry a <spanx style="verb">ref</spanx>: it names what was
refused, and an effect appearing under that reference is the worst
finding this profile has (<xref target="codes"/>).</t>
</list></t>

<t>The verifier <bcp14>MUST</bcp14> apply these rules itself, on the claim map it
decoded from the signed payload, and <bcp14>MUST NOT</bcp14> rely on the signer
having applied them (<spanx style="verb">MUST-DP-3</spanx>). The Decider is the party under
audit. A Decider that signed a well-formed COSE_Sign1 over a claim map
that skips a rule has produced an object whose signature verifies, and
a verifier that checked only the signature and the equality of the
decoded map with the presented claims would attest it. The companion
implementation did exactly that until it was measured: an allow with
no reference, signed below the signer's own rules under the pinned
decider key, verified true, was attested, was counted as unmatched,
and the audit still said the books balanced. The rules now run at both
ends.</t>

</section>
<section anchor="record-presentation"><name>Presentation and confusion</name>

<t>A Decision Record is presented as Section 6.3 of <xref target="CEDULON"/>
states for the core's COSE objects: the signed octets, the decoded
claim set, and the Decider's public key as a SubjectPublicKeyInfo PEM
beside them. The carried key is not an identity source. Under a pinned
decider key a record that verifies under the pin while carrying
another key is reported as <spanx style="verb">carried-key-mismatch</spanx>, a warning, and
stays attested; with no pin held the signature check that runs against
the carried key says the record is internally consistent and nothing
about who signed it.</t>

<t>A Decision Record is not a Decision Token. The core's Decision Token
(Section 8 of <xref target="CEDULON"/>) is the portable encoding of a
PDP allow, carried by the party that will spend; a Decision Record is
the Decider's own log of what it decided, kept for audit, and it
exists for refusals as well. The two carry different content types and
different claim maps. A verifier <bcp14>MUST</bcp14> reject a Decision Record whose
content type is not <spanx style="verb">application/cedulon-decision-record+cbor</spanx>, and
<bcp14>MUST</bcp14> reject a token presented as a record or a record presented as a
token, on the content type, before the signature is checked and
before any claim is read (<spanx style="verb">MUST-DP-4</spanx>).</t>

</section>
<section anchor="record-chain"><name>The Decider's chain and checkpoints</name>

<t>Decision Records chain on <spanx style="verb">prevRecordHash</spanx> the way Spend Receipts chain
on <spanx style="verb">prevReceiptHash</spanx>, and the Decider signs epoch checkpoints over
them with the checkpoint claim set of Section 11.1 of
<xref target="CEDULON"/> unchanged: <spanx style="verb">receiptCount</spanx> is the number of
records in the window, <spanx style="verb">chainHeadHash</spanx> is the SHA-256 of the last
record's COSE_Sign1 octets, and <spanx style="verb">totals</spanx> is a map from the three
decision kinds to decimal counts, <spanx style="verb">{"allow": n, "deny": n, "defer":
n}</spanx>, each rendered as a text string as the core renders its currency
totals. A verifier compares the totals it computes over the attested
records in the window against the signed map, and a difference is
<spanx style="verb">checkpoint-total-mismatch</spanx> as in the core.</t>

<t>Two records that claim the same position in a chain cannot both link
to it: the second record's <spanx style="verb">prevRecordHash</spanx> must be the first's hash,
so a Decider that signs two decisions under one nonce, or presents one
record twice, breaks its own chain and the walk names the break. The
chain is the equivocation control of this profile, and a verifier <bcp14>MUST</bcp14>
walk it over every presented record that carries the pinned decider
key, not only over the records that verified, so that a record that
claims the pin and fails the rules is named by the walk rather than
dropped from the population without a word (<spanx style="verb">MUST-DP-5</spanx>).</t>

</section>
</section>
<section anchor="extract"><name>Effect Extract Profile</name>

<t>A verifier checks completeness against an Effect Extract, not against
the Decider's own records alone. The extract is the channel's account
of what happened, obtained independently of the Decider, and the
profile is only as strong as that independence (<xref target="roots"/>).</t>

<section anchor="extract-schema"><name>Body and row schema</name>

<t>The extract body is one JSON document with exactly this shape:</t>

<texttable>
      <ttcol align='left'>Member</ttcol>
      <ttcol align='left'>JSON type</ttcol>
      <c>deciderId</c>
      <c>string (non-empty)</c>
      <c>channelId</c>
      <c>string (non-empty)</c>
      <c>windowStartMs</c>
      <c>number (POSIX milliseconds, a safe integer)</c>
      <c>windowEndMs</c>
      <c>number (POSIX milliseconds, a safe integer, greater than <spanx style="verb">windowStartMs</spanx>)</c>
      <c>effects</c>
      <c>array of effect rows</c>
</texttable>

<t>Each effect row is a JSON object with exactly these members:</t>

<texttable>
      <ttcol align='left'>Member</ttcol>
      <ttcol align='left'>JSON type</ttcol>
      <c>ref</c>
      <c>string (non-empty; the reference the Decision Record named)</c>
      <c>effectHash</c>
      <c>string (SHA-256 of the effect's content, 64 lowercase hex)</c>
      <c>effectClass</c>
      <c>string (non-empty; a short class name the channel defines, such as a reply or a post)</c>
      <c>timestampMs</c>
      <c>number (POSIX milliseconds, a safe integer, inside the window)</c>
      <c>actor</c>
      <c>string (optional; the party the effect reached)</c>
</texttable>

<t>These member names are normative. The body and its rows follow the
core's rail extract (Section 9 of <xref target="CEDULON"/>) in every rule
that document states for a JSON body: the text is read for a repeated
member name before it is parsed and refused as <spanx style="verb">json-duplicate-key</spanx>;
integers are safe integers; the window is half-open and <bcp14>MUST</bcp14> end after
it starts; a missing member, a wrong type, an empty identifier, or a
hash outside the grammar is refused by name at both ends, by the
signer before it signs and by the verifier before it checks a
signature.</t>

<t>The profile departs from the rail extract at two points, and a reader
who knows the core should note both (<spanx style="verb">MUST-DP-6</spanx>):</t>

<t><list style="symbols">
  <t>A member this document does not name is refused, on the body and on
a row. The core lets a rail add members of its own because a rail is
a system the profile does not control; an Effect Extract is produced
by a process the deployment does control (<xref target="roots"/>), and the
companion measured what a free member can do to a population
(<xref target="population"/>). A later revision may open this once a channel that
needs its own members is measured.</t>
  <t>A row whose <spanx style="verb">timestampMs</spanx> falls outside <spanx style="verb">[windowStartMs,
windowEndMs)</spanx> makes the whole extract malformed, refused as
<spanx style="verb">effect-outside-window</spanx> before any signature is checked. The core
accepts such a rail extract and names the row
(<spanx style="verb">extract-scope-mismatch</spanx>). Here the extract is the deployment's own
document and a window it did not keep is a document it did not
produce correctly: a signer applying this schema never produces such
an extract, and a verifier refuses one that is presented as a
document, whatever else it may also name about its rows. The trade
is stated so it can be reversed: a single row out of place fails the
whole window closed.</t>
</list></t>

<t><spanx style="verb">effectHash</spanx> on a row is computed by the extract's signer over the
same octets a Decider hashes for its <spanx style="verb">effectHash</spanx> claim: the content
as the channel carried it. A deployment <bcp14>MUST</bcp14> state those octets once
for both sides; the companion's example channel hashes the UTF-8
octets of the message text.</t>

</section>
<section anchor="extract-auth"><name>Authentication and scope</name>

<t>The extract is signed the way a rail extract is signed: Ed25519
<xref target="RFC8032"/> over the UTF-8 octets of the <xref target="RFC8785"/> encoding of the
body, with the signature as base64 and the signer's public key as a
SubjectPublicKeyInfo PEM beside the body, neither inside the signed
octets. It is a JSON document with a detached signature, not a COSE
object, and like the rail extract it has no media type: the core
registers names for the objects whose content type is checked inside
a protected header, and an extract has no such header. A first cut of
the companion exported a <spanx style="verb">+cbor</spanx> name for it that nothing used; the
name is withdrawn with this revision. Section 9.3 of <xref target="CEDULON"/>
applies unchanged: a
signature proves internal consistency and not origin; the verifier
<bcp14>MUST</bcp14> hold the extract signer's key out of band and <bcp14>MUST</bcp14> compare keys
as SubjectPublicKeyInfo DER; with no key held the guarantee is
conditional and <spanx style="verb">unauthenticated-extract</spanx> is reported; with a key
held, an extract that does not verify under it is
<spanx style="verb">extract-key-mismatch</spanx> and its rows are not reconciled
(<spanx style="verb">settlement-comparison-skipped</spanx>, the core's name for the same
condition).</t>

<t>The extract is scoped to one Decider, one channel, and one window,
and Section 9.4 of <xref target="CEDULON"/> applies with the nouns
renamed: a verifier that knows which Decider, channel, and window it
audits <bcp14>MUST</bcp14> check the extract against them and <bcp14>MUST</bcp14> fail closed on a
mismatch (<spanx style="verb">extract-scope-mismatch</spanx>); one that has not stated the
window <bcp14>MUST</bcp14> report <spanx style="verb">unstated-audit-window</spanx>, one that has not stated
the Decider or the channel <bcp14>MUST</bcp14> report <spanx style="verb">unstated-audit-scope</spanx>, and in
either case the guarantee is conditional. The strongest line this
profile can print, a balanced audit under an unconditional guarantee,
is true of one Decider, on one channel, over one window, and a report
that carries it <bcp14>MUST</bcp14> also carry those three (<spanx style="verb">MUST-DP-7</spanx>).</t>

</section>
</section>
<section anchor="reconciliation"><name>Reconciliation</name>

<t>The verification algorithm of Section 11.4 of <xref target="CEDULON"/>
runs unchanged over this population: establish the subject, verify
the extract, check scope, resolve records against the decider root,
walk the chain, index both sides by <spanx style="verb">ref</spanx>, match, decode and walk the
checkpoints, consult the witness if one is supplied, and decide. This
section states only what the algorithm reads differently.</t>

<section anchor="binding"><name>What binds</name>

<t>A Decision Record expects a row when its decision is <spanx style="verb">allow</spanx>, and
expects none when it is a refusal. For a <spanx style="verb">ref</spanx> that appears once on
each side:</t>

<t><list style="symbols">
  <t>an allow and a row bind when the row's <spanx style="verb">effectHash</spanx> equals the
record's <spanx style="verb">effectHash</spanx>; a difference is <spanx style="verb">effect-mismatch</spanx> (the
content that occurred is not the content that was allowed);</t>
  <t>an allow with no row is <spanx style="verb">decision-without-effect</spanx>;</t>
  <t>a row with no record is <spanx style="verb">effect-without-decision</spanx>;</t>
  <t>a row whose <spanx style="verb">ref</spanx> a refusal names is <spanx style="verb">effect-against-refusal</spanx>.</t>
</list></t>

<t>The last is the finding this profile exists for. A spend audit has no
row that should not be there in the same sense: an aborted receipt
that still carries its reference and a settlement under that
reference is reported by the core as a settlement without a receipt,
and it never told the two cases apart. Here a refusal that was
followed by the effect it refused is a different fact from an effect
nobody decided on, and it has its own name.</t>

<t>A <spanx style="verb">ref</spanx> that appears more than once on a side is <spanx style="verb">duplicate-ref</spanx> as in
the core, and the repeating reference is then reconciled by count
rather than by amount: there is nothing to sum. More rows than
records under one reference is <spanx style="verb">effect-without-decision</spanx>; more
records than rows is <spanx style="verb">decision-without-effect</spanx>.</t>

<t>There is no amount, no currency, no manifest, no terms, and no
counterparty axis on this profile. The core's <spanx style="verb">counterparty-unbound</spanx>
scope record is not emitted: <spanx style="verb">effectHash</spanx> binds the content of the
effect itself, which is more than a payee name ever bound on spend,
and <spanx style="verb">actor</spanx> on a row is carried for the reader, not measured. The
core's boundary rule applies unchanged: an unmatched item inside the
declared clock-skew allowance of a window edge is <spanx style="verb">boundary-deferred</spanx>,
and a closing-edge allow whose <spanx style="verb">ref</spanx> the following extract names is
carried, not a finding.</t>

</section>
<section anchor="conservation"><name>Conservation</name>

<t>With <spanx style="verb">|R|</spanx> the in-scope Decision Records and <spanx style="verb">|E|</spanx> the effect rows, the
identities the core report publishes hold with the words changed:</t>

<figure><artwork><![CDATA[
|R|      = refusals + allows
refusals = deny + defer
allows   = matched + deferred + carried
           + unmatched + repeated + unreconciled
|E|      = matched + deferred
           + unmatched + repeated + unreconciled
matched on |R| equals matched on |E|
]]></artwork></figure>

<t>A report under this profile <bcp14>MUST</bcp14> publish these counts and <bcp14>MUST</bcp14> name
the population they were computed over (<spanx style="verb">MUST-DP-8</spanx>), for the reason
the core gives: a report whose counts do not close is a report that
lost a record somewhere, and a reader is entitled to see that without
re-running the audit. The report publishes refusals as one count, the
core's <spanx style="verb">aborted</spanx>; the split of that count into deny and defer is the
checkpoint's <spanx style="verb">totals</spanx> (<xref target="record-chain"/>), not a counter of the
report.</t>

</section>
<section anchor="codes"><name>Finding codes</name>

<t>The identifiers below are for diagnostic output and are not an
interoperability surface, as Section 11.5 of <xref target="CEDULON"/>
states for the core's codes. Four are new to this profile:</t>

<texttable>
      <ttcol align='left'>Code</ttcol>
      <ttcol align='left'>Effect</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c>decision-without-effect</c>
      <c>audit fails</c>
      <c>An allow names a reference under which no effect occurred, or a reference had more records than rows</c>
      <c>effect-without-decision</c>
      <c>audit fails</c>
      <c>An effect occurred under a reference no Decision Record names, or a reference had more rows than records</c>
      <c>effect-against-refusal</c>
      <c>audit fails</c>
      <c>An effect occurred under a reference a refusal names</c>
      <c>effect-mismatch</c>
      <c>audit fails</c>
      <c>The effect that occurred does not carry the content hash the allow named</c>
</texttable>

<t>The remaining codes a report under this profile can carry are the
core's, with the same effect on the verdict and the guarantee:
<spanx style="verb">duplicate-ref</spanx>, <spanx style="verb">boundary-deferred</spanx>, <spanx style="verb">receipt-chain-break</spanx> for a
break in the Decider's chain (signature, rule, or link),
<spanx style="verb">checkpoint-total-mismatch</spanx>, <spanx style="verb">checkpoint-head-mismatch</spanx>,
<spanx style="verb">window-coverage</spanx>, <spanx style="verb">equivocation</spanx>, <spanx style="verb">unauthenticated-extract</spanx>,
<spanx style="verb">extract-key-mismatch</spanx>, <spanx style="verb">extract-scope-mismatch</spanx>,
<spanx style="verb">extract-settlement-mismatch</spanx> (a caller-supplied row list that
disagrees with the extract), <spanx style="verb">settlement-comparison-skipped</spanx>,
<spanx style="verb">trust-key-unreadable</spanx>, <spanx style="verb">unauthenticated-issuer</spanx>,
<spanx style="verb">issuer-key-mismatch</spanx>, <spanx style="verb">carried-key-mismatch</spanx>,
<spanx style="verb">unstated-audit-window</spanx>, <spanx style="verb">unstated-audit-scope</spanx>, the witness codes,
and <spanx style="verb">malformed-policy-hash</spanx>; the other hash claims of a Decision
Record are refused at verification (<xref target="record-rules"/>) and reach the
chain walk rather than a malformed-hash code. Two code names carry a
spend noun onto this profile
(<spanx style="verb">receipt-chain-break</spanx>, <spanx style="verb">settlement-comparison-skipped</spanx>); they are
kept so that one catalogue serves both populations, and a later
revision may add decision-side aliases.
The codes the core defines for a Trade Manifest, a payee
countersignature, a beneficiary, or a counterparty are not reachable
on this profile.</t>

<t>The sentences a report prints beside those codes are another matter.
An operator reading a decision report <bcp14>SHOULD NOT</bcp14> have to translate
"settlement" as "effect" or "receipt" as "decision record"; an
implementation <bcp14>SHOULD</bcp14> print the sentence in the population's own
words, and the companion holds that under a test that runs every
conformance case and refuses a spend noun in any decision sentence.
Counter names in a returned structure are diagnostic and <bcp14>MAY</bcp14> keep the
core's names.</t>

</section>
</section>
<section anchor="roots"><name>Trust roots</name>

<t>This profile has two roots, filling the core's issuer root and rail
root (Sections 10.1 and 9.3 of <xref target="CEDULON"/>):</t>

<dl>
  <dt>The decider root:</dt>
  <dd>
    <t>The key under which Decision Records and their checkpoints are
attested. Everything Section 10.1 of the core states for the issuer
root applies: a pinned key attests by signature, a carried key is
not an identity, a record under another key is <spanx style="verb">issuer-key-mismatch</spanx>
and covers nothing, and with no pin <spanx style="verb">unauthenticated-issuer</spanx> makes
the guarantee conditional.</t>
  </dd>
  <dt>The effect-extract root:</dt>
  <dd>
    <t>The key under which the Effect Extract is attested. Everything
Section 9.3 of the core states for the rail key applies.</t>
  </dd>
</dl>

<t>The core's payee, witness, decision-token, and manifest roots are not
used by this profile, except that a transparency witness <bcp14>MAY</bcp14> hold the
Decider's checkpoints exactly as it holds a Receipt Issuer's, with
the witness root and codes of the core unchanged.</t>

<t>What the two roots do not cover is the relation between them. The
profile's claim is only as strong as the independence of the party
that signs the Effect Extract from the party that signs the Decision
Records. Where the channel operator signs an export of its own log,
the extract root is that operator's key and the independence is the
operator's. Where the channel operator signs nothing, which is the
common case for a messaging platform, the extract is produced by a
capture process the deployment runs, and the deployment is stating,
by pinning that process's key, that the process is not the Decider
and cannot be told what to omit. A deployment <bcp14>MUST</bcp14> state which of the
two it has, and a verifier <bcp14>MUST</bcp14> treat the guarantee as conditional
where the extract root and the decider root are, or may be, the same
party (<spanx style="verb">MUST-DP-9</spanx>). The companion cannot measure that from the keys
alone; two keys can be held by one hand.</t>

</section>
<section anchor="security"><name>Security Considerations</name>

<t>The core's threat analysis (Section 16 of <xref target="CEDULON"/>)
applies where the nouns carry over: forgery and repudiation of a
signed record (T4), key leakage (T7), and suppression of checkpoints
(T11) are the same threats against a Decider that they are against a
Receipt Issuer, and the controls are the same. The threats below are
the ones this population adds or sharpens.</t>

<section anchor="d1-an-effect-occurs-against-a-refusal"><name>D1: An effect occurs against a refusal</name>

<t>The agent, or something acting through its channel access, does what
the Decider refused. This is the threat the profile exists for. A
Decision Record for the refusal, with the reference it refused, and an
authenticated extract that carries an effect under that reference
make the event <spanx style="verb">effect-against-refusal</spanx>, and the audit fails. A
refusal that carried no reference cannot support this finding; the
effect is then <spanx style="verb">effect-without-decision</spanx>, which also fails the audit
but does not say it was refused. A Decider <bcp14>SHOULD</bcp14> carry the reference
on a refusal whenever the channel assigns one before the decision.</t>

</section>
<section anchor="d2-effects-without-decisions"><name>D2: Effects without decisions</name>

<t>Something acts on the channel that never asked. Every such effect is
<spanx style="verb">effect-without-decision</spanx>. The control is the extract's completeness,
which is the extract root's independence (<xref target="roots"/>); a capture
process the Decider controls can leave the effect out.</t>

</section>
<section anchor="d3-substitution-of-content"><name>D3: Substitution of content</name>

<t>The Decider allows one content and the channel carries another. The
allow's <spanx style="verb">effectHash</spanx> and the row's <spanx style="verb">effectHash</spanx> are computed over the
same octets, and a difference is <spanx style="verb">effect-mismatch</spanx>. The control fails
open if the two sides hash different octets, which is why a
deployment <bcp14>MUST</bcp14> state the octets once for both (<xref target="extract-schema"/>).</t>

</section>
<section anchor="d4-the-decider-signs-below-its-own-rules"><name>D4: The Decider signs below its own rules</name>

<t>A Decider produces a well-formed signature over a claim map that
breaks a rule this profile states: an allow with no reference or no
content hash, a refusal with a content hash, a hash outside the
grammar. Every such record is a record the reconciliation cannot
close or would close wrongly. The verifier applies the rules on the
decoded payload (<spanx style="verb">MUST-DP-3</spanx>) and walks the chain over every record
that claims the pin (<spanx style="verb">MUST-DP-5</spanx>), so the record is refused and named
rather than attested or dropped.</t>

</section>
<section anchor="d5-equivocation-on-the-record-chain"><name>D5: Equivocation on the record chain</name>

<t>The Decider signs two decisions for one request, or presents a record
twice, and offers each to a different reader. The chain
(<spanx style="verb">MUST-DP-5</spanx>) makes the second record unlinkable: it names the same
predecessor as the first, or none, and the walk reports the break.
The epoch checkpoint totals, held by a witness where one is used,
close the other route.</t>

</section>
<section anchor="d6-the-class-of-the-effect-is-not-bound"><name>D6: The class of the effect is not bound</name>

<t>A Decision Record names a reference and a content hash and does not
name the class of effect it allowed. A row of a different class under
the same reference and the same content hash matches. This is a
known gap of this revision: the record has no claim for the class,
and adding one is a claim-set change. A deployment whose channel
assigns references per class closes it by construction; one whose
references are shared across classes does not, and <bcp14>SHOULD</bcp14> say so in
its statement of what it hashes.</t>

</section>
<section anchor="d7-silent-defaults-in-capture"><name>D7: Silent defaults in capture</name>

<t>The process that turns a channel's log into Decision Records or
Effect Extract rows fills a missing value with a default, and the
default hashes to something. An allow with no stated content that is
hashed as the empty string produces a record that will match an empty
effect and mismatch every real one, with no finding that says the
content was never stated. Such a process <bcp14>MUST</bcp14> refuse the line by name
rather than fill it (<spanx style="verb">MUST-DP-10</spanx>). The companion's example adapter
did fill it until it was measured, and refuses it now.</t>

</section>
<section anchor="d8-the-capture-process-is-the-decider"><name>D8: The capture process is the Decider</name>

<t>The party that produces the Effect Extract is, or answers to, the
party that signed the Decision Records. Every finding in D1 and D2
can then be made to disappear by omission, and no signature check
detects it. This is the independence statement of <xref target="roots"/>
(<spanx style="verb">MUST-DP-9</spanx>), and it is a deployment fact the profile can name but
not prove. A verifier that holds both roots and cannot state their
independence has a conditional result, and <bcp14>MUST</bcp14> say so.</t>

</section>
</section>
<section anchor="privacy"><name>Privacy Considerations</name>

<t>A Decision Record carries no request content and no effect content:
hashes of both, an opaque subject identifier, and a reason code. The
Effect Extract carries a reference, a class, a content hash, a time,
and optionally the identifier of the party the effect reached. The
core's Privacy Considerations (Section 15 of <xref target="CEDULON"/>)
apply to what a transparency witness is given.</t>

<t>Two points are specific to this population. A content hash over a
short text is a fingerprint of that text: a reader who can guess the
message can confirm the guess. This revision hashes the plain content
octets, as the companion does, so that the two sides need no shared
secret to agree; a keyed or salted construction that would defeat the
guess is a claim-set change and is not defined here. A deployment
whose effects are short and guessable <bcp14>SHOULD</bcp14> treat the extract and
the records as confidential to the audit. The subject and actor
identifiers are opaque to the profile but need not be opaque to a
reader; a deployment <bcp14>SHOULD</bcp14> pseudonymize them before either object
leaves its control.</t>

</section>
<section anchor="iana"><name>IANA Considerations</name>

<t>This document requests the registration of one media type in the
"Media Types" registry <xref target="RFC6838"/>, in the standards tree, carrying
the <spanx style="verb">+cbor</spanx> structured syntax suffix that <xref target="RFC8949"/> registers, on
the terms Section 17 of <xref target="CEDULON"/> states for that document's six:
it names the one COSE_Sign1 object this document defines and is
checked inside that object's protected header, which is why the name
cannot stay unregistered while that check stands. The Effect Extract
is a JSON document with a detached signature and has no media type
(<xref target="extract-auth"/>). Registration in the standards tree requires IETF
approval; until then, an implementation outside a closed deployment
should treat the name as a placeholder that a registration may
change. The provisional registration procedure of <xref target="RFC6838"/> Section
5.2.1 is available to an Internet-Draft, and a provisional entry, if
one is made, is superseded by the registration this section requests.</t>

<t>The claim labels this document assigns, <spanx style="verb">-70501</spanx> through <spanx style="verb">-70512</spanx>
(<xref target="record-labels"/>), lie in the Private Use range of the "CBOR Web
Token (CWT) Claims" registry <xref target="RFC8392"/>, integer values less than
-65536, and this document requests no assignment for them.</t>

<t>No other IANA action is requested.</t>

<section anchor="iana-record"><name>application/cedulon-decision-record+cbor</name>

<dl>
  <dt>Type name:</dt>
  <dd>
    <t>application</t>
  </dd>
  <dt>Subtype name:</dt>
  <dd>
    <t>cedulon-decision-record+cbor</t>
  </dd>
  <dt>Required parameters:</dt>
  <dd>
    <t>N/A</t>
  </dd>
  <dt>Optional parameters:</dt>
  <dd>
    <t>N/A</t>
  </dd>
  <dt>Encoding considerations:</dt>
  <dd>
    <t>binary. A COSE_Sign1 structure <xref target="RFC9052"/> in deterministic CBOR
<xref target="RFC8949"/>, untagged, as profiled in <xref target="record"/> and in Section 6 of
<xref target="CEDULON"/>.</t>
  </dd>
  <dt>Security considerations:</dt>
  <dd>
    <t>See <xref target="security"/> of this document. The object is signed by the party
under audit; its evidentiary weight depends on the verifier holding
the decider key out of band (<xref target="roots"/>) and on the verifier applying
the claim rules of <xref target="record-rules"/> itself, never on a key the
object carries or on the signer's word that the rules were applied.</t>
  </dd>
  <dt>Interoperability considerations:</dt>
  <dd>
    <t>The claim set is a CBOR map with the labels and types stated in
<xref target="record-labels"/>, encoded per <xref target="RFC8949"/> Section 4.2.1. A decoder
refuses a duplicate key, an input beyond its stated bounds, and a
non-empty unprotected header by name rather than accepting it, as
Section 6 of <xref target="CEDULON"/> requires of every Cedulon object.
A Decision Record and a Decision Token are distinct objects with
distinct content types and are never accepted for one another.</t>
  </dd>
  <dt>Published specification:</dt>
  <dd>
    <t>This document, <xref target="record"/>.</t>
  </dd>
  <dt>Applications that use this media type:</dt>
  <dd>
    <t>Policy decision points and other deciders that log the decisions
they take about an agent's actions, and auditors that reconcile
those logs against the channels the actions occurred on.</t>
  </dd>
  <dt>Fragment identifier considerations:</dt>
  <dd>
    <t>N/A</t>
  </dd>
  <dt>Additional information:</dt>
  <dd>
    <t>Deprecated alias names for this type: N/A. Magic number(s): N/A.
File extension(s): N/A. Macintosh file type code(s): N/A.</t>
  </dd>
  <dt>Person and email address to contact for further information:</dt>
  <dd>
    <t>Emek Can Dogru, e.dogru@cedulon.com</t>
  </dd>
  <dt>Intended usage:</dt>
  <dd>
    <t>COMMON</t>
  </dd>
  <dt>Restrictions on usage:</dt>
  <dd>
    <t>N/A</t>
  </dd>
  <dt>Author:</dt>
  <dd>
    <t>Emek Can Dogru</t>
  </dd>
  <dt>Change controller:</dt>
  <dd>
    <t>IETF</t>
  </dd>
</dl>

</section>
</section>
<section anchor="impl-status"><name>Implementation Status</name>

<t>This section is to be removed before publishing as an RFC.</t>

<t>RFC 7942 <xref target="RFC7942"/> note.</t>

<dl>
  <dt>Implementation:</dt>
  <dd>
    <t>The profile is carried by the core document's companion
implementation at <eref target="https://github.com/dogrucanemek-alt/cedulon">https://github.com/dogrucanemek-alt/cedulon</eref>, on
the same reconciler that implements the core, selected by a profile
object rather than by a second code path. As of the commit this
revision was written against, the tree carries the Decision Record
and Effect Extract objects, the profile, eighteen conformance cases
covering the rules and departures this document states, and four
offline fixtures for one example channel, a direct-message reply
log. The spend behaviour of the same reconciler is held byte for
byte by a golden file of fifteen cases generated from the source
before the profile seam was added.</t>
  </dd>
  <dt>Maturity:</dt>
  <dd>
    <t>Prepared, not published. The code is on the companion's default
branch and in no released package. Before merge the branch was read
twice: by the author's own gate, re-running it from a second
worktree, and by an outside model reading the whole diff and barred
from changing it. The two readings found four defects in the first
cut of this profile, each recorded in the companion's review log: a
verifier that did not apply the signer's claim rules (D4), a
spend-side crash on the wrong document (<xref target="population"/>), a spend
warning leaking onto decision reports, and a document that counted
its own cases wrong. All four were closed with a test that was red
before the fix. A third pass moved the report vocabulary onto the
profile.</t>
  </dd>
  <dt/>
  <dd>
    <t>Not measured: a live channel log. The example adapter maps a proposed
line format for a direct-message bridge; the bridge's actual field
names were not read when this revision was written, and the adapter
is written so that only its two line-mapping functions should move
when they are. No independent implementation of this profile is
known to the author; the one outside reading ran the companion's own
suite, which is the same code agreeing with itself on a second
machine.</t>
  </dd>
</dl>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC6234">
  <front>
    <title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
    <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
    <author fullname="T. Hansen" initials="T." surname="Hansen"/>
    <date month="May" year="2011"/>
    <abstract>
      <t>Federal Information Processing Standard, FIPS</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6234"/>
  <seriesInfo name="DOI" value="10.17487/RFC6234"/>
</reference>
<reference anchor="RFC6838">
  <front>
    <title>Media Type Specifications and Registration Procedures</title>
    <author fullname="N. Freed" initials="N." surname="Freed"/>
    <author fullname="J. Klensin" initials="J." surname="Klensin"/>
    <author fullname="T. Hansen" initials="T." surname="Hansen"/>
    <date month="January" year="2013"/>
    <abstract>
      <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="13"/>
  <seriesInfo name="RFC" value="6838"/>
  <seriesInfo name="DOI" value="10.17487/RFC6838"/>
</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="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="RFC8392">
  <front>
    <title>CBOR Web Token (CWT)</title>
    <author fullname="M. Jones" initials="M." surname="Jones"/>
    <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
    <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
    <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
    <date month="May" year="2018"/>
    <abstract>
      <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties. The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection. A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value. CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8392"/>
  <seriesInfo name="DOI" value="10.17487/RFC8392"/>
</reference>
<reference anchor="RFC8785">
  <front>
    <title>JSON Canonicalization Scheme (JCS)</title>
    <author fullname="A. Rundgren" initials="A." surname="Rundgren"/>
    <author fullname="B. Jordan" initials="B." surname="Jordan"/>
    <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
    <date month="June" year="2020"/>
    <abstract>
      <t>Cryptographic operations like hashing and signing need the data to be expressed in an invariant format so that the operations are reliably repeatable. One way to address this is to create a canonical representation of the data. Canonicalization also permits data to be exchanged in its original form on the "wire" while cryptographic operations performed on the canonicalized counterpart of the data in the producer and consumer endpoints generate consistent results.</t>
      <t>This document describes the JSON Canonicalization Scheme (JCS). This specification defines how to create a canonical representation of JSON data by building on the strict serialization methods for JSON primitives defined by ECMAScript, constraining JSON data to the Internet JSON (I-JSON) subset, and by using deterministic property sorting.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8785"/>
  <seriesInfo name="DOI" value="10.17487/RFC8785"/>
</reference>
<reference anchor="RFC8949">
  <front>
    <title>Concise Binary Object Representation (CBOR)</title>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
    <date month="December" year="2020"/>
    <abstract>
      <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
      <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="94"/>
  <seriesInfo name="RFC" value="8949"/>
  <seriesInfo name="DOI" value="10.17487/RFC8949"/>
</reference>
<reference anchor="RFC9052">
  <front>
    <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
    <author fullname="J. Schaad" initials="J." surname="Schaad"/>
    <date month="August" year="2022"/>
    <abstract>
      <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
      <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="96"/>
  <seriesInfo name="RFC" value="9052"/>
  <seriesInfo name="DOI" value="10.17487/RFC9052"/>
</reference>
<reference anchor="RFC9864">
  <front>
    <title>Fully-Specified Algorithms for JSON Object Signing and Encryption (JOSE) and CBOR Object Signing and Encryption (COSE)</title>
    <author fullname="M.B. Jones" initials="M.B." surname="Jones"/>
    <author fullname="O. Steele" initials="O." surname="Steele"/>
    <date month="October" year="2025"/>
    <abstract>
      <t>This specification refers to cryptographic algorithm identifiers that fully specify the cryptographic operations to be performed, including any curve, key derivation function (KDF), and hash functions, as being "fully specified". It refers to cryptographic algorithm identifiers that require additional information beyond the algorithm identifier to determine the cryptographic operations to be performed as being "polymorphic". This specification creates fully-specified algorithm identifiers for registered JSON Object Signing and Encryption (JOSE) and CBOR Object Signing and Encryption (COSE) polymorphic algorithm identifiers, enabling applications to use only fully-specified algorithm identifiers. It deprecates those polymorphic algorithm identifiers.</t>
      <t>This specification updates RFCs 7518, 8037, and 9053. It deprecates polymorphic algorithms defined by RFCs 8037 and 9053 and provides fully-specified replacements for them. It adds to the instructions to designated experts in RFCs 7518 and 9053.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9864"/>
  <seriesInfo name="DOI" value="10.17487/RFC9864"/>
</reference>

<reference anchor="CEDULON" target="https://datatracker.ietf.org/doc/html/draft-dogru-cedulon-08">
  <front>
    <title>Cedulon: An Audit Layer for Agent-to-Agent Commerce</title>
    <author initials="E. C." surname="Dogru" fullname="Emek Can Dogru">
      <organization></organization>
    </author>
    <date year="2026" month="September" day="02"/>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-dogru-cedulon-08"/>
</reference>


    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC7942">
  <front>
    <title>Improving Awareness of Running Code: The Implementation Status Section</title>
    <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
    <author fullname="A. Farrel" initials="A." surname="Farrel"/>
    <date month="July" year="2016"/>
    <abstract>
      <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
      <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="205"/>
  <seriesInfo name="RFC" value="7942"/>
  <seriesInfo name="DOI" value="10.17487/RFC7942"/>
</reference>



    </references>

</references>


<?line 842?>

<section numbered="false" anchor="acknowledgments"><name>Acknowledgments</name>

<t>This profile is the first concrete instance of the generalization the
core document reserves. The refusal that was followed by the effect
it refused, as a finding with its own name, came out of watching a
messaging assistant's decision log beside the channel's sent log and
finding that the spend vocabulary had no word for it.</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA5196XYbyZXm/3iKHNaPksYAS9Qu0EvTEutY7VJJI7Gm2qfP
jBFEJsFsAplwZkIUuiQ/yzxLP1nf7y6xJEC5PD62BeYSGXHj7ltMp1M31MOq
mhVHL6tyu2qb4lW1qPuafrzr2qsat95Xi7ZZ1Ku6WRa+Kc6WVTN824cHe7ri
66YfitdDX5xfXVWLoT9y/vKyqz7OirvGdWW7aPyaxi87fzVMy3bZbacLeXpa
6tPTjTw9ffDAlX6gpx8+ePh0+uDF9MFjt6ALy7bbzYq6uWpdv71c1z3eGnYb
evL1+cX3rt50s2Lotv3w8MGDFw8eOt9Vflb01cLdtt3Nsmu3m5m7qXb0Vzlz
RTG1GfNvj8XyL5sR/9EZSPxglxbterOqhqqp+t71g2/Kv3oapeKvV65f+274
69+27VD1s+LKr/rKbWr54NAu7N+6Ke2DfdsNXXXVyx+7Nf/22+G67fg1+l9B
C6fRzo+Ll8fFKwCQLwpYz9fVTfGSNizeaLvlrPjf5+/P/q24OP/zj29/ePuv
r4sfXr95fXH+qvjw+v2fzy9e84OLdtsMAOzFtiPY8LVq7evVrKiOeaf+RXfq
mNbtmrZbEyQ+VpjY++9fPjw5eaE/nz589Nh+Pn/0XH8+f/Doof08eWYPPH/0
Ilx99vyJ/Xzx2AZ78eCJPfDi+VN+7eX5q59+ePvjjKc4wuVZcUboui3rofjB
76quuGo7Qd/p0E75R/GyXa+rblEd8QARvPjP9DB4vwriEZI+5It91dVVDyS1
oV83Q9U11TB9BeQ/TAMPnsuifLes6JHrYdj0s+++oy/4ofOLm6o7rqvh6ph2
9Tsipu+uh/XquzsGwrfzPXr24jHBckocAP9X+Msegw7OXVxXgWgXbVcVNPZ2
DVgZ1lc9+ACR2rbqiBH09bKpyuLDpmpKMIuq3gyEqcoU6ElAld6vQa9lUX3i
DxXtVeGLjd/J0IRb9GhJ39gQ3veTov1IG+Ydkd2KSLYsNu1mu2JymxTDtR+K
piW4DrThPMCKAELTwhzxfR4rPFE6u1z3WCleuOraNQ1U8aePizdEqjvcxqV+
Q8TuV8XC9xV/zAUY1KBy/OqPi4trej7cKaurugFowFzaJp1xQf+lcV1PWBOh
2B0XZ5Etgst2JWag8Lzc8Vw2xDd2smKwoJIWc3td0Z2OQctIvPa7gkB6iivC
gItzhXLd7+/Aqu4HR+DH8JXwa/kAvbD1q9WuaBeLbQeo08R8sbj2TVMRkIic
6HZ7W6yJnxaXlSOMWlzLXKtP9DZebWzQ4va6JfjRagdM8tr31wJwWSlIqKQp
095cbXuCtg5aJIM2NBrgXO3BibCiXmN7JwzZ0ar7a7+pJgK/tqbNKjymUy/i
DCL7JrgCyL0LKNEzKndbwnQZhHa2hPhbtCUuAbmwTlpA7QtIm4Jw1AkGlDLh
gfAc0CcB9pFn7gXBMRxkhW/w6YBOIkgWvgOnkImL5KN/MT2CB97eNpvtJe0f
wedYCHddlyVJU/cNeErXltsFj/QVMv7lF2WaX77QmP1t1fW8mr9tq57f9Zft
dojYxajBICFmWNZEwUSau5T4BL2FiK/9x4o3VQjusrom2BX1IFAbv14GgiWx
bLtDw/yBlAlnkyP+TbiwWLU99mC47qrKiKS9/A9GX+EWxQFuMXMYMzArQT7e
w7v5kuzRFjyayc/1u36o1rIEYlA0UcLQxY3iFgNoaAfa4YjfvaABzau+qqvO
XberUjaWBCpNeMtfusSIhhbC+5gwFAUiB6kHt8Aied/Psq3xAMBtTZJrq/sE
MBEUex2G2Y7tLj/pypoIpsMQDa2zBycSRqM8pjAeg/cjk6EZrnYTmlc/TByx
0ZL4dEdscrU6jXyiECzGGATYj9kgADiQgOSpYYJTbqFIZIMIHgW1KyLSH+Kr
wo2II/qFsFmwLZpSsyDixzp1J4UBMbBufW9vyUC+2Q008tLxy/Eh5kp46EMl
g5+8wIalxNNVJNg/EpBpj2iHlWAJXxveQ5oHgOV51n0yzvGjor+pwOTi/rhU
fwREF9vVtmeNpeWNoFX027W/XAFP+nZLOguRI97aDrRaaAUTR293y91YMkEG
FHHH9+SSTCDKpUmAOr2oYtzkROcVLUA/jUxt29RAZse4Zws2WXpVd/S6MbPb
rh5ojUD/Y+FRduemqja97ldXfdsrnXetqBsCQ6GmhTBLvyLlnzZ5fVz8jF0D
5iwB/j4hQ+HfXXsrPy6VkV9Ww21VNeANSta4CxugT0mRMKDX0cuWhqYF62fo
K25d+X5LFDn7KlMvIuWLXCFM9h9r2kHiakPlsMX4YRjuiyW9QDACWJTlMLJD
HgG3hmxzRT0RCVYckmCsUgzM4jwjAj9L8+YN2MOTuIyhDdsRnpkwCKBmiVDD
ttfDMXFrvM33Gja8AMsbgvSULSzavGp9zAZiV/1tW3emtDXLrRdgpnKyVrSs
GtIf7qa/Zf1RKIjsrY7kHq2JhYXR5YzRvtP3DfUSvgA8I1bYL+oNWbeVLY5A
sK4HWS7zZyHwuGiwQkODgfm8u3P3/5FId7lI/6a4qLp13bSrdrkTCiF5oZh5
9OanDxdHE/m3+PEt/35//r9+ev3+/BV+f/jT2Q8/hB9On/jwp7c//fAq/opv
vnz75s35j6/kZbpaZJfc0ZuzvxwJDI7evrt4/fbHsx+O9lGQlgJkuQR2QmR2
lSAboWW/6OpL+oPe+ePLd//1/04e0w7+DzURaQvlD9iA9AfJnMaUK9Ik5U+C
2875zabyHUYh3k0g3dQkbCHECbWv21uisYrx+X/+OyDzf2bFby8Xm5PHv9cL
WHB20WCWXWSY7V/Ze1mAeODSgc8EaGbXR5DO53v2l+xvg3ty8bd/ALYW05Pn
f/i9IxwhhOnV/CiNdnKVD8wVl+uOdFZCU+KAgNiseNeu6sXORecMNJrJno4z
ERcK8dF2mGSmmGrGE3frO4w7KYiiO094oIr7VQtpy76jTi0r4uDCXEQ9BknQ
3r1izYOM7xm/t2f30HZvmAhZk5ncoaGQJgA+QzYuNMR+bDf0d6hwraopyqRu
2BakQaLuyGsX5TBOu7j3yy+43n/5cp+W8GHL6mi+BLAeNoR05jxmUGugagz+
BpjOBpHuH31azSTPBly78fRyUcM7xPqkAixZGr56Vrx8++H8rx9o6SeqG4/M
SYUySwRsChR/mww8A6wbQQFodqzbEVpBIQhM0xZRD2o7VKXZWcAk6Kk0yIb4
aSWqwIR1GN/YyDIIqyKLKrGIEiORZEqRGKf8LVHZGN68WgG4mH1Y+dsGlrrY
Bx7jEMdoRgasyD+SDtsVdpLXF8DNbgGaEa5HtRMihLTxHkKqF4HA2i/hWgnh
zLpvsVn5Bbh3oXIwbBOD3cf1TmC39r1dJ96l+r6wPbK7SCAUtlfEfqYPnzwF
0kH5URjRsl/KegzPxDoRRIOJa7qaaLQYmPUCubnnIqDv1YqDLMdpMTtVgkj3
wuxh1snVQ8wlbIMNaNPadzpgJWFyDeOebo1gCS4ogk5oWkyUuEbso2xvsflq
pGH3755rFRb21Vm/F7+D0M3YvyAkG8gU4o5IIlAEDCbzW1SfNlgRfa5pdXki
yHML7pdv4h9fRLJnM1LjVFRwtnZTP1tgB+ZWc6mBCgX3KzawGgTGtOj/Vn10
SCWK9sy5z8V7gPKz+vPuYY736c8AoHuZ8Kdb7vN0Og3/owFeZzP+nHsG06EU
1njn5Xg1n1MHgw7FxJxuMT2lPIIB0BxwgGHwN/AoMVP/XMxp2+bxX/608B6z
DT4Xfo3ZMOWwH6whxkZ8j/b6s3AisAV8sfpEWC0yZS4T+RMxsDnQhZ8/NSSZ
ATd4WQCwrIYZlSJPuF3MyTQiZbKaE0ci7lABgHPDw3mOhTza2XLZVUuiMTBp
th4/J6KtmLNjop+z8AyrufuRgPI3MEbwgVf7CAU4LBgBJ7wfEyPRzyqsSWQE
yrZbzv3MHCgZxkMVBl+l0YOyclmt2mbZQ0VQU86cKKStg99OmPsGB6liNaQE
yx110DXB9RApjMjW2WD89E4kRkIcrC92lTerK04wEchj2ZtYafF5w1GR4Dla
8hSdfguOBvZ2ghp9btpFu5MdIuKLg3fzFAvGANDyEQDTxSbQZa6/rtaXcKJ5
ki7lTgUjAxeWyc7dm2OQ6at305P5fVHZoi1zBYEkGtYKAQsOIJAlRfsDrnrZ
sitJLSy2tzLqFPdUCX+S14molqPUQjhHCpDrqilZiWw03JIOd9iKFbdMLyoW
zV9tM4OsM4IntMMH1XpNh1h0vmfHcnUFxuubndn5TMeQ4D81JcMxQYjRmhQl
BQbRBGrYda9OI+fZo3pabHW4fB4HvfT6avTHECRYjIxR7ZdvVANy7mD4INEA
g9Z2TfhME7ElkRg2q/rp8UOXm9UzIuGBbVCCCWnqL//49v2kmPvVcl7Mpycv
5sW98/LhkycnLybul180FEcCmZ65qcs50WZT+qGFdw78UxxUTDZBCLM7Qnyw
1Xoz7GADd+1AU6IHda4GD6OL+oqpgJ+PHpuN361az78dJloQd2uZi5sbl+ME
a79htnJrCK4eQXju5XuOJA99BmY+wXDOnET8TN/txaQF/r9ZEH+eQympfeNF
H/3mm+Ilf3Dl6XN92Kup/K1iX28SqzLV5F1XfwQH/wlmAvsVdPovf76QEYEg
S9oQolgGOmKlX75MZFXi2lq1i5sDth98WKxdmfrPUeyLlvS94t58+uzBowcn
c5CL/H4yv59o5SyUYUF4eFfk+cf0/MTJr4dz2ve+DRG54baNUQcDPYx0GH9e
Vn5cnLPfV+6TkGjFOzW/ZtlpDhMf9F9eMALJX74UZb2E+UFSrITtAUqzyNPT
xwWMhI6jdtd0FRu2RhiPvk6P0ELE/FjSTq99l5CBe3p8MvIumevno1+R4UXc
qSexJuu09+vejbHUi70lqRIl/kxdlsdQr34ADEhQCqJ8ZvoSTNzXpAjGTx6c
RKlKvwbCgSLcewg9SVni+N4juqLmGrQSu38PYL4fH3tMN8R4+9pTT+hG3RAp
9wee+q5otmQGhYef6ox7URXk0TlrTnN6eA4lRn+Q2Jonn3nGc/Z927xsy2pv
Sc/59pVdH3/3RdAH//EkTx7gfk3G3eDXmzfQmrZQhsJ9gL1BKGE8ixMAncT8
R+G5X/uUO6N/httq9TFQPRPC6hZ2iaoKCJ3gefbtC1EYDQA3HI8FZxhkIH0A
dMZYSeg0V8SYiw6qqDDnr+z5DEgCwqppVHOC13jVcvz9GOpwwJS5CbnEAE1t
/8SP4CrMBOQ7CWaWJ6gRwq8yXmzy5hms+9SJywvLPAsg/X/98PbHXLqydUNm
sPvp4vvpc7JthwphLwULJkwS+nTkmQzK01X9Kf0IKZIEkFXZG5VHUIgCyBKK
A1gK9GsEAuaRTgAjdwBGcfXqEEm0ueh9UQfJsZtHmppPZDWYLrZ8cmAXQkTt
atvB+eVYkn3KB+dI0Yq3hHcgUSpIhdpFfq1+bdeJxKWpExAZYdskApTEiMIe
edhpQCOGUIVkplsfHh2AyYxSRshz2VXxdwwsesQLZlDX2Hl/qpupIUTxyCde
ZaA8G24hyGOeJFG1YozfPEaWi0A2b6Fu5JbjPtFAMXEHAzE4UQ7kCUhiQk+7
NrL1DuGBqhhZmkVGOTrBSfA9Gk6nUVCeNivqM/GjSV6BxmFBxBk56NfwjGg6
Iz1TtbEkLCzy1IU58EUdLfO3MNqwUVvDqakfum2DrUuXoUlGL9U84a4BTEEs
4CZYxru3H17/W7GmddaSNwM6Y747d4F1pRE9kGHGfOekSTU3IbQPdGHd3zzK
34Lv+bqZJVHJ0W5hwLrd2hjfplq0E2hMIniYZtNQ5VyTGGQ2cKUFWsA4pKWS
nXQvsMA9XeM+uyKZz5uiJmFTmY7jVCleQ6pjijERVEz+k40C9vh2RWpdEkRw
NSg1ZgPrMxAa7M20rBrHDOKSKBhZVU3Y8ODNZ3e1GM9VEpmszOGR2JWkI86c
m6ZejFoyTmhQ1QomqhRMTCc4phdYTWTmO41aokyRp6cRR4ab0qZYO5DIqqRh
nD1E9BDs0wZeE9iz4C/LivXBtSflbdiWrMmt4eh9+H+fPCqmxclEfdJzaAlz
/skSXbidmjQQ5azP0VJb8CMYo31x6UkzJyjCRbiFFRx5joCuF0a6ZswJLJQz
R7GAkHcVdWMsgG0hdWTJvvKyAI6UQyFvyzz7qqhzhknwVmqCQKDMfc63YPjT
IOyWDJb3oSEjR9ZNJqKT1zlWxMsJrlNbT8ZQsYDUvwq/XG/2vLrp4R2+YvuR
X5yYt6fl8G2MJTDX8hpWaMQVz4PettsVu9qrgPY8PGeL6nw1vq+w1aw+CEvV
aTQClQcrLHUuXcGbs78IE6dheLuYFQnIbjXhhCM+bEwE8OqIIrXwTXMn+CEH
s+Yu9NghS1XLfBjQGombc/qaWKoXiVtNuAC7wzBUXwWXS1+tECZpRqZ0DXkt
mkX01UiYSQ1yWYPFXmm2nBkYH+wcciBgJYkmxLG3IvKMR+aLMqVGVyn+YYaD
472yHMoAGJ2HL0jrXk2R9Up/pVEx8ZKHxQin62/qDQeHtgqtDafScYjeAmkS
EojGsIJPdEiXMNVBslGqxU2loWxbt7xotD+SpgGmAHFw3UR/4kL8AIy5xJ4G
CcONXHZulH7ACXdqIPO8yKKvV+ZNixksgZo5PSyl40mIIAZXg2whCT6E3gVX
oqdrU5PmUjqzWEmpmhhoSuZoE0nC4gUA2/GXeBrYS7RtNAF04gxQQpX9AGWo
97VcvGzbG7DWlW8WlnQpc2lomt22AQtnDyUyF0VwvhNgqvOZ3VMN0ZyEZ1SO
bpJn7vKxxU3xfeJKezSS606kQhDqqi6wTqCZi7OUeFJNQ5HBJYmuBo6o13Dm
yIIVV45tagD6HV/+c7V73Vy1xbvzN+6yUvcFItyMMJqjJ5Fuy9wRhYswUhLM
jgvxh/oDmyq51iGOYcSQIwJ06ZV8DJ52Zxlj+lXxvgoU5zqjKd2bruuekWAO
pSRkFoDMCKK7iDynQieErvjYNVl0I1JjKlSOuY3pbKL/JyDoQxwx7DFbHQ2n
Q8OigoO4sbxyyRiUPFliC7Z/NdTegwgjiUXhBnvfjHIZJ/JbUVl8PlYVAyck
yLGSkFrZ3r179c4i7ba+/URytirYI32azipM1+VYBipftUszQME8NE10QsDb
DGKZgEYt+c9pYAw3VAj22GTwZE2PvtUARJKYmLplOaiWpKlGZyI4/iH99cBK
mGO7zNure/HrHbxZpEa/IxZsxgQCNbCRpr/zJxy/FsVpMq2JxSRy7IUhrGIE
k0jiFgIOJiFfJnLz8Vzd0BfZDrLtIAwvSXoJLI9vf9nLKLH36MKeycUqh9+N
qj7kBZe8EMyiPfalCTqHc3E4MTNJ1YvBysAPU6/SyQnbVJljadtIih4JN7PP
OMgcTFFRxfFatBxlXRywJFOEV/MngvDXLP2VJ35ywG4M3Jw9cxZiZVUbAj4o
Thx+d1nYlbXd4L3GpGmY+S9HTNhHs4KQ6AjmUvhJRHI0c80XgjKn0Zt7XDCT
XQb9wCpkGoaRp3pJLtHIsJOJZkTGykVnlgnfZ63enAnBeWBs+TBAQ+5CIvEI
EsEFp7TOKq2bxy2f8iejTMAakpQOKLO3bbD+RfkKCj0b7Ju2ryWLvjFD2nR8
KAjsP3AINw8qjk3V103dw34rVQmWOj3E5oZjc2NPIe1HPjURkrCOGklWbztj
Fmw0OROttzXuqh2OfQIvjtQsVLi6SWoG+FnNSeXnFGuRdvuxXag916JWZDVO
ZzvoHnD8AWR4Y5vvCIoL1NNUV1YYLG7hWAsEvFkdDgiTbZopiamDMhneqf5r
qgXnNfl61Qc7mlOdJb6sMo+nnqSsu7JryZpKzJYkXG4lFJ6zbROm+kSY6tiZ
poWsxEbNSwbhH6kGCNxndaFFUhQ3zgdgDSHRTnLxa4DiklKRoKOAtHoM6XnN
zHAmri0XjrDscvCaJFpWYNy0h6vg27HMK8MsFzIretk2hN8Hjnt73bI4zmKc
C0ky6I9IOOCiPiL+nuCx9hFYU7mgIVFbDOcoqOMgjwGwLIiWTN1LGgRnLL2R
1ILP8so4luZC+Ow1kmmUEd4LHhQJPyn8vvaIsLEPAylSHC9SAXJv34UJtbX3
V8G1lL5/3pT/5NuTYklEPVjZxTybh0bPLK3uc0FE6Hcx0w7A7xGKOvchNZA3
JMZZzL7NIQw/gCaP/DogS2BuD3anI0e9oVqqqDHRpgvRoJoNNhK58sy3ISVy
shf7Tcd6iZTLwzOzkARnZUoEN/W+a1CCGNIWmZOi5cFLwkoe8kDlO3kY8Z/Z
WCJ3tcsUO2RA2oO2S6bcbgaujDjNNPngc+LaOQEgqClsnIoFBANDibYwj0sj
TcgUxhDx7DLdq0mSpb0Eg2RchXEfQjUWqDhNWlKqTQxgRTZ8eRaiFEGFvVK9
eQNEL10yf1ONxXlPa++1FtJi7zAe/6OH/r4Vnb6CDTk/dQplAUAK9/40VUtq
yO7V1bQlThbdVlBr/RXCY+x6QHkN8IU7DNCWyATZPGWOKFq8JbQkQVeW7d6J
BzJkEVRJEsFeqov6LTAFQhkN1qpTPwJD9ApOGxZkCJInPqMyyLtgU4yqrvYK
h7JNR1kj6S2il5tyINFCB7P3pgHmBH2SaAmuKZJklSwgitCnGgM4M8y8I04r
qT59dIWqsRTwlbstcPJlNJ+LFaJVmqflyzLkvGniNAToZbXwCIToU5zc7y1z
ekghEuq8REe6o6ja/IOSrY08xnYBCT9kYU0ZzbStREBGIVsk6XbmjhO57WlX
qkDKiM6WrXi4o9JCr9OoSWIxEqPPDtUrMXYz1DmnISbFs25VFE1VlVHFNAjW
0Ueonnu4CNkRmkdVrjxyig3B5/+eySjEThLhd3+eRDposFWU/2TwiMt2kpA3
va0Bgql+YCqjzdNUvkNmc8QRbPdiUcFGFWY+wvSmTHRoWiQAO4+qCkEvGiAE
4j9VaqyPtLC49aK40TBZFoMPTGdg1ywQjYtzJAQTKvHCXSSxC6phGci0XO2Q
Z6nsIM9hVR1LYiH6mqwXy29ssntqvoBatC6LrI18F0VSAhiyEBD4x1y58GZF
WruwL3aLmWBRd09HTEMqDbQWsW81MgQ7qsNwPfuhC7DXVSUJ3VIkzeUVUdcH
MjHSKCg5JsWZAWkUSaI9wt5DEqJySoWD9a7ogkHi0vB3tOMk/4NlFJaVfYet
EqsAZW3E+UwjD344CVYczjQZmKQsio8AF5eFgokC31VgBU7xLWe9wbBI6qV7
i39ySoDLUwKsiIVTA1g7P4vlGeYNZzxPVHRUcIwU9NifwjxA+/mx8sCs0DRR
TVh88Ojhly/R9DuUtyAPPnv+hB4cJXI6SICkDimJpiAI0FekAZpFHMITI/e4
u8s9XkT3eCHfaaqajcZEP5NVKVit4nWcqcTzQyx1YI0sTtNqS+EfcqJwCxmu
6ptqX/LGTK/YY2IWJK2TXFAwaGFaFmCwdgh55w1zfJovURblWGhlSbcx8hhy
qXkOzDHlEaCw5CYsmDhdhpcoZ1CPfjHXBFnmCUI6haaJSqEWuDvjtTOpD+iV
nb8NRbqsCYgQOw7Ovhf7cRZN/E99fonOwz04qujRj/78xc4c+qSl1cu6Oc00
KXH7on474/UBvzhhaNTIgV9Rjxm3egA7OIh4r87fx/gFhgrxi1BCCT0FlkM9
xAYi822TVVZNdVrzNKJyapiI7k0Yd5Jua15YwKvVoKpo2S5IviwYkxsMYlUk
XYFKd28ea3amAoMaijmiq5uqnE/SKFjAC3PTxZVagDrlKWBNnNWfFonlJWTW
lkX9txw+jEjzeFw+bkgTeAq3wiDaYmt0VowjuqLtSnZYmED28SDbJTbdKzJo
DCquJ3GEriPSQMCpMGPp5QzwX9FETqPMFlodTL6CrnQ+GrzgSgfCHnlgylM0
RWpy1zipL6qwMKaKnK+NyxNVp3/dOGWn2lApx/AiwXDRFsTLhPg2FzqDDwRn
FDSGTVdLKaZFfzVCLChMDxAfSKgmfGzioKZ1W848GuFRjkqj0sNo+2CxLvN2
ahmOKEAS0hJpLnV10QZ6pm7E0E/P6gLzZJsvaXKGCWdrdTEKeoxx2nGQM3BB
k7ZQ52JDnAJaO3ccENLbqjQSPuASRJ0o7vJmTrjvCDKZgzMy8edbZJgrxMVl
rKhSNxP2E35K1BkoYpwIM5HErYmGu4WK9GWXBIUmltWqhrsUutWyi2AP26Tk
WCcjVY+uV3CpK0JbC3gZKQIWZm0fg5GrnWhJ3PtDMpB++UYrBA9mBVghn1cT
ifOS+6yCNOS6IZgXC/+AZTGNOaQoHRffs09E8rvEH86ZQGrBkfHHsR4AlG3r
kMKhuEq/MOEkw7q9/XakvXIKimnVMd6RPHI6Ds0EWyzKhXtmyCaNdkILMY24
ZiHPUSee+6fp9E0kqvIe0gan6qCfyvfn/JJA294I8Xabo70SUg+Tl8SKley5
kKol+lQygiL5VB+YH1sNT5+0uDmQchUj4FCZpPxLuJQwWNdZ6lx0m2hIqQvJ
lGyOcBsUydDRilANZ2rq0mA5wsKN+lF5vU8LaWMGmcsyyEImhlpI7Fbxff5y
DJDoBETEIpVNs+9Uf5HgPtcvw72k5nIEsu2/E6djYpiFgn+z/ke9i64gPtlZ
FfLjXNOyd8g6V7VNaEEESJtHAxvL2RkH6GktoXekegllsRlaCrZHr6KgCvRI
ZzBKEjnZdcmdt0apeU2iInEjM47OpI2U4EHikuOZbX8ftGRk7m7XaFDYVaJ4
cSDLeHCMJGafvRv/ebEuCbw1MurXKE1w3ualc4VFE8LG/MeabIAr7s2BSjB0
JdFK3DYvVvefas2PThqApMkw8/Tx6bbhvghzJ+ZpJHKpB0RXH8T4U7amKaMJ
y1ErMiCYZDaKMlenGMA9KUlus3rKaM1fx3ylvxXj/Jw99CMvg9r5ptN2alMl
qaSlNQviZfLA3jo7HbJhmpgNxy2UEns0dsZcoPCPdOzqVhiolzYW0ddUlUtB
CvvglDMGOmjkTliENteb8qPKhhP+yFwuNHIxNdZ4pcuqNbzxQ81VJ7lddR9N
11kkf5Ic/Rmce/75/Wf5Rt2I4ni4bcv887k+l4S2pApCE9cs+qzpDayZWnel
Xgy5oO3fWoYLw9q5v//9744mIv1ZfxfTln4j8OhduPI7qcL/jRThSyFHzy/Z
Xumtjn8qdELvWPrPb5J9/U2IevDlxJyi5dps9gf+54ezJ1CTR+tU0Z9ePf/M
UHBnBrvtfjk067oKU40SSoZKNGSAF24UXKc/Se0CDwnOOFZOo3r8HKWkCe30
bWSz0uprFjTw4ODgD5etOOxhOpkKxU+xnFshiz9kEvTturoFL8vDGVzF0nD/
YDYy+0qtIeWEXKK+bRqreNDc44vrA2iWJryxUSHcMomszVWQz8Xd0BPhK4eC
XcG9J7iIhdFMFNqrkAOdqMUYyhKLQmcczeZCjMHamTEzNRYo8xXi/D7ta8rU
WVZWpZzWDUrqLyx+bFBZ+2XTcnE4gWazVde2+gNIOLGjhci485c1JzgT7yPJ
XU3SdFkyX578unxZnhXUYXSzwVeI0436R3GEWktGNViDiLW0utqvq71D0CF6
ziqa+Jo/x8ILDaTeUW8WKylM651YHqA9fu1LETL7kjdGqvfE9aEJjb5kRm/y
LZrOoQB7/5VJmV4RppdMaqQB///NaaxhJ+MHN8d44IvrpHAuNSlijE7N7QNd
huO+lRoWpxmsaSUR3/1X2BzcDFqyIZEepd3UBc0aQta8lDhaWWs4KXNzzNxI
j5wclMYhU1GIeMrJXHMJjjv+wyyDcW7nvcTTDHWC9xp5bfcnX8ul4yTHcBMu
3uSe00yTKXee9Uv4c+ZpHhn+vssbObnDiYghDjuzkjcSN2JiZUq3raqbmrXP
mhc3lpIumHXvl12VuvR0QDSn+AeuSTfnFnc8WYhNXyK7+tAKpSET3pBfe+s7
nMnu7nS93eU7S10d0nladM8QJJ1KjfH0Wgx1jgCwVcFUoPlyrAmGvg/Wr6ar
YoA1b1KQSBIpKfxyX9MttEGz5hWOc+s4r9UmJhNo2QkDYxCcWQhfiUqaxbLL
lYhnxM3dvYN08A838f6p6Bloxs2J6ZZIyGLYE+a3yy0Mau7ay+6oqKKEBAcr
ik6C50gqCDKDNXC/qmHgHmsfrzJVPK0TvOS0XCD0WbwJtpEaGG7cXIP9mVVD
7y5q4grKrHPDKbjcaSuAnm5sRQmj48Bts0hZHLtM+xjoEvWp1Owgq8tYI4O3
O0aDaRbfA+fvS8FbUiGoY8aul9qcqEWct+kBQHcUt+oIYv9IOOURlnWkuys3
kmGBdUenrELkZUz6KV6FMF9dovHDuI8aeL+1Nt/jluvWjtcHf3ExVMpCpEhE
2lKjNAhJU/gI+61jzhH7RSL+cjLqLoLH5nbstKuZWUpSgEibjfhp6FnLO5Do
VKxHn/0lNO10ScCkl85yoRknJ/FzTok2800r/uCG4ZsTbvlmuqsOl7a15KWR
1HX8l+V69cXJg+MTvrkfc0M+z8XI8Wud/xDMSvWjg9bcwO1I08R/L2kamkSu
bWLECxKUxgdSPB1obaQxyqLgy+RliUk9CwVMEgrmD7APOiO+vCSK2/llRVGT
aEVYoCGrZjooDjjxAnVmHzlaK04dixbF0qW7hIwkymiFaQyapBETDZWJLmWm
+dd2A0MdOCXiANjpu6Og611w5+A1A1dAfhwbHCIOD4Y3MVkW24tPtSIG0DDn
kaK1sjpniXF5mnr1Cak86sQTpoN4K+K5JjBBQRa5zToBRHyzXFf2Eipf8KFP
4Ws9MkA0PpcK40AzwkFTuATvzTHa3WmUIRBiMFWlm4mVnKmNrE3JOSwojiJd
MOZtBT+HMrGrPBHbmhrw0QVpDcL+xsc8+FgdFh8eaQ3cCt0SnywIGOSE5SNq
DkCafEdid5LGlQSAtXJhG0ED6saxsyWp6Rsf/RVTCcQWvHzCTNdrrmjvKxXQ
khoDLrOhjQDPn2TR2iTbjz21buE3llZwKOcPMiQKnuSGJj9xu2QaCCwpNKzV
sQQGesLNcB2/kURRQgMRIKBWsVTifJe4Vlu0668lGwk81B3ALTzYbjrcHGJA
6vmI/fgsZutur8fZcIFAxqFB0DVrNtCqLqvYVMMJAkZ30Iv9boSjsnyGUUBg
SbVYcds9rIlP2dD0Mk6suJSzadCRgYUocbZtB+cEPJSYoGiBJFB7vfMlY2II
54Ld0Ip3PW1HyIg+eToWjSEfJUKGcwtU+QXxczuXZaVd8kihIs1fz2S40tyV
WF1z7+Lx/QkTx4r0YKRx3bt4pjmksIW6qtdm/Cl/c/cuTk7um/1ahF6vfkgK
UfJaJdOekzazOTtMFSpOau2z8TXZTz8SvEZM+23DOnIWi4Zi3QMd0CAOfSnF
LfXqZDb2KqRTthYjvDvc+ptRCq490RZwHIicFNNul9dS32YtoBcLEUGt9l7I
EhzUJNJ+ucqfdeOVGveDe3vNQKMTk+eZdc8OMZoQ4rKkK3f4OJos1yA2hTjU
CsJBWRA6/AiSvyuEGTcx8bdgIVl8ztShrKeHkiCQThysBCN1959mARaNfN0Z
hzKuzFkTsYyLJ+Qut0l6Uu931q4gbE/s+aCGQXQERWjk/T5oNqEhbOwHLpIC
fCEpwLVJKjI+nNmphiECGir5nPuQYl1o+5MmV2t01Pc3QbuSjLoAK3cnmGK/
SiSQWylfSF9Ni8smLpVzGSuGtn9HpRaf2yPyzKXyLGkmJmQOVkrc52OVBmDk
GBcA6dEMSW5kvwxb42KWDstkGjqfSbBE/OJNKKlPYRaRndVr0YT4vXH2Qoi9
Hri1F2kY8vTeg2Wn+7kN+QYwojpOpa9jByxJaWGXR4xU21fCptxe7/g8u8Pp
v1nybxGSf2MLLquXs+K6V49nWYMUwWRhuaZ3sf/GklXKNCc8b48SMyXH3VHE
sWZ9oCRQmflJxQ4Y9Q/JeQZaW7VukXXlSQhT8hTHt8f1Ms76OaUEFEPBSaXo
Xc2LJDxEk5EGKvInF++sdvlZXSEUy4NxYamQdejQYm1ns4Y1IXkppH+jdj4W
zWozr1igHGtZs1pTrX9NI93BVadlCmWWPmCmG/cFlwJXxZEnxLrSut+kuxPO
0ONifbePRXmxsnXmDydvpMXKPixLSpU5BxM00EslOterRKroNIn4wgDksqUn
dSFZDTaJO/iy4fJKWidF3bGraLrEuqDPJ8dOSVu1tknSNMRrKYdM8gWplxYb
etSKQGvdJ0F/9MECFMVOk89Yiit+RR8sd7TWfXgqtCplhnlLQFXs5eiHA3ll
+5EnjdinAQ+OEarAdLGM0T63d47GsVbysG84a7LRa0qJCyrj/mEdfDn7vnVG
DHqTd8iWbYolsRArMjeP6izFQc0wF4YT4n6Yh6YmlKUdU8Jkzg8iPqCR+5GV
o3FhkSTO5HtYQi9d8HmZesKCHi5IiM7+OJqf5NRK75DkTS4ivJZjmxZdyyPg
LI8+QF6wTDUSqC2ocWkcuDGzybUmoozaigqKPCMBSgxVDhL129XA/kITzVa0
p/IZ6ui2a/pYxkXyDy1aOGy8525ru/EBmVLyyedAxJpGaXUcShh4FrFQTS+E
QpM2KtzJyaDG/jULOcv4I0XnWjqwK5FKraQWuSayKW0qwL1qJD4Y2oVbYzS4
jSx4aDyWRAoTvE0kJuf5IbT5CdIIWqWoZzLhY9JiuDrMYJ01UaQpc0KyFmpm
TBjAxKYm/fQf7JmwSd2OL2lric5Q52XvHuzNNckcz2B+7a3izHNlKyN/RJ2p
cIo70b8TAH3QEShxBz15E132Aa6Rd6iKjVxSPDPZbCAn/H0l7uNXDx13l4VJ
wCe8lhwtQMBOWrLCONfDuy1nbNzFyaEtPVRsSbyI9lmm2maEFtRcl/kV0iMK
s9a/V36R23mYtNQgb5FnOEglSdYcRXLm2XfIGpu6L6NvJmh4deeyqV57OW8v
JqrL0URJ7zxhIuyu4BbxiwPeio3cOJiUbKo062PSujfVumPegl6dOaVuVLTQ
arhqRPtIW5vxtLQ5pND03FREcq73TuONXSuTpnJeufwB3Q+FpcL9re5dW+jF
T2c+zlScail8lmd3B+iiA2echyIOnB1Q9PYrLmZCH+QlNdqBJkYxDhxzlpzF
czY67UoOutbeyFoTz0l0S3Q9rpuYGoS7s5izhBJsYOhyq1absyo/zl5oG1KC
1uq6oxtKNSGwmVQMblbcEkcNtmAgWUzTHHAQdLE7S27+oH6YqZZFJLLuu4p9
kRySP5VSJNFRexwmUmYyV3k9a+ZIh5DhnazsoOAv9MgNkJidfcenAGYKgROF
wLpjiAwHoPE2j8491FRmR19nUhfsorbSq+fzShARnpI2ui20dkXJhEkDSaIu
TaRK+rLrq8Zq4PNQGLI/Nz7ltUH3ac6sLCTaV9uybXbr+j+lv595MrTkRkoC
HZvufThHjIxZ5iqvz34822cpfKDF+HRQZSAWs+DDKILHcnQatp6qdvSGL12g
n9uRvbPT8xyeP3qOUxYs033wSIZBZLZDrCi0DMRNKyUMIVMyWXfN4D8RtK+k
tbsftHr0xeMXfDSvFkhOrNs35yPHOOKzcTVYFtBKWlhwkfCnmcusDix3/6S9
UU8DOw+e8dTlxZca+eD3vu0PFGJmbgN2IHOFXBApO87tlEVyw4B6pYNqyQ7g
2R9qAu7+mbJVnv1eJapL3BJcI4yuA+9TlDi4q4We/drzCbHgsSRN0dRE9J5B
j/8cn6BqXgBvxXEJeWvtRCRcqUDHCrlqHILZhLTPsXbtd85sCNWuwwG02YOs
VpXsHblKcTccHvLk+OHxCXOpj76WYxxAtg1OZK+6phqmrzp/Fcru0w/RGpDq
UV85tXDkXEGpaOKS+FgckU1K6v0Vm400LeqaHkEzOqpVLKIJH/byhA9+USf5
XI62mLuY/qOH1iCT9NecVXPEna9/ri7tcJmXP1/c19NrxtRvx9dY6202PciE
UfOmcdOnT548emrWx0E+hEoEXo7obq0e4Oncj62a4Mzd9Gzwurc3zTvya1tA
KkOchmOXwM8Y0RBhT0bhA0CH9ObXhsUBhEwOcCfp2UM9XvrxuzPn3qrmc+je
uZXGLzLGjfuXdeO73XF+EGjMNJHzmh48QSU+bef+QU+uSNnoBJTpl0s2QoLP
j88ojedwaolnbIMr53cmvBUno1qwbX/KHyrMK8TcvgR/QTiqkclTeWzsP5C2
NaXvaUoGBPEpizlSc0RKd0g8r5fXYMlQvvskW1OUSXAJSXdI45Xj6u7Ea66l
xvko1otDh1kkTfrFFsmS6kINipifHKzAFwcupdPVmubMHjjhqFZ7fhss5Oil
5Pz6cLaIez1Ow94HfmQX0KxYMjAVZy2o7eQakCK3ZlXjvm54n0fcIp46Al9L
KpQNQx6DX4qexl3yQ+tzNscsTVYC4RAHfNzCZbVrtfxcP88uM/Pjc7qOtcQ/
cJyY9VbK/KbcEIYtVTDnPkl3GYd0o+iCO42tXDvmSrYKh7/u21/C8PPevpru
RSTXLIbYsQE5JkW8vtcLVzPf2VjgeWulEeSGRUqce2dHiQcTRGp+easTmpok
BIyquMjELDWuV0d/0n/C2XnRMdXNbB6QAwNWiUdHgUsqjahpJtOOz8jQRjHY
iKUoWsKqbUtByq2NFOpYeATo9DR2XoKsnjANJGoGW8gZ53De951fSipGtCT3
iYKZ7FkZzPJaEgENkK+qDc2GUZCzQLMeHPBJcK8OGuS4eOOXxFilIdy9/r5c
pRV8L0Fk2mFAJdyh5xfw4JFVyDYByxKQSHzXvSPgarsWpLNzw6uOxWbLSMNZ
PW04IWg8+fN1dVO8JJi/apfdlmj1uMSPf1FJdUzGnjAOPkRxC2sSr+Gs8rc/
QmTBW2ewbeIDAjPSBdtu/zNyYvEyxNFWcsw3a4EwQka5nvTvls0Quj7t+S+z
RkzjqXs9cb6r1mRAhzMdtQpHO93S94n74Kjf718Wz148fijsCL+IpNGnDFwy
+3o4uzv2vhz10c5O19MYrLTeL8aaK+Htb6+HYdPPvvtuSQS+vQR8v2OIkypP
T95MyRY27eP3E2lvlrjew3nA4kC14WOyMZnj1Uo4nfUhuxIqUREyrjO1wAqn
ZONgGmLESQrbel2LIcNM+WM8pPy2Q6FlYxQnmTus1adtX0cMULMfR/4g5XmT
1P4lTISIRvrbOPG259JyiNnkuJle66Ig/rddNdZz4wmT4JLbjs8LuWLnLdmL
8oZxz1EnJT7+m880nZo7hZs+0hDEctTI5+TfywqHWKAqScE33jR0FpTQ0cAx
XW4WN1SyD0uYJk1hB3Je1Veyeq6bJoYIjpQdsMEt+fnIkpCpEKKwlV9LQT0O
WyWkfgPrjUQ+8+wOULLyTKtTC73RSm3wmvt6vu0tAoAvkp6/uDZFj52Jq8r3
rLkukI90XPxRJrWuuqX2UZJ3JG3DAxM4QjgzMvLMK7S9LY4vRn+JUGNXW5W3
oit6frXdjfgGtOehj6bhmlaxCpnqHOfjDmEIbcnjXmsmeVQ2++QzsRu9vt3r
obfAGnZFLYbQbpqDisDG7bDfOlkbbwPtRUUewxPkVN0CiWasr+QuZOsGF45h
iapeqknee4VUMLzOOCjFCHywrW3h6GTacXvAieWuA6RysgJnlUmUbWjHWf4x
USI7llgP7ADPs67UjLj8dWIpfJQVQVBKPsVuVy9DzLYX5ChznCb6hG5IwEUH
fUTqhMOLCcxpR4hnX9KSkEtnh30VSQ0EiaOk5hoe0xXOebIEk0DGo1iMnFXK
PHSDCYPimWOwANVs0RFruOzqclmdKsrjt+gxOCycjxiEYioH/VSxeiM05Uj9
sQmXTTK0NEzErfOMB8eyltWO4Q/8xVSntIINdvJq26iQVg8JYMiN8yqtxfVw
lf7Ypq2g9xwvOYpLUrzEdYPfE0R8GnxiRo9GiZ3fJwPpithva5B8lrKkcWW4
euAzxgCMMmIpaVsGYwdrIjdaMe32dDrlE7agSpwtMD+yUVnN690vM1G+qvJ3
R1d+1VdH40KJOskXgOiB2xq+DriuYi618ONV/Z+hmtnlp+wiHwJVRVYTnDe6
KA43unBZFmAfS+fDukPrCnhE15XZo7cIebKS42L2MpwhmPXwbdJ2Bhp40t0u
RouRvsF34eLOgqRDEHAJnaFUlBj/reU34qiT/warwr+EP5gAAA==

-->

</rfc>

