<?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.8) -->


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

]>


<rfc ipr="trust200902" docName="draft-krickert-pipestream-docproc-00" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="PipeStream DocProc">PipeStream Application Profile for Distributed Document Processing</title>

    <author fullname="Kristian Rickert">
      <organization>PipeStream AI</organization>
      <address>
        <email>kristian.rickert@pipestream.ai</email>
      </address>
    </author>

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

    <area>Independent Submission</area>
    <workgroup>Independent Submission</workgroup>
    <keyword>pipestream</keyword> <keyword>document-processing</keyword> <keyword>rag</keyword> <keyword>ingestion</keyword> <keyword>quic</keyword>

    <abstract>


<?line 44?>

<t>This document defines an Application Profile for the PipeStream core
protocol, mapping its generic recursive scatter-gather semantics to the
domain of distributed document processing, AI ingestion, and
retrieval-augmented generation (RAG) pipelines.</t>

<t>This profile defines the concrete semantics for the four PipeStream Data
Layers: BlobBag (Layer 0), SemanticLayer (Layer 1), ParsedData (Layer
2), and CustomEntity (Layer 3). It also specifies the PipeDoc
application-level envelope, ownership contexts for multi-tenant
environments, and profile conventions for document-oriented processing
and archival correlation.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-krickert-pipestream-docproc/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Individual Group mailing list (<eref target="mailto:kristian.rickert@pipestream.ai"/>).
      </t>
    </note>


  </front>

  <middle>


<?line 58?>

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

<section anchor="purpose"><name>Purpose</name>

<t>This document defines an Application Profile for PipeStream
<xref target="PIPESTREAM"/> that specifies entity payload formats and processing
semantics for distributed document processing pipelines. This profile
assigns concrete meanings to PipeStream's four data layers, defines the
PipeDoc application-level entity envelope, and specifies interoperable
payload conventions for document ingestion, enrichment, and indexing
workflows.</t>

</section>
<section anchor="relationship-to-pipestream-core"><name>Relationship to PipeStream Core</name>

<t>PipeStream Core defines the transport mapping, control stream framing,
recursive entity lifecycle, and resilience semantics. This profile does
not modify any PipeStream Core wire format. Instead, it defines how
document-processing implementations interpret the payload bytes carried
within PipeStream entities.</t>

<t>This document is intended as an independent industry profile rather than
as a standards-track extension to PipeStream Core. It can evolve on a
faster cadence than the core transport specification while preserving
wire compatibility with PipeStream entities and control frames.</t>

<t>Implementations of this profile MUST implement PipeStream Core
<xref target="PIPESTREAM"/> Layer 0 at minimum. Implementations that require
recursive document decomposition, such as processing embedded documents
within archives, SHOULD implement Layer 1. Implementations that interact
with external services, such as third-party NLP APIs or human review
workflows, SHOULD implement Layer 2.</t>

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

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all
capitals, as shown here.</t>

<t>This profile uses all capitalized PipeStream Core terms as defined in
<xref target="PIPESTREAM"/>. In addition, the following profile terms are used:</t>

<dl>
  <dt><strong>PipeDoc</strong></dt>
  <dd>
    <t>The application-level document envelope carried within an entity
payload. PipeDoc provides a stable document identifier and ownership
context for document-processing pipelines.</t>
  </dd>
  <dt><strong>Profile Version</strong></dt>
  <dd>
    <t>A profile-level schema version carried within PipeDoc. It identifies
which revision of this document defined the payload layout for a
given document-processing entity.</t>
  </dd>
  <dt><strong>BlobBag</strong></dt>
  <dd>
    <t>The Layer 0 representation for raw binary document content and
related attachments.</t>
  </dd>
  <dt><strong>SemanticLayer</strong></dt>
  <dd>
    <t>The Layer 1 representation for annotated content, chunking output,
embeddings, and NLP annotations.</t>
  </dd>
  <dt><strong>ParsedData</strong></dt>
  <dd>
    <t>The Layer 2 representation for structured extracted metadata,
including fields and tables.</t>
  </dd>
  <dt><strong>CustomEntity</strong></dt>
  <dd>
    <t>The Layer 3 representation for application-specific extensions to
this profile.</t>
  </dd>
</dl>

</section>
</section>
<section anchor="pipedoc-entity-envelope"><name>PipeDoc Entity Envelope</name>

<section anchor="core-fields"><name>Core Fields</name>

