<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>3442</bug_id>
          
          <creation_ts>2005-06-11 12:30:45 -0700</creation_ts>
          <short_desc>CSS3: first-of-type selector</short_desc>
          <delta_ts>2005-10-23 08:48:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>412</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>VERIFIED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>3375</dependson>
          <blocked>5468</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nicholas Shanks">nickshanks</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>11478</commentid>
    <comment_count>0</comment_count>
    <who name="Nicholas Shanks">nickshanks</who>
    <bug_when>2005-06-11 12:30:46 -0700</bug_when>
    <thetext>2005-06-11  Nicholas Shanks  &lt;contact@nickshanks.com&gt;

        Reviewed by NOBODY (OOPS!).

        - Implement structural pseudo-selectors from CSS3.

        * khtml/css/css_base.{h,cpp}: added :*-of-type selectors
        * khtml/css/cssparser.cpp: ditto
        * khtml/css/cssstyleselector.cpp: ditto + added auxillary Nth function
        * khtml/css/parser.y: renamed FUNCTION to NOTFUNCTION for :not()
        * khtml/css/tokenizer.flex: added {nth} regex and NOTFUNCTION
        * khtml/html/htmlparser.cpp: minor edit to fix :last-* and :only-*
        * khtml/xml/dom_elementimpl.{h,cpp}: ditto
        * khtml/xml/dom_nodeimpl.{h,cpp}: ditto
        * khtml/xml/xml_tokenizer.cpp: ditto

        Partial merge of svn log -v -r 365434 svn://anonsvn.kde.org/home/kde
                     and svn log -v -r 371719 svn://anonsvn.kde.org/home/kde
        
        This fixes bugs in:
          :last-child
          :only-child
        Adds support for:
          :first-of-type
          :last-of-type
          :only-of-type
        And builds foundations for forthcoming patches supporting:
          :nth-child()
          :nth-last-child()
          :nth-of-type()
          :nth-last-of-type()
          :enabled
          :disabled
          :indeterminate
          :contains()
          :lang()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>11480</commentid>
    <comment_count>1</comment_count>
      <attachid>2250</attachid>
    <who name="Nicholas Shanks">nickshanks</who>
    <bug_when>2005-06-11 12:34:10 -0700</bug_when>
    <thetext>Created attachment 2250
patch (includes 3375)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>11482</commentid>
    <comment_count>2</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-06-11 13:09:34 -0700</bug_when>
    <thetext>This patch contains a bunch of seemingly unrelated changes (like your other pseudoelement/class patch) 
and also has a bunch of whitespace changes (some for the better but some for the worse as well).

Adding three bools to DOM elements adds too much footprint overhead.  Even if you make them bits, 
you&apos;re stil bloating every DOM element by 4 bytes.

Depending on close() to do this styling correctly also just punts on the dynamic case and will force two 
completely different code paths for dynamic vs. non-dynamic.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>11483</commentid>
    <comment_count>3</comment_count>
    <who name="Nicholas Shanks">nickshanks</who>
    <bug_when>2005-06-11 13:21:03 -0700</bug_when>
    <thetext>All whitespace changes were intended to bring code closer to your style guide. Apologies if some changes 
went the other way. A new diff will go up once Maciej lands 3375 so those changes won&apos;t be there 
anymore.

Other changes (three bools, close() etc.) were simply because that was what was in KDE&apos;s branch. I will 
look into ways of eliminating or reducing them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>11489</commentid>
    <comment_count>4</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-06-11 13:51:45 -0700</bug_when>
    <thetext>Generally we have tried to avoid any code that depends on close() if it is possible to simply write correct 
dynamic code (e.g., that responds to childrenChanged()) that can be generally applicable to both.  That 
said, I think close() may be necessary here.

Priority one should be avoiding a footprint increase.  Every DOM element getting four bytes bigger needs 
to be avoided.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>11589</commentid>
    <comment_count>5</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-06-11 23:31:36 -0700</bug_when>
    <thetext>Instead of setting bits on the DOM element, I think some sort of hash in the cssstyleselector would be 
better.  It could also be smarter and not just assume a restyle is going to be needed.  It could cache the 
type of selector that matched and &quot;invalidate&quot; upon discovery of a later child that invalidates the previous 
match.  Then when some previous resolve was found to be wrong, it could just call setChanged.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>11590</commentid>
    <comment_count>6</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-06-11 23:55:43 -0700</bug_when>
    <thetext>This would also work without needing any code in close().
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>11711</commentid>
    <comment_count>7</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2005-06-13 03:44:15 -0700</bug_when>
    <thetext>Depending on close() is done for efficiency of the common case. There is no 
reason to invalidate or restyle while we are still parsing and more siblings 
are to be expected. 
 </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>11731</commentid>
    <comment_count>8</comment_count>
      <attachid>2296</attachid>
    <who name="Nicholas Shanks">nickshanks</who>
    <bug_when>2005-06-13 11:05:32 -0700</bug_when>
    <thetext>Created attachment 2296
new patch, part 1

This patch just implements first-, last- and only-of-type, and does not fix the
bug that last-child and only-child exhibit, add anything to the footprint of
DOM elements, change many whitespace adjustments or any of that. It should be
easy to review and merge and will be built upon more in the coming days.
Regression test is CSS3 selector test #34:
http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/html/tests/css3-modsel-34.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16224</commentid>
    <comment_count>9</comment_count>
      <attachid>2296</attachid>
    <who name="Nicholas Shanks">nickshanks</who>
    <bug_when>2005-08-08 14:46:35 -0700</bug_when>
    <thetext>Comment on attachment 2296
new patch, part 1

set the review flag for this patch, since it&apos;s been sat here for two months and
no-one&apos;s looked at it :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19803</commentid>
    <comment_count>10</comment_count>
      <attachid>2296</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-09-17 14:21:04 -0700</bug_when>
    <thetext>Comment on attachment 2296
new patch, part 1

A couple comments:
1.  while ( n ), there shoudl be no space around the n, even though other parts
of the file do this, this is against the style guidelines:
http://webkit.opendarwin.org/blog/?page_id=25
Likewise the * goes next to the n, according to the guidelines.
Otherwise the code look sane.  But I don&apos;t have much context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19804</commentid>
    <comment_count>11</comment_count>
      <attachid>2296</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-09-17 14:21:34 -0700</bug_when>
    <thetext>Comment on attachment 2296
new patch, part 1

Another CSS issue, thus being passed to Beth as DRI.  Hyatt could/should also
take a look here.  I&apos;ve taken a look at this patch as well, but dont&apos; have a
lot of context w/ which to comment.  It needs a style update before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20435</commentid>
    <comment_count>12</comment_count>
      <attachid>2296</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-24 03:09:42 -0700</bug_when>
    <thetext>Comment on attachment 2296
new patch, part 1

The isElementNode() checks added on parent are unnecesssary. You can&apos;t have a
parent that&apos;s not an element.

The comment for PseudoLastOfType is the copied and pasted PseudoLastChild
comment, so it&apos;s wrong.

The formatting for the while () and if () don&apos;t match the coding style
guidelines as mentioned by Eric above.

The tagName locals should be AtomicString &amp; rather than DOMString &amp;, because
that way the == will be a simple pointer compare rather than a string compare.
In fact, hasTagName(xxx) should be used instead of tagName() == xxx.

I think this does look pretty good. Almost ready to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21799</commentid>
    <comment_count>13</comment_count>
      <attachid>4308</attachid>
    <who name="Nicholas Shanks">nickshanks</who>
    <bug_when>2005-10-11 06:27:52 -0700</bug_when>
    <thetext>Created attachment 4308
*-of-type patch part 1, v2

Comments addressed and style amendments made, DOMString changed to AtomicString
(though it now conflicts with KHTML source), also all tabs changed to spaces in
css_base.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21800</commentid>
    <comment_count>14</comment_count>
      <attachid>4308</attachid>
    <who name="Nicholas Shanks">nickshanks</who>
    <bug_when>2005-10-11 06:58:41 -0700</bug_when>
    <thetext>Comment on attachment 4308
*-of-type patch part 1, v2

has typo, new diff coming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21802</commentid>
    <comment_count>15</comment_count>
      <attachid>4310</attachid>
    <who name="Nicholas Shanks">nickshanks</who>
    <bug_when>2005-10-11 08:08:07 -0700</bug_when>
    <thetext>Created attachment 4310
*-of-type patch part 1, v2.0.1

fixed typo and made DOM/Atomic Strings into QualifiedNames instead, to match
the return and argument type of the ElementImpl methods i&apos;m using.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21813</commentid>
    <comment_count>16</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-10-11 10:15:38 -0700</bug_when>
    <thetext>The isElementNode checks are necessary.  The root node&apos;s parentNode is the document, so without those 
checks it&apos;s possible for a rule like :first-child { color: red } to match the &lt;html&gt; element if used in a user 
agent or user stylesheet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21814</commentid>
    <comment_count>17</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-10-11 10:16:38 -0700</bug_when>
    <thetext>Or author sheet.  I&apos;ll attach a test case.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21815</commentid>
    <comment_count>18</comment_count>
      <attachid>4315</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-10-11 10:19:39 -0700</bug_when>
    <thetext>Created attachment 4315
Test case that shows why isElementNode checks are needed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21915</commentid>
    <comment_count>19</comment_count>
      <attachid>4325</attachid>
    <who name="Nicholas Shanks">nickshanks</who>
    <bug_when>2005-10-12 11:11:02 -0700</bug_when>
    <thetext>Created attachment 4325
*-of-type patch part 1, v2.0.2

restored element check per hyatt&apos;s comments, passes both the WC3 selector test
(number 34, linked above) and hyatt&apos;s isElementNode test case (attached to
bug), where the previous patch only passed the former.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22192</commentid>
    <comment_count>20</comment_count>
      <attachid>4325</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-10-17 20:42:44 -0700</bug_when>
    <thetext>Comment on attachment 4325
*-of-type patch part 1, v2.0.2

Looks good now.  Nice code cleanup too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22518</commentid>
    <comment_count>21</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2005-10-22 17:53:11 -0700</bug_when>
    <thetext>I&apos;m landing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22519</commentid>
    <comment_count>22</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2005-10-22 18:00:52 -0700</bug_when>
    <thetext>This patch only seems to fix first-of-type.

last-of-type and only-of-type don&apos;t pass the W3C tests.

http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/html/tests/css3-modsel-35.html
http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/html/tests/css3-modsel-36.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22520</commentid>
    <comment_count>23</comment_count>
      <attachid>4325</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2005-10-22 18:02:28 -0700</bug_when>
    <thetext>Comment on attachment 4325
*-of-type patch part 1, v2.0.2

This doesn&apos;t fix last-of-type and only-of-type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22524</commentid>
    <comment_count>24</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-10-22 22:40:52 -0700</bug_when>
    <thetext>Yup, they won&apos;t work yet, primarily because they require you to do re-resolves, and the patch doesn&apos;t 
attempt to solve that problem yet.  (I rejected the solution in the current KHTML tree because it added 4 
bytes to all nodes.)
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22544</commentid>
    <comment_count>25</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2005-10-23 08:24:55 -0700</bug_when>
    <thetext>Landed.

Checking in khtml/css/css_base.cpp;
/cvs/root/WebCore/khtml/css/css_base.cpp,v  &lt;--  css_base.cpp
new revision: 1.21; previous revision: 1.20

Checking in khtml/css/css_base.h;
/cvs/root/WebCore/khtml/css/css_base.h,v  &lt;--  css_base.h
new revision: 1.19; previous revision: 1.18

Checking in khtml/css/cssstyleselector.cpp;
/cvs/root/WebCore/khtml/css/cssstyleselector.cpp,v  &lt;--  cssstyleselector.cpp
new revision: 1.213; previous revision: 1.212

Checking in fast/selectors/034.html;
/cvs/root/LayoutTests/fast/selectors/034.html,v  &lt;--  034.html
initial revision: 1.1
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22547</commentid>
    <comment_count>26</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2005-10-23 08:48:59 -0700</bug_when>
    <thetext>Please verify.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2250</attachid>
            <date>2005-06-11 12:34:10 -0700</date>
            <delta_ts>2005-06-13 11:05:32 -0700</delta_ts>
            <desc>patch (includes 3375)</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>39937</size>
            <attacher name="Nicholas Shanks">nickshanks</attacher>
            
              <data encoding="base64">PyBraHRtbC9jc3MvLkRTX1N0b3JlCj8ga2h0bWwvaHRtbC8uRFNfU3RvcmUKPyBraHRtbC94bWwv
