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


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

]>


<rfc ipr="trust200902" docName="draft-ietf-jmap-filenode-02" category="std" consensus="true" submissionType="IETF" updates="8620" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="JMAP FileNode">JMAP File Storage extension</title>

    <author initials="B." surname="Gondwana" fullname="Bron Gondwana">
      <organization>Fastmail</organization>
      <address>
        <email>brong@fastmailteam.com</email>
      </address>
    </author>

    <date year="2025" month="October" day="06"/>

    
    
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>The JMAP base protocol (RFC8620) provides the ability to upload and download
arbitrary binary data.  This binary data is called a "blob", and can be used
in all other JMAP extensions.</t>

<t>This extension adds a method to expose blobs as a filesystem along with the
types of metadata that are provided by other remote filesystem protocols.</t>



    </abstract>



  </front>

  <middle>


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

<t>JMAP (<xref target="JMAP-CORE"/> — JSON Meta Application Protocol) is a generic
protocol for synchronizing data between a client and a server.
It is optimized for mobile and web environments, and aims to
provide a consistent interface to different data types.</t>

<t>In the same way that JMAP Calendars (<xref target="JMAP-CALENDARS"/>) replaces
CalDAV (<xref target="CALDAV"/>) and JMAP Contacts (<xref target="JMAP-CONTACTS"/>) replaces
CardDAV (<xref target="CARDDAV"/>), this document replaces the use of WebDAV (<xref target="WEBDAV"/>)
for remote filesystem access.</t>

</section>
<section anchor="addition-to-the-capabilities-object"><name>Addition to the Capabilities Object</name>

<t>The capabilities object is returned as part of the JMAP Session
object; see <xref target="JMAP-CORE"/>, Section 2.</t>

<t>This document defines an additional capability URI.</t>

<section anchor="urnietfparamsjmapfilenode"><name>urn:ietf:params:jmap:filenode</name>

<t>The capability <spanx style="verb">urn:ietf:params:jmap:filenode</spanx> being present in the
"accountCapabilities" property of an account represents support
for the FileNode datatype.  Servers that include the capability
in one or more "accountCapabilities" properties MUST also include
the property in the "capabilities" property.</t>

<t>The value of this property in the JMAP session "capabilities"
property MUST be an empty object.</t>

<t>The value of this property in an account's "accountCapabilities"
property is an object that MUST contain the following information
on server capabilities and permissions for that account:</t>

<t><list style="symbols">
  <t>maxFileNodeDepth: "UnsignedInt|null"  <vspace blankLines='1'/>
The maximum depth of the FileNode hierarchy (i.e., one more than
  the maximum number of ancestors a FileNode may have), or null for
  no limit.</t>
  <t>maxSizeFileNodeName: "UnsignedInt"  <vspace blankLines='1'/>
The maximum length, in (UTF-8) octets, allowed for the name of a
  FileNode.  This MUST be at least 100, although it is recommended
  servers allow more.</t>
  <t>fileNodeQuerySortOptions: "String[]"  <vspace blankLines='1'/>
A list of all the values the server supports for the "property"
  field of the Comparator object in an "FileNode/query" sort (see
  Section XXX).  This MAY include properties the client does not
  recognise (for example, custom properties specified in a vendor
  extension).  Clients MUST ignore any unknown properties in the
  list.</t>
  <t>mayCreateTopLevelFileNode: "Boolean"  <vspace blankLines='1'/>
If true, the user may create a FileNode (see Section XXX) in this
 account with a null parentId.  (Permission for creating a child of
 an existing FileNode is given by the "myRights" property on that
 FileNode.)</t>
</list></t>

<section anchor="capability-example"><name>Capability Example</name>

<t>TODO</t>

</section>
</section>
</section>
<section anchor="filenode-data-type"><name>FileNode Data Type</name>

<t>A FileNode is a set of metadata which behaves similar to an inode in
a filesystem.  In <xref target="WEBDAV"/> terminology a FileNode can refer to either
a collection or a resource.</t>

<t>The following JMAP Methods are selected by the
<spanx style="verb">urn:ietf:params:jmap:filenode</spanx> capability.</t>