<t>This profile defines PipeDoc as the application-level envelope carried
within document-processing entity payloads.</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Requirement</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">profile-version</spanx></c>
      <c>uint</c>
      <c>REQUIRED</c>
      <c>Version of this document-processing profile used to encode the envelope</c>
      <c><spanx style="verb">doc-id</spanx></c>
      <c>tstr</c>
      <c>REQUIRED</c>
      <c>Stable document identifier for the pipeline run or deduplicated source object</c>
      <c><spanx style="verb">entity-id</spanx></c>
      <c>uint</c>
      <c>REQUIRED</c>
      <c>Profile-visible copy of the enclosing PipeStream Entity ID for archival and off-transport correlation</c>
      <c><spanx style="verb">ownership</spanx></c>
      <c>ownership-context</c>
      <c>OPTIONAL</c>
      <c>Multi-tenant ownership and access metadata</c>
</texttable>

<t>Field names and types follow the CDDL schema in Appendix A.</t>

<t>The <spanx style="verb">entity-id</spanx> field in PipeDoc MUST match the <spanx style="verb">entity-id</spanx> value in the
enclosing PipeStream Entity Header. This field is retained so that
archived payloads, detached artifacts, and reprocessed document
representations can be correlated after transport headers have been
stripped or normalized away.</t>

<t>PipeDoc MAY carry additional document metadata and layer-specific
payload structures as defined in Appendix A.</t>

<t>The <spanx style="verb">profile-version</spanx> field MUST be set to <spanx style="verb">1</spanx> for payloads conforming
to this document.</t>

</section>
<section anchor="ownershipcontext"><name>OwnershipContext</name>

<t>OwnershipContext provides application-layer multi-tenancy and
authorization metadata for document-processing deployments. It is not
interpreted by PipeStream Core; it is consumed only by implementations
of this profile and related applications.</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Requirement</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">tenant-id</spanx></c>
      <c>tstr</c>
      <c>OPTIONAL</c>
      <c>Administrative tenant or account boundary</c>
      <c><spanx style="verb">owner-id</spanx></c>
      <c>tstr</c>
      <c>OPTIONAL</c>
      <c>Individual owner or service principal</c>
      <c><spanx style="verb">acl</spanx></c>
      <c>[* tstr]</c>
      <c>OPTIONAL</c>
      <c>Access control principals allowed to access the document</c>
</texttable>

<t>Implementations MAY omit OwnershipContext in single-tenant or otherwise
trusted environments.</t>

</section>
</section>
<section anchor="data-layer-definitions"><name>Data Layer Definitions</name>

<t>The PipeStream Entity Header <spanx style="verb">layer</spanx> field is authoritative for the
semantic interpretation of a document-processing payload. Every
document-processing entity carries a PipeDoc envelope, but exactly one
layer-specific payload family is expected to be populated for a given
entity:</t>

<texttable>
      <ttcol align='left'>Layer</ttcol>
      <ttcol align='left'>PipeDoc fields expected</ttcol>
      <ttcol align='left'>Notes</ttcol>
      <c>0</c>
      <c><spanx style="verb">blob_bag</spanx> plus shared envelope metadata</c>
      <c>Raw source content</c>
      <c>1</c>
      <c><spanx style="verb">semantic_result</spanx> plus shared envelope metadata</c>
      <c>Annotated or enriched intermediate output</c>
      <c>2</c>
      <c><spanx style="verb">parsed-metadata</spanx> and/or <spanx style="verb">structured-data</spanx> plus shared envelope metadata</c>
      <c>Structured extraction results</c>
      <c>3</c>
      <c><spanx style="verb">custom_entity</spanx> plus shared envelope metadata</c>
      <c>Profile extension or vendor-specific payload</c>
</texttable>

<t>An implementation of this profile SHOULD NOT populate multiple
layer-specific payload families in the same PipeDoc instance. Shared
envelope metadata such as <spanx style="verb">profile-version</spanx>, <spanx style="verb">doc-id</spanx>, <spanx style="verb">entity-id</spanx>,
<spanx style="verb">search-metadata</spanx>, and <spanx style="verb">ownership</spanx> MAY appear at any layer.</t>

<section anchor="layer-0-blobbag"><name>Layer 0: BlobBag</name>

<t>BlobBag is the Layer 0 representation for raw binary document data. It
holds one or more blobs that together represent the original source
material entering the pipeline, such as PDFs, images, office
attachments, or archive members.</t>

<t>Each Blob MAY embed bytes inline or MAY reference externally stored data
via the <spanx style="verb">FileStorageReference</spanx> type defined in PipeStream Core. Blob
metadata MAY include MIME type, filename, size, and checksum
information.</t>

