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

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-bishop-httpbis-priority-placeholder-01" category="std">

  <front>
    <title abbrev="Placeholders in HTTP/2">Priority Placeholders in HTTP/2</title>

    <author initials="M." surname="Bishop" fullname="Mike Bishop">
      <organization>Akamai</organization>
      <address>
        <email>mbishop@evequefou.be</email>
      </address>
    </author>

    <date />

    <area>Applications</area>
    <workgroup>HTTPbis</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>RFC7540 defines HTTP/2, including a method for communicating priorities. Some
implementations have begun using closed streams as placeholders when
constructing their priority tree, but this has unbounded state commitments and
interacts poorly with HTTP/QUIC.  This document proposes an extension to the
HTTP/2 priority scheme for both protocols.</t>



    </abstract>


  </front>

  <middle>


<section anchor="problems" title="Introduction">

<t>Stream Priority is described in <xref target="RFC7540"></xref>, Section 5.3.  Priority is
communicated using PRIORITY frames and with reference to other streams, with
stream 0 being the root of the tree.  Each stream depends on one other stream
with a particular weight; these weights represent relative priorities among the
multiple children of a stream.</t>

<t>Unfortunately, the scheme as specified encourages servers to actively maintain
closed streams in the priority tree, since other streams might reference them
later.  This produces an unbounded state commitment on the part of the server
if it is to correctly reflect any possible reference the client might make.
While priorities are only advisory and the server is free to discard as much
state as it needs to, references to streams which are no longer in the server’s
state are treated as references to the root of the tree.  This can result in
wildly different conceptions of the priority tree between client and server, a
situation which all parties would prefer to avoid.</t>

<section anchor="notational-conventions" title="Notational Conventions">

<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>

</section>
</section>
<section anchor="the-priority-placeholder-extension-to-http2" title="The Priority Placeholder Extension to HTTP/2">

<t>This extension consists of an additional setting <xref target="setting"/>, changes to the set
of HTTP/2 frames <xref target="frames"/>, and modified state management logic on the server
<xref target="logic"/>.</t>

<section anchor="setting" title="Priority Placeholder Setting">

<t>An HTTP/2 peer that supports Priority Placeholders indicates this using the
HTTP/2 <spanx style="verb">SETTINGS_PLACEHOLDERS</spanx> (0xSETTING-TBD) setting.</t>

<t>When a value for the <spanx style="verb">SETTINGS_PLACEHOLDERS</spanx> setting is not set, this indicates
that the peer does not support the extension, and other protocol elements in
this document MUST NOT be used.  A client that supports this extension SHOULD
set this value to 0 (0x00).</t>

<t>A server which supports this extension MUST set this value to a non-zero number
indicating the number of placeholders it is willing to make available to the
client, which MUST be at most 2^31-1.  Clients MUST NOT use the protocol
elements in this document unless the server has indicated support by setting a
non-zero value.</t>

<section anchor="mid-session-updates" title="Mid-session updates">

<t>HTTP/2 permits settings to change during the course of a connection.  This
setting can be freely increased at any time without consequence, and servers
SHOULD NOT reduce the value during the lifetime of a connection.</t>

<t>If a client receives a reduction in the number of permitted placeholders, it
MUST assume that all placeholders over the new limit have been pruned from the
tree and SHOULD immediately issue PRIORITY and PLACEHOLDER_PRIORITY frames as
necessary to rebuild the priority tree as desired.  Once the SETTINGS frame has
been acknowledged, servers should treat the excess placeholders as inactive and
prune them following the same logic in <xref target="logic"/>.</t>

</section>
</section>
<section anchor="frames" title="Frame Modifications">

<section anchor="existing-frame-types" title="Existing Frame Types">

<t>When client and server have opted in to this extension, the HTTP/2 PRIORITY
frame and HEADERS frame contain one additional flag:</t>

<t><list style="hanging">
  <t hangText='DEPENDENT_ON_PLACEHOLDER (0x2):'>
  When set, bit 1 indicates that the value in the Stream Dependency field is a
Placeholder ID rather than a Stream ID.</t>
</list></t>

<t>In HEADERS, this flag MUST NOT be set if the PRIORITY flag is not set.</t>

</section>
<section anchor="placeholderpriority-frame" title="PLACEHOLDER_PRIORITY Frame">