<section anchor="filenode-objects"><name>FileNode objects</name>

<t>The filenode object has the following keys:</t>

<t><list style="symbols">
  <t>id: "Id" (immutable; server-set)  <vspace blankLines='1'/>
The Id of the FileNode.</t>
  <t>parentId: "Id|null"  <vspace blankLines='1'/>
The Id of the parent node, or null if this is the root node.</t>
  <t>blobId: "Id|null"  <vspace blankLines='1'/>
The blobId for the content of this node, or null if this node is a collection.  NOTE the
  zero byte file MUST have a non-null blobId.</t>
  <t>size: "UnsignedInt|null" (server-set)  <vspace blankLines='1'/>
The size in bytes of the associated blob data.  This must be null if, and only if, the blobId is null.</t>
  <t>name: "String"  <vspace blankLines='1'/>
User-visible name for the FileNode.  This MUST be a
  Net-Unicode string <xref target="UNICODE"/> of at least 1 character in length,
  subject to the maximum size given in the capability object.  There
  MUST NOT be two sibling Mailboxes with both the same parent and
  the same name.  Servers MAY reject names that violate server
  policy (e.g., names containing control characters).  Further:  <list style="symbols">
      <t>The name MUST NOT be "." or ".."</t>
      <t>The name MUST NOT contain a "/"</t>
    </list></t>
  <t>type: "String|null"  <vspace blankLines='1'/>
The media type of the FileNode. This MUST be <spanx style="verb">null</spanx> if, and only if, the node does not have a <spanx style="verb">blobId</spanx>.  <vspace blankLines='1'/>
Valid values are found in the IANA media-types registry.  <vspace blankLines='1'/>
Servers MUST NOT reject media types that are not recognised.  <vspace blankLines='1'/>
Servers MUST reject media types if the value does not conform to the ABNF of <xref target="MEDIATYPE"/> Section 4.2.</t>
  <t>created: "UTCDate" (default: current server time)  <vspace blankLines='1'/>
The date the node was created.</t>
  <t>modified: "UTCDate" (default: current server time)  <vspace blankLines='1'/>
The date the node was last updated.
  NOTE: this is not updated by the server, clients must store a new value when making changes.</t>
  <t>accessed: "UTCDate" (default: current server time)  <vspace blankLines='1'/>
The date the node was last accessed.
  NOTE: this is not updated by the server, clients must store a new value.  See Implementation Considerations
  for comments on the use of this field.</t>
  <t>executable: "Boolean" (default: false)  <vspace blankLines='1'/>
If true, the file is should be treated as an executable by operating systems that support this flag.</t>
  <t>myRights: "FilesRights" (server-set)  <vspace blankLines='1'/>
The set of rights (ACLs) the user has in relation to this folder. A <strong>FilesRights</strong> object has the following properties:  <list style="symbols">
      <t>mayRead: <spanx style="verb">Boolean</spanx> The user may read the contents of this node.</t>
      <t>mayWrite: <spanx style="verb">Boolean</spanx> The user may modify the properties of this node, including renaming children.</t>
      <t>mayAdmin: <spanx style="verb">Boolean</spanx> The user may change the sharing of this node (see <xref target="JMAP-SHARING"/>)</t>
    </list></t>
  <t>shareWith: "String[FilesRights]|null"  <vspace blankLines='1'/>
A map of userId to rights for users this node is shared with. The owner of the node MUST NOT be in this set. This is <spanx style="verb">null</spanx> if the user requesting the object does not have <spanx style="verb">myRights.mayAdmin</spanx>, or if the node is not shared with anyone.</t>
</list></t>

</section>
<section anchor="filenode-methods"><name>FileNode Methods</name>

<section anchor="filenodeset"><name>FileNode/set</name>

<t>This is a standard Foo/set method, except for some things:</t>

<t>An additional top level argument:</t>

<t><list style="symbols">
  <t>onDestroyRemoveChildren: "Boolean" (default: <spanx style="verb">false</spanx>)  <vspace blankLines='1'/>
