<?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>12350</bug_id>
          
          <creation_ts>2007-01-21 01:02:09 -0800</creation_ts>
          <short_desc>Add calcMode support to SVG Animation</short_desc>
          <delta_ts>2007-01-26 17:35:20 -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>SVG</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>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>34043</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-01-21 01:02:09 -0800</bug_when>
    <thetext>Add calcMode support to SVG Animation

The attached patch actually does a lot of surgery to the animation support to make it support calcValues as well as non-relative value computation (to eventually allow changing of the animation timeline).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34027</commentid>
    <comment_count>1</comment_count>
      <attachid>12580</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-01-21 01:04:06 -0800</bug_when>
    <thetext>Created attachment 12580
incomplete patch

This patch is not quite complete.  Although the base class SVGAnimationElement has been re-worked to support calcMode, the subclasses are not yet ready to handle the new parameters correctly.  (The subclasses also need further cleanup to allow abstracting concepts like &quot;frozen&quot; and generalize from-to animations to be simple 2-value animations.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33540</commentid>
    <comment_count>2</comment_count>
      <attachid>12602</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-01-22 01:34:21 -0800</bug_when>
    <thetext>Created attachment 12602
Another step closer (still not complete, doesn&apos;t compile)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32726</commentid>
    <comment_count>3</comment_count>
      <attachid>12650</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-01-24 14:31:35 -0800</bug_when>
    <thetext>Created attachment 12650
yet another step closer (doesn&apos;t compile, now with SVGTransformDistance)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32705</commentid>
    <comment_count>4</comment_count>
      <attachid>12656</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-01-24 17:04:37 -0800</bug_when>
    <thetext>Created attachment 12656
a version which compiles but does not seem to work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32698</commentid>
    <comment_count>5</comment_count>
      <attachid>12657</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-01-24 18:07:40 -0800</bug_when>
    <thetext>Created attachment 12657
A version which works about as well as pre-patch

This one is actually reviewable.  WildFox should take a peak.  Things are still not fully functioning (like animateTransform seems broken), but animation works about as well as it did pre-patch.  With a bit more tweaking it can now be made much much better than it was pre-patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32679</commentid>
    <comment_count>6</comment_count>
      <attachid>12660</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-01-24 21:53:56 -0800</bug_when>
    <thetext>Created attachment 12660
Now better than TOT

calcMode now works (which is really cool).  keyTimes also works.  I expect keySplines may work as well (but I have not tested).  There are issues with rotational transforms (slightly different than existing issues on TOT), there are also issues in distance calculations between colors.  I expect to fix these issues and more before landing.  WildFox or rwlbuis should at least take a peak at this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32673</commentid>
    <comment_count>7</comment_count>
      <attachid>12677</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-01-26 02:05:00 -0800</bug_when>
    <thetext>Created attachment 12677
final patch, with test cases

I&apos;m not sure if anyone in particular is particularly qualified to review this.  WildFox originally wrote this code.  This is a total re-write, so mostly I expect folks to sanity check the individual *Distance classes, and give a rubber stamp to the &quot;oh, that architecture more-or-less looks sane&quot;.  I&apos;m happy to talk about any of these changes over IRC.  The resulting state of animation is certainly better than TOT.  calcMode, keyTimes work (which they didn&apos;t before).

Some thoughts on what remains broken:
keySplines is a few lines of code away from working (code to find a point on a line given an x value).  freeze and repeat accumulations do not work (but I&apos;m not sure they did before either).  The underlying animVal/baseVal system is still broken.  &lt;animate&gt; can&apos;t really be wired in correctly until a system for handling animated mapped attributes, and animated styles is devised.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32584</commentid>
    <comment_count>8</comment_count>
      <attachid>12679</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-01-26 04:53:41 -0800</bug_when>
    <thetext>Created attachment 12679
better patch, now includes animateMotion support too

animateMotion was so easy to add under the new architecture, I figured I would just do it. :)  A few architectural changes will be needed before adding keyPoints and real path following, but simple animateMotion from, to, by and values animations work now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32231</commentid>
    <comment_count>9</comment_count>
      <attachid>12679</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2007-01-26 16:35:22 -0800</bug_when>
    <thetext>Comment on attachment 12679
better patch, now includes animateMotion support too

Assuming the changes we discussed on irc, this should be fine

We eneed a way to test the animation.. the drag layout tests do magical stuff with the event controller.  We may need to do similar for animation test cases in future</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32232</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-01-26 16:41:22 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 12679 [edit])
&gt; Assuming the changes we discussed on irc, this should be fine
&gt; 
&gt; We eneed a way to test the animation.. the drag layout tests do magical stuff
&gt; with the event controller.  We may need to do similar for animation test cases
&gt; in future

Thanks.

I totally agree!  That&apos;s why I filed:
http://bugs.webkit.org/show_bug.cgi?id=12074
a while back.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32225</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-01-26 17:35:20 -0800</bug_when>
    <thetext>Landed in r19168.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12580</attachid>
            <date>2007-01-21 01:04:06 -0800</date>
            <delta_ts>2007-01-22 01:34:21 -0800</delta_ts>
            <desc>incomplete patch</desc>
            <filename>anim.patch</filename>
            <type>text/plain</type>
            <size>19693</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtzdmcyL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDE4OTc3KQor
Kysga3N2ZzIvc3ZnL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw3ICs3MCw3IEBAIHZvaWQgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6cmVzZXRWYWx1ZXMK
ICAgICBtX2JsdWVEaWZmID0gMDsKIH0KIAotYm9vbCBTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojp1
cGRhdGVDdXJyZW50VmFsdWUoZG91YmxlIHRpbWVQZXJjZW50YWdlKQorYm9vbCBTVkdBbmltYXRl
Q29sb3JFbGVtZW50Ojp1cGRhdGVDdXJyZW50VmFsdWUodW5zaWduZWQgdmFsdWVJbmRleCwgZmxv
YXQgcGVyY2VudGFnZVBhc3QpCiB7CiAgICAgaW50IHIgPSAwLCBnID0gMCwgYiA9IDA7CiAgICAg
aWYgKChtX3JlZERpZmYgIT0gMCB8fCBtX2dyZWVuRGlmZiAhPSAwIHx8IG1fYmx1ZURpZmYgIT0g
MCkgJiYgIW1fdmFsdWVzKQpAQCAtODEsMTIgKzgxLDEwIEBAIGJvb2wgU1ZHQW5pbWF0ZUNvbG9y
RWxlbWVudDo6dXBkYXRlQ3VycmUKICAgICAgICAgaWYgKGl0ZW1CeVBlcmNlbnRhZ2UgPT0gLTEp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBpZiAobV9jdXJy
ZW50SXRlbSAhPSBpdGVtQnlQZXJjZW50YWdlKSB7IC8vIEl0ZW0gY2hhbmdlZC4uLgotICAgICAg
ICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgICAgICAKKyAgICAgICAgaWYgKG1f
Y3VycmVudEl0ZW0gIT0gaXRlbUJ5UGVyY2VudGFnZSkgeyAvLyBJdGVtIGNoYW5nZWQuLi4gICAg
ICAgICAgICAKICAgICAgICAgICAgIC8vIEV4dHJhY3QgY3VycmVudCAnZnJvbScgLyAndG8nIHZh
bHVlcwotICAgICAgICAgICAgU3RyaW5nIHZhbHVlMSA9IG1fdmFsdWVzLT5nZXRJdGVtKGl0ZW1C
eVBlcmNlbnRhZ2UsIGVjKTsKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZTIgPSBtX3ZhbHVlcy0+
Z2V0SXRlbShpdGVtQnlQZXJjZW50YWdlICsgMSwgZWMpOworICAgICAgICAgICAgU3RyaW5nIHZh
bHVlMSA9IG1fdmFsdWVzW2l0ZW1CeVBlcmNlbnRhZ2VdOworICAgICAgICAgICAgU3RyaW5nIHZh
bHVlMiA9IG1fdmFsdWVzW2l0ZW1CeVBlcmNlbnRhZ2UgKyAxXTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgLy8gQ2FsY3VsYXRlIHIvZy9iIHNoaWZ0aW5nIHZhbHVlcy4uLgogICAgICAgICAg
ICAgaWYgKCF2YWx1ZTEuaXNFbXB0eSgpICYmICF2YWx1ZTIuaXNFbXB0eSgpKSB7CkBAIC0yMDYs
MTEgKzIwNCwxMSBAQCBDb2xvciBTVkdBbmltYXRlQ29sb3JFbGVtZW50OjphZGRDb2xvcnNBCiAg
ICAgICAgICAgICAgICAgIGNsYW1wQ29sb3JWYWx1ZShmaXJzdC5ibHVlKCkgKyBzZWNvbmQuYmx1
ZSgpKSk7CiB9CiAKLXZvaWQgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Y2FsY3VsYXRlQ29sb3Io
ZG91YmxlIHRpbWUsIGludCAmciwgaW50ICZnLCBpbnQgJmIpIGNvbnN0Cit2b2lkIFNWR0FuaW1h
dGVDb2xvckVsZW1lbnQ6OmNhbGN1bGF0ZUNvbG9yKGRvdWJsZSB0aW1lUGVyY2VudGFnZSwgaW50
ICZyLCBpbnQgJmcsIGludCAmYikgY29uc3QKIHsKLSAgICByID0gbHJvdW5kKG1fcmVkRGlmZiAq
IHRpbWUpICsgbV9mcm9tQ29sb3ItPmNvbG9yKCkucmVkKCk7Ci0gICAgZyA9IGxyb3VuZChtX2dy
ZWVuRGlmZiAqIHRpbWUpICsgbV9mcm9tQ29sb3ItPmNvbG9yKCkuZ3JlZW4oKTsKLSAgICBiID0g
bHJvdW5kKG1fYmx1ZURpZmYgKiB0aW1lKSArIG1fZnJvbUNvbG9yLT5jb2xvcigpLmJsdWUoKTsK
KyAgICByID0gbHJvdW5kKG1fcmVkRGlmZiAqIHRpbWVQZXJjZW50YWdlKSArIG1fZnJvbUNvbG9y
LT5jb2xvcigpLnJlZCgpOworICAgIGcgPSBscm91bmQobV9ncmVlbkRpZmYgKiB0aW1lUGVyY2Vu
dGFnZSkgKyBtX2Zyb21Db2xvci0+Y29sb3IoKS5ncmVlbigpOworICAgIGIgPSBscm91bmQobV9i
bHVlRGlmZiAqIHRpbWVQZXJjZW50YWdlKSArIG1fZnJvbUNvbG9yLT5jb2xvcigpLmJsdWUoKTsK
IH0KIAogQ29sb3IgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Y29sb3IoKSBjb25zdApJbmRleDog
a3N2ZzIvc3ZnL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9z
dmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oCShyZXZpc2lvbiAxODk3NykKKysrIGtzdmcyL3N2
Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHN0b3JlSW5pdGlhbFZhbHVlKCk7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZXNldFZhbHVlcygpOwogICAgICAgICAKLSAgICAgICAg
dmlydHVhbCBib29sIHVwZGF0ZUN1cnJlbnRWYWx1ZShkb3VibGUgdGltZVBlcmNlbnRhZ2UpOwor
ICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQ3VycmVudFZhbHVlKHVuc2lnbmVkIHZhbHVlSW5k
ZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KTsKICAgICAgICAgdmlydHVhbCBib29sIGhhbmRsZVN0
YXJ0Q29uZGl0aW9uKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMYXN0VmFsdWVXaXRo
Q3VycmVudCgpOwogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaAkocmV2aXNpb24gMTg5NzcpCisr
KyBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOSAr
MzYsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0
dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhp
czsgfQogICAgICAgICAKLSAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUN1cnJlbnRWYWx1ZShk
b3VibGUgdGltZVBlcmNlbnRhZ2UpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwg
Ym9vbCB1cGRhdGVDdXJyZW50VmFsdWUodW5zaWduZWQgdmFsdWVJbmRleCwgZmxvYXQgcGVyY2Vu
dGFnZVBhc3QpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVT
dGFydENvbmRpdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBo
YW5kbGVFbmRDb25kaXRpb24oKSB7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIGludCBtX2N1
cnJlbnRJdGVtOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxODk4MSkKKysrIGtzdmcyL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgUGF0aCBTVkdBbmltYXRlTW90aW9uRWxlbWVu
dDo6YW5pbWF0aW9uUAogICAgIHJldHVybiBQYXRoKCk7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQ6OnVwZGF0ZUN1cnJlbnRWYWx1ZShkb3VibGUgdGltZVBlcmNlbnRhZ2UpCiti
b29sIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojp1cGRhdGVDdXJyZW50VmFsdWUodW5zaWduZWQg
dmFsdWVJbmRleCwgZmxvYXQgcGVyY2VudGFnZVBhc3QpCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9
CkluZGV4OiBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gMTg5ODEpCisr
KyBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJvdGVjdGVkOgogICAgICAg
ICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gdGhpczsgfQogICAgICAgICAKLSAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUN1cnJlbnRW
YWx1ZShkb3VibGUgdGltZVBlcmNlbnRhZ2UpOworICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRl
Q3VycmVudFZhbHVlKHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KTsK
ICAgICAgICAgdmlydHVhbCBib29sIGhhbmRsZVN0YXJ0Q29uZGl0aW9uKCk7CiAgICAgICAgIAog
ICAgIHByaXZhdGU6CkluZGV4OiBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5j
cHAJKHJldmlzaW9uIDE4OTc3KQorKysga3N2ZzIvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQgU1ZHQW5pbWF0
ZVRyYW5zZm9ybUVsZW1lbnQ6OnJlc2V0VmEKICAgICBtX2luaXRpYWxUcmFuc2Zvcm0gPSAwOwog
fQogCi1ib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojp1cGRhdGVDdXJyZW50VmFsdWUo
ZG91YmxlIHRpbWVQZXJjZW50YWdlKQorYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6
dXBkYXRlQ3VycmVudFZhbHVlKHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQ
YXN0KQogewogICAgIEFmZmluZVRyYW5zZm9ybSBxVG9NYXRyaXgsIHFGcm9tTWF0cml4OwogICAg
IGRvdWJsZSB1c2VUaW1lUGVyY2VudGFnZSA9IHRpbWVQZXJjZW50YWdlOwpAQCAtMTIwLDEyICsx
MjAsMTAgQEAgYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6dXBkYXRlQwogICAgICAg
ICBpZiAoaXRlbUJ5UGVyY2VudGFnZSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChtX2N1cnJlbnRJdGVtICE9IGl0ZW1CeVBlcmNlbnRhZ2Up
IHsgLy8gSXRlbSBjaGFuZ2VkLi4uCi0gICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICAgICAgICAgIAorICAgICAgICBpZiAobV9jdXJyZW50SXRlbSAhPSBpdGVtQnlQZXJjZW50
YWdlKSB7IC8vIEl0ZW0gY2hhbmdlZC4uLiAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gRXh0
cmFjdCBjdXJyZW50ICdmcm9tJyAvICd0bycgdmFsdWVzCi0gICAgICAgICAgICBTdHJpbmcgdmFs
dWUxID0gbV92YWx1ZXMtPmdldEl0ZW0oaXRlbUJ5UGVyY2VudGFnZSwgZWMpOwotICAgICAgICAg
ICAgU3RyaW5nIHZhbHVlMiA9IG1fdmFsdWVzLT5nZXRJdGVtKGl0ZW1CeVBlcmNlbnRhZ2UgKyAx
LCBlYyk7CisgICAgICAgICAgICBTdHJpbmcgdmFsdWUxID0gbV92YWx1ZXNbaXRlbUJ5UGVyY2Vu
dGFnZV07CisgICAgICAgICAgICBTdHJpbmcgdmFsdWUyID0gbV92YWx1ZXNbaXRlbUJ5UGVyY2Vu
dGFnZSArIDFdOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgbmV3IGZy
b20vdG8gdHJhbnNmb3JtIHZhbHVlcy4uLgogICAgICAgICAgICAgaWYgKCF2YWx1ZTEuaXNFbXB0
eSgpICYmICF2YWx1ZTIuaXNFbXB0eSgpKSB7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRy
YW5zZm9ybUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5z
Zm9ybUVsZW1lbnQuaAkocmV2aXNpb24gMTg5NzcpCisrKyBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRy
YW5zZm9ybUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc3RvcmVJbml0aWFsVmFsdWUoKTsKICAgICAgICAg
dmlydHVhbCB2b2lkIHJlc2V0VmFsdWVzKCk7CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFsIGJv
b2wgdXBkYXRlQ3VycmVudFZhbHVlKGRvdWJsZSB0aW1lUGVyY2VudGFnZSk7CisgICAgICAgIHZp
cnR1YWwgYm9vbCB1cGRhdGVDdXJyZW50VmFsdWUodW5zaWduZWQgdmFsdWVJbmRleCwgZmxvYXQg
cGVyY2VudGFnZVBhc3QpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlU3RhcnRDb25kaXRp
b24oKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxhc3RWYWx1ZVdpdGhDdXJyZW50KCk7
CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrc3ZnMi9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDE4OTgxKQorKysg
a3N2ZzIvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQs
NiArMTM0LDMwIEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6cGFyc2VLZXlOdW1iZXIKICAg
ICB9CiB9CiAKK3N0YXRpYyB2b2lkIHBhcnNlVmFsdWVzKFZlY3RvcjxTdHJpbmc+JiB2YWx1ZXMs
IGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgY29uc3QgVUNoYXIqIHB0ciA9IHZhbHVlLmNo
YXJhY3RlcnMoKTsKKyAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgdmFsdWUubGVuZ3RoKCk7
CisgICAgc2tpcE9wdGlvbmFsU3BhY2VzKHB0ciwgZW5kKTsKKyAgICB3aGlsZSAocHRyIDwgZW5k
KSB7CisgICAgICAgIC8vIFNNSUwgMy4yLjIgOiBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZSBz
cGFjZSwgYW5kIHdoaXRlIHNwYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgc2VtaWNvbG9uIHNlcGFyYXRv
cnMsIHdpbGwgYmUgaWdub3JlZC4KKyAgICAgICAgY29uc3QgVUNoYXIqIHZhbHVlU3RhcnQgPSBw
dHI7CisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSAnOycpIC8vIGNhcmVmdWwg
bm90IHRvIGlnbm9yZSB3aGl0ZXNwYWNlIGluc2lkZSB2YWx1ZXMKKyAgICAgICAgICAgIHB0cisr
OworICAgICAgICBpZiAocHRyID09IHZhbHVlU3RhcnQpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgCisgICAgICAgIC8vIHdhbGsgYmFja3dhcmRzIGZyb20gdGhlIDsgdG8gaWdub3JlIGFu
eSB3aGl0ZXNwYWNlCisgICAgICAgIGNvbnN0IFVDaGFyKiB2YWx1ZUVuZCA9IHB0cjsKKyAgICAg
ICAgd2hpbGUgKHZhbHVlU3RhcnQgPCB2YWx1ZUVuZCAmJiBpc1doaXRlc3BhY2UoKnZhbHVlRW5k
KSkKKyAgICAgICAgICAgIHZhbHVlRW5kLS07CisgICAgICAgIAorICAgICAgICB2YWx1ZXMuYXBw
ZW5kKFN0cmluZyh2YWx1ZVN0YXJ0LCB2YWx1ZUVuZCAtIHZhbHVlU3RhcnQpKTsKKyAgICAgICAg
CisgICAgICAgIHNraXBPcHRpb25hbFNwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCAnOycpOwor
ICAgIH0KK30KKwogc3RhdGljIHZvaWQgcGFyc2VLZXlTcGxpbmVzKFZlY3RvcjxTVkdBbmltYXRp
b25FbGVtZW50OjpLZXlTcGxpbmU+JiBrZXlTcGxpbmVzLCBjb25zdCBTdHJpbmcmIHZhbHVlKQog
ewogICAgIGRvdWJsZSBudW1iZXIgPSAwLmY7CkBAIC0yNzMsOCArMjk3LDggQEAgdm9pZCBTVkdB
bmltYXRpb25FbGVtZW50OjpwYXJzZU1hcHBlZEF0dAogICAgICAgICBlbHNlIGlmICh2YWx1ZSA9
PSAicGFjZWQiKQogICAgICAgICAgICAgbV9jYWxjTW9kZSA9IENBTENNT0RFX1BBQ0VEOwogICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp2YWx1ZXNBdHRyKSB7Ci0gICAg
ICAgIG1fdmFsdWVzID0gbmV3IFNWR1N0cmluZ0xpc3QoKTsKLSAgICAgICAgbV92YWx1ZXMtPnBh
cnNlKHZhbHVlLCAnOycpOworICAgICAgICBtX3ZhbHVlcy5jbGVhcigpOworICAgICAgICBwYXJz
ZVZhbHVlcyhtX3ZhbHVlcywgdmFsdWUpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjprZXlUaW1lc0F0dHIpIHsKICAgICAgICAgbV9rZXlUaW1lcy5jbGVhcigpOwog
ICAgICAgICBwYXJzZUtleU51bWJlcnMobV9rZXlUaW1lcywgdmFsdWUpOwpAQCAtNDg1LDcgKzUw
OSw5IEBAIGJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNBY2N1bXVsYXRlZCgKIAogRUFuaW1h
dGlvbk1vZGUgU1ZHQW5pbWF0aW9uRWxlbWVudDo6ZGV0ZWN0QW5pbWF0aW9uTW9kZSgpIGNvbnN0
CiB7Ci0gICAgaWYgKCghbV9mcm9tLmlzRW1wdHkoKSAmJiAhbV90by5pc0VtcHR5KCkpIHx8ICgh
bV90by5pc0VtcHR5KCkpKSB7IC8vIHRvL2Zyb20tdG8gYW5pbWF0aW9uCisgICAgaWYgKGhhc0F0
dHJpYnV0ZShTVkdOYW1lczo6dmFsdWVzQXR0cikpCisgICAgICAgIHJldHVybiBWQUxVRVNfQU5J
TUFUSU9OOworICAgIGVsc2UgaWYgKCghbV9mcm9tLmlzRW1wdHkoKSAmJiAhbV90by5pc0VtcHR5
KCkpIHx8ICghbV90by5pc0VtcHR5KCkpKSB7IC8vIHRvL2Zyb20tdG8gYW5pbWF0aW9uCiAgICAg
ICAgIGlmICghbV9mcm9tLmlzRW1wdHkoKSkgLy8gZnJvbS10byBhbmltYXRpb24KICAgICAgICAg
ICAgIHJldHVybiBGUk9NX1RPX0FOSU1BVElPTjsKICAgICAgICAgZWxzZQpAQCAtNDk3LDYwICs1
MjMsMTAgQEAgRUFuaW1hdGlvbk1vZGUgU1ZHQW5pbWF0aW9uRWxlbWVudDo6ZGV0ZQogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gQllfQU5JTUFUSU9OOwogICAgIH0KLSAgICBlbHNl
IGlmIChtX3ZhbHVlcykKLSAgICAgICAgcmV0dXJuIFZBTFVFU19BTklNQVRJT047CiAKICAgICBy
ZXR1cm4gTk9fQU5JTUFUSU9OOwogfQogCi1zdGF0aWMgaW5saW5lIFZlY3Rvcjxkb3VibGU+IHN0
YXJ0VGltZXNGb3JWYWx1ZXMoY29uc3QgU1ZHU3RyaW5nTGlzdCogdmFsdWVzKQotewotICAgIC8v
IENhbGN1bGF0ZSB0aGUgcmVsYXRpdmUgdGltZSBwZXJjZW50YWdlcyBmb3IgZWFjaCAnZmFkZScu
Ci0gICAgLy8gRXZlbnR1YWxseSB2YWx1ZSBzcGFjaW5nIHdpbGwgbmVlZCB0byB0YWtlIGtleVNw
bGluZXMgaW50byBhY2NvdW50Ci0gICAgdW5zaWduZWQgbG9uZyBpdGVtcyA9IHZhbHVlcy0+bnVt
YmVyT2ZJdGVtcygpOwotICAgIFZlY3Rvcjxkb3VibGU+IHN0YXJ0VGltZXMoaXRlbXMpOwotICAg
IHN0YXJ0VGltZXNbMF0gPSAwLjA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGl0ZW1z
OyArK2kpCi0gICAgICAgIHN0YXJ0VGltZXNbaV0gPSAoKCgyLjAgKiBpKSkgLyAoaXRlbXMgLSAx
KSkgLyAyLjA7Ci0gICAgcmV0dXJuIHN0YXJ0VGltZXM7Ci19Ci0KLWludCBTVkdBbmltYXRpb25F
bGVtZW50OjpjYWxjdWxhdGVDdXJyZW50VmFsdWVJdGVtKGRvdWJsZSB0aW1lUGVyY2VudGFnZSkK
LXsKLSAgICBpZiAoIW1fdmFsdWVzKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgCi0gICAgdW5z
aWduZWQgbG9uZyBpdGVtcyA9IG1fdmFsdWVzLT5udW1iZXJPZkl0ZW1zKCk7Ci0gICAgVmVjdG9y
PGRvdWJsZT4gc3RhcnRUaW1lcyA9IHN0YXJ0VGltZXNGb3JWYWx1ZXMobV92YWx1ZXMuZ2V0KCkp
OwotCi0gICAgaW50IGl0ZW1CeVBlcmNlbnRhZ2UgPSAtMTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaXRlbXMgLSAxOyArK2kpIHsKLSAgICAgICAgaWYgKHRpbWVQZXJjZW50YWdlID49
IHN0YXJ0VGltZXNbaV0gJiYgdGltZVBlcmNlbnRhZ2UgPD0gc3RhcnRUaW1lc1tpICsgMV0pIHsK
LSAgICAgICAgICAgIGl0ZW1CeVBlcmNlbnRhZ2UgPSBpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gaXRlbUJ5UGVyY2VudGFnZTsKLX0KLQotZG91
YmxlIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZVJlbGF0aXZlVGltZVBlcmNlbnRhZ2Uo
ZG91YmxlIHRpbWVQZXJjZW50YWdlLCBpbnQgY3VycmVudEl0ZW0pCi17Ci0gICAgaWYgKGN1cnJl
bnRJdGVtID09IC0xIHx8ICFtX3ZhbHVlcykKLSAgICAgICAgcmV0dXJuIDAuMDsKLQotICAgIFZl
Y3Rvcjxkb3VibGU+IHN0YXJ0VGltZXMgPSBzdGFydFRpbWVzRm9yVmFsdWVzKG1fdmFsdWVzLmdl
dCgpKTsKLQotICAgIGRvdWJsZSBiZWdpblRpbWVQZXJjZW50YWdlID0gc3RhcnRUaW1lc1tjdXJy
ZW50SXRlbV07Ci0gICAgZG91YmxlIGVuZFRpbWVQZXJjZW50YWdlID0gc3RhcnRUaW1lc1tjdXJy
ZW50SXRlbSArIDFdOwotCi0gICAgaWYgKChlbmRUaW1lUGVyY2VudGFnZSAtIGJlZ2luVGltZVBl
cmNlbnRhZ2UpID09IDAuMCkKLSAgICAgICAgcmV0dXJuIDAuMDsKLQotICAgIHJldHVybiAoKHRp
bWVQZXJjZW50YWdlIC0gYmVnaW5UaW1lUGVyY2VudGFnZSkgLwotICAgICAgICAgICAgKGVuZFRp
bWVQZXJjZW50YWdlIC0gYmVnaW5UaW1lUGVyY2VudGFnZSkpOwotfQotCiBkb3VibGUgU1ZHQW5p
bWF0aW9uRWxlbWVudDo6cmVwZWF0aW9ucygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcmVwZXRp
dGlvbnM7CkBAIC01OTMsNyArNTY5LDkzIEBAIHN0YXRpYyBkb3VibGUgY2FsY3VsYXRlVGltZVBl
cmNlbnRhZ2UoZG8KICAgICByZXR1cm4gcGVyY2VudGFnZTsKIH0KIAotdm9pZCBTVkdBbmltYXRp
b25FbGVtZW50OjpoYW5kbGVUaW1lckV2ZW50KGRvdWJsZSB0aW1lUGVyY2VudGFnZSkKK3N0YXRp
YyBpbmxpbmUgdm9pZCBhZGp1c3RQZXJjZW50YWdlUGFzdEZvcktleVNwbGluZXMoY29uc3QgVmVj
dG9yPFNWR0FuaW1hdGlvbkVsZW1lbnQ6OktleVNwbGluZT4mIGtleVNwbGluZXMsIHVuc2lnbmVk
IHZhbHVlSW5kZXgsIGZsb2F0JiBwZXJjZW50YWdlUGFzdCkKK3sKKyAgICBjb25zdCBTVkdBbmlt
YXRpb25FbGVtZW50OjpLZXlTcGxpbmUmIGtleVNwbGluZSA9IGtleVNwbGluZXNbdmFsdWVJbmRl
eF07CisgICAgUGF0aCBwYXRoOworICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoKSk7CisgICAg
cGF0aC5hZGRCZXppZXJDdXJ2ZVRvKGtleVNwbGluZS5jb250cm9sMSwga2V5U3BsaW5lLmNvbnRy
b2wyLCBGbG9hdFBvaW50KDEuMGYsIDEuMGYpKTsKKyAgICBmbG9hdCBwYXRoTGVuZ3RoID0gcGF0
aC5sZW5ndGgoKTsKKyAgICBwZXJjZW50YWdlUGFzdCA9IHBlcmNlbnRhZ2VQYXN0ICogcGF0aExl
bmd0aDsKK30KKwordm9pZCBTVkdBbmltYXRpb25FbGVtZW50Ojp2YWx1ZUluZGV4QW5kUGVyY2Vu
dGFnZVBhc3RGb3JEaXN0YW5jZShmbG9hdCBkaXN0YW5jZVBlcmNlbnRhZ2UsIHVuc2lnbmVkJiB2
YWx1ZUluZGV4LCBmbG9hdCYgcGVyY2VudGFnZVBhc3QpCit7CisgICAgLy8gVW5zcGVjaWZpZWQ6
IGFuaW1hdGlvbiBlbGVtZW50cyB3aGljaCBkbyBub3Qgc3VwcG9ydCBDQUxDTU9ERV9QQUNFRCwg
d2UganVzdCBhbHdheXMgc2hvdyB0aGUgZmlyc3QgdmFsdWUKKyAgICB2YWx1ZUluZGV4ID0gMDsK
KyAgICBwZXJjZW50YWdlUGFzdCA9IDA7Cit9CisKK2Zsb2F0IFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OmNhbGN1bGF0ZVRvdGFsRGlzdGFuY2UoKQoreworICAgIHJldHVybiAwOworfQorCitzdGF0aWMg
aW5saW5lIHZvaWQgY2FsY3VsYXRlVmFsdWVJbmRleEFuZFBlcmNlbnRhZ2VQYXN0Rm9yS2V5VGlt
ZXMoZmxvYXQgZWxhcHNlZFRpbWUsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtleVRpbWVzLCB1bnNp
Z25lZCYgdmFsdWVJbmRleCwgZmxvYXQmIHBlcmNlbnRhZ2VQYXN0KQoreworICAgIGJvb2wgZm91
bmRLZXlUaW1lID0gZmFsc2U7CisgICAgdW5zaWduZWQga2V5VGltZXNDb3VudE1pbnVzT25lID0g
a2V5VGltZXMuc2l6ZSgpOworICAgIGZvciAodmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCBr
ZXlUaW1lc0NvdW50TWludXNPbmU7IHZhbHVlSW5kZXgrKykgeworICAgICAgICBmbG9hdCBsYXN0
S2V5VGltZSA9IGtleVRpbWVzW3ZhbHVlSW5kZXhdOworICAgICAgICBpZiAobGFzdEtleVRpbWUg
Pj0gZWxhcHNlZFRpbWUpIHsKKyAgICAgICAgICAgIGZsb2F0IG5leHRLZXlUaW1lID0ga2V5VGlt
ZXNbdmFsdWVJbmRleCArIDFdOworICAgICAgICAgICAgZmxvYXQga2V5VGltZVNwYW4gPSBuZXh0
S2V5VGltZSAtIGxhc3RLZXlUaW1lOworICAgICAgICAgICAgZmxvYXQgdGltZVNpbmNlTGFzdEtl
eVRpbWUgPSBlbGFwc2VkVGltZSAtIGxhc3RLZXlUaW1lOworICAgICAgICAgICAgcGVyY2VudGFn
ZVBhc3QgPSAodGltZVNpbmNlTGFzdEtleVRpbWUgLyBrZXlUaW1lU3Bhbik7CisgICAgICAgICAg
ICBmb3VuZEtleVRpbWUgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIGlmICghZm91bmRL
ZXlUaW1lKSB7CisgICAgICAgIHZhbHVlSW5kZXggPSBrZXlUaW1lc0NvdW50TWludXNPbmU7Cisg
ICAgICAgIHBlcmNlbnRhZ2VQYXN0ID0gMDsKKyAgICB9Cit9CisKK2Jvb2wgU1ZHQW5pbWF0aW9u
RWxlbWVudDo6aXNWYWxpZEFuaW1hdGlvbigpIGNvbnN0Cit7CisgICAgRUFuaW1hdGlvbk1vZGUg
YW5pbWF0aW9uTW9kZSA9IGRldGVjdEFuaW1hdGlvbk1vZGUoKTsKKyAgICBpZiAoIWhhc1ZhbGlk
VGFyZ2V0KCkgfHwgIShhbmltYXRpb25Nb2RlID09IE5PX0FOSU1BVElPTikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoYW5pbWF0aW9uTW9kZSA9PSBWQUxVRVNfQU5JTUFUSU9OKSB7
CisgICAgICAgIGlmICghbV92YWx1ZXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAobV9rZXlUaW1lcy5zaXplKCkgJiYgbV92YWx1ZXMuc2l6ZSgpICE9IG1f
a2V5VGltZXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
bV9rZXlTcGxpbmVzLnNpemUoKSAmJiBtX3ZhbHVlcy5zaXplKCkgIT0gbV9rZXlTcGxpbmVzLnNp
emUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Y2FsY3VsYXRlVmFsdWVJbmRleEFuZFBl
cmNlbnRhZ2VQYXN0KGZsb2F0IGVsYXBzZWRUaW1lLCBmbG9hdCB0aW1lUGVyY2VudGFnZSwgdW5z
aWduZWQmIHZhbHVlSW5kZXgsIGZsb2F0JiBwZXJjZW50YWdlUGFzdCkKK3sKKyAgICBBU1NFUlQo
aXNWYWxpZEFuaW1hdGlvbigpKTsKKyAgICBFQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlID0g
ZGV0ZWN0QW5pbWF0aW9uTW9kZSgpOworICAgIAorICAgIGJvb2wgaXNWYWx1ZXNBbmltYXRpb24g
PSAoYW5pbWF0aW9uTW9kZSA9PSBWQUxVRVNfQU5JTUFUSU9OKTsKKyAgICBmbG9hdCB2YWx1ZUNv
dW50ID0gaXNWYWx1ZXNBbmltYXRpb24gPyBtX3ZhbHVlcy5zaXplKCkgOiAyOyAgCisgICAgZmxv
YXQgdmFsdWVQZXJjZW50YWdlID0gdmFsdWVDb3VudCAqIHRpbWVQZXJjZW50YWdlOworICAgIGlm
IChpc1ZhbHVlc0FuaW1hdGlvbikgeworICAgICAgICBjYWxjdWxhdGVWYWx1ZUluZGV4QW5kUGVy
Y2VudGFnZVBhc3RGb3JLZXlUaW1lcyhlbGFwc2VkVGltZSwgbV9rZXlUaW1lcywgdmFsdWVJbmRl
eCwgcGVyY2VudGFnZVBhc3QpOworICAgICAgICBpZiAobV9jYWxjTW9kZSA9PSBDQUxDTU9ERV9T
UExJTkUpCisgICAgICAgICAgICBhZGp1c3RQZXJjZW50YWdlUGFzdEZvcktleVNwbGluZXMobV9r
ZXlTcGxpbmVzLCB2YWx1ZUluZGV4LCBwZXJjZW50YWdlUGFzdCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gRGVmYXVsdCwgbGluZWFyIGJlaGF2aW9yCisgICAgICAgIGZsb2F0IGZsb2F0VmFs
dWVJbmRleCA9IGZsb29yZih2YWx1ZVBlcmNlbnRhZ2UpOworICAgICAgICBwZXJjZW50YWdlUGFz
dCA9ICB2YWx1ZVBlcmNlbnRhZ2UgLSAoZmxvYXRWYWx1ZUluZGV4IC8gdmFsdWVDb3VudCk7Cisg
ICAgfQorICAgIAorICAgIGlmIChtX2NhbGNNb2RlID09IENBTENNT0RFX0RJU0NSRVRFKQorICAg
ICAgICBwZXJjZW50YWdlUGFzdCA9IDAuMGY7CisgICAgZWxzZSBpZiAobV9jYWxjTW9kZSA9PSBD
QUxDTU9ERV9QQUNFRCkgeworICAgICAgICAvLyBjYWxjdWxhdGUgdmFsdWUgcGVyY2VudGFnZSBi
YXNlZCBvbiBkaXN0YW5jZSBpbnN0ZWFkIG9mIHRpbWUKKyAgICAgICAgZmxvYXQgdG90YWxEaXN0
YW5jZSA9IGNhbGN1bGF0ZVRvdGFsRGlzdGFuY2UoKTsKKyAgICAgICAgZmxvYXQgZGlzdGFuY2VQ
ZXJjZW50YWdlID0gdG90YWxEaXN0YW5jZSAqIHRpbWVQZXJjZW50YWdlOworICAgICAgICB2YWx1
ZUluZGV4QW5kUGVyY2VudGFnZVBhc3RGb3JEaXN0YW5jZShkaXN0YW5jZVBlcmNlbnRhZ2UsIHZh
bHVlSW5kZXgsIHBlcmNlbnRhZ2VQYXN0KTsKKyAgICB9Cit9CisKK3ZvaWQgU1ZHQW5pbWF0aW9u
RWxlbWVudDo6aGFuZGxlVGltZXJFdmVudChkb3VibGUgZWxhcHNlZFNlY29uZHMsIGRvdWJsZSB0
aW1lUGVyY2VudGFnZSkKIHsKICAgICBpZiAoIWNvbm5lY3RlZFRvVGltZXIoKSkgewogICAgICAg
ICBjb25uZWN0VGltZXIoKTsKQEAgLTYwMSw2ICs2NjMsMTAgQEAgdm9pZCBTVkdBbmltYXRpb25F
bGVtZW50OjpoYW5kbGVUaW1lckV2ZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAorICAg
IHVuc2lnbmVkIHZhbHVlSW5kZXggPSAwOworICAgIGZsb2F0IHBlcmNlbnRhZ2VQYXN0ID0gMDsK
KyAgICBjYWxjdWxhdGVWYWx1ZUluZGV4QW5kUGVyY2VudGFnZVBhc3QoZWxhcHNlZFNlY29uZHMs
IHRpbWVQZXJjZW50YWdlLCB2YWx1ZUluZGV4LCBwZXJjZW50YWdlUGFzdCk7CisgICAgCiAgICAg
aWYgKCF1cGRhdGVDdXJyZW50VmFsdWUodGltZVBlcmNlbnRhZ2UpKQogICAgICAgICByZXR1cm47
CiAgICAgCkBAIC02MTIsMjUgKzY3OCwyNyBAQCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6Omhh
bmRsZVRpbWVyRXZlCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGRpc2Nvbm5lY3RUaW1l
cigpOwotICAgICAgICByZXNldFZhbHVlcygpOyAgIAorICAgICAgICByZXNldFZhbHVlcygpOwog
ICAgIH0KIH0KIAogYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojp1cGRhdGVGb3JFbGFwc2VkU2Vj
b25kcyhkb3VibGUgZWxhcHNlZFNlY29uZHMpCiB7CisgICAgaWYgKCFpc1ZhbGlkQW5pbWF0aW9u
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKICAgICAvLyBWYWxpZGF0ZSBhbmltYXRp
b24gdGltaW5nIHNldHRpbmdzOgogICAgIC8vICMxIChkdXJhdGlvbiA+IDApIC0+IGZpbmUKICAg
ICAvLyAjMiAoZHVyYXRpb24gPD0gMC4wICYmIGVuZCA+IDApIC0+IGZpbmUKLSAgICAKICAgICBp
ZiAoKG1fc2ltcGxlRHVyYXRpb24gPD0gMC4wICYmIG1fZW5kIDw9IDAuMCkgfHwgKGlzSW5kZWZp
bml0ZShtX3NpbXBsZUR1cmF0aW9uKSAmJiBtX2VuZCA8PSAwLjApKQogICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIElnbm9yZSBkdXI9IjAiIG9yIGR1cj0iLW5lZyIKICAgICAKICAgICBmbG9hdCBw
ZXJjZW50YWdlID0gY2FsY3VsYXRlVGltZVBlcmNlbnRhZ2UoZWxhcHNlZFNlY29uZHMsIG1fYmVn
aW4sIG1fZW5kLCBtX3NpbXBsZUR1cmF0aW9uLCBtX3JlcGV0aXRpb25zKTsKICAgICAKICAgICBp
ZiAocGVyY2VudGFnZSA8PSAxLjAgfHwgY29ubmVjdGVkVG9UaW1lcigpKQotICAgICAgICBoYW5k
bGVUaW1lckV2ZW50KHBlcmNlbnRhZ2UpOworICAgICAgICBoYW5kbGVUaW1lckV2ZW50KGVsYXBz
ZWRTZWNvbmRzLCBwZXJjZW50YWdlKTsKICAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gdHJ1ZTsgLy8gdmFsdWUgd2FzIHVwZGF0ZWQsIG5lZWQgdG8gYXBwbHkKIH0KIAogfQpJbmRl
eDoga3N2ZzIvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9z
dmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCShyZXZpc2lvbiAxODk4MSkKKysrIGtzdmcyL3N2Zy9T
VkdBbmltYXRpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50KCkgY29u
c3Q7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRUYXJnZXQoKSBjb25z
dDsKKyAgICAgICAgYm9vbCBpc1ZhbGlkQW5pbWF0aW9uKCkgY29uc3Q7CiAgICAgICAgIAogICAg
ICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1Zh
bGlkKCk7IH0KIApAQCAtMTAwLDkgKzEwMSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VSZW5kZXJlcigpOwogCi0gICAgICAgIC8vIEhlbHBlcnMK
LSAgICAgICAgYm9vbCB1cGRhdGVGb3JFbGFwc2VkU2Vjb25kcyhkb3VibGUpOwotICAgICAgICB2
b2lkIGhhbmRsZVRpbWVyRXZlbnQoZG91YmxlIHRpbWVQZXJjZW50YWdlKTsKKyAgICAgICAgYm9v
bCB1cGRhdGVGb3JFbGFwc2VkU2Vjb25kcyhkb3VibGUgZWxhcHNlZFNlY29uZHMpOwogCiAgICAg
ICAgIHN0YXRpYyBkb3VibGUgcGFyc2VDbG9ja1ZhbHVlKGNvbnN0IFN0cmluZyYpOwogCkBAIC0x
MjEsOSArMTIwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIEVBbmltYXRpb25N
b2RlIGRldGVjdEFuaW1hdGlvbk1vZGUoKSBjb25zdDsKIAotICAgICAgICBpbnQgY2FsY3VsYXRl
Q3VycmVudFZhbHVlSXRlbShkb3VibGUgdGltZVBlcmNlbnRhZ2UpOwotICAgICAgICBkb3VibGUg
Y2FsY3VsYXRlUmVsYXRpdmVUaW1lUGVyY2VudGFnZShkb3VibGUgdGltZVBlcmNlbnRhZ2UsIGlu
dCBjdXJyZW50SXRlbSk7Ci0KICAgICAgICAgZG91YmxlIHJlcGVhdGlvbnMoKSBjb25zdDsKICAg
ICAgICAgc3RhdGljIGJvb2wgaXNJbmRlZmluaXRlKGRvdWJsZSB2YWx1ZSk7CiAKQEAgLTEzMiw4
ICsxMjgsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAKICAgICAgICAgdm9pZCBj
b25uZWN0VGltZXIoKTsKICAgICAgICAgdm9pZCBkaXNjb25uZWN0VGltZXIoKTsKKworICAgICAg
ICB2aXJ0dWFsIGZsb2F0IGNhbGN1bGF0ZVRvdGFsRGlzdGFuY2UoKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHZhbHVlSW5kZXhBbmRQZXJjZW50YWdlUGFzdEZvckRpc3RhbmNlKGZsb2F0IGRpc3Rh
bmNlUGVyY2VudGFnZSwgdW5zaWduZWQmIHZhbHVlSW5kZXgsIGZsb2F0JiBwZXJjZW50YWdlUGFz
dCk7CisgICAgICAgIAorICAgICAgICB2b2lkIGNhbGN1bGF0ZVZhbHVlSW5kZXhBbmRQZXJjZW50
YWdlUGFzdChmbG9hdCBlbGFwc2VkVGltZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVk
JiB2YWx1ZUluZGV4LCBmbG9hdCYgcGVyY2VudGFnZVBhc3QpOworICAgICAgICAKKyAgICAgICAg
dm9pZCBoYW5kbGVUaW1lckV2ZW50KGRvdWJsZSBlbGFwc2VkU2Vjb25kcywgZG91YmxlIHRpbWVQ
ZXJjZW50YWdlKTsKICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVDdXJyZW50
VmFsdWUoZG91YmxlIHRpbWVQZXJjZW50YWdlKSA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCB1
cGRhdGVDdXJyZW50VmFsdWUodW5zaWduZWQgdmFsdWVJbmRleCwgZmxvYXQgcGVyY2VudGFnZVBh
c3QpID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIGhhbmRsZVN0YXJ0Q29uZGl0aW9uKCkgPSAw
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGFzdFZhbHVlV2l0aEN1cnJlbnQoKSB7IH0g
Ly8gU2VlIGJ1ZyAxMjA3NSBmb3IgZXhwbGFpbmF0aW9uIG9mIHdoeSB0aGlzIGlzIGEgYmFkIEFQ
SQogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRWYWx1ZXMoKSB7IH0KQEAgLTE3MSw3ICsxNzQs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGRvdWJsZSBtX3JlcGV0aXRpb25zOwog
ICAgICAgICBkb3VibGUgbV9yZXBlYXRDb3VudDsKIAotICAgICAgICBSZWZQdHI8U1ZHU3RyaW5n
TGlzdD4gbV92YWx1ZXM7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1fdmFsdWVzOwogICAgICAg
ICBWZWN0b3I8ZmxvYXQ+IG1fa2V5VGltZXM7CiAgICAgICAgIAogICAgICAgICBzdHJ1Y3QgS2V5
U3BsaW5lIHsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdTZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrc3ZnMi9zdmcvU1ZHU2V0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE4OTc3KQorKysga3N2ZzIv
c3ZnL1NWR1NldEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMiArMzksMTQgQEAg
U1ZHU2V0RWxlbWVudDo6flNWR1NldEVsZW1lbnQoKQogewogfQogCi1ib29sIFNWR1NldEVsZW1l
bnQ6OnVwZGF0ZUN1cnJlbnRWYWx1ZShkb3VibGUgdGltZVBlcmNlbnRhZ2UpCitib29sIFNWR1Nl
dEVsZW1lbnQ6OnVwZGF0ZUN1cnJlbnRWYWx1ZSh1bnNpZ25lZCB2YWx1ZUluZGV4LCBmbG9hdCBw
ZXJjZW50YWdlUGFzdCkKIHsKICAgICBpZiAobV9zYXZlZFRvLmlzRW1wdHkoKSkgewogICAgICAg
ICBtX3NhdmVkVG8gPSB0YXJnZXRBdHRyaWJ1dGUoKTsKICAgICAgICAgc2V0VGFyZ2V0QXR0cmli
dXRlKG1fdG8pOwogICAgIH0KKyAgICBpZiAoIWlzRnJvemVuKCkpCisgICAgICAgIHNldFRhcmdl
dEF0dHJpYnV0ZShtX3NhdmVkVG8pOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNTMsMTMg
KzU1LDggQEAgYm9vbCBTVkdTZXRFbGVtZW50OjpoYW5kbGVTdGFydENvbmRpdGlvbgogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIFNWR1NldEVsZW1lbnQ6OmhhbmRsZUVuZENvbmRpdGlvbigp
Ci17Ci0gICAgZGlzY29ubmVjdFRpbWVyKCk7Ci0gICAgCi0gICAgaWYgKCFpc0Zyb3plbigpKQot
ICAgICAgICBzZXRUYXJnZXRBdHRyaWJ1dGUobV9zYXZlZFRvKTsKLSAgICAKK3ZvaWQgU1ZHU2V0
RWxlbWVudDo6cmVzZXRWYWx1ZXMoKQoreyAgICAKICAgICBtX3NhdmVkVG8gPSBTdHJpbmcoKTsK
IH0KIApJbmRleDoga3N2ZzIvc3ZnL1NWR1NldEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3Zn
Mi9zdmcvU1ZHU2V0RWxlbWVudC5oCShyZXZpc2lvbiAxODk3NykKKysrIGtzdmcyL3N2Zy9TVkdT
ZXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDkgKzM3LDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCog
Y29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CiAgICAgICAgIAotICAgICAg
ICB2aXJ0dWFsIGJvb2wgdXBkYXRlQ3VycmVudFZhbHVlKGRvdWJsZSB0aW1lUGVyY2VudGFnZSk7
CisgICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVDdXJyZW50VmFsdWUodW5zaWduZWQgdmFsdWVJ
bmRleCwgZmxvYXQgcGVyY2VudGFnZVBhc3QpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxl
U3RhcnRDb25kaXRpb24oKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUVuZENvbmRpdGlv
bigpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRWYWx1ZXMoKTsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIFN0cmluZyBtX3NhdmVkVG87Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12602</attachid>
            <date>2007-01-22 01:34:21 -0800</date>
            <delta_ts>2007-01-24 14:31:35 -0800</delta_ts>
            <desc>Another step closer (still not complete, doesn&apos;t compile)</desc>
            <filename>wham.patch</filename>
            <type>text/plain</type>
            <size>37535</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MDI0KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNzg1LDYg
KzE3ODUsOCBAQAogCQlBODMzQzgwQzBBMkNGMjU2MDBENTc2NjQgLyogWE1MTmFtZXMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgzM0M4MEEwQTJD
RjI1NjAwRDU3NjY0IC8qIFhNTE5hbWVzLmNwcCAqLzsgfTsKIAkJQTgzM0M4MEQwQTJDRjI1NjAw
RDU3NjY0IC8qIFhNTE5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBODMzQzgwQjBBMkNGMjU2MDBENTc2NjQgLyogWE1MTmFtZXMuaCAqLzsgfTsK
IAkJQTgzM0M4NTIwQTJDRjUyODAwRDU3NjY0IC8qIFNWR0VsZW1lbnRGYWN0b3J5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjU4MUU2MDlEMTUw
OEQwMDBFNjFENyAvKiBTVkdFbGVtZW50RmFjdG9yeS5jcHAgKi87IH07CisJCUE4NDk0MkQ5MEI2
NEE5Q0EwMDY5RjAwRiAvKiBDb2xvckRpc3RhbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODQ5NDJENzBCNjRBOUNBMDA2OUYwMEYgLyogQ29sb3JE
aXN0YW5jZS5oICovOyB9OworCQlBODQ5NDJEQTBCNjRBOUNBMDA2OUYwMEYgLyogQ29sb3JEaXN0
YW5jZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
ODQ5NDJEODBCNjRBOUNBMDA2OUYwMEYgLyogQ29sb3JEaXN0YW5jZS5jcHAgKi87IH07CiAJCUE4
NjYyOUNGMDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NjYyOUM5MDlEQTJCNDcwMDk2MzNBNSAvKiBK
U1VJRXZlbnQuaCAqLzsgfTsKIAkJQTg2NjI5RDAwOURBMkI0ODAwOTYzM0E1IC8qIEpTVUlFdmVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODY2
MjlDQTA5REEyQjQ3MDA5NjMzQTUgLyogSlNVSUV2ZW50LmNwcCAqLzsgfTsKIAkJQTg2NjI5RDEw
OURBMkI0ODAwOTYzM0E1IC8qIEpTTW91c2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg2NjI5Q0IwOURBMkI0NzAwOTYzM0E1IC8qIEpTTW91
c2VFdmVudC5oICovOyB9OwpAQCAtNDc5NCw2ICs0Nzk2LDggQEAKIAkJQTgzM0M3RjYwQTJDRjFE
ODAwRDU3NjY0IC8qIHhtbGF0dHJzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSB4bWxhdHRy
cy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgzM0M4MEEwQTJDRjI1NjAwRDU3
NjY0IC8qIFhNTE5hbWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBYTUxOYW1lcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MzNDODBCMEEy
Q0YyNTYwMEQ1NzY2NCAvKiBYTUxOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gWE1MTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTg0OTQyRDcw
QjY0QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlzdGFuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29sb3JEaXN0YW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBODQ5NDJEODBCNjRBOUNBMDA2OUYwMEYgLyogQ29sb3JEaXN0YW5jZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2xvckRpc3RhbmNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg1RDdBMkYwODc5RUJBOTAwNkE5MTcyIC8qIFF1YXJ0ekNv
cmUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBRdWFydHpDb3JlLmZyYW1ld29yazsgcGF0
aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1F1YXJ0ekNvcmUuZnJhbWV3b3JrOyBzb3Vy
Y2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQlBODY2MjlDOTA5REEyQjQ3MDA5NjMzQTUgLyog
SlNVSUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VJRXZlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg2NjI5Q0EwOURBMkI0NzAwOTYzM0E1
IC8qIEpTVUlFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNVSUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg1MjEsNiArODUy
NSw4IEBACiAJCQkJQThDMEY4RUMwODk3MDFGNDAwQkE1MTE0IC8qIFNWR1pvb21BbmRQYW4uaCAq
LywKIAkJCQlCMkNCNDE2NDBBQjc1OTA0MDA0RDlDNDUgLyogU1ZHWm9vbUFuZFBhbi5pZGwgKi8s
CiAJCQkJQUFDRjdDNEMwQjQyRUU2MDAwMDgwQkQ4IC8qIFNWR1BhcnNlclV0aWxpdGllcy5oICov
LAorCQkJCUE4NDk0MkQ3MEI2NEE5Q0EwMDY5RjAwRiAvKiBDb2xvckRpc3RhbmNlLmggKi8sCisJ
CQkJQTg0OTQyRDgwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlzdGFuY2UuY3BwICovLAogCQkJ
KTsKIAkJCXBhdGggPSBzdmc7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTEwMTUs
NiArMTEwMjEsNyBAQAogCQkJCUIyNDA1NTY2MEI1QkU2NDAwMDJBMjhDMCAvKiBET01TVkdFbGVt
ZW50SW5zdGFuY2VMaXN0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMkE2ODI0MEI1
QkVERTcwMDAyQTQ4MCAvKiBQcm9ncmVzc1RyYWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
MENFQkFDMEI2MEZDNDkwMDc2MzdDMSAvKiBTVkdNUGF0aEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCUE4NDk0MkQ5MEI2NEE5Q0EwMDY5RjAwRiAvKiBDb2xvckRpc3RhbmNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMUU2RUVBODBCNjI4REIzMDA1RjJGNzAgLyogSlNIVE1MU2VsZWN0RWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CkBAIC0xMjM1Niw2ICsxMjM2Myw3IEBACiAJCQkJQjJGMjczRjMwQjVC
RkFDODAwNjhDOTU2IC8qIFNWR0VsZW1lbnRJbnN0YW5jZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUEyQTY4MjMwQjVCRURFNzAwMDJBNDgwIC8qIFByb2dyZXNzVHJhY2tlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBODBDRUJBRDBCNjBGQzQ5MDA3NjM3QzEgLyogU1ZHTVBhdGhFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4NDk0MkRBMEI2NEE5Q0EwMDY5RjAwRiAvKiBD
b2xvckRpc3RhbmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRTZFRUE0MEI2MjhEQTgwMDVG
MkY3MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQTlC
NjY3MEI2MzQwQ0UwMDg0RkNEQiAvKiBKU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkyOTI2NDc3MEI2MUZDNzIwMEI0MUQzNCAvKiBKU0RvY3VtZW50Q3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDoga3N2ZzIvc3ZnL0NvbG9yRGlzdGFuY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9Db2xvckRpc3RhbmNlLmNwcAkocmV2aXNpb24gMCkK
KysrIGtzdmcyL3N2Zy9Db2xvckRpc3RhbmNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5
MSBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAKKyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QKKyAKKyBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyBCb3N0b24sIE1BIDAyMTExLTEz
MDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWZkZWYgU1ZHX1NVUFBPUlQK
KyNpbmNsdWRlICJDb2xvckRpc3RhbmNlLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitDb2xvckRpc3RhbmNlOjpDb2xvckRpc3RhbmNlKCkKKyAgICA6IG1f
cmVkRGlmZigwKQorICAgICwgbV9ibHVlRGlmZigwKQorICAgICwgbV9ncmVlbkRpZmYoMCkKK3sK
K30KKworQ29sb3JEaXN0YW5jZTo6Q29sb3JEaXN0YW5jZShjb25zdCBDb2xvciYgZnJvbUNvbG9y
LCBjb25zdCBDb2xvciYgdG9Db2xvcikKKyAgICA6IG1fcmVkRGlmZih0b0NvbG9yLnJlZCgpIC0g
ZnJvbUNvbG9yLnJlZCgpKQorICAgICwgbV9ibHVlRGlmZih0b0NvbG9yLmJsdWUoKSAtIGZyb21D
b2xvci5ibHVlKCkpCisgICAgLCBtX2dyZWVuRGlmZih0b0NvbG9yLmdyZWVuKCkgLSBmcm9tQ29s
b3IuZ3JlZW4oKSkKK3sKK30KKworQ29sb3JEaXN0YW5jZTo6Q29sb3JEaXN0YW5jZShpbnQgcmVk
RGlmZiwgaW50IGJsdWVEaWZmLCBpbnQgZ3JlZW5EaWZmKQorICAgIDogbV9yZWREaWZmKHJlZERp
ZmYpCisgICAgLCBtX2JsdWVEaWZmKGJsdWVEaWZmKQorICAgICwgbV9ncmVlbkRpZmYoZ3JlZW5E
aWZmKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBjbGFtcENvbG9yVmFsdWUoaW50IHYpCit7
CisgICAgaWYgKHYgPiAyNTUpCisgICAgICAgIHYgPSAyNTU7CisgICAgZWxzZSBpZiAodiA8IDAp
CisgICAgICAgIHYgPSAwOworICAgIHJldHVybiB2OworfQorCitDb2xvckRpc3RhbmNlIENvbG9y
RGlzdGFuY2U6OnNjYWxlZERpc3RhbmNlKGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAoreworICAg
IHJldHVybiBDb2xvckRpc3RhbmNlKHNjYWxlRmFjdG9yICogbV9yZWREaWZmLCBzY2FsZUZhY3Rv
ciAqIG1fYmx1ZURpZmYsIHNjYWxlRmFjdG9yICogbV9ncmVlbkRpZmYpOworfQorCitDb2xvciBD
b2xvckRpc3RhbmNlOjphZGRDb2xvcnNBbmRDbGFtcChjb25zdCBDb2xvciYgZmlyc3QsIGNvbnN0
IENvbG9yJiBzZWNvbmQpCit7CisgICAgcmV0dXJuIENvbG9yKGNsYW1wQ29sb3JWYWx1ZShmaXJz
dC5yZWQoKSArIHNlY29uZC5yZWQoKSksCisgICAgICAgICAgICAgICAgIGNsYW1wQ29sb3JWYWx1
ZShmaXJzdC5ncmVlbigpICsgc2Vjb25kLmdyZWVuKCkpLAorICAgICAgICAgICAgICAgICBjbGFt
cENvbG9yVmFsdWUoc2Vjb25kLmJsdWUoKSArIHNlY29uZC5ibHVlKCkpKTsKK30KKworQ29sb3Ig
Q29sb3JEaXN0YW5jZTo6YWRkVG9Db2xvckFuZENsYW1wKGNvbnN0IENvbG9yJiBjb2xvcikgY29u
c3QKK3sKKyAgICByZXR1cm4gQ29sb3IoY2xhbXBDb2xvclZhbHVlKGNvbG9yLnJlZCgpICsgbV9y
ZWREaWZmKSwKKyAgICAgICAgICAgICAgICAgY2xhbXBDb2xvclZhbHVlKGNvbG9yLmdyZWVuKCkg
KyBtX2JsdWVEaWZmKSwKKyAgICAgICAgICAgICAgICAgY2xhbXBDb2xvclZhbHVlKGNvbG9yLmJs
dWUoKSArIG1fZ3JlZW5EaWZmKSk7Cit9CisKK2Jvb2wgQ29sb3JEaXN0YW5jZTo6aXNaZXJvKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gKG1fcmVkRGlmZiA9PSAwICYmIG1fYmx1ZURpZmYgPT0gMCAm
JiBtX2dyZWVuRGlmZiA9PSAwKTsKK30KKworZmxvYXQgQ29sb3JEaXN0YW5jZTo6ZGlzdGFuY2Uo
KSBjb25zdAoreworICAgIC8vIFRoaXMgaXMganVzdCBhIHNpbXBsZSBkaXN0YW5jZSBjYWxjdWxh
dGlvbiwgbm90IHJlc3BlY3RpbmcgY29sb3Igc3BhY2VzCisgICAgcmV0dXJuIHNxcnRmKG1fcmVk
RGlmZiAqIG1fcmVkRGlmZiArIG1fYmx1ZURpZmYgKiBtX2JsdWVEaWZmICsgbV9ncmVlbkRpZmYg
KiBtX2dyZWVuRGlmZik7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBrc3ZnMi9zdmcvQ29sb3JE
aXN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9Db2xvckRpc3RhbmNlLmgJKHJldmlz
aW9uIDApCisrKyBrc3ZnMi9zdmcvQ29sb3JEaXN0YW5jZS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDUzIEBACisvKgorIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorIAorIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdAorIAor
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCisg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgQ29sb3JEaXN0YW5jZV9oCisjZGVmaW5lIENv
bG9yRGlzdGFuY2VfaAorI2lmZGVmIFNWR19TVVBQT1JUCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KyAgICAKKyAgICBjbGFzcyBDb2xvcjsKKworICAgIGNsYXNzIENvbG9yRGlzdGFuY2UgeworICAg
IHB1YmxpYzoKKyAgICAgICAgQ29sb3JEaXN0YW5jZSgpOworICAgICAgICBDb2xvckRpc3RhbmNl
KGNvbnN0IENvbG9yJiBmcm9tQ29sb3IsIGNvbnN0IENvbG9yJiB0b0NvbG9yKTsKKyAgICAgICAg
Q29sb3JEaXN0YW5jZShpbnQgcmVkRGlmZiwgaW50IGJsdWVEaWZmLCBpbnQgZ3JlZW5EaWZmKTsK
KyAgICAgICAgCisgICAgICAgIENvbG9yRGlzdGFuY2Ugc2NhbGVkRGlzdGFuY2UoZmxvYXQgc2Nh
bGVGYWN0b3IpIGNvbnN0OworICAgICAgICBDb2xvciBhZGRUb0NvbG9yQW5kQ2xhbXAoY29uc3Qg
Q29sb3ImKSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBDb2xvciBhZGRDb2xvcnNB
bmRDbGFtcChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CisgICAgICAgIAorICAgICAgICBi
b29sIGlzWmVybygpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgZmxvYXQgZGlzdGFuY2UoKSBj
b25zdDsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgaW50IG1fcmVkRGlmZjsKKyAg
ICAgICAgaW50IG1fYmx1ZURpZmY7CisgICAgICAgIGludCBtX2dyZWVuRGlmZjsKKyAgICB9Owor
fQorCisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKKyNlbmRpZiAvLyBDb2xvckRpc3RhbmNlX2gKSW5k
ZXg6IGtzdmcyL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
c3ZnMi9zdmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5MDI0KQorKysg
a3N2ZzIvc3ZnL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NywxMiArMzcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR0FuaW1hdGVDb2xvckVsZW1l
bnQ6OlNWR0FuaW1hdGVDb2xvckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQqIGRvYykKICAgICA6IFNWR0FuaW1hdGlvbkVsZW1lbnQodGFnTmFtZSwgZG9jKQot
ICAgICwgbV90b0NvbG9yKG5ldyBTVkdDb2xvcigpKQotICAgICwgbV9mcm9tQ29sb3IobmV3IFNW
R0NvbG9yKCkpCi0gICAgLCBtX2N1cnJlbnRJdGVtKC0xKQotICAgICwgbV9yZWREaWZmKDApCi0g
ICAgLCBtX2dyZWVuRGlmZigwKQotICAgICwgbV9ibHVlRGlmZigwKQogewogfQogCkBAIC01MCwx
NzcgKzQ0LDU3IEBAIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6On5TVkdBbmltYXRlQ29sb3IKIHsK
IH0KIAotdm9pZCBjYWxjdWxhdGVDb2xvckRpZmZlcmVuY2UoY29uc3QgQ29sb3ImIGZpcnN0LCBj
b25zdCBDb2xvciYgc2Vjb25kLCBpbnQmIHJlZERpZmYsIGludCYgZ3JlZW5EaWZmLCBpbnQmIGJs
dWVEaWZmKQordm9pZCBTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpzZXRCYXNlQ29sb3IoY29uc3Qg
Q29sb3ImIGJhc2VDb2xvcikKIHsKLSAgICByZWREaWZmID0gZmlyc3QucmVkKCkgLSBzZWNvbmQu
cmVkKCk7Ci0gICAgZ3JlZW5EaWZmID0gZmlyc3QuZ3JlZW4oKSAtIHNlY29uZC5ncmVlbigpOwot
ICAgIGJsdWVEaWZmID0gZmlyc3QuYmx1ZSgpIC0gc2Vjb25kLmJsdWUoKTsKKyAgICBtX2Jhc2VD
b2xvciA9IGJhc2VDb2xvcjsKKyAgICBtX2NvbG9yRGlzdGFuY2UgPSBDb2xvckRpc3RhbmNlKCk7
CiB9CiAKLXZvaWQgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6c3RvcmVJbml0aWFsVmFsdWUoKQor
Ym9vbCBTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojp1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRp
b25Nb2RlIGFuaW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRh
Z2VQYXN0KQogewotICAgIG1faW5pdGlhbENvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNv
bG9yU3RyaW5nKHRhcmdldEF0dHJpYnV0ZSgpKTsKLX0KLQotdm9pZCBTVkdBbmltYXRlQ29sb3JF
bGVtZW50OjpyZXNldFZhbHVlcygpCi17Ci0gICAgbV9jdXJyZW50SXRlbSA9IC0xOwotICAgIG1f
cmVkRGlmZiA9IDA7Ci0gICAgbV9ncmVlbkRpZmYgPSAwOwotICAgIG1fYmx1ZURpZmYgPSAwOwot
fQotCi1ib29sIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OnVwZGF0ZUN1cnJlbnRWYWx1ZShkb3Vi
bGUgdGltZVBlcmNlbnRhZ2UpCi17Ci0gICAgaW50IHIgPSAwLCBnID0gMCwgYiA9IDA7Ci0gICAg
aWYgKChtX3JlZERpZmYgIT0gMCB8fCBtX2dyZWVuRGlmZiAhPSAwIHx8IG1fYmx1ZURpZmYgIT0g
MCkgJiYgIW1fdmFsdWVzKQotICAgICAgICBjYWxjdWxhdGVDb2xvcih0aW1lUGVyY2VudGFnZSwg
ciwgZywgYik7Ci0gICAgZWxzZSBpZiAobV92YWx1ZXMpIHsKLSAgICAgICAgaW50IGl0ZW1CeVBl
cmNlbnRhZ2UgPSBjYWxjdWxhdGVDdXJyZW50VmFsdWVJdGVtKHRpbWVQZXJjZW50YWdlKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChpdGVtQnlQZXJjZW50YWdlID09IC0xKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgaWYgKG1fY3VycmVudEl0ZW0gIT0gaXRl
bUJ5UGVyY2VudGFnZSkgeyAvLyBJdGVtIGNoYW5nZWQuLi4KLSAgICAgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBFeHRyYWN0IGN1cnJl
bnQgJ2Zyb20nIC8gJ3RvJyB2YWx1ZXMKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZTEgPSBtX3Zh
bHVlcy0+Z2V0SXRlbShpdGVtQnlQZXJjZW50YWdlLCBlYyk7Ci0gICAgICAgICAgICBTdHJpbmcg
dmFsdWUyID0gbV92YWx1ZXMtPmdldEl0ZW0oaXRlbUJ5UGVyY2VudGFnZSArIDEsIGVjKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHIvZy9iIHNoaWZ0aW5nIHZhbHVl
cy4uLgotICAgICAgICAgICAgaWYgKCF2YWx1ZTEuaXNFbXB0eSgpICYmICF2YWx1ZTIuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBhcHBseSA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgIGlmIChtX3JlZERpZmYgIT0gMCB8fCBtX2dyZWVuRGlmZiAhPSAwIHx8IG1fYmx1ZURpZmYg
IT0gMCkgewotICAgICAgICAgICAgICAgICAgICByID0gbV90b0NvbG9yLT5jb2xvcigpLnJlZCgp
OwotICAgICAgICAgICAgICAgICAgICBnID0gbV90b0NvbG9yLT5jb2xvcigpLmdyZWVuKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGIgPSBtX3RvQ29sb3ItPmNvbG9yKCkuYmx1ZSgpOwotICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgYXBwbHkgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX3RvQ29sb3It
PnNldFJHQkNvbG9yKHZhbHVlMik7Ci0gICAgICAgICAgICAgICAgbV9mcm9tQ29sb3ItPnNldFJH
QkNvbG9yKHZhbHVlMSk7Ci0gICAgICAgICAgICAgICAgY2FsY3VsYXRlQ29sb3JEaWZmZXJlbmNl
KG1fdG9Db2xvci0+Y29sb3IoKSwgbV9mcm9tQ29sb3ItPmNvbG9yKCksIG1fcmVkRGlmZiwgbV9n
cmVlbkRpZmYsIG1fYmx1ZURpZmYpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IG1fY3VycmVudEl0ZW0gPSBpdGVtQnlQZXJjZW50YWdlOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGlmICghYXBwbHkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChtX3JlZERpZmYgIT0gMCB8fCBt
X2dyZWVuRGlmZiAhPSAwIHx8IG1fYmx1ZURpZmYgIT0gMCkgewotICAgICAgICAgICAgZG91Ymxl
IHJlbGF0aXZlVGltZSA9IGNhbGN1bGF0ZVJlbGF0aXZlVGltZVBlcmNlbnRhZ2UodGltZVBlcmNl
bnRhZ2UsIG1fY3VycmVudEl0ZW0pOwotICAgICAgICAgICAgY2FsY3VsYXRlQ29sb3IocmVsYXRp
dmVUaW1lLCByLCBnLCBiKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoIWlzRnJv
emVuKCkgJiYgdGltZVBlcmNlbnRhZ2UgPT0gMS4wKSB7Ci0gICAgICAgIHIgPSBtX2luaXRpYWxD
b2xvci5yZWQoKTsKLSAgICAgICAgZyA9IG1faW5pdGlhbENvbG9yLmdyZWVuKCk7Ci0gICAgICAg
IGIgPSBtX2luaXRpYWxDb2xvci5ibHVlKCk7Ci0gICAgfQotICAgIAotICAgIGlmIChpc0FjY3Vt
dWxhdGVkKCkgJiYgcmVwZWF0aW9ucygpICE9IDAuMCkgewotICAgICAgICByICs9IG1fbGFzdENv
bG9yLnJlZCgpOwotICAgICAgICBnICs9IG1fbGFzdENvbG9yLmdyZWVuKCk7Ci0gICAgICAgIGIg
Kz0gbV9sYXN0Q29sb3IuYmx1ZSgpOwotICAgIH0KLSAgICAKLSAgICBtX2N1cnJlbnRDb2xvciA9
IGNsYW1wQ29sb3IociwgZywgYik7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGFuaW1hdGlv
bk1vZGUgPT0gVE9fQU5JTUFUSU9OKQorICAgICAgICAvLyB0by1hbmltYXRpb25zIGhhdmUgYSBz
cGVjaWFsIGVxdWF0aW9uOiB2YWx1ZSA9ICh0byAtIGJhc2UpICogKHRpbWUvZHVyYXRpb24pICsg
YmFzZQorICAgICAgICBtX2FuaW1hdGVkQ29sb3IgPSBDb2xvckRpc3RhbmNlKG1fYmFzZUNvbG9y
LCBtX3RvQ29sb3IpLnNjYWxlZERpc3RhbmNlKHRpbWVQZXJjZW50YWdlKS5hZGRUb0NvbG9yQW5k
Q2xhbXAobV9iYXNlQ29sb3IpOworICAgIGVsc2UKKyAgICAgICAgbV9hbmltYXRlZENvbG9yID0g
bV9jb2xvckRpc3RhbmNlLnNjYWxlZERpc3RhbmNlKHBlcmNlbnRhZ2VQYXN0KS5hZGRUb0NvbG9y
QW5kQ2xhbXAobV9iYXNlQ29sb3IpOworICAgIHJldHVybiAobV9hbmltYXRlZENvbG9yICE9IG1f
YmFzZUNvbG9yKTsKIH0KIAotYm9vbCBTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpoYW5kbGVTdGFy
dENvbmRpdGlvbigpCi17Ci0gICAgc3RvcmVJbml0aWFsVmFsdWUoKTsKLSAgICAKLSAgICBzd2l0
Y2ggKGRldGVjdEFuaW1hdGlvbk1vZGUoKSkgewotICAgICAgICBjYXNlIFRPX0FOSU1BVElPTjoK
LSAgICAgICAgY2FzZSBGUk9NX1RPX0FOSU1BVElPTjoKLSAgICAgICAgewotICAgICAgICAgICAg
bV90b0NvbG9yLT5zZXRSR0JDb2xvcihtX3RvKTsKLSAgICAgICAgICAgIGlmICghbV9mcm9tLmlz
RW1wdHkoKSkgLy8gZnJvbS10byBhbmltYXRpb24KLSAgICAgICAgICAgICAgICBtX2Zyb21Db2xv
ci0+c2V0UkdCQ29sb3IobV9mcm9tKTsKLSAgICAgICAgICAgIGVsc2UgLy8gdG8gYW5pbWF0aW9u
Ci0gICAgICAgICAgICAgICAgbV9mcm9tQ29sb3ItPnNldFJHQkNvbG9yKG1faW5pdGlhbENvbG9y
Lm5hbWUoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNhbGN1bGF0ZUNvbG9yRGlmZmVy
ZW5jZShtX3RvQ29sb3ItPmNvbG9yKCksIG1fZnJvbUNvbG9yLT5jb2xvcigpLCBtX3JlZERpZmYs
IG1fZ3JlZW5EaWZmLCBtX2JsdWVEaWZmKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgQllfQU5JTUFUSU9OOgotICAgICAgICBjYXNlIEZST01fQllfQU5JTUFU
SU9OOgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1fZnJvbS5pc0VtcHR5KCkpIC8vIGZy
b20tYnkgYW5pbWF0aW9uCi0gICAgICAgICAgICAgICAgbV9mcm9tQ29sb3ItPnNldFJHQkNvbG9y
KG1fZnJvbSk7Ci0gICAgICAgICAgICBlbHNlIC8vIGJ5IGFuaW1hdGlvbgotICAgICAgICAgICAg
ICAgIG1fZnJvbUNvbG9yLT5zZXRSR0JDb2xvcihtX2luaXRpYWxDb2xvci5uYW1lKCkpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBtX3RvQ29sb3ItPnNldFJHQkNvbG9yKGFkZENvbG9yc0Fu
ZENsYW1wKG1fZnJvbUNvbG9yLT5jb2xvcigpLCBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JT
dHJpbmcobV9ieSkpLm5hbWUoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNhbGN1bGF0
ZUNvbG9yRGlmZmVyZW5jZShtX3RvQ29sb3ItPmNvbG9yKCksIG1fZnJvbUNvbG9yLT5jb2xvcigp
LCBtX3JlZERpZmYsIG1fZ3JlZW5EaWZmLCBtX2JsdWVEaWZmKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVkFMVUVTX0FOSU1BVElPTjoKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICB7Ci0gICAgICAgICAgICAvL2tkRXJy
b3IoKSA8PCBrX2Z1bmNpbmZvIDw8ICIgVW5hYmxlIHRvIGRldGVjdCBhbmltYXRpb24gbW9kZSEg
QWJvcnRpbmcgY3JlYXRpb24hIiA8PCBlbmRsOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Citib29sIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRU
b1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlLCB1bnNpZ25lZCB2YWx1ZUluZGV4
KQoreyAgICAKKyAgICBzd2l0Y2ggKGFuaW1hdGlvbk1vZGUpIHsKKyAgICBjYXNlIEZST01fVE9f
QU5JTUFUSU9OOgorICAgICAgICBtX2Zyb21Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JD
b2xvclN0cmluZyhtX2Zyb20pOworICAgICAgICAvLyBmYWxsIHRocm91Z2gKKyAgICBjYXNlIFRP
X0FOSU1BVElPTjoKKyAgICAgICAgbV90b0NvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNv
bG9yU3RyaW5nKG1fdG8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZST01fQllfQU5JTUFU
SU9OOgorICAgICAgICBtX2Zyb21Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0
cmluZyhtX2Zyb20pOworICAgICAgICBtX3RvQ29sb3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdC
Q29sb3JTdHJpbmcobV9ieSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQllfQU5JTUFUSU9O
OgorICAgICAgICBtX2Zyb21Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmlu
ZyhtX2Zyb20pOworICAgICAgICBtX3RvQ29sb3IgPSBDb2xvckRpc3RhbmNlOjphZGRDb2xvcnNB
bmRDbGFtcChtX2Zyb21Db2xvciwgU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1f
YnkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWQUxVRVNfQU5JTUFUSU9OOgorICAgICAg
ICBtX2Zyb21Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmluZyhtX3ZhbHVl
c1t2YWx1ZUluZGV4XSk7CisgICAgICAgIG1fdG9Db2xvciA9ICgodmFsdWVJbmRleCArIDEpIDwg
bV92YWx1ZXMuc2l6ZSgpKSA/IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmluZyhtX3Zh
bHVlc1t2YWx1ZUluZGV4ICsgMV0pIDogbV9mcm9tQ29sb3I7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgTk9fQU5JTUFUSU9OOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9
CiAgICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVu
dDo6dXBkYXRlTGFzdFZhbHVlV2l0aEN1cnJlbnQoKQotewotICAgIG1fbGFzdENvbG9yID0gbV9j
dXJyZW50Q29sb3I7CisgICAgbV9jb2xvckRpc3RhbmNlID0gQ29sb3JEaXN0YW5jZShtX2Zyb21D
b2xvciwgbV90b0NvbG9yKTsKKyAgICByZXR1cm4gIW1fY29sb3JEaXN0YW5jZS5pc1plcm8oKTsK
IH0KIAogdm9pZCBTVkdBbmltYXRlQ29sb3JFbGVtZW50OjphcHBseUFuaW1hdGlvblRvVmFsdWUo
Q29sb3ImIGN1cnJlbnRDb2xvcikKIHsKICAgICBpZiAoaXNBZGRpdGl2ZSgpKQotICAgICAgICBj
dXJyZW50Q29sb3IgPSBhZGRDb2xvcnNBbmRDbGFtcChjdXJyZW50Q29sb3IsIGNvbG9yKCkpOwor
ICAgICAgICBjdXJyZW50Q29sb3IgPSBDb2xvckRpc3RhbmNlOjphZGRDb2xvcnNBbmRDbGFtcChj
dXJyZW50Q29sb3IsIG1fYW5pbWF0ZWRDb2xvcik7CiAgICAgZWxzZQotICAgICAgICBjdXJyZW50
Q29sb3IgPSBjb2xvcigpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBjbGFtcENvbG9yVmFsdWUo
aW50IHYpCi17Ci0gICAgaWYgKHYgPiAyNTUpCi0gICAgICAgIHYgPSAyNTU7Ci0gICAgZWxzZSBp
ZiAodiA8IDApCi0gICAgICAgIHYgPSAwOwotICAgIHJldHVybiB2OwotfQotCi1Db2xvciBTVkdB
bmltYXRlQ29sb3JFbGVtZW50OjpjbGFtcENvbG9yKGludCByLCBpbnQgZywgaW50IGIpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIENvbG9yKGNsYW1wQ29sb3JWYWx1ZShyKSwgY2xhbXBDb2xvclZhbHVl
KGcpLCBjbGFtcENvbG9yVmFsdWUoYikpOwotfQotCi1Db2xvciBTVkdBbmltYXRlQ29sb3JFbGVt
ZW50OjphZGRDb2xvcnNBbmRDbGFtcChjb25zdCBDb2xvciYgZmlyc3QsIGNvbnN0IENvbG9yJiBz
ZWNvbmQpCi17Ci0gICAgcmV0dXJuIENvbG9yKGNsYW1wQ29sb3JWYWx1ZShmaXJzdC5yZWQoKSAr
IHNlY29uZC5yZWQoKSksCi0gICAgICAgICAgICAgICAgIGNsYW1wQ29sb3JWYWx1ZShmaXJzdC5n
cmVlbigpICsgc2Vjb25kLmdyZWVuKCkpLAotICAgICAgICAgICAgICAgICBjbGFtcENvbG9yVmFs
dWUoZmlyc3QuYmx1ZSgpICsgc2Vjb25kLmJsdWUoKSkpOwotfQotCi12b2lkIFNWR0FuaW1hdGVD
b2xvckVsZW1lbnQ6OmNhbGN1bGF0ZUNvbG9yKGRvdWJsZSB0aW1lLCBpbnQgJnIsIGludCAmZywg
aW50ICZiKSBjb25zdAotewotICAgIHIgPSBscm91bmQobV9yZWREaWZmICogdGltZSkgKyBtX2Zy
b21Db2xvci0+Y29sb3IoKS5yZWQoKTsKLSAgICBnID0gbHJvdW5kKG1fZ3JlZW5EaWZmICogdGlt
ZSkgKyBtX2Zyb21Db2xvci0+Y29sb3IoKS5ncmVlbigpOwotICAgIGIgPSBscm91bmQobV9ibHVl
RGlmZiAqIHRpbWUpICsgbV9mcm9tQ29sb3ItPmNvbG9yKCkuYmx1ZSgpOwotfQotCi1Db2xvciBT
VkdBbmltYXRlQ29sb3JFbGVtZW50Ojpjb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY3Vy
cmVudENvbG9yOwotfQotCi1Db2xvciBTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojppbml0aWFsQ29s
b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX2luaXRpYWxDb2xvcjsKKyAgICAgICAgY3VycmVu
dENvbG9yID0gbV9hbmltYXRlZENvbG9yOwogfQogCiB9CkluZGV4OiBrc3ZnMi9zdmcvU1ZHQW5p
bWF0ZUNvbG9yRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdBbmltYXRlQ29s
b3JFbGVtZW50LmgJKHJldmlzaW9uIDE5MDI0KQorKysga3N2ZzIvc3ZnL1NWR0FuaW1hdGVDb2xv
ckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmZGVmIFNWR19T
VVBQT1JUCiAKICNpbmNsdWRlICJTVkdBbmltYXRpb25FbGVtZW50LmgiCisjaW5jbHVkZSAiQ29s
b3JEaXN0YW5jZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtMzcsMzcgKzM4LDIzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU1ZH
QW5pbWF0ZUNvbG9yRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAg
ICAgICAgdmlydHVhbCB+U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudCgpOwogCisgICAgICAgIHZvaWQg
c2V0QmFzZUNvbG9yKGNvbnN0IENvbG9yJik7CiAgICAgICAgIHZvaWQgYXBwbHlBbmltYXRpb25U
b1ZhbHVlKENvbG9yJiBjdXJyZW50Q29sb3IpOwogCi0gICAgICAgIC8vIEhlbHBlcgotICAgICAg
ICBDb2xvciBhZGRDb2xvcnNBbmRDbGFtcChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7Ci0g
ICAgICAgIENvbG9yIGNsYW1wQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYikgY29uc3Q7IC8vIGRl
cHJlY2F0ZWQKLSAgICAgICAgdm9pZCBjYWxjdWxhdGVDb2xvcihkb3VibGUgdGltZSwgaW50ICZy
LCBpbnQgJmcsIGludCAmYikgY29uc3Q7Ci0KLSAgICAgICAgQ29sb3IgY29sb3IoKSBjb25zdDsK
LSAgICAgICAgQ29sb3IgaW5pdGlhbENvbG9yKCkgY29uc3Q7Ci0KICAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiB0aGlzOyB9Ci0gICAgICAgIHZvaWQgc3RvcmVJbml0aWFsVmFsdWUoKTsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHJlc2V0VmFsdWVzKCk7CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFs
IGJvb2wgdXBkYXRlQ3VycmVudFZhbHVlKGRvdWJsZSB0aW1lUGVyY2VudGFnZSk7Ci0gICAgICAg
IHZpcnR1YWwgYm9vbCBoYW5kbGVTdGFydENvbmRpdGlvbigpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlTGFzdFZhbHVlV2l0aEN1cnJlbnQoKTsKKyAgICAgICAgdmlydHVhbCBib29sIHVw
ZGF0ZUFuaW1hdGVkVmFsdWUoRUFuaW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZs
b2F0IHBlcmNlbnRhZ2VQYXN0KTsKKyAgICAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21B
bmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJbmRleCk7CiAKICAgICBw
cml2YXRlOgotICAgICAgICBDb2xvciBtX2xhc3RDb2xvcjsKLSAgICAgICAgQ29sb3IgbV9jdXJy
ZW50Q29sb3I7Ci0gICAgICAgIENvbG9yIG1faW5pdGlhbENvbG9yOwotCi0gICAgICAgIFJlZlB0
cjxTVkdDb2xvcj4gbV90b0NvbG9yOwotICAgICAgICBSZWZQdHI8U1ZHQ29sb3I+IG1fZnJvbUNv
bG9yOwotCi0gICAgICAgIGludCBtX2N1cnJlbnRJdGVtOwotICAgICAgICBpbnQgbV9yZWREaWZm
OwotICAgICAgICBpbnQgbV9ncmVlbkRpZmY7Ci0gICAgICAgIGludCBtX2JsdWVEaWZmOworICAg
ICAgICBDb2xvciBtX2Jhc2VDb2xvcjsKKyAgICAgICAgQ29sb3IgbV9hbmltYXRlZENvbG9yOwor
CisgICAgICAgIENvbG9yIG1fdG9Db2xvcjsKKyAgICAgICAgQ29sb3IgbV9mcm9tQ29sb3I7CisK
KyAgICAgICAgQ29sb3JEaXN0YW5jZSBtX2NvbG9yRGlzdGFuY2U7CiAgICAgfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgJKHJldmlzaW9uIDE5MDI0
KQorKysga3N2ZzIvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDkgKzM2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByb3RlY3RlZDoKICAgICAgICAg
dmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IHRoaXM7IH0KICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVDdXJyZW50VmFs
dWUoZG91YmxlIHRpbWVQZXJjZW50YWdlKSB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICB2aXJ0
dWFsIGJvb2wgaGFuZGxlU3RhcnRDb25kaXRpb24oKSB7IHJldHVybiBmYWxzZTsgfQotICAgICAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlRW5kQ29uZGl0aW9uKCkgeyB9CisgICAgICAgIHZpcnR1YWwg
Ym9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlLCB1bnNpZ25lZCB2YWx1ZUlu
ZGV4LCBmbG9hdCBwZXJjZW50YWdlUGFzdCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmly
dHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSwgdW5zaWdu
ZWQgdmFsdWVJbmRleCkgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAg
IGludCBtX2N1cnJlbnRJdGVtOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxOTAyNCkKKysrIGtzdmcyL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDEyICs4OCwxMiBAQCBQYXRoIFNWR0FuaW1hdGVN
b3Rpb25FbGVtZW50OjphbmltYXRpb25QCiAgICAgcmV0dXJuIFBhdGgoKTsKIH0KIAotYm9vbCBT
VkdBbmltYXRlTW90aW9uRWxlbWVudDo6dXBkYXRlQ3VycmVudFZhbHVlKGRvdWJsZSB0aW1lUGVy
Y2VudGFnZSkKK2Jvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVkVmFs
dWUoRUFuaW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQ
YXN0KQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50OjpoYW5kbGVTdGFydENvbmRpdGlvbigpCitib29sIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50
OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoRUFuaW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVl
SW5kZXgpCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBrc3ZnMi9zdmcvU1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQuaAkocmV2aXNpb24gMTkwMjQpCisrKyBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQq
IGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQogICAgICAgICAKLSAgICAg
ICAgdmlydHVhbCBib29sIHVwZGF0ZUN1cnJlbnRWYWx1ZShkb3VibGUgdGltZVBlcmNlbnRhZ2Up
OwotICAgICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlU3RhcnRDb25kaXRpb24oKTsKKyAgICAgICAg
dmlydHVhbCBib29sIHVwZGF0ZUFuaW1hdGVkVmFsdWUoRUFuaW1hdGlvbk1vZGUsIHVuc2lnbmVk
IHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KTsKKyAgICAgICAgdmlydHVhbCBib29s
IGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJ
bmRleCk7CiAgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIFBhdGggbV9wYXRoOwpJbmRl
eDoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxOTAy
NCkKKysrIGtzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50
OjpyZXNldFZhCiAgICAgbV9pbml0aWFsVHJhbnNmb3JtID0gMDsKIH0KIAotYm9vbCBTVkdBbmlt
YXRlVHJhbnNmb3JtRWxlbWVudDo6dXBkYXRlQ3VycmVudFZhbHVlKGRvdWJsZSB0aW1lUGVyY2Vu
dGFnZSkKK2Jvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnVwZGF0ZUN1cnJlbnRWYWx1
ZSh1bnNpZ25lZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJjZW50YWdlUGFzdCkKIHsKICAgICBBZmZp
bmVUcmFuc2Zvcm0gcVRvTWF0cml4LCBxRnJvbU1hdHJpeDsKICAgICBkb3VibGUgdXNlVGltZVBl
cmNlbnRhZ2UgPSB0aW1lUGVyY2VudGFnZTsKQEAgLTEyMCwxMiArMTIwLDEwIEBAIGJvb2wgU1ZH
QW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnVwZGF0ZUMKICAgICAgICAgaWYgKGl0ZW1CeVBlcmNl
bnRhZ2UgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAg
ICBpZiAobV9jdXJyZW50SXRlbSAhPSBpdGVtQnlQZXJjZW50YWdlKSB7IC8vIEl0ZW0gY2hhbmdl
ZC4uLgotICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgICAgICAKKyAg
ICAgICAgaWYgKG1fY3VycmVudEl0ZW0gIT0gaXRlbUJ5UGVyY2VudGFnZSkgeyAvLyBJdGVtIGNo
YW5nZWQuLi4gICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEV4dHJhY3QgY3VycmVudCAnZnJv
bScgLyAndG8nIHZhbHVlcwotICAgICAgICAgICAgU3RyaW5nIHZhbHVlMSA9IG1fdmFsdWVzLT5n
ZXRJdGVtKGl0ZW1CeVBlcmNlbnRhZ2UsIGVjKTsKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZTIg
PSBtX3ZhbHVlcy0+Z2V0SXRlbShpdGVtQnlQZXJjZW50YWdlICsgMSwgZWMpOworICAgICAgICAg
ICAgU3RyaW5nIHZhbHVlMSA9IG1fdmFsdWVzW2l0ZW1CeVBlcmNlbnRhZ2VdOworICAgICAgICAg
ICAgU3RyaW5nIHZhbHVlMiA9IG1fdmFsdWVzW2l0ZW1CeVBlcmNlbnRhZ2UgKyAxXTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBmcm9tL3RvIHRyYW5zZm9ybSB2
YWx1ZXMuLi4KICAgICAgICAgICAgIGlmICghdmFsdWUxLmlzRW1wdHkoKSAmJiAhdmFsdWUyLmlz
RW1wdHkoKSkgewpJbmRleDoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgJKHJl
dmlzaW9uIDE5MDI0KQorKysga3N2ZzIvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDEyICs1MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0
RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KLSAgICAgICAgdm9pZCBzdG9yZUluaXRp
YWxWYWx1ZSgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRWYWx1ZXMoKTsKICAgICAgICAg
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVDdXJyZW50VmFsdWUoZG91YmxlIHRpbWVQZXJj
ZW50YWdlKTsKLSAgICAgICAgdmlydHVhbCBib29sIGhhbmRsZVN0YXJ0Q29uZGl0aW9uKCk7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMYXN0VmFsdWVXaXRoQ3VycmVudCgpOworICAgICAg
ICB2aXJ0dWFsIGJvb2wgdXBkYXRlQW5pbWF0ZWRWYWx1ZShFQW5pbWF0aW9uTW9kZSwgdW5zaWdu
ZWQgdmFsdWVJbmRleCwgZmxvYXQgcGVyY2VudGFnZVBhc3QpOworICAgICAgICB2aXJ0dWFsIGJv
b2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVBbmltYXRpb25Nb2RlLCB1bnNpZ25lZCB2YWx1
ZUluZGV4KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGludCBtX2N1cnJlbnRJdGVtOwpJbmRl
eDoga3N2ZzIvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcy
L3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMTkwMjQpCisrKyBrc3ZnMi9z
dmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw2ICsxMzQs
MzAgQEAgdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpwYXJzZUtleU51bWJlcgogICAgIH0KIH0K
IAorc3RhdGljIHZvaWQgcGFyc2VWYWx1ZXMoVmVjdG9yPFN0cmluZz4mIHZhbHVlcywgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBjb25zdCBVQ2hhciogcHRyID0gdmFsdWUuY2hhcmFjdGVy
cygpOworICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgoKTsKKyAgICBz
a2lwT3B0aW9uYWxTcGFjZXMocHRyLCBlbmQpOworICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKKyAg
ICAgICAgLy8gU01JTCAzLjIuMiA6IExlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlIHNwYWNlLCBh
bmQgd2hpdGUgc3BhY2UgYmVmb3JlIGFuZCBhZnRlciBzZW1pY29sb24gc2VwYXJhdG9ycywgd2ls
bCBiZSBpZ25vcmVkLgorICAgICAgICBjb25zdCBVQ2hhciogdmFsdWVTdGFydCA9IHB0cjsKKyAg
ICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRyICE9ICc7JykgLy8gY2FyZWZ1bCBub3QgdG8g
aWdub3JlIHdoaXRlc3BhY2UgaW5zaWRlIHZhbHVlcworICAgICAgICAgICAgcHRyKys7CisgICAg
ICAgIGlmIChwdHIgPT0gdmFsdWVTdGFydCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAK
KyAgICAgICAgLy8gd2FsayBiYWNrd2FyZHMgZnJvbSB0aGUgOyB0byBpZ25vcmUgYW55IHdoaXRl
c3BhY2UKKyAgICAgICAgY29uc3QgVUNoYXIqIHZhbHVlRW5kID0gcHRyOworICAgICAgICB3aGls
ZSAodmFsdWVTdGFydCA8IHZhbHVlRW5kICYmIGlzV2hpdGVzcGFjZSgqdmFsdWVFbmQpKQorICAg
ICAgICAgICAgdmFsdWVFbmQtLTsKKyAgICAgICAgCisgICAgICAgIHZhbHVlcy5hcHBlbmQoU3Ry
aW5nKHZhbHVlU3RhcnQsIHZhbHVlRW5kIC0gdmFsdWVTdGFydCkpOworICAgICAgICAKKyAgICAg
ICAgc2tpcE9wdGlvbmFsU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQsICc7Jyk7CisgICAgfQor
fQorCiBzdGF0aWMgdm9pZCBwYXJzZUtleVNwbGluZXMoVmVjdG9yPFNWR0FuaW1hdGlvbkVsZW1l
bnQ6OktleVNwbGluZT4mIGtleVNwbGluZXMsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAg
ZG91YmxlIG51bWJlciA9IDAuZjsKQEAgLTI3Myw4ICsyOTcsOCBAQCB2b2lkIFNWR0FuaW1hdGlv
bkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0CiAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJwYWNl
ZCIpCiAgICAgICAgICAgICBtX2NhbGNNb2RlID0gQ0FMQ01PREVfUEFDRUQ7CiAgICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnZhbHVlc0F0dHIpIHsKLSAgICAgICAgbV92
YWx1ZXMgPSBuZXcgU1ZHU3RyaW5nTGlzdCgpOwotICAgICAgICBtX3ZhbHVlcy0+cGFyc2UodmFs
dWUsICc7Jyk7CisgICAgICAgIG1fdmFsdWVzLmNsZWFyKCk7CisgICAgICAgIHBhcnNlVmFsdWVz
KG1fdmFsdWVzLCB2YWx1ZSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmtleVRpbWVzQXR0cikgewogICAgICAgICBtX2tleVRpbWVzLmNsZWFyKCk7CiAgICAgICAg
IHBhcnNlS2V5TnVtYmVycyhtX2tleVRpbWVzLCB2YWx1ZSk7CkBAIC00ODUsNyArNTA5LDkgQEAg
Ym9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc0FjY3VtdWxhdGVkKAogCiBFQW5pbWF0aW9uTW9k
ZSBTVkdBbmltYXRpb25FbGVtZW50OjpkZXRlY3RBbmltYXRpb25Nb2RlKCkgY29uc3QKIHsKLSAg
ICBpZiAoKCFtX2Zyb20uaXNFbXB0eSgpICYmICFtX3RvLmlzRW1wdHkoKSkgfHwgKCFtX3RvLmlz
RW1wdHkoKSkpIHsgLy8gdG8vZnJvbS10byBhbmltYXRpb24KKyAgICBpZiAoaGFzQXR0cmlidXRl
KFNWR05hbWVzOjp2YWx1ZXNBdHRyKSkKKyAgICAgICAgcmV0dXJuIFZBTFVFU19BTklNQVRJT047
CisgICAgZWxzZSBpZiAoKCFtX2Zyb20uaXNFbXB0eSgpICYmICFtX3RvLmlzRW1wdHkoKSkgfHwg
KCFtX3RvLmlzRW1wdHkoKSkpIHsgLy8gdG8vZnJvbS10byBhbmltYXRpb24KICAgICAgICAgaWYg
KCFtX2Zyb20uaXNFbXB0eSgpKSAvLyBmcm9tLXRvIGFuaW1hdGlvbgogICAgICAgICAgICAgcmV0
dXJuIEZST01fVE9fQU5JTUFUSU9OOwogICAgICAgICBlbHNlCkBAIC00OTcsNjAgKzUyMywxMCBA
QCBFQW5pbWF0aW9uTW9kZSBTVkdBbmltYXRpb25FbGVtZW50OjpkZXRlCiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHJldHVybiBCWV9BTklNQVRJT047CiAgICAgfQotICAgIGVsc2UgaWYgKG1f
dmFsdWVzKQotICAgICAgICByZXR1cm4gVkFMVUVTX0FOSU1BVElPTjsKIAogICAgIHJldHVybiBO
T19BTklNQVRJT047CiB9CiAKLXN0YXRpYyBpbmxpbmUgVmVjdG9yPGRvdWJsZT4gc3RhcnRUaW1l
c0ZvclZhbHVlcyhjb25zdCBTVkdTdHJpbmdMaXN0KiB2YWx1ZXMpCi17Ci0gICAgLy8gQ2FsY3Vs
YXRlIHRoZSByZWxhdGl2ZSB0aW1lIHBlcmNlbnRhZ2VzIGZvciBlYWNoICdmYWRlJy4KLSAgICAv
LyBFdmVudHVhbGx5IHZhbHVlIHNwYWNpbmcgd2lsbCBuZWVkIHRvIHRha2Uga2V5U3BsaW5lcyBp
bnRvIGFjY291bnQKLSAgICB1bnNpZ25lZCBsb25nIGl0ZW1zID0gdmFsdWVzLT5udW1iZXJPZkl0
ZW1zKCk7Ci0gICAgVmVjdG9yPGRvdWJsZT4gc3RhcnRUaW1lcyhpdGVtcyk7Ci0gICAgc3RhcnRU
aW1lc1swXSA9IDAuMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgaXRlbXM7ICsraSkK
LSAgICAgICAgc3RhcnRUaW1lc1tpXSA9ICgoKDIuMCAqIGkpKSAvIChpdGVtcyAtIDEpKSAvIDIu
MDsKLSAgICByZXR1cm4gc3RhcnRUaW1lczsKLX0KLQotaW50IFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OmNhbGN1bGF0ZUN1cnJlbnRWYWx1ZUl0ZW0oZG91YmxlIHRpbWVQZXJjZW50YWdlKQotewotICAg
IGlmICghbV92YWx1ZXMpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICAKLSAgICB1bnNpZ25lZCBs
b25nIGl0ZW1zID0gbV92YWx1ZXMtPm51bWJlck9mSXRlbXMoKTsKLSAgICBWZWN0b3I8ZG91Ymxl
PiBzdGFydFRpbWVzID0gc3RhcnRUaW1lc0ZvclZhbHVlcyhtX3ZhbHVlcy5nZXQoKSk7Ci0KLSAg
ICBpbnQgaXRlbUJ5UGVyY2VudGFnZSA9IC0xOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBpdGVtcyAtIDE7ICsraSkgewotICAgICAgICBpZiAodGltZVBlcmNlbnRhZ2UgPj0gc3RhcnRU
aW1lc1tpXSAmJiB0aW1lUGVyY2VudGFnZSA8PSBzdGFydFRpbWVzW2kgKyAxXSkgewotICAgICAg
ICAgICAgaXRlbUJ5UGVyY2VudGFnZSA9IGk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiBpdGVtQnlQZXJjZW50YWdlOwotfQotCi1kb3VibGUgU1ZH
QW5pbWF0aW9uRWxlbWVudDo6Y2FsY3VsYXRlUmVsYXRpdmVUaW1lUGVyY2VudGFnZShkb3VibGUg
dGltZVBlcmNlbnRhZ2UsIGludCBjdXJyZW50SXRlbSkKLXsKLSAgICBpZiAoY3VycmVudEl0ZW0g
PT0gLTEgfHwgIW1fdmFsdWVzKQotICAgICAgICByZXR1cm4gMC4wOwotCi0gICAgVmVjdG9yPGRv
dWJsZT4gc3RhcnRUaW1lcyA9IHN0YXJ0VGltZXNGb3JWYWx1ZXMobV92YWx1ZXMuZ2V0KCkpOwot
Ci0gICAgZG91YmxlIGJlZ2luVGltZVBlcmNlbnRhZ2UgPSBzdGFydFRpbWVzW2N1cnJlbnRJdGVt
XTsKLSAgICBkb3VibGUgZW5kVGltZVBlcmNlbnRhZ2UgPSBzdGFydFRpbWVzW2N1cnJlbnRJdGVt
ICsgMV07Ci0KLSAgICBpZiAoKGVuZFRpbWVQZXJjZW50YWdlIC0gYmVnaW5UaW1lUGVyY2VudGFn
ZSkgPT0gMC4wKQotICAgICAgICByZXR1cm4gMC4wOwotCi0gICAgcmV0dXJuICgodGltZVBlcmNl
bnRhZ2UgLSBiZWdpblRpbWVQZXJjZW50YWdlKSAvCi0gICAgICAgICAgICAoZW5kVGltZVBlcmNl
bnRhZ2UgLSBiZWdpblRpbWVQZXJjZW50YWdlKSk7Ci19Ci0KIGRvdWJsZSBTVkdBbmltYXRpb25F
bGVtZW50OjpyZXBlYXRpb25zKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9yZXBldGl0aW9uczsK
QEAgLTU5MywxNSArNTY5LDExNCBAQCBzdGF0aWMgZG91YmxlIGNhbGN1bGF0ZVRpbWVQZXJjZW50
YWdlKGRvCiAgICAgcmV0dXJuIHBlcmNlbnRhZ2U7CiB9CiAKLXZvaWQgU1ZHQW5pbWF0aW9uRWxl
bWVudDo6aGFuZGxlVGltZXJFdmVudChkb3VibGUgdGltZVBlcmNlbnRhZ2UpCitzdGF0aWMgaW5s
aW5lIHZvaWQgYWRqdXN0UGVyY2VudGFnZVBhc3RGb3JLZXlTcGxpbmVzKGNvbnN0IFZlY3RvcjxT
VkdBbmltYXRpb25FbGVtZW50OjpLZXlTcGxpbmU+JiBrZXlTcGxpbmVzLCB1bnNpZ25lZCB2YWx1
ZUluZGV4LCBmbG9hdCYgcGVyY2VudGFnZVBhc3QpCit7CisgICAgY29uc3QgU1ZHQW5pbWF0aW9u
RWxlbWVudDo6S2V5U3BsaW5lJiBrZXlTcGxpbmUgPSBrZXlTcGxpbmVzW3ZhbHVlSW5kZXhdOwor
ICAgIFBhdGggcGF0aDsKKyAgICBwYXRoLm1vdmVUbyhGbG9hdFBvaW50KCkpOworICAgIHBhdGgu
YWRkQmV6aWVyQ3VydmVUbyhrZXlTcGxpbmUuY29udHJvbDEsIGtleVNwbGluZS5jb250cm9sMiwg
RmxvYXRQb2ludCgxLjBmLCAxLjBmKSk7CisgICAgYm9vbCBvayA9IGZhbHNlOworICAgIEZsb2F0
UG9pbnQgc3BsaW5lUG9pbnQgPSBwYXRoLnBvaW50QXRMZW5ndGgocGVyY2VudGFnZVBhc3QsIG9r
KTsKKyAgICBpZiAob2spCisgICAgICAgIHBlcmNlbnRhZ2VQYXN0ICo9IHNwbGluZVBvaW50Lnko
KTsKK30KKwordm9pZCBTVkdBbmltYXRpb25FbGVtZW50Ojp2YWx1ZUluZGV4QW5kUGVyY2VudGFn
ZVBhc3RGb3JEaXN0YW5jZShmbG9hdCBkaXN0YW5jZVBlcmNlbnRhZ2UsIHVuc2lnbmVkJiB2YWx1
ZUluZGV4LCBmbG9hdCYgcGVyY2VudGFnZVBhc3QpCit7CisgICAgLy8gVW5zcGVjaWZpZWQ6IGFu
aW1hdGlvbiBlbGVtZW50cyB3aGljaCBkbyBub3Qgc3VwcG9ydCBDQUxDTU9ERV9QQUNFRCwgd2Ug
anVzdCBhbHdheXMgc2hvdyB0aGUgZmlyc3QgdmFsdWUKKyAgICB2YWx1ZUluZGV4ID0gMDsKKyAg
ICBwZXJjZW50YWdlUGFzdCA9IDA7Cit9CisKK2Zsb2F0IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNh
bGN1bGF0ZVRvdGFsRGlzdGFuY2UoKQoreworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5s
aW5lIHZvaWQgY2FsY3VsYXRlVmFsdWVJbmRleEFuZFBlcmNlbnRhZ2VQYXN0Rm9yS2V5VGltZXMo
ZmxvYXQgZWxhcHNlZFRpbWUsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtleVRpbWVzLCB1bnNpZ25l
ZCYgdmFsdWVJbmRleCwgZmxvYXQmIHBlcmNlbnRhZ2VQYXN0KQoreworICAgIGJvb2wgZm91bmRL
ZXlUaW1lID0gZmFsc2U7CisgICAgdW5zaWduZWQga2V5VGltZXNDb3VudE1pbnVzT25lID0ga2V5
VGltZXMuc2l6ZSgpOworICAgIGZvciAodmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCBrZXlU
aW1lc0NvdW50TWludXNPbmU7IHZhbHVlSW5kZXgrKykgeworICAgICAgICBmbG9hdCBsYXN0S2V5
VGltZSA9IGtleVRpbWVzW3ZhbHVlSW5kZXhdOworICAgICAgICBpZiAobGFzdEtleVRpbWUgPj0g
ZWxhcHNlZFRpbWUpIHsKKyAgICAgICAgICAgIGZsb2F0IG5leHRLZXlUaW1lID0ga2V5VGltZXNb
dmFsdWVJbmRleCArIDFdOworICAgICAgICAgICAgZmxvYXQga2V5VGltZVNwYW4gPSBuZXh0S2V5
VGltZSAtIGxhc3RLZXlUaW1lOworICAgICAgICAgICAgZmxvYXQgdGltZVNpbmNlTGFzdEtleVRp
bWUgPSBlbGFwc2VkVGltZSAtIGxhc3RLZXlUaW1lOworICAgICAgICAgICAgcGVyY2VudGFnZVBh
c3QgPSAodGltZVNpbmNlTGFzdEtleVRpbWUgLyBrZXlUaW1lU3Bhbik7CisgICAgICAgICAgICBm
b3VuZEtleVRpbWUgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIGlmICghZm91bmRLZXlU
aW1lKSB7CisgICAgICAgIHZhbHVlSW5kZXggPSBrZXlUaW1lc0NvdW50TWludXNPbmU7CisgICAg
ICAgIHBlcmNlbnRhZ2VQYXN0ID0gMDsKKyAgICB9Cit9CisKK2Jvb2wgU1ZHQW5pbWF0aW9uRWxl
bWVudDo6aXNWYWxpZEFuaW1hdGlvbigpIGNvbnN0Cit7CisgICAgRUFuaW1hdGlvbk1vZGUgYW5p
bWF0aW9uTW9kZSA9IGRldGVjdEFuaW1hdGlvbk1vZGUoKTsKKyAgICBpZiAoIWhhc1ZhbGlkVGFy
Z2V0KCkgfHwgIShhbmltYXRpb25Nb2RlID09IE5PX0FOSU1BVElPTikpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoYW5pbWF0aW9uTW9kZSA9PSBWQUxVRVNfQU5JTUFUSU9OKSB7Cisg
ICAgICAgIGlmICghbV92YWx1ZXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAobV9rZXlUaW1lcy5zaXplKCkgJiYgbV92YWx1ZXMuc2l6ZSgpICE9IG1fa2V5
VGltZXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9r
ZXlTcGxpbmVzLnNpemUoKSAmJiBtX3ZhbHVlcy5zaXplKCkgIT0gbV9rZXlTcGxpbmVzLnNpemUo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Y2FsY3VsYXRlVmFsdWVJbmRleEFuZFBlcmNl
bnRhZ2VQYXN0KGZsb2F0IGVsYXBzZWRUaW1lLCBmbG9hdCB0aW1lUGVyY2VudGFnZSwgdW5zaWdu
ZWQmIHZhbHVlSW5kZXgsIGZsb2F0JiBwZXJjZW50YWdlUGFzdCkKK3sKKyAgICBBU1NFUlQoaXNW
YWxpZEFuaW1hdGlvbigpKTsKKyAgICBFQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlID0gZGV0
ZWN0QW5pbWF0aW9uTW9kZSgpOworICAgIAorICAgIGJvb2wgaXNWYWx1ZXNBbmltYXRpb24gPSAo
YW5pbWF0aW9uTW9kZSA9PSBWQUxVRVNfQU5JTUFUSU9OKTsKKyAgICBmbG9hdCB2YWx1ZUNvdW50
ID0gaXNWYWx1ZXNBbmltYXRpb24gPyBtX3ZhbHVlcy5zaXplKCkgOiAyOyAgCisgICAgZmxvYXQg
dmFsdWVQZXJjZW50YWdlID0gdmFsdWVDb3VudCAqIHRpbWVQZXJjZW50YWdlOworICAgIGlmIChp
c1ZhbHVlc0FuaW1hdGlvbikgeworICAgICAgICBjYWxjdWxhdGVWYWx1ZUluZGV4QW5kUGVyY2Vu
dGFnZVBhc3RGb3JLZXlUaW1lcyhlbGFwc2VkVGltZSwgbV9rZXlUaW1lcywgdmFsdWVJbmRleCwg
cGVyY2VudGFnZVBhc3QpOworICAgICAgICBpZiAobV9jYWxjTW9kZSA9PSBDQUxDTU9ERV9TUExJ
TkUpCisgICAgICAgICAgICBhZGp1c3RQZXJjZW50YWdlUGFzdEZvcktleVNwbGluZXMobV9rZXlT
cGxpbmVzLCB2YWx1ZUluZGV4LCBwZXJjZW50YWdlUGFzdCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gRGVmYXVsdCwgbGluZWFyIGJlaGF2aW9yCisgICAgICAgIGZsb2F0IGZsb2F0VmFsdWVJ
bmRleCA9IGZsb29yZih2YWx1ZVBlcmNlbnRhZ2UpOworICAgICAgICBwZXJjZW50YWdlUGFzdCA9
ICB2YWx1ZVBlcmNlbnRhZ2UgLSAoZmxvYXRWYWx1ZUluZGV4IC8gdmFsdWVDb3VudCk7CisgICAg
fQorICAgIAorICAgIGlmIChtX2NhbGNNb2RlID09IENBTENNT0RFX0RJU0NSRVRFKQorICAgICAg
ICBwZXJjZW50YWdlUGFzdCA9IDAuMGY7CisgICAgZWxzZSBpZiAobV9jYWxjTW9kZSA9PSBDQUxD
TU9ERV9QQUNFRCkgeworICAgICAgICAvLyBjYWxjdWxhdGUgdmFsdWUgcGVyY2VudGFnZSBiYXNl
ZCBvbiBkaXN0YW5jZSBpbnN0ZWFkIG9mIHRpbWUKKyAgICAgICAgZmxvYXQgdG90YWxEaXN0YW5j
ZSA9IGNhbGN1bGF0ZVRvdGFsRGlzdGFuY2UoKTsKKyAgICAgICAgZmxvYXQgZGlzdGFuY2VQZXJj
ZW50YWdlID0gdG90YWxEaXN0YW5jZSAqIHRpbWVQZXJjZW50YWdlOworICAgICAgICB2YWx1ZUlu
ZGV4QW5kUGVyY2VudGFnZVBhc3RGb3JEaXN0YW5jZShkaXN0YW5jZVBlcmNlbnRhZ2UsIHZhbHVl
SW5kZXgsIHBlcmNlbnRhZ2VQYXN0KTsKKyAgICB9Cit9CisKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxl
bWVudDo6aGFuZGxlVGltZXJFdmVudChkb3VibGUgZWxhcHNlZFNlY29uZHMsIGRvdWJsZSB0aW1l
UGVyY2VudGFnZSkKIHsKICAgICBpZiAoIWNvbm5lY3RlZFRvVGltZXIoKSkgewogICAgICAgICBj
b25uZWN0VGltZXIoKTsKLSAgICAgICAgaGFuZGxlU3RhcnRDb25kaXRpb24oKTsgLy8gTmVlZCB0
byBjaGVjayBib29sIHJldHVybiBpZiBhZGRpbmcgYW55dGhpbmcgYWZ0ZXIgdGhpcyBjYWxsCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKCF1cGRhdGVDdXJyZW50VmFsdWUo
dGltZVBlcmNlbnRhZ2UpKQorICAgIGlmIChpc0FjY3VtdWxhdGVkKCkgJiYgcmVwZWF0aW9ucygp
ICE9IDAuMCkKKyAgICAgICAgYWNjdW11bGF0ZUZvclJlcGV0aXRpb25zKHJlcGV0aXRpb25Db3Vu
dCk7CisgICAgCisgICAgRUFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSA9IGRldGVjdEFuaW1h
dGlvbk1vZGUoKTsKKyAgICAKKyAgICB1bnNpZ25lZCB2YWx1ZUluZGV4ID0gMDsKKyAgICBmbG9h
dCBwZXJjZW50YWdlUGFzdCA9IDA7CisgICAgaWYgKGFuaW1hdGlvbk1vZGUgIT0gVE9fQU5JTUFU
SU9OKQorICAgICAgICBjYWxjdWxhdGVWYWx1ZUluZGV4QW5kUGVyY2VudGFnZVBhc3QoZWxhcHNl
ZFNlY29uZHMsIHRpbWVQZXJjZW50YWdlLCB2YWx1ZUluZGV4LCBwZXJjZW50YWdlUGFzdCk7Cisg
ICAgICAgIAorICAgIGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyh2YWx1ZUluZGV4KTsKKyAgICAK
KyAgICBpZiAoIXVwZGF0ZUN1cnJlbnRWYWx1ZShwZXJjZW50YWdlUGFzdCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKICAgICBpZiAodGltZVBlcmNlbnRhZ2UgPT0gMS4wKSB7CkBAIC02MTIsMjUg
KzY4NywzNCBAQCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmhhbmRsZVRpbWVyRXZlCiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGRpc2Nvbm5lY3RUaW1lcigpOwotICAgICAgICByZXNl
dFZhbHVlcygpOyAgIAorICAgICAgICByZXNldFZhbHVlcygpOwogICAgIH0KIH0KIAogYm9vbCBT
VkdBbmltYXRpb25FbGVtZW50Ojp1cGRhdGVGb3JFbGFwc2VkU2Vjb25kcyhkb3VibGUgZWxhcHNl
ZFNlY29uZHMpCiB7CisgICAgaWYgKCFpc1ZhbGlkQW5pbWF0aW9uKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBpZiAoaXNTdG9wcGVkKCkpIHsKKyAgICAgICAgaWYgKG1fZmls
bCA9PSBGSUxMX0ZSRUVaRSkKKyAgICAgICAgICAgIGVsYXBzZWRTZWNvbmRzID0gbV9zdG9wcGVk
VGltZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAKICAgICAvLyBWYWxpZGF0ZSBhbmltYXRpb24gdGltaW5nIHNldHRpbmdzOgogICAgIC8vICMx
IChkdXJhdGlvbiA+IDApIC0+IGZpbmUKICAgICAvLyAjMiAoZHVyYXRpb24gPD0gMC4wICYmIGVu
ZCA+IDApIC0+IGZpbmUKLSAgICAKICAgICBpZiAoKG1fc2ltcGxlRHVyYXRpb24gPD0gMC4wICYm
IG1fZW5kIDw9IDAuMCkgfHwgKGlzSW5kZWZpbml0ZShtX3NpbXBsZUR1cmF0aW9uKSAmJiBtX2Vu
ZCA8PSAwLjApKQogICAgICAgICByZXR1cm4gZmFsc2U7IC8vIElnbm9yZSBkdXI9IjAiIG9yIGR1
cj0iLW5lZyIKICAgICAKICAgICBmbG9hdCBwZXJjZW50YWdlID0gY2FsY3VsYXRlVGltZVBlcmNl
bnRhZ2UoZWxhcHNlZFNlY29uZHMsIG1fYmVnaW4sIG1fZW5kLCBtX3NpbXBsZUR1cmF0aW9uLCBt
X3JlcGV0aXRpb25zKTsKICAgICAKICAgICBpZiAocGVyY2VudGFnZSA8PSAxLjAgfHwgY29ubmVj
dGVkVG9UaW1lcigpKQotICAgICAgICBoYW5kbGVUaW1lckV2ZW50KHBlcmNlbnRhZ2UpOworICAg
ICAgICBoYW5kbGVUaW1lckV2ZW50KGVsYXBzZWRTZWNvbmRzLCBwZXJjZW50YWdlKTsKICAgICAK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsgLy8gdmFsdWUgd2FzIHVwZGF0ZWQs
IG5lZWQgdG8gYXBwbHkKIH0KIAogfQpJbmRleDoga3N2ZzIvc3ZnL1NWR0FuaW1hdGlvbkVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCShyZXZp
c2lvbiAxOTAyNCkKKysrIGtzdmcyL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg3LDYgKzg3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTVkdF
bGVtZW50KiB0YXJnZXRFbGVtZW50KCkgY29uc3Q7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFs
IGJvb2wgaGFzVmFsaWRUYXJnZXQoKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc1ZhbGlkQW5pbWF0
aW9uKCkgY29uc3Q7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNv
bnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIApAQCAtMTAwLDkgKzEwMSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VSZW5kZXJl
cigpOwogCi0gICAgICAgIC8vIEhlbHBlcnMKLSAgICAgICAgYm9vbCB1cGRhdGVGb3JFbGFwc2Vk
U2Vjb25kcyhkb3VibGUpOwotICAgICAgICB2b2lkIGhhbmRsZVRpbWVyRXZlbnQoZG91YmxlIHRp
bWVQZXJjZW50YWdlKTsKKyAgICAgICAgYm9vbCB1cGRhdGVGb3JFbGFwc2VkU2Vjb25kcyhkb3Vi
bGUgZWxhcHNlZFNlY29uZHMpOwogCiAgICAgICAgIHN0YXRpYyBkb3VibGUgcGFyc2VDbG9ja1Zh
bHVlKGNvbnN0IFN0cmluZyYpOwogCkBAIC0xMjEsOSArMTIwLDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIEVBbmltYXRpb25Nb2RlIGRldGVjdEFuaW1hdGlvbk1vZGUoKSBjb25z
dDsKIAotICAgICAgICBpbnQgY2FsY3VsYXRlQ3VycmVudFZhbHVlSXRlbShkb3VibGUgdGltZVBl
cmNlbnRhZ2UpOwotICAgICAgICBkb3VibGUgY2FsY3VsYXRlUmVsYXRpdmVUaW1lUGVyY2VudGFn
ZShkb3VibGUgdGltZVBlcmNlbnRhZ2UsIGludCBjdXJyZW50SXRlbSk7Ci0KICAgICAgICAgZG91
YmxlIHJlcGVhdGlvbnMoKSBjb25zdDsKICAgICAgICAgc3RhdGljIGJvb2wgaXNJbmRlZmluaXRl
KGRvdWJsZSB2YWx1ZSk7CiAKQEAgLTEzMiwxMSArMTI4LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgY29ubmVjdFRpbWVyKCk7CiAgICAgICAgIHZvaWQg
ZGlzY29ubmVjdFRpbWVyKCk7CisKKyAgICAgICAgdmlydHVhbCBmbG9hdCBjYWxjdWxhdGVUb3Rh
bERpc3RhbmNlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUluZGV4QW5kUGVyY2VudGFn
ZVBhc3RGb3JEaXN0YW5jZShmbG9hdCBkaXN0YW5jZVBlcmNlbnRhZ2UsIHVuc2lnbmVkJiB2YWx1
ZUluZGV4LCBmbG9hdCYgcGVyY2VudGFnZVBhc3QpOworICAgICAgICAKKyAgICAgICAgdm9pZCBj
YWxjdWxhdGVWYWx1ZUluZGV4QW5kUGVyY2VudGFnZVBhc3QoZmxvYXQgZWxhcHNlZFRpbWUsIGZs
b2F0IHRpbWVQZXJjZW50YWdlLCB1bnNpZ25lZCYgdmFsdWVJbmRleCwgZmxvYXQmIHBlcmNlbnRh
Z2VQYXN0KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgaGFuZGxlVGltZXJFdmVudChkb3VibGUg
ZWxhcHNlZFNlY29uZHMsIGRvdWJsZSB0aW1lUGVyY2VudGFnZSk7CiAgICAgICAgIAotICAgICAg
ICB2aXJ0dWFsIGJvb2wgdXBkYXRlQ3VycmVudFZhbHVlKGRvdWJsZSB0aW1lUGVyY2VudGFnZSkg
PSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlU3RhcnRDb25kaXRpb24oKSA9IDA7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMYXN0VmFsdWVXaXRoQ3VycmVudCgpIHsgfSAvLyBT
ZWUgYnVnIDEyMDc1IGZvciBleHBsYWluYXRpb24gb2Ygd2h5IHRoaXMgaXMgYSBiYWQgQVBJCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCByZXNldFZhbHVlcygpIHsgfQorICAgICAgICB2aXJ0dWFsIGJv
b2wgdXBkYXRlQW5pbWF0ZWRWYWx1ZShFQW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJbmRl
eCwgZmxvYXQgcGVyY2VudGFnZVBhc3QpID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGNhbGN1
bGF0ZUZyb21BbmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJbmRleCkg
PSAwOwogICAgICAgICAKICAgICAgICAgc3RhdGljIHZvaWQgcGFyc2VLZXlOdW1iZXJzKFZlY3Rv
cjxmbG9hdD4mIGtleU51bWJlcnMsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgICAgICBzdGF0
aWMgdm9pZCBwYXJzZUJlZ2luT3JFbmRWYWx1ZShkb3VibGUmIG51bWJlciwgY29uc3QgU3RyaW5n
JiB2YWx1ZSk7CkBAIC0xNzEsNyArMTcyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBkb3VibGUgbV9yZXBldGl0aW9uczsKICAgICAgICAgZG91YmxlIG1fcmVwZWF0Q291bnQ7CiAK
LSAgICAgICAgUmVmUHRyPFNWR1N0cmluZ0xpc3Q+IG1fdmFsdWVzOworICAgICAgICBWZWN0b3I8
U3RyaW5nPiBtX3ZhbHVlczsKICAgICAgICAgVmVjdG9yPGZsb2F0PiBtX2tleVRpbWVzOwogICAg
ICAgICAKICAgICAgICAgc3RydWN0IEtleVNwbGluZSB7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHU2V0
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1NldEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxOTAyNCkKKysrIGtzdmcyL3N2Zy9TVkdTZXRFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzksMzAgKzM5LDYgQEAgU1ZHU2V0RWxlbWVudDo6flNWR1NldEVsZW1lbnQoKQog
ewogfQogCi1ib29sIFNWR1NldEVsZW1lbnQ6OnVwZGF0ZUN1cnJlbnRWYWx1ZShkb3VibGUgdGlt
ZVBlcmNlbnRhZ2UpCi17Ci0gICAgaWYgKG1fc2F2ZWRUby5pc0VtcHR5KCkpIHsKLSAgICAgICAg
bV9zYXZlZFRvID0gdGFyZ2V0QXR0cmlidXRlKCk7Ci0gICAgICAgIHNldFRhcmdldEF0dHJpYnV0
ZShtX3RvKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFNWR1NldEVsZW1l
bnQ6OmhhbmRsZVN0YXJ0Q29uZGl0aW9uKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBTVkdTZXRFbGVtZW50OjpoYW5kbGVFbmRDb25kaXRpb24oKQotewotICAgIGRpc2Nvbm5lY3RU
aW1lcigpOwotICAgIAotICAgIGlmICghaXNGcm96ZW4oKSkKLSAgICAgICAgc2V0VGFyZ2V0QXR0
cmlidXRlKG1fc2F2ZWRUbyk7Ci0gICAgCi0gICAgbV9zYXZlZFRvID0gU3RyaW5nKCk7Ci19Ci0K
IH0KIAogLy8gdmltOnRzPTQ6bm9ldApJbmRleDoga3N2ZzIvc3ZnL1NWR1NldEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHU2V0RWxlbWVudC5oCShyZXZpc2lvbiAxOTAyNCkK
KysrIGtzdmcyL3N2Zy9TVkdTZXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDkgKzM3
LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwg
Y29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9
CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQ3VycmVudFZhbHVlKGRvdWJs
ZSB0aW1lUGVyY2VudGFnZSk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVTdGFydENvbmRp
dGlvbigpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRW5kQ29uZGl0aW9uKCk7CisgICAg
ICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlLCB1bnNp
Z25lZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJjZW50YWdlUGFzdCkgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVBbmltYXRpb25N
b2RlLCB1bnNpZ25lZCB2YWx1ZUluZGV4KSB7IHJldHVybiB0cnVlOyB9CiAKICAgICBwcml2YXRl
OgogICAgICAgICBTdHJpbmcgbV9zYXZlZFRvOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12650</attachid>
            <date>2007-01-24 14:31:35 -0800</date>
            <delta_ts>2007-01-24 17:04:37 -0800</delta_ts>
            <desc>yet another step closer (doesn&apos;t compile, now with SVGTransformDistance)</desc>
            <filename>step.patch</filename>
            <type>text/plain</type>
            <size>62010</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MDgzKQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNzk1LDYg
KzE3OTUsMTAgQEAKIAkJQTgzM0M4MEMwQTJDRjI1NjAwRDU3NjY0IC8qIFhNTE5hbWVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MzNDODBBMEEy
Q0YyNTYwMEQ1NzY2NCAvKiBYTUxOYW1lcy5jcHAgKi87IH07CiAJCUE4MzNDODBEMEEyQ0YyNTYw
MEQ1NzY2NCAvKiBYTUxOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTgzM0M4MEIwQTJDRjI1NjAwRDU3NjY0IC8qIFhNTE5hbWVzLmggKi87IH07
CiAJCUE4MzNDODUyMEEyQ0Y1MjgwMEQ1NzY2NCAvKiBTVkdFbGVtZW50RmFjdG9yeS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTY1ODFFNjA5RDE1
MDhEMDAwRTYxRDcgLyogU1ZHRWxlbWVudEZhY3RvcnkuY3BwICovOyB9OworCQlBODQ5NDJEOTBC
NjRBOUNBMDA2OUYwMEYgLyogQ29sb3JEaXN0YW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg0OTQyRDcwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9y
RGlzdGFuY2UuaCAqLzsgfTsKKwkJQTg0OTQyREEwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlz
dGFuY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTg0OTQyRDgwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlzdGFuY2UuY3BwICovOyB9OworCQlB
ODQ5NDdBRDBCNjdGNEExMDA2OUYwMEYgLyogU1ZHVHJhbnNmb3JtRGlzdGFuY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NDk0N0FCMEI2N0Y0QTEw
MDY5RjAwRiAvKiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5oICovOyB9OworCQlBODQ5NDdBRTBCNjdG
NEExMDA2OUYwMEYgLyogU1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg0OTQ3QUMwQjY3RjRBMTAwNjlGMDBGIC8q
IFNWR1RyYW5zZm9ybURpc3RhbmNlLmNwcCAqLzsgfTsKIAkJQTg2NjI5Q0YwOURBMkI0NzAwOTYz
M0E1IC8qIEpTVUlFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTg2NjI5QzkwOURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5oICovOyB9Owog
CQlBODY2MjlEMDA5REEyQjQ4MDA5NjMzQTUgLyogSlNVSUV2ZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NjYyOUNBMDlEQTJCNDcwMDk2MzNB
NSAvKiBKU1VJRXZlbnQuY3BwICovOyB9OwogCQlBODY2MjlEMTA5REEyQjQ4MDA5NjMzQTUgLyog
SlNNb3VzZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBODY2MjlDQjA5REEyQjQ3MDA5NjMzQTUgLyogSlNNb3VzZUV2ZW50LmggKi87IH07CkBA
IC00ODE0LDYgKzQ4MTgsMTAgQEAKIAkJQTgzM0M3RjYwQTJDRjFEODAwRDU3NjY0IC8qIHhtbGF0
dHJzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSB4bWxhdHRycy5pbjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTgzM0M4MEEwQTJDRjI1NjAwRDU3NjY0IC8qIFhNTE5hbWVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxOYW1lcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MzNDODBCMEEyQ0YyNTYwMEQ1NzY2NCAvKiBY
TUxOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1MTmFtZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTg0OTQyRDcwQjY0QTlDQTAwNjlGMDBGIC8q
IENvbG9yRGlzdGFuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29sb3JE
aXN0YW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBODQ5NDJEODBCNjRBOUNB
MDA2OUYwMEYgLyogQ29sb3JEaXN0YW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDb2xvckRpc3RhbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTg0OTQ3QUIwQjY3RjRBMTAwNjlGMDBGIC8qIFNWR1RyYW5zZm9ybURpc3RhbmNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1RyYW5zZm9ybURpc3RhbmNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4NDk0N0FDMEI2N0Y0QTEwMDY5RjAwRiAvKiBT
VkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE4NUQ3QTJGMDg3OUVCQTkwMDZBOTE3MiAvKiBRdWFydHpDb3JlLmZyYW1ld29yayAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJh
bWV3b3JrOyBuYW1lID0gUXVhcnR6Q29yZS5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9RdWFydHpDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1
dGU+IjsgfTsKIAkJQTg2NjI5QzkwOURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVSUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE4NjYyOUNBMDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVUlFdmVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MTgwLDYgKzgxODgsOCBAQAogCQlBOEMwRjdG
QzA4OTcwMUYzMDBCQTUxMTQgLyogc3ZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQlBODQ5NDJEODBCNjRBOUNBMDA2OUYwMEYgLyogQ29sb3JEaXN0YW5j
ZS5jcHAgKi8sCisJCQkJQTg0OTQyRDcwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlzdGFuY2Uu
aCAqLywKIAkJCQlCMkRERjA2NjBCNDgyQTAzMDA2NEE0QjEgLyogR3JhZGllbnRBdHRyaWJ1dGVz
LmggKi8sCiAJCQkJQjI1QUU1NUQwQjQ5RDY2MzAwNzRDNzI2IC8qIExpbmVhckdyYWRpZW50QXR0
cmlidXRlcy5oICovLAogCQkJCUIyRERGMDY0MEI0ODI5RkEwMDY0QTRCMSAvKiBQYXR0ZXJuQXR0
cmlidXRlcy5oICovLApAQCAtODUyMyw2ICs4NTMzLDggQEAKIAkJCQlBOEMwRjhERDA4OTcwMUY0
MDBCQTUxMTQgLyogU1ZHVHJhbnNmb3JtYWJsZS5jcHAgKi8sCiAJCQkJQThDMEY4REUwODk3MDFG
NDAwQkE1MTE0IC8qIFNWR1RyYW5zZm9ybWFibGUuaCAqLywKIAkJCQlCMkNCNDE1QjBBQjc1OTA0
MDA0RDlDNDUgLyogU1ZHVHJhbnNmb3JtYWJsZS5pZGwgKi8sCisJCQkJQTg0OTQ3QUMwQjY3RjRB
MTAwNjlGMDBGIC8qIFNWR1RyYW5zZm9ybURpc3RhbmNlLmNwcCAqLywKKwkJCQlBODQ5NDdBQjBC
NjdGNEExMDA2OUYwMEYgLyogU1ZHVHJhbnNmb3JtRGlzdGFuY2UuaCAqLywKIAkJCQlBOEMwRjhF
MTA4OTcwMUY0MDBCQTUxMTQgLyogU1ZHVHJhbnNmb3JtTGlzdC5jcHAgKi8sCiAJCQkJQThDMEY4
RTIwODk3MDFGNDAwQkE1MTE0IC8qIFNWR1RyYW5zZm9ybUxpc3QuaCAqLywKIAkJCQlCMkNCNDE1
QzBBQjc1OTA0MDA0RDlDNDUgLyogU1ZHVHJhbnNmb3JtTGlzdC5pZGwgKi8sCkBAIC0xMTA1MCw3
ICsxMTA2Miw5IEBACiAJCQkJQjI0MDU1NjYwQjVCRTY0MDAwMkEyOEMwIC8qIERPTVNWR0VsZW1l
bnRJbnN0YW5jZUxpc3RJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyQTY4MjQwQjVC
RURFNzAwMDJBNDgwIC8qIFByb2dyZXNzVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgw
Q0VCQUMwQjYwRkM0OTAwNzYzN0MxIC8qIFNWR01QYXRoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTg0OTQyRDkwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlzdGFuY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUxRTZFRUE4MEI2MjhEQjMwMDVGMkY3MCAvKiBKU0hUTUxTZWxlY3RFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlBODQ5NDdBRDBCNjdGNEExMDA2OUYwMEYgLyogU1ZH
VHJhbnNmb3JtRGlzdGFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTIzOTYsOSArMTI0MTAsMTEg
QEAKIAkJCQlBNzg0OTQxQjBCNUZFNTA3MDAxRTIzN0EgLyogQ2xpcGJvYXJkLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzNEZFOUU1MEI1Q0E1MzkwMDNFNEE3MyAvKiBGaWxlQ2hvb3Nlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBODBDRUJBRDBCNjBGQzQ5MDA3NjM3QzEgLyogU1ZHTVBhdGhF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4NDk0MkRBMEI2NEE5Q0EwMDY5RjAwRiAv
KiBDb2xvckRpc3RhbmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRTZFRUE0MEI2MjhEQTgw
MDVGMkY3MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTky
OTI2NDc3MEI2MUZDNzIwMEI0MUQzNCAvKiBKU0RvY3VtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDMTdGOTY2MEI2NEVCQjgwMDRBNjVDQiAvKiBKU0hUTUxTZWxlY3RFbGVtZW50
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4NDk0N0FFMEI2N0Y0QTEwMDY5RjAwRiAv
KiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IGtzdmcyL3N2
Zy9Db2xvckRpc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvQ29sb3JEaXN0YW5j
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBrc3ZnMi9zdmcvQ29sb3JEaXN0YW5jZS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgCisgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBwcm9qZWN0CisgCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIAorIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisg
Qm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2lmZGVmIFNWR19TVVBQT1JUCisjaW5jbHVkZSAiQ29sb3JEaXN0YW5jZS5oIgorI2luY2x1ZGUg
IkNvbG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ29sb3JEaXN0YW5jZTo6Q29sb3JE
aXN0YW5jZSgpCisgICAgOiBtX3JlZERpZmYoMCkKKyAgICAsIG1fYmx1ZURpZmYoMCkKKyAgICAs
IG1fZ3JlZW5EaWZmKDApCit7Cit9CisKK0NvbG9yRGlzdGFuY2U6OkNvbG9yRGlzdGFuY2UoY29u
c3QgQ29sb3ImIGZyb21Db2xvciwgY29uc3QgQ29sb3ImIHRvQ29sb3IpCisgICAgOiBtX3JlZERp
ZmYodG9Db2xvci5yZWQoKSAtIGZyb21Db2xvci5yZWQoKSkKKyAgICAsIG1fYmx1ZURpZmYodG9D
b2xvci5ibHVlKCkgLSBmcm9tQ29sb3IuYmx1ZSgpKQorICAgICwgbV9ncmVlbkRpZmYodG9Db2xv
ci5ncmVlbigpIC0gZnJvbUNvbG9yLmdyZWVuKCkpCit7Cit9CisKK0NvbG9yRGlzdGFuY2U6OkNv
bG9yRGlzdGFuY2UoaW50IHJlZERpZmYsIGludCBibHVlRGlmZiwgaW50IGdyZWVuRGlmZikKKyAg
ICA6IG1fcmVkRGlmZihyZWREaWZmKQorICAgICwgbV9ibHVlRGlmZihibHVlRGlmZikKKyAgICAs
IG1fZ3JlZW5EaWZmKGdyZWVuRGlmZikKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgY2xhbXBD
b2xvclZhbHVlKGludCB2KQoreworICAgIGlmICh2ID4gMjU1KQorICAgICAgICB2ID0gMjU1Owor
ICAgIGVsc2UgaWYgKHYgPCAwKQorICAgICAgICB2ID0gMDsKKyAgICByZXR1cm4gdjsKK30KKwor
Q29sb3JEaXN0YW5jZSBDb2xvckRpc3RhbmNlOjpzY2FsZWREaXN0YW5jZShmbG9hdCBzY2FsZUZh
Y3RvcikgY29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3JEaXN0YW5jZShzY2FsZUZhY3RvciAqIG1f
cmVkRGlmZiwgc2NhbGVGYWN0b3IgKiBtX2JsdWVEaWZmLCBzY2FsZUZhY3RvciAqIG1fZ3JlZW5E
aWZmKTsKK30KKworQ29sb3IgQ29sb3JEaXN0YW5jZTo6YWRkQ29sb3JzQW5kQ2xhbXAoY29uc3Qg
Q29sb3ImIGZpcnN0LCBjb25zdCBDb2xvciYgc2Vjb25kKQoreworICAgIHJldHVybiBDb2xvcihj
bGFtcENvbG9yVmFsdWUoZmlyc3QucmVkKCkgKyBzZWNvbmQucmVkKCkpLAorICAgICAgICAgICAg
ICAgICBjbGFtcENvbG9yVmFsdWUoZmlyc3QuZ3JlZW4oKSArIHNlY29uZC5ncmVlbigpKSwKKyAg
ICAgICAgICAgICAgICAgY2xhbXBDb2xvclZhbHVlKHNlY29uZC5ibHVlKCkgKyBzZWNvbmQuYmx1
ZSgpKSk7Cit9CisKK0NvbG9yIENvbG9yRGlzdGFuY2U6OmFkZFRvQ29sb3JBbmRDbGFtcChjb25z
dCBDb2xvciYgY29sb3IpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yKGNsYW1wQ29sb3JWYWx1
ZShjb2xvci5yZWQoKSArIG1fcmVkRGlmZiksCisgICAgICAgICAgICAgICAgIGNsYW1wQ29sb3JW
YWx1ZShjb2xvci5ncmVlbigpICsgbV9ibHVlRGlmZiksCisgICAgICAgICAgICAgICAgIGNsYW1w
Q29sb3JWYWx1ZShjb2xvci5ibHVlKCkgKyBtX2dyZWVuRGlmZikpOworfQorCitib29sIENvbG9y
RGlzdGFuY2U6OmlzWmVybygpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtX3JlZERpZmYgPT0gMCAm
JiBtX2JsdWVEaWZmID09IDAgJiYgbV9ncmVlbkRpZmYgPT0gMCk7Cit9CisKK2Zsb2F0IENvbG9y
RGlzdGFuY2U6OmRpc3RhbmNlKCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGlzIGp1c3QgYSBzaW1w
bGUgZGlzdGFuY2UgY2FsY3VsYXRpb24sIG5vdCByZXNwZWN0aW5nIGNvbG9yIHNwYWNlcworICAg
IHJldHVybiBzcXJ0ZihtX3JlZERpZmYgKiBtX3JlZERpZmYgKyBtX2JsdWVEaWZmICogbV9ibHVl
RGlmZiArIG1fZ3JlZW5EaWZmICogbV9ncmVlbkRpZmYpOworfQorCit9CisKKyNlbmRpZgpJbmRl
eDoga3N2ZzIvc3ZnL0NvbG9yRGlzdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvQ29s
b3JEaXN0YW5jZS5oCShyZXZpc2lvbiAwKQorKysga3N2ZzIvc3ZnL0NvbG9yRGlzdGFuY2UuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMDcgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAKKyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IHByb2plY3QKKyAKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgCisgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorIAorIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMz
MCwKKyBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIENvbG9yRGlz
dGFuY2VfaAorI2RlZmluZSBDb2xvckRpc3RhbmNlX2gKKyNpZmRlZiBTVkdfU1VQUE9SVAorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3MgQ29sb3I7CisKKyAgICBjbGFzcyBD
b2xvckRpc3RhbmNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIENvbG9yRGlzdGFuY2UoKTsKKyAg
ICAgICAgQ29sb3JEaXN0YW5jZShjb25zdCBDb2xvciYgZnJvbUNvbG9yLCBjb25zdCBDb2xvciYg
dG9Db2xvcik7CisgICAgICAgIENvbG9yRGlzdGFuY2UoaW50IHJlZERpZmYsIGludCBibHVlRGlm
ZiwgaW50IGdyZWVuRGlmZik7CisgICAgICAgIAorICAgICAgICBDb2xvckRpc3RhbmNlIHNjYWxl
ZERpc3RhbmNlKGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdDsKKyAgICAgICAgQ29sb3IgYWRkVG9D
b2xvckFuZENsYW1wKGNvbnN0IENvbG9yJikgY29uc3Q7CisgICAgICAgIAorICAgICAgICBzdGF0
aWMgQ29sb3IgYWRkQ29sb3JzQW5kQ2xhbXAoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwor
ICAgICAgICAKKyAgICAgICAgYm9vbCBpc1plcm8oKSBjb25zdDsKKyAgICAgICAgCisgICAgICAg
IGZsb2F0IGRpc3RhbmNlKCkgY29uc3Q7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAg
IGludCBtX3JlZERpZmY7CisgICAgICAgIGludCBtX2JsdWVEaWZmOworICAgICAgICBpbnQgbV9n
cmVlbkRpZmY7CisgICAgfTsKK30KKworI2VuZGlmIC8vIFNWR19TVVBQT1JUCisjZW5kaWYgLy8g
Q29sb3JEaXN0YW5jZV9oCkluZGV4OiBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxOTA4MykKKysrIGtzdmcyL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzcsMTIgKzM3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBT
VkdBbmltYXRlQ29sb3JFbGVtZW50OjpTVkdBbmltYXRlQ29sb3JFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBTVkdBbmltYXRpb25FbGVt
ZW50KHRhZ05hbWUsIGRvYykKLSAgICAsIG1fdG9Db2xvcihuZXcgU1ZHQ29sb3IoKSkKLSAgICAs
IG1fZnJvbUNvbG9yKG5ldyBTVkdDb2xvcigpKQotICAgICwgbV9jdXJyZW50SXRlbSgtMSkKLSAg
ICAsIG1fcmVkRGlmZigwKQotICAgICwgbV9ncmVlbkRpZmYoMCkKLSAgICAsIG1fYmx1ZURpZmYo
MCkKIHsKIH0KIApAQCAtNTAsMTc3ICs0NCw1OSBAQCBTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojp+
U1ZHQW5pbWF0ZUNvbG9yCiB7CiB9CiAKLXZvaWQgY2FsY3VsYXRlQ29sb3JEaWZmZXJlbmNlKGNv
bnN0IENvbG9yJiBmaXJzdCwgY29uc3QgQ29sb3ImIHNlY29uZCwgaW50JiByZWREaWZmLCBpbnQm
IGdyZWVuRGlmZiwgaW50JiBibHVlRGlmZikKK3ZvaWQgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6
c2V0QmFzZUNvbG9yKGNvbnN0IENvbG9yJiBiYXNlQ29sb3IpCiB7Ci0gICAgcmVkRGlmZiA9IGZp
cnN0LnJlZCgpIC0gc2Vjb25kLnJlZCgpOwotICAgIGdyZWVuRGlmZiA9IGZpcnN0LmdyZWVuKCkg
LSBzZWNvbmQuZ3JlZW4oKTsKLSAgICBibHVlRGlmZiA9IGZpcnN0LmJsdWUoKSAtIHNlY29uZC5i
bHVlKCk7CisgICAgbV9iYXNlQ29sb3IgPSBiYXNlQ29sb3I7CisgICAgbV9jb2xvckRpc3RhbmNl
ID0gQ29sb3JEaXN0YW5jZSgpOworICAgIG1fZnJvbUNvbG9yID0gQ29sb3IoKTsKKyAgICBtX3Rv
Q29sb3IgPSBDb2xvcigpOwogfQogCi12b2lkIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OnN0b3Jl
SW5pdGlhbFZhbHVlKCkKK2Jvb2wgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6dXBkYXRlQW5pbWF0
ZWRWYWx1ZShFQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlLCB1bnNpZ25lZCB2YWx1ZUluZGV4
LCBmbG9hdCBwZXJjZW50YWdlUGFzdCkKIHsKLSAgICBtX2luaXRpYWxDb2xvciA9IFNWR0NvbG9y
Ojpjb2xvckZyb21SR0JDb2xvclN0cmluZyh0YXJnZXRBdHRyaWJ1dGUoKSk7Ci19Ci0KLXZvaWQg
U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6cmVzZXRWYWx1ZXMoKQotewotICAgIG1fY3VycmVudEl0
ZW0gPSAtMTsKLSAgICBtX3JlZERpZmYgPSAwOwotICAgIG1fZ3JlZW5EaWZmID0gMDsKLSAgICBt
X2JsdWVEaWZmID0gMDsKLX0KLQotYm9vbCBTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojp1cGRhdGVD
dXJyZW50VmFsdWUoZG91YmxlIHRpbWVQZXJjZW50YWdlKQotewotICAgIGludCByID0gMCwgZyA9
IDAsIGIgPSAwOwotICAgIGlmICgobV9yZWREaWZmICE9IDAgfHwgbV9ncmVlbkRpZmYgIT0gMCB8
fCBtX2JsdWVEaWZmICE9IDApICYmICFtX3ZhbHVlcykKLSAgICAgICAgY2FsY3VsYXRlQ29sb3Io
dGltZVBlcmNlbnRhZ2UsIHIsIGcsIGIpOwotICAgIGVsc2UgaWYgKG1fdmFsdWVzKSB7Ci0gICAg
ICAgIGludCBpdGVtQnlQZXJjZW50YWdlID0gY2FsY3VsYXRlQ3VycmVudFZhbHVlSXRlbSh0aW1l
UGVyY2VudGFnZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaXRlbUJ5UGVyY2VudGFnZSA9PSAt
MSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX2N1
cnJlbnRJdGVtICE9IGl0ZW1CeVBlcmNlbnRhZ2UpIHsgLy8gSXRlbSBjaGFuZ2VkLi4uCi0gICAg
ICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Ly8gRXh0cmFjdCBjdXJyZW50ICdmcm9tJyAvICd0bycgdmFsdWVzCi0gICAgICAgICAgICBTdHJp
bmcgdmFsdWUxID0gbV92YWx1ZXMtPmdldEl0ZW0oaXRlbUJ5UGVyY2VudGFnZSwgZWMpOwotICAg
ICAgICAgICAgU3RyaW5nIHZhbHVlMiA9IG1fdmFsdWVzLT5nZXRJdGVtKGl0ZW1CeVBlcmNlbnRh
Z2UgKyAxLCBlYyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIENhbGN1bGF0ZSByL2cv
YiBzaGlmdGluZyB2YWx1ZXMuLi4KLSAgICAgICAgICAgIGlmICghdmFsdWUxLmlzRW1wdHkoKSAm
JiAhdmFsdWUyLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgYXBwbHkgPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICBpZiAobV9yZWREaWZmICE9IDAgfHwgbV9ncmVlbkRpZmYgIT0g
MCB8fCBtX2JsdWVEaWZmICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgciA9IG1fdG9Db2xv
ci0+Y29sb3IoKS5yZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IG1fdG9Db2xvci0+Y29s
b3IoKS5ncmVlbigpOwotICAgICAgICAgICAgICAgICAgICBiID0gbV90b0NvbG9yLT5jb2xvcigp
LmJsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGFwcGx5
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgbV90b0NvbG9yLT5zZXRSR0JDb2xvcih2YWx1ZTIpOwotICAgICAgICAgICAgICAgIG1f
ZnJvbUNvbG9yLT5zZXRSR0JDb2xvcih2YWx1ZTEpOwotICAgICAgICAgICAgICAgIGNhbGN1bGF0
ZUNvbG9yRGlmZmVyZW5jZShtX3RvQ29sb3ItPmNvbG9yKCksIG1fZnJvbUNvbG9yLT5jb2xvcigp
LCBtX3JlZERpZmYsIG1fZ3JlZW5EaWZmLCBtX2JsdWVEaWZmKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBtX2N1cnJlbnRJdGVtID0gaXRlbUJ5UGVyY2VudGFnZTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWFwcGx5KQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAobV9y
ZWREaWZmICE9IDAgfHwgbV9ncmVlbkRpZmYgIT0gMCB8fCBtX2JsdWVEaWZmICE9IDApIHsKLSAg
ICAgICAgICAgIGRvdWJsZSByZWxhdGl2ZVRpbWUgPSBjYWxjdWxhdGVSZWxhdGl2ZVRpbWVQZXJj
ZW50YWdlKHRpbWVQZXJjZW50YWdlLCBtX2N1cnJlbnRJdGVtKTsKLSAgICAgICAgICAgIGNhbGN1
bGF0ZUNvbG9yKHJlbGF0aXZlVGltZSwgciwgZywgYik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgaWYgKCFpc0Zyb3plbigpICYmIHRpbWVQZXJjZW50YWdlID09IDEuMCkgewotICAgICAg
ICByID0gbV9pbml0aWFsQ29sb3IucmVkKCk7Ci0gICAgICAgIGcgPSBtX2luaXRpYWxDb2xvci5n
cmVlbigpOwotICAgICAgICBiID0gbV9pbml0aWFsQ29sb3IuYmx1ZSgpOwotICAgIH0KLSAgICAK
LSAgICBpZiAoaXNBY2N1bXVsYXRlZCgpICYmIHJlcGVhdGlvbnMoKSAhPSAwLjApIHsKLSAgICAg
ICAgciArPSBtX2xhc3RDb2xvci5yZWQoKTsKLSAgICAgICAgZyArPSBtX2xhc3RDb2xvci5ncmVl
bigpOwotICAgICAgICBiICs9IG1fbGFzdENvbG9yLmJsdWUoKTsKLSAgICB9Ci0gICAgCi0gICAg
bV9jdXJyZW50Q29sb3IgPSBjbGFtcENvbG9yKHIsIGcsIGIpOwotICAgIHJldHVybiB0cnVlOwor
ICAgIGlmIChhbmltYXRpb25Nb2RlID09IFRPX0FOSU1BVElPTikKKyAgICAgICAgLy8gdG8tYW5p
bWF0aW9ucyBoYXZlIGEgc3BlY2lhbCBlcXVhdGlvbjogdmFsdWUgPSAodG8gLSBiYXNlKSAqICh0
aW1lL2R1cmF0aW9uKSArIGJhc2UKKyAgICAgICAgbV9hbmltYXRlZENvbG9yID0gQ29sb3JEaXN0
YW5jZShtX2Jhc2VDb2xvciwgbV90b0NvbG9yKS5zY2FsZWREaXN0YW5jZSh0aW1lUGVyY2VudGFn
ZSkuYWRkVG9Db2xvckFuZENsYW1wKG1fYmFzZUNvbG9yKTsKKyAgICBlbHNlCisgICAgICAgIG1f
YW5pbWF0ZWRDb2xvciA9IG1fY29sb3JEaXN0YW5jZS5zY2FsZWREaXN0YW5jZShwZXJjZW50YWdl
UGFzdCkuYWRkVG9Db2xvckFuZENsYW1wKG1fYmFzZUNvbG9yKTsKKyAgICByZXR1cm4gKG1fYW5p
bWF0ZWRDb2xvciAhPSBtX2Jhc2VDb2xvcik7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0ZUNvbG9yRWxl
bWVudDo6aGFuZGxlU3RhcnRDb25kaXRpb24oKQotewotICAgIHN0b3JlSW5pdGlhbFZhbHVlKCk7
Ci0gICAgCi0gICAgc3dpdGNoIChkZXRlY3RBbmltYXRpb25Nb2RlKCkpIHsKLSAgICAgICAgY2Fz
ZSBUT19BTklNQVRJT046Ci0gICAgICAgIGNhc2UgRlJPTV9UT19BTklNQVRJT046Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIG1fdG9Db2xvci0+c2V0UkdCQ29sb3IobV90byk7Ci0gICAgICAgICAg
ICBpZiAoIW1fZnJvbS5pc0VtcHR5KCkpIC8vIGZyb20tdG8gYW5pbWF0aW9uCi0gICAgICAgICAg
ICAgICAgbV9mcm9tQ29sb3ItPnNldFJHQkNvbG9yKG1fZnJvbSk7Ci0gICAgICAgICAgICBlbHNl
IC8vIHRvIGFuaW1hdGlvbgotICAgICAgICAgICAgICAgIG1fZnJvbUNvbG9yLT5zZXRSR0JDb2xv
cihtX2luaXRpYWxDb2xvci5uYW1lKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxj
dWxhdGVDb2xvckRpZmZlcmVuY2UobV90b0NvbG9yLT5jb2xvcigpLCBtX2Zyb21Db2xvci0+Y29s
b3IoKSwgbV9yZWREaWZmLCBtX2dyZWVuRGlmZiwgbV9ibHVlRGlmZik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEJZX0FOSU1BVElPTjoKLSAgICAgICAgY2Fz
ZSBGUk9NX0JZX0FOSU1BVElPTjoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX2Zyb20u
aXNFbXB0eSgpKSAvLyBmcm9tLWJ5IGFuaW1hdGlvbgotICAgICAgICAgICAgICAgIG1fZnJvbUNv
bG9yLT5zZXRSR0JDb2xvcihtX2Zyb20pOwotICAgICAgICAgICAgZWxzZSAvLyBieSBhbmltYXRp
b24KLSAgICAgICAgICAgICAgICBtX2Zyb21Db2xvci0+c2V0UkdCQ29sb3IobV9pbml0aWFsQ29s
b3IubmFtZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV90b0NvbG9yLT5zZXRSR0JD
b2xvcihhZGRDb2xvcnNBbmRDbGFtcChtX2Zyb21Db2xvci0+Y29sb3IoKSwgU1ZHQ29sb3I6OmNv
bG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fYnkpKS5uYW1lKCkpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjYWxjdWxhdGVDb2xvckRpZmZlcmVuY2UobV90b0NvbG9yLT5jb2xvcigpLCBtX2Zy
b21Db2xvci0+Y29sb3IoKSwgbV9yZWREaWZmLCBtX2dyZWVuRGlmZiwgbV9ibHVlRGlmZik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFZBTFVFU19BTklNQVRJ
T046Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgewotICAg
ICAgICAgICAgLy9rZEVycm9yKCkgPDwga19mdW5jaW5mbyA8PCAiIFVuYWJsZSB0byBkZXRlY3Qg
YW5pbWF0aW9uIG1vZGUhIEFib3J0aW5nIGNyZWF0aW9uISIgPDwgZW5kbDsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorYm9vbCBTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojpj
YWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoRUFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSwgdW5z
aWduZWQgdmFsdWVJbmRleCkKK3sgICAgCisgICAgc3dpdGNoIChhbmltYXRpb25Nb2RlKSB7Cisg
ICAgY2FzZSBGUk9NX1RPX0FOSU1BVElPTjoKKyAgICAgICAgbV9mcm9tQ29sb3IgPSBTVkdDb2xv
cjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcobV9mcm9tKTsKKyAgICAgICAgLy8gZmFsbCB0aHJv
dWdoCisgICAgY2FzZSBUT19BTklNQVRJT046CisgICAgICAgIG1fdG9Db2xvciA9IFNWR0NvbG9y
Ojpjb2xvckZyb21SR0JDb2xvclN0cmluZyhtX3RvKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGUk9NX0JZX0FOSU1BVElPTjoKKyAgICAgICAgbV9mcm9tQ29sb3IgPSBTVkdDb2xvcjo6Y29s
b3JGcm9tUkdCQ29sb3JTdHJpbmcobV9mcm9tKTsKKyAgICAgICAgbV90b0NvbG9yID0gU1ZHQ29s
b3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fYnkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEJZX0FOSU1BVElPTjoKKyAgICAgICAgbV9mcm9tQ29sb3IgPSBTVkdDb2xvcjo6Y29sb3JG
cm9tUkdCQ29sb3JTdHJpbmcobV9mcm9tKTsKKyAgICAgICAgbV90b0NvbG9yID0gQ29sb3JEaXN0
YW5jZTo6YWRkQ29sb3JzQW5kQ2xhbXAobV9mcm9tQ29sb3IsIFNWR0NvbG9yOjpjb2xvckZyb21S
R0JDb2xvclN0cmluZyhtX2J5KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVkFMVUVTX0FO
SU1BVElPTjoKKyAgICAgICAgbV9mcm9tQ29sb3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29s
b3JTdHJpbmcobV92YWx1ZXNbdmFsdWVJbmRleF0pOworICAgICAgICBtX3RvQ29sb3IgPSAoKHZh
bHVlSW5kZXggKyAxKSA8IG1fdmFsdWVzLnNpemUoKSkgPyBTVkdDb2xvcjo6Y29sb3JGcm9tUkdC
Q29sb3JTdHJpbmcobV92YWx1ZXNbdmFsdWVJbmRleCArIDFdKSA6IG1fZnJvbUNvbG9yOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIE5PX0FOSU1BVElPTjoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgfQogICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNWR0Fu
aW1hdGVDb2xvckVsZW1lbnQ6OnVwZGF0ZUxhc3RWYWx1ZVdpdGhDdXJyZW50KCkKLXsKLSAgICBt
X2xhc3RDb2xvciA9IG1fY3VycmVudENvbG9yOworICAgIG1fY29sb3JEaXN0YW5jZSA9IENvbG9y
RGlzdGFuY2UobV9mcm9tQ29sb3IsIG1fdG9Db2xvcik7CisgICAgcmV0dXJuICFtX2NvbG9yRGlz
dGFuY2UuaXNaZXJvKCk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6YXBwbHlB
bmltYXRpb25Ub1ZhbHVlKENvbG9yJiBjdXJyZW50Q29sb3IpCiB7CiAgICAgaWYgKGlzQWRkaXRp
dmUoKSkKLSAgICAgICAgY3VycmVudENvbG9yID0gYWRkQ29sb3JzQW5kQ2xhbXAoY3VycmVudENv
bG9yLCBjb2xvcigpKTsKKyAgICAgICAgY3VycmVudENvbG9yID0gQ29sb3JEaXN0YW5jZTo6YWRk
Q29sb3JzQW5kQ2xhbXAoY3VycmVudENvbG9yLCBtX2FuaW1hdGVkQ29sb3IpOwogICAgIGVsc2UK
LSAgICAgICAgY3VycmVudENvbG9yID0gY29sb3IoKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQg
Y2xhbXBDb2xvclZhbHVlKGludCB2KQotewotICAgIGlmICh2ID4gMjU1KQotICAgICAgICB2ID0g
MjU1OwotICAgIGVsc2UgaWYgKHYgPCAwKQotICAgICAgICB2ID0gMDsKLSAgICByZXR1cm4gdjsK
LX0KLQotQ29sb3IgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Y2xhbXBDb2xvcihpbnQgciwgaW50
IGcsIGludCBiKSBjb25zdAotewotICAgIHJldHVybiBDb2xvcihjbGFtcENvbG9yVmFsdWUociks
IGNsYW1wQ29sb3JWYWx1ZShnKSwgY2xhbXBDb2xvclZhbHVlKGIpKTsKLX0KLQotQ29sb3IgU1ZH
QW5pbWF0ZUNvbG9yRWxlbWVudDo6YWRkQ29sb3JzQW5kQ2xhbXAoY29uc3QgQ29sb3ImIGZpcnN0
LCBjb25zdCBDb2xvciYgc2Vjb25kKQotewotICAgIHJldHVybiBDb2xvcihjbGFtcENvbG9yVmFs
dWUoZmlyc3QucmVkKCkgKyBzZWNvbmQucmVkKCkpLAotICAgICAgICAgICAgICAgICBjbGFtcENv
bG9yVmFsdWUoZmlyc3QuZ3JlZW4oKSArIHNlY29uZC5ncmVlbigpKSwKLSAgICAgICAgICAgICAg
ICAgY2xhbXBDb2xvclZhbHVlKGZpcnN0LmJsdWUoKSArIHNlY29uZC5ibHVlKCkpKTsKLX0KLQot
dm9pZCBTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpjYWxjdWxhdGVDb2xvcihkb3VibGUgdGltZSwg
aW50ICZyLCBpbnQgJmcsIGludCAmYikgY29uc3QKLXsKLSAgICByID0gbHJvdW5kKG1fcmVkRGlm
ZiAqIHRpbWUpICsgbV9mcm9tQ29sb3ItPmNvbG9yKCkucmVkKCk7Ci0gICAgZyA9IGxyb3VuZCht
X2dyZWVuRGlmZiAqIHRpbWUpICsgbV9mcm9tQ29sb3ItPmNvbG9yKCkuZ3JlZW4oKTsKLSAgICBi
ID0gbHJvdW5kKG1fYmx1ZURpZmYgKiB0aW1lKSArIG1fZnJvbUNvbG9yLT5jb2xvcigpLmJsdWUo
KTsKLX0KLQotQ29sb3IgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Y29sb3IoKSBjb25zdAotewot
ICAgIHJldHVybiBtX2N1cnJlbnRDb2xvcjsKLX0KLQotQ29sb3IgU1ZHQW5pbWF0ZUNvbG9yRWxl
bWVudDo6aW5pdGlhbENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbml0aWFsQ29sb3I7
CisgICAgICAgIGN1cnJlbnRDb2xvciA9IG1fYW5pbWF0ZWRDb2xvcjsKIH0KIAogfQpJbmRleDog
a3N2ZzIvc3ZnL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9z
dmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oCShyZXZpc2lvbiAxOTA4MykKKysrIGtzdmcyL3N2
Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcg
QEAKICNpZmRlZiBTVkdfU1VQUE9SVAogCiAjaW5jbHVkZSAiU1ZHQW5pbWF0aW9uRWxlbWVudC5o
IgorI2luY2x1ZGUgIkNvbG9yRGlzdGFuY2UuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM3LDM3ICszOCwyMyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Kik7CiAgICAgICAgIHZpcnR1YWwgflNWR0FuaW1hdGVDb2xvckVsZW1lbnQoKTsK
IAorICAgICAgICB2b2lkIHNldEJhc2VDb2xvcihjb25zdCBDb2xvciYpOwogICAgICAgICB2b2lk
IGFwcGx5QW5pbWF0aW9uVG9WYWx1ZShDb2xvciYgY3VycmVudENvbG9yKTsKIAotICAgICAgICAv
LyBIZWxwZXIKLSAgICAgICAgQ29sb3IgYWRkQ29sb3JzQW5kQ2xhbXAoY29uc3QgQ29sb3ImLCBj
b25zdCBDb2xvciYpOwotICAgICAgICBDb2xvciBjbGFtcENvbG9yKGludCByLCBpbnQgZywgaW50
IGIpIGNvbnN0OyAvLyBkZXByZWNhdGVkCi0gICAgICAgIHZvaWQgY2FsY3VsYXRlQ29sb3IoZG91
YmxlIHRpbWUsIGludCAmciwgaW50ICZnLCBpbnQgJmIpIGNvbnN0OwotCi0gICAgICAgIENvbG9y
IGNvbG9yKCkgY29uc3Q7Ci0gICAgICAgIENvbG9yIGluaXRpYWxDb2xvcigpIGNvbnN0OwotCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRF
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQotICAgICAgICB2b2lkIHN0b3JlSW5pdGlh
bFZhbHVlKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZXNldFZhbHVlcygpOwogICAgICAgICAK
LSAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUN1cnJlbnRWYWx1ZShkb3VibGUgdGltZVBlcmNl
bnRhZ2UpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlU3RhcnRDb25kaXRpb24oKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxhc3RWYWx1ZVdpdGhDdXJyZW50KCk7CisgICAgICAg
IHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlLCB1bnNpZ25l
ZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJjZW50YWdlUGFzdCk7CisgICAgICAgIHZpcnR1YWwgYm9v
bCBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoRUFuaW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVl
SW5kZXgpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQ29sb3IgbV9sYXN0Q29sb3I7Ci0gICAg
ICAgIENvbG9yIG1fY3VycmVudENvbG9yOwotICAgICAgICBDb2xvciBtX2luaXRpYWxDb2xvcjsK
LQotICAgICAgICBSZWZQdHI8U1ZHQ29sb3I+IG1fdG9Db2xvcjsKLSAgICAgICAgUmVmUHRyPFNW
R0NvbG9yPiBtX2Zyb21Db2xvcjsKLQotICAgICAgICBpbnQgbV9jdXJyZW50SXRlbTsKLSAgICAg
ICAgaW50IG1fcmVkRGlmZjsKLSAgICAgICAgaW50IG1fZ3JlZW5EaWZmOwotICAgICAgICBpbnQg
bV9ibHVlRGlmZjsKKyAgICAgICAgQ29sb3IgbV9iYXNlQ29sb3I7CisgICAgICAgIENvbG9yIG1f
YW5pbWF0ZWRDb2xvcjsKKworICAgICAgICBDb2xvciBtX3RvQ29sb3I7CisgICAgICAgIENvbG9y
IG1fZnJvbUNvbG9yOworCisgICAgICAgIENvbG9yRGlzdGFuY2UgbV9jb2xvckRpc3RhbmNlOwog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IGtzdmcyL3N2Zy9TVkdBbmlt
YXRlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5o
CShyZXZpc2lvbiAxOTA4MykKKysrIGtzdmcyL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiw5ICszNiw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcm90
ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQo
KSBjb25zdCB7IHJldHVybiB0aGlzOyB9CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFsIGJvb2wg
dXBkYXRlQ3VycmVudFZhbHVlKGRvdWJsZSB0aW1lUGVyY2VudGFnZSkgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICAgICAgdmlydHVhbCBib29sIGhhbmRsZVN0YXJ0Q29uZGl0aW9uKCkgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUVuZENvbmRpdGlvbigpIHsgfQor
ICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQW5pbWF0ZWRWYWx1ZShFQW5pbWF0aW9uTW9kZSwg
dW5zaWduZWQgdmFsdWVJbmRleCwgZmxvYXQgcGVyY2VudGFnZVBhc3QpIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoRUFuaW1h
dGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBw
cml2YXRlOgogICAgICAgICBpbnQgbV9jdXJyZW50SXRlbTsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdB
bmltYXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0FuaW1h
dGVNb3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMTkwODMpCisrKyBrc3ZnMi9zdmcvU1ZHQW5p
bWF0ZU1vdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMiArODgsMTIgQEAg
UGF0aCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6YW5pbWF0aW9uUAogICAgIHJldHVybiBQYXRo
KCk7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnVwZGF0ZUN1cnJlbnRWYWx1
ZShkb3VibGUgdGltZVBlcmNlbnRhZ2UpCitib29sIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojp1
cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlLCB1bnNpZ25lZCB2YWx1ZUluZGV4LCBm
bG9hdCBwZXJjZW50YWdlUGFzdCkKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdB
bmltYXRlTW90aW9uRWxlbWVudDo6aGFuZGxlU3RhcnRDb25kaXRpb24oKQorYm9vbCBTVkdBbmlt
YXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVBbmltYXRpb25Nb2Rl
LCB1bnNpZ25lZCB2YWx1ZUluZGV4KQogewogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDoga3N2
ZzIvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3Zn
L1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHJldmlzaW9uIDE5MDgzKQorKysga3N2ZzIvc3Zn
L1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBj
b25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0K
ICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVDdXJyZW50VmFsdWUoZG91Ymxl
IHRpbWVQZXJjZW50YWdlKTsKLSAgICAgICAgdmlydHVhbCBib29sIGhhbmRsZVN0YXJ0Q29uZGl0
aW9uKCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRp
b25Nb2RlLCB1bnNpZ25lZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJjZW50YWdlUGFzdCk7CisgICAg
ICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoRUFuaW1hdGlvbk1vZGUs
IHVuc2lnbmVkIHZhbHVlSW5kZXgpOwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBQ
YXRoIG1fcGF0aDsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNw
cAkocmV2aXNpb24gMTkwODMpCisrKyBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpTVkdBbmltYXRlVHJhbnNmb3JtRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgIDog
U1ZHQW5pbWF0aW9uRWxlbWVudCh0YWdOYW1lLCBkb2MpCi0gICAgLCBtX2N1cnJlbnRJdGVtKC0x
KQogICAgICwgbV90eXBlKFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOKQotICAg
ICwgbV9yb3RhdGVTcGVjaWFsQ2FzZShmYWxzZSkKLSAgICAsIG1fdG9Sb3RhdGVTcGVjaWFsQ2Fz
ZShmYWxzZSkKLSAgICAsIG1fZnJvbVJvdGF0ZVNwZWNpYWxDYXNlKGZhbHNlKQogewogfQogCkBA
IC03OCwzNiArNzQsMTcgQEAgdm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cGFyc2VN
YQogCiB2b2lkIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpzdG9yZUluaXRpYWxWYWx1ZSgp
CiB7Ci0gICAgbV9pbml0aWFsVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtKCk7CisgICAgbV9iYXNl
VHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtKCk7CiAgICAgCi0gICAgLy8gU2F2ZSBpbml0aWFsIHRy
YW5zZm9ybS4uLiAobmVlZGVkIGZvciBmaWxsPSJyZW1vdmUiIG9yIGFkZGl0dmU9InN1bSIpCiAg
ICAgaWYgKHRhcmdldEVsZW1lbnQoKS0+aXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkpIHsKICAgICAg
ICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0
PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4odGFyZ2V0RWxlbWVudCgpKTsKLSAgICAg
ICAgUmVmUHRyPFNWR1RyYW5zZm9ybUxpc3Q+IHRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm0tPnRy
YW5zZm9ybUJhc2VWYWx1ZSgpOwotICAgICAgICBpZiAodHJhbnNmb3JtTGlzdCkgewotICAgICAg
ICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxv
bmcgaSA9IDA7IGkgPCB0cmFuc2Zvcm1MaXN0LT5udW1iZXJPZkl0ZW1zKCk7IGkrKykgewotICAg
ICAgICAgICAgICAgIFNWR1RyYW5zZm9ybSB2YWx1ZSA9IHRyYW5zZm9ybUxpc3QtPmdldEl0ZW0o
aSwgZWMpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlz
IGlzIHdyb25nIGlmIHRoZSBpbml0aWFsIHRyYW5zZm9ybSBsaXN0IGhhcyBub3QgYmVlbiBub3Jt
YWxpemVkCi0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLnR5cGUoKSA9PSBtX3R5cGUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbV9pbml0aWFsVHJhbnNmb3JtID0gdmFsdWU7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQorICAgICAgICBSZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4gdHJhbnNmb3JtTGlzdCA9IHRy
YW5zZm9ybS0+dHJhbnNmb3JtKCk7CisgICAgICAgIGlmICh0cmFuc2Zvcm1MaXN0KQorICAgICAg
ICAgICAgbV9iYXNlVHJhbnNmb3JtID0gdHJhbnNmb3JtTGlzdC0+Y29uY2F0b25hdGVGb3JUeXBl
KG1fdHlwZSk7CiAgICAgfQogfQogCi12b2lkIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojpy
ZXNldFZhbHVlcygpCi17Ci0gICAgbV9jdXJyZW50SXRlbSA9IC0xOwotICAgIG1fdG9UcmFuc2Zv
cm0gPSBTVkdUcmFuc2Zvcm0oKTsKLSAgICBtX2Zyb21UcmFuc2Zvcm0gPSBTVkdUcmFuc2Zvcm0o
KTsKLSAgICBtX2luaXRpYWxUcmFuc2Zvcm0gPSBTVkdUcmFuc2Zvcm0oKTsKLX0KLQotYm9vbCBT
VkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6dXBkYXRlQ3VycmVudFZhbHVlKGRvdWJsZSB0aW1l
UGVyY2VudGFnZSkKK2Jvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnVwZGF0ZUFuaW1h
dGVkVmFsdWUoRUFuaW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNl
bnRhZ2VQYXN0KQogewogICAgIEFmZmluZVRyYW5zZm9ybSBxVG9NYXRyaXgsIHFGcm9tTWF0cml4
OwogICAgIGRvdWJsZSB1c2VUaW1lUGVyY2VudGFnZSA9IHRpbWVQZXJjZW50YWdlOwpAQCAtMTE4
LDEyICs5NSwxMCBAQCBib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojp1cGRhdGVDCiAg
ICAgICAgIGlmIChpdGVtQnlQZXJjZW50YWdlID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAKLSAgICAgICAgaWYgKG1fY3VycmVudEl0ZW0gIT0gaXRlbUJ5UGVyY2Vu
dGFnZSkgeyAvLyBJdGVtIGNoYW5nZWQuLi4KLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgICAgICAgICAgCisgICAgICAgIGlmIChtX2N1cnJlbnRJdGVtICE9IGl0ZW1CeVBl
cmNlbnRhZ2UpIHsgLy8gSXRlbSBjaGFuZ2VkLi4uICAgICAgICAgICAgCiAgICAgICAgICAgICAv
LyBFeHRyYWN0IGN1cnJlbnQgJ2Zyb20nIC8gJ3RvJyB2YWx1ZXMKLSAgICAgICAgICAgIFN0cmlu
ZyB2YWx1ZTEgPSBtX3ZhbHVlcy0+Z2V0SXRlbShpdGVtQnlQZXJjZW50YWdlLCBlYyk7Ci0gICAg
ICAgICAgICBTdHJpbmcgdmFsdWUyID0gbV92YWx1ZXMtPmdldEl0ZW0oaXRlbUJ5UGVyY2VudGFn
ZSArIDEsIGVjKTsKKyAgICAgICAgICAgIFN0cmluZyB2YWx1ZTEgPSBtX3ZhbHVlc1tpdGVtQnlQ
ZXJjZW50YWdlXTsKKyAgICAgICAgICAgIFN0cmluZyB2YWx1ZTIgPSBtX3ZhbHVlc1tpdGVtQnlQ
ZXJjZW50YWdlICsgMV07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBu
ZXcgZnJvbS90byB0cmFuc2Zvcm0gdmFsdWVzLi4uCiAgICAgICAgICAgICBpZiAoIXZhbHVlMS5p
c0VtcHR5KCkgJiYgIXZhbHVlMi5pc0VtcHR5KCkpIHsKQEAgLTEzNiwxMyArMTExLDggQEAgYm9v
bCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6dXBkYXRlQwogICAgICAgICAgICAgICAgICAg
ICB1c2VUaW1lUGVyY2VudGFnZSA9IDEuMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgbV90b1RyYW5zZm9ybSA9IHBhcnNlVHJhbnNmb3JtVmFs
dWUodmFsdWUyKTsKLSAgICAgICAgICAgICAgICBtX3RvUm90YXRlU3BlY2lhbENhc2UgPSBtX3Jv
dGF0ZVNwZWNpYWxDYXNlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZnJv
bVRyYW5zZm9ybSA9IHBhcnNlVHJhbnNmb3JtVmFsdWUodmFsdWUxKTsKLSAgICAgICAgICAgICAg
ICBtX2Zyb21Sb3RhdGVTcGVjaWFsQ2FzZSA9IG1fcm90YXRlU3BlY2lhbENhc2U7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50SXRlbSA9IGl0ZW1CeVBlcmNlbnRh
Z2U7CisgICAgICAgICAgICAgICAgbV90b1RyYW5zZm9ybSA9IHBhcnNlVHJhbnNmb3JtVmFsdWUo
dmFsdWUyKTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9mcm9tVHJhbnNmb3Jt
ID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZSh2YWx1ZTEpOyAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIWFwcGx5KQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0xODYsMTIgKzE1Niw2IEBAIGJvb2wgU1ZHQW5pbWF0ZVRyYW5z
Zm9ybUVsZW1lbnQ6OnVwZGF0ZUMKICAgICAgICAgICAgIGNhbGN1bGF0ZVJvdGF0aW9uRnJvbU1h
dHJpeChxVG9NYXRyaXgsIHRvQW5nbGUsIHRvQ3gsIHRvQ3kpOwogICAgICAgICAgICAgY2FsY3Vs
YXRlUm90YXRpb25Gcm9tTWF0cml4KHFGcm9tTWF0cml4LCBmcm9tQW5nbGUsIGZyb21DeCwgZnJv
bUN5KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fdG9Sb3RhdGVTcGVjaWFsQ2Fz
ZSkKLSAgICAgICAgICAgICAgICB0b0FuZ2xlID0gKGxyb3VuZCh0b0FuZ2xlKSA9PSAxKSA/IDAu
MCA6IDM2MC4wOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV9mcm9tUm90YXRlU3Bl
Y2lhbENhc2UpCi0gICAgICAgICAgICAgICAgZnJvbUFuZ2xlID0gKGxyb3VuZChmcm9tQW5nbGUp
ID09IDEpID8gMC4wIDogMzYwLjA7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIGRvdWJsZSBh
bmdsZSA9ICgodG9BbmdsZSAtIGZyb21BbmdsZSkgKiB1c2VUaW1lUGVyY2VudGFnZSkgKyBmcm9t
QW5nbGU7CiAgICAgICAgICAgICBkb3VibGUgY3ggPSAodG9DeCAtIGZyb21DeCkgKiB1c2VUaW1l
UGVyY2VudGFnZSArIGZyb21DeDsKICAgICAgICAgICAgIGRvdWJsZSBjeSA9ICh0b0N5IC0gZnJv
bUN5KSAqIHVzZVRpbWVQZXJjZW50YWdlICsgZnJvbUN5OwpAQCAtMjIzLDQ4ICsxODcsNDcgQEAg
Ym9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6dXBkYXRlQwogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpoYW5kbGVTdGFydENvbmRp
dGlvbigpCitib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5k
VG9WYWx1ZXMoRUFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJbmRl
eCkKIHsKLSAgICBzdG9yZUluaXRpYWxWYWx1ZSgpOworICAgIHN3aXRjaCAoYW5pbWF0aW9uTW9k
ZSkgeworICAgICAgICBjYXNlIEZST01fVE9fQU5JTUFUSU9OOgorICAgICAgICAgICAgbV9mcm9t
Q29sb3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcobV9mcm9tKTsKKyAgICAg
ICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgICAgICBjYXNlIFRPX0FOSU1BVElPTjoKKyAgICAg
ICAgICAgIG1fdG9Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmluZyhtX3Rv
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZST01fQllfQU5JTUFUSU9OOgor
ICAgICAgICAgICAgbV9mcm9tQ29sb3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJp
bmcobV9mcm9tKTsKKyAgICAgICAgICAgIG1fdG9Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZyb21S
R0JDb2xvclN0cmluZyhtX2J5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJZ
X0FOSU1BVElPTjoKKyAgICAgICAgICAgIG1fZnJvbUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJv
bVJHQkNvbG9yU3RyaW5nKG1fZnJvbSk7CisgICAgICAgICAgICBtX3RvQ29sb3IgPSBDb2xvckRp
c3RhbmNlOjphZGRDb2xvcnNBbmRDbGFtcChtX2Zyb21Db2xvciwgU1ZHQ29sb3I6OmNvbG9yRnJv
bVJHQkNvbG9yU3RyaW5nKG1fYnkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFZBTFVFU19BTklNQVRJT046CisgICAgICAgICAgICBtX2Zyb21Db2xvciA9IFNWR0NvbG9yOjpj
b2xvckZyb21SR0JDb2xvclN0cmluZyhtX3ZhbHVlc1t2YWx1ZUluZGV4XSk7CisgICAgICAgICAg
ICBtX3RvQ29sb3IgPSAoKHZhbHVlSW5kZXggKyAxKSA8IG1fdmFsdWVzLnNpemUoKSkgPyBTVkdD
b2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcobV92YWx1ZXNbdmFsdWVJbmRleCArIDFdKSA6
IG1fZnJvbUNvbG9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTk9fQU5JTUFU
SU9OOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAogICAg
IAogICAgIHN3aXRjaCAoZGV0ZWN0QW5pbWF0aW9uTW9kZSgpKSB7Ci0gICAgICAgIGNhc2UgVE9f
QU5JTUFUSU9OOgogICAgICAgICBjYXNlIEZST01fVE9fQU5JTUFUSU9OOgotICAgICAgICB7ICAg
ICAgICAKKyAgICAgICAgICAgIG1fZnJvbVRyYW5zZm9ybSA9IHBhcnNlVHJhbnNmb3JtVmFsdWUo
bV9mcm9tKTsKKyAgICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgICAgICBjYXNlIFRPX0FO
SU1BVElPTjoKICAgICAgICAgICAgIG1fdG9UcmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybVZhbHVl
KG1fdG8pOwotICAgICAgICAgICAgbV90b1JvdGF0ZVNwZWNpYWxDYXNlID0gbV9yb3RhdGVTcGVj
aWFsQ2FzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2Zyb20uaXNFbXB0eSgp
KSB7IC8vIGZyb20tdG8gYW5pbWF0aW9uCi0gICAgICAgICAgICAgICAgbV9mcm9tVHJhbnNmb3Jt
ID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX2Zyb20pOwotICAgICAgICAgICAgICAgIG1fZnJvbVJv
dGF0ZVNwZWNpYWxDYXNlID0gbV9yb3RhdGVTcGVjaWFsQ2FzZTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7IC8vIHRvIGFuaW1hdGlvbgotICAgICAgICAgICAgICAgIG1fZnJvbVRyYW5zZm9ybSA9IG1f
aW5pdGlhbFRyYW5zZm9ybTsKLSAgICAgICAgICAgICAgICBtX2Zyb21Sb3RhdGVTcGVjaWFsQ2Fz
ZSA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
IW1fZnJvbVRyYW5zZm9ybS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgbV9mcm9tVHJhbnNm
b3JtID0gU1ZHVHJhbnNmb3JtKCk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgQllfQU5JTUFUSU9OOgogICAgICAgICBjYXNlIEZST01f
QllfQU5JTUFUSU9OOgotICAgICAgICB7CisgICAgICAgICAgICBtX2Zyb21UcmFuc2Zvcm0gPSBw
YXJzZVRyYW5zZm9ybVZhbHVlKG1fZnJvbSk7CisgICAgICAgICAgICBtX3RvVHJhbnNmb3JtID0g
cGFyc2VUcmFuc2Zvcm1WYWx1ZShtX2J5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEJZX0FOSU1BVElPTjoKKyAgICAgICAgICAgIG1fZnJvbVRyYW5zZm9ybSA9IHBhcnNlVHJh
bnNmb3JtVmFsdWUobV9mcm9tKTsKICAgICAgICAgICAgIG1fdG9UcmFuc2Zvcm0gPSBwYXJzZVRy
YW5zZm9ybVZhbHVlKG1fYnkpOwotICAgICAgICAgICAgbV90b1JvdGF0ZVNwZWNpYWxDYXNlID0g
bV9yb3RhdGVTcGVjaWFsQ2FzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2Zy
b20uaXNFbXB0eSgpKSB7IC8vIGZyb20tYnkgYW5pbWF0aW9uCi0gICAgICAgICAgICAgICAgbV9m
cm9tVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX2Zyb20pOwotICAgICAgICAgICAg
ICAgIG1fZnJvbVJvdGF0ZVNwZWNpYWxDYXNlID0gbV9yb3RhdGVTcGVjaWFsQ2FzZTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7IC8vIGJ5IGFuaW1hdGlvbgotICAgICAgICAgICAgICAgIG1fZnJvbVRy
YW5zZm9ybSA9IG1faW5pdGlhbFRyYW5zZm9ybTsKLSAgICAgICAgICAgICAgICBtX2Zyb21Sb3Rh
dGVTcGVjaWFsQ2FzZSA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoIW1fZnJvbVRyYW5zZm9ybS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAg
bV9mcm9tVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtKCk7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQogICAgICAgICBjYXNlIFZBTFVFU19BTklNQVRJT046CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgZGVmYXVsdDoKQEAgLTI5Miw2ICsyNTUsOCBAQCB2b2lkIFNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50OjphcHBseUFuCiAKIFNWR1RyYW5zZm9ybSBTVkdBbmltYXRlVHJhbnNm
b3JtRWxlbWVudDo6cGFyc2VUcmFuc2Zvcm1WYWx1ZShjb25zdCBTdHJpbmcmIGRhdGEpIGNvbnN0
CiB7CisgICAgLy8gRklYTUU6IFRoaXMgcGFyc2VyIHNob3VsZCBiZSBjb21iaW5lZCB3aXRoIHRo
ZSBvbmUgaW4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1BdHRyaWJ1dGUKKyAgICAK
ICAgICBTdHJpbmcgcGFyc2UgPSBkYXRhLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgIGlmIChwYXJz
ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm0oKTsKQEAgLTM0MiwyMSAr
MzA3LDYgQEAgU1ZHVHJhbnNmb3JtIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OgogICAgICAg
ICAgICAgZWxzZSAKICAgICAgICAgICAgICAgICBhbmdsZSA9IHBhcnNlLnRvRG91YmxlKCk7CiAK
LSAgICAgICAgICAgIC8vIE9rIG5vdyBoZXJlJ3MgYSBoYWNrIHRvIG1ha2UgaXQgcG9zc2libGUg
dG8gY2FsY3VsYXRlIGN4L2N5IHZhbHVlcywgaWYgYW5nbGUgPSAwIAotICAgICAgICAgICAgLy8g
b3IgYW5nbGU9MzYwIC0+IGZvciBhbmdsZT0wIG91ciBtYXRyaXggaXMgbTExOiAxIG0xMjogMCBt
MjE6IDAgbTIyOiAxIGR4OiAwIGR5OiAwCi0gICAgICAgICAgICAvLyBBcyB5b3UgY2FuIHNlZSB0
aGVyZSBpcyBubyB3YXkgdG8gcmV0cmlldmUgdGhlIGN4L2N5IHZhbHVlcyBmb3IgdGhlc2UgYW5n
bGVzLgotICAgICAgICAgICAgLy8gLT4gc2V0ICdtX3JvdGF0ZVNwZWNpYWxDYXNlJyB0byB0cnVl
LCBhbmQgc2F2ZSBhbmdsZSA9IDEvMzU5IC0+IHRoaXMgd2F5IHdlIGNhbiBjYWxjdWxhdGUKLSAg
ICAgICAgICAgIC8vICAgIHRoZSBjeC9jeSB2YWx1ZXMsIHdoaWxlIGtlZXBpbmcgdGhpcyB1YmVy
LW9wdGltaXplZCB3YXkgb2YgaGFuZGxpbmcgPGFuaW1hdGVUcmFuc2Zvcm0+IQotICAgICAgICAg
ICAgbV9yb3RhdGVTcGVjaWFsQ2FzZSA9IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoYW5nbGUgPT0gMC4wKSB7Ci0gICAgICAgICAgICAgICAgYW5nbGUgPSBhbmdsZSArIDEu
MDsKLSAgICAgICAgICAgICAgICBtX3JvdGF0ZVNwZWNpYWxDYXNlID0gdHJ1ZTsKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAoYW5nbGUgPT0gMzYwLjApIHsKLSAgICAgICAgICAgICAgICBhbmdsZSA9
IGFuZ2xlIC0gMS4wOwotICAgICAgICAgICAgICAgIG1fcm90YXRlU3BlY2lhbENhc2UgPSB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCiAgICAgICAgICAgICBwYXJzZWRUcmFuc2Zv
cm0uc2V0Um90YXRlKGFuZ2xlLCBjeCwgY3kpOwogICAgICAgICAgICAgYnJlYWs7ICAgIAogICAg
ICAgICB9CkBAIC0zODUsNyArMzM1LDYgQEAgdm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVu
dDo6Y2FsY3VsYQogICAgIGRvdWJsZSBzaW5hID0gLW1hdHJpeC5jKCk7CiAKICAgICBpZiAoY29z
YSAhPSAxLjApIHsKLSAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBhbmdsZSB2aWEgbWFnaWMgOykK
ICAgICAgICAgZG91YmxlIHRlbXAgPSBTVkdBbmdsZTo6dG9kZWcoYXNpbihzaW5hKSk7CiAgICAg
ICAgIGFuZ2xlID0gU1ZHQW5nbGU6OnRvZGVnKGFjb3MoY29zYSkpOwogICAgICAgICBpZiAodGVt
cCA8IDApCkBAIC00MDQsMTEgKzM1Myw2IEBAIHZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1l
bnQ6OmNhbGN1bGEKICAgICBhbmdsZSA9IDAuMDsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIFNWR0Fu
aW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjdXJyZW50VHJhbnNmb3JtKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9jdXJyZW50VHJhbnNmb3JtOwotfQotCiB9CiAKIC8vIHZpbTp0cz00Om5vZXQKSW5k
ZXg6IGtzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oCShyZXZpc2lvbiAxOTA4MykK
KysrIGtzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MywzNSArNDMsMjcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQg
YXBwbHlBbmltYXRpb25Ub1ZhbHVlKFNWR1RyYW5zZm9ybUxpc3QqKTsKIAotICAgICAgICAvLyBI
ZWxwZXJzCi0gICAgICAgIFNWR1RyYW5zZm9ybSBwYXJzZVRyYW5zZm9ybVZhbHVlKGNvbnN0IFN0
cmluZyYpIGNvbnN0OwotICAgICAgICB2b2lkIGNhbGN1bGF0ZVJvdGF0aW9uRnJvbU1hdHJpeChj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBkb3VibGUmIGFuZ2xlLCBkb3VibGUmIGN4LCBkb3VibGUm
IGN5KSBjb25zdDsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3VycmVudFRyYW5zZm9ybSgp
IGNvbnN0OwotCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1l
bnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQogICAgICAgICB2b2lk
IHN0b3JlSW5pdGlhbFZhbHVlKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZXNldFZhbHVlcygp
OwogICAgICAgICAKLSAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUN1cnJlbnRWYWx1ZShkb3Vi
bGUgdGltZVBlcmNlbnRhZ2UpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlU3RhcnRDb25k
aXRpb24oKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxhc3RWYWx1ZVdpdGhDdXJyZW50
KCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25N
b2RlLCB1bnNpZ25lZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJjZW50YWdlUGFzdCk7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoRUFuaW1hdGlvbk1vZGUsIHVu
c2lnbmVkIHZhbHVlSW5kZXgpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgaW50IG1fY3VycmVu
dEl0ZW07CisgICAgICAgIC8vIEhlbHBlcnMKKyAgICAgICAgU1ZHVHJhbnNmb3JtIHBhcnNlVHJh
bnNmb3JtVmFsdWUoY29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAgICAgIHZvaWQgY2FsY3VsYXRl
Um90YXRpb25Gcm9tTWF0cml4KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGRvdWJsZSYgYW5nbGUs
IGRvdWJsZSYgY3gsIGRvdWJsZSYgY3kpIGNvbnN0OworICAgICAgICAgICAgCiAgICAgICAgIFNW
R1RyYW5zZm9ybTo6U1ZHVHJhbnNmb3JtVHlwZSBtX3R5cGU7CiAKICAgICAgICAgU1ZHVHJhbnNm
b3JtIG1fdG9UcmFuc2Zvcm07CiAgICAgICAgIFNWR1RyYW5zZm9ybSBtX2Zyb21UcmFuc2Zvcm07
CiAgICAgICAgIFNWR1RyYW5zZm9ybSBtX2luaXRpYWxUcmFuc2Zvcm07CiAKLSAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIG1fbGFzdFRyYW5zZm9ybTsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1f
Y3VycmVudFRyYW5zZm9ybTsKLQotICAgICAgICBtdXRhYmxlIGJvb2wgbV9yb3RhdGVTcGVjaWFs
Q2FzZSA6IDE7Ci0gICAgICAgIGJvb2wgbV90b1JvdGF0ZVNwZWNpYWxDYXNlIDogMTsKLSAgICAg
ICAgYm9vbCBtX2Zyb21Sb3RhdGVTcGVjaWFsQ2FzZSA6IDE7CisgICAgICAgIEFmZmluZVRyYW5z
Zm9ybSBtX2Jhc2VUcmFuc2Zvcm07CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX2FuaW10YXRl
VHJhbnNmb3JtOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IGtzdmcy
L3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5MDgzKQorKysga3N2ZzIvc3ZnL1NWR0Fu
aW1hdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDMwIEBAIHZv
aWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6cGFyc2VLZXlOdW1iZXIKICAgICB9CiB9CiAKK3N0YXRp
YyB2b2lkIHBhcnNlVmFsdWVzKFZlY3RvcjxTdHJpbmc+JiB2YWx1ZXMsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCit7CisgICAgY29uc3QgVUNoYXIqIHB0ciA9IHZhbHVlLmNoYXJhY3RlcnMoKTsKKyAg
ICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgdmFsdWUubGVuZ3RoKCk7CisgICAgc2tpcE9wdGlv
bmFsU3BhY2VzKHB0ciwgZW5kKTsKKyAgICB3aGlsZSAocHRyIDwgZW5kKSB7CisgICAgICAgIC8v
IFNNSUwgMy4yLjIgOiBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZSBzcGFjZSwgYW5kIHdoaXRl
IHNwYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgc2VtaWNvbG9uIHNlcGFyYXRvcnMsIHdpbGwgYmUgaWdu
b3JlZC4KKyAgICAgICAgY29uc3QgVUNoYXIqIHZhbHVlU3RhcnQgPSBwdHI7CisgICAgICAgIHdo
aWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSAnOycpIC8vIGNhcmVmdWwgbm90IHRvIGlnbm9yZSB3
aGl0ZXNwYWNlIGluc2lkZSB2YWx1ZXMKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICBpZiAo
cHRyID09IHZhbHVlU3RhcnQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAg
IC8vIHdhbGsgYmFja3dhcmRzIGZyb20gdGhlIDsgdG8gaWdub3JlIGFueSB3aGl0ZXNwYWNlCisg
ICAgICAgIGNvbnN0IFVDaGFyKiB2YWx1ZUVuZCA9IHB0cjsKKyAgICAgICAgd2hpbGUgKHZhbHVl
U3RhcnQgPCB2YWx1ZUVuZCAmJiBpc1doaXRlc3BhY2UoKnZhbHVlRW5kKSkKKyAgICAgICAgICAg
IHZhbHVlRW5kLS07CisgICAgICAgIAorICAgICAgICB2YWx1ZXMuYXBwZW5kKFN0cmluZyh2YWx1
ZVN0YXJ0LCB2YWx1ZUVuZCAtIHZhbHVlU3RhcnQpKTsKKyAgICAgICAgCisgICAgICAgIHNraXBP
cHRpb25hbFNwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCAnOycpOworICAgIH0KK30KKwogc3Rh
dGljIHZvaWQgcGFyc2VLZXlTcGxpbmVzKFZlY3RvcjxTVkdBbmltYXRpb25FbGVtZW50OjpLZXlT
cGxpbmU+JiBrZXlTcGxpbmVzLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIGRvdWJsZSBu
dW1iZXIgPSAwLmY7CkBAIC0yNzMsOCArMjk3LDggQEAgdm9pZCBTVkdBbmltYXRpb25FbGVtZW50
OjpwYXJzZU1hcHBlZEF0dAogICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAicGFjZWQiKQogICAg
ICAgICAgICAgbV9jYWxjTW9kZSA9IENBTENNT0RFX1BBQ0VEOwogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjp2YWx1ZXNBdHRyKSB7Ci0gICAgICAgIG1fdmFsdWVzID0g
bmV3IFNWR1N0cmluZ0xpc3QoKTsKLSAgICAgICAgbV92YWx1ZXMtPnBhcnNlKHZhbHVlLCAnOycp
OworICAgICAgICBtX3ZhbHVlcy5jbGVhcigpOworICAgICAgICBwYXJzZVZhbHVlcyhtX3ZhbHVl
cywgdmFsdWUpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXlU
aW1lc0F0dHIpIHsKICAgICAgICAgbV9rZXlUaW1lcy5jbGVhcigpOwogICAgICAgICBwYXJzZUtl
eU51bWJlcnMobV9rZXlUaW1lcywgdmFsdWUpOwpAQCAtNDg1LDcgKzUwOSw5IEBAIGJvb2wgU1ZH
QW5pbWF0aW9uRWxlbWVudDo6aXNBY2N1bXVsYXRlZCgKIAogRUFuaW1hdGlvbk1vZGUgU1ZHQW5p
bWF0aW9uRWxlbWVudDo6ZGV0ZWN0QW5pbWF0aW9uTW9kZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCgh
bV9mcm9tLmlzRW1wdHkoKSAmJiAhbV90by5pc0VtcHR5KCkpIHx8ICghbV90by5pc0VtcHR5KCkp
KSB7IC8vIHRvL2Zyb20tdG8gYW5pbWF0aW9uCisgICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1l
czo6dmFsdWVzQXR0cikpCisgICAgICAgIHJldHVybiBWQUxVRVNfQU5JTUFUSU9OOworICAgIGVs
c2UgaWYgKCghbV9mcm9tLmlzRW1wdHkoKSAmJiAhbV90by5pc0VtcHR5KCkpIHx8ICghbV90by5p
c0VtcHR5KCkpKSB7IC8vIHRvL2Zyb20tdG8gYW5pbWF0aW9uCiAgICAgICAgIGlmICghbV9mcm9t
LmlzRW1wdHkoKSkgLy8gZnJvbS10byBhbmltYXRpb24KICAgICAgICAgICAgIHJldHVybiBGUk9N
X1RPX0FOSU1BVElPTjsKICAgICAgICAgZWxzZQpAQCAtNDk3LDYwICs1MjMsMTAgQEAgRUFuaW1h
dGlvbk1vZGUgU1ZHQW5pbWF0aW9uRWxlbWVudDo6ZGV0ZQogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICByZXR1cm4gQllfQU5JTUFUSU9OOwogICAgIH0KLSAgICBlbHNlIGlmIChtX3ZhbHVlcykK
LSAgICAgICAgcmV0dXJuIFZBTFVFU19BTklNQVRJT047CiAKICAgICByZXR1cm4gTk9fQU5JTUFU
SU9OOwogfQogCi1zdGF0aWMgaW5saW5lIFZlY3Rvcjxkb3VibGU+IHN0YXJ0VGltZXNGb3JWYWx1
ZXMoY29uc3QgU1ZHU3RyaW5nTGlzdCogdmFsdWVzKQotewotICAgIC8vIENhbGN1bGF0ZSB0aGUg
cmVsYXRpdmUgdGltZSBwZXJjZW50YWdlcyBmb3IgZWFjaCAnZmFkZScuCi0gICAgLy8gRXZlbnR1
YWxseSB2YWx1ZSBzcGFjaW5nIHdpbGwgbmVlZCB0byB0YWtlIGtleVNwbGluZXMgaW50byBhY2Nv
dW50Ci0gICAgdW5zaWduZWQgbG9uZyBpdGVtcyA9IHZhbHVlcy0+bnVtYmVyT2ZJdGVtcygpOwot
ICAgIFZlY3Rvcjxkb3VibGU+IHN0YXJ0VGltZXMoaXRlbXMpOwotICAgIHN0YXJ0VGltZXNbMF0g
PSAwLjA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGl0ZW1zOyArK2kpCi0gICAgICAg
IHN0YXJ0VGltZXNbaV0gPSAoKCgyLjAgKiBpKSkgLyAoaXRlbXMgLSAxKSkgLyAyLjA7Ci0gICAg
cmV0dXJuIHN0YXJ0VGltZXM7Ci19Ci0KLWludCBTVkdBbmltYXRpb25FbGVtZW50OjpjYWxjdWxh
dGVDdXJyZW50VmFsdWVJdGVtKGRvdWJsZSB0aW1lUGVyY2VudGFnZSkKLXsKLSAgICBpZiAoIW1f
dmFsdWVzKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgCi0gICAgdW5zaWduZWQgbG9uZyBpdGVt
cyA9IG1fdmFsdWVzLT5udW1iZXJPZkl0ZW1zKCk7Ci0gICAgVmVjdG9yPGRvdWJsZT4gc3RhcnRU
aW1lcyA9IHN0YXJ0VGltZXNGb3JWYWx1ZXMobV92YWx1ZXMuZ2V0KCkpOwotCi0gICAgaW50IGl0
ZW1CeVBlcmNlbnRhZ2UgPSAtMTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMg
LSAxOyArK2kpIHsKLSAgICAgICAgaWYgKHRpbWVQZXJjZW50YWdlID49IHN0YXJ0VGltZXNbaV0g
JiYgdGltZVBlcmNlbnRhZ2UgPD0gc3RhcnRUaW1lc1tpICsgMV0pIHsKLSAgICAgICAgICAgIGl0
ZW1CeVBlcmNlbnRhZ2UgPSBpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gaXRlbUJ5UGVyY2VudGFnZTsKLX0KLQotZG91YmxlIFNWR0FuaW1hdGlv
bkVsZW1lbnQ6OmNhbGN1bGF0ZVJlbGF0aXZlVGltZVBlcmNlbnRhZ2UoZG91YmxlIHRpbWVQZXJj
ZW50YWdlLCBpbnQgY3VycmVudEl0ZW0pCi17Ci0gICAgaWYgKGN1cnJlbnRJdGVtID09IC0xIHx8
ICFtX3ZhbHVlcykKLSAgICAgICAgcmV0dXJuIDAuMDsKLQotICAgIFZlY3Rvcjxkb3VibGU+IHN0
YXJ0VGltZXMgPSBzdGFydFRpbWVzRm9yVmFsdWVzKG1fdmFsdWVzLmdldCgpKTsKLQotICAgIGRv
dWJsZSBiZWdpblRpbWVQZXJjZW50YWdlID0gc3RhcnRUaW1lc1tjdXJyZW50SXRlbV07Ci0gICAg
ZG91YmxlIGVuZFRpbWVQZXJjZW50YWdlID0gc3RhcnRUaW1lc1tjdXJyZW50SXRlbSArIDFdOwot
Ci0gICAgaWYgKChlbmRUaW1lUGVyY2VudGFnZSAtIGJlZ2luVGltZVBlcmNlbnRhZ2UpID09IDAu
MCkKLSAgICAgICAgcmV0dXJuIDAuMDsKLQotICAgIHJldHVybiAoKHRpbWVQZXJjZW50YWdlIC0g
YmVnaW5UaW1lUGVyY2VudGFnZSkgLwotICAgICAgICAgICAgKGVuZFRpbWVQZXJjZW50YWdlIC0g
YmVnaW5UaW1lUGVyY2VudGFnZSkpOwotfQotCiBkb3VibGUgU1ZHQW5pbWF0aW9uRWxlbWVudDo6
cmVwZWF0aW9ucygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcmVwZXRpdGlvbnM7CkBAIC01OTMs
MTUgKzU2OSwxMTQgQEAgc3RhdGljIGRvdWJsZSBjYWxjdWxhdGVUaW1lUGVyY2VudGFnZShkbwog
ICAgIHJldHVybiBwZXJjZW50YWdlOwogfQogCi12b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6Omhh
bmRsZVRpbWVyRXZlbnQoZG91YmxlIHRpbWVQZXJjZW50YWdlKQorc3RhdGljIGlubGluZSB2b2lk
IGFkanVzdFBlcmNlbnRhZ2VQYXN0Rm9yS2V5U3BsaW5lcyhjb25zdCBWZWN0b3I8U1ZHQW5pbWF0
aW9uRWxlbWVudDo6S2V5U3BsaW5lPiYga2V5U3BsaW5lcywgdW5zaWduZWQgdmFsdWVJbmRleCwg
ZmxvYXQmIHBlcmNlbnRhZ2VQYXN0KQoreworICAgIGNvbnN0IFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OktleVNwbGluZSYga2V5U3BsaW5lID0ga2V5U3BsaW5lc1t2YWx1ZUluZGV4XTsKKyAgICBQYXRo
IHBhdGg7CisgICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCgpKTsKKyAgICBwYXRoLmFkZEJlemll
ckN1cnZlVG8oa2V5U3BsaW5lLmNvbnRyb2wxLCBrZXlTcGxpbmUuY29udHJvbDIsIEZsb2F0UG9p
bnQoMS4wZiwgMS4wZikpOworICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAgICBGbG9hdFBvaW50IHNw
bGluZVBvaW50ID0gcGF0aC5wb2ludEF0TGVuZ3RoKHBlcmNlbnRhZ2VQYXN0LCBvayk7CisgICAg
aWYgKG9rKQorICAgICAgICBwZXJjZW50YWdlUGFzdCAqPSBzcGxpbmVQb2ludC55KCk7Cit9CisK
K3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6dmFsdWVJbmRleEFuZFBlcmNlbnRhZ2VQYXN0Rm9y
RGlzdGFuY2UoZmxvYXQgZGlzdGFuY2VQZXJjZW50YWdlLCB1bnNpZ25lZCYgdmFsdWVJbmRleCwg
ZmxvYXQmIHBlcmNlbnRhZ2VQYXN0KQoreworICAgIC8vIFVuc3BlY2lmaWVkOiBhbmltYXRpb24g
ZWxlbWVudHMgd2hpY2ggZG8gbm90IHN1cHBvcnQgQ0FMQ01PREVfUEFDRUQsIHdlIGp1c3QgYWx3
YXlzIHNob3cgdGhlIGZpcnN0IHZhbHVlCisgICAgdmFsdWVJbmRleCA9IDA7CisgICAgcGVyY2Vu
dGFnZVBhc3QgPSAwOworfQorCitmbG9hdCBTVkdBbmltYXRpb25FbGVtZW50OjpjYWxjdWxhdGVU
b3RhbERpc3RhbmNlKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lk
IGNhbGN1bGF0ZVZhbHVlSW5kZXhBbmRQZXJjZW50YWdlUGFzdEZvcktleVRpbWVzKGZsb2F0IGVs
YXBzZWRUaW1lLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXlUaW1lcywgdW5zaWduZWQmIHZhbHVl
SW5kZXgsIGZsb2F0JiBwZXJjZW50YWdlUGFzdCkKK3sKKyAgICBib29sIGZvdW5kS2V5VGltZSA9
IGZhbHNlOworICAgIHVuc2lnbmVkIGtleVRpbWVzQ291bnRNaW51c09uZSA9IGtleVRpbWVzLnNp
emUoKTsKKyAgICBmb3IgKHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwga2V5VGltZXNDb3Vu
dE1pbnVzT25lOyB2YWx1ZUluZGV4KyspIHsKKyAgICAgICAgZmxvYXQgbGFzdEtleVRpbWUgPSBr
ZXlUaW1lc1t2YWx1ZUluZGV4XTsKKyAgICAgICAgaWYgKGxhc3RLZXlUaW1lID49IGVsYXBzZWRU
aW1lKSB7CisgICAgICAgICAgICBmbG9hdCBuZXh0S2V5VGltZSA9IGtleVRpbWVzW3ZhbHVlSW5k
ZXggKyAxXTsKKyAgICAgICAgICAgIGZsb2F0IGtleVRpbWVTcGFuID0gbmV4dEtleVRpbWUgLSBs
YXN0S2V5VGltZTsKKyAgICAgICAgICAgIGZsb2F0IHRpbWVTaW5jZUxhc3RLZXlUaW1lID0gZWxh
cHNlZFRpbWUgLSBsYXN0S2V5VGltZTsKKyAgICAgICAgICAgIHBlcmNlbnRhZ2VQYXN0ID0gKHRp
bWVTaW5jZUxhc3RLZXlUaW1lIC8ga2V5VGltZVNwYW4pOworICAgICAgICAgICAgZm91bmRLZXlU
aW1lID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWZvdW5kS2V5VGltZSkgewor
ICAgICAgICB2YWx1ZUluZGV4ID0ga2V5VGltZXNDb3VudE1pbnVzT25lOworICAgICAgICBwZXJj
ZW50YWdlUGFzdCA9IDA7CisgICAgfQorfQorCitib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6Omlz
VmFsaWRBbmltYXRpb24oKSBjb25zdAoreworICAgIEVBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1v
ZGUgPSBkZXRlY3RBbmltYXRpb25Nb2RlKCk7CisgICAgaWYgKCFoYXNWYWxpZFRhcmdldCgpIHx8
ICEoYW5pbWF0aW9uTW9kZSA9PSBOT19BTklNQVRJT04pKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKGFuaW1hdGlvbk1vZGUgPT0gVkFMVUVTX0FOSU1BVElPTikgeworICAgICAgICBp
ZiAoIW1fdmFsdWVzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aWYgKG1fa2V5VGltZXMuc2l6ZSgpICYmIG1fdmFsdWVzLnNpemUoKSAhPSBtX2tleVRpbWVzLnNp
emUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1fa2V5U3BsaW5l
cy5zaXplKCkgJiYgbV92YWx1ZXMuc2l6ZSgpICE9IG1fa2V5U3BsaW5lcy5zaXplKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZVZhbHVlSW5kZXhBbmRQZXJjZW50YWdlUGFz
dChmbG9hdCBlbGFwc2VkVGltZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVkJiB2YWx1
ZUluZGV4LCBmbG9hdCYgcGVyY2VudGFnZVBhc3QpCit7CisgICAgQVNTRVJUKGlzVmFsaWRBbmlt
YXRpb24oKSk7CisgICAgRUFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSA9IGRldGVjdEFuaW1h
dGlvbk1vZGUoKTsKKyAgICAKKyAgICBib29sIGlzVmFsdWVzQW5pbWF0aW9uID0gKGFuaW1hdGlv
bk1vZGUgPT0gVkFMVUVTX0FOSU1BVElPTik7CisgICAgZmxvYXQgdmFsdWVDb3VudCA9IGlzVmFs
dWVzQW5pbWF0aW9uID8gbV92YWx1ZXMuc2l6ZSgpIDogMjsgIAorICAgIGZsb2F0IHZhbHVlUGVy
Y2VudGFnZSA9IHZhbHVlQ291bnQgKiB0aW1lUGVyY2VudGFnZTsKKyAgICBpZiAoaXNWYWx1ZXNB
bmltYXRpb24pIHsKKyAgICAgICAgY2FsY3VsYXRlVmFsdWVJbmRleEFuZFBlcmNlbnRhZ2VQYXN0
Rm9yS2V5VGltZXMoZWxhcHNlZFRpbWUsIG1fa2V5VGltZXMsIHZhbHVlSW5kZXgsIHBlcmNlbnRh
Z2VQYXN0KTsKKyAgICAgICAgaWYgKG1fY2FsY01vZGUgPT0gQ0FMQ01PREVfU1BMSU5FKQorICAg
ICAgICAgICAgYWRqdXN0UGVyY2VudGFnZVBhc3RGb3JLZXlTcGxpbmVzKG1fa2V5U3BsaW5lcywg
dmFsdWVJbmRleCwgcGVyY2VudGFnZVBhc3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIERl
ZmF1bHQsIGxpbmVhciBiZWhhdmlvcgorICAgICAgICBmbG9hdCBmbG9hdFZhbHVlSW5kZXggPSBm
bG9vcmYodmFsdWVQZXJjZW50YWdlKTsKKyAgICAgICAgcGVyY2VudGFnZVBhc3QgPSAgdmFsdWVQ
ZXJjZW50YWdlIC0gKGZsb2F0VmFsdWVJbmRleCAvIHZhbHVlQ291bnQpOworICAgIH0KKyAgICAK
KyAgICBpZiAobV9jYWxjTW9kZSA9PSBDQUxDTU9ERV9ESVNDUkVURSkKKyAgICAgICAgcGVyY2Vu
dGFnZVBhc3QgPSAwLjBmOworICAgIGVsc2UgaWYgKG1fY2FsY01vZGUgPT0gQ0FMQ01PREVfUEFD
RUQpIHsKKyAgICAgICAgLy8gY2FsY3VsYXRlIHZhbHVlIHBlcmNlbnRhZ2UgYmFzZWQgb24gZGlz
dGFuY2UgaW5zdGVhZCBvZiB0aW1lCisgICAgICAgIGZsb2F0IHRvdGFsRGlzdGFuY2UgPSBjYWxj
dWxhdGVUb3RhbERpc3RhbmNlKCk7CisgICAgICAgIGZsb2F0IGRpc3RhbmNlUGVyY2VudGFnZSA9
IHRvdGFsRGlzdGFuY2UgKiB0aW1lUGVyY2VudGFnZTsKKyAgICAgICAgdmFsdWVJbmRleEFuZFBl
cmNlbnRhZ2VQYXN0Rm9yRGlzdGFuY2UoZGlzdGFuY2VQZXJjZW50YWdlLCB2YWx1ZUluZGV4LCBw
ZXJjZW50YWdlUGFzdCk7CisgICAgfQorfQorCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6Omhh
bmRsZVRpbWVyRXZlbnQoZG91YmxlIGVsYXBzZWRTZWNvbmRzLCBkb3VibGUgdGltZVBlcmNlbnRh
Z2UpCiB7CiAgICAgaWYgKCFjb25uZWN0ZWRUb1RpbWVyKCkpIHsKICAgICAgICAgY29ubmVjdFRp
bWVyKCk7Ci0gICAgICAgIGhhbmRsZVN0YXJ0Q29uZGl0aW9uKCk7IC8vIE5lZWQgdG8gY2hlY2sg
Ym9vbCByZXR1cm4gaWYgYWRkaW5nIGFueXRoaW5nIGFmdGVyIHRoaXMgY2FsbAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmICghdXBkYXRlQ3VycmVudFZhbHVlKHRpbWVQZXJj
ZW50YWdlKSkKKyAgICBpZiAoaXNBY2N1bXVsYXRlZCgpICYmIHJlcGVhdGlvbnMoKSAhPSAwLjAp
CisgICAgICAgIGFjY3VtdWxhdGVGb3JSZXBldGl0aW9ucyhyZXBldGl0aW9uQ291bnQpOworICAg
IAorICAgIEVBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUgPSBkZXRlY3RBbmltYXRpb25Nb2Rl
KCk7CisgICAgCisgICAgdW5zaWduZWQgdmFsdWVJbmRleCA9IDA7CisgICAgZmxvYXQgcGVyY2Vu
dGFnZVBhc3QgPSAwOworICAgIGlmIChhbmltYXRpb25Nb2RlICE9IFRPX0FOSU1BVElPTikKKyAg
ICAgICAgY2FsY3VsYXRlVmFsdWVJbmRleEFuZFBlcmNlbnRhZ2VQYXN0KGVsYXBzZWRTZWNvbmRz
LCB0aW1lUGVyY2VudGFnZSwgdmFsdWVJbmRleCwgcGVyY2VudGFnZVBhc3QpOworICAgICAgICAK
KyAgICBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXModmFsdWVJbmRleCk7CisgICAgCisgICAgaWYg
KCF1cGRhdGVDdXJyZW50VmFsdWUocGVyY2VudGFnZVBhc3QpKQogICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgaWYgKHRpbWVQZXJjZW50YWdlID09IDEuMCkgewpAQCAtNjEyLDI1ICs2ODcsMzQg
QEAgdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpoYW5kbGVUaW1lckV2ZQogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBkaXNjb25uZWN0VGltZXIoKTsKLSAgICAgICAgcmVzZXRWYWx1ZXMo
KTsgICAKKyAgICAgICAgcmVzZXRWYWx1ZXMoKTsKICAgICB9CiB9CiAKIGJvb2wgU1ZHQW5pbWF0
aW9uRWxlbWVudDo6dXBkYXRlRm9yRWxhcHNlZFNlY29uZHMoZG91YmxlIGVsYXBzZWRTZWNvbmRz
KQogeworICAgIGlmICghaXNWYWxpZEFuaW1hdGlvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgaWYgKGlzU3RvcHBlZCgpKSB7CisgICAgICAgIGlmIChtX2ZpbGwgPT0gRklM
TF9GUkVFWkUpCisgICAgICAgICAgICBlbGFwc2VkU2Vjb25kcyA9IG1fc3RvcHBlZFRpbWU7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCiAgICAg
Ly8gVmFsaWRhdGUgYW5pbWF0aW9uIHRpbWluZyBzZXR0aW5nczoKICAgICAvLyAjMSAoZHVyYXRp
b24gPiAwKSAtPiBmaW5lCiAgICAgLy8gIzIgKGR1cmF0aW9uIDw9IDAuMCAmJiBlbmQgPiAwKSAt
PiBmaW5lCi0gICAgCiAgICAgaWYgKChtX3NpbXBsZUR1cmF0aW9uIDw9IDAuMCAmJiBtX2VuZCA8
PSAwLjApIHx8IChpc0luZGVmaW5pdGUobV9zaW1wbGVEdXJhdGlvbikgJiYgbV9lbmQgPD0gMC4w
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBJZ25vcmUgZHVyPSIwIiBvciBkdXI9Ii1uZWci
CiAgICAgCiAgICAgZmxvYXQgcGVyY2VudGFnZSA9IGNhbGN1bGF0ZVRpbWVQZXJjZW50YWdlKGVs
YXBzZWRTZWNvbmRzLCBtX2JlZ2luLCBtX2VuZCwgbV9zaW1wbGVEdXJhdGlvbiwgbV9yZXBldGl0
aW9ucyk7CiAgICAgCiAgICAgaWYgKHBlcmNlbnRhZ2UgPD0gMS4wIHx8IGNvbm5lY3RlZFRvVGlt
ZXIoKSkKLSAgICAgICAgaGFuZGxlVGltZXJFdmVudChwZXJjZW50YWdlKTsKKyAgICAgICAgaGFu
ZGxlVGltZXJFdmVudChlbGFwc2VkU2Vjb25kcywgcGVyY2VudGFnZSk7CiAgICAgCi0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIHRydWU7IC8vIHZhbHVlIHdhcyB1cGRhdGVkLCBuZWVkIHRv
IGFwcGx5CiB9CiAKIH0KSW5kZXg6IGtzdmcyL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gMTkw
ODMpCisrKyBrc3ZnMi9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC04Nyw2ICs4Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU1ZHRWxlbWVudCog
dGFyZ2V0RWxlbWVudCgpIGNvbnN0OwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBib29sIGhh
c1ZhbGlkVGFyZ2V0KCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNWYWxpZEFuaW1hdGlvbigpIGNv
bnN0OwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKQEAgLTEwMCw5ICsxMDEsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGNsb3NlUmVuZGVyZXIoKTsKIAot
ICAgICAgICAvLyBIZWxwZXJzCi0gICAgICAgIGJvb2wgdXBkYXRlRm9yRWxhcHNlZFNlY29uZHMo
ZG91YmxlKTsKLSAgICAgICAgdm9pZCBoYW5kbGVUaW1lckV2ZW50KGRvdWJsZSB0aW1lUGVyY2Vu
dGFnZSk7CisgICAgICAgIGJvb2wgdXBkYXRlRm9yRWxhcHNlZFNlY29uZHMoZG91YmxlIGVsYXBz
ZWRTZWNvbmRzKTsKIAogICAgICAgICBzdGF0aWMgZG91YmxlIHBhcnNlQ2xvY2tWYWx1ZShjb25z
dCBTdHJpbmcmKTsKIApAQCAtMTIxLDkgKzEyMCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICBFQW5pbWF0aW9uTW9kZSBkZXRlY3RBbmltYXRpb25Nb2RlKCkgY29uc3Q7CiAKLSAg
ICAgICAgaW50IGNhbGN1bGF0ZUN1cnJlbnRWYWx1ZUl0ZW0oZG91YmxlIHRpbWVQZXJjZW50YWdl
KTsKLSAgICAgICAgZG91YmxlIGNhbGN1bGF0ZVJlbGF0aXZlVGltZVBlcmNlbnRhZ2UoZG91Ymxl
IHRpbWVQZXJjZW50YWdlLCBpbnQgY3VycmVudEl0ZW0pOwotCiAgICAgICAgIGRvdWJsZSByZXBl
YXRpb25zKCkgY29uc3Q7CiAgICAgICAgIHN0YXRpYyBib29sIGlzSW5kZWZpbml0ZShkb3VibGUg
dmFsdWUpOwogCkBAIC0xMzIsMTEgKzEyOCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIAogICAgICAgICB2b2lkIGNvbm5lY3RUaW1lcigpOwogICAgICAgICB2b2lkIGRpc2Nvbm5l
Y3RUaW1lcigpOworCisgICAgICAgIHZpcnR1YWwgZmxvYXQgY2FsY3VsYXRlVG90YWxEaXN0YW5j
ZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVJbmRleEFuZFBlcmNlbnRhZ2VQYXN0Rm9y
RGlzdGFuY2UoZmxvYXQgZGlzdGFuY2VQZXJjZW50YWdlLCB1bnNpZ25lZCYgdmFsdWVJbmRleCwg
ZmxvYXQmIHBlcmNlbnRhZ2VQYXN0KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgY2FsY3VsYXRl
VmFsdWVJbmRleEFuZFBlcmNlbnRhZ2VQYXN0KGZsb2F0IGVsYXBzZWRUaW1lLCBmbG9hdCB0aW1l
UGVyY2VudGFnZSwgdW5zaWduZWQmIHZhbHVlSW5kZXgsIGZsb2F0JiBwZXJjZW50YWdlUGFzdCk7
CisgICAgICAgIAorICAgICAgICB2b2lkIGhhbmRsZVRpbWVyRXZlbnQoZG91YmxlIGVsYXBzZWRT
ZWNvbmRzLCBkb3VibGUgdGltZVBlcmNlbnRhZ2UpOwogICAgICAgICAKLSAgICAgICAgdmlydHVh
bCBib29sIHVwZGF0ZUN1cnJlbnRWYWx1ZShkb3VibGUgdGltZVBlcmNlbnRhZ2UpID0gMDsKLSAg
ICAgICAgdmlydHVhbCBib29sIGhhbmRsZVN0YXJ0Q29uZGl0aW9uKCkgPSAwOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlTGFzdFZhbHVlV2l0aEN1cnJlbnQoKSB7IH0gLy8gU2VlIGJ1ZyAx
MjA3NSBmb3IgZXhwbGFpbmF0aW9uIG9mIHdoeSB0aGlzIGlzIGEgYmFkIEFQSQotICAgICAgICB2
aXJ0dWFsIHZvaWQgcmVzZXRWYWx1ZXMoKSB7IH0KKyAgICAgICAgdmlydHVhbCBib29sIHVwZGF0
ZUFuaW1hdGVkVmFsdWUoRUFuaW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0
IHBlcmNlbnRhZ2VQYXN0KSA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9t
QW5kVG9WYWx1ZXMoRUFuaW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpID0gMDsKICAg
ICAgICAgCiAgICAgICAgIHN0YXRpYyB2b2lkIHBhcnNlS2V5TnVtYmVycyhWZWN0b3I8ZmxvYXQ+
JiBrZXlOdW1iZXJzLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICAgICAgc3RhdGljIHZvaWQg
cGFyc2VCZWdpbk9yRW5kVmFsdWUoZG91YmxlJiBudW1iZXIsIGNvbnN0IFN0cmluZyYgdmFsdWUp
OwpAQCAtMTcxLDcgKzE3Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgZG91Ymxl
IG1fcmVwZXRpdGlvbnM7CiAgICAgICAgIGRvdWJsZSBtX3JlcGVhdENvdW50OwogCi0gICAgICAg
IFJlZlB0cjxTVkdTdHJpbmdMaXN0PiBtX3ZhbHVlczsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4g
bV92YWx1ZXM7CiAgICAgICAgIFZlY3RvcjxmbG9hdD4gbV9rZXlUaW1lczsKICAgICAgICAgCiAg
ICAgICAgIHN0cnVjdCBLZXlTcGxpbmUgewpJbmRleDoga3N2ZzIvc3ZnL1NWR1NldEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdTZXRFbGVtZW50LmNwcAkocmV2aXNpb24g
MTkwODMpCisrKyBrc3ZnMi9zdmcvU1ZHU2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5LDMwICszOSw2IEBAIFNWR1NldEVsZW1lbnQ6On5TVkdTZXRFbGVtZW50KCkKIHsKIH0KIAot
Ym9vbCBTVkdTZXRFbGVtZW50Ojp1cGRhdGVDdXJyZW50VmFsdWUoZG91YmxlIHRpbWVQZXJjZW50
YWdlKQotewotICAgIGlmIChtX3NhdmVkVG8uaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fc2F2ZWRU
byA9IHRhcmdldEF0dHJpYnV0ZSgpOwotICAgICAgICBzZXRUYXJnZXRBdHRyaWJ1dGUobV90byk7
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBTVkdTZXRFbGVtZW50OjpoYW5k
bGVTdGFydENvbmRpdGlvbigpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU1ZHU2V0
RWxlbWVudDo6aGFuZGxlRW5kQ29uZGl0aW9uKCkKLXsKLSAgICBkaXNjb25uZWN0VGltZXIoKTsK
LSAgICAKLSAgICBpZiAoIWlzRnJvemVuKCkpCi0gICAgICAgIHNldFRhcmdldEF0dHJpYnV0ZSht
X3NhdmVkVG8pOwotICAgIAotICAgIG1fc2F2ZWRUbyA9IFN0cmluZygpOwotfQotCiB9CiAKIC8v
IHZpbTp0cz00Om5vZXQKSW5kZXg6IGtzdmcyL3N2Zy9TVkdTZXRFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga3N2ZzIvc3ZnL1NWR1NldEVsZW1lbnQuaAkocmV2aXNpb24gMTkwODMpCisrKyBrc3Zn
Mi9zdmcvU1ZHU2V0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw5ICszNyw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNW
R0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQogICAgICAg
ICAKLSAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUN1cnJlbnRWYWx1ZShkb3VibGUgdGltZVBl
cmNlbnRhZ2UpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlU3RhcnRDb25kaXRpb24oKTsK
LSAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUVuZENvbmRpdGlvbigpOworICAgICAgICB2aXJ0
dWFsIGJvb2wgdXBkYXRlQW5pbWF0ZWRWYWx1ZShFQW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFs
dWVJbmRleCwgZmxvYXQgcGVyY2VudGFnZVBhc3QpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAg
dmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSwgdW5z
aWduZWQgdmFsdWVJbmRleCkgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgU3RyaW5nIG1fc2F2ZWRUbzsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm0uY3BwCShyZXZpc2lvbiAxOTA4MykK
KysrIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4
NSwxMSBAQCB2b2lkIFNWR1RyYW5zZm9ybTo6c2V0VHJhbnNsYXRlKGRvdWJsZSB0CiAgICAgbV9t
YXRyaXgudHJhbnNsYXRlKHR4LCB0eSk7CiB9CiAKK0Zsb2F0UG9pbnQgU1ZHVHJhbnNmb3JtOjp0
cmFuc2xhdGUoKSBjb25zdAoreworICAgIHJldHVybiBGbG9hdFBvaW50KG1fbWF0cml4LmUoKSwg
bV9tYXRyaXguZigpKTsKK30KKwogdm9pZCBTVkdUcmFuc2Zvcm06OnNldFNjYWxlKGRvdWJsZSBz
eCwgZG91YmxlIHN5KQogewogICAgIG1fdHlwZSA9IFNWR19UUkFOU0ZPUk1fU0NBTEU7CkBAIC05
NCw2ICs5OSwxMSBAQCB2b2lkIFNWR1RyYW5zZm9ybTo6c2V0U2NhbGUoZG91YmxlIHN4LCBkCiAg
ICAgbV9tYXRyaXguc2NhbGUoc3gsIHN5KTsKIH0KIAorRmxvYXRTaXplIFNWR1RyYW5zZm9ybTo6
c2NhbGUoKSBjb25zdAoreworICAgIHJldHVybiBGbG9hdFNpemUobV9tYXRyaXguYSgpLCBtX21h
dHJpeC5kKCkpOworfQorCiB2b2lkIFNWR1RyYW5zZm9ybTo6c2V0Um90YXRlKGRvdWJsZSBhbmds
ZSwgZG91YmxlIGN4LCBkb3VibGUgY3kpCiB7CiAgICAgbV90eXBlID0gU1ZHX1RSQU5TRk9STV9S
T1RBVEU7CkBAIC0xMTIsNyArMTIyLDcgQEAgdm9pZCBTVkdUcmFuc2Zvcm06OnNldFNrZXdYKGRv
dWJsZSBhbmdsZQogICAgIG1fYW5nbGUgPSBhbmdsZTsKIAogICAgIG1fbWF0cml4LnJlc2V0KCk7
Ci0gICAgbV9tYXRyaXguc2hlYXIodGFuKFNWR0FuZ2xlOjp0b3JhZChhbmdsZSkpLCAwLjBmKTsK
KyAgICBtX21hdHJpeC5za2V3WChhbmdsZSk7CiB9CiAKIHZvaWQgU1ZHVHJhbnNmb3JtOjpzZXRT
a2V3WShkb3VibGUgYW5nbGUpCkBAIC0xMjEsNyArMTMxLDcgQEAgdm9pZCBTVkdUcmFuc2Zvcm06
OnNldFNrZXdZKGRvdWJsZSBhbmdsZQogICAgIG1fYW5nbGUgPSBhbmdsZTsKIAogICAgIG1fbWF0
cml4LnJlc2V0KCk7Ci0gICAgbV9tYXRyaXguc2hlYXIoMC4wZiwgdGFuKFNWR0FuZ2xlOjp0b3Jh
ZChhbmdsZSkpKTsKKyAgICBtX21hdHJpeC5za2V3WShhbmdsZSk7CiB9CiAKIC8vIHZpbTp0cz00
Om5vZXQKSW5kZXg6IGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3Zn
Mi9zdmcvU1ZHVHJhbnNmb3JtLmgJKHJldmlzaW9uIDE5MDgzKQorKysga3N2ZzIvc3ZnL1NWR1Ry
YW5zZm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5IEBACiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3MgRmxvYXRQ
b2ludDsKKyAgICBjbGFzcyBGbG9hdFNpemU7CiAKICAgICBjbGFzcyBTVkdUcmFuc2Zvcm0gewog
ICAgIHB1YmxpYzoKQEAgLTU5LDYgKzYyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdm9pZCBzZXRTa2V3WChkb3VibGUgYW5nbGUpOwogICAgICAgICB2b2lkIHNldFNrZXdZKGRv
dWJsZSBhbmdsZSk7CiAgICAgICAgIAorICAgICAgICAvLyBJbnRlcm5hbCB1c2Ugb25seSAoYW5p
bWF0aW9uIHN5c3RlbSkKKyAgICAgICAgRmxvYXRQb2ludCB0cmFuc2xhdGUoKSBjb25zdDsKKyAg
ICAgICAgRmxvYXRTaXplIHNjYWxlKCkgY29uc3Q7CisgICAgICAgIAogICAgICAgICBib29sIGlz
VmFsaWQoKTsKIAogICAgIHByaXZhdGU6CkluZGV4OiBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtRGlz
dGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1EaXN0YW5jZS5j
cHAJKHJldmlzaW9uIDApCisrKyBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1MCBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMDcgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAKKyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IHByb2plY3QKKyAKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgCisgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorIAorIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMz
MCwKKyBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1EaXN0YW5jZS5o
IgorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2lu
Y2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitTVkdU
cmFuc2Zvcm1EaXN0YW5jZTo6U1ZHVHJhbnNmb3JtRGlzdGFuY2UoKQorICAgIDogbV9hbmdsZSgw
KQoreworfQorCitTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6U1ZHVHJhbnNmb3JtRGlzdGFuY2UoY29u
c3QgU1ZHVHJhbnNmb3JtJiBmcm9tU1ZHVHJhbnNmb3JtLCBjb25zdCBTVkdUcmFuc2Zvcm0mIHRv
U1ZHVHJhbnNmb3JtKQorICAgIDogbV90eXBlKGZyb21TVkdUcmFuc2Zvcm0udHlwZSgpKQorICAg
ICwgbV9hbmdsZSgwKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gdG9TVkdUcmFuc2Zvcm0udHlw
ZSgpKTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgU1ZHVHJhbnNmb3Jt
OjpTVkdfVFJBTlNGT1JNX1VOS05PV046CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNWR1Ry
YW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg6CisgICAgICAgIC8vIEZJWE1FOiBuZWVkIHRv
IGJlIGFibGUgdG8gc3VidHJhY3QgdG8gbWF0cmljZXMKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURToKKyAgICAgICAgbV9hbmdsZSA9
IHRvU1ZHVHJhbnNmb3JtLmFuZ2xlKCkgLSBmcm9tU1ZHVHJhbnNmb3JtLmFuZ2xlKCk7CisgICAg
ICAgIC8vIGZhbGwgdGhyb3VnaAorICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JN
X1RSQU5TTEFURToKKyAgICB7CisgICAgICAgIEZsb2F0U2l6ZSB0cmFuc2xhdGlvbkRpc3RhbmNl
ID0gdG9TVkdUcmFuc2Zvcm0udHJhbnNsYXRlKCkgLSBmcm9tU1ZHVHJhbnNmb3JtLnRyYW5zbGF0
ZSgpOworICAgICAgICBtX3RyYW5zZm9ybS50cmFuc2xhdGUodHJhbnNsYXRpb25EaXN0YW5jZS53
aWR0aCgpLCB0cmFuc2xhdGlvbkRpc3RhbmNlLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TQ0FMRToKKyAgICB7
CisgICAgICAgIGZsb2F0IHNjYWxlWCA9IGZyb21TVkdUcmFuc2Zvcm0uc2NhbGUoKS53aWR0aCgp
ICE9IDAgPyB0b1NWR1RyYW5zZm9ybS5zY2FsZSgpLndpZHRoKCkgLyBmcm9tU1ZHVHJhbnNmb3Jt
LnNjYWxlKCkud2lkdGgoKSA6IHRvU1ZHVHJhbnNmb3JtLnNjYWxlKCkud2lkdGgoKSAvIDAuMDAw
MDE7CisgICAgICAgIGZsb2F0IHNjYWxlWSA9IGZyb21TVkdUcmFuc2Zvcm0uc2NhbGUoKS5oZWln
aHQoKSAhPSAwID8gdG9TVkdUcmFuc2Zvcm0uc2NhbGUoKS5oZWlnaHQoKSAvIGZyb21TVkdUcmFu
c2Zvcm0uc2NhbGUoKS5oZWlnaHQoKSA6IHRvU1ZHVHJhbnNmb3JtLnNjYWxlKCkuaGVpZ2h0KCkg
LyAwLjAwMDAxOworICAgICAgICBtX3RyYW5zZm9ybS5zY2FsZShzY2FsZVgsIHNjYWxlWSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZP
Uk1fU0tFV1g6CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0tFV1k6Cisg
ICAgICAgIG1fYW5nbGUgPSB0b1NWR1RyYW5zZm9ybS5hbmdsZSgpIC0gZnJvbVNWR1RyYW5zZm9y
bS5hbmdsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCitTVkdUcmFuc2Zvcm1EaXN0
YW5jZSBTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6c2NhbGVkRGlzdGFuY2UoZmxvYXQgc2NhbGVGYWN0
b3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIFNWR1RyYW5zZm9y
bTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOOgorICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtRGlz
dGFuY2UoKTsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9ST1RBVEU6Cisg
ICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6CisgICAgY2FzZSBTVkdU
cmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fTUFUUklYOgorICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpT
VkdfVFJBTlNGT1JNX1RSQU5TTEFURToKKyAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybURpc3Rh
bmNlKG1fdHlwZSwgbV9hbmdsZSAqIHNjYWxlRmFjdG9yLCBBZmZpbmVUcmFuc2Zvcm0obV90cmFu
c2Zvcm0pLnNjYWxlKHNjYWxlRmFjdG9yKSk7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19U
UkFOU0ZPUk1fU0tFV1g6CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0tF
V1k6CisgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1EaXN0YW5jZShtX3R5cGUsIG1fYW5nbGUg
KiBzY2FsZUZhY3RvciwgQWZmaW5lVHJhbnNmb3JtKCkpOworICAgIH0KKyAgICAKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU1ZHVHJhbnNmb3JtRGlzdGFuY2UoKTsKK30K
KworU1ZHVHJhbnNmb3JtIFNWR1RyYW5zZm9ybURpc3RhbmNlOjphZGRTVkdUcmFuc2Zvcm1zKGNv
bnN0IFNWR1RyYW5zZm9ybSYgZmlyc3QsIGNvbnN0IFNWR1RyYW5zZm9ybSYgc2Vjb25kKQorewor
ICAgIEFTU0VSVChmaXJzdC50eXBlKCkgPT0gc2Vjb25kLnR5cGUoKSk7CisgICAgCisgICAgU1ZH
VHJhbnNmb3JtIHRyYW5zZm9ybTsKKyAgICAKKyAgICBzd2l0Y2ggKGZpcnN0LnR5cGUoKSkgewor
ICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1VOS05PV046CisgICAgICAgIHJl
dHVybiBTVkdUcmFuc2Zvcm0oKTsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9S
TV9ST1RBVEU6CisgICAgeworICAgICAgICAvLyBGSVhNRTogSSdtIG5vdCBzdXJlIHRoYXQgdGhl
IHRyYW5zbGF0aW9uIGlzIGNvcnJlY3QgaGVyZQorICAgICAgICBmbG9hdCBkeCA9IGZpcnN0LnRy
YW5zbGF0ZSgpLngoKSArIHNlY29uZC50cmFuc2xhdGUoKS54KCk7CisgICAgICAgIGZsb2F0IGR5
ID0gZmlyc3QudHJhbnNsYXRlKCkueSgpICsgc2Vjb25kLnRyYW5zbGF0ZSgpLnkoKTsKKyAgICAg
ICAgdHJhbnNmb3JtLnNldFJvdGF0ZShmaXJzdC5hbmdsZSgpICsgc2Vjb25kLmFuZ2xlKCksIGR4
LCBkeSk7CisgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CisgICAgfQorICAgIGNhc2UgU1ZHVHJh
bnNmb3JtOjpTVkdfVFJBTlNGT1JNX01BVFJJWDoKKyAgICAgICAgdHJhbnNmb3JtLnNldE1hdHJp
eChmaXJzdC5tYXRyaXgoKSAqIHNlY29uZC5tYXRyaXgoKSk7CisgICAgICAgIHJldHVybiB0cmFu
c2Zvcm07CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOgor
ICAgIHsKKyAgICAgICAgZmxvYXQgZHggPSBmaXJzdC50cmFuc2xhdGUoKS54KCkgKyBzZWNvbmQu
dHJhbnNsYXRlKCkueCgpOworICAgICAgICBmbG9hdCBkeSA9IGZpcnN0LnRyYW5zbGF0ZSgpLnko
KSArIHNlY29uZC50cmFuc2xhdGUoKS55KCk7CisgICAgICAgIHRyYW5zZm9ybS5zZXRUcmFuc2xh
dGUoZHgsIGR5KTsKKyAgICAgICAgcmV0dXJuIHRyYW5zZm9ybTsKKyAgICB9CisgICAgY2FzZSBT
VkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6CisgICAgeworICAgICAgICBGbG9hdFNp
emUgc2NhbGUgPSBmaXJzdC5zY2FsZSgpICsgc2Vjb25kLnNjYWxlKCk7CisgICAgICAgIHRyYW5z
Zm9ybS5zZXRTY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CisgICAgICAgIHJl
dHVybiB0cmFuc2Zvcm07CisgICAgfQorICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNG
T1JNX1NLRVdYOgorICAgICAgICB0cmFuc2Zvcm0uc2V0U2tld1goZmlyc3QuYW5nbGUoKSArIHNl
Y29uZC5hbmdsZSgpKTsKKyAgICAgICAgcmV0dXJuIHRyYW5zZm9ybTsKKyAgICBjYXNlIFNWR1Ry
YW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TS0VXWToKKyAgICAgICAgdHJhbnNmb3JtLnNldFNrZXdZ
KGZpcnN0LmFuZ2xlKCkgKyBzZWNvbmQuYW5nbGUoKSk7CisgICAgICAgIHJldHVybiB0cmFuc2Zv
cm07CisgICAgfQorICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBT
VkdUcmFuc2Zvcm0oKTsKK30KKwordm9pZCBTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6YWRkU1ZHVHJh
bnNmb3JtKGNvbnN0IFNWR1RyYW5zZm9ybSYgdHJhbnNmb3JtLCBib29sIGFic29sdXRlVmFsdWUp
Cit7CisgICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgYWRkLCBzZXQgdGhlIHR5cGUgZm9yIHRo
aXMgU1ZHVHJhbnNmb3JtRGlzdGFuY2UKKyAgICBpZiAobV90eXBlID09IFNWR1RyYW5zZm9ybTo6
U1ZHX1RSQU5TRk9STV9VTktOT1dOKQorICAgICAgICBtX3R5cGUgPSB0cmFuc2Zvcm0udHlwZSgp
OworICAgIAorICAgIEFTU0VSVChtX3R5cGUgPT0gdHJhbnNmb3JtLnR5cGUoKSk7CisgICAgCisg
ICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9S
TV9VTktOT1dOOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19U
UkFOU0ZPUk1fTUFUUklYOgorICAgICAgICBtX3RyYW5zZm9ybSAqPSB0cmFuc2Zvcm0ubWF0cml4
KCk7IC8vIEZJWE1FOiB3aGF0IGRvZXMgJ2Rpc3RhbmNlJyBiZXR3ZWVuIHR3byB0cmFuc2Zvcm1z
IG1lYW4/ICBob3cgc2hvdWxkIHdlIHJlc3BlY3QgJ2Fic29sdXRlVmFsdWUnIGhlcmU/CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9ST1RBVEU6
CisgICAgICAgIG1fYW5nbGUgKz0gYWJzb2x1dGVWYWx1ZSA/IGZhYnNmKHRyYW5zZm9ybS5hbmds
ZSgpKSA6IHRyYW5zZm9ybS5hbmdsZSgpOworICAgICAgICAvLyBmYWxsIHRocm91Z2gKKyAgICBj
YXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEU6CisgICAgeworICAgICAg
ICBmbG9hdCBkeCA9IGFic29sdXRlVmFsdWUgPyBmYWJzZih0cmFuc2Zvcm0udHJhbnNsYXRlKCku
eCgpKSA6IHRyYW5zZm9ybS50cmFuc2xhdGUoKS54KCk7CisgICAgICAgIGZsb2F0IGR5ID0gYWJz
b2x1dGVWYWx1ZSA/IGZhYnNmKHRyYW5zZm9ybS50cmFuc2xhdGUoKS55KCkpIDogdHJhbnNmb3Jt
LnRyYW5zbGF0ZSgpLnkoKTsKKyAgICAgICAgbV90cmFuc2Zvcm0udHJhbnNsYXRlKGR4LCBkeSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFO
U0ZPUk1fU0NBTEU6CisgICAgeworICAgICAgICBmbG9hdCBzY2FsZVggPSBhYnNvbHV0ZVZhbHVl
ID8gZmFic2YodHJhbnNmb3JtLnNjYWxlKCkud2lkdGgoKSkgOiB0cmFuc2Zvcm0uc2NhbGUoKS53
aWR0aCgpOworICAgICAgICBmbG9hdCBzY2FsZVkgPSBhYnNvbHV0ZVZhbHVlID8gZmFic2YodHJh
bnNmb3JtLnNjYWxlKCkuaGVpZ2h0KCkpIDogdHJhbnNmb3JtLnNjYWxlKCkuaGVpZ2h0KCk7Cisg
ICAgICAgIG1fdHJhbnNmb3JtLnNjYWxlKHNjYWxlWCwgc2NhbGVZKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TS0VXWDoKKyAg
ICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TS0VXWToKKyAgICAgICAgbV9hbmds
ZSArPSBhYnNvbHV0ZVZhbHVlID8gZmFic2YodHJhbnNmb3JtLmFuZ2xlKCkpIDogdHJhbnNmb3Jt
LmFuZ2xlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuOworfQorCitTVkdUcmFuc2Zvcm0gU1ZHVHJhbnNmb3JtRGlz
dGFuY2U6OmFkZFRvU1ZHVHJhbnNmb3JtKGNvbnN0IFNWR1RyYW5zZm9ybSYgdHJhbnNmb3JtKSBj
b25zdAoreworICAgIEFTU0VSVChtX3R5cGUgPT0gdHJhbnNmb3JtLnR5cGUoKSk7CisgICAgCisg
ICAgU1ZHVHJhbnNmb3JtIG5ld1RyYW5zZm9ybSh0cmFuc2Zvcm0pOworICAgIAorICAgIHN3aXRj
aCAobV90eXBlKSB7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVU5LTk9X
TjoKKyAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybSgpOworICAgIGNhc2UgU1ZHVHJhbnNmb3Jt
OjpTVkdfVFJBTlNGT1JNX01BVFJJWDoKKyAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybSh0cmFu
c2Zvcm0ubWF0cml4KCkgKiBtX3RyYW5zZm9ybSk7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNW
R19UUkFOU0ZPUk1fVFJBTlNMQVRFOgorICAgIHsKKyAgICAgICAgRmxvYXRQb2ludCB0cmFuc2xh
dGlvbiA9IHRyYW5zZm9ybS50cmFuc2xhdGUoKTsKKyAgICAgICAgdHJhbnNsYXRpb24gKz0gRmxv
YXRTaXplKG1fdHJhbnNmb3JtLmUoKSwgbV90cmFuc2Zvcm0uZigpKTsKKyAgICAgICAgbmV3VHJh
bnNmb3JtLnNldFRyYW5zbGF0ZSh0cmFuc2xhdGlvbi54KCksIHRyYW5zbGF0aW9uLnkoKSk7Cisg
ICAgICAgIHJldHVybiBuZXdUcmFuc2Zvcm07CisgICAgfQorICAgIGNhc2UgU1ZHVHJhbnNmb3Jt
OjpTVkdfVFJBTlNGT1JNX1NDQUxFOgorICAgIHsKKyAgICAgICAgRmxvYXRTaXplIHNjYWxlID0g
dHJhbnNmb3JtLnNjYWxlKCk7CisgICAgICAgIHNjYWxlICs9IEZsb2F0U2l6ZShtX3RyYW5zZm9y
bS5hKCksIG1fdHJhbnNmb3JtLmQoKSk7CisgICAgICAgIG5ld1RyYW5zZm9ybS5zZXRTY2FsZShz
Y2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybiBuZXdUcmFuc2Zv
cm07CisgICAgfQorICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURToK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJJ20gbm90IGNlcnRhaW4gdGhlIHRyYW5zbGF0aW9u
IGlzIGNhbGN1bGF0ZWQgY29ycmVjdGx5IGhlcmUKKyAgICAgICAgRmxvYXRQb2ludCB0cmFuc2xh
dGlvbiA9IHRyYW5zZm9ybS50cmFuc2xhdGUoKTsKKyAgICAgICAgdHJhbnNsYXRpb24gKz0gRmxv
YXRTaXplKG1fdHJhbnNmb3JtLmUoKSwgbV90cmFuc2Zvcm0uZigpKTsKKyAgICAgICAgbmV3VHJh
bnNmb3JtLnNldFJvdGF0ZSh0cmFuc2Zvcm0uYW5nbGUoKSArIG1fYW5nbGUsIHRyYW5zbGF0aW9u
LngoKSwgdHJhbnNsYXRpb24ueSgpKTsKKyAgICAgICAgcmV0dXJuIG5ld1RyYW5zZm9ybTsKKyAg
ICB9CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0tFV1g6CisgICAgICAg
IG5ld1RyYW5zZm9ybS5zZXRTa2V3WCh0cmFuc2Zvcm0uYW5nbGUoKSArIG1fYW5nbGUpOworICAg
ICAgICByZXR1cm4gbmV3VHJhbnNmb3JtOworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJB
TlNGT1JNX1NLRVdZOgorICAgICAgICBuZXdUcmFuc2Zvcm0uc2V0U2tld1kodHJhbnNmb3JtLmFu
Z2xlKCkgKyBtX2FuZ2xlKTsKKyAgICAgICAgcmV0dXJuIG5ld1RyYW5zZm9ybTsKKyAgICB9Cisg
ICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFNWR1RyYW5zZm9ybSgp
OworfQorCitib29sIFNWR1RyYW5zZm9ybURpc3RhbmNlOjppc1plcm8oKSBjb25zdAoreworICAg
IHJldHVybiAobV90cmFuc2Zvcm0gPT0gQWZmaW5lVHJhbnNmb3JtKCkgJiYgbV9hbmdsZSA9PSAw
KTsKK30KKworZmxvYXQgU1ZHVHJhbnNmb3JtRGlzdGFuY2U6OmRpc3RhbmNlKCkgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNG
T1JNX1VOS05PV046CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpT
VkdfVFJBTlNGT1JNX1JPVEFURToKKyAgICAgICAgcmV0dXJuIHNxcnRmKG1fYW5nbGUgKiBtX2Fu
Z2xlICsgbV90cmFuc2Zvcm0uZSgpICogbV90cmFuc2Zvcm0uZSgpICsgbV90cmFuc2Zvcm0uZigp
ICogbV90cmFuc2Zvcm0uZigpKTsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9S
TV9NQVRSSVg6CisgICAgICAgIHJldHVybiAwOyAvLyBJJ20gbm90IHF1aXRlIHN1cmUgeWV0IHdo
YXQgZGlzdGFuY2UgYmV0d2VlbiB0d28gbWF0cmljZXMgbWVhbnMuCisgICAgY2FzZSBTVkdUcmFu
c2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6CisgICAgICAgIHJldHVybiBzcXJ0ZihtX3RyYW5z
Zm9ybS5hKCkgKiBtX3RyYW5zZm9ybS5hKCkgKyBtX3RyYW5zZm9ybS5kKCkgKiBtX3RyYW5zZm9y
bS5kKCkpOworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURToK
KyAgICAgICAgcmV0dXJuIHNxcnRmKG1fdHJhbnNmb3JtLmUoKSAqIG1fdHJhbnNmb3JtLmUoKSAr
IG1fdHJhbnNmb3JtLmYoKSAqIG1fdHJhbnNmb3JtLmYoKSk7CisgICAgY2FzZSBTVkdUcmFuc2Zv
cm06OlNWR19UUkFOU0ZPUk1fU0tFV1g6CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFO
U0ZPUk1fU0tFV1k6CisgICAgICAgIHJldHVybiBtX2FuZ2xlOworICAgIH0KKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IGtz
dmcyL3N2Zy9TVkdUcmFuc2Zvcm1EaXN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9T
VkdUcmFuc2Zvcm1EaXN0YW5jZS5oCShyZXZpc2lvbiAwKQorKysga3N2ZzIvc3ZnL1NWR1RyYW5z
Zm9ybURpc3RhbmNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgQ29weXJp
Z2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgCisgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0CisgCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorIAorIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UgLSBTdWl0ZSAzMzAsCisgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKwor
I2lmbmRlZiBTVkdUcmFuc2Zvcm1EaXN0YW5jZV9oCisjZGVmaW5lIFNWR1RyYW5zZm9ybURpc3Rh
bmNlX2gKKyNpZmRlZiBTVkdfU1VQUE9SVAorCisjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKKyAgICBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07Cisg
ICAgICAgIAorICAgIGNsYXNzIFNWR1RyYW5zZm9ybURpc3RhbmNlIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFNWR1RyYW5zZm9ybURpc3RhbmNlKCk7CisgICAgICAgIFNWR1RyYW5zZm9ybURpc3Rh
bmNlKGNvbnN0IFNWR1RyYW5zZm9ybSYgZnJvbVRyYW5zZm9ybSwgY29uc3QgU1ZHVHJhbnNmb3Jt
JiB0b1RyYW5zZm9ybSk7CisgICAgICAgIAorICAgICAgICBTVkdUcmFuc2Zvcm1EaXN0YW5jZSBz
Y2FsZWREaXN0YW5jZShmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7CisgICAgICAgIFNWR1RyYW5z
Zm9ybSBhZGRUb1NWR1RyYW5zZm9ybShjb25zdCBTVkdUcmFuc2Zvcm0mKSBjb25zdDsKKyAgICAg
ICAgdm9pZCBhZGRTVkdUcmFuc2Zvcm0oY29uc3QgU1ZHVHJhbnNmb3JtJiwgYm9vbCBhYnNvbHV0
ZVZhbHVlID0gZmFsc2UpOworICAgICAgICAKKyAgICAgICAgc3RhdGljIFNWR1RyYW5zZm9ybSBh
ZGRTVkdUcmFuc2Zvcm1zKGNvbnN0IFNWR1RyYW5zZm9ybSYsIGNvbnN0IFNWR1RyYW5zZm9ybSYp
OworICAgICAgICAKKyAgICAgICAgYm9vbCBpc1plcm8oKSBjb25zdDsKKyAgICAgICAgCisgICAg
ICAgIGZsb2F0IGRpc3RhbmNlKCkgY29uc3Q7CisgICAgcHJpdmF0ZToKKyAgICAgICAgU1ZHVHJh
bnNmb3JtRGlzdGFuY2UoU1ZHVHJhbnNmb3JtOjpTVkdUcmFuc2Zvcm1UeXBlLCBkb3VibGUgYW5n
bGUsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworICAgICAgICAgICAgCisgICAgICAgIFNWR1Ry
YW5zZm9ybTo6U1ZHVHJhbnNmb3JtVHlwZSBtX3R5cGU7CisgICAgICAgIGRvdWJsZSBtX2FuZ2xl
OworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07IC8vIGZvciBzdG9yaW5nIHNj
YWxlLCB0cmFuc2xhdGlvbiBvciBtYXRyaXggdHJhbnNmb3JtcworICAgIH07Cit9CisKKyNlbmRp
ZiAvLyBTVkdfU1VQUE9SVAorI2VuZGlmIC8vIFNWR1RyYW5zZm9ybURpc3RhbmNlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12656</attachid>
            <date>2007-01-24 17:04:37 -0800</date>
            <delta_ts>2007-01-24 18:07:40 -0800</delta_ts>
            <desc>a version which compiles but does not seem to work</desc>
            <filename>compile.patch</filename>
            <type>text/plain</type>
            <size>79725</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MDgzKQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNzk1LDYg
KzE3OTUsMTAgQEAKIAkJQTgzM0M4MEMwQTJDRjI1NjAwRDU3NjY0IC8qIFhNTE5hbWVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MzNDODBBMEEy
Q0YyNTYwMEQ1NzY2NCAvKiBYTUxOYW1lcy5jcHAgKi87IH07CiAJCUE4MzNDODBEMEEyQ0YyNTYw
MEQ1NzY2NCAvKiBYTUxOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTgzM0M4MEIwQTJDRjI1NjAwRDU3NjY0IC8qIFhNTE5hbWVzLmggKi87IH07
CiAJCUE4MzNDODUyMEEyQ0Y1MjgwMEQ1NzY2NCAvKiBTVkdFbGVtZW50RmFjdG9yeS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTY1ODFFNjA5RDE1
MDhEMDAwRTYxRDcgLyogU1ZHRWxlbWVudEZhY3RvcnkuY3BwICovOyB9OworCQlBODQ5NDJEOTBC
NjRBOUNBMDA2OUYwMEYgLyogQ29sb3JEaXN0YW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg0OTQyRDcwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9y
RGlzdGFuY2UuaCAqLzsgfTsKKwkJQTg0OTQyREEwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlz
dGFuY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTg0OTQyRDgwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlzdGFuY2UuY3BwICovOyB9OworCQlB
ODQ5NDdBRDBCNjdGNEExMDA2OUYwMEYgLyogU1ZHVHJhbnNmb3JtRGlzdGFuY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NDk0N0FCMEI2N0Y0QTEw
MDY5RjAwRiAvKiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5oICovOyB9OworCQlBODQ5NDdBRTBCNjdG
NEExMDA2OUYwMEYgLyogU1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg0OTQ3QUMwQjY3RjRBMTAwNjlGMDBGIC8q
IFNWR1RyYW5zZm9ybURpc3RhbmNlLmNwcCAqLzsgfTsKIAkJQTg2NjI5Q0YwOURBMkI0NzAwOTYz
M0E1IC8qIEpTVUlFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTg2NjI5QzkwOURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5oICovOyB9Owog
CQlBODY2MjlEMDA5REEyQjQ4MDA5NjMzQTUgLyogSlNVSUV2ZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NjYyOUNBMDlEQTJCNDcwMDk2MzNB
NSAvKiBKU1VJRXZlbnQuY3BwICovOyB9OwogCQlBODY2MjlEMTA5REEyQjQ4MDA5NjMzQTUgLyog
SlNNb3VzZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBODY2MjlDQjA5REEyQjQ3MDA5NjMzQTUgLyogSlNNb3VzZUV2ZW50LmggKi87IH07CkBA
IC00ODE0LDYgKzQ4MTgsMTAgQEAKIAkJQTgzM0M3RjYwQTJDRjFEODAwRDU3NjY0IC8qIHhtbGF0
dHJzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSB4bWxhdHRycy5pbjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTgzM0M4MEEwQTJDRjI1NjAwRDU3NjY0IC8qIFhNTE5hbWVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxOYW1lcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MzNDODBCMEEyQ0YyNTYwMEQ1NzY2NCAvKiBY
TUxOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1MTmFtZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTg0OTQyRDcwQjY0QTlDQTAwNjlGMDBGIC8q
IENvbG9yRGlzdGFuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29sb3JE
aXN0YW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBODQ5NDJEODBCNjRBOUNB
MDA2OUYwMEYgLyogQ29sb3JEaXN0YW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDb2xvckRpc3RhbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTg0OTQ3QUIwQjY3RjRBMTAwNjlGMDBGIC8qIFNWR1RyYW5zZm9ybURpc3RhbmNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1RyYW5zZm9ybURpc3RhbmNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4NDk0N0FDMEI2N0Y0QTEwMDY5RjAwRiAvKiBT
VkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE4NUQ3QTJGMDg3OUVCQTkwMDZBOTE3MiAvKiBRdWFydHpDb3JlLmZyYW1ld29yayAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJh
bWV3b3JrOyBuYW1lID0gUXVhcnR6Q29yZS5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9RdWFydHpDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1
dGU+IjsgfTsKIAkJQTg2NjI5QzkwOURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVSUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE4NjYyOUNBMDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVUlFdmVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MTgwLDYgKzgxODgsOCBAQAogCQlBOEMwRjdG
QzA4OTcwMUYzMDBCQTUxMTQgLyogc3ZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQlBODQ5NDJEODBCNjRBOUNBMDA2OUYwMEYgLyogQ29sb3JEaXN0YW5j
ZS5jcHAgKi8sCisJCQkJQTg0OTQyRDcwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlzdGFuY2Uu
aCAqLywKIAkJCQlCMkRERjA2NjBCNDgyQTAzMDA2NEE0QjEgLyogR3JhZGllbnRBdHRyaWJ1dGVz
LmggKi8sCiAJCQkJQjI1QUU1NUQwQjQ5RDY2MzAwNzRDNzI2IC8qIExpbmVhckdyYWRpZW50QXR0
cmlidXRlcy5oICovLAogCQkJCUIyRERGMDY0MEI0ODI5RkEwMDY0QTRCMSAvKiBQYXR0ZXJuQXR0
cmlidXRlcy5oICovLApAQCAtODUyMyw2ICs4NTMzLDggQEAKIAkJCQlBOEMwRjhERDA4OTcwMUY0
MDBCQTUxMTQgLyogU1ZHVHJhbnNmb3JtYWJsZS5jcHAgKi8sCiAJCQkJQThDMEY4REUwODk3MDFG
NDAwQkE1MTE0IC8qIFNWR1RyYW5zZm9ybWFibGUuaCAqLywKIAkJCQlCMkNCNDE1QjBBQjc1OTA0
MDA0RDlDNDUgLyogU1ZHVHJhbnNmb3JtYWJsZS5pZGwgKi8sCisJCQkJQTg0OTQ3QUMwQjY3RjRB
MTAwNjlGMDBGIC8qIFNWR1RyYW5zZm9ybURpc3RhbmNlLmNwcCAqLywKKwkJCQlBODQ5NDdBQjBC
NjdGNEExMDA2OUYwMEYgLyogU1ZHVHJhbnNmb3JtRGlzdGFuY2UuaCAqLywKIAkJCQlBOEMwRjhF
MTA4OTcwMUY0MDBCQTUxMTQgLyogU1ZHVHJhbnNmb3JtTGlzdC5jcHAgKi8sCiAJCQkJQThDMEY4
RTIwODk3MDFGNDAwQkE1MTE0IC8qIFNWR1RyYW5zZm9ybUxpc3QuaCAqLywKIAkJCQlCMkNCNDE1
QzBBQjc1OTA0MDA0RDlDNDUgLyogU1ZHVHJhbnNmb3JtTGlzdC5pZGwgKi8sCkBAIC0xMTA1MCw3
ICsxMTA2Miw5IEBACiAJCQkJQjI0MDU1NjYwQjVCRTY0MDAwMkEyOEMwIC8qIERPTVNWR0VsZW1l
bnRJbnN0YW5jZUxpc3RJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyQTY4MjQwQjVC
RURFNzAwMDJBNDgwIC8qIFByb2dyZXNzVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgw
Q0VCQUMwQjYwRkM0OTAwNzYzN0MxIC8qIFNWR01QYXRoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTg0OTQyRDkwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlzdGFuY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUxRTZFRUE4MEI2MjhEQjMwMDVGMkY3MCAvKiBKU0hUTUxTZWxlY3RFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlBODQ5NDdBRDBCNjdGNEExMDA2OUYwMEYgLyogU1ZH
VHJhbnNmb3JtRGlzdGFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTIzOTYsOSArMTI0MTAsMTEg
QEAKIAkJCQlBNzg0OTQxQjBCNUZFNTA3MDAxRTIzN0EgLyogQ2xpcGJvYXJkLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzNEZFOUU1MEI1Q0E1MzkwMDNFNEE3MyAvKiBGaWxlQ2hvb3Nlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBODBDRUJBRDBCNjBGQzQ5MDA3NjM3QzEgLyogU1ZHTVBhdGhF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4NDk0MkRBMEI2NEE5Q0EwMDY5RjAwRiAv
KiBDb2xvckRpc3RhbmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRTZFRUE0MEI2MjhEQTgw
MDVGMkY3MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTky
OTI2NDc3MEI2MUZDNzIwMEI0MUQzNCAvKiBKU0RvY3VtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDMTdGOTY2MEI2NEVCQjgwMDRBNjVDQiAvKiBKU0hUTUxTZWxlY3RFbGVtZW50
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4NDk0N0FFMEI2N0Y0QTEwMDY5RjAwRiAv
KiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IGtzdmcyL21p
c2MvU1ZHVGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL21pc2MvU1ZHVGltZXIuY3BwCShy
ZXZpc2lvbiAxOTA4MykKKysrIGtzdmcyL21pc2MvU1ZHVGltZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Myw4MSArODMsMzYgQEAgU1ZHVGltZXI6OlRhcmdldEFuaW1hdGlvbk1hcCBTVkdUaW1l
cjo6YQogICAgIHJldHVybiB0YXJnZXRNYXA7CiB9CiAKLS8vIEZJWE1FOiBFdmVudHVhbGx5IHRo
aXMgbG9naWMgd2lsbCBtb3ZlIGludG8gYW4gQW5pbWF0aW9uQ29tcG9zaXRvciBjbGFzcwotLy8g
RklYTUU6IEkgYWxzbyB0aGluayB0aGlzIGFsc28gdmlvbGF0ZXMgdGhlIHNwZWMuICBXZSBzaG91
bGQgcHJvYmFibHkganVzdCBjb3B5IHRoZSBiYXNlVmFsdWUgYW5kIG5vdCBjb25zb2xpZGF0ZQot
c3RhdGljIFBhc3NSZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4gYmFzZVZhbHVlVHJhbnNmb3JtTGlz
dChTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50KQotewotICAgIEFTU0VSVCh0YXJnZXRFbGVtZW50
LT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSk7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQqIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50Kj4odGFyZ2V0RWxlbWVudCk7Ci0gICAgUmVmUHRyPFNWR1RyYW5zZm9ybUxpc3Q+IHRhcmdl
dFRyYW5zZm9ybXMgPSBuZXcgU1ZHVHJhbnNmb3JtTGlzdCgpOwotICAgIFNWR1RyYW5zZm9ybUxp
c3QqIHRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm0tPnRyYW5zZm9ybUJhc2VWYWx1ZSgpOwotICAg
IGlmICh0cmFuc2Zvcm1MaXN0KSB7Ci0gICAgICAgIFNWR1RyYW5zZm9ybSBpbml0aWFsVHJhbnNm
b3JtID0gdHJhbnNmb3JtTGlzdC0+Y29uY2F0ZW5hdGUoKTsKLSAgICAgICAgaWYgKGluaXRpYWxU
cmFuc2Zvcm0uaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAg
ICAgICAgICAgdGFyZ2V0VHJhbnNmb3Jtcy0+YXBwZW5kSXRlbShpbml0aWFsVHJhbnNmb3JtLCBl
Yyk7Ci0gICAgICAgICAgICByZXR1cm4gdGFyZ2V0VHJhbnNmb3Jtcy5yZWxlYXNlKCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRhcmdldFRyYW5zZm9ybXM7Ci19Ci0KIC8vIEZJWE1F
OiBUaGlzIGZ1bnRpb24gd2lsbCBldmVudHVhbGx5IGJlY29tZSBwYXJ0IG9mIHRoZSBBbmltYXRp
b25Db21wb3NpdG9yCiB2b2lkIFNWR1RpbWVyOjphcHBseUFuaW1hdGlvbnMoZG91YmxlIGVsYXBz
ZWRTZWNvbmRzLCBjb25zdCBTVkdUaW1lcjo6VGFyZ2V0QW5pbWF0aW9uTWFwJiB0YXJnZXRNYXAp
CiB7ICAgIAogICAgIFRhcmdldEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgdGFyZ2V0SXRl
cmF0b3IgPSB0YXJnZXRNYXAuYmVnaW4oKTsKICAgICBUYXJnZXRBbmltYXRpb25NYXA6OmNvbnN0
X2l0ZXJhdG9yIHRlbmQgPSB0YXJnZXRNYXAuZW5kKCk7CiAgICAgZm9yICg7IHRhcmdldEl0ZXJh
dG9yICE9IHRlbmQ7ICsrdGFyZ2V0SXRlcmF0b3IpIHsKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcs
IENvbG9yPiBhdHRyaWJ1dGVUb0NvbG9yTWFwOyAvLyBzcGVjaWFsIDxhbmltYXRlQ29sb3I+IGNh
c2UKLSAgICAgICAgUmVmUHRyPFNWR1RyYW5zZm9ybUxpc3Q+IHRhcmdldFRyYW5zZm9ybXM7IC8v
IHNwZWNpYWwgPGFuaW1hdGVUcmFuc2Zvcm0+IGNhc2UKLSAgICAgICAgCiAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIHN0aWxsIG5vdCAxMDAlIGNvcnJlY3QuICBDb3JyZWN0IHdvdWxkIGJlOgog
ICAgICAgICAvLyAxLiBXYWxrIGJhY2t3YXJkcyB0aHJvdWdoIHRoZSBwcmlvcml0eSBsaXN0IHVu
dGlsIGEgcmVwbGFjZSAoIWlzQWRkaXRpdmUoKSkgaXMgZm91bmQKKyAgICAgICAgLy8gLS0gVGhp
cyBvcHRpbWl6YXRpb24gaXMgbm90IHBvc3NpYmxlIHdpdGhvdXQgY2FyZWZ1bCBjb25zaWRlcmF0
aW9uIGZvciBkZXBlbmRlbnQgdmFsdWVzIChzdWNoIGFzIGN4IGFuZCBmeCBpbiBTVkdSYWRpYWxH
cmFkaWVudCkKICAgICAgICAgLy8gMi4gU2V0IHRoZSBpbml0aWFsIHZhbHVlIChvciBsYXN0IHJl
cGxhY2UpIGFzIHRoZSBuZXcgYW5pbVZhbAogICAgICAgICAvLyAzLiBDYWxsIGVhY2ggZW5hYmxl
ZCBhbmltYXRpb24gaW4gdHVybiwgdG8gaGF2ZSBpdCBhcHBseSBpdHMgY2hhbmdlcwogICAgICAg
ICAvLyA0LiBBZnRlciBidWlsZGluZyBhIG5ldyBhbmltVmFsLCBzZXQgaXQgb24gdGhlIGVsZW1l
bnQuCiAgICAgICAgIAorICAgICAgICAvLyBDdXJyZW5seSB3ZSB1c2UgdGhlIGFjdHVhbCBhbmlt
VmFsIG9uIHRoZSBlbGVtZW50IGFzICJ0ZW1wb3Jhcnkgc3RvcmFnZSIKKyAgICAgICAgLy8gYW5k
IGFic3RyYWN0IHRoZSBnZXR0aW5nL3NldHRpbmcgb2YgdGhlIGF0dHJpYnV0ZXMgaW50byB0aGUg
U1ZHQW5pbWF0ZSogY2xhc3NlcworICAgICAgICAKICAgICAgICAgdW5zaWduZWQgY291bnQgPSB0
YXJnZXRJdGVyYXRvci0+c2Vjb25kLnNpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQqIGFu
aW1hdGlvbiA9IHRhcmdldEl0ZXJhdG9yLT5zZWNvbmRbaV07CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmICghYW5pbWF0aW9uLT5oYXNWYWxpZFRhcmdldCgpKQorICAgICAgICAgICAgaWYg
KCFhbmltYXRpb24tPmlzVmFsaWRBbmltYXRpb24oKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFhbmltYXRpb24tPnVwZGF0ZUZvckVs
YXBzZWRTZWNvbmRzKGVsYXBzZWRTZWNvbmRzKSkKKyAgICAgICAgICAgIGlmICghYW5pbWF0aW9u
LT51cGRhdGVBbmltYXRpb25CYXNlVmFsdWVGcm9tRWxlbWVudCgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIXRhcmdldFRyYW5zZm9y
bXMgJiYgKGFuaW1hdGlvbi0+aGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0ZVRyYW5zZm9ybVRh
ZykgfHwgYW5pbWF0aW9uLT5oYXNUYWdOYW1lKFNWR05hbWVzOjphbmltYXRlTW90aW9uVGFnKSkp
Ci0gICAgICAgICAgICAgICAgdGFyZ2V0VHJhbnNmb3JtcyA9IGJhc2VWYWx1ZVRyYW5zZm9ybUxp
c3QoYW5pbWF0aW9uLT50YXJnZXRFbGVtZW50KCkpOworICAgICAgICAgICAgaWYgKCFhbmltYXRp
b24tPnVwZGF0ZUFuaW1hdGVkVmFsdWVGb3JFbGFwc2VkU2Vjb25kcyhlbGFwc2VkU2Vjb25kcykp
CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChhbmltYXRpb24tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVUcmFuc2Zvcm1UYWcpKQot
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Kj4o
YW5pbWF0aW9uKS0+YXBwbHlBbmltYXRpb25Ub1ZhbHVlKHRhcmdldFRyYW5zZm9ybXMuZ2V0KCkp
OwotICAgICAgICAgICAgZWxzZSBpZiAoYW5pbWF0aW9uLT5oYXNUYWdOYW1lKFNWR05hbWVzOjph
bmltYXRlTW90aW9uVGFnKSkKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxTVkdBbmltYXRl
TW90aW9uRWxlbWVudCo+KGFuaW1hdGlvbiktPmFwcGx5QW5pbWF0aW9uVG9WYWx1ZSh0YXJnZXRU
cmFuc2Zvcm1zLmdldCgpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGFuaW1hdGlvbi0+aGFzVGFn
TmFtZShTVkdOYW1lczo6YW5pbWF0ZUNvbG9yVGFnKSkgewotICAgICAgICAgICAgICAgIFNWR0Fu
aW1hdGVDb2xvckVsZW1lbnQqIGFuaW1Db2xvciA9IHN0YXRpY19jYXN0PFNWR0FuaW1hdGVDb2xv
ckVsZW1lbnQqPihhbmltYXRpb24pOwotICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gYW5p
bUNvbG9yLT5hdHRyaWJ1dGVOYW1lKCk7Ci0gICAgICAgICAgICAgICAgQ29sb3IgY3VycmVudENv
bG9yID0gYXR0cmlidXRlVG9Db2xvck1hcC5jb250YWlucyhuYW1lKSA/IGF0dHJpYnV0ZVRvQ29s
b3JNYXAuZ2V0KG5hbWUpIDogYW5pbUNvbG9yLT5pbml0aWFsQ29sb3IoKTsKLSAgICAgICAgICAg
ICAgICBhbmltQ29sb3ItPmFwcGx5QW5pbWF0aW9uVG9WYWx1ZShjdXJyZW50Q29sb3IpOwotICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZVRvQ29sb3JNYXAuc2V0KG5hbWUsIGN1cnJlbnRDb2xvcik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEFwcGx5IGFu
eSB0cmFuc2Zvcm0gY2hhbmdlcyAoYW5pbWF0ZVRyYW5zZm9ybSAmIGFuaW1hdGVNb3Rpb24pCi0g
ICAgICAgIGlmICh0YXJnZXRUcmFuc2Zvcm1zKSB7Ci0gICAgICAgICAgICBTVkdFbGVtZW50KiBr
ZXkgPSB0YXJnZXRJdGVyYXRvci0+Zmlyc3Q7Ci0gICAgICAgICAgICBpZiAoa2V5ICYmIGtleS0+
aXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQqPihrZXkpOwotICAgICAgICAgICAgICAgIHRyYW5zZm9ybS0+c2V0VHJh
bnNmb3JtKHRhcmdldFRyYW5zZm9ybXMuZ2V0KCkpOwotICAgICAgICAgICAgICAgIHRyYW5zZm9y
bS0+dXBkYXRlTG9jYWxUcmFuc2Zvcm0odHJhbnNmb3JtLT50cmFuc2Zvcm0oKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEFwcGx5IGFueSBjb2xvciBj
aGFuZ2VzIChhbmltYXRlQ29sb3IpCi0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDb2xvcj46Oml0
ZXJhdG9yIGNvbG9ySXRlcmF0b3JFbmQgPSBhdHRyaWJ1dGVUb0NvbG9yTWFwLmVuZCgpOwotICAg
ICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDb2xvcj46Oml0ZXJhdG9yIGNvbG9ySXRlcmF0b3Ig
PSBhdHRyaWJ1dGVUb0NvbG9yTWFwLmJlZ2luKCk7IGNvbG9ySXRlcmF0b3IgIT0gY29sb3JJdGVy
YXRvckVuZDsgKytjb2xvckl0ZXJhdG9yKSB7Ci0gICAgICAgICAgICBpZiAoY29sb3JJdGVyYXRv
ci0+c2Vjb25kLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBTVkdBbmltYXRpb25FbGVtZW50
OjpzZXRUYXJnZXRBdHRyaWJ1dGUodGFyZ2V0SXRlcmF0b3ItPmZpcnN0LCBjb2xvckl0ZXJhdG9y
LT5maXJzdCwgY29sb3JJdGVyYXRvci0+c2Vjb25kLm5hbWUoKSk7CisgICAgICAgICAgICBhbmlt
YXRpb24tPmFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCgpOwogICAgICAgICB9CiAgICAgfQog
ICAgIApJbmRleDoga3N2ZzIvc3ZnL0NvbG9yRGlzdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtz
dmcyL3N2Zy9Db2xvckRpc3RhbmNlLmNwcAkocmV2aXNpb24gMCkKKysrIGtzdmcyL3N2Zy9Db2xv
ckRpc3RhbmNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyBDb3B5cmln
aHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAKKyBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QKKyAKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSAtIFN1aXRlIDMzMCwKKyBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJDb2xvckRp
c3RhbmNlLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitD
b2xvckRpc3RhbmNlOjpDb2xvckRpc3RhbmNlKCkKKyAgICA6IG1fcmVkRGlmZigwKQorICAgICwg
bV9ibHVlRGlmZigwKQorICAgICwgbV9ncmVlbkRpZmYoMCkKK3sKK30KKworQ29sb3JEaXN0YW5j
ZTo6Q29sb3JEaXN0YW5jZShjb25zdCBDb2xvciYgZnJvbUNvbG9yLCBjb25zdCBDb2xvciYgdG9D
b2xvcikKKyAgICA6IG1fcmVkRGlmZih0b0NvbG9yLnJlZCgpIC0gZnJvbUNvbG9yLnJlZCgpKQor
ICAgICwgbV9ibHVlRGlmZih0b0NvbG9yLmJsdWUoKSAtIGZyb21Db2xvci5ibHVlKCkpCisgICAg
LCBtX2dyZWVuRGlmZih0b0NvbG9yLmdyZWVuKCkgLSBmcm9tQ29sb3IuZ3JlZW4oKSkKK3sKK30K
KworQ29sb3JEaXN0YW5jZTo6Q29sb3JEaXN0YW5jZShpbnQgcmVkRGlmZiwgaW50IGJsdWVEaWZm
LCBpbnQgZ3JlZW5EaWZmKQorICAgIDogbV9yZWREaWZmKHJlZERpZmYpCisgICAgLCBtX2JsdWVE
aWZmKGJsdWVEaWZmKQorICAgICwgbV9ncmVlbkRpZmYoZ3JlZW5EaWZmKQoreworfQorCitzdGF0
aWMgaW5saW5lIGludCBjbGFtcENvbG9yVmFsdWUoaW50IHYpCit7CisgICAgaWYgKHYgPiAyNTUp
CisgICAgICAgIHYgPSAyNTU7CisgICAgZWxzZSBpZiAodiA8IDApCisgICAgICAgIHYgPSAwOwor
ICAgIHJldHVybiB2OworfQorCitDb2xvckRpc3RhbmNlIENvbG9yRGlzdGFuY2U6OnNjYWxlZERp
c3RhbmNlKGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAoreworICAgIHJldHVybiBDb2xvckRpc3Rh
bmNlKHNjYWxlRmFjdG9yICogbV9yZWREaWZmLCBzY2FsZUZhY3RvciAqIG1fYmx1ZURpZmYsIHNj
YWxlRmFjdG9yICogbV9ncmVlbkRpZmYpOworfQorCitDb2xvciBDb2xvckRpc3RhbmNlOjphZGRD
b2xvcnNBbmRDbGFtcChjb25zdCBDb2xvciYgZmlyc3QsIGNvbnN0IENvbG9yJiBzZWNvbmQpCit7
CisgICAgcmV0dXJuIENvbG9yKGNsYW1wQ29sb3JWYWx1ZShmaXJzdC5yZWQoKSArIHNlY29uZC5y
ZWQoKSksCisgICAgICAgICAgICAgICAgIGNsYW1wQ29sb3JWYWx1ZShmaXJzdC5ncmVlbigpICsg
c2Vjb25kLmdyZWVuKCkpLAorICAgICAgICAgICAgICAgICBjbGFtcENvbG9yVmFsdWUoc2Vjb25k
LmJsdWUoKSArIHNlY29uZC5ibHVlKCkpKTsKK30KKworQ29sb3IgQ29sb3JEaXN0YW5jZTo6YWRk
VG9Db2xvckFuZENsYW1wKGNvbnN0IENvbG9yJiBjb2xvcikgY29uc3QKK3sKKyAgICByZXR1cm4g
Q29sb3IoY2xhbXBDb2xvclZhbHVlKGNvbG9yLnJlZCgpICsgbV9yZWREaWZmKSwKKyAgICAgICAg
ICAgICAgICAgY2xhbXBDb2xvclZhbHVlKGNvbG9yLmdyZWVuKCkgKyBtX2JsdWVEaWZmKSwKKyAg
ICAgICAgICAgICAgICAgY2xhbXBDb2xvclZhbHVlKGNvbG9yLmJsdWUoKSArIG1fZ3JlZW5EaWZm
KSk7Cit9CisKK2Jvb2wgQ29sb3JEaXN0YW5jZTo6aXNaZXJvKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gKG1fcmVkRGlmZiA9PSAwICYmIG1fYmx1ZURpZmYgPT0gMCAmJiBtX2dyZWVuRGlmZiA9PSAw
KTsKK30KKworZmxvYXQgQ29sb3JEaXN0YW5jZTo6ZGlzdGFuY2UoKSBjb25zdAoreworICAgIC8v
IFRoaXMgaXMganVzdCBhIHNpbXBsZSBkaXN0YW5jZSBjYWxjdWxhdGlvbiwgbm90IHJlc3BlY3Rp
bmcgY29sb3Igc3BhY2VzCisgICAgcmV0dXJuIHNxcnRmKG1fcmVkRGlmZiAqIG1fcmVkRGlmZiAr
IG1fYmx1ZURpZmYgKiBtX2JsdWVEaWZmICsgbV9ncmVlbkRpZmYgKiBtX2dyZWVuRGlmZik7Cit9
CisKK30KKworI2VuZGlmCkluZGV4OiBrc3ZnMi9zdmcvQ29sb3JEaXN0YW5jZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtzdmcyL3N2Zy9Db2xvckRpc3RhbmNlLmgJKHJldmlzaW9uIDApCisrKyBrc3ZnMi9z
dmcvQ29sb3JEaXN0YW5jZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACisvKgorIENv
cHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorIAorIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdAorIAorIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCisgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVt
cGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICov
CisKKyNpZm5kZWYgQ29sb3JEaXN0YW5jZV9oCisjZGVmaW5lIENvbG9yRGlzdGFuY2VfaAorI2lm
ZGVmIFNWR19TVVBQT1JUCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKKyAgICBjbGFzcyBD
b2xvcjsKKworICAgIGNsYXNzIENvbG9yRGlzdGFuY2UgeworICAgIHB1YmxpYzoKKyAgICAgICAg
Q29sb3JEaXN0YW5jZSgpOworICAgICAgICBDb2xvckRpc3RhbmNlKGNvbnN0IENvbG9yJiBmcm9t
Q29sb3IsIGNvbnN0IENvbG9yJiB0b0NvbG9yKTsKKyAgICAgICAgQ29sb3JEaXN0YW5jZShpbnQg
cmVkRGlmZiwgaW50IGJsdWVEaWZmLCBpbnQgZ3JlZW5EaWZmKTsKKyAgICAgICAgCisgICAgICAg
IENvbG9yRGlzdGFuY2Ugc2NhbGVkRGlzdGFuY2UoZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Owor
ICAgICAgICBDb2xvciBhZGRUb0NvbG9yQW5kQ2xhbXAoY29uc3QgQ29sb3ImKSBjb25zdDsKKyAg
ICAgICAgCisgICAgICAgIHN0YXRpYyBDb2xvciBhZGRDb2xvcnNBbmRDbGFtcChjb25zdCBDb2xv
ciYsIGNvbnN0IENvbG9yJik7CisgICAgICAgIAorICAgICAgICBib29sIGlzWmVybygpIGNvbnN0
OworICAgICAgICAKKyAgICAgICAgZmxvYXQgZGlzdGFuY2UoKSBjb25zdDsKKyAgICAgICAgCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgaW50IG1fcmVkRGlmZjsKKyAgICAgICAgaW50IG1fYmx1ZURp
ZmY7CisgICAgICAgIGludCBtX2dyZWVuRGlmZjsKKyAgICB9OworfQorCisjZW5kaWYgLy8gU1ZH
X1NVUFBPUlQKKyNlbmRpZiAvLyBDb2xvckRpc3RhbmNlX2gKSW5kZXg6IGtzdmcyL3N2Zy9TVkdB
bmltYXRlQ29sb3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQW5pbWF0
ZUNvbG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5MDgzKQorKysga3N2ZzIvc3ZnL1NWR0FuaW1h
dGVDb2xvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMiArMzcsNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OlNWR0FuaW1hdGVDb2xv
ckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAg
ICA6IFNWR0FuaW1hdGlvbkVsZW1lbnQodGFnTmFtZSwgZG9jKQotICAgICwgbV90b0NvbG9yKG5l
dyBTVkdDb2xvcigpKQotICAgICwgbV9mcm9tQ29sb3IobmV3IFNWR0NvbG9yKCkpCi0gICAgLCBt
X2N1cnJlbnRJdGVtKC0xKQotICAgICwgbV9yZWREaWZmKDApCi0gICAgLCBtX2dyZWVuRGlmZigw
KQotICAgICwgbV9ibHVlRGlmZigwKQogewogfQogCkBAIC01MCwxNzcgKzQ0LDYwIEBAIFNWR0Fu
aW1hdGVDb2xvckVsZW1lbnQ6On5TVkdBbmltYXRlQ29sb3IKIHsKIH0KIAotdm9pZCBjYWxjdWxh
dGVDb2xvckRpZmZlcmVuY2UoY29uc3QgQ29sb3ImIGZpcnN0LCBjb25zdCBDb2xvciYgc2Vjb25k
LCBpbnQmIHJlZERpZmYsIGludCYgZ3JlZW5EaWZmLCBpbnQmIGJsdWVEaWZmKQorYm9vbCBTVkdB
bmltYXRlQ29sb3JFbGVtZW50Ojp1cGRhdGVBbmltYXRpb25CYXNlVmFsdWVGcm9tRWxlbWVudCgp
CiB7Ci0gICAgcmVkRGlmZiA9IGZpcnN0LnJlZCgpIC0gc2Vjb25kLnJlZCgpOwotICAgIGdyZWVu
RGlmZiA9IGZpcnN0LmdyZWVuKCkgLSBzZWNvbmQuZ3JlZW4oKTsKLSAgICBibHVlRGlmZiA9IGZp
cnN0LmJsdWUoKSAtIHNlY29uZC5ibHVlKCk7Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0ZUNvbG9yRWxl
bWVudDo6c3RvcmVJbml0aWFsVmFsdWUoKQotewotICAgIG1faW5pdGlhbENvbG9yID0gU1ZHQ29s
b3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKHRhcmdldEF0dHJpYnV0ZSgpKTsKLX0KLQotdm9p
ZCBTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpyZXNldFZhbHVlcygpCi17Ci0gICAgbV9jdXJyZW50
SXRlbSA9IC0xOwotICAgIG1fcmVkRGlmZiA9IDA7Ci0gICAgbV9ncmVlbkRpZmYgPSAwOwotICAg
IG1fYmx1ZURpZmYgPSAwOwotfQotCi1ib29sIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OnVwZGF0
ZUN1cnJlbnRWYWx1ZShkb3VibGUgdGltZVBlcmNlbnRhZ2UpCi17Ci0gICAgaW50IHIgPSAwLCBn
ID0gMCwgYiA9IDA7Ci0gICAgaWYgKChtX3JlZERpZmYgIT0gMCB8fCBtX2dyZWVuRGlmZiAhPSAw
IHx8IG1fYmx1ZURpZmYgIT0gMCkgJiYgIW1fdmFsdWVzKQotICAgICAgICBjYWxjdWxhdGVDb2xv
cih0aW1lUGVyY2VudGFnZSwgciwgZywgYik7Ci0gICAgZWxzZSBpZiAobV92YWx1ZXMpIHsKLSAg
ICAgICAgaW50IGl0ZW1CeVBlcmNlbnRhZ2UgPSBjYWxjdWxhdGVDdXJyZW50VmFsdWVJdGVtKHRp
bWVQZXJjZW50YWdlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChpdGVtQnlQZXJjZW50YWdlID09
IC0xKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgaWYgKG1f
Y3VycmVudEl0ZW0gIT0gaXRlbUJ5UGVyY2VudGFnZSkgeyAvLyBJdGVtIGNoYW5nZWQuLi4KLSAg
ICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAvLyBFeHRyYWN0IGN1cnJlbnQgJ2Zyb20nIC8gJ3RvJyB2YWx1ZXMKLSAgICAgICAgICAgIFN0
cmluZyB2YWx1ZTEgPSBtX3ZhbHVlcy0+Z2V0SXRlbShpdGVtQnlQZXJjZW50YWdlLCBlYyk7Ci0g
ICAgICAgICAgICBTdHJpbmcgdmFsdWUyID0gbV92YWx1ZXMtPmdldEl0ZW0oaXRlbUJ5UGVyY2Vu
dGFnZSArIDEsIGVjKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHIv
Zy9iIHNoaWZ0aW5nIHZhbHVlcy4uLgotICAgICAgICAgICAgaWYgKCF2YWx1ZTEuaXNFbXB0eSgp
ICYmICF2YWx1ZTIuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBhcHBseSA9IGZh
bHNlOwotICAgICAgICAgICAgICAgIGlmIChtX3JlZERpZmYgIT0gMCB8fCBtX2dyZWVuRGlmZiAh
PSAwIHx8IG1fYmx1ZURpZmYgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICByID0gbV90b0Nv
bG9yLT5jb2xvcigpLnJlZCgpOwotICAgICAgICAgICAgICAgICAgICBnID0gbV90b0NvbG9yLT5j
b2xvcigpLmdyZWVuKCk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBtX3RvQ29sb3ItPmNvbG9y
KCkuYmx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgYXBw
bHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBtX3RvQ29sb3ItPnNldFJHQkNvbG9yKHZhbHVlMik7Ci0gICAgICAgICAgICAgICAg
bV9mcm9tQ29sb3ItPnNldFJHQkNvbG9yKHZhbHVlMSk7Ci0gICAgICAgICAgICAgICAgY2FsY3Vs
YXRlQ29sb3JEaWZmZXJlbmNlKG1fdG9Db2xvci0+Y29sb3IoKSwgbV9mcm9tQ29sb3ItPmNvbG9y
KCksIG1fcmVkRGlmZiwgbV9ncmVlbkRpZmYsIG1fYmx1ZURpZmYpOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIG1fY3VycmVudEl0ZW0gPSBpdGVtQnlQZXJjZW50YWdlOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghYXBwbHkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICht
X3JlZERpZmYgIT0gMCB8fCBtX2dyZWVuRGlmZiAhPSAwIHx8IG1fYmx1ZURpZmYgIT0gMCkgewot
ICAgICAgICAgICAgZG91YmxlIHJlbGF0aXZlVGltZSA9IGNhbGN1bGF0ZVJlbGF0aXZlVGltZVBl
cmNlbnRhZ2UodGltZVBlcmNlbnRhZ2UsIG1fY3VycmVudEl0ZW0pOwotICAgICAgICAgICAgY2Fs
Y3VsYXRlQ29sb3IocmVsYXRpdmVUaW1lLCByLCBnLCBiKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICAKLSAgICBpZiAoIWlzRnJvemVuKCkgJiYgdGltZVBlcmNlbnRhZ2UgPT0gMS4wKSB7Ci0gICAg
ICAgIHIgPSBtX2luaXRpYWxDb2xvci5yZWQoKTsKLSAgICAgICAgZyA9IG1faW5pdGlhbENvbG9y
LmdyZWVuKCk7Ci0gICAgICAgIGIgPSBtX2luaXRpYWxDb2xvci5ibHVlKCk7Ci0gICAgfQotICAg
IAotICAgIGlmIChpc0FjY3VtdWxhdGVkKCkgJiYgcmVwZWF0aW9ucygpICE9IDAuMCkgewotICAg
ICAgICByICs9IG1fbGFzdENvbG9yLnJlZCgpOwotICAgICAgICBnICs9IG1fbGFzdENvbG9yLmdy
ZWVuKCk7Ci0gICAgICAgIGIgKz0gbV9sYXN0Q29sb3IuYmx1ZSgpOwotICAgIH0KLSAgICAKLSAg
ICBtX2N1cnJlbnRDb2xvciA9IGNsYW1wQ29sb3IociwgZywgYik7CisgICAgbV9iYXNlQ29sb3Ig
PSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcodGFyZ2V0QXR0cmlidXRlQW5pbWF0
ZWRWYWx1ZSgpKTsKKyAgICBtX2NvbG9yRGlzdGFuY2UgPSBDb2xvckRpc3RhbmNlKCk7CisgICAg
bV9mcm9tQ29sb3IgPSBDb2xvcigpOworICAgIG1fdG9Db2xvciA9IENvbG9yKCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6aGFuZGxlU3RhcnRD
b25kaXRpb24oKQotewotICAgIHN0b3JlSW5pdGlhbFZhbHVlKCk7Ci0gICAgCi0gICAgc3dpdGNo
IChkZXRlY3RBbmltYXRpb25Nb2RlKCkpIHsKLSAgICAgICAgY2FzZSBUT19BTklNQVRJT046Ci0g
ICAgICAgIGNhc2UgRlJPTV9UT19BTklNQVRJT046Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1f
dG9Db2xvci0+c2V0UkdCQ29sb3IobV90byk7Ci0gICAgICAgICAgICBpZiAoIW1fZnJvbS5pc0Vt
cHR5KCkpIC8vIGZyb20tdG8gYW5pbWF0aW9uCi0gICAgICAgICAgICAgICAgbV9mcm9tQ29sb3It
PnNldFJHQkNvbG9yKG1fZnJvbSk7Ci0gICAgICAgICAgICBlbHNlIC8vIHRvIGFuaW1hdGlvbgot
ICAgICAgICAgICAgICAgIG1fZnJvbUNvbG9yLT5zZXRSR0JDb2xvcihtX2luaXRpYWxDb2xvci5u
YW1lKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxjdWxhdGVDb2xvckRpZmZlcmVu
Y2UobV90b0NvbG9yLT5jb2xvcigpLCBtX2Zyb21Db2xvci0+Y29sb3IoKSwgbV9yZWREaWZmLCBt
X2dyZWVuRGlmZiwgbV9ibHVlRGlmZik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIEJZX0FOSU1BVElPTjoKLSAgICAgICAgY2FzZSBGUk9NX0JZX0FOSU1BVElP
TjoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX2Zyb20uaXNFbXB0eSgpKSAvLyBmcm9t
LWJ5IGFuaW1hdGlvbgotICAgICAgICAgICAgICAgIG1fZnJvbUNvbG9yLT5zZXRSR0JDb2xvciht
X2Zyb20pOwotICAgICAgICAgICAgZWxzZSAvLyBieSBhbmltYXRpb24KLSAgICAgICAgICAgICAg
ICBtX2Zyb21Db2xvci0+c2V0UkdCQ29sb3IobV9pbml0aWFsQ29sb3IubmFtZSgpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbV90b0NvbG9yLT5zZXRSR0JDb2xvcihhZGRDb2xvcnNBbmRD
bGFtcChtX2Zyb21Db2xvci0+Y29sb3IoKSwgU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3Ry
aW5nKG1fYnkpKS5uYW1lKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxjdWxhdGVD
b2xvckRpZmZlcmVuY2UobV90b0NvbG9yLT5jb2xvcigpLCBtX2Zyb21Db2xvci0+Y29sb3IoKSwg
bV9yZWREaWZmLCBtX2dyZWVuRGlmZiwgbV9ibHVlRGlmZik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIFZBTFVFU19BTklNQVRJT046Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgewotICAgICAgICAgICAgLy9rZEVycm9y
KCkgPDwga19mdW5jaW5mbyA8PCAiIFVuYWJsZSB0byBkZXRlY3QgYW5pbWF0aW9uIG1vZGUhIEFi
b3J0aW5nIGNyZWF0aW9uISIgPDwgZW5kbDsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTVkdBbmlt
YXRlQ29sb3JFbGVtZW50Ojp1cGRhdGVMYXN0VmFsdWVXaXRoQ3VycmVudCgpCi17Ci0gICAgbV9s
YXN0Q29sb3IgPSBtX2N1cnJlbnRDb2xvcjsKLX0KLQotdm9pZCBTVkdBbmltYXRlQ29sb3JFbGVt
ZW50OjphcHBseUFuaW1hdGlvblRvVmFsdWUoQ29sb3ImIGN1cnJlbnRDb2xvcikKK3ZvaWQgU1ZH
QW5pbWF0ZUNvbG9yRWxlbWVudDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KCkKIHsKICAg
ICBpZiAoaXNBZGRpdGl2ZSgpKQotICAgICAgICBjdXJyZW50Q29sb3IgPSBhZGRDb2xvcnNBbmRD
bGFtcChjdXJyZW50Q29sb3IsIGNvbG9yKCkpOworICAgICAgICBzZXRUYXJnZXRBdHRyaWJ1dGVB
bmltYXRlZFZhbHVlKENvbG9yRGlzdGFuY2U6OmFkZENvbG9yc0FuZENsYW1wKG1fYmFzZUNvbG9y
LCBtX2FuaW1hdGVkQ29sb3IpLm5hbWUoKSk7CiAgICAgZWxzZQotICAgICAgICBjdXJyZW50Q29s
b3IgPSBjb2xvcigpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBjbGFtcENvbG9yVmFsdWUoaW50
IHYpCi17Ci0gICAgaWYgKHYgPiAyNTUpCi0gICAgICAgIHYgPSAyNTU7Ci0gICAgZWxzZSBpZiAo
diA8IDApCi0gICAgICAgIHYgPSAwOwotICAgIHJldHVybiB2OwotfQotCi1Db2xvciBTVkdBbmlt
YXRlQ29sb3JFbGVtZW50OjpjbGFtcENvbG9yKGludCByLCBpbnQgZywgaW50IGIpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIENvbG9yKGNsYW1wQ29sb3JWYWx1ZShyKSwgY2xhbXBDb2xvclZhbHVlKGcp
LCBjbGFtcENvbG9yVmFsdWUoYikpOworICAgICAgICBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRl
ZFZhbHVlKG1fYW5pbWF0ZWRDb2xvci5uYW1lKCkpOwogfQogCi1Db2xvciBTVkdBbmltYXRlQ29s
b3JFbGVtZW50OjphZGRDb2xvcnNBbmRDbGFtcChjb25zdCBDb2xvciYgZmlyc3QsIGNvbnN0IENv
bG9yJiBzZWNvbmQpCitib29sIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVk
VmFsdWUoRUFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2Us
IHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KQogewotICAgIHJldHVy
biBDb2xvcihjbGFtcENvbG9yVmFsdWUoZmlyc3QucmVkKCkgKyBzZWNvbmQucmVkKCkpLAotICAg
ICAgICAgICAgICAgICBjbGFtcENvbG9yVmFsdWUoZmlyc3QuZ3JlZW4oKSArIHNlY29uZC5ncmVl
bigpKSwKLSAgICAgICAgICAgICAgICAgY2xhbXBDb2xvclZhbHVlKGZpcnN0LmJsdWUoKSArIHNl
Y29uZC5ibHVlKCkpKTsKLX0KLQotdm9pZCBTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpjYWxjdWxh
dGVDb2xvcihkb3VibGUgdGltZSwgaW50ICZyLCBpbnQgJmcsIGludCAmYikgY29uc3QKLXsKLSAg
ICByID0gbHJvdW5kKG1fcmVkRGlmZiAqIHRpbWUpICsgbV9mcm9tQ29sb3ItPmNvbG9yKCkucmVk
KCk7Ci0gICAgZyA9IGxyb3VuZChtX2dyZWVuRGlmZiAqIHRpbWUpICsgbV9mcm9tQ29sb3ItPmNv
bG9yKCkuZ3JlZW4oKTsKLSAgICBiID0gbHJvdW5kKG1fYmx1ZURpZmYgKiB0aW1lKSArIG1fZnJv
bUNvbG9yLT5jb2xvcigpLmJsdWUoKTsKLX0KLQotQ29sb3IgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVu
dDo6Y29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBtX2N1cnJlbnRDb2xvcjsKKyAgICBpZiAo
YW5pbWF0aW9uTW9kZSA9PSBUT19BTklNQVRJT04pCisgICAgICAgIC8vIHRvLWFuaW1hdGlvbnMg
aGF2ZSBhIHNwZWNpYWwgZXF1YXRpb246IHZhbHVlID0gKHRvIC0gYmFzZSkgKiAodGltZS9kdXJh
dGlvbikgKyBiYXNlCisgICAgICAgIG1fYW5pbWF0ZWRDb2xvciA9IENvbG9yRGlzdGFuY2UobV9i
YXNlQ29sb3IsIG1fdG9Db2xvcikuc2NhbGVkRGlzdGFuY2UodGltZVBlcmNlbnRhZ2UpLmFkZFRv
Q29sb3JBbmRDbGFtcChtX2Jhc2VDb2xvcik7CisgICAgZWxzZQorICAgICAgICBtX2FuaW1hdGVk
Q29sb3IgPSBtX2NvbG9yRGlzdGFuY2Uuc2NhbGVkRGlzdGFuY2UocGVyY2VudGFnZVBhc3QpLmFk
ZFRvQ29sb3JBbmRDbGFtcChtX2Jhc2VDb2xvcik7CisgICAgcmV0dXJuIChtX2FuaW1hdGVkQ29s
b3IgIT0gbV9iYXNlQ29sb3IpOwogfQogCi1Db2xvciBTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojpp
bml0aWFsQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBtX2luaXRpYWxDb2xvcjsKK2Jvb2wg
U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVBbmltYXRp
b25Nb2RlIGFuaW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpCit7ICAgIAorICAgIHN3
aXRjaCAoYW5pbWF0aW9uTW9kZSkgeworICAgIGNhc2UgRlJPTV9UT19BTklNQVRJT046CisgICAg
ICAgIG1fZnJvbUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fZnJv
bSk7CisgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgIGNhc2UgVE9fQU5JTUFUSU9OOgorICAg
ICAgICBtX3RvQ29sb3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcobV90byk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRlJPTV9CWV9BTklNQVRJT046CisgICAgICAgIG1f
ZnJvbUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fZnJvbSk7Cisg
ICAgICAgIG1fdG9Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmluZyhtX2J5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCWV9BTklNQVRJT046CisgICAgICAgIG1fZnJv
bUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fZnJvbSk7CisgICAg
ICAgIG1fdG9Db2xvciA9IENvbG9yRGlzdGFuY2U6OmFkZENvbG9yc0FuZENsYW1wKG1fZnJvbUNv
bG9yLCBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcobV9ieSkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFZBTFVFU19BTklNQVRJT046CisgICAgICAgIG1fZnJvbUNvbG9yID0g
U1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fdmFsdWVzW3ZhbHVlSW5kZXhdKTsK
KyAgICAgICAgbV90b0NvbG9yID0gKCh2YWx1ZUluZGV4ICsgMSkgPCBtX3ZhbHVlcy5zaXplKCkp
ID8gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fdmFsdWVzW3ZhbHVlSW5kZXgg
KyAxXSkgOiBtX2Zyb21Db2xvcjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOT19BTklNQVRJ
T046CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBtX2Nv
bG9yRGlzdGFuY2UgPSBDb2xvckRpc3RhbmNlKG1fZnJvbUNvbG9yLCBtX3RvQ29sb3IpOworICAg
IHJldHVybiAhbV9jb2xvckRpc3RhbmNlLmlzWmVybygpOwogfQogCiB9CkluZGV4OiBrc3ZnMi9z
dmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdB
bmltYXRlQ29sb3JFbGVtZW50LmgJKHJldmlzaW9uIDE5MDgzKQorKysga3N2ZzIvc3ZnL1NWR0Fu
aW1hdGVDb2xvckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lm
ZGVmIFNWR19TVVBQT1JUCiAKICNpbmNsdWRlICJTVkdBbmltYXRpb25FbGVtZW50LmgiCisjaW5j
bHVkZSAiQ29sb3JEaXN0YW5jZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMzYsMzggKzM3LDI0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Kik7CiAgICAgICAgIHZpcnR1YWwgflNWR0FuaW1hdGVDb2xvckVsZW1l
bnQoKTsKLQotICAgICAgICB2b2lkIGFwcGx5QW5pbWF0aW9uVG9WYWx1ZShDb2xvciYgY3VycmVu
dENvbG9yKTsKLQotICAgICAgICAvLyBIZWxwZXIKLSAgICAgICAgQ29sb3IgYWRkQ29sb3JzQW5k
Q2xhbXAoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwotICAgICAgICBDb2xvciBjbGFtcENv
bG9yKGludCByLCBpbnQgZywgaW50IGIpIGNvbnN0OyAvLyBkZXByZWNhdGVkCi0gICAgICAgIHZv
aWQgY2FsY3VsYXRlQ29sb3IoZG91YmxlIHRpbWUsIGludCAmciwgaW50ICZnLCBpbnQgJmIpIGNv
bnN0OwotCi0gICAgICAgIENvbG9yIGNvbG9yKCkgY29uc3Q7Ci0gICAgICAgIENvbG9yIGluaXRp
YWxDb2xvcigpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUFu
aW1hdGlvbkJhc2VWYWx1ZUZyb21FbGVtZW50KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhcHBs
eUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQoKTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmly
dHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRo
aXM7IH0KLSAgICAgICAgdm9pZCBzdG9yZUluaXRpYWxWYWx1ZSgpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgcmVzZXRWYWx1ZXMoKTsKICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRh
dGVDdXJyZW50VmFsdWUoZG91YmxlIHRpbWVQZXJjZW50YWdlKTsKLSAgICAgICAgdmlydHVhbCBi
b29sIGhhbmRsZVN0YXJ0Q29uZGl0aW9uKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVM
YXN0VmFsdWVXaXRoQ3VycmVudCgpOworICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQW5pbWF0
ZWRWYWx1ZShFQW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVkIHZh
bHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KTsKKyAgICAgICAgdmlydHVhbCBib29sIGNh
bGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJbmRl
eCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBDb2xvciBtX2xhc3RDb2xvcjsKLSAgICAgICAg
Q29sb3IgbV9jdXJyZW50Q29sb3I7Ci0gICAgICAgIENvbG9yIG1faW5pdGlhbENvbG9yOwotCi0g
ICAgICAgIFJlZlB0cjxTVkdDb2xvcj4gbV90b0NvbG9yOwotICAgICAgICBSZWZQdHI8U1ZHQ29s
b3I+IG1fZnJvbUNvbG9yOwotCi0gICAgICAgIGludCBtX2N1cnJlbnRJdGVtOwotICAgICAgICBp
bnQgbV9yZWREaWZmOwotICAgICAgICBpbnQgbV9ncmVlbkRpZmY7Ci0gICAgICAgIGludCBtX2Js
dWVEaWZmOworICAgICAgICBDb2xvciBtX2Jhc2VDb2xvcjsKKyAgICAgICAgQ29sb3IgbV9hbmlt
YXRlZENvbG9yOworCisgICAgICAgIENvbG9yIG1fdG9Db2xvcjsKKyAgICAgICAgQ29sb3IgbV9m
cm9tQ29sb3I7CisKKyAgICAgICAgQ29sb3JEaXN0YW5jZSBtX2NvbG9yRGlzdGFuY2U7CiAgICAg
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgJKHJl
dmlzaW9uIDE5MDgzKQorKysga3N2ZzIvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDkgKzM2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByb3RlY3Rl
ZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIHRoaXM7IH0KICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRh
dGVDdXJyZW50VmFsdWUoZG91YmxlIHRpbWVQZXJjZW50YWdlKSB7IHJldHVybiBmYWxzZTsgfQot
ICAgICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlU3RhcnRDb25kaXRpb24oKSB7IHJldHVybiBmYWxz
ZTsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRW5kQ29uZGl0aW9uKCkgeyB9CisgICAg
ICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlLCBmbG9h
dCB0aW1lUGVyY2VudGFnZSwgdW5zaWduZWQgdmFsdWVJbmRleCwgZmxvYXQgcGVyY2VudGFnZVBh
c3QpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9t
QW5kVG9WYWx1ZXMoRUFuaW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpIHsgcmV0dXJu
IGZhbHNlOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBpbnQgbV9jdXJyZW50SXRlbTsKSW5k
ZXg6IGtzdmcyL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3N2ZzIvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMTkwODMpCisr
KyBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CisgICAgCit1c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7CiAKIFNWR0FuaW1h
dGVNb3Rpb25FbGVtZW50OjpTVkdBbmltYXRlTW90aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU1ZHQW5pbWF0aW9uRWxlbWVudCh0
YWdOYW1lLCBkb2MpCkBAIC00Miw3ICs0NCwzMCBAQCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6
flNWR0FuaW1hdGVNb3RpCiAKIGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlk
VGFyZ2V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gKFNWR0FuaW1hdGlvbkVsZW1lbnQ6Omhhc1Zh
bGlkVGFyZ2V0KCkgJiYgdGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSk7
CisgICAgaWYgKCFTVkdBbmltYXRpb25FbGVtZW50OjpoYXNWYWxpZFRhcmdldCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF0YXJnZXRFbGVtZW50KCktPmlzU3R5bGVkVHJhbnNm
b3JtYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gU3BlYzogU1ZHIDEuMSBz
ZWN0aW9uIDE5LjIuMTUKKyAgICBpZiAodGFyZ2V0RWxlbWVudCgpLT5oYXNUYWdOYW1lKGdUYWcp
CisgICAgICAgIHx8IHRhcmdldEVsZW1lbnQoKS0+aGFzVGFnTmFtZShkZWZzVGFnKQorICAgICAg
ICB8fCB0YXJnZXRFbGVtZW50KCktPmhhc1RhZ05hbWUodXNlVGFnKQorICAgICAgICB8fCB0YXJn
ZXRFbGVtZW50KCktPmhhc1RhZ05hbWUoaW1hZ2VUYWcpCisgICAgICAgIHx8IHRhcmdldEVsZW1l
bnQoKS0+aGFzVGFnTmFtZShzd2l0Y2hUYWcpCisgICAgICAgIHx8IHRhcmdldEVsZW1lbnQoKS0+
aGFzVGFnTmFtZShwYXRoVGFnKQorICAgICAgICB8fCB0YXJnZXRFbGVtZW50KCktPmhhc1RhZ05h
bWUocmVjdFRhZykKKyAgICAgICAgfHwgdGFyZ2V0RWxlbWVudCgpLT5oYXNUYWdOYW1lKGNpcmNs
ZVRhZykKKyAgICAgICAgfHwgdGFyZ2V0RWxlbWVudCgpLT5oYXNUYWdOYW1lKGVsbGlwc2VUYWcp
CisgICAgICAgIHx8IHRhcmdldEVsZW1lbnQoKS0+aGFzVGFnTmFtZShsaW5lVGFnKQorICAgICAg
ICB8fCB0YXJnZXRFbGVtZW50KCktPmhhc1RhZ05hbWUocG9seWxpbmVUYWcpCisgICAgICAgIHx8
IHRhcmdldEVsZW1lbnQoKS0+aGFzVGFnTmFtZShwb2x5Z29uVGFnKQorICAgICAgICB8fCB0YXJn
ZXRFbGVtZW50KCktPmhhc1RhZ05hbWUodGV4dFRhZykKKyAgICAgICAgfHwgdGFyZ2V0RWxlbWVu
dCgpLT5oYXNUYWdOYW1lKGNsaXBQYXRoVGFnKQorICAgICAgICB8fCB0YXJnZXRFbGVtZW50KCkt
Pmhhc1RhZ05hbWUobWFza1RhZykKKyAgICAgICAgfHwgdGFyZ2V0RWxlbWVudCgpLT5oYXNUYWdO
YW1lKGFUYWcpCisgICAgICAgIHx8IHRhcmdldEVsZW1lbnQoKS0+aGFzVGFnTmFtZShmb3JlaWdu
T2JqZWN0VGFnKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOwogfQog
CiB2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUqIGF0dHIpCkBAIC04OCwyMSArMTEzLDI2IEBAIFBhdGggU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQ6OmFuaW1hdGlvblAKICAgICByZXR1cm4gUGF0aCgpOwogfQogCi1ib29sIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50Ojp1cGRhdGVDdXJyZW50VmFsdWUoZG91YmxlIHRpbWVQZXJj
ZW50YWdlKQorYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6dXBkYXRlQW5pbWF0ZWRWYWx1
ZShFQW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVkIHZhbHVlSW5k
ZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpoYW5kbGVTdGFydENvbmRpdGlvbigpCitib29sIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoRUFuaW1hdGlv
bk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmFwcGx5QW5pbWF0aW9uVG9WYWx1ZShTVkdUcmFu
c2Zvcm1MaXN0KiB0YXJnZXRUcmFuc2Zvcm1zKQorYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVu
dDo6dXBkYXRlQW5pbWF0aW9uQmFzZVZhbHVlRnJvbUVsZW1lbnQoKQogewotICAgIEV4Y2VwdGlv
bkNvZGUgZWM7Ci0gICAgaWYgKCFpc0FkZGl0aXZlKCkpCi0gICAgICAgIHRhcmdldFRyYW5zZm9y
bXMtPmNsZWFyKGVjKTsKKyAgICAvLyBub3QgaW1wbGVtZW50ZWQsIHJlbW92ZSBzdXBlciBjYWxs
IHVwb24gaW1wbGVtZW50YXRpb24KKyAgICByZXR1cm4gU1ZHQW5pbWF0aW9uRWxlbWVudDo6dXBk
YXRlQW5pbWF0aW9uQmFzZVZhbHVlRnJvbUVsZW1lbnQoKTsKK30KKwordm9pZCBTVkdBbmltYXRl
TW90aW9uRWxlbWVudDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KCkKK3sKKyAgICAvLyBu
b3QgaW1wbGVtZW50ZWQsIHJlbW92ZSBzdXBlciBjYWxsIHVwb24gaW1wbGVtZW50YXRpb24KKyAg
ICBTVkdBbmltYXRpb25FbGVtZW50OjphcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQoKTsKIH0K
IAogfQpJbmRleDoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga3N2ZzIvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHJldmlzaW9uIDE5MDgz
KQorKysga3N2ZzIvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDE3ICszNiwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIAogICAgICAg
ICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRUYXJnZXQoKSBjb25zdDsKICAgICAgICAgCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLSAg
ICAgICAgCi0gICAgICAgIHZvaWQgYXBwbHlBbmltYXRpb25Ub1ZhbHVlKFNWR1RyYW5zZm9ybUxp
c3QqKTsKKyAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUFuaW1hdGlvbkJhc2VWYWx1ZUZyb21F
bGVtZW50KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1l
bnQoKTsKICAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUqKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgUGF0aCBhbmlt
YXRpb25QYXRoKCk7CiAgICAgICAgIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBj
b25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0K
ICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVDdXJyZW50VmFsdWUoZG91Ymxl
IHRpbWVQZXJjZW50YWdlKTsKLSAgICAgICAgdmlydHVhbCBib29sIGhhbmRsZVN0YXJ0Q29uZGl0
aW9uKCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRp
b25Nb2RlLCBmbG9hdCB0aW1lUGVyY2VudGFnZSwgdW5zaWduZWQgdmFsdWVJbmRleCwgZmxvYXQg
cGVyY2VudGFnZVBhc3QpOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRv
VmFsdWVzKEVBbmltYXRpb25Nb2RlLCB1bnNpZ25lZCB2YWx1ZUluZGV4KTsKICAgICAgICAgCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgUGF0aCBtX3BhdGg7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHQW5p
bWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdBbmlt
YXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5MDgzKQorKysga3N2ZzIvc3ZnL1NW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQx
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6
U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQqIGRvYykKICAgICA6IFNWR0FuaW1hdGlvbkVsZW1lbnQodGFnTmFtZSwgZG9jKQot
ICAgICwgbV9jdXJyZW50SXRlbSgtMSkKICAgICAsIG1fdHlwZShTVkdUcmFuc2Zvcm06OlNWR19U
UkFOU0ZPUk1fVU5LTk9XTikKLSAgICAsIG1fcm90YXRlU3BlY2lhbENhc2UoZmFsc2UpCi0gICAg
LCBtX3RvUm90YXRlU3BlY2lhbENhc2UoZmFsc2UpCi0gICAgLCBtX2Zyb21Sb3RhdGVTcGVjaWFs
Q2FzZShmYWxzZSkKIHsKIH0KIApAQCAtNzYsMjIyICs3Miw4NSBAQCB2b2lkIFNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50OjpwYXJzZU1hCiAgICAgICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi12b2lkIFNWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50OjpzdG9yZUluaXRpYWxWYWx1ZSgpCitib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVt
ZW50Ojp1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUsIGZs
b2F0IHRpbWVQZXJjZW50YWdlLCB1bnNpZ25lZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJjZW50YWdl
UGFzdCkKIHsKLSAgICBtX2luaXRpYWxUcmFuc2Zvcm0gPSBTVkdUcmFuc2Zvcm0oKTsKLSAgICAK
LSAgICAvLyBTYXZlIGluaXRpYWwgdHJhbnNmb3JtLi4uIChuZWVkZWQgZm9yIGZpbGw9InJlbW92
ZSIgb3IgYWRkaXR2ZT0ic3VtIikKLSAgICBpZiAodGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRy
YW5zZm9ybWFibGUoKSkgewotICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCog
dHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPih0
YXJnZXRFbGVtZW50KCkpOwotICAgICAgICBSZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4gdHJhbnNm
b3JtTGlzdCA9IHRyYW5zZm9ybS0+dHJhbnNmb3JtQmFzZVZhbHVlKCk7Ci0gICAgICAgIGlmICh0
cmFuc2Zvcm1MaXN0KSB7Ci0gICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IHRyYW5zZm9ybUxpc3QtPm51bWJl
ck9mSXRlbXMoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgU1ZHVHJhbnNmb3JtIHZhbHVlID0g
dHJhbnNmb3JtTGlzdC0+Z2V0SXRlbShpLCBlYyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3JvbmcgaWYgdGhlIGluaXRpYWwgdHJhbnNmb3Jt
IGxpc3QgaGFzIG5vdCBiZWVuIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUu
dHlwZSgpID09IG1fdHlwZSkgewotICAgICAgICAgICAgICAgICAgICBtX2luaXRpYWxUcmFuc2Zv
cm0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChhbmltYXRpb25Nb2Rl
ID09IFRPX0FOSU1BVElPTikKKyAgICAgICAgLy8gdG8tYW5pbWF0aW9ucyBoYXZlIGEgc3BlY2lh
bCBlcXVhdGlvbjogdmFsdWUgPSAodG8gLSBiYXNlKSAqICh0aW1lL2R1cmF0aW9uKSArIGJhc2UK
KyAgICAgICAgbV9hbmltYXRlZFRyYW5zZm9ybSA9IFNWR1RyYW5zZm9ybURpc3RhbmNlKG1fYmFz
ZVRyYW5zZm9ybSwgbV90b1RyYW5zZm9ybSkuc2NhbGVkRGlzdGFuY2UodGltZVBlcmNlbnRhZ2Up
LmFkZFRvU1ZHVHJhbnNmb3JtKG1fYmFzZVRyYW5zZm9ybSk7CisgICAgZWxzZQorICAgICAgICBt
X2FuaW1hdGVkVHJhbnNmb3JtID0gbV90cmFuc2Zvcm1EaXN0YW5jZS5zY2FsZWREaXN0YW5jZShw
ZXJjZW50YWdlUGFzdCkuYWRkVG9TVkdUcmFuc2Zvcm0obV9iYXNlVHJhbnNmb3JtKTsKKyAgICBy
ZXR1cm4gKG1fYW5pbWF0ZWRUcmFuc2Zvcm0gIT0gbV9iYXNlVHJhbnNmb3JtKTsKIH0KIAotdm9p
ZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cmVzZXRWYWx1ZXMoKQorYm9vbCBTVkdBbmlt
YXRlVHJhbnNmb3JtRWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uQmFzZVZhbHVlRnJvbUVsZW1lbnQo
KQogewotICAgIG1fY3VycmVudEl0ZW0gPSAtMTsKKyAgICBtX2Jhc2VUcmFuc2Zvcm0gPSBTVkdU
cmFuc2Zvcm0oKTsKICAgICBtX3RvVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtKCk7CiAgICAgbV9m
cm9tVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtKCk7Ci0gICAgbV9pbml0aWFsVHJhbnNmb3JtID0g
U1ZHVHJhbnNmb3JtKCk7Ci19Ci0KLWJvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnVw
ZGF0ZUN1cnJlbnRWYWx1ZShkb3VibGUgdGltZVBlcmNlbnRhZ2UpCi17Ci0gICAgQWZmaW5lVHJh
bnNmb3JtIHFUb01hdHJpeCwgcUZyb21NYXRyaXg7Ci0gICAgZG91YmxlIHVzZVRpbWVQZXJjZW50
YWdlID0gdGltZVBlcmNlbnRhZ2U7CisgICAgbV9hbmltYXRlZFRyYW5zZm9ybSA9IFNWR1RyYW5z
Zm9ybSgpOwogICAgIAotICAgIGlmIChtX3ZhbHVlcykgewotICAgICAgICBpbnQgaXRlbUJ5UGVy
Y2VudGFnZSA9IGNhbGN1bGF0ZUN1cnJlbnRWYWx1ZUl0ZW0odGltZVBlcmNlbnRhZ2UpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKGl0ZW1CeVBlcmNlbnRhZ2UgPT0gLTEpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9jdXJyZW50SXRlbSAhPSBpdGVt
QnlQZXJjZW50YWdlKSB7IC8vIEl0ZW0gY2hhbmdlZC4uLgotICAgICAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEV4dHJhY3QgY3VycmVu
dCAnZnJvbScgLyAndG8nIHZhbHVlcwotICAgICAgICAgICAgU3RyaW5nIHZhbHVlMSA9IG1fdmFs
dWVzLT5nZXRJdGVtKGl0ZW1CeVBlcmNlbnRhZ2UsIGVjKTsKLSAgICAgICAgICAgIFN0cmluZyB2
YWx1ZTIgPSBtX3ZhbHVlcy0+Z2V0SXRlbShpdGVtQnlQZXJjZW50YWdlICsgMSwgZWMpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBDYWxjdWxhdGUgbmV3IGZyb20vdG8gdHJhbnNmb3Jt
IHZhbHVlcy4uLgotICAgICAgICAgICAgaWYgKCF2YWx1ZTEuaXNFbXB0eSgpICYmICF2YWx1ZTIu
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBhcHBseSA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgIGlmIChtX3RvVHJhbnNmb3JtLmlzVmFsaWQoKSAmJiBtX2Zyb21UcmFuc2Zvcm0u
aXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHFUb01hdHJpeCA9IG1fdG9UcmFuc2Zv
cm0ubWF0cml4KCk7Ci0gICAgICAgICAgICAgICAgICAgIHFGcm9tTWF0cml4ID0gbV9mcm9tVHJh
bnNmb3JtLm1hdHJpeCgpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgYXBwbHkgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB1c2VUaW1lUGVyY2VudGFnZSA9
IDEuMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgbV90b1RyYW5zZm9ybSA9IHBhcnNlVHJhbnNmb3JtVmFsdWUodmFsdWUyKTsKLSAgICAgICAg
ICAgICAgICBtX3RvUm90YXRlU3BlY2lhbENhc2UgPSBtX3JvdGF0ZVNwZWNpYWxDYXNlOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZnJvbVRyYW5zZm9ybSA9IHBhcnNlVHJh
bnNmb3JtVmFsdWUodmFsdWUxKTsKLSAgICAgICAgICAgICAgICBtX2Zyb21Sb3RhdGVTcGVjaWFs
Q2FzZSA9IG1fcm90YXRlU3BlY2lhbENhc2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgbV9jdXJyZW50SXRlbSA9IGl0ZW1CeVBlcmNlbnRhZ2U7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKCFhcHBseSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG1fdG9U
cmFuc2Zvcm0uaXNWYWxpZCgpICYmIG1fZnJvbVRyYW5zZm9ybS5pc1ZhbGlkKCkpCi0gICAgICAg
ICAgICB1c2VUaW1lUGVyY2VudGFnZSA9IGNhbGN1bGF0ZVJlbGF0aXZlVGltZVBlcmNlbnRhZ2Uo
dGltZVBlcmNlbnRhZ2UsIG1fY3VycmVudEl0ZW0pOwotICAgIH0KLSAgICAKLSAgICBpZiAobV90
b1RyYW5zZm9ybS5pc1ZhbGlkKCkgJiYgcVRvTWF0cml4LmlzSWRlbnRpdHkoKSkKLSAgICAgICAg
cVRvTWF0cml4ID0gbV90b1RyYW5zZm9ybS5tYXRyaXgoKTsKLSAgICAKLSAgICBpZiAobV9mcm9t
VHJhbnNmb3JtLmlzVmFsaWQoKSAmJiBxRnJvbU1hdHJpeC5pc0lkZW50aXR5KCkpCi0gICAgICAg
IHFGcm9tTWF0cml4ID0gbV9mcm9tVHJhbnNmb3JtLm1hdHJpeCgpOworICAgIGlmICghdGFyZ2V0
RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAotICAgIG1fY3VycmVudFRyYW5zZm9ybS5yZXNldCgpOworICAgIFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50KiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCo+KHRhcmdldEVsZW1lbnQoKSk7CisgICAgUmVmUHRyPFNWR1RyYW5z
Zm9ybUxpc3Q+IHRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm0tPnRyYW5zZm9ybSgpOworICAgIGlm
ICghdHJhbnNmb3JtTGlzdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmIChp
c0FjY3VtdWxhdGVkKCkgJiYgcmVwZWF0aW9ucygpICE9IDAuMCkKLSAgICAgICAgbV9jdXJyZW50
VHJhbnNmb3JtLm11bHRpcGx5KG1fbGFzdFRyYW5zZm9ybSk7Ci0gICAgCi0gICAgc3dpdGNoICht
X3R5cGUpIHsKLSAgICAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNM
QVRFOgotICAgICAgICB7Ci0gICAgICAgICAgICBkb3VibGUgZHggPSAoKHFUb01hdHJpeC5lKCkg
LSBxRnJvbU1hdHJpeC5lKCkpICogdXNlVGltZVBlcmNlbnRhZ2UpICsgcUZyb21NYXRyaXguZSgp
OwotICAgICAgICAgICAgZG91YmxlIGR5ID0gKChxVG9NYXRyaXguZigpIC0gcUZyb21NYXRyaXgu
ZigpKSAqIHVzZVRpbWVQZXJjZW50YWdlKSArIHFGcm9tTWF0cml4LmYoKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgbV9jdXJyZW50VHJhbnNmb3JtLnRyYW5zbGF0ZShkeCwgZHkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNW
R19UUkFOU0ZPUk1fU0NBTEU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRvdWJsZSBzeCA9ICgo
cVRvTWF0cml4LmEoKSAtIHFGcm9tTWF0cml4LmEoKSkgKiB1c2VUaW1lUGVyY2VudGFnZSkgKyBx
RnJvbU1hdHJpeC5hKCk7Ci0gICAgICAgICAgICBkb3VibGUgc3kgPSAoKHFUb01hdHJpeC5kKCkg
LSBxRnJvbU1hdHJpeC5kKCkpICogdXNlVGltZVBlcmNlbnRhZ2UpICsgcUZyb21NYXRyaXguZCgp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2N1cnJlbnRUcmFuc2Zvcm0uc2NhbGUoc3gs
IHN5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgU1ZHVHJh
bnNmb3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURToKLSAgICAgICAgewotICAgICAgICAgICAgZG91
YmxlIHRvQW5nbGUsIHRvQ3gsIHRvQ3ksIGZyb21BbmdsZSwgZnJvbUN4LCBmcm9tQ3k7Ci0gICAg
ICAgICAgICBjYWxjdWxhdGVSb3RhdGlvbkZyb21NYXRyaXgocVRvTWF0cml4LCB0b0FuZ2xlLCB0
b0N4LCB0b0N5KTsKLSAgICAgICAgICAgIGNhbGN1bGF0ZVJvdGF0aW9uRnJvbU1hdHJpeChxRnJv
bU1hdHJpeCwgZnJvbUFuZ2xlLCBmcm9tQ3gsIGZyb21DeSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChtX3RvUm90YXRlU3BlY2lhbENhc2UpCi0gICAgICAgICAgICAgICAgdG9Bbmds
ZSA9IChscm91bmQodG9BbmdsZSkgPT0gMSkgPyAwLjAgOiAzNjAuMDsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKG1fZnJvbVJvdGF0ZVNwZWNpYWxDYXNlKQotICAgICAgICAgICAgICAg
IGZyb21BbmdsZSA9IChscm91bmQoZnJvbUFuZ2xlKSA9PSAxKSA/IDAuMCA6IDM2MC4wOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBkb3VibGUgYW5nbGUgPSAoKHRvQW5nbGUgLSBmcm9tQW5n
bGUpICogdXNlVGltZVBlcmNlbnRhZ2UpICsgZnJvbUFuZ2xlOwotICAgICAgICAgICAgZG91Ymxl
IGN4ID0gKHRvQ3ggLSBmcm9tQ3gpICogdXNlVGltZVBlcmNlbnRhZ2UgKyBmcm9tQ3g7Ci0gICAg
ICAgICAgICBkb3VibGUgY3kgPSAodG9DeSAtIGZyb21DeSkgKiB1c2VUaW1lUGVyY2VudGFnZSAr
IGZyb21DeTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9jdXJyZW50VHJhbnNmb3JtLnRy
YW5zbGF0ZShjeCwgY3kpOwotICAgICAgICAgICAgbV9jdXJyZW50VHJhbnNmb3JtLnJvdGF0ZShh
bmdsZSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRUcmFuc2Zvcm0udHJhbnNsYXRlKC1jeCwgLWN5
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgU1ZHVHJhbnNm
b3JtOjpTVkdfVFJBTlNGT1JNX1NLRVdYOgotICAgICAgICB7Ci0gICAgICAgICAgICBkb3VibGUg
c3ggPSAoU1ZHQW5nbGU6OnRvZGVnKGF0YW4ocVRvTWF0cml4LmMoKSkgLSBhdGFuKHFGcm9tTWF0
cml4LmMoKSkpICoKLSAgICAgICAgICAgICAgICAgICAgICAgICB1c2VUaW1lUGVyY2VudGFnZSkg
KyBTVkdBbmdsZTo6dG9kZWcoYXRhbihxRnJvbU1hdHJpeC5jKCkpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9jdXJyZW50VHJhbnNmb3JtLnNoZWFyKHN4LCAxLjApOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFO
U0ZPUk1fU0tFV1k6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRvdWJsZSBzeSA9IChTVkdBbmds
ZTo6dG9kZWcoYXRhbihxVG9NYXRyaXguYigpKSAtIGF0YW4ocUZyb21NYXRyaXguYigpKSkgKgot
ICAgICAgICAgICAgICAgICAgICAgICAgIHVzZVRpbWVQZXJjZW50YWdlKSArIFNWR0FuZ2xlOjp0
b2RlZyhhdGFuKHFGcm9tTWF0cml4LmIoKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBt
X2N1cnJlbnRUcmFuc2Zvcm0uc2hlYXIoMS4wLCBzeSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQorICAg
IG1fYmFzZVRyYW5zZm9ybSA9IHRyYW5zZm9ybUxpc3QtPmNvbmNhdGVuYXRlRm9yVHlwZShtX3R5
cGUpOworICAgICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdBbmltYXRlVHJh
bnNmb3JtRWxlbWVudDo6aGFuZGxlU3RhcnRDb25kaXRpb24oKQordm9pZCBTVkdBbmltYXRlVHJh
bnNmb3JtRWxlbWVudDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KCkKIHsKLSAgICBzdG9y
ZUluaXRpYWxWYWx1ZSgpOworICAgIGlmICghdGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5z
Zm9ybWFibGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50KiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudCo+KHRhcmdldEVsZW1lbnQoKSk7CisgICAgUmVmUHRyPFNWR1RyYW5zZm9ybUxp
c3Q+IHRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm0tPnRyYW5zZm9ybSgpOworICAgIGlmICghdHJh
bnNmb3JtTGlzdCkKKyAgICAgICAgcmV0dXJuOwogICAgIAotICAgIHN3aXRjaCAoZGV0ZWN0QW5p
bWF0aW9uTW9kZSgpKSB7Ci0gICAgICAgIGNhc2UgVE9fQU5JTUFUSU9OOgotICAgICAgICBjYXNl
IEZST01fVE9fQU5JTUFUSU9OOgotICAgICAgICB7ICAgICAgICAKLSAgICAgICAgICAgIG1fdG9U
cmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybVZhbHVlKG1fdG8pOwotICAgICAgICAgICAgbV90b1Jv
dGF0ZVNwZWNpYWxDYXNlID0gbV9yb3RhdGVTcGVjaWFsQ2FzZTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKCFtX2Zyb20uaXNFbXB0eSgpKSB7IC8vIGZyb20tdG8gYW5pbWF0aW9uCi0g
ICAgICAgICAgICAgICAgbV9mcm9tVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX2Zy
b20pOwotICAgICAgICAgICAgICAgIG1fZnJvbVJvdGF0ZVNwZWNpYWxDYXNlID0gbV9yb3RhdGVT
cGVjaWFsQ2FzZTsKLSAgICAgICAgICAgIH0gZWxzZSB7IC8vIHRvIGFuaW1hdGlvbgotICAgICAg
ICAgICAgICAgIG1fZnJvbVRyYW5zZm9ybSA9IG1faW5pdGlhbFRyYW5zZm9ybTsKLSAgICAgICAg
ICAgICAgICBtX2Zyb21Sb3RhdGVTcGVjaWFsQ2FzZSA9IGZhbHNlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fZnJvbVRyYW5zZm9ybS5pc1ZhbGlkKCkp
Ci0gICAgICAgICAgICAgICAgbV9mcm9tVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtKCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQllf
QU5JTUFUSU9OOgotICAgICAgICBjYXNlIEZST01fQllfQU5JTUFUSU9OOgotICAgICAgICB7Ci0g
ICAgICAgICAgICBtX3RvVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX2J5KTsKLSAg
ICAgICAgICAgIG1fdG9Sb3RhdGVTcGVjaWFsQ2FzZSA9IG1fcm90YXRlU3BlY2lhbENhc2U7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9mcm9tLmlzRW1wdHkoKSkgeyAvLyBmcm9t
LWJ5IGFuaW1hdGlvbgotICAgICAgICAgICAgICAgIG1fZnJvbVRyYW5zZm9ybSA9IHBhcnNlVHJh
bnNmb3JtVmFsdWUobV9mcm9tKTsKLSAgICAgICAgICAgICAgICBtX2Zyb21Sb3RhdGVTcGVjaWFs
Q2FzZSA9IG1fcm90YXRlU3BlY2lhbENhc2U7Ci0gICAgICAgICAgICB9IGVsc2UgeyAvLyBieSBh
bmltYXRpb24KLSAgICAgICAgICAgICAgICBtX2Zyb21UcmFuc2Zvcm0gPSBtX2luaXRpYWxUcmFu
c2Zvcm07Ci0gICAgICAgICAgICAgICAgbV9mcm9tUm90YXRlU3BlY2lhbENhc2UgPSBmYWxzZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2Zyb21UcmFu
c2Zvcm0uaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIG1fZnJvbVRyYW5zZm9ybSA9IFNWR1Ry
YW5zZm9ybSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBW
QUxVRVNfQU5JTUFUSU9OOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8va2RFcnJvcigpIDw8IGtfZnVuY2luZm8gPDwgIiBVbmFi
bGUgdG8gZGV0ZWN0IGFuaW1hdGlvbiBtb2RlISBBYm9ydGluZyBjcmVhdGlvbiEiIDw8IGVuZGw7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnVwZGF0ZUxhc3RW
YWx1ZVdpdGhDdXJyZW50KCkKLXsKLSAgICBtX2xhc3RUcmFuc2Zvcm0gPSBtX2N1cnJlbnRUcmFu
c2Zvcm07Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmFwcGx5QW5pbWF0
aW9uVG9WYWx1ZShTVkdUcmFuc2Zvcm1MaXN0KiB0YXJnZXRUcmFuc2Zvcm1zKQotewogICAgIEV4
Y2VwdGlvbkNvZGUgZWM7CiAgICAgaWYgKCFpc0FkZGl0aXZlKCkpCi0gICAgICAgIHRhcmdldFRy
YW5zZm9ybXMtPmNsZWFyKGVjKTsKKyAgICAgICAgdHJhbnNmb3JtTGlzdC0+Y2xlYXIoZWMpOwog
ICAgIAotICAgIHRhcmdldFRyYW5zZm9ybXMtPmFwcGVuZEl0ZW0oU1ZHVHJhbnNmb3JtKG1fY3Vy
cmVudFRyYW5zZm9ybSksIGVjKTsKKyAgICB0cmFuc2Zvcm1MaXN0LT5hcHBlbmRJdGVtKG1fYW5p
bWF0ZWRUcmFuc2Zvcm0sIGVjKTsKK30KKworYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVu
dDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUs
IHVuc2lnbmVkIHZhbHVlSW5kZXgpCit7CisgICAgc3dpdGNoIChkZXRlY3RBbmltYXRpb25Nb2Rl
KCkpIHsKKyAgICBjYXNlIEZST01fVE9fQU5JTUFUSU9OOgorICAgICAgICBtX2Zyb21UcmFuc2Zv
cm0gPSBwYXJzZVRyYW5zZm9ybVZhbHVlKG1fZnJvbSk7CisgICAgICAgIC8vIGZhbGwgdGhyb3Vn
aAorICAgIGNhc2UgVE9fQU5JTUFUSU9OOgorICAgICAgICBtX3RvVHJhbnNmb3JtID0gcGFyc2VU
cmFuc2Zvcm1WYWx1ZShtX3RvKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGUk9NX0JZX0FO
SU1BVElPTjoKKyAgICAgICAgbV9mcm9tVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZSht
X2Zyb20pOworICAgICAgICBtX3RvVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX2J5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCWV9BTklNQVRJT046CisgICAgICAgIG1fZnJv
bVRyYW5zZm9ybSA9IHBhcnNlVHJhbnNmb3JtVmFsdWUobV9mcm9tKTsKKyAgICAgICAgbV90b1Ry
YW5zZm9ybSA9IFNWR1RyYW5zZm9ybURpc3RhbmNlOjphZGRTVkdUcmFuc2Zvcm1zKG1fZnJvbVRy
YW5zZm9ybSwgcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX2J5KSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgVkFMVUVTX0FOSU1BVElPTjoKKyAgICAgICAgbV9mcm9tVHJhbnNmb3JtID0gcGFyc2VU
cmFuc2Zvcm1WYWx1ZShtX3ZhbHVlc1t2YWx1ZUluZGV4XSk7CisgICAgICAgIG1fdG9UcmFuc2Zv
cm0gPSAoKHZhbHVlSW5kZXggKyAxKSA8IG1fdmFsdWVzLnNpemUoKSkgPyBwYXJzZVRyYW5zZm9y
bVZhbHVlKG1fdmFsdWVzW3ZhbHVlSW5kZXggKyAxXSkgOiBtX2Zyb21UcmFuc2Zvcm07CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgTk9fQU5JTUFUSU9OOgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisgICAgbV90cmFuc2Zvcm1EaXN0YW5jZSA9IFNWR1RyYW5zZm9ybURp
c3RhbmNlKG1fZnJvbVRyYW5zZm9ybSwgbV90b1RyYW5zZm9ybSk7CisgICAgcmV0dXJuICFtX3Ry
YW5zZm9ybURpc3RhbmNlLmlzWmVybygpOwogfQogCiBTVkdUcmFuc2Zvcm0gU1ZHQW5pbWF0ZVRy
YW5zZm9ybUVsZW1lbnQ6OnBhcnNlVHJhbnNmb3JtVmFsdWUoY29uc3QgU3RyaW5nJiBkYXRhKSBj
b25zdAogeworICAgIC8vIEZJWE1FOiBUaGlzIHBhcnNlciBzaG91bGQgYmUgY29tYmluZWQgd2l0
aCB0aGUgb25lIGluIFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtQXR0cmlidXRlCisg
ICAgCiAgICAgU3RyaW5nIHBhcnNlID0gZGF0YS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICBpZiAo
cGFyc2UuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtKCk7CkBAIC0zNDIs
MjEgKzIwMSw2IEBAIFNWR1RyYW5zZm9ybSBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDoKICAg
ICAgICAgICAgIGVsc2UgCiAgICAgICAgICAgICAgICAgYW5nbGUgPSBwYXJzZS50b0RvdWJsZSgp
OwogCi0gICAgICAgICAgICAvLyBPayBub3cgaGVyZSdzIGEgaGFjayB0byBtYWtlIGl0IHBvc3Np
YmxlIHRvIGNhbGN1bGF0ZSBjeC9jeSB2YWx1ZXMsIGlmIGFuZ2xlID0gMCAKLSAgICAgICAgICAg
IC8vIG9yIGFuZ2xlPTM2MCAtPiBmb3IgYW5nbGU9MCBvdXIgbWF0cml4IGlzIG0xMTogMSBtMTI6
IDAgbTIxOiAwIG0yMjogMSBkeDogMCBkeTogMAotICAgICAgICAgICAgLy8gQXMgeW91IGNhbiBz
ZWUgdGhlcmUgaXMgbm8gd2F5IHRvIHJldHJpZXZlIHRoZSBjeC9jeSB2YWx1ZXMgZm9yIHRoZXNl
IGFuZ2xlcy4KLSAgICAgICAgICAgIC8vIC0+IHNldCAnbV9yb3RhdGVTcGVjaWFsQ2FzZScgdG8g
dHJ1ZSwgYW5kIHNhdmUgYW5nbGUgPSAxLzM1OSAtPiB0aGlzIHdheSB3ZSBjYW4gY2FsY3VsYXRl
Ci0gICAgICAgICAgICAvLyAgICB0aGUgY3gvY3kgdmFsdWVzLCB3aGlsZSBrZWVwaW5nIHRoaXMg
dWJlci1vcHRpbWl6ZWQgd2F5IG9mIGhhbmRsaW5nIDxhbmltYXRlVHJhbnNmb3JtPiEKLSAgICAg
ICAgICAgIG1fcm90YXRlU3BlY2lhbENhc2UgPSBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKGFuZ2xlID09IDAuMCkgewotICAgICAgICAgICAgICAgIGFuZ2xlID0gYW5nbGUg
KyAxLjA7Ci0gICAgICAgICAgICAgICAgbV9yb3RhdGVTcGVjaWFsQ2FzZSA9IHRydWU7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKGFuZ2xlID09IDM2MC4wKSB7Ci0gICAgICAgICAgICAgICAgYW5n
bGUgPSBhbmdsZSAtIDEuMDsKLSAgICAgICAgICAgICAgICBtX3JvdGF0ZVNwZWNpYWxDYXNlID0g
dHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAogICAgICAgICAgICAgcGFyc2VkVHJh
bnNmb3JtLnNldFJvdGF0ZShhbmdsZSwgY3gsIGN5KTsKICAgICAgICAgICAgIGJyZWFrOyAgICAK
ICAgICAgICAgfQpAQCAtMzg1LDcgKzIyOSw2IEBAIHZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVs
ZW1lbnQ6OmNhbGN1bGEKICAgICBkb3VibGUgc2luYSA9IC1tYXRyaXguYygpOwogCiAgICAgaWYg
KGNvc2EgIT0gMS4wKSB7Ci0gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgYW5nbGUgdmlhIG1hZ2lj
IDspCiAgICAgICAgIGRvdWJsZSB0ZW1wID0gU1ZHQW5nbGU6OnRvZGVnKGFzaW4oc2luYSkpOwog
ICAgICAgICBhbmdsZSA9IFNWR0FuZ2xlOjp0b2RlZyhhY29zKGNvc2EpKTsKICAgICAgICAgaWYg
KHRlbXAgPCAwKQpAQCAtNDA0LDExICsyNDcsNiBAQCB2b2lkIFNWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50OjpjYWxjdWxhCiAgICAgYW5nbGUgPSAwLjA7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBT
VkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Y3VycmVudFRyYW5zZm9ybSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fY3VycmVudFRyYW5zZm9ybTsKLX0KLQogfQogCiAvLyB2aW06dHM9NDpub2V0
CkluZGV4OiBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAkocmV2aXNpb24gMTkw
ODMpCisrKyBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiU1ZHQW5pbWF0aW9uRWxlbWVudC5o
IgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybURpc3Rh
bmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsMzggKzQxLDMwIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkVGFyZ2V0KCkgY29u
c3Q7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSopOwotCi0gICAgICAgIHZvaWQgYXBwbHlBbmltYXRpb25Ub1ZhbHVlKFNWR1RyYW5z
Zm9ybUxpc3QqKTsKLQotICAgICAgICAvLyBIZWxwZXJzCi0gICAgICAgIFNWR1RyYW5zZm9ybSBw
YXJzZVRyYW5zZm9ybVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAgICAgICB2b2lkIGNh
bGN1bGF0ZVJvdGF0aW9uRnJvbU1hdHJpeChjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBkb3VibGUm
IGFuZ2xlLCBkb3VibGUmIGN4LCBkb3VibGUmIGN5KSBjb25zdDsKLQotICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gY3VycmVudFRyYW5zZm9ybSgpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgdmly
dHVhbCBib29sIHVwZGF0ZUFuaW1hdGlvbkJhc2VWYWx1ZUZyb21FbGVtZW50KCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBhcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQoKTsKIAogICAgIHByb3Rl
Y3RlZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KLSAgICAgICAgdm9pZCBzdG9yZUluaXRpYWxWYWx1ZSgp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRWYWx1ZXMoKTsKICAgICAgICAgCi0gICAgICAg
IHZpcnR1YWwgYm9vbCB1cGRhdGVDdXJyZW50VmFsdWUoZG91YmxlIHRpbWVQZXJjZW50YWdlKTsK
LSAgICAgICAgdmlydHVhbCBib29sIGhhbmRsZVN0YXJ0Q29uZGl0aW9uKCk7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVMYXN0VmFsdWVXaXRoQ3VycmVudCgpOworICAgICAgICB2aXJ0dWFs
IGJvb2wgdXBkYXRlQW5pbWF0ZWRWYWx1ZShFQW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNl
bnRhZ2UsIHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KTsKKyAgICAg
ICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSwg
dW5zaWduZWQgdmFsdWVJbmRleCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBpbnQgbV9jdXJy
ZW50SXRlbTsKKyAgICAgICAgLy8gSGVscGVycworICAgICAgICBTVkdUcmFuc2Zvcm0gcGFyc2VU
cmFuc2Zvcm1WYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICAgICAgdm9pZCBjYWxjdWxh
dGVSb3RhdGlvbkZyb21NYXRyaXgoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZG91YmxlJiBhbmds
ZSwgZG91YmxlJiBjeCwgZG91YmxlJiBjeSkgY29uc3Q7CisgICAgICAgICAgICAKICAgICAgICAg
U1ZHVHJhbnNmb3JtOjpTVkdUcmFuc2Zvcm1UeXBlIG1fdHlwZTsKIAogICAgICAgICBTVkdUcmFu
c2Zvcm0gbV90b1RyYW5zZm9ybTsKICAgICAgICAgU1ZHVHJhbnNmb3JtIG1fZnJvbVRyYW5zZm9y
bTsKLSAgICAgICAgU1ZHVHJhbnNmb3JtIG1faW5pdGlhbFRyYW5zZm9ybTsKLQotICAgICAgICBB
ZmZpbmVUcmFuc2Zvcm0gbV9sYXN0VHJhbnNmb3JtOwotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
bV9jdXJyZW50VHJhbnNmb3JtOwogCi0gICAgICAgIG11dGFibGUgYm9vbCBtX3JvdGF0ZVNwZWNp
YWxDYXNlIDogMTsKLSAgICAgICAgYm9vbCBtX3RvUm90YXRlU3BlY2lhbENhc2UgOiAxOwotICAg
ICAgICBib29sIG1fZnJvbVJvdGF0ZVNwZWNpYWxDYXNlIDogMTsKKyAgICAgICAgU1ZHVHJhbnNm
b3JtIG1fYmFzZVRyYW5zZm9ybTsKKyAgICAgICAgU1ZHVHJhbnNmb3JtIG1fYW5pbWF0ZWRUcmFu
c2Zvcm07CisgICAgICAgIAorICAgICAgICBTVkdUcmFuc2Zvcm1EaXN0YW5jZSBtX3RyYW5zZm9y
bURpc3RhbmNlOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IGtzdmcy
L3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5MDgzKQorKysga3N2ZzIvc3ZnL1NWR0Fu
aW1hdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDMwIEBAIHZv
aWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6cGFyc2VLZXlOdW1iZXIKICAgICB9CiB9CiAKK3N0YXRp
YyB2b2lkIHBhcnNlVmFsdWVzKFZlY3RvcjxTdHJpbmc+JiB2YWx1ZXMsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCit7CisgICAgY29uc3QgVUNoYXIqIHB0ciA9IHZhbHVlLmNoYXJhY3RlcnMoKTsKKyAg
ICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgdmFsdWUubGVuZ3RoKCk7CisgICAgc2tpcE9wdGlv
bmFsU3BhY2VzKHB0ciwgZW5kKTsKKyAgICB3aGlsZSAocHRyIDwgZW5kKSB7CisgICAgICAgIC8v
IFNNSUwgMy4yLjIgOiBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZSBzcGFjZSwgYW5kIHdoaXRl
IHNwYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgc2VtaWNvbG9uIHNlcGFyYXRvcnMsIHdpbGwgYmUgaWdu
b3JlZC4KKyAgICAgICAgY29uc3QgVUNoYXIqIHZhbHVlU3RhcnQgPSBwdHI7CisgICAgICAgIHdo
aWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSAnOycpIC8vIGNhcmVmdWwgbm90IHRvIGlnbm9yZSB3
aGl0ZXNwYWNlIGluc2lkZSB2YWx1ZXMKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICBpZiAo
cHRyID09IHZhbHVlU3RhcnQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAg
IC8vIHdhbGsgYmFja3dhcmRzIGZyb20gdGhlIDsgdG8gaWdub3JlIGFueSB3aGl0ZXNwYWNlCisg
ICAgICAgIGNvbnN0IFVDaGFyKiB2YWx1ZUVuZCA9IHB0cjsKKyAgICAgICAgd2hpbGUgKHZhbHVl
U3RhcnQgPCB2YWx1ZUVuZCAmJiBpc1doaXRlc3BhY2UoKnZhbHVlRW5kKSkKKyAgICAgICAgICAg
IHZhbHVlRW5kLS07CisgICAgICAgIAorICAgICAgICB2YWx1ZXMuYXBwZW5kKFN0cmluZyh2YWx1
ZVN0YXJ0LCB2YWx1ZUVuZCAtIHZhbHVlU3RhcnQpKTsKKyAgICAgICAgCisgICAgICAgIHNraXBP
cHRpb25hbFNwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCAnOycpOworICAgIH0KK30KKwogc3Rh
dGljIHZvaWQgcGFyc2VLZXlTcGxpbmVzKFZlY3RvcjxTVkdBbmltYXRpb25FbGVtZW50OjpLZXlT
cGxpbmU+JiBrZXlTcGxpbmVzLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIGRvdWJsZSBu
dW1iZXIgPSAwLmY7CkBAIC0yNzMsOCArMjk3LDggQEAgdm9pZCBTVkdBbmltYXRpb25FbGVtZW50
OjpwYXJzZU1hcHBlZEF0dAogICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAicGFjZWQiKQogICAg
ICAgICAgICAgbV9jYWxjTW9kZSA9IENBTENNT0RFX1BBQ0VEOwogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjp2YWx1ZXNBdHRyKSB7Ci0gICAgICAgIG1fdmFsdWVzID0g
bmV3IFNWR1N0cmluZ0xpc3QoKTsKLSAgICAgICAgbV92YWx1ZXMtPnBhcnNlKHZhbHVlLCAnOycp
OworICAgICAgICBtX3ZhbHVlcy5jbGVhcigpOworICAgICAgICBwYXJzZVZhbHVlcyhtX3ZhbHVl
cywgdmFsdWUpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXlU
aW1lc0F0dHIpIHsKICAgICAgICAgbV9rZXlUaW1lcy5jbGVhcigpOwogICAgICAgICBwYXJzZUtl
eU51bWJlcnMobV9rZXlUaW1lcywgdmFsdWUpOwpAQCAtMzkxLDggKzQxNSwxMSBAQCB2b2lkIFNW
R0FuaW1hdGlvbkVsZW1lbnQ6OmNsb3NlUmVuZGVyZXIoCiAgICAgU1ZHRWxlbWVudDo6Y2xvc2VS
ZW5kZXJlcigpOwogfQogCi1TdHJpbmcgU1ZHQW5pbWF0aW9uRWxlbWVudDo6dGFyZ2V0QXR0cmli
dXRlKCkgY29uc3QKK1N0cmluZyBTVkdBbmltYXRpb25FbGVtZW50Ojp0YXJnZXRBdHRyaWJ1dGVB
bmltYXRlZFZhbHVlKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogVGhpcyBtZXRob2QgaXMgbm90
IGVudGlyZWx5IGNvcnJlY3QKKyAgICAvLyBJdCBkb2VzIG5vdCBwcm9wZXJseSBncmFiIHRoZSB0
cnVlICJhbmltVmFsIiBpbnN0ZWFkIGdyYWJzIHRoZSBiYXNlVmFsIChvciBzb21ldGhpbmcgdmVy
eSBjbG9zZSkKKwogICAgIGlmICghdGFyZ2V0RWxlbWVudCgpKQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAgICAgCkBAIC00MjgsOCArNDU1LDEwIEBAIFN0cmluZyBTVkdBbmltYXRpb25FbGVt
ZW50Ojp0YXJnZXRBdHRyaWIKICAgICByZXR1cm4gcmV0OwogfQogCi12b2lkIFNWR0FuaW1hdGlv
bkVsZW1lbnQ6OnNldFRhcmdldEF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBT
VkdBbmltYXRpb25FbGVtZW50OjpzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiB7CisgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIGlzIG5vdCBlbnRp
cmVseSBjb3JyZWN0CisgICAgLy8gSXQgZG9lcyBub3QgcHJvcGVybHkgc2V0IHRoZSAiYW5pbVZh
bCIsIHJhdGhlciBpdCBzZXRzIHRoZSAiYmFzZVZhbCIKICAgICBTVkdBbmltYXRpb25FbGVtZW50
OjpzZXRUYXJnZXRBdHRyaWJ1dGUodGFyZ2V0RWxlbWVudCgpLCBtX2F0dHJpYnV0ZU5hbWUsIHZh
bHVlLCBzdGF0aWNfY2FzdDxFQXR0cmlidXRlVHlwZT4obV9hdHRyaWJ1dGVUeXBlKSk7CiB9CiAK
QEAgLTQ4NSw3ICs1MTQsOSBAQCBib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzQWNjdW11bGF0
ZWQoCiAKIEVBbmltYXRpb25Nb2RlIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmRldGVjdEFuaW1hdGlv
bk1vZGUoKSBjb25zdAogewotICAgIGlmICgoIW1fZnJvbS5pc0VtcHR5KCkgJiYgIW1fdG8uaXNF
bXB0eSgpKSB8fCAoIW1fdG8uaXNFbXB0eSgpKSkgeyAvLyB0by9mcm9tLXRvIGFuaW1hdGlvbgor
ICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnZhbHVlc0F0dHIpKQorICAgICAgICByZXR1
cm4gVkFMVUVTX0FOSU1BVElPTjsKKyAgICBlbHNlIGlmICgoIW1fZnJvbS5pc0VtcHR5KCkgJiYg
IW1fdG8uaXNFbXB0eSgpKSB8fCAoIW1fdG8uaXNFbXB0eSgpKSkgeyAvLyB0by9mcm9tLXRvIGFu
aW1hdGlvbgogICAgICAgICBpZiAoIW1fZnJvbS5pc0VtcHR5KCkpIC8vIGZyb20tdG8gYW5pbWF0
aW9uCiAgICAgICAgICAgICByZXR1cm4gRlJPTV9UT19BTklNQVRJT047CiAgICAgICAgIGVsc2UK
QEAgLTQ5Nyw2MCArNTI4LDEwIEBAIEVBbmltYXRpb25Nb2RlIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OmRldGUKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIEJZX0FOSU1BVElPTjsKICAg
ICB9Ci0gICAgZWxzZSBpZiAobV92YWx1ZXMpCi0gICAgICAgIHJldHVybiBWQUxVRVNfQU5JTUFU
SU9OOwogCiAgICAgcmV0dXJuIE5PX0FOSU1BVElPTjsKIH0KIAotc3RhdGljIGlubGluZSBWZWN0
b3I8ZG91YmxlPiBzdGFydFRpbWVzRm9yVmFsdWVzKGNvbnN0IFNWR1N0cmluZ0xpc3QqIHZhbHVl
cykKLXsKLSAgICAvLyBDYWxjdWxhdGUgdGhlIHJlbGF0aXZlIHRpbWUgcGVyY2VudGFnZXMgZm9y
IGVhY2ggJ2ZhZGUnLgotICAgIC8vIEV2ZW50dWFsbHkgdmFsdWUgc3BhY2luZyB3aWxsIG5lZWQg
dG8gdGFrZSBrZXlTcGxpbmVzIGludG8gYWNjb3VudAotICAgIHVuc2lnbmVkIGxvbmcgaXRlbXMg
PSB2YWx1ZXMtPm51bWJlck9mSXRlbXMoKTsKLSAgICBWZWN0b3I8ZG91YmxlPiBzdGFydFRpbWVz
KGl0ZW1zKTsKLSAgICBzdGFydFRpbWVzWzBdID0gMC4wOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPCBpdGVtczsgKytpKQotICAgICAgICBzdGFydFRpbWVzW2ldID0gKCgoMi4wICogaSkp
IC8gKGl0ZW1zIC0gMSkpIC8gMi4wOwotICAgIHJldHVybiBzdGFydFRpbWVzOwotfQotCi1pbnQg
U1ZHQW5pbWF0aW9uRWxlbWVudDo6Y2FsY3VsYXRlQ3VycmVudFZhbHVlSXRlbShkb3VibGUgdGlt
ZVBlcmNlbnRhZ2UpCi17Ci0gICAgaWYgKCFtX3ZhbHVlcykKLSAgICAgICAgcmV0dXJuIC0xOwot
ICAgIAotICAgIHVuc2lnbmVkIGxvbmcgaXRlbXMgPSBtX3ZhbHVlcy0+bnVtYmVyT2ZJdGVtcygp
OwotICAgIFZlY3Rvcjxkb3VibGU+IHN0YXJ0VGltZXMgPSBzdGFydFRpbWVzRm9yVmFsdWVzKG1f
dmFsdWVzLmdldCgpKTsKLQotICAgIGludCBpdGVtQnlQZXJjZW50YWdlID0gLTE7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zIC0gMTsgKytpKSB7Ci0gICAgICAgIGlmICh0aW1l
UGVyY2VudGFnZSA+PSBzdGFydFRpbWVzW2ldICYmIHRpbWVQZXJjZW50YWdlIDw9IHN0YXJ0VGlt
ZXNbaSArIDFdKSB7Ci0gICAgICAgICAgICBpdGVtQnlQZXJjZW50YWdlID0gaTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGl0ZW1CeVBlcmNlbnRh
Z2U7Ci19Ci0KLWRvdWJsZSBTVkdBbmltYXRpb25FbGVtZW50OjpjYWxjdWxhdGVSZWxhdGl2ZVRp
bWVQZXJjZW50YWdlKGRvdWJsZSB0aW1lUGVyY2VudGFnZSwgaW50IGN1cnJlbnRJdGVtKQotewot
ICAgIGlmIChjdXJyZW50SXRlbSA9PSAtMSB8fCAhbV92YWx1ZXMpCi0gICAgICAgIHJldHVybiAw
LjA7Ci0KLSAgICBWZWN0b3I8ZG91YmxlPiBzdGFydFRpbWVzID0gc3RhcnRUaW1lc0ZvclZhbHVl
cyhtX3ZhbHVlcy5nZXQoKSk7Ci0KLSAgICBkb3VibGUgYmVnaW5UaW1lUGVyY2VudGFnZSA9IHN0
YXJ0VGltZXNbY3VycmVudEl0ZW1dOwotICAgIGRvdWJsZSBlbmRUaW1lUGVyY2VudGFnZSA9IHN0
YXJ0VGltZXNbY3VycmVudEl0ZW0gKyAxXTsKLQotICAgIGlmICgoZW5kVGltZVBlcmNlbnRhZ2Ug
LSBiZWdpblRpbWVQZXJjZW50YWdlKSA9PSAwLjApCi0gICAgICAgIHJldHVybiAwLjA7Ci0KLSAg
ICByZXR1cm4gKCh0aW1lUGVyY2VudGFnZSAtIGJlZ2luVGltZVBlcmNlbnRhZ2UpIC8KLSAgICAg
ICAgICAgIChlbmRUaW1lUGVyY2VudGFnZSAtIGJlZ2luVGltZVBlcmNlbnRhZ2UpKTsKLX0KLQog
ZG91YmxlIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnJlcGVhdGlvbnMoKSBjb25zdAogewogICAgIHJl
dHVybiBtX3JlcGV0aXRpb25zOwpAQCAtNTkzLDQ0ICs1NzQsMTU4IEBAIHN0YXRpYyBkb3VibGUg
Y2FsY3VsYXRlVGltZVBlcmNlbnRhZ2UoZG8KICAgICByZXR1cm4gcGVyY2VudGFnZTsKIH0KIAot
dm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpoYW5kbGVUaW1lckV2ZW50KGRvdWJsZSB0aW1lUGVy
Y2VudGFnZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RQZXJjZW50YWdlUGFzdEZvcktleVNw
bGluZXMoY29uc3QgVmVjdG9yPFNWR0FuaW1hdGlvbkVsZW1lbnQ6OktleVNwbGluZT4mIGtleVNw
bGluZXMsIHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0JiBwZXJjZW50YWdlUGFzdCkKK3sKKyAg
ICBjb25zdCBTVkdBbmltYXRpb25FbGVtZW50OjpLZXlTcGxpbmUmIGtleVNwbGluZSA9IGtleVNw
bGluZXNbdmFsdWVJbmRleF07CisgICAgUGF0aCBwYXRoOworICAgIHBhdGgubW92ZVRvKEZsb2F0
UG9pbnQoKSk7CisgICAgcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKGtleVNwbGluZS5jb250cm9sMSwg
a2V5U3BsaW5lLmNvbnRyb2wyLCBGbG9hdFBvaW50KDEuMGYsIDEuMGYpKTsKKyAgICBib29sIG9r
ID0gZmFsc2U7CisgICAgRmxvYXRQb2ludCBzcGxpbmVQb2ludCA9IHBhdGgucG9pbnRBdExlbmd0
aChwZXJjZW50YWdlUGFzdCwgb2spOworICAgIGlmIChvaykKKyAgICAgICAgcGVyY2VudGFnZVBh
c3QgKj0gc3BsaW5lUG9pbnQueSgpOworfQorCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnZh
bHVlSW5kZXhBbmRQZXJjZW50YWdlUGFzdEZvckRpc3RhbmNlKGZsb2F0IGRpc3RhbmNlUGVyY2Vu
dGFnZSwgdW5zaWduZWQmIHZhbHVlSW5kZXgsIGZsb2F0JiBwZXJjZW50YWdlUGFzdCkKK3sKKyAg
ICAvLyBVbnNwZWNpZmllZDogYW5pbWF0aW9uIGVsZW1lbnRzIHdoaWNoIGRvIG5vdCBzdXBwb3J0
IENBTENNT0RFX1BBQ0VELCB3ZSBqdXN0IGFsd2F5cyBzaG93IHRoZSBmaXJzdCB2YWx1ZQorICAg
IHZhbHVlSW5kZXggPSAwOworICAgIHBlcmNlbnRhZ2VQYXN0ID0gMDsKK30KKworZmxvYXQgU1ZH
QW5pbWF0aW9uRWxlbWVudDo6Y2FsY3VsYXRlVG90YWxEaXN0YW5jZSgpCit7CisgICAgcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVWYWx1ZUluZGV4QW5kUGVyY2Vu
dGFnZVBhc3RGb3JLZXlUaW1lcyhmbG9hdCBlbGFwc2VkVGltZSwgY29uc3QgVmVjdG9yPGZsb2F0
PiYga2V5VGltZXMsIHVuc2lnbmVkJiB2YWx1ZUluZGV4LCBmbG9hdCYgcGVyY2VudGFnZVBhc3Qp
Cit7CisgICAgYm9vbCBmb3VuZEtleVRpbWUgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBrZXlUaW1l
c0NvdW50TWludXNPbmUgPSBrZXlUaW1lcy5zaXplKCk7CisgICAgZm9yICh2YWx1ZUluZGV4ID0g
MDsgdmFsdWVJbmRleCA8IGtleVRpbWVzQ291bnRNaW51c09uZTsgdmFsdWVJbmRleCsrKSB7Cisg
ICAgICAgIGZsb2F0IGxhc3RLZXlUaW1lID0ga2V5VGltZXNbdmFsdWVJbmRleF07CisgICAgICAg
IGlmIChsYXN0S2V5VGltZSA+PSBlbGFwc2VkVGltZSkgeworICAgICAgICAgICAgZmxvYXQgbmV4
dEtleVRpbWUgPSBrZXlUaW1lc1t2YWx1ZUluZGV4ICsgMV07CisgICAgICAgICAgICBmbG9hdCBr
ZXlUaW1lU3BhbiA9IG5leHRLZXlUaW1lIC0gbGFzdEtleVRpbWU7CisgICAgICAgICAgICBmbG9h
dCB0aW1lU2luY2VMYXN0S2V5VGltZSA9IGVsYXBzZWRUaW1lIC0gbGFzdEtleVRpbWU7CisgICAg
ICAgICAgICBwZXJjZW50YWdlUGFzdCA9ICh0aW1lU2luY2VMYXN0S2V5VGltZSAvIGtleVRpbWVT
cGFuKTsKKyAgICAgICAgICAgIGZvdW5kS2V5VGltZSA9IHRydWU7CisgICAgICAgIH0KKyAgICB9
CisgICAgaWYgKCFmb3VuZEtleVRpbWUpIHsKKyAgICAgICAgdmFsdWVJbmRleCA9IGtleVRpbWVz
Q291bnRNaW51c09uZTsKKyAgICAgICAgcGVyY2VudGFnZVBhc3QgPSAwOworICAgIH0KK30KKwor
Ym9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc1ZhbGlkQW5pbWF0aW9uKCkgY29uc3QKK3sKKyAg
ICBFQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlID0gZGV0ZWN0QW5pbWF0aW9uTW9kZSgpOwor
ICAgIGlmICghaGFzVmFsaWRUYXJnZXQoKSB8fCAhKGFuaW1hdGlvbk1vZGUgPT0gTk9fQU5JTUFU
SU9OKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChhbmltYXRpb25Nb2RlID09IFZB
TFVFU19BTklNQVRJT04pIHsKKyAgICAgICAgaWYgKCFtX3ZhbHVlcy5zaXplKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2tleVRpbWVzLnNpemUoKSAmJiBtX3Zh
bHVlcy5zaXplKCkgIT0gbV9rZXlUaW1lcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmIChtX2tleVNwbGluZXMuc2l6ZSgpICYmIG1fdmFsdWVzLnNpemUoKSAh
PSBtX2tleVNwbGluZXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpjYWxjdWxh
dGVWYWx1ZUluZGV4QW5kUGVyY2VudGFnZVBhc3QoZmxvYXQgZWxhcHNlZFRpbWUsIGZsb2F0IHRp
bWVQZXJjZW50YWdlLCB1bnNpZ25lZCYgdmFsdWVJbmRleCwgZmxvYXQmIHBlcmNlbnRhZ2VQYXN0
KQoreworICAgIEFTU0VSVChpc1ZhbGlkQW5pbWF0aW9uKCkpOworICAgIEVBbmltYXRpb25Nb2Rl
IGFuaW1hdGlvbk1vZGUgPSBkZXRlY3RBbmltYXRpb25Nb2RlKCk7CisgICAgCisgICAgYm9vbCBp
c1ZhbHVlc0FuaW1hdGlvbiA9IChhbmltYXRpb25Nb2RlID09IFZBTFVFU19BTklNQVRJT04pOwor
ICAgIGZsb2F0IHZhbHVlQ291bnQgPSBpc1ZhbHVlc0FuaW1hdGlvbiA/IG1fdmFsdWVzLnNpemUo
KSA6IDI7ICAKKyAgICBmbG9hdCB2YWx1ZVBlcmNlbnRhZ2UgPSB2YWx1ZUNvdW50ICogdGltZVBl
cmNlbnRhZ2U7CisgICAgaWYgKGlzVmFsdWVzQW5pbWF0aW9uKSB7CisgICAgICAgIGNhbGN1bGF0
ZVZhbHVlSW5kZXhBbmRQZXJjZW50YWdlUGFzdEZvcktleVRpbWVzKGVsYXBzZWRUaW1lLCBtX2tl
eVRpbWVzLCB2YWx1ZUluZGV4LCBwZXJjZW50YWdlUGFzdCk7CisgICAgICAgIGlmIChtX2NhbGNN
b2RlID09IENBTENNT0RFX1NQTElORSkKKyAgICAgICAgICAgIGFkanVzdFBlcmNlbnRhZ2VQYXN0
Rm9yS2V5U3BsaW5lcyhtX2tleVNwbGluZXMsIHZhbHVlSW5kZXgsIHBlcmNlbnRhZ2VQYXN0KTsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBEZWZhdWx0LCBsaW5lYXIgYmVoYXZpb3IKKyAgICAg
ICAgZmxvYXQgZmxvYXRWYWx1ZUluZGV4ID0gZmxvb3JmKHZhbHVlUGVyY2VudGFnZSk7CisgICAg
ICAgIHBlcmNlbnRhZ2VQYXN0ID0gIHZhbHVlUGVyY2VudGFnZSAtIChmbG9hdFZhbHVlSW5kZXgg
LyB2YWx1ZUNvdW50KTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fY2FsY01vZGUgPT0gQ0FMQ01P
REVfRElTQ1JFVEUpCisgICAgICAgIHBlcmNlbnRhZ2VQYXN0ID0gMC4wZjsKKyAgICBlbHNlIGlm
IChtX2NhbGNNb2RlID09IENBTENNT0RFX1BBQ0VEKSB7CisgICAgICAgIC8vIGNhbGN1bGF0ZSB2
YWx1ZSBwZXJjZW50YWdlIGJhc2VkIG9uIGRpc3RhbmNlIGluc3RlYWQgb2YgdGltZQorICAgICAg
ICBmbG9hdCB0b3RhbERpc3RhbmNlID0gY2FsY3VsYXRlVG90YWxEaXN0YW5jZSgpOworICAgICAg
ICBmbG9hdCBkaXN0YW5jZVBlcmNlbnRhZ2UgPSB0b3RhbERpc3RhbmNlICogdGltZVBlcmNlbnRh
Z2U7CisgICAgICAgIHZhbHVlSW5kZXhBbmRQZXJjZW50YWdlUGFzdEZvckRpc3RhbmNlKGRpc3Rh
bmNlUGVyY2VudGFnZSwgdmFsdWVJbmRleCwgcGVyY2VudGFnZVBhc3QpOworICAgIH0KK30KKwor
Ym9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojp1cGRhdGVBbmltYXRpb25CYXNlVmFsdWVGcm9tRWxl
bWVudCgpCit7CisgICAgbV9iYXNlVmFsdWUgPSB0YXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVl
KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6YXBw
bHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KCkKK3sKKyAgICBzZXRUYXJnZXRBdHRyaWJ1dGVBbmlt
YXRlZFZhbHVlKG1fYW5pbWF0ZWRWYWx1ZSk7Cit9CisKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6aGFuZGxlVGltZXJFdmVudChkb3VibGUgZWxhcHNlZFNlY29uZHMsIGRvdWJsZSB0aW1lUGVy
Y2VudGFnZSkKIHsKICAgICBpZiAoIWNvbm5lY3RlZFRvVGltZXIoKSkgewogICAgICAgICBjb25u
ZWN0VGltZXIoKTsKLSAgICAgICAgaGFuZGxlU3RhcnRDb25kaXRpb24oKTsgLy8gTmVlZCB0byBj
aGVjayBib29sIHJldHVybiBpZiBhZGRpbmcgYW55dGhpbmcgYWZ0ZXIgdGhpcyBjYWxsCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKCF1cGRhdGVDdXJyZW50VmFsdWUodGlt
ZVBlcmNlbnRhZ2UpKQorLy8gICAgaWYgKGlzQWNjdW11bGF0ZWQoKSAmJiByZXBlYXRpb25zKCkg
IT0gMC4wKQorLy8gICAgICAgIGFjY3VtdWxhdGVGb3JSZXBldGl0aW9ucyhtX3JlcGV0aXRpb25z
KTsKKyAgICAKKyAgICBFQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlID0gZGV0ZWN0QW5pbWF0
aW9uTW9kZSgpOworICAgIAorICAgIHVuc2lnbmVkIHZhbHVlSW5kZXggPSAwOworICAgIGZsb2F0
IHBlcmNlbnRhZ2VQYXN0ID0gMDsKKyAgICBpZiAoYW5pbWF0aW9uTW9kZSAhPSBUT19BTklNQVRJ
T04pCisgICAgICAgIGNhbGN1bGF0ZVZhbHVlSW5kZXhBbmRQZXJjZW50YWdlUGFzdChlbGFwc2Vk
U2Vjb25kcywgdGltZVBlcmNlbnRhZ2UsIHZhbHVlSW5kZXgsIHBlcmNlbnRhZ2VQYXN0KTsKKyAg
ICAgICAgCisgICAgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGFuaW1hdGlvbk1vZGUsIHZhbHVl
SW5kZXgpOworICAgIAorICAgIGlmICghdXBkYXRlQW5pbWF0ZWRWYWx1ZShhbmltYXRpb25Nb2Rl
LCB0aW1lUGVyY2VudGFnZSwgdmFsdWVJbmRleCwgcGVyY2VudGFnZVBhc3QpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgaWYgKHRpbWVQZXJjZW50YWdlID09IDEuMCkgewogICAgICAgICBp
ZiAoKG1fcmVwZWF0Q291bnQgPiAwICYmIG1fcmVwZXRpdGlvbnMgPCBtX3JlcGVhdENvdW50IC0g
MSkgfHwgaXNJbmRlZmluaXRlKG1fcmVwZWF0Q291bnQpKSB7Ci0gICAgICAgICAgICB1cGRhdGVM
YXN0VmFsdWVXaXRoQ3VycmVudCgpOwogICAgICAgICAgICAgbV9yZXBldGl0aW9ucysrOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBkaXNjb25uZWN0
VGltZXIoKTsKLSAgICAgICAgcmVzZXRWYWx1ZXMoKTsgICAKICAgICB9CiB9CiAKLWJvb2wgU1ZH
QW5pbWF0aW9uRWxlbWVudDo6dXBkYXRlRm9yRWxhcHNlZFNlY29uZHMoZG91YmxlIGVsYXBzZWRT
ZWNvbmRzKQorYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojp1cGRhdGVBbmltYXRlZFZhbHVlRm9y
RWxhcHNlZFNlY29uZHMoZG91YmxlIGVsYXBzZWRTZWNvbmRzKQogeworLy8gICAgaWYgKGlzU3Rv
cHBlZCgpKSB7CisvLyAgICAgICAgaWYgKG1fZmlsbCA9PSBGSUxMX0ZSRUVaRSkKKy8vICAgICAg
ICAgICAgZWxhcHNlZFNlY29uZHMgPSBtX3N0b3BwZWRUaW1lOworLy8gICAgICAgIGVsc2UKKy8v
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworLy8gICAgfQorICAgIAogICAgIC8vIFZhbGlkYXRl
IGFuaW1hdGlvbiB0aW1pbmcgc2V0dGluZ3M6CiAgICAgLy8gIzEgKGR1cmF0aW9uID4gMCkgLT4g
ZmluZQogICAgIC8vICMyIChkdXJhdGlvbiA8PSAwLjAgJiYgZW5kID4gMCkgLT4gZmluZQotICAg
IAogICAgIGlmICgobV9zaW1wbGVEdXJhdGlvbiA8PSAwLjAgJiYgbV9lbmQgPD0gMC4wKSB8fCAo
aXNJbmRlZmluaXRlKG1fc2ltcGxlRHVyYXRpb24pICYmIG1fZW5kIDw9IDAuMCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsgLy8gSWdub3JlIGR1cj0iMCIgb3IgZHVyPSItbmVnIgogICAgIAogICAg
IGZsb2F0IHBlcmNlbnRhZ2UgPSBjYWxjdWxhdGVUaW1lUGVyY2VudGFnZShlbGFwc2VkU2Vjb25k
cywgbV9iZWdpbiwgbV9lbmQsIG1fc2ltcGxlRHVyYXRpb24sIG1fcmVwZXRpdGlvbnMpOwogICAg
IAogICAgIGlmIChwZXJjZW50YWdlIDw9IDEuMCB8fCBjb25uZWN0ZWRUb1RpbWVyKCkpCi0gICAg
ICAgIGhhbmRsZVRpbWVyRXZlbnQocGVyY2VudGFnZSk7CisgICAgICAgIGhhbmRsZVRpbWVyRXZl
bnQoZWxhcHNlZFNlY29uZHMsIHBlcmNlbnRhZ2UpOwogICAgIAotICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiB0cnVlOyAvLyB2YWx1ZSB3YXMgdXBkYXRlZCwgbmVlZCB0byBhcHBseQogfQog
CiB9CkluZGV4OiBrc3ZnMi9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtzdmcyL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJKHJldmlzaW9uIDE5MDgzKQorKysga3N2
ZzIvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1l
bnQoKSBjb25zdDsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZFRhcmdl
dCgpIGNvbnN0OworICAgICAgICBib29sIGlzVmFsaWRBbmltYXRpb24oKSBjb25zdDsKICAgICAg
ICAgCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVz
dHM6OmlzVmFsaWQoKTsgfQogCkBAIC0xMDAsMTYgKzEwMSw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VSZW5kZXJlcigpOwogCi0gICAgICAgIC8v
IEhlbHBlcnMKLSAgICAgICAgYm9vbCB1cGRhdGVGb3JFbGFwc2VkU2Vjb25kcyhkb3VibGUpOwot
ICAgICAgICB2b2lkIGhhbmRsZVRpbWVyRXZlbnQoZG91YmxlIHRpbWVQZXJjZW50YWdlKTsKLQot
ICAgICAgICBzdGF0aWMgZG91YmxlIHBhcnNlQ2xvY2tWYWx1ZShjb25zdCBTdHJpbmcmKTsKLQot
ICAgICAgICBTdHJpbmcgdGFyZ2V0QXR0cmlidXRlKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0
VGFyZ2V0QXR0cmlidXRlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgICAgIHN0YXRpYyB2b2lkIHNl
dFRhcmdldEF0dHJpYnV0ZShTVkdFbGVtZW50KiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgRUF0dHJpYnV0ZVR5cGUgPSBBVFRSSUJVVEVUWVBFX0FVVE8p
OworICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQW5pbWF0aW9uQmFzZVZhbHVlRnJvbUVsZW1l
bnQoKTsKKyAgICAgICAgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlRm9yRWxhcHNlZFNlY29uZHMo
ZG91YmxlIGVsYXBzZWRTZWNvbmRzKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFwcGx5QW5pbWF0
ZWRWYWx1ZVRvRWxlbWVudCgpOwogCiAgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lKCkgY29u
c3Q7CiAKQEAgLTExOSwyNCArMTEzLDMyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
Ym9vbCBpc0FkZGl0aXZlKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNBY2N1bXVsYXRlZCgpIGNv
bnN0OwogCi0gICAgICAgIEVBbmltYXRpb25Nb2RlIGRldGVjdEFuaW1hdGlvbk1vZGUoKSBjb25z
dDsKLQotICAgICAgICBpbnQgY2FsY3VsYXRlQ3VycmVudFZhbHVlSXRlbShkb3VibGUgdGltZVBl
cmNlbnRhZ2UpOwotICAgICAgICBkb3VibGUgY2FsY3VsYXRlUmVsYXRpdmVUaW1lUGVyY2VudGFn
ZShkb3VibGUgdGltZVBlcmNlbnRhZ2UsIGludCBjdXJyZW50SXRlbSk7Ci0KICAgICAgICAgZG91
YmxlIHJlcGVhdGlvbnMoKSBjb25zdDsKICAgICAgICAgc3RhdGljIGJvb2wgaXNJbmRlZmluaXRl
KGRvdWJsZSB2YWx1ZSk7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIG11dGFibGUgU1ZHRWxl
bWVudCogbV90YXJnZXRFbGVtZW50OwogICAgICAgICAKKyAgICAgICAgRUFuaW1hdGlvbk1vZGUg
ZGV0ZWN0QW5pbWF0aW9uTW9kZSgpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgc3RhdGljIGRv
dWJsZSBwYXJzZUNsb2NrVmFsdWUoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHN0YXRpYyB2b2lk
IHNldFRhcmdldEF0dHJpYnV0ZShTVkdFbGVtZW50KiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRUF0dHJpYnV0ZVR5cGUgPSBBVFRSSUJVVEVUWVBFX0FV
VE8pOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIHRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFs
dWUoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVl
KGNvbnN0IFN0cmluZyYpOworICAgICAgICAKICAgICAgICAgdm9pZCBjb25uZWN0VGltZXIoKTsK
ICAgICAgICAgdm9pZCBkaXNjb25uZWN0VGltZXIoKTsKKworICAgICAgICB2aXJ0dWFsIGZsb2F0
IGNhbGN1bGF0ZVRvdGFsRGlzdGFuY2UoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHZhbHVlSW5k
ZXhBbmRQZXJjZW50YWdlUGFzdEZvckRpc3RhbmNlKGZsb2F0IGRpc3RhbmNlUGVyY2VudGFnZSwg
dW5zaWduZWQmIHZhbHVlSW5kZXgsIGZsb2F0JiBwZXJjZW50YWdlUGFzdCk7CisgICAgICAgIAor
ICAgICAgICB2b2lkIGNhbGN1bGF0ZVZhbHVlSW5kZXhBbmRQZXJjZW50YWdlUGFzdChmbG9hdCBl
bGFwc2VkVGltZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVkJiB2YWx1ZUluZGV4LCBm
bG9hdCYgcGVyY2VudGFnZVBhc3QpOwogICAgICAgICAKLSAgICAgICAgdmlydHVhbCBib29sIHVw
ZGF0ZUN1cnJlbnRWYWx1ZShkb3VibGUgdGltZVBlcmNlbnRhZ2UpID0gMDsKLSAgICAgICAgdmly
dHVhbCBib29sIGhhbmRsZVN0YXJ0Q29uZGl0aW9uKCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlTGFzdFZhbHVlV2l0aEN1cnJlbnQoKSB7IH0gLy8gU2VlIGJ1ZyAxMjA3NSBmb3Ig
ZXhwbGFpbmF0aW9uIG9mIHdoeSB0aGlzIGlzIGEgYmFkIEFQSQotICAgICAgICB2aXJ0dWFsIHZv
aWQgcmVzZXRWYWx1ZXMoKSB7IH0KKyAgICAgICAgdm9pZCBoYW5kbGVUaW1lckV2ZW50KGRvdWJs
ZSBlbGFwc2VkU2Vjb25kcywgZG91YmxlIHRpbWVQZXJjZW50YWdlKTsKKyAgICAgICAgCisgICAg
ICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlLCBmbG9h
dCB0aW1lUGVyY2VudGFnZSwgdW5zaWduZWQgdmFsdWVJbmRleCwgZmxvYXQgcGVyY2VudGFnZVBh
c3QpID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhF
QW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJbmRleCkgPSAwOwogICAgICAgICAKICAgICAg
ICAgc3RhdGljIHZvaWQgcGFyc2VLZXlOdW1iZXJzKFZlY3RvcjxmbG9hdD4mIGtleU51bWJlcnMs
IGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgICAgICBzdGF0aWMgdm9pZCBwYXJzZUJlZ2luT3JF
bmRWYWx1ZShkb3VibGUmIG51bWJlciwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CkBAIC0xNjIsNiAr
MTY0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdHJpbmcgbV9ocmVmOwogICAg
ICAgICBTdHJpbmcgbV9yZXBlYXREdXI7CiAgICAgICAgIFN0cmluZyBtX2F0dHJpYnV0ZU5hbWU7
CisgICAgICAgIAorICAgICAgICBTdHJpbmcgbV9iYXNlVmFsdWU7CisgICAgICAgIFN0cmluZyBt
X2FuaW1hdGVkVmFsdWU7CiAKICAgICAgICAgZG91YmxlIG1fbWF4OwogICAgICAgICBkb3VibGUg
bV9taW47CkBAIC0xNzEsNyArMTc2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBk
b3VibGUgbV9yZXBldGl0aW9uczsKICAgICAgICAgZG91YmxlIG1fcmVwZWF0Q291bnQ7CiAKLSAg
ICAgICAgUmVmUHRyPFNWR1N0cmluZ0xpc3Q+IG1fdmFsdWVzOworICAgICAgICBWZWN0b3I8U3Ry
aW5nPiBtX3ZhbHVlczsKICAgICAgICAgVmVjdG9yPGZsb2F0PiBtX2tleVRpbWVzOwogICAgICAg
ICAKICAgICAgICAgc3RydWN0IEtleVNwbGluZSB7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHU2V0RWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1NldEVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxOTA4MykKKysrIGtzdmcyL3N2Zy9TVkdTZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksMzAgKzM5LDYgQEAgU1ZHU2V0RWxlbWVudDo6flNWR1NldEVsZW1lbnQoKQogewog
fQogCi1ib29sIFNWR1NldEVsZW1lbnQ6OnVwZGF0ZUN1cnJlbnRWYWx1ZShkb3VibGUgdGltZVBl
cmNlbnRhZ2UpCi17Ci0gICAgaWYgKG1fc2F2ZWRUby5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9z
YXZlZFRvID0gdGFyZ2V0QXR0cmlidXRlKCk7Ci0gICAgICAgIHNldFRhcmdldEF0dHJpYnV0ZSht
X3RvKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFNWR1NldEVsZW1lbnQ6
OmhhbmRsZVN0YXJ0Q29uZGl0aW9uKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBT
VkdTZXRFbGVtZW50OjpoYW5kbGVFbmRDb25kaXRpb24oKQotewotICAgIGRpc2Nvbm5lY3RUaW1l
cigpOwotICAgIAotICAgIGlmICghaXNGcm96ZW4oKSkKLSAgICAgICAgc2V0VGFyZ2V0QXR0cmli
dXRlKG1fc2F2ZWRUbyk7Ci0gICAgCi0gICAgbV9zYXZlZFRvID0gU3RyaW5nKCk7Ci19Ci0KIH0K
IAogLy8gdmltOnRzPTQ6bm9ldApJbmRleDoga3N2ZzIvc3ZnL1NWR1NldEVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHU2V0RWxlbWVudC5oCShyZXZpc2lvbiAxOTA4MykKKysr
IGtzdmcyL3N2Zy9TVkdTZXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDkgKzM3LDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29u
c3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CiAg
ICAgICAgIAotICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQ3VycmVudFZhbHVlKGRvdWJsZSB0
aW1lUGVyY2VudGFnZSk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVTdGFydENvbmRpdGlv
bigpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRW5kQ29uZGl0aW9uKCk7CisgICAgICAg
IHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlLCBmbG9hdCB0
aW1lUGVyY2VudGFnZSwgdW5zaWduZWQgdmFsdWVJbmRleCwgZmxvYXQgcGVyY2VudGFnZVBhc3Qp
IHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRU
b1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJbmRleCkgeyByZXR1cm4gdHJ1
ZTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgU3RyaW5nIG1fc2F2ZWRUbzsKSW5kZXg6IGtz
dmcyL3N2Zy9TVkdUcmFuc2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdUcmFu
c2Zvcm0uY3BwCShyZXZpc2lvbiAxOTA4MykKKysrIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIGJvb2wgU1ZHVHJhbnNmb3JtOjppc1Zh
bGlkKCkKICAgICByZXR1cm4gKG1fdHlwZSAhPSBTVkdfVFJBTlNGT1JNX1VOS05PV04pOwogfQog
Ci11bnNpZ25lZCBzaG9ydCBTVkdUcmFuc2Zvcm06OnR5cGUoKSBjb25zdAorU1ZHVHJhbnNmb3Jt
OjpTVkdUcmFuc2Zvcm1UeXBlIFNWR1RyYW5zZm9ybTo6dHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fdHlwZTsKIH0KQEAgLTg1LDYgKzg1LDExIEBAIHZvaWQgU1ZHVHJhbnNmb3JtOjpzZXRU
cmFuc2xhdGUoZG91YmxlIHQKICAgICBtX21hdHJpeC50cmFuc2xhdGUodHgsIHR5KTsKIH0KIAor
RmxvYXRQb2ludCBTVkdUcmFuc2Zvcm06OnRyYW5zbGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IEZsb2F0UG9pbnQobV9tYXRyaXguZSgpLCBtX21hdHJpeC5mKCkpOworfQorCiB2b2lkIFNWR1Ry
YW5zZm9ybTo6c2V0U2NhbGUoZG91YmxlIHN4LCBkb3VibGUgc3kpCiB7CiAgICAgbV90eXBlID0g
U1ZHX1RSQU5TRk9STV9TQ0FMRTsKQEAgLTk0LDYgKzk5LDExIEBAIHZvaWQgU1ZHVHJhbnNmb3Jt
OjpzZXRTY2FsZShkb3VibGUgc3gsIGQKICAgICBtX21hdHJpeC5zY2FsZShzeCwgc3kpOwogfQog
CitGbG9hdFNpemUgU1ZHVHJhbnNmb3JtOjpzY2FsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZs
b2F0U2l6ZShtX21hdHJpeC5hKCksIG1fbWF0cml4LmQoKSk7Cit9CisKIHZvaWQgU1ZHVHJhbnNm
b3JtOjpzZXRSb3RhdGUoZG91YmxlIGFuZ2xlLCBkb3VibGUgY3gsIGRvdWJsZSBjeSkKIHsKICAg
ICBtX3R5cGUgPSBTVkdfVFJBTlNGT1JNX1JPVEFURTsKQEAgLTExMiw3ICsxMjIsNyBAQCB2b2lk
IFNWR1RyYW5zZm9ybTo6c2V0U2tld1goZG91YmxlIGFuZ2xlCiAgICAgbV9hbmdsZSA9IGFuZ2xl
OwogCiAgICAgbV9tYXRyaXgucmVzZXQoKTsKLSAgICBtX21hdHJpeC5zaGVhcih0YW4oU1ZHQW5n
bGU6OnRvcmFkKGFuZ2xlKSksIDAuMGYpOworICAgIG1fbWF0cml4LnNrZXdYKGFuZ2xlKTsKIH0K
IAogdm9pZCBTVkdUcmFuc2Zvcm06OnNldFNrZXdZKGRvdWJsZSBhbmdsZSkKQEAgLTEyMSw3ICsx
MzEsNyBAQCB2b2lkIFNWR1RyYW5zZm9ybTo6c2V0U2tld1koZG91YmxlIGFuZ2xlCiAgICAgbV9h
bmdsZSA9IGFuZ2xlOwogCiAgICAgbV9tYXRyaXgucmVzZXQoKTsKLSAgICBtX21hdHJpeC5zaGVh
cigwLjBmLCB0YW4oU1ZHQW5nbGU6OnRvcmFkKGFuZ2xlKSkpOworICAgIG1fbWF0cml4LnNrZXdZ
KGFuZ2xlKTsKIH0KIAogLy8gdmltOnRzPTQ6bm9ldApJbmRleDoga3N2ZzIvc3ZnL1NWR1RyYW5z
Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm0uaAkocmV2aXNpb24g
MTkwODMpCisrKyBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDYgKzI5LDkgQEAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKKyAgICAKKyAgICBjbGFzcyBGbG9hdFBvaW50OworICAgIGNsYXNzIEZsb2F0U2l6ZTsKIAog
ICAgIGNsYXNzIFNWR1RyYW5zZm9ybSB7CiAgICAgcHVibGljOgpAQCAtNDYsNyArNDksNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGV4cGxpY2l0IFNWR1RyYW5zZm9ybShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mKTsKICAgICAgICAgdmlydHVhbCB+U1ZHVHJhbnNmb3JtKCk7CiAgICAg
ICAgICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZSgpIGNvbnN0OworICAgICAg
ICBTVkdUcmFuc2Zvcm1UeXBlIHR5cGUoKSBjb25zdDsKIAogICAgICAgICBBZmZpbmVUcmFuc2Zv
cm0gbWF0cml4KCkgY29uc3Q7CiAgICAgCkBAIC01OSwxNCArNjIsMjggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2b2lkIHNldFNrZXdYKGRvdWJsZSBhbmdsZSk7CiAgICAgICAgIHZv
aWQgc2V0U2tld1koZG91YmxlIGFuZ2xlKTsKICAgICAgICAgCisgICAgICAgIC8vIEludGVybmFs
IHVzZSBvbmx5IChhbmltYXRpb24gc3lzdGVtKQorICAgICAgICBGbG9hdFBvaW50IHRyYW5zbGF0
ZSgpIGNvbnN0OworICAgICAgICBGbG9hdFNpemUgc2NhbGUoKSBjb25zdDsKKyAgICAgICAgCiAg
ICAgICAgIGJvb2wgaXNWYWxpZCgpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdW5zaWduZWQg
c2hvcnQgbV90eXBlOworICAgICAgICBTVkdUcmFuc2Zvcm1UeXBlIG1fdHlwZTsKICAgICAgICAg
ZG91YmxlIG1fYW5nbGU7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX21hdHJpeDsKICAgICB9
OwogCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTVkdUcmFuc2Zvcm0mIGEsIGNv
bnN0IFNWR1RyYW5zZm9ybSYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhLnR5cGUoKSA9PSBi
LnR5cGUoKSAmJiBhLmFuZ2xlKCkgPT0gYi5hbmdsZSgpICYmIGEubWF0cml4KCkgPT0gYi5tYXRy
aXgoKTsKKyAgICB9CisgICAgCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTVkdU
cmFuc2Zvcm0mIGEsIGNvbnN0IFNWR1RyYW5zZm9ybSYgYikKKyAgICB7CisgICAgICAgIHJldHVy
biAhKGEgPT0gYik7CisgICAgfQorICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1EaXN0YW5jZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybURpc3RhbmNlLmNwcAkocmV2
aXNpb24gMCkKKysrIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMjU4IEBACisvKgorIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorIAorIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
cHJvamVjdAorIAorIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorIEJv
c3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
ZmRlZiBTVkdfU1VQUE9SVAorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybURpc3RhbmNlLmgiCisKKyNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAi
U1ZHVHJhbnNmb3JtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK1NWR1RyYW5zZm9y
bURpc3RhbmNlOjpTVkdUcmFuc2Zvcm1EaXN0YW5jZSgpCisgICAgOiBtX3R5cGUoU1ZHVHJhbnNm
b3JtOjpTVkdfVFJBTlNGT1JNX1VOS05PV04pCisgICAgLCBtX2FuZ2xlKDApCit7Cit9CisKK1NW
R1RyYW5zZm9ybURpc3RhbmNlOjpTVkdUcmFuc2Zvcm1EaXN0YW5jZShTVkdUcmFuc2Zvcm06OlNW
R1RyYW5zZm9ybVR5cGUgdHlwZSwgZG91YmxlIGFuZ2xlLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKKyAgICA6IG1fdHlwZShTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVU5L
Tk9XTikKKyAgICAsIG1fYW5nbGUoYW5nbGUpCisgICAgLCBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0p
Cit7Cit9CisKK1NWR1RyYW5zZm9ybURpc3RhbmNlOjpTVkdUcmFuc2Zvcm1EaXN0YW5jZShjb25z
dCBTVkdUcmFuc2Zvcm0mIGZyb21TVkdUcmFuc2Zvcm0sIGNvbnN0IFNWR1RyYW5zZm9ybSYgdG9T
VkdUcmFuc2Zvcm0pCisgICAgOiBtX3R5cGUoZnJvbVNWR1RyYW5zZm9ybS50eXBlKCkpCisgICAg
LCBtX2FuZ2xlKDApCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSB0b1NWR1RyYW5zZm9ybS50eXBl
KCkpOworICAgIAorICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06
OlNWR19UUkFOU0ZPUk1fVU5LTk9XTjoKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU1ZHVHJh
bnNmb3JtOjpTVkdfVFJBTlNGT1JNX01BVFJJWDoKKyAgICAgICAgLy8gRklYTUU6IG5lZWQgdG8g
YmUgYWJsZSB0byBzdWJ0cmFjdCB0byBtYXRyaWNlcworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fUk9UQVRFOgorICAgICAgICBtX2FuZ2xlID0g
dG9TVkdUcmFuc2Zvcm0uYW5nbGUoKSAtIGZyb21TVkdUcmFuc2Zvcm0uYW5nbGUoKTsKKyAgICAg
ICAgLy8gZmFsbCB0aHJvdWdoCisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1f
VFJBTlNMQVRFOgorICAgIHsKKyAgICAgICAgRmxvYXRTaXplIHRyYW5zbGF0aW9uRGlzdGFuY2Ug
PSB0b1NWR1RyYW5zZm9ybS50cmFuc2xhdGUoKSAtIGZyb21TVkdUcmFuc2Zvcm0udHJhbnNsYXRl
KCk7CisgICAgICAgIG1fdHJhbnNmb3JtLnRyYW5zbGF0ZSh0cmFuc2xhdGlvbkRpc3RhbmNlLndp
ZHRoKCksIHRyYW5zbGF0aW9uRGlzdGFuY2UuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NDQUxFOgorICAgIHsK
KyAgICAgICAgZmxvYXQgc2NhbGVYID0gZnJvbVNWR1RyYW5zZm9ybS5zY2FsZSgpLndpZHRoKCkg
IT0gMCA/IHRvU1ZHVHJhbnNmb3JtLnNjYWxlKCkud2lkdGgoKSAvIGZyb21TVkdUcmFuc2Zvcm0u
c2NhbGUoKS53aWR0aCgpIDogdG9TVkdUcmFuc2Zvcm0uc2NhbGUoKS53aWR0aCgpIC8gMC4wMDAw
MTsKKyAgICAgICAgZmxvYXQgc2NhbGVZID0gZnJvbVNWR1RyYW5zZm9ybS5zY2FsZSgpLmhlaWdo
dCgpICE9IDAgPyB0b1NWR1RyYW5zZm9ybS5zY2FsZSgpLmhlaWdodCgpIC8gZnJvbVNWR1RyYW5z
Zm9ybS5zY2FsZSgpLmhlaWdodCgpIDogdG9TVkdUcmFuc2Zvcm0uc2NhbGUoKS5oZWlnaHQoKSAv
IDAuMDAwMDE7CisgICAgICAgIG1fdHJhbnNmb3JtLnNjYWxlKHNjYWxlWCwgc2NhbGVZKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9S
TV9TS0VXWDoKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TS0VXWToKKyAg
ICAgICAgbV9hbmdsZSA9IHRvU1ZHVHJhbnNmb3JtLmFuZ2xlKCkgLSBmcm9tU1ZHVHJhbnNmb3Jt
LmFuZ2xlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK1NWR1RyYW5zZm9ybURpc3Rh
bmNlIFNWR1RyYW5zZm9ybURpc3RhbmNlOjpzY2FsZWREaXN0YW5jZShmbG9hdCBzY2FsZUZhY3Rv
cikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgU1ZHVHJhbnNmb3Jt
OjpTVkdfVFJBTlNGT1JNX1VOS05PV046CisgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1EaXN0
YW5jZSgpOworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURToKKyAg
ICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TQ0FMRToKKyAgICBjYXNlIFNWR1Ry
YW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg6CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNW
R19UUkFOU0ZPUk1fVFJBTlNMQVRFOgorICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtRGlzdGFu
Y2UobV90eXBlLCBtX2FuZ2xlICogc2NhbGVGYWN0b3IsIEFmZmluZVRyYW5zZm9ybShtX3RyYW5z
Zm9ybSkuc2NhbGUoc2NhbGVGYWN0b3IpKTsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RS
QU5TRk9STV9TS0VXWDoKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TS0VX
WToKKyAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybURpc3RhbmNlKG1fdHlwZSwgbV9hbmdsZSAq
IHNjYWxlRmFjdG9yLCBBZmZpbmVUcmFuc2Zvcm0oKSk7CisgICAgfQorICAgIAorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBTVkdUcmFuc2Zvcm1EaXN0YW5jZSgpOworfQor
CitTVkdUcmFuc2Zvcm0gU1ZHVHJhbnNmb3JtRGlzdGFuY2U6OmFkZFNWR1RyYW5zZm9ybXMoY29u
c3QgU1ZHVHJhbnNmb3JtJiBmaXJzdCwgY29uc3QgU1ZHVHJhbnNmb3JtJiBzZWNvbmQpCit7Cisg
ICAgQVNTRVJUKGZpcnN0LnR5cGUoKSA9PSBzZWNvbmQudHlwZSgpKTsKKyAgICAKKyAgICBTVkdU
cmFuc2Zvcm0gdHJhbnNmb3JtOworICAgIAorICAgIHN3aXRjaCAoZmlyc3QudHlwZSgpKSB7Cisg
ICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVU5LTk9XTjoKKyAgICAgICAgcmV0
dXJuIFNWR1RyYW5zZm9ybSgpOworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JN
X1JPVEFURToKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJJ20gbm90IHN1cmUgdGhhdCB0aGUg
dHJhbnNsYXRpb24gaXMgY29ycmVjdCBoZXJlCisgICAgICAgIGZsb2F0IGR4ID0gZmlyc3QudHJh
bnNsYXRlKCkueCgpICsgc2Vjb25kLnRyYW5zbGF0ZSgpLngoKTsKKyAgICAgICAgZmxvYXQgZHkg
PSBmaXJzdC50cmFuc2xhdGUoKS55KCkgKyBzZWNvbmQudHJhbnNsYXRlKCkueSgpOworICAgICAg
ICB0cmFuc2Zvcm0uc2V0Um90YXRlKGZpcnN0LmFuZ2xlKCkgKyBzZWNvbmQuYW5nbGUoKSwgZHgs
IGR5KTsKKyAgICAgICAgcmV0dXJuIHRyYW5zZm9ybTsKKyAgICB9CisgICAgY2FzZSBTVkdUcmFu
c2Zvcm06OlNWR19UUkFOU0ZPUk1fTUFUUklYOgorICAgICAgICB0cmFuc2Zvcm0uc2V0TWF0cml4
KGZpcnN0Lm1hdHJpeCgpICogc2Vjb25kLm1hdHJpeCgpKTsKKyAgICAgICAgcmV0dXJuIHRyYW5z
Zm9ybTsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEU6Cisg
ICAgeworICAgICAgICBmbG9hdCBkeCA9IGZpcnN0LnRyYW5zbGF0ZSgpLngoKSArIHNlY29uZC50
cmFuc2xhdGUoKS54KCk7CisgICAgICAgIGZsb2F0IGR5ID0gZmlyc3QudHJhbnNsYXRlKCkueSgp
ICsgc2Vjb25kLnRyYW5zbGF0ZSgpLnkoKTsKKyAgICAgICAgdHJhbnNmb3JtLnNldFRyYW5zbGF0
ZShkeCwgZHkpOworICAgICAgICByZXR1cm4gdHJhbnNmb3JtOworICAgIH0KKyAgICBjYXNlIFNW
R1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TQ0FMRToKKyAgICB7CisgICAgICAgIEZsb2F0U2l6
ZSBzY2FsZSA9IGZpcnN0LnNjYWxlKCkgKyBzZWNvbmQuc2NhbGUoKTsKKyAgICAgICAgdHJhbnNm
b3JtLnNldFNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKKyAgICAgICAgcmV0
dXJuIHRyYW5zZm9ybTsKKyAgICB9CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZP
Uk1fU0tFV1g6CisgICAgICAgIHRyYW5zZm9ybS5zZXRTa2V3WChmaXJzdC5hbmdsZSgpICsgc2Vj
b25kLmFuZ2xlKCkpOworICAgICAgICByZXR1cm4gdHJhbnNmb3JtOworICAgIGNhc2UgU1ZHVHJh
bnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NLRVdZOgorICAgICAgICB0cmFuc2Zvcm0uc2V0U2tld1ko
Zmlyc3QuYW5nbGUoKSArIHNlY29uZC5hbmdsZSgpKTsKKyAgICAgICAgcmV0dXJuIHRyYW5zZm9y
bTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFNW
R1RyYW5zZm9ybSgpOworfQorCit2b2lkIFNWR1RyYW5zZm9ybURpc3RhbmNlOjphZGRTVkdUcmFu
c2Zvcm0oY29uc3QgU1ZHVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGJvb2wgYWJzb2x1dGVWYWx1ZSkK
K3sKKyAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCBhZGQsIHNldCB0aGUgdHlwZSBmb3IgdGhp
cyBTVkdUcmFuc2Zvcm1EaXN0YW5jZQorICAgIGlmIChtX3R5cGUgPT0gU1ZHVHJhbnNmb3JtOjpT
VkdfVFJBTlNGT1JNX1VOS05PV04pCisgICAgICAgIG1fdHlwZSA9IHRyYW5zZm9ybS50eXBlKCk7
CisgICAgCisgICAgQVNTRVJUKG1fdHlwZSA9PSB0cmFuc2Zvcm0udHlwZSgpKTsKKyAgICAKKyAg
ICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JN
X1VOS05PV046CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RS
QU5TRk9STV9NQVRSSVg6CisgICAgICAgIG1fdHJhbnNmb3JtICo9IHRyYW5zZm9ybS5tYXRyaXgo
KTsgLy8gRklYTUU6IHdoYXQgZG9lcyAnZGlzdGFuY2UnIGJldHdlZW4gdHdvIHRyYW5zZm9ybXMg
bWVhbj8gIGhvdyBzaG91bGQgd2UgcmVzcGVjdCAnYWJzb2x1dGVWYWx1ZScgaGVyZT8KKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURToK
KyAgICAgICAgbV9hbmdsZSArPSBhYnNvbHV0ZVZhbHVlID8gZmFic2YodHJhbnNmb3JtLmFuZ2xl
KCkpIDogdHJhbnNmb3JtLmFuZ2xlKCk7CisgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgIGNh
c2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURToKKyAgICB7CisgICAgICAg
IGZsb2F0IGR4ID0gYWJzb2x1dGVWYWx1ZSA/IGZhYnNmKHRyYW5zZm9ybS50cmFuc2xhdGUoKS54
KCkpIDogdHJhbnNmb3JtLnRyYW5zbGF0ZSgpLngoKTsKKyAgICAgICAgZmxvYXQgZHkgPSBhYnNv
bHV0ZVZhbHVlID8gZmFic2YodHJhbnNmb3JtLnRyYW5zbGF0ZSgpLnkoKSkgOiB0cmFuc2Zvcm0u
dHJhbnNsYXRlKCkueSgpOworICAgICAgICBtX3RyYW5zZm9ybS50cmFuc2xhdGUoZHgsIGR5KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5T
Rk9STV9TQ0FMRToKKyAgICB7CisgICAgICAgIGZsb2F0IHNjYWxlWCA9IGFic29sdXRlVmFsdWUg
PyBmYWJzZih0cmFuc2Zvcm0uc2NhbGUoKS53aWR0aCgpKSA6IHRyYW5zZm9ybS5zY2FsZSgpLndp
ZHRoKCk7CisgICAgICAgIGZsb2F0IHNjYWxlWSA9IGFic29sdXRlVmFsdWUgPyBmYWJzZih0cmFu
c2Zvcm0uc2NhbGUoKS5oZWlnaHQoKSkgOiB0cmFuc2Zvcm0uc2NhbGUoKS5oZWlnaHQoKTsKKyAg
ICAgICAgbV90cmFuc2Zvcm0uc2NhbGUoc2NhbGVYLCBzY2FsZVkpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NLRVdYOgorICAg
IGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NLRVdZOgorICAgICAgICBtX2FuZ2xl
ICs9IGFic29sdXRlVmFsdWUgPyBmYWJzZih0cmFuc2Zvcm0uYW5nbGUoKSkgOiB0cmFuc2Zvcm0u
YW5nbGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm47Cit9CisKK1NWR1RyYW5zZm9ybSBTVkdUcmFuc2Zvcm1EaXN0
YW5jZTo6YWRkVG9TVkdUcmFuc2Zvcm0oY29uc3QgU1ZHVHJhbnNmb3JtJiB0cmFuc2Zvcm0pIGNv
bnN0Cit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSB0cmFuc2Zvcm0udHlwZSgpKTsKKyAgICAKKyAg
ICBTVkdUcmFuc2Zvcm0gbmV3VHJhbnNmb3JtKHRyYW5zZm9ybSk7CisgICAgCisgICAgc3dpdGNo
IChtX3R5cGUpIHsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9VTktOT1dO
OgorICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtKCk7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06
OlNWR19UUkFOU0ZPUk1fTUFUUklYOgorICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtKHRyYW5z
Zm9ybS5tYXRyaXgoKSAqIG1fdHJhbnNmb3JtKTsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZH
X1RSQU5TRk9STV9UUkFOU0xBVEU6CisgICAgeworICAgICAgICBGbG9hdFBvaW50IHRyYW5zbGF0
aW9uID0gdHJhbnNmb3JtLnRyYW5zbGF0ZSgpOworICAgICAgICB0cmFuc2xhdGlvbiArPSBGbG9h
dFNpemUobV90cmFuc2Zvcm0uZSgpLCBtX3RyYW5zZm9ybS5mKCkpOworICAgICAgICBuZXdUcmFu
c2Zvcm0uc2V0VHJhbnNsYXRlKHRyYW5zbGF0aW9uLngoKSwgdHJhbnNsYXRpb24ueSgpKTsKKyAg
ICAgICAgcmV0dXJuIG5ld1RyYW5zZm9ybTsKKyAgICB9CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06
OlNWR19UUkFOU0ZPUk1fU0NBTEU6CisgICAgeworICAgICAgICBGbG9hdFNpemUgc2NhbGUgPSB0
cmFuc2Zvcm0uc2NhbGUoKTsKKyAgICAgICAgc2NhbGUgKz0gRmxvYXRTaXplKG1fdHJhbnNmb3Jt
LmEoKSwgbV90cmFuc2Zvcm0uZCgpKTsKKyAgICAgICAgbmV3VHJhbnNmb3JtLnNldFNjYWxlKHNj
YWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuIG5ld1RyYW5zZm9y
bTsKKyAgICB9CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fUk9UQVRFOgor
ICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEknbSBub3QgY2VydGFpbiB0aGUgdHJhbnNsYXRpb24g
aXMgY2FsY3VsYXRlZCBjb3JyZWN0bHkgaGVyZQorICAgICAgICBGbG9hdFBvaW50IHRyYW5zbGF0
aW9uID0gdHJhbnNmb3JtLnRyYW5zbGF0ZSgpOworICAgICAgICB0cmFuc2xhdGlvbiArPSBGbG9h
dFNpemUobV90cmFuc2Zvcm0uZSgpLCBtX3RyYW5zZm9ybS5mKCkpOworICAgICAgICBuZXdUcmFu
c2Zvcm0uc2V0Um90YXRlKHRyYW5zZm9ybS5hbmdsZSgpICsgbV9hbmdsZSwgdHJhbnNsYXRpb24u
eCgpLCB0cmFuc2xhdGlvbi55KCkpOworICAgICAgICByZXR1cm4gbmV3VHJhbnNmb3JtOworICAg
IH0KKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TS0VXWDoKKyAgICAgICAg
bmV3VHJhbnNmb3JtLnNldFNrZXdYKHRyYW5zZm9ybS5hbmdsZSgpICsgbV9hbmdsZSk7CisgICAg
ICAgIHJldHVybiBuZXdUcmFuc2Zvcm07CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFO
U0ZPUk1fU0tFV1k6CisgICAgICAgIG5ld1RyYW5zZm9ybS5zZXRTa2V3WSh0cmFuc2Zvcm0uYW5n
bGUoKSArIG1fYW5nbGUpOworICAgICAgICByZXR1cm4gbmV3VHJhbnNmb3JtOworICAgIH0KKyAg
ICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU1ZHVHJhbnNmb3JtKCk7
Cit9CisKK2Jvb2wgU1ZHVHJhbnNmb3JtRGlzdGFuY2U6OmlzWmVybygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIChtX3RyYW5zZm9ybSA9PSBBZmZpbmVUcmFuc2Zvcm0oKSAmJiBtX2FuZ2xlID09IDAp
OworfQorCitmbG9hdCBTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6ZGlzdGFuY2UoKSBjb25zdAorewor
ICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZP
Uk1fVU5LTk9XTjoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNW
R19UUkFOU0ZPUk1fUk9UQVRFOgorICAgICAgICByZXR1cm4gc3FydGYobV9hbmdsZSAqIG1fYW5n
bGUgKyBtX3RyYW5zZm9ybS5lKCkgKiBtX3RyYW5zZm9ybS5lKCkgKyBtX3RyYW5zZm9ybS5mKCkg
KiBtX3RyYW5zZm9ybS5mKCkpOworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JN
X01BVFJJWDoKKyAgICAgICAgcmV0dXJuIDA7IC8vIEknbSBub3QgcXVpdGUgc3VyZSB5ZXQgd2hh
dCBkaXN0YW5jZSBiZXR3ZWVuIHR3byBtYXRyaWNlcyBtZWFucy4KKyAgICBjYXNlIFNWR1RyYW5z
Zm9ybTo6U1ZHX1RSQU5TRk9STV9TQ0FMRToKKyAgICAgICAgcmV0dXJuIHNxcnRmKG1fdHJhbnNm
b3JtLmEoKSAqIG1fdHJhbnNmb3JtLmEoKSArIG1fdHJhbnNmb3JtLmQoKSAqIG1fdHJhbnNmb3Jt
LmQoKSk7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOgor
ICAgICAgICByZXR1cm4gc3FydGYobV90cmFuc2Zvcm0uZSgpICogbV90cmFuc2Zvcm0uZSgpICsg
bV90cmFuc2Zvcm0uZigpICogbV90cmFuc2Zvcm0uZigpKTsKKyAgICBjYXNlIFNWR1RyYW5zZm9y
bTo6U1ZHX1RSQU5TRk9STV9TS0VXWDoKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5T
Rk9STV9TS0VXWToKKyAgICAgICAgcmV0dXJuIG1fYW5nbGU7CisgICAgfQorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit9CisKKyNlbmRpZgpJbmRleDoga3N2
ZzIvc3ZnL1NWR1RyYW5zZm9ybURpc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NW
R1RyYW5zZm9ybURpc3RhbmNlLmgJKHJldmlzaW9uIDApCisrKyBrc3ZnMi9zdmcvU1ZHVHJhbnNm
b3JtRGlzdGFuY2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyBDb3B5cmln
aHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAKKyBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QKKyAKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSAtIFN1aXRlIDMzMCwKKyBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisj
aWZuZGVmIFNWR1RyYW5zZm9ybURpc3RhbmNlX2gKKyNkZWZpbmUgU1ZHVHJhbnNmb3JtRGlzdGFu
Y2VfaAorI2lmZGVmIFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm0uaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKKyAg
ICAgICAgCisgICAgY2xhc3MgU1ZHVHJhbnNmb3JtRGlzdGFuY2UgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgU1ZHVHJhbnNmb3JtRGlzdGFuY2UoKTsKKyAgICAgICAgU1ZHVHJhbnNmb3JtRGlzdGFu
Y2UoY29uc3QgU1ZHVHJhbnNmb3JtJiBmcm9tVHJhbnNmb3JtLCBjb25zdCBTVkdUcmFuc2Zvcm0m
IHRvVHJhbnNmb3JtKTsKKyAgICAgICAgCisgICAgICAgIFNWR1RyYW5zZm9ybURpc3RhbmNlIHNj
YWxlZERpc3RhbmNlKGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdDsKKyAgICAgICAgU1ZHVHJhbnNm
b3JtIGFkZFRvU1ZHVHJhbnNmb3JtKGNvbnN0IFNWR1RyYW5zZm9ybSYpIGNvbnN0OworICAgICAg
ICB2b2lkIGFkZFNWR1RyYW5zZm9ybShjb25zdCBTVkdUcmFuc2Zvcm0mLCBib29sIGFic29sdXRl
VmFsdWUgPSBmYWxzZSk7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgU1ZHVHJhbnNmb3JtIGFk
ZFNWR1RyYW5zZm9ybXMoY29uc3QgU1ZHVHJhbnNmb3JtJiwgY29uc3QgU1ZHVHJhbnNmb3JtJik7
CisgICAgICAgIAorICAgICAgICBib29sIGlzWmVybygpIGNvbnN0OworICAgICAgICAKKyAgICAg
ICAgZmxvYXQgZGlzdGFuY2UoKSBjb25zdDsKKyAgICBwcml2YXRlOgorICAgICAgICBTVkdUcmFu
c2Zvcm1EaXN0YW5jZShTVkdUcmFuc2Zvcm06OlNWR1RyYW5zZm9ybVR5cGUsIGRvdWJsZSBhbmds
ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisgICAgICAgICAgICAKKyAgICAgICAgU1ZHVHJh
bnNmb3JtOjpTVkdUcmFuc2Zvcm1UeXBlIG1fdHlwZTsKKyAgICAgICAgZG91YmxlIG1fYW5nbGU7
CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX3RyYW5zZm9ybTsgLy8gZm9yIHN0b3Jpbmcgc2Nh
bGUsIHRyYW5zbGF0aW9uIG9yIG1hdHJpeCB0cmFuc2Zvcm1zCisgICAgfTsKK30KKworI2VuZGlm
IC8vIFNWR19TVVBQT1JUCisjZW5kaWYgLy8gU1ZHVHJhbnNmb3JtRGlzdGFuY2VfaApJbmRleDog
a3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9T
VkdUcmFuc2Zvcm1MaXN0LmNwcAkocmV2aXNpb24gMTkwODMpCisrKyBrc3ZnMi9zdmcvU1ZHVHJh
bnNmb3JtTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm0uaCIKICNpbmNsdWRl
ICJTVkdTVkdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtRGlzdGFuY2UuaCIKICNp
bmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpA
QCAtNjUsNiArNjYsMjAgQEAgU1ZHVHJhbnNmb3JtIFNWR1RyYW5zZm9ybUxpc3Q6OmNvbmNhdGVu
YQogICAgIHJldHVybiBTVkdUcmFuc2Zvcm0obWF0cml4KTsKIH0KIAorU1ZHVHJhbnNmb3JtIFNW
R1RyYW5zZm9ybUxpc3Q6OmNvbmNhdGVuYXRlRm9yVHlwZShTVkdUcmFuc2Zvcm06OlNWR1RyYW5z
Zm9ybVR5cGUpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IG51bWJlck9mSXRl
bXMoKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybSgpOwor
ICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFNWR1RyYW5zZm9ybURpc3RhbmNl
IHRvdGFsVHJhbnNmb3JtOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspCisgICAgICAgIHRvdGFsVHJhbnNmb3JtLmFkZFNWR1RyYW5zZm9ybShnZXRJdGVtKGks
IGVjKSk7CisgICAgCisgICAgcmV0dXJuIHRvdGFsVHJhbnNmb3JtLmFkZFRvU1ZHVHJhbnNmb3Jt
KFNWR1RyYW5zZm9ybSgpKTsKK30KKwogI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAKIC8vIHZpbTp0
cz00Om5vZXQKSW5kZXg6IGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAkocmV2aXNpb24gMTkwODMpCisrKyBrc3Zn
Mi9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICAvLyBJbnRlcm5hbCB1c2Ugb25seQogICAg
ICAgICBTVkdUcmFuc2Zvcm0gY29uY2F0ZW5hdGUoKSBjb25zdDsKKyAgICAgICAgU1ZHVHJhbnNm
b3JtIGNvbmNhdGVuYXRlRm9yVHlwZShTVkdUcmFuc2Zvcm06OlNWR1RyYW5zZm9ybVR5cGUpIGNv
bnN0OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12657</attachid>
            <date>2007-01-24 18:07:40 -0800</date>
            <delta_ts>2007-01-24 21:53:56 -0800</delta_ts>
            <desc>A version which works about as well as pre-patch</desc>
            <filename>works.patch</filename>
            <type>text/plain</type>
            <size>79838</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MDkyKQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNzk1LDYg
KzE3OTUsMTAgQEAKIAkJQTgzM0M4MEMwQTJDRjI1NjAwRDU3NjY0IC8qIFhNTE5hbWVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MzNDODBBMEEy
Q0YyNTYwMEQ1NzY2NCAvKiBYTUxOYW1lcy5jcHAgKi87IH07CiAJCUE4MzNDODBEMEEyQ0YyNTYw
MEQ1NzY2NCAvKiBYTUxOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTgzM0M4MEIwQTJDRjI1NjAwRDU3NjY0IC8qIFhNTE5hbWVzLmggKi87IH07
CiAJCUE4MzNDODUyMEEyQ0Y1MjgwMEQ1NzY2NCAvKiBTVkdFbGVtZW50RmFjdG9yeS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTY1ODFFNjA5RDE1
MDhEMDAwRTYxRDcgLyogU1ZHRWxlbWVudEZhY3RvcnkuY3BwICovOyB9OworCQlBODQ5NDJEOTBC
NjRBOUNBMDA2OUYwMEYgLyogQ29sb3JEaXN0YW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg0OTQyRDcwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9y
RGlzdGFuY2UuaCAqLzsgfTsKKwkJQTg0OTQyREEwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlz
dGFuY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTg0OTQyRDgwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlzdGFuY2UuY3BwICovOyB9OworCQlB
ODQ5NDdBRDBCNjdGNEExMDA2OUYwMEYgLyogU1ZHVHJhbnNmb3JtRGlzdGFuY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NDk0N0FCMEI2N0Y0QTEw
MDY5RjAwRiAvKiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5oICovOyB9OworCQlBODQ5NDdBRTBCNjdG
NEExMDA2OUYwMEYgLyogU1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg0OTQ3QUMwQjY3RjRBMTAwNjlGMDBGIC8q
IFNWR1RyYW5zZm9ybURpc3RhbmNlLmNwcCAqLzsgfTsKIAkJQTg2NjI5Q0YwOURBMkI0NzAwOTYz
M0E1IC8qIEpTVUlFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTg2NjI5QzkwOURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5oICovOyB9Owog
CQlBODY2MjlEMDA5REEyQjQ4MDA5NjMzQTUgLyogSlNVSUV2ZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NjYyOUNBMDlEQTJCNDcwMDk2MzNB
NSAvKiBKU1VJRXZlbnQuY3BwICovOyB9OwogCQlBODY2MjlEMTA5REEyQjQ4MDA5NjMzQTUgLyog
SlNNb3VzZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBODY2MjlDQjA5REEyQjQ3MDA5NjMzQTUgLyogSlNNb3VzZUV2ZW50LmggKi87IH07CkBA
IC00ODE0LDYgKzQ4MTgsMTAgQEAKIAkJQTgzM0M3RjYwQTJDRjFEODAwRDU3NjY0IC8qIHhtbGF0
dHJzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSB4bWxhdHRycy5pbjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTgzM0M4MEEwQTJDRjI1NjAwRDU3NjY0IC8qIFhNTE5hbWVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxOYW1lcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MzNDODBCMEEyQ0YyNTYwMEQ1NzY2NCAvKiBY
TUxOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1MTmFtZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTg0OTQyRDcwQjY0QTlDQTAwNjlGMDBGIC8q
IENvbG9yRGlzdGFuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29sb3JE
aXN0YW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBODQ5NDJEODBCNjRBOUNB
MDA2OUYwMEYgLyogQ29sb3JEaXN0YW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDb2xvckRpc3RhbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTg0OTQ3QUIwQjY3RjRBMTAwNjlGMDBGIC8qIFNWR1RyYW5zZm9ybURpc3RhbmNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1RyYW5zZm9ybURpc3RhbmNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4NDk0N0FDMEI2N0Y0QTEwMDY5RjAwRiAvKiBT
VkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE4NUQ3QTJGMDg3OUVCQTkwMDZBOTE3MiAvKiBRdWFydHpDb3JlLmZyYW1ld29yayAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJh
bWV3b3JrOyBuYW1lID0gUXVhcnR6Q29yZS5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9RdWFydHpDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1
dGU+IjsgfTsKIAkJQTg2NjI5QzkwOURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVSUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE4NjYyOUNBMDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVUlFdmVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MTgwLDYgKzgxODgsOCBAQAogCQlBOEMwRjdG
QzA4OTcwMUYzMDBCQTUxMTQgLyogc3ZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQlBODQ5NDJEODBCNjRBOUNBMDA2OUYwMEYgLyogQ29sb3JEaXN0YW5j
ZS5jcHAgKi8sCisJCQkJQTg0OTQyRDcwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlzdGFuY2Uu
aCAqLywKIAkJCQlCMkRERjA2NjBCNDgyQTAzMDA2NEE0QjEgLyogR3JhZGllbnRBdHRyaWJ1dGVz
LmggKi8sCiAJCQkJQjI1QUU1NUQwQjQ5RDY2MzAwNzRDNzI2IC8qIExpbmVhckdyYWRpZW50QXR0
cmlidXRlcy5oICovLAogCQkJCUIyRERGMDY0MEI0ODI5RkEwMDY0QTRCMSAvKiBQYXR0ZXJuQXR0
cmlidXRlcy5oICovLApAQCAtODUyMyw2ICs4NTMzLDggQEAKIAkJCQlBOEMwRjhERDA4OTcwMUY0
MDBCQTUxMTQgLyogU1ZHVHJhbnNmb3JtYWJsZS5jcHAgKi8sCiAJCQkJQThDMEY4REUwODk3MDFG
NDAwQkE1MTE0IC8qIFNWR1RyYW5zZm9ybWFibGUuaCAqLywKIAkJCQlCMkNCNDE1QjBBQjc1OTA0
MDA0RDlDNDUgLyogU1ZHVHJhbnNmb3JtYWJsZS5pZGwgKi8sCisJCQkJQTg0OTQ3QUMwQjY3RjRB
MTAwNjlGMDBGIC8qIFNWR1RyYW5zZm9ybURpc3RhbmNlLmNwcCAqLywKKwkJCQlBODQ5NDdBQjBC
NjdGNEExMDA2OUYwMEYgLyogU1ZHVHJhbnNmb3JtRGlzdGFuY2UuaCAqLywKIAkJCQlBOEMwRjhF
MTA4OTcwMUY0MDBCQTUxMTQgLyogU1ZHVHJhbnNmb3JtTGlzdC5jcHAgKi8sCiAJCQkJQThDMEY4
RTIwODk3MDFGNDAwQkE1MTE0IC8qIFNWR1RyYW5zZm9ybUxpc3QuaCAqLywKIAkJCQlCMkNCNDE1
QzBBQjc1OTA0MDA0RDlDNDUgLyogU1ZHVHJhbnNmb3JtTGlzdC5pZGwgKi8sCkBAIC0xMTA1MCw3
ICsxMTA2Miw5IEBACiAJCQkJQjI0MDU1NjYwQjVCRTY0MDAwMkEyOEMwIC8qIERPTVNWR0VsZW1l
bnRJbnN0YW5jZUxpc3RJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyQTY4MjQwQjVC
RURFNzAwMDJBNDgwIC8qIFByb2dyZXNzVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgw
Q0VCQUMwQjYwRkM0OTAwNzYzN0MxIC8qIFNWR01QYXRoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTg0OTQyRDkwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlzdGFuY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUxRTZFRUE4MEI2MjhEQjMwMDVGMkY3MCAvKiBKU0hUTUxTZWxlY3RFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlBODQ5NDdBRDBCNjdGNEExMDA2OUYwMEYgLyogU1ZH
VHJhbnNmb3JtRGlzdGFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTIzOTYsOSArMTI0MTAsMTEg
QEAKIAkJCQlBNzg0OTQxQjBCNUZFNTA3MDAxRTIzN0EgLyogQ2xpcGJvYXJkLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzNEZFOUU1MEI1Q0E1MzkwMDNFNEE3MyAvKiBGaWxlQ2hvb3Nlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBODBDRUJBRDBCNjBGQzQ5MDA3NjM3QzEgLyogU1ZHTVBhdGhF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4NDk0MkRBMEI2NEE5Q0EwMDY5RjAwRiAv
KiBDb2xvckRpc3RhbmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRTZFRUE0MEI2MjhEQTgw
MDVGMkY3MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTky
OTI2NDc3MEI2MUZDNzIwMEI0MUQzNCAvKiBKU0RvY3VtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDMTdGOTY2MEI2NEVCQjgwMDRBNjVDQiAvKiBKU0hUTUxTZWxlY3RFbGVtZW50
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4NDk0N0FFMEI2N0Y0QTEwMDY5RjAwRiAv
KiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IGtzdmcyL21p
c2MvU1ZHVGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL21pc2MvU1ZHVGltZXIuY3BwCShy
ZXZpc2lvbiAxOTA5MikKKysrIGtzdmcyL21pc2MvU1ZHVGltZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Myw4MSArODMsMzYgQEAgU1ZHVGltZXI6OlRhcmdldEFuaW1hdGlvbk1hcCBTVkdUaW1l
cjo6YQogICAgIHJldHVybiB0YXJnZXRNYXA7CiB9CiAKLS8vIEZJWE1FOiBFdmVudHVhbGx5IHRo
aXMgbG9naWMgd2lsbCBtb3ZlIGludG8gYW4gQW5pbWF0aW9uQ29tcG9zaXRvciBjbGFzcwotLy8g
RklYTUU6IEkgYWxzbyB0aGluayB0aGlzIGFsc28gdmlvbGF0ZXMgdGhlIHNwZWMuICBXZSBzaG91
bGQgcHJvYmFibHkganVzdCBjb3B5IHRoZSBiYXNlVmFsdWUgYW5kIG5vdCBjb25zb2xpZGF0ZQot
c3RhdGljIFBhc3NSZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4gYmFzZVZhbHVlVHJhbnNmb3JtTGlz
dChTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50KQotewotICAgIEFTU0VSVCh0YXJnZXRFbGVtZW50
LT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSk7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQqIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50Kj4odGFyZ2V0RWxlbWVudCk7Ci0gICAgUmVmUHRyPFNWR1RyYW5zZm9ybUxpc3Q+IHRhcmdl
dFRyYW5zZm9ybXMgPSBuZXcgU1ZHVHJhbnNmb3JtTGlzdCgpOwotICAgIFNWR1RyYW5zZm9ybUxp
c3QqIHRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm0tPnRyYW5zZm9ybUJhc2VWYWx1ZSgpOwotICAg
IGlmICh0cmFuc2Zvcm1MaXN0KSB7Ci0gICAgICAgIFNWR1RyYW5zZm9ybSBpbml0aWFsVHJhbnNm
b3JtID0gdHJhbnNmb3JtTGlzdC0+Y29uY2F0ZW5hdGUoKTsKLSAgICAgICAgaWYgKGluaXRpYWxU
cmFuc2Zvcm0uaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAg
ICAgICAgICAgdGFyZ2V0VHJhbnNmb3Jtcy0+YXBwZW5kSXRlbShpbml0aWFsVHJhbnNmb3JtLCBl
Yyk7Ci0gICAgICAgICAgICByZXR1cm4gdGFyZ2V0VHJhbnNmb3Jtcy5yZWxlYXNlKCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRhcmdldFRyYW5zZm9ybXM7Ci19Ci0KIC8vIEZJWE1F
OiBUaGlzIGZ1bnRpb24gd2lsbCBldmVudHVhbGx5IGJlY29tZSBwYXJ0IG9mIHRoZSBBbmltYXRp
b25Db21wb3NpdG9yCiB2b2lkIFNWR1RpbWVyOjphcHBseUFuaW1hdGlvbnMoZG91YmxlIGVsYXBz
ZWRTZWNvbmRzLCBjb25zdCBTVkdUaW1lcjo6VGFyZ2V0QW5pbWF0aW9uTWFwJiB0YXJnZXRNYXAp
CiB7ICAgIAogICAgIFRhcmdldEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgdGFyZ2V0SXRl
cmF0b3IgPSB0YXJnZXRNYXAuYmVnaW4oKTsKICAgICBUYXJnZXRBbmltYXRpb25NYXA6OmNvbnN0
X2l0ZXJhdG9yIHRlbmQgPSB0YXJnZXRNYXAuZW5kKCk7CiAgICAgZm9yICg7IHRhcmdldEl0ZXJh
dG9yICE9IHRlbmQ7ICsrdGFyZ2V0SXRlcmF0b3IpIHsKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcs
IENvbG9yPiBhdHRyaWJ1dGVUb0NvbG9yTWFwOyAvLyBzcGVjaWFsIDxhbmltYXRlQ29sb3I+IGNh
c2UKLSAgICAgICAgUmVmUHRyPFNWR1RyYW5zZm9ybUxpc3Q+IHRhcmdldFRyYW5zZm9ybXM7IC8v
IHNwZWNpYWwgPGFuaW1hdGVUcmFuc2Zvcm0+IGNhc2UKLSAgICAgICAgCiAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIHN0aWxsIG5vdCAxMDAlIGNvcnJlY3QuICBDb3JyZWN0IHdvdWxkIGJlOgog
ICAgICAgICAvLyAxLiBXYWxrIGJhY2t3YXJkcyB0aHJvdWdoIHRoZSBwcmlvcml0eSBsaXN0IHVu
dGlsIGEgcmVwbGFjZSAoIWlzQWRkaXRpdmUoKSkgaXMgZm91bmQKKyAgICAgICAgLy8gLS0gVGhp
cyBvcHRpbWl6YXRpb24gaXMgbm90IHBvc3NpYmxlIHdpdGhvdXQgY2FyZWZ1bCBjb25zaWRlcmF0
aW9uIGZvciBkZXBlbmRlbnQgdmFsdWVzIChzdWNoIGFzIGN4IGFuZCBmeCBpbiBTVkdSYWRpYWxH
cmFkaWVudCkKICAgICAgICAgLy8gMi4gU2V0IHRoZSBpbml0aWFsIHZhbHVlIChvciBsYXN0IHJl
cGxhY2UpIGFzIHRoZSBuZXcgYW5pbVZhbAogICAgICAgICAvLyAzLiBDYWxsIGVhY2ggZW5hYmxl
ZCBhbmltYXRpb24gaW4gdHVybiwgdG8gaGF2ZSBpdCBhcHBseSBpdHMgY2hhbmdlcwogICAgICAg
ICAvLyA0LiBBZnRlciBidWlsZGluZyBhIG5ldyBhbmltVmFsLCBzZXQgaXQgb24gdGhlIGVsZW1l
bnQuCiAgICAgICAgIAorICAgICAgICAvLyBDdXJyZW5seSB3ZSB1c2UgdGhlIGFjdHVhbCBhbmlt
VmFsIG9uIHRoZSBlbGVtZW50IGFzICJ0ZW1wb3Jhcnkgc3RvcmFnZSIKKyAgICAgICAgLy8gYW5k
IGFic3RyYWN0IHRoZSBnZXR0aW5nL3NldHRpbmcgb2YgdGhlIGF0dHJpYnV0ZXMgaW50byB0aGUg
U1ZHQW5pbWF0ZSogY2xhc3NlcworICAgICAgICAKICAgICAgICAgdW5zaWduZWQgY291bnQgPSB0
YXJnZXRJdGVyYXRvci0+c2Vjb25kLnNpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQqIGFu
aW1hdGlvbiA9IHRhcmdldEl0ZXJhdG9yLT5zZWNvbmRbaV07CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmICghYW5pbWF0aW9uLT5oYXNWYWxpZFRhcmdldCgpKQorICAgICAgICAgICAgaWYg
KCFhbmltYXRpb24tPmlzVmFsaWRBbmltYXRpb24oKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFhbmltYXRpb24tPnVwZGF0ZUZvckVs
YXBzZWRTZWNvbmRzKGVsYXBzZWRTZWNvbmRzKSkKKyAgICAgICAgICAgIGlmICghYW5pbWF0aW9u
LT51cGRhdGVBbmltYXRpb25CYXNlVmFsdWVGcm9tRWxlbWVudCgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIXRhcmdldFRyYW5zZm9y
bXMgJiYgKGFuaW1hdGlvbi0+aGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0ZVRyYW5zZm9ybVRh
ZykgfHwgYW5pbWF0aW9uLT5oYXNUYWdOYW1lKFNWR05hbWVzOjphbmltYXRlTW90aW9uVGFnKSkp
Ci0gICAgICAgICAgICAgICAgdGFyZ2V0VHJhbnNmb3JtcyA9IGJhc2VWYWx1ZVRyYW5zZm9ybUxp
c3QoYW5pbWF0aW9uLT50YXJnZXRFbGVtZW50KCkpOworICAgICAgICAgICAgaWYgKCFhbmltYXRp
b24tPnVwZGF0ZUFuaW1hdGVkVmFsdWVGb3JFbGFwc2VkU2Vjb25kcyhlbGFwc2VkU2Vjb25kcykp
CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChhbmltYXRpb24tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVUcmFuc2Zvcm1UYWcpKQot
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Kj4o
YW5pbWF0aW9uKS0+YXBwbHlBbmltYXRpb25Ub1ZhbHVlKHRhcmdldFRyYW5zZm9ybXMuZ2V0KCkp
OwotICAgICAgICAgICAgZWxzZSBpZiAoYW5pbWF0aW9uLT5oYXNUYWdOYW1lKFNWR05hbWVzOjph
bmltYXRlTW90aW9uVGFnKSkKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxTVkdBbmltYXRl
TW90aW9uRWxlbWVudCo+KGFuaW1hdGlvbiktPmFwcGx5QW5pbWF0aW9uVG9WYWx1ZSh0YXJnZXRU
cmFuc2Zvcm1zLmdldCgpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGFuaW1hdGlvbi0+aGFzVGFn
TmFtZShTVkdOYW1lczo6YW5pbWF0ZUNvbG9yVGFnKSkgewotICAgICAgICAgICAgICAgIFNWR0Fu
aW1hdGVDb2xvckVsZW1lbnQqIGFuaW1Db2xvciA9IHN0YXRpY19jYXN0PFNWR0FuaW1hdGVDb2xv
ckVsZW1lbnQqPihhbmltYXRpb24pOwotICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gYW5p
bUNvbG9yLT5hdHRyaWJ1dGVOYW1lKCk7Ci0gICAgICAgICAgICAgICAgQ29sb3IgY3VycmVudENv
bG9yID0gYXR0cmlidXRlVG9Db2xvck1hcC5jb250YWlucyhuYW1lKSA/IGF0dHJpYnV0ZVRvQ29s
b3JNYXAuZ2V0KG5hbWUpIDogYW5pbUNvbG9yLT5pbml0aWFsQ29sb3IoKTsKLSAgICAgICAgICAg
ICAgICBhbmltQ29sb3ItPmFwcGx5QW5pbWF0aW9uVG9WYWx1ZShjdXJyZW50Q29sb3IpOwotICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZVRvQ29sb3JNYXAuc2V0KG5hbWUsIGN1cnJlbnRDb2xvcik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEFwcGx5IGFu
eSB0cmFuc2Zvcm0gY2hhbmdlcyAoYW5pbWF0ZVRyYW5zZm9ybSAmIGFuaW1hdGVNb3Rpb24pCi0g
ICAgICAgIGlmICh0YXJnZXRUcmFuc2Zvcm1zKSB7Ci0gICAgICAgICAgICBTVkdFbGVtZW50KiBr
ZXkgPSB0YXJnZXRJdGVyYXRvci0+Zmlyc3Q7Ci0gICAgICAgICAgICBpZiAoa2V5ICYmIGtleS0+
aXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQqPihrZXkpOwotICAgICAgICAgICAgICAgIHRyYW5zZm9ybS0+c2V0VHJh
bnNmb3JtKHRhcmdldFRyYW5zZm9ybXMuZ2V0KCkpOwotICAgICAgICAgICAgICAgIHRyYW5zZm9y
bS0+dXBkYXRlTG9jYWxUcmFuc2Zvcm0odHJhbnNmb3JtLT50cmFuc2Zvcm0oKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEFwcGx5IGFueSBjb2xvciBj
aGFuZ2VzIChhbmltYXRlQ29sb3IpCi0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDb2xvcj46Oml0
ZXJhdG9yIGNvbG9ySXRlcmF0b3JFbmQgPSBhdHRyaWJ1dGVUb0NvbG9yTWFwLmVuZCgpOwotICAg
ICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDb2xvcj46Oml0ZXJhdG9yIGNvbG9ySXRlcmF0b3Ig
PSBhdHRyaWJ1dGVUb0NvbG9yTWFwLmJlZ2luKCk7IGNvbG9ySXRlcmF0b3IgIT0gY29sb3JJdGVy
YXRvckVuZDsgKytjb2xvckl0ZXJhdG9yKSB7Ci0gICAgICAgICAgICBpZiAoY29sb3JJdGVyYXRv
ci0+c2Vjb25kLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBTVkdBbmltYXRpb25FbGVtZW50
OjpzZXRUYXJnZXRBdHRyaWJ1dGUodGFyZ2V0SXRlcmF0b3ItPmZpcnN0LCBjb2xvckl0ZXJhdG9y
LT5maXJzdCwgY29sb3JJdGVyYXRvci0+c2Vjb25kLm5hbWUoKSk7CisgICAgICAgICAgICBhbmlt
YXRpb24tPmFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCgpOwogICAgICAgICB9CiAgICAgfQog
ICAgIApJbmRleDoga3N2ZzIvc3ZnL0NvbG9yRGlzdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtz
dmcyL3N2Zy9Db2xvckRpc3RhbmNlLmNwcAkocmV2aXNpb24gMCkKKysrIGtzdmcyL3N2Zy9Db2xv
ckRpc3RhbmNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyBDb3B5cmln
aHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAKKyBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QKKyAKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSAtIFN1aXRlIDMzMCwKKyBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJDb2xvckRp
c3RhbmNlLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitD
b2xvckRpc3RhbmNlOjpDb2xvckRpc3RhbmNlKCkKKyAgICA6IG1fcmVkRGlmZigwKQorICAgICwg
bV9ibHVlRGlmZigwKQorICAgICwgbV9ncmVlbkRpZmYoMCkKK3sKK30KKworQ29sb3JEaXN0YW5j
ZTo6Q29sb3JEaXN0YW5jZShjb25zdCBDb2xvciYgZnJvbUNvbG9yLCBjb25zdCBDb2xvciYgdG9D
b2xvcikKKyAgICA6IG1fcmVkRGlmZih0b0NvbG9yLnJlZCgpIC0gZnJvbUNvbG9yLnJlZCgpKQor
ICAgICwgbV9ibHVlRGlmZih0b0NvbG9yLmJsdWUoKSAtIGZyb21Db2xvci5ibHVlKCkpCisgICAg
LCBtX2dyZWVuRGlmZih0b0NvbG9yLmdyZWVuKCkgLSBmcm9tQ29sb3IuZ3JlZW4oKSkKK3sKK30K
KworQ29sb3JEaXN0YW5jZTo6Q29sb3JEaXN0YW5jZShpbnQgcmVkRGlmZiwgaW50IGJsdWVEaWZm
LCBpbnQgZ3JlZW5EaWZmKQorICAgIDogbV9yZWREaWZmKHJlZERpZmYpCisgICAgLCBtX2JsdWVE
aWZmKGJsdWVEaWZmKQorICAgICwgbV9ncmVlbkRpZmYoZ3JlZW5EaWZmKQoreworfQorCitzdGF0
aWMgaW5saW5lIGludCBjbGFtcENvbG9yVmFsdWUoaW50IHYpCit7CisgICAgaWYgKHYgPiAyNTUp
CisgICAgICAgIHYgPSAyNTU7CisgICAgZWxzZSBpZiAodiA8IDApCisgICAgICAgIHYgPSAwOwor
ICAgIHJldHVybiB2OworfQorCitDb2xvckRpc3RhbmNlIENvbG9yRGlzdGFuY2U6OnNjYWxlZERp
c3RhbmNlKGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAoreworICAgIHJldHVybiBDb2xvckRpc3Rh
bmNlKHNjYWxlRmFjdG9yICogbV9yZWREaWZmLCBzY2FsZUZhY3RvciAqIG1fYmx1ZURpZmYsIHNj
YWxlRmFjdG9yICogbV9ncmVlbkRpZmYpOworfQorCitDb2xvciBDb2xvckRpc3RhbmNlOjphZGRD
b2xvcnNBbmRDbGFtcChjb25zdCBDb2xvciYgZmlyc3QsIGNvbnN0IENvbG9yJiBzZWNvbmQpCit7
CisgICAgcmV0dXJuIENvbG9yKGNsYW1wQ29sb3JWYWx1ZShmaXJzdC5yZWQoKSArIHNlY29uZC5y
ZWQoKSksCisgICAgICAgICAgICAgICAgIGNsYW1wQ29sb3JWYWx1ZShmaXJzdC5ncmVlbigpICsg
c2Vjb25kLmdyZWVuKCkpLAorICAgICAgICAgICAgICAgICBjbGFtcENvbG9yVmFsdWUoc2Vjb25k
LmJsdWUoKSArIHNlY29uZC5ibHVlKCkpKTsKK30KKworQ29sb3IgQ29sb3JEaXN0YW5jZTo6YWRk
VG9Db2xvckFuZENsYW1wKGNvbnN0IENvbG9yJiBjb2xvcikgY29uc3QKK3sKKyAgICByZXR1cm4g
Q29sb3IoY2xhbXBDb2xvclZhbHVlKGNvbG9yLnJlZCgpICsgbV9yZWREaWZmKSwKKyAgICAgICAg
ICAgICAgICAgY2xhbXBDb2xvclZhbHVlKGNvbG9yLmdyZWVuKCkgKyBtX2JsdWVEaWZmKSwKKyAg
ICAgICAgICAgICAgICAgY2xhbXBDb2xvclZhbHVlKGNvbG9yLmJsdWUoKSArIG1fZ3JlZW5EaWZm
KSk7Cit9CisKK2Jvb2wgQ29sb3JEaXN0YW5jZTo6aXNaZXJvKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gKG1fcmVkRGlmZiA9PSAwICYmIG1fYmx1ZURpZmYgPT0gMCAmJiBtX2dyZWVuRGlmZiA9PSAw
KTsKK30KKworZmxvYXQgQ29sb3JEaXN0YW5jZTo6ZGlzdGFuY2UoKSBjb25zdAoreworICAgIC8v
IFRoaXMgaXMganVzdCBhIHNpbXBsZSBkaXN0YW5jZSBjYWxjdWxhdGlvbiwgbm90IHJlc3BlY3Rp
bmcgY29sb3Igc3BhY2VzCisgICAgcmV0dXJuIHNxcnRmKG1fcmVkRGlmZiAqIG1fcmVkRGlmZiAr
IG1fYmx1ZURpZmYgKiBtX2JsdWVEaWZmICsgbV9ncmVlbkRpZmYgKiBtX2dyZWVuRGlmZik7Cit9
CisKK30KKworI2VuZGlmCkluZGV4OiBrc3ZnMi9zdmcvQ29sb3JEaXN0YW5jZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtzdmcyL3N2Zy9Db2xvckRpc3RhbmNlLmgJKHJldmlzaW9uIDApCisrKyBrc3ZnMi9z
dmcvQ29sb3JEaXN0YW5jZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACisvKgorIENv
cHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorIAorIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdAorIAorIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCisgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVt
cGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICov
CisKKyNpZm5kZWYgQ29sb3JEaXN0YW5jZV9oCisjZGVmaW5lIENvbG9yRGlzdGFuY2VfaAorI2lm
ZGVmIFNWR19TVVBQT1JUCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKKyAgICBjbGFzcyBD
b2xvcjsKKworICAgIGNsYXNzIENvbG9yRGlzdGFuY2UgeworICAgIHB1YmxpYzoKKyAgICAgICAg
Q29sb3JEaXN0YW5jZSgpOworICAgICAgICBDb2xvckRpc3RhbmNlKGNvbnN0IENvbG9yJiBmcm9t
Q29sb3IsIGNvbnN0IENvbG9yJiB0b0NvbG9yKTsKKyAgICAgICAgQ29sb3JEaXN0YW5jZShpbnQg
cmVkRGlmZiwgaW50IGJsdWVEaWZmLCBpbnQgZ3JlZW5EaWZmKTsKKyAgICAgICAgCisgICAgICAg
IENvbG9yRGlzdGFuY2Ugc2NhbGVkRGlzdGFuY2UoZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Owor
ICAgICAgICBDb2xvciBhZGRUb0NvbG9yQW5kQ2xhbXAoY29uc3QgQ29sb3ImKSBjb25zdDsKKyAg
ICAgICAgCisgICAgICAgIHN0YXRpYyBDb2xvciBhZGRDb2xvcnNBbmRDbGFtcChjb25zdCBDb2xv
ciYsIGNvbnN0IENvbG9yJik7CisgICAgICAgIAorICAgICAgICBib29sIGlzWmVybygpIGNvbnN0
OworICAgICAgICAKKyAgICAgICAgZmxvYXQgZGlzdGFuY2UoKSBjb25zdDsKKyAgICAgICAgCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgaW50IG1fcmVkRGlmZjsKKyAgICAgICAgaW50IG1fYmx1ZURp
ZmY7CisgICAgICAgIGludCBtX2dyZWVuRGlmZjsKKyAgICB9OworfQorCisjZW5kaWYgLy8gU1ZH
X1NVUFBPUlQKKyNlbmRpZiAvLyBDb2xvckRpc3RhbmNlX2gKSW5kZXg6IGtzdmcyL3N2Zy9TVkdB
bmltYXRlQ29sb3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQW5pbWF0
ZUNvbG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5MDkyKQorKysga3N2ZzIvc3ZnL1NWR0FuaW1h
dGVDb2xvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMiArMzcsNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OlNWR0FuaW1hdGVDb2xv
ckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAg
ICA6IFNWR0FuaW1hdGlvbkVsZW1lbnQodGFnTmFtZSwgZG9jKQotICAgICwgbV90b0NvbG9yKG5l
dyBTVkdDb2xvcigpKQotICAgICwgbV9mcm9tQ29sb3IobmV3IFNWR0NvbG9yKCkpCi0gICAgLCBt
X2N1cnJlbnRJdGVtKC0xKQotICAgICwgbV9yZWREaWZmKDApCi0gICAgLCBtX2dyZWVuRGlmZigw
KQotICAgICwgbV9ibHVlRGlmZigwKQogewogfQogCkBAIC01MCwxNzcgKzQ0LDYwIEBAIFNWR0Fu
aW1hdGVDb2xvckVsZW1lbnQ6On5TVkdBbmltYXRlQ29sb3IKIHsKIH0KIAotdm9pZCBjYWxjdWxh
dGVDb2xvckRpZmZlcmVuY2UoY29uc3QgQ29sb3ImIGZpcnN0LCBjb25zdCBDb2xvciYgc2Vjb25k
LCBpbnQmIHJlZERpZmYsIGludCYgZ3JlZW5EaWZmLCBpbnQmIGJsdWVEaWZmKQorYm9vbCBTVkdB
bmltYXRlQ29sb3JFbGVtZW50Ojp1cGRhdGVBbmltYXRpb25CYXNlVmFsdWVGcm9tRWxlbWVudCgp
CiB7Ci0gICAgcmVkRGlmZiA9IGZpcnN0LnJlZCgpIC0gc2Vjb25kLnJlZCgpOwotICAgIGdyZWVu
RGlmZiA9IGZpcnN0LmdyZWVuKCkgLSBzZWNvbmQuZ3JlZW4oKTsKLSAgICBibHVlRGlmZiA9IGZp
cnN0LmJsdWUoKSAtIHNlY29uZC5ibHVlKCk7Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0ZUNvbG9yRWxl
bWVudDo6c3RvcmVJbml0aWFsVmFsdWUoKQotewotICAgIG1faW5pdGlhbENvbG9yID0gU1ZHQ29s
b3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKHRhcmdldEF0dHJpYnV0ZSgpKTsKLX0KLQotdm9p
ZCBTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpyZXNldFZhbHVlcygpCi17Ci0gICAgbV9jdXJyZW50
SXRlbSA9IC0xOwotICAgIG1fcmVkRGlmZiA9IDA7Ci0gICAgbV9ncmVlbkRpZmYgPSAwOwotICAg
IG1fYmx1ZURpZmYgPSAwOwotfQotCi1ib29sIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OnVwZGF0
ZUN1cnJlbnRWYWx1ZShkb3VibGUgdGltZVBlcmNlbnRhZ2UpCi17Ci0gICAgaW50IHIgPSAwLCBn
ID0gMCwgYiA9IDA7Ci0gICAgaWYgKChtX3JlZERpZmYgIT0gMCB8fCBtX2dyZWVuRGlmZiAhPSAw
IHx8IG1fYmx1ZURpZmYgIT0gMCkgJiYgIW1fdmFsdWVzKQotICAgICAgICBjYWxjdWxhdGVDb2xv
cih0aW1lUGVyY2VudGFnZSwgciwgZywgYik7Ci0gICAgZWxzZSBpZiAobV92YWx1ZXMpIHsKLSAg
ICAgICAgaW50IGl0ZW1CeVBlcmNlbnRhZ2UgPSBjYWxjdWxhdGVDdXJyZW50VmFsdWVJdGVtKHRp
bWVQZXJjZW50YWdlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChpdGVtQnlQZXJjZW50YWdlID09
IC0xKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgaWYgKG1f
Y3VycmVudEl0ZW0gIT0gaXRlbUJ5UGVyY2VudGFnZSkgeyAvLyBJdGVtIGNoYW5nZWQuLi4KLSAg
ICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAvLyBFeHRyYWN0IGN1cnJlbnQgJ2Zyb20nIC8gJ3RvJyB2YWx1ZXMKLSAgICAgICAgICAgIFN0
cmluZyB2YWx1ZTEgPSBtX3ZhbHVlcy0+Z2V0SXRlbShpdGVtQnlQZXJjZW50YWdlLCBlYyk7Ci0g
ICAgICAgICAgICBTdHJpbmcgdmFsdWUyID0gbV92YWx1ZXMtPmdldEl0ZW0oaXRlbUJ5UGVyY2Vu
dGFnZSArIDEsIGVjKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHIv
Zy9iIHNoaWZ0aW5nIHZhbHVlcy4uLgotICAgICAgICAgICAgaWYgKCF2YWx1ZTEuaXNFbXB0eSgp
ICYmICF2YWx1ZTIuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBhcHBseSA9IGZh
bHNlOwotICAgICAgICAgICAgICAgIGlmIChtX3JlZERpZmYgIT0gMCB8fCBtX2dyZWVuRGlmZiAh
PSAwIHx8IG1fYmx1ZURpZmYgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICByID0gbV90b0Nv
bG9yLT5jb2xvcigpLnJlZCgpOwotICAgICAgICAgICAgICAgICAgICBnID0gbV90b0NvbG9yLT5j
b2xvcigpLmdyZWVuKCk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBtX3RvQ29sb3ItPmNvbG9y
KCkuYmx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgYXBw
bHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBtX3RvQ29sb3ItPnNldFJHQkNvbG9yKHZhbHVlMik7Ci0gICAgICAgICAgICAgICAg
bV9mcm9tQ29sb3ItPnNldFJHQkNvbG9yKHZhbHVlMSk7Ci0gICAgICAgICAgICAgICAgY2FsY3Vs
YXRlQ29sb3JEaWZmZXJlbmNlKG1fdG9Db2xvci0+Y29sb3IoKSwgbV9mcm9tQ29sb3ItPmNvbG9y
KCksIG1fcmVkRGlmZiwgbV9ncmVlbkRpZmYsIG1fYmx1ZURpZmYpOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIG1fY3VycmVudEl0ZW0gPSBpdGVtQnlQZXJjZW50YWdlOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghYXBwbHkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICht
X3JlZERpZmYgIT0gMCB8fCBtX2dyZWVuRGlmZiAhPSAwIHx8IG1fYmx1ZURpZmYgIT0gMCkgewot
ICAgICAgICAgICAgZG91YmxlIHJlbGF0aXZlVGltZSA9IGNhbGN1bGF0ZVJlbGF0aXZlVGltZVBl
cmNlbnRhZ2UodGltZVBlcmNlbnRhZ2UsIG1fY3VycmVudEl0ZW0pOwotICAgICAgICAgICAgY2Fs
Y3VsYXRlQ29sb3IocmVsYXRpdmVUaW1lLCByLCBnLCBiKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICAKLSAgICBpZiAoIWlzRnJvemVuKCkgJiYgdGltZVBlcmNlbnRhZ2UgPT0gMS4wKSB7Ci0gICAg
ICAgIHIgPSBtX2luaXRpYWxDb2xvci5yZWQoKTsKLSAgICAgICAgZyA9IG1faW5pdGlhbENvbG9y
LmdyZWVuKCk7Ci0gICAgICAgIGIgPSBtX2luaXRpYWxDb2xvci5ibHVlKCk7Ci0gICAgfQotICAg
IAotICAgIGlmIChpc0FjY3VtdWxhdGVkKCkgJiYgcmVwZWF0aW9ucygpICE9IDAuMCkgewotICAg
ICAgICByICs9IG1fbGFzdENvbG9yLnJlZCgpOwotICAgICAgICBnICs9IG1fbGFzdENvbG9yLmdy
ZWVuKCk7Ci0gICAgICAgIGIgKz0gbV9sYXN0Q29sb3IuYmx1ZSgpOwotICAgIH0KLSAgICAKLSAg
ICBtX2N1cnJlbnRDb2xvciA9IGNsYW1wQ29sb3IociwgZywgYik7CisgICAgbV9iYXNlQ29sb3Ig
PSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcodGFyZ2V0QXR0cmlidXRlQW5pbWF0
ZWRWYWx1ZSgpKTsKKyAgICBtX2NvbG9yRGlzdGFuY2UgPSBDb2xvckRpc3RhbmNlKCk7CisgICAg
bV9mcm9tQ29sb3IgPSBDb2xvcigpOworICAgIG1fdG9Db2xvciA9IENvbG9yKCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6aGFuZGxlU3RhcnRD
b25kaXRpb24oKQotewotICAgIHN0b3JlSW5pdGlhbFZhbHVlKCk7Ci0gICAgCi0gICAgc3dpdGNo
IChkZXRlY3RBbmltYXRpb25Nb2RlKCkpIHsKLSAgICAgICAgY2FzZSBUT19BTklNQVRJT046Ci0g
ICAgICAgIGNhc2UgRlJPTV9UT19BTklNQVRJT046Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1f
dG9Db2xvci0+c2V0UkdCQ29sb3IobV90byk7Ci0gICAgICAgICAgICBpZiAoIW1fZnJvbS5pc0Vt
cHR5KCkpIC8vIGZyb20tdG8gYW5pbWF0aW9uCi0gICAgICAgICAgICAgICAgbV9mcm9tQ29sb3It
PnNldFJHQkNvbG9yKG1fZnJvbSk7Ci0gICAgICAgICAgICBlbHNlIC8vIHRvIGFuaW1hdGlvbgot
ICAgICAgICAgICAgICAgIG1fZnJvbUNvbG9yLT5zZXRSR0JDb2xvcihtX2luaXRpYWxDb2xvci5u
YW1lKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxjdWxhdGVDb2xvckRpZmZlcmVu
Y2UobV90b0NvbG9yLT5jb2xvcigpLCBtX2Zyb21Db2xvci0+Y29sb3IoKSwgbV9yZWREaWZmLCBt
X2dyZWVuRGlmZiwgbV9ibHVlRGlmZik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIEJZX0FOSU1BVElPTjoKLSAgICAgICAgY2FzZSBGUk9NX0JZX0FOSU1BVElP
TjoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX2Zyb20uaXNFbXB0eSgpKSAvLyBmcm9t
LWJ5IGFuaW1hdGlvbgotICAgICAgICAgICAgICAgIG1fZnJvbUNvbG9yLT5zZXRSR0JDb2xvciht
X2Zyb20pOwotICAgICAgICAgICAgZWxzZSAvLyBieSBhbmltYXRpb24KLSAgICAgICAgICAgICAg
ICBtX2Zyb21Db2xvci0+c2V0UkdCQ29sb3IobV9pbml0aWFsQ29sb3IubmFtZSgpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbV90b0NvbG9yLT5zZXRSR0JDb2xvcihhZGRDb2xvcnNBbmRD
bGFtcChtX2Zyb21Db2xvci0+Y29sb3IoKSwgU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3Ry
aW5nKG1fYnkpKS5uYW1lKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxjdWxhdGVD
b2xvckRpZmZlcmVuY2UobV90b0NvbG9yLT5jb2xvcigpLCBtX2Zyb21Db2xvci0+Y29sb3IoKSwg
bV9yZWREaWZmLCBtX2dyZWVuRGlmZiwgbV9ibHVlRGlmZik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIFZBTFVFU19BTklNQVRJT046Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgewotICAgICAgICAgICAgLy9rZEVycm9y
KCkgPDwga19mdW5jaW5mbyA8PCAiIFVuYWJsZSB0byBkZXRlY3QgYW5pbWF0aW9uIG1vZGUhIEFi
b3J0aW5nIGNyZWF0aW9uISIgPDwgZW5kbDsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTVkdBbmlt
YXRlQ29sb3JFbGVtZW50Ojp1cGRhdGVMYXN0VmFsdWVXaXRoQ3VycmVudCgpCi17Ci0gICAgbV9s
YXN0Q29sb3IgPSBtX2N1cnJlbnRDb2xvcjsKLX0KLQotdm9pZCBTVkdBbmltYXRlQ29sb3JFbGVt
ZW50OjphcHBseUFuaW1hdGlvblRvVmFsdWUoQ29sb3ImIGN1cnJlbnRDb2xvcikKK3ZvaWQgU1ZH
QW5pbWF0ZUNvbG9yRWxlbWVudDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KCkKIHsKICAg
ICBpZiAoaXNBZGRpdGl2ZSgpKQotICAgICAgICBjdXJyZW50Q29sb3IgPSBhZGRDb2xvcnNBbmRD
bGFtcChjdXJyZW50Q29sb3IsIGNvbG9yKCkpOworICAgICAgICBzZXRUYXJnZXRBdHRyaWJ1dGVB
bmltYXRlZFZhbHVlKENvbG9yRGlzdGFuY2U6OmFkZENvbG9yc0FuZENsYW1wKG1fYmFzZUNvbG9y
LCBtX2FuaW1hdGVkQ29sb3IpLm5hbWUoKSk7CiAgICAgZWxzZQotICAgICAgICBjdXJyZW50Q29s
b3IgPSBjb2xvcigpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBjbGFtcENvbG9yVmFsdWUoaW50
IHYpCi17Ci0gICAgaWYgKHYgPiAyNTUpCi0gICAgICAgIHYgPSAyNTU7Ci0gICAgZWxzZSBpZiAo
diA8IDApCi0gICAgICAgIHYgPSAwOwotICAgIHJldHVybiB2OwotfQotCi1Db2xvciBTVkdBbmlt
YXRlQ29sb3JFbGVtZW50OjpjbGFtcENvbG9yKGludCByLCBpbnQgZywgaW50IGIpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIENvbG9yKGNsYW1wQ29sb3JWYWx1ZShyKSwgY2xhbXBDb2xvclZhbHVlKGcp
LCBjbGFtcENvbG9yVmFsdWUoYikpOworICAgICAgICBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRl
ZFZhbHVlKG1fYW5pbWF0ZWRDb2xvci5uYW1lKCkpOwogfQogCi1Db2xvciBTVkdBbmltYXRlQ29s
b3JFbGVtZW50OjphZGRDb2xvcnNBbmRDbGFtcChjb25zdCBDb2xvciYgZmlyc3QsIGNvbnN0IENv
bG9yJiBzZWNvbmQpCitib29sIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVk
VmFsdWUoRUFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2Us
IHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KQogewotICAgIHJldHVy
biBDb2xvcihjbGFtcENvbG9yVmFsdWUoZmlyc3QucmVkKCkgKyBzZWNvbmQucmVkKCkpLAotICAg
ICAgICAgICAgICAgICBjbGFtcENvbG9yVmFsdWUoZmlyc3QuZ3JlZW4oKSArIHNlY29uZC5ncmVl
bigpKSwKLSAgICAgICAgICAgICAgICAgY2xhbXBDb2xvclZhbHVlKGZpcnN0LmJsdWUoKSArIHNl
Y29uZC5ibHVlKCkpKTsKLX0KLQotdm9pZCBTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpjYWxjdWxh
dGVDb2xvcihkb3VibGUgdGltZSwgaW50ICZyLCBpbnQgJmcsIGludCAmYikgY29uc3QKLXsKLSAg
ICByID0gbHJvdW5kKG1fcmVkRGlmZiAqIHRpbWUpICsgbV9mcm9tQ29sb3ItPmNvbG9yKCkucmVk
KCk7Ci0gICAgZyA9IGxyb3VuZChtX2dyZWVuRGlmZiAqIHRpbWUpICsgbV9mcm9tQ29sb3ItPmNv
bG9yKCkuZ3JlZW4oKTsKLSAgICBiID0gbHJvdW5kKG1fYmx1ZURpZmYgKiB0aW1lKSArIG1fZnJv
bUNvbG9yLT5jb2xvcigpLmJsdWUoKTsKLX0KLQotQ29sb3IgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVu
dDo6Y29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBtX2N1cnJlbnRDb2xvcjsKKyAgICBpZiAo
YW5pbWF0aW9uTW9kZSA9PSBUT19BTklNQVRJT04pCisgICAgICAgIC8vIHRvLWFuaW1hdGlvbnMg
aGF2ZSBhIHNwZWNpYWwgZXF1YXRpb246IHZhbHVlID0gKHRvIC0gYmFzZSkgKiAodGltZS9kdXJh
dGlvbikgKyBiYXNlCisgICAgICAgIG1fYW5pbWF0ZWRDb2xvciA9IENvbG9yRGlzdGFuY2UobV9i
YXNlQ29sb3IsIG1fdG9Db2xvcikuc2NhbGVkRGlzdGFuY2UodGltZVBlcmNlbnRhZ2UpLmFkZFRv
Q29sb3JBbmRDbGFtcChtX2Jhc2VDb2xvcik7CisgICAgZWxzZQorICAgICAgICBtX2FuaW1hdGVk
Q29sb3IgPSBtX2NvbG9yRGlzdGFuY2Uuc2NhbGVkRGlzdGFuY2UocGVyY2VudGFnZVBhc3QpLmFk
ZFRvQ29sb3JBbmRDbGFtcChtX2Zyb21Db2xvcik7CisgICAgcmV0dXJuIChtX2FuaW1hdGVkQ29s
b3IgIT0gbV9iYXNlQ29sb3IpOwogfQogCi1Db2xvciBTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojpp
bml0aWFsQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBtX2luaXRpYWxDb2xvcjsKK2Jvb2wg
U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVBbmltYXRp
b25Nb2RlIGFuaW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpCit7ICAgIAorICAgIHN3
aXRjaCAoYW5pbWF0aW9uTW9kZSkgeworICAgIGNhc2UgRlJPTV9UT19BTklNQVRJT046CisgICAg
ICAgIG1fZnJvbUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fZnJv
bSk7CisgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgIGNhc2UgVE9fQU5JTUFUSU9OOgorICAg
ICAgICBtX3RvQ29sb3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcobV90byk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRlJPTV9CWV9BTklNQVRJT046CisgICAgICAgIG1f
ZnJvbUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fZnJvbSk7Cisg
ICAgICAgIG1fdG9Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmluZyhtX2J5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCWV9BTklNQVRJT046CisgICAgICAgIG1fZnJv
bUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fZnJvbSk7CisgICAg
ICAgIG1fdG9Db2xvciA9IENvbG9yRGlzdGFuY2U6OmFkZENvbG9yc0FuZENsYW1wKG1fZnJvbUNv
bG9yLCBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcobV9ieSkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFZBTFVFU19BTklNQVRJT046CisgICAgICAgIG1fZnJvbUNvbG9yID0g
U1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fdmFsdWVzW3ZhbHVlSW5kZXhdKTsK
KyAgICAgICAgbV90b0NvbG9yID0gKCh2YWx1ZUluZGV4ICsgMSkgPCBtX3ZhbHVlcy5zaXplKCkp
ID8gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fdmFsdWVzW3ZhbHVlSW5kZXgg
KyAxXSkgOiBtX2Zyb21Db2xvcjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOT19BTklNQVRJ
T046CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBtX2Nv
bG9yRGlzdGFuY2UgPSBDb2xvckRpc3RhbmNlKG1fZnJvbUNvbG9yLCBtX3RvQ29sb3IpOworICAg
IHJldHVybiAhbV9jb2xvckRpc3RhbmNlLmlzWmVybygpOwogfQogCiB9CkluZGV4OiBrc3ZnMi9z
dmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdB
bmltYXRlQ29sb3JFbGVtZW50LmgJKHJldmlzaW9uIDE5MDkyKQorKysga3N2ZzIvc3ZnL1NWR0Fu
aW1hdGVDb2xvckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lm
ZGVmIFNWR19TVVBQT1JUCiAKICNpbmNsdWRlICJTVkdBbmltYXRpb25FbGVtZW50LmgiCisjaW5j
bHVkZSAiQ29sb3JEaXN0YW5jZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMzYsMzggKzM3LDI0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Kik7CiAgICAgICAgIHZpcnR1YWwgflNWR0FuaW1hdGVDb2xvckVsZW1l
bnQoKTsKLQotICAgICAgICB2b2lkIGFwcGx5QW5pbWF0aW9uVG9WYWx1ZShDb2xvciYgY3VycmVu
dENvbG9yKTsKLQotICAgICAgICAvLyBIZWxwZXIKLSAgICAgICAgQ29sb3IgYWRkQ29sb3JzQW5k
Q2xhbXAoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwotICAgICAgICBDb2xvciBjbGFtcENv
bG9yKGludCByLCBpbnQgZywgaW50IGIpIGNvbnN0OyAvLyBkZXByZWNhdGVkCi0gICAgICAgIHZv
aWQgY2FsY3VsYXRlQ29sb3IoZG91YmxlIHRpbWUsIGludCAmciwgaW50ICZnLCBpbnQgJmIpIGNv
bnN0OwotCi0gICAgICAgIENvbG9yIGNvbG9yKCkgY29uc3Q7Ci0gICAgICAgIENvbG9yIGluaXRp
YWxDb2xvcigpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUFu
aW1hdGlvbkJhc2VWYWx1ZUZyb21FbGVtZW50KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhcHBs
eUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQoKTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmly
dHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRo
aXM7IH0KLSAgICAgICAgdm9pZCBzdG9yZUluaXRpYWxWYWx1ZSgpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgcmVzZXRWYWx1ZXMoKTsKICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRh
dGVDdXJyZW50VmFsdWUoZG91YmxlIHRpbWVQZXJjZW50YWdlKTsKLSAgICAgICAgdmlydHVhbCBi
b29sIGhhbmRsZVN0YXJ0Q29uZGl0aW9uKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVM
YXN0VmFsdWVXaXRoQ3VycmVudCgpOworICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQW5pbWF0
ZWRWYWx1ZShFQW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVkIHZh
bHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KTsKKyAgICAgICAgdmlydHVhbCBib29sIGNh
bGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJbmRl
eCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBDb2xvciBtX2xhc3RDb2xvcjsKLSAgICAgICAg
Q29sb3IgbV9jdXJyZW50Q29sb3I7Ci0gICAgICAgIENvbG9yIG1faW5pdGlhbENvbG9yOwotCi0g
ICAgICAgIFJlZlB0cjxTVkdDb2xvcj4gbV90b0NvbG9yOwotICAgICAgICBSZWZQdHI8U1ZHQ29s
b3I+IG1fZnJvbUNvbG9yOwotCi0gICAgICAgIGludCBtX2N1cnJlbnRJdGVtOwotICAgICAgICBp
bnQgbV9yZWREaWZmOwotICAgICAgICBpbnQgbV9ncmVlbkRpZmY7Ci0gICAgICAgIGludCBtX2Js
dWVEaWZmOworICAgICAgICBDb2xvciBtX2Jhc2VDb2xvcjsKKyAgICAgICAgQ29sb3IgbV9hbmlt
YXRlZENvbG9yOworCisgICAgICAgIENvbG9yIG1fdG9Db2xvcjsKKyAgICAgICAgQ29sb3IgbV9m
cm9tQ29sb3I7CisKKyAgICAgICAgQ29sb3JEaXN0YW5jZSBtX2NvbG9yRGlzdGFuY2U7CiAgICAg
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgJKHJl
dmlzaW9uIDE5MDkyKQorKysga3N2ZzIvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDkgKzM2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByb3RlY3Rl
ZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIHRoaXM7IH0KICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRh
dGVDdXJyZW50VmFsdWUoZG91YmxlIHRpbWVQZXJjZW50YWdlKSB7IHJldHVybiBmYWxzZTsgfQot
ICAgICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlU3RhcnRDb25kaXRpb24oKSB7IHJldHVybiBmYWxz
ZTsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRW5kQ29uZGl0aW9uKCkgeyB9CisgICAg
ICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlLCBmbG9h
dCB0aW1lUGVyY2VudGFnZSwgdW5zaWduZWQgdmFsdWVJbmRleCwgZmxvYXQgcGVyY2VudGFnZVBh
c3QpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9t
QW5kVG9WYWx1ZXMoRUFuaW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpIHsgcmV0dXJu
IGZhbHNlOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBpbnQgbV9jdXJyZW50SXRlbTsKSW5k
ZXg6IGtzdmcyL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3N2ZzIvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMTkwOTIpCisr
KyBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CisgICAgCit1c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7CiAKIFNWR0FuaW1h
dGVNb3Rpb25FbGVtZW50OjpTVkdBbmltYXRlTW90aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU1ZHQW5pbWF0aW9uRWxlbWVudCh0
YWdOYW1lLCBkb2MpCkBAIC00Miw3ICs0NCwzMCBAQCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6
flNWR0FuaW1hdGVNb3RpCiAKIGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlk
VGFyZ2V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gKFNWR0FuaW1hdGlvbkVsZW1lbnQ6Omhhc1Zh
bGlkVGFyZ2V0KCkgJiYgdGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSk7
CisgICAgaWYgKCFTVkdBbmltYXRpb25FbGVtZW50OjpoYXNWYWxpZFRhcmdldCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF0YXJnZXRFbGVtZW50KCktPmlzU3R5bGVkVHJhbnNm
b3JtYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gU3BlYzogU1ZHIDEuMSBz
ZWN0aW9uIDE5LjIuMTUKKyAgICBpZiAodGFyZ2V0RWxlbWVudCgpLT5oYXNUYWdOYW1lKGdUYWcp
CisgICAgICAgIHx8IHRhcmdldEVsZW1lbnQoKS0+aGFzVGFnTmFtZShkZWZzVGFnKQorICAgICAg
ICB8fCB0YXJnZXRFbGVtZW50KCktPmhhc1RhZ05hbWUodXNlVGFnKQorICAgICAgICB8fCB0YXJn
ZXRFbGVtZW50KCktPmhhc1RhZ05hbWUoaW1hZ2VUYWcpCisgICAgICAgIHx8IHRhcmdldEVsZW1l
bnQoKS0+aGFzVGFnTmFtZShzd2l0Y2hUYWcpCisgICAgICAgIHx8IHRhcmdldEVsZW1lbnQoKS0+
aGFzVGFnTmFtZShwYXRoVGFnKQorICAgICAgICB8fCB0YXJnZXRFbGVtZW50KCktPmhhc1RhZ05h
bWUocmVjdFRhZykKKyAgICAgICAgfHwgdGFyZ2V0RWxlbWVudCgpLT5oYXNUYWdOYW1lKGNpcmNs
ZVRhZykKKyAgICAgICAgfHwgdGFyZ2V0RWxlbWVudCgpLT5oYXNUYWdOYW1lKGVsbGlwc2VUYWcp
CisgICAgICAgIHx8IHRhcmdldEVsZW1lbnQoKS0+aGFzVGFnTmFtZShsaW5lVGFnKQorICAgICAg
ICB8fCB0YXJnZXRFbGVtZW50KCktPmhhc1RhZ05hbWUocG9seWxpbmVUYWcpCisgICAgICAgIHx8
IHRhcmdldEVsZW1lbnQoKS0+aGFzVGFnTmFtZShwb2x5Z29uVGFnKQorICAgICAgICB8fCB0YXJn
ZXRFbGVtZW50KCktPmhhc1RhZ05hbWUodGV4dFRhZykKKyAgICAgICAgfHwgdGFyZ2V0RWxlbWVu
dCgpLT5oYXNUYWdOYW1lKGNsaXBQYXRoVGFnKQorICAgICAgICB8fCB0YXJnZXRFbGVtZW50KCkt
Pmhhc1RhZ05hbWUobWFza1RhZykKKyAgICAgICAgfHwgdGFyZ2V0RWxlbWVudCgpLT5oYXNUYWdO
YW1lKGFUYWcpCisgICAgICAgIHx8IHRhcmdldEVsZW1lbnQoKS0+aGFzVGFnTmFtZShmb3JlaWdu
T2JqZWN0VGFnKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOwogfQog
CiB2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUqIGF0dHIpCkBAIC04OCwyMSArMTEzLDI2IEBAIFBhdGggU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQ6OmFuaW1hdGlvblAKICAgICByZXR1cm4gUGF0aCgpOwogfQogCi1ib29sIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50Ojp1cGRhdGVDdXJyZW50VmFsdWUoZG91YmxlIHRpbWVQZXJj
ZW50YWdlKQorYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6dXBkYXRlQW5pbWF0ZWRWYWx1
ZShFQW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVkIHZhbHVlSW5k
ZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpoYW5kbGVTdGFydENvbmRpdGlvbigpCitib29sIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoRUFuaW1hdGlv
bk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmFwcGx5QW5pbWF0aW9uVG9WYWx1ZShTVkdUcmFu
c2Zvcm1MaXN0KiB0YXJnZXRUcmFuc2Zvcm1zKQorYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVu
dDo6dXBkYXRlQW5pbWF0aW9uQmFzZVZhbHVlRnJvbUVsZW1lbnQoKQogewotICAgIEV4Y2VwdGlv
bkNvZGUgZWM7Ci0gICAgaWYgKCFpc0FkZGl0aXZlKCkpCi0gICAgICAgIHRhcmdldFRyYW5zZm9y
bXMtPmNsZWFyKGVjKTsKKyAgICAvLyBub3QgaW1wbGVtZW50ZWQsIHJlbW92ZSBzdXBlciBjYWxs
IHVwb24gaW1wbGVtZW50YXRpb24KKyAgICByZXR1cm4gU1ZHQW5pbWF0aW9uRWxlbWVudDo6dXBk
YXRlQW5pbWF0aW9uQmFzZVZhbHVlRnJvbUVsZW1lbnQoKTsKK30KKwordm9pZCBTVkdBbmltYXRl
TW90aW9uRWxlbWVudDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KCkKK3sKKyAgICAvLyBu
b3QgaW1wbGVtZW50ZWQsIHJlbW92ZSBzdXBlciBjYWxsIHVwb24gaW1wbGVtZW50YXRpb24KKyAg
ICBTVkdBbmltYXRpb25FbGVtZW50OjphcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQoKTsKIH0K
IAogfQpJbmRleDoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga3N2ZzIvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHJldmlzaW9uIDE5MDky
KQorKysga3N2ZzIvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDE3ICszNiwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIAogICAgICAg
ICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRUYXJnZXQoKSBjb25zdDsKICAgICAgICAgCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLSAg
ICAgICAgCi0gICAgICAgIHZvaWQgYXBwbHlBbmltYXRpb25Ub1ZhbHVlKFNWR1RyYW5zZm9ybUxp
c3QqKTsKKyAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUFuaW1hdGlvbkJhc2VWYWx1ZUZyb21F
bGVtZW50KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1l
bnQoKTsKICAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUqKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgUGF0aCBhbmlt
YXRpb25QYXRoKCk7CiAgICAgICAgIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBj
b25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0K
ICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVDdXJyZW50VmFsdWUoZG91Ymxl
IHRpbWVQZXJjZW50YWdlKTsKLSAgICAgICAgdmlydHVhbCBib29sIGhhbmRsZVN0YXJ0Q29uZGl0
aW9uKCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRp
b25Nb2RlLCBmbG9hdCB0aW1lUGVyY2VudGFnZSwgdW5zaWduZWQgdmFsdWVJbmRleCwgZmxvYXQg
cGVyY2VudGFnZVBhc3QpOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRv
VmFsdWVzKEVBbmltYXRpb25Nb2RlLCB1bnNpZ25lZCB2YWx1ZUluZGV4KTsKICAgICAgICAgCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgUGF0aCBtX3BhdGg7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHQW5p
bWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdBbmlt
YXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5MDkyKQorKysga3N2ZzIvc3ZnL1NW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQx
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6
U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQqIGRvYykKICAgICA6IFNWR0FuaW1hdGlvbkVsZW1lbnQodGFnTmFtZSwgZG9jKQot
ICAgICwgbV9jdXJyZW50SXRlbSgtMSkKICAgICAsIG1fdHlwZShTVkdUcmFuc2Zvcm06OlNWR19U
UkFOU0ZPUk1fVU5LTk9XTikKLSAgICAsIG1fcm90YXRlU3BlY2lhbENhc2UoZmFsc2UpCi0gICAg
LCBtX3RvUm90YXRlU3BlY2lhbENhc2UoZmFsc2UpCi0gICAgLCBtX2Zyb21Sb3RhdGVTcGVjaWFs
Q2FzZShmYWxzZSkKIHsKIH0KIApAQCAtNzYsMjIyICs3Miw4NSBAQCB2b2lkIFNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50OjpwYXJzZU1hCiAgICAgICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi12b2lkIFNWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50OjpzdG9yZUluaXRpYWxWYWx1ZSgpCitib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVt
ZW50Ojp1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUsIGZs
b2F0IHRpbWVQZXJjZW50YWdlLCB1bnNpZ25lZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJjZW50YWdl
UGFzdCkKIHsKLSAgICBtX2luaXRpYWxUcmFuc2Zvcm0gPSBTVkdUcmFuc2Zvcm0oKTsKLSAgICAK
LSAgICAvLyBTYXZlIGluaXRpYWwgdHJhbnNmb3JtLi4uIChuZWVkZWQgZm9yIGZpbGw9InJlbW92
ZSIgb3IgYWRkaXR2ZT0ic3VtIikKLSAgICBpZiAodGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRy
YW5zZm9ybWFibGUoKSkgewotICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCog
dHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPih0
YXJnZXRFbGVtZW50KCkpOwotICAgICAgICBSZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4gdHJhbnNm
b3JtTGlzdCA9IHRyYW5zZm9ybS0+dHJhbnNmb3JtQmFzZVZhbHVlKCk7Ci0gICAgICAgIGlmICh0
cmFuc2Zvcm1MaXN0KSB7Ci0gICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IHRyYW5zZm9ybUxpc3QtPm51bWJl
ck9mSXRlbXMoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgU1ZHVHJhbnNmb3JtIHZhbHVlID0g
dHJhbnNmb3JtTGlzdC0+Z2V0SXRlbShpLCBlYyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3JvbmcgaWYgdGhlIGluaXRpYWwgdHJhbnNmb3Jt
IGxpc3QgaGFzIG5vdCBiZWVuIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUu
dHlwZSgpID09IG1fdHlwZSkgewotICAgICAgICAgICAgICAgICAgICBtX2luaXRpYWxUcmFuc2Zv
cm0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChhbmltYXRpb25Nb2Rl
ID09IFRPX0FOSU1BVElPTikKKyAgICAgICAgLy8gdG8tYW5pbWF0aW9ucyBoYXZlIGEgc3BlY2lh
bCBlcXVhdGlvbjogdmFsdWUgPSAodG8gLSBiYXNlKSAqICh0aW1lL2R1cmF0aW9uKSArIGJhc2UK
KyAgICAgICAgbV9hbmltYXRlZFRyYW5zZm9ybSA9IFNWR1RyYW5zZm9ybURpc3RhbmNlKG1fYmFz
ZVRyYW5zZm9ybSwgbV90b1RyYW5zZm9ybSkuc2NhbGVkRGlzdGFuY2UodGltZVBlcmNlbnRhZ2Up
LmFkZFRvU1ZHVHJhbnNmb3JtKG1fYmFzZVRyYW5zZm9ybSk7CisgICAgZWxzZQorICAgICAgICBt
X2FuaW1hdGVkVHJhbnNmb3JtID0gbV90cmFuc2Zvcm1EaXN0YW5jZS5zY2FsZWREaXN0YW5jZShw
ZXJjZW50YWdlUGFzdCkuYWRkVG9TVkdUcmFuc2Zvcm0obV9mcm9tVHJhbnNmb3JtKTsKKyAgICBy
ZXR1cm4gKG1fYW5pbWF0ZWRUcmFuc2Zvcm0gIT0gbV9iYXNlVHJhbnNmb3JtKTsKIH0KIAotdm9p
ZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cmVzZXRWYWx1ZXMoKQorYm9vbCBTVkdBbmlt
YXRlVHJhbnNmb3JtRWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uQmFzZVZhbHVlRnJvbUVsZW1lbnQo
KQogewotICAgIG1fY3VycmVudEl0ZW0gPSAtMTsKKyAgICBtX2Jhc2VUcmFuc2Zvcm0gPSBTVkdU
cmFuc2Zvcm0oKTsKICAgICBtX3RvVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtKCk7CiAgICAgbV9m
cm9tVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtKCk7Ci0gICAgbV9pbml0aWFsVHJhbnNmb3JtID0g
U1ZHVHJhbnNmb3JtKCk7Ci19Ci0KLWJvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnVw
ZGF0ZUN1cnJlbnRWYWx1ZShkb3VibGUgdGltZVBlcmNlbnRhZ2UpCi17Ci0gICAgQWZmaW5lVHJh
bnNmb3JtIHFUb01hdHJpeCwgcUZyb21NYXRyaXg7Ci0gICAgZG91YmxlIHVzZVRpbWVQZXJjZW50
YWdlID0gdGltZVBlcmNlbnRhZ2U7CisgICAgbV9hbmltYXRlZFRyYW5zZm9ybSA9IFNWR1RyYW5z
Zm9ybSgpOwogICAgIAotICAgIGlmIChtX3ZhbHVlcykgewotICAgICAgICBpbnQgaXRlbUJ5UGVy
Y2VudGFnZSA9IGNhbGN1bGF0ZUN1cnJlbnRWYWx1ZUl0ZW0odGltZVBlcmNlbnRhZ2UpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKGl0ZW1CeVBlcmNlbnRhZ2UgPT0gLTEpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9jdXJyZW50SXRlbSAhPSBpdGVt
QnlQZXJjZW50YWdlKSB7IC8vIEl0ZW0gY2hhbmdlZC4uLgotICAgICAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEV4dHJhY3QgY3VycmVu
dCAnZnJvbScgLyAndG8nIHZhbHVlcwotICAgICAgICAgICAgU3RyaW5nIHZhbHVlMSA9IG1fdmFs
dWVzLT5nZXRJdGVtKGl0ZW1CeVBlcmNlbnRhZ2UsIGVjKTsKLSAgICAgICAgICAgIFN0cmluZyB2
YWx1ZTIgPSBtX3ZhbHVlcy0+Z2V0SXRlbShpdGVtQnlQZXJjZW50YWdlICsgMSwgZWMpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBDYWxjdWxhdGUgbmV3IGZyb20vdG8gdHJhbnNmb3Jt
IHZhbHVlcy4uLgotICAgICAgICAgICAgaWYgKCF2YWx1ZTEuaXNFbXB0eSgpICYmICF2YWx1ZTIu
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBhcHBseSA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgIGlmIChtX3RvVHJhbnNmb3JtLmlzVmFsaWQoKSAmJiBtX2Zyb21UcmFuc2Zvcm0u
aXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHFUb01hdHJpeCA9IG1fdG9UcmFuc2Zv
cm0ubWF0cml4KCk7Ci0gICAgICAgICAgICAgICAgICAgIHFGcm9tTWF0cml4ID0gbV9mcm9tVHJh
bnNmb3JtLm1hdHJpeCgpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgYXBwbHkgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB1c2VUaW1lUGVyY2VudGFnZSA9
IDEuMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgbV90b1RyYW5zZm9ybSA9IHBhcnNlVHJhbnNmb3JtVmFsdWUodmFsdWUyKTsKLSAgICAgICAg
ICAgICAgICBtX3RvUm90YXRlU3BlY2lhbENhc2UgPSBtX3JvdGF0ZVNwZWNpYWxDYXNlOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZnJvbVRyYW5zZm9ybSA9IHBhcnNlVHJh
bnNmb3JtVmFsdWUodmFsdWUxKTsKLSAgICAgICAgICAgICAgICBtX2Zyb21Sb3RhdGVTcGVjaWFs
Q2FzZSA9IG1fcm90YXRlU3BlY2lhbENhc2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgbV9jdXJyZW50SXRlbSA9IGl0ZW1CeVBlcmNlbnRhZ2U7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKCFhcHBseSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG1fdG9U
cmFuc2Zvcm0uaXNWYWxpZCgpICYmIG1fZnJvbVRyYW5zZm9ybS5pc1ZhbGlkKCkpCi0gICAgICAg
ICAgICB1c2VUaW1lUGVyY2VudGFnZSA9IGNhbGN1bGF0ZVJlbGF0aXZlVGltZVBlcmNlbnRhZ2Uo
dGltZVBlcmNlbnRhZ2UsIG1fY3VycmVudEl0ZW0pOwotICAgIH0KLSAgICAKLSAgICBpZiAobV90
b1RyYW5zZm9ybS5pc1ZhbGlkKCkgJiYgcVRvTWF0cml4LmlzSWRlbnRpdHkoKSkKLSAgICAgICAg
cVRvTWF0cml4ID0gbV90b1RyYW5zZm9ybS5tYXRyaXgoKTsKLSAgICAKLSAgICBpZiAobV9mcm9t
VHJhbnNmb3JtLmlzVmFsaWQoKSAmJiBxRnJvbU1hdHJpeC5pc0lkZW50aXR5KCkpCi0gICAgICAg
IHFGcm9tTWF0cml4ID0gbV9mcm9tVHJhbnNmb3JtLm1hdHJpeCgpOworICAgIGlmICghdGFyZ2V0
RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAotICAgIG1fY3VycmVudFRyYW5zZm9ybS5yZXNldCgpOworICAgIFNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50KiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCo+KHRhcmdldEVsZW1lbnQoKSk7CisgICAgUmVmUHRyPFNWR1RyYW5z
Zm9ybUxpc3Q+IHRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm0tPnRyYW5zZm9ybSgpOworICAgIGlm
ICghdHJhbnNmb3JtTGlzdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmIChp
c0FjY3VtdWxhdGVkKCkgJiYgcmVwZWF0aW9ucygpICE9IDAuMCkKLSAgICAgICAgbV9jdXJyZW50
VHJhbnNmb3JtLm11bHRpcGx5KG1fbGFzdFRyYW5zZm9ybSk7Ci0gICAgCi0gICAgc3dpdGNoICht
X3R5cGUpIHsKLSAgICAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNM
QVRFOgotICAgICAgICB7Ci0gICAgICAgICAgICBkb3VibGUgZHggPSAoKHFUb01hdHJpeC5lKCkg
LSBxRnJvbU1hdHJpeC5lKCkpICogdXNlVGltZVBlcmNlbnRhZ2UpICsgcUZyb21NYXRyaXguZSgp
OwotICAgICAgICAgICAgZG91YmxlIGR5ID0gKChxVG9NYXRyaXguZigpIC0gcUZyb21NYXRyaXgu
ZigpKSAqIHVzZVRpbWVQZXJjZW50YWdlKSArIHFGcm9tTWF0cml4LmYoKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgbV9jdXJyZW50VHJhbnNmb3JtLnRyYW5zbGF0ZShkeCwgZHkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNW
R19UUkFOU0ZPUk1fU0NBTEU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRvdWJsZSBzeCA9ICgo
cVRvTWF0cml4LmEoKSAtIHFGcm9tTWF0cml4LmEoKSkgKiB1c2VUaW1lUGVyY2VudGFnZSkgKyBx
RnJvbU1hdHJpeC5hKCk7Ci0gICAgICAgICAgICBkb3VibGUgc3kgPSAoKHFUb01hdHJpeC5kKCkg
LSBxRnJvbU1hdHJpeC5kKCkpICogdXNlVGltZVBlcmNlbnRhZ2UpICsgcUZyb21NYXRyaXguZCgp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2N1cnJlbnRUcmFuc2Zvcm0uc2NhbGUoc3gs
IHN5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgU1ZHVHJh
bnNmb3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURToKLSAgICAgICAgewotICAgICAgICAgICAgZG91
YmxlIHRvQW5nbGUsIHRvQ3gsIHRvQ3ksIGZyb21BbmdsZSwgZnJvbUN4LCBmcm9tQ3k7Ci0gICAg
ICAgICAgICBjYWxjdWxhdGVSb3RhdGlvbkZyb21NYXRyaXgocVRvTWF0cml4LCB0b0FuZ2xlLCB0
b0N4LCB0b0N5KTsKLSAgICAgICAgICAgIGNhbGN1bGF0ZVJvdGF0aW9uRnJvbU1hdHJpeChxRnJv
bU1hdHJpeCwgZnJvbUFuZ2xlLCBmcm9tQ3gsIGZyb21DeSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChtX3RvUm90YXRlU3BlY2lhbENhc2UpCi0gICAgICAgICAgICAgICAgdG9Bbmds
ZSA9IChscm91bmQodG9BbmdsZSkgPT0gMSkgPyAwLjAgOiAzNjAuMDsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKG1fZnJvbVJvdGF0ZVNwZWNpYWxDYXNlKQotICAgICAgICAgICAgICAg
IGZyb21BbmdsZSA9IChscm91bmQoZnJvbUFuZ2xlKSA9PSAxKSA/IDAuMCA6IDM2MC4wOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBkb3VibGUgYW5nbGUgPSAoKHRvQW5nbGUgLSBmcm9tQW5n
bGUpICogdXNlVGltZVBlcmNlbnRhZ2UpICsgZnJvbUFuZ2xlOwotICAgICAgICAgICAgZG91Ymxl
IGN4ID0gKHRvQ3ggLSBmcm9tQ3gpICogdXNlVGltZVBlcmNlbnRhZ2UgKyBmcm9tQ3g7Ci0gICAg
ICAgICAgICBkb3VibGUgY3kgPSAodG9DeSAtIGZyb21DeSkgKiB1c2VUaW1lUGVyY2VudGFnZSAr
IGZyb21DeTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9jdXJyZW50VHJhbnNmb3JtLnRy
YW5zbGF0ZShjeCwgY3kpOwotICAgICAgICAgICAgbV9jdXJyZW50VHJhbnNmb3JtLnJvdGF0ZShh
bmdsZSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRUcmFuc2Zvcm0udHJhbnNsYXRlKC1jeCwgLWN5
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgU1ZHVHJhbnNm
b3JtOjpTVkdfVFJBTlNGT1JNX1NLRVdYOgotICAgICAgICB7Ci0gICAgICAgICAgICBkb3VibGUg
c3ggPSAoU1ZHQW5nbGU6OnRvZGVnKGF0YW4ocVRvTWF0cml4LmMoKSkgLSBhdGFuKHFGcm9tTWF0
cml4LmMoKSkpICoKLSAgICAgICAgICAgICAgICAgICAgICAgICB1c2VUaW1lUGVyY2VudGFnZSkg
KyBTVkdBbmdsZTo6dG9kZWcoYXRhbihxRnJvbU1hdHJpeC5jKCkpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9jdXJyZW50VHJhbnNmb3JtLnNoZWFyKHN4LCAxLjApOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFO
U0ZPUk1fU0tFV1k6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRvdWJsZSBzeSA9IChTVkdBbmds
ZTo6dG9kZWcoYXRhbihxVG9NYXRyaXguYigpKSAtIGF0YW4ocUZyb21NYXRyaXguYigpKSkgKgot
ICAgICAgICAgICAgICAgICAgICAgICAgIHVzZVRpbWVQZXJjZW50YWdlKSArIFNWR0FuZ2xlOjp0
b2RlZyhhdGFuKHFGcm9tTWF0cml4LmIoKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBt
X2N1cnJlbnRUcmFuc2Zvcm0uc2hlYXIoMS4wLCBzeSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQorICAg
IG1fYmFzZVRyYW5zZm9ybSA9IHRyYW5zZm9ybUxpc3QtPmNvbmNhdGVuYXRlRm9yVHlwZShtX3R5
cGUpOworICAgICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdBbmltYXRlVHJh
bnNmb3JtRWxlbWVudDo6aGFuZGxlU3RhcnRDb25kaXRpb24oKQordm9pZCBTVkdBbmltYXRlVHJh
bnNmb3JtRWxlbWVudDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KCkKIHsKLSAgICBzdG9y
ZUluaXRpYWxWYWx1ZSgpOworICAgIGlmICghdGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5z
Zm9ybWFibGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50KiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudCo+KHRhcmdldEVsZW1lbnQoKSk7CisgICAgUmVmUHRyPFNWR1RyYW5zZm9ybUxp
c3Q+IHRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm0tPnRyYW5zZm9ybSgpOworICAgIGlmICghdHJh
bnNmb3JtTGlzdCkKKyAgICAgICAgcmV0dXJuOwogICAgIAotICAgIHN3aXRjaCAoZGV0ZWN0QW5p
bWF0aW9uTW9kZSgpKSB7Ci0gICAgICAgIGNhc2UgVE9fQU5JTUFUSU9OOgotICAgICAgICBjYXNl
IEZST01fVE9fQU5JTUFUSU9OOgotICAgICAgICB7ICAgICAgICAKLSAgICAgICAgICAgIG1fdG9U
cmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybVZhbHVlKG1fdG8pOwotICAgICAgICAgICAgbV90b1Jv
dGF0ZVNwZWNpYWxDYXNlID0gbV9yb3RhdGVTcGVjaWFsQ2FzZTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKCFtX2Zyb20uaXNFbXB0eSgpKSB7IC8vIGZyb20tdG8gYW5pbWF0aW9uCi0g
ICAgICAgICAgICAgICAgbV9mcm9tVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX2Zy
b20pOwotICAgICAgICAgICAgICAgIG1fZnJvbVJvdGF0ZVNwZWNpYWxDYXNlID0gbV9yb3RhdGVT
cGVjaWFsQ2FzZTsKLSAgICAgICAgICAgIH0gZWxzZSB7IC8vIHRvIGFuaW1hdGlvbgotICAgICAg
ICAgICAgICAgIG1fZnJvbVRyYW5zZm9ybSA9IG1faW5pdGlhbFRyYW5zZm9ybTsKLSAgICAgICAg
ICAgICAgICBtX2Zyb21Sb3RhdGVTcGVjaWFsQ2FzZSA9IGZhbHNlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fZnJvbVRyYW5zZm9ybS5pc1ZhbGlkKCkp
Ci0gICAgICAgICAgICAgICAgbV9mcm9tVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtKCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQllf
QU5JTUFUSU9OOgotICAgICAgICBjYXNlIEZST01fQllfQU5JTUFUSU9OOgotICAgICAgICB7Ci0g
ICAgICAgICAgICBtX3RvVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX2J5KTsKLSAg
ICAgICAgICAgIG1fdG9Sb3RhdGVTcGVjaWFsQ2FzZSA9IG1fcm90YXRlU3BlY2lhbENhc2U7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9mcm9tLmlzRW1wdHkoKSkgeyAvLyBmcm9t
LWJ5IGFuaW1hdGlvbgotICAgICAgICAgICAgICAgIG1fZnJvbVRyYW5zZm9ybSA9IHBhcnNlVHJh
bnNmb3JtVmFsdWUobV9mcm9tKTsKLSAgICAgICAgICAgICAgICBtX2Zyb21Sb3RhdGVTcGVjaWFs
Q2FzZSA9IG1fcm90YXRlU3BlY2lhbENhc2U7Ci0gICAgICAgICAgICB9IGVsc2UgeyAvLyBieSBh
bmltYXRpb24KLSAgICAgICAgICAgICAgICBtX2Zyb21UcmFuc2Zvcm0gPSBtX2luaXRpYWxUcmFu
c2Zvcm07Ci0gICAgICAgICAgICAgICAgbV9mcm9tUm90YXRlU3BlY2lhbENhc2UgPSBmYWxzZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2Zyb21UcmFu
c2Zvcm0uaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIG1fZnJvbVRyYW5zZm9ybSA9IFNWR1Ry
YW5zZm9ybSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBW
QUxVRVNfQU5JTUFUSU9OOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8va2RFcnJvcigpIDw8IGtfZnVuY2luZm8gPDwgIiBVbmFi
bGUgdG8gZGV0ZWN0IGFuaW1hdGlvbiBtb2RlISBBYm9ydGluZyBjcmVhdGlvbiEiIDw8IGVuZGw7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnVwZGF0ZUxhc3RW
YWx1ZVdpdGhDdXJyZW50KCkKLXsKLSAgICBtX2xhc3RUcmFuc2Zvcm0gPSBtX2N1cnJlbnRUcmFu
c2Zvcm07Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmFwcGx5QW5pbWF0
aW9uVG9WYWx1ZShTVkdUcmFuc2Zvcm1MaXN0KiB0YXJnZXRUcmFuc2Zvcm1zKQotewogICAgIEV4
Y2VwdGlvbkNvZGUgZWM7CiAgICAgaWYgKCFpc0FkZGl0aXZlKCkpCi0gICAgICAgIHRhcmdldFRy
YW5zZm9ybXMtPmNsZWFyKGVjKTsKKyAgICAgICAgdHJhbnNmb3JtTGlzdC0+Y2xlYXIoZWMpOwog
ICAgIAotICAgIHRhcmdldFRyYW5zZm9ybXMtPmFwcGVuZEl0ZW0oU1ZHVHJhbnNmb3JtKG1fY3Vy
cmVudFRyYW5zZm9ybSksIGVjKTsKKyAgICB0cmFuc2Zvcm1MaXN0LT5hcHBlbmRJdGVtKG1fYW5p
bWF0ZWRUcmFuc2Zvcm0sIGVjKTsKK30KKworYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVu
dDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUs
IHVuc2lnbmVkIHZhbHVlSW5kZXgpCit7CisgICAgc3dpdGNoIChkZXRlY3RBbmltYXRpb25Nb2Rl
KCkpIHsKKyAgICBjYXNlIEZST01fVE9fQU5JTUFUSU9OOgorICAgICAgICBtX2Zyb21UcmFuc2Zv
cm0gPSBwYXJzZVRyYW5zZm9ybVZhbHVlKG1fZnJvbSk7CisgICAgICAgIC8vIGZhbGwgdGhyb3Vn
aAorICAgIGNhc2UgVE9fQU5JTUFUSU9OOgorICAgICAgICBtX3RvVHJhbnNmb3JtID0gcGFyc2VU
cmFuc2Zvcm1WYWx1ZShtX3RvKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGUk9NX0JZX0FO
SU1BVElPTjoKKyAgICAgICAgbV9mcm9tVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZSht
X2Zyb20pOworICAgICAgICBtX3RvVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX2J5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCWV9BTklNQVRJT046CisgICAgICAgIG1fZnJv
bVRyYW5zZm9ybSA9IHBhcnNlVHJhbnNmb3JtVmFsdWUobV9mcm9tKTsKKyAgICAgICAgbV90b1Ry
YW5zZm9ybSA9IFNWR1RyYW5zZm9ybURpc3RhbmNlOjphZGRTVkdUcmFuc2Zvcm1zKG1fZnJvbVRy
YW5zZm9ybSwgcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX2J5KSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgVkFMVUVTX0FOSU1BVElPTjoKKyAgICAgICAgbV9mcm9tVHJhbnNmb3JtID0gcGFyc2VU
cmFuc2Zvcm1WYWx1ZShtX3ZhbHVlc1t2YWx1ZUluZGV4XSk7CisgICAgICAgIG1fdG9UcmFuc2Zv
cm0gPSAoKHZhbHVlSW5kZXggKyAxKSA8IG1fdmFsdWVzLnNpemUoKSkgPyBwYXJzZVRyYW5zZm9y
bVZhbHVlKG1fdmFsdWVzW3ZhbHVlSW5kZXggKyAxXSkgOiBtX2Zyb21UcmFuc2Zvcm07CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgTk9fQU5JTUFUSU9OOgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisgICAgbV90cmFuc2Zvcm1EaXN0YW5jZSA9IFNWR1RyYW5zZm9ybURp
c3RhbmNlKG1fZnJvbVRyYW5zZm9ybSwgbV90b1RyYW5zZm9ybSk7CisgICAgcmV0dXJuICFtX3Ry
YW5zZm9ybURpc3RhbmNlLmlzWmVybygpOwogfQogCiBTVkdUcmFuc2Zvcm0gU1ZHQW5pbWF0ZVRy
YW5zZm9ybUVsZW1lbnQ6OnBhcnNlVHJhbnNmb3JtVmFsdWUoY29uc3QgU3RyaW5nJiBkYXRhKSBj
b25zdAogeworICAgIC8vIEZJWE1FOiBUaGlzIHBhcnNlciBzaG91bGQgYmUgY29tYmluZWQgd2l0
aCB0aGUgb25lIGluIFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtQXR0cmlidXRlCisg
ICAgCiAgICAgU3RyaW5nIHBhcnNlID0gZGF0YS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICBpZiAo
cGFyc2UuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtKCk7CkBAIC0zNDIs
MjEgKzIwMSw2IEBAIFNWR1RyYW5zZm9ybSBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDoKICAg
ICAgICAgICAgIGVsc2UgCiAgICAgICAgICAgICAgICAgYW5nbGUgPSBwYXJzZS50b0RvdWJsZSgp
OwogCi0gICAgICAgICAgICAvLyBPayBub3cgaGVyZSdzIGEgaGFjayB0byBtYWtlIGl0IHBvc3Np
YmxlIHRvIGNhbGN1bGF0ZSBjeC9jeSB2YWx1ZXMsIGlmIGFuZ2xlID0gMCAKLSAgICAgICAgICAg
IC8vIG9yIGFuZ2xlPTM2MCAtPiBmb3IgYW5nbGU9MCBvdXIgbWF0cml4IGlzIG0xMTogMSBtMTI6
IDAgbTIxOiAwIG0yMjogMSBkeDogMCBkeTogMAotICAgICAgICAgICAgLy8gQXMgeW91IGNhbiBz
ZWUgdGhlcmUgaXMgbm8gd2F5IHRvIHJldHJpZXZlIHRoZSBjeC9jeSB2YWx1ZXMgZm9yIHRoZXNl
IGFuZ2xlcy4KLSAgICAgICAgICAgIC8vIC0+IHNldCAnbV9yb3RhdGVTcGVjaWFsQ2FzZScgdG8g
dHJ1ZSwgYW5kIHNhdmUgYW5nbGUgPSAxLzM1OSAtPiB0aGlzIHdheSB3ZSBjYW4gY2FsY3VsYXRl
Ci0gICAgICAgICAgICAvLyAgICB0aGUgY3gvY3kgdmFsdWVzLCB3aGlsZSBrZWVwaW5nIHRoaXMg
dWJlci1vcHRpbWl6ZWQgd2F5IG9mIGhhbmRsaW5nIDxhbmltYXRlVHJhbnNmb3JtPiEKLSAgICAg
ICAgICAgIG1fcm90YXRlU3BlY2lhbENhc2UgPSBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKGFuZ2xlID09IDAuMCkgewotICAgICAgICAgICAgICAgIGFuZ2xlID0gYW5nbGUg
KyAxLjA7Ci0gICAgICAgICAgICAgICAgbV9yb3RhdGVTcGVjaWFsQ2FzZSA9IHRydWU7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKGFuZ2xlID09IDM2MC4wKSB7Ci0gICAgICAgICAgICAgICAgYW5n
bGUgPSBhbmdsZSAtIDEuMDsKLSAgICAgICAgICAgICAgICBtX3JvdGF0ZVNwZWNpYWxDYXNlID0g
dHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAogICAgICAgICAgICAgcGFyc2VkVHJh
bnNmb3JtLnNldFJvdGF0ZShhbmdsZSwgY3gsIGN5KTsKICAgICAgICAgICAgIGJyZWFrOyAgICAK
ICAgICAgICAgfQpAQCAtMzg1LDcgKzIyOSw2IEBAIHZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVs
ZW1lbnQ6OmNhbGN1bGEKICAgICBkb3VibGUgc2luYSA9IC1tYXRyaXguYygpOwogCiAgICAgaWYg
KGNvc2EgIT0gMS4wKSB7Ci0gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgYW5nbGUgdmlhIG1hZ2lj
IDspCiAgICAgICAgIGRvdWJsZSB0ZW1wID0gU1ZHQW5nbGU6OnRvZGVnKGFzaW4oc2luYSkpOwog
ICAgICAgICBhbmdsZSA9IFNWR0FuZ2xlOjp0b2RlZyhhY29zKGNvc2EpKTsKICAgICAgICAgaWYg
KHRlbXAgPCAwKQpAQCAtNDA0LDExICsyNDcsNiBAQCB2b2lkIFNWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50OjpjYWxjdWxhCiAgICAgYW5nbGUgPSAwLjA7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBT
VkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Y3VycmVudFRyYW5zZm9ybSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fY3VycmVudFRyYW5zZm9ybTsKLX0KLQogfQogCiAvLyB2aW06dHM9NDpub2V0
CkluZGV4OiBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAkocmV2aXNpb24gMTkw
OTIpCisrKyBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiU1ZHQW5pbWF0aW9uRWxlbWVudC5o
IgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybURpc3Rh
bmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsMzggKzQxLDMwIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkVGFyZ2V0KCkgY29u
c3Q7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSopOwotCi0gICAgICAgIHZvaWQgYXBwbHlBbmltYXRpb25Ub1ZhbHVlKFNWR1RyYW5z
Zm9ybUxpc3QqKTsKLQotICAgICAgICAvLyBIZWxwZXJzCi0gICAgICAgIFNWR1RyYW5zZm9ybSBw
YXJzZVRyYW5zZm9ybVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAgICAgICB2b2lkIGNh
bGN1bGF0ZVJvdGF0aW9uRnJvbU1hdHJpeChjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBkb3VibGUm
IGFuZ2xlLCBkb3VibGUmIGN4LCBkb3VibGUmIGN5KSBjb25zdDsKLQotICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gY3VycmVudFRyYW5zZm9ybSgpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgdmly
dHVhbCBib29sIHVwZGF0ZUFuaW1hdGlvbkJhc2VWYWx1ZUZyb21FbGVtZW50KCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBhcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQoKTsKIAogICAgIHByb3Rl
Y3RlZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KLSAgICAgICAgdm9pZCBzdG9yZUluaXRpYWxWYWx1ZSgp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRWYWx1ZXMoKTsKICAgICAgICAgCi0gICAgICAg
IHZpcnR1YWwgYm9vbCB1cGRhdGVDdXJyZW50VmFsdWUoZG91YmxlIHRpbWVQZXJjZW50YWdlKTsK
LSAgICAgICAgdmlydHVhbCBib29sIGhhbmRsZVN0YXJ0Q29uZGl0aW9uKCk7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVMYXN0VmFsdWVXaXRoQ3VycmVudCgpOworICAgICAgICB2aXJ0dWFs
IGJvb2wgdXBkYXRlQW5pbWF0ZWRWYWx1ZShFQW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNl
bnRhZ2UsIHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KTsKKyAgICAg
ICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSwg
dW5zaWduZWQgdmFsdWVJbmRleCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBpbnQgbV9jdXJy
ZW50SXRlbTsKKyAgICAgICAgLy8gSGVscGVycworICAgICAgICBTVkdUcmFuc2Zvcm0gcGFyc2VU
cmFuc2Zvcm1WYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICAgICAgdm9pZCBjYWxjdWxh
dGVSb3RhdGlvbkZyb21NYXRyaXgoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZG91YmxlJiBhbmds
ZSwgZG91YmxlJiBjeCwgZG91YmxlJiBjeSkgY29uc3Q7CisgICAgICAgICAgICAKICAgICAgICAg
U1ZHVHJhbnNmb3JtOjpTVkdUcmFuc2Zvcm1UeXBlIG1fdHlwZTsKIAogICAgICAgICBTVkdUcmFu
c2Zvcm0gbV90b1RyYW5zZm9ybTsKICAgICAgICAgU1ZHVHJhbnNmb3JtIG1fZnJvbVRyYW5zZm9y
bTsKLSAgICAgICAgU1ZHVHJhbnNmb3JtIG1faW5pdGlhbFRyYW5zZm9ybTsKLQotICAgICAgICBB
ZmZpbmVUcmFuc2Zvcm0gbV9sYXN0VHJhbnNmb3JtOwotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
bV9jdXJyZW50VHJhbnNmb3JtOwogCi0gICAgICAgIG11dGFibGUgYm9vbCBtX3JvdGF0ZVNwZWNp
YWxDYXNlIDogMTsKLSAgICAgICAgYm9vbCBtX3RvUm90YXRlU3BlY2lhbENhc2UgOiAxOwotICAg
ICAgICBib29sIG1fZnJvbVJvdGF0ZVNwZWNpYWxDYXNlIDogMTsKKyAgICAgICAgU1ZHVHJhbnNm
b3JtIG1fYmFzZVRyYW5zZm9ybTsKKyAgICAgICAgU1ZHVHJhbnNmb3JtIG1fYW5pbWF0ZWRUcmFu
c2Zvcm07CisgICAgICAgIAorICAgICAgICBTVkdUcmFuc2Zvcm1EaXN0YW5jZSBtX3RyYW5zZm9y
bURpc3RhbmNlOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IGtzdmcy
L3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5MDkyKQorKysga3N2ZzIvc3ZnL1NWR0Fu
aW1hdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDMwIEBAIHZv
aWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6cGFyc2VLZXlOdW1iZXIKICAgICB9CiB9CiAKK3N0YXRp
YyB2b2lkIHBhcnNlVmFsdWVzKFZlY3RvcjxTdHJpbmc+JiB2YWx1ZXMsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCit7CisgICAgY29uc3QgVUNoYXIqIHB0ciA9IHZhbHVlLmNoYXJhY3RlcnMoKTsKKyAg
ICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgdmFsdWUubGVuZ3RoKCk7CisgICAgc2tpcE9wdGlv
bmFsU3BhY2VzKHB0ciwgZW5kKTsKKyAgICB3aGlsZSAocHRyIDwgZW5kKSB7CisgICAgICAgIC8v
IFNNSUwgMy4yLjIgOiBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZSBzcGFjZSwgYW5kIHdoaXRl
IHNwYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgc2VtaWNvbG9uIHNlcGFyYXRvcnMsIHdpbGwgYmUgaWdu
b3JlZC4KKyAgICAgICAgY29uc3QgVUNoYXIqIHZhbHVlU3RhcnQgPSBwdHI7CisgICAgICAgIHdo
aWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSAnOycpIC8vIGNhcmVmdWwgbm90IHRvIGlnbm9yZSB3
aGl0ZXNwYWNlIGluc2lkZSB2YWx1ZXMKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICBpZiAo
cHRyID09IHZhbHVlU3RhcnQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAg
IC8vIHdhbGsgYmFja3dhcmRzIGZyb20gdGhlIDsgdG8gaWdub3JlIGFueSB3aGl0ZXNwYWNlCisg
ICAgICAgIGNvbnN0IFVDaGFyKiB2YWx1ZUVuZCA9IHB0cjsKKyAgICAgICAgd2hpbGUgKHZhbHVl
U3RhcnQgPCB2YWx1ZUVuZCAmJiBpc1doaXRlc3BhY2UoKnZhbHVlRW5kKSkKKyAgICAgICAgICAg
IHZhbHVlRW5kLS07CisgICAgICAgIAorICAgICAgICB2YWx1ZXMuYXBwZW5kKFN0cmluZyh2YWx1
ZVN0YXJ0LCB2YWx1ZUVuZCAtIHZhbHVlU3RhcnQpKTsKKyAgICAgICAgCisgICAgICAgIHNraXBP
cHRpb25hbFNwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCAnOycpOworICAgIH0KK30KKwogc3Rh
dGljIHZvaWQgcGFyc2VLZXlTcGxpbmVzKFZlY3RvcjxTVkdBbmltYXRpb25FbGVtZW50OjpLZXlT
cGxpbmU+JiBrZXlTcGxpbmVzLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIGRvdWJsZSBu
dW1iZXIgPSAwLmY7CkBAIC0yNzMsOCArMjk3LDggQEAgdm9pZCBTVkdBbmltYXRpb25FbGVtZW50
OjpwYXJzZU1hcHBlZEF0dAogICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAicGFjZWQiKQogICAg
ICAgICAgICAgbV9jYWxjTW9kZSA9IENBTENNT0RFX1BBQ0VEOwogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjp2YWx1ZXNBdHRyKSB7Ci0gICAgICAgIG1fdmFsdWVzID0g
bmV3IFNWR1N0cmluZ0xpc3QoKTsKLSAgICAgICAgbV92YWx1ZXMtPnBhcnNlKHZhbHVlLCAnOycp
OworICAgICAgICBtX3ZhbHVlcy5jbGVhcigpOworICAgICAgICBwYXJzZVZhbHVlcyhtX3ZhbHVl
cywgdmFsdWUpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXlU
aW1lc0F0dHIpIHsKICAgICAgICAgbV9rZXlUaW1lcy5jbGVhcigpOwogICAgICAgICBwYXJzZUtl
eU51bWJlcnMobV9rZXlUaW1lcywgdmFsdWUpOwpAQCAtMzkxLDggKzQxNSwxMSBAQCB2b2lkIFNW
R0FuaW1hdGlvbkVsZW1lbnQ6OmNsb3NlUmVuZGVyZXIoCiAgICAgU1ZHRWxlbWVudDo6Y2xvc2VS
ZW5kZXJlcigpOwogfQogCi1TdHJpbmcgU1ZHQW5pbWF0aW9uRWxlbWVudDo6dGFyZ2V0QXR0cmli
dXRlKCkgY29uc3QKK1N0cmluZyBTVkdBbmltYXRpb25FbGVtZW50Ojp0YXJnZXRBdHRyaWJ1dGVB
bmltYXRlZFZhbHVlKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogVGhpcyBtZXRob2QgaXMgbm90
IGVudGlyZWx5IGNvcnJlY3QKKyAgICAvLyBJdCBkb2VzIG5vdCBwcm9wZXJseSBncmFiIHRoZSB0
cnVlICJhbmltVmFsIiBpbnN0ZWFkIGdyYWJzIHRoZSBiYXNlVmFsIChvciBzb21ldGhpbmcgdmVy
eSBjbG9zZSkKKwogICAgIGlmICghdGFyZ2V0RWxlbWVudCgpKQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAgICAgCkBAIC00MjgsOCArNDU1LDEwIEBAIFN0cmluZyBTVkdBbmltYXRpb25FbGVt
ZW50Ojp0YXJnZXRBdHRyaWIKICAgICByZXR1cm4gcmV0OwogfQogCi12b2lkIFNWR0FuaW1hdGlv
bkVsZW1lbnQ6OnNldFRhcmdldEF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBT
VkdBbmltYXRpb25FbGVtZW50OjpzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiB7CisgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIGlzIG5vdCBlbnRp
cmVseSBjb3JyZWN0CisgICAgLy8gSXQgZG9lcyBub3QgcHJvcGVybHkgc2V0IHRoZSAiYW5pbVZh
bCIsIHJhdGhlciBpdCBzZXRzIHRoZSAiYmFzZVZhbCIKICAgICBTVkdBbmltYXRpb25FbGVtZW50
OjpzZXRUYXJnZXRBdHRyaWJ1dGUodGFyZ2V0RWxlbWVudCgpLCBtX2F0dHJpYnV0ZU5hbWUsIHZh
bHVlLCBzdGF0aWNfY2FzdDxFQXR0cmlidXRlVHlwZT4obV9hdHRyaWJ1dGVUeXBlKSk7CiB9CiAK
QEAgLTQ4NSw3ICs1MTQsOSBAQCBib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzQWNjdW11bGF0
ZWQoCiAKIEVBbmltYXRpb25Nb2RlIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmRldGVjdEFuaW1hdGlv
bk1vZGUoKSBjb25zdAogewotICAgIGlmICgoIW1fZnJvbS5pc0VtcHR5KCkgJiYgIW1fdG8uaXNF
bXB0eSgpKSB8fCAoIW1fdG8uaXNFbXB0eSgpKSkgeyAvLyB0by9mcm9tLXRvIGFuaW1hdGlvbgor
ICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnZhbHVlc0F0dHIpKQorICAgICAgICByZXR1
cm4gVkFMVUVTX0FOSU1BVElPTjsKKyAgICBlbHNlIGlmICgoIW1fZnJvbS5pc0VtcHR5KCkgJiYg
IW1fdG8uaXNFbXB0eSgpKSB8fCAoIW1fdG8uaXNFbXB0eSgpKSkgeyAvLyB0by9mcm9tLXRvIGFu
aW1hdGlvbgogICAgICAgICBpZiAoIW1fZnJvbS5pc0VtcHR5KCkpIC8vIGZyb20tdG8gYW5pbWF0
aW9uCiAgICAgICAgICAgICByZXR1cm4gRlJPTV9UT19BTklNQVRJT047CiAgICAgICAgIGVsc2UK
QEAgLTQ5Nyw2MCArNTI4LDEwIEBAIEVBbmltYXRpb25Nb2RlIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OmRldGUKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIEJZX0FOSU1BVElPTjsKICAg
ICB9Ci0gICAgZWxzZSBpZiAobV92YWx1ZXMpCi0gICAgICAgIHJldHVybiBWQUxVRVNfQU5JTUFU
SU9OOwogCiAgICAgcmV0dXJuIE5PX0FOSU1BVElPTjsKIH0KIAotc3RhdGljIGlubGluZSBWZWN0
b3I8ZG91YmxlPiBzdGFydFRpbWVzRm9yVmFsdWVzKGNvbnN0IFNWR1N0cmluZ0xpc3QqIHZhbHVl
cykKLXsKLSAgICAvLyBDYWxjdWxhdGUgdGhlIHJlbGF0aXZlIHRpbWUgcGVyY2VudGFnZXMgZm9y
IGVhY2ggJ2ZhZGUnLgotICAgIC8vIEV2ZW50dWFsbHkgdmFsdWUgc3BhY2luZyB3aWxsIG5lZWQg
dG8gdGFrZSBrZXlTcGxpbmVzIGludG8gYWNjb3VudAotICAgIHVuc2lnbmVkIGxvbmcgaXRlbXMg
PSB2YWx1ZXMtPm51bWJlck9mSXRlbXMoKTsKLSAgICBWZWN0b3I8ZG91YmxlPiBzdGFydFRpbWVz
KGl0ZW1zKTsKLSAgICBzdGFydFRpbWVzWzBdID0gMC4wOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPCBpdGVtczsgKytpKQotICAgICAgICBzdGFydFRpbWVzW2ldID0gKCgoMi4wICogaSkp
IC8gKGl0ZW1zIC0gMSkpIC8gMi4wOwotICAgIHJldHVybiBzdGFydFRpbWVzOwotfQotCi1pbnQg
U1ZHQW5pbWF0aW9uRWxlbWVudDo6Y2FsY3VsYXRlQ3VycmVudFZhbHVlSXRlbShkb3VibGUgdGlt
ZVBlcmNlbnRhZ2UpCi17Ci0gICAgaWYgKCFtX3ZhbHVlcykKLSAgICAgICAgcmV0dXJuIC0xOwot
ICAgIAotICAgIHVuc2lnbmVkIGxvbmcgaXRlbXMgPSBtX3ZhbHVlcy0+bnVtYmVyT2ZJdGVtcygp
OwotICAgIFZlY3Rvcjxkb3VibGU+IHN0YXJ0VGltZXMgPSBzdGFydFRpbWVzRm9yVmFsdWVzKG1f
dmFsdWVzLmdldCgpKTsKLQotICAgIGludCBpdGVtQnlQZXJjZW50YWdlID0gLTE7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zIC0gMTsgKytpKSB7Ci0gICAgICAgIGlmICh0aW1l
UGVyY2VudGFnZSA+PSBzdGFydFRpbWVzW2ldICYmIHRpbWVQZXJjZW50YWdlIDw9IHN0YXJ0VGlt
ZXNbaSArIDFdKSB7Ci0gICAgICAgICAgICBpdGVtQnlQZXJjZW50YWdlID0gaTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGl0ZW1CeVBlcmNlbnRh
Z2U7Ci19Ci0KLWRvdWJsZSBTVkdBbmltYXRpb25FbGVtZW50OjpjYWxjdWxhdGVSZWxhdGl2ZVRp
bWVQZXJjZW50YWdlKGRvdWJsZSB0aW1lUGVyY2VudGFnZSwgaW50IGN1cnJlbnRJdGVtKQotewot
ICAgIGlmIChjdXJyZW50SXRlbSA9PSAtMSB8fCAhbV92YWx1ZXMpCi0gICAgICAgIHJldHVybiAw
LjA7Ci0KLSAgICBWZWN0b3I8ZG91YmxlPiBzdGFydFRpbWVzID0gc3RhcnRUaW1lc0ZvclZhbHVl
cyhtX3ZhbHVlcy5nZXQoKSk7Ci0KLSAgICBkb3VibGUgYmVnaW5UaW1lUGVyY2VudGFnZSA9IHN0
YXJ0VGltZXNbY3VycmVudEl0ZW1dOwotICAgIGRvdWJsZSBlbmRUaW1lUGVyY2VudGFnZSA9IHN0
YXJ0VGltZXNbY3VycmVudEl0ZW0gKyAxXTsKLQotICAgIGlmICgoZW5kVGltZVBlcmNlbnRhZ2Ug
LSBiZWdpblRpbWVQZXJjZW50YWdlKSA9PSAwLjApCi0gICAgICAgIHJldHVybiAwLjA7Ci0KLSAg
ICByZXR1cm4gKCh0aW1lUGVyY2VudGFnZSAtIGJlZ2luVGltZVBlcmNlbnRhZ2UpIC8KLSAgICAg
ICAgICAgIChlbmRUaW1lUGVyY2VudGFnZSAtIGJlZ2luVGltZVBlcmNlbnRhZ2UpKTsKLX0KLQog
ZG91YmxlIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnJlcGVhdGlvbnMoKSBjb25zdAogewogICAgIHJl
dHVybiBtX3JlcGV0aXRpb25zOwpAQCAtNTkzLDQ0ICs1NzQsMTU2IEBAIHN0YXRpYyBkb3VibGUg
Y2FsY3VsYXRlVGltZVBlcmNlbnRhZ2UoZG8KICAgICByZXR1cm4gcGVyY2VudGFnZTsKIH0KIAot
dm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpoYW5kbGVUaW1lckV2ZW50KGRvdWJsZSB0aW1lUGVy
Y2VudGFnZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RQZXJjZW50YWdlUGFzdEZvcktleVNw
bGluZXMoY29uc3QgVmVjdG9yPFNWR0FuaW1hdGlvbkVsZW1lbnQ6OktleVNwbGluZT4mIGtleVNw
bGluZXMsIHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0JiBwZXJjZW50YWdlUGFzdCkKK3sKKyAg
ICBjb25zdCBTVkdBbmltYXRpb25FbGVtZW50OjpLZXlTcGxpbmUmIGtleVNwbGluZSA9IGtleVNw
bGluZXNbdmFsdWVJbmRleF07CisgICAgUGF0aCBwYXRoOworICAgIHBhdGgubW92ZVRvKEZsb2F0
UG9pbnQoKSk7CisgICAgcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKGtleVNwbGluZS5jb250cm9sMSwg
a2V5U3BsaW5lLmNvbnRyb2wyLCBGbG9hdFBvaW50KDEuMGYsIDEuMGYpKTsKKyAgICBib29sIG9r
ID0gZmFsc2U7CisgICAgRmxvYXRQb2ludCBzcGxpbmVQb2ludCA9IHBhdGgucG9pbnRBdExlbmd0
aChwZXJjZW50YWdlUGFzdCwgb2spOworICAgIGlmIChvaykKKyAgICAgICAgcGVyY2VudGFnZVBh
c3QgKj0gc3BsaW5lUG9pbnQueSgpOworfQorCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnZh
bHVlSW5kZXhBbmRQZXJjZW50YWdlUGFzdEZvckRpc3RhbmNlKGZsb2F0IGRpc3RhbmNlUGVyY2Vu
dGFnZSwgdW5zaWduZWQmIHZhbHVlSW5kZXgsIGZsb2F0JiBwZXJjZW50YWdlUGFzdCkKK3sKKyAg
ICAvLyBVbnNwZWNpZmllZDogYW5pbWF0aW9uIGVsZW1lbnRzIHdoaWNoIGRvIG5vdCBzdXBwb3J0
IENBTENNT0RFX1BBQ0VELCB3ZSBqdXN0IGFsd2F5cyBzaG93IHRoZSBmaXJzdCB2YWx1ZQorICAg
IHZhbHVlSW5kZXggPSAwOworICAgIHBlcmNlbnRhZ2VQYXN0ID0gMDsKK30KKworZmxvYXQgU1ZH
QW5pbWF0aW9uRWxlbWVudDo6Y2FsY3VsYXRlVG90YWxEaXN0YW5jZSgpCit7CisgICAgcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVWYWx1ZUluZGV4QW5kUGVyY2Vu
dGFnZVBhc3RGb3JLZXlUaW1lcyhmbG9hdCBlbGFwc2VkVGltZSwgY29uc3QgVmVjdG9yPGZsb2F0
PiYga2V5VGltZXMsIHVuc2lnbmVkJiB2YWx1ZUluZGV4LCBmbG9hdCYgcGVyY2VudGFnZVBhc3Qp
Cit7CisgICAgYm9vbCBmb3VuZEtleVRpbWUgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBrZXlUaW1l
c0NvdW50TWludXNPbmUgPSBrZXlUaW1lcy5zaXplKCk7CisgICAgZm9yICh2YWx1ZUluZGV4ID0g
MDsgdmFsdWVJbmRleCA8IGtleVRpbWVzQ291bnRNaW51c09uZTsgdmFsdWVJbmRleCsrKSB7Cisg
ICAgICAgIGZsb2F0IGxhc3RLZXlUaW1lID0ga2V5VGltZXNbdmFsdWVJbmRleF07CisgICAgICAg
IGlmIChsYXN0S2V5VGltZSA+PSBlbGFwc2VkVGltZSkgeworICAgICAgICAgICAgZmxvYXQgbmV4
dEtleVRpbWUgPSBrZXlUaW1lc1t2YWx1ZUluZGV4ICsgMV07CisgICAgICAgICAgICBmbG9hdCBr
ZXlUaW1lU3BhbiA9IG5leHRLZXlUaW1lIC0gbGFzdEtleVRpbWU7CisgICAgICAgICAgICBmbG9h
dCB0aW1lU2luY2VMYXN0S2V5VGltZSA9IGVsYXBzZWRUaW1lIC0gbGFzdEtleVRpbWU7CisgICAg
ICAgICAgICBwZXJjZW50YWdlUGFzdCA9ICh0aW1lU2luY2VMYXN0S2V5VGltZSAvIGtleVRpbWVT
cGFuKTsKKyAgICAgICAgICAgIGZvdW5kS2V5VGltZSA9IHRydWU7CisgICAgICAgIH0KKyAgICB9
CisgICAgaWYgKCFmb3VuZEtleVRpbWUpIHsKKyAgICAgICAgdmFsdWVJbmRleCA9IGtleVRpbWVz
Q291bnRNaW51c09uZTsKKyAgICAgICAgcGVyY2VudGFnZVBhc3QgPSAwOworICAgIH0KK30KKwor
Ym9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc1ZhbGlkQW5pbWF0aW9uKCkgY29uc3QKK3sKKyAg
ICBFQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlID0gZGV0ZWN0QW5pbWF0aW9uTW9kZSgpOwor
ICAgIGlmICghaGFzVmFsaWRUYXJnZXQoKSB8fCAoYW5pbWF0aW9uTW9kZSA9PSBOT19BTklNQVRJ
T04pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGFuaW1hdGlvbk1vZGUgPT0gVkFM
VUVTX0FOSU1BVElPTikgeworICAgICAgICBpZiAoIW1fdmFsdWVzLnNpemUoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1fa2V5VGltZXMuc2l6ZSgpICYmIG1fdmFs
dWVzLnNpemUoKSAhPSBtX2tleVRpbWVzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKG1fa2V5U3BsaW5lcy5zaXplKCkgJiYgbV92YWx1ZXMuc2l6ZSgpICE9
IG1fa2V5U3BsaW5lcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNhbGN1bGF0
ZVZhbHVlSW5kZXhBbmRQZXJjZW50YWdlUGFzdChmbG9hdCBlbGFwc2VkVGltZSwgZmxvYXQgdGlt
ZVBlcmNlbnRhZ2UsIHVuc2lnbmVkJiB2YWx1ZUluZGV4LCBmbG9hdCYgcGVyY2VudGFnZVBhc3Qp
Cit7CisgICAgQVNTRVJUKGlzVmFsaWRBbmltYXRpb24oKSk7CisgICAgRUFuaW1hdGlvbk1vZGUg
YW5pbWF0aW9uTW9kZSA9IGRldGVjdEFuaW1hdGlvbk1vZGUoKTsKKyAgICAKKyAgICBib29sIGlz
VmFsdWVzQW5pbWF0aW9uID0gKGFuaW1hdGlvbk1vZGUgPT0gVkFMVUVTX0FOSU1BVElPTik7Cisg
ICAgZmxvYXQgdmFsdWVDb3VudCA9IGlzVmFsdWVzQW5pbWF0aW9uID8gbV92YWx1ZXMuc2l6ZSgp
IDogMjsgIAorICAgIGZsb2F0IHZhbHVlUGVyY2VudGFnZSA9IHZhbHVlQ291bnQgKiB0aW1lUGVy
Y2VudGFnZTsKKyAgICBpZiAoaXNWYWx1ZXNBbmltYXRpb24gJiYgKG1fa2V5VGltZXMuc2l6ZSgp
ID09IHZhbHVlQ291bnQpKSB7CisgICAgICAgIGNhbGN1bGF0ZVZhbHVlSW5kZXhBbmRQZXJjZW50
YWdlUGFzdEZvcktleVRpbWVzKGVsYXBzZWRUaW1lLCBtX2tleVRpbWVzLCB2YWx1ZUluZGV4LCBw
ZXJjZW50YWdlUGFzdCk7CisgICAgICAgIGlmIChtX2NhbGNNb2RlID09IENBTENNT0RFX1NQTElO
RSkKKyAgICAgICAgICAgIGFkanVzdFBlcmNlbnRhZ2VQYXN0Rm9yS2V5U3BsaW5lcyhtX2tleVNw
bGluZXMsIHZhbHVlSW5kZXgsIHBlcmNlbnRhZ2VQYXN0KTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBEZWZhdWx0LCBsaW5lYXIgYmVoYXZpb3IKKyAgICAgICAgZmxvYXQgZmxvYXRWYWx1ZUlu
ZGV4ID0gZmxvb3JmKHZhbHVlUGVyY2VudGFnZSk7CisgICAgICAgIHBlcmNlbnRhZ2VQYXN0ID0g
IHZhbHVlUGVyY2VudGFnZSAtIChmbG9hdFZhbHVlSW5kZXggLyB2YWx1ZUNvdW50KTsKKyAgICB9
CisgICAgCisgICAgaWYgKG1fY2FsY01vZGUgPT0gQ0FMQ01PREVfRElTQ1JFVEUpCisgICAgICAg
IHBlcmNlbnRhZ2VQYXN0ID0gMC4wZjsKKyAgICBlbHNlIGlmIChtX2NhbGNNb2RlID09IENBTENN
T0RFX1BBQ0VEKSB7CisgICAgICAgIC8vIGNhbGN1bGF0ZSB2YWx1ZSBwZXJjZW50YWdlIGJhc2Vk
IG9uIGRpc3RhbmNlIGluc3RlYWQgb2YgdGltZQorICAgICAgICBmbG9hdCB0b3RhbERpc3RhbmNl
ID0gY2FsY3VsYXRlVG90YWxEaXN0YW5jZSgpOworICAgICAgICBmbG9hdCBkaXN0YW5jZVBlcmNl
bnRhZ2UgPSB0b3RhbERpc3RhbmNlICogdGltZVBlcmNlbnRhZ2U7CisgICAgICAgIHZhbHVlSW5k
ZXhBbmRQZXJjZW50YWdlUGFzdEZvckRpc3RhbmNlKGRpc3RhbmNlUGVyY2VudGFnZSwgdmFsdWVJ
bmRleCwgcGVyY2VudGFnZVBhc3QpOworICAgIH0KK30KKworYm9vbCBTVkdBbmltYXRpb25FbGVt
ZW50Ojp1cGRhdGVBbmltYXRpb25CYXNlVmFsdWVGcm9tRWxlbWVudCgpCit7CisgICAgbV9iYXNl
VmFsdWUgPSB0YXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKCk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVt
ZW50KCkKK3sKKyAgICBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKG1fYW5pbWF0ZWRW
YWx1ZSk7Cit9CisKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aGFuZGxlVGltZXJFdmVudChk
b3VibGUgZWxhcHNlZFNlY29uZHMsIGRvdWJsZSB0aW1lUGVyY2VudGFnZSkKIHsKICAgICBpZiAo
IWNvbm5lY3RlZFRvVGltZXIoKSkgewogICAgICAgICBjb25uZWN0VGltZXIoKTsKLSAgICAgICAg
aGFuZGxlU3RhcnRDb25kaXRpb24oKTsgLy8gTmVlZCB0byBjaGVjayBib29sIHJldHVybiBpZiBh
ZGRpbmcgYW55dGhpbmcgYWZ0ZXIgdGhpcyBjYWxsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCi0gICAgaWYgKCF1cGRhdGVDdXJyZW50VmFsdWUodGltZVBlcmNlbnRhZ2UpKQotICAgICAg
ICByZXR1cm47CisvLyAgICBpZiAoaXNBY2N1bXVsYXRlZCgpICYmIHJlcGVhdGlvbnMoKSAhPSAw
LjApCisvLyAgICAgICAgYWNjdW11bGF0ZUZvclJlcGV0aXRpb25zKG1fcmVwZXRpdGlvbnMpOwor
ICAgIAorICAgIEVBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUgPSBkZXRlY3RBbmltYXRpb25N
b2RlKCk7CiAgICAgCi0gICAgaWYgKHRpbWVQZXJjZW50YWdlID09IDEuMCkgeworICAgIHVuc2ln
bmVkIHZhbHVlSW5kZXggPSAwOworICAgIGZsb2F0IHBlcmNlbnRhZ2VQYXN0ID0gMDsKKyAgICBp
ZiAoYW5pbWF0aW9uTW9kZSAhPSBUT19BTklNQVRJT04pCisgICAgICAgIGNhbGN1bGF0ZVZhbHVl
SW5kZXhBbmRQZXJjZW50YWdlUGFzdChlbGFwc2VkU2Vjb25kcywgdGltZVBlcmNlbnRhZ2UsIHZh
bHVlSW5kZXgsIHBlcmNlbnRhZ2VQYXN0KTsKKyAgICAgICAgCisgICAgY2FsY3VsYXRlRnJvbUFu
ZFRvVmFsdWVzKGFuaW1hdGlvbk1vZGUsIHZhbHVlSW5kZXgpOworICAgIAorICAgIHVwZGF0ZUFu
aW1hdGVkVmFsdWUoYW5pbWF0aW9uTW9kZSwgdGltZVBlcmNlbnRhZ2UsIHZhbHVlSW5kZXgsIHBl
cmNlbnRhZ2VQYXN0KTsKKyAgICAKKyAgICBpZiAodGltZVBlcmNlbnRhZ2UgPj0gMS4wKSB7CiAg
ICAgICAgIGlmICgobV9yZXBlYXRDb3VudCA+IDAgJiYgbV9yZXBldGl0aW9ucyA8IG1fcmVwZWF0
Q291bnQgLSAxKSB8fCBpc0luZGVmaW5pdGUobV9yZXBlYXRDb3VudCkpIHsKLSAgICAgICAgICAg
IHVwZGF0ZUxhc3RWYWx1ZVdpdGhDdXJyZW50KCk7CiAgICAgICAgICAgICBtX3JlcGV0aXRpb25z
Kys7CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGRp
c2Nvbm5lY3RUaW1lcigpOwotICAgICAgICByZXNldFZhbHVlcygpOyAgIAorICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIGRpc2Nvbm5lY3RUaW1lcigpOwogICAgIH0KIH0KIAotYm9vbCBTVkdB
bmltYXRpb25FbGVtZW50Ojp1cGRhdGVGb3JFbGFwc2VkU2Vjb25kcyhkb3VibGUgZWxhcHNlZFNl
Y29uZHMpCitib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVkVmFsdWVGb3JF
bGFwc2VkU2Vjb25kcyhkb3VibGUgZWxhcHNlZFNlY29uZHMpCiB7CisvLyAgICBpZiAoaXNTdG9w
cGVkKCkpIHsKKy8vICAgICAgICBpZiAobV9maWxsID09IEZJTExfRlJFRVpFKQorLy8gICAgICAg
ICAgICBlbGFwc2VkU2Vjb25kcyA9IG1fc3RvcHBlZFRpbWU7CisvLyAgICAgICAgZWxzZQorLy8g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisvLyAgICB9CisgICAgCiAgICAgLy8gVmFsaWRhdGUg
YW5pbWF0aW9uIHRpbWluZyBzZXR0aW5nczoKICAgICAvLyAjMSAoZHVyYXRpb24gPiAwKSAtPiBm
aW5lCiAgICAgLy8gIzIgKGR1cmF0aW9uIDw9IDAuMCAmJiBlbmQgPiAwKSAtPiBmaW5lCi0gICAg
CiAgICAgaWYgKChtX3NpbXBsZUR1cmF0aW9uIDw9IDAuMCAmJiBtX2VuZCA8PSAwLjApIHx8IChp
c0luZGVmaW5pdGUobV9zaW1wbGVEdXJhdGlvbikgJiYgbV9lbmQgPD0gMC4wKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOyAvLyBJZ25vcmUgZHVyPSIwIiBvciBkdXI9Ii1uZWciCiAgICAgCiAgICAg
ZmxvYXQgcGVyY2VudGFnZSA9IGNhbGN1bGF0ZVRpbWVQZXJjZW50YWdlKGVsYXBzZWRTZWNvbmRz
LCBtX2JlZ2luLCBtX2VuZCwgbV9zaW1wbGVEdXJhdGlvbiwgbV9yZXBldGl0aW9ucyk7CiAgICAg
CiAgICAgaWYgKHBlcmNlbnRhZ2UgPD0gMS4wIHx8IGNvbm5lY3RlZFRvVGltZXIoKSkKLSAgICAg
ICAgaGFuZGxlVGltZXJFdmVudChwZXJjZW50YWdlKTsKKyAgICAgICAgaGFuZGxlVGltZXJFdmVu
dChlbGFwc2VkU2Vjb25kcywgcGVyY2VudGFnZSk7CiAgICAgCi0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIHRydWU7IC8vIHZhbHVlIHdhcyB1cGRhdGVkLCBuZWVkIHRvIGFwcGx5CiB9CiAK
IH0KSW5kZXg6IGtzdmcyL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3N2ZzIvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gMTkwOTIpCisrKyBrc3Zn
Mi9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVu
dCgpIGNvbnN0OwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkVGFyZ2V0
KCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNWYWxpZEFuaW1hdGlvbigpIGNvbnN0OwogICAgICAg
ICAKICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0
czo6aXNWYWxpZCgpOyB9CiAKQEAgLTEwMCwxNiArMTAxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBjbG9zZVJlbmRlcmVyKCk7CiAKLSAgICAgICAgLy8g
SGVscGVycwotICAgICAgICBib29sIHVwZGF0ZUZvckVsYXBzZWRTZWNvbmRzKGRvdWJsZSk7Ci0g
ICAgICAgIHZvaWQgaGFuZGxlVGltZXJFdmVudChkb3VibGUgdGltZVBlcmNlbnRhZ2UpOwotCi0g
ICAgICAgIHN0YXRpYyBkb3VibGUgcGFyc2VDbG9ja1ZhbHVlKGNvbnN0IFN0cmluZyYpOwotCi0g
ICAgICAgIFN0cmluZyB0YXJnZXRBdHRyaWJ1dGUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRU
YXJnZXRBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgc2V0
VGFyZ2V0QXR0cmlidXRlKFNWR0VsZW1lbnQqIHRhcmdldCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBFQXR0cmlidXRlVHlwZSA9IEFUVFJJQlVURVRZUEVfQVVUTyk7
CisgICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRpb25CYXNlVmFsdWVGcm9tRWxlbWVu
dCgpOworICAgICAgICBib29sIHVwZGF0ZUFuaW1hdGVkVmFsdWVGb3JFbGFwc2VkU2Vjb25kcyhk
b3VibGUgZWxhcHNlZFNlY29uZHMpOworICAgICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlBbmltYXRl
ZFZhbHVlVG9FbGVtZW50KCk7CiAKICAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUoKSBjb25z
dDsKIApAQCAtMTE5LDI0ICsxMTMsMzIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBi
b29sIGlzQWRkaXRpdmUoKSBjb25zdDsKICAgICAgICAgYm9vbCBpc0FjY3VtdWxhdGVkKCkgY29u
c3Q7CiAKLSAgICAgICAgRUFuaW1hdGlvbk1vZGUgZGV0ZWN0QW5pbWF0aW9uTW9kZSgpIGNvbnN0
OwotCi0gICAgICAgIGludCBjYWxjdWxhdGVDdXJyZW50VmFsdWVJdGVtKGRvdWJsZSB0aW1lUGVy
Y2VudGFnZSk7Ci0gICAgICAgIGRvdWJsZSBjYWxjdWxhdGVSZWxhdGl2ZVRpbWVQZXJjZW50YWdl
KGRvdWJsZSB0aW1lUGVyY2VudGFnZSwgaW50IGN1cnJlbnRJdGVtKTsKLQogICAgICAgICBkb3Vi
bGUgcmVwZWF0aW9ucygpIGNvbnN0OwogICAgICAgICBzdGF0aWMgYm9vbCBpc0luZGVmaW5pdGUo
ZG91YmxlIHZhbHVlKTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgbXV0YWJsZSBTVkdFbGVt
ZW50KiBtX3RhcmdldEVsZW1lbnQ7CiAgICAgICAgIAorICAgICAgICBFQW5pbWF0aW9uTW9kZSBk
ZXRlY3RBbmltYXRpb25Nb2RlKCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgZG91
YmxlIHBhcnNlQ2xvY2tWYWx1ZShjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgc3RhdGljIHZvaWQg
c2V0VGFyZ2V0QXR0cmlidXRlKFNWR0VsZW1lbnQqIHRhcmdldCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFQXR0cmlidXRlVHlwZSA9IEFUVFJJQlVURVRZUEVfQVVU
Tyk7CisgICAgICAgIAorICAgICAgICBTdHJpbmcgdGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1
ZSgpIGNvbnN0OworICAgICAgICB2b2lkIHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUo
Y29uc3QgU3RyaW5nJik7CisgICAgICAgIAogICAgICAgICB2b2lkIGNvbm5lY3RUaW1lcigpOwog
ICAgICAgICB2b2lkIGRpc2Nvbm5lY3RUaW1lcigpOworCisgICAgICAgIHZpcnR1YWwgZmxvYXQg
Y2FsY3VsYXRlVG90YWxEaXN0YW5jZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVJbmRl
eEFuZFBlcmNlbnRhZ2VQYXN0Rm9yRGlzdGFuY2UoZmxvYXQgZGlzdGFuY2VQZXJjZW50YWdlLCB1
bnNpZ25lZCYgdmFsdWVJbmRleCwgZmxvYXQmIHBlcmNlbnRhZ2VQYXN0KTsKKyAgICAgICAgCisg
ICAgICAgIHZvaWQgY2FsY3VsYXRlVmFsdWVJbmRleEFuZFBlcmNlbnRhZ2VQYXN0KGZsb2F0IGVs
YXBzZWRUaW1lLCBmbG9hdCB0aW1lUGVyY2VudGFnZSwgdW5zaWduZWQmIHZhbHVlSW5kZXgsIGZs
b2F0JiBwZXJjZW50YWdlUGFzdCk7CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFsIGJvb2wgdXBk
YXRlQ3VycmVudFZhbHVlKGRvdWJsZSB0aW1lUGVyY2VudGFnZSkgPSAwOwotICAgICAgICB2aXJ0
dWFsIGJvb2wgaGFuZGxlU3RhcnRDb25kaXRpb24oKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVMYXN0VmFsdWVXaXRoQ3VycmVudCgpIHsgfSAvLyBTZWUgYnVnIDEyMDc1IGZvciBl
eHBsYWluYXRpb24gb2Ygd2h5IHRoaXMgaXMgYSBiYWQgQVBJCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCByZXNldFZhbHVlcygpIHsgfQorICAgICAgICB2b2lkIGhhbmRsZVRpbWVyRXZlbnQoZG91Ymxl
IGVsYXBzZWRTZWNvbmRzLCBkb3VibGUgdGltZVBlcmNlbnRhZ2UpOworICAgICAgICAKKyAgICAg
ICAgdmlydHVhbCBib29sIHVwZGF0ZUFuaW1hdGVkVmFsdWUoRUFuaW1hdGlvbk1vZGUsIGZsb2F0
IHRpbWVQZXJjZW50YWdlLCB1bnNpZ25lZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJjZW50YWdlUGFz
dCkgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVB
bmltYXRpb25Nb2RlLCB1bnNpZ25lZCB2YWx1ZUluZGV4KSA9IDA7CiAgICAgICAgIAogICAgICAg
ICBzdGF0aWMgdm9pZCBwYXJzZUtleU51bWJlcnMoVmVjdG9yPGZsb2F0PiYga2V5TnVtYmVycywg
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIHBhcnNlQmVnaW5PckVu
ZFZhbHVlKGRvdWJsZSYgbnVtYmVyLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKQEAgLTE2Miw2ICsx
NjQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmluZyBtX2hyZWY7CiAgICAg
ICAgIFN0cmluZyBtX3JlcGVhdER1cjsKICAgICAgICAgU3RyaW5nIG1fYXR0cmlidXRlTmFtZTsK
KyAgICAgICAgCisgICAgICAgIFN0cmluZyBtX2Jhc2VWYWx1ZTsKKyAgICAgICAgU3RyaW5nIG1f
YW5pbWF0ZWRWYWx1ZTsKIAogICAgICAgICBkb3VibGUgbV9tYXg7CiAgICAgICAgIGRvdWJsZSBt
X21pbjsKQEAgLTE3MSw3ICsxNzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGRv
dWJsZSBtX3JlcGV0aXRpb25zOwogICAgICAgICBkb3VibGUgbV9yZXBlYXRDb3VudDsKIAotICAg
ICAgICBSZWZQdHI8U1ZHU3RyaW5nTGlzdD4gbV92YWx1ZXM7CisgICAgICAgIFZlY3RvcjxTdHJp
bmc+IG1fdmFsdWVzOwogICAgICAgICBWZWN0b3I8ZmxvYXQ+IG1fa2V5VGltZXM7CiAgICAgICAg
IAogICAgICAgICBzdHJ1Y3QgS2V5U3BsaW5lIHsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdTZXRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHU2V0RWxlbWVudC5jcHAJKHJldmlz
aW9uIDE5MDkyKQorKysga3N2ZzIvc3ZnL1NWR1NldEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSwzMCArMzksNiBAQCBTVkdTZXRFbGVtZW50Ojp+U1ZHU2V0RWxlbWVudCgpCiB7CiB9
CiAKLWJvb2wgU1ZHU2V0RWxlbWVudDo6dXBkYXRlQ3VycmVudFZhbHVlKGRvdWJsZSB0aW1lUGVy
Y2VudGFnZSkKLXsKLSAgICBpZiAobV9zYXZlZFRvLmlzRW1wdHkoKSkgewotICAgICAgICBtX3Nh
dmVkVG8gPSB0YXJnZXRBdHRyaWJ1dGUoKTsKLSAgICAgICAgc2V0VGFyZ2V0QXR0cmlidXRlKG1f
dG8pOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgU1ZHU2V0RWxlbWVudDo6
aGFuZGxlU3RhcnRDb25kaXRpb24oKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNW
R1NldEVsZW1lbnQ6OmhhbmRsZUVuZENvbmRpdGlvbigpCi17Ci0gICAgZGlzY29ubmVjdFRpbWVy
KCk7Ci0gICAgCi0gICAgaWYgKCFpc0Zyb3plbigpKQotICAgICAgICBzZXRUYXJnZXRBdHRyaWJ1
dGUobV9zYXZlZFRvKTsKLSAgICAKLSAgICBtX3NhdmVkVG8gPSBTdHJpbmcoKTsKLX0KLQogfQog
CiAvLyB2aW06dHM9NDpub2V0CkluZGV4OiBrc3ZnMi9zdmcvU1ZHU2V0RWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdTZXRFbGVtZW50LmgJKHJldmlzaW9uIDE5MDkyKQorKysg
a3N2ZzIvc3ZnL1NWR1NldEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOSArMzcsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZQogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBjb25z
dCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KICAg
ICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVDdXJyZW50VmFsdWUoZG91YmxlIHRp
bWVQZXJjZW50YWdlKTsKLSAgICAgICAgdmlydHVhbCBib29sIGhhbmRsZVN0YXJ0Q29uZGl0aW9u
KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFbmRDb25kaXRpb24oKTsKKyAgICAgICAg
dmlydHVhbCBib29sIHVwZGF0ZUFuaW1hdGVkVmFsdWUoRUFuaW1hdGlvbk1vZGUsIGZsb2F0IHRp
bWVQZXJjZW50YWdlLCB1bnNpZ25lZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJjZW50YWdlUGFzdCkg
eyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRv
VmFsdWVzKEVBbmltYXRpb25Nb2RlLCB1bnNpZ25lZCB2YWx1ZUluZGV4KSB7IHJldHVybiB0cnVl
OyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBTdHJpbmcgbV9zYXZlZFRvOwpJbmRleDoga3N2
ZzIvc3ZnL1NWR1RyYW5zZm9ybS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1RyYW5z
Zm9ybS5jcHAJKHJldmlzaW9uIDE5MDkyKQorKysga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgYm9vbCBTVkdUcmFuc2Zvcm06OmlzVmFs
aWQoKQogICAgIHJldHVybiAobV90eXBlICE9IFNWR19UUkFOU0ZPUk1fVU5LTk9XTik7CiB9CiAK
LXVuc2lnbmVkIHNob3J0IFNWR1RyYW5zZm9ybTo6dHlwZSgpIGNvbnN0CitTVkdUcmFuc2Zvcm06
OlNWR1RyYW5zZm9ybVR5cGUgU1ZHVHJhbnNmb3JtOjp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV90eXBlOwogfQpAQCAtODUsNiArODUsMTEgQEAgdm9pZCBTVkdUcmFuc2Zvcm06OnNldFRy
YW5zbGF0ZShkb3VibGUgdAogICAgIG1fbWF0cml4LnRyYW5zbGF0ZSh0eCwgdHkpOwogfQogCitG
bG9hdFBvaW50IFNWR1RyYW5zZm9ybTo6dHJhbnNsYXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
RmxvYXRQb2ludChtX21hdHJpeC5lKCksIG1fbWF0cml4LmYoKSk7Cit9CisKIHZvaWQgU1ZHVHJh
bnNmb3JtOjpzZXRTY2FsZShkb3VibGUgc3gsIGRvdWJsZSBzeSkKIHsKICAgICBtX3R5cGUgPSBT
VkdfVFJBTlNGT1JNX1NDQUxFOwpAQCAtOTQsNiArOTksMTEgQEAgdm9pZCBTVkdUcmFuc2Zvcm06
OnNldFNjYWxlKGRvdWJsZSBzeCwgZAogICAgIG1fbWF0cml4LnNjYWxlKHN4LCBzeSk7CiB9CiAK
K0Zsb2F0U2l6ZSBTVkdUcmFuc2Zvcm06OnNjYWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmxv
YXRTaXplKG1fbWF0cml4LmEoKSwgbV9tYXRyaXguZCgpKTsKK30KKwogdm9pZCBTVkdUcmFuc2Zv
cm06OnNldFJvdGF0ZShkb3VibGUgYW5nbGUsIGRvdWJsZSBjeCwgZG91YmxlIGN5KQogewogICAg
IG1fdHlwZSA9IFNWR19UUkFOU0ZPUk1fUk9UQVRFOwpAQCAtMTEyLDcgKzEyMiw3IEBAIHZvaWQg
U1ZHVHJhbnNmb3JtOjpzZXRTa2V3WChkb3VibGUgYW5nbGUKICAgICBtX2FuZ2xlID0gYW5nbGU7
CiAKICAgICBtX21hdHJpeC5yZXNldCgpOwotICAgIG1fbWF0cml4LnNoZWFyKHRhbihTVkdBbmds
ZTo6dG9yYWQoYW5nbGUpKSwgMC4wZik7CisgICAgbV9tYXRyaXguc2tld1goYW5nbGUpOwogfQog
CiB2b2lkIFNWR1RyYW5zZm9ybTo6c2V0U2tld1koZG91YmxlIGFuZ2xlKQpAQCAtMTIxLDcgKzEz
MSw3IEBAIHZvaWQgU1ZHVHJhbnNmb3JtOjpzZXRTa2V3WShkb3VibGUgYW5nbGUKICAgICBtX2Fu
Z2xlID0gYW5nbGU7CiAKICAgICBtX21hdHJpeC5yZXNldCgpOwotICAgIG1fbWF0cml4LnNoZWFy
KDAuMGYsIHRhbihTVkdBbmdsZTo6dG9yYWQoYW5nbGUpKSk7CisgICAgbV9tYXRyaXguc2tld1ko
YW5nbGUpOwogfQogCiAvLyB2aW06dHM9NDpub2V0CkluZGV4OiBrc3ZnMi9zdmcvU1ZHVHJhbnNm
b3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybS5oCShyZXZpc2lvbiAx
OTA5MikKKysrIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtMjks
NiArMjksOSBAQAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIAorICAgIGNsYXNzIEZsb2F0UG9pbnQ7CisgICAgY2xhc3MgRmxvYXRTaXplOwogCiAg
ICAgY2xhc3MgU1ZHVHJhbnNmb3JtIHsKICAgICBwdWJsaWM6CkBAIC00Niw3ICs0OSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgZXhwbGljaXQgU1ZHVHJhbnNmb3JtKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYpOwogICAgICAgICB2aXJ0dWFsIH5TVkdUcmFuc2Zvcm0oKTsKICAgICAg
ICAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlKCkgY29uc3Q7CisgICAgICAg
IFNWR1RyYW5zZm9ybVR5cGUgdHlwZSgpIGNvbnN0OwogCiAgICAgICAgIEFmZmluZVRyYW5zZm9y
bSBtYXRyaXgoKSBjb25zdDsKICAgICAKQEAgLTU5LDE0ICs2MiwyOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZvaWQgc2V0U2tld1goZG91YmxlIGFuZ2xlKTsKICAgICAgICAgdm9p
ZCBzZXRTa2V3WShkb3VibGUgYW5nbGUpOwogICAgICAgICAKKyAgICAgICAgLy8gSW50ZXJuYWwg
dXNlIG9ubHkgKGFuaW1hdGlvbiBzeXN0ZW0pCisgICAgICAgIEZsb2F0UG9pbnQgdHJhbnNsYXRl
KCkgY29uc3Q7CisgICAgICAgIEZsb2F0U2l6ZSBzY2FsZSgpIGNvbnN0OworICAgICAgICAKICAg
ICAgICAgYm9vbCBpc1ZhbGlkKCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICB1bnNpZ25lZCBz
aG9ydCBtX3R5cGU7CisgICAgICAgIFNWR1RyYW5zZm9ybVR5cGUgbV90eXBlOwogICAgICAgICBk
b3VibGUgbV9hbmdsZTsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1fbWF0cml4OwogICAgIH07
CiAKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNWR1RyYW5zZm9ybSYgYSwgY29u
c3QgU1ZHVHJhbnNmb3JtJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEudHlwZSgpID09IGIu
dHlwZSgpICYmIGEuYW5nbGUoKSA9PSBiLmFuZ2xlKCkgJiYgYS5tYXRyaXgoKSA9PSBiLm1hdHJp
eCgpOworICAgIH0KKyAgICAKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNWR1Ry
YW5zZm9ybSYgYSwgY29uc3QgU1ZHVHJhbnNmb3JtJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJu
ICEoYSA9PSBiKTsKKyAgICB9CisgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBTVkdfU1VQUE9SVApJbmRleDoga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybURpc3RhbmNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwCShyZXZp
c2lvbiAwKQorKysga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybURpc3RhbmNlLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyNTggQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgCisgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBw
cm9qZWN0CisgCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIAorIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgQm9z
dG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lm
ZGVmIFNWR19TVVBQT1JUCisjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtRGlzdGFuY2UuaCIKKworI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJT
VkdUcmFuc2Zvcm0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorU1ZHVHJhbnNmb3Jt
RGlzdGFuY2U6OlNWR1RyYW5zZm9ybURpc3RhbmNlKCkKKyAgICA6IG1fdHlwZShTVkdUcmFuc2Zv
cm06OlNWR19UUkFOU0ZPUk1fVU5LTk9XTikKKyAgICAsIG1fYW5nbGUoMCkKK3sKK30KKworU1ZH
VHJhbnNmb3JtRGlzdGFuY2U6OlNWR1RyYW5zZm9ybURpc3RhbmNlKFNWR1RyYW5zZm9ybTo6U1ZH
VHJhbnNmb3JtVHlwZSB0eXBlLCBkb3VibGUgYW5nbGUsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtKQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX2FuZ2xlKGFuZ2xlKQorICAg
ICwgbV90cmFuc2Zvcm0odHJhbnNmb3JtKQoreworfQorCitTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6
U1ZHVHJhbnNmb3JtRGlzdGFuY2UoY29uc3QgU1ZHVHJhbnNmb3JtJiBmcm9tU1ZHVHJhbnNmb3Jt
LCBjb25zdCBTVkdUcmFuc2Zvcm0mIHRvU1ZHVHJhbnNmb3JtKQorICAgIDogbV90eXBlKGZyb21T
VkdUcmFuc2Zvcm0udHlwZSgpKQorICAgICwgbV9hbmdsZSgwKQoreworICAgIEFTU0VSVChtX3R5
cGUgPT0gdG9TVkdUcmFuc2Zvcm0udHlwZSgpKTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fdHlwZSkg
eworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1VOS05PV046CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg6Cisg
ICAgICAgIC8vIEZJWE1FOiBuZWVkIHRvIGJlIGFibGUgdG8gc3VidHJhY3QgdG8gbWF0cmljZXMK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1JP
VEFURToKKyAgICAgICAgbV9hbmdsZSA9IHRvU1ZHVHJhbnNmb3JtLmFuZ2xlKCkgLSBmcm9tU1ZH
VHJhbnNmb3JtLmFuZ2xlKCk7CisgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgIGNhc2UgU1ZH
VHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURToKKyAgICB7CisgICAgICAgIEZsb2F0
U2l6ZSB0cmFuc2xhdGlvbkRpc3RhbmNlID0gdG9TVkdUcmFuc2Zvcm0udHJhbnNsYXRlKCkgLSBm
cm9tU1ZHVHJhbnNmb3JtLnRyYW5zbGF0ZSgpOworICAgICAgICBtX3RyYW5zZm9ybS50cmFuc2xh
dGUodHJhbnNsYXRpb25EaXN0YW5jZS53aWR0aCgpLCB0cmFuc2xhdGlvbkRpc3RhbmNlLmhlaWdo
dCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZH
X1RSQU5TRk9STV9TQ0FMRToKKyAgICB7CisgICAgICAgIGZsb2F0IHNjYWxlWCA9IGZyb21TVkdU
cmFuc2Zvcm0uc2NhbGUoKS53aWR0aCgpICE9IDAgPyB0b1NWR1RyYW5zZm9ybS5zY2FsZSgpLndp
ZHRoKCkgLyBmcm9tU1ZHVHJhbnNmb3JtLnNjYWxlKCkud2lkdGgoKSA6IHRvU1ZHVHJhbnNmb3Jt
LnNjYWxlKCkud2lkdGgoKSAvIDAuMDAwMDE7CisgICAgICAgIGZsb2F0IHNjYWxlWSA9IGZyb21T
VkdUcmFuc2Zvcm0uc2NhbGUoKS5oZWlnaHQoKSAhPSAwID8gdG9TVkdUcmFuc2Zvcm0uc2NhbGUo
KS5oZWlnaHQoKSAvIGZyb21TVkdUcmFuc2Zvcm0uc2NhbGUoKS5oZWlnaHQoKSA6IHRvU1ZHVHJh
bnNmb3JtLnNjYWxlKCkuaGVpZ2h0KCkgLyAwLjAwMDAxOworICAgICAgICBtX3RyYW5zZm9ybS5z
Y2FsZShzY2FsZVgsIHNjYWxlWSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBT
VkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0tFV1g6CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06
OlNWR19UUkFOU0ZPUk1fU0tFV1k6CisgICAgICAgIG1fYW5nbGUgPSB0b1NWR1RyYW5zZm9ybS5h
bmdsZSgpIC0gZnJvbVNWR1RyYW5zZm9ybS5hbmdsZSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorfQorCitTVkdUcmFuc2Zvcm1EaXN0YW5jZSBTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6c2NhbGVk
RGlzdGFuY2UoZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3R5cGUp
IHsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOOgorICAgICAg
ICByZXR1cm4gU1ZHVHJhbnNmb3JtRGlzdGFuY2UoKTsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6
U1ZHX1RSQU5TRk9STV9ST1RBVEU6CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZP
Uk1fU0NBTEU6CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fTUFUUklYOgor
ICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURToKKyAgICAgICAg
cmV0dXJuIFNWR1RyYW5zZm9ybURpc3RhbmNlKG1fdHlwZSwgbV9hbmdsZSAqIHNjYWxlRmFjdG9y
LCBBZmZpbmVUcmFuc2Zvcm0obV90cmFuc2Zvcm0pLnNjYWxlKHNjYWxlRmFjdG9yKSk7CisgICAg
Y2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0tFV1g6CisgICAgY2FzZSBTVkdUcmFu
c2Zvcm06OlNWR19UUkFOU0ZPUk1fU0tFV1k6CisgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1E
aXN0YW5jZShtX3R5cGUsIG1fYW5nbGUgKiBzY2FsZUZhY3RvciwgQWZmaW5lVHJhbnNmb3JtKCkp
OworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU1ZH
VHJhbnNmb3JtRGlzdGFuY2UoKTsKK30KKworU1ZHVHJhbnNmb3JtIFNWR1RyYW5zZm9ybURpc3Rh
bmNlOjphZGRTVkdUcmFuc2Zvcm1zKGNvbnN0IFNWR1RyYW5zZm9ybSYgZmlyc3QsIGNvbnN0IFNW
R1RyYW5zZm9ybSYgc2Vjb25kKQoreworICAgIEFTU0VSVChmaXJzdC50eXBlKCkgPT0gc2Vjb25k
LnR5cGUoKSk7CisgICAgCisgICAgU1ZHVHJhbnNmb3JtIHRyYW5zZm9ybTsKKyAgICAKKyAgICBz
d2l0Y2ggKGZpcnN0LnR5cGUoKSkgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNG
T1JNX1VOS05PV046CisgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm0oKTsKKyAgICBjYXNlIFNW
R1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9ST1RBVEU6CisgICAgeworICAgICAgICAvLyBGSVhN
RTogSSdtIG5vdCBzdXJlIHRoYXQgdGhlIHRyYW5zbGF0aW9uIGlzIGNvcnJlY3QgaGVyZQorICAg
ICAgICBmbG9hdCBkeCA9IGZpcnN0LnRyYW5zbGF0ZSgpLngoKSArIHNlY29uZC50cmFuc2xhdGUo
KS54KCk7CisgICAgICAgIGZsb2F0IGR5ID0gZmlyc3QudHJhbnNsYXRlKCkueSgpICsgc2Vjb25k
LnRyYW5zbGF0ZSgpLnkoKTsKKyAgICAgICAgdHJhbnNmb3JtLnNldFJvdGF0ZShmaXJzdC5hbmds
ZSgpICsgc2Vjb25kLmFuZ2xlKCksIGR4LCBkeSk7CisgICAgICAgIHJldHVybiB0cmFuc2Zvcm07
CisgICAgfQorICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX01BVFJJWDoKKyAg
ICAgICAgdHJhbnNmb3JtLnNldE1hdHJpeChmaXJzdC5tYXRyaXgoKSAqIHNlY29uZC5tYXRyaXgo
KSk7CisgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNW
R19UUkFOU0ZPUk1fVFJBTlNMQVRFOgorICAgIHsKKyAgICAgICAgZmxvYXQgZHggPSBmaXJzdC50
cmFuc2xhdGUoKS54KCkgKyBzZWNvbmQudHJhbnNsYXRlKCkueCgpOworICAgICAgICBmbG9hdCBk
eSA9IGZpcnN0LnRyYW5zbGF0ZSgpLnkoKSArIHNlY29uZC50cmFuc2xhdGUoKS55KCk7CisgICAg
ICAgIHRyYW5zZm9ybS5zZXRUcmFuc2xhdGUoZHgsIGR5KTsKKyAgICAgICAgcmV0dXJuIHRyYW5z
Zm9ybTsKKyAgICB9CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6
CisgICAgeworICAgICAgICBGbG9hdFNpemUgc2NhbGUgPSBmaXJzdC5zY2FsZSgpICsgc2Vjb25k
LnNjYWxlKCk7CisgICAgICAgIHRyYW5zZm9ybS5zZXRTY2FsZShzY2FsZS53aWR0aCgpLCBzY2Fs
ZS5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CisgICAgfQorICAgIGNhc2Ug
U1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NLRVdYOgorICAgICAgICB0cmFuc2Zvcm0uc2V0
U2tld1goZmlyc3QuYW5nbGUoKSArIHNlY29uZC5hbmdsZSgpKTsKKyAgICAgICAgcmV0dXJuIHRy
YW5zZm9ybTsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TS0VXWToKKyAg
ICAgICAgdHJhbnNmb3JtLnNldFNrZXdZKGZpcnN0LmFuZ2xlKCkgKyBzZWNvbmQuYW5nbGUoKSk7
CisgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CisgICAgfQorICAgIAorICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBTVkdUcmFuc2Zvcm0oKTsKK30KKwordm9pZCBTVkdUcmFu
c2Zvcm1EaXN0YW5jZTo6YWRkU1ZHVHJhbnNmb3JtKGNvbnN0IFNWR1RyYW5zZm9ybSYgdHJhbnNm
b3JtLCBib29sIGFic29sdXRlVmFsdWUpCit7CisgICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3Qg
YWRkLCBzZXQgdGhlIHR5cGUgZm9yIHRoaXMgU1ZHVHJhbnNmb3JtRGlzdGFuY2UKKyAgICBpZiAo
bV90eXBlID09IFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOKQorICAgICAgICBt
X3R5cGUgPSB0cmFuc2Zvcm0udHlwZSgpOworICAgIAorICAgIEFTU0VSVChtX3R5cGUgPT0gdHJh
bnNmb3JtLnR5cGUoKSk7CisgICAgCisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIFNW
R1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOOgorICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fTUFUUklYOgorICAgICAgICBtX3RyYW5z
Zm9ybSAqPSB0cmFuc2Zvcm0ubWF0cml4KCk7IC8vIEZJWE1FOiB3aGF0IGRvZXMgJ2Rpc3RhbmNl
JyBiZXR3ZWVuIHR3byB0cmFuc2Zvcm1zIG1lYW4/ICBob3cgc2hvdWxkIHdlIHJlc3BlY3QgJ2Fi
c29sdXRlVmFsdWUnIGhlcmU/CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNWR1RyYW5zZm9y
bTo6U1ZHX1RSQU5TRk9STV9ST1RBVEU6CisgICAgICAgIG1fYW5nbGUgKz0gYWJzb2x1dGVWYWx1
ZSA/IGZhYnNmKHRyYW5zZm9ybS5hbmdsZSgpKSA6IHRyYW5zZm9ybS5hbmdsZSgpOworICAgICAg
ICAvLyBmYWxsIHRocm91Z2gKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9U
UkFOU0xBVEU6CisgICAgeworICAgICAgICBmbG9hdCBkeCA9IGFic29sdXRlVmFsdWUgPyBmYWJz
Zih0cmFuc2Zvcm0udHJhbnNsYXRlKCkueCgpKSA6IHRyYW5zZm9ybS50cmFuc2xhdGUoKS54KCk7
CisgICAgICAgIGZsb2F0IGR5ID0gYWJzb2x1dGVWYWx1ZSA/IGZhYnNmKHRyYW5zZm9ybS50cmFu
c2xhdGUoKS55KCkpIDogdHJhbnNmb3JtLnRyYW5zbGF0ZSgpLnkoKTsKKyAgICAgICAgbV90cmFu
c2Zvcm0udHJhbnNsYXRlKGR4LCBkeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6CisgICAgeworICAgICAgICBmbG9h
dCBzY2FsZVggPSBhYnNvbHV0ZVZhbHVlID8gZmFic2YodHJhbnNmb3JtLnNjYWxlKCkud2lkdGgo
KSkgOiB0cmFuc2Zvcm0uc2NhbGUoKS53aWR0aCgpOworICAgICAgICBmbG9hdCBzY2FsZVkgPSBh
YnNvbHV0ZVZhbHVlID8gZmFic2YodHJhbnNmb3JtLnNjYWxlKCkuaGVpZ2h0KCkpIDogdHJhbnNm
b3JtLnNjYWxlKCkuaGVpZ2h0KCk7CisgICAgICAgIG1fdHJhbnNmb3JtLnNjYWxlKHNjYWxlWCwg
c2NhbGVZKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6
U1ZHX1RSQU5TRk9STV9TS0VXWDoKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9S
TV9TS0VXWToKKyAgICAgICAgbV9hbmdsZSArPSBhYnNvbHV0ZVZhbHVlID8gZmFic2YodHJhbnNm
b3JtLmFuZ2xlKCkpIDogdHJhbnNmb3JtLmFuZ2xlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuOworfQorCitTVkdU
cmFuc2Zvcm0gU1ZHVHJhbnNmb3JtRGlzdGFuY2U6OmFkZFRvU1ZHVHJhbnNmb3JtKGNvbnN0IFNW
R1RyYW5zZm9ybSYgdHJhbnNmb3JtKSBjb25zdAoreworICAgIEFTU0VSVChtX3R5cGUgPT0gdHJh
bnNmb3JtLnR5cGUoKSB8fCB0cmFuc2Zvcm0gPT0gU1ZHVHJhbnNmb3JtKCkpOworICAgIAorICAg
IFNWR1RyYW5zZm9ybSBuZXdUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKyAgICAKKyAgICBzd2l0Y2gg
KG1fdHlwZSkgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1VOS05PV046
CisgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm0oKTsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6
U1ZHX1RSQU5TRk9STV9NQVRSSVg6CisgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm0odHJhbnNm
b3JtLm1hdHJpeCgpICogbV90cmFuc2Zvcm0pOworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdf
VFJBTlNGT1JNX1RSQU5TTEFURToKKyAgICB7CisgICAgICAgIEZsb2F0UG9pbnQgdHJhbnNsYXRp
b24gPSB0cmFuc2Zvcm0udHJhbnNsYXRlKCk7CisgICAgICAgIHRyYW5zbGF0aW9uICs9IEZsb2F0
U2l6ZShtX3RyYW5zZm9ybS5lKCksIG1fdHJhbnNmb3JtLmYoKSk7CisgICAgICAgIG5ld1RyYW5z
Zm9ybS5zZXRUcmFuc2xhdGUodHJhbnNsYXRpb24ueCgpLCB0cmFuc2xhdGlvbi55KCkpOworICAg
ICAgICByZXR1cm4gbmV3VHJhbnNmb3JtOworICAgIH0KKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6
U1ZHX1RSQU5TRk9STV9TQ0FMRToKKyAgICB7CisgICAgICAgIEZsb2F0U2l6ZSBzY2FsZSA9IHRy
YW5zZm9ybS5zY2FsZSgpOworICAgICAgICBzY2FsZSArPSBGbG9hdFNpemUobV90cmFuc2Zvcm0u
YSgpLCBtX3RyYW5zZm9ybS5kKCkpOworICAgICAgICBuZXdUcmFuc2Zvcm0uc2V0U2NhbGUoc2Nh
bGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gbmV3VHJhbnNmb3Jt
OworICAgIH0KKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9ST1RBVEU6Cisg
ICAgeworICAgICAgICAvLyBGSVhNRTogSSdtIG5vdCBjZXJ0YWluIHRoZSB0cmFuc2xhdGlvbiBp
cyBjYWxjdWxhdGVkIGNvcnJlY3RseSBoZXJlCisgICAgICAgIEZsb2F0UG9pbnQgdHJhbnNsYXRp
b24gPSB0cmFuc2Zvcm0udHJhbnNsYXRlKCk7CisgICAgICAgIHRyYW5zbGF0aW9uICs9IEZsb2F0
U2l6ZShtX3RyYW5zZm9ybS5lKCksIG1fdHJhbnNmb3JtLmYoKSk7CisgICAgICAgIG5ld1RyYW5z
Zm9ybS5zZXRSb3RhdGUodHJhbnNmb3JtLmFuZ2xlKCkgKyBtX2FuZ2xlLCB0cmFuc2xhdGlvbi54
KCksIHRyYW5zbGF0aW9uLnkoKSk7CisgICAgICAgIHJldHVybiBuZXdUcmFuc2Zvcm07CisgICAg
fQorICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NLRVdYOgorICAgICAgICBu
ZXdUcmFuc2Zvcm0uc2V0U2tld1godHJhbnNmb3JtLmFuZ2xlKCkgKyBtX2FuZ2xlKTsKKyAgICAg
ICAgcmV0dXJuIG5ld1RyYW5zZm9ybTsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5T
Rk9STV9TS0VXWToKKyAgICAgICAgbmV3VHJhbnNmb3JtLnNldFNrZXdZKHRyYW5zZm9ybS5hbmds
ZSgpICsgbV9hbmdsZSk7CisgICAgICAgIHJldHVybiBuZXdUcmFuc2Zvcm07CisgICAgfQorICAg
IAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBTVkdUcmFuc2Zvcm0oKTsK
K30KKworYm9vbCBTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6aXNaZXJvKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gKG1fdHJhbnNmb3JtID09IEFmZmluZVRyYW5zZm9ybSgpICYmIG1fYW5nbGUgPT0gMCk7
Cit9CisKK2Zsb2F0IFNWR1RyYW5zZm9ybURpc3RhbmNlOjpkaXN0YW5jZSgpIGNvbnN0Cit7Cisg
ICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9S
TV9VTktOT1dOOgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZH
X1RSQU5TRk9STV9ST1RBVEU6CisgICAgICAgIHJldHVybiBzcXJ0ZihtX2FuZ2xlICogbV9hbmds
ZSArIG1fdHJhbnNmb3JtLmUoKSAqIG1fdHJhbnNmb3JtLmUoKSArIG1fdHJhbnNmb3JtLmYoKSAq
IG1fdHJhbnNmb3JtLmYoKSk7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1f
TUFUUklYOgorICAgICAgICByZXR1cm4gMDsgLy8gSSdtIG5vdCBxdWl0ZSBzdXJlIHlldCB3aGF0
IGRpc3RhbmNlIGJldHdlZW4gdHdvIG1hdHJpY2VzIG1lYW5zLgorICAgIGNhc2UgU1ZHVHJhbnNm
b3JtOjpTVkdfVFJBTlNGT1JNX1NDQUxFOgorICAgICAgICByZXR1cm4gc3FydGYobV90cmFuc2Zv
cm0uYSgpICogbV90cmFuc2Zvcm0uYSgpICsgbV90cmFuc2Zvcm0uZCgpICogbV90cmFuc2Zvcm0u
ZCgpKTsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEU6Cisg
ICAgICAgIHJldHVybiBzcXJ0ZihtX3RyYW5zZm9ybS5lKCkgKiBtX3RyYW5zZm9ybS5lKCkgKyBt
X3RyYW5zZm9ybS5mKCkgKiBtX3RyYW5zZm9ybS5mKCkpOworICAgIGNhc2UgU1ZHVHJhbnNmb3Jt
OjpTVkdfVFJBTlNGT1JNX1NLRVdYOgorICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNG
T1JNX1NLRVdZOgorICAgICAgICByZXR1cm4gbV9hbmdsZTsKKyAgICB9CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBrc3Zn
Mi9zdmcvU1ZHVHJhbnNmb3JtRGlzdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZH
VHJhbnNmb3JtRGlzdGFuY2UuaAkocmV2aXNpb24gMCkKKysrIGtzdmcyL3N2Zy9TVkdUcmFuc2Zv
cm1EaXN0YW5jZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2IEBACisvKgorIENvcHlyaWdo
dCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorIAorIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdAorIAorIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlIC0gU3VpdGUgMzMwLAorIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNp
Zm5kZWYgU1ZHVHJhbnNmb3JtRGlzdGFuY2VfaAorI2RlZmluZSBTVkdUcmFuc2Zvcm1EaXN0YW5j
ZV9oCisjaWZkZWYgU1ZHX1NVUFBPUlQKKworI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOworICAg
ICAgICAKKyAgICBjbGFzcyBTVkdUcmFuc2Zvcm1EaXN0YW5jZSB7CisgICAgcHVibGljOgorICAg
ICAgICBTVkdUcmFuc2Zvcm1EaXN0YW5jZSgpOworICAgICAgICBTVkdUcmFuc2Zvcm1EaXN0YW5j
ZShjb25zdCBTVkdUcmFuc2Zvcm0mIGZyb21UcmFuc2Zvcm0sIGNvbnN0IFNWR1RyYW5zZm9ybSYg
dG9UcmFuc2Zvcm0pOworICAgICAgICAKKyAgICAgICAgU1ZHVHJhbnNmb3JtRGlzdGFuY2Ugc2Nh
bGVkRGlzdGFuY2UoZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OworICAgICAgICBTVkdUcmFuc2Zv
cm0gYWRkVG9TVkdUcmFuc2Zvcm0oY29uc3QgU1ZHVHJhbnNmb3JtJikgY29uc3Q7CisgICAgICAg
IHZvaWQgYWRkU1ZHVHJhbnNmb3JtKGNvbnN0IFNWR1RyYW5zZm9ybSYsIGJvb2wgYWJzb2x1dGVW
YWx1ZSA9IGZhbHNlKTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBTVkdUcmFuc2Zvcm0gYWRk
U1ZHVHJhbnNmb3Jtcyhjb25zdCBTVkdUcmFuc2Zvcm0mLCBjb25zdCBTVkdUcmFuc2Zvcm0mKTsK
KyAgICAgICAgCisgICAgICAgIGJvb2wgaXNaZXJvKCkgY29uc3Q7CisgICAgICAgIAorICAgICAg
ICBmbG9hdCBkaXN0YW5jZSgpIGNvbnN0OworICAgIHByaXZhdGU6CisgICAgICAgIFNWR1RyYW5z
Zm9ybURpc3RhbmNlKFNWR1RyYW5zZm9ybTo6U1ZHVHJhbnNmb3JtVHlwZSwgZG91YmxlIGFuZ2xl
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICAgICAgICAgIAorICAgICAgICBTVkdUcmFu
c2Zvcm06OlNWR1RyYW5zZm9ybVR5cGUgbV90eXBlOworICAgICAgICBkb3VibGUgbV9hbmdsZTsK
KyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOyAvLyBmb3Igc3RvcmluZyBzY2Fs
ZSwgdHJhbnNsYXRpb24gb3IgbWF0cml4IHRyYW5zZm9ybXMKKyAgICB9OworfQorCisjZW5kaWYg
Ly8gU1ZHX1NVUFBPUlQKKyNlbmRpZiAvLyBTVkdUcmFuc2Zvcm1EaXN0YW5jZV9oCkluZGV4OiBr
c3ZnMi9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NW
R1RyYW5zZm9ybUxpc3QuY3BwCShyZXZpc2lvbiAxOTA5MikKKysrIGtzdmcyL3N2Zy9TVkdUcmFu
c2Zvcm1MaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgogI2luY2x1ZGUg
IlNWR1NWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1EaXN0YW5jZS5oIgogI2lu
Y2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBA
IC02NSw2ICs2NiwyMCBAQCBTVkdUcmFuc2Zvcm0gU1ZHVHJhbnNmb3JtTGlzdDo6Y29uY2F0ZW5h
CiAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybShtYXRyaXgpOwogfQogCitTVkdUcmFuc2Zvcm0gU1ZH
VHJhbnNmb3JtTGlzdDo6Y29uY2F0ZW5hdGVGb3JUeXBlKFNWR1RyYW5zZm9ybTo6U1ZHVHJhbnNm
b3JtVHlwZSkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gbnVtYmVyT2ZJdGVt
cygpOworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtKCk7Cisg
ICAgCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgU1ZHVHJhbnNmb3JtRGlzdGFuY2Ug
dG90YWxUcmFuc2Zvcm07CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykKKyAgICAgICAgdG90YWxUcmFuc2Zvcm0uYWRkU1ZHVHJhbnNmb3JtKGdldEl0ZW0oaSwg
ZWMpKTsKKyAgICAKKyAgICByZXR1cm4gdG90YWxUcmFuc2Zvcm0uYWRkVG9TVkdUcmFuc2Zvcm0o
U1ZHVHJhbnNmb3JtKCkpOworfQorCiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIAogLy8gdmltOnRz
PTQ6bm9ldApJbmRleDoga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5oCShyZXZpc2lvbiAxOTA5MikKKysrIGtzdmcy
L3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8vIEludGVybmFsIHVzZSBvbmx5CiAgICAg
ICAgIFNWR1RyYW5zZm9ybSBjb25jYXRlbmF0ZSgpIGNvbnN0OworICAgICAgICBTVkdUcmFuc2Zv
cm0gY29uY2F0ZW5hdGVGb3JUeXBlKFNWR1RyYW5zZm9ybTo6U1ZHVHJhbnNmb3JtVHlwZSkgY29u
c3Q7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12660</attachid>
            <date>2007-01-24 21:53:56 -0800</date>
            <delta_ts>2007-01-26 02:05:00 -0800</delta_ts>
            <desc>Now better than TOT</desc>
            <filename>more.patch</filename>
            <type>text/plain</type>
            <size>82391</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MTA2KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNzk1LDYg
KzE3OTUsMTAgQEAKIAkJQTgzM0M4MEMwQTJDRjI1NjAwRDU3NjY0IC8qIFhNTE5hbWVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MzNDODBBMEEy
Q0YyNTYwMEQ1NzY2NCAvKiBYTUxOYW1lcy5jcHAgKi87IH07CiAJCUE4MzNDODBEMEEyQ0YyNTYw
MEQ1NzY2NCAvKiBYTUxOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTgzM0M4MEIwQTJDRjI1NjAwRDU3NjY0IC8qIFhNTE5hbWVzLmggKi87IH07
CiAJCUE4MzNDODUyMEEyQ0Y1MjgwMEQ1NzY2NCAvKiBTVkdFbGVtZW50RmFjdG9yeS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTY1ODFFNjA5RDE1
MDhEMDAwRTYxRDcgLyogU1ZHRWxlbWVudEZhY3RvcnkuY3BwICovOyB9OworCQlBODQ5NDJEOTBC
NjRBOUNBMDA2OUYwMEYgLyogQ29sb3JEaXN0YW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg0OTQyRDcwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9y
RGlzdGFuY2UuaCAqLzsgfTsKKwkJQTg0OTQyREEwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlz
dGFuY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTg0OTQyRDgwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlzdGFuY2UuY3BwICovOyB9OworCQlB
ODQ5NDdBRDBCNjdGNEExMDA2OUYwMEYgLyogU1ZHVHJhbnNmb3JtRGlzdGFuY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NDk0N0FCMEI2N0Y0QTEw
MDY5RjAwRiAvKiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5oICovOyB9OworCQlBODQ5NDdBRTBCNjdG
NEExMDA2OUYwMEYgLyogU1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg0OTQ3QUMwQjY3RjRBMTAwNjlGMDBGIC8q
IFNWR1RyYW5zZm9ybURpc3RhbmNlLmNwcCAqLzsgfTsKIAkJQTg2NjI5Q0YwOURBMkI0NzAwOTYz
M0E1IC8qIEpTVUlFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTg2NjI5QzkwOURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5oICovOyB9Owog
CQlBODY2MjlEMDA5REEyQjQ4MDA5NjMzQTUgLyogSlNVSUV2ZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NjYyOUNBMDlEQTJCNDcwMDk2MzNB
NSAvKiBKU1VJRXZlbnQuY3BwICovOyB9OwogCQlBODY2MjlEMTA5REEyQjQ4MDA5NjMzQTUgLyog
SlNNb3VzZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBODY2MjlDQjA5REEyQjQ3MDA5NjMzQTUgLyogSlNNb3VzZUV2ZW50LmggKi87IH07CkBA
IC00ODE0LDYgKzQ4MTgsMTAgQEAKIAkJQTgzM0M3RjYwQTJDRjFEODAwRDU3NjY0IC8qIHhtbGF0
dHJzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSB4bWxhdHRycy5pbjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTgzM0M4MEEwQTJDRjI1NjAwRDU3NjY0IC8qIFhNTE5hbWVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxOYW1lcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MzNDODBCMEEyQ0YyNTYwMEQ1NzY2NCAvKiBY
TUxOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1MTmFtZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTg0OTQyRDcwQjY0QTlDQTAwNjlGMDBGIC8q
IENvbG9yRGlzdGFuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29sb3JE
aXN0YW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBODQ5NDJEODBCNjRBOUNB
MDA2OUYwMEYgLyogQ29sb3JEaXN0YW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDb2xvckRpc3RhbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTg0OTQ3QUIwQjY3RjRBMTAwNjlGMDBGIC8qIFNWR1RyYW5zZm9ybURpc3RhbmNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1RyYW5zZm9ybURpc3RhbmNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4NDk0N0FDMEI2N0Y0QTEwMDY5RjAwRiAvKiBT
VkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE4NUQ3QTJGMDg3OUVCQTkwMDZBOTE3MiAvKiBRdWFydHpDb3JlLmZyYW1ld29yayAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJh
bWV3b3JrOyBuYW1lID0gUXVhcnR6Q29yZS5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9RdWFydHpDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1
dGU+IjsgfTsKIAkJQTg2NjI5QzkwOURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVSUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE4NjYyOUNBMDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVUlFdmVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MTgwLDYgKzgxODgsOCBAQAogCQlBOEMwRjdG
QzA4OTcwMUYzMDBCQTUxMTQgLyogc3ZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQlBODQ5NDJEODBCNjRBOUNBMDA2OUYwMEYgLyogQ29sb3JEaXN0YW5j
ZS5jcHAgKi8sCisJCQkJQTg0OTQyRDcwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlzdGFuY2Uu
aCAqLywKIAkJCQlCMkRERjA2NjBCNDgyQTAzMDA2NEE0QjEgLyogR3JhZGllbnRBdHRyaWJ1dGVz
LmggKi8sCiAJCQkJQjI1QUU1NUQwQjQ5RDY2MzAwNzRDNzI2IC8qIExpbmVhckdyYWRpZW50QXR0
cmlidXRlcy5oICovLAogCQkJCUIyRERGMDY0MEI0ODI5RkEwMDY0QTRCMSAvKiBQYXR0ZXJuQXR0
cmlidXRlcy5oICovLApAQCAtODUyMyw2ICs4NTMzLDggQEAKIAkJCQlBOEMwRjhERDA4OTcwMUY0
MDBCQTUxMTQgLyogU1ZHVHJhbnNmb3JtYWJsZS5jcHAgKi8sCiAJCQkJQThDMEY4REUwODk3MDFG
NDAwQkE1MTE0IC8qIFNWR1RyYW5zZm9ybWFibGUuaCAqLywKIAkJCQlCMkNCNDE1QjBBQjc1OTA0
MDA0RDlDNDUgLyogU1ZHVHJhbnNmb3JtYWJsZS5pZGwgKi8sCisJCQkJQTg0OTQ3QUMwQjY3RjRB
MTAwNjlGMDBGIC8qIFNWR1RyYW5zZm9ybURpc3RhbmNlLmNwcCAqLywKKwkJCQlBODQ5NDdBQjBC
NjdGNEExMDA2OUYwMEYgLyogU1ZHVHJhbnNmb3JtRGlzdGFuY2UuaCAqLywKIAkJCQlBOEMwRjhF
MTA4OTcwMUY0MDBCQTUxMTQgLyogU1ZHVHJhbnNmb3JtTGlzdC5jcHAgKi8sCiAJCQkJQThDMEY4
RTIwODk3MDFGNDAwQkE1MTE0IC8qIFNWR1RyYW5zZm9ybUxpc3QuaCAqLywKIAkJCQlCMkNCNDE1
QzBBQjc1OTA0MDA0RDlDNDUgLyogU1ZHVHJhbnNmb3JtTGlzdC5pZGwgKi8sCkBAIC0xMTA1MCw3
ICsxMTA2Miw5IEBACiAJCQkJQjI0MDU1NjYwQjVCRTY0MDAwMkEyOEMwIC8qIERPTVNWR0VsZW1l
bnRJbnN0YW5jZUxpc3RJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyQTY4MjQwQjVC
RURFNzAwMDJBNDgwIC8qIFByb2dyZXNzVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgw
Q0VCQUMwQjYwRkM0OTAwNzYzN0MxIC8qIFNWR01QYXRoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTg0OTQyRDkwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlzdGFuY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUxRTZFRUE4MEI2MjhEQjMwMDVGMkY3MCAvKiBKU0hUTUxTZWxlY3RFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlBODQ5NDdBRDBCNjdGNEExMDA2OUYwMEYgLyogU1ZH
VHJhbnNmb3JtRGlzdGFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTIzOTYsOSArMTI0MTAsMTEg
QEAKIAkJCQlBNzg0OTQxQjBCNUZFNTA3MDAxRTIzN0EgLyogQ2xpcGJvYXJkLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzNEZFOUU1MEI1Q0E1MzkwMDNFNEE3MyAvKiBGaWxlQ2hvb3Nlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBODBDRUJBRDBCNjBGQzQ5MDA3NjM3QzEgLyogU1ZHTVBhdGhF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4NDk0MkRBMEI2NEE5Q0EwMDY5RjAwRiAv
KiBDb2xvckRpc3RhbmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRTZFRUE0MEI2MjhEQTgw
MDVGMkY3MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTky
OTI2NDc3MEI2MUZDNzIwMEI0MUQzNCAvKiBKU0RvY3VtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDMTdGOTY2MEI2NEVCQjgwMDRBNjVDQiAvKiBKU0hUTUxTZWxlY3RFbGVtZW50
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4NDk0N0FFMEI2N0Y0QTEwMDY5RjAwRiAv
KiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IGtzdmcyL21p
c2MvU1ZHVGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL21pc2MvU1ZHVGltZXIuY3BwCShy
ZXZpc2lvbiAxOTEwNikKKysrIGtzdmcyL21pc2MvU1ZHVGltZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Myw4MSArODMsMzYgQEAgU1ZHVGltZXI6OlRhcmdldEFuaW1hdGlvbk1hcCBTVkdUaW1l
cjo6YQogICAgIHJldHVybiB0YXJnZXRNYXA7CiB9CiAKLS8vIEZJWE1FOiBFdmVudHVhbGx5IHRo
aXMgbG9naWMgd2lsbCBtb3ZlIGludG8gYW4gQW5pbWF0aW9uQ29tcG9zaXRvciBjbGFzcwotLy8g
RklYTUU6IEkgYWxzbyB0aGluayB0aGlzIGFsc28gdmlvbGF0ZXMgdGhlIHNwZWMuICBXZSBzaG91
bGQgcHJvYmFibHkganVzdCBjb3B5IHRoZSBiYXNlVmFsdWUgYW5kIG5vdCBjb25zb2xpZGF0ZQot
c3RhdGljIFBhc3NSZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4gYmFzZVZhbHVlVHJhbnNmb3JtTGlz
dChTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50KQotewotICAgIEFTU0VSVCh0YXJnZXRFbGVtZW50
LT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSk7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQqIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50Kj4odGFyZ2V0RWxlbWVudCk7Ci0gICAgUmVmUHRyPFNWR1RyYW5zZm9ybUxpc3Q+IHRhcmdl
dFRyYW5zZm9ybXMgPSBuZXcgU1ZHVHJhbnNmb3JtTGlzdCgpOwotICAgIFNWR1RyYW5zZm9ybUxp
c3QqIHRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm0tPnRyYW5zZm9ybUJhc2VWYWx1ZSgpOwotICAg
IGlmICh0cmFuc2Zvcm1MaXN0KSB7Ci0gICAgICAgIFNWR1RyYW5zZm9ybSBpbml0aWFsVHJhbnNm
b3JtID0gdHJhbnNmb3JtTGlzdC0+Y29uY2F0ZW5hdGUoKTsKLSAgICAgICAgaWYgKGluaXRpYWxU
cmFuc2Zvcm0uaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAg
ICAgICAgICAgdGFyZ2V0VHJhbnNmb3Jtcy0+YXBwZW5kSXRlbShpbml0aWFsVHJhbnNmb3JtLCBl
Yyk7Ci0gICAgICAgICAgICByZXR1cm4gdGFyZ2V0VHJhbnNmb3Jtcy5yZWxlYXNlKCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRhcmdldFRyYW5zZm9ybXM7Ci19Ci0KIC8vIEZJWE1F
OiBUaGlzIGZ1bnRpb24gd2lsbCBldmVudHVhbGx5IGJlY29tZSBwYXJ0IG9mIHRoZSBBbmltYXRp
b25Db21wb3NpdG9yCiB2b2lkIFNWR1RpbWVyOjphcHBseUFuaW1hdGlvbnMoZG91YmxlIGVsYXBz
ZWRTZWNvbmRzLCBjb25zdCBTVkdUaW1lcjo6VGFyZ2V0QW5pbWF0aW9uTWFwJiB0YXJnZXRNYXAp
CiB7ICAgIAogICAgIFRhcmdldEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgdGFyZ2V0SXRl
cmF0b3IgPSB0YXJnZXRNYXAuYmVnaW4oKTsKICAgICBUYXJnZXRBbmltYXRpb25NYXA6OmNvbnN0
X2l0ZXJhdG9yIHRlbmQgPSB0YXJnZXRNYXAuZW5kKCk7CiAgICAgZm9yICg7IHRhcmdldEl0ZXJh
dG9yICE9IHRlbmQ7ICsrdGFyZ2V0SXRlcmF0b3IpIHsKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcs
IENvbG9yPiBhdHRyaWJ1dGVUb0NvbG9yTWFwOyAvLyBzcGVjaWFsIDxhbmltYXRlQ29sb3I+IGNh
c2UKLSAgICAgICAgUmVmUHRyPFNWR1RyYW5zZm9ybUxpc3Q+IHRhcmdldFRyYW5zZm9ybXM7IC8v
IHNwZWNpYWwgPGFuaW1hdGVUcmFuc2Zvcm0+IGNhc2UKLSAgICAgICAgCiAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIHN0aWxsIG5vdCAxMDAlIGNvcnJlY3QuICBDb3JyZWN0IHdvdWxkIGJlOgog
ICAgICAgICAvLyAxLiBXYWxrIGJhY2t3YXJkcyB0aHJvdWdoIHRoZSBwcmlvcml0eSBsaXN0IHVu
dGlsIGEgcmVwbGFjZSAoIWlzQWRkaXRpdmUoKSkgaXMgZm91bmQKKyAgICAgICAgLy8gLS0gVGhp
cyBvcHRpbWl6YXRpb24gaXMgbm90IHBvc3NpYmxlIHdpdGhvdXQgY2FyZWZ1bCBjb25zaWRlcmF0
aW9uIGZvciBkZXBlbmRlbnQgdmFsdWVzIChzdWNoIGFzIGN4IGFuZCBmeCBpbiBTVkdSYWRpYWxH
cmFkaWVudCkKICAgICAgICAgLy8gMi4gU2V0IHRoZSBpbml0aWFsIHZhbHVlIChvciBsYXN0IHJl
cGxhY2UpIGFzIHRoZSBuZXcgYW5pbVZhbAogICAgICAgICAvLyAzLiBDYWxsIGVhY2ggZW5hYmxl
ZCBhbmltYXRpb24gaW4gdHVybiwgdG8gaGF2ZSBpdCBhcHBseSBpdHMgY2hhbmdlcwogICAgICAg
ICAvLyA0LiBBZnRlciBidWlsZGluZyBhIG5ldyBhbmltVmFsLCBzZXQgaXQgb24gdGhlIGVsZW1l
bnQuCiAgICAgICAgIAorICAgICAgICAvLyBDdXJyZW5seSB3ZSB1c2UgdGhlIGFjdHVhbCBhbmlt
VmFsIG9uIHRoZSBlbGVtZW50IGFzICJ0ZW1wb3Jhcnkgc3RvcmFnZSIKKyAgICAgICAgLy8gYW5k
IGFic3RyYWN0IHRoZSBnZXR0aW5nL3NldHRpbmcgb2YgdGhlIGF0dHJpYnV0ZXMgaW50byB0aGUg
U1ZHQW5pbWF0ZSogY2xhc3NlcworICAgICAgICAKICAgICAgICAgdW5zaWduZWQgY291bnQgPSB0
YXJnZXRJdGVyYXRvci0+c2Vjb25kLnNpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQqIGFu
aW1hdGlvbiA9IHRhcmdldEl0ZXJhdG9yLT5zZWNvbmRbaV07CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmICghYW5pbWF0aW9uLT5oYXNWYWxpZFRhcmdldCgpKQorICAgICAgICAgICAgaWYg
KCFhbmltYXRpb24tPmlzVmFsaWRBbmltYXRpb24oKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFhbmltYXRpb24tPnVwZGF0ZUZvckVs
YXBzZWRTZWNvbmRzKGVsYXBzZWRTZWNvbmRzKSkKKyAgICAgICAgICAgIGlmICghYW5pbWF0aW9u
LT51cGRhdGVBbmltYXRpb25CYXNlVmFsdWVGcm9tRWxlbWVudCgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIXRhcmdldFRyYW5zZm9y
bXMgJiYgKGFuaW1hdGlvbi0+aGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0ZVRyYW5zZm9ybVRh
ZykgfHwgYW5pbWF0aW9uLT5oYXNUYWdOYW1lKFNWR05hbWVzOjphbmltYXRlTW90aW9uVGFnKSkp
Ci0gICAgICAgICAgICAgICAgdGFyZ2V0VHJhbnNmb3JtcyA9IGJhc2VWYWx1ZVRyYW5zZm9ybUxp
c3QoYW5pbWF0aW9uLT50YXJnZXRFbGVtZW50KCkpOworICAgICAgICAgICAgaWYgKCFhbmltYXRp
b24tPnVwZGF0ZUFuaW1hdGVkVmFsdWVGb3JFbGFwc2VkU2Vjb25kcyhlbGFwc2VkU2Vjb25kcykp
CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChhbmltYXRpb24tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVUcmFuc2Zvcm1UYWcpKQot
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Kj4o
YW5pbWF0aW9uKS0+YXBwbHlBbmltYXRpb25Ub1ZhbHVlKHRhcmdldFRyYW5zZm9ybXMuZ2V0KCkp
OwotICAgICAgICAgICAgZWxzZSBpZiAoYW5pbWF0aW9uLT5oYXNUYWdOYW1lKFNWR05hbWVzOjph
bmltYXRlTW90aW9uVGFnKSkKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxTVkdBbmltYXRl
TW90aW9uRWxlbWVudCo+KGFuaW1hdGlvbiktPmFwcGx5QW5pbWF0aW9uVG9WYWx1ZSh0YXJnZXRU
cmFuc2Zvcm1zLmdldCgpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGFuaW1hdGlvbi0+aGFzVGFn
TmFtZShTVkdOYW1lczo6YW5pbWF0ZUNvbG9yVGFnKSkgewotICAgICAgICAgICAgICAgIFNWR0Fu
aW1hdGVDb2xvckVsZW1lbnQqIGFuaW1Db2xvciA9IHN0YXRpY19jYXN0PFNWR0FuaW1hdGVDb2xv
ckVsZW1lbnQqPihhbmltYXRpb24pOwotICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gYW5p
bUNvbG9yLT5hdHRyaWJ1dGVOYW1lKCk7Ci0gICAgICAgICAgICAgICAgQ29sb3IgY3VycmVudENv
bG9yID0gYXR0cmlidXRlVG9Db2xvck1hcC5jb250YWlucyhuYW1lKSA/IGF0dHJpYnV0ZVRvQ29s
b3JNYXAuZ2V0KG5hbWUpIDogYW5pbUNvbG9yLT5pbml0aWFsQ29sb3IoKTsKLSAgICAgICAgICAg
ICAgICBhbmltQ29sb3ItPmFwcGx5QW5pbWF0aW9uVG9WYWx1ZShjdXJyZW50Q29sb3IpOwotICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZVRvQ29sb3JNYXAuc2V0KG5hbWUsIGN1cnJlbnRDb2xvcik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEFwcGx5IGFu
eSB0cmFuc2Zvcm0gY2hhbmdlcyAoYW5pbWF0ZVRyYW5zZm9ybSAmIGFuaW1hdGVNb3Rpb24pCi0g
ICAgICAgIGlmICh0YXJnZXRUcmFuc2Zvcm1zKSB7Ci0gICAgICAgICAgICBTVkdFbGVtZW50KiBr
ZXkgPSB0YXJnZXRJdGVyYXRvci0+Zmlyc3Q7Ci0gICAgICAgICAgICBpZiAoa2V5ICYmIGtleS0+
aXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQqPihrZXkpOwotICAgICAgICAgICAgICAgIHRyYW5zZm9ybS0+c2V0VHJh
bnNmb3JtKHRhcmdldFRyYW5zZm9ybXMuZ2V0KCkpOwotICAgICAgICAgICAgICAgIHRyYW5zZm9y
bS0+dXBkYXRlTG9jYWxUcmFuc2Zvcm0odHJhbnNmb3JtLT50cmFuc2Zvcm0oKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEFwcGx5IGFueSBjb2xvciBj
aGFuZ2VzIChhbmltYXRlQ29sb3IpCi0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDb2xvcj46Oml0
ZXJhdG9yIGNvbG9ySXRlcmF0b3JFbmQgPSBhdHRyaWJ1dGVUb0NvbG9yTWFwLmVuZCgpOwotICAg
ICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDb2xvcj46Oml0ZXJhdG9yIGNvbG9ySXRlcmF0b3Ig
PSBhdHRyaWJ1dGVUb0NvbG9yTWFwLmJlZ2luKCk7IGNvbG9ySXRlcmF0b3IgIT0gY29sb3JJdGVy
YXRvckVuZDsgKytjb2xvckl0ZXJhdG9yKSB7Ci0gICAgICAgICAgICBpZiAoY29sb3JJdGVyYXRv
ci0+c2Vjb25kLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBTVkdBbmltYXRpb25FbGVtZW50
OjpzZXRUYXJnZXRBdHRyaWJ1dGUodGFyZ2V0SXRlcmF0b3ItPmZpcnN0LCBjb2xvckl0ZXJhdG9y
LT5maXJzdCwgY29sb3JJdGVyYXRvci0+c2Vjb25kLm5hbWUoKSk7CisgICAgICAgICAgICBhbmlt
YXRpb24tPmFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCgpOwogICAgICAgICB9CiAgICAgfQog
ICAgIApJbmRleDoga3N2ZzIvc3ZnL0NvbG9yRGlzdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtz
dmcyL3N2Zy9Db2xvckRpc3RhbmNlLmNwcAkocmV2aXNpb24gMCkKKysrIGtzdmcyL3N2Zy9Db2xv
ckRpc3RhbmNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyBDb3B5cmln
aHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAKKyBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QKKyAKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSAtIFN1aXRlIDMzMCwKKyBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJDb2xvckRp
c3RhbmNlLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitD
b2xvckRpc3RhbmNlOjpDb2xvckRpc3RhbmNlKCkKKyAgICA6IG1fcmVkRGlmZigwKQorICAgICwg
bV9ibHVlRGlmZigwKQorICAgICwgbV9ncmVlbkRpZmYoMCkKK3sKK30KKworQ29sb3JEaXN0YW5j
ZTo6Q29sb3JEaXN0YW5jZShjb25zdCBDb2xvciYgZnJvbUNvbG9yLCBjb25zdCBDb2xvciYgdG9D
b2xvcikKKyAgICA6IG1fcmVkRGlmZih0b0NvbG9yLnJlZCgpIC0gZnJvbUNvbG9yLnJlZCgpKQor
ICAgICwgbV9ibHVlRGlmZih0b0NvbG9yLmJsdWUoKSAtIGZyb21Db2xvci5ibHVlKCkpCisgICAg
LCBtX2dyZWVuRGlmZih0b0NvbG9yLmdyZWVuKCkgLSBmcm9tQ29sb3IuZ3JlZW4oKSkKK3sKK30K
KworQ29sb3JEaXN0YW5jZTo6Q29sb3JEaXN0YW5jZShpbnQgcmVkRGlmZiwgaW50IGJsdWVEaWZm
LCBpbnQgZ3JlZW5EaWZmKQorICAgIDogbV9yZWREaWZmKHJlZERpZmYpCisgICAgLCBtX2JsdWVE
aWZmKGJsdWVEaWZmKQorICAgICwgbV9ncmVlbkRpZmYoZ3JlZW5EaWZmKQoreworfQorCitzdGF0
aWMgaW5saW5lIGludCBjbGFtcENvbG9yVmFsdWUoaW50IHYpCit7CisgICAgaWYgKHYgPiAyNTUp
CisgICAgICAgIHYgPSAyNTU7CisgICAgZWxzZSBpZiAodiA8IDApCisgICAgICAgIHYgPSAwOwor
ICAgIHJldHVybiB2OworfQorCitDb2xvckRpc3RhbmNlIENvbG9yRGlzdGFuY2U6OnNjYWxlZERp
c3RhbmNlKGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAoreworICAgIHJldHVybiBDb2xvckRpc3Rh
bmNlKHNjYWxlRmFjdG9yICogbV9yZWREaWZmLCBzY2FsZUZhY3RvciAqIG1fYmx1ZURpZmYsIHNj
YWxlRmFjdG9yICogbV9ncmVlbkRpZmYpOworfQorCitDb2xvciBDb2xvckRpc3RhbmNlOjphZGRD
b2xvcnNBbmRDbGFtcChjb25zdCBDb2xvciYgZmlyc3QsIGNvbnN0IENvbG9yJiBzZWNvbmQpCit7
CisgICAgcmV0dXJuIENvbG9yKGNsYW1wQ29sb3JWYWx1ZShmaXJzdC5yZWQoKSArIHNlY29uZC5y
ZWQoKSksCisgICAgICAgICAgICAgICAgIGNsYW1wQ29sb3JWYWx1ZShmaXJzdC5ncmVlbigpICsg
c2Vjb25kLmdyZWVuKCkpLAorICAgICAgICAgICAgICAgICBjbGFtcENvbG9yVmFsdWUoc2Vjb25k
LmJsdWUoKSArIHNlY29uZC5ibHVlKCkpKTsKK30KKworQ29sb3IgQ29sb3JEaXN0YW5jZTo6YWRk
VG9Db2xvckFuZENsYW1wKGNvbnN0IENvbG9yJiBjb2xvcikgY29uc3QKK3sKKyAgICByZXR1cm4g
Q29sb3IoY2xhbXBDb2xvclZhbHVlKGNvbG9yLnJlZCgpICsgbV9yZWREaWZmKSwKKyAgICAgICAg
ICAgICAgICAgY2xhbXBDb2xvclZhbHVlKGNvbG9yLmdyZWVuKCkgKyBtX2JsdWVEaWZmKSwKKyAg
ICAgICAgICAgICAgICAgY2xhbXBDb2xvclZhbHVlKGNvbG9yLmJsdWUoKSArIG1fZ3JlZW5EaWZm
KSk7Cit9CisKK2Jvb2wgQ29sb3JEaXN0YW5jZTo6aXNaZXJvKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gKG1fcmVkRGlmZiA9PSAwICYmIG1fYmx1ZURpZmYgPT0gMCAmJiBtX2dyZWVuRGlmZiA9PSAw
KTsKK30KKworZmxvYXQgQ29sb3JEaXN0YW5jZTo6ZGlzdGFuY2UoKSBjb25zdAoreworICAgIC8v
IFRoaXMgaXMganVzdCBhIHNpbXBsZSBkaXN0YW5jZSBjYWxjdWxhdGlvbiwgbm90IHJlc3BlY3Rp
bmcgY29sb3Igc3BhY2VzCisgICAgcmV0dXJuIHNxcnRmKG1fcmVkRGlmZiAqIG1fcmVkRGlmZiAr
IG1fYmx1ZURpZmYgKiBtX2JsdWVEaWZmICsgbV9ncmVlbkRpZmYgKiBtX2dyZWVuRGlmZik7Cit9
CisKK30KKworI2VuZGlmCkluZGV4OiBrc3ZnMi9zdmcvQ29sb3JEaXN0YW5jZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtzdmcyL3N2Zy9Db2xvckRpc3RhbmNlLmgJKHJldmlzaW9uIDApCisrKyBrc3ZnMi9z
dmcvQ29sb3JEaXN0YW5jZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACisvKgorIENv
cHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorIAorIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdAorIAorIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCisgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVt
cGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICov
CisKKyNpZm5kZWYgQ29sb3JEaXN0YW5jZV9oCisjZGVmaW5lIENvbG9yRGlzdGFuY2VfaAorI2lm
ZGVmIFNWR19TVVBQT1JUCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKKyAgICBjbGFzcyBD
b2xvcjsKKworICAgIGNsYXNzIENvbG9yRGlzdGFuY2UgeworICAgIHB1YmxpYzoKKyAgICAgICAg
Q29sb3JEaXN0YW5jZSgpOworICAgICAgICBDb2xvckRpc3RhbmNlKGNvbnN0IENvbG9yJiBmcm9t
Q29sb3IsIGNvbnN0IENvbG9yJiB0b0NvbG9yKTsKKyAgICAgICAgQ29sb3JEaXN0YW5jZShpbnQg
cmVkRGlmZiwgaW50IGJsdWVEaWZmLCBpbnQgZ3JlZW5EaWZmKTsKKyAgICAgICAgCisgICAgICAg
IENvbG9yRGlzdGFuY2Ugc2NhbGVkRGlzdGFuY2UoZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Owor
ICAgICAgICBDb2xvciBhZGRUb0NvbG9yQW5kQ2xhbXAoY29uc3QgQ29sb3ImKSBjb25zdDsKKyAg
ICAgICAgCisgICAgICAgIHN0YXRpYyBDb2xvciBhZGRDb2xvcnNBbmRDbGFtcChjb25zdCBDb2xv
ciYsIGNvbnN0IENvbG9yJik7CisgICAgICAgIAorICAgICAgICBib29sIGlzWmVybygpIGNvbnN0
OworICAgICAgICAKKyAgICAgICAgZmxvYXQgZGlzdGFuY2UoKSBjb25zdDsKKyAgICAgICAgCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgaW50IG1fcmVkRGlmZjsKKyAgICAgICAgaW50IG1fYmx1ZURp
ZmY7CisgICAgICAgIGludCBtX2dyZWVuRGlmZjsKKyAgICB9OworfQorCisjZW5kaWYgLy8gU1ZH
X1NVUFBPUlQKKyNlbmRpZiAvLyBDb2xvckRpc3RhbmNlX2gKSW5kZXg6IGtzdmcyL3N2Zy9TVkdB
bmltYXRlQ29sb3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQW5pbWF0
ZUNvbG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5MTA2KQorKysga3N2ZzIvc3ZnL1NWR0FuaW1h
dGVDb2xvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMiArMzcsNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OlNWR0FuaW1hdGVDb2xv
ckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAg
ICA6IFNWR0FuaW1hdGlvbkVsZW1lbnQodGFnTmFtZSwgZG9jKQotICAgICwgbV90b0NvbG9yKG5l
dyBTVkdDb2xvcigpKQotICAgICwgbV9mcm9tQ29sb3IobmV3IFNWR0NvbG9yKCkpCi0gICAgLCBt
X2N1cnJlbnRJdGVtKC0xKQotICAgICwgbV9yZWREaWZmKDApCi0gICAgLCBtX2dyZWVuRGlmZigw
KQotICAgICwgbV9ibHVlRGlmZigwKQogewogfQogCkBAIC01MCwxNzcgKzQ0LDYwIEBAIFNWR0Fu
aW1hdGVDb2xvckVsZW1lbnQ6On5TVkdBbmltYXRlQ29sb3IKIHsKIH0KIAotdm9pZCBjYWxjdWxh
dGVDb2xvckRpZmZlcmVuY2UoY29uc3QgQ29sb3ImIGZpcnN0LCBjb25zdCBDb2xvciYgc2Vjb25k
LCBpbnQmIHJlZERpZmYsIGludCYgZ3JlZW5EaWZmLCBpbnQmIGJsdWVEaWZmKQorYm9vbCBTVkdB
bmltYXRlQ29sb3JFbGVtZW50Ojp1cGRhdGVBbmltYXRpb25CYXNlVmFsdWVGcm9tRWxlbWVudCgp
CiB7Ci0gICAgcmVkRGlmZiA9IGZpcnN0LnJlZCgpIC0gc2Vjb25kLnJlZCgpOwotICAgIGdyZWVu
RGlmZiA9IGZpcnN0LmdyZWVuKCkgLSBzZWNvbmQuZ3JlZW4oKTsKLSAgICBibHVlRGlmZiA9IGZp
cnN0LmJsdWUoKSAtIHNlY29uZC5ibHVlKCk7Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0ZUNvbG9yRWxl
bWVudDo6c3RvcmVJbml0aWFsVmFsdWUoKQotewotICAgIG1faW5pdGlhbENvbG9yID0gU1ZHQ29s
b3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKHRhcmdldEF0dHJpYnV0ZSgpKTsKLX0KLQotdm9p
ZCBTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpyZXNldFZhbHVlcygpCi17Ci0gICAgbV9jdXJyZW50
SXRlbSA9IC0xOwotICAgIG1fcmVkRGlmZiA9IDA7Ci0gICAgbV9ncmVlbkRpZmYgPSAwOwotICAg
IG1fYmx1ZURpZmYgPSAwOwotfQotCi1ib29sIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OnVwZGF0
ZUN1cnJlbnRWYWx1ZShkb3VibGUgdGltZVBlcmNlbnRhZ2UpCi17Ci0gICAgaW50IHIgPSAwLCBn
ID0gMCwgYiA9IDA7Ci0gICAgaWYgKChtX3JlZERpZmYgIT0gMCB8fCBtX2dyZWVuRGlmZiAhPSAw
IHx8IG1fYmx1ZURpZmYgIT0gMCkgJiYgIW1fdmFsdWVzKQotICAgICAgICBjYWxjdWxhdGVDb2xv
cih0aW1lUGVyY2VudGFnZSwgciwgZywgYik7Ci0gICAgZWxzZSBpZiAobV92YWx1ZXMpIHsKLSAg
ICAgICAgaW50IGl0ZW1CeVBlcmNlbnRhZ2UgPSBjYWxjdWxhdGVDdXJyZW50VmFsdWVJdGVtKHRp
bWVQZXJjZW50YWdlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChpdGVtQnlQZXJjZW50YWdlID09
IC0xKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgaWYgKG1f
Y3VycmVudEl0ZW0gIT0gaXRlbUJ5UGVyY2VudGFnZSkgeyAvLyBJdGVtIGNoYW5nZWQuLi4KLSAg
ICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAvLyBFeHRyYWN0IGN1cnJlbnQgJ2Zyb20nIC8gJ3RvJyB2YWx1ZXMKLSAgICAgICAgICAgIFN0
cmluZyB2YWx1ZTEgPSBtX3ZhbHVlcy0+Z2V0SXRlbShpdGVtQnlQZXJjZW50YWdlLCBlYyk7Ci0g
ICAgICAgICAgICBTdHJpbmcgdmFsdWUyID0gbV92YWx1ZXMtPmdldEl0ZW0oaXRlbUJ5UGVyY2Vu
dGFnZSArIDEsIGVjKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHIv
Zy9iIHNoaWZ0aW5nIHZhbHVlcy4uLgotICAgICAgICAgICAgaWYgKCF2YWx1ZTEuaXNFbXB0eSgp
ICYmICF2YWx1ZTIuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBhcHBseSA9IGZh
bHNlOwotICAgICAgICAgICAgICAgIGlmIChtX3JlZERpZmYgIT0gMCB8fCBtX2dyZWVuRGlmZiAh
PSAwIHx8IG1fYmx1ZURpZmYgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICByID0gbV90b0Nv
bG9yLT5jb2xvcigpLnJlZCgpOwotICAgICAgICAgICAgICAgICAgICBnID0gbV90b0NvbG9yLT5j
b2xvcigpLmdyZWVuKCk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBtX3RvQ29sb3ItPmNvbG9y
KCkuYmx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgYXBw
bHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBtX3RvQ29sb3ItPnNldFJHQkNvbG9yKHZhbHVlMik7Ci0gICAgICAgICAgICAgICAg
bV9mcm9tQ29sb3ItPnNldFJHQkNvbG9yKHZhbHVlMSk7Ci0gICAgICAgICAgICAgICAgY2FsY3Vs
YXRlQ29sb3JEaWZmZXJlbmNlKG1fdG9Db2xvci0+Y29sb3IoKSwgbV9mcm9tQ29sb3ItPmNvbG9y
KCksIG1fcmVkRGlmZiwgbV9ncmVlbkRpZmYsIG1fYmx1ZURpZmYpOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIG1fY3VycmVudEl0ZW0gPSBpdGVtQnlQZXJjZW50YWdlOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghYXBwbHkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICht
X3JlZERpZmYgIT0gMCB8fCBtX2dyZWVuRGlmZiAhPSAwIHx8IG1fYmx1ZURpZmYgIT0gMCkgewot
ICAgICAgICAgICAgZG91YmxlIHJlbGF0aXZlVGltZSA9IGNhbGN1bGF0ZVJlbGF0aXZlVGltZVBl
cmNlbnRhZ2UodGltZVBlcmNlbnRhZ2UsIG1fY3VycmVudEl0ZW0pOwotICAgICAgICAgICAgY2Fs
Y3VsYXRlQ29sb3IocmVsYXRpdmVUaW1lLCByLCBnLCBiKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICAKLSAgICBpZiAoIWlzRnJvemVuKCkgJiYgdGltZVBlcmNlbnRhZ2UgPT0gMS4wKSB7Ci0gICAg
ICAgIHIgPSBtX2luaXRpYWxDb2xvci5yZWQoKTsKLSAgICAgICAgZyA9IG1faW5pdGlhbENvbG9y
LmdyZWVuKCk7Ci0gICAgICAgIGIgPSBtX2luaXRpYWxDb2xvci5ibHVlKCk7Ci0gICAgfQotICAg
IAotICAgIGlmIChpc0FjY3VtdWxhdGVkKCkgJiYgcmVwZWF0aW9ucygpICE9IDAuMCkgewotICAg
ICAgICByICs9IG1fbGFzdENvbG9yLnJlZCgpOwotICAgICAgICBnICs9IG1fbGFzdENvbG9yLmdy
ZWVuKCk7Ci0gICAgICAgIGIgKz0gbV9sYXN0Q29sb3IuYmx1ZSgpOwotICAgIH0KLSAgICAKLSAg
ICBtX2N1cnJlbnRDb2xvciA9IGNsYW1wQ29sb3IociwgZywgYik7CisgICAgbV9iYXNlQ29sb3Ig
PSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcodGFyZ2V0QXR0cmlidXRlQW5pbWF0
ZWRWYWx1ZSgpKTsKKyAgICBtX2NvbG9yRGlzdGFuY2UgPSBDb2xvckRpc3RhbmNlKCk7CisgICAg
bV9mcm9tQ29sb3IgPSBDb2xvcigpOworICAgIG1fdG9Db2xvciA9IENvbG9yKCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6aGFuZGxlU3RhcnRD
b25kaXRpb24oKQotewotICAgIHN0b3JlSW5pdGlhbFZhbHVlKCk7Ci0gICAgCi0gICAgc3dpdGNo
IChkZXRlY3RBbmltYXRpb25Nb2RlKCkpIHsKLSAgICAgICAgY2FzZSBUT19BTklNQVRJT046Ci0g
ICAgICAgIGNhc2UgRlJPTV9UT19BTklNQVRJT046Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1f
dG9Db2xvci0+c2V0UkdCQ29sb3IobV90byk7Ci0gICAgICAgICAgICBpZiAoIW1fZnJvbS5pc0Vt
cHR5KCkpIC8vIGZyb20tdG8gYW5pbWF0aW9uCi0gICAgICAgICAgICAgICAgbV9mcm9tQ29sb3It
PnNldFJHQkNvbG9yKG1fZnJvbSk7Ci0gICAgICAgICAgICBlbHNlIC8vIHRvIGFuaW1hdGlvbgot
ICAgICAgICAgICAgICAgIG1fZnJvbUNvbG9yLT5zZXRSR0JDb2xvcihtX2luaXRpYWxDb2xvci5u
YW1lKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxjdWxhdGVDb2xvckRpZmZlcmVu
Y2UobV90b0NvbG9yLT5jb2xvcigpLCBtX2Zyb21Db2xvci0+Y29sb3IoKSwgbV9yZWREaWZmLCBt
X2dyZWVuRGlmZiwgbV9ibHVlRGlmZik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIEJZX0FOSU1BVElPTjoKLSAgICAgICAgY2FzZSBGUk9NX0JZX0FOSU1BVElP
TjoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX2Zyb20uaXNFbXB0eSgpKSAvLyBmcm9t
LWJ5IGFuaW1hdGlvbgotICAgICAgICAgICAgICAgIG1fZnJvbUNvbG9yLT5zZXRSR0JDb2xvciht
X2Zyb20pOwotICAgICAgICAgICAgZWxzZSAvLyBieSBhbmltYXRpb24KLSAgICAgICAgICAgICAg
ICBtX2Zyb21Db2xvci0+c2V0UkdCQ29sb3IobV9pbml0aWFsQ29sb3IubmFtZSgpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbV90b0NvbG9yLT5zZXRSR0JDb2xvcihhZGRDb2xvcnNBbmRD
bGFtcChtX2Zyb21Db2xvci0+Y29sb3IoKSwgU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3Ry
aW5nKG1fYnkpKS5uYW1lKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjYWxjdWxhdGVD
b2xvckRpZmZlcmVuY2UobV90b0NvbG9yLT5jb2xvcigpLCBtX2Zyb21Db2xvci0+Y29sb3IoKSwg
bV9yZWREaWZmLCBtX2dyZWVuRGlmZiwgbV9ibHVlRGlmZik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIFZBTFVFU19BTklNQVRJT046Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgewotICAgICAgICAgICAgLy9rZEVycm9y
KCkgPDwga19mdW5jaW5mbyA8PCAiIFVuYWJsZSB0byBkZXRlY3QgYW5pbWF0aW9uIG1vZGUhIEFi
b3J0aW5nIGNyZWF0aW9uISIgPDwgZW5kbDsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTVkdBbmlt
YXRlQ29sb3JFbGVtZW50Ojp1cGRhdGVMYXN0VmFsdWVXaXRoQ3VycmVudCgpCi17Ci0gICAgbV9s
YXN0Q29sb3IgPSBtX2N1cnJlbnRDb2xvcjsKLX0KLQotdm9pZCBTVkdBbmltYXRlQ29sb3JFbGVt
ZW50OjphcHBseUFuaW1hdGlvblRvVmFsdWUoQ29sb3ImIGN1cnJlbnRDb2xvcikKK3ZvaWQgU1ZH
QW5pbWF0ZUNvbG9yRWxlbWVudDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KCkKIHsKICAg
ICBpZiAoaXNBZGRpdGl2ZSgpKQotICAgICAgICBjdXJyZW50Q29sb3IgPSBhZGRDb2xvcnNBbmRD
bGFtcChjdXJyZW50Q29sb3IsIGNvbG9yKCkpOworICAgICAgICBzZXRUYXJnZXRBdHRyaWJ1dGVB
bmltYXRlZFZhbHVlKENvbG9yRGlzdGFuY2U6OmFkZENvbG9yc0FuZENsYW1wKG1fYmFzZUNvbG9y
LCBtX2FuaW1hdGVkQ29sb3IpLm5hbWUoKSk7CiAgICAgZWxzZQotICAgICAgICBjdXJyZW50Q29s
b3IgPSBjb2xvcigpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBjbGFtcENvbG9yVmFsdWUoaW50
IHYpCi17Ci0gICAgaWYgKHYgPiAyNTUpCi0gICAgICAgIHYgPSAyNTU7Ci0gICAgZWxzZSBpZiAo
diA8IDApCi0gICAgICAgIHYgPSAwOwotICAgIHJldHVybiB2OwotfQotCi1Db2xvciBTVkdBbmlt
YXRlQ29sb3JFbGVtZW50OjpjbGFtcENvbG9yKGludCByLCBpbnQgZywgaW50IGIpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIENvbG9yKGNsYW1wQ29sb3JWYWx1ZShyKSwgY2xhbXBDb2xvclZhbHVlKGcp
LCBjbGFtcENvbG9yVmFsdWUoYikpOworICAgICAgICBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRl
ZFZhbHVlKG1fYW5pbWF0ZWRDb2xvci5uYW1lKCkpOwogfQogCi1Db2xvciBTVkdBbmltYXRlQ29s
b3JFbGVtZW50OjphZGRDb2xvcnNBbmRDbGFtcChjb25zdCBDb2xvciYgZmlyc3QsIGNvbnN0IENv
bG9yJiBzZWNvbmQpCitib29sIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVk
VmFsdWUoRUFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2Us
IHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KQogewotICAgIHJldHVy
biBDb2xvcihjbGFtcENvbG9yVmFsdWUoZmlyc3QucmVkKCkgKyBzZWNvbmQucmVkKCkpLAotICAg
ICAgICAgICAgICAgICBjbGFtcENvbG9yVmFsdWUoZmlyc3QuZ3JlZW4oKSArIHNlY29uZC5ncmVl
bigpKSwKLSAgICAgICAgICAgICAgICAgY2xhbXBDb2xvclZhbHVlKGZpcnN0LmJsdWUoKSArIHNl
Y29uZC5ibHVlKCkpKTsKLX0KLQotdm9pZCBTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpjYWxjdWxh
dGVDb2xvcihkb3VibGUgdGltZSwgaW50ICZyLCBpbnQgJmcsIGludCAmYikgY29uc3QKLXsKLSAg
ICByID0gbHJvdW5kKG1fcmVkRGlmZiAqIHRpbWUpICsgbV9mcm9tQ29sb3ItPmNvbG9yKCkucmVk
KCk7Ci0gICAgZyA9IGxyb3VuZChtX2dyZWVuRGlmZiAqIHRpbWUpICsgbV9mcm9tQ29sb3ItPmNv
bG9yKCkuZ3JlZW4oKTsKLSAgICBiID0gbHJvdW5kKG1fYmx1ZURpZmYgKiB0aW1lKSArIG1fZnJv
bUNvbG9yLT5jb2xvcigpLmJsdWUoKTsKLX0KLQotQ29sb3IgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVu
dDo6Y29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBtX2N1cnJlbnRDb2xvcjsKKyAgICBpZiAo
YW5pbWF0aW9uTW9kZSA9PSBUT19BTklNQVRJT04pCisgICAgICAgIC8vIHRvLWFuaW1hdGlvbnMg
aGF2ZSBhIHNwZWNpYWwgZXF1YXRpb246IHZhbHVlID0gKHRvIC0gYmFzZSkgKiAodGltZS9kdXJh
dGlvbikgKyBiYXNlCisgICAgICAgIG1fYW5pbWF0ZWRDb2xvciA9IENvbG9yRGlzdGFuY2UobV9i
YXNlQ29sb3IsIG1fdG9Db2xvcikuc2NhbGVkRGlzdGFuY2UodGltZVBlcmNlbnRhZ2UpLmFkZFRv
Q29sb3JBbmRDbGFtcChtX2Jhc2VDb2xvcik7CisgICAgZWxzZQorICAgICAgICBtX2FuaW1hdGVk
Q29sb3IgPSBtX2NvbG9yRGlzdGFuY2Uuc2NhbGVkRGlzdGFuY2UocGVyY2VudGFnZVBhc3QpLmFk
ZFRvQ29sb3JBbmRDbGFtcChtX2Zyb21Db2xvcik7CisgICAgcmV0dXJuIChtX2FuaW1hdGVkQ29s
b3IgIT0gbV9iYXNlQ29sb3IpOwogfQogCi1Db2xvciBTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojpp
bml0aWFsQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBtX2luaXRpYWxDb2xvcjsKK2Jvb2wg
U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVBbmltYXRp
b25Nb2RlIGFuaW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpCit7ICAgIAorICAgIHN3
aXRjaCAoYW5pbWF0aW9uTW9kZSkgeworICAgIGNhc2UgRlJPTV9UT19BTklNQVRJT046CisgICAg
ICAgIG1fZnJvbUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fZnJv
bSk7CisgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgIGNhc2UgVE9fQU5JTUFUSU9OOgorICAg
ICAgICBtX3RvQ29sb3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcobV90byk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRlJPTV9CWV9BTklNQVRJT046CisgICAgICAgIG1f
ZnJvbUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fZnJvbSk7Cisg
ICAgICAgIG1fdG9Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmluZyhtX2J5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCWV9BTklNQVRJT046CisgICAgICAgIG1fZnJv
bUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fZnJvbSk7CisgICAg
ICAgIG1fdG9Db2xvciA9IENvbG9yRGlzdGFuY2U6OmFkZENvbG9yc0FuZENsYW1wKG1fZnJvbUNv
bG9yLCBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcobV9ieSkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFZBTFVFU19BTklNQVRJT046CisgICAgICAgIG1fZnJvbUNvbG9yID0g
U1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fdmFsdWVzW3ZhbHVlSW5kZXhdKTsK
KyAgICAgICAgbV90b0NvbG9yID0gKCh2YWx1ZUluZGV4ICsgMSkgPCBtX3ZhbHVlcy5zaXplKCkp
ID8gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fdmFsdWVzW3ZhbHVlSW5kZXgg
KyAxXSkgOiBtX2Zyb21Db2xvcjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOT19BTklNQVRJ
T046CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBtX2Nv
bG9yRGlzdGFuY2UgPSBDb2xvckRpc3RhbmNlKG1fZnJvbUNvbG9yLCBtX3RvQ29sb3IpOworICAg
IHJldHVybiAhbV9jb2xvckRpc3RhbmNlLmlzWmVybygpOwogfQogCiB9CkluZGV4OiBrc3ZnMi9z
dmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdB
bmltYXRlQ29sb3JFbGVtZW50LmgJKHJldmlzaW9uIDE5MTA2KQorKysga3N2ZzIvc3ZnL1NWR0Fu
aW1hdGVDb2xvckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lm
ZGVmIFNWR19TVVBQT1JUCiAKICNpbmNsdWRlICJTVkdBbmltYXRpb25FbGVtZW50LmgiCisjaW5j
bHVkZSAiQ29sb3JEaXN0YW5jZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMzYsMzggKzM3LDI0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Kik7CiAgICAgICAgIHZpcnR1YWwgflNWR0FuaW1hdGVDb2xvckVsZW1l
bnQoKTsKLQotICAgICAgICB2b2lkIGFwcGx5QW5pbWF0aW9uVG9WYWx1ZShDb2xvciYgY3VycmVu
dENvbG9yKTsKLQotICAgICAgICAvLyBIZWxwZXIKLSAgICAgICAgQ29sb3IgYWRkQ29sb3JzQW5k
Q2xhbXAoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwotICAgICAgICBDb2xvciBjbGFtcENv
bG9yKGludCByLCBpbnQgZywgaW50IGIpIGNvbnN0OyAvLyBkZXByZWNhdGVkCi0gICAgICAgIHZv
aWQgY2FsY3VsYXRlQ29sb3IoZG91YmxlIHRpbWUsIGludCAmciwgaW50ICZnLCBpbnQgJmIpIGNv
bnN0OwotCi0gICAgICAgIENvbG9yIGNvbG9yKCkgY29uc3Q7Ci0gICAgICAgIENvbG9yIGluaXRp
YWxDb2xvcigpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUFu
aW1hdGlvbkJhc2VWYWx1ZUZyb21FbGVtZW50KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhcHBs
eUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQoKTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmly
dHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRo
aXM7IH0KLSAgICAgICAgdm9pZCBzdG9yZUluaXRpYWxWYWx1ZSgpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgcmVzZXRWYWx1ZXMoKTsKICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRh
dGVDdXJyZW50VmFsdWUoZG91YmxlIHRpbWVQZXJjZW50YWdlKTsKLSAgICAgICAgdmlydHVhbCBi
b29sIGhhbmRsZVN0YXJ0Q29uZGl0aW9uKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVM
YXN0VmFsdWVXaXRoQ3VycmVudCgpOworICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQW5pbWF0
ZWRWYWx1ZShFQW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVkIHZh
bHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KTsKKyAgICAgICAgdmlydHVhbCBib29sIGNh
bGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJbmRl
eCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBDb2xvciBtX2xhc3RDb2xvcjsKLSAgICAgICAg
Q29sb3IgbV9jdXJyZW50Q29sb3I7Ci0gICAgICAgIENvbG9yIG1faW5pdGlhbENvbG9yOwotCi0g
ICAgICAgIFJlZlB0cjxTVkdDb2xvcj4gbV90b0NvbG9yOwotICAgICAgICBSZWZQdHI8U1ZHQ29s
b3I+IG1fZnJvbUNvbG9yOwotCi0gICAgICAgIGludCBtX2N1cnJlbnRJdGVtOwotICAgICAgICBp
bnQgbV9yZWREaWZmOwotICAgICAgICBpbnQgbV9ncmVlbkRpZmY7Ci0gICAgICAgIGludCBtX2Js
dWVEaWZmOworICAgICAgICBDb2xvciBtX2Jhc2VDb2xvcjsKKyAgICAgICAgQ29sb3IgbV9hbmlt
YXRlZENvbG9yOworCisgICAgICAgIENvbG9yIG1fdG9Db2xvcjsKKyAgICAgICAgQ29sb3IgbV9m
cm9tQ29sb3I7CisKKyAgICAgICAgQ29sb3JEaXN0YW5jZSBtX2NvbG9yRGlzdGFuY2U7CiAgICAg
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgJKHJl
dmlzaW9uIDE5MTA2KQorKysga3N2ZzIvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDkgKzM2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByb3RlY3Rl
ZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIHRoaXM7IH0KICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRh
dGVDdXJyZW50VmFsdWUoZG91YmxlIHRpbWVQZXJjZW50YWdlKSB7IHJldHVybiBmYWxzZTsgfQot
ICAgICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlU3RhcnRDb25kaXRpb24oKSB7IHJldHVybiBmYWxz
ZTsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRW5kQ29uZGl0aW9uKCkgeyB9CisgICAg
ICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlLCBmbG9h
dCB0aW1lUGVyY2VudGFnZSwgdW5zaWduZWQgdmFsdWVJbmRleCwgZmxvYXQgcGVyY2VudGFnZVBh
c3QpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9t
QW5kVG9WYWx1ZXMoRUFuaW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpIHsgcmV0dXJu
IGZhbHNlOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBpbnQgbV9jdXJyZW50SXRlbTsKSW5k
ZXg6IGtzdmcyL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3N2ZzIvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMTkxMDYpCisr
KyBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CisgICAgCit1c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7CiAKIFNWR0FuaW1h
dGVNb3Rpb25FbGVtZW50OjpTVkdBbmltYXRlTW90aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU1ZHQW5pbWF0aW9uRWxlbWVudCh0
YWdOYW1lLCBkb2MpCkBAIC00Miw3ICs0NCwzMCBAQCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6
flNWR0FuaW1hdGVNb3RpCiAKIGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlk
VGFyZ2V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gKFNWR0FuaW1hdGlvbkVsZW1lbnQ6Omhhc1Zh
bGlkVGFyZ2V0KCkgJiYgdGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSk7
CisgICAgaWYgKCFTVkdBbmltYXRpb25FbGVtZW50OjpoYXNWYWxpZFRhcmdldCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF0YXJnZXRFbGVtZW50KCktPmlzU3R5bGVkVHJhbnNm
b3JtYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gU3BlYzogU1ZHIDEuMSBz
ZWN0aW9uIDE5LjIuMTUKKyAgICBpZiAodGFyZ2V0RWxlbWVudCgpLT5oYXNUYWdOYW1lKGdUYWcp
CisgICAgICAgIHx8IHRhcmdldEVsZW1lbnQoKS0+aGFzVGFnTmFtZShkZWZzVGFnKQorICAgICAg
ICB8fCB0YXJnZXRFbGVtZW50KCktPmhhc1RhZ05hbWUodXNlVGFnKQorICAgICAgICB8fCB0YXJn
ZXRFbGVtZW50KCktPmhhc1RhZ05hbWUoaW1hZ2VUYWcpCisgICAgICAgIHx8IHRhcmdldEVsZW1l
bnQoKS0+aGFzVGFnTmFtZShzd2l0Y2hUYWcpCisgICAgICAgIHx8IHRhcmdldEVsZW1lbnQoKS0+
aGFzVGFnTmFtZShwYXRoVGFnKQorICAgICAgICB8fCB0YXJnZXRFbGVtZW50KCktPmhhc1RhZ05h
bWUocmVjdFRhZykKKyAgICAgICAgfHwgdGFyZ2V0RWxlbWVudCgpLT5oYXNUYWdOYW1lKGNpcmNs
ZVRhZykKKyAgICAgICAgfHwgdGFyZ2V0RWxlbWVudCgpLT5oYXNUYWdOYW1lKGVsbGlwc2VUYWcp
CisgICAgICAgIHx8IHRhcmdldEVsZW1lbnQoKS0+aGFzVGFnTmFtZShsaW5lVGFnKQorICAgICAg
ICB8fCB0YXJnZXRFbGVtZW50KCktPmhhc1RhZ05hbWUocG9seWxpbmVUYWcpCisgICAgICAgIHx8
IHRhcmdldEVsZW1lbnQoKS0+aGFzVGFnTmFtZShwb2x5Z29uVGFnKQorICAgICAgICB8fCB0YXJn
ZXRFbGVtZW50KCktPmhhc1RhZ05hbWUodGV4dFRhZykKKyAgICAgICAgfHwgdGFyZ2V0RWxlbWVu
dCgpLT5oYXNUYWdOYW1lKGNsaXBQYXRoVGFnKQorICAgICAgICB8fCB0YXJnZXRFbGVtZW50KCkt
Pmhhc1RhZ05hbWUobWFza1RhZykKKyAgICAgICAgfHwgdGFyZ2V0RWxlbWVudCgpLT5oYXNUYWdO
YW1lKGFUYWcpCisgICAgICAgIHx8IHRhcmdldEVsZW1lbnQoKS0+aGFzVGFnTmFtZShmb3JlaWdu
T2JqZWN0VGFnKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOwogfQog
CiB2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUqIGF0dHIpCkBAIC04OCwyMSArMTEzLDI2IEBAIFBhdGggU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQ6OmFuaW1hdGlvblAKICAgICByZXR1cm4gUGF0aCgpOwogfQogCi1ib29sIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50Ojp1cGRhdGVDdXJyZW50VmFsdWUoZG91YmxlIHRpbWVQZXJj
ZW50YWdlKQorYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6dXBkYXRlQW5pbWF0ZWRWYWx1
ZShFQW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVkIHZhbHVlSW5k
ZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpoYW5kbGVTdGFydENvbmRpdGlvbigpCitib29sIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoRUFuaW1hdGlv
bk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmFwcGx5QW5pbWF0aW9uVG9WYWx1ZShTVkdUcmFu
c2Zvcm1MaXN0KiB0YXJnZXRUcmFuc2Zvcm1zKQorYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVu
dDo6dXBkYXRlQW5pbWF0aW9uQmFzZVZhbHVlRnJvbUVsZW1lbnQoKQogewotICAgIEV4Y2VwdGlv
bkNvZGUgZWM7Ci0gICAgaWYgKCFpc0FkZGl0aXZlKCkpCi0gICAgICAgIHRhcmdldFRyYW5zZm9y
bXMtPmNsZWFyKGVjKTsKKyAgICAvLyBub3QgaW1wbGVtZW50ZWQsIHJlbW92ZSBzdXBlciBjYWxs
IHVwb24gaW1wbGVtZW50YXRpb24KKyAgICByZXR1cm4gU1ZHQW5pbWF0aW9uRWxlbWVudDo6dXBk
YXRlQW5pbWF0aW9uQmFzZVZhbHVlRnJvbUVsZW1lbnQoKTsKK30KKwordm9pZCBTVkdBbmltYXRl
TW90aW9uRWxlbWVudDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KCkKK3sKKyAgICAvLyBu
b3QgaW1wbGVtZW50ZWQsIHJlbW92ZSBzdXBlciBjYWxsIHVwb24gaW1wbGVtZW50YXRpb24KKyAg
ICBTVkdBbmltYXRpb25FbGVtZW50OjphcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQoKTsKIH0K
IAogfQpJbmRleDoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga3N2ZzIvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHJldmlzaW9uIDE5MTA2
KQorKysga3N2ZzIvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDE3ICszNiwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIAogICAgICAg
ICB2aXJ0dWFsIGJvb2wgaGFzVmFsaWRUYXJnZXQoKSBjb25zdDsKICAgICAgICAgCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLSAg
ICAgICAgCi0gICAgICAgIHZvaWQgYXBwbHlBbmltYXRpb25Ub1ZhbHVlKFNWR1RyYW5zZm9ybUxp
c3QqKTsKKyAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUFuaW1hdGlvbkJhc2VWYWx1ZUZyb21F
bGVtZW50KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1l
bnQoKTsKICAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUqKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgUGF0aCBhbmlt
YXRpb25QYXRoKCk7CiAgICAgICAgIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBj
b25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0K
ICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVDdXJyZW50VmFsdWUoZG91Ymxl
IHRpbWVQZXJjZW50YWdlKTsKLSAgICAgICAgdmlydHVhbCBib29sIGhhbmRsZVN0YXJ0Q29uZGl0
aW9uKCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRp
b25Nb2RlLCBmbG9hdCB0aW1lUGVyY2VudGFnZSwgdW5zaWduZWQgdmFsdWVJbmRleCwgZmxvYXQg
cGVyY2VudGFnZVBhc3QpOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRv
VmFsdWVzKEVBbmltYXRpb25Nb2RlLCB1bnNpZ25lZCB2YWx1ZUluZGV4KTsKICAgICAgICAgCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgUGF0aCBtX3BhdGg7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHQW5p
bWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdBbmlt
YXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5MTA2KQorKysga3N2ZzIvc3ZnL1NW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQx
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6
U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQqIGRvYykKICAgICA6IFNWR0FuaW1hdGlvbkVsZW1lbnQodGFnTmFtZSwgZG9jKQot
ICAgICwgbV9jdXJyZW50SXRlbSgtMSkKICAgICAsIG1fdHlwZShTVkdUcmFuc2Zvcm06OlNWR19U
UkFOU0ZPUk1fVU5LTk9XTikKLSAgICAsIG1fcm90YXRlU3BlY2lhbENhc2UoZmFsc2UpCi0gICAg
LCBtX3RvUm90YXRlU3BlY2lhbENhc2UoZmFsc2UpCi0gICAgLCBtX2Zyb21Sb3RhdGVTcGVjaWFs
Q2FzZShmYWxzZSkKIHsKIH0KIApAQCAtNzYsMjIyICs3Miw4NiBAQCB2b2lkIFNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50OjpwYXJzZU1hCiAgICAgICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi12b2lkIFNWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50OjpzdG9yZUluaXRpYWxWYWx1ZSgpCitib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVt
ZW50Ojp1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUsIGZs
b2F0IHRpbWVQZXJjZW50YWdlLCB1bnNpZ25lZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJjZW50YWdl
UGFzdCkKIHsKLSAgICBtX2luaXRpYWxUcmFuc2Zvcm0gPSBTVkdUcmFuc2Zvcm0oKTsKLSAgICAK
LSAgICAvLyBTYXZlIGluaXRpYWwgdHJhbnNmb3JtLi4uIChuZWVkZWQgZm9yIGZpbGw9InJlbW92
ZSIgb3IgYWRkaXR2ZT0ic3VtIikKLSAgICBpZiAodGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRy
YW5zZm9ybWFibGUoKSkgewotICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCog
dHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPih0
YXJnZXRFbGVtZW50KCkpOwotICAgICAgICBSZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4gdHJhbnNm
b3JtTGlzdCA9IHRyYW5zZm9ybS0+dHJhbnNmb3JtQmFzZVZhbHVlKCk7Ci0gICAgICAgIGlmICh0
cmFuc2Zvcm1MaXN0KSB7Ci0gICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IHRyYW5zZm9ybUxpc3QtPm51bWJl
ck9mSXRlbXMoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgU1ZHVHJhbnNmb3JtIHZhbHVlID0g
dHJhbnNmb3JtTGlzdC0+Z2V0SXRlbShpLCBlYyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3JvbmcgaWYgdGhlIGluaXRpYWwgdHJhbnNmb3Jt
IGxpc3QgaGFzIG5vdCBiZWVuIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUu
dHlwZSgpID09IG1fdHlwZSkgewotICAgICAgICAgICAgICAgICAgICBtX2luaXRpYWxUcmFuc2Zv
cm0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChhbmltYXRpb25Nb2Rl
ID09IFRPX0FOSU1BVElPTikKKyAgICAgICAgLy8gdG8tYW5pbWF0aW9ucyBoYXZlIGEgc3BlY2lh
bCBlcXVhdGlvbjogdmFsdWUgPSAodG8gLSBiYXNlKSAqICh0aW1lL2R1cmF0aW9uKSArIGJhc2UK
KyAgICAgICAgbV9hbmltYXRlZFRyYW5zZm9ybSA9IFNWR1RyYW5zZm9ybURpc3RhbmNlKG1fYmFz
ZVRyYW5zZm9ybSwgbV90b1RyYW5zZm9ybSkuc2NhbGVkRGlzdGFuY2UodGltZVBlcmNlbnRhZ2Up
LmFkZFRvU1ZHVHJhbnNmb3JtKG1fYmFzZVRyYW5zZm9ybSk7CisgICAgZWxzZQorICAgICAgICBt
X2FuaW1hdGVkVHJhbnNmb3JtID0gbV90cmFuc2Zvcm1EaXN0YW5jZS5zY2FsZWREaXN0YW5jZShw
ZXJjZW50YWdlUGFzdCkuYWRkVG9TVkdUcmFuc2Zvcm0obV9mcm9tVHJhbnNmb3JtKTsKKyAgICBy
ZXR1cm4gKG1fYW5pbWF0ZWRUcmFuc2Zvcm0gIT0gbV9iYXNlVHJhbnNmb3JtKTsKIH0KIAotdm9p
ZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cmVzZXRWYWx1ZXMoKQorYm9vbCBTVkdBbmlt
YXRlVHJhbnNmb3JtRWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uQmFzZVZhbHVlRnJvbUVsZW1lbnQo
KQogewotICAgIG1fY3VycmVudEl0ZW0gPSAtMTsKKyAgICBtX2Jhc2VUcmFuc2Zvcm0gPSBTVkdU
cmFuc2Zvcm0oKTsKICAgICBtX3RvVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtKCk7CiAgICAgbV9m
cm9tVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtKCk7Ci0gICAgbV9pbml0aWFsVHJhbnNmb3JtID0g
U1ZHVHJhbnNmb3JtKCk7Ci19Ci0KLWJvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnVw
ZGF0ZUN1cnJlbnRWYWx1ZShkb3VibGUgdGltZVBlcmNlbnRhZ2UpCi17Ci0gICAgQWZmaW5lVHJh
bnNmb3JtIHFUb01hdHJpeCwgcUZyb21NYXRyaXg7Ci0gICAgZG91YmxlIHVzZVRpbWVQZXJjZW50
YWdlID0gdGltZVBlcmNlbnRhZ2U7Ci0gICAgCi0gICAgaWYgKG1fdmFsdWVzKSB7Ci0gICAgICAg
IGludCBpdGVtQnlQZXJjZW50YWdlID0gY2FsY3VsYXRlQ3VycmVudFZhbHVlSXRlbSh0aW1lUGVy
Y2VudGFnZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaXRlbUJ5UGVyY2VudGFnZSA9PSAtMSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX2N1cnJl
bnRJdGVtICE9IGl0ZW1CeVBlcmNlbnRhZ2UpIHsgLy8gSXRlbSBjaGFuZ2VkLi4uCi0gICAgICAg
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8g
RXh0cmFjdCBjdXJyZW50ICdmcm9tJyAvICd0bycgdmFsdWVzCi0gICAgICAgICAgICBTdHJpbmcg
dmFsdWUxID0gbV92YWx1ZXMtPmdldEl0ZW0oaXRlbUJ5UGVyY2VudGFnZSwgZWMpOwotICAgICAg
ICAgICAgU3RyaW5nIHZhbHVlMiA9IG1fdmFsdWVzLT5nZXRJdGVtKGl0ZW1CeVBlcmNlbnRhZ2Ug
KyAxLCBlYyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBuZXcgZnJv
bS90byB0cmFuc2Zvcm0gdmFsdWVzLi4uCi0gICAgICAgICAgICBpZiAoIXZhbHVlMS5pc0VtcHR5
KCkgJiYgIXZhbHVlMi5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIGFwcGx5ID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgaWYgKG1fdG9UcmFuc2Zvcm0uaXNWYWxpZCgpICYmIG1f
ZnJvbVRyYW5zZm9ybS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcVRvTWF0cml4
ID0gbV90b1RyYW5zZm9ybS5tYXRyaXgoKTsKLSAgICAgICAgICAgICAgICAgICAgcUZyb21NYXRy
aXggPSBtX2Zyb21UcmFuc2Zvcm0ubWF0cml4KCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBhcHBseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHVzZVRp
bWVQZXJjZW50YWdlID0gMS4wOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBtX3RvVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZSh2YWx1
ZTIpOwotICAgICAgICAgICAgICAgIG1fdG9Sb3RhdGVTcGVjaWFsQ2FzZSA9IG1fcm90YXRlU3Bl
Y2lhbENhc2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9mcm9tVHJhbnNm
b3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZSh2YWx1ZTEpOwotICAgICAgICAgICAgICAgIG1fZnJv
bVJvdGF0ZVNwZWNpYWxDYXNlID0gbV9yb3RhdGVTcGVjaWFsQ2FzZTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRJdGVtID0gaXRlbUJ5UGVyY2VudGFnZTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWFwcGx5KQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZSBpZiAobV90b1RyYW5zZm9ybS5pc1ZhbGlkKCkgJiYgbV9mcm9tVHJhbnNmb3JtLmlzVmFs
aWQoKSkKLSAgICAgICAgICAgIHVzZVRpbWVQZXJjZW50YWdlID0gY2FsY3VsYXRlUmVsYXRpdmVU
aW1lUGVyY2VudGFnZSh0aW1lUGVyY2VudGFnZSwgbV9jdXJyZW50SXRlbSk7Ci0gICAgfQorICAg
IG1fYW5pbWF0ZWRUcmFuc2Zvcm0gPSBTVkdUcmFuc2Zvcm0oKTsKICAgICAKLSAgICBpZiAobV90
b1RyYW5zZm9ybS5pc1ZhbGlkKCkgJiYgcVRvTWF0cml4LmlzSWRlbnRpdHkoKSkKLSAgICAgICAg
cVRvTWF0cml4ID0gbV90b1RyYW5zZm9ybS5tYXRyaXgoKTsKKyAgICBpZiAoIXRhcmdldEVsZW1l
bnQoKS0+aXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKLSAgICBpZiAobV9mcm9tVHJhbnNmb3JtLmlzVmFsaWQoKSAmJiBxRnJvbU1hdHJpeC5pc0lk
ZW50aXR5KCkpCi0gICAgICAgIHFGcm9tTWF0cml4ID0gbV9mcm9tVHJhbnNmb3JtLm1hdHJpeCgp
OworICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiB0cmFuc2Zvcm0gPSBzdGF0aWNf
Y2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KHRhcmdldEVsZW1lbnQoKSk7Cisg
ICAgUmVmUHRyPFNWR1RyYW5zZm9ybUxpc3Q+IHRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm0tPnRy
YW5zZm9ybSgpOworICAgIGlmICghdHJhbnNmb3JtTGlzdCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAotICAgIG1fY3VycmVudFRyYW5zZm9ybS5yZXNldCgpOwotICAgIAotICAgIGlmIChp
c0FjY3VtdWxhdGVkKCkgJiYgcmVwZWF0aW9ucygpICE9IDAuMCkKLSAgICAgICAgbV9jdXJyZW50
VHJhbnNmb3JtLm11bHRpcGx5KG1fbGFzdFRyYW5zZm9ybSk7Ci0gICAgCi0gICAgc3dpdGNoICht
X3R5cGUpIHsKLSAgICAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNM
QVRFOgotICAgICAgICB7Ci0gICAgICAgICAgICBkb3VibGUgZHggPSAoKHFUb01hdHJpeC5lKCkg
LSBxRnJvbU1hdHJpeC5lKCkpICogdXNlVGltZVBlcmNlbnRhZ2UpICsgcUZyb21NYXRyaXguZSgp
OwotICAgICAgICAgICAgZG91YmxlIGR5ID0gKChxVG9NYXRyaXguZigpIC0gcUZyb21NYXRyaXgu
ZigpKSAqIHVzZVRpbWVQZXJjZW50YWdlKSArIHFGcm9tTWF0cml4LmYoKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgbV9jdXJyZW50VHJhbnNmb3JtLnRyYW5zbGF0ZShkeCwgZHkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNW
R19UUkFOU0ZPUk1fU0NBTEU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRvdWJsZSBzeCA9ICgo
cVRvTWF0cml4LmEoKSAtIHFGcm9tTWF0cml4LmEoKSkgKiB1c2VUaW1lUGVyY2VudGFnZSkgKyBx
RnJvbU1hdHJpeC5hKCk7Ci0gICAgICAgICAgICBkb3VibGUgc3kgPSAoKHFUb01hdHJpeC5kKCkg
LSBxRnJvbU1hdHJpeC5kKCkpICogdXNlVGltZVBlcmNlbnRhZ2UpICsgcUZyb21NYXRyaXguZCgp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2N1cnJlbnRUcmFuc2Zvcm0uc2NhbGUoc3gs
IHN5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgU1ZHVHJh
bnNmb3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURToKLSAgICAgICAgewotICAgICAgICAgICAgZG91
YmxlIHRvQW5nbGUsIHRvQ3gsIHRvQ3ksIGZyb21BbmdsZSwgZnJvbUN4LCBmcm9tQ3k7Ci0gICAg
ICAgICAgICBjYWxjdWxhdGVSb3RhdGlvbkZyb21NYXRyaXgocVRvTWF0cml4LCB0b0FuZ2xlLCB0
b0N4LCB0b0N5KTsKLSAgICAgICAgICAgIGNhbGN1bGF0ZVJvdGF0aW9uRnJvbU1hdHJpeChxRnJv
bU1hdHJpeCwgZnJvbUFuZ2xlLCBmcm9tQ3gsIGZyb21DeSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChtX3RvUm90YXRlU3BlY2lhbENhc2UpCi0gICAgICAgICAgICAgICAgdG9Bbmds
ZSA9IChscm91bmQodG9BbmdsZSkgPT0gMSkgPyAwLjAgOiAzNjAuMDsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKG1fZnJvbVJvdGF0ZVNwZWNpYWxDYXNlKQotICAgICAgICAgICAgICAg
IGZyb21BbmdsZSA9IChscm91bmQoZnJvbUFuZ2xlKSA9PSAxKSA/IDAuMCA6IDM2MC4wOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBkb3VibGUgYW5nbGUgPSAoKHRvQW5nbGUgLSBmcm9tQW5n
bGUpICogdXNlVGltZVBlcmNlbnRhZ2UpICsgZnJvbUFuZ2xlOwotICAgICAgICAgICAgZG91Ymxl
IGN4ID0gKHRvQ3ggLSBmcm9tQ3gpICogdXNlVGltZVBlcmNlbnRhZ2UgKyBmcm9tQ3g7Ci0gICAg
ICAgICAgICBkb3VibGUgY3kgPSAodG9DeSAtIGZyb21DeSkgKiB1c2VUaW1lUGVyY2VudGFnZSAr
IGZyb21DeTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9jdXJyZW50VHJhbnNmb3JtLnRy
YW5zbGF0ZShjeCwgY3kpOwotICAgICAgICAgICAgbV9jdXJyZW50VHJhbnNmb3JtLnJvdGF0ZShh
bmdsZSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRUcmFuc2Zvcm0udHJhbnNsYXRlKC1jeCwgLWN5
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgU1ZHVHJhbnNm
b3JtOjpTVkdfVFJBTlNGT1JNX1NLRVdYOgotICAgICAgICB7Ci0gICAgICAgICAgICBkb3VibGUg
c3ggPSAoU1ZHQW5nbGU6OnRvZGVnKGF0YW4ocVRvTWF0cml4LmMoKSkgLSBhdGFuKHFGcm9tTWF0
cml4LmMoKSkpICoKLSAgICAgICAgICAgICAgICAgICAgICAgICB1c2VUaW1lUGVyY2VudGFnZSkg
KyBTVkdBbmdsZTo6dG9kZWcoYXRhbihxRnJvbU1hdHJpeC5jKCkpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9jdXJyZW50VHJhbnNmb3JtLnNoZWFyKHN4LCAxLjApOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFO
U0ZPUk1fU0tFV1k6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRvdWJsZSBzeSA9IChTVkdBbmds
ZTo6dG9kZWcoYXRhbihxVG9NYXRyaXguYigpKSAtIGF0YW4ocUZyb21NYXRyaXguYigpKSkgKgot
ICAgICAgICAgICAgICAgICAgICAgICAgIHVzZVRpbWVQZXJjZW50YWdlKSArIFNWR0FuZ2xlOjp0
b2RlZyhhdGFuKHFGcm9tTWF0cml4LmIoKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBt
X2N1cnJlbnRUcmFuc2Zvcm0uc2hlYXIoMS4wLCBzeSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQorICAg
IG1fYmFzZVRyYW5zZm9ybSA9IHRyYW5zZm9ybUxpc3QtPmNvbmNhdGVuYXRlRm9yVHlwZShtX3R5
cGUpOworICAgICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdBbmltYXRlVHJh
bnNmb3JtRWxlbWVudDo6aGFuZGxlU3RhcnRDb25kaXRpb24oKQordm9pZCBTVkdBbmltYXRlVHJh
bnNmb3JtRWxlbWVudDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KCkKIHsKLSAgICBzdG9y
ZUluaXRpYWxWYWx1ZSgpOworICAgIGlmICghdGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5z
Zm9ybWFibGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50KiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudCo+KHRhcmdldEVsZW1lbnQoKSk7CisgICAgUmVmUHRyPFNWR1RyYW5zZm9ybUxp
c3Q+IHRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm0tPnRyYW5zZm9ybSgpOworICAgIGlmICghdHJh
bnNmb3JtTGlzdCkKKyAgICAgICAgcmV0dXJuOwogICAgIAotICAgIHN3aXRjaCAoZGV0ZWN0QW5p
bWF0aW9uTW9kZSgpKSB7Ci0gICAgICAgIGNhc2UgVE9fQU5JTUFUSU9OOgotICAgICAgICBjYXNl
IEZST01fVE9fQU5JTUFUSU9OOgotICAgICAgICB7ICAgICAgICAKLSAgICAgICAgICAgIG1fdG9U
cmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybVZhbHVlKG1fdG8pOwotICAgICAgICAgICAgbV90b1Jv
dGF0ZVNwZWNpYWxDYXNlID0gbV9yb3RhdGVTcGVjaWFsQ2FzZTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKCFtX2Zyb20uaXNFbXB0eSgpKSB7IC8vIGZyb20tdG8gYW5pbWF0aW9uCi0g
ICAgICAgICAgICAgICAgbV9mcm9tVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX2Zy
b20pOwotICAgICAgICAgICAgICAgIG1fZnJvbVJvdGF0ZVNwZWNpYWxDYXNlID0gbV9yb3RhdGVT
cGVjaWFsQ2FzZTsKLSAgICAgICAgICAgIH0gZWxzZSB7IC8vIHRvIGFuaW1hdGlvbgotICAgICAg
ICAgICAgICAgIG1fZnJvbVRyYW5zZm9ybSA9IG1faW5pdGlhbFRyYW5zZm9ybTsKLSAgICAgICAg
ICAgICAgICBtX2Zyb21Sb3RhdGVTcGVjaWFsQ2FzZSA9IGZhbHNlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fZnJvbVRyYW5zZm9ybS5pc1ZhbGlkKCkp
Ci0gICAgICAgICAgICAgICAgbV9mcm9tVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtKCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQllf
QU5JTUFUSU9OOgotICAgICAgICBjYXNlIEZST01fQllfQU5JTUFUSU9OOgotICAgICAgICB7Ci0g
ICAgICAgICAgICBtX3RvVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX2J5KTsKLSAg
ICAgICAgICAgIG1fdG9Sb3RhdGVTcGVjaWFsQ2FzZSA9IG1fcm90YXRlU3BlY2lhbENhc2U7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9mcm9tLmlzRW1wdHkoKSkgeyAvLyBmcm9t
LWJ5IGFuaW1hdGlvbgotICAgICAgICAgICAgICAgIG1fZnJvbVRyYW5zZm9ybSA9IHBhcnNlVHJh
bnNmb3JtVmFsdWUobV9mcm9tKTsKLSAgICAgICAgICAgICAgICBtX2Zyb21Sb3RhdGVTcGVjaWFs
Q2FzZSA9IG1fcm90YXRlU3BlY2lhbENhc2U7Ci0gICAgICAgICAgICB9IGVsc2UgeyAvLyBieSBh
bmltYXRpb24KLSAgICAgICAgICAgICAgICBtX2Zyb21UcmFuc2Zvcm0gPSBtX2luaXRpYWxUcmFu
c2Zvcm07Ci0gICAgICAgICAgICAgICAgbV9mcm9tUm90YXRlU3BlY2lhbENhc2UgPSBmYWxzZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2Zyb21UcmFu
c2Zvcm0uaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIG1fZnJvbVRyYW5zZm9ybSA9IFNWR1Ry
YW5zZm9ybSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBW
QUxVRVNfQU5JTUFUSU9OOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8va2RFcnJvcigpIDw8IGtfZnVuY2luZm8gPDwgIiBVbmFi
bGUgdG8gZGV0ZWN0IGFuaW1hdGlvbiBtb2RlISBBYm9ydGluZyBjcmVhdGlvbiEiIDw8IGVuZGw7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnVwZGF0ZUxhc3RW
YWx1ZVdpdGhDdXJyZW50KCkKLXsKLSAgICBtX2xhc3RUcmFuc2Zvcm0gPSBtX2N1cnJlbnRUcmFu
c2Zvcm07Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmFwcGx5QW5pbWF0
aW9uVG9WYWx1ZShTVkdUcmFuc2Zvcm1MaXN0KiB0YXJnZXRUcmFuc2Zvcm1zKQotewogICAgIEV4
Y2VwdGlvbkNvZGUgZWM7CiAgICAgaWYgKCFpc0FkZGl0aXZlKCkpCi0gICAgICAgIHRhcmdldFRy
YW5zZm9ybXMtPmNsZWFyKGVjKTsKKyAgICAgICAgdHJhbnNmb3JtTGlzdC0+Y2xlYXIoZWMpOwog
ICAgIAotICAgIHRhcmdldFRyYW5zZm9ybXMtPmFwcGVuZEl0ZW0oU1ZHVHJhbnNmb3JtKG1fY3Vy
cmVudFRyYW5zZm9ybSksIGVjKTsKKyAgICB0cmFuc2Zvcm1MaXN0LT5hcHBlbmRJdGVtKG1fYW5p
bWF0ZWRUcmFuc2Zvcm0sIGVjKTsKKyAgICB0cmFuc2Zvcm0tPnVwZGF0ZUxvY2FsVHJhbnNmb3Jt
KHRyYW5zZm9ybUxpc3QuZ2V0KCkpOworfQorCitib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVt
ZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoRUFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9k
ZSwgdW5zaWduZWQgdmFsdWVJbmRleCkKK3sKKyAgICBzd2l0Y2ggKGRldGVjdEFuaW1hdGlvbk1v
ZGUoKSkgeworICAgIGNhc2UgRlJPTV9UT19BTklNQVRJT046CisgICAgICAgIG1fZnJvbVRyYW5z
Zm9ybSA9IHBhcnNlVHJhbnNmb3JtVmFsdWUobV9mcm9tKTsKKyAgICAgICAgLy8gZmFsbCB0aHJv
dWdoCisgICAgY2FzZSBUT19BTklNQVRJT046CisgICAgICAgIG1fdG9UcmFuc2Zvcm0gPSBwYXJz
ZVRyYW5zZm9ybVZhbHVlKG1fdG8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZST01fQllf
QU5JTUFUSU9OOgorICAgICAgICBtX2Zyb21UcmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybVZhbHVl
KG1fZnJvbSk7CisgICAgICAgIG1fdG9UcmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybVZhbHVlKG1f
YnkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJZX0FOSU1BVElPTjoKKyAgICAgICAgbV9m
cm9tVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX2Zyb20pOworICAgICAgICBtX3Rv
VHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtRGlzdGFuY2U6OmFkZFNWR1RyYW5zZm9ybXMobV9mcm9t
VHJhbnNmb3JtLCBwYXJzZVRyYW5zZm9ybVZhbHVlKG1fYnkpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBWQUxVRVNfQU5JTUFUSU9OOgorICAgICAgICBtX2Zyb21UcmFuc2Zvcm0gPSBwYXJz
ZVRyYW5zZm9ybVZhbHVlKG1fdmFsdWVzW3ZhbHVlSW5kZXhdKTsKKyAgICAgICAgbV90b1RyYW5z
Zm9ybSA9ICgodmFsdWVJbmRleCArIDEpIDwgbV92YWx1ZXMuc2l6ZSgpKSA/IHBhcnNlVHJhbnNm
b3JtVmFsdWUobV92YWx1ZXNbdmFsdWVJbmRleCArIDFdKSA6IG1fZnJvbVRyYW5zZm9ybTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBOT19BTklNQVRJT046CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KKyAgICBtX3RyYW5zZm9ybURpc3RhbmNlID0gU1ZHVHJhbnNmb3Jt
RGlzdGFuY2UobV9mcm9tVHJhbnNmb3JtLCBtX3RvVHJhbnNmb3JtKTsKKyAgICByZXR1cm4gIW1f
dHJhbnNmb3JtRGlzdGFuY2UuaXNaZXJvKCk7CiB9CiAKIFNWR1RyYW5zZm9ybSBTVkdBbmltYXRl
VHJhbnNmb3JtRWxlbWVudDo6cGFyc2VUcmFuc2Zvcm1WYWx1ZShjb25zdCBTdHJpbmcmIGRhdGEp
IGNvbnN0CiB7CisgICAgLy8gRklYTUU6IFRoaXMgcGFyc2VyIHNob3VsZCBiZSBjb21iaW5lZCB3
aXRoIHRoZSBvbmUgaW4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1BdHRyaWJ1dGUK
KyAgICAKICAgICBTdHJpbmcgcGFyc2UgPSBkYXRhLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgIGlm
IChwYXJzZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm0oKTsKQEAgLTM0
MiwyMSArMjAyLDYgQEAgU1ZHVHJhbnNmb3JtIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ogog
ICAgICAgICAgICAgZWxzZSAKICAgICAgICAgICAgICAgICBhbmdsZSA9IHBhcnNlLnRvRG91Ymxl
KCk7CiAKLSAgICAgICAgICAgIC8vIE9rIG5vdyBoZXJlJ3MgYSBoYWNrIHRvIG1ha2UgaXQgcG9z
c2libGUgdG8gY2FsY3VsYXRlIGN4L2N5IHZhbHVlcywgaWYgYW5nbGUgPSAwIAotICAgICAgICAg
ICAgLy8gb3IgYW5nbGU9MzYwIC0+IGZvciBhbmdsZT0wIG91ciBtYXRyaXggaXMgbTExOiAxIG0x
MjogMCBtMjE6IDAgbTIyOiAxIGR4OiAwIGR5OiAwCi0gICAgICAgICAgICAvLyBBcyB5b3UgY2Fu
IHNlZSB0aGVyZSBpcyBubyB3YXkgdG8gcmV0cmlldmUgdGhlIGN4L2N5IHZhbHVlcyBmb3IgdGhl
c2UgYW5nbGVzLgotICAgICAgICAgICAgLy8gLT4gc2V0ICdtX3JvdGF0ZVNwZWNpYWxDYXNlJyB0
byB0cnVlLCBhbmQgc2F2ZSBhbmdsZSA9IDEvMzU5IC0+IHRoaXMgd2F5IHdlIGNhbiBjYWxjdWxh
dGUKLSAgICAgICAgICAgIC8vICAgIHRoZSBjeC9jeSB2YWx1ZXMsIHdoaWxlIGtlZXBpbmcgdGhp
cyB1YmVyLW9wdGltaXplZCB3YXkgb2YgaGFuZGxpbmcgPGFuaW1hdGVUcmFuc2Zvcm0+IQotICAg
ICAgICAgICAgbV9yb3RhdGVTcGVjaWFsQ2FzZSA9IGZhbHNlOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoYW5nbGUgPT0gMC4wKSB7Ci0gICAgICAgICAgICAgICAgYW5nbGUgPSBhbmds
ZSArIDEuMDsKLSAgICAgICAgICAgICAgICBtX3JvdGF0ZVNwZWNpYWxDYXNlID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoYW5nbGUgPT0gMzYwLjApIHsKLSAgICAgICAgICAgICAgICBh
bmdsZSA9IGFuZ2xlIC0gMS4wOwotICAgICAgICAgICAgICAgIG1fcm90YXRlU3BlY2lhbENhc2Ug
PSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCiAgICAgICAgICAgICBwYXJzZWRU
cmFuc2Zvcm0uc2V0Um90YXRlKGFuZ2xlLCBjeCwgY3kpOwogICAgICAgICAgICAgYnJlYWs7ICAg
IAogICAgICAgICB9CkBAIC0zNzksMzYgKzIyNCw2IEBAIFNWR1RyYW5zZm9ybSBTVkdBbmltYXRl
VHJhbnNmb3JtRWxlbWVudDoKICAgICByZXR1cm4gcGFyc2VkVHJhbnNmb3JtOwogfQogCi12b2lk
IFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVSb3RhdGlvbkZyb21NYXRyaXgo
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgsIGRvdWJsZSYgYW5nbGUsIGRvdWJsZSYgY3gs
IGRvdWJsZSYgY3kpIGNvbnN0Ci17Ci0gICAgZG91YmxlIGNvc2EgPSBtYXRyaXguYSgpOwotICAg
IGRvdWJsZSBzaW5hID0gLW1hdHJpeC5jKCk7Ci0KLSAgICBpZiAoY29zYSAhPSAxLjApIHsKLSAg
ICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBhbmdsZSB2aWEgbWFnaWMgOykKLSAgICAgICAgZG91Ymxl
IHRlbXAgPSBTVkdBbmdsZTo6dG9kZWcoYXNpbihzaW5hKSk7Ci0gICAgICAgIGFuZ2xlID0gU1ZH
QW5nbGU6OnRvZGVnKGFjb3MoY29zYSkpOwotICAgICAgICBpZiAodGVtcCA8IDApCi0gICAgICAg
ICAgICBhbmdsZSA9IDM2MC4wIC0gYW5nbGU7Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgcmVz
ID0gKDEgLSBjb3NhKSArICgoc2luYSAqIHNpbmEpIC8gKDEgLSBjb3NhKSk7Ci0gICAgICAgIAot
ICAgICAgICBjeCA9IChtYXRyaXguZSgpIC0gKChzaW5hICogbWF0cml4LmYoKSkgLyAoMSAtIGNv
c2EpKSkgLyByZXM7Ci0gICAgICAgIGN5ID0gKG1hdHJpeC5mKCkgKyAoKHNpbmEgKiBtYXRyaXgu
ZSgpKSAvICgxIC0gY29zYSkpKSAvIHJlczsKLQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgY3ggPSAwLjA7Ci0gICAgY3kgPSAwLjA7Ci0gICAgYW5nbGUgPSAwLjA7Ci19Ci0KLUFmZmlu
ZVRyYW5zZm9ybSBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Y3VycmVudFRyYW5zZm9ybSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY3VycmVudFRyYW5zZm9ybTsKLX0KLQogfQogCiAvLyB2
aW06dHM9NDpub2V0CkluZGV4OiBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAko
cmV2aXNpb24gMTkxMDYpCisrKyBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiU1ZHQW5pbWF0
aW9uRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgorI2luY2x1ZGUgIlNWR1Ry
YW5zZm9ybURpc3RhbmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsMzggKzQx
LDMwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGhhc1ZhbGlk
VGFyZ2V0KCkgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSopOwotCi0gICAgICAgIHZvaWQgYXBwbHlBbmltYXRpb25Ub1Zh
bHVlKFNWR1RyYW5zZm9ybUxpc3QqKTsKLQotICAgICAgICAvLyBIZWxwZXJzCi0gICAgICAgIFNW
R1RyYW5zZm9ybSBwYXJzZVRyYW5zZm9ybVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAg
ICAgICB2b2lkIGNhbGN1bGF0ZVJvdGF0aW9uRnJvbU1hdHJpeChjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mLCBkb3VibGUmIGFuZ2xlLCBkb3VibGUmIGN4LCBkb3VibGUmIGN5KSBjb25zdDsKLQotICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gY3VycmVudFRyYW5zZm9ybSgpIGNvbnN0OworICAgICAgICAK
KyAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUFuaW1hdGlvbkJhc2VWYWx1ZUZyb21FbGVtZW50
KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQoKTsK
IAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250
ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KLSAgICAgICAgdm9pZCBzdG9yZUlu
aXRpYWxWYWx1ZSgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRWYWx1ZXMoKTsKICAgICAg
ICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVDdXJyZW50VmFsdWUoZG91YmxlIHRpbWVQ
ZXJjZW50YWdlKTsKLSAgICAgICAgdmlydHVhbCBib29sIGhhbmRsZVN0YXJ0Q29uZGl0aW9uKCk7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMYXN0VmFsdWVXaXRoQ3VycmVudCgpOworICAg
ICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQW5pbWF0ZWRWYWx1ZShFQW5pbWF0aW9uTW9kZSwgZmxv
YXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQ
YXN0KTsKKyAgICAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhFQW5p
bWF0aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJbmRleCk7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBpbnQgbV9jdXJyZW50SXRlbTsKKyAgICAgICAgLy8gSGVscGVycworICAgICAgICBTVkdUcmFu
c2Zvcm0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICAgICAg
dm9pZCBjYWxjdWxhdGVSb3RhdGlvbkZyb21NYXRyaXgoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwg
ZG91YmxlJiBhbmdsZSwgZG91YmxlJiBjeCwgZG91YmxlJiBjeSkgY29uc3Q7CisgICAgICAgICAg
ICAKICAgICAgICAgU1ZHVHJhbnNmb3JtOjpTVkdUcmFuc2Zvcm1UeXBlIG1fdHlwZTsKIAogICAg
ICAgICBTVkdUcmFuc2Zvcm0gbV90b1RyYW5zZm9ybTsKICAgICAgICAgU1ZHVHJhbnNmb3JtIG1f
ZnJvbVRyYW5zZm9ybTsKLSAgICAgICAgU1ZHVHJhbnNmb3JtIG1faW5pdGlhbFRyYW5zZm9ybTsK
LQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sYXN0VHJhbnNmb3JtOwotICAgICAgICBBZmZp
bmVUcmFuc2Zvcm0gbV9jdXJyZW50VHJhbnNmb3JtOwogCi0gICAgICAgIG11dGFibGUgYm9vbCBt
X3JvdGF0ZVNwZWNpYWxDYXNlIDogMTsKLSAgICAgICAgYm9vbCBtX3RvUm90YXRlU3BlY2lhbENh
c2UgOiAxOwotICAgICAgICBib29sIG1fZnJvbVJvdGF0ZVNwZWNpYWxDYXNlIDogMTsKKyAgICAg
ICAgU1ZHVHJhbnNmb3JtIG1fYmFzZVRyYW5zZm9ybTsKKyAgICAgICAgU1ZHVHJhbnNmb3JtIG1f
YW5pbWF0ZWRUcmFuc2Zvcm07CisgICAgICAgIAorICAgICAgICBTVkdUcmFuc2Zvcm1EaXN0YW5j
ZSBtX3RyYW5zZm9ybURpc3RhbmNlOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IGtzdmcyL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
c3ZnMi9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5MTA2KQorKysga3N2
ZzIvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMTIg
KzEyOCwzNyBAQCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlS2V5TnVtYmVyCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGtleU51bWJlcnMuYXBwZW5kKG51bWJlcik7CiAgICAg
ICAgIAotICAgICAgICBpZiAoIShza2lwT3B0aW9uYWxTcGFjZXMocHRyLCBlbmQpICYmICpwdHIg
PT0gJzsnKSkKKyAgICAgICAgaWYgKCFza2lwT3B0aW9uYWxTcGFjZXMocHRyLCBlbmQpIHx8ICpw
dHIgIT0gJzsnKQogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBwdHIrKzsKICAgICAgICAg
c2tpcE9wdGlvbmFsU3BhY2VzKHB0ciwgZW5kKTsKICAgICB9CiB9CiAKK3N0YXRpYyB2b2lkIHBh
cnNlVmFsdWVzKFZlY3RvcjxTdHJpbmc+JiB2YWx1ZXMsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7
CisgICAgY29uc3QgVUNoYXIqIHB0ciA9IHZhbHVlLmNoYXJhY3RlcnMoKTsKKyAgICBjb25zdCBV
Q2hhciogZW5kID0gcHRyICsgdmFsdWUubGVuZ3RoKCk7CisgICAgc2tpcE9wdGlvbmFsU3BhY2Vz
KHB0ciwgZW5kKTsKKyAgICB3aGlsZSAocHRyIDwgZW5kKSB7CisgICAgICAgIC8vIFNNSUwgMy4y
LjIgOiBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZSBzcGFjZSwgYW5kIHdoaXRlIHNwYWNlIGJl
Zm9yZSBhbmQgYWZ0ZXIgc2VtaWNvbG9uIHNlcGFyYXRvcnMsIHdpbGwgYmUgaWdub3JlZC4KKyAg
ICAgICAgY29uc3QgVUNoYXIqIHZhbHVlU3RhcnQgPSBwdHI7CisgICAgICAgIHdoaWxlIChwdHIg
PCBlbmQgJiYgKnB0ciAhPSAnOycpIC8vIGNhcmVmdWwgbm90IHRvIGlnbm9yZSB3aGl0ZXNwYWNl
IGluc2lkZSB2YWx1ZXMKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICBpZiAocHRyID09IHZh
bHVlU3RhcnQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIC8vIHdhbGsg
YmFja3dhcmRzIGZyb20gdGhlIDsgdG8gaWdub3JlIGFueSB3aGl0ZXNwYWNlCisgICAgICAgIGNv
bnN0IFVDaGFyKiB2YWx1ZUVuZCA9IHB0cjsKKyAgICAgICAgd2hpbGUgKHZhbHVlU3RhcnQgPCB2
YWx1ZUVuZCAmJiBpc1doaXRlc3BhY2UoKnZhbHVlRW5kKSkKKyAgICAgICAgICAgIHZhbHVlRW5k
LS07CisgICAgICAgIAorICAgICAgICB2YWx1ZXMuYXBwZW5kKFN0cmluZyh2YWx1ZVN0YXJ0LCB2
YWx1ZUVuZCAtIHZhbHVlU3RhcnQpKTsKKyAgICAgICAgCisgICAgICAgIHNraXBPcHRpb25hbFNw
YWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCAnOycpOworICAgIH0KK30KKwogc3RhdGljIHZvaWQg
cGFyc2VLZXlTcGxpbmVzKFZlY3RvcjxTVkdBbmltYXRpb25FbGVtZW50OjpLZXlTcGxpbmU+JiBr
ZXlTcGxpbmVzLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIGRvdWJsZSBudW1iZXIgPSAw
LmY7CkBAIC0xNTcsOCArMTgyLDkgQEAgc3RhdGljIHZvaWQgcGFyc2VLZXlTcGxpbmVzKFZlY3Rv
cjxTVkdBbgogICAgICAgICBrZXlTcGxpbmUuY29udHJvbDIuc2V0WShudW1iZXIpOwogICAgICAg
ICBrZXlTcGxpbmVzLmFwcGVuZChrZXlTcGxpbmUpOwogICAgICAgICAKLSAgICAgICAgaWYgKCEo
c2tpcE9wdGlvbmFsU3BhY2VzKHB0ciwgZW5kKSAmJiAqcHRyID09ICc7JykpCisgICAgICAgIGlm
ICghc2tpcE9wdGlvbmFsU3BhY2VzKHB0ciwgZW5kKSB8fCAqcHRyICE9ICc7JykKICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgcHRyKys7CiAgICAgICAgIHNraXBPcHRpb25hbFNwYWNlcyhw
dHIsIGVuZCk7CiAgICAgfQogfQpAQCAtMjczLDggKzI5OSw4IEBAIHZvaWQgU1ZHQW5pbWF0aW9u
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHQKICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gInBhY2Vk
IikKICAgICAgICAgICAgIG1fY2FsY01vZGUgPSBDQUxDTU9ERV9QQUNFRDsKICAgICB9IGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dmFsdWVzQXR0cikgewotICAgICAgICBtX3Zh
bHVlcyA9IG5ldyBTVkdTdHJpbmdMaXN0KCk7Ci0gICAgICAgIG1fdmFsdWVzLT5wYXJzZSh2YWx1
ZSwgJzsnKTsKKyAgICAgICAgbV92YWx1ZXMuY2xlYXIoKTsKKyAgICAgICAgcGFyc2VWYWx1ZXMo
bV92YWx1ZXMsIHZhbHVlKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6a2V5VGltZXNBdHRyKSB7CiAgICAgICAgIG1fa2V5VGltZXMuY2xlYXIoKTsKICAgICAgICAg
cGFyc2VLZXlOdW1iZXJzKG1fa2V5VGltZXMsIHZhbHVlKTsKQEAgLTM5MSw4ICs0MTcsMTEgQEAg
dm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpjbG9zZVJlbmRlcmVyKAogICAgIFNWR0VsZW1lbnQ6
OmNsb3NlUmVuZGVyZXIoKTsKIH0KIAotU3RyaW5nIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnRhcmdl
dEF0dHJpYnV0ZSgpIGNvbnN0CitTdHJpbmcgU1ZHQW5pbWF0aW9uRWxlbWVudDo6dGFyZ2V0QXR0
cmlidXRlQW5pbWF0ZWRWYWx1ZSgpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9k
IGlzIG5vdCBlbnRpcmVseSBjb3JyZWN0CisgICAgLy8gSXQgZG9lcyBub3QgcHJvcGVybHkgZ3Jh
YiB0aGUgdHJ1ZSAiYW5pbVZhbCIgaW5zdGVhZCBncmFicyB0aGUgYmFzZVZhbCAob3Igc29tZXRo
aW5nIHZlcnkgY2xvc2UpCisKICAgICBpZiAoIXRhcmdldEVsZW1lbnQoKSkKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogICAgIApAQCAtNDI4LDggKzQ1NywxMCBAQCBTdHJpbmcgU1ZHQW5pbWF0
aW9uRWxlbWVudDo6dGFyZ2V0QXR0cmliCiAgICAgcmV0dXJuIHJldDsKIH0KIAotdm9pZCBTVkdB
bmltYXRpb25FbGVtZW50OjpzZXRUYXJnZXRBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogeworICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBpcyBu
b3QgZW50aXJlbHkgY29ycmVjdAorICAgIC8vIEl0IGRvZXMgbm90IHByb3Blcmx5IHNldCB0aGUg
ImFuaW1WYWwiLCByYXRoZXIgaXQgc2V0cyB0aGUgImJhc2VWYWwiCiAgICAgU1ZHQW5pbWF0aW9u
RWxlbWVudDo6c2V0VGFyZ2V0QXR0cmlidXRlKHRhcmdldEVsZW1lbnQoKSwgbV9hdHRyaWJ1dGVO
YW1lLCB2YWx1ZSwgc3RhdGljX2Nhc3Q8RUF0dHJpYnV0ZVR5cGU+KG1fYXR0cmlidXRlVHlwZSkp
OwogfQogCkBAIC00ODUsNyArNTE2LDkgQEAgYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc0Fj
Y3VtdWxhdGVkKAogCiBFQW5pbWF0aW9uTW9kZSBTVkdBbmltYXRpb25FbGVtZW50OjpkZXRlY3RB
bmltYXRpb25Nb2RlKCkgY29uc3QKIHsKLSAgICBpZiAoKCFtX2Zyb20uaXNFbXB0eSgpICYmICFt
X3RvLmlzRW1wdHkoKSkgfHwgKCFtX3RvLmlzRW1wdHkoKSkpIHsgLy8gdG8vZnJvbS10byBhbmlt
YXRpb24KKyAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp2YWx1ZXNBdHRyKSkKKyAgICAg
ICAgcmV0dXJuIFZBTFVFU19BTklNQVRJT047CisgICAgZWxzZSBpZiAoKCFtX2Zyb20uaXNFbXB0
eSgpICYmICFtX3RvLmlzRW1wdHkoKSkgfHwgKCFtX3RvLmlzRW1wdHkoKSkpIHsgLy8gdG8vZnJv
bS10byBhbmltYXRpb24KICAgICAgICAgaWYgKCFtX2Zyb20uaXNFbXB0eSgpKSAvLyBmcm9tLXRv
IGFuaW1hdGlvbgogICAgICAgICAgICAgcmV0dXJuIEZST01fVE9fQU5JTUFUSU9OOwogICAgICAg
ICBlbHNlCkBAIC00OTcsNjAgKzUzMCwxMCBAQCBFQW5pbWF0aW9uTW9kZSBTVkdBbmltYXRpb25F
bGVtZW50OjpkZXRlCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBCWV9BTklNQVRJ
T047CiAgICAgfQotICAgIGVsc2UgaWYgKG1fdmFsdWVzKQotICAgICAgICByZXR1cm4gVkFMVUVT
X0FOSU1BVElPTjsKIAogICAgIHJldHVybiBOT19BTklNQVRJT047CiB9CiAKLXN0YXRpYyBpbmxp
bmUgVmVjdG9yPGRvdWJsZT4gc3RhcnRUaW1lc0ZvclZhbHVlcyhjb25zdCBTVkdTdHJpbmdMaXN0
KiB2YWx1ZXMpCi17Ci0gICAgLy8gQ2FsY3VsYXRlIHRoZSByZWxhdGl2ZSB0aW1lIHBlcmNlbnRh
Z2VzIGZvciBlYWNoICdmYWRlJy4KLSAgICAvLyBFdmVudHVhbGx5IHZhbHVlIHNwYWNpbmcgd2ls
bCBuZWVkIHRvIHRha2Uga2V5U3BsaW5lcyBpbnRvIGFjY291bnQKLSAgICB1bnNpZ25lZCBsb25n
IGl0ZW1zID0gdmFsdWVzLT5udW1iZXJPZkl0ZW1zKCk7Ci0gICAgVmVjdG9yPGRvdWJsZT4gc3Rh
cnRUaW1lcyhpdGVtcyk7Ci0gICAgc3RhcnRUaW1lc1swXSA9IDAuMDsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgaXRlbXM7ICsraSkKLSAgICAgICAgc3RhcnRUaW1lc1tpXSA9ICgoKDIu
MCAqIGkpKSAvIChpdGVtcyAtIDEpKSAvIDIuMDsKLSAgICByZXR1cm4gc3RhcnRUaW1lczsKLX0K
LQotaW50IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUN1cnJlbnRWYWx1ZUl0ZW0oZG91
YmxlIHRpbWVQZXJjZW50YWdlKQotewotICAgIGlmICghbV92YWx1ZXMpCi0gICAgICAgIHJldHVy
biAtMTsKLSAgICAKLSAgICB1bnNpZ25lZCBsb25nIGl0ZW1zID0gbV92YWx1ZXMtPm51bWJlck9m
SXRlbXMoKTsKLSAgICBWZWN0b3I8ZG91YmxlPiBzdGFydFRpbWVzID0gc3RhcnRUaW1lc0ZvclZh
bHVlcyhtX3ZhbHVlcy5nZXQoKSk7Ci0KLSAgICBpbnQgaXRlbUJ5UGVyY2VudGFnZSA9IC0xOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcyAtIDE7ICsraSkgewotICAgICAgICBp
ZiAodGltZVBlcmNlbnRhZ2UgPj0gc3RhcnRUaW1lc1tpXSAmJiB0aW1lUGVyY2VudGFnZSA8PSBz
dGFydFRpbWVzW2kgKyAxXSkgewotICAgICAgICAgICAgaXRlbUJ5UGVyY2VudGFnZSA9IGk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBpdGVtQnlQ
ZXJjZW50YWdlOwotfQotCi1kb3VibGUgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Y2FsY3VsYXRlUmVs
YXRpdmVUaW1lUGVyY2VudGFnZShkb3VibGUgdGltZVBlcmNlbnRhZ2UsIGludCBjdXJyZW50SXRl
bSkKLXsKLSAgICBpZiAoY3VycmVudEl0ZW0gPT0gLTEgfHwgIW1fdmFsdWVzKQotICAgICAgICBy
ZXR1cm4gMC4wOwotCi0gICAgVmVjdG9yPGRvdWJsZT4gc3RhcnRUaW1lcyA9IHN0YXJ0VGltZXNG
b3JWYWx1ZXMobV92YWx1ZXMuZ2V0KCkpOwotCi0gICAgZG91YmxlIGJlZ2luVGltZVBlcmNlbnRh
Z2UgPSBzdGFydFRpbWVzW2N1cnJlbnRJdGVtXTsKLSAgICBkb3VibGUgZW5kVGltZVBlcmNlbnRh
Z2UgPSBzdGFydFRpbWVzW2N1cnJlbnRJdGVtICsgMV07Ci0KLSAgICBpZiAoKGVuZFRpbWVQZXJj
ZW50YWdlIC0gYmVnaW5UaW1lUGVyY2VudGFnZSkgPT0gMC4wKQotICAgICAgICByZXR1cm4gMC4w
OwotCi0gICAgcmV0dXJuICgodGltZVBlcmNlbnRhZ2UgLSBiZWdpblRpbWVQZXJjZW50YWdlKSAv
Ci0gICAgICAgICAgICAoZW5kVGltZVBlcmNlbnRhZ2UgLSBiZWdpblRpbWVQZXJjZW50YWdlKSk7
Ci19Ci0KIGRvdWJsZSBTVkdBbmltYXRpb25FbGVtZW50OjpyZXBlYXRpb25zKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9yZXBldGl0aW9uczsKQEAgLTU5Myw0NCArNTc2LDE3OCBAQCBzdGF0aWMg
ZG91YmxlIGNhbGN1bGF0ZVRpbWVQZXJjZW50YWdlKGRvCiAgICAgcmV0dXJuIHBlcmNlbnRhZ2U7
CiB9CiAKLXZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aGFuZGxlVGltZXJFdmVudChkb3VibGUg
dGltZVBlcmNlbnRhZ2UpCitzdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0UGVyY2VudGFnZVBhc3RG
b3JLZXlTcGxpbmVzKGNvbnN0IFZlY3RvcjxTVkdBbmltYXRpb25FbGVtZW50OjpLZXlTcGxpbmU+
JiBrZXlTcGxpbmVzLCB1bnNpZ25lZCB2YWx1ZUluZGV4LCBmbG9hdCYgcGVyY2VudGFnZVBhc3Qp
Cit7CisgICAgY29uc3QgU1ZHQW5pbWF0aW9uRWxlbWVudDo6S2V5U3BsaW5lJiBrZXlTcGxpbmUg
PSBrZXlTcGxpbmVzW3ZhbHVlSW5kZXhdOworICAgIFBhdGggcGF0aDsKKyAgICBwYXRoLm1vdmVU
byhGbG9hdFBvaW50KCkpOworICAgIHBhdGguYWRkQmV6aWVyQ3VydmVUbyhrZXlTcGxpbmUuY29u
dHJvbDEsIGtleVNwbGluZS5jb250cm9sMiwgRmxvYXRQb2ludCgxLjBmLCAxLjBmKSk7CisgICAg
Ym9vbCBvayA9IGZhbHNlOworICAgIEZsb2F0UG9pbnQgc3BsaW5lUG9pbnQgPSBwYXRoLnBvaW50
QXRMZW5ndGgocGVyY2VudGFnZVBhc3QsIG9rKTsKKyAgICBpZiAob2spCisgICAgICAgIHBlcmNl
bnRhZ2VQYXN0ICo9IHNwbGluZVBvaW50LnkoKTsKK30KKwordm9pZCBTVkdBbmltYXRpb25FbGVt
ZW50Ojp2YWx1ZUluZGV4QW5kUGVyY2VudGFnZVBhc3RGb3JEaXN0YW5jZShmbG9hdCBkaXN0YW5j
ZVBlcmNlbnRhZ2UsIHVuc2lnbmVkJiB2YWx1ZUluZGV4LCBmbG9hdCYgcGVyY2VudGFnZVBhc3Qp
Cit7CisgICAgLy8gVW5zcGVjaWZpZWQ6IGFuaW1hdGlvbiBlbGVtZW50cyB3aGljaCBkbyBub3Qg
c3VwcG9ydCBDQUxDTU9ERV9QQUNFRCwgd2UganVzdCBhbHdheXMgc2hvdyB0aGUgZmlyc3QgdmFs
dWUKKyAgICB2YWx1ZUluZGV4ID0gMDsKKyAgICBwZXJjZW50YWdlUGFzdCA9IDA7Cit9CisKK2Zs
b2F0IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZVRvdGFsRGlzdGFuY2UoKQoreworICAg
IHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlVmFsdWVJbmRleEFu
ZFBlcmNlbnRhZ2VQYXN0Rm9yS2V5VGltZXMoZmxvYXQgdGltZVBlcmNlbnRhZ2UsIGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIGtleVRpbWVzLCB1bnNpZ25lZCYgdmFsdWVJbmRleCwgZmxvYXQmIHBlcmNl
bnRhZ2VQYXN0KQoreworICAgIHVuc2lnbmVkIGtleVRpbWVzQ291bnRNaW51c09uZSA9IGtleVRp
bWVzLnNpemUoKSAtIDE7CisgICAgdmFsdWVJbmRleCA9IDA7CisgICAgQVNTRVJUKHRpbWVQZXJj
ZW50YWdlID49IGtleVRpbWVzLmZpcnN0KCkpOworICAgIHdoaWxlICgodmFsdWVJbmRleCA8IGtl
eVRpbWVzQ291bnRNaW51c09uZSkgJiYgKHRpbWVQZXJjZW50YWdlID49IGtleVRpbWVzW3ZhbHVl
SW5kZXggKyAxXSkpCisgICAgICAgIHZhbHVlSW5kZXgrKzsKKyAgICBmbG9hdCBsYXN0S2V5VGlt
ZSA9IGtleVRpbWVzW3ZhbHVlSW5kZXhdOworICAgIGlmICh2YWx1ZUluZGV4IDwga2V5VGltZXND
b3VudE1pbnVzT25lKSB7CisgICAgICAgIGZsb2F0IG5leHRLZXlUaW1lID0ga2V5VGltZXNbdmFs
dWVJbmRleCArIDFdOworICAgICAgICBmbG9hdCBrZXlUaW1lU3BhbiA9IG5leHRLZXlUaW1lIC0g
bGFzdEtleVRpbWU7CisgICAgICAgIGZsb2F0IHRpbWVTaW5jZUxhc3RLZXlUaW1lID0gdGltZVBl
cmNlbnRhZ2UgLSBsYXN0S2V5VGltZTsKKyAgICAgICAgcGVyY2VudGFnZVBhc3QgPSAodGltZVNp
bmNlTGFzdEtleVRpbWUgLyBrZXlUaW1lU3Bhbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFs
dWVJbmRleCA9IGtleVRpbWVzQ291bnRNaW51c09uZTsKKyAgICAgICAgcGVyY2VudGFnZVBhc3Qg
PSAwOworICAgIH0KK30KKworYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc1ZhbGlkQW5pbWF0
aW9uKCkgY29uc3QKK3sKKyAgICBFQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlID0gZGV0ZWN0
QW5pbWF0aW9uTW9kZSgpOworICAgIGlmICghaGFzVmFsaWRUYXJnZXQoKSB8fCAoYW5pbWF0aW9u
TW9kZSA9PSBOT19BTklNQVRJT04pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGFu
aW1hdGlvbk1vZGUgPT0gVkFMVUVTX0FOSU1BVElPTikgeworICAgICAgICBpZiAoIW1fdmFsdWVz
LnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1fa2V5VGlt
ZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBpZiAoKG1fdmFsdWVzLnNpemUoKSAhPSBtX2tleVRp
bWVzLnNpemUoKSkgfHwgKG1fa2V5VGltZXMuZmlyc3QoKSAhPSAwKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoKChtX2NhbGNNb2RlID09IENBTENNT0RF
X1NQTElORSkgfHwgKG1fY2FsY01vZGUgPT0gQ0FMQ01PREVfTElORUFSKSkgJiYgKG1fa2V5VGlt
ZXMubGFzdCgpICE9IDEpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGZsb2F0IGxhc3RLZXlUaW1lID0gMDsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgeCA9
IDA7IHggPCBtX2tleVRpbWVzLnNpemUoKTsgeCsrKSB7CisgICAgICAgICAgICAgICAgaWYgKG1f
a2V5VGltZXNbeF0gPCBsYXN0S2V5VGltZSB8fCBtX2tleVRpbWVzW3hdID4gMSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGlmIChtX2tleVNwbGluZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBpZiAobV92YWx1ZXMu
c2l6ZSgpICE9IG1fa2V5U3BsaW5lcy5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IG1fa2V5VGltZXMuc2l6
ZSgpOyB4KyspCisgICAgICAgICAgICAgICAgaWYgKG1fa2V5VGltZXNbeF0gPCAwIHx8IG1fa2V5
VGltZXNbeF0gPiAxKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6Y2FsY3VsYXRlVmFsdWVJbmRleEFuZFBlcmNlbnRhZ2VQYXN0KGZsb2F0IHRpbWVQZXJjZW50
YWdlLCB1bnNpZ25lZCYgdmFsdWVJbmRleCwgZmxvYXQmIHBlcmNlbnRhZ2VQYXN0KQoreworICAg
IEFTU0VSVChpc1ZhbGlkQW5pbWF0aW9uKCkpOworICAgIEVBbmltYXRpb25Nb2RlIGFuaW1hdGlv
bk1vZGUgPSBkZXRlY3RBbmltYXRpb25Nb2RlKCk7CisgICAgCisgICAgYm9vbCBpc1ZhbHVlc0Fu
aW1hdGlvbiA9IChhbmltYXRpb25Nb2RlID09IFZBTFVFU19BTklNQVRJT04pOworICAgIGZsb2F0
IGxhc3RQb3NzaWJsZUluZGV4ID0gaXNWYWx1ZXNBbmltYXRpb24gPyBtX3ZhbHVlcy5zaXplKCkg
LSAxIDogMTsKKyAgICBmbG9hdCB2YWx1ZVBlcmNlbnRhZ2UgPSBsYXN0UG9zc2libGVJbmRleCAq
IHRpbWVQZXJjZW50YWdlOworICAgIGlmIChpc1ZhbHVlc0FuaW1hdGlvbikgeworICAgICAgICBp
ZiAobV9rZXlUaW1lcy5zaXplKCkgJiYgKG1fa2V5VGltZXMuc2l6ZSgpID09IG1fdmFsdWVzLnNp
emUoKSkpCisgICAgICAgICAgICBjYWxjdWxhdGVWYWx1ZUluZGV4QW5kUGVyY2VudGFnZVBhc3RG
b3JLZXlUaW1lcyh0aW1lUGVyY2VudGFnZSwgbV9rZXlUaW1lcywgdmFsdWVJbmRleCwgcGVyY2Vu
dGFnZVBhc3QpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIGlmIGtleVRpbWVzIGFy
ZSBtaXNzaW5nLCB1c2UgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB2YWx1ZXMKKyAgICAg
ICAgICAgIHZhbHVlSW5kZXggPSBmbG9vcmYodmFsdWVQZXJjZW50YWdlKTsKKyAgICAgICAgICAg
IHBlcmNlbnRhZ2VQYXN0ID0gIHZhbHVlUGVyY2VudGFnZSAtIGZsb29yZih2YWx1ZVBlcmNlbnRh
Z2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoKG1fY2FsY01vZGUgPT0gQ0FM
Q01PREVfU1BMSU5FKSAmJiAobV9rZXlTcGxpbmVzLnNpemUoKSA9PSBtX3ZhbHVlcy5zaXplKCkp
KQorICAgICAgICAgICAgYWRqdXN0UGVyY2VudGFnZVBhc3RGb3JLZXlTcGxpbmVzKG1fa2V5U3Bs
aW5lcywgdmFsdWVJbmRleCwgcGVyY2VudGFnZVBhc3QpOworICAgIH0gZWxzZSBpZiAobV9jYWxj
TW9kZSA9PSBDQUxDTU9ERV9MSU5FQVIpIHsKKyAgICAgICAgdmFsdWVJbmRleCA9IGZsb29yZih2
YWx1ZVBlcmNlbnRhZ2UpOworICAgICAgICBwZXJjZW50YWdlUGFzdCA9ICB2YWx1ZVBlcmNlbnRh
Z2UgLSBmbG9vcmYodmFsdWVQZXJjZW50YWdlKTsKKyAgICB9IGVsc2UgaWYgKG1fY2FsY01vZGUg
PT0gQ0FMQ01PREVfRElTQ1JFVEUpIHsKKyAgICAgICAgdmFsdWVJbmRleCA9IGZsb29yZih2YWx1
ZVBlcmNlbnRhZ2UpOworICAgICAgICBwZXJjZW50YWdlUGFzdCA9IDAuMGY7CisgICAgfSBlbHNl
IGlmIChtX2NhbGNNb2RlID09IENBTENNT0RFX1BBQ0VEKSB7CisgICAgICAgIC8vIGNhbGN1bGF0
ZSB2YWx1ZSBwZXJjZW50YWdlIGJhc2VkIG9uIGRpc3RhbmNlIGluc3RlYWQgb2YgdGltZQorICAg
ICAgICBmbG9hdCB0b3RhbERpc3RhbmNlID0gY2FsY3VsYXRlVG90YWxEaXN0YW5jZSgpOworICAg
ICAgICBmbG9hdCBkaXN0YW5jZVBlcmNlbnRhZ2UgPSB0b3RhbERpc3RhbmNlICogdGltZVBlcmNl
bnRhZ2U7CisgICAgICAgIHZhbHVlSW5kZXhBbmRQZXJjZW50YWdlUGFzdEZvckRpc3RhbmNlKGRp
c3RhbmNlUGVyY2VudGFnZSwgdmFsdWVJbmRleCwgcGVyY2VudGFnZVBhc3QpOworICAgIH0KKyAg
ICBpZiAodmFsdWVJbmRleCA+IGxhc3RQb3NzaWJsZUluZGV4KSB7CisgICAgICAgIHZhbHVlSW5k
ZXggPSBsYXN0UG9zc2libGVJbmRleDsKKyAgICAgICAgcGVyY2VudGFnZVBhc3QgPSAwOworICAg
IH0KK30KKworYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojp1cGRhdGVBbmltYXRpb25CYXNlVmFs
dWVGcm9tRWxlbWVudCgpCit7CisgICAgbV9iYXNlVmFsdWUgPSB0YXJnZXRBdHRyaWJ1dGVBbmlt
YXRlZFZhbHVlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxl
bWVudDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KCkKK3sKKyAgICBzZXRUYXJnZXRBdHRy
aWJ1dGVBbmltYXRlZFZhbHVlKG1fYW5pbWF0ZWRWYWx1ZSk7Cit9CisKK3ZvaWQgU1ZHQW5pbWF0
aW9uRWxlbWVudDo6aGFuZGxlVGltZXJFdmVudChkb3VibGUgZWxhcHNlZFNlY29uZHMsIGRvdWJs
ZSB0aW1lUGVyY2VudGFnZSkKIHsKICAgICBpZiAoIWNvbm5lY3RlZFRvVGltZXIoKSkgewogICAg
ICAgICBjb25uZWN0VGltZXIoKTsKLSAgICAgICAgaGFuZGxlU3RhcnRDb25kaXRpb24oKTsgLy8g
TmVlZCB0byBjaGVjayBib29sIHJldHVybiBpZiBhZGRpbmcgYW55dGhpbmcgYWZ0ZXIgdGhpcyBj
YWxsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKCF1cGRhdGVDdXJyZW50
VmFsdWUodGltZVBlcmNlbnRhZ2UpKQotICAgICAgICByZXR1cm47CisvLyAgICBpZiAoaXNBY2N1
bXVsYXRlZCgpICYmIHJlcGVhdGlvbnMoKSAhPSAwLjApCisvLyAgICAgICAgYWNjdW11bGF0ZUZv
clJlcGV0aXRpb25zKG1fcmVwZXRpdGlvbnMpOworICAgIAorICAgIEVBbmltYXRpb25Nb2RlIGFu
aW1hdGlvbk1vZGUgPSBkZXRlY3RBbmltYXRpb25Nb2RlKCk7CiAgICAgCi0gICAgaWYgKHRpbWVQ
ZXJjZW50YWdlID09IDEuMCkgeworICAgIHVuc2lnbmVkIHZhbHVlSW5kZXggPSAwOworICAgIGZs
b2F0IHBlcmNlbnRhZ2VQYXN0ID0gMDsKKyAgICBpZiAoYW5pbWF0aW9uTW9kZSAhPSBUT19BTklN
QVRJT04pCisgICAgICAgIGNhbGN1bGF0ZVZhbHVlSW5kZXhBbmRQZXJjZW50YWdlUGFzdCh0aW1l
UGVyY2VudGFnZSwgdmFsdWVJbmRleCwgcGVyY2VudGFnZVBhc3QpOworICAgICAgICAKKyAgICBj
YWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoYW5pbWF0aW9uTW9kZSwgdmFsdWVJbmRleCk7CisgICAg
CisgICAgdXBkYXRlQW5pbWF0ZWRWYWx1ZShhbmltYXRpb25Nb2RlLCB0aW1lUGVyY2VudGFnZSwg
dmFsdWVJbmRleCwgcGVyY2VudGFnZVBhc3QpOworICAgIAorICAgIGlmICh0aW1lUGVyY2VudGFn
ZSA+PSAxLjApIHsKICAgICAgICAgaWYgKChtX3JlcGVhdENvdW50ID4gMCAmJiBtX3JlcGV0aXRp
b25zIDwgbV9yZXBlYXRDb3VudCAtIDEpIHx8IGlzSW5kZWZpbml0ZShtX3JlcGVhdENvdW50KSkg
ewotICAgICAgICAgICAgdXBkYXRlTGFzdFZhbHVlV2l0aEN1cnJlbnQoKTsKICAgICAgICAgICAg
IG1fcmVwZXRpdGlvbnMrKzsKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgZGlzY29ubmVjdFRpbWVyKCk7Ci0gICAgICAgIHJlc2V0VmFsdWVzKCk7ICAg
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZGlzY29ubmVjdFRpbWVyKCk7CiAgICAgfQog
fQogCi1ib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnVwZGF0ZUZvckVsYXBzZWRTZWNvbmRzKGRv
dWJsZSBlbGFwc2VkU2Vjb25kcykKK2Jvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6dXBkYXRlQW5p
bWF0ZWRWYWx1ZUZvckVsYXBzZWRTZWNvbmRzKGRvdWJsZSBlbGFwc2VkU2Vjb25kcykKIHsKKy8v
ICAgIGlmIChpc1N0b3BwZWQoKSkgeworLy8gICAgICAgIGlmIChtX2ZpbGwgPT0gRklMTF9GUkVF
WkUpCisvLyAgICAgICAgICAgIGVsYXBzZWRTZWNvbmRzID0gbV9zdG9wcGVkVGltZTsKKy8vICAg
ICAgICBlbHNlCisvLyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKy8vICAgIH0KKyAgICAKICAg
ICAvLyBWYWxpZGF0ZSBhbmltYXRpb24gdGltaW5nIHNldHRpbmdzOgogICAgIC8vICMxIChkdXJh
dGlvbiA+IDApIC0+IGZpbmUKICAgICAvLyAjMiAoZHVyYXRpb24gPD0gMC4wICYmIGVuZCA+IDAp
IC0+IGZpbmUKLSAgICAKICAgICBpZiAoKG1fc2ltcGxlRHVyYXRpb24gPD0gMC4wICYmIG1fZW5k
IDw9IDAuMCkgfHwgKGlzSW5kZWZpbml0ZShtX3NpbXBsZUR1cmF0aW9uKSAmJiBtX2VuZCA8PSAw
LjApKQogICAgICAgICByZXR1cm4gZmFsc2U7IC8vIElnbm9yZSBkdXI9IjAiIG9yIGR1cj0iLW5l
ZyIKICAgICAKICAgICBmbG9hdCBwZXJjZW50YWdlID0gY2FsY3VsYXRlVGltZVBlcmNlbnRhZ2Uo
ZWxhcHNlZFNlY29uZHMsIG1fYmVnaW4sIG1fZW5kLCBtX3NpbXBsZUR1cmF0aW9uLCBtX3JlcGV0
aXRpb25zKTsKICAgICAKICAgICBpZiAocGVyY2VudGFnZSA8PSAxLjAgfHwgY29ubmVjdGVkVG9U
aW1lcigpKQotICAgICAgICBoYW5kbGVUaW1lckV2ZW50KHBlcmNlbnRhZ2UpOworICAgICAgICBo
YW5kbGVUaW1lckV2ZW50KGVsYXBzZWRTZWNvbmRzLCBwZXJjZW50YWdlKTsKICAgICAKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsgLy8gdmFsdWUgd2FzIHVwZGF0ZWQsIG5lZWQg
dG8gYXBwbHkKIH0KIAogfQpJbmRleDoga3N2ZzIvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCShyZXZpc2lvbiAx
OTEwNikKKysrIGtzdmcyL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTg3LDYgKzg3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTVkdFbGVtZW50
KiB0YXJnZXRFbGVtZW50KCkgY29uc3Q7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wg
aGFzVmFsaWRUYXJnZXQoKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc1ZhbGlkQW5pbWF0aW9uKCkg
Y29uc3Q7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsg
cmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIApAQCAtMTAwLDE2ICsxMDEsOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGNsb3NlUmVuZGVyZXIoKTsK
IAotICAgICAgICAvLyBIZWxwZXJzCi0gICAgICAgIGJvb2wgdXBkYXRlRm9yRWxhcHNlZFNlY29u
ZHMoZG91YmxlKTsKLSAgICAgICAgdm9pZCBoYW5kbGVUaW1lckV2ZW50KGRvdWJsZSB0aW1lUGVy
Y2VudGFnZSk7Ci0KLSAgICAgICAgc3RhdGljIGRvdWJsZSBwYXJzZUNsb2NrVmFsdWUoY29uc3Qg
U3RyaW5nJik7Ci0KLSAgICAgICAgU3RyaW5nIHRhcmdldEF0dHJpYnV0ZSgpIGNvbnN0OwotICAg
ICAgICB2b2lkIHNldFRhcmdldEF0dHJpYnV0ZShjb25zdCBTdHJpbmcmKTsKLQotICAgICAgICBz
dGF0aWMgdm9pZCBzZXRUYXJnZXRBdHRyaWJ1dGUoU1ZHRWxlbWVudCogdGFyZ2V0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIEVBdHRyaWJ1dGVUeXBlID0gQVRUUklC
VVRFVFlQRV9BVVRPKTsKKyAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUFuaW1hdGlvbkJhc2VW
YWx1ZUZyb21FbGVtZW50KCk7CisgICAgICAgIGJvb2wgdXBkYXRlQW5pbWF0ZWRWYWx1ZUZvckVs
YXBzZWRTZWNvbmRzKGRvdWJsZSBlbGFwc2VkU2Vjb25kcyk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBhcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQoKTsKIAogICAgICAgICBTdHJpbmcgYXR0cmli
dXRlTmFtZSgpIGNvbnN0OwogCkBAIC0xMTksMjQgKzExMywzMiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIGJvb2wgaXNBZGRpdGl2ZSgpIGNvbnN0OwogICAgICAgICBib29sIGlzQWNj
dW11bGF0ZWQoKSBjb25zdDsKIAotICAgICAgICBFQW5pbWF0aW9uTW9kZSBkZXRlY3RBbmltYXRp
b25Nb2RlKCkgY29uc3Q7Ci0KLSAgICAgICAgaW50IGNhbGN1bGF0ZUN1cnJlbnRWYWx1ZUl0ZW0o
ZG91YmxlIHRpbWVQZXJjZW50YWdlKTsKLSAgICAgICAgZG91YmxlIGNhbGN1bGF0ZVJlbGF0aXZl
VGltZVBlcmNlbnRhZ2UoZG91YmxlIHRpbWVQZXJjZW50YWdlLCBpbnQgY3VycmVudEl0ZW0pOwot
CiAgICAgICAgIGRvdWJsZSByZXBlYXRpb25zKCkgY29uc3Q7CiAgICAgICAgIHN0YXRpYyBib29s
IGlzSW5kZWZpbml0ZShkb3VibGUgdmFsdWUpOwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBt
dXRhYmxlIFNWR0VsZW1lbnQqIG1fdGFyZ2V0RWxlbWVudDsKICAgICAgICAgCisgICAgICAgIEVB
bmltYXRpb25Nb2RlIGRldGVjdEFuaW1hdGlvbk1vZGUoKSBjb25zdDsKKyAgICAgICAgCisgICAg
ICAgIHN0YXRpYyBkb3VibGUgcGFyc2VDbG9ja1ZhbHVlKGNvbnN0IFN0cmluZyYpOworICAgICAg
ICBzdGF0aWMgdm9pZCBzZXRUYXJnZXRBdHRyaWJ1dGUoU1ZHRWxlbWVudCogdGFyZ2V0LCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIEVBdHRyaWJ1dGVUeXBlID0gQVRU
UklCVVRFVFlQRV9BVVRPKTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyB0YXJnZXRBdHRyaWJ1
dGVBbmltYXRlZFZhbHVlKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0VGFyZ2V0QXR0cmlidXRl
QW5pbWF0ZWRWYWx1ZShjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgCiAgICAgICAgIHZvaWQgY29u
bmVjdFRpbWVyKCk7CiAgICAgICAgIHZvaWQgZGlzY29ubmVjdFRpbWVyKCk7CisKKyAgICAgICAg
dmlydHVhbCBmbG9hdCBjYWxjdWxhdGVUb3RhbERpc3RhbmNlKCk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCB2YWx1ZUluZGV4QW5kUGVyY2VudGFnZVBhc3RGb3JEaXN0YW5jZShmbG9hdCBkaXN0YW5j
ZVBlcmNlbnRhZ2UsIHVuc2lnbmVkJiB2YWx1ZUluZGV4LCBmbG9hdCYgcGVyY2VudGFnZVBhc3Qp
OworICAgICAgICAKKyAgICAgICAgdm9pZCBjYWxjdWxhdGVWYWx1ZUluZGV4QW5kUGVyY2VudGFn
ZVBhc3QoZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVkJiB2YWx1ZUluZGV4LCBmbG9hdCYg
cGVyY2VudGFnZVBhc3QpOwogICAgICAgICAKLSAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUN1
cnJlbnRWYWx1ZShkb3VibGUgdGltZVBlcmNlbnRhZ2UpID0gMDsKLSAgICAgICAgdmlydHVhbCBi
b29sIGhhbmRsZVN0YXJ0Q29uZGl0aW9uKCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlTGFzdFZhbHVlV2l0aEN1cnJlbnQoKSB7IH0gLy8gU2VlIGJ1ZyAxMjA3NSBmb3IgZXhwbGFp
bmF0aW9uIG9mIHdoeSB0aGlzIGlzIGEgYmFkIEFQSQotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXRWYWx1ZXMoKSB7IH0KKyAgICAgICAgdm9pZCBoYW5kbGVUaW1lckV2ZW50KGRvdWJsZSBlbGFw
c2VkU2Vjb25kcywgZG91YmxlIHRpbWVQZXJjZW50YWdlKTsKKyAgICAgICAgCisgICAgICAgIHZp
cnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlLCBmbG9hdCB0aW1l
UGVyY2VudGFnZSwgdW5zaWduZWQgdmFsdWVJbmRleCwgZmxvYXQgcGVyY2VudGFnZVBhc3QpID0g
MDsKKyAgICAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhFQW5pbWF0
aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJbmRleCkgPSAwOwogICAgICAgICAKICAgICAgICAgc3Rh
dGljIHZvaWQgcGFyc2VLZXlOdW1iZXJzKFZlY3RvcjxmbG9hdD4mIGtleU51bWJlcnMsIGNvbnN0
IFN0cmluZyYgdmFsdWUpOwogICAgICAgICBzdGF0aWMgdm9pZCBwYXJzZUJlZ2luT3JFbmRWYWx1
ZShkb3VibGUmIG51bWJlciwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CkBAIC0xNjIsNiArMTY0LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdHJpbmcgbV9ocmVmOwogICAgICAgICBT
dHJpbmcgbV9yZXBlYXREdXI7CiAgICAgICAgIFN0cmluZyBtX2F0dHJpYnV0ZU5hbWU7CisgICAg
ICAgIAorICAgICAgICBTdHJpbmcgbV9iYXNlVmFsdWU7CisgICAgICAgIFN0cmluZyBtX2FuaW1h
dGVkVmFsdWU7CiAKICAgICAgICAgZG91YmxlIG1fbWF4OwogICAgICAgICBkb3VibGUgbV9taW47
CkBAIC0xNzEsNyArMTc2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBkb3VibGUg
bV9yZXBldGl0aW9uczsKICAgICAgICAgZG91YmxlIG1fcmVwZWF0Q291bnQ7CiAKLSAgICAgICAg
UmVmUHRyPFNWR1N0cmluZ0xpc3Q+IG1fdmFsdWVzOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBt
X3ZhbHVlczsKICAgICAgICAgVmVjdG9yPGZsb2F0PiBtX2tleVRpbWVzOwogICAgICAgICAKICAg
ICAgICAgc3RydWN0IEtleVNwbGluZSB7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHU2V0RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1NldEVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
OTEwNikKKysrIGtzdmcyL3N2Zy9TVkdTZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzksMzAgKzM5LDYgQEAgU1ZHU2V0RWxlbWVudDo6flNWR1NldEVsZW1lbnQoKQogewogfQogCi1i
b29sIFNWR1NldEVsZW1lbnQ6OnVwZGF0ZUN1cnJlbnRWYWx1ZShkb3VibGUgdGltZVBlcmNlbnRh
Z2UpCi17Ci0gICAgaWYgKG1fc2F2ZWRUby5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9zYXZlZFRv
ID0gdGFyZ2V0QXR0cmlidXRlKCk7Ci0gICAgICAgIHNldFRhcmdldEF0dHJpYnV0ZShtX3RvKTsK
LSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFNWR1NldEVsZW1lbnQ6OmhhbmRs
ZVN0YXJ0Q29uZGl0aW9uKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTVkdTZXRF
bGVtZW50OjpoYW5kbGVFbmRDb25kaXRpb24oKQotewotICAgIGRpc2Nvbm5lY3RUaW1lcigpOwot
ICAgIAotICAgIGlmICghaXNGcm96ZW4oKSkKLSAgICAgICAgc2V0VGFyZ2V0QXR0cmlidXRlKG1f
c2F2ZWRUbyk7Ci0gICAgCi0gICAgbV9zYXZlZFRvID0gU3RyaW5nKCk7Ci19Ci0KIH0KIAogLy8g
dmltOnRzPTQ6bm9ldApJbmRleDoga3N2ZzIvc3ZnL1NWR1NldEVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrc3ZnMi9zdmcvU1ZHU2V0RWxlbWVudC5oCShyZXZpc2lvbiAxOTEwNikKKysrIGtzdmcy
L3N2Zy9TVkdTZXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDkgKzM3LDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZH
RWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CiAgICAgICAg
IAotICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQ3VycmVudFZhbHVlKGRvdWJsZSB0aW1lUGVy
Y2VudGFnZSk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVTdGFydENvbmRpdGlvbigpOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRW5kQ29uZGl0aW9uKCk7CisgICAgICAgIHZpcnR1
YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlLCBmbG9hdCB0aW1lUGVy
Y2VudGFnZSwgdW5zaWduZWQgdmFsdWVJbmRleCwgZmxvYXQgcGVyY2VudGFnZVBhc3QpIHsgcmV0
dXJuIHRydWU7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVl
cyhFQW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJbmRleCkgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgU3RyaW5nIG1fc2F2ZWRUbzsKSW5kZXg6IGtzdmcyL3N2
Zy9TVkdUcmFuc2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm0u
Y3BwCShyZXZpc2lvbiAxOTEwNikKKysrIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIGJvb2wgU1ZHVHJhbnNmb3JtOjppc1ZhbGlkKCkK
ICAgICByZXR1cm4gKG1fdHlwZSAhPSBTVkdfVFJBTlNGT1JNX1VOS05PV04pOwogfQogCi11bnNp
Z25lZCBzaG9ydCBTVkdUcmFuc2Zvcm06OnR5cGUoKSBjb25zdAorU1ZHVHJhbnNmb3JtOjpTVkdU
cmFuc2Zvcm1UeXBlIFNWR1RyYW5zZm9ybTo6dHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
dHlwZTsKIH0KQEAgLTg1LDYgKzg1LDExIEBAIHZvaWQgU1ZHVHJhbnNmb3JtOjpzZXRUcmFuc2xh
dGUoZG91YmxlIHQKICAgICBtX21hdHJpeC50cmFuc2xhdGUodHgsIHR5KTsKIH0KIAorRmxvYXRQ
b2ludCBTVkdUcmFuc2Zvcm06OnRyYW5zbGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZsb2F0
UG9pbnQobV9tYXRyaXguZSgpLCBtX21hdHJpeC5mKCkpOworfQorCiB2b2lkIFNWR1RyYW5zZm9y
bTo6c2V0U2NhbGUoZG91YmxlIHN4LCBkb3VibGUgc3kpCiB7CiAgICAgbV90eXBlID0gU1ZHX1RS
QU5TRk9STV9TQ0FMRTsKQEAgLTk0LDYgKzk5LDExIEBAIHZvaWQgU1ZHVHJhbnNmb3JtOjpzZXRT
Y2FsZShkb3VibGUgc3gsIGQKICAgICBtX21hdHJpeC5zY2FsZShzeCwgc3kpOwogfQogCitGbG9h
dFNpemUgU1ZHVHJhbnNmb3JtOjpzY2FsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZsb2F0U2l6
ZShtX21hdHJpeC5hKCksIG1fbWF0cml4LmQoKSk7Cit9CisKIHZvaWQgU1ZHVHJhbnNmb3JtOjpz
ZXRSb3RhdGUoZG91YmxlIGFuZ2xlLCBkb3VibGUgY3gsIGRvdWJsZSBjeSkKIHsKICAgICBtX3R5
cGUgPSBTVkdfVFJBTlNGT1JNX1JPVEFURTsKQEAgLTExMiw3ICsxMjIsNyBAQCB2b2lkIFNWR1Ry
YW5zZm9ybTo6c2V0U2tld1goZG91YmxlIGFuZ2xlCiAgICAgbV9hbmdsZSA9IGFuZ2xlOwogCiAg
ICAgbV9tYXRyaXgucmVzZXQoKTsKLSAgICBtX21hdHJpeC5zaGVhcih0YW4oU1ZHQW5nbGU6OnRv
cmFkKGFuZ2xlKSksIDAuMGYpOworICAgIG1fbWF0cml4LnNrZXdYKGFuZ2xlKTsKIH0KIAogdm9p
ZCBTVkdUcmFuc2Zvcm06OnNldFNrZXdZKGRvdWJsZSBhbmdsZSkKQEAgLTEyMSw3ICsxMzEsNyBA
QCB2b2lkIFNWR1RyYW5zZm9ybTo6c2V0U2tld1koZG91YmxlIGFuZ2xlCiAgICAgbV9hbmdsZSA9
IGFuZ2xlOwogCiAgICAgbV9tYXRyaXgucmVzZXQoKTsKLSAgICBtX21hdHJpeC5zaGVhcigwLjBm
LCB0YW4oU1ZHQW5nbGU6OnRvcmFkKGFuZ2xlKSkpOworICAgIG1fbWF0cml4LnNrZXdZKGFuZ2xl
KTsKIH0KIAogLy8gdmltOnRzPTQ6bm9ldApJbmRleDoga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm0uaAkocmV2aXNpb24gMTkxMDYp
CisrKyBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDkgQEAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKyAg
ICAKKyAgICBjbGFzcyBGbG9hdFBvaW50OworICAgIGNsYXNzIEZsb2F0U2l6ZTsKIAogICAgIGNs
YXNzIFNWR1RyYW5zZm9ybSB7CiAgICAgcHVibGljOgpAQCAtNDYsNyArNDksNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIGV4cGxpY2l0IFNWR1RyYW5zZm9ybShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mKTsKICAgICAgICAgdmlydHVhbCB+U1ZHVHJhbnNmb3JtKCk7CiAgICAgICAgICAg
ICAgICAKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZSgpIGNvbnN0OworICAgICAgICBTVkdU
cmFuc2Zvcm1UeXBlIHR5cGUoKSBjb25zdDsKIAogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0
cml4KCkgY29uc3Q7CiAgICAgCkBAIC01OSwxNCArNjIsMjggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2b2lkIHNldFNrZXdYKGRvdWJsZSBhbmdsZSk7CiAgICAgICAgIHZvaWQgc2V0
U2tld1koZG91YmxlIGFuZ2xlKTsKICAgICAgICAgCisgICAgICAgIC8vIEludGVybmFsIHVzZSBv
bmx5IChhbmltYXRpb24gc3lzdGVtKQorICAgICAgICBGbG9hdFBvaW50IHRyYW5zbGF0ZSgpIGNv
bnN0OworICAgICAgICBGbG9hdFNpemUgc2NhbGUoKSBjb25zdDsKKyAgICAgICAgCiAgICAgICAg
IGJvb2wgaXNWYWxpZCgpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdW5zaWduZWQgc2hvcnQg
bV90eXBlOworICAgICAgICBTVkdUcmFuc2Zvcm1UeXBlIG1fdHlwZTsKICAgICAgICAgZG91Ymxl
IG1fYW5nbGU7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX21hdHJpeDsKICAgICB9OwogCisg
ICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTVkdUcmFuc2Zvcm0mIGEsIGNvbnN0IFNW
R1RyYW5zZm9ybSYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhLnR5cGUoKSA9PSBiLnR5cGUo
KSAmJiBhLmFuZ2xlKCkgPT0gYi5hbmdsZSgpICYmIGEubWF0cml4KCkgPT0gYi5tYXRyaXgoKTsK
KyAgICB9CisgICAgCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTVkdUcmFuc2Zv
cm0mIGEsIGNvbnN0IFNWR1RyYW5zZm9ybSYgYikKKyAgICB7CisgICAgICAgIHJldHVybiAhKGEg
PT0gYik7CisgICAgfQorICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
U1ZHX1NVUFBPUlQKSW5kZXg6IGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybURpc3RhbmNlLmNwcAkocmV2aXNpb24g
MCkKKysrIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMjY1IEBACisvKgorIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgorIAorIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVj
dAorIAorIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorIEJvc3Rvbiwg
TUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZmRlZiBT
VkdfU1VQUE9SVAorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybURpc3RhbmNlLmgiCisKKyNpbmNsdWRl
ICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiU1ZHVHJh
bnNmb3JtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK1NWR1RyYW5zZm9ybURpc3Rh
bmNlOjpTVkdUcmFuc2Zvcm1EaXN0YW5jZSgpCisgICAgOiBtX3R5cGUoU1ZHVHJhbnNmb3JtOjpT
VkdfVFJBTlNGT1JNX1VOS05PV04pCisgICAgLCBtX2FuZ2xlKDApCit7Cit9CisKK1NWR1RyYW5z
Zm9ybURpc3RhbmNlOjpTVkdUcmFuc2Zvcm1EaXN0YW5jZShTVkdUcmFuc2Zvcm06OlNWR1RyYW5z
Zm9ybVR5cGUgdHlwZSwgZG91YmxlIGFuZ2xlLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9hbmdsZShhbmdsZSkKKyAgICAsIG1f
dHJhbnNmb3JtKHRyYW5zZm9ybSkKK3sKK30KKworU1ZHVHJhbnNmb3JtRGlzdGFuY2U6OlNWR1Ry
YW5zZm9ybURpc3RhbmNlKGNvbnN0IFNWR1RyYW5zZm9ybSYgZnJvbVNWR1RyYW5zZm9ybSwgY29u
c3QgU1ZHVHJhbnNmb3JtJiB0b1NWR1RyYW5zZm9ybSkKKyAgICA6IG1fdHlwZShmcm9tU1ZHVHJh
bnNmb3JtLnR5cGUoKSkKKyAgICAsIG1fYW5nbGUoMCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09
IHRvU1ZHVHJhbnNmb3JtLnR5cGUoKSk7CisgICAgCisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAg
ICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOOgorICAgICAgICByZXR1
cm47CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fTUFUUklYOgorICAgICAg
ICAvLyBGSVhNRTogbmVlZCB0byBiZSBhYmxlIHRvIHN1YnRyYWN0IHRvIG1hdHJpY2VzCisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9ST1RBVEU6
CisgICAgICAgIG1fYW5nbGUgPSB0b1NWR1RyYW5zZm9ybS5hbmdsZSgpIC0gZnJvbVNWR1RyYW5z
Zm9ybS5hbmdsZSgpOworICAgICAgICAvLyBmYWxsIHRocm91Z2gKKyAgICBjYXNlIFNWR1RyYW5z
Zm9ybTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEU6CisgICAgeworICAgICAgICBGbG9hdFNpemUg
dHJhbnNsYXRpb25EaXN0YW5jZSA9IHRvU1ZHVHJhbnNmb3JtLnRyYW5zbGF0ZSgpIC0gZnJvbVNW
R1RyYW5zZm9ybS50cmFuc2xhdGUoKTsKKyAgICAgICAgbV90cmFuc2Zvcm0udHJhbnNsYXRlKHRy
YW5zbGF0aW9uRGlzdGFuY2Uud2lkdGgoKSwgdHJhbnNsYXRpb25EaXN0YW5jZS5oZWlnaHQoKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFO
U0ZPUk1fU0NBTEU6CisgICAgeworICAgICAgICBmbG9hdCBzY2FsZVggPSBmcm9tU1ZHVHJhbnNm
b3JtLnNjYWxlKCkud2lkdGgoKSAhPSAwID8gdG9TVkdUcmFuc2Zvcm0uc2NhbGUoKS53aWR0aCgp
IC8gZnJvbVNWR1RyYW5zZm9ybS5zY2FsZSgpLndpZHRoKCkgOiB0b1NWR1RyYW5zZm9ybS5zY2Fs
ZSgpLndpZHRoKCkgLyAwLjAwMDAxOworICAgICAgICBmbG9hdCBzY2FsZVkgPSBmcm9tU1ZHVHJh
bnNmb3JtLnNjYWxlKCkuaGVpZ2h0KCkgIT0gMCA/IHRvU1ZHVHJhbnNmb3JtLnNjYWxlKCkuaGVp
Z2h0KCkgLyBmcm9tU1ZHVHJhbnNmb3JtLnNjYWxlKCkuaGVpZ2h0KCkgOiB0b1NWR1RyYW5zZm9y
bS5zY2FsZSgpLmhlaWdodCgpIC8gMC4wMDAwMTsKKyAgICAgICAgbV90cmFuc2Zvcm0uc2NhbGUo
c2NhbGVYLCBzY2FsZVkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgU1ZHVHJh
bnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NLRVdYOgorICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdf
VFJBTlNGT1JNX1NLRVdZOgorICAgICAgICBtX2FuZ2xlID0gdG9TVkdUcmFuc2Zvcm0uYW5nbGUo
KSAtIGZyb21TVkdUcmFuc2Zvcm0uYW5nbGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30K
KworU1ZHVHJhbnNmb3JtRGlzdGFuY2UgU1ZHVHJhbnNmb3JtRGlzdGFuY2U6OnNjYWxlZERpc3Rh
bmNlKGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAoreworICAgIHN3aXRjaCAobV90eXBlKSB7Cisg
ICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVU5LTk9XTjoKKyAgICAgICAgcmV0
dXJuIFNWR1RyYW5zZm9ybURpc3RhbmNlKCk7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19U
UkFOU0ZPUk1fUk9UQVRFOgorICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtRGlzdGFuY2UobV90
eXBlLCBtX2FuZ2xlICogc2NhbGVGYWN0b3IsIEFmZmluZVRyYW5zZm9ybSgpKTsKKyAgICBjYXNl
IFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TQ0FMRToKKyAgICBjYXNlIFNWR1RyYW5zZm9y
bTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg6CisgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1EaXN0
YW5jZShtX3R5cGUsIG1fYW5nbGUgKiBzY2FsZUZhY3RvciwgQWZmaW5lVHJhbnNmb3JtKG1fdHJh
bnNmb3JtKS5zY2FsZShzY2FsZUZhY3RvcikpOworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdf
VFJBTlNGT1JNX1RSQU5TTEFURToKKyAgICB7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBuZXdU
cmFuc2Zvcm0obV90cmFuc2Zvcm0pOworICAgICAgICBuZXdUcmFuc2Zvcm0uc2V0RShtX3RyYW5z
Zm9ybS5lKCkgKiBzY2FsZUZhY3Rvcik7CisgICAgICAgIG5ld1RyYW5zZm9ybS5zZXRGKG1fdHJh
bnNmb3JtLmYoKSAqIHNjYWxlRmFjdG9yKTsKKyAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybURp
c3RhbmNlKG1fdHlwZSwgMCwgbmV3VHJhbnNmb3JtKTsKKyAgICB9CisgICAgY2FzZSBTVkdUcmFu
c2Zvcm06OlNWR19UUkFOU0ZPUk1fU0tFV1g6CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19U
UkFOU0ZPUk1fU0tFV1k6CisgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1EaXN0YW5jZShtX3R5
cGUsIG1fYW5nbGUgKiBzY2FsZUZhY3RvciwgQWZmaW5lVHJhbnNmb3JtKCkpOworICAgIH0KKyAg
ICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU1ZHVHJhbnNmb3JtRGlz
dGFuY2UoKTsKK30KKworU1ZHVHJhbnNmb3JtIFNWR1RyYW5zZm9ybURpc3RhbmNlOjphZGRTVkdU
cmFuc2Zvcm1zKGNvbnN0IFNWR1RyYW5zZm9ybSYgZmlyc3QsIGNvbnN0IFNWR1RyYW5zZm9ybSYg
c2Vjb25kKQoreworICAgIEFTU0VSVChmaXJzdC50eXBlKCkgPT0gc2Vjb25kLnR5cGUoKSk7Cisg
ICAgCisgICAgU1ZHVHJhbnNmb3JtIHRyYW5zZm9ybTsKKyAgICAKKyAgICBzd2l0Y2ggKGZpcnN0
LnR5cGUoKSkgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1VOS05PV046
CisgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm0oKTsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6
U1ZHX1RSQU5TRk9STV9ST1RBVEU6CisgICAgeworICAgICAgICAvLyBGSVhNRTogSSdtIG5vdCBz
dXJlIHRoYXQgdGhlIHRyYW5zbGF0aW9uIGlzIGNvcnJlY3QgaGVyZQorICAgICAgICBmbG9hdCBk
eCA9IGZpcnN0LnRyYW5zbGF0ZSgpLngoKSArIHNlY29uZC50cmFuc2xhdGUoKS54KCk7CisgICAg
ICAgIGZsb2F0IGR5ID0gZmlyc3QudHJhbnNsYXRlKCkueSgpICsgc2Vjb25kLnRyYW5zbGF0ZSgp
LnkoKTsKKyAgICAgICAgdHJhbnNmb3JtLnNldFJvdGF0ZShmaXJzdC5hbmdsZSgpICsgc2Vjb25k
LmFuZ2xlKCksIGR4LCBkeSk7CisgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CisgICAgfQorICAg
IGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX01BVFJJWDoKKyAgICAgICAgdHJhbnNm
b3JtLnNldE1hdHJpeChmaXJzdC5tYXRyaXgoKSAqIHNlY29uZC5tYXRyaXgoKSk7CisgICAgICAg
IHJldHVybiB0cmFuc2Zvcm07CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1f
VFJBTlNMQVRFOgorICAgIHsKKyAgICAgICAgZmxvYXQgZHggPSBmaXJzdC50cmFuc2xhdGUoKS54
KCkgKyBzZWNvbmQudHJhbnNsYXRlKCkueCgpOworICAgICAgICBmbG9hdCBkeSA9IGZpcnN0LnRy
YW5zbGF0ZSgpLnkoKSArIHNlY29uZC50cmFuc2xhdGUoKS55KCk7CisgICAgICAgIHRyYW5zZm9y
bS5zZXRUcmFuc2xhdGUoZHgsIGR5KTsKKyAgICAgICAgcmV0dXJuIHRyYW5zZm9ybTsKKyAgICB9
CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6CisgICAgeworICAg
ICAgICBGbG9hdFNpemUgc2NhbGUgPSBmaXJzdC5zY2FsZSgpICsgc2Vjb25kLnNjYWxlKCk7Cisg
ICAgICAgIHRyYW5zZm9ybS5zZXRTY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7
CisgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CisgICAgfQorICAgIGNhc2UgU1ZHVHJhbnNmb3Jt
OjpTVkdfVFJBTlNGT1JNX1NLRVdYOgorICAgICAgICB0cmFuc2Zvcm0uc2V0U2tld1goZmlyc3Qu
YW5nbGUoKSArIHNlY29uZC5hbmdsZSgpKTsKKyAgICAgICAgcmV0dXJuIHRyYW5zZm9ybTsKKyAg
ICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TS0VXWToKKyAgICAgICAgdHJhbnNm
b3JtLnNldFNrZXdZKGZpcnN0LmFuZ2xlKCkgKyBzZWNvbmQuYW5nbGUoKSk7CisgICAgICAgIHJl
dHVybiB0cmFuc2Zvcm07CisgICAgfQorICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBTVkdUcmFuc2Zvcm0oKTsKK30KKwordm9pZCBTVkdUcmFuc2Zvcm1EaXN0YW5j
ZTo6YWRkU1ZHVHJhbnNmb3JtKGNvbnN0IFNWR1RyYW5zZm9ybSYgdHJhbnNmb3JtLCBib29sIGFi
c29sdXRlVmFsdWUpCit7CisgICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgYWRkLCBzZXQgdGhl
IHR5cGUgZm9yIHRoaXMgU1ZHVHJhbnNmb3JtRGlzdGFuY2UKKyAgICBpZiAobV90eXBlID09IFNW
R1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOKQorICAgICAgICBtX3R5cGUgPSB0cmFu
c2Zvcm0udHlwZSgpOworICAgIAorICAgIEFTU0VSVChtX3R5cGUgPT0gdHJhbnNmb3JtLnR5cGUo
KSk7CisgICAgCisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6
U1ZHX1RSQU5TRk9STV9VTktOT1dOOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBTVkdUcmFu
c2Zvcm06OlNWR19UUkFOU0ZPUk1fTUFUUklYOgorICAgICAgICBtX3RyYW5zZm9ybSAqPSB0cmFu
c2Zvcm0ubWF0cml4KCk7IC8vIEZJWE1FOiB3aGF0IGRvZXMgJ2Rpc3RhbmNlJyBiZXR3ZWVuIHR3
byB0cmFuc2Zvcm1zIG1lYW4/ICBob3cgc2hvdWxkIHdlIHJlc3BlY3QgJ2Fic29sdXRlVmFsdWUn
IGhlcmU/CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5T
Rk9STV9ST1RBVEU6CisgICAgICAgIG1fYW5nbGUgKz0gYWJzb2x1dGVWYWx1ZSA/IGZhYnNmKHRy
YW5zZm9ybS5hbmdsZSgpKSA6IHRyYW5zZm9ybS5hbmdsZSgpOworICAgICAgICAvLyBmYWxsIHRo
cm91Z2gKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEU6Cisg
ICAgeworICAgICAgICBmbG9hdCBkeCA9IGFic29sdXRlVmFsdWUgPyBmYWJzZih0cmFuc2Zvcm0u
dHJhbnNsYXRlKCkueCgpKSA6IHRyYW5zZm9ybS50cmFuc2xhdGUoKS54KCk7CisgICAgICAgIGZs
b2F0IGR5ID0gYWJzb2x1dGVWYWx1ZSA/IGZhYnNmKHRyYW5zZm9ybS50cmFuc2xhdGUoKS55KCkp
IDogdHJhbnNmb3JtLnRyYW5zbGF0ZSgpLnkoKTsKKyAgICAgICAgbV90cmFuc2Zvcm0udHJhbnNs
YXRlKGR4LCBkeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBTVkdUcmFuc2Zv
cm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6CisgICAgeworICAgICAgICBmbG9hdCBzY2FsZVggPSBh
YnNvbHV0ZVZhbHVlID8gZmFic2YodHJhbnNmb3JtLnNjYWxlKCkud2lkdGgoKSkgOiB0cmFuc2Zv
cm0uc2NhbGUoKS53aWR0aCgpOworICAgICAgICBmbG9hdCBzY2FsZVkgPSBhYnNvbHV0ZVZhbHVl
ID8gZmFic2YodHJhbnNmb3JtLnNjYWxlKCkuaGVpZ2h0KCkpIDogdHJhbnNmb3JtLnNjYWxlKCku
aGVpZ2h0KCk7CisgICAgICAgIG1fdHJhbnNmb3JtLnNjYWxlKHNjYWxlWCwgc2NhbGVZKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9S
TV9TS0VXWDoKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TS0VXWToKKyAg
ICAgICAgbV9hbmdsZSArPSBhYnNvbHV0ZVZhbHVlID8gZmFic2YodHJhbnNmb3JtLmFuZ2xlKCkp
IDogdHJhbnNmb3JtLmFuZ2xlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuOworfQorCitTVkdUcmFuc2Zvcm0gU1ZH
VHJhbnNmb3JtRGlzdGFuY2U6OmFkZFRvU1ZHVHJhbnNmb3JtKGNvbnN0IFNWR1RyYW5zZm9ybSYg
dHJhbnNmb3JtKSBjb25zdAoreworICAgIEFTU0VSVChtX3R5cGUgPT0gdHJhbnNmb3JtLnR5cGUo
KSB8fCB0cmFuc2Zvcm0gPT0gU1ZHVHJhbnNmb3JtKCkpOworICAgIAorICAgIFNWR1RyYW5zZm9y
bSBuZXdUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fdHlwZSkgewor
ICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1VOS05PV046CisgICAgICAgIHJl
dHVybiBTVkdUcmFuc2Zvcm0oKTsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9S
TV9NQVRSSVg6CisgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm0odHJhbnNmb3JtLm1hdHJpeCgp
ICogbV90cmFuc2Zvcm0pOworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RS
QU5TTEFURToKKyAgICB7CisgICAgICAgIEZsb2F0UG9pbnQgdHJhbnNsYXRpb24gPSB0cmFuc2Zv
cm0udHJhbnNsYXRlKCk7CisgICAgICAgIHRyYW5zbGF0aW9uICs9IEZsb2F0U2l6ZShtX3RyYW5z
Zm9ybS5lKCksIG1fdHJhbnNmb3JtLmYoKSk7CisgICAgICAgIG5ld1RyYW5zZm9ybS5zZXRUcmFu
c2xhdGUodHJhbnNsYXRpb24ueCgpLCB0cmFuc2xhdGlvbi55KCkpOworICAgICAgICByZXR1cm4g
bmV3VHJhbnNmb3JtOworICAgIH0KKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9S
TV9TQ0FMRToKKyAgICB7CisgICAgICAgIEZsb2F0U2l6ZSBzY2FsZSA9IHRyYW5zZm9ybS5zY2Fs
ZSgpOworICAgICAgICBzY2FsZSArPSBGbG9hdFNpemUobV90cmFuc2Zvcm0uYSgpLCBtX3RyYW5z
Zm9ybS5kKCkpOworICAgICAgICBuZXdUcmFuc2Zvcm0uc2V0U2NhbGUoc2NhbGUud2lkdGgoKSwg
c2NhbGUuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gbmV3VHJhbnNmb3JtOworICAgIH0KKyAg
ICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9ST1RBVEU6CisgICAgeworICAgICAg
ICAvLyBGSVhNRTogSSdtIG5vdCBjZXJ0YWluIHRoZSB0cmFuc2xhdGlvbiBpcyBjYWxjdWxhdGVk
IGNvcnJlY3RseSBoZXJlCisgICAgICAgIEZsb2F0UG9pbnQgdHJhbnNsYXRpb24gPSB0cmFuc2Zv
cm0udHJhbnNsYXRlKCk7CisgICAgICAgIHRyYW5zbGF0aW9uICs9IEZsb2F0U2l6ZShtX3RyYW5z
Zm9ybS5lKCksIG1fdHJhbnNmb3JtLmYoKSk7CisgICAgICAgIG5ld1RyYW5zZm9ybS5zZXRSb3Rh
dGUodHJhbnNmb3JtLmFuZ2xlKCkgKyBtX2FuZ2xlLCB0cmFuc2xhdGlvbi54KCksIHRyYW5zbGF0
aW9uLnkoKSk7CisgICAgICAgIHJldHVybiBuZXdUcmFuc2Zvcm07CisgICAgfQorICAgIGNhc2Ug
U1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NLRVdYOgorICAgICAgICBuZXdUcmFuc2Zvcm0u
c2V0U2tld1godHJhbnNmb3JtLmFuZ2xlKCkgKyBtX2FuZ2xlKTsKKyAgICAgICAgcmV0dXJuIG5l
d1RyYW5zZm9ybTsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TS0VXWToK
KyAgICAgICAgbmV3VHJhbnNmb3JtLnNldFNrZXdZKHRyYW5zZm9ybS5hbmdsZSgpICsgbV9hbmds
ZSk7CisgICAgICAgIHJldHVybiBuZXdUcmFuc2Zvcm07CisgICAgfQorICAgIAorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBTVkdUcmFuc2Zvcm0oKTsKK30KKworYm9vbCBT
VkdUcmFuc2Zvcm1EaXN0YW5jZTo6aXNaZXJvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fdHJh
bnNmb3JtID09IEFmZmluZVRyYW5zZm9ybSgpICYmIG1fYW5nbGUgPT0gMCk7Cit9CisKK2Zsb2F0
IFNWR1RyYW5zZm9ybURpc3RhbmNlOjpkaXN0YW5jZSgpIGNvbnN0Cit7CisgICAgc3dpdGNoICht
X3R5cGUpIHsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOOgor
ICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9S
T1RBVEU6CisgICAgICAgIHJldHVybiBzcXJ0ZihtX2FuZ2xlICogbV9hbmdsZSArIG1fdHJhbnNm
b3JtLmUoKSAqIG1fdHJhbnNmb3JtLmUoKSArIG1fdHJhbnNmb3JtLmYoKSAqIG1fdHJhbnNmb3Jt
LmYoKSk7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fTUFUUklYOgorICAg
ICAgICByZXR1cm4gMDsgLy8gSSdtIG5vdCBxdWl0ZSBzdXJlIHlldCB3aGF0IGRpc3RhbmNlIGJl
dHdlZW4gdHdvIG1hdHJpY2VzIG1lYW5zLgorICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJB
TlNGT1JNX1NDQUxFOgorICAgICAgICByZXR1cm4gc3FydGYobV90cmFuc2Zvcm0uYSgpICogbV90
cmFuc2Zvcm0uYSgpICsgbV90cmFuc2Zvcm0uZCgpICogbV90cmFuc2Zvcm0uZCgpKTsKKyAgICBj
YXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEU6CisgICAgICAgIHJldHVy
biBzcXJ0ZihtX3RyYW5zZm9ybS5lKCkgKiBtX3RyYW5zZm9ybS5lKCkgKyBtX3RyYW5zZm9ybS5m
KCkgKiBtX3RyYW5zZm9ybS5mKCkpOworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNG
T1JNX1NLRVdYOgorICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NLRVdZOgor
ICAgICAgICByZXR1cm4gbV9hbmdsZTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBrc3ZnMi9zdmcvU1ZHVHJh
bnNmb3JtRGlzdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtRGlz
dGFuY2UuaAkocmV2aXNpb24gMCkKKysrIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1EaXN0YW5jZS5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2IEBACisvKgorIENvcHlyaWdodCAoQykgMjAwNyBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorIAorIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgcHJvamVjdAorIAorIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUg
MzMwLAorIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHVHJh
bnNmb3JtRGlzdGFuY2VfaAorI2RlZmluZSBTVkdUcmFuc2Zvcm1EaXN0YW5jZV9oCisjaWZkZWYg
U1ZHX1NVUFBPUlQKKworI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisgICAgCisgICAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOworICAgICAgICAKKyAgICBj
bGFzcyBTVkdUcmFuc2Zvcm1EaXN0YW5jZSB7CisgICAgcHVibGljOgorICAgICAgICBTVkdUcmFu
c2Zvcm1EaXN0YW5jZSgpOworICAgICAgICBTVkdUcmFuc2Zvcm1EaXN0YW5jZShjb25zdCBTVkdU
cmFuc2Zvcm0mIGZyb21UcmFuc2Zvcm0sIGNvbnN0IFNWR1RyYW5zZm9ybSYgdG9UcmFuc2Zvcm0p
OworICAgICAgICAKKyAgICAgICAgU1ZHVHJhbnNmb3JtRGlzdGFuY2Ugc2NhbGVkRGlzdGFuY2Uo
ZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0OworICAgICAgICBTVkdUcmFuc2Zvcm0gYWRkVG9TVkdU
cmFuc2Zvcm0oY29uc3QgU1ZHVHJhbnNmb3JtJikgY29uc3Q7CisgICAgICAgIHZvaWQgYWRkU1ZH
VHJhbnNmb3JtKGNvbnN0IFNWR1RyYW5zZm9ybSYsIGJvb2wgYWJzb2x1dGVWYWx1ZSA9IGZhbHNl
KTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBTVkdUcmFuc2Zvcm0gYWRkU1ZHVHJhbnNmb3Jt
cyhjb25zdCBTVkdUcmFuc2Zvcm0mLCBjb25zdCBTVkdUcmFuc2Zvcm0mKTsKKyAgICAgICAgCisg
ICAgICAgIGJvb2wgaXNaZXJvKCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICBmbG9hdCBkaXN0
YW5jZSgpIGNvbnN0OworICAgIHByaXZhdGU6CisgICAgICAgIFNWR1RyYW5zZm9ybURpc3RhbmNl
KFNWR1RyYW5zZm9ybTo6U1ZHVHJhbnNmb3JtVHlwZSwgZG91YmxlIGFuZ2xlLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKTsKKyAgICAgICAgICAgIAorICAgICAgICBTVkdUcmFuc2Zvcm06OlNWR1Ry
YW5zZm9ybVR5cGUgbV90eXBlOworICAgICAgICBkb3VibGUgbV9hbmdsZTsKKyAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOyAvLyBmb3Igc3RvcmluZyBzY2FsZSwgdHJhbnNsYXRp
b24gb3IgbWF0cml4IHRyYW5zZm9ybXMKKyAgICB9OworfQorCisjZW5kaWYgLy8gU1ZHX1NVUFBP
UlQKKyNlbmRpZiAvLyBTVkdUcmFuc2Zvcm1EaXN0YW5jZV9oCkluZGV4OiBrc3ZnMi9zdmcvU1ZH
VHJhbnNmb3JtTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybUxp
c3QuY3BwCShyZXZpc2lvbiAxOTEwNikKKysrIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1l
bnQuaCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1EaXN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR1Ry
YW5zZm9ybUxpc3QuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC02NSw2ICs2Niwy
MCBAQCBTVkdUcmFuc2Zvcm0gU1ZHVHJhbnNmb3JtTGlzdDo6Y29uY2F0ZW5hCiAgICAgcmV0dXJu
IFNWR1RyYW5zZm9ybShtYXRyaXgpOwogfQogCitTVkdUcmFuc2Zvcm0gU1ZHVHJhbnNmb3JtTGlz
dDo6Y29uY2F0ZW5hdGVGb3JUeXBlKFNWR1RyYW5zZm9ybTo6U1ZHVHJhbnNmb3JtVHlwZSkgY29u
c3QKK3sKKyAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gbnVtYmVyT2ZJdGVtcygpOworICAgIGlm
ICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtKCk7CisgICAgCisgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgU1ZHVHJhbnNmb3JtRGlzdGFuY2UgdG90YWxUcmFuc2Zv
cm07CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAg
ICAgdG90YWxUcmFuc2Zvcm0uYWRkU1ZHVHJhbnNmb3JtKGdldEl0ZW0oaSwgZWMpKTsKKyAgICAK
KyAgICByZXR1cm4gdG90YWxUcmFuc2Zvcm0uYWRkVG9TVkdUcmFuc2Zvcm0oU1ZHVHJhbnNmb3Jt
KCkpOworfQorCiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKIAogLy8gdmltOnRzPTQ6bm9ldApJbmRl
eDoga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcv
U1ZHVHJhbnNmb3JtTGlzdC5oCShyZXZpc2lvbiAxOTEwNikKKysrIGtzdmcyL3N2Zy9TVkdUcmFu
c2Zvcm1MaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgICAgIC8vIEludGVybmFsIHVzZSBvbmx5CiAgICAgICAgIFNWR1RyYW5z
Zm9ybSBjb25jYXRlbmF0ZSgpIGNvbnN0OworICAgICAgICBTVkdUcmFuc2Zvcm0gY29uY2F0ZW5h
dGVGb3JUeXBlKFNWR1RyYW5zZm9ybTo6U1ZHVHJhbnNmb3JtVHlwZSkgY29uc3Q7CiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12677</attachid>
            <date>2007-01-26 02:05:00 -0800</date>
            <delta_ts>2007-01-26 04:53:41 -0800</delta_ts>
            <desc>final patch, with test cases</desc>
            <filename>final.patch</filename>
            <type>text/plain</type>
            <size>98316</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTQy
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA3IEBACisyMDA3LTAx
LTI2ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgY2FsY01vZGUsIGtl
eVRpbWVzIGFuZCAobmVhcmx5KSBrZXlTcGxpbmVzLgorICAgICAgICBodHRwOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM1MAorICAgICAgICBSZS1hcmNoaXRlY3QgbXVjaCBv
ZiB0aGUgYW5pbWF0aW9uIHN5c3RlbSB0byByZW1vdmUgaHVnZSBzZWN0aW9ucyBvZiBjb2RlLgor
ICAgICAgICBBZGRlZCBuZXcgQ29sb3JEaXN0YW5jZSwgU1ZHVHJhbnNmb3JtRGlzdGFuY2UgdG8g
c2ltcGxpZnkgYW5pbWF0ZUNvbG9yLCBhbmltYXRlVHJhbnNmb3JtIGNhbGN1bGF0aW9ucy4KKyAg
ICAgICAgVGhlIHdheSBpcyBub3cgcGF2ZWQgZm9yIGVhc3kgYW5pbWF0ZU1vdGlvbiwgc2V0LCBh
bmQgYW5pbWF0ZSBzdXBwb3J0LgorICAgICAgICAKKyAgICAgICAgQWRkaW5nIG1hbnVhbCBhbmlt
YXRpb24gdGVzdHMgdW50aWwgYnVnIDEyMDc0IGlzIGZpeGVkLgorCisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGtzdmcyL21pc2MvU1ZHVGlt
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGltZXI6OmFwcGx5QW5pbWF0aW9ucyk6Cisg
ICAgICAgICoga3N2ZzIvc3ZnL0NvbG9yRGlzdGFuY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yRGlzdGFuY2U6OkNvbG9yRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6
Y2xhbXBDb2xvclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yRGlzdGFuY2U6OnNjYWxl
ZERpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yRGlzdGFuY2U6OmFkZENvbG9yc0Fu
ZENsYW1wKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yRGlzdGFuY2U6OmFkZFRvQ29sb3JBbmRD
bGFtcCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckRpc3RhbmNlOjppc1plcm8pOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3JEaXN0YW5jZTo6ZGlzdGFuY2UpOgorICAgICAgICAqIGtzdmcyL3N2
Zy9Db2xvckRpc3RhbmNlLmg6IEFkZGVkLgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmltYXRl
Q29sb3JFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVDb2xvckVsZW1l
bnQ6OlNWR0FuaW1hdGVDb2xvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZUNvbG9yRWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uQmFzZVZhbHVlRnJvbUVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6YXBwbHlBbmltYXRlZFZhbHVl
VG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OnVw
ZGF0ZUFuaW1hdGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUNvbG9yRWxl
bWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZH
QW5pbWF0ZUNvbG9yRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUNvbG9y
RWxlbWVudDo6Y29udGV4dEVsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmltYXRl
RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OnVwZGF0ZUFu
aW1hdGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1
bGF0ZUZyb21BbmRUb1ZhbHVlcyk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVNb3Rp
b25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50
OjpoYXNWYWxpZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxl
bWVudDo6dXBkYXRlQW5pbWF0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRl
TW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojp1cGRhdGVBbmltYXRpb25CYXNlVmFsdWVGcm9t
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6YXBw
bHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9y
bUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1l
bnQ6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojp1cGRhdGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojp1cGRhdGVBbmltYXRpb25CYXNlVmFs
dWVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3JtRWxl
bWVudDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnBhcnNlVHJhbnNmb3Jt
VmFsdWUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5o
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmNvbnRleHRF
bGVtZW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpwYXJzZUtleU51bWJlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2VWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VL
ZXlTcGxpbmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6
OnRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpkZXRlY3RBbmltYXRpb25Nb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmFkanVzdFBlcmNlbnRhZ2VQYXN0Rm9yS2V5U3BsaW5lcyk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojp2YWx1ZUluZGV4QW5kUGVyY2VudGFn
ZVBhc3RGb3JEaXN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50
OjpjYWxjdWxhdGVUb3RhbERpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmNhY3VsYXRlVmFs
dWVJbmRleEZvcktleVRpbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1l
bnQ6OmlzVmFsaWRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxl
bWVudDo6Y2FsY3VsYXRlVmFsdWVJbmRleEFuZFBlcmNlbnRhZ2VQYXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGlvbkJhc2VWYWx1ZUZyb21F
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmFwcGx5QW5p
bWF0ZWRWYWx1ZVRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVt
ZW50OjpoYW5kbGVUaW1lckV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVs
ZW1lbnQ6OnVwZGF0ZUFuaW1hdGVkVmFsdWVGb3JFbGFwc2VkU2Vjb25kcyk6CisgICAgICAgICog
a3N2ZzIvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZH
U2V0RWxlbWVudC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1NldEVsZW1lbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1NldEVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVkVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHU2V0RWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKToK
KyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtLmNwcDoKKyAgICAgICAgKFNWR1RyYW5z
Zm9ybTo6dHlwZSk6CisgICAgICAgIChTVkdUcmFuc2Zvcm06OnRyYW5zbGF0ZSk6CisgICAgICAg
IChTVkdUcmFuc2Zvcm06OnNjYWxlKToKKyAgICAgICAgKFNWR1RyYW5zZm9ybTo6c2V0U2tld1gp
OgorICAgICAgICAoU1ZHVHJhbnNmb3JtOjpzZXRTa2V3WSk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR1RyYW5zZm9ybS5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAg
IChXZWJDb3JlOjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3Jt
RGlzdGFuY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybURpc3Rh
bmNlOjpTVkdUcmFuc2Zvcm1EaXN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zv
cm1EaXN0YW5jZTo6c2NhbGVkRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNm
b3JtRGlzdGFuY2U6OmFkZFNWR1RyYW5zZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJh
bnNmb3JtRGlzdGFuY2U6OmFkZFNWR1RyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdU
cmFuc2Zvcm1EaXN0YW5jZTo6YWRkVG9TVkdUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVHJhbnNmb3JtRGlzdGFuY2U6OmlzWmVybyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFu
c2Zvcm1EaXN0YW5jZTo6ZGlzdGFuY2UpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdUcmFuc2Zv
cm1EaXN0YW5jZS5oOiBBZGRlZC4KKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtTGlz
dC5jcHA6CisgICAgICAgIChTVkdUcmFuc2Zvcm1MaXN0Ojpjb25jYXRlbmF0ZUZvclR5cGUpOgor
ICAgICAgICAqIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0Lmg6CisgICAgICAgICogbWFudWFs
LXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlQ29sb3ItYnkuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBt
YW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVDb2xvci1mcm9tLWJ5LnN2ZzogQWRkZWQuCisg
ICAgICAgICogbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlQ29sb3ItcmVwZWF0LWluZGVm
aW5pdGUuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1h
dGVDb2xvci10by1mcm9tLnN2ZzogQWRkZWQuCisgICAgICAgICogbWFudWFsLXRlc3RzL2FuaW1h
dGlvbi9hbmltYXRlQ29sb3ItdG8uc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBtYW51YWwtdGVzdHMv
YW5pbWF0aW9uL2FuaW1hdGVDb2xvci12YWx1ZXMtc2ltcGxlLnN2ZzogQWRkZWQuCisgICAgICAg
ICogbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlVHJhbnNmb3JtLWtleVRpbWVzLnN2Zzog
QWRkZWQuCisgICAgICAgICogbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlVHJhbnNmb3Jt
LXJlcGVhdC1vbmNlLnN2ZzogQWRkZWQuCisKIDIwMDctMDEtMjUgIFJvYiBCdWlzICA8YnVpc0Br
ZGUub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IG9sbGllai4KSW5kZXg6IFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MTM3KQorKysgV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNzk1LDYgKzE3OTUsMTAgQEAKIAkJQTgz
M0M4MEMwQTJDRjI1NjAwRDU3NjY0IC8qIFhNTE5hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MzNDODBBMEEyQ0YyNTYwMEQ1NzY2NCAvKiBY
TUxOYW1lcy5jcHAgKi87IH07CiAJCUE4MzNDODBEMEEyQ0YyNTYwMEQ1NzY2NCAvKiBYTUxOYW1l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgzM0M4
MEIwQTJDRjI1NjAwRDU3NjY0IC8qIFhNTE5hbWVzLmggKi87IH07CiAJCUE4MzNDODUyMEEyQ0Y1
MjgwMEQ1NzY2NCAvKiBTVkdFbGVtZW50RmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTY1ODFFNjA5RDE1MDhEMDAwRTYxRDcgLyogU1ZH
RWxlbWVudEZhY3RvcnkuY3BwICovOyB9OworCQlBODQ5NDJEOTBCNjRBOUNBMDA2OUYwMEYgLyog
Q29sb3JEaXN0YW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTg0OTQyRDcwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlzdGFuY2UuaCAqLzsgfTsK
KwkJQTg0OTQyREEwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlzdGFuY2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg0OTQyRDgwQjY0QTlDQTAw
NjlGMDBGIC8qIENvbG9yRGlzdGFuY2UuY3BwICovOyB9OworCQlBODQ5NDdBRDBCNjdGNEExMDA2
OUYwMEYgLyogU1ZHVHJhbnNmb3JtRGlzdGFuY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NDk0N0FCMEI2N0Y0QTEwMDY5RjAwRiAvKiBTVkdUcmFu
c2Zvcm1EaXN0YW5jZS5oICovOyB9OworCQlBODQ5NDdBRTBCNjdGNEExMDA2OUYwMEYgLyogU1ZH
VHJhbnNmb3JtRGlzdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTg0OTQ3QUMwQjY3RjRBMTAwNjlGMDBGIC8qIFNWR1RyYW5zZm9ybURpc3Rh
bmNlLmNwcCAqLzsgfTsKIAkJQTg2NjI5Q0YwOURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg2NjI5Qzkw
OURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5oICovOyB9OwogCQlBODY2MjlEMDA5REEyQjQ4
MDA5NjMzQTUgLyogSlNVSUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4NjYyOUNBMDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuY3Bw
ICovOyB9OwogCQlBODY2MjlEMTA5REEyQjQ4MDA5NjMzQTUgLyogSlNNb3VzZUV2ZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODY2MjlDQjA5REEy
QjQ3MDA5NjMzQTUgLyogSlNNb3VzZUV2ZW50LmggKi87IH07CkBAIC00ODE0LDYgKzQ4MTgsMTAg
QEAKIAkJQTgzM0M3RjYwQTJDRjFEODAwRDU3NjY0IC8qIHhtbGF0dHJzLmluICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSB4bWxhdHRycy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTgzM0M4MEEwQTJDRjI1NjAwRDU3NjY0IC8qIFhNTE5hbWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxOYW1lcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE4MzNDODBCMEEyQ0YyNTYwMEQ1NzY2NCAvKiBYTUxOYW1lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1MTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTg0OTQyRDcwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlzdGFuY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29sb3JEaXN0YW5jZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBODQ5NDJEODBCNjRBOUNBMDA2OUYwMEYgLyogQ29sb3JE
aXN0YW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2xvckRp
c3RhbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTg0OTQ3QUIwQjY3RjRB
MTAwNjlGMDBGIC8qIFNWR1RyYW5zZm9ybURpc3RhbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR1RyYW5zZm9ybURpc3RhbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUE4NDk0N0FDMEI2N0Y0QTEwMDY5RjAwRiAvKiBTVkdUcmFuc2Zvcm1EaXN0YW5j
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUcmFuc2Zvcm1E
aXN0YW5jZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4NUQ3QTJGMDg3OUVC
QTkwMDZBOTE3MiAvKiBRdWFydHpDb3JlLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gUXVh
cnR6Q29yZS5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9RdWFy
dHpDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJQTg2NjI5
QzkwOURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNVSUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4
NjYyOUNBMDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVUlFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC04MTgwLDYgKzgxODgsOCBAQAogCQlBOEMwRjdGQzA4OTcwMUYzMDBCQTUxMTQg
Lyogc3ZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlB
ODQ5NDJEODBCNjRBOUNBMDA2OUYwMEYgLyogQ29sb3JEaXN0YW5jZS5jcHAgKi8sCisJCQkJQTg0
OTQyRDcwQjY0QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlzdGFuY2UuaCAqLywKIAkJCQlCMkRERjA2
NjBCNDgyQTAzMDA2NEE0QjEgLyogR3JhZGllbnRBdHRyaWJ1dGVzLmggKi8sCiAJCQkJQjI1QUU1
NUQwQjQ5RDY2MzAwNzRDNzI2IC8qIExpbmVhckdyYWRpZW50QXR0cmlidXRlcy5oICovLAogCQkJ
CUIyRERGMDY0MEI0ODI5RkEwMDY0QTRCMSAvKiBQYXR0ZXJuQXR0cmlidXRlcy5oICovLApAQCAt
ODUyMyw2ICs4NTMzLDggQEAKIAkJCQlBOEMwRjhERDA4OTcwMUY0MDBCQTUxMTQgLyogU1ZHVHJh
bnNmb3JtYWJsZS5jcHAgKi8sCiAJCQkJQThDMEY4REUwODk3MDFGNDAwQkE1MTE0IC8qIFNWR1Ry
YW5zZm9ybWFibGUuaCAqLywKIAkJCQlCMkNCNDE1QjBBQjc1OTA0MDA0RDlDNDUgLyogU1ZHVHJh
bnNmb3JtYWJsZS5pZGwgKi8sCisJCQkJQTg0OTQ3QUMwQjY3RjRBMTAwNjlGMDBGIC8qIFNWR1Ry
YW5zZm9ybURpc3RhbmNlLmNwcCAqLywKKwkJCQlBODQ5NDdBQjBCNjdGNEExMDA2OUYwMEYgLyog
U1ZHVHJhbnNmb3JtRGlzdGFuY2UuaCAqLywKIAkJCQlBOEMwRjhFMTA4OTcwMUY0MDBCQTUxMTQg
LyogU1ZHVHJhbnNmb3JtTGlzdC5jcHAgKi8sCiAJCQkJQThDMEY4RTIwODk3MDFGNDAwQkE1MTE0
IC8qIFNWR1RyYW5zZm9ybUxpc3QuaCAqLywKIAkJCQlCMkNCNDE1QzBBQjc1OTA0MDA0RDlDNDUg
LyogU1ZHVHJhbnNmb3JtTGlzdC5pZGwgKi8sCkBAIC0xMTA1MCw3ICsxMTA2Miw5IEBACiAJCQkJ
QjI0MDU1NjYwQjVCRTY0MDAwMkEyOEMwIC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZUxpc3RJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyQTY4MjQwQjVCRURFNzAwMDJBNDgwIC8qIFBy
b2dyZXNzVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwQ0VCQUMwQjYwRkM0OTAwNzYz
N0MxIC8qIFNWR01QYXRoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTg0OTQyRDkwQjY0
QTlDQTAwNjlGMDBGIC8qIENvbG9yRGlzdGFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxRTZF
RUE4MEI2MjhEQjMwMDVGMkY3MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKKwkJCQlBODQ5NDdBRDBCNjdGNEExMDA2OUYwMEYgLyogU1ZHVHJhbnNmb3JtRGlzdGFuY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpAQCAtMTIzOTYsOSArMTI0MTAsMTEgQEAKIAkJCQlBNzg0OTQxQjBC
NUZFNTA3MDAxRTIzN0EgLyogQ2xpcGJvYXJkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzNEZF
OUU1MEI1Q0E1MzkwMDNFNEE3MyAvKiBGaWxlQ2hvb3Nlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBODBDRUJBRDBCNjBGQzQ5MDA3NjM3QzEgLyogU1ZHTVBhdGhFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUE4NDk0MkRBMEI2NEE5Q0EwMDY5RjAwRiAvKiBDb2xvckRpc3RhbmNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUUxRTZFRUE0MEI2MjhEQTgwMDVGMkY3MCAvKiBKU0hUTUxT
ZWxlY3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkyOTI2NDc3MEI2MUZDNzIwMEI0
MUQzNCAvKiBKU0RvY3VtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTdGOTY2
MEI2NEVCQjgwMDRBNjVDQiAvKiBKU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUE4NDk0N0FFMEI2N0Y0QTEwMDY5RjAwRiAvKiBTVkdUcmFuc2Zvcm1EaXN0
YW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IGtzdmcyL21pc2MvU1ZHVGltZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtzdmcyL21pc2MvU1ZHVGltZXIuY3BwCShyZXZpc2lvbiAxOTEzNykKKysr
IGtzdmcyL21pc2MvU1ZHVGltZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw4MSArODMsMzYg
QEAgU1ZHVGltZXI6OlRhcmdldEFuaW1hdGlvbk1hcCBTVkdUaW1lcjo6YQogICAgIHJldHVybiB0
YXJnZXRNYXA7CiB9CiAKLS8vIEZJWE1FOiBFdmVudHVhbGx5IHRoaXMgbG9naWMgd2lsbCBtb3Zl
IGludG8gYW4gQW5pbWF0aW9uQ29tcG9zaXRvciBjbGFzcwotLy8gRklYTUU6IEkgYWxzbyB0aGlu
ayB0aGlzIGFsc28gdmlvbGF0ZXMgdGhlIHNwZWMuICBXZSBzaG91bGQgcHJvYmFibHkganVzdCBj
b3B5IHRoZSBiYXNlVmFsdWUgYW5kIG5vdCBjb25zb2xpZGF0ZQotc3RhdGljIFBhc3NSZWZQdHI8
U1ZHVHJhbnNmb3JtTGlzdD4gYmFzZVZhbHVlVHJhbnNmb3JtTGlzdChTVkdFbGVtZW50KiB0YXJn
ZXRFbGVtZW50KQotewotICAgIEFTU0VSVCh0YXJnZXRFbGVtZW50LT5pc1N0eWxlZFRyYW5zZm9y
bWFibGUoKSk7Ci0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIHRyYW5zZm9ybSA9
IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4odGFyZ2V0RWxlbWVu
dCk7Ci0gICAgUmVmUHRyPFNWR1RyYW5zZm9ybUxpc3Q+IHRhcmdldFRyYW5zZm9ybXMgPSBuZXcg
U1ZHVHJhbnNmb3JtTGlzdCgpOwotICAgIFNWR1RyYW5zZm9ybUxpc3QqIHRyYW5zZm9ybUxpc3Qg
PSB0cmFuc2Zvcm0tPnRyYW5zZm9ybUJhc2VWYWx1ZSgpOwotICAgIGlmICh0cmFuc2Zvcm1MaXN0
KSB7Ci0gICAgICAgIFNWR1RyYW5zZm9ybSBpbml0aWFsVHJhbnNmb3JtID0gdHJhbnNmb3JtTGlz
dC0+Y29uY2F0ZW5hdGUoKTsKLSAgICAgICAgaWYgKGluaXRpYWxUcmFuc2Zvcm0uaXNWYWxpZCgp
KSB7Ci0gICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgICAgICAgICAgdGFyZ2V0VHJh
bnNmb3Jtcy0+YXBwZW5kSXRlbShpbml0aWFsVHJhbnNmb3JtLCBlYyk7Ci0gICAgICAgICAgICBy
ZXR1cm4gdGFyZ2V0VHJhbnNmb3Jtcy5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIHRhcmdldFRyYW5zZm9ybXM7Ci19Ci0KIC8vIEZJWE1FOiBUaGlzIGZ1bnRpb24gd2ls
bCBldmVudHVhbGx5IGJlY29tZSBwYXJ0IG9mIHRoZSBBbmltYXRpb25Db21wb3NpdG9yCiB2b2lk
IFNWR1RpbWVyOjphcHBseUFuaW1hdGlvbnMoZG91YmxlIGVsYXBzZWRTZWNvbmRzLCBjb25zdCBT
VkdUaW1lcjo6VGFyZ2V0QW5pbWF0aW9uTWFwJiB0YXJnZXRNYXApCiB7ICAgIAogICAgIFRhcmdl
dEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgdGFyZ2V0SXRlcmF0b3IgPSB0YXJnZXRNYXAu
YmVnaW4oKTsKICAgICBUYXJnZXRBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIHRlbmQgPSB0
YXJnZXRNYXAuZW5kKCk7CiAgICAgZm9yICg7IHRhcmdldEl0ZXJhdG9yICE9IHRlbmQ7ICsrdGFy
Z2V0SXRlcmF0b3IpIHsKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENvbG9yPiBhdHRyaWJ1dGVU
b0NvbG9yTWFwOyAvLyBzcGVjaWFsIDxhbmltYXRlQ29sb3I+IGNhc2UKLSAgICAgICAgUmVmUHRy
PFNWR1RyYW5zZm9ybUxpc3Q+IHRhcmdldFRyYW5zZm9ybXM7IC8vIHNwZWNpYWwgPGFuaW1hdGVU
cmFuc2Zvcm0+IGNhc2UKLSAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHN0aWxs
IG5vdCAxMDAlIGNvcnJlY3QuICBDb3JyZWN0IHdvdWxkIGJlOgogICAgICAgICAvLyAxLiBXYWxr
IGJhY2t3YXJkcyB0aHJvdWdoIHRoZSBwcmlvcml0eSBsaXN0IHVudGlsIGEgcmVwbGFjZSAoIWlz
QWRkaXRpdmUoKSkgaXMgZm91bmQKKyAgICAgICAgLy8gLS0gVGhpcyBvcHRpbWl6YXRpb24gaXMg
bm90IHBvc3NpYmxlIHdpdGhvdXQgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIGZvciBkZXBlbmRlbnQg
dmFsdWVzIChzdWNoIGFzIGN4IGFuZCBmeCBpbiBTVkdSYWRpYWxHcmFkaWVudCkKICAgICAgICAg
Ly8gMi4gU2V0IHRoZSBpbml0aWFsIHZhbHVlIChvciBsYXN0IHJlcGxhY2UpIGFzIHRoZSBuZXcg
YW5pbVZhbAogICAgICAgICAvLyAzLiBDYWxsIGVhY2ggZW5hYmxlZCBhbmltYXRpb24gaW4gdHVy
biwgdG8gaGF2ZSBpdCBhcHBseSBpdHMgY2hhbmdlcwogICAgICAgICAvLyA0LiBBZnRlciBidWls
ZGluZyBhIG5ldyBhbmltVmFsLCBzZXQgaXQgb24gdGhlIGVsZW1lbnQuCiAgICAgICAgIAorICAg
ICAgICAvLyBDdXJyZW5seSB3ZSB1c2UgdGhlIGFjdHVhbCBhbmltVmFsIG9uIHRoZSBlbGVtZW50
IGFzICJ0ZW1wb3Jhcnkgc3RvcmFnZSIKKyAgICAgICAgLy8gYW5kIGFic3RyYWN0IHRoZSBnZXR0
aW5nL3NldHRpbmcgb2YgdGhlIGF0dHJpYnV0ZXMgaW50byB0aGUgU1ZHQW5pbWF0ZSogY2xhc3Nl
cworICAgICAgICAKICAgICAgICAgdW5zaWduZWQgY291bnQgPSB0YXJnZXRJdGVyYXRvci0+c2Vj
b25kLnNpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKICAgICAgICAgICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQqIGFuaW1hdGlvbiA9IHRhcmdldEl0
ZXJhdG9yLT5zZWNvbmRbaV07CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghYW5pbWF0
aW9uLT5oYXNWYWxpZFRhcmdldCgpKQorICAgICAgICAgICAgaWYgKCFhbmltYXRpb24tPmlzVmFs
aWRBbmltYXRpb24oKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKCFhbmltYXRpb24tPnVwZGF0ZUZvckVsYXBzZWRTZWNvbmRzKGVsYXBz
ZWRTZWNvbmRzKSkKKyAgICAgICAgICAgIGlmICghYW5pbWF0aW9uLT51cGRhdGVBbmltYXRpb25C
YXNlVmFsdWVGcm9tRWxlbWVudCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoIXRhcmdldFRyYW5zZm9ybXMgJiYgKGFuaW1hdGlvbi0+
aGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0ZVRyYW5zZm9ybVRhZykgfHwgYW5pbWF0aW9uLT5o
YXNUYWdOYW1lKFNWR05hbWVzOjphbmltYXRlTW90aW9uVGFnKSkpCi0gICAgICAgICAgICAgICAg
dGFyZ2V0VHJhbnNmb3JtcyA9IGJhc2VWYWx1ZVRyYW5zZm9ybUxpc3QoYW5pbWF0aW9uLT50YXJn
ZXRFbGVtZW50KCkpOworICAgICAgICAgICAgaWYgKCFhbmltYXRpb24tPnVwZGF0ZUFuaW1hdGVk
VmFsdWVGb3JFbGFwc2VkU2Vjb25kcyhlbGFwc2VkU2Vjb25kcykpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhbmltYXRpb24tPmhhc1Rh
Z05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVUcmFuc2Zvcm1UYWcpKQotICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Kj4oYW5pbWF0aW9uKS0+YXBwbHlB
bmltYXRpb25Ub1ZhbHVlKHRhcmdldFRyYW5zZm9ybXMuZ2V0KCkpOwotICAgICAgICAgICAgZWxz
ZSBpZiAoYW5pbWF0aW9uLT5oYXNUYWdOYW1lKFNWR05hbWVzOjphbmltYXRlTW90aW9uVGFnKSkK
LSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxTVkdBbmltYXRlTW90aW9uRWxlbWVudCo+KGFu
aW1hdGlvbiktPmFwcGx5QW5pbWF0aW9uVG9WYWx1ZSh0YXJnZXRUcmFuc2Zvcm1zLmdldCgpKTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKGFuaW1hdGlvbi0+aGFzVGFnTmFtZShTVkdOYW1lczo6YW5p
bWF0ZUNvbG9yVGFnKSkgewotICAgICAgICAgICAgICAgIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQq
IGFuaW1Db2xvciA9IHN0YXRpY19jYXN0PFNWR0FuaW1hdGVDb2xvckVsZW1lbnQqPihhbmltYXRp
b24pOwotICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gYW5pbUNvbG9yLT5hdHRyaWJ1dGVO
YW1lKCk7Ci0gICAgICAgICAgICAgICAgQ29sb3IgY3VycmVudENvbG9yID0gYXR0cmlidXRlVG9D
b2xvck1hcC5jb250YWlucyhuYW1lKSA/IGF0dHJpYnV0ZVRvQ29sb3JNYXAuZ2V0KG5hbWUpIDog
YW5pbUNvbG9yLT5pbml0aWFsQ29sb3IoKTsKLSAgICAgICAgICAgICAgICBhbmltQ29sb3ItPmFw
cGx5QW5pbWF0aW9uVG9WYWx1ZShjdXJyZW50Q29sb3IpOwotICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZVRvQ29sb3JNYXAuc2V0KG5hbWUsIGN1cnJlbnRDb2xvcik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEFwcGx5IGFueSB0cmFuc2Zvcm0gY2hhbmdl
cyAoYW5pbWF0ZVRyYW5zZm9ybSAmIGFuaW1hdGVNb3Rpb24pCi0gICAgICAgIGlmICh0YXJnZXRU
cmFuc2Zvcm1zKSB7Ci0gICAgICAgICAgICBTVkdFbGVtZW50KiBrZXkgPSB0YXJnZXRJdGVyYXRv
ci0+Zmlyc3Q7Ci0gICAgICAgICAgICBpZiAoa2V5ICYmIGtleS0+aXNTdHlsZWRUcmFuc2Zvcm1h
YmxlKCkpIHsKLSAgICAgICAgICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCog
dHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihr
ZXkpOwotICAgICAgICAgICAgICAgIHRyYW5zZm9ybS0+c2V0VHJhbnNmb3JtKHRhcmdldFRyYW5z
Zm9ybXMuZ2V0KCkpOwotICAgICAgICAgICAgICAgIHRyYW5zZm9ybS0+dXBkYXRlTG9jYWxUcmFu
c2Zvcm0odHJhbnNmb3JtLT50cmFuc2Zvcm0oKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIC8vIEFwcGx5IGFueSBjb2xvciBjaGFuZ2VzIChhbmltYXRlQ29s
b3IpCi0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDb2xvcj46Oml0ZXJhdG9yIGNvbG9ySXRlcmF0
b3JFbmQgPSBhdHRyaWJ1dGVUb0NvbG9yTWFwLmVuZCgpOwotICAgICAgICBmb3IgKEhhc2hNYXA8
U3RyaW5nLCBDb2xvcj46Oml0ZXJhdG9yIGNvbG9ySXRlcmF0b3IgPSBhdHRyaWJ1dGVUb0NvbG9y
TWFwLmJlZ2luKCk7IGNvbG9ySXRlcmF0b3IgIT0gY29sb3JJdGVyYXRvckVuZDsgKytjb2xvckl0
ZXJhdG9yKSB7Ci0gICAgICAgICAgICBpZiAoY29sb3JJdGVyYXRvci0+c2Vjb25kLmlzVmFsaWQo
KSkKLSAgICAgICAgICAgICAgICBTVkdBbmltYXRpb25FbGVtZW50OjpzZXRUYXJnZXRBdHRyaWJ1
dGUodGFyZ2V0SXRlcmF0b3ItPmZpcnN0LCBjb2xvckl0ZXJhdG9yLT5maXJzdCwgY29sb3JJdGVy
YXRvci0+c2Vjb25kLm5hbWUoKSk7CisgICAgICAgICAgICBhbmltYXRpb24tPmFwcGx5QW5pbWF0
ZWRWYWx1ZVRvRWxlbWVudCgpOwogICAgICAgICB9CiAgICAgfQogICAgIApJbmRleDoga3N2ZzIv
c3ZnL0NvbG9yRGlzdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9Db2xvckRpc3Rh
bmNlLmNwcAkocmV2aXNpb24gMCkKKysrIGtzdmcyL3N2Zy9Db2xvckRpc3RhbmNlLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAKKyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IHByb2plY3QKKyAKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgCisgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorIAorIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwK
KyBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJDb2xvckRpc3RhbmNlLmgiCisjaW5jbHVk
ZSAiQ29sb3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDb2xvckRpc3RhbmNlOjpDb2xv
ckRpc3RhbmNlKCkKKyAgICA6IG1fcmVkRGlmZigwKQorICAgICwgbV9ncmVlbkRpZmYoMCkKKyAg
ICAsIG1fYmx1ZURpZmYoMCkKK3sKK30KKworQ29sb3JEaXN0YW5jZTo6Q29sb3JEaXN0YW5jZShj
b25zdCBDb2xvciYgZnJvbUNvbG9yLCBjb25zdCBDb2xvciYgdG9Db2xvcikKKyAgICA6IG1fcmVk
RGlmZih0b0NvbG9yLnJlZCgpIC0gZnJvbUNvbG9yLnJlZCgpKQorICAgICwgbV9ncmVlbkRpZmYo
dG9Db2xvci5ncmVlbigpIC0gZnJvbUNvbG9yLmdyZWVuKCkpCisgICAgLCBtX2JsdWVEaWZmKHRv
Q29sb3IuYmx1ZSgpIC0gZnJvbUNvbG9yLmJsdWUoKSkKK3sKK30KKworQ29sb3JEaXN0YW5jZTo6
Q29sb3JEaXN0YW5jZShpbnQgcmVkRGlmZiwgaW50IGdyZWVuRGlmZiwgaW50IGJsdWVEaWZmKQor
ICAgIDogbV9yZWREaWZmKHJlZERpZmYpCisgICAgLCBtX2dyZWVuRGlmZihncmVlbkRpZmYpCisg
ICAgLCBtX2JsdWVEaWZmKGJsdWVEaWZmKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBjbGFt
cENvbG9yVmFsdWUoaW50IHYpCit7CisgICAgaWYgKHYgPiAyNTUpCisgICAgICAgIHYgPSAyNTU7
CisgICAgZWxzZSBpZiAodiA8IDApCisgICAgICAgIHYgPSAwOworICAgIHJldHVybiB2OworfQor
CitDb2xvckRpc3RhbmNlIENvbG9yRGlzdGFuY2U6OnNjYWxlZERpc3RhbmNlKGZsb2F0IHNjYWxl
RmFjdG9yKSBjb25zdAoreworICAgIHJldHVybiBDb2xvckRpc3RhbmNlKHNjYWxlRmFjdG9yICog
bV9yZWREaWZmLCBzY2FsZUZhY3RvciAqIG1fZ3JlZW5EaWZmLCBzY2FsZUZhY3RvciAqIG1fYmx1
ZURpZmYpOworfQorCitDb2xvciBDb2xvckRpc3RhbmNlOjphZGRDb2xvcnNBbmRDbGFtcChjb25z
dCBDb2xvciYgZmlyc3QsIGNvbnN0IENvbG9yJiBzZWNvbmQpCit7CisgICAgcmV0dXJuIENvbG9y
KGNsYW1wQ29sb3JWYWx1ZShmaXJzdC5yZWQoKSArIHNlY29uZC5yZWQoKSksCisgICAgICAgICAg
ICAgICAgIGNsYW1wQ29sb3JWYWx1ZShmaXJzdC5ncmVlbigpICsgc2Vjb25kLmdyZWVuKCkpLAor
ICAgICAgICAgICAgICAgICBjbGFtcENvbG9yVmFsdWUoZmlyc3QuYmx1ZSgpICsgc2Vjb25kLmJs
dWUoKSkpOworfQorCitDb2xvciBDb2xvckRpc3RhbmNlOjphZGRUb0NvbG9yQW5kQ2xhbXAoY29u
c3QgQ29sb3ImIGNvbG9yKSBjb25zdAoreworICAgIHJldHVybiBDb2xvcihjbGFtcENvbG9yVmFs
dWUoY29sb3IucmVkKCkgKyBtX3JlZERpZmYpLAorICAgICAgICAgICAgICAgICBjbGFtcENvbG9y
VmFsdWUoY29sb3IuZ3JlZW4oKSArIG1fZ3JlZW5EaWZmKSwKKyAgICAgICAgICAgICAgICAgY2xh
bXBDb2xvclZhbHVlKGNvbG9yLmJsdWUoKSArIG1fYmx1ZURpZmYpKTsKK30KKworYm9vbCBDb2xv
ckRpc3RhbmNlOjppc1plcm8oKSBjb25zdAoreworICAgIHJldHVybiAobV9yZWREaWZmID09IDAg
JiYgbV9ibHVlRGlmZiA9PSAwICYmIG1fZ3JlZW5EaWZmID09IDApOworfQorCitmbG9hdCBDb2xv
ckRpc3RhbmNlOjpkaXN0YW5jZSgpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBpcyBqdXN0IGEgc2lt
cGxlIGRpc3RhbmNlIGNhbGN1bGF0aW9uLCBub3QgcmVzcGVjdGluZyBjb2xvciBzcGFjZXMKKyAg
ICByZXR1cm4gc3FydGYobV9yZWREaWZmICogbV9yZWREaWZmICsgbV9ibHVlRGlmZiAqIG1fYmx1
ZURpZmYgKyBtX2dyZWVuRGlmZiAqIG1fZ3JlZW5EaWZmKTsKK30KKworfQorCisjZW5kaWYKSW5k
ZXg6IGtzdmcyL3N2Zy9Db2xvckRpc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL0Nv
bG9yRGlzdGFuY2UuaAkocmV2aXNpb24gMCkKKysrIGtzdmcyL3N2Zy9Db2xvckRpc3RhbmNlLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDA3IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgCisgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBwcm9qZWN0CisgCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIAorIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAz
MzAsCisgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBDb2xvckRp
c3RhbmNlX2gKKyNkZWZpbmUgQ29sb3JEaXN0YW5jZV9oCisjaWZkZWYgU1ZHX1NVUFBPUlQKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIGNsYXNzIENvbG9yOworCisgICAgY2xhc3Mg
Q29sb3JEaXN0YW5jZSB7CisgICAgcHVibGljOgorICAgICAgICBDb2xvckRpc3RhbmNlKCk7Cisg
ICAgICAgIENvbG9yRGlzdGFuY2UoY29uc3QgQ29sb3ImIGZyb21Db2xvciwgY29uc3QgQ29sb3Im
IHRvQ29sb3IpOworICAgICAgICBDb2xvckRpc3RhbmNlKGludCByZWREaWZmLCBpbnQgYmx1ZURp
ZmYsIGludCBncmVlbkRpZmYpOworICAgICAgICAKKyAgICAgICAgQ29sb3JEaXN0YW5jZSBzY2Fs
ZWREaXN0YW5jZShmbG9hdCBzY2FsZUZhY3RvcikgY29uc3Q7CisgICAgICAgIENvbG9yIGFkZFRv
Q29sb3JBbmRDbGFtcChjb25zdCBDb2xvciYpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgc3Rh
dGljIENvbG9yIGFkZENvbG9yc0FuZENsYW1wKGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsK
KyAgICAgICAgCisgICAgICAgIGJvb2wgaXNaZXJvKCkgY29uc3Q7CisgICAgICAgIAorICAgICAg
ICBmbG9hdCBkaXN0YW5jZSgpIGNvbnN0OworICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAg
ICBpbnQgbV9yZWREaWZmOworICAgICAgICBpbnQgbV9ncmVlbkRpZmY7CisgICAgICAgIGludCBt
X2JsdWVEaWZmOworICAgIH07Cit9CisKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAorI2VuZGlmIC8v
IENvbG9yRGlzdGFuY2VfaApJbmRleDoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAko
cmV2aXNpb24gMTkxMzcpCisrKyBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDEyICszNyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU1ZHQW5pbWF0aW9uRWxl
bWVudCh0YWdOYW1lLCBkb2MpCi0gICAgLCBtX3RvQ29sb3IobmV3IFNWR0NvbG9yKCkpCi0gICAg
LCBtX2Zyb21Db2xvcihuZXcgU1ZHQ29sb3IoKSkKLSAgICAsIG1fY3VycmVudEl0ZW0oLTEpCi0g
ICAgLCBtX3JlZERpZmYoMCkKLSAgICAsIG1fZ3JlZW5EaWZmKDApCi0gICAgLCBtX2JsdWVEaWZm
KDApCiB7CiB9CiAKQEAgLTUwLDE3NyArNDQsNjAgQEAgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6
flNWR0FuaW1hdGVDb2xvcgogewogfQogCi12b2lkIGNhbGN1bGF0ZUNvbG9yRGlmZmVyZW5jZShj
b25zdCBDb2xvciYgZmlyc3QsIGNvbnN0IENvbG9yJiBzZWNvbmQsIGludCYgcmVkRGlmZiwgaW50
JiBncmVlbkRpZmYsIGludCYgYmx1ZURpZmYpCitib29sIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6
OnVwZGF0ZUFuaW1hdGlvbkJhc2VWYWx1ZUZyb21FbGVtZW50KCkKIHsKLSAgICByZWREaWZmID0g
Zmlyc3QucmVkKCkgLSBzZWNvbmQucmVkKCk7Ci0gICAgZ3JlZW5EaWZmID0gZmlyc3QuZ3JlZW4o
KSAtIHNlY29uZC5ncmVlbigpOwotICAgIGJsdWVEaWZmID0gZmlyc3QuYmx1ZSgpIC0gc2Vjb25k
LmJsdWUoKTsKLX0KLQotdm9pZCBTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpzdG9yZUluaXRpYWxW
YWx1ZSgpCi17Ci0gICAgbV9pbml0aWFsQ29sb3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29s
b3JTdHJpbmcodGFyZ2V0QXR0cmlidXRlKCkpOwotfQotCi12b2lkIFNWR0FuaW1hdGVDb2xvckVs
ZW1lbnQ6OnJlc2V0VmFsdWVzKCkKLXsKLSAgICBtX2N1cnJlbnRJdGVtID0gLTE7Ci0gICAgbV9y
ZWREaWZmID0gMDsKLSAgICBtX2dyZWVuRGlmZiA9IDA7Ci0gICAgbV9ibHVlRGlmZiA9IDA7Ci19
Ci0KLWJvb2wgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6dXBkYXRlQ3VycmVudFZhbHVlKGRvdWJs
ZSB0aW1lUGVyY2VudGFnZSkKLXsKLSAgICBpbnQgciA9IDAsIGcgPSAwLCBiID0gMDsKLSAgICBp
ZiAoKG1fcmVkRGlmZiAhPSAwIHx8IG1fZ3JlZW5EaWZmICE9IDAgfHwgbV9ibHVlRGlmZiAhPSAw
KSAmJiAhbV92YWx1ZXMpCi0gICAgICAgIGNhbGN1bGF0ZUNvbG9yKHRpbWVQZXJjZW50YWdlLCBy
LCBnLCBiKTsKLSAgICBlbHNlIGlmIChtX3ZhbHVlcykgewotICAgICAgICBpbnQgaXRlbUJ5UGVy
Y2VudGFnZSA9IGNhbGN1bGF0ZUN1cnJlbnRWYWx1ZUl0ZW0odGltZVBlcmNlbnRhZ2UpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKGl0ZW1CeVBlcmNlbnRhZ2UgPT0gLTEpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9jdXJyZW50SXRlbSAhPSBpdGVt
QnlQZXJjZW50YWdlKSB7IC8vIEl0ZW0gY2hhbmdlZC4uLgotICAgICAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEV4dHJhY3QgY3VycmVu
dCAnZnJvbScgLyAndG8nIHZhbHVlcwotICAgICAgICAgICAgU3RyaW5nIHZhbHVlMSA9IG1fdmFs
dWVzLT5nZXRJdGVtKGl0ZW1CeVBlcmNlbnRhZ2UsIGVjKTsKLSAgICAgICAgICAgIFN0cmluZyB2
YWx1ZTIgPSBtX3ZhbHVlcy0+Z2V0SXRlbShpdGVtQnlQZXJjZW50YWdlICsgMSwgZWMpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBDYWxjdWxhdGUgci9nL2Igc2hpZnRpbmcgdmFsdWVz
Li4uCi0gICAgICAgICAgICBpZiAoIXZhbHVlMS5pc0VtcHR5KCkgJiYgIXZhbHVlMi5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIGFwcGx5ID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fcmVkRGlmZiAhPSAwIHx8IG1fZ3JlZW5EaWZmICE9IDAgfHwgbV9ibHVlRGlmZiAh
PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBtX3RvQ29sb3ItPmNvbG9yKCkucmVkKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGcgPSBtX3RvQ29sb3ItPmNvbG9yKCkuZ3JlZW4oKTsKLSAg
ICAgICAgICAgICAgICAgICAgYiA9IG1fdG9Db2xvci0+Y29sb3IoKS5ibHVlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBhcHBseSA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fdG9Db2xvci0+
c2V0UkdCQ29sb3IodmFsdWUyKTsKLSAgICAgICAgICAgICAgICBtX2Zyb21Db2xvci0+c2V0UkdC
Q29sb3IodmFsdWUxKTsKLSAgICAgICAgICAgICAgICBjYWxjdWxhdGVDb2xvckRpZmZlcmVuY2Uo
bV90b0NvbG9yLT5jb2xvcigpLCBtX2Zyb21Db2xvci0+Y29sb3IoKSwgbV9yZWREaWZmLCBtX2dy
ZWVuRGlmZiwgbV9ibHVlRGlmZik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
bV9jdXJyZW50SXRlbSA9IGl0ZW1CeVBlcmNlbnRhZ2U7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgaWYgKCFhcHBseSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKG1fcmVkRGlmZiAhPSAwIHx8IG1f
Z3JlZW5EaWZmICE9IDAgfHwgbV9ibHVlRGlmZiAhPSAwKSB7Ci0gICAgICAgICAgICBkb3VibGUg
cmVsYXRpdmVUaW1lID0gY2FsY3VsYXRlUmVsYXRpdmVUaW1lUGVyY2VudGFnZSh0aW1lUGVyY2Vu
dGFnZSwgbV9jdXJyZW50SXRlbSk7Ci0gICAgICAgICAgICBjYWxjdWxhdGVDb2xvcihyZWxhdGl2
ZVRpbWUsIHIsIGcsIGIpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmICghaXNGcm96
ZW4oKSAmJiB0aW1lUGVyY2VudGFnZSA9PSAxLjApIHsKLSAgICAgICAgciA9IG1faW5pdGlhbENv
bG9yLnJlZCgpOwotICAgICAgICBnID0gbV9pbml0aWFsQ29sb3IuZ3JlZW4oKTsKLSAgICAgICAg
YiA9IG1faW5pdGlhbENvbG9yLmJsdWUoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGlzQWNjdW11
bGF0ZWQoKSAmJiByZXBlYXRpb25zKCkgIT0gMC4wKSB7Ci0gICAgICAgIHIgKz0gbV9sYXN0Q29s
b3IucmVkKCk7Ci0gICAgICAgIGcgKz0gbV9sYXN0Q29sb3IuZ3JlZW4oKTsKLSAgICAgICAgYiAr
PSBtX2xhc3RDb2xvci5ibHVlKCk7Ci0gICAgfQotICAgIAotICAgIG1fY3VycmVudENvbG9yID0g
Y2xhbXBDb2xvcihyLCBnLCBiKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTVkdBbmlt
YXRlQ29sb3JFbGVtZW50OjpoYW5kbGVTdGFydENvbmRpdGlvbigpCi17Ci0gICAgc3RvcmVJbml0
aWFsVmFsdWUoKTsKLSAgICAKLSAgICBzd2l0Y2ggKGRldGVjdEFuaW1hdGlvbk1vZGUoKSkgewot
ICAgICAgICBjYXNlIFRPX0FOSU1BVElPTjoKLSAgICAgICAgY2FzZSBGUk9NX1RPX0FOSU1BVElP
TjoKLSAgICAgICAgewotICAgICAgICAgICAgbV90b0NvbG9yLT5zZXRSR0JDb2xvcihtX3RvKTsK
LSAgICAgICAgICAgIGlmICghbV9mcm9tLmlzRW1wdHkoKSkgLy8gZnJvbS10byBhbmltYXRpb24K
LSAgICAgICAgICAgICAgICBtX2Zyb21Db2xvci0+c2V0UkdCQ29sb3IobV9mcm9tKTsKLSAgICAg
ICAgICAgIGVsc2UgLy8gdG8gYW5pbWF0aW9uCi0gICAgICAgICAgICAgICAgbV9mcm9tQ29sb3It
PnNldFJHQkNvbG9yKG1faW5pdGlhbENvbG9yLm5hbWUoKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNhbGN1bGF0ZUNvbG9yRGlmZmVyZW5jZShtX3RvQ29sb3ItPmNvbG9yKCksIG1fZnJv
bUNvbG9yLT5jb2xvcigpLCBtX3JlZERpZmYsIG1fZ3JlZW5EaWZmLCBtX2JsdWVEaWZmKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQllfQU5JTUFUSU9OOgot
ICAgICAgICBjYXNlIEZST01fQllfQU5JTUFUSU9OOgotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoIW1fZnJvbS5pc0VtcHR5KCkpIC8vIGZyb20tYnkgYW5pbWF0aW9uCi0gICAgICAgICAgICAg
ICAgbV9mcm9tQ29sb3ItPnNldFJHQkNvbG9yKG1fZnJvbSk7Ci0gICAgICAgICAgICBlbHNlIC8v
IGJ5IGFuaW1hdGlvbgotICAgICAgICAgICAgICAgIG1fZnJvbUNvbG9yLT5zZXRSR0JDb2xvciht
X2luaXRpYWxDb2xvci5uYW1lKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX3RvQ29s
b3ItPnNldFJHQkNvbG9yKGFkZENvbG9yc0FuZENsYW1wKG1fZnJvbUNvbG9yLT5jb2xvcigpLCBT
VkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcobV9ieSkpLm5hbWUoKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGNhbGN1bGF0ZUNvbG9yRGlmZmVyZW5jZShtX3RvQ29sb3ItPmNv
bG9yKCksIG1fZnJvbUNvbG9yLT5jb2xvcigpLCBtX3JlZERpZmYsIG1fZ3JlZW5EaWZmLCBtX2Js
dWVEaWZmKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVkFM
VUVTX0FOSU1BVElPTjoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICB7Ci0gICAgICAgICAgICAvL2tkRXJyb3IoKSA8PCBrX2Z1bmNpbmZvIDw8ICIgVW5hYmxl
IHRvIGRldGVjdCBhbmltYXRpb24gbW9kZSEgQWJvcnRpbmcgY3JlYXRpb24hIiA8PCBlbmRsOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIAorICAgIG1f
YmFzZUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKHRhcmdldEF0dHJp
YnV0ZUFuaW1hdGVkVmFsdWUoKSk7CisgICAgbV9jb2xvckRpc3RhbmNlID0gQ29sb3JEaXN0YW5j
ZSgpOworICAgIG1fZnJvbUNvbG9yID0gQ29sb3IoKTsKKyAgICBtX3RvQ29sb3IgPSBDb2xvcigp
OwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OnVw
ZGF0ZUxhc3RWYWx1ZVdpdGhDdXJyZW50KCkKLXsKLSAgICBtX2xhc3RDb2xvciA9IG1fY3VycmVu
dENvbG9yOwotfQotCi12b2lkIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmFwcGx5QW5pbWF0aW9u
VG9WYWx1ZShDb2xvciYgY3VycmVudENvbG9yKQordm9pZCBTVkdBbmltYXRlQ29sb3JFbGVtZW50
OjphcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQoKQogewogICAgIGlmIChpc0FkZGl0aXZlKCkp
Ci0gICAgICAgIGN1cnJlbnRDb2xvciA9IGFkZENvbG9yc0FuZENsYW1wKGN1cnJlbnRDb2xvciwg
Y29sb3IoKSk7CisgICAgICAgIHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUoQ29sb3JE
aXN0YW5jZTo6YWRkQ29sb3JzQW5kQ2xhbXAobV9iYXNlQ29sb3IsIG1fYW5pbWF0ZWRDb2xvciku
bmFtZSgpKTsKICAgICBlbHNlCi0gICAgICAgIGN1cnJlbnRDb2xvciA9IGNvbG9yKCk7CisgICAg
ICAgIHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUobV9hbmltYXRlZENvbG9yLm5hbWUo
KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNsYW1wQ29sb3JWYWx1ZShpbnQgdikKK2Jvb2wg
U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6dXBkYXRlQW5pbWF0ZWRWYWx1ZShFQW5pbWF0aW9uTW9k
ZSBhbmltYXRpb25Nb2RlLCBmbG9hdCB0aW1lUGVyY2VudGFnZSwgdW5zaWduZWQgdmFsdWVJbmRl
eCwgZmxvYXQgcGVyY2VudGFnZVBhc3QpCiB7Ci0gICAgaWYgKHYgPiAyNTUpCi0gICAgICAgIHYg
PSAyNTU7Ci0gICAgZWxzZSBpZiAodiA8IDApCi0gICAgICAgIHYgPSAwOwotICAgIHJldHVybiB2
OwotfQotCi1Db2xvciBTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpjbGFtcENvbG9yKGludCByLCBp
bnQgZywgaW50IGIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENvbG9yKGNsYW1wQ29sb3JWYWx1ZShy
KSwgY2xhbXBDb2xvclZhbHVlKGcpLCBjbGFtcENvbG9yVmFsdWUoYikpOwotfQotCi1Db2xvciBT
VkdBbmltYXRlQ29sb3JFbGVtZW50OjphZGRDb2xvcnNBbmRDbGFtcChjb25zdCBDb2xvciYgZmly
c3QsIGNvbnN0IENvbG9yJiBzZWNvbmQpCi17Ci0gICAgcmV0dXJuIENvbG9yKGNsYW1wQ29sb3JW
YWx1ZShmaXJzdC5yZWQoKSArIHNlY29uZC5yZWQoKSksCi0gICAgICAgICAgICAgICAgIGNsYW1w
Q29sb3JWYWx1ZShmaXJzdC5ncmVlbigpICsgc2Vjb25kLmdyZWVuKCkpLAotICAgICAgICAgICAg
ICAgICBjbGFtcENvbG9yVmFsdWUoZmlyc3QuYmx1ZSgpICsgc2Vjb25kLmJsdWUoKSkpOwotfQot
Ci12b2lkIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmNhbGN1bGF0ZUNvbG9yKGRvdWJsZSB0aW1l
LCBpbnQgJnIsIGludCAmZywgaW50ICZiKSBjb25zdAotewotICAgIHIgPSBscm91bmQobV9yZWRE
aWZmICogdGltZSkgKyBtX2Zyb21Db2xvci0+Y29sb3IoKS5yZWQoKTsKLSAgICBnID0gbHJvdW5k
KG1fZ3JlZW5EaWZmICogdGltZSkgKyBtX2Zyb21Db2xvci0+Y29sb3IoKS5ncmVlbigpOwotICAg
IGIgPSBscm91bmQobV9ibHVlRGlmZiAqIHRpbWUpICsgbV9mcm9tQ29sb3ItPmNvbG9yKCkuYmx1
ZSgpOwotfQotCi1Db2xvciBTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojpjb2xvcigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fY3VycmVudENvbG9yOworICAgIGlmIChhbmltYXRpb25Nb2RlID09IFRP
X0FOSU1BVElPTikKKyAgICAgICAgLy8gdG8tYW5pbWF0aW9ucyBoYXZlIGEgc3BlY2lhbCBlcXVh
dGlvbjogdmFsdWUgPSAodG8gLSBiYXNlKSAqICh0aW1lL2R1cmF0aW9uKSArIGJhc2UKKyAgICAg
ICAgbV9hbmltYXRlZENvbG9yID0gQ29sb3JEaXN0YW5jZShtX2Jhc2VDb2xvciwgbV90b0NvbG9y
KS5zY2FsZWREaXN0YW5jZSh0aW1lUGVyY2VudGFnZSkuYWRkVG9Db2xvckFuZENsYW1wKG1fYmFz
ZUNvbG9yKTsKKyAgICBlbHNlCisgICAgICAgIG1fYW5pbWF0ZWRDb2xvciA9IG1fY29sb3JEaXN0
YW5jZS5zY2FsZWREaXN0YW5jZShwZXJjZW50YWdlUGFzdCkuYWRkVG9Db2xvckFuZENsYW1wKG1f
ZnJvbUNvbG9yKTsKKyAgICByZXR1cm4gKG1fYW5pbWF0ZWRDb2xvciAhPSBtX2Jhc2VDb2xvcik7
CiB9CiAKLUNvbG9yIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmluaXRpYWxDb2xvcigpIGNvbnN0
Citib29sIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhF
QW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlLCB1bnNpZ25lZCB2YWx1ZUluZGV4KQogewotICAg
IHJldHVybiBtX2luaXRpYWxDb2xvcjsKKyAgICBzd2l0Y2ggKGFuaW1hdGlvbk1vZGUpIHsKKyAg
ICBjYXNlIEZST01fVE9fQU5JTUFUSU9OOgorICAgICAgICBtX2Zyb21Db2xvciA9IFNWR0NvbG9y
Ojpjb2xvckZyb21SR0JDb2xvclN0cmluZyhtX2Zyb20pOworICAgICAgICAvLyBmYWxsIHRocm91
Z2gKKyAgICBjYXNlIFRPX0FOSU1BVElPTjoKKyAgICAgICAgbV90b0NvbG9yID0gU1ZHQ29sb3I6
OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fdG8pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZST01fQllfQU5JTUFUSU9OOgorICAgICAgICBtX2Zyb21Db2xvciA9IFNWR0NvbG9yOjpjb2xv
ckZyb21SR0JDb2xvclN0cmluZyhtX2Zyb20pOworICAgICAgICBtX3RvQ29sb3IgPSBTVkdDb2xv
cjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcobV9ieSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQllfQU5JTUFUSU9OOgorICAgICAgICBtX2Zyb21Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZy
b21SR0JDb2xvclN0cmluZyhtX2Zyb20pOworICAgICAgICBtX3RvQ29sb3IgPSBDb2xvckRpc3Rh
bmNlOjphZGRDb2xvcnNBbmRDbGFtcChtX2Zyb21Db2xvciwgU1ZHQ29sb3I6OmNvbG9yRnJvbVJH
QkNvbG9yU3RyaW5nKG1fYnkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWQUxVRVNfQU5J
TUFUSU9OOgorICAgICAgICBtX2Zyb21Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xv
clN0cmluZyhtX3ZhbHVlc1t2YWx1ZUluZGV4XSk7CisgICAgICAgIG1fdG9Db2xvciA9ICgodmFs
dWVJbmRleCArIDEpIDwgbV92YWx1ZXMuc2l6ZSgpKSA/IFNWR0NvbG9yOjpjb2xvckZyb21SR0JD
b2xvclN0cmluZyhtX3ZhbHVlc1t2YWx1ZUluZGV4ICsgMV0pIDogbV9mcm9tQ29sb3I7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgTk9fQU5JTUFUSU9OOgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgbV9jb2xvckRpc3RhbmNlID0gQ29sb3JEaXN0YW5j
ZShtX2Zyb21Db2xvciwgbV90b0NvbG9yKTsKKyAgICByZXR1cm4gIW1fY29sb3JEaXN0YW5jZS5p
c1plcm8oKTsKIH0KIAogfQpJbmRleDoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oCShyZXZp
c2lvbiAxOTEzNykKKysrIGtzdmcyL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogCiAjaW5jbHVk
ZSAiU1ZHQW5pbWF0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIkNvbG9yRGlzdGFuY2UuaCIKICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2LDM4ICsz
NywyNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGljOgogICAgICAgICBTVkdBbmlt
YXRlQ29sb3JFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgICAg
ICB2aXJ0dWFsIH5TVkdBbmltYXRlQ29sb3JFbGVtZW50KCk7Ci0KLSAgICAgICAgdm9pZCBhcHBs
eUFuaW1hdGlvblRvVmFsdWUoQ29sb3ImIGN1cnJlbnRDb2xvcik7Ci0KLSAgICAgICAgLy8gSGVs
cGVyCi0gICAgICAgIENvbG9yIGFkZENvbG9yc0FuZENsYW1wKGNvbnN0IENvbG9yJiwgY29uc3Qg
Q29sb3ImKTsKLSAgICAgICAgQ29sb3IgY2xhbXBDb2xvcihpbnQgciwgaW50IGcsIGludCBiKSBj
b25zdDsgLy8gZGVwcmVjYXRlZAotICAgICAgICB2b2lkIGNhbGN1bGF0ZUNvbG9yKGRvdWJsZSB0
aW1lLCBpbnQgJnIsIGludCAmZywgaW50ICZiKSBjb25zdDsKLQotICAgICAgICBDb2xvciBjb2xv
cigpIGNvbnN0OwotICAgICAgICBDb2xvciBpbml0aWFsQ29sb3IoKSBjb25zdDsKKyAgICAgICAg
CisgICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRpb25CYXNlVmFsdWVGcm9tRWxlbWVu
dCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KCk7
CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29u
dGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9Ci0gICAgICAgIHZvaWQgc3RvcmVJ
bml0aWFsVmFsdWUoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHJlc2V0VmFsdWVzKCk7CiAgICAg
ICAgIAotICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQ3VycmVudFZhbHVlKGRvdWJsZSB0aW1l
UGVyY2VudGFnZSk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVTdGFydENvbmRpdGlvbigp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGFzdFZhbHVlV2l0aEN1cnJlbnQoKTsKKyAg
ICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUFuaW1hdGVkVmFsdWUoRUFuaW1hdGlvbk1vZGUsIGZs
b2F0IHRpbWVQZXJjZW50YWdlLCB1bnNpZ25lZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJjZW50YWdl
UGFzdCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoRUFu
aW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpOwogCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgQ29sb3IgbV9sYXN0Q29sb3I7Ci0gICAgICAgIENvbG9yIG1fY3VycmVudENvbG9yOwotICAg
ICAgICBDb2xvciBtX2luaXRpYWxDb2xvcjsKLQotICAgICAgICBSZWZQdHI8U1ZHQ29sb3I+IG1f
dG9Db2xvcjsKLSAgICAgICAgUmVmUHRyPFNWR0NvbG9yPiBtX2Zyb21Db2xvcjsKLQotICAgICAg
ICBpbnQgbV9jdXJyZW50SXRlbTsKLSAgICAgICAgaW50IG1fcmVkRGlmZjsKLSAgICAgICAgaW50
IG1fZ3JlZW5EaWZmOwotICAgICAgICBpbnQgbV9ibHVlRGlmZjsKKyAgICAgICAgQ29sb3IgbV9i
YXNlQ29sb3I7CisgICAgICAgIENvbG9yIG1fYW5pbWF0ZWRDb2xvcjsKKworICAgICAgICBDb2xv
ciBtX3RvQ29sb3I7CisgICAgICAgIENvbG9yIG1fZnJvbUNvbG9yOworCisgICAgICAgIENvbG9y
RGlzdGFuY2UgbV9jb2xvckRpc3RhbmNlOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IGtzdmcyL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtz
dmcyL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5oCShyZXZpc2lvbiAxOTEzNykKKysrIGtzdmcyL3N2
Zy9TVkdBbmltYXRlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29uc3Qg
U1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CiAgICAg
ICAgIAotICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQ3VycmVudFZhbHVlKGRvdWJsZSB0aW1l
UGVyY2VudGFnZSkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgdmlydHVhbCBib29sIGhhbmRs
ZVN0YXJ0Q29uZGl0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgdmlydHVhbCB2b2lk
IGhhbmRsZUVuZENvbmRpdGlvbigpIHsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQW5p
bWF0ZWRWYWx1ZShFQW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVk
IHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KSB7IHJldHVybiBmYWxzZTsgfQorICAg
ICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVBbmltYXRpb25Nb2Rl
LCB1bnNpZ25lZCB2YWx1ZUluZGV4KSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgaW50IG1fY3VycmVudEl0ZW07CkluZGV4OiBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdBbmltYXRlTW90aW9u
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE5MTM3KQorKysga3N2ZzIvc3ZnL1NWR0FuaW1hdGVNb3Rp
b25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUg
IlNWR1RyYW5zZm9ybUxpc3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAordXNpbmcg
bmFtZXNwYWNlIFNWR05hbWVzOwogCiBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6U1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
YykKICAgICA6IFNWR0FuaW1hdGlvbkVsZW1lbnQodGFnTmFtZSwgZG9jKQpAQCAtNDIsNyArNDQs
MzAgQEAgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6On5TVkdBbmltYXRlTW90aQogCiBib29sIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50OjpoYXNWYWxpZFRhcmdldCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIChTVkdBbmltYXRpb25FbGVtZW50OjpoYXNWYWxpZFRhcmdldCgpICYmIHRhcmdldEVsZW1l
bnQoKS0+aXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkpOworICAgIGlmICghU1ZHQW5pbWF0aW9uRWxl
bWVudDo6aGFzVmFsaWRUYXJnZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
dGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIC8vIFNwZWM6IFNWRyAxLjEgc2VjdGlvbiAxOS4yLjE1CisgICAgaWYgKHRh
cmdldEVsZW1lbnQoKS0+aGFzVGFnTmFtZShnVGFnKQorICAgICAgICB8fCB0YXJnZXRFbGVtZW50
KCktPmhhc1RhZ05hbWUoZGVmc1RhZykKKyAgICAgICAgfHwgdGFyZ2V0RWxlbWVudCgpLT5oYXNU
YWdOYW1lKHVzZVRhZykKKyAgICAgICAgfHwgdGFyZ2V0RWxlbWVudCgpLT5oYXNUYWdOYW1lKGlt
YWdlVGFnKQorICAgICAgICB8fCB0YXJnZXRFbGVtZW50KCktPmhhc1RhZ05hbWUoc3dpdGNoVGFn
KQorICAgICAgICB8fCB0YXJnZXRFbGVtZW50KCktPmhhc1RhZ05hbWUocGF0aFRhZykKKyAgICAg
ICAgfHwgdGFyZ2V0RWxlbWVudCgpLT5oYXNUYWdOYW1lKHJlY3RUYWcpCisgICAgICAgIHx8IHRh
cmdldEVsZW1lbnQoKS0+aGFzVGFnTmFtZShjaXJjbGVUYWcpCisgICAgICAgIHx8IHRhcmdldEVs
ZW1lbnQoKS0+aGFzVGFnTmFtZShlbGxpcHNlVGFnKQorICAgICAgICB8fCB0YXJnZXRFbGVtZW50
KCktPmhhc1RhZ05hbWUobGluZVRhZykKKyAgICAgICAgfHwgdGFyZ2V0RWxlbWVudCgpLT5oYXNU
YWdOYW1lKHBvbHlsaW5lVGFnKQorICAgICAgICB8fCB0YXJnZXRFbGVtZW50KCktPmhhc1RhZ05h
bWUocG9seWdvblRhZykKKyAgICAgICAgfHwgdGFyZ2V0RWxlbWVudCgpLT5oYXNUYWdOYW1lKHRl
eHRUYWcpCisgICAgICAgIHx8IHRhcmdldEVsZW1lbnQoKS0+aGFzVGFnTmFtZShjbGlwUGF0aFRh
ZykKKyAgICAgICAgfHwgdGFyZ2V0RWxlbWVudCgpLT5oYXNUYWdOYW1lKG1hc2tUYWcpCisgICAg
ICAgIHx8IHRhcmdldEVsZW1lbnQoKS0+aGFzVGFnTmFtZShhVGFnKQorICAgICAgICB8fCB0YXJn
ZXRFbGVtZW50KCktPmhhc1RhZ05hbWUoZm9yZWlnbk9iamVjdFRhZykpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBTVkdBbmltYXRlTW90aW9uRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQpAQCAtODgs
MjEgKzExMywyNiBAQCBQYXRoIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjphbmltYXRpb25QCiAg
ICAgcmV0dXJuIFBhdGgoKTsKIH0KIAotYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6dXBk
YXRlQ3VycmVudFZhbHVlKGRvdWJsZSB0aW1lUGVyY2VudGFnZSkKK2Jvb2wgU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVkVmFsdWUoRUFuaW1hdGlvbk1vZGUsIGZsb2F0IHRp
bWVQZXJjZW50YWdlLCB1bnNpZ25lZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJjZW50YWdlUGFzdCkK
IHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6
aGFuZGxlU3RhcnRDb25kaXRpb24oKQorYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2Fs
Y3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVBbmltYXRpb25Nb2RlLCB1bnNpZ25lZCB2YWx1ZUluZGV4
KQogewogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50
OjphcHBseUFuaW1hdGlvblRvVmFsdWUoU1ZHVHJhbnNmb3JtTGlzdCogdGFyZ2V0VHJhbnNmb3Jt
cykKK2Jvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGlvbkJhc2VWYWx1
ZUZyb21FbGVtZW50KCkKIHsKLSAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgIGlmICghaXNBZGRp
dGl2ZSgpKQotICAgICAgICB0YXJnZXRUcmFuc2Zvcm1zLT5jbGVhcihlYyk7CisgICAgLy8gbm90
IGltcGxlbWVudGVkLCByZW1vdmUgc3VwZXIgY2FsbCB1cG9uIGltcGxlbWVudGF0aW9uCisgICAg
cmV0dXJuIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGlvbkJhc2VWYWx1ZUZyb21F
bGVtZW50KCk7Cit9CisKK3ZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmFwcGx5QW5pbWF0
ZWRWYWx1ZVRvRWxlbWVudCgpCit7CisgICAgLy8gbm90IGltcGxlbWVudGVkLCByZW1vdmUgc3Vw
ZXIgY2FsbCB1cG9uIGltcGxlbWVudGF0aW9uCisgICAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6YXBw
bHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KCk7CiB9CiAKIH0KSW5kZXg6IGtzdmcyL3N2Zy9TVkdB
bmltYXRlTW90aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdBbmltYXRl
TW90aW9uRWxlbWVudC5oCShyZXZpc2lvbiAxOTEzNykKKysrIGtzdmcyL3N2Zy9TVkdBbmltYXRl
TW90aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxNyArMzYsMTggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICAKICAgICAgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkVGFy
Z2V0KCkgY29uc3Q7CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0gICAgICAgIAotICAgICAgICB2b2lkIGFwcGx5
QW5pbWF0aW9uVG9WYWx1ZShTVkdUcmFuc2Zvcm1MaXN0Kik7CisgICAgICAgIHZpcnR1YWwgYm9v
bCB1cGRhdGVBbmltYXRpb25CYXNlVmFsdWVGcm9tRWxlbWVudCgpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgYXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KCk7CiAgICAgICAgIAorICAgICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisgICAg
ICAgICAgICAgICAgCiAgICAgICAgIFBhdGggYW5pbWF0aW9uUGF0aCgpOwogICAgICAgICAKICAg
ICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFs
IGJvb2wgdXBkYXRlQ3VycmVudFZhbHVlKGRvdWJsZSB0aW1lUGVyY2VudGFnZSk7Ci0gICAgICAg
IHZpcnR1YWwgYm9vbCBoYW5kbGVTdGFydENvbmRpdGlvbigpOworICAgICAgICB2aXJ0dWFsIGJv
b2wgdXBkYXRlQW5pbWF0ZWRWYWx1ZShFQW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNlbnRh
Z2UsIHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KTsKKyAgICAgICAg
dmlydHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSwgdW5z
aWduZWQgdmFsdWVJbmRleCk7CiAgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIFBhdGgg
bV9wYXRoOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxOTEzNykKKysrIGtzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDExICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBTVkdB
bmltYXRpb25FbGVtZW50KHRhZ05hbWUsIGRvYykKLSAgICAsIG1fY3VycmVudEl0ZW0oLTEpCiAg
ICAgLCBtX3R5cGUoU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1VOS05PV04pCi0gICAgLCBt
X3JvdGF0ZVNwZWNpYWxDYXNlKGZhbHNlKQotICAgICwgbV90b1JvdGF0ZVNwZWNpYWxDYXNlKGZh
bHNlKQotICAgICwgbV9mcm9tUm90YXRlU3BlY2lhbENhc2UoZmFsc2UpCiB7CiB9CiAKQEAgLTc2
LDIyMiArNzIsODYgQEAgdm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cGFyc2VNYQog
ICAgICAgICBTVkdBbmltYXRpb25FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsK
IH0KIAotdm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6c3RvcmVJbml0aWFsVmFsdWUo
KQorYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6dXBkYXRlQW5pbWF0ZWRWYWx1ZShF
QW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlLCBmbG9hdCB0aW1lUGVyY2VudGFnZSwgdW5zaWdu
ZWQgdmFsdWVJbmRleCwgZmxvYXQgcGVyY2VudGFnZVBhc3QpCiB7Ci0gICAgbV9pbml0aWFsVHJh
bnNmb3JtID0gU1ZHVHJhbnNmb3JtKCk7Ci0gICAgCi0gICAgLy8gU2F2ZSBpbml0aWFsIHRyYW5z
Zm9ybS4uLiAobmVlZGVkIGZvciBmaWxsPSJyZW1vdmUiIG9yIGFkZGl0dmU9InN1bSIpCi0gICAg
aWYgKHRhcmdldEVsZW1lbnQoKS0+aXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkpIHsKLSAgICAgICAg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4odGFyZ2V0RWxlbWVudCgpKTsKLSAgICAgICAg
UmVmUHRyPFNWR1RyYW5zZm9ybUxpc3Q+IHRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm0tPnRyYW5z
Zm9ybUJhc2VWYWx1ZSgpOwotICAgICAgICBpZiAodHJhbnNmb3JtTGlzdCkgewotICAgICAgICAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcg
aSA9IDA7IGkgPCB0cmFuc2Zvcm1MaXN0LT5udW1iZXJPZkl0ZW1zKCk7IGkrKykgewotICAgICAg
ICAgICAgICAgIFNWR1RyYW5zZm9ybSB2YWx1ZSA9IHRyYW5zZm9ybUxpc3QtPmdldEl0ZW0oaSwg
ZWMpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlz
IHdyb25nIGlmIHRoZSBpbml0aWFsIHRyYW5zZm9ybSBsaXN0IGhhcyBub3QgYmVlbiBub3JtYWxp
emVkCi0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLnR5cGUoKSA9PSBtX3R5cGUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV9pbml0aWFsVHJhbnNmb3JtID0gdmFsdWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KKyAgICBpZiAoYW5pbWF0aW9uTW9kZSA9PSBUT19BTklNQVRJT04pCisgICAgICAg
IC8vIHRvLWFuaW1hdGlvbnMgaGF2ZSBhIHNwZWNpYWwgZXF1YXRpb246IHZhbHVlID0gKHRvIC0g
YmFzZSkgKiAodGltZS9kdXJhdGlvbikgKyBiYXNlCisgICAgICAgIG1fYW5pbWF0ZWRUcmFuc2Zv
cm0gPSBTVkdUcmFuc2Zvcm1EaXN0YW5jZShtX2Jhc2VUcmFuc2Zvcm0sIG1fdG9UcmFuc2Zvcm0p
LnNjYWxlZERpc3RhbmNlKHRpbWVQZXJjZW50YWdlKS5hZGRUb1NWR1RyYW5zZm9ybShtX2Jhc2VU
cmFuc2Zvcm0pOworICAgIGVsc2UKKyAgICAgICAgbV9hbmltYXRlZFRyYW5zZm9ybSA9IG1fdHJh
bnNmb3JtRGlzdGFuY2Uuc2NhbGVkRGlzdGFuY2UocGVyY2VudGFnZVBhc3QpLmFkZFRvU1ZHVHJh
bnNmb3JtKG1fZnJvbVRyYW5zZm9ybSk7CisgICAgcmV0dXJuIChtX2FuaW1hdGVkVHJhbnNmb3Jt
ICE9IG1fYmFzZVRyYW5zZm9ybSk7CiB9CiAKLXZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1l
bnQ6OnJlc2V0VmFsdWVzKCkKK2Jvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnVwZGF0
ZUFuaW1hdGlvbkJhc2VWYWx1ZUZyb21FbGVtZW50KCkKIHsKLSAgICBtX2N1cnJlbnRJdGVtID0g
LTE7CisgICAgbV9iYXNlVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtKCk7CiAgICAgbV90b1RyYW5z
Zm9ybSA9IFNWR1RyYW5zZm9ybSgpOwogICAgIG1fZnJvbVRyYW5zZm9ybSA9IFNWR1RyYW5zZm9y
bSgpOwotICAgIG1faW5pdGlhbFRyYW5zZm9ybSA9IFNWR1RyYW5zZm9ybSgpOwotfQotCi1ib29s
IFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojp1cGRhdGVDdXJyZW50VmFsdWUoZG91YmxlIHRp
bWVQZXJjZW50YWdlKQotewotICAgIEFmZmluZVRyYW5zZm9ybSBxVG9NYXRyaXgsIHFGcm9tTWF0
cml4OwotICAgIGRvdWJsZSB1c2VUaW1lUGVyY2VudGFnZSA9IHRpbWVQZXJjZW50YWdlOwotICAg
IAotICAgIGlmIChtX3ZhbHVlcykgewotICAgICAgICBpbnQgaXRlbUJ5UGVyY2VudGFnZSA9IGNh
bGN1bGF0ZUN1cnJlbnRWYWx1ZUl0ZW0odGltZVBlcmNlbnRhZ2UpOwotICAgICAgICAKLSAgICAg
ICAgaWYgKGl0ZW1CeVBlcmNlbnRhZ2UgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIAotICAgICAgICBpZiAobV9jdXJyZW50SXRlbSAhPSBpdGVtQnlQZXJjZW50YWdl
KSB7IC8vIEl0ZW0gY2hhbmdlZC4uLgotICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEV4dHJhY3QgY3VycmVudCAnZnJvbScgLyAn
dG8nIHZhbHVlcwotICAgICAgICAgICAgU3RyaW5nIHZhbHVlMSA9IG1fdmFsdWVzLT5nZXRJdGVt
KGl0ZW1CeVBlcmNlbnRhZ2UsIGVjKTsKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZTIgPSBtX3Zh
bHVlcy0+Z2V0SXRlbShpdGVtQnlQZXJjZW50YWdlICsgMSwgZWMpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBDYWxjdWxhdGUgbmV3IGZyb20vdG8gdHJhbnNmb3JtIHZhbHVlcy4uLgot
ICAgICAgICAgICAgaWYgKCF2YWx1ZTEuaXNFbXB0eSgpICYmICF2YWx1ZTIuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgYm9vbCBhcHBseSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGlm
IChtX3RvVHJhbnNmb3JtLmlzVmFsaWQoKSAmJiBtX2Zyb21UcmFuc2Zvcm0uaXNWYWxpZCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHFUb01hdHJpeCA9IG1fdG9UcmFuc2Zvcm0ubWF0cml4KCk7
Ci0gICAgICAgICAgICAgICAgICAgIHFGcm9tTWF0cml4ID0gbV9mcm9tVHJhbnNmb3JtLm1hdHJp
eCgpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgYXBwbHkgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICB1c2VUaW1lUGVyY2VudGFnZSA9IDEuMDsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV90b1RyYW5z
Zm9ybSA9IHBhcnNlVHJhbnNmb3JtVmFsdWUodmFsdWUyKTsKLSAgICAgICAgICAgICAgICBtX3Rv
Um90YXRlU3BlY2lhbENhc2UgPSBtX3JvdGF0ZVNwZWNpYWxDYXNlOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIG1fZnJvbVRyYW5zZm9ybSA9IHBhcnNlVHJhbnNmb3JtVmFsdWUo
dmFsdWUxKTsKLSAgICAgICAgICAgICAgICBtX2Zyb21Sb3RhdGVTcGVjaWFsQ2FzZSA9IG1fcm90
YXRlU3BlY2lhbENhc2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9jdXJy
ZW50SXRlbSA9IGl0ZW1CeVBlcmNlbnRhZ2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKCFhcHBseSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG1fdG9UcmFuc2Zvcm0uaXNW
YWxpZCgpICYmIG1fZnJvbVRyYW5zZm9ybS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICB1c2VUaW1l
UGVyY2VudGFnZSA9IGNhbGN1bGF0ZVJlbGF0aXZlVGltZVBlcmNlbnRhZ2UodGltZVBlcmNlbnRh
Z2UsIG1fY3VycmVudEl0ZW0pOwotICAgIH0KKyAgICBtX2FuaW1hdGVkVHJhbnNmb3JtID0gU1ZH
VHJhbnNmb3JtKCk7CiAgICAgCi0gICAgaWYgKG1fdG9UcmFuc2Zvcm0uaXNWYWxpZCgpICYmIHFU
b01hdHJpeC5pc0lkZW50aXR5KCkpCi0gICAgICAgIHFUb01hdHJpeCA9IG1fdG9UcmFuc2Zvcm0u
bWF0cml4KCk7CisgICAgaWYgKCF0YXJnZXRFbGVtZW50KCktPmlzU3R5bGVkVHJhbnNmb3JtYWJs
ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKG1fZnJvbVRyYW5zZm9y
bS5pc1ZhbGlkKCkgJiYgcUZyb21NYXRyaXguaXNJZGVudGl0eSgpKQotICAgICAgICBxRnJvbU1h
dHJpeCA9IG1fZnJvbVRyYW5zZm9ybS5tYXRyaXgoKTsKKyAgICBTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudCogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQqPih0YXJnZXRFbGVtZW50KCkpOworICAgIFJlZlB0cjxTVkdUcmFuc2Zvcm1MaXN0
PiB0cmFuc2Zvcm1MaXN0ID0gdHJhbnNmb3JtLT50cmFuc2Zvcm0oKTsKKyAgICBpZiAoIXRyYW5z
Zm9ybUxpc3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBtX2N1cnJlbnRUcmFu
c2Zvcm0ucmVzZXQoKTsKLSAgICAKLSAgICBpZiAoaXNBY2N1bXVsYXRlZCgpICYmIHJlcGVhdGlv
bnMoKSAhPSAwLjApCi0gICAgICAgIG1fY3VycmVudFRyYW5zZm9ybS5tdWx0aXBseShtX2xhc3RU
cmFuc2Zvcm0pOwotICAgIAotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgU1ZH
VHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURToKLSAgICAgICAgewotICAgICAgICAg
ICAgZG91YmxlIGR4ID0gKChxVG9NYXRyaXguZSgpIC0gcUZyb21NYXRyaXguZSgpKSAqIHVzZVRp
bWVQZXJjZW50YWdlKSArIHFGcm9tTWF0cml4LmUoKTsKLSAgICAgICAgICAgIGRvdWJsZSBkeSA9
ICgocVRvTWF0cml4LmYoKSAtIHFGcm9tTWF0cml4LmYoKSkgKiB1c2VUaW1lUGVyY2VudGFnZSkg
KyBxRnJvbU1hdHJpeC5mKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fY3VycmVudFRy
YW5zZm9ybS50cmFuc2xhdGUoZHgsIGR5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NDQUxFOgotICAgICAg
ICB7Ci0gICAgICAgICAgICBkb3VibGUgc3ggPSAoKHFUb01hdHJpeC5hKCkgLSBxRnJvbU1hdHJp
eC5hKCkpICogdXNlVGltZVBlcmNlbnRhZ2UpICsgcUZyb21NYXRyaXguYSgpOwotICAgICAgICAg
ICAgZG91YmxlIHN5ID0gKChxVG9NYXRyaXguZCgpIC0gcUZyb21NYXRyaXguZCgpKSAqIHVzZVRp
bWVQZXJjZW50YWdlKSArIHFGcm9tTWF0cml4LmQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgbV9jdXJyZW50VHJhbnNmb3JtLnNjYWxlKHN4LCBzeSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9ST1RB
VEU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRvdWJsZSB0b0FuZ2xlLCB0b0N4LCB0b0N5LCBm
cm9tQW5nbGUsIGZyb21DeCwgZnJvbUN5OwotICAgICAgICAgICAgY2FsY3VsYXRlUm90YXRpb25G
cm9tTWF0cml4KHFUb01hdHJpeCwgdG9BbmdsZSwgdG9DeCwgdG9DeSk7Ci0gICAgICAgICAgICBj
YWxjdWxhdGVSb3RhdGlvbkZyb21NYXRyaXgocUZyb21NYXRyaXgsIGZyb21BbmdsZSwgZnJvbUN4
LCBmcm9tQ3kpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV90b1JvdGF0ZVNwZWNp
YWxDYXNlKQotICAgICAgICAgICAgICAgIHRvQW5nbGUgPSAobHJvdW5kKHRvQW5nbGUpID09IDEp
ID8gMC4wIDogMzYwLjA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX2Zyb21Sb3Rh
dGVTcGVjaWFsQ2FzZSkKLSAgICAgICAgICAgICAgICBmcm9tQW5nbGUgPSAobHJvdW5kKGZyb21B
bmdsZSkgPT0gMSkgPyAwLjAgOiAzNjAuMDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZG91
YmxlIGFuZ2xlID0gKCh0b0FuZ2xlIC0gZnJvbUFuZ2xlKSAqIHVzZVRpbWVQZXJjZW50YWdlKSAr
IGZyb21BbmdsZTsKLSAgICAgICAgICAgIGRvdWJsZSBjeCA9ICh0b0N4IC0gZnJvbUN4KSAqIHVz
ZVRpbWVQZXJjZW50YWdlICsgZnJvbUN4OwotICAgICAgICAgICAgZG91YmxlIGN5ID0gKHRvQ3kg
LSBmcm9tQ3kpICogdXNlVGltZVBlcmNlbnRhZ2UgKyBmcm9tQ3k7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIG1fY3VycmVudFRyYW5zZm9ybS50cmFuc2xhdGUoY3gsIGN5KTsKLSAgICAgICAg
ICAgIG1fY3VycmVudFRyYW5zZm9ybS5yb3RhdGUoYW5nbGUpOwotICAgICAgICAgICAgbV9jdXJy
ZW50VHJhbnNmb3JtLnRyYW5zbGF0ZSgtY3gsIC1jeSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TS0VXWDoK
LSAgICAgICAgewotICAgICAgICAgICAgZG91YmxlIHN4ID0gKFNWR0FuZ2xlOjp0b2RlZyhhdGFu
KHFUb01hdHJpeC5jKCkpIC0gYXRhbihxRnJvbU1hdHJpeC5jKCkpKSAqCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgdXNlVGltZVBlcmNlbnRhZ2UpICsgU1ZHQW5nbGU6OnRvZGVnKGF0YW4ocUZy
b21NYXRyaXguYygpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fY3VycmVudFRyYW5z
Zm9ybS5zaGVhcihzeCwgMS4wKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NLRVdZOgotICAgICAgICB7Ci0g
ICAgICAgICAgICBkb3VibGUgc3kgPSAoU1ZHQW5nbGU6OnRvZGVnKGF0YW4ocVRvTWF0cml4LmIo
KSkgLSBhdGFuKHFGcm9tTWF0cml4LmIoKSkpICoKLSAgICAgICAgICAgICAgICAgICAgICAgICB1
c2VUaW1lUGVyY2VudGFnZSkgKyBTVkdBbmdsZTo6dG9kZWcoYXRhbihxRnJvbU1hdHJpeC5iKCkp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9jdXJyZW50VHJhbnNmb3JtLnNoZWFyKDEu
MCwgc3kpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBtX2Jhc2VUcmFuc2Zvcm0gPSB0cmFuc2Zv
cm1MaXN0LT5jb25jYXRlbmF0ZUZvclR5cGUobV90eXBlKTsKKyAgICAgICAgCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmhhbmRsZVN0YXJ0
Q29uZGl0aW9uKCkKK3ZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmFwcGx5QW5pbWF0
ZWRWYWx1ZVRvRWxlbWVudCgpCiB7Ci0gICAgc3RvcmVJbml0aWFsVmFsdWUoKTsKKyAgICBpZiAo
IXRhcmdldEVsZW1lbnQoKS0+aXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogdHJhbnNmb3JtID0g
c3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPih0YXJnZXRFbGVtZW50
KCkpOworICAgIFJlZlB0cjxTVkdUcmFuc2Zvcm1MaXN0PiB0cmFuc2Zvcm1MaXN0ID0gdHJhbnNm
b3JtLT50cmFuc2Zvcm0oKTsKKyAgICBpZiAoIXRyYW5zZm9ybUxpc3QpCisgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBzd2l0Y2ggKGRldGVjdEFuaW1hdGlvbk1vZGUoKSkgewotICAgICAgICBj
YXNlIFRPX0FOSU1BVElPTjoKLSAgICAgICAgY2FzZSBGUk9NX1RPX0FOSU1BVElPTjoKLSAgICAg
ICAgeyAgICAgICAgCi0gICAgICAgICAgICBtX3RvVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1W
YWx1ZShtX3RvKTsKLSAgICAgICAgICAgIG1fdG9Sb3RhdGVTcGVjaWFsQ2FzZSA9IG1fcm90YXRl
U3BlY2lhbENhc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9mcm9tLmlzRW1w
dHkoKSkgeyAvLyBmcm9tLXRvIGFuaW1hdGlvbgotICAgICAgICAgICAgICAgIG1fZnJvbVRyYW5z
Zm9ybSA9IHBhcnNlVHJhbnNmb3JtVmFsdWUobV9mcm9tKTsKLSAgICAgICAgICAgICAgICBtX2Zy
b21Sb3RhdGVTcGVjaWFsQ2FzZSA9IG1fcm90YXRlU3BlY2lhbENhc2U7Ci0gICAgICAgICAgICB9
IGVsc2UgeyAvLyB0byBhbmltYXRpb24KLSAgICAgICAgICAgICAgICBtX2Zyb21UcmFuc2Zvcm0g
PSBtX2luaXRpYWxUcmFuc2Zvcm07Ci0gICAgICAgICAgICAgICAgbV9mcm9tUm90YXRlU3BlY2lh
bENhc2UgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKCFtX2Zyb21UcmFuc2Zvcm0uaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIG1fZnJvbVRy
YW5zZm9ybSA9IFNWR1RyYW5zZm9ybSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEJZX0FOSU1BVElPTjoKLSAgICAgICAgY2FzZSBG
Uk9NX0JZX0FOSU1BVElPTjoKLSAgICAgICAgewotICAgICAgICAgICAgbV90b1RyYW5zZm9ybSA9
IHBhcnNlVHJhbnNmb3JtVmFsdWUobV9ieSk7Ci0gICAgICAgICAgICBtX3RvUm90YXRlU3BlY2lh
bENhc2UgPSBtX3JvdGF0ZVNwZWNpYWxDYXNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoIW1fZnJvbS5pc0VtcHR5KCkpIHsgLy8gZnJvbS1ieSBhbmltYXRpb24KLSAgICAgICAgICAg
ICAgICBtX2Zyb21UcmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybVZhbHVlKG1fZnJvbSk7Ci0gICAg
ICAgICAgICAgICAgbV9mcm9tUm90YXRlU3BlY2lhbENhc2UgPSBtX3JvdGF0ZVNwZWNpYWxDYXNl
OwotICAgICAgICAgICAgfSBlbHNlIHsgLy8gYnkgYW5pbWF0aW9uCi0gICAgICAgICAgICAgICAg
bV9mcm9tVHJhbnNmb3JtID0gbV9pbml0aWFsVHJhbnNmb3JtOwotICAgICAgICAgICAgICAgIG1f
ZnJvbVJvdGF0ZVNwZWNpYWxDYXNlID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICghbV9mcm9tVHJhbnNmb3JtLmlzVmFsaWQoKSkKLSAgICAgICAg
ICAgICAgICBtX2Zyb21UcmFuc2Zvcm0gPSBTVkdUcmFuc2Zvcm0oKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVkFMVUVTX0FOSU1BVElPTjoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICB7Ci0gICAgICAgICAgICAvL2tk
RXJyb3IoKSA8PCBrX2Z1bmNpbmZvIDw8ICIgVW5hYmxlIHRvIGRldGVjdCBhbmltYXRpb24gbW9k
ZSEgQWJvcnRpbmcgY3JlYXRpb24hIiA8PCBlbmRsOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNWR0FuaW1h
dGVUcmFuc2Zvcm1FbGVtZW50Ojp1cGRhdGVMYXN0VmFsdWVXaXRoQ3VycmVudCgpCi17Ci0gICAg
bV9sYXN0VHJhbnNmb3JtID0gbV9jdXJyZW50VHJhbnNmb3JtOwotfQotCi12b2lkIFNWR0FuaW1h
dGVUcmFuc2Zvcm1FbGVtZW50OjphcHBseUFuaW1hdGlvblRvVmFsdWUoU1ZHVHJhbnNmb3JtTGlz
dCogdGFyZ2V0VHJhbnNmb3JtcykKLXsKICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgIGlmICgh
aXNBZGRpdGl2ZSgpKQotICAgICAgICB0YXJnZXRUcmFuc2Zvcm1zLT5jbGVhcihlYyk7CisgICAg
ICAgIHRyYW5zZm9ybUxpc3QtPmNsZWFyKGVjKTsKICAgICAKLSAgICB0YXJnZXRUcmFuc2Zvcm1z
LT5hcHBlbmRJdGVtKFNWR1RyYW5zZm9ybShtX2N1cnJlbnRUcmFuc2Zvcm0pLCBlYyk7CisgICAg
dHJhbnNmb3JtTGlzdC0+YXBwZW5kSXRlbShtX2FuaW1hdGVkVHJhbnNmb3JtLCBlYyk7CisgICAg
dHJhbnNmb3JtLT51cGRhdGVMb2NhbFRyYW5zZm9ybSh0cmFuc2Zvcm1MaXN0LmdldCgpKTsKK30K
KworYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFs
dWVzKEVBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpCit7
CisgICAgc3dpdGNoIChkZXRlY3RBbmltYXRpb25Nb2RlKCkpIHsKKyAgICBjYXNlIEZST01fVE9f
QU5JTUFUSU9OOgorICAgICAgICBtX2Zyb21UcmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybVZhbHVl
KG1fZnJvbSk7CisgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgIGNhc2UgVE9fQU5JTUFUSU9O
OgorICAgICAgICBtX3RvVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX3RvKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBGUk9NX0JZX0FOSU1BVElPTjoKKyAgICAgICAgbV9mcm9t
VHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX2Zyb20pOworICAgICAgICBtX3RvVHJh
bnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX2J5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBCWV9BTklNQVRJT046CisgICAgICAgIG1fZnJvbVRyYW5zZm9ybSA9IHBhcnNlVHJhbnNm
b3JtVmFsdWUobV9mcm9tKTsKKyAgICAgICAgbV90b1RyYW5zZm9ybSA9IFNWR1RyYW5zZm9ybURp
c3RhbmNlOjphZGRTVkdUcmFuc2Zvcm1zKG1fZnJvbVRyYW5zZm9ybSwgcGFyc2VUcmFuc2Zvcm1W
YWx1ZShtX2J5KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVkFMVUVTX0FOSU1BVElPTjoK
KyAgICAgICAgbV9mcm9tVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX3ZhbHVlc1t2
YWx1ZUluZGV4XSk7CisgICAgICAgIG1fdG9UcmFuc2Zvcm0gPSAoKHZhbHVlSW5kZXggKyAxKSA8
IG1fdmFsdWVzLnNpemUoKSkgPyBwYXJzZVRyYW5zZm9ybVZhbHVlKG1fdmFsdWVzW3ZhbHVlSW5k
ZXggKyAxXSkgOiBtX2Zyb21UcmFuc2Zvcm07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTk9f
QU5JTUFUSU9OOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgbV90
cmFuc2Zvcm1EaXN0YW5jZSA9IFNWR1RyYW5zZm9ybURpc3RhbmNlKG1fZnJvbVRyYW5zZm9ybSwg
bV90b1RyYW5zZm9ybSk7CisgICAgcmV0dXJuICFtX3RyYW5zZm9ybURpc3RhbmNlLmlzWmVybygp
OwogfQogCiBTVkdUcmFuc2Zvcm0gU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnBhcnNlVHJh
bnNmb3JtVmFsdWUoY29uc3QgU3RyaW5nJiBkYXRhKSBjb25zdAogeworICAgIC8vIEZJWE1FOiBU
aGlzIHBhcnNlciBzaG91bGQgYmUgY29tYmluZWQgd2l0aCB0aGUgb25lIGluIFNWR1RyYW5zZm9y
bWFibGU6OnBhcnNlVHJhbnNmb3JtQXR0cmlidXRlCisgICAgCiAgICAgU3RyaW5nIHBhcnNlID0g
ZGF0YS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICBpZiAocGFyc2UuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gU1ZHVHJhbnNmb3JtKCk7CkBAIC0zNDIsMjEgKzIwMiw2IEBAIFNWR1RyYW5zZm9y
bSBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDoKICAgICAgICAgICAgIGVsc2UgCiAgICAgICAg
ICAgICAgICAgYW5nbGUgPSBwYXJzZS50b0RvdWJsZSgpOwogCi0gICAgICAgICAgICAvLyBPayBu
b3cgaGVyZSdzIGEgaGFjayB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIGNhbGN1bGF0ZSBjeC9jeSB2
YWx1ZXMsIGlmIGFuZ2xlID0gMCAKLSAgICAgICAgICAgIC8vIG9yIGFuZ2xlPTM2MCAtPiBmb3Ig
YW5nbGU9MCBvdXIgbWF0cml4IGlzIG0xMTogMSBtMTI6IDAgbTIxOiAwIG0yMjogMSBkeDogMCBk
eTogMAotICAgICAgICAgICAgLy8gQXMgeW91IGNhbiBzZWUgdGhlcmUgaXMgbm8gd2F5IHRvIHJl
dHJpZXZlIHRoZSBjeC9jeSB2YWx1ZXMgZm9yIHRoZXNlIGFuZ2xlcy4KLSAgICAgICAgICAgIC8v
IC0+IHNldCAnbV9yb3RhdGVTcGVjaWFsQ2FzZScgdG8gdHJ1ZSwgYW5kIHNhdmUgYW5nbGUgPSAx
LzM1OSAtPiB0aGlzIHdheSB3ZSBjYW4gY2FsY3VsYXRlCi0gICAgICAgICAgICAvLyAgICB0aGUg
Y3gvY3kgdmFsdWVzLCB3aGlsZSBrZWVwaW5nIHRoaXMgdWJlci1vcHRpbWl6ZWQgd2F5IG9mIGhh
bmRsaW5nIDxhbmltYXRlVHJhbnNmb3JtPiEKLSAgICAgICAgICAgIG1fcm90YXRlU3BlY2lhbENh
c2UgPSBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGFuZ2xlID09IDAuMCkg
ewotICAgICAgICAgICAgICAgIGFuZ2xlID0gYW5nbGUgKyAxLjA7Ci0gICAgICAgICAgICAgICAg
bV9yb3RhdGVTcGVjaWFsQ2FzZSA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGFuZ2xl
ID09IDM2MC4wKSB7Ci0gICAgICAgICAgICAgICAgYW5nbGUgPSBhbmdsZSAtIDEuMDsKLSAgICAg
ICAgICAgICAgICBtX3JvdGF0ZVNwZWNpYWxDYXNlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAogICAgICAgICAgICAgcGFyc2VkVHJhbnNmb3JtLnNldFJvdGF0ZShhbmdsZSwg
Y3gsIGN5KTsKICAgICAgICAgICAgIGJyZWFrOyAgICAKICAgICAgICAgfQpAQCAtMzc5LDM2ICsy
MjQsNiBAQCBTVkdUcmFuc2Zvcm0gU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6CiAgICAgcmV0
dXJuIHBhcnNlZFRyYW5zZm9ybTsKIH0KIAotdm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVu
dDo6Y2FsY3VsYXRlUm90YXRpb25Gcm9tTWF0cml4KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWF0
cml4LCBkb3VibGUmIGFuZ2xlLCBkb3VibGUmIGN4LCBkb3VibGUmIGN5KSBjb25zdAotewotICAg
IGRvdWJsZSBjb3NhID0gbWF0cml4LmEoKTsKLSAgICBkb3VibGUgc2luYSA9IC1tYXRyaXguYygp
OwotCi0gICAgaWYgKGNvc2EgIT0gMS4wKSB7Ci0gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgYW5n
bGUgdmlhIG1hZ2ljIDspCi0gICAgICAgIGRvdWJsZSB0ZW1wID0gU1ZHQW5nbGU6OnRvZGVnKGFz
aW4oc2luYSkpOwotICAgICAgICBhbmdsZSA9IFNWR0FuZ2xlOjp0b2RlZyhhY29zKGNvc2EpKTsK
LSAgICAgICAgaWYgKHRlbXAgPCAwKQotICAgICAgICAgICAgYW5nbGUgPSAzNjAuMCAtIGFuZ2xl
OwotICAgICAgICAKLSAgICAgICAgZG91YmxlIHJlcyA9ICgxIC0gY29zYSkgKyAoKHNpbmEgKiBz
aW5hKSAvICgxIC0gY29zYSkpOwotICAgICAgICAKLSAgICAgICAgY3ggPSAobWF0cml4LmUoKSAt
ICgoc2luYSAqIG1hdHJpeC5mKCkpIC8gKDEgLSBjb3NhKSkpIC8gcmVzOwotICAgICAgICBjeSA9
IChtYXRyaXguZigpICsgKChzaW5hICogbWF0cml4LmUoKSkgLyAoMSAtIGNvc2EpKSkgLyByZXM7
Ci0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGN4ID0gMC4wOwotICAgIGN5ID0gMC4w
OwotICAgIGFuZ2xlID0gMC4wOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gU1ZHQW5pbWF0ZVRyYW5z
Zm9ybUVsZW1lbnQ6OmN1cnJlbnRUcmFuc2Zvcm0oKSBjb25zdAotewotICAgIHJldHVybiBtX2N1
cnJlbnRUcmFuc2Zvcm07Ci19Ci0KIH0KIAogLy8gdmltOnRzPTQ6bm9ldApJbmRleDoga3N2ZzIv
c3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3Zn
L1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgJKHJldmlzaW9uIDE5MTM3KQorKysga3N2ZzIv
c3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDcgQEAKIAogI2luY2x1ZGUgIlNWR0FuaW1hdGlvbkVsZW1lbnQuaCIKICNpbmNsdWRlICJT
VkdUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1EaXN0YW5jZS5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDM4ICs0MSwzMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNWYWxpZFRhcmdldCgpIGNvbnN0OwogCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLQot
ICAgICAgICB2b2lkIGFwcGx5QW5pbWF0aW9uVG9WYWx1ZShTVkdUcmFuc2Zvcm1MaXN0Kik7Ci0K
LSAgICAgICAgLy8gSGVscGVycwotICAgICAgICBTVkdUcmFuc2Zvcm0gcGFyc2VUcmFuc2Zvcm1W
YWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKLSAgICAgICAgdm9pZCBjYWxjdWxhdGVSb3RhdGlv
bkZyb21NYXRyaXgoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZG91YmxlJiBhbmdsZSwgZG91Ymxl
JiBjeCwgZG91YmxlJiBjeSkgY29uc3Q7Ci0KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGN1cnJl
bnRUcmFuc2Zvcm0oKSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgYm9vbCB1cGRh
dGVBbmltYXRpb25CYXNlVmFsdWVGcm9tRWxlbWVudCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KCk7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAg
IHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biB0aGlzOyB9Ci0gICAgICAgIHZvaWQgc3RvcmVJbml0aWFsVmFsdWUoKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIHJlc2V0VmFsdWVzKCk7CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFsIGJvb2wg
dXBkYXRlQ3VycmVudFZhbHVlKGRvdWJsZSB0aW1lUGVyY2VudGFnZSk7Ci0gICAgICAgIHZpcnR1
YWwgYm9vbCBoYW5kbGVTdGFydENvbmRpdGlvbigpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlTGFzdFZhbHVlV2l0aEN1cnJlbnQoKTsKKyAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUFu
aW1hdGVkVmFsdWUoRUFuaW1hdGlvbk1vZGUsIGZsb2F0IHRpbWVQZXJjZW50YWdlLCB1bnNpZ25l
ZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJjZW50YWdlUGFzdCk7CisgICAgICAgIHZpcnR1YWwgYm9v
bCBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoRUFuaW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVl
SW5kZXgpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgaW50IG1fY3VycmVudEl0ZW07CisgICAg
ICAgIC8vIEhlbHBlcnMKKyAgICAgICAgU1ZHVHJhbnNmb3JtIHBhcnNlVHJhbnNmb3JtVmFsdWUo
Y29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAgICAgIHZvaWQgY2FsY3VsYXRlUm90YXRpb25Gcm9t
TWF0cml4KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGRvdWJsZSYgYW5nbGUsIGRvdWJsZSYgY3gs
IGRvdWJsZSYgY3kpIGNvbnN0OworICAgICAgICAgICAgCiAgICAgICAgIFNWR1RyYW5zZm9ybTo6
U1ZHVHJhbnNmb3JtVHlwZSBtX3R5cGU7CiAKICAgICAgICAgU1ZHVHJhbnNmb3JtIG1fdG9UcmFu
c2Zvcm07CiAgICAgICAgIFNWR1RyYW5zZm9ybSBtX2Zyb21UcmFuc2Zvcm07Ci0gICAgICAgIFNW
R1RyYW5zZm9ybSBtX2luaXRpYWxUcmFuc2Zvcm07Ci0KLSAgICAgICAgQWZmaW5lVHJhbnNmb3Jt
IG1fbGFzdFRyYW5zZm9ybTsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1fY3VycmVudFRyYW5z
Zm9ybTsKIAotICAgICAgICBtdXRhYmxlIGJvb2wgbV9yb3RhdGVTcGVjaWFsQ2FzZSA6IDE7Ci0g
ICAgICAgIGJvb2wgbV90b1JvdGF0ZVNwZWNpYWxDYXNlIDogMTsKLSAgICAgICAgYm9vbCBtX2Zy
b21Sb3RhdGVTcGVjaWFsQ2FzZSA6IDE7CisgICAgICAgIFNWR1RyYW5zZm9ybSBtX2Jhc2VUcmFu
c2Zvcm07CisgICAgICAgIFNWR1RyYW5zZm9ybSBtX2FuaW1hdGVkVHJhbnNmb3JtOworICAgICAg
ICAKKyAgICAgICAgU1ZHVHJhbnNmb3JtRGlzdGFuY2UgbV90cmFuc2Zvcm1EaXN0YW5jZTsKICAg
ICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBrc3ZnMi9zdmcvU1ZHQW5pbWF0
aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0FuaW1hdGlvbkVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxOTEzNykKKysrIGtzdmcyL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDEyICsxMjgsMzcgQEAgdm9pZCBTVkdBbmltYXRp
b25FbGVtZW50OjpwYXJzZUtleU51bWJlcgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBr
ZXlOdW1iZXJzLmFwcGVuZChudW1iZXIpOwogICAgICAgICAKLSAgICAgICAgaWYgKCEoc2tpcE9w
dGlvbmFsU3BhY2VzKHB0ciwgZW5kKSAmJiAqcHRyID09ICc7JykpCisgICAgICAgIGlmICghc2tp
cE9wdGlvbmFsU3BhY2VzKHB0ciwgZW5kKSB8fCAqcHRyICE9ICc7JykKICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgcHRyKys7CiAgICAgICAgIHNraXBPcHRpb25hbFNwYWNlcyhwdHIsIGVu
ZCk7CiAgICAgfQogfQogCitzdGF0aWMgdm9pZCBwYXJzZVZhbHVlcyhWZWN0b3I8U3RyaW5nPiYg
dmFsdWVzLCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB2
YWx1ZS5jaGFyYWN0ZXJzKCk7CisgICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHZhbHVlLmxl
bmd0aCgpOworICAgIHNraXBPcHRpb25hbFNwYWNlcyhwdHIsIGVuZCk7CisgICAgd2hpbGUgKHB0
ciA8IGVuZCkgeworICAgICAgICAvLyBTTUlMIDMuMi4yIDogTGVhZGluZyBhbmQgdHJhaWxpbmcg
d2hpdGUgc3BhY2UsIGFuZCB3aGl0ZSBzcGFjZSBiZWZvcmUgYW5kIGFmdGVyIHNlbWljb2xvbiBz
ZXBhcmF0b3JzLCB3aWxsIGJlIGlnbm9yZWQuCisgICAgICAgIGNvbnN0IFVDaGFyKiB2YWx1ZVN0
YXJ0ID0gcHRyOworICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgIT0gJzsnKSAvLyBj
YXJlZnVsIG5vdCB0byBpZ25vcmUgd2hpdGVzcGFjZSBpbnNpZGUgdmFsdWVzCisgICAgICAgICAg
ICBwdHIrKzsKKyAgICAgICAgaWYgKHB0ciA9PSB2YWx1ZVN0YXJ0KQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgICAgICAvLyB3YWxrIGJhY2t3YXJkcyBmcm9tIHRoZSA7IHRvIGln
bm9yZSBhbnkgd2hpdGVzcGFjZQorICAgICAgICBjb25zdCBVQ2hhciogdmFsdWVFbmQgPSBwdHI7
CisgICAgICAgIHdoaWxlICh2YWx1ZVN0YXJ0IDwgdmFsdWVFbmQgJiYgaXNXaGl0ZXNwYWNlKCp2
YWx1ZUVuZCkpCisgICAgICAgICAgICB2YWx1ZUVuZC0tOworICAgICAgICAKKyAgICAgICAgdmFs
dWVzLmFwcGVuZChTdHJpbmcodmFsdWVTdGFydCwgdmFsdWVFbmQgLSB2YWx1ZVN0YXJ0KSk7Cisg
ICAgICAgIAorICAgICAgICBza2lwT3B0aW9uYWxTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCwg
JzsnKTsKKyAgICB9Cit9CisKIHN0YXRpYyB2b2lkIHBhcnNlS2V5U3BsaW5lcyhWZWN0b3I8U1ZH
QW5pbWF0aW9uRWxlbWVudDo6S2V5U3BsaW5lPiYga2V5U3BsaW5lcywgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKIHsKICAgICBkb3VibGUgbnVtYmVyID0gMC5mOwpAQCAtMTU3LDggKzE4Miw5IEBAIHN0
YXRpYyB2b2lkIHBhcnNlS2V5U3BsaW5lcyhWZWN0b3I8U1ZHQW4KICAgICAgICAga2V5U3BsaW5l
LmNvbnRyb2wyLnNldFkobnVtYmVyKTsKICAgICAgICAga2V5U3BsaW5lcy5hcHBlbmQoa2V5U3Bs
aW5lKTsKICAgICAgICAgCi0gICAgICAgIGlmICghKHNraXBPcHRpb25hbFNwYWNlcyhwdHIsIGVu
ZCkgJiYgKnB0ciA9PSAnOycpKQorICAgICAgICBpZiAoIXNraXBPcHRpb25hbFNwYWNlcyhwdHIs
IGVuZCkgfHwgKnB0ciAhPSAnOycpCiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHB0cisr
OwogICAgICAgICBza2lwT3B0aW9uYWxTcGFjZXMocHRyLCBlbmQpOwogICAgIH0KIH0KQEAgLTI3
Myw4ICsyOTksOCBAQCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0CiAg
ICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJwYWNlZCIpCiAgICAgICAgICAgICBtX2NhbGNNb2Rl
ID0gQ0FMQ01PREVfUEFDRUQ7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnZhbHVlc0F0dHIpIHsKLSAgICAgICAgbV92YWx1ZXMgPSBuZXcgU1ZHU3RyaW5nTGlzdCgp
OwotICAgICAgICBtX3ZhbHVlcy0+cGFyc2UodmFsdWUsICc7Jyk7CisgICAgICAgIG1fdmFsdWVz
LmNsZWFyKCk7CisgICAgICAgIHBhcnNlVmFsdWVzKG1fdmFsdWVzLCB2YWx1ZSk7CiAgICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmtleVRpbWVzQXR0cikgewogICAgICAg
ICBtX2tleVRpbWVzLmNsZWFyKCk7CiAgICAgICAgIHBhcnNlS2V5TnVtYmVycyhtX2tleVRpbWVz
LCB2YWx1ZSk7CkBAIC0zOTEsOCArNDE3LDExIEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6
Y2xvc2VSZW5kZXJlcigKICAgICBTVkdFbGVtZW50OjpjbG9zZVJlbmRlcmVyKCk7CiB9CiAKLVN0
cmluZyBTVkdBbmltYXRpb25FbGVtZW50Ojp0YXJnZXRBdHRyaWJ1dGUoKSBjb25zdAorU3RyaW5n
IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUoKSBjb25z
dAogeworICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBpcyBub3QgZW50aXJlbHkgY29ycmVjdAor
ICAgIC8vIEl0IGRvZXMgbm90IHByb3Blcmx5IGdyYWIgdGhlIHRydWUgImFuaW1WYWwiIGluc3Rl
YWQgZ3JhYnMgdGhlIGJhc2VWYWwgKG9yIHNvbWV0aGluZyB2ZXJ5IGNsb3NlKQorCiAgICAgaWYg
KCF0YXJnZXRFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAKQEAgLTQy
OCw4ICs0NTcsMTAgQEAgU3RyaW5nIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnRhcmdldEF0dHJpYgog
ICAgIHJldHVybiByZXQ7CiB9CiAKLXZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0
QXR0cmlidXRlKGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OnNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsK
KyAgICAvLyBGSVhNRTogVGhpcyBtZXRob2QgaXMgbm90IGVudGlyZWx5IGNvcnJlY3QKKyAgICAv
LyBJdCBkb2VzIG5vdCBwcm9wZXJseSBzZXQgdGhlICJhbmltVmFsIiwgcmF0aGVyIGl0IHNldHMg
dGhlICJiYXNlVmFsIgogICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldFRhcmdldEF0dHJpYnV0
ZSh0YXJnZXRFbGVtZW50KCksIG1fYXR0cmlidXRlTmFtZSwgdmFsdWUsIHN0YXRpY19jYXN0PEVB
dHRyaWJ1dGVUeXBlPihtX2F0dHJpYnV0ZVR5cGUpKTsKIH0KIApAQCAtNDg1LDcgKzUxNiw5IEBA
IGJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNBY2N1bXVsYXRlZCgKIAogRUFuaW1hdGlvbk1v
ZGUgU1ZHQW5pbWF0aW9uRWxlbWVudDo6ZGV0ZWN0QW5pbWF0aW9uTW9kZSgpIGNvbnN0CiB7Ci0g
ICAgaWYgKCghbV9mcm9tLmlzRW1wdHkoKSAmJiAhbV90by5pc0VtcHR5KCkpIHx8ICghbV90by5p
c0VtcHR5KCkpKSB7IC8vIHRvL2Zyb20tdG8gYW5pbWF0aW9uCisgICAgaWYgKGhhc0F0dHJpYnV0
ZShTVkdOYW1lczo6dmFsdWVzQXR0cikpCisgICAgICAgIHJldHVybiBWQUxVRVNfQU5JTUFUSU9O
OworICAgIGVsc2UgaWYgKCghbV9mcm9tLmlzRW1wdHkoKSAmJiAhbV90by5pc0VtcHR5KCkpIHx8
ICghbV90by5pc0VtcHR5KCkpKSB7IC8vIHRvL2Zyb20tdG8gYW5pbWF0aW9uCiAgICAgICAgIGlm
ICghbV9mcm9tLmlzRW1wdHkoKSkgLy8gZnJvbS10byBhbmltYXRpb24KICAgICAgICAgICAgIHJl
dHVybiBGUk9NX1RPX0FOSU1BVElPTjsKICAgICAgICAgZWxzZQpAQCAtNDk3LDYwICs1MzAsMTAg
QEAgRUFuaW1hdGlvbk1vZGUgU1ZHQW5pbWF0aW9uRWxlbWVudDo6ZGV0ZQogICAgICAgICBlbHNl
CiAgICAgICAgICAgICByZXR1cm4gQllfQU5JTUFUSU9OOwogICAgIH0KLSAgICBlbHNlIGlmICht
X3ZhbHVlcykKLSAgICAgICAgcmV0dXJuIFZBTFVFU19BTklNQVRJT047CiAKICAgICByZXR1cm4g
Tk9fQU5JTUFUSU9OOwogfQogCi1zdGF0aWMgaW5saW5lIFZlY3Rvcjxkb3VibGU+IHN0YXJ0VGlt
ZXNGb3JWYWx1ZXMoY29uc3QgU1ZHU3RyaW5nTGlzdCogdmFsdWVzKQotewotICAgIC8vIENhbGN1
bGF0ZSB0aGUgcmVsYXRpdmUgdGltZSBwZXJjZW50YWdlcyBmb3IgZWFjaCAnZmFkZScuCi0gICAg
Ly8gRXZlbnR1YWxseSB2YWx1ZSBzcGFjaW5nIHdpbGwgbmVlZCB0byB0YWtlIGtleVNwbGluZXMg
aW50byBhY2NvdW50Ci0gICAgdW5zaWduZWQgbG9uZyBpdGVtcyA9IHZhbHVlcy0+bnVtYmVyT2ZJ
dGVtcygpOwotICAgIFZlY3Rvcjxkb3VibGU+IHN0YXJ0VGltZXMoaXRlbXMpOwotICAgIHN0YXJ0
VGltZXNbMF0gPSAwLjA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGl0ZW1zOyArK2kp
Ci0gICAgICAgIHN0YXJ0VGltZXNbaV0gPSAoKCgyLjAgKiBpKSkgLyAoaXRlbXMgLSAxKSkgLyAy
LjA7Ci0gICAgcmV0dXJuIHN0YXJ0VGltZXM7Ci19Ci0KLWludCBTVkdBbmltYXRpb25FbGVtZW50
OjpjYWxjdWxhdGVDdXJyZW50VmFsdWVJdGVtKGRvdWJsZSB0aW1lUGVyY2VudGFnZSkKLXsKLSAg
ICBpZiAoIW1fdmFsdWVzKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgCi0gICAgdW5zaWduZWQg
bG9uZyBpdGVtcyA9IG1fdmFsdWVzLT5udW1iZXJPZkl0ZW1zKCk7Ci0gICAgVmVjdG9yPGRvdWJs
ZT4gc3RhcnRUaW1lcyA9IHN0YXJ0VGltZXNGb3JWYWx1ZXMobV92YWx1ZXMuZ2V0KCkpOwotCi0g
ICAgaW50IGl0ZW1CeVBlcmNlbnRhZ2UgPSAtMTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgaXRlbXMgLSAxOyArK2kpIHsKLSAgICAgICAgaWYgKHRpbWVQZXJjZW50YWdlID49IHN0YXJ0
VGltZXNbaV0gJiYgdGltZVBlcmNlbnRhZ2UgPD0gc3RhcnRUaW1lc1tpICsgMV0pIHsKLSAgICAg
ICAgICAgIGl0ZW1CeVBlcmNlbnRhZ2UgPSBpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gaXRlbUJ5UGVyY2VudGFnZTsKLX0KLQotZG91YmxlIFNW
R0FuaW1hdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZVJlbGF0aXZlVGltZVBlcmNlbnRhZ2UoZG91Ymxl
IHRpbWVQZXJjZW50YWdlLCBpbnQgY3VycmVudEl0ZW0pCi17Ci0gICAgaWYgKGN1cnJlbnRJdGVt
ID09IC0xIHx8ICFtX3ZhbHVlcykKLSAgICAgICAgcmV0dXJuIDAuMDsKLQotICAgIFZlY3Rvcjxk
b3VibGU+IHN0YXJ0VGltZXMgPSBzdGFydFRpbWVzRm9yVmFsdWVzKG1fdmFsdWVzLmdldCgpKTsK
LQotICAgIGRvdWJsZSBiZWdpblRpbWVQZXJjZW50YWdlID0gc3RhcnRUaW1lc1tjdXJyZW50SXRl
bV07Ci0gICAgZG91YmxlIGVuZFRpbWVQZXJjZW50YWdlID0gc3RhcnRUaW1lc1tjdXJyZW50SXRl
bSArIDFdOwotCi0gICAgaWYgKChlbmRUaW1lUGVyY2VudGFnZSAtIGJlZ2luVGltZVBlcmNlbnRh
Z2UpID09IDAuMCkKLSAgICAgICAgcmV0dXJuIDAuMDsKLQotICAgIHJldHVybiAoKHRpbWVQZXJj
ZW50YWdlIC0gYmVnaW5UaW1lUGVyY2VudGFnZSkgLwotICAgICAgICAgICAgKGVuZFRpbWVQZXJj
ZW50YWdlIC0gYmVnaW5UaW1lUGVyY2VudGFnZSkpOwotfQotCiBkb3VibGUgU1ZHQW5pbWF0aW9u
RWxlbWVudDo6cmVwZWF0aW9ucygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcmVwZXRpdGlvbnM7
CkBAIC01OTMsNDQgKzU3NiwxODYgQEAgc3RhdGljIGRvdWJsZSBjYWxjdWxhdGVUaW1lUGVyY2Vu
dGFnZShkbwogICAgIHJldHVybiBwZXJjZW50YWdlOwogfQogCi12b2lkIFNWR0FuaW1hdGlvbkVs
ZW1lbnQ6OmhhbmRsZVRpbWVyRXZlbnQoZG91YmxlIHRpbWVQZXJjZW50YWdlKQorc3RhdGljIGlu
bGluZSB2b2lkIGFkanVzdFBlcmNlbnRhZ2VQYXN0Rm9yS2V5U3BsaW5lcyhjb25zdCBWZWN0b3I8
U1ZHQW5pbWF0aW9uRWxlbWVudDo6S2V5U3BsaW5lPiYga2V5U3BsaW5lcywgdW5zaWduZWQgdmFs
dWVJbmRleCwgZmxvYXQmIHBlcmNlbnRhZ2VQYXN0KQoreworICAgIGlmIChwZXJjZW50YWdlUGFz
dCA9PSAwLjBmKSAvLyB2YWx1ZXMgYXQga2V5IHRpbWVzIG5lZWQgbm8gc3BsaW5lIGFkanVzdG1l
bnQKKyAgICAgICAgcmV0dXJuOworICAgIGNvbnN0IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OktleVNw
bGluZSYga2V5U3BsaW5lID0ga2V5U3BsaW5lc1t2YWx1ZUluZGV4XTsKKyAgICBQYXRoIHBhdGg7
CisgICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCgpKTsKKyAgICBwYXRoLmFkZEJlemllckN1cnZl
VG8oa2V5U3BsaW5lLmNvbnRyb2wxLCBrZXlTcGxpbmUuY29udHJvbDIsIEZsb2F0UG9pbnQoMS4w
ZiwgMS4wZikpOworICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIHVzZSBhIHktYXQteCBmdW5j
dGlvbiBvbiBwYXRoLCB0byBjb21wdXRlIHRoZSB5IHZhbHVlIHRoZW4gbXVsdGlwbHkgcGVyY2Vu
dGFnZVBhc3QgYnkgdGhhdCB2YWx1ZQorfQorCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnZh
bHVlSW5kZXhBbmRQZXJjZW50YWdlUGFzdEZvckRpc3RhbmNlKGZsb2F0IGRpc3RhbmNlUGVyY2Vu
dGFnZSwgdW5zaWduZWQmIHZhbHVlSW5kZXgsIGZsb2F0JiBwZXJjZW50YWdlUGFzdCkKK3sKKyAg
ICAvLyBVbnNwZWNpZmllZDogYW5pbWF0aW9uIGVsZW1lbnRzIHdoaWNoIGRvIG5vdCBzdXBwb3J0
IENBTENNT0RFX1BBQ0VELCB3ZSBqdXN0IGFsd2F5cyBzaG93IHRoZSBmaXJzdCB2YWx1ZQorICAg
IHZhbHVlSW5kZXggPSAwOworICAgIHBlcmNlbnRhZ2VQYXN0ID0gMDsKK30KKworZmxvYXQgU1ZH
QW5pbWF0aW9uRWxlbWVudDo6Y2FsY3VsYXRlVG90YWxEaXN0YW5jZSgpCit7CisgICAgcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWN1bGF0ZVZhbHVlSW5kZXhGb3JLZXlUaW1l
cyhmbG9hdCB0aW1lUGVyY2VudGFnZSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2V5VGltZXMsIHVu
c2lnbmVkJiB2YWx1ZUluZGV4LCBmbG9hdCYgbGFzdEtleVRpbWUsIGZsb2F0JiBuZXh0S2V5VGlt
ZSkKK3sKKyAgICB1bnNpZ25lZCBrZXlUaW1lc0NvdW50TWludXNPbmUgPSBrZXlUaW1lcy5zaXpl
KCkgLSAxOworICAgIHZhbHVlSW5kZXggPSAwOworICAgIEFTU0VSVCh0aW1lUGVyY2VudGFnZSA+
PSBrZXlUaW1lcy5maXJzdCgpKTsKKyAgICB3aGlsZSAoKHZhbHVlSW5kZXggPCBrZXlUaW1lc0Nv
dW50TWludXNPbmUpICYmICh0aW1lUGVyY2VudGFnZSA+PSBrZXlUaW1lc1t2YWx1ZUluZGV4ICsg
MV0pKQorICAgICAgICB2YWx1ZUluZGV4Kys7CisgICAgCisgICAgbGFzdEtleVRpbWUgPSBrZXlU
aW1lc1t2YWx1ZUluZGV4XTsKKyAgICBpZiAodmFsdWVJbmRleCA8IGtleVRpbWVzQ291bnRNaW51
c09uZSkKKyAgICAgICAgbmV4dEtleVRpbWUgPSBrZXlUaW1lc1t2YWx1ZUluZGV4ICsgMV07Cisg
ICAgZWxzZQorICAgICAgICBuZXh0S2V5VGltZSA9IGxhc3RLZXlUaW1lOworfQorCitib29sIFNW
R0FuaW1hdGlvbkVsZW1lbnQ6OmlzVmFsaWRBbmltYXRpb24oKSBjb25zdAogeworICAgIEVBbmlt
YXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUgPSBkZXRlY3RBbmltYXRpb25Nb2RlKCk7CisgICAgaWYg
KCFoYXNWYWxpZFRhcmdldCgpIHx8IChhbmltYXRpb25Nb2RlID09IE5PX0FOSU1BVElPTikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYW5pbWF0aW9uTW9kZSA9PSBWQUxVRVNfQU5J
TUFUSU9OKSB7CisgICAgICAgIGlmICghbV92YWx1ZXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAobV9rZXlUaW1lcy5zaXplKCkpIHsKKyAgICAgICAgICAg
IGlmICgobV92YWx1ZXMuc2l6ZSgpICE9IG1fa2V5VGltZXMuc2l6ZSgpKSB8fCAobV9rZXlUaW1l
cy5maXJzdCgpICE9IDApKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGlmICgoKG1fY2FsY01vZGUgPT0gQ0FMQ01PREVfU1BMSU5FKSB8fCAobV9jYWxjTW9kZSA9
PSBDQUxDTU9ERV9MSU5FQVIpKSAmJiAobV9rZXlUaW1lcy5sYXN0KCkgIT0gMSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZmxvYXQgbGFzdEtleVRpbWUgPSAw
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IG1fa2V5VGltZXMuc2l6ZSgp
OyB4KyspIHsKKyAgICAgICAgICAgICAgICBpZiAobV9rZXlUaW1lc1t4XSA8IGxhc3RLZXlUaW1l
IHx8IG1fa2V5VGltZXNbeF0gPiAxKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fa2V5U3BsaW5lcy5zaXpl
KCkpIHsKKyAgICAgICAgICAgIGlmICgobV92YWx1ZXMuc2l6ZSgpIC0gMSkgIT0gbV9rZXlTcGxp
bmVzLnNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIHggPSAwOyB4IDwgbV9rZXlUaW1lcy5zaXplKCk7IHgrKykKKyAgICAgICAg
ICAgICAgICBpZiAobV9rZXlUaW1lc1t4XSA8IDAgfHwgbV9rZXlUaW1lc1t4XSA+IDEpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpjYWxjdWxhdGVWYWx1ZUlu
ZGV4QW5kUGVyY2VudGFnZVBhc3QoZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVkJiB2YWx1
ZUluZGV4LCBmbG9hdCYgcGVyY2VudGFnZVBhc3QpCit7CisgICAgQVNTRVJUKHRpbWVQZXJjZW50
YWdlIDw9IDEuMGYpOworICAgIEFTU0VSVChpc1ZhbGlkQW5pbWF0aW9uKCkpOworICAgIEVBbmlt
YXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUgPSBkZXRlY3RBbmltYXRpb25Nb2RlKCk7CisgICAgCisg
ICAgLy8gdG8tYW5pbWF0aW9ucyBoYXZlIHRoZWlyIG93biBzcGVjaWFsIGhhbmRsaW5nCisgICAg
aWYgKGFuaW1hdGlvbk1vZGUgPT0gVE9fQU5JTUFUSU9OKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgLy8gcGFjZWQgaXMgc3BlY2lhbCwgY2FjdWxhdGVzIHZhbHVlcyBiYXNlZCBvbiBkaXN0
YW5jZSBpbnN0ZWFkIG9mIHRpbWUKKyAgICBpZiAobV9jYWxjTW9kZSA9PSBDQUxDTU9ERV9QQUNF
RCkgeworICAgICAgICBmbG9hdCB0b3RhbERpc3RhbmNlID0gY2FsY3VsYXRlVG90YWxEaXN0YW5j
ZSgpOworICAgICAgICBmbG9hdCBkaXN0YW5jZVBlcmNlbnRhZ2UgPSB0b3RhbERpc3RhbmNlICog
dGltZVBlcmNlbnRhZ2U7CisgICAgICAgIHZhbHVlSW5kZXhBbmRQZXJjZW50YWdlUGFzdEZvckRp
c3RhbmNlKGRpc3RhbmNlUGVyY2VudGFnZSwgdmFsdWVJbmRleCwgcGVyY2VudGFnZVBhc3QpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBvdXIg
Y3VycmVudCBpbmRleCBpcyBiYXNlZCBvbiBvbiB0aW1lCisgICAgLy8gYWxsIGZ1cnRoZXIgY2Fs
Y3VsYXRpb25zIGFyZSBiYXNlZCBvbiB0aW1lIHBlcmNlbnRhZ2VzLCB0byBhbGxvdyB1bmlmeWlu
ZyBrZXlUaW1lcyBoYW5kbGluZyAmIG5vcm1hbCBhbmltYXRpb24KKyAgICBmbG9hdCBsYXN0S2V5
VGltZVBlcmNlbnRhZ2UgPSAwOworICAgIGZsb2F0IG5leHRLZXlUaW1lUGVyY2VudGFnZSA9IDA7
CisgICAgaWYgKG1fa2V5VGltZXMuc2l6ZSgpICYmIChtX2tleVRpbWVzLnNpemUoKSA9PSBtX3Zh
bHVlcy5zaXplKCkpKQorICAgICAgICBjYWN1bGF0ZVZhbHVlSW5kZXhGb3JLZXlUaW1lcyh0aW1l
UGVyY2VudGFnZSwgbV9rZXlUaW1lcywgdmFsdWVJbmRleCwgbGFzdEtleVRpbWVQZXJjZW50YWdl
LCBuZXh0S2V5VGltZVBlcmNlbnRhZ2UpOworICAgIGVsc2UgeworICAgICAgICBmbG9hdCBsYXN0
UG9zc2libGVJbmRleCA9IChtX3ZhbHVlcy5zaXplKCkgPyBtX3ZhbHVlcy5zaXplKCkgLSAxOiAx
KTsKKyAgICAgICAgZmxvYXQgZmxvb3JlZFZhbHVlSW5kZXggPSBmbG9vcmYodGltZVBlcmNlbnRh
Z2UgKiBsYXN0UG9zc2libGVJbmRleCk7CisgICAgICAgIHZhbHVlSW5kZXggPSBmbG9vcmVkVmFs
dWVJbmRleDsKKyAgICAgICAgbGFzdEtleVRpbWVQZXJjZW50YWdlID0gZmxvb3JlZFZhbHVlSW5k
ZXggLyBsYXN0UG9zc2libGVJbmRleDsKKyAgICAgICAgbmV4dEtleVRpbWVQZXJjZW50YWdlID0g
KGZsb29yZWRWYWx1ZUluZGV4ICsgMSkgLyBsYXN0UG9zc2libGVJbmRleDsKKyAgICB9CisgICAg
CisgICAgLy8gTm8gZnVydGhlciBjYWN1bGF0aW9uIGlzIG5lZWRlZCBpZiB3ZSdyZSBleGFjdGx5
IG9uIGFuIGluZGV4LgorICAgIGlmICh0aW1lUGVyY2VudGFnZSA9PSBsYXN0S2V5VGltZVBlcmNl
bnRhZ2UgfHwgbGFzdEtleVRpbWVQZXJjZW50YWdlID09IG5leHRLZXlUaW1lUGVyY2VudGFnZSkg
eworICAgICAgICBwZXJjZW50YWdlUGFzdCA9IDAuMGY7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgLy8gb3RoZXJ3aXNlIHdlIGRlY2lkZSB3aGF0IHBlcmNlbnQgYWZ0ZXIgdGhh
dCBpbmRleAorICAgIGlmICgobV9jYWxjTW9kZSA9PSBDQUxDTU9ERV9TUExJTkUpICYmIChtX2tl
eVNwbGluZXMuc2l6ZSgpID09IChtX3ZhbHVlcy5zaXplKCkgLSAxKSkpCisgICAgICAgIGFkanVz
dFBlcmNlbnRhZ2VQYXN0Rm9yS2V5U3BsaW5lcyhtX2tleVNwbGluZXMsIHZhbHVlSW5kZXgsIHBl
cmNlbnRhZ2VQYXN0KTsKKyAgICBlbHNlIGlmIChtX2NhbGNNb2RlID09IENBTENNT0RFX0RJU0NS
RVRFKQorICAgICAgICBwZXJjZW50YWdlUGFzdCA9IDAuMGY7CisgICAgZWxzZSB7IC8vIGRlZmF1
bHQgKGFuZCBmYWxsYmFjaykgbW9kZTogbGluZWFyCisgICAgICAgIGZsb2F0IGtleVRpbWVTcGFu
ID0gbmV4dEtleVRpbWVQZXJjZW50YWdlIC0gbGFzdEtleVRpbWVQZXJjZW50YWdlOworICAgICAg
ICBmbG9hdCB0aW1lU2luY2VMYXN0S2V5VGltZSA9IHRpbWVQZXJjZW50YWdlIC0gbGFzdEtleVRp
bWVQZXJjZW50YWdlOworICAgICAgICBwZXJjZW50YWdlUGFzdCA9ICh0aW1lU2luY2VMYXN0S2V5
VGltZSAvIGtleVRpbWVTcGFuKTsKKyAgICB9Cit9CisKK2Jvb2wgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6dXBkYXRlQW5pbWF0aW9uQmFzZVZhbHVlRnJvbUVsZW1lbnQoKQoreworICAgIG1fYmFzZVZh
bHVlID0gdGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZSgpOworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVu
dCgpCit7CisgICAgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZShtX2FuaW1hdGVkVmFs
dWUpOworfQorCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmhhbmRsZVRpbWVyRXZlbnQoZG91
YmxlIGVsYXBzZWRTZWNvbmRzLCBkb3VibGUgdGltZVBlcmNlbnRhZ2UpCit7CisgICAgdGltZVBl
cmNlbnRhZ2UgPSBmbWluKHRpbWVQZXJjZW50YWdlLCAxLjApOwogICAgIGlmICghY29ubmVjdGVk
VG9UaW1lcigpKSB7CiAgICAgICAgIGNvbm5lY3RUaW1lcigpOwotICAgICAgICBoYW5kbGVTdGFy
dENvbmRpdGlvbigpOyAvLyBOZWVkIHRvIGNoZWNrIGJvb2wgcmV0dXJuIGlmIGFkZGluZyBhbnl0
aGluZyBhZnRlciB0aGlzIGNhbGwKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBp
ZiAoIXVwZGF0ZUN1cnJlbnRWYWx1ZSh0aW1lUGVyY2VudGFnZSkpCi0gICAgICAgIHJldHVybjsK
Ky8vICAgIGlmIChpc0FjY3VtdWxhdGVkKCkgJiYgcmVwZWF0aW9ucygpICE9IDAuMCkKKy8vICAg
ICAgICBhY2N1bXVsYXRlRm9yUmVwZXRpdGlvbnMobV9yZXBldGl0aW9ucyk7CisgICAgCisgICAg
RUFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSA9IGRldGVjdEFuaW1hdGlvbk1vZGUoKTsKKyAg
ICAKKyAgICB1bnNpZ25lZCB2YWx1ZUluZGV4ID0gMDsKKyAgICBmbG9hdCBwZXJjZW50YWdlUGFz
dCA9IDA7CisgICAgY2FsY3VsYXRlVmFsdWVJbmRleEFuZFBlcmNlbnRhZ2VQYXN0KHRpbWVQZXJj
ZW50YWdlLCB2YWx1ZUluZGV4LCBwZXJjZW50YWdlUGFzdCk7CisgICAgICAgIAorICAgIGNhbGN1
bGF0ZUZyb21BbmRUb1ZhbHVlcyhhbmltYXRpb25Nb2RlLCB2YWx1ZUluZGV4KTsKKyAgICAKKyAg
ICB1cGRhdGVBbmltYXRlZFZhbHVlKGFuaW1hdGlvbk1vZGUsIHRpbWVQZXJjZW50YWdlLCB2YWx1
ZUluZGV4LCBwZXJjZW50YWdlUGFzdCk7CiAgICAgCiAgICAgaWYgKHRpbWVQZXJjZW50YWdlID09
IDEuMCkgewogICAgICAgICBpZiAoKG1fcmVwZWF0Q291bnQgPiAwICYmIG1fcmVwZXRpdGlvbnMg
PCBtX3JlcGVhdENvdW50IC0gMSkgfHwgaXNJbmRlZmluaXRlKG1fcmVwZWF0Q291bnQpKSB7Ci0g
ICAgICAgICAgICB1cGRhdGVMYXN0VmFsdWVXaXRoQ3VycmVudCgpOwogICAgICAgICAgICAgbV9y
ZXBldGl0aW9ucysrOwogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBkaXNjb25uZWN0VGltZXIoKTsKLSAgICAgICAgcmVzZXRWYWx1ZXMoKTsgICAKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBkaXNjb25uZWN0VGltZXIoKTsKICAgICB9CiB9CiAK
LWJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6dXBkYXRlRm9yRWxhcHNlZFNlY29uZHMoZG91Ymxl
IGVsYXBzZWRTZWNvbmRzKQorYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojp1cGRhdGVBbmltYXRl
ZFZhbHVlRm9yRWxhcHNlZFNlY29uZHMoZG91YmxlIGVsYXBzZWRTZWNvbmRzKQogeworLy8gICAg
aWYgKGlzU3RvcHBlZCgpKSB7CisvLyAgICAgICAgaWYgKG1fZmlsbCA9PSBGSUxMX0ZSRUVaRSkK
Ky8vICAgICAgICAgICAgZWxhcHNlZFNlY29uZHMgPSBtX3N0b3BwZWRUaW1lOworLy8gICAgICAg
IGVsc2UKKy8vICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworLy8gICAgfQorICAgIAogICAgIC8v
IFZhbGlkYXRlIGFuaW1hdGlvbiB0aW1pbmcgc2V0dGluZ3M6CiAgICAgLy8gIzEgKGR1cmF0aW9u
ID4gMCkgLT4gZmluZQogICAgIC8vICMyIChkdXJhdGlvbiA8PSAwLjAgJiYgZW5kID4gMCkgLT4g
ZmluZQotICAgIAogICAgIGlmICgobV9zaW1wbGVEdXJhdGlvbiA8PSAwLjAgJiYgbV9lbmQgPD0g
MC4wKSB8fCAoaXNJbmRlZmluaXRlKG1fc2ltcGxlRHVyYXRpb24pICYmIG1fZW5kIDw9IDAuMCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gSWdub3JlIGR1cj0iMCIgb3IgZHVyPSItbmVnIgog
ICAgIAogICAgIGZsb2F0IHBlcmNlbnRhZ2UgPSBjYWxjdWxhdGVUaW1lUGVyY2VudGFnZShlbGFw
c2VkU2Vjb25kcywgbV9iZWdpbiwgbV9lbmQsIG1fc2ltcGxlRHVyYXRpb24sIG1fcmVwZXRpdGlv
bnMpOwogICAgIAogICAgIGlmIChwZXJjZW50YWdlIDw9IDEuMCB8fCBjb25uZWN0ZWRUb1RpbWVy
KCkpCi0gICAgICAgIGhhbmRsZVRpbWVyRXZlbnQocGVyY2VudGFnZSk7CisgICAgICAgIGhhbmRs
ZVRpbWVyRXZlbnQoZWxhcHNlZFNlY29uZHMsIHBlcmNlbnRhZ2UpOwogICAgIAotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiB0cnVlOyAvLyB2YWx1ZSB3YXMgdXBkYXRlZCwgbmVlZCB0byBh
cHBseQogfQogCiB9CkluZGV4OiBrc3ZnMi9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJKHJldmlzaW9uIDE5MTM3
KQorKysga3N2ZzIvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
ODcsNiArODcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNWR0VsZW1lbnQqIHRh
cmdldEVsZW1lbnQoKSBjb25zdDsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNW
YWxpZFRhcmdldCgpIGNvbnN0OworICAgICAgICBib29sIGlzVmFsaWRBbmltYXRpb24oKSBjb25z
dDsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1
cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCkBAIC0xMDAsMTYgKzEwMSw5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VSZW5kZXJlcigpOwogCi0g
ICAgICAgIC8vIEhlbHBlcnMKLSAgICAgICAgYm9vbCB1cGRhdGVGb3JFbGFwc2VkU2Vjb25kcyhk
b3VibGUpOwotICAgICAgICB2b2lkIGhhbmRsZVRpbWVyRXZlbnQoZG91YmxlIHRpbWVQZXJjZW50
YWdlKTsKLQotICAgICAgICBzdGF0aWMgZG91YmxlIHBhcnNlQ2xvY2tWYWx1ZShjb25zdCBTdHJp
bmcmKTsKLQotICAgICAgICBTdHJpbmcgdGFyZ2V0QXR0cmlidXRlKCkgY29uc3Q7Ci0gICAgICAg
IHZvaWQgc2V0VGFyZ2V0QXR0cmlidXRlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgICAgIHN0YXRp
YyB2b2lkIHNldFRhcmdldEF0dHJpYnV0ZShTVkdFbGVtZW50KiB0YXJnZXQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRUF0dHJpYnV0ZVR5cGUgPSBBVFRSSUJVVEVU
WVBFX0FVVE8pOworICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQW5pbWF0aW9uQmFzZVZhbHVl
RnJvbUVsZW1lbnQoKTsKKyAgICAgICAgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlRm9yRWxhcHNl
ZFNlY29uZHMoZG91YmxlIGVsYXBzZWRTZWNvbmRzKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFw
cGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCgpOwogCiAgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVO
YW1lKCkgY29uc3Q7CiAKQEAgLTExOSwyNCArMTEzLDMyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgYm9vbCBpc0FkZGl0aXZlKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNBY2N1bXVs
YXRlZCgpIGNvbnN0OwogCi0gICAgICAgIEVBbmltYXRpb25Nb2RlIGRldGVjdEFuaW1hdGlvbk1v
ZGUoKSBjb25zdDsKLQotICAgICAgICBpbnQgY2FsY3VsYXRlQ3VycmVudFZhbHVlSXRlbShkb3Vi
bGUgdGltZVBlcmNlbnRhZ2UpOwotICAgICAgICBkb3VibGUgY2FsY3VsYXRlUmVsYXRpdmVUaW1l
UGVyY2VudGFnZShkb3VibGUgdGltZVBlcmNlbnRhZ2UsIGludCBjdXJyZW50SXRlbSk7Ci0KICAg
ICAgICAgZG91YmxlIHJlcGVhdGlvbnMoKSBjb25zdDsKICAgICAgICAgc3RhdGljIGJvb2wgaXNJ
bmRlZmluaXRlKGRvdWJsZSB2YWx1ZSk7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIG11dGFi
bGUgU1ZHRWxlbWVudCogbV90YXJnZXRFbGVtZW50OwogICAgICAgICAKKyAgICAgICAgRUFuaW1h
dGlvbk1vZGUgZGV0ZWN0QW5pbWF0aW9uTW9kZSgpIGNvbnN0OworICAgICAgICAKKyAgICAgICAg
c3RhdGljIGRvdWJsZSBwYXJzZUNsb2NrVmFsdWUoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHN0
YXRpYyB2b2lkIHNldFRhcmdldEF0dHJpYnV0ZShTVkdFbGVtZW50KiB0YXJnZXQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRUF0dHJpYnV0ZVR5cGUgPSBBVFRSSUJV
VEVUWVBFX0FVVE8pOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIHRhcmdldEF0dHJpYnV0ZUFu
aW1hdGVkVmFsdWUoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRUYXJnZXRBdHRyaWJ1dGVBbmlt
YXRlZFZhbHVlKGNvbnN0IFN0cmluZyYpOworICAgICAgICAKICAgICAgICAgdm9pZCBjb25uZWN0
VGltZXIoKTsKICAgICAgICAgdm9pZCBkaXNjb25uZWN0VGltZXIoKTsKKworICAgICAgICB2aXJ0
dWFsIGZsb2F0IGNhbGN1bGF0ZVRvdGFsRGlzdGFuY2UoKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHZhbHVlSW5kZXhBbmRQZXJjZW50YWdlUGFzdEZvckRpc3RhbmNlKGZsb2F0IGRpc3RhbmNlUGVy
Y2VudGFnZSwgdW5zaWduZWQmIHZhbHVlSW5kZXgsIGZsb2F0JiBwZXJjZW50YWdlUGFzdCk7Cisg
ICAgICAgIAorICAgICAgICB2b2lkIGNhbGN1bGF0ZVZhbHVlSW5kZXhBbmRQZXJjZW50YWdlUGFz
dChmbG9hdCB0aW1lUGVyY2VudGFnZSwgdW5zaWduZWQmIHZhbHVlSW5kZXgsIGZsb2F0JiBwZXJj
ZW50YWdlUGFzdCk7CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQ3VycmVu
dFZhbHVlKGRvdWJsZSB0aW1lUGVyY2VudGFnZSkgPSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wg
aGFuZGxlU3RhcnRDb25kaXRpb24oKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVM
YXN0VmFsdWVXaXRoQ3VycmVudCgpIHsgfSAvLyBTZWUgYnVnIDEyMDc1IGZvciBleHBsYWluYXRp
b24gb2Ygd2h5IHRoaXMgaXMgYSBiYWQgQVBJCi0gICAgICAgIHZpcnR1YWwgdm9pZCByZXNldFZh
bHVlcygpIHsgfQorICAgICAgICB2b2lkIGhhbmRsZVRpbWVyRXZlbnQoZG91YmxlIGVsYXBzZWRT
ZWNvbmRzLCBkb3VibGUgdGltZVBlcmNlbnRhZ2UpOworICAgICAgICAKKyAgICAgICAgdmlydHVh
bCBib29sIHVwZGF0ZUFuaW1hdGVkVmFsdWUoRUFuaW1hdGlvbk1vZGUsIGZsb2F0IHRpbWVQZXJj
ZW50YWdlLCB1bnNpZ25lZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJjZW50YWdlUGFzdCkgPSAwOwor
ICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVBbmltYXRpb25N
b2RlLCB1bnNpZ25lZCB2YWx1ZUluZGV4KSA9IDA7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMg
dm9pZCBwYXJzZUtleU51bWJlcnMoVmVjdG9yPGZsb2F0PiYga2V5TnVtYmVycywgY29uc3QgU3Ry
aW5nJiB2YWx1ZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIHBhcnNlQmVnaW5PckVuZFZhbHVlKGRv
dWJsZSYgbnVtYmVyLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKQEAgLTE2Miw2ICsxNjQsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmluZyBtX2hyZWY7CiAgICAgICAgIFN0cmlu
ZyBtX3JlcGVhdER1cjsKICAgICAgICAgU3RyaW5nIG1fYXR0cmlidXRlTmFtZTsKKyAgICAgICAg
CisgICAgICAgIFN0cmluZyBtX2Jhc2VWYWx1ZTsKKyAgICAgICAgU3RyaW5nIG1fYW5pbWF0ZWRW
YWx1ZTsKIAogICAgICAgICBkb3VibGUgbV9tYXg7CiAgICAgICAgIGRvdWJsZSBtX21pbjsKQEAg
LTE3MSw3ICsxNzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGRvdWJsZSBtX3Jl
cGV0aXRpb25zOwogICAgICAgICBkb3VibGUgbV9yZXBlYXRDb3VudDsKIAotICAgICAgICBSZWZQ
dHI8U1ZHU3RyaW5nTGlzdD4gbV92YWx1ZXM7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1fdmFs
dWVzOwogICAgICAgICBWZWN0b3I8ZmxvYXQ+IG1fa2V5VGltZXM7CiAgICAgICAgIAogICAgICAg
ICBzdHJ1Y3QgS2V5U3BsaW5lIHsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdTZXRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHU2V0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE5MTM3
KQorKysga3N2ZzIvc3ZnL1NWR1NldEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwz
MCArMzksNiBAQCBTVkdTZXRFbGVtZW50Ojp+U1ZHU2V0RWxlbWVudCgpCiB7CiB9CiAKLWJvb2wg
U1ZHU2V0RWxlbWVudDo6dXBkYXRlQ3VycmVudFZhbHVlKGRvdWJsZSB0aW1lUGVyY2VudGFnZSkK
LXsKLSAgICBpZiAobV9zYXZlZFRvLmlzRW1wdHkoKSkgewotICAgICAgICBtX3NhdmVkVG8gPSB0
YXJnZXRBdHRyaWJ1dGUoKTsKLSAgICAgICAgc2V0VGFyZ2V0QXR0cmlidXRlKG1fdG8pOwotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgU1ZHU2V0RWxlbWVudDo6aGFuZGxlU3Rh
cnRDb25kaXRpb24oKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNWR1NldEVsZW1l
bnQ6OmhhbmRsZUVuZENvbmRpdGlvbigpCi17Ci0gICAgZGlzY29ubmVjdFRpbWVyKCk7Ci0gICAg
Ci0gICAgaWYgKCFpc0Zyb3plbigpKQotICAgICAgICBzZXRUYXJnZXRBdHRyaWJ1dGUobV9zYXZl
ZFRvKTsKLSAgICAKLSAgICBtX3NhdmVkVG8gPSBTdHJpbmcoKTsKLX0KLQogfQogCiAvLyB2aW06
dHM9NDpub2V0CkluZGV4OiBrc3ZnMi9zdmcvU1ZHU2V0RWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtzdmcyL3N2Zy9TVkdTZXRFbGVtZW50LmgJKHJldmlzaW9uIDE5MTM3KQorKysga3N2ZzIvc3Zn
L1NWR1NldEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOSArMzcsOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZQogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVt
ZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KICAgICAgICAgCi0g
ICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVDdXJyZW50VmFsdWUoZG91YmxlIHRpbWVQZXJjZW50
YWdlKTsKLSAgICAgICAgdmlydHVhbCBib29sIGhhbmRsZVN0YXJ0Q29uZGl0aW9uKCk7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFbmRDb25kaXRpb24oKTsKKyAgICAgICAgdmlydHVhbCBi
b29sIHVwZGF0ZUFuaW1hdGVkVmFsdWUoRUFuaW1hdGlvbk1vZGUsIGZsb2F0IHRpbWVQZXJjZW50
YWdlLCB1bnNpZ25lZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJjZW50YWdlUGFzdCkgeyByZXR1cm4g
dHJ1ZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVB
bmltYXRpb25Nb2RlLCB1bnNpZ25lZCB2YWx1ZUluZGV4KSB7IHJldHVybiB0cnVlOyB9CiAKICAg
ICBwcml2YXRlOgogICAgICAgICBTdHJpbmcgbV9zYXZlZFRvOwpJbmRleDoga3N2ZzIvc3ZnL1NW
R1RyYW5zZm9ybS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybS5jcHAJ
KHJldmlzaW9uIDE5MTM3KQorKysga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUzLDcgKzUzLDcgQEAgYm9vbCBTVkdUcmFuc2Zvcm06OmlzVmFsaWQoKQogICAg
IHJldHVybiAobV90eXBlICE9IFNWR19UUkFOU0ZPUk1fVU5LTk9XTik7CiB9CiAKLXVuc2lnbmVk
IHNob3J0IFNWR1RyYW5zZm9ybTo6dHlwZSgpIGNvbnN0CitTVkdUcmFuc2Zvcm06OlNWR1RyYW5z
Zm9ybVR5cGUgU1ZHVHJhbnNmb3JtOjp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV90eXBl
OwogfQpAQCAtODUsNiArODUsMTEgQEAgdm9pZCBTVkdUcmFuc2Zvcm06OnNldFRyYW5zbGF0ZShk
b3VibGUgdAogICAgIG1fbWF0cml4LnRyYW5zbGF0ZSh0eCwgdHkpOwogfQogCitGbG9hdFBvaW50
IFNWR1RyYW5zZm9ybTo6dHJhbnNsYXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmxvYXRQb2lu
dChtX21hdHJpeC5lKCksIG1fbWF0cml4LmYoKSk7Cit9CisKIHZvaWQgU1ZHVHJhbnNmb3JtOjpz
ZXRTY2FsZShkb3VibGUgc3gsIGRvdWJsZSBzeSkKIHsKICAgICBtX3R5cGUgPSBTVkdfVFJBTlNG
T1JNX1NDQUxFOwpAQCAtOTQsNiArOTksMTEgQEAgdm9pZCBTVkdUcmFuc2Zvcm06OnNldFNjYWxl
KGRvdWJsZSBzeCwgZAogICAgIG1fbWF0cml4LnNjYWxlKHN4LCBzeSk7CiB9CiAKK0Zsb2F0U2l6
ZSBTVkdUcmFuc2Zvcm06OnNjYWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmxvYXRTaXplKG1f
bWF0cml4LmEoKSwgbV9tYXRyaXguZCgpKTsKK30KKwogdm9pZCBTVkdUcmFuc2Zvcm06OnNldFJv
dGF0ZShkb3VibGUgYW5nbGUsIGRvdWJsZSBjeCwgZG91YmxlIGN5KQogewogICAgIG1fdHlwZSA9
IFNWR19UUkFOU0ZPUk1fUk9UQVRFOwpAQCAtMTEyLDcgKzEyMiw3IEBAIHZvaWQgU1ZHVHJhbnNm
b3JtOjpzZXRTa2V3WChkb3VibGUgYW5nbGUKICAgICBtX2FuZ2xlID0gYW5nbGU7CiAKICAgICBt
X21hdHJpeC5yZXNldCgpOwotICAgIG1fbWF0cml4LnNoZWFyKHRhbihTVkdBbmdsZTo6dG9yYWQo
YW5nbGUpKSwgMC4wZik7CisgICAgbV9tYXRyaXguc2tld1goYW5nbGUpOwogfQogCiB2b2lkIFNW
R1RyYW5zZm9ybTo6c2V0U2tld1koZG91YmxlIGFuZ2xlKQpAQCAtMTIxLDcgKzEzMSw3IEBAIHZv
aWQgU1ZHVHJhbnNmb3JtOjpzZXRTa2V3WShkb3VibGUgYW5nbGUKICAgICBtX2FuZ2xlID0gYW5n
bGU7CiAKICAgICBtX21hdHJpeC5yZXNldCgpOwotICAgIG1fbWF0cml4LnNoZWFyKDAuMGYsIHRh
bihTVkdBbmdsZTo6dG9yYWQoYW5nbGUpKSk7CisgICAgbV9tYXRyaXguc2tld1koYW5nbGUpOwog
fQogCiAvLyB2aW06dHM9NDpub2V0CkluZGV4OiBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybS5oCShyZXZpc2lvbiAxOTEzNykKKysr
IGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOSBA
QAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAor
ICAgIGNsYXNzIEZsb2F0UG9pbnQ7CisgICAgY2xhc3MgRmxvYXRTaXplOwogCiAgICAgY2xhc3Mg
U1ZHVHJhbnNmb3JtIHsKICAgICBwdWJsaWM6CkBAIC00Niw3ICs0OSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgZXhwbGljaXQgU1ZHVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYpOwogICAgICAgICB2aXJ0dWFsIH5TVkdUcmFuc2Zvcm0oKTsKICAgICAgICAgICAgICAg
IAotICAgICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlKCkgY29uc3Q7CisgICAgICAgIFNWR1RyYW5z
Zm9ybVR5cGUgdHlwZSgpIGNvbnN0OwogCiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXgo
KSBjb25zdDsKICAgICAKQEAgLTU5LDE0ICs2MiwyOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZvaWQgc2V0U2tld1goZG91YmxlIGFuZ2xlKTsKICAgICAgICAgdm9pZCBzZXRTa2V3
WShkb3VibGUgYW5nbGUpOwogICAgICAgICAKKyAgICAgICAgLy8gSW50ZXJuYWwgdXNlIG9ubHkg
KGFuaW1hdGlvbiBzeXN0ZW0pCisgICAgICAgIEZsb2F0UG9pbnQgdHJhbnNsYXRlKCkgY29uc3Q7
CisgICAgICAgIEZsb2F0U2l6ZSBzY2FsZSgpIGNvbnN0OworICAgICAgICAKICAgICAgICAgYm9v
bCBpc1ZhbGlkKCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICB1bnNpZ25lZCBzaG9ydCBtX3R5
cGU7CisgICAgICAgIFNWR1RyYW5zZm9ybVR5cGUgbV90eXBlOwogICAgICAgICBkb3VibGUgbV9h
bmdsZTsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1fbWF0cml4OwogICAgIH07CiAKKyAgICBp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNWR1RyYW5zZm9ybSYgYSwgY29uc3QgU1ZHVHJh
bnNmb3JtJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEudHlwZSgpID09IGIudHlwZSgpICYm
IGEuYW5nbGUoKSA9PSBiLmFuZ2xlKCkgJiYgYS5tYXRyaXgoKSA9PSBiLm1hdHJpeCgpOworICAg
IH0KKyAgICAKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNWR1RyYW5zZm9ybSYg
YSwgY29uc3QgU1ZHVHJhbnNmb3JtJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuICEoYSA9PSBi
KTsKKyAgICB9CisgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBTVkdf
U1VQUE9SVApJbmRleDoga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybURpc3RhbmNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwCShyZXZpc2lvbiAwKQor
Kysga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybURpc3RhbmNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyNjUgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CisgCisgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0Cisg
CisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIAorIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAK
KyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgQm9zdG9uLCBNQSAw
MjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmZGVmIFNWR19T
VVBQT1JUCisjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtRGlzdGFuY2UuaCIKKworI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zv
cm0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorU1ZHVHJhbnNmb3JtRGlzdGFuY2U6
OlNWR1RyYW5zZm9ybURpc3RhbmNlKCkKKyAgICA6IG1fdHlwZShTVkdUcmFuc2Zvcm06OlNWR19U
UkFOU0ZPUk1fVU5LTk9XTikKKyAgICAsIG1fYW5nbGUoMCkKK3sKK30KKworU1ZHVHJhbnNmb3Jt
RGlzdGFuY2U6OlNWR1RyYW5zZm9ybURpc3RhbmNlKFNWR1RyYW5zZm9ybTo6U1ZHVHJhbnNmb3Jt
VHlwZSB0eXBlLCBkb3VibGUgYW5nbGUsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX2FuZ2xlKGFuZ2xlKQorICAgICwgbV90cmFu
c2Zvcm0odHJhbnNmb3JtKQoreworfQorCitTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6U1ZHVHJhbnNm
b3JtRGlzdGFuY2UoY29uc3QgU1ZHVHJhbnNmb3JtJiBmcm9tU1ZHVHJhbnNmb3JtLCBjb25zdCBT
VkdUcmFuc2Zvcm0mIHRvU1ZHVHJhbnNmb3JtKQorICAgIDogbV90eXBlKGZyb21TVkdUcmFuc2Zv
cm0udHlwZSgpKQorICAgICwgbV9hbmdsZSgwKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gdG9T
VkdUcmFuc2Zvcm0udHlwZSgpKTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNh
c2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1VOS05PV046CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg6CisgICAgICAgIC8v
IEZJWE1FOiBuZWVkIHRvIGJlIGFibGUgdG8gc3VidHJhY3QgdG8gbWF0cmljZXMKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURToKKyAg
ICAgICAgbV9hbmdsZSA9IHRvU1ZHVHJhbnNmb3JtLmFuZ2xlKCkgLSBmcm9tU1ZHVHJhbnNmb3Jt
LmFuZ2xlKCk7CisgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgIGNhc2UgU1ZHVHJhbnNmb3Jt
OjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURToKKyAgICB7CisgICAgICAgIEZsb2F0U2l6ZSB0cmFu
c2xhdGlvbkRpc3RhbmNlID0gdG9TVkdUcmFuc2Zvcm0udHJhbnNsYXRlKCkgLSBmcm9tU1ZHVHJh
bnNmb3JtLnRyYW5zbGF0ZSgpOworICAgICAgICBtX3RyYW5zZm9ybS50cmFuc2xhdGUodHJhbnNs
YXRpb25EaXN0YW5jZS53aWR0aCgpLCB0cmFuc2xhdGlvbkRpc3RhbmNlLmhlaWdodCgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9S
TV9TQ0FMRToKKyAgICB7CisgICAgICAgIGZsb2F0IHNjYWxlWCA9IGZyb21TVkdUcmFuc2Zvcm0u
c2NhbGUoKS53aWR0aCgpICE9IDAgPyB0b1NWR1RyYW5zZm9ybS5zY2FsZSgpLndpZHRoKCkgLyBm
cm9tU1ZHVHJhbnNmb3JtLnNjYWxlKCkud2lkdGgoKSA6IHRvU1ZHVHJhbnNmb3JtLnNjYWxlKCku
d2lkdGgoKSAvIDAuMDAwMDE7CisgICAgICAgIGZsb2F0IHNjYWxlWSA9IGZyb21TVkdUcmFuc2Zv
cm0uc2NhbGUoKS5oZWlnaHQoKSAhPSAwID8gdG9TVkdUcmFuc2Zvcm0uc2NhbGUoKS5oZWlnaHQo
KSAvIGZyb21TVkdUcmFuc2Zvcm0uc2NhbGUoKS5oZWlnaHQoKSA6IHRvU1ZHVHJhbnNmb3JtLnNj
YWxlKCkuaGVpZ2h0KCkgLyAwLjAwMDAxOworICAgICAgICBtX3RyYW5zZm9ybS5zY2FsZShzY2Fs
ZVgsIHNjYWxlWSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBTVkdUcmFuc2Zv
cm06OlNWR19UUkFOU0ZPUk1fU0tFV1g6CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFO
U0ZPUk1fU0tFV1k6CisgICAgICAgIG1fYW5nbGUgPSB0b1NWR1RyYW5zZm9ybS5hbmdsZSgpIC0g
ZnJvbVNWR1RyYW5zZm9ybS5hbmdsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCitT
VkdUcmFuc2Zvcm1EaXN0YW5jZSBTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6c2NhbGVkRGlzdGFuY2Uo
ZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBj
YXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOOgorICAgICAgICByZXR1cm4g
U1ZHVHJhbnNmb3JtRGlzdGFuY2UoKTsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5T
Rk9STV9ST1RBVEU6CisgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1EaXN0YW5jZShtX3R5cGUs
IG1fYW5nbGUgKiBzY2FsZUZhY3RvciwgQWZmaW5lVHJhbnNmb3JtKCkpOworICAgIGNhc2UgU1ZH
VHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NDQUxFOgorICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpT
VkdfVFJBTlNGT1JNX01BVFJJWDoKKyAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybURpc3RhbmNl
KG1fdHlwZSwgbV9hbmdsZSAqIHNjYWxlRmFjdG9yLCBBZmZpbmVUcmFuc2Zvcm0obV90cmFuc2Zv
cm0pLnNjYWxlKHNjYWxlRmFjdG9yKSk7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFO
U0ZPUk1fVFJBTlNMQVRFOgorICAgIHsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG5ld1RyYW5z
Zm9ybShtX3RyYW5zZm9ybSk7CisgICAgICAgIG5ld1RyYW5zZm9ybS5zZXRFKG1fdHJhbnNmb3Jt
LmUoKSAqIHNjYWxlRmFjdG9yKTsKKyAgICAgICAgbmV3VHJhbnNmb3JtLnNldEYobV90cmFuc2Zv
cm0uZigpICogc2NhbGVGYWN0b3IpOworICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtRGlzdGFu
Y2UobV90eXBlLCAwLCBuZXdUcmFuc2Zvcm0pOworICAgIH0KKyAgICBjYXNlIFNWR1RyYW5zZm9y
bTo6U1ZHX1RSQU5TRk9STV9TS0VXWDoKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5T
Rk9STV9TS0VXWToKKyAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybURpc3RhbmNlKG1fdHlwZSwg
bV9hbmdsZSAqIHNjYWxlRmFjdG9yLCBBZmZpbmVUcmFuc2Zvcm0oKSk7CisgICAgfQorICAgIAor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBTVkdUcmFuc2Zvcm1EaXN0YW5j
ZSgpOworfQorCitTVkdUcmFuc2Zvcm0gU1ZHVHJhbnNmb3JtRGlzdGFuY2U6OmFkZFNWR1RyYW5z
Zm9ybXMoY29uc3QgU1ZHVHJhbnNmb3JtJiBmaXJzdCwgY29uc3QgU1ZHVHJhbnNmb3JtJiBzZWNv
bmQpCit7CisgICAgQVNTRVJUKGZpcnN0LnR5cGUoKSA9PSBzZWNvbmQudHlwZSgpKTsKKyAgICAK
KyAgICBTVkdUcmFuc2Zvcm0gdHJhbnNmb3JtOworICAgIAorICAgIHN3aXRjaCAoZmlyc3QudHlw
ZSgpKSB7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVU5LTk9XTjoKKyAg
ICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybSgpOworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdf
VFJBTlNGT1JNX1JPVEFURToKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJJ20gbm90IHN1cmUg
dGhhdCB0aGUgdHJhbnNsYXRpb24gaXMgY29ycmVjdCBoZXJlCisgICAgICAgIGZsb2F0IGR4ID0g
Zmlyc3QudHJhbnNsYXRlKCkueCgpICsgc2Vjb25kLnRyYW5zbGF0ZSgpLngoKTsKKyAgICAgICAg
ZmxvYXQgZHkgPSBmaXJzdC50cmFuc2xhdGUoKS55KCkgKyBzZWNvbmQudHJhbnNsYXRlKCkueSgp
OworICAgICAgICB0cmFuc2Zvcm0uc2V0Um90YXRlKGZpcnN0LmFuZ2xlKCkgKyBzZWNvbmQuYW5n
bGUoKSwgZHgsIGR5KTsKKyAgICAgICAgcmV0dXJuIHRyYW5zZm9ybTsKKyAgICB9CisgICAgY2Fz
ZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fTUFUUklYOgorICAgICAgICB0cmFuc2Zvcm0u
c2V0TWF0cml4KGZpcnN0Lm1hdHJpeCgpICogc2Vjb25kLm1hdHJpeCgpKTsKKyAgICAgICAgcmV0
dXJuIHRyYW5zZm9ybTsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9UUkFO
U0xBVEU6CisgICAgeworICAgICAgICBmbG9hdCBkeCA9IGZpcnN0LnRyYW5zbGF0ZSgpLngoKSAr
IHNlY29uZC50cmFuc2xhdGUoKS54KCk7CisgICAgICAgIGZsb2F0IGR5ID0gZmlyc3QudHJhbnNs
YXRlKCkueSgpICsgc2Vjb25kLnRyYW5zbGF0ZSgpLnkoKTsKKyAgICAgICAgdHJhbnNmb3JtLnNl
dFRyYW5zbGF0ZShkeCwgZHkpOworICAgICAgICByZXR1cm4gdHJhbnNmb3JtOworICAgIH0KKyAg
ICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TQ0FMRToKKyAgICB7CisgICAgICAg
IEZsb2F0U2l6ZSBzY2FsZSA9IGZpcnN0LnNjYWxlKCkgKyBzZWNvbmQuc2NhbGUoKTsKKyAgICAg
ICAgdHJhbnNmb3JtLnNldFNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKKyAg
ICAgICAgcmV0dXJuIHRyYW5zZm9ybTsKKyAgICB9CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNW
R19UUkFOU0ZPUk1fU0tFV1g6CisgICAgICAgIHRyYW5zZm9ybS5zZXRTa2V3WChmaXJzdC5hbmds
ZSgpICsgc2Vjb25kLmFuZ2xlKCkpOworICAgICAgICByZXR1cm4gdHJhbnNmb3JtOworICAgIGNh
c2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NLRVdZOgorICAgICAgICB0cmFuc2Zvcm0u
c2V0U2tld1koZmlyc3QuYW5nbGUoKSArIHNlY29uZC5hbmdsZSgpKTsKKyAgICAgICAgcmV0dXJu
IHRyYW5zZm9ybTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIFNWR1RyYW5zZm9ybSgpOworfQorCit2b2lkIFNWR1RyYW5zZm9ybURpc3RhbmNlOjph
ZGRTVkdUcmFuc2Zvcm0oY29uc3QgU1ZHVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGJvb2wgYWJzb2x1
dGVWYWx1ZSkKK3sKKyAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCBhZGQsIHNldCB0aGUgdHlw
ZSBmb3IgdGhpcyBTVkdUcmFuc2Zvcm1EaXN0YW5jZQorICAgIGlmIChtX3R5cGUgPT0gU1ZHVHJh
bnNmb3JtOjpTVkdfVFJBTlNGT1JNX1VOS05PV04pCisgICAgICAgIG1fdHlwZSA9IHRyYW5zZm9y
bS50eXBlKCk7CisgICAgCisgICAgQVNTRVJUKG1fdHlwZSA9PSB0cmFuc2Zvcm0udHlwZSgpKTsK
KyAgICAKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdf
VFJBTlNGT1JNX1VOS05PV046CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNWR1RyYW5zZm9y
bTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg6CisgICAgICAgIG1fdHJhbnNmb3JtICo9IHRyYW5zZm9y
bS5tYXRyaXgoKTsgLy8gRklYTUU6IHdoYXQgZG9lcyAnZGlzdGFuY2UnIGJldHdlZW4gdHdvIHRy
YW5zZm9ybXMgbWVhbj8gIGhvdyBzaG91bGQgd2UgcmVzcGVjdCAnYWJzb2x1dGVWYWx1ZScgaGVy
ZT8KKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JN
X1JPVEFURToKKyAgICAgICAgbV9hbmdsZSArPSBhYnNvbHV0ZVZhbHVlID8gZmFic2YodHJhbnNm
b3JtLmFuZ2xlKCkpIDogdHJhbnNmb3JtLmFuZ2xlKCk7CisgICAgICAgIC8vIGZhbGwgdGhyb3Vn
aAorICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURToKKyAgICB7
CisgICAgICAgIGZsb2F0IGR4ID0gYWJzb2x1dGVWYWx1ZSA/IGZhYnNmKHRyYW5zZm9ybS50cmFu
c2xhdGUoKS54KCkpIDogdHJhbnNmb3JtLnRyYW5zbGF0ZSgpLngoKTsKKyAgICAgICAgZmxvYXQg
ZHkgPSBhYnNvbHV0ZVZhbHVlID8gZmFic2YodHJhbnNmb3JtLnRyYW5zbGF0ZSgpLnkoKSkgOiB0
cmFuc2Zvcm0udHJhbnNsYXRlKCkueSgpOworICAgICAgICBtX3RyYW5zZm9ybS50cmFuc2xhdGUo
ZHgsIGR5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6
U1ZHX1RSQU5TRk9STV9TQ0FMRToKKyAgICB7CisgICAgICAgIGZsb2F0IHNjYWxlWCA9IGFic29s
dXRlVmFsdWUgPyBmYWJzZih0cmFuc2Zvcm0uc2NhbGUoKS53aWR0aCgpKSA6IHRyYW5zZm9ybS5z
Y2FsZSgpLndpZHRoKCk7CisgICAgICAgIGZsb2F0IHNjYWxlWSA9IGFic29sdXRlVmFsdWUgPyBm
YWJzZih0cmFuc2Zvcm0uc2NhbGUoKS5oZWlnaHQoKSkgOiB0cmFuc2Zvcm0uc2NhbGUoKS5oZWln
aHQoKTsKKyAgICAgICAgbV90cmFuc2Zvcm0uc2NhbGUoc2NhbGVYLCBzY2FsZVkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NL
RVdYOgorICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NLRVdZOgorICAgICAg
ICBtX2FuZ2xlICs9IGFic29sdXRlVmFsdWUgPyBmYWJzZih0cmFuc2Zvcm0uYW5nbGUoKSkgOiB0
cmFuc2Zvcm0uYW5nbGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm47Cit9CisKK1NWR1RyYW5zZm9ybSBTVkdUcmFu
c2Zvcm1EaXN0YW5jZTo6YWRkVG9TVkdUcmFuc2Zvcm0oY29uc3QgU1ZHVHJhbnNmb3JtJiB0cmFu
c2Zvcm0pIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSB0cmFuc2Zvcm0udHlwZSgpIHx8
IHRyYW5zZm9ybSA9PSBTVkdUcmFuc2Zvcm0oKSk7CisgICAgCisgICAgU1ZHVHJhbnNmb3JtIG5l
d1RyYW5zZm9ybSh0cmFuc2Zvcm0pOworICAgIAorICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAg
Y2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVU5LTk9XTjoKKyAgICAgICAgcmV0dXJu
IFNWR1RyYW5zZm9ybSgpOworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX01B
VFJJWDoKKyAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybSh0cmFuc2Zvcm0ubWF0cml4KCkgKiBt
X3RyYW5zZm9ybSk7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNM
QVRFOgorICAgIHsKKyAgICAgICAgRmxvYXRQb2ludCB0cmFuc2xhdGlvbiA9IHRyYW5zZm9ybS50
cmFuc2xhdGUoKTsKKyAgICAgICAgdHJhbnNsYXRpb24gKz0gRmxvYXRTaXplKG1fdHJhbnNmb3Jt
LmUoKSwgbV90cmFuc2Zvcm0uZigpKTsKKyAgICAgICAgbmV3VHJhbnNmb3JtLnNldFRyYW5zbGF0
ZSh0cmFuc2xhdGlvbi54KCksIHRyYW5zbGF0aW9uLnkoKSk7CisgICAgICAgIHJldHVybiBuZXdU
cmFuc2Zvcm07CisgICAgfQorICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1ND
QUxFOgorICAgIHsKKyAgICAgICAgRmxvYXRTaXplIHNjYWxlID0gdHJhbnNmb3JtLnNjYWxlKCk7
CisgICAgICAgIHNjYWxlICs9IEZsb2F0U2l6ZShtX3RyYW5zZm9ybS5hKCksIG1fdHJhbnNmb3Jt
LmQoKSk7CisgICAgICAgIG5ld1RyYW5zZm9ybS5zZXRTY2FsZShzY2FsZS53aWR0aCgpLCBzY2Fs
ZS5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybiBuZXdUcmFuc2Zvcm07CisgICAgfQorICAgIGNh
c2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURToKKyAgICB7CisgICAgICAgIC8v
IEZJWE1FOiBJJ20gbm90IGNlcnRhaW4gdGhlIHRyYW5zbGF0aW9uIGlzIGNhbGN1bGF0ZWQgY29y
cmVjdGx5IGhlcmUKKyAgICAgICAgRmxvYXRQb2ludCB0cmFuc2xhdGlvbiA9IHRyYW5zZm9ybS50
cmFuc2xhdGUoKTsKKyAgICAgICAgdHJhbnNsYXRpb24gKz0gRmxvYXRTaXplKG1fdHJhbnNmb3Jt
LmUoKSwgbV90cmFuc2Zvcm0uZigpKTsKKyAgICAgICAgbmV3VHJhbnNmb3JtLnNldFJvdGF0ZSh0
cmFuc2Zvcm0uYW5nbGUoKSArIG1fYW5nbGUsIHRyYW5zbGF0aW9uLngoKSwgdHJhbnNsYXRpb24u
eSgpKTsKKyAgICAgICAgcmV0dXJuIG5ld1RyYW5zZm9ybTsKKyAgICB9CisgICAgY2FzZSBTVkdU
cmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0tFV1g6CisgICAgICAgIG5ld1RyYW5zZm9ybS5zZXRT
a2V3WCh0cmFuc2Zvcm0uYW5nbGUoKSArIG1fYW5nbGUpOworICAgICAgICByZXR1cm4gbmV3VHJh
bnNmb3JtOworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NLRVdZOgorICAg
ICAgICBuZXdUcmFuc2Zvcm0uc2V0U2tld1kodHJhbnNmb3JtLmFuZ2xlKCkgKyBtX2FuZ2xlKTsK
KyAgICAgICAgcmV0dXJuIG5ld1RyYW5zZm9ybTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFNWR1RyYW5zZm9ybSgpOworfQorCitib29sIFNWR1Ry
YW5zZm9ybURpc3RhbmNlOjppc1plcm8oKSBjb25zdAoreworICAgIHJldHVybiAobV90cmFuc2Zv
cm0gPT0gQWZmaW5lVHJhbnNmb3JtKCkgJiYgbV9hbmdsZSA9PSAwKTsKK30KKworZmxvYXQgU1ZH
VHJhbnNmb3JtRGlzdGFuY2U6OmRpc3RhbmNlKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fdHlw
ZSkgeworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1VOS05PV046CisgICAg
ICAgIHJldHVybiAwOworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFU
RToKKyAgICAgICAgcmV0dXJuIHNxcnRmKG1fYW5nbGUgKiBtX2FuZ2xlICsgbV90cmFuc2Zvcm0u
ZSgpICogbV90cmFuc2Zvcm0uZSgpICsgbV90cmFuc2Zvcm0uZigpICogbV90cmFuc2Zvcm0uZigp
KTsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg6CisgICAgICAg
IHJldHVybiAwOyAvLyBJJ20gbm90IHF1aXRlIHN1cmUgeWV0IHdoYXQgZGlzdGFuY2UgYmV0d2Vl
biB0d28gbWF0cmljZXMgbWVhbnMuCisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZP
Uk1fU0NBTEU6CisgICAgICAgIHJldHVybiBzcXJ0ZihtX3RyYW5zZm9ybS5hKCkgKiBtX3RyYW5z
Zm9ybS5hKCkgKyBtX3RyYW5zZm9ybS5kKCkgKiBtX3RyYW5zZm9ybS5kKCkpOworICAgIGNhc2Ug
U1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURToKKyAgICAgICAgcmV0dXJuIHNx
cnRmKG1fdHJhbnNmb3JtLmUoKSAqIG1fdHJhbnNmb3JtLmUoKSArIG1fdHJhbnNmb3JtLmYoKSAq
IG1fdHJhbnNmb3JtLmYoKSk7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1f
U0tFV1g6CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0tFV1k6CisgICAg
ICAgIHJldHVybiBtX2FuZ2xlOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IGtzdmcyL3N2Zy9TVkdUcmFuc2Zv
cm1EaXN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1EaXN0YW5j
ZS5oCShyZXZpc2lvbiAwKQorKysga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybURpc3RhbmNlLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgCisgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBwcm9qZWN0CisgCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIAorIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAs
CisgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBTVkdUcmFuc2Zv
cm1EaXN0YW5jZV9oCisjZGVmaW5lIFNWR1RyYW5zZm9ybURpc3RhbmNlX2gKKyNpZmRlZiBTVkdf
U1VQUE9SVAorCisjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKyAgICAKKyAgICBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CisgICAgICAgIAorICAgIGNsYXNz
IFNWR1RyYW5zZm9ybURpc3RhbmNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNWR1RyYW5zZm9y
bURpc3RhbmNlKCk7CisgICAgICAgIFNWR1RyYW5zZm9ybURpc3RhbmNlKGNvbnN0IFNWR1RyYW5z
Zm9ybSYgZnJvbVRyYW5zZm9ybSwgY29uc3QgU1ZHVHJhbnNmb3JtJiB0b1RyYW5zZm9ybSk7Cisg
ICAgICAgIAorICAgICAgICBTVkdUcmFuc2Zvcm1EaXN0YW5jZSBzY2FsZWREaXN0YW5jZShmbG9h
dCBzY2FsZUZhY3RvcikgY29uc3Q7CisgICAgICAgIFNWR1RyYW5zZm9ybSBhZGRUb1NWR1RyYW5z
Zm9ybShjb25zdCBTVkdUcmFuc2Zvcm0mKSBjb25zdDsKKyAgICAgICAgdm9pZCBhZGRTVkdUcmFu
c2Zvcm0oY29uc3QgU1ZHVHJhbnNmb3JtJiwgYm9vbCBhYnNvbHV0ZVZhbHVlID0gZmFsc2UpOwor
ICAgICAgICAKKyAgICAgICAgc3RhdGljIFNWR1RyYW5zZm9ybSBhZGRTVkdUcmFuc2Zvcm1zKGNv
bnN0IFNWR1RyYW5zZm9ybSYsIGNvbnN0IFNWR1RyYW5zZm9ybSYpOworICAgICAgICAKKyAgICAg
ICAgYm9vbCBpc1plcm8oKSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIGZsb2F0IGRpc3RhbmNl
KCkgY29uc3Q7CisgICAgcHJpdmF0ZToKKyAgICAgICAgU1ZHVHJhbnNmb3JtRGlzdGFuY2UoU1ZH
VHJhbnNmb3JtOjpTVkdUcmFuc2Zvcm1UeXBlLCBkb3VibGUgYW5nbGUsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYpOworICAgICAgICAgICAgCisgICAgICAgIFNWR1RyYW5zZm9ybTo6U1ZHVHJhbnNm
b3JtVHlwZSBtX3R5cGU7CisgICAgICAgIGRvdWJsZSBtX2FuZ2xlOworICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gbV90cmFuc2Zvcm07IC8vIGZvciBzdG9yaW5nIHNjYWxlLCB0cmFuc2xhdGlvbiBv
ciBtYXRyaXggdHJhbnNmb3JtcworICAgIH07Cit9CisKKyNlbmRpZiAvLyBTVkdfU1VQUE9SVAor
I2VuZGlmIC8vIFNWR1RyYW5zZm9ybURpc3RhbmNlX2gKSW5kZXg6IGtzdmcyL3N2Zy9TVkdUcmFu
c2Zvcm1MaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5j
cHAJKHJldmlzaW9uIDE5MTM3KQorKysga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5o
IgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybURpc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNm
b3JtTGlzdC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTY1LDYgKzY2LDIwIEBA
IFNWR1RyYW5zZm9ybSBTVkdUcmFuc2Zvcm1MaXN0Ojpjb25jYXRlbmEKICAgICByZXR1cm4gU1ZH
VHJhbnNmb3JtKG1hdHJpeCk7CiB9CiAKK1NWR1RyYW5zZm9ybSBTVkdUcmFuc2Zvcm1MaXN0Ojpj
b25jYXRlbmF0ZUZvclR5cGUoU1ZHVHJhbnNmb3JtOjpTVkdUcmFuc2Zvcm1UeXBlKSBjb25zdAor
eworICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSBudW1iZXJPZkl0ZW1zKCk7CisgICAgaWYgKCFs
ZW5ndGgpCisgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm0oKTsKKyAgICAKKyAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBTVkdUcmFuc2Zvcm1EaXN0YW5jZSB0b3RhbFRyYW5zZm9ybTsK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICB0
b3RhbFRyYW5zZm9ybS5hZGRTVkdUcmFuc2Zvcm0oZ2V0SXRlbShpLCBlYykpOworICAgIAorICAg
IHJldHVybiB0b3RhbFRyYW5zZm9ybS5hZGRUb1NWR1RyYW5zZm9ybShTVkdUcmFuc2Zvcm0oKSk7
Cit9CisKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCiAvLyB2aW06dHM9NDpub2V0CkluZGV4OiBr
c3ZnMi9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdU
cmFuc2Zvcm1MaXN0LmgJKHJldmlzaW9uIDE5MTM3KQorKysga3N2ZzIvc3ZnL1NWR1RyYW5zZm9y
bUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgLy8gSW50ZXJuYWwgdXNlIG9ubHkKICAgICAgICAgU1ZHVHJhbnNmb3Jt
IGNvbmNhdGVuYXRlKCkgY29uc3Q7CisgICAgICAgIFNWR1RyYW5zZm9ybSBjb25jYXRlbmF0ZUZv
clR5cGUoU1ZHVHJhbnNmb3JtOjpTVkdUcmFuc2Zvcm1UeXBlKSBjb25zdDsKICAgICB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1h
dGVDb2xvci12YWx1ZXMtc2ltcGxlLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtYW51YWwtdGVzdHMvYW5p
bWF0aW9uL2FuaW1hdGVDb2xvci12YWx1ZXMtc2ltcGxlLnN2ZwkocmV2aXNpb24gMCkKKysrIG1h
bnVhbC10ZXN0cy9hbmltYXRpb24vYW5pbWF0ZUNvbG9yLXZhbHVlcy1zaW1wbGUuc3ZnCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKKzxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIw
MDAvc3ZnJz4KKyAgPHJlY3Qgd2lkdGg9JzEwMCcgaGVpZ2h0PScxMDAnPgorICAgIDxhbmltYXRl
Q29sb3IgYXR0cmlidXRlTmFtZT0iZmlsbCIgdmFsdWVzPSdibHVlOyBncmVlbicgZHVyPSczcycg
ZmlsbD0nZnJlZXplJyAvPgorICA8L3JlY3Q+CisgIDx0ZXh0IHg9JzEwJyB5PScxMjAnPlRoZSBy
ZWN0IHNob3VsZCBhbmltYXRlIGZyb20gYmx1ZSB0byBncmVlbiBvdmVyIDMgc2Vjb25kczwvdGV4
dD4KKzwvc3ZnPgpJbmRleDogbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlVHJhbnNmb3Jt
LWtleVRpbWVzLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1h
dGVUcmFuc2Zvcm0ta2V5VGltZXMuc3ZnCShyZXZpc2lvbiAwKQorKysgbWFudWFsLXRlc3RzL2Fu
aW1hdGlvbi9hbmltYXRlVHJhbnNmb3JtLWtleVRpbWVzLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMSBAQAorPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPgorICA8
cmVjdCBmaWxsPSdibHVlJyB3aWR0aD0nMTAwJyBoZWlnaHQ9JzEwMCc+CisgICAgPGFuaW1hdGVU
cmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSd0cmFuc2xhdGUnIHZhbHVl
cz0nMCwwOyAxMCwwOyAxMDAsMCcga2V5VGltZXM9JzA7IC42OyAxJyBkdXI9JzNzJyBmaWxsPSdm
cmVlemUnIC8+CisgIDwvcmVjdD4KKyAgPHJlY3QgZmlsbD0nbm9uZScgc3Ryb2tlPSdvcmFuZ2Un
IHg9JzEwJyB3aWR0aD0nMTAwJyBoZWlnaHQ9JzEwMCcgLz4KKyAgPHJlY3QgZmlsbD0nbm9uZScg
c3Ryb2tlPSdncmVlbicgeD0nMTAwJyB3aWR0aD0nMTAwJyBoZWlnaHQ9JzEwMCcgLz4KKyAgPHRl
eHQgeD0nMTAnIHk9JzEyMCc+CisgICAgVGhlIHJlY3Qgc2hvdWxkIGZyb20gMCwwIHRvIDEwMCww
IG92ZXIgMyBzZWNvbmRzLgorICAgIDx0c3BhbiBkeT0nMjAnIHg9JzEwJz5JdCBzaG91bGQgYmUg
YXQgdGhlIG9yYW5nZSBhdCAyIHNlY29uZHMgYW5kIHRoZSBncmVlbiBhdCAzIHNlY29uZHMuPC90
c3Bhbj4KKyAgPC90ZXh0PgorPC9zdmc+CkluZGV4OiBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2Fu
aW1hdGVDb2xvci1ieS5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9h
bmltYXRlQ29sb3ItYnkuc3ZnCShyZXZpc2lvbiAwKQorKysgbWFudWFsLXRlc3RzL2FuaW1hdGlv
bi9hbmltYXRlQ29sb3ItYnkuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKKzxzdmcg
eG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz4KKyAgPHJlY3Qgd2lkdGg9JzEwMCcg
aGVpZ2h0PScxMDAnIGZpbGw9J2JsYWNrJz4KKyAgICA8YW5pbWF0ZUNvbG9yIGF0dHJpYnV0ZU5h
bWU9ImZpbGwiIGJ5PSdncmVlbicgZHVyPSczcycgZmlsbD0nZnJlZXplJyAvPgorICA8L3JlY3Q+
CisgIDx0ZXh0IHg9JzEwJyB5PScxMjAnPlRoZSByZWN0IHNob3VsZCBhbmltYXRlIGZyb20gYmxh
Y2sgdG8gZ3JlZW4gb3ZlciAzIHNlY29uZHM8L3RleHQ+Cis8L3N2Zz4KSW5kZXg6IG1hbnVhbC10
ZXN0cy9hbmltYXRpb24vYW5pbWF0ZUNvbG9yLWZyb20tYnkuc3ZnCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1h
bnVhbC10ZXN0cy9hbmltYXRpb24vYW5pbWF0ZUNvbG9yLWZyb20tYnkuc3ZnCShyZXZpc2lvbiAw
KQorKysgbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlQ29sb3ItZnJvbS1ieS5zdmcJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmcnPgorICA8cmVjdCB3aWR0aD0nMTAwJyBoZWlnaHQ9JzEwMCc+CisgICAgPGFuaW1h
dGVDb2xvciBhdHRyaWJ1dGVOYW1lPSJmaWxsIiBmcm9tPScjREQwMDAwJyBieT0nIzAwMDBERCcg
ZHVyPSczcycgZmlsbD0nZnJlZXplJyAvPgorICA8L3JlY3Q+CisgIDx0ZXh0IHg9JzEwJyB5PScx
MjAnPlRoZSByZWN0IHNob3VsZCBhbmltYXRlIGZyb20gcmVkIHRvIHB1cnBsZSBvdmVyIDMgc2Vj
b25kczwvdGV4dD4KKzwvc3ZnPgpJbmRleDogbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRl
Q29sb3ItcmVwZWF0LWluZGVmaW5pdGUuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1hbnVhbC10ZXN0cy9h
bmltYXRpb24vYW5pbWF0ZUNvbG9yLXJlcGVhdC1pbmRlZmluaXRlLnN2ZwkocmV2aXNpb24gMCkK
KysrIG1hbnVhbC10ZXN0cy9hbmltYXRpb24vYW5pbWF0ZUNvbG9yLXJlcGVhdC1pbmRlZmluaXRl
LnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2IEBACis8c3ZnIHhtbG5zPSdodHRwOi8vd3d3
LnczLm9yZy8yMDAwL3N2Zyc+CisgIDxyZWN0IHdpZHRoPScxMDAnIGhlaWdodD0nMTAwJz4KKyAg
ICA8YW5pbWF0ZUNvbG9yIGF0dHJpYnV0ZU5hbWU9ImZpbGwiIHZhbHVlcz0nYmx1ZTsgZ3JlZW4n
IGR1cj0nMnMnIHJlcGVhdENvdW50PSdpbmRlZmluaXRlJyAvPgorICA8L3JlY3Q+CisgIDx0ZXh0
IHg9JzEwJyB5PScxMjAnPlRoZSByZWN0IHNob3VsZCBhbmltYXRlIGZyb20gYmx1ZSB0byBncmVl
biBvdmVyIDIgc2Vjb25kcywgcmVwZWF0ZWRseS48L3RleHQ+Cis8L3N2Zz4KSW5kZXg6IG1hbnVh
bC10ZXN0cy9hbmltYXRpb24vYW5pbWF0ZVRyYW5zZm9ybS1yZXBlYXQtb25jZS5zdmcKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlVHJhbnNmb3JtLXJlcGVhdC1v
bmNlLnN2ZwkocmV2aXNpb24gMCkKKysrIG1hbnVhbC10ZXN0cy9hbmltYXRpb24vYW5pbWF0ZVRy
YW5zZm9ybS1yZXBlYXQtb25jZS5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOCBAQAorPHN2
ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPgorICA8cmVjdCBmaWxsPSdibHVl
JyB3aWR0aD0nMTAwJyBoZWlnaHQ9JzEwMCc+CisgICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmli
dXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSd0cmFuc2xhdGUnIGZyb209JzAsMCcgdG89JzEwMCww
JyBkdXI9JzJzJyByZXBlYXRDb3VudD0nMicgZmlsbD0nZnJlZXplJyAvPgorICA8L3JlY3Q+Cisg
IDx0ZXh0IHg9JzEwJyB5PScxMjAnPgorICAgIFRoZSByZWN0IHNob3VsZCBmcm9tIDAsMCB0byAx
MDAsMCBvdmVyIDIgc2Vjb25kcywgdHdpY2UuCisgIDwvdGV4dD4KKzwvc3ZnPgpJbmRleDogbWFu
dWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlQ29sb3ItdG8uc3ZnCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1h
bnVhbC10ZXN0cy9hbmltYXRpb24vYW5pbWF0ZUNvbG9yLXRvLnN2ZwkocmV2aXNpb24gMCkKKysr
IG1hbnVhbC10ZXN0cy9hbmltYXRpb24vYW5pbWF0ZUNvbG9yLXRvLnN2ZwkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2IEBACis8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+
CisgIDxyZWN0IHdpZHRoPScxMDAnIGhlaWdodD0nMTAwJyBmaWxsPSdibHVlJz4KKyAgICA8YW5p
bWF0ZUNvbG9yIGF0dHJpYnV0ZU5hbWU9ImZpbGwiIHRvPSdncmVlbicgZHVyPSczcycgZmlsbD0n
ZnJlZXplJyAvPgorICA8L3JlY3Q+CisgIDx0ZXh0IHg9JzEwJyB5PScxMjAnPlRoZSByZWN0IHNo
b3VsZCBhbmltYXRlIGZyb20gYmx1ZSB0byBncmVlbiBvdmVyIDMgc2Vjb25kczwvdGV4dD4KKzwv
c3ZnPgpJbmRleDogbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlQ29sb3ItdG8tZnJvbS5z
dmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlQ29sb3ItdG8t
ZnJvbS5zdmcJKHJldmlzaW9uIDApCisrKyBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVD
b2xvci10by1mcm9tLnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2IEBACis8c3ZnIHhtbG5z
PSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+CisgIDxyZWN0IHdpZHRoPScxMDAnIGhlaWdo
dD0nMTAwJz4KKyAgICA8YW5pbWF0ZUNvbG9yIGF0dHJpYnV0ZU5hbWU9ImZpbGwiIGZyb209J2Js
dWUnIHRvPSdncmVlbicgZHVyPSczcycgZmlsbD0nZnJlZXplJyAvPgorICA8L3JlY3Q+CisgIDx0
ZXh0IHg9JzEwJyB5PScxMjAnPlRoZSByZWN0IHNob3VsZCBhbmltYXRlIGZyb20gYmx1ZSB0byBn
cmVlbiBvdmVyIDMgc2Vjb25kczwvdGV4dD4KKzwvc3ZnPgpJbmRleDogbWFudWFsLXRlc3RzL2Fu
aW1hdGlvbi9hbmltYXRlQ29sb3ItYnkuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1hbnVhbC10ZXN0cy9h
bmltYXRpb24vYW5pbWF0ZUNvbG9yLWJ5LnN2ZwkocmV2aXNpb24gMCkKKysrIG1hbnVhbC10ZXN0
cy9hbmltYXRpb24vYW5pbWF0ZUNvbG9yLWJ5LnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2
IEBACis8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+CisgIDxyZWN0IHdp
ZHRoPScxMDAnIGhlaWdodD0nMTAwJyBmaWxsPSdibGFjayc+CisgICAgPGFuaW1hdGVDb2xvciBh
dHRyaWJ1dGVOYW1lPSJmaWxsIiBieT0nZ3JlZW4nIGR1cj0nM3MnIGZpbGw9J2ZyZWV6ZScgLz4K
KyAgPC9yZWN0PgorICA8dGV4dCB4PScxMCcgeT0nMTIwJz5UaGUgcmVjdCBzaG91bGQgYW5pbWF0
ZSBmcm9tIGJsYWNrIHRvIGdyZWVuIG92ZXIgMyBzZWNvbmRzPC90ZXh0PgorPC9zdmc+CkluZGV4
OiBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVDb2xvci1mcm9tLWJ5LnN2Zwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVDb2xvci1mcm9tLWJ5LnN2Zwko
cmV2aXNpb24gMCkKKysrIG1hbnVhbC10ZXN0cy9hbmltYXRpb24vYW5pbWF0ZUNvbG9yLWZyb20t
Ynkuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKKzxzdmcgeG1sbnM9J2h0dHA6Ly93
d3cudzMub3JnLzIwMDAvc3ZnJz4KKyAgPHJlY3Qgd2lkdGg9JzEwMCcgaGVpZ2h0PScxMDAnPgor
ICAgIDxhbmltYXRlQ29sb3IgYXR0cmlidXRlTmFtZT0iZmlsbCIgZnJvbT0nI0REMDAwMCcgYnk9
JyMwMDAwREQnIGR1cj0nM3MnIGZpbGw9J2ZyZWV6ZScgLz4KKyAgPC9yZWN0PgorICA8dGV4dCB4
PScxMCcgeT0nMTIwJz5UaGUgcmVjdCBzaG91bGQgYW5pbWF0ZSBmcm9tIHJlZCB0byBwdXJwbGUg
b3ZlciAzIHNlY29uZHM8L3RleHQ+Cis8L3N2Zz4KSW5kZXg6IG1hbnVhbC10ZXN0cy9hbmltYXRp
b24vYW5pbWF0ZUNvbG9yLXJlcGVhdC1pbmRlZmluaXRlLnN2Zwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtYW51
YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVDb2xvci1yZXBlYXQtaW5kZWZpbml0ZS5zdmcJKHJl
dmlzaW9uIDApCisrKyBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVDb2xvci1yZXBlYXQt
aW5kZWZpbml0ZS5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorPHN2ZyB4bWxucz0n
aHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPgorICA8cmVjdCB3aWR0aD0nMTAwJyBoZWlnaHQ9
JzEwMCc+CisgICAgPGFuaW1hdGVDb2xvciBhdHRyaWJ1dGVOYW1lPSJmaWxsIiB2YWx1ZXM9J2Js
dWU7IGdyZWVuJyBkdXI9JzJzJyByZXBlYXRDb3VudD0naW5kZWZpbml0ZScgLz4KKyAgPC9yZWN0
PgorICA8dGV4dCB4PScxMCcgeT0nMTIwJz5UaGUgcmVjdCBzaG91bGQgYW5pbWF0ZSBmcm9tIGJs
dWUgdG8gZ3JlZW4gb3ZlciAyIHNlY29uZHMsIHJlcGVhdGVkbHkuPC90ZXh0PgorPC9zdmc+Cklu
ZGV4OiBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVDb2xvci10by1mcm9tLnN2Zwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVDb2xvci10by1mcm9tLnN2
ZwkocmV2aXNpb24gMCkKKysrIG1hbnVhbC10ZXN0cy9hbmltYXRpb24vYW5pbWF0ZUNvbG9yLXRv
LWZyb20uc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKKzxzdmcgeG1sbnM9J2h0dHA6
Ly93d3cudzMub3JnLzIwMDAvc3ZnJz4KKyAgPHJlY3Qgd2lkdGg9JzEwMCcgaGVpZ2h0PScxMDAn
PgorICAgIDxhbmltYXRlQ29sb3IgYXR0cmlidXRlTmFtZT0iZmlsbCIgZnJvbT0nYmx1ZScgdG89
J2dyZWVuJyBkdXI9JzNzJyBmaWxsPSdmcmVlemUnIC8+CisgIDwvcmVjdD4KKyAgPHRleHQgeD0n
MTAnIHk9JzEyMCc+VGhlIHJlY3Qgc2hvdWxkIGFuaW1hdGUgZnJvbSBibHVlIHRvIGdyZWVuIG92
ZXIgMyBzZWNvbmRzPC90ZXh0PgorPC9zdmc+CkluZGV4OiBtYW51YWwtdGVzdHMvYW5pbWF0aW9u
L2FuaW1hdGVDb2xvci10by5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWFudWFsLXRlc3RzL2FuaW1hdGlv
bi9hbmltYXRlQ29sb3ItdG8uc3ZnCShyZXZpc2lvbiAwKQorKysgbWFudWFsLXRlc3RzL2FuaW1h
dGlvbi9hbmltYXRlQ29sb3ItdG8uc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKKzxz
dmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz4KKyAgPHJlY3Qgd2lkdGg9JzEw
MCcgaGVpZ2h0PScxMDAnIGZpbGw9J2JsdWUnPgorICAgIDxhbmltYXRlQ29sb3IgYXR0cmlidXRl
TmFtZT0iZmlsbCIgdG89J2dyZWVuJyBkdXI9JzNzJyBmaWxsPSdmcmVlemUnIC8+CisgIDwvcmVj
dD4KKyAgPHRleHQgeD0nMTAnIHk9JzEyMCc+VGhlIHJlY3Qgc2hvdWxkIGFuaW1hdGUgZnJvbSBi
bHVlIHRvIGdyZWVuIG92ZXIgMyBzZWNvbmRzPC90ZXh0PgorPC9zdmc+CkluZGV4OiBtYW51YWwt
dGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVDb2xvci12YWx1ZXMtc2ltcGxlLnN2Zwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVDb2xvci12YWx1ZXMtc2ltcGxlLnN2
ZwkocmV2aXNpb24gMCkKKysrIG1hbnVhbC10ZXN0cy9hbmltYXRpb24vYW5pbWF0ZUNvbG9yLXZh
bHVlcy1zaW1wbGUuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKKzxzdmcgeG1sbnM9
J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz4KKyAgPHJlY3Qgd2lkdGg9JzEwMCcgaGVpZ2h0
PScxMDAnPgorICAgIDxhbmltYXRlQ29sb3IgYXR0cmlidXRlTmFtZT0iZmlsbCIgdmFsdWVzPSdi
bHVlOyBncmVlbicgZHVyPSczcycgZmlsbD0nZnJlZXplJyAvPgorICA8L3JlY3Q+CisgIDx0ZXh0
IHg9JzEwJyB5PScxMjAnPlRoZSByZWN0IHNob3VsZCBhbmltYXRlIGZyb20gYmx1ZSB0byBncmVl
biBvdmVyIDMgc2Vjb25kczwvdGV4dD4KKzwvc3ZnPgpJbmRleDogbWFudWFsLXRlc3RzL2FuaW1h
dGlvbi9hbmltYXRlVHJhbnNmb3JtLWtleVRpbWVzLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtYW51YWwt
dGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVUcmFuc2Zvcm0ta2V5VGltZXMuc3ZnCShyZXZpc2lvbiAw
KQorKysgbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlVHJhbnNmb3JtLWtleVRpbWVzLnN2
ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPHN2ZyB4bWxucz0naHR0cDovL3d3dy53
My5vcmcvMjAwMC9zdmcnPgorICA8cmVjdCBmaWxsPSdibHVlJyB3aWR0aD0nMTAwJyBoZWlnaHQ9
JzEwMCc+CisgICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0
eXBlPSd0cmFuc2xhdGUnIHZhbHVlcz0nMCwwOyAxMCwwOyAxMDAsMCcga2V5VGltZXM9JzA7IC42
OyAxJyBkdXI9JzNzJyBmaWxsPSdmcmVlemUnIC8+CisgIDwvcmVjdD4KKyAgPHJlY3QgZmlsbD0n
bm9uZScgc3Ryb2tlPSdvcmFuZ2UnIHg9JzEwJyB3aWR0aD0nMTAwJyBoZWlnaHQ9JzEwMCcgLz4K
KyAgPHJlY3QgZmlsbD0nbm9uZScgc3Ryb2tlPSdncmVlbicgeD0nMTAwJyB3aWR0aD0nMTAwJyBo
ZWlnaHQ9JzEwMCcgLz4KKyAgPHRleHQgeD0nMTAnIHk9JzEyMCc+CisgICAgVGhlIHJlY3Qgc2hv
dWxkIGZyb20gMCwwIHRvIDEwMCwwIG92ZXIgMyBzZWNvbmRzLgorICAgIDx0c3BhbiBkeT0nMjAn
IHg9JzEwJz5JdCBzaG91bGQgYmUgYXQgdGhlIG9yYW5nZSBhdCAyIHNlY29uZHMgYW5kIHRoZSBn
cmVlbiBhdCAzIHNlY29uZHMuPC90c3Bhbj4KKyAgPC90ZXh0PgorPC9zdmc+CkluZGV4OiBtYW51
YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVUcmFuc2Zvcm0tcmVwZWF0LW9uY2Uuc3ZnCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIG1hbnVhbC10ZXN0cy9hbmltYXRpb24vYW5pbWF0ZVRyYW5zZm9ybS1yZXBlYXQt
b25jZS5zdmcJKHJldmlzaW9uIDApCisrKyBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVU
cmFuc2Zvcm0tcmVwZWF0LW9uY2Uuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAKKzxz
dmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz4KKyAgPHJlY3QgZmlsbD0nYmx1
ZScgd2lkdGg9JzEwMCcgaGVpZ2h0PScxMDAnPgorICAgIDxhbmltYXRlVHJhbnNmb3JtIGF0dHJp
YnV0ZU5hbWU9InRyYW5zZm9ybSIgdHlwZT0ndHJhbnNsYXRlJyBmcm9tPScwLDAnIHRvPScxMDAs
MCcgZHVyPScycycgcmVwZWF0Q291bnQ9JzInIGZpbGw9J2ZyZWV6ZScgLz4KKyAgPC9yZWN0Pgor
ICA8dGV4dCB4PScxMCcgeT0nMTIwJz4KKyAgICBUaGUgcmVjdCBzaG91bGQgZnJvbSAwLDAgdG8g
MTAwLDAgb3ZlciAyIHNlY29uZHMsIHR3aWNlLgorICA8L3RleHQ+Cis8L3N2Zz4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12679</attachid>
            <date>2007-01-26 04:53:41 -0800</date>
            <delta_ts>2007-01-26 16:35:22 -0800</delta_ts>
            <desc>better patch, now includes animateMotion support too</desc>
            <filename>motion.patch</filename>
            <type>text/plain</type>
            <size>104135</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTQ5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEyIEBACisyMDA3LTAx
LTI2ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgY2FsY01vZGUsIGtl
eVRpbWVzIGFuZCAobmVhcmx5KSBrZXlTcGxpbmVzLgorICAgICAgICBodHRwOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM1MAorICAgICAgICBSZS1hcmNoaXRlY3QgbXVjaCBv
ZiB0aGUgYW5pbWF0aW9uIHN5c3RlbSB0byByZW1vdmUgaHVnZSBzZWN0aW9ucyBvZiBjb2RlLgor
ICAgICAgICBBZGRlZCBuZXcgQ29sb3JEaXN0YW5jZSwgU1ZHVHJhbnNmb3JtRGlzdGFuY2UgdG8g
c2ltcGxpZnkgYW5pbWF0ZUNvbG9yLCBhbmltYXRlVHJhbnNmb3JtIGNhbGN1bGF0aW9ucy4KKyAg
ICAgICAgSSBhbHNvIGFkZGVkIGJhc2ljIDxhbmltYXRlTW90aW9uPiBzdXBwb3J0IHNpbmNlIGl0
IHdhcyBzbyBlYXN5IHcvIHRoZSBuZXcgYXJjaGl0ZWN0dXJlLgorICAgICAgICAKKyAgICAgICAg
QWRkaW5nIG1hbnVhbCBhbmltYXRpb24gdGVzdHMgdW50aWwgYnVnIDEyMDc0IGlzIGZpeGVkLgor
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGtzdmcyL21pc2MvU1ZHVGltZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGltZXI6OmFw
cGx5QW5pbWF0aW9ucyk6CisgICAgICAgICoga3N2ZzIvc3ZnL0NvbG9yRGlzdGFuY2UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yRGlzdGFuY2U6OkNvbG9yRGlzdGFuY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Y2xhbXBDb2xvclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yRGlzdGFuY2U6OnNjYWxlZERpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yRGlz
dGFuY2U6OmFkZENvbG9yc0FuZENsYW1wKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yRGlzdGFu
Y2U6OmFkZFRvQ29sb3JBbmRDbGFtcCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvckRpc3RhbmNl
Ojppc1plcm8pOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3JEaXN0YW5jZTo6ZGlzdGFuY2UpOgor
ICAgICAgICAqIGtzdmcyL3N2Zy9Db2xvckRpc3RhbmNlLmg6IEFkZGVkLgorICAgICAgICAqIGtz
dmcyL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FuaW1hdGVDb2xvckVsZW1lbnQ6OlNWR0FuaW1hdGVDb2xvckVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uQmFzZVZhbHVl
RnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6
YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVDb2xvckVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKToKKyAgICAg
ICAgKiBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Y29udGV4dEVsZW1lbnQpOgorICAgICAgICAqIGtz
dmcyL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZUVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyk6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50OjpoYXNWYWxpZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlTW90aW9uRWxlbWVudDo6dXBkYXRlQW5pbWF0ZWRWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25F
bGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGlvbkJhc2VWYWx1ZUZyb21FbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjphcHBseUFuaW1h
dGVkVmFsdWVUb0VsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmltYXRlTW90aW9u
RWxlbWVudC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6U1ZH
QW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRy
YW5zZm9ybUVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGlvbkJhc2VWYWx1ZUZyb21F
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojph
cHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZVRyYW5zZm9ybUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cGFyc2VUcmFuc2Zvcm1WYWx1ZSk6
CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Y29udGV4dEVsZW1lbnQp
OgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlS2V5TnVtYmVycyk6CisgICAgICAg
IChXZWJDb3JlOjpwYXJzZVZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUtleVNwbGlu
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6dGFyZ2V0
QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25F
bGVtZW50OjpzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmRldGVjdEFuaW1hdGlvbk1vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6YWRqdXN0UGVyY2VudGFnZVBhc3RGb3JLZXlTcGxpbmVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnZhbHVlSW5kZXhBbmRQZXJjZW50YWdlUGFzdEZv
ckRpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNhbGN1
bGF0ZVRvdGFsRGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Y2FjdWxhdGVWYWx1ZUluZGV4
Rm9yS2V5VGltZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNW
YWxpZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojpj
YWxjdWxhdGVWYWx1ZUluZGV4QW5kUGVyY2VudGFnZVBhc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQW5pbWF0aW9uRWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uQmFzZVZhbHVlRnJvbUVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6YXBwbHlBbmltYXRlZFZh
bHVlVG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6Omhh
bmRsZVRpbWVyRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6
dXBkYXRlQW5pbWF0ZWRWYWx1ZUZvckVsYXBzZWRTZWNvbmRzKToKKyAgICAgICAgKiBrc3ZnMi9z
dmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXJzZXJV
dGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seVBhcnNlcjo6cGFyc2VQb2lu
dHMpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaDoKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHU2V0RWxlbWVudC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1Nl
dEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NldEVsZW1lbnQ6OnVwZGF0ZUFuaW1h
dGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2V0RWxlbWVudDo6Y2FsY3VsYXRlRnJv
bUFuZFRvVmFsdWVzKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtLmNwcDoKKyAg
ICAgICAgKFNWR1RyYW5zZm9ybTo6dHlwZSk6CisgICAgICAgIChTVkdUcmFuc2Zvcm06OnRyYW5z
bGF0ZSk6CisgICAgICAgIChTVkdUcmFuc2Zvcm06OnNjYWxlKToKKyAgICAgICAgKFNWR1RyYW5z
Zm9ybTo6c2V0U2tld1gpOgorICAgICAgICAoU1ZHVHJhbnNmb3JtOjpzZXRTa2V3WSk6CisgICAg
ICAgICoga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybS5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBrc3ZnMi9z
dmcvU1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RyYW5zZm9ybURpc3RhbmNlOjpTVkdUcmFuc2Zvcm1EaXN0YW5jZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6c2NhbGVkRGlzdGFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVHJhbnNmb3JtRGlzdGFuY2U6OmFkZFNWR1RyYW5zZm9ybXMpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVHJhbnNmb3JtRGlzdGFuY2U6OmFkZFNWR1RyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6YWRkVG9TVkdUcmFuc2Zvcm0pOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtRGlzdGFuY2U6OmlzWmVybyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6ZGlzdGFuY2UpOgorICAgICAgICAqIGtzdmcy
L3N2Zy9TVkdUcmFuc2Zvcm1EaXN0YW5jZS5oOiBBZGRlZC4KKyAgICAgICAgKiBrc3ZnMi9zdmcv
U1ZHVHJhbnNmb3JtTGlzdC5jcHA6CisgICAgICAgIChTVkdUcmFuc2Zvcm1MaXN0Ojpjb25jYXRl
bmF0ZUZvclR5cGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0Lmg6Cisg
ICAgICAgICogbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlQ29sb3ItYnkuc3ZnOiBBZGRl
ZC4KKyAgICAgICAgKiBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVDb2xvci1mcm9tLWJ5
LnN2ZzogQWRkZWQuCisgICAgICAgICogbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlQ29s
b3ItcmVwZWF0LWluZGVmaW5pdGUuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBtYW51YWwtdGVzdHMv
YW5pbWF0aW9uL2FuaW1hdGVDb2xvci10by1mcm9tLnN2ZzogQWRkZWQuCisgICAgICAgICogbWFu
dWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlQ29sb3ItdG8uc3ZnOiBBZGRlZC4KKyAgICAgICAg
KiBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVDb2xvci12YWx1ZXMtc2ltcGxlLnN2Zzog
QWRkZWQuCisgICAgICAgICogbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlTW90aW9uLXRv
LnN2ZzogQWRkZWQuCisgICAgICAgICogbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlVHJh
bnNmb3JtLWtleVRpbWVzLnN2ZzogQWRkZWQuCisgICAgICAgICogbWFudWFsLXRlc3RzL2FuaW1h
dGlvbi9hbmltYXRlVHJhbnNmb3JtLXJlcGVhdC1vbmNlLnN2ZzogQWRkZWQuCisKIDIwMDctMDEt
MjYgIE1pdHogUGV0dGVsICA8bWl0ekB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluLgpJbmRleDogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkxMzcp
CisrKyBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTE3OTUsNiArMTc5NSwxMCBAQAogCQlBODMzQzgwQzBBMkNGMjU2MDBENTc2NjQgLyogWE1MTmFt
ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgz
M0M4MEEwQTJDRjI1NjAwRDU3NjY0IC8qIFhNTE5hbWVzLmNwcCAqLzsgfTsKIAkJQTgzM0M4MEQw
QTJDRjI1NjAwRDU3NjY0IC8qIFhNTE5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBODMzQzgwQjBBMkNGMjU2MDBENTc2NjQgLyogWE1MTmFtZXMu
aCAqLzsgfTsKIAkJQTgzM0M4NTIwQTJDRjUyODAwRDU3NjY0IC8qIFNWR0VsZW1lbnRGYWN0b3J5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjU4
MUU2MDlEMTUwOEQwMDBFNjFENyAvKiBTVkdFbGVtZW50RmFjdG9yeS5jcHAgKi87IH07CisJCUE4
NDk0MkQ5MEI2NEE5Q0EwMDY5RjAwRiAvKiBDb2xvckRpc3RhbmNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODQ5NDJENzBCNjRBOUNBMDA2OUYwMEYg
LyogQ29sb3JEaXN0YW5jZS5oICovOyB9OworCQlBODQ5NDJEQTBCNjRBOUNBMDA2OUYwMEYgLyog
Q29sb3JEaXN0YW5jZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBODQ5NDJEODBCNjRBOUNBMDA2OUYwMEYgLyogQ29sb3JEaXN0YW5jZS5jcHAgKi87
IH07CisJCUE4NDk0N0FEMEI2N0Y0QTEwMDY5RjAwRiAvKiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg0OTQ3QUIw
QjY3RjRBMTAwNjlGMDBGIC8qIFNWR1RyYW5zZm9ybURpc3RhbmNlLmggKi87IH07CisJCUE4NDk0
N0FFMEI2N0Y0QTEwMDY5RjAwRiAvKiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODQ5NDdBQzBCNjdGNEExMDA2
OUYwMEYgLyogU1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwICovOyB9OwogCQlBODY2MjlDRjA5REEy
QjQ3MDA5NjMzQTUgLyogSlNVSUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBODY2MjlDOTA5REEyQjQ3MDA5NjMzQTUgLyogSlNVSUV2ZW50Lmgg
Ki87IH07CiAJCUE4NjYyOUQwMDlEQTJCNDgwMDk2MzNBNSAvKiBKU1VJRXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg2NjI5Q0EwOURBMkI0
NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5jcHAgKi87IH07CiAJCUE4NjYyOUQxMDlEQTJCNDgwMDk2
MzNBNSAvKiBKU01vdXNlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4NjYyOUNCMDlEQTJCNDcwMDk2MzNBNSAvKiBKU01vdXNlRXZlbnQuaCAq
LzsgfTsKQEAgLTQ4MTQsNiArNDgxOCwxMCBAQAogCQlBODMzQzdGNjBBMkNGMUQ4MDBENTc2NjQg
LyogeG1sYXR0cnMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IHhtbGF0dHJzLmluOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODMzQzgwQTBBMkNGMjU2MDBENTc2NjQgLyogWE1M
TmFtZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTE5hbWVz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgzM0M4MEIwQTJDRjI1NjAwRDU3
NjY0IC8qIFhNTE5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxO
YW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBODQ5NDJENzBCNjRBOUNBMDA2
OUYwMEYgLyogQ29sb3JEaXN0YW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb2xvckRpc3RhbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4NDk0MkQ4
MEI2NEE5Q0EwMDY5RjAwRiAvKiBDb2xvckRpc3RhbmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENvbG9yRGlzdGFuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBODQ5NDdBQjBCNjdGNEExMDA2OUYwMEYgLyogU1ZHVHJhbnNmb3JtRGlzdGFu
Y2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVHJhbnNmb3JtRGlzdGFu
Y2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTg0OTQ3QUMwQjY3RjRBMTAwNjlG
MDBGIC8qIFNWR1RyYW5zZm9ybURpc3RhbmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNWR1RyYW5zZm9ybURpc3RhbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTg1RDdBMkYwODc5RUJBOTAwNkE5MTcyIC8qIFF1YXJ0ekNvcmUuZnJhbWV3
b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3Jh
cHBlci5mcmFtZXdvcms7IG5hbWUgPSBRdWFydHpDb3JlLmZyYW1ld29yazsgcGF0aCA9IC9TeXN0
ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1F1YXJ0ekNvcmUuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0g
IjxhYnNvbHV0ZT4iOyB9OwogCQlBODY2MjlDOTA5REEyQjQ3MDA5NjMzQTUgLyogSlNVSUV2ZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VJRXZlbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg2NjI5Q0EwOURBMkI0NzAwOTYzM0E1IC8qIEpTVUlF
dmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNVSUV2ZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgxODAsNiArODE4OCw4IEBACiAJ
CUE4QzBGN0ZDMDg5NzAxRjMwMEJBNTExNCAvKiBzdmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUE4NDk0MkQ4MEI2NEE5Q0EwMDY5RjAwRiAvKiBDb2xv
ckRpc3RhbmNlLmNwcCAqLywKKwkJCQlBODQ5NDJENzBCNjRBOUNBMDA2OUYwMEYgLyogQ29sb3JE
aXN0YW5jZS5oICovLAogCQkJCUIyRERGMDY2MEI0ODJBMDMwMDY0QTRCMSAvKiBHcmFkaWVudEF0
dHJpYnV0ZXMuaCAqLywKIAkJCQlCMjVBRTU1RDBCNDlENjYzMDA3NEM3MjYgLyogTGluZWFyR3Jh
ZGllbnRBdHRyaWJ1dGVzLmggKi8sCiAJCQkJQjJEREYwNjQwQjQ4MjlGQTAwNjRBNEIxIC8qIFBh
dHRlcm5BdHRyaWJ1dGVzLmggKi8sCkBAIC04NTIzLDYgKzg1MzMsOCBAQAogCQkJCUE4QzBGOERE
MDg5NzAxRjQwMEJBNTExNCAvKiBTVkdUcmFuc2Zvcm1hYmxlLmNwcCAqLywKIAkJCQlBOEMwRjhE
RTA4OTcwMUY0MDBCQTUxMTQgLyogU1ZHVHJhbnNmb3JtYWJsZS5oICovLAogCQkJCUIyQ0I0MTVC
MEFCNzU5MDQwMDREOUM0NSAvKiBTVkdUcmFuc2Zvcm1hYmxlLmlkbCAqLywKKwkJCQlBODQ5NDdB
QzBCNjdGNEExMDA2OUYwMEYgLyogU1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwICovLAorCQkJCUE4
NDk0N0FCMEI2N0Y0QTEwMDY5RjAwRiAvKiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5oICovLAogCQkJ
CUE4QzBGOEUxMDg5NzAxRjQwMEJBNTExNCAvKiBTVkdUcmFuc2Zvcm1MaXN0LmNwcCAqLywKIAkJ
CQlBOEMwRjhFMjA4OTcwMUY0MDBCQTUxMTQgLyogU1ZHVHJhbnNmb3JtTGlzdC5oICovLAogCQkJ
CUIyQ0I0MTVDMEFCNzU5MDQwMDREOUM0NSAvKiBTVkdUcmFuc2Zvcm1MaXN0LmlkbCAqLywKQEAg
LTExMDUwLDcgKzExMDYyLDkgQEAKIAkJCQlCMjQwNTU2NjBCNUJFNjQwMDAyQTI4QzAgLyogRE9N
U1ZHRWxlbWVudEluc3RhbmNlTGlzdEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTJB
NjgyNDBCNUJFREU3MDAwMkE0ODAgLyogUHJvZ3Jlc3NUcmFja2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBODBDRUJBQzBCNjBGQzQ5MDA3NjM3QzEgLyogU1ZHTVBhdGhFbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBODQ5NDJEOTBCNjRBOUNBMDA2OUYwMEYgLyogQ29sb3JEaXN0YW5jZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTFFNkVFQTgwQjYyOERCMzAwNUYyRjcwIC8qIEpTSFRNTFNl
bGVjdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUE4NDk0N0FEMEI2N0Y0QTEwMDY5RjAw
RiAvKiBTVkdUcmFuc2Zvcm1EaXN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xMjM5Niw5ICsx
MjQxMCwxMSBAQAogCQkJCUE3ODQ5NDFCMEI1RkU1MDcwMDFFMjM3QSAvKiBDbGlwYm9hcmQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTM0RkU5RTUwQjVDQTUzOTAwM0U0QTczIC8qIEZpbGVDaG9v
c2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MENFQkFEMEI2MEZDNDkwMDc2MzdDMSAvKiBT
VkdNUGF0aEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTg0OTQyREEwQjY0QTlDQTAw
NjlGMDBGIC8qIENvbG9yRGlzdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFFNkVFQTQw
QjYyOERBODAwNUYyRjcwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTI5MjY0NzcwQjYxRkM3MjAwQjQxRDM0IC8qIEpTRG9jdW1lbnRDdXN0b20uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkMxN0Y5NjYwQjY0RUJCODAwNEE2NUNCIC8qIEpTSFRNTFNlbGVj
dEVsZW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTg0OTQ3QUUwQjY3RjRBMTAw
NjlGMDBGIC8qIFNWR1RyYW5zZm9ybURpc3RhbmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDog
a3N2ZzIvbWlzYy9TVkdUaW1lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvbWlzYy9TVkdUaW1l
ci5jcHAJKHJldmlzaW9uIDE5MTM3KQorKysga3N2ZzIvbWlzYy9TVkdUaW1lci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgzLDgxICs4MywzNiBAQCBTVkdUaW1lcjo6VGFyZ2V0QW5pbWF0aW9uTWFw
IFNWR1RpbWVyOjphCiAgICAgcmV0dXJuIHRhcmdldE1hcDsKIH0KIAotLy8gRklYTUU6IEV2ZW50
dWFsbHkgdGhpcyBsb2dpYyB3aWxsIG1vdmUgaW50byBhbiBBbmltYXRpb25Db21wb3NpdG9yIGNs
YXNzCi0vLyBGSVhNRTogSSBhbHNvIHRoaW5rIHRoaXMgYWxzbyB2aW9sYXRlcyB0aGUgc3BlYy4g
IFdlIHNob3VsZCBwcm9iYWJseSBqdXN0IGNvcHkgdGhlIGJhc2VWYWx1ZSBhbmQgbm90IGNvbnNv
bGlkYXRlCi1zdGF0aWMgUGFzc1JlZlB0cjxTVkdUcmFuc2Zvcm1MaXN0PiBiYXNlVmFsdWVUcmFu
c2Zvcm1MaXN0KFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQpCi17Ci0gICAgQVNTRVJUKHRhcmdl
dEVsZW1lbnQtPmlzU3R5bGVkVHJhbnNmb3JtYWJsZSgpKTsKLSAgICBTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudCogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQqPih0YXJnZXRFbGVtZW50KTsKLSAgICBSZWZQdHI8U1ZHVHJhbnNmb3JtTGlz
dD4gdGFyZ2V0VHJhbnNmb3JtcyA9IG5ldyBTVkdUcmFuc2Zvcm1MaXN0KCk7Ci0gICAgU1ZHVHJh
bnNmb3JtTGlzdCogdHJhbnNmb3JtTGlzdCA9IHRyYW5zZm9ybS0+dHJhbnNmb3JtQmFzZVZhbHVl
KCk7Ci0gICAgaWYgKHRyYW5zZm9ybUxpc3QpIHsKLSAgICAgICAgU1ZHVHJhbnNmb3JtIGluaXRp
YWxUcmFuc2Zvcm0gPSB0cmFuc2Zvcm1MaXN0LT5jb25jYXRlbmF0ZSgpOwotICAgICAgICBpZiAo
aW5pdGlhbFRyYW5zZm9ybS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUg
ZWM7Ci0gICAgICAgICAgICB0YXJnZXRUcmFuc2Zvcm1zLT5hcHBlbmRJdGVtKGluaXRpYWxUcmFu
c2Zvcm0sIGVjKTsKLSAgICAgICAgICAgIHJldHVybiB0YXJnZXRUcmFuc2Zvcm1zLnJlbGVhc2Uo
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdGFyZ2V0VHJhbnNmb3JtczsKLX0KLQog
Ly8gRklYTUU6IFRoaXMgZnVudGlvbiB3aWxsIGV2ZW50dWFsbHkgYmVjb21lIHBhcnQgb2YgdGhl
IEFuaW1hdGlvbkNvbXBvc2l0b3IKIHZvaWQgU1ZHVGltZXI6OmFwcGx5QW5pbWF0aW9ucyhkb3Vi
bGUgZWxhcHNlZFNlY29uZHMsIGNvbnN0IFNWR1RpbWVyOjpUYXJnZXRBbmltYXRpb25NYXAmIHRh
cmdldE1hcCkKIHsgICAgCiAgICAgVGFyZ2V0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciB0
YXJnZXRJdGVyYXRvciA9IHRhcmdldE1hcC5iZWdpbigpOwogICAgIFRhcmdldEFuaW1hdGlvbk1h
cDo6Y29uc3RfaXRlcmF0b3IgdGVuZCA9IHRhcmdldE1hcC5lbmQoKTsKICAgICBmb3IgKDsgdGFy
Z2V0SXRlcmF0b3IgIT0gdGVuZDsgKyt0YXJnZXRJdGVyYXRvcikgewotICAgICAgICBIYXNoTWFw
PFN0cmluZywgQ29sb3I+IGF0dHJpYnV0ZVRvQ29sb3JNYXA7IC8vIHNwZWNpYWwgPGFuaW1hdGVD
b2xvcj4gY2FzZQotICAgICAgICBSZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4gdGFyZ2V0VHJhbnNm
b3JtczsgLy8gc3BlY2lhbCA8YW5pbWF0ZVRyYW5zZm9ybT4gY2FzZQotICAgICAgICAKICAgICAg
ICAgLy8gRklYTUU6IFRoaXMgaXMgc3RpbGwgbm90IDEwMCUgY29ycmVjdC4gIENvcnJlY3Qgd291
bGQgYmU6CiAgICAgICAgIC8vIDEuIFdhbGsgYmFja3dhcmRzIHRocm91Z2ggdGhlIHByaW9yaXR5
IGxpc3QgdW50aWwgYSByZXBsYWNlICghaXNBZGRpdGl2ZSgpKSBpcyBmb3VuZAorICAgICAgICAv
LyAtLSBUaGlzIG9wdGltaXphdGlvbiBpcyBub3QgcG9zc2libGUgd2l0aG91dCBjYXJlZnVsIGNv
bnNpZGVyYXRpb24gZm9yIGRlcGVuZGVudCB2YWx1ZXMgKHN1Y2ggYXMgY3ggYW5kIGZ4IGluIFNW
R1JhZGlhbEdyYWRpZW50KQogICAgICAgICAvLyAyLiBTZXQgdGhlIGluaXRpYWwgdmFsdWUgKG9y
IGxhc3QgcmVwbGFjZSkgYXMgdGhlIG5ldyBhbmltVmFsCiAgICAgICAgIC8vIDMuIENhbGwgZWFj
aCBlbmFibGVkIGFuaW1hdGlvbiBpbiB0dXJuLCB0byBoYXZlIGl0IGFwcGx5IGl0cyBjaGFuZ2Vz
CiAgICAgICAgIC8vIDQuIEFmdGVyIGJ1aWxkaW5nIGEgbmV3IGFuaW1WYWwsIHNldCBpdCBvbiB0
aGUgZWxlbWVudC4KICAgICAgICAgCisgICAgICAgIC8vIEN1cnJlbmx5IHdlIHVzZSB0aGUgYWN0
dWFsIGFuaW1WYWwgb24gdGhlIGVsZW1lbnQgYXMgInRlbXBvcmFyeSBzdG9yYWdlIgorICAgICAg
ICAvLyBhbmQgYWJzdHJhY3QgdGhlIGdldHRpbmcvc2V0dGluZyBvZiB0aGUgYXR0cmlidXRlcyBp
bnRvIHRoZSBTVkdBbmltYXRlKiBjbGFzc2VzCisgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBj
b3VudCA9IHRhcmdldEl0ZXJhdG9yLT5zZWNvbmQuc2l6ZSgpOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICAgICAgU1ZHQW5pbWF0aW9uRWxl
bWVudCogYW5pbWF0aW9uID0gdGFyZ2V0SXRlcmF0b3ItPnNlY29uZFtpXTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKCFhbmltYXRpb24tPmhhc1ZhbGlkVGFyZ2V0KCkpCisgICAgICAg
ICAgICBpZiAoIWFuaW1hdGlvbi0+aXNWYWxpZEFuaW1hdGlvbigpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWFuaW1hdGlvbi0+dXBk
YXRlRm9yRWxhcHNlZFNlY29uZHMoZWxhcHNlZFNlY29uZHMpKQorICAgICAgICAgICAgaWYgKCFh
bmltYXRpb24tPnVwZGF0ZUFuaW1hdGlvbkJhc2VWYWx1ZUZyb21FbGVtZW50KCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghdGFyZ2V0
VHJhbnNmb3JtcyAmJiAoYW5pbWF0aW9uLT5oYXNUYWdOYW1lKFNWR05hbWVzOjphbmltYXRlVHJh
bnNmb3JtVGFnKSB8fCBhbmltYXRpb24tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVNb3Rp
b25UYWcpKSkKLSAgICAgICAgICAgICAgICB0YXJnZXRUcmFuc2Zvcm1zID0gYmFzZVZhbHVlVHJh
bnNmb3JtTGlzdChhbmltYXRpb24tPnRhcmdldEVsZW1lbnQoKSk7CisgICAgICAgICAgICBpZiAo
IWFuaW1hdGlvbi0+dXBkYXRlQW5pbWF0ZWRWYWx1ZUZvckVsYXBzZWRTZWNvbmRzKGVsYXBzZWRT
ZWNvbmRzKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKGFuaW1hdGlvbi0+aGFzVGFnTmFtZShTVkdOYW1lczo6YW5pbWF0ZVRyYW5zZm9y
bVRhZykpCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZVRyYW5zZm9ybUVs
ZW1lbnQqPihhbmltYXRpb24pLT5hcHBseUFuaW1hdGlvblRvVmFsdWUodGFyZ2V0VHJhbnNmb3Jt
cy5nZXQoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChhbmltYXRpb24tPmhhc1RhZ05hbWUoU1ZH
TmFtZXM6OmFuaW1hdGVNb3Rpb25UYWcpKQotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50Kj4oYW5pbWF0aW9uKS0+YXBwbHlBbmltYXRpb25Ub1ZhbHVl
KHRhcmdldFRyYW5zZm9ybXMuZ2V0KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAoYW5pbWF0aW9u
LT5oYXNUYWdOYW1lKFNWR05hbWVzOjphbmltYXRlQ29sb3JUYWcpKSB7Ci0gICAgICAgICAgICAg
ICAgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudCogYW5pbUNvbG9yID0gc3RhdGljX2Nhc3Q8U1ZHQW5p
bWF0ZUNvbG9yRWxlbWVudCo+KGFuaW1hdGlvbik7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5h
bWUgPSBhbmltQ29sb3ItPmF0dHJpYnV0ZU5hbWUoKTsKLSAgICAgICAgICAgICAgICBDb2xvciBj
dXJyZW50Q29sb3IgPSBhdHRyaWJ1dGVUb0NvbG9yTWFwLmNvbnRhaW5zKG5hbWUpID8gYXR0cmli
dXRlVG9Db2xvck1hcC5nZXQobmFtZSkgOiBhbmltQ29sb3ItPmluaXRpYWxDb2xvcigpOwotICAg
ICAgICAgICAgICAgIGFuaW1Db2xvci0+YXBwbHlBbmltYXRpb25Ub1ZhbHVlKGN1cnJlbnRDb2xv
cik7Ci0gICAgICAgICAgICAgICAgYXR0cmlidXRlVG9Db2xvck1hcC5zZXQobmFtZSwgY3VycmVu
dENvbG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8g
QXBwbHkgYW55IHRyYW5zZm9ybSBjaGFuZ2VzIChhbmltYXRlVHJhbnNmb3JtICYgYW5pbWF0ZU1v
dGlvbikKLSAgICAgICAgaWYgKHRhcmdldFRyYW5zZm9ybXMpIHsKLSAgICAgICAgICAgIFNWR0Vs
ZW1lbnQqIGtleSA9IHRhcmdldEl0ZXJhdG9yLT5maXJzdDsKLSAgICAgICAgICAgIGlmIChrZXkg
JiYga2V5LT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSkgewotICAgICAgICAgICAgICAgIFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KGtleSk7Ci0gICAgICAgICAgICAgICAgdHJhbnNmb3Jt
LT5zZXRUcmFuc2Zvcm0odGFyZ2V0VHJhbnNmb3Jtcy5nZXQoKSk7Ci0gICAgICAgICAgICAgICAg
dHJhbnNmb3JtLT51cGRhdGVMb2NhbFRyYW5zZm9ybSh0cmFuc2Zvcm0tPnRyYW5zZm9ybSgpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gQXBwbHkgYW55
IGNvbG9yIGNoYW5nZXMgKGFuaW1hdGVDb2xvcikKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENv
bG9yPjo6aXRlcmF0b3IgY29sb3JJdGVyYXRvckVuZCA9IGF0dHJpYnV0ZVRvQ29sb3JNYXAuZW5k
KCk7Ci0gICAgICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIENvbG9yPjo6aXRlcmF0b3IgY29sb3JJ
dGVyYXRvciA9IGF0dHJpYnV0ZVRvQ29sb3JNYXAuYmVnaW4oKTsgY29sb3JJdGVyYXRvciAhPSBj
b2xvckl0ZXJhdG9yRW5kOyArK2NvbG9ySXRlcmF0b3IpIHsKLSAgICAgICAgICAgIGlmIChjb2xv
ckl0ZXJhdG9yLT5zZWNvbmQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIFNWR0FuaW1hdGlv
bkVsZW1lbnQ6OnNldFRhcmdldEF0dHJpYnV0ZSh0YXJnZXRJdGVyYXRvci0+Zmlyc3QsIGNvbG9y
SXRlcmF0b3ItPmZpcnN0LCBjb2xvckl0ZXJhdG9yLT5zZWNvbmQubmFtZSgpKTsKKyAgICAgICAg
ICAgIGFuaW1hdGlvbi0+YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KCk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCkluZGV4OiBrc3ZnMi9zdmcvQ29sb3JEaXN0YW5jZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga3N2ZzIvc3ZnL0NvbG9yRGlzdGFuY2UuY3BwCShyZXZpc2lvbiAwKQorKysga3N2ZzIv
c3ZnL0NvbG9yRGlzdGFuY2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkxIEBACisvKgor
IENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorIAorIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdAorIAorIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCisgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkg
VGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZmRlZiBTVkdfU1VQUE9SVAorI2luY2x1ZGUg
IkNvbG9yRGlzdGFuY2UuaCIKKyNpbmNsdWRlICJDb2xvci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0NvbG9yRGlzdGFuY2U6OkNvbG9yRGlzdGFuY2UoKQorICAgIDogbV9yZWREaWZmKDAp
CisgICAgLCBtX2dyZWVuRGlmZigwKQorICAgICwgbV9ibHVlRGlmZigwKQoreworfQorCitDb2xv
ckRpc3RhbmNlOjpDb2xvckRpc3RhbmNlKGNvbnN0IENvbG9yJiBmcm9tQ29sb3IsIGNvbnN0IENv
bG9yJiB0b0NvbG9yKQorICAgIDogbV9yZWREaWZmKHRvQ29sb3IucmVkKCkgLSBmcm9tQ29sb3Iu
cmVkKCkpCisgICAgLCBtX2dyZWVuRGlmZih0b0NvbG9yLmdyZWVuKCkgLSBmcm9tQ29sb3IuZ3Jl
ZW4oKSkKKyAgICAsIG1fYmx1ZURpZmYodG9Db2xvci5ibHVlKCkgLSBmcm9tQ29sb3IuYmx1ZSgp
KQoreworfQorCitDb2xvckRpc3RhbmNlOjpDb2xvckRpc3RhbmNlKGludCByZWREaWZmLCBpbnQg
Z3JlZW5EaWZmLCBpbnQgYmx1ZURpZmYpCisgICAgOiBtX3JlZERpZmYocmVkRGlmZikKKyAgICAs
IG1fZ3JlZW5EaWZmKGdyZWVuRGlmZikKKyAgICAsIG1fYmx1ZURpZmYoYmx1ZURpZmYpCit7Cit9
CisKK3N0YXRpYyBpbmxpbmUgaW50IGNsYW1wQ29sb3JWYWx1ZShpbnQgdikKK3sKKyAgICBpZiAo
diA+IDI1NSkKKyAgICAgICAgdiA9IDI1NTsKKyAgICBlbHNlIGlmICh2IDwgMCkKKyAgICAgICAg
diA9IDA7CisgICAgcmV0dXJuIHY7Cit9CisKK0NvbG9yRGlzdGFuY2UgQ29sb3JEaXN0YW5jZTo6
c2NhbGVkRGlzdGFuY2UoZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Cit7CisgICAgcmV0dXJuIENv
bG9yRGlzdGFuY2Uoc2NhbGVGYWN0b3IgKiBtX3JlZERpZmYsIHNjYWxlRmFjdG9yICogbV9ncmVl
bkRpZmYsIHNjYWxlRmFjdG9yICogbV9ibHVlRGlmZik7Cit9CisKK0NvbG9yIENvbG9yRGlzdGFu
Y2U6OmFkZENvbG9yc0FuZENsYW1wKGNvbnN0IENvbG9yJiBmaXJzdCwgY29uc3QgQ29sb3ImIHNl
Y29uZCkKK3sKKyAgICByZXR1cm4gQ29sb3IoY2xhbXBDb2xvclZhbHVlKGZpcnN0LnJlZCgpICsg
c2Vjb25kLnJlZCgpKSwKKyAgICAgICAgICAgICAgICAgY2xhbXBDb2xvclZhbHVlKGZpcnN0Lmdy
ZWVuKCkgKyBzZWNvbmQuZ3JlZW4oKSksCisgICAgICAgICAgICAgICAgIGNsYW1wQ29sb3JWYWx1
ZShmaXJzdC5ibHVlKCkgKyBzZWNvbmQuYmx1ZSgpKSk7Cit9CisKK0NvbG9yIENvbG9yRGlzdGFu
Y2U6OmFkZFRvQ29sb3JBbmRDbGFtcChjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0Cit7CisgICAg
cmV0dXJuIENvbG9yKGNsYW1wQ29sb3JWYWx1ZShjb2xvci5yZWQoKSArIG1fcmVkRGlmZiksCisg
ICAgICAgICAgICAgICAgIGNsYW1wQ29sb3JWYWx1ZShjb2xvci5ncmVlbigpICsgbV9ncmVlbkRp
ZmYpLAorICAgICAgICAgICAgICAgICBjbGFtcENvbG9yVmFsdWUoY29sb3IuYmx1ZSgpICsgbV9i
bHVlRGlmZikpOworfQorCitib29sIENvbG9yRGlzdGFuY2U6OmlzWmVybygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIChtX3JlZERpZmYgPT0gMCAmJiBtX2JsdWVEaWZmID09IDAgJiYgbV9ncmVlbkRp
ZmYgPT0gMCk7Cit9CisKK2Zsb2F0IENvbG9yRGlzdGFuY2U6OmRpc3RhbmNlKCkgY29uc3QKK3sK
KyAgICAvLyBUaGlzIGlzIGp1c3QgYSBzaW1wbGUgZGlzdGFuY2UgY2FsY3VsYXRpb24sIG5vdCBy
ZXNwZWN0aW5nIGNvbG9yIHNwYWNlcworICAgIHJldHVybiBzcXJ0ZihtX3JlZERpZmYgKiBtX3Jl
ZERpZmYgKyBtX2JsdWVEaWZmICogbV9ibHVlRGlmZiArIG1fZ3JlZW5EaWZmICogbV9ncmVlbkRp
ZmYpOworfQorCit9CisKKyNlbmRpZgpJbmRleDoga3N2ZzIvc3ZnL0NvbG9yRGlzdGFuY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvQ29sb3JEaXN0YW5jZS5oCShyZXZpc2lvbiAwKQorKysg
a3N2ZzIvc3ZnL0NvbG9yRGlzdGFuY2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAor
LyoKKyBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAK
KyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QKKyAKKyBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KKyAqLworCisjaWZuZGVmIENvbG9yRGlzdGFuY2VfaAorI2RlZmluZSBDb2xvckRpc3RhbmNl
X2gKKyNpZmRlZiBTVkdfU1VQUE9SVAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAg
Y2xhc3MgQ29sb3I7CisKKyAgICBjbGFzcyBDb2xvckRpc3RhbmNlIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIENvbG9yRGlzdGFuY2UoKTsKKyAgICAgICAgQ29sb3JEaXN0YW5jZShjb25zdCBDb2xv
ciYgZnJvbUNvbG9yLCBjb25zdCBDb2xvciYgdG9Db2xvcik7CisgICAgICAgIENvbG9yRGlzdGFu
Y2UoaW50IHJlZERpZmYsIGludCBibHVlRGlmZiwgaW50IGdyZWVuRGlmZik7CisgICAgICAgIAor
ICAgICAgICBDb2xvckRpc3RhbmNlIHNjYWxlZERpc3RhbmNlKGZsb2F0IHNjYWxlRmFjdG9yKSBj
b25zdDsKKyAgICAgICAgQ29sb3IgYWRkVG9Db2xvckFuZENsYW1wKGNvbnN0IENvbG9yJikgY29u
c3Q7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgQ29sb3IgYWRkQ29sb3JzQW5kQ2xhbXAoY29u
c3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOworICAgICAgICAKKyAgICAgICAgYm9vbCBpc1plcm8o
KSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIGZsb2F0IGRpc3RhbmNlKCkgY29uc3Q7CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGludCBtX3JlZERpZmY7CisgICAgICAgIGludCBt
X2dyZWVuRGlmZjsKKyAgICAgICAgaW50IG1fYmx1ZURpZmY7CisgICAgfTsKK30KKworI2VuZGlm
IC8vIFNWR19TVVBQT1JUCisjZW5kaWYgLy8gQ29sb3JEaXN0YW5jZV9oCkluZGV4OiBrc3ZnMi9z
dmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NW
R0FuaW1hdGVDb2xvckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxOTEzNykKKysrIGtzdmcyL3N2Zy9T
VkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTIgKzM3LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpTVkdBbmlt
YXRlQ29sb3JFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBk
b2MpCiAgICAgOiBTVkdBbmltYXRpb25FbGVtZW50KHRhZ05hbWUsIGRvYykKLSAgICAsIG1fdG9D
b2xvcihuZXcgU1ZHQ29sb3IoKSkKLSAgICAsIG1fZnJvbUNvbG9yKG5ldyBTVkdDb2xvcigpKQot
ICAgICwgbV9jdXJyZW50SXRlbSgtMSkKLSAgICAsIG1fcmVkRGlmZigwKQotICAgICwgbV9ncmVl
bkRpZmYoMCkKLSAgICAsIG1fYmx1ZURpZmYoMCkKIHsKIH0KIApAQCAtNTAsMTc3ICs0NCw2MCBA
QCBTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojp+U1ZHQW5pbWF0ZUNvbG9yCiB7CiB9CiAKLXZvaWQg
Y2FsY3VsYXRlQ29sb3JEaWZmZXJlbmNlKGNvbnN0IENvbG9yJiBmaXJzdCwgY29uc3QgQ29sb3Im
IHNlY29uZCwgaW50JiByZWREaWZmLCBpbnQmIGdyZWVuRGlmZiwgaW50JiBibHVlRGlmZikKK2Jv
b2wgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6dXBkYXRlQW5pbWF0aW9uQmFzZVZhbHVlRnJvbUVs
ZW1lbnQoKQogewotICAgIHJlZERpZmYgPSBmaXJzdC5yZWQoKSAtIHNlY29uZC5yZWQoKTsKLSAg
ICBncmVlbkRpZmYgPSBmaXJzdC5ncmVlbigpIC0gc2Vjb25kLmdyZWVuKCk7Ci0gICAgYmx1ZURp
ZmYgPSBmaXJzdC5ibHVlKCkgLSBzZWNvbmQuYmx1ZSgpOwotfQotCi12b2lkIFNWR0FuaW1hdGVD
b2xvckVsZW1lbnQ6OnN0b3JlSW5pdGlhbFZhbHVlKCkKLXsKLSAgICBtX2luaXRpYWxDb2xvciA9
IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmluZyh0YXJnZXRBdHRyaWJ1dGUoKSk7Ci19
Ci0KLXZvaWQgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6cmVzZXRWYWx1ZXMoKQotewotICAgIG1f
Y3VycmVudEl0ZW0gPSAtMTsKLSAgICBtX3JlZERpZmYgPSAwOwotICAgIG1fZ3JlZW5EaWZmID0g
MDsKLSAgICBtX2JsdWVEaWZmID0gMDsKLX0KLQotYm9vbCBTVkdBbmltYXRlQ29sb3JFbGVtZW50
Ojp1cGRhdGVDdXJyZW50VmFsdWUoZG91YmxlIHRpbWVQZXJjZW50YWdlKQotewotICAgIGludCBy
ID0gMCwgZyA9IDAsIGIgPSAwOwotICAgIGlmICgobV9yZWREaWZmICE9IDAgfHwgbV9ncmVlbkRp
ZmYgIT0gMCB8fCBtX2JsdWVEaWZmICE9IDApICYmICFtX3ZhbHVlcykKLSAgICAgICAgY2FsY3Vs
YXRlQ29sb3IodGltZVBlcmNlbnRhZ2UsIHIsIGcsIGIpOwotICAgIGVsc2UgaWYgKG1fdmFsdWVz
KSB7Ci0gICAgICAgIGludCBpdGVtQnlQZXJjZW50YWdlID0gY2FsY3VsYXRlQ3VycmVudFZhbHVl
SXRlbSh0aW1lUGVyY2VudGFnZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaXRlbUJ5UGVyY2Vu
dGFnZSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChtX2N1cnJlbnRJdGVtICE9IGl0ZW1CeVBlcmNlbnRhZ2UpIHsgLy8gSXRlbSBjaGFuZ2Vk
Li4uCi0gICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gRXh0cmFjdCBjdXJyZW50ICdmcm9tJyAvICd0bycgdmFsdWVzCi0gICAgICAg
ICAgICBTdHJpbmcgdmFsdWUxID0gbV92YWx1ZXMtPmdldEl0ZW0oaXRlbUJ5UGVyY2VudGFnZSwg
ZWMpOwotICAgICAgICAgICAgU3RyaW5nIHZhbHVlMiA9IG1fdmFsdWVzLT5nZXRJdGVtKGl0ZW1C
eVBlcmNlbnRhZ2UgKyAxLCBlYyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIENhbGN1
bGF0ZSByL2cvYiBzaGlmdGluZyB2YWx1ZXMuLi4KLSAgICAgICAgICAgIGlmICghdmFsdWUxLmlz
RW1wdHkoKSAmJiAhdmFsdWUyLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgYXBw
bHkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAobV9yZWREaWZmICE9IDAgfHwgbV9ncmVl
bkRpZmYgIT0gMCB8fCBtX2JsdWVEaWZmICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgciA9
IG1fdG9Db2xvci0+Y29sb3IoKS5yZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IG1fdG9D
b2xvci0+Y29sb3IoKS5ncmVlbigpOwotICAgICAgICAgICAgICAgICAgICBiID0gbV90b0NvbG9y
LT5jb2xvcigpLmJsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIGFwcGx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgbV90b0NvbG9yLT5zZXRSR0JDb2xvcih2YWx1ZTIpOwotICAgICAgICAg
ICAgICAgIG1fZnJvbUNvbG9yLT5zZXRSR0JDb2xvcih2YWx1ZTEpOwotICAgICAgICAgICAgICAg
IGNhbGN1bGF0ZUNvbG9yRGlmZmVyZW5jZShtX3RvQ29sb3ItPmNvbG9yKCksIG1fZnJvbUNvbG9y
LT5jb2xvcigpLCBtX3JlZERpZmYsIG1fZ3JlZW5EaWZmLCBtX2JsdWVEaWZmKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRJdGVtID0gaXRlbUJ5UGVyY2VudGFn
ZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWFwcGx5KQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSBpZiAobV9yZWREaWZmICE9IDAgfHwgbV9ncmVlbkRpZmYgIT0gMCB8fCBtX2JsdWVEaWZmICE9
IDApIHsKLSAgICAgICAgICAgIGRvdWJsZSByZWxhdGl2ZVRpbWUgPSBjYWxjdWxhdGVSZWxhdGl2
ZVRpbWVQZXJjZW50YWdlKHRpbWVQZXJjZW50YWdlLCBtX2N1cnJlbnRJdGVtKTsKLSAgICAgICAg
ICAgIGNhbGN1bGF0ZUNvbG9yKHJlbGF0aXZlVGltZSwgciwgZywgYik7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgCi0gICAgaWYgKCFpc0Zyb3plbigpICYmIHRpbWVQZXJjZW50YWdlID09IDEuMCkg
ewotICAgICAgICByID0gbV9pbml0aWFsQ29sb3IucmVkKCk7Ci0gICAgICAgIGcgPSBtX2luaXRp
YWxDb2xvci5ncmVlbigpOwotICAgICAgICBiID0gbV9pbml0aWFsQ29sb3IuYmx1ZSgpOwotICAg
IH0KLSAgICAKLSAgICBpZiAoaXNBY2N1bXVsYXRlZCgpICYmIHJlcGVhdGlvbnMoKSAhPSAwLjAp
IHsKLSAgICAgICAgciArPSBtX2xhc3RDb2xvci5yZWQoKTsKLSAgICAgICAgZyArPSBtX2xhc3RD
b2xvci5ncmVlbigpOwotICAgICAgICBiICs9IG1fbGFzdENvbG9yLmJsdWUoKTsKLSAgICB9Ci0g
ICAgCi0gICAgbV9jdXJyZW50Q29sb3IgPSBjbGFtcENvbG9yKHIsIGcsIGIpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmhhbmRsZVN0YXJ0Q29u
ZGl0aW9uKCkKLXsKLSAgICBzdG9yZUluaXRpYWxWYWx1ZSgpOwotICAgIAotICAgIHN3aXRjaCAo
ZGV0ZWN0QW5pbWF0aW9uTW9kZSgpKSB7Ci0gICAgICAgIGNhc2UgVE9fQU5JTUFUSU9OOgotICAg
ICAgICBjYXNlIEZST01fVE9fQU5JTUFUSU9OOgotICAgICAgICB7Ci0gICAgICAgICAgICBtX3Rv
Q29sb3ItPnNldFJHQkNvbG9yKG1fdG8pOwotICAgICAgICAgICAgaWYgKCFtX2Zyb20uaXNFbXB0
eSgpKSAvLyBmcm9tLXRvIGFuaW1hdGlvbgotICAgICAgICAgICAgICAgIG1fZnJvbUNvbG9yLT5z
ZXRSR0JDb2xvcihtX2Zyb20pOwotICAgICAgICAgICAgZWxzZSAvLyB0byBhbmltYXRpb24KLSAg
ICAgICAgICAgICAgICBtX2Zyb21Db2xvci0+c2V0UkdCQ29sb3IobV9pbml0aWFsQ29sb3IubmFt
ZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY2FsY3VsYXRlQ29sb3JEaWZmZXJlbmNl
KG1fdG9Db2xvci0+Y29sb3IoKSwgbV9mcm9tQ29sb3ItPmNvbG9yKCksIG1fcmVkRGlmZiwgbV9n
cmVlbkRpZmYsIG1fYmx1ZURpZmYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBCWV9BTklNQVRJT046Ci0gICAgICAgIGNhc2UgRlJPTV9CWV9BTklNQVRJT046
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbV9mcm9tLmlzRW1wdHkoKSkgLy8gZnJvbS1i
eSBhbmltYXRpb24KLSAgICAgICAgICAgICAgICBtX2Zyb21Db2xvci0+c2V0UkdCQ29sb3IobV9m
cm9tKTsKLSAgICAgICAgICAgIGVsc2UgLy8gYnkgYW5pbWF0aW9uCi0gICAgICAgICAgICAgICAg
bV9mcm9tQ29sb3ItPnNldFJHQkNvbG9yKG1faW5pdGlhbENvbG9yLm5hbWUoKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIG1fdG9Db2xvci0+c2V0UkdCQ29sb3IoYWRkQ29sb3JzQW5kQ2xh
bXAobV9mcm9tQ29sb3ItPmNvbG9yKCksIFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmlu
ZyhtX2J5KSkubmFtZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY2FsY3VsYXRlQ29s
b3JEaWZmZXJlbmNlKG1fdG9Db2xvci0+Y29sb3IoKSwgbV9mcm9tQ29sb3ItPmNvbG9yKCksIG1f
cmVkRGlmZiwgbV9ncmVlbkRpZmYsIG1fYmx1ZURpZmYpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBWQUxVRVNfQU5JTUFUSU9OOgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8va2RFcnJvcigp
IDw8IGtfZnVuY2luZm8gPDwgIiBVbmFibGUgdG8gZGV0ZWN0IGFuaW1hdGlvbiBtb2RlISBBYm9y
dGluZyBjcmVhdGlvbiEiIDw8IGVuZGw7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgCisgICAgbV9iYXNlQ29sb3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9t
UkdCQ29sb3JTdHJpbmcodGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZSgpKTsKKyAgICBtX2Nv
bG9yRGlzdGFuY2UgPSBDb2xvckRpc3RhbmNlKCk7CisgICAgbV9mcm9tQ29sb3IgPSBDb2xvcigp
OworICAgIG1fdG9Db2xvciA9IENvbG9yKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6dXBkYXRlTGFzdFZhbHVlV2l0aEN1cnJlbnQoKQotewot
ICAgIG1fbGFzdENvbG9yID0gbV9jdXJyZW50Q29sb3I7Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0ZUNv
bG9yRWxlbWVudDo6YXBwbHlBbmltYXRpb25Ub1ZhbHVlKENvbG9yJiBjdXJyZW50Q29sb3IpCit2
b2lkIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCgp
CiB7CiAgICAgaWYgKGlzQWRkaXRpdmUoKSkKLSAgICAgICAgY3VycmVudENvbG9yID0gYWRkQ29s
b3JzQW5kQ2xhbXAoY3VycmVudENvbG9yLCBjb2xvcigpKTsKKyAgICAgICAgc2V0VGFyZ2V0QXR0
cmlidXRlQW5pbWF0ZWRWYWx1ZShDb2xvckRpc3RhbmNlOjphZGRDb2xvcnNBbmRDbGFtcChtX2Jh
c2VDb2xvciwgbV9hbmltYXRlZENvbG9yKS5uYW1lKCkpOwogICAgIGVsc2UKLSAgICAgICAgY3Vy
cmVudENvbG9yID0gY29sb3IoKTsKKyAgICAgICAgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRW
YWx1ZShtX2FuaW1hdGVkQ29sb3IubmFtZSgpKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgY2xh
bXBDb2xvclZhbHVlKGludCB2KQorYm9vbCBTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojp1cGRhdGVB
bmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUsIGZsb2F0IHRpbWVQZXJj
ZW50YWdlLCB1bnNpZ25lZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJjZW50YWdlUGFzdCkKIHsKLSAg
ICBpZiAodiA+IDI1NSkKLSAgICAgICAgdiA9IDI1NTsKLSAgICBlbHNlIGlmICh2IDwgMCkKLSAg
ICAgICAgdiA9IDA7Ci0gICAgcmV0dXJuIHY7Ci19Ci0KLUNvbG9yIFNWR0FuaW1hdGVDb2xvckVs
ZW1lbnQ6OmNsYW1wQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYikgY29uc3QKLXsKLSAgICByZXR1
cm4gQ29sb3IoY2xhbXBDb2xvclZhbHVlKHIpLCBjbGFtcENvbG9yVmFsdWUoZyksIGNsYW1wQ29s
b3JWYWx1ZShiKSk7Ci19Ci0KLUNvbG9yIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmFkZENvbG9y
c0FuZENsYW1wKGNvbnN0IENvbG9yJiBmaXJzdCwgY29uc3QgQ29sb3ImIHNlY29uZCkKLXsKLSAg
ICByZXR1cm4gQ29sb3IoY2xhbXBDb2xvclZhbHVlKGZpcnN0LnJlZCgpICsgc2Vjb25kLnJlZCgp
KSwKLSAgICAgICAgICAgICAgICAgY2xhbXBDb2xvclZhbHVlKGZpcnN0LmdyZWVuKCkgKyBzZWNv
bmQuZ3JlZW4oKSksCi0gICAgICAgICAgICAgICAgIGNsYW1wQ29sb3JWYWx1ZShmaXJzdC5ibHVl
KCkgKyBzZWNvbmQuYmx1ZSgpKSk7Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6
Y2FsY3VsYXRlQ29sb3IoZG91YmxlIHRpbWUsIGludCAmciwgaW50ICZnLCBpbnQgJmIpIGNvbnN0
Ci17Ci0gICAgciA9IGxyb3VuZChtX3JlZERpZmYgKiB0aW1lKSArIG1fZnJvbUNvbG9yLT5jb2xv
cigpLnJlZCgpOwotICAgIGcgPSBscm91bmQobV9ncmVlbkRpZmYgKiB0aW1lKSArIG1fZnJvbUNv
bG9yLT5jb2xvcigpLmdyZWVuKCk7Ci0gICAgYiA9IGxyb3VuZChtX2JsdWVEaWZmICogdGltZSkg
KyBtX2Zyb21Db2xvci0+Y29sb3IoKS5ibHVlKCk7Ci19Ci0KLUNvbG9yIFNWR0FuaW1hdGVDb2xv
ckVsZW1lbnQ6OmNvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jdXJyZW50Q29sb3I7Cisg
ICAgaWYgKGFuaW1hdGlvbk1vZGUgPT0gVE9fQU5JTUFUSU9OKQorICAgICAgICAvLyB0by1hbmlt
YXRpb25zIGhhdmUgYSBzcGVjaWFsIGVxdWF0aW9uOiB2YWx1ZSA9ICh0byAtIGJhc2UpICogKHRp
bWUvZHVyYXRpb24pICsgYmFzZQorICAgICAgICBtX2FuaW1hdGVkQ29sb3IgPSBDb2xvckRpc3Rh
bmNlKG1fYmFzZUNvbG9yLCBtX3RvQ29sb3IpLnNjYWxlZERpc3RhbmNlKHRpbWVQZXJjZW50YWdl
KS5hZGRUb0NvbG9yQW5kQ2xhbXAobV9iYXNlQ29sb3IpOworICAgIGVsc2UKKyAgICAgICAgbV9h
bmltYXRlZENvbG9yID0gbV9jb2xvckRpc3RhbmNlLnNjYWxlZERpc3RhbmNlKHBlcmNlbnRhZ2VQ
YXN0KS5hZGRUb0NvbG9yQW5kQ2xhbXAobV9mcm9tQ29sb3IpOworICAgIHJldHVybiAobV9hbmlt
YXRlZENvbG9yICE9IG1fYmFzZUNvbG9yKTsKIH0KIAotQ29sb3IgU1ZHQW5pbWF0ZUNvbG9yRWxl
bWVudDo6aW5pdGlhbENvbG9yKCkgY29uc3QKK2Jvb2wgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6
Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUsIHVu
c2lnbmVkIHZhbHVlSW5kZXgpCiB7Ci0gICAgcmV0dXJuIG1faW5pdGlhbENvbG9yOworICAgIHN3
aXRjaCAoYW5pbWF0aW9uTW9kZSkgeworICAgIGNhc2UgRlJPTV9UT19BTklNQVRJT046CisgICAg
ICAgIG1fZnJvbUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fZnJv
bSk7CisgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgIGNhc2UgVE9fQU5JTUFUSU9OOgorICAg
ICAgICBtX3RvQ29sb3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcobV90byk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRlJPTV9CWV9BTklNQVRJT046CisgICAgICAgIG1f
ZnJvbUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fZnJvbSk7Cisg
ICAgICAgIG1fdG9Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmluZyhtX2J5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCWV9BTklNQVRJT046CisgICAgICAgIG1fZnJv
bUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fZnJvbSk7CisgICAg
ICAgIG1fdG9Db2xvciA9IENvbG9yRGlzdGFuY2U6OmFkZENvbG9yc0FuZENsYW1wKG1fZnJvbUNv
bG9yLCBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcobV9ieSkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFZBTFVFU19BTklNQVRJT046CisgICAgICAgIG1fZnJvbUNvbG9yID0g
U1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fdmFsdWVzW3ZhbHVlSW5kZXhdKTsK
KyAgICAgICAgbV90b0NvbG9yID0gKCh2YWx1ZUluZGV4ICsgMSkgPCBtX3ZhbHVlcy5zaXplKCkp
ID8gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fdmFsdWVzW3ZhbHVlSW5kZXgg
KyAxXSkgOiBtX2Zyb21Db2xvcjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOT19BTklNQVRJ
T046CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBtX2Nv
bG9yRGlzdGFuY2UgPSBDb2xvckRpc3RhbmNlKG1fZnJvbUNvbG9yLCBtX3RvQ29sb3IpOworICAg
IHJldHVybiAhbV9jb2xvckRpc3RhbmNlLmlzWmVybygpOwogfQogCiB9CkluZGV4OiBrc3ZnMi9z
dmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdB
bmltYXRlQ29sb3JFbGVtZW50LmgJKHJldmlzaW9uIDE5MTM3KQorKysga3N2ZzIvc3ZnL1NWR0Fu
aW1hdGVDb2xvckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lm
ZGVmIFNWR19TVVBQT1JUCiAKICNpbmNsdWRlICJTVkdBbmltYXRpb25FbGVtZW50LmgiCisjaW5j
bHVkZSAiQ29sb3JEaXN0YW5jZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMzYsMzggKzM3LDI0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Kik7CiAgICAgICAgIHZpcnR1YWwgflNWR0FuaW1hdGVDb2xvckVsZW1l
bnQoKTsKLQotICAgICAgICB2b2lkIGFwcGx5QW5pbWF0aW9uVG9WYWx1ZShDb2xvciYgY3VycmVu
dENvbG9yKTsKLQotICAgICAgICAvLyBIZWxwZXIKLSAgICAgICAgQ29sb3IgYWRkQ29sb3JzQW5k
Q2xhbXAoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwotICAgICAgICBDb2xvciBjbGFtcENv
bG9yKGludCByLCBpbnQgZywgaW50IGIpIGNvbnN0OyAvLyBkZXByZWNhdGVkCi0gICAgICAgIHZv
aWQgY2FsY3VsYXRlQ29sb3IoZG91YmxlIHRpbWUsIGludCAmciwgaW50ICZnLCBpbnQgJmIpIGNv
bnN0OwotCi0gICAgICAgIENvbG9yIGNvbG9yKCkgY29uc3Q7Ci0gICAgICAgIENvbG9yIGluaXRp
YWxDb2xvcigpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUFu
aW1hdGlvbkJhc2VWYWx1ZUZyb21FbGVtZW50KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhcHBs
eUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQoKTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmly
dHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRo
aXM7IH0KLSAgICAgICAgdm9pZCBzdG9yZUluaXRpYWxWYWx1ZSgpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgcmVzZXRWYWx1ZXMoKTsKICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRh
dGVDdXJyZW50VmFsdWUoZG91YmxlIHRpbWVQZXJjZW50YWdlKTsKLSAgICAgICAgdmlydHVhbCBi
b29sIGhhbmRsZVN0YXJ0Q29uZGl0aW9uKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVM
YXN0VmFsdWVXaXRoQ3VycmVudCgpOworICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQW5pbWF0
ZWRWYWx1ZShFQW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2lnbmVkIHZh
bHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KTsKKyAgICAgICAgdmlydHVhbCBib29sIGNh
bGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJbmRl
eCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBDb2xvciBtX2xhc3RDb2xvcjsKLSAgICAgICAg
Q29sb3IgbV9jdXJyZW50Q29sb3I7Ci0gICAgICAgIENvbG9yIG1faW5pdGlhbENvbG9yOwotCi0g
ICAgICAgIFJlZlB0cjxTVkdDb2xvcj4gbV90b0NvbG9yOwotICAgICAgICBSZWZQdHI8U1ZHQ29s
b3I+IG1fZnJvbUNvbG9yOwotCi0gICAgICAgIGludCBtX2N1cnJlbnRJdGVtOwotICAgICAgICBp
bnQgbV9yZWREaWZmOwotICAgICAgICBpbnQgbV9ncmVlbkRpZmY7Ci0gICAgICAgIGludCBtX2Js
dWVEaWZmOworICAgICAgICBDb2xvciBtX2Jhc2VDb2xvcjsKKyAgICAgICAgQ29sb3IgbV9hbmlt
YXRlZENvbG9yOworCisgICAgICAgIENvbG9yIG1fdG9Db2xvcjsKKyAgICAgICAgQ29sb3IgbV9m
cm9tQ29sb3I7CisKKyAgICAgICAgQ29sb3JEaXN0YW5jZSBtX2NvbG9yRGlzdGFuY2U7CiAgICAg
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgJKHJl
dmlzaW9uIDE5MTM3KQorKysga3N2ZzIvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDkgKzM2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByb3RlY3Rl
ZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIHRoaXM7IH0KICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRh
dGVDdXJyZW50VmFsdWUoZG91YmxlIHRpbWVQZXJjZW50YWdlKSB7IHJldHVybiBmYWxzZTsgfQot
ICAgICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlU3RhcnRDb25kaXRpb24oKSB7IHJldHVybiBmYWxz
ZTsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRW5kQ29uZGl0aW9uKCkgeyB9CisgICAg
ICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKEVBbmltYXRpb25Nb2RlLCBmbG9h
dCB0aW1lUGVyY2VudGFnZSwgdW5zaWduZWQgdmFsdWVJbmRleCwgZmxvYXQgcGVyY2VudGFnZVBh
c3QpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9t
QW5kVG9WYWx1ZXMoRUFuaW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpIHsgcmV0dXJu
IGZhbHNlOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBpbnQgbV9jdXJyZW50SXRlbTsKSW5k
ZXg6IGtzdmcyL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3N2ZzIvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMTkxMzcpCisr
KyBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CisgICAgCit1c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7CiAKIFNWR0FuaW1h
dGVNb3Rpb25FbGVtZW50OjpTVkdBbmltYXRlTW90aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogU1ZHQW5pbWF0aW9uRWxlbWVudCh0
YWdOYW1lLCBkb2MpCkBAIC00Miw3ICs0NCwzMCBAQCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6
flNWR0FuaW1hdGVNb3RpCiAKIGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6Omhhc1ZhbGlk
VGFyZ2V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gKFNWR0FuaW1hdGlvbkVsZW1lbnQ6Omhhc1Zh
bGlkVGFyZ2V0KCkgJiYgdGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSk7
CisgICAgaWYgKCFTVkdBbmltYXRpb25FbGVtZW50OjpoYXNWYWxpZFRhcmdldCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF0YXJnZXRFbGVtZW50KCktPmlzU3R5bGVkVHJhbnNm
b3JtYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gU3BlYzogU1ZHIDEuMSBz
ZWN0aW9uIDE5LjIuMTUKKyAgICBpZiAodGFyZ2V0RWxlbWVudCgpLT5oYXNUYWdOYW1lKGdUYWcp
CisgICAgICAgIHx8IHRhcmdldEVsZW1lbnQoKS0+aGFzVGFnTmFtZShkZWZzVGFnKQorICAgICAg
ICB8fCB0YXJnZXRFbGVtZW50KCktPmhhc1RhZ05hbWUodXNlVGFnKQorICAgICAgICB8fCB0YXJn
ZXRFbGVtZW50KCktPmhhc1RhZ05hbWUoaW1hZ2VUYWcpCisgICAgICAgIHx8IHRhcmdldEVsZW1l
bnQoKS0+aGFzVGFnTmFtZShzd2l0Y2hUYWcpCisgICAgICAgIHx8IHRhcmdldEVsZW1lbnQoKS0+
aGFzVGFnTmFtZShwYXRoVGFnKQorICAgICAgICB8fCB0YXJnZXRFbGVtZW50KCktPmhhc1RhZ05h
bWUocmVjdFRhZykKKyAgICAgICAgfHwgdGFyZ2V0RWxlbWVudCgpLT5oYXNUYWdOYW1lKGNpcmNs
ZVRhZykKKyAgICAgICAgfHwgdGFyZ2V0RWxlbWVudCgpLT5oYXNUYWdOYW1lKGVsbGlwc2VUYWcp
CisgICAgICAgIHx8IHRhcmdldEVsZW1lbnQoKS0+aGFzVGFnTmFtZShsaW5lVGFnKQorICAgICAg
ICB8fCB0YXJnZXRFbGVtZW50KCktPmhhc1RhZ05hbWUocG9seWxpbmVUYWcpCisgICAgICAgIHx8
IHRhcmdldEVsZW1lbnQoKS0+aGFzVGFnTmFtZShwb2x5Z29uVGFnKQorICAgICAgICB8fCB0YXJn
ZXRFbGVtZW50KCktPmhhc1RhZ05hbWUodGV4dFRhZykKKyAgICAgICAgfHwgdGFyZ2V0RWxlbWVu
dCgpLT5oYXNUYWdOYW1lKGNsaXBQYXRoVGFnKQorICAgICAgICB8fCB0YXJnZXRFbGVtZW50KCkt
Pmhhc1RhZ05hbWUobWFza1RhZykKKyAgICAgICAgfHwgdGFyZ2V0RWxlbWVudCgpLT5oYXNUYWdO
YW1lKGFUYWcpCisgICAgICAgIHx8IHRhcmdldEVsZW1lbnQoKS0+aGFzVGFnTmFtZShmb3JlaWdu
T2JqZWN0VGFnKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOwogfQog
CiB2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUqIGF0dHIpCkBAIC04OCwyMSArMTEzLDExNSBAQCBQYXRoIFNWR0FuaW1hdGVN
b3Rpb25FbGVtZW50OjphbmltYXRpb25QCiAgICAgcmV0dXJuIFBhdGgoKTsKIH0KIAotYm9vbCBT
VkdBbmltYXRlTW90aW9uRWxlbWVudDo6dXBkYXRlQ3VycmVudFZhbHVlKGRvdWJsZSB0aW1lUGVy
Y2VudGFnZSkKK2Jvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVkVmFs
dWUoRUFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVu
c2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KQogeworICAgIGlmIChhbmlt
YXRpb25Nb2RlID09IFRPX0FOSU1BVElPTikgeworICAgICAgICAvLyB0by1hbmltYXRpb25zIGhh
dmUgYSBzcGVjaWFsIGVxdWF0aW9uOiB2YWx1ZSA9ICh0byAtIGJhc2UpICogKHRpbWUvZHVyYXRp
b24pICsgYmFzZQorICAgICAgICBtX2FuaW1hdGVkVHJhbnNsYXRpb24uc2V0V2lkdGgoKG1fdG9Q
b2ludC54KCkgLSBtX2Jhc2VQb2ludC54KCkpICogdGltZVBlcmNlbnRhZ2UgKyBtX2Jhc2VQb2lu
dC54KCkpOworICAgICAgICBtX2FuaW1hdGVkVHJhbnNsYXRpb24uc2V0SGVpZ2h0KChtX3RvUG9p
bnQueSgpIC0gbV9iYXNlUG9pbnQueSgpKSAqIHRpbWVQZXJjZW50YWdlICsgbV9iYXNlUG9pbnQu
eSgpKTsKKyAgICAgICAgbV9hbmltYXRlZEFuZ2xlID0gMDsKKyAgICB9IGVsc2UgeworICAgICAg
ICBtX2FuaW1hdGVkVHJhbnNsYXRpb24uc2V0V2lkdGgobV9wb2ludERpZmYud2lkdGgoKSAqIHBl
cmNlbnRhZ2VQYXN0ICsgbV9mcm9tUG9pbnQueCgpKTsKKyAgICAgICAgbV9hbmltYXRlZFRyYW5z
bGF0aW9uLnNldEhlaWdodChtX3BvaW50RGlmZi5oZWlnaHQoKSAqIHBlcmNlbnRhZ2VQYXN0ICsg
bV9mcm9tUG9pbnQueSgpKTsKKyAgICAgICAgbV9hbmltYXRlZEFuZ2xlID0gbV9hbmdsZURpZmYg
KiBwZXJjZW50YWdlUGFzdCArIG1fZnJvbUFuZ2xlOworICAgIH0KICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6aGFuZGxlU3RhcnRDb25kaXRpb24o
KQorc3RhdGljIGJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMsIEZsb2F0UG9pbnQmIHBv
aW50KQogeworICAgIGlmIChzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGNvbnN0IFVDaGFyKiBjdXIgPSBzLmNoYXJhY3RlcnMoKTsKKyAgICBjb25zdCBVQ2hhciogZW5k
ID0gY3VyICsgcy5sZW5ndGgoKTsKKyAgICAKKyAgICBpZiAoIXNraXBPcHRpb25hbFNwYWNlcyhj
dXIsIGVuZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBkb3VibGUgeCA9IDA7
CisgICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwgeCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBkb3VibGUgeSA9IDA7CisgICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVu
ZCwgeSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBwb2ludCA9IEZsb2F0UG9p
bnQoeCwgeSk7CisgICAgCisgICAgLy8gZGlzYWxsb3cgYW55aW5nIGV4Y2VwdCBzcGFjZXMgYXQg
dGhlIGVuZAorICAgIHJldHVybiAhc2tpcE9wdGlvbmFsU3BhY2VzKGN1ciwgZW5kKTsKK30KKwor
Ym9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKEVB
bmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpCit7CisgICAg
bV9mcm9tQW5nbGUgPSAwOworICAgIG1fdG9BbmdsZSA9IDA7CisgICAgc3dpdGNoIChhbmltYXRp
b25Nb2RlKSB7CisgICAgY2FzZSBGUk9NX1RPX0FOSU1BVElPTjoKKyAgICAgICAgcGFyc2VQb2lu
dChtX2Zyb20sIG1fZnJvbVBvaW50KTsKKyAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisgICAgY2Fz
ZSBUT19BTklNQVRJT046CisgICAgICAgIHBhcnNlUG9pbnQobV90bywgbV90b1BvaW50KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBGUk9NX0JZX0FOSU1BVElPTjoKKyAgICAgICAgcGFyc2VQ
b2ludChtX2Zyb20sIG1fZnJvbVBvaW50KTsKKyAgICAgICAgcGFyc2VQb2ludChtX3RvLCBtX3Rv
UG9pbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJZX0FOSU1BVElPTjoKKyAgICB7Cisg
ICAgICAgIHBhcnNlUG9pbnQobV9mcm9tLCBtX2Zyb21Qb2ludCk7CisgICAgICAgIEZsb2F0UG9p
bnQgYnlQb2ludDsKKyAgICAgICAgcGFyc2VQb2ludChtX2J5LCBieVBvaW50KTsKKyAgICAgICAg
bV90b1BvaW50ID0gRmxvYXRQb2ludChtX2Zyb21Qb2ludC54KCkgKyBieVBvaW50LngoKSwgbV9m
cm9tUG9pbnQueSgpICsgYnlQb2ludC55KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBWQUxVRVNfQU5JTUFUSU9OOgorICAgICAgICBwYXJzZVBvaW50KG1fdmFsdWVzW3ZhbHVl
SW5kZXhdLCBtX2Zyb21Qb2ludCk7CisgICAgICAgIGlmICgodmFsdWVJbmRleCArIDEpIDwgbV92
YWx1ZXMuc2l6ZSgpKQorICAgICAgICAgICAgcGFyc2VQb2ludChtX3ZhbHVlc1t2YWx1ZUluZGV4
ICsgMV0sIG1fdG9Qb2ludCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fdG9Qb2ludCA9
IG1fZnJvbVBvaW50OworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5PX0FOSU1BVElPTjoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIG1fcG9pbnREaWZm
ID0gbV90b1BvaW50IC0gbV9mcm9tUG9pbnQ7CisgICAgbV9hbmdsZURpZmYgPSAwOworICAgIHJl
dHVybiAobV9wb2ludERpZmYud2lkdGgoKSAhPSAwIHx8IG1fcG9pbnREaWZmLmhlaWdodCgpICE9
IDApOworfQorCitib29sIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojp1cGRhdGVBbmltYXRpb25C
YXNlVmFsdWVGcm9tRWxlbWVudCgpCit7CisgICAgaWYgKCF0YXJnZXRFbGVtZW50KCktPmlzU3R5
bGVkVHJhbnNmb3JtYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9i
YXNlUG9pbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KHRh
cmdldEVsZW1lbnQoKSktPmdldEJCb3goKS5sb2NhdGlvbigpOwogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjphcHBseUFuaW1hdGlvblRvVmFsdWUo
U1ZHVHJhbnNmb3JtTGlzdCogdGFyZ2V0VHJhbnNmb3JtcykKK3ZvaWQgU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQ6OmFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCgpCiB7CisgICAgaWYgKCF0YXJn
ZXRFbGVtZW50KCktPmlzU3R5bGVkVHJhbnNmb3JtYWJsZSgpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIHRyYW5zZm9ybSA9IHN0YXRp
Y19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4odGFyZ2V0RWxlbWVudCgpKTsK
KyAgICBSZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4gdHJhbnNmb3JtTGlzdCA9IHRyYW5zZm9ybS0+
dHJhbnNmb3JtKCk7CisgICAgaWYgKCF0cmFuc2Zvcm1MaXN0KQorICAgICAgICByZXR1cm47Cisg
ICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICBpZiAoIWlzQWRkaXRpdmUoKSkKLSAgICAg
ICAgdGFyZ2V0VHJhbnNmb3Jtcy0+Y2xlYXIoZWMpOworICAgICAgICB0cmFuc2Zvcm1MaXN0LT5j
bGVhcihlYyk7CisgICAgCisgICAgU1ZHVHJhbnNmb3JtIHRyYW5zbGF0aW9uOworICAgIHRyYW5z
bGF0aW9uLnNldFRyYW5zbGF0ZShtX2FuaW1hdGVkVHJhbnNsYXRpb24ud2lkdGgoKSwgbV9hbmlt
YXRlZFRyYW5zbGF0aW9uLmhlaWdodCgpKTsKKyAgICBTVkdUcmFuc2Zvcm0gcm90YXRpb247Cisg
ICAgcm90YXRpb24uc2V0Um90YXRlKG1fYW5pbWF0ZWRBbmdsZSwgMCwgMCk7CisgICAgCisgICAg
dHJhbnNmb3JtTGlzdC0+YXBwZW5kSXRlbSh0cmFuc2xhdGlvbiwgZWMpOworICAgIHRyYW5zZm9y
bUxpc3QtPmFwcGVuZEl0ZW0ocm90YXRpb24sIGVjKTsKKyAgICB0cmFuc2Zvcm0tPnVwZGF0ZUxv
Y2FsVHJhbnNmb3JtKHRyYW5zZm9ybUxpc3QuZ2V0KCkpOwogfQogCiB9CkluZGV4OiBrc3ZnMi9z
dmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gMTkxMzcpCisrKyBrc3ZnMi9zdmcvU1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTkgKzM2LDMzIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNW
YWxpZFRhcmdldCgpIGNvbnN0OwogICAgICAgICAKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwotICAgICAgICAKLSAgICAgICAgdm9p
ZCBhcHBseUFuaW1hdGlvblRvVmFsdWUoU1ZHVHJhbnNmb3JtTGlzdCopOworICAgICAgICB2aXJ0
dWFsIGJvb2wgdXBkYXRlQW5pbWF0aW9uQmFzZVZhbHVlRnJvbUVsZW1lbnQoKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGFwcGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCgpOwogICAgICAgICAKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSop
OworICAgICAgICAgICAgICAgIAogICAgICAgICBQYXRoIGFuaW1hdGlvblBhdGgoKTsKICAgICAg
ICAgCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNv
bnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQogICAgICAgICAKLSAgICAgICAg
dmlydHVhbCBib29sIHVwZGF0ZUN1cnJlbnRWYWx1ZShkb3VibGUgdGltZVBlcmNlbnRhZ2UpOwot
ICAgICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlU3RhcnRDb25kaXRpb24oKTsKKyAgICAgICAgdmly
dHVhbCBib29sIHVwZGF0ZUFuaW1hdGVkVmFsdWUoRUFuaW1hdGlvbk1vZGUsIGZsb2F0IHRpbWVQ
ZXJjZW50YWdlLCB1bnNpZ25lZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJjZW50YWdlUGFzdCk7Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoRUFuaW1hdGlvbk1v
ZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpOwogICAgICAgICAKICAgICBwcml2YXRlOgorICAgICAg
ICBGbG9hdFBvaW50IG1fYmFzZVBvaW50OworICAgICAgICBGbG9hdFNpemUgbV9hbmltYXRlZFRy
YW5zbGF0aW9uOworICAgICAgICBkb3VibGUgbV9hbmltYXRlZEFuZ2xlOworICAgICAgICAKKyAg
ICAgICAgLy8gTm90ZTogd2UgZG8gbm90IHN1cHBvcnQgcGVyY2VudGFnZSB2YWx1ZXMgZm9yIHRv
L2Zyb20gY29vcmRzIGFzIHRoZSBzcGVjIGltcGxpZXMgd2Ugc2hvdWxkIChvcGVyYSBkb2Vzbid0
IGVpdGhlcikKKyAgICAgICAgRmxvYXRQb2ludCBtX2Zyb21Qb2ludDsKKyAgICAgICAgZG91Ymxl
IG1fZnJvbUFuZ2xlOworICAgICAgICBGbG9hdFBvaW50IG1fdG9Qb2ludDsKKyAgICAgICAgZG91
YmxlIG1fdG9BbmdsZTsKKyAgICAgICAgCisgICAgICAgIEZsb2F0U2l6ZSBtX3BvaW50RGlmZjsK
KyAgICAgICAgZG91YmxlIG1fYW5nbGVEaWZmOworICAgICAgICAKICAgICAgICAgUGF0aCBtX3Bh
dGg7CiAgICAgICAgIFZlY3RvcjxmbG9hdD4gbV9rZXlQb2ludHM7CiAgICAgICAgIGVudW0gUm90
YXRlTW9kZSB7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE5MTM3KQorKysga3N2ZzIvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNW
R0FuaW1hdGlvbkVsZW1lbnQodGFnTmFtZSwgZG9jKQotICAgICwgbV9jdXJyZW50SXRlbSgtMSkK
ICAgICAsIG1fdHlwZShTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVU5LTk9XTikKLSAgICAs
IG1fcm90YXRlU3BlY2lhbENhc2UoZmFsc2UpCi0gICAgLCBtX3RvUm90YXRlU3BlY2lhbENhc2Uo
ZmFsc2UpCi0gICAgLCBtX2Zyb21Sb3RhdGVTcGVjaWFsQ2FzZShmYWxzZSkKIHsKIH0KIApAQCAt
NzYsMjIyICs3Miw4NiBAQCB2b2lkIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZU1h
CiAgICAgICAgIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
OwogfQogCi12b2lkIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpzdG9yZUluaXRpYWxWYWx1
ZSgpCitib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojp1cGRhdGVBbmltYXRlZFZhbHVl
KEVBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUsIGZsb2F0IHRpbWVQZXJjZW50YWdlLCB1bnNp
Z25lZCB2YWx1ZUluZGV4LCBmbG9hdCBwZXJjZW50YWdlUGFzdCkKIHsKLSAgICBtX2luaXRpYWxU
cmFuc2Zvcm0gPSBTVkdUcmFuc2Zvcm0oKTsKLSAgICAKLSAgICAvLyBTYXZlIGluaXRpYWwgdHJh
bnNmb3JtLi4uIChuZWVkZWQgZm9yIGZpbGw9InJlbW92ZSIgb3IgYWRkaXR2ZT0ic3VtIikKLSAg
ICBpZiAodGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSkgewotICAgICAg
ICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPih0YXJnZXRFbGVtZW50KCkpOwotICAgICAg
ICBSZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4gdHJhbnNmb3JtTGlzdCA9IHRyYW5zZm9ybS0+dHJh
bnNmb3JtQmFzZVZhbHVlKCk7Ci0gICAgICAgIGlmICh0cmFuc2Zvcm1MaXN0KSB7Ci0gICAgICAg
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9u
ZyBpID0gMDsgaSA8IHRyYW5zZm9ybUxpc3QtPm51bWJlck9mSXRlbXMoKTsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgU1ZHVHJhbnNmb3JtIHZhbHVlID0gdHJhbnNmb3JtTGlzdC0+Z2V0SXRlbShp
LCBlYyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMg
aXMgd3JvbmcgaWYgdGhlIGluaXRpYWwgdHJhbnNmb3JtIGxpc3QgaGFzIG5vdCBiZWVuIG5vcm1h
bGl6ZWQKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUudHlwZSgpID09IG1fdHlwZSkgewotICAg
ICAgICAgICAgICAgICAgICBtX2luaXRpYWxUcmFuc2Zvcm0gPSB2YWx1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQorICAgIGlmIChhbmltYXRpb25Nb2RlID09IFRPX0FOSU1BVElPTikKKyAgICAg
ICAgLy8gdG8tYW5pbWF0aW9ucyBoYXZlIGEgc3BlY2lhbCBlcXVhdGlvbjogdmFsdWUgPSAodG8g
LSBiYXNlKSAqICh0aW1lL2R1cmF0aW9uKSArIGJhc2UKKyAgICAgICAgbV9hbmltYXRlZFRyYW5z
Zm9ybSA9IFNWR1RyYW5zZm9ybURpc3RhbmNlKG1fYmFzZVRyYW5zZm9ybSwgbV90b1RyYW5zZm9y
bSkuc2NhbGVkRGlzdGFuY2UodGltZVBlcmNlbnRhZ2UpLmFkZFRvU1ZHVHJhbnNmb3JtKG1fYmFz
ZVRyYW5zZm9ybSk7CisgICAgZWxzZQorICAgICAgICBtX2FuaW1hdGVkVHJhbnNmb3JtID0gbV90
cmFuc2Zvcm1EaXN0YW5jZS5zY2FsZWREaXN0YW5jZShwZXJjZW50YWdlUGFzdCkuYWRkVG9TVkdU
cmFuc2Zvcm0obV9mcm9tVHJhbnNmb3JtKTsKKyAgICByZXR1cm4gKG1fYW5pbWF0ZWRUcmFuc2Zv
cm0gIT0gbV9iYXNlVHJhbnNmb3JtKTsKIH0KIAotdm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxl
bWVudDo6cmVzZXRWYWx1ZXMoKQorYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6dXBk
YXRlQW5pbWF0aW9uQmFzZVZhbHVlRnJvbUVsZW1lbnQoKQogewotICAgIG1fY3VycmVudEl0ZW0g
PSAtMTsKKyAgICBtX2Jhc2VUcmFuc2Zvcm0gPSBTVkdUcmFuc2Zvcm0oKTsKICAgICBtX3RvVHJh
bnNmb3JtID0gU1ZHVHJhbnNmb3JtKCk7CiAgICAgbV9mcm9tVHJhbnNmb3JtID0gU1ZHVHJhbnNm
b3JtKCk7Ci0gICAgbV9pbml0aWFsVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtKCk7Ci19Ci0KLWJv
b2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnVwZGF0ZUN1cnJlbnRWYWx1ZShkb3VibGUg
dGltZVBlcmNlbnRhZ2UpCi17Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHFUb01hdHJpeCwgcUZyb21N
YXRyaXg7Ci0gICAgZG91YmxlIHVzZVRpbWVQZXJjZW50YWdlID0gdGltZVBlcmNlbnRhZ2U7Ci0g
ICAgCi0gICAgaWYgKG1fdmFsdWVzKSB7Ci0gICAgICAgIGludCBpdGVtQnlQZXJjZW50YWdlID0g
Y2FsY3VsYXRlQ3VycmVudFZhbHVlSXRlbSh0aW1lUGVyY2VudGFnZSk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoaXRlbUJ5UGVyY2VudGFnZSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX2N1cnJlbnRJdGVtICE9IGl0ZW1CeVBlcmNlbnRh
Z2UpIHsgLy8gSXRlbSBjaGFuZ2VkLi4uCi0gICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRXh0cmFjdCBjdXJyZW50ICdmcm9tJyAv
ICd0bycgdmFsdWVzCi0gICAgICAgICAgICBTdHJpbmcgdmFsdWUxID0gbV92YWx1ZXMtPmdldEl0
ZW0oaXRlbUJ5UGVyY2VudGFnZSwgZWMpOwotICAgICAgICAgICAgU3RyaW5nIHZhbHVlMiA9IG1f
dmFsdWVzLT5nZXRJdGVtKGl0ZW1CeVBlcmNlbnRhZ2UgKyAxLCBlYyk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBuZXcgZnJvbS90byB0cmFuc2Zvcm0gdmFsdWVzLi4u
Ci0gICAgICAgICAgICBpZiAoIXZhbHVlMS5pc0VtcHR5KCkgJiYgIXZhbHVlMi5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgICAgICBib29sIGFwcGx5ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fdG9UcmFuc2Zvcm0uaXNWYWxpZCgpICYmIG1fZnJvbVRyYW5zZm9ybS5pc1ZhbGlkKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgcVRvTWF0cml4ID0gbV90b1RyYW5zZm9ybS5tYXRyaXgo
KTsKLSAgICAgICAgICAgICAgICAgICAgcUZyb21NYXRyaXggPSBtX2Zyb21UcmFuc2Zvcm0ubWF0
cml4KCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBhcHBseSA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHVzZVRpbWVQZXJjZW50YWdlID0gMS4wOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX3RvVHJh
bnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZSh2YWx1ZTIpOwotICAgICAgICAgICAgICAgIG1f
dG9Sb3RhdGVTcGVjaWFsQ2FzZSA9IG1fcm90YXRlU3BlY2lhbENhc2U7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgbV9mcm9tVHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1
ZSh2YWx1ZTEpOwotICAgICAgICAgICAgICAgIG1fZnJvbVJvdGF0ZVNwZWNpYWxDYXNlID0gbV9y
b3RhdGVTcGVjaWFsQ2FzZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2N1
cnJlbnRJdGVtID0gaXRlbUJ5UGVyY2VudGFnZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBpZiAoIWFwcGx5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobV90b1RyYW5zZm9ybS5p
c1ZhbGlkKCkgJiYgbV9mcm9tVHJhbnNmb3JtLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHVzZVRp
bWVQZXJjZW50YWdlID0gY2FsY3VsYXRlUmVsYXRpdmVUaW1lUGVyY2VudGFnZSh0aW1lUGVyY2Vu
dGFnZSwgbV9jdXJyZW50SXRlbSk7Ci0gICAgfQorICAgIG1fYW5pbWF0ZWRUcmFuc2Zvcm0gPSBT
VkdUcmFuc2Zvcm0oKTsKICAgICAKLSAgICBpZiAobV90b1RyYW5zZm9ybS5pc1ZhbGlkKCkgJiYg
cVRvTWF0cml4LmlzSWRlbnRpdHkoKSkKLSAgICAgICAgcVRvTWF0cml4ID0gbV90b1RyYW5zZm9y
bS5tYXRyaXgoKTsKKyAgICBpZiAoIXRhcmdldEVsZW1lbnQoKS0+aXNTdHlsZWRUcmFuc2Zvcm1h
YmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAobV9mcm9tVHJhbnNm
b3JtLmlzVmFsaWQoKSAmJiBxRnJvbU1hdHJpeC5pc0lkZW50aXR5KCkpCi0gICAgICAgIHFGcm9t
TWF0cml4ID0gbV9mcm9tVHJhbnNmb3JtLm1hdHJpeCgpOworICAgIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50KiB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudCo+KHRhcmdldEVsZW1lbnQoKSk7CisgICAgUmVmUHRyPFNWR1RyYW5zZm9ybUxp
c3Q+IHRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm0tPnRyYW5zZm9ybSgpOworICAgIGlmICghdHJh
bnNmb3JtTGlzdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIG1fY3VycmVudFRy
YW5zZm9ybS5yZXNldCgpOwotICAgIAotICAgIGlmIChpc0FjY3VtdWxhdGVkKCkgJiYgcmVwZWF0
aW9ucygpICE9IDAuMCkKLSAgICAgICAgbV9jdXJyZW50VHJhbnNmb3JtLm11bHRpcGx5KG1fbGFz
dFRyYW5zZm9ybSk7Ci0gICAgCi0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBT
VkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOgotICAgICAgICB7Ci0gICAgICAg
ICAgICBkb3VibGUgZHggPSAoKHFUb01hdHJpeC5lKCkgLSBxRnJvbU1hdHJpeC5lKCkpICogdXNl
VGltZVBlcmNlbnRhZ2UpICsgcUZyb21NYXRyaXguZSgpOwotICAgICAgICAgICAgZG91YmxlIGR5
ID0gKChxVG9NYXRyaXguZigpIC0gcUZyb21NYXRyaXguZigpKSAqIHVzZVRpbWVQZXJjZW50YWdl
KSArIHFGcm9tTWF0cml4LmYoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9jdXJyZW50
VHJhbnNmb3JtLnRyYW5zbGF0ZShkeCwgZHkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIGRvdWJsZSBzeCA9ICgocVRvTWF0cml4LmEoKSAtIHFGcm9tTWF0
cml4LmEoKSkgKiB1c2VUaW1lUGVyY2VudGFnZSkgKyBxRnJvbU1hdHJpeC5hKCk7Ci0gICAgICAg
ICAgICBkb3VibGUgc3kgPSAoKHFUb01hdHJpeC5kKCkgLSBxRnJvbU1hdHJpeC5kKCkpICogdXNl
VGltZVBlcmNlbnRhZ2UpICsgcUZyb21NYXRyaXguZCgpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBtX2N1cnJlbnRUcmFuc2Zvcm0uc2NhbGUoc3gsIHN5KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1JP
VEFURToKLSAgICAgICAgewotICAgICAgICAgICAgZG91YmxlIHRvQW5nbGUsIHRvQ3gsIHRvQ3ks
IGZyb21BbmdsZSwgZnJvbUN4LCBmcm9tQ3k7Ci0gICAgICAgICAgICBjYWxjdWxhdGVSb3RhdGlv
bkZyb21NYXRyaXgocVRvTWF0cml4LCB0b0FuZ2xlLCB0b0N4LCB0b0N5KTsKLSAgICAgICAgICAg
IGNhbGN1bGF0ZVJvdGF0aW9uRnJvbU1hdHJpeChxRnJvbU1hdHJpeCwgZnJvbUFuZ2xlLCBmcm9t
Q3gsIGZyb21DeSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX3RvUm90YXRlU3Bl
Y2lhbENhc2UpCi0gICAgICAgICAgICAgICAgdG9BbmdsZSA9IChscm91bmQodG9BbmdsZSkgPT0g
MSkgPyAwLjAgOiAzNjAuMDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fZnJvbVJv
dGF0ZVNwZWNpYWxDYXNlKQotICAgICAgICAgICAgICAgIGZyb21BbmdsZSA9IChscm91bmQoZnJv
bUFuZ2xlKSA9PSAxKSA/IDAuMCA6IDM2MC4wOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBk
b3VibGUgYW5nbGUgPSAoKHRvQW5nbGUgLSBmcm9tQW5nbGUpICogdXNlVGltZVBlcmNlbnRhZ2Up
ICsgZnJvbUFuZ2xlOwotICAgICAgICAgICAgZG91YmxlIGN4ID0gKHRvQ3ggLSBmcm9tQ3gpICog
dXNlVGltZVBlcmNlbnRhZ2UgKyBmcm9tQ3g7Ci0gICAgICAgICAgICBkb3VibGUgY3kgPSAodG9D
eSAtIGZyb21DeSkgKiB1c2VUaW1lUGVyY2VudGFnZSArIGZyb21DeTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9jdXJyZW50VHJhbnNmb3JtLnRyYW5zbGF0ZShjeCwgY3kpOwotICAgICAg
ICAgICAgbV9jdXJyZW50VHJhbnNmb3JtLnJvdGF0ZShhbmdsZSk7Ci0gICAgICAgICAgICBtX2N1
cnJlbnRUcmFuc2Zvcm0udHJhbnNsYXRlKC1jeCwgLWN5KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NLRVdY
OgotICAgICAgICB7Ci0gICAgICAgICAgICBkb3VibGUgc3ggPSAoU1ZHQW5nbGU6OnRvZGVnKGF0
YW4ocVRvTWF0cml4LmMoKSkgLSBhdGFuKHFGcm9tTWF0cml4LmMoKSkpICoKLSAgICAgICAgICAg
ICAgICAgICAgICAgICB1c2VUaW1lUGVyY2VudGFnZSkgKyBTVkdBbmdsZTo6dG9kZWcoYXRhbihx
RnJvbU1hdHJpeC5jKCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9jdXJyZW50VHJh
bnNmb3JtLnNoZWFyKHN4LCAxLjApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0tFV1k6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIGRvdWJsZSBzeSA9IChTVkdBbmdsZTo6dG9kZWcoYXRhbihxVG9NYXRyaXgu
YigpKSAtIGF0YW4ocUZyb21NYXRyaXguYigpKSkgKgotICAgICAgICAgICAgICAgICAgICAgICAg
IHVzZVRpbWVQZXJjZW50YWdlKSArIFNWR0FuZ2xlOjp0b2RlZyhhdGFuKHFGcm9tTWF0cml4LmIo
KSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2N1cnJlbnRUcmFuc2Zvcm0uc2hlYXIo
MS4wLCBzeSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIG1fYmFzZVRyYW5zZm9ybSA9IHRyYW5z
Zm9ybUxpc3QtPmNvbmNhdGVuYXRlRm9yVHlwZShtX3R5cGUpOworICAgICAgICAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6aGFuZGxlU3Rh
cnRDb25kaXRpb24oKQordm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6YXBwbHlBbmlt
YXRlZFZhbHVlVG9FbGVtZW50KCkKIHsKLSAgICBzdG9yZUluaXRpYWxWYWx1ZSgpOworICAgIGlm
ICghdGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiB0cmFuc2Zvcm0g
PSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KHRhcmdldEVsZW1l
bnQoKSk7CisgICAgUmVmUHRyPFNWR1RyYW5zZm9ybUxpc3Q+IHRyYW5zZm9ybUxpc3QgPSB0cmFu
c2Zvcm0tPnRyYW5zZm9ybSgpOworICAgIGlmICghdHJhbnNmb3JtTGlzdCkKKyAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIHN3aXRjaCAoZGV0ZWN0QW5pbWF0aW9uTW9kZSgpKSB7Ci0gICAgICAg
IGNhc2UgVE9fQU5JTUFUSU9OOgotICAgICAgICBjYXNlIEZST01fVE9fQU5JTUFUSU9OOgotICAg
ICAgICB7ICAgICAgICAKLSAgICAgICAgICAgIG1fdG9UcmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9y
bVZhbHVlKG1fdG8pOwotICAgICAgICAgICAgbV90b1JvdGF0ZVNwZWNpYWxDYXNlID0gbV9yb3Rh
dGVTcGVjaWFsQ2FzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2Zyb20uaXNF
bXB0eSgpKSB7IC8vIGZyb20tdG8gYW5pbWF0aW9uCi0gICAgICAgICAgICAgICAgbV9mcm9tVHJh
bnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX2Zyb20pOwotICAgICAgICAgICAgICAgIG1f
ZnJvbVJvdGF0ZVNwZWNpYWxDYXNlID0gbV9yb3RhdGVTcGVjaWFsQ2FzZTsKLSAgICAgICAgICAg
IH0gZWxzZSB7IC8vIHRvIGFuaW1hdGlvbgotICAgICAgICAgICAgICAgIG1fZnJvbVRyYW5zZm9y
bSA9IG1faW5pdGlhbFRyYW5zZm9ybTsKLSAgICAgICAgICAgICAgICBtX2Zyb21Sb3RhdGVTcGVj
aWFsQ2FzZSA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoIW1fZnJvbVRyYW5zZm9ybS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgbV9mcm9t
VHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQllfQU5JTUFUSU9OOgotICAgICAgICBjYXNl
IEZST01fQllfQU5JTUFUSU9OOgotICAgICAgICB7Ci0gICAgICAgICAgICBtX3RvVHJhbnNmb3Jt
ID0gcGFyc2VUcmFuc2Zvcm1WYWx1ZShtX2J5KTsKLSAgICAgICAgICAgIG1fdG9Sb3RhdGVTcGVj
aWFsQ2FzZSA9IG1fcm90YXRlU3BlY2lhbENhc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmICghbV9mcm9tLmlzRW1wdHkoKSkgeyAvLyBmcm9tLWJ5IGFuaW1hdGlvbgotICAgICAgICAg
ICAgICAgIG1fZnJvbVRyYW5zZm9ybSA9IHBhcnNlVHJhbnNmb3JtVmFsdWUobV9mcm9tKTsKLSAg
ICAgICAgICAgICAgICBtX2Zyb21Sb3RhdGVTcGVjaWFsQ2FzZSA9IG1fcm90YXRlU3BlY2lhbENh
c2U7Ci0gICAgICAgICAgICB9IGVsc2UgeyAvLyBieSBhbmltYXRpb24KLSAgICAgICAgICAgICAg
ICBtX2Zyb21UcmFuc2Zvcm0gPSBtX2luaXRpYWxUcmFuc2Zvcm07Ci0gICAgICAgICAgICAgICAg
bV9mcm9tUm90YXRlU3BlY2lhbENhc2UgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKCFtX2Zyb21UcmFuc2Zvcm0uaXNWYWxpZCgpKQotICAgICAg
ICAgICAgICAgIG1fZnJvbVRyYW5zZm9ybSA9IFNWR1RyYW5zZm9ybSgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBWQUxVRVNfQU5JTUFUSU9OOgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8v
a2RFcnJvcigpIDw8IGtfZnVuY2luZm8gPDwgIiBVbmFibGUgdG8gZGV0ZWN0IGFuaW1hdGlvbiBt
b2RlISBBYm9ydGluZyBjcmVhdGlvbiEiIDw8IGVuZGw7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU1ZHQW5p
bWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnVwZGF0ZUxhc3RWYWx1ZVdpdGhDdXJyZW50KCkKLXsKLSAg
ICBtX2xhc3RUcmFuc2Zvcm0gPSBtX2N1cnJlbnRUcmFuc2Zvcm07Ci19Ci0KLXZvaWQgU1ZHQW5p
bWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmFwcGx5QW5pbWF0aW9uVG9WYWx1ZShTVkdUcmFuc2Zvcm1M
aXN0KiB0YXJnZXRUcmFuc2Zvcm1zKQotewogICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgaWYg
KCFpc0FkZGl0aXZlKCkpCi0gICAgICAgIHRhcmdldFRyYW5zZm9ybXMtPmNsZWFyKGVjKTsKKyAg
ICAgICAgdHJhbnNmb3JtTGlzdC0+Y2xlYXIoZWMpOwogICAgIAotICAgIHRhcmdldFRyYW5zZm9y
bXMtPmFwcGVuZEl0ZW0oU1ZHVHJhbnNmb3JtKG1fY3VycmVudFRyYW5zZm9ybSksIGVjKTsKKyAg
ICB0cmFuc2Zvcm1MaXN0LT5hcHBlbmRJdGVtKG1fYW5pbWF0ZWRUcmFuc2Zvcm0sIGVjKTsKKyAg
ICB0cmFuc2Zvcm0tPnVwZGF0ZUxvY2FsVHJhbnNmb3JtKHRyYW5zZm9ybUxpc3QuZ2V0KCkpOwor
fQorCitib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9W
YWx1ZXMoRUFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFsdWVJbmRleCkK
K3sKKyAgICBzd2l0Y2ggKGRldGVjdEFuaW1hdGlvbk1vZGUoKSkgeworICAgIGNhc2UgRlJPTV9U
T19BTklNQVRJT046CisgICAgICAgIG1fZnJvbVRyYW5zZm9ybSA9IHBhcnNlVHJhbnNmb3JtVmFs
dWUobV9mcm9tKTsKKyAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisgICAgY2FzZSBUT19BTklNQVRJ
T046CisgICAgICAgIG1fdG9UcmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybVZhbHVlKG1fdG8pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEZST01fQllfQU5JTUFUSU9OOgorICAgICAgICBtX2Zy
b21UcmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybVZhbHVlKG1fZnJvbSk7CisgICAgICAgIG1fdG9U
cmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybVZhbHVlKG1fYnkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEJZX0FOSU1BVElPTjoKKyAgICAgICAgbV9mcm9tVHJhbnNmb3JtID0gcGFyc2VUcmFu
c2Zvcm1WYWx1ZShtX2Zyb20pOworICAgICAgICBtX3RvVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3Jt
RGlzdGFuY2U6OmFkZFNWR1RyYW5zZm9ybXMobV9mcm9tVHJhbnNmb3JtLCBwYXJzZVRyYW5zZm9y
bVZhbHVlKG1fYnkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWQUxVRVNfQU5JTUFUSU9O
OgorICAgICAgICBtX2Zyb21UcmFuc2Zvcm0gPSBwYXJzZVRyYW5zZm9ybVZhbHVlKG1fdmFsdWVz
W3ZhbHVlSW5kZXhdKTsKKyAgICAgICAgbV90b1RyYW5zZm9ybSA9ICgodmFsdWVJbmRleCArIDEp
IDwgbV92YWx1ZXMuc2l6ZSgpKSA/IHBhcnNlVHJhbnNmb3JtVmFsdWUobV92YWx1ZXNbdmFsdWVJ
bmRleCArIDFdKSA6IG1fZnJvbVRyYW5zZm9ybTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBO
T19BTklNQVRJT046CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICBt
X3RyYW5zZm9ybURpc3RhbmNlID0gU1ZHVHJhbnNmb3JtRGlzdGFuY2UobV9mcm9tVHJhbnNmb3Jt
LCBtX3RvVHJhbnNmb3JtKTsKKyAgICByZXR1cm4gIW1fdHJhbnNmb3JtRGlzdGFuY2UuaXNaZXJv
KCk7CiB9CiAKIFNWR1RyYW5zZm9ybSBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cGFyc2VU
cmFuc2Zvcm1WYWx1ZShjb25zdCBTdHJpbmcmIGRhdGEpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6
IFRoaXMgcGFyc2VyIHNob3VsZCBiZSBjb21iaW5lZCB3aXRoIHRoZSBvbmUgaW4gU1ZHVHJhbnNm
b3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1BdHRyaWJ1dGUKKyAgICAKICAgICBTdHJpbmcgcGFyc2Ug
PSBkYXRhLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgIGlmIChwYXJzZS5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBTVkdUcmFuc2Zvcm0oKTsKQEAgLTM0MiwyMSArMjAyLDYgQEAgU1ZHVHJhbnNm
b3JtIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OgogICAgICAgICAgICAgZWxzZSAKICAgICAg
ICAgICAgICAgICBhbmdsZSA9IHBhcnNlLnRvRG91YmxlKCk7CiAKLSAgICAgICAgICAgIC8vIE9r
IG5vdyBoZXJlJ3MgYSBoYWNrIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gY2FsY3VsYXRlIGN4L2N5
IHZhbHVlcywgaWYgYW5nbGUgPSAwIAotICAgICAgICAgICAgLy8gb3IgYW5nbGU9MzYwIC0+IGZv
ciBhbmdsZT0wIG91ciBtYXRyaXggaXMgbTExOiAxIG0xMjogMCBtMjE6IDAgbTIyOiAxIGR4OiAw
IGR5OiAwCi0gICAgICAgICAgICAvLyBBcyB5b3UgY2FuIHNlZSB0aGVyZSBpcyBubyB3YXkgdG8g
cmV0cmlldmUgdGhlIGN4L2N5IHZhbHVlcyBmb3IgdGhlc2UgYW5nbGVzLgotICAgICAgICAgICAg
Ly8gLT4gc2V0ICdtX3JvdGF0ZVNwZWNpYWxDYXNlJyB0byB0cnVlLCBhbmQgc2F2ZSBhbmdsZSA9
IDEvMzU5IC0+IHRoaXMgd2F5IHdlIGNhbiBjYWxjdWxhdGUKLSAgICAgICAgICAgIC8vICAgIHRo
ZSBjeC9jeSB2YWx1ZXMsIHdoaWxlIGtlZXBpbmcgdGhpcyB1YmVyLW9wdGltaXplZCB3YXkgb2Yg
aGFuZGxpbmcgPGFuaW1hdGVUcmFuc2Zvcm0+IQotICAgICAgICAgICAgbV9yb3RhdGVTcGVjaWFs
Q2FzZSA9IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYW5nbGUgPT0gMC4w
KSB7Ci0gICAgICAgICAgICAgICAgYW5nbGUgPSBhbmdsZSArIDEuMDsKLSAgICAgICAgICAgICAg
ICBtX3JvdGF0ZVNwZWNpYWxDYXNlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYW5n
bGUgPT0gMzYwLjApIHsKLSAgICAgICAgICAgICAgICBhbmdsZSA9IGFuZ2xlIC0gMS4wOwotICAg
ICAgICAgICAgICAgIG1fcm90YXRlU3BlY2lhbENhc2UgPSB0cnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCiAgICAgICAgICAgICBwYXJzZWRUcmFuc2Zvcm0uc2V0Um90YXRlKGFuZ2xl
LCBjeCwgY3kpOwogICAgICAgICAgICAgYnJlYWs7ICAgIAogICAgICAgICB9CkBAIC0zNzksMzYg
KzIyNCw2IEBAIFNWR1RyYW5zZm9ybSBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDoKICAgICBy
ZXR1cm4gcGFyc2VkVHJhbnNmb3JtOwogfQogCi12b2lkIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVt
ZW50OjpjYWxjdWxhdGVSb3RhdGlvbkZyb21NYXRyaXgoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBt
YXRyaXgsIGRvdWJsZSYgYW5nbGUsIGRvdWJsZSYgY3gsIGRvdWJsZSYgY3kpIGNvbnN0Ci17Ci0g
ICAgZG91YmxlIGNvc2EgPSBtYXRyaXguYSgpOwotICAgIGRvdWJsZSBzaW5hID0gLW1hdHJpeC5j
KCk7Ci0KLSAgICBpZiAoY29zYSAhPSAxLjApIHsKLSAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBh
bmdsZSB2aWEgbWFnaWMgOykKLSAgICAgICAgZG91YmxlIHRlbXAgPSBTVkdBbmdsZTo6dG9kZWco
YXNpbihzaW5hKSk7Ci0gICAgICAgIGFuZ2xlID0gU1ZHQW5nbGU6OnRvZGVnKGFjb3MoY29zYSkp
OwotICAgICAgICBpZiAodGVtcCA8IDApCi0gICAgICAgICAgICBhbmdsZSA9IDM2MC4wIC0gYW5n
bGU7Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgcmVzID0gKDEgLSBjb3NhKSArICgoc2luYSAq
IHNpbmEpIC8gKDEgLSBjb3NhKSk7Ci0gICAgICAgIAotICAgICAgICBjeCA9IChtYXRyaXguZSgp
IC0gKChzaW5hICogbWF0cml4LmYoKSkgLyAoMSAtIGNvc2EpKSkgLyByZXM7Ci0gICAgICAgIGN5
ID0gKG1hdHJpeC5mKCkgKyAoKHNpbmEgKiBtYXRyaXguZSgpKSAvICgxIC0gY29zYSkpKSAvIHJl
czsKLQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY3ggPSAwLjA7Ci0gICAgY3kgPSAw
LjA7Ci0gICAgYW5nbGUgPSAwLjA7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBTVkdBbmltYXRlVHJh
bnNmb3JtRWxlbWVudDo6Y3VycmVudFRyYW5zZm9ybSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
Y3VycmVudFRyYW5zZm9ybTsKLX0KLQogfQogCiAvLyB2aW06dHM9NDpub2V0CkluZGV4OiBrc3Zn
Mi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9z
dmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAkocmV2aXNpb24gMTkxMzcpCisrKyBrc3Zn
Mi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogCiAjaW5jbHVkZSAiU1ZHQW5pbWF0aW9uRWxlbWVudC5oIgogI2luY2x1ZGUg
IlNWR1RyYW5zZm9ybS5oIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybURpc3RhbmNlLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsMzggKzQxLDMwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdmlydHVhbCBib29sIGhhc1ZhbGlkVGFyZ2V0KCkgY29uc3Q7CiAKICAgICAg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwot
Ci0gICAgICAgIHZvaWQgYXBwbHlBbmltYXRpb25Ub1ZhbHVlKFNWR1RyYW5zZm9ybUxpc3QqKTsK
LQotICAgICAgICAvLyBIZWxwZXJzCi0gICAgICAgIFNWR1RyYW5zZm9ybSBwYXJzZVRyYW5zZm9y
bVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAgICAgICB2b2lkIGNhbGN1bGF0ZVJvdGF0
aW9uRnJvbU1hdHJpeChjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBkb3VibGUmIGFuZ2xlLCBkb3Vi
bGUmIGN4LCBkb3VibGUmIGN5KSBjb25zdDsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3Vy
cmVudFRyYW5zZm9ybSgpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgdmlydHVhbCBib29sIHVw
ZGF0ZUFuaW1hdGlvbkJhc2VWYWx1ZUZyb21FbGVtZW50KCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBhcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQoKTsKIAogICAgIHByb3RlY3RlZDoKICAgICAg
ICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIHRoaXM7IH0KLSAgICAgICAgdm9pZCBzdG9yZUluaXRpYWxWYWx1ZSgpOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgcmVzZXRWYWx1ZXMoKTsKICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9v
bCB1cGRhdGVDdXJyZW50VmFsdWUoZG91YmxlIHRpbWVQZXJjZW50YWdlKTsKLSAgICAgICAgdmly
dHVhbCBib29sIGhhbmRsZVN0YXJ0Q29uZGl0aW9uKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVMYXN0VmFsdWVXaXRoQ3VycmVudCgpOworICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRl
QW5pbWF0ZWRWYWx1ZShFQW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2UsIHVuc2ln
bmVkIHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KTsKKyAgICAgICAgdmlydHVhbCBi
b29sIGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhFQW5pbWF0aW9uTW9kZSwgdW5zaWduZWQgdmFs
dWVJbmRleCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBpbnQgbV9jdXJyZW50SXRlbTsKKyAg
ICAgICAgLy8gSGVscGVycworICAgICAgICBTVkdUcmFuc2Zvcm0gcGFyc2VUcmFuc2Zvcm1WYWx1
ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICAgICAgdm9pZCBjYWxjdWxhdGVSb3RhdGlvbkZy
b21NYXRyaXgoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZG91YmxlJiBhbmdsZSwgZG91YmxlJiBj
eCwgZG91YmxlJiBjeSkgY29uc3Q7CisgICAgICAgICAgICAKICAgICAgICAgU1ZHVHJhbnNmb3Jt
OjpTVkdUcmFuc2Zvcm1UeXBlIG1fdHlwZTsKIAogICAgICAgICBTVkdUcmFuc2Zvcm0gbV90b1Ry
YW5zZm9ybTsKICAgICAgICAgU1ZHVHJhbnNmb3JtIG1fZnJvbVRyYW5zZm9ybTsKLSAgICAgICAg
U1ZHVHJhbnNmb3JtIG1faW5pdGlhbFRyYW5zZm9ybTsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zv
cm0gbV9sYXN0VHJhbnNmb3JtOwotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9jdXJyZW50VHJh
bnNmb3JtOwogCi0gICAgICAgIG11dGFibGUgYm9vbCBtX3JvdGF0ZVNwZWNpYWxDYXNlIDogMTsK
LSAgICAgICAgYm9vbCBtX3RvUm90YXRlU3BlY2lhbENhc2UgOiAxOwotICAgICAgICBib29sIG1f
ZnJvbVJvdGF0ZVNwZWNpYWxDYXNlIDogMTsKKyAgICAgICAgU1ZHVHJhbnNmb3JtIG1fYmFzZVRy
YW5zZm9ybTsKKyAgICAgICAgU1ZHVHJhbnNmb3JtIG1fYW5pbWF0ZWRUcmFuc2Zvcm07CisgICAg
ICAgIAorICAgICAgICBTVkdUcmFuc2Zvcm1EaXN0YW5jZSBtX3RyYW5zZm9ybURpc3RhbmNlOwog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IGtzdmcyL3N2Zy9TVkdBbmlt
YXRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQW5pbWF0aW9uRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE5MTM3KQorKysga3N2ZzIvc3ZnL1NWR0FuaW1hdGlvbkVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMTIgKzEyOCwzNyBAQCB2b2lkIFNWR0FuaW1h
dGlvbkVsZW1lbnQ6OnBhcnNlS2V5TnVtYmVyCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IGtleU51bWJlcnMuYXBwZW5kKG51bWJlcik7CiAgICAgICAgIAotICAgICAgICBpZiAoIShza2lw
T3B0aW9uYWxTcGFjZXMocHRyLCBlbmQpICYmICpwdHIgPT0gJzsnKSkKKyAgICAgICAgaWYgKCFz
a2lwT3B0aW9uYWxTcGFjZXMocHRyLCBlbmQpIHx8ICpwdHIgIT0gJzsnKQogICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBwdHIrKzsKICAgICAgICAgc2tpcE9wdGlvbmFsU3BhY2VzKHB0ciwg
ZW5kKTsKICAgICB9CiB9CiAKK3N0YXRpYyB2b2lkIHBhcnNlVmFsdWVzKFZlY3RvcjxTdHJpbmc+
JiB2YWx1ZXMsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgY29uc3QgVUNoYXIqIHB0ciA9
IHZhbHVlLmNoYXJhY3RlcnMoKTsKKyAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgdmFsdWUu
bGVuZ3RoKCk7CisgICAgc2tpcE9wdGlvbmFsU3BhY2VzKHB0ciwgZW5kKTsKKyAgICB3aGlsZSAo
cHRyIDwgZW5kKSB7CisgICAgICAgIC8vIFNNSUwgMy4yLjIgOiBMZWFkaW5nIGFuZCB0cmFpbGlu
ZyB3aGl0ZSBzcGFjZSwgYW5kIHdoaXRlIHNwYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgc2VtaWNvbG9u
IHNlcGFyYXRvcnMsIHdpbGwgYmUgaWdub3JlZC4KKyAgICAgICAgY29uc3QgVUNoYXIqIHZhbHVl
U3RhcnQgPSBwdHI7CisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSAnOycpIC8v
IGNhcmVmdWwgbm90IHRvIGlnbm9yZSB3aGl0ZXNwYWNlIGluc2lkZSB2YWx1ZXMKKyAgICAgICAg
ICAgIHB0cisrOworICAgICAgICBpZiAocHRyID09IHZhbHVlU3RhcnQpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgCisgICAgICAgIC8vIHdhbGsgYmFja3dhcmRzIGZyb20gdGhlIDsgdG8g
aWdub3JlIGFueSB3aGl0ZXNwYWNlCisgICAgICAgIGNvbnN0IFVDaGFyKiB2YWx1ZUVuZCA9IHB0
cjsKKyAgICAgICAgd2hpbGUgKHZhbHVlU3RhcnQgPCB2YWx1ZUVuZCAmJiBpc1doaXRlc3BhY2Uo
KnZhbHVlRW5kKSkKKyAgICAgICAgICAgIHZhbHVlRW5kLS07CisgICAgICAgIAorICAgICAgICB2
YWx1ZXMuYXBwZW5kKFN0cmluZyh2YWx1ZVN0YXJ0LCB2YWx1ZUVuZCAtIHZhbHVlU3RhcnQpKTsK
KyAgICAgICAgCisgICAgICAgIHNraXBPcHRpb25hbFNwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5k
LCAnOycpOworICAgIH0KK30KKwogc3RhdGljIHZvaWQgcGFyc2VLZXlTcGxpbmVzKFZlY3RvcjxT
VkdBbmltYXRpb25FbGVtZW50OjpLZXlTcGxpbmU+JiBrZXlTcGxpbmVzLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQogewogICAgIGRvdWJsZSBudW1iZXIgPSAwLmY7CkBAIC0xNTcsOCArMTgyLDkgQEAg
c3RhdGljIHZvaWQgcGFyc2VLZXlTcGxpbmVzKFZlY3RvcjxTVkdBbgogICAgICAgICBrZXlTcGxp
bmUuY29udHJvbDIuc2V0WShudW1iZXIpOwogICAgICAgICBrZXlTcGxpbmVzLmFwcGVuZChrZXlT
cGxpbmUpOwogICAgICAgICAKLSAgICAgICAgaWYgKCEoc2tpcE9wdGlvbmFsU3BhY2VzKHB0ciwg
ZW5kKSAmJiAqcHRyID09ICc7JykpCisgICAgICAgIGlmICghc2tpcE9wdGlvbmFsU3BhY2VzKHB0
ciwgZW5kKSB8fCAqcHRyICE9ICc7JykKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcHRy
Kys7CiAgICAgICAgIHNraXBPcHRpb25hbFNwYWNlcyhwdHIsIGVuZCk7CiAgICAgfQogfQpAQCAt
MjczLDggKzI5OSw4IEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6cGFyc2VNYXBwZWRBdHQK
ICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gInBhY2VkIikKICAgICAgICAgICAgIG1fY2FsY01v
ZGUgPSBDQUxDTU9ERV9QQUNFRDsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6dmFsdWVzQXR0cikgewotICAgICAgICBtX3ZhbHVlcyA9IG5ldyBTVkdTdHJpbmdMaXN0
KCk7Ci0gICAgICAgIG1fdmFsdWVzLT5wYXJzZSh2YWx1ZSwgJzsnKTsKKyAgICAgICAgbV92YWx1
ZXMuY2xlYXIoKTsKKyAgICAgICAgcGFyc2VWYWx1ZXMobV92YWx1ZXMsIHZhbHVlKTsKICAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6a2V5VGltZXNBdHRyKSB7CiAgICAg
ICAgIG1fa2V5VGltZXMuY2xlYXIoKTsKICAgICAgICAgcGFyc2VLZXlOdW1iZXJzKG1fa2V5VGlt
ZXMsIHZhbHVlKTsKQEAgLTM5MSw4ICs0MTcsMTEgQEAgdm9pZCBTVkdBbmltYXRpb25FbGVtZW50
OjpjbG9zZVJlbmRlcmVyKAogICAgIFNWR0VsZW1lbnQ6OmNsb3NlUmVuZGVyZXIoKTsKIH0KIAot
U3RyaW5nIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnRhcmdldEF0dHJpYnV0ZSgpIGNvbnN0CitTdHJp
bmcgU1ZHQW5pbWF0aW9uRWxlbWVudDo6dGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZSgpIGNv
bnN0CiB7CisgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIGlzIG5vdCBlbnRpcmVseSBjb3JyZWN0
CisgICAgLy8gSXQgZG9lcyBub3QgcHJvcGVybHkgZ3JhYiB0aGUgdHJ1ZSAiYW5pbVZhbCIgaW5z
dGVhZCBncmFicyB0aGUgYmFzZVZhbCAob3Igc29tZXRoaW5nIHZlcnkgY2xvc2UpCisKICAgICBp
ZiAoIXRhcmdldEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIApAQCAt
NDI4LDggKzQ1NywxMCBAQCBTdHJpbmcgU1ZHQW5pbWF0aW9uRWxlbWVudDo6dGFyZ2V0QXR0cmli
CiAgICAgcmV0dXJuIHJldDsKIH0KIAotdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpzZXRUYXJn
ZXRBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6c2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQog
eworICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBpcyBub3QgZW50aXJlbHkgY29ycmVjdAorICAg
IC8vIEl0IGRvZXMgbm90IHByb3Blcmx5IHNldCB0aGUgImFuaW1WYWwiLCByYXRoZXIgaXQgc2V0
cyB0aGUgImJhc2VWYWwiCiAgICAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0QXR0cmli
dXRlKHRhcmdldEVsZW1lbnQoKSwgbV9hdHRyaWJ1dGVOYW1lLCB2YWx1ZSwgc3RhdGljX2Nhc3Q8
RUF0dHJpYnV0ZVR5cGU+KG1fYXR0cmlidXRlVHlwZSkpOwogfQogCkBAIC00ODUsNyArNTE2LDkg
QEAgYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc0FjY3VtdWxhdGVkKAogCiBFQW5pbWF0aW9u
TW9kZSBTVkdBbmltYXRpb25FbGVtZW50OjpkZXRlY3RBbmltYXRpb25Nb2RlKCkgY29uc3QKIHsK
LSAgICBpZiAoKCFtX2Zyb20uaXNFbXB0eSgpICYmICFtX3RvLmlzRW1wdHkoKSkgfHwgKCFtX3Rv
LmlzRW1wdHkoKSkpIHsgLy8gdG8vZnJvbS10byBhbmltYXRpb24KKyAgICBpZiAoaGFzQXR0cmli
dXRlKFNWR05hbWVzOjp2YWx1ZXNBdHRyKSkKKyAgICAgICAgcmV0dXJuIFZBTFVFU19BTklNQVRJ
T047CisgICAgZWxzZSBpZiAoKCFtX2Zyb20uaXNFbXB0eSgpICYmICFtX3RvLmlzRW1wdHkoKSkg
fHwgKCFtX3RvLmlzRW1wdHkoKSkpIHsgLy8gdG8vZnJvbS10byBhbmltYXRpb24KICAgICAgICAg
aWYgKCFtX2Zyb20uaXNFbXB0eSgpKSAvLyBmcm9tLXRvIGFuaW1hdGlvbgogICAgICAgICAgICAg
cmV0dXJuIEZST01fVE9fQU5JTUFUSU9OOwogICAgICAgICBlbHNlCkBAIC00OTcsNjAgKzUzMCwx
MCBAQCBFQW5pbWF0aW9uTW9kZSBTVkdBbmltYXRpb25FbGVtZW50OjpkZXRlCiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHJldHVybiBCWV9BTklNQVRJT047CiAgICAgfQotICAgIGVsc2UgaWYg
KG1fdmFsdWVzKQotICAgICAgICByZXR1cm4gVkFMVUVTX0FOSU1BVElPTjsKIAogICAgIHJldHVy
biBOT19BTklNQVRJT047CiB9CiAKLXN0YXRpYyBpbmxpbmUgVmVjdG9yPGRvdWJsZT4gc3RhcnRU
aW1lc0ZvclZhbHVlcyhjb25zdCBTVkdTdHJpbmdMaXN0KiB2YWx1ZXMpCi17Ci0gICAgLy8gQ2Fs
Y3VsYXRlIHRoZSByZWxhdGl2ZSB0aW1lIHBlcmNlbnRhZ2VzIGZvciBlYWNoICdmYWRlJy4KLSAg
ICAvLyBFdmVudHVhbGx5IHZhbHVlIHNwYWNpbmcgd2lsbCBuZWVkIHRvIHRha2Uga2V5U3BsaW5l
cyBpbnRvIGFjY291bnQKLSAgICB1bnNpZ25lZCBsb25nIGl0ZW1zID0gdmFsdWVzLT5udW1iZXJP
Zkl0ZW1zKCk7Ci0gICAgVmVjdG9yPGRvdWJsZT4gc3RhcnRUaW1lcyhpdGVtcyk7Ci0gICAgc3Rh
cnRUaW1lc1swXSA9IDAuMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgaXRlbXM7ICsr
aSkKLSAgICAgICAgc3RhcnRUaW1lc1tpXSA9ICgoKDIuMCAqIGkpKSAvIChpdGVtcyAtIDEpKSAv
IDIuMDsKLSAgICByZXR1cm4gc3RhcnRUaW1lczsKLX0KLQotaW50IFNWR0FuaW1hdGlvbkVsZW1l
bnQ6OmNhbGN1bGF0ZUN1cnJlbnRWYWx1ZUl0ZW0oZG91YmxlIHRpbWVQZXJjZW50YWdlKQotewot
ICAgIGlmICghbV92YWx1ZXMpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICAKLSAgICB1bnNpZ25l
ZCBsb25nIGl0ZW1zID0gbV92YWx1ZXMtPm51bWJlck9mSXRlbXMoKTsKLSAgICBWZWN0b3I8ZG91
YmxlPiBzdGFydFRpbWVzID0gc3RhcnRUaW1lc0ZvclZhbHVlcyhtX3ZhbHVlcy5nZXQoKSk7Ci0K
LSAgICBpbnQgaXRlbUJ5UGVyY2VudGFnZSA9IC0xOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBpdGVtcyAtIDE7ICsraSkgewotICAgICAgICBpZiAodGltZVBlcmNlbnRhZ2UgPj0gc3Rh
cnRUaW1lc1tpXSAmJiB0aW1lUGVyY2VudGFnZSA8PSBzdGFydFRpbWVzW2kgKyAxXSkgewotICAg
ICAgICAgICAgaXRlbUJ5UGVyY2VudGFnZSA9IGk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBpdGVtQnlQZXJjZW50YWdlOwotfQotCi1kb3VibGUg
U1ZHQW5pbWF0aW9uRWxlbWVudDo6Y2FsY3VsYXRlUmVsYXRpdmVUaW1lUGVyY2VudGFnZShkb3Vi
bGUgdGltZVBlcmNlbnRhZ2UsIGludCBjdXJyZW50SXRlbSkKLXsKLSAgICBpZiAoY3VycmVudEl0
ZW0gPT0gLTEgfHwgIW1fdmFsdWVzKQotICAgICAgICByZXR1cm4gMC4wOwotCi0gICAgVmVjdG9y
PGRvdWJsZT4gc3RhcnRUaW1lcyA9IHN0YXJ0VGltZXNGb3JWYWx1ZXMobV92YWx1ZXMuZ2V0KCkp
OwotCi0gICAgZG91YmxlIGJlZ2luVGltZVBlcmNlbnRhZ2UgPSBzdGFydFRpbWVzW2N1cnJlbnRJ
dGVtXTsKLSAgICBkb3VibGUgZW5kVGltZVBlcmNlbnRhZ2UgPSBzdGFydFRpbWVzW2N1cnJlbnRJ
dGVtICsgMV07Ci0KLSAgICBpZiAoKGVuZFRpbWVQZXJjZW50YWdlIC0gYmVnaW5UaW1lUGVyY2Vu
dGFnZSkgPT0gMC4wKQotICAgICAgICByZXR1cm4gMC4wOwotCi0gICAgcmV0dXJuICgodGltZVBl
cmNlbnRhZ2UgLSBiZWdpblRpbWVQZXJjZW50YWdlKSAvCi0gICAgICAgICAgICAoZW5kVGltZVBl
cmNlbnRhZ2UgLSBiZWdpblRpbWVQZXJjZW50YWdlKSk7Ci19Ci0KIGRvdWJsZSBTVkdBbmltYXRp
b25FbGVtZW50OjpyZXBlYXRpb25zKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9yZXBldGl0aW9u
czsKQEAgLTU5Myw0NCArNTc2LDE4NiBAQCBzdGF0aWMgZG91YmxlIGNhbGN1bGF0ZVRpbWVQZXJj
ZW50YWdlKGRvCiAgICAgcmV0dXJuIHBlcmNlbnRhZ2U7CiB9CiAKLXZvaWQgU1ZHQW5pbWF0aW9u
RWxlbWVudDo6aGFuZGxlVGltZXJFdmVudChkb3VibGUgdGltZVBlcmNlbnRhZ2UpCitzdGF0aWMg
aW5saW5lIHZvaWQgYWRqdXN0UGVyY2VudGFnZVBhc3RGb3JLZXlTcGxpbmVzKGNvbnN0IFZlY3Rv
cjxTVkdBbmltYXRpb25FbGVtZW50OjpLZXlTcGxpbmU+JiBrZXlTcGxpbmVzLCB1bnNpZ25lZCB2
YWx1ZUluZGV4LCBmbG9hdCYgcGVyY2VudGFnZVBhc3QpCit7CisgICAgaWYgKHBlcmNlbnRhZ2VQ
YXN0ID09IDAuMGYpIC8vIHZhbHVlcyBhdCBrZXkgdGltZXMgbmVlZCBubyBzcGxpbmUgYWRqdXN0
bWVudAorICAgICAgICByZXR1cm47CisgICAgY29uc3QgU1ZHQW5pbWF0aW9uRWxlbWVudDo6S2V5
U3BsaW5lJiBrZXlTcGxpbmUgPSBrZXlTcGxpbmVzW3ZhbHVlSW5kZXhdOworICAgIFBhdGggcGF0
aDsKKyAgICBwYXRoLm1vdmVUbyhGbG9hdFBvaW50KCkpOworICAgIHBhdGguYWRkQmV6aWVyQ3Vy
dmVUbyhrZXlTcGxpbmUuY29udHJvbDEsIGtleVNwbGluZS5jb250cm9sMiwgRmxvYXRQb2ludCgx
LjBmLCAxLjBmKSk7CisgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gdXNlIGEgeS1hdC14IGZ1
bmN0aW9uIG9uIHBhdGgsIHRvIGNvbXB1dGUgdGhlIHkgdmFsdWUgdGhlbiBtdWx0aXBseSBwZXJj
ZW50YWdlUGFzdCBieSB0aGF0IHZhbHVlCit9CisKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6
dmFsdWVJbmRleEFuZFBlcmNlbnRhZ2VQYXN0Rm9yRGlzdGFuY2UoZmxvYXQgZGlzdGFuY2VQZXJj
ZW50YWdlLCB1bnNpZ25lZCYgdmFsdWVJbmRleCwgZmxvYXQmIHBlcmNlbnRhZ2VQYXN0KQorewor
ICAgIC8vIFVuc3BlY2lmaWVkOiBhbmltYXRpb24gZWxlbWVudHMgd2hpY2ggZG8gbm90IHN1cHBv
cnQgQ0FMQ01PREVfUEFDRUQsIHdlIGp1c3QgYWx3YXlzIHNob3cgdGhlIGZpcnN0IHZhbHVlCisg
ICAgdmFsdWVJbmRleCA9IDA7CisgICAgcGVyY2VudGFnZVBhc3QgPSAwOworfQorCitmbG9hdCBT
VkdBbmltYXRpb25FbGVtZW50OjpjYWxjdWxhdGVUb3RhbERpc3RhbmNlKCkKK3sKKyAgICByZXR1
cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNhY3VsYXRlVmFsdWVJbmRleEZvcktleVRp
bWVzKGZsb2F0IHRpbWVQZXJjZW50YWdlLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXlUaW1lcywg
dW5zaWduZWQmIHZhbHVlSW5kZXgsIGZsb2F0JiBsYXN0S2V5VGltZSwgZmxvYXQmIG5leHRLZXlU
aW1lKQoreworICAgIHVuc2lnbmVkIGtleVRpbWVzQ291bnRNaW51c09uZSA9IGtleVRpbWVzLnNp
emUoKSAtIDE7CisgICAgdmFsdWVJbmRleCA9IDA7CisgICAgQVNTRVJUKHRpbWVQZXJjZW50YWdl
ID49IGtleVRpbWVzLmZpcnN0KCkpOworICAgIHdoaWxlICgodmFsdWVJbmRleCA8IGtleVRpbWVz
Q291bnRNaW51c09uZSkgJiYgKHRpbWVQZXJjZW50YWdlID49IGtleVRpbWVzW3ZhbHVlSW5kZXgg
KyAxXSkpCisgICAgICAgIHZhbHVlSW5kZXgrKzsKKyAgICAKKyAgICBsYXN0S2V5VGltZSA9IGtl
eVRpbWVzW3ZhbHVlSW5kZXhdOworICAgIGlmICh2YWx1ZUluZGV4IDwga2V5VGltZXNDb3VudE1p
bnVzT25lKQorICAgICAgICBuZXh0S2V5VGltZSA9IGtleVRpbWVzW3ZhbHVlSW5kZXggKyAxXTsK
KyAgICBlbHNlCisgICAgICAgIG5leHRLZXlUaW1lID0gbGFzdEtleVRpbWU7Cit9CisKK2Jvb2wg
U1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNWYWxpZEFuaW1hdGlvbigpIGNvbnN0CiB7CisgICAgRUFu
aW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSA9IGRldGVjdEFuaW1hdGlvbk1vZGUoKTsKKyAgICBp
ZiAoIWhhc1ZhbGlkVGFyZ2V0KCkgfHwgKGFuaW1hdGlvbk1vZGUgPT0gTk9fQU5JTUFUSU9OKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChhbmltYXRpb25Nb2RlID09IFZBTFVFU19B
TklNQVRJT04pIHsKKyAgICAgICAgaWYgKCFtX3ZhbHVlcy5zaXplKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2tleVRpbWVzLnNpemUoKSkgeworICAgICAgICAg
ICAgaWYgKChtX3ZhbHVlcy5zaXplKCkgIT0gbV9rZXlUaW1lcy5zaXplKCkpIHx8IChtX2tleVRp
bWVzLmZpcnN0KCkgIT0gMCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgaWYgKCgobV9jYWxjTW9kZSA9PSBDQUxDTU9ERV9TUExJTkUpIHx8IChtX2NhbGNNb2Rl
ID09IENBTENNT0RFX0xJTkVBUikpICYmIChtX2tleVRpbWVzLmxhc3QoKSAhPSAxKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBmbG9hdCBsYXN0S2V5VGltZSA9
IDA7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHggPSAwOyB4IDwgbV9rZXlUaW1lcy5zaXpl
KCk7IHgrKykgeworICAgICAgICAgICAgICAgIGlmIChtX2tleVRpbWVzW3hdIDwgbGFzdEtleVRp
bWUgfHwgbV9rZXlUaW1lc1t4XSA+IDEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobV9rZXlTcGxpbmVzLnNp
emUoKSkgeworICAgICAgICAgICAgaWYgKChtX3ZhbHVlcy5zaXplKCkgLSAxKSAhPSBtX2tleVNw
bGluZXMuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgeCA9IDA7IHggPCBtX2tleVRpbWVzLnNpemUoKTsgeCsrKQorICAgICAg
ICAgICAgICAgIGlmIChtX2tleVRpbWVzW3hdIDwgMCB8fCBtX2tleVRpbWVzW3hdID4gMSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZVZhbHVl
SW5kZXhBbmRQZXJjZW50YWdlUGFzdChmbG9hdCB0aW1lUGVyY2VudGFnZSwgdW5zaWduZWQmIHZh
bHVlSW5kZXgsIGZsb2F0JiBwZXJjZW50YWdlUGFzdCkKK3sKKyAgICBBU1NFUlQodGltZVBlcmNl
bnRhZ2UgPD0gMS4wZik7CisgICAgQVNTRVJUKGlzVmFsaWRBbmltYXRpb24oKSk7CisgICAgRUFu
aW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSA9IGRldGVjdEFuaW1hdGlvbk1vZGUoKTsKKyAgICAK
KyAgICAvLyB0by1hbmltYXRpb25zIGhhdmUgdGhlaXIgb3duIHNwZWNpYWwgaGFuZGxpbmcKKyAg
ICBpZiAoYW5pbWF0aW9uTW9kZSA9PSBUT19BTklNQVRJT04pCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICAvLyBwYWNlZCBpcyBzcGVjaWFsLCBjYWN1bGF0ZXMgdmFsdWVzIGJhc2VkIG9uIGRp
c3RhbmNlIGluc3RlYWQgb2YgdGltZQorICAgIGlmIChtX2NhbGNNb2RlID09IENBTENNT0RFX1BB
Q0VEKSB7CisgICAgICAgIGZsb2F0IHRvdGFsRGlzdGFuY2UgPSBjYWxjdWxhdGVUb3RhbERpc3Rh
bmNlKCk7CisgICAgICAgIGZsb2F0IGRpc3RhbmNlUGVyY2VudGFnZSA9IHRvdGFsRGlzdGFuY2Ug
KiB0aW1lUGVyY2VudGFnZTsKKyAgICAgICAgdmFsdWVJbmRleEFuZFBlcmNlbnRhZ2VQYXN0Rm9y
RGlzdGFuY2UoZGlzdGFuY2VQZXJjZW50YWdlLCB2YWx1ZUluZGV4LCBwZXJjZW50YWdlUGFzdCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gRmlndXJlIG91dCB3aGF0IG91
ciBjdXJyZW50IGluZGV4IGlzIGJhc2VkIG9uIG9uIHRpbWUKKyAgICAvLyBhbGwgZnVydGhlciBj
YWxjdWxhdGlvbnMgYXJlIGJhc2VkIG9uIHRpbWUgcGVyY2VudGFnZXMsIHRvIGFsbG93IHVuaWZ5
aW5nIGtleVRpbWVzIGhhbmRsaW5nICYgbm9ybWFsIGFuaW1hdGlvbgorICAgIGZsb2F0IGxhc3RL
ZXlUaW1lUGVyY2VudGFnZSA9IDA7CisgICAgZmxvYXQgbmV4dEtleVRpbWVQZXJjZW50YWdlID0g
MDsKKyAgICBpZiAobV9rZXlUaW1lcy5zaXplKCkgJiYgKG1fa2V5VGltZXMuc2l6ZSgpID09IG1f
dmFsdWVzLnNpemUoKSkpCisgICAgICAgIGNhY3VsYXRlVmFsdWVJbmRleEZvcktleVRpbWVzKHRp
bWVQZXJjZW50YWdlLCBtX2tleVRpbWVzLCB2YWx1ZUluZGV4LCBsYXN0S2V5VGltZVBlcmNlbnRh
Z2UsIG5leHRLZXlUaW1lUGVyY2VudGFnZSk7CisgICAgZWxzZSB7CisgICAgICAgIGZsb2F0IGxh
c3RQb3NzaWJsZUluZGV4ID0gKG1fdmFsdWVzLnNpemUoKSA/IG1fdmFsdWVzLnNpemUoKSAtIDE6
IDEpOworICAgICAgICBmbG9hdCBmbG9vcmVkVmFsdWVJbmRleCA9IGZsb29yZih0aW1lUGVyY2Vu
dGFnZSAqIGxhc3RQb3NzaWJsZUluZGV4KTsKKyAgICAgICAgdmFsdWVJbmRleCA9IGZsb29yZWRW
YWx1ZUluZGV4OworICAgICAgICBsYXN0S2V5VGltZVBlcmNlbnRhZ2UgPSBmbG9vcmVkVmFsdWVJ
bmRleCAvIGxhc3RQb3NzaWJsZUluZGV4OworICAgICAgICBuZXh0S2V5VGltZVBlcmNlbnRhZ2Ug
PSAoZmxvb3JlZFZhbHVlSW5kZXggKyAxKSAvIGxhc3RQb3NzaWJsZUluZGV4OworICAgIH0KKyAg
ICAKKyAgICAvLyBObyBmdXJ0aGVyIGNhY3VsYXRpb24gaXMgbmVlZGVkIGlmIHdlJ3JlIGV4YWN0
bHkgb24gYW4gaW5kZXguCisgICAgaWYgKHRpbWVQZXJjZW50YWdlID09IGxhc3RLZXlUaW1lUGVy
Y2VudGFnZSB8fCBsYXN0S2V5VGltZVBlcmNlbnRhZ2UgPT0gbmV4dEtleVRpbWVQZXJjZW50YWdl
KSB7CisgICAgICAgIHBlcmNlbnRhZ2VQYXN0ID0gMC4wZjsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICAvLyBvdGhlcndpc2Ugd2UgZGVjaWRlIHdoYXQgcGVyY2VudCBhZnRlciB0
aGF0IGluZGV4CisgICAgaWYgKChtX2NhbGNNb2RlID09IENBTENNT0RFX1NQTElORSkgJiYgKG1f
a2V5U3BsaW5lcy5zaXplKCkgPT0gKG1fdmFsdWVzLnNpemUoKSAtIDEpKSkKKyAgICAgICAgYWRq
dXN0UGVyY2VudGFnZVBhc3RGb3JLZXlTcGxpbmVzKG1fa2V5U3BsaW5lcywgdmFsdWVJbmRleCwg
cGVyY2VudGFnZVBhc3QpOworICAgIGVsc2UgaWYgKG1fY2FsY01vZGUgPT0gQ0FMQ01PREVfRElT
Q1JFVEUpCisgICAgICAgIHBlcmNlbnRhZ2VQYXN0ID0gMC4wZjsKKyAgICBlbHNlIHsgLy8gZGVm
YXVsdCAoYW5kIGZhbGxiYWNrKSBtb2RlOiBsaW5lYXIKKyAgICAgICAgZmxvYXQga2V5VGltZVNw
YW4gPSBuZXh0S2V5VGltZVBlcmNlbnRhZ2UgLSBsYXN0S2V5VGltZVBlcmNlbnRhZ2U7CisgICAg
ICAgIGZsb2F0IHRpbWVTaW5jZUxhc3RLZXlUaW1lID0gdGltZVBlcmNlbnRhZ2UgLSBsYXN0S2V5
VGltZVBlcmNlbnRhZ2U7CisgICAgICAgIHBlcmNlbnRhZ2VQYXN0ID0gKHRpbWVTaW5jZUxhc3RL
ZXlUaW1lIC8ga2V5VGltZVNwYW4pOworICAgIH0KK30KKworYm9vbCBTVkdBbmltYXRpb25FbGVt
ZW50Ojp1cGRhdGVBbmltYXRpb25CYXNlVmFsdWVGcm9tRWxlbWVudCgpCit7CisgICAgbV9iYXNl
VmFsdWUgPSB0YXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKCk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVt
ZW50KCkKK3sKKyAgICBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKG1fYW5pbWF0ZWRW
YWx1ZSk7Cit9CisKK3ZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aGFuZGxlVGltZXJFdmVudChk
b3VibGUgZWxhcHNlZFNlY29uZHMsIGRvdWJsZSB0aW1lUGVyY2VudGFnZSkKK3sKKyAgICB0aW1l
UGVyY2VudGFnZSA9IGZtaW4odGltZVBlcmNlbnRhZ2UsIDEuMCk7CiAgICAgaWYgKCFjb25uZWN0
ZWRUb1RpbWVyKCkpIHsKICAgICAgICAgY29ubmVjdFRpbWVyKCk7Ci0gICAgICAgIGhhbmRsZVN0
YXJ0Q29uZGl0aW9uKCk7IC8vIE5lZWQgdG8gY2hlY2sgYm9vbCByZXR1cm4gaWYgYWRkaW5nIGFu
eXRoaW5nIGFmdGVyIHRoaXMgY2FsbAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAg
IGlmICghdXBkYXRlQ3VycmVudFZhbHVlKHRpbWVQZXJjZW50YWdlKSkKLSAgICAgICAgcmV0dXJu
OworLy8gICAgaWYgKGlzQWNjdW11bGF0ZWQoKSAmJiByZXBlYXRpb25zKCkgIT0gMC4wKQorLy8g
ICAgICAgIGFjY3VtdWxhdGVGb3JSZXBldGl0aW9ucyhtX3JlcGV0aXRpb25zKTsKKyAgICAKKyAg
ICBFQW5pbWF0aW9uTW9kZSBhbmltYXRpb25Nb2RlID0gZGV0ZWN0QW5pbWF0aW9uTW9kZSgpOwor
ICAgIAorICAgIHVuc2lnbmVkIHZhbHVlSW5kZXggPSAwOworICAgIGZsb2F0IHBlcmNlbnRhZ2VQ
YXN0ID0gMDsKKyAgICBjYWxjdWxhdGVWYWx1ZUluZGV4QW5kUGVyY2VudGFnZVBhc3QodGltZVBl
cmNlbnRhZ2UsIHZhbHVlSW5kZXgsIHBlcmNlbnRhZ2VQYXN0KTsKKyAgICAgICAgCisgICAgY2Fs
Y3VsYXRlRnJvbUFuZFRvVmFsdWVzKGFuaW1hdGlvbk1vZGUsIHZhbHVlSW5kZXgpOworICAgIAor
ICAgIHVwZGF0ZUFuaW1hdGVkVmFsdWUoYW5pbWF0aW9uTW9kZSwgdGltZVBlcmNlbnRhZ2UsIHZh
bHVlSW5kZXgsIHBlcmNlbnRhZ2VQYXN0KTsKICAgICAKICAgICBpZiAodGltZVBlcmNlbnRhZ2Ug
PT0gMS4wKSB7CiAgICAgICAgIGlmICgobV9yZXBlYXRDb3VudCA+IDAgJiYgbV9yZXBldGl0aW9u
cyA8IG1fcmVwZWF0Q291bnQgLSAxKSB8fCBpc0luZGVmaW5pdGUobV9yZXBlYXRDb3VudCkpIHsK
LSAgICAgICAgICAgIHVwZGF0ZUxhc3RWYWx1ZVdpdGhDdXJyZW50KCk7CiAgICAgICAgICAgICBt
X3JlcGV0aXRpb25zKys7CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGRpc2Nvbm5lY3RUaW1lcigpOwotICAgICAgICByZXNldFZhbHVlcygpOyAgIAor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGRpc2Nvbm5lY3RUaW1lcigpOwogICAgIH0KIH0K
IAotYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojp1cGRhdGVGb3JFbGFwc2VkU2Vjb25kcyhkb3Vi
bGUgZWxhcHNlZFNlY29uZHMpCitib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnVwZGF0ZUFuaW1h
dGVkVmFsdWVGb3JFbGFwc2VkU2Vjb25kcyhkb3VibGUgZWxhcHNlZFNlY29uZHMpCiB7CisvLyAg
ICBpZiAoaXNTdG9wcGVkKCkpIHsKKy8vICAgICAgICBpZiAobV9maWxsID09IEZJTExfRlJFRVpF
KQorLy8gICAgICAgICAgICBlbGFwc2VkU2Vjb25kcyA9IG1fc3RvcHBlZFRpbWU7CisvLyAgICAg
ICAgZWxzZQorLy8gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisvLyAgICB9CisgICAgCiAgICAg
Ly8gVmFsaWRhdGUgYW5pbWF0aW9uIHRpbWluZyBzZXR0aW5nczoKICAgICAvLyAjMSAoZHVyYXRp
b24gPiAwKSAtPiBmaW5lCiAgICAgLy8gIzIgKGR1cmF0aW9uIDw9IDAuMCAmJiBlbmQgPiAwKSAt
PiBmaW5lCi0gICAgCiAgICAgaWYgKChtX3NpbXBsZUR1cmF0aW9uIDw9IDAuMCAmJiBtX2VuZCA8
PSAwLjApIHx8IChpc0luZGVmaW5pdGUobV9zaW1wbGVEdXJhdGlvbikgJiYgbV9lbmQgPD0gMC4w
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBJZ25vcmUgZHVyPSIwIiBvciBkdXI9Ii1uZWci
CiAgICAgCiAgICAgZmxvYXQgcGVyY2VudGFnZSA9IGNhbGN1bGF0ZVRpbWVQZXJjZW50YWdlKGVs
YXBzZWRTZWNvbmRzLCBtX2JlZ2luLCBtX2VuZCwgbV9zaW1wbGVEdXJhdGlvbiwgbV9yZXBldGl0
aW9ucyk7CiAgICAgCiAgICAgaWYgKHBlcmNlbnRhZ2UgPD0gMS4wIHx8IGNvbm5lY3RlZFRvVGlt
ZXIoKSkKLSAgICAgICAgaGFuZGxlVGltZXJFdmVudChwZXJjZW50YWdlKTsKKyAgICAgICAgaGFu
ZGxlVGltZXJFdmVudChlbGFwc2VkU2Vjb25kcywgcGVyY2VudGFnZSk7CiAgICAgCi0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIHRydWU7IC8vIHZhbHVlIHdhcyB1cGRhdGVkLCBuZWVkIHRv
IGFwcGx5CiB9CiAKIH0KSW5kZXg6IGtzdmcyL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gMTkx
MzcpCisrKyBrc3ZnMi9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC04Nyw2ICs4Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU1ZHRWxlbWVudCog
dGFyZ2V0RWxlbWVudCgpIGNvbnN0OwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBib29sIGhh
c1ZhbGlkVGFyZ2V0KCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNWYWxpZEFuaW1hdGlvbigpIGNv
bnN0OwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKQEAgLTEwMCwxNiArMTAxLDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBjbG9zZVJlbmRlcmVyKCk7CiAK
LSAgICAgICAgLy8gSGVscGVycwotICAgICAgICBib29sIHVwZGF0ZUZvckVsYXBzZWRTZWNvbmRz
KGRvdWJsZSk7Ci0gICAgICAgIHZvaWQgaGFuZGxlVGltZXJFdmVudChkb3VibGUgdGltZVBlcmNl
bnRhZ2UpOwotCi0gICAgICAgIHN0YXRpYyBkb3VibGUgcGFyc2VDbG9ja1ZhbHVlKGNvbnN0IFN0
cmluZyYpOwotCi0gICAgICAgIFN0cmluZyB0YXJnZXRBdHRyaWJ1dGUoKSBjb25zdDsKLSAgICAg
ICAgdm9pZCBzZXRUYXJnZXRBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICAgICAgc3Rh
dGljIHZvaWQgc2V0VGFyZ2V0QXR0cmlidXRlKFNWR0VsZW1lbnQqIHRhcmdldCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFQXR0cmlidXRlVHlwZSA9IEFUVFJJQlVU
RVRZUEVfQVVUTyk7CisgICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRpb25CYXNlVmFs
dWVGcm9tRWxlbWVudCgpOworICAgICAgICBib29sIHVwZGF0ZUFuaW1hdGVkVmFsdWVGb3JFbGFw
c2VkU2Vjb25kcyhkb3VibGUgZWxhcHNlZFNlY29uZHMpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KCk7CiAKICAgICAgICAgU3RyaW5nIGF0dHJpYnV0
ZU5hbWUoKSBjb25zdDsKIApAQCAtMTE5LDI0ICsxMTMsMzIgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBib29sIGlzQWRkaXRpdmUoKSBjb25zdDsKICAgICAgICAgYm9vbCBpc0FjY3Vt
dWxhdGVkKCkgY29uc3Q7CiAKLSAgICAgICAgRUFuaW1hdGlvbk1vZGUgZGV0ZWN0QW5pbWF0aW9u
TW9kZSgpIGNvbnN0OwotCi0gICAgICAgIGludCBjYWxjdWxhdGVDdXJyZW50VmFsdWVJdGVtKGRv
dWJsZSB0aW1lUGVyY2VudGFnZSk7Ci0gICAgICAgIGRvdWJsZSBjYWxjdWxhdGVSZWxhdGl2ZVRp
bWVQZXJjZW50YWdlKGRvdWJsZSB0aW1lUGVyY2VudGFnZSwgaW50IGN1cnJlbnRJdGVtKTsKLQog
ICAgICAgICBkb3VibGUgcmVwZWF0aW9ucygpIGNvbnN0OwogICAgICAgICBzdGF0aWMgYm9vbCBp
c0luZGVmaW5pdGUoZG91YmxlIHZhbHVlKTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgbXV0
YWJsZSBTVkdFbGVtZW50KiBtX3RhcmdldEVsZW1lbnQ7CiAgICAgICAgIAorICAgICAgICBFQW5p
bWF0aW9uTW9kZSBkZXRlY3RBbmltYXRpb25Nb2RlKCkgY29uc3Q7CisgICAgICAgIAorICAgICAg
ICBzdGF0aWMgZG91YmxlIHBhcnNlQ2xvY2tWYWx1ZShjb25zdCBTdHJpbmcmKTsKKyAgICAgICAg
c3RhdGljIHZvaWQgc2V0VGFyZ2V0QXR0cmlidXRlKFNWR0VsZW1lbnQqIHRhcmdldCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFQXR0cmlidXRlVHlwZSA9IEFUVFJJ
QlVURVRZUEVfQVVUTyk7CisgICAgICAgIAorICAgICAgICBTdHJpbmcgdGFyZ2V0QXR0cmlidXRl
QW5pbWF0ZWRWYWx1ZSgpIGNvbnN0OworICAgICAgICB2b2lkIHNldFRhcmdldEF0dHJpYnV0ZUFu
aW1hdGVkVmFsdWUoY29uc3QgU3RyaW5nJik7CisgICAgICAgIAogICAgICAgICB2b2lkIGNvbm5l
Y3RUaW1lcigpOwogICAgICAgICB2b2lkIGRpc2Nvbm5lY3RUaW1lcigpOworCisgICAgICAgIHZp
cnR1YWwgZmxvYXQgY2FsY3VsYXRlVG90YWxEaXN0YW5jZSgpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgdmFsdWVJbmRleEFuZFBlcmNlbnRhZ2VQYXN0Rm9yRGlzdGFuY2UoZmxvYXQgZGlzdGFuY2VQ
ZXJjZW50YWdlLCB1bnNpZ25lZCYgdmFsdWVJbmRleCwgZmxvYXQmIHBlcmNlbnRhZ2VQYXN0KTsK
KyAgICAgICAgCisgICAgICAgIHZvaWQgY2FsY3VsYXRlVmFsdWVJbmRleEFuZFBlcmNlbnRhZ2VQ
YXN0KGZsb2F0IHRpbWVQZXJjZW50YWdlLCB1bnNpZ25lZCYgdmFsdWVJbmRleCwgZmxvYXQmIHBl
cmNlbnRhZ2VQYXN0KTsKICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVDdXJy
ZW50VmFsdWUoZG91YmxlIHRpbWVQZXJjZW50YWdlKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9v
bCBoYW5kbGVTdGFydENvbmRpdGlvbigpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUxhc3RWYWx1ZVdpdGhDdXJyZW50KCkgeyB9IC8vIFNlZSBidWcgMTIwNzUgZm9yIGV4cGxhaW5h
dGlvbiBvZiB3aHkgdGhpcyBpcyBhIGJhZCBBUEkKLSAgICAgICAgdmlydHVhbCB2b2lkIHJlc2V0
VmFsdWVzKCkgeyB9CisgICAgICAgIHZvaWQgaGFuZGxlVGltZXJFdmVudChkb3VibGUgZWxhcHNl
ZFNlY29uZHMsIGRvdWJsZSB0aW1lUGVyY2VudGFnZSk7CisgICAgICAgIAorICAgICAgICB2aXJ0
dWFsIGJvb2wgdXBkYXRlQW5pbWF0ZWRWYWx1ZShFQW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBl
cmNlbnRhZ2UsIHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KSA9IDA7
CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoRUFuaW1hdGlv
bk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpID0gMDsKICAgICAgICAgCiAgICAgICAgIHN0YXRp
YyB2b2lkIHBhcnNlS2V5TnVtYmVycyhWZWN0b3I8ZmxvYXQ+JiBrZXlOdW1iZXJzLCBjb25zdCBT
dHJpbmcmIHZhbHVlKTsKICAgICAgICAgc3RhdGljIHZvaWQgcGFyc2VCZWdpbk9yRW5kVmFsdWUo
ZG91YmxlJiBudW1iZXIsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwpAQCAtMTYyLDYgKzE2NCw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU3RyaW5nIG1faHJlZjsKICAgICAgICAgU3Ry
aW5nIG1fcmVwZWF0RHVyOwogICAgICAgICBTdHJpbmcgbV9hdHRyaWJ1dGVOYW1lOworICAgICAg
ICAKKyAgICAgICAgU3RyaW5nIG1fYmFzZVZhbHVlOworICAgICAgICBTdHJpbmcgbV9hbmltYXRl
ZFZhbHVlOwogCiAgICAgICAgIGRvdWJsZSBtX21heDsKICAgICAgICAgZG91YmxlIG1fbWluOwpA
QCAtMTcxLDcgKzE3Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgZG91YmxlIG1f
cmVwZXRpdGlvbnM7CiAgICAgICAgIGRvdWJsZSBtX3JlcGVhdENvdW50OwogCi0gICAgICAgIFJl
ZlB0cjxTVkdTdHJpbmdMaXN0PiBtX3ZhbHVlczsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gbV92
YWx1ZXM7CiAgICAgICAgIFZlY3RvcjxmbG9hdD4gbV9rZXlUaW1lczsKICAgICAgICAgCiAgICAg
ICAgIHN0cnVjdCBLZXlTcGxpbmUgewpJbmRleDoga3N2ZzIvc3ZnL1NWR1BhcnNlclV0aWxpdGll
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAJKHJl
dmlzaW9uIDE5MTM3KQorKysga3N2ZzIvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNiw3ICsxMTYsOCBAQCBib29sIFNWR1BvbHlQYXJzZXI6OnBhcnNlUG9p
bnRzKGNvbnN0IFN0CiAgICAgY29uc3QgVUNoYXIqIGN1ciA9IHMuY2hhcmFjdGVycygpOwogICAg
IGNvbnN0IFVDaGFyKiBlbmQgPSBjdXIgKyBzLmxlbmd0aCgpOwogCi0gICAgc2tpcE9wdGlvbmFs
U3BhY2VzKGN1ciwgZW5kKTsKKyAgICBpZiAoIXNraXBPcHRpb25hbFNwYWNlcyhjdXIsIGVuZCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGludCBzZWdtZW50TnVtID0gMDsKICAgICB3
aGlsZSAoMSkgewpJbmRleDoga3N2ZzIvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtzdmcyL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaAkocmV2aXNpb24gMTkxMzcpCisr
KyBrc3ZnMi9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBib29sIHBhcnNlTnVtYmVyKGNv
bnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciAqZW5kLCBkb3VibGUmIG51bWJlciwgYm9vbCBz
a2lwID0gdHJ1ZSk7CisgICAgYm9vbCBwYXJzZU51bWJlcihjb25zdCBVQ2hhciomIHB0ciwgY29u
c3QgVUNoYXIqIGVuZCwgZG91YmxlJiBudW1iZXIsIGJvb2wgc2tpcCA9IHRydWUpOwogICAgIGJv
b2wgcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHJpbmcmIHMsIGRvdWJsZSYgaCwg
ZG91YmxlJiB2KTsKIAogICAgIC8vIFNWRyBhbGxvd3Mgc2V2ZXJhbCBkaWZmZXJlbnQgd2hpdGVz
cGFjZSBjaGFyYWN0ZXJzOgpJbmRleDoga3N2ZzIvc3ZnL1NWR1NldEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdTZXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTkxMzcpCisr
KyBrc3ZnMi9zdmcvU1ZHU2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDMwICsz
OSw2IEBAIFNWR1NldEVsZW1lbnQ6On5TVkdTZXRFbGVtZW50KCkKIHsKIH0KIAotYm9vbCBTVkdT
ZXRFbGVtZW50Ojp1cGRhdGVDdXJyZW50VmFsdWUoZG91YmxlIHRpbWVQZXJjZW50YWdlKQotewot
ICAgIGlmIChtX3NhdmVkVG8uaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fc2F2ZWRUbyA9IHRhcmdl
dEF0dHJpYnV0ZSgpOwotICAgICAgICBzZXRUYXJnZXRBdHRyaWJ1dGUobV90byk7Ci0gICAgfQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBTVkdTZXRFbGVtZW50OjpoYW5kbGVTdGFydENv
bmRpdGlvbigpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU1ZHU2V0RWxlbWVudDo6
aGFuZGxlRW5kQ29uZGl0aW9uKCkKLXsKLSAgICBkaXNjb25uZWN0VGltZXIoKTsKLSAgICAKLSAg
ICBpZiAoIWlzRnJvemVuKCkpCi0gICAgICAgIHNldFRhcmdldEF0dHJpYnV0ZShtX3NhdmVkVG8p
OwotICAgIAotICAgIG1fc2F2ZWRUbyA9IFN0cmluZygpOwotfQotCiB9CiAKIC8vIHZpbTp0cz00
Om5vZXQKSW5kZXg6IGtzdmcyL3N2Zy9TVkdTZXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2
ZzIvc3ZnL1NWR1NldEVsZW1lbnQuaAkocmV2aXNpb24gMTkxMzcpCisrKyBrc3ZnMi9zdmcvU1ZH
U2V0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw5ICszNyw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQq
IGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQogICAgICAgICAKLSAgICAg
ICAgdmlydHVhbCBib29sIHVwZGF0ZUN1cnJlbnRWYWx1ZShkb3VibGUgdGltZVBlcmNlbnRhZ2Up
OwotICAgICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlU3RhcnRDb25kaXRpb24oKTsKLSAgICAgICAg
dmlydHVhbCB2b2lkIGhhbmRsZUVuZENvbmRpdGlvbigpOworICAgICAgICB2aXJ0dWFsIGJvb2wg
dXBkYXRlQW5pbWF0ZWRWYWx1ZShFQW5pbWF0aW9uTW9kZSwgZmxvYXQgdGltZVBlcmNlbnRhZ2Us
IHVuc2lnbmVkIHZhbHVlSW5kZXgsIGZsb2F0IHBlcmNlbnRhZ2VQYXN0KSB7IHJldHVybiB0cnVl
OyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoRUFuaW1h
dGlvbk1vZGUsIHVuc2lnbmVkIHZhbHVlSW5kZXgpIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIFN0cmluZyBtX3NhdmVkVG87CkluZGV4OiBrc3ZnMi9zdmcvU1ZHVHJh
bnNmb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtLmNwcAkocmV2
aXNpb24gMTkxMzcpCisrKyBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTMsNyArNTMsNyBAQCBib29sIFNWR1RyYW5zZm9ybTo6aXNWYWxpZCgpCiAgICAgcmV0
dXJuIChtX3R5cGUgIT0gU1ZHX1RSQU5TRk9STV9VTktOT1dOKTsKIH0KIAotdW5zaWduZWQgc2hv
cnQgU1ZHVHJhbnNmb3JtOjp0eXBlKCkgY29uc3QKK1NWR1RyYW5zZm9ybTo6U1ZHVHJhbnNmb3Jt
VHlwZSBTVkdUcmFuc2Zvcm06OnR5cGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3R5cGU7CiB9
CkBAIC04NSw2ICs4NSwxMSBAQCB2b2lkIFNWR1RyYW5zZm9ybTo6c2V0VHJhbnNsYXRlKGRvdWJs
ZSB0CiAgICAgbV9tYXRyaXgudHJhbnNsYXRlKHR4LCB0eSk7CiB9CiAKK0Zsb2F0UG9pbnQgU1ZH
VHJhbnNmb3JtOjp0cmFuc2xhdGUoKSBjb25zdAoreworICAgIHJldHVybiBGbG9hdFBvaW50KG1f
bWF0cml4LmUoKSwgbV9tYXRyaXguZigpKTsKK30KKwogdm9pZCBTVkdUcmFuc2Zvcm06OnNldFNj
YWxlKGRvdWJsZSBzeCwgZG91YmxlIHN5KQogewogICAgIG1fdHlwZSA9IFNWR19UUkFOU0ZPUk1f
U0NBTEU7CkBAIC05NCw2ICs5OSwxMSBAQCB2b2lkIFNWR1RyYW5zZm9ybTo6c2V0U2NhbGUoZG91
YmxlIHN4LCBkCiAgICAgbV9tYXRyaXguc2NhbGUoc3gsIHN5KTsKIH0KIAorRmxvYXRTaXplIFNW
R1RyYW5zZm9ybTo6c2NhbGUoKSBjb25zdAoreworICAgIHJldHVybiBGbG9hdFNpemUobV9tYXRy
aXguYSgpLCBtX21hdHJpeC5kKCkpOworfQorCiB2b2lkIFNWR1RyYW5zZm9ybTo6c2V0Um90YXRl
KGRvdWJsZSBhbmdsZSwgZG91YmxlIGN4LCBkb3VibGUgY3kpCiB7CiAgICAgbV90eXBlID0gU1ZH
X1RSQU5TRk9STV9ST1RBVEU7CkBAIC0xMTIsNyArMTIyLDcgQEAgdm9pZCBTVkdUcmFuc2Zvcm06
OnNldFNrZXdYKGRvdWJsZSBhbmdsZQogICAgIG1fYW5nbGUgPSBhbmdsZTsKIAogICAgIG1fbWF0
cml4LnJlc2V0KCk7Ci0gICAgbV9tYXRyaXguc2hlYXIodGFuKFNWR0FuZ2xlOjp0b3JhZChhbmds
ZSkpLCAwLjBmKTsKKyAgICBtX21hdHJpeC5za2V3WChhbmdsZSk7CiB9CiAKIHZvaWQgU1ZHVHJh
bnNmb3JtOjpzZXRTa2V3WShkb3VibGUgYW5nbGUpCkBAIC0xMjEsNyArMTMxLDcgQEAgdm9pZCBT
VkdUcmFuc2Zvcm06OnNldFNrZXdZKGRvdWJsZSBhbmdsZQogICAgIG1fYW5nbGUgPSBhbmdsZTsK
IAogICAgIG1fbWF0cml4LnJlc2V0KCk7Ci0gICAgbV9tYXRyaXguc2hlYXIoMC4wZiwgdGFuKFNW
R0FuZ2xlOjp0b3JhZChhbmdsZSkpKTsKKyAgICBtX21hdHJpeC5za2V3WShhbmdsZSk7CiB9CiAK
IC8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtLmgJKHJldmlzaW9uIDE5MTM3KQorKysga3N2
ZzIvc3ZnL1NWR1RyYW5zZm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5IEBACiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAg
Y2xhc3MgRmxvYXRQb2ludDsKKyAgICBjbGFzcyBGbG9hdFNpemU7CiAKICAgICBjbGFzcyBTVkdU
cmFuc2Zvcm0gewogICAgIHB1YmxpYzoKQEAgLTQ2LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBleHBsaWNpdCBTVkdUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
Jik7CiAgICAgICAgIHZpcnR1YWwgflNWR1RyYW5zZm9ybSgpOwogICAgICAgICAgICAgICAgCi0g
ICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUoKSBjb25zdDsKKyAgICAgICAgU1ZHVHJhbnNmb3Jt
VHlwZSB0eXBlKCkgY29uc3Q7CiAKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCgpIGNv
bnN0OwogICAgIApAQCAtNTksMTQgKzYyLDI4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdm9pZCBzZXRTa2V3WChkb3VibGUgYW5nbGUpOwogICAgICAgICB2b2lkIHNldFNrZXdZKGRv
dWJsZSBhbmdsZSk7CiAgICAgICAgIAorICAgICAgICAvLyBJbnRlcm5hbCB1c2Ugb25seSAoYW5p
bWF0aW9uIHN5c3RlbSkKKyAgICAgICAgRmxvYXRQb2ludCB0cmFuc2xhdGUoKSBjb25zdDsKKyAg
ICAgICAgRmxvYXRTaXplIHNjYWxlKCkgY29uc3Q7CisgICAgICAgIAogICAgICAgICBib29sIGlz
VmFsaWQoKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IG1fdHlwZTsK
KyAgICAgICAgU1ZHVHJhbnNmb3JtVHlwZSBtX3R5cGU7CiAgICAgICAgIGRvdWJsZSBtX2FuZ2xl
OwogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9tYXRyaXg7CiAgICAgfTsKIAorICAgIGlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU1ZHVHJhbnNmb3JtJiBhLCBjb25zdCBTVkdUcmFuc2Zv
cm0mIGIpCisgICAgeworICAgICAgICByZXR1cm4gYS50eXBlKCkgPT0gYi50eXBlKCkgJiYgYS5h
bmdsZSgpID09IGIuYW5nbGUoKSAmJiBhLm1hdHJpeCgpID09IGIubWF0cml4KCk7CisgICAgfQor
ICAgIAorICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU1ZHVHJhbnNmb3JtJiBhLCBj
b25zdCBTVkdUcmFuc2Zvcm0mIGIpCisgICAgeworICAgICAgICByZXR1cm4gIShhID09IGIpOwor
ICAgIH0KKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFNWR19TVVBQ
T1JUCkluZGV4OiBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAJKHJldmlzaW9uIDApCisrKyBr
c3ZnMi9zdmcvU1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDI2NSBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAKKyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QKKyAKKyBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWZkZWYgU1ZHX1NVUFBP
UlQKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1EaXN0YW5jZS5oIgorCisjaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6U1ZH
VHJhbnNmb3JtRGlzdGFuY2UoKQorICAgIDogbV90eXBlKFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5T
Rk9STV9VTktOT1dOKQorICAgICwgbV9hbmdsZSgwKQoreworfQorCitTVkdUcmFuc2Zvcm1EaXN0
YW5jZTo6U1ZHVHJhbnNmb3JtRGlzdGFuY2UoU1ZHVHJhbnNmb3JtOjpTVkdUcmFuc2Zvcm1UeXBl
IHR5cGUsIGRvdWJsZSBhbmdsZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisg
ICAgOiBtX3R5cGUodHlwZSkKKyAgICAsIG1fYW5nbGUoYW5nbGUpCisgICAgLCBtX3RyYW5zZm9y
bSh0cmFuc2Zvcm0pCit7Cit9CisKK1NWR1RyYW5zZm9ybURpc3RhbmNlOjpTVkdUcmFuc2Zvcm1E
aXN0YW5jZShjb25zdCBTVkdUcmFuc2Zvcm0mIGZyb21TVkdUcmFuc2Zvcm0sIGNvbnN0IFNWR1Ry
YW5zZm9ybSYgdG9TVkdUcmFuc2Zvcm0pCisgICAgOiBtX3R5cGUoZnJvbVNWR1RyYW5zZm9ybS50
eXBlKCkpCisgICAgLCBtX2FuZ2xlKDApCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSB0b1NWR1Ry
YW5zZm9ybS50eXBlKCkpOworICAgIAorICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBT
VkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVU5LTk9XTjoKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX01BVFJJWDoKKyAgICAgICAgLy8gRklY
TUU6IG5lZWQgdG8gYmUgYWJsZSB0byBzdWJ0cmFjdCB0byBtYXRyaWNlcworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fUk9UQVRFOgorICAgICAg
ICBtX2FuZ2xlID0gdG9TVkdUcmFuc2Zvcm0uYW5nbGUoKSAtIGZyb21TVkdUcmFuc2Zvcm0uYW5n
bGUoKTsKKyAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNW
R19UUkFOU0ZPUk1fVFJBTlNMQVRFOgorICAgIHsKKyAgICAgICAgRmxvYXRTaXplIHRyYW5zbGF0
aW9uRGlzdGFuY2UgPSB0b1NWR1RyYW5zZm9ybS50cmFuc2xhdGUoKSAtIGZyb21TVkdUcmFuc2Zv
cm0udHJhbnNsYXRlKCk7CisgICAgICAgIG1fdHJhbnNmb3JtLnRyYW5zbGF0ZSh0cmFuc2xhdGlv
bkRpc3RhbmNlLndpZHRoKCksIHRyYW5zbGF0aW9uRGlzdGFuY2UuaGVpZ2h0KCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1ND
QUxFOgorICAgIHsKKyAgICAgICAgZmxvYXQgc2NhbGVYID0gZnJvbVNWR1RyYW5zZm9ybS5zY2Fs
ZSgpLndpZHRoKCkgIT0gMCA/IHRvU1ZHVHJhbnNmb3JtLnNjYWxlKCkud2lkdGgoKSAvIGZyb21T
VkdUcmFuc2Zvcm0uc2NhbGUoKS53aWR0aCgpIDogdG9TVkdUcmFuc2Zvcm0uc2NhbGUoKS53aWR0
aCgpIC8gMC4wMDAwMTsKKyAgICAgICAgZmxvYXQgc2NhbGVZID0gZnJvbVNWR1RyYW5zZm9ybS5z
Y2FsZSgpLmhlaWdodCgpICE9IDAgPyB0b1NWR1RyYW5zZm9ybS5zY2FsZSgpLmhlaWdodCgpIC8g
ZnJvbVNWR1RyYW5zZm9ybS5zY2FsZSgpLmhlaWdodCgpIDogdG9TVkdUcmFuc2Zvcm0uc2NhbGUo
KS5oZWlnaHQoKSAvIDAuMDAwMDE7CisgICAgICAgIG1fdHJhbnNmb3JtLnNjYWxlKHNjYWxlWCwg
c2NhbGVZKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6
U1ZHX1RSQU5TRk9STV9TS0VXWDoKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9S
TV9TS0VXWToKKyAgICAgICAgbV9hbmdsZSA9IHRvU1ZHVHJhbnNmb3JtLmFuZ2xlKCkgLSBmcm9t
U1ZHVHJhbnNmb3JtLmFuZ2xlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK1NWR1Ry
YW5zZm9ybURpc3RhbmNlIFNWR1RyYW5zZm9ybURpc3RhbmNlOjpzY2FsZWREaXN0YW5jZShmbG9h
dCBzY2FsZUZhY3RvcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2Ug
U1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1VOS05PV046CisgICAgICAgIHJldHVybiBTVkdU
cmFuc2Zvcm1EaXN0YW5jZSgpOworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JN
X1JPVEFURToKKyAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybURpc3RhbmNlKG1fdHlwZSwgbV9h
bmdsZSAqIHNjYWxlRmFjdG9yLCBBZmZpbmVUcmFuc2Zvcm0oKSk7CisgICAgY2FzZSBTVkdUcmFu
c2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19U
UkFOU0ZPUk1fTUFUUklYOgorICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtRGlzdGFuY2UobV90
eXBlLCBtX2FuZ2xlICogc2NhbGVGYWN0b3IsIEFmZmluZVRyYW5zZm9ybShtX3RyYW5zZm9ybSku
c2NhbGUoc2NhbGVGYWN0b3IpKTsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9S
TV9UUkFOU0xBVEU6CisgICAgeworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3VHJhbnNmb3Jt
KG1fdHJhbnNmb3JtKTsKKyAgICAgICAgbmV3VHJhbnNmb3JtLnNldEUobV90cmFuc2Zvcm0uZSgp
ICogc2NhbGVGYWN0b3IpOworICAgICAgICBuZXdUcmFuc2Zvcm0uc2V0RihtX3RyYW5zZm9ybS5m
KCkgKiBzY2FsZUZhY3Rvcik7CisgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1EaXN0YW5jZSht
X3R5cGUsIDAsIG5ld1RyYW5zZm9ybSk7CisgICAgfQorICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpT
VkdfVFJBTlNGT1JNX1NLRVdYOgorICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JN
X1NLRVdZOgorICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtRGlzdGFuY2UobV90eXBlLCBtX2Fu
Z2xlICogc2NhbGVGYWN0b3IsIEFmZmluZVRyYW5zZm9ybSgpKTsKKyAgICB9CisgICAgCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFNWR1RyYW5zZm9ybURpc3RhbmNlKCk7
Cit9CisKK1NWR1RyYW5zZm9ybSBTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6YWRkU1ZHVHJhbnNmb3Jt
cyhjb25zdCBTVkdUcmFuc2Zvcm0mIGZpcnN0LCBjb25zdCBTVkdUcmFuc2Zvcm0mIHNlY29uZCkK
K3sKKyAgICBBU1NFUlQoZmlyc3QudHlwZSgpID09IHNlY29uZC50eXBlKCkpOworICAgIAorICAg
IFNWR1RyYW5zZm9ybSB0cmFuc2Zvcm07CisgICAgCisgICAgc3dpdGNoIChmaXJzdC50eXBlKCkp
IHsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOOgorICAgICAg
ICByZXR1cm4gU1ZHVHJhbnNmb3JtKCk7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFO
U0ZPUk1fUk9UQVRFOgorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEknbSBub3Qgc3VyZSB0aGF0
IHRoZSB0cmFuc2xhdGlvbiBpcyBjb3JyZWN0IGhlcmUKKyAgICAgICAgZmxvYXQgZHggPSBmaXJz
dC50cmFuc2xhdGUoKS54KCkgKyBzZWNvbmQudHJhbnNsYXRlKCkueCgpOworICAgICAgICBmbG9h
dCBkeSA9IGZpcnN0LnRyYW5zbGF0ZSgpLnkoKSArIHNlY29uZC50cmFuc2xhdGUoKS55KCk7Cisg
ICAgICAgIHRyYW5zZm9ybS5zZXRSb3RhdGUoZmlyc3QuYW5nbGUoKSArIHNlY29uZC5hbmdsZSgp
LCBkeCwgZHkpOworICAgICAgICByZXR1cm4gdHJhbnNmb3JtOworICAgIH0KKyAgICBjYXNlIFNW
R1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg6CisgICAgICAgIHRyYW5zZm9ybS5zZXRN
YXRyaXgoZmlyc3QubWF0cml4KCkgKiBzZWNvbmQubWF0cml4KCkpOworICAgICAgICByZXR1cm4g
dHJhbnNmb3JtOworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFU
RToKKyAgICB7CisgICAgICAgIGZsb2F0IGR4ID0gZmlyc3QudHJhbnNsYXRlKCkueCgpICsgc2Vj
b25kLnRyYW5zbGF0ZSgpLngoKTsKKyAgICAgICAgZmxvYXQgZHkgPSBmaXJzdC50cmFuc2xhdGUo
KS55KCkgKyBzZWNvbmQudHJhbnNsYXRlKCkueSgpOworICAgICAgICB0cmFuc2Zvcm0uc2V0VHJh
bnNsYXRlKGR4LCBkeSk7CisgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CisgICAgfQorICAgIGNh
c2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NDQUxFOgorICAgIHsKKyAgICAgICAgRmxv
YXRTaXplIHNjYWxlID0gZmlyc3Quc2NhbGUoKSArIHNlY29uZC5zY2FsZSgpOworICAgICAgICB0
cmFuc2Zvcm0uc2V0U2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOworICAgICAg
ICByZXR1cm4gdHJhbnNmb3JtOworICAgIH0KKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RS
QU5TRk9STV9TS0VXWDoKKyAgICAgICAgdHJhbnNmb3JtLnNldFNrZXdYKGZpcnN0LmFuZ2xlKCkg
KyBzZWNvbmQuYW5nbGUoKSk7CisgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CisgICAgY2FzZSBT
VkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0tFV1k6CisgICAgICAgIHRyYW5zZm9ybS5zZXRT
a2V3WShmaXJzdC5hbmdsZSgpICsgc2Vjb25kLmFuZ2xlKCkpOworICAgICAgICByZXR1cm4gdHJh
bnNmb3JtOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gU1ZHVHJhbnNmb3JtKCk7Cit9CisKK3ZvaWQgU1ZHVHJhbnNmb3JtRGlzdGFuY2U6OmFkZFNW
R1RyYW5zZm9ybShjb25zdCBTVkdUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgYm9vbCBhYnNvbHV0ZVZh
bHVlKQoreworICAgIC8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IGFkZCwgc2V0IHRoZSB0eXBlIGZv
ciB0aGlzIFNWR1RyYW5zZm9ybURpc3RhbmNlCisgICAgaWYgKG1fdHlwZSA9PSBTVkdUcmFuc2Zv
cm06OlNWR19UUkFOU0ZPUk1fVU5LTk9XTikKKyAgICAgICAgbV90eXBlID0gdHJhbnNmb3JtLnR5
cGUoKTsKKyAgICAKKyAgICBBU1NFUlQobV90eXBlID09IHRyYW5zZm9ybS50eXBlKCkpOworICAg
IAorICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFO
U0ZPUk1fVU5LTk9XTjoKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpT
VkdfVFJBTlNGT1JNX01BVFJJWDoKKyAgICAgICAgbV90cmFuc2Zvcm0gKj0gdHJhbnNmb3JtLm1h
dHJpeCgpOyAvLyBGSVhNRTogd2hhdCBkb2VzICdkaXN0YW5jZScgYmV0d2VlbiB0d28gdHJhbnNm
b3JtcyBtZWFuPyAgaG93IHNob3VsZCB3ZSByZXNwZWN0ICdhYnNvbHV0ZVZhbHVlJyBoZXJlPwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fUk9U
QVRFOgorICAgICAgICBtX2FuZ2xlICs9IGFic29sdXRlVmFsdWUgPyBmYWJzZih0cmFuc2Zvcm0u
YW5nbGUoKSkgOiB0cmFuc2Zvcm0uYW5nbGUoKTsKKyAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisg
ICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOgorICAgIHsKKyAg
ICAgICAgZmxvYXQgZHggPSBhYnNvbHV0ZVZhbHVlID8gZmFic2YodHJhbnNmb3JtLnRyYW5zbGF0
ZSgpLngoKSkgOiB0cmFuc2Zvcm0udHJhbnNsYXRlKCkueCgpOworICAgICAgICBmbG9hdCBkeSA9
IGFic29sdXRlVmFsdWUgPyBmYWJzZih0cmFuc2Zvcm0udHJhbnNsYXRlKCkueSgpKSA6IHRyYW5z
Zm9ybS50cmFuc2xhdGUoKS55KCk7CisgICAgICAgIG1fdHJhbnNmb3JtLnRyYW5zbGF0ZShkeCwg
ZHkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdf
VFJBTlNGT1JNX1NDQUxFOgorICAgIHsKKyAgICAgICAgZmxvYXQgc2NhbGVYID0gYWJzb2x1dGVW
YWx1ZSA/IGZhYnNmKHRyYW5zZm9ybS5zY2FsZSgpLndpZHRoKCkpIDogdHJhbnNmb3JtLnNjYWxl
KCkud2lkdGgoKTsKKyAgICAgICAgZmxvYXQgc2NhbGVZID0gYWJzb2x1dGVWYWx1ZSA/IGZhYnNm
KHRyYW5zZm9ybS5zY2FsZSgpLmhlaWdodCgpKSA6IHRyYW5zZm9ybS5zY2FsZSgpLmhlaWdodCgp
OworICAgICAgICBtX3RyYW5zZm9ybS5zY2FsZShzY2FsZVgsIHNjYWxlWSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0tFV1g6
CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0tFV1k6CisgICAgICAgIG1f
YW5nbGUgKz0gYWJzb2x1dGVWYWx1ZSA/IGZhYnNmKHRyYW5zZm9ybS5hbmdsZSgpKSA6IHRyYW5z
Zm9ybS5hbmdsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybjsKK30KKworU1ZHVHJhbnNmb3JtIFNWR1RyYW5zZm9y
bURpc3RhbmNlOjphZGRUb1NWR1RyYW5zZm9ybShjb25zdCBTVkdUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkgY29uc3QKK3sKKyAgICBBU1NFUlQobV90eXBlID09IHRyYW5zZm9ybS50eXBlKCkgfHwgdHJh
bnNmb3JtID09IFNWR1RyYW5zZm9ybSgpKTsKKyAgICAKKyAgICBTVkdUcmFuc2Zvcm0gbmV3VHJh
bnNmb3JtKHRyYW5zZm9ybSk7CisgICAgCisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNl
IFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOOgorICAgICAgICByZXR1cm4gU1ZH
VHJhbnNmb3JtKCk7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fTUFUUklY
OgorICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtKHRyYW5zZm9ybS5tYXRyaXgoKSAqIG1fdHJh
bnNmb3JtKTsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEU6
CisgICAgeworICAgICAgICBGbG9hdFBvaW50IHRyYW5zbGF0aW9uID0gdHJhbnNmb3JtLnRyYW5z
bGF0ZSgpOworICAgICAgICB0cmFuc2xhdGlvbiArPSBGbG9hdFNpemUobV90cmFuc2Zvcm0uZSgp
LCBtX3RyYW5zZm9ybS5mKCkpOworICAgICAgICBuZXdUcmFuc2Zvcm0uc2V0VHJhbnNsYXRlKHRy
YW5zbGF0aW9uLngoKSwgdHJhbnNsYXRpb24ueSgpKTsKKyAgICAgICAgcmV0dXJuIG5ld1RyYW5z
Zm9ybTsKKyAgICB9CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6
CisgICAgeworICAgICAgICBGbG9hdFNpemUgc2NhbGUgPSB0cmFuc2Zvcm0uc2NhbGUoKTsKKyAg
ICAgICAgc2NhbGUgKz0gRmxvYXRTaXplKG1fdHJhbnNmb3JtLmEoKSwgbV90cmFuc2Zvcm0uZCgp
KTsKKyAgICAgICAgbmV3VHJhbnNmb3JtLnNldFNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhl
aWdodCgpKTsKKyAgICAgICAgcmV0dXJuIG5ld1RyYW5zZm9ybTsKKyAgICB9CisgICAgY2FzZSBT
VkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fUk9UQVRFOgorICAgIHsKKyAgICAgICAgLy8gRklY
TUU6IEknbSBub3QgY2VydGFpbiB0aGUgdHJhbnNsYXRpb24gaXMgY2FsY3VsYXRlZCBjb3JyZWN0
bHkgaGVyZQorICAgICAgICBGbG9hdFBvaW50IHRyYW5zbGF0aW9uID0gdHJhbnNmb3JtLnRyYW5z
bGF0ZSgpOworICAgICAgICB0cmFuc2xhdGlvbiArPSBGbG9hdFNpemUobV90cmFuc2Zvcm0uZSgp
LCBtX3RyYW5zZm9ybS5mKCkpOworICAgICAgICBuZXdUcmFuc2Zvcm0uc2V0Um90YXRlKHRyYW5z
Zm9ybS5hbmdsZSgpICsgbV9hbmdsZSwgdHJhbnNsYXRpb24ueCgpLCB0cmFuc2xhdGlvbi55KCkp
OworICAgICAgICByZXR1cm4gbmV3VHJhbnNmb3JtOworICAgIH0KKyAgICBjYXNlIFNWR1RyYW5z
Zm9ybTo6U1ZHX1RSQU5TRk9STV9TS0VXWDoKKyAgICAgICAgbmV3VHJhbnNmb3JtLnNldFNrZXdY
KHRyYW5zZm9ybS5hbmdsZSgpICsgbV9hbmdsZSk7CisgICAgICAgIHJldHVybiBuZXdUcmFuc2Zv
cm07CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0tFV1k6CisgICAgICAg
IG5ld1RyYW5zZm9ybS5zZXRTa2V3WSh0cmFuc2Zvcm0uYW5nbGUoKSArIG1fYW5nbGUpOworICAg
ICAgICByZXR1cm4gbmV3VHJhbnNmb3JtOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gU1ZHVHJhbnNmb3JtKCk7Cit9CisKK2Jvb2wgU1ZHVHJhbnNm
b3JtRGlzdGFuY2U6OmlzWmVybygpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtX3RyYW5zZm9ybSA9
PSBBZmZpbmVUcmFuc2Zvcm0oKSAmJiBtX2FuZ2xlID09IDApOworfQorCitmbG9hdCBTVkdUcmFu
c2Zvcm1EaXN0YW5jZTo6ZGlzdGFuY2UoKSBjb25zdAoreworICAgIHN3aXRjaCAobV90eXBlKSB7
CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVU5LTk9XTjoKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fUk9UQVRFOgor
ICAgICAgICByZXR1cm4gc3FydGYobV9hbmdsZSAqIG1fYW5nbGUgKyBtX3RyYW5zZm9ybS5lKCkg
KiBtX3RyYW5zZm9ybS5lKCkgKyBtX3RyYW5zZm9ybS5mKCkgKiBtX3RyYW5zZm9ybS5mKCkpOwor
ICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX01BVFJJWDoKKyAgICAgICAgcmV0
dXJuIDA7IC8vIEknbSBub3QgcXVpdGUgc3VyZSB5ZXQgd2hhdCBkaXN0YW5jZSBiZXR3ZWVuIHR3
byBtYXRyaWNlcyBtZWFucy4KKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9T
Q0FMRToKKyAgICAgICAgcmV0dXJuIHNxcnRmKG1fdHJhbnNmb3JtLmEoKSAqIG1fdHJhbnNmb3Jt
LmEoKSArIG1fdHJhbnNmb3JtLmQoKSAqIG1fdHJhbnNmb3JtLmQoKSk7CisgICAgY2FzZSBTVkdU
cmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOgorICAgICAgICByZXR1cm4gc3FydGYo
bV90cmFuc2Zvcm0uZSgpICogbV90cmFuc2Zvcm0uZSgpICsgbV90cmFuc2Zvcm0uZigpICogbV90
cmFuc2Zvcm0uZigpKTsKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TS0VX
WDoKKyAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TS0VXWToKKyAgICAgICAg
cmV0dXJuIG1fYW5nbGU7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiAwOworfQorCit9CisKKyNlbmRpZgpJbmRleDoga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybURp
c3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybURpc3RhbmNlLmgJ
KHJldmlzaW9uIDApCisrKyBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtRGlzdGFuY2UuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAKKyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IHByb2plY3QKKyAKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgCisgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorIAorIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyBC
b3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIFNWR1RyYW5zZm9ybURp
c3RhbmNlX2gKKyNkZWZpbmUgU1ZHVHJhbnNmb3JtRGlzdGFuY2VfaAorI2lmZGVmIFNWR19TVVBQ
T1JUCisKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
ICAgIAorICAgIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKKyAgICAgICAgCisgICAgY2xhc3MgU1ZH
VHJhbnNmb3JtRGlzdGFuY2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgU1ZHVHJhbnNmb3JtRGlz
dGFuY2UoKTsKKyAgICAgICAgU1ZHVHJhbnNmb3JtRGlzdGFuY2UoY29uc3QgU1ZHVHJhbnNmb3Jt
JiBmcm9tVHJhbnNmb3JtLCBjb25zdCBTVkdUcmFuc2Zvcm0mIHRvVHJhbnNmb3JtKTsKKyAgICAg
ICAgCisgICAgICAgIFNWR1RyYW5zZm9ybURpc3RhbmNlIHNjYWxlZERpc3RhbmNlKGZsb2F0IHNj
YWxlRmFjdG9yKSBjb25zdDsKKyAgICAgICAgU1ZHVHJhbnNmb3JtIGFkZFRvU1ZHVHJhbnNmb3Jt
KGNvbnN0IFNWR1RyYW5zZm9ybSYpIGNvbnN0OworICAgICAgICB2b2lkIGFkZFNWR1RyYW5zZm9y
bShjb25zdCBTVkdUcmFuc2Zvcm0mLCBib29sIGFic29sdXRlVmFsdWUgPSBmYWxzZSk7CisgICAg
ICAgIAorICAgICAgICBzdGF0aWMgU1ZHVHJhbnNmb3JtIGFkZFNWR1RyYW5zZm9ybXMoY29uc3Qg
U1ZHVHJhbnNmb3JtJiwgY29uc3QgU1ZHVHJhbnNmb3JtJik7CisgICAgICAgIAorICAgICAgICBi
b29sIGlzWmVybygpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgZmxvYXQgZGlzdGFuY2UoKSBj
b25zdDsKKyAgICBwcml2YXRlOgorICAgICAgICBTVkdUcmFuc2Zvcm1EaXN0YW5jZShTVkdUcmFu
c2Zvcm06OlNWR1RyYW5zZm9ybVR5cGUsIGRvdWJsZSBhbmdsZSwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJik7CisgICAgICAgICAgICAKKyAgICAgICAgU1ZHVHJhbnNmb3JtOjpTVkdUcmFuc2Zvcm1U
eXBlIG1fdHlwZTsKKyAgICAgICAgZG91YmxlIG1fYW5nbGU7CisgICAgICAgIEFmZmluZVRyYW5z
Zm9ybSBtX3RyYW5zZm9ybTsgLy8gZm9yIHN0b3Jpbmcgc2NhbGUsIHRyYW5zbGF0aW9uIG9yIG1h
dHJpeCB0cmFuc2Zvcm1zCisgICAgfTsKK30KKworI2VuZGlmIC8vIFNWR19TVVBQT1JUCisjZW5k
aWYgLy8gU1ZHVHJhbnNmb3JtRGlzdGFuY2VfaApJbmRleDoga3N2ZzIvc3ZnL1NWR1RyYW5zZm9y
bUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmNwcAko
cmV2aXNpb24gMTkxMzcpCisrKyBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIK
ICNpbmNsdWRlICJTVkdUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCisj
aW5jbHVkZSAiU1ZHVHJhbnNmb3JtRGlzdGFuY2UuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1M
aXN0LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNjUsNiArNjYsMjAgQEAgU1ZH
VHJhbnNmb3JtIFNWR1RyYW5zZm9ybUxpc3Q6OmNvbmNhdGVuYQogICAgIHJldHVybiBTVkdUcmFu
c2Zvcm0obWF0cml4KTsKIH0KIAorU1ZHVHJhbnNmb3JtIFNWR1RyYW5zZm9ybUxpc3Q6OmNvbmNh
dGVuYXRlRm9yVHlwZShTVkdUcmFuc2Zvcm06OlNWR1RyYW5zZm9ybVR5cGUpIGNvbnN0Cit7Cisg
ICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IG51bWJlck9mSXRlbXMoKTsKKyAgICBpZiAoIWxlbmd0
aCkKKyAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybSgpOworICAgIAorICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIFNWR1RyYW5zZm9ybURpc3RhbmNlIHRvdGFsVHJhbnNmb3JtOworICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAgIHRvdGFs
VHJhbnNmb3JtLmFkZFNWR1RyYW5zZm9ybShnZXRJdGVtKGksIGVjKSk7CisgICAgCisgICAgcmV0
dXJuIHRvdGFsVHJhbnNmb3JtLmFkZFRvU1ZHVHJhbnNmb3JtKFNWR1RyYW5zZm9ybSgpKTsKK30K
KwogI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAKIC8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IGtzdmcy
L3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1RyYW5z
Zm9ybUxpc3QuaAkocmV2aXNpb24gMTkxMzcpCisrKyBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtTGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICAvLyBJbnRlcm5hbCB1c2Ugb25seQogICAgICAgICBTVkdUcmFuc2Zvcm0gY29u
Y2F0ZW5hdGUoKSBjb25zdDsKKyAgICAgICAgU1ZHVHJhbnNmb3JtIGNvbmNhdGVuYXRlRm9yVHlw
ZShTVkdUcmFuc2Zvcm06OlNWR1RyYW5zZm9ybVR5cGUpIGNvbnN0OwogICAgIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IG1hbnVhbC10ZXN0cy9hbmltYXRpb24vYW5pbWF0ZUNv
bG9yLXZhbHVlcy1zaW1wbGUuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1hbnVhbC10ZXN0cy9hbmltYXRp
b24vYW5pbWF0ZUNvbG9yLXZhbHVlcy1zaW1wbGUuc3ZnCShyZXZpc2lvbiAwKQorKysgbWFudWFs
LXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlQ29sb3ItdmFsdWVzLXNpbXBsZS5zdmcJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNiBAQAorPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9z
dmcnPgorICA8cmVjdCB3aWR0aD0nMTAwJyBoZWlnaHQ9JzEwMCc+CisgICAgPGFuaW1hdGVDb2xv
ciBhdHRyaWJ1dGVOYW1lPSJmaWxsIiB2YWx1ZXM9J2JsdWU7IGdyZWVuJyBkdXI9JzNzJyBmaWxs
PSdmcmVlemUnIC8+CisgIDwvcmVjdD4KKyAgPHRleHQgeD0nMTAnIHk9JzEyMCc+VGhlIHJlY3Qg
c2hvdWxkIGFuaW1hdGUgZnJvbSBibHVlIHRvIGdyZWVuIG92ZXIgMyBzZWNvbmRzPC90ZXh0Pgor
PC9zdmc+CkluZGV4OiBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVUcmFuc2Zvcm0ta2V5
VGltZXMuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIG1hbnVhbC10ZXN0cy9hbmltYXRpb24vYW5pbWF0ZVRy
YW5zZm9ybS1rZXlUaW1lcy5zdmcJKHJldmlzaW9uIDApCisrKyBtYW51YWwtdGVzdHMvYW5pbWF0
aW9uL2FuaW1hdGVUcmFuc2Zvcm0ta2V5VGltZXMuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDExIEBACis8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+CisgIDxyZWN0
IGZpbGw9J2JsdWUnIHdpZHRoPScxMDAnIGhlaWdodD0nMTAwJz4KKyAgICA8YW5pbWF0ZVRyYW5z
Zm9ybSBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIHR5cGU9J3RyYW5zbGF0ZScgdmFsdWVzPScw
LDA7IDEwLDA7IDEwMCwwJyBrZXlUaW1lcz0nMDsgLjY7IDEnIGR1cj0nM3MnIGZpbGw9J2ZyZWV6
ZScgLz4KKyAgPC9yZWN0PgorICA8cmVjdCBmaWxsPSdub25lJyBzdHJva2U9J29yYW5nZScgeD0n
MTAnIHdpZHRoPScxMDAnIGhlaWdodD0nMTAwJyAvPgorICA8cmVjdCBmaWxsPSdub25lJyBzdHJv
a2U9J2dyZWVuJyB4PScxMDAnIHdpZHRoPScxMDAnIGhlaWdodD0nMTAwJyAvPgorICA8dGV4dCB4
PScxMCcgeT0nMTIwJz4KKyAgICBUaGUgcmVjdCBzaG91bGQgZnJvbSAwLDAgdG8gMTAwLDAgb3Zl
ciAzIHNlY29uZHMuCisgICAgPHRzcGFuIGR5PScyMCcgeD0nMTAnPkl0IHNob3VsZCBiZSBhdCB0
aGUgb3JhbmdlIGF0IDIgc2Vjb25kcyBhbmQgdGhlIGdyZWVuIGF0IDMgc2Vjb25kcy48L3RzcGFu
PgorICA8L3RleHQ+Cis8L3N2Zz4KSW5kZXg6IG1hbnVhbC10ZXN0cy9hbmltYXRpb24vYW5pbWF0
ZU1vdGlvbi10by5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmlt
YXRlTW90aW9uLXRvLnN2ZwkocmV2aXNpb24gMCkKKysrIG1hbnVhbC10ZXN0cy9hbmltYXRpb24v
YW5pbWF0ZU1vdGlvbi10by5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOCBAQAorPHN2ZyB4
bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPgorICA8cmVjdCB3aWR0aD0nMTAwJyBo
ZWlnaHQ9JzEwMCc+CisgICAgPGFuaW1hdGVNb3Rpb24gdG89JzEwMCwwJyBkdXI9JzNzJyAvPgor
ICA8L3JlY3Q+CisgIDx0ZXh0IHg9JzEwJyB5PScxMjAnPgorICAgIFRoZSByZWN0IHNob3VsZCBm
cm9tIDAsMCB0byAxMDAsMCBvdmVyIDMgc2Vjb25kcy4KKyAgPC90ZXh0PiAgCis8L3N2Zz4KSW5k
ZXg6IG1hbnVhbC10ZXN0cy9hbmltYXRpb24vYW5pbWF0ZUNvbG9yLWJ5LnN2Zwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVDb2xvci1ieS5zdmcJKHJldmlzaW9u
IDApCisrKyBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVDb2xvci1ieS5zdmcJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNiBAQAorPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAw
MC9zdmcnPgorICA8cmVjdCB3aWR0aD0nMTAwJyBoZWlnaHQ9JzEwMCcgZmlsbD0nYmxhY2snPgor
ICAgIDxhbmltYXRlQ29sb3IgYXR0cmlidXRlTmFtZT0iZmlsbCIgYnk9J2dyZWVuJyBkdXI9JzNz
JyBmaWxsPSdmcmVlemUnIC8+CisgIDwvcmVjdD4KKyAgPHRleHQgeD0nMTAnIHk9JzEyMCc+VGhl
IHJlY3Qgc2hvdWxkIGFuaW1hdGUgZnJvbSBibGFjayB0byBncmVlbiBvdmVyIDMgc2Vjb25kczwv
dGV4dD4KKzwvc3ZnPgpJbmRleDogbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlQ29sb3It
ZnJvbS1ieS5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRl
Q29sb3ItZnJvbS1ieS5zdmcJKHJldmlzaW9uIDApCisrKyBtYW51YWwtdGVzdHMvYW5pbWF0aW9u
L2FuaW1hdGVDb2xvci1mcm9tLWJ5LnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2IEBACis8
c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+CisgIDxyZWN0IHdpZHRoPScx
MDAnIGhlaWdodD0nMTAwJz4KKyAgICA8YW5pbWF0ZUNvbG9yIGF0dHJpYnV0ZU5hbWU9ImZpbGwi
IGZyb209JyNERDAwMDAnIGJ5PScjMDAwMEREJyBkdXI9JzNzJyBmaWxsPSdmcmVlemUnIC8+Cisg
IDwvcmVjdD4KKyAgPHRleHQgeD0nMTAnIHk9JzEyMCc+VGhlIHJlY3Qgc2hvdWxkIGFuaW1hdGUg
ZnJvbSByZWQgdG8gcHVycGxlIG92ZXIgMyBzZWNvbmRzPC90ZXh0PgorPC9zdmc+CkluZGV4OiBt
YW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVDb2xvci1yZXBlYXQtaW5kZWZpbml0ZS5zdmcK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlQ29sb3ItcmVwZWF0
LWluZGVmaW5pdGUuc3ZnCShyZXZpc2lvbiAwKQorKysgbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9h
bmltYXRlQ29sb3ItcmVwZWF0LWluZGVmaW5pdGUuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDYgQEAKKzxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz4KKyAgPHJlY3Qg
d2lkdGg9JzEwMCcgaGVpZ2h0PScxMDAnPgorICAgIDxhbmltYXRlQ29sb3IgYXR0cmlidXRlTmFt
ZT0iZmlsbCIgdmFsdWVzPSdibHVlOyBncmVlbicgZHVyPScycycgcmVwZWF0Q291bnQ9J2luZGVm
aW5pdGUnIC8+CisgIDwvcmVjdD4KKyAgPHRleHQgeD0nMTAnIHk9JzEyMCc+VGhlIHJlY3Qgc2hv
dWxkIGFuaW1hdGUgZnJvbSBibHVlIHRvIGdyZWVuIG92ZXIgMiBzZWNvbmRzLCByZXBlYXRlZGx5
LjwvdGV4dD4KKzwvc3ZnPgpJbmRleDogbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlVHJh
bnNmb3JtLXJlcGVhdC1vbmNlLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtYW51YWwtdGVzdHMvYW5pbWF0
aW9uL2FuaW1hdGVUcmFuc2Zvcm0tcmVwZWF0LW9uY2Uuc3ZnCShyZXZpc2lvbiAwKQorKysgbWFu
dWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlVHJhbnNmb3JtLXJlcGVhdC1vbmNlLnN2ZwkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw4IEBACis8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8y
MDAwL3N2Zyc+CisgIDxyZWN0IGZpbGw9J2JsdWUnIHdpZHRoPScxMDAnIGhlaWdodD0nMTAwJz4K
KyAgICA8YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIHR5cGU9J3Ry
YW5zbGF0ZScgZnJvbT0nMCwwJyB0bz0nMTAwLDAnIGR1cj0nMnMnIHJlcGVhdENvdW50PScyJyBm
aWxsPSdmcmVlemUnIC8+CisgIDwvcmVjdD4KKyAgPHRleHQgeD0nMTAnIHk9JzEyMCc+CisgICAg
VGhlIHJlY3Qgc2hvdWxkIGZyb20gMCwwIHRvIDEwMCwwIG92ZXIgMiBzZWNvbmRzLCB0d2ljZS4K
KyAgPC90ZXh0PgorPC9zdmc+CkluZGV4OiBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVD
b2xvci10by5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRl
Q29sb3ItdG8uc3ZnCShyZXZpc2lvbiAwKQorKysgbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmlt
YXRlQ29sb3ItdG8uc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKKzxzdmcgeG1sbnM9
J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz4KKyAgPHJlY3Qgd2lkdGg9JzEwMCcgaGVpZ2h0
PScxMDAnIGZpbGw9J2JsdWUnPgorICAgIDxhbmltYXRlQ29sb3IgYXR0cmlidXRlTmFtZT0iZmls
bCIgdG89J2dyZWVuJyBkdXI9JzNzJyBmaWxsPSdmcmVlemUnIC8+CisgIDwvcmVjdD4KKyAgPHRl
eHQgeD0nMTAnIHk9JzEyMCc+VGhlIHJlY3Qgc2hvdWxkIGFuaW1hdGUgZnJvbSBibHVlIHRvIGdy
ZWVuIG92ZXIgMyBzZWNvbmRzPC90ZXh0PgorPC9zdmc+CkluZGV4OiBtYW51YWwtdGVzdHMvYW5p
bWF0aW9uL2FuaW1hdGVDb2xvci10by1mcm9tLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtYW51YWwtdGVz
dHMvYW5pbWF0aW9uL2FuaW1hdGVDb2xvci10by1mcm9tLnN2ZwkocmV2aXNpb24gMCkKKysrIG1h
bnVhbC10ZXN0cy9hbmltYXRpb24vYW5pbWF0ZUNvbG9yLXRvLWZyb20uc3ZnCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDYgQEAKKzxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3Zn
Jz4KKyAgPHJlY3Qgd2lkdGg9JzEwMCcgaGVpZ2h0PScxMDAnPgorICAgIDxhbmltYXRlQ29sb3Ig
YXR0cmlidXRlTmFtZT0iZmlsbCIgZnJvbT0nYmx1ZScgdG89J2dyZWVuJyBkdXI9JzNzJyBmaWxs
PSdmcmVlemUnIC8+CisgIDwvcmVjdD4KKyAgPHRleHQgeD0nMTAnIHk9JzEyMCc+VGhlIHJlY3Qg
c2hvdWxkIGFuaW1hdGUgZnJvbSBibHVlIHRvIGdyZWVuIG92ZXIgMyBzZWNvbmRzPC90ZXh0Pgor
PC9zdmc+CkluZGV4OiBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVDb2xvci1ieS5zdmcK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlQ29sb3ItYnkuc3Zn
CShyZXZpc2lvbiAwKQorKysgbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlQ29sb3ItYnku
c3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKKzxzdmcgeG1sbnM9J2h0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnJz4KKyAgPHJlY3Qgd2lkdGg9JzEwMCcgaGVpZ2h0PScxMDAnIGZpbGw9
J2JsYWNrJz4KKyAgICA8YW5pbWF0ZUNvbG9yIGF0dHJpYnV0ZU5hbWU9ImZpbGwiIGJ5PSdncmVl
bicgZHVyPSczcycgZmlsbD0nZnJlZXplJyAvPgorICA8L3JlY3Q+CisgIDx0ZXh0IHg9JzEwJyB5
PScxMjAnPlRoZSByZWN0IHNob3VsZCBhbmltYXRlIGZyb20gYmxhY2sgdG8gZ3JlZW4gb3ZlciAz
IHNlY29uZHM8L3RleHQ+Cis8L3N2Zz4KSW5kZXg6IG1hbnVhbC10ZXN0cy9hbmltYXRpb24vYW5p
bWF0ZUNvbG9yLWZyb20tYnkuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1hbnVhbC10ZXN0cy9hbmltYXRp
b24vYW5pbWF0ZUNvbG9yLWZyb20tYnkuc3ZnCShyZXZpc2lvbiAwKQorKysgbWFudWFsLXRlc3Rz
L2FuaW1hdGlvbi9hbmltYXRlQ29sb3ItZnJvbS1ieS5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNiBAQAorPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPgorICA8cmVj
dCB3aWR0aD0nMTAwJyBoZWlnaHQ9JzEwMCc+CisgICAgPGFuaW1hdGVDb2xvciBhdHRyaWJ1dGVO
YW1lPSJmaWxsIiBmcm9tPScjREQwMDAwJyBieT0nIzAwMDBERCcgZHVyPSczcycgZmlsbD0nZnJl
ZXplJyAvPgorICA8L3JlY3Q+CisgIDx0ZXh0IHg9JzEwJyB5PScxMjAnPlRoZSByZWN0IHNob3Vs
ZCBhbmltYXRlIGZyb20gcmVkIHRvIHB1cnBsZSBvdmVyIDMgc2Vjb25kczwvdGV4dD4KKzwvc3Zn
PgpJbmRleDogbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlQ29sb3ItcmVwZWF0LWluZGVm
aW5pdGUuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIG1hbnVhbC10ZXN0cy9hbmltYXRpb24vYW5pbWF0ZUNv
bG9yLXJlcGVhdC1pbmRlZmluaXRlLnN2ZwkocmV2aXNpb24gMCkKKysrIG1hbnVhbC10ZXN0cy9h
bmltYXRpb24vYW5pbWF0ZUNvbG9yLXJlcGVhdC1pbmRlZmluaXRlLnN2ZwkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2IEBACis8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+
CisgIDxyZWN0IHdpZHRoPScxMDAnIGhlaWdodD0nMTAwJz4KKyAgICA8YW5pbWF0ZUNvbG9yIGF0
dHJpYnV0ZU5hbWU9ImZpbGwiIHZhbHVlcz0nYmx1ZTsgZ3JlZW4nIGR1cj0nMnMnIHJlcGVhdENv
dW50PSdpbmRlZmluaXRlJyAvPgorICA8L3JlY3Q+CisgIDx0ZXh0IHg9JzEwJyB5PScxMjAnPlRo
ZSByZWN0IHNob3VsZCBhbmltYXRlIGZyb20gYmx1ZSB0byBncmVlbiBvdmVyIDIgc2Vjb25kcywg
cmVwZWF0ZWRseS48L3RleHQ+Cis8L3N2Zz4KSW5kZXg6IG1hbnVhbC10ZXN0cy9hbmltYXRpb24v
YW5pbWF0ZUNvbG9yLXRvLWZyb20uc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1hbnVhbC10ZXN0cy9hbmlt
YXRpb24vYW5pbWF0ZUNvbG9yLXRvLWZyb20uc3ZnCShyZXZpc2lvbiAwKQorKysgbWFudWFsLXRl
c3RzL2FuaW1hdGlvbi9hbmltYXRlQ29sb3ItdG8tZnJvbS5zdmcJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNiBAQAorPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPgorICA8
cmVjdCB3aWR0aD0nMTAwJyBoZWlnaHQ9JzEwMCc+CisgICAgPGFuaW1hdGVDb2xvciBhdHRyaWJ1
dGVOYW1lPSJmaWxsIiBmcm9tPSdibHVlJyB0bz0nZ3JlZW4nIGR1cj0nM3MnIGZpbGw9J2ZyZWV6
ZScgLz4KKyAgPC9yZWN0PgorICA8dGV4dCB4PScxMCcgeT0nMTIwJz5UaGUgcmVjdCBzaG91bGQg
YW5pbWF0ZSBmcm9tIGJsdWUgdG8gZ3JlZW4gb3ZlciAzIHNlY29uZHM8L3RleHQ+Cis8L3N2Zz4K
SW5kZXg6IG1hbnVhbC10ZXN0cy9hbmltYXRpb24vYW5pbWF0ZUNvbG9yLXRvLnN2Zwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVDb2xvci10by5zdmcJKHJldmlz
aW9uIDApCisrKyBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVDb2xvci10by5zdmcJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmcnPgorICA8cmVjdCB3aWR0aD0nMTAwJyBoZWlnaHQ9JzEwMCcgZmlsbD0nYmx1ZSc+
CisgICAgPGFuaW1hdGVDb2xvciBhdHRyaWJ1dGVOYW1lPSJmaWxsIiB0bz0nZ3JlZW4nIGR1cj0n
M3MnIGZpbGw9J2ZyZWV6ZScgLz4KKyAgPC9yZWN0PgorICA8dGV4dCB4PScxMCcgeT0nMTIwJz5U
aGUgcmVjdCBzaG91bGQgYW5pbWF0ZSBmcm9tIGJsdWUgdG8gZ3JlZW4gb3ZlciAzIHNlY29uZHM8
L3RleHQ+Cis8L3N2Zz4KSW5kZXg6IG1hbnVhbC10ZXN0cy9hbmltYXRpb24vYW5pbWF0ZUNvbG9y
LXZhbHVlcy1zaW1wbGUuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1hbnVhbC10ZXN0cy9hbmltYXRpb24v
YW5pbWF0ZUNvbG9yLXZhbHVlcy1zaW1wbGUuc3ZnCShyZXZpc2lvbiAwKQorKysgbWFudWFsLXRl
c3RzL2FuaW1hdGlvbi9hbmltYXRlQ29sb3ItdmFsdWVzLXNpbXBsZS5zdmcJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNiBAQAorPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcn
PgorICA8cmVjdCB3aWR0aD0nMTAwJyBoZWlnaHQ9JzEwMCc+CisgICAgPGFuaW1hdGVDb2xvciBh
dHRyaWJ1dGVOYW1lPSJmaWxsIiB2YWx1ZXM9J2JsdWU7IGdyZWVuJyBkdXI9JzNzJyBmaWxsPSdm
cmVlemUnIC8+CisgIDwvcmVjdD4KKyAgPHRleHQgeD0nMTAnIHk9JzEyMCc+VGhlIHJlY3Qgc2hv
dWxkIGFuaW1hdGUgZnJvbSBibHVlIHRvIGdyZWVuIG92ZXIgMyBzZWNvbmRzPC90ZXh0PgorPC9z
dmc+CkluZGV4OiBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVNb3Rpb24tdG8uc3ZnCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIG1hbnVhbC10ZXN0cy9hbmltYXRpb24vYW5pbWF0ZU1vdGlvbi10by5zdmcJ
KHJldmlzaW9uIDApCisrKyBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVNb3Rpb24tdG8u
c3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAKKzxzdmcgeG1sbnM9J2h0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnJz4KKyAgPHJlY3Qgd2lkdGg9JzEwMCcgaGVpZ2h0PScxMDAnPgorICAg
IDxhbmltYXRlTW90aW9uIHRvPScxMDAsMCcgZHVyPSczcycgLz4KKyAgPC9yZWN0PgorICA8dGV4
dCB4PScxMCcgeT0nMTIwJz4KKyAgICBUaGUgcmVjdCBzaG91bGQgZnJvbSAwLDAgdG8gMTAwLDAg
b3ZlciAzIHNlY29uZHMuCisgIDwvdGV4dD4gIAorPC9zdmc+CkluZGV4OiBtYW51YWwtdGVzdHMv
YW5pbWF0aW9uL2FuaW1hdGVUcmFuc2Zvcm0ta2V5VGltZXMuc3ZnCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1h
bnVhbC10ZXN0cy9hbmltYXRpb24vYW5pbWF0ZVRyYW5zZm9ybS1rZXlUaW1lcy5zdmcJKHJldmlz
aW9uIDApCisrKyBtYW51YWwtdGVzdHMvYW5pbWF0aW9uL2FuaW1hdGVUcmFuc2Zvcm0ta2V5VGlt
ZXMuc3ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8c3ZnIHhtbG5zPSdodHRwOi8v
d3d3LnczLm9yZy8yMDAwL3N2Zyc+CisgIDxyZWN0IGZpbGw9J2JsdWUnIHdpZHRoPScxMDAnIGhl
aWdodD0nMTAwJz4KKyAgICA8YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zv
cm0iIHR5cGU9J3RyYW5zbGF0ZScgdmFsdWVzPScwLDA7IDEwLDA7IDEwMCwwJyBrZXlUaW1lcz0n
MDsgLjY7IDEnIGR1cj0nM3MnIGZpbGw9J2ZyZWV6ZScgLz4KKyAgPC9yZWN0PgorICA8cmVjdCBm
aWxsPSdub25lJyBzdHJva2U9J29yYW5nZScgeD0nMTAnIHdpZHRoPScxMDAnIGhlaWdodD0nMTAw
JyAvPgorICA8cmVjdCBmaWxsPSdub25lJyBzdHJva2U9J2dyZWVuJyB4PScxMDAnIHdpZHRoPScx
MDAnIGhlaWdodD0nMTAwJyAvPgorICA8dGV4dCB4PScxMCcgeT0nMTIwJz4KKyAgICBUaGUgcmVj
dCBzaG91bGQgZnJvbSAwLDAgdG8gMTAwLDAgb3ZlciAzIHNlY29uZHMuCisgICAgPHRzcGFuIGR5
PScyMCcgeD0nMTAnPkl0IHNob3VsZCBiZSBhdCB0aGUgb3JhbmdlIGF0IDIgc2Vjb25kcyBhbmQg
dGhlIGdyZWVuIGF0IDMgc2Vjb25kcy48L3RzcGFuPgorICA8L3RleHQ+Cis8L3N2Zz4KSW5kZXg6
IG1hbnVhbC10ZXN0cy9hbmltYXRpb24vYW5pbWF0ZVRyYW5zZm9ybS1yZXBlYXQtb25jZS5zdmcK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gbWFudWFsLXRlc3RzL2FuaW1hdGlvbi9hbmltYXRlVHJhbnNmb3JtLXJl
cGVhdC1vbmNlLnN2ZwkocmV2aXNpb24gMCkKKysrIG1hbnVhbC10ZXN0cy9hbmltYXRpb24vYW5p
bWF0ZVRyYW5zZm9ybS1yZXBlYXQtb25jZS5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOCBA
QAorPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPgorICA8cmVjdCBmaWxs
PSdibHVlJyB3aWR0aD0nMTAwJyBoZWlnaHQ9JzEwMCc+CisgICAgPGFuaW1hdGVUcmFuc2Zvcm0g
YXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSd0cmFuc2xhdGUnIGZyb209JzAsMCcgdG89
JzEwMCwwJyBkdXI9JzJzJyByZXBlYXRDb3VudD0nMicgZmlsbD0nZnJlZXplJyAvPgorICA8L3Jl
Y3Q+CisgIDx0ZXh0IHg9JzEwJyB5PScxMjAnPgorICAgIFRoZSByZWN0IHNob3VsZCBmcm9tIDAs
MCB0byAxMDAsMCBvdmVyIDIgc2Vjb25kcywgdHdpY2UuCisgIDwvdGV4dD4KKzwvc3ZnPgo=
</data>
<flag name="review"
          id="4828"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>