</section>
<section anchor="layer-1-semanticlayer"><name>Layer 1: SemanticLayer</name>

<t>SemanticLayer is the Layer 1 representation for annotated content
produced by semantic processing stages. Typical contents include:</t>

<t><list style="symbols">
  <t>chunked text segments</t>
  <t>dense vector embeddings</t>
  <t>named-entity annotations</t>
  <t>model metadata and chunking strategy metadata</t>
</list></t>

<t>This layer is intended for enrichment stages that transform raw bytes
into semantically meaningful segments while preserving enough context
for downstream search, retrieval, and ranking systems.</t>

</section>
<section anchor="layer-2-parseddata"><name>Layer 2: ParsedData</name>

<t>ParsedData is the Layer 2 representation for structured extraction
output. Typical contents include:</t>

<t><list style="symbols">
  <t>extracted key-value fields</t>
  <t>normalized metadata attributes</t>
  <t>extracted tables</t>
  <t>parser-specific raw textual output</t>
</list></t>

<t>This layer is intended for downstream systems that require normalized
records rather than raw documents or semantic chunks.</t>

</section>
<section anchor="layer-3-customentity"><name>Layer 3: CustomEntity</name>

<t>CustomEntity is the Layer 3 representation for application-specific
extensions. This profile reserves Layer 3 for payloads that build on the
document-processing model but require data structures not standardized
by this document.</t>

<t>Receivers that implement this profile but do not understand a Layer 3
payload MAY pass it through unchanged, provided that PipeStream Core
processing requirements are still met.</t>

</section>
</section>
<section anchor="document-processing-pipeline-conventions"><name>Document Processing Pipeline Conventions</name>

<t>This section describes common conventions used by document-processing
deployments that implement this profile. It is intentionally
non-prescriptive: implementations MAY realize these stages using
different internal service boundaries, model stacks, and sink targets.</t>

<section anchor="parse-stage-document-decomposition"><name>PARSE Stage (Document Decomposition)</name>

<t>In this profile, the PARSE stage commonly performs document
decomposition. A root document entity MAY be split into child entities
representing pages, embedded documents, archive members, images, or
other logical subcomponents. The decomposition strategy is
implementation-specific but SHOULD preserve enough lineage metadata to
allow rehydration at later stages.</t>

</section>
<section anchor="process-stage"><name>PROCESS Stage</name>

<t>The PROCESS stage transforms document entities between profile-defined
layer representations. Typical examples include text extraction, OCR,
semantic chunking, embedding generation, entity recognition, and
structured field or table extraction. Example processing patterns are
described in Appendix B.</t>

</section>
<section anchor="sink-stage"><name>SINK Stage</name>

<t>The SINK stage represents terminal consumption of document-processing
results. Common sink patterns include indexing, archival storage, and
workflow notification, but this profile does not require a fixed sink
registry or specific backend products.</t>

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

<section anchor="pii-in-document-metadata"><name>PII in Document Metadata</name>

<t>This profile commonly carries document metadata that may contain
personally identifiable information or commercially sensitive content.
Implementations SHOULD minimize exposure of titles, filenames, semantic
annotations, and extracted fields to only those processing stages that
require them.</t>

<t>When documents are routed through multi-tenant infrastructure,
implementations SHOULD encrypt sensitive application-level metadata at
rest and SHOULD avoid exposing unnecessary identifiers in operational
logs.</t>

</section>
<section anchor="multi-tenancy-via-ownershipcontext"><name>Multi-Tenancy via OwnershipContext</name>

<t>OwnershipContext is an application-layer construct and therefore is not
protected by PipeStream Core semantics beyond QUIC transport security.
Implementations that rely on OwnershipContext for authorization MUST
treat it as security-sensitive metadata and validate it against local
policy before granting access to document payloads or derived results.</t>

</section>
<section anchor="malicious-content-and-resource-exhaustion"><name>Malicious Content and Resource Exhaustion</name>

<t>Document-processing pipelines routinely ingest untrusted payloads.
Implementations SHOULD defend against malformed archives, zip bombs,
polyglot files, decompression attacks, path traversal in embedded
filenames, and parser-specific exploit inputs. BlobBag processing SHOULD
apply bounded resource policies for maximum object size, expansion
ratios, page counts, recursion depth, and extraction time.</t>

</section>
<section anchor="metadata-and-structured-content-injection"><name>Metadata and Structured Content Injection</name>

<t>Titles, filenames, annotations, extracted fields, and table content MAY
contain attacker-controlled strings. Implementations SHOULD treat these
values as untrusted input when rendering search results, constructing
queries, invoking downstream tools, or generating prompts for language
models.</t>