If false, an attempt to destroy a FileNode which is the parentId of another FileNode will be rejected with a <spanx style="verb">nodeHasChildren</spanx> error.  NOTE: if the other nodes are also been destroyed in the same operation, then the server MUST NOT return this error.  Servers must either sort the destroys children before parents, or only check this constraint on the final state, remembering that JMAP <spanx style="verb">set</spanx> operations must be atomic.  <vspace blankLines='1'/>
If true, then all child nodes will also be destroyed when a node is destroyed.</t>
</list></t>

<t>Further, since parentId creates a tree structure, an attempt to move a node to a parent for which this node is also an ancestor is an error, and an <spanx style="verb">invalidProperties</spanx> error will be returned.</t>

</section>
<section anchor="filenodeget"><name>FileNode/get</name>

<t>This is a standard Foo/get method.</t>

</section>
<section anchor="filenodechanges"><name>FileNode/changes</name>

<t>This is a standard Foo/changes method.</t>

</section>
<section anchor="filenodequery"><name>FileNode/query</name>

<t>This is a standard Foo/query method except for the following:</t>

<t>There's one more property to the query:</t>

<t><list style="symbols">
  <t>depth: "UnsignedInt|null"  <vspace blankLines='1'/>
The number of levels of subdiretories to recurse into.  If absent, null, or zero, do not recurse.</t>
</list></t>

<t>The following filter criteria are defined:</t>

<t><list style="symbols">
  <t>hasParentId: "Boolean"  <vspace blankLines='1'/>
If true, the node must have a non-null parentId (i.e. is not a root node).</t>
  <t>parentId: "Id"  <vspace blankLines='1'/>
A FileNode id. A node must have a parentId equal to this to match the condition.</t>
  <t>ancestorId: "Id"  <vspace blankLines='1'/>
A FileNode id. A node must have an ancestor (parent, parent of parent, etc.) with an id equal to this to to match the condition.</t>
  <t>hasType: "Boolean"  <vspace blankLines='1'/>
If <spanx style="verb">true</spanx>, the FileNode must be a file/resource, not a directory/collection.</t>
  <t>blobId: "Id"  <vspace blankLines='1'/>
A FileNode must have a blobId equal to this to match the condition.</t>
  <t>isExecutable: "Boolean"  <vspace blankLines='1'/>
If <spanx style="verb">true</spanx>, the FileNode must have a true executable value.</t>
  <t>createdBefore: "UTCDate"  <vspace blankLines='1'/>
The creation date of the node (as returned on the FileNode object) must be before this date to match the condition.</t>
  <t>createdAfter: "UTCDate"  <vspace blankLines='1'/>
The creation date of the node (as returned on the FileNode object) must be on or after this date to match the condition.</t>
  <t>modifiedBefore: "UTCDate"  <vspace blankLines='1'/>
The modified date of the node (as returned on the FileNode object) must be before this date to match the condition.</t>
  <t>modifiedAfter: "UTCDate"  <vspace blankLines='1'/>
The modified date of the node (as returned on the FileNode object) must be on or after this date to match the condition.</t>
  <t>accessedBefore: "UTCDate"  <vspace blankLines='1'/>
The accessed date of the node (as returned on the FileNode object) must be before this date to match the condition.</t>
  <t>accessedAfter: "UTCDate"  <vspace blankLines='1'/>
The accessed date of the node (as returned on the FileNode object) must be on or after this date to match the condition.</t>
  <t>minSize: "UnsignedInt"  <vspace blankLines='1'/>
The size of the node in bytes (as returned on the FileNode object) must be equal to or greater than this number to match the condition.</t>
  <t>maxSize: "UnsignedInt"  <vspace blankLines='1'/>
The size of the node in bytes (as returned on the FileNode object) must be less than this number to match the condition.</t>
  <t>name: "String"  <vspace blankLines='1'/>
A FileNode must have exactly the same octets in its name property to match the condition.</t>
  <t>nameMatch: "String"  <vspace blankLines='1'/>
Does a glob match of the specified name against the <em>name</em> property of the node.</t>
  <t>type: "String"  <vspace blankLines='1'/>
A FileNode must have exactly the same octets in its type property to match the condition</t>
  <t>typeMatch: "String"  <vspace blankLines='1'/>
Does a glob match of the specified type against the <em>type</em> property of the node.</t>
</list></t>

