<?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>70176</bug_id>
          
          <creation_ts>2011-10-15 09:09:54 -0700</creation_ts>
          <short_desc>REGRESSION(r97559): Broke build on Mac (Requested by noamr_ on #webkit).</short_desc>
          <delta_ts>2011-10-15 09:16:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          <blocked>69151</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Review Bot">webkit.review.bot</reporter>
          <assigned_to name="WebKit Review Bot">webkit.review.bot</assigned_to>
          <cc>hausmann</cc>
    
    <cc>noam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>484589</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-15 09:09:54 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/97559 broke the build:
Broke build on Mac (Requested by noamr_ on #webkit).

This is an automatic bug report generated by the sheriff-bot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests case pain.

&quot;Only you can prevent forest fires.&quot; -- Smokey the Bear</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484590</commentid>
    <comment_count>1</comment_count>
      <attachid>111136</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-15 09:10:21 -0700</bug_when>
    <thetext>Created attachment 111136
ROLLOUT of r97559

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484592</commentid>
    <comment_count>2</comment_count>
      <attachid>111136</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-15 09:16:36 -0700</bug_when>
    <thetext>Comment on attachment 111136
ROLLOUT of r97559

Clearing flags on attachment: 111136

Committed r97560: &lt;http://trac.webkit.org/changeset/97560&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484593</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-15 09:16:40 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111136</attachid>
            <date>2011-10-15 09:10:21 -0700</date>
            <delta_ts>2011-10-15 09:16:36 -0700</delta_ts>
            <desc>ROLLOUT of r97559</desc>
            <filename>bug-70176-20111015160751.patch</filename>
            <type>text/plain</type>
            <size>100081</size>
            <attacher name="WebKit Review Bot">webkit.review.bot</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc1NTkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBkNDhkMWVjYzVlZjY4NDg3
NDI1YTJiYjAxODcxNmIxMTg1NzVmYzQxLi5mNWYyMTNiYmVhZDQzNmNhZmVjMzM1MTg4NWM3ZGEz
OWNkZjA0YzI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzggQEAKKzIwMTEtMTAtMTUgIFNoZXJp
ZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgorCisgICAgICAgIFVucmV2aWV3
ZWQsIHJvbGxpbmcgb3V0IHI5NzU1OS4KKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9j
aGFuZ2VzZXQvOTc1NTkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcwMTc2CisKKyAgICAgICAgQnJva2UgYnVpbGQgb24gTWFjIChSZXF1ZXN0ZWQgYnkg
bm9hbXJfIG9uICN3ZWJraXQpLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMucHJvOgorICAg
ICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmg6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXQyL21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9MYXllclRyZWVDb250ZXh0Lmg6
CisgICAgICAgICogU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJMYXllckluZm86OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVySW5mbzo6
ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oOgorICAgICAgICAq
IFNoYXJlZC9xdC9MYXllclRyZWVDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVDb250ZXh0OjpMYXllclRyZWVDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlQ29udGV4dDo6fkxheWVyVHJlZUNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVDb250ZXh0OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0Ojpk
ZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0Ojppc0VtcHR5KToKKyAg
ICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdB
cmVhUHJveHkuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluOiBSZW1vdmVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvTGF5ZXJU
cmVlSG9zdFByb3h5UXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFdlYktpdDIucHJvOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpkZWxldGVkTGF5ZXJJRHMpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcjo6V2ViR3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
cmFwaGljc0xheWVyOjp+V2ViR3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
cmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyOjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjph
ZGRDaGlsZEF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRk
Q2hpbGRBYm92ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjphZGRDaGls
ZEJlbG93KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnJlcGxhY2VDaGls
ZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheUluUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRz
RGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpkaWRTeW5jaHJv
bml6ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpsYXllckluZm8pOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6bmVlZHNEaXNwbGF5UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjp0YWtlTGF5ZXJzVG9EZWxldGUp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3Rh
dGVGb3JUaGlzTGF5ZXJPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OmRpdmlkZUludG9UaWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0Q29tcG9zaXRpbmdJbmZvRm9yVGhpc0xheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbGxlY3RDb21wb3NpdGluZ0luZm9SZWN1cnNpdmVseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZW5kTGF5ZXJzVG9VSVByb2Nlc3Mp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6
OmNyZWF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaDoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbjog
UmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5j
cHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OmRpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
cXQvTGF5ZXJUcmVlSG9zdFF0Lmg6IFJlbW92ZWQuCisKIDIwMTEtMTAtMTUgIE5vJ2FtIFJvc2Vu
dGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdW1dLMl0gU3lu
Y2hyb25pemUgdGlsaW5nIHdpdGggYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnBybyBiL1NvdXJjZS9XZWJLaXQyL0Rlcml2
ZWRTb3VyY2VzLnBybwppbmRleCBiOTNlNzY3MGYyN2EyNTBmNGZiNzIzNDg2ZTdlOTM5OGMxOGQ4
Njg2Li5mY2U1OWM1MjZlZWU1MWQwMjNkM2E0ZmY5Nzg2YTIwOTI2MzliMGU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcm8KKysrIGIvU291cmNlL1dlYktpdDIv
RGVyaXZlZFNvdXJjZXMucHJvCkBAIC05Miw3ICs5Miw2IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0g
XAogICAgIEF1dGhlbnRpY2F0aW9uTWFuYWdlci5tZXNzYWdlcy5pbiBcCiAgICAgRG93bmxvYWRQ
cm94eS5tZXNzYWdlcy5pbiBcCiAgICAgRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbiBcCi0g
ICAgTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluIFwKICAgICBQbHVnaW5Db250cm9sbGVy
UHJveHkubWVzc2FnZXMuaW4gXAogICAgIFBsdWdpblByb2Nlc3MubWVzc2FnZXMuaW4gXAogICAg
IFBsdWdpblByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluIFwKQEAgLTExNyw3ICsxMTYsNiBA
QCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBXZWJGdWxsU2NyZWVuTWFuYWdlci5tZXNzYWdl
cy5pbiBcCiAgICAgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiBcCiAgICAg
V2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdlcy5pbiBcCi0gICAgV2ViUGFnZS9MYXllclRyZWVI
b3N0Lm1lc3NhZ2VzLmluIFwKICAgICBXZWJQYWdlL1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbiBc
CiAgICAgV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIFwKICAgICBXZWJQYWdlUHJveHkubWVz
c2FnZXMuaW4gXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9N
ZXNzYWdlSUQuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmgK
aW5kZXggNDU1MWQ3ZTg0MzA3MzU0ODUyOTZlOWE5OTc5NjhkZmU0MTMwMWY3NS4uMTNiMjE4MzZk
ZGNkMTkzMTM5YTM5YjdlN2Y1NTliZjAxMGI0ZjU0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdlSUQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oCkBAIC0zOCw3ICszOCw2IEBAIGVudW0gTWVzc2FnZUNs
YXNzIHsKICAgICBNZXNzYWdlQ2xhc3NBdXRoZW50aWNhdGlvbk1hbmFnZXIsCiAgICAgTWVzc2Fn
ZUNsYXNzRHJhd2luZ0FyZWEsCiAgICAgTWVzc2FnZUNsYXNzSW5qZWN0ZWRCdW5kbGUsCi0gICAg
TWVzc2FnZUNsYXNzTGF5ZXJUcmVlSG9zdCwKICAgICBNZXNzYWdlQ2xhc3NXZWJBcHBsaWNhdGlv
bkNhY2hlTWFuYWdlciwKICAgICBNZXNzYWdlQ2xhc3NXZWJDb29raWVNYW5hZ2VyLAogICAgIE1l
c3NhZ2VDbGFzc1dlYkRhdGFiYXNlTWFuYWdlciwKQEAgLTU1LDcgKzU0LDYgQEAgZW51bSBNZXNz
YWdlQ2xhc3MgewogICAgIC8vIE1lc3NhZ2VzIHNlbnQgYnkgdGhlIHdlYiBwcm9jZXNzIHRvIHRo
ZSBVSSBwcm9jZXNzLgogICAgIE1lc3NhZ2VDbGFzc0Rvd25sb2FkUHJveHksCiAgICAgTWVzc2Fn
ZUNsYXNzRHJhd2luZ0FyZWFQcm94eSwKLSAgICBNZXNzYWdlQ2xhc3NMYXllclRyZWVIb3N0UHJv
eHksCiAgICAgTWVzc2FnZUNsYXNzV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eSwKICAg
ICBNZXNzYWdlQ2xhc3NXZWJDb250ZXh0LAogICAgIE1lc3NhZ2VDbGFzc1dlYkNvbnRleHRMZWdh
Y3ksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMu
cHkgYi9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkKaW5kZXggNmNj
NTMxNjVhYzM2MmI1ZGE1Mzk0MTVkOWNkYjM4ZDljODJmNTU3Yi4uNmEyZDE5MGY1ZTlhYTkwMGUw
ZWE2YjRhMTRjN2IzNWE3NDMyODI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2NyaXB0
cy93ZWJraXQyL21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0
Mi9tZXNzYWdlcy5weQpAQCAtMzgyLDggKzM4Miw2IEBAIGRlZiBoZWFkZXJzX2Zvcl90eXBlKHR5
cGUpOgogICAgICAgICAnV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcic6
IFtdLAogICAgICAgICAnV2ViS2l0OjpXZWJDb250ZXh0VXNlck1lc3NhZ2VFbmNvZGVyJzogW10s
CiAgICAgICAgICdXZWJLaXQ6OldlYkdlc3R1cmVFdmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCi0g
ICAgICAgICdXZWJLaXQ6OldlYkxheWVySUQnOiBbJyJXZWJMYXllclRyZWVJbmZvLmgiJ10sCi0g
ICAgICAgICdXZWJLaXQ6OldlYkxheWVySW5mbyc6IFsnIldlYkxheWVyVHJlZUluZm8uaCInXSwK
ICAgICAgICAgJ1dlYktpdDo6V2ViS2V5Ym9hcmRFdmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCiAg
ICAgICAgICdXZWJLaXQ6OldlYk1vdXNlRXZlbnQnOiBbJyJXZWJFdmVudC5oIiddLAogICAgICAg
ICAnV2ViS2l0OjpXZWJUb3VjaEV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9MYXllclRyZWVDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oCmluZGV4IDJkYjU4NGU1Nzk0YjdiYjk2YjM4OGNi
NmYyMmQwZjNhNzBmYjBlNjcuLjg2NjdjOTg5NzI0MjFiODNjNWQwMjNkNzllYzMwZDhhZTA0Yjc5
MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9MYXllclRyZWVDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaApAQCAtNDcsOCAr
NDcsNiBAQCBwdWJsaWM6CiAgICAgdWludDMyX3QgY29udGV4dElEOwogI2VsaWYgUExBVEZPUk0o
V0lOKQogICAgIEhXTkQgd2luZG93OwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgdWludDMyX3Qg
d2ViTGF5ZXJJRDsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkxheWVyVHJlZUluZm8uY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVy
VHJlZUluZm8uY3BwCmluZGV4IGVkYjYyYTI1MDA4NjQyNzA3Nzg0M2Q5YTE3MWJkNjExNjg2NTAy
ODQuLmEwMTI4NTU1MjVjMzhiMmNlYTI2NDFkNmFlODhmM2MxY2Y3NGE4NjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAKQEAgLTIzLDcgKzIzLDYgQEAKIAog
I2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKIAotI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgog
I2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVy
cy5oIgogCkBAIC0zNCwxNyArMzMsMzUgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiB2b2lkIFdlYkxh
eWVySW5mbzo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QK
IHsKICAgICAvLyBXZSBoYXZlIHRvIGRpdmlkZSBpdCB0byBzZXZlcmFsIGxpbmVzLCBiZWNhdXNl
IENvcmVJUEM6OkluL091dCB0YWtlcyBhIG1heGltdW0gb2YgMTAgYXJndW1lbnRzLgotICAgIGVu
Y29kZXItPmVuY29kZShDb3JlSVBDOjpJbihpZCwgbmFtZSwgcGFyZW50LCBjaGlsZHJlbiwgZmxh
Z3MsIHJlcGxpY2EsIG1hc2ssIGltYWdlQmFja2luZ1N0b3JlSUQpKTsKKyAgICBlbmNvZGVyLT5l
bmNvZGUoQ29yZUlQQzo6SW4oaWQsIG5hbWUsIHBhcmVudCwgY2hpbGRyZW4sIGZsYWdzLCByZXBs
aWNhLCBtYXNrKSk7CiAgICAgZW5jb2Rlci0+ZW5jb2RlKENvcmVJUEM6OkluKHBvcywgc2l6ZSwg
dHJhbnNmb3JtLCBvcGFjaXR5LCBhbmNob3JQb2ludCwgY2hpbGRyZW5UcmFuc2Zvcm0sIGNvbnRl
bnRzUmVjdCkpOworICAgIGVuY29kZXItPmVuY29kZShpbWFnZUJhY2tpbmdTdG9yZSA/IGltYWdl
QmFja2luZ1N0b3JlLT5zaXplKCkgOiBJbnRTaXplKCkpOworCisgICAgaWYgKCFpbWFnZUJhY2tp
bmdTdG9yZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUg
aW1hZ2VIYW5kbGU7CisgICAgaWYgKGltYWdlQmFja2luZ1N0b3JlLT5jcmVhdGVIYW5kbGUoaW1h
Z2VIYW5kbGUpKQorICAgICAgICBpbWFnZUhhbmRsZS5lbmNvZGUoZW5jb2Rlcik7CiB9CiAKIGJv
b2wgV2ViTGF5ZXJJbmZvOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVy
LCBXZWJMYXllckluZm8mIGluZm8pCiB7CiAgICAgLy8gV2UgaGF2ZSB0byBkaXZpZGUgaXQgdG8g
c2V2ZXJhbCBsaW5lcywgYmVjYXVzZSBDb3JlSVBDOjpJbi9PdXQgdGFrZXMgYSBtYXhpbXVtIG9m
IDEwIGFyZ3VtZW50cy4KLSAgICBpZiAoIWRlY29kZXItPmRlY29kZShDb3JlSVBDOjpPdXQoaW5m
by5pZCwgaW5mby5uYW1lLCBpbmZvLnBhcmVudCwgaW5mby5jaGlsZHJlbiwgaW5mby5mbGFncywg
aW5mby5yZXBsaWNhLCBpbmZvLm1hc2ssIGluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCkpKQorICAg
IGlmICghZGVjb2Rlci0+ZGVjb2RlKENvcmVJUEM6Ok91dChpbmZvLmlkLCBpbmZvLm5hbWUsIGlu
Zm8ucGFyZW50LCBpbmZvLmNoaWxkcmVuLCBpbmZvLmZsYWdzLCBpbmZvLnJlcGxpY2EsIGluZm8u
bWFzaykpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUo
Q29yZUlQQzo6T3V0KGluZm8ucG9zLCBpbmZvLnNpemUsIGluZm8udHJhbnNmb3JtLCBpbmZvLm9w
YWNpdHksIGluZm8uYW5jaG9yUG9pbnQsIGluZm8uY2hpbGRyZW5UcmFuc2Zvcm0sIGluZm8uY29u
dGVudHNSZWN0KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEludFNpemUgaW1hZ2VC
YWNraW5nU3RvcmVTaXplOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGltYWdlQmFja2luZ1N0
b3JlU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaW1hZ2VCYWNraW5nU3Rv
cmVTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBTaGFyZWFibGVC
aXRtYXA6OkhhbmRsZSBpbWFnZUhhbmRsZTsKKyAgICBpZiAoU2hhcmVhYmxlQml0bWFwOjpIYW5k
bGU6OmRlY29kZShkZWNvZGVyLCBpbWFnZUhhbmRsZSkpCisgICAgICAgIGluZm8uaW1hZ2VCYWNr
aW5nU3RvcmUgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShpbWFnZUhhbmRsZSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXll
clRyZWVJbmZvLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCmlu
ZGV4IDI1MDAzZTc0M2M2MWMzM2MwMjkyMjAzZWY3NmYzZjQ2ZTY5ZDI3ZDYuLmEwZTY4ZDNjZDAz
ZDMzODA3YmNiNWVhMGJkMjE4OTNjZjJjNzk1NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkxheWVyVHJlZUluZm8uaApAQCAtMzQsNyArMzQsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiB0eXBlZGVmIHVpbnQzMl90IFdlYkxheWVySUQ7Ci1l
bnVtIHsgSW52YWxpZFdlYkxheWVySUQgPSAwIH07CiAKIHN0cnVjdCBXZWJMYXllclVwZGF0ZUlu
Zm8gewogICAgIFdlYkxheWVyVXBkYXRlSW5mbygpIHsgfQpAQCAtNTUsNyArNTQsNiBAQCBzdHJ1
Y3QgV2ViTGF5ZXJJbmZvIHsKICAgICBXZWJMYXllcklEIHBhcmVudDsKICAgICBXZWJMYXllcklE
IHJlcGxpY2E7CiAgICAgV2ViTGF5ZXJJRCBtYXNrOwotICAgIGludDY0X3QgaW1hZ2VCYWNraW5n
U3RvcmVJRDsKIAogICAgIEZsb2F0UG9pbnQgcG9zOwogICAgIEZsb2F0UG9pbnQzRCBhbmNob3JQ
b2ludDsKQEAgLTczLDggKzcxLDYgQEAgc3RydWN0IFdlYkxheWVySW5mbyB7CiAgICAgICAgICAg
ICBib29sIG1hc2tzVG9Cb3VuZHMgOiAxOwogICAgICAgICAgICAgYm9vbCBwcmVzZXJ2ZXMzRCA6
IDE7CiAgICAgICAgICAgICBib29sIGNvbnRlbnROZWVkc0Rpc3BsYXkgOiAxOwotICAgICAgICAg
ICAgYm9vbCBpbWFnZUlzVXBkYXRlZDogMTsKLSAgICAgICAgICAgIGJvb2wgaXNSb290TGF5ZXI6
IDE7CiAgICAgICAgIH07CiAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnczsKICAgICB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvTGF5ZXJUcmVlQ29udGV4dFF0LmNwcAppbmRleCBk
MzdkNzljYjIxM2Q5NmJlYmE3MGZlZjFhMzgwN2VkNWVlYTgzNDNjLi5mMWJmMWI0MTYzMDA1YzIw
ZmM1YzIzZDdhZjBkMDc4M2JlYjFmN2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvcXQvTGF5ZXJUcmVlQ29udGV4dFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
cXQvTGF5ZXJUcmVlQ29udGV4dFF0LmNwcApAQCAtMjYsMzggKzI2LDQxIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgogCi0jaW5jbHVkZSAiQXJn
dW1lbnREZWNvZGVyLmgiCi0jaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCisjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIExheWVyVHJlZUNvbnRl
eHQ6OkxheWVyVHJlZUNvbnRleHQoKQotICAgIDogd2ViTGF5ZXJJRCgwKQogeworICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKIExheWVyVHJlZUNvbnRleHQ6On5MYXllclRyZWVDb250ZXh0KCkK
IHsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheWVyVHJlZUNvbnRleHQ6OmVu
Y29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0Cit2b2lkIExheWVy
VHJlZUNvbnRleHQ6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqKSBjb25zdAogewot
ICAgIGVuY29kZXItPmVuY29kZSh3ZWJMYXllcklEKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCi1ib29sIExheWVyVHJlZUNvbnRleHQ6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29k
ZXIqIGRlY29kZXIsIExheWVyVHJlZUNvbnRleHQmIGNvbnRleHQpCitib29sIExheWVyVHJlZUNv
bnRleHQ6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBMYXllclRyZWVDb250ZXh0
JikKIHsKLSAgICByZXR1cm4gZGVjb2Rlci0+ZGVjb2RlKGNvbnRleHQud2ViTGF5ZXJJRCk7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBMYXllclRy
ZWVDb250ZXh0Ojppc0VtcHR5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gIXdlYkxheWVySUQ7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBvcGVyYXRv
cj09KGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGEsIGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGIp
Citib29sIG9wZXJhdG9yPT0oY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYsIGNvbnN0IExheWVyVHJl
ZUNvbnRleHQmKQogewotICAgIHJldHVybiBhLndlYkxheWVySUQgPT0gYi53ZWJMYXllcklEOwor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdB
cmVhUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHku
Y3BwCmluZGV4IDM5ZDYwYmEyOTRmMGFjZTU4MWYzY2M4OWZjYWQ5YmViOGVkYWFiOGIuLmY4NTJl
MmY1MTU1YzA5MDZhZTBlYmNmYmE5ZmQ5ZTA3MmEyOTg3MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKQEAgLTI4LDEwICsyOCw2IEBACiAKICNp
bmNsdWRlICJXZWJQYWdlUHJveHkuaCIKIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5o
IgotI2VuZGlmCi0KIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKQEAgLTU3LDE2ICs1Myw0IEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94eTo6c2V0U2l6ZShjb25z
dCBJbnRTaXplJiBzaXplLCBjb25zdCBJbnRTaXplJiBzY3JvbGxPZmZzZXQpCiAgICAgc2l6ZURp
ZENoYW5nZSgpOwogfQogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0Uo
VEVYVFVSRV9NQVBQRVIpCi12b2lkIERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkK
LXsKLSAgICBtX3dlYlBhZ2VQcm94eS0+c2V0Vmlld05lZWRzRGlzcGxheSh2aWV3cG9ydFZpc2li
bGVSZWN0KCkpOwotfQotCi1XZWJDb3JlOjpJbnRSZWN0IERyYXdpbmdBcmVhUHJveHk6OmNvbnRl
bnRzUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
bV93ZWJQYWdlUHJveHktPnZpZXdTaXplKCkpOwotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVh
UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgKaW5k
ZXggYTE5NDk4MGZkMTg2MDYxNDk4ODE1ZDgyMTAyZmVkNmIyYzUxMDZmMy4uMDg4ZmM4Yjc0YTE4
ZjNmNmU2ZjUyM2E0NDFiZWEwMjFjYjk2OWIxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvRHJhd2luZ0FyZWFQcm94eS5oCkBAIC0yNywxMSArMjcsOSBAQAogI2lmbmRlZiBEcmF3aW5n
QXJlYVByb3h5X2gKICNkZWZpbmUgRHJhd2luZ0FyZWFQcm94eV9oCiAKLSNpbmNsdWRlIDxDb3Jl
SVBDL01lc3NhZ2VJRC5oPgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW5mby5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvSW50UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgogI2luY2x1
ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC00NywxNyArNDUsMTMgQEAg
bmFtZXNwYWNlIENvcmVJUEMgewogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3Mg
RmxvYXRQb2ludDsKLSAgICBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKKyAgICBjbGFzcyBJ
bnRSZWN0OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTGF5ZXJUcmVlQ29udGV4
dDsKLWNsYXNzIExheWVyVHJlZUhvc3RQcm94eTsKIGNsYXNzIFVwZGF0ZUluZm87Ci1jbGFzcyBX
ZWJMYXllclRyZWVJbmZvOwotY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOwogY2xhc3MgV2ViUGFn
ZVByb3h5OwogCiBjbGFzcyBEcmF3aW5nQXJlYVByb3h5IHsKQEAgLTgzLDI0ICs3Nyw2IEBAIHB1
YmxpYzoKICAgICBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9zaXplOyB9CiAgICAgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOwogCi0jaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVZpZXdwb3J0KCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZpZXdwb3J0Vmlz
aWJsZVJlY3QoKSBjb25zdCB7IHJldHVybiBjb250ZW50c1JlY3QoKTsgfQotICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50UmVjdCBjb250ZW50c1JlY3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
aXNCYWNraW5nU3RvcmVSZWFkeSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRp
b25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KSB7IH0KLQotI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5H
X1NUT1JFKQotICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5kU2NhbGUo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQgc2NhbGUp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVj
dG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3Jl
YXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVw
ZGF0ZUluZm8mKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKGludCBs
YXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2Uo
Q29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3Nh
Z2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpIHsgfQotCi0gICAgV2Vi
UGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gbV93ZWJQYWdlUHJveHk7IH0KLSNlbmRpZgotI2Vu
ZGlmCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgRHJhd2luZ0FyZWFQcm94eShEcmF3aW5nQXJl
YVR5cGUsIFdlYlBhZ2VQcm94eSopOwogCkBAIC0xMTAsMTAgKzg2LDYgQEAgcHJvdGVjdGVkOgog
ICAgIFdlYkNvcmU6OkludFNpemUgbV9zaXplOwogICAgIFdlYkNvcmU6OkludFNpemUgbV9zY3Jv
bGxPZmZzZXQ7CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhU
VVJFX01BUFBFUikKLSAgICBPd25QdHI8TGF5ZXJUcmVlSG9zdFByb3h5PiBtX2xheWVyVHJlZUhv
c3RQcm94eTsKLSNlbmRpZgotCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzaXplRGlkQ2hh
bmdlKCkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eUltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVh
UHJveHlJbXBsLmNwcAppbmRleCA0ZDdiZDQwYTBiYzYzOTM3MTljYmQwNGU2M2NlZGM0ZTcwYjBl
YzhkLi42MTlkNTA4MWQxN2EyNDg4NGU5YmI0MjA2Mzk0NzQ2MzM5OTJlNjJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKQEAgLTM0
LDEwICszNCw2IEBACiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZWdpb24uaD4KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNF
KFRFWFRVUkVfTUFQUEVSKQotI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgotI2VuZGlm
Ci0KIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTMz
MiwzOCArMzI4LDggQEAgdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZW50ZXJBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXgKICAgICBtX2JhY2tpbmdTdG9y
ZSA9IG51bGxwdHI7CiAgICAgbV9sYXllclRyZWVDb250ZXh0ID0gbGF5ZXJUcmVlQ29udGV4dDsK
ICAgICBtX3dlYlBhZ2VQcm94eS0+ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXll
clRyZWVDb250ZXh0KTsKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgaWYgKCFtX2xheWVy
VHJlZUhvc3RQcm94eSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHkgPSBhZG9wdFB0cihu
ZXcgTGF5ZXJUcmVlSG9zdFByb3h5KHRoaXMpKTsKLSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKFRJ
TEVEX0JBQ0tJTkdfU1RPUkUpCi12b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpkaWRSZWNlaXZl
TGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9u
LCBDb3JlSVBDOjpNZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIq
IGFyZ3VtZW50cykKLXsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0UHJveHkpCi0gICAgICAgIG1f
bGF5ZXJUcmVlSG9zdFByb3h5LT5kaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShj
b25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7Ci19Ci0KLXZvaWQgRHJhd2luZ0FyZWFQ
cm94eUltcGw6OnNldFZpc2libGVDb250ZW50c1JlY3RBbmRTY2FsZShjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiB2aXNpYmxlQ29udGVudHNSZWN0LCBmbG9hdCBzY2FsZSkKLXsKLSAgICBpZiAobV9s
YXllclRyZWVIb3N0UHJveHkpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5LT5zZXRWaXNp
YmxlQ29udGVudHNSZWN0QW5kU2NhbGUodmlzaWJsZUNvbnRlbnRzUmVjdCwgc2NhbGUpOwotfQot
Ci12b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0
b3J5VmVjdG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCi17
Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5KQotICAgICAgICBtX2xheWVyVHJlZUhvc3RQ
cm94eS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVj
dG9yKTsKIH0KIAotdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6cGFpbnRUb0N1cnJlbnRHTENv
bnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSkK
LXsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0UHJveHkpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9z
dFByb3h5LT5wYWludFRvQ3VycmVudEdMQ29udGV4dChtYXRyaXgsIG9wYWNpdHkpOwotfQotI2Vu
ZGlmCi0KIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSgpCiB7CiAgICAgQVNTRVJUKGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmgK
aW5kZXggYWFjNzFlODM3MGE3M2VkNjRlZDgzNjQ5NmQ1ZTAzOGY3MDllOTg0OS4uZDA5MWY5NzBj
YmFiMGIwMjhjOTU1OTQ4NjJiOTk1NTlmNTFiY2NjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmgKQEAgLTM5LDggKzM5LDYgQEAgY2xhc3Mg
UmVnaW9uOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgTGF5ZXJUcmVlSG9zdFByb3h5
OwotCiBjbGFzcyBEcmF3aW5nQXJlYVByb3h5SW1wbCA6IHB1YmxpYyBEcmF3aW5nQXJlYVByb3h5
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxEcmF3aW5nQXJlYVByb3h5SW1wbD4g
Y3JlYXRlKFdlYlBhZ2VQcm94eSopOwpAQCAtNzcsMTMgKzc1LDYgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwogCiAgICAgYm9vbCBpc0luQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBjb25zdCB7IHJldHVybiAhbV9sYXllclRyZWVDb250
ZXh0LmlzRW1wdHkoKTsgfQotCi0jaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAg
dmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3RBbmRTY2FsZShjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiB2aXNpYmxlQ29udGVudHNSZWN0LCBmbG9hdCBzY2FsZSk7Ci0gICAgdmlydHVh
bCB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4
dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpOwot
ICAgIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29u
bmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7
Ci0jZW5kaWYKICNlbHNlCiAgICAgYm9vbCBpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGNlZjFmZjk2OTU1YTUwZGZmZjAyN2Q0ZmFkZmEzMDJhNDkxNjQ2NzQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0xheWVyVHJlZUhvc3RQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8q
Ci0gICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
Ci0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgTGF5ZXJUcmVlSG9zdFByb3h5X2gKLSNkZWZpbmUg
TGF5ZXJUcmVlSG9zdFByb3h5X2gKLQotI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgotI2luY2x1
ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKLSNpbmNsdWRlICJNZXNzYWdlUXVldWUuaCIKLSNpbmNs
dWRlICJSZWdpb24uaCIKLSNpbmNsdWRlICJSdW5Mb29wLmgiCi0jaW5jbHVkZSAiV2ViTGF5ZXJU
cmVlSW5mby5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
LQotI2lmIFVTRShURVhUVVJFX01BUFBFUikKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0j
aW5jbHVkZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotY2xhc3MgV2ViTGF5ZXJJbmZvOwotY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOwotCi11
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotY2xhc3MgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVy
ZXI7Ci0KLWNsYXNzIExheWVyVHJlZUhvc3RQcm94eSA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xp
ZW50IHsKLXB1YmxpYzoKLSAgICBMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSop
OwotICAgIHZpcnR1YWwgfkxheWVyVHJlZUhvc3RQcm94eSgpOwotICAgIHZvaWQgc3luY0NvbXBv
c2l0aW5nTGF5ZXJTdGF0ZShjb25zdCBXZWJMYXllckluZm8mKTsKLSAgICB2b2lkIGRlbGV0ZUNv
bXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7Ci0gICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdM
YXllcihXZWJMYXllcklEKTsKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNv
bm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlciop
OwotICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBmbG9hdCk7Ci0gICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5kU2NhbGUo
Y29uc3QgSW50UmVjdCYsIGZsb2F0KTsKLSAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdFRy
YWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYpOwotI2lmIEVOQUJMRShUSUxFRF9CQUNL
SU5HX1NUT1JFKQotICAgIHZvaWQgc3luY1JlbW90ZUNvbnRlbnQoKTsKLSAgICB2b2lkIHN3YXBD
b250ZW50QnVmZmVycygpOwotICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUoKTsKLSAgICB2b2lkIGNy
ZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpV
cGRhdGVJbmZvJik7Ci0gICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGlu
dCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOwotICAgIHZvaWQgcmVtb3ZlVGls
ZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKTsKLSAgICB2b2lkIGNyZWF0ZURpcmVj
dGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3QsIGNvbnN0IFdlYktpdDo6U2hhcmVhYmxlQml0bWFw
OjpIYW5kbGUmKTsKLSAgICB2b2lkIGRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2
NF90KTsKLSAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciopOwotICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdEZvckxheWVyKFdlYkxheWVy
SUQsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7Ci0jZW5kaWYK
LQotcHJvdGVjdGVkOgotICAgIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gY3JlYXRlTGF5ZXIo
V2ViTGF5ZXJJRCk7Ci0KLSAgICBHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoV2ViTGF5ZXJJRCBp
ZCkgeyByZXR1cm4gKGlkID09IEludmFsaWRXZWJMYXllcklEKSA/IDAgOiBtX2xheWVycy5nZXQo
aWQpOyB9Ci0gICAgR3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5
ZXIuZ2V0KCk7IH0KLQotICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNsaWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRl
ZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSB7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVh
bCBib29sIHNob3dSZXBhaW50Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQotCi0gICAgUnVuTG9vcDo6VGltZXI8TGF5ZXJU
cmVlSG9zdFByb3h5PiBtX2FuaW1hdGlvblRpbWVyOwotICAgIERyYXdpbmdBcmVhUHJveHkqIG1f
ZHJhd2luZ0FyZWFQcm94eTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJMYXllcklELCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7Ci0gICAgSW50UmVjdCBtX3Zpc2libGVDb250
ZW50c1JlY3Q7Ci0gICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOwotCi0gICAgTWVzc2FnZVF1ZXVl
PExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyPiBtX21lc3NhZ2VzVG9SZW5kZXJlcjsKLSAgICB2
b2lkIHB1c2hVcGRhdGVUb1F1ZXVlKFBhc3NPd25QdHI8TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVy
ZXI+KTsKLQotI2lmIFVTRShURVhUVVJFX01BUFBFUikKLSAgICBPd25QdHI8VGV4dHVyZU1hcHBl
cj4gbV90ZXh0dXJlTWFwcGVyOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShRVCkKLSAgICB0eXBl
ZGVmIEhhc2hNYXA8SW50UG9pbnQsIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiA+IFRpbGVkSW1hZ2U7
Ci0gICAgVGV4dHVyZU1hcHBlck5vZGU6Ok5vZGVSZWN0TWFwIG1fbm9kZVZpc3VhbENvbnRlbnRz
UmVjdE1hcDsKLSAgICBIYXNoTWFwPGludCwgaW50PiBtX3RpbGVUb05vZGVUaWxlOwotICAgIGlu
dCByZW1vdGVUaWxlSURUb05vZGVUaWxlSUQoaW50IHRpbGVJRCkgY29uc3Q7Ci0gICAgSGFzaE1h
cDxpbnQ2NF90LCBUaWxlZEltYWdlPiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsKLQotICAg
IHZvaWQgc2NoZWR1bGVXZWJWaWV3VXBkYXRlKCk7Ci0gICAgdm9pZCBzeW5jaHJvbml6ZVZpZXdw
b3J0KCk7Ci0gICAgdm9pZCBkZWxldGVMYXllcihXZWJMYXllcklEKTsKLSAgICB2b2lkIHNldFJv
b3RMYXllcklEKFdlYkxheWVySUQpOwotICAgIHZvaWQgc3luY0xheWVyUGFyYW1ldGVycyhjb25z
dCBXZWJMYXllckluZm8mKTsKLSAgICB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50LCBm
bG9hdCBzY2FsZSk7Ci0gICAgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCk7Ci0gICAg
dm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IElu
dFJlY3QmLCBjb25zdCBRSW1hZ2UmKTsKLSAgICB2b2lkIGNyZWF0ZUltYWdlKGludDY0X3QsIGNv
bnN0IFFJbWFnZSYpOwotICAgIHZvaWQgZGVzdHJveUltYWdlKGludDY0X3QpOwotICAgIHZvaWQg
YXNzaWduSW1hZ2VUb0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBpbnQ2NF90IGltYWdl
SUQpOwotICAgIHZvaWQgZmx1c2hMYXllckNoYW5nZXMoKTsKLSAgICB2b2lkIGVuc3VyZVJvb3RM
YXllcigpOwotICAgIHZvaWQgZW5zdXJlTGF5ZXIoV2ViTGF5ZXJJRCk7Ci0KLSNlbmRpZgotCi0g
ICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwotICAgIFZlY3RvcjxXZWJMYXll
cklEPiBtX2xheWVyc1RvRGVsZXRlOwotCi0gICAgTGF5ZXJNYXAgbV9sYXllcnM7Ci0gICAgV2Vi
TGF5ZXJJRCBtX3Jvb3RMYXllcklEOwotICAgIGludCBtX2lkOwotfTsKLQotfQotCi0jZW5kaWYg
Ly8gTGF5ZXJUcmVlSG9zdFByb3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBiYzdhZmY4YTI1MWRjYjkwM2JlYzZmYjMxMjYxZDg5Yjg0ZTQ0ZWJlLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApA
QCAtMSwzMiArMCwwIEBACi0jCi0jICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSMKLSMgICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
IyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSMgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSMgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0jCi0jICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSMgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotIyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotIwotCi0jaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkK
LW1lc3NhZ2VzIC0+IExheWVyVHJlZUhvc3RQcm94eSB7Ci0gICAgU3luY0NvbXBvc2l0aW5nTGF5
ZXJTdGF0ZShXZWJLaXQ6OldlYkxheWVySW5mbyBsYXllckluZm8pCi0gICAgU2V0Um9vdENvbXBv
c2l0aW5nTGF5ZXIodWludDMyX3QgaWQpCi0gICAgRGVsZXRlQ29tcG9zaXRpbmdMYXllcih1aW50
MzJfdCBpZCkKLSAgICBDcmVhdGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgaW50IHRp
bGVJRCwgV2ViS2l0OjpVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCi0gICAgVXBkYXRlVGlsZUZvckxh
eWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQsIFdlYktpdDo6VXBkYXRlSW5mbyB1cGRh
dGVJbmZvKQotICAgIFJlbW92ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGls
ZUlEKQotICAgIENyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBXZWJL
aXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkKLSAgICBEZXN0cm95RGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCi0gICAgRGlkUmVuZGVyRnJhbWUoKQotfQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDM3Yzlj
MTM5NjNmNGZmZDYzNDdhMjZkNmI4ODQ0ZDA1OTUwNzYwY2QuLjA5NzJhZWQxOThhNTEzZThmMDEw
MjIxMzUzODczZWU4NzczM2M2MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCkBAIC03OSwxMCArNzksNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93RmVh
dHVyZXMuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0jaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFBy
b3h5TWVzc2FnZXMuaCIKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSAiQXJn
dW1lbnRDb2RlcnNRdC5oIgogI2VuZGlmCkBAIC0xNDA5LDEzICsxNDA1LDYgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rp
b24sIENvcmVJUEM6Ok0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIGlmIChtZXNzYWdl
SUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzTGF5ZXJUcmVlSG9zdFByb3h5PigpKSB7Ci0gICAg
ICAgIG1fZHJhd2luZ0FyZWEtPmRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKGNv
bm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSNlbmRpZgotCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAobWVzc2FnZUlELmlzPENv
cmVJUEM6Ok1lc3NhZ2VDbGFzc1dlYkluc3BlY3RvclByb3h5PigpKSB7CiAgICAgICAgIGlmIChX
ZWJJbnNwZWN0b3JQcm94eSogaW5zcGVjdG9yID0gdGhpcy0+aW5zcGVjdG9yKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGMwMzZlNGYzYWNmMzEzYWE3NmRjNzQ4Mzk2
N2Y2YzVkMjE0YjNhOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNTk0ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAy
MDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSNp
bmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKLQotI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RN
ZXNzYWdlcy5oIgotI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKLSNpbmNsdWRlICJNZXNzYWdlSUQu
aCIKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
R0wuaCIKLSNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmgiCi0jaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgotI2luY2x1ZGUgIldlYlBh
Z2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgInRleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgInRleG1hcC9UZXh0dXJl
TWFwcGVyLmgiCi0jaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgiCi0jaW5jbHVk
ZSA8UURhdGVUaW1lPgotI2luY2x1ZGUgPGNhaXJvL09wZW5HTFNoaW1zLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1jbGFzcyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlciB7Ci1wdWJsaWM6
Ci0gICAgZW51bSBUeXBlIHsKLSAgICAgICAgRGVsZXRlTGF5ZXIsCi0gICAgICAgIENyZWF0ZVRp
bGUsCi0gICAgICAgIFJlbW92ZVRpbGUsCi0gICAgICAgIFVwZGF0ZVRpbGUsCi0gICAgICAgIENy
ZWF0ZUltYWdlLAotICAgICAgICBEZXN0cm95SW1hZ2UsCi0gICAgICAgIFN5bmNMYXllclBhcmFt
ZXRlcnMsCi0gICAgICAgIEZsdXNoTGF5ZXJDaGFuZ2VzLAotICAgICAgICBTZXRSb290TGF5ZXIK
LSAgICB9OwotICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOwotfTsKLQotdGVtcGxh
dGU8Y2xhc3MgTWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpUeXBlIG1l
c3NhZ2VUeXBlPgotY2xhc3MgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YSA6IHB1
YmxpYyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtZXNzYWdlVHlwZTsgfQotCi0gICAgc3RhdGljIFBh
c3NPd25QdHI8TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI+IGNyZWF0ZShjb25zdCBNZXNzYWdl
RGF0YSYgZGF0YSA9IE1lc3NhZ2VEYXRhKCkpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGEoZGF0YSkpOwotICAgIH0K
LQotICAgIGNvbnN0IE1lc3NhZ2VEYXRhJiBkYXRhKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2RhdGE7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIExheWVyVHJlZU1lc3NhZ2VUb1Jl
bmRlcmVyV2l0aERhdGEoY29uc3QgTWVzc2FnZURhdGEmIGRhdGEpCi0gICAgICAgIDogbV9kYXRh
KGRhdGEpCi0gICAgewotICAgIH0KLQotICAgIE1lc3NhZ2VEYXRhIG1fZGF0YTsKLX07Ci0KLQot
bmFtZXNwYWNlIHsKLXN0cnVjdCBDcmVhdGVUaWxlTWVzc2FnZURhdGEgewotICAgIFdlYkxheWVy
SUQgbGF5ZXJJRDsKLSAgICBpbnQgcmVtb3RlVGlsZUlEOwotICAgIGZsb2F0IHNjYWxlOwotfTsK
LQotc3RydWN0IFVwZGF0ZVRpbGVNZXNzYWdlRGF0YSB7Ci0gICAgV2ViTGF5ZXJJRCBsYXllcklE
OwotICAgIGludCByZW1vdGVUaWxlSUQ7Ci0gICAgSW50UmVjdCBzb3VyY2VSZWN0OwotICAgIElu
dFJlY3QgdGFyZ2V0UmVjdDsKLSAgICBRSW1hZ2UgaW1hZ2U7Ci19OwotCi1zdHJ1Y3QgUmVtb3Zl
VGlsZU1lc3NhZ2VEYXRhIHsKLSAgICBXZWJMYXllcklEIGxheWVySUQ7Ci0gICAgaW50IHJlbW90
ZVRpbGVJRDsKLX07Ci0KLXN0cnVjdCBDcmVhdGVJbWFnZU1lc3NhZ2VEYXRhIHsKLSAgICBpbnQ2
NF90IGltYWdlSUQ7Ci0gICAgUUltYWdlIGltYWdlOwotfTsKLQotc3RydWN0IERlc3Ryb3lJbWFn
ZU1lc3NhZ2VEYXRhIHsKLSAgICBpbnQ2NF90IGltYWdlSUQ7Ci19OwotCi1zdHJ1Y3QgU3luY0xh
eWVyUGFyYW1ldGVyc01lc3NhZ2VEYXRhIHsKLSAgICBXZWJMYXllckluZm8gbGF5ZXJJbmZvOwot
fTsKLQotc3RydWN0IEVtcHR5TWVzc2FnZURhdGEgeyB9Owotc3RydWN0IERlbGV0ZUxheWVyTWVz
c2FnZURhdGEgewotICAgIFdlYkxheWVySUQgbGF5ZXJJRDsKLX07Ci1zdHJ1Y3QgU2V0Um9vdExh
eWVyTWVzc2FnZURhdGEgewotICAgIFdlYkxheWVySUQgbGF5ZXJJRDsKLX07Ci0KLWNsYXNzIENy
ZWF0ZVRpbGVNZXNzYWdlCi0gICAgICAgIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRl
cmVyV2l0aERhdGE8Q3JlYXRlVGlsZU1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5k
ZXJlcjo6Q3JlYXRlVGlsZT4geyB9OwotY2xhc3MgVXBkYXRlVGlsZU1lc3NhZ2UKLSAgICAgICAg
OiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YTxVcGRhdGVUaWxlTWVz
c2FnZURhdGEsIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpVcGRhdGVUaWxlPiB7IH07Ci1j
bGFzcyBSZW1vdmVUaWxlTWVzc2FnZQotICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVNZXNzYWdl
VG9SZW5kZXJlcldpdGhEYXRhPFJlbW92ZVRpbGVNZXNzYWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2Fn
ZVRvUmVuZGVyZXI6OlJlbW92ZVRpbGU+IHsgfTsKLWNsYXNzIENyZWF0ZUltYWdlTWVzc2FnZQot
ICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhPENyZWF0
ZUltYWdlTWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpDcmVhdGVJbWFn
ZT4geyB9OwotY2xhc3MgRGVzdHJveUltYWdlTWVzc2FnZQotICAgICAgICA6IHB1YmxpYyBMYXll
clRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhPERlc3Ryb3lJbWFnZU1lc3NhZ2VEYXRhLCBM
YXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6RGVzdHJveUltYWdlPiB7IH07Ci1jbGFzcyBGbHVz
aExheWVyQ2hhbmdlc01lc3NhZ2UKLSAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRv
UmVuZGVyZXJXaXRoRGF0YTxFbXB0eU1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5k
ZXJlcjo6Rmx1c2hMYXllckNoYW5nZXM+IHsgfTsKLWNsYXNzIFN5bmNMYXllclBhcmFtZXRlcnNN
ZXNzYWdlCi0gICAgICAgIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERh
dGE8U3luY0xheWVyUGFyYW1ldGVyc01lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5k
ZXJlcjo6U3luY0xheWVyUGFyYW1ldGVycz4geyB9OwotY2xhc3MgRGVsZXRlTGF5ZXJNZXNzYWdl
Ci0gICAgICAgIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8RGVs
ZXRlTGF5ZXJNZXNzYWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OkRlbGV0ZUxh
eWVyPiB7IH07Ci1jbGFzcyBTZXRSb290TGF5ZXJNZXNzYWdlCi0gICAgICAgIDogcHVibGljIExh
eWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8U2V0Um9vdExheWVyTWVzc2FnZURhdGEs
IExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpTZXRSb290TGF5ZXI+IHsgfTsKLX0KLQotUGFz
c093blB0cjxHcmFwaGljc0xheWVyPiBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUxheWVyKFdl
YkxheWVySUQgbGF5ZXJJRCkKLXsKLSAgICBHcmFwaGljc0xheWVyKiBuZXdMYXllciA9IG5ldyBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcih0aGlzKTsKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSog
bm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUobmV3TGF5ZXIpOwotICAgIG5vZGUtPnNldElEKGxh
eWVySUQpOwotICAgIG5vZGUtPnNldFRpbGVPd25lcnNoaXAoVGV4dHVyZU1hcHBlck5vZGU6OkV4
dGVybmFsbHlNYW5hZ2VkVGlsZXMpOwotICAgIHJldHVybiBhZG9wdFB0cihuZXdMYXllcik7Ci19
Ci0KLUxheWVyVHJlZUhvc3RQcm94eTo6TGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdBcmVhUHJv
eHkqIGRyYXdpbmdBcmVhUHJveHkpCi0gICAgOiBtX2FuaW1hdGlvblRpbWVyKFJ1bkxvb3A6Om1h
aW4oKSwgdGhpcywgJkxheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVmlld3BvcnQpCi0gICAgLCBt
X2RyYXdpbmdBcmVhUHJveHkoZHJhd2luZ0FyZWFQcm94eSkKLSAgICAsIG1fcm9vdExheWVySUQo
MCkKLXsKLX0KLQotTGF5ZXJUcmVlSG9zdFByb3h5Ojp+TGF5ZXJUcmVlSG9zdFByb3h5KCkKLXsK
LX0KLQotLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSByZWVudHJhbnQuCi12b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBpZiAoIW1fdGV4dHVyZU1h
cHBlcikKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUo
KTsKLQotICAgIHN5bmNSZW1vdGVDb250ZW50KCk7Ci0gICAgR3JhcGhpY3NMYXllciogY3VycmVu
dFJvb3RMYXllciA9IHJvb3RMYXllcigpOwotICAgIGlmICghY3VycmVudFJvb3RMYXllcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVN
YXBwZXJOb2RlKGN1cnJlbnRSb290TGF5ZXIpOwotCi0gICAgaWYgKCFub2RlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHTGludCB2aWV3cG9ydFs0XTsKLSAgICBnbEdldEludGVnZXJ2KEdMX1ZJ
RVdQT1JULCB2aWV3cG9ydCk7Ci0gICAgSW50UmVjdCB2aWV3cG9ydFJlY3Qodmlld3BvcnRbMF0s
IHZpZXdwb3J0WzFdLCB2aWV3cG9ydFsyXSwgdmlld3BvcnRbM10pOwotICAgIG1fdGV4dHVyZU1h
cHBlci0+c2V0Vmlld3BvcnRTaXplKEludFNpemUodmlld3BvcnRbMl0sIHZpZXdwb3J0WzNdKSk7
Ci0gICAgbm9kZS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwotICAg
IG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+
YmluZFN1cmZhY2UoMCk7Ci0KLSAgICBpZiAoY3VycmVudFJvb3RMYXllci0+b3BhY2l0eSgpICE9
IG9wYWNpdHkgfHwgY3VycmVudFJvb3RMYXllci0+dHJhbnNmb3JtKCkgIT0gbWF0cml4KSB7Ci0g
ICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7Ci0gICAgICAgIGN1
cnJlbnRSb290TGF5ZXItPnNldFRyYW5zZm9ybShtYXRyaXgpOwotICAgICAgICBjdXJyZW50Um9v
dExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLSAgICB9Ci0K
LSAgICBUZXh0dXJlTWFwcGVyTm9kZTo6Tm9kZVJlY3RNYXAgbm9kZVZpc3VhbENvbnRlbnRzUmVj
dE1hcDsKLSAgICBpZiAobm9kZS0+Y29sbGVjdFZpc2libGVDb250ZW50c1JlY3RzKG5vZGVWaXN1
YWxDb250ZW50c1JlY3RNYXAsIHZpZXdwb3J0UmVjdCkpIHsKLSAgICAgICAgVGV4dHVyZU1hcHBl
ck5vZGU6Ok5vZGVSZWN0TWFwOjppdGVyYXRvciBlbmRJdGVyYXRvciA9IG5vZGVWaXN1YWxDb250
ZW50c1JlY3RNYXAuZW5kKCk7Ci0gICAgICAgIGZvciAoVGV4dHVyZU1hcHBlck5vZGU6Ok5vZGVS
ZWN0TWFwOjppdGVyYXRvciBpdCA9IG5vZGVWaXN1YWxDb250ZW50c1JlY3RNYXAuYmVnaW4oKTsg
aXQgIT0gZW5kSXRlcmF0b3I7ICsraXQpIHsKLSAgICAgICAgICAgIFdlYkxheWVySUQgbGF5ZXJJ
RCA9IGl0LT5maXJzdC0+aWQoKTsKLSAgICAgICAgICAgIC8vIGF2b2lkIHVwZGF0aW5nIG5vbi1z
eW5jZWQgcm9vdCBsYXllcgotICAgICAgICAgICAgaWYgKCFsYXllcklEKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IEludFJlY3Qo
aXQtPnNlY29uZCk7Ci0gICAgICAgICAgICBzZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yTGF5ZXIo
bGF5ZXJJRCwgdmlzaWJsZVJlY3QpOwotICAgICAgICB9Ci0gICAgfQotICAgIG5vZGUtPnBhaW50
KCk7Ci0KLSAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7Ci0KLSAgICBpZiAobm9k
ZS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKLSAgICAgICAgdXBk
YXRlVmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdw
b3J0KCkKLXsKLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7Ci19Ci0K
LXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yTGF5ZXIo
V2ViTGF5ZXJJRCBsYXllcklELCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIG1fZHJhd2lu
Z0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhv
c3Q6OlNldFZpc2libGVDb250ZW50UmVjdEZvckxheWVyKGxheWVySUQsIHJlY3QpLCBtX2RyYXdp
bmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOwotfQotCi1pbnQgTGF5ZXJUcmVlSG9zdFBy
b3h5OjpyZW1vdGVUaWxlSURUb05vZGVUaWxlSUQoaW50IHRpbGVJRCkgY29uc3QKLXsKLSAgICBI
YXNoTWFwPGludCwgaW50Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVUb05vZGVUaWxlLmZp
bmQodGlsZUlEKTsKLSAgICBpZiAoaXQgPT0gbV90aWxlVG9Ob2RlVGlsZS5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
SG9zdFByb3h5OjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKGNvbnN0IFdlYkxheWVySW5mbyYgbGF5ZXJJ
bmZvKQotewotICAgIFdlYkxheWVySUQgaWQgPSBsYXllckluZm8uaWQ7Ci0gICAgZW5zdXJlTGF5
ZXIoaWQpOwotICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQoaWQpOwot
ICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnNlY29uZDsKLQotICAgIGxheWVyLT5zZXRO
YW1lKGxheWVySW5mby5uYW1lKTsKLQotICAgIGxheWVyLT5zZXRSZXBsaWNhdGVkQnlMYXllcihs
YXllckJ5SUQobGF5ZXJJbmZvLnJlcGxpY2EpKTsKLSAgICBsYXllci0+c2V0TWFza0xheWVyKGxh
eWVyQnlJRChsYXllckluZm8ubWFzaykpOwotCi0gICAgbGF5ZXItPnNldFBvc2l0aW9uKGxheWVy
SW5mby5wb3MpOwotICAgIGxheWVyLT5zZXRTaXplKGxheWVySW5mby5zaXplKTsKLSAgICBsYXll
ci0+c2V0VHJhbnNmb3JtKGxheWVySW5mby50cmFuc2Zvcm0pOwotICAgIGxheWVyLT5zZXRBbmNo
b3JQb2ludChsYXllckluZm8uYW5jaG9yUG9pbnQpOwotICAgIGxheWVyLT5zZXRDaGlsZHJlblRy
YW5zZm9ybShsYXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0pOwotICAgIGxheWVyLT5zZXRCYWNr
ZmFjZVZpc2liaWxpdHkobGF5ZXJJbmZvLmJhY2tmYWNlVmlzaWJsZSk7Ci0gICAgbGF5ZXItPnNl
dENvbnRlbnRzT3BhcXVlKGxheWVySW5mby5jb250ZW50c09wYXF1ZSk7Ci0gICAgbGF5ZXItPnNl
dENvbnRlbnRzUmVjdChsYXllckluZm8uY29udGVudHNSZWN0KTsKLSAgICBsYXllci0+c2V0RHJh
d3NDb250ZW50KGxheWVySW5mby5kcmF3c0NvbnRlbnQpOwotCi0gICAgaWYgKGxheWVySW5mby5p
bWFnZUlzVXBkYXRlZCkKLSAgICAgICAgYXNzaWduSW1hZ2VUb0xheWVyKGxheWVyLCBsYXllcklu
Zm8uaW1hZ2VCYWNraW5nU3RvcmVJRCk7Ci0KLSAgICAvLyBOZXZlciBtYWtlIHRoZSByb290IGxh
eWVyIGNsaXAuCi0gICAgbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJJbmZvLmlzUm9vdExh
eWVyID8gZmFsc2UgOiBsYXllckluZm8ubWFza3NUb0JvdW5kcyk7Ci0gICAgbGF5ZXItPnNldE9w
YWNpdHkobGF5ZXJJbmZvLm9wYWNpdHkpOwotICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChsYXll
ckluZm8ucHJlc2VydmVzM0QpOwotICAgIFZlY3RvcjxHcmFwaGljc0xheWVyKj4gY2hpbGRyZW47
Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW5mby5jaGlsZHJlbi5zaXplKCk7
ICsraSkgewotICAgICAgICBXZWJMYXllcklEIGNoaWxkSUQgPSBsYXllckluZm8uY2hpbGRyZW5b
aV07Ci0gICAgICAgIEdyYXBoaWNzTGF5ZXIqIGNoaWxkID0gbGF5ZXJCeUlEKGNoaWxkSUQpOwot
ICAgICAgICBpZiAoIWNoaWxkKSB7Ci0gICAgICAgICAgICBjaGlsZCA9IGNyZWF0ZUxheWVyKGNo
aWxkSUQpLmxlYWtQdHIoKTsKLSAgICAgICAgICAgIG1fbGF5ZXJzLmFkZChjaGlsZElELCBjaGls
ZCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKLSAgICB9Ci0g
ICAgbGF5ZXItPnNldENoaWxkcmVuKGNoaWxkcmVuKTsKLQotICAgIGlmIChsYXllckluZm8uaXNS
b290TGF5ZXIgJiYgbV9yb290TGF5ZXJJRCAhPSBpZCkKLSAgICAgICAgc2V0Um9vdExheWVySUQo
aWQpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVsZXRlTGF5ZXIoV2ViTGF5ZXJJ
RCBsYXllcklEKQotewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVy
SUQpOwotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGxheWVyLT5yZW1v
dmVGcm9tUGFyZW50KCk7Ci0gICAgbV9sYXllcnMucmVtb3ZlKGxheWVySUQpOwotICAgIGRlbGV0
ZSBsYXllcjsKLX0KLQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZW5zdXJlTGF5ZXIoV2Vi
TGF5ZXJJRCBpZCkKLXsKLSAgICAvLyBXZSBoYXZlIHRvIGxlYWsgdGhlIG5ldyBsYXllcidzIHBv
aW50ZXIgYW5kIG1hbmFnZSBpdCBvdXJzZWx2ZXMsCi0gICAgLy8gYmVjYXVzZSBPd25QdHIgaXMg
bm90IGNvcHlhYmxlLgotICAgIGlmIChtX2xheWVycy5maW5kKGlkKSA9PSBtX2xheWVycy5lbmQo
KSkKLSAgICAgICAgbV9sYXllcnMuYWRkKGlkLCBjcmVhdGVMYXllcihpZCkubGVha1B0cigpKTsK
LX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFJvb3RMYXllcklEKFdlYkxheWVySUQg
bGF5ZXJJRCkKLXsKLSAgICBpZiAobGF5ZXJJRCA9PSBtX3Jvb3RMYXllcklEKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3Jvb3RMYXllcklEID0gbGF5ZXJJRDsKLQotICAgIG1fcm9vdExheWVy
LT5yZW1vdmVBbGxDaGlsZHJlbigpOwotCi0gICAgaWYgKCFsYXllcklEKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKLSAg
ICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jvb3RMYXllci0+YWRkQ2hp
bGQobGF5ZXIpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGlsZShXZWJM
YXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGZsb2F0IHNjYWxlKQotewotICAgIGVuc3VyZUxh
eWVyKGxheWVySUQpOwotICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFw
cGVyTm9kZShsYXllckJ5SUQobGF5ZXJJRCkpOwotCi0gICAgaW50IG5vZGVUaWxlSUQgPSBub2Rl
LT5jcmVhdGVDb250ZW50c1RpbGUoc2NhbGUpOwotICAgIG1fdGlsZVRvTm9kZVRpbGUuYWRkKHRp
bGVJRCwgbm9kZVRpbGVJRCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVU
aWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKLXsKLSAgICBUZXh0dXJlTWFwcGVy
Tm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUobGF5ZXJCeUlEKGxheWVySUQpKTsKLSAg
ICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCBub2RlVGlsZUlEID0gcmVt
b3RlVGlsZUlEVG9Ob2RlVGlsZUlEKHRpbGVJRCk7Ci0gICAgaWYgKCFub2RlVGlsZUlEKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBub2RlLT5yZW1vdmVDb250ZW50c1RpbGUobm9kZVRpbGVJRCk7
Ci0gICAgbV90aWxlVG9Ob2RlVGlsZS5yZW1vdmUodGlsZUlEKTsKLX0KLQotdm9pZCBMYXllclRy
ZWVIb3N0UHJveHk6OnVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBRSW1hZ2UmIGltYWdlKQotewotICAgIGVuc3VyZUxheWVyKGxheWVySUQpOwotICAgIFRleHR1
cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXllckJ5SUQobGF5ZXJJ
RCkpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IG5vZGVUaWxl
SUQgPSByZW1vdGVUaWxlSURUb05vZGVUaWxlSUQodGlsZUlEKTsKLSAgICBpZiAoIW5vZGVUaWxl
SUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFFJbWFnZSBpbWFnZVJlZihpbWFnZSk7Ci0gICAg
bm9kZS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwotICAgIG5vZGUt
PnNldENvbnRlbnRzVGlsZUJhY2tCdWZmZXIobm9kZVRpbGVJRCwgc291cmNlUmVjdCwgdGFyZ2V0
UmVjdCwgaW1hZ2VSZWYuYml0cygpLCBCaXRtYXBUZXh0dXJlOjpCR1JBRm9ybWF0KTsKLX0KLQot
dm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUltYWdlKGludDY0X3QgaW1hZ2VJRCwgY29u
c3QgUUltYWdlJiBpbWFnZSkKLXsKLSAgICBUaWxlZEltYWdlIHRpbGVkSW1hZ2U7Ci0gICAgc3Rh
dGljIGNvbnN0IGludCBUaWxlRGltZW5zaW9uID0gMTAyNDsKLSAgICBib29sIGltYWdlSGFzQWxw
aGEgPSBpbWFnZS5oYXNBbHBoYUNoYW5uZWwoKTsKLSAgICBJbnRSZWN0IGltYWdlUmVjdCgwLCAw
LCBpbWFnZS53aWR0aCgpLCBpbWFnZS5oZWlnaHQoKSk7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBpbWFnZS5oZWlnaHQoKTsgeSArPSBUaWxlRGltZW5zaW9uKSB7Ci0gICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgaW1hZ2Uud2lkdGgoKTsgeCArPSBUaWxlRGltZW5zaW9uKSB7Ci0gICAgICAg
ICAgICBRSW1hZ2Ugc3ViSW1hZ2U7Ci0gICAgICAgICAgICBJbnRSZWN0IHJlY3QoeCwgeSwgVGls
ZURpbWVuc2lvbiwgVGlsZURpbWVuc2lvbik7Ci0gICAgICAgICAgICByZWN0LmludGVyc2VjdChp
bWFnZVJlY3QpOwotICAgICAgICAgICAgaWYgKFFTaXplKHJlY3Quc2l6ZSgpKSA9PSBpbWFnZS5z
aXplKCkpCi0gICAgICAgICAgICAgICAgc3ViSW1hZ2UgPSBpbWFnZTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBzdWJJbWFnZSA9IGltYWdlLmNvcHkocmVjdCk7Ci0gICAgICAg
ICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IG1fdGV4dHVyZU1hcHBlci0+Y3Jl
YXRlVGV4dHVyZSgpOwotICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXQocmVjdC5zaXplKCksICFp
bWFnZUhhc0FscGhhKTsKLSAgICAgICAgICAgIHRleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKGltYWdl
SGFzQWxwaGEgPyBCaXRtYXBUZXh0dXJlOjpCR1JBRm9ybWF0IDogQml0bWFwVGV4dHVyZTo6QkdS
Rm9ybWF0LCBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHJlY3Quc2l6ZSgpKSwgc3ViSW1hZ2Uu
Yml0cygpKTsKLSAgICAgICAgICAgIHRpbGVkSW1hZ2UuYWRkKHJlY3QubG9jYXRpb24oKSwgdGV4
dHVyZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdl
cy5yZW1vdmUoaW1hZ2VJRCk7Ci0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuYWRkKGlt
YWdlSUQsIHRpbGVkSW1hZ2UpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJv
eUltYWdlKGludDY0X3QgaW1hZ2VJRCkKLXsKLSAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdl
cy5yZW1vdmUoaW1hZ2VJRCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojphc3NpZ25J
bWFnZVRvTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIsIGludDY0X3QgaW1hZ2VJRCkKLXsKLSAg
ICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUobGF5ZXIpOwot
ICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFpbWFnZUlEKSB7Ci0g
ICAgICAgIG5vZGUtPmNsZWFyQWxsRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VUaWxlcygpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRmxvYXRTaXplIHNpemUobGF5ZXItPnNpemUoKSk7
Ci0gICAgRmxvYXRSZWN0IGNvbnRlbnRzUmVjdChsYXllci0+Y29udGVudHNSZWN0KCkpOwotICAg
IGZsb2F0IGhvcml6b250YWxGYWN0b3IgPSBjb250ZW50c1JlY3Qud2lkdGgoKSAvIHNpemUud2lk
dGgoKTsKLSAgICBmbG9hdCB2ZXJ0aWNhbEZhY3RvciA9IGNvbnRlbnRzUmVjdC5oZWlnaHQoKSAv
IHNpemUuaGVpZ2h0KCk7Ci0gICAgSGFzaE1hcDxpbnQ2NF90LCBUaWxlZEltYWdlPjo6aXRlcmF0
b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5maW5kKGltYWdlSUQpOwotICAgIGlm
IChpdCA9PSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgVGlsZWRJbWFnZTo6aXRlcmF0b3IgZW5kVGlsZUl0ZXJhdG9yID0gaXQtPnNlY29u
ZC5lbmQoKTsKLSAgICBmb3IgKFRpbGVkSW1hZ2U6Oml0ZXJhdG9yIHRpbGVJdCA9IGl0LT5zZWNv
bmQuYmVnaW4oKTsgdGlsZUl0ICE9IGVuZFRpbGVJdGVyYXRvcjsgKyt0aWxlSXQpIHsKLSAgICAg
ICAgRmxvYXRSZWN0IHNvdXJjZVJlY3QoRmxvYXRQb2ludCh0aWxlSXQtPmZpcnN0KSwgRmxvYXRT
aXplKHRpbGVJdC0+c2Vjb25kLT5zaXplKCkpKTsKLSAgICAgICAgRmxvYXRSZWN0IHRhcmdldFJl
Y3Qoc291cmNlUmVjdC54KCkgKiBob3Jpem9udGFsRmFjdG9yICsgY29udGVudHNSZWN0LngoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUmVjdC55KCkgKiB2ZXJ0aWNhbEZh
Y3RvciArIGNvbnRlbnRzUmVjdC55KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNv
dXJjZVJlY3Qud2lkdGgoKSAqIGhvcml6b250YWxGYWN0b3IsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNvdXJjZVJlY3QuaGVpZ2h0KCkgKiB2ZXJ0aWNhbEZhY3Rvcik7Ci0gICAgICAg
IGludCBuZXdUaWxlSUQgPSBub2RlLT5jcmVhdGVDb250ZW50c1RpbGUoMS4wKTsKLSAgICAgICAg
bm9kZS0+c2V0VGlsZUJhY2tCdWZmZXJUZXh0dXJlRm9yRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uo
bmV3VGlsZUlELCBJbnRSZWN0KHNvdXJjZVJlY3QpLCB0YXJnZXRSZWN0LCB0aWxlSXQtPnNlY29u
ZC5nZXQoKSk7Ci0gICAgfQotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Zmx1c2hMYXll
ckNoYW5nZXMoKQotewotICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShGbG9h
dFJlY3QoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjplbnN1cmVSb290TGF5ZXIo
KQotewotICAgIGlmIChtX3Jvb3RMYXllcikKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcm9vdExh
eWVyID0gY3JlYXRlTGF5ZXIoSW52YWxpZFdlYkxheWVySUQpOwotICAgIG1fcm9vdExheWVyLT5z
ZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50
KGZhbHNlKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKDAs
IDAsIDApKTsKLQotICAgIC8vIFRoZSByb290IGxheWVyIHNob3VsZCBub3QgaGF2ZSB6ZXJvIHNp
emUsIG9yIGl0IHdvdWxkIGJlIG9wdGltaXplZCBvdXQuCi0gICAgbV9yb290TGF5ZXItPnNldFNp
emUoRmxvYXRTaXplKDEuMCwgMS4wKSk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1h
cHBlckdMOjpjcmVhdGUoKTsKLSAgICB0b1RleHR1cmVNYXBwZXJOb2RlKG1fcm9vdExheWVyLmdl
dCgpKS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwotfQotCi12b2lk
IExheWVyVHJlZUhvc3RQcm94eTo6c3luY1JlbW90ZUNvbnRlbnQoKQotewotICAgIC8vIFdlIGVu
cXVldWUgbWVzc2FnZXMgYW5kIGV4ZWN1dGUgdGhlbSBkdXJpbmcgcGFpbnQsIGFzIHRoZXkgcmVx
dWlyZSBhbiBhY3RpdmUgR0wgY29udGV4dC4KLSAgICBlbnN1cmVSb290TGF5ZXIoKTsKLQotICAg
IHdoaWxlIChPd25QdHI8TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI+IG5leHRNZXNzYWdlID0g
bV9tZXNzYWdlc1RvUmVuZGVyZXIudHJ5R2V0TWVzc2FnZSgpKSB7Ci0gICAgICAgIHN3aXRjaCAo
bmV4dE1lc3NhZ2UtPnR5cGUoKSkgewotICAgICAgICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1Jl
bmRlcmVyOjpTZXRSb290TGF5ZXI6IHsKLSAgICAgICAgICAgIGNvbnN0IFNldFJvb3RMYXllck1l
c3NhZ2VEYXRhJiBkYXRhID0gc3RhdGljX2Nhc3Q8U2V0Um9vdExheWVyTWVzc2FnZSo+KG5leHRN
ZXNzYWdlLmdldCgpKS0+ZGF0YSgpOwotICAgICAgICAgICAgc2V0Um9vdExheWVySUQoZGF0YS5s
YXllcklEKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBM
YXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6RGVsZXRlTGF5ZXI6IHsKLSAgICAgICAgICAgIGNv
bnN0IERlbGV0ZUxheWVyTWVzc2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxEZWxldGVMYXll
ck1lc3NhZ2UqPihuZXh0TWVzc2FnZS5nZXQoKSktPmRhdGEoKTsKLSAgICAgICAgICAgIGRlbGV0
ZUxheWVyKGRhdGEubGF5ZXJJRCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlN5bmNMYXllclBhcmFtZXRl
cnM6IHsKLSAgICAgICAgICAgIGNvbnN0IFN5bmNMYXllclBhcmFtZXRlcnNNZXNzYWdlRGF0YSYg
ZGF0YSA9IHN0YXRpY19jYXN0PFN5bmNMYXllclBhcmFtZXRlcnNNZXNzYWdlKj4obmV4dE1lc3Nh
Z2UuZ2V0KCkpLT5kYXRhKCk7Ci0gICAgICAgICAgICBzeW5jTGF5ZXJQYXJhbWV0ZXJzKGRhdGEu
bGF5ZXJJbmZvKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2Fz
ZSBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6Q3JlYXRlVGlsZTogewotICAgICAgICAgICAg
Y29uc3QgQ3JlYXRlVGlsZU1lc3NhZ2VEYXRhJiBkYXRhID0gc3RhdGljX2Nhc3Q8Q3JlYXRlVGls
ZU1lc3NhZ2UqPihuZXh0TWVzc2FnZS5nZXQoKSktPmRhdGEoKTsKLSAgICAgICAgICAgIGNyZWF0
ZVRpbGUoZGF0YS5sYXllcklELCBkYXRhLnJlbW90ZVRpbGVJRCwgZGF0YS5zY2FsZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2Fn
ZVRvUmVuZGVyZXI6OlJlbW92ZVRpbGU6IHsKLSAgICAgICAgICAgIGNvbnN0IFJlbW92ZVRpbGVN
ZXNzYWdlRGF0YSYgZGF0YSA9IHN0YXRpY19jYXN0PFJlbW92ZVRpbGVNZXNzYWdlKj4obmV4dE1l
c3NhZ2UuZ2V0KCkpLT5kYXRhKCk7Ci0gICAgICAgICAgICByZW1vdmVUaWxlKGRhdGEubGF5ZXJJ
RCwgZGF0YS5yZW1vdGVUaWxlSUQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQot
ICAgICAgICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpVcGRhdGVUaWxlOiB7Ci0g
ICAgICAgICAgICBjb25zdCBVcGRhdGVUaWxlTWVzc2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2Fz
dDxVcGRhdGVUaWxlTWVzc2FnZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgpOwotICAgICAg
ICAgICAgdXBkYXRlVGlsZShkYXRhLmxheWVySUQsIGRhdGEucmVtb3RlVGlsZUlELCBkYXRhLnNv
dXJjZVJlY3QsIGRhdGEudGFyZ2V0UmVjdCwgZGF0YS5pbWFnZSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6
OkNyZWF0ZUltYWdlOiB7Ci0gICAgICAgICAgICBjb25zdCBDcmVhdGVJbWFnZU1lc3NhZ2VEYXRh
JiBkYXRhID0gc3RhdGljX2Nhc3Q8Q3JlYXRlSW1hZ2VNZXNzYWdlKj4obmV4dE1lc3NhZ2UuZ2V0
KCkpLT5kYXRhKCk7Ci0gICAgICAgICAgICBjcmVhdGVJbWFnZShkYXRhLmltYWdlSUQsIGRhdGEu
aW1hZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIExh
eWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpEZXN0cm95SW1hZ2U6IHsKLSAgICAgICAgICAgIGNv
bnN0IENyZWF0ZUltYWdlTWVzc2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxDcmVhdGVJbWFn
ZU1lc3NhZ2UqPihuZXh0TWVzc2FnZS5nZXQoKSktPmRhdGEoKTsKLSAgICAgICAgICAgIGRlc3Ry
b3lJbWFnZShkYXRhLmltYWdlSUQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQot
ICAgICAgICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpGbHVzaExheWVyQ2hhbmdl
czoKLSAgICAgICAgICAgIGZsdXNoTGF5ZXJDaGFuZ2VzKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnB1c2hVcGRh
dGVUb1F1ZXVlKFBhc3NPd25QdHI8TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI+IG1lc3NhZ2Up
Ci17Ci0gICAgbV9tZXNzYWdlc1RvUmVuZGVyZXIuYXBwZW5kKG1lc3NhZ2UpOwotICAgIHVwZGF0
ZVZpZXdwb3J0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVUaWxlRm9y
TGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYg
dXBkYXRlSW5mbykKLXsKLSAgICBDcmVhdGVUaWxlTWVzc2FnZURhdGEgZGF0YTsKLSAgICBkYXRh
LmxheWVySUQgPSBsYXllcklEOwotICAgIGRhdGEucmVtb3RlVGlsZUlEID0gdGlsZUlEOwotICAg
IGRhdGEuc2NhbGUgPSB1cGRhdGVJbmZvLnVwZGF0ZVNjYWxlRmFjdG9yOwotICAgIHB1c2hVcGRh
dGVUb1F1ZXVlKENyZWF0ZVRpbGVNZXNzYWdlOjpjcmVhdGUoZGF0YSkpOwotICAgIHVwZGF0ZVRp
bGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8pOwotfQotCi12b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlE
LCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0gICAgVXBkYXRlVGls
ZU1lc3NhZ2VEYXRhIGRhdGE7Ci0gICAgZGF0YS5sYXllcklEID0gbGF5ZXJJRDsKLSAgICBkYXRh
LnJlbW90ZVRpbGVJRCA9IHRpbGVJRDsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRt
YXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZSh1cGRhdGVJbmZvLmJpdG1hcEhhbmRsZSk7Ci0g
ICAgZGF0YS5pbWFnZSA9IGJpdG1hcC0+Y3JlYXRlUUltYWdlKCkuY29weSgpOwotICAgIGRhdGEu
c291cmNlUmVjdCA9IEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgdXBkYXRlSW5mby51cGRhdGVS
ZWN0Qm91bmRzLnNpemUoKSk7Ci0gICAgZGF0YS50YXJnZXRSZWN0ID0gdXBkYXRlSW5mby51cGRh
dGVSZWN0Qm91bmRzOwotICAgIHB1c2hVcGRhdGVUb1F1ZXVlKFVwZGF0ZVRpbGVNZXNzYWdlOjpj
cmVhdGUoZGF0YSkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZv
ckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKQotewotICAgIFJlbW92ZVRpbGVNZXNzYWdl
RGF0YSBkYXRhOwotICAgIGRhdGEubGF5ZXJJRCA9IGxheWVySUQ7Ci0gICAgZGF0YS5yZW1vdGVU
aWxlSUQgPSB0aWxlSUQ7Ci0gICAgcHVzaFVwZGF0ZVRvUXVldWUoUmVtb3ZlVGlsZU1lc3NhZ2U6
OmNyZWF0ZShkYXRhKSk7Ci19Ci0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmRlbGV0ZUNv
bXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKLXsKLSAgICBEZWxldGVMYXllck1lc3NhZ2VE
YXRhIGRhdGE7Ci0gICAgZGF0YS5sYXllcklEID0gaWQ7Ci0gICAgcHVzaFVwZGF0ZVRvUXVldWUo
RGVsZXRlTGF5ZXJNZXNzYWdlOjpjcmVhdGUoZGF0YSkpOwotfQotCi12b2lkIExheWVyVHJlZUhv
c3RQcm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKLXsKLSAgICBT
ZXRSb290TGF5ZXJNZXNzYWdlRGF0YSBkYXRhOwotICAgIGRhdGEubGF5ZXJJRCA9IGlkOwotICAg
IHB1c2hVcGRhdGVUb1F1ZXVlKFNldFJvb3RMYXllck1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jQ29tcG9zaXRpbmdMYXllclN0YXRlKGNv
bnN0IFdlYkxheWVySW5mbyYgaW5mbykKLXsKLSAgICBTeW5jTGF5ZXJQYXJhbWV0ZXJzTWVzc2Fn
ZURhdGEgZGF0YTsKLSAgICBkYXRhLmxheWVySW5mbyA9IGluZm87Ci0gICAgcHVzaFVwZGF0ZVRv
UXVldWUoU3luY0xheWVyUGFyYW1ldGVyc01lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Ci19Ci0KLXZv
aWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRSZW5kZXJGcmFtZSgpCi17Ci0gICAgbV9kcmF3aW5n
QXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9z
dDo6UmVuZGVyTmV4dEZyYW1lKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQo
KSk7Ci0gICAgcHVzaFVwZGF0ZVRvUXVldWUoRmx1c2hMYXllckNoYW5nZXNNZXNzYWdlOjpjcmVh
dGUoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVEaXJlY3RseUNvbXBv
c2l0ZWRJbWFnZShpbnQ2NF90IGtleSwgY29uc3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSYgaGFuZGxlKQotewotICAgIENyZWF0ZUltYWdlTWVzc2FnZURhdGEgZGF0YTsKLSAgICBS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZSho
YW5kbGUpOwotICAgIGRhdGEuaW1hZ2VJRCA9IGtleTsKLSAgICBkYXRhLmltYWdlID0gYml0bWFw
LT5jcmVhdGVRSW1hZ2UoKS5jb3B5KCk7Ci0gICAgcHVzaFVwZGF0ZVRvUXVldWUoQ3JlYXRlSW1h
Z2VNZXNzYWdlOjpjcmVhdGUoZGF0YSkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6
ZGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQotewotICAgIERlc3Ry
b3lJbWFnZU1lc3NhZ2VEYXRhIGRhdGE7Ci0gICAgZGF0YS5pbWFnZUlEID0ga2V5OwotICAgIHB1
c2hVcGRhdGVUb1F1ZXVlKERlc3Ryb3lJbWFnZU1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Ci19Ci0K
LXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5
VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCi17Ci0gICAgbV9kcmF3
aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVl
SG9zdDo6U2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVj
dG9yKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBM
YXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3RBbmRTY2FsZShjb25zdCBJ
bnRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSkKLXsKLSAgICBtX3Zpc2libGVDb250ZW50c1JlY3Qg
PSByZWN0OwotICAgIG1fY29udGVudHNTY2FsZSA9IHNjYWxlOwotICAgIG1fZHJhd2luZ0FyZWFQ
cm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNl
dFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKHJlY3QsIHNjYWxlKSwgbV9kcmF3aW5nQXJlYVBy
b3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKLX0KLQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnBybyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCmluZGV4
IGU1OWVmOWY3MDFjNjlhYjBmNzllMDc3NjYwM2E4MTM2YzFhZTliNjIuLmNmZDI2ZWYzMmZmYmUx
YjY0ZTMxYTBjOTI1N2RhYWI4MTNlMTNkOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YktpdDIucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCkBAIC0yOSw4ICsyOSw2
IEBAIFdFQktJVDFfU09VUkNFU19TSEFSRURfV0lUSF9XRUJLSVQyID0gXAogV0VCS0lUMl9HRU5F
UkFURURfSEVBREVSUyA9IFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0F1
dGhlbnRpY2F0aW9uTWFuYWdlck1lc3NhZ2VzLmggXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURf
U09VUkNFU19ESVIvRG93bmxvYWRQcm94eU1lc3NhZ2VzLmggXAotICAgICQkV0VCS0lUMl9HRU5F
UkFURURfU09VUkNFU19ESVIvTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmggXAotICAgICQkV0VCS0lU
Ml9HRU5FUkFURURfU09VUkNFU19ESVIvTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCBcCiAg
ICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9OUE9iamVjdE1lc3NhZ2VSZWNlaXZl
ck1lc3NhZ2VzLmggXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvUGx1Z2lu
Q29udHJvbGxlclByb3h5TWVzc2FnZXMuaCBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VS
Q0VTX0RJUi9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggXApAQCAtNjksOCArNjcs
NiBAQCBXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTID0gXAogICAgICQkV0VCS0lUMl9HRU5FUkFU
RURfU09VUkNFU19ESVIvRG93bmxvYWRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgXAogICAgICQk
V0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvRHJhd2luZ0FyZWFNZXNzYWdlUmVjZWl2ZXIu
Y3BwIFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0RyYXdpbmdBcmVhUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKLSAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNf
RElSL0xheWVyVHJlZUhvc3RNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKLSAgICAkJFdFQktJVDJfR0VO
RVJBVEVEX1NPVVJDRVNfRElSL0xheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAg
XAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvTlBPYmplY3RNZXNzYWdlUmVj
ZWl2ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJD
RVNfRElSL1BsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgXAogICAgICQk
V0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvUGx1Z2luUHJvY2Vzc01lc3NhZ2VSZWNlaXZl
ci5jcHAgXApAQCAtMTY2LDcgKzE2Miw2IEBAIEhFQURFUlMgKz0gXAogICAgIFNoYXJlZC9XZWJH
cmFwaGljc0NvbnRleHQuaCBcCiAgICAgU2hhcmVkL1dlYkhpdFRlc3RSZXN1bHQuaCBcCiAgICAg
U2hhcmVkL1dlYkltYWdlLmggXAotICAgIFNoYXJlZC9XZWJMYXllclRyZWVJbmZvLmggXAogICAg
IFNoYXJlZC9XZWJOYXZpZ2F0aW9uRGF0YVN0b3JlLmggXAogICAgIFNoYXJlZC9XZWJOdW1iZXIu
aCBcCiAgICAgU2hhcmVkL1dlYk9wZW5QYW5lbFBhcmFtZXRlcnMuaCBcCkBAIC0zMjMsNyArMzE4
LDYgQEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFcnJv
cnMuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uQ2xpZW50
LmggXAotICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oIFwK
ICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oIFwKICAg
ICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Lmgg
XAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgg
XApAQCAtNDA3LDcgKzQwMSw2IEBAIFNPVVJDRVMgKz0gXAogICAgIFNoYXJlZC9XZWJIaXRUZXN0
UmVzdWx0LmNwcCBcCiAgICAgU2hhcmVkL1dlYktleWJvYXJkRXZlbnQuY3BwIFwKICAgICBTaGFy
ZWQvV2ViSW1hZ2UuY3BwIFwKLSAgICBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAgXAogICAg
IFNoYXJlZC9XZWJNb3VzZUV2ZW50LmNwcCBcCiAgICAgU2hhcmVkL1dlYk9wZW5QYW5lbFBhcmFt
ZXRlcnMuY3BwIFwKICAgICBTaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAgXApA
QCAtNDk1LDcgKzQ4OCw2IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJj
ZUxvYWRDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwIFwKICAgICBV
SVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5jcHAgXAotICAgIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVI
b3N0UHJveHlRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9Ub3VjaFZpZXdJbnRlcmZhY2UuY3Bw
IFwKICAgICBVSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5jcHAgXAogICAgIFVJUHJv
Y2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcCBcCkBAIC01NzYsNyArNTY4LDYgQEAg
U09VUkNFUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNs
aWVudC5jcHAgXAotICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXll
ci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50
LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JGcm9udGVu
ZENsaWVudC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1T
dHJhdGVnaWVzLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAppbmRleCA0MzY3ZmM4MTQy
ZjVlYzlhZTYxMzdmZjgyZjZiMTUyZTBlYWY4YTUyLi4yMThmMmZmZWJjZGYzOTMyOTBkYWE1ZGRi
NmQyYjhmNDkxNDQzOTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAKQEAgLTI1LDEzICsy
NSwxMyBAQAogCiAjaW5jbHVkZSAiQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiQmFja2luZ1N0b3Jl
LmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkRyYXdpbmdB
cmVhUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NM
YXllci5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgotI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIgogI2lu
Y2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJ0ZXh0L0NTdHJpbmcuaCIKICNpbmNsdWRlIDxI
YXNoTWFwLmg+CkBAIC01OCw2ICs1OCwxMiBAQCBXZWJHcmFwaGljc0xheWVyKiBXZWJHcmFwaGlj
c0xheWVyOjpsYXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklEIGlkKQogICAgIHJldHVybiBpdC0+
c2Vjb25kOwogfQogCitzdGF0aWMgVmVjdG9yPFdlYkxheWVySUQ+JiBkZWxldGVkTGF5ZXJJRHMo
KQoreworICAgIHN0YXRpYyBWZWN0b3I8V2ViTGF5ZXJJRD4gbGF5ZXJzOworICAgIHJldHVybiBs
YXllcnM7Cit9CisKIHN0YXRpYyBXZWJMYXllcklEIHRvV2ViTGF5ZXJJRChHcmFwaGljc0xheWVy
KiBsYXllcikKIHsKICAgICByZXR1cm4gbGF5ZXIgPyB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIp
LT5pZCgpIDogMDsKQEAgLTczLDkxICs3OSw2NyBAQCB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6Om5v
dGlmeUNoYW5nZSgpCiBXZWJHcmFwaGljc0xheWVyOjpXZWJHcmFwaGljc0xheWVyKEdyYXBoaWNz
TGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICA6IEdyYXBoaWNzTGF5ZXIoY2xpZW50KQogICAgICwg
bV9uZWVkc0Rpc3BsYXkoZmFsc2UpCi0gICAgLCBtX21vZGlmaWVkKHRydWUpCisgICAgLCBtX21v
ZGlmaWVkKGZhbHNlKQogICAgICwgbV9jb250ZW50TmVlZHNEaXNwbGF5KGZhbHNlKQogICAgICwg
bV9oYXNQZW5kaW5nQW5pbWF0aW9ucyhmYWxzZSkKLSAgICAsIG1faW5VcGRhdGVNb2RlKGZhbHNl
KQotI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgICwgbV9sYXllclRyZWVUaWxl
Q2xpZW50KDApCi0gICAgLCBtX21haW5CYWNraW5nU3RvcmUoYWRvcHRQdHIobmV3IFRpbGVkQmFj
a2luZ1N0b3JlKHRoaXMsIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQ6OmNyZWF0
ZSh0aGlzKSkpKQotI2VuZGlmCisgICAgLCBtX2NvbnRlbnRTY2FsZSgxLmYpCiB7Ci0gICAgbV9t
YWluQmFja2luZ1N0b3JlLT5zZXRDb250ZW50c1NjYWxlKDEuMCk7Ci0gICAgc3RhdGljIFdlYkxh
eWVySUQgbmV4dExheWVySUQgPSAxOwotICAgIG1fbGF5ZXJJbmZvLmlkID0gbmV4dExheWVySUQr
KzsKKyAgICAvLyBTdGFydGluZyBsYXllciBJRHMgZnJvbSAxMDAwLCB0byBoZWxwIGRldGVjdCBm
YXVsdHkgSURzIGVhc2lseS4KKyAgICBzdGF0aWMgV2ViTGF5ZXJJRCBzSUQgPSAxMDAwOworICAg
IG1fbGF5ZXJJbmZvLmlkID0gKytzSUQ7CiAgICAgbGF5ZXJCeUlETWFwKCkuYWRkKGlkKCksIHRo
aXMpOwogfQogCiBXZWJHcmFwaGljc0xheWVyOjp+V2ViR3JhcGhpY3NMYXllcigpCiB7CiAgICAg
bGF5ZXJCeUlETWFwKCkucmVtb3ZlKGlkKCkpOwotCi0gICAgLy8gVGhpcyB3b3VsZCB0ZWxsIHRo
ZSBVSSBwcm9jZXNzIHRvIHJlbGVhc2UgdGhlIGJhY2tpbmcgc3RvcmUuCi0gICAgc2V0Q29udGVu
dHNUb0ltYWdlKDApOwotCi0gICAgaWYgKG1fbGF5ZXJUcmVlVGlsZUNsaWVudCkKLSAgICAgICAg
bV9sYXllclRyZWVUaWxlQ2xpZW50LT5kaWREZWxldGVMYXllcihpZCgpKTsKKyAgICBkZWxldGVk
TGF5ZXJJRHMoKS5hcHBlbmQoaWQoKSk7CiB9CiAKIGJvb2wgV2ViR3JhcGhpY3NMYXllcjo6c2V0
Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4pCiB7CiAgICAg
Ym9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNoaWxkcmVuKTsKLSAgICBpZiAo
IW9rKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGls
ZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICBXZWJHcmFwaGljc0xheWVyKiBjaGlsZCA9IHRv
V2ViR3JhcGhpY3NMYXllcihjaGlsZHJlbltpXSk7Ci0gICAgICAgIGNoaWxkLT5zZXRDb250ZW50
c1NjYWxlKG1fY29udGVudHNTY2FsZSk7Ci0gICAgICAgIGNoaWxkLT5ub3RpZnlDaGFuZ2UoKTsK
LSAgICB9Ci0gICAgbm90aWZ5Q2hhbmdlKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG9r
KQorICAgICAgICBub3RpZnlDaGFuZ2UoKTsKKyAgICByZXR1cm4gb2s7CiB9CiAKIHZvaWQgV2Vi
R3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CiAgICAgR3Jh
cGhpY3NMYXllcjo6YWRkQ2hpbGQobGF5ZXIpOwotICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXll
ciktPm5vdGlmeUNoYW5nZSgpOwogICAgIG5vdGlmeUNoYW5nZSgpOwogfQogCiB2b2lkIFdlYkdy
YXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChHcmFwaGljc0xheWVyKiBsYXllciwgaW50IGlu
ZGV4KQogewogICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChsYXllciwgaW5kZXgp
OwotICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPm5vdGlmeUNoYW5nZSgpOwogICAgIG5v
dGlmeUNoYW5nZSgpOwogfQogCiB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUo
R3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCiB7CiAgICAgR3Jh
cGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShsYXllciwgc2libGluZyk7Ci0gICAgdG9XZWJHcmFw
aGljc0xheWVyKGxheWVyKS0+bm90aWZ5Q2hhbmdlKCk7CiAgICAgbm90aWZ5Q2hhbmdlKCk7CiB9
CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBs
YXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKIHsKICAgICBHcmFwaGljc0xheWVyOjphZGRD
aGlsZEJlbG93KGxheWVyLCBzaWJsaW5nKTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIp
LT5ub3RpZnlDaGFuZ2UoKTsKICAgICBub3RpZnlDaGFuZ2UoKTsKIH0KIAogYm9vbCBXZWJHcmFw
aGljc0xheWVyOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIEdyYXBoaWNz
TGF5ZXIqIG5ld0NoaWxkKQogewogICAgIGJvb2wgb2sgPSBHcmFwaGljc0xheWVyOjpyZXBsYWNl
Q2hpbGQob2xkQ2hpbGQsIG5ld0NoaWxkKTsKLSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgbm90aWZ5Q2hhbmdlKCk7Ci0gICAgdG9XZWJHcmFwaGljc0xheWVyKG9sZENo
aWxkKS0+bm90aWZ5Q2hhbmdlKCk7Ci0gICAgdG9XZWJHcmFwaGljc0xheWVyKG5ld0NoaWxkKS0+
bm90aWZ5Q2hhbmdlKCk7Ci0gICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAob2spCisgICAgICAg
IG5vdGlmeUNoYW5nZSgpOworICAgIHJldHVybiBvazsKIH0KIAogdm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpyZW1vdmVGcm9tUGFyZW50KCkKIHsKLSAgICBpZiAoV2ViR3JhcGhpY3NMYXllciogcGFy
ZW50TGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIocGFyZW50KCkpKQotICAgICAgICBwYXJlbnRM
YXllci0+bm90aWZ5Q2hhbmdlKCk7CiAgICAgR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVu
dCgpOwotCiAgICAgbm90aWZ5Q2hhbmdlKCk7CiB9CiAKQEAgLTI2NSw2ICsyNDcsOCBAQCB2b2lk
IFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByKQogewog
ICAgIGlmIChjb250ZW50c1JlY3QoKSA9PSByKQogICAgICAgICByZXR1cm47CisgICAgaWYgKG1f
aW1hZ2UpCisgICAgICAgIHNldE5lZWRzRGlzcGxheSgpOwogCiAgICAgR3JhcGhpY3NMYXllcjo6
c2V0Q29udGVudHNSZWN0KHIpOwogICAgIG5vdGlmeUNoYW5nZSgpOwpAQCAtMjkwLDMwICsyNzQs
MTUgQEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lKQogewogfQogCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRl
bnRzTmVlZHNEaXNwbGF5KCkKLXsKLSAgICBzZXRDb250ZW50c1RvSW1hZ2UoMCk7Ci0gICAgc2V0
Q29udGVudHNUb0ltYWdlKG1faW1hZ2UuZ2V0KCkpOwotfQotCiB2b2lkIFdlYkdyYXBoaWNzTGF5
ZXI6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiB7Ci0gICAgaWYgKGltYWdlID09
IG1faW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBj
bGllbnQgPSBsYXllclRyZWVUaWxlQ2xpZW50KCk7Ci0gICAgaWYgKCFjbGllbnQpCisgICAgaWYg
KGltYWdlID09IG1faW1hZ2UuZ2V0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIFdlIGFk
b3B0IGZpcnN0LCBpbiBjYXNlIHRoaXMgaXMgdGhlIHNhbWUgZnJhbWUgLSB0aGF0IHdheSB3ZSBh
dm9pZCBkZXN0cm95aW5nIGFuZCByZWNyZWF0aW5nIHRoZSBpbWFnZS4KLSAgICBpbnQ2NF90IG5l
d0lEID0gY2xpZW50LT5hZG9wdEltYWdlQmFja2luZ1N0b3JlKGltYWdlKTsKLSAgICBjbGllbnQt
PnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlE
KTsKLSAgICBub3RpZnlDaGFuZ2UoKTsKLSAgICBpZiAobmV3SUQgPT0gbV9sYXllckluZm8uaW1h
Z2VCYWNraW5nU3RvcmVJRCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fbGF5ZXJJbmZvLmltYWdl
QmFja2luZ1N0b3JlSUQgPSBuZXdJRDsKICAgICBtX2ltYWdlID0gaW1hZ2U7Ci0gICAgbV9sYXll
ckluZm8uaW1hZ2VJc1VwZGF0ZWQgPSB0cnVlOworICAgIHNldE5lZWRzRGlzcGxheSgpOwogICAg
IEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShpbWFnZSk7CisgICAgbm90aWZ5Q2hh
bmdlKCk7CiB9CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVyKEdyYXBoaWNz
TGF5ZXIqIGxheWVyKQpAQCAtMzMyLDI5ICszMDEsNTAgQEAgdm9pZCBXZWJHcmFwaGljc0xheWVy
OjpzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKIAogdm9pZCBXZWJH
cmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXkoKQogewotICAgIHNldE5lZWRzRGlzcGxheUlu
UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoc2l6ZSgpLndpZHRoKCksIHNp
emUoKS5oZWlnaHQoKSkpKTsKKyAgICBtX25lZWRzRGlzcGxheSA9IHRydWU7CisgICAgbm90aWZ5
Q2hhbmdlKCk7CiB9CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBtX21haW5CYWNraW5nU3RvcmUtPmlu
dmFsaWRhdGUoSW50UmVjdChyZWN0KSk7CisgICAgbV9uZWVkc0Rpc3BsYXlSZWN0LnVuaXRlKHJl
Y3QpOwogICAgIG5vdGlmeUNoYW5nZSgpOwogfQogCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNl
dENvbnRlbnRzTmVlZHNEaXNwbGF5KCkKK3sKKyAgICBzZXROZWVkc0Rpc3BsYXkoKTsKK30KKwog
V2ViTGF5ZXJJRCBXZWJHcmFwaGljc0xheWVyOjppZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
bGF5ZXJJbmZvLmlkOwogfQogCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGlu
Z1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6ZGlk
U3luY2hyb25pemUoKQogeworICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CisgICAgbV9tb2Rp
ZmllZCA9IGZhbHNlOworICAgIG1fbmVlZHNEaXNwbGF5UmVjdCA9IEZsb2F0UmVjdCgpOworICAg
IGlmIChtX2hhc1BlbmRpbmdBbmltYXRpb25zKQorICAgICAgICBub3RpZnlBbmltYXRpb25TdGFy
dGVkKFdURjo6Y3VycmVudFRpbWUoKSk7CisgICAgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyA9IGZh
bHNlOworfQorCitjb25zdCBXZWJMYXllckluZm8mIFdlYkdyYXBoaWNzTGF5ZXI6OmxheWVySW5m
bygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJJbmZvOworfQorCit2b2lkIFdlYkdyYXBo
aWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlKCkKK3sKKyAgICBzeW5jQ29tcG9zaXRpbmdT
dGF0ZUZvclRoaXNMYXllck9ubHkoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxk
cmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNoaWxkcmVuKClbaV0tPnN5bmNDb21wb3NpdGlu
Z1N0YXRlKHJlY3QpOworICAgICAgICBjaGlsZHJlbigpW2ldLT5zeW5jQ29tcG9zaXRpbmdTdGF0
ZSgpOwogICAgIGlmIChyZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgcmVwbGljYUxheWVyKCktPnN5
bmNDb21wb3NpdGluZ1N0YXRlKHJlY3QpOworICAgICAgICByZXBsaWNhTGF5ZXIoKS0+c3luY0Nv
bXBvc2l0aW5nU3RhdGUoKTsKICAgICBpZiAobWFza0xheWVyKCkpCi0gICAgICAgIG1hc2tMYXll
cigpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShyZWN0KTsKLSAgICBzeW5jQ29tcG9zaXRpbmdTdGF0
ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICAgICAgbWFza0xheWVyKCktPnN5bmNDb21wb3NpdGlu
Z1N0YXRlKCk7CiB9CiAKIFdlYkdyYXBoaWNzTGF5ZXIqIHRvV2ViR3JhcGhpY3NMYXllcihHcmFw
aGljc0xheWVyKiBsYXllcikKQEAgLTM2MiwyNSArMzUyLDMwIEBAIFdlYkdyYXBoaWNzTGF5ZXIq
IHRvV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V2ViR3JhcGhpY3NMYXllcio+KGxheWVyKTsKIH0KIAotdm9pZCBXZWJHcmFwaGlj
c0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKQorRmxvYXRSZWN0
IFdlYkdyYXBoaWNzTGF5ZXI6Om5lZWRzRGlzcGxheVJlY3QoKSBjb25zdAogewotICAgIGlmICgh
bV9sYXllclRyZWVUaWxlQ2xpZW50KQotICAgICAgICBtX2xheWVyVHJlZVRpbGVDbGllbnQgPSBs
YXllclRyZWVUaWxlQ2xpZW50KCk7Ci0gICAgdXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsKKyAgICBG
bG9hdFJlY3QgcmVjdCA9IEZsb2F0UmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhl
aWdodCgpKTsKKyAgICBpZiAoIW1fbmVlZHNEaXNwbGF5KQorICAgICAgICByZWN0LmludGVyc2Vj
dChtX25lZWRzRGlzcGxheVJlY3QpOworICAgIHJldHVybiByZWN0OworfQogCi0gICAgaWYgKCFt
X21vZGlmaWVkKQotICAgICAgICByZXR1cm47CitWZWN0b3I8V2ViS2l0OjpXZWJMYXllcklEPiBX
ZWJHcmFwaGljc0xheWVyOjp0YWtlTGF5ZXJzVG9EZWxldGUoKQoreworICAgIFZlY3RvcjxXZWJL
aXQ6OldlYkxheWVySUQ+IGxheWVycyA9IGRlbGV0ZWRMYXllcklEcygpOworICAgIGRlbGV0ZWRM
YXllcklEcygpLmNsZWFyKCk7CisgICAgcmV0dXJuIGxheWVyczsKK30KIAordm9pZCBXZWJHcmFw
aGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKQorewogICAg
IG1fbGF5ZXJJbmZvLm5hbWUgPSBuYW1lKCk7CiAgICAgbV9sYXllckluZm8uYW5jaG9yUG9pbnQg
PSBhbmNob3JQb2ludCgpOwogICAgIG1fbGF5ZXJJbmZvLmJhY2tmYWNlVmlzaWJsZSA9IGJhY2tm
YWNlVmlzaWJpbGl0eSgpOwogICAgIG1fbGF5ZXJJbmZvLmNoaWxkcmVuVHJhbnNmb3JtID0gY2hp
bGRyZW5UcmFuc2Zvcm0oKTsKICAgICBtX2xheWVySW5mby5jb250ZW50c09wYXF1ZSA9IGNvbnRl
bnRzT3BhcXVlKCk7CiAgICAgbV9sYXllckluZm8uY29udGVudHNSZWN0ID0gY29udGVudHNSZWN0
KCk7Ci0KLSAgICAvLyBJbiB0aGUgc2hhZG93IGxheWVyIHRyZWUgd2UgY3JlYXRlIGluIHRoZSBV
SSBwcm9jZXNzLCBsYXllcnMgd2l0aCBkaXJlY3RseSBjb21wb3NpdGVkIGltYWdlcyBhcmUgYWx3
YXlzIGNvbnNpZGVyZWQgdG8gZHJhdyBjb250ZW50LgotICAgIC8vIE90aGVyd2lzZSwgd2UnZCBo
YXZlIHRvIGNoZWNrIHdoZXRoZXIgYW4gbGF5ZXIgd2l0aCBkcmF3c0NvbnRlbnQ9PWZhbHNlIGhh
cyBhIGRpcmVjdGx5IGNvbXBvc2l0ZWQgaW1hZ2UgbXVsdGlwbGUgdGltZXMuCi0gICAgbV9sYXll
ckluZm8uZHJhd3NDb250ZW50ID0gZHJhd3NDb250ZW50KCkgfHwgbV9pbWFnZTsKKyAgICBtX2xh
eWVySW5mby5kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQoKTsKICAgICBtX2xheWVySW5mby5t
YXNrID0gdG9XZWJMYXllcklEKG1hc2tMYXllcigpKTsKICAgICBtX2xheWVySW5mby5tYXNrc1Rv
Qm91bmRzID0gbWFza3NUb0JvdW5kcygpOwogICAgIG1fbGF5ZXJJbmZvLm9wYWNpdHkgPSBvcGFj
aXR5KCk7CkBAIC0zODgsMTU5ICszODMsMTIyIEBAIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3lu
Y0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKICAgICBtX2xheWVySW5mby5wb3Mg
PSBwb3NpdGlvbigpOwogICAgIG1fbGF5ZXJJbmZvLnByZXNlcnZlczNEID0gcHJlc2VydmVzM0Qo
KTsKICAgICBtX2xheWVySW5mby5yZXBsaWNhID0gdG9XZWJMYXllcklEKHJlcGxpY2FMYXllcigp
KTsKLSAgICBtX2xheWVySW5mby5zaXplID0gc2l6ZSgpOworICAgIG1fbGF5ZXJJbmZvLnNpemUg
PSBGbG9hdFNpemUoc2l6ZSgpLndpZHRoKCkgKiBtX2NvbnRlbnRTY2FsZSwgc2l6ZSgpLmhlaWdo
dCgpICogbV9jb250ZW50U2NhbGUpOwogICAgIG1fbGF5ZXJJbmZvLnRyYW5zZm9ybSA9IHRyYW5z
Zm9ybSgpOwogICAgIG1fY29udGVudE5lZWRzRGlzcGxheSA9IGZhbHNlOwogICAgIG1fbGF5ZXJJ
bmZvLmNoaWxkcmVuLmNsZWFyKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxk
cmVuKCkuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fbGF5ZXJJbmZvLmNoaWxkcmVuLmFwcGVuZCh0
b1dlYkxheWVySUQoY2hpbGRyZW4oKVtpXSkpOwotCi0gICAgbV9sYXllclRyZWVUaWxlQ2xpZW50
LT5kaWRTeW5jQ29tcG9zaXRpbmdTdGF0ZUZvckxheWVyKG1fbGF5ZXJJbmZvKTsKLSAgICBtX21v
ZGlmaWVkID0gZmFsc2U7Ci0gICAgbV9sYXllckluZm8uaW1hZ2VJc1VwZGF0ZWQgPSBmYWxzZTsK
LSAgICBpZiAobV9oYXNQZW5kaW5nQW5pbWF0aW9ucykKLSAgICAgICAgbm90aWZ5QW5pbWF0aW9u
U3RhcnRlZChXVEY6OmN1cnJlbnRUaW1lKCkpOwotICAgIG1faGFzUGVuZGluZ0FuaW1hdGlvbnMg
PSBmYWxzZTsKLX0KLQotI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotdm9pZCBXZWJH
cmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKQotewogfQogCi12b2lk
IFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgc2NhbGUpCitzdGF0aWMg
VmVjdG9yPEZsb2F0UmVjdD4gZGl2aWRlSW50b1RpbGVzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
IHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIodGhp
cy0+Y2hpbGRyZW4oKVtpXSk7Ci0gICAgICAgIGxheWVyLT5zZXRDb250ZW50c1NjYWxlKHNjYWxl
KTsKKyAgICBWZWN0b3I8RmxvYXRSZWN0PiB0aWxlczsKKyAgICBmb3IgKGZsb2F0IHkgPSByZWN0
LnkoKTsgeSA8IHJlY3QubWF4WSgpOyB5ICs9IGdUaWxlRGltZW5zaW9uKSB7CisgICAgICAgIGZv
ciAoZmxvYXQgeCA9IHJlY3QueCgpOyB4IDwgcmVjdC5tYXhYKCk7IHggKz0gZ1RpbGVEaW1lbnNp
b24pIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCB0aWxlKHgsIHksIGdUaWxlRGltZW5zaW9uLCBn
VGlsZURpbWVuc2lvbik7CisgICAgICAgICAgICB0aWxlLmludGVyc2VjdChyZWN0KTsKKyAgICAg
ICAgICAgIHRpbGVzLmFwcGVuZCh0aWxlKTsKKyAgICAgICAgfQogICAgIH0KLQotICAgIG1fY29u
dGVudHNTY2FsZSA9IHNjYWxlOwotICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUgJiYgbV9tYWlu
QmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCkgPT0gc2NhbGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG5vdGlmeUNoYW5nZSgpOwotCi0gICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZSA9IG1f
bWFpbkJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7Ci0gICAgbV9tYWluQmFja2luZ1N0b3JlID0gYWRv
cHRQdHIobmV3IFRpbGVkQmFja2luZ1N0b3JlKHRoaXMsIFRpbGVkQmFja2luZ1N0b3JlUmVtb3Rl
VGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSkpOwotICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0
Q29udGVudHNTY2FsZShzY2FsZSk7CisgICAgcmV0dXJuIHRpbGVzOwogfQogCi12b2lkIFdlYkdy
YXBoaWNzTGF5ZXI6OnNldFJvb3RMYXllcihib29sIGlzUm9vdCkKK3N0YXRpYyB2b2lkIGNvbGxl
Y3RDb21wb3NpdGluZ0luZm9Gb3JUaGlzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIsIFdlYkxh
eWVyVHJlZUluZm8mIG91dEluZm8sIFZlY3RvcjxXZWJHcmFwaGljc0xheWVyKj4mIG91dExheWVy
cykKIHsKLSAgICBtX2xheWVySW5mby5pc1Jvb3RMYXllciA9IGlzUm9vdDsKLSAgICBub3RpZnlD
aGFuZ2UoKTsKLX0KKyAgICBXZWJHcmFwaGljc0xheWVyKiBsYXllciA9IHRvV2ViR3JhcGhpY3NM
YXllcihsYXllcik7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgh
bGF5ZXItPmlzTW9kaWZpZWQoKSkKKyAgICAgICAgcmV0dXJuOwogCi12b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6OnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQ
b2ludCYgdHJhamVjdG9yeVZlY3RvcikKLXsKLSAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldFZp
c2libGVSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsKLX0KKyAgICBvdXRM
YXllcnMuYXBwZW5kKGxheWVyKTsKKyAgICBvdXRJbmZvLmxheWVycy5hcHBlbmQobGF5ZXItPmxh
eWVySW5mbygpKTsKIAotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRWaXNpYmxlQ29udGVudFJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBtX3Zpc2libGVDb250ZW50UmVjdCA9IHJl
Y3Q7Ci0gICAgbm90aWZ5Q2hhbmdlKCk7Ci0gICAgbV9tYWluQmFja2luZ1N0b3JlLT5hZGp1c3RW
aXNpYmxlUmVjdCgpOworICAgIFdlYkxheWVySW5mbyYgbGF5ZXJJbmZvID0gb3V0SW5mby5sYXll
cnNbb3V0SW5mby5sYXllcnMuc2l6ZSgpIC0gMV07CisgICAgaWYgKGxheWVyLT5pbWFnZSgpKQor
ICAgICAgICBsYXllckluZm8uZHJhd3NDb250ZW50ID0gdHJ1ZTsKIH0KIAotdm9pZCBXZWJHcmFw
aGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3N0YXRpYyB2b2lkIGNvbGxlY3RDb21wb3NpdGluZ0lu
Zm9SZWN1cnNpdmVseShHcmFwaGljc0xheWVyKiByb290TGF5ZXIsIFdlYkxheWVyVHJlZUluZm8m
IG91dEluZm8sIFZlY3RvcjxXZWJHcmFwaGljc0xheWVyKj4mIG91dExheWVycykKIHsKLSAgICBp
ZiAocmVjdC5pc0VtcHR5KCkpCisgICAgaWYgKCFyb290TGF5ZXIpCiAgICAgICAgIHJldHVybjsK
LSAgICBtX21vZGlmaWVkID0gdHJ1ZTsKLSAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cygq
Y29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5n
U3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHVwZGF0ZWRSZWN0cykKLXsKLX0K
LQotYm9vbCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVVwZGF0ZXNBbGxvd2Vk
KCkgY29uc3QKLXsKLSAgICBpZiAoIW1faW5VcGRhdGVNb2RlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKFdlYkxheWVyVHJlZVRpbGVDbGllbnQqIGNsaWVudCA9IGxheWVyVHJlZVRp
bGVDbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudC0+bGF5ZXJUcmVlVGlsZVVwZGF0ZXNB
bGxvd2VkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQogCi1JbnRSZWN0IFdlYkdyYXBoaWNzTGF5
ZXI6OnRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCkKLXsKLSAgICBpZiAobV9pbWFnZSkK
LSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICByZXR1cm4gSW50UmVjdCgwLCAwLCBzaXpl
KCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKLX0KKyAgICBjb2xsZWN0Q29tcG9zaXRpbmdJ
bmZvRm9yVGhpc0xheWVyKHJvb3RMYXllciwgb3V0SW5mbywgb3V0TGF5ZXJzKTsKKyAgICBjb2xs
ZWN0Q29tcG9zaXRpbmdJbmZvRm9yVGhpc0xheWVyKHJvb3RMYXllci0+bWFza0xheWVyKCksIG91
dEluZm8sIG91dExheWVycyk7CisgICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb1JlY3Vyc2l2ZWx5
KHJvb3RMYXllci0+cmVwbGljYUxheWVyKCksIG91dEluZm8sIG91dExheWVycyk7CiAKLUludFJl
Y3QgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpCi17Ci0g
ICAgcmV0dXJuIG1fdmlzaWJsZUNvbnRlbnRSZWN0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcm9vdExheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBjb2xsZWN0Q29t
cG9zaXRpbmdJbmZvUmVjdXJzaXZlbHkocm9vdExheWVyLT5jaGlsZHJlbigpW2ldLCBvdXRJbmZv
LCBvdXRMYXllcnMpOwogfQogCi1Db2xvciBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdT
dG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNlbmRM
YXllcnNUb1VJUHJvY2VzcyhXZWJDb3JlOjpHcmFwaGljc0xheWVyKiByb290TGF5ZXIsIFdlYlBh
Z2UqIHdlYlBhZ2UpCiB7Ci0gICAgcmV0dXJuIGNvbnRlbnRzT3BhcXVlKCkgPyBDb2xvcjo6d2hp
dGUgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7CisgICAgd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsK
KyAgICB3ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5zeW5jQ29tcG9z
aXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworICAgIFdlYkxheWVyVHJlZUluZm8gY29t
cG9zaXRpbmdJbmZvOworICAgIGNvbXBvc2l0aW5nSW5mby5yb290TGF5ZXJJRCA9IHJvb3RMYXll
ciA/IHRvV2ViR3JhcGhpY3NMYXllcihyb290TGF5ZXIpLT5pZCgpIDogMDsKKyAgICBjb21wb3Np
dGluZ0luZm8uY29udGVudFNjYWxlID0gMS4wOworICAgIGNvbXBvc2l0aW5nSW5mby5kZWxldGVk
TGF5ZXJJRHMgPSBXZWJHcmFwaGljc0xheWVyOjp0YWtlTGF5ZXJzVG9EZWxldGUoKTsKKyAgICBW
ZWN0b3I8V2ViR3JhcGhpY3NMYXllcio+IGxheWVyczsKKyAgICBpZiAocm9vdExheWVyKQorICAg
ICAgICBjb2xsZWN0Q29tcG9zaXRpbmdJbmZvUmVjdXJzaXZlbHkocm9vdExheWVyLCBjb21wb3Np
dGluZ0luZm8sIGxheWVycyk7CiAKLX0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGls
ZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQotewotICAgIG1fbW9k
aWZpZWQgPSB0cnVlOwotICAgIGlmIChXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBjbGllbnQgPSBs
YXllclRyZWVUaWxlQ2xpZW50KCkpCi0gICAgICAgIGNsaWVudC0+Y3JlYXRlVGlsZShpZCgpLCB0
aWxlSUQsIHVwZGF0ZUluZm8pOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRp
bGUoaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKLXsKLSAgICBtX21v
ZGlmaWVkID0gdHJ1ZTsKLSAgICBpZiAoV2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogY2xpZW50ID0g
bGF5ZXJUcmVlVGlsZUNsaWVudCgpKQotICAgICAgICBjbGllbnQtPnVwZGF0ZVRpbGUoaWQoKSwg
dGlsZUlELCB1cGRhdGVJbmZvKTsKLX0KKyAgICBpZiAoY29tcG9zaXRpbmdJbmZvLmRlbGV0ZWRM
YXllcklEcy5pc0VtcHR5KCkgJiYgY29tcG9zaXRpbmdJbmZvLmxheWVycy5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKIAotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKGludCB0
aWxlSUQpCi17Ci0gICAgbV9tb2RpZmllZCA9IHRydWU7Ci0gICAgaWYgKFdlYkxheWVyVHJlZVRp
bGVDbGllbnQqIGNsaWVudCA9IGxheWVyVHJlZVRpbGVDbGllbnQoKSkKLSAgICAgICAgY2xpZW50
LT5yZW1vdmVUaWxlKGlkKCksIHRpbGVJRCk7Ci19CisgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6RHJhd2luZ0FyZWFQcm94eTo6U3luY0NvbXBvc2l0aW5nTGF5ZXJzKGNvbXBvc2l0aW5nSW5m
bykpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllcnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllcnNbaV07CisgICAgICAgIEZs
b2F0UmVjdCB1cGRhdGVSZWN0ID0gbGF5ZXItPm5lZWRzRGlzcGxheVJlY3QoKTsKKworICAgICAg
ICBsYXllci0+ZGlkU3luY2hyb25pemUoKTsKKworICAgICAgICBpZiAodXBkYXRlUmVjdC5pc0Vt
cHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBSZWZQdHI8SW1hZ2U+IGRp
cmVjdEltYWdlID0gbGF5ZXItPmltYWdlKCk7CisgICAgICAgIGlmIChkaXJlY3RJbWFnZSkKKyAg
ICAgICAgICAgIHVwZGF0ZVJlY3QgPSBsYXllci0+Y29udGVudHNSZWN0KCk7CisgICAgICAgIGVs
c2UgaWYgKCFsYXllci0+ZHJhd3NDb250ZW50KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBWZWN0b3I8RmxvYXRSZWN0PiB0aWxlUmVjdHMgPSBkaXZpZGVJbnRvVGlsZXModXBk
YXRlUmVjdCk7CisgICAgICAgIGZvciAoc2l6ZV90IHRpbGVJbmRleCA9IDA7IHRpbGVJbmRleCA8
IHRpbGVSZWN0cy5zaXplKCk7ICsrdGlsZUluZGV4KSB7CisgICAgICAgICAgICBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0ID0gdGlsZVJlY3RzW3RpbGVJbmRleF07CisgICAgICAgICAgICBJbnRS
ZWN0IGVuY2xvc2luZ1VwZGF0ZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRpbGVSZWN0KTsKKwor
ICAgICAgICAgICAgV2ViTGF5ZXJVcGRhdGVJbmZvIGNodW5rKGVuY2xvc2luZ1VwZGF0ZVJlY3Qp
OworICAgICAgICAgICAgY2h1bmsubGF5ZXJJRCA9IHVpbnQzMl90KGxheWVyLT5pZCgpKTsKKyAg
ICAgICAgICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1h
cDo6Y3JlYXRlU2hhcmVhYmxlKGNodW5rLnJlY3Quc2l6ZSgpLCBTaGFyZWFibGVCaXRtYXA6OlN1
cHBvcnRzQWxwaGEpOworICAgICAgICAgICAgaWYgKCFiaXRtYXApCisgICAgICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgICAgICBpZiAoIWJpdG1hcC0+Y3JlYXRlSGFuZGxlKGNodW5rLmJp
dG1hcEhhbmRsZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisjaWYgUExBVEZPUk0oUVQp
CisgICAgICAgICAgICBRSW1hZ2UgdGlsZUltYWdlID0gYml0bWFwLT5jcmVhdGVRSW1hZ2UoKTsK
KyAgICAgICAgICAgIHRpbGVJbWFnZS5maWxsKDApOworICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnRpbGVJbWFnZSk7CisgICAgICAgICAgICAgICAgcGFp
bnRlci50cmFuc2xhdGUoLXRpbGVSZWN0LngoKSwgLXRpbGVSZWN0LnkoKSk7CisgICAgICAgICAg
ICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoJnBhaW50ZXIpOworICAgICAgICAgICAgICAg
IGlmIChkaXJlY3RJbWFnZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2Uo
ZGlyZWN0SW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGxheWVyLT5jb250ZW50c1Jl
Y3QoKSwgRmxvYXRSZWN0KDAsIDAsIGRpcmVjdEltYWdlLT53aWR0aCgpLCBkaXJlY3RJbWFnZS0+
aGVpZ2h0KCkpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGxh
eWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBlbmNsb3NpbmdVcGRhdGVS
ZWN0KTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgogCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnVw
ZGF0ZVRpbGVCdWZmZXJzUmVjdXJzaXZlbHkoKQotewotICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+
dXBkYXRlVGlsZUJ1ZmZlcnMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVu
KCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b1dl
YkdyYXBoaWNzTGF5ZXIodGhpcy0+Y2hpbGRyZW4oKVtpXSk7Ci0gICAgICAgIGxheWVyLT51cGRh
dGVUaWxlQnVmZmVyc1JlY3Vyc2l2ZWx5KCk7CisgICAgICAgICAgICB3ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpVcGRhdGVDb21wb3NpdGluZ0xheWVyQ29udGVudChj
aHVuaykpOworICAgICAgICB9CiAgICAgfQogfQogCi1XZWJMYXllclRyZWVUaWxlQ2xpZW50KiBX
ZWJHcmFwaGljc0xheWVyOjpsYXllclRyZWVUaWxlQ2xpZW50KCkgY29uc3QKLXsKLSAgICBpZiAo
bV9sYXllclRyZWVUaWxlQ2xpZW50KQotICAgICAgICByZXR1cm4gbV9sYXllclRyZWVUaWxlQ2xp
ZW50OwotICAgIFdlYkdyYXBoaWNzTGF5ZXIqIHBhcmVudCA9IHRvV2ViR3JhcGhpY3NMYXllcih0
aGlzLT5wYXJlbnQoKSk7Ci0gICAgaWYgKCFwYXJlbnQpCi0gICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiBwYXJlbnQtPmxheWVyVHJlZVRpbGVDbGllbnQoKTsKLX0KLQotdm9pZCBXZWJHcmFw
aGljc0xheWVyOjp1cGRhdGVDb250ZW50QnVmZmVycygpCi17Ci0gICAgLy8gQmFja2luZy1zdG9y
ZXMgZm9yIGRpcmVjdGx5IGNvbXBvc2l0ZWQgaW1hZ2VzIGlzIGhhbmRsZWQgaW4gTGF5ZXJUcmVl
SG9zdC4KLSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFkcmF3
c0NvbnRlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkxheWVyVHJlZVRpbGVDbGllbnQq
IGNsaWVudCA9IGxheWVyVHJlZVRpbGVDbGllbnQoKTsKLSAgICBpZiAoIWNsaWVudCkKLSAgICAg
ICAgcmV0dXJuOwotICAgIG1faW5VcGRhdGVNb2RlID0gdHJ1ZTsKLSAgICBtX21haW5CYWNraW5n
U3RvcmUtPnVwZGF0ZVRpbGVCdWZmZXJzKCk7Ci0gICAgbV9pblVwZGF0ZU1vZGUgPSBmYWxzZTsK
LX0KLQotI2VuZGlmCi0KIHN0YXRpYyBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IGNyZWF0ZVdl
YkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQogewogICAgIHJldHVy
biBhZG9wdFB0cihuZXcgV2ViR3JhcGhpY3NMYXllcihjbGllbnQpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xh
eWVyLmgKaW5kZXggYzU4MWI1NmE0MzY3YjA0ZWMzN2VlYWZlOTVhMDE3YTdkNmU1NTZhYy4uYWQ2
MDIxZWUxNzBjYWRlZWJmZTAwMzRiY2M3ZGE4ODliYTJiNDM0YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xh
eWVyLmgKQEAgLTI3LDQwICsyNywxOSBAQAogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRl
ICJSdW5Mb29wLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW5jbHVkZSAiVGls
ZWRCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgot
I2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIgogI2luY2x1ZGUgIlRyYW5z
Zm9ybWF0aW9uTWF0cml4LmgiCi0jaW5jbHVkZSAiVXBkYXRlSW5mby5oIgogI2luY2x1ZGUgIldl
YkxheWVyVHJlZUluZm8uaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJM
YXllclRyZWVUaWxlQ2xpZW50IHsKLXB1YmxpYzoKLSAgICAvLyBUaWxlZEJhY2tpbmdTdG9yZVJl
bW90ZVRpbGVDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJMYXllcklELCBp
bnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCkgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBpbnQ2NF90IGFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoSW1hZ2UqKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90KSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5ZXIoY29uc3Qg
V2ViTGF5ZXJJbmZvJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWREZWxldGVMYXllcihXZWJM
YXllcklEKSA9IDA7Ci19OworY2xhc3MgV2ViUGFnZTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBXZWJHcmFwaGljc0xheWVyIDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIKLSNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgLCBwdWJsaWMgVGlsZWRCYWNraW5nU3RvcmVDbGllbnQKLSAgICAgICAgICAgICAgICAgICAg
ICAgLCBwdWJsaWMgV2ViS2l0OjpUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQKLSNl
bmRpZgoteworY2xhc3MgV2ViR3JhcGhpY3NMYXllciA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyIHsKIHB1YmxpYzoKICAgICBXZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGll
bnQqKTsKICAgICB2aXJ0dWFsIH5XZWJHcmFwaGljc0xheWVyKCk7CkBAIC05NCwxMyArNzMsMTMg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgdm9pZCBzZXROZWVk
c0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBzZXRDb250ZW50c05l
ZWRzRGlzcGxheSgpOwotICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0KGNvbnN0IEludFJl
Y3QmKTsKLSAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29u
c3QgRmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShj
b25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUo
KTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5
KCk7Ci0gICAgdm9pZCBzZXRSb290TGF5ZXIoYm9vbCk7CiAKICAgICBXZWJLaXQ6OldlYkxheWVy
SUQgaWQoKSBjb25zdDsKKyAgICBjb25zdCBXZWJLaXQ6OldlYkxheWVySW5mbyYgbGF5ZXJJbmZv
KCkgY29uc3Q7CisgICAgRmxvYXRSZWN0IG5lZWRzRGlzcGxheVJlY3QoKSBjb25zdDsKKyAgICBz
dGF0aWMgVmVjdG9yPFdlYktpdDo6V2ViTGF5ZXJJRD4gdGFrZUxheWVyc1RvRGVsZXRlKCk7CiAg
ICAgc3RhdGljIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChXZWJLaXQ6OldlYkxheWVySUQp
OwogICAgIGJvb2wgaXNNb2RpZmllZCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kaWZpZWQ7IH0KICAg
ICB2b2lkIGRpZFN5bmNocm9uaXplKCk7CkBAIC0xMDgsNTEgKzg3LDIxIEBAIHB1YmxpYzoKICAg
ICB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoZG91YmxlKTsKIAogICAgIHN0YXRpYyB2b2lk
IGluaXRGYWN0b3J5KCk7Ci0KLSNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICAv
LyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAotICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdT
dG9yZVBhaW50QmVnaW4oKTsKLSAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWlu
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHRp
bGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJl
YSk7Ci0gICAgdmlydHVhbCBib29sIHRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3Qo
KTsKLSAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpOwot
ICAgIHZpcnR1YWwgQ29sb3IgdGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25z
dDsKLQotICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAotICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYp
OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6
VXBkYXRlSW5mbyYpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQpOwot
Ci0gICAgdm9pZCBzZXRMYXllclRyZWVUaWxlQ2xpZW50KFdlYktpdDo6V2ViTGF5ZXJUcmVlVGls
ZUNsaWVudCogY2xpZW50KSB7IG1fbGF5ZXJUcmVlVGlsZUNsaWVudCA9IGNsaWVudDsgfQotICAg
IFdlYktpdDo6V2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogbGF5ZXJUcmVlVGlsZUNsaWVudCgpIGNv
bnN0OwotCi0gICAgYm9vbCBpc1JlYWR5Rm9yVGlsZUJ1ZmZlclN3YXAoKSBjb25zdDsKLSAgICB2
b2lkIHVwZGF0ZVRpbGVCdWZmZXJzUmVjdXJzaXZlbHkoKTsKLSAgICB2b2lkIHNldENvbnRlbnRz
U2NhbGUoZmxvYXQpOwotICAgIHZvaWQgdXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsKLSNlbmRpZgor
ICAgIHN0YXRpYyB2b2lkIHNlbmRMYXllcnNUb1VJUHJvY2VzcyhXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKiwgV2ViS2l0OjpXZWJQYWdlKik7CiAKIHByaXZhdGU6CiAgICAgV2ViS2l0OjpXZWJMYXll
ckluZm8gbV9sYXllckluZm87Ci0gICAgV2ViS2l0OjpXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBt
X2xheWVyVGlsZUNsaWVudDsKKyAgICBSZWZQdHI8V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA+IG1f
YmFja2luZ1N0b3JlOwogICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKICAgICBGbG9hdFJlY3Qg
bV9uZWVkc0Rpc3BsYXlSZWN0OwotICAgIEludFJlY3QgbV92aXNpYmxlQ29udGVudFJlY3Q7Ci0g
ICAgYm9vbCBtX25lZWRzRGlzcGxheSA6IDE7Ci0gICAgYm9vbCBtX21vZGlmaWVkIDogMTsKLSAg
ICBib29sIG1fY29udGVudE5lZWRzRGlzcGxheSA6IDE7Ci0gICAgYm9vbCBtX2hhc1BlbmRpbmdB
bmltYXRpb25zIDogMTsKLSAgICBib29sIG1faW5VcGRhdGVNb2RlIDogMjsKKyAgICBib29sIG1f
bmVlZHNEaXNwbGF5OworICAgIGJvb2wgbV9tb2RpZmllZDsKKyAgICBib29sIG1fY29udGVudE5l
ZWRzRGlzcGxheTsKKyAgICBib29sIG1faGFzUGVuZGluZ0FuaW1hdGlvbnM7CiAKLSAgICB2b2lk
IG5vdGlmeUNoYW5nZSgpOworICAgIGZsb2F0IG1fY29udGVudFNjYWxlOwogCi0jaWYgRU5BQkxF
KFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgV2ViS2l0OjpXZWJMYXllclRyZWVUaWxlQ2xpZW50
KiBtX2xheWVyVHJlZVRpbGVDbGllbnQ7Ci0gICAgT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFja2lu
Z1N0b3JlPiBtX21haW5CYWNraW5nU3RvcmU7Ci0gICAgT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFj
a2luZ1N0b3JlPiBtX3ByZXZpb3VzQmFja2luZ1N0b3JlOwotICAgIGZsb2F0IG1fY29udGVudHNT
Y2FsZTsKLSNlbmRpZgorICAgIHZvaWQgbm90aWZ5Q2hhbmdlKCk7CiB9OwogCiBXZWJHcmFwaGlj
c0xheWVyKiB0b1dlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAppbmRleCAwNmRlY2Q5Mzhj
Y2RkMDE4NzMxM2MzMDU1MTE3ZTgyNjgwMzhmNWJmLi41MmZkZGRkM2I4ZmU3Y2I2YTM1YWU1NTFi
MDdiM2E2OTdhNzU0MDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvRHJhd2luZ0FyZWEuaApAQCAtNzgsOSArNzgsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ0xheWVycygpID0gMDsKLSNpZiBVU0UoVEVY
VFVSRV9NQVBQRVIpCi0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVz
c2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpB
cmd1bWVudERlY29kZXIqKSA9IDA7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lO
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdB
cmVhSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWFJbXBsLmNwcAppbmRleCBhOWIxM2M3NGZhYzI0Yjk2YzczODdiNWUwZTc5ODIxMDIxMmZjZWUw
Li45N2ZmODI3YzdhOWNkYWJiN2Y4OWIyZTNjNzVlNGMwNzNiYjRhMzc3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcApA
QCAtNjczLDEzICs2NzMsNSBAQCB2b2lkIERyYXdpbmdBcmVhSW1wbDo6ZGlzcGxheShVcGRhdGVJ
bmZvJiB1cGRhdGVJbmZvKQogICAgIG1fbGFzdERpc3BsYXlUaW1lID0gY3VycmVudFRpbWUoKTsK
IH0KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQotdm9pZCBEcmF3aW5nQXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2Fn
ZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBDOjpNZXNzYWdlSUQgbWVz
c2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykKLXsKLSAgICBpZiAo
bV9sYXllclRyZWVIb3N0KQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRpZFJlY2VpdmVMYXll
clRyZWVIb3N0TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7Ci19Ci0j
ZW5kaWYKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaAppbmRleCA1Y2E1NTQ4OTE3MGM0
MDY4ZDc4ZWM0NGY4OGE5MWEyYzk3MDc4ZjI5Li5jYzhhODA1NDA3YzJkZjU3MGEyN2U5MTU4NmY0
NGExNDgxZDlkZTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvRHJhd2luZ0FyZWFJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0RyYXdpbmdBcmVhSW1wbC5oCkBAIC03MSwxMCArNzEsNiBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBzY2hlZHVsZUNoaWxkV2luZG93R2VvbWV0cnlVcGRhdGUoY29uc3QgV2luZG93
R2VvbWV0cnkmKTsKICNlbmRpZgogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAm
JiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRy
ZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBD
b3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKLSNlbmRpZgotCiAgICAgLy8gQ29yZUlQQyBtZXNz
YWdlIGhhbmRsZXJzLgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSh1
aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBib29sIHJlc3BvbmRJbW1lZGlhdGVseSwgZmxv
YXQgZGV2aWNlU2NhbGVGYWN0b3IsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGUo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRy
ZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVI
b3N0LmNwcAppbmRleCAwMzFjM2ZhNmFiMjcyOTM3MGYzNzQzNzUxMmEyMWM5NjRlZTFjNGNmLi5k
YTQyYWU2Nzg0YjA3MmQwYzQ3OThmNDYxYThmNjVjYzNmODkzM2VjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCkBAIC0zNCwx
MCArMzQsNiBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFFUKSAmJiBVU0UoVEVY
VFVSRV9NQVBQRVIpCi0jaW5jbHVkZSAicXQvTGF5ZXJUcmVlSG9zdFF0LmgiCi0jZW5kaWYKLQog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDgsOCAr
NDQsNiBAQCBQYXNzUmVmUHRyPExheWVyVHJlZUhvc3Q+IExheWVyVHJlZUhvc3Q6OmNyZWF0ZShX
ZWJQYWdlKiB3ZWJQYWdlKQogICAgIHJldHVybiBMYXllclRyZWVIb3N0Q0FNYWM6OmNyZWF0ZSh3
ZWJQYWdlKTsKICNlbGlmIFBMQVRGT1JNKFdJTikgJiYgSEFWRShXS1FDQSkKICAgICByZXR1cm4g
TGF5ZXJUcmVlSG9zdENBV2luOjpjcmVhdGUod2ViUGFnZSk7Ci0jZWxpZiBQTEFURk9STShRVCkg
JiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIHJldHVybiBMYXllclRyZWVIb3N0UXQ6OmNyZWF0
ZSh3ZWJQYWdlKTsKICNlbHNlCiAgICAgcmV0dXJuIDA7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDUxZjk5MjA4
ZWFlNWFmZmNkY2NjZmM4OWNkMWZmMzlkNzUwYTJkYTguLjY3YzgwN2IwNTNiYTNlNTI4NjM1Y2Fl
YjliMTJiY2Q2ZjRjMzAzNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9MYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0xheWVyVHJlZUhvc3QuaApAQCAtMjYsMjAgKzI2LDEzIEBACiAjaWZuZGVmIExheWVy
VHJlZUhvc3RfaAogI2RlZmluZSBMYXllclRyZWVIb3N0X2gKIAotI2luY2x1ZGUgPENvcmVJUEMv
TWVzc2FnZUlELmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogCi1uYW1lc3BhY2UgQ29yZUlQQyB7Ci1jbGFzcyBBcmd1bWVudERlY29k
ZXI7Ci1jbGFzcyBDb25uZWN0aW9uOwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBG
bG9hdFBvaW50OwotY2xhc3MgSW50UmVjdDsKLWNsYXNzIEludFNpemU7Ci1jbGFzcyBHcmFwaGlj
c0xheWVyOworICAgIGNsYXNzIEludFJlY3Q7CisgICAgY2xhc3MgSW50U2l6ZTsKKyAgICBjbGFz
cyBHcmFwaGljc0xheWVyOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTc5LDE0ICs3Miw2
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5kZXJpbmcoKSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyB9CiAKLSNpZiBFTkFCTEUoVElMRURfQkFD
S0lOR19TVE9SRSkKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2Nh
bGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGZsb2F0IHNjYWxlKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBXZWJDb3Jl
OjpGbG9hdFBvaW50JikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50UmVj
dEZvckxheWVyKGludCBsYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6
Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7Ci0jZW5kaWYKLQogI2lmIFBM
QVRGT1JNKFdJTikKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDaGlsZFdpbmRvd0dlb21ldHJ5
VXBkYXRlKGNvbnN0IFdpbmRvd0dlb21ldHJ5JikgPSAwOwogI2VuZGlmCkBAIC05NSwxMSArODAs
NiBAQCBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgTGF5ZXJUcmVlSG9zdChXZWJQYWdlKik7CiAK
ICAgICBXZWJQYWdlKiBtX3dlYlBhZ2U7Ci0KLQotI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NU
T1JFKQotICAgIGJvb2wgbV93YWl0aW5nRm9yVUlQcm9jZXNzOwotI2VuZGlmCiB9OwogCiAjaWYg
IVBMQVRGT1JNKFdJTikgJiYgIVBMQVRGT1JNKFFUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW4gYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRlOTg3MDY2MzkzNjU1MzAyZWVhMWZiMGEyNTlk
ZTJiYTI5YTlhNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5tZXNzYWdl
cy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMKLSMgICAgQ29weXJpZ2h0IChD
KSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotIwot
IyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0jICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0jICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotIyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotIyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotIyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0jICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0jCi0KLQotI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotbWVzc2FnZXMg
LT4gTGF5ZXJUcmVlSG9zdCB7Ci0gICAgU2V0VmlzaWJsZUNvbnRlbnRSZWN0Rm9yTGF5ZXIoaW50
IGxheWVySUQsIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0KQotICAgIFNldFZp
c2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoV2ViQ29yZTo6RmxvYXRQb2ludCB0cmFq
ZWN0b3J5VmVjdG9yeSkKLSAgICBTZXRWaXNpYmxlQ29udGVudFJlY3RBbmRTY2FsZShXZWJDb3Jl
OjpJbnRSZWN0IGNvbnRlbnRSZWN0LCBmbG9hdCBzY2FsZSkKLSAgICBSZW5kZXJOZXh0RnJhbWUo
KQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvVGlsZWREcmF3aW5nQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvVGlsZWREcmF3aW5nQXJlYS5jcHAKaW5kZXggZTcyMDhhOGI2ODAxNTQxMzI0ZGZjMTAzYjJk
Njg0ZTllM2QyN2ZmYy4uZmFhNmNkZDQ3MWIyOTk2OTkxYjRmMjJlNmMxZjUzNWVhODI4MWZmOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2lu
Z0FyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERy
YXdpbmdBcmVhLmNwcApAQCAtMTc3LDEwICsxNzcsNiBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWE6
OnJlbW92ZVRpbGUoaW50IHRpbGVJRCkKICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkRy
YXdpbmdBcmVhUHJveHk6OlJlbW92ZVRpbGUodGlsZUlEKSk7CiB9CiAKLSNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCi12b2lkIFRpbGVkRHJhd2luZ0FyZWE6OmRpZFJlY2VpdmVMYXll
clRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBD
OjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKSB7IH0KLSNl
bmRpZgogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLQogI2VuZGlmIC8vIFRJTEVEX0JBQ0tJTkdf
U1RPUkUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxl
ZERyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRE
cmF3aW5nQXJlYS5oCmluZGV4IDVlYjc5YWU5ZDQxZGY1MzU5ZTAwYWVhY2EzYTEyYjc2NzNkMmFh
MTIuLmVkMTNkMmEyNzI5Nzg1OTkzODE5N2FkMTA3MWQyNTg3MDkxYTRiYWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuaApA
QCAtNDksNyArNDksNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFJvb3RDb21wb3Np
dGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzeW5j
Q29tcG9zaXRpbmdMYXllcnMoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVy
VHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQs
IENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwogI2VuZGlmCiAKIHByaXZhdGU6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggMDk4MDMyNGM1
NTA5MWQ4ODhkODVkZjdlYWZhMWJkMWE1NzYyZDE5My4uMTVjMGQzNGI4ZjQwNDQ2MDNjMDUzNzYz
MWRhMjNkMWQ3ODVmNjk0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcApAQCAtMjE2OCwxNCArMjE2OCw2IEBAIHZvaWQgV2ViUGFnZTo6ZGlkUmVj
ZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVz
c2FnCiAgICAgICAgICAgICBtX2RyYXdpbmdBcmVhLT5kaWRSZWNlaXZlRHJhd2luZ0FyZWFNZXNz
YWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLQotI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKSAmJiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xh
c3NMYXllclRyZWVIb3N0PigpKSB7Ci0gICAgICAgIGlmIChtX2RyYXdpbmdBcmVhKQotICAgICAg
ICAgICAgbV9kcmF3aW5nQXJlYS0+ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKGNvbm5l
Y3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNl
bmRpZgogICAgIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKG1lc3NhZ2VJRC5pczxD
b3JlSVBDOjpNZXNzYWdlQ2xhc3NXZWJJbnNwZWN0b3I+KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAKaW5k
ZXggOGM0NDY4ZGQwMGNiNDc3NjBhM2E0NTEwNTFlNGFlZWNkZjNmYWVkOC4uNTc4YWUwOGIyMzhm
MTc1M2IwNjFlZjE0OGM3MTY2Y2FhZDgyYWUzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAKQEAgLTI1LDQx
MyArMjUsOCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RRdC5oIgotCi0jaW5j
bHVkZSAiRHJhd2luZ0FyZWFJbXBsLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJNZXNzYWdl
SUQuaCIKLSNpbmNsdWRlICJXZWJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSAiV2ViUGFnZS5o
IgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmll
dy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGlu
Z3MuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci1QYXNzUmVmUHRyPExheWVyVHJlZUhvc3RRdD4gTGF5ZXJUcmVlSG9zdFF0OjpjcmVhdGUoV2Vi
UGFnZSogd2ViUGFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyVHJlZUhvc3RR
dCh3ZWJQYWdlKSk7Ci19Ci0KLUxheWVyVHJlZUhvc3RRdDo6fkxheWVyVHJlZUhvc3RRdCgpCi17
Ci19Ci0KLUxheWVyVHJlZUhvc3RRdDo6TGF5ZXJUcmVlSG9zdFF0KFdlYlBhZ2UqIHdlYlBhZ2Up
Ci0gICAgOiBMYXllclRyZWVIb3N0KHdlYlBhZ2UpCi0gICAgLCBtX25vdGlmeUFmdGVyU2NoZWR1
bGVkTGF5ZXJGbHVzaChmYWxzZSkKLSAgICAsIG1faXNWYWxpZCh0cnVlKQotI2lmIEVOQUJMRShU
SUxFRF9CQUNLSU5HX1NUT1JFKQotICAgICwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKGZhbHNlKQot
ICAgICwgbV9pc1N1c3BlbmRlZChmYWxzZSkKLSNlbmRpZgotICAgICwgbV9zaG91bGRTeW5jRnJh
bWUoZmFsc2UpCi0gICAgLCBtX3Nob3VsZFN5bmNSb290TGF5ZXIodHJ1ZSkKLSAgICAsIG1fbGF5
ZXJGbHVzaFRpbWVyKHRoaXMsICZMYXllclRyZWVIb3N0UXQ6OmxheWVyRmx1c2hUaW1lckZpcmVk
KQotICAgICwgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQodHJ1ZSkKLXsKLSAgICAvLyBD
cmVhdGUgYSByb290IGxheWVyLgotICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3Jl
YXRlKHRoaXMpOwotICAgIFdlYkdyYXBoaWNzTGF5ZXIqIHdlYlJvb3RMYXllciA9IHRvV2ViR3Jh
cGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSk7Ci0gICAgd2ViUm9vdExheWVyLT5zZXRSb290
TGF5ZXIodHJ1ZSk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJM
YXllclRyZWVIb3N0UXQgcm9vdCBsYXllciIpOwotI2VuZGlmCi0gICAgbV9yb290TGF5ZXItPnNl
dERyYXdzQ29udGVudChmYWxzZSk7Ci0gICAgbV9yb290TGF5ZXItPnNldFNpemUobV93ZWJQYWdl
LT5zaXplKCkpOwotICAgIG1fbGF5ZXJUcmVlQ29udGV4dC53ZWJMYXllcklEID0gdG9XZWJHcmFw
aGljc0xheWVyKHdlYlJvb3RMYXllciktPmlkKCk7Ci0KLSAgICBtX25vbkNvbXBvc2l0ZWRDb250
ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7Ci0jaWYgRU5BQkxFKFRJTEVE
X0JBQ0tJTkdfU1RPUkUpCi0gICAgdG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgp
KS0+c2V0TGF5ZXJUcmVlVGlsZUNsaWVudCh0aGlzKTsKLSNlbmRpZgotI2lmbmRlZiBOREVCVUcK
LSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5hbWUoIkxheWVyVHJlZUhvc3RR
dCBub24tY29tcG9zaXRlZCBjb250ZW50Iik7Ci0jZW5kaWYKLSAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKG1fd2ViUGFnZS0+ZHJhd3NCYWNrZ3JvdW5k
KCkgJiYgIW1fd2ViUGFnZS0+ZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoKSk7Ci0gICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKLQot
ICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0
KCkpOwotCi0gICAgaWYgKG1fd2ViUGFnZS0+aGFzUGFnZU92ZXJsYXkoKSkKLSAgICAgICAgY3Jl
YXRlUGFnZU92ZXJsYXlMYXllcigpOwotCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0K
LXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9v
bCBsYXllckZsdXNoaW5nRW5hYmxlZCkKLXsKLSAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGlu
Z0VuYWJsZWQgPT0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQ7Ci0K
LSAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9z
dFF0OjpzY2hlZHVsZUxheWVyRmx1c2goKQotewotICAgIGlmICghbV9sYXllckZsdXNoU2NoZWR1
bGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9sYXllckZsdXNoVGlt
ZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9sYXllckZsdXNoVGltZXIuc3RhcnRPbmVTaG90KDAp
OwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKQot
ewotICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0
UXQ6OnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCBub3Rp
ZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpCi17Ci0gICAgbV9ub3RpZnlBZnRlclNjaGVkdWxl
ZExheWVyRmx1c2ggPSBub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7Ci19Ci0KLXZvaWQg
TGF5ZXJUcmVlSG9zdFF0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKiBncmFwaGljc0xheWVyKQotewotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXll
ci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKLQotICAgIC8vIEFkZCB0aGUgYWNjZWxlcmF0ZWQgbGF5
ZXIgdHJlZSBoaWVyYXJjaHkuCi0gICAgaWYgKGdyYXBoaWNzTGF5ZXIpCi0gICAgICAgIG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRMYXllci0+YWRkQ2hpbGQoZ3JhcGhpY3NMYXllcik7Ci19Ci0KLXZv
aWQgTGF5ZXJUcmVlSG9zdFF0OjppbnZhbGlkYXRlKCkKLXsKLSAgICBjYW5jZWxQZW5kaW5nTGF5
ZXJGbHVzaCgpOwotCi0gICAgQVNTRVJUKG1faXNWYWxpZCk7Ci0gICAgbV9yb290TGF5ZXIgPSBu
dWxscHRyOwotICAgIG1faXNWYWxpZCA9IGZhbHNlOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RR
dDo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgcmVjdCkKLXsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRz
RGlzcGxheUluUmVjdChyZWN0KTsKLSAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQotICAgICAg
ICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLQotICAg
IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6c2Nyb2xs
Tm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3Qs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCkKLXsKLSAgICBzZXROb25Db21w
b3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShzY3JvbGxSZWN0KTsKLX0KLQotdm9pZCBMYXllclRy
ZWVIb3N0UXQ6OmZvcmNlUmVwYWludCgpCi17Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIG5ld1NpemUpCi17Ci0gICAgbV9yb290TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7Ci0K
LSAgICAvLyBJZiB0aGUgbmV3U2l6ZSBleHBvc2VzIG5ldyBhcmVhcyBvZiB0aGUgbm9uLWNvbXBv
c2l0ZWQgY29udGVudCBhIHNldE5lZWRzRGlzcGxheSBpcyBuZWVkZWQKLSAgICAvLyBmb3IgdGhv
c2UgbmV3bHkgZXhwb3NlZCBhcmVhcy4KLSAgICBGbG9hdFNpemUgb2xkU2l6ZSA9IG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgpOwotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllci0+c2V0U2l6ZShuZXdTaXplKTsKLQotICAgIGlmIChuZXdTaXplLndpZHRoKCkgPiBvbGRT
aXplLndpZHRoKCkpIHsKLSAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RkOjptaW4oc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG5ld1NpemUuaGVpZ2h0KCkpLCBvbGRTaXplLmhlaWdodCgpKTsKLSAgICAgICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRS
ZWN0KG9sZFNpemUud2lkdGgoKSwgMCwgbmV3U2l6ZS53aWR0aCgpIC0gb2xkU2l6ZS53aWR0aCgp
LCBoZWlnaHQpKTsKLSAgICB9Ci0KLSAgICBpZiAobmV3U2l6ZS5oZWlnaHQoKSA+IG9sZFNpemUu
aGVpZ2h0KCkpCi0gICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KEZsb2F0UmVjdCgwLCBvbGRTaXplLmhlaWdodCgpLCBuZXdTaXplLndpZHRo
KCksIG5ld1NpemUuaGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7Ci0KLSAgICBpZiAobV9w
YWdlT3ZlcmxheUxheWVyKQotICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUobmV3
U2l6ZSk7Ci0KLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVI
b3N0UXQ6OmRpZEluc3RhbGxQYWdlT3ZlcmxheSgpCi17Ci0gICAgY3JlYXRlUGFnZU92ZXJsYXlM
YXllcigpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotCi19Ci0KLXZvaWQgTGF5ZXJUcmVl
SG9zdFF0OjpkaWRVbmluc3RhbGxQYWdlT3ZlcmxheSgpCi17Ci0gICAgZGVzdHJveVBhZ2VPdmVy
bGF5TGF5ZXIoKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRy
ZWVIb3N0UXQ6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHJlY3QpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7Ci0gICAgbV9wYWdl
T3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgc2NoZWR1bGVM
YXllckZsdXNoKCk7Ci19Ci0KLWJvb2wgTGF5ZXJUcmVlSG9zdFF0OjpmbHVzaFBlbmRpbmdMYXll
ckNoYW5nZXMoKQotewotICAgIGJvb2wgZGlkU3luYyA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+
bWFpbkZyYW1lKCktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFt
ZXMoKTsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSgpOwotICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCi0gICAg
ICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJP
bmx5KCk7Ci0KLSAgICBtX3Jvb3RMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5
ZXJPbmx5KCk7Ci0gICAgcmV0dXJuIGRpZFN5bmM7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0
OjpkaWRTeW5jQ29tcG9zaXRpbmdTdGF0ZUZvckxheWVyKGNvbnN0IFdlYkxheWVySW5mbyYgaW5m
bykKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OlN5bmNDb21wb3NpdGluZ0xheWVyU3RhdGUo
aW5mbykpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6ZGlkRGVsZXRlTGF5ZXIoV2ViTGF5
ZXJJRCBpZCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkRlbGV0ZUNvbXBvc2l0aW5nTGF5
ZXIoaWQpKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnBlcmZvcm1TY2hlZHVsZWRMYXll
ckZsdXNoKCkKLXsKLSAgICBtX3dlYlBhZ2UtPmxheW91dElmTmVlZGVkKCk7Ci0KLSAgICBpZiAo
IW1faXNWYWxpZCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdf
U1RPUkUpCi0gICAgaWYgKG1faXNTdXNwZW5kZWQgfHwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKQot
ICAgICAgICByZXR1cm47Ci0jZW5kaWYKLQotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7
Ci0gICAgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7Ci0gICAgaWYgKCFtX3Nob3VsZFN5bmNG
cmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2hvdWxkU3luY1Jvb3RMYXllcikg
ewotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6
U2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdl
dCgpKS0+aWQoKSkpOwotICAgICAgICBtX3Nob3VsZFN5bmNSb290TGF5ZXIgPSBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6
RGlkUmVuZGVyRnJhbWUoKSk7Ci0KLSAgICBpZiAoIW1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXll
ckZsdXNoKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBMZXQgdGhlIGRyYXdpbmcgYXJlYSBr
bm93IHRoYXQgd2UndmUgZG9uZSBhIGZsdXNoIG9mIHRoZSBsYXllciBjaGFuZ2VzLgotICAgIHN0
YXRpY19jYXN0PERyYXdpbmdBcmVhSW1wbCo+KG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKSktPmxh
eWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7Ci0gICAgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVy
Rmx1c2ggPSBmYWxzZTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OmxheWVyRmx1c2hUaW1l
ckZpcmVkKFRpbWVyPExheWVyVHJlZUhvc3RRdD4qKQotewotICAgIHBlcmZvcm1TY2hlZHVsZWRM
YXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpjcmVhdGVQYWdlT3Zlcmxh
eUxheWVyKCkKLXsKLSAgICBBU1NFUlQoIW1fcGFnZU92ZXJsYXlMYXllcik7Ci0KLSAgICBtX3Bh
Z2VPdmVybGF5TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7Ci0jaWZuZGVmIE5E
RUJVRwotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlSG9zdFF0IHBh
Z2Ugb3ZlcmxheSBjb250ZW50Iik7Ci0jZW5kaWYKLQotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+
c2V0RHJhd3NDb250ZW50KHRydWUpOwotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZSht
X3dlYlBhZ2UtPnNpemUoKSk7Ci0KLSAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9wYWdlT3Zl
cmxheUxheWVyLmdldCgpKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OmRlc3Ryb3lQYWdl
T3ZlcmxheUxheWVyKCkKLXsKLSAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKLSAgICBt
X3BhZ2VPdmVybGF5TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICBtX3BhZ2VPdmVybGF5
TGF5ZXIgPSBudWxscHRyOwotfQotCi1pbnQ2NF90IExheWVyVHJlZUhvc3RRdDo6YWRvcHRJbWFn
ZUJhY2tpbmdTdG9yZShJbWFnZSogaW1hZ2UpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAg
cmV0dXJuIEludmFsaWRXZWJMYXllcklEOwotICAgIFFQaXhtYXAqIHBpeG1hcCA9IGltYWdlLT5u
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotCi0gICAgaWYgKCFwaXhtYXApCi0gICAgICAg
IHJldHVybiBJbnZhbGlkV2ViTGF5ZXJJRDsKLQotICAgIGludDY0X3Qga2V5ID0gcGl4bWFwLT5j
YWNoZUtleSgpOwotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2Rp
cmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKLQotICAgIGlmIChpdCAh
PSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKSB7Ci0gICAgICAgICsr
KGl0LT5zZWNvbmQpOwotICAgICAgICByZXR1cm4ga2V5OwotICAgIH0KLQotICAgIFJlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxl
KGltYWdlLT5zaXplKCksIGltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpID8gU2hhcmVhYmxl
Qml0bWFwOjpTdXBwb3J0c0FscGhhIDogMCk7Ci0gICAgewotICAgICAgICBPd25QdHI8V2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBo
aWNzQ29udGV4dCgpOwotICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwg
Q29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQ6Onplcm8oKSk7Ci0gICAgfQotCi0gICAgU2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOwotICAgIGJpdG1hcC0+Y3JlYXRlSGFuZGxlKGhh
bmRsZSk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6
OkNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGtleSwgaGFuZGxlKSk7Ci0gICAgbV9kaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5hZGQoa2V5LCAxKTsKLSAgICByZXR1cm4ga2V5
OwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGlu
dDY0X3Qga2V5KQotewotICAgIGlmICgha2V5KQotICAgICAgICByZXR1cm47Ci0gICAgSGFzaE1h
cDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VS
ZWZDb3VudHMuZmluZChrZXkpOwotICAgIGlmIChpdCA9PSBtX2RpcmVjdGx5Q29tcG9zaXRlZElt
YWdlUmVmQ291bnRzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpdC0+c2Vjb25kLS07
Ci0KLSAgICBpZiAoaXQtPnNlY29uZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5yZW1vdmUoaXQpOwotICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpEZXN0cm95RGlyZWN0bHlDb21wb3NpdGVk
SW1hZ2Uoa2V5KSk7Ci19Ci0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6Om5vdGlmeUFuaW1hdGlv
blN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKQotewot
fQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6bm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqKQotewotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6cGFpbnRD
b250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgV2ViQ29yZTo6R3JhcGhpY3NM
YXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KQotewot
ICAgIGlmIChncmFwaGljc0xheWVyID09IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcikgewot
ICAgICAgICBtX3dlYlBhZ2UtPmRyYXdSZWN0KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9wYWdl
T3ZlcmxheUxheWVyKSB7Ci0gICAgICAgIG1fd2ViUGFnZS0+ZHJhd1BhZ2VPdmVybGF5KGdyYXBo
aWNzQ29udGV4dCwgY2xpcFJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi1ib29s
IExheWVyVHJlZUhvc3RRdDo6c2hvd0RlYnVnQm9yZGVycygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd0RlYnVnQm9yZGVycygpOwot
fQotCi1ib29sIExheWVyVHJlZUhvc3RRdDo6c2hvd1JlcGFpbnRDb3VudGVyKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zaG93UmVwYWlu
dENvdW50ZXIoKTsKLX0KLQotYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmcoKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lmIEVOQUJMRShUSUxF
RF9CQUNLSU5HX1NUT1JFKQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZVRpbGUoV2ViTGF5
ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQot
ewotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVh
dGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJbmZvKSk7Ci19Ci0KLXZvaWQg
TGF5ZXJUcmVlSG9zdFF0Ojp1cGRhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJ
RCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKLXsKLSAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6VXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQs
IHRpbGVJRCwgdXBkYXRlSW5mbykpOwotfQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnJlbW92ZVRp
bGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQotewotICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1vdmVUaWxlRm9yTGF5ZXIobGF5ZXJJ
RCwgdGlsZUlEKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRWaXNpYmxlQ29udGVu
dFJlY3RGb3JMYXllcihpbnQgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkK
LXsKLSAgICBXZWJHcmFwaGljc0xheWVyKiBsYXllciA9IFdlYkdyYXBoaWNzTGF5ZXI6OmxheWVy
QnlJRChsYXllcklEKTsKLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0gICAgRmxv
YXRSZWN0IHZpc2libGVSZWN0KHJlY3QpOwotICAgIGxheWVyLT5zZXRWaXNpYmxlQ29udGVudFJl
Y3QocmVjdCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRWaXNpYmxlQ29udGVudFJl
Y3RBbmRTY2FsZShjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSkKLXsKLSAgICBXZWJH
cmFwaGljc0xheWVyKiBsYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQo
KSk7Ci0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuOwotICAgIGxheWVyLT5zZXRDb250
ZW50c1NjYWxlKHNjYWxlKTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLmdldCgpKS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KHJlY3QpOwotfQotCi12
b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rv
cihjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQotewotICAgIHRvV2ViR3JhcGhp
Y3NMYXllcihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5zZXRWaXNpYmxlQ29u
dGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWplY3RvcnlWZWN0b3IpOwotfQotCi12b2lkIExh
eWVyVHJlZUhvc3RRdDo6cmVuZGVyTmV4dEZyYW1lKCkKLXsKLSAgICBtX3dhaXRpbmdGb3JVSVBy
b2Nlc3MgPSBmYWxzZTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotYm9vbCBMYXll
clRyZWVIb3N0UXQ6OmxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuICFtX2lzU3VzcGVuZGVkICYmICFtX3dhaXRpbmdGb3JVSVByb2Nlc3M7Ci19Ci0KLSNl
bmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLSNlbHNlCiAjaW5jbHVkZSAiTGF5ZXJUcmVl
SG9zdC5oIgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQogbmFtZXNwYWNlIFdlYktpdCB7
CiAKIGJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkK
QEAgLTQ0MCw0ICszNSwzIEBAIGJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nKCkKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0
UXQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0
UXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBhYzk2YTMxYjQ4ZTA2MTJlNDM2
MjdmMzc4YTNlMzdiZjFlNWJlMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVl
SG9zdFF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAgICBDb3B5cmln
aHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
Ki8KLQotI2lmbmRlZiBMYXllclRyZWVIb3N0UXRfaAotI2RlZmluZSBMYXllclRyZWVIb3N0UXRf
aAotCi0jaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUhv
c3QuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgIldlYkdyYXBoaWNzTGF5ZXIuaCIK
LSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KLSNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBVcGRhdGVJbmZvOwotY2xh
c3MgV2ViUGFnZTsKLQotY2xhc3MgTGF5ZXJUcmVlSG9zdFF0IDogcHVibGljIExheWVyVHJlZUhv
c3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQKLSNpZiBFTkFCTEUoVElMRURfQkFDS0lO
R19TVE9SRSkKLSAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJMYXllclRyZWVUaWxl
Q2xpZW50Ci0jZW5kaWYKLXsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllclRy
ZWVIb3N0UXQ+IGNyZWF0ZShXZWJQYWdlKik7Ci0gICAgdmlydHVhbCB+TGF5ZXJUcmVlSG9zdFF0
KCk7Ci0KLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsK
LQotICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCgp
IHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dDsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXll
ckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGROb3RpZnlBZnRlck5leHRT
Y2hlZHVsZWRMYXllckZsdXNoKGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9z
aXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGlu
dmFsaWRhdGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXROb25Db21wb3NpdGVkQ29udGVudHNO
ZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNj
cm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxS
ZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOwotICAgIHZpcnR1YWwg
dm9pZCBmb3JjZVJlcGFpbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsKLQotICAgIHZpcnR1YWwgdm9pZCBkaWRJbnN0
YWxsUGFnZU92ZXJsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkVW5pbnN0YWxsUGFnZU92ZXJs
YXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCkg
eyBtX2lzU3VzcGVuZGVkID0gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJp
bmcoKSB7IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1bGVMYXllckZsdXNoKCk7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKSB7IH0KLSAgICB2aXJ0
dWFsIGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJbWFnZSopOwotICAgIHZpcnR1YWwg
dm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCk7Ci0KLSNpZiBFTkFCTEUoVElM
RURfQkFDS0lOR19TVE9SRSkKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJMYXllcklE
LCBpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpOwotICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQpOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RGb3JMYXllcihpbnQgbGF5ZXJJRCwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsK
LSAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKGNvbnN0IEludFJl
Y3QmLCBmbG9hdCBzY2FsZSk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50UmVj
dFRyYWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBk
aWRTeW5jQ29tcG9zaXRpbmdTdGF0ZUZvckxheWVyKGNvbnN0IFdlYkxheWVySW5mbyYpOwotICAg
IHZpcnR1YWwgdm9pZCBkaWREZWxldGVMYXllcihXZWJMYXllcklEKTsKLSNlbmRpZgotCi1wcm90
ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgTGF5ZXJUcmVlSG9zdFF0KFdlYlBhZ2UqKTsKLQotcHJpdmF0
ZToKLSAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFu
aW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1l
KTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6
R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBS
ZWN0KTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoKSBjb25zdDsKLQotICAgIC8vIExheWVyVHJl
ZUhvc3RRdAotICAgIHZvaWQgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOwotICAgIHZvaWQgZGVz
dHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKLSAgICBib29sIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdl
cygpOwotICAgIHZvaWQgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKLSAgICB2b2lkIHBlcmZv
cm1TY2hlZHVsZWRMYXllckZsdXNoKCk7Ci0gICAgdm9pZCBzZW5kTGF5ZXJzVG9VSSgpOwotCi0g
ICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwotCi0gICAgLy8g
VGhlIGxheWVyIHdoaWNoIGNvbnRhaW5zIGFsbCBub24tY29tcG9zaXRlZCBjb250ZW50LgotICAg
IE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5
ZXI7Ci0KLSAgICAvLyBUaGUgcGFnZSBvdmVybGF5IGxheWVyLiBXaWxsIGJlIG51bGwgaWYgdGhl
cmUncyBubyBwYWdlIG92ZXJsYXkuCi0gICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+
IG1fcGFnZU92ZXJsYXlMYXllcjsKLQotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50PiBtX2RpcmVj
dGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzOwotCi0gICAgYm9vbCBtX25vdGlmeUFmdGVyU2No
ZWR1bGVkTGF5ZXJGbHVzaDsKLSAgICBib29sIG1faXNWYWxpZDsKLSNpZiBFTkFCTEUoVElMRURf
QkFDS0lOR19TVE9SRSkKLSAgICBib29sIG1fd2FpdGluZ0ZvclVJUHJvY2VzczsKLSAgICBib29s
IG1faXNTdXNwZW5kZWQ7Ci0jZW5kaWYKLSAgICBMYXllclRyZWVDb250ZXh0IG1fbGF5ZXJUcmVl
Q29udGV4dDsKLSAgICBib29sIG1fc2hvdWxkU3luY0ZyYW1lOwotICAgIGJvb2wgbV9zaG91bGRT
eW5jUm9vdExheWVyOwotICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6VGlt
ZXI8TGF5ZXJUcmVlSG9zdFF0PiopOwotICAgIFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUhvc3RR
dD4gbV9sYXllckZsdXNoVGltZXI7Ci0gICAgYm9vbCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5h
YmxlZDsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExheWVyVHJlZUhvc3RRdF9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>