LkRTX1N0b3JlCkluZGV4OiBraHRtbC9jc3MvY3NzX2Jhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NfYmFzZS5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMTQKZGlmZiAtdSAtcCAtcjEuMTQgY3NzX2Jhc2UuY3BwCi0tLSBjc3NfYmFz
ZS5jcHAJMjAwNS8wNi8xMSAwNTozMToxNgkxLjE0CisrKyBjc3NfYmFzZS5jcHAJMjAwNS8wNi8x
MSAxOToyNTo0NApAQCAtMTExLDE0ICsxMTEsMTUgQEAgdW5zaWduZWQgaW50IENTU1NlbGVjdG9y
OjpzcGVjaWZpY2l0eSgpCiAgICAgc3dpdGNoKG1hdGNoKQogICAgIHsKICAgICBjYXNlIElkOgot
CXMgKz0gMHgxMDAwMDsKLQlicmVhazsKKwkgICAgcyArPSAweDEwMDAwOworCQlicmVhazsKICAg
ICBjYXNlIEV4YWN0OgogICAgIGNhc2UgQ2xhc3M6CiAgICAgY2FzZSBTZXQ6CiAgICAgY2FzZSBM
aXN0OgogICAgIGNhc2UgSHlwaGVuOgotICAgIGNhc2UgUHNldWRvOgorICAgIGNhc2UgUHNldWRv
Q2xhc3M6CisgICAgY2FzZSBQc2V1ZG9FbGVtZW50OgogICAgIGNhc2UgQ29udGFpbjoKICAgICBj
YXNlIEJlZ2luOgogICAgIGNhc2UgRW5kOgpAQCAtMTM0LDQ5ICsxMzUsNzAgQEAgdW5zaWduZWQg
aW50IENTU1NlbGVjdG9yOjpzcGVjaWZpY2l0eSgpCiAKIHZvaWQgQ1NTU2VsZWN0b3I6OmV4dHJh
Y3RQc2V1ZG9UeXBlKCkgY29uc3QKIHsKLSAgICBpZiAobWF0Y2ggIT0gUHNldWRvKQorICAgIGlm
IChtYXRjaCAhPSBQc2V1ZG9DbGFzcyAmJiBtYXRjaCAhPSBQc2V1ZG9FbGVtZW50KQogICAgICAg
ICByZXR1cm47CiAgICAgCiAgICAgc3RhdGljIEF0b21pY1N0cmluZyBhY3RpdmUoImFjdGl2ZSIp
OwogICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgYWZ0ZXIoImFmdGVyIik7CiAgICAgc3RhdGljIEF0
b21pY1N0cmluZyBhbnlMaW5rKCIta2h0bWwtYW55LWxpbmsiKTsKICAgICBzdGF0aWMgQXRvbWlj
U3RyaW5nIGJlZm9yZSgiYmVmb3JlIik7CisgICAgc3RhdGljIEF0b21pY1N0cmluZyBjb250YWlu
cygiY29udGFpbnMoIik7CisgICAgc3RhdGljIEF0b21pY1N0cmluZyBkaXNhYmxlZCgiZGlzYWJs
ZWQiKTsKICAgICBzdGF0aWMgQXRvbWljU3RyaW5nIGRyYWcoIi1raHRtbC1kcmFnIik7CiAgICAg
c3RhdGljIEF0b21pY1N0cmluZyBlbXB0eSgiZW1wdHkiKTsKKyAgICBzdGF0aWMgQXRvbWljU3Ry
aW5nIGVuYWJsZWQoImVuYWJsZWQiKTsKICAgICBzdGF0aWMgQXRvbWljU3RyaW5nIGZpcnN0Q2hp
bGQoImZpcnN0LWNoaWxkIik7CiAgICAgc3RhdGljIEF0b21pY1N0cmluZyBmaXJzdExldHRlcigi
Zmlyc3QtbGV0dGVyIik7CiAgICAgc3RhdGljIEF0b21pY1N0cmluZyBmaXJzdExpbmUoImZpcnN0
LWxpbmUiKTsKKyAgICBzdGF0aWMgQXRvbWljU3RyaW5nIGZpcnN0T2ZUeXBlKCJmaXJzdC1vZi10
eXBlIik7CiAgICAgc3RhdGljIEF0b21pY1N0cmluZyBmb2N1cygiZm9jdXMiKTsKICAgICBzdGF0
aWMgQXRvbWljU3RyaW5nIGhvdmVyKCJob3ZlciIpOworICAgIHN0YXRpYyBBdG9taWNTdHJpbmcg
aW5kZXRlcm1pbmF0ZSgiaW5kZXRlcm1pbmF0ZSIpOwogICAgIHN0YXRpYyBBdG9taWNTdHJpbmcg
bGluaygibGluayIpOwogICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgbGFuZygibGFuZygiKTsKICAg
ICBzdGF0aWMgQXRvbWljU3RyaW5nIGxhc3RDaGlsZCgibGFzdC1jaGlsZCIpOworICAgIHN0YXRp
YyBBdG9taWNTdHJpbmcgbGFzdE9mVHlwZSgibGFzdC1vZi10eXBlIik7CiAgICAgc3RhdGljIEF0
b21pY1N0cmluZyBub3RTdHIoIm5vdCgiKTsKKyAgICBzdGF0aWMgQXRvbWljU3RyaW5nIG50aENo
aWxkKCJudGgtY2hpbGQoIik7CisgICAgc3RhdGljIEF0b21pY1N0cmluZyBudGhMYXN0Q2hpbGQo
Im50aC1sYXN0LWNoaWxkKCIpOworICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgbnRoT2ZUeXBlKCJu
dGgtb2YtdHlwZSgiKTsKKyAgICBzdGF0aWMgQXRvbWljU3RyaW5nIG50aExhc3RPZlR5cGUoIm50
aC1sYXN0LW9mLXR5cGUoIik7CiAgICAgc3RhdGljIEF0b21pY1N0cmluZyBvbmx5Q2hpbGQoIm9u
bHktY2hpbGQiKTsKKyAgICBzdGF0aWMgQXRvbWljU3RyaW5nIG9ubHlPZlR5cGUoIm9ubHktb2Yt
dHlwZSIpOwogICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgcm9vdCgicm9vdCIpOwogICAgIHN0YXRp
YyBBdG9taWNTdHJpbmcgc2VsZWN0aW9uKCJzZWxlY3Rpb24iKTsKICAgICBzdGF0aWMgQXRvbWlj
U3RyaW5nIHRhcmdldCgidGFyZ2V0Iik7CiAgICAgc3RhdGljIEF0b21pY1N0cmluZyB2aXNpdGVk
KCJ2aXNpdGVkIik7CisgICAgYm9vbCBlbGVtZW50ID0gZmFsc2U7CS8vIHBzZXVkby1lbGVtZW50
CisgICAgYm9vbCBjb21wYXQgPSBmYWxzZTsJLy8gc2luZ2xlIGNvbG9uIGNvbXBhdGJpbGl0eSBt
b2RlCiAgICAgCiAgICAgX3BzZXVkb1R5cGUgPSBQc2V1ZG9PdGhlcjsKICAgICBpZiAodmFsdWUg
PT0gYWN0aXZlKQogICAgICAgICBfcHNldWRvVHlwZSA9IFBzZXVkb0FjdGl2ZTsKLSAgICBlbHNl
IGlmICh2YWx1ZSA9PSBhZnRlcikKKyAgICBlbHNlIGlmICh2YWx1ZSA9PSBhZnRlcikgewogICAg
ICAgICBfcHNldWRvVHlwZSA9IFBzZXVkb0FmdGVyOwotICAgIGVsc2UgaWYgKHZhbHVlID09IGFu
eUxpbmspCisgICAgICAgIGVsZW1lbnQgPSBjb21wYXQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAo
dmFsdWUgPT0gYW55TGluaykKICAgICAgICAgX3BzZXVkb1R5cGUgPSBQc2V1ZG9BbnlMaW5rOwot
ICAgIGVsc2UgaWYgKHZhbHVlID09IGJlZm9yZSkKKyAgICBlbHNlIGlmICh2YWx1ZSA9PSBiZWZv
cmUpIHsKICAgICAgICAgX3BzZXVkb1R5cGUgPSBQc2V1ZG9CZWZvcmU7CisgICAgICAgIGVsZW1l
bnQgPSBjb21wYXQgPSB0cnVlOworICAgIH0gLyplbHNlIGlmICh2YWx1ZSA9PSBjb250YWlucykK
KyAgICAgICAgX3BzZXVkb1R5cGUgPSBQc2V1ZG9Db250YWluczsqLwogICAgIGVsc2UgaWYgKHZh
bHVlID09IGRyYWcpCiAgICAgICAgIF9wc2V1ZG9UeXBlID0gUHNldWRvRHJhZzsKICAgICBlbHNl
IGlmICh2YWx1ZSA9PSBlbXB0eSkKICAgICAgICAgX3BzZXVkb1R5cGUgPSBQc2V1ZG9FbXB0eTsK
ICAgICBlbHNlIGlmICh2YWx1ZSA9PSBmaXJzdENoaWxkKQogICAgICAgICBfcHNldWRvVHlwZSA9
IFBzZXVkb0ZpcnN0Q2hpbGQ7Ci0gICAgZWxzZSBpZiAodmFsdWUgPT0gZmlyc3RMZXR0ZXIpCisg
ICAgZWxzZSBpZiAodmFsdWUgPT0gZmlyc3RMZXR0ZXIpIHsKICAgICAgICAgX3BzZXVkb1R5cGUg
PSBQc2V1ZG9GaXJzdExldHRlcjsKLSAgICBlbHNlIGlmICh2YWx1ZSA9PSBmaXJzdExpbmUpCisg
ICAgICAgIGVsZW1lbnQgPSBjb21wYXQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAodmFsdWUgPT0g
Zmlyc3RMaW5lKSB7CiAgICAgICAgIF9wc2V1ZG9UeXBlID0gUHNldWRvRmlyc3RMaW5lOworICAg
ICAgICBlbGVtZW50ID0gY29tcGF0ID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKHZhbHVlID09IGZp
cnN0T2ZUeXBlKQorICAgICAgICBfcHNldWRvVHlwZSA9IFBzZXVkb0ZpcnN0T2ZUeXBlOwogICAg
IGVsc2UgaWYgKHZhbHVlID09IGZvY3VzKQogICAgICAgICBfcHNldWRvVHlwZSA9IFBzZXVkb0Zv
Y3VzOwogICAgIGVsc2UgaWYgKHZhbHVlID09IGhvdmVyKQpAQCAtMTg3LDE5ICsyMDksMzcgQEAg
dm9pZCBDU1NTZWxlY3Rvcjo6ZXh0cmFjdFBzZXVkb1R5cGUoKSBjbwogICAgICAgICBfcHNldWRv
VHlwZSA9IFBzZXVkb0xhbmc7CiAgICAgZWxzZSBpZiAodmFsdWUgPT0gbGFzdENoaWxkKQogICAg
ICAgICBfcHNldWRvVHlwZSA9IFBzZXVkb0xhc3RDaGlsZDsKKyAgICBlbHNlIGlmICh2YWx1ZSA9
PSBsYXN0T2ZUeXBlKQorICAgICAgICBfcHNldWRvVHlwZSA9IFBzZXVkb0xhc3RPZlR5cGU7CiAg
ICAgZWxzZSBpZiAodmFsdWUgPT0gbm90U3RyKQogICAgICAgICBfcHNldWRvVHlwZSA9IFBzZXVk
b05vdDsKKyAgICBlbHNlIGlmICh2YWx1ZSA9PSBudGhDaGlsZCkKKyAgICAgICAgX3BzZXVkb1R5
cGUgPSBQc2V1ZG9OdGhDaGlsZDsKKyAgICBlbHNlIGlmICh2YWx1ZSA9PSBudGhMYXN0Q2hpbGQp
CisgICAgICAgIF9wc2V1ZG9UeXBlID0gUHNldWRvTnRoTGFzdENoaWxkOworICAgIGVsc2UgaWYg
KHZhbHVlID09IG50aE9mVHlwZSkKKyAgICAgICAgX3BzZXVkb1R5cGUgPSBQc2V1ZG9OdGhPZlR5
cGU7CisgICAgZWxzZSBpZiAodmFsdWUgPT0gbnRoTGFzdE9mVHlwZSkKKyAgICAgICAgX3BzZXVk
b1R5cGUgPSBQc2V1ZG9OdGhMYXN0T2ZUeXBlOwogICAgIGVsc2UgaWYgKHZhbHVlID09IG9ubHlD
aGlsZCkKICAgICAgICAgX3BzZXVkb1R5cGUgPSBQc2V1ZG9Pbmx5Q2hpbGQ7CisgICAgZWxzZSBp
ZiAodmFsdWUgPT0gb25seU9mVHlwZSkKKyAgICAgICAgX3BzZXVkb1R5cGUgPSBQc2V1ZG9Pbmx5
T2ZUeXBlOwogICAgIGVsc2UgaWYgKHZhbHVlID09IHJvb3QpCiAgICAgICAgIF9wc2V1ZG9UeXBl
ID0gUHNldWRvUm9vdDsKLSAgICBlbHNlIGlmICh2YWx1ZSA9PSBzZWxlY3Rpb24pCisgICAgZWxz
ZSBpZiAodmFsdWUgPT0gc2VsZWN0aW9uKSB7CiAgICAgICAgIF9wc2V1ZG9UeXBlID0gUHNldWRv
U2VsZWN0aW9uOwotICAgIGVsc2UgaWYgKHZhbHVlID09IHRhcmdldCkKKyAgICAgICAgZWxlbWVu
dCA9IHRydWU7CisgICAgfSBlbHNlIGlmICh2YWx1ZSA9PSB0YXJnZXQpCiAgICAgICAgIF9wc2V1
ZG9UeXBlID0gUHNldWRvVGFyZ2V0OwogICAgIGVsc2UgaWYgKHZhbHVlID09IHZpc2l0ZWQpCiAg
ICAgICAgIF9wc2V1ZG9UeXBlID0gUHNldWRvVmlzaXRlZDsKICAgICAKKyAgICBpZiAobWF0Y2gg
PT0gUHNldWRvQ2xhc3MgJiYgZWxlbWVudCkKKyAgICAgICAgaWYgKCFjb21wYXQpIF9wc2V1ZG9U
eXBlID0gUHNldWRvT3RoZXI7CisgICAgICAgIGVsc2UgbWF0Y2ggPSBQc2V1ZG9FbGVtZW50Owor
ICAgIGVsc2UgaWYgKG1hdGNoID09IFBzZXVkb0VsZW1lbnQgJiYgIWVsZW1lbnQpCisgICAgICAg
IF9wc2V1ZG9UeXBlID0gUHNldWRvT3RoZXI7CiAgICAgdmFsdWUgPSBudWxsQXRvbTsKIH0KIApA
QCAtMjQwLDExICsyODAsMTYgQEAgRE9NU3RyaW5nIENTU1NlbGVjdG9yOjpzZWxlY3RvclRleHQo
KSBjbwogICAgICAgICBzdHIgPSAiLiI7CiAgICAgICAgIHN0ciArPSBjcy0+dmFsdWUuc3RyaW5n
KCk7CiAgICAgfQotICAgIGVsc2UgaWYgKCB0YWcgPT0gYW55TG9jYWxOYW1lICYmIGNzLT5tYXRj
aCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvICkKKyAgICBlbHNlIGlmICggdGFnID09IGFueUxvY2Fs
TmFtZSAmJiBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzICkKICAgICB7CiAg
ICAgICAgIHN0ciA9ICI6IjsKICAgICAgICAgc3RyICs9IGNzLT52YWx1ZS5zdHJpbmcoKTsKICAg
ICB9CisgICAgZWxzZSBpZiAoIHRhZyA9PSBhbnlMb2NhbE5hbWUgJiYgY3MtPm1hdGNoID09IENT
U1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50ICkKKyAgICB7CisgICAgICAgIHN0ciA9ICI6OiI7Cisg
ICAgICAgIHN0ciArPSBjcy0+dmFsdWUuc3RyaW5nKCk7CisgICAgfQogICAgIGVsc2UKICAgICB7
CiAgICAgICAgIGlmICggdGFnID09IGFueUxvY2FsTmFtZSApCkBAIC0yNjEsMTEgKzMwNiwxNiBA
QCBET01TdHJpbmcgQ1NTU2VsZWN0b3I6OnNlbGVjdG9yVGV4dCgpIGNvCiAgICAgICAgICAgICBz
dHIgKz0gIi4iOwogICAgICAgICAgICAgc3RyICs9IGNzLT52YWx1ZS5zdHJpbmcoKTsKICAgICAg
ICAgfQotICAgICAgICBlbHNlIGlmICggY3MtPm1hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG8g
KQorICAgICAgICBlbHNlIGlmICggY3MtPm1hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
cyApCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0ciArPSAiOiI7CiAgICAgICAgICAgICBzdHIg
Kz0gY3MtPnZhbHVlLnN0cmluZygpOwogICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCBjcy0+
bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQgKQorICAgICAgICB7CisgICAgICAg
ICAgICBzdHIgKz0gIjo6IjsKKyAgICAgICAgICAgIHN0ciArPSBjcy0+dmFsdWUuc3RyaW5nKCk7
CisgICAgICAgIH0KICAgICAgICAgLy8gb3B0aW9uYWwgYXR0cmlidXRlCiAgICAgICAgIGlmICgg
Y3MtPmF0dHIgKSB7CiAgICAgICAgICAgICBET01TdHJpbmcgYXR0ck5hbWUgPSBnZXRBdHRyTmFt
ZSggY3MtPmF0dHIgKTsKQEAgLTI3Nyw3ICszMjcsNyBAQCBET01TdHJpbmcgQ1NTU2VsZWN0b3I6
OnNlbGVjdG9yVGV4dCgpIGNvCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpTZXQ6CiAgICAgICAgICAgICAgICAgc3RyICs9ICIgIjsgLy8vICMj
IGNvcnJlY3Q/Ci0gICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6TGlzdDoKICAgICAgICAgICAg
ICAgICBzdHIgKz0gIn49IjsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTMwMyw3ICszNTMs
NyBAQCBET01TdHJpbmcgQ1NTU2VsZWN0b3I6OnNlbGVjdG9yVGV4dCgpIGNvCiAgICAgfQogICAg
IGlmICggY3MtPnRhZ0hpc3RvcnkgKSB7CiAgICAgICAgIERPTVN0cmluZyB0YWdIaXN0b3J5VGV4
dCA9IGNzLT50YWdIaXN0b3J5LT5zZWxlY3RvclRleHQoKTsKLQkJaWYgKCBjcy0+cmVsYXRpb24g
PT0gRGlyZWN0QWRqYWNlbnQgKQorICAgICAgICBpZiAoIGNzLT5yZWxhdGlvbiA9PSBEaXJlY3RB
ZGphY2VudCApCiAgICAgICAgICAgICBzdHIgPSB0YWdIaXN0b3J5VGV4dCArICIgKyAiICsgc3Ry
OwogICAgICAgICBlbHNlIGlmICggY3MtPnJlbGF0aW9uID09IEluZGlyZWN0QWRqYWNlbnQgKQog
ICAgICAgICAgICAgc3RyID0gdGFnSGlzdG9yeVRleHQgKyAiIH4gIiArIHN0cjsKSW5kZXg6IGto
dG1sL2Nzcy9jc3NfYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2Nzcy9jc3NfYmFzZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXUg
LXAgLXIxLjExIGNzc19iYXNlLmgKLS0tIGNzc19iYXNlLmgJMjAwNS8wNi8xMSAwNTozMToxNgkx
LjExCisrKyBjc3NfYmFzZS5oCTIwMDUvMDYvMTEgMTk6MjU6NDQKQEAgLTExMywxMiArMTEzLDEz
IEBAIG5hbWVzcGFjZSBET00gewogCXsKIAkgICAgTm9uZSA9IDAsCiAJICAgIElkLAotICAgICAg
ICAgICAgQ2xhc3MsCisgICAgICAgIENsYXNzLAogCSAgICBFeGFjdCwKIAkgICAgU2V0LAogCSAg
ICBMaXN0LAogCSAgICBIeXBoZW4sCi0JICAgIFBzZXVkbywKKwkgICAgUHNldWRvQ2xhc3MsCisJ
ICAgIFBzZXVkb0VsZW1lbnQsCiAJICAgIENvbnRhaW4sICAgLy8gY3NzMzogRVtmb28qPSJiYXIi
XQogCSAgICBCZWdpbiwgICAgIC8vIGNzczM6IEVbZm9vXj0iYmFyIl0KIAkgICAgRW5kICAgICAg
ICAvLyBjc3MzOiBFW2ZvbyQ9ImJhciJdCkBAIC0xMjksOCArMTMwLDggQEAgbmFtZXNwYWNlIERP
TSB7CiAJICAgIERlc2NlbmRhbnQgPSAwLAogCSAgICBDaGlsZCwKIAkgICAgRGlyZWN0QWRqYWNl
bnQsCi0gICAgICAgICAgICBJbmRpcmVjdEFkamFjZW50LAotICAgICAgICAgICAgU3ViU2VsZWN0
b3IKKwkJSW5kaXJlY3RBZGphY2VudCwKKwkgICAgU3ViU2VsZWN0b3IKIAl9OwogCiAJZW51bSBQ
c2V1ZG9UeXBlCkBAIC0xMzksNDIgKzE0MCw1MSBAQCBuYW1lc3BhY2UgRE9NIHsKIAkgICAgUHNl
dWRvT3RoZXIsCiAJICAgIFBzZXVkb0VtcHR5LAogCSAgICBQc2V1ZG9GaXJzdENoaWxkLAotICAg
ICAgICAgICAgUHNldWRvTGFzdENoaWxkLAotICAgICAgICAgICAgUHNldWRvT25seUNoaWxkLAor
ICAgICAgICBQc2V1ZG9MYXN0Q2hpbGQsCisgICAgICAgIFBzZXVkb050aENoaWxkLAorICAgICAg
ICBQc2V1ZG9OdGhMYXN0Q2hpbGQsCisgICAgICAgIFBzZXVkb09ubHlDaGlsZCwKKwkgICAgUHNl
dWRvRmlyc3RPZlR5cGUsCisJICAgIFBzZXVkb0xhc3RPZlR5cGUsCisJICAgIFBzZXVkb050aE9m
VHlwZSwKKwkgICAgUHNldWRvTnRoTGFzdE9mVHlwZSwKKwkgICAgUHNldWRvT25seU9mVHlwZSwK
IAkgICAgUHNldWRvRmlyc3RMaW5lLAogCSAgICBQc2V1ZG9GaXJzdExldHRlciwKIAkgICAgUHNl
dWRvTGluaywKIAkgICAgUHNldWRvVmlzaXRlZCwKLSAgICAgICAgICAgIFBzZXVkb0FueUxpbmss
CisgICAgICAgIFBzZXVkb0FueUxpbmssCiAJICAgIFBzZXVkb0hvdmVyLAogCSAgICBQc2V1ZG9E
cmFnLAogCSAgICBQc2V1ZG9Gb2N1cywKIAkgICAgUHNldWRvQWN0aXZlLAotICAgICAgICAgICAg
UHNldWRvVGFyZ2V0LAorICAgICAgICBQc2V1ZG9UYXJnZXQsCiAJICAgIFBzZXVkb0JlZm9yZSwK
IAkgICAgUHNldWRvQWZ0ZXIsCi0gICAgICAgICAgICBQc2V1ZG9MYW5nLAotICAgICAgICAgICAg
UHNldWRvTm90LAotICAgICAgICAgICAgUHNldWRvUm9vdCwKLSAgICAgICAgICAgIFBzZXVkb1Nl
bGVjdGlvbgorICAgICAgICBQc2V1ZG9MYW5nLAorICAgICAgICBQc2V1ZG9Ob3QsCisvLyAgICAg
ICAgUHNldWRvQ29udGFpbnMsCisgICAgICAgIFBzZXVkb1Jvb3QsCisgICAgICAgIFBzZXVkb1Nl
bGVjdGlvbgogCX07CiAKIAlpbmxpbmUgUHNldWRvVHlwZSBwc2V1ZG9UeXBlKCkgY29uc3QKLQkg
ICAgeworCXsKIAkJaWYgKF9wc2V1ZG9UeXBlID09IFBzZXVkb05vdFBhcnNlZCkKIAkJICAgIGV4
dHJhY3RQc2V1ZG9UeXBlKCk7CiAJCXJldHVybiBfcHNldWRvVHlwZTsKLQkgICAgfQorCX0KIAog
CW11dGFibGUgRE9NOjpBdG9taWNTdHJpbmcgdmFsdWU7CiAJQ1NTU2VsZWN0b3IqIHRhZ0hpc3Rv
cnk7Ci0gICAgICAgIENTU1NlbGVjdG9yKiBzaW1wbGVTZWxlY3RvcjsgLy8gVXNlZCBmb3IgOm5v
dC4KLSAgICAgICAgQ1NTU2VsZWN0b3IqIG5leHRTZWxlY3RvcjsgLy8gdXNlZCBmb3IgLC1jaGFp
bmVkIHNlbGVjdG9ycworICAgIENTU1NlbGVjdG9yKiBzaW1wbGVTZWxlY3RvcjsgLy8gVXNlZCBm
b3IgOm5vdC4KKyAgICBDU1NTZWxlY3RvciogbmV4dFNlbGVjdG9yOyAvLyB1c2VkIGZvciAsLWNo
YWluZWQgc2VsZWN0b3JzCisvLyAgICBET006OkRPTVN0cmluZyBzdHJpbmdfYXJnOyAvLyBVc2Vk
IGJ5IDpjb250YWlucywgOmxhbmcgYW5kIDpudGgtKgogCVFfVUlOVDMyICAgICBhdHRyOwogCVFf
VUlOVDMyICAgICB0YWc7CiAKLSAgICAgICAgUmVsYXRpb24gcmVsYXRpb24gICAgIDogMzsKLQlN
YXRjaCAJIG1hdGNoICAgICAgICAgOiA0OworICAgIFJlbGF0aW9uIHJlbGF0aW9uICAgICA6IDM7
CisJbXV0YWJsZSBNYXRjaCBtYXRjaCAgIDogNDsKIAl1bnNpZ25lZCBpbnQgcHNldWRvSWQgOiAz
OwogCW11dGFibGUgUHNldWRvVHlwZSBfcHNldWRvVHlwZSA6IDU7CiAKSW5kZXg6IGtodG1sL2Nz
cy9jc3NwYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2Nzcy9jc3NwYXJzZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjk4CmRpZmYgLXUg
LXAgLXIxLjk4IGNzc3BhcnNlci5jcHAKLS0tIGNzc3BhcnNlci5jcHAJMjAwNS8wNS8xMSAwMjox
MDowOQkxLjk4CisrKyBjc3NwYXJzZXIuY3BwCTIwMDUvMDYvMTEgMTk6MjU6NDcKQEAgLTI0MzEs
MTggKzI0MzEsMjAgQEAgaW50IERPTTo6Q1NTUGFyc2VyOjpsZXgoIHZvaWQgKl95eWx2YWwgKQog
ICAgIGNhc2UgU0dNTF9DRDoKICAgICBjYXNlIElOQ0xVREVTOgogICAgIGNhc2UgREFTSE1BVENI
OgotCWJyZWFrOworCSAgICBicmVhazsKIAogICAgIGNhc2UgVVJJOgogICAgIGNhc2UgU1RSSU5H
OgogICAgIGNhc2UgSURFTlQ6CisgICAgY2FzZSBOVEg6CiAgICAgY2FzZSBIQVNIOgogICAgIGNh
c2UgRElNRU46CiAgICAgY2FzZSBVTklDT0RFUkFOR0U6CiAgICAgY2FzZSBGVU5DVElPTjoKLQl5
eWx2YWwtPnN0cmluZy5zdHJpbmcgPSB0OwotCXl5bHZhbC0+c3RyaW5nLmxlbmd0aCA9IGxlbmd0
aDsKLQlicmVhazsKKyAgICBjYXNlIE5PVEZVTkNUSU9OOgorCSAgICB5eWx2YWwtPnN0cmluZy5z
dHJpbmcgPSB0OworCSAgICB5eWx2YWwtPnN0cmluZy5sZW5ndGggPSBsZW5ndGg7CisJICAgIGJy
ZWFrOwogCiAgICAgY2FzZSBJTVBPUlRfU1lNOgogICAgIGNhc2UgUEFHRV9TWU06CkBAIC0yNDUw
LDE4ICsyNDUyLDE3IEBAIGludCBET006OkNTU1BhcnNlcjo6bGV4KCB2b2lkICpfeXlsdmFsICkK
ICAgICBjYXNlIEZPTlRfRkFDRV9TWU06CiAgICAgY2FzZSBDSEFSU0VUX1NZTToKICAgICBjYXNl
IE5BTUVTUEFDRV9TWU06Ci0KICAgICBjYXNlIElNUE9SVEFOVF9TWU06Ci0JYnJlYWs7CisJICAg
IGJyZWFrOwogCiAgICAgY2FzZSBRRU1TOgotCWxlbmd0aC0tOworCSAgICBsZW5ndGgtLTsKICAg
ICBjYXNlIEdSQURTOgotCWxlbmd0aC0tOworCSAgICBsZW5ndGgtLTsKICAgICBjYXNlIERFR1M6
CiAgICAgY2FzZSBSQURTOgogICAgIGNhc2UgS0hFUlo6Ci0JbGVuZ3RoLS07CisJICAgIGxlbmd0
aC0tOwogICAgIGNhc2UgTVNFQ1M6CiAgICAgY2FzZSBIRVJaOgogICAgIGNhc2UgRU1TOgpAQCAt
MjQ3MiwxNyArMjQ3MywxNyBAQCBpbnQgRE9NOjpDU1NQYXJzZXI6OmxleCggdm9pZCAqX3l5bHZh
bCApCiAgICAgY2FzZSBJTlM6CiAgICAgY2FzZSBQVFM6CiAgICAgY2FzZSBQQ1M6Ci0JbGVuZ3Ro
LS07CisJICAgIGxlbmd0aC0tOwogICAgIGNhc2UgU0VDUzoKICAgICBjYXNlIFBFUkNFTlRBR0U6
Ci0JbGVuZ3RoLS07CisJICAgIGxlbmd0aC0tOwogICAgIGNhc2UgTlVNQkVSOgotCXl5bHZhbC0+
dmFsID0gUVN0cmluZyggKFFDaGFyICopdCwgbGVuZ3RoICkudG9Eb3VibGUoKTsKLQkvL3FEZWJ1
ZygidmFsdWUgPSAlcywgY29udmVydGVkPSUuMmYiLCBRU3RyaW5nKCAoUUNoYXIgKil0LCBsZW5n
dGggKS5sYXRpbjEoKSwgeXlsdmFsLT52YWwgKTsKLQlicmVhazsKKwkgICAgeXlsdmFsLT52YWwg
PSBRU3RyaW5nKCAoUUNoYXIgKil0LCBsZW5ndGggKS50b0RvdWJsZSgpOworCSAgICAvL3FEZWJ1
ZygidmFsdWUgPSAlcywgY29udmVydGVkPSUuMmYiLCBRU3RyaW5nKCAoUUNoYXIgKil0LCBsZW5n
dGggKS5sYXRpbjEoKSwgeXlsdmFsLT52YWwgKTsKKwkgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0
OgotCWJyZWFrOworCSAgICBicmVhazsKICAgICB9CiAKICAgICByZXR1cm4gdG9rZW47CkluZGV4
OiBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjE4NgpkaWZmIC11IC1wIC1yMS4xODYgY3Nzc3R5bGVzZWxlY3Rvci5jcHAK
LS0tIGNzc3N0eWxlc2VsZWN0b3IuY3BwCTIwMDUvMDYvMTEgMDU6MzE6MTYJMS4xODYKKysrIGNz
c3N0eWxlc2VsZWN0b3IuY3BwCTIwMDUvMDYvMTEgMTk6MjU6NTIKQEAgLTk2Nyw2ICs5NjcsNTgg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5kZXJTdHlsZQogCiBzdGF0aWMgYm9v
bCBzdWJqZWN0OwogCisvLyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgcGFyc2luZyBudGgtYXJndW1l
bnRzCitzdGF0aWMgaW5saW5lIGJvb2wgbWF0Y2hOdGgoaW50IGNvdW50LCBjb25zdCBRU3RyaW5n
JiBudGgpCit7CisgICAgaWYgKG50aC5pc0VtcHR5KCkpIHJldHVybiBmYWxzZTsKKyAgICBpbnQg
YSA9IDA7CisgICAgaW50IGIgPSAwOworICAgIGlmIChudGggPT0gIm9kZCIpIHsKKyAgICAgICAg
YSA9IDI7CisgICAgICAgIGIgPSAxOworICAgIH0KKyAgICBlbHNlIGlmIChudGggPT0gImV2ZW4i
KSB7CisgICAgICAgIGEgPSAyOworICAgICAgICBiID0gMDsKKyAgICB9CisgICAgZWxzZSB7Cisg
ICAgICAgIGludCBuID0gbnRoLmZpbmQoJ24nKTsKKyAgICAgICAgaWYgKG4gIT0gLTEpIHsKKyAg
ICAgICAgICAgIGlmIChudGhbMF0gPT0gJy0nKQorICAgICAgICAgICAgICAgIGlmIChuPT0xKQor
ICAgICAgICAgICAgICAgICAgICBhID0gLTE7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICBhID0gbnRoLm1pZCgxLG4tMSkudG9JbnQoKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBpZiAobj09MCkKKyAgICAgICAgICAgICAgICAgICAgYSA9IDE7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBhID0gbnRoLmxlZnQo
bikudG9JbnQoKTsKKworICAgICAgICAgICAgaW50IHAgPSBudGguZmluZCgnKycpOworICAgICAg
ICAgICAgaWYgKHAgIT0gLTEpCisgICAgICAgICAgICAgICAgYiA9IG50aC5taWQocCsxKS50b0lu
dCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYiA9IG50aC50b0lu
dCgpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChhID09IDApCisgICAgICAgIHJldHVybiBj
b3VudCA9PSBiOworICAgIGVsc2UgaWYgKGEgPiAwKQorICAgICAgICBpZiAoY291bnQgPCBiKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1
cm4gKGNvdW50IC0gYikgJSBhID09IDA7CisgICAgZWxzZSBpZiAoYSA8IDApIHsKKyAgICAgICAg
aWYgKGNvdW50ID4gYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmV0dXJuIChiIC0gY291bnQpICUgKC1hKSA9PSAwOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3RvcihD
U1NTZWxlY3Rvciogc2VsLCBFbGVtZW50SW1wbCAqZSkKIHsKICAgICBkeW5hbWljUHNldWRvID0g
UmVuZGVyU3R5bGU6Ok5PUFNFVURPOwpAQCAtOTgwLDcgKzEwMzIsNyBAQCBib29sIENTU1N0eWxl
U2VsZWN0b3I6OmNoZWNrU2VsZWN0b3IoQ1NTCiAgICAgLy8gc28sIHdlIGNhbid0IGFsbG93IHRo
YXQgdG8gYXBwbHkgdG8gZXZlcnkgZWxlbWVudCBvbiB0aGUgcGFnZS4gIFdlIGFzc3VtZSB0aGUg
YXV0aG9yIGludGVuZGVkCiAgICAgLy8gdG8gYXBwbHkgdGhlIHJ1bGVzIG9ubHkgdG8gbGlua3Mu
CiAgICAgYm9vbCBvbmx5SG92ZXJBY3RpdmUgPSAoc2VsLT50YWcgPT0gYW55UU5hbWUgJiYKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNl
dWRvICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbC0+bWF0Y2ggPT0gQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0NsYXNzICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2Vs
LT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyIHx8CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBz
ZXVkb0FjdGl2ZSkpKTsKICAgICBib29sIGFmZmVjdGVkQnlIb3ZlciA9IHN0eWxlID8gc3R5bGUt
PmFmZmVjdGVkQnlIb3ZlclJ1bGVzKCkgOiBmYWxzZTsKQEAgLTEwMDMsNzAgKzEwNTUsNzQgQEAg
Ym9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKENTUwogICAgICAgICAKICAgICAg
ICAgc3dpdGNoKHJlbGF0aW9uKQogICAgICAgICB7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OkRlc2NlbmRhbnQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIG1hdGNo
IG5lZWRzIHRvIGtub3cgaG93IHRvIGJhY2t0cmFjayBhbmQgYmUgbm9uLWRldGVybWluaXN0aWMu
Ci0gICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICB3aGlsZSghZm91
bmQpCisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpEZXNjZW5kYW50OgogICAgICAgICAg
ICAgewotCQluID0gbi0+cGFyZW50Tm9kZSgpOwotICAgICAgICAgICAgICAgIGlmKCFuIHx8ICFu
LT5pc0VsZW1lbnROb2RlKCkpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyBtYXRjaCBuZWVkcyB0byBrbm93IGhvdyB0byBiYWNrdHJhY2sgYW5kIGJlIG5vbi1k
ZXRlcm1pbmlzdGljLgorICAgICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICB3aGlsZSghZm91bmQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBuID0gbi0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgICAgICAgICBpZighbiB8
fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgICAgICBFbGVtZW50SW1wbCAqZWxlbSA9IHN0YXRpY19jYXN0
PEVsZW1lbnRJbXBsICo+KG4pOworICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tPbmVTZWxl
Y3RvcihzZWwsIGVsZW0pKQorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxkOgorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKCFz
dHJpY3RQYXJzaW5nKQorICAgICAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiBuLT5pbXBsaWNp
dE5vZGUoKSkgbiA9IG4tPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZighbiB8fCAh
bi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgRWxlbWVudEltcGwgKmVsZW0gPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1w
bCAqPihuKTsKLSAgICAgICAgICAgICAgICBpZiAoY2hlY2tPbmVTZWxlY3RvcihzZWwsIGVsZW0p
KSBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCFjaGVja09uZVNlbGVjdG9yKHNl
bCwgZWxlbSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxkOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBuID0gbi0+cGFyZW50Tm9kZSgpOwotICAgICAgICAgICAgaWYgKCFzdHJpY3RQYXJzaW5nKQot
ICAgICAgICAgICAgICAgIHdoaWxlIChuICYmIG4tPmltcGxpY2l0Tm9kZSgpKSBuID0gbi0+cGFy
ZW50Tm9kZSgpOwotICAgICAgICAgICAgaWYoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgRWxlbWVudEltcGwgKmVsZW0gPSBzdGF0aWNfY2FzdDxF
bGVtZW50SW1wbCAqPihuKTsKLSAgICAgICAgICAgIGlmICghY2hlY2tPbmVTZWxlY3RvcihzZWws
IGVsZW0pKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpEaXJlY3RBZGphY2VudDoKLSAgICAgICAgewotICAgICAg
ICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgd2hpbGUgKG4gJiYg
IW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJs
aW5nKCk7Ci0gICAgICAgICAgICBpZiAoIW4pIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIEVs
ZW1lbnRJbXBsICplbGVtID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihuKTsKLSAgICAgICAg
ICAgIGlmICghY2hlY2tPbmVTZWxlY3RvcihzZWwsIGVsZW0pKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OkluZGlyZWN0QWRqYWNlbnQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIG1hdGNoIG5lZWRzIHRvIGtub3cgaG93IHRvIGJhY2t0cmFjayBhbmQgYmUg
bm9uLWRldGVybWluaXN0aWMuCi0gICAgICAgICAgICBFbGVtZW50SW1wbCAqZWxlbSA9IDA7Ci0g
ICAgICAgICAgICBkbyB7CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpEaXJlY3RBZGph
Y2VudDoKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJs
aW5nKCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSkK
ICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAg
ICAgICAgIGlmICghbikKKyAgICAgICAgICAgICAgICBpZiAoIW4pIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBFbGVtZW50SW1wbCAqZWxlbSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBs
Kj4obik7CisgICAgICAgICAgICAgICAgaWYgKCFjaGVja09uZVNlbGVjdG9yKHNlbCwgZWxlbSkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBlbGVt
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihuKTsKLSAgICAgICAgICAgIH0gd2hpbGUgKCFj
aGVja09uZVNlbGVjdG9yKHNlbCwgZWxlbSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcjoKLQl7Ci0gICAgICAgICAg
ICBpZiAob25seUhvdmVyQWN0aXZlKQotICAgICAgICAgICAgICAgIG9ubHlIb3ZlckFjdGl2ZSA9
IChzZWwtPm1hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG8gJiYKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHNlbC0+cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1
ZG9Ib3ZlciB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsLT5wc2V1
ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0FjdGl2ZSkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6SW5k
aXJlY3RBZGphY2VudDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
VGhpcyBtYXRjaCBuZWVkcyB0byBrbm93IGhvdyB0byBiYWNrdHJhY2sgYW5kIGJlIG5vbi1kZXRl
cm1pbmlzdGljLgorICAgICAgICAgICAgICAgIEVsZW1lbnRJbXBsICplbGVtID0gMDsKKyAgICAg
ICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxp
bmcoKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVudE5vZGUo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFuKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBlbGVtID0gc3RhdGljX2Nhc3Q8RWxlbWVudElt
cGwqPihuKTsKKyAgICAgICAgICAgICAgICB9IHdoaWxlICghY2hlY2tPbmVTZWxlY3RvcihzZWws
IGVsZW0pKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yOgorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmIChvbmx5SG92ZXJBY3RpdmUpCisgICAgICAgICAgICAgICAgICAgIG9ubHlI
b3ZlckFjdGl2ZSA9IChzZWwtPm1hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyAmJgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsLT5wc2V1ZG9UeXBlKCkg
PT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0
aXZlKSk7CiAgICAgICAgICAgICAKLQkgICAgLy9rZERlYnVnKCkgPDwgIkNTU09yZGVyZWRSdWxl
OjpjaGVja1NlbGVjdG9yIiA8PCBlbmRsOwotCSAgICBFbGVtZW50SW1wbCAqZWxlbSA9IHN0YXRp
Y19jYXN0PEVsZW1lbnRJbXBsICo+KG4pOwotCSAgICAvLyBhIHNlbGVjdG9yIGlzIGludmFsaWQg
aWYgc29tZXRoaW5nIGZvbGxvd3MgOmZpcnN0LXh4eAotCSAgICBpZiAoZHluYW1pY1BzZXVkbyAh
PSBSZW5kZXJTdHlsZTo6Tk9QU0VVRE8pCi0JCXJldHVybiBmYWxzZTsKLQkgICAgaWYgKCFjaGVj
a09uZVNlbGVjdG9yKHNlbCwgZWxlbSkpIHJldHVybiBmYWxzZTsKLQkgICAgLy9rZERlYnVnKCkg
PDwgIkNTU09yZGVyZWRSdWxlOjpjaGVja1NlbGVjdG9yOiBwYXNzZWQiIDw8IGVuZGw7Ci0JICAg
IGJyZWFrOwotCX0KKwkgICAgICAgICAgICAvL2tkRGVidWcoKSA8PCAiQ1NTT3JkZXJlZFJ1bGU6
OmNoZWNrU2VsZWN0b3IiIDw8IGVuZGw7CisJICAgICAgICAgICAgRWxlbWVudEltcGwgKmVsZW0g
PSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKTsKKwkgICAgICAgICAgICAvLyBhIHNlbGVj
dG9yIGlzIGludmFsaWQgaWYgc29tZXRoaW5nIGZvbGxvd3MgOmZpcnN0LXh4eAorCSAgICAgICAg
ICAgIGlmIChkeW5hbWljUHNldWRvICE9IFJlbmRlclN0eWxlOjpOT1BTRVVETykKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCSAgICAgICAgICAgIGlmICghY2hlY2tPbmVTZWxl
Y3RvcihzZWwsIGVsZW0pKSByZXR1cm4gZmFsc2U7CisJICAgICAgICAgICAgLy9rZERlYnVnKCkg
PDwgIkNTU09yZGVyZWRSdWxlOjpjaGVja1NlbGVjdG9yOiBwYXNzZWQiIDw8IGVuZGw7CisJICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmVsYXRp
b24gPSBzZWwtPnJlbGF0aW9uOwogICAgIH0KQEAgLTEwNzgsNyArMTEzNCw3IEBAIGJvb2wgQ1NT
U3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3RvcihDU1MKICAgICBpZiAob25seUhvdmVyQWN0aXZl
ICYmIHN1YmplY3QpIHsKICAgICAgICAgaWYgKHBzZXVkb1N0YXRlID09IFBzZXVkb1Vua25vd24p
CiAgICAgICAgICAgICBjaGVja1BzZXVkb1N0YXRlKGUpOwotCisgICAgICAgIAogICAgICAgICBp
ZiAocHNldWRvU3RhdGUgPT0gUHNldWRvTm9uZSkgewogICAgICAgICAgICAgaWYgKCFhZmZlY3Rl
ZEJ5SG92ZXIgJiYgc3R5bGUtPmFmZmVjdGVkQnlIb3ZlclJ1bGVzKCkpCiAgICAgICAgICAgICAg
ICAgc3R5bGUtPnNldEFmZmVjdGVkQnlIb3ZlclJ1bGVzKGZhbHNlKTsKQEAgLTEyMTUsMjMgKzEy
NzEsMzEgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAgICAg
ICAgICAgICAgICYmIHN0cltzZWxTdHIubGVuZ3RoKCldICE9ICctJykgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3M6CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQ6CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSAg
ICBpZihzZWwtPm1hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG8pCisgICAgaWYoc2VsLT5tYXRj
aCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MgfHwgc2VsLT5tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6UHNldWRvRWxlbWVudCkKICAgICB7CiAgICAgICAgIC8vIFBzZXVkbyBlbGVtZW50cy4gV2Ug
bmVlZCB0byBjaGVjayBmaXJzdCBjaGlsZCBoZXJlLiBObyBkeW5hbWljIHBzZXVkbwogICAgICAg
ICAvLyBlbGVtZW50cyBmb3IgdGhlIG1vbWVudAotLy8Ja2REZWJ1ZygpIDw8ICJDU1NPcmRlcmVk
UnVsZTo6cHNldWRvICIgPDwgdmFsdWUgPDwgZW5kbDsKLQlzd2l0Y2ggKHNlbC0+cHNldWRvVHlw
ZSgpKSB7CisvLyAgICAgIGtkRGVidWcoKSA8PCAiQ1NTT3JkZXJlZFJ1bGU6OnBzZXVkbyAiIDw8
IHZhbHVlIDw8IGVuZGw7CisJICAgIHN3aXRjaCAoc2VsLT5wc2V1ZG9UeXBlKCkpIHsKKwkgICAg
ICAgIC8vIFBzZXVkbyBjbGFzc2VzOgogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvRW1wdHk6CisgICAgICAgICAgICAgICAgLy8gSWYgZSBpcyBub3QgY2xvc2VkIHlldCB3ZSBk
b24ndCBrbm93IHRoZSBudW1iZXIgb2YgY2hpbGRyZW4KKyAgICAgICAgICAgICAgICBpZiAoIWUt
PmNsb3NlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGUtPnNldFJlc3R5bGVTZWxmTGF0ZSgp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGlmICghZS0+Zmlyc3RDaGlsZCgpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0Q2hpbGQ6IHsKICAgICAgICAgICAgICAgICAvLyBmaXJz
dC1jaGlsZCBtYXRjaGVzIHRoZSBmaXJzdCBjaGlsZCB0aGF0IGlzIGFuIGVsZW1lbnQhCi0gICAg
ICAgICAgICAgICAgaWYgKGUtPnBhcmVudE5vZGUoKSkgeworICAgICAgICAgICAgICAgIGlmIChl
LT5wYXJlbnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgRE9NOjpOb2RlSW1wbCogbiA9IGUtPnByZXZpb3VzU2libGluZygp
OwogICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSAp
CiAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7CkBAIC0x
MjQyLDcgKzEzMDYsMTIgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9y
KAogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGFz
dENoaWxkOiB7CiAgICAgICAgICAgICAgICAgLy8gbGFzdC1jaGlsZCBtYXRjaGVzIHRoZSBsYXN0
IGNoaWxkIHRoYXQgaXMgYW4gZWxlbWVudCEKLSAgICAgICAgICAgICAgICBpZiAoZS0+cGFyZW50
Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJl
bnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWUt
PnBhcmVudE5vZGUoKS0+Y2xvc2VkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGUtPnNl
dFJlc3R5bGVMYXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxFbGVt
ZW50SW1wbCo+KGUtPnBhcmVudE5vZGUoKSktPnNldFJlc3R5bGVDaGlsZHJlbkxhdGUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICBET006Ok5vZGVJbXBsKiBuID0gZS0+bmV4dFNpYmxpbmco
KTsKICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBuICYmICFuLT5pc0VsZW1lbnROb2RlKCkg
KQogICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7CkBAIC0xMjUz
LDcgKzEzMjIsMTIgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKAog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT25seUNo
aWxkOiB7CiAgICAgICAgICAgICAgICAgLy8gSWYgYm90aCBmaXJzdC1jaGlsZCBhbmQgbGFzdC1j
aGlsZCBhcHBseSwgdGhlbiBvbmx5LWNoaWxkIGFwcGxpZXMuCi0gICAgICAgICAgICAgICAgaWYg
KGUtPnBhcmVudE5vZGUoKSkgeworICAgICAgICAgICAgICAgIGlmIChlLT5wYXJlbnROb2RlKCkg
JiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFlLT5wYXJlbnROb2RlKCktPmNsb3NlZCgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBlLT5zZXRSZXN0eWxlTGF0ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8RWxlbWVudEltcGwqPihlLT5wYXJlbnROb2RlKCkpLT5zZXRSZXN0eWxlQ2hpbGRyZW5M
YXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgRE9NOjpOb2RlSW1wbCogbiA9IGUtPnBy
ZXZpb3VzU2libGluZygpOwogICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIG4gJiYgIW4tPmlz
RWxlbWVudE5vZGUoKSApCiAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNT
aWJsaW5nKCk7CkBAIC0xMjY3LDE4ICsxMzQxLDY5IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6
Y2hlY2tPbmVTZWxlY3RvcigKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9G
aXJzdExpbmU6Ci0gICAgICAgICAgICAgICAgaWYgKCBzdWJqZWN0ICkgewotICAgICAgICAgICAg
ICAgICAgICBkeW5hbWljUHNldWRvPVJlbmRlclN0eWxlOjpGSVJTVF9MSU5FOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb050aENoaWxkOgorICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoTGFz
dENoaWxkOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvRmlyc3RPZlR5cGU6IHsKKyAgICAgICAgICAgIC8vIGZpcnN0LW9mLXR5cGUg
bWF0Y2hlcyB0aGUgZmlyc3QgZWxlbWVudCBvZiBpdHMgdHlwZSEKKyAgICAgICAgICAgICAgICBp
ZiAoZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IERPTVN0cmluZyYgdHlwZSA9IGUtPnRhZ05hbWUo
KTsKKyAgICAgICAgICAgICAgICAgICAgRE9NOjpOb2RlSW1wbCogbiA9IGUtPnByZXZpb3VzU2li
bGluZygpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIG4gKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pLT50YWdOYW1lKCkgPT0gdHlw
ZSkgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5n
KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhbiAp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9GaXJzdExldHRlcjoKLSAgICAgICAgICAgICAgICBpZiAoIHN1YmplY3QgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGR5bmFtaWNQc2V1ZG89UmVuZGVyU3R5bGU6OkZJUlNUX0xFVFRFUjsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MYXN0T2ZUeXBlOiB7CisgICAgICAgICAgICAg
ICAgLy8gbGFzdC1jaGlsZCBtYXRjaGVzIHRoZSBsYXN0IGNoaWxkIHRoYXQgaXMgYW4gZWxlbWVu
dCEKKyAgICAgICAgICAgICAgICBpZiAoZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUo
KS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghZS0+cGFyZW50
Tm9kZSgpLT5jbG9zZWQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZS0+c2V0UmVzdHls
ZUxhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVsZW1lbnRJbXBs
Kj4oZS0+cGFyZW50Tm9kZSgpKS0+c2V0UmVzdHlsZUNoaWxkcmVuTGF0ZSgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IERPTVN0cmluZyYgdHlwZSA9IGUtPnRhZ05hbWUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgRE9NOjpOb2RlSW1wbCogbiA9IGUtPm5leHRTaWJsaW5nKCk7Cisg
ICAgICAgICAgICAgICAgICAgIHdoaWxlICggbiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChuLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obiktPnRhZ05hbWUoKSA9PSB0eXBlKSBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICggIW4gKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvT25seU9mVHlwZTogeworICAgICAgICAgICAgICAgIC8vIElmIGJvdGggZmlyc3Qtb2Yt
dHlwZSBhbmQgbGFzdC1vZi10eXBlIGFwcGx5LCB0aGVuIG9ubHktb2YtdHlwZSBhcHBsaWVzLgor
ICAgICAgICAgICAgICAgIGlmIChlLT5wYXJlbnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5p
c0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFlLT5wYXJlbnROb2Rl
KCktPmNsb3NlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlLT5zZXRSZXN0eWxlTGF0
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihl
LT5wYXJlbnROb2RlKCkpLT5zZXRSZXN0eWxlQ2hpbGRyZW5MYXRlKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5nJiB0eXBlID0gZS0+dGFnTmFtZSgpOworICAgICAg
ICAgICAgICAgICAgICBET006Ok5vZGVJbXBsKiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7Cisg
ICAgICAgICAgICAgICAgICAgIHdoaWxlICggbiAmJiAhKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBz
dGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pLT50YWdOYW1lKCkgPT0gdHlwZSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICggIW4gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuID0gZS0+bmV4dFNp
YmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggbiAmJiAhKG4tPmlzRWxl
bWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pLT50YWdOYW1lKCkgPT0g
dHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFuICkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJCWNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb050aE9mVHlwZToKKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb050aExhc3RPZlR5cGU6CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9UYXJnZXQ6CiAgICAgICAgICAgICAgICAgaWYgKGUg
PT0gZS0+Z2V0RG9jdW1lbnQoKS0+Z2V0Q1NTVGFyZ2V0KCkpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMTM2MSw2ICsxNDg2LDI1IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rv
cjo6Y2hlY2tPbmVTZWxlY3RvcigKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CisvKiAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0NvbnRhaW5zOiovCisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MYW5n
OgorICAgICAgICAgICAgICAgIC8qIG5vdCBzdXBwb3J0ZWQgZm9yIG5vdyAqLworICAgICAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT3RoZXI6CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFBzZXVkby1lbGVtZW50czoKKyAgICAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0TGluZToKKyAgICAgICAgICAgICAgICBp
ZiAoIHN1YmplY3QgKSB7CisgICAgICAgICAgICAgICAgICAgIGR5bmFtaWNQc2V1ZG89UmVuZGVy
U3R5bGU6OkZJUlNUX0xJTkU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0TGV0dGVyOgorICAgICAgICAgICAgICAgIGlmICggc3Vi
amVjdCApIHsKKyAgICAgICAgICAgICAgICAgICAgZHluYW1pY1BzZXVkbz1SZW5kZXJTdHlsZTo6
RklSU1RfTEVUVEVSOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9TZWxlY3Rpb246CiAgICAgICAgICAgICAgICAgZHluYW1pY1BzZXVkbyA9
IFJlbmRlclN0eWxlOjpTRUxFQ1RJT047CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0xMzc0LDEyICsxNTE4LDggQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVj
dG9yKAogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTm90UGFyc2VkOgogICAg
ICAgICAgICAgICAgIGFzc2VydChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MYW5nOgotICAgICAgICAgICAgICAgIC8q
IG5vdCBzdXBwb3J0ZWQgZm9yIG5vdyAqLwotICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvT3RoZXI6Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQlyZXR1cm4g
ZmFsc2U7CisJICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gIyMjIGFkZCB0aGUgcmVz
dCBvZiB0aGUgY2hlY2tzLi4uCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBraHRtbC9jc3MvcGFy
c2VyLnkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL3Bh
cnNlci55LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM3CmRpZmYgLXUgLXAgLXIxLjM3IHBhcnNl
ci55Ci0tLSBwYXJzZXIueQkyMDA1LzA2LzExIDA1OjMxOjE3CTEuMzcKKysrIHBhcnNlci55CTIw
MDUvMDYvMTEgMTk6MjU6NTMKQEAgLTE3NSw2ICsxNzUsOCBAQCBzdGF0aWMgaW50IGNzc3l5bGV4
KCBZWVNUWVBFICp5eWx2YWwgKSB7CiAKICV0b2tlbiA8c3RyaW5nPiBJREVOVAogCisldG9rZW4g
PHN0cmluZz4gTlRICisKICV0b2tlbiA8c3RyaW5nPiBIQVNICiAldG9rZW4gJzonCiAldG9rZW4g
Jy4nCkBAIC0yMTQsNiArMjE2LDcgQEAgc3RhdGljIGludCBjc3N5eWxleCggWVlTVFlQRSAqeXls
dmFsICkgewogCiAldG9rZW4gPHN0cmluZz4gVVJJCiAldG9rZW4gPHN0cmluZz4gRlVOQ1RJT04K
KyV0b2tlbiA8c3RyaW5nPiBOT1RGVU5DVElPTgogCiAldG9rZW4gPHN0cmluZz4gVU5JQ09ERVJB
TkdFCiAKQEAgLTU4OSw4ICs1OTIsNyBAQCBzZWxlY3RvcjoKICAgICAgICAgaWYgKCEkMSkgewog
ICAgICAgICAgICAgZGVsZXRlICQzOwogICAgICAgICAgICAgJCQgPSAwOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UgaWYgKCQkKSB7CisgICAgICAgIH0gZWxzZSBpZiAoJCQpIHsKICAgICAgICAg
ICAgIENTU1NlbGVjdG9yICplbmQgPSAkJDsKICAgICAgICAgICAgIHdoaWxlKCBlbmQtPnRhZ0hp
c3RvcnkgKQogICAgICAgICAgICAgICAgIGVuZCA9IGVuZC0+dGFnSGlzdG9yeTsKQEAgLTYwMCw3
ICs2MDIsNyBAQCBzZWxlY3RvcjoKICAgICAgICAgICAgICAgICAkMiA9PSBDU1NTZWxlY3Rvcjo6
Q2hpbGQgKSB7CiAgICAgICAgICAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NT
UGFyc2VyICo+KHBhcnNlcik7CiAgICAgICAgICAgICAgICAgRE9NOjpEb2N1bWVudEltcGwgKmRv
YyA9IHAtPmRvY3VtZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCBkb2MgKQorICAgICAgICAg
ICAgICAgIGlmIChkb2MpCiAgICAgICAgICAgICAgICAgICAgIGRvYy0+c2V0VXNlc0Rlc2NlbmRh
bnRSdWxlcyh0cnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKCQyID09
IENTU1NlbGVjdG9yOjpEaXJlY3RBZGphY2VudCB8fApAQCAtODE3LDI3ICs4MTksNTkgQEAgaWRl
bnRfb3Jfc3RyaW5nOgogcHNldWRvOgogICAgICc6JyBJREVOVCB7CiAgICAgICAgICQkID0gbmV3
IENTU1NlbGVjdG9yKCk7Ci0gICAgICAgICQkLT5tYXRjaCA9IENTU1NlbGVjdG9yOjpQc2V1ZG87
CisgICAgICAgICQkLT5tYXRjaCA9IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzczsKICAgICAgICAg
JDIubG93ZXIoKTsKICAgICAgICAgJCQtPnZhbHVlID0gYXRvbWljU3RyaW5nKCQyKTsKLSAgICAg
ICAgaWYgKCQkLT52YWx1ZSA9PSAiZW1wdHkiIHx8ICQkLT52YWx1ZSA9PSAib25seS1jaGlsZCIg
fHwKLSAgICAgICAgICAgICQkLT52YWx1ZSA9PSAiZmlyc3QtY2hpbGQiIHx8ICQkLT52YWx1ZSA9
PSAibGFzdC1jaGlsZCIpIHsKKyAgICAgICAgaWYgKCQkLT52YWx1ZSA9PSAiZW1wdHkiIHx8Cisg
ICAgICAgICAgICAkJC0+dmFsdWUgPT0gImZpcnN0LWNoaWxkIiB8fCAkJC0+dmFsdWUgPT0gImZp
cnN0LW9mLXR5cGUiIHx8CisgICAgICAgICAgICAkJC0+dmFsdWUgPT0gImxhc3QtY2hpbGQiIHx8
ICQkLT52YWx1ZSA9PSAibGFzdC1vZi10eXBlIiB8fAorICAgICAgICAgICAgJCQtPnZhbHVlID09
ICJvbmx5LWNoaWxkIiB8fCAkJC0+dmFsdWUgPT0gIm9ubHktb2YtdHlwZSIgLyp8fAorICAgICAg
ICAgICAgJCQtPnZhbHVlID09ICJudGgtY2hpbGQiIHx8ICQkLT52YWx1ZSA9PSAibnRoLW9mLXR5
cGUiIHx8CisgICAgICAgICAgICAkJC0+dmFsdWUgPT0gIm50aC1sYXN0LWNoaWxkIiB8fCAkJC0+
dmFsdWUgPT0gIm50aC1sYXN0LW9mLXR5cGUiKi8pIHsKICAgICAgICAgICAgIENTU1BhcnNlciAq
cCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwogICAgICAgICAgICAgRE9NOjpE
b2N1bWVudEltcGwgKmRvYyA9IHAtPmRvY3VtZW50KCk7CiAgICAgICAgICAgICBpZiAoZG9jKQog
ICAgICAgICAgICAgICAgIGRvYy0+c2V0VXNlc1NpYmxpbmdSdWxlcyh0cnVlKTsKICAgICAgICAg
fQogICAgIH0KLSAgICB8Ci0gICAgJzonICc6JyBJREVOVCB7CisgICAgfCAnOicgJzonIElERU5U
IHsKICAgICAgICAgJCQgPSBuZXcgQ1NTU2VsZWN0b3IoKTsKLSAgICAgICAgJCQtPm1hdGNoID0g
Q1NTU2VsZWN0b3I6OlBzZXVkbzsKKyAgICAgICAgJCQtPm1hdGNoID0gQ1NTU2VsZWN0b3I6OlBz
ZXVkb0VsZW1lbnQ7CiAgICAgICAgICQzLmxvd2VyKCk7CiAgICAgICAgICQkLT52YWx1ZSA9IGF0
b21pY1N0cmluZygkMyk7CisgICAgfQorICAgIC8vIHVzZWQgYnkgOm50aC0qCisvKiAgICB8ICc6
JyBGVU5DVElPTiBOVEggJyknIHsKKyAgICAgICAgJCQgPSBuZXcgQ1NTU2VsZWN0b3IoKTsKKyAg
ICAgICAgJCQtPm1hdGNoID0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzOworICAgICAgICAkJC0+
c3RyaW5nX2FyZyA9IGF0b21pY1N0cmluZygkMyk7CisgICAgICAgICQkLT52YWx1ZSA9IGF0b21p
Y1N0cmluZygkMik7CisgICAgfQorICAgIC8vIHVzZWQgYnkgOm50aC0qCisgICAgfCAnOicgRlVO
Q1RJT04gTlVNQkVSICcpJyB7CisgICAgICAgICQkID0gbmV3IENTU1NlbGVjdG9yKCk7CisgICAg
ICAgICQkLT5tYXRjaCA9IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzczsKKyAgICAgICAgJCQtPnN0
cmluZ19hcmcgPSBRU3RyaW5nOjpudW1iZXIoJDMpOworICAgICAgICAkJC0+dmFsdWUgPSBhdG9t
aWNTdHJpbmcoJDIpOworICAgIH0KKyAgICAvLyB1c2VkIGJ5IDpudGgtKiBhbmQgOmxhbmcKKyAg
ICB8ICc6JyBGVU5DVElPTiBJREVOVCAnKScgeworICAgICAgICAkJCA9IG5ldyBDU1NTZWxlY3Rv
cigpOworICAgICAgICAkJC0+bWF0Y2ggPSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3M7CisgICAg
ICAgICQkLT5zdHJpbmdfYXJnID0gYXRvbWljU3RyaW5nKCQzKTsKKyAgICAgICAgJCQtPnZhbHVl
ID0gYXRvbWljU3RyaW5nKCQyKTsKKyAgICB9CisgICAgLy8gdXNlZCBieSA6Y29udGFpbnMKKyAg
ICB8ICc6JyBGVU5DVElPTiBTVFJJTkcgJyknIHsKKyAgICAgICAgJCQgPSBuZXcgQ1NTU2VsZWN0
b3IoKTsKKyAgICAgICAgJCQtPm1hdGNoID0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzOworICAg
ICAgICAkJC0+c3RyaW5nX2FyZyA9IGF0b21pY1N0cmluZygkMyk7CisgICAgICAgICQkLT52YWx1
ZSA9IGF0b21pY1N0cmluZygkMik7CiAgICAgfQotICAgIHwgJzonIEZVTkNUSU9OIG1heWJlX3Nw
YWNlIHNpbXBsZV9zZWxlY3RvciBtYXliZV9zcGFjZSAnKScgeworKi8gICAgLy8gdXNlZCBvbmx5
IGJ5IDpub3QKKyAgICB8ICc6JyBOT1RGVU5DVElPTiBtYXliZV9zcGFjZSBzaW1wbGVfc2VsZWN0
b3IgbWF5YmVfc3BhY2UgJyknIHsKICAgICAgICAgJCQgPSBuZXcgQ1NTU2VsZWN0b3IoKTsKLSAg
ICAgICAgJCQtPm1hdGNoID0gQ1NTU2VsZWN0b3I6OlBzZXVkbzsKKyAgICAgICAgJCQtPm1hdGNo
ID0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzOwogICAgICAgICAkJC0+c2ltcGxlU2VsZWN0b3Ig
PSAkNDsKICAgICAgICAgJDIubG93ZXIoKTsKICAgICAgICAgJCQtPnZhbHVlID0gYXRvbWljU3Ry
aW5nKCQyKTsKSW5kZXg6IGtodG1sL2Nzcy90b2tlbml6ZXIuZmxleAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvdG9rZW5pemVyLmZsZXgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNQpkaWZmIC11IC1wIC1yMS41IHRva2VuaXplci5mbGV4Ci0tLSB0b2tl
bml6ZXIuZmxleAkyMDA0LzA1LzI3IDIzOjA1OjE1CTEuNQorKysgdG9rZW5pemVyLmZsZXgJMjAw
NS8wNi8xMSAxOToyNTo1MwpAQCAtMTksNiArMTksNyBAQCB1cmwgICAgICAgICAgICAgKFshIyQl
Jiotfl18e25vbmFzY2lpfXx7CiB3ICAgICAgICAgICAgICAgWyBcdFxyXG5cZl0qCiBubCAgICAg
ICAgICAgICAgXG58XHJcbnxccnxcZgogcmFuZ2UgICAgICAgICAgIFw/ezEsNn18e2h9KFw/ezAs
NX18e2h9KFw/ezAsNH18e2h9KFw/ezAsM318e2h9KFw/ezAsMn18e2h9KFw/P3x7aH0pKSkpKQor
bnRoICAgICAgICAgICAgICgtP1swLTldKm5cK1swLTldKyl8KC0/WzAtOV0qbikKIAogJSUKIApA
QCAtMzgsNiArMzksOCBAQCByYW5nZSAgICAgICAgICAgXD97MSw2fXx7aH0oXD97MCw1fXx7aH0o
CiAKIHtpZGVudH0gICAgICAgICAgICAgICAgIHt5eVRvayA9IElERU5UOyByZXR1cm4geXlUb2s7
fQogCit7bnRofSAgICAgICAgICAgICAgICAgICB7eXlUb2sgPSBOVEg7IHJldHVybiB5eVRvazt9
CisKICIjIntuYW1lfSAgICAgICAgICAgICAgIHt5eVRvayA9IEhBU0g7IHJldHVybiB5eVRvazt9
CiAKICJAaW1wb3J0IiAgICAgICAgICAgICAgIHt5eVRvayA9IElNUE9SVF9TWU07IHJldHVybiB5
eVRvazt9CkBAIC03Miw2ICs3NSw3IEBAIHJhbmdlICAgICAgICAgICBcP3sxLDZ9fHtofShcP3sw
LDV9fHtofSgKIHtudW19JSsgICAgICAgICAgICAgICAgIHt5eVRvayA9IFBFUkNFTlRBR0U7IHJl
dHVybiB5eVRvazt9CiB7bnVtfSAgICAgICAgICAgICAgICAgICB7eXlUb2sgPSBOVU1CRVI7IHJl
dHVybiB5eVRvazt9CiAKKyJub3QoIiAgICAgICAgICAgICAgICAgIHt5eVRvayA9IE5PVEZVTkNU
SU9OOyByZXR1cm4geXlUb2s7fQogInVybCgie3d9e3N0cmluZ317d30iKSIge3l5VG9rID0gVVJJ
OyByZXR1cm4geXlUb2s7fQogInVybCgie3d9e3VybH17d30iKSIgICAge3l5VG9rID0gVVJJOyBy
ZXR1cm4geXlUb2s7fQoge2lkZW50fSIoIiAgICAgICAgICAgICAge3l5VG9rID0gRlVOQ1RJT047
IHJldHVybiB5eVRvazt9CkluZGV4OiBraHRtbC9odG1sL2h0bWxwYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbHBhcnNlci5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOTYKZGlmZiAtdSAtcCAtcjEuOTYgaHRtbHBhcnNlci5j
cHAKLS0tIGh0bWxwYXJzZXIuY3BwCTIwMDUvMDUvMTEgMDA6NTg6MjgJMS45NgorKysgaHRtbHBh
cnNlci5jcHAJMjAwNS8wNi8xMSAxOToyNTo1NQpAQCAtMzM5LDcgKzMzOSw3IEBAIGJvb2wgS0hU
TUxQYXJzZXI6Omluc2VydE5vZGUoTm9kZUltcGwgKm4KICAgICAgICAgICAgICAgICBpZiAoIXN0
YXRlcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgIG4tPnJlc3RvcmVTdGF0ZShzdGF0
ZXMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbi0+Y2xvc2VSZW5kZXJlcigpOworICAg
ICAgICAgICAgbi0+Y2xvc2UoKTsKICNlbmRpZgogICAgICAgICB9CiAKQEAgLTE0MjksNyArMTQy
OSw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnBvcE9uZUJsb2NrKGJvb2wgZGVsQmwKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgLy8gQSBmZXcgZWxlbWVudHMgKDxhcHBsZXQ+LCA8b2JqZWN0
PikgbmVlZCB0byBrbm93IHdoZW4gYWxsIGNoaWxkIGVsZW1lbnRzICg8cGFyYW0+cykgYXJlIGF2
YWlsYWJsZToKLSAgICAgICAgY3VycmVudC0+Y2xvc2VSZW5kZXJlcigpOworICAgICAgICBjdXJy
ZW50LT5jbG9zZSgpOwogICAgIH0KICNlbmRpZgogCkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVu
ZGVyX3RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L3JlbmRlcmluZy9yZW5kZXJfdGV4dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTgyCmRp
ZmYgLXUgLXAgLXIxLjE4MiByZW5kZXJfdGV4dC5jcHAKLS0tIHJlbmRlcl90ZXh0LmNwcAkyMDA1
LzA1LzI3IDIwOjU0OjIxCTEuMTgyCisrKyByZW5kZXJfdGV4dC5jcHAJMjAwNS8wNi8xMSAxOToy
NTo1NwpAQCAtMTU1MiwxMyArMTU1MiwxMiBAQCB2b2lkIFJlbmRlclRleHQ6OnNldFRleHQoRE9N
U3RyaW5nSW1wbCAqCiAgICAgc3RyID0gdGV4dDsKICAgICBpZiAoc3RyKSB7CiAgICAgICAgIHN0
ciA9IHN0ci0+cmVwbGFjZSgnXFwnLCBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOwotICAg
ICAgICBpZiAoIHN0eWxlKCkgKSB7CisgICAgICAgIGlmIChzdHlsZSgpKSB7CiAgICAgICAgICAg
ICBzd2l0Y2goc3R5bGUoKS0+dGV4dFRyYW5zZm9ybSgpKSB7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBDQVBJVEFMSVpFOiAgIHN0ciA9IHN0ci0+Y2FwaXRhbGl6ZSgpOyAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgY2FzZSBVUFBFUkNBU0U6ICAgc3RyID0gc3RyLT51cHBlcigpOyAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBjYXNlIExPV0VSQ0FTRTogIHN0ciA9IHN0ci0+bG93ZXIoKTsg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBOT05FOgotICAgICAgICAgICAgICAg
IGRlZmF1bHQ6OworICAgICAgICAgICAgICAgIGNhc2UgVVBQRVJDQVNFOiAgICBzdHIgPSBzdHIt
PnVwcGVyKCk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTE9XRVJDQVNFOiAg
ICBzdHIgPSBzdHItPmxvd2VyKCk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
VFROT05FOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIHN0ci0+cmVmKCk7CkluZGV4OiBraHRtbC94bWwvZG9t
X2VsZW1lbnRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42Nwpk
aWZmIC11IC1wIC1yMS42NyBkb21fZWxlbWVudGltcGwuY3BwCi0tLSBkb21fZWxlbWVudGltcGwu
Y3BwCTIwMDUvMDUvMTEgMDU6NDk6MzUJMS42NworKysgZG9tX2VsZW1lbnRpbXBsLmNwcAkyMDA1
LzA2LzExIDE5OjI1OjU5CkBAIC00NTEsNiArNDUxLDI5IEBAIHZvaWQgRWxlbWVudEltcGw6OmF0
dGFjaCgpCiAgICAgQ29udGFpbmVyTm9kZUltcGw6OmF0dGFjaCgpOwogfQogCit2b2lkIEVsZW1l
bnRJbXBsOjpjbG9zZSgpCit7CisgICAgTm9kZUltcGw6OmNsb3NlKCk7CisKKyAgICBpZiAobV9y
ZXN0eWxlQ2hpbGRyZW5MYXRlKSB7CisgICAgICAgIE5vZGVJbXBsICplID0gZmlyc3RDaGlsZCgp
OworICAgICAgICB3aGlsZShlKSB7CisgICAgICAgICAgICBpZiAoZS0+aXNFbGVtZW50Tm9kZSgp
KSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4oZSktPnJl
c3R5bGVMYXRlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RWxlbWVudElt
cGwqPihlKS0+cmVjYWxjU3R5bGUoRm9yY2UpOworICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxFbGVtZW50SW1wbCo+KGUpLT5zZXRSZXN0eWxlTGF0ZShmYWxzZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZSA9IGUtPm5leHRTaWJsaW5nKCk7
CisgICAgICAgIH0KKyAgICAgICAgbV9yZXN0eWxlQ2hpbGRyZW5MYXRlID0gZmFsc2U7CisgICAg
fQorICAgIGlmIChtX3Jlc3R5bGVTZWxmTGF0ZSkgeworICAgICAgICByZWNhbGNTdHlsZShGb3Jj
ZSk7CisgICAgICAgIG1fcmVzdHlsZVNlbGZMYXRlID0gZmFsc2U7CisgICAgfQorfQorCiB2b2lk
IEVsZW1lbnRJbXBsOjpyZWNhbGNTdHlsZSggU3R5bGVDaGFuZ2UgY2hhbmdlICkKIHsKICAgICAv
LyAjIyMgc2hvdWxkIGdvIGF3YXkgYW5kIGJlIGRvbmUgaW4gcmVuZGVyb2JqZWN0CkluZGV4OiBr
aHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjQxCmRpZmYgLXUgLXAgLXIxLjQxIGRvbV9lbGVtZW50aW1wbC5oCi0tLSBkb21fZWxlbWVu
dGltcGwuaAkyMDA1LzA1LzEyIDE3OjExOjIyCTEuNDEKKysrIGRvbV9lbGVtZW50aW1wbC5oCTIw
MDUvMDYvMTEgMTk6MjU6NTkKQEAgLTIxNiw2ICsyMTYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBRU3RyaW5nIHN0YXRlKCkgeyByZXR1cm4gUVN0cmluZzo6bnVsbDsgfQogCiAgICAgdmlydHVh
bCB2b2lkIGF0dGFjaCgpOworICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogICAgIHZpcnR1YWwg
a2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZUZvclJlbmRlcmVyKGtodG1sOjpSZW5kZXJPYmplY3Qg
KnBhcmVudCk7CiAgICAgdmlydHVhbCBraHRtbDo6UmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5kZXJl
cihSZW5kZXJBcmVuYSAqLCBraHRtbDo6UmVuZGVyU3R5bGUgKik7CiAgICAgdmlydHVhbCB2b2lk
IHJlY2FsY1N0eWxlKCBTdHlsZUNoYW5nZSA9IE5vQ2hhbmdlICk7CkBAIC0yMzUsNiArMjM2LDEx
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGVJ
bXBsICphdHRyKSBjb25zdDsKICAgICAKKyAgICBib29sIHJlc3R5bGVMYXRlKCkgeyByZXR1cm4g
bV9yZXN0eWxlTGF0ZTsgfTsKKyAgICB2b2lkIHNldFJlc3R5bGVMYXRlKGJvb2wgYj10cnVlKSB7
IG1fcmVzdHlsZUxhdGUgPSBiOyB9OworICAgIHZvaWQgc2V0UmVzdHlsZVNlbGZMYXRlKCkgeyBt
X3Jlc3R5bGVTZWxmTGF0ZSA9IHRydWU7IH07CisgICAgdm9pZCBzZXRSZXN0eWxlQ2hpbGRyZW5M
YXRlKCkgeyBtX3Jlc3R5bGVDaGlsZHJlbkxhdGUgPSB0cnVlOyB9OworICAgIAogI2lmbmRlZiBO
REVCVUcKICAgICB2aXJ0dWFsIHZvaWQgZHVtcChRVGV4dFN0cmVhbSAqc3RyZWFtLCBRU3RyaW5n
IGluZCA9ICIiKSBjb25zdDsKICNlbmRpZgpAQCAtMjU1LDYgKzI2MSw5IEBAIHByaXZhdGU6CiBw
cm90ZWN0ZWQ6IC8vIG1lbWJlciB2YXJpYWJsZXMKICAgICBtdXRhYmxlIE5hbWVkQXR0ck1hcElt
cGwgKm5hbWVkQXR0ck1hcDsKICAgICBET01TdHJpbmdJbXBsICptX3ByZWZpeDsKKyAgICBib29s
IG1fcmVzdHlsZUxhdGU7CisgICAgYm9vbCBtX3Jlc3R5bGVTZWxmTGF0ZTsKKyAgICBib29sIG1f
cmVzdHlsZUNoaWxkcmVuTGF0ZTsKIH07CiAKIApJbmRleDoga2h0bWwveG1sL2RvbV9ub2RlaW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2Rv
bV9ub2RlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTUyCmRpZmYgLXUgLXAgLXIx
LjE1MiBkb21fbm9kZWltcGwuY3BwCi0tLSBkb21fbm9kZWltcGwuY3BwCTIwMDUvMDUvMzEgMDE6
MjA6NDYJMS4xNTIKKysrIGRvbV9ub2RlaW1wbC5jcHAJMjAwNS8wNi8xMSAxOToyNjowMgpAQCAt
NzksNiArNzksNyBAQCBOb2RlSW1wbDo6Tm9kZUltcGwoRG9jdW1lbnRQdHIgKmRvYykKICAgICAg
IG1faGFzQ2xhc3MoIGZhbHNlICksCiAgICAgICBtX2hhc1N0eWxlKCBmYWxzZSApLAogICAgICAg
bV9hdHRhY2hlZChmYWxzZSksCisgICAgICBtX2Nsb3NlZChmYWxzZSksCiAgICAgICBtX2NoYW5n
ZWQoIGZhbHNlICksCiAgICAgICBtX2hhc0NoYW5nZWRDaGlsZCggZmFsc2UgKSwKICAgICAgIG1f
aW5Eb2N1bWVudCggZmFsc2UgKSwKQEAgLTExNjMsNiArMTE2NCwxMSBAQCB2b2lkIE5vZGVJbXBs
OjpkdW1wKFFUZXh0U3RyZWFtICpzdHJlYW0sCiAgICAgfQogfQogI2VuZGlmCisKK3ZvaWQgTm9k
ZUltcGw6OmNsb3NlKCkKK3sKKyAgICBtX2Nsb3NlZCA9IHRydWU7Cit9CiAKIHZvaWQgTm9kZUlt
cGw6OmF0dGFjaCgpCiB7CkluZGV4OiBraHRtbC94bWwvZG9tX25vZGVpbXBsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9ub2RlaW1wbC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjg1CmRpZmYgLXUgLXAgLXIxLjg1IGRvbV9ub2RlaW1wbC5o
Ci0tLSBkb21fbm9kZWltcGwuaAkyMDA1LzA1LzEyIDAxOjE2OjAxCTEuODUKKysrIGRvbV9ub2Rl
aW1wbC5oCTIwMDUvMDYvMTEgMTk6MjY6MDMKQEAgLTI1MCw4ICsyNTAsOSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBoYXNDbGFzcygpIGNvbnN0ICAgeyByZXR1cm4gbV9oYXNDbGFzczsgfQogICAgIGJv
b2wgaGFzU3R5bGUoKSBjb25zdCAgIHsgcmV0dXJuIG1faGFzU3R5bGU7IH0KICAgICBib29sIGFj
dGl2ZSgpIGNvbnN0ICAgICB7IHJldHVybiBtX2FjdGl2ZTsgfQotICAgIGJvb2wgZm9jdXNlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fZm9jdXNlZDsgfQorICAgIGJvb2wgZm9jdXNlZCgpIGNvbnN0ICAg
IHsgcmV0dXJuIG1fZm9jdXNlZDsgfQogICAgIGJvb2wgYXR0YWNoZWQoKSBjb25zdCAgIHsgcmV0
dXJuIG1fYXR0YWNoZWQ7IH0KKyAgICBib29sIGNsb3NlZCgpIGNvbnN0ICAgICB7IHJldHVybiBt
X2Nsb3NlZDsgfQogICAgIGJvb2wgY2hhbmdlZCgpIGNvbnN0ICAgIHsgcmV0dXJuIG1fY2hhbmdl
ZDsgfQogICAgIGJvb2wgaGFzQ2hhbmdlZENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDaGFu
Z2VkQ2hpbGQ7IH0KICAgICBib29sIGlzTGluaygpIGNvbnN0IHsgcmV0dXJuIG1faXNMaW5rOyB9
CkBAIC00MDMsNiArNDA0LDExIEBAIHB1YmxpYzoKICAgICAgKi8KICAgICB2aXJ0dWFsIHZvaWQg
ZGV0YWNoKCk7CiAKKyAgICAvKioKKyAgICAgKiBOb3RpZmllcyB0aGUgbm9kZSB0aGF0IG5vIG1v
cmUgY2hpbGRyZW4gd2lsbCBiZSBhZGRlZC4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIHZvaWQgY2xv
c2UoKTsKKwogICAgIHZvaWQgY3JlYXRlUmVuZGVyZXJJZk5lZWRlZCgpOwogICAgIHZpcnR1YWwg
a2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZUZvclJlbmRlcmVyKGtodG1sOjpSZW5kZXJPYmplY3Qg
KnBhcmVudCk7CiAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoa2h0bWw6OlJlbmRl
clN0eWxlICopOwpAQCAtNDk4LDYgKzUwNCw3IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1faGFz
Q2xhc3MgOiAxOwogICAgIGJvb2wgbV9oYXNTdHlsZSA6IDE7CiAgICAgYm9vbCBtX2F0dGFjaGVk
IDogMTsKKyAgICBib29sIG1fY2xvc2VkIDogMTsKICAgICBib29sIG1fY2hhbmdlZCA6IDE7CiAg
ICAgYm9vbCBtX2hhc0NoYW5nZWRDaGlsZCA6IDE7CiAgICAgYm9vbCBtX2luRG9jdW1lbnQgOiAx
OwpAQCAtNTA5LDcgKzUxNiw3IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1fc3R5bGVFbGVtZW50
IDogMTsgLy8gY29udGFpbnMgc3R5bGVzaGVldCB0ZXh0CiAgICAgYm9vbCBtX2ltcGxpY2l0IDog
MTsgLy8gaW1wbGljaXRlbHkgZ2VuZXJhdGVkIGJ5IHRoZSBwYXJzZXIKIAotICAgIC8vIDMgYml0
cyB1bnVzZWQKKyAgICAvLyAyIGJpdHMgdW51c2VkCiB9OwogCiBjbGFzcyBDb250YWluZXJOb2Rl
SW1wbCA6IHB1YmxpYyBOb2RlSW1wbApJbmRleDoga2h0bWwveG1sL3htbF90b2tlbml6ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC94bWxfdG9r
ZW5pemVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMQpkaWZmIC11IC1wIC1yMS4zMSB4
bWxfdG9rZW5pemVyLmNwcAotLS0geG1sX3Rva2VuaXplci5jcHAJMjAwNS8wNS8wNCAyMToxMToy
MwkxLjMxCisrKyB4bWxfdG9rZW5pemVyLmNwcAkyMDA1LzA2LzExIDE5OjI2OjA0CkBAIC0zNjAs
NiArMzYwLDcgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OmVuZEVsZW1lbnQoKQogCiAgICAgaWYgKG1f
Y3VycmVudE5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RFKQogICAgICAgICBleGl0
VGV4dCgpOworCW1fY3VycmVudE5vZGUtPmNsb3NlKCk7CiAgICAgaWYgKG1fY3VycmVudE5vZGUt
PnBhcmVudE5vZGUoKSAhPSAwKSB7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIG1fY3VycmVu
dE5vZGUgPSBtX2N1cnJlbnROb2RlLT5wYXJlbnROb2RlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2296</attachid>
            <date>2005-06-13 11:05:32 -0700</date>
            <delta_ts>2005-10-11 06:27:52 -0700</delta_ts>
            <desc>new patch, part 1</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>7238</size>
            <attacher name="Nicholas Shanks">nickshanks</attacher>
            
              <data encoding="base64">PyBraHRtbC8uRFNfU3RvcmUKSW5kZXg6IGtodG1sL2Nzcy9jc3NfYmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19iYXNlLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xNQpkaWZmIC11IC1wIC1yMS4xNSBjc3NfYmFzZS5jcHAKLS0t