<t>It also supports the following additional sort properties:</t>

<t><list style="symbols">
  <t>tree:  <vspace blankLines='1'/>
Sort by tree; which means by name, but any directory/collection node is immediately followed by the recursive application of the same sort to its child nodes.  This is similar to the output of the <spanx style="verb">find</spanx> command on a filesystem with the depth parameter provided above.</t>
  <t>hasType:  <vspace blankLines='1'/>
Sort directories before files (false sorts before true)</t>
  <t>type:  <vspace blankLines='1'/>
Sorts directories first, and sorts by media type for files</t>
</list></t>

</section>
<section anchor="filenodequerychanges"><name>FileNode/queryChanges</name>

<t>This is a standard Foo/queryChanges method.</t>

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

<t>TODO: lots of "filesystems are risky" - I guess look at the referenced
RFCs and what they said.</t>

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

<section anchor="jmap-capability-registration-for-filenode"><name>JMAP Capability registration for "filenode"</name>

<t>IANA is requested to register the "filenode" JMAP Capability as follows:</t>

<t>Capability Name: urn:ietf:params:jmap:filenode</t>

<t>Specification document: this document</t>

<t>Intended use: common</t>

<t>Change Controller: IETF</t>

<t>Security and privacy considerations: this document, Section XXX</t>

</section>
<section anchor="jmap-error-codes-registration-for-nodehaschildren"><name>JMAP Error Codes registration for "nodeHasChildren"</name>

<t>IANA is requested to register the "nodeHasChildren" JMAP Error Code as follows:</t>

<t>JMAP Error Code: nodeHasChildren</t>

<t>Intended use: common</t>

<t>Change Controller: IETF</t>

<t>Description: The node being destroyed is still referenced by other nodes which have not been destroyed.</t>

<t>Reference: this document</t>

</section>
<section anchor="jmap-data-types-registration-for-filenode"><name>JMAP Data Types registration for "FileNode"</name>

<t>IANA is requested to register the "FileNode" JMAP Data Type as follows:</t>

<t>Type Name: FileNode</t>

<t>Can Reference Blobs: Yes</t>

<t>Can Use For State Change: Yes</t>

<t>Capability: urn:ietf:params:jmap:filenode</t>

<t>Reference: this document</t>

</section>
</section>
<section anchor="todo"><name>TODO</name>

<t><list style="symbols">
  <t>support SYMLINK types (RFC4437)</t>
  <t>design and document the capabilities object</t>
  <t>create real-world clients to test this</t>
  <t>security considerations</t>
  <t>a way to get or query all ancestor nodes</t>
  <t>QUESTION: should all the file-related fields be embedded in a sub-object?  There's lots of "must be NULL if and only-if this other field is also NULL" - we could enforce that more easily with a sub-object.</t>
  <t>We need to address how shareWith and myRights expiration are done; because both a potential <spanx style="verb">fullPath</spanx> and the real <spanx style="verb">myRights</spanx> depend on changes to parent nodes.</t>
</list></t>

</section>
<section anchor="changes"><name>Changes</name>

<t>EDITOR: please remove this section before publication.</t>

<t>The source of this document exists on github at: https://github.com/brong/draft-gondwana-jmap-filenode/</t>

<t><strong>draft-ietf-jmap-filenode-02</strong></t>

<t><list style="symbols">
  <t>Convert to Kramdown-RFC format (no intentional changes)</t>
</list></t>

<t><strong>draft-ietf-jmap-filenode-01</strong></t>

<t><list style="symbols">
  <t>Refreshing draft only</t>
</list></t>

<t><strong>draft-ietf-jmap-filenode-00</strong></t>

<t><list style="symbols">
  <t>upload as a working group document</t>
</list></t>

<t><strong>draft-gondwana-jmap-filenode-01</strong></t>

<t><list style="symbols">
  <t>require a blobId for the zero-byte file</t>
  <t>make size also null for collections</t>
  <t>add more to the TODO section</t>
  <t>bikeshed; FileNode</t>
  <t>correct UTCDate, UnsignedInt, and normalised UTF-8.</t>
  <t>add some fields to the capabilities object</t>
</list></t>