</section>
<section anchor="cross-tenant-trust-boundaries"><name>Cross-Tenant Trust Boundaries</name>

<t>Shared indexing, storage, or enrichment infrastructure can create
cross-tenant leakage risks if document-processing metadata is reused
outside its intended scope. Implementations SHOULD isolate tenant data
paths, avoid sharing authorization context across tenants, and ensure
that cached semantic or structured outputs are keyed by both <spanx style="verb">doc-id</spanx>
and the relevant ownership boundary.</t>

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

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

<section anchor="profile-identification"><name>Profile Identification</name>

<t>This profile is identified by the case-sensitive string <spanx style="verb">DOCPROC</spanx>.
Implementations MAY advertise this identifier in out-of-band
configuration, capability metadata, or application-specific routing
tables.</t>

<t>The initial profile schema version defined by this document is <spanx style="verb">1</spanx>.
Receivers that do not support the advertised <spanx style="verb">profile-version</spanx> in a
PipeDoc payload SHOULD reject that payload at the application layer
rather than attempting best-effort interpretation.</t>

</section>
</section>


  </middle>

  <back>



    <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="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="RFC8610">
  <front>
    <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
    <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
    <author fullname="C. Vigano" initials="C." surname="Vigano"/>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <date month="June" year="2019"/>
    <abstract>
      <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8610"/>
  <seriesInfo name="DOI" value="10.17487/RFC8610"/>
</reference>

<reference anchor="PIPESTREAM" target="https://datatracker.ietf.org/doc/draft-krickert-pipestream/">
  <front>
    <title>PipeStream: A Recursive Entity Streaming Protocol for Distributed Processing over QUIC</title>
    <author initials="K." surname="Rickert" fullname="Kristian Rickert">
      <organization></organization>
    </author>
    <date year="2026" month="July"/>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-krickert-pipestream-03"/>
</reference>


    </references>




<?line 339?>

<section anchor="complete-cddl-schema"><name>Complete CDDL Schema</name>

<t>This appendix provides the profile's consolidated CDDL
<xref target="RFC8610"/> definitions.</t>

<t>The <spanx style="verb">file-storage-reference</spanx> and <spanx style="verb">encryption-metadata</spanx> types are defined
by reference in PipeStream Core Appendix C and are reused here without
modification.</t>

<figure><sourcecode type="cddl"><![CDATA[
pipe-doc = {
  profile-version: uint,
  doc-id: tstr,
  entity-id: uint,
  ? search-metadata: search-metadata,
  ? blob-bag: blob-bag,
  ? semantic-result: semantic-processing-result,
  ? layer2-payload: layer2-payload,
  ? custom-entity: any,
  ? ownership: ownership-context,
}

search-metadata = {
  ? title: tstr,
  ? keywords: [* tstr],
  ? description: tstr,
  ? custom-fields: { * tstr => tstr },
}

blob-bag = blob / blobs

blobs = {
  blobs: [* blob],
}

blob = {
  blob-id: tstr,
  ? drive-id: tstr,
  content: bstr / file-storage-reference,
  ? mime-type: tstr,
  ? filename: tstr,
  ? size-bytes: int,
  ? checksum: tstr,
  ? checksum-type: checksum-type,
}

checksum-type = &(
  unspecified: 0,
  md5: 1,
  sha1: 2,
  sha256: 3,
  sha512: 4,
)

semantic-processing-result = {
  ? chunks: [* semantic-chunk],
  ? chunking-strategy: tstr,
  ? processing-metadata: { * tstr => tstr },
}

semantic-chunk = {
  chunk-id: tstr,
  ? chunk-number: int,
  ? embedding-info: chunk-embedding,
  ? metadata: { * tstr => any },
  ? annotations: [* nlp-annotation],
}

chunk-embedding = {
  text-content: tstr,
  ? vector: [* float],
  ? model-id: tstr,
  ? original-char-start-offset: int,
  ? original-char-end-offset: int,
}

nlp-annotation = {
  type: tstr,
  label: tstr,
  ? start-offset: int,
  ? end-offset: int,
  ? confidence: float,
  ? attributes: { * tstr => tstr },
}

parsed-metadata = {
  parser-id: tstr,
  ? fields: { * tstr => any },
  ? tables: [* table-data],
  ? raw-output: tstr,
}

layer2-payload = {
  ? parsed-metadata: { * tstr => parsed-metadata },
  ? structured-data: any,
}

table-data = {
  table-id: tstr,
  ? headers: [* tstr],
  ? rows: [* table-row],
}

table-row = {
  cells: [* tstr],
}

ownership-context = {
  ? tenant-id: tstr,
  ? owner-id: tstr,
  ? acl: [* tstr],
}
]]></sourcecode></figure>