IGNzc19iYXNlLmNwcAkyMDA1LzA2LzEyIDA0OjA3OjMwCTEuMTUKKysrIGNzc19iYXNlLmNwcAky
MDA1LzA2LzEzIDE3OjU0OjUzCkBAIC0xNDcsMTMgKzE0NywxNiBAQCB2b2lkIENTU1NlbGVjdG9y
OjpleHRyYWN0UHNldWRvVHlwZSgpIGNvCiAgICAgc3RhdGljIEF0b21pY1N0cmluZyBmaXJzdENo
aWxkKCJmaXJzdC1jaGlsZCIpOwogICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgZmlyc3RMZXR0ZXIo
ImZpcnN0LWxldHRlciIpOwogICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgZmlyc3RMaW5lKCJmaXJz
dC1saW5lIik7CisgICAgc3RhdGljIEF0b21pY1N0cmluZyBmaXJzdE9mVHlwZSgiZmlyc3Qtb2Yt
dHlwZSIpOwogICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgZm9jdXMoImZvY3VzIik7CiAgICAgc3Rh
dGljIEF0b21pY1N0cmluZyBob3ZlcigiaG92ZXIiKTsKICAgICBzdGF0aWMgQXRvbWljU3RyaW5n
IGxpbmsoImxpbmsiKTsKICAgICBzdGF0aWMgQXRvbWljU3RyaW5nIGxhbmcoImxhbmcoIik7CiAg
ICAgc3RhdGljIEF0b21pY1N0cmluZyBsYXN0Q2hpbGQoImxhc3QtY2hpbGQiKTsKKyAgICBzdGF0
aWMgQXRvbWljU3RyaW5nIGxhc3RPZlR5cGUoImxhc3Qtb2YtdHlwZSIpOwogICAgIHN0YXRpYyBB
dG9taWNTdHJpbmcgbm90U3RyKCJub3QoIik7CiAgICAgc3RhdGljIEF0b21pY1N0cmluZyBvbmx5
Q2hpbGQoIm9ubHktY2hpbGQiKTsKKyAgICBzdGF0aWMgQXRvbWljU3RyaW5nIG9ubHlPZlR5cGUo
Im9ubHktb2YtdHlwZSIpOwogICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgcm9vdCgicm9vdCIpOwog
ICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgc2VsZWN0aW9uKCJzZWxlY3Rpb24iKTsKICAgICBzdGF0
aWMgQXRvbWljU3RyaW5nIHRhcmdldCgidGFyZ2V0Iik7CkBAIC0xODQsNyArMTg3LDkgQEAgdm9p
ZCBDU1NTZWxlY3Rvcjo6ZXh0cmFjdFBzZXVkb1R5cGUoKSBjbwogICAgIH0gZWxzZSBpZiAodmFs
dWUgPT0gZmlyc3RMaW5lKSB7CiAgICAgICAgIF9wc2V1ZG9UeXBlID0gUHNldWRvRmlyc3RMaW5l
OwogICAgICAgICBlbGVtZW50ID0gY29tcGF0ID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHZhbHVl
ID09IGZvY3VzKQorICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gZmlyc3RPZlR5cGUpCisgICAgICAg
IF9wc2V1ZG9UeXBlID0gUHNldWRvRmlyc3RPZlR5cGU7CisgICAgZWxzZSBpZiAodmFsdWUgPT0g
Zm9jdXMpCiAgICAgICAgIF9wc2V1ZG9UeXBlID0gUHNldWRvRm9jdXM7CiAgICAgZWxzZSBpZiAo
dmFsdWUgPT0gaG92ZXIpCiAgICAgICAgIF9wc2V1ZG9UeXBlID0gUHNldWRvSG92ZXI7CkBAIC0x
OTQsMTAgKzE5OSwxNCBAQCB2b2lkIENTU1NlbGVjdG9yOjpleHRyYWN0UHNldWRvVHlwZSgpIGNv
CiAgICAgICAgIF9wc2V1ZG9UeXBlID0gUHNldWRvTGFuZzsKICAgICBlbHNlIGlmICh2YWx1ZSA9
PSBsYXN0Q2hpbGQpCiAgICAgICAgIF9wc2V1ZG9UeXBlID0gUHNldWRvTGFzdENoaWxkOworICAg
IGVsc2UgaWYgKHZhbHVlID09IGxhc3RPZlR5cGUpCisgICAgICAgIF9wc2V1ZG9UeXBlID0gUHNl
dWRvTGFzdE9mVHlwZTsKICAgICBlbHNlIGlmICh2YWx1ZSA9PSBub3RTdHIpCiAgICAgICAgIF9w
c2V1ZG9UeXBlID0gUHNldWRvTm90OwogICAgIGVsc2UgaWYgKHZhbHVlID09IG9ubHlDaGlsZCkK
ICAgICAgICAgX3BzZXVkb1R5cGUgPSBQc2V1ZG9Pbmx5Q2hpbGQ7CisgICAgZWxzZSBpZiAodmFs
dWUgPT0gb25seU9mVHlwZSkKKyAgICAgICAgX3BzZXVkb1R5cGUgPSBQc2V1ZG9Pbmx5T2ZUeXBl
OwogICAgIGVsc2UgaWYgKHZhbHVlID09IHJvb3QpCiAgICAgICAgIF9wc2V1ZG9UeXBlID0gUHNl
dWRvUm9vdDsKICAgICBlbHNlIGlmICh2YWx1ZSA9PSBzZWxlY3Rpb24pIHsKSW5kZXg6IGtodG1s
L2Nzcy9jc3NfYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2Nzcy9jc3NfYmFzZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYgLXUgLXAg
LXIxLjEyIGNzc19iYXNlLmgKLS0tIGNzc19iYXNlLmgJMjAwNS8wNi8xMiAwNDowNzozMAkxLjEy
CisrKyBjc3NfYmFzZS5oCTIwMDUvMDYvMTMgMTc6NTQ6NTMKQEAgLTEzOSw5ICsxMzksMTIgQEAg
bmFtZXNwYWNlIERPTSB7CiAJICAgIFBzZXVkb05vdFBhcnNlZCA9IDAsCiAJICAgIFBzZXVkb090
aGVyLAogCSAgICBQc2V1ZG9FbXB0eSwKLSAgICAgICAgICAgIFBzZXVkb0ZpcnN0Q2hpbGQsCi0g
ICAgICAgICAgICBQc2V1ZG9MYXN0Q2hpbGQsCi0gICAgICAgICAgICBQc2V1ZG9Pbmx5Q2hpbGQs
CisgICAgICAgIFBzZXVkb0ZpcnN0Q2hpbGQsCisgICAgICAgIFBzZXVkb0ZpcnN0T2ZUeXBlLAor
ICAgICAgICBQc2V1ZG9MYXN0Q2hpbGQsCisgICAgICAgIFBzZXVkb0xhc3RPZlR5cGUsCisgICAg
ICAgIFBzZXVkb09ubHlDaGlsZCwKKyAgICAgICAgUHNldWRvT25seU9mVHlwZSwKIAkgICAgUHNl
dWRvRmlyc3RMaW5lLAogCSAgICBQc2V1ZG9GaXJzdExldHRlciwKIAkgICAgUHNldWRvTGluaywK
SW5kZXg6IGtodG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTg3CmRpZmYgLXUgLXAgLXIxLjE4NyBjc3NzdHlsZXNlbGVjdG9y
LmNwcAotLS0gY3Nzc3R5bGVzZWxlY3Rvci5jcHAJMjAwNS8wNi8xMiAwNDowNzozMAkxLjE4Nwor
KysgY3Nzc3R5bGVzZWxlY3Rvci5jcHAJMjAwNS8wNi8xMyAxNzo1NDo1OQpAQCAtMTIzNCw3ICsx
MjM0LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRmly
c3RDaGlsZDogewogICAgICAgICAgICAgICAgIC8vIGZpcnN0LWNoaWxkIG1hdGNoZXMgdGhlIGZp
cnN0IGNoaWxkIHRoYXQgaXMgYW4gZWxlbWVudCEKLSAgICAgICAgICAgICAgICBpZiAoZS0+cGFy
ZW50Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGUtPnBhcmVudE5vZGUoKSAmJiBlLT5w
YXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgewogICAgICAgICAgICAgICAgICAgICBET006
Ok5vZGVJbXBsKiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgICAgICAgICAgICAgICAg
IHdoaWxlICggbiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpICkKICAgICAgICAgICAgICAgICAgICAg
ICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKQEAgLTEyNDMsOSArMTI0MywyNCBAQCBib29s
IENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RPZlR5cGU6IHsKKyAgICAgICAgICAgIC8vIGZpcnN0LW9m
LXR5cGUgbWF0Y2hlcyB0aGUgZmlyc3QgZWxlbWVudCBvZiBpdHMgdHlwZSEKKyAgICAgICAgICAg
ICAgICBpZiAoZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9k
ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IERPTVN0cmluZyYgdHlwZSA9IGUtPnRh
Z05hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgRE9NOjpOb2RlSW1wbCogbiA9IGUtPnByZXZp
b3VzU2libGluZygpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIG4gKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pLT50YWdOYW1lKCkg
PT0gdHlwZSkgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNT
aWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYg
KCAhbiApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MYXN0Q2hpbGQ6IHsKICAgICAgICAgICAgICAgICAv
LyBsYXN0LWNoaWxkIG1hdGNoZXMgdGhlIGxhc3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50IQot
ICAgICAgICAgICAgICAgIGlmIChlLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIERPTTo6Tm9kZUltcGwqIG4gPSBlLT5uZXh0U2libGluZygp
OwogICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSAp
CiAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKQEAgLTEyNTQs
MTUgKzEyNjksNDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKAog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xhc3RPZlR5cGU6IHsKKyAgICAg
ICAgICAgICAgICAvLyBsYXN0LWNoaWxkIG1hdGNoZXMgdGhlIGxhc3QgY2hpbGQgdGhhdCBpcyBh
biBlbGVtZW50IQorICAgICAgICAgICAgICAgIGlmIChlLT5wYXJlbnROb2RlKCkgJiYgZS0+cGFy
ZW50Tm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RE9NU3RyaW5nJiB0eXBlID0gZS0+dGFnTmFtZSgpOworICAgICAgICAgICAgICAgICAgICBET006
Ok5vZGVJbXBsKiBuID0gZS0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKCBuICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8RWxlbWVudElt
cGwqPihuKS0+dGFnTmFtZSgpID09IHR5cGUpIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCAhbiApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Pbmx5Q2hpbGQ6IHsKICAg
ICAgICAgICAgICAgICAvLyBJZiBib3RoIGZpcnN0LWNoaWxkIGFuZCBsYXN0LWNoaWxkIGFwcGx5
LCB0aGVuIG9ubHktY2hpbGQgYXBwbGllcy4KLSAgICAgICAgICAgICAgICBpZiAoZS0+cGFyZW50
Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJl
bnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgewogICAgICAgICAgICAgICAgICAgICBET006Ok5v
ZGVJbXBsKiBuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgIHdo
aWxlICggbiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpICkKICAgICAgICAgICAgICAgICAgICAgICAg
IG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCAhbiAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBlLT5uZXh0U2libGluZygpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgd2hpbGUgKCBuICYmICFuLT5pc0VsZW1lbnROb2RlKCkgKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhbiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9Pbmx5T2ZUeXBlOiB7CisgICAgICAgICAgICAgICAgLy8gSWYgYm90aCBm
aXJzdC1vZi10eXBlIGFuZCBsYXN0LW9mLXR5cGUgYXBwbHksIHRoZW4gb25seS1vZi10eXBlIGFw
cGxpZXMuCisgICAgICAgICAgICAgICAgaWYgKGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJlbnRO
b2RlKCktPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBET01T
dHJpbmcmIHR5cGUgPSBlLT50YWdOYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIERPTTo6Tm9k
ZUltcGwqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKCBuICYmICEobi0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnRJbXBs
Kj4obiktPnRhZ05hbWUoKSA9PSB0eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBu
LT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhbiApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG4gPSBlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKCBuICYmICEobi0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19j
YXN0PEVsZW1lbnRJbXBsKj4obiktPnRhZ05hbWUoKSA9PSB0eXBlKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggIW4gKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwo=
</data>
<flag name="review"
          id="337"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4308</attachid>
            <date>2005-10-11 06:27:52 -0700</date>
            <delta_ts>2005-10-11 08:08:07 -0700</delta_ts>
            <desc>*-of-type patch part 1, v2</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>19512</size>
            <attacher name="Nicholas Shanks">nickshanks</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2Nzcy9jc3NfYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19iYXNlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4yMApkaWZmIC1wIC11IC1yMS4yMCBraHRtbC9jc3MvY3NzX2Jhc2UuY3BwCi0tLSBraHRtbC9j