<t><strong>draft-gondwana-jmap-filenode-00</strong></t>

<t><list style="symbols">
  <t>initial proposal</t>
</list></t>

</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>Neil Jenkins and the JMAP working group at the IETF.</t>

<t>{backmatter}</t>

</section>


  </middle>

  <back>


    <references title='Normative References'>



<reference anchor='JMAP-CORE'>
  <front>
    <title>The JSON Meta Application Protocol (JMAP)</title>
    <author fullname='N. Jenkins' initials='N.' surname='Jenkins'/>
    <author fullname='C. Newman' initials='C.' surname='Newman'/>
    <date month='July' year='2019'/>
    <abstract>
      <t>This document specifies a protocol for clients to efficiently query, fetch, and modify JSON-based data objects, with support for push notification of changes and fast resynchronisation and for out-of- band binary data upload/download.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8620'/>
  <seriesInfo name='DOI' value='10.17487/RFC8620'/>
</reference>


<reference anchor='JMAP-SHARING'>
   <front>
      <title>JMAP Sharing</title>
      <author fullname='Neil Jenkins' initials='N.' surname='Jenkins'>
         <organization>Fastmail</organization>
      </author>
      <date day='17' month='April' year='2024'/>
      <abstract>
	 <t>   This document specifies a data model for sharing data between users
   using JMAP.  Future documents can reference this document when
   defining data types to support a consistent model of sharing.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-jmap-sharing-09'/>
   
</reference>

<reference anchor='MEDIATYPE'>
  <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>




    </references>

    <references title='Informative References'>



<reference anchor='CALDAV'>
  <front>
    <title>Internet Calendaring and Scheduling Core Object Specification (iCalendar)</title>
    <author fullname='B. Desruisseaux' initials='B.' role='editor' surname='Desruisseaux'/>
    <date month='September' year='2009'/>
    <abstract>
      <t>This document defines the iCalendar data format for representing and exchanging calendaring and scheduling information such as events, to-dos, journal entries, and free/busy information, independent of any particular calendar service or protocol. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='5545'/>
  <seriesInfo name='DOI' value='10.17487/RFC5545'/>
</reference>

<reference anchor='CARDDAV'>
  <front>
    <title>CardDAV: vCard Extensions to Web Distributed Authoring and Versioning (WebDAV)</title>
    <author fullname='C. Daboo' initials='C.' surname='Daboo'/>
    <date month='August' year='2011'/>
    <abstract>
      <t>This document defines extensions to the Web Distributed Authoring and Versioning (WebDAV) protocol to specify a standard way of accessing, managing, and sharing contact information based on the vCard format. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='6352'/>
  <seriesInfo name='DOI' value='10.17487/RFC6352'/>
</reference>


<reference anchor='JMAP-CALENDARS'>
   <front>
      <title>JSON Meta Application Protocol (JMAP) for Calendars</title>
      <author fullname='Neil Jenkins' initials='N.' surname='Jenkins'>
         <organization>Fastmail</organization>
      </author>
      <author fullname='Michael Douglass' initials='M.' surname='Douglass'>
         <organization>Spherical Cow Group</organization>
      </author>
      <date day='11' month='September' year='2025'/>
      <abstract>
	 <t>   This document specifies a data model for synchronizing calendar data
   with a server using JMAP.  Clients can use this to efficiently read,
   write, and share calendars and events, receive push notifications for
   changes or event reminders, and keep track of changes made by others
   in a multi-user environment.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-jmap-calendars-24'/>
   
</reference>


<reference anchor='JMAP-CONTACTS'>
   <front>
      <title>JMAP for Contacts</title>
      <author fullname='Neil Jenkins' initials='N.' surname='Jenkins'>
         <organization>Fastmail</organization>
      </author>
      <date day='6' month='June' year='2024'/>
      <abstract>
	 <t>   This document specifies a data model for synchronising contacts data
   with a server using JMAP.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-jmap-contacts-10'/>
   
</reference>