</section>
<section anchor="example-processing-patterns"><name>Example Processing Patterns</name>

<t>This appendix is non-normative.</t>

<section anchor="text-extraction"><name>Text Extraction</name>

<t>A text-extraction stage transforms binary document content into textual
or layout-aware intermediate representations. Typical outputs include
page text, OCR results, or format-specific structural markup.</t>

</section>
<section anchor="nlp-enrichment"><name>NLP Enrichment</name>

<t>An enrichment stage adds semantic metadata such as chunking,
embeddings, named entities, classifications, or relation annotations.
These results are commonly encoded in SemanticLayer payloads.</t>

</section>
<section anchor="structured-table-extraction"><name>Structured Table Extraction</name>

<t>A table-extraction stage identifies structured tabular regions and emits
normalized table representations suitable for indexing or analytics.</t>

</section>
<section anchor="image-processing"><name>Image Processing</name>

<t>An image-processing stage derives metadata or features from document
images, such as OCR overlays, captions, detections, or classification
results.</t>

</section>
<section anchor="example-sink-patterns"><name>Example Sink Patterns</name>

<t>Common sink patterns include search indexing, archival persistence, and
workflow notification. Backend-specific integrations such as particular
search engines, object stores, or message buses are deployment choices,
not protocol requirements of this profile.</t>

</section>
</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA7VbW3MbR3Z+71/RRVdlLRWGEinbmyC1cSiSjlnWhSHppLZS
LrMx0wB6OZiZ7Z4hBYvKb8+59G0GoKR9CB8kYC59OZfvfOecRlEUojd9refy
4NJ0+rq3Wm3kSdfVplS9aRt5adulqbVctlaeGddbsxh6Xcmzthw2uunxgVI7
Z5rVgVCLhdX348HgQXzkQFRt2agNTFVZteyLO2vKO237ooNnHT1bwCMdPFu8
fClger1q7XYuTbNshRsWGwOztE2/7TRerHSn4Z+mF82wWWg7FxW8MpfHL49/
KF7+uTh+Jcq2cbpxg5vLpaqdFrC0V0LBVLDEizSCvI6jH4iH1t6tbDt0n3nm
Tm/hsWouZCHT8vFb5cVSdFEseNkq+g++wbMwBH75+2BKsTL9eljMpTKZHF5k
IsGncLC+Ldu6sMtS3Otm0DC19KuERZp7Uw2qhmsbZeq5BNnCNKo59DL+9zTg
oTJCqKFftxaXD69IuRzqmlXzi39RXvGLdLu1K9WYP8ge5jK3kwu6r79u0qa1
GxjjntZ+9dPp8dHRv/iP/3z05+/Cxx+OXuLHy4vL8+ubq/OTt3OaZNdM5/JE
XulysA7GlOcNPLGVfAvkjHZJMtux3GSwsr3XVv7nrxenBzRHFAv9obrAcg5+
OQzSOPB3pGRpHUzFxQ+M7JCuOG2NdmjIYfCLpte20X1xhs7wOZ94+Yr3r+xK
w4Prvu/c/MULmET1VuHjh0b3y0PQ0guwvhdPjvRCiKIopFo4fK8X4mZtXDRY
WemlabSTsJun/L9f61z9ZWu1CKY5A9PrOhSq6Z1c6Qa2XEob9eNgPNhysVIw
igWJbBRorHSyb3FcQAewoka2S1lluoqrS+40A7NLjjSD9VbCanhD36u6UMMK
n4dXaQm8h2+vTv7jGTlqjVs89Fvv/NbCznF7ABkljKazBYadL9vB5ts/Aw2I
N2qrLVjJ67pdvFYr+S1dkC+fzeS1H4Gv+BtHcONSWacrfN1fFcfPaB/ydHB9
u/Gm7N949exQXvQS8KuVrtOlWRq/VlwLoKtQSV1Fre91LXUD/7adnsn2AaTg
1qbDnfX6Q8/72Qx1b4peN7BCAU8b2zYoN8frCJKBdwBtcGB+LaJbC+ImKWcw
hy8qW64N6AFtw+qa1nTIdrcxVVVrIb5B27dtNZQEhOKbb+TlYLsW4Pkft8ik
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

-->

</rfc>