c3MvY3NzX2Jhc2UuY3BwCTMgT2N0IDIwMDUgMjE6MTI6MDYgLTAwMDAJMS4yMAorKysga2h0bWwv
Y3NzL2Nzc19iYXNlLmNwcAkxMSBPY3QgMjAwNSAxMzoyNzoxNCAtMDAwMApAQCAtMTUwLDEzICsx
NTAsMTYgQEAgdm9pZCBDU1NTZWxlY3Rvcjo6ZXh0cmFjdFBzZXVkb1R5cGUoKSBjbwogICAgIHN0
YXRpYyBBdG9taWNTdHJpbmcgZmlyc3RDaGlsZCgiZmlyc3QtY2hpbGQiKTsKICAgICBzdGF0aWMg
QXRvbWljU3RyaW5nIGZpcnN0TGV0dGVyKCJmaXJzdC1sZXR0ZXIiKTsKICAgICBzdGF0aWMgQXRv
bWljU3RyaW5nIGZpcnN0TGluZSgiZmlyc3QtbGluZSIpOworICAgIHN0YXRpYyBBdG9taWNTdHJp
bmcgZmlyc3RPZlR5cGUoImZpcnN0LW9mLXR5cGUiKTsKICAgICBzdGF0aWMgQXRvbWljU3RyaW5n
IGZvY3VzKCJmb2N1cyIpOwogICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgaG92ZXIoImhvdmVyIik7
CiAgICAgc3RhdGljIEF0b21pY1N0cmluZyBsaW5rKCJsaW5rIik7CiAgICAgc3RhdGljIEF0b21p
Y1N0cmluZyBsYW5nKCJsYW5nKCIpOwogICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgbGFzdENoaWxk
KCJsYXN0LWNoaWxkIik7CisgICAgc3RhdGljIEF0b21pY1N0cmluZyBsYXN0T2ZUeXBlKCJsYXN0
LW9mLXR5cGUiKTsKICAgICBzdGF0aWMgQXRvbWljU3RyaW5nIG5vdFN0cigibm90KCIpOwogICAg
IHN0YXRpYyBBdG9taWNTdHJpbmcgb25seUNoaWxkKCJvbmx5LWNoaWxkIik7CisgICAgc3RhdGlj
IEF0b21pY1N0cmluZyBvbmx5T2ZUeXBlKCJvbmx5LW9mLXR5cGUiKTsKICAgICBzdGF0aWMgQXRv
bWljU3RyaW5nIHJvb3QoInJvb3QiKTsKICAgICBzdGF0aWMgQXRvbWljU3RyaW5nIHNlbGVjdGlv
bigic2VsZWN0aW9uIik7CiAgICAgc3RhdGljIEF0b21pY1N0cmluZyB0YXJnZXQoInRhcmdldCIp
OwpAQCAtMTkzLDcgKzE5Niw5IEBAIHZvaWQgQ1NTU2VsZWN0b3I6OmV4dHJhY3RQc2V1ZG9UeXBl
KCkgY28KICAgICB9IGVsc2UgaWYgKHZhbHVlID09IGZpcnN0TGluZSkgewogICAgICAgICBfcHNl
dWRvVHlwZSA9IFBzZXVkb0ZpcnN0TGluZTsKICAgICAgICAgZWxlbWVudCA9IGNvbXBhdCA9IHRy
dWU7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBmb2N1cykKKyAgICB9IGVsc2UgaWYgKHZhbHVl
ID09IGZpcnN0T2ZUeXBlKQorICAgICAgICBfcHNldWRvVHlwZSA9IFBzZXVkb0ZpcnN0T2ZUeXBl
OworICAgIGVsc2UgaWYgKHZhbHVlID09IGZvY3VzKQogICAgICAgICBfcHNldWRvVHlwZSA9IFBz
ZXVkb0ZvY3VzOwogICAgIGVsc2UgaWYgKHZhbHVlID09IGhvdmVyKQogICAgICAgICBfcHNldWRv
VHlwZSA9IFBzZXVkb0hvdmVyOwpAQCAtMjAzLDEwICsyMDgsMTQgQEAgdm9pZCBDU1NTZWxlY3Rv
cjo6ZXh0cmFjdFBzZXVkb1R5cGUoKSBjbwogICAgICAgICBfcHNldWRvVHlwZSA9IFBzZXVkb0xh
bmc7CiAgICAgZWxzZSBpZiAodmFsdWUgPT0gbGFzdENoaWxkKQogICAgICAgICBfcHNldWRvVHlw
ZSA9IFBzZXVkb0xhc3RDaGlsZDsKKyAgICBlbHNlIGlmICh2YWx1ZSA9PSBsYXN0T2ZUeXBlKQor
ICAgICAgICBfcHNldWRvVHlwZSA9IFBzZXVkb0xhc3RPZlR5cGU7CiAgICAgZWxzZSBpZiAodmFs
dWUgPT0gbm90U3RyKQogICAgICAgICBfcHNldWRvVHlwZSA9IFBzZXVkb05vdDsKICAgICBlbHNl
IGlmICh2YWx1ZSA9PSBvbmx5Q2hpbGQpCiAgICAgICAgIF9wc2V1ZG9UeXBlID0gUHNldWRvT25s
eUNoaWxkOworICAgIGVsc2UgaWYgKHZhbHVlID09IG9ubHlPZlR5cGUpCisgICAgICAgIF9wc2V1
ZG9UeXBlID0gUHNldWRvT25seU9mVHlwZTsKICAgICBlbHNlIGlmICh2YWx1ZSA9PSByb290KQog
ICAgICAgICBfcHNldWRvVHlwZSA9IFBzZXVkb1Jvb3Q7CiAgICAgZWxzZSBpZiAodmFsdWUgPT0g
c2VsZWN0aW9uKSB7CkluZGV4OiBraHRtbC9jc3MvY3NzX2Jhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzX2Jhc2UuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xOApkaWZmIC1wIC11IC1yMS4xOCBraHRtbC9jc3MvY3NzX2Jhc2UuaAotLS0g
a2h0bWwvY3NzL2Nzc19iYXNlLmgJMyBPY3QgMjAwNSAyMToxMjowNiAtMDAwMAkxLjE4CisrKyBr
aHRtbC9jc3MvY3NzX2Jhc2UuaAkxMSBPY3QgMjAwNSAxMzoyNzoxNCAtMDAwMApAQCAtNzcsOTcg
Kzc3LDEwMCBAQCBuYW1lc3BhY2UgRE9NIHsKICAgICAgICAgICAgICAgcHNldWRvSWQoIDAgKSwg
X3BzZXVkb1R5cGUoUHNldWRvTm90UGFyc2VkKQogICAgICAgICB7fQogICAgICAgICAKLQlDU1NT
ZWxlY3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSkKLQkgICAgOiB0YWdIaXN0b3J5KDAp
LCBzaW1wbGVTZWxlY3RvcigwKSwgbmV4dFNlbGVjdG9yKDApLCBhdHRyKGFueVFOYW1lKCkpLCB0
YWcocU5hbWUpLAorICAgICAgICBDU1NTZWxlY3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFt
ZSkKKyAgICAgICAgICAgIDogdGFnSGlzdG9yeSgwKSwgc2ltcGxlU2VsZWN0b3IoMCksIG5leHRT
ZWxlY3RvcigwKSwgYXR0cihhbnlRTmFtZSgpKSwgdGFnKHFOYW1lKSwKICAgICAgICAgICAgICAg
cmVsYXRpb24oIERlc2NlbmRhbnQgKSwgbWF0Y2goIE5vbmUgKSwKICAgICAgICAgICAgICAgcHNl
dWRvSWQoIDAgKSwgX3BzZXVkb1R5cGUoUHNldWRvTm90UGFyc2VkKQogICAgICAgICB7fQogCi0J
fkNTU1NlbGVjdG9yKCkgewotCSAgICBkZWxldGUgdGFnSGlzdG9yeTsKKyAgICAgICAgfkNTU1Nl
bGVjdG9yKCkgeworICAgICAgICAgICAgZGVsZXRlIHRhZ0hpc3Rvcnk7CiAgICAgICAgICAgICBk
ZWxldGUgc2ltcGxlU2VsZWN0b3I7CiAgICAgICAgICAgICBkZWxldGUgbmV4dFNlbGVjdG9yOwot
CX0KKyAgICAgICAgfQogCiAgICAgICAgIHZvaWQgYXBwZW5kKENTU1NlbGVjdG9yKiBuKSB7CiAg
ICAgICAgICAgICBpZiAoIW5leHRTZWxlY3RvcikgbmV4dFNlbGVjdG9yID0gbjsgZWxzZSBuZXh0
U2VsZWN0b3ItPmFwcGVuZChuKTsKICAgICAgICAgfQogICAgICAgICBDU1NTZWxlY3RvciogbmV4
dCgpIHsgcmV0dXJuIG5leHRTZWxlY3RvcjsgfQogCi0JLyoqCi0JICogUHJpbnQgZGVidWcgb3V0
cHV0IGZvciB0aGlzIHNlbGVjdG9yCi0JICovCi0Jdm9pZCBwcmludCgpOwotCi0JLyoqCi0JICog
UmUtY3JlYXRlIHNlbGVjdG9yIHRleHQgZnJvbSBzZWxlY3RvcidzIGRhdGEKLQkgKi8KLQlET01T
dHJpbmcgc2VsZWN0b3JUZXh0KCkgY29uc3Q7Ci0KLQkvLyBjaGVja3MgaWYgdGhlIDIgc2VsZWN0
b3JzIChpbmNsdWRpbmcgc3ViIHNlbGVjdG9ycykgYWdyZWUuCi0JYm9vbCBvcGVyYXRvciA9PSAo
IGNvbnN0IENTU1NlbGVjdG9yICZvdGhlciApOwotCi0JLy8gdGFnID09IC0xIG1lYW5zIGFwcGx5
IHRvIGFsbCBlbGVtZW50cyAoU2VsZWN0b3IgPSAqKQotCi0JdW5zaWduZWQgaW50IHNwZWNpZmlj
aXR5KCk7Ci0KLQkvKiBob3cgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBoYXMgdG8gbWF0Y2guLi4uIERl
ZmF1bHQgaXMgRXhhY3QgKi8KLQllbnVtIE1hdGNoCi0JewotCSAgICBOb25lID0gMCwKLQkgICAg
SWQsCisgICAgICAgIC8qKgorICAgICAgICAgKiBQcmludCBkZWJ1ZyBvdXRwdXQgZm9yIHRoaXMg
c2VsZWN0b3IKKyAgICAgICAgICovCisgICAgICAgIHZvaWQgcHJpbnQoKTsKKworICAgICAgICAv
KioKKyAgICAgICAgICogUmUtY3JlYXRlIHNlbGVjdG9yIHRleHQgZnJvbSBzZWxlY3RvcidzIGRh
dGEKKyAgICAgICAgICovCisgICAgICAgIERPTVN0cmluZyBzZWxlY3RvclRleHQoKSBjb25zdDsK
KworICAgICAgICAvLyBjaGVja3MgaWYgdGhlIDIgc2VsZWN0b3JzIChpbmNsdWRpbmcgc3ViIHNl
bGVjdG9ycykgYWdyZWUuCisgICAgICAgIGJvb2wgb3BlcmF0b3IgPT0gKCBjb25zdCBDU1NTZWxl
Y3RvciAmb3RoZXIgKTsKKworICAgICAgICAvLyB0YWcgPT0gLTEgbWVhbnMgYXBwbHkgdG8gYWxs
IGVsZW1lbnRzIChTZWxlY3RvciA9ICopCisKKyAgICAgICAgdW5zaWduZWQgaW50IHNwZWNpZmlj
aXR5KCk7CisKKyAgICAgICAgLyogaG93IHRoZSBhdHRyaWJ1dGUgdmFsdWUgaGFzIHRvIG1hdGNo
Li4uLiBEZWZhdWx0IGlzIEV4YWN0ICovCisgICAgICAgIGVudW0gTWF0Y2gKKyAgICAgICAgewor
ICAgICAgICAgICAgTm9uZSA9IDAsCisgICAgICAgICAgICBJZCwKICAgICAgICAgQ2xhc3MsCi0J
ICAgIEV4YWN0LAotCSAgICBTZXQsCi0JICAgIExpc3QsCi0JICAgIEh5cGhlbiwKLQkgICAgUHNl
dWRvQ2xhc3MsCi0JICAgIFBzZXVkb0VsZW1lbnQsCi0JICAgIENvbnRhaW4sICAgLy8gY3NzMzog
RVtmb28qPSJiYXIiXQotCSAgICBCZWdpbiwgICAgIC8vIGNzczM6IEVbZm9vXj0iYmFyIl0KLQkg
ICAgRW5kICAgICAgICAvLyBjc3MzOiBFW2ZvbyQ9ImJhciJdCi0JfTsKLQotCWVudW0gUmVsYXRp
b24KLQl7Ci0JICAgIERlc2NlbmRhbnQgPSAwLAotCSAgICBDaGlsZCwKLQkgICAgRGlyZWN0QWRq
YWNlbnQsCisgICAgICAgICAgICBFeGFjdCwKKyAgICAgICAgICAgIFNldCwKKyAgICAgICAgICAg
IExpc3QsCisgICAgICAgICAgICBIeXBoZW4sCisgICAgICAgICAgICBQc2V1ZG9DbGFzcywKKyAg
ICAgICAgICAgIFBzZXVkb0VsZW1lbnQsCisgICAgICAgICAgICBDb250YWluLCAgIC8vIGNzczM6
IEVbZm9vKj0iYmFyIl0KKyAgICAgICAgICAgIEJlZ2luLCAgICAgLy8gY3NzMzogRVtmb29ePSJi
YXIiXQorICAgICAgICAgICAgRW5kICAgICAgICAvLyBjc3MzOiBFW2ZvbyQ9ImJhciJdCisgICAg
ICAgIH07CisKKyAgICAgICAgZW51bSBSZWxhdGlvbgorICAgICAgICB7CisgICAgICAgICAgICBE
ZXNjZW5kYW50ID0gMCwKKyAgICAgICAgICAgIENoaWxkLAorICAgICAgICAgICAgRGlyZWN0QWRq
YWNlbnQsCiAgICAgICAgICAgICBJbmRpcmVjdEFkamFjZW50LAogICAgICAgICAgICAgU3ViU2Vs
ZWN0b3IKLQl9OworICAgICAgICB9OwogCi0JZW51bSBQc2V1ZG9UeXBlCi0JewotCSAgICBQc2V1
ZG9Ob3RQYXJzZWQgPSAwLAotCSAgICBQc2V1ZG9PdGhlciwKLQkgICAgUHNldWRvRW1wdHksCisg
ICAgICAgIGVudW0gUHNldWRvVHlwZQorICAgICAgICB7CisgICAgICAgICAgICBQc2V1ZG9Ob3RQ
YXJzZWQgPSAwLAorICAgICAgICAgICAgUHNldWRvT3RoZXIsCisgICAgICAgICAgICBQc2V1ZG9F
bXB0eSwKICAgICAgICAgICAgIFBzZXVkb0ZpcnN0Q2hpbGQsCisgICAgICAgICAgICBQc2V1ZG9G
aXJzdE9mVHlwZSwKICAgICAgICAgICAgIFBzZXVkb0xhc3RDaGlsZCwKKyAgICAgICAgICAgIFBz
ZXVkb0xhc3RPZlR5cGUsCiAgICAgICAgICAgICBQc2V1ZG9Pbmx5Q2hpbGQsCi0JICAgIFBzZXVk
b0ZpcnN0TGluZSwKLQkgICAgUHNldWRvRmlyc3RMZXR0ZXIsCi0JICAgIFBzZXVkb0xpbmssCi0J
ICAgIFBzZXVkb1Zpc2l0ZWQsCisgICAgICAgICAgICBQc2V1ZG9Pbmx5T2ZUeXBlLAorICAgICAg
ICAgICAgUHNldWRvRmlyc3RMaW5lLAorICAgICAgICAgICAgUHNldWRvRmlyc3RMZXR0ZXIsCisg
ICAgICAgICAgICBQc2V1ZG9MaW5rLAorICAgICAgICAgICAgUHNldWRvVmlzaXRlZCwKICAgICAg
ICAgICAgIFBzZXVkb0FueUxpbmssCi0JICAgIFBzZXVkb0hvdmVyLAotCSAgICBQc2V1ZG9EcmFn
LAotCSAgICBQc2V1ZG9Gb2N1cywKLQkgICAgUHNldWRvQWN0aXZlLAorICAgICAgICAgICAgUHNl
dWRvSG92ZXIsCisgICAgICAgICAgICBQc2V1ZG9EcmFnLAorICAgICAgICAgICAgUHNldWRvRm9j
dXMsCisgICAgICAgICAgICBQc2V1ZG9BY3RpdmUsCiAgICAgICAgICAgICBQc2V1ZG9DaGVja2Vk
LAogICAgICAgICAgICAgUHNldWRvRW5hYmxlZCwKICAgICAgICAgICAgIFBzZXVkb0Rpc2FibGVk
LAogICAgICAgICAgICAgUHNldWRvVGFyZ2V0LAotCSAgICBQc2V1ZG9CZWZvcmUsCi0JICAgIFBz
ZXVkb0FmdGVyLAorICAgICAgICAgICAgUHNldWRvQmVmb3JlLAorICAgICAgICAgICAgUHNldWRv
QWZ0ZXIsCiAgICAgICAgICAgICBQc2V1ZG9MYW5nLAogICAgICAgICAgICAgUHNldWRvTm90LAog
ICAgICAgICAgICAgUHNldWRvUm9vdCwKICAgICAgICAgICAgIFBzZXVkb1NlbGVjdGlvbgotCX07
CisgICAgICAgIH07CiAKLQlpbmxpbmUgUHNldWRvVHlwZSBwc2V1ZG9UeXBlKCkgY29uc3QKLQl7
CisgICAgICAgIGlubGluZSBQc2V1ZG9UeXBlIHBzZXVkb1R5cGUoKSBjb25zdAorICAgICAgICB7
CiAgICAgICAgICAgICBpZiAoX3BzZXVkb1R5cGUgPT0gUHNldWRvTm90UGFyc2VkKQogICAgICAg
ICAgICAgICAgIGV4dHJhY3RQc2V1ZG9UeXBlKCk7CiAgICAgICAgICAgICByZXR1cm4gX3BzZXVk
b1R5cGU7CkBAIC0xNzYsOTEgKzE3OSw5MSBAQCBuYW1lc3BhY2UgRE9NIHsKICAgICAgICAgYm9v
bCBoYXNUYWcoKSBjb25zdCB7IHJldHVybiB0YWcgIT0gYW55UU5hbWUoKTsgfQogICAgICAgICBi
b29sIGhhc0F0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIGF0dHIgIT0gYW55UU5hbWUoKTsgfQog
Ci0JbXV0YWJsZSBET006OkF0b21pY1N0cmluZyB2YWx1ZTsKLQlDU1NTZWxlY3RvciogdGFnSGlz
dG9yeTsKKyAgICAgICAgbXV0YWJsZSBET006OkF0b21pY1N0cmluZyB2YWx1ZTsKKyAgICAgICAg
Q1NTU2VsZWN0b3IqIHRhZ0hpc3Rvcnk7CiAgICAgICAgIENTU1NlbGVjdG9yKiBzaW1wbGVTZWxl
Y3RvcjsgLy8gVXNlZCBmb3IgOm5vdC4KICAgICAgICAgQ1NTU2VsZWN0b3IqIG5leHRTZWxlY3Rv
cjsgLy8gdXNlZCBmb3IgLC1jaGFpbmVkIHNlbGVjdG9ycwotCQorICAgICAgICAKICAgICAgICAg
UXVhbGlmaWVkTmFtZSBhdHRyOwogICAgICAgICBRdWFsaWZpZWROYW1lIHRhZzsKICAgICAgICAg
CiAgICAgICAgIFJlbGF0aW9uIHJlbGF0aW9uICAgICAgICAgICAgICA6IDM7Ci0JbXV0YWJsZSBN
YXRjaCAgbWF0Y2ggICAgICAgICAgIDogNDsKLQl1bnNpZ25lZCBpbnQgcHNldWRvSWQgICAgICAg
ICAgOiAzOwotCW11dGFibGUgUHNldWRvVHlwZSBfcHNldWRvVHlwZSA6IDU7CisgICAgICAgIG11
dGFibGUgTWF0Y2ggIG1hdGNoICAgICAgICAgICA6IDQ7CisgICAgICAgIHVuc2lnbmVkIGludCBw
c2V1ZG9JZCAgICAgICAgICA6IDM7CisgICAgICAgIG11dGFibGUgUHNldWRvVHlwZSBfcHNldWRv
VHlwZSA6IDU7CiAKICAgICBwcml2YXRlOgotCXZvaWQgZXh0cmFjdFBzZXVkb1R5cGUoKSBjb25z
dDsKKyAgICAgICAgdm9pZCBleHRyYWN0UHNldWRvVHlwZSgpIGNvbnN0OwogICAgIH07CiAKICAg
ICAvLyBhIHN0eWxlIGNsYXNzIHdoaWNoIGhhcyBhIHBhcmVudCAoYWxtb3N0IGFsbCBoYXZlKQog
ICAgIGNsYXNzIFN0eWxlQmFzZUltcGwgOiBwdWJsaWMga2h0bWw6OlRyZWVTaGFyZWQ8U3R5bGVC
YXNlSW1wbD4KICAgICB7CiAgICAgcHVibGljOgotCVN0eWxlQmFzZUltcGwoKSAgeyBtX3BhcmVu
dCA9IDA7IHN0cmljdFBhcnNpbmcgPSB0cnVlOyBtdWx0aUxlbmd0aCA9IGZhbHNlOyB9Ci0JU3R5
bGVCYXNlSW1wbChTdHlsZUJhc2VJbXBsICpwKSB7Ci0JICAgIG1fcGFyZW50ID0gcDsKLQkgICAg
c3RyaWN0UGFyc2luZyA9IChtX3BhcmVudCA/IG1fcGFyZW50LT51c2VTdHJpY3RQYXJzaW5nKCkg
OiB0cnVlKTsKLQkgICAgbXVsdGlMZW5ndGggPSBmYWxzZTsKLQl9CisgICAgICAgIFN0eWxlQmFz
ZUltcGwoKSAgeyBtX3BhcmVudCA9IDA7IHN0cmljdFBhcnNpbmcgPSB0cnVlOyBtdWx0aUxlbmd0
aCA9IGZhbHNlOyB9CisgICAgICAgIFN0eWxlQmFzZUltcGwoU3R5bGVCYXNlSW1wbCAqcCkgewor
ICAgICAgICAgICAgbV9wYXJlbnQgPSBwOworICAgICAgICAgICAgc3RyaWN0UGFyc2luZyA9ICht
X3BhcmVudCA/IG1fcGFyZW50LT51c2VTdHJpY3RQYXJzaW5nKCkgOiB0cnVlKTsKKyAgICAgICAg
ICAgIG11bHRpTGVuZ3RoID0gZmFsc2U7CisgICAgICAgIH0KIAotCXZpcnR1YWwgflN0eWxlQmFz
ZUltcGwoKSB7fQorICAgICAgICB2aXJ0dWFsIH5TdHlsZUJhc2VJbXBsKCkge30KIAotCS8vIHJl
dHVybnMgdGhlIHVybCBvZiB0aGUgc3R5bGUgc2hlZXQgdGhpcyBvYmplY3QgYmVsb25ncyB0bwot
CURPTVN0cmluZyBiYXNlVVJMKCk7CisgICAgICAgIC8vIHJldHVybnMgdGhlIHVybCBvZiB0aGUg
c3R5bGUgc2hlZXQgdGhpcyBvYmplY3QgYmVsb25ncyB0bworICAgICAgICBET01TdHJpbmcgYmFz
ZVVSTCgpOwogCi0JdmlydHVhbCBib29sIGlzU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0JdmlydHVhbCBib29sIGlzQ1NTU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDU1NTdHlsZVNoZWV0KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzWFNMU3R5bGVTaGVldCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0JdmlydHVhbCBib29sIGlzU3R5bGVTaGVldExpc3Qo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCXZpcnR1YWwgYm9vbCBpc01lZGlhTGlzdCgpIHsg
cmV0dXJuIGZhbHNlOyB9Ci0JdmlydHVhbCBib29sIGlzUnVsZUxpc3QoKSB7IHJldHVybiBmYWxz
ZTsgfQotCXZpcnR1YWwgYm9vbCBpc1J1bGUoKSB7IHJldHVybiBmYWxzZTsgfQotCXZpcnR1YWwg
Ym9vbCBpc1N0eWxlUnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0JdmlydHVhbCBib29sIGlzQ2hh
cmV0UnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0JdmlydHVhbCBib29sIGlzSW1wb3J0UnVsZSgp
IHsgcmV0dXJuIGZhbHNlOyB9Ci0JdmlydHVhbCBib29sIGlzTWVkaWFSdWxlKCkgeyByZXR1cm4g
ZmFsc2U7IH0KLQl2aXJ0dWFsIGJvb2wgaXNGb250RmFjZVJ1bGUoKSB7IHJldHVybiBmYWxzZTsg
fQotCXZpcnR1YWwgYm9vbCBpc1BhZ2VSdWxlKCkgeyByZXR1cm4gZmFsc2U7IH0KLQl2aXJ0dWFs
IGJvb2wgaXNVbmtub3duUnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0JdmlydHVhbCBib29sIGlz
U3R5bGVEZWNsYXJhdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9Ci0JdmlydHVhbCBib29sIGlzVmFs
dWUoKSB7IHJldHVybiBmYWxzZTsgfQotCXZpcnR1YWwgYm9vbCBpc1ByaW1pdGl2ZVZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQl2aXJ0dWFsIGJvb2wgaXNWYWx1ZUxpc3QoKSB7IHJl
dHVybiBmYWxzZTsgfQotCXZpcnR1YWwgYm9vbCBpc1ZhbHVlQ3VzdG9tKCkgeyByZXR1cm4gZmFs
c2U7IH0KLQotCXZvaWQgc2V0UGFyZW50KFN0eWxlQmFzZUltcGwgKnBhcmVudCkgeyBtX3BhcmVu
dCA9IHBhcmVudDsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZVNoZWV0TGlzdCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhTGlzdCgp
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1J1bGVMaXN0KCkgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGlzUnVsZSgpIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlUnVsZSgpIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0NoYXJldFJ1bGUoKSB7IHJldHVybiBmYWxzZTsg
fQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNJbXBvcnRSdWxlKCkgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICAgICAgdmlydHVhbCBib29sIGlzTWVkaWFSdWxlKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICAgICAgdmlydHVhbCBib29sIGlzRm9udEZhY2VSdWxlKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICAgICAgdmlydHVhbCBib29sIGlzUGFnZVJ1bGUoKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNVbmtub3duUnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAg
IHZpcnR1YWwgYm9vbCBpc1N0eWxlRGVjbGFyYXRpb24oKSB7IHJldHVybiBmYWxzZTsgfQorICAg
ICAgICB2aXJ0dWFsIGJvb2wgaXNWYWx1ZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZp
cnR1YWwgYm9vbCBpc1ByaW1pdGl2ZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICAgICAgdmlydHVhbCBib29sIGlzVmFsdWVMaXN0KCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAg
ICAgdmlydHVhbCBib29sIGlzVmFsdWVDdXN0b20oKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAg
ICAgIHZvaWQgc2V0UGFyZW50KFN0eWxlQmFzZUltcGwgKnBhcmVudCkgeyBtX3BhcmVudCA9IHBh
cmVudDsgfQogCi0JdmlydHVhbCBib29sIHBhcnNlU3RyaW5nKGNvbnN0IERPTVN0cmluZyAmLypj
c3NTdHJpbmcqLywgYm9vbCA9IGZhbHNlKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0
dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgRE9NU3RyaW5nICYvKmNzc1N0cmluZyovLCBib29s
ID0gZmFsc2UpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLQl2aXJ0dWFsIHZvaWQgY2hlY2tMb2FkZWQo
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNoZWNrTG9hZGVkKCk7CiAKLQl2b2lkIHNldFN0cmlj
dFBhcnNpbmcoIGJvb2wgYiApIHsgc3RyaWN0UGFyc2luZyA9IGI7IH0KLQlib29sIHVzZVN0cmlj
dFBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBzdHJpY3RQYXJzaW5nOyB9CisgICAgICAgIHZvaWQg
c2V0U3RyaWN0UGFyc2luZyggYm9vbCBiICkgeyBzdHJpY3RQYXJzaW5nID0gYjsgfQorICAgICAg
ICBib29sIHVzZVN0cmljdFBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBzdHJpY3RQYXJzaW5nOyB9
CiAKLQlTdHlsZVNoZWV0SW1wbCogc3R5bGVzaGVldCgpOworICAgICAgICBTdHlsZVNoZWV0SW1w
bCogc3R5bGVzaGVldCgpOwogCiAgICAgcHJvdGVjdGVkOgotCWJvb2wgc3RyaWN0UGFyc2luZyA6
IDE7Ci0JYm9vbCBtdWx0aUxlbmd0aCA6IDE7CisgICAgICAgIGJvb2wgc3RyaWN0UGFyc2luZyA6
IDE7CisgICAgICAgIGJvb2wgbXVsdGlMZW5ndGggOiAxOwogICAgIH07CiAKICAgICAvLyBhIHN0
eWxlIGNsYXNzIHdoaWNoIGhhcyBhIGxpc3Qgb2YgY2hpbGRyZW4gKFN0eWxlU2hlZXRzIGZvciBl
eGFtcGxlKQogICAgIGNsYXNzIFN0eWxlTGlzdEltcGwgOiBwdWJsaWMgU3R5bGVCYXNlSW1wbAog
ICAgIHsKICAgICBwdWJsaWM6Ci0JU3R5bGVMaXN0SW1wbCgpIDogU3R5bGVCYXNlSW1wbCgpIHsg
bV9sc3RDaGlsZHJlbiA9IDA7IH0KLQlTdHlsZUxpc3RJbXBsKFN0eWxlQmFzZUltcGwgKnBhcmVu
dCkgOiBTdHlsZUJhc2VJbXBsKHBhcmVudCkgeyBtX2xzdENoaWxkcmVuID0gMDsgfQorICAgICAg
ICBTdHlsZUxpc3RJbXBsKCkgOiBTdHlsZUJhc2VJbXBsKCkgeyBtX2xzdENoaWxkcmVuID0gMDsg
fQorICAgICAgICBTdHlsZUxpc3RJbXBsKFN0eWxlQmFzZUltcGwgKnBhcmVudCkgOiBTdHlsZUJh
c2VJbXBsKHBhcmVudCkgeyBtX2xzdENoaWxkcmVuID0gMDsgfQogCi0JdmlydHVhbCB+U3R5bGVM
aXN0SW1wbCgpOworICAgICAgICB2aXJ0dWFsIH5TdHlsZUxpc3RJbXBsKCk7CiAKLQl1bnNpZ25l
ZCBsZW5ndGgoKSB7IHJldHVybiBtX2xzdENoaWxkcmVuLT5jb3VudCgpOyB9Ci0JU3R5bGVCYXNl
SW1wbCAqaXRlbSh1bnNpZ25lZCBudW0pIHsgcmV0dXJuIG1fbHN0Q2hpbGRyZW4tPmF0KG51bSk7
IH0KKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9sc3RDaGlsZHJlbi0+Y291
bnQoKTsgfQorICAgICAgICBTdHlsZUJhc2VJbXBsICppdGVtKHVuc2lnbmVkIG51bSkgeyByZXR1
cm4gbV9sc3RDaGlsZHJlbi0+YXQobnVtKTsgfQogCi0Jdm9pZCBhcHBlbmQoU3R5bGVCYXNlSW1w
bCAqaXRlbSkgeyBtX2xzdENoaWxkcmVuLT5hcHBlbmQoaXRlbSk7IH0KKyAgICAgICAgdm9pZCBh
cHBlbmQoU3R5bGVCYXNlSW1wbCAqaXRlbSkgeyBtX2xzdENoaWxkcmVuLT5hcHBlbmQoaXRlbSk7
IH0KIAogICAgIHByb3RlY3RlZDoKLQlRUHRyTGlzdDxTdHlsZUJhc2VJbXBsPiAqbV9sc3RDaGls
ZHJlbjsKKyAgICAgICAgUVB0ckxpc3Q8U3R5bGVCYXNlSW1wbD4gKm1fbHN0Q2hpbGRyZW47CiAg
ICAgfTsKIAogICAgIGludCBnZXRQcm9wZXJ0eUlEKGNvbnN0IGNoYXIgKnRhZ1N0ciwgaW50IGxl
bik7CkluZGV4OiBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjIwOQpkaWZmIC1wIC11IC1yMS4yMDkga2h0bWwvY3NzL2Nz
c3N0eWxlc2VsZWN0b3IuY3BwCi0tLSBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAJMyBP
Y3QgMjAwNSAyMToxMjowNyAtMDAwMAkxLjIwOQorKysga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0
b3IuY3BwCTExIE9jdCAyMDA1IDEzOjI3OjE5IC0wMDAwCkBAIC0xMjU5LDkgKzEyNTksOSBAQCBi
b29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgewogICAgICAgICAv
LyBQc2V1ZG8gZWxlbWVudHMuIFdlIG5lZWQgdG8gY2hlY2sgZmlyc3QgY2hpbGQgaGVyZS4gTm8g
ZHluYW1pYyBwc2V1ZG8KICAgICAgICAgLy8gZWxlbWVudHMgZm9yIHRoZSBtb21lbnQKLS8vCWtk
RGVidWcoKSA8PCAiQ1NTT3JkZXJlZFJ1bGU6OnBzZXVkbyAiIDw8IHZhbHVlIDw8IGVuZGw7Ci0J
ICAgIHN3aXRjaCAoc2VsLT5wc2V1ZG9UeXBlKCkpIHsKLQkgICAgICAgIC8vIFBzZXVkbyBjbGFz
c2VzOgorLy8gICAgICAgIGtkRGVidWcoKSA8PCAiQ1NTT3JkZXJlZFJ1bGU6OnBzZXVkbyAiIDw8
IHZhbHVlIDw8IGVuZGw7CisgICAgICAgICAgICBzd2l0Y2ggKHNlbC0+cHNldWRvVHlwZSgpKSB7
CisgICAgICAgICAgICAgICAgLy8gUHNldWRvIGNsYXNzZXM6CiAgICAgICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9FbXB0eToKICAgICAgICAgICAgICAgICBpZiAoIWUtPmZpcnN0Q2hp
bGQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMjY5LDEwICsxMjY5
LDI1IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tPbmVTZWxlY3RvcigKICAgICAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0Q2hpbGQ6IHsKICAgICAgICAgICAgICAg
ICAvLyBmaXJzdC1jaGlsZCBtYXRjaGVzIHRoZSBmaXJzdCBjaGlsZCB0aGF0IGlzIGFuIGVsZW1l
bnQhCiAgICAgICAgICAgICAgICAgaWYgKGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICAgICAg
ICAgICAgICBOb2RlSW1wbCogbiA9IGUtPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoIG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSApCisgICAgICAgICAgICAg
ICAgICAgIE5vZGVJbXBsICpuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICggIW4gKQorICAgICAgICAgICAgICAgICAgICBpZiAoIW4pCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9G
aXJzdE9mVHlwZTogeworICAgICAgICAgICAgICAgIC8vIGZpcnN0LW9mLXR5cGUgbWF0Y2hlcyB0
aGUgZmlyc3QgZWxlbWVudCBvZiBpdHMgdHlwZSEKKyAgICAgICAgICAgICAgICBpZiAoZS0+cGFy
ZW50Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlw
ZSA9IGUtPnRhZ05hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwgKm4gPSBlLT5w
cmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obiktPmhhc1RhZ05h
bWUodHlwZSkpIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3Vz
U2libGluZygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
ICghbikKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEyODAsMTAgKzEyOTUsMjUgQEAgYm9v
bCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAgICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvTGFzdENoaWxkOiB7CiAgICAgICAgICAgICAgICAgLy8gbGFzdC1j
aGlsZCBtYXRjaGVzIHRoZSBsYXN0IGNoaWxkIHRoYXQgaXMgYW4gZWxlbWVudCEKICAgICAgICAg
ICAgICAgICBpZiAoZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGVJ
bXBsKiBuID0gZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBu
ICYmICFuLT5pc0VsZW1lbnROb2RlKCkgKQorICAgICAgICAgICAgICAgICAgICBOb2RlSW1wbCAq
biA9IGUtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuICYmICFu
LT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNp
YmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhbiApCisgICAgICAgICAgICAgICAg
ICAgIGlmICghbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xhc3RPZlR5cGU6IHsKKyAgICAgICAgICAg
ICAgICAvLyBsYXN0LW9mLXR5cGUgbWF0Y2hlcyB0aGUgbGFzdCBlbGVtZW50IG9mIGl0cyB0eXBl
IQorICAgICAgICAgICAgICAgIGlmIChlLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlID0gZS0+dGFnTmFtZSgpOworICAgICAgICAg
ICAgICAgICAgICBOb2RlSW1wbCAqbiA9IGUtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVt
ZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxF
bGVtZW50SW1wbCo+KG4pLT5oYXNUYWdOYW1lKHR5cGUpKSBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghbikKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEy
OTEsMTQgKzEzMjEsMzEgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9y
KAogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT25seUNoaWxkOiB7CiAgICAg
ICAgICAgICAgICAgLy8gSWYgYm90aCBmaXJzdC1jaGlsZCBhbmQgbGFzdC1jaGlsZCBhcHBseSwg
dGhlbiBvbmx5LWNoaWxkIGFwcGxpZXMuCiAgICAgICAgICAgICAgICAgaWYgKGUtPnBhcmVudE5v
ZGUoKSkgewotICAgICAgICAgICAgICAgICAgICBOb2RlSW1wbCogbiA9IGUtPnByZXZpb3VzU2li
bGluZygpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIG4gJiYgIW4tPmlzRWxlbWVudE5v
ZGUoKSApCisgICAgICAgICAgICAgICAgICAgIE5vZGVJbXBsICpuID0gZS0+cHJldmlvdXNTaWJs
aW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2Rl
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghbikgeworICAgICAgICAgICAgICAgICAgICAgICAgbiA9
IGUtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiAh
bi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5u
ZXh0U2libGluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT25seU9mVHlwZTogeworICAgICAg
ICAgICAgICAgIC8vIElmIGJvdGggZmlyc3Qtb2YtdHlwZSBhbmQgbGFzdC1vZi10eXBlIGFwcGx5
LCB0aGVuIG9ubHktb2YtdHlwZSBhcHBsaWVzLgorICAgICAgICAgICAgICAgIGlmIChlLT5wYXJl
bnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBl
ID0gZS0+dGFnTmFtZSgpOworICAgICAgICAgICAgICAgICAgICBOb2RlSW1wbCAqbiA9IGUtPnBy
ZXZpb3VzU2libGluZygpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiAhc3RhdGlj
X2Nhc3Q8RWxlbWVudEltcGwqPihuKS0+dGFnTmFtZSh0eXBlKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCAhbiApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBuID0gZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdo
aWxlICggbiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpICkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHdoaWxlIChuICYmICFzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pLT50YWdOYW1lKHR5cGUp
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAhbiApCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIW4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0xMzE1LDE1ICsxMzYyLDE1IEBA
IGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tPbmVTZWxlY3RvcigKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5rOgotICAgICAgICAgICAgICAgIGlmICggcHNldWRv
U3RhdGUgPT0gUHNldWRvVW5rbm93biB8fCBwc2V1ZG9TdGF0ZSA9PSBQc2V1ZG9BbnlMaW5rICkK
LSAgICAgICAgICAgICAgICAgICAgY2hlY2tQc2V1ZG9TdGF0ZSggZSApOwotICAgICAgICAgICAg
ICAgIGlmICggcHNldWRvU3RhdGUgPT0gUHNldWRvTGluayApCisgICAgICAgICAgICAgICAgaWYg
KHBzZXVkb1N0YXRlID09IFBzZXVkb1Vua25vd24gfHwgcHNldWRvU3RhdGUgPT0gUHNldWRvQW55
TGluaykKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tQc2V1ZG9TdGF0ZShlKTsKKyAgICAgICAg
ICAgICAgICBpZiAocHNldWRvU3RhdGUgPT0gUHNldWRvTGluaykKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkOgotICAgICAgICAgICAgICAgIGlmICggcHNldWRv
U3RhdGUgPT0gUHNldWRvVW5rbm93biB8fCBwc2V1ZG9TdGF0ZSA9PSBQc2V1ZG9BbnlMaW5rICkK
LSAgICAgICAgICAgICAgICAgICAgY2hlY2tQc2V1ZG9TdGF0ZSggZSApOwotICAgICAgICAgICAg
ICAgIGlmICggcHNldWRvU3RhdGUgPT0gUHNldWRvVmlzaXRlZCApCisgICAgICAgICAgICAgICAg
aWYgKHBzZXVkb1N0YXRlID09IFBzZXVkb1Vua25vd24gfHwgcHNldWRvU3RhdGUgPT0gUHNldWRv
QW55TGluaykKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tQc2V1ZG9TdGF0ZShlKTsKKyAgICAg
ICAgICAgICAgICBpZiAocHNldWRvU3RhdGUgPT0gUHNldWRvVmlzaXRlZCkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ib3ZlcjogewpAQCAtMTQxMSwxMyArMTQ1OCwxMyBA
QCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIC8vIFBzZXVkby1lbGVtZW50czoKICAgICAgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0ZpcnN0TGluZToKLSAgICAgICAgICAgICAgICBpZiAoIHN1YmplY3QgKSB7
CisgICAgICAgICAgICAgICAgaWYgKHN1YmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAgZHlu
YW1pY1BzZXVkbz1SZW5kZXJTdHlsZTo6RklSU1RfTElORTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RMZXR0ZXI6Ci0gICAgICAg
ICAgICAgICAgaWYgKCBzdWJqZWN0ICkgeworICAgICAgICAgICAgICAgIGlmIChzdWJqZWN0KSB7
CiAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWNQc2V1ZG89UmVuZGVyU3R5bGU6OkZJUlNUX0xF
VFRFUjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAg
fQpAQCAtMTQzNiw3ICsxNDgzLDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNl
bGVjdG9yKAogICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLQkgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICAvLyAjIyMgYWRkIHRoZSByZXN0IG9mIHRoZSBjaGVja3MuLi4K
ICAgICByZXR1cm4gdHJ1ZTsK
</data>
<flag name="review"
          id="729"
          type_id="1"
          status="-"
          setter="nickshanks"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4310</attachid>
            <date>2005-10-11 08:08:07 -0700</date>
            <delta_ts>2005-10-12 11:11:02 -0700</delta_ts>
            <desc>*-of-type patch part 1, v2.0.1</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>19517</size>
            <attacher name="Nicholas Shanks">nickshanks</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2Nzcy9jc3NfYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19iYXNlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4yMApkaWZmIC1wIC11IC1yMS4yMCBraHRtbC9jc3MvY3NzX2Jhc2UuY3BwCi0tLSBraHRtbC9j