<reference anchor='WEBDAV'>
  <front>
    <title>HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)</title>
    <author fullname='L. Dusseault' initials='L.' role='editor' surname='Dusseault'/>
    <date month='June' year='2007'/>
    <abstract>
      <t>Web Distributed Authoring and Versioning (WebDAV) consists of a set of methods, headers, and content-types ancillary to HTTP/1.1 for the management of resource properties, creation and management of resource collections, URL namespace manipulation, and resource locking (collision avoidance).</t>
      <t>RFC 2518 was published in February 1999, and this specification obsoletes RFC 2518 with minor revisions mostly due to interoperability experience. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='4918'/>
  <seriesInfo name='DOI' value='10.17487/RFC4918'/>
</reference>

<reference anchor='UNICODE'>
  <front>
    <title>Unicode Format for Network Interchange</title>
    <author fullname='J. Klensin' initials='J.' surname='Klensin'/>
    <author fullname='M. Padlipsky' initials='M.' surname='Padlipsky'/>
    <date month='March' year='2008'/>
    <abstract>
      <t>The Internet today is in need of a standardized form for the transmission of internationalized "text" information, paralleling the specifications for the use of ASCII that date from the early days of the ARPANET. This document specifies that format, using UTF-8 with normalization and specific line-ending sequences. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='5198'/>
  <seriesInfo name='DOI' value='10.17487/RFC5198'/>
</reference>




    </references>



  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA71b63IbuZX+30+Bon+MpCIpj8ee9XB+7NK6JJzYkqNLPFPJ
VAh2gySi7gYXACVzvK7ah8gT5kn2XAB0NynJ9sbJ1FTZ7EYfnPv5zgE8GAwy
r32pRuKnN+O34lSXSlx6Y+VCCfXeq9ppU2dyNrPqtrXmzBQqK0xeywo+Layc
+4FWfj74WyVXgzmsqGHF4OmzzK1nlXZI5WqzgrWTk6vTLJdeLYzdjITzRbZe
FfDbjcTL7589zczMmVLh70yv7Eh4u3b+2dOnPwCxG7W5M7YAKrVXtlZ+cIxb
Z87LuvirLE0NO2yUy1Z6JP7sTd4Xzlhv1dzB3zYV/uXXLJNrvzR2lIlBJuA/
XcPer4bid6Yu7mQt6SFL9sqauvvc2MVInErnK6lLeqLwbyMxg6WL/5qHN17J
apibKstqYyvp9a0a0WpU4eDo/OJkJC5Oj0ji9Pjy9+OLydnvQLzB8bBRp1tK
q+sFrXtzcjwZX/3ylj///uV3L7NM1/PuHkfj18fjP9GKFy+evwjPLo7jw++/
e/Gsxcz49cnZ8fjicnvfXIIZC2ldm/Gzq/HR1e5SU3uZe1757uRV3On5D9++
pGfXZ5Oj82Pm+sW3PwDXg8FAyJnzFr7LsqulYu+aSafEyhowninFXtDRPj66
1YVywsNKOdOl9hvhjVivSiMLAfYXhbmr8Ucm7UwDXbsRM13jH+BfcijE1VK7
9iMBP0HIUsH3ojcrzazXJ0q5rMVMibVTBWhXwBJhYF/LLKa4cENkHIikJ0IW
hQNilQIPK5A/9X5lQCIkDi/wHUaH2zivKoEeuxB32i9RrMxDhDhh5vi5JAb9
UnohrYriF2K2CaxYVRmv2tSi1pAt1G6li6JUWfYEw8WaYp17DOaMhNj78CG5
4seP4h//+3fx0+X5mXgDW4vxalVqCFKU6G2guo/akmKhamV1niUTge9BaNX5
Evxf/wZ+yqqdKX+nFChE5KVWtSe9SuGUvVV2mE08kjMrryv9G4iFVCozw/SD
C+/UTKj6VgPNCj52bBapK7C/yYIykDYYQYPwQF9jSpjLXKHWCz2fK4uPWY2o
WNDKpCb3cRDb4k5uWL2kjqPo641iYlh8/LgPyl6VQNplsA58GxdxkOFLZI2J
hChoKZfDZYuELRINCkp43QdeQCGQUtcocFpN/IIfole8U7PwHUcYfJah3nY9
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
OAy3H7P/A+8jNEJYMwAA

-->

</rfc>

