<?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>4557</bug_id>
          
          <creation_ts>2005-08-21 09:52:51 -0700</creation_ts>
          <short_desc>rename unusual strcmp and strcasecmp for DOMString family</short_desc>
          <delta_ts>2019-02-06 09:02:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>cdumez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>17049</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-21 09:52:51 -0700</bug_when>
    <thetext>I&apos;m going to attach a patch with some DOMString and AtomicString improvements. Here are some of 
what&apos;s included:

    1) rename the unwieldy implementation() to impl()
    2) make more member functions inline
    3) remove the strange &quot;strcmp&quot; functions that return booleans
    4) replace the strange &quot;strcasecmp&quot; with &quot;equalsIgnoringCase&quot;
    5) add features so you can lowercase a string as it&apos;s created -- in the case of AtomicString, it can be 
done without copying the string</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17051</commentid>
    <comment_count>1</comment_count>
      <attachid>3492</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-21 09:53:38 -0700</bug_when>
    <thetext>Created attachment 3492
patch with the abovementioned changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17098</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-08-22 01:57:01 -0700</bug_when>
    <thetext>Just FYI... KDOM just went through and changed DOMString::implementation() to DOMString::handle()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17127</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-22 08:50:36 -0700</bug_when>
    <thetext>Given that the name of the class is DOMStringImpl I think impl() is a better name than handle(), but I could 
be convinced otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17824</commentid>
    <comment_count>4</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-08-28 19:07:48 -0700</bug_when>
    <thetext>impl() is a better name than handle(). It would be much nicer if these changes could be split into 
independent patches, especially the mechanical but huge implementation()/impl() converstion. I&apos;m willing 
to rubber-stamp a global search-and-replace to do that by itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18750</commentid>
    <comment_count>5</comment_count>
      <attachid>3769</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-05 10:59:58 -0700</bug_when>
    <thetext>Created attachment 3769
new patch, updated for today&apos;s TOT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18751</commentid>
    <comment_count>6</comment_count>
      <attachid>3770</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-05 11:04:16 -0700</bug_when>
    <thetext>Created attachment 3770
refined a tiny bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18758</commentid>
    <comment_count>7</comment_count>
      <attachid>3771</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-05 11:18:05 -0700</bug_when>
    <thetext>Created attachment 3771
uploading it again (fixed a mistake: sorry for the multiple copies)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18808</commentid>
    <comment_count>8</comment_count>
      <attachid>3786</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-06 09:05:51 -0700</bug_when>
    <thetext>Created attachment 3786
patch that just fixes a function mistakenly renamed to qstring()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18809</commentid>
    <comment_count>9</comment_count>
      <attachid>3786</attachid>
    <who name="John Sullivan">sullivan</who>
    <bug_when>2005-09-06 09:13:55 -0700</bug_when>
    <thetext>Comment on attachment 3786
patch that just fixes a function mistakenly renamed to qstring()

What does removing XMLElementImpl::XMLElementImpl have to do with the rest of
this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18811</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-06 09:26:03 -0700</bug_when>
    <thetext>Nothing.

That&apos;s just commented-out unused code that should be removed no matter what.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19325</commentid>
    <comment_count>11</comment_count>
      <attachid>3786</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-09-10 20:58:38 -0700</bug_when>
    <thetext>Comment on attachment 3786
patch that just fixes a function mistakenly renamed to qstring()

Simple patch.  Looks fine to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19329</commentid>
    <comment_count>12</comment_count>
      <attachid>3786</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-10 22:16:18 -0700</bug_when>
    <thetext>Comment on attachment 3786
patch that just fixes a function mistakenly renamed to qstring()

I landed this patch, so I think I&apos;ll take the review flag off it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27187</commentid>
    <comment_count>13</comment_count>
      <attachid>5361</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-12-29 17:54:28 -0800</bug_when>
    <thetext>Created attachment 5361
eliminate strcmp, and replace strcasecmp with equalIgnoringCase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27203</commentid>
    <comment_count>14</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-12-29 20:18:09 -0800</bug_when>
    <thetext>Mostly looks good, though I&apos;m not sure about adding new public constructors to DOMStringImpl without 
implementing them yet:

&gt; +    DOMStringImpl(const QChar*, unsigned length, Lowercased);
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27230</commentid>
    <comment_count>15</comment_count>
      <attachid>5361</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-12-30 02:16:09 -0800</bug_when>
    <thetext>Comment on attachment 5361
eliminate strcmp, and replace strcasecmp with equalIgnoringCase

r=me but please consider the comment above. Also, perhaps ALLOC_QCHAR_VEC and
DELETE_QCHAR_VEC could be given normal looking function names now, as long as
you are renaming them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27253</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-12-30 11:41:18 -0800</bug_when>
    <thetext>Making Maciej&apos;s requested changes and landing the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502839</commentid>
    <comment_count>17</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:02:46 -0800</bug_when>
    <thetext>Mass moving XML DOM bugs to the &quot;DOM&quot; Component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3492</attachid>
            <date>2005-08-21 09:53:38 -0700</date>
            <delta_ts>2005-09-05 11:04:16 -0700</delta_ts>
            <desc>patch with the abovementioned changes</desc>
            <filename>StringPatch.txt</filename>
            <type>text/plain</type>
            <size>208805</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2todG1sX3BhcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2todG1sX3BhcnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMz
NApkaWZmIC1wIC11IC1yMS4zMzQga2h0bWwva2h0bWxfcGFydC5jcHAKLS0tIGtodG1sL2todG1s
X3BhcnQuY3BwCTE0IEF1ZyAyMDA1IDA5OjEyOjQzIC0wMDAwCTEuMzM0CisrKyBraHRtbC9raHRt
bF9wYXJ0LmNwcAkyMSBBdWcgMjAwNSAxNjo1MDo1MCAtMDAwMApAQCAtMjM3MSw3ICsyMzcxLDcg
QEAgYm9vbCBLSFRNTFBhcnQ6OmZpbmRUZXh0TmV4dCggY29uc3QgUVN0cgogICAgICAgICBpZigg
KGQtPm1fZmluZE5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RFIHx8IGQtPm1fZmlu
ZE5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFKSAmJiBkLT5tX2Zp
bmROb2RlLT5yZW5kZXJlcigpICkKICAgICAgICAgewogICAgICAgICAgICAgRE9NU3RyaW5nIG5v
ZGVUZXh0ID0gZC0+bV9maW5kTm9kZS0+bm9kZVZhbHVlKCk7Ci0gICAgICAgICAgICBET01TdHJp
bmdJbXBsICp0ID0gbm9kZVRleHQuaW1wbGVtZW50YXRpb24oKTsKKyAgICAgICAgICAgIERPTVN0
cmluZ0ltcGwgKnQgPSBub2RlVGV4dC5pbXBsKCk7CiAgICAgICAgICAgICBRQ29uc3RTdHJpbmcg
cyh0LT5zLCB0LT5sKTsKIAogICAgICAgICAgICAgaW50IG1hdGNoTGVuID0gMDsKQEAgLTU2NDUs
NyArNTY0NSw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZVN0YXRlKENTU011dGFibGVTdHlsZUQKICAg
ICAgICAgaW50IHByb3BlcnR5SUQgPSAoKml0KS5pZCgpOwogICAgICAgICBET01TdHJpbmcgZGVz
aXJlZFByb3BlcnR5ID0gZGVzaXJlZFN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQp
OwogICAgICAgICBET01TdHJpbmcgY29tcHV0ZWRQcm9wZXJ0eSA9IGNvbXB1dGVkU3R5bGUtPmdl
dFByb3BlcnR5VmFsdWUocHJvcGVydHlJRCk7Ci0gICAgICAgIEtIVE1MUGFydDo6VHJpU3RhdGUg
cHJvcGVydHlTdGF0ZSA9IHN0cmNhc2VjbXAoZGVzaXJlZFByb3BlcnR5LCBjb21wdXRlZFByb3Bl
cnR5KSA9PSAwCisgICAgICAgIEtIVE1MUGFydDo6VHJpU3RhdGUgcHJvcGVydHlTdGF0ZSA9IGVx
dWFsc0lnbm9yaW5nQ2FzZShkZXNpcmVkUHJvcGVydHksIGNvbXB1dGVkUHJvcGVydHkpCiAgICAg
ICAgICAgICA/IEtIVE1MUGFydDo6dHJ1ZVRyaVN0YXRlIDogS0hUTUxQYXJ0OjpmYWxzZVRyaVN0
YXRlOwogICAgICAgICBpZiAoYXRTdGFydCkgewogICAgICAgICAgICAgc3RhdGUgPSBwcm9wZXJ0
eVN0YXRlOwpAQCAtNTcxNCw3ICs1NzE0LDcgQEAgYm9vbCBLSFRNTFBhcnQ6OnNlbGVjdGlvblN0
YXJ0SGFzU3R5bGUoQwogICAgICAgICBpbnQgcHJvcGVydHlJRCA9ICgqaXQpLmlkKCk7CiAgICAg
ICAgIERPTVN0cmluZyBkZXNpcmVkUHJvcGVydHkgPSBtdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5
VmFsdWUocHJvcGVydHlJRCk7CiAgICAgICAgIERPTVN0cmluZyBzZWxlY3Rpb25Qcm9wZXJ0eSA9
IHNlbGVjdGlvblN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOwotICAgICAgICBp
ZiAoc3RyY2FzZWNtcChzZWxlY3Rpb25Qcm9wZXJ0eSwgZGVzaXJlZFByb3BlcnR5KSAhPSAwKSB7
CisgICAgICAgIGlmIChlcXVhbHNJZ25vcmluZ0Nhc2Uoc2VsZWN0aW9uUHJvcGVydHksIGRlc2ly
ZWRQcm9wZXJ0eSkpIHsKICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQpAQCAtNTc3NSw3ICs1Nzc1LDcgQEAgQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uSW1wbCAqS0hUTUxQYQogCiAgICAgICAgIHN0eWxlRWxlbWVudC0+cmVmKCk7CiAg
ICAgICAgIAotICAgICAgICBzdHlsZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsIGQt
Pm1fdHlwaW5nU3R5bGUtPmNzc1RleHQoKS5pbXBsZW1lbnRhdGlvbigpLCBleGNlcHRpb25Db2Rl
KTsKKyAgICAgICAgc3R5bGVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBkLT5tX3R5
cGluZ1N0eWxlLT5jc3NUZXh0KCkuaW1wbCgpLCBleGNlcHRpb25Db2RlKTsKICAgICAgICAgYXNz
ZXJ0KGV4Y2VwdGlvbkNvZGUgPT0gMCk7CiAgICAgICAgIAogICAgICAgICBUZXh0SW1wbCAqdGV4
dCA9IHhtbERvY0ltcGwoKS0+Y3JlYXRlRWRpdGluZ1RleHROb2RlKCIiKTsKSW5kZXg6IGtodG1s
L2Nzcy9jc3NfdmFsdWVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9jc3MvY3NzX3ZhbHVlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NzMKZGlmZiAtcCAtdSAtcjEuNzMga2h0bWwvY3NzL2Nzc192YWx1ZWltcGwuY3BwCi0tLSBraHRt
bC9jc3MvY3NzX3ZhbHVlaW1wbC5jcHAJNiBBdWcgMjAwNSAxNjozMzowMiAtMDAwMAkxLjczCisr
KyBraHRtbC9jc3MvY3NzX3ZhbHVlaW1wbC5jcHAJMjEgQXVnIDIwMDUgMTY6NTA6NTYgLTAwMDAK
QEAgLTc2NSw3ICs3NjUsNyBAQCBDU1NQcmltaXRpdmVWYWx1ZUltcGw6OkNTU1ByaW1pdGl2ZVZh
bHVlCiAKIENTU1ByaW1pdGl2ZVZhbHVlSW1wbDo6Q1NTUHJpbWl0aXZlVmFsdWVJbXBsKGNvbnN0
IERPTVN0cmluZyAmc3RyLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHR5cGUpCiB7Ci0g
ICAgbV92YWx1ZS5zdHJpbmcgPSBzdHIuaW1wbGVtZW50YXRpb24oKTsKKyAgICBtX3ZhbHVlLnN0
cmluZyA9IHN0ci5pbXBsKCk7CiAgICAgaWYobV92YWx1ZS5zdHJpbmcpIG1fdmFsdWUuc3RyaW5n
LT5yZWYoKTsKICAgICBtX3R5cGUgPSB0eXBlOwogfQpAQCAtOTQxLDcgKzk0MSw3IEBAIHZvaWQg
Q1NTUHJpbWl0aXZlVmFsdWVJbXBsOjpzZXRTdHJpbmdWYWwKICAgICB9CiAgICAgaWYoc3RyaW5n
VHlwZSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQogICAgIHsKLQltX3ZhbHVlLnN0
cmluZyA9IHN0cmluZ1ZhbHVlLmltcGxlbWVudGF0aW9uKCk7CisJbV92YWx1ZS5zdHJpbmcgPSBz
dHJpbmdWYWx1ZS5pbXBsKCk7CiAJbV92YWx1ZS5zdHJpbmctPnJlZigpOwogCW1fdHlwZSA9IHN0
cmluZ1R5cGU7CiAgICAgfQpJbmRleDoga2h0bWwvY3NzL2Nzc2hlbHBlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc2hlbHBlci5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC1wIC11IC1yMS43IGtodG1sL2Nzcy9jc3NoZWxw
ZXIuY3BwCi0tLSBraHRtbC9jc3MvY3NzaGVscGVyLmNwcAkxNSBBcHIgMjAwMiAyMzo0MTozOCAt
MDAwMAkxLjcKKysrIGtodG1sL2Nzcy9jc3NoZWxwZXIuY3BwCTIxIEF1ZyAyMDA1IDE2OjUwOjU3
IC0wMDAwCkBAIC00NCw3ICs0NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIAogRE9NU3Ry
aW5nIGtodG1sOjpwYXJzZVVSTChjb25zdCBET01TdHJpbmcgJnVybCkKIHsKLSAgICBET01TdHJp
bmdJbXBsKiBpID0gdXJsLmltcGxlbWVudGF0aW9uKCk7CisgICAgRE9NU3RyaW5nSW1wbCogaSA9
IHVybC5pbXBsKCk7CiAgICAgaWYoIWkpIHJldHVybiBET01TdHJpbmcoKTsKIAogICAgIGludCBv
ID0gMDsKSW5kZXg6IGtodG1sL2Nzcy9jc3NwYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzcGFyc2VyLmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMzEKZGlmZiAtcCAtdSAtcjEuMzEga2h0bWwvY3NzL2Nzc3BhcnNlci5oCi0tLSBraHRt
bC9jc3MvY3NzcGFyc2VyLmgJOSBKdWwgMjAwNSAyMDoxOTowMCAtMDAwMAkxLjMxCisrKyBraHRt
bC9jc3MvY3NzcGFyc2VyLmgJMjEgQXVnIDIwMDUgMTY6NTA6NTkgLTAwMDAKQEAgLTc2LDkgKzc2
LDEwIEBAIG5hbWVzcGFjZSBET00gewogICAgIHN0YXRpYyBpbmxpbmUgRE9NU3RyaW5nIGRvbVN0
cmluZyggY29uc3QgUGFyc2VTdHJpbmcgJnBzICkgewogCXJldHVybiBET01TdHJpbmcoIChRQ2hh
ciAqKXBzLnN0cmluZywgcHMubGVuZ3RoICk7CiAgICAgfQotICAgIHN0YXRpYyBpbmxpbmUgQXRv
bWljU3RyaW5nIGF0b21pY1N0cmluZyggY29uc3QgUGFyc2VTdHJpbmcgJnBzICkgewotCXJldHVy
biBBdG9taWNTdHJpbmcoIHBzLnN0cmluZywgcHMubGVuZ3RoICk7Ci0gICAgfQorICAgIHN0YXRp
YyBpbmxpbmUgQXRvbWljU3RyaW5nIGF0b21pY1N0cmluZyhjb25zdCBQYXJzZVN0cmluZyAmcHMp
CisgICAgICAgIHsgcmV0dXJuIEF0b21pY1N0cmluZyhyZWludGVycHJldF9jYXN0PFFDaGFyICo+
KHBzLnN0cmluZyksIHBzLmxlbmd0aCk7IH0KKyAgICBzdGF0aWMgaW5saW5lIEF0b21pY1N0cmlu
ZyBsb3dlcmNhc2VkQXRvbWljU3RyaW5nKGNvbnN0IFBhcnNlU3RyaW5nICZwcykKKyAgICAgICAg
eyByZXR1cm4gQXRvbWljU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8UUNoYXIgKj4ocHMuc3RyaW5n
KSwgcHMubGVuZ3RoLCBsb3dlcmNhc2VkKTsgfQogICAgIAogICAgIGNsYXNzIFZhbHVlTGlzdCB7
CiAgICAgcHVibGljOgpJbmRleDoga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NzdHlsZXNlbGVj
dG9yLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOTkKZGlmZiAtcCAtdSAtcjEuMTk5IGto
dG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAotLS0ga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0
b3IuY3BwCTE2IEF1ZyAyMDA1IDAwOjQ3OjQyIC0wMDAwCTEuMTk5CisrKyBraHRtbC9jc3MvY3Nz
c3R5bGVzZWxlY3Rvci5jcHAJMjEgQXVnIDIwMDUgMTY6NTE6MDMgLTAwMDAKQEAgLTMzMiwxNSAr
MzMyLDE1IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhDU1NSdWwKICAgICAv
LyBXZSBuZWVkIHRvIGNvbGxlY3QgdGhlIHJ1bGVzIGZvciBpZCwgY2xhc3MsIHRhZywgYW5kIGV2
ZXJ5dGhpbmcgZWxzZSBpbnRvIGEgYnVmZmVyIGFuZAogICAgIC8vIHRoZW4gc29ydCB0aGUgYnVm
ZmVyLgogICAgIGlmIChlbGVtZW50LT5oYXNJRCgpKQotICAgICAgICBtYXRjaFJ1bGVzRm9yTGlz
dChydWxlcy0+Z2V0SURSdWxlcyhlbGVtZW50LT5nZXRJREF0dHJpYnV0ZSgpLmltcGxlbWVudGF0
aW9uKCkpLAorICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0SURSdWxlcyhlbGVt
ZW50LT5nZXRJREF0dHJpYnV0ZSgpLmltcGwoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKICAgICBpZiAoZWxlbWVudC0+aGFzQ2xh
c3MoKSkgewogICAgICAgICBmb3IgKGNvbnN0IEF0b21pY1N0cmluZ0xpc3QqIHNpbmdsZUNsYXNz
ID0gZWxlbWVudC0+Z2V0Q2xhc3NMaXN0KCk7CiAgICAgICAgICAgICAgc2luZ2xlQ2xhc3M7IHNp
bmdsZUNsYXNzID0gc2luZ2xlQ2xhc3MtPm5leHQoKSkKLSAgICAgICAgICAgIG1hdGNoUnVsZXNG
b3JMaXN0KHJ1bGVzLT5nZXRDbGFzc1J1bGVzKHNpbmdsZUNsYXNzLT5zdHJpbmcoKS5pbXBsZW1l
bnRhdGlvbigpKSwKKyAgICAgICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRDbGFz
c1J1bGVzKHNpbmdsZUNsYXNzLT5zdHJpbmcoKS5pbXBsKCkpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxl
SW5kZXgpOwogICAgIH0KLSAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0VGFnUnVsZXMo
ZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSksCisgICAgbWF0Y2hSdWxlc0Zv
ckxpc3QocnVsZXMtPmdldFRhZ1J1bGVzKGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSksCiAg
ICAgICAgICAgICAgICAgICAgICAgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwogICAg
IG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRVbml2ZXJzYWxSdWxlcygpLCBmaXJzdFJ1bGVJ
bmRleCwgbGFzdFJ1bGVJbmRleCk7CiAgICAgCkBAIC0xMTMxLDcgKzExMzEsNyBAQCBib29sIENT
U1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgICAgIHN3aXRjaChzZWwtPm1h
dGNoKSB7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkV4YWN0OgogCSAgICBpZiAoKGlzWE1M
RG9jICYmIHNlbC0+dmFsdWUgIT0gdmFsdWUpIHx8Ci0gICAgICAgICAgICAgICAgKCFpc1hNTERv
YyAmJiAhZXF1YWxzSWdub3JlQ2FzZShzZWwtPnZhbHVlLCB2YWx1ZSkpKQorICAgICAgICAgICAg
ICAgICghaXNYTUxEb2MgJiYgIWVxdWFsc0lnbm9yaW5nQ2FzZShzZWwtPnZhbHVlLCB2YWx1ZSkp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpMaXN0OgpAQCAtMTE0Miw3ICsxMTQyLDcgQEAgYm9vbCBD
U1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAgICAgICAgICAgICAgIC8vIGFs
bG9jaW5nIFFTdHJpbmdzIGFuZCBqdXN0IHRyZWF0IHRoaXMgYXMgYW4gZXhhY3QKICAgICAgICAg
ICAgICAgICAvLyBtYXRjaCBjaGVjay4KICAgICAgICAgICAgICAgICBpZiAoKGlzWE1MRG9jICYm
IHNlbC0+dmFsdWUgIT0gdmFsdWUpIHx8Ci0gICAgICAgICAgICAgICAgICAgICghaXNYTUxEb2Mg
JiYgIWVxdWFsc0lnbm9yZUNhc2Uoc2VsLT52YWx1ZSwgdmFsdWUpKSkKKyAgICAgICAgICAgICAg
ICAgICAgKCFpc1hNTERvYyAmJiAhZXF1YWxzSWdub3JpbmdDYXNlKHNlbC0+dmFsdWUsIHZhbHVl
KSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KQEAgLTE0NDAsMTcgKzE0NDAsMTcgQEAgdm9pZCBDU1NSdWxl
U2V0OjphZGRUb1J1bGVTZXQoRE9NU3RyaW5nSQogdm9pZCBDU1NSdWxlU2V0OjphZGRSdWxlKENT
U1N0eWxlUnVsZUltcGwqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWwpCiB7CiAgICAgaWYgKHNlbC0+
bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkKSB7Ci0gICAgICAgIGFkZFRvUnVsZVNldChzZWwtPnZh
bHVlLmltcGxlbWVudGF0aW9uKCksIG1faWRSdWxlcywgcnVsZSwgc2VsKTsKKyAgICAgICAgYWRk
VG9SdWxlU2V0KHNlbC0+dmFsdWUuaW1wbCgpLCBtX2lkUnVsZXMsIHJ1bGUsIHNlbCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHNlbC0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNs
YXNzKSB7Ci0gICAgICAgIGFkZFRvUnVsZVNldChzZWwtPnZhbHVlLmltcGxlbWVudGF0aW9uKCks
IG1fY2xhc3NSdWxlcywgcnVsZSwgc2VsKTsKKyAgICAgICAgYWRkVG9SdWxlU2V0KHNlbC0+dmFs
dWUuaW1wbCgpLCBtX2NsYXNzUnVsZXMsIHJ1bGUsIHNlbCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gc2VsLT50YWcu
bG9jYWxOYW1lKCk7CiAgICAgaWYgKGxvY2FsTmFtZSAhPSBzdGFyQXRvbSkgewotICAgICAgICBh
ZGRUb1J1bGVTZXQobG9jYWxOYW1lLmltcGxlbWVudGF0aW9uKCksIG1fdGFnUnVsZXMsIHJ1bGUs
IHNlbCk7CisgICAgICAgIGFkZFRvUnVsZVNldChsb2NhbE5hbWUuaW1wbCgpLCBtX3RhZ1J1bGVz
LCBydWxlLCBzZWwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMzA3NiwxMSAr
MzA3NiwxMSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoIGluCiAgICAg
ICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkgY29udGludWU7CiAgICAgICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZUltcGwgKnZhbCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlSW1wbCAqPihpdGVtKTsKICAgICAgICAgICAgIGlmICh2YWwtPnByaW1pdGl2ZVR5cGUo
KT09Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCi0gICAgICAgICAgICAgICAgc3R5bGUt
PnNldENvbnRlbnQodmFsLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGxlbWVudGF0aW9uKCksIGkgIT0g
MCk7CisgICAgICAgICAgICAgICAgc3R5bGUtPnNldENvbnRlbnQodmFsLT5nZXRTdHJpbmdWYWx1
ZSgpLmltcGwoKSwgaSAhPSAwKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHZhbC0+cHJpbWl0aXZl
VHlwZSgpPT1DU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0FUVFIpIHsKICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogQ2FuIGEgbmFtZXNwYWNlIGJlIHNwZWNpZmllZCBmb3IgYW4gYXR0cihmb28pPwot
ICAgICAgICAgICAgICAgIFF1YWxpZmllZE5hbWUgYXR0cihudWxsQXRvbSwgdmFsLT5nZXRTdHJp
bmdWYWx1ZSgpLmltcGxlbWVudGF0aW9uKCksIG51bGxBdG9tKTsKLSAgICAgICAgICAgICAgICBz
dHlsZS0+c2V0Q29udGVudChlbGVtZW50LT5nZXRBdHRyaWJ1dGUoYXR0cikuaW1wbGVtZW50YXRp
b24oKSwgaSAhPSAwKTsKKyAgICAgICAgICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0
b20sIHZhbC0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsKKyAgICAgICAgICAg
ICAgICBzdHlsZS0+c2V0Q29udGVudChlbGVtZW50LT5nZXRBdHRyaWJ1dGUoYXR0cikuaW1wbCgp
LCBpICE9IDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAodmFsLT5wcmlt
aXRpdmVUeXBlKCk9PUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CiAgICAgICAgICAgICAg
ICAgQ1NTSW1hZ2VWYWx1ZUltcGwgKmltYWdlID0gc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZUlt
cGwgKj4odmFsKTsKSW5kZXg6IGtodG1sL2Nzcy9wYXJzZXIueQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvcGFyc2VyLnksdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNDMKZGlmZiAtcCAtdSAtcjEuNDMga2h0bWwvY3NzL3BhcnNlci55Ci0tLSBraHRtbC9j
c3MvcGFyc2VyLnkJMzAgSnVsIDIwMDUgMDI6MzM6MTIgLTAwMDAJMS40MworKysga2h0bWwvY3Nz
L3BhcnNlci55CTIxIEF1ZyAyMDA1IDE2OjUxOjAzIC0wMDAwCkBAIC03MTYsMTAgKzcxNiwxMSBA
QCBzcGVjaWZpZXI6CiAJJCQgPSBuZXcgQ1NTU2VsZWN0b3IoKTsKIAkkJC0+bWF0Y2ggPSBDU1NT
ZWxlY3Rvcjo6SWQ7CiAJQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBh
cnNlcik7Ci0gICAgICAgIGlmICghcC0+c3RyaWN0KQotICAgICAgICAgICAgJDEubG93ZXIoKTsK
ICAgICAgICAgJCQtPmF0dHIgPSBpZEF0dHI7Ci0JJCQtPnZhbHVlID0gYXRvbWljU3RyaW5nKCQx
KTsKKyAgICAgICAgaWYgKHAtPnN0cmljdCkKKyAgICAgICAgICAgICQkLT52YWx1ZSA9IGF0b21p
Y1N0cmluZygkMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICQkLT52YWx1ZSA9IGxvd2Vy
Y2FzZWRBdG9taWNTdHJpbmcoJDEpOwogICAgIH0KICAgfCBjbGFzcwogICB8IGF0dHJpYgpAQCAt
NzMxLDEwICs3MzIsMTEgQEAgY2xhc3M6CiAgICAgICAgICQkID0gbmV3IENTU1NlbGVjdG9yKCk7
CiAJJCQtPm1hdGNoID0gQ1NTU2VsZWN0b3I6OkNsYXNzOwogCUNTU1BhcnNlciAqcCA9IHN0YXRp
Y19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwotICAgICAgICBpZiAoIXAtPnN0cmljdCkKLSAg
ICAgICAgICAgICQyLmxvd2VyKCk7CiAgICAgICAgICQkLT5hdHRyID0gY2xhc3NBdHRyOwotCSQk
LT52YWx1ZSA9IGF0b21pY1N0cmluZygkMik7CisgICAgICAgIGlmIChwLT5zdHJpY3QpCisgICAg
ICAgICAgICAkJC0+dmFsdWUgPSBhdG9taWNTdHJpbmcoJDIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICAkJC0+dmFsdWUgPSBsb3dlcmNhc2VkQXRvbWljU3RyaW5nKCQyKTsKICAgICB9CiAg
IDsKIApAQCAtODEyLDggKzgxNCw3IEBAIHBzZXVkbzoKICAgICAnOicgSURFTlQgewogICAgICAg
ICAkJCA9IG5ldyBDU1NTZWxlY3RvcigpOwogICAgICAgICAkJC0+bWF0Y2ggPSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3M7Ci0gICAgICAgICQyLmxvd2VyKCk7Ci0gICAgICAgICQkLT52YWx1ZSA9
IGF0b21pY1N0cmluZygkMik7CisgICAgICAgICQkLT52YWx1ZSA9IGxvd2VyY2FzZWRBdG9taWNT
dHJpbmcoJDIpOwogICAgICAgICBpZiAoJCQtPnZhbHVlID09ICJlbXB0eSIgfHwgJCQtPnZhbHVl
ID09ICJvbmx5LWNoaWxkIiB8fAogICAgICAgICAgICAgJCQtPnZhbHVlID09ICJmaXJzdC1jaGls
ZCIgfHwgJCQtPnZhbHVlID09ICJsYXN0LWNoaWxkIikgewogICAgICAgICAgICAgQ1NTUGFyc2Vy
ICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7CkBAIC04MjUsMTUgKzgyNiwx
MyBAQCBwc2V1ZG86CiAgICAgfCAnOicgJzonIElERU5UIHsKICAgICAgICAgJCQgPSBuZXcgQ1NT
U2VsZWN0b3IoKTsKICAgICAgICAgJCQtPm1hdGNoID0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1l
bnQ7Ci0gICAgICAgICQzLmxvd2VyKCk7Ci0gICAgICAgICQkLT52YWx1ZSA9IGF0b21pY1N0cmlu
ZygkMyk7CisgICAgICAgICQkLT52YWx1ZSA9IGxvd2VyY2FzZWRBdG9taWNTdHJpbmcoJDMpOwog
ICAgIH0KICAgICB8ICc6JyBGVU5DVElPTiBtYXliZV9zcGFjZSBzaW1wbGVfc2VsZWN0b3IgbWF5
YmVfc3BhY2UgJyknIHsKICAgICAgICAgJCQgPSBuZXcgQ1NTU2VsZWN0b3IoKTsKICAgICAgICAg
JCQtPm1hdGNoID0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzOwogICAgICAgICAkJC0+c2ltcGxl
U2VsZWN0b3IgPSAkNDsKLSAgICAgICAgJDIubG93ZXIoKTsKLSAgICAgICAgJCQtPnZhbHVlID0g
YXRvbWljU3RyaW5nKCQyKTsKKyAgICAgICAgJCQtPnZhbHVlID0gbG93ZXJjYXNlZEF0b21pY1N0
cmluZygkMik7CiAgICAgfQogICA7CiAKSW5kZXg6IGtodG1sL2RvbS9kb21fc3RyaW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vZG9tX3N0cmlu
Zy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTgKZGlmZiAtcCAtdSAtcjEuMTgga2h0bWwv
ZG9tL2RvbV9zdHJpbmcuY3BwCi0tLSBraHRtbC9kb20vZG9tX3N0cmluZy5jcHAJMjEgSnVuIDIw
MDUgMjI6Mjc6NTQgLTAwMDAJMS4xOAorKysga2h0bWwvZG9tL2RvbV9zdHJpbmcuY3BwCTIxIEF1
ZyAyMDA1IDE2OjUxOjA3IC0wMDAwCkBAIC0yMywzMTYgKzIzLDI0NCBAQAogI2luY2x1ZGUgImRv
bS9kb21fc3RyaW5nLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9zdHJpbmdpbXBsLmgiCiAKLQogbmFt
ZXNwYWNlIERPTSB7CiAKLQogRE9NU3RyaW5nOjpET01TdHJpbmcoY29uc3QgUUNoYXIgKnN0ciwg
dWludCBsZW4pCiB7Ci0gICAgaWYgKCFzdHIpIHsKLSAgICAgICAgaW1wbCA9IDA7Ci0gICAgICAg
IHJldHVybjsKKyAgICBET01TdHJpbmdJbXBsICppbXBsOworICAgIGlmICghc3RyKQorICAgICAg
ICBpbXBsID0gTlVMTDsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKGxlbiA9PSAwKQorICAgICAg
ICAgICAgaW1wbCA9IERPTVN0cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGltcGwgPSBuZXcgRE9NU3RyaW5nSW1wbChzdHIsIGxlbik7CisgICAgICAgIGltcGwt
PnJlZigpOwogICAgIH0KLSAgICAKLSAgICBpZiAobGVuID09IDApCi0gICAgICAgIGltcGwgPSBE
T01TdHJpbmdJbXBsOjplbXB0eSgpOwotICAgIGVsc2UKLSAgICAgICAgaW1wbCA9IG5ldyBET01T
dHJpbmdJbXBsKHN0ciwgbGVuKTsKLSAgICBpbXBsLT5yZWYoKTsKKyAgICBtX2ltcGwgPSBpbXBs
OwogfQogCiBET01TdHJpbmc6OkRPTVN0cmluZyhjb25zdCBRU3RyaW5nICZzdHIpCiB7Ci0gICAg
aWYgKHN0ci5pc051bGwoKSkgewotCWltcGwgPSAwOwotCXJldHVybjsKKyAgICBET01TdHJpbmdJ
bXBsICppbXBsOworICAgIGlmIChzdHIuaXNOdWxsKCkpCisJaW1wbCA9IE5VTEw7CisgICAgZWxz
ZSB7CisgICAgICAgIGlmIChzdHIuaXNFbXB0eSgpKQorICAgICAgICAgICAgaW1wbCA9IERPTVN0
cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGltcGwgPSBuZXcg
RE9NU3RyaW5nSW1wbChzdHIudW5pY29kZSgpLCBzdHIubGVuZ3RoKCkpOworICAgICAgICBpbXBs
LT5yZWYoKTsKICAgICB9Ci0gICAgCi0gICAgaWYgKHN0ci5pc0VtcHR5KCkpCi0gICAgICAgIGlt
cGwgPSBET01TdHJpbmdJbXBsOjplbXB0eSgpOwotICAgIGVsc2UgCi0gICAgICAgIGltcGwgPSBu
ZXcgRE9NU3RyaW5nSW1wbChzdHIudW5pY29kZSgpLCBzdHIubGVuZ3RoKCkpOwotICAgIGltcGwt
PnJlZigpOworICAgIG1faW1wbCA9IGltcGw7CiB9CiAKIERPTVN0cmluZzo6RE9NU3RyaW5nKGNv
bnN0IGNoYXIgKnN0cikKIHsKLSAgICBpZiAoIXN0cikgewotCWltcGwgPSAwOwotCXJldHVybjsK
KyAgICBET01TdHJpbmdJbXBsICppbXBsOworICAgIGlmICghc3RyKQorCWltcGwgPSBOVUxMOwor
ICAgIGVsc2UgeworICAgICAgICBpZiAoaW50IGxlbiA9IHN0cmxlbihzdHIpKQorICAgICAgICAg
ICAgaW1wbCA9IG5ldyBET01TdHJpbmdJbXBsKHN0ciwgbGVuKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgaW1wbCA9IERPTVN0cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgICAgIGltcGwtPnJl
ZigpOworICAgIH0KKyAgICBtX2ltcGwgPSBpbXBsOworfQorCisvLyBGSVhNRTogVGhpcyB2aW9s
YXRlcyB0aGUgdXN1YWwgZXhwbGljaXQgc2hhcmluZyBzZW1hbnRpY3MgYmVjYXVzZSBpdCBzb21l
dGltZXMgY29waWVzLCBzb21ldGltZXMgZG9lc24ndC4KK0RPTVN0cmluZyAmRE9NU3RyaW5nOjpv
cGVyYXRvciArPShjb25zdCBET01TdHJpbmcgJm90aGVyKQoreworICAgIGlmIChvdGhlci5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICBET01TdHJpbmdJbXBsICppbXBsOwor
ICAgIGlmIChET01TdHJpbmdJbXBsICpvbGQgPSBtX2ltcGwpIHsKKyAgICAgICAgaW1wbCA9IG9s
ZC0+Y29weSgpOworICAgICAgICBpbXBsLT5hcHBlbmQob3RoZXIubV9pbXBsKTsKKyAgICAgICAg
b2xkLT5kZXJlZigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGltcGwgPSBvdGhlci5tX2ltcGwt
PmNvcHkoKTsKICAgICB9Ci0KLSAgICBpbnQgbCA9IHN0cmxlbihzdHIpOwotICAgIGlmIChsID09
IDApCi0gICAgICAgIGltcGwgPSBET01TdHJpbmdJbXBsOjplbXB0eSgpOwotICAgIGVsc2UKLSAg
ICAgICAgaW1wbCA9IG5ldyBET01TdHJpbmdJbXBsKHN0ciwgbCk7CiAgICAgaW1wbC0+cmVmKCk7
Ci19Ci0KLURPTVN0cmluZzo6RE9NU3RyaW5nKERPTVN0cmluZ0ltcGwgKmkpCi17Ci0gICAgaW1w
bCA9IGk7Ci0gICAgaWYoaW1wbCkgaW1wbC0+cmVmKCk7Ci19Ci0KLURPTVN0cmluZzo6RE9NU3Ry
aW5nKGNvbnN0IERPTVN0cmluZyAmb3RoZXIpCi17Ci0gICAgaW1wbCA9IG90aGVyLmltcGw7Ci0g
ICAgaWYoaW1wbCkgaW1wbC0+cmVmKCk7Ci19Ci0KLURPTVN0cmluZyAmRE9NU3RyaW5nOjpvcGVy
YXRvciA9KGNvbnN0IERPTVN0cmluZyAmb3RoZXIpCi17Ci0gICAgaWYgKCBpbXBsICE9IG90aGVy
LmltcGwgKSB7Ci0gICAgaWYoaW1wbCkgaW1wbC0+ZGVyZWYoKTsKLSAgICBpbXBsID0gb3RoZXIu
aW1wbDsKLSAgICBpZihpbXBsKSBpbXBsLT5yZWYoKTsKLSAgICB9CisgICAgbV9pbXBsID0gaW1w
bDsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLURPTVN0cmluZyAmRE9NU3RyaW5nOjpvcGVyYXRv
ciArPSAoY29uc3QgRE9NU3RyaW5nICZzdHIpCi17Ci0gICAgaWYoc3RyLmltcGwpCi0gICAgewot
ICAgICAgICBpZighaW1wbCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gIyMjIEZJWE1FISEh
Ci0gICAgICAgICAgICBpbXBsID0gc3RyLmltcGw7Ci0gICAgICAgICAgICBpbXBsLT5yZWYoKTsK
LSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgfQotCURPTVN0cmluZ0ltcGwgKmkg
PSBpbXBsLT5jb3B5KCk7Ci0JaW1wbC0+ZGVyZWYoKTsKLQlpbXBsID0gaTsKLQlpbXBsLT5yZWYo
KTsKLQlpbXBsLT5hcHBlbmQoc3RyLmltcGwpOwotICAgIH0KLSAgICByZXR1cm4gKnRoaXM7Ci19
Ci0KLURPTVN0cmluZyBvcGVyYXRvciArIChjb25zdCBET01TdHJpbmcgJmEsIGNvbnN0IERPTVN0
cmluZyAmYikKK0RPTVN0cmluZyBvcGVyYXRvciArKGNvbnN0IERPTVN0cmluZyAmYSwgY29uc3Qg
RE9NU3RyaW5nICZiKQogewogICAgIGlmIChhLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGIu
Y29weSgpOwogICAgIGlmIChiLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGEuY29weSgpOwog
ICAgIERPTVN0cmluZyBjID0gYS5jb3B5KCk7Ci0gICAgYyArPSBiOwotICAgIHJldHVybiBjOwor
ICAgIHJldHVybiBjICs9IGI7CiB9CiAKLXZvaWQgRE9NU3RyaW5nOjppbnNlcnQoRE9NU3RyaW5n
IHN0ciwgdWludCBwb3MpCisvLyBGSVhNRTogVGhpcyB2aW9sYXRlcyB0aGUgdXN1YWwgZXhwbGlj
aXQgc2hhcmluZyBzZW1hbnRpY3MgYmVjYXVzZSBpdCBzb21ldGltZXMgY29waWVzLCBzb21ldGlt
ZXMgZG9lc24ndC4KK3ZvaWQgRE9NU3RyaW5nOjppbnNlcnQoY29uc3QgRE9NU3RyaW5nICZzdHIs
IHVpbnQgcG9zKQogewotICAgIGlmKCFpbXBsKQotICAgIHsKLQlpbXBsID0gc3RyLmltcGwtPmNv
cHkoKTsKKyAgICBpZiAoRE9NU3RyaW5nSW1wbCAqaW1wbCA9IG1faW1wbCkgeworCWltcGwtPmlu
c2VydChzdHIubV9pbXBsLCBwb3MpOworICAgIH0gZWxzZSB7CisJaW1wbCA9IHN0ci5tX2ltcGwt
PmNvcHkoKTsKIAlpbXBsLT5yZWYoKTsKKyAgICAgICAgbV9pbXBsID0gaW1wbDsKICAgICB9Ci0g
ICAgZWxzZQotCWltcGwtPmluc2VydChzdHIuaW1wbCwgcG9zKTsKIH0KIAotCi1jb25zdCBRQ2hh
ciAmRE9NU3RyaW5nOjpvcGVyYXRvciBbXSh1bnNpZ25lZCBpbnQgaSkgY29uc3QKK2NvbnN0IFFD
aGFyICZET01TdHJpbmc6Om9wZXJhdG9yIFtdKHVpbnQgaSkgY29uc3QKIHsKLSAgICBzdGF0aWMg
Y29uc3QgUUNoYXIgbnVsbENoYXIgPSAwOwotCi0gICAgaWYoIWltcGwgfHwgaSA+PSBpbXBsLT5s
ICkgcmV0dXJuIG51bGxDaGFyOwotCi0gICAgcmV0dXJuICooaW1wbC0+cytpKTsKKyAgICBET01T
dHJpbmdJbXBsICppbXBsID0gbV9pbXBsOworICAgIGlmICghaW1wbCB8fCBpID49IGltcGwtPmwp
IHsKKyAgICAgICAgc3RhdGljIFFDaGFyIG51bGxDaGFyOworICAgICAgICByZXR1cm4gbnVsbENo
YXI7CisgICAgfQorICAgIHJldHVybiBpbXBsLT5zW2ldOwogfQogCiBpbnQgRE9NU3RyaW5nOjpm
aW5kKGNvbnN0IFFDaGFyIGMsIGludCBzdGFydCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBpbnQg
bCA9IHN0YXJ0OwotICAgIGlmKCFpbXBsIHx8IGwgPj0gaW1wbC0+bCApIHJldHVybiAtMTsKLSAg
ICB3aGlsZSggbCA8IGltcGwtPmwgKQotICAgIHsKLQlpZiggKihpbXBsLT5zK2wpID09IGMgKSBy
ZXR1cm4gbDsKLQlsKys7Ci0gICAgfQorICAgIERPTVN0cmluZ0ltcGwgKmltcGwgPSBtX2ltcGw7
CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gLTE7CisgICAgY29uc3QgUUNoYXIgKnN0
ciA9IGltcGwtPnM7CisgICAgdWludCBsZW4gPSBpbXBsLT5sOworICAgIGZvciAodWludCBpID0g
c3RhcnQ7IGkgPCBsZW47ICsraSkKKwlpZiAoc3RyW2ldID09IGMpCisgICAgICAgICAgICByZXR1
cm4gaTsKICAgICByZXR1cm4gLTE7CiB9CiAKLXVpbnQgRE9NU3RyaW5nOjpsZW5ndGgoKSBjb25z
dAotewotICAgIGlmKCFpbXBsKSByZXR1cm4gMDsKLSAgICByZXR1cm4gaW1wbC0+bDsKLX0KLQot
dm9pZCBET01TdHJpbmc6OnRydW5jYXRlKCB1bnNpZ25lZCBpbnQgbGVuICkKK2Jvb2wgRE9NU3Ry
aW5nOjpwZXJjZW50YWdlKGludCAmcmVzdWx0KSBjb25zdAogewotICAgIGlmKGltcGwpIGltcGwt
PnRydW5jYXRlKGxlbik7Ci19Ci0KLXZvaWQgRE9NU3RyaW5nOjpyZW1vdmUodW5zaWduZWQgaW50
IHBvcywgaW50IGxlbikKLXsKLSAgaWYoaW1wbCkgaW1wbC0+cmVtb3ZlKHBvcywgbGVuKTsKLX0K
LQotRE9NU3RyaW5nIERPTVN0cmluZzo6c3Vic3RyaW5nKHVuc2lnbmVkIGludCBwb3MsIHVuc2ln
bmVkIGludCBsZW4pIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKSAKLSAgICAgICAgcmV0dXJuIERP
TVN0cmluZygpOwotICAgIHJldHVybiBpbXBsLT5zdWJzdHJpbmcocG9zLCBsZW4pOwotfQotCi1E
T01TdHJpbmcgRE9NU3RyaW5nOjpzcGxpdCh1bnNpZ25lZCBpbnQgcG9zKQotewotICBpZighaW1w
bCkgcmV0dXJuIERPTVN0cmluZygpOwotICByZXR1cm4gaW1wbC0+c3BsaXQocG9zKTsKLX0KLQot
RE9NU3RyaW5nIERPTVN0cmluZzo6bG93ZXIoKSBjb25zdAotewotICBpZighaW1wbCkgcmV0dXJu
IERPTVN0cmluZygpOwotICByZXR1cm4gaW1wbC0+bG93ZXIoKTsKLX0KLQotRE9NU3RyaW5nIERP
TVN0cmluZzo6dXBwZXIoKSBjb25zdAotewotICBpZighaW1wbCkgcmV0dXJuIERPTVN0cmluZygp
OwotICByZXR1cm4gaW1wbC0+dXBwZXIoKTsKLX0KLQotYm9vbCBET01TdHJpbmc6OnBlcmNlbnRh
Z2UoaW50ICZfcGVyY2VudGFnZSkgY29uc3QKLXsKLSAgICBpZighaW1wbCB8fCAhaW1wbC0+bCkg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCAqKGltcGwtPnMraW1wbC0+bC0xKSAhPSBRQ2hhcign
JScpKQorICAgIERPTVN0cmluZ0ltcGwgKmltcGwgPSBtX2ltcGw7CisgICAgaWYgKCFpbXBsKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdWludCBsZW4gPSBpbXBsLT5sOworICAgIGlmIChs
ZW4gPCAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUUNoYXIgKnN0ciA9IGltcGwtPnM7
CisgICAgaWYgKHN0cltsZW4gLSAxXSAhPSAnJScpCiAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgX3BlcmNlbnRhZ2UgPSBRQ29uc3RTdHJpbmcoaW1wbC0+cywgaW1wbC0+bC0xKS5zdHJpbmco
KS50b0ludCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1RQ2hhciAqRE9NU3RyaW5nOjp1bmlj
b2RlKCkgY29uc3QKLXsKLSAgICBpZighaW1wbCkgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGltcGwt
PnM7CisgICAgYm9vbCBvazsKKyAgICByZXN1bHQgPSBRQ29uc3RTdHJpbmcoc3RyLCBsZW4gLSAx
KS5zdHJpbmcoKS50b0ludCgmb2spOworICAgIHJldHVybiBvazsKIH0KIAogUVN0cmluZyBET01T
dHJpbmc6OnN0cmluZygpIGNvbnN0CiB7Ci0gICAgaWYoIWltcGwpIHJldHVybiBRU3RyaW5nOjpu
dWxsOwotCisgICAgRE9NU3RyaW5nSW1wbCAqaW1wbCA9IG1faW1wbDsKKyAgICBpZiAoIWltcGwp
CisgICAgICAgIHJldHVybiBRU3RyaW5nOjpudWxsOwogICAgIHJldHVybiBRU3RyaW5nKGltcGwt
PnMsIGltcGwtPmwpOwogfQogCi1pbnQgRE9NU3RyaW5nOjp0b0ludCgpIGNvbnN0Ci17Ci0gICAg
aWYoIWltcGwpIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGltcGwtPnRvSW50KCk7Ci19Ci0KLURP
TVN0cmluZyBET01TdHJpbmc6OmNvcHkoKSBjb25zdAotewotICAgIGlmKCFpbXBsKSByZXR1cm4g
RE9NU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGltcGwtPmNvcHkoKTsKLX0KLQogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKLWJvb2wgc3RyY2FzZWNtcCggY29uc3QgRE9NU3RyaW5nICZhcywgY29uc3QgRE9N
U3RyaW5nICZicyApCitib29sIGVxdWFsc0lnbm9yaW5nQ2FzZShjb25zdCBET01TdHJpbmcgJmEs
IGNvbnN0IERPTVN0cmluZyAmYiApCiB7Ci0gICAgaWYgKCBhcy5sZW5ndGgoKSAhPSBicy5sZW5n
dGgoKSApIHJldHVybiB0cnVlOworICAgIERPTVN0cmluZ0ltcGwgKmFpbXBsID0gYS5pbXBsKCk7
CisgICAgRE9NU3RyaW5nSW1wbCAqYmltcGwgPSBiLmltcGwoKTsKKyAgICBpZiAoYWltcGwgPT0g
YmltcGwpCisgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgY29uc3QgUUNoYXIgKmEgPSBhcy51
bmljb2RlKCk7Ci0gICAgY29uc3QgUUNoYXIgKmIgPSBicy51bmljb2RlKCk7Ci0gICAgaWYgKCBh
ID09IGIgKSAgcmV0dXJuIGZhbHNlOwotICAgIGlmICggISggYSAmJiBiICkgKSAgcmV0dXJuIHRy
dWU7Ci0gICAgaW50IGwgPSBhcy5sZW5ndGgoKTsKLSAgICB3aGlsZSAoIGwtLSApIHsKLSAgICAg
ICAgaWYgKCAqYSAhPSAqYiAmJiBhLT5sb3dlcigpICE9IGItPmxvd2VyKCkgKSByZXR1cm4gdHJ1
ZTsKLQlhKyssYisrOworICAgIHVpbnQgYWxlbiA9IGFpbXBsID8gYWltcGwtPmwgOiAwOworICAg
IHVpbnQgYmxlbiA9IGJpbXBsID8gYmltcGwtPmwgOiAwOworICAgIGlmIChhbGVuICE9IGJsZW4p
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IFFDaGFyICphY2hhcnMgPSBhaW1w
bC0+czsKKyAgICBjb25zdCBRQ2hhciAqYmNoYXJzID0gYmltcGwtPnM7CisgICAgdWludCBjb3Vu
dCA9IGFsZW47CisgICAgd2hpbGUgKGNvdW50LS0pIHsKKyAgICAgICAgaWYgKCphY2hhcnMgIT0g
KmJjaGFycyAmJiBhY2hhcnMtPmxvd2VyKCkgIT0gYmNoYXJzLT5sb3dlcigpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCWFjaGFycysrOworICAgICAgICBiY2hhcnMrKzsKICAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHN0cmNhc2VjbXAo
IGNvbnN0IERPTVN0cmluZyAmYXMsIGNvbnN0IGNoYXIqIGJzICkKK2Jvb2wgZXF1YWxzSWdub3Jp
bmdDYXNlKGNvbnN0IERPTVN0cmluZyAmYSwgY29uc3QgY2hhciAqYikKIHsKLSAgICBjb25zdCBR
Q2hhciAqYSA9IGFzLnVuaWNvZGUoKTsKLSAgICBpbnQgbCA9IGFzLmxlbmd0aCgpOwotICAgIGlm
ICggIWJzICkgcmV0dXJuICggbCAhPSAwICk7Ci0gICAgd2hpbGUgKCBsLS0gKSB7Ci0gICAgICAg
IGlmICggYS0+bGF0aW4xKCkgIT0gKmJzICkgewotICAgICAgICAgICAgY2hhciBjYyA9ICggKCAq
YnMgPj0gJ0EnICkgJiYgKCAqYnMgPD0gJ1onICkgKSA/ICggKCAqYnMgKSArICdhJyAtICdBJyAp
IDogKCAqYnMgKTsKLSAgICAgICAgICAgIGlmICggYS0+bG93ZXIoKS5sYXRpbjEoKSAhPSBjYyAp
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGErKywgYnMrKzsKKyAgICBET01TdHJp
bmdJbXBsICphaW1wbCA9IGEuaW1wbCgpOworICAgIHVpbnQgYWxlbiA9IGFpbXBsID8gYWltcGwt
PmwgOiAwOworICAgIGlmICghYikKKyAgICAgICAgcmV0dXJuIGFsZW4gPT0gMDsKKyAgICBjb25z
dCBRQ2hhciAqYWNoYXJzID0gYWltcGwtPnM7CisgICAgY29uc3QgY2hhciAqYmNoYXJzID0gYjsK
KyAgICB1aW50IGNvdW50ID0gYWxlbjsKKyAgICB3aGlsZSAoY291bnQtLSkgeworICAgICAgICBj
aGFyIGJjID0gKmJjaGFyczsKKyAgICAgICAgaWYgKGJjID09ICdcMCcgfHwgKmFjaGFycyAhPSBi
YyAmJiBhY2hhcnMtPmxvd2VyKCkgIT0gUUNoYXIoYmMpLmxvd2VyKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGFjaGFycysrOworICAgICAgICBiY2hhcnMrKzsKICAgICB9
Ci0gICAgcmV0dXJuICggKmJzICE9ICdcMCcgKTsKLX0KLQotYm9vbCBET01TdHJpbmc6OmlzRW1w
dHkoKSBjb25zdAotewotICAgIHJldHVybiAoIWltcGwgfHwgaW1wbC0+bCA9PSAwKTsKLX0KLQot
a2h0bWw6Okxlbmd0aCogRE9NU3RyaW5nOjp0b0Nvb3Jkc0FycmF5KGludCYgbGVuKSBjb25zdCAK
LXsgCi0gICAgcmV0dXJuIGltcGwgPyBpbXBsLT50b0Nvb3Jkc0FycmF5KGxlbikgOiAwOwotfQot
Ci1raHRtbDo6TGVuZ3RoKiBET01TdHJpbmc6OnRvTGVuZ3RoQXJyYXkoaW50JiBsZW4pIGNvbnN0
IAoteyAKLSAgICByZXR1cm4gaW1wbCA/IGltcGwtPnRvTGVuZ3RoQXJyYXkobGVuKSA6IDA7Cisg
ICAgcmV0dXJuICpiY2hhcnMgPT0gJ1wwJzsKIH0KIAogI2lmbmRlZiBOREVCVUcKKwogY29uc3Qg
Y2hhciAqRE9NU3RyaW5nOjphc2NpaSgpIGNvbnN0CiB7CisgICAgRE9NU3RyaW5nSW1wbCAqaW1w
bCA9IG1faW1wbDsKICAgICByZXR1cm4gaW1wbCA/IGltcGwtPmFzY2lpKCkgOiAiKG51bGwgaW1w
bCkiOwogfQorCiAjZW5kaWYKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1ib29sIG9wZXJh
dG9yPT0oIGNvbnN0IERPTVN0cmluZyAmYSwgY29uc3QgRE9NU3RyaW5nICZiICkKKy8vIEZJWE1F
OiBOdWxsIGNvbXBhcmVzIGVxdWFsIHRvIGVtcHR5LiBJcyB0aGF0IHdoYXQgd2Ugd2FudD8KK2Jv
b2wgb3BlcmF0b3I9PShjb25zdCBET01TdHJpbmcgJmEsIGNvbnN0IERPTVN0cmluZyAmYikKIHsK
LSAgICBpZiAoYS5pbXBsID09IGIuaW1wbCkKKyAgICBET01TdHJpbmdJbXBsICphaW1wbCA9IGEu
aW1wbCgpOworICAgIERPTVN0cmluZ0ltcGwgKmJpbXBsID0gYi5pbXBsKCk7CisgICAgaWYgKGFp
bXBsID09IGJpbXBsKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICB1bnNpZ25lZCBp
bnQgbCA9IGEubGVuZ3RoKCk7CiAKLSAgICBpZiggbCAhPSBiLmxlbmd0aCgpICkgcmV0dXJuIGZh
bHNlOworICAgIHVpbnQgYWxlbiA9IGFpbXBsID8gYWltcGwtPmwgOiAwOworICAgIHVpbnQgYmxl
biA9IGJpbXBsID8gYmltcGwtPmwgOiAwOworICAgIGlmIChhbGVuICE9IGJsZW4pCisgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmKCFtZW1jbXAoYS51bmljb2RlKCksIGIudW5pY29kZSgp
LCBsKnNpemVvZihRQ2hhcikpKQotCXJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gbWVtY21wKGFpbXBsLT5zLCBiaW1wbC0+cywgYWxlbiAqIHNpemVvZihRQ2hhcikp
ID09IDA7CiB9CiAKLWJvb2wgb3BlcmF0b3I9PSggY29uc3QgRE9NU3RyaW5nICZhLCBjb25zdCBR
U3RyaW5nICZiICkKKy8vIEZJWE1FOiBOdWxsIGNvbXBhcmVzIGVxdWFsIHRvIGVtcHR5LiBJcyB0
aGF0IHdoYXQgd2Ugd2FudD8KK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBET01TdHJpbmcgJmEsIGNv
bnN0IFFTdHJpbmcgJmIpCiB7Ci0gICAgdW5zaWduZWQgaW50IGwgPSBhLmxlbmd0aCgpOworICAg
IERPTVN0cmluZ0ltcGwgKmFpbXBsID0gYS5pbXBsKCk7CiAKLSAgICBpZiggbCAhPSBiLmxlbmd0
aCgpICkgcmV0dXJuIGZhbHNlOworICAgIHVpbnQgYWxlbiA9IGFpbXBsID8gYWltcGwtPmwgOiAw
OworICAgIHVpbnQgYmxlbiA9IGIubGVuZ3RoKCk7CisgICAgaWYgKGFsZW4gIT0gYmxlbikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYoIW1lbWNtcChhLnVuaWNvZGUoKSwgYi51bmlj
b2RlKCksIGwqc2l6ZW9mKFFDaGFyKSkpCi0JcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBtZW1jbXAoYWltcGwtPnMsIGIudW5pY29kZSgpLCBhbGVuICogc2l6ZW9m
KFFDaGFyKSkgPT0gMDsKIH0KIAotYm9vbCBvcGVyYXRvcj09KCBjb25zdCBET01TdHJpbmcgJmEs
IGNvbnN0IGNoYXIgKmIgKQorLy8gRklYTUU6IE51bGwgY29tcGFyZXMgZXF1YWwgdG8gZW1wdHku
IElzIHRoYXQgd2hhdCB3ZSB3YW50PworYm9vbCBvcGVyYXRvcj09KGNvbnN0IERPTVN0cmluZyAm
YSwgY29uc3QgY2hhciAqYikKIHsKLSAgICBET01TdHJpbmdJbXBsICphaW1wbCA9IGEuaW1wbDsK
LSAgICAKKyAgICBET01TdHJpbmdJbXBsICphaW1wbCA9IGEuaW1wbCgpOworICAgIHVpbnQgYWxl
biA9IGFpbXBsID8gYWltcGwtPmwgOiAwOwogICAgIGlmICghYikKLSAgICAgICAgcmV0dXJuICFh
aW1wbDsKLSAgICAKLSAgICBpZiAoYWltcGwpIHsKLSAgICAgICAgaW50IGFsZW4gPSBhaW1wbC0+
bDsKLSAgICAgICAgY29uc3QgUUNoYXIgKmFwdHIgPSBhaW1wbC0+czsKLSAgICAgICAgd2hpbGUg
KGFsZW4tLSkgewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjID0gKmIrKzsKLSAgICAgICAg
ICAgIGlmICghYyB8fCAoKmFwdHIrKykudW5pY29kZSgpICE9IGMpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBhbGVuID09IDA7CisgICAg
Y29uc3QgUUNoYXIgKmFjaGFycyA9IGFpbXBsLT5zOworICAgIGNvbnN0IGNoYXIgKmJjaGFycyA9
IGI7CisgICAgdWludCBjb3VudCA9IGFsZW47CisgICAgd2hpbGUgKGNvdW50LS0pIHsKKyAgICAg
ICAgY2hhciBiYyA9ICpiY2hhcnM7CisgICAgICAgIGlmIChiYyA9PSAnXDAnIHx8ICphY2hhcnMg
IT0gYmMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGFjaGFycysrOworICAg
ICAgICBiY2hhcnMrKzsKICAgICB9Ci0gICAgcmV0dXJuICpiID09IDA7CisgICAgcmV0dXJuICpi
Y2hhcnMgPT0gJ1wwJzsKIH0KIAogfQpJbmRleDoga2h0bWwvZG9tL2RvbV9zdHJpbmcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vZG9tX3N0cmluZy5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzCmRpZmYgLXAgLXUgLXIxLjEzIGtodG1sL2RvbS9k
b21fc3RyaW5nLmgKLS0tIGtodG1sL2RvbS9kb21fc3RyaW5nLmgJMjEgSnVuIDIwMDUgMjI6Mjc6
NTQgLTAwMDAJMS4xMworKysga2h0bWwvZG9tL2RvbV9zdHJpbmcuaAkyMSBBdWcgMjAwNSAxNjo1
MTowNyAtMDAwMApAQCAtMjAsMjAgKzIwLDE0IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcs
IFVTQS4KICAqCiAgKi8KLSNpZm5kZWYgX0RPTV9ET01TdHJpbmdfaF8KLSNkZWZpbmUgX0RPTV9E
T01TdHJpbmdfaF8KIAotI2luY2x1ZGUgPHFzdHJpbmcuaD4KLSNpbmNsdWRlIDx4bWwvZG9tX3N0
cmluZ2ltcGwuaD4KKyNpZm5kZWYgRE9NX0RPTVNUUklOR19ICisjZGVmaW5lIERPTV9ET01TVFJJ
TkdfSAogCi1uYW1lc3BhY2Uga2h0bWwgewotICAgIGNsYXNzIExlbmd0aDsKLX0KKyNpbmNsdWRl
IDx4bWwvZG9tX3N0cmluZ2ltcGwuaD4KIAogbmFtZXNwYWNlIERPTSB7CiAKLWNsYXNzIERPTVN0
cmluZ0ltcGw7Ci0KIC8qKgogICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBiYXNpYyBzdHJp
bmcgd2UgdXNlIGluIHRoZSBET00uIFdlIGRvIG5vdCB1c2UKICAqIFFTdHJpbmcgZm9yIDIgcmVh
c29uczogTWVtb3J5IG92ZXJoZWFkLCBhbmQgdGhlIG1pc3NpbmcgZXhwbGljaXQgc2hhcmluZwpA
QCAtNDUsNTEgKzM5LDQ3IEBAIGNsYXNzIERPTVN0cmluZ0ltcGw7CiAgKi8KIGNsYXNzIERPTVN0
cmluZwogewotICAgIGZyaWVuZCBjbGFzcyBDaGFyYWN0ZXJEYXRhSW1wbDsKLSAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvcj09KCBjb25zdCBET01TdHJpbmcgJmEsIGNvbnN0IGNoYXIgKmIgKTsKLSAg
ICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBET01TdHJpbmcgJmEsIGNvbnN0IERPTVN0
cmluZyAmYiApOwogcHVibGljOgogICAgIC8qKgotICAgICAqIGRlZmF1bHQgY29uc3RydWN0b3Iu
IEdpdmVzIGFuIGVtcHR5IERPTVN0cmluZworICAgICAqIERlZmF1bHQgY29uc3RydWN0b3IuIEdp
dmVzIGEgIm51bGwiIERPTVN0cmluZwogICAgICAqLwotICAgIERPTVN0cmluZygpIDogaW1wbCgw
KSB7IH0KKyAgICBET01TdHJpbmcoKSA6IG1faW1wbChOVUxMKSB7IH0KIAogICAgIERPTVN0cmlu
Zyhjb25zdCBRQ2hhciAqc3RyLCB1aW50IGxlbik7CiAgICAgRE9NU3RyaW5nKGNvbnN0IFFTdHJp
bmcgJik7Ci0gICAgRE9NU3RyaW5nKGNvbnN0IGNoYXIgKnN0cik7Ci0gICAgRE9NU3RyaW5nKERP
TVN0cmluZ0ltcGwgKmkpOwotICAgIH5ET01TdHJpbmcoKSB7IGlmKGltcGwpIGltcGwtPmRlcmVm
KCk7IH0KLQorICAgIERPTVN0cmluZyhjb25zdCBjaGFyICopOworICAgIERPTVN0cmluZyhET01T
dHJpbmdJbXBsICopOworICAgIH5ET01TdHJpbmcoKSB7IGlmIChET01TdHJpbmdJbXBsICppID0g
bV9pbXBsKSBpLT5kZXJlZigpOyB9CiAKICAgICAvLyBhc3NpZ24gYW5kIGNvcHkKLSAgICBET01T
dHJpbmcoY29uc3QgRE9NU3RyaW5nICZzdHIpOwotICAgIERPTVN0cmluZyAmb3BlcmF0b3IgPShj
b25zdCBET01TdHJpbmcgJnN0cik7CisgICAgRE9NU3RyaW5nKGNvbnN0IERPTVN0cmluZyAmKTsK
KyAgICBET01TdHJpbmcgJm9wZXJhdG9yID0oY29uc3QgRE9NU3RyaW5nICYpOwogCiAgICAgLyoq
CiAgICAgICogYXBwZW5kIHN0ciB0byB0aGlzIHN0cmluZwogICAgICAqLwotICAgIERPTVN0cmlu
ZyAmb3BlcmF0b3IgKz0gKGNvbnN0IERPTVN0cmluZyAmc3RyKTsKKyAgICBET01TdHJpbmcgJm9w
ZXJhdG9yICs9KGNvbnN0IERPTVN0cmluZyAmc3RyKTsKIAotICAgIHZvaWQgaW5zZXJ0KERPTVN0
cmluZyBzdHIsIHVpbnQgcG9zKTsKKyAgICB2b2lkIGluc2VydChjb25zdCBET01TdHJpbmcgJnN0
ciwgdWludCBwb3MpOwogCiAgICAgLyoqCiAgICAgICogVGhlIGNoYXJhY3RlciBhdCBwb3NpdGlv
biBpIG9mIHRoZSBET01TdHJpbmcuIElmIGkgPj0gbGVuZ3RoKCksIHRoZQogICAgICAqIGNoYXJh
Y3RlciByZXR1cm5lZCB3aWxsIGJlIDAuCiAgICAgICovCi0gICAgY29uc3QgUUNoYXIgJm9wZXJh
dG9yIFtdKHVuc2lnbmVkIGludCBpKSBjb25zdDsKKyAgICBjb25zdCBRQ2hhciAmb3BlcmF0b3Ig
W10odWludCBpKSBjb25zdDsKIAogICAgIGludCBmaW5kKGNvbnN0IFFDaGFyIGMsIGludCBzdGFy
dCA9IDApIGNvbnN0OwogCiAgICAgdWludCBsZW5ndGgoKSBjb25zdDsKLSAgICB2b2lkIHRydW5j
YXRlKCB1bnNpZ25lZCBpbnQgbGVuICk7Ci0gICAgdm9pZCByZW1vdmUodW5zaWduZWQgaW50IHBv
cywgaW50IGxlbj0xKTsKKyAgICB2b2lkIHRydW5jYXRlKHVpbnQgbGVuKTsKKyAgICB2b2lkIHJl
bW92ZSh1aW50IHBvcywgaW50IGxlbj0xKTsKIAotICAgIERPTVN0cmluZyBzdWJzdHJpbmcodW5z
aWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGxlbikgY29uc3Q7CisgICAgRE9NU3RyaW5nIHN1
YnN0cmluZyh1aW50IHBvcywgdWludCBsZW4pIGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogU3Bs
aXRzIHRoZSBzdHJpbmcgaW50byB0d28uIFRoZSBvcmlnaW5hbCBzdHJpbmcgZ2V0cyB0cnVuY2F0
ZWQgdG8gcG9zLCBhbmQgdGhlIHJlc3QgaXMgcmV0dXJuZWQuCiAgICAgICovCi0gICAgRE9NU3Ry
aW5nIHNwbGl0KHVuc2lnbmVkIGludCBwb3MpOworICAgIERPTVN0cmluZyBzcGxpdCh1aW50IHBv
cyk7CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGEgbG93ZXJjYXNlIHZlcnNpb24gb2YgdGhl
IHN0cmluZwpAQCAtMTA0LDIwICs5NCwxOSBAQCBwdWJsaWM6CiAgICAgUVN0cmluZyBzdHJpbmco
KSBjb25zdDsKIAogICAgIGludCB0b0ludCgpIGNvbnN0OwotICAgIGtodG1sOjpMZW5ndGgqIHRv
TGVuZ3RoQXJyYXkoaW50JiBsZW4pIGNvbnN0OwotICAgIGtodG1sOjpMZW5ndGgqIHRvQ29vcmRz
QXJyYXkoaW50JiBsZW4pIGNvbnN0OwotICAgIGJvb2wgcGVyY2VudGFnZShpbnQgJl9wZXJjZW50
YWdlKSBjb25zdDsKKyAgICBraHRtbDo6TGVuZ3RoICp0b0xlbmd0aEFycmF5KGludCAmbGVuKSBj
b25zdDsKKyAgICBraHRtbDo6TGVuZ3RoICp0b0Nvb3Jkc0FycmF5KGludCAmbGVuKSBjb25zdDsK
KyAgICBib29sIHBlcmNlbnRhZ2UoaW50ICZyZXN1bHQpIGNvbnN0OwogCiAgICAgRE9NU3RyaW5n
IGNvcHkoKSBjb25zdDsKIAotICAgIGJvb2wgaXNOdWxsKCkgIGNvbnN0IHsgcmV0dXJuIChpbXBs
ID09IDApOyB9CisgICAgYm9vbCBpc051bGwoKSAgY29uc3QgeyByZXR1cm4gbV9pbXBsID09IDA7
IH0KICAgICBib29sIGlzRW1wdHkoKSAgY29uc3Q7CiAKICAgICAvKioKLSAgICAgKiBAaW50ZXJu
YWwgZ2V0IGEgaGFuZGxlIHRvIHRoZSBpbWxlbWVudGF0aW9uIG9mIHRoZSBET01TdHJpbmcKLSAg
ICAgKiBVc2UgYXQgb3duIHJpc2shISEKKyAgICAgKiBAaW50ZXJuYWwgZ2V0IGEgaGFuZGxlIHRv
IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRE9NU3RyaW5nCiAgICAgICovCi0gICAgRE9NU3Ry
aW5nSW1wbCAqaW1wbGVtZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBpbXBsOyB9CisgICAgRE9N
U3RyaW5nSW1wbCAqaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbDsgfQogCiAjaWZkZWYgX19P
QkpDX18KICAgICBET01TdHJpbmcoTlNTdHJpbmcgKik7CkBAIC0xMjksMjUgKzExOCwxMzIgQEAg
cHVibGljOgogICAgIGNvbnN0IGNoYXIgKmFzY2lpKCkgY29uc3Q7CiAjZW5kaWYKIAotcHJvdGVj
dGVkOgotICAgIERPTVN0cmluZ0ltcGwgKmltcGw7Citwcml2YXRlOgorICAgIERPTVN0cmluZ0lt
cGwgKm1faW1wbDsKIH07CiAKLURPTVN0cmluZyBvcGVyYXRvciArIChjb25zdCBET01TdHJpbmcg
JmEsIGNvbnN0IERPTVN0cmluZyAmYik7Ci1ib29sIG9wZXJhdG9yPT0oIGNvbnN0IERPTVN0cmlu
ZyAmYSwgY29uc3QgUVN0cmluZyAmYiApOwotYm9vbCBvcGVyYXRvcj09KCBjb25zdCBET01TdHJp
bmcgJmEsIGNvbnN0IGNoYXIgKmIgKTsKLWlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFT
dHJpbmcgJmIsIGNvbnN0IERPTVN0cmluZyAmYSApIHsgcmV0dXJuIGEgPT0gYjsgfQotaW5saW5l
IGJvb2wgb3BlcmF0b3I9PSggY29uc3QgY2hhciAqYiwgY29uc3QgRE9NU3RyaW5nICZhICkgeyBy
ZXR1cm4gYSA9PSBiOyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBET01TdHJpbmcg
JmEsIGNvbnN0IERPTVN0cmluZyAmYiApIHsgcmV0dXJuICEoYT09Yik7IH0KLWlubGluZSBib29s
IG9wZXJhdG9yIT0oIGNvbnN0IERPTVN0cmluZyAmYSwgY29uc3QgUVN0cmluZyAmYiApIHsgcmV0
dXJuICEoYT09Yik7IH0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IERPTVN0cmluZyAm
YSwgY29uc3QgY2hhciAqYiApICB7IHJldHVybiAhKGE9PWIpOyB9Ci1pbmxpbmUgYm9vbCBvcGVy
YXRvciE9KCBjb25zdCBRU3RyaW5nICZiLCBjb25zdCBET01TdHJpbmcgJmEgKSB7IHJldHVybiAh
KGE9PWIpOyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBjaGFyICpiLCBjb25zdCBE
T01TdHJpbmcgJmEgKSAgeyByZXR1cm4gIShhPT1iKTsgfQotaW5saW5lIGJvb2wgc3RyY21wKCBj
b25zdCBET01TdHJpbmcgJmEsIGNvbnN0IERPTVN0cmluZyAmYiApIHsgcmV0dXJuIGEgIT0gYjsg
fQotCi0vLyByZXR1cm5zIGZhbHNlIHdoZW4gZXF1YWwsIHRydWUgb3RoZXJ3aXNlIChpZ25vcmlu
ZyBjYXNlKQotYm9vbCBzdHJjYXNlY21wKCBjb25zdCBET01TdHJpbmcgJmEsIGNvbnN0IERPTVN0
cmluZyAmYiApOwotYm9vbCBzdHJjYXNlY21wKCBjb25zdCBET01TdHJpbmcmIGEsIGNvbnN0IGNo
YXIqIGIgKTsKK0RPTVN0cmluZyBvcGVyYXRvciArKGNvbnN0IERPTVN0cmluZyAmYSwgY29uc3Qg
RE9NU3RyaW5nICZiKTsKKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IERPTVN0cmluZyAmYSwgY29u
c3QgRE9NU3RyaW5nICZiKTsKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBET01TdHJpbmcgJmEsIGNv
bnN0IFFTdHJpbmcgJmIpOworYm9vbCBvcGVyYXRvcj09KGNvbnN0IERPTVN0cmluZyAmYSwgY29u
c3QgY2hhciAqYik7CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFFTdHJpbmcgJmIsIGNv
bnN0IERPTVN0cmluZyAmYSkgeyByZXR1cm4gYSA9PSBiOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IGNoYXIgKmIsIGNvbnN0IERPTVN0cmluZyAmYSkgeyByZXR1cm4gYSA9PSBiOyB9
CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRE9NU3RyaW5nICZhLCBjb25zdCBET01T
dHJpbmcgJmIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBET01TdHJpbmcgJmEsIGNvbnN0IFFTdHJpbmcgJmIpIHsgcmV0dXJuICEoYSA9PSBiKTsg
fQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBRU3RyaW5nICZiLCBjb25zdCBET01TdHJp
bmcgJmEpIHsgcmV0dXJuICEoYiA9PSBhKTsgfQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBET01TdHJpbmcgJmEsIGNvbnN0IGNoYXIgKmIpICB7IHJldHVybiAhKGEgPT0gYik7IH0KK2lu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgY2hhciAqYiwgY29uc3QgRE9NU3RyaW5nICZhKSAg
eyByZXR1cm4gIShiID09IGEpOyB9CisKK2Jvb2wgZXF1YWxzSWdub3JpbmdDYXNlKGNvbnN0IERP
TVN0cmluZyAmLCBjb25zdCBET01TdHJpbmcgJmIpOworYm9vbCBlcXVhbHNJZ25vcmluZ0Nhc2Uo
Y29uc3QgRE9NU3RyaW5nICYsIGNvbnN0IGNoYXIgKmIpOworaW5saW5lIGJvb2wgZXF1YWxzSWdu
b3JpbmdDYXNlKGNvbnN0IGNoYXIgKmEsIGNvbnN0IERPTVN0cmluZyAmYikgeyByZXR1cm4gYiA9
PSBhOyB9CisKK2lubGluZSBET01TdHJpbmc6OkRPTVN0cmluZyhET01TdHJpbmdJbXBsICppKQor
eworICAgIGlmIChpKQorICAgICAgICBpLT5yZWYoKTsKKyAgICBtX2ltcGwgPSBpOworfQorCitp
bmxpbmUgRE9NU3RyaW5nOjpET01TdHJpbmcoY29uc3QgRE9NU3RyaW5nICZvdGhlcikKK3sKKyAg
ICBET01TdHJpbmdJbXBsICppID0gb3RoZXIubV9pbXBsOworICAgIGlmIChpKQorICAgICAgICBp
LT5yZWYoKTsKKyAgICBtX2ltcGwgPSBpOworfQorCitpbmxpbmUgRE9NU3RyaW5nICZET01TdHJp
bmc6Om9wZXJhdG9yID0oY29uc3QgRE9NU3RyaW5nICZvdGhlcikKK3sKKyAgICBET01TdHJpbmdJ
bXBsICppID0gb3RoZXIubV9pbXBsOworICAgIGlmIChpKQorICAgICAgICBpLT5yZWYoKTsKKyAg
ICBET01TdHJpbmdJbXBsICpvbGQgPSBtX2ltcGw7CisgICAgaWYgKG9sZCkKKyAgICAgICAgb2xk
LT5kZXJlZigpOworICAgIG1faW1wbCA9IGk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitpbmxp
bmUgdWludCBET01TdHJpbmc6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgRE9NU3RyaW5nSW1wbCAq
aW1wbCA9IG1faW1wbDsKKyAgICByZXR1cm4gaW1wbCA/IGltcGwtPmwgOiAwOworfQorCitpbmxp
bmUgUUNoYXIgKkRPTVN0cmluZzo6dW5pY29kZSgpIGNvbnN0Cit7CisgICAgRE9NU3RyaW5nSW1w
bCAqaW1wbCA9IG1faW1wbDsKKyAgICByZXR1cm4gaW1wbCA/IGltcGwtPnMgOiAwOworfQorCitp
bmxpbmUgdm9pZCBET01TdHJpbmc6OnRydW5jYXRlKHVpbnQgbGVuKQoreworICAgIGlmIChET01T
dHJpbmdJbXBsICppbXBsID0gbV9pbXBsKQorICAgICAgICBpbXBsLT50cnVuY2F0ZShsZW4pOwor
fQorCitpbmxpbmUgdm9pZCBET01TdHJpbmc6OnJlbW92ZSh1aW50IHBvcywgaW50IGxlbikKK3sK
KyAgICBpZiAoRE9NU3RyaW5nSW1wbCAqaW1wbCA9IG1faW1wbCkKKyAgICAgICAgaW1wbC0+cmVt
b3ZlKHBvcywgbGVuKTsKK30KKworaW5saW5lIERPTVN0cmluZyBET01TdHJpbmc6OnN1YnN0cmlu
Zyh1aW50IHBvcywgdWludCBsZW4pIGNvbnN0Cit7CisgICAgRE9NU3RyaW5nSW1wbCAqaW1wbCA9
IG1faW1wbDsKKyAgICByZXR1cm4gaW1wbCA/IGltcGwtPnN1YnN0cmluZyhwb3MsIGxlbikgOiBE
T01TdHJpbmcoKTsKK30KKworaW5saW5lIERPTVN0cmluZyBET01TdHJpbmc6OnNwbGl0KHVpbnQg
cG9zKQoreworICAgIERPTVN0cmluZ0ltcGwgKmltcGwgPSBtX2ltcGw7CisgICAgcmV0dXJuIGlt
cGwgPyBpbXBsLT5zcGxpdChwb3MpIDogRE9NU3RyaW5nKCk7Cit9CisKK2lubGluZSBET01TdHJp
bmcgRE9NU3RyaW5nOjpsb3dlcigpIGNvbnN0Cit7CisgICAgRE9NU3RyaW5nSW1wbCAqaW1wbCA9
IG1faW1wbDsKKyAgICByZXR1cm4gaW1wbCA/IGltcGwtPmxvd2VyKCkgOiBET01TdHJpbmcoKTsK
K30KKworaW5saW5lIERPTVN0cmluZyBET01TdHJpbmc6OnVwcGVyKCkgY29uc3QKK3sKKyAgICBE
T01TdHJpbmdJbXBsICppbXBsID0gbV9pbXBsOworICAgIHJldHVybiBpbXBsID8gaW1wbC0+dXBw
ZXIoKSA6IERPTVN0cmluZygpOworfQorCitpbmxpbmUgaW50IERPTVN0cmluZzo6dG9JbnQoKSBj
b25zdAoreworICAgIERPTVN0cmluZ0ltcGwgKmltcGwgPSBtX2ltcGw7CisgICAgcmV0dXJuIGlt
cGwgPyBpbXBsLT50b0ludCgpIDogMDsKK30KKworaW5saW5lIERPTVN0cmluZyBET01TdHJpbmc6
OmNvcHkoKSBjb25zdAoreworICAgIERPTVN0cmluZ0ltcGwgKmltcGwgPSBtX2ltcGw7CisgICAg
cmV0dXJuIGltcGwgPyBpbXBsLT5jb3B5KCkgOiAwOworfQorCitpbmxpbmUgYm9vbCBET01TdHJp
bmc6OmlzRW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiBsZW5ndGgoKSA9PSAwOworfQorCitp
bmxpbmUga2h0bWw6Okxlbmd0aCAqRE9NU3RyaW5nOjp0b0Nvb3Jkc0FycmF5KGludCYgbGVuKSBj
b25zdCAKK3sgCisgICAgRE9NU3RyaW5nSW1wbCAqaW1wbCA9IG1faW1wbDsKKyAgICByZXR1cm4g
aW1wbCA/IGltcGwtPnRvQ29vcmRzQXJyYXkobGVuKSA6IE5VTEw7Cit9CisKK2lubGluZSBraHRt
bDo6TGVuZ3RoICpET01TdHJpbmc6OnRvTGVuZ3RoQXJyYXkoaW50JiBsZW4pIGNvbnN0IAoreyAK
KyAgICBET01TdHJpbmdJbXBsICppbXBsID0gbV9pbXBsOworICAgIHJldHVybiBpbXBsID8gaW1w
bC0+dG9MZW5ndGhBcnJheShsZW4pIDogTlVMTDsKK30KKworfQogCi19OwogI2VuZGlmCkluZGV4
OiBraHRtbC9lY21hL2RvbXBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvZWNtYS9kb21wYXJzZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjQKZGlmZiAtcCAtdSAtcjEuNCBraHRtbC9lY21hL2RvbXBhcnNlci5jcHAKLS0tIGtodG1sL2Vj
bWEvZG9tcGFyc2VyLmNwcAkxNiBBdWcgMjAwNSAwMDo0Nzo0MyAtMDAwMAkxLjQKKysrIGtodG1s
L2VjbWEvZG9tcGFyc2VyLmNwcAkyMSBBdWcgMjAwNSAxNjo1MTowNyAtMDAwMApAQCAtODUsNyAr
ODUsNyBAQCBWYWx1ZUltcCAqRE9NUGFyc2VyUHJvdG9GdW5jOjpjYWxsQXNGdW5jCiAgICAgICBR
U3RyaW5nIGNvbnRlbnRUeXBlID0gYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpLnN0
cmlwV2hpdGVTcGFjZSgpOwogCiAgICAgICBpZiAoY29udGVudFR5cGUgPT0gInRleHQveG1sIiB8
fCBjb250ZW50VHlwZSA9PSAiYXBwbGljYXRpb24veG1sIiB8fCBjb250ZW50VHlwZSA9PSAiYXBw
bGljYXRpb24veGh0bWwreG1sIikgewotICAgICAgICBEb2N1bWVudEltcGwgKmRvY0ltcGwgPSBw
YXJzZXItPmRvYy0+aW1wbGVtZW50YXRpb24oKS0+Y3JlYXRlRG9jdW1lbnQoKTsKKyAgICAgICAg
RG9jdW1lbnRJbXBsICpkb2NJbXBsID0gcGFyc2VyLT5kb2MtPmltcGwoKS0+Y3JlYXRlRG9jdW1l
bnQoKTsKIAogICAgICAgICBkb2NJbXBsLT5vcGVuKCk7CiAgICAgICAgIGRvY0ltcGwtPndyaXRl
KHN0cik7CkluZGV4OiBraHRtbC9lY21hL2tqc19kb20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuODgKZGlmZiAtcCAtdSAtcjEuODgga2h0bWwvZWNtYS9ranNfZG9tLmNwcAotLS0g
a2h0bWwvZWNtYS9ranNfZG9tLmNwcAkxOSBBdWcgMjAwNSAyMzowOToxNyAtMDAwMAkxLjg4Cisr
KyBraHRtbC9lY21hL2tqc19kb20uY3BwCTIxIEF1ZyAyMDA1IDE2OjUxOjEwIC0wMDAwCkBAIC00
NTcsNyArNDU3LDcgQEAgdm9pZCBET01Ob2RlOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZQog
ICAgIG5vZGUuc2V0Tm9kZVZhbHVlKHZhbHVlLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhj
ZXB0aW9uKTsKICAgICBicmVhazsKICAgY2FzZSBQcmVmaXg6Ci0gICAgbm9kZS5zZXRQcmVmaXgo
dmFsdWUtPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLmltcGxlbWVudGF0aW9uKCksIGV4Y2VwdGlv
bik7CisgICAgbm9kZS5zZXRQcmVmaXgodmFsdWUtPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLmlt
cGwoKSwgZXhjZXB0aW9uKTsKICAgICBicmVhazsKICAgY2FzZSBPbkFib3J0OgogICAgIHNldExp
c3RlbmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6OkFCT1JUX0VWRU5ULHZhbHVlKTsKQEAgLTk0OSw3
ICs5NDksNyBAQCBWYWx1ZUltcCAqRE9NRG9jdW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoCiAgIGNh
c2UgRG9jVHlwZToKICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGRvYy5kb2N0eXBlKCkpOwog
ICBjYXNlIEltcGxlbWVudGF0aW9uOgotICAgIHJldHVybiBnZXRET01ET01JbXBsZW1lbnRhdGlv
bihleGVjLGRvYy5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICByZXR1cm4gZ2V0RE9NRE9NSW1wbGVt
ZW50YXRpb24oZXhlYyxkb2MuaW1wbCgpKTsKICAgY2FzZSBEb2N1bWVudEVsZW1lbnQ6CiAgICAg
cmV0dXJuIGdldERPTU5vZGUoZXhlYyxkb2MuZG9jdW1lbnRFbGVtZW50KCkpOwogICBjYXNlIFN0
eWxlU2hlZXRzOgpJbmRleDoga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMTM1CmRpZmYgLXAgLXUgLXIxLjEzNSBraHRtbC9lY21hL2tqc19odG1s
LmNwcAotLS0ga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAJMTYgQXVnIDIwMDUgMDA6NDc6NDQgLTAw
MDAJMS4xMzUKKysrIGtodG1sL2VjbWEva2pzX2h0bWwuY3BwCTIxIEF1ZyAyMDA1IDE2OjUxOjE2
IC0wMDAwCkBAIC00ODcsOSArNDg3LDkgQEAgdm9pZCBLSlM6OkhUTUxEb2N1bWVudDo6cHV0VmFs
dWVQcm9wZXJ0eQogICAgIHsKICAgICAgIERPTVN0cmluZyBtb2RlU3RyaW5nID0gdmFsdWUtPnRv
U3RyaW5nKGV4ZWMpLnN0cmluZygpOwogICAgICAgRG9jdW1lbnRJbXBsOjpJbmhlcml0ZWRCb29s
IG1vZGU7Ci0gICAgICBpZiAoIXN0cmNhc2VjbXAobW9kZVN0cmluZywgIm9uIikpCisgICAgICBp
ZiAoZXF1YWxzSWdub3JpbmdDYXNlKG1vZGVTdHJpbmcsICJvbiIpKQogICAgICAgICBtb2RlID0g
RG9jdW1lbnRJbXBsOjpvbjsKLSAgICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKG1vZGVTdHJpbmcs
ICJvZmYiKSkKKyAgICAgIGVsc2UgaWYgKGVxdWFsc0lnbm9yaW5nQ2FzZShtb2RlU3RyaW5nLCAi
b2ZmIikpCiAgICAgICAgIG1vZGUgPSBEb2N1bWVudEltcGw6Om9mZjsKICAgICAgIGVsc2UKICAg
ICAgICAgbW9kZSA9IERvY3VtZW50SW1wbDo6aW5oZXJpdDsKQEAgLTU2NSw3NSArNTY1LDc1IEBA
IGNvbnN0IENsYXNzSW5mbyogS0pTOjpIVE1MRWxlbWVudDo6Y2xhc3MKICAgICAvLyBGSVhNRTog
V2Ugd2FudCB0byB1c2UgSGFzaE1hcCBoZXJlLCBidXQgdGhlcmUgYXJlIGNvbXBpbGVyIGlzc3Vl
cyB0byBkZWFsIHdpdGguCiAgICAgc3RhdGljIFFQdHJEaWN0PGNvbnN0IENsYXNzSW5mbz4gY2xh
c3NJbmZvRGljdDsKICAgICBpZiAoY2xhc3NJbmZvRGljdC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
Y2xhc3NJbmZvRGljdC5pbnNlcnQoYVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAm
YV9pbmZvKTsKLSAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoYXBwbGV0VGFnLmxvY2FsTmFt
ZSgpLmltcGxlbWVudGF0aW9uKCksICZhcHBsZXRfaW5mbyk7Ci0gICAgICAgIGNsYXNzSW5mb0Rp
Y3QuaW5zZXJ0KGFyZWFUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJmFyZWFfaW5m
byk7Ci0gICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGJhc2VUYWcubG9jYWxOYW1lKCkuaW1w
bGVtZW50YXRpb24oKSwgJmJhc2VfaW5mbyk7Ci0gICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0
KGJhc2Vmb250VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZiYXNlRm9udF9pbmZv
KTsKLSAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoYmxvY2txdW90ZVRhZy5sb2NhbE5hbWUo
KS5pbXBsZW1lbnRhdGlvbigpLCAmYmxvY2tRdW90ZV9pbmZvKTsKLSAgICAgICAgY2xhc3NJbmZv
RGljdC5pbnNlcnQoYm9keVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmYm9keV9p
bmZvKTsKLSAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoYnJUYWcubG9jYWxOYW1lKCkuaW1w
bGVtZW50YXRpb24oKSwgJmJyX2luZm8pOwotICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChi
dXR0b25UYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJmJ1dHRvbl9pbmZvKTsKLSAg
ICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoY2FudmFzVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVu
dGF0aW9uKCksICZjYW52YXNfaW5mbyk7Ci0gICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGNh
cHRpb25UYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJmNhcHRpb25faW5mbyk7Ci0g
ICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGNvbFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRh
dGlvbigpLCAmY29sX2luZm8pOwotICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChjb2xncm91
cFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmY29sX2luZm8pOwotICAgICAgICBj
bGFzc0luZm9EaWN0Lmluc2VydChkZWxUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwg
Jm1vZF9pbmZvKTsKLSAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoZGlyVGFnLmxvY2FsTmFt
ZSgpLmltcGxlbWVudGF0aW9uKCksICZkaXJfaW5mbyk7Ci0gICAgICAgIGNsYXNzSW5mb0RpY3Qu
aW5zZXJ0KGRpdlRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmZGl2X2luZm8pOwot
ICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChkbFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRh
dGlvbigpLCAmZGxfaW5mbyk7Ci0gICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGZpZWxkc2V0
VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZmaWVsZFNldF9pbmZvKTsKLSAgICAg
ICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoZm9udFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlv
bigpLCAmZm9udF9pbmZvKTsKLSAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoZm9ybVRhZy5s
b2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmZm9ybV9pbmZvKTsKLSAgICAgICAgY2xhc3NJ
bmZvRGljdC5pbnNlcnQoZnJhbWVUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJmZy
YW1lX2luZm8pOwotICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChmcmFtZXNldFRhZy5sb2Nh
bE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmZnJhbWVTZXRfaW5mbyk7Ci0gICAgICAgIGNsYXNz
SW5mb0RpY3QuaW5zZXJ0KGgxVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZoZWFk
aW5nX2luZm8pOwotICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChoMlRhZy5sb2NhbE5hbWUo
KS5pbXBsZW1lbnRhdGlvbigpLCAmaGVhZGluZ19pbmZvKTsKLSAgICAgICAgY2xhc3NJbmZvRGlj
dC5pbnNlcnQoaDNUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJmhlYWRpbmdfaW5m
byk7Ci0gICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGg0VGFnLmxvY2FsTmFtZSgpLmltcGxl
bWVudGF0aW9uKCksICZoZWFkaW5nX2luZm8pOwotICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChoNVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmaGVhZGluZ19pbmZvKTsKLSAg
ICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoaDZUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRp
b24oKSwgJmhlYWRpbmdfaW5mbyk7Ci0gICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGhlYWRU
YWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJmhlYWRfaW5mbyk7Ci0gICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KGhyVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZo
cl9pbmZvKTsKLSAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoaHRtbFRhZy5sb2NhbE5hbWUo
KS5pbXBsZW1lbnRhdGlvbigpLCAmaHRtbF9pbmZvKTsKLSAgICAgICAgY2xhc3NJbmZvRGljdC5p
bnNlcnQoaWZyYW1lVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZpRnJhbWVfaW5m
byk7Ci0gICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGltZ1RhZy5sb2NhbE5hbWUoKS5pbXBs
ZW1lbnRhdGlvbigpLCAmaW1nX2luZm8pOwotICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChp
bnB1dFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmaW5wdXRfaW5mbyk7Ci0gICAg
ICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGluc1RhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlv
bigpLCAmbW9kX2luZm8pOwotICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChpc2luZGV4VGFn
LmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZpc0luZGV4X2luZm8pOwotICAgICAgICBj
bGFzc0luZm9EaWN0Lmluc2VydChsYWJlbFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigp
LCAmbGFiZWxfaW5mbyk7Ci0gICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGxlZ2VuZFRhZy5s
b2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmbGVnZW5kX2luZm8pOwotICAgICAgICBjbGFz
c0luZm9EaWN0Lmluc2VydChsaVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmbGlf
aW5mbyk7Ci0gICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGxpbmtUYWcubG9jYWxOYW1lKCku
aW1wbGVtZW50YXRpb24oKSwgJmxpbmtfaW5mbyk7Ci0gICAgICAgIGNsYXNzSW5mb0RpY3QuaW5z
ZXJ0KG1hcFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmbWFwX2luZm8pOwotICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChtYXJxdWVlVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVu
dGF0aW9uKCksICZtYXJxdWVlX2luZm8pOwotICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydCht
ZW51VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZtZW51X2luZm8pOwotICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChtZXRhVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9u
KCksICZtZXRhX2luZm8pOwotICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChvYmplY3RUYWcu
bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJm9iamVjdF9pbmZvKTsKLSAgICAgICAgY2xh
c3NJbmZvRGljdC5pbnNlcnQob2xUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJm9s
X2luZm8pOwotICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChvcHRpb25UYWcubG9jYWxOYW1l
KCkuaW1wbGVtZW50YXRpb24oKSwgJm9wdGlvbl9pbmZvKTsKLSAgICAgICAgY2xhc3NJbmZvRGlj
dC5pbnNlcnQob3B0Z3JvdXBUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJm9wdEdy
b3VwX2luZm8pOwotICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChwVGFnLmxvY2FsTmFtZSgp
LmltcGxlbWVudGF0aW9uKCksICZwX2luZm8pOwotICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChwYXJhbVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmcGFyYW1faW5mbyk7Ci0g
ICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KHByZVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRh
dGlvbigpLCAmcHJlX2luZm8pOwotICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChxVGFnLmxv
Y2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZxX2luZm8pOwotICAgICAgICBjbGFzc0luZm9E
aWN0Lmluc2VydChzY3JpcHRUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJnNjcmlw
dF9pbmZvKTsKLSAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoc2VsZWN0VGFnLmxvY2FsTmFt
ZSgpLmltcGxlbWVudGF0aW9uKCksICZzZWxlY3RfaW5mbyk7Ci0gICAgICAgIGNsYXNzSW5mb0Rp
Y3QuaW5zZXJ0KHN0eWxlVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZzdHlsZV9p
bmZvKTsKLSAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQodGFibGVUYWcubG9jYWxOYW1lKCku
aW1wbGVtZW50YXRpb24oKSwgJnRhYmxlX2luZm8pOwotICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydCh0Ym9keVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmdGFibGVzZWN0aW9u
X2luZm8pOwotICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydCh0ZFRhZy5sb2NhbE5hbWUoKS5p
bXBsZW1lbnRhdGlvbigpLCAmdGFibGVjZWxsX2luZm8pOwotICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydCh0ZXh0YXJlYVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmdGV4dEFy
ZWFfaW5mbyk7Ci0gICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KHRoVGFnLmxvY2FsTmFtZSgp
LmltcGxlbWVudGF0aW9uKCksICZ0YWJsZWNlbGxfaW5mbyk7Ci0gICAgICAgIGNsYXNzSW5mb0Rp
Y3QuaW5zZXJ0KHRoZWFkVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZ0YWJsZXNl
Y3Rpb25faW5mbyk7Ci0gICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KHRmb290VGFnLmxvY2Fs
TmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZ0YWJsZXNlY3Rpb25faW5mbyk7Ci0gICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KHRpdGxlVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCks
ICZ0aXRsZV9pbmZvKTsKLSAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQodHJUYWcubG9jYWxO
YW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJnRyX2luZm8pOwotICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydCh1bFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmdWxfaW5mbyk7Cisg
ICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGFUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmYV9p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoYXBwbGV0VGFnLmxvY2FsTmFtZSgp
LmltcGwoKSwgJmFwcGxldF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoYXJl
YVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZhcmVhX2luZm8pOworICAgICAgICBjbGFzc0luZm9E
aWN0Lmluc2VydChiYXNlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJmJhc2VfaW5mbyk7CisgICAg
ICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGJhc2Vmb250VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
JmJhc2VGb250X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChibG9ja3F1b3Rl
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJmJsb2NrUXVvdGVfaW5mbyk7CisgICAgICAgIGNsYXNz
SW5mb0RpY3QuaW5zZXJ0KGJvZHlUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmYm9keV9pbmZvKTsK
KyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoYnJUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAm
YnJfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGJ1dHRvblRhZy5sb2NhbE5h
bWUoKS5pbXBsKCksICZidXR0b25faW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0
KGNhbnZhc1RhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZjYW52YXNfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KGNhcHRpb25UYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmY2FwdGlv
bl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoY29sVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSwgJmNvbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoY29sZ3Jv
dXBUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmY29sX2luZm8pOworICAgICAgICBjbGFzc0luZm9E
aWN0Lmluc2VydChkZWxUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmbW9kX2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChkaXJUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmZGlyX2lu
Zm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChkaXZUYWcubG9jYWxOYW1lKCkuaW1w
bCgpLCAmZGl2X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChkbFRhZy5sb2Nh
bE5hbWUoKS5pbXBsKCksICZkbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQo
ZmllbGRzZXRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmZmllbGRTZXRfaW5mbyk7CisgICAgICAg
IGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGZvbnRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmZm9udF9p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoZm9ybVRhZy5sb2NhbE5hbWUoKS5p
bXBsKCksICZmb3JtX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChmcmFtZVRh
Zy5sb2NhbE5hbWUoKS5pbXBsKCksICZmcmFtZV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGlj
dC5pbnNlcnQoZnJhbWVzZXRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmZnJhbWVTZXRfaW5mbyk7
CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGgxVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
JmhlYWRpbmdfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGgyVGFnLmxvY2Fs
TmFtZSgpLmltcGwoKSwgJmhlYWRpbmdfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5z
ZXJ0KGgzVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJmhlYWRpbmdfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KGg0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJmhlYWRpbmdfaW5m
byk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGg1VGFnLmxvY2FsTmFtZSgpLmltcGwo
KSwgJmhlYWRpbmdfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGg2VGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgJmhlYWRpbmdfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3Qu
aW5zZXJ0KGhlYWRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmaGVhZF9pbmZvKTsKKyAgICAgICAg
Y2xhc3NJbmZvRGljdC5pbnNlcnQoaHJUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmaHJfaW5mbyk7
CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGh0bWxUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCAmaHRtbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoaWZyYW1lVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgJmlGcmFtZV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5p
bnNlcnQoaW1nVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJmltZ19pbmZvKTsKKyAgICAgICAgY2xh
c3NJbmZvRGljdC5pbnNlcnQoaW5wdXRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmaW5wdXRfaW5m
byk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGluc1RhZy5sb2NhbE5hbWUoKS5pbXBs
KCksICZtb2RfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGlzaW5kZXhUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpLCAmaXNJbmRleF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGlj
dC5pbnNlcnQobGFiZWxUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmbGFiZWxfaW5mbyk7CisgICAg
ICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGxlZ2VuZFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZs
ZWdlbmRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KGxpVGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSwgJmxpX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChsaW5r
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJmxpbmtfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0Rp
Y3QuaW5zZXJ0KG1hcFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZtYXBfaW5mbyk7CisgICAgICAg
IGNsYXNzSW5mb0RpY3QuaW5zZXJ0KG1hcnF1ZWVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmbWFy
cXVlZV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQobWVudVRhZy5sb2NhbE5h
bWUoKS5pbXBsKCksICZtZW51X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydCht
ZXRhVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJm1ldGFfaW5mbyk7CisgICAgICAgIGNsYXNzSW5m
b0RpY3QuaW5zZXJ0KG9iamVjdFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZvYmplY3RfaW5mbyk7
CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KG9sVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
Jm9sX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChvcHRpb25UYWcubG9jYWxO
YW1lKCkuaW1wbCgpLCAmb3B0aW9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChvcHRncm91cFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZvcHRHcm91cF9pbmZvKTsKKyAgICAg
ICAgY2xhc3NJbmZvRGljdC5pbnNlcnQocFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZwX2luZm8p
OworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChwYXJhbVRhZy5sb2NhbE5hbWUoKS5pbXBs
KCksICZwYXJhbV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQocHJlVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgJnByZV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQocVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZxX2luZm8pOworICAgICAgICBjbGFzc0luZm9E
aWN0Lmluc2VydChzY3JpcHRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmc2NyaXB0X2luZm8pOwor
ICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChzZWxlY3RUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCAmc2VsZWN0X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChzdHlsZVRhZy5s
b2NhbE5hbWUoKS5pbXBsKCksICZzdHlsZV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5p
bnNlcnQodGFibGVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmdGFibGVfaW5mbyk7CisgICAgICAg
IGNsYXNzSW5mb0RpY3QuaW5zZXJ0KHRib2R5VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJnRhYmxl
c2VjdGlvbl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQodGRUYWcubG9jYWxO
YW1lKCkuaW1wbCgpLCAmdGFibGVjZWxsX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydCh0ZXh0YXJlYVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZ0ZXh0QXJlYV9pbmZvKTsKKyAg
ICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQodGhUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmdGFi
bGVjZWxsX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydCh0aGVhZFRhZy5sb2Nh
bE5hbWUoKS5pbXBsKCksICZ0YWJsZXNlY3Rpb25faW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0Rp
Y3QuaW5zZXJ0KHRmb290VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJnRhYmxlc2VjdGlvbl9pbmZv
KTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQodGl0bGVUYWcubG9jYWxOYW1lKCkuaW1w
bCgpLCAmdGl0bGVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KHRyVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgJnRyX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dCh1bFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZ1bF9pbmZvKTsKICAgICB9CiAgICAgCiAgICAg
SFRNTEVsZW1lbnRJbXBsKiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4o
aW1wbCgpKTsKLSAgICBjb25zdCBDbGFzc0luZm8qIHJlc3VsdCA9IGNsYXNzSW5mb0RpY3QuZmlu
ZChlbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICBjb25zdCBDbGFz
c0luZm8qIHJlc3VsdCA9IGNsYXNzSW5mb0RpY3QuZmluZChlbGVtZW50LT5sb2NhbE5hbWUoKS5p
bXBsKCkpOwogICAgIGlmIChyZXN1bHQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgcmV0
dXJuICZpbmZvOwpAQCAtNzAwLDc1ICs3MDAsNzUgQEAgY29uc3QgSFRNTEVsZW1lbnQ6OkFjY2Vz
c29ycyogSFRNTEVsZW1lbgogICAgIC8vIEZJWE1FOiBXZSB3YW50IHRvIHVzZSBIYXNoTWFwIGhl
cmUsIGJ1dCB0aGVyZSBhcmUgY29tcGlsZXIgaXNzdWVzIHRvIGRlYWwgd2l0aC4KICAgICBzdGF0
aWMgUVB0ckRpY3Q8Y29uc3QgSFRNTEVsZW1lbnQ6OkFjY2Vzc29ycz4gZ2V0U2V0SW5mb0RpY3Q7
CiAgICAgaWYgKGdldFNldEluZm9EaWN0LmlzRW1wdHkoKSkgewotICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoYVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmYV9hY2Nlc3Nv
cnMpOwotICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoYXBwbGV0VGFnLmxvY2FsTmFtZSgp
LmltcGxlbWVudGF0aW9uKCksICZhcHBsZXRfYWNjZXNzb3JzKTsKLSAgICAgICAgZ2V0U2V0SW5m
b0RpY3QuaW5zZXJ0KGFyZWFUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJmFyZWFf
YWNjZXNzb3JzKTsKLSAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KGJhc2VUYWcubG9jYWxO
YW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJmJhc2VfYWNjZXNzb3JzKTsKLSAgICAgICAgZ2V0U2V0
SW5mb0RpY3QuaW5zZXJ0KGJhc2Vmb250VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCks
ICZiYXNlRm9udF9hY2Nlc3NvcnMpOwotICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoYmxv
Y2txdW90ZVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmYmxvY2tRdW90ZV9hY2Nl
c3NvcnMpOyAKLSAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KGJvZHlUYWcubG9jYWxOYW1l
KCkuaW1wbGVtZW50YXRpb24oKSwgJmJvZHlfYWNjZXNzb3JzKTsKLSAgICAgICAgZ2V0U2V0SW5m
b0RpY3QuaW5zZXJ0KGJyVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZicl9hY2Nl
c3NvcnMpOwotICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoYnV0dG9uVGFnLmxvY2FsTmFt
ZSgpLmltcGxlbWVudGF0aW9uKCksICZidXR0b25fYWNjZXNzb3JzKTsKLSAgICAgICAgZ2V0U2V0
SW5mb0RpY3QuaW5zZXJ0KGNhbnZhc1RhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAm
Y2FudmFzX2FjY2Vzc29ycyk7Ci0gICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChjYXB0aW9u
VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZjYXB0aW9uX2FjY2Vzc29ycyk7Ci0g
ICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChjb2xUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50
YXRpb24oKSwgJmNvbF9hY2Nlc3NvcnMpOwotICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
Y29sZ3JvdXBUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJmNvbF9hY2Nlc3NvcnMp
OwotICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoZGVsVGFnLmxvY2FsTmFtZSgpLmltcGxl
bWVudGF0aW9uKCksICZtb2RfYWNjZXNzb3JzKTsKLSAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5z
ZXJ0KGRpclRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmZGlyX2FjY2Vzc29ycyk7
Ci0gICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChkaXZUYWcubG9jYWxOYW1lKCkuaW1wbGVt
ZW50YXRpb24oKSwgJmRpdl9hY2Nlc3NvcnMpOwotICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNl
cnQoZGxUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJmRsX2FjY2Vzc29ycyk7Ci0g
ICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChmaWVsZHNldFRhZy5sb2NhbE5hbWUoKS5pbXBs
ZW1lbnRhdGlvbigpLCAmZmllbGRTZXRfYWNjZXNzb3JzKTsKLSAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KGZvbnRUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJmZvbnRfYWNj
ZXNzb3JzKTsKLSAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KGZvcm1UYWcubG9jYWxOYW1l
KCkuaW1wbGVtZW50YXRpb24oKSwgJmZvcm1fYWNjZXNzb3JzKTsKLSAgICAgICAgZ2V0U2V0SW5m
b0RpY3QuaW5zZXJ0KGZyYW1lVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZmcmFt
ZV9hY2Nlc3NvcnMpOwotICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoZnJhbWVzZXRUYWcu
bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJmZyYW1lU2V0X2FjY2Vzc29ycyk7Ci0gICAg
ICAgIGdldFNldEluZm9EaWN0Lmluc2VydChoMVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlv
bigpLCAmaGVhZGluZ19hY2Nlc3NvcnMpOwotICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
aDJUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJmhlYWRpbmdfYWNjZXNzb3JzKTsK
LSAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KGgzVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVu
dGF0aW9uKCksICZoZWFkaW5nX2FjY2Vzc29ycyk7Ci0gICAgICAgIGdldFNldEluZm9EaWN0Lmlu
c2VydChoNFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmaGVhZGluZ19hY2Nlc3Nv
cnMpOwotICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoaDVUYWcubG9jYWxOYW1lKCkuaW1w
bGVtZW50YXRpb24oKSwgJmhlYWRpbmdfYWNjZXNzb3JzKTsKLSAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KGg2VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZoZWFkaW5nX2Fj
Y2Vzc29ycyk7Ci0gICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChoZWFkVGFnLmxvY2FsTmFt
ZSgpLmltcGxlbWVudGF0aW9uKCksICZoZWFkX2FjY2Vzc29ycyk7Ci0gICAgICAgIGdldFNldElu
Zm9EaWN0Lmluc2VydChoclRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmaHJfYWNj
ZXNzb3JzKTsgCi0gICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChodG1sVGFnLmxvY2FsTmFt
ZSgpLmltcGxlbWVudGF0aW9uKCksICZodG1sX2FjY2Vzc29ycyk7Ci0gICAgICAgIGdldFNldElu
Zm9EaWN0Lmluc2VydChpZnJhbWVUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJmlG
cmFtZV9hY2Nlc3NvcnMpOwotICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoaW1nVGFnLmxv
Y2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZpbWdfYWNjZXNzb3JzKTsKLSAgICAgICAgZ2V0
U2V0SW5mb0RpY3QuaW5zZXJ0KGlucHV0VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCks
ICZpbnB1dF9hY2Nlc3NvcnMpOwotICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoaW5zVGFn
LmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZtb2RfYWNjZXNzb3JzKTsKLSAgICAgICAg
Z2V0U2V0SW5mb0RpY3QuaW5zZXJ0KGlzaW5kZXhUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRp
b24oKSwgJmlzSW5kZXhfYWNjZXNzb3JzKTsKLSAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0
KGxhYmVsVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZsYWJlbF9hY2Nlc3NvcnMp
OwotICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQobGVnZW5kVGFnLmxvY2FsTmFtZSgpLmlt
cGxlbWVudGF0aW9uKCksICZsZWdlbmRfYWNjZXNzb3JzKTsKLSAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KGxpVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZsaV9hY2Nlc3Nv
cnMpOwotICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQobGlua1RhZy5sb2NhbE5hbWUoKS5p
bXBsZW1lbnRhdGlvbigpLCAmbGlua19hY2Nlc3NvcnMpOwotICAgICAgICBnZXRTZXRJbmZvRGlj
dC5pbnNlcnQobWFwVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZtYXBfYWNjZXNz
b3JzKTsKLSAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KG1hcnF1ZWVUYWcubG9jYWxOYW1l
KCkuaW1wbGVtZW50YXRpb24oKSwgJm1hcnF1ZWVfYWNjZXNzb3JzKTsKLSAgICAgICAgZ2V0U2V0
SW5mb0RpY3QuaW5zZXJ0KG1lbnVUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJm1l
bnVfYWNjZXNzb3JzKTsKLSAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KG1ldGFUYWcubG9j
YWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJm1ldGFfYWNjZXNzb3JzKTsKLSAgICAgICAgZ2V0
U2V0SW5mb0RpY3QuaW5zZXJ0KG9iamVjdFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigp
LCAmb2JqZWN0X2FjY2Vzc29ycyk7Ci0gICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChvbFRh
Zy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmb2xfYWNjZXNzb3JzKTsKLSAgICAgICAg
Z2V0U2V0SW5mb0RpY3QuaW5zZXJ0KG9wdGlvblRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlv
bigpLCAmb3B0aW9uX2FjY2Vzc29ycyk7Ci0gICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChv
cHRncm91cFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmb3B0R3JvdXBfYWNjZXNz
b3JzKTsKLSAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KHBUYWcubG9jYWxOYW1lKCkuaW1w
bGVtZW50YXRpb24oKSwgJnBfYWNjZXNzb3JzKTsKLSAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5z
ZXJ0KHBhcmFtVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZwYXJhbV9hY2Nlc3Nv
cnMpOwotICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQocHJlVGFnLmxvY2FsTmFtZSgpLmlt
cGxlbWVudGF0aW9uKCksICZwcmVfYWNjZXNzb3JzKTsKLSAgICAgICAgZ2V0U2V0SW5mb0RpY3Qu
aW5zZXJ0KHFUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJnFfYWNjZXNzb3JzKTsK
LSAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KHNjcmlwdFRhZy5sb2NhbE5hbWUoKS5pbXBs
ZW1lbnRhdGlvbigpLCAmc2NyaXB0X2FjY2Vzc29ycyk7Ci0gICAgICAgIGdldFNldEluZm9EaWN0
Lmluc2VydChzZWxlY3RUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJnNlbGVjdF9h
Y2Nlc3NvcnMpOwotICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoc3R5bGVUYWcubG9jYWxO
YW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJnN0eWxlX2FjY2Vzc29ycyk7Ci0gICAgICAgIGdldFNl
dEluZm9EaWN0Lmluc2VydCh0YWJsZVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAm
dGFibGVfYWNjZXNzb3JzKTsKLSAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KHRib2R5VGFn
LmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZ0YWJsZXNlY3Rpb25fYWNjZXNzb3JzKTsK
LSAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KHRkVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVu
dGF0aW9uKCksICZ0YWJsZWNlbGxfYWNjZXNzb3JzKTsKLSAgICAgICAgZ2V0U2V0SW5mb0RpY3Qu
aW5zZXJ0KHRleHRhcmVhVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZ0ZXh0QXJl
YV9hY2Nlc3NvcnMpOwotICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQodGhUYWcubG9jYWxO
YW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJnRhYmxlY2VsbF9hY2Nlc3NvcnMpOwotICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQodGhlYWRUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24o
KSwgJnRhYmxlc2VjdGlvbl9hY2Nlc3NvcnMpOwotICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNl
cnQodGZvb3RUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJnRhYmxlc2VjdGlvbl9h
Y2Nlc3NvcnMpOwotICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQodGl0bGVUYWcubG9jYWxO
YW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJnRpdGxlX2FjY2Vzc29ycyk7Ci0gICAgICAgIGdldFNl
dEluZm9EaWN0Lmluc2VydCh0clRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmdHJf
YWNjZXNzb3JzKTsKLSAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KHVsVGFnLmxvY2FsTmFt
ZSgpLmltcGxlbWVudGF0aW9uKCksICZ1bF9hY2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoYVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZhX2FjY2Vzc29ycyk7CisgICAg
ICAgIGdldFNldEluZm9EaWN0Lmluc2VydChhcHBsZXRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAm
YXBwbGV0X2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChhcmVhVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSwgJmFyZWFfYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5m
b0RpY3QuaW5zZXJ0KGJhc2VUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmYmFzZV9hY2Nlc3NvcnMp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoYmFzZWZvbnRUYWcubG9jYWxOYW1lKCku
aW1wbCgpLCAmYmFzZUZvbnRfYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5z
ZXJ0KGJsb2NrcXVvdGVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmYmxvY2tRdW90ZV9hY2Nlc3Nv
cnMpOyAKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KGJvZHlUYWcubG9jYWxOYW1lKCku
aW1wbCgpLCAmYm9keV9hY2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
YnJUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmYnJfYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0
SW5mb0RpY3QuaW5zZXJ0KGJ1dHRvblRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZidXR0b25fYWNj
ZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KGNhbnZhc1RhZy5sb2NhbE5h
bWUoKS5pbXBsKCksICZjYW52YXNfYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3Qu
aW5zZXJ0KGNhcHRpb25UYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmY2FwdGlvbl9hY2Nlc3NvcnMp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoY29sVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSwgJmNvbF9hY2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoY29sZ3Jv
dXBUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmY29sX2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNl
dEluZm9EaWN0Lmluc2VydChkZWxUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmbW9kX2FjY2Vzc29y
cyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChkaXJUYWcubG9jYWxOYW1lKCkuaW1w
bCgpLCAmZGlyX2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChkaXZU
YWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmZGl2X2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldElu
Zm9EaWN0Lmluc2VydChkbFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZkbF9hY2Nlc3NvcnMpOwor
ICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoZmllbGRzZXRUYWcubG9jYWxOYW1lKCkuaW1w
bCgpLCAmZmllbGRTZXRfYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0
KGZvbnRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmZm9udF9hY2Nlc3NvcnMpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoZm9ybVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZmb3JtX2Fj
Y2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChmcmFtZVRhZy5sb2NhbE5h
bWUoKS5pbXBsKCksICZmcmFtZV9hY2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5p
bnNlcnQoZnJhbWVzZXRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmZnJhbWVTZXRfYWNjZXNzb3Jz
KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KGgxVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSwgJmhlYWRpbmdfYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KGgy
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJmhlYWRpbmdfYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0
U2V0SW5mb0RpY3QuaW5zZXJ0KGgzVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJmhlYWRpbmdfYWNj
ZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KGg0VGFnLmxvY2FsTmFtZSgp
LmltcGwoKSwgJmhlYWRpbmdfYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5z
ZXJ0KGg1VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJmhlYWRpbmdfYWNjZXNzb3JzKTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KGg2VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJmhlYWRp
bmdfYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KGhlYWRUYWcubG9j
YWxOYW1lKCkuaW1wbCgpLCAmaGVhZF9hY2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJbmZvRGlj
dC5pbnNlcnQoaHJUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmaHJfYWNjZXNzb3JzKTsgCisgICAg
ICAgIGdldFNldEluZm9EaWN0Lmluc2VydChodG1sVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJmh0
bWxfYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KGlmcmFtZVRhZy5s
b2NhbE5hbWUoKS5pbXBsKCksICZpRnJhbWVfYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5m
b0RpY3QuaW5zZXJ0KGltZ1RhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZpbWdfYWNjZXNzb3JzKTsK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KGlucHV0VGFnLmxvY2FsTmFtZSgpLmltcGwo
KSwgJmlucHV0X2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChpbnNU
YWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmbW9kX2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldElu
Zm9EaWN0Lmluc2VydChpc2luZGV4VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJmlzSW5kZXhfYWNj
ZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KGxhYmVsVGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSwgJmxhYmVsX2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmlu
c2VydChsZWdlbmRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmbGVnZW5kX2FjY2Vzc29ycyk7Cisg
ICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChsaVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZs
aV9hY2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQobGlua1RhZy5sb2Nh
bE5hbWUoKS5pbXBsKCksICZsaW5rX2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0
Lmluc2VydChtYXBUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmbWFwX2FjY2Vzc29ycyk7CisgICAg
ICAgIGdldFNldEluZm9EaWN0Lmluc2VydChtYXJxdWVlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
Jm1hcnF1ZWVfYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KG1lbnVU
YWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmbWVudV9hY2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJ
bmZvRGljdC5pbnNlcnQobWV0YVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZtZXRhX2FjY2Vzc29y
cyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChvYmplY3RUYWcubG9jYWxOYW1lKCku
aW1wbCgpLCAmb2JqZWN0X2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2Vy
dChvbFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZvbF9hY2Nlc3NvcnMpOworICAgICAgICBnZXRT
ZXRJbmZvRGljdC5pbnNlcnQob3B0aW9uVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJm9wdGlvbl9h
Y2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQob3B0Z3JvdXBUYWcubG9j
YWxOYW1lKCkuaW1wbCgpLCAmb3B0R3JvdXBfYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5m
b0RpY3QuaW5zZXJ0KHBUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmcF9hY2Nlc3NvcnMpOworICAg
ICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQocGFyYW1UYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAm
cGFyYW1fYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KHByZVRhZy5s
b2NhbE5hbWUoKS5pbXBsKCksICZwcmVfYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KHFUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmcV9hY2Nlc3NvcnMpOworICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoc2NyaXB0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJnNj
cmlwdF9hY2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoc2VsZWN0VGFn
LmxvY2FsTmFtZSgpLmltcGwoKSwgJnNlbGVjdF9hY2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJ
bmZvRGljdC5pbnNlcnQoc3R5bGVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmc3R5bGVfYWNjZXNz
b3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KHRhYmxlVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSwgJnRhYmxlX2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2Vy
dCh0Ym9keVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZ0YWJsZXNlY3Rpb25fYWNjZXNzb3JzKTsK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KHRkVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
JnRhYmxlY2VsbF9hY2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQodGV4
dGFyZWFUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmdGV4dEFyZWFfYWNjZXNzb3JzKTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KHRoVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJnRhYmxl
Y2VsbF9hY2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQodGhlYWRUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpLCAmdGFibGVzZWN0aW9uX2FjY2Vzc29ycyk7CisgICAgICAgIGdl
dFNldEluZm9EaWN0Lmluc2VydCh0Zm9vdFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZ0YWJsZXNl
Y3Rpb25fYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KHRpdGxlVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSwgJnRpdGxlX2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldElu
Zm9EaWN0Lmluc2VydCh0clRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZ0cl9hY2Nlc3NvcnMpOwor
ICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQodWxUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAm
dWxfYWNjZXNzb3JzKTsKICAgICB9CiAgICAgCiAgICAgSFRNTEVsZW1lbnRJbXBsKiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKLSAgICBjb25zdCBIVE1M
RWxlbWVudDo6QWNjZXNzb3JzKiByZXN1bHQgPSBnZXRTZXRJbmZvRGljdC5maW5kKGVsZW1lbnQt
PmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOworICAgIGNvbnN0IEhUTUxFbGVtZW50OjpB
Y2Nlc3NvcnMqIHJlc3VsdCA9IGdldFNldEluZm9EaWN0LmZpbmQoZWxlbWVudC0+bG9jYWxOYW1l
KCkuaW1wbCgpKTsKICAgICBpZiAocmVzdWx0KQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IHJldHVybiAwOwpJbmRleDoga2h0bWwvZWNtYS9ranNfdmlld3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX3ZpZXdzLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xMApkaWZmIC1wIC11IC1yMS4xMCBraHRtbC9lY21hL2tqc192aWV3
cy5jcHAKLS0tIGtodG1sL2VjbWEva2pzX3ZpZXdzLmNwcAkxNiBBdWcgMjAwNSAwMDo0Nzo0NSAt
MDAwMAkxLjEwCisrKyBraHRtbC9lY21hL2tqc192aWV3cy5jcHAJMjEgQXVnIDIwMDUgMTY6NTE6
MTcgLTAwMDAKQEAgLTc4LDcgKzc4LDcgQEAgVmFsdWVJbXAgKkRPTUFic3RyYWN0Vmlld0Z1bmM6
OmNhbGxBc0Z1bgogICAgICAgICBlbHNlIHsKICAgICAgICAgICBpZiAoRG9jdW1lbnRJbXBsKiBk
b2MgPSBhcmcwLT5nZXREb2N1bWVudCgpKQogICAgICAgICAgICAgZG9jLT51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICAgICAgICByZXR1cm4gZ2V0RE9NQ1NTU3R5
bGVEZWNsYXJhdGlvbihleGVjLCBhYnN0cmFjdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShhcmcwLCBh
cmdzWzFdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKS5pbXBsZW1lbnRhdGlvbigpKSk7CisgICAg
ICAgICAgcmV0dXJuIGdldERPTUNTU1N0eWxlRGVjbGFyYXRpb24oZXhlYywgYWJzdHJhY3RWaWV3
LmdldENvbXB1dGVkU3R5bGUoYXJnMCwgYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCku
aW1wbCgpKSk7CiAgICAgICAgIH0KICAgICAgIH0KICAgfQpJbmRleDoga2h0bWwvZWNtYS94bWxo
dHRwcmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvZWNtYS94bWxodHRwcmVxdWVzdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzgKZGlm
ZiAtcCAtdSAtcjEuMzgga2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5jcHAKLS0tIGtodG1sL2Vj
bWEveG1saHR0cHJlcXVlc3QuY3BwCTE3IEF1ZyAyMDA1IDA4OjA3OjMyIC0wMDAwCTEuMzgKKysr
IGtodG1sL2VjbWEveG1saHR0cHJlcXVlc3QuY3BwCTIxIEF1ZyAyMDA1IDE2OjUxOjE5IC0wMDAw
CkBAIC0xNTksNyArMTU5LDcgQEAgVmFsdWVJbXAgKlhNTEh0dHBSZXF1ZXN0OjpnZXRWYWx1ZVBy
b3BlcgogICAgICAgCiAgICAgICBpZiAobWltZVR5cGUgPT0gInRleHQveG1sIiB8fCBtaW1lVHlw
ZSA9PSAiYXBwbGljYXRpb24veG1sIiB8fCBtaW1lVHlwZSA9PSAiYXBwbGljYXRpb24veGh0bWwr
eG1sIiB8fAogICAgICAgICAgIG1pbWVUeXBlID09ICJ0ZXh0L3hzbCIgfHwgbWltZVR5cGUgPT0g
ImFwcGxpY2F0aW9uL3Jzcyt4bWwiIHx8IG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi9hdG9tK3ht
bCIpIHsKLQlyZXNwb25zZVhNTC5yZXNldChkb2MtPmltcGxlbWVudGF0aW9uKCktPmNyZWF0ZURv
Y3VtZW50KCkpOworCXJlc3BvbnNlWE1MLnJlc2V0KGRvYy0+aW1wbCgpLT5jcmVhdGVEb2N1bWVu
dCgpKTsKIAogCURvY3VtZW50SW1wbCAqZG9jSW1wbCA9IHJlc3BvbnNlWE1MLmdldCgpOwogCQpJ
bmRleDoga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2FwcGx5X3N0eWxlX2NvbW1h
bmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtcCAtdSAtcjEuOSBraHRtbC9l
ZGl0aW5nL2FwcGx5X3N0eWxlX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2FwcGx5X3N0
eWxlX2NvbW1hbmQuY3BwCTMwIEp1bCAyMDA1IDAyOjMzOjE0IC0wMDAwCTEuOQorKysga2h0bWwv
ZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAkyMSBBdWcgMjAwNSAxNjo1MToyMSAtMDAw
MApAQCAtMTcyLDEzICsxNzIsMTMgQEAgYm9vbCBTdHlsZUNoYW5nZTo6Y2hlY2tGb3JMZWdhY3lI
VE1MU3R5bAogICAgIERPTVN0cmluZyB2YWx1ZVRleHQocHJvcGVydHktPnZhbHVlKCktPmNzc1Rl
eHQoKSk7CiAgICAgc3dpdGNoIChwcm9wZXJ0eS0+aWQoKSkgewogICAgICAgICBjYXNlIENTU19Q
Uk9QX0ZPTlRfV0VJR0hUOgotICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAodmFsdWVUZXh0LCAi
Ym9sZCIpID09IDApIHsKKyAgICAgICAgICAgIGlmIChlcXVhbHNJZ25vcmluZ0Nhc2UodmFsdWVU
ZXh0LCAiYm9sZCIpKSB7CiAgICAgICAgICAgICAgICAgbV9hcHBseUJvbGQgPSB0cnVlOwogICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQ1NTX1BST1BfRk9OVF9TVFlMRToKLSAgICAgICAgICAgIGlmIChz
dHJjYXNlY21wKHZhbHVlVGV4dCwgIml0YWxpYyIpID09IDAgfHwgc3RyY2FzZWNtcCh2YWx1ZVRl
eHQsICJvYmxpcXVlIikgPT0gMCkgeworICAgICAgICAgICAgaWYgKGVxdWFsc0lnbm9yaW5nQ2Fz
ZSh2YWx1ZVRleHQsICJpdGFsaWMiKSB8fCBlcXVhbHNJZ25vcmluZ0Nhc2UodmFsdWVUZXh0LCAi
b2JsaXF1ZSIpKSB7CiAgICAgICAgICAgICAgICAgbV9hcHBseUl0YWxpYyA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CkBAIC0yMzMsNyArMjMzLDcg
QEAgYm9vbCBTdHlsZUNoYW5nZTo6Y3VycmVudGx5SGFzU3R5bGUoY29ucwogICAgIGlmICghdmFs
dWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB2YWx1ZS0+cmVmKCk7Ci0gICAgYm9vbCBy
ZXN1bHQgPSBzdHJjYXNlY21wKHZhbHVlLT5jc3NUZXh0KCksIHByb3BlcnR5LT52YWx1ZSgpLT5j
c3NUZXh0KCkpID09IDA7CisgICAgYm9vbCByZXN1bHQgPSBlcXVhbHNJZ25vcmluZ0Nhc2UodmFs
dWUtPmNzc1RleHQoKSwgcHJvcGVydHktPnZhbHVlKCktPmNzc1RleHQoKSk7CiAgICAgdmFsdWUt
PmRlcmVmKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTcxNSw3ICs3MTUsNyBAQCBzdGF0
aWMgYm9vbCBoYXNUZXh0RGVjb3JhdGlvblByb3BlcnR5KE5vCiAgICAgICAgIHZhbHVlLT5yZWYo
KTsKICAgICAgICAgRE9NU3RyaW5nIHZhbHVlVGV4dCh2YWx1ZS0+Y3NzVGV4dCgpKTsKICAgICAg
ICAgdmFsdWUtPmRlcmVmKCk7Ci0gICAgICAgIGlmIChzdHJjYXNlY21wKHZhbHVlVGV4dCwibm9u
ZSIpICE9IDApCisgICAgICAgIGlmICghZXF1YWxzSWdub3JpbmdDYXNlKHZhbHVlVGV4dCwgIm5v
bmUiKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNzUzLDggKzc1Mywx
MSBAQCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKkFwcGx5U3R5CiAgICAgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICp0ZXh0RGVjb3JhdGlvblN0eWxlID0gc3R5bGUtPmNv
cHlQcm9wZXJ0aWVzSW5TZXQocHJvcGVydGllcywgMSk7CiAKICAgICBDU1NWYWx1ZUltcGwgKnBy
b3BlcnR5ID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTX1BST1BfVEVYVF9ERUNPUkFU
SU9OKTsKLSAgICBpZiAocHJvcGVydHkgJiYgc3RyY2FzZWNtcChwcm9wZXJ0eS0+Y3NzVGV4dCgp
LCAibm9uZSIpICE9IDApIHsKLSAgICAgICAgcmVtb3ZlQ1NTUHJvcGVydHkoc3R5bGUsIENTU19Q
Uk9QX1RFWFRfREVDT1JBVElPTik7CisgICAgaWYgKHByb3BlcnR5KSB7CisgICAgICAgIHByb3Bl
cnR5LT5yZWYoKTsKKyAgICAgICAgaWYgKCFlcXVhbHNJZ25vcmluZ0Nhc2UocHJvcGVydHktPmNz
c1RleHQoKSwgIm5vbmUiKSkKKyAgICAgICAgICAgIHJlbW92ZUNTU1Byb3BlcnR5KHN0eWxlLCBD
U1NfUFJPUF9URVhUX0RFQ09SQVRJT04pOworICAgICAgICBwcm9wZXJ0eS0+ZGVyZWYoKTsKICAg
ICB9CiAKICAgICBzdHlsZS0+ZGVyZWYoKTsKQEAgLTc4MiwxNSArNzg1LDE1IEBAIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqQXBwbHlTdHkKICAgICAKIAogICAgIENTU1ZhbHVlSW1w
bCAqcHJvcGVydHkgPSBjb21wdXRlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU19QUk9Q
X1RFWFRfREVDT1JBVElPTik7Ci0gICAgaWYgKHByb3BlcnR5ICYmIHN0cmNhc2VjbXAocHJvcGVy
dHktPmNzc1RleHQoKSwgIm5vbmUiKSAhPSAwKSB7CisgICAgaWYgKHByb3BlcnR5KSB7CiAgICAg
ICAgIHByb3BlcnR5LT5yZWYoKTsKLSAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25J
bXBsICpuZXdTdHlsZSA9IHRleHREZWNvcmF0aW9uU3R5bGUtPmNvcHkoKTsKLQotICAgICAgICBu
ZXdTdHlsZS0+cmVmKCk7Ci0gICAgICAgIG5ld1N0eWxlLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9U
RVhUX0RFQ09SQVRJT04sICJub25lIik7Ci0gICAgICAgIGFwcGx5VGV4dERlY29yYXRpb25TdHls
ZShub2RlLCBuZXdTdHlsZSk7Ci0gICAgICAgIG5ld1N0eWxlLT5kZXJlZigpOwotCisgICAgICAg
IGlmICghZXF1YWxzSWdub3JpbmdDYXNlKHByb3BlcnR5LT5jc3NUZXh0KCksICJub25lIikpIHsK
KyAgICAgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqbmV3U3R5bGUgPSB0
ZXh0RGVjb3JhdGlvblN0eWxlLT5jb3B5KCk7CisgICAgICAgICAgICBuZXdTdHlsZS0+cmVmKCk7
CisgICAgICAgICAgICBuZXdTdHlsZS0+c2V0UHJvcGVydHkoQ1NTX1BST1BfVEVYVF9ERUNPUkFU
SU9OLCAibm9uZSIpOworICAgICAgICAgICAgYXBwbHlUZXh0RGVjb3JhdGlvblN0eWxlKG5vZGUs
IG5ld1N0eWxlKTsKKyAgICAgICAgICAgIG5ld1N0eWxlLT5kZXJlZigpOworICAgICAgICB9CiAg
ICAgICAgIHByb3BlcnR5LT5kZXJlZigpOwogICAgIH0KIApJbmRleDoga2h0bWwvZWRpdGluZy9q
c2VkaXRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2VkaXRpbmcvanNlZGl0aW5nLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yOApkaWZmIC1w
IC11IC1yMS4yOCBraHRtbC9lZGl0aW5nL2pzZWRpdGluZy5jcHAKLS0tIGtodG1sL2VkaXRpbmcv
anNlZGl0aW5nLmNwcAk2IEp1bCAyMDA1IDAxOjI4OjQyIC0wMDAwCTEuMjgKKysrIGtodG1sL2Vk
aXRpbmcvanNlZGl0aW5nLmNwcAkyMSBBdWcgMjAwNSAxNjo1MToyMyAtMDAwMApAQCAtNjMsNyAr
NjMsNyBAQCBDb21tYW5kTWFwICpjcmVhdGVDb21tYW5kRGljdGlvbmFyeSgpOwogY29uc3QgQ29t
bWFuZEltcCAqY29tbWFuZEltcChjb25zdCBET01TdHJpbmcgJmNvbW1hbmQpCiB7CiAgICAgc3Rh
dGljIENvbW1hbmRNYXAgKmNvbW1hbmREaWN0aW9uYXJ5ID0gY3JlYXRlQ29tbWFuZERpY3Rpb25h
cnkoKTsKLSAgICByZXR1cm4gY29tbWFuZERpY3Rpb25hcnktPmdldChjb21tYW5kLmltcGxlbWVu
dGF0aW9uKCkpOworICAgIHJldHVybiBjb21tYW5kRGljdGlvbmFyeS0+Z2V0KGNvbW1hbmQuaW1w
bCgpKTsKIH0KIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCkluZGV4OiBraHRtbC9lZGl0aW5n
L3JlbW92ZV9ub2RlX2F0dHJpYnV0ZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlbW92ZV9ub2RlX2F0dHJpYnV0ZV9jb21t
YW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIga2h0bWwv
ZWRpdGluZy9yZW1vdmVfbm9kZV9hdHRyaWJ1dGVfY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRp
bmcvcmVtb3ZlX25vZGVfYXR0cmlidXRlX2NvbW1hbmQuY3BwCTE4IEp1bCAyMDA1IDIxOjQ0OjE4
IC0wMDAwCTEuMgorKysga2h0bWwvZWRpdGluZy9yZW1vdmVfbm9kZV9hdHRyaWJ1dGVfY29tbWFu
ZC5jcHAJMjEgQXVnIDIwMDUgMTY6NTE6MjQgLTAwMDAKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBS
ZW1vdmVOb2RlQXR0cmlidXRlQ29tbWFuZDo6ZG9VbmFwcAogICAgIEFTU0VSVCghbV9vbGRWYWx1
ZS5pc051bGwoKSk7CiAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7Ci0gICAgbV9lbGVtZW50
LT5zZXRBdHRyaWJ1dGUobV9hdHRyaWJ1dGUsIG1fb2xkVmFsdWUuaW1wbGVtZW50YXRpb24oKSwg
ZXhjZXB0aW9uQ29kZSk7CisgICAgbV9lbGVtZW50LT5zZXRBdHRyaWJ1dGUobV9hdHRyaWJ1dGUs
IG1fb2xkVmFsdWUuaW1wbCgpLCBleGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9u
Q29kZSA9PSAwKTsKIH0KIApJbmRleDoga2h0bWwvZWRpdGluZy9zZXRfbm9kZV9hdHRyaWJ1dGVf
Y29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZWRpdGluZy9zZXRfbm9kZV9hdHRyaWJ1dGVfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtodG1sL2VkaXRpbmcvc2V0X25vZGVfYXR0cmlidXRl
X2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL3NldF9ub2RlX2F0dHJpYnV0ZV9jb21tYW5k
LmNwcAkxOCBKdWwgMjAwNSAyMTo0NDoxOCAtMDAwMAkxLjIKKysrIGtodG1sL2VkaXRpbmcvc2V0
X25vZGVfYXR0cmlidXRlX2NvbW1hbmQuY3BwCTIxIEF1ZyAyMDA1IDE2OjUxOjI2IC0wMDAwCkBA
IC02Myw3ICs2Myw3IEBAIHZvaWQgU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQ6OmRvQXBwbHkoKQog
CiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwogICAgIG1fb2xkVmFsdWUgPSBtX2VsZW1lbnQt
PmdldEF0dHJpYnV0ZShtX2F0dHJpYnV0ZSk7Ci0gICAgbV9lbGVtZW50LT5zZXRBdHRyaWJ1dGUo
bV9hdHRyaWJ1dGUsIG1fdmFsdWUuaW1wbGVtZW50YXRpb24oKSwgZXhjZXB0aW9uQ29kZSk7Cisg
ICAgbV9lbGVtZW50LT5zZXRBdHRyaWJ1dGUobV9hdHRyaWJ1dGUsIG1fdmFsdWUuaW1wbCgpLCBl
eGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKIH0KIApAQCAt
NzUsNyArNzUsNyBAQCB2b2lkIFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kOjpkb1VuYXBwbHkoCiAg
ICAgaWYgKG1fb2xkVmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIG1fZWxlbWVudC0+cmVtb3ZlQXR0
cmlidXRlKG1fYXR0cmlidXRlLCBleGNlcHRpb25Db2RlKTsKICAgICBlbHNlCi0gICAgICAgIG1f
ZWxlbWVudC0+c2V0QXR0cmlidXRlKG1fYXR0cmlidXRlLCBtX29sZFZhbHVlLmltcGxlbWVudGF0
aW9uKCksIGV4Y2VwdGlvbkNvZGUpOworICAgICAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZSht
X2F0dHJpYnV0ZSwgbV9vbGRWYWx1ZS5pbXBsKCksIGV4Y2VwdGlvbkNvZGUpOwogICAgIEFTU0VS
VChleGNlcHRpb25Db2RlID09IDApOwogfQogCkluZGV4OiBraHRtbC9odG1sL2h0bWxfYmFzZWlt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwv
aHRtbF9iYXNlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzgKZGlmZiAtcCAtdSAt
cjEuNzgga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2Jh
c2VpbXBsLmNwcAkzMCBKdWwgMjAwNSAwMjozMzoxNiAtMDAwMAkxLjc4CisrKyBraHRtbC9odG1s
L2h0bWxfYmFzZWltcGwuY3BwCTIxIEF1ZyAyMDA1IDE2OjUxOjI5IC0wMDAwCkBAIC0xMTIsNyAr
MTEyLDcgQEAgdm9pZCBIVE1MQm9keUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dAogICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHRleHRBdHRyKSB7CiAgICAgICAgIGFkZENTU0NvbG9y
KGF0dHIsIENTU19QUk9QX0NPTE9SLCBhdHRyLT52YWx1ZSgpKTsKICAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBiZ3Byb3BlcnRpZXNBdHRyKSB7Ci0gICAgICAgIGlmIChzdHJjYXNlY21w
KCBhdHRyLT52YWx1ZSgpLCAiZml4ZWQiICkgPT0gMCkKKyAgICAgICAgaWYgKGVxdWFsc0lnbm9y
aW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgImZpeGVkIiApKQogICAgICAgICAgICAgYWRkQ1NTUHJv
cGVydHkoYXR0ciwgQ1NTX1BST1BfQkFDS0dST1VORF9BVFRBQ0hNRU5ULCBDU1NfVkFMX0ZJWEVE
KTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB2bGlua0F0dHIgfHwKICAgICAgICAg
ICAgICAgIGF0dHItPm5hbWUoKSA9PSBhbGlua0F0dHIgfHwKQEAgLTQxMCwxMCArNDEwLDEwIEBA
IHZvaWQgSFRNTEZyYW1lRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXQKICAgICAgICAga2REZWJ1
ZyggNjAzMSApIDw8ICJzZXQgc2Nyb2xsIG1vZGUiIDw8IGVuZGw7CiAJLy8gQXV0byBhbmQgeWVz
IGJvdGggc2ltcGx5IG1lYW4gImFsbG93IHNjcm9sbGluZy4iICBObyBtZWFucwogCS8vICJkb24n
dCBhbGxvdyBzY3JvbGxpbmcuIgotICAgICAgICBpZiggc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUo
KSwgImF1dG8iICkgPT0gMCB8fAotICAgICAgICAgICAgc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUo
KSwgInllcyIgKSA9PSAwICkKKyAgICAgICAgaWYoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+
dmFsdWUoKSwgImF1dG8iICkgfHwKKyAgICAgICAgICAgIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0
ci0+dmFsdWUoKSwgInllcyIgKSApCiAgICAgICAgICAgICBtX3Njcm9sbGluZyA9IFFTY3JvbGxW
aWV3OjpBdXRvOwotICAgICAgICBlbHNlIGlmKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAi
bm8iICkgPT0gMCApCisgICAgICAgIGVsc2UgaWYoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+
dmFsdWUoKSwgIm5vIiApICkKICAgICAgICAgICAgIG1fc2Nyb2xsaW5nID0gUVNjcm9sbFZpZXc6
OkFsd2F5c09mZjsKICAgICAgICAgLy8gRklYTUU6IElmIHdlIGFyZSBhbHJlYWR5IGF0dGFjaGVk
LCB0aGlzIGhhcyBubyBlZmZlY3QuCiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25s
b2FkQXR0cikgewpJbmRleDoga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjMKZGlmZiAtcCAtdSAtcjEuMjMga2h0bWwvaHRt
bC9odG1sX2Jsb2NraW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuY3BwCTMw
IEp1bCAyMDA1IDAyOjMzOjE3IC0wMDAwCTEuMjMKKysrIGtodG1sL2h0bWwvaHRtbF9ibG9ja2lt
cGwuY3BwCTIxIEF1ZyAyMDA1IDE2OjUxOjI5IC0wMDAwCkBAIC03OSwxMSArNzksMTEgQEAgdm9p
ZCBIVE1MRGl2RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cgogewogICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gYWxpZ25BdHRyKSB7CiAgICAgICAgIERPTVN0cmluZyB2ID0gYXR0ci0+dmFsdWUo
KTsKLQlpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJtaWRkbGUiICkgPT0gMCB8fCBz
dHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAiY2VudGVyIiApID09IDAgKQorCWlmICggZXF1YWxz
SWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAibWlkZGxlIiApIHx8IGVxdWFsc0lnbm9yaW5n
Q2FzZSggYXR0ci0+dmFsdWUoKSwgImNlbnRlciIgKSApCiAgICAgICAgICAgIGFkZENTU1Byb3Bl
cnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIENTU19WQUxfX0tIVE1MX0NFTlRFUik7Ci0g
ICAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYXR0ci0+dmFsdWUoKSwgImxlZnQiKSA9PSAwKQor
ICAgICAgICBlbHNlIGlmIChlcXVhbHNJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImxlZnQi
KSkKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04s
IENTU19WQUxfX0tIVE1MX0xFRlQpOwotICAgICAgICBlbHNlIGlmIChzdHJjYXNlY21wKGF0dHIt
PnZhbHVlKCksICJyaWdodCIpID09IDApCisgICAgICAgIGVsc2UgaWYgKGVxdWFsc0lnbm9yaW5n
Q2FzZShhdHRyLT52YWx1ZSgpLCAicmlnaHQiKSkKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5
KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIENTU19WQUxfX0tIVE1MX1JJR0hUKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfVEVYVF9B
TElHTiwgdik7CkBAIC0xMjgsMTEgKzEyOCwxMSBAQCBib29sIEhUTUxIUkVsZW1lbnRJbXBsOjpt
YXBUb0VudHJ5KGNvbnN0CiB2b2lkIEhUTUxIUkVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gYWxpZ25BdHRyKSB7Ci0gICAgICAgIGlmIChzdHJjYXNlY21wKGF0dHItPnZhbHVlKCksICJs
ZWZ0IikgPT0gMCkgeworICAgICAgICBpZiAoZXF1YWxzSWdub3JpbmdDYXNlKGF0dHItPnZhbHVl
KCksICJsZWZ0IikpIHsKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9Q
X01BUkdJTl9MRUZULCAiMCIpOwogCSAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9N
QVJHSU5fUklHSFQsIENTU19WQUxfQVVUTyk7CiAJfQotICAgICAgICBlbHNlIGlmIChzdHJjYXNl
Y21wKGF0dHItPnZhbHVlKCksICJyaWdodCIpID09IDApIHsKKyAgICAgICAgZWxzZSBpZiAoZXF1
YWxzSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJyaWdodCIpKSB7CiAJICAgIGFkZENTU1By
b3BlcnR5KGF0dHIsIENTU19QUk9QX01BUkdJTl9MRUZULCBDU1NfVkFMX0FVVE8pOwogCSAgICBh
ZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9NQVJHSU5fUklHSFQsICIwIik7CiAJfQpAQCAt
MTQyLDcgKzE0Miw3IEBAIHZvaWQgSFRNTEhSRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmkK
IAl9CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gd2lkdGhBdHRyKSB7CiAgICAgICAg
IGJvb2wgb2s7Ci0gICAgICAgIGludCB2ID0gYXR0ci0+dmFsdWUoKS5pbXBsZW1lbnRhdGlvbigp
LT50b0ludCgmb2spOworICAgICAgICBpbnQgdiA9IGF0dHItPnZhbHVlKCkuaW1wbCgpLT50b0lu
dCgmb2spOwogICAgICAgICBpZihvayAmJiAhdikKICAgICAgICAgICAgIGFkZENTU0xlbmd0aChh
dHRyLCBDU1NfUFJPUF9XSURUSCwgIjEiKTsKICAgICAgICAgZWxzZQpAQCAtMTYyLDcgKzE2Miw3
IEBAIHZvaWQgSFRNTEhSRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmkKICAgICAgICAgYWRk
Q1NTQ29sb3IoYXR0ciwgQ1NTX1BST1BfQk9SREVSX0NPTE9SLCBET01TdHJpbmcoImdyZXkiKSk7
CiAgICAgICAgIGFkZENTU0NvbG9yKGF0dHIsIENTU19QUk9QX0JBQ0tHUk9VTkRfQ09MT1IsIERP
TVN0cmluZygiZ3JleSIpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzaXplQXR0
cikgewotICAgICAgICBET01TdHJpbmdJbXBsKiBzaSA9IGF0dHItPnZhbHVlKCkuaW1wbGVtZW50
YXRpb24oKTsKKyAgICAgICAgRE9NU3RyaW5nSW1wbCogc2kgPSBhdHRyLT52YWx1ZSgpLmltcGwo
KTsKICAgICAgICAgaW50IHNpemUgPSBzaS0+dG9JbnQoKTsKICAgICAgICAgaWYgKHNpemUgPD0g
MSkKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9CT1RU
T01fV0lEVEgsIERPTVN0cmluZygiMCIpKTsKQEAgLTI2NCwxMSArMjY0LDExIEBAIHZvaWQgSFRN
TFBhcmFncmFwaEVsZW1lbnRJbXBsOjpwYXJzZU1hcHAKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IGFsaWduQXR0cikgewogICAgICAgICBET01TdHJpbmcgdiA9IGF0dHItPnZhbHVlKCk7Ci0g
ICAgICAgIGlmICggc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgIm1pZGRsZSIgKSA9PSAwIHx8
IHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJjZW50ZXIiICkgPT0gMCApCisgICAgICAgIGlm
ICggZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAibWlkZGxlIiApIHx8IGVxdWFs
c0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgImNlbnRlciIgKSApCiAgICAgICAgICAgICBh
ZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19LSFRNTF9D
RU5URVIpOwotICAgICAgICBlbHNlIGlmIChzdHJjYXNlY21wKGF0dHItPnZhbHVlKCksICJsZWZ0
IikgPT0gMCkKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxzSWdub3JpbmdDYXNlKGF0dHItPnZhbHVl
KCksICJsZWZ0IikpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9U
RVhUX0FMSUdOLCBDU1NfVkFMX19LSFRNTF9MRUZUKTsKLSAgICAgICAgZWxzZSBpZiAoc3RyY2Fz
ZWNtcChhdHRyLT52YWx1ZSgpLCAicmlnaHQiKSA9PSAwKQorICAgICAgICBlbHNlIGlmIChlcXVh
bHNJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInJpZ2h0IikpCiAgICAgICAgICAgICBhZGRD
U1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19LSFRNTF9SSUdI
VCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19Q
Uk9QX1RFWFRfQUxJR04sIHYpOwpAQCAtMzYyLDcgKzM2Miw3IEBAIHZvaWQgSFRNTE1hcnF1ZWVF
bGVtZW50SW1wbDo6cGFyc2VNYXBwZWQKICAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBD
U1NfUFJPUF9fS0hUTUxfTUFSUVVFRV9TUEVFRCwgYXR0ci0+dmFsdWUoKSk7CiAgICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gbG9vcEF0dHIpIHsKICAgICAgICAgaWYgKCFhdHRyLT52YWx1
ZSgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0gIi0xIiB8
fCBzdHJjYXNlY21wKGF0dHItPnZhbHVlKCksICJpbmZpbml0ZSIpID09IDApCisgICAgICAgICAg
ICBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiLTEiIHx8IGVxdWFsc0lnbm9yaW5nQ2FzZShhdHRyLT52
YWx1ZSgpLCAiaW5maW5pdGUiKSkKICAgICAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRy
LCBDU1NfUFJPUF9fS0hUTUxfTUFSUVVFRV9SRVBFVElUSU9OLCBDU1NfVkFMX0lORklOSVRFKTsK
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NT
X1BST1BfX0tIVE1MX01BUlFVRUVfUkVQRVRJVElPTiwgYXR0ci0+dmFsdWUoKSk7CkluZGV4OiBr
aHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS42NgpkaWZmIC1wIC11IC1yMS42NiBraHRtbC9odG1sL2h0bWxfZG9jdW1l
bnRpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAJMzAgSnVsIDIw
MDUgMDI6MzM6MTcgLTAwMDAJMS42NgorKysga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5j
cHAJMjEgQXVnIDIwMDUgMTY6NTE6MzAgLTAwMDAKQEAgLTI1Miw4ICsyNTIsNyBAQCBib29sIEhU
TUxEb2N1bWVudEltcGw6OmNoaWxkQWxsb3dlZCggTm9kCiBFbGVtZW50SW1wbCAqSFRNTERvY3Vt
ZW50SW1wbDo6Y3JlYXRlRWxlbWVudChjb25zdCBET01TdHJpbmcgJm5hbWUsIGludCAmZXhjZXB0
aW9uY29kZSkKIHsKICAgICAvLyBEbyBub3QgY2hlY2sgbmFtZSB2YWxpZGl0eS4gIE90aGVyIGJy
b3dzZXJzIGRvbid0LCBhbmQgaXQgdGFrZXMgdGltZS4KLSAgICBET01TdHJpbmcgbG93ZXJOYW1l
KG5hbWUubG93ZXIoKSk7Ci0gICAgcmV0dXJuIEhUTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlSFRN
TEVsZW1lbnQoQXRvbWljU3RyaW5nKGxvd2VyTmFtZSksIHRoaXMsIDAsIGZhbHNlKTsKKyAgICBy
ZXR1cm4gSFRNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVIVE1MRWxlbWVudChBdG9taWNTdHJpbmco
bmFtZSwgbG93ZXJjYXNlZCksIHRoaXMsIDAsIGZhbHNlKTsKIH0KIAogdm9pZCBIVE1MRG9jdW1l
bnRJbXBsOjpzbG90SGlzdG9yeUNoYW5nZWQoKQpAQCAtMjcwLDkgKzI2OSw5IEBAIHN0YXRpYyB2
b2lkIGFkZEl0ZW1Ub01hcChIVE1MRG9jdW1lbnRJbXAKICAgICBpZiAobmFtZS5sZW5ndGgoKSA9
PSAwKQogCXJldHVybjsKICAKLSAgICBIVE1MRG9jdW1lbnRJbXBsOjpOYW1lQ291bnRNYXA6Oml0
ZXJhdG9yIGl0ID0gbWFwLmZpbmQobmFtZS5pbXBsZW1lbnRhdGlvbigpKTsgCisgICAgSFRNTERv
Y3VtZW50SW1wbDo6TmFtZUNvdW50TWFwOjppdGVyYXRvciBpdCA9IG1hcC5maW5kKG5hbWUuaW1w
bCgpKTsgCiAgICAgaWYgKGl0ID09IG1hcC5lbmQoKSkKLSAgICAgICAgbWFwLmluc2VydChuYW1l
LmltcGxlbWVudGF0aW9uKCksIDEpOworICAgICAgICBtYXAuaW5zZXJ0KG5hbWUuaW1wbCgpLCAx
KTsKICAgICBlbHNlCiAgICAgICAgICsrKGl0LT5zZWNvbmQpOwogfQpAQCAtMjgyLDcgKzI4MSw3
IEBAIHN0YXRpYyB2b2lkIHJlbW92ZUl0ZW1Gcm9tTWFwKEhUTUxEb2N1bWUKICAgICBpZiAobmFt
ZS5sZW5ndGgoKSA9PSAwKQogCXJldHVybjsKICAKLSAgICBIVE1MRG9jdW1lbnRJbXBsOjpOYW1l
Q291bnRNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmZpbmQobmFtZS5pbXBsZW1lbnRhdGlvbigpKTsg
CisgICAgSFRNTERvY3VtZW50SW1wbDo6TmFtZUNvdW50TWFwOjppdGVyYXRvciBpdCA9IG1hcC5m
aW5kKG5hbWUuaW1wbCgpKTsgCiAgICAgaWYgKGl0ID09IG1hcC5lbmQoKSkKICAgICAgICAgcmV0
dXJuOwogCkBAIC0zMDcsNyArMzA2LDcgQEAgdm9pZCBIVE1MRG9jdW1lbnRJbXBsOjpyZW1vdmVO
YW1lZEl0ZW0oYwogCiBib29sIEhUTUxEb2N1bWVudEltcGw6Omhhc05hbWVkSXRlbShjb25zdCBE
T01TdHJpbmcmIG5hbWUpCiB7Ci0gICAgcmV0dXJuIG5hbWVkSXRlbUNvdW50cy5nZXQobmFtZS5p
bXBsZW1lbnRhdGlvbigpKSAhPSAwOworICAgIHJldHVybiBuYW1lZEl0ZW1Db3VudHMuZ2V0KG5h
bWUuaW1wbCgpKSAhPSAwOwogfQogCiB2b2lkIEhUTUxEb2N1bWVudEltcGw6OmFkZERvY0V4dHJh
TmFtZWRJdGVtKGNvbnN0IERPTVN0cmluZyYgbmFtZSkKQEAgLTMyMiw3ICszMjEsNyBAQCB2b2lk
IEhUTUxEb2N1bWVudEltcGw6OnJlbW92ZURvY0V4dHJhTmFtCiAKIGJvb2wgSFRNTERvY3VtZW50
SW1wbDo6aGFzRG9jRXh0cmFOYW1lZEl0ZW0oY29uc3QgRE9NU3RyaW5nJiBuYW1lKQogewotICAg
IHJldHVybiBkb2NFeHRyYU5hbWVkSXRlbUNvdW50cy5nZXQobmFtZS5pbXBsZW1lbnRhdGlvbigp
KSAhPSAwOworICAgIHJldHVybiBkb2NFeHRyYU5hbWVkSXRlbUNvdW50cy5nZXQobmFtZS5pbXBs
KCkpICE9IDA7CiB9CiAKIGNvbnN0IGludCBQQVJTRU1PREVfSEFWRV9ET0NUWVBFCT0JKDE8PDAp
OwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjk2CmRpZmYgLXAgLXUgLXIxLjk2IGtodG1sL2h0bWwvaHRt
bF9lbGVtZW50aW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAJMTkg
QXVnIDIwMDUgMjM6NTg6MjYgLTAwMDAJMS45NgorKysga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRp
bXBsLmNwcAkyMSBBdWcgMjAwNSAxNjo1MTozMSAtMDAwMApAQCAtNzMsNyArNzMsNyBAQCBET01T
dHJpbmcgSFRNTEVsZW1lbnRJbXBsOjpub2RlTmFtZSgpIGNvCiAgICAgLy8gRklYTUU6IFdvdWxk
IGJlIG5pY2UgdG8gaGF2ZSBhbiBhdG9taWNzdHJpbmcgbG9va3VwIGJhc2VkIG9mZiB1cHBlcmNh
c2UgY2hhcnMgdGhhdCBkb2VzIG5vdCBoYXZlIHRvIGNvcHkKICAgICAvLyB0aGUgc3RyaW5nIG9u
IGEgaGl0IGluIHRoZSBoYXNoLgogICAgIGlmIChnZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVu
dCgpKQotICAgICAgICByZXR1cm4gbV90YWdOYW1lLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9u
KCktPnVwcGVyKCk7CisgICAgICAgIHJldHVybiBtX3RhZ05hbWUubG9jYWxOYW1lKCkuaW1wbCgp
LT51cHBlcigpOwogICAgIHJldHVybiBFbGVtZW50SW1wbDo6bm9kZU5hbWUoKTsKIH0KICAgICAK
QEAgLTEzNiw3ICsxMzYsNyBAQCB2b2lkIEhUTUxFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRy
aWJ1CiAKICAgICBET01TdHJpbmcgaW5kZXhzdHJpbmc7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBhbGlnbkF0dHIpIHsKLSAgICAgICAgaWYgKHN0cmNhc2VjbXAoYXR0ci0+dmFsdWUoKSwgIm1p
ZGRsZSIgKSA9PSAwKQorICAgICAgICBpZiAoZXF1YWxzSWdub3JpbmdDYXNlKGF0dHItPnZhbHVl
KCksICJtaWRkbGUiICkpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJP
UF9URVhUX0FMSUdOLCAiY2VudGVyIik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFkZENT
U1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIGF0dHItPnZhbHVlKCkpOwpAQCAt
NDU2LDI1ICs0NTYsMjUgQEAgdm9pZCBIVE1MRWxlbWVudEltcGw6OmFkZEhUTUxBbGlnbm1lbnQo
TQogICAgIGludCBwcm9wZmxvYXQgPSAtMTsKICAgICBpbnQgcHJvcHZhbGlnbiA9IC0xOwogICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgYWxpZ25tZW50ID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAo
IHN0cmNhc2VjbXAoIGFsaWdubWVudCwgImFic21pZGRsZSIgKSA9PSAwICkgeworICAgIGlmICgg
ZXF1YWxzSWdub3JpbmdDYXNlKCBhbGlnbm1lbnQsICJhYnNtaWRkbGUiICkgKSB7CiAgICAgICAg
IHByb3B2YWxpZ24gPSBDU1NfVkFMX01JRERMRTsKLSAgICB9IGVsc2UgaWYgKCBzdHJjYXNlY21w
KCBhbGlnbm1lbnQsICJhYnNib3R0b20iICkgPT0gMCApIHsKKyAgICB9IGVsc2UgaWYgKCBlcXVh
bHNJZ25vcmluZ0Nhc2UoIGFsaWdubWVudCwgImFic2JvdHRvbSIgKSApIHsKICAgICAgICAgcHJv
cHZhbGlnbiA9IENTU19WQUxfQk9UVE9NOwotICAgIH0gZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGFs
aWdubWVudCwgImxlZnQiICkgPT0gMCApIHsKKyAgICB9IGVsc2UgaWYgKCBlcXVhbHNJZ25vcmlu
Z0Nhc2UoIGFsaWdubWVudCwgImxlZnQiICkgKSB7CiAJcHJvcGZsb2F0ID0gQ1NTX1ZBTF9MRUZU
OwogCXByb3B2YWxpZ24gPSBDU1NfVkFMX1RPUDsKLSAgICB9IGVsc2UgaWYgKCBzdHJjYXNlY21w
KCBhbGlnbm1lbnQsICJyaWdodCIgKSA9PSAwICkgeworICAgIH0gZWxzZSBpZiAoIGVxdWFsc0ln
bm9yaW5nQ2FzZSggYWxpZ25tZW50LCAicmlnaHQiICkgKSB7CiAJcHJvcGZsb2F0ID0gQ1NTX1ZB
TF9SSUdIVDsKIAlwcm9wdmFsaWduID0gQ1NTX1ZBTF9UT1A7Ci0gICAgfSBlbHNlIGlmICggc3Ry
Y2FzZWNtcCggYWxpZ25tZW50LCAidG9wIiApID09IDAgKSB7CisgICAgfSBlbHNlIGlmICggZXF1
YWxzSWdub3JpbmdDYXNlKCBhbGlnbm1lbnQsICJ0b3AiICkgKSB7CiAJcHJvcHZhbGlnbiA9IENT
U19WQUxfVE9QOwotICAgIH0gZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGFsaWdubWVudCwgIm1pZGRs
ZSIgKSA9PSAwICkgeworICAgIH0gZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYWxpZ25t
ZW50LCAibWlkZGxlIiApICkgewogCXByb3B2YWxpZ24gPSBDU1NfVkFMX19LSFRNTF9CQVNFTElO
RV9NSURETEU7Ci0gICAgfSBlbHNlIGlmICggc3RyY2FzZWNtcCggYWxpZ25tZW50LCAiY2VudGVy
IiApID09IDAgKSB7CisgICAgfSBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhbGlnbm1l
bnQsICJjZW50ZXIiICkgKSB7CiAJcHJvcHZhbGlnbiA9IENTU19WQUxfTUlERExFOwotICAgIH0g
ZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGFsaWdubWVudCwgImJvdHRvbSIgKSA9PSAwICkgeworICAg
IH0gZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYWxpZ25tZW50LCAiYm90dG9tIiApICkg
ewogCXByb3B2YWxpZ24gPSBDU1NfVkFMX0JBU0VMSU5FOwotICAgIH0gZWxzZSBpZiAoIHN0cmNh
c2VjbXAgKCBhbGlnbm1lbnQsICJ0ZXh0dG9wIikgPT0gMCApIHsKKyAgICB9IGVsc2UgaWYgKCBl
cXVhbHNJZ25vcmluZ0Nhc2UgKCBhbGlnbm1lbnQsICJ0ZXh0dG9wIikgKSB7CiAJcHJvcHZhbGln
biA9IENTU19WQUxfVEVYVF9UT1A7CiAgICAgfQogICAgIApAQCAtNTI4LDE3ICs1MjgsMTcgQEAg
dm9pZCBIVE1MRWxlbWVudEltcGw6OnNldENvbnRlbnRFZGl0YWJsZQogewogICAgIEtIVE1MUGFy
dCAqcGFydCA9IGdldERvY3VtZW50KCktPnBhcnQoKTsKICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGVuYWJsZWQgPSBhdHRyLT52YWx1ZSgpOwotICAgIGlmIChlbmFibGVkLmlzRW1wdHkoKSB8fCBz
dHJjYXNlY21wKGVuYWJsZWQsICJ0cnVlIikgPT0gMCkgeworICAgIGlmIChlbmFibGVkLmlzRW1w
dHkoKSB8fCBlcXVhbHNJZ25vcmluZ0Nhc2UoZW5hYmxlZCwgInRydWUiKSkgewogICAgICAgICBh
ZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9fS0hUTUxfVVNFUl9NT0RJRlksIENTU19WQUxf
UkVBRF9XUklURSk7CiAgICAgICAgIGlmIChwYXJ0KQogICAgICAgICAgICAgcGFydC0+YXBwbHlF
ZGl0aW5nU3R5bGVUb0VsZW1lbnQodGhpcyk7ICAgIAogICAgIH0KLSAgICBlbHNlIGlmIChzdHJj
YXNlY21wKGVuYWJsZWQsICJmYWxzZSIpID09IDApIHsKKyAgICBlbHNlIGlmIChlcXVhbHNJZ25v
cmluZ0Nhc2UoZW5hYmxlZCwgImZhbHNlIikpIHsKICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0
ciwgQ1NTX1BST1BfX0tIVE1MX1VTRVJfTU9ESUZZLCBDU1NfVkFMX1JFQURfT05MWSk7CiAgICAg
ICAgIGlmIChwYXJ0KQogICAgICAgICAgICAgcGFydC0+cmVtb3ZlRWRpdGluZ1N0eWxlRnJvbUVs
ZW1lbnQodGhpcyk7ICAgIAogICAgIH0KLSAgICBlbHNlIGlmIChzdHJjYXNlY21wKGVuYWJsZWQs
ICJpbmhlcml0IikgPT0gMCkgeworICAgIGVsc2UgaWYgKGVxdWFsc0lnbm9yaW5nQ2FzZShlbmFi
bGVkLCAiaW5oZXJpdCIpKSB7CiAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9Q
X19LSFRNTF9VU0VSX01PRElGWSwgQ1NTX1ZBTF9JTkhFUklUKTsKICAgICAgICAgaWYgKHBhcnQp
CiAgICAgICAgICAgICBwYXJ0LT5yZW1vdmVFZGl0aW5nU3R5bGVGcm9tRWxlbWVudCh0aGlzKTsg
ICAgCkBAIC03MDAsMTExICs3MDAsMTExIEBAIGJvb2wgSFRNTEVsZW1lbnRJbXBsOjppc1JlY29n
bml6ZWRUYWdOYW0KIHsKICAgICBzdGF0aWMgSGFzaFNldDxET01TdHJpbmdJbXBsKiwgUG9pbnRl
ckhhc2g8RE9NU3RyaW5nSW1wbCo+ID4gdGFnTGlzdDsKICAgICBpZiAodGFnTGlzdC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoYVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRh
dGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoYWJiclRhZy5sb2NhbE5hbWUoKS5pbXBs
ZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoYWNyb255bVRhZy5sb2NhbE5h
bWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoYWRkcmVzc1Rh
Zy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQo
YXBwbGV0VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0
Lmluc2VydChhcmVhVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0
YWdMaXN0Lmluc2VydChiVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAg
ICB0YWdMaXN0Lmluc2VydChiYXNlVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwot
ICAgICAgICB0YWdMaXN0Lmluc2VydChiYXNlZm9udFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRh
dGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoYmRvVGFnLmxvY2FsTmFtZSgpLmltcGxl
bWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChiaWdUYWcubG9jYWxOYW1lKCku
aW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGJsb2NrcXVvdGVUYWcu
bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGJv
ZHlUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KGJyVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0
Lmluc2VydChidXR0b25UYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAg
IHRhZ0xpc3QuaW5zZXJ0KGNhbnZhc1RhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsK
LSAgICAgICAgdGFnTGlzdC5pbnNlcnQoY2FwdGlvblRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRh
dGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoY2VudGVyVGFnLmxvY2FsTmFtZSgpLmlt
cGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChjaXRlVGFnLmxvY2FsTmFt
ZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChjb2RlVGFnLmxv
Y2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChjb2xU
YWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KGNvbGdyb3VwVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdM
aXN0Lmluc2VydChkZFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAg
dGFnTGlzdC5pbnNlcnQoZGVsVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAg
ICAgICB0YWdMaXN0Lmluc2VydChkZm5UYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7
Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGRpclRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlv
bigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoZGl2VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVu
dGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChkbFRhZy5sb2NhbE5hbWUoKS5pbXBs
ZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoZHRUYWcubG9jYWxOYW1lKCku
aW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGVtVGFnLmxvY2FsTmFt
ZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChlbWJlZFRhZy5s
b2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoZmll
bGRzZXRUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KGZvbnRUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRh
Z0xpc3QuaW5zZXJ0KGZvcm1UYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KGZyYW1lVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkp
OwotICAgICAgICB0YWdMaXN0Lmluc2VydChmcmFtZXNldFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1l
bnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoaGVhZFRhZy5sb2NhbE5hbWUoKS5p
bXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoaDFUYWcubG9jYWxOYW1l
KCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGgyVGFnLmxvY2Fs
TmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChoM1RhZy5s
b2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoaDRU
YWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KGg1VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmlu
c2VydChoNlRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlz
dC5pbnNlcnQoaHJUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRh
Z0xpc3QuaW5zZXJ0KGh0bWxUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KGlUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0g
ICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGlmcmFtZVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlv
bigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoaW1nVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVu
dGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChpbnB1dFRhZy5sb2NhbE5hbWUoKS5p
bXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoaW5zVGFnLmxvY2FsTmFt
ZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChpc2luZGV4VGFn
LmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChr
YmRUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KGtleWdlblRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFn
TGlzdC5pbnNlcnQobGFiZWxUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KGxheWVyVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkp
OwotICAgICAgICB0YWdMaXN0Lmluc2VydChsZWdlbmRUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50
YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGxpVGFnLmxvY2FsTmFtZSgpLmltcGxl
bWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChsaW5rVGFnLmxvY2FsTmFtZSgp
LmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChtYXBUYWcubG9jYWxO
YW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KG1hcnF1ZWVU
YWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KG1lbnVUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KG1ldGFUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRh
Z0xpc3QuaW5zZXJ0KG5vYnJUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KG5vZW1iZWRUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24o
KSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KG5vZnJhbWVzVGFnLmxvY2FsTmFtZSgpLmltcGxl
bWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChub2xheWVyVGFnLmxvY2FsTmFt
ZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChub3NjcmlwdFRh
Zy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQo
b2JqZWN0VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0
Lmluc2VydChvbFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFn
TGlzdC5pbnNlcnQob3B0Z3JvdXBUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0g
ICAgICAgIHRhZ0xpc3QuaW5zZXJ0KG9wdGlvblRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlv
bigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQocFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRh
dGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQocGFyYW1UYWcubG9jYWxOYW1lKCkuaW1w
bGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHBsYWludGV4dFRhZy5sb2Nh
bE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQocHJlVGFn
LmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChx
VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2Vy
dChzVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmlu
c2VydChzYW1wVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdM
aXN0Lmluc2VydChzY3JpcHRUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KHNlbGVjdFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigp
KTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoc21hbGxUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50
YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHNwYW5UYWcubG9jYWxOYW1lKCkuaW1w
bGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHN0cmlrZVRhZy5sb2NhbE5h
bWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoc3Ryb25nVGFn
LmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChz
dHlsZVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5p
bnNlcnQoc3ViVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdM
aXN0Lmluc2VydChzdXBUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAg
IHRhZ0xpc3QuaW5zZXJ0KHRhYmxlVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwot
ICAgICAgICB0YWdMaXN0Lmluc2VydCh0Ym9keVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlv
bigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQodGRUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50
YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHRleHRhcmVhVGFnLmxvY2FsTmFtZSgp
LmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydCh0Zm9vdFRhZy5sb2Nh
bE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQodGhUYWcu
bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHRo
ZWFkVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmlu
c2VydCh0aXRsZVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFn
TGlzdC5pbnNlcnQodHJUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAg
IHRhZ0xpc3QuaW5zZXJ0KHR0VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAg
ICAgICB0YWdMaXN0Lmluc2VydCh1VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwot
ICAgICAgICB0YWdMaXN0Lmluc2VydCh1bFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigp
KTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQodmFyVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0
aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydCh3YnJUYWcubG9jYWxOYW1lKCkuaW1wbGVt
ZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHhtcFRhZy5sb2NhbE5hbWUoKS5p
bXBsZW1lbnRhdGlvbigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoYVRhZy5sb2NhbE5hbWUo
KS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChhYmJyVGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGFjcm9ueW1UYWcubG9jYWxOYW1lKCkuaW1w
bCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoYWRkcmVzc1RhZy5sb2NhbE5hbWUoKS5pbXBs
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChhcHBsZXRUYWcubG9jYWxOYW1lKCkuaW1wbCgp
KTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoYXJlYVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChiVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAg
IHRhZ0xpc3QuaW5zZXJ0KGJhc2VUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFn
TGlzdC5pbnNlcnQoYmFzZWZvbnRUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFn
TGlzdC5pbnNlcnQoYmRvVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KGJpZ1RhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2Vy
dChibG9ja3F1b3RlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KGJvZHlUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
YnJUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoYnV0dG9u
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGNhbnZhc1Rh
Zy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChjYXB0aW9uVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGNlbnRlclRhZy5s
b2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChjaXRlVGFnLmxvY2Fs
TmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGNvZGVUYWcubG9jYWxOYW1l
KCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoY29sVGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGNvbGdyb3VwVGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGRkVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7
CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGRlbFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAg
ICAgICB0YWdMaXN0Lmluc2VydChkZm5UYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAg
dGFnTGlzdC5pbnNlcnQoZGlyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KGRpdlRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmlu
c2VydChkbFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChk
dFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChlbVRhZy5s
b2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChlbWJlZFRhZy5sb2Nh
bE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChmaWVsZHNldFRhZy5sb2Nh
bE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChmb250VGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGZvcm1UYWcubG9jYWxOYW1lKCku
aW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoZnJhbWVUYWcubG9jYWxOYW1lKCkuaW1w
bCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoZnJhbWVzZXRUYWcubG9jYWxOYW1lKCkuaW1w
bCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoaGVhZFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkp
OworICAgICAgICB0YWdMaXN0Lmluc2VydChoMVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAg
ICAgICB0YWdMaXN0Lmluc2VydChoMlRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChoM1RhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0
Lmluc2VydChoNFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2Vy
dChoNVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChoNlRh
Zy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChoclRhZy5sb2Nh
bE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChodG1sVGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGlUYWcubG9jYWxOYW1lKCkuaW1w
bCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoaWZyYW1lVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGltZ1RhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChpbnB1dFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAg
ICAgICB0YWdMaXN0Lmluc2VydChpbnNUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAg
dGFnTGlzdC5pbnNlcnQoaXNpbmRleFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChrYmRUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoa2V5Z2VuVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KGxhYmVsVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KGxheWVyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KGxlZ2VuZFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChs
aVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChsaW5rVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KG1hcFRhZy5sb2Nh
bE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChtYXJxdWVlVGFnLmxvY2Fs
TmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KG1lbnVUYWcubG9jYWxOYW1l
KCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQobWV0YVRhZy5sb2NhbE5hbWUoKS5p
bXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChub2JyVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KG5vZW1iZWRUYWcubG9jYWxOYW1lKCkuaW1wbCgp
KTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQobm9mcmFtZXNUYWcubG9jYWxOYW1lKCkuaW1wbCgp
KTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQobm9sYXllclRhZy5sb2NhbE5hbWUoKS5pbXBsKCkp
OworICAgICAgICB0YWdMaXN0Lmluc2VydChub3NjcmlwdFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkp
OworICAgICAgICB0YWdMaXN0Lmluc2VydChvYmplY3RUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsK
KyAgICAgICAgdGFnTGlzdC5pbnNlcnQob2xUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQob3B0Z3JvdXBUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQob3B0aW9uVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAg
IHRhZ0xpc3QuaW5zZXJ0KHBUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQocGFyYW1UYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5p
bnNlcnQocGxhaW50ZXh0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KHByZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2Vy
dChxVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHNUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoc2FtcFRhZy5sb2Nh
bE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChzY3JpcHRUYWcubG9jYWxO
YW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoc2VsZWN0VGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHNtYWxsVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHNwYW5UYWcubG9jYWxOYW1lKCkuaW1w
bCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoc3RyaWtlVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHN0cm9uZ1RhZy5sb2NhbE5hbWUoKS5pbXBsKCkp
OworICAgICAgICB0YWdMaXN0Lmluc2VydChzdHlsZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChzdWJUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoc3VwVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRh
Z0xpc3QuaW5zZXJ0KHRhYmxlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KHRib2R5VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KHRkVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KHRleHRhcmVhVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KHRmb290VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHRo
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHRoZWFkVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHRpdGxlVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHRyVGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHR0VGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHVUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsK
KyAgICAgICAgdGFnTGlzdC5pbnNlcnQodWxUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQodmFyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRh
Z0xpc3QuaW5zZXJ0KHdiclRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0
Lmluc2VydCh4bXBUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKICAgICB9CiAKLSAgICByZXR1cm4g
dGFnTGlzdC5jb250YWlucyh0YWdOYW1lLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwor
ICAgIHJldHVybiB0YWdMaXN0LmNvbnRhaW5zKHRhZ05hbWUubG9jYWxOYW1lKCkuaW1wbCgpKTsK
IH0KIAogLy8gVGhlIHRlcm1zIGlubGluZSBhbmQgYmxvY2sgYXJlIHVzZWQgaGVyZSBsb29zZWx5
LiAgRG9uJ3QgbWFrZSB0aGUgbWlzdGFrZSBvZiBhc3N1bWluZyBhbGwgaW5saW5lcyBvciBhbGwg
YmxvY2tzCkBAIC04MTIsNTEgKzgxMiw1MSBAQCBib29sIEhUTUxFbGVtZW50SW1wbDo6aXNSZWNv
Z25pemVkVGFnTmFtCiBIYXNoU2V0PERPTVN0cmluZ0ltcGwqLCBQb2ludGVySGFzaDxET01TdHJp
bmdJbXBsKj4gPiogaW5saW5lVGFnTGlzdCgpIHsKICAgICBzdGF0aWMgSGFzaFNldDxET01TdHJp
bmdJbXBsKiwgUG9pbnRlckhhc2g8RE9NU3RyaW5nSW1wbCo+ID4gdGFnTGlzdDsKICAgICBpZiAo
dGFnTGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQodHRUYWcubG9jYWxO
YW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGlUYWcubG9j
YWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGJUYWcu
bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHVU
YWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KHNUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KHN0cmlrZVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFn
TGlzdC5pbnNlcnQoYmlnVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAg
ICB0YWdMaXN0Lmluc2VydChzbWFsbFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsK
LSAgICAgICAgdGFnTGlzdC5pbnNlcnQoZW1UYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24o
KSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHN0cm9uZ1RhZy5sb2NhbE5hbWUoKS5pbXBsZW1l
bnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoZGZuVGFnLmxvY2FsTmFtZSgpLmlt
cGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChjb2RlVGFnLmxvY2FsTmFt
ZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChzYW1wVGFnLmxv
Y2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChrYmRU
YWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KHZhclRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5p
bnNlcnQoY2l0ZVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFn
TGlzdC5pbnNlcnQoYWJiclRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoYWNyb255bVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigp
KTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoYVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlv
bigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoY2FudmFzVGFnLmxvY2FsTmFtZSgpLmltcGxl
bWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChpbWdUYWcubG9jYWxOYW1lKCku
aW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGFwcGxldFRhZy5sb2Nh
bE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQob2JqZWN0
VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2Vy
dChlbWJlZFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlz
dC5pbnNlcnQoZm9udFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAg
dGFnTGlzdC5pbnNlcnQoYmFzZWZvbnRUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7
Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGJyVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9u
KCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChzY3JpcHRUYWcubG9jYWxOYW1lKCkuaW1wbGVt
ZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KG1hcFRhZy5sb2NhbE5hbWUoKS5p
bXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQocVRhZy5sb2NhbE5hbWUo
KS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoc3ViVGFnLmxvY2Fs
TmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChzdXBUYWcu
bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHNw
YW5UYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KGJkb1RhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlz
dC5pbnNlcnQoaWZyYW1lVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAg
ICB0YWdMaXN0Lmluc2VydChpbnB1dFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsK
LSAgICAgICAgdGFnTGlzdC5pbnNlcnQoa2V5Z2VuVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0
aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChzZWxlY3RUYWcubG9jYWxOYW1lKCkuaW1w
bGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHRleHRhcmVhVGFnLmxvY2Fs
TmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChsYWJlbFRh
Zy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQo
YnV0dG9uVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0
Lmluc2VydChpbnNUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRh
Z0xpc3QuaW5zZXJ0KGRlbFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAg
ICAgdGFnTGlzdC5pbnNlcnQobm9iclRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsK
LSAgICAgICAgdGFnTGlzdC5pbnNlcnQod2JyVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9u
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydCh0dFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChpVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAg
IHRhZ0xpc3QuaW5zZXJ0KGJUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQodVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2Vy
dChzVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHN0cmlr
ZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChiaWdUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoc21hbGxUYWcubG9j
YWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoZW1UYWcubG9jYWxOYW1l
KCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoc3Ryb25nVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGRmblRhZy5sb2NhbE5hbWUoKS5pbXBs
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChjb2RlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7
CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHNhbXBUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAg
ICAgICAgdGFnTGlzdC5pbnNlcnQoa2JkVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAg
IHRhZ0xpc3QuaW5zZXJ0KHZhclRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdM
aXN0Lmluc2VydChjaXRlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KGFiYnJUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNl
cnQoYWNyb255bVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2Vy
dChhVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGNhbnZh
c1RhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChpbWdUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoYXBwbGV0VGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KG9iamVjdFRhZy5sb2Nh
bE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChlbWJlZFRhZy5sb2NhbE5h
bWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChmb250VGFnLmxvY2FsTmFtZSgp
LmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGJhc2Vmb250VGFnLmxvY2FsTmFtZSgp
LmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGJyVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHNjcmlwdFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkp
OworICAgICAgICB0YWdMaXN0Lmluc2VydChtYXBUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAg
ICAgICAgdGFnTGlzdC5pbnNlcnQocVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChzdWJUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoc3VwVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KHNwYW5UYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
YmRvVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGlmcmFt
ZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChpbnB1dFRh
Zy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChrZXlnZW5UYWcu
bG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoc2VsZWN0VGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHRleHRhcmVhVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGxhYmVsVGFnLmxvY2Fs
TmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGJ1dHRvblRhZy5sb2NhbE5h
bWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChpbnNUYWcubG9jYWxOYW1lKCku
aW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoZGVsVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KG5vYnJUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsK
KyAgICAgICAgdGFnTGlzdC5pbnNlcnQod2JyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CiAgICAg
fQogICAgIHJldHVybiAmdGFnTGlzdDsKIH0KQEAgLTg2NCwzOSArODY0LDM5IEBAIEhhc2hTZXQ8
RE9NU3RyaW5nSW1wbCosIFBvaW50ZXJIYXNoPERPTVMKIEhhc2hTZXQ8RE9NU3RyaW5nSW1wbCos
IFBvaW50ZXJIYXNoPERPTVN0cmluZ0ltcGwqPiA+KiBibG9ja1RhZ0xpc3QoKSB7CiAgICAgc3Rh
dGljIEhhc2hTZXQ8RE9NU3RyaW5nSW1wbCosIFBvaW50ZXJIYXNoPERPTVN0cmluZ0ltcGwqPiA+
IHRhZ0xpc3Q7CiAgICAgaWYgKHRhZ0xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KHBUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KGgxVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0
YWdMaXN0Lmluc2VydChoMlRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoaDNUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0g
ICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGg0VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkp
OwotICAgICAgICB0YWdMaXN0Lmluc2VydChoNVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlv
bigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoaDZUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50
YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHVsVGFnLmxvY2FsTmFtZSgpLmltcGxl
bWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChvbFRhZy5sb2NhbE5hbWUoKS5p
bXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoZGlyVGFnLmxvY2FsTmFt
ZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChtZW51VGFnLmxv
Y2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChwcmVU
YWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KHBsYWludGV4dFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFn
TGlzdC5pbnNlcnQoeG1wVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAg
ICB0YWdMaXN0Lmluc2VydChkbFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAg
ICAgICAgdGFnTGlzdC5pbnNlcnQoZGl2VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkp
OwotICAgICAgICB0YWdMaXN0Lmluc2VydChsYXllclRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRh
dGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoY2VudGVyVGFnLmxvY2FsTmFtZSgpLmlt
cGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChub3NjcmlwdFRhZy5sb2Nh
bE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQobm9mcmFt
ZXNUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KG5vZW1iZWRUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRh
Z0xpc3QuaW5zZXJ0KG5vbGF5ZXJUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0g
ICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGJsb2NrcXVvdGVUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50
YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGZvcm1UYWcubG9jYWxOYW1lKCkuaW1w
bGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGlzaW5kZXhUYWcubG9jYWxO
YW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGhyVGFnLmxv
Y2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydCh0YWJs
ZVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNl
cnQoZmllbGRzZXRUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHRh
Z0xpc3QuaW5zZXJ0KGFkZHJlc3NUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0g
ICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGxpVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkp
OwotICAgICAgICB0YWdMaXN0Lmluc2VydChkZFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlv
bigpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoZHRUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50
YXRpb24oKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KG1hcnF1ZWVUYWcubG9jYWxOYW1lKCku
aW1wbGVtZW50YXRpb24oKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHBUYWcubG9jYWxOYW1l
KCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoaDFUYWcubG9jYWxOYW1lKCkuaW1w
bCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoaDJUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsK
KyAgICAgICAgdGFnTGlzdC5pbnNlcnQoaDNUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoaDRUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFn
TGlzdC5pbnNlcnQoaDVUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5p
bnNlcnQoaDZUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
dWxUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQob2xUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoZGlyVGFnLmxvY2Fs
TmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KG1lbnVUYWcubG9jYWxOYW1l
KCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQocHJlVGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHBsYWludGV4dFRhZy5sb2NhbE5hbWUoKS5p
bXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydCh4bXBUYWcubG9jYWxOYW1lKCkuaW1wbCgp
KTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoZGxUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAg
ICAgICAgdGFnTGlzdC5pbnNlcnQoZGl2VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAg
IHRhZ0xpc3QuaW5zZXJ0KGxheWVyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRh
Z0xpc3QuaW5zZXJ0KGNlbnRlclRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdM
aXN0Lmluc2VydChub3NjcmlwdFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdM
aXN0Lmluc2VydChub2ZyYW1lc1RhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdM
aXN0Lmluc2VydChub2VtYmVkVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KG5vbGF5ZXJUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoYmxvY2txdW90ZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdM
aXN0Lmluc2VydChmb3JtVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KGlzaW5kZXhUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5p
bnNlcnQoaHJUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
dGFibGVUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoZmll
bGRzZXRUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoYWRk
cmVzc1RhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChsaVRh
Zy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChkZFRhZy5sb2Nh
bE5hbWUoKS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChkdFRhZy5sb2NhbE5hbWUo
KS5pbXBsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChtYXJxdWVlVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSk7CiAgICAgfQogICAgIHJldHVybiAmdGFnTGlzdDsKIH0KQEAgLTkwOCw5ICs5MDgs
OSBAQCBib29sIEhUTUxFbGVtZW50SW1wbDo6aW5FaXRoZXJUYWdMaXN0KGNvCiAgICAgICAgIAog
ICAgIGlmIChuZXdDaGlsZC0+aXNIVE1MRWxlbWVudCgpKSB7CiAgICAgICAgIGNvbnN0IEhUTUxF
bGVtZW50SW1wbCogY2hpbGQgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudEltcGwqPihu
ZXdDaGlsZCk7Ci0gICAgICAgIGlmIChpbmxpbmVUYWdMaXN0KCktPmNvbnRhaW5zKGNoaWxkLT50
YWdOYW1lKCkubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSkpCisgICAgICAgIGlmIChpbmxp
bmVUYWdMaXN0KCktPmNvbnRhaW5zKGNoaWxkLT50YWdOYW1lKCkubG9jYWxOYW1lKCkuaW1wbCgp
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoYmxvY2tUYWdMaXN0KCkt
PmNvbnRhaW5zKGNoaWxkLT50YWdOYW1lKCkubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSkp
CisgICAgICAgIGlmIChibG9ja1RhZ0xpc3QoKS0+Y29udGFpbnMoY2hpbGQtPnRhZ05hbWUoKS5s
b2NhbE5hbWUoKS5pbXBsKCkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIHJl
dHVybiAhaXNSZWNvZ25pemVkVGFnTmFtZShjaGlsZC0+dGFnTmFtZSgpKTsgLy8gQWNjZXB0IGN1
c3RvbSBodG1sIHRhZ3MKICAgICB9CkBAIC05MjUsNyArOTI1LDcgQEAgYm9vbCBIVE1MRWxlbWVu
dEltcGw6OmluSW5saW5lVGFnTGlzdChjbwogCiAgICAgaWYgKG5ld0NoaWxkLT5pc0hUTUxFbGVt
ZW50KCkpIHsKICAgICAgICAgY29uc3QgSFRNTEVsZW1lbnRJbXBsKiBjaGlsZCA9IHN0YXRpY19j
YXN0PGNvbnN0IEhUTUxFbGVtZW50SW1wbCo+KG5ld0NoaWxkKTsKLSAgICAgICAgaWYgKGlubGlu
ZVRhZ0xpc3QoKS0+Y29udGFpbnMoY2hpbGQtPnRhZ05hbWUoKS5sb2NhbE5hbWUoKS5pbXBsZW1l
bnRhdGlvbigpKSkKKyAgICAgICAgaWYgKGlubGluZVRhZ0xpc3QoKS0+Y29udGFpbnMoY2hpbGQt
PnRhZ05hbWUoKS5sb2NhbE5hbWUoKS5pbXBsKCkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIHJldHVybiAhaXNSZWNvZ25pemVkVGFnTmFtZShjaGlsZC0+dGFnTmFtZSgpKTsg
Ly8gQWNjZXB0IGN1c3RvbSBodG1sIHRhZ3MKICAgICB9CkBAIC05NDAsNyArOTQwLDcgQEAgYm9v
bCBIVE1MRWxlbWVudEltcGw6OmluQmxvY2tUYWdMaXN0KGNvbgogICAgICAgICAgICAgCiAgICAg
aWYgKG5ld0NoaWxkLT5pc0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgY29uc3QgSFRNTEVsZW1l
bnRJbXBsKiBjaGlsZCA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50SW1wbCo+KG5ld0No
aWxkKTsKLSAgICAgICAgcmV0dXJuIChibG9ja1RhZ0xpc3QoKS0+Y29udGFpbnMoY2hpbGQtPnRh
Z05hbWUoKS5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKSk7CisgICAgICAgIHJldHVybiAo
YmxvY2tUYWdMaXN0KCktPmNvbnRhaW5zKGNoaWxkLT50YWdOYW1lKCkubG9jYWxOYW1lKCkuaW1w
bCgpKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDoga2h0bWwvaHRtbC9odG1s
X2Zvcm1pbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9odG1sL2h0bWxfZm9ybWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE4NQpkaWZm
IC1wIC11IC1yMS4xODUga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAotLS0ga2h0bWwvaHRt
bC9odG1sX2Zvcm1pbXBsLmNwcAkxNCBBdWcgMjAwNSAwODowNzoyMiAtMDAwMAkxLjE4NQorKysg
a2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAkyMSBBdWcgMjAwNSAxNjo1MTozMyAtMDAwMApA
QCAtNjQ3LDkgKzY0Nyw5IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRB
dHQKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdGFyZ2V0QXR0cikgewogICAgICAgICBt
X3RhcmdldCA9IGF0dHItPnZhbHVlKCk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
bWV0aG9kQXR0cikgewotICAgICAgICBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJw
b3N0IiApID09IDAgKQorICAgICAgICBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFs
dWUoKSwgInBvc3QiICkgKQogICAgICAgICAgICAgbV9wb3N0ID0gdHJ1ZTsKLSAgICAgICAgZWxz
ZSBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJnZXQiICkgPT0gMCApCisgICAgICAg
IGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJnZXQiICkgKQog
ICAgICAgICAgICAgbV9wb3N0ID0gZmFsc2U7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gZW5jdHlwZUF0dHIpIHsKICAgICAgICAgcGFyc2VFbmN0eXBlKGF0dHItPnZhbHVlKCkpOwpA
QCAtNjYwLDcgKzY2MCw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRB
dHQKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhY2NlcHRBdHRyKSB7CiAgICAgICAg
IC8vIGlnbm9yZSB0aGlzIG9uZSBmb3IgdGhlIG1vbWVudC4uLgogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IGF1dG9jb21wbGV0ZUF0dHIpIHsKLSAgICAgICAgbV9hdXRvY29tcGxldGUg
PSBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAib2ZmIiApOworICAgICAgICBtX2F1dG9jb21w
bGV0ZSA9ICFlcXVhbHNJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgIm9mZiIpOwogICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uc3VibWl0QXR0cikgewogICAgICAgICBzZXRIVE1M
RXZlbnRMaXN0ZW5lcihFdmVudEltcGw6OlNVQk1JVF9FVkVOVCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+
dmFsdWUoKS5zdHJpbmcoKSwgdGhpcykpOwpAQCAtNjg1LDE0ICs2ODUsMTQgQEAgdm9pZCBIVE1M
Rm9ybUVsZW1lbnRJbXBsOjpyYWRpb0J1dHRvbkNoZQogICAgIGlmICghbV9zZWxlY3RlZFJhZGlv
QnV0dG9ucykKICAgICAgICAgbV9zZWxlY3RlZFJhZGlvQnV0dG9ucyA9IG5ldyBIYXNoTWFwPERP
TVN0cmluZ0ltcGwqLCBIVE1MSW5wdXRFbGVtZW50SW1wbCosIFBvaW50ZXJIYXNoPERPTVN0cmlu
Z0ltcGwqPiA+OwogCi0gICAgSFRNTElucHV0RWxlbWVudEltcGwqIGN1cnJlbnRDaGVja2VkUmFk
aW8gPSBtX3NlbGVjdGVkUmFkaW9CdXR0b25zLT5nZXQoY2FsbGVyLT5uYW1lKCkuaW1wbGVtZW50
YXRpb24oKSk7CisgICAgSFRNTElucHV0RWxlbWVudEltcGwqIGN1cnJlbnRDaGVja2VkUmFkaW8g
PSBtX3NlbGVjdGVkUmFkaW9CdXR0b25zLT5nZXQoY2FsbGVyLT5uYW1lKCkuaW1wbCgpKTsKICAg
ICBpZiAoY3VycmVudENoZWNrZWRSYWRpbyAmJiBjdXJyZW50Q2hlY2tlZFJhZGlvICE9IGNhbGxl
cikKICAgICAgICAgY3VycmVudENoZWNrZWRSYWRpby0+c2V0Q2hlY2tlZChmYWxzZSk7CiAgICAg
ICAgIAogICAgIC8vIE5vdyBpbnNlcnQgb3Vyc2VsdmVzIGludG8gdGhlIGhhc2guIFRoZXJlIHNo
b3VsZCByZWFsbHkgYmUgYSByZXBsYWNlIG1ldGhvZAogICAgIC8vIGluIEhhc2hNYXAuLi4KLSAg
ICBtX3NlbGVjdGVkUmFkaW9CdXR0b25zLT5yZW1vdmUoY2FsbGVyLT5uYW1lKCkuaW1wbGVtZW50
YXRpb24oKSk7Ci0gICAgbV9zZWxlY3RlZFJhZGlvQnV0dG9ucy0+aW5zZXJ0KGNhbGxlci0+bmFt
ZSgpLmltcGxlbWVudGF0aW9uKCksIGNhbGxlcik7CisgICAgbV9zZWxlY3RlZFJhZGlvQnV0dG9u
cy0+cmVtb3ZlKGNhbGxlci0+bmFtZSgpLmltcGwoKSk7CisgICAgbV9zZWxlY3RlZFJhZGlvQnV0
dG9ucy0+aW5zZXJ0KGNhbGxlci0+bmFtZSgpLmltcGwoKSwgY2FsbGVyKTsKIH0KIAogSFRNTElu
cHV0RWxlbWVudEltcGwqIEhUTUxGb3JtRWxlbWVudEltcGw6OmNoZWNrZWRSYWRpb0J1dHRvbkZv
ckdyb3VwKERPTVN0cmluZ0ltcGwqIG5hbWUpCkBAIC03NjgsOSArNzY4LDkgQEAgdm9pZCBIVE1M
Rm9ybUVsZW1lbnRJbXBsOjpyZWdpc3RlckZvcm1FbAogdm9pZCBIVE1MRm9ybUVsZW1lbnRJbXBs
OjpyZW1vdmVGb3JtRWxlbWVudChIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCAqZSkKIHsKICAg
ICBpZiAobV9zZWxlY3RlZFJhZGlvQnV0dG9ucyAmJiAhZS0+bmFtZSgpLmlzRW1wdHkoKSkgewot
ICAgICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCogY3VycmVudENoZWNrZWRSYWRpbyA9
IG1fc2VsZWN0ZWRSYWRpb0J1dHRvbnMtPmdldChlLT5uYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7
CisgICAgICAgIEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKiBjdXJyZW50Q2hlY2tlZFJhZGlv
ID0gbV9zZWxlY3RlZFJhZGlvQnV0dG9ucy0+Z2V0KGUtPm5hbWUoKS5pbXBsKCkpOwogICAgICAg
ICBpZiAoY3VycmVudENoZWNrZWRSYWRpbyA9PSBlKQotICAgICAgICAgICAgbV9zZWxlY3RlZFJh
ZGlvQnV0dG9ucy0+cmVtb3ZlKGUtPm5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICAgICAg
ICAgIG1fc2VsZWN0ZWRSYWRpb0J1dHRvbnMtPnJlbW92ZShlLT5uYW1lKCkuaW1wbCgpKTsKICAg
ICB9CiAgICAgICAgICAgICAKICAgICByZW1vdmVGcm9tVmVjdG9yKGZvcm1FbGVtZW50cywgZSk7
CkBAIC0xMjIyLDExICsxMjIyLDExIEBAIHZvaWQgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsOjpmb2N1
cygpCiB2b2lkIEhUTUxCdXR0b25FbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09ICB0eXBl
QXR0cikgewotICAgICAgICBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJzdWJtaXQi
ICkgPT0gMCApCisgICAgICAgIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgp
LCAic3VibWl0IiApICkKICAgICAgICAgICAgIG1fdHlwZSA9IFNVQk1JVDsKLSAgICAgICAgZWxz
ZSBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJyZXNldCIgKSA9PSAwICkKKyAgICAg
ICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgInJlc2V0IiAp
ICkKICAgICAgICAgICAgIG1fdHlwZSA9IFJFU0VUOwotICAgICAgICBlbHNlIGlmICggc3RyY2Fz
ZWNtcCggYXR0ci0+dmFsdWUoKSwgImJ1dHRvbiIgKSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiAo
IGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgImJ1dHRvbiIgKSApCiAgICAgICAg
ICAgICBtX3R5cGUgPSBCVVRUT047CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdmFs
dWVBdHRyKSB7CiAgICAgICAgIG1fdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwpAQCAtMTQxMiw3ICsx
NDEyLDcgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6aXNLZXlib2FyZEZvYwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICAvLyBBbGxvdyBrZXlib2FyZCBmb2N1cyBpZiB3ZSdyZSBj
aGVja2VkIG9yIGlmIG5vdGhpbmcgaW4gdGhlIGdyb3VwIGlzIGNoZWNrZWQuCi0gICAgICAgIHJl
dHVybiBjaGVja2VkKCkgfHwgIW1fZm9ybS0+Y2hlY2tlZFJhZGlvQnV0dG9uRm9yR3JvdXAobmFt
ZSgpLmltcGxlbWVudGF0aW9uKCkpOworICAgICAgICByZXR1cm4gY2hlY2tlZCgpIHx8ICFtX2Zv
cm0tPmNoZWNrZWRSYWRpb0J1dHRvbkZvckdyb3VwKG5hbWUoKS5pbXBsKCkpOwogICAgIH0KICAg
ICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE0MzIsMzAgKzE0MzIsMzAgQEAgdm9pZCBIVE1MSW5w
dXRFbGVtZW50SW1wbDo6c2V0SW5wdXRUeXBlKAogewogICAgIHR5cGVFbnVtIG5ld1R5cGU7CiAg
ICAgCi0gICAgaWYgKCBzdHJjYXNlY21wKCB0LCAicGFzc3dvcmQiICkgPT0gMCApCisgICAgaWYg
KCBlcXVhbHNJZ25vcmluZ0Nhc2UoIHQsICJwYXNzd29yZCIgKSApCiAgICAgICAgIG5ld1R5cGUg
PSBQQVNTV09SRDsKLSAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggdCwgImNoZWNrYm94IiApID09
IDAgKQorICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIHQsICJjaGVja2JveCIgKSAp
CiAgICAgICAgIG5ld1R5cGUgPSBDSEVDS0JPWDsKLSAgICBlbHNlIGlmICggc3RyY2FzZWNtcCgg
dCwgInJhZGlvIiApID09IDAgKQorICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIHQs
ICJyYWRpbyIgKSApCiAgICAgICAgIG5ld1R5cGUgPSBSQURJTzsKLSAgICBlbHNlIGlmICggc3Ry
Y2FzZWNtcCggdCwgInN1Ym1pdCIgKSA9PSAwICkKKyAgICBlbHNlIGlmICggZXF1YWxzSWdub3Jp
bmdDYXNlKCB0LCAic3VibWl0IiApICkKICAgICAgICAgbmV3VHlwZSA9IFNVQk1JVDsKLSAgICBl
bHNlIGlmICggc3RyY2FzZWNtcCggdCwgInJlc2V0IiApID09IDAgKQorICAgIGVsc2UgaWYgKCBl
cXVhbHNJZ25vcmluZ0Nhc2UoIHQsICJyZXNldCIgKSApCiAgICAgICAgIG5ld1R5cGUgPSBSRVNF
VDsKLSAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggdCwgImZpbGUiICkgPT0gMCApCisgICAgZWxz
ZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggdCwgImZpbGUiICkgKQogICAgICAgICBuZXdUeXBl
ID0gRklMRTsKLSAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggdCwgImhpZGRlbiIgKSA9PSAwICkK
KyAgICBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCB0LCAiaGlkZGVuIiApICkKICAgICAg
ICAgbmV3VHlwZSA9IEhJRERFTjsKLSAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggdCwgImltYWdl
IiApID09IDAgKQorICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIHQsICJpbWFnZSIg
KSApCiAgICAgICAgIG5ld1R5cGUgPSBJTUFHRTsKLSAgICBlbHNlIGlmICggc3RyY2FzZWNtcCgg
dCwgImJ1dHRvbiIgKSA9PSAwICkKKyAgICBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCB0
LCAiYnV0dG9uIiApICkKICAgICAgICAgbmV3VHlwZSA9IEJVVFRPTjsKLSAgICBlbHNlIGlmICgg
c3RyY2FzZWNtcCggdCwgImtodG1sX2lzaW5kZXgiICkgPT0gMCApCisgICAgZWxzZSBpZiAoIGVx
dWFsc0lnbm9yaW5nQ2FzZSggdCwgImtodG1sX2lzaW5kZXgiICkgKQogICAgICAgICBuZXdUeXBl
ID0gSVNJTkRFWDsKICNpZiBBUFBMRV9DSEFOR0VTCi0gICAgZWxzZSBpZiAoIHN0cmNhc2VjbXAo
IHQsICJzZWFyY2giICkgPT0gMCApCisgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSgg
dCwgInNlYXJjaCIgKSApCiAgICAgICAgIG5ld1R5cGUgPSBTRUFSQ0g7Ci0gICAgZWxzZSBpZiAo
IHN0cmNhc2VjbXAoIHQsICJyYW5nZSIgKSA9PSAwICkKKyAgICBlbHNlIGlmICggZXF1YWxzSWdu
b3JpbmdDYXNlKCB0LCAicmFuZ2UiICkgKQogICAgICAgICBuZXdUeXBlID0gUkFOR0U7CiAjZW5k
aWYKICAgICBlbHNlCkBAIC0xNDcxLDggKzE0NzEsOCBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJ
bXBsOjpzZXRJbnB1dFR5cGUoCiAgICAgICAgICAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIsIHR5
cGUoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobV9mb3JtICYmIG1fdHlw
ZSA9PSBSQURJTyAmJiAhbmFtZSgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGlmICht
X2Zvcm0tPmNoZWNrZWRSYWRpb0J1dHRvbkZvckdyb3VwKG5hbWUoKS5pbXBsZW1lbnRhdGlvbigp
KSA9PSB0aGlzKQotICAgICAgICAgICAgICAgICAgICBtX2Zvcm0tPnJlbW92ZVJhZGlvQnV0dG9u
R3JvdXAobmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOworICAgICAgICAgICAgICAgIGlmIChtX2Zv
cm0tPmNoZWNrZWRSYWRpb0J1dHRvbkZvckdyb3VwKG5hbWUoKS5pbXBsKCkpID09IHRoaXMpCisg
ICAgICAgICAgICAgICAgICAgIG1fZm9ybS0+cmVtb3ZlUmFkaW9CdXR0b25Hcm91cChuYW1lKCku
aW1wbCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJvb2wgd2FzQXR0YWNoZWQgPSBt
X2F0dGFjaGVkOwogICAgICAgICAgICAgaWYgKHdhc0F0dGFjaGVkKQpAQCAtMTc4NCw3ICsxNzg0
LDcgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShjbwogdm9pZCBIVE1M
SW5wdXRFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1w
bCAqYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IGF1dG9jb21wbGV0ZUF0dHIpIHsK
LSAgICAgICAgbV9hdXRvY29tcGxldGUgPSBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAib2Zm
IiApOworICAgICAgICBtX2F1dG9jb21wbGV0ZSA9ICFlcXVhbHNJZ25vcmluZ0Nhc2UoYXR0ci0+
dmFsdWUoKSwgIm9mZiIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09ICB0eXBlQXR0
cikgewogICAgICAgICBzZXRJbnB1dFR5cGUoYXR0ci0+dmFsdWUoKSk7CiAgICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gdmFsdWVBdHRyKSB7CkBAIC0zMjE4LDcgKzMyMTgsNyBAQCBib29s
IEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6YXBwZW5kRm9ybURhCiB7CiAjaWYgQVBQTEVfQ0hBTkdF
UwogICAgIC8vIE9ubHkgUlNBIGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuCi0gICAgaWYgKCFt
X2tleVR5cGUuaXNOdWxsKCkgJiYgc3RyY2FzZWNtcChtX2tleVR5cGUsICJyc2EiKSkgeworICAg
IGlmICghbV9rZXlUeXBlLmlzTnVsbCgpICYmICFlcXVhbHNJZ25vcmluZ0Nhc2UobV9rZXlUeXBl
LCAicnNhIikpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBRU3RyaW5nIHZh
bHVlID0gS1NTTEtleUdlbjo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHNlbGVj
dGVkSW5kZXgoKSwgbV9jaGFsbGVuZ2Uuc3RyaW5nKCksIGdldERvY3VtZW50KCktPnBhcnQoKS0+
YmFzZVVSTCgpKTsKQEAgLTM1NjQsMTMgKzM1NjQsMTMgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVt
ZW50SW1wbDo6cGFyc2VNYXBwZQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHdyYXBB
dHRyKSB7CiAgICAgICAgIC8vIHZpcnR1YWwgLyBwaHlzaWNhbCBpcyBOZXRzY2FwZSBleHRlbnNp
b24gb2YgSFRNTCAzLjAsIG5vdyBkZXByZWNhdGVkCiAgICAgICAgIC8vIHNvZnQvIGhhcmQgLyBv
ZmYgaXMgcmVjb21tZW5kYXRpb24gZm9yIEhUTUwgNCBleHRlbnNpb24gYnkgSUUgYW5kIE5TIDQK
LSAgICAgICAgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAidmlydHVhbCIgKSA9PSAw
ICB8fCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAic29mdCIpID09IDApCisgICAgICAgIGlm
ICggZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAidmlydHVhbCIgKSAgfHwgZXF1
YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAic29mdCIpKQogICAgICAgICAgICAgbV93
cmFwID0gdGFfVmlydHVhbDsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNhc2VjbXAgKCBhdHRyLT52
YWx1ZSgpLCAicGh5c2ljYWwiICkgPT0gMCB8fCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAi
aGFyZCIpID09IDApCisgICAgICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UgKCBhdHRy
LT52YWx1ZSgpLCAicGh5c2ljYWwiICkgfHwgZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1
ZSgpLCAiaGFyZCIpKQogICAgICAgICAgICAgbV93cmFwID0gdGFfUGh5c2ljYWw7Ci0gICAgICAg
IGVsc2UgaWYoc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgIm9uIiApID09IDApCisgICAgICAg
IGVsc2UgaWYoZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAib24iICkpCiAgICAg
ICAgICAgICBtX3dyYXAgPSB0YV9QaHlzaWNhbDsKLSAgICAgICAgZWxzZSBpZihzdHJjYXNlY21w
KCBhdHRyLT52YWx1ZSgpLCAib2ZmIikgPT0gMCkKKyAgICAgICAgZWxzZSBpZihlcXVhbHNJZ25v
cmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJvZmYiKSkKICAgICAgICAgICAgIG1fd3JhcCA9IHRh
X05vV3JhcDsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgICAgICByZW5kZXJlcigp
LT5zZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOwpJbmRleDoga2h0bWwvaHRtbC9odG1s
X2hlYWRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9odG1sL2h0bWxfaGVhZGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjU0CmRpZmYg
LXAgLXUgLXIxLjU0IGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAKLS0tIGtodG1sL2h0bWwv
aHRtbF9oZWFkaW1wbC5jcHAJMzAgSnVsIDIwMDUgMDI6MzM6MTcgLTAwMDAJMS41NAorKysga2h0
bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNwcAkyMSBBdWcgMjAwNSAxNjo1MTozNCAtMDAwMApAQCAt
NTkyLDcgKzU5Miw3IEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnRJbXBsOjpzZXRUZXh0KGNvbnMK
ICAgICAgICAgcmVtb3ZlQ2hpbGRyZW4oKTsKICAgICB9CiAgICAgCi0gICAgYXBwZW5kQ2hpbGQo
Z2V0RG9jdW1lbnQoKS0+Y3JlYXRlVGV4dE5vZGUodmFsdWUuaW1wbGVtZW50YXRpb24oKSksIGV4
Y2VwdGlvbmNvZGUpOworICAgIGFwcGVuZENoaWxkKGdldERvY3VtZW50KCktPmNyZWF0ZVRleHRO
b2RlKHZhbHVlLmltcGwoKSksIGV4Y2VwdGlvbmNvZGUpOwogfQogCiBET01TdHJpbmcgSFRNTFNj
cmlwdEVsZW1lbnRJbXBsOjpodG1sRm9yKCkgY29uc3QKQEAgLTgzMiw2ICs4MzIsNiBAQCB2b2lk
IEhUTUxUaXRsZUVsZW1lbnRJbXBsOjpzZXRUZXh0KGNvbnN0CiAgICAgICAgICAgICByZW1vdmVD
aGlsZHJlbigpOwogICAgICAgICB9CiAgICAgCi0gICAgICAgIGFwcGVuZENoaWxkKGdldERvY3Vt
ZW50KCktPmNyZWF0ZVRleHROb2RlKHZhbHVlLmltcGxlbWVudGF0aW9uKCkpLCBleGNlcHRpb25j
b2RlKTsKKyAgICAgICAgYXBwZW5kQ2hpbGQoZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlVGV4dE5vZGUo
dmFsdWUuaW1wbCgpKSwgZXhjZXB0aW9uY29kZSk7CiAgICAgfQogfQpJbmRleDoga2h0bWwvaHRt
bC9odG1sX2ltYWdlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NDgKZGlmZiAtcCAtdSAtcjEuNDgga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAKLS0tIGto
dG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCTMwIEp1bCAyMDA1IDAyOjMzOjE3IC0wMDAwCTEu
NDgKKysrIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCTIxIEF1ZyAyMDA1IDE2OjUxOjM1
IC0wMDAwCkBAIC01OTYsMTMgKzU5NiwxMyBAQCBIVE1MQXJlYUVsZW1lbnRJbXBsOjp+SFRNTEFy
ZWFFbGVtZW50SW1wCiB2b2lkIEhUTUxBcmVhRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBzaGFwZUF0dHIpIHsKLSAgICAgICAgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAi
ZGVmYXVsdCIgKSA9PSAwICkKKyAgICAgICAgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHIt
PnZhbHVlKCksICJkZWZhdWx0IiApICkKICAgICAgICAgICAgIG1fc2hhcGUgPSBEZWZhdWx0Owot
ICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgImNpcmNsZSIgKSA9
PSAwICkKKyAgICAgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUo
KSwgImNpcmNsZSIgKSApCiAgICAgICAgICAgICBtX3NoYXBlID0gQ2lyY2xlOwotICAgICAgICBl
bHNlIGlmICggc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgInBvbHkiICkgPT0gMCApCisgICAg
ICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJwb2x5IiAp
ICkKICAgICAgICAgICAgIG1fc2hhcGUgPSBQb2x5OwotICAgICAgICBlbHNlIGlmICggc3RyY2Fz
ZWNtcCggYXR0ci0+dmFsdWUoKSwgInJlY3QiICkgPT0gMCApCisgICAgICAgIGVsc2UgaWYgKCBl
cXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJyZWN0IiApICkKICAgICAgICAgICAg
IG1fc2hhcGUgPSBSZWN0OwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGNvb3Jkc0F0
dHIpIHsKICAgICAgICAgaWYgKG1fY29vcmRzKSBkZWxldGUgW10gbV9jb29yZHM7CkluZGV4OiBr
aHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjQ2CmRpZmYgLXAgLXUgLXIxLjQ2IGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBs
LmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuY3BwCTMwIEp1bCAyMDA1IDAyOjMz
OjE3IC0wMDAwCTEuNDYKKysrIGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAkyMSBBdWcg
MjAwNSAxNjo1MTozNSAtMDAwMApAQCAtNDA0LDcgKzQwNCw3IEBAIHZvaWQgSFRNTEJSRWxlbWVu
dEltcGw6OnBhcnNlTWFwcGVkQXR0cmkKICAgICAgICAgLy8gPGJyIGNsZWFyPiBhbmQgPGJyIGNs
ZWFyPSIiPiBhcmUganVzdCB0cmVhdGVkIGxpa2UgPGJyPiBieSBHZWNrbywKICAgICAgICAgLy8g
TWFjIElFLCBldGMuIC1kd2gKICAgICAgICAgaWYgKCFzdHIuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBpZiAoc3RyY2FzZWNtcChzdHIsImFsbCIpID09IDApIAorICAgICAgICAgICAgaWYgKGVx
dWFsc0lnbm9yaW5nQ2FzZShzdHIsImFsbCIpKSAKICAgICAgICAgICAgICAgICBzdHIgPSAiYm90
aCI7CiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9DTEVBUiwgc3Ry
KTsKICAgICAgICAgfQpJbmRleDoga2h0bWwvaHRtbC9odG1sX2xpc3RpbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfbGlzdGltcGwu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzCmRpZmYgLXAgLXUgLXIxLjEzIGtodG1sL2h0
bWwvaHRtbF9saXN0aW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9saXN0aW1wbC5jcHAJMzAg
SnVsIDIwMDUgMDI6MzM6MTcgLTAwMDAJMS4xMworKysga2h0bWwvaHRtbC9odG1sX2xpc3RpbXBs
LmNwcAkyMSBBdWcgMjAwNSAxNjo1MTozNSAtMDAwMApAQCAtMTA4LDE1ICsxMDgsMTUgQEAgYm9v
bCBIVE1MT0xpc3RFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShjbwogdm9pZCBIVE1MT0xpc3RFbGVt
ZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikK
IHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IHR5cGVBdHRyKSB7Ci0gICAgICAgIGlmICggc3Ry
Y21wKCBhdHRyLT52YWx1ZSgpLCAiYSIgKSA9PSAwICkKKyAgICAgICAgaWYgKGF0dHItPnZhbHVl
KCkgPT0gImEiKQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElT
VF9TVFlMRV9UWVBFLCBDU1NfVkFMX0xPV0VSX0FMUEhBKTsKLSAgICAgICAgZWxzZSBpZiAoIHN0
cmNtcCggYXR0ci0+dmFsdWUoKSwgIkEiICkgPT0gMCApCisgICAgICAgIGVsc2UgaWYgKGF0dHIt
PnZhbHVlKCkgPT0gIkEiKQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BS
T1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFMX1VQUEVSX0FMUEhBKTsKLSAgICAgICAgZWxzZSBp
ZiAoIHN0cmNtcCggYXR0ci0+dmFsdWUoKSwgImkiICkgPT0gMCApCisgICAgICAgIGVsc2UgaWYg
KGF0dHItPnZhbHVlKCkgPT0gImkiKQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwg
Q1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFMX0xPV0VSX1JPTUFOKTsKLSAgICAgICAg
ZWxzZSBpZiAoIHN0cmNtcCggYXR0ci0+dmFsdWUoKSwgIkkiICkgPT0gMCApCisgICAgICAgIGVs
c2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gIkkiKQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHko
YXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFMX1VQUEVSX1JPTUFOKTsKLSAg
ICAgICAgZWxzZSBpZiAoIHN0cmNtcCggYXR0ci0+dmFsdWUoKSwgIjEiICkgPT0gMCApCisgICAg
ICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gIjEiKQogICAgICAgICAgICAgYWRkQ1NTUHJv
cGVydHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFMX0RFQ0lNQUwpOwog
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHN0YXJ0QXR0cikgewogICAgICAgICBfc3Rh
cnQgPSAhYXR0ci0+aXNOdWxsKCkgPyBhdHRyLT52YWx1ZSgpLnRvSW50KCkgOiAxOwpAQCAtMTc1
LDE1ICsxNzUsMTUgQEAgdm9pZCBIVE1MTElFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaQog
ICAgICAgICAgICAgbGlzdC0+c2V0VmFsdWUocmVxdWVzdGVkVmFsdWUpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdHlwZUF0dHIpIHsKLSAgICAgICAgaWYgKCBz
dHJjbXAoIGF0dHItPnZhbHVlKCksICJhIiApID09IDAgKQorICAgICAgICBpZiAoYXR0ci0+dmFs
dWUoKSA9PSAiYSIpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9M
SVNUX1NUWUxFX1RZUEUsIENTU19WQUxfTE9XRVJfQUxQSEEpOwotICAgICAgICBlbHNlIGlmICgg
c3RyY21wKCBhdHRyLT52YWx1ZSgpLCAiQSIgKSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiAoYXR0
ci0+dmFsdWUoKSA9PSAiQSIpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1Nf
UFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19WQUxfVVBQRVJfQUxQSEEpOwotICAgICAgICBlbHNl
IGlmICggc3RyY21wKCBhdHRyLT52YWx1ZSgpLCAiaSIgKSA9PSAwICkKKyAgICAgICAgZWxzZSBp
ZiAoYXR0ci0+dmFsdWUoKSA9PSAiaSIpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRy
LCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19WQUxfTE9XRVJfUk9NQU4pOwotICAgICAg
ICBlbHNlIGlmICggc3RyY21wKCBhdHRyLT52YWx1ZSgpLCAiSSIgKSA9PSAwICkKKyAgICAgICAg
ZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiSSIpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0
eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19WQUxfVVBQRVJfUk9NQU4pOwot
ICAgICAgICBlbHNlIGlmICggc3RyY21wKCBhdHRyLT52YWx1ZSgpLCAiMSIgKSA9PSAwICkKKyAg
ICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiMSIpCiAgICAgICAgICAgICBhZGRDU1NQ
cm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19WQUxfREVDSU1BTCk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9Q
X0xJU1RfU1RZTEVfVFlQRSwgYXR0ci0+dmFsdWUoKSk7CkluZGV4OiBraHRtbC9odG1sL2h0bWxf
dGFibGVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41OApkaWZm
IC1wIC11IC1yMS41OCBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcAotLS0ga2h0bWwvaHRt
bC9odG1sX3RhYmxlaW1wbC5jcHAJMzAgSnVsIDIwMDUgMDI6MzM6MTggLTAwMDAJMS41OAorKysg
a2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAJMjEgQXVnIDIwMDUgMTY6NTE6MzggLTAwMDAK
QEAgLTQ2NiwzNiArNDY2LDM2IEBAIHZvaWQgSFRNTFRhYmxlRWxlbWVudEltcGw6OnBhcnNlTWFw
cGVkQXQKICAgICAgICAgICAgIGFkZENTU0ltYWdlUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQkFD
S0dST1VORF9JTUFHRSwgZ2V0RG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKSk7CiAgICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gZnJhbWVBdHRyKSB7CiAjaWYgMAotICAgICAgICBpZiAo
IHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJ2b2lkIiApID09IDAgKQorICAgICAgICBpZiAo
IGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgInZvaWQiICkgKQogICAgICAgICAg
ICAgZnJhbWUgPSBWb2lkOwotICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggYXR0ci0+dmFs
dWUoKSwgImJvcmRlciIgKSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5n
Q2FzZSggYXR0ci0+dmFsdWUoKSwgImJvcmRlciIgKSApCiAgICAgICAgICAgICBmcmFtZSA9IEJv
eDsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJib3giICkg
PT0gMCApCisgICAgICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZhbHVl
KCksICJib3giICkgKQogICAgICAgICAgICAgZnJhbWUgPSBCb3g7Ci0gICAgICAgIGVsc2UgaWYg
KCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAiaHNpZGVzIiApID09IDAgKQorICAgICAgICBl
bHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAiaHNpZGVzIiApICkK
ICAgICAgICAgICAgIGZyYW1lID0gSHNpZGVzOwotICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNt
cCggYXR0ci0+dmFsdWUoKSwgInZzaWRlcyIgKSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiAoIGVx
dWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgInZzaWRlcyIgKSApCiAgICAgICAgICAg
ICBmcmFtZSA9IFZzaWRlczsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZh
bHVlKCksICJhYm92ZSIgKSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5n
Q2FzZSggYXR0ci0+dmFsdWUoKSwgImFib3ZlIiApICkKICAgICAgICAgICAgIGZyYW1lID0gQWJv
dmU7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAiYmVsb3ci
ICkgPT0gMCApCisgICAgICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZh
bHVlKCksICJiZWxvdyIgKSApCiAgICAgICAgICAgICBmcmFtZSA9IEJlbG93OwotICAgICAgICBl
bHNlIGlmICggc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgImxocyIgKSA9PSAwICkKKyAgICAg
ICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgImxocyIgKSAp
CiAgICAgICAgICAgICBmcmFtZSA9IExoczsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNhc2VjbXAo
IGF0dHItPnZhbHVlKCksICJyaHMiICkgPT0gMCApCisgICAgICAgIGVsc2UgaWYgKCBlcXVhbHNJ
Z25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJyaHMiICkgKQogICAgICAgICAgICAgZnJhbWUg
PSBSaHM7CiAjZW5kaWYKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBydWxlc0F0dHIp
IHsKICNpZiAwCi0gICAgICAgIGlmICggc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgIm5vbmUi
ICkgPT0gMCApCisgICAgICAgIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgp
LCAibm9uZSIgKSApCiAgICAgICAgICAgICBydWxlcyA9IE5vbmU7Ci0gICAgICAgIGVsc2UgaWYg
KCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAiZ3JvdXBzIiApID09IDAgKQorICAgICAgICBl
bHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAiZ3JvdXBzIiApICkK
ICAgICAgICAgICAgIHJ1bGVzID0gR3JvdXBzOwotICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNt
cCggYXR0ci0+dmFsdWUoKSwgInJvd3MiICkgPT0gMCApCisgICAgICAgIGVsc2UgaWYgKCBlcXVh
bHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJyb3dzIiApICkKICAgICAgICAgICAgIHJ1
bGVzID0gUm93czsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCks
ICJjb2xzIiApID09IDAgKQorICAgICAgICBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBh
dHRyLT52YWx1ZSgpLCAiY29scyIgKSApCiAgICAgICAgICAgICBydWxlcyA9IENvbHM7Ci0gICAg
ICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAiYWxsIiApID09IDAgKQor
ICAgICAgICBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAiYWxs
IiApICkKICAgICAgICAgICAgIHJ1bGVzID0gQWxsOwogI2VuZGlmCiAgICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gY2VsbHNwYWNpbmdBdHRyKSB7CkBAIC03NTMsMTMgKzc1MywxMyBAQCB2
b2lkIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbDo6cGFyc2VNYXBwCiAgICAgICAgICAgICBhZGRD
U1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9WRVJUSUNBTF9BTElHTiwgYXR0ci0+dmFsdWUoKSk7
CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWxpZ25BdHRyKSB7CiAgICAgICAgIERP
TVN0cmluZyB2ID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAgaWYgKCBzdHJjYXNlY21wKCBhdHRy
LT52YWx1ZSgpLCAibWlkZGxlIiApID09IDAgfHwgc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwg
ImNlbnRlciIgKSA9PSAwICkKKyAgICAgICAgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHIt
PnZhbHVlKCksICJtaWRkbGUiICkgfHwgZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgp
LCAiY2VudGVyIiApICkKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9Q
X1RFWFRfQUxJR04sIENTU19WQUxfX0tIVE1MX0NFTlRFUik7Ci0gICAgICAgIGVsc2UgaWYgKHN0
cmNhc2VjbXAoYXR0ci0+dmFsdWUoKSwgImFic21pZGRsZSIpID09IDApCisgICAgICAgIGVsc2Ug
aWYgKGVxdWFsc0lnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiYWJzbWlkZGxlIikpCiAgICAg
ICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFM
X0NFTlRFUik7Ci0gICAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYXR0ci0+dmFsdWUoKSwgImxl
ZnQiKSA9PSAwKQorICAgICAgICBlbHNlIGlmIChlcXVhbHNJZ25vcmluZ0Nhc2UoYXR0ci0+dmFs
dWUoKSwgImxlZnQiKSkKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9Q
X1RFWFRfQUxJR04sIENTU19WQUxfX0tIVE1MX0xFRlQpOwotICAgICAgICBlbHNlIGlmIChzdHJj
YXNlY21wKGF0dHItPnZhbHVlKCksICJyaWdodCIpID09IDApCisgICAgICAgIGVsc2UgaWYgKGVx
dWFsc0lnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAicmlnaHQiKSkKICAgICAgICAgICAgIGFk
ZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIENTU19WQUxfX0tIVE1MX1JJ
R0hUKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NT
X1BST1BfVEVYVF9BTElHTiwgdik7CkluZGV4OiBraHRtbC9odG1sL2h0bWxmYWN0b3J5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxmYWN0
b3J5LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXAgLXUgLXIxLjMga2h0bWwv
aHRtbC9odG1sZmFjdG9yeS5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbGZhY3RvcnkuY3BwCTMwIEp1
bCAyMDA1IDAyOjMzOjE4IC0wMDAwCTEuMworKysga2h0bWwvaHRtbC9odG1sZmFjdG9yeS5jcHAJ
MjEgQXVnIDIwMDUgMTY6NTE6MzkgLTAwMDAKQEAgLTM0MCw3NiArMzQwLDc2IEBAIEhUTUxFbGVt
ZW50SW1wbCogSFRNTEVsZW1lbnRGYWN0b3J5OjpjcmUKICAgICAgICAgZ0Z1bmN0aW9uTWFwID0g
bmV3IEZ1bmN0aW9uTWFwOwogICAgICAgICAKICAgICAgICAgLy8gUG9wdWxhdGUgaXQgd2l0aCBj
b25zdHJ1Y3RvciBmdW5jdGlvbnMuCi0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGh0bWxU
YWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgKHZvaWQqKSZodG1sQ29uc3RydWN0b3Ip
OwotICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChoZWFkVGFnLmxvY2FsTmFtZSgpLmltcGxl
bWVudGF0aW9uKCksICh2b2lkKikmaGVhZENvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9u
TWFwLT5pbnNlcnQoYm9keVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAodm9pZCop
JmJvZHlDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGJhc2VUYWcu
bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgKHZvaWQqKSZiYXNlQ29uc3RydWN0b3IpOwot
ICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChsaW5rVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVu
dGF0aW9uKCksICh2b2lkKikmbGlua0NvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFw
LT5pbnNlcnQobWV0YVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAodm9pZCopJm1l
dGFDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KHN0eWxlVGFnLmxv
Y2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICh2b2lkKikmc3R5bGVDb25zdHJ1Y3Rvcik7Ci0g
ICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KHRpdGxlVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVu
dGF0aW9uKCksICh2b2lkKikmdGl0bGVDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1h
cC0+aW5zZXJ0KGZyYW1lVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICh2b2lkKikm
ZnJhbWVDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGZyYW1lc2V0
VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICh2b2lkKikmZnJhbWVzZXRDb25zdHJ1
Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGlmcmFtZVRhZy5sb2NhbE5hbWUo
KS5pbXBsZW1lbnRhdGlvbigpLCAodm9pZCopJmlmcmFtZUNvbnN0cnVjdG9yKTsKLSAgICAgICAg
Z0Z1bmN0aW9uTWFwLT5pbnNlcnQoZm9ybVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigp
LCAodm9pZCopJmZvcm1Db25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0
KGJ1dHRvblRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAodm9pZCopJmJ1dHRvbkNv
bnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoaW5wdXRUYWcubG9jYWxO
YW1lKCkuaW1wbGVtZW50YXRpb24oKSwgKHZvaWQqKSZpbnB1dENvbnN0cnVjdG9yKTsKLSAgICAg
ICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoaXNpbmRleFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRh
dGlvbigpLCAodm9pZCopJmlzaW5kZXhDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1h
cC0+aW5zZXJ0KGZpZWxkc2V0VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICh2b2lk
KikmZmllbGRzZXRDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGxh
YmVsVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICh2b2lkKikmbGFiZWxDb25zdHJ1
Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGxlZ2VuZFRhZy5sb2NhbE5hbWUo
KS5pbXBsZW1lbnRhdGlvbigpLCAodm9pZCopJmxlZ2VuZENvbnN0cnVjdG9yKTsKLSAgICAgICAg
Z0Z1bmN0aW9uTWFwLT5pbnNlcnQob3B0Z3JvdXBUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRp
b24oKSwgKHZvaWQqKSZvcHRncm91cENvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFw
LT5pbnNlcnQob3B0aW9uVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICh2b2lkKikm
b3B0aW9uQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChzZWxlY3RU
YWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgKHZvaWQqKSZzZWxlY3RDb25zdHJ1Y3Rv
cik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KHRleHRhcmVhVGFnLmxvY2FsTmFtZSgp
LmltcGxlbWVudGF0aW9uKCksICh2b2lkKikmdGV4dGFyZWFDb25zdHJ1Y3Rvcik7Ci0gICAgICAg
IGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGRsVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCks
ICh2b2lkKikmZGxDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KG9s
VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICh2b2lkKikmb2xDb25zdHJ1Y3Rvcik7
Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KHVsVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVu
dGF0aW9uKCksICh2b2lkKikmdWxDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+
aW5zZXJ0KGRpclRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAodm9pZCopJmRpckNv
bnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQobWVudVRhZy5sb2NhbE5h
bWUoKS5pbXBsZW1lbnRhdGlvbigpLCAodm9pZCopJm1lbnVDb25zdHJ1Y3Rvcik7Ci0gICAgICAg
IGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGxpVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCks
ICh2b2lkKikmbGlDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGJs
b2NrcXVvdGVUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgKHZvaWQqKSZibG9ja3F1
b3RlQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChkaXZUYWcubG9j
YWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgKHZvaWQqKSZkaXZDb25zdHJ1Y3Rvcik7Ci0gICAg
ICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGgxVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9u
KCksICh2b2lkKikmaGVhZGluZ0NvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5p
bnNlcnQoaDJUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgKHZvaWQqKSZoZWFkaW5n
Q29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChoM1RhZy5sb2NhbE5h
bWUoKS5pbXBsZW1lbnRhdGlvbigpLCAodm9pZCopJmhlYWRpbmdDb25zdHJ1Y3Rvcik7Ci0gICAg
ICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGg0VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9u
KCksICh2b2lkKikmaGVhZGluZ0NvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5p
bnNlcnQoaDVUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgKHZvaWQqKSZoZWFkaW5n
Q29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChoNlRhZy5sb2NhbE5h
bWUoKS5pbXBsZW1lbnRhdGlvbigpLCAodm9pZCopJmhlYWRpbmdDb25zdHJ1Y3Rvcik7Ci0gICAg
ICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGhyVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9u
KCksICh2b2lkKikmaHJDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0
KHBUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgKHZvaWQqKSZwYXJhZ3JhcGhDb25z
dHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KHByZVRhZy5sb2NhbE5hbWUo
KS5pbXBsZW1lbnRhdGlvbigpLCAodm9pZCopJnByZUNvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1
bmN0aW9uTWFwLT5pbnNlcnQoeG1wVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICh2
b2lkKikmcHJlQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChiYXNl
Zm9udFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAodm9pZCopJmJhc2Vmb250Q29u
c3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChmb250VGFnLmxvY2FsTmFt
ZSgpLmltcGxlbWVudGF0aW9uKCksICh2b2lkKikmZm9udENvbnN0cnVjdG9yKTsKLSAgICAgICAg
Z0Z1bmN0aW9uTWFwLT5pbnNlcnQoZGVsVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCks
ICh2b2lkKikmbW9kQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChp
bnNUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgKHZvaWQqKSZtb2RDb25zdHJ1Y3Rv
cik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGFUYWcubG9jYWxOYW1lKCkuaW1wbGVt
ZW50YXRpb24oKSwgKHZvaWQqKSZhbmNob3JDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlv
bk1hcC0+aW5zZXJ0KGltZ1RhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAodm9pZCop
JmltYWdlQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChtYXBUYWcu
bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgKHZvaWQqKSZtYXBDb25zdHJ1Y3Rvcik7Ci0g
ICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGFyZWFUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50
YXRpb24oKSwgKHZvaWQqKSZhcmVhQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAt
Pmluc2VydChjYW52YXNUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgKHZvaWQqKSZj
YW52YXNDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGFwcGxldFRh
Zy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAodm9pZCopJmFwcGxldENvbnN0cnVjdG9y
KTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoZW1iZWRUYWcubG9jYWxOYW1lKCkuaW1w
bGVtZW50YXRpb24oKSwgKHZvaWQqKSZlbWJlZENvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0
aW9uTWFwLT5pbnNlcnQob2JqZWN0VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICh2
b2lkKikmb2JqZWN0Q29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChw
YXJhbVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAodm9pZCopJnBhcmFtQ29uc3Ry
dWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChzY3JpcHRUYWcubG9jYWxOYW1l
KCkuaW1wbGVtZW50YXRpb24oKSwgKHZvaWQqKSZzY3JpcHRDb25zdHJ1Y3Rvcik7Ci0gICAgICAg
IGdGdW5jdGlvbk1hcC0+aW5zZXJ0KHRhYmxlVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9u
KCksICh2b2lkKikmdGFibGVDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5z
ZXJ0KGNhcHRpb25UYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgKHZvaWQqKSZ0YWJs
ZUNhcHRpb25Db25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGNvbGdy
b3VwVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICh2b2lkKikmdGFibGVDb2xDb25z
dHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGNvbFRhZy5sb2NhbE5hbWUo
KS5pbXBsZW1lbnRhdGlvbigpLCAodm9pZCopJnRhYmxlQ29sQ29uc3RydWN0b3IpOwotICAgICAg
ICBnRnVuY3Rpb25NYXAtPmluc2VydCh0clRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigp
LCAodm9pZCopJnRhYmxlUm93Q29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPmlu
c2VydCh0ZFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAodm9pZCopJnRhYmxlQ2Vs
bENvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQodGhUYWcubG9jYWxO
YW1lKCkuaW1wbGVtZW50YXRpb24oKSwgKHZvaWQqKSZ0YWJsZUNlbGxDb25zdHJ1Y3Rvcik7Ci0g
ICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KHRoZWFkVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVu
dGF0aW9uKCksICh2b2lkKikmdGFibGVTZWN0aW9uQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVu
Y3Rpb25NYXAtPmluc2VydCh0Ym9keVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAo
dm9pZCopJnRhYmxlU2VjdGlvbkNvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5p
bnNlcnQodGZvb3RUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgKHZvaWQqKSZ0YWJs
ZVNlY3Rpb25Db25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGJyVGFn
LmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICh2b2lkKikmYnJDb25zdHJ1Y3Rvcik7Ci0g
ICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KHFUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRp
b24oKSwgKHZvaWQqKSZxdW90ZUNvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5p
bnNlcnQobWFycXVlZVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAodm9pZCopJm1h
cnF1ZWVDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGh0bWxUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmh0bWxDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdG
dW5jdGlvbk1hcC0+aW5zZXJ0KGhlYWRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmhl
YWRDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGJvZHlUYWcubG9j
YWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmJvZHlDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5j
dGlvbk1hcC0+aW5zZXJ0KGJhc2VUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmJhc2VD
b25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGxpbmtUYWcubG9jYWxO
YW1lKCkuaW1wbCgpLCAodm9pZCopJmxpbmtDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlv
bk1hcC0+aW5zZXJ0KG1ldGFUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJm1ldGFDb25z
dHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KHN0eWxlVGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSwgKHZvaWQqKSZzdHlsZUNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9u
TWFwLT5pbnNlcnQodGl0bGVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJnRpdGxlQ29u
c3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChmcmFtZVRhZy5sb2NhbE5h
bWUoKS5pbXBsKCksICh2b2lkKikmZnJhbWVDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlv
bk1hcC0+aW5zZXJ0KGZyYW1lc2V0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZmcmFt
ZXNldENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoaWZyYW1lVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZpZnJhbWVDb25zdHJ1Y3Rvcik7CisgICAgICAg
IGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGZvcm1UYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCop
JmZvcm1Db25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGJ1dHRvblRh
Zy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmYnV0dG9uQ29uc3RydWN0b3IpOworICAgICAg
ICBnRnVuY3Rpb25NYXAtPmluc2VydChpbnB1dFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lk
KikmaW5wdXRDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGlzaW5k
ZXhUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmlzaW5kZXhDb25zdHJ1Y3Rvcik7Cisg
ICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGZpZWxkc2V0VGFnLmxvY2FsTmFtZSgpLmltcGwo
KSwgKHZvaWQqKSZmaWVsZHNldENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5p
bnNlcnQobGFiZWxUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmxhYmVsQ29uc3RydWN0
b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChsZWdlbmRUYWcubG9jYWxOYW1lKCku
aW1wbCgpLCAodm9pZCopJmxlZ2VuZENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFw
LT5pbnNlcnQob3B0Z3JvdXBUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJm9wdGdyb3Vw
Q29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChvcHRpb25UYWcubG9j
YWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJm9wdGlvbkNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1
bmN0aW9uTWFwLT5pbnNlcnQoc2VsZWN0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZz
ZWxlY3RDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KHRleHRhcmVh
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZ0ZXh0YXJlYUNvbnN0cnVjdG9yKTsKKyAg
ICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoZGxUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9p
ZCopJmRsQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChvbFRhZy5s
b2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmb2xDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5j
dGlvbk1hcC0+aW5zZXJ0KHVsVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZ1bENvbnN0
cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoZGlyVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSwgKHZvaWQqKSZkaXJDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+
aW5zZXJ0KG1lbnVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJm1lbnVDb25zdHJ1Y3Rv
cik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGxpVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSwgKHZvaWQqKSZsaUNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQo
YmxvY2txdW90ZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmYmxvY2txdW90ZUNvbnN0
cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoZGl2VGFnLmxvY2FsTmFtZSgp
LmltcGwoKSwgKHZvaWQqKSZkaXZDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+
aW5zZXJ0KGgxVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZoZWFkaW5nQ29uc3RydWN0
b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChoMlRhZy5sb2NhbE5hbWUoKS5pbXBs
KCksICh2b2lkKikmaGVhZGluZ0NvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5p
bnNlcnQoaDNUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmhlYWRpbmdDb25zdHJ1Y3Rv
cik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGg0VGFnLmxvY2FsTmFtZSgpLmltcGwo
KSwgKHZvaWQqKSZoZWFkaW5nQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmlu
c2VydChoNVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmaGVhZGluZ0NvbnN0cnVjdG9y
KTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoaDZUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCAodm9pZCopJmhlYWRpbmdDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5z
ZXJ0KGhyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZockNvbnN0cnVjdG9yKTsKKyAg
ICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQocFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lk
KikmcGFyYWdyYXBoQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChw
cmVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJnByZUNvbnN0cnVjdG9yKTsKKyAgICAg
ICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoeG1wVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQq
KSZwcmVDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGJhc2Vmb250
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZiYXNlZm9udENvbnN0cnVjdG9yKTsKKyAg
ICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoZm9udFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2
b2lkKikmZm9udENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoZGVs
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZtb2RDb25zdHJ1Y3Rvcik7CisgICAgICAg
IGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGluc1RhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikm
bW9kQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChhVGFnLmxvY2Fs
TmFtZSgpLmltcGwoKSwgKHZvaWQqKSZhbmNob3JDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5j
dGlvbk1hcC0+aW5zZXJ0KGltZ1RhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmaW1hZ2VD
b25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KG1hcFRhZy5sb2NhbE5h
bWUoKS5pbXBsKCksICh2b2lkKikmbWFwQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25N
YXAtPmluc2VydChhcmVhVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZhcmVhQ29uc3Ry
dWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChjYW52YXNUYWcubG9jYWxOYW1l
KCkuaW1wbCgpLCAodm9pZCopJmNhbnZhc0NvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9u
TWFwLT5pbnNlcnQoYXBwbGV0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZhcHBsZXRD
b25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGVtYmVkVGFnLmxvY2Fs
TmFtZSgpLmltcGwoKSwgKHZvaWQqKSZlbWJlZENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0
aW9uTWFwLT5pbnNlcnQob2JqZWN0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZvYmpl
Y3RDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KHBhcmFtVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZwYXJhbUNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1
bmN0aW9uTWFwLT5pbnNlcnQoc2NyaXB0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZz
Y3JpcHRDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KHRhYmxlVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZ0YWJsZUNvbnN0cnVjdG9yKTsKKyAgICAgICAg
Z0Z1bmN0aW9uTWFwLT5pbnNlcnQoY2FwdGlvblRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lk
KikmdGFibGVDYXB0aW9uQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2Vy
dChjb2xncm91cFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmdGFibGVDb2xDb25zdHJ1
Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KGNvbFRhZy5sb2NhbE5hbWUoKS5p
bXBsKCksICh2b2lkKikmdGFibGVDb2xDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1h
cC0+aW5zZXJ0KHRyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZ0YWJsZVJvd0NvbnN0
cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQodGRUYWcubG9jYWxOYW1lKCku
aW1wbCgpLCAodm9pZCopJnRhYmxlQ2VsbENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9u
TWFwLT5pbnNlcnQodGhUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJnRhYmxlQ2VsbENv
bnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQodGhlYWRUYWcubG9jYWxO
YW1lKCkuaW1wbCgpLCAodm9pZCopJnRhYmxlU2VjdGlvbkNvbnN0cnVjdG9yKTsKKyAgICAgICAg
Z0Z1bmN0aW9uTWFwLT5pbnNlcnQodGJvZHlUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCop
JnRhYmxlU2VjdGlvbkNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQo
dGZvb3RUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJnRhYmxlU2VjdGlvbkNvbnN0cnVj
dG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoYnJUYWcubG9jYWxOYW1lKCkuaW1w
bCgpLCAodm9pZCopJmJyQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2Vy
dChxVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZxdW90ZUNvbnN0cnVjdG9yKTsKKyAg
ICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQobWFycXVlZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCks
ICh2b2lkKikmbWFycXVlZUNvbnN0cnVjdG9yKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCogcmVz
dWx0ID0gZ0Z1bmN0aW9uTWFwLT5nZXQodGFnTmFtZS5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICB2
b2lkKiByZXN1bHQgPSBnRnVuY3Rpb25NYXAtPmdldCh0YWdOYW1lLmltcGwoKSk7CiAgICAgaWYg
KHJlc3VsdCkgewogICAgICAgICBDb25zdHJ1Y3RvckZ1bmMgZnVuYyA9IChDb25zdHJ1Y3RvckZ1
bmMpcmVzdWx0OwogICAgICAgICByZXR1cm4gKGZ1bmMpKHRhZ05hbWUsIGRvY1B0ciwgZm9ybSwg
Y3JlYXRlZEJ5UGFyc2VyKTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbHBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1scGFyc2VyLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMDMKZGlmZiAtcCAtdSAtcjEuMTAzIGtodG1sL2h0
bWwvaHRtbHBhcnNlci5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbHBhcnNlci5jcHAJMTkgQXVnIDIw
MDUgMjM6NTg6MjcgLTAwMDAJMS4xMDMKKysrIGtodG1sL2h0bWwvaHRtbHBhcnNlci5jcHAJMjEg
QXVnIDIwMDUgMTY6NTE6NDAgLTAwMDAKQEAgLTM5Nyw3ICszOTcsNyBAQCBib29sIEhUTUxQYXJz
ZXI6OmhhbmRsZUVycm9yKE5vZGVJbXBsKiBuCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShpbnB1dFRhZykpIHsKICAgICAg
ICAgICAgIERPTVN0cmluZyB0eXBlID0gaC0+Z2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKLSAgICAg
ICAgICAgIGlmIChzdHJjYXNlY21wKHR5cGUsICJoaWRkZW4iKSA9PSAwICYmIGZvcm0pIHsKKyAg
ICAgICAgICAgIGlmIChlcXVhbHNJZ25vcmluZ0Nhc2UodHlwZSwgImhpZGRlbiIpICYmIGZvcm0p
IHsKICAgICAgICAgICAgICAgICBmb3JtLT5hZGRDaGlsZChuKTsKICAgICAgICAgICAgICAgICBp
ZiAoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKICAgICAgICAgICAgICAgICAgICAgbi0+
YXR0YWNoKCk7CkBAIC03NjksNDQgKzc2OSw0NCBAQCBOb2RlSW1wbCAqSFRNTFBhcnNlcjo6Z2V0
Tm9kZShUb2tlbiogdCkKICAgICAvLyBJbml0IG91ciBlcnJvciBoYW5kbGluZyB0YWJsZS4KICAg
ICBzdGF0aWMgRnVuY3Rpb25NYXAgZ0Z1bmN0aW9uTWFwOwogICAgIGlmIChnRnVuY3Rpb25NYXAu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQodGV4dEF0b20uaW1wbGVt
ZW50YXRpb24oKSwgJkhUTUxQYXJzZXI6OnRleHRDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAg
Z0Z1bmN0aW9uTWFwLmluc2VydChjb21tZW50QXRvbS5pbXBsZW1lbnRhdGlvbigpLCAmSFRNTFBh
cnNlcjo6Y29tbWVudENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBnRnVuY3Rpb25NYXAuaW5z
ZXJ0KGhlYWRUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJkhUTUxQYXJzZXI6Omhl
YWRDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChib2R5VGFn
LmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZIVE1MUGFyc2VyOjpib2R5Q3JlYXRlRXJy
b3JDaGVjayk7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQoZnJhbWVzZXRUYWcubG9jYWxO
YW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJkhUTUxQYXJzZXI6OmZyYW1lc2V0Q3JlYXRlRXJyb3JD
aGVjayk7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQoaWZyYW1lVGFnLmxvY2FsTmFtZSgp
LmltcGxlbWVudGF0aW9uKCksICZIVE1MUGFyc2VyOjppZnJhbWVDcmVhdGVFcnJvckNoZWNrKTsK
LSAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChmb3JtVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVu
dGF0aW9uKCksICZIVE1MUGFyc2VyOjpmb3JtQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIGdG
dW5jdGlvbk1hcC5pbnNlcnQoaXNpbmRleFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigp
LCAmSFRNTFBhcnNlcjo6aXNpbmRleENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBnRnVuY3Rp
b25NYXAuaW5zZXJ0KHNlbGVjdFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmSFRN
TFBhcnNlcjo6c2VsZWN0Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC5p
bnNlcnQoZGRUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJkhUTUxQYXJzZXI6OmRk
Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQoZHRUYWcubG9j
YWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJkhUTUxQYXJzZXI6OmR0Q3JlYXRlRXJyb3JDaGVj
ayk7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQobGlUYWcubG9jYWxOYW1lKCkuaW1wbGVt
ZW50YXRpb24oKSwgJkhUTUxQYXJzZXI6Om5lc3RlZENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAg
ICBnRnVuY3Rpb25NYXAuaW5zZXJ0KGFUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwg
JkhUTUxQYXJzZXI6Om5lc3RlZENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBnRnVuY3Rpb25N
YXAuaW5zZXJ0KG5vYnJUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJkhUTUxQYXJz
ZXI6Om5lc3RlZENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0
KHdiclRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmSFRNTFBhcnNlcjo6bmVzdGVk
Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQodHJUYWcubG9j
YWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJkhUTUxQYXJzZXI6Om5lc3RlZENyZWF0ZUVycm9y
Q2hlY2spOwotICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KHRkVGFnLmxvY2FsTmFtZSgpLmlt
cGxlbWVudGF0aW9uKCksICZIVE1MUGFyc2VyOjp0YWJsZUNlbGxDcmVhdGVFcnJvckNoZWNrKTsK
LSAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydCh0aFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRh
dGlvbigpLCAmSFRNTFBhcnNlcjo6dGFibGVDZWxsQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAg
IGdGdW5jdGlvbk1hcC5pbnNlcnQodGJvZHlUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24o
KSwgJkhUTUxQYXJzZXI6OnRhYmxlU2VjdGlvbkNyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBn
RnVuY3Rpb25NYXAuaW5zZXJ0KHRoZWFkVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCks
ICZIVE1MUGFyc2VyOjp0YWJsZVNlY3Rpb25DcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgZ0Z1
bmN0aW9uTWFwLmluc2VydCh0Zm9vdFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAm
SFRNTFBhcnNlcjo6dGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIGdGdW5j
dGlvbk1hcC5pbnNlcnQodHRUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJkhUTUxQ
YXJzZXI6Om5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIGdGdW5jdGlvbk1h
cC5pbnNlcnQodVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmSFRNTFBhcnNlcjo6
bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2Vy
dChiVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRT
dHlsZUNyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KGlUYWcu
bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgJkhUTUxQYXJzZXI6Om5lc3RlZFN0eWxlQ3Jl
YXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQoc1RhZy5sb2NhbE5h
bWUoKS5pbXBsZW1lbnRhdGlvbigpLCAmSFRNTFBhcnNlcjo6bmVzdGVkU3R5bGVDcmVhdGVFcnJv
ckNoZWNrKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChzdHJpa2VUYWcubG9jYWxOYW1l
KCkuaW1wbGVtZW50YXRpb24oKSwgJkhUTUxQYXJzZXI6Om5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JD
aGVjayk7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQoYmlnVGFnLmxvY2FsTmFtZSgpLmlt
cGxlbWVudGF0aW9uKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2sp
OwotICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KHNtYWxsVGFnLmxvY2FsTmFtZSgpLmltcGxl
bWVudGF0aW9uKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2spOwot
ICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KG5vZW1iZWRUYWcubG9jYWxOYW1lKCkuaW1wbGVt
ZW50YXRpb24oKSwgJkhUTUxQYXJzZXI6Om5vZW1iZWRDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAg
ICAgZ0Z1bmN0aW9uTWFwLmluc2VydChub2ZyYW1lc1RhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRh
dGlvbigpLCAmSFRNTFBhcnNlcjo6bm9mcmFtZXNDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAg
Z0Z1bmN0aW9uTWFwLmluc2VydChub3NjcmlwdFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlv
bigpLCAmSFRNTFBhcnNlcjo6bm9zY3JpcHRDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgZ0Z1
bmN0aW9uTWFwLmluc2VydChub2xheWVyVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCks
ICZIVE1MUGFyc2VyOjpub2xheWVyQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlv
bk1hcC5pbnNlcnQodGV4dEF0b20uaW1wbCgpLCAmSFRNTFBhcnNlcjo6dGV4dENyZWF0ZUVycm9y
Q2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KGNvbW1lbnRBdG9tLmltcGwoKSwg
JkhUTUxQYXJzZXI6OmNvbW1lbnRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9u
TWFwLmluc2VydChoZWFkVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6OmhlYWRD
cmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChib2R5VGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6OmJvZHlDcmVhdGVFcnJvckNoZWNrKTsKKyAg
ICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChmcmFtZXNldFRhZy5sb2NhbE5hbWUoKS5pbXBsKCks
ICZIVE1MUGFyc2VyOjpmcmFtZXNldENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rp
b25NYXAuaW5zZXJ0KGlmcmFtZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpp
ZnJhbWVDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChmb3Jt
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6OmZvcm1DcmVhdGVFcnJvckNoZWNr
KTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChpc2luZGV4VGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSwgJkhUTUxQYXJzZXI6OmlzaW5kZXhDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1
bmN0aW9uTWFwLmluc2VydChzZWxlY3RUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNl
cjo6c2VsZWN0Q3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQo
ZGRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6ZGRDcmVhdGVFcnJvckNoZWNr
KTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChkdFRhZy5sb2NhbE5hbWUoKS5pbXBsKCks
ICZIVE1MUGFyc2VyOjpkdENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAu
aW5zZXJ0KGxpVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6Om5lc3RlZENyZWF0
ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KGFUYWcubG9jYWxOYW1l
KCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6bmVzdGVkQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAg
IGdGdW5jdGlvbk1hcC5pbnNlcnQobm9iclRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFy
c2VyOjpuZXN0ZWRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2Vy
dCh3YnJUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6bmVzdGVkQ3JlYXRlRXJy
b3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQodHJUYWcubG9jYWxOYW1lKCku
aW1wbCgpLCAmSFRNTFBhcnNlcjo6bmVzdGVkQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdG
dW5jdGlvbk1hcC5pbnNlcnQodGRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6
dGFibGVDZWxsQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQo
dGhUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6dGFibGVDZWxsQ3JlYXRlRXJy
b3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQodGJvZHlUYWcubG9jYWxOYW1l
KCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6dGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayk7Cisg
ICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQodGhlYWRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAm
SFRNTFBhcnNlcjo6dGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5j
dGlvbk1hcC5pbnNlcnQodGZvb3RUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6
dGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5pbnNl
cnQodHRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6bmVzdGVkU3R5bGVDcmVh
dGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydCh1VGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6Om5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JDaGVjayk7Cisg
ICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQoYlRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1M
UGFyc2VyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25N
YXAuaW5zZXJ0KGlUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6bmVzdGVkU3R5
bGVDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChzVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6Om5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JDaGVj
ayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQoc3RyaWtlVGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSwgJkhUTUxQYXJzZXI6Om5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAg
IGdGdW5jdGlvbk1hcC5pbnNlcnQoYmlnVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJz
ZXI6Om5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5p
bnNlcnQoc21hbGxUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6bmVzdGVkU3R5
bGVDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChub2VtYmVk
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6Om5vZW1iZWRDcmVhdGVFcnJvckNo
ZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChub2ZyYW1lc1RhZy5sb2NhbE5hbWUo
KS5pbXBsKCksICZIVE1MUGFyc2VyOjpub2ZyYW1lc0NyZWF0ZUVycm9yQ2hlY2spOworICAgICAg
ICBnRnVuY3Rpb25NYXAuaW5zZXJ0KG5vc2NyaXB0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhU
TUxQYXJzZXI6Om5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1h
cC5pbnNlcnQobm9sYXllclRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpub2xh
eWVyQ3JlYXRlRXJyb3JDaGVjayk7CiAgICAgfQogCiAgICAgYm9vbCBwcm9jZWVkID0gdHJ1ZTsK
ICAgICBOb2RlSW1wbCogcmVzdWx0ID0gMDsKLSAgICBDcmVhdGVFcnJvckNoZWNrRnVuYyBlcnJv
ckNoZWNrRnVuYyA9IGdGdW5jdGlvbk1hcC5nZXQodC0+dGFnTmFtZS5pbXBsZW1lbnRhdGlvbigp
KTsKKyAgICBDcmVhdGVFcnJvckNoZWNrRnVuYyBlcnJvckNoZWNrRnVuYyA9IGdGdW5jdGlvbk1h
cC5nZXQodC0+dGFnTmFtZS5pbXBsKCkpOwogICAgIGlmIChlcnJvckNoZWNrRnVuYykKICAgICAg
ICAgcHJvY2VlZCA9ICh0aGlzLT4qKGVycm9yQ2hlY2tGdW5jKSkodCwgcmVzdWx0KTsKIApAQCAt
ODY2LDE1ICs4NjYsMTUgQEAgYm9vbCBIVE1MUGFyc2VyOjppc0hlYWRlclRhZyhjb25zdCBBdG9t
aQogewogICAgIHN0YXRpYyBIYXNoU2V0PERPTVN0cmluZ0ltcGwqLCBQb2ludGVySGFzaDxET01T
dHJpbmdJbXBsKj4gPiBoZWFkZXJUYWdzOwogICAgIGlmIChoZWFkZXJUYWdzLmlzRW1wdHkoKSkg
ewotICAgICAgICBoZWFkZXJUYWdzLmluc2VydChoMVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRh
dGlvbigpKTsKLSAgICAgICAgaGVhZGVyVGFncy5pbnNlcnQoaDJUYWcubG9jYWxOYW1lKCkuaW1w
bGVtZW50YXRpb24oKSk7Ci0gICAgICAgIGhlYWRlclRhZ3MuaW5zZXJ0KGgzVGFnLmxvY2FsTmFt
ZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICBoZWFkZXJUYWdzLmluc2VydChoNFRhZy5s
b2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgaGVhZGVyVGFncy5pbnNlcnQo
aDVUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIGhlYWRlclRhZ3Mu
aW5zZXJ0KGg2VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOworICAgICAgICBoZWFk
ZXJUYWdzLmluc2VydChoMVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBoZWFkZXJU
YWdzLmluc2VydChoMlRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBoZWFkZXJUYWdz
Lmluc2VydChoM1RhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBoZWFkZXJUYWdzLmlu
c2VydChoNFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBoZWFkZXJUYWdzLmluc2Vy
dChoNVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBoZWFkZXJUYWdzLmluc2VydCho
NlRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gaGVhZGVy
VGFncy5jb250YWlucyh0YWdOYW1lLmltcGxlbWVudGF0aW9uKCkpOworICAgIHJldHVybiBoZWFk
ZXJUYWdzLmNvbnRhaW5zKHRhZ05hbWUuaW1wbCgpKTsKIH0KIAogdm9pZCBIVE1MUGFyc2VyOjpw
b3BOZXN0ZWRIZWFkZXJUYWcoKQpAQCAtOTE4LDI4ICs5MTgsMjggQEAgYm9vbCBIVE1MUGFyc2Vy
Ojppc1Jlc2lkdWFsU3R5bGVUYWcoY29ucwogewogICAgIHN0YXRpYyBIYXNoU2V0PERPTVN0cmlu
Z0ltcGwqLCBQb2ludGVySGFzaDxET01TdHJpbmdJbXBsKj4gPiByZXNpZHVhbFN0eWxlVGFnczsK
ICAgICBpZiAocmVzaWR1YWxTdHlsZVRhZ3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlc2lkdWFs
U3R5bGVUYWdzLmluc2VydChhVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAg
ICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQoZm9udFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1l
bnRhdGlvbigpKTsKLSAgICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KHR0VGFnLmxvY2Fs
TmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNl
cnQodVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgcmVzaWR1YWxT
dHlsZVRhZ3MuaW5zZXJ0KGJUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAg
ICAgIHJlc2lkdWFsU3R5bGVUYWdzLmluc2VydChpVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0
aW9uKCkpOwotICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQoc1RhZy5sb2NhbE5hbWUo
KS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KHN0
cmlrZVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgcmVzaWR1YWxT
dHlsZVRhZ3MuaW5zZXJ0KGJpZ1RhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAg
ICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KHNtYWxsVGFnLmxvY2FsTmFtZSgpLmltcGxl
bWVudGF0aW9uKCkpOwotICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQoZW1UYWcubG9j
YWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmlu
c2VydChzdHJvbmdUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHJl
c2lkdWFsU3R5bGVUYWdzLmluc2VydChkZm5UYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24o
KSk7Ci0gICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmluc2VydChjb2RlVGFnLmxvY2FsTmFtZSgp
LmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQoc2Ft
cFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgcmVzaWR1YWxTdHls
ZVRhZ3MuaW5zZXJ0KGtiZFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAg
ICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KHZhclRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRh
dGlvbigpKTsKLSAgICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KG5vYnJUYWcubG9jYWxO
YW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmluc2Vy
dCh3YnJUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7CisgICAgICAgIHJlc2lkdWFs
U3R5bGVUYWdzLmluc2VydChhVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHJlc2lk
dWFsU3R5bGVUYWdzLmluc2VydChmb250VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAg
IHJlc2lkdWFsU3R5bGVUYWdzLmluc2VydCh0dFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAg
ICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQodVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwor
ICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQoYlRhZy5sb2NhbE5hbWUoKS5pbXBsKCkp
OworICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQoaVRhZy5sb2NhbE5hbWUoKS5pbXBs
KCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQoc1RhZy5sb2NhbE5hbWUoKS5p
bXBsKCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQoc3RyaWtlVGFnLmxvY2Fs
TmFtZSgpLmltcGwoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmluc2VydChiaWdUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KHNt
YWxsVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmlu
c2VydChlbVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFn
cy5pbnNlcnQoc3Ryb25nVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIHJlc2lkdWFs
U3R5bGVUYWdzLmluc2VydChkZm5UYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgcmVz
aWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KGNvZGVUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAg
ICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KHNhbXBUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsK
KyAgICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KGtiZFRhZy5sb2NhbE5hbWUoKS5pbXBs
KCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQodmFyVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmluc2VydChub2JyVGFnLmxvY2Fs
TmFtZSgpLmltcGwoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmluc2VydCh3YnJUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIHJlc2lkdWFsU3R5
bGVUYWdzLmNvbnRhaW5zKHRhZ05hbWUuaW1wbGVtZW50YXRpb24oKSk7CisgICAgcmV0dXJuIHJl
c2lkdWFsU3R5bGVUYWdzLmNvbnRhaW5zKHRhZ05hbWUuaW1wbCgpKTsKIH0KIAogYm9vbCBIVE1M
UGFyc2VyOjppc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGNvbnN0IEF0b21pY1N0cmluZyYgdGFn
TmFtZSkKQEAgLTk0OSwyNyArOTQ5LDI3IEBAIGJvb2wgSFRNTFBhcnNlcjo6aXNBZmZlY3RlZEJ5
UmVzaWR1YWxTdHkKIAogICAgIHN0YXRpYyBIYXNoU2V0PERPTVN0cmluZ0ltcGwqLCBQb2ludGVy
SGFzaDxET01TdHJpbmdJbXBsKj4gPiBhZmZlY3RlZEJsb2NrVGFnczsKICAgICBpZiAoYWZmZWN0
ZWRCbG9ja1RhZ3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2Vy
dChoMVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgYWZmZWN0ZWRC
bG9ja1RhZ3MuaW5zZXJ0KGgyVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAg
ICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQoaDNUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50
YXRpb24oKSk7Ci0gICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChoNFRhZy5sb2NhbE5h
bWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0
KGg1VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICBhZmZlY3RlZEJs
b2NrVGFncy5pbnNlcnQoaDZUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAg
ICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChwVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0
aW9uKCkpOwotICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQoZGl2VGFnLmxvY2FsTmFt
ZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQo
YmxvY2txdW90ZVRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgYWZm
ZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KGFkZHJlc3NUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRp
b24oKSk7Ci0gICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChjZW50ZXJUYWcubG9jYWxO
YW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2Vy
dCh1bFRhZy5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgYWZmZWN0ZWRC
bG9ja1RhZ3MuaW5zZXJ0KG9sVGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAg
ICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQobGlUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50
YXRpb24oKSk7Ci0gICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChkbFRhZy5sb2NhbE5h
bWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0
KGR0VGFnLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICBhZmZlY3RlZEJs
b2NrVGFncy5pbnNlcnQoZGRUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAg
ICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChwcmVUYWcubG9jYWxOYW1lKCkuaW1wbGVtZW50
YXRpb24oKSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChoMVRhZy5sb2NhbE5h
bWUoKS5pbXBsKCkpOworICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQoaDJUYWcubG9j
YWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KGgzVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydCho
NFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNl
cnQoaDVUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3Mu
aW5zZXJ0KGg2VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tU
YWdzLmluc2VydChwVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIGFmZmVjdGVkQmxv
Y2tUYWdzLmluc2VydChkaXZUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgYWZmZWN0
ZWRCbG9ja1RhZ3MuaW5zZXJ0KGJsb2NrcXVvdGVUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAg
ICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KGFkZHJlc3NUYWcubG9jYWxOYW1lKCkuaW1w
bCgpKTsKKyAgICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KGNlbnRlclRhZy5sb2NhbE5h
bWUoKS5pbXBsKCkpOworICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQodWxUYWcubG9j
YWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KG9sVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChs
aVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNl
cnQoZGxUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3Mu
aW5zZXJ0KGR0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tU
YWdzLmluc2VydChkZFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICBhZmZlY3RlZEJs
b2NrVGFncy5pbnNlcnQocHJlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CiAgICAgfQogICAgIAot
ICAgIHJldHVybiBhZmZlY3RlZEJsb2NrVGFncy5jb250YWlucyh0YWdOYW1lLmltcGxlbWVudGF0
aW9uKCkpOworICAgIHJldHVybiBhZmZlY3RlZEJsb2NrVGFncy5jb250YWlucyh0YWdOYW1lLmlt
cGwoKSk7CiB9CiAKIHZvaWQgSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFn
QWNyb3NzQmxvY2tzKEhUTUxTdGFja0VsZW0qIGVsZW0pCkluZGV4OiBraHRtbC9taXNjL2RlY29k
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL21pc2Mv
ZGVjb2Rlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDAKZGlmZiAtcCAtdSAtcjEuNDAg
a2h0bWwvbWlzYy9kZWNvZGVyLmNwcAotLS0ga2h0bWwvbWlzYy9kZWNvZGVyLmNwcAkxNCBBdWcg
MjAwNSAwODo0NzoxMyAtMDAwMAkxLjQwCisrKyBraHRtbC9taXNjL2RlY29kZXIuY3BwCTIxIEF1
ZyAyMDA1IDE2OjUxOjQyIC0wMDAwCkBAIC00Miw2ICs0Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBr
aHRtbDsKIAogdXNpbmcgRE9NOjpBdG9taWNTdHJpbmc7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwordXNpbmcgRE9NOjpsb3dlcmNhc2VkOwogdXNpbmcgRE9NOjpudWxsQXRvbTsKIAogY2xh
c3MgS2FuamlDb2RlCkBAIC01MjEsMjAgKzUyMiwxMyBAQCBRU3RyaW5nIERlY29kZXI6OmRlY29k
ZShjb25zdCBjaGFyICpkYXRhCiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
ICAgICAgICBpZigqcHRyID09ICcvJykgcHRyKyssIGVuZD10cnVlOwotICAgICAgICAgICAgICAg
ICAgICBjaGFyIHRtcFsyMF07CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0YXJ0
ID0gcHRyOwogICAgICAgICAgICAgICAgICAgICBpbnQgbGVuID0gMDsKLSAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKAotICAgICAgICAgICAgICAgICAgICAgICAgKCgqcHRyID49ICdhJykgJiYg
KCpwdHIgPD0gJ3onKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICgqcHRyID49ICdBJykg
JiYgKCpwdHIgPD0gJ1onKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICgqcHRyID49ICcw
JykgJiYgKCpwdHIgPD0gJzknKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIGxlbiA8IDE5
ICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdG1wW2xl
bl0gPSB0b2xvd2VyKCAqcHRyICk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpc2FsbnVt
KCpwdHIpICYmIGxlbiA8IDE5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdHIrKzsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGxlbisrOwogICAgICAgICAgICAgICAgICAgICB9Ci0JCSAg
ICB0bXBbbGVuXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIEF0b21pY1N0cmluZyB0YWcodG1w
KTsKKyAgICAgICAgICAgICAgICAgICAgQXRvbWljU3RyaW5nIHRhZyhzdGFydCwgbGVuLCBsb3dl
cmNhc2VkKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbmQgJiYgdGFnID09IG1ldGFUYWcp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGEgbWV0YSB0YWcuLi4KICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vcHRyICs9IDU7CkBAIC01NzgsNyArNTcyLDcgQEAgUVN0cmlu
ZyBEZWNvZGVyOjpkZWNvZGUoY29uc3QgY2hhciAqZGF0YQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRhZyAhPSBsaW5rVGFnICYmIHRhZyAhPSBtZXRhVGFnICYmIHRhZyAhPSBvYmpl
Y3RUYWcgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcgIT0gdGl0bGVUYWcg
JiYgdGFnICE9IGJhc2VUYWcgJiYgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVu
ZCB8fCB0YWcgIT0gaHRtbFRhZykgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
dGFnICE9IGhlYWRUYWcpICYmIGlzYWxwaGEodG1wWzBdKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICh0YWcgIT0gaGVhZFRhZykgJiYgaXNhbHBoYSgqc3RhcnQpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBib2R5ID0gdHJ1ZTsKICNpZmRlZiBERUNPREVfREVCVUcKICAg
ICAgICAgICAgICAgICAgICAgICAgIGtkRGVidWcoIDYwMDUgKSA8PCAiRGVjb2Rlcjogbm8gY2hh
cnNldCBmb3VuZCAoYmFpbGluZyBiZWNhdXNlIG9mIFwiIiA8PCB0YWcuYXNjaWkoKSA8PCAiXCIp
LiIgPDwgZW5kbDsKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZmxleGJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRl
cl9mbGV4Ym94LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNQpkaWZmIC1wIC11IC1yMS4y
NSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ZsZXhib3guY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcv
cmVuZGVyX2ZsZXhib3guY3BwCTI5IEp1bCAyMDA1IDIzOjQyOjQ5IC0wMDAwCTEuMjUKKysrIGto
dG1sL3JlbmRlcmluZy9yZW5kZXJfZmxleGJveC5jcHAJMjEgQXVnIDIwMDUgMTY6NTE6NTAgLTAw
MDAKQEAgLTc1Myw5ICs3NTMsOSBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRWZXJ0
aWNhbEJvCiAgICAgICAgICAgICAgICAgaWYgKCFsYXN0VmlzaWJsZUxpbmUpIGNvbnRpbnVlOwog
CiAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZWxsaXBzaXNBbmRTcGFjZVsy
XSA9IHsgMHgyMDI2LCAnICcgfTsKLSAgICAgICAgICAgICAgICBzdGF0aWMgQXRvbWljU3RyaW5n
IGVsbGlwc2lzQW5kU3BhY2VTdHIoZWxsaXBzaXNBbmRTcGFjZSwgMik7CisgICAgICAgICAgICAg
ICAgc3RhdGljIEF0b21pY1N0cmluZyBlbGxpcHNpc0FuZFNwYWNlU3RyKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgUUNoYXIgKj4oZWxsaXBzaXNBbmRTcGFjZSksIDIpOwogICAgICAgICAgICAgICAg
IGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZShudW1WaXNpYmxlTGluZXMgPT0gMSktPmh0bWxGb250
KCk7Ci0gICAgICAgICAgICAgICAgaW50IGVsbGlwc2lzQW5kU3BhY2VXaWR0aCA9IGZvbnQud2lk
dGgoY29uc3RfY2FzdDxRQ2hhcio+KGVsbGlwc2lzQW5kU3BhY2VTdHIudW5pY29kZSgpKSwgMiwg
MCwgMiwgMCwgMCk7CisgICAgICAgICAgICAgICAgaW50IGVsbGlwc2lzQW5kU3BhY2VXaWR0aCA9
IGZvbnQud2lkdGgoY29uc3RfY2FzdDxRQ2hhciAqPihlbGxpcHNpc0FuZFNwYWNlU3RyLnVuaWNv
ZGUoKSksIDIsIDAsIDIsIDAsIDApOwogCiAgICAgICAgICAgICAgICAgLy8gR2V0IGVsbGlwc2lz
IHdpZHRoICsgIiAiICsgYW5jaG9yIHdpZHRoCiAgICAgICAgICAgICAgICAgaW50IHRvdGFsV2lk
dGggPSBlbGxpcHNpc0FuZFNwYWNlV2lkdGggKyBhbmNob3JCb3gtPndpZHRoKCk7CkluZGV4OiBr
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMTE1CmRpZmYgLXAgLXUgLXIxLjExNSBraHRtbC9yZW5kZXJpbmcvcmVuZGVy
X2Zvcm0uY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCTggQXVnIDIwMDUg
MjE6MTE6NTkgLTAwMDAJMS4xMTUKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAJ
MjEgQXVnIDIwMDUgMTY6NTE6NTEgLTAwMDAKQEAgLTE3MTUsOCArMTcxNSw4IEBAIHZvaWQgUmVu
ZGVyU2xpZGVyOjp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgZG91YmxlIHZhbCA9IHZhbHVlLmlz
TnVsbCgpID8gKG1heFZhbCArIG1pblZhbCkvMi4wIDogdmFsdWUuc3RyaW5nKCkudG9Eb3VibGUo
KTsKICAgICB2YWwgPSBrTWF4KG1pblZhbCwga01pbih2YWwsIG1heFZhbCkpOyAvLyBNYWtlIHN1
cmUgdmFsIGlzIHdpdGhpbiBtaW4vbWF4LgogICAgIAotICAgIC8vIEZvcmNlIGludGVnZXIgdmFs
dWUgaWYgbm90IGZsb2F0IChzdHJjYXNlY21wIHJldHVybnMgY29uZnVzaW5nbHkgYmFja3dhcmQg
Ym9vbGVhbikuCi0gICAgaWYgKHN0cmNhc2VjbXAocHJlY2lzaW9uLCAiZmxvYXQiKSkKKyAgICAv
LyBGb3JjZSBpbnRlZ2VyIHZhbHVlIGlmIG5vdCBmbG9hdC4KKyAgICBpZiAoIWVxdWFsc0lnbm9y
aW5nQ2FzZShwcmVjaXNpb24sICJmbG9hdCIpKQogICAgICAgICB2YWwgPSAoaW50KSh2YWwgKyAw
LjUpOwogCiAgICAgZWxlbWVudCgpLT5zZXRWYWx1ZShRU3RyaW5nOjpudW1iZXIodmFsKSk7CkBA
IC0xNzM3LDggKzE3MzcsOCBAQCB2b2lkIFJlbmRlclNsaWRlcjo6c2xvdFNsaWRlclZhbHVlQ2hh
bmdlCiAgICAgZG91YmxlIHZhbCA9IHNsaWRlci0+dmFsdWUoKTsKICAgICBjb25zdCBET01TdHJp
bmcmIHByZWNpc2lvbiA9IGVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKHByZWNpc2lvbkF0dHIpOwog
Ci0gICAgLy8gRm9yY2UgaW50ZWdlciB2YWx1ZSBpZiBub3QgZmxvYXQgKHN0cmNhc2VjbXAgcmV0
dXJucyBjb25mdXNpbmdseSBiYWNrd2FyZCBib29sZWFuKS4KLSAgICBpZiAoc3RyY2FzZWNtcChw
cmVjaXNpb24sICJmbG9hdCIpKQorICAgIC8vIEZvcmNlIGludGVnZXIgdmFsdWUgaWYgbm90IGZs
b2F0LgorICAgIGlmICghZXF1YWxzSWdub3JpbmdDYXNlKHByZWNpc2lvbiwgImZsb2F0IikpCiAg
ICAgICAgIHZhbCA9IChpbnQpKHZhbCArIDAuNSk7CiAKICAgICBlbGVtZW50KCktPnNldFZhbHVl
KFFTdHJpbmc6Om51bWJlcih2YWwpKTsKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGlu
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVy
aW5nL3JlbmRlcl9saW5lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40NgpkaWZmIC1wIC11
IC1yMS40NiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xpbmUuY3BwCi0tLSBraHRtbC9yZW5kZXJp
bmcvcmVuZGVyX2xpbmUuY3BwCTE1IEF1ZyAyMDA1IDA0OjMxOjA2IC0wMDAwCTEuNDYKKysrIGto
dG1sL3JlbmRlcmluZy9yZW5kZXJfbGluZS5jcHAJMjEgQXVnIDIwMDUgMTY6NTE6NTQgLTAwMDAK
QEAgLTEwNDgsNyArMTA0OCw3IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50KFJlbmRlck9iamVj
dDo6UGEKICAgICBmb250LT5kcmF3VGV4dChwLCBtX3ggKyBfdHgsIAogICAgICAgICAgICAgICAg
ICAgICAgIG1feSArIF90eSArIG1fYmFzZWxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgMCwg
MCwKLSAgICAgICAgICAgICAgICAgICAgICAoc3RyLmltcGxlbWVudGF0aW9uKCkpLT5zLAorICAg
ICAgICAgICAgICAgICAgICAgIChzdHIuaW1wbCgpKS0+cywKICAgICAgICAgICAgICAgICAgICAg
ICBzdHIubGVuZ3RoKCksIDAsIHN0ci5sZW5ndGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAw
LCAKICAgICAgICAgICAgICAgICAgICAgICBRUGFpbnRlcjo6TFRSLCBfc3R5bGUtPnZpc3VhbGx5
T3JkZXJlZCgpKTsKSW5kZXg6IGtodG1sL3hibC94YmxfdG9rZW5pemVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94YmwveGJsX3Rva2VuaXplci5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC1wIC11IC1yMS4zIGtodG1sL3hibC94Ymxf
dG9rZW5pemVyLmNwcAotLS0ga2h0bWwveGJsL3hibF90b2tlbml6ZXIuY3BwCTE4IEp1bCAyMDA1
IDIxOjQ0OjI4IC0wMDAwCTEuMworKysga2h0bWwveGJsL3hibF90b2tlbml6ZXIuY3BwCTIxIEF1
ZyAyMDA1IDE2OjUyOjAwIC0wMDAwCkBAIC0zNTUsNyArMzU1LDcgQEAgdm9pZCBYQkxUb2tlbkhh
bmRsZXI6OmNyZWF0ZUZpZWxkKGNvbnN0IAogICAgICAgICBpZiAoYXR0cnMucU5hbWUoaSkgPT0g
Im5hbWUiKQogICAgICAgICAgICAgbmFtZSA9IGF0dHJzLnZhbHVlKGkpOwogICAgICAgICBlbHNl
IGlmIChhdHRycy5xTmFtZShpKSA9PSAicmVhZG9ubHkiKQotICAgICAgICAgICAgcmVhZG9ubHkg
PSAhKHN0cmNhc2VjbXAoYXR0cnMudmFsdWUoaSksICJ0cnVlIikpOworICAgICAgICAgICAgcmVh
ZG9ubHkgPSBlcXVhbHNJZ25vcmluZ0Nhc2UoYXR0cnMudmFsdWUoaSksICJ0cnVlIik7CiAgICAg
fQogICAgIAogICAgIG1fZmllbGQgPSBuZXcgWEJMUHJvdG90eXBlRmllbGQobmFtZSwgcmVhZG9u
bHkpOwpAQCAtMzcyLDcgKzM3Miw3IEBAIHZvaWQgWEJMVG9rZW5IYW5kbGVyOjpjcmVhdGVQcm9w
ZXJ0eShjb24KICAgICAgICAgaWYgKGF0dHJzLnFOYW1lKGkpID09ICJuYW1lIikKICAgICAgICAg
ICAgIG5hbWUgPSBhdHRycy52YWx1ZShpKTsKICAgICAgICAgZWxzZSBpZiAoYXR0cnMucU5hbWUo
aSkgPT0gInJlYWRvbmx5IikKLSAgICAgICAgICAgIHJlYWRvbmx5ID0gIShzdHJjYXNlY21wKGF0
dHJzLnZhbHVlKGkpLCAidHJ1ZSIpKTsKKyAgICAgICAgICAgIHJlYWRvbmx5ID0gZXF1YWxzSWdu
b3JpbmdDYXNlKGF0dHJzLnZhbHVlKGkpLCAidHJ1ZSIpOwogICAgICAgICBlbHNlIGlmIChhdHRy
cy5xTmFtZShpKSA9PSAib25nZXQiKQogICAgICAgICAgICAgb25nZXQgPSBhdHRycy52YWx1ZShp
KTsKICAgICAgICAgZWxzZSBpZiAoYXR0cnMucU5hbWUoaSkgPT0gIm9uc2V0IikKSW5kZXg6IGto
dG1sL3htbC9kb20yX2V2ZW50c2ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL3htbC9kb20yX2V2ZW50c2ltcGwuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjM1CmRpZmYgLXAgLXUgLXIxLjM1IGtodG1sL3htbC9kb20yX2V2ZW50c2ltcGwuY3Bw
Ci0tLSBraHRtbC94bWwvZG9tMl9ldmVudHNpbXBsLmNwcAk4IEF1ZyAyMDA1IDIyOjI5OjM5IC0w
MDAwCTEuMzUKKysrIGtodG1sL3htbC9kb20yX2V2ZW50c2ltcGwuY3BwCTIxIEF1ZyAyMDA1IDE2
OjUyOjAwIC0wMDAwCkBAIC01Nyw3ICs1Nyw3IEBAIEV2ZW50SW1wbDo6RXZlbnRJbXBsKCkKIEV2
ZW50SW1wbDo6RXZlbnRJbXBsKEV2ZW50SWQgX2lkLCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBj
YW5jZWxhYmxlQXJnKQogewogICAgIERPTVN0cmluZyB0ID0gRXZlbnRJbXBsOjppZFRvVHlwZShf
aWQpOwotICAgIG1fdHlwZSA9IHQuaW1wbGVtZW50YXRpb24oKTsKKyAgICBtX3R5cGUgPSB0Lmlt
cGwoKTsKICAgICBpZiAobV90eXBlKQogCW1fdHlwZS0+cmVmKCk7CiAgICAgbV9jYW5CdWJibGUg
PSBjYW5CdWJibGVBcmc7CkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBFdmVudEltcGw6OmluaXRF
dmVudChjb25zdCBET01TdHJpbgogICAgIGlmIChtX3R5cGUpCiAJbV90eXBlLT5kZXJlZigpOwog
Ci0gICAgbV90eXBlID0gZXZlbnRUeXBlQXJnLmltcGxlbWVudGF0aW9uKCk7CisgICAgbV90eXBl
ID0gZXZlbnRUeXBlQXJnLmltcGwoKTsKICAgICBpZiAobV90eXBlKQogCW1fdHlwZS0+cmVmKCk7
CiAKQEAgLTU4Myw3ICs1ODMsNyBAQCBLZXlib2FyZEV2ZW50SW1wbDo6S2V5Ym9hcmRFdmVudElt
cGwoUUtlCiAKICNpZiBBUFBMRV9DSEFOR0VTCiAgICAgRE9NU3RyaW5nIGlkZW50aWZpZXIoa2V5
LT5rZXlJZGVudGlmaWVyKCkpOwotICAgIG1fa2V5SWRlbnRpZmllciA9IGlkZW50aWZpZXIuaW1w
bGVtZW50YXRpb24oKTsKKyAgICBtX2tleUlkZW50aWZpZXIgPSBpZGVudGlmaWVyLmltcGwoKTsK
ICAgICBtX2tleUlkZW50aWZpZXItPnJlZigpOwogI2Vsc2UKICAgICBtX2tleUlkZW50aWZpZXIg
PSAwOwpAQCAtNjEyLDcgKzYxMiw3IEBAIEtleWJvYXJkRXZlbnRJbXBsOjpLZXlib2FyZEV2ZW50
SW1wbChFdmUKICAgOiBVSUV2ZW50V2l0aEtleVN0YXRlSW1wbChfaWQsIGNhbkJ1YmJsZUFyZywg
Y2FuY2VsYWJsZUFyZywgdmlld0FyZywgMCwgY3RybEtleUFyZywgYWx0S2V5QXJnLCBzaGlmdEtl
eUFyZywgbWV0YUtleUFyZykKIHsKICAgICBtX2tleUV2ZW50ID0gMDsKLSAgICBtX2tleUlkZW50
aWZpZXIgPSBrZXlJZGVudGlmaWVyQXJnLmltcGxlbWVudGF0aW9uKCk7CisgICAgbV9rZXlJZGVu
dGlmaWVyID0ga2V5SWRlbnRpZmllckFyZy5pbXBsKCk7CiAgICAgaWYgKG1fa2V5SWRlbnRpZmll
cikKICAgICAgICAgbV9rZXlJZGVudGlmaWVyLT5yZWYoKTsKICAgICBtX2tleUxvY2F0aW9uID0g
a2V5TG9jYXRpb25Bcmc7CkBAIC02NDIsNyArNjQyLDcgQEAgdm9pZCBLZXlib2FyZEV2ZW50SW1w
bDo6aW5pdEtleWJvYXJkRXZlbgogICAgICAgICBtX2tleUlkZW50aWZpZXItPmRlcmVmKCk7CiAK
ICAgICBVSUV2ZW50SW1wbDo6aW5pdFVJRXZlbnQodHlwZUFyZywgY2FuQnViYmxlQXJnLCBjYW5j
ZWxhYmxlQXJnLCB2aWV3QXJnLCAwKTsKLSAgICBtX2tleUlkZW50aWZpZXIgPSBrZXlJZGVudGlm
aWVyQXJnLmltcGxlbWVudGF0aW9uKCk7CisgICAgbV9rZXlJZGVudGlmaWVyID0ga2V5SWRlbnRp
ZmllckFyZy5pbXBsKCk7CiAgICAgaWYgKG1fa2V5SWRlbnRpZmllcikKICAgICAgICAgbV9rZXlJ
ZGVudGlmaWVyLT5yZWYoKTsKICAgICBtX2tleUxvY2F0aW9uID0ga2V5TG9jYXRpb25Bcmc7CkBA
IC03MTksMTMgKzcxOSwxMyBAQCBNdXRhdGlvbkV2ZW50SW1wbDo6TXV0YXRpb25FdmVudEltcGwo
RXZlCiAgICAgbV9yZWxhdGVkTm9kZSA9IHJlbGF0ZWROb2RlQXJnOwogICAgIGlmIChtX3JlbGF0
ZWROb2RlKQogCW1fcmVsYXRlZE5vZGUtPnJlZigpOwotICAgIG1fcHJldlZhbHVlID0gcHJldlZh
bHVlQXJnLmltcGxlbWVudGF0aW9uKCk7CisgICAgbV9wcmV2VmFsdWUgPSBwcmV2VmFsdWVBcmcu
aW1wbCgpOwogICAgIGlmIChtX3ByZXZWYWx1ZSkKIAltX3ByZXZWYWx1ZS0+cmVmKCk7Ci0gICAg
bV9uZXdWYWx1ZSA9IG5ld1ZhbHVlQXJnLmltcGxlbWVudGF0aW9uKCk7CisgICAgbV9uZXdWYWx1
ZSA9IG5ld1ZhbHVlQXJnLmltcGwoKTsKICAgICBpZiAobV9uZXdWYWx1ZSkKIAltX25ld1ZhbHVl
LT5yZWYoKTsKLSAgICBtX2F0dHJOYW1lID0gYXR0ck5hbWVBcmcuaW1wbGVtZW50YXRpb24oKTsK
KyAgICBtX2F0dHJOYW1lID0gYXR0ck5hbWVBcmcuaW1wbCgpOwogICAgIGlmIChtX2F0dHJOYW1l
KQogCW1fYXR0ck5hbWUtPnJlZigpOwogICAgIG1fYXR0ckNoYW5nZSA9IGF0dHJDaGFuZ2VBcmc7
CkBAIC03NjYsMTMgKzc2NiwxMyBAQCB2b2lkIE11dGF0aW9uRXZlbnRJbXBsOjppbml0TXV0YXRp
b25FdmVuCiAgICAgbV9yZWxhdGVkTm9kZSA9IHJlbGF0ZWROb2RlQXJnOwogICAgIGlmIChtX3Jl
bGF0ZWROb2RlKQogCW1fcmVsYXRlZE5vZGUtPnJlZigpOwotICAgIG1fcHJldlZhbHVlID0gcHJl
dlZhbHVlQXJnLmltcGxlbWVudGF0aW9uKCk7CisgICAgbV9wcmV2VmFsdWUgPSBwcmV2VmFsdWVB
cmcuaW1wbCgpOwogICAgIGlmIChtX3ByZXZWYWx1ZSkKIAltX3ByZXZWYWx1ZS0+cmVmKCk7Ci0g
ICAgbV9uZXdWYWx1ZSA9IG5ld1ZhbHVlQXJnLmltcGxlbWVudGF0aW9uKCk7CisgICAgbV9uZXdW
YWx1ZSA9IG5ld1ZhbHVlQXJnLmltcGwoKTsKICAgICBpZiAobV9uZXdWYWx1ZSkKIAltX25ld1Zh
bHVlLT5yZWYoKTsKLSAgICBtX2F0dHJOYW1lID0gYXR0ck5hbWVBcmcuaW1wbGVtZW50YXRpb24o
KTsKKyAgICBtX2F0dHJOYW1lID0gYXR0ck5hbWVBcmcuaW1wbCgpOwogICAgIGlmIChtX2F0dHJO
YW1lKQogCW1fYXR0ck5hbWUtPnJlZigpOwogICAgIG1fYXR0ckNoYW5nZSA9IGF0dHJDaGFuZ2VB
cmc7CkluZGV4OiBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXAgLXUgLXIxLjExIGtodG1sL3htbC9kb21f
YXRvbWljc3RyaW5nLmNwcAotLS0ga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwCTEwIEp1
bCAyMDA1IDIyOjQwOjI5IC0wMDAwCTEuMTEKKysrIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5n
LmNwcAkyMSBBdWcgMjAwNSAxNjo1MjowMiAtMDAwMApAQCAtMjYsOSArMjYsMTAgQEAKIC8vIHBv
cnRhYmxlLCBhbmQgaXQgd291bGQgYmUgZ29vZCB0byBmaWd1cmUgb3V0IGEgMTAwJSBjbGVhbiB3
YXkgdGhhdCBzdGlsbCBhdm9pZHMgY29kZSB0aGF0CiAvLyBydW5zIGF0IGluaXQgdGltZS4KIAot
I2RlZmluZSBLSFRNTF9BVE9NSUNTVFJJTkdfSElERV9HTE9CQUxTIDEKKyNkZWZpbmUgRE9NX0FU
T01JQ1NUUklOR19ISURFX0dMT0JBTFMgMQogCiAjaW5jbHVkZSAiZG9tX2F0b21pY3N0cmluZy5o
IgorCiAjaW5jbHVkZSAieG1sL2RvbV9zdHJpbmdpbXBsLmgiCiAjaW5jbHVkZSAibWlzYy9oYXNo
c2V0LmgiCiAKQEAgLTUzLDE2ICs1NCw2IEBAIGlubGluZSBib29sIGVxdWFsKERPTVN0cmluZ0lt
cGwqIGNvbnN0JiAKICAgICByZXR1cm4gc1tsZW5ndGhdID09IDA7CiB9CiAKLWJvb2wgQXRvbWlj
U3RyaW5nOjplcXVhbChjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0IGNoYXIgKmIpCi17IAot
ICAgIERPTVN0cmluZ0ltcGwgKmltcGwgPSBhLm1fc3RyaW5nLmltcGxlbWVudGF0aW9uKCk7Ci0g
ICAgaWYgKCghaW1wbCB8fCAhaW1wbC0+cykgJiYgIWIpCi0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIGlmICgoIWltcGwgfHwgIWltcGwtPnMpIHx8ICFiKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgcmV0dXJuIERPTTo6ZXF1YWwoaW1wbCwgYik7IAotfQotCiBpbmxpbmUgRE9NU3RyaW5n
SW1wbCAqY29udmVydChjb25zdCBjaGFyKiBjb25zdCYgYywgdW5zaWduZWQgaGFzaCkKIHsKICAg
ICBET01TdHJpbmdJbXBsICpyID0gbmV3IERPTVN0cmluZ0ltcGwoYyk7CkBAIC0xNTIsNiArMTQz
LDEzMSBAQCBET01TdHJpbmdJbXBsICpBdG9taWNTdHJpbmc6OmFkZChET01TdHJpCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAorc3RydWN0IENoYXJCdWZmZXIKK3sKKyAgICBjb25zdCBjaGFyICpz
OworICAgIHVuc2lnbmVkIGxlbmd0aDsKK307CisKK2lubGluZSB1bnNpZ25lZCBsb3dlcmNhc2Vk
SGFzaChjb25zdCBDaGFyQnVmZmVyJiBidWYpCit7CisgICAgcmV0dXJuIERPTVN0cmluZ0ltcGw6
OmNvbXB1dGVMb3dlcmNhc2VkSGFzaChidWYucywgYnVmLmxlbmd0aCk7Cit9CisKK2lubGluZSBi
b29sIGxvd2VyY2FzZWRFcXVhbChET01TdHJpbmdJbXBsKiBjb25zdCYgc3RyLCBjb25zdCBDaGFy
QnVmZmVyICZidWYpCit7CisgICAgdWludCBzdHJMZW5ndGggPSBzdHItPmw7CisgICAgdWludCBi
dWZMZW5ndGggPSBidWYubGVuZ3RoOworICAgIGlmIChzdHJMZW5ndGggIT0gYnVmTGVuZ3RoKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBRQ2hhciAqc3RyQ2hhcnMgPSBzdHIt
PnM7CisgICAgY29uc3QgY2hhciAqYnVmQ2hhcnMgPSBidWYuczsKKyAgICAKKyAgICBmb3IgKHVp
bnQgaSA9IDA7IGkgIT0gc3RyTGVuZ3RoOyArK2kpCisgICAgICAgIGlmICgqc3RyQ2hhcnMrKyAh
PSBRQ2hhcigqYnVmQ2hhcnMrKykubG93ZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgRE9NU3RyaW5nSW1wbCAqbG93ZXJjYXNl
ZENvbnZlcnQoY29uc3QgQ2hhckJ1ZmZlciYgYnVmLCB1bnNpZ25lZCBoYXNoKQoreworICAgIERP
TVN0cmluZ0ltcGwgKnIgPSBuZXcgRE9NU3RyaW5nSW1wbChidWYucywgYnVmLmxlbmd0aCwgbG93
ZXJjYXNlZCk7CisgICAgci0+X2hhc2ggPSBoYXNoOworICAgIHItPl9pblRhYmxlID0gdHJ1ZTsK
KyAgICByZXR1cm4gcjsgCit9CisKK0RPTVN0cmluZ0ltcGwgKkF0b21pY1N0cmluZzo6YWRkTG93
ZXJjYXNlZChjb25zdCBjaGFyICpzLCBpbnQgbGVuZ3RoKQoreworICAgIGlmICghcykKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKGxlbmd0aCA9PSAwKQorICAgICAgICByZXR1cm4gRE9NU3Ry
aW5nSW1wbDo6ZW1wdHkoKTsKKyAgICBjb25zdCBDaGFyQnVmZmVyIGJ1ZiA9IHsgcywgbGVuZ3Ro
IH07IAorICAgIHJldHVybiAqc3RyaW5nVGFibGUuaW5zZXJ0PENoYXJCdWZmZXIsIGxvd2VyY2Fz
ZWRIYXNoLCBsb3dlcmNhc2VkRXF1YWwsIGxvd2VyY2FzZWRDb252ZXJ0PihidWYpLmZpcnN0Owor
fQorCitpbmxpbmUgdW5zaWduZWQgbG93ZXJjYXNlZEhhc2goY29uc3QgUUNoYXJCdWZmZXImIGJ1
ZikKK3sKKyAgICByZXR1cm4gRE9NU3RyaW5nSW1wbDo6Y29tcHV0ZUxvd2VyY2FzZWRIYXNoKGJ1
Zi5zLCBidWYubGVuZ3RoKTsKK30KKworaW5saW5lIGJvb2wgbG93ZXJjYXNlZEVxdWFsKERPTVN0
cmluZ0ltcGwqIGNvbnN0JiBzdHIsIGNvbnN0IFFDaGFyQnVmZmVyICZidWYpCit7CisgICAgdWlu
dCBzdHJMZW5ndGggPSBzdHItPmw7CisgICAgdWludCBidWZMZW5ndGggPSBidWYubGVuZ3RoOwor
ICAgIGlmIChzdHJMZW5ndGggIT0gYnVmTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBjb25zdCBRQ2hhciAqc3RyQ2hhcnMgPSBzdHItPnM7CisgICAgY29uc3QgUUNoYXIgKmJ1
ZkNoYXJzID0gYnVmLnM7CisgICAgCisgICAgZm9yICh1aW50IGkgPSAwOyBpICE9IHN0ckxlbmd0
aDsgKytpKQorICAgICAgICBpZiAoKnN0ckNoYXJzKysgIT0gKCpidWZDaGFycysrKS5sb3dlcigp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lu
bGluZSBET01TdHJpbmdJbXBsICpsb3dlcmNhc2VkQ29udmVydChjb25zdCBRQ2hhckJ1ZmZlciYg
YnVmLCB1bnNpZ25lZCBoYXNoKQoreworICAgIERPTVN0cmluZ0ltcGwgKnIgPSBuZXcgRE9NU3Ry
aW5nSW1wbChidWYucywgYnVmLmxlbmd0aCwgbG93ZXJjYXNlZCk7CisgICAgci0+X2hhc2ggPSBo
YXNoOworICAgIHItPl9pblRhYmxlID0gdHJ1ZTsKKyAgICByZXR1cm4gcjsgCit9CisKK0RPTVN0
cmluZ0ltcGwgKkF0b21pY1N0cmluZzo6YWRkTG93ZXJjYXNlZChjb25zdCBRQ2hhciAqcywgaW50
IGxlbmd0aCkKK3sKKyAgICBpZiAoIXMpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChsZW5n
dGggPT0gMCkKKyAgICAgICAgcmV0dXJuIERPTVN0cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgY29u
c3QgUUNoYXJCdWZmZXIgYnVmID0geyBzLCBsZW5ndGggfTsgCisgICAgcmV0dXJuICpzdHJpbmdU
YWJsZS5pbnNlcnQ8UUNoYXJCdWZmZXIsIGxvd2VyY2FzZWRIYXNoLCBsb3dlcmNhc2VkRXF1YWws
IGxvd2VyY2FzZWRDb252ZXJ0PihidWYpLmZpcnN0OworfQorCitpbmxpbmUgdW5zaWduZWQgbG93
ZXJjYXNlZEhhc2goRE9NU3RyaW5nSW1wbCogY29uc3QmIHN0cikKK3sKKyAgICByZXR1cm4gRE9N
U3RyaW5nSW1wbDo6Y29tcHV0ZUxvd2VyY2FzZWRIYXNoKHN0ci0+cywgc3RyLT5sKTsKK30KKwor
aW5saW5lIGJvb2wgbG93ZXJjYXNlZEVxdWFsKERPTVN0cmluZ0ltcGwqIGNvbnN0JiBzdHIsIERP
TVN0cmluZ0ltcGwqIGNvbnN0ICZ1Y3N0cikKK3sKKyAgICB1aW50IHN0ckxlbmd0aCA9IHN0ci0+
bDsKKyAgICB1aW50IHVjc3RyTGVuZ3RoID0gdWNzdHItPmw7CisgICAgaWYgKHN0ckxlbmd0aCAh
PSB1Y3N0ckxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgUUNoYXIg
KnN0ckNoYXJzID0gc3RyLT5zOworICAgIGNvbnN0IFFDaGFyICp1Y3N0ckNoYXJzID0gdWNzdHIt
PnM7CisgICAgCisgICAgZm9yICh1aW50IGkgPSAwOyBpICE9IHN0ckxlbmd0aDsgKytpKQorICAg
ICAgICBpZiAoKnN0ckNoYXJzKysgIT0gKCp1Y3N0ckNoYXJzKyspLmxvd2VyKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIERPTVN0
cmluZ0ltcGwgKmxvd2VyY2FzZWRDb252ZXJ0KERPTVN0cmluZ0ltcGwqIGNvbnN0ICZzdHIsIHVu
c2lnbmVkIGhhc2gpCit7CisgICAgRE9NU3RyaW5nSW1wbCAqciA9IG5ldyBET01TdHJpbmdJbXBs
KHN0ci0+cywgc3RyLT5sLCBsb3dlcmNhc2VkKTsKKyAgICByLT5faGFzaCA9IGhhc2g7CisgICAg
ci0+X2luVGFibGUgPSB0cnVlOworICAgIHJldHVybiByOyAKK30KKworRE9NU3RyaW5nSW1wbCAq
QXRvbWljU3RyaW5nOjphZGRMb3dlcmNhc2VkKERPTVN0cmluZ0ltcGwgKnIpCit7CisgICAgaWYg
KCFyIHx8IHItPl9pblRhYmxlKQorICAgICAgICByZXR1cm4gcjsKKyAgICBpZiAoci0+bCA9PSAw
KQorICAgICAgICByZXR1cm4gRE9NU3RyaW5nSW1wbDo6ZW1wdHkoKTsKKyAgICByZXR1cm4gKnN0
cmluZ1RhYmxlLmluc2VydDxET01TdHJpbmdJbXBsICosIGxvd2VyY2FzZWRIYXNoLCBsb3dlcmNh
c2VkRXF1YWwsIGxvd2VyY2FzZWRDb252ZXJ0PihyKS5maXJzdDsKK30KKwogdm9pZCBBdG9taWNT
dHJpbmc6OnJlbW92ZShET01TdHJpbmdJbXBsICpyKQogewogICAgIHN0cmluZ1RhYmxlLnJlbW92
ZShyKTsKQEAgLTE4MywyMyArMjk5LDQgQEAgdm9pZCBBdG9taWNTdHJpbmc6OmluaXQoKQogICAg
IH0KIH0KIAotYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgRE9N
U3RyaW5nICZiKQotewotICAgIHJldHVybiBhLmRvbVN0cmluZygpID09IGI7ICAgIAotfQotICAg
Ci1ib29sIGVxdWFsc0lnbm9yZUNhc2UoY29uc3QgQXRvbWljU3RyaW5nICZhcywgY29uc3QgRE9N
U3RyaW5nICZicykKLXsKLSAgICAvLyByZXR1cm5zIHRydWUgd2hlbiBlcXVhbCwgZmFsc2Ugb3Ro
ZXJ3aXNlIChpZ25vcmluZyBjYXNlKQotICAgIHJldHVybiAhc3RyY2FzZWNtcChhcy5kb21TdHJp
bmcoKSwgYnMpOwotfQotCi1ib29sIGVxdWFsc0lnbm9yZUNhc2UoY29uc3QgQXRvbWljU3RyaW5n
ICZhcywgY29uc3QgQXRvbWljU3RyaW5nICZicykKLXsKLSAgICAvLyByZXR1cm5zIHRydWUgd2hl
biBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlIChpZ25vcmluZyBjYXNlKQotICAgIGlmIChhcyA9PSBi
cykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuICFzdHJjYXNlY21wKGFzLmRvbVN0
cmluZygpLCBicy5kb21TdHJpbmcoKSk7Ci19Ci0KIH0KSW5kZXg6IGtodG1sL3htbC9kb21fYXRv
bWljc3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
eG1sL2RvbV9hdG9taWNzdHJpbmcuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXAg
LXUgLXIxLjYga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuaAotLS0ga2h0bWwveG1sL2RvbV9h
dG9taWNzdHJpbmcuaAkxOSBKdWwgMjAwNSAyMzo0NDowNyAtMDAwMAkxLjYKKysrIGtodG1sL3ht
bC9kb21fYXRvbWljc3RyaW5nLmgJMjEgQXVnIDIwMDUgMTY6NTI6MDIgLTAwMDAKQEAgLTE5LDgg
KzE5LDkgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICoKICAqLwotI2lmbmRl
ZiBfRE9NX0F0b21pY1N0cmluZ19oXwotI2RlZmluZSBfRE9NX0F0b21pY1N0cmluZ19oXworCisj
aWZuZGVmIERPTV9BVE9NSUNTVFJJTkdfSAorI2RlZmluZSBET01fQVRPTUlDU1RSSU5HX0gKIAog
I2luY2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCiAKQEAgLTMzLDIzICszNCwyNiBAQCBwdWJsaWM6
CiAgICAgQXRvbWljU3RyaW5nKCkgeyB9CiAgICAgQXRvbWljU3RyaW5nKGNvbnN0IGNoYXIgKnMp
IDogbV9zdHJpbmcoYWRkKHMpKSB7IH0KICAgICBBdG9taWNTdHJpbmcoY29uc3QgUUNoYXIgKnMs
IGludCBsZW5ndGgpIDogbV9zdHJpbmcoYWRkKHMsIGxlbmd0aCkpIHsgfQotICAgIEF0b21pY1N0
cmluZyhjb25zdCB1bnNpZ25lZCBzaG9ydCogcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQo
KFFDaGFyKilzLCBsZW5ndGgpKSB7IH0KICAgICBBdG9taWNTdHJpbmcoY29uc3QgUVN0cmluZyYg
cykgOiBtX3N0cmluZyhhZGQocy51bmljb2RlKCksIHMubGVuZ3RoKCkpKSB7IH0KICAgICBBdG9t
aWNTdHJpbmcoRE9NU3RyaW5nSW1wbCogaW1wKSA6IG1fc3RyaW5nKGFkZChpbXApKSB7IH0KLSAg
ICBleHBsaWNpdCBBdG9taWNTdHJpbmcoY29uc3QgRE9NU3RyaW5nICZzKSA6IG1fc3RyaW5nKGFk
ZChzLmltcGxlbWVudGF0aW9uKCkpKSB7IH0KKyAgICBleHBsaWNpdCBBdG9taWNTdHJpbmcoY29u
c3QgRE9NU3RyaW5nICZzKSA6IG1fc3RyaW5nKGFkZChzLmltcGwoKSkpIHsgfQorICAgIEF0b21p
Y1N0cmluZyhjb25zdCBjaGFyICpzLCBpbnQgbGVuZ3RoLCBMb3dlcmNhc2VkKSA6IG1fc3RyaW5n
KGFkZExvd2VyY2FzZWQocywgbGVuZ3RoKSkgeyB9CisgICAgQXRvbWljU3RyaW5nKGNvbnN0IFFD
aGFyICpzLCBpbnQgbGVuZ3RoLCBMb3dlcmNhc2VkKSA6IG1fc3RyaW5nKGFkZExvd2VyY2FzZWQo
cywgbGVuZ3RoKSkgeyB9CisgICAgQXRvbWljU3RyaW5nKERPTVN0cmluZ0ltcGwgKnMsIExvd2Vy
Y2FzZWQpIDogbV9zdHJpbmcoYWRkTG93ZXJjYXNlZChzKSkgeyB9CisgICAgQXRvbWljU3RyaW5n
KGNvbnN0IERPTVN0cmluZyAmcywgTG93ZXJjYXNlZCkgOiBtX3N0cmluZyhhZGRMb3dlcmNhc2Vk
KHMuaW1wbCgpKSkgeyB9CiAgICAgCiAgICAgb3BlcmF0b3IgY29uc3QgRE9NU3RyaW5nJigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RyaW5nOyB9CiAgICAgY29uc3QgRE9NU3RyaW5nJiBkb21TdHJpbmco
KSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsgfTsKICAgICBRU3RyaW5nIHN0cmluZygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RyaW5nLnN0cmluZygpOyB9OwogICAgIAotICAgIERPTVN0cmluZ0ltcGwq
IGltcGxlbWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaW1wbGVtZW50YXRpb24o
KTsgfQorICAgIERPTVN0cmluZ0ltcGwqIGltcGwoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5p
bXBsKCk7IH0KICAgICAKICAgICBjb25zdCBRQ2hhciAqdW5pY29kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RyaW5nLnVuaWNvZGUoKTsgfQogICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X3N0cmluZy5sZW5ndGgoKTsgfQogICAgIAogICAgIGNvbnN0IGNoYXIgKmFzY2lpKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJpbmcuc3RyaW5nKCkuYXNjaWkoKTsgfQogCi0gICAgaW50IGZpbmQoY29u
c3QgUUNoYXIgYywgaW50IHN0YXJ0ID0gMCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuZmluZChj
LCBzdGFydCk7IH0KKyAgICBpbnQgZmluZChRQ2hhciBjLCBpbnQgc3RhcnQgPSAwKSBjb25zdCB7
IHJldHVybiBtX3N0cmluZy5maW5kKGMsIHN0YXJ0KTsgfQogICAgIAogICAgIGludCB0b0ludCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnRvSW50KCk7IH0KICAgICBib29sIHBlcmNlbnRhZ2Uo
aW50ICZfcGVyY2VudGFnZSkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcucGVyY2VudGFnZShfcGVy
Y2VudGFnZSk7IH0KQEAgLTc1LDU4ICs3OSw0MiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIERP
TVN0cmluZyBtX3N0cmluZzsKICAgICAKLSAgICBzdGF0aWMgYm9vbCBlcXVhbChET01TdHJpbmdJ
bXBsICosIGNvbnN0IGNoYXIgKik7Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoRE9NU3RyaW5nSW1w
bCAqLCBjb25zdCBRQ2hhciAqLCB1aW50IGxlbmd0aCk7Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwo
RE9NU3RyaW5nSW1wbCAqLCBET01TdHJpbmdJbXBsICopOwotICAgIAotICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgQXRvbWljU3RyaW5nICZiKQotICAg
IHsgcmV0dXJuIGEubV9zdHJpbmcuaW1wbGVtZW50YXRpb24oKSA9PSBiLm1fc3RyaW5nLmltcGxl
bWVudGF0aW9uKCk7IH0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBBdG9taWNTdHJpbmcg
JmEsIGNvbnN0IGNoYXIgKmIpOwotICAgIAogICAgIHN0YXRpYyBET01TdHJpbmdJbXBsICphZGQo
Y29uc3QgY2hhciAqKTsKICAgICBzdGF0aWMgRE9NU3RyaW5nSW1wbCAqYWRkKGNvbnN0IFFDaGFy
ICosIGludCBsZW5ndGgpOwogICAgIHN0YXRpYyBET01TdHJpbmdJbXBsICphZGQoRE9NU3RyaW5n
SW1wbCAqKTsKLSAgICAKLSAgICBzdGF0aWMgdm9pZCBpbnNlcnQoRE9NU3RyaW5nSW1wbCAqKTsK
LSAgICAKLSAgICBzdGF0aWMgdm9pZCByZWhhc2goaW50IG5ld1RhYmxlU2l6ZSk7Ci0gICAgc3Rh
dGljIHZvaWQgZXhwYW5kKCk7Ci0gICAgc3RhdGljIHZvaWQgc2hyaW5rKCk7Ci0gICAgCi0gICAg
c3RhdGljIERPTVN0cmluZ0ltcGwgKipfdGFibGU7Ci0gICAgc3RhdGljIGludCBfdGFibGVTaXpl
OwotICAgIHN0YXRpYyBpbnQgX3RhYmxlU2l6ZU1hc2s7Ci0gICAgc3RhdGljIGludCBfa2V5Q291
bnQ7Ci19OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyAmYSwg
Y29uc3QgQXRvbWljU3RyaW5nICZiKQoteyByZXR1cm4gQXRvbWljU3RyaW5nOjplcXVhbChhLCBi
KTsgfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29u
c3QgQXRvbWljU3RyaW5nICZiKQoteyByZXR1cm4gIUF0b21pY1N0cmluZzo6ZXF1YWwoYSwgYik7
IH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0
IGNoYXIgKmIpCi17IHJldHVybiBBdG9taWNTdHJpbmc6OmVxdWFsKGEsIGIpOyB9Ci0KLWlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQXRvbWljU3RyaW5nICZhLCBjb25zdCBjaGFyICpiKQot
eyByZXR1cm4gIUF0b21pY1N0cmluZzo6ZXF1YWwoYSwgYik7IH0KLQotLy8gTGlzdCBvZiBwcm9w
ZXJ0eSBuYW1lcywgcGFzc2VkIHRvIGEgbWFjcm8gc28gd2UgY2FuIGRvIHNldCB0aGVtIHVwIHZh
cmlvdXMKLS8vIHdheXMgd2l0aG91dCByZXBlYXRpbmcgdGhlIGxpc3QuCisgICAgc3RhdGljIERP
TVN0cmluZ0ltcGwgKmFkZExvd2VyY2FzZWQoY29uc3QgY2hhciAqLCBpbnQgbGVuZ3RoKTsKKyAg
ICBzdGF0aWMgRE9NU3RyaW5nSW1wbCAqYWRkTG93ZXJjYXNlZChjb25zdCBRQ2hhciAqLCBpbnQg
bGVuZ3RoKTsKKyAgICBzdGF0aWMgRE9NU3RyaW5nSW1wbCAqYWRkTG93ZXJjYXNlZChET01TdHJp
bmdJbXBsICopOworfTsKIAogLy8gRGVmaW5lIGV4dGVybmFsIGdsb2JhbCB2YXJpYWJsZXMgZm9y
IHRoZSBjb21tb25seSB1c2VkIGF0b21pYyBzdHJpbmdzLgotI2lmICFLSFRNTF9BVE9NSUNTVFJJ
TkdfSElERV9HTE9CQUxTCi0gICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBudWxsQXRvbTsK
LSAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIGVtcHR5QXRvbTsKLSAgICBleHRlcm4gY29u
c3QgQXRvbWljU3RyaW5nIHRleHRBdG9tOwotICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcg
Y29tbWVudEF0b207Ci0gICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBzdGFyQXRvbTsKKyNp
ZiAhRE9NX0FUT01JQ1NUUklOR19ISURFX0dMT0JBTFMKK2V4dGVybiBjb25zdCBBdG9taWNTdHJp
bmcgbnVsbEF0b207CitleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIGVtcHR5QXRvbTsKK2V4dGVy
biBjb25zdCBBdG9taWNTdHJpbmcgdGV4dEF0b207CitleHRlcm4gY29uc3QgQXRvbWljU3RyaW5n
IGNvbW1lbnRBdG9tOworZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBzdGFyQXRvbTsKICNlbmRp
ZgotICAgICAgICAKLWJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0
IERPTVN0cmluZyAmYik7CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3Ry
aW5nICZhLCBjb25zdCBBdG9taWNTdHJpbmcgJmIpIHsgcmV0dXJuIGEuaW1wbCgpID09IGIuaW1w
bCgpOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29u
c3QgRE9NU3RyaW5nICZiKSB7IHJldHVybiBhLmRvbVN0cmluZygpID09IGI7IH0KK2lubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW5nICZhLCBjb25zdCBjaGFyICpiKSB7IHJl
dHVybiBhLmRvbVN0cmluZygpID09IGI7IH0KK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
RE9NU3RyaW5nICZhLCBjb25zdCBBdG9taWNTdHJpbmcgJmIpIHsgcmV0dXJuIGIgPT0gYTsgfQor
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBjaGFyICphLCBjb25zdCBBdG9taWNTdHJpbmcg
JmIpIHsgcmV0dXJuIGIgPT0gYTsgfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF0
b21pY1N0cmluZyAmYSwgY29uc3QgQXRvbWljU3RyaW5nICZiKSB7IHJldHVybiAhKGEgPT0gYik7
IH0KIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQXRvbWljU3RyaW5nICZhLCBjb25zdCBE
T01TdHJpbmcgJmIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQoraW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBET01TdHJpbmcgJmEsIGNvbnN0IEF0b21pY1N0cmluZyAmYikgeyByZXR1cm4gIShi
ID09IGEpOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF0b21pY1N0cmluZyAmYSwg
Y29uc3QgY2hhciAqYikgeyByZXR1cm4gIShhID09IGIpOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IGNoYXIgKmEsIGNvbnN0IEF0b21pY1N0cmluZyAmYikgeyByZXR1cm4gIShiID09
IGEpOyB9CisKK2lubGluZSBib29sIGVxdWFsc0lnbm9yaW5nQ2FzZShjb25zdCBBdG9taWNTdHJp
bmcgJmEsIGNvbnN0IEF0b21pY1N0cmluZyAmYikgeyByZXR1cm4gZXF1YWxzSWdub3JpbmdDYXNl
KGEuZG9tU3RyaW5nKCksIGIuZG9tU3RyaW5nKCkpOyB9CitpbmxpbmUgYm9vbCBlcXVhbHNJZ25v
cmluZ0Nhc2UoY29uc3QgQXRvbWljU3RyaW5nICZhLCBjb25zdCBET01TdHJpbmcgJmIpIHsgcmV0
dXJuIGVxdWFsc0lnbm9yaW5nQ2FzZShhLmRvbVN0cmluZygpLCBiKTsgfQoraW5saW5lIGJvb2wg
ZXF1YWxzSWdub3JpbmdDYXNlKGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgY2hhciAqYikg
eyByZXR1cm4gZXF1YWxzSWdub3JpbmdDYXNlKGEuZG9tU3RyaW5nKCksIGIpOyB9CitpbmxpbmUg
Ym9vbCBlcXVhbHNJZ25vcmluZ0Nhc2UoY29uc3QgRE9NU3RyaW5nICZhLCBjb25zdCBBdG9taWNT
dHJpbmcgJmIpIHsgcmV0dXJuIGIgPT0gYTsgfQoraW5saW5lIGJvb2wgZXF1YWxzSWdub3JpbmdD
YXNlKGNvbnN0IGNoYXIgKmEsIGNvbnN0IEF0b21pY1N0cmluZyAmYikgeyByZXR1cm4gYiA9PSBh
OyB9CiAKLWJvb2wgZXF1YWxzSWdub3JlQ2FzZShjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0
IERPTVN0cmluZyAmYik7Ci1ib29sIGVxdWFsc0lnbm9yZUNhc2UoY29uc3QgQXRvbWljU3RyaW5n
ICZhLCBjb25zdCBBdG9taWNTdHJpbmcgJmIpOwogfQorCiAjZW5kaWYKSW5kZXg6IGtodG1sL3ht
bC9kb21fZG9jaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNDYKZGlm
ZiAtcCAtdSAtcjEuMjQ2IGtodG1sL3htbC9kb21fZG9jaW1wbC5jcHAKLS0tIGtodG1sL3htbC9k
b21fZG9jaW1wbC5jcHAJMTkgQXVnIDIwMDUgMjM6MDk6MTggLTAwMDAJMS4yNDYKKysrIGtodG1s
L3htbC9kb21fZG9jaW1wbC5jcHAJMjEgQXVnIDIwMDUgMTY6NTI6MDUgLTAwMDAKQEAgLTE5Myw3
ICsxOTMsNyBAQCBEb2N1bWVudEltcGwgKkRPTUltcGxlbWVudGF0aW9uSW1wbDo6Y3JlCiAgICAg
Ly8gICBmcm9tICJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiIFtOYW1lc3Bh
Y2VzXS4KICAgICBpbnQgY29sb25wb3MgPSAtMTsKICAgICB1aW50IGk7Ci0gICAgRE9NU3RyaW5n
SW1wbCAqcW5hbWUgPSBxdWFsaWZpZWROYW1lLmltcGxlbWVudGF0aW9uKCk7CisgICAgRE9NU3Ry
aW5nSW1wbCAqcW5hbWUgPSBxdWFsaWZpZWROYW1lLmltcGwoKTsKICAgICBmb3IgKGkgPSAwOyBp
IDwgcW5hbWUtPmwgJiYgY29sb25wb3MgPCAwOyBpKyspIHsKICAgICAgICAgaWYgKCgqcW5hbWUp
W2ldID09ICc6JykKICAgICAgICAgICAgIGNvbG9ucG9zID0gaTsKQEAgLTIxNCw3ICsyMTQsNyBA
QCBEb2N1bWVudEltcGwgKkRPTUltcGxlbWVudGF0aW9uSW1wbDo6Y3JlCiAKICAgICAvLyBXUk9O
R19ET0NVTUVOVF9FUlI6IFJhaXNlZCBpZiBkb2N0eXBlIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCB3
aXRoIGEgZGlmZmVyZW50IGRvY3VtZW50IG9yIHdhcwogICAgIC8vIGNyZWF0ZWQgZnJvbSBhIGRp
ZmZlcmVudCBpbXBsZW1lbnRhdGlvbi4KLSAgICBpZiAoZG9jdHlwZSAmJiAoZG9jdHlwZS0+Z2V0
RG9jdW1lbnQoKSB8fCBkb2N0eXBlLT5pbXBsZW1lbnRhdGlvbigpICE9IHRoaXMpKSB7CisgICAg
aWYgKGRvY3R5cGUgJiYgKGRvY3R5cGUtPmdldERvY3VtZW50KCkgfHwgZG9jdHlwZS0+aW1wbCgp
ICE9IHRoaXMpKSB7CiAgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246OldST05H
X0RPQ1VNRU5UX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtNDg2LDcgKzQ4Niw3
IEBAIERvY3VtZW50VHlwZUltcGwgKkRvY3VtZW50SW1wbDo6ZG9jdHlwZSgKICAgICByZXR1cm4g
bV9kb2N0eXBlOwogfQogCi1ET01JbXBsZW1lbnRhdGlvbkltcGwgKkRvY3VtZW50SW1wbDo6aW1w
bGVtZW50YXRpb24oKSBjb25zdAorRE9NSW1wbGVtZW50YXRpb25JbXBsICpEb2N1bWVudEltcGw6
OmltcGwoKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGxlbWVudGF0aW9uOwogfQpAQCAtNTMx
LDcgKzUzMSw3IEBAIFByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwgKkRvY3VtZW50SW1wbDoKIAog
RW50aXR5UmVmZXJlbmNlSW1wbCAqRG9jdW1lbnRJbXBsOjpjcmVhdGVFbnRpdHlSZWZlcmVuY2Ug
KCBjb25zdCBET01TdHJpbmcgJm5hbWUgKQogewotICAgIHJldHVybiBuZXcgRW50aXR5UmVmZXJl
bmNlSW1wbChkb2NQdHIoKSwgbmFtZS5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICByZXR1cm4gbmV3
IEVudGl0eVJlZmVyZW5jZUltcGwoZG9jUHRyKCksIG5hbWUuaW1wbCgpKTsKIH0KIAogRWRpdGlu
Z1RleHRJbXBsICpEb2N1bWVudEltcGw6OmNyZWF0ZUVkaXRpbmdUZXh0Tm9kZShjb25zdCBET01T
dHJpbmcgJnRleHQpCkBAIC01NzMsNyArNTczLDcgQEAgTm9kZUltcGwgKkRvY3VtZW50SW1wbDo6
aW1wb3J0Tm9kZShOb2RlSQogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJz
LT5sZW5ndGgoKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlSW1wbCogYXR0ciA9IGF0
dHJzLT5hdHRyaWJ1dGVJdGVtKGkpOwotICAgICAgICAgICAgICAgICAgICBuZXdFbGVtZW50LT5z
ZXRBdHRyaWJ1dGUoYXR0ci0+bmFtZSgpLCBhdHRyLT52YWx1ZSgpLmltcGxlbWVudGF0aW9uKCks
IGV4Y2VwdGlvbmNvZGUpOworICAgICAgICAgICAgICAgICAgICBuZXdFbGVtZW50LT5zZXRBdHRy
aWJ1dGUoYXR0ci0+bmFtZSgpLCBhdHRyLT52YWx1ZSgpLmltcGwoKSwgZXhjZXB0aW9uY29kZSk7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChleGNlcHRpb25jb2RlICE9IDApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQtPmRlcmVmKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKQEAgLTE3NDgsNyArMTc0OCw3IEBAIHZvaWQgRG9jdW1lbnRJbXBsOjpw
cm9jZXNzSHR0cEVxdWl2KGNvbnMKIAogICAgIEtIVE1MUGFydCAqcGFydCA9IHRoaXMtPnBhcnQo
KTsKIAotICAgIGlmIChzdHJjYXNlY21wKGVxdWl2LCAiZGVmYXVsdC1zdHlsZSIpID09IDApIHsK
KyAgICBpZiAoZXF1YWxzSWdub3JpbmdDYXNlKGVxdWl2LCAiZGVmYXVsdC1zdHlsZSIpKSB7CiAg
ICAgICAgIC8vIFRoZSBwcmVmZXJyZWQgc3R5bGUgc2V0IGhhcyBiZWVuIG92ZXJyaWRkZW4gYXMg
cGVyIHNlY3Rpb24gCiAgICAgICAgIC8vIDE0LjMuMiBvZiB0aGUgSFRNTDQuMCBzcGVjaWZpY2F0
aW9uLiAgV2UgbmVlZCB0byB1cGRhdGUgdGhlCiAgICAgICAgIC8vIHNoZWV0IHVzZWQgdmFyaWFi
bGUgYW5kIHRoZW4gdXBkYXRlIG91ciBzdHlsZSBzZWxlY3Rvci4gCkBAIC0xNzU5LDcgKzE3NTks
NyBAQCB2b2lkIERvY3VtZW50SW1wbDo6cHJvY2Vzc0h0dHBFcXVpdihjb25zCiAgICAgICAgIG1f
cHJlZmVycmVkU3R5bGVzaGVldFNldCA9IGNvbnRlbnQ7CiAgICAgICAgIHVwZGF0ZVN0eWxlU2Vs
ZWN0b3IoKTsKICAgICB9Ci0gICAgZWxzZSBpZihzdHJjYXNlY21wKGVxdWl2LCAicmVmcmVzaCIp
ID09IDAgJiYgcGFydC0+bWV0YVJlZnJlc2hFbmFibGVkKCkpCisgICAgZWxzZSBpZihlcXVhbHNJ
Z25vcmluZ0Nhc2UoZXF1aXYsICJyZWZyZXNoIikgJiYgcGFydC0+bWV0YVJlZnJlc2hFbmFibGVk
KCkpCiAgICAgewogICAgICAgICAvLyBnZXQgZGVsYXkgYW5kIHVybAogICAgICAgICBRU3RyaW5n
IHN0ciA9IGNvbnRlbnQuc3RyaW5nKCkuc3RyaXBXaGl0ZVNwYWNlKCk7CkBAIC0xNzk5LDE0ICsx
Nzk5LDE0IEBAIHZvaWQgRG9jdW1lbnRJbXBsOjpwcm9jZXNzSHR0cEVxdWl2KGNvbnMKICNlbmRp
ZgogICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYoc3RyY2FzZWNtcChlcXVpdiwgImV4cGly
ZXMiKSA9PSAwKQorICAgIGVsc2UgaWYoZXF1YWxzSWdub3JpbmdDYXNlKGVxdWl2LCAiZXhwaXJl
cyIpKQogICAgIHsKICAgICAgICAgUVN0cmluZyBzdHIgPSBjb250ZW50LnN0cmluZygpLnN0cmlw
V2hpdGVTcGFjZSgpOwogICAgICAgICB0aW1lX3QgZXhwaXJlX2RhdGUgPSBzdHIudG9Mb25nKCk7
CiAgICAgICAgIGlmIChtX2RvY0xvYWRlcikKICAgICAgICAgICAgIG1fZG9jTG9hZGVyLT5zZXRF
eHBpcmVEYXRlKGV4cGlyZV9kYXRlKTsKICAgICB9Ci0gICAgZWxzZSBpZihzdHJjYXNlY21wKGVx
dWl2LCAicHJhZ21hIikgPT0gMCB8fCBzdHJjYXNlY21wKGVxdWl2LCAiY2FjaGUtY29udHJvbCIp
ID09IDAgJiYgcGFydCkKKyAgICBlbHNlIGlmKGVxdWFsc0lnbm9yaW5nQ2FzZShlcXVpdiwgInBy
YWdtYSIpIHx8IGVxdWFsc0lnbm9yaW5nQ2FzZShlcXVpdiwgImNhY2hlLWNvbnRyb2wiKSAmJiBw
YXJ0KQogICAgIHsKICAgICAgICAgUVN0cmluZyBzdHIgPSBjb250ZW50LnN0cmluZygpLmxvd2Vy
KCkuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgIEtVUkwgdXJsID0gcGFydC0+dXJsKCk7CkBA
IC0xODE1LDcgKzE4MTUsNyBAQCB2b2lkIERvY3VtZW50SW1wbDo6cHJvY2Vzc0h0dHBFcXVpdihj
b25zCiAgICAgICAgICAgIEtJTzo6aHR0cF91cGRhdGVfY2FjaGUodXJsLCB0cnVlLCAwKTsKICAg
ICAgICAgfQogICAgIH0KLSAgICBlbHNlIGlmKCAoc3RyY2FzZWNtcChlcXVpdiwgInNldC1jb29r
aWUiKSA9PSAwKSkKKyAgICBlbHNlIGlmKCAoZXF1YWxzSWdub3JpbmdDYXNlKGVxdWl2LCAic2V0
LWNvb2tpZSIpKSkKICAgICB7CiAgICAgICAgIC8vICMjIyBtYWtlIHNldENvb2tpZSB3b3JrIG9u
IFhNTCBkb2N1bWVudHMgdG9vOyBlLmcuIGluIGNhc2Ugb2YgPGh0bWw6bWV0YSAuLi4uLj4KICAg
ICAgICAgSFRNTERvY3VtZW50SW1wbCAqZCA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudEltcGwg
Kj4odGhpcyk7CkBAIC0zMDI4LDkgKzMwMjgsOSBAQCBBdHRySW1wbCAqRG9jdW1lbnRJbXBsOjpj
cmVhdGVBdHRyaWJ1dGVOCiAgICAgCiAgICAgLy8gRklYTUU6IEFzc3VtZSB0aGlzIGlzIGEgbWFw
cGVkIGF0dHJpYnV0ZSwgc2luY2UgY3JlYXRlQXR0cmlidXRlIGlzbid0IG5hbWVzcGFjZS1hd2Fy
ZS4gIFRoZXJlJ3Mgbm8gaGFybSB0byBYTUwKICAgICAvLyBkb2N1bWVudHMgaWYgd2UncmUgd3Jv
bmcuCi0gICAgcmV0dXJuIG5ldyBBdHRySW1wbCgwLCBkb2NQdHIoKSwgbmV3IE1hcHBlZEF0dHJp
YnV0ZUltcGwoUXVhbGlmaWVkTmFtZShwcmVmaXguaW1wbGVtZW50YXRpb24oKSwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb2NhbE5hbWUuaW1wbGVtZW50YXRpb24oKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5hbWVzcGFjZVVSSS5pbXBsZW1lbnRhdGlvbigpKSwgRE9NU3RyaW5nKCIiKS5pbXBsZW1lbnRh
dGlvbigpKSwgZmFsc2UpOworICAgIHJldHVybiBuZXcgQXR0ckltcGwoMCwgZG9jUHRyKCksIG5l
dyBNYXBwZWRBdHRyaWJ1dGVJbXBsKFF1YWxpZmllZE5hbWUocHJlZml4LmltcGwoKSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb2NhbE5hbWUuaW1wbCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNw
YWNlVVJJLmltcGwoKSksIERPTVN0cmluZygiIikuaW1wbCgpKSwgZmFsc2UpOwogfQogCiBTaGFy
ZWRQdHI8SFRNTENvbGxlY3Rpb25JbXBsPiBEb2N1bWVudEltcGw6OmltYWdlcygpCkluZGV4OiBr
aHRtbC94bWwvZG9tX2RvY2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC94bWwvZG9tX2RvY2ltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMjEK
ZGlmZiAtcCAtdSAtcjEuMTIxIGtodG1sL3htbC9kb21fZG9jaW1wbC5oCi0tLSBraHRtbC94bWwv
ZG9tX2RvY2ltcGwuaAkyOSBKdWwgMjAwNSAyMzowMjo0NCAtMDAwMAkxLjEyMQorKysga2h0bWwv
eG1sL2RvbV9kb2NpbXBsLmgJMjEgQXVnIDIwMDUgMTY6NTI6MDUgLTAwMDAKQEAgLTE3NSw3ICsx
NzUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBEb2N1bWVudFR5cGVJbXBsICpkb2N0eXBlKCkg
Y29uc3Q7IC8vIHJldHVybnMgMCBmb3IgSFRNTCBkb2N1bWVudHMKICAgICBEb2N1bWVudFR5cGVJ
bXBsICpyZWFsRG9jVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdHlwZTsgfQogCi0gICAgRE9N
SW1wbGVtZW50YXRpb25JbXBsICppbXBsZW1lbnRhdGlvbigpIGNvbnN0OworICAgIERPTUltcGxl
bWVudGF0aW9uSW1wbCAqaW1wbCgpIGNvbnN0OwogICAgIHZpcnR1YWwgRWxlbWVudEltcGwgKmRv
Y3VtZW50RWxlbWVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgRWxlbWVudEltcGwgKmNyZWF0ZUVs
ZW1lbnQoY29uc3QgRE9NU3RyaW5nICZ0YWdOYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUpOwogICAg
IERvY3VtZW50RnJhZ21lbnRJbXBsICpjcmVhdGVEb2N1bWVudEZyYWdtZW50ICgpOwpAQCAtODE0
LDcgKzgxNCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5hbWUoY29uc3QgRE9NU3RyaW5nJiBu
KSB7IG1fcXVhbGlmaWVkTmFtZSA9IG47IH0KICAgICB2b2lkIHNldFB1YmxpY0lkKGNvbnN0IERP
TVN0cmluZyYgcHVibGljSWQpIHsgbV9wdWJsaWNJZCA9IHB1YmxpY0lkOyB9CiAgICAgdm9pZCBz
ZXRTeXN0ZW1JZChjb25zdCBET01TdHJpbmcmIHN5c3RlbUlkKSB7IG1fc3lzdGVtSWQgPSBzeXN0
ZW1JZDsgfQotICAgIERPTUltcGxlbWVudGF0aW9uSW1wbCAqaW1wbGVtZW50YXRpb24oKSBjb25z
dCB7IHJldHVybiBtX2ltcGxlbWVudGF0aW9uOyB9CisgICAgRE9NSW1wbGVtZW50YXRpb25JbXBs
ICppbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsZW1lbnRhdGlvbjsgfQogICAgIHZvaWQgY29w
eUZyb20oY29uc3QgRG9jdW1lbnRUeXBlSW1wbCYpOwogCiAgICAgdmlydHVhbCBET01TdHJpbmcg
dG9TdHJpbmcoKSBjb25zdDsKSW5kZXg6IGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fZWxlbWVu
dGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjczCmRpZmYgLXAgLXUgLXIxLjczIGto
dG1sL3htbC9kb21fZWxlbWVudGltcGwuY3BwCi0tLSBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBs
LmNwcAkxOSBBdWcgMjAwNSAyMzowOToxOCAtMDAwMAkxLjczCisrKyBraHRtbC94bWwvZG9tX2Vs
ZW1lbnRpbXBsLmNwcAkyMSBBdWcgMjAwNSAxNjo1MjowNiAtMDAwMApAQCAtNzQsNyArNzQsNyBA
QCBBdHRySW1wbDo6QXR0ckltcGwoRWxlbWVudEltcGwqIGVsZW1lbnQsCiAgICAgaWYgKGNyZWF0
ZVRleHRDaGlsZCAmJiAhbV9hdHRyaWJ1dGUtPnZhbHVlKCkuaXNFbXB0eSgpKSB7CiAgICAgICAg
IGludCBleGNlcHRpb25jb2RlID0gMDsKICAgICAgICAgbV9pZ25vcmVDaGlsZHJlbkNoYW5nZWQr
KzsKLSAgICAgICAgYXBwZW5kQ2hpbGQoZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlVGV4dE5vZGUobV9h
dHRyaWJ1dGUtPnZhbHVlKCkuaW1wbGVtZW50YXRpb24oKSksIGV4Y2VwdGlvbmNvZGUpOworICAg
ICAgICBhcHBlbmRDaGlsZChnZXREb2N1bWVudCgpLT5jcmVhdGVUZXh0Tm9kZShtX2F0dHJpYnV0
ZS0+dmFsdWUoKS5pbXBsKCkpLCBleGNlcHRpb25jb2RlKTsKICAgICAgICAgbV9pZ25vcmVDaGls
ZHJlbkNoYW5nZWQtLTsKICAgICB9CiB9CkBAIC0xMzgsMTAgKzEzOCwxMCBAQCB2b2lkIEF0dHJJ
bXBsOjpzZXRWYWx1ZSggY29uc3QgRE9NU3RyaW5nCiAgICAgaW50IGUgPSAwOwogICAgIG1faWdu
b3JlQ2hpbGRyZW5DaGFuZ2VkKys7CiAgICAgcmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICBhcHBlbmRD
aGlsZChnZXREb2N1bWVudCgpLT5jcmVhdGVUZXh0Tm9kZSh2LmltcGxlbWVudGF0aW9uKCkpLCBl
KTsKKyAgICBhcHBlbmRDaGlsZChnZXREb2N1bWVudCgpLT5jcmVhdGVUZXh0Tm9kZSh2LmltcGwo
KSksIGUpOwogICAgIG1faWdub3JlQ2hpbGRyZW5DaGFuZ2VkLS07CiAgICAgCi0gICAgbV9hdHRy
aWJ1dGUtPnNldFZhbHVlKHYuaW1wbGVtZW50YXRpb24oKSk7CisgICAgbV9hdHRyaWJ1dGUtPnNl
dFZhbHVlKHYuaW1wbCgpKTsKICAgICBpZiAobV9lbGVtZW50KQogICAgICAgICBtX2VsZW1lbnQt
PmF0dHJpYnV0ZUNoYW5nZWQobV9hdHRyaWJ1dGUpOwogfQpAQCAtMTk3LDcgKzE5Nyw3IEBAIHZv
aWQgQXR0ckltcGw6OmNoaWxkcmVuQ2hhbmdlZCgpCiAgICAgICAgICAgICB2YWwgKz0gc3RhdGlj
X2Nhc3Q8VGV4dEltcGwgKj4obiktPmRhdGEoKTsKICAgICB9CiAgICAgCi0gICAgbV9hdHRyaWJ1
dGUtPnNldFZhbHVlKHZhbC5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICBtX2F0dHJpYnV0ZS0+c2V0
VmFsdWUodmFsLmltcGwoKSk7CiAgICAgaWYgKG1fZWxlbWVudCkKICAgICAgICAgbV9lbGVtZW50
LT5hdHRyaWJ1dGVDaGFuZ2VkKG1fYXR0cmlidXRlKTsKIH0KQEAgLTI4MCw3ICsyODAsNyBAQCB2
b2lkIEVsZW1lbnRJbXBsOjpyZW1vdmVBdHRyaWJ1dGUoY29uc3QgCiB2b2lkIEVsZW1lbnRJbXBs
OjpzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgRE9NU3RyaW5n
ICZ2YWx1ZSkKIHsKICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7Ci0gICAgc2V0QXR0cmlidXRl
KG5hbWUsIHZhbHVlLmltcGxlbWVudGF0aW9uKCksIGV4Y2VwdGlvbmNvZGUpOworICAgIHNldEF0
dHJpYnV0ZShuYW1lLCB2YWx1ZS5pbXBsKCksIGV4Y2VwdGlvbmNvZGUpOwogfQogCiAvLyBWaXJ0
dWFsIGZ1bmN0aW9uLCBkZWZpbmVkIGluIGJhc2UgY2xhc3MuCkBAIC0zNDAsMTQgKzM0MCwxMSBA
QCB2b2lkIEVsZW1lbnRJbXBsOjpzY3JvbGxJbnRvVmlldyhib29sIGFsCiAgICAgICAgIHYtPmVu
c3VyZVZpc2libGUoeCwgeSwgeGUteCwgeWUteSk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYg
RWxlbWVudEltcGw6OmdldEF0dHJpYnV0ZU5TKGNvbnN0IERPTVN0cmluZyAmbmFtZXNwYWNlVVJJ
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RE9NU3RyaW5nICZsb2NhbE5hbWUpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEVsZW1lbnRJ
bXBsOjpnZXRBdHRyaWJ1dGVOUyhjb25zdCBET01TdHJpbmcgJm5hbWVzcGFjZVVSSSwgY29uc3Qg
RE9NU3RyaW5nICZsb2NhbE5hbWUpIGNvbnN0CiB7Ci0gICAgRE9NU3RyaW5nIGxuKGxvY2FsTmFt
ZSk7CiAgICAgaWYgKGdldERvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIGxu
ID0gbG9jYWxOYW1lLmxvd2VyKCk7Ci0gICAgUXVhbGlmaWVkTmFtZSBuYW1lKG51bGxBdG9tLCBs
bi5pbXBsZW1lbnRhdGlvbigpLCBuYW1lc3BhY2VVUkkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShuYW1lKTsKKyAgICAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShR
dWFsaWZpZWROYW1lKG51bGxBdG9tLCBBdG9taWNTdHJpbmcobG9jYWxOYW1lLmltcGwoKSwgbG93
ZXJjYXNlZCksIG5hbWVzcGFjZVVSSS5pbXBsKCkpKTsKKyAgICByZXR1cm4gZ2V0QXR0cmlidXRl
KFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZS5pbXBsKCksIG5hbWVzcGFjZVVSSS5p
bXBsKCkpKTsKIH0KIAogdm9pZCBFbGVtZW50SW1wbDo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUsIERPTVN0cmluZ0ltcGwqIHZhbHVlLCBpbnQgJmV4Y2VwdGlvbmNvZGUg
KQpAQCAtNzUxLDE5ICs3NDgsMjMgQEAgdm9pZCBFbGVtZW50SW1wbDo6c2V0QXR0cmlidXRlTlMo
Y29uc3QgRAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGdldERvY3VtZW50KCkt
PmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIGxvY2FsTmFtZSA9IGxvY2FsTmFtZS5sb3dlcigp
OwotICAgICAgICAKLSAgICBzZXRBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShwcmVmaXguaW1wbGVt
ZW50YXRpb24oKSwgbG9jYWxOYW1lLmltcGxlbWVudGF0aW9uKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmFtZXNwYWNlVVJJLmltcGxlbWVudGF0aW9uKCkpLCB2YWx1ZS5pbXBs
ZW1lbnRhdGlvbigpLCBleGNlcHRpb24pOworICAgIGlmIChnZXREb2N1bWVudCgpLT5pc0hUTUxE
b2N1bWVudCgpKSB7CisgICAgICAgIHNldEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKHByZWZpeC5p
bXBsKCksCisgICAgICAgICAgICBBdG9taWNTdHJpbmcobG9jYWxOYW1lLmltcGwoKSwgbG93ZXJj
YXNlZCksCisgICAgICAgICAgICBuYW1lc3BhY2VVUkkuaW1wbCgpKSwgdmFsdWUuaW1wbCgpLCBl
eGNlcHRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNldEF0dHJpYnV0ZShRdWFs
aWZpZWROYW1lKHByZWZpeC5pbXBsKCksIGxvY2FsTmFtZS5pbXBsKCksCisgICAgICAgIG5hbWVz
cGFjZVVSSS5pbXBsKCkpLCB2YWx1ZS5pbXBsKCksIGV4Y2VwdGlvbik7CiB9CiAKIHZvaWQgRWxl
bWVudEltcGw6OnJlbW92ZUF0dHJpYnV0ZU5TKGNvbnN0IERPTVN0cmluZyAmbmFtZXNwYWNlVVJJ
LCBjb25zdCBET01TdHJpbmcgJmxvY2FsTmFtZSwgaW50ICZleGNlcHRpb24pCiB7Ci0gICAgRE9N
U3RyaW5nIGxuKGxvY2FsTmFtZSk7Ci0gICAgaWYgKGdldERvY3VtZW50KCkgJiYgZ2V0RG9jdW1l
bnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgbG4gPSBsb2NhbE5hbWUubG93ZXIoKTsK
LSAgICByZW1vdmVBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG4uaW1wbGVtZW50
YXRpb24oKSwgbmFtZXNwYWNlVVJJLmltcGxlbWVudGF0aW9uKCkpLCBleGNlcHRpb24pOworICAg
IGlmIChnZXREb2N1bWVudCgpICYmIGdldERvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsK
KyAgICAgICAgcmVtb3ZlQXR0cmlidXRlKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIEF0b21pY1N0
cmluZyhsb2NhbE5hbWUuaW1wbCgpLCBsb3dlcmNhc2VkKSwgbmFtZXNwYWNlVVJJLmltcGwoKSks
IGV4Y2VwdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmVtb3ZlQXR0cmlidXRl
KFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZS5pbXBsKCksIG5hbWVzcGFjZVVSSS5p
bXBsKCkpLCBleGNlcHRpb24pOwogfQogCiBBdHRySW1wbCAqRWxlbWVudEltcGw6OmdldEF0dHJp
YnV0ZU5vZGVOUyhjb25zdCBET01TdHJpbmcgJm5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5n
ICZsb2NhbE5hbWUpCkBAIC03NzEsMTAgKzc3Miw5IEBAIEF0dHJJbXBsICpFbGVtZW50SW1wbDo6
Z2V0QXR0cmlidXRlTm9kZU4KICAgICBOYW1lZEF0dHJNYXBJbXBsICphdHRycyA9IGF0dHJpYnV0
ZXModHJ1ZSk7CiAgICAgaWYgKCFhdHRycykKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgRE9NU3Ry
aW5nIGxuKGxvY2FsTmFtZSk7CiAgICAgaWYgKGdldERvY3VtZW50KCkgJiYgZ2V0RG9jdW1lbnQo
KS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgbG4gPSBsb2NhbE5hbWUubG93ZXIoKTsKLSAg
ICByZXR1cm4gYXR0cnMtPmdldE5hbWVkSXRlbShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsb2Nh
bE5hbWUuaW1wbGVtZW50YXRpb24oKSwgbmFtZXNwYWNlVVJJLmltcGxlbWVudGF0aW9uKCkpKTsK
KyAgICAgICAgcmV0dXJuIGF0dHJzLT5nZXROYW1lZEl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRv
bSwgQXRvbWljU3RyaW5nKGxvY2FsTmFtZS5pbXBsKCksIGxvd2VyY2FzZWQpLCBuYW1lc3BhY2VV
UkkuaW1wbCgpKSk7CisgICAgcmV0dXJuIGF0dHJzLT5nZXROYW1lZEl0ZW0oUXVhbGlmaWVkTmFt
ZShudWxsQXRvbSwgbG9jYWxOYW1lLmltcGwoKSwgbmFtZXNwYWNlVVJJLmltcGwoKSkpOwogfQog
CiBib29sIEVsZW1lbnRJbXBsOjpoYXNBdHRyaWJ1dGVOUyhjb25zdCBET01TdHJpbmcgJm5hbWVz
cGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZsb2NhbE5hbWUpIGNvbnN0CkBAIC03ODIsMTEgKzc4
Miw5IEBAIGJvb2wgRWxlbWVudEltcGw6Omhhc0F0dHJpYnV0ZU5TKGNvbnN0IEQKICAgICBOYW1l
ZEF0dHJNYXBJbXBsICphdHRycyA9IGF0dHJpYnV0ZXModHJ1ZSk7CiAgICAgaWYgKCFhdHRycykK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIERPTVN0cmluZyBsbihsb2NhbE5hbWUpOwogICAg
IGlmIChnZXREb2N1bWVudCgpICYmIGdldERvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCi0g
ICAgICAgIGxuID0gbG9jYWxOYW1lLmxvd2VyKCk7Ci0gICAgcmV0dXJuIGF0dHJzLT5nZXRBdHRy
aWJ1dGVJdGVtKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZS5pbXBsZW1lbnRhdGlv
bigpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
YW1lc3BhY2VVUkkuaW1wbGVtZW50YXRpb24oKSkpOworICAgICAgICByZXR1cm4gYXR0cnMtPmdl
dEF0dHJpYnV0ZUl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgQXRvbWljU3RyaW5nKGxvY2Fs
TmFtZS5pbXBsKCksIGxvd2VyY2FzZWQpLCBuYW1lc3BhY2VVUkkuaW1wbCgpKSk7CisgICAgcmV0
dXJuIGF0dHJzLT5nZXRBdHRyaWJ1dGVJdGVtKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2Fs
TmFtZS5pbXBsKCksIG5hbWVzcGFjZVVSSS5pbXBsKCkpKTsKIH0KIAogQ1NTU3R5bGVEZWNsYXJh
dGlvbkltcGwgKkVsZW1lbnRJbXBsOjpzdHlsZSgpCkBAIC04NTIsMTggKzg1MCwxNiBAQCBib29s
IE5hbWVkQXR0ck1hcEltcGw6OmlzTWFwcGVkQXR0cmlidXRlCiAKIE5vZGVJbXBsICpOYW1lZEF0
dHJNYXBJbXBsOjpnZXROYW1lZEl0ZW1OUyhjb25zdCBET01TdHJpbmcgJm5hbWVzcGFjZVVSSSwg
Y29uc3QgRE9NU3RyaW5nICZsb2NhbE5hbWUpIGNvbnN0CiB7Ci0gICAgRE9NU3RyaW5nIGxuKGxv
Y2FsTmFtZSk7CiAgICAgaWYgKGVsZW1lbnQtPmdldERvY3VtZW50KCktPmlzSFRNTERvY3VtZW50
KCkpCi0gICAgICAgIGxuID0gbG9jYWxOYW1lLmxvd2VyKCk7Ci0gICAgcmV0dXJuIGdldE5hbWVk
SXRlbShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsbi5pbXBsZW1lbnRhdGlvbigpLCBuYW1lc3Bh
Y2VVUkkuaW1wbGVtZW50YXRpb24oKSkpOworICAgICAgICByZXR1cm4gZ2V0TmFtZWRJdGVtKFF1
YWxpZmllZE5hbWUobnVsbEF0b20sIEF0b21pY1N0cmluZyhsb2NhbE5hbWUuaW1wbCgpLCBsb3dl
cmNhc2VkKSwgbmFtZXNwYWNlVVJJLmltcGwoKSkpOworICAgIHJldHVybiBnZXROYW1lZEl0ZW0o
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLmltcGwoKSwgbmFtZXNwYWNlVVJJLmlt
cGwoKSkpOwogfQogCiBTaGFyZWRQdHI8Tm9kZUltcGw+IE5hbWVkQXR0ck1hcEltcGw6OnJlbW92
ZU5hbWVkSXRlbU5TKGNvbnN0IERPTVN0cmluZyAmbmFtZXNwYWNlVVJJLCBjb25zdCBET01TdHJp
bmcgJmxvY2FsTmFtZSwgaW50ICZleGNlcHRpb24pCiB7Ci0gICAgRE9NU3RyaW5nIGxuKGxvY2Fs
TmFtZSk7CiAgICAgaWYgKGVsZW1lbnQtPmdldERvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkp
Ci0gICAgICAgIGxuID0gbG9jYWxOYW1lLmxvd2VyKCk7Ci0gICAgcmV0dXJuIHJlbW92ZU5hbWVk
SXRlbShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsbi5pbXBsZW1lbnRhdGlvbigpLCBuYW1lc3Bh
Y2VVUkkuaW1wbGVtZW50YXRpb24oKSksIGV4Y2VwdGlvbik7CisgICAgICAgIHJldHVybiByZW1v
dmVOYW1lZEl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgQXRvbWljU3RyaW5nKGxvY2FsTmFt
ZS5pbXBsKCksIGxvd2VyY2FzZWQpLCBuYW1lc3BhY2VVUkkuaW1wbCgpKSwgZXhjZXB0aW9uKTsK
KyAgICByZXR1cm4gcmVtb3ZlTmFtZWRJdGVtKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2Fs
TmFtZS5pbXBsKCksIG5hbWVzcGFjZVVSSS5pbXBsKCkpLCBleGNlcHRpb24pOwogfQogCiBBdHRy
SW1wbCAqTmFtZWRBdHRyTWFwSW1wbDo6Z2V0TmFtZWRJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUpIGNvbnN0CkBAIC0xMTI4LDkgKzExMjQsOSBAQCBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNs
YXJhdGlvbkltcGwqIFN0eWxlCiAgICAgUVB0ckRpY3Q8UVB0ckRpY3Q8Q1NTTWFwcGVkQXR0cmli
dXRlRGVjbGFyYXRpb25JbXBsPiA+KiBhdHRyTmFtZURpY3QgPSBtX21hcHBlZEF0dHJpYnV0ZURl
Y2xzLT5maW5kKCh2b2lkKillbnRyeVR5cGUpOwogICAgIGlmIChhdHRyTmFtZURpY3QpIHsKICAg
ICAgICAgUVB0ckRpY3Q8Q1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb25JbXBsPiogYXR0clZh
bHVlRGljdCA9IAotICAgICAgICAgICAgYXR0ck5hbWVEaWN0LT5maW5kKCh2b2lkKilhdHRyLT5u
YW1lKCkubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7CisgICAgICAgICAgICBhdHRyTmFt
ZURpY3QtPmZpbmQoKHZvaWQqKWF0dHItPm5hbWUoKS5sb2NhbE5hbWUoKS5pbXBsKCkpOwogICAg
ICAgICBpZiAoYXR0clZhbHVlRGljdCkKLSAgICAgICAgICAgIHJldHVybiBhdHRyVmFsdWVEaWN0
LT5maW5kKGF0dHItPnZhbHVlKCkuaW1wbGVtZW50YXRpb24oKSk7CisgICAgICAgICAgICByZXR1
cm4gYXR0clZhbHVlRGljdC0+ZmluZChhdHRyLT52YWx1ZSgpLmltcGwoKSk7CiAgICAgfQogICAg
IHJldHVybiAwOwogfQpAQCAtMTE0OCwxNCArMTE0NCwxNCBAQCB2b2lkIFN0eWxlZEVsZW1lbnRJ
bXBsOjpzZXRNYXBwZWRBdHRyaWJ1CiAgICAgICAgIG1fbWFwcGVkQXR0cmlidXRlRGVjbHMtPmlu
c2VydCgodm9pZCopZW50cnlUeXBlLCBhdHRyTmFtZURpY3QpOwogICAgIH0KICAgICBlbHNlCi0g
ICAgICAgIGF0dHJWYWx1ZURpY3QgPSBhdHRyTmFtZURpY3QtPmZpbmQoKHZvaWQqKWF0dHItPm5h
bWUoKS5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICAgICAgYXR0clZhbHVlRGlj
dCA9IGF0dHJOYW1lRGljdC0+ZmluZCgodm9pZCopYXR0ci0+bmFtZSgpLmxvY2FsTmFtZSgpLmlt
cGwoKSk7CiAgICAgaWYgKCFhdHRyVmFsdWVEaWN0KSB7CiAgICAgICAgIGF0dHJWYWx1ZURpY3Qg
PSBuZXcgUVB0ckRpY3Q8Q1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb25JbXBsPjsKICAgICAg
ICAgaWYgKGVudHJ5VHlwZSA9PSBlUGVyc2lzdGVudCkKICAgICAgICAgICAgIGF0dHJWYWx1ZURp
Y3QtPnNldEF1dG9EZWxldGUodHJ1ZSk7Ci0gICAgICAgIGF0dHJOYW1lRGljdC0+aW5zZXJ0KCh2
b2lkKilhdHRyLT5uYW1lKCkubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSwgYXR0clZhbHVl
RGljdCk7CisgICAgICAgIGF0dHJOYW1lRGljdC0+aW5zZXJ0KCh2b2lkKilhdHRyLT5uYW1lKCku
bG9jYWxOYW1lKCkuaW1wbCgpLCBhdHRyVmFsdWVEaWN0KTsKICAgICB9Ci0gICAgYXR0clZhbHVl
RGljdC0+cmVwbGFjZShhdHRyLT52YWx1ZSgpLmltcGxlbWVudGF0aW9uKCksIGRlY2wpOworICAg
IGF0dHJWYWx1ZURpY3QtPnJlcGxhY2UoYXR0ci0+dmFsdWUoKS5pbXBsKCksIGRlY2wpOwogfQog
CiB2b2lkIFN0eWxlZEVsZW1lbnRJbXBsOjpyZW1vdmVNYXBwZWRBdHRyaWJ1dGVEZWNsKE1hcHBl
ZEF0dHJpYnV0ZUVudHJ5IGVudHJ5VHlwZSwKQEAgLTExNjcsMTAgKzExNjMsMTAgQEAgdm9pZCBT
dHlsZWRFbGVtZW50SW1wbDo6cmVtb3ZlTWFwcGVkQXR0cgogICAgIFFQdHJEaWN0PFFQdHJEaWN0
PENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uSW1wbD4gPiogYXR0ck5hbWVEaWN0ID0gbV9t
YXBwZWRBdHRyaWJ1dGVEZWNscy0+ZmluZCgodm9pZCopZW50cnlUeXBlKTsKICAgICBpZiAoIWF0
dHJOYW1lRGljdCkKICAgICAgICAgcmV0dXJuOwotICAgIFFQdHJEaWN0PENTU01hcHBlZEF0dHJp
YnV0ZURlY2xhcmF0aW9uSW1wbD4qIGF0dHJWYWx1ZURpY3QgPSBhdHRyTmFtZURpY3QtPmZpbmQo
KHZvaWQqKWF0dHJOYW1lLmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOworICAgIFFQdHJE
aWN0PENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uSW1wbD4qIGF0dHJWYWx1ZURpY3QgPSBh
dHRyTmFtZURpY3QtPmZpbmQoKHZvaWQqKWF0dHJOYW1lLmxvY2FsTmFtZSgpLmltcGwoKSk7CiAg
ICAgaWYgKCFhdHRyVmFsdWVEaWN0KQogICAgICAgICByZXR1cm47Ci0gICAgYXR0clZhbHVlRGlj
dC0+cmVtb3ZlKGF0dHJWYWx1ZS5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICBhdHRyVmFsdWVEaWN0
LT5yZW1vdmUoYXR0clZhbHVlLmltcGwoKSk7CiB9CiAKIHZvaWQgU3R5bGVkRWxlbWVudEltcGw6
OmludmFsaWRhdGVTdHlsZUF0dHJpYnV0ZSgpCkBAIC0xMjUxLDE0ICsxMjQ3LDE0IEBAIHZvaWQg
TmFtZWRNYXBwZWRBdHRyTWFwSW1wbDo6cGFyc2VDbGFzc0EKICAgICBpZiAoIWVsZW1lbnQtPmhh
c0NsYXNzKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBET01TdHJpbmcgY2xhc3NBdHRy
ID0gZWxlbWVudC0+Z2V0RG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkgPyAKLSAgICAgICAgKGNs
YXNzU3RyLmltcGxlbWVudGF0aW9uKCktPmlzTG93ZXIoKSA/IGNsYXNzU3RyIDogRE9NU3RyaW5n
KGNsYXNzU3RyLmltcGxlbWVudGF0aW9uKCktPmxvd2VyKCkpKSA6Ci0gICAgICAgIGNsYXNzU3Ry
OworICAgIGJvb2wgbmVlZHNMb3dlcmNhc2luZyA9IGVsZW1lbnQtPmdldERvY3VtZW50KCktPmlu
Q29tcGF0TW9kZSgpOwogICAgIAotICAgIGlmIChjbGFzc0F0dHIuZmluZCgnICcpID09IC0xICYm
IGNsYXNzQXR0ci5maW5kKCdcbicpID09IC0xKQotICAgICAgICBtX2NsYXNzTGlzdC5zZXRTdHJp
bmcoQXRvbWljU3RyaW5nKGNsYXNzQXR0cikpOworICAgIGlmIChjbGFzc1N0ci5maW5kKCcgJykg
PT0gLTEgJiYgY2xhc3NTdHIuZmluZCgnXG4nKSA9PSAtMSkKKyAgICAgICAgbV9jbGFzc0xpc3Qu
c2V0U3RyaW5nKG5lZWRzTG93ZXJjYXNpbmcgPyBBdG9taWNTdHJpbmcoY2xhc3NTdHIsIGxvd2Vy
Y2FzZWQpIDogQXRvbWljU3RyaW5nKGNsYXNzU3RyKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFFT
dHJpbmcgdmFsID0gY2xhc3NBdHRyLnN0cmluZygpOworICAgICAgICBRU3RyaW5nIHZhbCA9IGNs
YXNzU3RyLnN0cmluZygpOworICAgICAgICBpZiAobmVlZHNMb3dlcmNhc2luZykKKyAgICAgICAg
ICAgIHZhbCA9IHZhbC5sb3dlcigpOwogICAgICAgICB2YWwucmVwbGFjZSgnXG4nLCAnICcpOwog
ICAgICAgICBRU3RyaW5nTGlzdCBsaXN0ID0gUVN0cmluZ0xpc3Q6OnNwbGl0KCcgJywgdmFsKTsK
ICAgICAgICAgCkBAIC0xMjY5LDggKzEyNjUsNyBAQCB2b2lkIE5hbWVkTWFwcGVkQXR0ck1hcElt
cGw6OnBhcnNlQ2xhc3NBCiAgICAgICAgICAgICAgICAgaWYgKGN1cnIpIHsKICAgICAgICAgICAg
ICAgICAgICAgY3Vyci0+c2V0TmV4dChuZXcgQXRvbWljU3RyaW5nTGlzdChBdG9taWNTdHJpbmco
c2luZ2xlQ2xhc3MpKSk7CiAgICAgICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0KCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG1fY2xhc3NMaXN0LnNldFN0cmluZyhB
dG9taWNTdHJpbmcoc2luZ2xlQ2xhc3MpKTsKICAgICAgICAgICAgICAgICAgICAgY3VyciA9ICZt
X2NsYXNzTGlzdDsKICAgICAgICAgICAgICAgICB9CkBAIC0xMzc5LDggKzEzNzQsOCBAQCB2b2lk
IFN0eWxlZEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpCiAgICAgICAgIGlmIChuYW1lZEF0
dHJNYXApIHsKICAgICAgICAgICAgIGlmIChhdHRyLT5pc051bGwoKSkKICAgICAgICAgICAgICAg
ICBuYW1lZEF0dHJNYXAtPnNldElEKG51bGxBdG9tKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGdl
dERvY3VtZW50KCkgJiYgZ2V0RG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkgJiYgIWF0dHItPnZh
bHVlKCkuaW1wbGVtZW50YXRpb24oKS0+aXNMb3dlcigpKQotICAgICAgICAgICAgICAgIG5hbWVk
QXR0ck1hcC0+c2V0SUQoQXRvbWljU3RyaW5nKGF0dHItPnZhbHVlKCkuZG9tU3RyaW5nKCkubG93
ZXIoKSkpOworICAgICAgICAgICAgZWxzZSBpZiAoZ2V0RG9jdW1lbnQoKSAmJiBnZXREb2N1bWVu
dCgpLT5pbkNvbXBhdE1vZGUoKSAmJiAhYXR0ci0+dmFsdWUoKS5pbXBsKCktPmlzTG93ZXIoKSkK
KyAgICAgICAgICAgICAgICBuYW1lZEF0dHJNYXAtPnNldElEKEF0b21pY1N0cmluZyhhdHRyLT52
YWx1ZSgpLmRvbVN0cmluZygpLCBsb3dlcmNhc2VkKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgbmFtZWRBdHRyTWFwLT5zZXRJRChhdHRyLT52YWx1ZSgpKTsKICAgICAgICAg
fQpAQCAtMTQ3Niw3ICsxNDcxLDcgQEAgdm9pZCBTdHlsZWRFbGVtZW50SW1wbDo6YWRkQ1NTTGVu
Z3RoKE1hcAogICAgIGlmICghYXR0ci0+ZGVjbCgpKSBjcmVhdGVNYXBwZWREZWNsKGF0dHIpOwog
CiAgICAgLy8gc3RyaXAgYXR0cmlidXRlIGdhcmJhZ2UuLgotICAgIERPTVN0cmluZ0ltcGwqIHYg
PSB2YWx1ZS5pbXBsZW1lbnRhdGlvbigpOworICAgIERPTVN0cmluZ0ltcGwqIHYgPSB2YWx1ZS5p
bXBsKCk7CiAgICAgaWYgKCB2ICkgewogICAgICAgICB1bnNpZ25lZCBpbnQgbCA9IDA7CiAgICAg
ICAgIApJbmRleDoga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMTc1CmRpZmYgLXAgLXUgLXIxLjE3NSBraHRtbC94bWwvZG9tX25vZGVp
bXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAJMTkgQXVnIDIwMDUgMjM6MDk6
MTggLTAwMDAJMS4xNzUKKysrIGtodG1sL3htbC9kb21fbm9kZWltcGwuY3BwCTIxIEF1ZyAyMDA1
IDE2OjUyOjA4IC0wMDAwCkBAIC0xNjM4LDEwICsxNjM4LDggQEAgU2hhcmVkUHRyPE5vZGVMaXN0
SW1wbD4gTm9kZUltcGw6OmdldEVsZQogICAgIGlmIChuYW1lc3BhY2VVUkkuaXNOdWxsKCkgfHwg
bG9jYWxOYW1lLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gU2hhcmVkUHRyPE5vZGVMaXN0SW1w
bD4oKTsgLy8gRklYTUU6IFdobyBjYXJlcyBhYm91dCB0aGlzIGFkZGl0aW9uYWwgY2hlY2s/CiAg
ICAgCi0gICAgRE9NU3RyaW5nIG5hbWUgPSBsb2NhbE5hbWU7Ci0gICAgaWYgKGdldERvY3VtZW50
KCktPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIG5hbWUgPSBsb2NhbE5hbWUubG93ZXIoKTsK
LSAgICByZXR1cm4gU2hhcmVkUHRyPE5vZGVMaXN0SW1wbD4obmV3IFRhZ05vZGVMaXN0SW1wbCh0
aGlzLCBBdG9taWNTdHJpbmcobmFtZXNwYWNlVVJJKSwgQXRvbWljU3RyaW5nKG5hbWUpKSk7Cisg
ICAgcmV0dXJuIFNoYXJlZFB0cjxOb2RlTGlzdEltcGw+KG5ldyBUYWdOb2RlTGlzdEltcGwodGhp
cywgQXRvbWljU3RyaW5nKG5hbWVzcGFjZVVSSSksCisgICAgICAgIGdldERvY3VtZW50KCktPmlz
SFRNTERvY3VtZW50KCkgPyBBdG9taWNTdHJpbmcobG9jYWxOYW1lLCBsb3dlcmNhc2VkKSA6IEF0
b21pY1N0cmluZyhsb2NhbE5hbWUpKSk7CiB9CiAKIGJvb2wgTm9kZUltcGw6OmlzU3VwcG9ydGVk
KGNvbnN0IERPTVN0cmluZyAmZmVhdHVyZSwgY29uc3QgRE9NU3RyaW5nICZ2ZXJzaW9uKQpJbmRl
eDoga2h0bWwveG1sL2RvbV9xbmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwveG1sL2RvbV9xbmFtZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NApkaWZmIC1wIC11IC1yMS40IGtodG1sL3htbC9kb21fcW5hbWUuY3BwCi0tLSBraHRtbC94bWwv
ZG9tX3FuYW1lLmNwcAkxOCBKdWwgMjAwNSAyMTo0NDoyOSAtMDAwMAkxLjQKKysrIGtodG1sL3ht
bC9kb21fcW5hbWUuY3BwCTIxIEF1ZyAyMDA1IDE2OjUyOjEwIC0wMDAwCkBAIC04MSw5ICs4MSw5
IEBAIGlubGluZSB1bnNpZ25lZCBoYXNoQ29tcG9uZW50cyhjb25zdCBRdWEKIAogc3RydWN0IFFO
YW1lSGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUXVhbGlmaWVkTmFtZTo6
UXVhbGlmaWVkTmFtZUltcGwgKm5hbWUpIHsgICAgCi0gICAgICAgIFF1YWxpZmllZE5hbWVDb21w
b25lbnRzIGNvbXBvbmVudHMgPSB7IG5hbWUtPm1fcHJlZml4LmltcGxlbWVudGF0aW9uKCksIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLT5tX2xv
Y2FsTmFtZS5pbXBsZW1lbnRhdGlvbigpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmFtZS0+bV9uYW1lc3BhY2UuaW1wbGVtZW50YXRpb24oKSB9Owor
ICAgICAgICBRdWFsaWZpZWROYW1lQ29tcG9uZW50cyBjb21wb25lbnRzID0geyBuYW1lLT5tX3By
ZWZpeC5pbXBsKCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuYW1lLT5tX2xvY2FsTmFtZS5pbXBsKCksIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lLT5tX25hbWVzcGFjZS5pbXBsKCkgfTsKICAgICAg
ICAgcmV0dXJuIGhhc2hDb21wb25lbnRzKGNvbXBvbmVudHMpOwogICAgIH0KICAgICBzdGF0aWMg
Ym9vbCBlcXVhbChjb25zdCBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCAqYSwgY29u
c3QgUXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGwgKmIpIHsgcmV0dXJuIGEgPT0gYjsg
fQpAQCAtOTUsOSArOTUsOSBAQCBzdGF0aWMgUU5hbWVTZXQgKmdOYW1lQ2FjaGU7CiAKIGlubGlu
ZSBib29sIGVxdWFsQ29tcG9uZW50cyhRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCog
Y29uc3QmIG5hbWUsIGNvbnN0IFF1YWxpZmllZE5hbWVDb21wb25lbnRzICZjb21wb25lbnRzKQog
ewotICAgIHJldHVybiBjb21wb25lbnRzLm1fbG9jYWxOYW1lID09IG5hbWUtPm1fbG9jYWxOYW1l
LmltcGxlbWVudGF0aW9uKCkgJiYKLSAgICAgICAgICAgY29tcG9uZW50cy5tX25hbWVzcGFjZSA9
PSBuYW1lLT5tX25hbWVzcGFjZS5pbXBsZW1lbnRhdGlvbigpICYmCi0gICAgICAgICAgIGNvbXBv
bmVudHMubV9wcmVmaXggPT0gbmFtZS0+bV9wcmVmaXguaW1wbGVtZW50YXRpb24oKTsKKyAgICBy
ZXR1cm4gY29tcG9uZW50cy5tX2xvY2FsTmFtZSA9PSBuYW1lLT5tX2xvY2FsTmFtZS5pbXBsKCkg
JiYKKyAgICAgICAgICAgY29tcG9uZW50cy5tX25hbWVzcGFjZSA9PSBuYW1lLT5tX25hbWVzcGFj
ZS5pbXBsKCkgJiYKKyAgICAgICAgICAgY29tcG9uZW50cy5tX3ByZWZpeCA9PSBuYW1lLT5tX3By
ZWZpeC5pbXBsKCk7CiB9CiAKIGlubGluZSBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1w
bCAqY29udmVydENvbXBvbmVudHMoY29uc3QgUXVhbGlmaWVkTmFtZUNvbXBvbmVudHMmIGNvbXBv
bmVudHMsIHVuc2lnbmVkIGhhc2gpCkBAIC0xMTEsNyArMTExLDcgQEAgUXVhbGlmaWVkTmFtZTo6
UXVhbGlmaWVkTmFtZShjb25zdCBBdG9taQogewogICAgIGlmICghZ05hbWVDYWNoZSkKICAgICAg
ICAgZ05hbWVDYWNoZSA9IG5ldyBRTmFtZVNldDsKLSAgICBRdWFsaWZpZWROYW1lQ29tcG9uZW50
cyBjb21wb25lbnRzID0geyBwLmltcGxlbWVudGF0aW9uKCksIGwuaW1wbGVtZW50YXRpb24oKSwg
bi5pbXBsZW1lbnRhdGlvbigpIH07CisgICAgUXVhbGlmaWVkTmFtZUNvbXBvbmVudHMgY29tcG9u
ZW50cyA9IHsgcC5pbXBsKCksIGwuaW1wbCgpLCBuLmltcGwoKSB9OwogICAgIG1faW1wbCA9ICpn
TmFtZUNhY2hlLT5pbnNlcnQ8UXVhbGlmaWVkTmFtZUNvbXBvbmVudHMsIGhhc2hDb21wb25lbnRz
LCBlcXVhbENvbXBvbmVudHMsIGNvbnZlcnRDb21wb25lbnRzPihjb21wb25lbnRzKS5maXJzdDsg
ICAgCiAgICAgcmVmKCk7CiB9CkluZGV4OiBraHRtbC94bWwvZG9tX3N0cmluZ2ltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fc3RyaW5n
aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjkKZGlmZiAtcCAtdSAtcjEuMjkga2h0
bWwveG1sL2RvbV9zdHJpbmdpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbV9zdHJpbmdpbXBsLmNw
cAkyNyBKdWwgMjAwNSAyMzo0MTo0MCAtMDAwMAkxLjI5CisrKyBraHRtbC94bWwvZG9tX3N0cmlu
Z2ltcGwuY3BwCTIxIEF1ZyAyMDA1IDE2OjUyOjEwIC0wMDAwCkBAIC0yNiw5ICsyNiwxMiBAQAog
I2luY2x1ZGUgImRvbV9zdHJpbmdpbXBsLmgiCiAKICNpbmNsdWRlIDxrZGVidWcuaD4KLQogI2lu
Y2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgImRvbV9hdG9taWNzdHJpbmcuaCIKKyNpbmNsdWRl
ICJtaXNjL2todG1sbGF5b3V0LmgiCisKKyNkZWZpbmUgUVRfQUxMT0NfUUNIQVJfVkVDKCBOICkg
c3RhdGljX2Nhc3Q8UUNoYXIqPihtYWluX3RocmVhZF9tYWxsb2MoIHNpemVvZihRQ2hhcikqKCBO
ICkgKSkKKyNkZWZpbmUgUVRfREVMRVRFX1FDSEFSX1ZFQyggUCApIG1haW5fdGhyZWFkX2ZyZWUg
KCh2b2lkKikoIFAgKSkKIAogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogCkBAIC00MywxMiArNDYs
MTMgQEAgRE9NU3RyaW5nSW1wbCogRE9NU3RyaW5nSW1wbDo6ZW1wdHkoKQogICAgIHJldHVybiAm
ZTsKIH0KIAotRE9NU3RyaW5nSW1wbDo6RE9NU3RyaW5nSW1wbChjb25zdCBRQ2hhciAqc3RyLCB1
bnNpZ25lZCBpbnQgbGVuKSB7CitET01TdHJpbmdJbXBsOjpET01TdHJpbmdJbXBsKGNvbnN0IFFD
aGFyICpzdHIsIHVuc2lnbmVkIGxlbikKK3sKICAgICBfaGFzaCA9IDA7CiAgICAgX2luVGFibGUg
PSBmYWxzZTsKICAgICBib29sIGhhdmVzdHIgPSBzdHIgJiYgbGVuOwotICAgIHMgPSBRVF9BTExP
Q19RQ0hBUl9WRUMoIGhhdmVzdHIgPyBsZW4gOiAxICk7Ci0gICAgaWYoc3RyICYmIGxlbikgewor
ICAgIHMgPSBRVF9BTExPQ19RQ0hBUl9WRUMoaGF2ZXN0ciA/IGxlbiA6IDEpOworICAgIGlmICho
YXZlc3RyKSB7CiAgICAgICAgIG1lbWNweSggcywgc3RyLCBsZW4gKiBzaXplb2YoUUNoYXIpICk7
CiAgICAgICAgIGwgPSBsZW47CiAgICAgfSBlbHNlIHsKQEAgLTU4LDYgKzYyLDQyIEBAIERPTVN0
cmluZ0ltcGw6OkRPTVN0cmluZ0ltcGwoY29uc3QgUUNoYXIKICAgICB9CiB9CiAKK0RPTVN0cmlu
Z0ltcGw6OkRPTVN0cmluZ0ltcGwoY29uc3QgUUNoYXIgKnN0ciwgdW5zaWduZWQgbGVuLCBMb3dl
cmNhc2VkKQoreworICAgIF9oYXNoID0gMDsKKyAgICBfaW5UYWJsZSA9IGZhbHNlOworICAgIGJv
b2wgaGF2ZXN0ciA9IHN0ciAmJiBsZW47CisgICAgUUNoYXIgKm5ld1N0ciA9IFFUX0FMTE9DX1FD
SEFSX1ZFQyhoYXZlc3RyID8gbGVuIDogMSk7CisgICAgcyA9IG5ld1N0cjsKKyAgICBpZiAoaGF2
ZXN0cikgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpCisgICAg
ICAgICAgICBuZXdTdHJbaV0gPSBzdHJbaV0ubG93ZXIoKTsKKyAgICAgICAgbCA9IGxlbjsKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBjcmFzaCBwcm90ZWN0aW9uCisgICAgICAgIG5ld1N0clsw
XSA9IDB4MDsKKyAgICAgICAgbCA9IDA7CisgICAgfQorfQorCitET01TdHJpbmdJbXBsOjpET01T
dHJpbmdJbXBsKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgbGVuLCBMb3dlcmNhc2VkKQorewor
ICAgIF9oYXNoID0gMDsKKyAgICBfaW5UYWJsZSA9IGZhbHNlOworICAgIGJvb2wgaGF2ZXN0ciA9
IHN0ciAmJiBsZW47CisgICAgUUNoYXIgKm5ld1N0ciA9IFFUX0FMTE9DX1FDSEFSX1ZFQyhoYXZl
c3RyID8gbGVuIDogMSk7CisgICAgcyA9IG5ld1N0cjsKKyAgICBpZiAoaGF2ZXN0cikgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpCisgICAgICAgICAgICBuZXdT
dHJbaV0gPSBRQ2hhcihzdHJbaV0pLmxvd2VyKCk7CisgICAgICAgIGwgPSBsZW47CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gY3Jhc2ggcHJvdGVjdGlvbgorICAgICAgICBuZXdTdHJbMF0gPSAw
eDA7CisgICAgICAgIGwgPSAwOworICAgIH0KK30KKwogRE9NU3RyaW5nSW1wbDo6RE9NU3RyaW5n
SW1wbChjb25zdCBjaGFyICpzdHIpCiB7CiAgICAgX2hhc2ggPSAwOwpAQCAtNDU5LDkgKzQ5OSw4
IEBAIGNvbnN0IHVuc2lnbmVkIFBISSA9IDB4OWUzNzc5YjlVOwogCiAvLyBQYXVsIEhzaWVoJ3Mg
U3VwZXJGYXN0SGFzaAogLy8gaHR0cDovL3d3dy5hemlsbGlvbm1vbmtleXMuY29tL3FlZC9oYXNo
Lmh0bWwKLXVuc2lnbmVkIERPTVN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKGNvbnN0IFFDaGFyICpz
LCBpbnQgbGVuKQordW5zaWduZWQgRE9NU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2goY29uc3QgUUNo
YXIgKnMsIHVuc2lnbmVkIGwpCiB7Ci0gICAgdW5zaWduZWQgbCA9IGxlbjsKICAgICB1aW50MzJf
dCBoYXNoID0gUEhJOwogICAgIHVpbnQzMl90IHRtcDsKICAgICAKQEAgLTU0Nyw2ICs1ODYsOTQg
QEAgdW5zaWduZWQgRE9NU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2goY29ucwogICAgIHJldHVybiBo
YXNoOwogfQogCisvLyBQYXVsIEhzaWVoJ3MgU3VwZXJGYXN0SGFzaAorLy8gaHR0cDovL3d3dy5h
emlsbGlvbm1vbmtleXMuY29tL3FlZC9oYXNoLmh0bWwKK3Vuc2lnbmVkIERPTVN0cmluZ0ltcGw6
OmNvbXB1dGVMb3dlcmNhc2VkSGFzaChjb25zdCBRQ2hhciAqcywgdW5zaWduZWQgbCkKK3sKKyAg
ICB1aW50MzJfdCBoYXNoID0gUEhJOworICAgIHVpbnQzMl90IHRtcDsKKyAgICAKKyAgICBpbnQg
cmVtID0gbCAmIDE7CisgICAgbCA+Pj0gMTsKKyAgICAKKyAgICAvLyBNYWluIGxvb3AKKyAgICBm
b3IgKDsgbCA+IDA7IGwtLSkgeworICAgICAgICBoYXNoICs9IHNbMF0ubG93ZXIoKS51bmljb2Rl
KCk7CisgICAgICAgIHRtcCA9IChzWzFdLmxvd2VyKCkudW5pY29kZSgpIDw8IDExKSBeIGhhc2g7
CisgICAgICAgIGhhc2ggPSAoaGFzaCA8PCAxNikgXiB0bXA7CisgICAgICAgIHMgKz0gMjsKKyAg
ICAgICAgaGFzaCArPSBoYXNoID4+IDExOworICAgIH0KKyAgICAKKyAgICAvLyBIYW5kbGUgZW5k
IGNhc2UKKyAgICBpZiAocmVtKSB7CisgICAgICAgIGhhc2ggKz0gc1swXS5sb3dlcigpLnVuaWNv
ZGUoKTsKKyAgICAgICAgaGFzaCBePSBoYXNoIDw8IDExOworICAgICAgICBoYXNoICs9IGhhc2gg
Pj4gMTc7CisgICAgfQorCisgICAgLy8gRm9yY2UgImF2YWxhbmNoaW5nIiBvZiBmaW5hbCAxMjcg
Yml0cworICAgIGhhc2ggXj0gaGFzaCA8PCAzOworICAgIGhhc2ggKz0gaGFzaCA+PiA1OworICAg
IGhhc2ggXj0gaGFzaCA8PCAyOworICAgIGhhc2ggKz0gaGFzaCA+PiAxNTsKKyAgICBoYXNoIF49
IGhhc2ggPDwgMTA7CisKKyAgICAvLyB0aGlzIGF2b2lkcyBldmVyIHJldHVybmluZyBhIGhhc2gg
Y29kZSBvZiAwLCBzaW5jZSB0aGF0IGlzIHVzZWQgdG8KKyAgICAvLyBzaWduYWwgImhhc2ggbm90
IGNvbXB1dGVkIHlldCIsIHVzaW5nIGEgdmFsdWUgdGhhdCBpcyBsaWtlbHkgdG8gYmUKKyAgICAv
LyBlZmZlY3RpdmVseSB0aGUgc2FtZSBhcyAwIHdoZW4gdGhlIGxvdyBiaXRzIGFyZSBtYXNrZWQK
KyAgICBpZiAoaGFzaCA9PSAwKQorICAgICAgICBoYXNoID0gMHg4MDAwMDAwMDsKKyAgICAKKyAg
ICByZXR1cm4gaGFzaDsKK30KKworLy8gUGF1bCBIc2llaCdzIFN1cGVyRmFzdEhhc2gKKy8vIGh0
dHA6Ly93d3cuYXppbGxpb25tb25rZXlzLmNvbS9xZWQvaGFzaC5odG1sCit1bnNpZ25lZCBET01T
dHJpbmdJbXBsOjpjb21wdXRlTG93ZXJjYXNlZEhhc2goY29uc3QgY2hhciAqcywgdW5zaWduZWQg
bCkKK3sKKyAgICAvLyBUaGlzIGhhc2ggaXMgZGVzaWduZWQgdG8gd29yayBvbiAxNi1iaXQgY2h1
bmtzIGF0IGEgdGltZS4gQnV0IHNpbmNlIHRoZSBub3JtYWwgY2FzZQorICAgIC8vIChhYm92ZSkg
aXMgdG8gaGFzaCBVVEYtMTYgY2hhcmFjdGVycywgd2UganVzdCB0cmVhdCB0aGUgOC1iaXQgY2hh
cnMgYXMgaWYgdGhleQorICAgIC8vIHdlcmUgMTYtYml0IGNodW5rcywgd2hpY2ggc2hvdWxkIGdp
dmUgbWF0Y2hpbmcgcmVzdWx0cworCisgICAgdWludDMyX3QgaGFzaCA9IFBISTsKKyAgICB1aW50
MzJfdCB0bXA7CisgICAgCisgICAgaW50IHJlbSA9IGwgJiAxOworICAgIGwgPj49IDE7CisgICAg
CisgICAgLy8gTWFpbiBsb29wCisgICAgZm9yICg7IGwgPiAwOyBsLS0pIHsKKyAgICAgICAgaGFz
aCArPSBRQ2hhcihzWzBdKS5sb3dlcigpLnVuaWNvZGUoKTsKKyAgICAgICAgdG1wID0gKFFDaGFy
KHNbMV0pLmxvd2VyKCkudW5pY29kZSgpIDw8IDExKSBeIGhhc2g7CisgICAgICAgIGhhc2ggPSAo
aGFzaCA8PCAxNikgXiB0bXA7CisgICAgICAgIHMgKz0gMjsKKyAgICAgICAgaGFzaCArPSBoYXNo
ID4+IDExOworICAgIH0KKyAgICAKKyAgICAvLyBIYW5kbGUgZW5kIGNhc2UKKyAgICBpZiAocmVt
KSB7CisgICAgICAgIGhhc2ggKz0gUUNoYXIoc1swXSkubG93ZXIoKS51bmljb2RlKCk7CisgICAg
ICAgIGhhc2ggXj0gaGFzaCA8PCAxMTsKKyAgICAgICAgaGFzaCArPSBoYXNoID4+IDE3OworICAg
IH0KKworICAgIC8vIEZvcmNlICJhdmFsYW5jaGluZyIgb2YgZmluYWwgMTI3IGJpdHMKKyAgICBo
YXNoIF49IGhhc2ggPDwgMzsKKyAgICBoYXNoICs9IGhhc2ggPj4gNTsKKyAgICBoYXNoIF49IGhh
c2ggPDwgMjsKKyAgICBoYXNoICs9IGhhc2ggPj4gMTU7CisgICAgaGFzaCBePSBoYXNoIDw8IDEw
OworCisgICAgLy8gdGhpcyBhdm9pZHMgZXZlciByZXR1cm5pbmcgYSBoYXNoIGNvZGUgb2YgMCwg
c2luY2UgdGhhdCBpcyB1c2VkIHRvCisgICAgLy8gc2lnbmFsICJoYXNoIG5vdCBjb21wdXRlZCB5
ZXQiLCB1c2luZyBhIHZhbHVlIHRoYXQgaXMgbGlrZWx5IHRvIGJlCisgICAgLy8gZWZmZWN0aXZl
bHkgdGhlIHNhbWUgYXMgMCB3aGVuIHRoZSBsb3cgYml0cyBhcmUgbWFza2VkCisgICAgaWYgKGhh
c2ggPT0gMCkKKyAgICAgICAgaGFzaCA9IDB4ODAwMDAwMDA7CisgICAgCisgICAgcmV0dXJuIGhh
c2g7Cit9CisKIGNvbnN0IGNoYXIgKkRPTVN0cmluZ0ltcGw6OmFzY2lpKCkgY29uc3QKIHsKICAg
ICBjaGFyICpidWZmZXIgPSBuZXcgY2hhcltsICsgMV07CkluZGV4OiBraHRtbC94bWwvZG9tX3N0
cmluZ2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94
bWwvZG9tX3N0cmluZ2ltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNApkaWZmIC1wIC11
IC1yMS4xNCBraHRtbC94bWwvZG9tX3N0cmluZ2ltcGwuaAotLS0ga2h0bWwveG1sL2RvbV9zdHJp
bmdpbXBsLmgJMjEgSnVuIDIwMDUgMjI6Mjc6NTUgLTAwMDAJMS4xNAorKysga2h0bWwveG1sL2Rv
bV9zdHJpbmdpbXBsLmgJMjEgQXVnIDIwMDUgMTY6NTI6MTAgLTAwMDAKQEAgLTE5LDIwICsxOSwy
MyBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgogICovCi0jaWZuZGVmIF9E
T01fRE9NU3RyaW5nSW1wbF9oXwotI2RlZmluZSBfRE9NX0RPTVN0cmluZ0ltcGxfaF8KKworI2lm
bmRlZiBET01fRE9NU1RSSU5HSU1QTF9ICisjZGVmaW5lIERPTV9ET01TVFJJTkdJTVBMX0gKIAog
I2luY2x1ZGUgPHFzdHJpbmcuaD4KIAotI2luY2x1ZGUgIm1pc2Mva2h0bWxsYXlvdXQuaCIKICNp
bmNsdWRlICJtaXNjL3NoYXJlZC5oIgogI2luY2x1ZGUgIm1pc2MvbWFpbl90aHJlYWRfbWFsbG9j
LmgiCiAKLSNkZWZpbmUgUVRfQUxMT0NfUUNIQVJfVkVDKCBOICkgc3RhdGljX2Nhc3Q8UUNoYXIq
PihtYWluX3RocmVhZF9tYWxsb2MoIHNpemVvZihRQ2hhcikqKCBOICkgKSkKLSNkZWZpbmUgUVRf
REVMRVRFX1FDSEFSX1ZFQyggUCApIG1haW5fdGhyZWFkX2ZyZWUgKCh2b2lkKikoIFAgKSkKK25h
bWVzcGFjZSBraHRtbCB7CisgICAgc3RydWN0IExlbmd0aDsKK30KIAogbmFtZXNwYWNlIERPTSB7
CiAKK2VudW0gTG93ZXJjYXNlZCB7IGxvd2VyY2FzZWQgfTsKKwogY2xhc3MgRE9NU3RyaW5nSW1w
bCA6IHB1YmxpYyBraHRtbDo6U2hhcmVkPERPTVN0cmluZ0ltcGw+CiB7CiBwcml2YXRlOgpAQCAt
NDMsMTYgKzQ2LDIwIEBAIHByb3RlY3RlZDoKICAgICBET01TdHJpbmdJbXBsKCkgeyBzID0gMCwg
bCA9IDA7IF9oYXNoID0gMDsgX2luVGFibGUgPSBmYWxzZTsgfQogcHVibGljOgogICAgIERPTVN0
cmluZ0ltcGwoY29uc3QgUUNoYXIgKnN0ciwgdW5zaWduZWQgaW50IGxlbik7CisgICAgRE9NU3Ry
aW5nSW1wbChjb25zdCBRQ2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgbGVuLCBMb3dlcmNhc2VkKTsK
ICAgICBET01TdHJpbmdJbXBsKGNvbnN0IGNoYXIgKnN0cik7CiAgICAgRE9NU3RyaW5nSW1wbChj
b25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGludCBsZW4pOworICAgIERPTVN0cmluZ0ltcGwoY29u
c3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgbGVuLCBMb3dlcmNhc2VkKTsKICAgICBET01TdHJp
bmdJbXBsKGNvbnN0IFFDaGFyICZjaCk7CiAgICAgfkRPTVN0cmluZ0ltcGwoKTsKICAgICAKICAg
ICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7CiAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyBp
ZiAoX2hhc2ggPT0gMCkgX2hhc2ggPSBjb21wdXRlSGFzaChzLCBsKTsgcmV0dXJuIF9oYXNoOyB9
Ci0gICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoKGNvbnN0IFFDaGFyICosIGludCBsZW5n
dGgpOworICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBRQ2hhciAqLCB1bnNp
Z25lZCBsZW5ndGgpOwogICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBjaGFy
ICopOworICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlTG93ZXJjYXNlZEhhc2goY29uc3QgUUNo
YXIgKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUxvd2Vy
Y2FzZWRIYXNoKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICAKICAgICB2b2lk
IGFwcGVuZChET01TdHJpbmdJbXBsICpzdHIpOwogICAgIHZvaWQgaW5zZXJ0KERPTVN0cmluZ0lt
cGwgKnN0ciwgdW5zaWduZWQgaW50IHBvcyk7CkBAIC05Nyw1ICsxMDQsNiBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBfaW5UYWJsZTsKIH07CiAKLX07Cit9CisKICNlbmRpZgpJbmRleDoga2h0bWwveG1s
L2RvbV90ZXh0aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwveG1sL2RvbV90ZXh0aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjUKZGlm
ZiAtcCAtdSAtcjEuMjUga2h0bWwveG1sL2RvbV90ZXh0aW1wbC5jcHAKLS0tIGtodG1sL3htbC9k
b21fdGV4dGltcGwuY3BwCTE4IEp1bCAyMDA1IDIxOjQ0OjI5IC0wMDAwCTEuMjUKKysrIGtodG1s
L3htbC9kb21fdGV4dGltcGwuY3BwCTIxIEF1ZyAyMDA1IDE2OjUyOjExIC0wMDAwCkBAIC00NCwx
MyArNDQsMTggQEAgQ2hhcmFjdGVyRGF0YUltcGw6OkNoYXJhY3RlckRhdGFJbXBsKERvYwogQ2hh
cmFjdGVyRGF0YUltcGw6OkNoYXJhY3RlckRhdGFJbXBsKERvY3VtZW50UHRyICpkb2MsIGNvbnN0
IERPTVN0cmluZyAmX3RleHQpCiAgICAgOiBOb2RlSW1wbChkb2MpCiB7Ci0gICAgc3RyID0gX3Rl
eHQuaW1wbCA/IF90ZXh0LmltcGwgOiBuZXcgRE9NU3RyaW5nSW1wbCgoUUNoYXIqKTAsIDApOwot
ICAgIHN0ci0+cmVmKCk7CisgICAgRE9NU3RyaW5nSW1wbCAqaW1wbCA9IF90ZXh0LmltcGwoKTsK
KyAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgbmVjZXNzYXJ5PyBXaHkgY2FuJ3Qgd2UganVzdCBo
YXZlIGEgTlVMTCBzdHI/CisgICAgaWYgKCFpbXBsKQorICAgICAgICBpbXBsID0gbmV3IERPTVN0
cmluZ0ltcGwoKFFDaGFyKikwLCAwKTsKKyAgICBpbXBsLT5yZWYoKTsKKyAgICBzdHIgPSBpbXBs
OwogfQogCiBDaGFyYWN0ZXJEYXRhSW1wbDo6fkNoYXJhY3RlckRhdGFJbXBsKCkKIHsKLSAgICBp
ZihzdHIpIHN0ci0+ZGVyZWYoKTsKKyAgICBpZiAoRE9NU3RyaW5nSW1wbCAqaW1wbCA9IHN0cikK
KyAgICAgICAgaW1wbC0+ZGVyZWYoKTsKIH0KIAogRE9NU3RyaW5nIENoYXJhY3RlckRhdGFJbXBs
OjpkYXRhKCkgY29uc3QKQEAgLTY2LDkgKzcxLDkgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhSW1wbDo6
c2V0RGF0YSggY29uc3QgRAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYoc3RyID09
IF9kYXRhLmltcGwpIHJldHVybjsgLy8gIyMjIGZpcmUgRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVk
IGlmIG1vZGlmaWVkPworICAgIGlmKHN0ciA9PSBfZGF0YS5pbXBsKCkpIHJldHVybjsgLy8gIyMj
IGZpcmUgRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkIGlmIG1vZGlmaWVkPwogICAgIERPTVN0cmlu
Z0ltcGwgKm9sZFN0ciA9IHN0cjsKLSAgICBzdHIgPSBfZGF0YS5pbXBsOworICAgIHN0ciA9IF9k
YXRhLmltcGwoKTsKICAgICBpZihzdHIpIHN0ci0+cmVmKCk7CiAgICAgaWYgKG1fcmVuZGVyKQog
ICAgICAgKHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihtX3JlbmRlcikpLT5zZXRUZXh0KHN0cik7
CkBAIC0xMDcsNyArMTEyLDcgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhSW1wbDo6YXBwZW5kRGF0YSgg
Y29ucwogICAgIERPTVN0cmluZ0ltcGwgKm9sZFN0ciA9IHN0cjsKICAgICBzdHIgPSBzdHItPmNv
cHkoKTsKICAgICBzdHItPnJlZigpOwotICAgIHN0ci0+YXBwZW5kKGFyZy5pbXBsKTsKKyAgICBz
dHItPmFwcGVuZChhcmcuaW1wbCgpKTsKICAgICBpZiAobV9yZW5kZXIpCiAgICAgICAoc3RhdGlj
X2Nhc3Q8UmVuZGVyVGV4dCo+KG1fcmVuZGVyKSktPnNldFRleHRXaXRoT2Zmc2V0KHN0ciwgb2xk
U3RyLT5sLCAwKTsKICAgICAKQEAgLTEyNSw3ICsxMzAsNyBAQCB2b2lkIENoYXJhY3RlckRhdGFJ
bXBsOjppbnNlcnREYXRhKCBjb25zCiAgICAgRE9NU3RyaW5nSW1wbCAqb2xkU3RyID0gc3RyOwog
ICAgIHN0ciA9IHN0ci0+Y29weSgpOwogICAgIHN0ci0+cmVmKCk7Ci0gICAgc3RyLT5pbnNlcnQo
YXJnLmltcGwsIG9mZnNldCk7CisgICAgc3RyLT5pbnNlcnQoYXJnLmltcGwoKSwgb2Zmc2V0KTsK
ICAgICBpZiAobV9yZW5kZXIpCiAgICAgICAoc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG1fcmVu
ZGVyKSktPnNldFRleHRXaXRoT2Zmc2V0KHN0ciwgb2Zmc2V0LCAwKTsKICAgICAKQEAgLTE3Niw3
ICsxODEsNyBAQCB2b2lkIENoYXJhY3RlckRhdGFJbXBsOjpyZXBsYWNlRGF0YSggY29uCiAgICAg
c3RyID0gc3RyLT5jb3B5KCk7CiAgICAgc3RyLT5yZWYoKTsKICAgICBzdHItPnJlbW92ZShvZmZz
ZXQscmVhbENvdW50KTsKLSAgICBzdHItPmluc2VydChhcmcuaW1wbCwgb2Zmc2V0KTsKKyAgICBz
dHItPmluc2VydChhcmcuaW1wbCgpLCBvZmZzZXQpOwogICAgIGlmIChtX3JlbmRlcikKICAgICAg
IChzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obV9yZW5kZXIpKS0+c2V0VGV4dFdpdGhPZmZzZXQo
c3RyLCBvZmZzZXQsIGNvdW50KTsKICAgICAKSW5kZXg6IGtodG1sL3htbC9kb21feG1saW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV94
bWxpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNApkaWZmIC1wIC11IC1yMS4xNCBr
aHRtbC94bWwvZG9tX3htbGltcGwuY3BwCi0tLSBraHRtbC94bWwvZG9tX3htbGltcGwuY3BwCTUg
TWF5IDIwMDUgMDY6MDQ6MDYgLTAwMDAJMS4xNAorKysga2h0bWwveG1sL2RvbV94bWxpbXBsLmNw
cAkyMSBBdWcgMjAwNSAxNjo1MjoxMSAtMDAwMApAQCAtNDgsMjAgKzQ4LDIwIEBAIEVudGl0eUlt
cGw6OkVudGl0eUltcGwoRG9jdW1lbnRQdHIgKmRvYywKICAgICBtX3B1YmxpY0lkID0gMDsKICAg
ICBtX3N5c3RlbUlkID0gMDsKICAgICBtX25vdGF0aW9uTmFtZSA9IDA7Ci0gICAgbV9uYW1lID0g
X25hbWUuaW1wbGVtZW50YXRpb24oKTsKKyAgICBtX25hbWUgPSBfbmFtZS5pbXBsKCk7CiAgICAg
aWYgKG1fbmFtZSkKICAgICAgICAgbV9uYW1lLT5yZWYoKTsKIH0KIAogRW50aXR5SW1wbDo6RW50
aXR5SW1wbChEb2N1bWVudFB0ciAqZG9jLCBET01TdHJpbmcgX3B1YmxpY0lkLCBET01TdHJpbmcg
X3N5c3RlbUlkLCBET01TdHJpbmcgX25vdGF0aW9uTmFtZSkgOiBDb250YWluZXJOb2RlSW1wbChk
b2MpCiB7Ci0gICAgbV9wdWJsaWNJZCA9IF9wdWJsaWNJZC5pbXBsZW1lbnRhdGlvbigpOworICAg
IG1fcHVibGljSWQgPSBfcHVibGljSWQuaW1wbCgpOwogICAgIGlmIChtX3B1YmxpY0lkKQogICAg
ICAgICBtX3B1YmxpY0lkLT5yZWYoKTsKLSAgICBtX3N5c3RlbUlkID0gX3N5c3RlbUlkLmltcGxl
bWVudGF0aW9uKCk7CisgICAgbV9zeXN0ZW1JZCA9IF9zeXN0ZW1JZC5pbXBsKCk7CiAgICAgaWYg
KG1fc3lzdGVtSWQpCiAgICAgICAgIG1fc3lzdGVtSWQtPnJlZigpOwotICAgIG1fbm90YXRpb25O
YW1lID0gX25vdGF0aW9uTmFtZS5pbXBsZW1lbnRhdGlvbigpOworICAgIG1fbm90YXRpb25OYW1l
ID0gX25vdGF0aW9uTmFtZS5pbXBsKCk7CiAgICAgaWYgKG1fbm90YXRpb25OYW1lKQogICAgICAg
ICBtX25vdGF0aW9uTmFtZS0+cmVmKCk7CiAgICAgbV9uYW1lID0gMDsKQEAgLTIzOCwxMyArMjM4
LDEzIEBAIE5vdGF0aW9uSW1wbDo6Tm90YXRpb25JbXBsKERvY3VtZW50UHRyICoKIAogTm90YXRp
b25JbXBsOjpOb3RhdGlvbkltcGwoRG9jdW1lbnRQdHIgKmRvYywgRE9NU3RyaW5nIF9uYW1lLCBE
T01TdHJpbmcgX3B1YmxpY0lkLCBET01TdHJpbmcgX3N5c3RlbUlkKSA6IENvbnRhaW5lck5vZGVJ
bXBsKGRvYykKIHsKLSAgICBtX25hbWUgPSBfbmFtZS5pbXBsZW1lbnRhdGlvbigpOworICAgIG1f
bmFtZSA9IF9uYW1lLmltcGwoKTsKICAgICBpZiAobV9uYW1lKQogICAgICAgICBtX25hbWUtPnJl
ZigpOwotICAgIG1fcHVibGljSWQgPSBfcHVibGljSWQuaW1wbGVtZW50YXRpb24oKTsKKyAgICBt
X3B1YmxpY0lkID0gX3B1YmxpY0lkLmltcGwoKTsKICAgICBpZiAobV9wdWJsaWNJZCkKICAgICAg
ICAgbV9wdWJsaWNJZC0+cmVmKCk7Ci0gICAgbV9zeXN0ZW1JZCA9IF9zeXN0ZW1JZC5pbXBsZW1l
bnRhdGlvbigpOworICAgIG1fc3lzdGVtSWQgPSBfc3lzdGVtSWQuaW1wbCgpOwogICAgIGlmICht
X3N5c3RlbUlkKQogICAgICAgICBtX3N5c3RlbUlkLT5yZWYoKTsKIH0KQEAgLTMxMiwxMCArMzEy
LDEwIEBAIFByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGw6OlByb2Nlc3NpbmdJbnMKIAogUHJvY2Vz
c2luZ0luc3RydWN0aW9uSW1wbDo6UHJvY2Vzc2luZ0luc3RydWN0aW9uSW1wbChEb2N1bWVudFB0
ciAqZG9jLCBET01TdHJpbmcgX3RhcmdldCwgRE9NU3RyaW5nIF9kYXRhKSA6IENvbnRhaW5lck5v
ZGVJbXBsKGRvYykKIHsKLSAgICBtX3RhcmdldCA9IF90YXJnZXQuaW1wbGVtZW50YXRpb24oKTsK
KyAgICBtX3RhcmdldCA9IF90YXJnZXQuaW1wbCgpOwogICAgIGlmIChtX3RhcmdldCkKICAgICAg
ICAgbV90YXJnZXQtPnJlZigpOwotICAgIG1fZGF0YSA9IF9kYXRhLmltcGxlbWVudGF0aW9uKCk7
CisgICAgbV9kYXRhID0gX2RhdGEuaW1wbCgpOwogICAgIGlmIChtX2RhdGEpCiAgICAgICAgIG1f
ZGF0YS0+cmVmKCk7CiAgICAgbV9zaGVldCA9IDA7CkBAIC0zNTgsNyArMzU4LDcgQEAgdm9pZCBQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb25JbXBsOjpzZXREYXRhKAogCiAgICAgaWYgKG1fZGF0YSkKICAg
ICAgICAgbV9kYXRhLT5kZXJlZigpOwotICAgIG1fZGF0YSA9IF9kYXRhLmltcGxlbWVudGF0aW9u
KCk7CisgICAgbV9kYXRhID0gX2RhdGEuaW1wbCgpOwogICAgIGlmIChtX2RhdGEpCiAgICAgICAg
IG1fZGF0YS0+cmVmKCk7CiB9CkBAIC00NDQsNyArNDQ0LDcgQEAgYm9vbCBQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb25JbXBsOjpjaGVja1N0eQogICAgICAgICAgICAgICAgIERPTVN0cmluZyBuZXdMb2Nh
bEhyZWYgPSBocmVmLm1pZCgxKTsKICAgICAgICAgICAgICAgICBpZiAobV9sb2NhbEhyZWYpCiAg
ICAgICAgICAgICAgICAgICAgIG1fbG9jYWxIcmVmLT5kZXJlZigpOwotICAgICAgICAgICAgICAg
IG1fbG9jYWxIcmVmID0gbmV3TG9jYWxIcmVmLmltcGxlbWVudGF0aW9uKCk7CisgICAgICAgICAg
ICAgICAgbV9sb2NhbEhyZWYgPSBuZXdMb2NhbEhyZWYuaW1wbCgpOwogICAgICAgICAgICAgICAg
IGlmIChtX2xvY2FsSHJlZikKICAgICAgICAgICAgICAgICAgICAgbV9sb2NhbEhyZWYtPnJlZigp
OwogI2lmZGVmIEtIVE1MX1hTTFQKSW5kZXg6IGtodG1sL3htbC94bWxfdG9rZW5pemVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwveG1sX3Rva2Vu
aXplci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzcKZGlmZiAtcCAtdSAtcjEuMzcga2h0
bWwveG1sL3htbF90b2tlbml6ZXIuY3BwCi0tLSBraHRtbC94bWwveG1sX3Rva2VuaXplci5jcHAJ
MTkgQXVnIDIwMDUgMTY6Mjc6MDEgLTAwMDAJMS4zNworKysga2h0bWwveG1sL3htbF90b2tlbml6
ZXIuY3BwCTIxIEF1ZyAyMDA1IDE2OjUyOjEyIC0wMDAwCkBAIC0zMzYsNyArMzM2LDcgQEAgdm9p
ZCBYTUxUb2tlbml6ZXI6OnN0YXJ0RWxlbWVudChjb25zdCB4bQogICAgICAgICBET01TdHJpbmcg
cW4oYXR0cy5xTmFtZShpKSk7CiAgICAgICAgIERPTVN0cmluZyB2YWwoYXR0cy52YWx1ZShpKSk7
CiAgICAgICAgIAotICAgICAgICBuZXdFbGVtZW50LT5zZXRBdHRyaWJ1dGVOUyh1cmkuaW1wbGVt
ZW50YXRpb24oKSwgcW4uaW1wbGVtZW50YXRpb24oKSwgdmFsLmltcGxlbWVudGF0aW9uKCksIGV4
Y2VwdGlvbmNvZGUpOworICAgICAgICBuZXdFbGVtZW50LT5zZXRBdHRyaWJ1dGVOUyh1cmkuaW1w
bCgpLCBxbi5pbXBsKCksIHZhbC5pbXBsKCksIGV4Y2VwdGlvbmNvZGUpOwogICAgICAgICBpZiAo
ZXhjZXB0aW9uY29kZSkgLy8gZXhjZXB0aW9uIHNldHRpbmcgYXR0cmlidXRlcwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IGtodG1sL3hzbC94c2x0X3Byb2Nlc3NvcmltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3hzbC94c2x0X3By
b2Nlc3NvcmltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtcCAtdSAtcjEu
NiBraHRtbC94c2wveHNsdF9wcm9jZXNzb3JpbXBsLmNwcAotLS0ga2h0bWwveHNsL3hzbHRfcHJv
Y2Vzc29yaW1wbC5jcHAJMzAgSnVuIDIwMDUgMDU6NTc6MTcgLTAwMDAJMS42CisrKyBraHRtbC94
c2wveHNsdF9wcm9jZXNzb3JpbXBsLmNwcAkyMSBBdWcgMjAwNSAxNjo1MjoxMiAtMDAwMApAQCAt
MTcxLDkgKzE3MSw5IEBAIERvY3VtZW50SW1wbCAqWFNMVFByb2Nlc3NvckltcGw6OmRvY3VtZW4K
ICAgICAgICAgaWYgKG1ldGhvZCA9PSBOVUxMICYmIHJlc3VsdERvYy0+dHlwZSA9PSBYTUxfSFRN
TF9ET0NVTUVOVF9OT0RFKQogICAgICAgICAgICAgbWV0aG9kID0gKGNvbnN0IHhtbENoYXIgKiki
aHRtbCI7CiAgICAgICAgIGlmICh4bWxTdHJFcXVhbChtZXRob2QsIChjb25zdCB4bWxDaGFyICop
Imh0bWwiKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IG1fc291cmNlRG9jdW1lbnQtPmltcGxlbWVu
dGF0aW9uKCktPmNyZWF0ZUhUTUxEb2N1bWVudCh2aWV3KTsKKyAgICAgICAgICAgIHJlc3VsdCA9
IG1fc291cmNlRG9jdW1lbnQtPmltcGwoKS0+Y3JlYXRlSFRNTERvY3VtZW50KHZpZXcpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBtX3NvdXJjZURvY3VtZW50LT5pbXBsZW1l
bnRhdGlvbigpLT5jcmVhdGVEb2N1bWVudCh2aWV3KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1f
c291cmNlRG9jdW1lbnQtPmltcGwoKS0+Y3JlYXRlRG9jdW1lbnQodmlldyk7CiAgICAgICAgIHJl
c3VsdC0+YXR0YWNoKCk7CiAgICAgICAgIHJlc3VsdC0+c2V0VVJMKG1fc291cmNlRG9jdW1lbnQt
PlVSTCgpKTsKICAgICAgICAgcmVzdWx0LT5zZXRCYXNlVVJMKG1fc291cmNlRG9jdW1lbnQtPmJh
c2VVUkwoKSk7CkluZGV4OiBrd3EvRE9NLUNTUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9rd3EvRE9NLUNTUy5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMwpk
aWZmIC1wIC11IC1yMS4yMyBrd3EvRE9NLUNTUy5tbQotLS0ga3dxL0RPTS1DU1MubW0JMTQgSnVs
IDIwMDUgMDI6MjI6MTEgLTAwMDAJMS4yMworKysga3dxL0RPTS1DU1MubW0JMjEgQXVnIDIwMDUg
MTY6NTI6MTMgLTAwMDAKQEAgLTI1NDgsNyArMjU0OCw3IEBAIHZvaWQgcmVtb3ZlV3JhcHBlckZv
clJHQihRUmdiIHZhbHVlKQogLSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKWdldENvbXB1dGVk
U3R5bGU6KERPTUVsZW1lbnQgKillbHQgOihOU1N0cmluZyAqKXBzZXVkb0VsdAogewogICAgIHJl
dHVybiBbRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiBfc3R5bGVEZWNsYXJhdGlvbldpdGhJbXBsOgot
ICAgICAgICBBYnN0cmFjdFZpZXdJbXBsKFtzZWxmIF9kb2N1bWVudEltcGxdKS5nZXRDb21wdXRl
ZFN0eWxlKFtlbHQgX2VsZW1lbnRJbXBsXSwgRE9NU3RyaW5nKHBzZXVkb0VsdCkuaW1wbGVtZW50
YXRpb24oKSldOworICAgICAgICBBYnN0cmFjdFZpZXdJbXBsKFtzZWxmIF9kb2N1bWVudEltcGxd
KS5nZXRDb21wdXRlZFN0eWxlKFtlbHQgX2VsZW1lbnRJbXBsXSwgRE9NU3RyaW5nKHBzZXVkb0Vs
dCkuaW1wbCgpKV07CiB9CiAKIEBlbmQKSW5kZXg6IGt3cS9ET00ubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0RPTS5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS40MApkaWZmIC1wIC11IC1yMS40MCBrd3EvRE9NLm1tCi0tLSBrd3EvRE9NLm1tCTQgQXVnIDIw
MDUgMjI6MjM6MDAgLTAwMDAJMS40MAorKysga3dxL0RPTS5tbQkyMSBBdWcgMjAwNSAxNjo1Mjox
NCAtMDAwMApAQCAtMzM5LDcgKzMzOSw3IEBAIHVzaW5nIGtodG1sOjpTaGFyZWRQdHI7CiAKICAg
ICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7CiAgICAgRE9NU3RyaW5nIHByZWZpeFN0cihwcmVmaXgp
OwotICAgIFtzZWxmIF9ub2RlSW1wbF0tPnNldFByZWZpeChwcmVmaXhTdHIuaW1wbGVtZW50YXRp
b24oKSwgZXhjZXB0aW9uQ29kZSk7CisgICAgW3NlbGYgX25vZGVJbXBsXS0+c2V0UHJlZml4KHBy
ZWZpeFN0ci5pbXBsKCksIGV4Y2VwdGlvbkNvZGUpOwogICAgIHJhaXNlT25ET01FcnJvcihleGNl
cHRpb25Db2RlKTsKIH0KIApAQCAtOTE1LDcgKzkxNSw3IEBAIHVzaW5nIGtodG1sOjpTaGFyZWRQ
dHI7CiAKIC0gKERPTUltcGxlbWVudGF0aW9uICopaW1wbGVtZW50YXRpb24KIHsKLSAgICByZXR1
cm4gW0RPTUltcGxlbWVudGF0aW9uIF9ET01JbXBsZW1lbnRhdGlvbldpdGhJbXBsOltzZWxmIF9k
b2N1bWVudEltcGxdLT5pbXBsZW1lbnRhdGlvbigpXTsKKyAgICByZXR1cm4gW0RPTUltcGxlbWVu
dGF0aW9uIF9ET01JbXBsZW1lbnRhdGlvbldpdGhJbXBsOltzZWxmIF9kb2N1bWVudEltcGxdLT5p
bXBsKCldOwogfQogCiAtIChET01FbGVtZW50ICopZG9jdW1lbnRFbGVtZW50CkBAIC0xMDU2LDE0
ICsxMDU2LDE0IEBAIHVzaW5nIGtodG1sOjpTaGFyZWRQdHI7CiB7CiAgICAgRWxlbWVudEltcGwg
KmVsZW1lbnRJbXBsID0gW2VsdCBfZWxlbWVudEltcGxdOwogICAgIERPTVN0cmluZyBwc2V1ZG9F
bHRTdHJpbmcocHNldWRvRWx0KTsKLSAgICByZXR1cm4gW0RPTUNTU1N0eWxlRGVjbGFyYXRpb24g
X3N0eWxlRGVjbGFyYXRpb25XaXRoSW1wbDpbc2VsZiBfZG9jdW1lbnRJbXBsXS0+ZGVmYXVsdFZp
ZXcoKS0+Z2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50SW1wbCwgcHNldWRvRWx0U3RyaW5nLmltcGxl
bWVudGF0aW9uKCkpXTsKKyAgICByZXR1cm4gW0RPTUNTU1N0eWxlRGVjbGFyYXRpb24gX3N0eWxl
RGVjbGFyYXRpb25XaXRoSW1wbDpbc2VsZiBfZG9jdW1lbnRJbXBsXS0+ZGVmYXVsdFZpZXcoKS0+
Z2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50SW1wbCwgcHNldWRvRWx0U3RyaW5nLmltcGwoKSldOwog
fQogCiAtIChET01DU1NTdHlsZURlY2xhcmF0aW9uICopZ2V0T3ZlcnJpZGVTdHlsZTooRE9NRWxl
bWVudCAqKWVsdCA6KE5TU3RyaW5nICopcHNldWRvRWx0CiB7CiAgICAgRWxlbWVudEltcGwgKmVs
ZW1lbnRJbXBsID0gW2VsdCBfZWxlbWVudEltcGxdOwogICAgIERPTVN0cmluZyBwc2V1ZG9FbHRT
dHJpbmcocHNldWRvRWx0KTsKLSAgICByZXR1cm4gW0RPTUNTU1N0eWxlRGVjbGFyYXRpb24gX3N0
eWxlRGVjbGFyYXRpb25XaXRoSW1wbDpbc2VsZiBfZG9jdW1lbnRJbXBsXS0+Z2V0T3ZlcnJpZGVT
dHlsZShlbGVtZW50SW1wbCwgcHNldWRvRWx0U3RyaW5nLmltcGxlbWVudGF0aW9uKCkpXTsKKyAg
ICByZXR1cm4gW0RPTUNTU1N0eWxlRGVjbGFyYXRpb24gX3N0eWxlRGVjbGFyYXRpb25XaXRoSW1w
bDpbc2VsZiBfZG9jdW1lbnRJbXBsXS0+Z2V0T3ZlcnJpZGVTdHlsZShlbGVtZW50SW1wbCwgcHNl
dWRvRWx0U3RyaW5nLmltcGwoKSldOwogfQogCiBAZW5kCkluZGV4OiBrd3EvRE9NSFRNTC5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvRE9NSFRNTC5tbSx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4yNgpkaWZmIC1wIC11IC1yMS4yNiBrd3EvRE9NSFRNTC5tbQot
LS0ga3dxL0RPTUhUTUwubW0JMTQgQXVnIDIwMDUgMDg6MDc6MjMgLTAwMDAJMS4yNgorKysga3dx
L0RPTUhUTUwubW0JMjEgQXVnIDIwMDUgMTY6NTI6MTggLTAwMDAKQEAgLTEwNTYsNyArMTA1Niw3
IEBAIHVzaW5nIERPTTo6Tm9kZUltcGw7CiAtICh2b2lkKXNldFZhbHVlOihOU1N0cmluZyAqKXZh
bHVlCiB7CiAgICAgRE9NU3RyaW5nIHModmFsdWUpOwotICAgIFtzZWxmIF9zZWxlY3RFbGVtZW50
SW1wbF0tPnNldFZhbHVlKHMuaW1wbGVtZW50YXRpb24oKSk7CisgICAgW3NlbGYgX3NlbGVjdEVs
ZW1lbnRJbXBsXS0+c2V0VmFsdWUocy5pbXBsKCkpOwogfQogCiAtIChsb25nKWxlbmd0aApAQCAt
MTI1NCw3ICsxMjU0LDcgQEAgdXNpbmcgRE9NOjpOb2RlSW1wbDsKIC0gKHZvaWQpc2V0VmFsdWU6
KE5TU3RyaW5nICopdmFsdWUKIHsKICAgICBET01TdHJpbmcgc3RyaW5nID0gdmFsdWU7Ci0gICAg
W3NlbGYgX29wdGlvbkVsZW1lbnRJbXBsXS0+c2V0VmFsdWUoc3RyaW5nLmltcGxlbWVudGF0aW9u
KCkpOworICAgIFtzZWxmIF9vcHRpb25FbGVtZW50SW1wbF0tPnNldFZhbHVlKHN0cmluZy5pbXBs
KCkpOwogfQogCiBAZW5kCkluZGV4OiBrd3EvRE9NSW50ZXJuYWwubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0RPTUludGVybmFsLm1tLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjcKZGlmZiAtcCAtdSAtcjEuNyBrd3EvRE9NSW50ZXJuYWwubW0KLS0tIGt3cS9E
T01JbnRlcm5hbC5tbQk5IEF1ZyAyMDA1IDIxOjI5OjQyIC0wMDAwCTEuNworKysga3dxL0RPTUlu
dGVybmFsLm1tCTIxIEF1ZyAyMDA1IDE2OjUyOjE4IC0wMDAwCkBAIC0xMjgsNiArMTI4LDcgQEAg
RE9NU3RyaW5nOjpET01TdHJpbmcoTlNTdHJpbmcgKnN0cikKICAgICBBU1NFUlQoc3RyKTsKIAog
ICAgIENGSW5kZXggc2l6ZSA9IENGU3RyaW5nR2V0TGVuZ3RoKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZT
dHJpbmdSZWY+KHN0cikpOworICAgIERPTVN0cmluZ0ltcGwgKmltcGw7CiAgICAgaWYgKHNpemUg
PT0gMCkKICAgICAgICAgaW1wbCA9IERPTVN0cmluZ0ltcGw6OmVtcHR5KCk7CiAgICAgZWxzZSB7
CkBAIC0xNDUsNiArMTQ2LDcgQEAgRE9NU3RyaW5nOjpET01TdHJpbmcoTlNTdHJpbmcgKnN0cikK
ICAgICAgICAgfQogICAgIH0KICAgICBpbXBsLT5yZWYoKTsKKyAgICBtX2ltcGwgPSBpbXBsOwog
fQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDoga3dxL0tXUUZv
bnRGYW1pbHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tX
UUZvbnRGYW1pbHkubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC1wIC11IC1yMS40
IGt3cS9LV1FGb250RmFtaWx5Lm1tCi0tLSBrd3EvS1dRRm9udEZhbWlseS5tbQk0IERlYyAyMDA0
IDIyOjMxOjExIC0wMDAwCTEuNAorKysga3dxL0tXUUZvbnRGYW1pbHkubW0JMjEgQXVnIDIwMDUg
MTY6NTI6MjAgLTAwMDAKQEAgLTgyLDEwICs4MiwxMCBAQCBOU1N0cmluZyAqS1dRRm9udEZhbWls
eTo6Z2V0TlNGYW1pbHkoKSBjCiAgICAgICAgICAgICBzdGF0aWMgQ0ZNdXRhYmxlRGljdGlvbmFy
eVJlZiBmYW1pbGllczsKICAgICAgICAgICAgIGlmIChmYW1pbGllcyA9PSBOVUxMKQogICAgICAg
ICAgICAgICAgIGZhbWlsaWVzID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShOVUxMLCAwLCAm
Q0ZEaWN0aW9uYXJ5RmFtaWx5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNh
bGxCYWNrcyk7Ci0gICAgICAgICAgICBfTlNGYW1pbHkgPSAoTlNTdHJpbmcgKilDRkRpY3Rpb25h
cnlHZXRWYWx1ZShmYW1pbGllcywgX2ZhbWlseS5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICAgICAg
ICAgIF9OU0ZhbWlseSA9IChOU1N0cmluZyAqKUNGRGljdGlvbmFyeUdldFZhbHVlKGZhbWlsaWVz
LCBfZmFtaWx5LmltcGwoKSk7CiAgICAgICAgICAgICBpZiAoIV9OU0ZhbWlseSkgewogICAgICAg
ICAgICAgICAgIF9OU0ZhbWlseSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFjdGVyczooY29u
c3QgdW5pY2hhciAqKV9mYW1pbHkudW5pY29kZSgpIGxlbmd0aDpfZmFtaWx5Lmxlbmd0aCgpXTsK
LSAgICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShmYW1pbGllcywgX2ZhbWlseS5p
bXBsZW1lbnRhdGlvbigpLCBfTlNGYW1pbHkpOworICAgICAgICAgICAgICAgIENGRGljdGlvbmFy
eVNldFZhbHVlKGZhbWlsaWVzLCBfZmFtaWx5LmltcGwoKSwgX05TRmFtaWx5KTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KSW5kZXg6IGt3cS9LV1FLSFRNTFBhcnQubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5tbSx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS42NjEKZGlmZiAtcCAtdSAtcjEuNjYxIGt3cS9LV1FLSFRNTFBh
cnQubW0KLS0tIGt3cS9LV1FLSFRNTFBhcnQubW0JMTcgQXVnIDIwMDUgMjA6MTI6MTUgLTAwMDAJ
MS42NjEKKysrIGt3cS9LV1FLSFRNTFBhcnQubW0JMjEgQXVnIDIwMDUgMTY6NTI6MjMgLTAwMDAK
QEAgLTM0NzYsNyArMzQ3Niw3IEBAIFJlbmRlclN0eWxlICpLV1FLSFRNTFBhcnQ6OnN0eWxlRm9y
U2VsZWMKIAogICAgIHN0eWxlRWxlbWVudC0+cmVmKCk7CiAKLSAgICBzdHlsZUVsZW1lbnQtPnNl
dEF0dHJpYnV0ZShzdHlsZUF0dHIsIGQtPm1fdHlwaW5nU3R5bGUtPmNzc1RleHQoKS5pbXBsZW1l
bnRhdGlvbigpLCBleGNlcHRpb25Db2RlKTsKKyAgICBzdHlsZUVsZW1lbnQtPnNldEF0dHJpYnV0
ZShzdHlsZUF0dHIsIGQtPm1fdHlwaW5nU3R5bGUtPmNzc1RleHQoKS5pbXBsKCksIGV4Y2VwdGlv
bkNvZGUpOwogICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogICAgIAogICAgIFRleHRJ
bXBsICp0ZXh0ID0geG1sRG9jSW1wbCgpLT5jcmVhdGVFZGl0aW5nVGV4dE5vZGUoIiIpOwpJbmRl
eDoga3dxL0tXUVBhaW50ZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva3dxL0tXUVBhaW50ZXIubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMxCmRpZmYgLXAg
LXUgLXIxLjEzMSBrd3EvS1dRUGFpbnRlci5tbQotLS0ga3dxL0tXUVBhaW50ZXIubW0JMTUgQXVn
IDIwMDUgMDI6NTc6MjcgLTAwMDAJMS4xMzEKKysrIGt3cS9LV1FQYWludGVyLm1tCTIxIEF1ZyAy
MDA1IDE2OjUyOjI0IC0wMDAwCkBAIC00NzAsMTQgKzQ3MCwxNCBAQCB2b2lkIFFQYWludGVyOjpz
ZXRDb21wb3NpdGVPcGVyYXRpb24gKENHCiAgICAgW1tXZWJDb3JlSW1hZ2VSZW5kZXJlckZhY3Rv
cnkgc2hhcmVkRmFjdG9yeV0gc2V0Q0dDb21wb3NpdGVPcGVyYXRpb246b3AgaW5Db250ZXh0OmNv
bnRleHRdOwogfQogCi1pbnQgUVBhaW50ZXI6OmNvbXBvc2l0ZU9wZXJhdG9yRnJvbVN0cmluZyAo
UVN0cmluZyBhU3RyaW5nKQoraW50IFFQYWludGVyOjpjb21wb3NpdGVPcGVyYXRvckZyb21TdHJp
bmcoUVN0cmluZyBhU3RyaW5nKQogewogICAgIE5TQ29tcG9zaXRpbmdPcGVyYXRpb24gb3AgPSBO
U0NvbXBvc2l0ZVNvdXJjZU92ZXI7CiAgICAgCiAgICAgaWYgKGFTdHJpbmcubGVuZ3RoKCkpIHsK
ICAgICAgICAgY29uc3QgY2hhciAqb3BlcmF0b3JTdHJpbmcgPSBhU3RyaW5nLmFzY2lpKCk7CiAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX0NPTVBPU0lURV9PUEVSQVRPUlM7IGkrKykg
ewotICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAgKG9wZXJhdG9yU3RyaW5nLCBjb21wb3NpdGVP
cGVyYXRvcnNbaV0ubmFtZSkgPT0gMCkgeworICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAob3Bl
cmF0b3JTdHJpbmcsIGNvbXBvc2l0ZU9wZXJhdG9yc1tpXS5uYW1lKSA9PSAwKSB7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZU9wZXJhdG9yc1tpXS52YWx1ZTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3769</attachid>
            <date>2005-09-05 10:59:58 -0700</date>
            <delta_ts>2005-09-05 11:04:16 -0700</delta_ts>
            <desc>new patch, updated for today&apos;s TOT</desc>
            <filename>StringPatch2.txt</filename>
            <type>text/plain</type>
            <size>98194</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2todG1sX3BhcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2todG1sX3BhcnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMz
OQpkaWZmIC1wIC11IC1yMS4zMzkga2h0bWwva2h0bWxfcGFydC5jcHAKLS0tIGtodG1sL2todG1s
X3BhcnQuY3BwCTEgU2VwIDIwMDUgMTg6MDM6MzEgLTAwMDAJMS4zMzkKKysrIGtodG1sL2todG1s
X3BhcnQuY3BwCTUgU2VwIDIwMDUgMTc6NTk6MTkgLTAwMDAKQEAgLTU2NDgsNyArNTY0OCw3IEBA
IHN0YXRpYyB2b2lkIHVwZGF0ZVN0YXRlKENTU011dGFibGVTdHlsZUQKICAgICAgICAgaW50IHBy
b3BlcnR5SUQgPSAoKml0KS5pZCgpOwogICAgICAgICBET01TdHJpbmcgZGVzaXJlZFByb3BlcnR5
ID0gZGVzaXJlZFN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOwogICAgICAgICBE
T01TdHJpbmcgY29tcHV0ZWRQcm9wZXJ0eSA9IGNvbXB1dGVkU3R5bGUtPmdldFByb3BlcnR5VmFs
dWUocHJvcGVydHlJRCk7Ci0gICAgICAgIEtIVE1MUGFydDo6VHJpU3RhdGUgcHJvcGVydHlTdGF0
ZSA9IHN0cmNhc2VjbXAoZGVzaXJlZFByb3BlcnR5LCBjb21wdXRlZFByb3BlcnR5KSA9PSAwCisg
ICAgICAgIEtIVE1MUGFydDo6VHJpU3RhdGUgcHJvcGVydHlTdGF0ZSA9IGVxdWFsc0lnbm9yaW5n
Q2FzZShkZXNpcmVkUHJvcGVydHksIGNvbXB1dGVkUHJvcGVydHkpCiAgICAgICAgICAgICA/IEtI
VE1MUGFydDo6dHJ1ZVRyaVN0YXRlIDogS0hUTUxQYXJ0OjpmYWxzZVRyaVN0YXRlOwogICAgICAg
ICBpZiAoYXRTdGFydCkgewogICAgICAgICAgICAgc3RhdGUgPSBwcm9wZXJ0eVN0YXRlOwpAQCAt
NTcxNyw3ICs1NzE3LDcgQEAgYm9vbCBLSFRNTFBhcnQ6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUo
QwogICAgICAgICBpbnQgcHJvcGVydHlJRCA9ICgqaXQpLmlkKCk7CiAgICAgICAgIERPTVN0cmlu
ZyBkZXNpcmVkUHJvcGVydHkgPSBtdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5VmFsdWUocHJvcGVy
dHlJRCk7CiAgICAgICAgIERPTVN0cmluZyBzZWxlY3Rpb25Qcm9wZXJ0eSA9IHNlbGVjdGlvblN0
eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOwotICAgICAgICBpZiAoc3RyY2FzZWNt
cChzZWxlY3Rpb25Qcm9wZXJ0eSwgZGVzaXJlZFByb3BlcnR5KSAhPSAwKSB7CisgICAgICAgIGlm
IChlcXVhbHNJZ25vcmluZ0Nhc2Uoc2VsZWN0aW9uUHJvcGVydHksIGRlc2lyZWRQcm9wZXJ0eSkp
IHsKICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQpJbmRleDoga2h0bWwvY3NzL2Nzc3BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NwYXJzZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4zMgpkaWZmIC1wIC11IC1yMS4zMiBraHRtbC9jc3MvY3NzcGFyc2VyLmgKLS0tIGtodG1s
L2Nzcy9jc3NwYXJzZXIuaAkyNyBBdWcgMjAwNSAwMDoxNDoxOCAtMDAwMAkxLjMyCisrKyBraHRt
bC9jc3MvY3NzcGFyc2VyLmgJNSBTZXAgMjAwNSAxNzo1OToyMSAtMDAwMApAQCAtNzYsOSArNzYs
MTAgQEAgbmFtZXNwYWNlIERPTSB7CiAgICAgc3RhdGljIGlubGluZSBET01TdHJpbmcgZG9tU3Ry
aW5nKCBjb25zdCBQYXJzZVN0cmluZyAmcHMgKSB7CiAJcmV0dXJuIERPTVN0cmluZyggKFFDaGFy
ICopcHMuc3RyaW5nLCBwcy5sZW5ndGggKTsKICAgICB9Ci0gICAgc3RhdGljIGlubGluZSBBdG9t
aWNTdHJpbmcgYXRvbWljU3RyaW5nKCBjb25zdCBQYXJzZVN0cmluZyAmcHMgKSB7Ci0JcmV0dXJu
IEF0b21pY1N0cmluZyggcHMuc3RyaW5nLCBwcy5sZW5ndGggKTsKLSAgICB9CisgICAgc3RhdGlj
IGlubGluZSBBdG9taWNTdHJpbmcgYXRvbWljU3RyaW5nKGNvbnN0IFBhcnNlU3RyaW5nICZwcykK
KyAgICAgICAgeyByZXR1cm4gQXRvbWljU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8UUNoYXIgKj4o
cHMuc3RyaW5nKSwgcHMubGVuZ3RoKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgQXRvbWljU3RyaW5n
IGxvd2VyY2FzZWRBdG9taWNTdHJpbmcoY29uc3QgUGFyc2VTdHJpbmcgJnBzKQorICAgICAgICB7
IHJldHVybiBBdG9taWNTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxRQ2hhciAqPihwcy5zdHJpbmcp
LCBwcy5sZW5ndGgsIGxvd2VyY2FzZWQpOyB9CiAgICAgCiAgICAgY2xhc3MgVmFsdWVMaXN0IHsK
ICAgICBwdWJsaWM6CkluZGV4OiBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0
b3IuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIwMwpkaWZmIC1wIC11IC1yMS4yMDMga2h0
bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCi0tLSBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rv
ci5jcHAJMzAgQXVnIDIwMDUgMjE6MzY6MjMgLTAwMDAJMS4yMDMKKysrIGtodG1sL2Nzcy9jc3Nz
dHlsZXNlbGVjdG9yLmNwcAk1IFNlcCAyMDA1IDE3OjU5OjI0IC0wMDAwCkBAIC0zMzIsMTQgKzMz
MiwxMCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoQ1NTUnVsCiAgICAgLy8g
V2UgbmVlZCB0byBjb2xsZWN0IHRoZSBydWxlcyBmb3IgaWQsIGNsYXNzLCB0YWcsIGFuZCBldmVy
eXRoaW5nIGVsc2UgaW50byBhIGJ1ZmZlciBhbmQKICAgICAvLyB0aGVuIHNvcnQgdGhlIGJ1ZmZl
ci4KICAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSkKLSAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3Qo
cnVsZXMtPmdldElEUnVsZXMoZWxlbWVudC0+Z2V0SURBdHRyaWJ1dGUoKS5pbXBsKCkpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7Ci0g
ICAgaWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkpIHsKLSAgICAgICAgZm9yIChjb25zdCBBdG9taWNT
dHJpbmdMaXN0KiBzaW5nbGVDbGFzcyA9IGVsZW1lbnQtPmdldENsYXNzTGlzdCgpOwotICAgICAg
ICAgICAgIHNpbmdsZUNsYXNzOyBzaW5nbGVDbGFzcyA9IHNpbmdsZUNsYXNzLT5uZXh0KCkpCi0g
ICAgICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0Q2xhc3NSdWxlcyhzaW5nbGVD
bGFzcy0+cXN0cmluZygpLmltcGwoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7Ci0gICAg
fQorICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0SURSdWxlcyhlbGVtZW50LT5n
ZXRJREF0dHJpYnV0ZSgpLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsK
KyAgICBpZiAoZWxlbWVudC0+aGFzQ2xhc3MoKSkKKyAgICAgICAgZm9yIChjb25zdCBBdG9taWNT
dHJpbmdMaXN0KiBzaW5nbGVDbGFzcyA9IGVsZW1lbnQtPmdldENsYXNzTGlzdCgpOyBzaW5nbGVD
bGFzczsgc2luZ2xlQ2xhc3MgPSBzaW5nbGVDbGFzcy0+bmV4dCgpKQorICAgICAgICAgICAgbWF0
Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldENsYXNzUnVsZXMoc2luZ2xlQ2xhc3MtPnN0cmluZygp
LmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKICAgICBtYXRjaFJ1bGVz
Rm9yTGlzdChydWxlcy0+Z2V0VGFnUnVsZXMoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwK
ICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7CiAg
ICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldFVuaXZlcnNhbFJ1bGVzKCksIGZpcnN0UnVs
ZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKQEAgLTU1NSw3ICs1NTEsNyBAQCBzdGF0aWMgdm9pZCBj
aGVja1BzZXVkb1N0YXRlKCBFbGVtZW50SW1wCiAgICAgfQogICAgIAogICAgIFFDb25zdFN0cmlu
ZyBjdShhdHRyLnVuaWNvZGUoKSwgYXR0ci5sZW5ndGgoKSk7Ci0gICAgUVN0cmluZyB1ID0gY3Uu
cXN0cmluZygpOworICAgIFFTdHJpbmcgdSA9IGN1LnN0cmluZygpOwogICAgIGlmICggIXUuY29u
dGFpbnMoIjovLyIpICkgewogICAgICAgICBpZiAoIHVbMF0gPT0gJy8nICkKICAgICAgICAgICAg
IHUucHJlcGVuZChjdXJyZW50RW5jb2RlZFVSTC0+aG9zdCk7CkBAIC0xMTE2LDcgKzExMTIsNyBA
QCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgICAgICAgICBp
ZiAoIWUtPmhhc0NsYXNzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgZm9yIChjb25zdCBBdG9taWNTdHJpbmdMaXN0KiBjID0gZS0+Z2V0Q2xhc3NMaXN0KCk7
IGM7IGMgPSBjLT5uZXh0KCkpCi0gICAgICAgICAgICAgICAgaWYgKGMtPnFzdHJpbmcoKSA9PSBz
ZWwtPnZhbHVlKQorICAgICAgICAgICAgICAgIGlmIChjLT5zdHJpbmcoKSA9PSBzZWwtPnZhbHVl
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQpAQCAtMTEzMSw3ICsxMTI3LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVj
dG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAgICAgICBzd2l0Y2goc2VsLT5tYXRjaCkgewogICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpFeGFjdDoKIAkgICAgaWYgKChpc1hNTERvYyAmJiBzZWwt
PnZhbHVlICE9IHZhbHVlKSB8fAotICAgICAgICAgICAgICAgICghaXNYTUxEb2MgJiYgIWVxdWFs
c0lnbm9yZUNhc2Uoc2VsLT52YWx1ZSwgdmFsdWUpKSkKKyAgICAgICAgICAgICAgICAoIWlzWE1M
RG9jICYmICFlcXVhbHNJZ25vcmluZ0Nhc2Uoc2VsLT52YWx1ZSwgdmFsdWUpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6TGlzdDoKQEAgLTExNDIsNyArMTEzOCw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxl
Y3Rvcjo6Y2hlY2tPbmVTZWxlY3RvcigKICAgICAgICAgICAgICAgICAvLyBhbGxvY2luZyBRU3Ry
aW5ncyBhbmQganVzdCB0cmVhdCB0aGlzIGFzIGFuIGV4YWN0CiAgICAgICAgICAgICAgICAgLy8g
bWF0Y2ggY2hlY2suCiAgICAgICAgICAgICAgICAgaWYgKChpc1hNTERvYyAmJiBzZWwtPnZhbHVl
ICE9IHZhbHVlKSB8fAotICAgICAgICAgICAgICAgICAgICAoIWlzWE1MRG9jICYmICFlcXVhbHNJ
Z25vcmVDYXNlKHNlbC0+dmFsdWUsIHZhbHVlKSkpCisgICAgICAgICAgICAgICAgICAgICghaXNY
TUxEb2MgJiYgIWVxdWFsc0lnbm9yaW5nQ2FzZShzZWwtPnZhbHVlLCB2YWx1ZSkpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CkluZGV4OiBraHRtbC9jc3MvcGFyc2VyLnkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL3BhcnNlci55LHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjQ0CmRpZmYgLXAgLXUgLXIxLjQ0IGtodG1sL2Nzcy9wYXJzZXIueQotLS0ga2h0bWwvY3Nz
L3BhcnNlci55CTMwIEF1ZyAyMDA1IDIxOjM2OjIzIC0wMDAwCTEuNDQKKysrIGtodG1sL2Nzcy9w
YXJzZXIueQk1IFNlcCAyMDA1IDE3OjU5OjI1IC0wMDAwCkBAIC03MjQsMTAgKzcyNCwxMSBAQCBz
cGVjaWZpZXI6CiAJJCQgPSBuZXcgQ1NTU2VsZWN0b3IoKTsKIAkkJC0+bWF0Y2ggPSBDU1NTZWxl
Y3Rvcjo6SWQ7CiAJQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNl
cik7Ci0gICAgICAgIGlmICghcC0+c3RyaWN0KQotICAgICAgICAgICAgJDEubG93ZXIoKTsKICAg
ICAgICAgJCQtPmF0dHIgPSBpZEF0dHI7Ci0JJCQtPnZhbHVlID0gYXRvbWljU3RyaW5nKCQxKTsK
KyAgICAgICAgaWYgKHAtPnN0cmljdCkKKyAgICAgICAgICAgICQkLT52YWx1ZSA9IGF0b21pY1N0
cmluZygkMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICQkLT52YWx1ZSA9IGxvd2VyY2Fz
ZWRBdG9taWNTdHJpbmcoJDEpOwogICAgIH0KICAgfCBjbGFzcwogICB8IGF0dHJpYgpAQCAtNzM5
LDEwICs3NDAsMTEgQEAgY2xhc3M6CiAgICAgICAgICQkID0gbmV3IENTU1NlbGVjdG9yKCk7CiAJ
JCQtPm1hdGNoID0gQ1NTU2VsZWN0b3I6OkNsYXNzOwogCUNTU1BhcnNlciAqcCA9IHN0YXRpY19j
YXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwotICAgICAgICBpZiAoIXAtPnN0cmljdCkKLSAgICAg
ICAgICAgICQyLmxvd2VyKCk7CiAgICAgICAgICQkLT5hdHRyID0gY2xhc3NBdHRyOwotCSQkLT52
YWx1ZSA9IGF0b21pY1N0cmluZygkMik7CisgICAgICAgIGlmIChwLT5zdHJpY3QpCisgICAgICAg
ICAgICAkJC0+dmFsdWUgPSBhdG9taWNTdHJpbmcoJDIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICAkJC0+dmFsdWUgPSBsb3dlcmNhc2VkQXRvbWljU3RyaW5nKCQyKTsKICAgICB9CiAgIDsK
IApAQCAtODIwLDggKzgyMiw3IEBAIHBzZXVkbzoKICAgICAnOicgSURFTlQgewogICAgICAgICAk
JCA9IG5ldyBDU1NTZWxlY3RvcigpOwogICAgICAgICAkJC0+bWF0Y2ggPSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3M7Ci0gICAgICAgICQyLmxvd2VyKCk7Ci0gICAgICAgICQkLT52YWx1ZSA9IGF0
b21pY1N0cmluZygkMik7CisgICAgICAgICQkLT52YWx1ZSA9IGxvd2VyY2FzZWRBdG9taWNTdHJp
bmcoJDIpOwogICAgICAgICBpZiAoJCQtPnZhbHVlID09ICJlbXB0eSIgfHwgJCQtPnZhbHVlID09
ICJvbmx5LWNoaWxkIiB8fAogICAgICAgICAgICAgJCQtPnZhbHVlID09ICJmaXJzdC1jaGlsZCIg
fHwgJCQtPnZhbHVlID09ICJsYXN0LWNoaWxkIikgewogICAgICAgICAgICAgQ1NTUGFyc2VyICpw
ID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7CkBAIC04MzMsMTUgKzgzNCwxMyBA
QCBwc2V1ZG86CiAgICAgfCAnOicgJzonIElERU5UIHsKICAgICAgICAgJCQgPSBuZXcgQ1NTU2Vs
ZWN0b3IoKTsKICAgICAgICAgJCQtPm1hdGNoID0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQ7
Ci0gICAgICAgICQzLmxvd2VyKCk7Ci0gICAgICAgICQkLT52YWx1ZSA9IGF0b21pY1N0cmluZygk
Myk7CisgICAgICAgICQkLT52YWx1ZSA9IGxvd2VyY2FzZWRBdG9taWNTdHJpbmcoJDMpOwogICAg
IH0KICAgICB8ICc6JyBGVU5DVElPTiBtYXliZV9zcGFjZSBzaW1wbGVfc2VsZWN0b3IgbWF5YmVf
c3BhY2UgJyknIHsKICAgICAgICAgJCQgPSBuZXcgQ1NTU2VsZWN0b3IoKTsKICAgICAgICAgJCQt
Pm1hdGNoID0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzOwogICAgICAgICAkJC0+c2ltcGxlU2Vs
ZWN0b3IgPSAkNDsKLSAgICAgICAgJDIubG93ZXIoKTsKLSAgICAgICAgJCQtPnZhbHVlID0gYXRv
bWljU3RyaW5nKCQyKTsKKyAgICAgICAgJCQtPnZhbHVlID0gbG93ZXJjYXNlZEF0b21pY1N0cmlu
ZygkMik7CiAgICAgfQogICA7CiAKSW5kZXg6IGtodG1sL2RvbS9kb21fc3RyaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vZG9tX3N0cmluZy5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjAKZGlmZiAtcCAtdSAtcjEuMjAga2h0bWwvZG9t
L2RvbV9zdHJpbmcuY3BwCi0tLSBraHRtbC9kb20vZG9tX3N0cmluZy5jcHAJMjkgQXVnIDIwMDUg
MjE6Mjk6MTEgLTAwMDAJMS4yMAorKysga2h0bWwvZG9tL2RvbV9zdHJpbmcuY3BwCTUgU2VwIDIw
MDUgMTc6NTk6MjUgLTAwMDAKQEAgLTIzLDMxNiArMjMsMjQ0IEBACiAjaW5jbHVkZSAiZG9tL2Rv
bV9zdHJpbmcuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3N0cmluZ2ltcGwuaCIKIAotCiBuYW1lc3Bh
Y2UgRE9NIHsKIAotCiBET01TdHJpbmc6OkRPTVN0cmluZyhjb25zdCBRQ2hhciAqc3RyLCB1aW50
IGxlbikKIHsKLSAgICBpZiAoIXN0cikgewotICAgICAgICBtX2ltcGwgPSAwOwotICAgICAgICBy
ZXR1cm47CisgICAgRE9NU3RyaW5nSW1wbCAqaW1wbDsKKyAgICBpZiAoIXN0cikKKyAgICAgICAg
aW1wbCA9IE5VTEw7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChsZW4gPT0gMCkKKyAgICAgICAg
ICAgIGltcGwgPSBET01TdHJpbmdJbXBsOjplbXB0eSgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBpbXBsID0gbmV3IERPTVN0cmluZ0ltcGwoc3RyLCBsZW4pOworICAgICAgICBpbXBsLT5y
ZWYoKTsKICAgICB9Ci0gICAgCi0gICAgaWYgKGxlbiA9PSAwKQotICAgICAgICBtX2ltcGwgPSBE
T01TdHJpbmdJbXBsOjplbXB0eSgpOwotICAgIGVsc2UKLSAgICAgICAgbV9pbXBsID0gbmV3IERP
TVN0cmluZ0ltcGwoc3RyLCBsZW4pOwotICAgIG1faW1wbC0+cmVmKCk7CisgICAgbV9pbXBsID0g
aW1wbDsKIH0KIAogRE9NU3RyaW5nOjpET01TdHJpbmcoY29uc3QgUVN0cmluZyAmc3RyKQogewot
ICAgIGlmIChzdHIuaXNOdWxsKCkpIHsKLQltX2ltcGwgPSAwOwotCXJldHVybjsKKyAgICBET01T
dHJpbmdJbXBsICppbXBsOworICAgIGlmIChzdHIuaXNOdWxsKCkpCisJaW1wbCA9IE5VTEw7Cisg
ICAgZWxzZSB7CisgICAgICAgIGlmIChzdHIuaXNFbXB0eSgpKQorICAgICAgICAgICAgaW1wbCA9
IERPTVN0cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGltcGwg
PSBuZXcgRE9NU3RyaW5nSW1wbChzdHIudW5pY29kZSgpLCBzdHIubGVuZ3RoKCkpOworICAgICAg
ICBpbXBsLT5yZWYoKTsKICAgICB9Ci0gICAgCi0gICAgaWYgKHN0ci5pc0VtcHR5KCkpCi0gICAg
ICAgIG1faW1wbCA9IERPTVN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0gICAgZWxzZSAKLSAgICAgICAg
bV9pbXBsID0gbmV3IERPTVN0cmluZ0ltcGwoc3RyLnVuaWNvZGUoKSwgc3RyLmxlbmd0aCgpKTsK
LSAgICBtX2ltcGwtPnJlZigpOworICAgIG1faW1wbCA9IGltcGw7CiB9CiAKIERPTVN0cmluZzo6
RE9NU3RyaW5nKGNvbnN0IGNoYXIgKnN0cikKIHsKLSAgICBpZiAoIXN0cikgewotCW1faW1wbCA9
IDA7Ci0JcmV0dXJuOwotICAgIH0KLQotICAgIGludCBsID0gc3RybGVuKHN0cik7Ci0gICAgaWYg
KGwgPT0gMCkKLSAgICAgICAgbV9pbXBsID0gRE9NU3RyaW5nSW1wbDo6ZW1wdHkoKTsKLSAgICBl
bHNlCi0gICAgICAgIG1faW1wbCA9IG5ldyBET01TdHJpbmdJbXBsKHN0ciwgbCk7Ci0gICAgbV9p
bXBsLT5yZWYoKTsKLX0KLQotRE9NU3RyaW5nOjpET01TdHJpbmcoRE9NU3RyaW5nSW1wbCAqaSkK
LXsKLSAgICBtX2ltcGwgPSBpOwotICAgIGlmKG1faW1wbCkgbV9pbXBsLT5yZWYoKTsKLX0KLQot
RE9NU3RyaW5nOjpET01TdHJpbmcoY29uc3QgRE9NU3RyaW5nICZvdGhlcikKLXsKLSAgICBtX2lt
cGwgPSBvdGhlci5tX2ltcGw7Ci0gICAgaWYobV9pbXBsKSBtX2ltcGwtPnJlZigpOwotfQotCi1E
T01TdHJpbmcgJkRPTVN0cmluZzo6b3BlcmF0b3IgPShjb25zdCBET01TdHJpbmcgJm90aGVyKQot
ewotICAgIGlmICggbV9pbXBsICE9IG90aGVyLm1faW1wbCApIHsKLSAgICBpZihtX2ltcGwpIG1f
aW1wbC0+ZGVyZWYoKTsKLSAgICBtX2ltcGwgPSBvdGhlci5tX2ltcGw7Ci0gICAgaWYobV9pbXBs
KSBtX2ltcGwtPnJlZigpOwotICAgIH0KLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLURPTVN0cmlu
ZyAmRE9NU3RyaW5nOjpvcGVyYXRvciArPSAoY29uc3QgRE9NU3RyaW5nICZzdHIpCi17Ci0gICAg
aWYoc3RyLm1faW1wbCkKLSAgICB7Ci0gICAgICAgIGlmKCFtX2ltcGwpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIC8vICMjIyBGSVhNRSEhIQotICAgICAgICAgICAgbV9pbXBsID0gc3RyLm1faW1w
bDsKLSAgICAgICAgICAgIG1faW1wbC0+cmVmKCk7Ci0gICAgICAgICAgICByZXR1cm4gKnRoaXM7
Ci0gICAgICAgIH0KLQlET01TdHJpbmdJbXBsICppID0gbV9pbXBsLT5jb3B5KCk7Ci0JbV9pbXBs
LT5kZXJlZigpOwotCW1faW1wbCA9IGk7Ci0JbV9pbXBsLT5yZWYoKTsKLQltX2ltcGwtPmFwcGVu
ZChzdHIubV9pbXBsKTsKKyAgICBET01TdHJpbmdJbXBsICppbXBsOworICAgIGlmICghc3RyKQor
CWltcGwgPSBOVUxMOworICAgIGVsc2UgeworICAgICAgICBpZiAoaW50IGxlbiA9IHN0cmxlbihz
dHIpKQorICAgICAgICAgICAgaW1wbCA9IG5ldyBET01TdHJpbmdJbXBsKHN0ciwgbGVuKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgaW1wbCA9IERPTVN0cmluZ0ltcGw6OmVtcHR5KCk7Cisg
ICAgICAgIGltcGwtPnJlZigpOworICAgIH0KKyAgICBtX2ltcGwgPSBpbXBsOworfQorCisvLyBG
SVhNRTogVGhpcyB2aW9sYXRlcyB0aGUgdXN1YWwgZXhwbGljaXQgc2hhcmluZyBzZW1hbnRpY3Mg
YmVjYXVzZSBpdCBzb21ldGltZXMgY29waWVzLCBzb21ldGltZXMgZG9lc24ndC4KK0RPTVN0cmlu
ZyAmRE9NU3RyaW5nOjpvcGVyYXRvciArPShjb25zdCBET01TdHJpbmcgJm90aGVyKQoreworICAg
IGlmIChvdGhlci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICBET01TdHJp
bmdJbXBsICppbXBsOworICAgIGlmIChET01TdHJpbmdJbXBsICpvbGQgPSBtX2ltcGwpIHsKKyAg
ICAgICAgaW1wbCA9IG9sZC0+Y29weSgpOworICAgICAgICBpbXBsLT5hcHBlbmQob3RoZXIubV9p
bXBsKTsKKyAgICAgICAgb2xkLT5kZXJlZigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGltcGwg
PSBvdGhlci5tX2ltcGwtPmNvcHkoKTsKICAgICB9CisgICAgaW1wbC0+cmVmKCk7CisgICAgbV9p
bXBsID0gaW1wbDsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLURPTVN0cmluZyBvcGVyYXRvciAr
IChjb25zdCBET01TdHJpbmcgJmEsIGNvbnN0IERPTVN0cmluZyAmYikKK0RPTVN0cmluZyBvcGVy
YXRvciArKGNvbnN0IERPTVN0cmluZyAmYSwgY29uc3QgRE9NU3RyaW5nICZiKQogewogICAgIGlm
IChhLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGIuY29weSgpOwogICAgIGlmIChiLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIGEuY29weSgpOwogICAgIERPTVN0cmluZyBjID0gYS5jb3B5
KCk7Ci0gICAgYyArPSBiOwotICAgIHJldHVybiBjOworICAgIHJldHVybiBjICs9IGI7CiB9CiAK
LXZvaWQgRE9NU3RyaW5nOjppbnNlcnQoRE9NU3RyaW5nIHN0ciwgdWludCBwb3MpCisvLyBGSVhN
RTogVGhpcyB2aW9sYXRlcyB0aGUgdXN1YWwgZXhwbGljaXQgc2hhcmluZyBzZW1hbnRpY3MgYmVj
YXVzZSBpdCBzb21ldGltZXMgY29waWVzLCBzb21ldGltZXMgZG9lc24ndC4KK3ZvaWQgRE9NU3Ry
aW5nOjppbnNlcnQoY29uc3QgRE9NU3RyaW5nICZzdHIsIHVpbnQgcG9zKQogewotICAgIGlmKCFt
X2ltcGwpCi0gICAgewotCW1faW1wbCA9IHN0ci5tX2ltcGwtPmNvcHkoKTsKLQltX2ltcGwtPnJl
ZigpOworICAgIGlmIChET01TdHJpbmdJbXBsICppbXBsID0gbV9pbXBsKSB7CisJaW1wbC0+aW5z
ZXJ0KHN0ci5tX2ltcGwsIHBvcyk7CisgICAgfSBlbHNlIHsKKwlpbXBsID0gc3RyLm1faW1wbC0+
Y29weSgpOworCWltcGwtPnJlZigpOworICAgICAgICBtX2ltcGwgPSBpbXBsOwogICAgIH0KLSAg
ICBlbHNlCi0JbV9pbXBsLT5pbnNlcnQoc3RyLm1faW1wbCwgcG9zKTsKIH0KIAotCi1jb25zdCBR
Q2hhciAmRE9NU3RyaW5nOjpvcGVyYXRvciBbXSh1bnNpZ25lZCBpbnQgaSkgY29uc3QKK2NvbnN0
IFFDaGFyICZET01TdHJpbmc6Om9wZXJhdG9yIFtdKHVpbnQgaSkgY29uc3QKIHsKLSAgICBzdGF0
aWMgY29uc3QgUUNoYXIgbnVsbENoYXIgPSAwOwotCi0gICAgaWYoIW1faW1wbCB8fCBpID49IG1f
aW1wbC0+bCApIHJldHVybiBudWxsQ2hhcjsKLQotICAgIHJldHVybiAqKG1faW1wbC0+cytpKTsK
KyAgICBET01TdHJpbmdJbXBsICppbXBsID0gbV9pbXBsOworICAgIGlmICghaW1wbCB8fCBpID49
IGltcGwtPmwpIHsKKyAgICAgICAgc3RhdGljIFFDaGFyIG51bGxDaGFyOworICAgICAgICByZXR1
cm4gbnVsbENoYXI7CisgICAgfQorICAgIHJldHVybiBpbXBsLT5zW2ldOwogfQogCiBpbnQgRE9N
U3RyaW5nOjpmaW5kKGNvbnN0IFFDaGFyIGMsIGludCBzdGFydCkgY29uc3QKIHsKLSAgICB1bnNp
Z25lZCBpbnQgbCA9IHN0YXJ0OwotICAgIGlmKCFtX2ltcGwgfHwgbCA+PSBtX2ltcGwtPmwgKSBy
ZXR1cm4gLTE7Ci0gICAgd2hpbGUoIGwgPCBtX2ltcGwtPmwgKQotICAgIHsKLQlpZiggKihtX2lt
cGwtPnMrbCkgPT0gYyApIHJldHVybiBsOwotCWwrKzsKLSAgICB9CisgICAgRE9NU3RyaW5nSW1w
bCAqaW1wbCA9IG1faW1wbDsKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiAtMTsKKyAg
ICBjb25zdCBRQ2hhciAqc3RyID0gaW1wbC0+czsKKyAgICB1aW50IGxlbiA9IGltcGwtPmw7Cisg
ICAgZm9yICh1aW50IGkgPSBzdGFydDsgaSA8IGxlbjsgKytpKQorCWlmIChzdHJbaV0gPT0gYykK
KyAgICAgICAgICAgIHJldHVybiBpOwogICAgIHJldHVybiAtMTsKIH0KIAotdWludCBET01TdHJp
bmc6Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgaWYoIW1faW1wbCkgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIG1faW1wbC0+bDsKLX0KLQotdm9pZCBET01TdHJpbmc6OnRydW5jYXRlKCB1bnNpZ25lZCBp
bnQgbGVuICkKLXsKLSAgICBpZihtX2ltcGwpIG1faW1wbC0+dHJ1bmNhdGUobGVuKTsKLX0KLQot
dm9pZCBET01TdHJpbmc6OnJlbW92ZSh1bnNpZ25lZCBpbnQgcG9zLCBpbnQgbGVuKQotewotICBp
ZihtX2ltcGwpIG1faW1wbC0+cmVtb3ZlKHBvcywgbGVuKTsKLX0KLQotRE9NU3RyaW5nIERPTVN0
cmluZzo6c3Vic3RyaW5nKHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBsZW4pIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX2ltcGwpIAotICAgICAgICByZXR1cm4gRE9NU3RyaW5nKCk7Ci0gICAg
cmV0dXJuIG1faW1wbC0+c3Vic3RyaW5nKHBvcywgbGVuKTsKLX0KLQotRE9NU3RyaW5nIERPTVN0
cmluZzo6c3BsaXQodW5zaWduZWQgaW50IHBvcykKK2Jvb2wgRE9NU3RyaW5nOjpwZXJjZW50YWdl
KGludCAmcmVzdWx0KSBjb25zdAogewotICBpZighbV9pbXBsKSByZXR1cm4gRE9NU3RyaW5nKCk7
Ci0gIHJldHVybiBtX2ltcGwtPnNwbGl0KHBvcyk7Ci19Ci0KLURPTVN0cmluZyBET01TdHJpbmc6
Omxvd2VyKCkgY29uc3QKLXsKLSAgaWYoIW1faW1wbCkgcmV0dXJuIERPTVN0cmluZygpOwotICBy
ZXR1cm4gbV9pbXBsLT5sb3dlcigpOwotfQotCi1ET01TdHJpbmcgRE9NU3RyaW5nOjp1cHBlcigp
IGNvbnN0Ci17Ci0gIGlmKCFtX2ltcGwpIHJldHVybiBET01TdHJpbmcoKTsKLSAgcmV0dXJuIG1f
aW1wbC0+dXBwZXIoKTsKLX0KLQotYm9vbCBET01TdHJpbmc6OnBlcmNlbnRhZ2UoaW50ICZfcGVy
Y2VudGFnZSkgY29uc3QKLXsKLSAgICBpZighbV9pbXBsIHx8ICFtX2ltcGwtPmwpIHJldHVybiBm
YWxzZTsKLQotICAgIGlmICggKihtX2ltcGwtPnMrbV9pbXBsLT5sLTEpICE9IFFDaGFyKCclJykp
CisgICAgRE9NU3RyaW5nSW1wbCAqaW1wbCA9IG1faW1wbDsKKyAgICBpZiAoIWltcGwpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB1aW50IGxlbiA9IGltcGwtPmw7CisgICAgaWYgKGxlbiA8
IDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBRQ2hhciAqc3RyID0gaW1wbC0+czsKKyAg
ICBpZiAoc3RyW2xlbiAtIDFdICE9ICclJykKICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBf
cGVyY2VudGFnZSA9IFFDb25zdFN0cmluZyhtX2ltcGwtPnMsIG1faW1wbC0+bC0xKS5xc3RyaW5n
KCkudG9JbnQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUUNoYXIgKkRPTVN0cmluZzo6dW5p
Y29kZSgpIGNvbnN0Ci17Ci0gICAgaWYoIW1faW1wbCkgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1f
aW1wbC0+czsKKyAgICBib29sIG9rOworICAgIHJlc3VsdCA9IFFDb25zdFN0cmluZyhzdHIsIGxl
biAtIDEpLnN0cmluZygpLnRvSW50KCZvayk7CisgICAgcmV0dXJuIG9rOwogfQogCiBRU3RyaW5n
IERPTVN0cmluZzo6cXN0cmluZygpIGNvbnN0CiB7Ci0gICAgaWYoIW1faW1wbCkgcmV0dXJuIFFT
dHJpbmc6Om51bGw7Ci0KLSAgICByZXR1cm4gUVN0cmluZyhtX2ltcGwtPnMsIG1faW1wbC0+bCk7
Ci19Ci0KLWludCBET01TdHJpbmc6OnRvSW50KCkgY29uc3QKLXsKLSAgICBpZighbV9pbXBsKSBy
ZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2ltcGwtPnRvSW50KCk7Ci19Ci0KLURPTVN0cmluZyBE
T01TdHJpbmc6OmNvcHkoKSBjb25zdAotewotICAgIGlmKCFtX2ltcGwpIHJldHVybiBET01TdHJp
bmcoKTsKLSAgICByZXR1cm4gbV9pbXBsLT5jb3B5KCk7CisgICAgRE9NU3RyaW5nSW1wbCAqaW1w
bCA9IG1faW1wbDsKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiBRU3RyaW5nOjpudWxs
OworICAgIHJldHVybiBRU3RyaW5nKGltcGwtPnMsIGltcGwtPmwpOwogfQogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAotYm9vbCBzdHJjYXNlY21wKCBjb25zdCBET01TdHJpbmcgJmFzLCBjb25zdCBE
T01TdHJpbmcgJmJzICkKK2Jvb2wgZXF1YWxzSWdub3JpbmdDYXNlKGNvbnN0IERPTVN0cmluZyAm
YSwgY29uc3QgRE9NU3RyaW5nICZiICkKIHsKLSAgICBpZiAoIGFzLmxlbmd0aCgpICE9IGJzLmxl
bmd0aCgpICkgcmV0dXJuIHRydWU7CisgICAgRE9NU3RyaW5nSW1wbCAqYWltcGwgPSBhLmltcGwo
KTsKKyAgICBET01TdHJpbmdJbXBsICpiaW1wbCA9IGIuaW1wbCgpOworICAgIGlmIChhaW1wbCA9
PSBiaW1wbCkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBjb25zdCBRQ2hhciAqYSA9IGFz
LnVuaWNvZGUoKTsKLSAgICBjb25zdCBRQ2hhciAqYiA9IGJzLnVuaWNvZGUoKTsKLSAgICBpZiAo
IGEgPT0gYiApICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCAhKCBhICYmIGIgKSApICByZXR1cm4g
dHJ1ZTsKLSAgICBpbnQgbCA9IGFzLmxlbmd0aCgpOwotICAgIHdoaWxlICggbC0tICkgewotICAg
ICAgICBpZiAoICphICE9ICpiICYmIGEtPmxvd2VyKCkgIT0gYi0+bG93ZXIoKSApIHJldHVybiB0
cnVlOwotCWErKyxiKys7CisgICAgdWludCBhbGVuID0gYWltcGwgPyBhaW1wbC0+bCA6IDA7Cisg
ICAgdWludCBibGVuID0gYmltcGwgPyBiaW1wbC0+bCA6IDA7CisgICAgaWYgKGFsZW4gIT0gYmxl
bikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgUUNoYXIgKmFjaGFycyA9IGFp
bXBsLT5zOworICAgIGNvbnN0IFFDaGFyICpiY2hhcnMgPSBiaW1wbC0+czsKKyAgICB1aW50IGNv
dW50ID0gYWxlbjsKKyAgICB3aGlsZSAoY291bnQtLSkgeworICAgICAgICBpZiAoKmFjaGFycyAh
PSAqYmNoYXJzICYmIGFjaGFycy0+bG93ZXIoKSAhPSBiY2hhcnMtPmxvd2VyKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisJYWNoYXJzKys7CisgICAgICAgIGJjaGFycysrOwogICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc3RyY2FzZWNt
cCggY29uc3QgRE9NU3RyaW5nICZhcywgY29uc3QgY2hhciogYnMgKQorYm9vbCBlcXVhbHNJZ25v
cmluZ0Nhc2UoY29uc3QgRE9NU3RyaW5nICZhLCBjb25zdCBjaGFyICpiKQogewotICAgIGNvbnN0
IFFDaGFyICphID0gYXMudW5pY29kZSgpOwotICAgIGludCBsID0gYXMubGVuZ3RoKCk7Ci0gICAg
aWYgKCAhYnMgKSByZXR1cm4gKCBsICE9IDAgKTsKLSAgICB3aGlsZSAoIGwtLSApIHsKLSAgICAg
ICAgaWYgKCBhLT5sYXRpbjEoKSAhPSAqYnMgKSB7Ci0gICAgICAgICAgICBjaGFyIGNjID0gKCAo
ICpicyA+PSAnQScgKSAmJiAoICpicyA8PSAnWicgKSApID8gKCAoICpicyApICsgJ2EnIC0gJ0En
ICkgOiAoICpicyApOwotICAgICAgICAgICAgaWYgKCBhLT5sb3dlcigpLmxhdGluMSgpICE9IGNj
ICkgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYSsrLCBicysrOworICAgIERPTVN0
cmluZ0ltcGwgKmFpbXBsID0gYS5pbXBsKCk7CisgICAgdWludCBhbGVuID0gYWltcGwgPyBhaW1w
bC0+bCA6IDA7CisgICAgaWYgKCFiKQorICAgICAgICByZXR1cm4gYWxlbiA9PSAwOworICAgIGNv
bnN0IFFDaGFyICphY2hhcnMgPSBhaW1wbC0+czsKKyAgICBjb25zdCBjaGFyICpiY2hhcnMgPSBi
OworICAgIHVpbnQgY291bnQgPSBhbGVuOworICAgIHdoaWxlIChjb3VudC0tKSB7CisgICAgICAg
IGNoYXIgYmMgPSAqYmNoYXJzOworICAgICAgICBpZiAoYmMgPT0gJ1wwJyB8fCAqYWNoYXJzICE9
IGJjICYmIGFjaGFycy0+bG93ZXIoKSAhPSBRQ2hhcihiYykubG93ZXIoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgYWNoYXJzKys7CisgICAgICAgIGJjaGFycysrOwogICAg
IH0KLSAgICByZXR1cm4gKCAqYnMgIT0gJ1wwJyApOwotfQotCi1ib29sIERPTVN0cmluZzo6aXNF
bXB0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICghbV9pbXBsIHx8IG1faW1wbC0+bCA9PSAwKTsK
LX0KLQota2h0bWw6Okxlbmd0aCogRE9NU3RyaW5nOjp0b0Nvb3Jkc0FycmF5KGludCYgbGVuKSBj
b25zdCAKLXsgCi0gICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+dG9Db29yZHNBcnJheShsZW4p
IDogMDsKLX0KLQota2h0bWw6Okxlbmd0aCogRE9NU3RyaW5nOjp0b0xlbmd0aEFycmF5KGludCYg
bGVuKSBjb25zdCAKLXsgCi0gICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+dG9MZW5ndGhBcnJh
eShsZW4pIDogMDsKKyAgICByZXR1cm4gKmJjaGFycyA9PSAnXDAnOwogfQogCiAjaWZuZGVmIE5E
RUJVRworCiBjb25zdCBjaGFyICpET01TdHJpbmc6OmFzY2lpKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9pbXBsID8gbV9pbXBsLT5hc2NpaSgpIDogIihudWxsIGltcGwpIjsKKyAgICBET01TdHJp
bmdJbXBsICppbXBsID0gbV9pbXBsOworICAgIHJldHVybiBpbXBsID8gaW1wbC0+YXNjaWkoKSA6
ICIobnVsbCBpbXBsKSI7CiB9CisKICNlbmRpZgogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
LWJvb2wgb3BlcmF0b3I9PSggY29uc3QgRE9NU3RyaW5nICZhLCBjb25zdCBET01TdHJpbmcgJmIg
KQorLy8gRklYTUU6IE51bGwgY29tcGFyZXMgZXF1YWwgdG8gZW1wdHkuIElzIHRoYXQgd2hhdCB3
ZSB3YW50PworYm9vbCBvcGVyYXRvcj09KGNvbnN0IERPTVN0cmluZyAmYSwgY29uc3QgRE9NU3Ry
aW5nICZiKQogewotICAgIGlmIChhLm1faW1wbCA9PSBiLm1faW1wbCkKKyAgICBET01TdHJpbmdJ
bXBsICphaW1wbCA9IGEuaW1wbCgpOworICAgIERPTVN0cmluZ0ltcGwgKmJpbXBsID0gYi5pbXBs
KCk7CisgICAgaWYgKGFpbXBsID09IGJpbXBsKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAK
LSAgICB1bnNpZ25lZCBpbnQgbCA9IGEubGVuZ3RoKCk7CiAKLSAgICBpZiggbCAhPSBiLmxlbmd0
aCgpICkgcmV0dXJuIGZhbHNlOworICAgIHVpbnQgYWxlbiA9IGFpbXBsID8gYWltcGwtPmwgOiAw
OworICAgIHVpbnQgYmxlbiA9IGJpbXBsID8gYmltcGwtPmwgOiAwOworICAgIGlmIChhbGVuICE9
IGJsZW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmKCFtZW1jbXAoYS51bmljb2Rl
KCksIGIudW5pY29kZSgpLCBsKnNpemVvZihRQ2hhcikpKQotCXJldHVybiB0cnVlOwotICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gbWVtY21wKGFpbXBsLT5zLCBiaW1wbC0+cywgYWxlbiAq
IHNpemVvZihRQ2hhcikpID09IDA7CiB9CiAKLWJvb2wgb3BlcmF0b3I9PSggY29uc3QgRE9NU3Ry
aW5nICZhLCBjb25zdCBRU3RyaW5nICZiICkKKy8vIEZJWE1FOiBOdWxsIGNvbXBhcmVzIGVxdWFs
IHRvIGVtcHR5LiBJcyB0aGF0IHdoYXQgd2Ugd2FudD8KK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBE
T01TdHJpbmcgJmEsIGNvbnN0IFFTdHJpbmcgJmIpCiB7Ci0gICAgdW5zaWduZWQgaW50IGwgPSBh
Lmxlbmd0aCgpOworICAgIERPTVN0cmluZ0ltcGwgKmFpbXBsID0gYS5pbXBsKCk7CiAKLSAgICBp
ZiggbCAhPSBiLmxlbmd0aCgpICkgcmV0dXJuIGZhbHNlOworICAgIHVpbnQgYWxlbiA9IGFpbXBs
ID8gYWltcGwtPmwgOiAwOworICAgIHVpbnQgYmxlbiA9IGIubGVuZ3RoKCk7CisgICAgaWYgKGFs
ZW4gIT0gYmxlbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYoIW1lbWNtcChhLnVu
aWNvZGUoKSwgYi51bmljb2RlKCksIGwqc2l6ZW9mKFFDaGFyKSkpCi0JcmV0dXJuIHRydWU7Ci0g
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtZW1jbXAoYWltcGwtPnMsIGIudW5pY29kZSgp
LCBhbGVuICogc2l6ZW9mKFFDaGFyKSkgPT0gMDsKIH0KIAotYm9vbCBvcGVyYXRvcj09KCBjb25z
dCBET01TdHJpbmcgJmEsIGNvbnN0IGNoYXIgKmIgKQorLy8gRklYTUU6IE51bGwgY29tcGFyZXMg
ZXF1YWwgdG8gZW1wdHkuIElzIHRoYXQgd2hhdCB3ZSB3YW50PworYm9vbCBvcGVyYXRvcj09KGNv
bnN0IERPTVN0cmluZyAmYSwgY29uc3QgY2hhciAqYikKIHsKLSAgICBET01TdHJpbmdJbXBsICph
aW1wbCA9IGEubV9pbXBsOwotICAgIAorICAgIERPTVN0cmluZ0ltcGwgKmFpbXBsID0gYS5pbXBs
KCk7CisgICAgdWludCBhbGVuID0gYWltcGwgPyBhaW1wbC0+bCA6IDA7CiAgICAgaWYgKCFiKQot
ICAgICAgICByZXR1cm4gIWFpbXBsOwotICAgIAotICAgIGlmIChhaW1wbCkgewotICAgICAgICBp
bnQgYWxlbiA9IGFpbXBsLT5sOwotICAgICAgICBjb25zdCBRQ2hhciAqYXB0ciA9IGFpbXBsLT5z
OwotICAgICAgICB3aGlsZSAoYWxlbi0tKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMg
PSAqYisrOwotICAgICAgICAgICAgaWYgKCFjIHx8ICgqYXB0cisrKS51bmljb2RlKCkgIT0gYykK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGFsZW4gPT0gMDsKKyAgICBjb25zdCBRQ2hhciAqYWNoYXJzID0gYWltcGwtPnM7CisgICAgY29u
c3QgY2hhciAqYmNoYXJzID0gYjsKKyAgICB1aW50IGNvdW50ID0gYWxlbjsKKyAgICB3aGlsZSAo
Y291bnQtLSkgeworICAgICAgICBjaGFyIGJjID0gKmJjaGFyczsKKyAgICAgICAgaWYgKGJjID09
ICdcMCcgfHwgKmFjaGFycyAhPSBiYykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgYWNoYXJzKys7CisgICAgICAgIGJjaGFycysrOwogICAgIH0KLSAgICByZXR1cm4gKmIgPT0g
MDsKKyAgICByZXR1cm4gKmJjaGFycyA9PSAnXDAnOwogfQogCiB9CkluZGV4OiBraHRtbC9kb20v
ZG9tX3N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2RvbS9kb21fc3RyaW5nLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTUKZGlmZiAtcCAtdSAt
cjEuMTUga2h0bWwvZG9tL2RvbV9zdHJpbmcuaAotLS0ga2h0bWwvZG9tL2RvbV9zdHJpbmcuaAky
OSBBdWcgMjAwNSAyMToyOToxMSAtMDAwMAkxLjE1CisrKyBraHRtbC9kb20vZG9tX3N0cmluZy5o
CTUgU2VwIDIwMDUgMTc6NTk6MjUgLTAwMDAKQEAgLTIwLDIwICsyMCwxNCBAQAogICogQm9zdG9u
LCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgogICovCi0jaWZuZGVmIF9ET01fRE9NU3RyaW5nX2hf
Ci0jZGVmaW5lIF9ET01fRE9NU3RyaW5nX2hfCiAKLSNpbmNsdWRlIDxxc3RyaW5nLmg+Ci0jaW5j
bHVkZSA8eG1sL2RvbV9zdHJpbmdpbXBsLmg+CisjaWZuZGVmIERPTV9ET01TVFJJTkdfSAorI2Rl
ZmluZSBET01fRE9NU1RSSU5HX0gKIAotbmFtZXNwYWNlIGtodG1sIHsKLSAgICBjbGFzcyBMZW5n
dGg7Ci19CisjaW5jbHVkZSA8eG1sL2RvbV9zdHJpbmdpbXBsLmg+CiAKIG5hbWVzcGFjZSBET00g
ewogCi1jbGFzcyBET01TdHJpbmdJbXBsOwotCiAvKioKICAqIFRoaXMgY2xhc3MgaW1wbGVtZW50
cyB0aGUgYmFzaWMgc3RyaW5nIHdlIHVzZSBpbiB0aGUgRE9NLiBXZSBkbyBub3QgdXNlCiAgKiBR
U3RyaW5nIGZvciAyIHJlYXNvbnM6IE1lbW9yeSBvdmVyaGVhZCwgYW5kIHRoZSBtaXNzaW5nIGV4
cGxpY2l0IHNoYXJpbmcKQEAgLTQ1LDUxICszOSw0NyBAQCBjbGFzcyBET01TdHJpbmdJbXBsOwog
ICovCiBjbGFzcyBET01TdHJpbmcKIHsKLSAgICBmcmllbmQgY2xhc3MgQ2hhcmFjdGVyRGF0YUlt
cGw7Ci0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgRE9NU3RyaW5nICZhLCBjb25z
dCBjaGFyICpiICk7Ci0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgRE9NU3RyaW5n
ICZhLCBjb25zdCBET01TdHJpbmcgJmIgKTsKIHB1YmxpYzoKICAgICAvKioKLSAgICAgKiBkZWZh
dWx0IGNvbnN0cnVjdG9yLiBHaXZlcyBhbiBlbXB0eSBET01TdHJpbmcKKyAgICAgKiBEZWZhdWx0
IGNvbnN0cnVjdG9yLiBHaXZlcyBhICJudWxsIiBET01TdHJpbmcKICAgICAgKi8KLSAgICBET01T
dHJpbmcoKSA6IG1faW1wbCgwKSB7IH0KKyAgICBET01TdHJpbmcoKSA6IG1faW1wbChOVUxMKSB7
IH0KIAogICAgIERPTVN0cmluZyhjb25zdCBRQ2hhciAqc3RyLCB1aW50IGxlbik7CiAgICAgRE9N
U3RyaW5nKGNvbnN0IFFTdHJpbmcgJik7Ci0gICAgRE9NU3RyaW5nKGNvbnN0IGNoYXIgKnN0cik7
Ci0gICAgRE9NU3RyaW5nKERPTVN0cmluZ0ltcGwgKmkpOwotICAgIH5ET01TdHJpbmcoKSB7IGlm
KG1faW1wbCkgbV9pbXBsLT5kZXJlZigpOyB9Ci0KKyAgICBET01TdHJpbmcoY29uc3QgY2hhciAq
KTsKKyAgICBET01TdHJpbmcoRE9NU3RyaW5nSW1wbCAqKTsKKyAgICB+RE9NU3RyaW5nKCkgeyBp
ZiAoRE9NU3RyaW5nSW1wbCAqaSA9IG1faW1wbCkgaS0+ZGVyZWYoKTsgfQogCiAgICAgLy8gYXNz
aWduIGFuZCBjb3B5Ci0gICAgRE9NU3RyaW5nKGNvbnN0IERPTVN0cmluZyAmc3RyKTsKLSAgICBE
T01TdHJpbmcgJm9wZXJhdG9yID0oY29uc3QgRE9NU3RyaW5nICZzdHIpOworICAgIERPTVN0cmlu
Zyhjb25zdCBET01TdHJpbmcgJik7CisgICAgRE9NU3RyaW5nICZvcGVyYXRvciA9KGNvbnN0IERP
TVN0cmluZyAmKTsKIAogICAgIC8qKgogICAgICAqIGFwcGVuZCBzdHIgdG8gdGhpcyBzdHJpbmcK
ICAgICAgKi8KLSAgICBET01TdHJpbmcgJm9wZXJhdG9yICs9IChjb25zdCBET01TdHJpbmcgJnN0
cik7CisgICAgRE9NU3RyaW5nICZvcGVyYXRvciArPShjb25zdCBET01TdHJpbmcgJnN0cik7CiAK
LSAgICB2b2lkIGluc2VydChET01TdHJpbmcgc3RyLCB1aW50IHBvcyk7CisgICAgdm9pZCBpbnNl
cnQoY29uc3QgRE9NU3RyaW5nICZzdHIsIHVpbnQgcG9zKTsKIAogICAgIC8qKgogICAgICAqIFRo
ZSBjaGFyYWN0ZXIgYXQgcG9zaXRpb24gaSBvZiB0aGUgRE9NU3RyaW5nLiBJZiBpID49IGxlbmd0
aCgpLCB0aGUKICAgICAgKiBjaGFyYWN0ZXIgcmV0dXJuZWQgd2lsbCBiZSAwLgogICAgICAqLwot
ICAgIGNvbnN0IFFDaGFyICZvcGVyYXRvciBbXSh1bnNpZ25lZCBpbnQgaSkgY29uc3Q7CisgICAg
Y29uc3QgUUNoYXIgJm9wZXJhdG9yIFtdKHVpbnQgaSkgY29uc3Q7CiAKICAgICBpbnQgZmluZChj
b25zdCBRQ2hhciBjLCBpbnQgc3RhcnQgPSAwKSBjb25zdDsKIAogICAgIHVpbnQgbGVuZ3RoKCkg
Y29uc3Q7Ci0gICAgdm9pZCB0cnVuY2F0ZSggdW5zaWduZWQgaW50IGxlbiApOwotICAgIHZvaWQg
cmVtb3ZlKHVuc2lnbmVkIGludCBwb3MsIGludCBsZW49MSk7CisgICAgdm9pZCB0cnVuY2F0ZSh1
aW50IGxlbik7CisgICAgdm9pZCByZW1vdmUodWludCBwb3MsIGludCBsZW49MSk7CiAKLSAgICBE
T01TdHJpbmcgc3Vic3RyaW5nKHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBsZW4pIGNv
bnN0OworICAgIERPTVN0cmluZyBzdWJzdHJpbmcodWludCBwb3MsIHVpbnQgbGVuKSBjb25zdDsK
IAogICAgIC8qKgogICAgICAqIFNwbGl0cyB0aGUgc3RyaW5nIGludG8gdHdvLiBUaGUgb3JpZ2lu
YWwgc3RyaW5nIGdldHMgdHJ1bmNhdGVkIHRvIHBvcywgYW5kIHRoZSByZXN0IGlzIHJldHVybmVk
LgogICAgICAqLwotICAgIERPTVN0cmluZyBzcGxpdCh1bnNpZ25lZCBpbnQgcG9zKTsKKyAgICBE
T01TdHJpbmcgc3BsaXQodWludCBwb3MpOwogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhIGxv
d2VyY2FzZSB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcKQEAgLTEwNCwxOCArOTQsMTcgQEAgcHVibGlj
OgogICAgIFFTdHJpbmcgcXN0cmluZygpIGNvbnN0OwogCiAgICAgaW50IHRvSW50KCkgY29uc3Q7
Ci0gICAga2h0bWw6Okxlbmd0aCogdG9MZW5ndGhBcnJheShpbnQmIGxlbikgY29uc3Q7Ci0gICAg
a2h0bWw6Okxlbmd0aCogdG9Db29yZHNBcnJheShpbnQmIGxlbikgY29uc3Q7Ci0gICAgYm9vbCBw
ZXJjZW50YWdlKGludCAmX3BlcmNlbnRhZ2UpIGNvbnN0OworICAgIGtodG1sOjpMZW5ndGggKnRv
TGVuZ3RoQXJyYXkoaW50ICZsZW4pIGNvbnN0OworICAgIGtodG1sOjpMZW5ndGggKnRvQ29vcmRz
QXJyYXkoaW50ICZsZW4pIGNvbnN0OworICAgIGJvb2wgcGVyY2VudGFnZShpbnQgJnJlc3VsdCkg
Y29uc3Q7CiAKICAgICBET01TdHJpbmcgY29weSgpIGNvbnN0OwogCi0gICAgYm9vbCBpc051bGwo
KSAgY29uc3QgeyByZXR1cm4gKG1faW1wbCA9PSAwKTsgfQorICAgIGJvb2wgaXNOdWxsKCkgIGNv
bnN0IHsgcmV0dXJuIG1faW1wbCA9PSAwOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgIGNvbnN0Owog
CiAgICAgLyoqCi0gICAgICogQGludGVybmFsIGdldCBhIGhhbmRsZSB0byB0aGUgaW1sZW1lbnRh
dGlvbiBvZiB0aGUgRE9NU3RyaW5nCi0gICAgICogVXNlIGF0IG93biByaXNrISEhCisgICAgICog
QGludGVybmFsIGdldCBhIGhhbmRsZSB0byB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIERPTVN0
cmluZwogICAgICAqLwogICAgIERPTVN0cmluZ0ltcGwgKmltcGwoKSBjb25zdCB7IHJldHVybiBt
X2ltcGw7IH0KIApAQCAtMTI5LDI1ICsxMTgsMTMyIEBAIHB1YmxpYzoKICAgICBjb25zdCBjaGFy
ICphc2NpaSgpIGNvbnN0OwogI2VuZGlmCiAKLXByb3RlY3RlZDoKK3ByaXZhdGU6CiAgICAgRE9N
U3RyaW5nSW1wbCAqbV9pbXBsOwogfTsKIAotRE9NU3RyaW5nIG9wZXJhdG9yICsgKGNvbnN0IERP
TVN0cmluZyAmYSwgY29uc3QgRE9NU3RyaW5nICZiKTsKLWJvb2wgb3BlcmF0b3I9PSggY29uc3Qg
RE9NU3RyaW5nICZhLCBjb25zdCBRU3RyaW5nICZiICk7Ci1ib29sIG9wZXJhdG9yPT0oIGNvbnN0
IERPTVN0cmluZyAmYSwgY29uc3QgY2hhciAqYiApOwotaW5saW5lIGJvb2wgb3BlcmF0b3I9PSgg
Y29uc3QgUVN0cmluZyAmYiwgY29uc3QgRE9NU3RyaW5nICZhICkgeyByZXR1cm4gYSA9PSBiOyB9
Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBjaGFyICpiLCBjb25zdCBET01TdHJpbmcg
JmEgKSB7IHJldHVybiBhID09IGI7IH0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IERP
TVN0cmluZyAmYSwgY29uc3QgRE9NU3RyaW5nICZiICkgeyByZXR1cm4gIShhPT1iKTsgfQotaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgRE9NU3RyaW5nICZhLCBjb25zdCBRU3RyaW5nICZi
ICkgeyByZXR1cm4gIShhPT1iKTsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgRE9N
U3RyaW5nICZhLCBjb25zdCBjaGFyICpiICkgIHsgcmV0dXJuICEoYT09Yik7IH0KLWlubGluZSBi
b29sIG9wZXJhdG9yIT0oIGNvbnN0IFFTdHJpbmcgJmIsIGNvbnN0IERPTVN0cmluZyAmYSApIHsg
cmV0dXJuICEoYT09Yik7IH0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IGNoYXIgKmIs
IGNvbnN0IERPTVN0cmluZyAmYSApICB7IHJldHVybiAhKGE9PWIpOyB9Ci1pbmxpbmUgYm9vbCBz
dHJjbXAoIGNvbnN0IERPTVN0cmluZyAmYSwgY29uc3QgRE9NU3RyaW5nICZiICkgeyByZXR1cm4g
YSAhPSBiOyB9Ci0KLS8vIHJldHVybnMgZmFsc2Ugd2hlbiBlcXVhbCwgdHJ1ZSBvdGhlcndpc2Ug
KGlnbm9yaW5nIGNhc2UpCi1ib29sIHN0cmNhc2VjbXAoIGNvbnN0IERPTVN0cmluZyAmYSwgY29u
c3QgRE9NU3RyaW5nICZiICk7Ci1ib29sIHN0cmNhc2VjbXAoIGNvbnN0IERPTVN0cmluZyYgYSwg
Y29uc3QgY2hhciogYiApOworRE9NU3RyaW5nIG9wZXJhdG9yICsoY29uc3QgRE9NU3RyaW5nICZh
LCBjb25zdCBET01TdHJpbmcgJmIpOworCitib29sIG9wZXJhdG9yPT0oY29uc3QgRE9NU3RyaW5n
ICZhLCBjb25zdCBET01TdHJpbmcgJmIpOworYm9vbCBvcGVyYXRvcj09KGNvbnN0IERPTVN0cmlu
ZyAmYSwgY29uc3QgUVN0cmluZyAmYik7Citib29sIG9wZXJhdG9yPT0oY29uc3QgRE9NU3RyaW5n
ICZhLCBjb25zdCBjaGFyICpiKTsKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUVN0cmlu
ZyAmYiwgY29uc3QgRE9NU3RyaW5nICZhKSB7IHJldHVybiBhID09IGI7IH0KK2lubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgY2hhciAqYiwgY29uc3QgRE9NU3RyaW5nICZhKSB7IHJldHVybiBh
ID09IGI7IH0KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBET01TdHJpbmcgJmEsIGNv
bnN0IERPTVN0cmluZyAmYikgeyByZXR1cm4gIShhID09IGIpOyB9CitpbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IERPTVN0cmluZyAmYSwgY29uc3QgUVN0cmluZyAmYikgeyByZXR1cm4gIShh
ID09IGIpOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFFTdHJpbmcgJmIsIGNvbnN0
IERPTVN0cmluZyAmYSkgeyByZXR1cm4gIShiID09IGEpOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IERPTVN0cmluZyAmYSwgY29uc3QgY2hhciAqYikgIHsgcmV0dXJuICEoYSA9PSBi
KTsgfQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBjaGFyICpiLCBjb25zdCBET01TdHJp
bmcgJmEpICB7IHJldHVybiAhKGIgPT0gYSk7IH0KKworYm9vbCBlcXVhbHNJZ25vcmluZ0Nhc2Uo
Y29uc3QgRE9NU3RyaW5nICYsIGNvbnN0IERPTVN0cmluZyAmYik7Citib29sIGVxdWFsc0lnbm9y
aW5nQ2FzZShjb25zdCBET01TdHJpbmcgJiwgY29uc3QgY2hhciAqYik7CitpbmxpbmUgYm9vbCBl
cXVhbHNJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciAqYSwgY29uc3QgRE9NU3RyaW5nICZiKSB7IHJl
dHVybiBiID09IGE7IH0KKworaW5saW5lIERPTVN0cmluZzo6RE9NU3RyaW5nKERPTVN0cmluZ0lt
cGwgKmkpCit7CisgICAgaWYgKGkpCisgICAgICAgIGktPnJlZigpOworICAgIG1faW1wbCA9IGk7
Cit9CisKK2lubGluZSBET01TdHJpbmc6OkRPTVN0cmluZyhjb25zdCBET01TdHJpbmcgJm90aGVy
KQoreworICAgIERPTVN0cmluZ0ltcGwgKmkgPSBvdGhlci5tX2ltcGw7CisgICAgaWYgKGkpCisg
ICAgICAgIGktPnJlZigpOworICAgIG1faW1wbCA9IGk7Cit9CisKK2lubGluZSBET01TdHJpbmcg
JkRPTVN0cmluZzo6b3BlcmF0b3IgPShjb25zdCBET01TdHJpbmcgJm90aGVyKQoreworICAgIERP
TVN0cmluZ0ltcGwgKmkgPSBvdGhlci5tX2ltcGw7CisgICAgaWYgKGkpCisgICAgICAgIGktPnJl
ZigpOworICAgIERPTVN0cmluZ0ltcGwgKm9sZCA9IG1faW1wbDsKKyAgICBpZiAob2xkKQorICAg
ICAgICBvbGQtPmRlcmVmKCk7CisgICAgbV9pbXBsID0gaTsKKyAgICByZXR1cm4gKnRoaXM7Cit9
CisKK2lubGluZSB1aW50IERPTVN0cmluZzo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICBET01TdHJp
bmdJbXBsICppbXBsID0gbV9pbXBsOworICAgIHJldHVybiBpbXBsID8gaW1wbC0+bCA6IDA7Cit9
CisKK2lubGluZSBRQ2hhciAqRE9NU3RyaW5nOjp1bmljb2RlKCkgY29uc3QKK3sKKyAgICBET01T
dHJpbmdJbXBsICppbXBsID0gbV9pbXBsOworICAgIHJldHVybiBpbXBsID8gaW1wbC0+cyA6IDA7
Cit9CisKK2lubGluZSB2b2lkIERPTVN0cmluZzo6dHJ1bmNhdGUodWludCBsZW4pCit7CisgICAg
aWYgKERPTVN0cmluZ0ltcGwgKmltcGwgPSBtX2ltcGwpCisgICAgICAgIGltcGwtPnRydW5jYXRl
KGxlbik7Cit9CisKK2lubGluZSB2b2lkIERPTVN0cmluZzo6cmVtb3ZlKHVpbnQgcG9zLCBpbnQg
bGVuKQoreworICAgIGlmIChET01TdHJpbmdJbXBsICppbXBsID0gbV9pbXBsKQorICAgICAgICBp
bXBsLT5yZW1vdmUocG9zLCBsZW4pOworfQorCitpbmxpbmUgRE9NU3RyaW5nIERPTVN0cmluZzo6
c3Vic3RyaW5nKHVpbnQgcG9zLCB1aW50IGxlbikgY29uc3QKK3sKKyAgICBET01TdHJpbmdJbXBs
ICppbXBsID0gbV9pbXBsOworICAgIHJldHVybiBpbXBsID8gaW1wbC0+c3Vic3RyaW5nKHBvcywg
bGVuKSA6IERPTVN0cmluZygpOworfQorCitpbmxpbmUgRE9NU3RyaW5nIERPTVN0cmluZzo6c3Bs
aXQodWludCBwb3MpCit7CisgICAgRE9NU3RyaW5nSW1wbCAqaW1wbCA9IG1faW1wbDsKKyAgICBy
ZXR1cm4gaW1wbCA/IGltcGwtPnNwbGl0KHBvcykgOiBET01TdHJpbmcoKTsKK30KKworaW5saW5l
IERPTVN0cmluZyBET01TdHJpbmc6Omxvd2VyKCkgY29uc3QKK3sKKyAgICBET01TdHJpbmdJbXBs
ICppbXBsID0gbV9pbXBsOworICAgIHJldHVybiBpbXBsID8gaW1wbC0+bG93ZXIoKSA6IERPTVN0
cmluZygpOworfQorCitpbmxpbmUgRE9NU3RyaW5nIERPTVN0cmluZzo6dXBwZXIoKSBjb25zdAor
eworICAgIERPTVN0cmluZ0ltcGwgKmltcGwgPSBtX2ltcGw7CisgICAgcmV0dXJuIGltcGwgPyBp
bXBsLT51cHBlcigpIDogRE9NU3RyaW5nKCk7Cit9CisKK2lubGluZSBpbnQgRE9NU3RyaW5nOjp0
b0ludCgpIGNvbnN0Cit7CisgICAgRE9NU3RyaW5nSW1wbCAqaW1wbCA9IG1faW1wbDsKKyAgICBy
ZXR1cm4gaW1wbCA/IGltcGwtPnRvSW50KCkgOiAwOworfQorCitpbmxpbmUgRE9NU3RyaW5nIERP
TVN0cmluZzo6Y29weSgpIGNvbnN0Cit7CisgICAgRE9NU3RyaW5nSW1wbCAqaW1wbCA9IG1faW1w
bDsKKyAgICByZXR1cm4gaW1wbCA/IGltcGwtPmNvcHkoKSA6IDA7Cit9CisKK2lubGluZSBib29s
IERPTVN0cmluZzo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxlbmd0aCgpID09IDA7
Cit9CisKK2lubGluZSBraHRtbDo6TGVuZ3RoICpET01TdHJpbmc6OnRvQ29vcmRzQXJyYXkoaW50
JiBsZW4pIGNvbnN0IAoreyAKKyAgICBET01TdHJpbmdJbXBsICppbXBsID0gbV9pbXBsOworICAg
IHJldHVybiBpbXBsID8gaW1wbC0+dG9Db29yZHNBcnJheShsZW4pIDogTlVMTDsKK30KKworaW5s
aW5lIGtodG1sOjpMZW5ndGggKkRPTVN0cmluZzo6dG9MZW5ndGhBcnJheShpbnQmIGxlbikgY29u
c3QgCit7IAorICAgIERPTVN0cmluZ0ltcGwgKmltcGwgPSBtX2ltcGw7CisgICAgcmV0dXJuIGlt
cGwgPyBpbXBsLT50b0xlbmd0aEFycmF5KGxlbikgOiBOVUxMOworfQorCit9CiAKLX07CiAjZW5k
aWYKSW5kZXg6IGtodG1sL2VjbWEva2pzX2h0bWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEzOApkaWZmIC1wIC11IC1yMS4xMzgga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAKLS0t
IGtodG1sL2VjbWEva2pzX2h0bWwuY3BwCTI5IEF1ZyAyMDA1IDIxOjI5OjEyIC0wMDAwCTEuMTM4
CisrKyBraHRtbC9lY21hL2tqc19odG1sLmNwcAk1IFNlcCAyMDA1IDE3OjU5OjMyIC0wMDAwCkBA
IC00ODgsOSArNDg4LDkgQEAgdm9pZCBLSlM6OkhUTUxEb2N1bWVudDo6cHV0VmFsdWVQcm9wZXJ0
eQogICAgIHsKICAgICAgIERPTVN0cmluZyBtb2RlU3RyaW5nID0gdmFsdWUtPnRvU3RyaW5nKGV4
ZWMpLmRvbVN0cmluZygpOwogICAgICAgRG9jdW1lbnRJbXBsOjpJbmhlcml0ZWRCb29sIG1vZGU7
Ci0gICAgICBpZiAoIXN0cmNhc2VjbXAobW9kZVN0cmluZywgIm9uIikpCisgICAgICBpZiAoZXF1
YWxzSWdub3JpbmdDYXNlKG1vZGVTdHJpbmcsICJvbiIpKQogICAgICAgICBtb2RlID0gRG9jdW1l
bnRJbXBsOjpvbjsKLSAgICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKG1vZGVTdHJpbmcsICJvZmYi
KSkKKyAgICAgIGVsc2UgaWYgKGVxdWFsc0lnbm9yaW5nQ2FzZShtb2RlU3RyaW5nLCAib2ZmIikp
CiAgICAgICAgIG1vZGUgPSBEb2N1bWVudEltcGw6Om9mZjsKICAgICAgIGVsc2UKICAgICAgICAg
bW9kZSA9IERvY3VtZW50SW1wbDo6aW5oZXJpdDsKSW5kZXg6IGtodG1sL2VkaXRpbmcvYXBwbHlf
c3R5bGVfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xMgpkaWZmIC1wIC11IC1yMS4xMiBraHRtbC9lZGl0aW5nL2FwcGx5X3N0eWxlX2NvbW1h
bmQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2FwcGx5X3N0eWxlX2NvbW1hbmQuY3BwCTIgU2VwIDIw
MDUgMTY6NDU6MzggLTAwMDAJMS4xMgorKysga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21t
YW5kLmNwcAk1IFNlcCAyMDA1IDE3OjU5OjM0IC0wMDAwCkBAIC0xNzAsMTMgKzE3MCwxMyBAQCBi
b29sIFN0eWxlQ2hhbmdlOjpjaGVja0ZvckxlZ2FjeUhUTUxTdHlsCiAgICAgRE9NU3RyaW5nIHZh
bHVlVGV4dChwcm9wZXJ0eS0+dmFsdWUoKS0+Y3NzVGV4dCgpKTsKICAgICBzd2l0Y2ggKHByb3Bl
cnR5LT5pZCgpKSB7CiAgICAgICAgIGNhc2UgQ1NTX1BST1BfRk9OVF9XRUlHSFQ6Ci0gICAgICAg
ICAgICBpZiAoc3RyY2FzZWNtcCh2YWx1ZVRleHQsICJib2xkIikgPT0gMCkgeworICAgICAgICAg
ICAgaWYgKGVxdWFsc0lnbm9yaW5nQ2FzZSh2YWx1ZVRleHQsICJib2xkIikpIHsKICAgICAgICAg
ICAgICAgICBtX2FwcGx5Qm9sZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfUFJP
UF9GT05UX1NUWUxFOgotICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAodmFsdWVUZXh0LCAiaXRh
bGljIikgPT0gMCB8fCBzdHJjYXNlY21wKHZhbHVlVGV4dCwgIm9ibGlxdWUiKSA9PSAwKSB7Cisg
ICAgICAgICAgICBpZiAoZXF1YWxzSWdub3JpbmdDYXNlKHZhbHVlVGV4dCwgIml0YWxpYyIpIHx8
IGVxdWFsc0lnbm9yaW5nQ2FzZSh2YWx1ZVRleHQsICJvYmxpcXVlIikpIHsKICAgICAgICAgICAg
ICAgICBtX2FwcGx5SXRhbGljID0gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgIH0KQEAgLTIyNyw3ICsyMjcsNyBAQCBib29sIFN0eWxlQ2hhbmdlOjpjdXJy
ZW50bHlIYXNTdHlsZShjb25zCiAgICAgU2hhcmVkUHRyPENTU1ZhbHVlSW1wbD4gdmFsdWUgPSBz
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eS0+aWQoKSwgRG9Ob3RVcGRhdGVMYXlv
dXQpOwogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
c3RyY2FzZWNtcCh2YWx1ZS0+Y3NzVGV4dCgpLCBwcm9wZXJ0eS0+dmFsdWUoKS0+Y3NzVGV4dCgp
KSA9PSAwOworICAgIHJldHVybiBlcXVhbHNJZ25vcmluZ0Nhc2UodmFsdWUtPmNzc1RleHQoKSwg
cHJvcGVydHktPnZhbHVlKCktPmNzc1RleHQoKSk7CiB9CiAKIHN0YXRpYyBET01TdHJpbmcgJnN0
eWxlU3BhbkNsYXNzU3RyaW5nKCkKQEAgLTY4OSw3ICs2ODksNyBAQCBzdGF0aWMgYm9vbCBoYXNU
ZXh0RGVjb3JhdGlvblByb3BlcnR5KE5vCiAgICAgRWxlbWVudEltcGwgKmVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxFbGVtZW50SW1wbCAqPihub2RlKTsKICAgICBDU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb25JbXBsIHN0eWxlKGVsZW1lbnQpOwogICAgIFNoYXJlZFB0cjxDU1NWYWx1ZUltcGw+IHZh
bHVlID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NfUFJPUF9URVhUX0RFQ09SQVRJT04s
IERvTm90VXBkYXRlTGF5b3V0KTsKLSAgICByZXR1cm4gdmFsdWUgJiYgc3RyY2FzZWNtcCh2YWx1
ZS0+Y3NzVGV4dCgpLCAibm9uZSIpICE9IDA7CisgICAgcmV0dXJuIHZhbHVlICYmICFlcXVhbHNJ
Z25vcmluZ0Nhc2UodmFsdWUtPmNzc1RleHQoKSwgIm5vbmUiKTsKIH0KIAogc3RhdGljIE5vZGVJ
bXBsKiBoaWdoZXN0QW5jZXN0b3JXaXRoVGV4dERlY29yYXRpb24oTm9kZUltcGwgKm5vZGUpCkBA
IC03MjIsNyArNzIyLDcgQEAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICpBcHBseVN0
eQogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqdGV4dERlY29yYXRpb25TdHls
ZSA9IHN0eWxlLT5jb3B5UHJvcGVydGllc0luU2V0KHByb3BlcnRpZXMsIDEpOwogCiAgICAgU2hh
cmVkUHRyPENTU1ZhbHVlSW1wbD4gcHJvcGVydHkgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NfUFJPUF9URVhUX0RFQ09SQVRJT04pOwotICAgIGlmIChwcm9wZXJ0eSAmJiBzdHJjYXNl
Y21wKHByb3BlcnR5LT5jc3NUZXh0KCksICJub25lIikgIT0gMCkKKyAgICBpZiAocHJvcGVydHkg
JiYgIWVxdWFsc0lnbm9yaW5nQ2FzZShwcm9wZXJ0eS0+Y3NzVGV4dCgpLCAibm9uZSIpKQogICAg
ICAgICByZW1vdmVDU1NQcm9wZXJ0eShzdHlsZS5nZXQoKSwgQ1NTX1BST1BfVEVYVF9ERUNPUkFU
SU9OKTsKIAogICAgIHJldHVybiB0ZXh0RGVjb3JhdGlvblN0eWxlOwpAQCAtNzQ1LDcgKzc0NSw3
IEBAIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqQXBwbHlTdHkKICAgICBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKnRleHREZWNvcmF0aW9uU3R5bGUgPSBjb21wdXRlZFN0
eWxlLT5jb3B5UHJvcGVydGllc0luU2V0KHByb3BlcnRpZXMsIDEpOwogCiAgICAgU2hhcmVkUHRy
PENTU1ZhbHVlSW1wbD4gcHJvcGVydHkgPSBjb21wdXRlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1Zh
bHVlKENTU19QUk9QX1RFWFRfREVDT1JBVElPTik7Ci0gICAgaWYgKHByb3BlcnR5ICYmIHN0cmNh
c2VjbXAocHJvcGVydHktPmNzc1RleHQoKSwgIm5vbmUiKSAhPSAwKSB7CisgICAgaWYgKHByb3Bl
cnR5ICYmICFlcXVhbHNJZ25vcmluZ0Nhc2UocHJvcGVydHktPmNzc1RleHQoKSwgIm5vbmUiKSkg
ewogICAgICAgICBTaGFyZWRQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsPiBuZXdT
dHlsZSA9IHRleHREZWNvcmF0aW9uU3R5bGUtPmNvcHkoKTsKICAgICAgICAgbmV3U3R5bGUtPnNl
dFByb3BlcnR5KENTU19QUk9QX1RFWFRfREVDT1JBVElPTiwgIm5vbmUiKTsKICAgICAgICAgYXBw
bHlUZXh0RGVjb3JhdGlvblN0eWxlKG5vZGUsIG5ld1N0eWxlLmdldCgpKTsKSW5kZXg6IGtodG1s
L2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS44MApkaWZmIC1wIC11IC1yMS44MCBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCi0tLSBr
aHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCTMxIEF1ZyAyMDA1IDA0OjM4OjM4IC0wMDAwCTEu
ODAKKysrIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAJNSBTZXAgMjAwNSAxNzo1OTozNSAt
MDAwMApAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgSFRNTEJvZHlFbGVtZW50SW1wbDo6cGFyc2VN
YXBwZWRBdHQKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB0ZXh0QXR0cikgewogICAg
ICAgICBhZGRDU1NDb2xvcihhdHRyLCBDU1NfUFJPUF9DT0xPUiwgYXR0ci0+dmFsdWUoKSk7CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYmdwcm9wZXJ0aWVzQXR0cikgewotICAgICAg
ICBpZiAoc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgImZpeGVkIiApID09IDApCisgICAgICAg
IGlmIChlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJmaXhlZCIgKSkKICAgICAg
ICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JBQ0tHUk9VTkRfQVRUQUNITUVO
VCwgQ1NTX1ZBTF9GSVhFRCk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdmxpbmtB
dHRyIHx8CiAgICAgICAgICAgICAgICBhdHRyLT5uYW1lKCkgPT0gYWxpbmtBdHRyIHx8CkBAIC00
MTMsMTAgKzQxMywxMCBAQCB2b2lkIEhUTUxGcmFtZUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0
CiAgICAgICAgIGtkRGVidWcoIDYwMzEgKSA8PCAic2V0IHNjcm9sbCBtb2RlIiA8PCBlbmRsOwog
CS8vIEF1dG8gYW5kIHllcyBib3RoIHNpbXBseSBtZWFuICJhbGxvdyBzY3JvbGxpbmcuIiAgTm8g
bWVhbnMKIAkvLyAiZG9uJ3QgYWxsb3cgc2Nyb2xsaW5nLiIKLSAgICAgICAgaWYoIHN0cmNhc2Vj
bXAoIGF0dHItPnZhbHVlKCksICJhdXRvIiApID09IDAgfHwKLSAgICAgICAgICAgIHN0cmNhc2Vj
bXAoIGF0dHItPnZhbHVlKCksICJ5ZXMiICkgPT0gMCApCisgICAgICAgIGlmKCBlcXVhbHNJZ25v
cmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJhdXRvIiApIHx8CisgICAgICAgICAgICBlcXVhbHNJ
Z25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJ5ZXMiICkgKQogICAgICAgICAgICAgbV9zY3Jv
bGxpbmcgPSBRU2Nyb2xsVmlldzo6QXV0bzsKLSAgICAgICAgZWxzZSBpZiggc3RyY2FzZWNtcCgg
YXR0ci0+dmFsdWUoKSwgIm5vIiApID09IDAgKQorICAgICAgICBlbHNlIGlmKCBlcXVhbHNJZ25v
cmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJubyIgKSApCiAgICAgICAgICAgICBtX3Njcm9sbGlu
ZyA9IFFTY3JvbGxWaWV3OjpBbHdheXNPZmY7CiAgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBhcmUg
YWxyZWFkeSBhdHRhY2hlZCwgdGhpcyBoYXMgbm8gZWZmZWN0LgogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IG9ubG9hZEF0dHIpIHsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9ibG9ja2lt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwv
aHRtbF9ibG9ja2ltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI0CmRpZmYgLXAgLXUg
LXIxLjI0IGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxf
YmxvY2tpbXBsLmNwcAkyOSBBdWcgMjAwNSAyMToyOToxNiAtMDAwMAkxLjI0CisrKyBraHRtbC9o
dG1sL2h0bWxfYmxvY2tpbXBsLmNwcAk1IFNlcCAyMDA1IDE3OjU5OjM1IC0wMDAwCkBAIC03OSwx
MSArNzksMTEgQEAgdm9pZCBIVE1MRGl2RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cgogewog
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gYWxpZ25BdHRyKSB7CiAgICAgICAgIERPTVN0cmluZyB2
ID0gYXR0ci0+dmFsdWUoKTsKLQlpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJtaWRk
bGUiICkgPT0gMCB8fCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAiY2VudGVyIiApID09IDAg
KQorCWlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAibWlkZGxlIiApIHx8
IGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgImNlbnRlciIgKSApCiAgICAgICAg
ICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIENTU19WQUxfX0tI
VE1MX0NFTlRFUik7Ci0gICAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYXR0ci0+dmFsdWUoKSwg
ImxlZnQiKSA9PSAwKQorICAgICAgICBlbHNlIGlmIChlcXVhbHNJZ25vcmluZ0Nhc2UoYXR0ci0+
dmFsdWUoKSwgImxlZnQiKSkKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19Q
Uk9QX1RFWFRfQUxJR04sIENTU19WQUxfX0tIVE1MX0xFRlQpOwotICAgICAgICBlbHNlIGlmIChz
dHJjYXNlY21wKGF0dHItPnZhbHVlKCksICJyaWdodCIpID09IDApCisgICAgICAgIGVsc2UgaWYg
KGVxdWFsc0lnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAicmlnaHQiKSkKICAgICAgICAgICAg
IGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIENTU19WQUxfX0tIVE1M
X1JJR0hUKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwg
Q1NTX1BST1BfVEVYVF9BTElHTiwgdik7CkBAIC0xMjgsMTEgKzEyOCwxMSBAQCBib29sIEhUTUxI
UkVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KGNvbnN0CiB2b2lkIEhUTUxIUkVsZW1lbnRJbXBsOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQogewogICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gYWxpZ25BdHRyKSB7Ci0gICAgICAgIGlmIChzdHJjYXNlY21wKGF0
dHItPnZhbHVlKCksICJsZWZ0IikgPT0gMCkgeworICAgICAgICBpZiAoZXF1YWxzSWdub3JpbmdD
YXNlKGF0dHItPnZhbHVlKCksICJsZWZ0IikpIHsKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5
KGF0dHIsIENTU19QUk9QX01BUkdJTl9MRUZULCAiMCIpOwogCSAgICBhZGRDU1NQcm9wZXJ0eShh
dHRyLCBDU1NfUFJPUF9NQVJHSU5fUklHSFQsIENTU19WQUxfQVVUTyk7CiAJfQotICAgICAgICBl
bHNlIGlmIChzdHJjYXNlY21wKGF0dHItPnZhbHVlKCksICJyaWdodCIpID09IDApIHsKKyAgICAg
ICAgZWxzZSBpZiAoZXF1YWxzSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJyaWdodCIpKSB7
CiAJICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX01BUkdJTl9MRUZULCBDU1NfVkFM
X0FVVE8pOwogCSAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9NQVJHSU5fUklHSFQs
ICIwIik7CiAJfQpAQCAtMjY0LDExICsyNjQsMTEgQEAgdm9pZCBIVE1MUGFyYWdyYXBoRWxlbWVu
dEltcGw6OnBhcnNlTWFwcAogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gYWxpZ25BdHRyKSB7
CiAgICAgICAgIERPTVN0cmluZyB2ID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAgaWYgKCBzdHJj
YXNlY21wKCBhdHRyLT52YWx1ZSgpLCAibWlkZGxlIiApID09IDAgfHwgc3RyY2FzZWNtcCggYXR0
ci0+dmFsdWUoKSwgImNlbnRlciIgKSA9PSAwICkKKyAgICAgICAgaWYgKCBlcXVhbHNJZ25vcmlu
Z0Nhc2UoIGF0dHItPnZhbHVlKCksICJtaWRkbGUiICkgfHwgZXF1YWxzSWdub3JpbmdDYXNlKCBh
dHRyLT52YWx1ZSgpLCAiY2VudGVyIiApICkKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0
dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIENTU19WQUxfX0tIVE1MX0NFTlRFUik7Ci0gICAgICAg
IGVsc2UgaWYgKHN0cmNhc2VjbXAoYXR0ci0+dmFsdWUoKSwgImxlZnQiKSA9PSAwKQorICAgICAg
ICBlbHNlIGlmIChlcXVhbHNJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImxlZnQiKSkKICAg
ICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIENTU19W
QUxfX0tIVE1MX0xFRlQpOwotICAgICAgICBlbHNlIGlmIChzdHJjYXNlY21wKGF0dHItPnZhbHVl
KCksICJyaWdodCIpID09IDApCisgICAgICAgIGVsc2UgaWYgKGVxdWFsc0lnbm9yaW5nQ2FzZShh
dHRyLT52YWx1ZSgpLCAicmlnaHQiKSkKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIs
IENTU19QUk9QX1RFWFRfQUxJR04sIENTU19WQUxfX0tIVE1MX1JJR0hUKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfVEVYVF9BTElHTiwg
dik7CkBAIC0zNjIsNyArMzYyLDcgQEAgdm9pZCBIVE1MTWFycXVlZUVsZW1lbnRJbXBsOjpwYXJz
ZU1hcHBlZAogICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX19LSFRNTF9N
QVJRVUVFX1NQRUVELCBhdHRyLT52YWx1ZSgpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBsb29wQXR0cikgewogICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiLTEiIHx8IHN0cmNhc2VjbXAoYXR0
ci0+dmFsdWUoKSwgImluZmluaXRlIikgPT0gMCkKKyAgICAgICAgICAgIGlmIChhdHRyLT52YWx1
ZSgpID09ICItMSIgfHwgZXF1YWxzSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJpbmZpbml0
ZSIpKQogICAgICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX19LSFRN
TF9NQVJRVUVFX1JFUEVUSVRJT04sIENTU19WQUxfSU5GSU5JVEUpOwogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9fS0hUTUxfTUFS
UVVFRV9SRVBFVElUSU9OLCBhdHRyLT52YWx1ZSgpKTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9k
b2N1bWVudGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY5
CmRpZmYgLXAgLXUgLXIxLjY5IGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwCi0tLSBr
aHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAkyOSBBdWcgMjAwNSAyMToyOToxNiAtMDAw
MAkxLjY5CisrKyBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAk1IFNlcCAyMDA1IDE3
OjU5OjM2IC0wMDAwCkBAIC0yNTMsOCArMjUzLDcgQEAgYm9vbCBIVE1MRG9jdW1lbnRJbXBsOjpj
aGlsZEFsbG93ZWQoIE5vZAogRWxlbWVudEltcGwgKkhUTUxEb2N1bWVudEltcGw6OmNyZWF0ZUVs
ZW1lbnQoY29uc3QgRE9NU3RyaW5nICZuYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUpCiB7CiAgICAg
Ly8gRG8gbm90IGNoZWNrIG5hbWUgdmFsaWRpdHkuICBPdGhlciBicm93c2VycyBkb24ndCwgYW5k
IGl0IHRha2VzIHRpbWUuCi0gICAgRE9NU3RyaW5nIGxvd2VyTmFtZShuYW1lLmxvd2VyKCkpOwot
ICAgIHJldHVybiBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUhUTUxFbGVtZW50KEF0b21pY1N0
cmluZyhsb3dlck5hbWUpLCB0aGlzLCAwLCBmYWxzZSk7CisgICAgcmV0dXJuIEhUTUxFbGVtZW50
RmFjdG9yeTo6Y3JlYXRlSFRNTEVsZW1lbnQoQXRvbWljU3RyaW5nKG5hbWUsIGxvd2VyY2FzZWQp
LCB0aGlzLCAwLCBmYWxzZSk7CiB9CiAKIHZvaWQgSFRNTERvY3VtZW50SW1wbDo6c2xvdEhpc3Rv
cnlDaGFuZ2VkKCkKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2VsZW1lbnRp
bXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMDQKZGlmZiAtcCAtdSAtcjEuMTA0IGto
dG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50
aW1wbC5jcHAJMyBTZXAgMjAwNSAyMzowOTo1OSAtMDAwMAkxLjEwNAorKysga2h0bWwvaHRtbC9o
dG1sX2VsZW1lbnRpbXBsLmNwcAk1IFNlcCAyMDA1IDE3OjU5OjM2IC0wMDAwCkBAIC0xMzgsNyAr
MTM4LDcgQEAgdm9pZCBIVE1MRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidQogCiAgICAg
RE9NU3RyaW5nIGluZGV4c3RyaW5nOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gYWxpZ25BdHRy
KSB7Ci0gICAgICAgIGlmIChzdHJjYXNlY21wKGF0dHItPnZhbHVlKCksICJtaWRkbGUiICkgPT0g
MCkKKyAgICAgICAgaWYgKGVxdWFsc0lnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAibWlkZGxl
IiApKQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfVEVYVF9BTElH
TiwgImNlbnRlciIpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShh
dHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBhdHRyLT52YWx1ZSgpKTsKQEAgLTQ2MSwyNSArNDYx
LDI1IEBAIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjphZGRIVE1MQWxpZ25tZW50KE0KICAgICBpbnQg
cHJvcGZsb2F0ID0gLTE7CiAgICAgaW50IHByb3B2YWxpZ24gPSAtMTsKICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGFsaWdubWVudCA9IGF0dHItPnZhbHVlKCk7Ci0gICAgaWYgKCBzdHJjYXNlY21w
KCBhbGlnbm1lbnQsICJhYnNtaWRkbGUiICkgPT0gMCApIHsKKyAgICBpZiAoIGVxdWFsc0lnbm9y
aW5nQ2FzZSggYWxpZ25tZW50LCAiYWJzbWlkZGxlIiApICkgewogICAgICAgICBwcm9wdmFsaWdu
ID0gQ1NTX1ZBTF9NSURETEU7Ci0gICAgfSBlbHNlIGlmICggc3RyY2FzZWNtcCggYWxpZ25tZW50
LCAiYWJzYm90dG9tIiApID09IDAgKSB7CisgICAgfSBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdD
YXNlKCBhbGlnbm1lbnQsICJhYnNib3R0b20iICkgKSB7CiAgICAgICAgIHByb3B2YWxpZ24gPSBD
U1NfVkFMX0JPVFRPTTsKLSAgICB9IGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhbGlnbm1lbnQsICJs
ZWZ0IiApID09IDAgKSB7CisgICAgfSBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhbGln
bm1lbnQsICJsZWZ0IiApICkgewogCXByb3BmbG9hdCA9IENTU19WQUxfTEVGVDsKIAlwcm9wdmFs
aWduID0gQ1NTX1ZBTF9UT1A7Ci0gICAgfSBlbHNlIGlmICggc3RyY2FzZWNtcCggYWxpZ25tZW50
LCAicmlnaHQiICkgPT0gMCApIHsKKyAgICB9IGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2Uo
IGFsaWdubWVudCwgInJpZ2h0IiApICkgewogCXByb3BmbG9hdCA9IENTU19WQUxfUklHSFQ7CiAJ
cHJvcHZhbGlnbiA9IENTU19WQUxfVE9QOwotICAgIH0gZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGFs
aWdubWVudCwgInRvcCIgKSA9PSAwICkgeworICAgIH0gZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5n
Q2FzZSggYWxpZ25tZW50LCAidG9wIiApICkgewogCXByb3B2YWxpZ24gPSBDU1NfVkFMX1RPUDsK
LSAgICB9IGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhbGlnbm1lbnQsICJtaWRkbGUiICkgPT0gMCAp
IHsKKyAgICB9IGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGFsaWdubWVudCwgIm1pZGRs
ZSIgKSApIHsKIAlwcm9wdmFsaWduID0gQ1NTX1ZBTF9fS0hUTUxfQkFTRUxJTkVfTUlERExFOwot
ICAgIH0gZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGFsaWdubWVudCwgImNlbnRlciIgKSA9PSAwICkg
eworICAgIH0gZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYWxpZ25tZW50LCAiY2VudGVy
IiApICkgewogCXByb3B2YWxpZ24gPSBDU1NfVkFMX01JRERMRTsKLSAgICB9IGVsc2UgaWYgKCBz
dHJjYXNlY21wKCBhbGlnbm1lbnQsICJib3R0b20iICkgPT0gMCApIHsKKyAgICB9IGVsc2UgaWYg
KCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGFsaWdubWVudCwgImJvdHRvbSIgKSApIHsKIAlwcm9wdmFs
aWduID0gQ1NTX1ZBTF9CQVNFTElORTsKLSAgICB9IGVsc2UgaWYgKCBzdHJjYXNlY21wICggYWxp
Z25tZW50LCAidGV4dHRvcCIpID09IDAgKSB7CisgICAgfSBlbHNlIGlmICggZXF1YWxzSWdub3Jp
bmdDYXNlICggYWxpZ25tZW50LCAidGV4dHRvcCIpICkgewogCXByb3B2YWxpZ24gPSBDU1NfVkFM
X1RFWFRfVE9QOwogICAgIH0KICAgICAKQEAgLTUzMywxNyArNTMzLDE3IEBAIHZvaWQgSFRNTEVs
ZW1lbnRJbXBsOjpzZXRDb250ZW50RWRpdGFibGUKIHsKICAgICBLSFRNTFBhcnQgKnBhcnQgPSBn
ZXREb2N1bWVudCgpLT5wYXJ0KCk7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBlbmFibGVkID0g
YXR0ci0+dmFsdWUoKTsKLSAgICBpZiAoZW5hYmxlZC5pc0VtcHR5KCkgfHwgc3RyY2FzZWNtcChl
bmFibGVkLCAidHJ1ZSIpID09IDApIHsKKyAgICBpZiAoZW5hYmxlZC5pc0VtcHR5KCkgfHwgZXF1
YWxzSWdub3JpbmdDYXNlKGVuYWJsZWQsICJ0cnVlIikpIHsKICAgICAgICAgYWRkQ1NTUHJvcGVy
dHkoYXR0ciwgQ1NTX1BST1BfX0tIVE1MX1VTRVJfTU9ESUZZLCBDU1NfVkFMX1JFQURfV1JJVEUp
OwogICAgICAgICBpZiAocGFydCkKICAgICAgICAgICAgIHBhcnQtPmFwcGx5RWRpdGluZ1N0eWxl
VG9FbGVtZW50KHRoaXMpOyAgICAKICAgICB9Ci0gICAgZWxzZSBpZiAoc3RyY2FzZWNtcChlbmFi
bGVkLCAiZmFsc2UiKSA9PSAwKSB7CisgICAgZWxzZSBpZiAoZXF1YWxzSWdub3JpbmdDYXNlKGVu
YWJsZWQsICJmYWxzZSIpKSB7CiAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9Q
X19LSFRNTF9VU0VSX01PRElGWSwgQ1NTX1ZBTF9SRUFEX09OTFkpOwogICAgICAgICBpZiAocGFy
dCkKICAgICAgICAgICAgIHBhcnQtPnJlbW92ZUVkaXRpbmdTdHlsZUZyb21FbGVtZW50KHRoaXMp
OyAgICAKICAgICB9Ci0gICAgZWxzZSBpZiAoc3RyY2FzZWNtcChlbmFibGVkLCAiaW5oZXJpdCIp
ID09IDApIHsKKyAgICBlbHNlIGlmIChlcXVhbHNJZ25vcmluZ0Nhc2UoZW5hYmxlZCwgImluaGVy
aXQiKSkgewogICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9fS0hUTUxfVVNF
Ul9NT0RJRlksIENTU19WQUxfSU5IRVJJVCk7CiAgICAgICAgIGlmIChwYXJ0KQogICAgICAgICAg
ICAgcGFydC0+cmVtb3ZlRWRpdGluZ1N0eWxlRnJvbUVsZW1lbnQodGhpcyk7ICAgIApJbmRleDog
a2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjE5MgpkaWZmIC1wIC11IC1yMS4xOTIga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNw
cAotLS0ga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAkzIFNlcCAyMDA1IDIzOjA5OjU5IC0w
MDAwCTEuMTkyCisrKyBraHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwCTUgU2VwIDIwMDUgMTc6
NTk6MzkgLTAwMDAKQEAgLTY1MCw5ICs2NTAsOSBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6
OnBhcnNlTWFwcGVkQXR0CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHRhcmdldEF0dHIp
IHsKICAgICAgICAgbV90YXJnZXQgPSBhdHRyLT52YWx1ZSgpOwogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IG1ldGhvZEF0dHIpIHsKLSAgICAgICAgaWYgKCBzdHJjYXNlY21wKCBhdHRy
LT52YWx1ZSgpLCAicG9zdCIgKSA9PSAwICkKKyAgICAgICAgaWYgKCBlcXVhbHNJZ25vcmluZ0Nh
c2UoIGF0dHItPnZhbHVlKCksICJwb3N0IiApICkKICAgICAgICAgICAgIG1fcG9zdCA9IHRydWU7
Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAiZ2V0IiApID09
IDAgKQorICAgICAgICBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgp
LCAiZ2V0IiApICkKICAgICAgICAgICAgIG1fcG9zdCA9IGZhbHNlOwogICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IGVuY3R5cGVBdHRyKSB7CiAgICAgICAgIHBhcnNlRW5jdHlwZShhdHRy
LT52YWx1ZSgpKTsKQEAgLTY2Myw3ICs2NjMsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6
OnBhcnNlTWFwcGVkQXR0CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWNjZXB0QXR0
cikgewogICAgICAgICAvLyBpZ25vcmUgdGhpcyBvbmUgZm9yIHRoZSBtb21lbnQuLi4KICAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhdXRvY29tcGxldGVBdHRyKSB7Ci0gICAgICAgIG1f
YXV0b2NvbXBsZXRlID0gc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgIm9mZiIgKTsKKyAgICAg
ICAgbV9hdXRvY29tcGxldGUgPSAhZXF1YWxzSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJv
ZmYiKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnN1Ym1pdEF0dHIpIHsKICAg
ICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoc3VibWl0RXZlbnQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHIt
PnZhbHVlKCkucXN0cmluZygpLCB0aGlzKSk7CkBAIC0xMjI1LDExICsxMjI1LDExIEBAIHZvaWQg
SFRNTEJ1dHRvbkVsZW1lbnRJbXBsOjpmb2N1cygpCiB2b2lkIEhUTUxCdXR0b25FbGVtZW50SW1w
bDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAg
ICBpZiAoYXR0ci0+bmFtZSgpID09ICB0eXBlQXR0cikgewotICAgICAgICBpZiAoIHN0cmNhc2Vj
bXAoIGF0dHItPnZhbHVlKCksICJzdWJtaXQiICkgPT0gMCApCisgICAgICAgIGlmICggZXF1YWxz
SWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAic3VibWl0IiApICkKICAgICAgICAgICAgIG1f
dHlwZSA9IFNVQk1JVDsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVl
KCksICJyZXNldCIgKSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2Fz
ZSggYXR0ci0+dmFsdWUoKSwgInJlc2V0IiApICkKICAgICAgICAgICAgIG1fdHlwZSA9IFJFU0VU
OwotICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgImJ1dHRvbiIg
KSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFs
dWUoKSwgImJ1dHRvbiIgKSApCiAgICAgICAgICAgICBtX3R5cGUgPSBCVVRUT047CiAgICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdmFsdWVBdHRyKSB7CiAgICAgICAgIG1fdmFsdWUgPSBh
dHRyLT52YWx1ZSgpOwpAQCAtMTQzNSwzMCArMTQzNSwzMCBAQCB2b2lkIEhUTUxJbnB1dEVsZW1l
bnRJbXBsOjpzZXRJbnB1dFR5cGUoCiB7CiAgICAgdHlwZUVudW0gbmV3VHlwZTsKICAgICAKLSAg
ICBpZiAoIHN0cmNhc2VjbXAoIHQsICJwYXNzd29yZCIgKSA9PSAwICkKKyAgICBpZiAoIGVxdWFs
c0lnbm9yaW5nQ2FzZSggdCwgInBhc3N3b3JkIiApICkKICAgICAgICAgbmV3VHlwZSA9IFBBU1NX
T1JEOwotICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCB0LCAiY2hlY2tib3giICkgPT0gMCApCisg
ICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggdCwgImNoZWNrYm94IiApICkKICAgICAg
ICAgbmV3VHlwZSA9IENIRUNLQk9YOwotICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCB0LCAicmFk
aW8iICkgPT0gMCApCisgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggdCwgInJhZGlv
IiApICkKICAgICAgICAgbmV3VHlwZSA9IFJBRElPOwotICAgIGVsc2UgaWYgKCBzdHJjYXNlY21w
KCB0LCAic3VibWl0IiApID09IDAgKQorICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2Uo
IHQsICJzdWJtaXQiICkgKQogICAgICAgICBuZXdUeXBlID0gU1VCTUlUOwotICAgIGVsc2UgaWYg
KCBzdHJjYXNlY21wKCB0LCAicmVzZXQiICkgPT0gMCApCisgICAgZWxzZSBpZiAoIGVxdWFsc0ln
bm9yaW5nQ2FzZSggdCwgInJlc2V0IiApICkKICAgICAgICAgbmV3VHlwZSA9IFJFU0VUOwotICAg
IGVsc2UgaWYgKCBzdHJjYXNlY21wKCB0LCAiZmlsZSIgKSA9PSAwICkKKyAgICBlbHNlIGlmICgg
ZXF1YWxzSWdub3JpbmdDYXNlKCB0LCAiZmlsZSIgKSApCiAgICAgICAgIG5ld1R5cGUgPSBGSUxF
OwotICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCB0LCAiaGlkZGVuIiApID09IDAgKQorICAgIGVs
c2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIHQsICJoaWRkZW4iICkgKQogICAgICAgICBuZXdU
eXBlID0gSElEREVOOwotICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCB0LCAiaW1hZ2UiICkgPT0g
MCApCisgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggdCwgImltYWdlIiApICkKICAg
ICAgICAgbmV3VHlwZSA9IElNQUdFOwotICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCB0LCAiYnV0
dG9uIiApID09IDAgKQorICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIHQsICJidXR0
b24iICkgKQogICAgICAgICBuZXdUeXBlID0gQlVUVE9OOwotICAgIGVsc2UgaWYgKCBzdHJjYXNl
Y21wKCB0LCAia2h0bWxfaXNpbmRleCIgKSA9PSAwICkKKyAgICBlbHNlIGlmICggZXF1YWxzSWdu
b3JpbmdDYXNlKCB0LCAia2h0bWxfaXNpbmRleCIgKSApCiAgICAgICAgIG5ld1R5cGUgPSBJU0lO
REVYOwogI2lmIEFQUExFX0NIQU5HRVMKLSAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggdCwgInNl
YXJjaCIgKSA9PSAwICkKKyAgICBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCB0LCAic2Vh
cmNoIiApICkKICAgICAgICAgbmV3VHlwZSA9IFNFQVJDSDsKLSAgICBlbHNlIGlmICggc3RyY2Fz
ZWNtcCggdCwgInJhbmdlIiApID09IDAgKQorICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nh
c2UoIHQsICJyYW5nZSIgKSApCiAgICAgICAgIG5ld1R5cGUgPSBSQU5HRTsKICNlbmRpZgogICAg
IGVsc2UKQEAgLTE3ODcsNyArMTc4Nyw3IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudEltcGw6Om1h
cFRvRW50cnkoY28KIHZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBhdXRvY29tcGxldGVBdHRyKSB7Ci0gICAgICAgIG1fYXV0b2NvbXBsZXRlID0gc3RyY2FzZWNt
cCggYXR0ci0+dmFsdWUoKSwgIm9mZiIgKTsKKyAgICAgICAgbV9hdXRvY29tcGxldGUgPSAhZXF1
YWxzSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJvZmYiKTsKICAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSAgdHlwZUF0dHIpIHsKICAgICAgICAgc2V0SW5wdXRUeXBlKGF0dHItPnZh
bHVlKCkpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZhbHVlQXR0cikgewpAQCAt
MzIyNSw3ICszMjI1LDcgQEAgYm9vbCBIVE1MS2V5Z2VuRWxlbWVudEltcGw6OmFwcGVuZEZvcm1E
YQogewogI2lmIEFQUExFX0NIQU5HRVMKICAgICAvLyBPbmx5IFJTQSBpcyBzdXBwb3J0ZWQgYXQg
dGhpcyB0aW1lLgotICAgIGlmICghbV9rZXlUeXBlLmlzTnVsbCgpICYmIHN0cmNhc2VjbXAobV9r
ZXlUeXBlLCAicnNhIikpIHsKKyAgICBpZiAoIW1fa2V5VHlwZS5pc051bGwoKSAmJiAhZXF1YWxz
SWdub3JpbmdDYXNlKG1fa2V5VHlwZSwgInJzYSIpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgUVN0cmluZyB2YWx1ZSA9IEtTU0xLZXlHZW46OnNpZ25lZFB1YmxpY0tleUFu
ZENoYWxsZW5nZVN0cmluZyhzZWxlY3RlZEluZGV4KCksIG1fY2hhbGxlbmdlLnFzdHJpbmcoKSwg
Z2V0RG9jdW1lbnQoKS0+cGFydCgpLT5iYXNlVVJMKCkpOwpAQCAtMzU3MSwxMyArMzU3MSwxMyBA
QCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlCiAgICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gd3JhcEF0dHIpIHsKICAgICAgICAgLy8gdmlydHVhbCAvIHBoeXNp
Y2FsIGlzIE5ldHNjYXBlIGV4dGVuc2lvbiBvZiBIVE1MIDMuMCwgbm93IGRlcHJlY2F0ZWQKICAg
ICAgICAgLy8gc29mdC8gaGFyZCAvIG9mZiBpcyByZWNvbW1lbmRhdGlvbiBmb3IgSFRNTCA0IGV4
dGVuc2lvbiBieSBJRSBhbmQgTlMgNAotICAgICAgICBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZh
bHVlKCksICJ2aXJ0dWFsIiApID09IDAgIHx8IHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJz
b2Z0IikgPT0gMCkKKyAgICAgICAgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZhbHVl
KCksICJ2aXJ0dWFsIiApICB8fCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJz
b2Z0IikpCiAgICAgICAgICAgICBtX3dyYXAgPSB0YV9WaXJ0dWFsOwotICAgICAgICBlbHNlIGlm
ICggc3RyY2FzZWNtcCAoIGF0dHItPnZhbHVlKCksICJwaHlzaWNhbCIgKSA9PSAwIHx8IHN0cmNh
c2VjbXAoIGF0dHItPnZhbHVlKCksICJoYXJkIikgPT0gMCkKKyAgICAgICAgZWxzZSBpZiAoIGVx
dWFsc0lnbm9yaW5nQ2FzZSAoIGF0dHItPnZhbHVlKCksICJwaHlzaWNhbCIgKSB8fCBlcXVhbHNJ
Z25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJoYXJkIikpCiAgICAgICAgICAgICBtX3dyYXAg
PSB0YV9QaHlzaWNhbDsKLSAgICAgICAgZWxzZSBpZihzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgp
LCAib24iICkgPT0gMCkKKyAgICAgICAgZWxzZSBpZihlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHIt
PnZhbHVlKCksICJvbiIgKSkKICAgICAgICAgICAgIG1fd3JhcCA9IHRhX1BoeXNpY2FsOwotICAg
ICAgICBlbHNlIGlmKHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJvZmYiKSA9PSAwKQorICAg
ICAgICBlbHNlIGlmKGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgIm9mZiIpKQog
ICAgICAgICAgICAgbV93cmFwID0gdGFfTm9XcmFwOwogICAgICAgICBpZiAocmVuZGVyZXIoKSkK
ICAgICAgICAgICAgIHJlbmRlcmVyKCktPnNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7
CkluZGV4OiBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS41MApkaWZmIC1wIC11IC1yMS41MCBraHRtbC9odG1sL2h0bWxfaW1h
Z2VpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAJMzEgQXVnIDIwMDUg
MDQ6Mzg6MzggLTAwMDAJMS41MAorKysga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAJNSBT
ZXAgMjAwNSAxNzo1OTo0MCAtMDAwMApAQCAtNTk4LDEzICs1OTgsMTMgQEAgSFRNTEFyZWFFbGVt
ZW50SW1wbDo6fkhUTUxBcmVhRWxlbWVudEltcAogdm9pZCBIVE1MQXJlYUVsZW1lbnRJbXBsOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQogewogICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gc2hhcGVBdHRyKSB7Ci0gICAgICAgIGlmICggc3RyY2FzZWNtcCgg
YXR0ci0+dmFsdWUoKSwgImRlZmF1bHQiICkgPT0gMCApCisgICAgICAgIGlmICggZXF1YWxzSWdu
b3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAiZGVmYXVsdCIgKSApCiAgICAgICAgICAgICBtX3No
YXBlID0gRGVmYXVsdDsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVl
KCksICJjaXJjbGUiICkgPT0gMCApCisgICAgICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nh
c2UoIGF0dHItPnZhbHVlKCksICJjaXJjbGUiICkgKQogICAgICAgICAgICAgbV9zaGFwZSA9IENp
cmNsZTsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJwb2x5
IiApID09IDAgKQorICAgICAgICBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52
YWx1ZSgpLCAicG9seSIgKSApCiAgICAgICAgICAgICBtX3NoYXBlID0gUG9seTsKLSAgICAgICAg
ZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJyZWN0IiApID09IDAgKQorICAg
ICAgICBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAicmVjdCIg
KSApCiAgICAgICAgICAgICBtX3NoYXBlID0gUmVjdDsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBjb29yZHNBdHRyKSB7CiAgICAgICAgIGlmIChtX2Nvb3JkcykgZGVsZXRlIFtdIG1f
Y29vcmRzOwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41MApkaWZmIC1wIC11IC1yMS41MCBraHRtbC9odG1s
L2h0bWxfaW5saW5laW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAkz
IFNlcCAyMDA1IDIzOjA5OjU5IC0wMDAwCTEuNTAKKysrIGtodG1sL2h0bWwvaHRtbF9pbmxpbmVp
bXBsLmNwcAk1IFNlcCAyMDA1IDE3OjU5OjQwIC0wMDAwCkBAIC00MDcsNyArNDA3LDcgQEAgdm9p
ZCBIVE1MQlJFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaQogICAgICAgICAvLyA8YnIgY2xl
YXI+IGFuZCA8YnIgY2xlYXI9IiI+IGFyZSBqdXN0IHRyZWF0ZWQgbGlrZSA8YnI+IGJ5IEdlY2tv
LAogICAgICAgICAvLyBNYWMgSUUsIGV0Yy4gLWR3aAogICAgICAgICBpZiAoIXN0ci5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIGlmIChzdHJjYXNlY21wKHN0ciwiYWxsIikgPT0gMCkgCisgICAg
ICAgICAgICBpZiAoZXF1YWxzSWdub3JpbmdDYXNlKHN0ciwiYWxsIikpIAogICAgICAgICAgICAg
ICAgIHN0ciA9ICJib3RoIjsKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19Q
Uk9QX0NMRUFSLCBzdHIpOwogICAgICAgICB9CkluZGV4OiBraHRtbC9odG1sL2h0bWxfbGlzdGlt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwv
aHRtbF9saXN0aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAtcCAtdSAt
cjEuMTQga2h0bWwvaHRtbC9odG1sX2xpc3RpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2xp
c3RpbXBsLmNwcAkyNSBBdWcgMjAwNSAyMzoxMzo0OSAtMDAwMAkxLjE0CisrKyBraHRtbC9odG1s
L2h0bWxfbGlzdGltcGwuY3BwCTUgU2VwIDIwMDUgMTc6NTk6NDAgLTAwMDAKQEAgLTExMCwxNSAr
MTEwLDE1IEBAIGJvb2wgSFRNTE9MaXN0RWxlbWVudEltcGw6Om1hcFRvRW50cnkoY28KIHZvaWQg
SFRNTE9MaXN0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZUltcGwgKmF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSB0eXBlQXR0cikgewotICAg
ICAgICBpZiAoIHN0cmNtcCggYXR0ci0+dmFsdWUoKSwgImEiICkgPT0gMCApCisgICAgICAgIGlm
IChhdHRyLT52YWx1ZSgpID09ICJhIikKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIs
IENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9MT1dFUl9BTFBIQSk7Ci0gICAgICAg
IGVsc2UgaWYgKCBzdHJjbXAoIGF0dHItPnZhbHVlKCksICJBIiApID09IDAgKQorICAgICAgICBl
bHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJBIikKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5
KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9VUFBFUl9BTFBIQSk7Ci0g
ICAgICAgIGVsc2UgaWYgKCBzdHJjbXAoIGF0dHItPnZhbHVlKCksICJpIiApID09IDAgKQorICAg
ICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJpIikKICAgICAgICAgICAgIGFkZENTU1By
b3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9MT1dFUl9ST01B
Tik7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjbXAoIGF0dHItPnZhbHVlKCksICJJIiApID09IDAg
KQorICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJJIikKICAgICAgICAgICAgIGFk
ZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9VUFBF
Ul9ST01BTik7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjbXAoIGF0dHItPnZhbHVlKCksICIxIiAp
ID09IDAgKQorICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICIxIikKICAgICAgICAg
ICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZB
TF9ERUNJTUFMKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzdGFydEF0dHIpIHsK
ICAgICAgICAgX3N0YXJ0ID0gIWF0dHItPmlzTnVsbCgpID8gYXR0ci0+dmFsdWUoKS50b0ludCgp
IDogMTsKQEAgLTE3NywxNSArMTc3LDE1IEBAIHZvaWQgSFRNTExJRWxlbWVudEltcGw6OnBhcnNl
TWFwcGVkQXR0cmkKICAgICAgICAgICAgIGxpc3QtPnNldFZhbHVlKHJlcXVlc3RlZFZhbHVlKTsK
ICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHR5cGVBdHRyKSB7Ci0g
ICAgICAgIGlmICggc3RyY21wKCBhdHRyLT52YWx1ZSgpLCAiYSIgKSA9PSAwICkKKyAgICAgICAg
aWYgKGF0dHItPnZhbHVlKCkgPT0gImEiKQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0
ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFMX0xPV0VSX0FMUEhBKTsKLSAgICAg
ICAgZWxzZSBpZiAoIHN0cmNtcCggYXR0ci0+dmFsdWUoKSwgIkEiICkgPT0gMCApCisgICAgICAg
IGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gIkEiKQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVy
dHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFMX1VQUEVSX0FMUEhBKTsK
LSAgICAgICAgZWxzZSBpZiAoIHN0cmNtcCggYXR0ci0+dmFsdWUoKSwgImkiICkgPT0gMCApCisg
ICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gImkiKQogICAgICAgICAgICAgYWRkQ1NT
UHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFMX0xPV0VSX1JP
TUFOKTsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNtcCggYXR0ci0+dmFsdWUoKSwgIkkiICkgPT0g
MCApCisgICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gIkkiKQogICAgICAgICAgICAg
YWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFMX1VQ
UEVSX1JPTUFOKTsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNtcCggYXR0ci0+dmFsdWUoKSwgIjEi
ICkgPT0gMCApCisgICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gIjEiKQogICAgICAg
ICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1Nf
VkFMX0RFQ0lNQUwpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShh
dHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIGF0dHItPnZhbHVlKCkpOwpJbmRleDoga2h0
bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNjIKZGlmZiAtcCAtdSAtcjEuNjIga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAK
LS0tIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCTMxIEF1ZyAyMDA1IDE1OjM2OjEyIC0w
MDAwCTEuNjIKKysrIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCTUgU2VwIDIwMDUgMTc6
NTk6NDEgLTAwMDAKQEAgLTQ3MywzNiArNDczLDM2IEBAIHZvaWQgSFRNTFRhYmxlRWxlbWVudElt
cGw6OnBhcnNlTWFwcGVkQXQKICAgICAgICAgICAgIGFkZENTU0ltYWdlUHJvcGVydHkoYXR0ciwg
Q1NTX1BST1BfQkFDS0dST1VORF9JTUFHRSwgZ2V0RG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJs
KSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gZnJhbWVBdHRyKSB7CiAjaWYgMAot
ICAgICAgICBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJ2b2lkIiApID09IDAgKQor
ICAgICAgICBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgInZvaWQiICkg
KQogICAgICAgICAgICAgZnJhbWUgPSBWb2lkOwotICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNt
cCggYXR0ci0+dmFsdWUoKSwgImJvcmRlciIgKSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiAoIGVx
dWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgImJvcmRlciIgKSApCiAgICAgICAgICAg
ICBmcmFtZSA9IEJveDsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVl
KCksICJib3giICkgPT0gMCApCisgICAgICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2Uo
IGF0dHItPnZhbHVlKCksICJib3giICkgKQogICAgICAgICAgICAgZnJhbWUgPSBCb3g7Ci0gICAg
ICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAiaHNpZGVzIiApID09IDAg
KQorICAgICAgICBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAi
aHNpZGVzIiApICkKICAgICAgICAgICAgIGZyYW1lID0gSHNpZGVzOwotICAgICAgICBlbHNlIGlm
ICggc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgInZzaWRlcyIgKSA9PSAwICkKKyAgICAgICAg
ZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgInZzaWRlcyIgKSAp
CiAgICAgICAgICAgICBmcmFtZSA9IFZzaWRlczsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNhc2Vj
bXAoIGF0dHItPnZhbHVlKCksICJhYm92ZSIgKSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiAoIGVx
dWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgImFib3ZlIiApICkKICAgICAgICAgICAg
IGZyYW1lID0gQWJvdmU7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1
ZSgpLCAiYmVsb3ciICkgPT0gMCApCisgICAgICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nh
c2UoIGF0dHItPnZhbHVlKCksICJiZWxvdyIgKSApCiAgICAgICAgICAgICBmcmFtZSA9IEJlbG93
OwotICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgImxocyIgKSA9
PSAwICkKKyAgICAgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUo
KSwgImxocyIgKSApCiAgICAgICAgICAgICBmcmFtZSA9IExoczsKLSAgICAgICAgZWxzZSBpZiAo
IHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJyaHMiICkgPT0gMCApCisgICAgICAgIGVsc2Ug
aWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJyaHMiICkgKQogICAgICAg
ICAgICAgZnJhbWUgPSBSaHM7CiAjZW5kaWYKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBydWxlc0F0dHIpIHsKICNpZiAwCi0gICAgICAgIGlmICggc3RyY2FzZWNtcCggYXR0ci0+dmFs
dWUoKSwgIm5vbmUiICkgPT0gMCApCisgICAgICAgIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBh
dHRyLT52YWx1ZSgpLCAibm9uZSIgKSApCiAgICAgICAgICAgICBydWxlcyA9IE5vbmU7Ci0gICAg
ICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAiZ3JvdXBzIiApID09IDAg
KQorICAgICAgICBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAi
Z3JvdXBzIiApICkKICAgICAgICAgICAgIHJ1bGVzID0gR3JvdXBzOwotICAgICAgICBlbHNlIGlm
ICggc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgInJvd3MiICkgPT0gMCApCisgICAgICAgIGVs
c2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJyb3dzIiApICkKICAg
ICAgICAgICAgIHJ1bGVzID0gUm93czsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGF0
dHItPnZhbHVlKCksICJjb2xzIiApID09IDAgKQorICAgICAgICBlbHNlIGlmICggZXF1YWxzSWdu
b3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAiY29scyIgKSApCiAgICAgICAgICAgICBydWxlcyA9
IENvbHM7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAiYWxs
IiApID09IDAgKQorICAgICAgICBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52
YWx1ZSgpLCAiYWxsIiApICkKICAgICAgICAgICAgIHJ1bGVzID0gQWxsOwogI2VuZGlmCiAgICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gY2VsbHNwYWNpbmdBdHRyKSB7CkBAIC03NjAsMTMg
Kzc2MCwxMyBAQCB2b2lkIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbDo6cGFyc2VNYXBwCiAgICAg
ICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9WRVJUSUNBTF9BTElHTiwgYXR0
ci0+dmFsdWUoKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWxpZ25BdHRyKSB7
CiAgICAgICAgIERPTVN0cmluZyB2ID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAgaWYgKCBzdHJj
YXNlY21wKCBhdHRyLT52YWx1ZSgpLCAibWlkZGxlIiApID09IDAgfHwgc3RyY2FzZWNtcCggYXR0
ci0+dmFsdWUoKSwgImNlbnRlciIgKSA9PSAwICkKKyAgICAgICAgaWYgKCBlcXVhbHNJZ25vcmlu
Z0Nhc2UoIGF0dHItPnZhbHVlKCksICJtaWRkbGUiICkgfHwgZXF1YWxzSWdub3JpbmdDYXNlKCBh
dHRyLT52YWx1ZSgpLCAiY2VudGVyIiApICkKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0
dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIENTU19WQUxfX0tIVE1MX0NFTlRFUik7Ci0gICAgICAg
IGVsc2UgaWYgKHN0cmNhc2VjbXAoYXR0ci0+dmFsdWUoKSwgImFic21pZGRsZSIpID09IDApCisg
ICAgICAgIGVsc2UgaWYgKGVxdWFsc0lnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiYWJzbWlk
ZGxlIikpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FM
SUdOLCBDU1NfVkFMX0NFTlRFUik7Ci0gICAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYXR0ci0+
dmFsdWUoKSwgImxlZnQiKSA9PSAwKQorICAgICAgICBlbHNlIGlmIChlcXVhbHNJZ25vcmluZ0Nh
c2UoYXR0ci0+dmFsdWUoKSwgImxlZnQiKSkKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0
dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIENTU19WQUxfX0tIVE1MX0xFRlQpOwotICAgICAgICBl
bHNlIGlmIChzdHJjYXNlY21wKGF0dHItPnZhbHVlKCksICJyaWdodCIpID09IDApCisgICAgICAg
IGVsc2UgaWYgKGVxdWFsc0lnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAicmlnaHQiKSkKICAg
ICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIENTU19W
QUxfX0tIVE1MX1JJR0hUKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVy
dHkoYXR0ciwgQ1NTX1BST1BfVEVYVF9BTElHTiwgdik7CkluZGV4OiBraHRtbC9odG1sL2h0bWxw
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0
bWwvaHRtbHBhcnNlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEwCmRpZmYgLXAgLXUg
LXIxLjExMCBraHRtbC9odG1sL2h0bWxwYXJzZXIuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxwYXJz
ZXIuY3BwCTEgU2VwIDIwMDUgMjM6NDA6MzUgLTAwMDAJMS4xMTAKKysrIGtodG1sL2h0bWwvaHRt
bHBhcnNlci5jcHAJNSBTZXAgMjAwNSAxNzo1OTo0MyAtMDAwMApAQCAtMzk4LDcgKzM5OCw3IEBA
IGJvb2wgSFRNTFBhcnNlcjo6aGFuZGxlRXJyb3IoTm9kZUltcGwqIG4KICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKGlucHV0
VGFnKSkgewogICAgICAgICAgICAgRE9NU3RyaW5nIHR5cGUgPSBoLT5nZXRBdHRyaWJ1dGUodHlw
ZUF0dHIpOwotICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAodHlwZSwgImhpZGRlbiIpID09IDAg
JiYgZm9ybSkgeworICAgICAgICAgICAgaWYgKGVxdWFsc0lnbm9yaW5nQ2FzZSh0eXBlLCAiaGlk
ZGVuIikgJiYgZm9ybSkgewogICAgICAgICAgICAgICAgIGZvcm0tPmFkZENoaWxkKG4pOwogICAg
ICAgICAgICAgICAgIGlmICghbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQogICAgICAgICAg
ICAgICAgICAgICBuLT5hdHRhY2goKTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1s
dG9rZW5pemVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMDkKZGlmZiAtcCAtdSAtcjEu
MTA5IGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbHRva2Vu
aXplci5jcHAJMjcgQXVnIDIwMDUgMDA6MTI6MzMgLTAwMDAJMS4xMDkKKysrIGtodG1sL2h0bWwv
aHRtbHRva2VuaXplci5jcHAJNSBTZXAgMjAwNSAxNzo1OTo0NCAtMDAwMApAQCAtMTgwMyw3ICsx
ODAzLDcgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpmaW5pc2goKQogICAgICAgICAgICAgZm9vZCAr
PSBRU3RyaW5nKHNjcmlwdENvZGUsIHNjcmlwdENvZGVTaXplKTsKICAgICAgICAgfQogICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIHBvcyA9IFFDb25zdFN0cmluZyhzY3JpcHRDb2RlLCBzY3Jp
cHRDb2RlU2l6ZSkucXN0cmluZygpLmZpbmQoJz4nKTsKKyAgICAgICAgICAgIHBvcyA9IFFDb25z
dFN0cmluZyhzY3JpcHRDb2RlLCBzY3JpcHRDb2RlU2l6ZSkuc3RyaW5nKCkuZmluZCgnPicpOwog
ICAgICAgICAgICAgZm9vZC5zZXRVbmljb2RlKHNjcmlwdENvZGUrcG9zKzEsIHNjcmlwdENvZGVT
aXplLXBvcy0xKTsgLy8gZGVlcCBjb3B5CiAgICAgICAgIH0KICAgICAgICAgS0hUTUxfREVMRVRF
X1FDSEFSX1ZFQyhzY3JpcHRDb2RlKTsKSW5kZXg6IGtodG1sL21pc2MvZGVjb2Rlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvbWlzYy9kZWNvZGVyLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MgpkaWZmIC1wIC11IC1yMS40MiBraHRtbC9taXNj
L2RlY29kZXIuY3BwCi0tLSBraHRtbC9taXNjL2RlY29kZXIuY3BwCTEgU2VwIDIwMDUgMDU6Mzc6
MTcgLTAwMDAJMS40MgorKysga2h0bWwvbWlzYy9kZWNvZGVyLmNwcAk1IFNlcCAyMDA1IDE3OjU5
OjQ0IC0wMDAwCkBAIC00Myw2ICs0Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIHVzaW5n
IG5hbWVzcGFjZSBET006OkhUTUxOYW1lczsKIAogdXNpbmcgRE9NOjpBdG9taWNTdHJpbmc7Cit1
c2luZyBET006Omxvd2VyY2FzZWQ7CiB1c2luZyBET006Om51bGxBdG9tOwogCiBjbGFzcyBLYW5q
aUNvZGUKQEAgLTUyNywyNCArNTI4LDEzIEBAIFFTdHJpbmcgRGVjb2Rlcjo6ZGVjb2RlKGNvbnN0
IGNoYXIgKmRhdGEKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAg
IGlmKCpwdHIgPT0gJy8nKSBwdHIrKywgZW5kPXRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGNo
YXIgdG1wWzIwXTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RhcnQgPSBwdHI7
CiAgICAgICAgICAgICAgICAgICAgIGludCBsZW4gPSAwOwotICAgICAgICAgICAgICAgICAgICB3
aGlsZSAoCi0gICAgICAgICAgICAgICAgICAgICAgICAoKCpwdHIgPj0gJ2EnKSAmJiAoKnB0ciA8
PSAneicpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKCpwdHIgPj0gJ0EnKSAmJiAoKnB0
ciA8PSAnWicpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKCpwdHIgPj0gJzAnKSAmJiAo
KnB0ciA8PSAnOScpKQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgbGVuIDwgMTkgKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0bXBbbGVuXSA9IHRv
bG93ZXIoICpwdHIgKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGlzYWxudW0oKnB0cikg
JiYgbGVuIDwgMTkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHB0cisrOwogICAgICAgICAg
ICAgICAgICAgICAgICAgbGVuKys7CiAgICAgICAgICAgICAgICAgICAgIH0KLQkJICAgIHRtcFts
ZW5dID0gMDsKLSAgICAgICAgICAgICAgICAgICAgQXRvbWljU3RyaW5nIHRhZyh0bXApOwotICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PSB0aXRsZVRh
ZykKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpblRpdGxlID0gIWVuZDsKLSAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIEF0b21pY1N0cmluZyB0YWcoc3RhcnQs
IGxlbiwgbG93ZXJjYXNlZCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZW5kICYmIHRhZyA9
PSBtZXRhVGFnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCBhIG1ldGEgdGFn
Li4uCiAgICAgICAgICAgICAgICAgICAgICAgICAvL3B0ciArPSA1OwpAQCAtNTg4LDcgKzU3OCw3
IEBAIFFTdHJpbmcgRGVjb2Rlcjo6ZGVjb2RlKGNvbnN0IGNoYXIgKmRhdGEKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0YWcgIT0gbGlua1RhZyAmJiB0YWcgIT0gbWV0YVRhZyAmJiB0
YWcgIT0gb2JqZWN0VGFnICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnICE9
IHRpdGxlVGFnICYmIHRhZyAhPSBiYXNlVGFnICYmIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChlbmQgfHwgdGFnICE9IGh0bWxUYWcpICYmICF3aXRoaW5UaXRsZSAmJgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICh0YWcgIT0gaGVhZFRhZykgJiYgaXNhbHBoYSh0bXBb
MF0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhZyAhPSBoZWFkVGFnKSAm
JiBpc2FscGhhKCpzdGFydCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSB0cnVl
OwogI2lmZGVmIERFQ09ERV9ERUJVRwogICAgICAgICAgICAgICAgICAgICAgICAga2REZWJ1Zygg
NjAwNSApIDw8ICJEZWNvZGVyOiBubyBjaGFyc2V0IGZvdW5kIChiYWlsaW5nIGJlY2F1c2Ugb2Yg
XCIiIDw8IHRhZy5hc2NpaSgpIDw8ICJcIikuIiA8PCBlbmRsOwpJbmRleDoga2h0bWwvcmVuZGVy
aW5nL3JlbmRlcl9mbGV4Ym94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ZsZXhib3guY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjI1CmRpZmYgLXAgLXUgLXIxLjI1IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZmxleGJv
eC5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZmxleGJveC5jcHAJMjkgSnVsIDIwMDUg
MjM6NDI6NDkgLTAwMDAJMS4yNQorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mbGV4Ym94LmNw
cAk1IFNlcCAyMDA1IDE3OjU5OjQ2IC0wMDAwCkBAIC03NTMsOSArNzUzLDkgQEAgdm9pZCBSZW5k
ZXJGbGV4aWJsZUJveDo6bGF5b3V0VmVydGljYWxCbwogICAgICAgICAgICAgICAgIGlmICghbGFz
dFZpc2libGVMaW5lKSBjb250aW51ZTsKIAogICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IHNob3J0IGVsbGlwc2lzQW5kU3BhY2VbMl0gPSB7IDB4MjAyNiwgJyAnIH07Ci0gICAgICAgICAg
ICAgICAgc3RhdGljIEF0b21pY1N0cmluZyBlbGxpcHNpc0FuZFNwYWNlU3RyKGVsbGlwc2lzQW5k
U3BhY2UsIDIpOworICAgICAgICAgICAgICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgZWxsaXBzaXNB
bmRTcGFjZVN0cihyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyICo+KGVsbGlwc2lzQW5kU3Bh
Y2UpLCAyKTsKICAgICAgICAgICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUobnVtVmlz
aWJsZUxpbmVzID09IDEpLT5odG1sRm9udCgpOwotICAgICAgICAgICAgICAgIGludCBlbGxpcHNp
c0FuZFNwYWNlV2lkdGggPSBmb250LndpZHRoKGNvbnN0X2Nhc3Q8UUNoYXIqPihlbGxpcHNpc0Fu
ZFNwYWNlU3RyLnVuaWNvZGUoKSksIDIsIDAsIDIsIDAsIDApOworICAgICAgICAgICAgICAgIGlu
dCBlbGxpcHNpc0FuZFNwYWNlV2lkdGggPSBmb250LndpZHRoKGNvbnN0X2Nhc3Q8UUNoYXIgKj4o
ZWxsaXBzaXNBbmRTcGFjZVN0ci51bmljb2RlKCkpLCAyLCAwLCAyLCAwLCAwKTsKIAogICAgICAg
ICAgICAgICAgIC8vIEdldCBlbGxpcHNpcyB3aWR0aCArICIgIiArIGFuY2hvciB3aWR0aAogICAg
ICAgICAgICAgICAgIGludCB0b3RhbFdpZHRoID0gZWxsaXBzaXNBbmRTcGFjZVdpZHRoICsgYW5j
aG9yQm94LT53aWR0aCgpOwpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVu
ZGVyX2Zvcm0uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyMQpkaWZmIC1wIC11IC1yMS4x
MjEga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9mb3JtLmNwcAkzIFNlcCAyMDA1IDIzOjEwOjAwIC0wMDAwCTEuMTIxCisrKyBraHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCTUgU2VwIDIwMDUgMTc6NTk6NDcgLTAwMDAKQEAgLTE3
MTcsOCArMTcxNyw4IEBAIHZvaWQgUmVuZGVyU2xpZGVyOjp1cGRhdGVGcm9tRWxlbWVudCgpCiAg
ICAgZG91YmxlIHZhbCA9IHZhbHVlLmlzTnVsbCgpID8gKG1heFZhbCArIG1pblZhbCkvMi4wIDog
dmFsdWUucXN0cmluZygpLnRvRG91YmxlKCk7CiAgICAgdmFsID0ga01heChtaW5WYWwsIGtNaW4o
dmFsLCBtYXhWYWwpKTsgLy8gTWFrZSBzdXJlIHZhbCBpcyB3aXRoaW4gbWluL21heC4KICAgICAK
LSAgICAvLyBGb3JjZSBpbnRlZ2VyIHZhbHVlIGlmIG5vdCBmbG9hdCAoc3RyY2FzZWNtcCByZXR1
cm5zIGNvbmZ1c2luZ2x5IGJhY2t3YXJkIGJvb2xlYW4pLgotICAgIGlmIChzdHJjYXNlY21wKHBy
ZWNpc2lvbiwgImZsb2F0IikpCisgICAgLy8gRm9yY2UgaW50ZWdlciB2YWx1ZSBpZiBub3QgZmxv
YXQuCisgICAgaWYgKCFlcXVhbHNJZ25vcmluZ0Nhc2UocHJlY2lzaW9uLCAiZmxvYXQiKSkKICAg
ICAgICAgdmFsID0gKGludCkodmFsICsgMC41KTsKIAogICAgIGVsZW1lbnQoKS0+c2V0VmFsdWUo
UVN0cmluZzo6bnVtYmVyKHZhbCkpOwpAQCAtMTczOSw4ICsxNzM5LDggQEAgdm9pZCBSZW5kZXJT
bGlkZXI6OnNsb3RTbGlkZXJWYWx1ZUNoYW5nZQogICAgIGRvdWJsZSB2YWwgPSBzbGlkZXItPnZh
bHVlKCk7CiAgICAgY29uc3QgRE9NU3RyaW5nJiBwcmVjaXNpb24gPSBlbGVtZW50KCktPmdldEF0
dHJpYnV0ZShwcmVjaXNpb25BdHRyKTsKIAotICAgIC8vIEZvcmNlIGludGVnZXIgdmFsdWUgaWYg
bm90IGZsb2F0IChzdHJjYXNlY21wIHJldHVybnMgY29uZnVzaW5nbHkgYmFja3dhcmQgYm9vbGVh
bikuCi0gICAgaWYgKHN0cmNhc2VjbXAocHJlY2lzaW9uLCAiZmxvYXQiKSkKKyAgICAvLyBGb3Jj
ZSBpbnRlZ2VyIHZhbHVlIGlmIG5vdCBmbG9hdC4KKyAgICBpZiAoIWVxdWFsc0lnbm9yaW5nQ2Fz
ZShwcmVjaXNpb24sICJmbG9hdCIpKQogICAgICAgICB2YWwgPSAoaW50KSh2YWwgKyAwLjUpOwog
CiAgICAgZWxlbWVudCgpLT5zZXRWYWx1ZShRU3RyaW5nOjpudW1iZXIodmFsKSk7CkluZGV4OiBr
aHRtbC94YmwveGJsX3Rva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwveGJsL3hibF90b2tlbml6ZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjMKZGlmZiAtcCAtdSAtcjEuMyBraHRtbC94YmwveGJsX3Rva2VuaXplci5jcHAKLS0tIGto
dG1sL3hibC94YmxfdG9rZW5pemVyLmNwcAkxOCBKdWwgMjAwNSAyMTo0NDoyOCAtMDAwMAkxLjMK
KysrIGtodG1sL3hibC94YmxfdG9rZW5pemVyLmNwcAk1IFNlcCAyMDA1IDE3OjU5OjQ4IC0wMDAw
CkBAIC0zNTUsNyArMzU1LDcgQEAgdm9pZCBYQkxUb2tlbkhhbmRsZXI6OmNyZWF0ZUZpZWxkKGNv
bnN0IAogICAgICAgICBpZiAoYXR0cnMucU5hbWUoaSkgPT0gIm5hbWUiKQogICAgICAgICAgICAg
bmFtZSA9IGF0dHJzLnZhbHVlKGkpOwogICAgICAgICBlbHNlIGlmIChhdHRycy5xTmFtZShpKSA9
PSAicmVhZG9ubHkiKQotICAgICAgICAgICAgcmVhZG9ubHkgPSAhKHN0cmNhc2VjbXAoYXR0cnMu
dmFsdWUoaSksICJ0cnVlIikpOworICAgICAgICAgICAgcmVhZG9ubHkgPSBlcXVhbHNJZ25vcmlu
Z0Nhc2UoYXR0cnMudmFsdWUoaSksICJ0cnVlIik7CiAgICAgfQogICAgIAogICAgIG1fZmllbGQg
PSBuZXcgWEJMUHJvdG90eXBlRmllbGQobmFtZSwgcmVhZG9ubHkpOwpAQCAtMzcyLDcgKzM3Miw3
IEBAIHZvaWQgWEJMVG9rZW5IYW5kbGVyOjpjcmVhdGVQcm9wZXJ0eShjb24KICAgICAgICAgaWYg
KGF0dHJzLnFOYW1lKGkpID09ICJuYW1lIikKICAgICAgICAgICAgIG5hbWUgPSBhdHRycy52YWx1
ZShpKTsKICAgICAgICAgZWxzZSBpZiAoYXR0cnMucU5hbWUoaSkgPT0gInJlYWRvbmx5IikKLSAg
ICAgICAgICAgIHJlYWRvbmx5ID0gIShzdHJjYXNlY21wKGF0dHJzLnZhbHVlKGkpLCAidHJ1ZSIp
KTsKKyAgICAgICAgICAgIHJlYWRvbmx5ID0gZXF1YWxzSWdub3JpbmdDYXNlKGF0dHJzLnZhbHVl
KGkpLCAidHJ1ZSIpOwogICAgICAgICBlbHNlIGlmIChhdHRycy5xTmFtZShpKSA9PSAib25nZXQi
KQogICAgICAgICAgICAgb25nZXQgPSBhdHRycy52YWx1ZShpKTsKICAgICAgICAgZWxzZSBpZiAo
YXR0cnMucU5hbWUoaSkgPT0gIm9uc2V0IikKSW5kZXg6IGtodG1sL3htbC9kb21fYXRvbWljc3Ry
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwv
ZG9tX2F0b21pY3N0cmluZy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtcCAt
dSAtcjEuMTIga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwCi0tLSBraHRtbC94bWwvZG9t
X2F0b21pY3N0cmluZy5jcHAJMjkgQXVnIDIwMDUgMjE6Mjk6MjIgLTAwMDAJMS4xMgorKysga2h0
bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwCTUgU2VwIDIwMDUgMTc6NTk6NDkgLTAwMDAKQEAg
LTI2LDkgKzI2LDEwIEBACiAvLyBwb3J0YWJsZSwgYW5kIGl0IHdvdWxkIGJlIGdvb2QgdG8gZmln
dXJlIG91dCBhIDEwMCUgY2xlYW4gd2F5IHRoYXQgc3RpbGwgYXZvaWRzIGNvZGUgdGhhdAogLy8g
cnVucyBhdCBpbml0IHRpbWUuCiAKLSNkZWZpbmUgS0hUTUxfQVRPTUlDU1RSSU5HX0hJREVfR0xP
QkFMUyAxCisjZGVmaW5lIERPTV9BVE9NSUNTVFJJTkdfSElERV9HTE9CQUxTIDEKIAogI2luY2x1
ZGUgImRvbV9hdG9taWNzdHJpbmcuaCIKKwogI2luY2x1ZGUgInhtbC9kb21fc3RyaW5naW1wbC5o
IgogI2luY2x1ZGUgIm1pc2MvaGFzaHNldC5oIgogCkBAIC01MywxNiArNTQsNiBAQCBpbmxpbmUg
Ym9vbCBlcXVhbChET01TdHJpbmdJbXBsKiBjb25zdCYgCiAgICAgcmV0dXJuIHNbbGVuZ3RoXSA9
PSAwOwogfQogCi1ib29sIEF0b21pY1N0cmluZzo6ZXF1YWwoY29uc3QgQXRvbWljU3RyaW5nICZh
LCBjb25zdCBjaGFyICpiKQoteyAKLSAgICBET01TdHJpbmdJbXBsICppbXBsID0gYS5tX3N0cmlu
Zy5pbXBsKCk7Ci0gICAgaWYgKCghaW1wbCB8fCAhaW1wbC0+cykgJiYgIWIpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGlmICgoIWltcGwgfHwgIWltcGwtPnMpIHx8ICFiKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIERPTTo6ZXF1YWwoaW1wbCwgYik7IAotfQotCiBpbmxp
bmUgRE9NU3RyaW5nSW1wbCAqY29udmVydChjb25zdCBjaGFyKiBjb25zdCYgYywgdW5zaWduZWQg
aGFzaCkKIHsKICAgICBET01TdHJpbmdJbXBsICpyID0gbmV3IERPTVN0cmluZ0ltcGwoYyk7CkBA
IC0xNTIsNiArMTQzLDEzMSBAQCBET01TdHJpbmdJbXBsICpBdG9taWNTdHJpbmc6OmFkZChET01T
dHJpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RydWN0IENoYXJCdWZmZXIKK3sKKyAgICBj
b25zdCBjaGFyICpzOworICAgIHVuc2lnbmVkIGxlbmd0aDsKK307CisKK2lubGluZSB1bnNpZ25l
ZCBsb3dlcmNhc2VkSGFzaChjb25zdCBDaGFyQnVmZmVyJiBidWYpCit7CisgICAgcmV0dXJuIERP
TVN0cmluZ0ltcGw6OmNvbXB1dGVMb3dlcmNhc2VkSGFzaChidWYucywgYnVmLmxlbmd0aCk7Cit9
CisKK2lubGluZSBib29sIGxvd2VyY2FzZWRFcXVhbChET01TdHJpbmdJbXBsKiBjb25zdCYgc3Ry
LCBjb25zdCBDaGFyQnVmZmVyICZidWYpCit7CisgICAgdWludCBzdHJMZW5ndGggPSBzdHItPmw7
CisgICAgdWludCBidWZMZW5ndGggPSBidWYubGVuZ3RoOworICAgIGlmIChzdHJMZW5ndGggIT0g
YnVmTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBRQ2hhciAqc3Ry
Q2hhcnMgPSBzdHItPnM7CisgICAgY29uc3QgY2hhciAqYnVmQ2hhcnMgPSBidWYuczsKKyAgICAK
KyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgIT0gc3RyTGVuZ3RoOyArK2kpCisgICAgICAgIGlmICgq
c3RyQ2hhcnMrKyAhPSBRQ2hhcigqYnVmQ2hhcnMrKykubG93ZXIoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgRE9NU3RyaW5nSW1w
bCAqbG93ZXJjYXNlZENvbnZlcnQoY29uc3QgQ2hhckJ1ZmZlciYgYnVmLCB1bnNpZ25lZCBoYXNo
KQoreworICAgIERPTVN0cmluZ0ltcGwgKnIgPSBuZXcgRE9NU3RyaW5nSW1wbChidWYucywgYnVm
Lmxlbmd0aCwgbG93ZXJjYXNlZCk7CisgICAgci0+X2hhc2ggPSBoYXNoOworICAgIHItPl9pblRh
YmxlID0gdHJ1ZTsKKyAgICByZXR1cm4gcjsgCit9CisKK0RPTVN0cmluZ0ltcGwgKkF0b21pY1N0
cmluZzo6YWRkTG93ZXJjYXNlZChjb25zdCBjaGFyICpzLCBpbnQgbGVuZ3RoKQoreworICAgIGlm
ICghcykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGxlbmd0aCA9PSAwKQorICAgICAgICBy
ZXR1cm4gRE9NU3RyaW5nSW1wbDo6ZW1wdHkoKTsKKyAgICBjb25zdCBDaGFyQnVmZmVyIGJ1ZiA9
IHsgcywgbGVuZ3RoIH07IAorICAgIHJldHVybiAqc3RyaW5nVGFibGUuaW5zZXJ0PENoYXJCdWZm
ZXIsIGxvd2VyY2FzZWRIYXNoLCBsb3dlcmNhc2VkRXF1YWwsIGxvd2VyY2FzZWRDb252ZXJ0Pihi
dWYpLmZpcnN0OworfQorCitpbmxpbmUgdW5zaWduZWQgbG93ZXJjYXNlZEhhc2goY29uc3QgUUNo
YXJCdWZmZXImIGJ1ZikKK3sKKyAgICByZXR1cm4gRE9NU3RyaW5nSW1wbDo6Y29tcHV0ZUxvd2Vy
Y2FzZWRIYXNoKGJ1Zi5zLCBidWYubGVuZ3RoKTsKK30KKworaW5saW5lIGJvb2wgbG93ZXJjYXNl
ZEVxdWFsKERPTVN0cmluZ0ltcGwqIGNvbnN0JiBzdHIsIGNvbnN0IFFDaGFyQnVmZmVyICZidWYp
Cit7CisgICAgdWludCBzdHJMZW5ndGggPSBzdHItPmw7CisgICAgdWludCBidWZMZW5ndGggPSBi
dWYubGVuZ3RoOworICAgIGlmIChzdHJMZW5ndGggIT0gYnVmTGVuZ3RoKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBjb25zdCBRQ2hhciAqc3RyQ2hhcnMgPSBzdHItPnM7CisgICAgY29u
c3QgUUNoYXIgKmJ1ZkNoYXJzID0gYnVmLnM7CisgICAgCisgICAgZm9yICh1aW50IGkgPSAwOyBp
ICE9IHN0ckxlbmd0aDsgKytpKQorICAgICAgICBpZiAoKnN0ckNoYXJzKysgIT0gKCpidWZDaGFy
cysrKS5sb3dlcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2lubGluZSBET01TdHJpbmdJbXBsICpsb3dlcmNhc2VkQ29udmVydChjb25zdCBR
Q2hhckJ1ZmZlciYgYnVmLCB1bnNpZ25lZCBoYXNoKQoreworICAgIERPTVN0cmluZ0ltcGwgKnIg
PSBuZXcgRE9NU3RyaW5nSW1wbChidWYucywgYnVmLmxlbmd0aCwgbG93ZXJjYXNlZCk7CisgICAg
ci0+X2hhc2ggPSBoYXNoOworICAgIHItPl9pblRhYmxlID0gdHJ1ZTsKKyAgICByZXR1cm4gcjsg
Cit9CisKK0RPTVN0cmluZ0ltcGwgKkF0b21pY1N0cmluZzo6YWRkTG93ZXJjYXNlZChjb25zdCBR
Q2hhciAqcywgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAoIXMpCisgICAgICAgIHJldHVybiAwOwor
ICAgIGlmIChsZW5ndGggPT0gMCkKKyAgICAgICAgcmV0dXJuIERPTVN0cmluZ0ltcGw6OmVtcHR5
KCk7CisgICAgY29uc3QgUUNoYXJCdWZmZXIgYnVmID0geyBzLCBsZW5ndGggfTsgCisgICAgcmV0
dXJuICpzdHJpbmdUYWJsZS5pbnNlcnQ8UUNoYXJCdWZmZXIsIGxvd2VyY2FzZWRIYXNoLCBsb3dl
cmNhc2VkRXF1YWwsIGxvd2VyY2FzZWRDb252ZXJ0PihidWYpLmZpcnN0OworfQorCitpbmxpbmUg
dW5zaWduZWQgbG93ZXJjYXNlZEhhc2goRE9NU3RyaW5nSW1wbCogY29uc3QmIHN0cikKK3sKKyAg
ICByZXR1cm4gRE9NU3RyaW5nSW1wbDo6Y29tcHV0ZUxvd2VyY2FzZWRIYXNoKHN0ci0+cywgc3Ry
LT5sKTsKK30KKworaW5saW5lIGJvb2wgbG93ZXJjYXNlZEVxdWFsKERPTVN0cmluZ0ltcGwqIGNv
bnN0JiBzdHIsIERPTVN0cmluZ0ltcGwqIGNvbnN0ICZ1Y3N0cikKK3sKKyAgICB1aW50IHN0ckxl
bmd0aCA9IHN0ci0+bDsKKyAgICB1aW50IHVjc3RyTGVuZ3RoID0gdWNzdHItPmw7CisgICAgaWYg
KHN0ckxlbmd0aCAhPSB1Y3N0ckxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Y29uc3QgUUNoYXIgKnN0ckNoYXJzID0gc3RyLT5zOworICAgIGNvbnN0IFFDaGFyICp1Y3N0ckNo
YXJzID0gdWNzdHItPnM7CisgICAgCisgICAgZm9yICh1aW50IGkgPSAwOyBpICE9IHN0ckxlbmd0
aDsgKytpKQorICAgICAgICBpZiAoKnN0ckNoYXJzKysgIT0gKCp1Y3N0ckNoYXJzKyspLmxvd2Vy
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
aW5saW5lIERPTVN0cmluZ0ltcGwgKmxvd2VyY2FzZWRDb252ZXJ0KERPTVN0cmluZ0ltcGwqIGNv
bnN0ICZzdHIsIHVuc2lnbmVkIGhhc2gpCit7CisgICAgRE9NU3RyaW5nSW1wbCAqciA9IG5ldyBE
T01TdHJpbmdJbXBsKHN0ci0+cywgc3RyLT5sLCBsb3dlcmNhc2VkKTsKKyAgICByLT5faGFzaCA9
IGhhc2g7CisgICAgci0+X2luVGFibGUgPSB0cnVlOworICAgIHJldHVybiByOyAKK30KKworRE9N
U3RyaW5nSW1wbCAqQXRvbWljU3RyaW5nOjphZGRMb3dlcmNhc2VkKERPTVN0cmluZ0ltcGwgKnIp
Cit7CisgICAgaWYgKCFyIHx8IHItPl9pblRhYmxlKQorICAgICAgICByZXR1cm4gcjsKKyAgICBp
ZiAoci0+bCA9PSAwKQorICAgICAgICByZXR1cm4gRE9NU3RyaW5nSW1wbDo6ZW1wdHkoKTsKKyAg
ICByZXR1cm4gKnN0cmluZ1RhYmxlLmluc2VydDxET01TdHJpbmdJbXBsICosIGxvd2VyY2FzZWRI
YXNoLCBsb3dlcmNhc2VkRXF1YWwsIGxvd2VyY2FzZWRDb252ZXJ0PihyKS5maXJzdDsKK30KKwog
dm9pZCBBdG9taWNTdHJpbmc6OnJlbW92ZShET01TdHJpbmdJbXBsICpyKQogewogICAgIHN0cmlu
Z1RhYmxlLnJlbW92ZShyKTsKQEAgLTE4MywyMyArMjk5LDQgQEAgdm9pZCBBdG9taWNTdHJpbmc6
OmluaXQoKQogICAgIH0KIH0KIAotYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyAm
YSwgY29uc3QgRE9NU3RyaW5nICZiKQotewotICAgIHJldHVybiBhLmRvbVN0cmluZygpID09IGI7
ICAgIAotfQotICAgCi1ib29sIGVxdWFsc0lnbm9yZUNhc2UoY29uc3QgQXRvbWljU3RyaW5nICZh
cywgY29uc3QgRE9NU3RyaW5nICZicykKLXsKLSAgICAvLyByZXR1cm5zIHRydWUgd2hlbiBlcXVh
bCwgZmFsc2Ugb3RoZXJ3aXNlIChpZ25vcmluZyBjYXNlKQotICAgIHJldHVybiAhc3RyY2FzZWNt
cChhcy5kb21TdHJpbmcoKSwgYnMpOwotfQotCi1ib29sIGVxdWFsc0lnbm9yZUNhc2UoY29uc3Qg
QXRvbWljU3RyaW5nICZhcywgY29uc3QgQXRvbWljU3RyaW5nICZicykKLXsKLSAgICAvLyByZXR1
cm5zIHRydWUgd2hlbiBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlIChpZ25vcmluZyBjYXNlKQotICAg
IGlmIChhcyA9PSBicykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuICFzdHJjYXNl
Y21wKGFzLmRvbVN0cmluZygpLCBicy5kb21TdHJpbmcoKSk7Ci19Ci0KIH0KSW5kZXg6IGtodG1s
L3htbC9kb21fYXRvbWljc3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS45CmRpZmYgLXAgLXUgLXIxLjkga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuaAotLS0ga2h0
bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuaAkzMSBBdWcgMjAwNSAwNDozODo0MSAtMDAwMAkxLjkK
KysrIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgJNSBTZXAgMjAwNSAxNzo1OTo0OSAtMDAw
MApAQCAtMTksOCArMTksOSBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgog
ICovCi0jaWZuZGVmIF9ET01fQXRvbWljU3RyaW5nX2hfCi0jZGVmaW5lIF9ET01fQXRvbWljU3Ry
aW5nX2hfCisKKyNpZm5kZWYgRE9NX0FUT01JQ1NUUklOR19ICisjZGVmaW5lIERPTV9BVE9NSUNT
VFJJTkdfSAogCiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKIApAQCAtMzMsMTAgKzM0LDEz
IEBAIHB1YmxpYzoKICAgICBBdG9taWNTdHJpbmcoKSB7IH0KICAgICBBdG9taWNTdHJpbmcoY29u
c3QgY2hhciAqcykgOiBtX3N0cmluZyhhZGQocykpIHsgfQogICAgIEF0b21pY1N0cmluZyhjb25z
dCBRQ2hhciAqcywgaW50IGxlbmd0aCkgOiBtX3N0cmluZyhhZGQocywgbGVuZ3RoKSkgeyB9Ci0g
ICAgQXRvbWljU3RyaW5nKGNvbnN0IHVuc2lnbmVkIHNob3J0KiBzLCBpbnQgbGVuZ3RoKSA6IG1f
c3RyaW5nKGFkZCgoUUNoYXIqKXMsIGxlbmd0aCkpIHsgfQogICAgIEF0b21pY1N0cmluZyhjb25z
dCBRU3RyaW5nJiBzKSA6IG1fc3RyaW5nKGFkZChzLnVuaWNvZGUoKSwgcy5sZW5ndGgoKSkpIHsg
fQogICAgIEF0b21pY1N0cmluZyhET01TdHJpbmdJbXBsKiBpbXApIDogbV9zdHJpbmcoYWRkKGlt
cCkpIHsgfQogICAgIGV4cGxpY2l0IEF0b21pY1N0cmluZyhjb25zdCBET01TdHJpbmcgJnMpIDog
bV9zdHJpbmcoYWRkKHMuaW1wbCgpKSkgeyB9CisgICAgQXRvbWljU3RyaW5nKGNvbnN0IGNoYXIg
KnMsIGludCBsZW5ndGgsIExvd2VyY2FzZWQpIDogbV9zdHJpbmcoYWRkTG93ZXJjYXNlZChzLCBs
ZW5ndGgpKSB7IH0KKyAgICBBdG9taWNTdHJpbmcoY29uc3QgUUNoYXIgKnMsIGludCBsZW5ndGgs
IExvd2VyY2FzZWQpIDogbV9zdHJpbmcoYWRkTG93ZXJjYXNlZChzLCBsZW5ndGgpKSB7IH0KKyAg
ICBBdG9taWNTdHJpbmcoRE9NU3RyaW5nSW1wbCAqcywgTG93ZXJjYXNlZCkgOiBtX3N0cmluZyhh
ZGRMb3dlcmNhc2VkKHMpKSB7IH0KKyAgICBBdG9taWNTdHJpbmcoY29uc3QgRE9NU3RyaW5nICZz
LCBMb3dlcmNhc2VkKSA6IG1fc3RyaW5nKGFkZExvd2VyY2FzZWQocy5pbXBsKCkpKSB7IH0KICAg
ICAKICAgICBvcGVyYXRvciBjb25zdCBET01TdHJpbmcmKCkgY29uc3QgeyByZXR1cm4gbV9zdHJp
bmc7IH0KICAgICBjb25zdCBET01TdHJpbmcmIGRvbVN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1f
c3RyaW5nOyB9OwpAQCAtNDcsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgUUNoYXIgKnVu
aWNvZGUoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy51bmljb2RlKCk7IH0KICAgICBpbnQgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcubGVuZ3RoKCk7IH0KICAgICAKLSAgICBpbnQg
ZmluZChjb25zdCBRQ2hhciBjLCBpbnQgc3RhcnQgPSAwKSBjb25zdCB7IHJldHVybiBtX3N0cmlu
Zy5maW5kKGMsIHN0YXJ0KTsgfQorICAgIGludCBmaW5kKFFDaGFyIGMsIGludCBzdGFydCA9IDAp
IGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmZpbmQoYywgc3RhcnQpOyB9CiAgICAgCiAgICAgaW50
IHRvSW50KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcudG9JbnQoKTsgfQogICAgIGJvb2wgcGVy
Y2VudGFnZShpbnQgJl9wZXJjZW50YWdlKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5wZXJjZW50
YWdlKF9wZXJjZW50YWdlKTsgfQpAQCAtNzMsNTggKzc3LDQyIEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgRE9NU3RyaW5nIG1fc3RyaW5nOwogICAgIAotICAgIHN0YXRpYyBib29sIGVxdWFsKERP
TVN0cmluZ0ltcGwgKiwgY29uc3QgY2hhciAqKTsKLSAgICBzdGF0aWMgYm9vbCBlcXVhbChET01T
dHJpbmdJbXBsICosIGNvbnN0IFFDaGFyICosIHVpbnQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgYm9v
bCBlcXVhbChET01TdHJpbmdJbXBsICosIERPTVN0cmluZ0ltcGwgKik7Ci0gICAgCi0gICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgQXRvbWljU3RyaW5nICZhLCBjb25zdCBBdG9taWNTdHJpbmcg
JmIpCi0gICAgeyByZXR1cm4gYS5tX3N0cmluZy5pbXBsKCkgPT0gYi5tX3N0cmluZy5pbXBsKCk7
IH0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0IGNo
YXIgKmIpOwotICAgIAogICAgIHN0YXRpYyBET01TdHJpbmdJbXBsICphZGQoY29uc3QgY2hhciAq
KTsKICAgICBzdGF0aWMgRE9NU3RyaW5nSW1wbCAqYWRkKGNvbnN0IFFDaGFyICosIGludCBsZW5n
dGgpOwogICAgIHN0YXRpYyBET01TdHJpbmdJbXBsICphZGQoRE9NU3RyaW5nSW1wbCAqKTsKLSAg
ICAKLSAgICBzdGF0aWMgdm9pZCBpbnNlcnQoRE9NU3RyaW5nSW1wbCAqKTsKLSAgICAKLSAgICBz
dGF0aWMgdm9pZCByZWhhc2goaW50IG5ld1RhYmxlU2l6ZSk7Ci0gICAgc3RhdGljIHZvaWQgZXhw
YW5kKCk7Ci0gICAgc3RhdGljIHZvaWQgc2hyaW5rKCk7Ci0gICAgCi0gICAgc3RhdGljIERPTVN0
cmluZ0ltcGwgKipfdGFibGU7Ci0gICAgc3RhdGljIGludCBfdGFibGVTaXplOwotICAgIHN0YXRp
YyBpbnQgX3RhYmxlU2l6ZU1hc2s7Ci0gICAgc3RhdGljIGludCBfa2V5Q291bnQ7Ci19OwotCi1p
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgQXRvbWlj
U3RyaW5nICZiKQoteyByZXR1cm4gQXRvbWljU3RyaW5nOjplcXVhbChhLCBiKTsgfQotCi1pbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgQXRvbWljU3Ry
aW5nICZiKQoteyByZXR1cm4gIUF0b21pY1N0cmluZzo6ZXF1YWwoYSwgYik7IH0KIAotaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0IGNoYXIgKmIpCi17
IHJldHVybiBBdG9taWNTdHJpbmc6OmVxdWFsKGEsIGIpOyB9Ci0KLWlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgQXRvbWljU3RyaW5nICZhLCBjb25zdCBjaGFyICpiKQoteyByZXR1cm4gIUF0
b21pY1N0cmluZzo6ZXF1YWwoYSwgYik7IH0KLQotLy8gTGlzdCBvZiBwcm9wZXJ0eSBuYW1lcywg
cGFzc2VkIHRvIGEgbWFjcm8gc28gd2UgY2FuIGRvIHNldCB0aGVtIHVwIHZhcmlvdXMKLS8vIHdh
eXMgd2l0aG91dCByZXBlYXRpbmcgdGhlIGxpc3QuCisgICAgc3RhdGljIERPTVN0cmluZ0ltcGwg
KmFkZExvd2VyY2FzZWQoY29uc3QgY2hhciAqLCBpbnQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgRE9N
U3RyaW5nSW1wbCAqYWRkTG93ZXJjYXNlZChjb25zdCBRQ2hhciAqLCBpbnQgbGVuZ3RoKTsKKyAg
ICBzdGF0aWMgRE9NU3RyaW5nSW1wbCAqYWRkTG93ZXJjYXNlZChET01TdHJpbmdJbXBsICopOwor
fTsKIAogLy8gRGVmaW5lIGV4dGVybmFsIGdsb2JhbCB2YXJpYWJsZXMgZm9yIHRoZSBjb21tb25s
eSB1c2VkIGF0b21pYyBzdHJpbmdzLgotI2lmICFLSFRNTF9BVE9NSUNTVFJJTkdfSElERV9HTE9C
QUxTCi0gICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBudWxsQXRvbTsKLSAgICBleHRlcm4g
Y29uc3QgQXRvbWljU3RyaW5nIGVtcHR5QXRvbTsKLSAgICBleHRlcm4gY29uc3QgQXRvbWljU3Ry
aW5nIHRleHRBdG9tOwotICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgY29tbWVudEF0b207
Ci0gICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBzdGFyQXRvbTsKKyNpZiAhRE9NX0FUT01J
Q1NUUklOR19ISURFX0dMT0JBTFMKK2V4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgbnVsbEF0b207
CitleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIGVtcHR5QXRvbTsKK2V4dGVybiBjb25zdCBBdG9t
aWNTdHJpbmcgdGV4dEF0b207CitleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIGNvbW1lbnRBdG9t
OworZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBzdGFyQXRvbTsKICNlbmRpZgotICAgICAgICAK
LWJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0IERPTVN0cmluZyAm
Yik7CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW5nICZhLCBjb25z
dCBBdG9taWNTdHJpbmcgJmIpIHsgcmV0dXJuIGEuaW1wbCgpID09IGIuaW1wbCgpOyB9Citpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgRE9NU3RyaW5n
ICZiKSB7IHJldHVybiBhLmRvbVN0cmluZygpID09IGI7IH0KK2lubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgQXRvbWljU3RyaW5nICZhLCBjb25zdCBjaGFyICpiKSB7IHJldHVybiBhLmRvbVN0
cmluZygpID09IGI7IH0KK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRE9NU3RyaW5nICZh
LCBjb25zdCBBdG9taWNTdHJpbmcgJmIpIHsgcmV0dXJuIGIgPT0gYTsgfQoraW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBjaGFyICphLCBjb25zdCBBdG9taWNTdHJpbmcgJmIpIHsgcmV0dXJu
IGIgPT0gYTsgfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF0b21pY1N0cmluZyAm
YSwgY29uc3QgQXRvbWljU3RyaW5nICZiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KIGlubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3QgQXRvbWljU3RyaW5nICZhLCBjb25zdCBET01TdHJpbmcgJmIp
IHsgcmV0dXJuICEoYSA9PSBiKTsgfQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBET01T
dHJpbmcgJmEsIGNvbnN0IEF0b21pY1N0cmluZyAmYikgeyByZXR1cm4gIShiID09IGEpOyB9Citp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgY2hhciAq
YikgeyByZXR1cm4gIShhID09IGIpOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGNo
YXIgKmEsIGNvbnN0IEF0b21pY1N0cmluZyAmYikgeyByZXR1cm4gIShiID09IGEpOyB9CisKK2lu
bGluZSBib29sIGVxdWFsc0lnbm9yaW5nQ2FzZShjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0
IEF0b21pY1N0cmluZyAmYikgeyByZXR1cm4gZXF1YWxzSWdub3JpbmdDYXNlKGEuZG9tU3RyaW5n
KCksIGIuZG9tU3RyaW5nKCkpOyB9CitpbmxpbmUgYm9vbCBlcXVhbHNJZ25vcmluZ0Nhc2UoY29u
c3QgQXRvbWljU3RyaW5nICZhLCBjb25zdCBET01TdHJpbmcgJmIpIHsgcmV0dXJuIGVxdWFsc0ln
bm9yaW5nQ2FzZShhLmRvbVN0cmluZygpLCBiKTsgfQoraW5saW5lIGJvb2wgZXF1YWxzSWdub3Jp
bmdDYXNlKGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgY2hhciAqYikgeyByZXR1cm4gZXF1
YWxzSWdub3JpbmdDYXNlKGEuZG9tU3RyaW5nKCksIGIpOyB9CitpbmxpbmUgYm9vbCBlcXVhbHNJ
Z25vcmluZ0Nhc2UoY29uc3QgRE9NU3RyaW5nICZhLCBjb25zdCBBdG9taWNTdHJpbmcgJmIpIHsg
cmV0dXJuIGIgPT0gYTsgfQoraW5saW5lIGJvb2wgZXF1YWxzSWdub3JpbmdDYXNlKGNvbnN0IGNo
YXIgKmEsIGNvbnN0IEF0b21pY1N0cmluZyAmYikgeyByZXR1cm4gYiA9PSBhOyB9CiAKLWJvb2wg
ZXF1YWxzSWdub3JlQ2FzZShjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0IERPTVN0cmluZyAm
Yik7Ci1ib29sIGVxdWFsc0lnbm9yZUNhc2UoY29uc3QgQXRvbWljU3RyaW5nICZhLCBjb25zdCBB
dG9taWNTdHJpbmcgJmIpOwogfQorCiAjZW5kaWYKSW5kZXg6IGtodG1sL3htbC9kb21fYXRvbWlj
c3RyaW5nbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L3htbC9kb21fYXRvbWljc3RyaW5nbGlzdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlm
ZiAtcCAtdSAtcjEuMiBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZ2xpc3QuaAotLS0ga2h0bWwv
eG1sL2RvbV9hdG9taWNzdHJpbmdsaXN0LmgJMjUgQXVnIDIwMDUgMTc6NDc6MjAgLTAwMDAJMS4y
CisrKyBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZ2xpc3QuaAk1IFNlcCAyMDA1IDE3OjU5OjQ5
IC0wMDAwCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBBdG9taWNTdHJpbmdM
aXN0KiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0OyB9CiAgICAgdm9pZCBzZXROZXh0KEF0
b21pY1N0cmluZ0xpc3QqIG4pIHsgbV9uZXh0ID0gbjsgfQotICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgcXN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nOyB9CisgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBzdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsgfQogICAgIHZvaWQgc2V0
U3RyaW5nKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyKSB7IG1fc3RyaW5nID0gc3RyOyB9CiAKICAg
ICBBdG9taWNTdHJpbmdMaXN0KiBjbG9uZSgpIHsgcmV0dXJuIG5ldyBBdG9taWNTdHJpbmdMaXN0
KG1fc3RyaW5nLCBtX25leHQgPyBtX25leHQtPmNsb25lKCkgOiAwKTsgfQpJbmRleDoga2h0bWwv
eG1sL2RvbV9kb2NpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC94bWwvZG9tX2RvY2ltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI1MQpk
aWZmIC1wIC11IC1yMS4yNTEga2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAotLS0ga2h0bWwveG1s
L2RvbV9kb2NpbXBsLmNwcAkyIFNlcCAyMDA1IDAwOjE5OjI5IC0wMDAwCTEuMjUxCisrKyBraHRt
bC94bWwvZG9tX2RvY2ltcGwuY3BwCTUgU2VwIDIwMDUgMTc6NTk6NTEgLTAwMDAKQEAgLTE3NzEs
NyArMTc3MSw3IEBAIHZvaWQgRG9jdW1lbnRJbXBsOjpwcm9jZXNzSHR0cEVxdWl2KGNvbnMKIAog
ICAgIEtIVE1MUGFydCAqcGFydCA9IHRoaXMtPnBhcnQoKTsKIAotICAgIGlmIChzdHJjYXNlY21w
KGVxdWl2LCAiZGVmYXVsdC1zdHlsZSIpID09IDApIHsKKyAgICBpZiAoZXF1YWxzSWdub3JpbmdD
YXNlKGVxdWl2LCAiZGVmYXVsdC1zdHlsZSIpKSB7CiAgICAgICAgIC8vIFRoZSBwcmVmZXJyZWQg
c3R5bGUgc2V0IGhhcyBiZWVuIG92ZXJyaWRkZW4gYXMgcGVyIHNlY3Rpb24gCiAgICAgICAgIC8v
IDE0LjMuMiBvZiB0aGUgSFRNTDQuMCBzcGVjaWZpY2F0aW9uLiAgV2UgbmVlZCB0byB1cGRhdGUg
dGhlCiAgICAgICAgIC8vIHNoZWV0IHVzZWQgdmFyaWFibGUgYW5kIHRoZW4gdXBkYXRlIG91ciBz
dHlsZSBzZWxlY3Rvci4gCkBAIC0xNzgyLDcgKzE3ODIsNyBAQCB2b2lkIERvY3VtZW50SW1wbDo6
cHJvY2Vzc0h0dHBFcXVpdihjb25zCiAgICAgICAgIG1fcHJlZmVycmVkU3R5bGVzaGVldFNldCA9
IGNvbnRlbnQ7CiAgICAgICAgIHVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKICAgICB9Ci0gICAgZWxz
ZSBpZihzdHJjYXNlY21wKGVxdWl2LCAicmVmcmVzaCIpID09IDAgJiYgcGFydC0+bWV0YVJlZnJl
c2hFbmFibGVkKCkpCisgICAgZWxzZSBpZihlcXVhbHNJZ25vcmluZ0Nhc2UoZXF1aXYsICJyZWZy
ZXNoIikgJiYgcGFydC0+bWV0YVJlZnJlc2hFbmFibGVkKCkpCiAgICAgewogICAgICAgICAvLyBn
ZXQgZGVsYXkgYW5kIHVybAogICAgICAgICBRU3RyaW5nIHN0ciA9IGNvbnRlbnQucXN0cmluZygp
LnN0cmlwV2hpdGVTcGFjZSgpOwpAQCAtMTgyMiwxNCArMTgyMiwxNCBAQCB2b2lkIERvY3VtZW50
SW1wbDo6cHJvY2Vzc0h0dHBFcXVpdihjb25zCiAjZW5kaWYKICAgICAgICAgfQogICAgIH0KLSAg
ICBlbHNlIGlmKHN0cmNhc2VjbXAoZXF1aXYsICJleHBpcmVzIikgPT0gMCkKKyAgICBlbHNlIGlm
KGVxdWFsc0lnbm9yaW5nQ2FzZShlcXVpdiwgImV4cGlyZXMiKSkKICAgICB7CiAgICAgICAgIFFT
dHJpbmcgc3RyID0gY29udGVudC5xc3RyaW5nKCkuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAg
IHRpbWVfdCBleHBpcmVfZGF0ZSA9IHN0ci50b0xvbmcoKTsKICAgICAgICAgaWYgKG1fZG9jTG9h
ZGVyKQogICAgICAgICAgICAgbV9kb2NMb2FkZXItPnNldEV4cGlyZURhdGUoZXhwaXJlX2RhdGUp
OwogICAgIH0KLSAgICBlbHNlIGlmKHN0cmNhc2VjbXAoZXF1aXYsICJwcmFnbWEiKSA9PSAwIHx8
IHN0cmNhc2VjbXAoZXF1aXYsICJjYWNoZS1jb250cm9sIikgPT0gMCAmJiBwYXJ0KQorICAgIGVs
c2UgaWYoZXF1YWxzSWdub3JpbmdDYXNlKGVxdWl2LCAicHJhZ21hIikgfHwgZXF1YWxzSWdub3Jp
bmdDYXNlKGVxdWl2LCAiY2FjaGUtY29udHJvbCIpICYmIHBhcnQpCiAgICAgewogICAgICAgICBR
U3RyaW5nIHN0ciA9IGNvbnRlbnQucXN0cmluZygpLmxvd2VyKCkuc3RyaXBXaGl0ZVNwYWNlKCk7
CiAgICAgICAgIEtVUkwgdXJsID0gcGFydC0+dXJsKCk7CkBAIC0xODM4LDcgKzE4MzgsNyBAQCB2
b2lkIERvY3VtZW50SW1wbDo6cHJvY2Vzc0h0dHBFcXVpdihjb25zCiAgICAgICAgICAgIEtJTzo6
aHR0cF91cGRhdGVfY2FjaGUodXJsLCB0cnVlLCAwKTsKICAgICAgICAgfQogICAgIH0KLSAgICBl
bHNlIGlmKCAoc3RyY2FzZWNtcChlcXVpdiwgInNldC1jb29raWUiKSA9PSAwKSkKKyAgICBlbHNl
IGlmKCAoZXF1YWxzSWdub3JpbmdDYXNlKGVxdWl2LCAic2V0LWNvb2tpZSIpKSkKICAgICB7CiAg
ICAgICAgIC8vICMjIyBtYWtlIHNldENvb2tpZSB3b3JrIG9uIFhNTCBkb2N1bWVudHMgdG9vOyBl
LmcuIGluIGNhc2Ugb2YgPGh0bWw6bWV0YSAuLi4uLj4KICAgICAgICAgSFRNTERvY3VtZW50SW1w
bCAqZCA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudEltcGwgKj4odGhpcyk7CkluZGV4OiBraHRt
bC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS43OQpkaWZmIC1wIC11IC1yMS43OSBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAot
LS0ga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAJNCBTZXAgMjAwNSAwOTo1NTowNyAtMDAw
MAkxLjc5CisrKyBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAk1IFNlcCAyMDA1IDE3OjU5
OjUzIC0wMDAwCkBAIC0zNTQsMTQgKzM1NCwxMSBAQCB2b2lkIEVsZW1lbnRJbXBsOjpzY3JvbGxJ
bnRvVmlldyhib29sIGFsCiAgICAgICAgIHYtPmVuc3VyZVZpc2libGUoeCwgeSwgeGUteCwgeWUt
eSk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudEltcGw6OmdldEF0dHJpYnV0ZU5T
KGNvbnN0IERPTVN0cmluZyAmbmFtZXNwYWNlVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5nICZsb2NhbE5hbWUpIGNvbnN0
Citjb25zdCBBdG9taWNTdHJpbmcmIEVsZW1lbnRJbXBsOjpnZXRBdHRyaWJ1dGVOUyhjb25zdCBE
T01TdHJpbmcgJm5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZsb2NhbE5hbWUpIGNvbnN0
CiB7Ci0gICAgRE9NU3RyaW5nIGxuKGxvY2FsTmFtZSk7CiAgICAgaWYgKGdldERvY3VtZW50KCkt
PmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIGxuID0gbG9jYWxOYW1lLmxvd2VyKCk7Ci0gICAg
UXVhbGlmaWVkTmFtZSBuYW1lKG51bGxBdG9tLCBsbi5pbXBsKCksIG5hbWVzcGFjZVVSSS5pbXBs
KCkpOwotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobmFtZSk7CisgICAgICAgIHJldHVybiBnZXRB
dHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgQXRvbWljU3RyaW5nKGxvY2FsTmFtZS5p
bXBsKCksIGxvd2VyY2FzZWQpLCBuYW1lc3BhY2VVUkkuaW1wbCgpKSk7CisgICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUuaW1wbCgpLCBuYW1l
c3BhY2VVUkkuaW1wbCgpKSk7CiB9CiAKIHZvaWQgRWxlbWVudEltcGw6OnNldEF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBET01TdHJpbmdJbXBsKiB2YWx1ZSwgaW50ICZleGNl
cHRpb25jb2RlICkKQEAgLTc2NSwxOSArNzYyLDIzIEBAIHZvaWQgRWxlbWVudEltcGw6OnNldEF0
dHJpYnV0ZU5TKGNvbnN0IEQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChnZXRE
b2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICBsb2NhbE5hbWUgPSBsb2NhbE5h
bWUubG93ZXIoKTsKLSAgICAgICAgCisgICAgaWYgKGdldERvY3VtZW50KCktPmlzSFRNTERvY3Vt
ZW50KCkpIHsKKyAgICAgICAgc2V0QXR0cmlidXRlKFF1YWxpZmllZE5hbWUocHJlZml4LmltcGwo
KSwKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyhsb2NhbE5hbWUuaW1wbCgpLCBsb3dlcmNhc2Vk
KSwKKyAgICAgICAgICAgIG5hbWVzcGFjZVVSSS5pbXBsKCkpLCB2YWx1ZS5pbXBsKCksIGV4Y2Vw
dGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgc2V0QXR0cmlidXRlKFF1YWxpZmll
ZE5hbWUocHJlZml4LmltcGwoKSwgbG9jYWxOYW1lLmltcGwoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuYW1lc3BhY2VVUkkuaW1wbCgpKSwgdmFsdWUuaW1wbCgpLCBleGNlcHRp
b24pOworICAgICAgICBuYW1lc3BhY2VVUkkuaW1wbCgpKSwgdmFsdWUuaW1wbCgpLCBleGNlcHRp
b24pOwogfQogCiB2b2lkIEVsZW1lbnRJbXBsOjpyZW1vdmVBdHRyaWJ1dGVOUyhjb25zdCBET01T
dHJpbmcgJm5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZsb2NhbE5hbWUsIGludCAmZXhj
ZXB0aW9uKQogewotICAgIERPTVN0cmluZyBsbihsb2NhbE5hbWUpOwotICAgIGlmIChnZXREb2N1
bWVudCgpICYmIGdldERvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIGxuID0g
bG9jYWxOYW1lLmxvd2VyKCk7Ci0gICAgcmVtb3ZlQXR0cmlidXRlKFF1YWxpZmllZE5hbWUobnVs
bEF0b20sIGxuLmltcGwoKSwgbmFtZXNwYWNlVVJJLmltcGwoKSksIGV4Y2VwdGlvbik7CisgICAg
aWYgKGdldERvY3VtZW50KCkgJiYgZ2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewor
ICAgICAgICByZW1vdmVBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgQXRvbWljU3Ry
aW5nKGxvY2FsTmFtZS5pbXBsKCksIGxvd2VyY2FzZWQpLCBuYW1lc3BhY2VVUkkuaW1wbCgpKSwg
ZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICByZW1vdmVBdHRyaWJ1dGUo
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLmltcGwoKSwgbmFtZXNwYWNlVVJJLmlt
cGwoKSksIGV4Y2VwdGlvbik7CiB9CiAKIEF0dHJJbXBsICpFbGVtZW50SW1wbDo6Z2V0QXR0cmli
dXRlTm9kZU5TKGNvbnN0IERPTVN0cmluZyAmbmFtZXNwYWNlVVJJLCBjb25zdCBET01TdHJpbmcg
JmxvY2FsTmFtZSkKQEAgLTc4NSw5ICs3ODYsOCBAQCBBdHRySW1wbCAqRWxlbWVudEltcGw6Omdl
dEF0dHJpYnV0ZU5vZGVOCiAgICAgTmFtZWRBdHRyTWFwSW1wbCAqYXR0cnMgPSBhdHRyaWJ1dGVz
KHRydWUpOwogICAgIGlmICghYXR0cnMpCiAgICAgICAgIHJldHVybiAwOwotICAgIERPTVN0cmlu
ZyBsbihsb2NhbE5hbWUpOwogICAgIGlmIChnZXREb2N1bWVudCgpICYmIGdldERvY3VtZW50KCkt
PmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIGxuID0gbG9jYWxOYW1lLmxvd2VyKCk7CisgICAg
ICAgIHJldHVybiBhdHRycy0+Z2V0TmFtZWRJdGVtKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIEF0
b21pY1N0cmluZyhsb2NhbE5hbWUuaW1wbCgpLCBsb3dlcmNhc2VkKSwgbmFtZXNwYWNlVVJJLmlt
cGwoKSkpOwogICAgIHJldHVybiBhdHRycy0+Z2V0TmFtZWRJdGVtKFF1YWxpZmllZE5hbWUobnVs
bEF0b20sIGxvY2FsTmFtZS5pbXBsKCksIG5hbWVzcGFjZVVSSS5pbXBsKCkpKTsKIH0KIApAQCAt
Nzk2LDExICs3OTYsOSBAQCBib29sIEVsZW1lbnRJbXBsOjpoYXNBdHRyaWJ1dGVOUyhjb25zdCBE
CiAgICAgTmFtZWRBdHRyTWFwSW1wbCAqYXR0cnMgPSBhdHRyaWJ1dGVzKHRydWUpOwogICAgIGlm
ICghYXR0cnMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBET01TdHJpbmcgbG4obG9jYWxO
YW1lKTsKICAgICBpZiAoZ2V0RG9jdW1lbnQoKSAmJiBnZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1
bWVudCgpKQotICAgICAgICBsbiA9IGxvY2FsTmFtZS5sb3dlcigpOwotICAgIHJldHVybiBhdHRy
cy0+Z2V0QXR0cmlidXRlSXRlbShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUuaW1w
bCgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
YW1lc3BhY2VVUkkuaW1wbCgpKSk7CisgICAgICAgIHJldHVybiBhdHRycy0+Z2V0QXR0cmlidXRl
SXRlbShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBBdG9taWNTdHJpbmcobG9jYWxOYW1lLmltcGwo
KSwgbG93ZXJjYXNlZCksIG5hbWVzcGFjZVVSSS5pbXBsKCkpKTsKKyAgICByZXR1cm4gYXR0cnMt
PmdldEF0dHJpYnV0ZUl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLmltcGwo
KSwgbmFtZXNwYWNlVVJJLmltcGwoKSkpOwogfQogCiBDU1NTdHlsZURlY2xhcmF0aW9uSW1wbCAq
RWxlbWVudEltcGw6OnN0eWxlKCkKQEAgLTgxMCw0MyArODA4LDYgQEAgQ1NTU3R5bGVEZWNsYXJh
dGlvbkltcGwgKkVsZW1lbnRJbXBsOjpzdAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS8qCi1Y
TUxFbGVtZW50SW1wbDo6WE1MRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgRE9NU3RyaW5n
SW1wbCAqX3F1YWxpZmllZE5hbWUsIERPTVN0cmluZ0ltcGwgKl9uYW1lc3BhY2VVUkkpCi0gICAg
OiBFbGVtZW50SW1wbChkb2MpCi17Ci0gICAgaW50IGNvbG9ucG9zID0gLTE7Ci0gICAgZm9yICh1
aW50IGkgPSAwOyBpIDwgX3F1YWxpZmllZE5hbWUtPmw7ICsraSkKLSAgICAgICAgaWYgKF9xdWFs
aWZpZWROYW1lLT5zW2ldID09ICc6JykgewotICAgICAgICAgICAgY29sb25wb3MgPSBpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIGlmIChjb2xvbnBvcyA+PSAwKSB7Ci0g
ICAgICAgIC8vIHdlIGhhdmUgYSBwcmVmaXgKLSAgICAgICAgRE9NU3RyaW5nSW1wbCogbG9jYWxO
YW1lID0gX3F1YWxpZmllZE5hbWUtPmNvcHkoKTsKLSAgICAgICAgbG9jYWxOYW1lLT5yZWYoKTsK
LSAgICAgICAgbG9jYWxOYW1lLT5yZW1vdmUoMCxjb2xvbnBvcysxKTsKLSAgICAgICAgbV9pZCA9
IGRvYy0+ZG9jdW1lbnQoKS0+dGFnSWQoX25hbWVzcGFjZVVSSSwgbG9jYWxOYW1lLCBmYWxzZSk7
Ci0gICAgICAgIGxvY2FsTmFtZS0+ZGVyZWYoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1F
OiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHNpdHVhdGlvbiBmb3Igc3RhZ2Ugb25lIG9mIHRoZSBRdWFs
aWZpZWROYW1lIHBhdGNoLiAgVGhpcyBpcyBhbHNvIGEgcmVhbGx5IHN0dXBpZCB3YXkgdG8KLSAg
ICAgICAgLy8gaGF2ZSB0byBoYW5kbGUgdGhlIHByZWZpeC4gIFdheSB0b28gbXVjaCBjb3B5aW5n
LiAgV2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGUgWE1MIHRva2VuaXplciBoYXMgZG9uZSB0aGUgc3Bs
aXQKLSAgICAgICAgLy8gYWxyZWFkeSBpbnRvIHByZWZpeCBhbmQgbG9jYWxOYW1lLgotICAgICAg
ICBET01TdHJpbmdJbXBsKiBwcmVmaXggPSBfcXVhbGlmaWVkTmFtZS0+Y29weSgpOwotICAgICAg
ICBwcmVmaXgtPnJlZigpOwotICAgICAgICBwcmVmaXgtPnRydW5jYXRlKGNvbG9ucG9zKTsKLSAg
ICAgICAgbV90YWdOYW1lID0gUXVhbGlmaWVkTmFtZShwcmVmaXgsIG51bGxBdG9tLCBudWxsQXRv
bSk7Ci0gICAgICAgIHByZWZpeC0+ZGVyZWYoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICAv
LyBubyBwcmVmaXgKLSAgICAgICAgbV9pZCA9IGRvYy0+ZG9jdW1lbnQoKS0+dGFnSWQoX25hbWVz
cGFjZVVSSSwgX3F1YWxpZmllZE5hbWUsIGZhbHNlKTsKLX0KLQotKi8KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCiBOYW1lZEF0dHJNYXBJbXBsOjpOYW1lZEF0dHJNYXBJbXBsKEVsZW1lbnRJbXBs
ICplKQogICAgIDogZWxlbWVudChlKQogICAgICwgYXR0cnMoMCkKQEAgLTg2NiwxOCArODI3LDE2
IEBAIGJvb2wgTmFtZWRBdHRyTWFwSW1wbDo6aXNNYXBwZWRBdHRyaWJ1dGUKIAogTm9kZUltcGwg
Kk5hbWVkQXR0ck1hcEltcGw6OmdldE5hbWVkSXRlbU5TKGNvbnN0IERPTVN0cmluZyAmbmFtZXNw
YWNlVVJJLCBjb25zdCBET01TdHJpbmcgJmxvY2FsTmFtZSkgY29uc3QKIHsKLSAgICBET01TdHJp
bmcgbG4obG9jYWxOYW1lKTsKICAgICBpZiAoZWxlbWVudC0+Z2V0RG9jdW1lbnQoKS0+aXNIVE1M
RG9jdW1lbnQoKSkKLSAgICAgICAgbG4gPSBsb2NhbE5hbWUubG93ZXIoKTsKLSAgICByZXR1cm4g
Z2V0TmFtZWRJdGVtKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxuLmltcGwoKSwgbmFtZXNwYWNl
VVJJLmltcGwoKSkpOworICAgICAgICByZXR1cm4gZ2V0TmFtZWRJdGVtKFF1YWxpZmllZE5hbWUo
bnVsbEF0b20sIEF0b21pY1N0cmluZyhsb2NhbE5hbWUuaW1wbCgpLCBsb3dlcmNhc2VkKSwgbmFt
ZXNwYWNlVVJJLmltcGwoKSkpOworICAgIHJldHVybiBnZXROYW1lZEl0ZW0oUXVhbGlmaWVkTmFt
ZShudWxsQXRvbSwgbG9jYWxOYW1lLmltcGwoKSwgbmFtZXNwYWNlVVJJLmltcGwoKSkpOwogfQog
CiBTaGFyZWRQdHI8Tm9kZUltcGw+IE5hbWVkQXR0ck1hcEltcGw6OnJlbW92ZU5hbWVkSXRlbU5T
KGNvbnN0IERPTVN0cmluZyAmbmFtZXNwYWNlVVJJLCBjb25zdCBET01TdHJpbmcgJmxvY2FsTmFt
ZSwgaW50ICZleGNlcHRpb24pCiB7Ci0gICAgRE9NU3RyaW5nIGxuKGxvY2FsTmFtZSk7CiAgICAg
aWYgKGVsZW1lbnQtPmdldERvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIGxu
ID0gbG9jYWxOYW1lLmxvd2VyKCk7Ci0gICAgcmV0dXJuIHJlbW92ZU5hbWVkSXRlbShRdWFsaWZp
ZWROYW1lKG51bGxBdG9tLCBsbi5pbXBsKCksIG5hbWVzcGFjZVVSSS5pbXBsKCkpLCBleGNlcHRp
b24pOworICAgICAgICByZXR1cm4gcmVtb3ZlTmFtZWRJdGVtKFF1YWxpZmllZE5hbWUobnVsbEF0
b20sIEF0b21pY1N0cmluZyhsb2NhbE5hbWUuaW1wbCgpLCBsb3dlcmNhc2VkKSwgbmFtZXNwYWNl
VVJJLmltcGwoKSksIGV4Y2VwdGlvbik7CisgICAgcmV0dXJuIHJlbW92ZU5hbWVkSXRlbShRdWFs
aWZpZWROYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUuaW1wbCgpLCBuYW1lc3BhY2VVUkkuaW1wbCgp
KSwgZXhjZXB0aW9uKTsKIH0KIAogQXR0ckltcGwgKk5hbWVkQXR0ck1hcEltcGw6OmdldE5hbWVk
SXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdApAQCAtMTI2NSwxNCArMTIyNCwx
NCBAQCB2b2lkIE5hbWVkTWFwcGVkQXR0ck1hcEltcGw6OnBhcnNlQ2xhc3NBCiAgICAgaWYgKCFl
bGVtZW50LT5oYXNDbGFzcygpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgRE9NU3RyaW5n
IGNsYXNzQXR0ciA9IGVsZW1lbnQtPmdldERvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpID8gCi0g
ICAgICAgIChjbGFzc1N0ci5pbXBsKCktPmlzTG93ZXIoKSA/IGNsYXNzU3RyIDogRE9NU3RyaW5n
KGNsYXNzU3RyLmltcGwoKS0+bG93ZXIoKSkpIDoKLSAgICAgICAgY2xhc3NTdHI7CisgICAgYm9v
bCBuZWVkc0xvd2VyY2FzaW5nID0gZWxlbWVudC0+Z2V0RG9jdW1lbnQoKS0+aW5Db21wYXRNb2Rl
KCk7CiAgICAgCi0gICAgaWYgKGNsYXNzQXR0ci5maW5kKCcgJykgPT0gLTEgJiYgY2xhc3NBdHRy
LmZpbmQoJ1xuJykgPT0gLTEpCi0gICAgICAgIG1fY2xhc3NMaXN0LnNldFN0cmluZyhBdG9taWNT
dHJpbmcoY2xhc3NBdHRyKSk7CisgICAgaWYgKGNsYXNzU3RyLmZpbmQoJyAnKSA9PSAtMSAmJiBj
bGFzc1N0ci5maW5kKCdcbicpID09IC0xKQorICAgICAgICBtX2NsYXNzTGlzdC5zZXRTdHJpbmco
bmVlZHNMb3dlcmNhc2luZyA/IEF0b21pY1N0cmluZyhjbGFzc1N0ciwgbG93ZXJjYXNlZCkgOiBB
dG9taWNTdHJpbmcoY2xhc3NTdHIpKTsKICAgICBlbHNlIHsKLSAgICAgICAgUVN0cmluZyB2YWwg
PSBjbGFzc0F0dHIucXN0cmluZygpOworICAgICAgICBRU3RyaW5nIHZhbCA9IGNsYXNzU3RyLnFz
dHJpbmcoKTsKKyAgICAgICAgaWYgKG5lZWRzTG93ZXJjYXNpbmcpCisgICAgICAgICAgICB2YWwg
PSB2YWwubG93ZXIoKTsKICAgICAgICAgdmFsLnJlcGxhY2UoJ1xuJywgJyAnKTsKICAgICAgICAg
UVN0cmluZ0xpc3QgbGlzdCA9IFFTdHJpbmdMaXN0OjpzcGxpdCgnICcsIHZhbCk7CiAgICAgICAg
IApAQCAtMTI4Myw4ICsxMjQyLDcgQEAgdm9pZCBOYW1lZE1hcHBlZEF0dHJNYXBJbXBsOjpwYXJz
ZUNsYXNzQQogICAgICAgICAgICAgICAgIGlmIChjdXJyKSB7CiAgICAgICAgICAgICAgICAgICAg
IGN1cnItPnNldE5leHQobmV3IEF0b21pY1N0cmluZ0xpc3QoQXRvbWljU3RyaW5nKHNpbmdsZUNs
YXNzKSkpOwogICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci0+bmV4dCgpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICBtX2NsYXNzTGlzdC5zZXRTdHJpbmcoQXRvbWljU3Ry
aW5nKHNpbmdsZUNsYXNzKSk7CiAgICAgICAgICAgICAgICAgICAgIGN1cnIgPSAmbV9jbGFzc0xp
c3Q7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTM5NCw3ICsxMzUyLDcgQEAgdm9pZCBTdHlsZWRF
bGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaQogICAgICAgICAgICAgaWYgKGF0dHItPmlzTnVs
bCgpKQogICAgICAgICAgICAgICAgIG5hbWVkQXR0ck1hcC0+c2V0SUQobnVsbEF0b20pOwogICAg
ICAgICAgICAgZWxzZSBpZiAoZ2V0RG9jdW1lbnQoKSAmJiBnZXREb2N1bWVudCgpLT5pbkNvbXBh
dE1vZGUoKSAmJiAhYXR0ci0+dmFsdWUoKS5pbXBsKCktPmlzTG93ZXIoKSkKLSAgICAgICAgICAg
ICAgICBuYW1lZEF0dHJNYXAtPnNldElEKEF0b21pY1N0cmluZyhhdHRyLT52YWx1ZSgpLmRvbVN0
cmluZygpLmxvd2VyKCkpKTsKKyAgICAgICAgICAgICAgICBuYW1lZEF0dHJNYXAtPnNldElEKEF0
b21pY1N0cmluZyhhdHRyLT52YWx1ZSgpLCBsb3dlcmNhc2VkKSk7CiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgbmFtZWRBdHRyTWFwLT5zZXRJRChhdHRyLT52YWx1ZSgpKTsKICAg
ICAgICAgfQpJbmRleDoga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTg0CmRpZmYgLXAgLXUgLXIxLjE4NCBraHRtbC94bWwvZG9tX25v
ZGVpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAJNCBTZXAgMjAwNSAwOTo1
NTowNyAtMDAwMAkxLjE4NAorKysga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAJNSBTZXAgMjAw
NSAxNzo1OTo1NCAtMDAwMApAQCAtMTU5NiwxMCArMTU5Niw4IEBAIFNoYXJlZFB0cjxOb2RlTGlz
dEltcGw+IE5vZGVJbXBsOjpnZXRFbGUKICAgICBpZiAobmFtZXNwYWNlVVJJLmlzTnVsbCgpIHx8
IGxvY2FsTmFtZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFNoYXJlZFB0cjxOb2RlTGlzdElt
cGw+KCk7IC8vIEZJWE1FOiBXaG8gY2FyZXMgYWJvdXQgdGhpcyBhZGRpdGlvbmFsIGNoZWNrPwog
ICAgIAotICAgIERPTVN0cmluZyBuYW1lID0gbG9jYWxOYW1lOwotICAgIGlmIChnZXREb2N1bWVu
dCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICBuYW1lID0gbG9jYWxOYW1lLmxvd2VyKCk7
Ci0gICAgcmV0dXJuIFNoYXJlZFB0cjxOb2RlTGlzdEltcGw+KG5ldyBUYWdOb2RlTGlzdEltcGwo
dGhpcywgQXRvbWljU3RyaW5nKG5hbWVzcGFjZVVSSSksIEF0b21pY1N0cmluZyhuYW1lKSkpOwor
ICAgIHJldHVybiBTaGFyZWRQdHI8Tm9kZUxpc3RJbXBsPihuZXcgVGFnTm9kZUxpc3RJbXBsKHRo
aXMsIEF0b21pY1N0cmluZyhuYW1lc3BhY2VVUkkpLAorICAgICAgICBnZXREb2N1bWVudCgpLT5p
c0hUTUxEb2N1bWVudCgpID8gQXRvbWljU3RyaW5nKGxvY2FsTmFtZSwgbG93ZXJjYXNlZCkgOiBB
dG9taWNTdHJpbmcobG9jYWxOYW1lKSkpOwogfQogCiBib29sIE5vZGVJbXBsOjppc1N1cHBvcnRl
ZChjb25zdCBET01TdHJpbmcgJmZlYXR1cmUsIGNvbnN0IERPTVN0cmluZyAmdmVyc2lvbikKSW5k
ZXg6IGtodG1sL3htbC9kb21fc3RyaW5naW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9zdHJpbmdpbXBsLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4zMApkaWZmIC1wIC11IC1yMS4zMCBraHRtbC94bWwvZG9tX3N0cmluZ2ltcGwu
Y3BwCi0tLSBraHRtbC94bWwvZG9tX3N0cmluZ2ltcGwuY3BwCTI1IEF1ZyAyMDA1IDE3OjQ3OjIx
IC0wMDAwCTEuMzAKKysrIGtodG1sL3htbC9kb21fc3RyaW5naW1wbC5jcHAJNSBTZXAgMjAwNSAx
Nzo1OTo1NSAtMDAwMApAQCAtMjYsOSArMjYsMTIgQEAKICNpbmNsdWRlICJkb21fc3RyaW5naW1w
bC5oIgogCiAjaW5jbHVkZSA8a2RlYnVnLmg+Ci0KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNs
dWRlICJkb21fYXRvbWljc3RyaW5nLmgiCisjaW5jbHVkZSAibWlzYy9raHRtbGxheW91dC5oIgor
CisjZGVmaW5lIFFUX0FMTE9DX1FDSEFSX1ZFQyggTiApIHN0YXRpY19jYXN0PFFDaGFyKj4obWFp
bl90aHJlYWRfbWFsbG9jKCBzaXplb2YoUUNoYXIpKiggTiApICkpCisjZGVmaW5lIFFUX0RFTEVU
RV9RQ0hBUl9WRUMoIFAgKSBtYWluX3RocmVhZF9mcmVlICgodm9pZCopKCBQICkpCiAKIHVzaW5n
IG5hbWVzcGFjZSBraHRtbDsKIApAQCAtNDMsMTIgKzQ2LDEzIEBAIERPTVN0cmluZ0ltcGwqIERP
TVN0cmluZ0ltcGw6OmVtcHR5KCkKICAgICByZXR1cm4gJmU7CiB9CiAKLURPTVN0cmluZ0ltcGw6
OkRPTVN0cmluZ0ltcGwoY29uc3QgUUNoYXIgKnN0ciwgdW5zaWduZWQgaW50IGxlbikgeworRE9N
U3RyaW5nSW1wbDo6RE9NU3RyaW5nSW1wbChjb25zdCBRQ2hhciAqc3RyLCB1bnNpZ25lZCBsZW4p
Cit7CiAgICAgX2hhc2ggPSAwOwogICAgIF9pblRhYmxlID0gZmFsc2U7CiAgICAgYm9vbCBoYXZl
c3RyID0gc3RyICYmIGxlbjsKLSAgICBzID0gUVRfQUxMT0NfUUNIQVJfVkVDKCBoYXZlc3RyID8g
bGVuIDogMSApOwotICAgIGlmKHN0ciAmJiBsZW4pIHsKKyAgICBzID0gUVRfQUxMT0NfUUNIQVJf
VkVDKGhhdmVzdHIgPyBsZW4gOiAxKTsKKyAgICBpZiAoaGF2ZXN0cikgewogICAgICAgICBtZW1j
cHkoIHMsIHN0ciwgbGVuICogc2l6ZW9mKFFDaGFyKSApOwogICAgICAgICBsID0gbGVuOwogICAg
IH0gZWxzZSB7CkBAIC01OCw2ICs2Miw0MiBAQCBET01TdHJpbmdJbXBsOjpET01TdHJpbmdJbXBs
KGNvbnN0IFFDaGFyCiAgICAgfQogfQogCitET01TdHJpbmdJbXBsOjpET01TdHJpbmdJbXBsKGNv
bnN0IFFDaGFyICpzdHIsIHVuc2lnbmVkIGxlbiwgTG93ZXJjYXNlZCkKK3sKKyAgICBfaGFzaCA9
IDA7CisgICAgX2luVGFibGUgPSBmYWxzZTsKKyAgICBib29sIGhhdmVzdHIgPSBzdHIgJiYgbGVu
OworICAgIFFDaGFyICpuZXdTdHIgPSBRVF9BTExPQ19RQ0hBUl9WRUMoaGF2ZXN0ciA/IGxlbiA6
IDEpOworICAgIHMgPSBuZXdTdHI7CisgICAgaWYgKGhhdmVzdHIpIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKQorICAgICAgICAgICAgbmV3U3RyW2ldID0gc3Ry
W2ldLmxvd2VyKCk7CisgICAgICAgIGwgPSBsZW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
Y3Jhc2ggcHJvdGVjdGlvbgorICAgICAgICBuZXdTdHJbMF0gPSAweDA7CisgICAgICAgIGwgPSAw
OworICAgIH0KK30KKworRE9NU3RyaW5nSW1wbDo6RE9NU3RyaW5nSW1wbChjb25zdCBjaGFyICpz
dHIsIHVuc2lnbmVkIGxlbiwgTG93ZXJjYXNlZCkKK3sKKyAgICBfaGFzaCA9IDA7CisgICAgX2lu
VGFibGUgPSBmYWxzZTsKKyAgICBib29sIGhhdmVzdHIgPSBzdHIgJiYgbGVuOworICAgIFFDaGFy
ICpuZXdTdHIgPSBRVF9BTExPQ19RQ0hBUl9WRUMoaGF2ZXN0ciA/IGxlbiA6IDEpOworICAgIHMg
PSBuZXdTdHI7CisgICAgaWYgKGhhdmVzdHIpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbjsgKytpKQorICAgICAgICAgICAgbmV3U3RyW2ldID0gUUNoYXIoc3RyW2ldKS5s
b3dlcigpOworICAgICAgICBsID0gbGVuOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIGNyYXNo
IHByb3RlY3Rpb24KKyAgICAgICAgbmV3U3RyWzBdID0gMHgwOworICAgICAgICBsID0gMDsKKyAg
ICB9Cit9CisKIERPTVN0cmluZ0ltcGw6OkRPTVN0cmluZ0ltcGwoY29uc3QgY2hhciAqc3RyKQog
ewogICAgIF9oYXNoID0gMDsKQEAgLTIzNSw3ICsyNzUsNyBAQCBzdGF0aWMgTGVuZ3RoIHBhcnNl
TGVuZ3RoKFFDaGFyICpzLCB1bnNpCiAgICAgICAgICsraTsKIAogICAgIGJvb2wgb2s7Ci0gICAg
aW50IHIgPSBRQ29uc3RTdHJpbmcocywgaSkucXN0cmluZygpLnRvSW50KCZvayk7CisgICAgaW50
IHIgPSBRQ29uc3RTdHJpbmcocywgaSkuc3RyaW5nKCkudG9JbnQoJm9rKTsKIAogICAgIC8qIFNr
aXAgb3ZlciBhbnkgcmVtYWluaW5nIGRpZ2l0cywgd2UgYXJlIG5vdCB0aGF0IGFjY3VyYXRlICg1
LjUlID0+IDUlKSAqLwogICAgIHdoaWxlIChpIDwgbCAmJiAoc1tpXS5pc0RpZ2l0KCkgfHwgc1tp
XSA9PSAnLicpKQpAQCAtNDI0LDcgKzQ2NCw3IEBAIGludCBET01TdHJpbmdJbXBsOjp0b0ludChi
b29sICpvaykgY29uc3QKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICByZXR1cm4gUUNvbnN0
U3RyaW5nKHMsIGkpLnFzdHJpbmcoKS50b0ludChvayk7CisgICAgcmV0dXJuIFFDb25zdFN0cmlu
ZyhzLCBpKS5zdHJpbmcoKS50b0ludChvayk7CiB9CiAKIERPTVN0cmluZ0ltcGwgKkRPTVN0cmlu
Z0ltcGw6OnJlcGxhY2UoUUNoYXIgb2xkQywgUUNoYXIgbmV3QykKQEAgLTQ1OSw5ICs0OTksOCBA
QCBjb25zdCB1bnNpZ25lZCBQSEkgPSAweDllMzc3OWI5VTsKIAogLy8gUGF1bCBIc2llaCdzIFN1
cGVyRmFzdEhhc2gKIC8vIGh0dHA6Ly93d3cuYXppbGxpb25tb25rZXlzLmNvbS9xZWQvaGFzaC5o
dG1sCi11bnNpZ25lZCBET01TdHJpbmdJbXBsOjpjb21wdXRlSGFzaChjb25zdCBRQ2hhciAqcywg
aW50IGxlbikKK3Vuc2lnbmVkIERPTVN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKGNvbnN0IFFDaGFy
ICpzLCB1bnNpZ25lZCBsKQogewotICAgIHVuc2lnbmVkIGwgPSBsZW47CiAgICAgdWludDMyX3Qg
aGFzaCA9IFBISTsKICAgICB1aW50MzJfdCB0bXA7CiAgICAgCkBAIC01NDcsNiArNTg2LDk0IEBA
IHVuc2lnbmVkIERPTVN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKGNvbnMKICAgICByZXR1cm4gaGFz
aDsKIH0KIAorLy8gUGF1bCBIc2llaCdzIFN1cGVyRmFzdEhhc2gKKy8vIGh0dHA6Ly93d3cuYXpp
bGxpb25tb25rZXlzLmNvbS9xZWQvaGFzaC5odG1sCit1bnNpZ25lZCBET01TdHJpbmdJbXBsOjpj
b21wdXRlTG93ZXJjYXNlZEhhc2goY29uc3QgUUNoYXIgKnMsIHVuc2lnbmVkIGwpCit7CisgICAg
dWludDMyX3QgaGFzaCA9IFBISTsKKyAgICB1aW50MzJfdCB0bXA7CisgICAgCisgICAgaW50IHJl
bSA9IGwgJiAxOworICAgIGwgPj49IDE7CisgICAgCisgICAgLy8gTWFpbiBsb29wCisgICAgZm9y
ICg7IGwgPiAwOyBsLS0pIHsKKyAgICAgICAgaGFzaCArPSBzWzBdLmxvd2VyKCkudW5pY29kZSgp
OworICAgICAgICB0bXAgPSAoc1sxXS5sb3dlcigpLnVuaWNvZGUoKSA8PCAxMSkgXiBoYXNoOwor
ICAgICAgICBoYXNoID0gKGhhc2ggPDwgMTYpIF4gdG1wOworICAgICAgICBzICs9IDI7CisgICAg
ICAgIGhhc2ggKz0gaGFzaCA+PiAxMTsKKyAgICB9CisgICAgCisgICAgLy8gSGFuZGxlIGVuZCBj
YXNlCisgICAgaWYgKHJlbSkgeworICAgICAgICBoYXNoICs9IHNbMF0ubG93ZXIoKS51bmljb2Rl
KCk7CisgICAgICAgIGhhc2ggXj0gaGFzaCA8PCAxMTsKKyAgICAgICAgaGFzaCArPSBoYXNoID4+
IDE3OworICAgIH0KKworICAgIC8vIEZvcmNlICJhdmFsYW5jaGluZyIgb2YgZmluYWwgMTI3IGJp
dHMKKyAgICBoYXNoIF49IGhhc2ggPDwgMzsKKyAgICBoYXNoICs9IGhhc2ggPj4gNTsKKyAgICBo
YXNoIF49IGhhc2ggPDwgMjsKKyAgICBoYXNoICs9IGhhc2ggPj4gMTU7CisgICAgaGFzaCBePSBo
YXNoIDw8IDEwOworCisgICAgLy8gdGhpcyBhdm9pZHMgZXZlciByZXR1cm5pbmcgYSBoYXNoIGNv
ZGUgb2YgMCwgc2luY2UgdGhhdCBpcyB1c2VkIHRvCisgICAgLy8gc2lnbmFsICJoYXNoIG5vdCBj
b21wdXRlZCB5ZXQiLCB1c2luZyBhIHZhbHVlIHRoYXQgaXMgbGlrZWx5IHRvIGJlCisgICAgLy8g
ZWZmZWN0aXZlbHkgdGhlIHNhbWUgYXMgMCB3aGVuIHRoZSBsb3cgYml0cyBhcmUgbWFza2VkCisg
ICAgaWYgKGhhc2ggPT0gMCkKKyAgICAgICAgaGFzaCA9IDB4ODAwMDAwMDA7CisgICAgCisgICAg
cmV0dXJuIGhhc2g7Cit9CisKKy8vIFBhdWwgSHNpZWgncyBTdXBlckZhc3RIYXNoCisvLyBodHRw
Oi8vd3d3LmF6aWxsaW9ubW9ua2V5cy5jb20vcWVkL2hhc2guaHRtbAordW5zaWduZWQgRE9NU3Ry
aW5nSW1wbDo6Y29tcHV0ZUxvd2VyY2FzZWRIYXNoKGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGwp
Cit7CisgICAgLy8gVGhpcyBoYXNoIGlzIGRlc2lnbmVkIHRvIHdvcmsgb24gMTYtYml0IGNodW5r
cyBhdCBhIHRpbWUuIEJ1dCBzaW5jZSB0aGUgbm9ybWFsIGNhc2UKKyAgICAvLyAoYWJvdmUpIGlz
IHRvIGhhc2ggVVRGLTE2IGNoYXJhY3RlcnMsIHdlIGp1c3QgdHJlYXQgdGhlIDgtYml0IGNoYXJz
IGFzIGlmIHRoZXkKKyAgICAvLyB3ZXJlIDE2LWJpdCBjaHVua3MsIHdoaWNoIHNob3VsZCBnaXZl
IG1hdGNoaW5nIHJlc3VsdHMKKworICAgIHVpbnQzMl90IGhhc2ggPSBQSEk7CisgICAgdWludDMy
X3QgdG1wOworICAgIAorICAgIGludCByZW0gPSBsICYgMTsKKyAgICBsID4+PSAxOworICAgIAor
ICAgIC8vIE1haW4gbG9vcAorICAgIGZvciAoOyBsID4gMDsgbC0tKSB7CisgICAgICAgIGhhc2gg
Kz0gUUNoYXIoc1swXSkubG93ZXIoKS51bmljb2RlKCk7CisgICAgICAgIHRtcCA9IChRQ2hhcihz
WzFdKS5sb3dlcigpLnVuaWNvZGUoKSA8PCAxMSkgXiBoYXNoOworICAgICAgICBoYXNoID0gKGhh
c2ggPDwgMTYpIF4gdG1wOworICAgICAgICBzICs9IDI7CisgICAgICAgIGhhc2ggKz0gaGFzaCA+
PiAxMTsKKyAgICB9CisgICAgCisgICAgLy8gSGFuZGxlIGVuZCBjYXNlCisgICAgaWYgKHJlbSkg
eworICAgICAgICBoYXNoICs9IFFDaGFyKHNbMF0pLmxvd2VyKCkudW5pY29kZSgpOworICAgICAg
ICBoYXNoIF49IGhhc2ggPDwgMTE7CisgICAgICAgIGhhc2ggKz0gaGFzaCA+PiAxNzsKKyAgICB9
CisKKyAgICAvLyBGb3JjZSAiYXZhbGFuY2hpbmciIG9mIGZpbmFsIDEyNyBiaXRzCisgICAgaGFz
aCBePSBoYXNoIDw8IDM7CisgICAgaGFzaCArPSBoYXNoID4+IDU7CisgICAgaGFzaCBePSBoYXNo
IDw8IDI7CisgICAgaGFzaCArPSBoYXNoID4+IDE1OworICAgIGhhc2ggXj0gaGFzaCA8PCAxMDsK
KworICAgIC8vIHRoaXMgYXZvaWRzIGV2ZXIgcmV0dXJuaW5nIGEgaGFzaCBjb2RlIG9mIDAsIHNp
bmNlIHRoYXQgaXMgdXNlZCB0bworICAgIC8vIHNpZ25hbCAiaGFzaCBub3QgY29tcHV0ZWQgeWV0
IiwgdXNpbmcgYSB2YWx1ZSB0aGF0IGlzIGxpa2VseSB0byBiZQorICAgIC8vIGVmZmVjdGl2ZWx5
IHRoZSBzYW1lIGFzIDAgd2hlbiB0aGUgbG93IGJpdHMgYXJlIG1hc2tlZAorICAgIGlmIChoYXNo
ID09IDApCisgICAgICAgIGhhc2ggPSAweDgwMDAwMDAwOworICAgIAorICAgIHJldHVybiBoYXNo
OworfQorCiBjb25zdCBjaGFyICpET01TdHJpbmdJbXBsOjphc2NpaSgpIGNvbnN0CiB7CiAgICAg
Y2hhciAqYnVmZmVyID0gbmV3IGNoYXJbbCArIDFdOwpJbmRleDoga2h0bWwveG1sL2RvbV9zdHJp
bmdpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1s
L2RvbV9zdHJpbmdpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAtcCAtdSAt
cjEuMTQga2h0bWwveG1sL2RvbV9zdHJpbmdpbXBsLmgKLS0tIGtodG1sL3htbC9kb21fc3RyaW5n
aW1wbC5oCTIxIEp1biAyMDA1IDIyOjI3OjU1IC0wMDAwCTEuMTQKKysrIGtodG1sL3htbC9kb21f
c3RyaW5naW1wbC5oCTUgU2VwIDIwMDUgMTc6NTk6NTUgLTAwMDAKQEAgLTE5LDIwICsxOSwyMyBA
QAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgogICovCi0jaWZuZGVmIF9ET01f
RE9NU3RyaW5nSW1wbF9oXwotI2RlZmluZSBfRE9NX0RPTVN0cmluZ0ltcGxfaF8KKworI2lmbmRl
ZiBET01fRE9NU1RSSU5HSU1QTF9ICisjZGVmaW5lIERPTV9ET01TVFJJTkdJTVBMX0gKIAogI2lu
Y2x1ZGUgPHFzdHJpbmcuaD4KIAotI2luY2x1ZGUgIm1pc2Mva2h0bWxsYXlvdXQuaCIKICNpbmNs
dWRlICJtaXNjL3NoYXJlZC5oIgogI2luY2x1ZGUgIm1pc2MvbWFpbl90aHJlYWRfbWFsbG9jLmgi
CiAKLSNkZWZpbmUgUVRfQUxMT0NfUUNIQVJfVkVDKCBOICkgc3RhdGljX2Nhc3Q8UUNoYXIqPiht
YWluX3RocmVhZF9tYWxsb2MoIHNpemVvZihRQ2hhcikqKCBOICkgKSkKLSNkZWZpbmUgUVRfREVM
RVRFX1FDSEFSX1ZFQyggUCApIG1haW5fdGhyZWFkX2ZyZWUgKCh2b2lkKikoIFAgKSkKK25hbWVz
cGFjZSBraHRtbCB7CisgICAgc3RydWN0IExlbmd0aDsKK30KIAogbmFtZXNwYWNlIERPTSB7CiAK
K2VudW0gTG93ZXJjYXNlZCB7IGxvd2VyY2FzZWQgfTsKKwogY2xhc3MgRE9NU3RyaW5nSW1wbCA6
IHB1YmxpYyBraHRtbDo6U2hhcmVkPERPTVN0cmluZ0ltcGw+CiB7CiBwcml2YXRlOgpAQCAtNDMs
MTYgKzQ2LDIwIEBAIHByb3RlY3RlZDoKICAgICBET01TdHJpbmdJbXBsKCkgeyBzID0gMCwgbCA9
IDA7IF9oYXNoID0gMDsgX2luVGFibGUgPSBmYWxzZTsgfQogcHVibGljOgogICAgIERPTVN0cmlu
Z0ltcGwoY29uc3QgUUNoYXIgKnN0ciwgdW5zaWduZWQgaW50IGxlbik7CisgICAgRE9NU3RyaW5n
SW1wbChjb25zdCBRQ2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgbGVuLCBMb3dlcmNhc2VkKTsKICAg
ICBET01TdHJpbmdJbXBsKGNvbnN0IGNoYXIgKnN0cik7CiAgICAgRE9NU3RyaW5nSW1wbChjb25z
dCBjaGFyICpzdHIsIHVuc2lnbmVkIGludCBsZW4pOworICAgIERPTVN0cmluZ0ltcGwoY29uc3Qg
Y2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgbGVuLCBMb3dlcmNhc2VkKTsKICAgICBET01TdHJpbmdJ
bXBsKGNvbnN0IFFDaGFyICZjaCk7CiAgICAgfkRPTVN0cmluZ0ltcGwoKTsKICAgICAKICAgICBN
QUlOX1RIUkVBRF9BTExPQ0FURUQ7CiAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyBpZiAo
X2hhc2ggPT0gMCkgX2hhc2ggPSBjb21wdXRlSGFzaChzLCBsKTsgcmV0dXJuIF9oYXNoOyB9Ci0g
ICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoKGNvbnN0IFFDaGFyICosIGludCBsZW5ndGgp
OworICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBRQ2hhciAqLCB1bnNpZ25l
ZCBsZW5ndGgpOwogICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBjaGFyICop
OworICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlTG93ZXJjYXNlZEhhc2goY29uc3QgUUNoYXIg
KiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUxvd2VyY2Fz
ZWRIYXNoKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICAKICAgICB2b2lkIGFw
cGVuZChET01TdHJpbmdJbXBsICpzdHIpOwogICAgIHZvaWQgaW5zZXJ0KERPTVN0cmluZ0ltcGwg
KnN0ciwgdW5zaWduZWQgaW50IHBvcyk7CkBAIC05Nyw1ICsxMDQsNiBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBfaW5UYWJsZTsKIH07CiAKLX07Cit9CisKICNlbmRpZgpJbmRleDoga2h0bWwveG1sL2Rv
bV90ZXh0aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwveG1sL2RvbV90ZXh0aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzAKZGlmZiAt
cCAtdSAtcjEuMzAga2h0bWwveG1sL2RvbV90ZXh0aW1wbC5jcHAKLS0tIGtodG1sL3htbC9kb21f
dGV4dGltcGwuY3BwCTMxIEF1ZyAyMDA1IDA0OjM4OjQyIC0wMDAwCTEuMzAKKysrIGtodG1sL3ht
bC9kb21fdGV4dGltcGwuY3BwCTUgU2VwIDIwMDUgMTc6NTk6NTUgLTAwMDAKQEAgLTQ1LDEzICs0
NSwxOCBAQCBDaGFyYWN0ZXJEYXRhSW1wbDo6Q2hhcmFjdGVyRGF0YUltcGwoRG9jCiBDaGFyYWN0
ZXJEYXRhSW1wbDo6Q2hhcmFjdGVyRGF0YUltcGwoRG9jdW1lbnRQdHIgKmRvYywgY29uc3QgRE9N
U3RyaW5nICZfdGV4dCkKICAgICA6IE5vZGVJbXBsKGRvYykKIHsKLSAgICBzdHIgPSBfdGV4dC5p
bXBsKCkgPyBfdGV4dC5pbXBsKCkgOiBuZXcgRE9NU3RyaW5nSW1wbCgoUUNoYXIqKTAsIDApOwot
ICAgIHN0ci0+cmVmKCk7CisgICAgRE9NU3RyaW5nSW1wbCAqaW1wbCA9IF90ZXh0LmltcGwoKTsK
KyAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgbmVjZXNzYXJ5PyBXaHkgY2FuJ3Qgd2UganVzdCBo
YXZlIGEgTlVMTCBzdHI/CisgICAgaWYgKCFpbXBsKQorICAgICAgICBpbXBsID0gbmV3IERPTVN0
cmluZ0ltcGwoKFFDaGFyKikwLCAwKTsKKyAgICBpbXBsLT5yZWYoKTsKKyAgICBzdHIgPSBpbXBs
OwogfQogCiBDaGFyYWN0ZXJEYXRhSW1wbDo6fkNoYXJhY3RlckRhdGFJbXBsKCkKIHsKLSAgICBp
ZihzdHIpIHN0ci0+ZGVyZWYoKTsKKyAgICBpZiAoRE9NU3RyaW5nSW1wbCAqaW1wbCA9IHN0cikK
KyAgICAgICAgaW1wbC0+ZGVyZWYoKTsKIH0KIAogRE9NU3RyaW5nIENoYXJhY3RlckRhdGFJbXBs
OjpkYXRhKCkgY29uc3QKSW5kZXg6IGt3cS9ET01JbnRlcm5hbC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvRE9NSW50ZXJuYWwubW0sdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuOApkaWZmIC1wIC11IC1yMS44IGt3cS9ET01JbnRlcm5hbC5tbQotLS0ga3dxL0RP
TUludGVybmFsLm1tCTI5IEF1ZyAyMDA1IDIxOjI5OjI4IC0wMDAwCTEuOAorKysga3dxL0RPTUlu
dGVybmFsLm1tCTUgU2VwIDIwMDUgMTg6MDA6MDEgLTAwMDAKQEAgLTEyOCw2ICsxMjgsNyBAQCBE
T01TdHJpbmc6OkRPTVN0cmluZyhOU1N0cmluZyAqc3RyKQogICAgIEFTU0VSVChzdHIpOwogCiAg
ICAgQ0ZJbmRleCBzaXplID0gQ0ZTdHJpbmdHZXRMZW5ndGgocmVpbnRlcnByZXRfY2FzdDxDRlN0
cmluZ1JlZj4oc3RyKSk7CisgICAgRE9NU3RyaW5nSW1wbCAqaW1wbDsKICAgICBpZiAoc2l6ZSA9
PSAwKQogICAgICAgICBtX2ltcGwgPSBET01TdHJpbmdJbXBsOjplbXB0eSgpOwogICAgIGVsc2Ug
ewpAQCAtMTQ0LDcgKzE0NSw4IEBAIERPTVN0cmluZzo6RE9NU3RyaW5nKE5TU3RyaW5nICpzdHIp
CiAgICAgICAgICAgICBmcmVlKGJ1ZmZlcik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgbV9pbXBs
LT5yZWYoKTsKKyAgICBpbXBsLT5yZWYoKTsKKyAgICBtX2ltcGwgPSBpbXBsOwogfQogCiAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDoga3dxL0tXUVBhaW50ZXIubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUVBhaW50ZXIubW0s
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTM2CmRpZmYgLXAgLXUgLXIxLjEzNiBrd3EvS1dRUGFp
bnRlci5tbQotLS0ga3dxL0tXUVBhaW50ZXIubW0JNSBTZXAgMjAwNSAwNDowMToyNCAtMDAwMAkx
LjEzNgorKysga3dxL0tXUVBhaW50ZXIubW0JNSBTZXAgMjAwNSAxODowMDowNSAtMDAwMApAQCAt
NDc2LDE0ICs0NzYsMTQgQEAgdm9pZCBRUGFpbnRlcjo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uIChD
RwogICAgIFtbV2ViQ29yZUltYWdlUmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZhY3RvcnldIHNldENH
Q29tcG9zaXRlT3BlcmF0aW9uOm9wIGluQ29udGV4dDpjb250ZXh0XTsKIH0KIAotaW50IFFQYWlu
dGVyOjpjb21wb3NpdGVPcGVyYXRvckZyb21TdHJpbmcgKGNvbnN0IFFTdHJpbmcgJmFTdHJpbmcp
CitpbnQgUVBhaW50ZXI6OmNvbXBvc2l0ZU9wZXJhdG9yRnJvbVN0cmluZyhjb25zdCBRU3RyaW5n
ICZhU3RyaW5nKQogewogICAgIE5TQ29tcG9zaXRpbmdPcGVyYXRpb24gb3AgPSBOU0NvbXBvc2l0
ZVNvdXJjZU92ZXI7CiAgICAgCiAgICAgaWYgKGFTdHJpbmcubGVuZ3RoKCkpIHsKICAgICAgICAg
Y29uc3QgY2hhciAqb3BlcmF0b3JTdHJpbmcgPSBhU3RyaW5nLmFzY2lpKCk7CiAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgTlVNX0NPTVBPU0lURV9PUEVSQVRPUlM7IGkrKykgewotICAgICAg
ICAgICAgaWYgKHN0cmNhc2VjbXAgKG9wZXJhdG9yU3RyaW5nLCBjb21wb3NpdGVPcGVyYXRvcnNb
aV0ubmFtZSkgPT0gMCkgeworICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAob3BlcmF0b3JTdHJp
bmcsIGNvbXBvc2l0ZU9wZXJhdG9yc1tpXS5uYW1lKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGNvbXBvc2l0ZU9wZXJhdG9yc1tpXS52YWx1ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpJbmRleDoga3dxL0tXUVN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2t3cS9LV1FTdHJpbmcuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMTUKZGlm
ZiAtcCAtdSAtcjEuMTE1IGt3cS9LV1FTdHJpbmcuaAotLS0ga3dxL0tXUVN0cmluZy5oCTI1IEF1
ZyAyMDA1IDE3OjQ3OjI2IC0wMDAwCTEuMTE1CisrKyBrd3EvS1dRU3RyaW5nLmgJNSBTZXAgMjAw
NSAxODowMDowNSAtMDAwMApAQCAtNzUyLDcgKzc1Miw3IEBAIGNsYXNzIFFDb25zdFN0cmluZyA6
IHByaXZhdGUgUVN0cmluZyB7CiBwdWJsaWM6CiAgICAgUUNvbnN0U3RyaW5nKGNvbnN0IFFDaGFy
ICosIHVpbnQpOwogICAgIH5RQ29uc3RTdHJpbmcoKTsKLSAgICBjb25zdCBRU3RyaW5nICZxc3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKyAgICBjb25zdCBRU3RyaW5nICZzdHJpbmco
KSBjb25zdCB7IHJldHVybiAqdGhpczsgfQogfTsKIAogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3770</attachid>
            <date>2005-09-05 11:04:16 -0700</date>
            <delta_ts>2005-09-05 11:18:05 -0700</delta_ts>
            <desc>refined a tiny bit more</desc>
            <filename>StringPatch2.txt</filename>
            <type>text/plain</type>
            <size>98084</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2todG1sX3BhcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2todG1sX3BhcnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMz
OQpkaWZmIC1wIC11IC1yMS4zMzkga2h0bWwva2h0bWxfcGFydC5jcHAKLS0tIGtodG1sL2todG1s
X3BhcnQuY3BwCTEgU2VwIDIwMDUgMTg6MDM6MzEgLTAwMDAJMS4zMzkKKysrIGtodG1sL2todG1s
X3BhcnQuY3BwCTUgU2VwIDIwMDUgMTg6MDQ6MTggLTAwMDAKQEAgLTU2NDgsNyArNTY0OCw3IEBA
IHN0YXRpYyB2b2lkIHVwZGF0ZVN0YXRlKENTU011dGFibGVTdHlsZUQKICAgICAgICAgaW50IHBy
b3BlcnR5SUQgPSAoKml0KS5pZCgpOwogICAgICAgICBET01TdHJpbmcgZGVzaXJlZFByb3BlcnR5
ID0gZGVzaXJlZFN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOwogICAgICAgICBE
T01TdHJpbmcgY29tcHV0ZWRQcm9wZXJ0eSA9IGNvbXB1dGVkU3R5bGUtPmdldFByb3BlcnR5VmFs
dWUocHJvcGVydHlJRCk7Ci0gICAgICAgIEtIVE1MUGFydDo6VHJpU3RhdGUgcHJvcGVydHlTdGF0
ZSA9IHN0cmNhc2VjbXAoZGVzaXJlZFByb3BlcnR5LCBjb21wdXRlZFByb3BlcnR5KSA9PSAwCisg
ICAgICAgIEtIVE1MUGFydDo6VHJpU3RhdGUgcHJvcGVydHlTdGF0ZSA9IGVxdWFsc0lnbm9yaW5n
Q2FzZShkZXNpcmVkUHJvcGVydHksIGNvbXB1dGVkUHJvcGVydHkpCiAgICAgICAgICAgICA/IEtI
VE1MUGFydDo6dHJ1ZVRyaVN0YXRlIDogS0hUTUxQYXJ0OjpmYWxzZVRyaVN0YXRlOwogICAgICAg
ICBpZiAoYXRTdGFydCkgewogICAgICAgICAgICAgc3RhdGUgPSBwcm9wZXJ0eVN0YXRlOwpAQCAt
NTcxNyw3ICs1NzE3LDcgQEAgYm9vbCBLSFRNTFBhcnQ6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUo
QwogICAgICAgICBpbnQgcHJvcGVydHlJRCA9ICgqaXQpLmlkKCk7CiAgICAgICAgIERPTVN0cmlu
ZyBkZXNpcmVkUHJvcGVydHkgPSBtdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5VmFsdWUocHJvcGVy
dHlJRCk7CiAgICAgICAgIERPTVN0cmluZyBzZWxlY3Rpb25Qcm9wZXJ0eSA9IHNlbGVjdGlvblN0
eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOwotICAgICAgICBpZiAoc3RyY2FzZWNt
cChzZWxlY3Rpb25Qcm9wZXJ0eSwgZGVzaXJlZFByb3BlcnR5KSAhPSAwKSB7CisgICAgICAgIGlm
IChlcXVhbHNJZ25vcmluZ0Nhc2Uoc2VsZWN0aW9uUHJvcGVydHksIGRlc2lyZWRQcm9wZXJ0eSkp
IHsKICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQpJbmRleDoga2h0bWwvY3NzL2Nzc3BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NwYXJzZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4zMgpkaWZmIC1wIC11IC1yMS4zMiBraHRtbC9jc3MvY3NzcGFyc2VyLmgKLS0tIGtodG1s
L2Nzcy9jc3NwYXJzZXIuaAkyNyBBdWcgMjAwNSAwMDoxNDoxOCAtMDAwMAkxLjMyCisrKyBraHRt
bC9jc3MvY3NzcGFyc2VyLmgJNSBTZXAgMjAwNSAxODowNDoxOSAtMDAwMApAQCAtNzYsOSArNzYs
MTAgQEAgbmFtZXNwYWNlIERPTSB7CiAgICAgc3RhdGljIGlubGluZSBET01TdHJpbmcgZG9tU3Ry
aW5nKCBjb25zdCBQYXJzZVN0cmluZyAmcHMgKSB7CiAJcmV0dXJuIERPTVN0cmluZyggKFFDaGFy
ICopcHMuc3RyaW5nLCBwcy5sZW5ndGggKTsKICAgICB9Ci0gICAgc3RhdGljIGlubGluZSBBdG9t
aWNTdHJpbmcgYXRvbWljU3RyaW5nKCBjb25zdCBQYXJzZVN0cmluZyAmcHMgKSB7Ci0JcmV0dXJu
IEF0b21pY1N0cmluZyggcHMuc3RyaW5nLCBwcy5sZW5ndGggKTsKLSAgICB9CisgICAgc3RhdGlj
IGlubGluZSBBdG9taWNTdHJpbmcgYXRvbWljU3RyaW5nKGNvbnN0IFBhcnNlU3RyaW5nICZwcykK
KyAgICAgICAgeyByZXR1cm4gQXRvbWljU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8UUNoYXIgKj4o
cHMuc3RyaW5nKSwgcHMubGVuZ3RoKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgQXRvbWljU3RyaW5n
IGxvd2VyY2FzZWRBdG9taWNTdHJpbmcoY29uc3QgUGFyc2VTdHJpbmcgJnBzKQorICAgICAgICB7
IHJldHVybiBBdG9taWNTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxRQ2hhciAqPihwcy5zdHJpbmcp
LCBwcy5sZW5ndGgsIGxvd2VyY2FzZWQpOyB9CiAgICAgCiAgICAgY2xhc3MgVmFsdWVMaXN0IHsK
ICAgICBwdWJsaWM6CkluZGV4OiBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0
b3IuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIwMwpkaWZmIC1wIC11IC1yMS4yMDMga2h0
bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCi0tLSBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rv
ci5jcHAJMzAgQXVnIDIwMDUgMjE6MzY6MjMgLTAwMDAJMS4yMDMKKysrIGtodG1sL2Nzcy9jc3Nz
dHlsZXNlbGVjdG9yLmNwcAk1IFNlcCAyMDA1IDE4OjA0OjIzIC0wMDAwCkBAIC0zMzIsMTQgKzMz
MiwxMCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoQ1NTUnVsCiAgICAgLy8g
V2UgbmVlZCB0byBjb2xsZWN0IHRoZSBydWxlcyBmb3IgaWQsIGNsYXNzLCB0YWcsIGFuZCBldmVy
eXRoaW5nIGVsc2UgaW50byBhIGJ1ZmZlciBhbmQKICAgICAvLyB0aGVuIHNvcnQgdGhlIGJ1ZmZl
ci4KICAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSkKLSAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3Qo
cnVsZXMtPmdldElEUnVsZXMoZWxlbWVudC0+Z2V0SURBdHRyaWJ1dGUoKS5pbXBsKCkpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7Ci0g
ICAgaWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkpIHsKLSAgICAgICAgZm9yIChjb25zdCBBdG9taWNT
dHJpbmdMaXN0KiBzaW5nbGVDbGFzcyA9IGVsZW1lbnQtPmdldENsYXNzTGlzdCgpOwotICAgICAg
ICAgICAgIHNpbmdsZUNsYXNzOyBzaW5nbGVDbGFzcyA9IHNpbmdsZUNsYXNzLT5uZXh0KCkpCi0g
ICAgICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0Q2xhc3NSdWxlcyhzaW5nbGVD
bGFzcy0+cXN0cmluZygpLmltcGwoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7Ci0gICAg
fQorICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0SURSdWxlcyhlbGVtZW50LT5n
ZXRJREF0dHJpYnV0ZSgpLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsK
KyAgICBpZiAoZWxlbWVudC0+aGFzQ2xhc3MoKSkKKyAgICAgICAgZm9yIChjb25zdCBBdG9taWNT
dHJpbmdMaXN0KiBzaW5nbGVDbGFzcyA9IGVsZW1lbnQtPmdldENsYXNzTGlzdCgpOyBzaW5nbGVD
bGFzczsgc2luZ2xlQ2xhc3MgPSBzaW5nbGVDbGFzcy0+bmV4dCgpKQorICAgICAgICAgICAgbWF0
Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldENsYXNzUnVsZXMoc2luZ2xlQ2xhc3MtPnN0cmluZygp
LmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKICAgICBtYXRjaFJ1bGVz
Rm9yTGlzdChydWxlcy0+Z2V0VGFnUnVsZXMoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwK
ICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7CiAg
ICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldFVuaXZlcnNhbFJ1bGVzKCksIGZpcnN0UnVs
ZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKQEAgLTU1NSw3ICs1NTEsNyBAQCBzdGF0aWMgdm9pZCBj
aGVja1BzZXVkb1N0YXRlKCBFbGVtZW50SW1wCiAgICAgfQogICAgIAogICAgIFFDb25zdFN0cmlu
ZyBjdShhdHRyLnVuaWNvZGUoKSwgYXR0ci5sZW5ndGgoKSk7Ci0gICAgUVN0cmluZyB1ID0gY3Uu
cXN0cmluZygpOworICAgIFFTdHJpbmcgdSA9IGN1LnN0cmluZygpOwogICAgIGlmICggIXUuY29u
dGFpbnMoIjovLyIpICkgewogICAgICAgICBpZiAoIHVbMF0gPT0gJy8nICkKICAgICAgICAgICAg
IHUucHJlcGVuZChjdXJyZW50RW5jb2RlZFVSTC0+aG9zdCk7CkBAIC0xMTE2LDcgKzExMTIsNyBA
QCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgICAgICAgICBp
ZiAoIWUtPmhhc0NsYXNzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgZm9yIChjb25zdCBBdG9taWNTdHJpbmdMaXN0KiBjID0gZS0+Z2V0Q2xhc3NMaXN0KCk7
IGM7IGMgPSBjLT5uZXh0KCkpCi0gICAgICAgICAgICAgICAgaWYgKGMtPnFzdHJpbmcoKSA9PSBz
ZWwtPnZhbHVlKQorICAgICAgICAgICAgICAgIGlmIChjLT5zdHJpbmcoKSA9PSBzZWwtPnZhbHVl
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQpAQCAtMTEzMSw3ICsxMTI3LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVj
dG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAgICAgICBzd2l0Y2goc2VsLT5tYXRjaCkgewogICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpFeGFjdDoKIAkgICAgaWYgKChpc1hNTERvYyAmJiBzZWwt
PnZhbHVlICE9IHZhbHVlKSB8fAotICAgICAgICAgICAgICAgICghaXNYTUxEb2MgJiYgIWVxdWFs
c0lnbm9yZUNhc2Uoc2VsLT52YWx1ZSwgdmFsdWUpKSkKKyAgICAgICAgICAgICAgICAoIWlzWE1M
RG9jICYmICFlcXVhbHNJZ25vcmluZ0Nhc2Uoc2VsLT52YWx1ZSwgdmFsdWUpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6TGlzdDoKQEAgLTExNDIsNyArMTEzOCw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxl
Y3Rvcjo6Y2hlY2tPbmVTZWxlY3RvcigKICAgICAgICAgICAgICAgICAvLyBhbGxvY2luZyBRU3Ry
aW5ncyBhbmQganVzdCB0cmVhdCB0aGlzIGFzIGFuIGV4YWN0CiAgICAgICAgICAgICAgICAgLy8g
bWF0Y2ggY2hlY2suCiAgICAgICAgICAgICAgICAgaWYgKChpc1hNTERvYyAmJiBzZWwtPnZhbHVl
ICE9IHZhbHVlKSB8fAotICAgICAgICAgICAgICAgICAgICAoIWlzWE1MRG9jICYmICFlcXVhbHNJ
Z25vcmVDYXNlKHNlbC0+dmFsdWUsIHZhbHVlKSkpCisgICAgICAgICAgICAgICAgICAgICghaXNY
TUxEb2MgJiYgIWVxdWFsc0lnbm9yaW5nQ2FzZShzZWwtPnZhbHVlLCB2YWx1ZSkpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CkluZGV4OiBraHRtbC9jc3MvcGFyc2VyLnkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL3BhcnNlci55LHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjQ0CmRpZmYgLXAgLXUgLXIxLjQ0IGtodG1sL2Nzcy9wYXJzZXIueQotLS0ga2h0bWwvY3Nz
L3BhcnNlci55CTMwIEF1ZyAyMDA1IDIxOjM2OjIzIC0wMDAwCTEuNDQKKysrIGtodG1sL2Nzcy9w
YXJzZXIueQk1IFNlcCAyMDA1IDE4OjA0OjI0IC0wMDAwCkBAIC03MjQsMTAgKzcyNCw4IEBAIHNw
ZWNpZmllcjoKIAkkJCA9IG5ldyBDU1NTZWxlY3RvcigpOwogCSQkLT5tYXRjaCA9IENTU1NlbGVj
dG9yOjpJZDsKIAlDU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFyc2Vy
KTsKLSAgICAgICAgaWYgKCFwLT5zdHJpY3QpCi0gICAgICAgICAgICAkMS5sb3dlcigpOwogICAg
ICAgICAkJC0+YXR0ciA9IGlkQXR0cjsKLQkkJC0+dmFsdWUgPSBhdG9taWNTdHJpbmcoJDEpOwor
ICAgICAgICAkJC0+dmFsdWUgPSBwLT5zdHJpY3QgPyBhdG9taWNTdHJpbmcoJDEpIDogbG93ZXJj
YXNlZEF0b21pY1N0cmluZygkMSk7CiAgICAgfQogICB8IGNsYXNzCiAgIHwgYXR0cmliCkBAIC03
MzksMTAgKzczNyw4IEBAIGNsYXNzOgogICAgICAgICAkJCA9IG5ldyBDU1NTZWxlY3RvcigpOwog
CSQkLT5tYXRjaCA9IENTU1NlbGVjdG9yOjpDbGFzczsKIAlDU1NQYXJzZXIgKnAgPSBzdGF0aWNf
Y2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKLSAgICAgICAgaWYgKCFwLT5zdHJpY3QpCi0gICAg
ICAgICAgICAkMi5sb3dlcigpOwogICAgICAgICAkJC0+YXR0ciA9IGNsYXNzQXR0cjsKLQkkJC0+
dmFsdWUgPSBhdG9taWNTdHJpbmcoJDIpOworICAgICAgICAkJC0+dmFsdWUgPSBwLT5zdHJpY3Qg
PyBhdG9taWNTdHJpbmcoJDIpIDogbG93ZXJjYXNlZEF0b21pY1N0cmluZygkMik7CiAgICAgfQog
ICA7CiAKQEAgLTgyMCw4ICs4MTYsNyBAQCBwc2V1ZG86CiAgICAgJzonIElERU5UIHsKICAgICAg
ICAgJCQgPSBuZXcgQ1NTU2VsZWN0b3IoKTsKICAgICAgICAgJCQtPm1hdGNoID0gQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzOwotICAgICAgICAkMi5sb3dlcigpOwotICAgICAgICAkJC0+dmFsdWUg
PSBhdG9taWNTdHJpbmcoJDIpOworICAgICAgICAkJC0+dmFsdWUgPSBsb3dlcmNhc2VkQXRvbWlj
U3RyaW5nKCQyKTsKICAgICAgICAgaWYgKCQkLT52YWx1ZSA9PSAiZW1wdHkiIHx8ICQkLT52YWx1
ZSA9PSAib25seS1jaGlsZCIgfHwKICAgICAgICAgICAgICQkLT52YWx1ZSA9PSAiZmlyc3QtY2hp
bGQiIHx8ICQkLT52YWx1ZSA9PSAibGFzdC1jaGlsZCIpIHsKICAgICAgICAgICAgIENTU1BhcnNl
ciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwpAQCAtODMzLDE1ICs4Mjgs
MTMgQEAgcHNldWRvOgogICAgIHwgJzonICc6JyBJREVOVCB7CiAgICAgICAgICQkID0gbmV3IENT
U1NlbGVjdG9yKCk7CiAgICAgICAgICQkLT5tYXRjaCA9IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVt
ZW50OwotICAgICAgICAkMy5sb3dlcigpOwotICAgICAgICAkJC0+dmFsdWUgPSBhdG9taWNTdHJp
bmcoJDMpOworICAgICAgICAkJC0+dmFsdWUgPSBsb3dlcmNhc2VkQXRvbWljU3RyaW5nKCQzKTsK
ICAgICB9CiAgICAgfCAnOicgRlVOQ1RJT04gbWF5YmVfc3BhY2Ugc2ltcGxlX3NlbGVjdG9yIG1h
eWJlX3NwYWNlICcpJyB7CiAgICAgICAgICQkID0gbmV3IENTU1NlbGVjdG9yKCk7CiAgICAgICAg
ICQkLT5tYXRjaCA9IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzczsKICAgICAgICAgJCQtPnNpbXBs
ZVNlbGVjdG9yID0gJDQ7Ci0gICAgICAgICQyLmxvd2VyKCk7Ci0gICAgICAgICQkLT52YWx1ZSA9
IGF0b21pY1N0cmluZygkMik7CisgICAgICAgICQkLT52YWx1ZSA9IGxvd2VyY2FzZWRBdG9taWNT
dHJpbmcoJDIpOwogICAgIH0KICAgOwogCkluZGV4OiBraHRtbC9kb20vZG9tX3N0cmluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2RvbV9zdHJp
bmcuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIwCmRpZmYgLXAgLXUgLXIxLjIwIGtodG1s
L2RvbS9kb21fc3RyaW5nLmNwcAotLS0ga2h0bWwvZG9tL2RvbV9zdHJpbmcuY3BwCTI5IEF1ZyAy
MDA1IDIxOjI5OjExIC0wMDAwCTEuMjAKKysrIGtodG1sL2RvbS9kb21fc3RyaW5nLmNwcAk1IFNl
cCAyMDA1IDE4OjA0OjI0IC0wMDAwCkBAIC0yMywzMTYgKzIzLDI0NCBAQAogI2luY2x1ZGUgImRv
bS9kb21fc3RyaW5nLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9zdHJpbmdpbXBsLmgiCiAKLQogbmFt
ZXNwYWNlIERPTSB7CiAKLQogRE9NU3RyaW5nOjpET01TdHJpbmcoY29uc3QgUUNoYXIgKnN0ciwg
dWludCBsZW4pCiB7Ci0gICAgaWYgKCFzdHIpIHsKLSAgICAgICAgbV9pbXBsID0gMDsKLSAgICAg
ICAgcmV0dXJuOworICAgIERPTVN0cmluZ0ltcGwgKmltcGw7CisgICAgaWYgKCFzdHIpCisgICAg
ICAgIGltcGwgPSBOVUxMOworICAgIGVsc2UgeworICAgICAgICBpZiAobGVuID09IDApCisgICAg
ICAgICAgICBpbXBsID0gRE9NU3RyaW5nSW1wbDo6ZW1wdHkoKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgaW1wbCA9IG5ldyBET01TdHJpbmdJbXBsKHN0ciwgbGVuKTsKKyAgICAgICAgaW1w
bC0+cmVmKCk7CiAgICAgfQotICAgIAotICAgIGlmIChsZW4gPT0gMCkKLSAgICAgICAgbV9pbXBs
ID0gRE9NU3RyaW5nSW1wbDo6ZW1wdHkoKTsKLSAgICBlbHNlCi0gICAgICAgIG1faW1wbCA9IG5l
dyBET01TdHJpbmdJbXBsKHN0ciwgbGVuKTsKLSAgICBtX2ltcGwtPnJlZigpOworICAgIG1faW1w
bCA9IGltcGw7CiB9CiAKIERPTVN0cmluZzo6RE9NU3RyaW5nKGNvbnN0IFFTdHJpbmcgJnN0cikK
IHsKLSAgICBpZiAoc3RyLmlzTnVsbCgpKSB7Ci0JbV9pbXBsID0gMDsKLQlyZXR1cm47CisgICAg
RE9NU3RyaW5nSW1wbCAqaW1wbDsKKyAgICBpZiAoc3RyLmlzTnVsbCgpKQorCWltcGwgPSBOVUxM
OworICAgIGVsc2UgeworICAgICAgICBpZiAoc3RyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGlt
cGwgPSBET01TdHJpbmdJbXBsOjplbXB0eSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBp
bXBsID0gbmV3IERPTVN0cmluZ0ltcGwoc3RyLnVuaWNvZGUoKSwgc3RyLmxlbmd0aCgpKTsKKyAg
ICAgICAgaW1wbC0+cmVmKCk7CiAgICAgfQotICAgIAotICAgIGlmIChzdHIuaXNFbXB0eSgpKQot
ICAgICAgICBtX2ltcGwgPSBET01TdHJpbmdJbXBsOjplbXB0eSgpOwotICAgIGVsc2UgCi0gICAg
ICAgIG1faW1wbCA9IG5ldyBET01TdHJpbmdJbXBsKHN0ci51bmljb2RlKCksIHN0ci5sZW5ndGgo
KSk7Ci0gICAgbV9pbXBsLT5yZWYoKTsKKyAgICBtX2ltcGwgPSBpbXBsOwogfQogCiBET01TdHJp
bmc6OkRPTVN0cmluZyhjb25zdCBjaGFyICpzdHIpCiB7Ci0gICAgaWYgKCFzdHIpIHsKLQltX2lt
cGwgPSAwOwotCXJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgbCA9IHN0cmxlbihzdHIpOwotICAg
IGlmIChsID09IDApCi0gICAgICAgIG1faW1wbCA9IERPTVN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0g
ICAgZWxzZQotICAgICAgICBtX2ltcGwgPSBuZXcgRE9NU3RyaW5nSW1wbChzdHIsIGwpOwotICAg
IG1faW1wbC0+cmVmKCk7Ci19Ci0KLURPTVN0cmluZzo6RE9NU3RyaW5nKERPTVN0cmluZ0ltcGwg
KmkpCi17Ci0gICAgbV9pbXBsID0gaTsKLSAgICBpZihtX2ltcGwpIG1faW1wbC0+cmVmKCk7Ci19
Ci0KLURPTVN0cmluZzo6RE9NU3RyaW5nKGNvbnN0IERPTVN0cmluZyAmb3RoZXIpCi17Ci0gICAg
bV9pbXBsID0gb3RoZXIubV9pbXBsOwotICAgIGlmKG1faW1wbCkgbV9pbXBsLT5yZWYoKTsKLX0K
LQotRE9NU3RyaW5nICZET01TdHJpbmc6Om9wZXJhdG9yID0oY29uc3QgRE9NU3RyaW5nICZvdGhl
cikKLXsKLSAgICBpZiAoIG1faW1wbCAhPSBvdGhlci5tX2ltcGwgKSB7Ci0gICAgaWYobV9pbXBs
KSBtX2ltcGwtPmRlcmVmKCk7Ci0gICAgbV9pbXBsID0gb3RoZXIubV9pbXBsOwotICAgIGlmKG1f
aW1wbCkgbV9pbXBsLT5yZWYoKTsKLSAgICB9Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1ET01T
dHJpbmcgJkRPTVN0cmluZzo6b3BlcmF0b3IgKz0gKGNvbnN0IERPTVN0cmluZyAmc3RyKQotewot
ICAgIGlmKHN0ci5tX2ltcGwpCi0gICAgewotICAgICAgICBpZighbV9pbXBsKQotICAgICAgICB7
Ci0gICAgICAgICAgICAvLyAjIyMgRklYTUUhISEKLSAgICAgICAgICAgIG1faW1wbCA9IHN0ci5t
X2ltcGw7Ci0gICAgICAgICAgICBtX2ltcGwtPnJlZigpOwotICAgICAgICAgICAgcmV0dXJuICp0
aGlzOwotICAgICAgICB9Ci0JRE9NU3RyaW5nSW1wbCAqaSA9IG1faW1wbC0+Y29weSgpOwotCW1f
aW1wbC0+ZGVyZWYoKTsKLQltX2ltcGwgPSBpOwotCW1faW1wbC0+cmVmKCk7Ci0JbV9pbXBsLT5h
cHBlbmQoc3RyLm1faW1wbCk7CisgICAgRE9NU3RyaW5nSW1wbCAqaW1wbDsKKyAgICBpZiAoIXN0
cikKKwlpbXBsID0gTlVMTDsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKGludCBsZW4gPSBzdHJs
ZW4oc3RyKSkKKyAgICAgICAgICAgIGltcGwgPSBuZXcgRE9NU3RyaW5nSW1wbChzdHIsIGxlbik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGltcGwgPSBET01TdHJpbmdJbXBsOjplbXB0eSgp
OworICAgICAgICBpbXBsLT5yZWYoKTsKKyAgICB9CisgICAgbV9pbXBsID0gaW1wbDsKK30KKwor
Ly8gRklYTUU6IFRoaXMgdmlvbGF0ZXMgdGhlIHVzdWFsIGV4cGxpY2l0IHNoYXJpbmcgc2VtYW50
aWNzIGJlY2F1c2UgaXQgc29tZXRpbWVzIGNvcGllcywgc29tZXRpbWVzIGRvZXNuJ3QuCitET01T
dHJpbmcgJkRPTVN0cmluZzo6b3BlcmF0b3IgKz0oY29uc3QgRE9NU3RyaW5nICZvdGhlcikKK3sK
KyAgICBpZiAob3RoZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgRE9N
U3RyaW5nSW1wbCAqaW1wbDsKKyAgICBpZiAoRE9NU3RyaW5nSW1wbCAqb2xkID0gbV9pbXBsKSB7
CisgICAgICAgIGltcGwgPSBvbGQtPmNvcHkoKTsKKyAgICAgICAgaW1wbC0+YXBwZW5kKG90aGVy
Lm1faW1wbCk7CisgICAgICAgIG9sZC0+ZGVyZWYoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBp
bXBsID0gb3RoZXIubV9pbXBsLT5jb3B5KCk7CiAgICAgfQorICAgIGltcGwtPnJlZigpOworICAg
IG1faW1wbCA9IGltcGw7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1ET01TdHJpbmcgb3BlcmF0
b3IgKyAoY29uc3QgRE9NU3RyaW5nICZhLCBjb25zdCBET01TdHJpbmcgJmIpCitET01TdHJpbmcg
b3BlcmF0b3IgKyhjb25zdCBET01TdHJpbmcgJmEsIGNvbnN0IERPTVN0cmluZyAmYikKIHsKICAg
ICBpZiAoYS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBiLmNvcHkoKTsKICAgICBpZiAoYi5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBhLmNvcHkoKTsKICAgICBET01TdHJpbmcgYyA9IGEu
Y29weSgpOwotICAgIGMgKz0gYjsKLSAgICByZXR1cm4gYzsKKyAgICByZXR1cm4gYyArPSBiOwog
fQogCi12b2lkIERPTVN0cmluZzo6aW5zZXJ0KERPTVN0cmluZyBzdHIsIHVpbnQgcG9zKQorLy8g
RklYTUU6IFRoaXMgdmlvbGF0ZXMgdGhlIHVzdWFsIGV4cGxpY2l0IHNoYXJpbmcgc2VtYW50aWNz
IGJlY2F1c2UgaXQgc29tZXRpbWVzIGNvcGllcywgc29tZXRpbWVzIGRvZXNuJ3QuCit2b2lkIERP
TVN0cmluZzo6aW5zZXJ0KGNvbnN0IERPTVN0cmluZyAmc3RyLCB1aW50IHBvcykKIHsKLSAgICBp
ZighbV9pbXBsKQotICAgIHsKLQltX2ltcGwgPSBzdHIubV9pbXBsLT5jb3B5KCk7Ci0JbV9pbXBs
LT5yZWYoKTsKKyAgICBpZiAoRE9NU3RyaW5nSW1wbCAqaW1wbCA9IG1faW1wbCkgeworCWltcGwt
Pmluc2VydChzdHIubV9pbXBsLCBwb3MpOworICAgIH0gZWxzZSB7CisJaW1wbCA9IHN0ci5tX2lt
cGwtPmNvcHkoKTsKKwlpbXBsLT5yZWYoKTsKKyAgICAgICAgbV9pbXBsID0gaW1wbDsKICAgICB9
Ci0gICAgZWxzZQotCW1faW1wbC0+aW5zZXJ0KHN0ci5tX2ltcGwsIHBvcyk7CiB9CiAKLQotY29u
c3QgUUNoYXIgJkRPTVN0cmluZzo6b3BlcmF0b3IgW10odW5zaWduZWQgaW50IGkpIGNvbnN0Citj
b25zdCBRQ2hhciAmRE9NU3RyaW5nOjpvcGVyYXRvciBbXSh1aW50IGkpIGNvbnN0CiB7Ci0gICAg
c3RhdGljIGNvbnN0IFFDaGFyIG51bGxDaGFyID0gMDsKLQotICAgIGlmKCFtX2ltcGwgfHwgaSA+
PSBtX2ltcGwtPmwgKSByZXR1cm4gbnVsbENoYXI7Ci0KLSAgICByZXR1cm4gKihtX2ltcGwtPnMr
aSk7CisgICAgRE9NU3RyaW5nSW1wbCAqaW1wbCA9IG1faW1wbDsKKyAgICBpZiAoIWltcGwgfHwg
aSA+PSBpbXBsLT5sKSB7CisgICAgICAgIHN0YXRpYyBRQ2hhciBudWxsQ2hhcjsKKyAgICAgICAg
cmV0dXJuIG51bGxDaGFyOworICAgIH0KKyAgICByZXR1cm4gaW1wbC0+c1tpXTsKIH0KIAogaW50
IERPTVN0cmluZzo6ZmluZChjb25zdCBRQ2hhciBjLCBpbnQgc3RhcnQpIGNvbnN0CiB7Ci0gICAg
dW5zaWduZWQgaW50IGwgPSBzdGFydDsKLSAgICBpZighbV9pbXBsIHx8IGwgPj0gbV9pbXBsLT5s
ICkgcmV0dXJuIC0xOwotICAgIHdoaWxlKCBsIDwgbV9pbXBsLT5sICkKLSAgICB7Ci0JaWYoICoo
bV9pbXBsLT5zK2wpID09IGMgKSByZXR1cm4gbDsKLQlsKys7Ci0gICAgfQorICAgIERPTVN0cmlu
Z0ltcGwgKmltcGwgPSBtX2ltcGw7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gLTE7
CisgICAgY29uc3QgUUNoYXIgKnN0ciA9IGltcGwtPnM7CisgICAgdWludCBsZW4gPSBpbXBsLT5s
OworICAgIGZvciAodWludCBpID0gc3RhcnQ7IGkgPCBsZW47ICsraSkKKwlpZiAoc3RyW2ldID09
IGMpCisgICAgICAgICAgICByZXR1cm4gaTsKICAgICByZXR1cm4gLTE7CiB9CiAKLXVpbnQgRE9N
U3RyaW5nOjpsZW5ndGgoKSBjb25zdAotewotICAgIGlmKCFtX2ltcGwpIHJldHVybiAwOwotICAg
IHJldHVybiBtX2ltcGwtPmw7Ci19Ci0KLXZvaWQgRE9NU3RyaW5nOjp0cnVuY2F0ZSggdW5zaWdu
ZWQgaW50IGxlbiApCi17Ci0gICAgaWYobV9pbXBsKSBtX2ltcGwtPnRydW5jYXRlKGxlbik7Ci19
Ci0KLXZvaWQgRE9NU3RyaW5nOjpyZW1vdmUodW5zaWduZWQgaW50IHBvcywgaW50IGxlbikKLXsK
LSAgaWYobV9pbXBsKSBtX2ltcGwtPnJlbW92ZShwb3MsIGxlbik7Ci19Ci0KLURPTVN0cmluZyBE
T01TdHJpbmc6OnN1YnN0cmluZyh1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgbGVuKSBj
b25zdAotewotICAgIGlmICghbV9pbXBsKSAKLSAgICAgICAgcmV0dXJuIERPTVN0cmluZygpOwot
ICAgIHJldHVybiBtX2ltcGwtPnN1YnN0cmluZyhwb3MsIGxlbik7Ci19Ci0KLURPTVN0cmluZyBE
T01TdHJpbmc6OnNwbGl0KHVuc2lnbmVkIGludCBwb3MpCitib29sIERPTVN0cmluZzo6cGVyY2Vu
dGFnZShpbnQgJnJlc3VsdCkgY29uc3QKIHsKLSAgaWYoIW1faW1wbCkgcmV0dXJuIERPTVN0cmlu
ZygpOwotICByZXR1cm4gbV9pbXBsLT5zcGxpdChwb3MpOwotfQotCi1ET01TdHJpbmcgRE9NU3Ry
aW5nOjpsb3dlcigpIGNvbnN0Ci17Ci0gIGlmKCFtX2ltcGwpIHJldHVybiBET01TdHJpbmcoKTsK
LSAgcmV0dXJuIG1faW1wbC0+bG93ZXIoKTsKLX0KLQotRE9NU3RyaW5nIERPTVN0cmluZzo6dXBw
ZXIoKSBjb25zdAotewotICBpZighbV9pbXBsKSByZXR1cm4gRE9NU3RyaW5nKCk7Ci0gIHJldHVy
biBtX2ltcGwtPnVwcGVyKCk7Ci19Ci0KLWJvb2wgRE9NU3RyaW5nOjpwZXJjZW50YWdlKGludCAm
X3BlcmNlbnRhZ2UpIGNvbnN0Ci17Ci0gICAgaWYoIW1faW1wbCB8fCAhbV9pbXBsLT5sKSByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoICoobV9pbXBsLT5zK21faW1wbC0+bC0xKSAhPSBRQ2hhcign
JScpKQorICAgIERPTVN0cmluZ0ltcGwgKmltcGwgPSBtX2ltcGw7CisgICAgaWYgKCFpbXBsKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdWludCBsZW4gPSBpbXBsLT5sOworICAgIGlmIChs
ZW4gPCAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUUNoYXIgKnN0ciA9IGltcGwtPnM7
CisgICAgaWYgKHN0cltsZW4gLSAxXSAhPSAnJScpCiAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgX3BlcmNlbnRhZ2UgPSBRQ29uc3RTdHJpbmcobV9pbXBsLT5zLCBtX2ltcGwtPmwtMSkucXN0
cmluZygpLnRvSW50KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVFDaGFyICpET01TdHJpbmc6
OnVuaWNvZGUoKSBjb25zdAotewotICAgIGlmKCFtX2ltcGwpIHJldHVybiAwOwotICAgIHJldHVy
biBtX2ltcGwtPnM7CisgICAgYm9vbCBvazsKKyAgICByZXN1bHQgPSBRQ29uc3RTdHJpbmcoc3Ry
LCBsZW4gLSAxKS5zdHJpbmcoKS50b0ludCgmb2spOworICAgIHJldHVybiBvazsKIH0KIAogUVN0
cmluZyBET01TdHJpbmc6OnFzdHJpbmcoKSBjb25zdAogewotICAgIGlmKCFtX2ltcGwpIHJldHVy
biBRU3RyaW5nOjpudWxsOwotCi0gICAgcmV0dXJuIFFTdHJpbmcobV9pbXBsLT5zLCBtX2ltcGwt
PmwpOwotfQotCi1pbnQgRE9NU3RyaW5nOjp0b0ludCgpIGNvbnN0Ci17Ci0gICAgaWYoIW1faW1w
bCkgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9pbXBsLT50b0ludCgpOwotfQotCi1ET01TdHJp
bmcgRE9NU3RyaW5nOjpjb3B5KCkgY29uc3QKLXsKLSAgICBpZighbV9pbXBsKSByZXR1cm4gRE9N
U3RyaW5nKCk7Ci0gICAgcmV0dXJuIG1faW1wbC0+Y29weSgpOworICAgIERPTVN0cmluZ0ltcGwg
KmltcGwgPSBtX2ltcGw7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gUVN0cmluZzo6
bnVsbDsKKyAgICByZXR1cm4gUVN0cmluZyhpbXBsLT5zLCBpbXBsLT5sKTsKIH0KIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKLWJvb2wgc3RyY2FzZWNtcCggY29uc3QgRE9NU3RyaW5nICZhcywgY29u
c3QgRE9NU3RyaW5nICZicyApCitib29sIGVxdWFsc0lnbm9yaW5nQ2FzZShjb25zdCBET01TdHJp
bmcgJmEsIGNvbnN0IERPTVN0cmluZyAmYiApCiB7Ci0gICAgaWYgKCBhcy5sZW5ndGgoKSAhPSBi
cy5sZW5ndGgoKSApIHJldHVybiB0cnVlOworICAgIERPTVN0cmluZ0ltcGwgKmFpbXBsID0gYS5p
bXBsKCk7CisgICAgRE9NU3RyaW5nSW1wbCAqYmltcGwgPSBiLmltcGwoKTsKKyAgICBpZiAoYWlt
cGwgPT0gYmltcGwpCisgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgY29uc3QgUUNoYXIgKmEg
PSBhcy51bmljb2RlKCk7Ci0gICAgY29uc3QgUUNoYXIgKmIgPSBicy51bmljb2RlKCk7Ci0gICAg
aWYgKCBhID09IGIgKSAgcmV0dXJuIGZhbHNlOwotICAgIGlmICggISggYSAmJiBiICkgKSAgcmV0
dXJuIHRydWU7Ci0gICAgaW50IGwgPSBhcy5sZW5ndGgoKTsKLSAgICB3aGlsZSAoIGwtLSApIHsK
LSAgICAgICAgaWYgKCAqYSAhPSAqYiAmJiBhLT5sb3dlcigpICE9IGItPmxvd2VyKCkgKSByZXR1
cm4gdHJ1ZTsKLQlhKyssYisrOworICAgIHVpbnQgYWxlbiA9IGFpbXBsID8gYWltcGwtPmwgOiAw
OworICAgIHVpbnQgYmxlbiA9IGJpbXBsID8gYmltcGwtPmwgOiAwOworICAgIGlmIChhbGVuICE9
IGJsZW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IFFDaGFyICphY2hhcnMg
PSBhaW1wbC0+czsKKyAgICBjb25zdCBRQ2hhciAqYmNoYXJzID0gYmltcGwtPnM7CisgICAgdWlu
dCBjb3VudCA9IGFsZW47CisgICAgd2hpbGUgKGNvdW50LS0pIHsKKyAgICAgICAgaWYgKCphY2hh
cnMgIT0gKmJjaGFycyAmJiBhY2hhcnMtPmxvd2VyKCkgIT0gYmNoYXJzLT5sb3dlcigpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCWFjaGFycysrOworICAgICAgICBiY2hhcnMrKzsKICAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHN0cmNh
c2VjbXAoIGNvbnN0IERPTVN0cmluZyAmYXMsIGNvbnN0IGNoYXIqIGJzICkKK2Jvb2wgZXF1YWxz
SWdub3JpbmdDYXNlKGNvbnN0IERPTVN0cmluZyAmYSwgY29uc3QgY2hhciAqYikKIHsKLSAgICBj
b25zdCBRQ2hhciAqYSA9IGFzLnVuaWNvZGUoKTsKLSAgICBpbnQgbCA9IGFzLmxlbmd0aCgpOwot
ICAgIGlmICggIWJzICkgcmV0dXJuICggbCAhPSAwICk7Ci0gICAgd2hpbGUgKCBsLS0gKSB7Ci0g
ICAgICAgIGlmICggYS0+bGF0aW4xKCkgIT0gKmJzICkgewotICAgICAgICAgICAgY2hhciBjYyA9
ICggKCAqYnMgPj0gJ0EnICkgJiYgKCAqYnMgPD0gJ1onICkgKSA/ICggKCAqYnMgKSArICdhJyAt
ICdBJyApIDogKCAqYnMgKTsKLSAgICAgICAgICAgIGlmICggYS0+bG93ZXIoKS5sYXRpbjEoKSAh
PSBjYyApIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGErKywgYnMrKzsKKyAgICBE
T01TdHJpbmdJbXBsICphaW1wbCA9IGEuaW1wbCgpOworICAgIHVpbnQgYWxlbiA9IGFpbXBsID8g
YWltcGwtPmwgOiAwOworICAgIGlmICghYikKKyAgICAgICAgcmV0dXJuIGFsZW4gPT0gMDsKKyAg
ICBjb25zdCBRQ2hhciAqYWNoYXJzID0gYWltcGwtPnM7CisgICAgY29uc3QgY2hhciAqYmNoYXJz
ID0gYjsKKyAgICB1aW50IGNvdW50ID0gYWxlbjsKKyAgICB3aGlsZSAoY291bnQtLSkgeworICAg
ICAgICBjaGFyIGJjID0gKmJjaGFyczsKKyAgICAgICAgaWYgKGJjID09ICdcMCcgfHwgKmFjaGFy
cyAhPSBiYyAmJiBhY2hhcnMtPmxvd2VyKCkgIT0gUUNoYXIoYmMpLmxvd2VyKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGFjaGFycysrOworICAgICAgICBiY2hhcnMrKzsK
ICAgICB9Ci0gICAgcmV0dXJuICggKmJzICE9ICdcMCcgKTsKLX0KLQotYm9vbCBET01TdHJpbmc6
OmlzRW1wdHkoKSBjb25zdAotewotICAgIHJldHVybiAoIW1faW1wbCB8fCBtX2ltcGwtPmwgPT0g
MCk7Ci19Ci0KLWtodG1sOjpMZW5ndGgqIERPTVN0cmluZzo6dG9Db29yZHNBcnJheShpbnQmIGxl
bikgY29uc3QgCi17IAotICAgIHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPnRvQ29vcmRzQXJyYXko
bGVuKSA6IDA7Ci19Ci0KLWtodG1sOjpMZW5ndGgqIERPTVN0cmluZzo6dG9MZW5ndGhBcnJheShp
bnQmIGxlbikgY29uc3QgCi17IAotICAgIHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPnRvTGVuZ3Ro
QXJyYXkobGVuKSA6IDA7CisgICAgcmV0dXJuICpiY2hhcnMgPT0gJ1wwJzsKIH0KIAogI2lmbmRl
ZiBOREVCVUcKKwogY29uc3QgY2hhciAqRE9NU3RyaW5nOjphc2NpaSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1faW1wbCA/IG1faW1wbC0+YXNjaWkoKSA6ICIobnVsbCBpbXBsKSI7CisgICAgRE9N
U3RyaW5nSW1wbCAqaW1wbCA9IG1faW1wbDsKKyAgICByZXR1cm4gaW1wbCA/IGltcGwtPmFzY2lp
KCkgOiAiKG51bGwgaW1wbCkiOwogfQorCiAjZW5kaWYKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1ib29sIG9wZXJhdG9yPT0oIGNvbnN0IERPTVN0cmluZyAmYSwgY29uc3QgRE9NU3RyaW5n
ICZiICkKKy8vIEZJWE1FOiBOdWxsIGNvbXBhcmVzIGVxdWFsIHRvIGVtcHR5LiBJcyB0aGF0IHdo
YXQgd2Ugd2FudD8KK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBET01TdHJpbmcgJmEsIGNvbnN0IERP
TVN0cmluZyAmYikKIHsKLSAgICBpZiAoYS5tX2ltcGwgPT0gYi5tX2ltcGwpCisgICAgRE9NU3Ry
aW5nSW1wbCAqYWltcGwgPSBhLmltcGwoKTsKKyAgICBET01TdHJpbmdJbXBsICpiaW1wbCA9IGIu
aW1wbCgpOworICAgIGlmIChhaW1wbCA9PSBiaW1wbCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgCi0gICAgdW5zaWduZWQgaW50IGwgPSBhLmxlbmd0aCgpOwogCi0gICAgaWYoIGwgIT0gYi5s
ZW5ndGgoKSApIHJldHVybiBmYWxzZTsKKyAgICB1aW50IGFsZW4gPSBhaW1wbCA/IGFpbXBsLT5s
IDogMDsKKyAgICB1aW50IGJsZW4gPSBiaW1wbCA/IGJpbXBsLT5sIDogMDsKKyAgICBpZiAoYWxl
biAhPSBibGVuKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZighbWVtY21wKGEudW5p
Y29kZSgpLCBiLnVuaWNvZGUoKSwgbCpzaXplb2YoUUNoYXIpKSkKLQlyZXR1cm4gdHJ1ZTsKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1lbWNtcChhaW1wbC0+cywgYmltcGwtPnMsIGFs
ZW4gKiBzaXplb2YoUUNoYXIpKSA9PSAwOwogfQogCi1ib29sIG9wZXJhdG9yPT0oIGNvbnN0IERP
TVN0cmluZyAmYSwgY29uc3QgUVN0cmluZyAmYiApCisvLyBGSVhNRTogTnVsbCBjb21wYXJlcyBl
cXVhbCB0byBlbXB0eS4gSXMgdGhhdCB3aGF0IHdlIHdhbnQ/Citib29sIG9wZXJhdG9yPT0oY29u
c3QgRE9NU3RyaW5nICZhLCBjb25zdCBRU3RyaW5nICZiKQogewotICAgIHVuc2lnbmVkIGludCBs
ID0gYS5sZW5ndGgoKTsKKyAgICBET01TdHJpbmdJbXBsICphaW1wbCA9IGEuaW1wbCgpOwogCi0g
ICAgaWYoIGwgIT0gYi5sZW5ndGgoKSApIHJldHVybiBmYWxzZTsKKyAgICB1aW50IGFsZW4gPSBh
aW1wbCA/IGFpbXBsLT5sIDogMDsKKyAgICB1aW50IGJsZW4gPSBiLmxlbmd0aCgpOworICAgIGlm
IChhbGVuICE9IGJsZW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmKCFtZW1jbXAo
YS51bmljb2RlKCksIGIudW5pY29kZSgpLCBsKnNpemVvZihRQ2hhcikpKQotCXJldHVybiB0cnVl
OwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbWVtY21wKGFpbXBsLT5zLCBiLnVuaWNv
ZGUoKSwgYWxlbiAqIHNpemVvZihRQ2hhcikpID09IDA7CiB9CiAKLWJvb2wgb3BlcmF0b3I9PSgg
Y29uc3QgRE9NU3RyaW5nICZhLCBjb25zdCBjaGFyICpiICkKKy8vIEZJWE1FOiBOdWxsIGNvbXBh
cmVzIGVxdWFsIHRvIGVtcHR5LiBJcyB0aGF0IHdoYXQgd2Ugd2FudD8KK2Jvb2wgb3BlcmF0b3I9
PShjb25zdCBET01TdHJpbmcgJmEsIGNvbnN0IGNoYXIgKmIpCiB7Ci0gICAgRE9NU3RyaW5nSW1w
bCAqYWltcGwgPSBhLm1faW1wbDsKLSAgICAKKyAgICBET01TdHJpbmdJbXBsICphaW1wbCA9IGEu
aW1wbCgpOworICAgIHVpbnQgYWxlbiA9IGFpbXBsID8gYWltcGwtPmwgOiAwOwogICAgIGlmICgh
YikKLSAgICAgICAgcmV0dXJuICFhaW1wbDsKLSAgICAKLSAgICBpZiAoYWltcGwpIHsKLSAgICAg
ICAgaW50IGFsZW4gPSBhaW1wbC0+bDsKLSAgICAgICAgY29uc3QgUUNoYXIgKmFwdHIgPSBhaW1w
bC0+czsKLSAgICAgICAgd2hpbGUgKGFsZW4tLSkgewotICAgICAgICAgICAgdW5zaWduZWQgY2hh
ciBjID0gKmIrKzsKLSAgICAgICAgICAgIGlmICghYyB8fCAoKmFwdHIrKykudW5pY29kZSgpICE9
IGMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIHJl
dHVybiBhbGVuID09IDA7CisgICAgY29uc3QgUUNoYXIgKmFjaGFycyA9IGFpbXBsLT5zOworICAg
IGNvbnN0IGNoYXIgKmJjaGFycyA9IGI7CisgICAgdWludCBjb3VudCA9IGFsZW47CisgICAgd2hp
bGUgKGNvdW50LS0pIHsKKyAgICAgICAgY2hhciBiYyA9ICpiY2hhcnM7CisgICAgICAgIGlmIChi
YyA9PSAnXDAnIHx8ICphY2hhcnMgIT0gYmMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGFjaGFycysrOworICAgICAgICBiY2hhcnMrKzsKICAgICB9Ci0gICAgcmV0dXJuICpi
ID09IDA7CisgICAgcmV0dXJuICpiY2hhcnMgPT0gJ1wwJzsKIH0KIAogfQpJbmRleDoga2h0bWwv
ZG9tL2RvbV9zdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9kb20vZG9tX3N0cmluZy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1CmRpZmYgLXAg
LXUgLXIxLjE1IGtodG1sL2RvbS9kb21fc3RyaW5nLmgKLS0tIGtodG1sL2RvbS9kb21fc3RyaW5n
LmgJMjkgQXVnIDIwMDUgMjE6Mjk6MTEgLTAwMDAJMS4xNQorKysga2h0bWwvZG9tL2RvbV9zdHJp
bmcuaAk1IFNlcCAyMDA1IDE4OjA0OjI0IC0wMDAwCkBAIC0yMCwyMCArMjAsMTQgQEAKICAqIEJv
c3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICoKICAqLwotI2lmbmRlZiBfRE9NX0RPTVN0cmlu
Z19oXwotI2RlZmluZSBfRE9NX0RPTVN0cmluZ19oXwogCi0jaW5jbHVkZSA8cXN0cmluZy5oPgot
I2luY2x1ZGUgPHhtbC9kb21fc3RyaW5naW1wbC5oPgorI2lmbmRlZiBET01fRE9NU1RSSU5HX0gK
KyNkZWZpbmUgRE9NX0RPTVNUUklOR19ICiAKLW5hbWVzcGFjZSBraHRtbCB7Ci0gICAgY2xhc3Mg
TGVuZ3RoOwotfQorI2luY2x1ZGUgPHhtbC9kb21fc3RyaW5naW1wbC5oPgogCiBuYW1lc3BhY2Ug
RE9NIHsKIAotY2xhc3MgRE9NU3RyaW5nSW1wbDsKLQogLyoqCiAgKiBUaGlzIGNsYXNzIGltcGxl
bWVudHMgdGhlIGJhc2ljIHN0cmluZyB3ZSB1c2UgaW4gdGhlIERPTS4gV2UgZG8gbm90IHVzZQog
ICogUVN0cmluZyBmb3IgMiByZWFzb25zOiBNZW1vcnkgb3ZlcmhlYWQsIGFuZCB0aGUgbWlzc2lu
ZyBleHBsaWNpdCBzaGFyaW5nCkBAIC00NSw1MSArMzksNDcgQEAgY2xhc3MgRE9NU3RyaW5nSW1w
bDsKICAqLwogY2xhc3MgRE9NU3RyaW5nCiB7Ci0gICAgZnJpZW5kIGNsYXNzIENoYXJhY3RlckRh
dGFJbXBsOwotICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oIGNvbnN0IERPTVN0cmluZyAmYSwg
Y29uc3QgY2hhciAqYiApOwotICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oIGNvbnN0IERPTVN0
cmluZyAmYSwgY29uc3QgRE9NU3RyaW5nICZiICk7CiBwdWJsaWM6CiAgICAgLyoqCi0gICAgICog
ZGVmYXVsdCBjb25zdHJ1Y3Rvci4gR2l2ZXMgYW4gZW1wdHkgRE9NU3RyaW5nCisgICAgICogRGVm
YXVsdCBjb25zdHJ1Y3Rvci4gR2l2ZXMgYSAibnVsbCIgRE9NU3RyaW5nCiAgICAgICovCi0gICAg
RE9NU3RyaW5nKCkgOiBtX2ltcGwoMCkgeyB9CisgICAgRE9NU3RyaW5nKCkgOiBtX2ltcGwoTlVM
TCkgeyB9CiAKICAgICBET01TdHJpbmcoY29uc3QgUUNoYXIgKnN0ciwgdWludCBsZW4pOwogICAg
IERPTVN0cmluZyhjb25zdCBRU3RyaW5nICYpOwotICAgIERPTVN0cmluZyhjb25zdCBjaGFyICpz
dHIpOwotICAgIERPTVN0cmluZyhET01TdHJpbmdJbXBsICppKTsKLSAgICB+RE9NU3RyaW5nKCkg
eyBpZihtX2ltcGwpIG1faW1wbC0+ZGVyZWYoKTsgfQotCisgICAgRE9NU3RyaW5nKGNvbnN0IGNo
YXIgKik7CisgICAgRE9NU3RyaW5nKERPTVN0cmluZ0ltcGwgKik7CisgICAgfkRPTVN0cmluZygp
IHsgaWYgKERPTVN0cmluZ0ltcGwgKmkgPSBtX2ltcGwpIGktPmRlcmVmKCk7IH0KIAogICAgIC8v
IGFzc2lnbiBhbmQgY29weQotICAgIERPTVN0cmluZyhjb25zdCBET01TdHJpbmcgJnN0cik7Ci0g
ICAgRE9NU3RyaW5nICZvcGVyYXRvciA9KGNvbnN0IERPTVN0cmluZyAmc3RyKTsKKyAgICBET01T
dHJpbmcoY29uc3QgRE9NU3RyaW5nICYpOworICAgIERPTVN0cmluZyAmb3BlcmF0b3IgPShjb25z
dCBET01TdHJpbmcgJik7CiAKICAgICAvKioKICAgICAgKiBhcHBlbmQgc3RyIHRvIHRoaXMgc3Ry
aW5nCiAgICAgICovCi0gICAgRE9NU3RyaW5nICZvcGVyYXRvciArPSAoY29uc3QgRE9NU3RyaW5n
ICZzdHIpOworICAgIERPTVN0cmluZyAmb3BlcmF0b3IgKz0oY29uc3QgRE9NU3RyaW5nICZzdHIp
OwogCi0gICAgdm9pZCBpbnNlcnQoRE9NU3RyaW5nIHN0ciwgdWludCBwb3MpOworICAgIHZvaWQg
aW5zZXJ0KGNvbnN0IERPTVN0cmluZyAmc3RyLCB1aW50IHBvcyk7CiAKICAgICAvKioKICAgICAg
KiBUaGUgY2hhcmFjdGVyIGF0IHBvc2l0aW9uIGkgb2YgdGhlIERPTVN0cmluZy4gSWYgaSA+PSBs
ZW5ndGgoKSwgdGhlCiAgICAgICogY2hhcmFjdGVyIHJldHVybmVkIHdpbGwgYmUgMC4KICAgICAg
Ki8KLSAgICBjb25zdCBRQ2hhciAmb3BlcmF0b3IgW10odW5zaWduZWQgaW50IGkpIGNvbnN0Owor
ICAgIGNvbnN0IFFDaGFyICZvcGVyYXRvciBbXSh1aW50IGkpIGNvbnN0OwogCiAgICAgaW50IGZp
bmQoY29uc3QgUUNoYXIgYywgaW50IHN0YXJ0ID0gMCkgY29uc3Q7CiAKICAgICB1aW50IGxlbmd0
aCgpIGNvbnN0OwotICAgIHZvaWQgdHJ1bmNhdGUoIHVuc2lnbmVkIGludCBsZW4gKTsKLSAgICB2
b2lkIHJlbW92ZSh1bnNpZ25lZCBpbnQgcG9zLCBpbnQgbGVuPTEpOworICAgIHZvaWQgdHJ1bmNh
dGUodWludCBsZW4pOworICAgIHZvaWQgcmVtb3ZlKHVpbnQgcG9zLCBpbnQgbGVuPTEpOwogCi0g
ICAgRE9NU3RyaW5nIHN1YnN0cmluZyh1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgbGVu
KSBjb25zdDsKKyAgICBET01TdHJpbmcgc3Vic3RyaW5nKHVpbnQgcG9zLCB1aW50IGxlbikgY29u
c3Q7CiAKICAgICAvKioKICAgICAgKiBTcGxpdHMgdGhlIHN0cmluZyBpbnRvIHR3by4gVGhlIG9y
aWdpbmFsIHN0cmluZyBnZXRzIHRydW5jYXRlZCB0byBwb3MsIGFuZCB0aGUgcmVzdCBpcyByZXR1
cm5lZC4KICAgICAgKi8KLSAgICBET01TdHJpbmcgc3BsaXQodW5zaWduZWQgaW50IHBvcyk7Cisg
ICAgRE9NU3RyaW5nIHNwbGl0KHVpbnQgcG9zKTsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMg
YSBsb3dlcmNhc2UgdmVyc2lvbiBvZiB0aGUgc3RyaW5nCkBAIC0xMDQsMTggKzk0LDE3IEBAIHB1
YmxpYzoKICAgICBRU3RyaW5nIHFzdHJpbmcoKSBjb25zdDsKIAogICAgIGludCB0b0ludCgpIGNv
bnN0OwotICAgIGtodG1sOjpMZW5ndGgqIHRvTGVuZ3RoQXJyYXkoaW50JiBsZW4pIGNvbnN0Owot
ICAgIGtodG1sOjpMZW5ndGgqIHRvQ29vcmRzQXJyYXkoaW50JiBsZW4pIGNvbnN0OwotICAgIGJv
b2wgcGVyY2VudGFnZShpbnQgJl9wZXJjZW50YWdlKSBjb25zdDsKKyAgICBraHRtbDo6TGVuZ3Ro
ICp0b0xlbmd0aEFycmF5KGludCAmbGVuKSBjb25zdDsKKyAgICBraHRtbDo6TGVuZ3RoICp0b0Nv
b3Jkc0FycmF5KGludCAmbGVuKSBjb25zdDsKKyAgICBib29sIHBlcmNlbnRhZ2UoaW50ICZyZXN1
bHQpIGNvbnN0OwogCiAgICAgRE9NU3RyaW5nIGNvcHkoKSBjb25zdDsKIAotICAgIGJvb2wgaXNO
dWxsKCkgIGNvbnN0IHsgcmV0dXJuIChtX2ltcGwgPT0gMCk7IH0KKyAgICBib29sIGlzTnVsbCgp
ICBjb25zdCB7IHJldHVybiBtX2ltcGwgPT0gMDsgfQogICAgIGJvb2wgaXNFbXB0eSgpICBjb25z
dDsKIAogICAgIC8qKgotICAgICAqIEBpbnRlcm5hbCBnZXQgYSBoYW5kbGUgdG8gdGhlIGltbGVt
ZW50YXRpb24gb2YgdGhlIERPTVN0cmluZwotICAgICAqIFVzZSBhdCBvd24gcmlzayEhIQorICAg
ICAqIEBpbnRlcm5hbCBnZXQgYSBoYW5kbGUgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBE
T01TdHJpbmcKICAgICAgKi8KICAgICBET01TdHJpbmdJbXBsICppbXBsKCkgY29uc3QgeyByZXR1
cm4gbV9pbXBsOyB9CiAKQEAgLTEyOSwyNSArMTE4LDEzMiBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
Y2hhciAqYXNjaWkoKSBjb25zdDsKICNlbmRpZgogCi1wcm90ZWN0ZWQ6Citwcml2YXRlOgogICAg
IERPTVN0cmluZ0ltcGwgKm1faW1wbDsKIH07CiAKLURPTVN0cmluZyBvcGVyYXRvciArIChjb25z
dCBET01TdHJpbmcgJmEsIGNvbnN0IERPTVN0cmluZyAmYik7Ci1ib29sIG9wZXJhdG9yPT0oIGNv
bnN0IERPTVN0cmluZyAmYSwgY29uc3QgUVN0cmluZyAmYiApOwotYm9vbCBvcGVyYXRvcj09KCBj
b25zdCBET01TdHJpbmcgJmEsIGNvbnN0IGNoYXIgKmIgKTsKLWlubGluZSBib29sIG9wZXJhdG9y
PT0oIGNvbnN0IFFTdHJpbmcgJmIsIGNvbnN0IERPTVN0cmluZyAmYSApIHsgcmV0dXJuIGEgPT0g
YjsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgY2hhciAqYiwgY29uc3QgRE9NU3Ry
aW5nICZhICkgeyByZXR1cm4gYSA9PSBiOyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KCBjb25z
dCBET01TdHJpbmcgJmEsIGNvbnN0IERPTVN0cmluZyAmYiApIHsgcmV0dXJuICEoYT09Yik7IH0K
LWlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IERPTVN0cmluZyAmYSwgY29uc3QgUVN0cmlu
ZyAmYiApIHsgcmV0dXJuICEoYT09Yik7IH0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0
IERPTVN0cmluZyAmYSwgY29uc3QgY2hhciAqYiApICB7IHJldHVybiAhKGE9PWIpOyB9Ci1pbmxp
bmUgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRU3RyaW5nICZiLCBjb25zdCBET01TdHJpbmcgJmEg
KSB7IHJldHVybiAhKGE9PWIpOyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBjaGFy
ICpiLCBjb25zdCBET01TdHJpbmcgJmEgKSAgeyByZXR1cm4gIShhPT1iKTsgfQotaW5saW5lIGJv
b2wgc3RyY21wKCBjb25zdCBET01TdHJpbmcgJmEsIGNvbnN0IERPTVN0cmluZyAmYiApIHsgcmV0
dXJuIGEgIT0gYjsgfQotCi0vLyByZXR1cm5zIGZhbHNlIHdoZW4gZXF1YWwsIHRydWUgb3RoZXJ3
aXNlIChpZ25vcmluZyBjYXNlKQotYm9vbCBzdHJjYXNlY21wKCBjb25zdCBET01TdHJpbmcgJmEs
IGNvbnN0IERPTVN0cmluZyAmYiApOwotYm9vbCBzdHJjYXNlY21wKCBjb25zdCBET01TdHJpbmcm
IGEsIGNvbnN0IGNoYXIqIGIgKTsKK0RPTVN0cmluZyBvcGVyYXRvciArKGNvbnN0IERPTVN0cmlu
ZyAmYSwgY29uc3QgRE9NU3RyaW5nICZiKTsKKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IERPTVN0
cmluZyAmYSwgY29uc3QgRE9NU3RyaW5nICZiKTsKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBET01T
dHJpbmcgJmEsIGNvbnN0IFFTdHJpbmcgJmIpOworYm9vbCBvcGVyYXRvcj09KGNvbnN0IERPTVN0
cmluZyAmYSwgY29uc3QgY2hhciAqYik7CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFFT
dHJpbmcgJmIsIGNvbnN0IERPTVN0cmluZyAmYSkgeyByZXR1cm4gYSA9PSBiOyB9CitpbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IGNoYXIgKmIsIGNvbnN0IERPTVN0cmluZyAmYSkgeyByZXR1
cm4gYSA9PSBiOyB9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRE9NU3RyaW5nICZh
LCBjb25zdCBET01TdHJpbmcgJmIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQoraW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBET01TdHJpbmcgJmEsIGNvbnN0IFFTdHJpbmcgJmIpIHsgcmV0dXJu
ICEoYSA9PSBiKTsgfQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBRU3RyaW5nICZiLCBj
b25zdCBET01TdHJpbmcgJmEpIHsgcmV0dXJuICEoYiA9PSBhKTsgfQoraW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBET01TdHJpbmcgJmEsIGNvbnN0IGNoYXIgKmIpICB7IHJldHVybiAhKGEg
PT0gYik7IH0KK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgY2hhciAqYiwgY29uc3QgRE9N
U3RyaW5nICZhKSAgeyByZXR1cm4gIShiID09IGEpOyB9CisKK2Jvb2wgZXF1YWxzSWdub3JpbmdD
YXNlKGNvbnN0IERPTVN0cmluZyAmLCBjb25zdCBET01TdHJpbmcgJmIpOworYm9vbCBlcXVhbHNJ
Z25vcmluZ0Nhc2UoY29uc3QgRE9NU3RyaW5nICYsIGNvbnN0IGNoYXIgKmIpOworaW5saW5lIGJv
b2wgZXF1YWxzSWdub3JpbmdDYXNlKGNvbnN0IGNoYXIgKmEsIGNvbnN0IERPTVN0cmluZyAmYikg
eyByZXR1cm4gYiA9PSBhOyB9CisKK2lubGluZSBET01TdHJpbmc6OkRPTVN0cmluZyhET01TdHJp
bmdJbXBsICppKQoreworICAgIGlmIChpKQorICAgICAgICBpLT5yZWYoKTsKKyAgICBtX2ltcGwg
PSBpOworfQorCitpbmxpbmUgRE9NU3RyaW5nOjpET01TdHJpbmcoY29uc3QgRE9NU3RyaW5nICZv
dGhlcikKK3sKKyAgICBET01TdHJpbmdJbXBsICppID0gb3RoZXIubV9pbXBsOworICAgIGlmIChp
KQorICAgICAgICBpLT5yZWYoKTsKKyAgICBtX2ltcGwgPSBpOworfQorCitpbmxpbmUgRE9NU3Ry
aW5nICZET01TdHJpbmc6Om9wZXJhdG9yID0oY29uc3QgRE9NU3RyaW5nICZvdGhlcikKK3sKKyAg
ICBET01TdHJpbmdJbXBsICppID0gb3RoZXIubV9pbXBsOworICAgIGlmIChpKQorICAgICAgICBp
LT5yZWYoKTsKKyAgICBET01TdHJpbmdJbXBsICpvbGQgPSBtX2ltcGw7CisgICAgaWYgKG9sZCkK
KyAgICAgICAgb2xkLT5kZXJlZigpOworICAgIG1faW1wbCA9IGk7CisgICAgcmV0dXJuICp0aGlz
OworfQorCitpbmxpbmUgdWludCBET01TdHJpbmc6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgRE9N
U3RyaW5nSW1wbCAqaW1wbCA9IG1faW1wbDsKKyAgICByZXR1cm4gaW1wbCA/IGltcGwtPmwgOiAw
OworfQorCitpbmxpbmUgUUNoYXIgKkRPTVN0cmluZzo6dW5pY29kZSgpIGNvbnN0Cit7CisgICAg
RE9NU3RyaW5nSW1wbCAqaW1wbCA9IG1faW1wbDsKKyAgICByZXR1cm4gaW1wbCA/IGltcGwtPnMg
OiAwOworfQorCitpbmxpbmUgdm9pZCBET01TdHJpbmc6OnRydW5jYXRlKHVpbnQgbGVuKQorewor
ICAgIGlmIChET01TdHJpbmdJbXBsICppbXBsID0gbV9pbXBsKQorICAgICAgICBpbXBsLT50cnVu
Y2F0ZShsZW4pOworfQorCitpbmxpbmUgdm9pZCBET01TdHJpbmc6OnJlbW92ZSh1aW50IHBvcywg
aW50IGxlbikKK3sKKyAgICBpZiAoRE9NU3RyaW5nSW1wbCAqaW1wbCA9IG1faW1wbCkKKyAgICAg
ICAgaW1wbC0+cmVtb3ZlKHBvcywgbGVuKTsKK30KKworaW5saW5lIERPTVN0cmluZyBET01TdHJp
bmc6OnN1YnN0cmluZyh1aW50IHBvcywgdWludCBsZW4pIGNvbnN0Cit7CisgICAgRE9NU3RyaW5n
SW1wbCAqaW1wbCA9IG1faW1wbDsKKyAgICByZXR1cm4gaW1wbCA/IGltcGwtPnN1YnN0cmluZyhw
b3MsIGxlbikgOiBET01TdHJpbmcoKTsKK30KKworaW5saW5lIERPTVN0cmluZyBET01TdHJpbmc6
OnNwbGl0KHVpbnQgcG9zKQoreworICAgIERPTVN0cmluZ0ltcGwgKmltcGwgPSBtX2ltcGw7Cisg
ICAgcmV0dXJuIGltcGwgPyBpbXBsLT5zcGxpdChwb3MpIDogRE9NU3RyaW5nKCk7Cit9CisKK2lu
bGluZSBET01TdHJpbmcgRE9NU3RyaW5nOjpsb3dlcigpIGNvbnN0Cit7CisgICAgRE9NU3RyaW5n
SW1wbCAqaW1wbCA9IG1faW1wbDsKKyAgICByZXR1cm4gaW1wbCA/IGltcGwtPmxvd2VyKCkgOiBE
T01TdHJpbmcoKTsKK30KKworaW5saW5lIERPTVN0cmluZyBET01TdHJpbmc6OnVwcGVyKCkgY29u
c3QKK3sKKyAgICBET01TdHJpbmdJbXBsICppbXBsID0gbV9pbXBsOworICAgIHJldHVybiBpbXBs
ID8gaW1wbC0+dXBwZXIoKSA6IERPTVN0cmluZygpOworfQorCitpbmxpbmUgaW50IERPTVN0cmlu
Zzo6dG9JbnQoKSBjb25zdAoreworICAgIERPTVN0cmluZ0ltcGwgKmltcGwgPSBtX2ltcGw7Cisg
ICAgcmV0dXJuIGltcGwgPyBpbXBsLT50b0ludCgpIDogMDsKK30KKworaW5saW5lIERPTVN0cmlu
ZyBET01TdHJpbmc6OmNvcHkoKSBjb25zdAoreworICAgIERPTVN0cmluZ0ltcGwgKmltcGwgPSBt
X2ltcGw7CisgICAgcmV0dXJuIGltcGwgPyBpbXBsLT5jb3B5KCkgOiAwOworfQorCitpbmxpbmUg
Ym9vbCBET01TdHJpbmc6OmlzRW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiBsZW5ndGgoKSA9
PSAwOworfQorCitpbmxpbmUga2h0bWw6Okxlbmd0aCAqRE9NU3RyaW5nOjp0b0Nvb3Jkc0FycmF5
KGludCYgbGVuKSBjb25zdCAKK3sgCisgICAgRE9NU3RyaW5nSW1wbCAqaW1wbCA9IG1faW1wbDsK
KyAgICByZXR1cm4gaW1wbCA/IGltcGwtPnRvQ29vcmRzQXJyYXkobGVuKSA6IE5VTEw7Cit9CisK
K2lubGluZSBraHRtbDo6TGVuZ3RoICpET01TdHJpbmc6OnRvTGVuZ3RoQXJyYXkoaW50JiBsZW4p
IGNvbnN0IAoreyAKKyAgICBET01TdHJpbmdJbXBsICppbXBsID0gbV9pbXBsOworICAgIHJldHVy
biBpbXBsID8gaW1wbC0+dG9MZW5ndGhBcnJheShsZW4pIDogTlVMTDsKK30KKworfQogCi19Owog
I2VuZGlmCkluZGV4OiBraHRtbC9lY21hL2tqc19odG1sLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xMzgKZGlmZiAtcCAtdSAtcjEuMTM4IGtodG1sL2VjbWEva2pzX2h0bWwuY3Bw
Ci0tLSBraHRtbC9lY21hL2tqc19odG1sLmNwcAkyOSBBdWcgMjAwNSAyMToyOToxMiAtMDAwMAkx
LjEzOAorKysga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAJNSBTZXAgMjAwNSAxODowNDozMCAtMDAw
MApAQCAtNDg4LDkgKzQ4OCw5IEBAIHZvaWQgS0pTOjpIVE1MRG9jdW1lbnQ6OnB1dFZhbHVlUHJv
cGVydHkKICAgICB7CiAgICAgICBET01TdHJpbmcgbW9kZVN0cmluZyA9IHZhbHVlLT50b1N0cmlu
ZyhleGVjKS5kb21TdHJpbmcoKTsKICAgICAgIERvY3VtZW50SW1wbDo6SW5oZXJpdGVkQm9vbCBt
b2RlOwotICAgICAgaWYgKCFzdHJjYXNlY21wKG1vZGVTdHJpbmcsICJvbiIpKQorICAgICAgaWYg
KGVxdWFsc0lnbm9yaW5nQ2FzZShtb2RlU3RyaW5nLCAib24iKSkKICAgICAgICAgbW9kZSA9IERv
Y3VtZW50SW1wbDo6b247Ci0gICAgICBlbHNlIGlmICghc3RyY2FzZWNtcChtb2RlU3RyaW5nLCAi
b2ZmIikpCisgICAgICBlbHNlIGlmIChlcXVhbHNJZ25vcmluZ0Nhc2UobW9kZVN0cmluZywgIm9m
ZiIpKQogICAgICAgICBtb2RlID0gRG9jdW1lbnRJbXBsOjpvZmY7CiAgICAgICBlbHNlCiAgICAg
ICAgIG1vZGUgPSBEb2N1bWVudEltcGw6OmluaGVyaXQ7CkluZGV4OiBraHRtbC9lZGl0aW5nL2Fw
cGx5X3N0eWxlX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMTIKZGlmZiAtcCAtdSAtcjEuMTIga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9j
b21tYW5kLmNwcAotLS0ga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAkyIFNl
cCAyMDA1IDE2OjQ1OjM4IC0wMDAwCTEuMTIKKysrIGtodG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVf
Y29tbWFuZC5jcHAJNSBTZXAgMjAwNSAxODowNDozMiAtMDAwMApAQCAtMTcwLDEzICsxNzAsMTMg
QEAgYm9vbCBTdHlsZUNoYW5nZTo6Y2hlY2tGb3JMZWdhY3lIVE1MU3R5bAogICAgIERPTVN0cmlu
ZyB2YWx1ZVRleHQocHJvcGVydHktPnZhbHVlKCktPmNzc1RleHQoKSk7CiAgICAgc3dpdGNoIChw
cm9wZXJ0eS0+aWQoKSkgewogICAgICAgICBjYXNlIENTU19QUk9QX0ZPTlRfV0VJR0hUOgotICAg
ICAgICAgICAgaWYgKHN0cmNhc2VjbXAodmFsdWVUZXh0LCAiYm9sZCIpID09IDApIHsKKyAgICAg
ICAgICAgIGlmIChlcXVhbHNJZ25vcmluZ0Nhc2UodmFsdWVUZXh0LCAiYm9sZCIpKSB7CiAgICAg
ICAgICAgICAgICAgbV9hcHBseUJvbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NT
X1BST1BfRk9OVF9TVFlMRToKLSAgICAgICAgICAgIGlmIChzdHJjYXNlY21wKHZhbHVlVGV4dCwg
Iml0YWxpYyIpID09IDAgfHwgc3RyY2FzZWNtcCh2YWx1ZVRleHQsICJvYmxpcXVlIikgPT0gMCkg
eworICAgICAgICAgICAgaWYgKGVxdWFsc0lnbm9yaW5nQ2FzZSh2YWx1ZVRleHQsICJpdGFsaWMi
KSB8fCBlcXVhbHNJZ25vcmluZ0Nhc2UodmFsdWVUZXh0LCAib2JsaXF1ZSIpKSB7CiAgICAgICAg
ICAgICAgICAgbV9hcHBseUl0YWxpYyA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICB9CkBAIC0yMjcsNyArMjI3LDcgQEAgYm9vbCBTdHlsZUNoYW5nZTo6
Y3VycmVudGx5SGFzU3R5bGUoY29ucwogICAgIFNoYXJlZFB0cjxDU1NWYWx1ZUltcGw+IHZhbHVl
ID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHktPmlkKCksIERvTm90VXBkYXRl
TGF5b3V0KTsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0
dXJuIHN0cmNhc2VjbXAodmFsdWUtPmNzc1RleHQoKSwgcHJvcGVydHktPnZhbHVlKCktPmNzc1Rl
eHQoKSkgPT0gMDsKKyAgICByZXR1cm4gZXF1YWxzSWdub3JpbmdDYXNlKHZhbHVlLT5jc3NUZXh0
KCksIHByb3BlcnR5LT52YWx1ZSgpLT5jc3NUZXh0KCkpOwogfQogCiBzdGF0aWMgRE9NU3RyaW5n
ICZzdHlsZVNwYW5DbGFzc1N0cmluZygpCkBAIC02ODksNyArNjg5LDcgQEAgc3RhdGljIGJvb2wg
aGFzVGV4dERlY29yYXRpb25Qcm9wZXJ0eShObwogICAgIEVsZW1lbnRJbXBsICplbGVtZW50ID0g
c3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obm9kZSk7CiAgICAgQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uSW1wbCBzdHlsZShlbGVtZW50KTsKICAgICBTaGFyZWRQdHI8Q1NTVmFsdWVJbXBs
PiB2YWx1ZSA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTX1BST1BfVEVYVF9ERUNPUkFU
SU9OLCBEb05vdFVwZGF0ZUxheW91dCk7Ci0gICAgcmV0dXJuIHZhbHVlICYmIHN0cmNhc2VjbXAo
dmFsdWUtPmNzc1RleHQoKSwgIm5vbmUiKSAhPSAwOworICAgIHJldHVybiB2YWx1ZSAmJiAhZXF1
YWxzSWdub3JpbmdDYXNlKHZhbHVlLT5jc3NUZXh0KCksICJub25lIik7CiB9CiAKIHN0YXRpYyBO
b2RlSW1wbCogaGlnaGVzdEFuY2VzdG9yV2l0aFRleHREZWNvcmF0aW9uKE5vZGVJbXBsICpub2Rl
KQpAQCAtNzIyLDcgKzcyMiw3IEBAIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqQXBw
bHlTdHkKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKnRleHREZWNvcmF0aW9u
U3R5bGUgPSBzdHlsZS0+Y29weVByb3BlcnRpZXNJblNldChwcm9wZXJ0aWVzLCAxKTsKIAogICAg
IFNoYXJlZFB0cjxDU1NWYWx1ZUltcGw+IHByb3BlcnR5ID0gc3R5bGUtPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTX1BST1BfVEVYVF9ERUNPUkFUSU9OKTsKLSAgICBpZiAocHJvcGVydHkgJiYgc3Ry
Y2FzZWNtcChwcm9wZXJ0eS0+Y3NzVGV4dCgpLCAibm9uZSIpICE9IDApCisgICAgaWYgKHByb3Bl
cnR5ICYmICFlcXVhbHNJZ25vcmluZ0Nhc2UocHJvcGVydHktPmNzc1RleHQoKSwgIm5vbmUiKSkK
ICAgICAgICAgcmVtb3ZlQ1NTUHJvcGVydHkoc3R5bGUuZ2V0KCksIENTU19QUk9QX1RFWFRfREVD
T1JBVElPTik7CiAKICAgICByZXR1cm4gdGV4dERlY29yYXRpb25TdHlsZTsKQEAgLTc0NSw3ICs3
NDUsNyBAQCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKkFwcGx5U3R5CiAgICAgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICp0ZXh0RGVjb3JhdGlvblN0eWxlID0gY29tcHV0
ZWRTdHlsZS0+Y29weVByb3BlcnRpZXNJblNldChwcm9wZXJ0aWVzLCAxKTsKIAogICAgIFNoYXJl
ZFB0cjxDU1NWYWx1ZUltcGw+IHByb3BlcnR5ID0gY29tcHV0ZWRTdHlsZS0+Z2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NfUFJPUF9URVhUX0RFQ09SQVRJT04pOwotICAgIGlmIChwcm9wZXJ0eSAmJiBz
dHJjYXNlY21wKHByb3BlcnR5LT5jc3NUZXh0KCksICJub25lIikgIT0gMCkgeworICAgIGlmIChw
cm9wZXJ0eSAmJiAhZXF1YWxzSWdub3JpbmdDYXNlKHByb3BlcnR5LT5jc3NUZXh0KCksICJub25l
IikpIHsKICAgICAgICAgU2hhcmVkUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbD4g
bmV3U3R5bGUgPSB0ZXh0RGVjb3JhdGlvblN0eWxlLT5jb3B5KCk7CiAgICAgICAgIG5ld1N0eWxl
LT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9URVhUX0RFQ09SQVRJT04sICJub25lIik7CiAgICAgICAg
IGFwcGx5VGV4dERlY29yYXRpb25TdHlsZShub2RlLCBuZXdTdHlsZS5nZXQoKSk7CkluZGV4OiBr
aHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuODAKZGlmZiAtcCAtdSAtcjEuODAga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAot
LS0ga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAkzMSBBdWcgMjAwNSAwNDozODozOCAtMDAw
MAkxLjgwCisrKyBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCTUgU2VwIDIwMDUgMTg6MDQ6
MzMgLTAwMDAKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEhUTUxCb2R5RWxlbWVudEltcGw6OnBh
cnNlTWFwcGVkQXR0CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdGV4dEF0dHIpIHsK
ICAgICAgICAgYWRkQ1NTQ29sb3IoYXR0ciwgQ1NTX1BST1BfQ09MT1IsIGF0dHItPnZhbHVlKCkp
OwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGJncHJvcGVydGllc0F0dHIpIHsKLSAg
ICAgICAgaWYgKHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJmaXhlZCIgKSA9PSAwKQorICAg
ICAgICBpZiAoZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAiZml4ZWQiICkpCiAg
ICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CQUNLR1JPVU5EX0FUVEFD
SE1FTlQsIENTU19WQUxfRklYRUQpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZs
aW5rQXR0ciB8fAogICAgICAgICAgICAgICAgYXR0ci0+bmFtZSgpID09IGFsaW5rQXR0ciB8fApA
QCAtNDEzLDEwICs0MTMsMTAgQEAgdm9pZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6cGFyc2VNYXBw
ZWRBdAogICAgICAgICBrZERlYnVnKCA2MDMxICkgPDwgInNldCBzY3JvbGwgbW9kZSIgPDwgZW5k
bDsKIAkvLyBBdXRvIGFuZCB5ZXMgYm90aCBzaW1wbHkgbWVhbiAiYWxsb3cgc2Nyb2xsaW5nLiIg
IE5vIG1lYW5zCiAJLy8gImRvbid0IGFsbG93IHNjcm9sbGluZy4iCi0gICAgICAgIGlmKCBzdHJj
YXNlY21wKCBhdHRyLT52YWx1ZSgpLCAiYXV0byIgKSA9PSAwIHx8Ci0gICAgICAgICAgICBzdHJj
YXNlY21wKCBhdHRyLT52YWx1ZSgpLCAieWVzIiApID09IDAgKQorICAgICAgICBpZiggZXF1YWxz
SWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAiYXV0byIgKSB8fAorICAgICAgICAgICAgZXF1
YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAieWVzIiApICkKICAgICAgICAgICAgIG1f
c2Nyb2xsaW5nID0gUVNjcm9sbFZpZXc6OkF1dG87Ci0gICAgICAgIGVsc2UgaWYoIHN0cmNhc2Vj
bXAoIGF0dHItPnZhbHVlKCksICJubyIgKSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiggZXF1YWxz
SWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAibm8iICkgKQogICAgICAgICAgICAgbV9zY3Jv
bGxpbmcgPSBRU2Nyb2xsVmlldzo6QWx3YXlzT2ZmOwogICAgICAgICAvLyBGSVhNRTogSWYgd2Ug
YXJlIGFscmVhZHkgYXR0YWNoZWQsIHRoaXMgaGFzIG5vIGVmZmVjdC4KICAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBvbmxvYWRBdHRyKSB7CkluZGV4OiBraHRtbC9odG1sL2h0bWxfYmxv
Y2tpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfYmxvY2tpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNApkaWZmIC1w
IC11IC1yMS4yNCBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9o
dG1sX2Jsb2NraW1wbC5jcHAJMjkgQXVnIDIwMDUgMjE6Mjk6MTYgLTAwMDAJMS4yNAorKysga2h0
bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAJNSBTZXAgMjAwNSAxODowNDozMyAtMDAwMApAQCAt
NzksMTEgKzc5LDExIEBAIHZvaWQgSFRNTERpdkVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHIK
IHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0cikgewogICAgICAgICBET01TdHJp
bmcgdiA9IGF0dHItPnZhbHVlKCk7Ci0JaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAi
bWlkZGxlIiApID09IDAgfHwgc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgImNlbnRlciIgKSA9
PSAwICkKKwlpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgIm1pZGRsZSIg
KSB8fCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJjZW50ZXIiICkgKQogICAg
ICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFM
X19LSFRNTF9DRU5URVIpOwotICAgICAgICBlbHNlIGlmIChzdHJjYXNlY21wKGF0dHItPnZhbHVl
KCksICJsZWZ0IikgPT0gMCkKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxzSWdub3JpbmdDYXNlKGF0
dHItPnZhbHVlKCksICJsZWZ0IikpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBD
U1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19LSFRNTF9MRUZUKTsKLSAgICAgICAgZWxzZSBp
ZiAoc3RyY2FzZWNtcChhdHRyLT52YWx1ZSgpLCAicmlnaHQiKSA9PSAwKQorICAgICAgICBlbHNl
IGlmIChlcXVhbHNJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInJpZ2h0IikpCiAgICAgICAg
ICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19L
SFRNTF9SSUdIVCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0
dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIHYpOwpAQCAtMTI4LDExICsxMjgsMTEgQEAgYm9vbCBI
VE1MSFJFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShjb25zdAogdm9pZCBIVE1MSFJFbGVtZW50SW1w
bDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0cikgewotICAgICAgICBpZiAoc3RyY2FzZWNt
cChhdHRyLT52YWx1ZSgpLCAibGVmdCIpID09IDApIHsKKyAgICAgICAgaWYgKGVxdWFsc0lnbm9y
aW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAibGVmdCIpKSB7CiAgICAgICAgICAgICBhZGRDU1NQcm9w
ZXJ0eShhdHRyLCBDU1NfUFJPUF9NQVJHSU5fTEVGVCwgIjAiKTsKIAkgICAgYWRkQ1NTUHJvcGVy
dHkoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX1JJR0hULCBDU1NfVkFMX0FVVE8pOwogCX0KLSAgICAg
ICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhdHRyLT52YWx1ZSgpLCAicmlnaHQiKSA9PSAwKSB7Cisg
ICAgICAgIGVsc2UgaWYgKGVxdWFsc0lnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAicmlnaHQi
KSkgewogCSAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9NQVJHSU5fTEVGVCwgQ1NT
X1ZBTF9BVVRPKTsKIAkgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX1JJ
R0hULCAiMCIpOwogCX0KQEAgLTI2NCwxMSArMjY0LDExIEBAIHZvaWQgSFRNTFBhcmFncmFwaEVs
ZW1lbnRJbXBsOjpwYXJzZU1hcHAKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0
cikgewogICAgICAgICBET01TdHJpbmcgdiA9IGF0dHItPnZhbHVlKCk7Ci0gICAgICAgIGlmICgg
c3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgIm1pZGRsZSIgKSA9PSAwIHx8IHN0cmNhc2VjbXAo
IGF0dHItPnZhbHVlKCksICJjZW50ZXIiICkgPT0gMCApCisgICAgICAgIGlmICggZXF1YWxzSWdu
b3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAibWlkZGxlIiApIHx8IGVxdWFsc0lnbm9yaW5nQ2Fz
ZSggYXR0ci0+dmFsdWUoKSwgImNlbnRlciIgKSApCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0
eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19LSFRNTF9DRU5URVIpOwotICAg
ICAgICBlbHNlIGlmIChzdHJjYXNlY21wKGF0dHItPnZhbHVlKCksICJsZWZ0IikgPT0gMCkKKyAg
ICAgICAgZWxzZSBpZiAoZXF1YWxzSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJsZWZ0Iikp
CiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBD
U1NfVkFMX19LSFRNTF9MRUZUKTsKLSAgICAgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhdHRyLT52
YWx1ZSgpLCAicmlnaHQiKSA9PSAwKQorICAgICAgICBlbHNlIGlmIChlcXVhbHNJZ25vcmluZ0Nh
c2UoYXR0ci0+dmFsdWUoKSwgInJpZ2h0IikpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShh
dHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19LSFRNTF9SSUdIVCk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJ
R04sIHYpOwpAQCAtMzYyLDcgKzM2Miw3IEBAIHZvaWQgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbDo6
cGFyc2VNYXBwZWQKICAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9fS0hU
TUxfTUFSUVVFRV9TUEVFRCwgYXR0ci0+dmFsdWUoKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gbG9vcEF0dHIpIHsKICAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0gIi0xIiB8fCBzdHJjYXNlY21w
KGF0dHItPnZhbHVlKCksICJpbmZpbml0ZSIpID09IDApCisgICAgICAgICAgICBpZiAoYXR0ci0+
dmFsdWUoKSA9PSAiLTEiIHx8IGVxdWFsc0lnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiaW5m
aW5pdGUiKSkKICAgICAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9f
S0hUTUxfTUFSUVVFRV9SRVBFVElUSU9OLCBDU1NfVkFMX0lORklOSVRFKTsKICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfX0tIVE1M
X01BUlFVRUVfUkVQRVRJVElPTiwgYXR0ci0+dmFsdWUoKSk7CkluZGV4OiBraHRtbC9odG1sL2h0
bWxfZG9jdW1lbnRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS42OQpkaWZmIC1wIC11IC1yMS42OSBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAot
LS0ga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAJMjkgQXVnIDIwMDUgMjE6Mjk6MTYg
LTAwMDAJMS42OQorKysga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAJNSBTZXAgMjAw
NSAxODowNDozNCAtMDAwMApAQCAtMjUzLDggKzI1Myw3IEBAIGJvb2wgSFRNTERvY3VtZW50SW1w
bDo6Y2hpbGRBbGxvd2VkKCBOb2QKIEVsZW1lbnRJbXBsICpIVE1MRG9jdW1lbnRJbXBsOjpjcmVh
dGVFbGVtZW50KGNvbnN0IERPTVN0cmluZyAmbmFtZSwgaW50ICZleGNlcHRpb25jb2RlKQogewog
ICAgIC8vIERvIG5vdCBjaGVjayBuYW1lIHZhbGlkaXR5LiAgT3RoZXIgYnJvd3NlcnMgZG9uJ3Qs
IGFuZCBpdCB0YWtlcyB0aW1lLgotICAgIERPTVN0cmluZyBsb3dlck5hbWUobmFtZS5sb3dlcigp
KTsKLSAgICByZXR1cm4gSFRNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVIVE1MRWxlbWVudChBdG9t
aWNTdHJpbmcobG93ZXJOYW1lKSwgdGhpcywgMCwgZmFsc2UpOworICAgIHJldHVybiBIVE1MRWxl
bWVudEZhY3Rvcnk6OmNyZWF0ZUhUTUxFbGVtZW50KEF0b21pY1N0cmluZyhuYW1lLCBsb3dlcmNh
c2VkKSwgdGhpcywgMCwgZmFsc2UpOwogfQogCiB2b2lkIEhUTUxEb2N1bWVudEltcGw6OnNsb3RI
aXN0b3J5Q2hhbmdlZCgpCkluZGV4OiBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9lbGVt
ZW50aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTA0CmRpZmYgLXAgLXUgLXIxLjEw
NCBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfZWxl
bWVudGltcGwuY3BwCTMgU2VwIDIwMDUgMjM6MDk6NTkgLTAwMDAJMS4xMDQKKysrIGtodG1sL2h0
bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAJNSBTZXAgMjAwNSAxODowNDozNSAtMDAwMApAQCAtMTM4
LDcgKzEzOCw3IEBAIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnUKIAog
ICAgIERPTVN0cmluZyBpbmRleHN0cmluZzsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWdu
QXR0cikgewotICAgICAgICBpZiAoc3RyY2FzZWNtcChhdHRyLT52YWx1ZSgpLCAibWlkZGxlIiAp
ID09IDApCisgICAgICAgIGlmIChlcXVhbHNJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgIm1p
ZGRsZSIgKSkKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRf
QUxJR04sICJjZW50ZXIiKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVy
dHkoYXR0ciwgQ1NTX1BST1BfVEVYVF9BTElHTiwgYXR0ci0+dmFsdWUoKSk7CkBAIC00NjEsMjUg
KzQ2MSwyNSBAQCB2b2lkIEhUTUxFbGVtZW50SW1wbDo6YWRkSFRNTEFsaWdubWVudChNCiAgICAg
aW50IHByb3BmbG9hdCA9IC0xOwogICAgIGludCBwcm9wdmFsaWduID0gLTE7CiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBhbGlnbm1lbnQgPSBhdHRyLT52YWx1ZSgpOwotICAgIGlmICggc3RyY2Fz
ZWNtcCggYWxpZ25tZW50LCAiYWJzbWlkZGxlIiApID09IDAgKSB7CisgICAgaWYgKCBlcXVhbHNJ
Z25vcmluZ0Nhc2UoIGFsaWdubWVudCwgImFic21pZGRsZSIgKSApIHsKICAgICAgICAgcHJvcHZh
bGlnbiA9IENTU19WQUxfTUlERExFOwotICAgIH0gZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGFsaWdu
bWVudCwgImFic2JvdHRvbSIgKSA9PSAwICkgeworICAgIH0gZWxzZSBpZiAoIGVxdWFsc0lnbm9y
aW5nQ2FzZSggYWxpZ25tZW50LCAiYWJzYm90dG9tIiApICkgewogICAgICAgICBwcm9wdmFsaWdu
ID0gQ1NTX1ZBTF9CT1RUT007Ci0gICAgfSBlbHNlIGlmICggc3RyY2FzZWNtcCggYWxpZ25tZW50
LCAibGVmdCIgKSA9PSAwICkgeworICAgIH0gZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSgg
YWxpZ25tZW50LCAibGVmdCIgKSApIHsKIAlwcm9wZmxvYXQgPSBDU1NfVkFMX0xFRlQ7CiAJcHJv
cHZhbGlnbiA9IENTU19WQUxfVE9QOwotICAgIH0gZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGFsaWdu
bWVudCwgInJpZ2h0IiApID09IDAgKSB7CisgICAgfSBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdD
YXNlKCBhbGlnbm1lbnQsICJyaWdodCIgKSApIHsKIAlwcm9wZmxvYXQgPSBDU1NfVkFMX1JJR0hU
OwogCXByb3B2YWxpZ24gPSBDU1NfVkFMX1RPUDsKLSAgICB9IGVsc2UgaWYgKCBzdHJjYXNlY21w
KCBhbGlnbm1lbnQsICJ0b3AiICkgPT0gMCApIHsKKyAgICB9IGVsc2UgaWYgKCBlcXVhbHNJZ25v
cmluZ0Nhc2UoIGFsaWdubWVudCwgInRvcCIgKSApIHsKIAlwcm9wdmFsaWduID0gQ1NTX1ZBTF9U
T1A7Ci0gICAgfSBlbHNlIGlmICggc3RyY2FzZWNtcCggYWxpZ25tZW50LCAibWlkZGxlIiApID09
IDAgKSB7CisgICAgfSBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhbGlnbm1lbnQsICJt
aWRkbGUiICkgKSB7CiAJcHJvcHZhbGlnbiA9IENTU19WQUxfX0tIVE1MX0JBU0VMSU5FX01JRERM
RTsKLSAgICB9IGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhbGlnbm1lbnQsICJjZW50ZXIiICkgPT0g
MCApIHsKKyAgICB9IGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGFsaWdubWVudCwgImNl
bnRlciIgKSApIHsKIAlwcm9wdmFsaWduID0gQ1NTX1ZBTF9NSURETEU7Ci0gICAgfSBlbHNlIGlm
ICggc3RyY2FzZWNtcCggYWxpZ25tZW50LCAiYm90dG9tIiApID09IDAgKSB7CisgICAgfSBlbHNl
IGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhbGlnbm1lbnQsICJib3R0b20iICkgKSB7CiAJcHJv
cHZhbGlnbiA9IENTU19WQUxfQkFTRUxJTkU7Ci0gICAgfSBlbHNlIGlmICggc3RyY2FzZWNtcCAo
IGFsaWdubWVudCwgInRleHR0b3AiKSA9PSAwICkgeworICAgIH0gZWxzZSBpZiAoIGVxdWFsc0ln
bm9yaW5nQ2FzZSAoIGFsaWdubWVudCwgInRleHR0b3AiKSApIHsKIAlwcm9wdmFsaWduID0gQ1NT
X1ZBTF9URVhUX1RPUDsKICAgICB9CiAgICAgCkBAIC01MzMsMTcgKzUzMywxNyBAQCB2b2lkIEhU
TUxFbGVtZW50SW1wbDo6c2V0Q29udGVudEVkaXRhYmxlCiB7CiAgICAgS0hUTUxQYXJ0ICpwYXJ0
ID0gZ2V0RG9jdW1lbnQoKS0+cGFydCgpOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZW5hYmxl
ZCA9IGF0dHItPnZhbHVlKCk7Ci0gICAgaWYgKGVuYWJsZWQuaXNFbXB0eSgpIHx8IHN0cmNhc2Vj
bXAoZW5hYmxlZCwgInRydWUiKSA9PSAwKSB7CisgICAgaWYgKGVuYWJsZWQuaXNFbXB0eSgpIHx8
IGVxdWFsc0lnbm9yaW5nQ2FzZShlbmFibGVkLCAidHJ1ZSIpKSB7CiAgICAgICAgIGFkZENTU1By
b3BlcnR5KGF0dHIsIENTU19QUk9QX19LSFRNTF9VU0VSX01PRElGWSwgQ1NTX1ZBTF9SRUFEX1dS
SVRFKTsKICAgICAgICAgaWYgKHBhcnQpCiAgICAgICAgICAgICBwYXJ0LT5hcHBseUVkaXRpbmdT
dHlsZVRvRWxlbWVudCh0aGlzKTsgICAgCiAgICAgfQotICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAo
ZW5hYmxlZCwgImZhbHNlIikgPT0gMCkgeworICAgIGVsc2UgaWYgKGVxdWFsc0lnbm9yaW5nQ2Fz
ZShlbmFibGVkLCAiZmFsc2UiKSkgewogICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1Nf
UFJPUF9fS0hUTUxfVVNFUl9NT0RJRlksIENTU19WQUxfUkVBRF9PTkxZKTsKICAgICAgICAgaWYg
KHBhcnQpCiAgICAgICAgICAgICBwYXJ0LT5yZW1vdmVFZGl0aW5nU3R5bGVGcm9tRWxlbWVudCh0
aGlzKTsgICAgCiAgICAgfQotICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoZW5hYmxlZCwgImluaGVy
aXQiKSA9PSAwKSB7CisgICAgZWxzZSBpZiAoZXF1YWxzSWdub3JpbmdDYXNlKGVuYWJsZWQsICJp
bmhlcml0IikpIHsKICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfX0tIVE1M
X1VTRVJfTU9ESUZZLCBDU1NfVkFMX0lOSEVSSVQpOwogICAgICAgICBpZiAocGFydCkKICAgICAg
ICAgICAgIHBhcnQtPnJlbW92ZUVkaXRpbmdTdHlsZUZyb21FbGVtZW50KHRoaXMpOyAgICAKSW5k
ZXg6IGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xOTIKZGlmZiAtcCAtdSAtcjEuMTkyIGtodG1sL2h0bWwvaHRtbF9mb3JtaW1w
bC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAJMyBTZXAgMjAwNSAyMzowOTo1
OSAtMDAwMAkxLjE5MgorKysga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAk1IFNlcCAyMDA1
IDE4OjA0OjM3IC0wMDAwCkBAIC02NTAsOSArNjUwLDkgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnRJ
bXBsOjpwYXJzZU1hcHBlZEF0dAogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB0YXJnZXRB
dHRyKSB7CiAgICAgICAgIG1fdGFyZ2V0ID0gYXR0ci0+dmFsdWUoKTsKICAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBtZXRob2RBdHRyKSB7Ci0gICAgICAgIGlmICggc3RyY2FzZWNtcCgg
YXR0ci0+dmFsdWUoKSwgInBvc3QiICkgPT0gMCApCisgICAgICAgIGlmICggZXF1YWxzSWdub3Jp
bmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAicG9zdCIgKSApCiAgICAgICAgICAgICBtX3Bvc3QgPSB0
cnVlOwotICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgImdldCIg
KSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFs
dWUoKSwgImdldCIgKSApCiAgICAgICAgICAgICBtX3Bvc3QgPSBmYWxzZTsKICAgICB9IGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBlbmN0eXBlQXR0cikgewogICAgICAgICBwYXJzZUVuY3R5cGUo
YXR0ci0+dmFsdWUoKSk7CkBAIC02NjMsNyArNjYzLDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnRJ
bXBsOjpwYXJzZU1hcHBlZEF0dAogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFjY2Vw
dEF0dHIpIHsKICAgICAgICAgLy8gaWdub3JlIHRoaXMgb25lIGZvciB0aGUgbW9tZW50Li4uCiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYXV0b2NvbXBsZXRlQXR0cikgewotICAgICAg
ICBtX2F1dG9jb21wbGV0ZSA9IHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJvZmYiICk7Cisg
ICAgICAgIG1fYXV0b2NvbXBsZXRlID0gIWVxdWFsc0lnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgp
LCAib2ZmIik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25zdWJtaXRBdHRyKSB7
CiAgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKHN1Ym1pdEV2ZW50LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihh
dHRyLT52YWx1ZSgpLnFzdHJpbmcoKSwgdGhpcykpOwpAQCAtMTIyNSwxMSArMTIyNSwxMSBAQCB2
b2lkIEhUTUxCdXR0b25FbGVtZW50SW1wbDo6Zm9jdXMoKQogdm9pZCBIVE1MQnV0dG9uRWxlbWVu
dEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7
CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSAgdHlwZUF0dHIpIHsKLSAgICAgICAgaWYgKCBzdHJj
YXNlY21wKCBhdHRyLT52YWx1ZSgpLCAic3VibWl0IiApID09IDAgKQorICAgICAgICBpZiAoIGVx
dWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgInN1Ym1pdCIgKSApCiAgICAgICAgICAg
ICBtX3R5cGUgPSBTVUJNSVQ7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52
YWx1ZSgpLCAicmVzZXQiICkgPT0gMCApCisgICAgICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmlu
Z0Nhc2UoIGF0dHItPnZhbHVlKCksICJyZXNldCIgKSApCiAgICAgICAgICAgICBtX3R5cGUgPSBS
RVNFVDsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJidXR0
b24iICkgPT0gMCApCisgICAgICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHIt
PnZhbHVlKCksICJidXR0b24iICkgKQogICAgICAgICAgICAgbV90eXBlID0gQlVUVE9OOwogICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZhbHVlQXR0cikgewogICAgICAgICBtX3ZhbHVl
ID0gYXR0ci0+dmFsdWUoKTsKQEAgLTE0MzUsMzAgKzE0MzUsMzAgQEAgdm9pZCBIVE1MSW5wdXRF
bGVtZW50SW1wbDo6c2V0SW5wdXRUeXBlKAogewogICAgIHR5cGVFbnVtIG5ld1R5cGU7CiAgICAg
Ci0gICAgaWYgKCBzdHJjYXNlY21wKCB0LCAicGFzc3dvcmQiICkgPT0gMCApCisgICAgaWYgKCBl
cXVhbHNJZ25vcmluZ0Nhc2UoIHQsICJwYXNzd29yZCIgKSApCiAgICAgICAgIG5ld1R5cGUgPSBQ
QVNTV09SRDsKLSAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggdCwgImNoZWNrYm94IiApID09IDAg
KQorICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIHQsICJjaGVja2JveCIgKSApCiAg
ICAgICAgIG5ld1R5cGUgPSBDSEVDS0JPWDsKLSAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggdCwg
InJhZGlvIiApID09IDAgKQorICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIHQsICJy
YWRpbyIgKSApCiAgICAgICAgIG5ld1R5cGUgPSBSQURJTzsKLSAgICBlbHNlIGlmICggc3RyY2Fz
ZWNtcCggdCwgInN1Ym1pdCIgKSA9PSAwICkKKyAgICBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdD
YXNlKCB0LCAic3VibWl0IiApICkKICAgICAgICAgbmV3VHlwZSA9IFNVQk1JVDsKLSAgICBlbHNl
IGlmICggc3RyY2FzZWNtcCggdCwgInJlc2V0IiApID09IDAgKQorICAgIGVsc2UgaWYgKCBlcXVh
bHNJZ25vcmluZ0Nhc2UoIHQsICJyZXNldCIgKSApCiAgICAgICAgIG5ld1R5cGUgPSBSRVNFVDsK
LSAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggdCwgImZpbGUiICkgPT0gMCApCisgICAgZWxzZSBp
ZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggdCwgImZpbGUiICkgKQogICAgICAgICBuZXdUeXBlID0g
RklMRTsKLSAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggdCwgImhpZGRlbiIgKSA9PSAwICkKKyAg
ICBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCB0LCAiaGlkZGVuIiApICkKICAgICAgICAg
bmV3VHlwZSA9IEhJRERFTjsKLSAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggdCwgImltYWdlIiAp
ID09IDAgKQorICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIHQsICJpbWFnZSIgKSAp
CiAgICAgICAgIG5ld1R5cGUgPSBJTUFHRTsKLSAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggdCwg
ImJ1dHRvbiIgKSA9PSAwICkKKyAgICBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCB0LCAi
YnV0dG9uIiApICkKICAgICAgICAgbmV3VHlwZSA9IEJVVFRPTjsKLSAgICBlbHNlIGlmICggc3Ry
Y2FzZWNtcCggdCwgImtodG1sX2lzaW5kZXgiICkgPT0gMCApCisgICAgZWxzZSBpZiAoIGVxdWFs
c0lnbm9yaW5nQ2FzZSggdCwgImtodG1sX2lzaW5kZXgiICkgKQogICAgICAgICBuZXdUeXBlID0g
SVNJTkRFWDsKICNpZiBBUFBMRV9DSEFOR0VTCi0gICAgZWxzZSBpZiAoIHN0cmNhc2VjbXAoIHQs
ICJzZWFyY2giICkgPT0gMCApCisgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggdCwg
InNlYXJjaCIgKSApCiAgICAgICAgIG5ld1R5cGUgPSBTRUFSQ0g7Ci0gICAgZWxzZSBpZiAoIHN0
cmNhc2VjbXAoIHQsICJyYW5nZSIgKSA9PSAwICkKKyAgICBlbHNlIGlmICggZXF1YWxzSWdub3Jp
bmdDYXNlKCB0LCAicmFuZ2UiICkgKQogICAgICAgICBuZXdUeXBlID0gUkFOR0U7CiAjZW5kaWYK
ICAgICBlbHNlCkBAIC0xNzg3LDcgKzE3ODcsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnRJbXBs
OjptYXBUb0VudHJ5KGNvCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gYXV0b2NvbXBsZXRlQXR0cikgewotICAgICAgICBtX2F1dG9jb21wbGV0ZSA9IHN0cmNh
c2VjbXAoIGF0dHItPnZhbHVlKCksICJvZmYiICk7CisgICAgICAgIG1fYXV0b2NvbXBsZXRlID0g
IWVxdWFsc0lnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAib2ZmIik7CiAgICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gIHR5cGVBdHRyKSB7CiAgICAgICAgIHNldElucHV0VHlwZShhdHRy
LT52YWx1ZSgpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB2YWx1ZUF0dHIpIHsK
QEAgLTMyMjUsNyArMzIyNSw3IEBAIGJvb2wgSFRNTEtleWdlbkVsZW1lbnRJbXBsOjphcHBlbmRG
b3JtRGEKIHsKICNpZiBBUFBMRV9DSEFOR0VTCiAgICAgLy8gT25seSBSU0EgaXMgc3VwcG9ydGVk
IGF0IHRoaXMgdGltZS4KLSAgICBpZiAoIW1fa2V5VHlwZS5pc051bGwoKSAmJiBzdHJjYXNlY21w
KG1fa2V5VHlwZSwgInJzYSIpKSB7CisgICAgaWYgKCFtX2tleVR5cGUuaXNOdWxsKCkgJiYgIWVx
dWFsc0lnbm9yaW5nQ2FzZShtX2tleVR5cGUsICJyc2EiKSkgewogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIFFTdHJpbmcgdmFsdWUgPSBLU1NMS2V5R2VuOjpzaWduZWRQdWJsaWNL
ZXlBbmRDaGFsbGVuZ2VTdHJpbmcoc2VsZWN0ZWRJbmRleCgpLCBtX2NoYWxsZW5nZS5xc3RyaW5n
KCksIGdldERvY3VtZW50KCktPnBhcnQoKS0+YmFzZVVSTCgpKTsKQEAgLTM1NzEsMTMgKzM1NzEs
MTMgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6cGFyc2VNYXBwZQogICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IHdyYXBBdHRyKSB7CiAgICAgICAgIC8vIHZpcnR1YWwgLyBw
aHlzaWNhbCBpcyBOZXRzY2FwZSBleHRlbnNpb24gb2YgSFRNTCAzLjAsIG5vdyBkZXByZWNhdGVk
CiAgICAgICAgIC8vIHNvZnQvIGhhcmQgLyBvZmYgaXMgcmVjb21tZW5kYXRpb24gZm9yIEhUTUwg
NCBleHRlbnNpb24gYnkgSUUgYW5kIE5TIDQKLSAgICAgICAgaWYgKCBzdHJjYXNlY21wKCBhdHRy
LT52YWx1ZSgpLCAidmlydHVhbCIgKSA9PSAwICB8fCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgp
LCAic29mdCIpID09IDApCisgICAgICAgIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52
YWx1ZSgpLCAidmlydHVhbCIgKSAgfHwgZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgp
LCAic29mdCIpKQogICAgICAgICAgICAgbV93cmFwID0gdGFfVmlydHVhbDsKLSAgICAgICAgZWxz
ZSBpZiAoIHN0cmNhc2VjbXAgKCBhdHRyLT52YWx1ZSgpLCAicGh5c2ljYWwiICkgPT0gMCB8fCBz
dHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAiaGFyZCIpID09IDApCisgICAgICAgIGVsc2UgaWYg
KCBlcXVhbHNJZ25vcmluZ0Nhc2UgKCBhdHRyLT52YWx1ZSgpLCAicGh5c2ljYWwiICkgfHwgZXF1
YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAiaGFyZCIpKQogICAgICAgICAgICAgbV93
cmFwID0gdGFfUGh5c2ljYWw7Ci0gICAgICAgIGVsc2UgaWYoc3RyY2FzZWNtcCggYXR0ci0+dmFs
dWUoKSwgIm9uIiApID09IDApCisgICAgICAgIGVsc2UgaWYoZXF1YWxzSWdub3JpbmdDYXNlKCBh
dHRyLT52YWx1ZSgpLCAib24iICkpCiAgICAgICAgICAgICBtX3dyYXAgPSB0YV9QaHlzaWNhbDsK
LSAgICAgICAgZWxzZSBpZihzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAib2ZmIikgPT0gMCkK
KyAgICAgICAgZWxzZSBpZihlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJvZmYi
KSkKICAgICAgICAgICAgIG1fd3JhcCA9IHRhX05vV3JhcDsKICAgICAgICAgaWYgKHJlbmRlcmVy
KCkpCiAgICAgICAgICAgICByZW5kZXJlcigpLT5zZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2Fs
YygpOwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuNTAKZGlmZiAtcCAtdSAtcjEuNTAga2h0bWwvaHRtbC9odG1s
X2ltYWdlaW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCTMxIEF1ZyAy
MDA1IDA0OjM4OjM4IC0wMDAwCTEuNTAKKysrIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3Bw
CTUgU2VwIDIwMDUgMTg6MDQ6MzkgLTAwMDAKQEAgLTU5OCwxMyArNTk4LDEzIEBAIEhUTUxBcmVh
RWxlbWVudEltcGw6On5IVE1MQXJlYUVsZW1lbnRJbXAKIHZvaWQgSFRNTEFyZWFFbGVtZW50SW1w
bDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IHNoYXBlQXR0cikgewotICAgICAgICBpZiAoIHN0cmNhc2Vj
bXAoIGF0dHItPnZhbHVlKCksICJkZWZhdWx0IiApID09IDAgKQorICAgICAgICBpZiAoIGVxdWFs
c0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgImRlZmF1bHQiICkgKQogICAgICAgICAgICAg
bV9zaGFwZSA9IERlZmF1bHQ7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52
YWx1ZSgpLCAiY2lyY2xlIiApID09IDAgKQorICAgICAgICBlbHNlIGlmICggZXF1YWxzSWdub3Jp
bmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAiY2lyY2xlIiApICkKICAgICAgICAgICAgIG1fc2hhcGUg
PSBDaXJjbGU7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAi
cG9seSIgKSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0
ci0+dmFsdWUoKSwgInBvbHkiICkgKQogICAgICAgICAgICAgbV9zaGFwZSA9IFBvbHk7Ci0gICAg
ICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAicmVjdCIgKSA9PSAwICkK
KyAgICAgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgInJl
Y3QiICkgKQogICAgICAgICAgICAgbV9zaGFwZSA9IFJlY3Q7CiAgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gY29vcmRzQXR0cikgewogICAgICAgICBpZiAobV9jb29yZHMpIGRlbGV0ZSBb
XSBtX2Nvb3JkczsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW5saW5laW1w
bC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTAKZGlmZiAtcCAtdSAtcjEuNTAga2h0bWwv
aHRtbC9odG1sX2lubGluZWltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5j
cHAJMyBTZXAgMjAwNSAyMzowOTo1OSAtMDAwMAkxLjUwCisrKyBraHRtbC9odG1sL2h0bWxfaW5s
aW5laW1wbC5jcHAJNSBTZXAgMjAwNSAxODowNDozOSAtMDAwMApAQCAtNDA3LDcgKzQwNyw3IEBA
IHZvaWQgSFRNTEJSRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmkKICAgICAgICAgLy8gPGJy
IGNsZWFyPiBhbmQgPGJyIGNsZWFyPSIiPiBhcmUganVzdCB0cmVhdGVkIGxpa2UgPGJyPiBieSBH
ZWNrbywKICAgICAgICAgLy8gTWFjIElFLCBldGMuIC1kd2gKICAgICAgICAgaWYgKCFzdHIuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAoc3RyY2FzZWNtcChzdHIsImFsbCIpID09IDApIAor
ICAgICAgICAgICAgaWYgKGVxdWFsc0lnbm9yaW5nQ2FzZShzdHIsImFsbCIpKSAKICAgICAgICAg
ICAgICAgICBzdHIgPSAiYm90aCI7CiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBD
U1NfUFJPUF9DTEVBUiwgc3RyKTsKICAgICAgICAgfQpJbmRleDoga2h0bWwvaHRtbC9odG1sX2xp
c3RpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfbGlzdGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE0CmRpZmYgLXAg
LXUgLXIxLjE0IGtodG1sL2h0bWwvaHRtbF9saXN0aW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRt
bF9saXN0aW1wbC5jcHAJMjUgQXVnIDIwMDUgMjM6MTM6NDkgLTAwMDAJMS4xNAorKysga2h0bWwv
aHRtbC9odG1sX2xpc3RpbXBsLmNwcAk1IFNlcCAyMDA1IDE4OjA0OjM5IC0wMDAwCkBAIC0xMTAs
MTUgKzExMCwxNSBAQCBib29sIEhUTUxPTGlzdEVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KGNvCiB2
b2lkIEhUTUxPTGlzdEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGVJbXBsICphdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdHlwZUF0dHIpIHsK
LSAgICAgICAgaWYgKCBzdHJjbXAoIGF0dHItPnZhbHVlKCksICJhIiApID09IDAgKQorICAgICAg
ICBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiYSIpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShh
dHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19WQUxfTE9XRVJfQUxQSEEpOwotICAg
ICAgICBlbHNlIGlmICggc3RyY21wKCBhdHRyLT52YWx1ZSgpLCAiQSIgKSA9PSAwICkKKyAgICAg
ICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiQSIpCiAgICAgICAgICAgICBhZGRDU1NQcm9w
ZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19WQUxfVVBQRVJfQUxQSEEp
OwotICAgICAgICBlbHNlIGlmICggc3RyY21wKCBhdHRyLT52YWx1ZSgpLCAiaSIgKSA9PSAwICkK
KyAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiaSIpCiAgICAgICAgICAgICBhZGRD
U1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19WQUxfTE9XRVJf
Uk9NQU4pOwotICAgICAgICBlbHNlIGlmICggc3RyY21wKCBhdHRyLT52YWx1ZSgpLCAiSSIgKSA9
PSAwICkKKyAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiSSIpCiAgICAgICAgICAg
ICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19WQUxf
VVBQRVJfUk9NQU4pOwotICAgICAgICBlbHNlIGlmICggc3RyY21wKCBhdHRyLT52YWx1ZSgpLCAi
MSIgKSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiMSIpCiAgICAg
ICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENT
U19WQUxfREVDSU1BTCk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc3RhcnRBdHRy
KSB7CiAgICAgICAgIF9zdGFydCA9ICFhdHRyLT5pc051bGwoKSA/IGF0dHItPnZhbHVlKCkudG9J
bnQoKSA6IDE7CkBAIC0xNzcsMTUgKzE3NywxNSBAQCB2b2lkIEhUTUxMSUVsZW1lbnRJbXBsOjpw
YXJzZU1hcHBlZEF0dHJpCiAgICAgICAgICAgICBsaXN0LT5zZXRWYWx1ZShyZXF1ZXN0ZWRWYWx1
ZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB0eXBlQXR0cikg
ewotICAgICAgICBpZiAoIHN0cmNtcCggYXR0ci0+dmFsdWUoKSwgImEiICkgPT0gMCApCisgICAg
ICAgIGlmIChhdHRyLT52YWx1ZSgpID09ICJhIikKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5
KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9MT1dFUl9BTFBIQSk7Ci0g
ICAgICAgIGVsc2UgaWYgKCBzdHJjbXAoIGF0dHItPnZhbHVlKCksICJBIiApID09IDAgKQorICAg
ICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJBIikKICAgICAgICAgICAgIGFkZENTU1By
b3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9VUFBFUl9BTFBI
QSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjbXAoIGF0dHItPnZhbHVlKCksICJpIiApID09IDAg
KQorICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJpIikKICAgICAgICAgICAgIGFk
ZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9MT1dF
Ul9ST01BTik7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjbXAoIGF0dHItPnZhbHVlKCksICJJIiAp
ID09IDAgKQorICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJJIikKICAgICAgICAg
ICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZB
TF9VUFBFUl9ST01BTik7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjbXAoIGF0dHItPnZhbHVlKCks
ICIxIiApID09IDAgKQorICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICIxIikKICAg
ICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwg
Q1NTX1ZBTF9ERUNJTUFMKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVy
dHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBhdHRyLT52YWx1ZSgpKTsKSW5kZXg6
IGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjYyCmRpZmYgLXAgLXUgLXIxLjYyIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwu
Y3BwCi0tLSBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcAkzMSBBdWcgMjAwNSAxNTozNjox
MiAtMDAwMAkxLjYyCisrKyBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcAk1IFNlcCAyMDA1
IDE4OjA0OjM5IC0wMDAwCkBAIC00NzMsMzYgKzQ3MywzNiBAQCB2b2lkIEhUTUxUYWJsZUVsZW1l
bnRJbXBsOjpwYXJzZU1hcHBlZEF0CiAgICAgICAgICAgICBhZGRDU1NJbWFnZVByb3BlcnR5KGF0
dHIsIENTU19QUk9QX0JBQ0tHUk9VTkRfSU1BR0UsIGdldERvY3VtZW50KCktPmNvbXBsZXRlVVJM
KHVybCkpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGZyYW1lQXR0cikgewogI2lm
IDAKLSAgICAgICAgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAidm9pZCIgKSA9PSAw
ICkKKyAgICAgICAgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJ2b2lk
IiApICkKICAgICAgICAgICAgIGZyYW1lID0gVm9pZDsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNh
c2VjbXAoIGF0dHItPnZhbHVlKCksICJib3JkZXIiICkgPT0gMCApCisgICAgICAgIGVsc2UgaWYg
KCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJib3JkZXIiICkgKQogICAgICAg
ICAgICAgZnJhbWUgPSBCb3g7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52
YWx1ZSgpLCAiYm94IiApID09IDAgKQorICAgICAgICBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdD
YXNlKCBhdHRyLT52YWx1ZSgpLCAiYm94IiApICkKICAgICAgICAgICAgIGZyYW1lID0gQm94Owot
ICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgImhzaWRlcyIgKSA9
PSAwICkKKyAgICAgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUo
KSwgImhzaWRlcyIgKSApCiAgICAgICAgICAgICBmcmFtZSA9IEhzaWRlczsKLSAgICAgICAgZWxz
ZSBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJ2c2lkZXMiICkgPT0gMCApCisgICAg
ICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJ2c2lkZXMi
ICkgKQogICAgICAgICAgICAgZnJhbWUgPSBWc2lkZXM7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJj
YXNlY21wKCBhdHRyLT52YWx1ZSgpLCAiYWJvdmUiICkgPT0gMCApCisgICAgICAgIGVsc2UgaWYg
KCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJhYm92ZSIgKSApCiAgICAgICAg
ICAgICBmcmFtZSA9IEFib3ZlOwotICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggYXR0ci0+
dmFsdWUoKSwgImJlbG93IiApID09IDAgKQorICAgICAgICBlbHNlIGlmICggZXF1YWxzSWdub3Jp
bmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAiYmVsb3ciICkgKQogICAgICAgICAgICAgZnJhbWUgPSBC
ZWxvdzsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJsaHMi
ICkgPT0gMCApCisgICAgICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZh
bHVlKCksICJsaHMiICkgKQogICAgICAgICAgICAgZnJhbWUgPSBMaHM7Ci0gICAgICAgIGVsc2Ug
aWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAicmhzIiApID09IDAgKQorICAgICAgICBl
bHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAicmhzIiApICkKICAg
ICAgICAgICAgIGZyYW1lID0gUmhzOwogI2VuZGlmCiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gcnVsZXNBdHRyKSB7CiAjaWYgMAotICAgICAgICBpZiAoIHN0cmNhc2VjbXAoIGF0dHIt
PnZhbHVlKCksICJub25lIiApID09IDAgKQorICAgICAgICBpZiAoIGVxdWFsc0lnbm9yaW5nQ2Fz
ZSggYXR0ci0+dmFsdWUoKSwgIm5vbmUiICkgKQogICAgICAgICAgICAgcnVsZXMgPSBOb25lOwot
ICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgImdyb3VwcyIgKSA9
PSAwICkKKyAgICAgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUo
KSwgImdyb3VwcyIgKSApCiAgICAgICAgICAgICBydWxlcyA9IEdyb3VwczsKLSAgICAgICAgZWxz
ZSBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJyb3dzIiApID09IDAgKQorICAgICAg
ICBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAicm93cyIgKSAp
CiAgICAgICAgICAgICBydWxlcyA9IFJvd3M7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjYXNlY21w
KCBhdHRyLT52YWx1ZSgpLCAiY29scyIgKSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiAoIGVxdWFs
c0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgImNvbHMiICkgKQogICAgICAgICAgICAgcnVs
ZXMgPSBDb2xzOwotICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwg
ImFsbCIgKSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0
ci0+dmFsdWUoKSwgImFsbCIgKSApCiAgICAgICAgICAgICBydWxlcyA9IEFsbDsKICNlbmRpZgog
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGNlbGxzcGFjaW5nQXR0cikgewpAQCAtNzYw
LDEzICs3NjAsMTMgQEAgdm9pZCBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGw6OnBhcnNlTWFwcAog
ICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfVkVSVElDQUxfQUxJR04s
IGF0dHItPnZhbHVlKCkpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0
cikgewogICAgICAgICBET01TdHJpbmcgdiA9IGF0dHItPnZhbHVlKCk7Ci0gICAgICAgIGlmICgg
c3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgIm1pZGRsZSIgKSA9PSAwIHx8IHN0cmNhc2VjbXAo
IGF0dHItPnZhbHVlKCksICJjZW50ZXIiICkgPT0gMCApCisgICAgICAgIGlmICggZXF1YWxzSWdu
b3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAibWlkZGxlIiApIHx8IGVxdWFsc0lnbm9yaW5nQ2Fz
ZSggYXR0ci0+dmFsdWUoKSwgImNlbnRlciIgKSApCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0
eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19LSFRNTF9DRU5URVIpOwotICAg
ICAgICBlbHNlIGlmIChzdHJjYXNlY21wKGF0dHItPnZhbHVlKCksICJhYnNtaWRkbGUiKSA9PSAw
KQorICAgICAgICBlbHNlIGlmIChlcXVhbHNJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImFi
c21pZGRsZSIpKQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfVEVY
VF9BTElHTiwgQ1NTX1ZBTF9DRU5URVIpOwotICAgICAgICBlbHNlIGlmIChzdHJjYXNlY21wKGF0
dHItPnZhbHVlKCksICJsZWZ0IikgPT0gMCkKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxzSWdub3Jp
bmdDYXNlKGF0dHItPnZhbHVlKCksICJsZWZ0IikpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0
eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19LSFRNTF9MRUZUKTsKLSAgICAg
ICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhdHRyLT52YWx1ZSgpLCAicmlnaHQiKSA9PSAwKQorICAg
ICAgICBlbHNlIGlmIChlcXVhbHNJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInJpZ2h0Iikp
CiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBD
U1NfVkFMX19LSFRNTF9SSUdIVCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFkZENTU1By
b3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIHYpOwpJbmRleDoga2h0bWwvaHRtbC9o
dG1scGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9odG1sL2h0bWxwYXJzZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExMApkaWZmIC1w
IC11IC1yMS4xMTAga2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAotLS0ga2h0bWwvaHRtbC9odG1s
cGFyc2VyLmNwcAkxIFNlcCAyMDA1IDIzOjQwOjM1IC0wMDAwCTEuMTEwCisrKyBraHRtbC9odG1s
L2h0bWxwYXJzZXIuY3BwCTUgU2VwIDIwMDUgMTg6MDQ6NDEgLTAwMDAKQEAgLTM5OCw3ICszOTgs
NyBAQCBib29sIEhUTUxQYXJzZXI6OmhhbmRsZUVycm9yKE5vZGVJbXBsKiBuCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShp
bnB1dFRhZykpIHsKICAgICAgICAgICAgIERPTVN0cmluZyB0eXBlID0gaC0+Z2V0QXR0cmlidXRl
KHR5cGVBdHRyKTsKLSAgICAgICAgICAgIGlmIChzdHJjYXNlY21wKHR5cGUsICJoaWRkZW4iKSA9
PSAwICYmIGZvcm0pIHsKKyAgICAgICAgICAgIGlmIChlcXVhbHNJZ25vcmluZ0Nhc2UodHlwZSwg
ImhpZGRlbiIpICYmIGZvcm0pIHsKICAgICAgICAgICAgICAgICBmb3JtLT5hZGRDaGlsZChuKTsK
ICAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKICAgICAg
ICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7CkluZGV4OiBraHRtbC9odG1sL2h0bWx0b2tlbml6
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwv
aHRtbHRva2VuaXplci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTA5CmRpZmYgLXAgLXUg
LXIxLjEwOSBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCi0tLSBraHRtbC9odG1sL2h0bWx0
b2tlbml6ZXIuY3BwCTI3IEF1ZyAyMDA1IDAwOjEyOjMzIC0wMDAwCTEuMTA5CisrKyBraHRtbC9o
dG1sL2h0bWx0b2tlbml6ZXIuY3BwCTUgU2VwIDIwMDUgMTg6MDQ6NDIgLTAwMDAKQEAgLTE4MDMs
NyArMTgwMyw3IEBAIHZvaWQgSFRNTFRva2VuaXplcjo6ZmluaXNoKCkKICAgICAgICAgICAgIGZv
b2QgKz0gUVN0cmluZyhzY3JpcHRDb2RlLCBzY3JpcHRDb2RlU2l6ZSk7CiAgICAgICAgIH0KICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBwb3MgPSBRQ29uc3RTdHJpbmcoc2NyaXB0Q29kZSwg
c2NyaXB0Q29kZVNpemUpLnFzdHJpbmcoKS5maW5kKCc+Jyk7CisgICAgICAgICAgICBwb3MgPSBR
Q29uc3RTdHJpbmcoc2NyaXB0Q29kZSwgc2NyaXB0Q29kZVNpemUpLnN0cmluZygpLmZpbmQoJz4n
KTsKICAgICAgICAgICAgIGZvb2Quc2V0VW5pY29kZShzY3JpcHRDb2RlK3BvcysxLCBzY3JpcHRD
b2RlU2l6ZS1wb3MtMSk7IC8vIGRlZXAgY29weQogICAgICAgICB9CiAgICAgICAgIEtIVE1MX0RF
TEVURV9RQ0hBUl9WRUMoc2NyaXB0Q29kZSk7CkluZGV4OiBraHRtbC9taXNjL2RlY29kZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL21pc2MvZGVjb2Rl
ci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDIKZGlmZiAtcCAtdSAtcjEuNDIga2h0bWwv
bWlzYy9kZWNvZGVyLmNwcAotLS0ga2h0bWwvbWlzYy9kZWNvZGVyLmNwcAkxIFNlcCAyMDA1IDA1
OjM3OjE3IC0wMDAwCTEuNDIKKysrIGtodG1sL21pc2MvZGVjb2Rlci5jcHAJNSBTZXAgMjAwNSAx
ODowNDo0MyAtMDAwMApAQCAtNDMsNiArNDMsNyBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiB1
c2luZyBuYW1lc3BhY2UgRE9NOjpIVE1MTmFtZXM7CiAKIHVzaW5nIERPTTo6QXRvbWljU3RyaW5n
OwordXNpbmcgRE9NOjpsb3dlcmNhc2VkOwogdXNpbmcgRE9NOjpudWxsQXRvbTsKIAogY2xhc3Mg
S2FuamlDb2RlCkBAIC01MjcsMjQgKzUyOCwxMyBAQCBRU3RyaW5nIERlY29kZXI6OmRlY29kZShj
b25zdCBjaGFyICpkYXRhCiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAg
ICAgICBpZigqcHRyID09ICcvJykgcHRyKyssIGVuZD10cnVlOwotICAgICAgICAgICAgICAgICAg
ICBjaGFyIHRtcFsyMF07CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0YXJ0ID0g
cHRyOwogICAgICAgICAgICAgICAgICAgICBpbnQgbGVuID0gMDsKLSAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKAotICAgICAgICAgICAgICAgICAgICAgICAgKCgqcHRyID49ICdhJykgJiYgKCpw
dHIgPD0gJ3onKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICgqcHRyID49ICdBJykgJiYg
KCpwdHIgPD0gJ1onKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICgqcHRyID49ICcwJykg
JiYgKCpwdHIgPD0gJzknKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIGxlbiA8IDE5ICkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdG1wW2xlbl0g
PSB0b2xvd2VyKCAqcHRyICk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpc2FsbnVtKCpw
dHIpICYmIGxlbiA8IDE5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdHIrKzsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGxlbisrOwogICAgICAgICAgICAgICAgICAgICB9Ci0JCSAgICB0
bXBbbGVuXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIEF0b21pY1N0cmluZyB0YWcodG1wKTsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT0gdGl0
bGVUYWcpCi0gICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW5UaXRsZSA9ICFlbmQ7Ci0gICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBBdG9taWNTdHJpbmcgdGFnKHN0
YXJ0LCBsZW4sIGxvd2VyY2FzZWQpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWVuZCAmJiB0
YWcgPT0gbWV0YVRhZykgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQgYSBtZXRh
IHRhZy4uLgogICAgICAgICAgICAgICAgICAgICAgICAgLy9wdHIgKz0gNTsKQEAgLTU4OCw3ICs1
NzgsNyBAQCBRU3RyaW5nIERlY29kZXI6OmRlY29kZShjb25zdCBjaGFyICpkYXRhCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGFnICE9IGxpbmtUYWcgJiYgdGFnICE9IG1ldGFUYWcg
JiYgdGFnICE9IG9iamVjdFRhZyAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRh
ZyAhPSB0aXRsZVRhZyAmJiB0YWcgIT0gYmFzZVRhZyAmJiAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoZW5kIHx8IHRhZyAhPSBodG1sVGFnKSAmJiAhd2l0aGluVGl0bGUgJiYKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGFnICE9IGhlYWRUYWcpICYmIGlzYWxwaGEo
dG1wWzBdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0YWcgIT0gaGVhZFRh
ZykgJiYgaXNhbHBoYSgqc3RhcnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0g
dHJ1ZTsKICNpZmRlZiBERUNPREVfREVCVUcKICAgICAgICAgICAgICAgICAgICAgICAgIGtkRGVi
dWcoIDYwMDUgKSA8PCAiRGVjb2Rlcjogbm8gY2hhcnNldCBmb3VuZCAoYmFpbGluZyBiZWNhdXNl
IG9mIFwiIiA8PCB0YWcuYXNjaWkoKSA8PCAiXCIpLiIgPDwgZW5kbDsKSW5kZXg6IGtodG1sL3Jl
bmRlcmluZy9yZW5kZXJfZmxleGJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mbGV4Ym94LmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4yNQpkaWZmIC1wIC11IC1yMS4yNSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zs
ZXhib3guY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ZsZXhib3guY3BwCTI5IEp1bCAy
MDA1IDIzOjQyOjQ5IC0wMDAwCTEuMjUKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZmxleGJv
eC5jcHAJNSBTZXAgMjAwNSAxODowNDo0NCAtMDAwMApAQCAtNzUzLDkgKzc1Myw5IEBAIHZvaWQg
UmVuZGVyRmxleGlibGVCb3g6OmxheW91dFZlcnRpY2FsQm8KICAgICAgICAgICAgICAgICBpZiAo
IWxhc3RWaXNpYmxlTGluZSkgY29udGludWU7CiAKICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCBlbGxpcHNpc0FuZFNwYWNlWzJdID0geyAweDIwMjYsICcgJyB9OwotICAgICAg
ICAgICAgICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgZWxsaXBzaXNBbmRTcGFjZVN0cihlbGxpcHNp
c0FuZFNwYWNlLCAyKTsKKyAgICAgICAgICAgICAgICBzdGF0aWMgQXRvbWljU3RyaW5nIGVsbGlw
c2lzQW5kU3BhY2VTdHIocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhciAqPihlbGxpcHNpc0Fu
ZFNwYWNlKSwgMik7CiAgICAgICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKG51
bVZpc2libGVMaW5lcyA9PSAxKS0+aHRtbEZvbnQoKTsKLSAgICAgICAgICAgICAgICBpbnQgZWxs
aXBzaXNBbmRTcGFjZVdpZHRoID0gZm9udC53aWR0aChjb25zdF9jYXN0PFFDaGFyKj4oZWxsaXBz
aXNBbmRTcGFjZVN0ci51bmljb2RlKCkpLCAyLCAwLCAyLCAwLCAwKTsKKyAgICAgICAgICAgICAg
ICBpbnQgZWxsaXBzaXNBbmRTcGFjZVdpZHRoID0gZm9udC53aWR0aChjb25zdF9jYXN0PFFDaGFy
ICo+KGVsbGlwc2lzQW5kU3BhY2VTdHIudW5pY29kZSgpKSwgMiwgMCwgMiwgMCwgMCk7CiAKICAg
ICAgICAgICAgICAgICAvLyBHZXQgZWxsaXBzaXMgd2lkdGggKyAiICIgKyBhbmNob3Igd2lkdGgK
ICAgICAgICAgICAgICAgICBpbnQgdG90YWxXaWR0aCA9IGVsbGlwc2lzQW5kU3BhY2VXaWR0aCAr
IGFuY2hvckJveC0+d2lkdGgoKTsKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl9mb3JtLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMjEKZGlmZiAtcCAtdSAt
cjEuMTIxIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAKLS0tIGtodG1sL3JlbmRlcmlu
Zy9yZW5kZXJfZm9ybS5jcHAJMyBTZXAgMjAwNSAyMzoxMDowMCAtMDAwMAkxLjEyMQorKysga2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAk1IFNlcCAyMDA1IDE4OjA0OjQ1IC0wMDAwCkBA
IC0xNzE3LDggKzE3MTcsOCBAQCB2b2lkIFJlbmRlclNsaWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQo
KQogICAgIGRvdWJsZSB2YWwgPSB2YWx1ZS5pc051bGwoKSA/IChtYXhWYWwgKyBtaW5WYWwpLzIu
MCA6IHZhbHVlLnFzdHJpbmcoKS50b0RvdWJsZSgpOwogICAgIHZhbCA9IGtNYXgobWluVmFsLCBr
TWluKHZhbCwgbWF4VmFsKSk7IC8vIE1ha2Ugc3VyZSB2YWwgaXMgd2l0aGluIG1pbi9tYXguCiAg
ICAgCi0gICAgLy8gRm9yY2UgaW50ZWdlciB2YWx1ZSBpZiBub3QgZmxvYXQgKHN0cmNhc2VjbXAg
cmV0dXJucyBjb25mdXNpbmdseSBiYWNrd2FyZCBib29sZWFuKS4KLSAgICBpZiAoc3RyY2FzZWNt
cChwcmVjaXNpb24sICJmbG9hdCIpKQorICAgIC8vIEZvcmNlIGludGVnZXIgdmFsdWUgaWYgbm90
IGZsb2F0LgorICAgIGlmICghZXF1YWxzSWdub3JpbmdDYXNlKHByZWNpc2lvbiwgImZsb2F0Iikp
CiAgICAgICAgIHZhbCA9IChpbnQpKHZhbCArIDAuNSk7CiAKICAgICBlbGVtZW50KCktPnNldFZh
bHVlKFFTdHJpbmc6Om51bWJlcih2YWwpKTsKQEAgLTE3MzksOCArMTczOSw4IEBAIHZvaWQgUmVu
ZGVyU2xpZGVyOjpzbG90U2xpZGVyVmFsdWVDaGFuZ2UKICAgICBkb3VibGUgdmFsID0gc2xpZGVy
LT52YWx1ZSgpOwogICAgIGNvbnN0IERPTVN0cmluZyYgcHJlY2lzaW9uID0gZWxlbWVudCgpLT5n
ZXRBdHRyaWJ1dGUocHJlY2lzaW9uQXR0cik7CiAKLSAgICAvLyBGb3JjZSBpbnRlZ2VyIHZhbHVl
IGlmIG5vdCBmbG9hdCAoc3RyY2FzZWNtcCByZXR1cm5zIGNvbmZ1c2luZ2x5IGJhY2t3YXJkIGJv
b2xlYW4pLgotICAgIGlmIChzdHJjYXNlY21wKHByZWNpc2lvbiwgImZsb2F0IikpCisgICAgLy8g
Rm9yY2UgaW50ZWdlciB2YWx1ZSBpZiBub3QgZmxvYXQuCisgICAgaWYgKCFlcXVhbHNJZ25vcmlu
Z0Nhc2UocHJlY2lzaW9uLCAiZmxvYXQiKSkKICAgICAgICAgdmFsID0gKGludCkodmFsICsgMC41
KTsKIAogICAgIGVsZW1lbnQoKS0+c2V0VmFsdWUoUVN0cmluZzo6bnVtYmVyKHZhbCkpOwpJbmRl
eDoga2h0bWwveGJsL3hibF90b2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL3hibC94YmxfdG9rZW5pemVyLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4zCmRpZmYgLXAgLXUgLXIxLjMga2h0bWwveGJsL3hibF90b2tlbml6ZXIuY3BwCi0t
LSBraHRtbC94YmwveGJsX3Rva2VuaXplci5jcHAJMTggSnVsIDIwMDUgMjE6NDQ6MjggLTAwMDAJ
MS4zCisrKyBraHRtbC94YmwveGJsX3Rva2VuaXplci5jcHAJNSBTZXAgMjAwNSAxODowNDo0NiAt
MDAwMApAQCAtMzU1LDcgKzM1NSw3IEBAIHZvaWQgWEJMVG9rZW5IYW5kbGVyOjpjcmVhdGVGaWVs
ZChjb25zdCAKICAgICAgICAgaWYgKGF0dHJzLnFOYW1lKGkpID09ICJuYW1lIikKICAgICAgICAg
ICAgIG5hbWUgPSBhdHRycy52YWx1ZShpKTsKICAgICAgICAgZWxzZSBpZiAoYXR0cnMucU5hbWUo
aSkgPT0gInJlYWRvbmx5IikKLSAgICAgICAgICAgIHJlYWRvbmx5ID0gIShzdHJjYXNlY21wKGF0
dHJzLnZhbHVlKGkpLCAidHJ1ZSIpKTsKKyAgICAgICAgICAgIHJlYWRvbmx5ID0gZXF1YWxzSWdu
b3JpbmdDYXNlKGF0dHJzLnZhbHVlKGkpLCAidHJ1ZSIpOwogICAgIH0KICAgICAKICAgICBtX2Zp
ZWxkID0gbmV3IFhCTFByb3RvdHlwZUZpZWxkKG5hbWUsIHJlYWRvbmx5KTsKQEAgLTM3Miw3ICsz
NzIsNyBAQCB2b2lkIFhCTFRva2VuSGFuZGxlcjo6Y3JlYXRlUHJvcGVydHkoY29uCiAgICAgICAg
IGlmIChhdHRycy5xTmFtZShpKSA9PSAibmFtZSIpCiAgICAgICAgICAgICBuYW1lID0gYXR0cnMu
dmFsdWUoaSk7CiAgICAgICAgIGVsc2UgaWYgKGF0dHJzLnFOYW1lKGkpID09ICJyZWFkb25seSIp
Ci0gICAgICAgICAgICByZWFkb25seSA9ICEoc3RyY2FzZWNtcChhdHRycy52YWx1ZShpKSwgInRy
dWUiKSk7CisgICAgICAgICAgICByZWFkb25seSA9IGVxdWFsc0lnbm9yaW5nQ2FzZShhdHRycy52
YWx1ZShpKSwgInRydWUiKTsKICAgICAgICAgZWxzZSBpZiAoYXR0cnMucU5hbWUoaSkgPT0gIm9u
Z2V0IikKICAgICAgICAgICAgIG9uZ2V0ID0gYXR0cnMudmFsdWUoaSk7CiAgICAgICAgIGVsc2Ug
aWYgKGF0dHJzLnFOYW1lKGkpID09ICJvbnNldCIpCkluZGV4OiBraHRtbC94bWwvZG9tX2F0b21p
Y3N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
eG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYg
LXAgLXUgLXIxLjEyIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmNwcAotLS0ga2h0bWwveG1s
L2RvbV9hdG9taWNzdHJpbmcuY3BwCTI5IEF1ZyAyMDA1IDIxOjI5OjIyIC0wMDAwCTEuMTIKKysr
IGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmNwcAk1IFNlcCAyMDA1IDE4OjA0OjQ3IC0wMDAw
CkBAIC0yNiw5ICsyNiwxMCBAQAogLy8gcG9ydGFibGUsIGFuZCBpdCB3b3VsZCBiZSBnb29kIHRv
IGZpZ3VyZSBvdXQgYSAxMDAlIGNsZWFuIHdheSB0aGF0IHN0aWxsIGF2b2lkcyBjb2RlIHRoYXQK
IC8vIHJ1bnMgYXQgaW5pdCB0aW1lLgogCi0jZGVmaW5lIEtIVE1MX0FUT01JQ1NUUklOR19ISURF
X0dMT0JBTFMgMQorI2RlZmluZSBET01fQVRPTUlDU1RSSU5HX0hJREVfR0xPQkFMUyAxCiAKICNp
bmNsdWRlICJkb21fYXRvbWljc3RyaW5nLmgiCisKICNpbmNsdWRlICJ4bWwvZG9tX3N0cmluZ2lt
cGwuaCIKICNpbmNsdWRlICJtaXNjL2hhc2hzZXQuaCIKIApAQCAtNTMsMTYgKzU0LDYgQEAgaW5s
aW5lIGJvb2wgZXF1YWwoRE9NU3RyaW5nSW1wbCogY29uc3QmIAogICAgIHJldHVybiBzW2xlbmd0
aF0gPT0gMDsKIH0KIAotYm9vbCBBdG9taWNTdHJpbmc6OmVxdWFsKGNvbnN0IEF0b21pY1N0cmlu
ZyAmYSwgY29uc3QgY2hhciAqYikKLXsgCi0gICAgRE9NU3RyaW5nSW1wbCAqaW1wbCA9IGEubV9z
dHJpbmcuaW1wbCgpOwotICAgIGlmICgoIWltcGwgfHwgIWltcGwtPnMpICYmICFiKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoKCFpbXBsIHx8ICFpbXBsLT5zKSB8fCAhYikKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBET006OmVxdWFsKGltcGwsIGIpOyAKLX0KLQog
aW5saW5lIERPTVN0cmluZ0ltcGwgKmNvbnZlcnQoY29uc3QgY2hhciogY29uc3QmIGMsIHVuc2ln
bmVkIGhhc2gpCiB7CiAgICAgRE9NU3RyaW5nSW1wbCAqciA9IG5ldyBET01TdHJpbmdJbXBsKGMp
OwpAQCAtMTUyLDYgKzE0MywxMzEgQEAgRE9NU3RyaW5nSW1wbCAqQXRvbWljU3RyaW5nOjphZGQo
RE9NU3RyaQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0cnVjdCBDaGFyQnVmZmVyCit7Cisg
ICAgY29uc3QgY2hhciAqczsKKyAgICB1bnNpZ25lZCBsZW5ndGg7Cit9OworCitpbmxpbmUgdW5z
aWduZWQgbG93ZXJjYXNlZEhhc2goY29uc3QgQ2hhckJ1ZmZlciYgYnVmKQoreworICAgIHJldHVy
biBET01TdHJpbmdJbXBsOjpjb21wdXRlTG93ZXJjYXNlZEhhc2goYnVmLnMsIGJ1Zi5sZW5ndGgp
OworfQorCitpbmxpbmUgYm9vbCBsb3dlcmNhc2VkRXF1YWwoRE9NU3RyaW5nSW1wbCogY29uc3Qm
IHN0ciwgY29uc3QgQ2hhckJ1ZmZlciAmYnVmKQoreworICAgIHVpbnQgc3RyTGVuZ3RoID0gc3Ry
LT5sOworICAgIHVpbnQgYnVmTGVuZ3RoID0gYnVmLmxlbmd0aDsKKyAgICBpZiAoc3RyTGVuZ3Ro
ICE9IGJ1Zkxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgUUNoYXIg
KnN0ckNoYXJzID0gc3RyLT5zOworICAgIGNvbnN0IGNoYXIgKmJ1ZkNoYXJzID0gYnVmLnM7Cisg
ICAgCisgICAgZm9yICh1aW50IGkgPSAwOyBpICE9IHN0ckxlbmd0aDsgKytpKQorICAgICAgICBp
ZiAoKnN0ckNoYXJzKysgIT0gUUNoYXIoKmJ1ZkNoYXJzKyspLmxvd2VyKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIERPTVN0cmlu
Z0ltcGwgKmxvd2VyY2FzZWRDb252ZXJ0KGNvbnN0IENoYXJCdWZmZXImIGJ1ZiwgdW5zaWduZWQg
aGFzaCkKK3sKKyAgICBET01TdHJpbmdJbXBsICpyID0gbmV3IERPTVN0cmluZ0ltcGwoYnVmLnMs
IGJ1Zi5sZW5ndGgsIGxvd2VyY2FzZWQpOworICAgIHItPl9oYXNoID0gaGFzaDsKKyAgICByLT5f
aW5UYWJsZSA9IHRydWU7CisgICAgcmV0dXJuIHI7IAorfQorCitET01TdHJpbmdJbXBsICpBdG9t
aWNTdHJpbmc6OmFkZExvd2VyY2FzZWQoY29uc3QgY2hhciAqcywgaW50IGxlbmd0aCkKK3sKKyAg
ICBpZiAoIXMpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChsZW5ndGggPT0gMCkKKyAgICAg
ICAgcmV0dXJuIERPTVN0cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgY29uc3QgQ2hhckJ1ZmZlciBi
dWYgPSB7IHMsIGxlbmd0aCB9OyAKKyAgICByZXR1cm4gKnN0cmluZ1RhYmxlLmluc2VydDxDaGFy
QnVmZmVyLCBsb3dlcmNhc2VkSGFzaCwgbG93ZXJjYXNlZEVxdWFsLCBsb3dlcmNhc2VkQ29udmVy
dD4oYnVmKS5maXJzdDsKK30KKworaW5saW5lIHVuc2lnbmVkIGxvd2VyY2FzZWRIYXNoKGNvbnN0
IFFDaGFyQnVmZmVyJiBidWYpCit7CisgICAgcmV0dXJuIERPTVN0cmluZ0ltcGw6OmNvbXB1dGVM
b3dlcmNhc2VkSGFzaChidWYucywgYnVmLmxlbmd0aCk7Cit9CisKK2lubGluZSBib29sIGxvd2Vy
Y2FzZWRFcXVhbChET01TdHJpbmdJbXBsKiBjb25zdCYgc3RyLCBjb25zdCBRQ2hhckJ1ZmZlciAm
YnVmKQoreworICAgIHVpbnQgc3RyTGVuZ3RoID0gc3RyLT5sOworICAgIHVpbnQgYnVmTGVuZ3Ro
ID0gYnVmLmxlbmd0aDsKKyAgICBpZiAoc3RyTGVuZ3RoICE9IGJ1Zkxlbmd0aCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgUUNoYXIgKnN0ckNoYXJzID0gc3RyLT5zOworICAg
IGNvbnN0IFFDaGFyICpidWZDaGFycyA9IGJ1Zi5zOworICAgIAorICAgIGZvciAodWludCBpID0g
MDsgaSAhPSBzdHJMZW5ndGg7ICsraSkKKyAgICAgICAgaWYgKCpzdHJDaGFycysrICE9ICgqYnVm
Q2hhcnMrKykubG93ZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biB0cnVlOworfQorCitpbmxpbmUgRE9NU3RyaW5nSW1wbCAqbG93ZXJjYXNlZENvbnZlcnQoY29u
c3QgUUNoYXJCdWZmZXImIGJ1ZiwgdW5zaWduZWQgaGFzaCkKK3sKKyAgICBET01TdHJpbmdJbXBs
ICpyID0gbmV3IERPTVN0cmluZ0ltcGwoYnVmLnMsIGJ1Zi5sZW5ndGgsIGxvd2VyY2FzZWQpOwor
ICAgIHItPl9oYXNoID0gaGFzaDsKKyAgICByLT5faW5UYWJsZSA9IHRydWU7CisgICAgcmV0dXJu
IHI7IAorfQorCitET01TdHJpbmdJbXBsICpBdG9taWNTdHJpbmc6OmFkZExvd2VyY2FzZWQoY29u
c3QgUUNoYXIgKnMsIGludCBsZW5ndGgpCit7CisgICAgaWYgKCFzKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBpZiAobGVuZ3RoID09IDApCisgICAgICAgIHJldHVybiBET01TdHJpbmdJbXBsOjpl
bXB0eSgpOworICAgIGNvbnN0IFFDaGFyQnVmZmVyIGJ1ZiA9IHsgcywgbGVuZ3RoIH07IAorICAg
IHJldHVybiAqc3RyaW5nVGFibGUuaW5zZXJ0PFFDaGFyQnVmZmVyLCBsb3dlcmNhc2VkSGFzaCwg
bG93ZXJjYXNlZEVxdWFsLCBsb3dlcmNhc2VkQ29udmVydD4oYnVmKS5maXJzdDsKK30KKworaW5s
aW5lIHVuc2lnbmVkIGxvd2VyY2FzZWRIYXNoKERPTVN0cmluZ0ltcGwqIGNvbnN0JiBzdHIpCit7
CisgICAgcmV0dXJuIERPTVN0cmluZ0ltcGw6OmNvbXB1dGVMb3dlcmNhc2VkSGFzaChzdHItPnMs
IHN0ci0+bCk7Cit9CisKK2lubGluZSBib29sIGxvd2VyY2FzZWRFcXVhbChET01TdHJpbmdJbXBs
KiBjb25zdCYgc3RyLCBET01TdHJpbmdJbXBsKiBjb25zdCAmdWNzdHIpCit7CisgICAgdWludCBz
dHJMZW5ndGggPSBzdHItPmw7CisgICAgdWludCB1Y3N0ckxlbmd0aCA9IHVjc3RyLT5sOworICAg
IGlmIChzdHJMZW5ndGggIT0gdWNzdHJMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGNvbnN0IFFDaGFyICpzdHJDaGFycyA9IHN0ci0+czsKKyAgICBjb25zdCBRQ2hhciAqdWNz
dHJDaGFycyA9IHVjc3RyLT5zOworICAgIAorICAgIGZvciAodWludCBpID0gMDsgaSAhPSBzdHJM
ZW5ndGg7ICsraSkKKyAgICAgICAgaWYgKCpzdHJDaGFycysrICE9ICgqdWNzdHJDaGFycysrKS5s
b3dlcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2lubGluZSBET01TdHJpbmdJbXBsICpsb3dlcmNhc2VkQ29udmVydChET01TdHJpbmdJbXBs
KiBjb25zdCAmc3RyLCB1bnNpZ25lZCBoYXNoKQoreworICAgIERPTVN0cmluZ0ltcGwgKnIgPSBu
ZXcgRE9NU3RyaW5nSW1wbChzdHItPnMsIHN0ci0+bCwgbG93ZXJjYXNlZCk7CisgICAgci0+X2hh
c2ggPSBoYXNoOworICAgIHItPl9pblRhYmxlID0gdHJ1ZTsKKyAgICByZXR1cm4gcjsgCit9CisK
K0RPTVN0cmluZ0ltcGwgKkF0b21pY1N0cmluZzo6YWRkTG93ZXJjYXNlZChET01TdHJpbmdJbXBs
ICpyKQoreworICAgIGlmICghciB8fCByLT5faW5UYWJsZSkKKyAgICAgICAgcmV0dXJuIHI7Cisg
ICAgaWYgKHItPmwgPT0gMCkKKyAgICAgICAgcmV0dXJuIERPTVN0cmluZ0ltcGw6OmVtcHR5KCk7
CisgICAgcmV0dXJuICpzdHJpbmdUYWJsZS5pbnNlcnQ8RE9NU3RyaW5nSW1wbCAqLCBsb3dlcmNh
c2VkSGFzaCwgbG93ZXJjYXNlZEVxdWFsLCBsb3dlcmNhc2VkQ29udmVydD4ocikuZmlyc3Q7Cit9
CisKIHZvaWQgQXRvbWljU3RyaW5nOjpyZW1vdmUoRE9NU3RyaW5nSW1wbCAqcikKIHsKICAgICBz
dHJpbmdUYWJsZS5yZW1vdmUocik7CkBAIC0xODMsMjMgKzI5OSw0IEBAIHZvaWQgQXRvbWljU3Ry
aW5nOjppbml0KCkKICAgICB9CiB9CiAKLWJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJp
bmcgJmEsIGNvbnN0IERPTVN0cmluZyAmYikKLXsKLSAgICByZXR1cm4gYS5kb21TdHJpbmcoKSA9
PSBiOyAgICAKLX0KLSAgIAotYm9vbCBlcXVhbHNJZ25vcmVDYXNlKGNvbnN0IEF0b21pY1N0cmlu
ZyAmYXMsIGNvbnN0IERPTVN0cmluZyAmYnMpCi17Ci0gICAgLy8gcmV0dXJucyB0cnVlIHdoZW4g
ZXF1YWwsIGZhbHNlIG90aGVyd2lzZSAoaWdub3JpbmcgY2FzZSkKLSAgICByZXR1cm4gIXN0cmNh
c2VjbXAoYXMuZG9tU3RyaW5nKCksIGJzKTsKLX0KLQotYm9vbCBlcXVhbHNJZ25vcmVDYXNlKGNv
bnN0IEF0b21pY1N0cmluZyAmYXMsIGNvbnN0IEF0b21pY1N0cmluZyAmYnMpCi17Ci0gICAgLy8g
cmV0dXJucyB0cnVlIHdoZW4gZXF1YWwsIGZhbHNlIG90aGVyd2lzZSAoaWdub3JpbmcgY2FzZSkK
LSAgICBpZiAoYXMgPT0gYnMpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiAhc3Ry
Y2FzZWNtcChhcy5kb21TdHJpbmcoKSwgYnMuZG9tU3RyaW5nKCkpOwotfQotCiB9CkluZGV4OiBr
aHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuOQpkaWZmIC1wIC11IC1yMS45IGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgKLS0t
IGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgJMzEgQXVnIDIwMDUgMDQ6Mzg6NDEgLTAwMDAJ
MS45CisrKyBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5oCTUgU2VwIDIwMDUgMTg6MDQ6NDcg
LTAwMDAKQEAgLTE5LDggKzE5LDkgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgog
ICoKICAqLwotI2lmbmRlZiBfRE9NX0F0b21pY1N0cmluZ19oXwotI2RlZmluZSBfRE9NX0F0b21p
Y1N0cmluZ19oXworCisjaWZuZGVmIERPTV9BVE9NSUNTVFJJTkdfSAorI2RlZmluZSBET01fQVRP
TUlDU1RSSU5HX0gKIAogI2luY2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCiAKQEAgLTMzLDEwICsz
NCwxMyBAQCBwdWJsaWM6CiAgICAgQXRvbWljU3RyaW5nKCkgeyB9CiAgICAgQXRvbWljU3RyaW5n
KGNvbnN0IGNoYXIgKnMpIDogbV9zdHJpbmcoYWRkKHMpKSB7IH0KICAgICBBdG9taWNTdHJpbmco
Y29uc3QgUUNoYXIgKnMsIGludCBsZW5ndGgpIDogbV9zdHJpbmcoYWRkKHMsIGxlbmd0aCkpIHsg
fQotICAgIEF0b21pY1N0cmluZyhjb25zdCB1bnNpZ25lZCBzaG9ydCogcywgaW50IGxlbmd0aCkg
OiBtX3N0cmluZyhhZGQoKFFDaGFyKilzLCBsZW5ndGgpKSB7IH0KICAgICBBdG9taWNTdHJpbmco
Y29uc3QgUVN0cmluZyYgcykgOiBtX3N0cmluZyhhZGQocy51bmljb2RlKCksIHMubGVuZ3RoKCkp
KSB7IH0KICAgICBBdG9taWNTdHJpbmcoRE9NU3RyaW5nSW1wbCogaW1wKSA6IG1fc3RyaW5nKGFk
ZChpbXApKSB7IH0KICAgICBleHBsaWNpdCBBdG9taWNTdHJpbmcoY29uc3QgRE9NU3RyaW5nICZz
KSA6IG1fc3RyaW5nKGFkZChzLmltcGwoKSkpIHsgfQorICAgIEF0b21pY1N0cmluZyhjb25zdCBj
aGFyICpzLCBpbnQgbGVuZ3RoLCBMb3dlcmNhc2VkKSA6IG1fc3RyaW5nKGFkZExvd2VyY2FzZWQo
cywgbGVuZ3RoKSkgeyB9CisgICAgQXRvbWljU3RyaW5nKGNvbnN0IFFDaGFyICpzLCBpbnQgbGVu
Z3RoLCBMb3dlcmNhc2VkKSA6IG1fc3RyaW5nKGFkZExvd2VyY2FzZWQocywgbGVuZ3RoKSkgeyB9
CisgICAgQXRvbWljU3RyaW5nKERPTVN0cmluZ0ltcGwgKnMsIExvd2VyY2FzZWQpIDogbV9zdHJp
bmcoYWRkTG93ZXJjYXNlZChzKSkgeyB9CisgICAgQXRvbWljU3RyaW5nKGNvbnN0IERPTVN0cmlu
ZyAmcywgTG93ZXJjYXNlZCkgOiBtX3N0cmluZyhhZGRMb3dlcmNhc2VkKHMuaW1wbCgpKSkgeyB9
CiAgICAgCiAgICAgb3BlcmF0b3IgY29uc3QgRE9NU3RyaW5nJigpIGNvbnN0IHsgcmV0dXJuIG1f
c3RyaW5nOyB9CiAgICAgY29uc3QgRE9NU3RyaW5nJiBkb21TdHJpbmcoKSBjb25zdCB7IHJldHVy
biBtX3N0cmluZzsgfTsKQEAgLTQ3LDcgKzUxLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFFDaGFy
ICp1bmljb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcudW5pY29kZSgpOyB9CiAgICAgaW50
IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmxlbmd0aCgpOyB9CiAgICAgCi0gICAg
aW50IGZpbmQoY29uc3QgUUNoYXIgYywgaW50IHN0YXJ0ID0gMCkgY29uc3QgeyByZXR1cm4gbV9z
dHJpbmcuZmluZChjLCBzdGFydCk7IH0KKyAgICBpbnQgZmluZChRQ2hhciBjLCBpbnQgc3RhcnQg
PSAwKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5maW5kKGMsIHN0YXJ0KTsgfQogICAgIAogICAg
IGludCB0b0ludCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnRvSW50KCk7IH0KICAgICBib29s
IHBlcmNlbnRhZ2UoaW50ICZfcGVyY2VudGFnZSkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcucGVy
Y2VudGFnZShfcGVyY2VudGFnZSk7IH0KQEAgLTczLDU4ICs3Nyw0MiBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIERPTVN0cmluZyBtX3N0cmluZzsKICAgICAKLSAgICBzdGF0aWMgYm9vbCBlcXVh
bChET01TdHJpbmdJbXBsICosIGNvbnN0IGNoYXIgKik7Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwo
RE9NU3RyaW5nSW1wbCAqLCBjb25zdCBRQ2hhciAqLCB1aW50IGxlbmd0aCk7Ci0gICAgc3RhdGlj
IGJvb2wgZXF1YWwoRE9NU3RyaW5nSW1wbCAqLCBET01TdHJpbmdJbXBsICopOwotICAgIAotICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgQXRvbWljU3Ry
aW5nICZiKQotICAgIHsgcmV0dXJuIGEubV9zdHJpbmcuaW1wbCgpID09IGIubV9zdHJpbmcuaW1w
bCgpOyB9Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQXRvbWljU3RyaW5nICZhLCBjb25z
dCBjaGFyICpiKTsKLSAgICAKICAgICBzdGF0aWMgRE9NU3RyaW5nSW1wbCAqYWRkKGNvbnN0IGNo
YXIgKik7CiAgICAgc3RhdGljIERPTVN0cmluZ0ltcGwgKmFkZChjb25zdCBRQ2hhciAqLCBpbnQg
bGVuZ3RoKTsKICAgICBzdGF0aWMgRE9NU3RyaW5nSW1wbCAqYWRkKERPTVN0cmluZ0ltcGwgKik7
Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgaW5zZXJ0KERPTVN0cmluZ0ltcGwgKik7Ci0gICAgCi0g
ICAgc3RhdGljIHZvaWQgcmVoYXNoKGludCBuZXdUYWJsZVNpemUpOwotICAgIHN0YXRpYyB2b2lk
IGV4cGFuZCgpOwotICAgIHN0YXRpYyB2b2lkIHNocmluaygpOwotICAgIAotICAgIHN0YXRpYyBE
T01TdHJpbmdJbXBsICoqX3RhYmxlOwotICAgIHN0YXRpYyBpbnQgX3RhYmxlU2l6ZTsKLSAgICBz
dGF0aWMgaW50IF90YWJsZVNpemVNYXNrOwotICAgIHN0YXRpYyBpbnQgX2tleUNvdW50OwotfTsK
LQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0IEF0
b21pY1N0cmluZyAmYikKLXsgcmV0dXJuIEF0b21pY1N0cmluZzo6ZXF1YWwoYSwgYik7IH0KLQot
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0IEF0b21p
Y1N0cmluZyAmYikKLXsgcmV0dXJuICFBdG9taWNTdHJpbmc6OmVxdWFsKGEsIGIpOyB9CiAKLWlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW5nICZhLCBjb25zdCBjaGFyICpi
KQoteyByZXR1cm4gQXRvbWljU3RyaW5nOjplcXVhbChhLCBiKTsgfQotCi1pbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgY2hhciAqYikKLXsgcmV0dXJu
ICFBdG9taWNTdHJpbmc6OmVxdWFsKGEsIGIpOyB9Ci0KLS8vIExpc3Qgb2YgcHJvcGVydHkgbmFt
ZXMsIHBhc3NlZCB0byBhIG1hY3JvIHNvIHdlIGNhbiBkbyBzZXQgdGhlbSB1cCB2YXJpb3VzCi0v
LyB3YXlzIHdpdGhvdXQgcmVwZWF0aW5nIHRoZSBsaXN0LgorICAgIHN0YXRpYyBET01TdHJpbmdJ
bXBsICphZGRMb3dlcmNhc2VkKGNvbnN0IGNoYXIgKiwgaW50IGxlbmd0aCk7CisgICAgc3RhdGlj
IERPTVN0cmluZ0ltcGwgKmFkZExvd2VyY2FzZWQoY29uc3QgUUNoYXIgKiwgaW50IGxlbmd0aCk7
CisgICAgc3RhdGljIERPTVN0cmluZ0ltcGwgKmFkZExvd2VyY2FzZWQoRE9NU3RyaW5nSW1wbCAq
KTsKK307CiAKIC8vIERlZmluZSBleHRlcm5hbCBnbG9iYWwgdmFyaWFibGVzIGZvciB0aGUgY29t
bW9ubHkgdXNlZCBhdG9taWMgc3RyaW5ncy4KLSNpZiAhS0hUTUxfQVRPTUlDU1RSSU5HX0hJREVf
R0xPQkFMUwotICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgbnVsbEF0b207Ci0gICAgZXh0
ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBlbXB0eUF0b207Ci0gICAgZXh0ZXJuIGNvbnN0IEF0b21p
Y1N0cmluZyB0ZXh0QXRvbTsKLSAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIGNvbW1lbnRB
dG9tOwotICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgc3RhckF0b207CisjaWYgIURPTV9B
VE9NSUNTVFJJTkdfSElERV9HTE9CQUxTCitleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIG51bGxB
dG9tOworZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBlbXB0eUF0b207CitleHRlcm4gY29uc3Qg
QXRvbWljU3RyaW5nIHRleHRBdG9tOworZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBjb21tZW50
QXRvbTsKK2V4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgc3RhckF0b207CiAjZW5kaWYKLSAgICAg
ICAgCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW5nICZhLCBjb25zdCBET01TdHJp
bmcgJmIpOworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyAmYSwg
Y29uc3QgQXRvbWljU3RyaW5nICZiKSB7IHJldHVybiBhLmltcGwoKSA9PSBiLmltcGwoKTsgfQor
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0IERPTVN0
cmluZyAmYikgeyByZXR1cm4gYS5kb21TdHJpbmcoKSA9PSBiOyB9CitpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgY2hhciAqYikgeyByZXR1cm4gYS5k
b21TdHJpbmcoKSA9PSBiOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERPTVN0cmlu
ZyAmYSwgY29uc3QgQXRvbWljU3RyaW5nICZiKSB7IHJldHVybiBiID09IGE7IH0KK2lubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgY2hhciAqYSwgY29uc3QgQXRvbWljU3RyaW5nICZiKSB7IHJl
dHVybiBiID09IGE7IH0KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9taWNTdHJp
bmcgJmEsIGNvbnN0IEF0b21pY1N0cmluZyAmYikgeyByZXR1cm4gIShhID09IGIpOyB9CiBpbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgRE9NU3RyaW5n
ICZiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
RE9NU3RyaW5nICZhLCBjb25zdCBBdG9taWNTdHJpbmcgJmIpIHsgcmV0dXJuICEoYiA9PSBhKTsg
fQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0IGNo
YXIgKmIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBjaGFyICphLCBjb25zdCBBdG9taWNTdHJpbmcgJmIpIHsgcmV0dXJuICEoYiA9PSBhKTsgfQor
CitpbmxpbmUgYm9vbCBlcXVhbHNJZ25vcmluZ0Nhc2UoY29uc3QgQXRvbWljU3RyaW5nICZhLCBj
b25zdCBBdG9taWNTdHJpbmcgJmIpIHsgcmV0dXJuIGVxdWFsc0lnbm9yaW5nQ2FzZShhLmRvbVN0
cmluZygpLCBiLmRvbVN0cmluZygpKTsgfQoraW5saW5lIGJvb2wgZXF1YWxzSWdub3JpbmdDYXNl
KGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgRE9NU3RyaW5nICZiKSB7IHJldHVybiBlcXVh
bHNJZ25vcmluZ0Nhc2UoYS5kb21TdHJpbmcoKSwgYik7IH0KK2lubGluZSBib29sIGVxdWFsc0ln
bm9yaW5nQ2FzZShjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0IGNoYXIgKmIpIHsgcmV0dXJu
IGVxdWFsc0lnbm9yaW5nQ2FzZShhLmRvbVN0cmluZygpLCBiKTsgfQoraW5saW5lIGJvb2wgZXF1
YWxzSWdub3JpbmdDYXNlKGNvbnN0IERPTVN0cmluZyAmYSwgY29uc3QgQXRvbWljU3RyaW5nICZi
KSB7IHJldHVybiBiID09IGE7IH0KK2lubGluZSBib29sIGVxdWFsc0lnbm9yaW5nQ2FzZShjb25z
dCBjaGFyICphLCBjb25zdCBBdG9taWNTdHJpbmcgJmIpIHsgcmV0dXJuIGIgPT0gYTsgfQogCi1i
b29sIGVxdWFsc0lnbm9yZUNhc2UoY29uc3QgQXRvbWljU3RyaW5nICZhLCBjb25zdCBET01TdHJp
bmcgJmIpOwotYm9vbCBlcXVhbHNJZ25vcmVDYXNlKGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29u
c3QgQXRvbWljU3RyaW5nICZiKTsKIH0KKwogI2VuZGlmCkluZGV4OiBraHRtbC94bWwvZG9tX2F0
b21pY3N0cmluZ2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC94bWwvZG9tX2F0b21pY3N0cmluZ2xpc3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
CmRpZmYgLXAgLXUgLXIxLjIga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmdsaXN0LmgKLS0tIGto
dG1sL3htbC9kb21fYXRvbWljc3RyaW5nbGlzdC5oCTI1IEF1ZyAyMDA1IDE3OjQ3OjIwIC0wMDAw
CTEuMgorKysga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmdsaXN0LmgJNSBTZXAgMjAwNSAxODow
NDo0NyAtMDAwMApAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgQXRvbWljU3Ry
aW5nTGlzdCogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dDsgfQogICAgIHZvaWQgc2V0TmV4
dChBdG9taWNTdHJpbmdMaXN0KiBuKSB7IG1fbmV4dCA9IG47IH0KLSAgICBjb25zdCBBdG9taWNT
dHJpbmcmIHFzdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsgfQorICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmc7IH0KICAgICB2b2lk
IHNldFN0cmluZyhjb25zdCBBdG9taWNTdHJpbmcmIHN0cikgeyBtX3N0cmluZyA9IHN0cjsgfQog
CiAgICAgQXRvbWljU3RyaW5nTGlzdCogY2xvbmUoKSB7IHJldHVybiBuZXcgQXRvbWljU3RyaW5n
TGlzdChtX3N0cmluZywgbV9uZXh0ID8gbV9uZXh0LT5jbG9uZSgpIDogMCk7IH0KSW5kZXg6IGto
dG1sL3htbC9kb21fZG9jaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
NTEKZGlmZiAtcCAtdSAtcjEuMjUxIGtodG1sL3htbC9kb21fZG9jaW1wbC5jcHAKLS0tIGtodG1s
L3htbC9kb21fZG9jaW1wbC5jcHAJMiBTZXAgMjAwNSAwMDoxOToyOSAtMDAwMAkxLjI1MQorKysg
a2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAk1IFNlcCAyMDA1IDE4OjA0OjQ5IC0wMDAwCkBAIC0x
NzcxLDcgKzE3NzEsNyBAQCB2b2lkIERvY3VtZW50SW1wbDo6cHJvY2Vzc0h0dHBFcXVpdihjb25z
CiAKICAgICBLSFRNTFBhcnQgKnBhcnQgPSB0aGlzLT5wYXJ0KCk7CiAKLSAgICBpZiAoc3RyY2Fz
ZWNtcChlcXVpdiwgImRlZmF1bHQtc3R5bGUiKSA9PSAwKSB7CisgICAgaWYgKGVxdWFsc0lnbm9y
aW5nQ2FzZShlcXVpdiwgImRlZmF1bHQtc3R5bGUiKSkgewogICAgICAgICAvLyBUaGUgcHJlZmVy
cmVkIHN0eWxlIHNldCBoYXMgYmVlbiBvdmVycmlkZGVuIGFzIHBlciBzZWN0aW9uIAogICAgICAg
ICAvLyAxNC4zLjIgb2YgdGhlIEhUTUw0LjAgc3BlY2lmaWNhdGlvbi4gIFdlIG5lZWQgdG8gdXBk
YXRlIHRoZQogICAgICAgICAvLyBzaGVldCB1c2VkIHZhcmlhYmxlIGFuZCB0aGVuIHVwZGF0ZSBv
dXIgc3R5bGUgc2VsZWN0b3IuIApAQCAtMTc4Miw3ICsxNzgyLDcgQEAgdm9pZCBEb2N1bWVudElt
cGw6OnByb2Nlc3NIdHRwRXF1aXYoY29ucwogICAgICAgICBtX3ByZWZlcnJlZFN0eWxlc2hlZXRT
ZXQgPSBjb250ZW50OwogICAgICAgICB1cGRhdGVTdHlsZVNlbGVjdG9yKCk7CiAgICAgfQotICAg
IGVsc2UgaWYoc3RyY2FzZWNtcChlcXVpdiwgInJlZnJlc2giKSA9PSAwICYmIHBhcnQtPm1ldGFS
ZWZyZXNoRW5hYmxlZCgpKQorICAgIGVsc2UgaWYoZXF1YWxzSWdub3JpbmdDYXNlKGVxdWl2LCAi
cmVmcmVzaCIpICYmIHBhcnQtPm1ldGFSZWZyZXNoRW5hYmxlZCgpKQogICAgIHsKICAgICAgICAg
Ly8gZ2V0IGRlbGF5IGFuZCB1cmwKICAgICAgICAgUVN0cmluZyBzdHIgPSBjb250ZW50LnFzdHJp
bmcoKS5zdHJpcFdoaXRlU3BhY2UoKTsKQEAgLTE4MjIsMTQgKzE4MjIsMTQgQEAgdm9pZCBEb2N1
bWVudEltcGw6OnByb2Nlc3NIdHRwRXF1aXYoY29ucwogI2VuZGlmCiAgICAgICAgIH0KICAgICB9
Ci0gICAgZWxzZSBpZihzdHJjYXNlY21wKGVxdWl2LCAiZXhwaXJlcyIpID09IDApCisgICAgZWxz
ZSBpZihlcXVhbHNJZ25vcmluZ0Nhc2UoZXF1aXYsICJleHBpcmVzIikpCiAgICAgewogICAgICAg
ICBRU3RyaW5nIHN0ciA9IGNvbnRlbnQucXN0cmluZygpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAg
ICAgICB0aW1lX3QgZXhwaXJlX2RhdGUgPSBzdHIudG9Mb25nKCk7CiAgICAgICAgIGlmIChtX2Rv
Y0xvYWRlcikKICAgICAgICAgICAgIG1fZG9jTG9hZGVyLT5zZXRFeHBpcmVEYXRlKGV4cGlyZV9k
YXRlKTsKICAgICB9Ci0gICAgZWxzZSBpZihzdHJjYXNlY21wKGVxdWl2LCAicHJhZ21hIikgPT0g
MCB8fCBzdHJjYXNlY21wKGVxdWl2LCAiY2FjaGUtY29udHJvbCIpID09IDAgJiYgcGFydCkKKyAg
ICBlbHNlIGlmKGVxdWFsc0lnbm9yaW5nQ2FzZShlcXVpdiwgInByYWdtYSIpIHx8IGVxdWFsc0ln
bm9yaW5nQ2FzZShlcXVpdiwgImNhY2hlLWNvbnRyb2wiKSAmJiBwYXJ0KQogICAgIHsKICAgICAg
ICAgUVN0cmluZyBzdHIgPSBjb250ZW50LnFzdHJpbmcoKS5sb3dlcigpLnN0cmlwV2hpdGVTcGFj
ZSgpOwogICAgICAgICBLVVJMIHVybCA9IHBhcnQtPnVybCgpOwpAQCAtMTgzOCw3ICsxODM4LDcg
QEAgdm9pZCBEb2N1bWVudEltcGw6OnByb2Nlc3NIdHRwRXF1aXYoY29ucwogICAgICAgICAgICBL
SU86Omh0dHBfdXBkYXRlX2NhY2hlKHVybCwgdHJ1ZSwgMCk7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgZWxzZSBpZiggKHN0cmNhc2VjbXAoZXF1aXYsICJzZXQtY29va2llIikgPT0gMCkpCisgICAg
ZWxzZSBpZiggKGVxdWFsc0lnbm9yaW5nQ2FzZShlcXVpdiwgInNldC1jb29raWUiKSkpCiAgICAg
ewogICAgICAgICAvLyAjIyMgbWFrZSBzZXRDb29raWUgd29yayBvbiBYTUwgZG9jdW1lbnRzIHRv
bzsgZS5nLiBpbiBjYXNlIG9mIDxodG1sOm1ldGEgLi4uLi4+CiAgICAgICAgIEhUTUxEb2N1bWVu
dEltcGwgKmQgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnRJbXBsICo+KHRoaXMpOwpJbmRleDog
a2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNzkKZGlmZiAtcCAtdSAtcjEuNzkga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5j
cHAKLS0tIGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuY3BwCTQgU2VwIDIwMDUgMDk6NTU6MDcg
LTAwMDAJMS43OQorKysga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAJNSBTZXAgMjAwNSAx
ODowNDo1MSAtMDAwMApAQCAtMzU0LDE0ICszNTQsMTEgQEAgdm9pZCBFbGVtZW50SW1wbDo6c2Ny
b2xsSW50b1ZpZXcoYm9vbCBhbAogICAgICAgICB2LT5lbnN1cmVWaXNpYmxlKHgsIHksIHhlLXgs
IHllLXkpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIEVsZW1lbnRJbXBsOjpnZXRBdHRyaWJ1
dGVOUyhjb25zdCBET01TdHJpbmcgJm5hbWVzcGFjZVVSSSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERPTVN0cmluZyAmbG9jYWxOYW1lKSBj
b25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50SW1wbDo6Z2V0QXR0cmlidXRlTlMoY29u
c3QgRE9NU3RyaW5nICZuYW1lc3BhY2VVUkksIGNvbnN0IERPTVN0cmluZyAmbG9jYWxOYW1lKSBj
b25zdAogewotICAgIERPTVN0cmluZyBsbihsb2NhbE5hbWUpOwogICAgIGlmIChnZXREb2N1bWVu
dCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICBsbiA9IGxvY2FsTmFtZS5sb3dlcigpOwot
ICAgIFF1YWxpZmllZE5hbWUgbmFtZShudWxsQXRvbSwgbG4uaW1wbCgpLCBuYW1lc3BhY2VVUkku
aW1wbCgpKTsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG5hbWUpOworICAgICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIEF0b21pY1N0cmluZyhsb2NhbE5h
bWUuaW1wbCgpLCBsb3dlcmNhc2VkKSwgbmFtZXNwYWNlVVJJLmltcGwoKSkpOworICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLmltcGwoKSwg
bmFtZXNwYWNlVVJJLmltcGwoKSkpOwogfQogCiB2b2lkIEVsZW1lbnRJbXBsOjpzZXRBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRE9NU3RyaW5nSW1wbCogdmFsdWUsIGludCAm
ZXhjZXB0aW9uY29kZSApCkBAIC03NjUsMTkgKzc2MiwyMyBAQCB2b2lkIEVsZW1lbnRJbXBsOjpz
ZXRBdHRyaWJ1dGVOUyhjb25zdCBECiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAo
Z2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgbG9jYWxOYW1lID0gbG9j
YWxOYW1lLmxvd2VyKCk7Ci0gICAgICAgIAorICAgIGlmIChnZXREb2N1bWVudCgpLT5pc0hUTUxE
b2N1bWVudCgpKSB7CisgICAgICAgIHNldEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKHByZWZpeC5p
bXBsKCksCisgICAgICAgICAgICBBdG9taWNTdHJpbmcobG9jYWxOYW1lLmltcGwoKSwgbG93ZXJj
YXNlZCksCisgICAgICAgICAgICBuYW1lc3BhY2VVUkkuaW1wbCgpKSwgdmFsdWUuaW1wbCgpLCBl
eGNlcHRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIHNldEF0dHJpYnV0ZShRdWFs
aWZpZWROYW1lKHByZWZpeC5pbXBsKCksIGxvY2FsTmFtZS5pbXBsKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlVVJJLmltcGwoKSksIHZhbHVlLmltcGwoKSwgZXhj
ZXB0aW9uKTsKKyAgICAgICAgbmFtZXNwYWNlVVJJLmltcGwoKSksIHZhbHVlLmltcGwoKSwgZXhj
ZXB0aW9uKTsKIH0KIAogdm9pZCBFbGVtZW50SW1wbDo6cmVtb3ZlQXR0cmlidXRlTlMoY29uc3Qg
RE9NU3RyaW5nICZuYW1lc3BhY2VVUkksIGNvbnN0IERPTVN0cmluZyAmbG9jYWxOYW1lLCBpbnQg
JmV4Y2VwdGlvbikKIHsKLSAgICBET01TdHJpbmcgbG4obG9jYWxOYW1lKTsKLSAgICBpZiAoZ2V0
RG9jdW1lbnQoKSAmJiBnZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICBs
biA9IGxvY2FsTmFtZS5sb3dlcigpOwotICAgIHJlbW92ZUF0dHJpYnV0ZShRdWFsaWZpZWROYW1l
KG51bGxBdG9tLCBsbi5pbXBsKCksIG5hbWVzcGFjZVVSSS5pbXBsKCkpLCBleGNlcHRpb24pOwor
ICAgIGlmIChnZXREb2N1bWVudCgpICYmIGdldERvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkp
IHsKKyAgICAgICAgcmVtb3ZlQXR0cmlidXRlKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIEF0b21p
Y1N0cmluZyhsb2NhbE5hbWUuaW1wbCgpLCBsb3dlcmNhc2VkKSwgbmFtZXNwYWNlVVJJLmltcGwo
KSksIGV4Y2VwdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmVtb3ZlQXR0cmli
dXRlKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZS5pbXBsKCksIG5hbWVzcGFjZVVS
SS5pbXBsKCkpLCBleGNlcHRpb24pOwogfQogCiBBdHRySW1wbCAqRWxlbWVudEltcGw6OmdldEF0
dHJpYnV0ZU5vZGVOUyhjb25zdCBET01TdHJpbmcgJm5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3Ry
aW5nICZsb2NhbE5hbWUpCkBAIC03ODUsOSArNzg2LDggQEAgQXR0ckltcGwgKkVsZW1lbnRJbXBs
OjpnZXRBdHRyaWJ1dGVOb2RlTgogICAgIE5hbWVkQXR0ck1hcEltcGwgKmF0dHJzID0gYXR0cmli
dXRlcyh0cnVlKTsKICAgICBpZiAoIWF0dHJzKQogICAgICAgICByZXR1cm4gMDsKLSAgICBET01T
dHJpbmcgbG4obG9jYWxOYW1lKTsKICAgICBpZiAoZ2V0RG9jdW1lbnQoKSAmJiBnZXREb2N1bWVu
dCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICBsbiA9IGxvY2FsTmFtZS5sb3dlcigpOwor
ICAgICAgICByZXR1cm4gYXR0cnMtPmdldE5hbWVkSXRlbShRdWFsaWZpZWROYW1lKG51bGxBdG9t
LCBBdG9taWNTdHJpbmcobG9jYWxOYW1lLmltcGwoKSwgbG93ZXJjYXNlZCksIG5hbWVzcGFjZVVS
SS5pbXBsKCkpKTsKICAgICByZXR1cm4gYXR0cnMtPmdldE5hbWVkSXRlbShRdWFsaWZpZWROYW1l
KG51bGxBdG9tLCBsb2NhbE5hbWUuaW1wbCgpLCBuYW1lc3BhY2VVUkkuaW1wbCgpKSk7CiB9CiAK
QEAgLTc5NiwxMSArNzk2LDkgQEAgYm9vbCBFbGVtZW50SW1wbDo6aGFzQXR0cmlidXRlTlMoY29u
c3QgRAogICAgIE5hbWVkQXR0ck1hcEltcGwgKmF0dHJzID0gYXR0cmlidXRlcyh0cnVlKTsKICAg
ICBpZiAoIWF0dHJzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRE9NU3RyaW5nIGxuKGxv
Y2FsTmFtZSk7CiAgICAgaWYgKGdldERvY3VtZW50KCkgJiYgZ2V0RG9jdW1lbnQoKS0+aXNIVE1M
RG9jdW1lbnQoKSkKLSAgICAgICAgbG4gPSBsb2NhbE5hbWUubG93ZXIoKTsKLSAgICByZXR1cm4g
YXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1l
LmltcGwoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmFtZXNwYWNlVVJJLmltcGwoKSkpOworICAgICAgICByZXR1cm4gYXR0cnMtPmdldEF0dHJp
YnV0ZUl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgQXRvbWljU3RyaW5nKGxvY2FsTmFtZS5p
bXBsKCksIGxvd2VyY2FzZWQpLCBuYW1lc3BhY2VVUkkuaW1wbCgpKSk7CisgICAgcmV0dXJuIGF0
dHJzLT5nZXRBdHRyaWJ1dGVJdGVtKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZS5p
bXBsKCksIG5hbWVzcGFjZVVSSS5pbXBsKCkpKTsKIH0KIAogQ1NTU3R5bGVEZWNsYXJhdGlvbklt
cGwgKkVsZW1lbnRJbXBsOjpzdHlsZSgpCkBAIC04MTAsNDMgKzgwOCw2IEBAIENTU1N0eWxlRGVj
bGFyYXRpb25JbXBsICpFbGVtZW50SW1wbDo6c3QKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0v
KgotWE1MRWxlbWVudEltcGw6OlhNTEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIERPTVN0
cmluZ0ltcGwgKl9xdWFsaWZpZWROYW1lLCBET01TdHJpbmdJbXBsICpfbmFtZXNwYWNlVVJJKQot
ICAgIDogRWxlbWVudEltcGwoZG9jKQotewotICAgIGludCBjb2xvbnBvcyA9IC0xOwotICAgIGZv
ciAodWludCBpID0gMDsgaSA8IF9xdWFsaWZpZWROYW1lLT5sOyArK2kpCi0gICAgICAgIGlmIChf
cXVhbGlmaWVkTmFtZS0+c1tpXSA9PSAnOicpIHsKLSAgICAgICAgICAgIGNvbG9ucG9zID0gaTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICBpZiAoY29sb25wb3MgPj0gMCkg
ewotICAgICAgICAvLyB3ZSBoYXZlIGEgcHJlZml4Ci0gICAgICAgIERPTVN0cmluZ0ltcGwqIGxv
Y2FsTmFtZSA9IF9xdWFsaWZpZWROYW1lLT5jb3B5KCk7Ci0gICAgICAgIGxvY2FsTmFtZS0+cmVm
KCk7Ci0gICAgICAgIGxvY2FsTmFtZS0+cmVtb3ZlKDAsY29sb25wb3MrMSk7Ci0gICAgICAgIG1f
aWQgPSBkb2MtPmRvY3VtZW50KCktPnRhZ0lkKF9uYW1lc3BhY2VVUkksIGxvY2FsTmFtZSwgZmFs
c2UpOwotICAgICAgICBsb2NhbE5hbWUtPmRlcmVmKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBG
SVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBzaXR1YXRpb24gZm9yIHN0YWdlIG9uZSBvZiB0aGUg
UXVhbGlmaWVkTmFtZSBwYXRjaC4gIFRoaXMgaXMgYWxzbyBhIHJlYWxseSBzdHVwaWQgd2F5IHRv
Ci0gICAgICAgIC8vIGhhdmUgdG8gaGFuZGxlIHRoZSBwcmVmaXguICBXYXkgdG9vIG11Y2ggY29w
eWluZy4gIFdlIHNob3VsZCBtYWtlIHN1cmUgdGhlIFhNTCB0b2tlbml6ZXIgaGFzIGRvbmUgdGhl
IHNwbGl0Ci0gICAgICAgIC8vIGFscmVhZHkgaW50byBwcmVmaXggYW5kIGxvY2FsTmFtZS4KLSAg
ICAgICAgRE9NU3RyaW5nSW1wbCogcHJlZml4ID0gX3F1YWxpZmllZE5hbWUtPmNvcHkoKTsKLSAg
ICAgICAgcHJlZml4LT5yZWYoKTsKLSAgICAgICAgcHJlZml4LT50cnVuY2F0ZShjb2xvbnBvcyk7
Ci0gICAgICAgIG1fdGFnTmFtZSA9IFF1YWxpZmllZE5hbWUocHJlZml4LCBudWxsQXRvbSwgbnVs
bEF0b20pOwotICAgICAgICBwcmVmaXgtPmRlcmVmKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAg
ICAgLy8gbm8gcHJlZml4Ci0gICAgICAgIG1faWQgPSBkb2MtPmRvY3VtZW50KCktPnRhZ0lkKF9u
YW1lc3BhY2VVUkksIF9xdWFsaWZpZWROYW1lLCBmYWxzZSk7Ci19Ci0KLSovCi0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQogTmFtZWRBdHRyTWFwSW1wbDo6TmFtZWRBdHRyTWFwSW1wbChFbGVtZW50
SW1wbCAqZSkKICAgICA6IGVsZW1lbnQoZSkKICAgICAsIGF0dHJzKDApCkBAIC04NjYsMTggKzgy
NywxNiBAQCBib29sIE5hbWVkQXR0ck1hcEltcGw6OmlzTWFwcGVkQXR0cmlidXRlCiAKIE5vZGVJ
bXBsICpOYW1lZEF0dHJNYXBJbXBsOjpnZXROYW1lZEl0ZW1OUyhjb25zdCBET01TdHJpbmcgJm5h
bWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZsb2NhbE5hbWUpIGNvbnN0CiB7Ci0gICAgRE9N
U3RyaW5nIGxuKGxvY2FsTmFtZSk7CiAgICAgaWYgKGVsZW1lbnQtPmdldERvY3VtZW50KCktPmlz
SFRNTERvY3VtZW50KCkpCi0gICAgICAgIGxuID0gbG9jYWxOYW1lLmxvd2VyKCk7Ci0gICAgcmV0
dXJuIGdldE5hbWVkSXRlbShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsbi5pbXBsKCksIG5hbWVz
cGFjZVVSSS5pbXBsKCkpKTsKKyAgICAgICAgcmV0dXJuIGdldE5hbWVkSXRlbShRdWFsaWZpZWRO
YW1lKG51bGxBdG9tLCBBdG9taWNTdHJpbmcobG9jYWxOYW1lLmltcGwoKSwgbG93ZXJjYXNlZCks
IG5hbWVzcGFjZVVSSS5pbXBsKCkpKTsKKyAgICByZXR1cm4gZ2V0TmFtZWRJdGVtKFF1YWxpZmll
ZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZS5pbXBsKCksIG5hbWVzcGFjZVVSSS5pbXBsKCkpKTsK
IH0KIAogU2hhcmVkUHRyPE5vZGVJbXBsPiBOYW1lZEF0dHJNYXBJbXBsOjpyZW1vdmVOYW1lZEl0
ZW1OUyhjb25zdCBET01TdHJpbmcgJm5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZsb2Nh
bE5hbWUsIGludCAmZXhjZXB0aW9uKQogewotICAgIERPTVN0cmluZyBsbihsb2NhbE5hbWUpOwog
ICAgIGlmIChlbGVtZW50LT5nZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAg
ICBsbiA9IGxvY2FsTmFtZS5sb3dlcigpOwotICAgIHJldHVybiByZW1vdmVOYW1lZEl0ZW0oUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwgbG4uaW1wbCgpLCBuYW1lc3BhY2VVUkkuaW1wbCgpKSwgZXhj
ZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIHJlbW92ZU5hbWVkSXRlbShRdWFsaWZpZWROYW1lKG51
bGxBdG9tLCBBdG9taWNTdHJpbmcobG9jYWxOYW1lLmltcGwoKSwgbG93ZXJjYXNlZCksIG5hbWVz
cGFjZVVSSS5pbXBsKCkpLCBleGNlcHRpb24pOworICAgIHJldHVybiByZW1vdmVOYW1lZEl0ZW0o
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLmltcGwoKSwgbmFtZXNwYWNlVVJJLmlt
cGwoKSksIGV4Y2VwdGlvbik7CiB9CiAKIEF0dHJJbXBsICpOYW1lZEF0dHJNYXBJbXBsOjpnZXRO
YW1lZEl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKQEAgLTEyNjUsMTQgKzEy
MjQsMTQgQEAgdm9pZCBOYW1lZE1hcHBlZEF0dHJNYXBJbXBsOjpwYXJzZUNsYXNzQQogICAgIGlm
ICghZWxlbWVudC0+aGFzQ2xhc3MoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIERPTVN0
cmluZyBjbGFzc0F0dHIgPSBlbGVtZW50LT5nZXREb2N1bWVudCgpLT5pbkNvbXBhdE1vZGUoKSA/
IAotICAgICAgICAoY2xhc3NTdHIuaW1wbCgpLT5pc0xvd2VyKCkgPyBjbGFzc1N0ciA6IERPTVN0
cmluZyhjbGFzc1N0ci5pbXBsKCktPmxvd2VyKCkpKSA6Ci0gICAgICAgIGNsYXNzU3RyOworICAg
IGJvb2wgbmVlZHNMb3dlcmNhc2luZyA9IGVsZW1lbnQtPmdldERvY3VtZW50KCktPmluQ29tcGF0
TW9kZSgpOwogICAgIAotICAgIGlmIChjbGFzc0F0dHIuZmluZCgnICcpID09IC0xICYmIGNsYXNz
QXR0ci5maW5kKCdcbicpID09IC0xKQotICAgICAgICBtX2NsYXNzTGlzdC5zZXRTdHJpbmcoQXRv
bWljU3RyaW5nKGNsYXNzQXR0cikpOworICAgIGlmIChjbGFzc1N0ci5maW5kKCcgJykgPT0gLTEg
JiYgY2xhc3NTdHIuZmluZCgnXG4nKSA9PSAtMSkKKyAgICAgICAgbV9jbGFzc0xpc3Quc2V0U3Ry
aW5nKG5lZWRzTG93ZXJjYXNpbmcgPyBBdG9taWNTdHJpbmcoY2xhc3NTdHIsIGxvd2VyY2FzZWQp
IDogQXRvbWljU3RyaW5nKGNsYXNzU3RyKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFFTdHJpbmcg
dmFsID0gY2xhc3NBdHRyLnFzdHJpbmcoKTsKKyAgICAgICAgUVN0cmluZyB2YWwgPSBjbGFzc1N0
ci5xc3RyaW5nKCk7CisgICAgICAgIGlmIChuZWVkc0xvd2VyY2FzaW5nKQorICAgICAgICAgICAg
dmFsID0gdmFsLmxvd2VyKCk7CiAgICAgICAgIHZhbC5yZXBsYWNlKCdcbicsICcgJyk7CiAgICAg
ICAgIFFTdHJpbmdMaXN0IGxpc3QgPSBRU3RyaW5nTGlzdDo6c3BsaXQoJyAnLCB2YWwpOwogICAg
ICAgICAKQEAgLTEyODMsOCArMTI0Miw3IEBAIHZvaWQgTmFtZWRNYXBwZWRBdHRyTWFwSW1wbDo6
cGFyc2VDbGFzc0EKICAgICAgICAgICAgICAgICBpZiAoY3VycikgewogICAgICAgICAgICAgICAg
ICAgICBjdXJyLT5zZXROZXh0KG5ldyBBdG9taWNTdHJpbmdMaXN0KEF0b21pY1N0cmluZyhzaW5n
bGVDbGFzcykpKTsKICAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnItPm5leHQoKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgbV9jbGFzc0xpc3Quc2V0U3RyaW5nKEF0b21p
Y1N0cmluZyhzaW5nbGVDbGFzcykpOwogICAgICAgICAgICAgICAgICAgICBjdXJyID0gJm1fY2xh
c3NMaXN0OwogICAgICAgICAgICAgICAgIH0KQEAgLTEzOTQsNyArMTM1Miw3IEBAIHZvaWQgU3R5
bGVkRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmkKICAgICAgICAgICAgIGlmIChhdHRyLT5p
c051bGwoKSkKICAgICAgICAgICAgICAgICBuYW1lZEF0dHJNYXAtPnNldElEKG51bGxBdG9tKTsK
ICAgICAgICAgICAgIGVsc2UgaWYgKGdldERvY3VtZW50KCkgJiYgZ2V0RG9jdW1lbnQoKS0+aW5D
b21wYXRNb2RlKCkgJiYgIWF0dHItPnZhbHVlKCkuaW1wbCgpLT5pc0xvd2VyKCkpCi0gICAgICAg
ICAgICAgICAgbmFtZWRBdHRyTWFwLT5zZXRJRChBdG9taWNTdHJpbmcoYXR0ci0+dmFsdWUoKS5k
b21TdHJpbmcoKS5sb3dlcigpKSk7CisgICAgICAgICAgICAgICAgbmFtZWRBdHRyTWFwLT5zZXRJ
RChBdG9taWNTdHJpbmcoYXR0ci0+dmFsdWUoKSwgbG93ZXJjYXNlZCkpOwogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIG5hbWVkQXR0ck1hcC0+c2V0SUQoYXR0ci0+dmFsdWUoKSk7
CiAgICAgICAgIH0KSW5kZXg6IGtodG1sL3htbC9kb21fbm9kZWltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fbm9kZWltcGwuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjE4NApkaWZmIC1wIC11IC1yMS4xODQga2h0bWwveG1sL2Rv
bV9ub2RlaW1wbC5jcHAKLS0tIGtodG1sL3htbC9kb21fbm9kZWltcGwuY3BwCTQgU2VwIDIwMDUg
MDk6NTU6MDcgLTAwMDAJMS4xODQKKysrIGtodG1sL3htbC9kb21fbm9kZWltcGwuY3BwCTUgU2Vw
IDIwMDUgMTg6MDQ6NTMgLTAwMDAKQEAgLTE1OTYsMTAgKzE1OTYsOCBAQCBTaGFyZWRQdHI8Tm9k
ZUxpc3RJbXBsPiBOb2RlSW1wbDo6Z2V0RWxlCiAgICAgaWYgKG5hbWVzcGFjZVVSSS5pc051bGwo
KSB8fCBsb2NhbE5hbWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBTaGFyZWRQdHI8Tm9kZUxp
c3RJbXBsPigpOyAvLyBGSVhNRTogV2hvIGNhcmVzIGFib3V0IHRoaXMgYWRkaXRpb25hbCBjaGVj
az8KICAgICAKLSAgICBET01TdHJpbmcgbmFtZSA9IGxvY2FsTmFtZTsKLSAgICBpZiAoZ2V0RG9j
dW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgbmFtZSA9IGxvY2FsTmFtZS5sb3dl
cigpOwotICAgIHJldHVybiBTaGFyZWRQdHI8Tm9kZUxpc3RJbXBsPihuZXcgVGFnTm9kZUxpc3RJ
bXBsKHRoaXMsIEF0b21pY1N0cmluZyhuYW1lc3BhY2VVUkkpLCBBdG9taWNTdHJpbmcobmFtZSkp
KTsKKyAgICByZXR1cm4gU2hhcmVkUHRyPE5vZGVMaXN0SW1wbD4obmV3IFRhZ05vZGVMaXN0SW1w
bCh0aGlzLCBBdG9taWNTdHJpbmcobmFtZXNwYWNlVVJJKSwKKyAgICAgICAgZ2V0RG9jdW1lbnQo
KS0+aXNIVE1MRG9jdW1lbnQoKSA/IEF0b21pY1N0cmluZyhsb2NhbE5hbWUsIGxvd2VyY2FzZWQp
IDogQXRvbWljU3RyaW5nKGxvY2FsTmFtZSkpKTsKIH0KIAogYm9vbCBOb2RlSW1wbDo6aXNTdXBw
b3J0ZWQoY29uc3QgRE9NU3RyaW5nICZmZWF0dXJlLCBjb25zdCBET01TdHJpbmcgJnZlcnNpb24p
CkluZGV4OiBraHRtbC94bWwvZG9tX3N0cmluZ2ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fc3RyaW5naW1wbC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMzAKZGlmZiAtcCAtdSAtcjEuMzAga2h0bWwveG1sL2RvbV9zdHJpbmdp
bXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbV9zdHJpbmdpbXBsLmNwcAkyNSBBdWcgMjAwNSAxNzo0
NzoyMSAtMDAwMAkxLjMwCisrKyBraHRtbC94bWwvZG9tX3N0cmluZ2ltcGwuY3BwCTUgU2VwIDIw
MDUgMTg6MDQ6NTQgLTAwMDAKQEAgLTI2LDkgKzI2LDEyIEBACiAjaW5jbHVkZSAiZG9tX3N0cmlu
Z2ltcGwuaCIKIAogI2luY2x1ZGUgPGtkZWJ1Zy5oPgotCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAj
aW5jbHVkZSAiZG9tX2F0b21pY3N0cmluZy5oIgorI2luY2x1ZGUgIm1pc2Mva2h0bWxsYXlvdXQu
aCIKKworI2RlZmluZSBRVF9BTExPQ19RQ0hBUl9WRUMoIE4gKSBzdGF0aWNfY2FzdDxRQ2hhcio+
KG1haW5fdGhyZWFkX21hbGxvYyggc2l6ZW9mKFFDaGFyKSooIE4gKSApKQorI2RlZmluZSBRVF9E
RUxFVEVfUUNIQVJfVkVDKCBQICkgbWFpbl90aHJlYWRfZnJlZSAoKHZvaWQqKSggUCApKQogCiB1
c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKQEAgLTQzLDEyICs0NiwxMyBAQCBET01TdHJpbmdJbXBs
KiBET01TdHJpbmdJbXBsOjplbXB0eSgpCiAgICAgcmV0dXJuICZlOwogfQogCi1ET01TdHJpbmdJ
bXBsOjpET01TdHJpbmdJbXBsKGNvbnN0IFFDaGFyICpzdHIsIHVuc2lnbmVkIGludCBsZW4pIHsK
K0RPTVN0cmluZ0ltcGw6OkRPTVN0cmluZ0ltcGwoY29uc3QgUUNoYXIgKnN0ciwgdW5zaWduZWQg
bGVuKQorewogICAgIF9oYXNoID0gMDsKICAgICBfaW5UYWJsZSA9IGZhbHNlOwogICAgIGJvb2wg
aGF2ZXN0ciA9IHN0ciAmJiBsZW47Ci0gICAgcyA9IFFUX0FMTE9DX1FDSEFSX1ZFQyggaGF2ZXN0
ciA/IGxlbiA6IDEgKTsKLSAgICBpZihzdHIgJiYgbGVuKSB7CisgICAgcyA9IFFUX0FMTE9DX1FD
SEFSX1ZFQyhoYXZlc3RyID8gbGVuIDogMSk7CisgICAgaWYgKGhhdmVzdHIpIHsKICAgICAgICAg
bWVtY3B5KCBzLCBzdHIsIGxlbiAqIHNpemVvZihRQ2hhcikgKTsKICAgICAgICAgbCA9IGxlbjsK
ICAgICB9IGVsc2UgewpAQCAtNTgsNiArNjIsNDIgQEAgRE9NU3RyaW5nSW1wbDo6RE9NU3RyaW5n
SW1wbChjb25zdCBRQ2hhcgogICAgIH0KIH0KIAorRE9NU3RyaW5nSW1wbDo6RE9NU3RyaW5nSW1w
bChjb25zdCBRQ2hhciAqc3RyLCB1bnNpZ25lZCBsZW4sIExvd2VyY2FzZWQpCit7CisgICAgX2hh
c2ggPSAwOworICAgIF9pblRhYmxlID0gZmFsc2U7CisgICAgYm9vbCBoYXZlc3RyID0gc3RyICYm
IGxlbjsKKyAgICBRQ2hhciAqbmV3U3RyID0gUVRfQUxMT0NfUUNIQVJfVkVDKGhhdmVzdHIgPyBs
ZW4gOiAxKTsKKyAgICBzID0gbmV3U3RyOworICAgIGlmIChoYXZlc3RyKSB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkKKyAgICAgICAgICAgIG5ld1N0cltpXSA9
IHN0cltpXS5sb3dlcigpOworICAgICAgICBsID0gbGVuOworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIGNyYXNoIHByb3RlY3Rpb24KKyAgICAgICAgbmV3U3RyWzBdID0gMHgwOworICAgICAgICBs
ID0gMDsKKyAgICB9Cit9CisKK0RPTVN0cmluZ0ltcGw6OkRPTVN0cmluZ0ltcGwoY29uc3QgY2hh
ciAqc3RyLCB1bnNpZ25lZCBsZW4sIExvd2VyY2FzZWQpCit7CisgICAgX2hhc2ggPSAwOworICAg
IF9pblRhYmxlID0gZmFsc2U7CisgICAgYm9vbCBoYXZlc3RyID0gc3RyICYmIGxlbjsKKyAgICBR
Q2hhciAqbmV3U3RyID0gUVRfQUxMT0NfUUNIQVJfVkVDKGhhdmVzdHIgPyBsZW4gOiAxKTsKKyAg
ICBzID0gbmV3U3RyOworICAgIGlmIChoYXZlc3RyKSB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW47ICsraSkKKyAgICAgICAgICAgIG5ld1N0cltpXSA9IFFDaGFyKHN0cltp
XSkubG93ZXIoKTsKKyAgICAgICAgbCA9IGxlbjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBj
cmFzaCBwcm90ZWN0aW9uCisgICAgICAgIG5ld1N0clswXSA9IDB4MDsKKyAgICAgICAgbCA9IDA7
CisgICAgfQorfQorCiBET01TdHJpbmdJbXBsOjpET01TdHJpbmdJbXBsKGNvbnN0IGNoYXIgKnN0
cikKIHsKICAgICBfaGFzaCA9IDA7CkBAIC0yMzUsNyArMjc1LDcgQEAgc3RhdGljIExlbmd0aCBw
YXJzZUxlbmd0aChRQ2hhciAqcywgdW5zaQogICAgICAgICArK2k7CiAKICAgICBib29sIG9rOwot
ICAgIGludCByID0gUUNvbnN0U3RyaW5nKHMsIGkpLnFzdHJpbmcoKS50b0ludCgmb2spOworICAg
IGludCByID0gUUNvbnN0U3RyaW5nKHMsIGkpLnN0cmluZygpLnRvSW50KCZvayk7CiAKICAgICAv
KiBTa2lwIG92ZXIgYW55IHJlbWFpbmluZyBkaWdpdHMsIHdlIGFyZSBub3QgdGhhdCBhY2N1cmF0
ZSAoNS41JSA9PiA1JSkgKi8KICAgICB3aGlsZSAoaSA8IGwgJiYgKHNbaV0uaXNEaWdpdCgpIHx8
IHNbaV0gPT0gJy4nKSkKQEAgLTQyNCw3ICs0NjQsNyBAQCBpbnQgRE9NU3RyaW5nSW1wbDo6dG9J
bnQoYm9vbCAqb2spIGNvbnN0CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgcmV0dXJuIFFD
b25zdFN0cmluZyhzLCBpKS5xc3RyaW5nKCkudG9JbnQob2spOworICAgIHJldHVybiBRQ29uc3RT
dHJpbmcocywgaSkuc3RyaW5nKCkudG9JbnQob2spOwogfQogCiBET01TdHJpbmdJbXBsICpET01T
dHJpbmdJbXBsOjpyZXBsYWNlKFFDaGFyIG9sZEMsIFFDaGFyIG5ld0MpCkBAIC00NTksOSArNDk5
LDggQEAgY29uc3QgdW5zaWduZWQgUEhJID0gMHg5ZTM3NzliOVU7CiAKIC8vIFBhdWwgSHNpZWgn
cyBTdXBlckZhc3RIYXNoCiAvLyBodHRwOi8vd3d3LmF6aWxsaW9ubW9ua2V5cy5jb20vcWVkL2hh
c2guaHRtbAotdW5zaWduZWQgRE9NU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2goY29uc3QgUUNoYXIg
KnMsIGludCBsZW4pCit1bnNpZ25lZCBET01TdHJpbmdJbXBsOjpjb21wdXRlSGFzaChjb25zdCBR
Q2hhciAqcywgdW5zaWduZWQgbCkKIHsKLSAgICB1bnNpZ25lZCBsID0gbGVuOwogICAgIHVpbnQz
Ml90IGhhc2ggPSBQSEk7CiAgICAgdWludDMyX3QgdG1wOwogICAgIApAQCAtNTQ3LDYgKzU4Niw5
NCBAQCB1bnNpZ25lZCBET01TdHJpbmdJbXBsOjpjb21wdXRlSGFzaChjb25zCiAgICAgcmV0dXJu
IGhhc2g7CiB9CiAKKy8vIFBhdWwgSHNpZWgncyBTdXBlckZhc3RIYXNoCisvLyBodHRwOi8vd3d3
LmF6aWxsaW9ubW9ua2V5cy5jb20vcWVkL2hhc2guaHRtbAordW5zaWduZWQgRE9NU3RyaW5nSW1w
bDo6Y29tcHV0ZUxvd2VyY2FzZWRIYXNoKGNvbnN0IFFDaGFyICpzLCB1bnNpZ25lZCBsKQorewor
ICAgIHVpbnQzMl90IGhhc2ggPSBQSEk7CisgICAgdWludDMyX3QgdG1wOworICAgIAorICAgIGlu
dCByZW0gPSBsICYgMTsKKyAgICBsID4+PSAxOworICAgIAorICAgIC8vIE1haW4gbG9vcAorICAg
IGZvciAoOyBsID4gMDsgbC0tKSB7CisgICAgICAgIGhhc2ggKz0gc1swXS5sb3dlcigpLnVuaWNv
ZGUoKTsKKyAgICAgICAgdG1wID0gKHNbMV0ubG93ZXIoKS51bmljb2RlKCkgPDwgMTEpIF4gaGFz
aDsKKyAgICAgICAgaGFzaCA9IChoYXNoIDw8IDE2KSBeIHRtcDsKKyAgICAgICAgcyArPSAyOwor
ICAgICAgICBoYXNoICs9IGhhc2ggPj4gMTE7CisgICAgfQorICAgIAorICAgIC8vIEhhbmRsZSBl
bmQgY2FzZQorICAgIGlmIChyZW0pIHsKKyAgICAgICAgaGFzaCArPSBzWzBdLmxvd2VyKCkudW5p
Y29kZSgpOworICAgICAgICBoYXNoIF49IGhhc2ggPDwgMTE7CisgICAgICAgIGhhc2ggKz0gaGFz
aCA+PiAxNzsKKyAgICB9CisKKyAgICAvLyBGb3JjZSAiYXZhbGFuY2hpbmciIG9mIGZpbmFsIDEy
NyBiaXRzCisgICAgaGFzaCBePSBoYXNoIDw8IDM7CisgICAgaGFzaCArPSBoYXNoID4+IDU7Cisg
ICAgaGFzaCBePSBoYXNoIDw8IDI7CisgICAgaGFzaCArPSBoYXNoID4+IDE1OworICAgIGhhc2gg
Xj0gaGFzaCA8PCAxMDsKKworICAgIC8vIHRoaXMgYXZvaWRzIGV2ZXIgcmV0dXJuaW5nIGEgaGFz
aCBjb2RlIG9mIDAsIHNpbmNlIHRoYXQgaXMgdXNlZCB0bworICAgIC8vIHNpZ25hbCAiaGFzaCBu
b3QgY29tcHV0ZWQgeWV0IiwgdXNpbmcgYSB2YWx1ZSB0aGF0IGlzIGxpa2VseSB0byBiZQorICAg
IC8vIGVmZmVjdGl2ZWx5IHRoZSBzYW1lIGFzIDAgd2hlbiB0aGUgbG93IGJpdHMgYXJlIG1hc2tl
ZAorICAgIGlmIChoYXNoID09IDApCisgICAgICAgIGhhc2ggPSAweDgwMDAwMDAwOworICAgIAor
ICAgIHJldHVybiBoYXNoOworfQorCisvLyBQYXVsIEhzaWVoJ3MgU3VwZXJGYXN0SGFzaAorLy8g
aHR0cDovL3d3dy5hemlsbGlvbm1vbmtleXMuY29tL3FlZC9oYXNoLmh0bWwKK3Vuc2lnbmVkIERP
TVN0cmluZ0ltcGw6OmNvbXB1dGVMb3dlcmNhc2VkSGFzaChjb25zdCBjaGFyICpzLCB1bnNpZ25l
ZCBsKQoreworICAgIC8vIFRoaXMgaGFzaCBpcyBkZXNpZ25lZCB0byB3b3JrIG9uIDE2LWJpdCBj
aHVua3MgYXQgYSB0aW1lLiBCdXQgc2luY2UgdGhlIG5vcm1hbCBjYXNlCisgICAgLy8gKGFib3Zl
KSBpcyB0byBoYXNoIFVURi0xNiBjaGFyYWN0ZXJzLCB3ZSBqdXN0IHRyZWF0IHRoZSA4LWJpdCBj
aGFycyBhcyBpZiB0aGV5CisgICAgLy8gd2VyZSAxNi1iaXQgY2h1bmtzLCB3aGljaCBzaG91bGQg
Z2l2ZSBtYXRjaGluZyByZXN1bHRzCisKKyAgICB1aW50MzJfdCBoYXNoID0gUEhJOworICAgIHVp
bnQzMl90IHRtcDsKKyAgICAKKyAgICBpbnQgcmVtID0gbCAmIDE7CisgICAgbCA+Pj0gMTsKKyAg
ICAKKyAgICAvLyBNYWluIGxvb3AKKyAgICBmb3IgKDsgbCA+IDA7IGwtLSkgeworICAgICAgICBo
YXNoICs9IFFDaGFyKHNbMF0pLmxvd2VyKCkudW5pY29kZSgpOworICAgICAgICB0bXAgPSAoUUNo
YXIoc1sxXSkubG93ZXIoKS51bmljb2RlKCkgPDwgMTEpIF4gaGFzaDsKKyAgICAgICAgaGFzaCA9
IChoYXNoIDw8IDE2KSBeIHRtcDsKKyAgICAgICAgcyArPSAyOworICAgICAgICBoYXNoICs9IGhh
c2ggPj4gMTE7CisgICAgfQorICAgIAorICAgIC8vIEhhbmRsZSBlbmQgY2FzZQorICAgIGlmIChy
ZW0pIHsKKyAgICAgICAgaGFzaCArPSBRQ2hhcihzWzBdKS5sb3dlcigpLnVuaWNvZGUoKTsKKyAg
ICAgICAgaGFzaCBePSBoYXNoIDw8IDExOworICAgICAgICBoYXNoICs9IGhhc2ggPj4gMTc7Cisg
ICAgfQorCisgICAgLy8gRm9yY2UgImF2YWxhbmNoaW5nIiBvZiBmaW5hbCAxMjcgYml0cworICAg
IGhhc2ggXj0gaGFzaCA8PCAzOworICAgIGhhc2ggKz0gaGFzaCA+PiA1OworICAgIGhhc2ggXj0g
aGFzaCA8PCAyOworICAgIGhhc2ggKz0gaGFzaCA+PiAxNTsKKyAgICBoYXNoIF49IGhhc2ggPDwg
MTA7CisKKyAgICAvLyB0aGlzIGF2b2lkcyBldmVyIHJldHVybmluZyBhIGhhc2ggY29kZSBvZiAw
LCBzaW5jZSB0aGF0IGlzIHVzZWQgdG8KKyAgICAvLyBzaWduYWwgImhhc2ggbm90IGNvbXB1dGVk
IHlldCIsIHVzaW5nIGEgdmFsdWUgdGhhdCBpcyBsaWtlbHkgdG8gYmUKKyAgICAvLyBlZmZlY3Rp
dmVseSB0aGUgc2FtZSBhcyAwIHdoZW4gdGhlIGxvdyBiaXRzIGFyZSBtYXNrZWQKKyAgICBpZiAo
aGFzaCA9PSAwKQorICAgICAgICBoYXNoID0gMHg4MDAwMDAwMDsKKyAgICAKKyAgICByZXR1cm4g
aGFzaDsKK30KKwogY29uc3QgY2hhciAqRE9NU3RyaW5nSW1wbDo6YXNjaWkoKSBjb25zdAogewog
ICAgIGNoYXIgKmJ1ZmZlciA9IG5ldyBjaGFyW2wgKyAxXTsKSW5kZXg6IGtodG1sL3htbC9kb21f
c3RyaW5naW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L3htbC9kb21fc3RyaW5naW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE0CmRpZmYgLXAg
LXUgLXIxLjE0IGtodG1sL3htbC9kb21fc3RyaW5naW1wbC5oCi0tLSBraHRtbC94bWwvZG9tX3N0
cmluZ2ltcGwuaAkyMSBKdW4gMjAwNSAyMjoyNzo1NSAtMDAwMAkxLjE0CisrKyBraHRtbC94bWwv
ZG9tX3N0cmluZ2ltcGwuaAk1IFNlcCAyMDA1IDE4OjA0OjU0IC0wMDAwCkBAIC0xOSwyMCArMTks
MjMgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICoKICAqLwotI2lmbmRlZiBf
RE9NX0RPTVN0cmluZ0ltcGxfaF8KLSNkZWZpbmUgX0RPTV9ET01TdHJpbmdJbXBsX2hfCisKKyNp
Zm5kZWYgRE9NX0RPTVNUUklOR0lNUExfSAorI2RlZmluZSBET01fRE9NU1RSSU5HSU1QTF9ICiAK
ICNpbmNsdWRlIDxxc3RyaW5nLmg+CiAKLSNpbmNsdWRlICJtaXNjL2todG1sbGF5b3V0LmgiCiAj
aW5jbHVkZSAibWlzYy9zaGFyZWQuaCIKICNpbmNsdWRlICJtaXNjL21haW5fdGhyZWFkX21hbGxv
Yy5oIgogCi0jZGVmaW5lIFFUX0FMTE9DX1FDSEFSX1ZFQyggTiApIHN0YXRpY19jYXN0PFFDaGFy
Kj4obWFpbl90aHJlYWRfbWFsbG9jKCBzaXplb2YoUUNoYXIpKiggTiApICkpCi0jZGVmaW5lIFFU
X0RFTEVURV9RQ0hBUl9WRUMoIFAgKSBtYWluX3RocmVhZF9mcmVlICgodm9pZCopKCBQICkpCitu
YW1lc3BhY2Uga2h0bWwgeworICAgIHN0cnVjdCBMZW5ndGg7Cit9CiAKIG5hbWVzcGFjZSBET00g
ewogCitlbnVtIExvd2VyY2FzZWQgeyBsb3dlcmNhc2VkIH07CisKIGNsYXNzIERPTVN0cmluZ0lt
cGwgOiBwdWJsaWMga2h0bWw6OlNoYXJlZDxET01TdHJpbmdJbXBsPgogewogcHJpdmF0ZToKQEAg
LTQzLDE2ICs0NiwyMCBAQCBwcm90ZWN0ZWQ6CiAgICAgRE9NU3RyaW5nSW1wbCgpIHsgcyA9IDAs
IGwgPSAwOyBfaGFzaCA9IDA7IF9pblRhYmxlID0gZmFsc2U7IH0KIHB1YmxpYzoKICAgICBET01T
dHJpbmdJbXBsKGNvbnN0IFFDaGFyICpzdHIsIHVuc2lnbmVkIGludCBsZW4pOworICAgIERPTVN0
cmluZ0ltcGwoY29uc3QgUUNoYXIgKnN0ciwgdW5zaWduZWQgaW50IGxlbiwgTG93ZXJjYXNlZCk7
CiAgICAgRE9NU3RyaW5nSW1wbChjb25zdCBjaGFyICpzdHIpOwogICAgIERPTVN0cmluZ0ltcGwo
Y29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgbGVuKTsKKyAgICBET01TdHJpbmdJbXBsKGNv
bnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IGxlbiwgTG93ZXJjYXNlZCk7CiAgICAgRE9NU3Ry
aW5nSW1wbChjb25zdCBRQ2hhciAmY2gpOwogICAgIH5ET01TdHJpbmdJbXBsKCk7CiAgICAgCiAg
ICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwogCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsg
aWYgKF9oYXNoID09IDApIF9oYXNoID0gY29tcHV0ZUhhc2gocywgbCk7IHJldHVybiBfaGFzaDsg
fQotICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBRQ2hhciAqLCBpbnQgbGVu
Z3RoKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3QgUUNoYXIgKiwgdW5z
aWduZWQgbGVuZ3RoKTsKICAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3QgY2hh
ciAqKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUxvd2VyY2FzZWRIYXNoKGNvbnN0IFFD
aGFyICosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVMb3dl
cmNhc2VkSGFzaChjb25zdCBjaGFyICosIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgCiAgICAgdm9p
ZCBhcHBlbmQoRE9NU3RyaW5nSW1wbCAqc3RyKTsKICAgICB2b2lkIGluc2VydChET01TdHJpbmdJ
bXBsICpzdHIsIHVuc2lnbmVkIGludCBwb3MpOwpAQCAtOTcsNSArMTA0LDYgQEAgcHVibGljOgog
ICAgIGJvb2wgX2luVGFibGU7CiB9OwogCi19OworfQorCiAjZW5kaWYKSW5kZXg6IGtodG1sL3ht
bC9kb21fdGV4dGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL3htbC9kb21fdGV4dGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMwCmRp
ZmYgLXAgLXUgLXIxLjMwIGtodG1sL3htbC9kb21fdGV4dGltcGwuY3BwCi0tLSBraHRtbC94bWwv
ZG9tX3RleHRpbXBsLmNwcAkzMSBBdWcgMjAwNSAwNDozODo0MiAtMDAwMAkxLjMwCisrKyBraHRt
bC94bWwvZG9tX3RleHRpbXBsLmNwcAk1IFNlcCAyMDA1IDE4OjA0OjU0IC0wMDAwCkBAIC00NSwx
MyArNDUsMTggQEAgQ2hhcmFjdGVyRGF0YUltcGw6OkNoYXJhY3RlckRhdGFJbXBsKERvYwogQ2hh
cmFjdGVyRGF0YUltcGw6OkNoYXJhY3RlckRhdGFJbXBsKERvY3VtZW50UHRyICpkb2MsIGNvbnN0
IERPTVN0cmluZyAmX3RleHQpCiAgICAgOiBOb2RlSW1wbChkb2MpCiB7Ci0gICAgc3RyID0gX3Rl
eHQuaW1wbCgpID8gX3RleHQuaW1wbCgpIDogbmV3IERPTVN0cmluZ0ltcGwoKFFDaGFyKikwLCAw
KTsKLSAgICBzdHItPnJlZigpOworICAgIERPTVN0cmluZ0ltcGwgKmltcGwgPSBfdGV4dC5pbXBs
KCk7CisgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIG5lY2Vzc2FyeT8gV2h5IGNhbid0IHdlIGp1
c3QgaGF2ZSBhIE5VTEwgc3RyPworICAgIGlmICghaW1wbCkKKyAgICAgICAgaW1wbCA9IG5ldyBE
T01TdHJpbmdJbXBsKChRQ2hhciopMCwgMCk7CisgICAgaW1wbC0+cmVmKCk7CisgICAgc3RyID0g
aW1wbDsKIH0KIAogQ2hhcmFjdGVyRGF0YUltcGw6On5DaGFyYWN0ZXJEYXRhSW1wbCgpCiB7Ci0g
ICAgaWYoc3RyKSBzdHItPmRlcmVmKCk7CisgICAgaWYgKERPTVN0cmluZ0ltcGwgKmltcGwgPSBz
dHIpCisgICAgICAgIGltcGwtPmRlcmVmKCk7CiB9CiAKIERPTVN0cmluZyBDaGFyYWN0ZXJEYXRh
SW1wbDo6ZGF0YSgpIGNvbnN0CkluZGV4OiBrd3EvRE9NSW50ZXJuYWwubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0RPTUludGVybmFsLm1tLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjgKZGlmZiAtcCAtdSAtcjEuOCBrd3EvRE9NSW50ZXJuYWwubW0KLS0tIGt3
cS9ET01JbnRlcm5hbC5tbQkyOSBBdWcgMjAwNSAyMToyOToyOCAtMDAwMAkxLjgKKysrIGt3cS9E
T01JbnRlcm5hbC5tbQk1IFNlcCAyMDA1IDE4OjA1OjAxIC0wMDAwCkBAIC0xMjgsNiArMTI4LDcg
QEAgRE9NU3RyaW5nOjpET01TdHJpbmcoTlNTdHJpbmcgKnN0cikKICAgICBBU1NFUlQoc3RyKTsK
IAogICAgIENGSW5kZXggc2l6ZSA9IENGU3RyaW5nR2V0TGVuZ3RoKHJlaW50ZXJwcmV0X2Nhc3Q8
Q0ZTdHJpbmdSZWY+KHN0cikpOworICAgIERPTVN0cmluZ0ltcGwgKmltcGw7CiAgICAgaWYgKHNp
emUgPT0gMCkKICAgICAgICAgbV9pbXBsID0gRE9NU3RyaW5nSW1wbDo6ZW1wdHkoKTsKICAgICBl
bHNlIHsKQEAgLTE0NCw3ICsxNDUsOCBAQCBET01TdHJpbmc6OkRPTVN0cmluZyhOU1N0cmluZyAq
c3RyKQogICAgICAgICAgICAgZnJlZShidWZmZXIpOwogICAgICAgICB9CiAgICAgfQotICAgIG1f
aW1wbC0+cmVmKCk7CisgICAgaW1wbC0+cmVmKCk7CisgICAgbV9pbXBsID0gaW1wbDsKIH0KIAog
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSW5kZXg6IGt3cS9LV1FQYWludGVy
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FQYWludGVy
Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzNgpkaWZmIC1wIC11IC1yMS4xMzYga3dxL0tX
UVBhaW50ZXIubW0KLS0tIGt3cS9LV1FQYWludGVyLm1tCTUgU2VwIDIwMDUgMDQ6MDE6MjQgLTAw
MDAJMS4xMzYKKysrIGt3cS9LV1FQYWludGVyLm1tCTUgU2VwIDIwMDUgMTg6MDU6MDUgLTAwMDAK
QEAgLTQ3NiwxNCArNDc2LDE0IEBAIHZvaWQgUVBhaW50ZXI6OnNldENvbXBvc2l0ZU9wZXJhdGlv
biAoQ0cKICAgICBbW1dlYkNvcmVJbWFnZVJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XSBz
ZXRDR0NvbXBvc2l0ZU9wZXJhdGlvbjpvcCBpbkNvbnRleHQ6Y29udGV4dF07CiB9CiAKLWludCBR
UGFpbnRlcjo6Y29tcG9zaXRlT3BlcmF0b3JGcm9tU3RyaW5nIChjb25zdCBRU3RyaW5nICZhU3Ry
aW5nKQoraW50IFFQYWludGVyOjpjb21wb3NpdGVPcGVyYXRvckZyb21TdHJpbmcoY29uc3QgUVN0
cmluZyAmYVN0cmluZykKIHsKICAgICBOU0NvbXBvc2l0aW5nT3BlcmF0aW9uIG9wID0gTlNDb21w
b3NpdGVTb3VyY2VPdmVyOwogICAgIAogICAgIGlmIChhU3RyaW5nLmxlbmd0aCgpKSB7CiAgICAg
ICAgIGNvbnN0IGNoYXIgKm9wZXJhdG9yU3RyaW5nID0gYVN0cmluZy5hc2NpaSgpOwogICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9DT01QT1NJVEVfT1BFUkFUT1JTOyBpKyspIHsKLSAg
ICAgICAgICAgIGlmIChzdHJjYXNlY21wIChvcGVyYXRvclN0cmluZywgY29tcG9zaXRlT3BlcmF0
b3JzW2ldLm5hbWUpID09IDApIHsKKyAgICAgICAgICAgIGlmIChzdHJjYXNlY21wKG9wZXJhdG9y
U3RyaW5nLCBjb21wb3NpdGVPcGVyYXRvcnNbaV0ubmFtZSkgPT0gMCkgewogICAgICAgICAgICAg
ICAgIHJldHVybiBjb21wb3NpdGVPcGVyYXRvcnNbaV0udmFsdWU7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KSW5kZXg6IGt3cS9LV1FTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9rd3EvS1dRU3RyaW5nLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTE1
CmRpZmYgLXAgLXUgLXIxLjExNSBrd3EvS1dRU3RyaW5nLmgKLS0tIGt3cS9LV1FTdHJpbmcuaAky
NSBBdWcgMjAwNSAxNzo0NzoyNiAtMDAwMAkxLjExNQorKysga3dxL0tXUVN0cmluZy5oCTUgU2Vw
IDIwMDUgMTg6MDU6MDYgLTAwMDAKQEAgLTc1Miw3ICs3NTIsNyBAQCBjbGFzcyBRQ29uc3RTdHJp
bmcgOiBwcml2YXRlIFFTdHJpbmcgewogcHVibGljOgogICAgIFFDb25zdFN0cmluZyhjb25zdCBR
Q2hhciAqLCB1aW50KTsKICAgICB+UUNvbnN0U3RyaW5nKCk7Ci0gICAgY29uc3QgUVN0cmluZyAm
cXN0cmluZygpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgY29uc3QgUVN0cmluZyAmc3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KIH07CiAKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3771</attachid>
            <date>2005-09-05 11:18:05 -0700</date>
            <delta_ts>2005-12-29 17:24:29 -0800</delta_ts>
            <desc>uploading it again (fixed a mistake: sorry for the multiple copies)</desc>
            <filename>StringPatch2.txt</filename>
            <type>text/plain</type>
            <size>98560</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2todG1sX3BhcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2todG1sX3BhcnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMz
OQpkaWZmIC1wIC11IC1yMS4zMzkga2h0bWwva2h0bWxfcGFydC5jcHAKLS0tIGtodG1sL2todG1s
X3BhcnQuY3BwCTEgU2VwIDIwMDUgMTg6MDM6MzEgLTAwMDAJMS4zMzkKKysrIGtodG1sL2todG1s
X3BhcnQuY3BwCTUgU2VwIDIwMDUgMTg6MDk6MDMgLTAwMDAKQEAgLTU2NDgsNyArNTY0OCw3IEBA
IHN0YXRpYyB2b2lkIHVwZGF0ZVN0YXRlKENTU011dGFibGVTdHlsZUQKICAgICAgICAgaW50IHBy
b3BlcnR5SUQgPSAoKml0KS5pZCgpOwogICAgICAgICBET01TdHJpbmcgZGVzaXJlZFByb3BlcnR5
ID0gZGVzaXJlZFN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOwogICAgICAgICBE
T01TdHJpbmcgY29tcHV0ZWRQcm9wZXJ0eSA9IGNvbXB1dGVkU3R5bGUtPmdldFByb3BlcnR5VmFs
dWUocHJvcGVydHlJRCk7Ci0gICAgICAgIEtIVE1MUGFydDo6VHJpU3RhdGUgcHJvcGVydHlTdGF0
ZSA9IHN0cmNhc2VjbXAoZGVzaXJlZFByb3BlcnR5LCBjb21wdXRlZFByb3BlcnR5KSA9PSAwCisg
ICAgICAgIEtIVE1MUGFydDo6VHJpU3RhdGUgcHJvcGVydHlTdGF0ZSA9IGVxdWFsc0lnbm9yaW5n
Q2FzZShkZXNpcmVkUHJvcGVydHksIGNvbXB1dGVkUHJvcGVydHkpCiAgICAgICAgICAgICA/IEtI
VE1MUGFydDo6dHJ1ZVRyaVN0YXRlIDogS0hUTUxQYXJ0OjpmYWxzZVRyaVN0YXRlOwogICAgICAg
ICBpZiAoYXRTdGFydCkgewogICAgICAgICAgICAgc3RhdGUgPSBwcm9wZXJ0eVN0YXRlOwpAQCAt
NTcxNyw3ICs1NzE3LDcgQEAgYm9vbCBLSFRNTFBhcnQ6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUo
QwogICAgICAgICBpbnQgcHJvcGVydHlJRCA9ICgqaXQpLmlkKCk7CiAgICAgICAgIERPTVN0cmlu
ZyBkZXNpcmVkUHJvcGVydHkgPSBtdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5VmFsdWUocHJvcGVy
dHlJRCk7CiAgICAgICAgIERPTVN0cmluZyBzZWxlY3Rpb25Qcm9wZXJ0eSA9IHNlbGVjdGlvblN0
eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOwotICAgICAgICBpZiAoc3RyY2FzZWNt
cChzZWxlY3Rpb25Qcm9wZXJ0eSwgZGVzaXJlZFByb3BlcnR5KSAhPSAwKSB7CisgICAgICAgIGlm
IChlcXVhbHNJZ25vcmluZ0Nhc2Uoc2VsZWN0aW9uUHJvcGVydHksIGRlc2lyZWRQcm9wZXJ0eSkp
IHsKICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQpJbmRleDoga2h0bWwvY3NzL2Nzc3BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NwYXJzZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4zMgpkaWZmIC1wIC11IC1yMS4zMiBraHRtbC9jc3MvY3NzcGFyc2VyLmgKLS0tIGtodG1s
L2Nzcy9jc3NwYXJzZXIuaAkyNyBBdWcgMjAwNSAwMDoxNDoxOCAtMDAwMAkxLjMyCisrKyBraHRt
bC9jc3MvY3NzcGFyc2VyLmgJNSBTZXAgMjAwNSAxODowOTowNCAtMDAwMApAQCAtNzYsOSArNzYs
MTAgQEAgbmFtZXNwYWNlIERPTSB7CiAgICAgc3RhdGljIGlubGluZSBET01TdHJpbmcgZG9tU3Ry
aW5nKCBjb25zdCBQYXJzZVN0cmluZyAmcHMgKSB7CiAJcmV0dXJuIERPTVN0cmluZyggKFFDaGFy
ICopcHMuc3RyaW5nLCBwcy5sZW5ndGggKTsKICAgICB9Ci0gICAgc3RhdGljIGlubGluZSBBdG9t
aWNTdHJpbmcgYXRvbWljU3RyaW5nKCBjb25zdCBQYXJzZVN0cmluZyAmcHMgKSB7Ci0JcmV0dXJu
IEF0b21pY1N0cmluZyggcHMuc3RyaW5nLCBwcy5sZW5ndGggKTsKLSAgICB9CisgICAgc3RhdGlj
IGlubGluZSBBdG9taWNTdHJpbmcgYXRvbWljU3RyaW5nKGNvbnN0IFBhcnNlU3RyaW5nICZwcykK
KyAgICAgICAgeyByZXR1cm4gQXRvbWljU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8UUNoYXIgKj4o
cHMuc3RyaW5nKSwgcHMubGVuZ3RoKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgQXRvbWljU3RyaW5n
IGxvd2VyY2FzZWRBdG9taWNTdHJpbmcoY29uc3QgUGFyc2VTdHJpbmcgJnBzKQorICAgICAgICB7
IHJldHVybiBBdG9taWNTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxRQ2hhciAqPihwcy5zdHJpbmcp
LCBwcy5sZW5ndGgsIGxvd2VyY2FzZWQpOyB9CiAgICAgCiAgICAgY2xhc3MgVmFsdWVMaXN0IHsK
ICAgICBwdWJsaWM6CkluZGV4OiBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0
b3IuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIwMwpkaWZmIC1wIC11IC1yMS4yMDMga2h0
bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCi0tLSBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rv
ci5jcHAJMzAgQXVnIDIwMDUgMjE6MzY6MjMgLTAwMDAJMS4yMDMKKysrIGtodG1sL2Nzcy9jc3Nz
dHlsZXNlbGVjdG9yLmNwcAk1IFNlcCAyMDA1IDE4OjA5OjA3IC0wMDAwCkBAIC0zMzIsMTQgKzMz
MiwxMCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoQ1NTUnVsCiAgICAgLy8g
V2UgbmVlZCB0byBjb2xsZWN0IHRoZSBydWxlcyBmb3IgaWQsIGNsYXNzLCB0YWcsIGFuZCBldmVy
eXRoaW5nIGVsc2UgaW50byBhIGJ1ZmZlciBhbmQKICAgICAvLyB0aGVuIHNvcnQgdGhlIGJ1ZmZl
ci4KICAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSkKLSAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3Qo
cnVsZXMtPmdldElEUnVsZXMoZWxlbWVudC0+Z2V0SURBdHRyaWJ1dGUoKS5pbXBsKCkpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7Ci0g
ICAgaWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkpIHsKLSAgICAgICAgZm9yIChjb25zdCBBdG9taWNT
dHJpbmdMaXN0KiBzaW5nbGVDbGFzcyA9IGVsZW1lbnQtPmdldENsYXNzTGlzdCgpOwotICAgICAg
ICAgICAgIHNpbmdsZUNsYXNzOyBzaW5nbGVDbGFzcyA9IHNpbmdsZUNsYXNzLT5uZXh0KCkpCi0g
ICAgICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0Q2xhc3NSdWxlcyhzaW5nbGVD
bGFzcy0+cXN0cmluZygpLmltcGwoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7Ci0gICAg
fQorICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0SURSdWxlcyhlbGVtZW50LT5n
ZXRJREF0dHJpYnV0ZSgpLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsK
KyAgICBpZiAoZWxlbWVudC0+aGFzQ2xhc3MoKSkKKyAgICAgICAgZm9yIChjb25zdCBBdG9taWNT
dHJpbmdMaXN0KiBzaW5nbGVDbGFzcyA9IGVsZW1lbnQtPmdldENsYXNzTGlzdCgpOyBzaW5nbGVD
bGFzczsgc2luZ2xlQ2xhc3MgPSBzaW5nbGVDbGFzcy0+bmV4dCgpKQorICAgICAgICAgICAgbWF0
Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldENsYXNzUnVsZXMoc2luZ2xlQ2xhc3MtPnN0cmluZygp
LmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKICAgICBtYXRjaFJ1bGVz
Rm9yTGlzdChydWxlcy0+Z2V0VGFnUnVsZXMoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwK
ICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7CiAg
ICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldFVuaXZlcnNhbFJ1bGVzKCksIGZpcnN0UnVs
ZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKQEAgLTU1NSw3ICs1NTEsNyBAQCBzdGF0aWMgdm9pZCBj
aGVja1BzZXVkb1N0YXRlKCBFbGVtZW50SW1wCiAgICAgfQogICAgIAogICAgIFFDb25zdFN0cmlu
ZyBjdShhdHRyLnVuaWNvZGUoKSwgYXR0ci5sZW5ndGgoKSk7Ci0gICAgUVN0cmluZyB1ID0gY3Uu
cXN0cmluZygpOworICAgIFFTdHJpbmcgdSA9IGN1LnN0cmluZygpOwogICAgIGlmICggIXUuY29u
dGFpbnMoIjovLyIpICkgewogICAgICAgICBpZiAoIHVbMF0gPT0gJy8nICkKICAgICAgICAgICAg
IHUucHJlcGVuZChjdXJyZW50RW5jb2RlZFVSTC0+aG9zdCk7CkBAIC0xMTE2LDcgKzExMTIsNyBA
QCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgICAgICAgICBp
ZiAoIWUtPmhhc0NsYXNzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgZm9yIChjb25zdCBBdG9taWNTdHJpbmdMaXN0KiBjID0gZS0+Z2V0Q2xhc3NMaXN0KCk7
IGM7IGMgPSBjLT5uZXh0KCkpCi0gICAgICAgICAgICAgICAgaWYgKGMtPnFzdHJpbmcoKSA9PSBz
ZWwtPnZhbHVlKQorICAgICAgICAgICAgICAgIGlmIChjLT5zdHJpbmcoKSA9PSBzZWwtPnZhbHVl
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQpAQCAtMTEzMSw3ICsxMTI3LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVj
dG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAgICAgICBzd2l0Y2goc2VsLT5tYXRjaCkgewogICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpFeGFjdDoKIAkgICAgaWYgKChpc1hNTERvYyAmJiBzZWwt
PnZhbHVlICE9IHZhbHVlKSB8fAotICAgICAgICAgICAgICAgICghaXNYTUxEb2MgJiYgIWVxdWFs
c0lnbm9yZUNhc2Uoc2VsLT52YWx1ZSwgdmFsdWUpKSkKKyAgICAgICAgICAgICAgICAoIWlzWE1M
RG9jICYmICFlcXVhbHNJZ25vcmluZ0Nhc2Uoc2VsLT52YWx1ZSwgdmFsdWUpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6TGlzdDoKQEAgLTExNDIsNyArMTEzOCw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxl
Y3Rvcjo6Y2hlY2tPbmVTZWxlY3RvcigKICAgICAgICAgICAgICAgICAvLyBhbGxvY2luZyBRU3Ry
aW5ncyBhbmQganVzdCB0cmVhdCB0aGlzIGFzIGFuIGV4YWN0CiAgICAgICAgICAgICAgICAgLy8g
bWF0Y2ggY2hlY2suCiAgICAgICAgICAgICAgICAgaWYgKChpc1hNTERvYyAmJiBzZWwtPnZhbHVl
ICE9IHZhbHVlKSB8fAotICAgICAgICAgICAgICAgICAgICAoIWlzWE1MRG9jICYmICFlcXVhbHNJ
Z25vcmVDYXNlKHNlbC0+dmFsdWUsIHZhbHVlKSkpCisgICAgICAgICAgICAgICAgICAgICghaXNY
TUxEb2MgJiYgIWVxdWFsc0lnbm9yaW5nQ2FzZShzZWwtPnZhbHVlLCB2YWx1ZSkpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CkluZGV4OiBraHRtbC9jc3MvcGFyc2VyLnkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL3BhcnNlci55LHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjQ0CmRpZmYgLXAgLXUgLXIxLjQ0IGtodG1sL2Nzcy9wYXJzZXIueQotLS0ga2h0bWwvY3Nz
L3BhcnNlci55CTMwIEF1ZyAyMDA1IDIxOjM2OjIzIC0wMDAwCTEuNDQKKysrIGtodG1sL2Nzcy9w
YXJzZXIueQk1IFNlcCAyMDA1IDE4OjA5OjA4IC0wMDAwCkBAIC03MjQsMTAgKzcyNCw4IEBAIHNw
ZWNpZmllcjoKIAkkJCA9IG5ldyBDU1NTZWxlY3RvcigpOwogCSQkLT5tYXRjaCA9IENTU1NlbGVj
dG9yOjpJZDsKIAlDU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFyc2Vy
KTsKLSAgICAgICAgaWYgKCFwLT5zdHJpY3QpCi0gICAgICAgICAgICAkMS5sb3dlcigpOwogICAg
ICAgICAkJC0+YXR0ciA9IGlkQXR0cjsKLQkkJC0+dmFsdWUgPSBhdG9taWNTdHJpbmcoJDEpOwor
ICAgICAgICAkJC0+dmFsdWUgPSBwLT5zdHJpY3QgPyBhdG9taWNTdHJpbmcoJDEpIDogbG93ZXJj
YXNlZEF0b21pY1N0cmluZygkMSk7CiAgICAgfQogICB8IGNsYXNzCiAgIHwgYXR0cmliCkBAIC03
MzksMTAgKzczNyw4IEBAIGNsYXNzOgogICAgICAgICAkJCA9IG5ldyBDU1NTZWxlY3RvcigpOwog
CSQkLT5tYXRjaCA9IENTU1NlbGVjdG9yOjpDbGFzczsKIAlDU1NQYXJzZXIgKnAgPSBzdGF0aWNf
Y2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKLSAgICAgICAgaWYgKCFwLT5zdHJpY3QpCi0gICAg
ICAgICAgICAkMi5sb3dlcigpOwogICAgICAgICAkJC0+YXR0ciA9IGNsYXNzQXR0cjsKLQkkJC0+
dmFsdWUgPSBhdG9taWNTdHJpbmcoJDIpOworICAgICAgICAkJC0+dmFsdWUgPSBwLT5zdHJpY3Qg
PyBhdG9taWNTdHJpbmcoJDIpIDogbG93ZXJjYXNlZEF0b21pY1N0cmluZygkMik7CiAgICAgfQog
ICA7CiAKQEAgLTgyMCw4ICs4MTYsNyBAQCBwc2V1ZG86CiAgICAgJzonIElERU5UIHsKICAgICAg
ICAgJCQgPSBuZXcgQ1NTU2VsZWN0b3IoKTsKICAgICAgICAgJCQtPm1hdGNoID0gQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzOwotICAgICAgICAkMi5sb3dlcigpOwotICAgICAgICAkJC0+dmFsdWUg
PSBhdG9taWNTdHJpbmcoJDIpOworICAgICAgICAkJC0+dmFsdWUgPSBsb3dlcmNhc2VkQXRvbWlj
U3RyaW5nKCQyKTsKICAgICAgICAgaWYgKCQkLT52YWx1ZSA9PSAiZW1wdHkiIHx8ICQkLT52YWx1
ZSA9PSAib25seS1jaGlsZCIgfHwKICAgICAgICAgICAgICQkLT52YWx1ZSA9PSAiZmlyc3QtY2hp
bGQiIHx8ICQkLT52YWx1ZSA9PSAibGFzdC1jaGlsZCIpIHsKICAgICAgICAgICAgIENTU1BhcnNl
ciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwpAQCAtODMzLDE1ICs4Mjgs
MTMgQEAgcHNldWRvOgogICAgIHwgJzonICc6JyBJREVOVCB7CiAgICAgICAgICQkID0gbmV3IENT
U1NlbGVjdG9yKCk7CiAgICAgICAgICQkLT5tYXRjaCA9IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVt
ZW50OwotICAgICAgICAkMy5sb3dlcigpOwotICAgICAgICAkJC0+dmFsdWUgPSBhdG9taWNTdHJp
bmcoJDMpOworICAgICAgICAkJC0+dmFsdWUgPSBsb3dlcmNhc2VkQXRvbWljU3RyaW5nKCQzKTsK
ICAgICB9CiAgICAgfCAnOicgRlVOQ1RJT04gbWF5YmVfc3BhY2Ugc2ltcGxlX3NlbGVjdG9yIG1h
eWJlX3NwYWNlICcpJyB7CiAgICAgICAgICQkID0gbmV3IENTU1NlbGVjdG9yKCk7CiAgICAgICAg
ICQkLT5tYXRjaCA9IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzczsKICAgICAgICAgJCQtPnNpbXBs
ZVNlbGVjdG9yID0gJDQ7Ci0gICAgICAgICQyLmxvd2VyKCk7Ci0gICAgICAgICQkLT52YWx1ZSA9
IGF0b21pY1N0cmluZygkMik7CisgICAgICAgICQkLT52YWx1ZSA9IGxvd2VyY2FzZWRBdG9taWNT
dHJpbmcoJDIpOwogICAgIH0KICAgOwogCkluZGV4OiBraHRtbC9kb20vZG9tX3N0cmluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2RvbV9zdHJp
bmcuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIwCmRpZmYgLXAgLXUgLXIxLjIwIGtodG1s
L2RvbS9kb21fc3RyaW5nLmNwcAotLS0ga2h0bWwvZG9tL2RvbV9zdHJpbmcuY3BwCTI5IEF1ZyAy
MDA1IDIxOjI5OjExIC0wMDAwCTEuMjAKKysrIGtodG1sL2RvbS9kb21fc3RyaW5nLmNwcAk1IFNl
cCAyMDA1IDE4OjA5OjA4IC0wMDAwCkBAIC0yMywzMTYgKzIzLDI0NCBAQAogI2luY2x1ZGUgImRv
bS9kb21fc3RyaW5nLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9zdHJpbmdpbXBsLmgiCiAKLQogbmFt
ZXNwYWNlIERPTSB7CiAKLQogRE9NU3RyaW5nOjpET01TdHJpbmcoY29uc3QgUUNoYXIgKnN0ciwg
dWludCBsZW4pCiB7Ci0gICAgaWYgKCFzdHIpIHsKLSAgICAgICAgbV9pbXBsID0gMDsKLSAgICAg
ICAgcmV0dXJuOworICAgIERPTVN0cmluZ0ltcGwgKmltcGw7CisgICAgaWYgKCFzdHIpCisgICAg
ICAgIGltcGwgPSBOVUxMOworICAgIGVsc2UgeworICAgICAgICBpZiAobGVuID09IDApCisgICAg
ICAgICAgICBpbXBsID0gRE9NU3RyaW5nSW1wbDo6ZW1wdHkoKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgaW1wbCA9IG5ldyBET01TdHJpbmdJbXBsKHN0ciwgbGVuKTsKKyAgICAgICAgaW1w
bC0+cmVmKCk7CiAgICAgfQotICAgIAotICAgIGlmIChsZW4gPT0gMCkKLSAgICAgICAgbV9pbXBs
ID0gRE9NU3RyaW5nSW1wbDo6ZW1wdHkoKTsKLSAgICBlbHNlCi0gICAgICAgIG1faW1wbCA9IG5l
dyBET01TdHJpbmdJbXBsKHN0ciwgbGVuKTsKLSAgICBtX2ltcGwtPnJlZigpOworICAgIG1faW1w
bCA9IGltcGw7CiB9CiAKIERPTVN0cmluZzo6RE9NU3RyaW5nKGNvbnN0IFFTdHJpbmcgJnN0cikK
IHsKLSAgICBpZiAoc3RyLmlzTnVsbCgpKSB7Ci0JbV9pbXBsID0gMDsKLQlyZXR1cm47CisgICAg
RE9NU3RyaW5nSW1wbCAqaW1wbDsKKyAgICBpZiAoc3RyLmlzTnVsbCgpKQorCWltcGwgPSBOVUxM
OworICAgIGVsc2UgeworICAgICAgICBpZiAoc3RyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGlt
cGwgPSBET01TdHJpbmdJbXBsOjplbXB0eSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBp
bXBsID0gbmV3IERPTVN0cmluZ0ltcGwoc3RyLnVuaWNvZGUoKSwgc3RyLmxlbmd0aCgpKTsKKyAg
ICAgICAgaW1wbC0+cmVmKCk7CiAgICAgfQotICAgIAotICAgIGlmIChzdHIuaXNFbXB0eSgpKQot
ICAgICAgICBtX2ltcGwgPSBET01TdHJpbmdJbXBsOjplbXB0eSgpOwotICAgIGVsc2UgCi0gICAg
ICAgIG1faW1wbCA9IG5ldyBET01TdHJpbmdJbXBsKHN0ci51bmljb2RlKCksIHN0ci5sZW5ndGgo
KSk7Ci0gICAgbV9pbXBsLT5yZWYoKTsKKyAgICBtX2ltcGwgPSBpbXBsOwogfQogCiBET01TdHJp
bmc6OkRPTVN0cmluZyhjb25zdCBjaGFyICpzdHIpCiB7Ci0gICAgaWYgKCFzdHIpIHsKLQltX2lt
cGwgPSAwOwotCXJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgbCA9IHN0cmxlbihzdHIpOwotICAg
IGlmIChsID09IDApCi0gICAgICAgIG1faW1wbCA9IERPTVN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0g
ICAgZWxzZQotICAgICAgICBtX2ltcGwgPSBuZXcgRE9NU3RyaW5nSW1wbChzdHIsIGwpOwotICAg
IG1faW1wbC0+cmVmKCk7Ci19Ci0KLURPTVN0cmluZzo6RE9NU3RyaW5nKERPTVN0cmluZ0ltcGwg
KmkpCi17Ci0gICAgbV9pbXBsID0gaTsKLSAgICBpZihtX2ltcGwpIG1faW1wbC0+cmVmKCk7Ci19
Ci0KLURPTVN0cmluZzo6RE9NU3RyaW5nKGNvbnN0IERPTVN0cmluZyAmb3RoZXIpCi17Ci0gICAg
bV9pbXBsID0gb3RoZXIubV9pbXBsOwotICAgIGlmKG1faW1wbCkgbV9pbXBsLT5yZWYoKTsKLX0K
LQotRE9NU3RyaW5nICZET01TdHJpbmc6Om9wZXJhdG9yID0oY29uc3QgRE9NU3RyaW5nICZvdGhl
cikKLXsKLSAgICBpZiAoIG1faW1wbCAhPSBvdGhlci5tX2ltcGwgKSB7Ci0gICAgaWYobV9pbXBs
KSBtX2ltcGwtPmRlcmVmKCk7Ci0gICAgbV9pbXBsID0gb3RoZXIubV9pbXBsOwotICAgIGlmKG1f
aW1wbCkgbV9pbXBsLT5yZWYoKTsKLSAgICB9Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1ET01T
dHJpbmcgJkRPTVN0cmluZzo6b3BlcmF0b3IgKz0gKGNvbnN0IERPTVN0cmluZyAmc3RyKQotewot
ICAgIGlmKHN0ci5tX2ltcGwpCi0gICAgewotICAgICAgICBpZighbV9pbXBsKQotICAgICAgICB7
Ci0gICAgICAgICAgICAvLyAjIyMgRklYTUUhISEKLSAgICAgICAgICAgIG1faW1wbCA9IHN0ci5t
X2ltcGw7Ci0gICAgICAgICAgICBtX2ltcGwtPnJlZigpOwotICAgICAgICAgICAgcmV0dXJuICp0
aGlzOwotICAgICAgICB9Ci0JRE9NU3RyaW5nSW1wbCAqaSA9IG1faW1wbC0+Y29weSgpOwotCW1f
aW1wbC0+ZGVyZWYoKTsKLQltX2ltcGwgPSBpOwotCW1faW1wbC0+cmVmKCk7Ci0JbV9pbXBsLT5h
cHBlbmQoc3RyLm1faW1wbCk7CisgICAgRE9NU3RyaW5nSW1wbCAqaW1wbDsKKyAgICBpZiAoIXN0
cikKKwlpbXBsID0gTlVMTDsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKGludCBsZW4gPSBzdHJs
ZW4oc3RyKSkKKyAgICAgICAgICAgIGltcGwgPSBuZXcgRE9NU3RyaW5nSW1wbChzdHIsIGxlbik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGltcGwgPSBET01TdHJpbmdJbXBsOjplbXB0eSgp
OworICAgICAgICBpbXBsLT5yZWYoKTsKKyAgICB9CisgICAgbV9pbXBsID0gaW1wbDsKK30KKwor
Ly8gRklYTUU6IFRoaXMgdmlvbGF0ZXMgdGhlIHVzdWFsIGV4cGxpY2l0IHNoYXJpbmcgc2VtYW50
aWNzIGJlY2F1c2UgaXQgc29tZXRpbWVzIGNvcGllcywgc29tZXRpbWVzIGRvZXNuJ3QuCitET01T
dHJpbmcgJkRPTVN0cmluZzo6b3BlcmF0b3IgKz0oY29uc3QgRE9NU3RyaW5nICZvdGhlcikKK3sK
KyAgICBpZiAob3RoZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgRE9N
U3RyaW5nSW1wbCAqaW1wbDsKKyAgICBpZiAoRE9NU3RyaW5nSW1wbCAqb2xkID0gbV9pbXBsKSB7
CisgICAgICAgIGltcGwgPSBvbGQtPmNvcHkoKTsKKyAgICAgICAgaW1wbC0+YXBwZW5kKG90aGVy
Lm1faW1wbCk7CisgICAgICAgIG9sZC0+ZGVyZWYoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBp
bXBsID0gb3RoZXIubV9pbXBsLT5jb3B5KCk7CiAgICAgfQorICAgIGltcGwtPnJlZigpOworICAg
IG1faW1wbCA9IGltcGw7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1ET01TdHJpbmcgb3BlcmF0
b3IgKyAoY29uc3QgRE9NU3RyaW5nICZhLCBjb25zdCBET01TdHJpbmcgJmIpCitET01TdHJpbmcg
b3BlcmF0b3IgKyhjb25zdCBET01TdHJpbmcgJmEsIGNvbnN0IERPTVN0cmluZyAmYikKIHsKICAg
ICBpZiAoYS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBiLmNvcHkoKTsKICAgICBpZiAoYi5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBhLmNvcHkoKTsKICAgICBET01TdHJpbmcgYyA9IGEu
Y29weSgpOwotICAgIGMgKz0gYjsKLSAgICByZXR1cm4gYzsKKyAgICByZXR1cm4gYyArPSBiOwog
fQogCi12b2lkIERPTVN0cmluZzo6aW5zZXJ0KERPTVN0cmluZyBzdHIsIHVpbnQgcG9zKQorLy8g
RklYTUU6IFRoaXMgdmlvbGF0ZXMgdGhlIHVzdWFsIGV4cGxpY2l0IHNoYXJpbmcgc2VtYW50aWNz
IGJlY2F1c2UgaXQgc29tZXRpbWVzIGNvcGllcywgc29tZXRpbWVzIGRvZXNuJ3QuCit2b2lkIERP
TVN0cmluZzo6aW5zZXJ0KGNvbnN0IERPTVN0cmluZyAmc3RyLCB1aW50IHBvcykKIHsKLSAgICBp
ZighbV9pbXBsKQotICAgIHsKLQltX2ltcGwgPSBzdHIubV9pbXBsLT5jb3B5KCk7Ci0JbV9pbXBs
LT5yZWYoKTsKKyAgICBpZiAoRE9NU3RyaW5nSW1wbCAqaW1wbCA9IG1faW1wbCkgeworCWltcGwt
Pmluc2VydChzdHIubV9pbXBsLCBwb3MpOworICAgIH0gZWxzZSB7CisJaW1wbCA9IHN0ci5tX2lt
cGwtPmNvcHkoKTsKKwlpbXBsLT5yZWYoKTsKKyAgICAgICAgbV9pbXBsID0gaW1wbDsKICAgICB9
Ci0gICAgZWxzZQotCW1faW1wbC0+aW5zZXJ0KHN0ci5tX2ltcGwsIHBvcyk7CiB9CiAKLQotY29u
c3QgUUNoYXIgJkRPTVN0cmluZzo6b3BlcmF0b3IgW10odW5zaWduZWQgaW50IGkpIGNvbnN0Citj
b25zdCBRQ2hhciAmRE9NU3RyaW5nOjpvcGVyYXRvciBbXSh1aW50IGkpIGNvbnN0CiB7Ci0gICAg
c3RhdGljIGNvbnN0IFFDaGFyIG51bGxDaGFyID0gMDsKLQotICAgIGlmKCFtX2ltcGwgfHwgaSA+
PSBtX2ltcGwtPmwgKSByZXR1cm4gbnVsbENoYXI7Ci0KLSAgICByZXR1cm4gKihtX2ltcGwtPnMr
aSk7CisgICAgRE9NU3RyaW5nSW1wbCAqaW1wbCA9IG1faW1wbDsKKyAgICBpZiAoIWltcGwgfHwg
aSA+PSBpbXBsLT5sKSB7CisgICAgICAgIHN0YXRpYyBRQ2hhciBudWxsQ2hhcjsKKyAgICAgICAg
cmV0dXJuIG51bGxDaGFyOworICAgIH0KKyAgICByZXR1cm4gaW1wbC0+c1tpXTsKIH0KIAogaW50
IERPTVN0cmluZzo6ZmluZChjb25zdCBRQ2hhciBjLCBpbnQgc3RhcnQpIGNvbnN0CiB7Ci0gICAg
dW5zaWduZWQgaW50IGwgPSBzdGFydDsKLSAgICBpZighbV9pbXBsIHx8IGwgPj0gbV9pbXBsLT5s
ICkgcmV0dXJuIC0xOwotICAgIHdoaWxlKCBsIDwgbV9pbXBsLT5sICkKLSAgICB7Ci0JaWYoICoo
bV9pbXBsLT5zK2wpID09IGMgKSByZXR1cm4gbDsKLQlsKys7Ci0gICAgfQorICAgIERPTVN0cmlu
Z0ltcGwgKmltcGwgPSBtX2ltcGw7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gLTE7
CisgICAgY29uc3QgUUNoYXIgKnN0ciA9IGltcGwtPnM7CisgICAgdWludCBsZW4gPSBpbXBsLT5s
OworICAgIGZvciAodWludCBpID0gc3RhcnQ7IGkgPCBsZW47ICsraSkKKwlpZiAoc3RyW2ldID09
IGMpCisgICAgICAgICAgICByZXR1cm4gaTsKICAgICByZXR1cm4gLTE7CiB9CiAKLXVpbnQgRE9N
U3RyaW5nOjpsZW5ndGgoKSBjb25zdAotewotICAgIGlmKCFtX2ltcGwpIHJldHVybiAwOwotICAg
IHJldHVybiBtX2ltcGwtPmw7Ci19Ci0KLXZvaWQgRE9NU3RyaW5nOjp0cnVuY2F0ZSggdW5zaWdu
ZWQgaW50IGxlbiApCi17Ci0gICAgaWYobV9pbXBsKSBtX2ltcGwtPnRydW5jYXRlKGxlbik7Ci19
Ci0KLXZvaWQgRE9NU3RyaW5nOjpyZW1vdmUodW5zaWduZWQgaW50IHBvcywgaW50IGxlbikKLXsK
LSAgaWYobV9pbXBsKSBtX2ltcGwtPnJlbW92ZShwb3MsIGxlbik7Ci19Ci0KLURPTVN0cmluZyBE
T01TdHJpbmc6OnN1YnN0cmluZyh1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgbGVuKSBj
b25zdAotewotICAgIGlmICghbV9pbXBsKSAKLSAgICAgICAgcmV0dXJuIERPTVN0cmluZygpOwot
ICAgIHJldHVybiBtX2ltcGwtPnN1YnN0cmluZyhwb3MsIGxlbik7Ci19Ci0KLURPTVN0cmluZyBE
T01TdHJpbmc6OnNwbGl0KHVuc2lnbmVkIGludCBwb3MpCitib29sIERPTVN0cmluZzo6cGVyY2Vu
dGFnZShpbnQgJnJlc3VsdCkgY29uc3QKIHsKLSAgaWYoIW1faW1wbCkgcmV0dXJuIERPTVN0cmlu
ZygpOwotICByZXR1cm4gbV9pbXBsLT5zcGxpdChwb3MpOwotfQotCi1ET01TdHJpbmcgRE9NU3Ry
aW5nOjpsb3dlcigpIGNvbnN0Ci17Ci0gIGlmKCFtX2ltcGwpIHJldHVybiBET01TdHJpbmcoKTsK
LSAgcmV0dXJuIG1faW1wbC0+bG93ZXIoKTsKLX0KLQotRE9NU3RyaW5nIERPTVN0cmluZzo6dXBw
ZXIoKSBjb25zdAotewotICBpZighbV9pbXBsKSByZXR1cm4gRE9NU3RyaW5nKCk7Ci0gIHJldHVy
biBtX2ltcGwtPnVwcGVyKCk7Ci19Ci0KLWJvb2wgRE9NU3RyaW5nOjpwZXJjZW50YWdlKGludCAm
X3BlcmNlbnRhZ2UpIGNvbnN0Ci17Ci0gICAgaWYoIW1faW1wbCB8fCAhbV9pbXBsLT5sKSByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoICoobV9pbXBsLT5zK21faW1wbC0+bC0xKSAhPSBRQ2hhcign
JScpKQorICAgIERPTVN0cmluZ0ltcGwgKmltcGwgPSBtX2ltcGw7CisgICAgaWYgKCFpbXBsKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdWludCBsZW4gPSBpbXBsLT5sOworICAgIGlmIChs
ZW4gPCAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUUNoYXIgKnN0ciA9IGltcGwtPnM7
CisgICAgaWYgKHN0cltsZW4gLSAxXSAhPSAnJScpCiAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgX3BlcmNlbnRhZ2UgPSBRQ29uc3RTdHJpbmcobV9pbXBsLT5zLCBtX2ltcGwtPmwtMSkucXN0
cmluZygpLnRvSW50KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVFDaGFyICpET01TdHJpbmc6
OnVuaWNvZGUoKSBjb25zdAotewotICAgIGlmKCFtX2ltcGwpIHJldHVybiAwOwotICAgIHJldHVy
biBtX2ltcGwtPnM7CisgICAgYm9vbCBvazsKKyAgICByZXN1bHQgPSBRQ29uc3RTdHJpbmcoc3Ry
LCBsZW4gLSAxKS5zdHJpbmcoKS50b0ludCgmb2spOworICAgIHJldHVybiBvazsKIH0KIAogUVN0
cmluZyBET01TdHJpbmc6OnFzdHJpbmcoKSBjb25zdAogewotICAgIGlmKCFtX2ltcGwpIHJldHVy
biBRU3RyaW5nOjpudWxsOwotCi0gICAgcmV0dXJuIFFTdHJpbmcobV9pbXBsLT5zLCBtX2ltcGwt
PmwpOwotfQotCi1pbnQgRE9NU3RyaW5nOjp0b0ludCgpIGNvbnN0Ci17Ci0gICAgaWYoIW1faW1w
bCkgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9pbXBsLT50b0ludCgpOwotfQotCi1ET01TdHJp
bmcgRE9NU3RyaW5nOjpjb3B5KCkgY29uc3QKLXsKLSAgICBpZighbV9pbXBsKSByZXR1cm4gRE9N
U3RyaW5nKCk7Ci0gICAgcmV0dXJuIG1faW1wbC0+Y29weSgpOworICAgIERPTVN0cmluZ0ltcGwg
KmltcGwgPSBtX2ltcGw7CisgICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gUVN0cmluZzo6
bnVsbDsKKyAgICByZXR1cm4gUVN0cmluZyhpbXBsLT5zLCBpbXBsLT5sKTsKIH0KIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKLWJvb2wgc3RyY2FzZWNtcCggY29uc3QgRE9NU3RyaW5nICZhcywgY29u
c3QgRE9NU3RyaW5nICZicyApCitib29sIGVxdWFsc0lnbm9yaW5nQ2FzZShjb25zdCBET01TdHJp
bmcgJmEsIGNvbnN0IERPTVN0cmluZyAmYiApCiB7Ci0gICAgaWYgKCBhcy5sZW5ndGgoKSAhPSBi
cy5sZW5ndGgoKSApIHJldHVybiB0cnVlOworICAgIERPTVN0cmluZ0ltcGwgKmFpbXBsID0gYS5p
bXBsKCk7CisgICAgRE9NU3RyaW5nSW1wbCAqYmltcGwgPSBiLmltcGwoKTsKKyAgICBpZiAoYWlt
cGwgPT0gYmltcGwpCisgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgY29uc3QgUUNoYXIgKmEg
PSBhcy51bmljb2RlKCk7Ci0gICAgY29uc3QgUUNoYXIgKmIgPSBicy51bmljb2RlKCk7Ci0gICAg
aWYgKCBhID09IGIgKSAgcmV0dXJuIGZhbHNlOwotICAgIGlmICggISggYSAmJiBiICkgKSAgcmV0
dXJuIHRydWU7Ci0gICAgaW50IGwgPSBhcy5sZW5ndGgoKTsKLSAgICB3aGlsZSAoIGwtLSApIHsK
LSAgICAgICAgaWYgKCAqYSAhPSAqYiAmJiBhLT5sb3dlcigpICE9IGItPmxvd2VyKCkgKSByZXR1
cm4gdHJ1ZTsKLQlhKyssYisrOworICAgIHVpbnQgYWxlbiA9IGFpbXBsID8gYWltcGwtPmwgOiAw
OworICAgIHVpbnQgYmxlbiA9IGJpbXBsID8gYmltcGwtPmwgOiAwOworICAgIGlmIChhbGVuICE9
IGJsZW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IFFDaGFyICphY2hhcnMg
PSBhaW1wbC0+czsKKyAgICBjb25zdCBRQ2hhciAqYmNoYXJzID0gYmltcGwtPnM7CisgICAgdWlu
dCBjb3VudCA9IGFsZW47CisgICAgd2hpbGUgKGNvdW50LS0pIHsKKyAgICAgICAgaWYgKCphY2hh
cnMgIT0gKmJjaGFycyAmJiBhY2hhcnMtPmxvd2VyKCkgIT0gYmNoYXJzLT5sb3dlcigpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCWFjaGFycysrOworICAgICAgICBiY2hhcnMrKzsKICAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHN0cmNh
c2VjbXAoIGNvbnN0IERPTVN0cmluZyAmYXMsIGNvbnN0IGNoYXIqIGJzICkKK2Jvb2wgZXF1YWxz
SWdub3JpbmdDYXNlKGNvbnN0IERPTVN0cmluZyAmYSwgY29uc3QgY2hhciAqYikKIHsKLSAgICBj
b25zdCBRQ2hhciAqYSA9IGFzLnVuaWNvZGUoKTsKLSAgICBpbnQgbCA9IGFzLmxlbmd0aCgpOwot
ICAgIGlmICggIWJzICkgcmV0dXJuICggbCAhPSAwICk7Ci0gICAgd2hpbGUgKCBsLS0gKSB7Ci0g
ICAgICAgIGlmICggYS0+bGF0aW4xKCkgIT0gKmJzICkgewotICAgICAgICAgICAgY2hhciBjYyA9
ICggKCAqYnMgPj0gJ0EnICkgJiYgKCAqYnMgPD0gJ1onICkgKSA/ICggKCAqYnMgKSArICdhJyAt
ICdBJyApIDogKCAqYnMgKTsKLSAgICAgICAgICAgIGlmICggYS0+bG93ZXIoKS5sYXRpbjEoKSAh
PSBjYyApIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGErKywgYnMrKzsKKyAgICBE
T01TdHJpbmdJbXBsICphaW1wbCA9IGEuaW1wbCgpOworICAgIHVpbnQgYWxlbiA9IGFpbXBsID8g
YWltcGwtPmwgOiAwOworICAgIGlmICghYikKKyAgICAgICAgcmV0dXJuIGFsZW4gPT0gMDsKKyAg
ICBjb25zdCBRQ2hhciAqYWNoYXJzID0gYWltcGwtPnM7CisgICAgY29uc3QgY2hhciAqYmNoYXJz
ID0gYjsKKyAgICB1aW50IGNvdW50ID0gYWxlbjsKKyAgICB3aGlsZSAoY291bnQtLSkgeworICAg
ICAgICBjaGFyIGJjID0gKmJjaGFyczsKKyAgICAgICAgaWYgKGJjID09ICdcMCcgfHwgKmFjaGFy
cyAhPSBiYyAmJiBhY2hhcnMtPmxvd2VyKCkgIT0gUUNoYXIoYmMpLmxvd2VyKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGFjaGFycysrOworICAgICAgICBiY2hhcnMrKzsK
ICAgICB9Ci0gICAgcmV0dXJuICggKmJzICE9ICdcMCcgKTsKLX0KLQotYm9vbCBET01TdHJpbmc6
OmlzRW1wdHkoKSBjb25zdAotewotICAgIHJldHVybiAoIW1faW1wbCB8fCBtX2ltcGwtPmwgPT0g
MCk7Ci19Ci0KLWtodG1sOjpMZW5ndGgqIERPTVN0cmluZzo6dG9Db29yZHNBcnJheShpbnQmIGxl
bikgY29uc3QgCi17IAotICAgIHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPnRvQ29vcmRzQXJyYXko
bGVuKSA6IDA7Ci19Ci0KLWtodG1sOjpMZW5ndGgqIERPTVN0cmluZzo6dG9MZW5ndGhBcnJheShp
bnQmIGxlbikgY29uc3QgCi17IAotICAgIHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPnRvTGVuZ3Ro
QXJyYXkobGVuKSA6IDA7CisgICAgcmV0dXJuICpiY2hhcnMgPT0gJ1wwJzsKIH0KIAogI2lmbmRl
ZiBOREVCVUcKKwogY29uc3QgY2hhciAqRE9NU3RyaW5nOjphc2NpaSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1faW1wbCA/IG1faW1wbC0+YXNjaWkoKSA6ICIobnVsbCBpbXBsKSI7CisgICAgRE9N
U3RyaW5nSW1wbCAqaW1wbCA9IG1faW1wbDsKKyAgICByZXR1cm4gaW1wbCA/IGltcGwtPmFzY2lp
KCkgOiAiKG51bGwgaW1wbCkiOwogfQorCiAjZW5kaWYKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1ib29sIG9wZXJhdG9yPT0oIGNvbnN0IERPTVN0cmluZyAmYSwgY29uc3QgRE9NU3RyaW5n
ICZiICkKKy8vIEZJWE1FOiBOdWxsIGNvbXBhcmVzIGVxdWFsIHRvIGVtcHR5LiBJcyB0aGF0IHdo
YXQgd2Ugd2FudD8KK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBET01TdHJpbmcgJmEsIGNvbnN0IERP
TVN0cmluZyAmYikKIHsKLSAgICBpZiAoYS5tX2ltcGwgPT0gYi5tX2ltcGwpCisgICAgRE9NU3Ry
aW5nSW1wbCAqYWltcGwgPSBhLmltcGwoKTsKKyAgICBET01TdHJpbmdJbXBsICpiaW1wbCA9IGIu
aW1wbCgpOworICAgIGlmIChhaW1wbCA9PSBiaW1wbCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgCi0gICAgdW5zaWduZWQgaW50IGwgPSBhLmxlbmd0aCgpOwogCi0gICAgaWYoIGwgIT0gYi5s
ZW5ndGgoKSApIHJldHVybiBmYWxzZTsKKyAgICB1aW50IGFsZW4gPSBhaW1wbCA/IGFpbXBsLT5s
IDogMDsKKyAgICB1aW50IGJsZW4gPSBiaW1wbCA/IGJpbXBsLT5sIDogMDsKKyAgICBpZiAoYWxl
biAhPSBibGVuKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZighbWVtY21wKGEudW5p
Y29kZSgpLCBiLnVuaWNvZGUoKSwgbCpzaXplb2YoUUNoYXIpKSkKLQlyZXR1cm4gdHJ1ZTsKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1lbWNtcChhaW1wbC0+cywgYmltcGwtPnMsIGFs
ZW4gKiBzaXplb2YoUUNoYXIpKSA9PSAwOwogfQogCi1ib29sIG9wZXJhdG9yPT0oIGNvbnN0IERP
TVN0cmluZyAmYSwgY29uc3QgUVN0cmluZyAmYiApCisvLyBGSVhNRTogTnVsbCBjb21wYXJlcyBl
cXVhbCB0byBlbXB0eS4gSXMgdGhhdCB3aGF0IHdlIHdhbnQ/Citib29sIG9wZXJhdG9yPT0oY29u
c3QgRE9NU3RyaW5nICZhLCBjb25zdCBRU3RyaW5nICZiKQogewotICAgIHVuc2lnbmVkIGludCBs
ID0gYS5sZW5ndGgoKTsKKyAgICBET01TdHJpbmdJbXBsICphaW1wbCA9IGEuaW1wbCgpOwogCi0g
ICAgaWYoIGwgIT0gYi5sZW5ndGgoKSApIHJldHVybiBmYWxzZTsKKyAgICB1aW50IGFsZW4gPSBh
aW1wbCA/IGFpbXBsLT5sIDogMDsKKyAgICB1aW50IGJsZW4gPSBiLmxlbmd0aCgpOworICAgIGlm
IChhbGVuICE9IGJsZW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmKCFtZW1jbXAo
YS51bmljb2RlKCksIGIudW5pY29kZSgpLCBsKnNpemVvZihRQ2hhcikpKQotCXJldHVybiB0cnVl
OwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbWVtY21wKGFpbXBsLT5zLCBiLnVuaWNv
ZGUoKSwgYWxlbiAqIHNpemVvZihRQ2hhcikpID09IDA7CiB9CiAKLWJvb2wgb3BlcmF0b3I9PSgg
Y29uc3QgRE9NU3RyaW5nICZhLCBjb25zdCBjaGFyICpiICkKKy8vIEZJWE1FOiBOdWxsIGNvbXBh
cmVzIGVxdWFsIHRvIGVtcHR5LiBJcyB0aGF0IHdoYXQgd2Ugd2FudD8KK2Jvb2wgb3BlcmF0b3I9
PShjb25zdCBET01TdHJpbmcgJmEsIGNvbnN0IGNoYXIgKmIpCiB7Ci0gICAgRE9NU3RyaW5nSW1w
bCAqYWltcGwgPSBhLm1faW1wbDsKLSAgICAKKyAgICBET01TdHJpbmdJbXBsICphaW1wbCA9IGEu
aW1wbCgpOworICAgIHVpbnQgYWxlbiA9IGFpbXBsID8gYWltcGwtPmwgOiAwOwogICAgIGlmICgh
YikKLSAgICAgICAgcmV0dXJuICFhaW1wbDsKLSAgICAKLSAgICBpZiAoYWltcGwpIHsKLSAgICAg
ICAgaW50IGFsZW4gPSBhaW1wbC0+bDsKLSAgICAgICAgY29uc3QgUUNoYXIgKmFwdHIgPSBhaW1w
bC0+czsKLSAgICAgICAgd2hpbGUgKGFsZW4tLSkgewotICAgICAgICAgICAgdW5zaWduZWQgY2hh
ciBjID0gKmIrKzsKLSAgICAgICAgICAgIGlmICghYyB8fCAoKmFwdHIrKykudW5pY29kZSgpICE9
IGMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIHJl
dHVybiBhbGVuID09IDA7CisgICAgY29uc3QgUUNoYXIgKmFjaGFycyA9IGFpbXBsLT5zOworICAg
IGNvbnN0IGNoYXIgKmJjaGFycyA9IGI7CisgICAgdWludCBjb3VudCA9IGFsZW47CisgICAgd2hp
bGUgKGNvdW50LS0pIHsKKyAgICAgICAgY2hhciBiYyA9ICpiY2hhcnM7CisgICAgICAgIGlmIChi
YyA9PSAnXDAnIHx8ICphY2hhcnMgIT0gYmMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGFjaGFycysrOworICAgICAgICBiY2hhcnMrKzsKICAgICB9Ci0gICAgcmV0dXJuICpi
ID09IDA7CisgICAgcmV0dXJuICpiY2hhcnMgPT0gJ1wwJzsKIH0KIAogfQpJbmRleDoga2h0bWwv
ZG9tL2RvbV9zdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9kb20vZG9tX3N0cmluZy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1CmRpZmYgLXAg
LXUgLXIxLjE1IGtodG1sL2RvbS9kb21fc3RyaW5nLmgKLS0tIGtodG1sL2RvbS9kb21fc3RyaW5n
LmgJMjkgQXVnIDIwMDUgMjE6Mjk6MTEgLTAwMDAJMS4xNQorKysga2h0bWwvZG9tL2RvbV9zdHJp
bmcuaAk1IFNlcCAyMDA1IDE4OjA5OjA4IC0wMDAwCkBAIC0yMCwyMCArMjAsMTQgQEAKICAqIEJv
c3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICoKICAqLwotI2lmbmRlZiBfRE9NX0RPTVN0cmlu
Z19oXwotI2RlZmluZSBfRE9NX0RPTVN0cmluZ19oXwogCi0jaW5jbHVkZSA8cXN0cmluZy5oPgot
I2luY2x1ZGUgPHhtbC9kb21fc3RyaW5naW1wbC5oPgorI2lmbmRlZiBET01fRE9NU1RSSU5HX0gK
KyNkZWZpbmUgRE9NX0RPTVNUUklOR19ICiAKLW5hbWVzcGFjZSBraHRtbCB7Ci0gICAgY2xhc3Mg
TGVuZ3RoOwotfQorI2luY2x1ZGUgPHhtbC9kb21fc3RyaW5naW1wbC5oPgogCiBuYW1lc3BhY2Ug
RE9NIHsKIAotY2xhc3MgRE9NU3RyaW5nSW1wbDsKLQogLyoqCiAgKiBUaGlzIGNsYXNzIGltcGxl
bWVudHMgdGhlIGJhc2ljIHN0cmluZyB3ZSB1c2UgaW4gdGhlIERPTS4gV2UgZG8gbm90IHVzZQog
ICogUVN0cmluZyBmb3IgMiByZWFzb25zOiBNZW1vcnkgb3ZlcmhlYWQsIGFuZCB0aGUgbWlzc2lu
ZyBleHBsaWNpdCBzaGFyaW5nCkBAIC00NSw1MSArMzksNDcgQEAgY2xhc3MgRE9NU3RyaW5nSW1w
bDsKICAqLwogY2xhc3MgRE9NU3RyaW5nCiB7Ci0gICAgZnJpZW5kIGNsYXNzIENoYXJhY3RlckRh
dGFJbXBsOwotICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oIGNvbnN0IERPTVN0cmluZyAmYSwg
Y29uc3QgY2hhciAqYiApOwotICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oIGNvbnN0IERPTVN0
cmluZyAmYSwgY29uc3QgRE9NU3RyaW5nICZiICk7CiBwdWJsaWM6CiAgICAgLyoqCi0gICAgICog
ZGVmYXVsdCBjb25zdHJ1Y3Rvci4gR2l2ZXMgYW4gZW1wdHkgRE9NU3RyaW5nCisgICAgICogRGVm
YXVsdCBjb25zdHJ1Y3Rvci4gR2l2ZXMgYSAibnVsbCIgRE9NU3RyaW5nCiAgICAgICovCi0gICAg
RE9NU3RyaW5nKCkgOiBtX2ltcGwoMCkgeyB9CisgICAgRE9NU3RyaW5nKCkgOiBtX2ltcGwoTlVM
TCkgeyB9CiAKICAgICBET01TdHJpbmcoY29uc3QgUUNoYXIgKnN0ciwgdWludCBsZW4pOwogICAg
IERPTVN0cmluZyhjb25zdCBRU3RyaW5nICYpOwotICAgIERPTVN0cmluZyhjb25zdCBjaGFyICpz
dHIpOwotICAgIERPTVN0cmluZyhET01TdHJpbmdJbXBsICppKTsKLSAgICB+RE9NU3RyaW5nKCkg
eyBpZihtX2ltcGwpIG1faW1wbC0+ZGVyZWYoKTsgfQotCisgICAgRE9NU3RyaW5nKGNvbnN0IGNo
YXIgKik7CisgICAgRE9NU3RyaW5nKERPTVN0cmluZ0ltcGwgKik7CisgICAgfkRPTVN0cmluZygp
IHsgaWYgKERPTVN0cmluZ0ltcGwgKmkgPSBtX2ltcGwpIGktPmRlcmVmKCk7IH0KIAogICAgIC8v
IGFzc2lnbiBhbmQgY29weQotICAgIERPTVN0cmluZyhjb25zdCBET01TdHJpbmcgJnN0cik7Ci0g
ICAgRE9NU3RyaW5nICZvcGVyYXRvciA9KGNvbnN0IERPTVN0cmluZyAmc3RyKTsKKyAgICBET01T
dHJpbmcoY29uc3QgRE9NU3RyaW5nICYpOworICAgIERPTVN0cmluZyAmb3BlcmF0b3IgPShjb25z
dCBET01TdHJpbmcgJik7CiAKICAgICAvKioKICAgICAgKiBhcHBlbmQgc3RyIHRvIHRoaXMgc3Ry
aW5nCiAgICAgICovCi0gICAgRE9NU3RyaW5nICZvcGVyYXRvciArPSAoY29uc3QgRE9NU3RyaW5n
ICZzdHIpOworICAgIERPTVN0cmluZyAmb3BlcmF0b3IgKz0oY29uc3QgRE9NU3RyaW5nICZzdHIp
OwogCi0gICAgdm9pZCBpbnNlcnQoRE9NU3RyaW5nIHN0ciwgdWludCBwb3MpOworICAgIHZvaWQg
aW5zZXJ0KGNvbnN0IERPTVN0cmluZyAmc3RyLCB1aW50IHBvcyk7CiAKICAgICAvKioKICAgICAg
KiBUaGUgY2hhcmFjdGVyIGF0IHBvc2l0aW9uIGkgb2YgdGhlIERPTVN0cmluZy4gSWYgaSA+PSBs
ZW5ndGgoKSwgdGhlCiAgICAgICogY2hhcmFjdGVyIHJldHVybmVkIHdpbGwgYmUgMC4KICAgICAg
Ki8KLSAgICBjb25zdCBRQ2hhciAmb3BlcmF0b3IgW10odW5zaWduZWQgaW50IGkpIGNvbnN0Owor
ICAgIGNvbnN0IFFDaGFyICZvcGVyYXRvciBbXSh1aW50IGkpIGNvbnN0OwogCiAgICAgaW50IGZp
bmQoY29uc3QgUUNoYXIgYywgaW50IHN0YXJ0ID0gMCkgY29uc3Q7CiAKICAgICB1aW50IGxlbmd0
aCgpIGNvbnN0OwotICAgIHZvaWQgdHJ1bmNhdGUoIHVuc2lnbmVkIGludCBsZW4gKTsKLSAgICB2
b2lkIHJlbW92ZSh1bnNpZ25lZCBpbnQgcG9zLCBpbnQgbGVuPTEpOworICAgIHZvaWQgdHJ1bmNh
dGUodWludCBsZW4pOworICAgIHZvaWQgcmVtb3ZlKHVpbnQgcG9zLCBpbnQgbGVuPTEpOwogCi0g
ICAgRE9NU3RyaW5nIHN1YnN0cmluZyh1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgbGVu
KSBjb25zdDsKKyAgICBET01TdHJpbmcgc3Vic3RyaW5nKHVpbnQgcG9zLCB1aW50IGxlbikgY29u
c3Q7CiAKICAgICAvKioKICAgICAgKiBTcGxpdHMgdGhlIHN0cmluZyBpbnRvIHR3by4gVGhlIG9y
aWdpbmFsIHN0cmluZyBnZXRzIHRydW5jYXRlZCB0byBwb3MsIGFuZCB0aGUgcmVzdCBpcyByZXR1
cm5lZC4KICAgICAgKi8KLSAgICBET01TdHJpbmcgc3BsaXQodW5zaWduZWQgaW50IHBvcyk7Cisg
ICAgRE9NU3RyaW5nIHNwbGl0KHVpbnQgcG9zKTsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMg
YSBsb3dlcmNhc2UgdmVyc2lvbiBvZiB0aGUgc3RyaW5nCkBAIC0xMDQsMTggKzk0LDE3IEBAIHB1
YmxpYzoKICAgICBRU3RyaW5nIHFzdHJpbmcoKSBjb25zdDsKIAogICAgIGludCB0b0ludCgpIGNv
bnN0OwotICAgIGtodG1sOjpMZW5ndGgqIHRvTGVuZ3RoQXJyYXkoaW50JiBsZW4pIGNvbnN0Owot
ICAgIGtodG1sOjpMZW5ndGgqIHRvQ29vcmRzQXJyYXkoaW50JiBsZW4pIGNvbnN0OwotICAgIGJv
b2wgcGVyY2VudGFnZShpbnQgJl9wZXJjZW50YWdlKSBjb25zdDsKKyAgICBraHRtbDo6TGVuZ3Ro
ICp0b0xlbmd0aEFycmF5KGludCAmbGVuKSBjb25zdDsKKyAgICBraHRtbDo6TGVuZ3RoICp0b0Nv
b3Jkc0FycmF5KGludCAmbGVuKSBjb25zdDsKKyAgICBib29sIHBlcmNlbnRhZ2UoaW50ICZyZXN1
bHQpIGNvbnN0OwogCiAgICAgRE9NU3RyaW5nIGNvcHkoKSBjb25zdDsKIAotICAgIGJvb2wgaXNO
dWxsKCkgIGNvbnN0IHsgcmV0dXJuIChtX2ltcGwgPT0gMCk7IH0KKyAgICBib29sIGlzTnVsbCgp
ICBjb25zdCB7IHJldHVybiBtX2ltcGwgPT0gMDsgfQogICAgIGJvb2wgaXNFbXB0eSgpICBjb25z
dDsKIAogICAgIC8qKgotICAgICAqIEBpbnRlcm5hbCBnZXQgYSBoYW5kbGUgdG8gdGhlIGltbGVt
ZW50YXRpb24gb2YgdGhlIERPTVN0cmluZwotICAgICAqIFVzZSBhdCBvd24gcmlzayEhIQorICAg
ICAqIEBpbnRlcm5hbCBnZXQgYSBoYW5kbGUgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBE
T01TdHJpbmcKICAgICAgKi8KICAgICBET01TdHJpbmdJbXBsICppbXBsKCkgY29uc3QgeyByZXR1
cm4gbV9pbXBsOyB9CiAKQEAgLTEyOSwyNSArMTE4LDEzMiBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
Y2hhciAqYXNjaWkoKSBjb25zdDsKICNlbmRpZgogCi1wcm90ZWN0ZWQ6Citwcml2YXRlOgogICAg
IERPTVN0cmluZ0ltcGwgKm1faW1wbDsKIH07CiAKLURPTVN0cmluZyBvcGVyYXRvciArIChjb25z
dCBET01TdHJpbmcgJmEsIGNvbnN0IERPTVN0cmluZyAmYik7Ci1ib29sIG9wZXJhdG9yPT0oIGNv
bnN0IERPTVN0cmluZyAmYSwgY29uc3QgUVN0cmluZyAmYiApOwotYm9vbCBvcGVyYXRvcj09KCBj
b25zdCBET01TdHJpbmcgJmEsIGNvbnN0IGNoYXIgKmIgKTsKLWlubGluZSBib29sIG9wZXJhdG9y
PT0oIGNvbnN0IFFTdHJpbmcgJmIsIGNvbnN0IERPTVN0cmluZyAmYSApIHsgcmV0dXJuIGEgPT0g
YjsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgY2hhciAqYiwgY29uc3QgRE9NU3Ry
aW5nICZhICkgeyByZXR1cm4gYSA9PSBiOyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KCBjb25z
dCBET01TdHJpbmcgJmEsIGNvbnN0IERPTVN0cmluZyAmYiApIHsgcmV0dXJuICEoYT09Yik7IH0K
LWlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IERPTVN0cmluZyAmYSwgY29uc3QgUVN0cmlu
ZyAmYiApIHsgcmV0dXJuICEoYT09Yik7IH0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0
IERPTVN0cmluZyAmYSwgY29uc3QgY2hhciAqYiApICB7IHJldHVybiAhKGE9PWIpOyB9Ci1pbmxp
bmUgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRU3RyaW5nICZiLCBjb25zdCBET01TdHJpbmcgJmEg
KSB7IHJldHVybiAhKGE9PWIpOyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBjaGFy
ICpiLCBjb25zdCBET01TdHJpbmcgJmEgKSAgeyByZXR1cm4gIShhPT1iKTsgfQotaW5saW5lIGJv
b2wgc3RyY21wKCBjb25zdCBET01TdHJpbmcgJmEsIGNvbnN0IERPTVN0cmluZyAmYiApIHsgcmV0
dXJuIGEgIT0gYjsgfQotCi0vLyByZXR1cm5zIGZhbHNlIHdoZW4gZXF1YWwsIHRydWUgb3RoZXJ3
aXNlIChpZ25vcmluZyBjYXNlKQotYm9vbCBzdHJjYXNlY21wKCBjb25zdCBET01TdHJpbmcgJmEs
IGNvbnN0IERPTVN0cmluZyAmYiApOwotYm9vbCBzdHJjYXNlY21wKCBjb25zdCBET01TdHJpbmcm
IGEsIGNvbnN0IGNoYXIqIGIgKTsKK0RPTVN0cmluZyBvcGVyYXRvciArKGNvbnN0IERPTVN0cmlu
ZyAmYSwgY29uc3QgRE9NU3RyaW5nICZiKTsKKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IERPTVN0
cmluZyAmYSwgY29uc3QgRE9NU3RyaW5nICZiKTsKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBET01T
dHJpbmcgJmEsIGNvbnN0IFFTdHJpbmcgJmIpOworYm9vbCBvcGVyYXRvcj09KGNvbnN0IERPTVN0
cmluZyAmYSwgY29uc3QgY2hhciAqYik7CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFFT
dHJpbmcgJmIsIGNvbnN0IERPTVN0cmluZyAmYSkgeyByZXR1cm4gYSA9PSBiOyB9CitpbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IGNoYXIgKmIsIGNvbnN0IERPTVN0cmluZyAmYSkgeyByZXR1
cm4gYSA9PSBiOyB9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRE9NU3RyaW5nICZh
LCBjb25zdCBET01TdHJpbmcgJmIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQoraW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBET01TdHJpbmcgJmEsIGNvbnN0IFFTdHJpbmcgJmIpIHsgcmV0dXJu
ICEoYSA9PSBiKTsgfQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBRU3RyaW5nICZiLCBj
b25zdCBET01TdHJpbmcgJmEpIHsgcmV0dXJuICEoYiA9PSBhKTsgfQoraW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBET01TdHJpbmcgJmEsIGNvbnN0IGNoYXIgKmIpICB7IHJldHVybiAhKGEg
PT0gYik7IH0KK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgY2hhciAqYiwgY29uc3QgRE9N
U3RyaW5nICZhKSAgeyByZXR1cm4gIShiID09IGEpOyB9CisKK2Jvb2wgZXF1YWxzSWdub3JpbmdD
YXNlKGNvbnN0IERPTVN0cmluZyAmLCBjb25zdCBET01TdHJpbmcgJmIpOworYm9vbCBlcXVhbHNJ
Z25vcmluZ0Nhc2UoY29uc3QgRE9NU3RyaW5nICYsIGNvbnN0IGNoYXIgKmIpOworaW5saW5lIGJv
b2wgZXF1YWxzSWdub3JpbmdDYXNlKGNvbnN0IGNoYXIgKmEsIGNvbnN0IERPTVN0cmluZyAmYikg
eyByZXR1cm4gYiA9PSBhOyB9CisKK2lubGluZSBET01TdHJpbmc6OkRPTVN0cmluZyhET01TdHJp
bmdJbXBsICppKQoreworICAgIGlmIChpKQorICAgICAgICBpLT5yZWYoKTsKKyAgICBtX2ltcGwg
PSBpOworfQorCitpbmxpbmUgRE9NU3RyaW5nOjpET01TdHJpbmcoY29uc3QgRE9NU3RyaW5nICZv
dGhlcikKK3sKKyAgICBET01TdHJpbmdJbXBsICppID0gb3RoZXIubV9pbXBsOworICAgIGlmIChp
KQorICAgICAgICBpLT5yZWYoKTsKKyAgICBtX2ltcGwgPSBpOworfQorCitpbmxpbmUgRE9NU3Ry
aW5nICZET01TdHJpbmc6Om9wZXJhdG9yID0oY29uc3QgRE9NU3RyaW5nICZvdGhlcikKK3sKKyAg
ICBET01TdHJpbmdJbXBsICppID0gb3RoZXIubV9pbXBsOworICAgIGlmIChpKQorICAgICAgICBp
LT5yZWYoKTsKKyAgICBET01TdHJpbmdJbXBsICpvbGQgPSBtX2ltcGw7CisgICAgaWYgKG9sZCkK
KyAgICAgICAgb2xkLT5kZXJlZigpOworICAgIG1faW1wbCA9IGk7CisgICAgcmV0dXJuICp0aGlz
OworfQorCitpbmxpbmUgdWludCBET01TdHJpbmc6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgRE9N
U3RyaW5nSW1wbCAqaW1wbCA9IG1faW1wbDsKKyAgICByZXR1cm4gaW1wbCA/IGltcGwtPmwgOiAw
OworfQorCitpbmxpbmUgUUNoYXIgKkRPTVN0cmluZzo6dW5pY29kZSgpIGNvbnN0Cit7CisgICAg
RE9NU3RyaW5nSW1wbCAqaW1wbCA9IG1faW1wbDsKKyAgICByZXR1cm4gaW1wbCA/IGltcGwtPnMg
OiAwOworfQorCitpbmxpbmUgdm9pZCBET01TdHJpbmc6OnRydW5jYXRlKHVpbnQgbGVuKQorewor
ICAgIGlmIChET01TdHJpbmdJbXBsICppbXBsID0gbV9pbXBsKQorICAgICAgICBpbXBsLT50cnVu
Y2F0ZShsZW4pOworfQorCitpbmxpbmUgdm9pZCBET01TdHJpbmc6OnJlbW92ZSh1aW50IHBvcywg
aW50IGxlbikKK3sKKyAgICBpZiAoRE9NU3RyaW5nSW1wbCAqaW1wbCA9IG1faW1wbCkKKyAgICAg
ICAgaW1wbC0+cmVtb3ZlKHBvcywgbGVuKTsKK30KKworaW5saW5lIERPTVN0cmluZyBET01TdHJp
bmc6OnN1YnN0cmluZyh1aW50IHBvcywgdWludCBsZW4pIGNvbnN0Cit7CisgICAgRE9NU3RyaW5n
SW1wbCAqaW1wbCA9IG1faW1wbDsKKyAgICByZXR1cm4gaW1wbCA/IGltcGwtPnN1YnN0cmluZyhw
b3MsIGxlbikgOiBET01TdHJpbmcoKTsKK30KKworaW5saW5lIERPTVN0cmluZyBET01TdHJpbmc6
OnNwbGl0KHVpbnQgcG9zKQoreworICAgIERPTVN0cmluZ0ltcGwgKmltcGwgPSBtX2ltcGw7Cisg
ICAgcmV0dXJuIGltcGwgPyBpbXBsLT5zcGxpdChwb3MpIDogRE9NU3RyaW5nKCk7Cit9CisKK2lu
bGluZSBET01TdHJpbmcgRE9NU3RyaW5nOjpsb3dlcigpIGNvbnN0Cit7CisgICAgRE9NU3RyaW5n
SW1wbCAqaW1wbCA9IG1faW1wbDsKKyAgICByZXR1cm4gaW1wbCA/IGltcGwtPmxvd2VyKCkgOiBE
T01TdHJpbmcoKTsKK30KKworaW5saW5lIERPTVN0cmluZyBET01TdHJpbmc6OnVwcGVyKCkgY29u
c3QKK3sKKyAgICBET01TdHJpbmdJbXBsICppbXBsID0gbV9pbXBsOworICAgIHJldHVybiBpbXBs
ID8gaW1wbC0+dXBwZXIoKSA6IERPTVN0cmluZygpOworfQorCitpbmxpbmUgaW50IERPTVN0cmlu
Zzo6dG9JbnQoKSBjb25zdAoreworICAgIERPTVN0cmluZ0ltcGwgKmltcGwgPSBtX2ltcGw7Cisg
ICAgcmV0dXJuIGltcGwgPyBpbXBsLT50b0ludCgpIDogMDsKK30KKworaW5saW5lIERPTVN0cmlu
ZyBET01TdHJpbmc6OmNvcHkoKSBjb25zdAoreworICAgIERPTVN0cmluZ0ltcGwgKmltcGwgPSBt
X2ltcGw7CisgICAgcmV0dXJuIGltcGwgPyBpbXBsLT5jb3B5KCkgOiAwOworfQorCitpbmxpbmUg
Ym9vbCBET01TdHJpbmc6OmlzRW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiBsZW5ndGgoKSA9
PSAwOworfQorCitpbmxpbmUga2h0bWw6Okxlbmd0aCAqRE9NU3RyaW5nOjp0b0Nvb3Jkc0FycmF5
KGludCYgbGVuKSBjb25zdCAKK3sgCisgICAgRE9NU3RyaW5nSW1wbCAqaW1wbCA9IG1faW1wbDsK
KyAgICByZXR1cm4gaW1wbCA/IGltcGwtPnRvQ29vcmRzQXJyYXkobGVuKSA6IE5VTEw7Cit9CisK
K2lubGluZSBraHRtbDo6TGVuZ3RoICpET01TdHJpbmc6OnRvTGVuZ3RoQXJyYXkoaW50JiBsZW4p
IGNvbnN0IAoreyAKKyAgICBET01TdHJpbmdJbXBsICppbXBsID0gbV9pbXBsOworICAgIHJldHVy
biBpbXBsID8gaW1wbC0+dG9MZW5ndGhBcnJheShsZW4pIDogTlVMTDsKK30KKworfQogCi19Owog
I2VuZGlmCkluZGV4OiBraHRtbC9lY21hL2tqc19odG1sLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xMzgKZGlmZiAtcCAtdSAtcjEuMTM4IGtodG1sL2VjbWEva2pzX2h0bWwuY3Bw
Ci0tLSBraHRtbC9lY21hL2tqc19odG1sLmNwcAkyOSBBdWcgMjAwNSAyMToyOToxMiAtMDAwMAkx
LjEzOAorKysga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAJNSBTZXAgMjAwNSAxODowOToxNSAtMDAw
MApAQCAtNDg4LDkgKzQ4OCw5IEBAIHZvaWQgS0pTOjpIVE1MRG9jdW1lbnQ6OnB1dFZhbHVlUHJv
cGVydHkKICAgICB7CiAgICAgICBET01TdHJpbmcgbW9kZVN0cmluZyA9IHZhbHVlLT50b1N0cmlu
ZyhleGVjKS5kb21TdHJpbmcoKTsKICAgICAgIERvY3VtZW50SW1wbDo6SW5oZXJpdGVkQm9vbCBt
b2RlOwotICAgICAgaWYgKCFzdHJjYXNlY21wKG1vZGVTdHJpbmcsICJvbiIpKQorICAgICAgaWYg
KGVxdWFsc0lnbm9yaW5nQ2FzZShtb2RlU3RyaW5nLCAib24iKSkKICAgICAgICAgbW9kZSA9IERv
Y3VtZW50SW1wbDo6b247Ci0gICAgICBlbHNlIGlmICghc3RyY2FzZWNtcChtb2RlU3RyaW5nLCAi
b2ZmIikpCisgICAgICBlbHNlIGlmIChlcXVhbHNJZ25vcmluZ0Nhc2UobW9kZVN0cmluZywgIm9m
ZiIpKQogICAgICAgICBtb2RlID0gRG9jdW1lbnRJbXBsOjpvZmY7CiAgICAgICBlbHNlCiAgICAg
ICAgIG1vZGUgPSBEb2N1bWVudEltcGw6OmluaGVyaXQ7CkluZGV4OiBraHRtbC9lZGl0aW5nL2Fw
cGx5X3N0eWxlX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMTIKZGlmZiAtcCAtdSAtcjEuMTIga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9j
b21tYW5kLmNwcAotLS0ga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAkyIFNl
cCAyMDA1IDE2OjQ1OjM4IC0wMDAwCTEuMTIKKysrIGtodG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVf
Y29tbWFuZC5jcHAJNSBTZXAgMjAwNSAxODowOToxNiAtMDAwMApAQCAtMTcwLDEzICsxNzAsMTMg
QEAgYm9vbCBTdHlsZUNoYW5nZTo6Y2hlY2tGb3JMZWdhY3lIVE1MU3R5bAogICAgIERPTVN0cmlu
ZyB2YWx1ZVRleHQocHJvcGVydHktPnZhbHVlKCktPmNzc1RleHQoKSk7CiAgICAgc3dpdGNoIChw
cm9wZXJ0eS0+aWQoKSkgewogICAgICAgICBjYXNlIENTU19QUk9QX0ZPTlRfV0VJR0hUOgotICAg
ICAgICAgICAgaWYgKHN0cmNhc2VjbXAodmFsdWVUZXh0LCAiYm9sZCIpID09IDApIHsKKyAgICAg
ICAgICAgIGlmIChlcXVhbHNJZ25vcmluZ0Nhc2UodmFsdWVUZXh0LCAiYm9sZCIpKSB7CiAgICAg
ICAgICAgICAgICAgbV9hcHBseUJvbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NT
X1BST1BfRk9OVF9TVFlMRToKLSAgICAgICAgICAgIGlmIChzdHJjYXNlY21wKHZhbHVlVGV4dCwg
Iml0YWxpYyIpID09IDAgfHwgc3RyY2FzZWNtcCh2YWx1ZVRleHQsICJvYmxpcXVlIikgPT0gMCkg
eworICAgICAgICAgICAgaWYgKGVxdWFsc0lnbm9yaW5nQ2FzZSh2YWx1ZVRleHQsICJpdGFsaWMi
KSB8fCBlcXVhbHNJZ25vcmluZ0Nhc2UodmFsdWVUZXh0LCAib2JsaXF1ZSIpKSB7CiAgICAgICAg
ICAgICAgICAgbV9hcHBseUl0YWxpYyA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICB9CkBAIC0yMjcsNyArMjI3LDcgQEAgYm9vbCBTdHlsZUNoYW5nZTo6
Y3VycmVudGx5SGFzU3R5bGUoY29ucwogICAgIFNoYXJlZFB0cjxDU1NWYWx1ZUltcGw+IHZhbHVl
ID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHktPmlkKCksIERvTm90VXBkYXRl
TGF5b3V0KTsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0
dXJuIHN0cmNhc2VjbXAodmFsdWUtPmNzc1RleHQoKSwgcHJvcGVydHktPnZhbHVlKCktPmNzc1Rl
eHQoKSkgPT0gMDsKKyAgICByZXR1cm4gZXF1YWxzSWdub3JpbmdDYXNlKHZhbHVlLT5jc3NUZXh0
KCksIHByb3BlcnR5LT52YWx1ZSgpLT5jc3NUZXh0KCkpOwogfQogCiBzdGF0aWMgRE9NU3RyaW5n
ICZzdHlsZVNwYW5DbGFzc1N0cmluZygpCkBAIC02ODksNyArNjg5LDcgQEAgc3RhdGljIGJvb2wg
aGFzVGV4dERlY29yYXRpb25Qcm9wZXJ0eShObwogICAgIEVsZW1lbnRJbXBsICplbGVtZW50ID0g
c3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obm9kZSk7CiAgICAgQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uSW1wbCBzdHlsZShlbGVtZW50KTsKICAgICBTaGFyZWRQdHI8Q1NTVmFsdWVJbXBs
PiB2YWx1ZSA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTX1BST1BfVEVYVF9ERUNPUkFU
SU9OLCBEb05vdFVwZGF0ZUxheW91dCk7Ci0gICAgcmV0dXJuIHZhbHVlICYmIHN0cmNhc2VjbXAo
dmFsdWUtPmNzc1RleHQoKSwgIm5vbmUiKSAhPSAwOworICAgIHJldHVybiB2YWx1ZSAmJiAhZXF1
YWxzSWdub3JpbmdDYXNlKHZhbHVlLT5jc3NUZXh0KCksICJub25lIik7CiB9CiAKIHN0YXRpYyBO
b2RlSW1wbCogaGlnaGVzdEFuY2VzdG9yV2l0aFRleHREZWNvcmF0aW9uKE5vZGVJbXBsICpub2Rl
KQpAQCAtNzIyLDcgKzcyMiw3IEBAIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqQXBw
bHlTdHkKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKnRleHREZWNvcmF0aW9u
U3R5bGUgPSBzdHlsZS0+Y29weVByb3BlcnRpZXNJblNldChwcm9wZXJ0aWVzLCAxKTsKIAogICAg
IFNoYXJlZFB0cjxDU1NWYWx1ZUltcGw+IHByb3BlcnR5ID0gc3R5bGUtPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTX1BST1BfVEVYVF9ERUNPUkFUSU9OKTsKLSAgICBpZiAocHJvcGVydHkgJiYgc3Ry
Y2FzZWNtcChwcm9wZXJ0eS0+Y3NzVGV4dCgpLCAibm9uZSIpICE9IDApCisgICAgaWYgKHByb3Bl
cnR5ICYmICFlcXVhbHNJZ25vcmluZ0Nhc2UocHJvcGVydHktPmNzc1RleHQoKSwgIm5vbmUiKSkK
ICAgICAgICAgcmVtb3ZlQ1NTUHJvcGVydHkoc3R5bGUuZ2V0KCksIENTU19QUk9QX1RFWFRfREVD
T1JBVElPTik7CiAKICAgICByZXR1cm4gdGV4dERlY29yYXRpb25TdHlsZTsKQEAgLTc0NSw3ICs3
NDUsNyBAQCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKkFwcGx5U3R5CiAgICAgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICp0ZXh0RGVjb3JhdGlvblN0eWxlID0gY29tcHV0
ZWRTdHlsZS0+Y29weVByb3BlcnRpZXNJblNldChwcm9wZXJ0aWVzLCAxKTsKIAogICAgIFNoYXJl
ZFB0cjxDU1NWYWx1ZUltcGw+IHByb3BlcnR5ID0gY29tcHV0ZWRTdHlsZS0+Z2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NfUFJPUF9URVhUX0RFQ09SQVRJT04pOwotICAgIGlmIChwcm9wZXJ0eSAmJiBz
dHJjYXNlY21wKHByb3BlcnR5LT5jc3NUZXh0KCksICJub25lIikgIT0gMCkgeworICAgIGlmIChw
cm9wZXJ0eSAmJiAhZXF1YWxzSWdub3JpbmdDYXNlKHByb3BlcnR5LT5jc3NUZXh0KCksICJub25l
IikpIHsKICAgICAgICAgU2hhcmVkUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbD4g
bmV3U3R5bGUgPSB0ZXh0RGVjb3JhdGlvblN0eWxlLT5jb3B5KCk7CiAgICAgICAgIG5ld1N0eWxl
LT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9URVhUX0RFQ09SQVRJT04sICJub25lIik7CiAgICAgICAg
IGFwcGx5VGV4dERlY29yYXRpb25TdHlsZShub2RlLCBuZXdTdHlsZS5nZXQoKSk7CkluZGV4OiBr
aHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuODAKZGlmZiAtcCAtdSAtcjEuODAga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAot
LS0ga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAkzMSBBdWcgMjAwNSAwNDozODozOCAtMDAw
MAkxLjgwCisrKyBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCTUgU2VwIDIwMDUgMTg6MDk6
MTggLTAwMDAKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEhUTUxCb2R5RWxlbWVudEltcGw6OnBh
cnNlTWFwcGVkQXR0CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdGV4dEF0dHIpIHsK
ICAgICAgICAgYWRkQ1NTQ29sb3IoYXR0ciwgQ1NTX1BST1BfQ09MT1IsIGF0dHItPnZhbHVlKCkp
OwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGJncHJvcGVydGllc0F0dHIpIHsKLSAg
ICAgICAgaWYgKHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJmaXhlZCIgKSA9PSAwKQorICAg
ICAgICBpZiAoZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAiZml4ZWQiICkpCiAg
ICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CQUNLR1JPVU5EX0FUVEFD
SE1FTlQsIENTU19WQUxfRklYRUQpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZs
aW5rQXR0ciB8fAogICAgICAgICAgICAgICAgYXR0ci0+bmFtZSgpID09IGFsaW5rQXR0ciB8fApA
QCAtNDEzLDEwICs0MTMsMTAgQEAgdm9pZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6cGFyc2VNYXBw
ZWRBdAogICAgICAgICBrZERlYnVnKCA2MDMxICkgPDwgInNldCBzY3JvbGwgbW9kZSIgPDwgZW5k
bDsKIAkvLyBBdXRvIGFuZCB5ZXMgYm90aCBzaW1wbHkgbWVhbiAiYWxsb3cgc2Nyb2xsaW5nLiIg
IE5vIG1lYW5zCiAJLy8gImRvbid0IGFsbG93IHNjcm9sbGluZy4iCi0gICAgICAgIGlmKCBzdHJj
YXNlY21wKCBhdHRyLT52YWx1ZSgpLCAiYXV0byIgKSA9PSAwIHx8Ci0gICAgICAgICAgICBzdHJj
YXNlY21wKCBhdHRyLT52YWx1ZSgpLCAieWVzIiApID09IDAgKQorICAgICAgICBpZiggZXF1YWxz
SWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAiYXV0byIgKSB8fAorICAgICAgICAgICAgZXF1
YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAieWVzIiApICkKICAgICAgICAgICAgIG1f
c2Nyb2xsaW5nID0gUVNjcm9sbFZpZXc6OkF1dG87Ci0gICAgICAgIGVsc2UgaWYoIHN0cmNhc2Vj
bXAoIGF0dHItPnZhbHVlKCksICJubyIgKSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiggZXF1YWxz
SWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAibm8iICkgKQogICAgICAgICAgICAgbV9zY3Jv
bGxpbmcgPSBRU2Nyb2xsVmlldzo6QWx3YXlzT2ZmOwogICAgICAgICAvLyBGSVhNRTogSWYgd2Ug
YXJlIGFscmVhZHkgYXR0YWNoZWQsIHRoaXMgaGFzIG5vIGVmZmVjdC4KICAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBvbmxvYWRBdHRyKSB7CkluZGV4OiBraHRtbC9odG1sL2h0bWxfYmxv
Y2tpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfYmxvY2tpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNApkaWZmIC1w
IC11IC1yMS4yNCBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9o
dG1sX2Jsb2NraW1wbC5jcHAJMjkgQXVnIDIwMDUgMjE6Mjk6MTYgLTAwMDAJMS4yNAorKysga2h0
bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAJNSBTZXAgMjAwNSAxODowOToxOCAtMDAwMApAQCAt
NzksMTEgKzc5LDExIEBAIHZvaWQgSFRNTERpdkVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHIK
IHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0cikgewogICAgICAgICBET01TdHJp
bmcgdiA9IGF0dHItPnZhbHVlKCk7Ci0JaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAi
bWlkZGxlIiApID09IDAgfHwgc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgImNlbnRlciIgKSA9
PSAwICkKKwlpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgIm1pZGRsZSIg
KSB8fCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJjZW50ZXIiICkgKQogICAg
ICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFM
X19LSFRNTF9DRU5URVIpOwotICAgICAgICBlbHNlIGlmIChzdHJjYXNlY21wKGF0dHItPnZhbHVl
KCksICJsZWZ0IikgPT0gMCkKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxzSWdub3JpbmdDYXNlKGF0
dHItPnZhbHVlKCksICJsZWZ0IikpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBD
U1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19LSFRNTF9MRUZUKTsKLSAgICAgICAgZWxzZSBp
ZiAoc3RyY2FzZWNtcChhdHRyLT52YWx1ZSgpLCAicmlnaHQiKSA9PSAwKQorICAgICAgICBlbHNl
IGlmIChlcXVhbHNJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInJpZ2h0IikpCiAgICAgICAg
ICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19L
SFRNTF9SSUdIVCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0
dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIHYpOwpAQCAtMTI4LDExICsxMjgsMTEgQEAgYm9vbCBI
VE1MSFJFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShjb25zdAogdm9pZCBIVE1MSFJFbGVtZW50SW1w
bDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0cikgewotICAgICAgICBpZiAoc3RyY2FzZWNt
cChhdHRyLT52YWx1ZSgpLCAibGVmdCIpID09IDApIHsKKyAgICAgICAgaWYgKGVxdWFsc0lnbm9y
aW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAibGVmdCIpKSB7CiAgICAgICAgICAgICBhZGRDU1NQcm9w
ZXJ0eShhdHRyLCBDU1NfUFJPUF9NQVJHSU5fTEVGVCwgIjAiKTsKIAkgICAgYWRkQ1NTUHJvcGVy
dHkoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX1JJR0hULCBDU1NfVkFMX0FVVE8pOwogCX0KLSAgICAg
ICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhdHRyLT52YWx1ZSgpLCAicmlnaHQiKSA9PSAwKSB7Cisg
ICAgICAgIGVsc2UgaWYgKGVxdWFsc0lnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAicmlnaHQi
KSkgewogCSAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9NQVJHSU5fTEVGVCwgQ1NT
X1ZBTF9BVVRPKTsKIAkgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX1JJ
R0hULCAiMCIpOwogCX0KQEAgLTI2NCwxMSArMjY0LDExIEBAIHZvaWQgSFRNTFBhcmFncmFwaEVs
ZW1lbnRJbXBsOjpwYXJzZU1hcHAKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0
cikgewogICAgICAgICBET01TdHJpbmcgdiA9IGF0dHItPnZhbHVlKCk7Ci0gICAgICAgIGlmICgg
c3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgIm1pZGRsZSIgKSA9PSAwIHx8IHN0cmNhc2VjbXAo
IGF0dHItPnZhbHVlKCksICJjZW50ZXIiICkgPT0gMCApCisgICAgICAgIGlmICggZXF1YWxzSWdu
b3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAibWlkZGxlIiApIHx8IGVxdWFsc0lnbm9yaW5nQ2Fz
ZSggYXR0ci0+dmFsdWUoKSwgImNlbnRlciIgKSApCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0
eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19LSFRNTF9DRU5URVIpOwotICAg
ICAgICBlbHNlIGlmIChzdHJjYXNlY21wKGF0dHItPnZhbHVlKCksICJsZWZ0IikgPT0gMCkKKyAg
ICAgICAgZWxzZSBpZiAoZXF1YWxzSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJsZWZ0Iikp
CiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBD
U1NfVkFMX19LSFRNTF9MRUZUKTsKLSAgICAgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhdHRyLT52
YWx1ZSgpLCAicmlnaHQiKSA9PSAwKQorICAgICAgICBlbHNlIGlmIChlcXVhbHNJZ25vcmluZ0Nh
c2UoYXR0ci0+dmFsdWUoKSwgInJpZ2h0IikpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShh
dHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19LSFRNTF9SSUdIVCk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJ
R04sIHYpOwpAQCAtMzYyLDcgKzM2Miw3IEBAIHZvaWQgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbDo6
cGFyc2VNYXBwZWQKICAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9fS0hU
TUxfTUFSUVVFRV9TUEVFRCwgYXR0ci0+dmFsdWUoKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gbG9vcEF0dHIpIHsKICAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0gIi0xIiB8fCBzdHJjYXNlY21w
KGF0dHItPnZhbHVlKCksICJpbmZpbml0ZSIpID09IDApCisgICAgICAgICAgICBpZiAoYXR0ci0+
dmFsdWUoKSA9PSAiLTEiIHx8IGVxdWFsc0lnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiaW5m
aW5pdGUiKSkKICAgICAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9f
S0hUTUxfTUFSUVVFRV9SRVBFVElUSU9OLCBDU1NfVkFMX0lORklOSVRFKTsKICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfX0tIVE1M
X01BUlFVRUVfUkVQRVRJVElPTiwgYXR0ci0+dmFsdWUoKSk7CkluZGV4OiBraHRtbC9odG1sL2h0
bWxfZG9jdW1lbnRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS42OQpkaWZmIC1wIC11IC1yMS42OSBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAot
LS0ga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAJMjkgQXVnIDIwMDUgMjE6Mjk6MTYg
LTAwMDAJMS42OQorKysga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAJNSBTZXAgMjAw
NSAxODowOToxOCAtMDAwMApAQCAtMjUzLDggKzI1Myw3IEBAIGJvb2wgSFRNTERvY3VtZW50SW1w
bDo6Y2hpbGRBbGxvd2VkKCBOb2QKIEVsZW1lbnRJbXBsICpIVE1MRG9jdW1lbnRJbXBsOjpjcmVh
dGVFbGVtZW50KGNvbnN0IERPTVN0cmluZyAmbmFtZSwgaW50ICZleGNlcHRpb25jb2RlKQogewog
ICAgIC8vIERvIG5vdCBjaGVjayBuYW1lIHZhbGlkaXR5LiAgT3RoZXIgYnJvd3NlcnMgZG9uJ3Qs
IGFuZCBpdCB0YWtlcyB0aW1lLgotICAgIERPTVN0cmluZyBsb3dlck5hbWUobmFtZS5sb3dlcigp
KTsKLSAgICByZXR1cm4gSFRNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVIVE1MRWxlbWVudChBdG9t
aWNTdHJpbmcobG93ZXJOYW1lKSwgdGhpcywgMCwgZmFsc2UpOworICAgIHJldHVybiBIVE1MRWxl
bWVudEZhY3Rvcnk6OmNyZWF0ZUhUTUxFbGVtZW50KEF0b21pY1N0cmluZyhuYW1lLCBsb3dlcmNh
c2VkKSwgdGhpcywgMCwgZmFsc2UpOwogfQogCiB2b2lkIEhUTUxEb2N1bWVudEltcGw6OnNsb3RI
aXN0b3J5Q2hhbmdlZCgpCkluZGV4OiBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9lbGVt
ZW50aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTA0CmRpZmYgLXAgLXUgLXIxLjEw
NCBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfZWxl
bWVudGltcGwuY3BwCTMgU2VwIDIwMDUgMjM6MDk6NTkgLTAwMDAJMS4xMDQKKysrIGtodG1sL2h0
bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAJNSBTZXAgMjAwNSAxODowOToxOSAtMDAwMApAQCAtMTM4
LDcgKzEzOCw3IEBAIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnUKIAog
ICAgIERPTVN0cmluZyBpbmRleHN0cmluZzsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWdu
QXR0cikgewotICAgICAgICBpZiAoc3RyY2FzZWNtcChhdHRyLT52YWx1ZSgpLCAibWlkZGxlIiAp
ID09IDApCisgICAgICAgIGlmIChlcXVhbHNJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgIm1p
ZGRsZSIgKSkKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRf
QUxJR04sICJjZW50ZXIiKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVy
dHkoYXR0ciwgQ1NTX1BST1BfVEVYVF9BTElHTiwgYXR0ci0+dmFsdWUoKSk7CkBAIC00NjEsMjUg
KzQ2MSwyNSBAQCB2b2lkIEhUTUxFbGVtZW50SW1wbDo6YWRkSFRNTEFsaWdubWVudChNCiAgICAg
aW50IHByb3BmbG9hdCA9IC0xOwogICAgIGludCBwcm9wdmFsaWduID0gLTE7CiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBhbGlnbm1lbnQgPSBhdHRyLT52YWx1ZSgpOwotICAgIGlmICggc3RyY2Fz
ZWNtcCggYWxpZ25tZW50LCAiYWJzbWlkZGxlIiApID09IDAgKSB7CisgICAgaWYgKCBlcXVhbHNJ
Z25vcmluZ0Nhc2UoIGFsaWdubWVudCwgImFic21pZGRsZSIgKSApIHsKICAgICAgICAgcHJvcHZh
bGlnbiA9IENTU19WQUxfTUlERExFOwotICAgIH0gZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGFsaWdu
bWVudCwgImFic2JvdHRvbSIgKSA9PSAwICkgeworICAgIH0gZWxzZSBpZiAoIGVxdWFsc0lnbm9y
aW5nQ2FzZSggYWxpZ25tZW50LCAiYWJzYm90dG9tIiApICkgewogICAgICAgICBwcm9wdmFsaWdu
ID0gQ1NTX1ZBTF9CT1RUT007Ci0gICAgfSBlbHNlIGlmICggc3RyY2FzZWNtcCggYWxpZ25tZW50
LCAibGVmdCIgKSA9PSAwICkgeworICAgIH0gZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSgg
YWxpZ25tZW50LCAibGVmdCIgKSApIHsKIAlwcm9wZmxvYXQgPSBDU1NfVkFMX0xFRlQ7CiAJcHJv
cHZhbGlnbiA9IENTU19WQUxfVE9QOwotICAgIH0gZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGFsaWdu
bWVudCwgInJpZ2h0IiApID09IDAgKSB7CisgICAgfSBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdD
YXNlKCBhbGlnbm1lbnQsICJyaWdodCIgKSApIHsKIAlwcm9wZmxvYXQgPSBDU1NfVkFMX1JJR0hU
OwogCXByb3B2YWxpZ24gPSBDU1NfVkFMX1RPUDsKLSAgICB9IGVsc2UgaWYgKCBzdHJjYXNlY21w
KCBhbGlnbm1lbnQsICJ0b3AiICkgPT0gMCApIHsKKyAgICB9IGVsc2UgaWYgKCBlcXVhbHNJZ25v
cmluZ0Nhc2UoIGFsaWdubWVudCwgInRvcCIgKSApIHsKIAlwcm9wdmFsaWduID0gQ1NTX1ZBTF9U
T1A7Ci0gICAgfSBlbHNlIGlmICggc3RyY2FzZWNtcCggYWxpZ25tZW50LCAibWlkZGxlIiApID09
IDAgKSB7CisgICAgfSBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhbGlnbm1lbnQsICJt
aWRkbGUiICkgKSB7CiAJcHJvcHZhbGlnbiA9IENTU19WQUxfX0tIVE1MX0JBU0VMSU5FX01JRERM
RTsKLSAgICB9IGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhbGlnbm1lbnQsICJjZW50ZXIiICkgPT0g
MCApIHsKKyAgICB9IGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGFsaWdubWVudCwgImNl
bnRlciIgKSApIHsKIAlwcm9wdmFsaWduID0gQ1NTX1ZBTF9NSURETEU7Ci0gICAgfSBlbHNlIGlm
ICggc3RyY2FzZWNtcCggYWxpZ25tZW50LCAiYm90dG9tIiApID09IDAgKSB7CisgICAgfSBlbHNl
IGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhbGlnbm1lbnQsICJib3R0b20iICkgKSB7CiAJcHJv
cHZhbGlnbiA9IENTU19WQUxfQkFTRUxJTkU7Ci0gICAgfSBlbHNlIGlmICggc3RyY2FzZWNtcCAo
IGFsaWdubWVudCwgInRleHR0b3AiKSA9PSAwICkgeworICAgIH0gZWxzZSBpZiAoIGVxdWFsc0ln
bm9yaW5nQ2FzZSAoIGFsaWdubWVudCwgInRleHR0b3AiKSApIHsKIAlwcm9wdmFsaWduID0gQ1NT
X1ZBTF9URVhUX1RPUDsKICAgICB9CiAgICAgCkBAIC01MzMsMTcgKzUzMywxNyBAQCB2b2lkIEhU
TUxFbGVtZW50SW1wbDo6c2V0Q29udGVudEVkaXRhYmxlCiB7CiAgICAgS0hUTUxQYXJ0ICpwYXJ0
ID0gZ2V0RG9jdW1lbnQoKS0+cGFydCgpOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZW5hYmxl
ZCA9IGF0dHItPnZhbHVlKCk7Ci0gICAgaWYgKGVuYWJsZWQuaXNFbXB0eSgpIHx8IHN0cmNhc2Vj
bXAoZW5hYmxlZCwgInRydWUiKSA9PSAwKSB7CisgICAgaWYgKGVuYWJsZWQuaXNFbXB0eSgpIHx8
IGVxdWFsc0lnbm9yaW5nQ2FzZShlbmFibGVkLCAidHJ1ZSIpKSB7CiAgICAgICAgIGFkZENTU1By
b3BlcnR5KGF0dHIsIENTU19QUk9QX19LSFRNTF9VU0VSX01PRElGWSwgQ1NTX1ZBTF9SRUFEX1dS
SVRFKTsKICAgICAgICAgaWYgKHBhcnQpCiAgICAgICAgICAgICBwYXJ0LT5hcHBseUVkaXRpbmdT
dHlsZVRvRWxlbWVudCh0aGlzKTsgICAgCiAgICAgfQotICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAo
ZW5hYmxlZCwgImZhbHNlIikgPT0gMCkgeworICAgIGVsc2UgaWYgKGVxdWFsc0lnbm9yaW5nQ2Fz
ZShlbmFibGVkLCAiZmFsc2UiKSkgewogICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1Nf
UFJPUF9fS0hUTUxfVVNFUl9NT0RJRlksIENTU19WQUxfUkVBRF9PTkxZKTsKICAgICAgICAgaWYg
KHBhcnQpCiAgICAgICAgICAgICBwYXJ0LT5yZW1vdmVFZGl0aW5nU3R5bGVGcm9tRWxlbWVudCh0
aGlzKTsgICAgCiAgICAgfQotICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoZW5hYmxlZCwgImluaGVy
aXQiKSA9PSAwKSB7CisgICAgZWxzZSBpZiAoZXF1YWxzSWdub3JpbmdDYXNlKGVuYWJsZWQsICJp
bmhlcml0IikpIHsKICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfX0tIVE1M
X1VTRVJfTU9ESUZZLCBDU1NfVkFMX0lOSEVSSVQpOwogICAgICAgICBpZiAocGFydCkKICAgICAg
ICAgICAgIHBhcnQtPnJlbW92ZUVkaXRpbmdTdHlsZUZyb21FbGVtZW50KHRoaXMpOyAgICAKSW5k
ZXg6IGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xOTIKZGlmZiAtcCAtdSAtcjEuMTkyIGtodG1sL2h0bWwvaHRtbF9mb3JtaW1w
bC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAJMyBTZXAgMjAwNSAyMzowOTo1
OSAtMDAwMAkxLjE5MgorKysga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAk1IFNlcCAyMDA1
IDE4OjA5OjIxIC0wMDAwCkBAIC02NTAsOSArNjUwLDkgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnRJ
bXBsOjpwYXJzZU1hcHBlZEF0dAogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB0YXJnZXRB
dHRyKSB7CiAgICAgICAgIG1fdGFyZ2V0ID0gYXR0ci0+dmFsdWUoKTsKICAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBtZXRob2RBdHRyKSB7Ci0gICAgICAgIGlmICggc3RyY2FzZWNtcCgg
YXR0ci0+dmFsdWUoKSwgInBvc3QiICkgPT0gMCApCisgICAgICAgIGlmICggZXF1YWxzSWdub3Jp
bmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAicG9zdCIgKSApCiAgICAgICAgICAgICBtX3Bvc3QgPSB0
cnVlOwotICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgImdldCIg
KSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFs
dWUoKSwgImdldCIgKSApCiAgICAgICAgICAgICBtX3Bvc3QgPSBmYWxzZTsKICAgICB9IGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBlbmN0eXBlQXR0cikgewogICAgICAgICBwYXJzZUVuY3R5cGUo
YXR0ci0+dmFsdWUoKSk7CkBAIC02NjMsNyArNjYzLDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnRJ
bXBsOjpwYXJzZU1hcHBlZEF0dAogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFjY2Vw
dEF0dHIpIHsKICAgICAgICAgLy8gaWdub3JlIHRoaXMgb25lIGZvciB0aGUgbW9tZW50Li4uCiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYXV0b2NvbXBsZXRlQXR0cikgewotICAgICAg
ICBtX2F1dG9jb21wbGV0ZSA9IHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJvZmYiICk7Cisg
ICAgICAgIG1fYXV0b2NvbXBsZXRlID0gIWVxdWFsc0lnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgp
LCAib2ZmIik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25zdWJtaXRBdHRyKSB7
CiAgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKHN1Ym1pdEV2ZW50LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihh
dHRyLT52YWx1ZSgpLnFzdHJpbmcoKSwgdGhpcykpOwpAQCAtMTIyNSwxMSArMTIyNSwxMSBAQCB2
b2lkIEhUTUxCdXR0b25FbGVtZW50SW1wbDo6Zm9jdXMoKQogdm9pZCBIVE1MQnV0dG9uRWxlbWVu
dEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7
CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSAgdHlwZUF0dHIpIHsKLSAgICAgICAgaWYgKCBzdHJj
YXNlY21wKCBhdHRyLT52YWx1ZSgpLCAic3VibWl0IiApID09IDAgKQorICAgICAgICBpZiAoIGVx
dWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgInN1Ym1pdCIgKSApCiAgICAgICAgICAg
ICBtX3R5cGUgPSBTVUJNSVQ7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52
YWx1ZSgpLCAicmVzZXQiICkgPT0gMCApCisgICAgICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmlu
Z0Nhc2UoIGF0dHItPnZhbHVlKCksICJyZXNldCIgKSApCiAgICAgICAgICAgICBtX3R5cGUgPSBS
RVNFVDsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJidXR0
b24iICkgPT0gMCApCisgICAgICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHIt
PnZhbHVlKCksICJidXR0b24iICkgKQogICAgICAgICAgICAgbV90eXBlID0gQlVUVE9OOwogICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZhbHVlQXR0cikgewogICAgICAgICBtX3ZhbHVl
ID0gYXR0ci0+dmFsdWUoKTsKQEAgLTE0MzUsMzAgKzE0MzUsMzAgQEAgdm9pZCBIVE1MSW5wdXRF
bGVtZW50SW1wbDo6c2V0SW5wdXRUeXBlKAogewogICAgIHR5cGVFbnVtIG5ld1R5cGU7CiAgICAg
Ci0gICAgaWYgKCBzdHJjYXNlY21wKCB0LCAicGFzc3dvcmQiICkgPT0gMCApCisgICAgaWYgKCBl
cXVhbHNJZ25vcmluZ0Nhc2UoIHQsICJwYXNzd29yZCIgKSApCiAgICAgICAgIG5ld1R5cGUgPSBQ
QVNTV09SRDsKLSAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggdCwgImNoZWNrYm94IiApID09IDAg
KQorICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIHQsICJjaGVja2JveCIgKSApCiAg
ICAgICAgIG5ld1R5cGUgPSBDSEVDS0JPWDsKLSAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggdCwg
InJhZGlvIiApID09IDAgKQorICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIHQsICJy
YWRpbyIgKSApCiAgICAgICAgIG5ld1R5cGUgPSBSQURJTzsKLSAgICBlbHNlIGlmICggc3RyY2Fz
ZWNtcCggdCwgInN1Ym1pdCIgKSA9PSAwICkKKyAgICBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdD
YXNlKCB0LCAic3VibWl0IiApICkKICAgICAgICAgbmV3VHlwZSA9IFNVQk1JVDsKLSAgICBlbHNl
IGlmICggc3RyY2FzZWNtcCggdCwgInJlc2V0IiApID09IDAgKQorICAgIGVsc2UgaWYgKCBlcXVh
bHNJZ25vcmluZ0Nhc2UoIHQsICJyZXNldCIgKSApCiAgICAgICAgIG5ld1R5cGUgPSBSRVNFVDsK
LSAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggdCwgImZpbGUiICkgPT0gMCApCisgICAgZWxzZSBp
ZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggdCwgImZpbGUiICkgKQogICAgICAgICBuZXdUeXBlID0g
RklMRTsKLSAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggdCwgImhpZGRlbiIgKSA9PSAwICkKKyAg
ICBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCB0LCAiaGlkZGVuIiApICkKICAgICAgICAg
bmV3VHlwZSA9IEhJRERFTjsKLSAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggdCwgImltYWdlIiAp
ID09IDAgKQorICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIHQsICJpbWFnZSIgKSAp
CiAgICAgICAgIG5ld1R5cGUgPSBJTUFHRTsKLSAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggdCwg
ImJ1dHRvbiIgKSA9PSAwICkKKyAgICBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCB0LCAi
YnV0dG9uIiApICkKICAgICAgICAgbmV3VHlwZSA9IEJVVFRPTjsKLSAgICBlbHNlIGlmICggc3Ry
Y2FzZWNtcCggdCwgImtodG1sX2lzaW5kZXgiICkgPT0gMCApCisgICAgZWxzZSBpZiAoIGVxdWFs
c0lnbm9yaW5nQ2FzZSggdCwgImtodG1sX2lzaW5kZXgiICkgKQogICAgICAgICBuZXdUeXBlID0g
SVNJTkRFWDsKICNpZiBBUFBMRV9DSEFOR0VTCi0gICAgZWxzZSBpZiAoIHN0cmNhc2VjbXAoIHQs
ICJzZWFyY2giICkgPT0gMCApCisgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggdCwg
InNlYXJjaCIgKSApCiAgICAgICAgIG5ld1R5cGUgPSBTRUFSQ0g7Ci0gICAgZWxzZSBpZiAoIHN0
cmNhc2VjbXAoIHQsICJyYW5nZSIgKSA9PSAwICkKKyAgICBlbHNlIGlmICggZXF1YWxzSWdub3Jp
bmdDYXNlKCB0LCAicmFuZ2UiICkgKQogICAgICAgICBuZXdUeXBlID0gUkFOR0U7CiAjZW5kaWYK
ICAgICBlbHNlCkBAIC0xNzg3LDcgKzE3ODcsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnRJbXBs
OjptYXBUb0VudHJ5KGNvCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gYXV0b2NvbXBsZXRlQXR0cikgewotICAgICAgICBtX2F1dG9jb21wbGV0ZSA9IHN0cmNh
c2VjbXAoIGF0dHItPnZhbHVlKCksICJvZmYiICk7CisgICAgICAgIG1fYXV0b2NvbXBsZXRlID0g
IWVxdWFsc0lnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAib2ZmIik7CiAgICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gIHR5cGVBdHRyKSB7CiAgICAgICAgIHNldElucHV0VHlwZShhdHRy
LT52YWx1ZSgpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB2YWx1ZUF0dHIpIHsK
QEAgLTMyMjUsNyArMzIyNSw3IEBAIGJvb2wgSFRNTEtleWdlbkVsZW1lbnRJbXBsOjphcHBlbmRG
b3JtRGEKIHsKICNpZiBBUFBMRV9DSEFOR0VTCiAgICAgLy8gT25seSBSU0EgaXMgc3VwcG9ydGVk
IGF0IHRoaXMgdGltZS4KLSAgICBpZiAoIW1fa2V5VHlwZS5pc051bGwoKSAmJiBzdHJjYXNlY21w
KG1fa2V5VHlwZSwgInJzYSIpKSB7CisgICAgaWYgKCFtX2tleVR5cGUuaXNOdWxsKCkgJiYgIWVx
dWFsc0lnbm9yaW5nQ2FzZShtX2tleVR5cGUsICJyc2EiKSkgewogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIFFTdHJpbmcgdmFsdWUgPSBLU1NMS2V5R2VuOjpzaWduZWRQdWJsaWNL
ZXlBbmRDaGFsbGVuZ2VTdHJpbmcoc2VsZWN0ZWRJbmRleCgpLCBtX2NoYWxsZW5nZS5xc3RyaW5n
KCksIGdldERvY3VtZW50KCktPnBhcnQoKS0+YmFzZVVSTCgpKTsKQEAgLTM1NzEsMTMgKzM1NzEs
MTMgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6cGFyc2VNYXBwZQogICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IHdyYXBBdHRyKSB7CiAgICAgICAgIC8vIHZpcnR1YWwgLyBw
aHlzaWNhbCBpcyBOZXRzY2FwZSBleHRlbnNpb24gb2YgSFRNTCAzLjAsIG5vdyBkZXByZWNhdGVk
CiAgICAgICAgIC8vIHNvZnQvIGhhcmQgLyBvZmYgaXMgcmVjb21tZW5kYXRpb24gZm9yIEhUTUwg
NCBleHRlbnNpb24gYnkgSUUgYW5kIE5TIDQKLSAgICAgICAgaWYgKCBzdHJjYXNlY21wKCBhdHRy
LT52YWx1ZSgpLCAidmlydHVhbCIgKSA9PSAwICB8fCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgp
LCAic29mdCIpID09IDApCisgICAgICAgIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52
YWx1ZSgpLCAidmlydHVhbCIgKSAgfHwgZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgp
LCAic29mdCIpKQogICAgICAgICAgICAgbV93cmFwID0gdGFfVmlydHVhbDsKLSAgICAgICAgZWxz
ZSBpZiAoIHN0cmNhc2VjbXAgKCBhdHRyLT52YWx1ZSgpLCAicGh5c2ljYWwiICkgPT0gMCB8fCBz
dHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAiaGFyZCIpID09IDApCisgICAgICAgIGVsc2UgaWYg
KCBlcXVhbHNJZ25vcmluZ0Nhc2UgKCBhdHRyLT52YWx1ZSgpLCAicGh5c2ljYWwiICkgfHwgZXF1
YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAiaGFyZCIpKQogICAgICAgICAgICAgbV93
cmFwID0gdGFfUGh5c2ljYWw7Ci0gICAgICAgIGVsc2UgaWYoc3RyY2FzZWNtcCggYXR0ci0+dmFs
dWUoKSwgIm9uIiApID09IDApCisgICAgICAgIGVsc2UgaWYoZXF1YWxzSWdub3JpbmdDYXNlKCBh
dHRyLT52YWx1ZSgpLCAib24iICkpCiAgICAgICAgICAgICBtX3dyYXAgPSB0YV9QaHlzaWNhbDsK
LSAgICAgICAgZWxzZSBpZihzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAib2ZmIikgPT0gMCkK
KyAgICAgICAgZWxzZSBpZihlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJvZmYi
KSkKICAgICAgICAgICAgIG1fd3JhcCA9IHRhX05vV3JhcDsKICAgICAgICAgaWYgKHJlbmRlcmVy
KCkpCiAgICAgICAgICAgICByZW5kZXJlcigpLT5zZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2Fs
YygpOwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuNTAKZGlmZiAtcCAtdSAtcjEuNTAga2h0bWwvaHRtbC9odG1s
X2ltYWdlaW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCTMxIEF1ZyAy
MDA1IDA0OjM4OjM4IC0wMDAwCTEuNTAKKysrIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3Bw
CTUgU2VwIDIwMDUgMTg6MDk6MjIgLTAwMDAKQEAgLTU5OCwxMyArNTk4LDEzIEBAIEhUTUxBcmVh
RWxlbWVudEltcGw6On5IVE1MQXJlYUVsZW1lbnRJbXAKIHZvaWQgSFRNTEFyZWFFbGVtZW50SW1w
bDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IHNoYXBlQXR0cikgewotICAgICAgICBpZiAoIHN0cmNhc2Vj
bXAoIGF0dHItPnZhbHVlKCksICJkZWZhdWx0IiApID09IDAgKQorICAgICAgICBpZiAoIGVxdWFs
c0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgImRlZmF1bHQiICkgKQogICAgICAgICAgICAg
bV9zaGFwZSA9IERlZmF1bHQ7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52
YWx1ZSgpLCAiY2lyY2xlIiApID09IDAgKQorICAgICAgICBlbHNlIGlmICggZXF1YWxzSWdub3Jp
bmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAiY2lyY2xlIiApICkKICAgICAgICAgICAgIG1fc2hhcGUg
PSBDaXJjbGU7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAi
cG9seSIgKSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0
ci0+dmFsdWUoKSwgInBvbHkiICkgKQogICAgICAgICAgICAgbV9zaGFwZSA9IFBvbHk7Ci0gICAg
ICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAicmVjdCIgKSA9PSAwICkK
KyAgICAgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgInJl
Y3QiICkgKQogICAgICAgICAgICAgbV9zaGFwZSA9IFJlY3Q7CiAgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gY29vcmRzQXR0cikgewogICAgICAgICBpZiAobV9jb29yZHMpIGRlbGV0ZSBb
XSBtX2Nvb3JkczsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW5saW5laW1w
bC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTAKZGlmZiAtcCAtdSAtcjEuNTAga2h0bWwv
aHRtbC9odG1sX2lubGluZWltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5j
cHAJMyBTZXAgMjAwNSAyMzowOTo1OSAtMDAwMAkxLjUwCisrKyBraHRtbC9odG1sL2h0bWxfaW5s
aW5laW1wbC5jcHAJNSBTZXAgMjAwNSAxODowOToyMyAtMDAwMApAQCAtNDA3LDcgKzQwNyw3IEBA
IHZvaWQgSFRNTEJSRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmkKICAgICAgICAgLy8gPGJy
IGNsZWFyPiBhbmQgPGJyIGNsZWFyPSIiPiBhcmUganVzdCB0cmVhdGVkIGxpa2UgPGJyPiBieSBH
ZWNrbywKICAgICAgICAgLy8gTWFjIElFLCBldGMuIC1kd2gKICAgICAgICAgaWYgKCFzdHIuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAoc3RyY2FzZWNtcChzdHIsImFsbCIpID09IDApIAor
ICAgICAgICAgICAgaWYgKGVxdWFsc0lnbm9yaW5nQ2FzZShzdHIsImFsbCIpKSAKICAgICAgICAg
ICAgICAgICBzdHIgPSAiYm90aCI7CiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBD
U1NfUFJPUF9DTEVBUiwgc3RyKTsKICAgICAgICAgfQpJbmRleDoga2h0bWwvaHRtbC9odG1sX2xp
c3RpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfbGlzdGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE0CmRpZmYgLXAg
LXUgLXIxLjE0IGtodG1sL2h0bWwvaHRtbF9saXN0aW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRt
bF9saXN0aW1wbC5jcHAJMjUgQXVnIDIwMDUgMjM6MTM6NDkgLTAwMDAJMS4xNAorKysga2h0bWwv
aHRtbC9odG1sX2xpc3RpbXBsLmNwcAk1IFNlcCAyMDA1IDE4OjA5OjIzIC0wMDAwCkBAIC0xMTAs
MTUgKzExMCwxNSBAQCBib29sIEhUTUxPTGlzdEVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KGNvCiB2
b2lkIEhUTUxPTGlzdEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGVJbXBsICphdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdHlwZUF0dHIpIHsK
LSAgICAgICAgaWYgKCBzdHJjbXAoIGF0dHItPnZhbHVlKCksICJhIiApID09IDAgKQorICAgICAg
ICBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiYSIpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShh
dHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19WQUxfTE9XRVJfQUxQSEEpOwotICAg
ICAgICBlbHNlIGlmICggc3RyY21wKCBhdHRyLT52YWx1ZSgpLCAiQSIgKSA9PSAwICkKKyAgICAg
ICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiQSIpCiAgICAgICAgICAgICBhZGRDU1NQcm9w
ZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19WQUxfVVBQRVJfQUxQSEEp
OwotICAgICAgICBlbHNlIGlmICggc3RyY21wKCBhdHRyLT52YWx1ZSgpLCAiaSIgKSA9PSAwICkK
KyAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiaSIpCiAgICAgICAgICAgICBhZGRD
U1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19WQUxfTE9XRVJf
Uk9NQU4pOwotICAgICAgICBlbHNlIGlmICggc3RyY21wKCBhdHRyLT52YWx1ZSgpLCAiSSIgKSA9
PSAwICkKKyAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiSSIpCiAgICAgICAgICAg
ICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19WQUxf
VVBQRVJfUk9NQU4pOwotICAgICAgICBlbHNlIGlmICggc3RyY21wKCBhdHRyLT52YWx1ZSgpLCAi
MSIgKSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiMSIpCiAgICAg
ICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENT
U19WQUxfREVDSU1BTCk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc3RhcnRBdHRy
KSB7CiAgICAgICAgIF9zdGFydCA9ICFhdHRyLT5pc051bGwoKSA/IGF0dHItPnZhbHVlKCkudG9J
bnQoKSA6IDE7CkBAIC0xNzcsMTUgKzE3NywxNSBAQCB2b2lkIEhUTUxMSUVsZW1lbnRJbXBsOjpw
YXJzZU1hcHBlZEF0dHJpCiAgICAgICAgICAgICBsaXN0LT5zZXRWYWx1ZShyZXF1ZXN0ZWRWYWx1
ZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB0eXBlQXR0cikg
ewotICAgICAgICBpZiAoIHN0cmNtcCggYXR0ci0+dmFsdWUoKSwgImEiICkgPT0gMCApCisgICAg
ICAgIGlmIChhdHRyLT52YWx1ZSgpID09ICJhIikKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5
KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9MT1dFUl9BTFBIQSk7Ci0g
ICAgICAgIGVsc2UgaWYgKCBzdHJjbXAoIGF0dHItPnZhbHVlKCksICJBIiApID09IDAgKQorICAg
ICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJBIikKICAgICAgICAgICAgIGFkZENTU1By
b3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9VUFBFUl9BTFBI
QSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjbXAoIGF0dHItPnZhbHVlKCksICJpIiApID09IDAg
KQorICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJpIikKICAgICAgICAgICAgIGFk
ZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9MT1dF
Ul9ST01BTik7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjbXAoIGF0dHItPnZhbHVlKCksICJJIiAp
ID09IDAgKQorICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJJIikKICAgICAgICAg
ICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZB
TF9VUFBFUl9ST01BTik7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjbXAoIGF0dHItPnZhbHVlKCks
ICIxIiApID09IDAgKQorICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICIxIikKICAg
ICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwg
Q1NTX1ZBTF9ERUNJTUFMKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVy
dHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBhdHRyLT52YWx1ZSgpKTsKSW5kZXg6
IGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjYyCmRpZmYgLXAgLXUgLXIxLjYyIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwu
Y3BwCi0tLSBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcAkzMSBBdWcgMjAwNSAxNTozNjox
MiAtMDAwMAkxLjYyCisrKyBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcAk1IFNlcCAyMDA1
IDE4OjA5OjI0IC0wMDAwCkBAIC00NzMsMzYgKzQ3MywzNiBAQCB2b2lkIEhUTUxUYWJsZUVsZW1l
bnRJbXBsOjpwYXJzZU1hcHBlZEF0CiAgICAgICAgICAgICBhZGRDU1NJbWFnZVByb3BlcnR5KGF0
dHIsIENTU19QUk9QX0JBQ0tHUk9VTkRfSU1BR0UsIGdldERvY3VtZW50KCktPmNvbXBsZXRlVVJM
KHVybCkpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGZyYW1lQXR0cikgewogI2lm
IDAKLSAgICAgICAgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAidm9pZCIgKSA9PSAw
ICkKKyAgICAgICAgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJ2b2lk
IiApICkKICAgICAgICAgICAgIGZyYW1lID0gVm9pZDsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNh
c2VjbXAoIGF0dHItPnZhbHVlKCksICJib3JkZXIiICkgPT0gMCApCisgICAgICAgIGVsc2UgaWYg
KCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJib3JkZXIiICkgKQogICAgICAg
ICAgICAgZnJhbWUgPSBCb3g7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52
YWx1ZSgpLCAiYm94IiApID09IDAgKQorICAgICAgICBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdD
YXNlKCBhdHRyLT52YWx1ZSgpLCAiYm94IiApICkKICAgICAgICAgICAgIGZyYW1lID0gQm94Owot
ICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgImhzaWRlcyIgKSA9
PSAwICkKKyAgICAgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUo
KSwgImhzaWRlcyIgKSApCiAgICAgICAgICAgICBmcmFtZSA9IEhzaWRlczsKLSAgICAgICAgZWxz
ZSBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJ2c2lkZXMiICkgPT0gMCApCisgICAg
ICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJ2c2lkZXMi
ICkgKQogICAgICAgICAgICAgZnJhbWUgPSBWc2lkZXM7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJj
YXNlY21wKCBhdHRyLT52YWx1ZSgpLCAiYWJvdmUiICkgPT0gMCApCisgICAgICAgIGVsc2UgaWYg
KCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZhbHVlKCksICJhYm92ZSIgKSApCiAgICAgICAg
ICAgICBmcmFtZSA9IEFib3ZlOwotICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggYXR0ci0+
dmFsdWUoKSwgImJlbG93IiApID09IDAgKQorICAgICAgICBlbHNlIGlmICggZXF1YWxzSWdub3Jp
bmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAiYmVsb3ciICkgKQogICAgICAgICAgICAgZnJhbWUgPSBC
ZWxvdzsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJsaHMi
ICkgPT0gMCApCisgICAgICAgIGVsc2UgaWYgKCBlcXVhbHNJZ25vcmluZ0Nhc2UoIGF0dHItPnZh
bHVlKCksICJsaHMiICkgKQogICAgICAgICAgICAgZnJhbWUgPSBMaHM7Ci0gICAgICAgIGVsc2Ug
aWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAicmhzIiApID09IDAgKQorICAgICAgICBl
bHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAicmhzIiApICkKICAg
ICAgICAgICAgIGZyYW1lID0gUmhzOwogI2VuZGlmCiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gcnVsZXNBdHRyKSB7CiAjaWYgMAotICAgICAgICBpZiAoIHN0cmNhc2VjbXAoIGF0dHIt
PnZhbHVlKCksICJub25lIiApID09IDAgKQorICAgICAgICBpZiAoIGVxdWFsc0lnbm9yaW5nQ2Fz
ZSggYXR0ci0+dmFsdWUoKSwgIm5vbmUiICkgKQogICAgICAgICAgICAgcnVsZXMgPSBOb25lOwot
ICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgImdyb3VwcyIgKSA9
PSAwICkKKyAgICAgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUo
KSwgImdyb3VwcyIgKSApCiAgICAgICAgICAgICBydWxlcyA9IEdyb3VwczsKLSAgICAgICAgZWxz
ZSBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJyb3dzIiApID09IDAgKQorICAgICAg
ICBlbHNlIGlmICggZXF1YWxzSWdub3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAicm93cyIgKSAp
CiAgICAgICAgICAgICBydWxlcyA9IFJvd3M7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjYXNlY21w
KCBhdHRyLT52YWx1ZSgpLCAiY29scyIgKSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiAoIGVxdWFs
c0lnbm9yaW5nQ2FzZSggYXR0ci0+dmFsdWUoKSwgImNvbHMiICkgKQogICAgICAgICAgICAgcnVs
ZXMgPSBDb2xzOwotICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwg
ImFsbCIgKSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiAoIGVxdWFsc0lnbm9yaW5nQ2FzZSggYXR0
ci0+dmFsdWUoKSwgImFsbCIgKSApCiAgICAgICAgICAgICBydWxlcyA9IEFsbDsKICNlbmRpZgog
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGNlbGxzcGFjaW5nQXR0cikgewpAQCAtNzYw
LDEzICs3NjAsMTMgQEAgdm9pZCBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGw6OnBhcnNlTWFwcAog
ICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfVkVSVElDQUxfQUxJR04s
IGF0dHItPnZhbHVlKCkpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0
cikgewogICAgICAgICBET01TdHJpbmcgdiA9IGF0dHItPnZhbHVlKCk7Ci0gICAgICAgIGlmICgg
c3RyY2FzZWNtcCggYXR0ci0+dmFsdWUoKSwgIm1pZGRsZSIgKSA9PSAwIHx8IHN0cmNhc2VjbXAo
IGF0dHItPnZhbHVlKCksICJjZW50ZXIiICkgPT0gMCApCisgICAgICAgIGlmICggZXF1YWxzSWdu
b3JpbmdDYXNlKCBhdHRyLT52YWx1ZSgpLCAibWlkZGxlIiApIHx8IGVxdWFsc0lnbm9yaW5nQ2Fz
ZSggYXR0ci0+dmFsdWUoKSwgImNlbnRlciIgKSApCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0
eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19LSFRNTF9DRU5URVIpOwotICAg
ICAgICBlbHNlIGlmIChzdHJjYXNlY21wKGF0dHItPnZhbHVlKCksICJhYnNtaWRkbGUiKSA9PSAw
KQorICAgICAgICBlbHNlIGlmIChlcXVhbHNJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImFi
c21pZGRsZSIpKQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfVEVY
VF9BTElHTiwgQ1NTX1ZBTF9DRU5URVIpOwotICAgICAgICBlbHNlIGlmIChzdHJjYXNlY21wKGF0
dHItPnZhbHVlKCksICJsZWZ0IikgPT0gMCkKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxzSWdub3Jp
bmdDYXNlKGF0dHItPnZhbHVlKCksICJsZWZ0IikpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0
eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19LSFRNTF9MRUZUKTsKLSAgICAg
ICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhdHRyLT52YWx1ZSgpLCAicmlnaHQiKSA9PSAwKQorICAg
ICAgICBlbHNlIGlmIChlcXVhbHNJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInJpZ2h0Iikp
CiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBD
U1NfVkFMX19LSFRNTF9SSUdIVCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFkZENTU1By
b3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIHYpOwpJbmRleDoga2h0bWwvaHRtbC9o
dG1scGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9odG1sL2h0bWxwYXJzZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExMApkaWZmIC1w
IC11IC1yMS4xMTAga2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAotLS0ga2h0bWwvaHRtbC9odG1s
cGFyc2VyLmNwcAkxIFNlcCAyMDA1IDIzOjQwOjM1IC0wMDAwCTEuMTEwCisrKyBraHRtbC9odG1s
L2h0bWxwYXJzZXIuY3BwCTUgU2VwIDIwMDUgMTg6MDk6MjUgLTAwMDAKQEAgLTM5OCw3ICszOTgs
NyBAQCBib29sIEhUTUxQYXJzZXI6OmhhbmRsZUVycm9yKE5vZGVJbXBsKiBuCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShp
bnB1dFRhZykpIHsKICAgICAgICAgICAgIERPTVN0cmluZyB0eXBlID0gaC0+Z2V0QXR0cmlidXRl
KHR5cGVBdHRyKTsKLSAgICAgICAgICAgIGlmIChzdHJjYXNlY21wKHR5cGUsICJoaWRkZW4iKSA9
PSAwICYmIGZvcm0pIHsKKyAgICAgICAgICAgIGlmIChlcXVhbHNJZ25vcmluZ0Nhc2UodHlwZSwg
ImhpZGRlbiIpICYmIGZvcm0pIHsKICAgICAgICAgICAgICAgICBmb3JtLT5hZGRDaGlsZChuKTsK
ICAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKICAgICAg
ICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7CkluZGV4OiBraHRtbC9odG1sL2h0bWx0b2tlbml6
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwv
aHRtbHRva2VuaXplci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTA5CmRpZmYgLXAgLXUg
LXIxLjEwOSBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCi0tLSBraHRtbC9odG1sL2h0bWx0
b2tlbml6ZXIuY3BwCTI3IEF1ZyAyMDA1IDAwOjEyOjMzIC0wMDAwCTEuMTA5CisrKyBraHRtbC9o
dG1sL2h0bWx0b2tlbml6ZXIuY3BwCTUgU2VwIDIwMDUgMTg6MDk6MjcgLTAwMDAKQEAgLTE4MDMs
NyArMTgwMyw3IEBAIHZvaWQgSFRNTFRva2VuaXplcjo6ZmluaXNoKCkKICAgICAgICAgICAgIGZv
b2QgKz0gUVN0cmluZyhzY3JpcHRDb2RlLCBzY3JpcHRDb2RlU2l6ZSk7CiAgICAgICAgIH0KICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBwb3MgPSBRQ29uc3RTdHJpbmcoc2NyaXB0Q29kZSwg
c2NyaXB0Q29kZVNpemUpLnFzdHJpbmcoKS5maW5kKCc+Jyk7CisgICAgICAgICAgICBwb3MgPSBR
Q29uc3RTdHJpbmcoc2NyaXB0Q29kZSwgc2NyaXB0Q29kZVNpemUpLnN0cmluZygpLmZpbmQoJz4n
KTsKICAgICAgICAgICAgIGZvb2Quc2V0VW5pY29kZShzY3JpcHRDb2RlK3BvcysxLCBzY3JpcHRD
b2RlU2l6ZS1wb3MtMSk7IC8vIGRlZXAgY29weQogICAgICAgICB9CiAgICAgICAgIEtIVE1MX0RF
TEVURV9RQ0hBUl9WRUMoc2NyaXB0Q29kZSk7CkluZGV4OiBraHRtbC9taXNjL2RlY29kZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL21pc2MvZGVjb2Rl
ci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDIKZGlmZiAtcCAtdSAtcjEuNDIga2h0bWwv
bWlzYy9kZWNvZGVyLmNwcAotLS0ga2h0bWwvbWlzYy9kZWNvZGVyLmNwcAkxIFNlcCAyMDA1IDA1
OjM3OjE3IC0wMDAwCTEuNDIKKysrIGtodG1sL21pc2MvZGVjb2Rlci5jcHAJNSBTZXAgMjAwNSAx
ODowOToyNyAtMDAwMApAQCAtNDMsNiArNDMsNyBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiB1
c2luZyBuYW1lc3BhY2UgRE9NOjpIVE1MTmFtZXM7CiAKIHVzaW5nIERPTTo6QXRvbWljU3RyaW5n
OwordXNpbmcgRE9NOjpsb3dlcmNhc2VkOwogdXNpbmcgRE9NOjpudWxsQXRvbTsKIAogY2xhc3Mg
S2FuamlDb2RlCkBAIC01MjcsMjQgKzUyOCwxMyBAQCBRU3RyaW5nIERlY29kZXI6OmRlY29kZShj
b25zdCBjaGFyICpkYXRhCiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAg
ICAgICBpZigqcHRyID09ICcvJykgcHRyKyssIGVuZD10cnVlOwotICAgICAgICAgICAgICAgICAg
ICBjaGFyIHRtcFsyMF07CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0YXJ0ID0g
cHRyOwogICAgICAgICAgICAgICAgICAgICBpbnQgbGVuID0gMDsKLSAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKAotICAgICAgICAgICAgICAgICAgICAgICAgKCgqcHRyID49ICdhJykgJiYgKCpw
dHIgPD0gJ3onKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICgqcHRyID49ICdBJykgJiYg
KCpwdHIgPD0gJ1onKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICgqcHRyID49ICcwJykg
JiYgKCpwdHIgPD0gJzknKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIGxlbiA8IDE5ICkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdG1wW2xlbl0g
PSB0b2xvd2VyKCAqcHRyICk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpc2FsbnVtKCpw
dHIpICYmIGxlbiA8IDE5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdHIrKzsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGxlbisrOwogICAgICAgICAgICAgICAgICAgICB9Ci0JCSAgICB0
bXBbbGVuXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIEF0b21pY1N0cmluZyB0YWcodG1wKTsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT0gdGl0
bGVUYWcpCi0gICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW5UaXRsZSA9ICFlbmQ7Ci0gICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBBdG9taWNTdHJpbmcgdGFnKHN0
YXJ0LCBsZW4sIGxvd2VyY2FzZWQpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWVuZCAmJiB0
YWcgPT0gbWV0YVRhZykgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQgYSBtZXRh
IHRhZy4uLgogICAgICAgICAgICAgICAgICAgICAgICAgLy9wdHIgKz0gNTsKQEAgLTU4OCw3ICs1
NzgsNyBAQCBRU3RyaW5nIERlY29kZXI6OmRlY29kZShjb25zdCBjaGFyICpkYXRhCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGFnICE9IGxpbmtUYWcgJiYgdGFnICE9IG1ldGFUYWcg
JiYgdGFnICE9IG9iamVjdFRhZyAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRh
ZyAhPSB0aXRsZVRhZyAmJiB0YWcgIT0gYmFzZVRhZyAmJiAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoZW5kIHx8IHRhZyAhPSBodG1sVGFnKSAmJiAhd2l0aGluVGl0bGUgJiYKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGFnICE9IGhlYWRUYWcpICYmIGlzYWxwaGEo
dG1wWzBdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0YWcgIT0gaGVhZFRh
ZykgJiYgaXNhbHBoYSgqc3RhcnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0g
dHJ1ZTsKICNpZmRlZiBERUNPREVfREVCVUcKICAgICAgICAgICAgICAgICAgICAgICAgIGtkRGVi
dWcoIDYwMDUgKSA8PCAiRGVjb2Rlcjogbm8gY2hhcnNldCBmb3VuZCAoYmFpbGluZyBiZWNhdXNl
IG9mIFwiIiA8PCB0YWcuYXNjaWkoKSA8PCAiXCIpLiIgPDwgZW5kbDsKSW5kZXg6IGtodG1sL3Jl
bmRlcmluZy9yZW5kZXJfZmxleGJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mbGV4Ym94LmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4yNQpkaWZmIC1wIC11IC1yMS4yNSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zs
ZXhib3guY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ZsZXhib3guY3BwCTI5IEp1bCAy
MDA1IDIzOjQyOjQ5IC0wMDAwCTEuMjUKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZmxleGJv
eC5jcHAJNSBTZXAgMjAwNSAxODowOToyOCAtMDAwMApAQCAtNzUzLDkgKzc1Myw5IEBAIHZvaWQg
UmVuZGVyRmxleGlibGVCb3g6OmxheW91dFZlcnRpY2FsQm8KICAgICAgICAgICAgICAgICBpZiAo
IWxhc3RWaXNpYmxlTGluZSkgY29udGludWU7CiAKICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCBlbGxpcHNpc0FuZFNwYWNlWzJdID0geyAweDIwMjYsICcgJyB9OwotICAgICAg
ICAgICAgICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgZWxsaXBzaXNBbmRTcGFjZVN0cihlbGxpcHNp
c0FuZFNwYWNlLCAyKTsKKyAgICAgICAgICAgICAgICBzdGF0aWMgQXRvbWljU3RyaW5nIGVsbGlw
c2lzQW5kU3BhY2VTdHIocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhciAqPihlbGxpcHNpc0Fu
ZFNwYWNlKSwgMik7CiAgICAgICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKG51
bVZpc2libGVMaW5lcyA9PSAxKS0+aHRtbEZvbnQoKTsKLSAgICAgICAgICAgICAgICBpbnQgZWxs
aXBzaXNBbmRTcGFjZVdpZHRoID0gZm9udC53aWR0aChjb25zdF9jYXN0PFFDaGFyKj4oZWxsaXBz
aXNBbmRTcGFjZVN0ci51bmljb2RlKCkpLCAyLCAwLCAyLCAwLCAwKTsKKyAgICAgICAgICAgICAg
ICBpbnQgZWxsaXBzaXNBbmRTcGFjZVdpZHRoID0gZm9udC53aWR0aChjb25zdF9jYXN0PFFDaGFy
ICo+KGVsbGlwc2lzQW5kU3BhY2VTdHIudW5pY29kZSgpKSwgMiwgMCwgMiwgMCwgMCk7CiAKICAg
ICAgICAgICAgICAgICAvLyBHZXQgZWxsaXBzaXMgd2lkdGggKyAiICIgKyBhbmNob3Igd2lkdGgK
ICAgICAgICAgICAgICAgICBpbnQgdG90YWxXaWR0aCA9IGVsbGlwc2lzQW5kU3BhY2VXaWR0aCAr
IGFuY2hvckJveC0+d2lkdGgoKTsKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl9mb3JtLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMjEKZGlmZiAtcCAtdSAt
cjEuMTIxIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAKLS0tIGtodG1sL3JlbmRlcmlu
Zy9yZW5kZXJfZm9ybS5jcHAJMyBTZXAgMjAwNSAyMzoxMDowMCAtMDAwMAkxLjEyMQorKysga2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAk1IFNlcCAyMDA1IDE4OjA5OjMwIC0wMDAwCkBA
IC0xNzE3LDggKzE3MTcsOCBAQCB2b2lkIFJlbmRlclNsaWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQo
KQogICAgIGRvdWJsZSB2YWwgPSB2YWx1ZS5pc051bGwoKSA/IChtYXhWYWwgKyBtaW5WYWwpLzIu
MCA6IHZhbHVlLnFzdHJpbmcoKS50b0RvdWJsZSgpOwogICAgIHZhbCA9IGtNYXgobWluVmFsLCBr
TWluKHZhbCwgbWF4VmFsKSk7IC8vIE1ha2Ugc3VyZSB2YWwgaXMgd2l0aGluIG1pbi9tYXguCiAg
ICAgCi0gICAgLy8gRm9yY2UgaW50ZWdlciB2YWx1ZSBpZiBub3QgZmxvYXQgKHN0cmNhc2VjbXAg
cmV0dXJucyBjb25mdXNpbmdseSBiYWNrd2FyZCBib29sZWFuKS4KLSAgICBpZiAoc3RyY2FzZWNt
cChwcmVjaXNpb24sICJmbG9hdCIpKQorICAgIC8vIEZvcmNlIGludGVnZXIgdmFsdWUgaWYgbm90
IGZsb2F0LgorICAgIGlmICghZXF1YWxzSWdub3JpbmdDYXNlKHByZWNpc2lvbiwgImZsb2F0Iikp
CiAgICAgICAgIHZhbCA9IChpbnQpKHZhbCArIDAuNSk7CiAKICAgICBlbGVtZW50KCktPnNldFZh
bHVlKFFTdHJpbmc6Om51bWJlcih2YWwpKTsKQEAgLTE3MzksOCArMTczOSw4IEBAIHZvaWQgUmVu
ZGVyU2xpZGVyOjpzbG90U2xpZGVyVmFsdWVDaGFuZ2UKICAgICBkb3VibGUgdmFsID0gc2xpZGVy
LT52YWx1ZSgpOwogICAgIGNvbnN0IERPTVN0cmluZyYgcHJlY2lzaW9uID0gZWxlbWVudCgpLT5n
ZXRBdHRyaWJ1dGUocHJlY2lzaW9uQXR0cik7CiAKLSAgICAvLyBGb3JjZSBpbnRlZ2VyIHZhbHVl
IGlmIG5vdCBmbG9hdCAoc3RyY2FzZWNtcCByZXR1cm5zIGNvbmZ1c2luZ2x5IGJhY2t3YXJkIGJv
b2xlYW4pLgotICAgIGlmIChzdHJjYXNlY21wKHByZWNpc2lvbiwgImZsb2F0IikpCisgICAgLy8g
Rm9yY2UgaW50ZWdlciB2YWx1ZSBpZiBub3QgZmxvYXQuCisgICAgaWYgKCFlcXVhbHNJZ25vcmlu
Z0Nhc2UocHJlY2lzaW9uLCAiZmxvYXQiKSkKICAgICAgICAgdmFsID0gKGludCkodmFsICsgMC41
KTsKIAogICAgIGVsZW1lbnQoKS0+c2V0VmFsdWUoUVN0cmluZzo6bnVtYmVyKHZhbCkpOwpJbmRl
eDoga2h0bWwveGJsL3hibF90b2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL3hibC94YmxfdG9rZW5pemVyLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4zCmRpZmYgLXAgLXUgLXIxLjMga2h0bWwveGJsL3hibF90b2tlbml6ZXIuY3BwCi0t
LSBraHRtbC94YmwveGJsX3Rva2VuaXplci5jcHAJMTggSnVsIDIwMDUgMjE6NDQ6MjggLTAwMDAJ
MS4zCisrKyBraHRtbC94YmwveGJsX3Rva2VuaXplci5jcHAJNSBTZXAgMjAwNSAxODowOTozMSAt
MDAwMApAQCAtMzU1LDcgKzM1NSw3IEBAIHZvaWQgWEJMVG9rZW5IYW5kbGVyOjpjcmVhdGVGaWVs
ZChjb25zdCAKICAgICAgICAgaWYgKGF0dHJzLnFOYW1lKGkpID09ICJuYW1lIikKICAgICAgICAg
ICAgIG5hbWUgPSBhdHRycy52YWx1ZShpKTsKICAgICAgICAgZWxzZSBpZiAoYXR0cnMucU5hbWUo
aSkgPT0gInJlYWRvbmx5IikKLSAgICAgICAgICAgIHJlYWRvbmx5ID0gIShzdHJjYXNlY21wKGF0
dHJzLnZhbHVlKGkpLCAidHJ1ZSIpKTsKKyAgICAgICAgICAgIHJlYWRvbmx5ID0gZXF1YWxzSWdu
b3JpbmdDYXNlKGF0dHJzLnZhbHVlKGkpLCAidHJ1ZSIpOwogICAgIH0KICAgICAKICAgICBtX2Zp
ZWxkID0gbmV3IFhCTFByb3RvdHlwZUZpZWxkKG5hbWUsIHJlYWRvbmx5KTsKQEAgLTM3Miw3ICsz
NzIsNyBAQCB2b2lkIFhCTFRva2VuSGFuZGxlcjo6Y3JlYXRlUHJvcGVydHkoY29uCiAgICAgICAg
IGlmIChhdHRycy5xTmFtZShpKSA9PSAibmFtZSIpCiAgICAgICAgICAgICBuYW1lID0gYXR0cnMu
dmFsdWUoaSk7CiAgICAgICAgIGVsc2UgaWYgKGF0dHJzLnFOYW1lKGkpID09ICJyZWFkb25seSIp
Ci0gICAgICAgICAgICByZWFkb25seSA9ICEoc3RyY2FzZWNtcChhdHRycy52YWx1ZShpKSwgInRy
dWUiKSk7CisgICAgICAgICAgICByZWFkb25seSA9IGVxdWFsc0lnbm9yaW5nQ2FzZShhdHRycy52
YWx1ZShpKSwgInRydWUiKTsKICAgICAgICAgZWxzZSBpZiAoYXR0cnMucU5hbWUoaSkgPT0gIm9u
Z2V0IikKICAgICAgICAgICAgIG9uZ2V0ID0gYXR0cnMudmFsdWUoaSk7CiAgICAgICAgIGVsc2Ug
aWYgKGF0dHJzLnFOYW1lKGkpID09ICJvbnNldCIpCkluZGV4OiBraHRtbC94bWwvZG9tX2F0b21p
Y3N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
eG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYg
LXAgLXUgLXIxLjEyIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmNwcAotLS0ga2h0bWwveG1s
L2RvbV9hdG9taWNzdHJpbmcuY3BwCTI5IEF1ZyAyMDA1IDIxOjI5OjIyIC0wMDAwCTEuMTIKKysr
IGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmNwcAk1IFNlcCAyMDA1IDE4OjA5OjMxIC0wMDAw
CkBAIC0yNiw5ICsyNiwxMCBAQAogLy8gcG9ydGFibGUsIGFuZCBpdCB3b3VsZCBiZSBnb29kIHRv
IGZpZ3VyZSBvdXQgYSAxMDAlIGNsZWFuIHdheSB0aGF0IHN0aWxsIGF2b2lkcyBjb2RlIHRoYXQK
IC8vIHJ1bnMgYXQgaW5pdCB0aW1lLgogCi0jZGVmaW5lIEtIVE1MX0FUT01JQ1NUUklOR19ISURF
X0dMT0JBTFMgMQorI2RlZmluZSBET01fQVRPTUlDU1RSSU5HX0hJREVfR0xPQkFMUyAxCiAKICNp
bmNsdWRlICJkb21fYXRvbWljc3RyaW5nLmgiCisKICNpbmNsdWRlICJ4bWwvZG9tX3N0cmluZ2lt
cGwuaCIKICNpbmNsdWRlICJtaXNjL2hhc2hzZXQuaCIKIApAQCAtNTMsMTYgKzU0LDYgQEAgaW5s
aW5lIGJvb2wgZXF1YWwoRE9NU3RyaW5nSW1wbCogY29uc3QmIAogICAgIHJldHVybiBzW2xlbmd0
aF0gPT0gMDsKIH0KIAotYm9vbCBBdG9taWNTdHJpbmc6OmVxdWFsKGNvbnN0IEF0b21pY1N0cmlu
ZyAmYSwgY29uc3QgY2hhciAqYikKLXsgCi0gICAgRE9NU3RyaW5nSW1wbCAqaW1wbCA9IGEubV9z
dHJpbmcuaW1wbCgpOwotICAgIGlmICgoIWltcGwgfHwgIWltcGwtPnMpICYmICFiKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoKCFpbXBsIHx8ICFpbXBsLT5zKSB8fCAhYikKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBET006OmVxdWFsKGltcGwsIGIpOyAKLX0KLQog
aW5saW5lIERPTVN0cmluZ0ltcGwgKmNvbnZlcnQoY29uc3QgY2hhciogY29uc3QmIGMsIHVuc2ln
bmVkIGhhc2gpCiB7CiAgICAgRE9NU3RyaW5nSW1wbCAqciA9IG5ldyBET01TdHJpbmdJbXBsKGMp
OwpAQCAtMTUyLDYgKzE0MywxMzEgQEAgRE9NU3RyaW5nSW1wbCAqQXRvbWljU3RyaW5nOjphZGQo
RE9NU3RyaQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0cnVjdCBDaGFyQnVmZmVyCit7Cisg
ICAgY29uc3QgY2hhciAqczsKKyAgICB1bnNpZ25lZCBsZW5ndGg7Cit9OworCitpbmxpbmUgdW5z
aWduZWQgbG93ZXJjYXNlZEhhc2goY29uc3QgQ2hhckJ1ZmZlciYgYnVmKQoreworICAgIHJldHVy
biBET01TdHJpbmdJbXBsOjpjb21wdXRlTG93ZXJjYXNlZEhhc2goYnVmLnMsIGJ1Zi5sZW5ndGgp
OworfQorCitpbmxpbmUgYm9vbCBsb3dlcmNhc2VkRXF1YWwoRE9NU3RyaW5nSW1wbCogY29uc3Qm
IHN0ciwgY29uc3QgQ2hhckJ1ZmZlciAmYnVmKQoreworICAgIHVpbnQgc3RyTGVuZ3RoID0gc3Ry
LT5sOworICAgIHVpbnQgYnVmTGVuZ3RoID0gYnVmLmxlbmd0aDsKKyAgICBpZiAoc3RyTGVuZ3Ro
ICE9IGJ1Zkxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgUUNoYXIg
KnN0ckNoYXJzID0gc3RyLT5zOworICAgIGNvbnN0IGNoYXIgKmJ1ZkNoYXJzID0gYnVmLnM7Cisg
ICAgCisgICAgZm9yICh1aW50IGkgPSAwOyBpICE9IHN0ckxlbmd0aDsgKytpKQorICAgICAgICBp
ZiAoKnN0ckNoYXJzKysgIT0gUUNoYXIoKmJ1ZkNoYXJzKyspLmxvd2VyKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIERPTVN0cmlu
Z0ltcGwgKmxvd2VyY2FzZWRDb252ZXJ0KGNvbnN0IENoYXJCdWZmZXImIGJ1ZiwgdW5zaWduZWQg
aGFzaCkKK3sKKyAgICBET01TdHJpbmdJbXBsICpyID0gbmV3IERPTVN0cmluZ0ltcGwoYnVmLnMs
IGJ1Zi5sZW5ndGgsIGxvd2VyY2FzZWQpOworICAgIHItPl9oYXNoID0gaGFzaDsKKyAgICByLT5f
aW5UYWJsZSA9IHRydWU7CisgICAgcmV0dXJuIHI7IAorfQorCitET01TdHJpbmdJbXBsICpBdG9t
aWNTdHJpbmc6OmFkZExvd2VyY2FzZWQoY29uc3QgY2hhciAqcywgaW50IGxlbmd0aCkKK3sKKyAg
ICBpZiAoIXMpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChsZW5ndGggPT0gMCkKKyAgICAg
ICAgcmV0dXJuIERPTVN0cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgY29uc3QgQ2hhckJ1ZmZlciBi
dWYgPSB7IHMsIGxlbmd0aCB9OyAKKyAgICByZXR1cm4gKnN0cmluZ1RhYmxlLmluc2VydDxDaGFy
QnVmZmVyLCBsb3dlcmNhc2VkSGFzaCwgbG93ZXJjYXNlZEVxdWFsLCBsb3dlcmNhc2VkQ29udmVy
dD4oYnVmKS5maXJzdDsKK30KKworaW5saW5lIHVuc2lnbmVkIGxvd2VyY2FzZWRIYXNoKGNvbnN0
IFFDaGFyQnVmZmVyJiBidWYpCit7CisgICAgcmV0dXJuIERPTVN0cmluZ0ltcGw6OmNvbXB1dGVM
b3dlcmNhc2VkSGFzaChidWYucywgYnVmLmxlbmd0aCk7Cit9CisKK2lubGluZSBib29sIGxvd2Vy
Y2FzZWRFcXVhbChET01TdHJpbmdJbXBsKiBjb25zdCYgc3RyLCBjb25zdCBRQ2hhckJ1ZmZlciAm
YnVmKQoreworICAgIHVpbnQgc3RyTGVuZ3RoID0gc3RyLT5sOworICAgIHVpbnQgYnVmTGVuZ3Ro
ID0gYnVmLmxlbmd0aDsKKyAgICBpZiAoc3RyTGVuZ3RoICE9IGJ1Zkxlbmd0aCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgUUNoYXIgKnN0ckNoYXJzID0gc3RyLT5zOworICAg
IGNvbnN0IFFDaGFyICpidWZDaGFycyA9IGJ1Zi5zOworICAgIAorICAgIGZvciAodWludCBpID0g
MDsgaSAhPSBzdHJMZW5ndGg7ICsraSkKKyAgICAgICAgaWYgKCpzdHJDaGFycysrICE9ICgqYnVm
Q2hhcnMrKykubG93ZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biB0cnVlOworfQorCitpbmxpbmUgRE9NU3RyaW5nSW1wbCAqbG93ZXJjYXNlZENvbnZlcnQoY29u
c3QgUUNoYXJCdWZmZXImIGJ1ZiwgdW5zaWduZWQgaGFzaCkKK3sKKyAgICBET01TdHJpbmdJbXBs
ICpyID0gbmV3IERPTVN0cmluZ0ltcGwoYnVmLnMsIGJ1Zi5sZW5ndGgsIGxvd2VyY2FzZWQpOwor
ICAgIHItPl9oYXNoID0gaGFzaDsKKyAgICByLT5faW5UYWJsZSA9IHRydWU7CisgICAgcmV0dXJu
IHI7IAorfQorCitET01TdHJpbmdJbXBsICpBdG9taWNTdHJpbmc6OmFkZExvd2VyY2FzZWQoY29u
c3QgUUNoYXIgKnMsIGludCBsZW5ndGgpCit7CisgICAgaWYgKCFzKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBpZiAobGVuZ3RoID09IDApCisgICAgICAgIHJldHVybiBET01TdHJpbmdJbXBsOjpl
bXB0eSgpOworICAgIGNvbnN0IFFDaGFyQnVmZmVyIGJ1ZiA9IHsgcywgbGVuZ3RoIH07IAorICAg
IHJldHVybiAqc3RyaW5nVGFibGUuaW5zZXJ0PFFDaGFyQnVmZmVyLCBsb3dlcmNhc2VkSGFzaCwg
bG93ZXJjYXNlZEVxdWFsLCBsb3dlcmNhc2VkQ29udmVydD4oYnVmKS5maXJzdDsKK30KKworaW5s
aW5lIHVuc2lnbmVkIGxvd2VyY2FzZWRIYXNoKERPTVN0cmluZ0ltcGwqIGNvbnN0JiBzdHIpCit7
CisgICAgcmV0dXJuIERPTVN0cmluZ0ltcGw6OmNvbXB1dGVMb3dlcmNhc2VkSGFzaChzdHItPnMs
IHN0ci0+bCk7Cit9CisKK2lubGluZSBib29sIGxvd2VyY2FzZWRFcXVhbChET01TdHJpbmdJbXBs
KiBjb25zdCYgc3RyLCBET01TdHJpbmdJbXBsKiBjb25zdCAmdWNzdHIpCit7CisgICAgdWludCBz
dHJMZW5ndGggPSBzdHItPmw7CisgICAgdWludCB1Y3N0ckxlbmd0aCA9IHVjc3RyLT5sOworICAg
IGlmIChzdHJMZW5ndGggIT0gdWNzdHJMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGNvbnN0IFFDaGFyICpzdHJDaGFycyA9IHN0ci0+czsKKyAgICBjb25zdCBRQ2hhciAqdWNz
dHJDaGFycyA9IHVjc3RyLT5zOworICAgIAorICAgIGZvciAodWludCBpID0gMDsgaSAhPSBzdHJM
ZW5ndGg7ICsraSkKKyAgICAgICAgaWYgKCpzdHJDaGFycysrICE9ICgqdWNzdHJDaGFycysrKS5s
b3dlcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2lubGluZSBET01TdHJpbmdJbXBsICpsb3dlcmNhc2VkQ29udmVydChET01TdHJpbmdJbXBs
KiBjb25zdCAmc3RyLCB1bnNpZ25lZCBoYXNoKQoreworICAgIERPTVN0cmluZ0ltcGwgKnIgPSBu
ZXcgRE9NU3RyaW5nSW1wbChzdHItPnMsIHN0ci0+bCwgbG93ZXJjYXNlZCk7CisgICAgci0+X2hh
c2ggPSBoYXNoOworICAgIHItPl9pblRhYmxlID0gdHJ1ZTsKKyAgICByZXR1cm4gcjsgCit9CisK
K0RPTVN0cmluZ0ltcGwgKkF0b21pY1N0cmluZzo6YWRkTG93ZXJjYXNlZChET01TdHJpbmdJbXBs
ICpyKQoreworICAgIGlmICghciB8fCByLT5faW5UYWJsZSkKKyAgICAgICAgcmV0dXJuIHI7Cisg
ICAgaWYgKHItPmwgPT0gMCkKKyAgICAgICAgcmV0dXJuIERPTVN0cmluZ0ltcGw6OmVtcHR5KCk7
CisgICAgcmV0dXJuICpzdHJpbmdUYWJsZS5pbnNlcnQ8RE9NU3RyaW5nSW1wbCAqLCBsb3dlcmNh
c2VkSGFzaCwgbG93ZXJjYXNlZEVxdWFsLCBsb3dlcmNhc2VkQ29udmVydD4ocikuZmlyc3Q7Cit9
CisKIHZvaWQgQXRvbWljU3RyaW5nOjpyZW1vdmUoRE9NU3RyaW5nSW1wbCAqcikKIHsKICAgICBz
dHJpbmdUYWJsZS5yZW1vdmUocik7CkBAIC0xODMsMjMgKzI5OSw0IEBAIHZvaWQgQXRvbWljU3Ry
aW5nOjppbml0KCkKICAgICB9CiB9CiAKLWJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJp
bmcgJmEsIGNvbnN0IERPTVN0cmluZyAmYikKLXsKLSAgICByZXR1cm4gYS5kb21TdHJpbmcoKSA9
PSBiOyAgICAKLX0KLSAgIAotYm9vbCBlcXVhbHNJZ25vcmVDYXNlKGNvbnN0IEF0b21pY1N0cmlu
ZyAmYXMsIGNvbnN0IERPTVN0cmluZyAmYnMpCi17Ci0gICAgLy8gcmV0dXJucyB0cnVlIHdoZW4g
ZXF1YWwsIGZhbHNlIG90aGVyd2lzZSAoaWdub3JpbmcgY2FzZSkKLSAgICByZXR1cm4gIXN0cmNh
c2VjbXAoYXMuZG9tU3RyaW5nKCksIGJzKTsKLX0KLQotYm9vbCBlcXVhbHNJZ25vcmVDYXNlKGNv
bnN0IEF0b21pY1N0cmluZyAmYXMsIGNvbnN0IEF0b21pY1N0cmluZyAmYnMpCi17Ci0gICAgLy8g
cmV0dXJucyB0cnVlIHdoZW4gZXF1YWwsIGZhbHNlIG90aGVyd2lzZSAoaWdub3JpbmcgY2FzZSkK
LSAgICBpZiAoYXMgPT0gYnMpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiAhc3Ry
Y2FzZWNtcChhcy5kb21TdHJpbmcoKSwgYnMuZG9tU3RyaW5nKCkpOwotfQotCiB9CkluZGV4OiBr
aHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuOQpkaWZmIC1wIC11IC1yMS45IGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgKLS0t
IGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgJMzEgQXVnIDIwMDUgMDQ6Mzg6NDEgLTAwMDAJ
MS45CisrKyBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5oCTUgU2VwIDIwMDUgMTg6MDk6MzIg
LTAwMDAKQEAgLTE5LDggKzE5LDkgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgog
ICoKICAqLwotI2lmbmRlZiBfRE9NX0F0b21pY1N0cmluZ19oXwotI2RlZmluZSBfRE9NX0F0b21p
Y1N0cmluZ19oXworCisjaWZuZGVmIERPTV9BVE9NSUNTVFJJTkdfSAorI2RlZmluZSBET01fQVRP
TUlDU1RSSU5HX0gKIAogI2luY2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCiAKQEAgLTMzLDEwICsz
NCwxMyBAQCBwdWJsaWM6CiAgICAgQXRvbWljU3RyaW5nKCkgeyB9CiAgICAgQXRvbWljU3RyaW5n
KGNvbnN0IGNoYXIgKnMpIDogbV9zdHJpbmcoYWRkKHMpKSB7IH0KICAgICBBdG9taWNTdHJpbmco
Y29uc3QgUUNoYXIgKnMsIGludCBsZW5ndGgpIDogbV9zdHJpbmcoYWRkKHMsIGxlbmd0aCkpIHsg
fQotICAgIEF0b21pY1N0cmluZyhjb25zdCB1bnNpZ25lZCBzaG9ydCogcywgaW50IGxlbmd0aCkg
OiBtX3N0cmluZyhhZGQoKFFDaGFyKilzLCBsZW5ndGgpKSB7IH0KICAgICBBdG9taWNTdHJpbmco
Y29uc3QgUVN0cmluZyYgcykgOiBtX3N0cmluZyhhZGQocy51bmljb2RlKCksIHMubGVuZ3RoKCkp
KSB7IH0KICAgICBBdG9taWNTdHJpbmcoRE9NU3RyaW5nSW1wbCogaW1wKSA6IG1fc3RyaW5nKGFk
ZChpbXApKSB7IH0KICAgICBleHBsaWNpdCBBdG9taWNTdHJpbmcoY29uc3QgRE9NU3RyaW5nICZz
KSA6IG1fc3RyaW5nKGFkZChzLmltcGwoKSkpIHsgfQorICAgIEF0b21pY1N0cmluZyhjb25zdCBj
aGFyICpzLCBpbnQgbGVuZ3RoLCBMb3dlcmNhc2VkKSA6IG1fc3RyaW5nKGFkZExvd2VyY2FzZWQo
cywgbGVuZ3RoKSkgeyB9CisgICAgQXRvbWljU3RyaW5nKGNvbnN0IFFDaGFyICpzLCBpbnQgbGVu
Z3RoLCBMb3dlcmNhc2VkKSA6IG1fc3RyaW5nKGFkZExvd2VyY2FzZWQocywgbGVuZ3RoKSkgeyB9
CisgICAgQXRvbWljU3RyaW5nKERPTVN0cmluZ0ltcGwgKnMsIExvd2VyY2FzZWQpIDogbV9zdHJp
bmcoYWRkTG93ZXJjYXNlZChzKSkgeyB9CisgICAgQXRvbWljU3RyaW5nKGNvbnN0IERPTVN0cmlu
ZyAmcywgTG93ZXJjYXNlZCkgOiBtX3N0cmluZyhhZGRMb3dlcmNhc2VkKHMuaW1wbCgpKSkgeyB9
CiAgICAgCiAgICAgb3BlcmF0b3IgY29uc3QgRE9NU3RyaW5nJigpIGNvbnN0IHsgcmV0dXJuIG1f
c3RyaW5nOyB9CiAgICAgY29uc3QgRE9NU3RyaW5nJiBkb21TdHJpbmcoKSBjb25zdCB7IHJldHVy
biBtX3N0cmluZzsgfTsKQEAgLTQ3LDcgKzUxLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFFDaGFy
ICp1bmljb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcudW5pY29kZSgpOyB9CiAgICAgaW50
IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmxlbmd0aCgpOyB9CiAgICAgCi0gICAg
aW50IGZpbmQoY29uc3QgUUNoYXIgYywgaW50IHN0YXJ0ID0gMCkgY29uc3QgeyByZXR1cm4gbV9z
dHJpbmcuZmluZChjLCBzdGFydCk7IH0KKyAgICBpbnQgZmluZChRQ2hhciBjLCBpbnQgc3RhcnQg
PSAwKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5maW5kKGMsIHN0YXJ0KTsgfQogICAgIAogICAg
IGludCB0b0ludCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnRvSW50KCk7IH0KICAgICBib29s
IHBlcmNlbnRhZ2UoaW50ICZfcGVyY2VudGFnZSkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcucGVy
Y2VudGFnZShfcGVyY2VudGFnZSk7IH0KQEAgLTczLDU4ICs3Nyw0MiBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIERPTVN0cmluZyBtX3N0cmluZzsKICAgICAKLSAgICBzdGF0aWMgYm9vbCBlcXVh
bChET01TdHJpbmdJbXBsICosIGNvbnN0IGNoYXIgKik7Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwo
RE9NU3RyaW5nSW1wbCAqLCBjb25zdCBRQ2hhciAqLCB1aW50IGxlbmd0aCk7Ci0gICAgc3RhdGlj
IGJvb2wgZXF1YWwoRE9NU3RyaW5nSW1wbCAqLCBET01TdHJpbmdJbXBsICopOwotICAgIAotICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgQXRvbWljU3Ry
aW5nICZiKQotICAgIHsgcmV0dXJuIGEubV9zdHJpbmcuaW1wbCgpID09IGIubV9zdHJpbmcuaW1w
bCgpOyB9Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQXRvbWljU3RyaW5nICZhLCBjb25z
dCBjaGFyICpiKTsKLSAgICAKICAgICBzdGF0aWMgRE9NU3RyaW5nSW1wbCAqYWRkKGNvbnN0IGNo
YXIgKik7CiAgICAgc3RhdGljIERPTVN0cmluZ0ltcGwgKmFkZChjb25zdCBRQ2hhciAqLCBpbnQg
bGVuZ3RoKTsKICAgICBzdGF0aWMgRE9NU3RyaW5nSW1wbCAqYWRkKERPTVN0cmluZ0ltcGwgKik7
Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgaW5zZXJ0KERPTVN0cmluZ0ltcGwgKik7Ci0gICAgCi0g
ICAgc3RhdGljIHZvaWQgcmVoYXNoKGludCBuZXdUYWJsZVNpemUpOwotICAgIHN0YXRpYyB2b2lk
IGV4cGFuZCgpOwotICAgIHN0YXRpYyB2b2lkIHNocmluaygpOwotICAgIAotICAgIHN0YXRpYyBE
T01TdHJpbmdJbXBsICoqX3RhYmxlOwotICAgIHN0YXRpYyBpbnQgX3RhYmxlU2l6ZTsKLSAgICBz
dGF0aWMgaW50IF90YWJsZVNpemVNYXNrOwotICAgIHN0YXRpYyBpbnQgX2tleUNvdW50OwotfTsK
LQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0IEF0
b21pY1N0cmluZyAmYikKLXsgcmV0dXJuIEF0b21pY1N0cmluZzo6ZXF1YWwoYSwgYik7IH0KLQot
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0IEF0b21p
Y1N0cmluZyAmYikKLXsgcmV0dXJuICFBdG9taWNTdHJpbmc6OmVxdWFsKGEsIGIpOyB9CiAKLWlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW5nICZhLCBjb25zdCBjaGFyICpi
KQoteyByZXR1cm4gQXRvbWljU3RyaW5nOjplcXVhbChhLCBiKTsgfQotCi1pbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgY2hhciAqYikKLXsgcmV0dXJu
ICFBdG9taWNTdHJpbmc6OmVxdWFsKGEsIGIpOyB9Ci0KLS8vIExpc3Qgb2YgcHJvcGVydHkgbmFt
ZXMsIHBhc3NlZCB0byBhIG1hY3JvIHNvIHdlIGNhbiBkbyBzZXQgdGhlbSB1cCB2YXJpb3VzCi0v
LyB3YXlzIHdpdGhvdXQgcmVwZWF0aW5nIHRoZSBsaXN0LgorICAgIHN0YXRpYyBET01TdHJpbmdJ
bXBsICphZGRMb3dlcmNhc2VkKGNvbnN0IGNoYXIgKiwgaW50IGxlbmd0aCk7CisgICAgc3RhdGlj
IERPTVN0cmluZ0ltcGwgKmFkZExvd2VyY2FzZWQoY29uc3QgUUNoYXIgKiwgaW50IGxlbmd0aCk7
CisgICAgc3RhdGljIERPTVN0cmluZ0ltcGwgKmFkZExvd2VyY2FzZWQoRE9NU3RyaW5nSW1wbCAq
KTsKK307CiAKIC8vIERlZmluZSBleHRlcm5hbCBnbG9iYWwgdmFyaWFibGVzIGZvciB0aGUgY29t
bW9ubHkgdXNlZCBhdG9taWMgc3RyaW5ncy4KLSNpZiAhS0hUTUxfQVRPTUlDU1RSSU5HX0hJREVf
R0xPQkFMUwotICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgbnVsbEF0b207Ci0gICAgZXh0
ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBlbXB0eUF0b207Ci0gICAgZXh0ZXJuIGNvbnN0IEF0b21p
Y1N0cmluZyB0ZXh0QXRvbTsKLSAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIGNvbW1lbnRB
dG9tOwotICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgc3RhckF0b207CisjaWYgIURPTV9B
VE9NSUNTVFJJTkdfSElERV9HTE9CQUxTCitleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIG51bGxB
dG9tOworZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBlbXB0eUF0b207CitleHRlcm4gY29uc3Qg
QXRvbWljU3RyaW5nIHRleHRBdG9tOworZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBjb21tZW50
QXRvbTsKK2V4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgc3RhckF0b207CiAjZW5kaWYKLSAgICAg
ICAgCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW5nICZhLCBjb25zdCBET01TdHJp
bmcgJmIpOworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyAmYSwg
Y29uc3QgQXRvbWljU3RyaW5nICZiKSB7IHJldHVybiBhLmltcGwoKSA9PSBiLmltcGwoKTsgfQor
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0IERPTVN0
cmluZyAmYikgeyByZXR1cm4gYS5kb21TdHJpbmcoKSA9PSBiOyB9CitpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgY2hhciAqYikgeyByZXR1cm4gYS5k
b21TdHJpbmcoKSA9PSBiOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERPTVN0cmlu
ZyAmYSwgY29uc3QgQXRvbWljU3RyaW5nICZiKSB7IHJldHVybiBiID09IGE7IH0KK2lubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgY2hhciAqYSwgY29uc3QgQXRvbWljU3RyaW5nICZiKSB7IHJl
dHVybiBiID09IGE7IH0KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9taWNTdHJp
bmcgJmEsIGNvbnN0IEF0b21pY1N0cmluZyAmYikgeyByZXR1cm4gIShhID09IGIpOyB9CiBpbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgRE9NU3RyaW5n
ICZiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
RE9NU3RyaW5nICZhLCBjb25zdCBBdG9taWNTdHJpbmcgJmIpIHsgcmV0dXJuICEoYiA9PSBhKTsg
fQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0IGNo
YXIgKmIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBjaGFyICphLCBjb25zdCBBdG9taWNTdHJpbmcgJmIpIHsgcmV0dXJuICEoYiA9PSBhKTsgfQor
CitpbmxpbmUgYm9vbCBlcXVhbHNJZ25vcmluZ0Nhc2UoY29uc3QgQXRvbWljU3RyaW5nICZhLCBj
b25zdCBBdG9taWNTdHJpbmcgJmIpIHsgcmV0dXJuIGVxdWFsc0lnbm9yaW5nQ2FzZShhLmRvbVN0
cmluZygpLCBiLmRvbVN0cmluZygpKTsgfQoraW5saW5lIGJvb2wgZXF1YWxzSWdub3JpbmdDYXNl
KGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgRE9NU3RyaW5nICZiKSB7IHJldHVybiBlcXVh
bHNJZ25vcmluZ0Nhc2UoYS5kb21TdHJpbmcoKSwgYik7IH0KK2lubGluZSBib29sIGVxdWFsc0ln
bm9yaW5nQ2FzZShjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0IGNoYXIgKmIpIHsgcmV0dXJu
IGVxdWFsc0lnbm9yaW5nQ2FzZShhLmRvbVN0cmluZygpLCBiKTsgfQoraW5saW5lIGJvb2wgZXF1
YWxzSWdub3JpbmdDYXNlKGNvbnN0IERPTVN0cmluZyAmYSwgY29uc3QgQXRvbWljU3RyaW5nICZi
KSB7IHJldHVybiBiID09IGE7IH0KK2lubGluZSBib29sIGVxdWFsc0lnbm9yaW5nQ2FzZShjb25z
dCBjaGFyICphLCBjb25zdCBBdG9taWNTdHJpbmcgJmIpIHsgcmV0dXJuIGIgPT0gYTsgfQogCi1i
b29sIGVxdWFsc0lnbm9yZUNhc2UoY29uc3QgQXRvbWljU3RyaW5nICZhLCBjb25zdCBET01TdHJp
bmcgJmIpOwotYm9vbCBlcXVhbHNJZ25vcmVDYXNlKGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29u
c3QgQXRvbWljU3RyaW5nICZiKTsKIH0KKwogI2VuZGlmCkluZGV4OiBraHRtbC94bWwvZG9tX2F0
b21pY3N0cmluZ2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC94bWwvZG9tX2F0b21pY3N0cmluZ2xpc3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
CmRpZmYgLXAgLXUgLXIxLjIga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmdsaXN0LmgKLS0tIGto
dG1sL3htbC9kb21fYXRvbWljc3RyaW5nbGlzdC5oCTI1IEF1ZyAyMDA1IDE3OjQ3OjIwIC0wMDAw
CTEuMgorKysga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmdsaXN0LmgJNSBTZXAgMjAwNSAxODow
OTozMiAtMDAwMApAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgQXRvbWljU3Ry
aW5nTGlzdCogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dDsgfQogICAgIHZvaWQgc2V0TmV4
dChBdG9taWNTdHJpbmdMaXN0KiBuKSB7IG1fbmV4dCA9IG47IH0KLSAgICBjb25zdCBBdG9taWNT
dHJpbmcmIHFzdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsgfQorICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmc7IH0KICAgICB2b2lk
IHNldFN0cmluZyhjb25zdCBBdG9taWNTdHJpbmcmIHN0cikgeyBtX3N0cmluZyA9IHN0cjsgfQog
CiAgICAgQXRvbWljU3RyaW5nTGlzdCogY2xvbmUoKSB7IHJldHVybiBuZXcgQXRvbWljU3RyaW5n
TGlzdChtX3N0cmluZywgbV9uZXh0ID8gbV9uZXh0LT5jbG9uZSgpIDogMCk7IH0KSW5kZXg6IGto
dG1sL3htbC9kb21fZG9jaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
NTEKZGlmZiAtcCAtdSAtcjEuMjUxIGtodG1sL3htbC9kb21fZG9jaW1wbC5jcHAKLS0tIGtodG1s
L3htbC9kb21fZG9jaW1wbC5jcHAJMiBTZXAgMjAwNSAwMDoxOToyOSAtMDAwMAkxLjI1MQorKysg
a2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAk1IFNlcCAyMDA1IDE4OjA5OjM0IC0wMDAwCkBAIC0x
NzcxLDcgKzE3NzEsNyBAQCB2b2lkIERvY3VtZW50SW1wbDo6cHJvY2Vzc0h0dHBFcXVpdihjb25z
CiAKICAgICBLSFRNTFBhcnQgKnBhcnQgPSB0aGlzLT5wYXJ0KCk7CiAKLSAgICBpZiAoc3RyY2Fz
ZWNtcChlcXVpdiwgImRlZmF1bHQtc3R5bGUiKSA9PSAwKSB7CisgICAgaWYgKGVxdWFsc0lnbm9y
aW5nQ2FzZShlcXVpdiwgImRlZmF1bHQtc3R5bGUiKSkgewogICAgICAgICAvLyBUaGUgcHJlZmVy
cmVkIHN0eWxlIHNldCBoYXMgYmVlbiBvdmVycmlkZGVuIGFzIHBlciBzZWN0aW9uIAogICAgICAg
ICAvLyAxNC4zLjIgb2YgdGhlIEhUTUw0LjAgc3BlY2lmaWNhdGlvbi4gIFdlIG5lZWQgdG8gdXBk
YXRlIHRoZQogICAgICAgICAvLyBzaGVldCB1c2VkIHZhcmlhYmxlIGFuZCB0aGVuIHVwZGF0ZSBv
dXIgc3R5bGUgc2VsZWN0b3IuIApAQCAtMTc4Miw3ICsxNzgyLDcgQEAgdm9pZCBEb2N1bWVudElt
cGw6OnByb2Nlc3NIdHRwRXF1aXYoY29ucwogICAgICAgICBtX3ByZWZlcnJlZFN0eWxlc2hlZXRT
ZXQgPSBjb250ZW50OwogICAgICAgICB1cGRhdGVTdHlsZVNlbGVjdG9yKCk7CiAgICAgfQotICAg
IGVsc2UgaWYoc3RyY2FzZWNtcChlcXVpdiwgInJlZnJlc2giKSA9PSAwICYmIHBhcnQtPm1ldGFS
ZWZyZXNoRW5hYmxlZCgpKQorICAgIGVsc2UgaWYoZXF1YWxzSWdub3JpbmdDYXNlKGVxdWl2LCAi
cmVmcmVzaCIpICYmIHBhcnQtPm1ldGFSZWZyZXNoRW5hYmxlZCgpKQogICAgIHsKICAgICAgICAg
Ly8gZ2V0IGRlbGF5IGFuZCB1cmwKICAgICAgICAgUVN0cmluZyBzdHIgPSBjb250ZW50LnFzdHJp
bmcoKS5zdHJpcFdoaXRlU3BhY2UoKTsKQEAgLTE4MjIsMTQgKzE4MjIsMTQgQEAgdm9pZCBEb2N1
bWVudEltcGw6OnByb2Nlc3NIdHRwRXF1aXYoY29ucwogI2VuZGlmCiAgICAgICAgIH0KICAgICB9
Ci0gICAgZWxzZSBpZihzdHJjYXNlY21wKGVxdWl2LCAiZXhwaXJlcyIpID09IDApCisgICAgZWxz
ZSBpZihlcXVhbHNJZ25vcmluZ0Nhc2UoZXF1aXYsICJleHBpcmVzIikpCiAgICAgewogICAgICAg
ICBRU3RyaW5nIHN0ciA9IGNvbnRlbnQucXN0cmluZygpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAg
ICAgICB0aW1lX3QgZXhwaXJlX2RhdGUgPSBzdHIudG9Mb25nKCk7CiAgICAgICAgIGlmIChtX2Rv
Y0xvYWRlcikKICAgICAgICAgICAgIG1fZG9jTG9hZGVyLT5zZXRFeHBpcmVEYXRlKGV4cGlyZV9k
YXRlKTsKICAgICB9Ci0gICAgZWxzZSBpZihzdHJjYXNlY21wKGVxdWl2LCAicHJhZ21hIikgPT0g
MCB8fCBzdHJjYXNlY21wKGVxdWl2LCAiY2FjaGUtY29udHJvbCIpID09IDAgJiYgcGFydCkKKyAg
ICBlbHNlIGlmKGVxdWFsc0lnbm9yaW5nQ2FzZShlcXVpdiwgInByYWdtYSIpIHx8IGVxdWFsc0ln
bm9yaW5nQ2FzZShlcXVpdiwgImNhY2hlLWNvbnRyb2wiKSAmJiBwYXJ0KQogICAgIHsKICAgICAg
ICAgUVN0cmluZyBzdHIgPSBjb250ZW50LnFzdHJpbmcoKS5sb3dlcigpLnN0cmlwV2hpdGVTcGFj
ZSgpOwogICAgICAgICBLVVJMIHVybCA9IHBhcnQtPnVybCgpOwpAQCAtMTgzOCw3ICsxODM4LDcg
QEAgdm9pZCBEb2N1bWVudEltcGw6OnByb2Nlc3NIdHRwRXF1aXYoY29ucwogICAgICAgICAgICBL
SU86Omh0dHBfdXBkYXRlX2NhY2hlKHVybCwgdHJ1ZSwgMCk7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgZWxzZSBpZiggKHN0cmNhc2VjbXAoZXF1aXYsICJzZXQtY29va2llIikgPT0gMCkpCisgICAg
ZWxzZSBpZiggKGVxdWFsc0lnbm9yaW5nQ2FzZShlcXVpdiwgInNldC1jb29raWUiKSkpCiAgICAg
ewogICAgICAgICAvLyAjIyMgbWFrZSBzZXRDb29raWUgd29yayBvbiBYTUwgZG9jdW1lbnRzIHRv
bzsgZS5nLiBpbiBjYXNlIG9mIDxodG1sOm1ldGEgLi4uLi4+CiAgICAgICAgIEhUTUxEb2N1bWVu
dEltcGwgKmQgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnRJbXBsICo+KHRoaXMpOwpJbmRleDog
a2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNzkKZGlmZiAtcCAtdSAtcjEuNzkga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5j
cHAKLS0tIGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuY3BwCTQgU2VwIDIwMDUgMDk6NTU6MDcg
LTAwMDAJMS43OQorKysga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAJNSBTZXAgMjAwNSAx
ODowOTozNiAtMDAwMApAQCAtMzU0LDE0ICszNTQsMTEgQEAgdm9pZCBFbGVtZW50SW1wbDo6c2Ny
b2xsSW50b1ZpZXcoYm9vbCBhbAogICAgICAgICB2LT5lbnN1cmVWaXNpYmxlKHgsIHksIHhlLXgs
IHllLXkpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIEVsZW1lbnRJbXBsOjpnZXRBdHRyaWJ1
dGVOUyhjb25zdCBET01TdHJpbmcgJm5hbWVzcGFjZVVSSSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERPTVN0cmluZyAmbG9jYWxOYW1lKSBj
b25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50SW1wbDo6Z2V0QXR0cmlidXRlTlMoY29u
c3QgRE9NU3RyaW5nICZuYW1lc3BhY2VVUkksIGNvbnN0IERPTVN0cmluZyAmbG9jYWxOYW1lKSBj
b25zdAogewotICAgIERPTVN0cmluZyBsbihsb2NhbE5hbWUpOwogICAgIGlmIChnZXREb2N1bWVu
dCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICBsbiA9IGxvY2FsTmFtZS5sb3dlcigpOwot
ICAgIFF1YWxpZmllZE5hbWUgbmFtZShudWxsQXRvbSwgbG4uaW1wbCgpLCBuYW1lc3BhY2VVUkku
aW1wbCgpKTsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG5hbWUpOworICAgICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIEF0b21pY1N0cmluZyhsb2NhbE5h
bWUuaW1wbCgpLCBsb3dlcmNhc2VkKSwgbmFtZXNwYWNlVVJJLmltcGwoKSkpOworICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLmltcGwoKSwg
bmFtZXNwYWNlVVJJLmltcGwoKSkpOwogfQogCiB2b2lkIEVsZW1lbnRJbXBsOjpzZXRBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRE9NU3RyaW5nSW1wbCogdmFsdWUsIGludCAm
ZXhjZXB0aW9uY29kZSApCkBAIC03NjUsMTkgKzc2MiwyMyBAQCB2b2lkIEVsZW1lbnRJbXBsOjpz
ZXRBdHRyaWJ1dGVOUyhjb25zdCBECiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAo
Z2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgbG9jYWxOYW1lID0gbG9j
YWxOYW1lLmxvd2VyKCk7Ci0gICAgICAgIAorICAgIGlmIChnZXREb2N1bWVudCgpLT5pc0hUTUxE
b2N1bWVudCgpKSB7CisgICAgICAgIHNldEF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKHByZWZpeC5p
bXBsKCksCisgICAgICAgICAgICBBdG9taWNTdHJpbmcobG9jYWxOYW1lLmltcGwoKSwgbG93ZXJj
YXNlZCksCisgICAgICAgICAgICBuYW1lc3BhY2VVUkkuaW1wbCgpKSwgdmFsdWUuaW1wbCgpLCBl
eGNlcHRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIHNldEF0dHJpYnV0ZShRdWFs
aWZpZWROYW1lKHByZWZpeC5pbXBsKCksIGxvY2FsTmFtZS5pbXBsKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlVVJJLmltcGwoKSksIHZhbHVlLmltcGwoKSwgZXhj
ZXB0aW9uKTsKKyAgICAgICAgbmFtZXNwYWNlVVJJLmltcGwoKSksIHZhbHVlLmltcGwoKSwgZXhj
ZXB0aW9uKTsKIH0KIAogdm9pZCBFbGVtZW50SW1wbDo6cmVtb3ZlQXR0cmlidXRlTlMoY29uc3Qg
RE9NU3RyaW5nICZuYW1lc3BhY2VVUkksIGNvbnN0IERPTVN0cmluZyAmbG9jYWxOYW1lLCBpbnQg
JmV4Y2VwdGlvbikKIHsKLSAgICBET01TdHJpbmcgbG4obG9jYWxOYW1lKTsKLSAgICBpZiAoZ2V0
RG9jdW1lbnQoKSAmJiBnZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICBs
biA9IGxvY2FsTmFtZS5sb3dlcigpOwotICAgIHJlbW92ZUF0dHJpYnV0ZShRdWFsaWZpZWROYW1l
KG51bGxBdG9tLCBsbi5pbXBsKCksIG5hbWVzcGFjZVVSSS5pbXBsKCkpLCBleGNlcHRpb24pOwor
ICAgIGlmIChnZXREb2N1bWVudCgpICYmIGdldERvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkp
IHsKKyAgICAgICAgcmVtb3ZlQXR0cmlidXRlKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIEF0b21p
Y1N0cmluZyhsb2NhbE5hbWUuaW1wbCgpLCBsb3dlcmNhc2VkKSwgbmFtZXNwYWNlVVJJLmltcGwo
KSksIGV4Y2VwdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmVtb3ZlQXR0cmli
dXRlKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZS5pbXBsKCksIG5hbWVzcGFjZVVS
SS5pbXBsKCkpLCBleGNlcHRpb24pOwogfQogCiBBdHRySW1wbCAqRWxlbWVudEltcGw6OmdldEF0
dHJpYnV0ZU5vZGVOUyhjb25zdCBET01TdHJpbmcgJm5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3Ry
aW5nICZsb2NhbE5hbWUpCkBAIC03ODUsOSArNzg2LDggQEAgQXR0ckltcGwgKkVsZW1lbnRJbXBs
OjpnZXRBdHRyaWJ1dGVOb2RlTgogICAgIE5hbWVkQXR0ck1hcEltcGwgKmF0dHJzID0gYXR0cmli
dXRlcyh0cnVlKTsKICAgICBpZiAoIWF0dHJzKQogICAgICAgICByZXR1cm4gMDsKLSAgICBET01T
dHJpbmcgbG4obG9jYWxOYW1lKTsKICAgICBpZiAoZ2V0RG9jdW1lbnQoKSAmJiBnZXREb2N1bWVu
dCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICBsbiA9IGxvY2FsTmFtZS5sb3dlcigpOwor
ICAgICAgICByZXR1cm4gYXR0cnMtPmdldE5hbWVkSXRlbShRdWFsaWZpZWROYW1lKG51bGxBdG9t
LCBBdG9taWNTdHJpbmcobG9jYWxOYW1lLmltcGwoKSwgbG93ZXJjYXNlZCksIG5hbWVzcGFjZVVS
SS5pbXBsKCkpKTsKICAgICByZXR1cm4gYXR0cnMtPmdldE5hbWVkSXRlbShRdWFsaWZpZWROYW1l
KG51bGxBdG9tLCBsb2NhbE5hbWUuaW1wbCgpLCBuYW1lc3BhY2VVUkkuaW1wbCgpKSk7CiB9CiAK
QEAgLTc5NiwxMSArNzk2LDkgQEAgYm9vbCBFbGVtZW50SW1wbDo6aGFzQXR0cmlidXRlTlMoY29u
c3QgRAogICAgIE5hbWVkQXR0ck1hcEltcGwgKmF0dHJzID0gYXR0cmlidXRlcyh0cnVlKTsKICAg
ICBpZiAoIWF0dHJzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRE9NU3RyaW5nIGxuKGxv
Y2FsTmFtZSk7CiAgICAgaWYgKGdldERvY3VtZW50KCkgJiYgZ2V0RG9jdW1lbnQoKS0+aXNIVE1M
RG9jdW1lbnQoKSkKLSAgICAgICAgbG4gPSBsb2NhbE5hbWUubG93ZXIoKTsKLSAgICByZXR1cm4g
YXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1l
LmltcGwoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmFtZXNwYWNlVVJJLmltcGwoKSkpOworICAgICAgICByZXR1cm4gYXR0cnMtPmdldEF0dHJp
YnV0ZUl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgQXRvbWljU3RyaW5nKGxvY2FsTmFtZS5p
bXBsKCksIGxvd2VyY2FzZWQpLCBuYW1lc3BhY2VVUkkuaW1wbCgpKSk7CisgICAgcmV0dXJuIGF0
dHJzLT5nZXRBdHRyaWJ1dGVJdGVtKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZS5p
bXBsKCksIG5hbWVzcGFjZVVSSS5pbXBsKCkpKTsKIH0KIAogQ1NTU3R5bGVEZWNsYXJhdGlvbklt
cGwgKkVsZW1lbnRJbXBsOjpzdHlsZSgpCkBAIC04MTAsNDMgKzgwOCw2IEBAIENTU1N0eWxlRGVj
bGFyYXRpb25JbXBsICpFbGVtZW50SW1wbDo6c3QKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0v
KgotWE1MRWxlbWVudEltcGw6OlhNTEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIERPTVN0
cmluZ0ltcGwgKl9xdWFsaWZpZWROYW1lLCBET01TdHJpbmdJbXBsICpfbmFtZXNwYWNlVVJJKQot
ICAgIDogRWxlbWVudEltcGwoZG9jKQotewotICAgIGludCBjb2xvbnBvcyA9IC0xOwotICAgIGZv
ciAodWludCBpID0gMDsgaSA8IF9xdWFsaWZpZWROYW1lLT5sOyArK2kpCi0gICAgICAgIGlmIChf
cXVhbGlmaWVkTmFtZS0+c1tpXSA9PSAnOicpIHsKLSAgICAgICAgICAgIGNvbG9ucG9zID0gaTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICBpZiAoY29sb25wb3MgPj0gMCkg
ewotICAgICAgICAvLyB3ZSBoYXZlIGEgcHJlZml4Ci0gICAgICAgIERPTVN0cmluZ0ltcGwqIGxv
Y2FsTmFtZSA9IF9xdWFsaWZpZWROYW1lLT5jb3B5KCk7Ci0gICAgICAgIGxvY2FsTmFtZS0+cmVm
KCk7Ci0gICAgICAgIGxvY2FsTmFtZS0+cmVtb3ZlKDAsY29sb25wb3MrMSk7Ci0gICAgICAgIG1f
aWQgPSBkb2MtPmRvY3VtZW50KCktPnRhZ0lkKF9uYW1lc3BhY2VVUkksIGxvY2FsTmFtZSwgZmFs
c2UpOwotICAgICAgICBsb2NhbE5hbWUtPmRlcmVmKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBG
SVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBzaXR1YXRpb24gZm9yIHN0YWdlIG9uZSBvZiB0aGUg
UXVhbGlmaWVkTmFtZSBwYXRjaC4gIFRoaXMgaXMgYWxzbyBhIHJlYWxseSBzdHVwaWQgd2F5IHRv
Ci0gICAgICAgIC8vIGhhdmUgdG8gaGFuZGxlIHRoZSBwcmVmaXguICBXYXkgdG9vIG11Y2ggY29w
eWluZy4gIFdlIHNob3VsZCBtYWtlIHN1cmUgdGhlIFhNTCB0b2tlbml6ZXIgaGFzIGRvbmUgdGhl
IHNwbGl0Ci0gICAgICAgIC8vIGFscmVhZHkgaW50byBwcmVmaXggYW5kIGxvY2FsTmFtZS4KLSAg
ICAgICAgRE9NU3RyaW5nSW1wbCogcHJlZml4ID0gX3F1YWxpZmllZE5hbWUtPmNvcHkoKTsKLSAg
ICAgICAgcHJlZml4LT5yZWYoKTsKLSAgICAgICAgcHJlZml4LT50cnVuY2F0ZShjb2xvbnBvcyk7
Ci0gICAgICAgIG1fdGFnTmFtZSA9IFF1YWxpZmllZE5hbWUocHJlZml4LCBudWxsQXRvbSwgbnVs
bEF0b20pOwotICAgICAgICBwcmVmaXgtPmRlcmVmKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAg
ICAgLy8gbm8gcHJlZml4Ci0gICAgICAgIG1faWQgPSBkb2MtPmRvY3VtZW50KCktPnRhZ0lkKF9u
YW1lc3BhY2VVUkksIF9xdWFsaWZpZWROYW1lLCBmYWxzZSk7Ci19Ci0KLSovCi0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQogTmFtZWRBdHRyTWFwSW1wbDo6TmFtZWRBdHRyTWFwSW1wbChFbGVtZW50
SW1wbCAqZSkKICAgICA6IGVsZW1lbnQoZSkKICAgICAsIGF0dHJzKDApCkBAIC04NjYsMTggKzgy
NywxNiBAQCBib29sIE5hbWVkQXR0ck1hcEltcGw6OmlzTWFwcGVkQXR0cmlidXRlCiAKIE5vZGVJ
bXBsICpOYW1lZEF0dHJNYXBJbXBsOjpnZXROYW1lZEl0ZW1OUyhjb25zdCBET01TdHJpbmcgJm5h
bWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZsb2NhbE5hbWUpIGNvbnN0CiB7Ci0gICAgRE9N
U3RyaW5nIGxuKGxvY2FsTmFtZSk7CiAgICAgaWYgKGVsZW1lbnQtPmdldERvY3VtZW50KCktPmlz
SFRNTERvY3VtZW50KCkpCi0gICAgICAgIGxuID0gbG9jYWxOYW1lLmxvd2VyKCk7Ci0gICAgcmV0
dXJuIGdldE5hbWVkSXRlbShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsbi5pbXBsKCksIG5hbWVz
cGFjZVVSSS5pbXBsKCkpKTsKKyAgICAgICAgcmV0dXJuIGdldE5hbWVkSXRlbShRdWFsaWZpZWRO
YW1lKG51bGxBdG9tLCBBdG9taWNTdHJpbmcobG9jYWxOYW1lLmltcGwoKSwgbG93ZXJjYXNlZCks
IG5hbWVzcGFjZVVSSS5pbXBsKCkpKTsKKyAgICByZXR1cm4gZ2V0TmFtZWRJdGVtKFF1YWxpZmll
ZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZS5pbXBsKCksIG5hbWVzcGFjZVVSSS5pbXBsKCkpKTsK
IH0KIAogU2hhcmVkUHRyPE5vZGVJbXBsPiBOYW1lZEF0dHJNYXBJbXBsOjpyZW1vdmVOYW1lZEl0
ZW1OUyhjb25zdCBET01TdHJpbmcgJm5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZsb2Nh
bE5hbWUsIGludCAmZXhjZXB0aW9uKQogewotICAgIERPTVN0cmluZyBsbihsb2NhbE5hbWUpOwog
ICAgIGlmIChlbGVtZW50LT5nZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAg
ICBsbiA9IGxvY2FsTmFtZS5sb3dlcigpOwotICAgIHJldHVybiByZW1vdmVOYW1lZEl0ZW0oUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwgbG4uaW1wbCgpLCBuYW1lc3BhY2VVUkkuaW1wbCgpKSwgZXhj
ZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIHJlbW92ZU5hbWVkSXRlbShRdWFsaWZpZWROYW1lKG51
bGxBdG9tLCBBdG9taWNTdHJpbmcobG9jYWxOYW1lLmltcGwoKSwgbG93ZXJjYXNlZCksIG5hbWVz
cGFjZVVSSS5pbXBsKCkpLCBleGNlcHRpb24pOworICAgIHJldHVybiByZW1vdmVOYW1lZEl0ZW0o
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLmltcGwoKSwgbmFtZXNwYWNlVVJJLmlt
cGwoKSksIGV4Y2VwdGlvbik7CiB9CiAKIEF0dHJJbXBsICpOYW1lZEF0dHJNYXBJbXBsOjpnZXRO
YW1lZEl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKQEAgLTEyNjUsMTQgKzEy
MjQsMTQgQEAgdm9pZCBOYW1lZE1hcHBlZEF0dHJNYXBJbXBsOjpwYXJzZUNsYXNzQQogICAgIGlm
ICghZWxlbWVudC0+aGFzQ2xhc3MoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIERPTVN0
cmluZyBjbGFzc0F0dHIgPSBlbGVtZW50LT5nZXREb2N1bWVudCgpLT5pbkNvbXBhdE1vZGUoKSA/
IAotICAgICAgICAoY2xhc3NTdHIuaW1wbCgpLT5pc0xvd2VyKCkgPyBjbGFzc1N0ciA6IERPTVN0
cmluZyhjbGFzc1N0ci5pbXBsKCktPmxvd2VyKCkpKSA6Ci0gICAgICAgIGNsYXNzU3RyOworICAg
IGJvb2wgbmVlZHNMb3dlcmNhc2luZyA9IGVsZW1lbnQtPmdldERvY3VtZW50KCktPmluQ29tcGF0
TW9kZSgpOwogICAgIAotICAgIGlmIChjbGFzc0F0dHIuZmluZCgnICcpID09IC0xICYmIGNsYXNz
QXR0ci5maW5kKCdcbicpID09IC0xKQotICAgICAgICBtX2NsYXNzTGlzdC5zZXRTdHJpbmcoQXRv
bWljU3RyaW5nKGNsYXNzQXR0cikpOworICAgIGlmIChjbGFzc1N0ci5maW5kKCcgJykgPT0gLTEg
JiYgY2xhc3NTdHIuZmluZCgnXG4nKSA9PSAtMSkKKyAgICAgICAgbV9jbGFzc0xpc3Quc2V0U3Ry
aW5nKG5lZWRzTG93ZXJjYXNpbmcgPyBBdG9taWNTdHJpbmcoY2xhc3NTdHIsIGxvd2VyY2FzZWQp
IDogQXRvbWljU3RyaW5nKGNsYXNzU3RyKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFFTdHJpbmcg
dmFsID0gY2xhc3NBdHRyLnFzdHJpbmcoKTsKKyAgICAgICAgUVN0cmluZyB2YWwgPSBjbGFzc1N0
ci5xc3RyaW5nKCk7CisgICAgICAgIGlmIChuZWVkc0xvd2VyY2FzaW5nKQorICAgICAgICAgICAg
dmFsID0gdmFsLmxvd2VyKCk7CiAgICAgICAgIHZhbC5yZXBsYWNlKCdcbicsICcgJyk7CiAgICAg
ICAgIFFTdHJpbmdMaXN0IGxpc3QgPSBRU3RyaW5nTGlzdDo6c3BsaXQoJyAnLCB2YWwpOwogICAg
ICAgICAKQEAgLTEyODMsOCArMTI0Miw3IEBAIHZvaWQgTmFtZWRNYXBwZWRBdHRyTWFwSW1wbDo6
cGFyc2VDbGFzc0EKICAgICAgICAgICAgICAgICBpZiAoY3VycikgewogICAgICAgICAgICAgICAg
ICAgICBjdXJyLT5zZXROZXh0KG5ldyBBdG9taWNTdHJpbmdMaXN0KEF0b21pY1N0cmluZyhzaW5n
bGVDbGFzcykpKTsKICAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnItPm5leHQoKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgbV9jbGFzc0xpc3Quc2V0U3RyaW5nKEF0b21p
Y1N0cmluZyhzaW5nbGVDbGFzcykpOwogICAgICAgICAgICAgICAgICAgICBjdXJyID0gJm1fY2xh
c3NMaXN0OwogICAgICAgICAgICAgICAgIH0KQEAgLTEzOTQsNyArMTM1Miw3IEBAIHZvaWQgU3R5
bGVkRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmkKICAgICAgICAgICAgIGlmIChhdHRyLT5p
c051bGwoKSkKICAgICAgICAgICAgICAgICBuYW1lZEF0dHJNYXAtPnNldElEKG51bGxBdG9tKTsK
ICAgICAgICAgICAgIGVsc2UgaWYgKGdldERvY3VtZW50KCkgJiYgZ2V0RG9jdW1lbnQoKS0+aW5D
b21wYXRNb2RlKCkgJiYgIWF0dHItPnZhbHVlKCkuaW1wbCgpLT5pc0xvd2VyKCkpCi0gICAgICAg
ICAgICAgICAgbmFtZWRBdHRyTWFwLT5zZXRJRChBdG9taWNTdHJpbmcoYXR0ci0+dmFsdWUoKS5k
b21TdHJpbmcoKS5sb3dlcigpKSk7CisgICAgICAgICAgICAgICAgbmFtZWRBdHRyTWFwLT5zZXRJ
RChBdG9taWNTdHJpbmcoYXR0ci0+dmFsdWUoKSwgbG93ZXJjYXNlZCkpOwogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIG5hbWVkQXR0ck1hcC0+c2V0SUQoYXR0ci0+dmFsdWUoKSk7
CiAgICAgICAgIH0KSW5kZXg6IGtodG1sL3htbC9kb21fbm9kZWltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fbm9kZWltcGwuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjE4NApkaWZmIC1wIC11IC1yMS4xODQga2h0bWwveG1sL2Rv
bV9ub2RlaW1wbC5jcHAKLS0tIGtodG1sL3htbC9kb21fbm9kZWltcGwuY3BwCTQgU2VwIDIwMDUg
MDk6NTU6MDcgLTAwMDAJMS4xODQKKysrIGtodG1sL3htbC9kb21fbm9kZWltcGwuY3BwCTUgU2Vw
IDIwMDUgMTg6MDk6MzggLTAwMDAKQEAgLTE1OTYsMTAgKzE1OTYsOCBAQCBTaGFyZWRQdHI8Tm9k
ZUxpc3RJbXBsPiBOb2RlSW1wbDo6Z2V0RWxlCiAgICAgaWYgKG5hbWVzcGFjZVVSSS5pc051bGwo
KSB8fCBsb2NhbE5hbWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBTaGFyZWRQdHI8Tm9kZUxp
c3RJbXBsPigpOyAvLyBGSVhNRTogV2hvIGNhcmVzIGFib3V0IHRoaXMgYWRkaXRpb25hbCBjaGVj
az8KICAgICAKLSAgICBET01TdHJpbmcgbmFtZSA9IGxvY2FsTmFtZTsKLSAgICBpZiAoZ2V0RG9j
dW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgbmFtZSA9IGxvY2FsTmFtZS5sb3dl
cigpOwotICAgIHJldHVybiBTaGFyZWRQdHI8Tm9kZUxpc3RJbXBsPihuZXcgVGFnTm9kZUxpc3RJ
bXBsKHRoaXMsIEF0b21pY1N0cmluZyhuYW1lc3BhY2VVUkkpLCBBdG9taWNTdHJpbmcobmFtZSkp
KTsKKyAgICByZXR1cm4gU2hhcmVkUHRyPE5vZGVMaXN0SW1wbD4obmV3IFRhZ05vZGVMaXN0SW1w
bCh0aGlzLCBBdG9taWNTdHJpbmcobmFtZXNwYWNlVVJJKSwKKyAgICAgICAgZ2V0RG9jdW1lbnQo
KS0+aXNIVE1MRG9jdW1lbnQoKSA/IEF0b21pY1N0cmluZyhsb2NhbE5hbWUsIGxvd2VyY2FzZWQp
IDogQXRvbWljU3RyaW5nKGxvY2FsTmFtZSkpKTsKIH0KIAogYm9vbCBOb2RlSW1wbDo6aXNTdXBw
b3J0ZWQoY29uc3QgRE9NU3RyaW5nICZmZWF0dXJlLCBjb25zdCBET01TdHJpbmcgJnZlcnNpb24p
CkluZGV4OiBraHRtbC94bWwvZG9tX3N0cmluZ2ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fc3RyaW5naW1wbC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMzAKZGlmZiAtcCAtdSAtcjEuMzAga2h0bWwveG1sL2RvbV9zdHJpbmdp
bXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbV9zdHJpbmdpbXBsLmNwcAkyNSBBdWcgMjAwNSAxNzo0
NzoyMSAtMDAwMAkxLjMwCisrKyBraHRtbC94bWwvZG9tX3N0cmluZ2ltcGwuY3BwCTUgU2VwIDIw
MDUgMTg6MDk6MzggLTAwMDAKQEAgLTI2LDkgKzI2LDEyIEBACiAjaW5jbHVkZSAiZG9tX3N0cmlu
Z2ltcGwuaCIKIAogI2luY2x1ZGUgPGtkZWJ1Zy5oPgotCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAj
aW5jbHVkZSAiZG9tX2F0b21pY3N0cmluZy5oIgorI2luY2x1ZGUgIm1pc2Mva2h0bWxsYXlvdXQu
aCIKKworI2RlZmluZSBRVF9BTExPQ19RQ0hBUl9WRUMoIE4gKSBzdGF0aWNfY2FzdDxRQ2hhcio+
KG1haW5fdGhyZWFkX21hbGxvYyggc2l6ZW9mKFFDaGFyKSooIE4gKSApKQorI2RlZmluZSBRVF9E
RUxFVEVfUUNIQVJfVkVDKCBQICkgbWFpbl90aHJlYWRfZnJlZSAoKHZvaWQqKSggUCApKQogCiB1
c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKQEAgLTQzLDEyICs0NiwxMyBAQCBET01TdHJpbmdJbXBs
KiBET01TdHJpbmdJbXBsOjplbXB0eSgpCiAgICAgcmV0dXJuICZlOwogfQogCi1ET01TdHJpbmdJ
bXBsOjpET01TdHJpbmdJbXBsKGNvbnN0IFFDaGFyICpzdHIsIHVuc2lnbmVkIGludCBsZW4pIHsK
K0RPTVN0cmluZ0ltcGw6OkRPTVN0cmluZ0ltcGwoY29uc3QgUUNoYXIgKnN0ciwgdW5zaWduZWQg
bGVuKQorewogICAgIF9oYXNoID0gMDsKICAgICBfaW5UYWJsZSA9IGZhbHNlOwogICAgIGJvb2wg
aGF2ZXN0ciA9IHN0ciAmJiBsZW47Ci0gICAgcyA9IFFUX0FMTE9DX1FDSEFSX1ZFQyggaGF2ZXN0
ciA/IGxlbiA6IDEgKTsKLSAgICBpZihzdHIgJiYgbGVuKSB7CisgICAgcyA9IFFUX0FMTE9DX1FD
SEFSX1ZFQyhoYXZlc3RyID8gbGVuIDogMSk7CisgICAgaWYgKGhhdmVzdHIpIHsKICAgICAgICAg
bWVtY3B5KCBzLCBzdHIsIGxlbiAqIHNpemVvZihRQ2hhcikgKTsKICAgICAgICAgbCA9IGxlbjsK
ICAgICB9IGVsc2UgewpAQCAtNTgsNiArNjIsNDIgQEAgRE9NU3RyaW5nSW1wbDo6RE9NU3RyaW5n
SW1wbChjb25zdCBRQ2hhcgogICAgIH0KIH0KIAorRE9NU3RyaW5nSW1wbDo6RE9NU3RyaW5nSW1w
bChjb25zdCBRQ2hhciAqc3RyLCB1bnNpZ25lZCBsZW4sIExvd2VyY2FzZWQpCit7CisgICAgX2hh
c2ggPSAwOworICAgIF9pblRhYmxlID0gZmFsc2U7CisgICAgYm9vbCBoYXZlc3RyID0gc3RyICYm
IGxlbjsKKyAgICBRQ2hhciAqbmV3U3RyID0gUVRfQUxMT0NfUUNIQVJfVkVDKGhhdmVzdHIgPyBs
ZW4gOiAxKTsKKyAgICBzID0gbmV3U3RyOworICAgIGlmIChoYXZlc3RyKSB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkKKyAgICAgICAgICAgIG5ld1N0cltpXSA9
IHN0cltpXS5sb3dlcigpOworICAgICAgICBsID0gbGVuOworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIGNyYXNoIHByb3RlY3Rpb24KKyAgICAgICAgbmV3U3RyWzBdID0gMHgwOworICAgICAgICBs
ID0gMDsKKyAgICB9Cit9CisKK0RPTVN0cmluZ0ltcGw6OkRPTVN0cmluZ0ltcGwoY29uc3QgY2hh
ciAqc3RyLCB1bnNpZ25lZCBsZW4sIExvd2VyY2FzZWQpCit7CisgICAgX2hhc2ggPSAwOworICAg
IF9pblRhYmxlID0gZmFsc2U7CisgICAgYm9vbCBoYXZlc3RyID0gc3RyICYmIGxlbjsKKyAgICBR
Q2hhciAqbmV3U3RyID0gUVRfQUxMT0NfUUNIQVJfVkVDKGhhdmVzdHIgPyBsZW4gOiAxKTsKKyAg
ICBzID0gbmV3U3RyOworICAgIGlmIChoYXZlc3RyKSB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW47ICsraSkKKyAgICAgICAgICAgIG5ld1N0cltpXSA9IFFDaGFyKHN0cltp
XSkubG93ZXIoKTsKKyAgICAgICAgbCA9IGxlbjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBj
cmFzaCBwcm90ZWN0aW9uCisgICAgICAgIG5ld1N0clswXSA9IDB4MDsKKyAgICAgICAgbCA9IDA7
CisgICAgfQorfQorCiBET01TdHJpbmdJbXBsOjpET01TdHJpbmdJbXBsKGNvbnN0IGNoYXIgKnN0
cikKIHsKICAgICBfaGFzaCA9IDA7CkBAIC0yMzUsNyArMjc1LDcgQEAgc3RhdGljIExlbmd0aCBw
YXJzZUxlbmd0aChRQ2hhciAqcywgdW5zaQogICAgICAgICArK2k7CiAKICAgICBib29sIG9rOwot
ICAgIGludCByID0gUUNvbnN0U3RyaW5nKHMsIGkpLnFzdHJpbmcoKS50b0ludCgmb2spOworICAg
IGludCByID0gUUNvbnN0U3RyaW5nKHMsIGkpLnN0cmluZygpLnRvSW50KCZvayk7CiAKICAgICAv
KiBTa2lwIG92ZXIgYW55IHJlbWFpbmluZyBkaWdpdHMsIHdlIGFyZSBub3QgdGhhdCBhY2N1cmF0
ZSAoNS41JSA9PiA1JSkgKi8KICAgICB3aGlsZSAoaSA8IGwgJiYgKHNbaV0uaXNEaWdpdCgpIHx8
IHNbaV0gPT0gJy4nKSkKQEAgLTQyNCw3ICs0NjQsNyBAQCBpbnQgRE9NU3RyaW5nSW1wbDo6dG9J
bnQoYm9vbCAqb2spIGNvbnN0CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgcmV0dXJuIFFD
b25zdFN0cmluZyhzLCBpKS5xc3RyaW5nKCkudG9JbnQob2spOworICAgIHJldHVybiBRQ29uc3RT
dHJpbmcocywgaSkuc3RyaW5nKCkudG9JbnQob2spOwogfQogCiBET01TdHJpbmdJbXBsICpET01T
dHJpbmdJbXBsOjpyZXBsYWNlKFFDaGFyIG9sZEMsIFFDaGFyIG5ld0MpCkBAIC00NTksOSArNDk5
LDggQEAgY29uc3QgdW5zaWduZWQgUEhJID0gMHg5ZTM3NzliOVU7CiAKIC8vIFBhdWwgSHNpZWgn
cyBTdXBlckZhc3RIYXNoCiAvLyBodHRwOi8vd3d3LmF6aWxsaW9ubW9ua2V5cy5jb20vcWVkL2hh
c2guaHRtbAotdW5zaWduZWQgRE9NU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2goY29uc3QgUUNoYXIg
KnMsIGludCBsZW4pCit1bnNpZ25lZCBET01TdHJpbmdJbXBsOjpjb21wdXRlSGFzaChjb25zdCBR
Q2hhciAqcywgdW5zaWduZWQgbCkKIHsKLSAgICB1bnNpZ25lZCBsID0gbGVuOwogICAgIHVpbnQz
Ml90IGhhc2ggPSBQSEk7CiAgICAgdWludDMyX3QgdG1wOwogICAgIApAQCAtNTQ3LDYgKzU4Niw5
NCBAQCB1bnNpZ25lZCBET01TdHJpbmdJbXBsOjpjb21wdXRlSGFzaChjb25zCiAgICAgcmV0dXJu
IGhhc2g7CiB9CiAKKy8vIFBhdWwgSHNpZWgncyBTdXBlckZhc3RIYXNoCisvLyBodHRwOi8vd3d3
LmF6aWxsaW9ubW9ua2V5cy5jb20vcWVkL2hhc2guaHRtbAordW5zaWduZWQgRE9NU3RyaW5nSW1w
bDo6Y29tcHV0ZUxvd2VyY2FzZWRIYXNoKGNvbnN0IFFDaGFyICpzLCB1bnNpZ25lZCBsKQorewor
ICAgIHVpbnQzMl90IGhhc2ggPSBQSEk7CisgICAgdWludDMyX3QgdG1wOworICAgIAorICAgIGlu
dCByZW0gPSBsICYgMTsKKyAgICBsID4+PSAxOworICAgIAorICAgIC8vIE1haW4gbG9vcAorICAg
IGZvciAoOyBsID4gMDsgbC0tKSB7CisgICAgICAgIGhhc2ggKz0gc1swXS5sb3dlcigpLnVuaWNv
ZGUoKTsKKyAgICAgICAgdG1wID0gKHNbMV0ubG93ZXIoKS51bmljb2RlKCkgPDwgMTEpIF4gaGFz
aDsKKyAgICAgICAgaGFzaCA9IChoYXNoIDw8IDE2KSBeIHRtcDsKKyAgICAgICAgcyArPSAyOwor
ICAgICAgICBoYXNoICs9IGhhc2ggPj4gMTE7CisgICAgfQorICAgIAorICAgIC8vIEhhbmRsZSBl
bmQgY2FzZQorICAgIGlmIChyZW0pIHsKKyAgICAgICAgaGFzaCArPSBzWzBdLmxvd2VyKCkudW5p
Y29kZSgpOworICAgICAgICBoYXNoIF49IGhhc2ggPDwgMTE7CisgICAgICAgIGhhc2ggKz0gaGFz
aCA+PiAxNzsKKyAgICB9CisKKyAgICAvLyBGb3JjZSAiYXZhbGFuY2hpbmciIG9mIGZpbmFsIDEy
NyBiaXRzCisgICAgaGFzaCBePSBoYXNoIDw8IDM7CisgICAgaGFzaCArPSBoYXNoID4+IDU7Cisg
ICAgaGFzaCBePSBoYXNoIDw8IDI7CisgICAgaGFzaCArPSBoYXNoID4+IDE1OworICAgIGhhc2gg
Xj0gaGFzaCA8PCAxMDsKKworICAgIC8vIHRoaXMgYXZvaWRzIGV2ZXIgcmV0dXJuaW5nIGEgaGFz
aCBjb2RlIG9mIDAsIHNpbmNlIHRoYXQgaXMgdXNlZCB0bworICAgIC8vIHNpZ25hbCAiaGFzaCBu
b3QgY29tcHV0ZWQgeWV0IiwgdXNpbmcgYSB2YWx1ZSB0aGF0IGlzIGxpa2VseSB0byBiZQorICAg
IC8vIGVmZmVjdGl2ZWx5IHRoZSBzYW1lIGFzIDAgd2hlbiB0aGUgbG93IGJpdHMgYXJlIG1hc2tl
ZAorICAgIGlmIChoYXNoID09IDApCisgICAgICAgIGhhc2ggPSAweDgwMDAwMDAwOworICAgIAor
ICAgIHJldHVybiBoYXNoOworfQorCisvLyBQYXVsIEhzaWVoJ3MgU3VwZXJGYXN0SGFzaAorLy8g
aHR0cDovL3d3dy5hemlsbGlvbm1vbmtleXMuY29tL3FlZC9oYXNoLmh0bWwKK3Vuc2lnbmVkIERP
TVN0cmluZ0ltcGw6OmNvbXB1dGVMb3dlcmNhc2VkSGFzaChjb25zdCBjaGFyICpzLCB1bnNpZ25l
ZCBsKQoreworICAgIC8vIFRoaXMgaGFzaCBpcyBkZXNpZ25lZCB0byB3b3JrIG9uIDE2LWJpdCBj
aHVua3MgYXQgYSB0aW1lLiBCdXQgc2luY2UgdGhlIG5vcm1hbCBjYXNlCisgICAgLy8gKGFib3Zl
KSBpcyB0byBoYXNoIFVURi0xNiBjaGFyYWN0ZXJzLCB3ZSBqdXN0IHRyZWF0IHRoZSA4LWJpdCBj
aGFycyBhcyBpZiB0aGV5CisgICAgLy8gd2VyZSAxNi1iaXQgY2h1bmtzLCB3aGljaCBzaG91bGQg
Z2l2ZSBtYXRjaGluZyByZXN1bHRzCisKKyAgICB1aW50MzJfdCBoYXNoID0gUEhJOworICAgIHVp
bnQzMl90IHRtcDsKKyAgICAKKyAgICBpbnQgcmVtID0gbCAmIDE7CisgICAgbCA+Pj0gMTsKKyAg
ICAKKyAgICAvLyBNYWluIGxvb3AKKyAgICBmb3IgKDsgbCA+IDA7IGwtLSkgeworICAgICAgICBo
YXNoICs9IFFDaGFyKHNbMF0pLmxvd2VyKCkudW5pY29kZSgpOworICAgICAgICB0bXAgPSAoUUNo
YXIoc1sxXSkubG93ZXIoKS51bmljb2RlKCkgPDwgMTEpIF4gaGFzaDsKKyAgICAgICAgaGFzaCA9
IChoYXNoIDw8IDE2KSBeIHRtcDsKKyAgICAgICAgcyArPSAyOworICAgICAgICBoYXNoICs9IGhh
c2ggPj4gMTE7CisgICAgfQorICAgIAorICAgIC8vIEhhbmRsZSBlbmQgY2FzZQorICAgIGlmIChy
ZW0pIHsKKyAgICAgICAgaGFzaCArPSBRQ2hhcihzWzBdKS5sb3dlcigpLnVuaWNvZGUoKTsKKyAg
ICAgICAgaGFzaCBePSBoYXNoIDw8IDExOworICAgICAgICBoYXNoICs9IGhhc2ggPj4gMTc7Cisg
ICAgfQorCisgICAgLy8gRm9yY2UgImF2YWxhbmNoaW5nIiBvZiBmaW5hbCAxMjcgYml0cworICAg
IGhhc2ggXj0gaGFzaCA8PCAzOworICAgIGhhc2ggKz0gaGFzaCA+PiA1OworICAgIGhhc2ggXj0g
aGFzaCA8PCAyOworICAgIGhhc2ggKz0gaGFzaCA+PiAxNTsKKyAgICBoYXNoIF49IGhhc2ggPDwg
MTA7CisKKyAgICAvLyB0aGlzIGF2b2lkcyBldmVyIHJldHVybmluZyBhIGhhc2ggY29kZSBvZiAw
LCBzaW5jZSB0aGF0IGlzIHVzZWQgdG8KKyAgICAvLyBzaWduYWwgImhhc2ggbm90IGNvbXB1dGVk
IHlldCIsIHVzaW5nIGEgdmFsdWUgdGhhdCBpcyBsaWtlbHkgdG8gYmUKKyAgICAvLyBlZmZlY3Rp
dmVseSB0aGUgc2FtZSBhcyAwIHdoZW4gdGhlIGxvdyBiaXRzIGFyZSBtYXNrZWQKKyAgICBpZiAo
aGFzaCA9PSAwKQorICAgICAgICBoYXNoID0gMHg4MDAwMDAwMDsKKyAgICAKKyAgICByZXR1cm4g
aGFzaDsKK30KKwogY29uc3QgY2hhciAqRE9NU3RyaW5nSW1wbDo6YXNjaWkoKSBjb25zdAogewog
ICAgIGNoYXIgKmJ1ZmZlciA9IG5ldyBjaGFyW2wgKyAxXTsKSW5kZXg6IGtodG1sL3htbC9kb21f
c3RyaW5naW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L3htbC9kb21fc3RyaW5naW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE0CmRpZmYgLXAg
LXUgLXIxLjE0IGtodG1sL3htbC9kb21fc3RyaW5naW1wbC5oCi0tLSBraHRtbC94bWwvZG9tX3N0
cmluZ2ltcGwuaAkyMSBKdW4gMjAwNSAyMjoyNzo1NSAtMDAwMAkxLjE0CisrKyBraHRtbC94bWwv
ZG9tX3N0cmluZ2ltcGwuaAk1IFNlcCAyMDA1IDE4OjA5OjM4IC0wMDAwCkBAIC0xOSwyMCArMTks
MjMgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICoKICAqLwotI2lmbmRlZiBf
RE9NX0RPTVN0cmluZ0ltcGxfaF8KLSNkZWZpbmUgX0RPTV9ET01TdHJpbmdJbXBsX2hfCisKKyNp
Zm5kZWYgRE9NX0RPTVNUUklOR0lNUExfSAorI2RlZmluZSBET01fRE9NU1RSSU5HSU1QTF9ICiAK
ICNpbmNsdWRlIDxxc3RyaW5nLmg+CiAKLSNpbmNsdWRlICJtaXNjL2todG1sbGF5b3V0LmgiCiAj
aW5jbHVkZSAibWlzYy9zaGFyZWQuaCIKICNpbmNsdWRlICJtaXNjL21haW5fdGhyZWFkX21hbGxv
Yy5oIgogCi0jZGVmaW5lIFFUX0FMTE9DX1FDSEFSX1ZFQyggTiApIHN0YXRpY19jYXN0PFFDaGFy
Kj4obWFpbl90aHJlYWRfbWFsbG9jKCBzaXplb2YoUUNoYXIpKiggTiApICkpCi0jZGVmaW5lIFFU
X0RFTEVURV9RQ0hBUl9WRUMoIFAgKSBtYWluX3RocmVhZF9mcmVlICgodm9pZCopKCBQICkpCitu
YW1lc3BhY2Uga2h0bWwgeworICAgIHN0cnVjdCBMZW5ndGg7Cit9CiAKIG5hbWVzcGFjZSBET00g
ewogCitlbnVtIExvd2VyY2FzZWQgeyBsb3dlcmNhc2VkIH07CisKIGNsYXNzIERPTVN0cmluZ0lt
cGwgOiBwdWJsaWMga2h0bWw6OlNoYXJlZDxET01TdHJpbmdJbXBsPgogewogcHJpdmF0ZToKQEAg
LTQzLDE2ICs0NiwyMCBAQCBwcm90ZWN0ZWQ6CiAgICAgRE9NU3RyaW5nSW1wbCgpIHsgcyA9IDAs
IGwgPSAwOyBfaGFzaCA9IDA7IF9pblRhYmxlID0gZmFsc2U7IH0KIHB1YmxpYzoKICAgICBET01T
dHJpbmdJbXBsKGNvbnN0IFFDaGFyICpzdHIsIHVuc2lnbmVkIGludCBsZW4pOworICAgIERPTVN0
cmluZ0ltcGwoY29uc3QgUUNoYXIgKnN0ciwgdW5zaWduZWQgaW50IGxlbiwgTG93ZXJjYXNlZCk7
CiAgICAgRE9NU3RyaW5nSW1wbChjb25zdCBjaGFyICpzdHIpOwogICAgIERPTVN0cmluZ0ltcGwo
Y29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgbGVuKTsKKyAgICBET01TdHJpbmdJbXBsKGNv
bnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IGxlbiwgTG93ZXJjYXNlZCk7CiAgICAgRE9NU3Ry
aW5nSW1wbChjb25zdCBRQ2hhciAmY2gpOwogICAgIH5ET01TdHJpbmdJbXBsKCk7CiAgICAgCiAg
ICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwogCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsg
aWYgKF9oYXNoID09IDApIF9oYXNoID0gY29tcHV0ZUhhc2gocywgbCk7IHJldHVybiBfaGFzaDsg
fQotICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBRQ2hhciAqLCBpbnQgbGVu
Z3RoKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3QgUUNoYXIgKiwgdW5z
aWduZWQgbGVuZ3RoKTsKICAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3QgY2hh
ciAqKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUxvd2VyY2FzZWRIYXNoKGNvbnN0IFFD
aGFyICosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVMb3dl
cmNhc2VkSGFzaChjb25zdCBjaGFyICosIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgCiAgICAgdm9p
ZCBhcHBlbmQoRE9NU3RyaW5nSW1wbCAqc3RyKTsKICAgICB2b2lkIGluc2VydChET01TdHJpbmdJ
bXBsICpzdHIsIHVuc2lnbmVkIGludCBwb3MpOwpAQCAtOTcsNSArMTA0LDYgQEAgcHVibGljOgog
ICAgIGJvb2wgX2luVGFibGU7CiB9OwogCi19OworfQorCiAjZW5kaWYKSW5kZXg6IGtodG1sL3ht
bC9kb21fdGV4dGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL3htbC9kb21fdGV4dGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMwCmRp
ZmYgLXAgLXUgLXIxLjMwIGtodG1sL3htbC9kb21fdGV4dGltcGwuY3BwCi0tLSBraHRtbC94bWwv
ZG9tX3RleHRpbXBsLmNwcAkzMSBBdWcgMjAwNSAwNDozODo0MiAtMDAwMAkxLjMwCisrKyBraHRt
bC94bWwvZG9tX3RleHRpbXBsLmNwcAk1IFNlcCAyMDA1IDE4OjA5OjM5IC0wMDAwCkBAIC00NSwx
MyArNDUsMTggQEAgQ2hhcmFjdGVyRGF0YUltcGw6OkNoYXJhY3RlckRhdGFJbXBsKERvYwogQ2hh
cmFjdGVyRGF0YUltcGw6OkNoYXJhY3RlckRhdGFJbXBsKERvY3VtZW50UHRyICpkb2MsIGNvbnN0
IERPTVN0cmluZyAmX3RleHQpCiAgICAgOiBOb2RlSW1wbChkb2MpCiB7Ci0gICAgc3RyID0gX3Rl
eHQuaW1wbCgpID8gX3RleHQuaW1wbCgpIDogbmV3IERPTVN0cmluZ0ltcGwoKFFDaGFyKikwLCAw
KTsKLSAgICBzdHItPnJlZigpOworICAgIERPTVN0cmluZ0ltcGwgKmltcGwgPSBfdGV4dC5pbXBs
KCk7CisgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIG5lY2Vzc2FyeT8gV2h5IGNhbid0IHdlIGp1
c3QgaGF2ZSBhIE5VTEwgc3RyPworICAgIGlmICghaW1wbCkKKyAgICAgICAgaW1wbCA9IG5ldyBE
T01TdHJpbmdJbXBsKChRQ2hhciopMCwgMCk7CisgICAgaW1wbC0+cmVmKCk7CisgICAgc3RyID0g
aW1wbDsKIH0KIAogQ2hhcmFjdGVyRGF0YUltcGw6On5DaGFyYWN0ZXJEYXRhSW1wbCgpCiB7Ci0g
ICAgaWYoc3RyKSBzdHItPmRlcmVmKCk7CisgICAgaWYgKERPTVN0cmluZ0ltcGwgKmltcGwgPSBz
dHIpCisgICAgICAgIGltcGwtPmRlcmVmKCk7CiB9CiAKIERPTVN0cmluZyBDaGFyYWN0ZXJEYXRh
SW1wbDo6ZGF0YSgpIGNvbnN0CkluZGV4OiBrd3EvRE9NSW50ZXJuYWwubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0RPTUludGVybmFsLm1tLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjgKZGlmZiAtcCAtdSAtcjEuOCBrd3EvRE9NSW50ZXJuYWwubW0KLS0tIGt3
cS9ET01JbnRlcm5hbC5tbQkyOSBBdWcgMjAwNSAyMToyOToyOCAtMDAwMAkxLjgKKysrIGt3cS9E
T01JbnRlcm5hbC5tbQk1IFNlcCAyMDA1IDE4OjA5OjQ1IC0wMDAwCkBAIC0xMjgsOCArMTI4LDkg
QEAgRE9NU3RyaW5nOjpET01TdHJpbmcoTlNTdHJpbmcgKnN0cikKICAgICBBU1NFUlQoc3RyKTsK
IAogICAgIENGSW5kZXggc2l6ZSA9IENGU3RyaW5nR2V0TGVuZ3RoKHJlaW50ZXJwcmV0X2Nhc3Q8
Q0ZTdHJpbmdSZWY+KHN0cikpOworICAgIERPTVN0cmluZ0ltcGwgKmltcGw7CiAgICAgaWYgKHNp
emUgPT0gMCkKLSAgICAgICAgbV9pbXBsID0gRE9NU3RyaW5nSW1wbDo6ZW1wdHkoKTsKKyAgICAg
ICAgaW1wbCA9IERPTVN0cmluZ0ltcGw6OmVtcHR5KCk7CiAgICAgZWxzZSB7CiAgICAgICAgIFVu
aUNoYXIgZml4ZWRTaXplQnVmZmVyWzEwMjRdOwogICAgICAgICBVbmlDaGFyICpidWZmZXI7CkBA
IC0xMzksMTIgKzE0MCwxMyBAQCBET01TdHJpbmc6OkRPTVN0cmluZyhOU1N0cmluZyAqc3RyKQog
ICAgICAgICAgICAgYnVmZmVyID0gZml4ZWRTaXplQnVmZmVyOwogICAgICAgICB9CiAgICAgICAg
IENGU3RyaW5nR2V0Q2hhcmFjdGVycyhyZWludGVycHJldF9jYXN0PENGU3RyaW5nUmVmPihzdHIp
LCBDRlJhbmdlTWFrZSgwLCBzaXplKSwgYnVmZmVyKTsKLSAgICAgICAgbV9pbXBsID0gbmV3IERP
TVN0cmluZ0ltcGwocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhciAqPihidWZmZXIpLCAodWlu
dClzaXplKTsKKyAgICAgICAgaW1wbCA9IG5ldyBET01TdHJpbmdJbXBsKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgUUNoYXIgKj4oYnVmZmVyKSwgKHVpbnQpc2l6ZSk7CiAgICAgICAgIGlmIChidWZm
ZXIgIT0gZml4ZWRTaXplQnVmZmVyKSB7CiAgICAgICAgICAgICBmcmVlKGJ1ZmZlcik7CiAgICAg
ICAgIH0KICAgICB9Ci0gICAgbV9pbXBsLT5yZWYoKTsKKyAgICBpbXBsLT5yZWYoKTsKKyAgICBt
X2ltcGwgPSBpbXBsOwogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJ
bmRleDoga3dxL0tXUVBhaW50ZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva3dxL0tXUVBhaW50ZXIubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTM2CmRpZmYg
LXAgLXUgLXIxLjEzNiBrd3EvS1dRUGFpbnRlci5tbQotLS0ga3dxL0tXUVBhaW50ZXIubW0JNSBT
ZXAgMjAwNSAwNDowMToyNCAtMDAwMAkxLjEzNgorKysga3dxL0tXUVBhaW50ZXIubW0JNSBTZXAg
MjAwNSAxODowOTo0OSAtMDAwMApAQCAtNDc2LDE0ICs0NzYsMTQgQEAgdm9pZCBRUGFpbnRlcjo6
c2V0Q29tcG9zaXRlT3BlcmF0aW9uIChDRwogICAgIFtbV2ViQ29yZUltYWdlUmVuZGVyZXJGYWN0
b3J5IHNoYXJlZEZhY3RvcnldIHNldENHQ29tcG9zaXRlT3BlcmF0aW9uOm9wIGluQ29udGV4dDpj
b250ZXh0XTsKIH0KIAotaW50IFFQYWludGVyOjpjb21wb3NpdGVPcGVyYXRvckZyb21TdHJpbmcg
KGNvbnN0IFFTdHJpbmcgJmFTdHJpbmcpCitpbnQgUVBhaW50ZXI6OmNvbXBvc2l0ZU9wZXJhdG9y
RnJvbVN0cmluZyhjb25zdCBRU3RyaW5nICZhU3RyaW5nKQogewogICAgIE5TQ29tcG9zaXRpbmdP
cGVyYXRpb24gb3AgPSBOU0NvbXBvc2l0ZVNvdXJjZU92ZXI7CiAgICAgCiAgICAgaWYgKGFTdHJp
bmcubGVuZ3RoKCkpIHsKICAgICAgICAgY29uc3QgY2hhciAqb3BlcmF0b3JTdHJpbmcgPSBhU3Ry
aW5nLmFzY2lpKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX0NPTVBPU0lURV9P
UEVSQVRPUlM7IGkrKykgewotICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAgKG9wZXJhdG9yU3Ry
aW5nLCBjb21wb3NpdGVPcGVyYXRvcnNbaV0ubmFtZSkgPT0gMCkgeworICAgICAgICAgICAgaWYg
KHN0cmNhc2VjbXAob3BlcmF0b3JTdHJpbmcsIGNvbXBvc2l0ZU9wZXJhdG9yc1tpXS5uYW1lKSA9
PSAwKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZU9wZXJhdG9yc1tpXS52YWx1
ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDoga3dxL0tXUVN0cmluZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FTdHJpbmcuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xMTUKZGlmZiAtcCAtdSAtcjEuMTE1IGt3cS9LV1FTdHJpbmcuaAot
LS0ga3dxL0tXUVN0cmluZy5oCTI1IEF1ZyAyMDA1IDE3OjQ3OjI2IC0wMDAwCTEuMTE1CisrKyBr
d3EvS1dRU3RyaW5nLmgJNSBTZXAgMjAwNSAxODowOTo1MCAtMDAwMApAQCAtNzUyLDcgKzc1Miw3
IEBAIGNsYXNzIFFDb25zdFN0cmluZyA6IHByaXZhdGUgUVN0cmluZyB7CiBwdWJsaWM6CiAgICAg
UUNvbnN0U3RyaW5nKGNvbnN0IFFDaGFyICosIHVpbnQpOwogICAgIH5RQ29uc3RTdHJpbmcoKTsK
LSAgICBjb25zdCBRU3RyaW5nICZxc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKyAg
ICBjb25zdCBRU3RyaW5nICZzdHJpbmcoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQogfTsKIAog
I2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3786</attachid>
            <date>2005-09-06 09:05:51 -0700</date>
            <delta_ts>2005-12-29 16:10:43 -0800</delta_ts>
            <desc>patch that just fixes a function mistakenly renamed to qstring()</desc>
            <filename>UnQStringPatch.txt</filename>
            <type>text/plain</type>
            <size>8529</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMjAzCmRpZmYgLXAgLXUgLXIxLjIwMyBraHRtbC9jc3MvY3Nzc3R5
bGVzZWxlY3Rvci5jcHAKLS0tIGtodG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAkzMCBBdWcg
MjAwNSAyMTozNjoyMyAtMDAwMAkxLjIwMworKysga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3Iu
Y3BwCTUgU2VwIDIwMDUgMTg6MDk6MDcgLTAwMDAKQEAgLTMzMiwxNCArMzMyLDEwIEBAIHZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhDU1NSdWwKICAgICAvLyBXZSBuZWVkIHRvIGNv
bGxlY3QgdGhlIHJ1bGVzIGZvciBpZCwgY2xhc3MsIHRhZywgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBp
bnRvIGEgYnVmZmVyIGFuZAogICAgIC8vIHRoZW4gc29ydCB0aGUgYnVmZmVyLgogICAgIGlmIChl
bGVtZW50LT5oYXNJRCgpKQotICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0SURS
dWxlcyhlbGVtZW50LT5nZXRJREF0dHJpYnV0ZSgpLmltcGwoKSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKLSAgICBpZiAoZWxlbWVu
dC0+aGFzQ2xhc3MoKSkgewotICAgICAgICBmb3IgKGNvbnN0IEF0b21pY1N0cmluZ0xpc3QqIHNp
bmdsZUNsYXNzID0gZWxlbWVudC0+Z2V0Q2xhc3NMaXN0KCk7Ci0gICAgICAgICAgICAgc2luZ2xl
Q2xhc3M7IHNpbmdsZUNsYXNzID0gc2luZ2xlQ2xhc3MtPm5leHQoKSkKLSAgICAgICAgICAgIG1h
dGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRDbGFzc1J1bGVzKHNpbmdsZUNsYXNzLT5xc3RyaW5n
KCkuaW1wbCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKLSAgICB9CisgICAgICAgIG1h
dGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRJRFJ1bGVzKGVsZW1lbnQtPmdldElEQXR0cmlidXRl
KCkuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOworICAgIGlmIChlbGVt
ZW50LT5oYXNDbGFzcygpKQorICAgICAgICBmb3IgKGNvbnN0IEF0b21pY1N0cmluZ0xpc3QqIHNp
bmdsZUNsYXNzID0gZWxlbWVudC0+Z2V0Q2xhc3NMaXN0KCk7IHNpbmdsZUNsYXNzOyBzaW5nbGVD
bGFzcyA9IHNpbmdsZUNsYXNzLT5uZXh0KCkpCisgICAgICAgICAgICBtYXRjaFJ1bGVzRm9yTGlz
dChydWxlcy0+Z2V0Q2xhc3NSdWxlcyhzaW5nbGVDbGFzcy0+c3RyaW5nKCkuaW1wbCgpKSwgZmly
c3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwogICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVz
LT5nZXRUYWdSdWxlcyhlbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpLAogICAgICAgICAgICAg
ICAgICAgICAgIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKICAgICBtYXRjaFJ1bGVz
Rm9yTGlzdChydWxlcy0+Z2V0VW5pdmVyc2FsUnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RS
dWxlSW5kZXgpOwpAQCAtNTU1LDcgKzU1MSw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrUHNldWRvU3Rh
dGUoIEVsZW1lbnRJbXAKICAgICB9CiAgICAgCiAgICAgUUNvbnN0U3RyaW5nIGN1KGF0dHIudW5p
Y29kZSgpLCBhdHRyLmxlbmd0aCgpKTsKLSAgICBRU3RyaW5nIHUgPSBjdS5xc3RyaW5nKCk7Cisg
ICAgUVN0cmluZyB1ID0gY3Uuc3RyaW5nKCk7CiAgICAgaWYgKCAhdS5jb250YWlucygiOi8vIikg
KSB7CiAgICAgICAgIGlmICggdVswXSA9PSAnLycgKQogICAgICAgICAgICAgdS5wcmVwZW5kKGN1
cnJlbnRFbmNvZGVkVVJMLT5ob3N0KTsKQEAgLTExMTYsNyArMTExMiw3IEBAIGJvb2wgQ1NTU3R5
bGVTZWxlY3Rvcjo6Y2hlY2tPbmVTZWxlY3RvcigKICAgICAgICAgICAgIGlmICghZS0+aGFzQ2xh
c3MoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBmb3IgKGNv
bnN0IEF0b21pY1N0cmluZ0xpc3QqIGMgPSBlLT5nZXRDbGFzc0xpc3QoKTsgYzsgYyA9IGMtPm5l
eHQoKSkKLSAgICAgICAgICAgICAgICBpZiAoYy0+cXN0cmluZygpID09IHNlbC0+dmFsdWUpCisg
ICAgICAgICAgICAgICAgaWYgKGMtPnN0cmluZygpID09IHNlbC0+dmFsdWUpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CkluZGV4OiBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbHRva2VuaXplci5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTA5CmRpZmYgLXAgLXUgLXIxLjEwOSBraHRtbC9odG1sL2h0bWx0
b2tlbml6ZXIuY3BwCi0tLSBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCTI3IEF1ZyAyMDA1
IDAwOjEyOjMzIC0wMDAwCTEuMTA5CisrKyBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCTUg
U2VwIDIwMDUgMTg6MDk6MjcgLTAwMDAKQEAgLTE4MDMsNyArMTgwMyw3IEBAIHZvaWQgSFRNTFRv
a2VuaXplcjo6ZmluaXNoKCkKICAgICAgICAgICAgIGZvb2QgKz0gUVN0cmluZyhzY3JpcHRDb2Rl
LCBzY3JpcHRDb2RlU2l6ZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBwb3MgPSBRQ29uc3RTdHJpbmcoc2NyaXB0Q29kZSwgc2NyaXB0Q29kZVNpemUpLnFzdHJpbmco
KS5maW5kKCc+Jyk7CisgICAgICAgICAgICBwb3MgPSBRQ29uc3RTdHJpbmcoc2NyaXB0Q29kZSwg
c2NyaXB0Q29kZVNpemUpLnN0cmluZygpLmZpbmQoJz4nKTsKICAgICAgICAgICAgIGZvb2Quc2V0
VW5pY29kZShzY3JpcHRDb2RlK3BvcysxLCBzY3JpcHRDb2RlU2l6ZS1wb3MtMSk7IC8vIGRlZXAg
Y29weQogICAgICAgICB9CiAgICAgICAgIEtIVE1MX0RFTEVURV9RQ0hBUl9WRUMoc2NyaXB0Q29k
ZSk7CkluZGV4OiBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZ2xpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2F0b21pY3N0cmluZ2xpc3Qu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIga2h0bWwveG1sL2Rv
bV9hdG9taWNzdHJpbmdsaXN0LmgKLS0tIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nbGlzdC5o
CTI1IEF1ZyAyMDA1IDE3OjQ3OjIwIC0wMDAwCTEuMgorKysga2h0bWwveG1sL2RvbV9hdG9taWNz
dHJpbmdsaXN0LmgJNSBTZXAgMjAwNSAxODowOTozMiAtMDAwMApAQCAtMzUsNyArMzUsNyBAQCBw
dWJsaWM6CiAgICAgCiAgICAgQXRvbWljU3RyaW5nTGlzdCogbmV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fbmV4dDsgfQogICAgIHZvaWQgc2V0TmV4dChBdG9taWNTdHJpbmdMaXN0KiBuKSB7IG1fbmV4
dCA9IG47IH0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHFzdHJpbmcoKSBjb25zdCB7IHJldHVy
biBtX3N0cmluZzsgfQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJpbmc7IH0KICAgICB2b2lkIHNldFN0cmluZyhjb25zdCBBdG9taWNTdHJpbmcm
IHN0cikgeyBtX3N0cmluZyA9IHN0cjsgfQogCiAgICAgQXRvbWljU3RyaW5nTGlzdCogY2xvbmUo
KSB7IHJldHVybiBuZXcgQXRvbWljU3RyaW5nTGlzdChtX3N0cmluZywgbV9uZXh0ID8gbV9uZXh0
LT5jbG9uZSgpIDogMCk7IH0KSW5kZXg6IGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fZWxlbWVu
dGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjc5CmRpZmYgLXAgLXUgLXIxLjc5IGto
dG1sL3htbC9kb21fZWxlbWVudGltcGwuY3BwCi0tLSBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBs
LmNwcAk0IFNlcCAyMDA1IDA5OjU1OjA3IC0wMDAwCTEuNzkKKysrIGtodG1sL3htbC9kb21fZWxl
bWVudGltcGwuY3BwCTUgU2VwIDIwMDUgMTg6MDk6MzYgLTAwMDAKQEAgLTgxMCw0MyArODA4LDYg
QEAgQ1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgKkVsZW1lbnRJbXBsOjpzdAogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKLS8qCi1YTUxFbGVtZW50SW1wbDo6WE1MRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYywgRE9NU3RyaW5nSW1wbCAqX3F1YWxpZmllZE5hbWUsIERPTVN0cmluZ0ltcGwgKl9u
YW1lc3BhY2VVUkkpCi0gICAgOiBFbGVtZW50SW1wbChkb2MpCi17Ci0gICAgaW50IGNvbG9ucG9z
ID0gLTE7Ci0gICAgZm9yICh1aW50IGkgPSAwOyBpIDwgX3F1YWxpZmllZE5hbWUtPmw7ICsraSkK
LSAgICAgICAgaWYgKF9xdWFsaWZpZWROYW1lLT5zW2ldID09ICc6JykgewotICAgICAgICAgICAg
Y29sb25wb3MgPSBpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIGlmIChj
b2xvbnBvcyA+PSAwKSB7Ci0gICAgICAgIC8vIHdlIGhhdmUgYSBwcmVmaXgKLSAgICAgICAgRE9N
U3RyaW5nSW1wbCogbG9jYWxOYW1lID0gX3F1YWxpZmllZE5hbWUtPmNvcHkoKTsKLSAgICAgICAg
bG9jYWxOYW1lLT5yZWYoKTsKLSAgICAgICAgbG9jYWxOYW1lLT5yZW1vdmUoMCxjb2xvbnBvcysx
KTsKLSAgICAgICAgbV9pZCA9IGRvYy0+ZG9jdW1lbnQoKS0+dGFnSWQoX25hbWVzcGFjZVVSSSwg
bG9jYWxOYW1lLCBmYWxzZSk7Ci0gICAgICAgIGxvY2FsTmFtZS0+ZGVyZWYoKTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHNpdHVhdGlvbiBmb3Igc3Rh
Z2Ugb25lIG9mIHRoZSBRdWFsaWZpZWROYW1lIHBhdGNoLiAgVGhpcyBpcyBhbHNvIGEgcmVhbGx5
IHN0dXBpZCB3YXkgdG8KLSAgICAgICAgLy8gaGF2ZSB0byBoYW5kbGUgdGhlIHByZWZpeC4gIFdh
eSB0b28gbXVjaCBjb3B5aW5nLiAgV2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGUgWE1MIHRva2VuaXpl
ciBoYXMgZG9uZSB0aGUgc3BsaXQKLSAgICAgICAgLy8gYWxyZWFkeSBpbnRvIHByZWZpeCBhbmQg
bG9jYWxOYW1lLgotICAgICAgICBET01TdHJpbmdJbXBsKiBwcmVmaXggPSBfcXVhbGlmaWVkTmFt
ZS0+Y29weSgpOwotICAgICAgICBwcmVmaXgtPnJlZigpOwotICAgICAgICBwcmVmaXgtPnRydW5j
YXRlKGNvbG9ucG9zKTsKLSAgICAgICAgbV90YWdOYW1lID0gUXVhbGlmaWVkTmFtZShwcmVmaXgs
IG51bGxBdG9tLCBudWxsQXRvbSk7Ci0gICAgICAgIHByZWZpeC0+ZGVyZWYoKTsKLSAgICB9Ci0g
ICAgZWxzZQotICAgICAgICAvLyBubyBwcmVmaXgKLSAgICAgICAgbV9pZCA9IGRvYy0+ZG9jdW1l
bnQoKS0+dGFnSWQoX25hbWVzcGFjZVVSSSwgX3F1YWxpZmllZE5hbWUsIGZhbHNlKTsKLX0KLQot
Ki8KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBOYW1lZEF0dHJNYXBJbXBsOjpOYW1lZEF0dHJN
YXBJbXBsKEVsZW1lbnRJbXBsICplKQogICAgIDogZWxlbWVudChlKQogICAgICwgYXR0cnMoMCkK
SW5kZXg6IGtodG1sL3htbC9kb21fc3RyaW5naW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9zdHJpbmdpbXBsLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4zMApkaWZmIC1wIC11IC1yMS4zMCBraHRtbC94bWwvZG9tX3N0cmluZ2lt
cGwuY3BwCi0tLSBraHRtbC94bWwvZG9tX3N0cmluZ2ltcGwuY3BwCTI1IEF1ZyAyMDA1IDE3OjQ3
OjIxIC0wMDAwCTEuMzAKKysrIGtodG1sL3htbC9kb21fc3RyaW5naW1wbC5jcHAJNSBTZXAgMjAw
NSAxODowOTozOCAtMDAwMApAQCAtNDMsMTIgKzQ2LDEzIEBAIERPTVN0cmluZ0ltcGwqIERPTVN0
cmluZ0ltcGw6OmVtcHR5KCkKICAgICByZXR1cm4gJmU7CiB9CiAKLURPTVN0cmluZ0ltcGw6OkRP
TVN0cmluZ0ltcGwoY29uc3QgUUNoYXIgKnN0ciwgdW5zaWduZWQgaW50IGxlbikgeworRE9NU3Ry
aW5nSW1wbDo6RE9NU3RyaW5nSW1wbChjb25zdCBRQ2hhciAqc3RyLCB1bnNpZ25lZCBsZW4pCit7
CiAgICAgX2hhc2ggPSAwOwogICAgIF9pblRhYmxlID0gZmFsc2U7CiAgICAgYm9vbCBoYXZlc3Ry
ID0gc3RyICYmIGxlbjsKLSAgICBzID0gUVRfQUxMT0NfUUNIQVJfVkVDKCBoYXZlc3RyID8gbGVu
IDogMSApOwotICAgIGlmKHN0ciAmJiBsZW4pIHsKKyAgICBzID0gUVRfQUxMT0NfUUNIQVJfVkVD
KGhhdmVzdHIgPyBsZW4gOiAxKTsKKyAgICBpZiAoaGF2ZXN0cikgewogICAgICAgICBtZW1jcHko
IHMsIHN0ciwgbGVuICogc2l6ZW9mKFFDaGFyKSApOwogICAgICAgICBsID0gbGVuOwogICAgIH0g
ZWxzZSB7CkBAIC0yMzUsNyArMjc1LDcgQEAgc3RhdGljIExlbmd0aCBwYXJzZUxlbmd0aChRQ2hh
ciAqcywgdW5zaQogICAgICAgICArK2k7CiAKICAgICBib29sIG9rOwotICAgIGludCByID0gUUNv
bnN0U3RyaW5nKHMsIGkpLnFzdHJpbmcoKS50b0ludCgmb2spOworICAgIGludCByID0gUUNvbnN0
U3RyaW5nKHMsIGkpLnN0cmluZygpLnRvSW50KCZvayk7CiAKICAgICAvKiBTa2lwIG92ZXIgYW55
IHJlbWFpbmluZyBkaWdpdHMsIHdlIGFyZSBub3QgdGhhdCBhY2N1cmF0ZSAoNS41JSA9PiA1JSkg
Ki8KICAgICB3aGlsZSAoaSA8IGwgJiYgKHNbaV0uaXNEaWdpdCgpIHx8IHNbaV0gPT0gJy4nKSkK
QEAgLTQyNCw3ICs0NjQsNyBAQCBpbnQgRE9NU3RyaW5nSW1wbDo6dG9JbnQoYm9vbCAqb2spIGNv
bnN0CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgcmV0dXJuIFFDb25zdFN0cmluZyhzLCBp
KS5xc3RyaW5nKCkudG9JbnQob2spOworICAgIHJldHVybiBRQ29uc3RTdHJpbmcocywgaSkuc3Ry
aW5nKCkudG9JbnQob2spOwogfQogCiBET01TdHJpbmdJbXBsICpET01TdHJpbmdJbXBsOjpyZXBs
YWNlKFFDaGFyIG9sZEMsIFFDaGFyIG5ld0MpCkluZGV4OiBrd3EvS1dRU3RyaW5nLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUVN0cmluZy5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjExNQpkaWZmIC1wIC11IC1yMS4xMTUga3dxL0tXUVN0cmluZy5oCi0t
LSBrd3EvS1dRU3RyaW5nLmgJMjUgQXVnIDIwMDUgMTc6NDc6MjYgLTAwMDAJMS4xMTUKKysrIGt3
cS9LV1FTdHJpbmcuaAk1IFNlcCAyMDA1IDE4OjA5OjUwIC0wMDAwCkBAIC03NTIsNyArNzUyLDcg
QEAgY2xhc3MgUUNvbnN0U3RyaW5nIDogcHJpdmF0ZSBRU3RyaW5nIHsKIHB1YmxpYzoKICAgICBR
Q29uc3RTdHJpbmcoY29uc3QgUUNoYXIgKiwgdWludCk7CiAgICAgflFDb25zdFN0cmluZygpOwot
ICAgIGNvbnN0IFFTdHJpbmcgJnFzdHJpbmcoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorICAg
IGNvbnN0IFFTdHJpbmcgJnN0cmluZygpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CiB9OwogCiAj
ZW5kaWYKSW5kZXg6IGtodG1sL2RvbS9kb21fc3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vZG9tX3N0cmluZy5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMjAKZGlmZiAtcCAtdSAtcjEuMjAga2h0bWwvZG9tL2RvbV9zdHJpbmcuY3Bw
Ci0tLSBraHRtbC9kb20vZG9tX3N0cmluZy5jcHAgICAgMjkgQXVnIDIwMDUgMjE6Mjk6MTEgLTAw
MDAgICAgICAxLjIwCisrKyBraHRtbC9kb20vZG9tX3N0cmluZy5jcHAgICAgNSBTZXAgMjAwNSAx
OTozOToxMCAtMDAwMApAQCAtMjA0LDcgKzIwNCw3IEBAIGJvb2wgRE9NU3RyaW5nOjpwZXJjZW50
YWdlKGludCAmX3BlcmNlbnQKICAgICBpZiAoICoobV9pbXBsLT5zK21faW1wbC0+bC0xKSAhPSBR
Q2hhcignJScpKQogICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIF9wZXJjZW50YWdlID0gUUNv
bnN0U3RyaW5nKG1faW1wbC0+cywgbV9pbXBsLT5sLTEpLnFzdHJpbmcoKS50b0ludCgpOworICAg
IF9wZXJjZW50YWdlID0gUUNvbnN0U3RyaW5nKG1faW1wbC0+cywgbV9pbXBsLT5sLTEpLnN0cmlu
ZygpLnRvSW50KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5361</attachid>
            <date>2005-12-29 17:54:28 -0800</date>
            <delta_ts>2005-12-30 02:16:09 -0800</delta_ts>
            <desc>eliminate strcmp, and replace strcasecmp with equalIgnoringCase</desc>
            <filename>EqualIgnoringCasePatch.txt</filename>
            <type>text/plain</type>
            <size>63494</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9D
aGFuZ2VMb2csdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTUKZGlmZiAtcCAtdSAtcjEuNTUgQ2hh
bmdlTG9nCi0tLSBDaGFuZ2VMb2cJMjkgRGVjIDIwMDUgMjM6NDk6MDMgLTAwMDAJMS41NQorKysg
Q2hhbmdlTG9nCTMwIERlYyAyMDA1IDAxOjUzOjM2IC0wMDAwCkBAIC0xLDMgKzEsOTIgQEAKKzIw
MDUtMTItMjkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gaHR0cDovL2J1Z3ppbGxhLm9wZW5k
YXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD00NTU3CisgICAgICAgICAgcmVuYW1lIHVudXN1YWwg
c3RyY21wIGFuZCBzdHJjYXNlY21wIGZvciBET01TdHJpbmcgZmFtaWx5CisKKyAgICAgICAgQWRk
ZWQgbmV3IGZ1bmN0aW9ucyBuYW1lZCBlcXVhbCBhbmQgZXF1YWxJZ25vcmluZ0Nhc2UuCisKKyAg
ICAgICAgKiBraHRtbC94bWwvZG9tX3N0cmluZ2ltcGwuaDogQWRkZWQgdGhlICJMb3dlcmNhc2Vk
IiB0eXBlIGFuZCBpdHMgdmFsdWUgImxvd2VyY2FzZWQiLCB3aGljaAorICAgICAgICB3aWxsIGJl
IHVzZWQgdG8gaW1wbGVtZW50IGNvbnN0cnVjdG9ycyB0aGF0IG1ha2UgYXRvbWljIHN0cmluZ3Mg
dGhhdCBhcmUgYWxyZWFkeSBsb3dlcmNhc2UKKyAgICAgICAgaW4gYW4gZWZmaWNpZW50IHdheS4g
QWRkZWQgb3ZlcmxvYWRzIG9mIHRoZSBET01TdHJpbmdJbXBsIGNvbnN0cnVjdG9ycyB3aXRoIGxv
d2VyY2FzZWQKKyAgICAgICAgKG5vdCB5ZXQgaW1wbGVtZW50ZWQpLiBDaGFuZ2VkIHRoZSB0eXBl
IG9mIHRoZSBwYXJhbWV0ZXIgdG8gY29tcHV0ZUhhc2ggdG8gdW5zaWduZWQgdG8gbWF0Y2gKKyAg
ICAgICAgdGhlIHJlc3Qgb2YgdGhlIGludGVyZmFjZS4gQWRkZWQgZXF1YWwgYW5kIGVxdWFsSWdu
b3JpbmdDYXNlIGZ1bmN0aW9ucy4gQWRkZWQgYSB2ZXJzaW9uIG9mCisgICAgICAgIHRoZSBoYXNo
IGZ1bmN0aW9uIHRoYXQgd29ya3Mgb24gY2hhciogdG8gQ2FzZUluc2Vuc2l0aXZlSGFzaCwgYWxz
byBhcyBwcmVwYXJhdGlvbiBmb3IgdGhlCisgICAgICAgIGF0b21pYyBzdHJpbmcgY2hhbmdlLgor
ICAgICAgICAqIGtodG1sL3htbC9kb21fc3RyaW5naW1wbC5jcHA6IE1vdmVkIHRoZSBRVF9BTExP
Q19RQ0hBUl9WRUMgYW5kIFFUX0RFTEVURV9RQ0hBUl9WRUMgbWFjcm9zCisgICAgICAgIGhlcmUs
IGFuZCBjaGFuZ2VkIHRoZW0gaW50byBpbmxpbmUgZnVuY3Rpb25zLgorICAgICAgICAoRE9NOjpl
cXVhbCk6IEltcGxlbWVudGVkLgorICAgICAgICAoRE9NOjplcXVhbElnbm9yaW5nQ2FzZSk6IElt
cGxlbWVudGVkLgorICAgICAgICAoRE9NOjpET01TdHJpbmdJbXBsOjpjb21wdXRlSGFzaCk6IENo
YW5nZWQgcGFyYW1ldGVyIHR5cGUgdG8gdW5zaWduZWQgdG8gbWF0Y2ggb3RoZXIgc2ltaWxhcgor
ICAgICAgICBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBraHRtbC9kb20vZG9tX3N0cmluZy5oOiBS
ZW1vdmVkIHVubmVjZXNzYXJ5IGZyaWVuZCBkZWNsYXJhdGlvbnMuIENoYW5nZWQgb3BlcmF0b3IK
KyAgICAgICAgb3ZlcmxvYWRzIGZvciA9PSBhbmQgIT0gdG8gY2FsbCB0aHJvdWdoIGlubGluZSB0
byBET01TdHJpbmdJbXBsLiBSZXBsYWNlZCBzdHJjYXNlY21wCisgICAgICAgIHdpdGggZXF1YWxJ
Z25vcmluZ0Nhc2UsIG92ZXJsb2FkZWQgZm9yIG9uZSBtb3JlIGNvbWJpbmF0aW9uIG9mIHBhcmFt
ZXRlcnMuIFJlbW92ZWQgc3RyY21wLgorICAgICAgICAqIGtodG1sL2RvbS9kb21fc3RyaW5nLmNw
cDogUmVtb3ZlZCBmdW5jdGlvbnMgdGhhdCBhcmUgbm93IGltcGxlbWVudGVkIGluIERPTVN0cmlu
Z0ltcGwqLgorCisgICAgICAgICoga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuaDogUmVtb3Zl
ZCBhIHJlZHVuZGFudCBjb25zdC4gUmVtb3ZlZCB1bm5lY2Vzc2FyeQorICAgICAgICBmcmllbmQg
ZGVjbGFyYXRpb25zLiBSZW1vdmVkIEF0b21pY1N0cmluZzo6ZXF1YWwuIEZpbGxlZCBvdXQgYSBs
YXJnZXIgc2V0IG9mID09IGFuZAorICAgICAgICAhPSBvcGVyYXRvciBpbXBsZW1lbnRhdGlvbnMs
IG1vc3RseSB3aXRoIGlubGluZXMgY2FsbGluZyB0aHJvdWdoIHRvIERPTVN0cmluZ0ltcGwuCisg
ICAgICAgIFJlbmFtZWQgZXF1YWxzSWdub3JlQ2FzZSB0byBlcXVhbElnbm9yaW5nQ2FzZSBhbmQg
ZmlsbGVkIG91dCBhIGxhcmdlciBzZXQgYXMgYWJvdmUuCisgICAgICAgICoga2h0bWwveG1sL2Rv
bV9hdG9taWNzdHJpbmcuY3BwOiBSZW5hbWVkIEF0b21pY1N0cmluZzo6ZXF1YWwgdG8ganVzdCA9
PS4KKyAgICAgICAgUmVtb3ZlZCBzb21lIGltcGxlbWVudGF0aW9uIG9mID09IGFuZCBlcXVhbHNJ
Z25vcmVDYXNlIHRoYXQgYXJlIHJlcGxhY2VkIGJ5IGlubGluZXMuCisKKyAgICAgICAgKiBraHRt
bC9odG1sL2h0bWxfbGlzdGltcGwuY3BwOgorICAgICAgICAoRE9NOjpIVE1MT0xpc3RFbGVtZW50
SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoRE9NOjpIVE1MTElFbGVtZW50
SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICBVc2UgdGhlICI9PSIgb3BlcmF0
b3IgaW5zdGVhZCBvZiBzdHJjYXNlY21wLgorCisgICAgICAgICoga2h0bWwvY3NzL2Nzc3N0eWxl
c2VsZWN0b3IuY3BwOiAoa2h0bWw6OkNTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0b3Ip
OgorICAgICAgICBVc2UgZXF1YWxJZ25vcmluZ0Nhc2UgaW5zdGVhZCBvZiBlcXVhbHNJZ25vcmVD
YXNlLgorCisgICAgICAgICoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcDoKKyAgICAg
ICAgKFJlbmRlclNsaWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQpOiBGaXhlZCBidWcgd2hlcmUgYSB0
ZW1wb3JhcnkgRE9NU3RyaW5nIHdhcyBwdXQgaW50bworICAgICAgICBhIGNvbnN0IERPTVN0cmlu
ZyYuIENoYW5nZWQgc29tZSBET01TdHJpbmcgdG8gQXRvbWljU3RyaW5nIGFzIGFwcHJvcHJpYXRl
LCBhbmQgYWxzbworICAgICAgICB1c2VkIGV1cWxJZ25vcmluZ0Nhc2UgaW5zdGVhZCBvZiBzdHJj
YXNlY21wLgorICAgICAgICAoUmVuZGVyU2xpZGVyOjpzbG90U2xpZGVyVmFsdWVDaGFuZ2VkKTog
TW9yZSBvZiB0aGUgc2FtZS4KKworICAgICAgICAqIGtodG1sL3htbC9kb21fZG9jaW1wbC5jcHA6
IChEb2N1bWVudEltcGw6OnByb2Nlc3NIdHRwRXF1aXYpOiBSZXBsYWNlZCB1c2Ugb2Ygc3RyY2Fz
ZWNtcAorICAgICAgICB3aXRoIGVxdWFsSWdub3JpbmdDYXNlLiBBZGRlZCBwYXJlbnRoZXNlcyB0
byBmaXggaW5jb3JyZWN0IG9wZXJhdG9yIHByZWNlZGVuY2UgaW4gb25lIGNhc2UKKyAgICAgICAg
KCYmIGJpbmRzIHRpZ2h0ZXIgdGhhbiB8fCkgd2hpY2ggZml4ZXMgYSBjcmFzaCB3aGVuIHVzaW5n
IGEgaHR0cC1lcXVpdiBwcmFnbWEgd2hlbiB0aGVyZQorICAgICAgICBpcyBubyBwYXJ0IChub3Qg
c3VyZSBob3cgdG8gcmVwcm9kdWNlIHRoYXQpLgorCisgICAgICAgICoga2h0bWwva2h0bWxfcGFy
dC5jcHA6CisgICAgICAgICh1cGRhdGVTdGF0ZSk6CisgICAgICAgIChLSFRNTFBhcnQ6OnNlbGVj
dGlvblN0YXJ0SGFzU3R5bGUpOgorICAgICAgICAqIGtodG1sL2VjbWEva2pzX2h0bWwuY3BwOiAo
S0pTOjpLSlM6OkhUTUxEb2N1bWVudDo6cHV0VmFsdWVQcm9wZXJ0eSk6CisgICAgICAgICoga2h0
bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcDoKKyAgICAgICAgKGtodG1sOjpTdHls
ZUNoYW5nZTo6Y2hlY2tGb3JMZWdhY3lIVE1MU3R5bGVDaGFuZ2UpOgorICAgICAgICAoa2h0bWw6
OlN0eWxlQ2hhbmdlOjpjdXJyZW50bHlIYXNTdHlsZSk6CisgICAgICAgIChraHRtbDo6aGFzVGV4
dERlY29yYXRpb25Qcm9wZXJ0eSk6CisgICAgICAgIChraHRtbDo6QXBwbHlTdHlsZUNvbW1hbmQ6
OmV4dHJhY3RUZXh0RGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKGtodG1sOjpBcHBseVN0eWxl
Q29tbWFuZDo6ZXh0cmFjdEFuZE5lZ2F0ZVRleHREZWNvcmF0aW9uU3R5bGUpOgorICAgICAgICAq
IGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHA6CisgICAgICAgIChIVE1MQm9keUVsZW1lbnRJ
bXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChIVE1MRnJhbWVFbGVtZW50SW1w
bDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtodG1sL2h0bWwvaHRtbF9ibG9j
a2ltcGwuY3BwOgorICAgICAgICAoSFRNTERpdkVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZSk6CisgICAgICAgIChIVE1MSFJFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUp
OgorICAgICAgICAoSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZSk6CisgICAgICAgIChIVE1MTWFycXVlZUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZSk6CisgICAgICAgICoga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmNwcDoKKyAgICAgICAg
KEhUTUxFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoSFRNTEVs
ZW1lbnRJbXBsOjphZGRIVE1MQWxpZ25tZW50KToKKyAgICAgICAgKEhUTUxFbGVtZW50SW1wbDo6
c2V0Q29udGVudEVkaXRhYmxlKToKKyAgICAgICAgKiBraHRtbC9odG1sL2h0bWxfZm9ybWltcGwu
Y3BwOgorICAgICAgICAoRE9NOjpIVE1MRm9ybUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZSk6CisgICAgICAgIChET006OkhUTUxCdXR0b25FbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUpOgorICAgICAgICAoRE9NOjpIVE1MSW5wdXRFbGVtZW50SW1wbDo6c2V0SW5wdXRU
eXBlKToKKyAgICAgICAgKERPTTo6SFRNTElucHV0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKToKKyAgICAgICAgKERPTTo6SFRNTEtleWdlbkVsZW1lbnRJbXBsOjphcHBlbmRGb3Jt
RGF0YSk6CisgICAgICAgIChET006OkhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZSk6CisgICAgICAgICoga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHA6IChE
T006OkhUTUxBcmVhRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KiBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHA6IChET006OkhUTUxCUkVsZW1lbnRJbXBs
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICoga2h0bWwvaHRtbC9odG1sX3RhYmxl
aW1wbC5jcHA6IChET006OkhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUpOgorICAgICAgICAqIGtodG1sL2h0bWwvaHRtbHBhcnNlci5jcHA6IChIVE1MUGFyc2Vy
OjpoYW5kbGVFcnJvcik6CisgICAgICAgIFVzZSBlcXVhbElnbm9yaW5nQ2FzZSBpbnN0ZWFkIG9m
IHN0cmNhc2VjbXAuCisKIDIwMDUtMTItMjkgIE1hcmsgUm93ZSAgPG9wZW5kYXJ3aW4ub3JnQGJk
YXNoLm5ldC5uej4KIAogICAgICAgICBSZXZpZXdlZCBieSBlc2VpZGVsLCBnZ2FyZW4sIGRhcmlu
LgpJbmRleDoga2h0bWwva2h0bWxfcGFydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwva2h0bWxfcGFydC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MzczCmRpZmYgLXAgLXUgLXIxLjM3MyBraHRtbC9raHRtbF9wYXJ0LmNwcAotLS0ga2h0bWwva2h0
bWxfcGFydC5jcHAJMjMgRGVjIDIwMDUgMTg6NDQ6MDQgLTAwMDAJMS4zNzMKKysrIGtodG1sL2to
dG1sX3BhcnQuY3BwCTMwIERlYyAyMDA1IDAxOjUzOjM5IC0wMDAwCkBAIC0zMDE3LDcgKzMwMTcs
NyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVTdGF0ZShDU1NNdXRhYmxlU3R5bGVECiAgICAgICAgIGlu
dCBwcm9wZXJ0eUlEID0gKCppdCkuaWQoKTsKICAgICAgICAgRE9NU3RyaW5nIGRlc2lyZWRQcm9w
ZXJ0eSA9IGRlc2lyZWRTdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsKICAgICAg
ICAgRE9NU3RyaW5nIGNvbXB1dGVkUHJvcGVydHkgPSBjb21wdXRlZFN0eWxlLT5nZXRQcm9wZXJ0
eVZhbHVlKHByb3BlcnR5SUQpOwotICAgICAgICBLSFRNTFBhcnQ6OlRyaVN0YXRlIHByb3BlcnR5
U3RhdGUgPSBzdHJjYXNlY21wKGRlc2lyZWRQcm9wZXJ0eSwgY29tcHV0ZWRQcm9wZXJ0eSkgPT0g
MAorICAgICAgICBLSFRNTFBhcnQ6OlRyaVN0YXRlIHByb3BlcnR5U3RhdGUgPSBlcXVhbElnbm9y
aW5nQ2FzZShkZXNpcmVkUHJvcGVydHksIGNvbXB1dGVkUHJvcGVydHkpCiAgICAgICAgICAgICA/
IEtIVE1MUGFydDo6dHJ1ZVRyaVN0YXRlIDogS0hUTUxQYXJ0OjpmYWxzZVRyaVN0YXRlOwogICAg
ICAgICBpZiAoYXRTdGFydCkgewogICAgICAgICAgICAgc3RhdGUgPSBwcm9wZXJ0eVN0YXRlOwpA
QCAtMzA4NCw5ICszMDg0LDcgQEAgYm9vbCBLSFRNTFBhcnQ6OnNlbGVjdGlvblN0YXJ0SGFzU3R5
bGUoQwogICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7CiAgICAg
Zm9yIChRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtdXRhYmxlU3R5
bGUtPnZhbHVlc0l0ZXJhdG9yKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpbnQgcHJv
cGVydHlJRCA9ICgqaXQpLmlkKCk7Ci0gICAgICAgIERPTVN0cmluZyBkZXNpcmVkUHJvcGVydHkg
PSBtdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5VmFsdWUocHJvcGVydHlJRCk7Ci0gICAgICAgIERP
TVN0cmluZyBzZWxlY3Rpb25Qcm9wZXJ0eSA9IHNlbGVjdGlvblN0eWxlLT5nZXRQcm9wZXJ0eVZh
bHVlKHByb3BlcnR5SUQpOwotICAgICAgICBpZiAoc3RyY2FzZWNtcChzZWxlY3Rpb25Qcm9wZXJ0
eSwgZGVzaXJlZFByb3BlcnR5KSAhPSAwKSB7CisgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nh
c2UobXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpLCBzZWxlY3Rpb25T
dHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKSkpIHsKICAgICAgICAgICAgIG1hdGNo
ID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDoga2h0bWwvY3Nz
L2Nzc3N0eWxlc2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4yMzIKZGlmZiAtcCAtdSAtcjEuMjMyIGtodG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAot
LS0ga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCTIzIERlYyAyMDA1IDE4OjQ0OjA2IC0w
MDAwCTEuMjMyCisrKyBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAJMzAgRGVjIDIwMDUg
MDE6NTM6NDIgLTAwMDAKQEAgLTEyNDksOCArMTI0OSw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rv
cjo6Y2hlY2tPbmVTZWxlY3RvcigKIAogICAgICAgICBzd2l0Y2goc2VsLT5tYXRjaCkgewogICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpFeGFjdDoKLQkgICAgaWYgKChpc1hNTERvYyAmJiBzZWwt
PnZhbHVlICE9IHZhbHVlKSB8fAotICAgICAgICAgICAgICAgICghaXNYTUxEb2MgJiYgIWVxdWFs
c0lnbm9yZUNhc2Uoc2VsLT52YWx1ZSwgdmFsdWUpKSkKKwkgICAgaWYgKChpc1hNTERvYyAmJiBz
ZWwtPnZhbHVlICE9IHZhbHVlKSB8fCAoIWlzWE1MRG9jICYmICFlcXVhbElnbm9yaW5nQ2FzZShz
ZWwtPnZhbHVlLCB2YWx1ZSkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpMaXN0OgpAQCAtMTI2MCw4
ICsxMjU5LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAg
ICAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIGxpc3QsIGp1c3QgYSBzaW5nbGUgaXRlbS4gIFdl
IGNhbiBhdm9pZAogICAgICAgICAgICAgICAgIC8vIGFsbG9jaW5nIFFTdHJpbmdzIGFuZCBqdXN0
IHRyZWF0IHRoaXMgYXMgYW4gZXhhY3QKICAgICAgICAgICAgICAgICAvLyBtYXRjaCBjaGVjay4K
LSAgICAgICAgICAgICAgICBpZiAoKGlzWE1MRG9jICYmIHNlbC0+dmFsdWUgIT0gdmFsdWUpIHx8
Ci0gICAgICAgICAgICAgICAgICAgICghaXNYTUxEb2MgJiYgIWVxdWFsc0lnbm9yZUNhc2Uoc2Vs
LT52YWx1ZSwgdmFsdWUpKSkKKyAgICAgICAgICAgICAgICBpZiAoKGlzWE1MRG9jICYmIHNlbC0+
dmFsdWUgIT0gdmFsdWUpIHx8ICghaXNYTUxEb2MgJiYgIWVxdWFsSWdub3JpbmdDYXNlKHNlbC0+
dmFsdWUsIHZhbHVlKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KSW5kZXg6IGtodG1sL2RvbS9kb21fc3Ry
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20v
ZG9tX3N0cmluZy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjQKZGlmZiAtcCAtdSAtcjEu
MjQga2h0bWwvZG9tL2RvbV9zdHJpbmcuY3BwCi0tLSBraHRtbC9kb20vZG9tX3N0cmluZy5jcHAJ
MTYgRGVjIDIwMDUgMjI6MjY6MTIgLTAwMDAJMS4yNAorKysga2h0bWwvZG9tL2RvbV9zdHJpbmcu
Y3BwCTMwIERlYyAyMDA1IDAxOjUzOjQzIC0wMDAwCkBAIC0yNjUsMjAgKzI2NSw2IEBAIGNvbnN0
IGNoYXIgKkRPTVN0cmluZzo6YXNjaWkoKSBjb25zdAogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKLWJvb2wgb3BlcmF0b3I9PSggY29uc3QgRE9NU3RyaW5nICZhLCBjb25zdCBET01TdHJpbmcg
JmIgKQotewotICAgIGlmIChhLm1faW1wbCA9PSBiLm1faW1wbCkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgCi0gICAgdW5zaWduZWQgaW50IGwgPSBhLmxlbmd0aCgpOwotCi0gICAgaWYgKCBs
ICE9IGIubGVuZ3RoKCkgKSByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1lbWNtcChhLnVuaWNv
ZGUoKSwgYi51bmljb2RlKCksIGwqc2l6ZW9mKFFDaGFyKSkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogYm9vbCBvcGVyYXRvcj09KCBjb25zdCBET01TdHJp
bmcgJmEsIGNvbnN0IFFTdHJpbmcgJmIgKQogewogICAgIHVuc2lnbmVkIGludCBsID0gYS5sZW5n
dGgoKTsKQEAgLTI5MCwyMyArMjc2LDQgQEAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBET01TdHJp
bmcgJmEsIGNvbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBvcGVyYXRvcj09KCBjb25z
dCBET01TdHJpbmcgJmEsIGNvbnN0IGNoYXIgKmIgKQotewotICAgIERPTVN0cmluZ0ltcGwgKmFp
bXBsID0gYS5tX2ltcGwuZ2V0KCk7Ci0gICAgCi0gICAgaWYgKCFiKQotICAgICAgICByZXR1cm4g
IWFpbXBsOwotICAgIAotICAgIGlmIChhaW1wbCkgewotICAgICAgICBpbnQgYWxlbiA9IGFpbXBs
LT5sOwotICAgICAgICBjb25zdCBRQ2hhciAqYXB0ciA9IGFpbXBsLT5zOwotICAgICAgICB3aGls
ZSAoYWxlbi0tKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAqYisrOwotICAgICAg
ICAgICAgaWYgKCFjIHx8ICgqYXB0cisrKS51bmljb2RlKCkgIT0gYykKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuICpiID09IDA7Ci19
Ci0KIH0KSW5kZXg6IGtodG1sL2RvbS9kb21fc3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2RvbV9zdHJpbmcuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xOApkaWZmIC1wIC11IC1yMS4xOCBraHRtbC9kb20vZG9tX3N0cmluZy5oCi0tLSBr
aHRtbC9kb20vZG9tX3N0cmluZy5oCTI1IERlYyAyMDA1IDA1OjExOjA1IC0wMDAwCTEuMTgKKysr
IGtodG1sL2RvbS9kb21fc3RyaW5nLmgJMzAgRGVjIDIwMDUgMDE6NTM6NDMgLTAwMDAKQEAgLTQ2
LDggKzQ2LDYgQEAgY2xhc3MgRE9NU3RyaW5nSW1wbDsKIGNsYXNzIERPTVN0cmluZwogewogICAg
IGZyaWVuZCBjbGFzcyBDaGFyYWN0ZXJEYXRhSW1wbDsKLSAgICBmcmllbmQgYm9vbCBvcGVyYXRv
cj09KCBjb25zdCBET01TdHJpbmcgJmEsIGNvbnN0IGNoYXIgKmIgKTsKLSAgICBmcmllbmQgYm9v
bCBvcGVyYXRvcj09KCBjb25zdCBET01TdHJpbmcgJmEsIGNvbnN0IERPTVN0cmluZyAmYiApOwog
cHVibGljOgogICAgIC8qKgogICAgICAqIGRlZmF1bHQgY29uc3RydWN0b3IuIEdpdmVzIGFuIGVt
cHR5IERPTVN0cmluZwpAQCAtMTI4LDIxICsxMjYsMjUgQEAgcHJvdGVjdGVkOgogICAgIFJlZlB0
cjxET01TdHJpbmdJbXBsPiBtX2ltcGw7CiB9OwogCi1ET01TdHJpbmcgb3BlcmF0b3IgKyAoY29u
c3QgRE9NU3RyaW5nICZhLCBjb25zdCBET01TdHJpbmcgJmIpOwotYm9vbCBvcGVyYXRvcj09KCBj
b25zdCBET01TdHJpbmcgJmEsIGNvbnN0IFFTdHJpbmcgJmIgKTsKLWJvb2wgb3BlcmF0b3I9PSgg
Y29uc3QgRE9NU3RyaW5nICZhLCBjb25zdCBjaGFyICpiICk7Ci1pbmxpbmUgYm9vbCBvcGVyYXRv
cj09KCBjb25zdCBRU3RyaW5nICZiLCBjb25zdCBET01TdHJpbmcgJmEgKSB7IHJldHVybiBhID09
IGI7IH0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0IGNoYXIgKmIsIGNvbnN0IERPTVN0
cmluZyAmYSApIHsgcmV0dXJuIGEgPT0gYjsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY29u
c3QgRE9NU3RyaW5nICZhLCBjb25zdCBET01TdHJpbmcgJmIgKSB7IHJldHVybiAhKGE9PWIpOyB9
Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBET01TdHJpbmcgJmEsIGNvbnN0IFFTdHJp
bmcgJmIgKSB7IHJldHVybiAhKGE9PWIpOyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KCBjb25z
dCBET01TdHJpbmcgJmEsIGNvbnN0IGNoYXIgKmIgKSAgeyByZXR1cm4gIShhPT1iKTsgfQotaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVN0cmluZyAmYiwgY29uc3QgRE9NU3RyaW5nICZh
ICkgeyByZXR1cm4gIShhPT1iKTsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgY2hh
ciAqYiwgY29uc3QgRE9NU3RyaW5nICZhICkgIHsgcmV0dXJuICEoYT09Yik7IH0KLWlubGluZSBi
b29sIHN0cmNtcCggY29uc3QgRE9NU3RyaW5nICZhLCBjb25zdCBET01TdHJpbmcgJmIgKSB7IHJl
dHVybiBhICE9IGI7IH0KLQotLy8gcmV0dXJucyBmYWxzZSB3aGVuIGVxdWFsLCB0cnVlIG90aGVy
d2lzZSAoaWdub3JpbmcgY2FzZSkKLWJvb2wgc3RyY2FzZWNtcCggY29uc3QgRE9NU3RyaW5nICZh
LCBjb25zdCBET01TdHJpbmcgJmIgKTsKLWJvb2wgc3RyY2FzZWNtcCggY29uc3QgRE9NU3RyaW5n
JiBhLCBjb25zdCBjaGFyKiBiICk7CitET01TdHJpbmcgb3BlcmF0b3IrKGNvbnN0IERPTVN0cmlu
ZyYsIGNvbnN0IERPTVN0cmluZyYpOworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERP
TVN0cmluZyYgYSwgY29uc3QgRE9NU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbChhLmltcGwoKSwg
Yi5pbXBsKCkpOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERPTVN0cmluZyYgYSwg
Y29uc3QgY2hhciogYikgeyByZXR1cm4gZXF1YWwoYS5pbXBsKCksIGIpOyB9CitpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGNoYXIqIGEsIGNvbnN0IERPTVN0cmluZyYgYikgeyByZXR1cm4g
ZXF1YWwoYSwgYi5pbXBsKCkpOyB9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRE9N
U3RyaW5nJiBhLCBjb25zdCBET01TdHJpbmcmIGIpIHsgcmV0dXJuICFlcXVhbChhLmltcGwoKSwg
Yi5pbXBsKCkpOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IERPTVN0cmluZyYgYSwg
Y29uc3QgY2hhciogYikgeyByZXR1cm4gIWVxdWFsKGEuaW1wbCgpLCBiKTsgfQoraW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBjaGFyKiBhLCBjb25zdCBET01TdHJpbmcmIGIpIHsgcmV0dXJu
ICFlcXVhbChhLCBiLmltcGwoKSk7IH0KKworaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2Uo
Y29uc3QgRE9NU3RyaW5nJiBhLCBjb25zdCBET01TdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsSWdu
b3JpbmdDYXNlKGEuaW1wbCgpLCBiLmltcGwoKSk7IH0KK2lubGluZSBib29sIGVxdWFsSWdub3Jp
bmdDYXNlKGNvbnN0IERPTVN0cmluZyYgYSwgY29uc3QgY2hhciogYikgeyByZXR1cm4gZXF1YWxJ
Z25vcmluZ0Nhc2UoYS5pbXBsKCksIGIpOyB9CitpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2Fz
ZShjb25zdCBjaGFyKiBhLCBjb25zdCBET01TdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsSWdub3Jp
bmdDYXNlKGEsIGIuaW1wbCgpKTsgfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgRE9NU3RyaW5n
JiBhLCBjb25zdCBRU3RyaW5nJiBiKTsKK2lubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFT
dHJpbmcmIGIsIGNvbnN0IERPTVN0cmluZyYgYSkgeyByZXR1cm4gYSA9PSBiOyB9CitpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IERPTVN0cmluZyYgYSwgY29uc3QgUVN0cmluZyYgYikgeyBy
ZXR1cm4gIShhID09IGIpOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFFTdHJpbmcm
IGIsIGNvbnN0IERPTVN0cmluZyYgYSApIHsgcmV0dXJuICEoYSA9PSBiKTsgfQorCit9CiAKLX07
CiAjZW5kaWYKSW5kZXg6IGtodG1sL2VjbWEva2pzX2h0bWwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjE2MQpkaWZmIC1wIC11IC1yMS4xNjEga2h0bWwvZWNtYS9ranNfaHRtbC5j
cHAKLS0tIGtodG1sL2VjbWEva2pzX2h0bWwuY3BwCTI5IERlYyAyMDA1IDA4OjIwOjM3IC0wMDAw
CTEuMTYxCisrKyBraHRtbC9lY21hL2tqc19odG1sLmNwcAkzMCBEZWMgMjAwNSAwMTo1Mzo0OCAt
MDAwMApAQCAtNDgxLDkgKzQ4MSw5IEBAIHZvaWQgS0pTOjpIVE1MRG9jdW1lbnQ6OnB1dFZhbHVl
UHJvcGVydHkKICAgICB7CiAgICAgICBET01TdHJpbmcgbW9kZVN0cmluZyA9IHZhbHVlLT50b1N0
cmluZyhleGVjKS5kb21TdHJpbmcoKTsKICAgICAgIERvY3VtZW50SW1wbDo6SW5oZXJpdGVkQm9v
bCBtb2RlOwotICAgICAgaWYgKCFzdHJjYXNlY21wKG1vZGVTdHJpbmcsICJvbiIpKQorICAgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKG1vZGVTdHJpbmcsICJvbiIpKQogICAgICAgICBtb2RlID0g
RG9jdW1lbnRJbXBsOjpvbjsKLSAgICAgIGVsc2UgaWYgKCFzdHJjYXNlY21wKG1vZGVTdHJpbmcs
ICJvZmYiKSkKKyAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG1vZGVTdHJpbmcsICJv
ZmYiKSkKICAgICAgICAgbW9kZSA9IERvY3VtZW50SW1wbDo6b2ZmOwogICAgICAgZWxzZQogICAg
ICAgICBtb2RlID0gRG9jdW1lbnRJbXBsOjppbmhlcml0OwpJbmRleDoga2h0bWwvZWRpdGluZy9h
cHBseV9zdHlsZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9lZGl0aW5nL2FwcGx5X3N0eWxlX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjIyCmRpZmYgLXAgLXUgLXIxLjIyIGtodG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVf
Y29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFuZC5jcHAJMjIg
RGVjIDIwMDUgMDQ6MTE6MzYgLTAwMDAJMS4yMgorKysga2h0bWwvZWRpdGluZy9hcHBseV9zdHls
ZV9jb21tYW5kLmNwcAkzMCBEZWMgMjAwNSAwMTo1Mzo0OSAtMDAwMApAQCAtMTY3LDEzICsxNjcs
MTMgQEAgYm9vbCBTdHlsZUNoYW5nZTo6Y2hlY2tGb3JMZWdhY3lIVE1MU3R5bAogICAgIERPTVN0
cmluZyB2YWx1ZVRleHQocHJvcGVydHktPnZhbHVlKCktPmNzc1RleHQoKSk7CiAgICAgc3dpdGNo
IChwcm9wZXJ0eS0+aWQoKSkgewogICAgICAgICBjYXNlIENTU19QUk9QX0ZPTlRfV0VJR0hUOgot
ICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAodmFsdWVUZXh0LCAiYm9sZCIpID09IDApIHsKKyAg
ICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZVRleHQsICJib2xkIikpIHsKICAg
ICAgICAgICAgICAgICBtX2FwcGx5Qm9sZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBD
U1NfUFJPUF9GT05UX1NUWUxFOgotICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAodmFsdWVUZXh0
LCAiaXRhbGljIikgPT0gMCB8fCBzdHJjYXNlY21wKHZhbHVlVGV4dCwgIm9ibGlxdWUiKSA9PSAw
KSB7CisgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWVUZXh0LCAiaXRhbGlj
IikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWVUZXh0LCAib2JsaXF1ZSIpKSB7CiAgICAgICAg
ICAgICAgICAgbV9hcHBseUl0YWxpYyA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICB9CkBAIC0yMjQsNyArMjI0LDcgQEAgYm9vbCBTdHlsZUNoYW5nZTo6
Y3VycmVudGx5SGFzU3R5bGUoY29ucwogICAgIFJlZlB0cjxDU1NWYWx1ZUltcGw+IHZhbHVlID0g
c3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHktPmlkKCksIERvTm90VXBkYXRlTGF5
b3V0KTsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJu
IHN0cmNhc2VjbXAodmFsdWUtPmNzc1RleHQoKSwgcHJvcGVydHktPnZhbHVlKCktPmNzc1RleHQo
KSkgPT0gMDsKKyAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUtPmNzc1RleHQoKSwg
cHJvcGVydHktPnZhbHVlKCktPmNzc1RleHQoKSk7CiB9CiAKIHN0YXRpYyBET01TdHJpbmcgJnN0
eWxlU3BhbkNsYXNzU3RyaW5nKCkKQEAgLTcyNSw3ICs3MjUsNyBAQCBzdGF0aWMgYm9vbCBoYXNU
ZXh0RGVjb3JhdGlvblByb3BlcnR5KE5vCiAgICAgRWxlbWVudEltcGwgKmVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxFbGVtZW50SW1wbCAqPihub2RlKTsKICAgICBDU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb25JbXBsIHN0eWxlKGVsZW1lbnQpOwogICAgIFJlZlB0cjxDU1NWYWx1ZUltcGw+IHZhbHVl
ID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NfUFJPUF9URVhUX0RFQ09SQVRJT04sIERv
Tm90VXBkYXRlTGF5b3V0KTsKLSAgICByZXR1cm4gdmFsdWUgJiYgc3RyY2FzZWNtcCh2YWx1ZS0+
Y3NzVGV4dCgpLCAibm9uZSIpICE9IDA7CisgICAgcmV0dXJuIHZhbHVlICYmICFlcXVhbElnbm9y
aW5nQ2FzZSh2YWx1ZS0+Y3NzVGV4dCgpLCAibm9uZSIpOwogfQogCiBzdGF0aWMgTm9kZUltcGwq
IGhpZ2hlc3RBbmNlc3RvcldpdGhUZXh0RGVjb3JhdGlvbihOb2RlSW1wbCAqbm9kZSkKQEAgLTc1
OCw3ICs3NTgsNyBAQCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKkFwcGx5U3R5CiAg
ICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICp0ZXh0RGVjb3JhdGlvblN0eWxlID0g
c3R5bGUtPmNvcHlQcm9wZXJ0aWVzSW5TZXQocHJvcGVydGllcywgMSk7CiAKICAgICBSZWZQdHI8
Q1NTVmFsdWVJbXBsPiBwcm9wZXJ0eSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU19Q
Uk9QX1RFWFRfREVDT1JBVElPTik7Ci0gICAgaWYgKHByb3BlcnR5ICYmIHN0cmNhc2VjbXAocHJv
cGVydHktPmNzc1RleHQoKSwgIm5vbmUiKSAhPSAwKQorICAgIGlmIChwcm9wZXJ0eSAmJiAhZXF1
YWxJZ25vcmluZ0Nhc2UocHJvcGVydHktPmNzc1RleHQoKSwgIm5vbmUiKSkKICAgICAgICAgcmVt
b3ZlQ1NTUHJvcGVydHkoc3R5bGUuZ2V0KCksIENTU19QUk9QX1RFWFRfREVDT1JBVElPTik7CiAK
ICAgICByZXR1cm4gdGV4dERlY29yYXRpb25TdHlsZTsKQEAgLTc4MSw3ICs3ODEsNyBAQCBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKkFwcGx5U3R5CiAgICAgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb25JbXBsICp0ZXh0RGVjb3JhdGlvblN0eWxlID0gY29tcHV0ZWRTdHlsZS0+Y29w
eVByb3BlcnRpZXNJblNldChwcm9wZXJ0aWVzLCAxKTsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZUlt
cGw+IHByb3BlcnR5ID0gY29tcHV0ZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NfUFJP
UF9URVhUX0RFQ09SQVRJT04pOwotICAgIGlmIChwcm9wZXJ0eSAmJiBzdHJjYXNlY21wKHByb3Bl
cnR5LT5jc3NUZXh0KCksICJub25lIikgIT0gMCkgeworICAgIGlmIChwcm9wZXJ0eSAmJiAhZXF1
YWxJZ25vcmluZ0Nhc2UocHJvcGVydHktPmNzc1RleHQoKSwgIm5vbmUiKSkgewogICAgICAgICBS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsPiBuZXdTdHlsZSA9IHRleHREZWNv
cmF0aW9uU3R5bGUtPmNvcHkoKTsKICAgICAgICAgbmV3U3R5bGUtPnNldFByb3BlcnR5KENTU19Q
Uk9QX1RFWFRfREVDT1JBVElPTiwgIm5vbmUiKTsKICAgICAgICAgYXBwbHlUZXh0RGVjb3JhdGlv
blN0eWxlKG5vZGUsIG5ld1N0eWxlLmdldCgpKTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9iYXNl
aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRt
bC9odG1sX2Jhc2VpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44NwpkaWZmIC1wIC11
IC1yMS44NyBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxf
YmFzZWltcGwuY3BwCTIzIERlYyAyMDA1IDE4OjQ0OjE1IC0wMDAwCTEuODcKKysrIGtodG1sL2h0
bWwvaHRtbF9iYXNlaW1wbC5jcHAJMzAgRGVjIDIwMDUgMDE6NTM6NTAgLTAwMDAKQEAgLTExMiw3
ICsxMTIsNyBAQCB2b2lkIEhUTUxCb2R5RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0CiAgICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdGV4dEF0dHIpIHsKICAgICAgICAgYWRkQ1NTQ29s
b3IoYXR0ciwgQ1NTX1BST1BfQ09MT1IsIGF0dHItPnZhbHVlKCkpOwogICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IGJncHJvcGVydGllc0F0dHIpIHsKLSAgICAgICAgaWYgKHN0cmNhc2Vj
bXAoIGF0dHItPnZhbHVlKCksICJmaXhlZCIgKSA9PSAwKQorICAgICAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImZpeGVkIikpCiAgICAgICAgICAgICBhZGRDU1NQcm9w
ZXJ0eShhdHRyLCBDU1NfUFJPUF9CQUNLR1JPVU5EX0FUVEFDSE1FTlQsIENTU19WQUxfRklYRUQp
OwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZsaW5rQXR0ciB8fAogICAgICAgICAg
ICAgICAgYXR0ci0+bmFtZSgpID09IGFsaW5rQXR0ciB8fApAQCAtNDAzLDEzICs0MDMsMTAgQEAg
dm9pZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdAogICAgICAgICBtX25vUmVz
aXplID0gdHJ1ZTsKICAgICAgICAgLy8gRklYTUU6IElmIHdlIGFyZSBhbHJlYWR5IGF0dGFjaGVk
LCB0aGlzIGhhcyBubyBlZmZlY3QuCiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc2Ny
b2xsaW5nQXR0cikgewotICAgICAgICBrZERlYnVnKCA2MDMxICkgPDwgInNldCBzY3JvbGwgbW9k
ZSIgPDwgZW5kbDsKLQkvLyBBdXRvIGFuZCB5ZXMgYm90aCBzaW1wbHkgbWVhbiAiYWxsb3cgc2Ny
b2xsaW5nLiIgIE5vIG1lYW5zCi0JLy8gImRvbid0IGFsbG93IHNjcm9sbGluZy4iCi0gICAgICAg
IGlmKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAiYXV0byIgKSA9PSAwIHx8Ci0gICAgICAg
ICAgICBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAieWVzIiApID09IDAgKQorICAgICAgICAv
LyBBdXRvIGFuZCB5ZXMgYm90aCBzaW1wbHkgbWVhbiAiYWxsb3cgc2Nyb2xsaW5nLiIgTm8gbWVh
bnMgImRvbid0IGFsbG93IHNjcm9sbGluZy4iCisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShhdHRyLT52YWx1ZSgpLCAiYXV0byIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVl
KCksICJ5ZXMiKSkKICAgICAgICAgICAgIG1fc2Nyb2xsaW5nID0gUVNjcm9sbFZpZXc6OkF1dG87
Ci0gICAgICAgIGVsc2UgaWYoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJubyIgKSA9PSAw
ICkKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgIm5v
IikpCiAgICAgICAgICAgICBtX3Njcm9sbGluZyA9IFFTY3JvbGxWaWV3OjpBbHdheXNPZmY7CiAg
ICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBhcmUgYWxyZWFkeSBhdHRhY2hlZCwgdGhpcyBoYXMgbm8g
ZWZmZWN0LgogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ubG9hZEF0dHIpIHsKSW5k
ZXg6IGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjI4CmRpZmYgLXAgLXUgLXIxLjI4IGtodG1sL2h0bWwvaHRtbF9ibG9ja2lt
cGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcAk4IE5vdiAyMDA1IDA4OjEw
OjU3IC0wMDAwCTEuMjgKKysrIGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuY3BwCTMwIERlYyAy
MDA1IDAxOjUzOjUwIC0wMDAwCkBAIC04MCwxMSArODAsMTEgQEAgdm9pZCBIVE1MRGl2RWxlbWVu
dEltcGw6OnBhcnNlTWFwcGVkQXR0cgogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gYWxpZ25B
dHRyKSB7CiAgICAgICAgIERPTVN0cmluZyB2ID0gYXR0ci0+dmFsdWUoKTsKLQlpZiAoIHN0cmNh
c2VjbXAoIGF0dHItPnZhbHVlKCksICJtaWRkbGUiICkgPT0gMCB8fCBzdHJjYXNlY21wKCBhdHRy
LT52YWx1ZSgpLCAiY2VudGVyIiApID09IDAgKQorCWlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRy
LT52YWx1ZSgpLCAibWlkZGxlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwg
ImNlbnRlciIpKQogICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhU
X0FMSUdOLCBDU1NfVkFMX19LSFRNTF9DRU5URVIpOwotICAgICAgICBlbHNlIGlmIChzdHJjYXNl
Y21wKGF0dHItPnZhbHVlKCksICJsZWZ0IikgPT0gMCkKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImxlZnQiKSkKICAgICAgICAgICAgIGFkZENTU1By
b3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIENTU19WQUxfX0tIVE1MX0xFRlQpOwot
ICAgICAgICBlbHNlIGlmIChzdHJjYXNlY21wKGF0dHItPnZhbHVlKCksICJyaWdodCIpID09IDAp
CisgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJyaWdo
dCIpKQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfVEVYVF9BTElH
TiwgQ1NTX1ZBTF9fS0hUTUxfUklHSFQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhZGRD
U1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCB2KTsKQEAgLTEyOSwxNSArMTI5
LDEzIEBAIGJvb2wgSFRNTEhSRWxlbWVudEltcGw6Om1hcFRvRW50cnkoY29uc3QKIHZvaWQgSFRN
TEhSRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwg
KmF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBhbGlnbkF0dHIpIHsKLSAgICAgICAg
aWYgKHN0cmNhc2VjbXAoYXR0ci0+dmFsdWUoKSwgImxlZnQiKSA9PSAwKSB7CisgICAgICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAibGVmdCIpKSB7CiAgICAgICAgICAg
ICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9NQVJHSU5fTEVGVCwgIjAiKTsKIAkgICAg
YWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTUFSR0lOX1JJR0hULCBDU1NfVkFMX0FVVE8p
OwotCX0KLSAgICAgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhdHRyLT52YWx1ZSgpLCAicmlnaHQi
KSA9PSAwKSB7CisJfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAi
cmlnaHQiKSkgewogCSAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9NQVJHSU5fTEVG
VCwgQ1NTX1ZBTF9BVVRPKTsKIAkgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTUFS
R0lOX1JJR0hULCAiMCIpOwotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogICAgICAgCSAgICBhZGRD
U1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9NQVJHSU5fTEVGVCwgQ1NTX1ZBTF9BVVRPKTsKICAg
ICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX01BUkdJTl9SSUdIVCwgQ1NT
X1ZBTF9BVVRPKTsKIAl9CkBAIC0yNjUsMTEgKzI2MywxMSBAQCB2b2lkIEhUTUxQYXJhZ3JhcGhF
bGVtZW50SW1wbDo6cGFyc2VNYXBwCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBhbGlnbkF0
dHIpIHsKICAgICAgICAgRE9NU3RyaW5nIHYgPSBhdHRyLT52YWx1ZSgpOwotICAgICAgICBpZiAo
IHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJtaWRkbGUiICkgPT0gMCB8fCBzdHJjYXNlY21w
KCBhdHRyLT52YWx1ZSgpLCAiY2VudGVyIiApID09IDAgKQorICAgICAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgIm1pZGRsZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGF0
dHItPnZhbHVlKCksICJjZW50ZXIiKSkKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIs
IENTU19QUk9QX1RFWFRfQUxJR04sIENTU19WQUxfX0tIVE1MX0NFTlRFUik7Ci0gICAgICAgIGVs
c2UgaWYgKHN0cmNhc2VjbXAoYXR0ci0+dmFsdWUoKSwgImxlZnQiKSA9PSAwKQorICAgICAgICBl
bHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAibGVmdCIpKQogICAgICAg
ICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfVEVYVF9BTElHTiwgQ1NTX1ZBTF9f
S0hUTUxfTEVGVCk7Ci0gICAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYXR0ci0+dmFsdWUoKSwg
InJpZ2h0IikgPT0gMCkKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+
dmFsdWUoKSwgInJpZ2h0IikpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1Nf
UFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19LSFRNTF9SSUdIVCk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIHYpOwpA
QCAtMzk2LDcgKzM5NCw3IEBAIHZvaWQgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbDo6cGFyc2VNYXBw
ZWQKICAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9fS0hUTUxfTUFSUVVF
RV9TUEVFRCwgYXR0ci0+dmFsdWUoKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
bG9vcEF0dHIpIHsKICAgICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0gIi0xIiB8fCBzdHJjYXNlY21wKGF0dHItPnZh
bHVlKCksICJpbmZpbml0ZSIpID09IDApCisgICAgICAgICAgICBpZiAoYXR0ci0+dmFsdWUoKSA9
PSAiLTEiIHx8IGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJpbmZpbml0ZSIpKQog
ICAgICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX19LSFRNTF9NQVJR
VUVFX1JFUEVUSVRJT04sIENTU19WQUxfSU5GSU5JVEUpOwogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9fS0hUTUxfTUFSUVVFRV9S
RVBFVElUSU9OLCBhdHRyLT52YWx1ZSgpKTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9lbGVtZW50
aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRt
bC9odG1sX2VsZW1lbnRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMTUKZGlmZiAt
cCAtdSAtcjEuMTE1IGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAKLS0tIGtodG1sL2h0
bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAJMjMgRGVjIDIwMDUgMTg6NDQ6MTUgLTAwMDAJMS4xMTUK
KysrIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAJMzAgRGVjIDIwMDUgMDE6NTM6NTEg
LTAwMDAKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIEhUTUxFbGVtZW50SW1wbDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1CiAKICAgICBET01TdHJpbmcgaW5kZXhzdHJpbmc7CiAgICAgaWYgKGF0dHItPm5h
bWUoKSA9PSBhbGlnbkF0dHIpIHsKLSAgICAgICAgaWYgKHN0cmNhc2VjbXAoYXR0ci0+dmFsdWUo
KSwgIm1pZGRsZSIgKSA9PSAwKQorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+
dmFsdWUoKSwgIm1pZGRsZSIpKQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NT
X1BST1BfVEVYVF9BTElHTiwgImNlbnRlciIpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBh
ZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBhdHRyLT52YWx1ZSgpKTsK
QEAgLTQzMCwyNSArNDMwLDI1IEBAIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjphZGRIVE1MQWxpZ25t
ZW50KE0KICAgICBpbnQgcHJvcGZsb2F0ID0gLTE7CiAgICAgaW50IHByb3B2YWxpZ24gPSAtMTsK
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFsaWdubWVudCA9IGF0dHItPnZhbHVlKCk7Ci0gICAg
aWYgKCBzdHJjYXNlY21wKCBhbGlnbm1lbnQsICJhYnNtaWRkbGUiICkgPT0gMCApIHsKKyAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYWxpZ25tZW50LCAiYWJzbWlkZGxlIikpIHsKICAgICAgICAg
cHJvcHZhbGlnbiA9IENTU19WQUxfTUlERExFOwotICAgIH0gZWxzZSBpZiAoIHN0cmNhc2VjbXAo
IGFsaWdubWVudCwgImFic2JvdHRvbSIgKSA9PSAwICkgeworICAgIH0gZWxzZSBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UoYWxpZ25tZW50LCAiYWJzYm90dG9tIikpIHsKICAgICAgICAgcHJvcHZhbGln
biA9IENTU19WQUxfQk9UVE9NOwotICAgIH0gZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGFsaWdubWVu
dCwgImxlZnQiICkgPT0gMCApIHsKKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGFs
aWdubWVudCwgImxlZnQiKSkgewogCXByb3BmbG9hdCA9IENTU19WQUxfTEVGVDsKIAlwcm9wdmFs
aWduID0gQ1NTX1ZBTF9UT1A7Ci0gICAgfSBlbHNlIGlmICggc3RyY2FzZWNtcCggYWxpZ25tZW50
LCAicmlnaHQiICkgPT0gMCApIHsKKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGFs
aWdubWVudCwgInJpZ2h0IikpIHsKIAlwcm9wZmxvYXQgPSBDU1NfVkFMX1JJR0hUOwogCXByb3B2
YWxpZ24gPSBDU1NfVkFMX1RPUDsKLSAgICB9IGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhbGlnbm1l
bnQsICJ0b3AiICkgPT0gMCApIHsKKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGFs
aWdubWVudCwgInRvcCIpKSB7CiAJcHJvcHZhbGlnbiA9IENTU19WQUxfVE9QOwotICAgIH0gZWxz
ZSBpZiAoIHN0cmNhc2VjbXAoIGFsaWdubWVudCwgIm1pZGRsZSIgKSA9PSAwICkgeworICAgIH0g
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYWxpZ25tZW50LCAibWlkZGxlIikpIHsKIAlwcm9w
dmFsaWduID0gQ1NTX1ZBTF9fS0hUTUxfQkFTRUxJTkVfTUlERExFOwotICAgIH0gZWxzZSBpZiAo
IHN0cmNhc2VjbXAoIGFsaWdubWVudCwgImNlbnRlciIgKSA9PSAwICkgeworICAgIH0gZWxzZSBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYWxpZ25tZW50LCAiY2VudGVyIikpIHsKIAlwcm9wdmFsaWdu
ID0gQ1NTX1ZBTF9NSURETEU7Ci0gICAgfSBlbHNlIGlmICggc3RyY2FzZWNtcCggYWxpZ25tZW50
LCAiYm90dG9tIiApID09IDAgKSB7CisgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShh
bGlnbm1lbnQsICJib3R0b20iKSkgewogCXByb3B2YWxpZ24gPSBDU1NfVkFMX0JBU0VMSU5FOwot
ICAgIH0gZWxzZSBpZiAoIHN0cmNhc2VjbXAgKCBhbGlnbm1lbnQsICJ0ZXh0dG9wIikgPT0gMCAp
IHsKKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGFsaWdubWVudCwgInRleHR0b3Ai
KSkgewogCXByb3B2YWxpZ24gPSBDU1NfVkFMX1RFWFRfVE9QOwogICAgIH0KICAgICAKQEAgLTUw
MiwxNyArNTAyLDE1IEBAIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRDb250ZW50RWRpdGFibGUK
IHsKICAgICBLSFRNTFBhcnQgKnBhcnQgPSBnZXREb2N1bWVudCgpLT5wYXJ0KCk7CiAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBlbmFibGVkID0gYXR0ci0+dmFsdWUoKTsKLSAgICBpZiAoZW5hYmxl
ZC5pc0VtcHR5KCkgfHwgc3RyY2FzZWNtcChlbmFibGVkLCAidHJ1ZSIpID09IDApIHsKKyAgICBp
ZiAoZW5hYmxlZC5pc0VtcHR5KCkgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZW5hYmxlZCwgInRydWUi
KSkgewogICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9fS0hUTUxfVVNFUl9N
T0RJRlksIENTU19WQUxfUkVBRF9XUklURSk7CiAgICAgICAgIGlmIChwYXJ0KQogICAgICAgICAg
ICAgcGFydC0+YXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQodGhpcyk7ICAgIAotICAgIH0KLSAg
ICBlbHNlIGlmIChzdHJjYXNlY21wKGVuYWJsZWQsICJmYWxzZSIpID09IDApIHsKKyAgICB9IGVs
c2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVuYWJsZWQsICJmYWxzZSIpKSB7CiAgICAgICAgIGFk
ZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX19LSFRNTF9VU0VSX01PRElGWSwgQ1NTX1ZBTF9S
RUFEX09OTFkpOwogICAgICAgICBpZiAocGFydCkKICAgICAgICAgICAgIHBhcnQtPnJlbW92ZUVk
aXRpbmdTdHlsZUZyb21FbGVtZW50KHRoaXMpOyAgICAKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3Ry
Y2FzZWNtcChlbmFibGVkLCAiaW5oZXJpdCIpID09IDApIHsKKyAgICB9IGVsc2UgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKGVuYWJsZWQsICJpbmhlcml0IikpIHsKICAgICAgICAgYWRkQ1NTUHJvcGVy
dHkoYXR0ciwgQ1NTX1BST1BfX0tIVE1MX1VTRVJfTU9ESUZZLCBDU1NfVkFMX0lOSEVSSVQpOwog
ICAgICAgICBpZiAocGFydCkKICAgICAgICAgICAgIHBhcnQtPnJlbW92ZUVkaXRpbmdTdHlsZUZy
b21FbGVtZW50KHRoaXMpOyAgICAKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Zv
cm1pbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMTYKZGlmZiAtcCAtdSAtcjEuMjE2
IGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9mb3JtaW1w
bC5jcHAJMjMgRGVjIDIwMDUgMTg6NDQ6MTUgLTAwMDAJMS4yMTYKKysrIGtodG1sL2h0bWwvaHRt
bF9mb3JtaW1wbC5jcHAJMzAgRGVjIDIwMDUgMDE6NTM6NTMgLTAwMDAKQEAgLTU1Nyw5ICs1NTcs
OSBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0CiAgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IHRhcmdldEF0dHIpIHsKICAgICAgICAgbV90YXJnZXQgPSBhdHRy
LT52YWx1ZSgpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG1ldGhvZEF0dHIpIHsK
LSAgICAgICAgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAicG9zdCIgKSA9PSAwICkK
KyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJwb3N0IikpCiAg
ICAgICAgICAgICBtX3Bvc3QgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNtcCgg
YXR0ci0+dmFsdWUoKSwgImdldCIgKSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImdldCIpKQogICAgICAgICAgICAgbV9wb3N0ID0gZmFs
c2U7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gZW5jdHlwZUF0dHIpIHsKICAgICAg
ICAgcGFyc2VFbmN0eXBlKGF0dHItPnZhbHVlKCkpOwpAQCAtNTcwLDcgKzU3MCw3IEBAIHZvaWQg
SFRNTEZvcm1FbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHQKICAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBhY2NlcHRBdHRyKSB7CiAgICAgICAgIC8vIGlnbm9yZSB0aGlzIG9uZSBmb3Ig
dGhlIG1vbWVudC4uLgogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGF1dG9jb21wbGV0
ZUF0dHIpIHsKLSAgICAgICAgbV9hdXRvY29tcGxldGUgPSBzdHJjYXNlY21wKCBhdHRyLT52YWx1
ZSgpLCAib2ZmIiApOworICAgICAgICBtX2F1dG9jb21wbGV0ZSA9ICFlcXVhbElnbm9yaW5nQ2Fz
ZShhdHRyLT52YWx1ZSgpLCAib2ZmIik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
b25zdWJtaXRBdHRyKSB7CiAgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKHN1Ym1pdEV2ZW50
LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnJlc2V0QXR0cikgewpA
QCAtMTA1MywxMSArMTA1MywxMSBAQCBET01TdHJpbmcgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsOjp0
eXBlKCkgCiB2b2lkIEhUTUxCdXR0b25FbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09ICB0
eXBlQXR0cikgewotICAgICAgICBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJzdWJt
aXQiICkgPT0gMCApCisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgp
LCAic3VibWl0IikpCiAgICAgICAgICAgICBtX3R5cGUgPSBTVUJNSVQ7Ci0gICAgICAgIGVsc2Ug
aWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAicmVzZXQiICkgPT0gMCApCisgICAgICAg
IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJyZXNldCIpKQogICAg
ICAgICAgICAgbV90eXBlID0gUkVTRVQ7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCBh
dHRyLT52YWx1ZSgpLCAiYnV0dG9uIiApID09IDAgKQorICAgICAgICBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiYnV0dG9uIikpCiAgICAgICAgICAgICBtX3R5cGUg
PSBCVVRUT047CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdmFsdWVBdHRyKSB7CiAg
ICAgICAgIG1fdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwpAQCAtMTI2NywyOSArMTI2NywyOSBAQCB2
b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZXRJbnB1dFR5cGUoCiB7CiAgICAgdHlwZUVudW0g
bmV3VHlwZTsKICAgICAKLSAgICBpZiAoIHN0cmNhc2VjbXAoIHQsICJwYXNzd29yZCIgKSA9PSAw
ICkKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodCwgInBhc3N3b3JkIikpCiAgICAgICAgIG5l
d1R5cGUgPSBQQVNTV09SRDsKLSAgICBlbHNlIGlmICggc3RyY2FzZWNtcCggdCwgImNoZWNrYm94
IiApID09IDAgKQorICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHQsICJjaGVja2JveCIp
KQogICAgICAgICBuZXdUeXBlID0gQ0hFQ0tCT1g7Ci0gICAgZWxzZSBpZiAoIHN0cmNhc2VjbXAo
IHQsICJyYWRpbyIgKSA9PSAwICkKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh0LCAi
cmFkaW8iKSkKICAgICAgICAgbmV3VHlwZSA9IFJBRElPOwotICAgIGVsc2UgaWYgKCBzdHJjYXNl
Y21wKCB0LCAic3VibWl0IiApID09IDAgKQorICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KHQsICJzdWJtaXQiKSkKICAgICAgICAgbmV3VHlwZSA9IFNVQk1JVDsKLSAgICBlbHNlIGlmICgg
c3RyY2FzZWNtcCggdCwgInJlc2V0IiApID09IDAgKQorICAgIGVsc2UgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKHQsICJyZXNldCIpKQogICAgICAgICBuZXdUeXBlID0gUkVTRVQ7Ci0gICAgZWxzZSBp
ZiAoIHN0cmNhc2VjbXAoIHQsICJmaWxlIiApID09IDAgKQorICAgIGVsc2UgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKHQsICJmaWxlIikpCiAgICAgICAgIG5ld1R5cGUgPSBGSUxFOwotICAgIGVsc2Ug
aWYgKCBzdHJjYXNlY21wKCB0LCAiaGlkZGVuIiApID09IDAgKQorICAgIGVsc2UgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKHQsICJoaWRkZW4iKSkKICAgICAgICAgbmV3VHlwZSA9IEhJRERFTjsKLSAg
ICBlbHNlIGlmICggc3RyY2FzZWNtcCggdCwgImltYWdlIiApID09IDAgKQorICAgIGVsc2UgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKHQsICJpbWFnZSIpKQogICAgICAgICBuZXdUeXBlID0gSU1BR0U7
Ci0gICAgZWxzZSBpZiAoIHN0cmNhc2VjbXAoIHQsICJidXR0b24iICkgPT0gMCApCisgICAgZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodCwgImJ1dHRvbiIpKQogICAgICAgICBuZXdUeXBlID0g
QlVUVE9OOwotICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCB0LCAia2h0bWxfaXNpbmRleCIgKSA9
PSAwICkKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh0LCAia2h0bWxfaXNpbmRleCIp
KQogICAgICAgICBuZXdUeXBlID0gSVNJTkRFWDsKLSAgICBlbHNlIGlmICggc3RyY2FzZWNtcCgg
dCwgInNlYXJjaCIgKSA9PSAwICkKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh0LCAi
c2VhcmNoIikpCiAgICAgICAgIG5ld1R5cGUgPSBTRUFSQ0g7Ci0gICAgZWxzZSBpZiAoIHN0cmNh
c2VjbXAoIHQsICJyYW5nZSIgKSA9PSAwICkKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZSh0LCAicmFuZ2UiKSkKICAgICAgICAgbmV3VHlwZSA9IFJBTkdFOwogICAgIGVsc2UKICAgICAg
ICAgbmV3VHlwZSA9IFRFWFQ7CkBAIC0xNTk5LDcgKzE1OTksNyBAQCB2b2lkIEhUTUxJbnB1dEVs
ZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0CiAgICAgICAgIGlmIChtX3R5cGUgPT0gUkFESU8gJiYg
Y2hlY2tlZCgpKQogICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+cmFkaW9CdXR0b25DaGVja2Vk
KHRoaXMsIG1fZm9ybSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYXV0b2NvbXBs
ZXRlQXR0cikgewotICAgICAgICBtX2F1dG9jb21wbGV0ZSA9IHN0cmNhc2VjbXAoIGF0dHItPnZh
bHVlKCksICJvZmYiICk7CisgICAgICAgIG1fYXV0b2NvbXBsZXRlID0gIWVxdWFsSWdub3JpbmdD
YXNlKGF0dHItPnZhbHVlKCksICJvZmYiKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSAgdHlwZUF0dHIpIHsKICAgICAgICAgc2V0SW5wdXRUeXBlKGF0dHItPnZhbHVlKCkpOwogICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZhbHVlQXR0cikgewpAQCAtMjk5MCwxMyArMjk5
MCwxMSBAQCB2b2lkIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBCiBib29sIEhU
TUxLZXlnZW5FbGVtZW50SW1wbDo6YXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiBlbmNvZGVk
X3ZhbHVlcywgYm9vbCkKIHsKICAgICAvLyBPbmx5IFJTQSBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0
aW1lLgotICAgIGlmICghbV9rZXlUeXBlLmlzTnVsbCgpICYmIHN0cmNhc2VjbXAobV9rZXlUeXBl
LCAicnNhIikpIHsKKyAgICBpZiAoIW1fa2V5VHlwZS5pc051bGwoKSAmJiAhZXF1YWxJZ25vcmlu
Z0Nhc2UobV9rZXlUeXBlLCAicnNhIikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CiAg
ICAgUVN0cmluZyB2YWx1ZSA9IEtTU0xLZXlHZW46OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5n
ZVN0cmluZyhzZWxlY3RlZEluZGV4KCksIG1fY2hhbGxlbmdlLnFzdHJpbmcoKSwgZ2V0RG9jdW1l
bnQoKS0+cGFydCgpLT5iYXNlVVJMKCkpOwotICAgIGlmICh2YWx1ZS5pc051bGwoKSkgeworICAg
IGlmICh2YWx1ZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KICAgICBl
bmNvZGVkX3ZhbHVlcy5hcHBlbmREYXRhKG5hbWUoKSwgdmFsdWUudXRmOCgpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KQEAgLTMzMjksMTMgKzMzMjcsMTMgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVt
ZW50SW1wbDo6cGFyc2VNYXBwZQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHdyYXBB
dHRyKSB7CiAgICAgICAgIC8vIHZpcnR1YWwgLyBwaHlzaWNhbCBpcyBOZXRzY2FwZSBleHRlbnNp
b24gb2YgSFRNTCAzLjAsIG5vdyBkZXByZWNhdGVkCiAgICAgICAgIC8vIHNvZnQvIGhhcmQgLyBv
ZmYgaXMgcmVjb21tZW5kYXRpb24gZm9yIEhUTUwgNCBleHRlbnNpb24gYnkgSUUgYW5kIE5TIDQK
LSAgICAgICAgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAidmlydHVhbCIgKSA9PSAw
ICB8fCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAic29mdCIpID09IDApCisgICAgICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAidmlydHVhbCIpIHx8IGVxdWFsSWdu
b3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJzb2Z0IikpCiAgICAgICAgICAgICBtX3dyYXAgPSB0
YV9WaXJ0dWFsOwotICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNtcCAoIGF0dHItPnZhbHVlKCks
ICJwaHlzaWNhbCIgKSA9PSAwIHx8IHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJoYXJkIikg
PT0gMCkKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwg
InBoeXNpY2FsIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImhhcmQiKSkK
ICAgICAgICAgICAgIG1fd3JhcCA9IHRhX1BoeXNpY2FsOwotICAgICAgICBlbHNlIGlmKHN0cmNh
c2VjbXAoIGF0dHItPnZhbHVlKCksICJvbiIgKSA9PSAwKQorICAgICAgICBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAib24iICkpCiAgICAgICAgICAgICBtX3dyYXAg
PSB0YV9QaHlzaWNhbDsKLSAgICAgICAgZWxzZSBpZihzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgp
LCAib2ZmIikgPT0gMCkKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+
dmFsdWUoKSwgIm9mZiIpKQogICAgICAgICAgICAgbV93cmFwID0gdGFfTm9XcmFwOwogICAgICAg
ICBpZiAocmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJlbmRlcmVyKCktPnNldE5lZWRzTGF5b3V0
QW5kTWluTWF4UmVjYWxjKCk7CkluZGV4OiBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW1h
Z2VpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42MwpkaWZmIC1wIC11IC1yMS42MyBr
aHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1w
bC5jcHAJMjMgRGVjIDIwMDUgMTg6NDQ6MTYgLTAwMDAJMS42MworKysga2h0bWwvaHRtbC9odG1s
X2ltYWdlaW1wbC5jcHAJMzAgRGVjIDIwMDUgMDE6NTM6NTQgLTAwMDAKQEAgLTUzMSwxMyArNTMx
LDEzIEBAIEhUTUxBcmVhRWxlbWVudEltcGw6On5IVE1MQXJlYUVsZW1lbnRJbXAKIHZvaWQgSFRN
TEFyZWFFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1w
bCAqYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IHNoYXBlQXR0cikgewotICAgICAg
ICBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJkZWZhdWx0IiApID09IDAgKQorICAg
ICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImRlZmF1bHQiKSkKICAg
ICAgICAgICAgIG1fc2hhcGUgPSBEZWZhdWx0OwotICAgICAgICBlbHNlIGlmICggc3RyY2FzZWNt
cCggYXR0ci0+dmFsdWUoKSwgImNpcmNsZSIgKSA9PSAwICkKKyAgICAgICAgZWxzZSBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImNpcmNsZSIpKQogICAgICAgICAgICAgbV9z
aGFwZSA9IENpcmNsZTsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVl
KCksICJwb2x5IiApID09IDAgKQorICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShh
dHRyLT52YWx1ZSgpLCAicG9seSIpKQogICAgICAgICAgICAgbV9zaGFwZSA9IFBvbHk7Ci0gICAg
ICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAicmVjdCIgKSA9PSAwICkK
KyAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInJlY3Qi
KSkKICAgICAgICAgICAgIG1fc2hhcGUgPSBSZWN0OwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IGNvb3Jkc0F0dHIpIHsKICAgICAgICAgZGVsZXRlIFtdIG1fY29vcmRzOwpJbmRleDog
a2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS41NgpkaWZmIC1wIC11IC1yMS41NiBraHRtbC9odG1sL2h0bWxfaW5saW5laW1w
bC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAkyNyBEZWMgMjAwNSAxODoy
NjoxNCAtMDAwMAkxLjU2CisrKyBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHAJMzAgRGVj
IDIwMDUgMDE6NTM6NTQgLTAwMDAKQEAgLTM5OCwxNCArMzk4LDE0IEBAIGJvb2wgSFRNTEJSRWxl
bWVudEltcGw6Om1hcFRvRW50cnkoY29uc3QKIHZvaWQgSFRNTEJSRWxlbWVudEltcGw6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CiAgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBjbGVhckF0dHIpIHsKLSAgICAgICAgRE9NU3RyaW5nIHN0ciA9IGF0dHIt
PnZhbHVlKCk7CiAgICAgICAgIC8vIElmIHRoZSBzdHJpbmcgaXMgZW1wdHksIHRoZW4gZG9uJ3Qg
YWRkIHRoZSBjbGVhciBwcm9wZXJ0eS4gCi0gICAgICAgIC8vIDxiciBjbGVhcj4gYW5kIDxiciBj
bGVhcj0iIj4gYXJlIGp1c3QgdHJlYXRlZCBsaWtlIDxicj4gYnkgR2Vja28sCi0gICAgICAgIC8v
IE1hYyBJRSwgZXRjLiAtZHdoCisgICAgICAgIC8vIDxiciBjbGVhcj4gYW5kIDxiciBjbGVhcj0i
Ij4gYXJlIGp1c3QgdHJlYXRlZCBsaWtlIDxicj4gYnkgR2Vja28sIE1hYyBJRSwgZXRjLiAtZHdo
CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc3RyID0gYXR0ci0+dmFsdWUoKTsKICAgICAg
ICAgaWYgKCFzdHIuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAoc3RyY2FzZWNtcChzdHIs
ImFsbCIpID09IDApIAotICAgICAgICAgICAgICAgIHN0ciA9ICJib3RoIjsKLSAgICAgICAgICAg
IGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0NMRUFSLCBzdHIpOworICAgICAgICAgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKHN0ciwgImFsbCIpKQorICAgICAgICAgICAgICAgIGFkZENT
U1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0NMRUFSLCAiYm90aCIpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0NMRUFSLCBz
dHIpOwogICAgICAgICB9CiAgICAgfSBlbHNlCiAgICAgICAgIEhUTUxFbGVtZW50SW1wbDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CkluZGV4OiBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRt
bF9saXN0aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTYKZGlmZiAtcCAtdSAtcjEu
MTYga2h0bWwvaHRtbC9odG1sX2xpc3RpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2xpc3Rp
bXBsLmNwcAkzIE9jdCAyMDA1IDIxOjEyOjI5IC0wMDAwCTEuMTYKKysrIGtodG1sL2h0bWwvaHRt
bF9saXN0aW1wbC5jcHAJMzAgRGVjIDIwMDUgMDE6NTM6NTQgLTAwMDAKQEAgLTExMSwxNSArMTEx
LDE1IEBAIGJvb2wgSFRNTE9MaXN0RWxlbWVudEltcGw6Om1hcFRvRW50cnkoY28KIHZvaWQgSFRN
TE9MaXN0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUlt
cGwgKmF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSB0eXBlQXR0cikgewotICAgICAg
ICBpZiAoIHN0cmNtcCggYXR0ci0+dmFsdWUoKSwgImEiICkgPT0gMCApCisgICAgICAgIGlmIChh
dHRyLT52YWx1ZSgpID09ICJhIikKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENT
U19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9MT1dFUl9BTFBIQSk7Ci0gICAgICAgIGVs
c2UgaWYgKCBzdHJjbXAoIGF0dHItPnZhbHVlKCksICJBIiApID09IDAgKQorICAgICAgICBlbHNl
IGlmIChhdHRyLT52YWx1ZSgpID09ICJBIikKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0
dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9VUFBFUl9BTFBIQSk7Ci0gICAg
ICAgIGVsc2UgaWYgKCBzdHJjbXAoIGF0dHItPnZhbHVlKCksICJpIiApID09IDAgKQorICAgICAg
ICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJpIikKICAgICAgICAgICAgIGFkZENTU1Byb3Bl
cnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9MT1dFUl9ST01BTik7
Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjbXAoIGF0dHItPnZhbHVlKCksICJJIiApID09IDAgKQor
ICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICJJIikKICAgICAgICAgICAgIGFkZENT
U1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9VUFBFUl9S
T01BTik7Ci0gICAgICAgIGVsc2UgaWYgKCBzdHJjbXAoIGF0dHItPnZhbHVlKCksICIxIiApID09
IDAgKQorICAgICAgICBlbHNlIGlmIChhdHRyLT52YWx1ZSgpID09ICIxIikKICAgICAgICAgICAg
IGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1ZBTF9E
RUNJTUFMKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzdGFydEF0dHIpIHsKICAg
ICAgICAgX3N0YXJ0ID0gIWF0dHItPmlzTnVsbCgpID8gYXR0ci0+dmFsdWUoKS50b0ludCgpIDog
MTsKQEAgLTE3OCwxNSArMTc4LDE1IEBAIHZvaWQgSFRNTExJRWxlbWVudEltcGw6OnBhcnNlTWFw
cGVkQXR0cmkKICAgICAgICAgICAgIGxpc3QtPnNldFZhbHVlKHJlcXVlc3RlZFZhbHVlKTsKICAg
ICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHR5cGVBdHRyKSB7Ci0gICAg
ICAgIGlmICggc3RyY21wKCBhdHRyLT52YWx1ZSgpLCAiYSIgKSA9PSAwICkKKyAgICAgICAgaWYg
KGF0dHItPnZhbHVlKCkgPT0gImEiKQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwg
Q1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFMX0xPV0VSX0FMUEhBKTsKLSAgICAgICAg
ZWxzZSBpZiAoIHN0cmNtcCggYXR0ci0+dmFsdWUoKSwgIkEiICkgPT0gMCApCisgICAgICAgIGVs
c2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gIkEiKQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHko
YXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFMX1VQUEVSX0FMUEhBKTsKLSAg
ICAgICAgZWxzZSBpZiAoIHN0cmNtcCggYXR0ci0+dmFsdWUoKSwgImkiICkgPT0gMCApCisgICAg
ICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gImkiKQogICAgICAgICAgICAgYWRkQ1NTUHJv
cGVydHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFMX0xPV0VSX1JPTUFO
KTsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNtcCggYXR0ci0+dmFsdWUoKSwgIkkiICkgPT0gMCAp
CisgICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gIkkiKQogICAgICAgICAgICAgYWRk
Q1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFMX1VQUEVS
X1JPTUFOKTsKLSAgICAgICAgZWxzZSBpZiAoIHN0cmNtcCggYXR0ci0+dmFsdWUoKSwgIjEiICkg
PT0gMCApCisgICAgICAgIGVsc2UgaWYgKGF0dHItPnZhbHVlKCkgPT0gIjEiKQogICAgICAgICAg
ICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1NfVkFM
X0RFQ0lNQUwpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRy
LCBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIGF0dHItPnZhbHVlKCkpOwpJbmRleDoga2h0bWwv
aHRtbC9odG1sX3RhYmxlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNzIKZGlmZiAtcCAtdSAtcjEuNzIga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAKLS0t
IGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCTIzIERlYyAyMDA1IDE4OjQ0OjE3IC0wMDAw
CTEuNzIKKysrIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCTMwIERlYyAyMDA1IDAxOjUz
OjU1IC0wMDAwCkBAIC03MDcsMTQgKzcwNywxNCBAQCB2b2lkIEhUTUxUYWJsZVBhcnRFbGVtZW50
SW1wbDo6cGFyc2VNYXBwCiAgICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9WRVJUSUNBTF9BTElHTiwg
YXR0ci0+dmFsdWUoKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWxpZ25BdHRy
KSB7Ci0gICAgICAgIERPTVN0cmluZyB2ID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAgaWYgKCBz
dHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAibWlkZGxlIiApID09IDAgfHwgc3RyY2FzZWNtcCgg
YXR0ci0+dmFsdWUoKSwgImNlbnRlciIgKSA9PSAwICkKKyAgICAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiB2ID0gYXR0ci0+dmFsdWUoKTsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHYs
ICJtaWRkbGUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZSh2LCAiY2VudGVyIikpCiAgICAgICAgICAg
ICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19LSFRN
TF9DRU5URVIpOwotICAgICAgICBlbHNlIGlmIChzdHJjYXNlY21wKGF0dHItPnZhbHVlKCksICJh
YnNtaWRkbGUiKSA9PSAwKQorICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2LCAi
YWJzbWlkZGxlIikpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9U
RVhUX0FMSUdOLCBDU1NfVkFMX0NFTlRFUik7Ci0gICAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAo
YXR0ci0+dmFsdWUoKSwgImxlZnQiKSA9PSAwKQorICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9y
aW5nQ2FzZSh2LCAibGVmdCIpKQogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NT
X1BST1BfVEVYVF9BTElHTiwgQ1NTX1ZBTF9fS0hUTUxfTEVGVCk7Ci0gICAgICAgIGVsc2UgaWYg
KHN0cmNhc2VjbXAoYXR0ci0+dmFsdWUoKSwgInJpZ2h0IikgPT0gMCkKKyAgICAgICAgZWxzZSBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UodiwgInJpZ2h0IikpCiAgICAgICAgICAgICBhZGRDU1NQcm9w
ZXJ0eShhdHRyLCBDU1NfUFJPUF9URVhUX0FMSUdOLCBDU1NfVkFMX19LSFRNTF9SSUdIVCk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RF
WFRfQUxJR04sIHYpOwpJbmRleDoga2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxwYXJzZXIuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEyOApkaWZmIC1wIC11IC1yMS4xMjgga2h0bWwvaHRtbC9o
dG1scGFyc2VyLmNwcAotLS0ga2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAkyOCBEZWMgMjAwNSAx
ODo0NjoyMiAtMDAwMAkxLjEyOAorKysga2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAkzMCBEZWMg
MjAwNSAwMTo1Mzo1NiAtMDAwMApAQCAtMzg2LDggKzM4Niw3IEBAIGJvb2wgSFRNTFBhcnNlcjo6
aGFuZGxlRXJyb3IoTm9kZUltcGwqIG4KICAgICAgICAgICAgIGVsc2UgaWYgKCFjdXJyZW50LT5p
c0RvY3VtZW50Tm9kZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoaW5wdXRUYWcpKSB7Ci0gICAgICAgICAgICBET01T
dHJpbmcgdHlwZSA9IGgtPmdldEF0dHJpYnV0ZSh0eXBlQXR0cik7Ci0gICAgICAgICAgICBpZiAo
c3RyY2FzZWNtcCh0eXBlLCAiaGlkZGVuIikgPT0gMCAmJiBmb3JtKSB7CisgICAgICAgICAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaC0+Z2V0QXR0cmlidXRlKHR5cGVBdHRyKSwgImhpZGRlbiIp
ICYmIGZvcm0pIHsKICAgICAgICAgICAgICAgICBmb3JtLT5hZGRDaGlsZChuKTsKICAgICAgICAg
ICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKICAgICAgICAgICAgICAg
ICAgICAgbi0+YXR0YWNoKCk7CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9y
ZW5kZXJfZm9ybS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTM3CmRpZmYgLXAgLXUgLXIx
LjEzNyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcv
cmVuZGVyX2Zvcm0uY3BwCTI0IERlYyAyMDA1IDEwOjAyOjIyIC0wMDAwCTEuMTM3CisrKyBraHRt
bC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCTMwIERlYyAyMDA1IDAxOjUzOjU3IC0wMDAwCkBA
IC0xMTcyLDEwICsxMTcyLDEwIEBAIHZvaWQgUmVuZGVyU2xpZGVyOjpjYWxjTWluTWF4V2lkdGgo
KQogCiB2b2lkIFJlbmRlclNsaWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQoKQogewotICAgIGNvbnN0
IERPTVN0cmluZyYgdmFsdWUgPSBlbGVtZW50KCktPnZhbHVlKCk7Ci0gICAgY29uc3QgRE9NU3Ry
aW5nJiBtaW4gPSBlbGVtZW50KCktPmdldEF0dHJpYnV0ZShtaW5BdHRyKTsKLSAgICBjb25zdCBE
T01TdHJpbmcmIG1heCA9IGVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKG1heEF0dHIpOwotICAgIGNv
bnN0IERPTVN0cmluZyYgcHJlY2lzaW9uID0gZWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUocHJlY2lz
aW9uQXR0cik7CisgICAgRE9NU3RyaW5nIHZhbHVlID0gZWxlbWVudCgpLT52YWx1ZSgpOworICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgbWluID0gZWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUobWluQXR0
cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBtYXggPSBlbGVtZW50KCktPmdldEF0dHJpYnV0
ZShtYXhBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHByZWNpc2lvbiA9IGVsZW1lbnQo
KS0+Z2V0QXR0cmlidXRlKHByZWNpc2lvbkF0dHIpOwogICAgIAogICAgIGRvdWJsZSBtaW5WYWwg
PSBtaW4uaXNOdWxsKCkgPyAwLjAgOiBtaW4ucXN0cmluZygpLnRvRG91YmxlKCk7CiAgICAgZG91
YmxlIG1heFZhbCA9IG1heC5pc051bGwoKSA/IDEwMC4wIDogbWF4LnFzdHJpbmcoKS50b0RvdWJs
ZSgpOwpAQCAtMTE4NCw4ICsxMTg0LDggQEAgdm9pZCBSZW5kZXJTbGlkZXI6OnVwZGF0ZUZyb21F
bGVtZW50KCkKICAgICBkb3VibGUgdmFsID0gdmFsdWUuaXNOdWxsKCkgPyAobWF4VmFsICsgbWlu
VmFsKS8yLjAgOiB2YWx1ZS5xc3RyaW5nKCkudG9Eb3VibGUoKTsKICAgICB2YWwgPSBrTWF4KG1p
blZhbCwga01pbih2YWwsIG1heFZhbCkpOyAvLyBNYWtlIHN1cmUgdmFsIGlzIHdpdGhpbiBtaW4v
bWF4LgogICAgIAotICAgIC8vIEZvcmNlIGludGVnZXIgdmFsdWUgaWYgbm90IGZsb2F0IChzdHJj
YXNlY21wIHJldHVybnMgY29uZnVzaW5nbHkgYmFja3dhcmQgYm9vbGVhbikuCi0gICAgaWYgKHN0
cmNhc2VjbXAocHJlY2lzaW9uLCAiZmxvYXQiKSkKKyAgICAvLyBGb3JjZSBpbnRlZ2VyIHZhbHVl
IGlmIG5vdCBmbG9hdC4KKyAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKHByZWNpc2lvbiwgImZs
b2F0IikpCiAgICAgICAgIHZhbCA9IChpbnQpKHZhbCArIDAuNSk7CiAKICAgICBlbGVtZW50KCkt
PnNldFZhbHVlKFFTdHJpbmc6Om51bWJlcih2YWwpKTsKQEAgLTEyMDQsMTAgKzEyMDQsMTAgQEAg
dm9pZCBSZW5kZXJTbGlkZXI6OnNsb3RTbGlkZXJWYWx1ZUNoYW5nZQogICAgIFFTbGlkZXIqIHNs
aWRlciA9IChRU2xpZGVyKil3aWRnZXQoKTsKIAogICAgIGRvdWJsZSB2YWwgPSBzbGlkZXItPnZh
bHVlKCk7Ci0gICAgY29uc3QgRE9NU3RyaW5nJiBwcmVjaXNpb24gPSBlbGVtZW50KCktPmdldEF0
dHJpYnV0ZShwcmVjaXNpb25BdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHByZWNpc2lv
biA9IGVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKHByZWNpc2lvbkF0dHIpOwogCi0gICAgLy8gRm9y
Y2UgaW50ZWdlciB2YWx1ZSBpZiBub3QgZmxvYXQgKHN0cmNhc2VjbXAgcmV0dXJucyBjb25mdXNp
bmdseSBiYWNrd2FyZCBib29sZWFuKS4KLSAgICBpZiAoc3RyY2FzZWNtcChwcmVjaXNpb24sICJm
bG9hdCIpKQorICAgIC8vIEZvcmNlIGludGVnZXIgdmFsdWUgaWYgbm90IGZsb2F0LgorICAgIGlm
ICghZXF1YWxJZ25vcmluZ0Nhc2UocHJlY2lzaW9uLCAiZmxvYXQiKSkKICAgICAgICAgdmFsID0g
KGludCkodmFsICsgMC41KTsKIAogICAgIGVsZW1lbnQoKS0+c2V0VmFsdWUoUVN0cmluZzo6bnVt
YmVyKHZhbCkpOwpJbmRleDoga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fYXRvbWljc3RyaW5n
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNQpkaWZmIC1wIC11IC1yMS4xNSBraHRtbC94
bWwvZG9tX2F0b21pY3N0cmluZy5jcHAKLS0tIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmNw
cAkyMyBEZWMgMjAwNSAwMTo1Mjo0MCAtMDAwMAkxLjE1CisrKyBraHRtbC94bWwvZG9tX2F0b21p
Y3N0cmluZy5jcHAJMzAgRGVjIDIwMDUgMDE6NTM6NTggLTAwMDAKQEAgLTY0LDkgKzY0LDkgQEAg
c3RydWN0IENTdHJpbmdUcmFuc2xhdG9yIAogICAgIH0KIH07CiAKLWJvb2wgQXRvbWljU3RyaW5n
OjplcXVhbChjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0IGNoYXIgKmIpCitib29sIG9wZXJh
dG9yPT0oY29uc3QgQXRvbWljU3RyaW5nICZhLCBjb25zdCBjaGFyICpiKQogeyAKLSAgICBET01T
dHJpbmdJbXBsICppbXBsID0gYS5tX3N0cmluZy5pbXBsKCk7CisgICAgRE9NU3RyaW5nSW1wbCAq
aW1wbCA9IGEuaW1wbCgpOwogICAgIGlmICgoIWltcGwgfHwgIWltcGwtPnMpICYmICFiKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAoKCFpbXBsIHx8ICFpbXBsLT5zKSB8fCAhYikKQEAg
LTE4NywyMyArMTg3LDQgQEAgdm9pZCBBdG9taWNTdHJpbmc6OmluaXQoKQogICAgIH0KIH0KIAot
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgRE9NU3RyaW5nICZi
KQotewotICAgIHJldHVybiBhLmRvbVN0cmluZygpID09IGI7ICAgIAotfQotICAgCi1ib29sIGVx
dWFsc0lnbm9yZUNhc2UoY29uc3QgQXRvbWljU3RyaW5nICZhcywgY29uc3QgRE9NU3RyaW5nICZi
cykKLXsKLSAgICAvLyByZXR1cm5zIHRydWUgd2hlbiBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlIChp
Z25vcmluZyBjYXNlKQotICAgIHJldHVybiAhc3RyY2FzZWNtcChhcy5kb21TdHJpbmcoKSwgYnMp
OwotfQotCi1ib29sIGVxdWFsc0lnbm9yZUNhc2UoY29uc3QgQXRvbWljU3RyaW5nICZhcywgY29u
c3QgQXRvbWljU3RyaW5nICZicykKLXsKLSAgICAvLyByZXR1cm5zIHRydWUgd2hlbiBlcXVhbCwg
ZmFsc2Ugb3RoZXJ3aXNlIChpZ25vcmluZyBjYXNlKQotICAgIGlmIChhcyA9PSBicykKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuICFzdHJjYXNlY21wKGFzLmRvbVN0cmluZygpLCBi
cy5kb21TdHJpbmcoKSk7Ci19Ci0KIH0KSW5kZXg6IGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9h
dG9taWNzdHJpbmcuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45CmRpZmYgLXAgLXUgLXIxLjkg
a2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuaAotLS0ga2h0bWwveG1sL2RvbV9hdG9taWNzdHJp
bmcuaAkzMSBBdWcgMjAwNSAwNDozODo0MSAtMDAwMAkxLjkKKysrIGtodG1sL3htbC9kb21fYXRv
bWljc3RyaW5nLmgJMzAgRGVjIDIwMDUgMDE6NTM6NTggLTAwMDAKQEAgLTE5LDggKzE5LDkgQEAK
ICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICoKICAqLwotI2lmbmRlZiBfRE9NX0F0
b21pY1N0cmluZ19oXwotI2RlZmluZSBfRE9NX0F0b21pY1N0cmluZ19oXworCisjaWZuZGVmIERP
TV9BdG9taWNTdHJpbmdfaAorI2RlZmluZSBET01fQXRvbWljU3RyaW5nX2gKIAogI2luY2x1ZGUg
ImRvbS9kb21fc3RyaW5nLmgiCiAKQEAgLTQ3LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIGNvbnN0
IFFDaGFyICp1bmljb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcudW5pY29kZSgpOyB9CiAg
ICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmxlbmd0aCgpOyB9CiAgICAg
Ci0gICAgaW50IGZpbmQoY29uc3QgUUNoYXIgYywgaW50IHN0YXJ0ID0gMCkgY29uc3QgeyByZXR1
cm4gbV9zdHJpbmcuZmluZChjLCBzdGFydCk7IH0KKyAgICBpbnQgZmluZChRQ2hhciBjLCBpbnQg
c3RhcnQgPSAwKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5maW5kKGMsIHN0YXJ0KTsgfQogICAg
IAogICAgIGludCB0b0ludCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnRvSW50KCk7IH0KICAg
ICBib29sIHBlcmNlbnRhZ2UoaW50ICZfcGVyY2VudGFnZSkgY29uc3QgeyByZXR1cm4gbV9zdHJp
bmcucGVyY2VudGFnZShfcGVyY2VudGFnZSk7IH0KQEAgLTU3LDEyICs1OCw2IEBAIHB1YmxpYzoK
ICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzTnVsbCgpOyB9CiAg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNFbXB0eSgpOyB9CiAK
LSAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyAmLCBjb25zdCBB
dG9taWNTdHJpbmcgJik7Ci0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9taWNT
dHJpbmcgJiwgY29uc3QgQXRvbWljU3RyaW5nICYpOwotICAgIAotICAgIGZyaWVuZCBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW5nICYsIGNvbnN0IGNoYXIgKik7Ci0gICAgZnJpZW5k
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9taWNTdHJpbmcgJiwgY29uc3QgY2hhciAqKTsKLSAg
ICAKICAgICBzdGF0aWMgdm9pZCByZW1vdmUoRE9NU3RyaW5nSW1wbCAqKTsKICAgICAKICNpZmRl
ZiBfX09CSkNfXwpAQCAtNzMsMTQgKzY4LDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBET01T
dHJpbmcgbV9zdHJpbmc7CiAgICAgCi0gICAgc3RhdGljIGJvb2wgZXF1YWwoRE9NU3RyaW5nSW1w
bCAqLCBjb25zdCBjaGFyICopOwotICAgIHN0YXRpYyBib29sIGVxdWFsKERPTVN0cmluZ0ltcGwg
KiwgY29uc3QgUUNoYXIgKiwgdWludCBsZW5ndGgpOwotICAgIHN0YXRpYyBib29sIGVxdWFsKERP
TVN0cmluZ0ltcGwgKiwgRE9NU3RyaW5nSW1wbCAqKTsKLSAgICAKLSAgICBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0IEF0b21pY1N0cmluZyAmYikKLSAgICB7
IHJldHVybiBhLm1fc3RyaW5nLmltcGwoKSA9PSBiLm1fc3RyaW5nLmltcGwoKTsgfQotICAgIHN0
YXRpYyBib29sIGVxdWFsKGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgY2hhciAqYik7Ci0g
ICAgCiAgICAgc3RhdGljIERPTVN0cmluZ0ltcGwgKmFkZChjb25zdCBjaGFyICopOwogICAgIHN0
YXRpYyBET01TdHJpbmdJbXBsICphZGQoY29uc3QgUUNoYXIgKiwgaW50IGxlbmd0aCk7CiAgICAg
c3RhdGljIERPTVN0cmluZ0ltcGwgKmFkZChET01TdHJpbmdJbXBsICopOwpAQCAtOTcsMjAgKzg0
LDIzIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBfa2V5Q291bnQ7CiB9OwogCi1pbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgQXRvbWljU3RyaW5n
ICZiKQoteyByZXR1cm4gQXRvbWljU3RyaW5nOjplcXVhbChhLCBiKTsgfQotCi1pbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgQXRvbWljU3RyaW5nICZi
KQoteyByZXR1cm4gIUF0b21pY1N0cmluZzo6ZXF1YWwoYSwgYik7IH0KLQotaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0IGNoYXIgKmIpCi17IHJldHVy
biBBdG9taWNTdHJpbmc6OmVxdWFsKGEsIGIpOyB9Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgQXRvbWljU3RyaW5nICZhLCBjb25zdCBjaGFyICpiKQoteyByZXR1cm4gIUF0b21pY1N0
cmluZzo6ZXF1YWwoYSwgYik7IH0KLQotLy8gTGlzdCBvZiBwcm9wZXJ0eSBuYW1lcywgcGFzc2Vk
IHRvIGEgbWFjcm8gc28gd2UgY2FuIGRvIHNldCB0aGVtIHVwIHZhcmlvdXMKLS8vIHdheXMgd2l0
aG91dCByZXBlYXRpbmcgdGhlIGxpc3QuCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0
b21pY1N0cmluZyYgYSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiBhLmltcGwoKSA9
PSBiLmltcGwoKTsgfQorYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29u
c3QgY2hhciogYik7CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyYg
YSwgY29uc3QgRE9NU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbChhLmltcGwoKSwgYi5pbXBsKCkp
OyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNoYXIqIGEsIGNvbnN0IEF0b21pY1N0
cmluZyYgYikgeyByZXR1cm4gYiA9PSBhOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IERPTVN0cmluZyYgYSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbChhLmlt
cGwoKSwgYi5pbXBsKCkpOyB9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQXRvbWlj
U3RyaW5nJiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuIGEuaW1wbCgpICE9IGIu
aW1wbCgpOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF0b21pY1N0cmluZyYgYSwg
Y29uc3QgY2hhciAqYikgeyByZXR1cm4gIShhID09IGIpOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgRE9NU3RyaW5nJiBiKSB7IHJldHVybiAh
ZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBjaGFyKiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuICEoYiA9PSBhKTsgfQor
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBET01TdHJpbmcmIGEsIGNvbnN0IEF0b21pY1N0
cmluZyYgYikgeyByZXR1cm4gIWVxdWFsKGEuaW1wbCgpLCBiLmltcGwoKSk7IH0KKworaW5saW5l
IGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGEuaW1wbCgpLCBiLmltcGwo
KSk7IH0KK2lubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IEF0b21pY1N0cmluZyYg
YSwgY29uc3QgY2hhciogYikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYS5pbXBsKCksIGIp
OyB9CitpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBBdG9taWNTdHJpbmcmIGEs
IGNvbnN0IERPTVN0cmluZyYgYikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYS5pbXBsKCks
IGIuaW1wbCgpKTsgfQoraW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciog
YSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShhLCBi
LmltcGwoKSk7IH0KK2lubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IERPTVN0cmlu
ZyYgYSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShh
LmltcGwoKSwgYi5pbXBsKCkpOyB9CiAKIC8vIERlZmluZSBleHRlcm5hbCBnbG9iYWwgdmFyaWFi
bGVzIGZvciB0aGUgY29tbW9ubHkgdXNlZCBhdG9taWMgc3RyaW5ncy4KICNpZiAhS0hUTUxfQVRP
TUlDU1RSSU5HX0hJREVfR0xPQkFMUwpAQCAtMTIwLDExICsxMTAsNyBAQCBpbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEF0b21pY1N0cmluCiAgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmlu
ZyBjb21tZW50QXRvbTsKICAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIHN0YXJBdG9tOwog
I2VuZGlmCi0gICAgICAgIAotYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyAmYSwg
Y29uc3QgRE9NU3RyaW5nICZiKTsKLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQXRvbWlj
U3RyaW5nICZhLCBjb25zdCBET01TdHJpbmcgJmIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQogCi1i
b29sIGVxdWFsc0lnbm9yZUNhc2UoY29uc3QgQXRvbWljU3RyaW5nICZhLCBjb25zdCBET01TdHJp
bmcgJmIpOwotYm9vbCBlcXVhbHNJZ25vcmVDYXNlKGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29u
c3QgQXRvbWljU3RyaW5nICZiKTsKIH0KKwogI2VuZGlmCkluZGV4OiBraHRtbC94bWwvZG9tX2Rv
Y2ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3ht
bC9kb21fZG9jaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjkzCmRpZmYgLXAgLXUg
LXIxLjI5MyBraHRtbC94bWwvZG9tX2RvY2ltcGwuY3BwCi0tLSBraHRtbC94bWwvZG9tX2RvY2lt
cGwuY3BwCTIzIERlYyAyMDA1IDE4OjQ0OjI4IC0wMDAwCTEuMjkzCisrKyBraHRtbC94bWwvZG9t
X2RvY2ltcGwuY3BwCTMwIERlYyAyMDA1IDAxOjU0OjAxIC0wMDAwCkBAIC0xODI4LDcgKzE4Mjgs
NyBAQCB2b2lkIERvY3VtZW50SW1wbDo6cHJvY2Vzc0h0dHBFcXVpdihjb25zCiAKICAgICBLSFRN
TFBhcnQgKnBhcnQgPSB0aGlzLT5wYXJ0KCk7CiAKLSAgICBpZiAoc3RyY2FzZWNtcChlcXVpdiwg
ImRlZmF1bHQtc3R5bGUiKSA9PSAwKSB7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2
LCAiZGVmYXVsdC1zdHlsZSIpKSB7CiAgICAgICAgIC8vIFRoZSBwcmVmZXJyZWQgc3R5bGUgc2V0
IGhhcyBiZWVuIG92ZXJyaWRkZW4gYXMgcGVyIHNlY3Rpb24gCiAgICAgICAgIC8vIDE0LjMuMiBv
ZiB0aGUgSFRNTDQuMCBzcGVjaWZpY2F0aW9uLiAgV2UgbmVlZCB0byB1cGRhdGUgdGhlCiAgICAg
ICAgIC8vIHNoZWV0IHVzZWQgdmFyaWFibGUgYW5kIHRoZW4gdXBkYXRlIG91ciBzdHlsZSBzZWxl
Y3Rvci4gCkBAIC0xODM5LDcgKzE4MzksNyBAQCB2b2lkIERvY3VtZW50SW1wbDo6cHJvY2Vzc0h0
dHBFcXVpdihjb25zCiAgICAgICAgIG1fcHJlZmVycmVkU3R5bGVzaGVldFNldCA9IGNvbnRlbnQ7
CiAgICAgICAgIHVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKICAgICB9Ci0gICAgZWxzZSBpZihzdHJj
YXNlY21wKGVxdWl2LCAicmVmcmVzaCIpID09IDAgJiYgcGFydC0+bWV0YVJlZnJlc2hFbmFibGVk
KCkpCisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZXF1aXYsICJyZWZyZXNoIikgJiYg
cGFydC0+bWV0YVJlZnJlc2hFbmFibGVkKCkpCiAgICAgewogICAgICAgICAvLyBnZXQgZGVsYXkg
YW5kIHVybAogICAgICAgICBRU3RyaW5nIHN0ciA9IGNvbnRlbnQucXN0cmluZygpLnN0cmlwV2hp
dGVTcGFjZSgpOwpAQCAtMTg3MSwyNyArMTg3MSwyNSBAQCB2b2lkIERvY3VtZW50SW1wbDo6cHJv
Y2Vzc0h0dHBFcXVpdihjb25zCiAgICAgICAgICAgICAgICAgcGFydC0+c2NoZWR1bGVSZWRpcmVj
dGlvbihkZWxheSwgY29tcGxldGVVUkwoIHN0ciApLCBkZWxheSA8PSAxKTsKICAgICAgICAgfQog
ICAgIH0KLSAgICBlbHNlIGlmKHN0cmNhc2VjbXAoZXF1aXYsICJleHBpcmVzIikgPT0gMCkKKyAg
ICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShlcXVpdiwgImV4cGlyZXMiKSkKICAgICB7CiAg
ICAgICAgIFFTdHJpbmcgc3RyID0gY29udGVudC5xc3RyaW5nKCkuc3RyaXBXaGl0ZVNwYWNlKCk7
CiAgICAgICAgIHRpbWVfdCBleHBpcmVfZGF0ZSA9IHN0ci50b0ludCgpOwogICAgICAgICBpZiAo
bV9kb2NMb2FkZXIpCiAgICAgICAgICAgICBtX2RvY0xvYWRlci0+c2V0RXhwaXJlRGF0ZShleHBp
cmVfZGF0ZSk7CiAgICAgfQotICAgIGVsc2UgaWYoc3RyY2FzZWNtcChlcXVpdiwgInByYWdtYSIp
ID09IDAgfHwgc3RyY2FzZWNtcChlcXVpdiwgImNhY2hlLWNvbnRyb2wiKSA9PSAwICYmIHBhcnQp
CisgICAgZWxzZSBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAicHJhZ21hIikgfHwgZXF1
YWxJZ25vcmluZ0Nhc2UoZXF1aXYsICJjYWNoZS1jb250cm9sIikpICYmIHBhcnQpCiAgICAgewog
ICAgICAgICBRU3RyaW5nIHN0ciA9IGNvbnRlbnQucXN0cmluZygpLmxvd2VyKCkuc3RyaXBXaGl0
ZVNwYWNlKCk7CiAgICAgICAgIEtVUkwgdXJsID0gcGFydC0+dXJsKCk7CiAgICAgICAgIGlmICgo
c3RyID09ICJuby1jYWNoZSIpICYmIHVybC5wcm90b2NvbCgpLnN0YXJ0c1dpdGgoImh0dHAiKSkK
LSAgICAgICAgewogICAgICAgICAgICBLSU86Omh0dHBfdXBkYXRlX2NhY2hlKHVybCwgdHJ1ZSwg
MCk7Ci0gICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiggKHN0cmNhc2VjbXAoZXF1aXYsICJz
ZXQtY29va2llIikgPT0gMCkpCisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZXF1aXYs
ICJzZXQtY29va2llIikpCiAgICAgewogICAgICAgICAvLyAjIyMgbWFrZSBzZXRDb29raWUgd29y
ayBvbiBYTUwgZG9jdW1lbnRzIHRvbzsgZS5nLiBpbiBjYXNlIG9mIDxodG1sOm1ldGEgLi4uLi4+
Ci0gICAgICAgIEhUTUxEb2N1bWVudEltcGwgKmQgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnRJ
bXBsICo+KHRoaXMpOwotICAgICAgICBkLT5zZXRDb29raWUoY29udGVudCk7CisgICAgICAgIGlm
IChpc0hUTUxEb2N1bWVudCgpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50
SW1wbCAqPih0aGlzKS0+c2V0Q29va2llKGNvbnRlbnQpOwogICAgIH0KIH0KIApJbmRleDoga2h0
bWwveG1sL2RvbV9zdHJpbmdpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC94bWwvZG9tX3N0cmluZ2ltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjM1CmRpZmYgLXAgLXUgLXIxLjM1IGtodG1sL3htbC9kb21fc3RyaW5naW1wbC5jcHAKLS0t
IGtodG1sL3htbC9kb21fc3RyaW5naW1wbC5jcHAJMjMgRGVjIDIwMDUgMTg6NDQ6MjkgLTAwMDAJ
MS4zNQorKysga2h0bWwveG1sL2RvbV9zdHJpbmdpbXBsLmNwcAkzMCBEZWMgMjAwNSAwMTo1NDow
MSAtMDAwMApAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChr
b2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAoIG11
ZWxsZXJAa2RlLm9yZyApCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yNiwxMiArMjYsMTYgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJkb21fc3RyaW5naW1wbC5oIgogCisjaW5jbHVkZSAiZG9tX2F0b21pY3N0cmlu
Zy5oIgorI2luY2x1ZGUgImtodG1sbGF5b3V0LmgiCiAjaW5jbHVkZSA8a2RlYnVnLmg+Ci0KICNp
bmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJkb21fYXRvbWljc3RyaW5nLmgiCisKK2lubGlu
ZSBRQ2hhciogQUxMT0NfUUNIQVJfVkVDKHVuc2lnbmVkIG4pIHsgcmV0dXJuIHN0YXRpY19jYXN0
PFFDaGFyKj4oZmFzdE1hbGxvYyhzaXplb2YoUUNoYXIpICogbikpOyB9CitpbmxpbmUgdm9pZCBE
RUxFVEVfUUNIQVJfVkVDKFFDaGFyKiBwKSB7IGZhc3RGcmVlKHApOyB9CiAKIHVzaW5nIG5hbWVz
cGFjZSBraHRtbDsKK3VzaW5nIG5hbWVzcGFjZSBLWE1MQ29yZTsKIAogbmFtZXNwYWNlIERPTSB7
CiAKQEAgLTQ5LDcgKzUzLDcgQEAgRE9NU3RyaW5nSW1wbDo6RE9NU3RyaW5nSW1wbChjb25zdCBR
Q2hhcgogICAgIF9oYXNoID0gMDsKICAgICBfaW5UYWJsZSA9IGZhbHNlOwogICAgIGJvb2wgaGF2
ZXN0ciA9IHN0ciAmJiBsZW47Ci0gICAgcyA9IFFUX0FMTE9DX1FDSEFSX1ZFQyhoYXZlc3RyID8g
bGVuIDogMSk7CisgICAgcyA9IEFMTE9DX1FDSEFSX1ZFQyhoYXZlc3RyID8gbGVuIDogMSk7CiAg
ICAgaWYgKGhhdmVzdHIpIHsKICAgICAgICAgbWVtY3B5KCBzLCBzdHIsIGxlbiAqIHNpemVvZihR
Q2hhcikgKTsKICAgICAgICAgbCA9IGxlbjsKQEAgLTY3LDcgKzcxLDcgQEAgRE9NU3RyaW5nSW1w
bDo6RE9NU3RyaW5nSW1wbChjb25zdCBRU3RyaQogICAgIF9oYXNoID0gMDsKICAgICBfaW5UYWJs
ZSA9IGZhbHNlOwogICAgIGJvb2wgaGF2ZXN0ciA9IHN0ciAmJiBsZW47Ci0gICAgcyA9IFFUX0FM
TE9DX1FDSEFSX1ZFQyhoYXZlc3RyID8gbGVuIDogMSk7CisgICAgcyA9IEFMTE9DX1FDSEFSX1ZF
QyhoYXZlc3RyID8gbGVuIDogMSk7CiAgICAgaWYgKGhhdmVzdHIpIHsKICAgICAgICAgbWVtY3B5
KCBzLCBzdHIsIGxlbiAqIHNpemVvZihRQ2hhcikgKTsKICAgICAgICAgbCA9IGxlbjsKQEAgLTg1
LDcgKzg5LDcgQEAgRE9NU3RyaW5nSW1wbDo6RE9NU3RyaW5nSW1wbChjb25zdCBjaGFyIAogICAg
IGlmKHN0ciAmJiAqc3RyKQogICAgIHsKICAgICAgICAgbCA9IHN0cmxlbihzdHIpOwotICAgICAg
ICBzID0gUVRfQUxMT0NfUUNIQVJfVkVDKCBsICk7CisgICAgICAgIHMgPSBBTExPQ19RQ0hBUl9W
RUMoIGwgKTsKICAgICAgICAgaW50IGkgPSBsOwogICAgICAgICBRQ2hhciogcHRyID0gczsKICAg
ICAgICAgd2hpbGUoIGktLSApCkBAIC05Myw3ICs5Nyw3IEBAIERPTVN0cmluZ0ltcGw6OkRPTVN0
cmluZ0ltcGwoY29uc3QgY2hhciAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgcyA9
IFFUX0FMTE9DX1FDSEFSX1ZFQyggMSApOyAgLy8gY3Jhc2ggcHJvdGVjdGlvbgorICAgICAgICBz
ID0gQUxMT0NfUUNIQVJfVkVDKCAxICk7ICAvLyBjcmFzaCBwcm90ZWN0aW9uCiAgICAgICAgIHNb
MF0gPSAweDA7IC8vID09IFFDaGFyOjpudWxsOwogICAgICAgICBsID0gMDsKICAgICB9CkBAIC0x
MDcsNyArMTExLDcgQEAgRE9NU3RyaW5nSW1wbDo6RE9NU3RyaW5nSW1wbChjb25zdCBjaGFyIAog
ICAgIGlmICghbCB8fCAhc3RyKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgcyA9IFFUX0FM
TE9DX1FDSEFSX1ZFQyhsKTsKKyAgICBzID0gQUxMT0NfUUNIQVJfVkVDKGwpOwogICAgIGludCBp
ID0gbDsKICAgICBRQ2hhciogcHRyID0gczsKICAgICB3aGlsZSggaS0tICkKQEAgLTExNyw3ICsx
MjEsNyBAQCBET01TdHJpbmdJbXBsOjpET01TdHJpbmdJbXBsKGNvbnN0IGNoYXIgCiBET01TdHJp
bmdJbXBsOjpET01TdHJpbmdJbXBsKGNvbnN0IFFDaGFyICZjaCkgewogICAgIF9oYXNoID0gMDsK
ICAgICBfaW5UYWJsZSA9IGZhbHNlOwotICAgIHMgPSBRVF9BTExPQ19RQ0hBUl9WRUMoIDEgKTsK
KyAgICBzID0gQUxMT0NfUUNIQVJfVkVDKCAxICk7CiAgICAgc1swXSA9IGNoOwogICAgIGwgPSAx
OwogfQpAQCAtMTI2LDggKzEzMCw3IEBAIERPTVN0cmluZ0ltcGw6On5ET01TdHJpbmdJbXBsKCkK
IHsKICAgICBpZiAoX2luVGFibGUpCiAgICAgICAgIEF0b21pY1N0cmluZzo6cmVtb3ZlKHRoaXMp
OwotICAgIGlmIChzKQotICAgICAgICBRVF9ERUxFVEVfUUNIQVJfVkVDKHMpOworICAgIERFTEVU
RV9RQ0hBUl9WRUMocyk7CiB9CiAKIHZvaWQgRE9NU3RyaW5nSW1wbDo6YXBwZW5kKERPTVN0cmlu
Z0ltcGwgKnN0cikKQEAgLTEzNiwxMCArMTM5LDEwIEBAIHZvaWQgRE9NU3RyaW5nSW1wbDo6YXBw
ZW5kKERPTVN0cmluZ0ltcGwKICAgICBpZihzdHIgJiYgc3RyLT5sICE9IDApCiAgICAgewogICAg
ICAgICBpbnQgbmV3bGVuID0gbCtzdHItPmw7Ci0gICAgICAgIFFDaGFyICpjID0gUVRfQUxMT0Nf
UUNIQVJfVkVDKG5ld2xlbik7CisgICAgICAgIFFDaGFyICpjID0gQUxMT0NfUUNIQVJfVkVDKG5l
d2xlbik7CiAgICAgICAgIG1lbWNweShjLCBzLCBsKnNpemVvZihRQ2hhcikpOwogICAgICAgICBt
ZW1jcHkoYytsLCBzdHItPnMsIHN0ci0+bCpzaXplb2YoUUNoYXIpKTsKLSAgICAgICAgaWYocykg
UVRfREVMRVRFX1FDSEFSX1ZFQyhzKTsKKyAgICAgICAgREVMRVRFX1FDSEFSX1ZFQyhzKTsKICAg
ICAgICAgcyA9IGM7CiAgICAgICAgIGwgPSBuZXdsZW47CiAgICAgfQpAQCAtMTU2LDExICsxNTks
MTEgQEAgdm9pZCBET01TdHJpbmdJbXBsOjppbnNlcnQoRE9NU3RyaW5nSW1wbAogICAgIGlmKHN0
ciAmJiBzdHItPmwgIT0gMCkKICAgICB7CiAgICAgICAgIGludCBuZXdsZW4gPSBsK3N0ci0+bDsK
LSAgICAgICAgUUNoYXIgKmMgPSBRVF9BTExPQ19RQ0hBUl9WRUMobmV3bGVuKTsKKyAgICAgICAg
UUNoYXIgKmMgPSBBTExPQ19RQ0hBUl9WRUMobmV3bGVuKTsKICAgICAgICAgbWVtY3B5KGMsIHMs
IHBvcypzaXplb2YoUUNoYXIpKTsKICAgICAgICAgbWVtY3B5KGMrcG9zLCBzdHItPnMsIHN0ci0+
bCpzaXplb2YoUUNoYXIpKTsKICAgICAgICAgbWVtY3B5KGMrcG9zK3N0ci0+bCwgcytwb3MsIChs
LXBvcykqc2l6ZW9mKFFDaGFyKSk7Ci0gICAgICAgIGlmKHMpIFFUX0RFTEVURV9RQ0hBUl9WRUMo
cyk7CisgICAgICAgIERFTEVURV9RQ0hBUl9WRUMocyk7CiAgICAgICAgIHMgPSBjOwogICAgICAg
ICBsID0gbmV3bGVuOwogICAgIH0KQEAgLTE3Miw5ICsxNzUsOSBAQCB2b2lkIERPTVN0cmluZ0lt
cGw6OnRydW5jYXRlKGludCBsZW4pCiAgICAgaWYobGVuID4gKGludClsKSByZXR1cm47CiAKICAg
ICBpbnQgbmwgPSBsZW4gPCAxID8gMSA6IGxlbjsKLSAgICBRQ2hhciAqYyA9IFFUX0FMTE9DX1FD
SEFSX1ZFQyhubCk7CisgICAgUUNoYXIgKmMgPSBBTExPQ19RQ0hBUl9WRUMobmwpOwogICAgIG1l
bWNweShjLCBzLCBubCpzaXplb2YoUUNoYXIpKTsKLSAgICBpZihzKSBRVF9ERUxFVEVfUUNIQVJf
VkVDKHMpOworICAgIERFTEVURV9RQ0hBUl9WRUMocyk7CiAgICAgcyA9IGM7CiAgICAgbCA9IGxl
bjsKIH0KQEAgLTE4OCwxMCArMTkxLDEwIEBAIHZvaWQgRE9NU3RyaW5nSW1wbDo6cmVtb3ZlKHVp
bnQgcG9zLCBpbnQKICAgICBsZW4gPSBsIC0gcG9zOwogCiAgICAgdWludCBuZXdMZW4gPSBsLWxl
bjsKLSAgICBRQ2hhciAqYyA9IFFUX0FMTE9DX1FDSEFSX1ZFQyhuZXdMZW4pOworICAgIFFDaGFy
ICpjID0gQUxMT0NfUUNIQVJfVkVDKG5ld0xlbik7CiAgICAgbWVtY3B5KGMsIHMsIHBvcypzaXpl
b2YoUUNoYXIpKTsKICAgICBtZW1jcHkoYytwb3MsIHMrcG9zK2xlbiwgKGwtbGVuLXBvcykqc2l6
ZW9mKFFDaGFyKSk7Ci0gICAgaWYocykgUVRfREVMRVRFX1FDSEFSX1ZFQyhzKTsKKyAgICBERUxF
VEVfUUNIQVJfVkVDKHMpOwogICAgIHMgPSBjOwogICAgIGwgPSBuZXdMZW47CiB9CkBAIC0yMDIs
NyArMjA1LDcgQEAgRE9NU3RyaW5nSW1wbCAqRE9NU3RyaW5nSW1wbDo6c3BsaXQodWludAogICAg
IGlmKCBwb3MgPj1sICkgcmV0dXJuIG5ldyBET01TdHJpbmdJbXBsKCk7CiAKICAgICB1aW50IG5l
d0xlbiA9IGwtcG9zOwotICAgIFFDaGFyICpjID0gUVRfQUxMT0NfUUNIQVJfVkVDKG5ld0xlbik7
CisgICAgUUNoYXIgKmMgPSBBTExPQ19RQ0hBUl9WRUMobmV3TGVuKTsKICAgICBtZW1jcHkoYywg
cytwb3MsIG5ld0xlbipzaXplb2YoUUNoYXIpKTsKIAogICAgIERPTVN0cmluZ0ltcGwgKnN0ciA9
IG5ldyBET01TdHJpbmdJbXBsKHMgKyBwb3MsIG5ld0xlbik7CkBAIC0zNjgsNyArMzcxLDcgQEAg
RE9NU3RyaW5nSW1wbCAqRE9NU3RyaW5nSW1wbDo6bG93ZXIoKSBjbwogICAgIGlmICghbCkKICAg
ICAgICAgcmV0dXJuIGM7CiAKLSAgICBjLT5zID0gUVRfQUxMT0NfUUNIQVJfVkVDKGwpOworICAg
IGMtPnMgPSBBTExPQ19RQ0hBUl9WRUMobCk7CiAgICAgYy0+bCA9IGw7CiAKICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IGw7IGkrKykKQEAgLTM4Miw3ICszODUsNyBAQCBET01TdHJp
bmdJbXBsICpET01TdHJpbmdJbXBsOjp1cHBlcigpIGNvCiAgICAgRE9NU3RyaW5nSW1wbCAqYyA9
IG5ldyBET01TdHJpbmdJbXBsOwogICAgIGlmKCFsKSByZXR1cm4gYzsKIAotICAgIGMtPnMgPSBR
VF9BTExPQ19RQ0hBUl9WRUMobCk7CisgICAgYy0+cyA9IEFMTE9DX1FDSEFSX1ZFQyhsKTsKICAg
ICBjLT5sID0gbDsKIAogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbDsgaSsrKQpA
QCAtMzk3LDcgKzQwMCw3IEBAIERPTVN0cmluZ0ltcGwgKkRPTVN0cmluZ0ltcGw6OmNhcGl0YWxp
emUKICAgICBib29sIGhhdmVDYXBwZWQgPSBmYWxzZTsKICAgICBpZighbCkgcmV0dXJuIGM7CiAK
LSAgICBjLT5zID0gUVRfQUxMT0NfUUNIQVJfVkVDKGwpOworICAgIGMtPnMgPSBBTExPQ19RQ0hB
Ul9WRUMobCk7CiAgICAgYy0+bCA9IGw7CiAKICAgICBpZiAoIGwgKSBjLT5zWzBdID0gc1swXS51
cHBlcigpOwpAQCAtNDYxLDcgKzQ2NCw3IEBAIERPTVN0cmluZ0ltcGwgKkRPTVN0cmluZ0ltcGw6
OnJlcGxhY2UoUUMKIAogICAgIERPTVN0cmluZ0ltcGwgKmMgPSBuZXcgRE9NU3RyaW5nSW1wbDsK
IAotICAgIGMtPnMgPSBRVF9BTExPQ19RQ0hBUl9WRUMobCk7CisgICAgYy0+cyA9IEFMTE9DX1FD
SEFSX1ZFQyhsKTsKICAgICBjLT5sID0gbDsKIAogICAgIGZvciAoaSA9IDA7IGkgIT0gbDsgKytp
KSB7CkBAIC00NzQsMTMgKzQ3NywxMDMgQEAgRE9NU3RyaW5nSW1wbCAqRE9NU3RyaW5nSW1wbDo6
cmVwbGFjZShRQwogICAgIHJldHVybiBjOwogfQogCitib29sIGVxdWFsKGNvbnN0IERPTVN0cmlu
Z0ltcGwqIGEsIGNvbnN0IERPTVN0cmluZ0ltcGwqIGIpCit7CisgICAgcmV0dXJuIERlZmF1bHRI
YXNoPERPTTo6RE9NU3RyaW5nSW1wbCo+OjplcXVhbChhLCBiKTsKK30KKworYm9vbCBlcXVhbChj
b25zdCBET01TdHJpbmdJbXBsKiBhLCBjb25zdCBjaGFyKiBiKQoreworICAgIGlmICghYSkKKyAg
ICAgICAgcmV0dXJuICFiOworICAgIGlmICghYikKKyAgICAgICAgcmV0dXJuICFhOworCisgICAg
dWludCBsZW5ndGggPSBhLT5sOworICAgIGNvbnN0IFFDaGFyKiBhcyA9IGEtPnM7CisgICAgZm9y
ICh1aW50IGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGNoYXIgYyA9IGJbaV07
CisgICAgICAgIGlmICghYykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYg
KGFzW2ldICE9IGMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0
dXJuICFiW2xlbmd0aF07Cit9CisKK2Jvb2wgZXF1YWwoY29uc3QgY2hhciogYSwgY29uc3QgRE9N
U3RyaW5nSW1wbCogYikKK3sKKyAgICBpZiAoIWEpCisgICAgICAgIHJldHVybiAhYjsKKyAgICBp
ZiAoIWIpCisgICAgICAgIHJldHVybiAhYTsKKworICAgIHVpbnQgbGVuZ3RoID0gYi0+bDsKKyAg
ICBjb25zdCBRQ2hhciogYnMgPSBiLT5zOworICAgIGZvciAodWludCBpID0gMDsgaSAhPSBsZW5n
dGg7ICsraSkgeworICAgICAgICBjaGFyIGMgPSBhW2ldOworICAgICAgICBpZiAoIWMpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChjICE9IGJzW2ldKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiAhYVtsZW5ndGhdOworfQorCiti
b29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IERPTVN0cmluZ0ltcGwqIGEsIGNvbnN0IERPTVN0
cmluZ0ltcGwqIGIpCit7CisgICAgcmV0dXJuIENhc2VJbnNlbnNpdGl2ZUhhc2g6OmVxdWFsKGEs
IGIpOworfQorCitib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IERPTVN0cmluZ0ltcGwqIGEs
IGNvbnN0IGNoYXIqIGIpCit7CisgICAgaWYgKCFhKQorICAgICAgICByZXR1cm4gIWI7CisgICAg
aWYgKCFiKQorICAgICAgICByZXR1cm4gIWE7CisKKyAgICB1aW50IGxlbmd0aCA9IGEtPmw7Cisg
ICAgY29uc3QgUUNoYXIqIGFzID0gYS0+czsKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgIT0gbGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgY2hhciBjID0gYltpXTsKKyAgICAgICAgaWYgKCFjKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoYXNbaV0ubG93ZXIoKSAhPSBRQ2hh
cihjKS5sb3dlcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiAhYltsZW5ndGhdOworfQorCitib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IGNoYXIq
IGEsIGNvbnN0IERPTVN0cmluZ0ltcGwqIGIpCit7CisgICAgaWYgKCFhKQorICAgICAgICByZXR1
cm4gIWI7CisgICAgaWYgKCFiKQorICAgICAgICByZXR1cm4gIWE7CisKKyAgICB1aW50IGxlbmd0
aCA9IGItPmw7CisgICAgY29uc3QgUUNoYXIqIGJzID0gYi0+czsKKyAgICBmb3IgKHVpbnQgaSA9
IDA7IGkgIT0gbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgY2hhciBjID0gYVtpXTsKKyAgICAgICAg
aWYgKCFjKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoUUNoYXIoYyku
bG93ZXIoKSAhPSBic1tpXS5sb3dlcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiAhYVtsZW5ndGhdOworfQorCiAvLyBHb2xkZW4gcmF0aW8gLSBhcmJp
dHJhcnkgc3RhcnQgdmFsdWUgdG8gYXZvaWQgbWFwcGluZyBhbGwgMCdzIHRvIGFsbCAwJ3MKIC8v
IG9yIGFueXRoaW5nIGxpa2UgdGhhdC4KIGNvbnN0IHVuc2lnbmVkIFBISSA9IDB4OWUzNzc5YjlV
OwogCiAvLyBQYXVsIEhzaWVoJ3MgU3VwZXJGYXN0SGFzaAogLy8gaHR0cDovL3d3dy5hemlsbGlv
bm1vbmtleXMuY29tL3FlZC9oYXNoLmh0bWwKLXVuc2lnbmVkIERPTVN0cmluZ0ltcGw6OmNvbXB1
dGVIYXNoKGNvbnN0IFFDaGFyICpzLCBpbnQgbGVuKQordW5zaWduZWQgRE9NU3RyaW5nSW1wbDo6
Y29tcHV0ZUhhc2goY29uc3QgUUNoYXIgKnMsIHVuc2lnbmVkIGxlbikKIHsKICAgICB1bnNpZ25l
ZCBsID0gbGVuOwogICAgIHVpbnQzMl90IGhhc2ggPSBQSEk7CkluZGV4OiBraHRtbC94bWwvZG9t
X3N0cmluZ2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC94bWwvZG9tX3N0cmluZ2ltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOQpkaWZmIC1w
IC11IC1yMS4xOSBraHRtbC94bWwvZG9tX3N0cmluZ2ltcGwuaAotLS0ga2h0bWwveG1sL2RvbV9z
dHJpbmdpbXBsLmgJMjMgRGVjIDIwMDUgMDM6NTc6MjUgLTAwMDAJMS4xOQorKysga2h0bWwveG1s
L2RvbV9zdHJpbmdpbXBsLmgJMzAgRGVjIDIwMDUgMDE6NTQ6MDEgLTAwMDAKQEAgLTIsNiArMiw3
IEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBL
REUuCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMTksMjAgKzIwLDIyIEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KICAqCiAgKi8KLSNpZm5kZWYgX0RPTV9ET01TdHJpbmdJbXBsX2hfCi0jZGVmaW5lIF9ET01f
RE9NU3RyaW5nSW1wbF9oXwogCi0jaW5jbHVkZSA8cXN0cmluZy5oPgorI2lmbmRlZiBET01fRE9N
U3RyaW5nSW1wbF9oCisjZGVmaW5lIERPTV9ET01TdHJpbmdJbXBsX2gKIAotI2luY2x1ZGUgIm1p
c2Mva2h0bWxsYXlvdXQuaCIKICNpbmNsdWRlICJtaXNjL3NoYXJlZC5oIgogI2luY2x1ZGUgPGt4
bWxjb3JlL1JlZlB0ci5oPgorI2luY2x1ZGUgPHFzdHJpbmcuaD4KIAotI2RlZmluZSBRVF9BTExP
Q19RQ0hBUl9WRUMoTikgc3RhdGljX2Nhc3Q8UUNoYXIqPihmYXN0TWFsbG9jKHNpemVvZihRQ2hh
cikqKE4pKSkKLSNkZWZpbmUgUVRfREVMRVRFX1FDSEFSX1ZFQyhQKSBmYXN0RnJlZShQKQorbmFt
ZXNwYWNlIGtodG1sIHsKKyAgICBzdHJ1Y3QgTGVuZ3RoOworfQogCiBuYW1lc3BhY2UgRE9NIHsK
IAorZW51bSBMb3dlcmNhc2VkIHsgbG93ZXJjYXNlZCB9OworCiBjbGFzcyBET01TdHJpbmdJbXBs
IDogcHVibGljIGtodG1sOjpTaGFyZWQ8RE9NU3RyaW5nSW1wbD4KIHsKIHByaXZhdGU6CkBAIC00
MiwxNiArNDUsMTggQEAgcHJpdmF0ZToKIHByb3RlY3RlZDoKICAgICBET01TdHJpbmdJbXBsKCkg
eyBzID0gMCwgbCA9IDA7IF9oYXNoID0gMDsgX2luVGFibGUgPSBmYWxzZTsgfQogcHVibGljOgot
ICAgIERPTVN0cmluZ0ltcGwoY29uc3QgUUNoYXIgKnN0ciwgdW5zaWduZWQgaW50IGxlbik7Ci0g
ICAgRE9NU3RyaW5nSW1wbChjb25zdCBjaGFyICpzdHIpOwotICAgIERPTVN0cmluZ0ltcGwoY29u
c3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgbGVuKTsKKyAgICBET01TdHJpbmdJbXBsKGNvbnN0
IFFDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBET01TdHJpbmdJbXBsKGNvbnN0IFFDaGFy
KiwgdW5zaWduZWQgbGVuZ3RoLCBMb3dlcmNhc2VkKTsKKyAgICBET01TdHJpbmdJbXBsKGNvbnN0
IGNoYXIqKTsKKyAgICBET01TdHJpbmdJbXBsKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBsZW5ndGgp
OworICAgIERPTVN0cmluZ0ltcGwoY29uc3QgY2hhciosIHVuc2lnbmVkIGxlbmd0aCwgTG93ZXJj
YXNlZCk7CiAgICAgRE9NU3RyaW5nSW1wbChjb25zdCBRQ2hhciAmY2gpOwogICAgIERPTVN0cmlu
Z0ltcGwoY29uc3QgUVN0cmluZyAmc3RyKTsKICAgICB+RE9NU3RyaW5nSW1wbCgpOwogICAgIAog
ICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IGlmIChfaGFzaCA9PSAwKSBfaGFzaCA9IGNvbXB1
dGVIYXNoKHMsIGwpOyByZXR1cm4gX2hhc2g7IH0KLSAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0
ZUhhc2goY29uc3QgUUNoYXIgKiwgaW50IGxlbmd0aCk7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGNv
bXB1dGVIYXNoKGNvbnN0IGNoYXIgKik7CisgICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNo
KGNvbnN0IFFDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgY29t
cHV0ZUhhc2goY29uc3QgY2hhciopOwogICAgIAogICAgIHZvaWQgYXBwZW5kKERPTVN0cmluZ0lt
cGwgKnN0cik7CiAgICAgdm9pZCBpbnNlcnQoRE9NU3RyaW5nSW1wbCAqc3RyLCB1bnNpZ25lZCBp
bnQgcG9zKTsKQEAgLTk2LDYgKzEwMSwxNCBAQCBwdWJsaWM6CiAgICAgYm9vbCBfaW5UYWJsZTsK
IH07CiAKK2Jvb2wgZXF1YWwoY29uc3QgRE9NU3RyaW5nSW1wbCosIGNvbnN0IERPTVN0cmluZ0lt
cGwqKTsKK2Jvb2wgZXF1YWwoY29uc3QgRE9NU3RyaW5nSW1wbCosIGNvbnN0IGNoYXIqKTsKK2Jv
b2wgZXF1YWwoY29uc3QgY2hhciosIGNvbnN0IERPTVN0cmluZ0ltcGwqKTsKKworYm9vbCBlcXVh
bElnbm9yaW5nQ2FzZShjb25zdCBET01TdHJpbmdJbXBsKiwgY29uc3QgRE9NU3RyaW5nSW1wbCop
OworYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBET01TdHJpbmdJbXBsKiwgY29uc3QgY2hh
ciopOworYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBjaGFyKiwgY29uc3QgRE9NU3RyaW5n
SW1wbCopOworCiB9CiAKIG5hbWVzcGFjZSBLWE1MQ29yZSB7CkBAIC0xNzksNiArMTkyLDUyIEBA
IG5hbWVzcGFjZSBLWE1MQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gaGFzaDsKICAgICAgICAg
fQogICAgICAgICAKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgY2hhciogc3Ry
LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaGFzaCBp
cyBkZXNpZ25lZCB0byB3b3JrIG9uIDE2LWJpdCBjaHVua3MgYXQgYSB0aW1lLiBCdXQgc2luY2Ug
dGhlIG5vcm1hbCBjYXNlCisgICAgICAgICAgICAvLyAoYWJvdmUpIGlzIHRvIGhhc2ggVVRGLTE2
IGNoYXJhY3RlcnMsIHdlIGp1c3QgdHJlYXQgdGhlIDgtYml0IGNoYXJzIGFzIGlmIHRoZXkKKyAg
ICAgICAgICAgIC8vIHdlcmUgMTYtYml0IGNodW5rcywgd2hpY2ggd2lsbCBnaXZlIG1hdGNoaW5n
IHJlc3VsdHMuCisKKyAgICAgICAgICAgIHVuc2lnbmVkIGwgPSBsZW5ndGg7CisgICAgICAgICAg
ICBjb25zdCBjaGFyKiBzID0gc3RyOworICAgICAgICAgICAgdWludDMyX3QgaGFzaCA9IFBISTsK
KyAgICAgICAgICAgIHVpbnQzMl90IHRtcDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50
IHJlbSA9IGwgJiAxOworICAgICAgICAgICAgbCA+Pj0gMTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgLy8gTWFpbiBsb29wCisgICAgICAgICAgICBmb3IgKDsgbCA+IDA7IGwtLSkgeworICAg
ICAgICAgICAgICAgIGhhc2ggKz0gUUNoYXIoc1swXSkubG93ZXIoKS51bmljb2RlKCk7CisgICAg
ICAgICAgICAgICAgdG1wID0gKFFDaGFyKHNbMV0pLmxvd2VyKCkudW5pY29kZSgpIDw8IDExKSBe
IGhhc2g7CisgICAgICAgICAgICAgICAgaGFzaCA9IChoYXNoIDw8IDE2KSBeIHRtcDsKKyAgICAg
ICAgICAgICAgICBzICs9IDI7CisgICAgICAgICAgICAgICAgaGFzaCArPSBoYXNoID4+IDExOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBIYW5kbGUgZW5kIGNh
c2UKKyAgICAgICAgICAgIGlmIChyZW0pIHsKKyAgICAgICAgICAgICAgICBoYXNoICs9IFFDaGFy
KHNbMF0pLmxvd2VyKCkudW5pY29kZSgpOworICAgICAgICAgICAgICAgIGhhc2ggXj0gaGFzaCA8
PCAxMTsKKyAgICAgICAgICAgICAgICBoYXNoICs9IGhhc2ggPj4gMTc7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZvcmNlICJhdmFsYW5jaGluZyIgb2YgZmlu
YWwgMTI3IGJpdHMKKyAgICAgICAgICAgIGhhc2ggXj0gaGFzaCA8PCAzOworICAgICAgICAgICAg
aGFzaCArPSBoYXNoID4+IDU7CisgICAgICAgICAgICBoYXNoIF49IGhhc2ggPDwgMjsKKyAgICAg
ICAgICAgIGhhc2ggKz0gaGFzaCA+PiAxNTsKKyAgICAgICAgICAgIGhhc2ggXj0gaGFzaCA8PCAx
MDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gdGhpcyBhdm9pZHMgZXZlciByZXR1cm5p
bmcgYSBoYXNoIGNvZGUgb2YgMCwgc2luY2UgdGhhdCBpcyB1c2VkIHRvCisgICAgICAgICAgICAv
LyBzaWduYWwgImhhc2ggbm90IGNvbXB1dGVkIHlldCIsIHVzaW5nIGEgdmFsdWUgdGhhdCBpcyBs
aWtlbHkgdG8gYmUKKyAgICAgICAgICAgIC8vIGVmZmVjdGl2ZWx5IHRoZSBzYW1lIGFzIDAgd2hl
biB0aGUgbG93IGJpdHMgYXJlIG1hc2tlZAorICAgICAgICAgICAgaWYgKGhhc2ggPT0gMCkKKyAg
ICAgICAgICAgICAgICBoYXNoID0gMHg4MDAwMDAwMDsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgcmV0dXJuIGhhc2g7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IERPTTo6RE9NU3RyaW5nSW1wbCAqYSwgY29uc3QgRE9NOjpET01TdHJpbmdJ
bXBsICpiKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoYSA9PSBiKSByZXR1cm4gdHJ1ZTsK
QEAgLTIwOSw4ICsyNjgsNyBAQCBuYW1lc3BhY2UgS1hNTENvcmUgewogICAgIAogICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBIYXNoVHJhaXRzOwogCi0gICAgdGVtcGxhdGU8PgotICAg
IHN0cnVjdCBIYXNoVHJhaXRzPFJlZlB0cjxET006OkRPTVN0cmluZ0ltcGw+ID4geworICAgIHRl
bXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8UmVmUHRyPERPTTo6RE9NU3RyaW5nSW1wbD4gPiB7
CiAgICAgICAgIHR5cGVkZWYgUmVmUHRyPERPTTo6RE9NU3RyaW5nSW1wbD4gVHJhaXRUeXBlOwog
CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOwo=
</data>
<flag name="review"
          id="1135"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>