c3MvY3NzX2Jhc2UuY3BwCTMgT2N0IDIwMDUgMjE6MTI6MDYgLTAwMDAJMS4yMAorKysga2h0bWwv
Y3NzL2Nzc19iYXNlLmNwcAkxMSBPY3QgMjAwNSAxNDozMTozMCAtMDAwMApAQCAtMTUwLDEzICsx
NTAsMTYgQEAgdm9pZCBDU1NTZWxlY3Rvcjo6ZXh0cmFjdFBzZXVkb1R5cGUoKSBjbwogICAgIHN0
YXRpYyBBdG9taWNTdHJpbmcgZmlyc3RDaGlsZCgiZmlyc3QtY2hpbGQiKTsKICAgICBzdGF0aWMg
QXRvbWljU3RyaW5nIGZpcnN0TGV0dGVyKCJmaXJzdC1sZXR0ZXIiKTsKICAgICBzdGF0aWMgQXRv
bWljU3RyaW5nIGZpcnN0TGluZSgiZmlyc3QtbGluZSIpOworICAgIHN0YXRpYyBBdG9taWNTdHJp
bmcgZmlyc3RPZlR5cGUoImZpcnN0LW9mLXR5cGUiKTsKICAgICBzdGF0aWMgQXRvbWljU3RyaW5n
IGZvY3VzKCJmb2N1cyIpOwogICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgaG92ZXIoImhvdmVyIik7
CiAgICAgc3RhdGljIEF0b21pY1N0cmluZyBsaW5rKCJsaW5rIik7CiAgICAgc3RhdGljIEF0b21p
Y1N0cmluZyBsYW5nKCJsYW5nKCIpOwogICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgbGFzdENoaWxk
KCJsYXN0LWNoaWxkIik7CisgICAgc3RhdGljIEF0b21pY1N0cmluZyBsYXN0T2ZUeXBlKCJsYXN0
LW9mLXR5cGUiKTsKICAgICBzdGF0aWMgQXRvbWljU3RyaW5nIG5vdFN0cigibm90KCIpOwogICAg
IHN0YXRpYyBBdG9taWNTdHJpbmcgb25seUNoaWxkKCJvbmx5LWNoaWxkIik7CisgICAgc3RhdGlj
IEF0b21pY1N0cmluZyBvbmx5T2ZUeXBlKCJvbmx5LW9mLXR5cGUiKTsKICAgICBzdGF0aWMgQXRv
bWljU3RyaW5nIHJvb3QoInJvb3QiKTsKICAgICBzdGF0aWMgQXRvbWljU3RyaW5nIHNlbGVjdGlv
bigic2VsZWN0aW9uIik7CiAgICAgc3RhdGljIEF0b21pY1N0cmluZyB0YXJnZXQoInRhcmdldCIp
OwpAQCAtMTkzLDcgKzE5Niw5IEBAIHZvaWQgQ1NTU2VsZWN0b3I6OmV4dHJhY3RQc2V1ZG9UeXBl
KCkgY28KICAgICB9IGVsc2UgaWYgKHZhbHVlID09IGZpcnN0TGluZSkgewogICAgICAgICBfcHNl
dWRvVHlwZSA9IFBzZXVkb0ZpcnN0TGluZTsKICAgICAgICAgZWxlbWVudCA9IGNvbXBhdCA9IHRy
dWU7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBmb2N1cykKKyAgICB9IGVsc2UgaWYgKHZhbHVl
ID09IGZpcnN0T2ZUeXBlKQorICAgICAgICBfcHNldWRvVHlwZSA9IFBzZXVkb0ZpcnN0T2ZUeXBl
OworICAgIGVsc2UgaWYgKHZhbHVlID09IGZvY3VzKQogICAgICAgICBfcHNldWRvVHlwZSA9IFBz
ZXVkb0ZvY3VzOwogICAgIGVsc2UgaWYgKHZhbHVlID09IGhvdmVyKQogICAgICAgICBfcHNldWRv
VHlwZSA9IFBzZXVkb0hvdmVyOwpAQCAtMjAzLDEwICsyMDgsMTQgQEAgdm9pZCBDU1NTZWxlY3Rv
cjo6ZXh0cmFjdFBzZXVkb1R5cGUoKSBjbwogICAgICAgICBfcHNldWRvVHlwZSA9IFBzZXVkb0xh
bmc7CiAgICAgZWxzZSBpZiAodmFsdWUgPT0gbGFzdENoaWxkKQogICAgICAgICBfcHNldWRvVHlw
ZSA9IFBzZXVkb0xhc3RDaGlsZDsKKyAgICBlbHNlIGlmICh2YWx1ZSA9PSBsYXN0T2ZUeXBlKQor
ICAgICAgICBfcHNldWRvVHlwZSA9IFBzZXVkb0xhc3RPZlR5cGU7CiAgICAgZWxzZSBpZiAodmFs
dWUgPT0gbm90U3RyKQogICAgICAgICBfcHNldWRvVHlwZSA9IFBzZXVkb05vdDsKICAgICBlbHNl
IGlmICh2YWx1ZSA9PSBvbmx5Q2hpbGQpCiAgICAgICAgIF9wc2V1ZG9UeXBlID0gUHNldWRvT25s
eUNoaWxkOworICAgIGVsc2UgaWYgKHZhbHVlID09IG9ubHlPZlR5cGUpCisgICAgICAgIF9wc2V1
ZG9UeXBlID0gUHNldWRvT25seU9mVHlwZTsKICAgICBlbHNlIGlmICh2YWx1ZSA9PSByb290KQog
ICAgICAgICBfcHNldWRvVHlwZSA9IFBzZXVkb1Jvb3Q7CiAgICAgZWxzZSBpZiAodmFsdWUgPT0g
c2VsZWN0aW9uKSB7CkluZGV4OiBraHRtbC9jc3MvY3NzX2Jhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzX2Jhc2UuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xOApkaWZmIC1wIC11IC1yMS4xOCBraHRtbC9jc3MvY3NzX2Jhc2UuaAotLS0g
a2h0bWwvY3NzL2Nzc19iYXNlLmgJMyBPY3QgMjAwNSAyMToxMjowNiAtMDAwMAkxLjE4CisrKyBr
aHRtbC9jc3MvY3NzX2Jhc2UuaAkxMSBPY3QgMjAwNSAxNDozMTozMCAtMDAwMApAQCAtNzcsOTcg
Kzc3LDEwMCBAQCBuYW1lc3BhY2UgRE9NIHsKICAgICAgICAgICAgICAgcHNldWRvSWQoIDAgKSwg
X3BzZXVkb1R5cGUoUHNldWRvTm90UGFyc2VkKQogICAgICAgICB7fQogICAgICAgICAKLQlDU1NT
ZWxlY3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSkKLQkgICAgOiB0YWdIaXN0b3J5KDAp
LCBzaW1wbGVTZWxlY3RvcigwKSwgbmV4dFNlbGVjdG9yKDApLCBhdHRyKGFueVFOYW1lKCkpLCB0
YWcocU5hbWUpLAorICAgICAgICBDU1NTZWxlY3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFt
ZSkKKyAgICAgICAgICAgIDogdGFnSGlzdG9yeSgwKSwgc2ltcGxlU2VsZWN0b3IoMCksIG5leHRT
ZWxlY3RvcigwKSwgYXR0cihhbnlRTmFtZSgpKSwgdGFnKHFOYW1lKSwKICAgICAgICAgICAgICAg
cmVsYXRpb24oIERlc2NlbmRhbnQgKSwgbWF0Y2goIE5vbmUgKSwKICAgICAgICAgICAgICAgcHNl
dWRvSWQoIDAgKSwgX3BzZXVkb1R5cGUoUHNldWRvTm90UGFyc2VkKQogICAgICAgICB7fQogCi0J
fkNTU1NlbGVjdG9yKCkgewotCSAgICBkZWxldGUgdGFnSGlzdG9yeTsKKyAgICAgICAgfkNTU1Nl
bGVjdG9yKCkgeworICAgICAgICAgICAgZGVsZXRlIHRhZ0hpc3Rvcnk7CiAgICAgICAgICAgICBk
ZWxldGUgc2ltcGxlU2VsZWN0b3I7CiAgICAgICAgICAgICBkZWxldGUgbmV4dFNlbGVjdG9yOwot
CX0KKyAgICAgICAgfQogCiAgICAgICAgIHZvaWQgYXBwZW5kKENTU1NlbGVjdG9yKiBuKSB7CiAg
ICAgICAgICAgICBpZiAoIW5leHRTZWxlY3RvcikgbmV4dFNlbGVjdG9yID0gbjsgZWxzZSBuZXh0
U2VsZWN0b3ItPmFwcGVuZChuKTsKICAgICAgICAgfQogICAgICAgICBDU1NTZWxlY3RvciogbmV4
dCgpIHsgcmV0dXJuIG5leHRTZWxlY3RvcjsgfQogCi0JLyoqCi0JICogUHJpbnQgZGVidWcgb3V0
cHV0IGZvciB0aGlzIHNlbGVjdG9yCi0JICovCi0Jdm9pZCBwcmludCgpOwotCi0JLyoqCi0JICog
UmUtY3JlYXRlIHNlbGVjdG9yIHRleHQgZnJvbSBzZWxlY3RvcidzIGRhdGEKLQkgKi8KLQlET01T
dHJpbmcgc2VsZWN0b3JUZXh0KCkgY29uc3Q7Ci0KLQkvLyBjaGVja3MgaWYgdGhlIDIgc2VsZWN0
b3JzIChpbmNsdWRpbmcgc3ViIHNlbGVjdG9ycykgYWdyZWUuCi0JYm9vbCBvcGVyYXRvciA9PSAo
IGNvbnN0IENTU1NlbGVjdG9yICZvdGhlciApOwotCi0JLy8gdGFnID09IC0xIG1lYW5zIGFwcGx5
IHRvIGFsbCBlbGVtZW50cyAoU2VsZWN0b3IgPSAqKQotCi0JdW5zaWduZWQgaW50IHNwZWNpZmlj
aXR5KCk7Ci0KLQkvKiBob3cgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBoYXMgdG8gbWF0Y2guLi4uIERl
ZmF1bHQgaXMgRXhhY3QgKi8KLQllbnVtIE1hdGNoCi0JewotCSAgICBOb25lID0gMCwKLQkgICAg
SWQsCisgICAgICAgIC8qKgorICAgICAgICAgKiBQcmludCBkZWJ1ZyBvdXRwdXQgZm9yIHRoaXMg
c2VsZWN0b3IKKyAgICAgICAgICovCisgICAgICAgIHZvaWQgcHJpbnQoKTsKKworICAgICAgICAv
KioKKyAgICAgICAgICogUmUtY3JlYXRlIHNlbGVjdG9yIHRleHQgZnJvbSBzZWxlY3RvcidzIGRh
dGEKKyAgICAgICAgICovCisgICAgICAgIERPTVN0cmluZyBzZWxlY3RvclRleHQoKSBjb25zdDsK
KworICAgICAgICAvLyBjaGVja3MgaWYgdGhlIDIgc2VsZWN0b3JzIChpbmNsdWRpbmcgc3ViIHNl
bGVjdG9ycykgYWdyZWUuCisgICAgICAgIGJvb2wgb3BlcmF0b3IgPT0gKCBjb25zdCBDU1NTZWxl
Y3RvciAmb3RoZXIgKTsKKworICAgICAgICAvLyB0YWcgPT0gLTEgbWVhbnMgYXBwbHkgdG8gYWxs
IGVsZW1lbnRzIChTZWxlY3RvciA9ICopCisKKyAgICAgICAgdW5zaWduZWQgaW50IHNwZWNpZmlj
aXR5KCk7CisKKyAgICAgICAgLyogaG93IHRoZSBhdHRyaWJ1dGUgdmFsdWUgaGFzIHRvIG1hdGNo
Li4uLiBEZWZhdWx0IGlzIEV4YWN0ICovCisgICAgICAgIGVudW0gTWF0Y2gKKyAgICAgICAgewor
ICAgICAgICAgICAgTm9uZSA9IDAsCisgICAgICAgICAgICBJZCwKICAgICAgICAgQ2xhc3MsCi0J
ICAgIEV4YWN0LAotCSAgICBTZXQsCi0JICAgIExpc3QsCi0JICAgIEh5cGhlbiwKLQkgICAgUHNl
dWRvQ2xhc3MsCi0JICAgIFBzZXVkb0VsZW1lbnQsCi0JICAgIENvbnRhaW4sICAgLy8gY3NzMzog
RVtmb28qPSJiYXIiXQotCSAgICBCZWdpbiwgICAgIC8vIGNzczM6IEVbZm9vXj0iYmFyIl0KLQkg
ICAgRW5kICAgICAgICAvLyBjc3MzOiBFW2ZvbyQ9ImJhciJdCi0JfTsKLQotCWVudW0gUmVsYXRp
b24KLQl7Ci0JICAgIERlc2NlbmRhbnQgPSAwLAotCSAgICBDaGlsZCwKLQkgICAgRGlyZWN0QWRq
YWNlbnQsCisgICAgICAgICAgICBFeGFjdCwKKyAgICAgICAgICAgIFNldCwKKyAgICAgICAgICAg
IExpc3QsCisgICAgICAgICAgICBIeXBoZW4sCisgICAgICAgICAgICBQc2V1ZG9DbGFzcywKKyAg
ICAgICAgICAgIFBzZXVkb0VsZW1lbnQsCisgICAgICAgICAgICBDb250YWluLCAgIC8vIGNzczM6
IEVbZm9vKj0iYmFyIl0KKyAgICAgICAgICAgIEJlZ2luLCAgICAgLy8gY3NzMzogRVtmb29ePSJi
YXIiXQorICAgICAgICAgICAgRW5kICAgICAgICAvLyBjc3MzOiBFW2ZvbyQ9ImJhciJdCisgICAg
ICAgIH07CisKKyAgICAgICAgZW51bSBSZWxhdGlvbgorICAgICAgICB7CisgICAgICAgICAgICBE
ZXNjZW5kYW50ID0gMCwKKyAgICAgICAgICAgIENoaWxkLAorICAgICAgICAgICAgRGlyZWN0QWRq
YWNlbnQsCiAgICAgICAgICAgICBJbmRpcmVjdEFkamFjZW50LAogICAgICAgICAgICAgU3ViU2Vs
ZWN0b3IKLQl9OworICAgICAgICB9OwogCi0JZW51bSBQc2V1ZG9UeXBlCi0JewotCSAgICBQc2V1
ZG9Ob3RQYXJzZWQgPSAwLAotCSAgICBQc2V1ZG9PdGhlciwKLQkgICAgUHNldWRvRW1wdHksCisg
ICAgICAgIGVudW0gUHNldWRvVHlwZQorICAgICAgICB7CisgICAgICAgICAgICBQc2V1ZG9Ob3RQ
YXJzZWQgPSAwLAorICAgICAgICAgICAgUHNldWRvT3RoZXIsCisgICAgICAgICAgICBQc2V1ZG9F
bXB0eSwKICAgICAgICAgICAgIFBzZXVkb0ZpcnN0Q2hpbGQsCisgICAgICAgICAgICBQc2V1ZG9G
aXJzdE9mVHlwZSwKICAgICAgICAgICAgIFBzZXVkb0xhc3RDaGlsZCwKKyAgICAgICAgICAgIFBz
ZXVkb0xhc3RPZlR5cGUsCiAgICAgICAgICAgICBQc2V1ZG9Pbmx5Q2hpbGQsCi0JICAgIFBzZXVk
b0ZpcnN0TGluZSwKLQkgICAgUHNldWRvRmlyc3RMZXR0ZXIsCi0JICAgIFBzZXVkb0xpbmssCi0J
ICAgIFBzZXVkb1Zpc2l0ZWQsCisgICAgICAgICAgICBQc2V1ZG9Pbmx5T2ZUeXBlLAorICAgICAg
ICAgICAgUHNldWRvRmlyc3RMaW5lLAorICAgICAgICAgICAgUHNldWRvRmlyc3RMZXR0ZXIsCisg
ICAgICAgICAgICBQc2V1ZG9MaW5rLAorICAgICAgICAgICAgUHNldWRvVmlzaXRlZCwKICAgICAg
ICAgICAgIFBzZXVkb0FueUxpbmssCi0JICAgIFBzZXVkb0hvdmVyLAotCSAgICBQc2V1ZG9EcmFn
LAotCSAgICBQc2V1ZG9Gb2N1cywKLQkgICAgUHNldWRvQWN0aXZlLAorICAgICAgICAgICAgUHNl
dWRvSG92ZXIsCisgICAgICAgICAgICBQc2V1ZG9EcmFnLAorICAgICAgICAgICAgUHNldWRvRm9j
dXMsCisgICAgICAgICAgICBQc2V1ZG9BY3RpdmUsCiAgICAgICAgICAgICBQc2V1ZG9DaGVja2Vk
LAogICAgICAgICAgICAgUHNldWRvRW5hYmxlZCwKICAgICAgICAgICAgIFBzZXVkb0Rpc2FibGVk
LAogICAgICAgICAgICAgUHNldWRvVGFyZ2V0LAotCSAgICBQc2V1ZG9CZWZvcmUsCi0JICAgIFBz
ZXVkb0FmdGVyLAorICAgICAgICAgICAgUHNldWRvQmVmb3JlLAorICAgICAgICAgICAgUHNldWRv
QWZ0ZXIsCiAgICAgICAgICAgICBQc2V1ZG9MYW5nLAogICAgICAgICAgICAgUHNldWRvTm90LAog
ICAgICAgICAgICAgUHNldWRvUm9vdCwKICAgICAgICAgICAgIFBzZXVkb1NlbGVjdGlvbgotCX07
CisgICAgICAgIH07CiAKLQlpbmxpbmUgUHNldWRvVHlwZSBwc2V1ZG9UeXBlKCkgY29uc3QKLQl7
CisgICAgICAgIGlubGluZSBQc2V1ZG9UeXBlIHBzZXVkb1R5cGUoKSBjb25zdAorICAgICAgICB7
CiAgICAgICAgICAgICBpZiAoX3BzZXVkb1R5cGUgPT0gUHNldWRvTm90UGFyc2VkKQogICAgICAg
ICAgICAgICAgIGV4dHJhY3RQc2V1ZG9UeXBlKCk7CiAgICAgICAgICAgICByZXR1cm4gX3BzZXVk
b1R5cGU7CkBAIC0xNzYsOTEgKzE3OSw5MSBAQCBuYW1lc3BhY2UgRE9NIHsKICAgICAgICAgYm9v
bCBoYXNUYWcoKSBjb25zdCB7IHJldHVybiB0YWcgIT0gYW55UU5hbWUoKTsgfQogICAgICAgICBi
b29sIGhhc0F0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIGF0dHIgIT0gYW55UU5hbWUoKTsgfQog
Ci0JbXV0YWJsZSBET006OkF0b21pY1N0cmluZyB2YWx1ZTsKLQlDU1NTZWxlY3RvciogdGFnSGlz
dG9yeTsKKyAgICAgICAgbXV0YWJsZSBET006OkF0b21pY1N0cmluZyB2YWx1ZTsKKyAgICAgICAg
Q1NTU2VsZWN0b3IqIHRhZ0hpc3Rvcnk7CiAgICAgICAgIENTU1NlbGVjdG9yKiBzaW1wbGVTZWxl
Y3RvcjsgLy8gVXNlZCBmb3IgOm5vdC4KICAgICAgICAgQ1NTU2VsZWN0b3IqIG5leHRTZWxlY3Rv
cjsgLy8gdXNlZCBmb3IgLC1jaGFpbmVkIHNlbGVjdG9ycwotCQorICAgICAgICAKICAgICAgICAg
UXVhbGlmaWVkTmFtZSBhdHRyOwogICAgICAgICBRdWFsaWZpZWROYW1lIHRhZzsKICAgICAgICAg
CiAgICAgICAgIFJlbGF0aW9uIHJlbGF0aW9uICAgICAgICAgICAgICA6IDM7Ci0JbXV0YWJsZSBN
YXRjaCAgbWF0Y2ggICAgICAgICAgIDogNDsKLQl1bnNpZ25lZCBpbnQgcHNldWRvSWQgICAgICAg
ICAgOiAzOwotCW11dGFibGUgUHNldWRvVHlwZSBfcHNldWRvVHlwZSA6IDU7CisgICAgICAgIG11
dGFibGUgTWF0Y2ggIG1hdGNoICAgICAgICAgICA6IDQ7CisgICAgICAgIHVuc2lnbmVkIGludCBw
c2V1ZG9JZCAgICAgICAgICA6IDM7CisgICAgICAgIG11dGFibGUgUHNldWRvVHlwZSBfcHNldWRv
VHlwZSA6IDU7CiAKICAgICBwcml2YXRlOgotCXZvaWQgZXh0cmFjdFBzZXVkb1R5cGUoKSBjb25z
dDsKKyAgICAgICAgdm9pZCBleHRyYWN0UHNldWRvVHlwZSgpIGNvbnN0OwogICAgIH07CiAKICAg
ICAvLyBhIHN0eWxlIGNsYXNzIHdoaWNoIGhhcyBhIHBhcmVudCAoYWxtb3N0IGFsbCBoYXZlKQog
ICAgIGNsYXNzIFN0eWxlQmFzZUltcGwgOiBwdWJsaWMga2h0bWw6OlRyZWVTaGFyZWQ8U3R5bGVC
YXNlSW1wbD4KICAgICB7CiAgICAgcHVibGljOgotCVN0eWxlQmFzZUltcGwoKSAgeyBtX3BhcmVu
dCA9IDA7IHN0cmljdFBhcnNpbmcgPSB0cnVlOyBtdWx0aUxlbmd0aCA9IGZhbHNlOyB9Ci0JU3R5
bGVCYXNlSW1wbChTdHlsZUJhc2VJbXBsICpwKSB7Ci0JICAgIG1fcGFyZW50ID0gcDsKLQkgICAg
c3RyaWN0UGFyc2luZyA9IChtX3BhcmVudCA/IG1fcGFyZW50LT51c2VTdHJpY3RQYXJzaW5nKCkg
OiB0cnVlKTsKLQkgICAgbXVsdGlMZW5ndGggPSBmYWxzZTsKLQl9CisgICAgICAgIFN0eWxlQmFz
ZUltcGwoKSAgeyBtX3BhcmVudCA9IDA7IHN0cmljdFBhcnNpbmcgPSB0cnVlOyBtdWx0aUxlbmd0
aCA9IGZhbHNlOyB9CisgICAgICAgIFN0eWxlQmFzZUltcGwoU3R5bGVCYXNlSW1wbCAqcCkgewor
ICAgICAgICAgICAgbV9wYXJlbnQgPSBwOworICAgICAgICAgICAgc3RyaWN0UGFyc2luZyA9ICht
X3BhcmVudCA/IG1fcGFyZW50LT51c2VTdHJpY3RQYXJzaW5nKCkgOiB0cnVlKTsKKyAgICAgICAg
ICAgIG11bHRpTGVuZ3RoID0gZmFsc2U7CisgICAgICAgIH0KIAotCXZpcnR1YWwgflN0eWxlQmFz
ZUltcGwoKSB7fQorICAgICAgICB2aXJ0dWFsIH5TdHlsZUJhc2VJbXBsKCkge30KIAotCS8vIHJl
dHVybnMgdGhlIHVybCBvZiB0aGUgc3R5bGUgc2hlZXQgdGhpcyBvYmplY3QgYmVsb25ncyB0bwot
CURPTVN0cmluZyBiYXNlVVJMKCk7CisgICAgICAgIC8vIHJldHVybnMgdGhlIHVybCBvZiB0aGUg
c3R5bGUgc2hlZXQgdGhpcyBvYmplY3QgYmVsb25ncyB0bworICAgICAgICBET01TdHJpbmcgYmFz
ZVVSTCgpOwogCi0JdmlydHVhbCBib29sIGlzU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0JdmlydHVhbCBib29sIGlzQ1NTU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDU1NTdHlsZVNoZWV0KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzWFNMU3R5bGVTaGVldCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0JdmlydHVhbCBib29sIGlzU3R5bGVTaGVldExpc3Qo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCXZpcnR1YWwgYm9vbCBpc01lZGlhTGlzdCgpIHsg
cmV0dXJuIGZhbHNlOyB9Ci0JdmlydHVhbCBib29sIGlzUnVsZUxpc3QoKSB7IHJldHVybiBmYWxz
ZTsgfQotCXZpcnR1YWwgYm9vbCBpc1J1bGUoKSB7IHJldHVybiBmYWxzZTsgfQotCXZpcnR1YWwg
Ym9vbCBpc1N0eWxlUnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0JdmlydHVhbCBib29sIGlzQ2hh
cmV0UnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0JdmlydHVhbCBib29sIGlzSW1wb3J0UnVsZSgp
IHsgcmV0dXJuIGZhbHNlOyB9Ci0JdmlydHVhbCBib29sIGlzTWVkaWFSdWxlKCkgeyByZXR1cm4g
ZmFsc2U7IH0KLQl2aXJ0dWFsIGJvb2wgaXNGb250RmFjZVJ1bGUoKSB7IHJldHVybiBmYWxzZTsg
fQotCXZpcnR1YWwgYm9vbCBpc1BhZ2VSdWxlKCkgeyByZXR1cm4gZmFsc2U7IH0KLQl2aXJ0dWFs
IGJvb2wgaXNVbmtub3duUnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0JdmlydHVhbCBib29sIGlz
U3R5bGVEZWNsYXJhdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9Ci0JdmlydHVhbCBib29sIGlzVmFs
dWUoKSB7IHJldHVybiBmYWxzZTsgfQotCXZpcnR1YWwgYm9vbCBpc1ByaW1pdGl2ZVZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQl2aXJ0dWFsIGJvb2wgaXNWYWx1ZUxpc3QoKSB7IHJl
dHVybiBmYWxzZTsgfQotCXZpcnR1YWwgYm9vbCBpc1ZhbHVlQ3VzdG9tKCkgeyByZXR1cm4gZmFs
c2U7IH0KLQotCXZvaWQgc2V0UGFyZW50KFN0eWxlQmFzZUltcGwgKnBhcmVudCkgeyBtX3BhcmVu
dCA9IHBhcmVudDsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZVNoZWV0TGlzdCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhTGlzdCgp
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1J1bGVMaXN0KCkgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGlzUnVsZSgpIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlUnVsZSgpIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0NoYXJldFJ1bGUoKSB7IHJldHVybiBmYWxzZTsg
fQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNJbXBvcnRSdWxlKCkgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICAgICAgdmlydHVhbCBib29sIGlzTWVkaWFSdWxlKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICAgICAgdmlydHVhbCBib29sIGlzRm9udEZhY2VSdWxlKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICAgICAgdmlydHVhbCBib29sIGlzUGFnZVJ1bGUoKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNVbmtub3duUnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAg
IHZpcnR1YWwgYm9vbCBpc1N0eWxlRGVjbGFyYXRpb24oKSB7IHJldHVybiBmYWxzZTsgfQorICAg
ICAgICB2aXJ0dWFsIGJvb2wgaXNWYWx1ZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZp
cnR1YWwgYm9vbCBpc1ByaW1pdGl2ZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICAgICAgdmlydHVhbCBib29sIGlzVmFsdWVMaXN0KCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAg
ICAgdmlydHVhbCBib29sIGlzVmFsdWVDdXN0b20oKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAg
ICAgIHZvaWQgc2V0UGFyZW50KFN0eWxlQmFzZUltcGwgKnBhcmVudCkgeyBtX3BhcmVudCA9IHBh
cmVudDsgfQogCi0JdmlydHVhbCBib29sIHBhcnNlU3RyaW5nKGNvbnN0IERPTVN0cmluZyAmLypj
c3NTdHJpbmcqLywgYm9vbCA9IGZhbHNlKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0
dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgRE9NU3RyaW5nICYvKmNzc1N0cmluZyovLCBib29s
ID0gZmFsc2UpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLQl2aXJ0dWFsIHZvaWQgY2hlY2tMb2FkZWQo
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNoZWNrTG9hZGVkKCk7CiAKLQl2b2lkIHNldFN0cmlj
dFBhcnNpbmcoIGJvb2wgYiApIHsgc3RyaWN0UGFyc2luZyA9IGI7IH0KLQlib29sIHVzZVN0cmlj
dFBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBzdHJpY3RQYXJzaW5nOyB9CisgICAgICAgIHZvaWQg
c2V0U3RyaWN0UGFyc2luZyggYm9vbCBiICkgeyBzdHJpY3RQYXJzaW5nID0gYjsgfQorICAgICAg
ICBib29sIHVzZVN0cmljdFBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBzdHJpY3RQYXJzaW5nOyB9
CiAKLQlTdHlsZVNoZWV0SW1wbCogc3R5bGVzaGVldCgpOworICAgICAgICBTdHlsZVNoZWV0SW1w
bCogc3R5bGVzaGVldCgpOwogCiAgICAgcHJvdGVjdGVkOgotCWJvb2wgc3RyaWN0UGFyc2luZyA6
IDE7Ci0JYm9vbCBtdWx0aUxlbmd0aCA6IDE7CisgICAgICAgIGJvb2wgc3RyaWN0UGFyc2luZyA6
IDE7CisgICAgICAgIGJvb2wgbXVsdGlMZW5ndGggOiAxOwogICAgIH07CiAKICAgICAvLyBhIHN0
eWxlIGNsYXNzIHdoaWNoIGhhcyBhIGxpc3Qgb2YgY2hpbGRyZW4gKFN0eWxlU2hlZXRzIGZvciBl
eGFtcGxlKQogICAgIGNsYXNzIFN0eWxlTGlzdEltcGwgOiBwdWJsaWMgU3R5bGVCYXNlSW1wbAog
ICAgIHsKICAgICBwdWJsaWM6Ci0JU3R5bGVMaXN0SW1wbCgpIDogU3R5bGVCYXNlSW1wbCgpIHsg
bV9sc3RDaGlsZHJlbiA9IDA7IH0KLQlTdHlsZUxpc3RJbXBsKFN0eWxlQmFzZUltcGwgKnBhcmVu
dCkgOiBTdHlsZUJhc2VJbXBsKHBhcmVudCkgeyBtX2xzdENoaWxkcmVuID0gMDsgfQorICAgICAg
ICBTdHlsZUxpc3RJbXBsKCkgOiBTdHlsZUJhc2VJbXBsKCkgeyBtX2xzdENoaWxkcmVuID0gMDsg
fQorICAgICAgICBTdHlsZUxpc3RJbXBsKFN0eWxlQmFzZUltcGwgKnBhcmVudCkgOiBTdHlsZUJh
c2VJbXBsKHBhcmVudCkgeyBtX2xzdENoaWxkcmVuID0gMDsgfQogCi0JdmlydHVhbCB+U3R5bGVM
aXN0SW1wbCgpOworICAgICAgICB2aXJ0dWFsIH5TdHlsZUxpc3RJbXBsKCk7CiAKLQl1bnNpZ25l
ZCBsZW5ndGgoKSB7IHJldHVybiBtX2xzdENoaWxkcmVuLT5jb3VudCgpOyB9Ci0JU3R5bGVCYXNl
SW1wbCAqaXRlbSh1bnNpZ25lZCBudW0pIHsgcmV0dXJuIG1fbHN0Q2hpbGRyZW4tPmF0KG51bSk7
IH0KKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9sc3RDaGlsZHJlbi0+Y291
bnQoKTsgfQorICAgICAgICBTdHlsZUJhc2VJbXBsICppdGVtKHVuc2lnbmVkIG51bSkgeyByZXR1
cm4gbV9sc3RDaGlsZHJlbi0+YXQobnVtKTsgfQogCi0Jdm9pZCBhcHBlbmQoU3R5bGVCYXNlSW1w
bCAqaXRlbSkgeyBtX2xzdENoaWxkcmVuLT5hcHBlbmQoaXRlbSk7IH0KKyAgICAgICAgdm9pZCBh
cHBlbmQoU3R5bGVCYXNlSW1wbCAqaXRlbSkgeyBtX2xzdENoaWxkcmVuLT5hcHBlbmQoaXRlbSk7
IH0KIAogICAgIHByb3RlY3RlZDoKLQlRUHRyTGlzdDxTdHlsZUJhc2VJbXBsPiAqbV9sc3RDaGls
ZHJlbjsKKyAgICAgICAgUVB0ckxpc3Q8U3R5bGVCYXNlSW1wbD4gKm1fbHN0Q2hpbGRyZW47CiAg
ICAgfTsKIAogICAgIGludCBnZXRQcm9wZXJ0eUlEKGNvbnN0IGNoYXIgKnRhZ1N0ciwgaW50IGxl
bik7CkluZGV4OiBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjIwOQpkaWZmIC1wIC11IC1yMS4yMDkga2h0bWwvY3NzL2Nz
c3N0eWxlc2VsZWN0b3IuY3BwCi0tLSBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAJMyBP
Y3QgMjAwNSAyMToxMjowNyAtMDAwMAkxLjIwOQorKysga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0
b3IuY3BwCTExIE9jdCAyMDA1IDE0OjMxOjM0IC0wMDAwCkBAIC0xMjU5LDkgKzEyNTksOSBAQCBi
b29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgewogICAgICAgICAv
LyBQc2V1ZG8gZWxlbWVudHMuIFdlIG5lZWQgdG8gY2hlY2sgZmlyc3QgY2hpbGQgaGVyZS4gTm8g
ZHluYW1pYyBwc2V1ZG8KICAgICAgICAgLy8gZWxlbWVudHMgZm9yIHRoZSBtb21lbnQKLS8vCWtk
RGVidWcoKSA8PCAiQ1NTT3JkZXJlZFJ1bGU6OnBzZXVkbyAiIDw8IHZhbHVlIDw8IGVuZGw7Ci0J
ICAgIHN3aXRjaCAoc2VsLT5wc2V1ZG9UeXBlKCkpIHsKLQkgICAgICAgIC8vIFBzZXVkbyBjbGFz
c2VzOgorLy8gICAgICAgIGtkRGVidWcoKSA8PCAiQ1NTT3JkZXJlZFJ1bGU6OnBzZXVkbyAiIDw8
IHZhbHVlIDw8IGVuZGw7CisgICAgICAgICAgICBzd2l0Y2ggKHNlbC0+cHNldWRvVHlwZSgpKSB7
CisgICAgICAgICAgICAgICAgLy8gUHNldWRvIGNsYXNzZXM6CiAgICAgICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9FbXB0eToKICAgICAgICAgICAgICAgICBpZiAoIWUtPmZpcnN0Q2hp
bGQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMjY5LDEwICsxMjY5
LDI1IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tPbmVTZWxlY3RvcigKICAgICAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0Q2hpbGQ6IHsKICAgICAgICAgICAgICAg
ICAvLyBmaXJzdC1jaGlsZCBtYXRjaGVzIHRoZSBmaXJzdCBjaGlsZCB0aGF0IGlzIGFuIGVsZW1l
bnQhCiAgICAgICAgICAgICAgICAgaWYgKGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICAgICAg
ICAgICAgICBOb2RlSW1wbCogbiA9IGUtPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoIG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSApCisgICAgICAgICAgICAg
ICAgICAgIE5vZGVJbXBsICpuID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICggIW4gKQorICAgICAgICAgICAgICAgICAgICBpZiAoIW4pCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9G
aXJzdE9mVHlwZTogeworICAgICAgICAgICAgICAgIC8vIGZpcnN0LW9mLXR5cGUgbWF0Y2hlcyB0
aGUgZmlyc3QgZWxlbWVudCBvZiBpdHMgdHlwZSEKKyAgICAgICAgICAgICAgICBpZiAoZS0+cGFy
ZW50Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5
cGUgPSBlLT50YWdOYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGVJbXBsICpuID0gZS0+
cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0
PEVsZW1lbnRJbXBsKj4obiktPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNT
aWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFuKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTI4MCwxMCArMTI5NSwyNSBAQCBib29s
IENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9MYXN0Q2hpbGQ6IHsKICAgICAgICAgICAgICAgICAvLyBsYXN0LWNo
aWxkIG1hdGNoZXMgdGhlIGxhc3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50IQogICAgICAgICAg
ICAgICAgIGlmIChlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZUlt
cGwqIG4gPSBlLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIG4g
JiYgIW4tPmlzRWxlbWVudE5vZGUoKSApCisgICAgICAgICAgICAgICAgICAgIE5vZGVJbXBsICpu
ID0gZS0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4gJiYgIW4t
PmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2li
bGluZygpOwotICAgICAgICAgICAgICAgICAgICBpZiAoICFuICkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFuKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGFzdE9mVHlwZTogeworICAgICAgICAgICAg
ICAgIC8vIGxhc3Qtb2YtdHlwZSBtYXRjaGVzIHRoZSBsYXN0IGVsZW1lbnQgb2YgaXRzIHR5cGUh
CisgICAgICAgICAgICAgICAgaWYgKGUtPnBhcmVudE5vZGUoKSkgeworICAgICAgICAgICAgICAg
ICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZS0+dGFnTmFtZSgpOworICAgICAgICAg
ICAgICAgICAgICBOb2RlSW1wbCAqbiA9IGUtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVt
ZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obiktPmhhc1RhZ05hbWUodHlw
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBpZiAoIW4pCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjkx
LDE0ICsxMzIxLDMxIEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tPbmVTZWxlY3RvcigK
ICAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb09ubHlDaGlsZDogewogICAgICAg
ICAgICAgICAgIC8vIElmIGJvdGggZmlyc3QtY2hpbGQgYW5kIGxhc3QtY2hpbGQgYXBwbHksIHRo
ZW4gb25seS1jaGlsZCBhcHBsaWVzLgogICAgICAgICAgICAgICAgIGlmIChlLT5wYXJlbnROb2Rl
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwqIG4gPSBlLT5wcmV2aW91c1NpYmxp
bmcoKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBuICYmICFuLT5pc0VsZW1lbnROb2Rl
KCkgKQorICAgICAgICAgICAgICAgICAgICBOb2RlSW1wbCAqbiA9IGUtPnByZXZpb3VzU2libGlu
ZygpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoIW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBl
LT5uZXh0U2libGluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4gJiYgIW4t
PmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+bmV4
dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb09ubHlPZlR5cGU6IHsKKyAgICAgICAg
ICAgICAgICAvLyBJZiBib3RoIGZpcnN0LW9mLXR5cGUgYW5kIGxhc3Qtb2YtdHlwZSBhcHBseSwg
dGhlbiBvbmx5LW9mLXR5cGUgYXBwbGllcy4KKyAgICAgICAgICAgICAgICBpZiAoZS0+cGFyZW50
Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUg
PSBlLT50YWdOYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGVJbXBsICpuID0gZS0+cHJl
dmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuICYmICFzdGF0aWNf
Y2FzdDxFbGVtZW50SW1wbCo+KG4pLT5oYXNUYWdOYW1lKHR5cGUpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoICFuICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW4pIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIG4gPSBlLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKCBuICYmICFuLT5pc0VsZW1lbnROb2RlKCkgKQorICAgICAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKG4gJiYgIXN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obiktPmhhc1RhZ05hbWUo
dHlwZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFuICkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTEzMTUsMTUgKzEzNjIs
MTUgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xpbms6Ci0gICAgICAgICAgICAgICAgaWYgKCBw
c2V1ZG9TdGF0ZSA9PSBQc2V1ZG9Vbmtub3duIHx8IHBzZXVkb1N0YXRlID09IFBzZXVkb0FueUxp
bmsgKQotICAgICAgICAgICAgICAgICAgICBjaGVja1BzZXVkb1N0YXRlKCBlICk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCBwc2V1ZG9TdGF0ZSA9PSBQc2V1ZG9MaW5rICkKKyAgICAgICAgICAgICAg
ICBpZiAocHNldWRvU3RhdGUgPT0gUHNldWRvVW5rbm93biB8fCBwc2V1ZG9TdGF0ZSA9PSBQc2V1
ZG9BbnlMaW5rKQorICAgICAgICAgICAgICAgICAgICBjaGVja1BzZXVkb1N0YXRlKGUpOworICAg
ICAgICAgICAgICAgIGlmIChwc2V1ZG9TdGF0ZSA9PSBQc2V1ZG9MaW5rKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCBw
c2V1ZG9TdGF0ZSA9PSBQc2V1ZG9Vbmtub3duIHx8IHBzZXVkb1N0YXRlID09IFBzZXVkb0FueUxp
bmsgKQotICAgICAgICAgICAgICAgICAgICBjaGVja1BzZXVkb1N0YXRlKCBlICk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCBwc2V1ZG9TdGF0ZSA9PSBQc2V1ZG9WaXNpdGVkICkKKyAgICAgICAgICAg
ICAgICBpZiAocHNldWRvU3RhdGUgPT0gUHNldWRvVW5rbm93biB8fCBwc2V1ZG9TdGF0ZSA9PSBQ
c2V1ZG9BbnlMaW5rKQorICAgICAgICAgICAgICAgICAgICBjaGVja1BzZXVkb1N0YXRlKGUpOwor
ICAgICAgICAgICAgICAgIGlmIChwc2V1ZG9TdGF0ZSA9PSBQc2V1ZG9WaXNpdGVkKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyOiB7CkBAIC0xNDExLDEzICsxNDU4
LDEzIEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tPbmVTZWxlY3RvcigKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgLy8gUHNldWRvLWVsZW1lbnRzOgogICAgICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RMaW5lOgotICAgICAgICAgICAgICAgIGlmICggc3ViamVj
dCApIHsKKyAgICAgICAgICAgICAgICBpZiAoc3ViamVjdCkgewogICAgICAgICAgICAgICAgICAg
ICBkeW5hbWljUHNldWRvPVJlbmRlclN0eWxlOjpGSVJTVF9MSU5FOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdExldHRlcjoKLSAg
ICAgICAgICAgICAgICBpZiAoIHN1YmplY3QgKSB7CisgICAgICAgICAgICAgICAgaWYgKHN1Ympl
Y3QpIHsKICAgICAgICAgICAgICAgICAgICAgZHluYW1pY1BzZXVkbz1SZW5kZXJTdHlsZTo6RklS
U1RfTEVUVEVSOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
ICAgICB9CkBAIC0xNDM2LDcgKzE0ODMsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNr
T25lU2VsZWN0b3IoCiAgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotCSAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vICMjIyBhZGQgdGhlIHJlc3Qgb2YgdGhlIGNoZWNr
cy4uLgogICAgIHJldHVybiB0cnVlOwo=
</data>
<flag name="review"
          id="731"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4315</attachid>
            <date>2005-10-11 10:19:39 -0700</date>
            <delta_ts>2005-10-11 10:19:39 -0700</delta_ts>
            <desc>Test case that shows why isElementNode checks are needed</desc>
            <filename>firstchildselector.html</filename>
            <type>text/plain</type>
            <size>133</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgo8c3R5bGU+Cmh0bWw6Zmlyc3QtY2hpbGQgeyBjb2xvcjogcmVkIH0KPC9z