<t>The PLACEHOLDER_PRIORITY (type=0xFRAME-TBD) frame specifies the sender-advised
priority of a placeholder. It MUST be sent only on Stream 0.  The semantics of
the Stream Dependency, Weight, and E flag are the same as in the HTTP/2 PRIORITY
frame.</t>

<t>The flags defined are:</t>

<t><list style="hanging">
  <t hangText='E (0x01):'>
  Indicates that the stream dependency is exclusive (see <xref target="RFC7540"/>, Section
5.3).</t>
  <t hangText='DEPENDENT_ON_PLACEHOLDER (0x2):'>
  When set, bit 1 indicates that the value in the Stream Dependency field is a
Placeholder ID rather than a Stream ID.</t>
</list></t>

<figure title="PRIORITY frame payload" anchor="fig-priority"><artwork type="drawing"><![CDATA[
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |0|                    Placeholder ID (31)                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |0|                  Stream Dependency (31)                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Weight (8)  |
   +-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>The PLACEHOLDER_PRIORITY frame payload has the following fields:</t>

<t><list style="hanging">
  <t hangText='Prioritized Stream:'>
  A 31-bit stream identifier for the request stream whose priority is being
updated.</t>
  <t hangText='Stream Dependency:'>
  A 31-bit stream or placeholder identifier for the request stream that this
stream depends on (see <xref target="RFC7540"/>, Section 5.3).</t>
  <t hangText='Weight:'>
  An unsigned 8-bit integer representing a priority weight for the stream (see
<xref target="RFC7540"/>, Section 5.3). Add one to the value to obtain a weight between
1 and 256.</t>
</list></t>

<t>A PLACEHOLDER_PRIORITY frame MUST have a payload length of nine octets.  A
PLACEHOLDER_PRIORITY frame of any other length MUST be treated as a connection
error of type PROTOCOL_ERROR if the sender has advertised support for this
extension, and ignored otherwise.</t>

</section>
</section>
<section anchor="logic" title="Priority Management Logic">

<t>This extension provides a mechanism for servers to limit how many
additional IDs which do not refer to an active request will be used to maintain
priority state.  Because the server commits to maintain these inactive IDs,
clients can use them with confidence that the server will not have discarded
the state without warning.</t>

<t>In exchange, the server knows it can aggressively prune inactive regions from
the priority tree, because placeholders will be used to “root” any persistent
structure of the tree which the client cares about retaining.  For
prioritization purposes, a node in the tree is considered “inactive” when the
corresponding stream has been closed for at least two round-trip times (using
any reasonable estimate available on the server).  This delay helps mitigate
race conditions where the server has pruned a node the client believed was still
active and used as a Stream Dependency.</t>

<t>Specifically, the server MAY at any time:</t>

<t><list style="symbols">
  <t>Identify and discard branches of the tree containing only inactive nodes
(i.e. a node with only other inactive nodes as descendants, along with those
descendants)</t>
  <t>Identify and condense interior regions of the tree containing only inactive
nodes, allocating weight appropriately</t>
</list></t>

<figure title="Example of Priority Tree Pruning" anchor="fig-pruning"><artwork type="drawing"><![CDATA[
    x                x                 x
    |                |                 |
    P                P                 P
   / \               |                 |
  I   I     ==>      I      ==>        A
     / \             |                 |
    A   I            A                 A
    |                |
    A                A
]]></artwork></figure>

<t>In the example in <xref target="fig-pruning"/>, <spanx style="verb">P</spanx> represents a Placeholder, <spanx style="verb">A</spanx> represents
an active node, and <spanx style="verb">I</spanx> represents an inactive node.  In the first step, the
server discards two inactive branches (each a single node).  In the second step,
the server condenses an interior inactive node.  Note that these transformations
will result in no change in the resources allocated to a particular active
stream.</t>

<t>Clients MUST assume the server is actively performing such pruning and MUST NOT
declare a dependency on a stream it knows to have been closed.</t>

</section>
</section>
<section anchor="incorporating-placeholders-in-httpquic" title="Incorporating Placeholders in HTTP/QUIC">

<t>HTTP/QUIC <xref target="HQ"/> uses a different PRIORITY frame which already
permits selecting either a stream or a Push ID (a new concept in HTTP/QUIC) to be
prioritized or used as a dependency.  Expanding this frame to support placeholders
as well requires additional bits.</t>

<t>The PRIORITY frame currently uses two flag bits to indicate Request/Push
dependencies on Request/Push.  If the full matrix of dependencies is to be
supported (Request/Push/Placeholder dependent on Request/Push/Placeholder), four
bits would be required to represent the space, with several invalid flag
combinations being defined.  (If one combination were eliminated, three
flags would be sufficient to represent the remaining combinations, but the
semantics of individual flags would be unclear.)</t>

<t>HTTP/QUIC does not have the implicit closure of streams like HTTP/2.  While
client implementations could reset streams which they intend to use as priority
placeholders, there has been interest in creating greater clarity and
synchronization between the client and server views of the priority tree.</t>

</section>
<section anchor="security" title="Security Considerations">

<t>This extension is believed to improve security relative to <xref target="RFC7540"></xref>, as it
helps to constrain a previously unbounded state commitment.</t>

</section>
<section anchor="iana" title="IANA Considerations">

<t>This document registers one new frame type and one new setting.</t>

<section anchor="settingsplaceholders-setting" title="SETTINGS_PLACEHOLDERS Setting">

<t>The <spanx style="verb">SETTINGS_PLACEHOLDERS</spanx> setting is registered in the “HTTP/2 Settings”
registry established in <xref target="RFC7540"></xref>.</t>

<t><list style="hanging">
  <t hangText='Name:'>
  SETTINGS_PLACEHOLDERS</t>
  <t hangText='Code:'>
  0xSETTING-TBD</t>
  <t hangText='Initial Value:'>
  not set</t>
  <t hangText='Specification:'>
  This document.</t>
</list></t>

</section>
<section anchor="placeholderpriority-frame-1" title="PLACEHOLDER_PRIORITY Frame">

<t>The <spanx style="verb">PLACEHOLDER_PRIORITY</spanx> frame is registered in the “HTTP/2 Frames” registry
established in <xref target="RFC7540"></xref>.</t>

<t><list style="hanging">
  <t hangText='Name:'>
  PLACEHOLDER_PRIORITY</t>
  <t hangText='Code:'>
  0xFRAME-TBD</t>
  <t hangText='Specification:'>
  This document.</t>
</list></t>

</section>
</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor="RFC7540" target='https://www.rfc-editor.org/info/rfc7540'>
<front>
<title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
<author initials='M.' surname='Belshe' fullname='M. Belshe'><organization /></author>
<author initials='R.' surname='Peon' fullname='R. Peon'><organization /></author>
<author initials='M.' surname='Thomson' fullname='M. Thomson' role='editor'><organization /></author>
<date year='2015' month='May' />
<abstract><t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2).  HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection.  It also introduces unsolicited push of representations from servers to clients.</t><t>This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax.  HTTP's existing semantics remain unchanged.</t></abstract>
</front>
<seriesInfo name='RFC' value='7540'/>
<seriesInfo name='DOI' value='10.17487/RFC7540'/>
</reference>



<reference  anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<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" target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></author>
<date year='2017' month='May' />
<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="HQ">
<front>
<title>Hypertext Transfer Protocol (HTTP) over QUIC</title>

<author initials='M' surname='Bishop' fullname='Mike Bishop'>
    <organization />
</author>

<date month='October' day='14' year='2017' />

<abstract><t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment.  This document describes a mapping of HTTP semantics over QUIC.  This document also identifies HTTP/2 features that are subsumed by QUIC, and describes how HTTP/2 extensions can be ported to QUIC.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-quic-http-07' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-quic-http-07.txt' />
</reference>




    </references>

    <references title='Informative References'>





<reference anchor="I-D.ietf-quic-http">
<front>
<title>Hypertext Transfer Protocol (HTTP) over QUIC</title>

<author initials='M' surname='Bishop' fullname='Mike Bishop'>
    <organization />
</author>

<date month='October' day='14' year='2017' />

<abstract><t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment.  This document describes a mapping of HTTP semantics over QUIC.  This document also identifies HTTP/2 features that are subsumed by QUIC, and describes how HTTP/2 extensions can be ported to QUIC.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-quic-http-07' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-quic-http-07.txt' />
</reference>




    </references>


<section anchor="acknowledgements" title="Acknowledgements">

<t>A substantial portion of Mike’s work on this draft was supported by Microsoft
during his employment there.</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAE9LeloAA7Vaa3PbyJX93r+iV/4QqZbUSPZMZkYpby1H0sSqsh6RNDs1
lWRtEGiSXQbRSDcgiqPR/vY9997Gi6Qcp5LY5TIIoG/fx7nPxng8VpWtcnOi
b7x13lZrfZMnqVm4PDM+aFvod/f3N1+9Vsl06s3DyUuPM5cWyRJ0Mp/MqvHU
hoUrx4uqKnE5LiPxcdmtHh8dqyypsOTpbHJ//qxS/Jg7vz7RocqUsqU/0ZWv
Q/X66Oj7I3DgTXKiJ2WZW7xqXRHUyvlPc+/q8oT5wFbqk1njbnaiL4rK+MJU
4zPiSKlQJUX2IcldgS3XJqjSnug/Vy4d6eB85c0s4Gq9pIu/KpXU1cL5E6X1
GP80RA0n+vJQ/8CS8S0R+NJ+Mv27zs+Twv7KHILdT8kysfzA4CI/0UvRzX+b
B/O32sxcfTg1ShXOL7HkwdCOtz+efvvN10cnUEIx6z+4GJ8dWlPNxn+rbcra
xTtKjcdjnUxD5ZMUgsbVOjMzW5gQLTSCBGleZ7aY60QvDaTLNIjr1C2XdcEq
xaNoKWvCob5zS6PssszN0hSVqFwvkgejp2ZeF7oOtCLNXTAZbAbzLINOgi77
EFktTKFSrIQpU96iWhjrm43WMLExIz2tKzywRD/oupi6usiYKkDBLNqKmAD9
IoNWYFrIiq2c8/lar2y1EDn/9NPF6aHW90QKmKxpEfZyJZikxdo8VqYIEEVX
jlhRop6On5AuIC+rZupAFosBEpeHQ1H00mZZDou9IoR5l5FUoBb/PL3C+1No
LDwrdcc66VyLeDIh9XYK0eA7f46m+utI3xkh883hG7DfW6E6+2CRqPzm9uL6
9uL+Fz3zgCDrRFQA7BpvitSQcGDe+MYuI35ByS99BAtGU2jvXKXdjK/JFtj+
PEkXcSEYLk2RBQ3e4DkDoor3THSZ+MqmdZ54vTJ2vqj+QMSCib8C2Co9fsMS
3uQM5h7OdLJ0wopa1nllATedLmyeQRDiK4m7Qf0/kTdUdQFV5OsRcxytBdCE
0qR2ZqEkKMDVPpmDdjD+gVAIdQAv2BhggRsCzRaoHCIXBiGKG8CEwtOh2AEQ
gFh9ZYMHBcGMb6BXMjAEcS+jmZTKW0KBjQmEY2Vn2lYEGHCeOu8BD7COLXNc
geoa0A/BAmlDPuCOligLi8vkkzlUP0ObQ417SFSAXpI9WAS/NSOo2532nUF6
2jyzIU18Rhpe1ikhiGTAL7BXGJMRh6OOB2a40dNqYQEk2q1wGoF3TqSL3ka/
Cw09z+BjjCdhg9wLKGVFp1AwsAXggDIAmWcQK7MzXl9BdSBSSuSKqwf2hR9U
KwOgRbWRHoS1kU5UsFXNYa+RJM8F7OBr5eo8AzHilOH14GwGjL56pa+cBMsk
16eueABdTlbqHrsjPWnKT0HvXf50d783kv/11TVf354jgN2en9H13bvJ+/ft
RfPG3bvrn97juYpX3crT68vL86szWYy7euPW5eQX/EcS7l3f3F9cX03e74k5
EGXaWMmWcNCL5igLAaNNBpHrh9Mbffy1fnr6D4Sw18fH3z8/xx/fHX/79fOz
orAvmzHQ5CfUD6iVpUkYB6TONCltleSIT+TCC7cqNDzNkCI16WtXWaLP+zE8
FiCK4dBFd0o5NlRsdmAkyTIbbRJMxXno6SlePT+PEHGSYt7BDU8UFsbcEMPs
05Nc0Psk2dJlEnAEw8ukQMxhJeZubtPGu6NHPz3x3ednAclOwe4a1l41rCk1
aWosXRqC2iKpdKjLEpEwvFi1ZZwvgqRUSRq9XPfx7vz+/uLqj3cfbt5PTs/f
Xb8/O7+9+6j3jx7jk/H9D2cHjabA8M+wHyLxQ5LXkhpJsJfINArG1gW8Fj9H
wkjLl2Ip2BtJpsyZ+KrIxU9aU0YYcQRukrE2UpQQTVUNkn3jTgThGvEdkWLS
uPdQedUQMeJPCuzKExEWgDgixRwdHUAPkyZCSkB4iRTzsE0ogZDF+FfjnS7q
5ZTCvGikycVylyA7qKEkEyC45fyi47iOiIN6MqEMECsZEXIUeWMeoANIvHSh
0q//983x+BjaOOXXQqcoaClGRlGu6ilXD5VbF7kJoZ8qqF5r7Jq1BpyuWxQk
qhWaFcHwf4WyORujJGN11WXGqGhrMeORIUNDQpIgO6jOat8oi5I8OOcSAd5e
SAUVE4NqtqcEAS1QOkMcQjJHlqGsn0gWrSyqB6pjXM3ZIlBRjpwx6qWCoLpQ
i2RDiZ0ZELv2OMrtzDDBTZ6UuuA7gkIkc4NSBHlYqHGGiXmxhwBWAim1jwWU
8ZViyyUhwCYCaU5MfcS4ByM+WpgV2AKhpnCHH5e+LkB25t2SccOJkMSNYtrl
0mSWiyzgLkDGtuCkt3rO/mGrEg0KMsOsCYoKWM2baY2cvCPxSkaxnh30uqle
mogi9AhcillO0k+FW+Umm5ts1FZ1yBeUhLlwiDGD9h6qgvEpxR83Dyw9l2wI
ZHnuVo31Au0okRvG2AjXPzI/lxzxY/eJKB3zgSD6/BH5hojJu/frkiDNkXOr
uhBruLKSdMoO3I8gUtxGd2iUrEQpROXd+YRibVQTkEYFLRfovUQ3y5M5+sOz
8xuqAa7uP1xf9SM1RbXXByfqRDOPHKanAMrxIH9EzQrWI0hjX3PGrQG8Za2R
BmEISJCgS+1ntIsz7RMO3SBFKSSuvTgjpygaQWKCII4HAZxiqJW6rYMavdTl
lhhPdqKSLSGF187n+xWM9Pbo8cfbyeW55DzRaNNMNKGuoIEFV8uGEBSBzG7e
A9uhvqjauBukwIcPUW6JfRdHJ3qGYgE9E1UnaqdGR/pnbp4kDp2L0FybNUhN
2o5lJ0wORWxaF+IoICMCAAQaPM5oxwc0U6BJyZa5B80fW5jRmeaoJQDc/QAP
lnqP+lcqiGIDy5MONLGULLX+e9Cj3f/F4PsH4Kf+r/2jaW5FkYApHOntP8c7
7r3ece9NpHCMp2/01/ob/Xv9rf5Of/+P3CMa/zn+J/8Skd+OftvB46aK9t8c
H+x6Dev/vZxs2/JFVv6FnOCfOJfe/+7gJco9cKinE/1qZufjLoPRzPTt3jD7
oTVc5y7J9p4/E3EGb3LxRJjuEhFjObCTxtre/grHFUWJw0w0CjnyleikNqMO
Ewt9W5l7qmJC+8Zq4UIv/8JTePzDSJXaK2N33TLH7g2xSS/ofcH+0ZFRldGO
24Oll8NJF0rEYpEhGqoEO6eQ9h1zRr0qTRfaSZOMOVuRZRLV8hdZoH2Zpc/s
rSdZxok1doZtMe+mnHOThnacJCgJFhS1X3/ze24ZPgMEThZcCyQtKHJTzKsF
JZfC0sQtrUwVqItRnyHEXe46dkmRQpOJeoOVflWqjPeOS03Kgkgf1/fXp9fv
P5zf3l7fNllXUh8DFenP+MqGXpkv+oRdN5o1mMahshN2VlhC0bbf9F52vfJ7
rrieXkm5tdXHoyl5AMICD62pCbBhyfv2RnuxwHUr6sHXqlcCXZw1U6jMccHQ
zWuKOBFswUr9VdM0SpMV54TdaJj6fFjiB5MmTdMU6zkZ6oX+ujgEbYtP8DKK
PZrMrSKJpcxuYZgZuVJqemk4NpvEGXHPSIkTORQiAmWaPTQdzCrxhXTsFzTq
lqZp1KdFdTR3lMRBMp976sF4LiqFccuuN3OucqlNUDsGo9OohOG0f0OHezS3
25N5JZ6jQIb0Ss4Cam/6E71op94ME1KS3ackmDekUhJN6x+db2wSz1l0WXue
8I+4x87aYoEJ05iQpkHgEFztNRLu8VRKOmeasIbSFXw8EqMDYX4qs0GeExPo
YJcc/SOss0JzQ2PdceVtyW1k0Ps8aVEkLXWZQCB158CWXfKQs23YB5Ohg/a8
wuTJWi9MXtKIubJzLFIe2iX2BdJ8nuIHyCM2Y0cXZe+pcGrw/wMerWi8VsE6
qmuFxEocFbYiPxB0JzVwiuZyPYDQ5eSXfvvMyWqsLyQNyCy5mRpPfVKkcIOB
oWO7Qqrm+riFHHEvOWLfHsLRojzsHlJJc3gbvt/MJsE4ampCAE2aZVFFiY8J
9t442GaX9It4E2eeQFaL/i/hWw4DiRfaPHdxoBPzQlLS8ZOXfvrlmvNxs+DZ
uqEf+cWtMmq7rvpN6uDN21s39A29+JX+yxdRvNDyT+u3b/9LbsvP7jclKf5v
k+ZLPE46InH91ouTF6Ru12+8vbNuq9lqsWw7f0zoUJNs2yakezLwjbxHBdxF
EQcK8ioPBHqkqEz4ePOxqzfIiXpVNZ5O+k9Vl24IKJIlP14MCRRDZCMsRC5m
1nMxZUr2QxX9MDpZ4GDULm1dbt/QMV5CJ1jzXEgedDSDIdALUTVIZOIKkZ/o
DpuMXbmqS1OUxrBpiEfVfDBPeaA9l6Hjnzi/i3EZj1zt+YBMHEbSxeAsMTpX
e/o3mFu206/+mVV7xIdcQ8xwMK/ThW4AQFpvxgsqM2lOHXXSb3Nd0R44UpKU
bAnOuumZZINDOQBG4kAhJP6+88sIOo+Oc026pErz3Z/ebp/jPz9TNCYUdYdX
GyVecwYF3rK16makdCJI+xvL0THplenAZB0W3OIlPAqM52ED9g7kvKdLqVS4
+V5y6NRDZ8OPZSJpUiY2zBqd+cWSsF8OKCxfGUYCBOVk3pVmKNtDHFJsCJrW
nuSHHVklhG4ef0xjgdVMCPStVG5fkZCq5ZKmNjBj/yHBXgL5rAY7QKm3j+T/
g0Vy2gpNRFkg/36fylf9trlZWW3u1X/rYISqofaKOZcTw6lptJHJgLQ5Gmco
lwmNnjl3BeRtDz3ZAi2HzVgF9DHAFL4opYCc4cfZDkTch4zUqfRegvqBcEMF
Mp2aZxQ/EOmUjIVajkI9Q6KXI5JNnjx9t8Le09+8+WKDglE3y2LToFyv4/Sx
t0VdpKic/OFB3xvagx92L9qNPjcBJxW7WawQm+PknL60kWEXpOVT7VhP682v
VFLelqSoNk6j+QyS4lrB+qcKlgsoyQNqOGuvuNhqC0EOh9QqwH3oHIHdbs7d
FQInggllEpoxhzVCsHfNZ0DtKXOvMuvNgh+sWe0+nua2ifrRmm+dxiq2nT+H
+GS7beIeP9Z+5DJL6qM46gup9kMMPOx9hsLn+kpKUP7ygL7bkTYXmHiwrg7k
li9+0SBhcXI12ebVouVr+GzPk6jMQgqiE4tCDitiQKGOVE6P5XZ3FIk2cue5
Y3N4KiHlC84mm73jCB6L9uIkNVIKe0re8Wsq4lG527DY+HIHDF3RZ2DqZDdX
SFvImPR4cLZKBQYCIdzkf2ieQM/jOLtXd/MXZHgyUFk8Pf470+6Pu174GJX7
WdmZSNjTjeTqCyTftVlf8Ha8/gXC0SdW0yT9RECadKc+fB7J56/1lL7kY91R
kCaww3XoK7zfUbjxn6S7Iqr04Z90Pm1An67xaupdcLNKxaM79hwEELdexqBH
HyD8Px2nuSgcKQAA

-->

</rfc>