dHlsZT4KPC9oZWFkPgo8Ym9keT4KSWYgdGhpcyB0ZXh0IGlzIHJlZCwgdGhlbiB0aGUgdGVzdCBo
YXMgZmFpbGVkLgo8L2JvZHk+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4325</attachid>
            <date>2005-10-12 11:11:02 -0700</date>
            <delta_ts>2005-10-22 18:02:28 -0700</delta_ts>
            <desc>*-of-type patch part 1, v2.0.2</desc>
            <filename>patch-b.diff</filename>
            <type>text/plain</type>
            <size>20720</size>
            <attacher name="Nicholas Shanks">nickshanks</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2Nzcy9jc3NfYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19iYXNlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4yMApkaWZmIC1wIC11IC1yMS4yMCBraHRtbC9jc3MvY3NzX2Jhc2UuY3BwCi0tLSBraHRtbC9j
c3MvY3NzX2Jhc2UuY3BwCTMgT2N0IDIwMDUgMjE6MTI6MDYgLTAwMDAJMS4yMAorKysga2h0bWwv
Y3NzL2Nzc19iYXNlLmNwcAkxMiBPY3QgMjAwNSAxNjozMToxNCAtMDAwMApAQCAtMTUwLDEzICsx
NTAsMTYgQEAgdm9pZCBDU1NTZWxlY3Rvcjo6ZXh0cmFjdFBzZXVkb1R5cGUoKSBjbwogICAgIHN0
YXRpYyBBdG9taWNTdHJpbmcgZmlyc3RDaGlsZCgiZmlyc3QtY2hpbGQiKTsKICAgICBzdGF0aWMg
QXRvbWljU3RyaW5nIGZpcnN0TGV0dGVyKCJmaXJzdC1sZXR0ZXIiKTsKICAgICBzdGF0aWMgQXRv
bWljU3RyaW5nIGZpcnN0TGluZSgiZmlyc3QtbGluZSIpOworICAgIHN0YXRpYyBBdG9taWNTdHJp
bmcgZmlyc3RPZlR5cGUoImZpcnN0LW9mLXR5cGUiKTsKICAgICBzdGF0aWMgQXRvbWljU3RyaW5n
IGZvY3VzKCJmb2N1cyIpOwogICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgaG92ZXIoImhvdmVyIik7
CiAgICAgc3RhdGljIEF0b21pY1N0cmluZyBsaW5rKCJsaW5rIik7CiAgICAgc3RhdGljIEF0b21p
Y1N0cmluZyBsYW5nKCJsYW5nKCIpOwogICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgbGFzdENoaWxk
KCJsYXN0LWNoaWxkIik7CisgICAgc3RhdGljIEF0b21pY1N0cmluZyBsYXN0T2ZUeXBlKCJsYXN0
LW9mLXR5cGUiKTsKICAgICBzdGF0aWMgQXRvbWljU3RyaW5nIG5vdFN0cigibm90KCIpOwogICAg
IHN0YXRpYyBBdG9taWNTdHJpbmcgb25seUNoaWxkKCJvbmx5LWNoaWxkIik7CisgICAgc3RhdGlj
IEF0b21pY1N0cmluZyBvbmx5T2ZUeXBlKCJvbmx5LW9mLXR5cGUiKTsKICAgICBzdGF0aWMgQXRv
bWljU3RyaW5nIHJvb3QoInJvb3QiKTsKICAgICBzdGF0aWMgQXRvbWljU3RyaW5nIHNlbGVjdGlv
bigic2VsZWN0aW9uIik7CiAgICAgc3RhdGljIEF0b21pY1N0cmluZyB0YXJnZXQoInRhcmdldCIp
OwpAQCAtMTkzLDcgKzE5Niw5IEBAIHZvaWQgQ1NTU2VsZWN0b3I6OmV4dHJhY3RQc2V1ZG9UeXBl
KCkgY28KICAgICB9IGVsc2UgaWYgKHZhbHVlID09IGZpcnN0TGluZSkgewogICAgICAgICBfcHNl
dWRvVHlwZSA9IFBzZXVkb0ZpcnN0TGluZTsKICAgICAgICAgZWxlbWVudCA9IGNvbXBhdCA9IHRy
dWU7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBmb2N1cykKKyAgICB9IGVsc2UgaWYgKHZhbHVl
ID09IGZpcnN0T2ZUeXBlKQorICAgICAgICBfcHNldWRvVHlwZSA9IFBzZXVkb0ZpcnN0T2ZUeXBl
OworICAgIGVsc2UgaWYgKHZhbHVlID09IGZvY3VzKQogICAgICAgICBfcHNldWRvVHlwZSA9IFBz
ZXVkb0ZvY3VzOwogICAgIGVsc2UgaWYgKHZhbHVlID09IGhvdmVyKQogICAgICAgICBfcHNldWRv
VHlwZSA9IFBzZXVkb0hvdmVyOwpAQCAtMjAzLDEwICsyMDgsMTQgQEAgdm9pZCBDU1NTZWxlY3Rv
cjo6ZXh0cmFjdFBzZXVkb1R5cGUoKSBjbwogICAgICAgICBfcHNldWRvVHlwZSA9IFBzZXVkb0xh
bmc7CiAgICAgZWxzZSBpZiAodmFsdWUgPT0gbGFzdENoaWxkKQogICAgICAgICBfcHNldWRvVHlw
ZSA9IFBzZXVkb0xhc3RDaGlsZDsKKyAgICBlbHNlIGlmICh2YWx1ZSA9PSBsYXN0T2ZUeXBlKQor
ICAgICAgICBfcHNldWRvVHlwZSA9IFBzZXVkb0xhc3RPZlR5cGU7CiAgICAgZWxzZSBpZiAodmFs
dWUgPT0gbm90U3RyKQogICAgICAgICBfcHNldWRvVHlwZSA9IFBzZXVkb05vdDsKICAgICBlbHNl
IGlmICh2YWx1ZSA9PSBvbmx5Q2hpbGQpCiAgICAgICAgIF9wc2V1ZG9UeXBlID0gUHNldWRvT25s
eUNoaWxkOworICAgIGVsc2UgaWYgKHZhbHVlID09IG9ubHlPZlR5cGUpCisgICAgICAgIF9wc2V1
ZG9UeXBlID0gUHNldWRvT25seU9mVHlwZTsKICAgICBlbHNlIGlmICh2YWx1ZSA9PSByb290KQog
ICAgICAgICBfcHNldWRvVHlwZSA9IFBzZXVkb1Jvb3Q7CiAgICAgZWxzZSBpZiAodmFsdWUgPT0g
c2VsZWN0aW9uKSB7CkluZGV4OiBraHRtbC9jc3MvY3NzX2Jhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzX2Jhc2UuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xOApkaWZmIC1wIC11IC1yMS4xOCBraHRtbC9jc3MvY3NzX2Jhc2UuaAotLS0g
a2h0bWwvY3NzL2Nzc19iYXNlLmgJMyBPY3QgMjAwNSAyMToxMjowNiAtMDAwMAkxLjE4CisrKyBr
aHRtbC9jc3MvY3NzX2Jhc2UuaAkxMiBPY3QgMjAwNSAxNjozMToxNCAtMDAwMApAQCAtNzcsOTcg
Kzc3LDEwMCBAQCBuYW1lc3BhY2UgRE9NIHsKICAgICAgICAgICAgICAgcHNldWRvSWQoIDAgKSwg
X3BzZXVkb1R5cGUoUHNldWRvTm90UGFyc2VkKQogICAgICAgICB7fQogICAgICAgICAKLQlDU1NT
ZWxlY3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSkKLQkgICAgOiB0YWdIaXN0b3J5KDAp
LCBzaW1wbGVTZWxlY3RvcigwKSwgbmV4dFNlbGVjdG9yKDApLCBhdHRyKGFueVFOYW1lKCkpLCB0
YWcocU5hbWUpLAorICAgICAgICBDU1NTZWxlY3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFt
ZSkKKyAgICAgICAgICAgIDogdGFnSGlzdG9yeSgwKSwgc2ltcGxlU2VsZWN0b3IoMCksIG5leHRT
ZWxlY3RvcigwKSwgYXR0cihhbnlRTmFtZSgpKSwgdGFnKHFOYW1lKSwKICAgICAgICAgICAgICAg
cmVsYXRpb24oIERlc2NlbmRhbnQgKSwgbWF0Y2goIE5vbmUgKSwKICAgICAgICAgICAgICAgcHNl
dWRvSWQoIDAgKSwgX3BzZXVkb1R5cGUoUHNldWRvTm90UGFyc2VkKQogICAgICAgICB7fQogCi0J
fkNTU1NlbGVjdG9yKCkgewotCSAgICBkZWxldGUgdGFnSGlzdG9yeTsKKyAgICAgICAgfkNTU1Nl
bGVjdG9yKCkgeworICAgICAgICAgICAgZGVsZXRlIHRhZ0hpc3Rvcnk7CiAgICAgICAgICAgICBk
ZWxldGUgc2ltcGxlU2VsZWN0b3I7CiAgICAgICAgICAgICBkZWxldGUgbmV4dFNlbGVjdG9yOwot
CX0KKyAgICAgICAgfQogCiAgICAgICAgIHZvaWQgYXBwZW5kKENTU1NlbGVjdG9yKiBuKSB7CiAg
ICAgICAgICAgICBpZiAoIW5leHRTZWxlY3RvcikgbmV4dFNlbGVjdG9yID0gbjsgZWxzZSBuZXh0
U2VsZWN0b3ItPmFwcGVuZChuKTsKICAgICAgICAgfQogICAgICAgICBDU1NTZWxlY3RvciogbmV4
dCgpIHsgcmV0dXJuIG5leHRTZWxlY3RvcjsgfQogCi0JLyoqCi0JICogUHJpbnQgZGVidWcgb3V0
cHV0IGZvciB0aGlzIHNlbGVjdG9yCi0JICovCi0Jdm9pZCBwcmludCgpOwotCi0JLyoqCi0JICog
UmUtY3JlYXRlIHNlbGVjdG9yIHRleHQgZnJvbSBzZWxlY3RvcidzIGRhdGEKLQkgKi8KLQlET01T
dHJpbmcgc2VsZWN0b3JUZXh0KCkgY29uc3Q7Ci0KLQkvLyBjaGVja3MgaWYgdGhlIDIgc2VsZWN0
b3JzIChpbmNsdWRpbmcgc3ViIHNlbGVjdG9ycykgYWdyZWUuCi0JYm9vbCBvcGVyYXRvciA9PSAo
IGNvbnN0IENTU1NlbGVjdG9yICZvdGhlciApOwotCi0JLy8gdGFnID09IC0xIG1lYW5zIGFwcGx5
IHRvIGFsbCBlbGVtZW50cyAoU2VsZWN0b3IgPSAqKQotCi0JdW5zaWduZWQgaW50IHNwZWNpZmlj
aXR5KCk7Ci0KLQkvKiBob3cgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBoYXMgdG8gbWF0Y2guLi4uIERl
ZmF1bHQgaXMgRXhhY3QgKi8KLQllbnVtIE1hdGNoCi0JewotCSAgICBOb25lID0gMCwKLQkgICAg
SWQsCisgICAgICAgIC8qKgorICAgICAgICAgKiBQcmludCBkZWJ1ZyBvdXRwdXQgZm9yIHRoaXMg
c2VsZWN0b3IKKyAgICAgICAgICovCisgICAgICAgIHZvaWQgcHJpbnQoKTsKKworICAgICAgICAv
KioKKyAgICAgICAgICogUmUtY3JlYXRlIHNlbGVjdG9yIHRleHQgZnJvbSBzZWxlY3RvcidzIGRh
dGEKKyAgICAgICAgICovCisgICAgICAgIERPTVN0cmluZyBzZWxlY3RvclRleHQoKSBjb25zdDsK
KworICAgICAgICAvLyBjaGVja3MgaWYgdGhlIDIgc2VsZWN0b3JzIChpbmNsdWRpbmcgc3ViIHNl
bGVjdG9ycykgYWdyZWUuCisgICAgICAgIGJvb2wgb3BlcmF0b3IgPT0gKCBjb25zdCBDU1NTZWxl
Y3RvciAmb3RoZXIgKTsKKworICAgICAgICAvLyB0YWcgPT0gLTEgbWVhbnMgYXBwbHkgdG8gYWxs
IGVsZW1lbnRzIChTZWxlY3RvciA9ICopCisKKyAgICAgICAgdW5zaWduZWQgaW50IHNwZWNpZmlj
aXR5KCk7CisKKyAgICAgICAgLyogaG93IHRoZSBhdHRyaWJ1dGUgdmFsdWUgaGFzIHRvIG1hdGNo
Li4uLiBEZWZhdWx0IGlzIEV4YWN0ICovCisgICAgICAgIGVudW0gTWF0Y2gKKyAgICAgICAgewor
ICAgICAgICAgICAgTm9uZSA9IDAsCisgICAgICAgICAgICBJZCwKICAgICAgICAgQ2xhc3MsCi0J
ICAgIEV4YWN0LAotCSAgICBTZXQsCi0JICAgIExpc3QsCi0JICAgIEh5cGhlbiwKLQkgICAgUHNl
dWRvQ2xhc3MsCi0JICAgIFBzZXVkb0VsZW1lbnQsCi0JICAgIENvbnRhaW4sICAgLy8gY3NzMzog
RVtmb28qPSJiYXIiXQotCSAgICBCZWdpbiwgICAgIC8vIGNzczM6IEVbZm9vXj0iYmFyIl0KLQkg
ICAgRW5kICAgICAgICAvLyBjc3MzOiBFW2ZvbyQ9ImJhciJdCi0JfTsKLQotCWVudW0gUmVsYXRp
b24KLQl7Ci0JICAgIERlc2NlbmRhbnQgPSAwLAotCSAgICBDaGlsZCwKLQkgICAgRGlyZWN0QWRq
YWNlbnQsCisgICAgICAgICAgICBFeGFjdCwKKyAgICAgICAgICAgIFNldCwKKyAgICAgICAgICAg
IExpc3QsCisgICAgICAgICAgICBIeXBoZW4sCisgICAgICAgICAgICBQc2V1ZG9DbGFzcywKKyAg
ICAgICAgICAgIFBzZXVkb0VsZW1lbnQsCisgICAgICAgICAgICBDb250YWluLCAgIC8vIGNzczM6
IEVbZm9vKj0iYmFyIl0KKyAgICAgICAgICAgIEJlZ2luLCAgICAgLy8gY3NzMzogRVtmb29ePSJi
YXIiXQorICAgICAgICAgICAgRW5kICAgICAgICAvLyBjc3MzOiBFW2ZvbyQ9ImJhciJdCisgICAg
ICAgIH07CisKKyAgICAgICAgZW51bSBSZWxhdGlvbgorICAgICAgICB7CisgICAgICAgICAgICBE
ZXNjZW5kYW50ID0gMCwKKyAgICAgICAgICAgIENoaWxkLAorICAgICAgICAgICAgRGlyZWN0QWRq
YWNlbnQsCiAgICAgICAgICAgICBJbmRpcmVjdEFkamFjZW50LAogICAgICAgICAgICAgU3ViU2Vs
ZWN0b3IKLQl9OworICAgICAgICB9OwogCi0JZW51bSBQc2V1ZG9UeXBlCi0JewotCSAgICBQc2V1
ZG9Ob3RQYXJzZWQgPSAwLAotCSAgICBQc2V1ZG9PdGhlciwKLQkgICAgUHNldWRvRW1wdHksCisg
ICAgICAgIGVudW0gUHNldWRvVHlwZQorICAgICAgICB7CisgICAgICAgICAgICBQc2V1ZG9Ob3RQ
YXJzZWQgPSAwLAorICAgICAgICAgICAgUHNldWRvT3RoZXIsCisgICAgICAgICAgICBQc2V1ZG9F
bXB0eSwKICAgICAgICAgICAgIFBzZXVkb0ZpcnN0Q2hpbGQsCisgICAgICAgICAgICBQc2V1ZG9G
aXJzdE9mVHlwZSwKICAgICAgICAgICAgIFBzZXVkb0xhc3RDaGlsZCwKKyAgICAgICAgICAgIFBz
ZXVkb0xhc3RPZlR5cGUsCiAgICAgICAgICAgICBQc2V1ZG9Pbmx5Q2hpbGQsCi0JICAgIFBzZXVk
b0ZpcnN0TGluZSwKLQkgICAgUHNldWRvRmlyc3RMZXR0ZXIsCi0JICAgIFBzZXVkb0xpbmssCi0J
ICAgIFBzZXVkb1Zpc2l0ZWQsCisgICAgICAgICAgICBQc2V1ZG9Pbmx5T2ZUeXBlLAorICAgICAg
ICAgICAgUHNldWRvRmlyc3RMaW5lLAorICAgICAgICAgICAgUHNldWRvRmlyc3RMZXR0ZXIsCisg
ICAgICAgICAgICBQc2V1ZG9MaW5rLAorICAgICAgICAgICAgUHNldWRvVmlzaXRlZCwKICAgICAg
ICAgICAgIFBzZXVkb0FueUxpbmssCi0JICAgIFBzZXVkb0hvdmVyLAotCSAgICBQc2V1ZG9EcmFn
LAotCSAgICBQc2V1ZG9Gb2N1cywKLQkgICAgUHNldWRvQWN0aXZlLAorICAgICAgICAgICAgUHNl
dWRvSG92ZXIsCisgICAgICAgICAgICBQc2V1ZG9EcmFnLAorICAgICAgICAgICAgUHNldWRvRm9j
dXMsCisgICAgICAgICAgICBQc2V1ZG9BY3RpdmUsCiAgICAgICAgICAgICBQc2V1ZG9DaGVja2Vk
LAogICAgICAgICAgICAgUHNldWRvRW5hYmxlZCwKICAgICAgICAgICAgIFBzZXVkb0Rpc2FibGVk
LAogICAgICAgICAgICAgUHNldWRvVGFyZ2V0LAotCSAgICBQc2V1ZG9CZWZvcmUsCi0JICAgIFBz
ZXVkb0FmdGVyLAorICAgICAgICAgICAgUHNldWRvQmVmb3JlLAorICAgICAgICAgICAgUHNldWRv
QWZ0ZXIsCiAgICAgICAgICAgICBQc2V1ZG9MYW5nLAogICAgICAgICAgICAgUHNldWRvTm90LAog
ICAgICAgICAgICAgUHNldWRvUm9vdCwKICAgICAgICAgICAgIFBzZXVkb1NlbGVjdGlvbgotCX07
CisgICAgICAgIH07CiAKLQlpbmxpbmUgUHNldWRvVHlwZSBwc2V1ZG9UeXBlKCkgY29uc3QKLQl7
CisgICAgICAgIGlubGluZSBQc2V1ZG9UeXBlIHBzZXVkb1R5cGUoKSBjb25zdAorICAgICAgICB7
CiAgICAgICAgICAgICBpZiAoX3BzZXVkb1R5cGUgPT0gUHNldWRvTm90UGFyc2VkKQogICAgICAg
ICAgICAgICAgIGV4dHJhY3RQc2V1ZG9UeXBlKCk7CiAgICAgICAgICAgICByZXR1cm4gX3BzZXVk
b1R5cGU7CkBAIC0xNzYsOTEgKzE3OSw5MSBAQCBuYW1lc3BhY2UgRE9NIHsKICAgICAgICAgYm9v
bCBoYXNUYWcoKSBjb25zdCB7IHJldHVybiB0YWcgIT0gYW55UU5hbWUoKTsgfQogICAgICAgICBi
b29sIGhhc0F0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIGF0dHIgIT0gYW55UU5hbWUoKTsgfQog
Ci0JbXV0YWJsZSBET006OkF0b21pY1N0cmluZyB2YWx1ZTsKLQlDU1NTZWxlY3RvciogdGFnSGlz
dG9yeTsKKyAgICAgICAgbXV0YWJsZSBET006OkF0b21pY1N0cmluZyB2YWx1ZTsKKyAgICAgICAg
Q1NTU2VsZWN0b3IqIHRhZ0hpc3Rvcnk7CiAgICAgICAgIENTU1NlbGVjdG9yKiBzaW1wbGVTZWxl
Y3RvcjsgLy8gVXNlZCBmb3IgOm5vdC4KICAgICAgICAgQ1NTU2VsZWN0b3IqIG5leHRTZWxlY3Rv
cjsgLy8gdXNlZCBmb3IgLC1jaGFpbmVkIHNlbGVjdG9ycwotCQorICAgICAgICAKICAgICAgICAg
UXVhbGlmaWVkTmFtZSBhdHRyOwogICAgICAgICBRdWFsaWZpZWROYW1lIHRhZzsKICAgICAgICAg
CiAgICAgICAgIFJlbGF0aW9uIHJlbGF0aW9uICAgICAgICAgICAgICA6IDM7Ci0JbXV0YWJsZSBN
YXRjaCAgbWF0Y2ggICAgICAgICAgIDogNDsKLQl1bnNpZ25lZCBpbnQgcHNldWRvSWQgICAgICAg
ICAgOiAzOwotCW11dGFibGUgUHNldWRvVHlwZSBfcHNldWRvVHlwZSA6IDU7CisgICAgICAgIG11
dGFibGUgTWF0Y2ggIG1hdGNoICAgICAgICAgICA6IDQ7CisgICAgICAgIHVuc2lnbmVkIGludCBw
c2V1ZG9JZCAgICAgICAgICA6IDM7CisgICAgICAgIG11dGFibGUgUHNldWRvVHlwZSBfcHNldWRv
VHlwZSA6IDU7CiAKICAgICBwcml2YXRlOgotCXZvaWQgZXh0cmFjdFBzZXVkb1R5cGUoKSBjb25z
dDsKKyAgICAgICAgdm9pZCBleHRyYWN0UHNldWRvVHlwZSgpIGNvbnN0OwogICAgIH07CiAKICAg
ICAvLyBhIHN0eWxlIGNsYXNzIHdoaWNoIGhhcyBhIHBhcmVudCAoYWxtb3N0IGFsbCBoYXZlKQog
ICAgIGNsYXNzIFN0eWxlQmFzZUltcGwgOiBwdWJsaWMga2h0bWw6OlRyZWVTaGFyZWQ8U3R5bGVC
YXNlSW1wbD4KICAgICB7CiAgICAgcHVibGljOgotCVN0eWxlQmFzZUltcGwoKSAgeyBtX3BhcmVu
dCA9IDA7IHN0cmljdFBhcnNpbmcgPSB0cnVlOyBtdWx0aUxlbmd0aCA9IGZhbHNlOyB9Ci0JU3R5
bGVCYXNlSW1wbChTdHlsZUJhc2VJbXBsICpwKSB7Ci0JICAgIG1fcGFyZW50ID0gcDsKLQkgICAg
c3RyaWN0UGFyc2luZyA9IChtX3BhcmVudCA/IG1fcGFyZW50LT51c2VTdHJpY3RQYXJzaW5nKCkg
OiB0cnVlKTsKLQkgICAgbXVsdGlMZW5ndGggPSBmYWxzZTsKLQl9CisgICAgICAgIFN0eWxlQmFz
ZUltcGwoKSAgeyBtX3BhcmVudCA9IDA7IHN0cmljdFBhcnNpbmcgPSB0cnVlOyBtdWx0aUxlbmd0
aCA9IGZhbHNlOyB9CisgICAgICAgIFN0eWxlQmFzZUltcGwoU3R5bGVCYXNlSW1wbCAqcCkgewor
ICAgICAgICAgICAgbV9wYXJlbnQgPSBwOworICAgICAgICAgICAgc3RyaWN0UGFyc2luZyA9ICht
X3BhcmVudCA/IG1fcGFyZW50LT51c2VTdHJpY3RQYXJzaW5nKCkgOiB0cnVlKTsKKyAgICAgICAg
ICAgIG11bHRpTGVuZ3RoID0gZmFsc2U7CisgICAgICAgIH0KIAotCXZpcnR1YWwgflN0eWxlQmFz
ZUltcGwoKSB7fQorICAgICAgICB2aXJ0dWFsIH5TdHlsZUJhc2VJbXBsKCkge30KIAotCS8vIHJl
dHVybnMgdGhlIHVybCBvZiB0aGUgc3R5bGUgc2hlZXQgdGhpcyBvYmplY3QgYmVsb25ncyB0bwot
CURPTVN0cmluZyBiYXNlVVJMKCk7CisgICAgICAgIC8vIHJldHVybnMgdGhlIHVybCBvZiB0aGUg
c3R5bGUgc2hlZXQgdGhpcyBvYmplY3QgYmVsb25ncyB0bworICAgICAgICBET01TdHJpbmcgYmFz
ZVVSTCgpOwogCi0JdmlydHVhbCBib29sIGlzU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0JdmlydHVhbCBib29sIGlzQ1NTU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDU1NTdHlsZVNoZWV0KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzWFNMU3R5bGVTaGVldCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0JdmlydHVhbCBib29sIGlzU3R5bGVTaGVldExpc3Qo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCXZpcnR1YWwgYm9vbCBpc01lZGlhTGlzdCgpIHsg
cmV0dXJuIGZhbHNlOyB9Ci0JdmlydHVhbCBib29sIGlzUnVsZUxpc3QoKSB7IHJldHVybiBmYWxz
ZTsgfQotCXZpcnR1YWwgYm9vbCBpc1J1bGUoKSB7IHJldHVybiBmYWxzZTsgfQotCXZpcnR1YWwg
Ym9vbCBpc1N0eWxlUnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0JdmlydHVhbCBib29sIGlzQ2hh
cmV0UnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0JdmlydHVhbCBib29sIGlzSW1wb3J0UnVsZSgp
IHsgcmV0dXJuIGZhbHNlOyB9Ci0JdmlydHVhbCBib29sIGlzTWVkaWFSdWxlKCkgeyByZXR1cm4g
ZmFsc2U7IH0KLQl2aXJ0dWFsIGJvb2wgaXNGb250RmFjZVJ1bGUoKSB7IHJldHVybiBmYWxzZTsg
fQotCXZpcnR1YWwgYm9vbCBpc1BhZ2VSdWxlKCkgeyByZXR1cm4gZmFsc2U7IH0KLQl2aXJ0dWFs
IGJvb2wgaXNVbmtub3duUnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0JdmlydHVhbCBib29sIGlz
U3R5bGVEZWNsYXJhdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9Ci0JdmlydHVhbCBib29sIGlzVmFs
dWUoKSB7IHJldHVybiBmYWxzZTsgfQotCXZpcnR1YWwgYm9vbCBpc1ByaW1pdGl2ZVZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQl2aXJ0dWFsIGJvb2wgaXNWYWx1ZUxpc3QoKSB7IHJl
dHVybiBmYWxzZTsgfQotCXZpcnR1YWwgYm9vbCBpc1ZhbHVlQ3VzdG9tKCkgeyByZXR1cm4gZmFs
c2U7IH0KLQotCXZvaWQgc2V0UGFyZW50KFN0eWxlQmFzZUltcGwgKnBhcmVudCkgeyBtX3BhcmVu
dCA9IHBhcmVudDsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZVNoZWV0TGlzdCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhTGlzdCgp
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1J1bGVMaXN0KCkgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGlzUnVsZSgpIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlUnVsZSgpIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0NoYXJldFJ1bGUoKSB7IHJldHVybiBmYWxzZTsg
fQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNJbXBvcnRSdWxlKCkgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICAgICAgdmlydHVhbCBib29sIGlzTWVkaWFSdWxlKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICAgICAgdmlydHVhbCBib29sIGlzRm9udEZhY2VSdWxlKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICAgICAgdmlydHVhbCBib29sIGlzUGFnZVJ1bGUoKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNVbmtub3duUnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAg
IHZpcnR1YWwgYm9vbCBpc1N0eWxlRGVjbGFyYXRpb24oKSB7IHJldHVybiBmYWxzZTsgfQorICAg
ICAgICB2aXJ0dWFsIGJvb2wgaXNWYWx1ZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZp
cnR1YWwgYm9vbCBpc1ByaW1pdGl2ZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICAgICAgdmlydHVhbCBib29sIGlzVmFsdWVMaXN0KCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAg
ICAgdmlydHVhbCBib29sIGlzVmFsdWVDdXN0b20oKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAg
ICAgIHZvaWQgc2V0UGFyZW50KFN0eWxlQmFzZUltcGwgKnBhcmVudCkgeyBtX3BhcmVudCA9IHBh
cmVudDsgfQogCi0JdmlydHVhbCBib29sIHBhcnNlU3RyaW5nKGNvbnN0IERPTVN0cmluZyAmLypj
c3NTdHJpbmcqLywgYm9vbCA9IGZhbHNlKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0
dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgRE9NU3RyaW5nICYvKmNzc1N0cmluZyovLCBib29s
ID0gZmFsc2UpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLQl2aXJ0dWFsIHZvaWQgY2hlY2tMb2FkZWQo
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNoZWNrTG9hZGVkKCk7CiAKLQl2b2lkIHNldFN0cmlj
dFBhcnNpbmcoIGJvb2wgYiApIHsgc3RyaWN0UGFyc2luZyA9IGI7IH0KLQlib29sIHVzZVN0cmlj
dFBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBzdHJpY3RQYXJzaW5nOyB9CisgICAgICAgIHZvaWQg
c2V0U3RyaWN0UGFyc2luZyggYm9vbCBiICkgeyBzdHJpY3RQYXJzaW5nID0gYjsgfQorICAgICAg
ICBib29sIHVzZVN0cmljdFBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBzdHJpY3RQYXJzaW5nOyB9
CiAKLQlTdHlsZVNoZWV0SW1wbCogc3R5bGVzaGVldCgpOworICAgICAgICBTdHlsZVNoZWV0SW1w
bCogc3R5bGVzaGVldCgpOwogCiAgICAgcHJvdGVjdGVkOgotCWJvb2wgc3RyaWN0UGFyc2luZyA6
IDE7Ci0JYm9vbCBtdWx0aUxlbmd0aCA6IDE7CisgICAgICAgIGJvb2wgc3RyaWN0UGFyc2luZyA6
IDE7CisgICAgICAgIGJvb2wgbXVsdGlMZW5ndGggOiAxOwogICAgIH07CiAKICAgICAvLyBhIHN0
eWxlIGNsYXNzIHdoaWNoIGhhcyBhIGxpc3Qgb2YgY2hpbGRyZW4gKFN0eWxlU2hlZXRzIGZvciBl
eGFtcGxlKQogICAgIGNsYXNzIFN0eWxlTGlzdEltcGwgOiBwdWJsaWMgU3R5bGVCYXNlSW1wbAog
ICAgIHsKICAgICBwdWJsaWM6Ci0JU3R5bGVMaXN0SW1wbCgpIDogU3R5bGVCYXNlSW1wbCgpIHsg
bV9sc3RDaGlsZHJlbiA9IDA7IH0KLQlTdHlsZUxpc3RJbXBsKFN0eWxlQmFzZUltcGwgKnBhcmVu
dCkgOiBTdHlsZUJhc2VJbXBsKHBhcmVudCkgeyBtX2xzdENoaWxkcmVuID0gMDsgfQorICAgICAg
ICBTdHlsZUxpc3RJbXBsKCkgOiBTdHlsZUJhc2VJbXBsKCkgeyBtX2xzdENoaWxkcmVuID0gMDsg
fQorICAgICAgICBTdHlsZUxpc3RJbXBsKFN0eWxlQmFzZUltcGwgKnBhcmVudCkgOiBTdHlsZUJh
c2VJbXBsKHBhcmVudCkgeyBtX2xzdENoaWxkcmVuID0gMDsgfQogCi0JdmlydHVhbCB+U3R5bGVM
aXN0SW1wbCgpOworICAgICAgICB2aXJ0dWFsIH5TdHlsZUxpc3RJbXBsKCk7CiAKLQl1bnNpZ25l
ZCBsZW5ndGgoKSB7IHJldHVybiBtX2xzdENoaWxkcmVuLT5jb3VudCgpOyB9Ci0JU3R5bGVCYXNl
SW1wbCAqaXRlbSh1bnNpZ25lZCBudW0pIHsgcmV0dXJuIG1fbHN0Q2hpbGRyZW4tPmF0KG51bSk7
IH0KKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9sc3RDaGlsZHJlbi0+Y291
bnQoKTsgfQorICAgICAgICBTdHlsZUJhc2VJbXBsICppdGVtKHVuc2lnbmVkIG51bSkgeyByZXR1
cm4gbV9sc3RDaGlsZHJlbi0+YXQobnVtKTsgfQogCi0Jdm9pZCBhcHBlbmQoU3R5bGVCYXNlSW1w
bCAqaXRlbSkgeyBtX2xzdENoaWxkcmVuLT5hcHBlbmQoaXRlbSk7IH0KKyAgICAgICAgdm9pZCBh
cHBlbmQoU3R5bGVCYXNlSW1wbCAqaXRlbSkgeyBtX2xzdENoaWxkcmVuLT5hcHBlbmQoaXRlbSk7
IH0KIAogICAgIHByb3RlY3RlZDoKLQlRUHRyTGlzdDxTdHlsZUJhc2VJbXBsPiAqbV9sc3RDaGls
ZHJlbjsKKyAgICAgICAgUVB0ckxpc3Q8U3R5bGVCYXNlSW1wbD4gKm1fbHN0Q2hpbGRyZW47CiAg
ICAgfTsKIAogICAgIGludCBnZXRQcm9wZXJ0eUlEKGNvbnN0IGNoYXIgKnRhZ1N0ciwgaW50IGxl
bik7CkluZGV4OiBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjIwOQpkaWZmIC1wIC11IC1yMS4yMDkga2h0bWwvY3NzL2Nz
c3N0eWxlc2VsZWN0b3IuY3BwCi0tLSBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAJMyBP
Y3QgMjAwNSAyMToxMjowNyAtMDAwMAkxLjIwOQorKysga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0
b3IuY3BwCTEyIE9jdCAyMDA1IDE2OjMxOjE4IC0wMDAwCkBAIC0xMDQ4LDcgKzEwNDgsNyBAQCBi
b29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3IoQ1NTCiAgICAgICAgICAgICBib29s
IGZvdW5kID0gZmFsc2U7CiAgICAgICAgICAgICB3aGlsZSghZm91bmQpCiAgICAgICAgICAgICB7
Ci0JCW4gPSBuLT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICAgICAgbiA9IG4tPnBhcmVudE5v
ZGUoKTsKICAgICAgICAgICAgICAgICBpZighbiB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKSByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgRWxlbWVudEltcGwgKmVsZW0gPSBzdGF0aWNfY2Fz
dDxFbGVtZW50SW1wbCAqPihuKTsKICAgICAgICAgICAgICAgICBpZiAoY2hlY2tPbmVTZWxlY3Rv
cihzZWwsIGVsZW0pKSBmb3VuZCA9IHRydWU7CkBAIC0xMDkxLDcgKzEwOTEsNyBAQCBib29sIENT
U1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3IoQ1NTCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yOgotCXsKKyAgICAg
ICB7CiAgICAgICAgICAgICBpZiAob25seUhvdmVyQWN0aXZlKQogICAgICAgICAgICAgICAgIG9u
bHlIb3ZlckFjdGl2ZSA9IChzZWwtPm1hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyAm
JgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsLT5wc2V1ZG9UeXBlKCkg
PT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyIHx8CkBAIC0xMTA1LDcgKzExMDUsNyBAQCBib29s
IENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3IoQ1NTCiAJICAgIGlmICghY2hlY2tPbmVT
ZWxlY3RvcihzZWwsIGVsZW0pKSByZXR1cm4gZmFsc2U7CiAJICAgIC8va2REZWJ1ZygpIDw8ICJD
U1NPcmRlcmVkUnVsZTo6Y2hlY2tTZWxlY3RvcjogcGFzc2VkIiA8PCBlbmRsOwogCSAgICBicmVh
azsKLQl9CisgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZWxhdGlvbiA9IHNlbC0+cmVs
YXRpb247CiAgICAgfQpAQCAtMTI1OSw0NiArMTI1OSw5MyBAQCBib29sIENTU1N0eWxlU2VsZWN0
b3I6OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgewogICAgICAgICAvLyBQc2V1ZG8gZWxlbWVudHMu
IFdlIG5lZWQgdG8gY2hlY2sgZmlyc3QgY2hpbGQgaGVyZS4gTm8gZHluYW1pYyBwc2V1ZG8KICAg
ICAgICAgLy8gZWxlbWVudHMgZm9yIHRoZSBtb21lbnQKLS8vCWtkRGVidWcoKSA8PCAiQ1NTT3Jk
ZXJlZFJ1bGU6OnBzZXVkbyAiIDw8IHZhbHVlIDw8IGVuZGw7Ci0JICAgIHN3aXRjaCAoc2VsLT5w
c2V1ZG9UeXBlKCkpIHsKLQkgICAgICAgIC8vIFBzZXVkbyBjbGFzc2VzOgorLy8gICAgICAgIGtk
RGVidWcoKSA8PCAiQ1NTT3JkZXJlZFJ1bGU6OnBzZXVkbyAiIDw8IHZhbHVlIDw8IGVuZGw7Cisg
ICAgICAgICAgICBzd2l0Y2ggKHNlbC0+cHNldWRvVHlwZSgpKSB7CisgICAgICAgICAgICAgICAg
Ly8gUHNldWRvIGNsYXNzZXM6CiAgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9F
bXB0eToKICAgICAgICAgICAgICAgICBpZiAoIWUtPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdENoaWxkOiB7CiAgICAgICAgICAgICAgICAg
Ly8gZmlyc3QtY2hpbGQgbWF0Y2hlcyB0aGUgZmlyc3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50
IQotICAgICAgICAgICAgICAgIGlmIChlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgTm9kZUltcGwqIG4gPSBlLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKCBuICYmICFuLT5pc0VsZW1lbnROb2RlKCkgKQorICAgICAgICAgICAgICAg
IGlmIChlLT5wYXJlbnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1lbnROb2RlKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwgKm4gPSBlLT5wcmV2aW91c1NpYmxpbmco
KTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhbiApCisgICAgICAgICAgICAgICAgICAgIGlmICghbikKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0ZpcnN0T2ZUeXBlOiB7CisgICAgICAgICAgICAgICAgLy8gZmlyc3Qt
b2YtdHlwZSBtYXRjaGVzIHRoZSBmaXJzdCBlbGVtZW50IG9mIGl0cyB0eXBlIQorICAgICAgICAg
ICAgICAgIGlmIChlLT5wYXJlbnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1lbnRO
b2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9
IGUtPnRhZ05hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwgKm4gPSBlLT5wcmV2
aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxl
bWVudEltcGwqPihuKS0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxp
bmcoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIW4p
CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9MYXN0Q2hpbGQ6IHsKICAgICAgICAgICAgICAgICAvLyBsYXN0
LWNoaWxkIG1hdGNoZXMgdGhlIGxhc3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50IQotICAgICAg
ICAgICAgICAgIGlmIChlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgTm9k
ZUltcGwqIG4gPSBlLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAo
IG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSApCisgICAgICAgICAgICAgICAgaWYgKGUtPnBhcmVu
dE5vZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAg
ICAgICAgICAgICBOb2RlSW1wbCAqbiA9IGUtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAh
biApCisgICAgICAgICAgICAgICAgICAgIGlmICghbikKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xhc3RP
ZlR5cGU6IHsKKyAgICAgICAgICAgICAgICAvLyBsYXN0LW9mLXR5cGUgbWF0Y2hlcyB0aGUgbGFz
dCBlbGVtZW50IG9mIGl0cyB0eXBlIQorICAgICAgICAgICAgICAgIGlmIChlLT5wYXJlbnROb2Rl
KCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGUtPnRhZ05hbWUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZUltcGwgKm4gPSBlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAobikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzRWxl
bWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pLT5oYXNUYWdOYW1lKHR5
cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFuKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT25seUNoaWxkOiB7
CiAgICAgICAgICAgICAgICAgLy8gSWYgYm90aCBmaXJzdC1jaGlsZCBhbmQgbGFzdC1jaGlsZCBh
cHBseSwgdGhlbiBvbmx5LWNoaWxkIGFwcGxpZXMuCi0gICAgICAgICAgICAgICAgaWYgKGUtPnBh
cmVudE5vZGUoKSkgewotICAgICAgICAgICAgICAgICAgICBOb2RlSW1wbCogbiA9IGUtPnByZXZp
b3VzU2libGluZygpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIG4gJiYgIW4tPmlzRWxl
bWVudE5vZGUoKSApCisgICAgICAgICAgICAgICAgaWYgKGUtPnBhcmVudE5vZGUoKSAmJiBlLT5w
YXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgICAgICAgICBOb2Rl
SW1wbCAqbiA9IGUtPnByZXZpb3VzU2libGluZygpOworICAgICAgICAgICAgICAgICAgICB3aGls
ZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbiA9
IG4tPnByZXZpb3VzU2libGluZygpOworICAgICAgICAgICAgICAgICAgICBpZiAoIW4pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG4gPSBlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKG4gJiYgIW4tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb09ubHlPZlR5cGU6IHsKKyAgICAgICAgICAgICAgICAvLyBJZiBib3RoIGZpcnN0LW9mLXR5
cGUgYW5kIGxhc3Qtb2YtdHlwZSBhcHBseSwgdGhlbiBvbmx5LW9mLXR5cGUgYXBwbGllcy4KKyAg
ICAgICAgICAgICAgICBpZiAoZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNF
bGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUm
IHR5cGUgPSBlLT50YWdOYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGVJbXBsICpuID0g
ZS0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuICYmICFz
dGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pLT5oYXNUYWdOYW1lKHR5cGUpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoICFuICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW4pIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIG4gPSBlLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKCBuICYmICFuLT5pc0VsZW1lbnROb2RlKCkgKQorICAgICAgICAgICAgICAg
ICAgICAgICAgd2hpbGUgKG4gJiYgIXN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obiktPmhhc1Rh
Z05hbWUodHlwZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJs
aW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFuICkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTEzMTUsMTUg
KzEzNjIsMTUgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xpbms6Ci0gICAgICAgICAgICAgICAg
aWYgKCBwc2V1ZG9TdGF0ZSA9PSBQc2V1ZG9Vbmtub3duIHx8IHBzZXVkb1N0YXRlID09IFBzZXVk
b0FueUxpbmsgKQotICAgICAgICAgICAgICAgICAgICBjaGVja1BzZXVkb1N0YXRlKCBlICk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCBwc2V1ZG9TdGF0ZSA9PSBQc2V1ZG9MaW5rICkKKyAgICAgICAg
ICAgICAgICBpZiAocHNldWRvU3RhdGUgPT0gUHNldWRvVW5rbm93biB8fCBwc2V1ZG9TdGF0ZSA9
PSBQc2V1ZG9BbnlMaW5rKQorICAgICAgICAgICAgICAgICAgICBjaGVja1BzZXVkb1N0YXRlKGUp
OworICAgICAgICAgICAgICAgIGlmIChwc2V1ZG9TdGF0ZSA9PSBQc2V1ZG9MaW5rKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQ6Ci0gICAgICAgICAgICAgICAg
aWYgKCBwc2V1ZG9TdGF0ZSA9PSBQc2V1ZG9Vbmtub3duIHx8IHBzZXVkb1N0YXRlID09IFBzZXVk
b0FueUxpbmsgKQotICAgICAgICAgICAgICAgICAgICBjaGVja1BzZXVkb1N0YXRlKCBlICk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCBwc2V1ZG9TdGF0ZSA9PSBQc2V1ZG9WaXNpdGVkICkKKyAgICAg
ICAgICAgICAgICBpZiAocHNldWRvU3RhdGUgPT0gUHNldWRvVW5rbm93biB8fCBwc2V1ZG9TdGF0
ZSA9PSBQc2V1ZG9BbnlMaW5rKQorICAgICAgICAgICAgICAgICAgICBjaGVja1BzZXVkb1N0YXRl
KGUpOworICAgICAgICAgICAgICAgIGlmIChwc2V1ZG9TdGF0ZSA9PSBQc2V1ZG9WaXNpdGVkKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyOiB7CkBAIC0xNDExLDEz
ICsxNDU4LDEzIEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tPbmVTZWxlY3RvcigKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgLy8gUHNldWRvLWVsZW1lbnRzOgogICAgICAgICAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RMaW5lOgotICAgICAgICAgICAgICAgIGlmICgg
c3ViamVjdCApIHsKKyAgICAgICAgICAgICAgICBpZiAoc3ViamVjdCkgewogICAgICAgICAgICAg
ICAgICAgICBkeW5hbWljUHNldWRvPVJlbmRlclN0eWxlOjpGSVJTVF9MSU5FOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdExldHRl
cjoKLSAgICAgICAgICAgICAgICBpZiAoIHN1YmplY3QgKSB7CisgICAgICAgICAgICAgICAgaWYg
KHN1YmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAgZHluYW1pY1BzZXVkbz1SZW5kZXJTdHls
ZTo6RklSU1RfTEVUVEVSOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgICAgICB9CkBAIC0xNDM2LDcgKzE0ODMsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6
OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotCSAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vICMjIyBhZGQgdGhlIHJlc3Qgb2YgdGhl
IGNoZWNrcy4uLgogICAgIHJldHVybiB0cnVlOwo=
</data>
<flag name="review"
          id="736"
          type_id="1"
          status="-"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>