<?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>70174</bug_id>
          
          <creation_ts>2011-10-15 02:31:16 -0700</creation_ts>
          <short_desc>REGRESSION(r97549): It broke the SL build (Requested by Ossy_weekend on #webkit).</short_desc>
          <delta_ts>2011-10-15 02:36:21 -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>484562</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-15 02:31:16 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/97549 broke the build:
It broke the SL build (Requested by Ossy_weekend 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>484563</commentid>
    <comment_count>1</comment_count>
      <attachid>111131</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-15 02:31:43 -0700</bug_when>
    <thetext>Created attachment 111131
ROLLOUT of r97549

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>484565</commentid>
    <comment_count>2</comment_count>
      <attachid>111131</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-15 02:36:17 -0700</bug_when>
    <thetext>Comment on attachment 111131
ROLLOUT of r97549

Clearing flags on attachment: 111131

Committed r97554: &lt;http://trac.webkit.org/changeset/97554&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484566</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-15 02:36:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111131</attachid>
            <date>2011-10-15 02:31:43 -0700</date>
            <delta_ts>2011-10-15 02:36:17 -0700</delta_ts>
            <desc>ROLLOUT of r97549</desc>
            <filename>bug-70174-20111015092913.patch</filename>
            <type>text/plain</type>
            <size>100090</size>
            <attacher name="WebKit Review Bot">webkit.review.bot</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc1NTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBmNWMyNTdjY2YwYjA1ZTRh
ZWM0MTljMGVmMDVmZThiNDVlMTYyMDk5Li5kODY1NDYwNzI4NzI0N2ZhOGFlMjA2ZmE4N2UzZDJj
NzFjNDlkMzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzggQEAKKzIwMTEtMTAtMTUgIFNoZXJp
ZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgorCisgICAgICAgIFVucmV2aWV3
ZWQsIHJvbGxpbmcgb3V0IHI5NzU0OS4KKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9j
aGFuZ2VzZXQvOTc1NDkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcwMTc0CisKKyAgICAgICAgSXQgYnJva2UgdGhlIFNMIGJ1aWxkIChSZXF1ZXN0ZWQg
YnkgT3NzeV93ZWVrZW5kIG9uICN3ZWJraXQpLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMu
cHJvOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmg6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9MYXllclRyZWVD
b250ZXh0Lmg6CisgICAgICAgICogU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJMYXllckluZm86OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxh
eWVySW5mbzo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oOgor
ICAgICAgICAqIFNoYXJlZC9xdC9MYXllclRyZWVDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVDb250ZXh0OjpMYXllclRyZWVDb250ZXh0KToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlQ29udGV4dDo6fkxheWVyVHJlZUNvbnRleHQpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVDb250ZXh0OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVD
b250ZXh0OjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0Ojppc0Vt
cHR5KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6CisgICAgICAgICogVUlQcm9jZXNz
L0RyYXdpbmdBcmVhUHJveHkuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVBy
b3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ01vZGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluOiBSZW1vdmVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
cXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFdlYktpdDIu
cHJvOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXll
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVkTGF5ZXJJRHMpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR3JhcGhpY3NMYXllcjo6V2ViR3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHcmFwaGljc0xheWVyOjp+V2ViR3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyOjphZGRDaGlsZEF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NM
YXllcjo6YWRkQ2hpbGRBYm92ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVy
OjphZGRDaGlsZEJlbG93KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnJl
cGxhY2VDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpyZW1vdmVG
cm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRl
bnRzUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50
c1RvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNE
aXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlz
cGxheUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRDb250
ZW50c05lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpk
aWRTeW5jaHJvbml6ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpsYXll
ckluZm8pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0
aW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6bmVlZHNEaXNw
bGF5UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjp0YWtlTGF5ZXJz
VG9EZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBv
c2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OmRpdmlkZUlu
dG9UaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0Q29tcG9zaXRpbmdJbmZvRm9yVGhp
c0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbGxlY3RDb21wb3NpdGluZ0luZm9SZWN1cnNp
dmVseSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZW5kTGF5ZXJzVG9V
SVByb2Nlc3MpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhp
Y3NMYXllci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3Q6OmNyZWF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJl
ZUhvc3QuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5tZXNz
YWdlcy5pbjogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3
aW5nQXJlYS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0Fy
ZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OmRpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0Lmg6IFJlbW92ZWQuCisKIDIwMTEtMTAtMTUgIE5v
J2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRd
W1dLMl0gU3luY2hyb25pemUgdGlsaW5nIHdpdGggYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnBybyBiL1NvdXJjZS9XZWJL
aXQyL0Rlcml2ZWRTb3VyY2VzLnBybwppbmRleCBiOTNlNzY3MGYyN2EyNTBmNGZiNzIzNDg2ZTdl
OTM5OGMxOGQ4Njg2Li5mY2U1OWM1MjZlZWU1MWQwMjNkM2E0ZmY5Nzg2YTIwOTI2MzliMGU5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcm8KKysrIGIvU291cmNl
L1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCkBAIC05Miw3ICs5Miw2IEBAIE1FU1NBR0VfUkVD
RUlWRVJTID0gXAogICAgIEF1dGhlbnRpY2F0aW9uTWFuYWdlci5tZXNzYWdlcy5pbiBcCiAgICAg
RG93bmxvYWRQcm94eS5tZXNzYWdlcy5pbiBcCiAgICAgRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdl
cy5pbiBcCi0gICAgTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluIFwKICAgICBQbHVnaW5D
b250cm9sbGVyUHJveHkubWVzc2FnZXMuaW4gXAogICAgIFBsdWdpblByb2Nlc3MubWVzc2FnZXMu
aW4gXAogICAgIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluIFwKQEAgLTExNyw3
ICsxMTYsNiBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBXZWJGdWxsU2NyZWVuTWFuYWdl
ci5tZXNzYWdlcy5pbiBcCiAgICAgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5p
biBcCiAgICAgV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdlcy5pbiBcCi0gICAgV2ViUGFnZS9M
YXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluIFwKICAgICBXZWJQYWdlL1dlYkluc3BlY3Rvci5tZXNz
YWdlcy5pbiBcCiAgICAgV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIFwKICAgICBXZWJQYWdl
UHJveHkubWVzc2FnZXMuaW4gXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Q29yZUlQQy9NZXNzYWdlSUQuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVz
c2FnZUlELmgKaW5kZXggNDU1MWQ3ZTg0MzA3MzU0ODUyOTZlOWE5OTc5NjhkZmU0MTMwMWY3NS4u
MTNiMjE4MzZkZGNkMTkzMTM5YTM5YjdlN2Y1NTliZjAxMGI0ZjU0NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdlSUQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oCkBAIC0zOCw3ICszOCw2IEBAIGVudW0g
TWVzc2FnZUNsYXNzIHsKICAgICBNZXNzYWdlQ2xhc3NBdXRoZW50aWNhdGlvbk1hbmFnZXIsCiAg
ICAgTWVzc2FnZUNsYXNzRHJhd2luZ0FyZWEsCiAgICAgTWVzc2FnZUNsYXNzSW5qZWN0ZWRCdW5k
bGUsCi0gICAgTWVzc2FnZUNsYXNzTGF5ZXJUcmVlSG9zdCwKICAgICBNZXNzYWdlQ2xhc3NXZWJB
cHBsaWNhdGlvbkNhY2hlTWFuYWdlciwKICAgICBNZXNzYWdlQ2xhc3NXZWJDb29raWVNYW5hZ2Vy
LAogICAgIE1lc3NhZ2VDbGFzc1dlYkRhdGFiYXNlTWFuYWdlciwKQEAgLTU1LDcgKzU0LDYgQEAg
ZW51bSBNZXNzYWdlQ2xhc3MgewogICAgIC8vIE1lc3NhZ2VzIHNlbnQgYnkgdGhlIHdlYiBwcm9j
ZXNzIHRvIHRoZSBVSSBwcm9jZXNzLgogICAgIE1lc3NhZ2VDbGFzc0Rvd25sb2FkUHJveHksCiAg
ICAgTWVzc2FnZUNsYXNzRHJhd2luZ0FyZWFQcm94eSwKLSAgICBNZXNzYWdlQ2xhc3NMYXllclRy
ZWVIb3N0UHJveHksCiAgICAgTWVzc2FnZUNsYXNzV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQ
cm94eSwKICAgICBNZXNzYWdlQ2xhc3NXZWJDb250ZXh0LAogICAgIE1lc3NhZ2VDbGFzc1dlYkNv
bnRleHRMZWdhY3ksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIv
bWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkK
aW5kZXggNmNjNTMxNjVhYzM2MmI1ZGE1Mzk0MTVkOWNkYjM4ZDljODJmNTU3Yi4uNmEyZDE5MGY1
ZTlhYTkwMGUwZWE2YjRhMTRjN2IzNWE3NDMyODI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQyL1Njcmlw
dHMvd2Via2l0Mi9tZXNzYWdlcy5weQpAQCAtMzgyLDggKzM4Miw2IEBAIGRlZiBoZWFkZXJzX2Zv
cl90eXBlKHR5cGUpOgogICAgICAgICAnV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdl
RW5jb2Rlcic6IFtdLAogICAgICAgICAnV2ViS2l0OjpXZWJDb250ZXh0VXNlck1lc3NhZ2VFbmNv
ZGVyJzogW10sCiAgICAgICAgICdXZWJLaXQ6OldlYkdlc3R1cmVFdmVudCc6IFsnIldlYkV2ZW50
LmgiJ10sCi0gICAgICAgICdXZWJLaXQ6OldlYkxheWVySUQnOiBbJyJXZWJMYXllclRyZWVJbmZv
LmgiJ10sCi0gICAgICAgICdXZWJLaXQ6OldlYkxheWVySW5mbyc6IFsnIldlYkxheWVyVHJlZUlu
Zm8uaCInXSwKICAgICAgICAgJ1dlYktpdDo6V2ViS2V5Ym9hcmRFdmVudCc6IFsnIldlYkV2ZW50
LmgiJ10sCiAgICAgICAgICdXZWJLaXQ6OldlYk1vdXNlRXZlbnQnOiBbJyJXZWJFdmVudC5oIidd
LAogICAgICAgICAnV2ViS2l0OjpXZWJUb3VjaEV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9MYXllclRyZWVDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oCmluZGV4IDJkYjU4NGU1Nzk0Yjdi
Yjk2YjM4OGNiNmYyMmQwZjNhNzBmYjBlNjcuLjg2NjdjOTg5NzI0MjFiODNjNWQwMjNkNzllYzMw
ZDhhZTA0Yjc5MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9MYXllclRyZWVD
b250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaApA
QCAtNDcsOCArNDcsNiBAQCBwdWJsaWM6CiAgICAgdWludDMyX3QgY29udGV4dElEOwogI2VsaWYg
UExBVEZPUk0oV0lOKQogICAgIEhXTkQgd2luZG93OwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAg
dWludDMyX3Qgd2ViTGF5ZXJJRDsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYkxheWVyVHJlZUluZm8uY3BwCmluZGV4IGVkYjYyYTI1MDA4NjQyNzA3Nzg0M2Q5YTE3MWJk
NjExNjg2NTAyODQuLmEwMTI4NTU1MjVjMzhiMmNlYTI2NDFkNmFlODhmM2MxY2Y3NGE4NjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAKQEAgLTIzLDcgKzIz
LDYgQEAKIAogI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKIAotI2luY2x1ZGUgIkFyZ3Vt
ZW50cy5oIgogI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1
bWVudENvZGVycy5oIgogCkBAIC0zNCwxNyArMzMsMzUgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiB2
b2lkIFdlYkxheWVySW5mbzo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2Rl
cikgY29uc3QKIHsKICAgICAvLyBXZSBoYXZlIHRvIGRpdmlkZSBpdCB0byBzZXZlcmFsIGxpbmVz
LCBiZWNhdXNlIENvcmVJUEM6OkluL091dCB0YWtlcyBhIG1heGltdW0gb2YgMTAgYXJndW1lbnRz
LgotICAgIGVuY29kZXItPmVuY29kZShDb3JlSVBDOjpJbihpZCwgbmFtZSwgcGFyZW50LCBjaGls
ZHJlbiwgZmxhZ3MsIHJlcGxpY2EsIG1hc2ssIGltYWdlQmFja2luZ1N0b3JlSUQpKTsKKyAgICBl
bmNvZGVyLT5lbmNvZGUoQ29yZUlQQzo6SW4oaWQsIG5hbWUsIHBhcmVudCwgY2hpbGRyZW4sIGZs
YWdzLCByZXBsaWNhLCBtYXNrKSk7CiAgICAgZW5jb2Rlci0+ZW5jb2RlKENvcmVJUEM6OkluKHBv
cywgc2l6ZSwgdHJhbnNmb3JtLCBvcGFjaXR5LCBhbmNob3JQb2ludCwgY2hpbGRyZW5UcmFuc2Zv
cm0sIGNvbnRlbnRzUmVjdCkpOworICAgIGVuY29kZXItPmVuY29kZShpbWFnZUJhY2tpbmdTdG9y
ZSA/IGltYWdlQmFja2luZ1N0b3JlLT5zaXplKCkgOiBJbnRTaXplKCkpOworCisgICAgaWYgKCFp
bWFnZUJhY2tpbmdTdG9yZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2hhcmVhYmxlQml0bWFw
OjpIYW5kbGUgaW1hZ2VIYW5kbGU7CisgICAgaWYgKGltYWdlQmFja2luZ1N0b3JlLT5jcmVhdGVI
YW5kbGUoaW1hZ2VIYW5kbGUpKQorICAgICAgICBpbWFnZUhhbmRsZS5lbmNvZGUoZW5jb2Rlcik7
CiB9CiAKIGJvb2wgV2ViTGF5ZXJJbmZvOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVy
KiBkZWNvZGVyLCBXZWJMYXllckluZm8mIGluZm8pCiB7CiAgICAgLy8gV2UgaGF2ZSB0byBkaXZp
ZGUgaXQgdG8gc2V2ZXJhbCBsaW5lcywgYmVjYXVzZSBDb3JlSVBDOjpJbi9PdXQgdGFrZXMgYSBt
YXhpbXVtIG9mIDEwIGFyZ3VtZW50cy4KLSAgICBpZiAoIWRlY29kZXItPmRlY29kZShDb3JlSVBD
OjpPdXQoaW5mby5pZCwgaW5mby5uYW1lLCBpbmZvLnBhcmVudCwgaW5mby5jaGlsZHJlbiwgaW5m
by5mbGFncywgaW5mby5yZXBsaWNhLCBpbmZvLm1hc2ssIGluZm8uaW1hZ2VCYWNraW5nU3RvcmVJ
RCkpKQorICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKENvcmVJUEM6Ok91dChpbmZvLmlkLCBpbmZv
Lm5hbWUsIGluZm8ucGFyZW50LCBpbmZvLmNoaWxkcmVuLCBpbmZvLmZsYWdzLCBpbmZvLnJlcGxp
Y2EsIGluZm8ubWFzaykpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGUoQ29yZUlQQzo6T3V0KGluZm8ucG9zLCBpbmZvLnNpemUsIGluZm8udHJhbnNmb3Jt
LCBpbmZvLm9wYWNpdHksIGluZm8uYW5jaG9yUG9pbnQsIGluZm8uY2hpbGRyZW5UcmFuc2Zvcm0s
IGluZm8uY29udGVudHNSZWN0KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEludFNp
emUgaW1hZ2VCYWNraW5nU3RvcmVTaXplOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGltYWdl
QmFja2luZ1N0b3JlU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaW1hZ2VC
YWNraW5nU3RvcmVTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSBpbWFnZUhhbmRsZTsKKyAgICBpZiAoU2hhcmVhYmxlQml0
bWFwOjpIYW5kbGU6OmRlY29kZShkZWNvZGVyLCBpbWFnZUhhbmRsZSkpCisgICAgICAgIGluZm8u
aW1hZ2VCYWNraW5nU3RvcmUgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShpbWFnZUhhbmRsZSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJMYXllclRyZWVJbmZvLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVl
SW5mby5oCmluZGV4IDI1MDAzZTc0M2M2MWMzM2MwMjkyMjAzZWY3NmYzZjQ2ZTY5ZDI3ZDYuLmEw
ZTY4ZDNjZDAzZDMzODA3YmNiNWVhMGJkMjE4OTNjZjJjNzk1NzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaApAQCAtMzQsNyArMzQsNiBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiB0eXBlZGVmIHVpbnQzMl90IFdlYkxh
eWVySUQ7Ci1lbnVtIHsgSW52YWxpZFdlYkxheWVySUQgPSAwIH07CiAKIHN0cnVjdCBXZWJMYXll
clVwZGF0ZUluZm8gewogICAgIFdlYkxheWVyVXBkYXRlSW5mbygpIHsgfQpAQCAtNTUsNyArNTQs
NiBAQCBzdHJ1Y3QgV2ViTGF5ZXJJbmZvIHsKICAgICBXZWJMYXllcklEIHBhcmVudDsKICAgICBX
ZWJMYXllcklEIHJlcGxpY2E7CiAgICAgV2ViTGF5ZXJJRCBtYXNrOwotICAgIGludDY0X3QgaW1h
Z2VCYWNraW5nU3RvcmVJRDsKIAogICAgIEZsb2F0UG9pbnQgcG9zOwogICAgIEZsb2F0UG9pbnQz
RCBhbmNob3JQb2ludDsKQEAgLTczLDggKzcxLDYgQEAgc3RydWN0IFdlYkxheWVySW5mbyB7CiAg
ICAgICAgICAgICBib29sIG1hc2tzVG9Cb3VuZHMgOiAxOwogICAgICAgICAgICAgYm9vbCBwcmVz
ZXJ2ZXMzRCA6IDE7CiAgICAgICAgICAgICBib29sIGNvbnRlbnROZWVkc0Rpc3BsYXkgOiAxOwot
ICAgICAgICAgICAgYm9vbCBpbWFnZUlzVXBkYXRlZDogMTsKLSAgICAgICAgICAgIGJvb2wgaXNS
b290TGF5ZXI6IDE7CiAgICAgICAgIH07CiAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnczsKICAg
ICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0xheWVyVHJlZUNvbnRl
eHRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvTGF5ZXJUcmVlQ29udGV4dFF0LmNw
cAppbmRleCBkMzdkNzljYjIxM2Q5NmJlYmE3MGZlZjFhMzgwN2VkNWVlYTgzNDNjLi5mMWJmMWI0
MTYzMDA1YzIwZmM1YzIzZDdhZjBkMDc4M2JlYjFmN2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvcXQvTGF5ZXJUcmVlQ29udGV4dFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvcXQvTGF5ZXJUcmVlQ29udGV4dFF0LmNwcApAQCAtMjYsMzggKzI2LDQxIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgogCi0jaW5j
bHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCi0jaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCisj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIExheWVy
VHJlZUNvbnRleHQ6OkxheWVyVHJlZUNvbnRleHQoKQotICAgIDogd2ViTGF5ZXJJRCgwKQogewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIExheWVyVHJlZUNvbnRleHQ6On5MYXllclRyZWVD
b250ZXh0KCkKIHsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheWVyVHJlZUNv
bnRleHQ6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0Cit2
b2lkIExheWVyVHJlZUNvbnRleHQ6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqKSBj
b25zdAogewotICAgIGVuY29kZXItPmVuY29kZSh3ZWJMYXllcklEKTsKKyAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCi1ib29sIExheWVyVHJlZUNvbnRleHQ6OmRlY29kZShDb3JlSVBDOjpBcmd1
bWVudERlY29kZXIqIGRlY29kZXIsIExheWVyVHJlZUNvbnRleHQmIGNvbnRleHQpCitib29sIExh
eWVyVHJlZUNvbnRleHQ6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBMYXllclRy
ZWVDb250ZXh0JikKIHsKLSAgICByZXR1cm4gZGVjb2Rlci0+ZGVjb2RlKGNvbnRleHQud2ViTGF5
ZXJJRCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9v
bCBMYXllclRyZWVDb250ZXh0Ojppc0VtcHR5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gIXdlYkxh
eWVySUQ7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBvcGVyYXRvcj09KGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGEsIGNvbnN0IExheWVyVHJlZUNv
bnRleHQmIGIpCitib29sIG9wZXJhdG9yPT0oY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYsIGNvbnN0
IExheWVyVHJlZUNvbnRleHQmKQogewotICAgIHJldHVybiBhLndlYkxheWVySUQgPT0gYi53ZWJM
YXllcklEOworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0RyYXdpbmdBcmVhUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdB
cmVhUHJveHkuY3BwCmluZGV4IDM5ZDYwYmEyOTRmMGFjZTU4MWYzY2M4OWZjYWQ5YmViOGVkYWFi
OGIuLmY4NTJlMmY1MTU1YzA5MDZhZTBlYmNmYmE5ZmQ5ZTA3MmEyOTg3MmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKQEAgLTI4LDEwICsyOCw2
IEBACiAKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotI2luY2x1ZGUgIkxheWVyVHJlZUhv
c3RQcm94eS5oIgotI2VuZGlmCi0KIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKQEAgLTU3LDE2ICs1Myw0IEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94eTo6c2V0
U2l6ZShjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBJbnRTaXplJiBzY3JvbGxPZmZzZXQpCiAg
ICAgc2l6ZURpZENoYW5nZSgpOwogfQogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi12b2lkIERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVZp
ZXdwb3J0KCkKLXsKLSAgICBtX3dlYlBhZ2VQcm94eS0+c2V0Vmlld05lZWRzRGlzcGxheSh2aWV3
cG9ydFZpc2libGVSZWN0KCkpOwotfQotCi1XZWJDb3JlOjpJbnRSZWN0IERyYXdpbmdBcmVhUHJv
eHk6OmNvbnRlbnRzUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQ6
Onplcm8oKSwgbV93ZWJQYWdlUHJveHktPnZpZXdTaXplKCkpOwotfQotI2VuZGlmCi0KIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Ry
YXdpbmdBcmVhUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVBy
b3h5LmgKaW5kZXggYTE5NDk4MGZkMTg2MDYxNDk4ODE1ZDgyMTAyZmVkNmIyYzUxMDZmMy4uMDg4
ZmM4Yjc0YTE4ZjNmNmU2ZjUyM2E0NDFiZWEwMjFjYjk2OWIxYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCkBAIC0yNywxMSArMjcsOSBAQAogI2lmbmRl
ZiBEcmF3aW5nQXJlYVByb3h5X2gKICNkZWZpbmUgRHJhd2luZ0FyZWFQcm94eV9oCiAKLSNpbmNs
dWRlIDxDb3JlSVBDL01lc3NhZ2VJRC5oPgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW5mby5oIgot
I2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5o
PgogI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC00NywxNyAr
NDUsMTMgQEAgbmFtZXNwYWNlIENvcmVJUEMgewogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0g
ICAgY2xhc3MgRmxvYXRQb2ludDsKLSAgICBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKKyAg
ICBjbGFzcyBJbnRSZWN0OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTGF5ZXJU
cmVlQ29udGV4dDsKLWNsYXNzIExheWVyVHJlZUhvc3RQcm94eTsKIGNsYXNzIFVwZGF0ZUluZm87
Ci1jbGFzcyBXZWJMYXllclRyZWVJbmZvOwotY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOwogY2xh
c3MgV2ViUGFnZVByb3h5OwogCiBjbGFzcyBEcmF3aW5nQXJlYVByb3h5IHsKQEAgLTgzLDI0ICs3
Nyw2IEBAIHB1YmxpYzoKICAgICBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9CiAgICAgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOwogCi0jaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZp
ZXdwb3J0VmlzaWJsZVJlY3QoKSBjb25zdCB7IHJldHVybiBjb250ZW50c1JlY3QoKTsgfQotICAg
IHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBjb250ZW50c1JlY3QoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgaXNCYWNraW5nU3RvcmVSZWFkeSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KSB7IH0KLQotI2lmIEVOQUJMRShUSUxF
RF9CQUNLSU5HX1NUT1JFKQotICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0
QW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxv
YXQgc2NhbGUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFq
ZWN0b3J5VmVjdG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBX
ZWJLaXQ6OlVwZGF0ZUluZm8mKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZUZvckxh
eWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQg
dGlsZUlEKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94
eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2Fn
ZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpIHsgfQot
Ci0gICAgV2ViUGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gbV93ZWJQYWdlUHJveHk7IH0KLSNl
bmRpZgotI2VuZGlmCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgRHJhd2luZ0FyZWFQcm94eShE
cmF3aW5nQXJlYVR5cGUsIFdlYlBhZ2VQcm94eSopOwogCkBAIC0xMTAsMTAgKzg2LDYgQEAgcHJv
dGVjdGVkOgogICAgIFdlYkNvcmU6OkludFNpemUgbV9zaXplOwogICAgIFdlYkNvcmU6OkludFNp
emUgbV9zY3JvbGxPZmZzZXQ7CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYm
IFVTRShURVhUVVJFX01BUFBFUikKLSAgICBPd25QdHI8TGF5ZXJUcmVlSG9zdFByb3h5PiBtX2xh
eWVyVHJlZUhvc3RQcm94eTsKLSNlbmRpZgotCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBz
aXplRGlkQ2hhbmdlKCkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Ry
YXdpbmdBcmVhUHJveHlJbXBsLmNwcAppbmRleCA0ZDdiZDQwYTBiYzYzOTM3MTljYmQwNGU2M2Nl
ZGM0ZTcwYjBlYzhkLi42MTlkNTA4MWQxN2EyNDg4NGU5YmI0MjA2Mzk0NzQ2MzM5OTJlNjJkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5j
cHAKQEAgLTM0LDEwICszNCw2IEBACiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9SZWdpb24uaD4KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5o
IgotI2VuZGlmCi0KIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKQEAgLTMzMiwzOCArMzI4LDggQEAgdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZW50ZXJB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXgKICAgICBtX2Jh
Y2tpbmdTdG9yZSA9IG51bGxwdHI7CiAgICAgbV9sYXllclRyZWVDb250ZXh0ID0gbGF5ZXJUcmVl
Q29udGV4dDsKICAgICBtX3dlYlBhZ2VQcm94eS0+ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZShsYXllclRyZWVDb250ZXh0KTsKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgaWYg
KCFtX2xheWVyVHJlZUhvc3RQcm94eSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHkgPSBh
ZG9wdFB0cihuZXcgTGF5ZXJUcmVlSG9zdFByb3h5KHRoaXMpKTsKLSNlbmRpZgotfQotCi0jaWYg
RU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi12b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpk
aWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBj
b25uZWN0aW9uLCBDb3JlSVBDOjpNZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVu
dERlY29kZXIqIGFyZ3VtZW50cykKLXsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0UHJveHkpCi0g
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5LT5kaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5
TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7Ci19Ci0KLXZvaWQgRHJh
d2luZ0FyZWFQcm94eUltcGw6OnNldFZpc2libGVDb250ZW50c1JlY3RBbmRTY2FsZShjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiB2aXNpYmxlQ29udGVudHNSZWN0LCBmbG9hdCBzY2FsZSkKLXsKLSAg
ICBpZiAobV9sYXllclRyZWVIb3N0UHJveHkpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5
LT5zZXRWaXNpYmxlQ29udGVudHNSZWN0QW5kU2NhbGUodmlzaWJsZUNvbnRlbnRzUmVjdCwgc2Nh
bGUpOwotfQotCi12b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpzZXRWaXNpYmxlQ29udGVudFJl
Y3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnlW
ZWN0b3IpCi17Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5KQotICAgICAgICBtX2xheWVy
VHJlZUhvc3RQcm94eS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFq
ZWN0b3J5VmVjdG9yKTsKIH0KIAotdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6cGFpbnRUb0N1
cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQg
b3BhY2l0eSkKLXsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0UHJveHkpCi0gICAgICAgIG1fbGF5
ZXJUcmVlSG9zdFByb3h5LT5wYWludFRvQ3VycmVudEdMQ29udGV4dChtYXRyaXgsIG9wYWNpdHkp
OwotfQotI2VuZGlmCi0KIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmV4aXRBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZSgpCiB7CiAgICAgQVNTRVJUKGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHlJbXBsLmgKaW5kZXggYWFjNzFlODM3MGE3M2VkNjRlZDgzNjQ5NmQ1ZTAzOGY3MDllOTg0OS4u
ZDA5MWY5NzBjYmFiMGIwMjhjOTU1OTQ4NjJiOTk1NTlmNTFiY2NjZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmgKQEAgLTM5LDggKzM5LDYg
QEAgY2xhc3MgUmVnaW9uOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgTGF5ZXJUcmVl
SG9zdFByb3h5OwotCiBjbGFzcyBEcmF3aW5nQXJlYVByb3h5SW1wbCA6IHB1YmxpYyBEcmF3aW5n
QXJlYVByb3h5IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxEcmF3aW5nQXJlYVBy
b3h5SW1wbD4gY3JlYXRlKFdlYlBhZ2VQcm94eSopOwpAQCAtNzcsMTMgKzc1LDYgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwogCiAgICAgYm9v
bCBpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBjb25zdCB7IHJldHVybiAhbV9sYXll
clRyZWVDb250ZXh0LmlzRW1wdHkoKTsgfQotCi0jaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RP
UkUpCi0gICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3RBbmRTY2FsZShjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiB2aXNpYmxlQ29udGVudHNSZWN0LCBmbG9hdCBzY2FsZSk7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFRvQ3VycmVu
dEdMQ29udGV4dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9w
YWNpdHkpOwotICAgIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29y
ZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnRE
ZWNvZGVyKik7Ci0jZW5kaWYKICNlbHNlCiAgICAgYm9vbCBpc0luQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ01vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGNlZjFmZjk2OTU1YTUwZGZmZjAyN2Q0ZmFkZmEzMDJhNDkxNjQ2NzQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICsw
LDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgTGF5ZXJUcmVlSG9zdFByb3h5X2gK
LSNkZWZpbmUgTGF5ZXJUcmVlSG9zdFByb3h5X2gKLQotI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5o
IgotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKLSNpbmNsdWRlICJNZXNzYWdlUXVldWUu
aCIKLSNpbmNsdWRlICJSZWdpb24uaCIKLSNpbmNsdWRlICJSdW5Mb29wLmgiCi0jaW5jbHVkZSAi
V2ViTGF5ZXJUcmVlSW5mby5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9J
bnRSZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KLQotI2lmIFVTRShURVhUVVJFX01BUFBFUikKLSNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIKLSNlbmRpZgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViTGF5ZXJJbmZvOwotY2xhc3MgV2ViTGF5ZXJVcGRhdGVJ
bmZvOwotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotY2xhc3MgTGF5ZXJUcmVlTWVzc2Fn
ZVRvUmVuZGVyZXI7Ci0KLWNsYXNzIExheWVyVHJlZUhvc3RQcm94eSA6IHB1YmxpYyBHcmFwaGlj
c0xheWVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0Fy
ZWFQcm94eSopOwotICAgIHZpcnR1YWwgfkxheWVyVHJlZUhvc3RQcm94eSgpOwotICAgIHZvaWQg
c3luY0NvbXBvc2l0aW5nTGF5ZXJTdGF0ZShjb25zdCBXZWJMYXllckluZm8mKTsKLSAgICB2b2lk
IGRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7Ci0gICAgdm9pZCBzZXRSb290Q29t
cG9zaXRpbmdMYXllcihXZWJMYXllcklEKTsKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENv
cmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciopOwotICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmLCBmbG9hdCk7Ci0gICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0
QW5kU2NhbGUoY29uc3QgSW50UmVjdCYsIGZsb2F0KTsKLSAgICB2b2lkIHNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYpOwotI2lmIEVOQUJMRShU
SUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIHZvaWQgc3luY1JlbW90ZUNvbnRlbnQoKTsKLSAgICB2
b2lkIHN3YXBDb250ZW50QnVmZmVycygpOwotICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUoKTsKLSAg
ICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3Qg
V2ViS2l0OjpVcGRhdGVJbmZvJik7Ci0gICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxh
eWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOwotICAgIHZvaWQg
cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKTsKLSAgICB2b2lkIGNy
ZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3QsIGNvbnN0IFdlYktpdDo6U2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUmKTsKLSAgICB2b2lkIGRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZShpbnQ2NF90KTsKLSAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNz
YWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFy
Z3VtZW50RGVjb2RlciopOwotICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdEZvckxheWVy
KFdlYkxheWVySUQsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7
Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gY3Jl
YXRlTGF5ZXIoV2ViTGF5ZXJJRCk7Ci0KLSAgICBHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoV2Vi
TGF5ZXJJRCBpZCkgeyByZXR1cm4gKGlkID09IEludmFsaWRXZWJMYXllcklEKSA/IDAgOiBtX2xh
eWVycy5nZXQoaWQpOyB9Ci0gICAgR3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4g
bV9yb290TGF5ZXIuZ2V0KCk7IH0KLQotICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNsaWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0
aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSB7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
LCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRp
bmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQotCi0gICAgUnVuTG9vcDo6VGlt
ZXI8TGF5ZXJUcmVlSG9zdFByb3h5PiBtX2FuaW1hdGlvblRpbWVyOwotICAgIERyYXdpbmdBcmVh
UHJveHkqIG1fZHJhd2luZ0FyZWFQcm94eTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJMYXll
cklELCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7Ci0gICAgSW50UmVjdCBtX3Zp
c2libGVDb250ZW50c1JlY3Q7Ci0gICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOwotCi0gICAgTWVz
c2FnZVF1ZXVlPExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyPiBtX21lc3NhZ2VzVG9SZW5kZXJl
cjsKLSAgICB2b2lkIHB1c2hVcGRhdGVUb1F1ZXVlKFBhc3NPd25QdHI8TGF5ZXJUcmVlTWVzc2Fn
ZVRvUmVuZGVyZXI+KTsKLQotI2lmIFVTRShURVhUVVJFX01BUFBFUikKLSAgICBPd25QdHI8VGV4
dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShRVCkK
LSAgICB0eXBlZGVmIEhhc2hNYXA8SW50UG9pbnQsIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiA+IFRp
bGVkSW1hZ2U7Ci0gICAgVGV4dHVyZU1hcHBlck5vZGU6Ok5vZGVSZWN0TWFwIG1fbm9kZVZpc3Vh
bENvbnRlbnRzUmVjdE1hcDsKLSAgICBIYXNoTWFwPGludCwgaW50PiBtX3RpbGVUb05vZGVUaWxl
OwotICAgIGludCByZW1vdGVUaWxlSURUb05vZGVUaWxlSUQoaW50IHRpbGVJRCkgY29uc3Q7Ci0g
ICAgSGFzaE1hcDxpbnQ2NF90LCBUaWxlZEltYWdlPiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdl
czsKLQotICAgIHZvaWQgc2NoZWR1bGVXZWJWaWV3VXBkYXRlKCk7Ci0gICAgdm9pZCBzeW5jaHJv
bml6ZVZpZXdwb3J0KCk7Ci0gICAgdm9pZCBkZWxldGVMYXllcihXZWJMYXllcklEKTsKLSAgICB2
b2lkIHNldFJvb3RMYXllcklEKFdlYkxheWVySUQpOwotICAgIHZvaWQgc3luY0xheWVyUGFyYW1l
dGVycyhjb25zdCBXZWJMYXllckluZm8mKTsKLSAgICB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJ
RCwgaW50LCBmbG9hdCBzY2FsZSk7Ci0gICAgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGlu
dCk7Ci0gICAgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCwgY29uc3QgSW50UmVjdCYs
IGNvbnN0IEludFJlY3QmLCBjb25zdCBRSW1hZ2UmKTsKLSAgICB2b2lkIGNyZWF0ZUltYWdlKGlu
dDY0X3QsIGNvbnN0IFFJbWFnZSYpOwotICAgIHZvaWQgZGVzdHJveUltYWdlKGludDY0X3QpOwot
ICAgIHZvaWQgYXNzaWduSW1hZ2VUb0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBpbnQ2
NF90IGltYWdlSUQpOwotICAgIHZvaWQgZmx1c2hMYXllckNoYW5nZXMoKTsKLSAgICB2b2lkIGVu
c3VyZVJvb3RMYXllcigpOwotICAgIHZvaWQgZW5zdXJlTGF5ZXIoV2ViTGF5ZXJJRCk7Ci0KLSNl
bmRpZgotCi0gICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwotICAgIFZlY3Rv
cjxXZWJMYXllcklEPiBtX2xheWVyc1RvRGVsZXRlOwotCi0gICAgTGF5ZXJNYXAgbV9sYXllcnM7
Ci0gICAgV2ViTGF5ZXJJRCBtX3Jvb3RMYXllcklEOwotICAgIGludCBtX2lkOwotfTsKLQotfQot
Ci0jZW5kaWYgLy8gTGF5ZXJUcmVlSG9zdFByb3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiYzdhZmY4YTI1MWRjYjkwM2JlYzZmYjMxMjYxZDg5Yjg0ZTQ0
ZWJlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KKysrIC9k
ZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jCi0jICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSMKLSMgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
IyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotIyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSMgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSMgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSMgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0jCi0jICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotIyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotIwot
Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoVElMRURfQkFDS0lO
R19TVE9SRSkKLW1lc3NhZ2VzIC0+IExheWVyVHJlZUhvc3RQcm94eSB7Ci0gICAgU3luY0NvbXBv
c2l0aW5nTGF5ZXJTdGF0ZShXZWJLaXQ6OldlYkxheWVySW5mbyBsYXllckluZm8pCi0gICAgU2V0
Um9vdENvbXBvc2l0aW5nTGF5ZXIodWludDMyX3QgaWQpCi0gICAgRGVsZXRlQ29tcG9zaXRpbmdM
YXllcih1aW50MzJfdCBpZCkKLSAgICBDcmVhdGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJ
RCwgaW50IHRpbGVJRCwgV2ViS2l0OjpVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCi0gICAgVXBkYXRl
VGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQsIFdlYktpdDo6VXBkYXRl
SW5mbyB1cGRhdGVJbmZvKQotICAgIFJlbW92ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklE
LCBpbnQgdGlsZUlEKQotICAgIENyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qg
a2V5LCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkKLSAgICBEZXN0cm95
RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCi0gICAgRGlkUmVuZGVyRnJhbWUo
KQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmlu
ZGV4IDM3YzljMTM5NjNmNGZmZDYzNDdhMjZkNmI4ODQ0ZDA1OTUwNzYwY2QuLjA5NzJhZWQxOThh
NTEzZThmMDEwMjIxMzUzODczZWU4NzczM2M2MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCkBAIC03OSwxMCArNzksNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
V2luZG93RmVhdHVyZXMuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogCi0jaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0jaW5jbHVkZSAiTGF5ZXJU
cmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oUVQpCiAjaW5j
bHVkZSAiQXJndW1lbnRDb2RlcnNRdC5oIgogI2VuZGlmCkBAIC0xNDA5LDEzICsxNDA1LDYgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24q
IGNvbm5lY3Rpb24sIENvcmVJUEM6Ok0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIGlm
IChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzTGF5ZXJUcmVlSG9zdFByb3h5Pigp
KSB7Ci0gICAgICAgIG1fZHJhd2luZ0FyZWEtPmRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlN
ZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSNlbmRpZgotCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAobWVzc2Fn
ZUlELmlzPENvcmVJUEM6Ok1lc3NhZ2VDbGFzc1dlYkluc3BlY3RvclByb3h5PigpKSB7CiAgICAg
ICAgIGlmIChXZWJJbnNwZWN0b3JQcm94eSogaW5zcGVjdG9yID0gdGhpcy0+aW5zcGVjdG9yKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFBy
b3h5UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94
eVF0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGMwMzZlNGYzYWNmMzEzYWE3
NmRjNzQ4Mzk2N2Y2YzVkMjE0YjNhOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFBy
b3h5UXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTk0ICswLDAgQEAKLS8qCi0gICAgQ29weXJp
Z2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLSNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKLQotI2luY2x1ZGUgIkxheWVy
VHJlZUhvc3RNZXNzYWdlcy5oIgotI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKLSNpbmNsdWRlICJN
ZXNzYWdlSUQuaCIKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyR0wuaCIKLSNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCi0jaW5jbHVkZSAiV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgotI2luY2x1
ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1
ZGUgInRleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgInRleG1h
cC9UZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgi
Ci0jaW5jbHVkZSA8UURhdGVUaW1lPgotI2luY2x1ZGUgPGNhaXJvL09wZW5HTFNoaW1zLmg+Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlciB7
Ci1wdWJsaWM6Ci0gICAgZW51bSBUeXBlIHsKLSAgICAgICAgRGVsZXRlTGF5ZXIsCi0gICAgICAg
IENyZWF0ZVRpbGUsCi0gICAgICAgIFJlbW92ZVRpbGUsCi0gICAgICAgIFVwZGF0ZVRpbGUsCi0g
ICAgICAgIENyZWF0ZUltYWdlLAotICAgICAgICBEZXN0cm95SW1hZ2UsCi0gICAgICAgIFN5bmNM
YXllclBhcmFtZXRlcnMsCi0gICAgICAgIEZsdXNoTGF5ZXJDaGFuZ2VzLAotICAgICAgICBTZXRS
b290TGF5ZXIKLSAgICB9OwotICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOwotfTsK
LQotdGVtcGxhdGU8Y2xhc3MgTWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVy
OjpUeXBlIG1lc3NhZ2VUeXBlPgotY2xhc3MgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRo
RGF0YSA6IHB1YmxpYyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlciB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtZXNzYWdlVHlwZTsgfQotCi0gICAg
c3RhdGljIFBhc3NPd25QdHI8TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI+IGNyZWF0ZShjb25z
dCBNZXNzYWdlRGF0YSYgZGF0YSA9IE1lc3NhZ2VEYXRhKCkpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGEoZGF0YSkp
OwotICAgIH0KLQotICAgIGNvbnN0IE1lc3NhZ2VEYXRhJiBkYXRhKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2RhdGE7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIExheWVyVHJlZU1l
c3NhZ2VUb1JlbmRlcmVyV2l0aERhdGEoY29uc3QgTWVzc2FnZURhdGEmIGRhdGEpCi0gICAgICAg
IDogbV9kYXRhKGRhdGEpCi0gICAgewotICAgIH0KLQotICAgIE1lc3NhZ2VEYXRhIG1fZGF0YTsK
LX07Ci0KLQotbmFtZXNwYWNlIHsKLXN0cnVjdCBDcmVhdGVUaWxlTWVzc2FnZURhdGEgewotICAg
IFdlYkxheWVySUQgbGF5ZXJJRDsKLSAgICBpbnQgcmVtb3RlVGlsZUlEOwotICAgIGZsb2F0IHNj
YWxlOwotfTsKLQotc3RydWN0IFVwZGF0ZVRpbGVNZXNzYWdlRGF0YSB7Ci0gICAgV2ViTGF5ZXJJ
RCBsYXllcklEOwotICAgIGludCByZW1vdGVUaWxlSUQ7Ci0gICAgSW50UmVjdCBzb3VyY2VSZWN0
OwotICAgIEludFJlY3QgdGFyZ2V0UmVjdDsKLSAgICBRSW1hZ2UgaW1hZ2U7Ci19OwotCi1zdHJ1
Y3QgUmVtb3ZlVGlsZU1lc3NhZ2VEYXRhIHsKLSAgICBXZWJMYXllcklEIGxheWVySUQ7Ci0gICAg
aW50IHJlbW90ZVRpbGVJRDsKLX07Ci0KLXN0cnVjdCBDcmVhdGVJbWFnZU1lc3NhZ2VEYXRhIHsK
LSAgICBpbnQ2NF90IGltYWdlSUQ7Ci0gICAgUUltYWdlIGltYWdlOwotfTsKLQotc3RydWN0IERl
c3Ryb3lJbWFnZU1lc3NhZ2VEYXRhIHsKLSAgICBpbnQ2NF90IGltYWdlSUQ7Ci19OwotCi1zdHJ1
Y3QgU3luY0xheWVyUGFyYW1ldGVyc01lc3NhZ2VEYXRhIHsKLSAgICBXZWJMYXllckluZm8gbGF5
ZXJJbmZvOwotfTsKLQotc3RydWN0IEVtcHR5TWVzc2FnZURhdGEgeyB9Owotc3RydWN0IERlbGV0
ZUxheWVyTWVzc2FnZURhdGEgewotICAgIFdlYkxheWVySUQgbGF5ZXJJRDsKLX07Ci1zdHJ1Y3Qg
U2V0Um9vdExheWVyTWVzc2FnZURhdGEgewotICAgIFdlYkxheWVySUQgbGF5ZXJJRDsKLX07Ci0K
LWNsYXNzIENyZWF0ZVRpbGVNZXNzYWdlCi0gICAgICAgIDogcHVibGljIExheWVyVHJlZU1lc3Nh
Z2VUb1JlbmRlcmVyV2l0aERhdGE8Q3JlYXRlVGlsZU1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNz
YWdlVG9SZW5kZXJlcjo6Q3JlYXRlVGlsZT4geyB9OwotY2xhc3MgVXBkYXRlVGlsZU1lc3NhZ2UK
LSAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YTxVcGRh
dGVUaWxlTWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpVcGRhdGVUaWxl
PiB7IH07Ci1jbGFzcyBSZW1vdmVUaWxlTWVzc2FnZQotICAgICAgICA6IHB1YmxpYyBMYXllclRy
ZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhPFJlbW92ZVRpbGVNZXNzYWdlRGF0YSwgTGF5ZXJU
cmVlTWVzc2FnZVRvUmVuZGVyZXI6OlJlbW92ZVRpbGU+IHsgfTsKLWNsYXNzIENyZWF0ZUltYWdl
TWVzc2FnZQotICAgICAgICA6IHB1YmxpYyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhE
YXRhPENyZWF0ZUltYWdlTWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpD
cmVhdGVJbWFnZT4geyB9OwotY2xhc3MgRGVzdHJveUltYWdlTWVzc2FnZQotICAgICAgICA6IHB1
YmxpYyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhPERlc3Ryb3lJbWFnZU1lc3Nh
Z2VEYXRhLCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6RGVzdHJveUltYWdlPiB7IH07Ci1j
bGFzcyBGbHVzaExheWVyQ2hhbmdlc01lc3NhZ2UKLSAgICAgICAgOiBwdWJsaWMgTGF5ZXJUcmVl
TWVzc2FnZVRvUmVuZGVyZXJXaXRoRGF0YTxFbXB0eU1lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNz
YWdlVG9SZW5kZXJlcjo6Rmx1c2hMYXllckNoYW5nZXM+IHsgfTsKLWNsYXNzIFN5bmNMYXllclBh
cmFtZXRlcnNNZXNzYWdlCi0gICAgICAgIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRl
cmVyV2l0aERhdGE8U3luY0xheWVyUGFyYW1ldGVyc01lc3NhZ2VEYXRhLCBMYXllclRyZWVNZXNz
YWdlVG9SZW5kZXJlcjo6U3luY0xheWVyUGFyYW1ldGVycz4geyB9OwotY2xhc3MgRGVsZXRlTGF5
ZXJNZXNzYWdlCi0gICAgICAgIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0
aERhdGE8RGVsZXRlTGF5ZXJNZXNzYWdlRGF0YSwgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6
OkRlbGV0ZUxheWVyPiB7IH07Ci1jbGFzcyBTZXRSb290TGF5ZXJNZXNzYWdlCi0gICAgICAgIDog
cHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8U2V0Um9vdExheWVyTWVz
c2FnZURhdGEsIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpTZXRSb290TGF5ZXI+IHsgfTsK
LX0KLQotUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0
ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkKLXsKLSAgICBHcmFwaGljc0xheWVyKiBuZXdMYXll
ciA9IG5ldyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcih0aGlzKTsKLSAgICBUZXh0dXJlTWFw
cGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUobmV3TGF5ZXIpOwotICAgIG5vZGUt
PnNldElEKGxheWVySUQpOwotICAgIG5vZGUtPnNldFRpbGVPd25lcnNoaXAoVGV4dHVyZU1hcHBl
ck5vZGU6OkV4dGVybmFsbHlNYW5hZ2VkVGlsZXMpOwotICAgIHJldHVybiBhZG9wdFB0cihuZXdM
YXllcik7Ci19Ci0KLUxheWVyVHJlZUhvc3RQcm94eTo6TGF5ZXJUcmVlSG9zdFByb3h5KERyYXdp
bmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhUHJveHkpCi0gICAgOiBtX2FuaW1hdGlvblRpbWVyKFJ1
bkxvb3A6Om1haW4oKSwgdGhpcywgJkxheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVmlld3BvcnQp
Ci0gICAgLCBtX2RyYXdpbmdBcmVhUHJveHkoZHJhd2luZ0FyZWFQcm94eSkKLSAgICAsIG1fcm9v
dExheWVySUQoMCkKLXsKLX0KLQotTGF5ZXJUcmVlSG9zdFByb3h5Ojp+TGF5ZXJUcmVlSG9zdFBy
b3h5KCkKLXsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSByZWVudHJhbnQuCi12
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBpZiAoIW1f
dGV4dHVyZU1hcHBlcikKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdM
OjpjcmVhdGUoKTsKLQotICAgIHN5bmNSZW1vdGVDb250ZW50KCk7Ci0gICAgR3JhcGhpY3NMYXll
ciogY3VycmVudFJvb3RMYXllciA9IHJvb3RMYXllcigpOwotICAgIGlmICghY3VycmVudFJvb3RM
YXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0
b1RleHR1cmVNYXBwZXJOb2RlKGN1cnJlbnRSb290TGF5ZXIpOwotCi0gICAgaWYgKCFub2RlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBHTGludCB2aWV3cG9ydFs0XTsKLSAgICBnbEdldEludGVn
ZXJ2KEdMX1ZJRVdQT1JULCB2aWV3cG9ydCk7Ci0gICAgSW50UmVjdCB2aWV3cG9ydFJlY3Qodmll
d3BvcnRbMF0sIHZpZXdwb3J0WzFdLCB2aWV3cG9ydFsyXSwgdmlld3BvcnRbM10pOwotICAgIG1f
dGV4dHVyZU1hcHBlci0+c2V0Vmlld3BvcnRTaXplKEludFNpemUodmlld3BvcnRbMl0sIHZpZXdw
b3J0WzNdKSk7Ci0gICAgbm9kZS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0
KCkpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygpOwotICAgIG1fdGV4dHVy
ZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7Ci0KLSAgICBpZiAoY3VycmVudFJvb3RMYXllci0+b3Bh
Y2l0eSgpICE9IG9wYWNpdHkgfHwgY3VycmVudFJvb3RMYXllci0+dHJhbnNmb3JtKCkgIT0gbWF0
cml4KSB7Ci0gICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7Ci0g
ICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNldFRyYW5zZm9ybShtYXRyaXgpOwotICAgICAgICBj
dXJyZW50Um9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsK
LSAgICB9Ci0KLSAgICBUZXh0dXJlTWFwcGVyTm9kZTo6Tm9kZVJlY3RNYXAgbm9kZVZpc3VhbENv
bnRlbnRzUmVjdE1hcDsKLSAgICBpZiAobm9kZS0+Y29sbGVjdFZpc2libGVDb250ZW50c1JlY3Rz
KG5vZGVWaXN1YWxDb250ZW50c1JlY3RNYXAsIHZpZXdwb3J0UmVjdCkpIHsKLSAgICAgICAgVGV4
dHVyZU1hcHBlck5vZGU6Ok5vZGVSZWN0TWFwOjppdGVyYXRvciBlbmRJdGVyYXRvciA9IG5vZGVW
aXN1YWxDb250ZW50c1JlY3RNYXAuZW5kKCk7Ci0gICAgICAgIGZvciAoVGV4dHVyZU1hcHBlck5v
ZGU6Ok5vZGVSZWN0TWFwOjppdGVyYXRvciBpdCA9IG5vZGVWaXN1YWxDb250ZW50c1JlY3RNYXAu
YmVnaW4oKTsgaXQgIT0gZW5kSXRlcmF0b3I7ICsraXQpIHsKLSAgICAgICAgICAgIFdlYkxheWVy
SUQgbGF5ZXJJRCA9IGl0LT5maXJzdC0+aWQoKTsKLSAgICAgICAgICAgIC8vIGF2b2lkIHVwZGF0
aW5nIG5vbi1zeW5jZWQgcm9vdCBsYXllcgotICAgICAgICAgICAgaWYgKCFsYXllcklEKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9
IEludFJlY3QoaXQtPnNlY29uZCk7Ci0gICAgICAgICAgICBzZXRWaXNpYmxlQ29udGVudHNSZWN0
Rm9yTGF5ZXIobGF5ZXJJRCwgdmlzaWJsZVJlY3QpOwotICAgICAgICB9Ci0gICAgfQotICAgIG5v
ZGUtPnBhaW50KCk7Ci0KLSAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7Ci0KLSAg
ICBpZiAobm9kZS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKLSAg
ICAgICAgdXBkYXRlVmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVw
ZGF0ZVZpZXdwb3J0KCkKLXsKLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnVwZGF0ZVZpZXdwb3J0
KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0
Rm9yTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklELCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAg
IG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Okxh
eWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50UmVjdEZvckxheWVyKGxheWVySUQsIHJlY3Qp
LCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOwotfQotCi1pbnQgTGF5ZXJU
cmVlSG9zdFByb3h5OjpyZW1vdGVUaWxlSURUb05vZGVUaWxlSUQoaW50IHRpbGVJRCkgY29uc3QK
LXsKLSAgICBIYXNoTWFwPGludCwgaW50Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVUb05v
ZGVUaWxlLmZpbmQodGlsZUlEKTsKLSAgICBpZiAoaXQgPT0gbV90aWxlVG9Ob2RlVGlsZS5lbmQo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7Ci19Ci0KLXZvaWQg
TGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKGNvbnN0IFdlYkxheWVySW5m
byYgbGF5ZXJJbmZvKQotewotICAgIFdlYkxheWVySUQgaWQgPSBsYXllckluZm8uaWQ7Ci0gICAg
ZW5zdXJlTGF5ZXIoaWQpOwotICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZp
bmQoaWQpOwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnNlY29uZDsKLQotICAgIGxh
eWVyLT5zZXROYW1lKGxheWVySW5mby5uYW1lKTsKLQotICAgIGxheWVyLT5zZXRSZXBsaWNhdGVk
QnlMYXllcihsYXllckJ5SUQobGF5ZXJJbmZvLnJlcGxpY2EpKTsKLSAgICBsYXllci0+c2V0TWFz
a0xheWVyKGxheWVyQnlJRChsYXllckluZm8ubWFzaykpOwotCi0gICAgbGF5ZXItPnNldFBvc2l0
aW9uKGxheWVySW5mby5wb3MpOwotICAgIGxheWVyLT5zZXRTaXplKGxheWVySW5mby5zaXplKTsK
LSAgICBsYXllci0+c2V0VHJhbnNmb3JtKGxheWVySW5mby50cmFuc2Zvcm0pOwotICAgIGxheWVy
LT5zZXRBbmNob3JQb2ludChsYXllckluZm8uYW5jaG9yUG9pbnQpOwotICAgIGxheWVyLT5zZXRD
aGlsZHJlblRyYW5zZm9ybShsYXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0pOwotICAgIGxheWVy
LT5zZXRCYWNrZmFjZVZpc2liaWxpdHkobGF5ZXJJbmZvLmJhY2tmYWNlVmlzaWJsZSk7Ci0gICAg
bGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKGxheWVySW5mby5jb250ZW50c09wYXF1ZSk7Ci0gICAg
bGF5ZXItPnNldENvbnRlbnRzUmVjdChsYXllckluZm8uY29udGVudHNSZWN0KTsKLSAgICBsYXll
ci0+c2V0RHJhd3NDb250ZW50KGxheWVySW5mby5kcmF3c0NvbnRlbnQpOwotCi0gICAgaWYgKGxh
eWVySW5mby5pbWFnZUlzVXBkYXRlZCkKLSAgICAgICAgYXNzaWduSW1hZ2VUb0xheWVyKGxheWVy
LCBsYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCk7Ci0KLSAgICAvLyBOZXZlciBtYWtlIHRo
ZSByb290IGxheWVyIGNsaXAuCi0gICAgbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJJbmZv
LmlzUm9vdExheWVyID8gZmFsc2UgOiBsYXllckluZm8ubWFza3NUb0JvdW5kcyk7Ci0gICAgbGF5
ZXItPnNldE9wYWNpdHkobGF5ZXJJbmZvLm9wYWNpdHkpOwotICAgIGxheWVyLT5zZXRQcmVzZXJ2
ZXMzRChsYXllckluZm8ucHJlc2VydmVzM0QpOwotICAgIFZlY3RvcjxHcmFwaGljc0xheWVyKj4g
Y2hpbGRyZW47Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW5mby5jaGlsZHJl
bi5zaXplKCk7ICsraSkgewotICAgICAgICBXZWJMYXllcklEIGNoaWxkSUQgPSBsYXllckluZm8u
Y2hpbGRyZW5baV07Ci0gICAgICAgIEdyYXBoaWNzTGF5ZXIqIGNoaWxkID0gbGF5ZXJCeUlEKGNo
aWxkSUQpOwotICAgICAgICBpZiAoIWNoaWxkKSB7Ci0gICAgICAgICAgICBjaGlsZCA9IGNyZWF0
ZUxheWVyKGNoaWxkSUQpLmxlYWtQdHIoKTsKLSAgICAgICAgICAgIG1fbGF5ZXJzLmFkZChjaGls
ZElELCBjaGlsZCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsK
LSAgICB9Ci0gICAgbGF5ZXItPnNldENoaWxkcmVuKGNoaWxkcmVuKTsKLQotICAgIGlmIChsYXll
ckluZm8uaXNSb290TGF5ZXIgJiYgbV9yb290TGF5ZXJJRCAhPSBpZCkKLSAgICAgICAgc2V0Um9v
dExheWVySUQoaWQpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVsZXRlTGF5ZXIo
V2ViTGF5ZXJJRCBsYXllcklEKQotewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJC
eUlEKGxheWVySUQpOwotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGxh
eWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgbV9sYXllcnMucmVtb3ZlKGxheWVySUQpOwot
ICAgIGRlbGV0ZSBsYXllcjsKLX0KLQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZW5zdXJl
TGF5ZXIoV2ViTGF5ZXJJRCBpZCkKLXsKLSAgICAvLyBXZSBoYXZlIHRvIGxlYWsgdGhlIG5ldyBs
YXllcidzIHBvaW50ZXIgYW5kIG1hbmFnZSBpdCBvdXJzZWx2ZXMsCi0gICAgLy8gYmVjYXVzZSBP
d25QdHIgaXMgbm90IGNvcHlhYmxlLgotICAgIGlmIChtX2xheWVycy5maW5kKGlkKSA9PSBtX2xh
eWVycy5lbmQoKSkKLSAgICAgICAgbV9sYXllcnMuYWRkKGlkLCBjcmVhdGVMYXllcihpZCkubGVh
a1B0cigpKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFJvb3RMYXllcklEKFdl
YkxheWVySUQgbGF5ZXJJRCkKLXsKLSAgICBpZiAobGF5ZXJJRCA9PSBtX3Jvb3RMYXllcklEKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jvb3RMYXllcklEID0gbGF5ZXJJRDsKLQotICAgIG1f
cm9vdExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOwotCi0gICAgaWYgKCFsYXllcklEKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXll
cklEKTsKLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jvb3RMYXll
ci0+YWRkQ2hpbGQobGF5ZXIpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRl
VGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGZsb2F0IHNjYWxlKQotewotICAg
IGVuc3VyZUxheWVyKGxheWVySUQpOwotICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9U
ZXh0dXJlTWFwcGVyTm9kZShsYXllckJ5SUQobGF5ZXJJRCkpOwotCi0gICAgaW50IG5vZGVUaWxl
SUQgPSBub2RlLT5jcmVhdGVDb250ZW50c1RpbGUoc2NhbGUpOwotICAgIG1fdGlsZVRvTm9kZVRp
bGUuYWRkKHRpbGVJRCwgbm9kZVRpbGVJRCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5
OjpyZW1vdmVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKLXsKLSAgICBUZXh0
dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUobGF5ZXJCeUlEKGxheWVy
SUQpKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCBub2RlVGls
ZUlEID0gcmVtb3RlVGlsZUlEVG9Ob2RlVGlsZUlEKHRpbGVJRCk7Ci0gICAgaWYgKCFub2RlVGls
ZUlEKQotICAgICAgICByZXR1cm47Ci0KLSAgICBub2RlLT5yZW1vdmVDb250ZW50c1RpbGUobm9k
ZVRpbGVJRCk7Ci0gICAgbV90aWxlVG9Ob2RlVGlsZS5yZW1vdmUodGlsZUlEKTsKLX0KLQotdm9p
ZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQg
dGlsZUlELCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBRSW1hZ2UmIGltYWdlKQotewotICAgIGVuc3VyZUxheWVyKGxheWVySUQpOwot
ICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXllckJ5
SUQobGF5ZXJJRCkpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50
IG5vZGVUaWxlSUQgPSByZW1vdGVUaWxlSURUb05vZGVUaWxlSUQodGlsZUlEKTsKLSAgICBpZiAo
IW5vZGVUaWxlSUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFFJbWFnZSBpbWFnZVJlZihpbWFn
ZSk7Ci0gICAgbm9kZS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwot
ICAgIG5vZGUtPnNldENvbnRlbnRzVGlsZUJhY2tCdWZmZXIobm9kZVRpbGVJRCwgc291cmNlUmVj
dCwgdGFyZ2V0UmVjdCwgaW1hZ2VSZWYuYml0cygpLCBCaXRtYXBUZXh0dXJlOjpCR1JBRm9ybWF0
KTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUltYWdlKGludDY0X3QgaW1h
Z2VJRCwgY29uc3QgUUltYWdlJiBpbWFnZSkKLXsKLSAgICBUaWxlZEltYWdlIHRpbGVkSW1hZ2U7
Ci0gICAgc3RhdGljIGNvbnN0IGludCBUaWxlRGltZW5zaW9uID0gMTAyNDsKLSAgICBib29sIGlt
YWdlSGFzQWxwaGEgPSBpbWFnZS5oYXNBbHBoYUNoYW5uZWwoKTsKLSAgICBJbnRSZWN0IGltYWdl
UmVjdCgwLCAwLCBpbWFnZS53aWR0aCgpLCBpbWFnZS5oZWlnaHQoKSk7Ci0gICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBpbWFnZS5oZWlnaHQoKTsgeSArPSBUaWxlRGltZW5zaW9uKSB7Ci0gICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgaW1hZ2Uud2lkdGgoKTsgeCArPSBUaWxlRGltZW5zaW9uKSB7
Ci0gICAgICAgICAgICBRSW1hZ2Ugc3ViSW1hZ2U7Ci0gICAgICAgICAgICBJbnRSZWN0IHJlY3Qo
eCwgeSwgVGlsZURpbWVuc2lvbiwgVGlsZURpbWVuc2lvbik7Ci0gICAgICAgICAgICByZWN0Lmlu
dGVyc2VjdChpbWFnZVJlY3QpOwotICAgICAgICAgICAgaWYgKFFTaXplKHJlY3Quc2l6ZSgpKSA9
PSBpbWFnZS5zaXplKCkpCi0gICAgICAgICAgICAgICAgc3ViSW1hZ2UgPSBpbWFnZTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdWJJbWFnZSA9IGltYWdlLmNvcHkocmVjdCk7
Ci0gICAgICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IG1fdGV4dHVyZU1h
cHBlci0+Y3JlYXRlVGV4dHVyZSgpOwotICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXQocmVjdC5z
aXplKCksICFpbWFnZUhhc0FscGhhKTsKLSAgICAgICAgICAgIHRleHR1cmUtPnVwZGF0ZUNvbnRl
bnRzKGltYWdlSGFzQWxwaGEgPyBCaXRtYXBUZXh0dXJlOjpCR1JBRm9ybWF0IDogQml0bWFwVGV4
dHVyZTo6QkdSRm9ybWF0LCBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHJlY3Quc2l6ZSgpKSwg
c3ViSW1hZ2UuYml0cygpKTsKLSAgICAgICAgICAgIHRpbGVkSW1hZ2UuYWRkKHJlY3QubG9jYXRp
b24oKSwgdGV4dHVyZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2RpcmVjdGx5Q29tcG9z
aXRlZEltYWdlcy5yZW1vdmUoaW1hZ2VJRCk7Ci0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZXMuYWRkKGltYWdlSUQsIHRpbGVkSW1hZ2UpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6ZGVzdHJveUltYWdlKGludDY0X3QgaW1hZ2VJRCkKLXsKLSAgICBtX2RpcmVjdGx5Q29tcG9z
aXRlZEltYWdlcy5yZW1vdmUoaW1hZ2VJRCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5
Ojphc3NpZ25JbWFnZVRvTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIsIGludDY0X3QgaW1hZ2VJ
RCkKLXsKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUo
bGF5ZXIpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFpbWFn
ZUlEKSB7Ci0gICAgICAgIG5vZGUtPmNsZWFyQWxsRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VUaWxl
cygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRmxvYXRTaXplIHNpemUobGF5ZXIt
PnNpemUoKSk7Ci0gICAgRmxvYXRSZWN0IGNvbnRlbnRzUmVjdChsYXllci0+Y29udGVudHNSZWN0
KCkpOwotICAgIGZsb2F0IGhvcml6b250YWxGYWN0b3IgPSBjb250ZW50c1JlY3Qud2lkdGgoKSAv
IHNpemUud2lkdGgoKTsKLSAgICBmbG9hdCB2ZXJ0aWNhbEZhY3RvciA9IGNvbnRlbnRzUmVjdC5o
ZWlnaHQoKSAvIHNpemUuaGVpZ2h0KCk7Ci0gICAgSGFzaE1hcDxpbnQ2NF90LCBUaWxlZEltYWdl
Pjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5maW5kKGltYWdlSUQp
OwotICAgIGlmIChpdCA9PSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgVGlsZWRJbWFnZTo6aXRlcmF0b3IgZW5kVGlsZUl0ZXJhdG9yID0g
aXQtPnNlY29uZC5lbmQoKTsKLSAgICBmb3IgKFRpbGVkSW1hZ2U6Oml0ZXJhdG9yIHRpbGVJdCA9
IGl0LT5zZWNvbmQuYmVnaW4oKTsgdGlsZUl0ICE9IGVuZFRpbGVJdGVyYXRvcjsgKyt0aWxlSXQp
IHsKLSAgICAgICAgRmxvYXRSZWN0IHNvdXJjZVJlY3QoRmxvYXRQb2ludCh0aWxlSXQtPmZpcnN0
KSwgRmxvYXRTaXplKHRpbGVJdC0+c2Vjb25kLT5zaXplKCkpKTsKLSAgICAgICAgRmxvYXRSZWN0
IHRhcmdldFJlY3Qoc291cmNlUmVjdC54KCkgKiBob3Jpem9udGFsRmFjdG9yICsgY29udGVudHNS
ZWN0LngoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUmVjdC55KCkgKiB2
ZXJ0aWNhbEZhY3RvciArIGNvbnRlbnRzUmVjdC55KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNvdXJjZVJlY3Qud2lkdGgoKSAqIGhvcml6b250YWxGYWN0b3IsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNvdXJjZVJlY3QuaGVpZ2h0KCkgKiB2ZXJ0aWNhbEZhY3Rvcik7
Ci0gICAgICAgIGludCBuZXdUaWxlSUQgPSBub2RlLT5jcmVhdGVDb250ZW50c1RpbGUoMS4wKTsK
LSAgICAgICAgbm9kZS0+c2V0VGlsZUJhY2tCdWZmZXJUZXh0dXJlRm9yRGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2UobmV3VGlsZUlELCBJbnRSZWN0KHNvdXJjZVJlY3QpLCB0YXJnZXRSZWN0LCB0aWxl
SXQtPnNlY29uZC5nZXQoKSk7Ci0gICAgfQotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6
Zmx1c2hMYXllckNoYW5nZXMoKQotewotICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdT
dGF0ZShGbG9hdFJlY3QoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjplbnN1cmVS
b290TGF5ZXIoKQotewotICAgIGlmIChtX3Jvb3RMYXllcikKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fcm9vdExheWVyID0gY3JlYXRlTGF5ZXIoSW52YWxpZFdlYkxheWVySUQpOwotICAgIG1fcm9v
dExheWVyLT5zZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0RHJh
d3NDb250ZW50KGZhbHNlKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQ
b2ludDNEKDAsIDAsIDApKTsKLQotICAgIC8vIFRoZSByb290IGxheWVyIHNob3VsZCBub3QgaGF2
ZSB6ZXJvIHNpemUsIG9yIGl0IHdvdWxkIGJlIG9wdGltaXplZCBvdXQuCi0gICAgbV9yb290TGF5
ZXItPnNldFNpemUoRmxvYXRTaXplKDEuMCwgMS4wKSk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyID0g
VGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKLSAgICB0b1RleHR1cmVNYXBwZXJOb2RlKG1fcm9v
dExheWVyLmdldCgpKS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwot
fQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c3luY1JlbW90ZUNvbnRlbnQoKQotewotICAg
IC8vIFdlIGVucXVldWUgbWVzc2FnZXMgYW5kIGV4ZWN1dGUgdGhlbSBkdXJpbmcgcGFpbnQsIGFz
IHRoZXkgcmVxdWlyZSBhbiBhY3RpdmUgR0wgY29udGV4dC4KLSAgICBlbnN1cmVSb290TGF5ZXIo
KTsKLQotICAgIHdoaWxlIChPd25QdHI8TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI+IG5leHRN
ZXNzYWdlID0gbV9tZXNzYWdlc1RvUmVuZGVyZXIudHJ5R2V0TWVzc2FnZSgpKSB7Ci0gICAgICAg
IHN3aXRjaCAobmV4dE1lc3NhZ2UtPnR5cGUoKSkgewotICAgICAgICBjYXNlIExheWVyVHJlZU1l
c3NhZ2VUb1JlbmRlcmVyOjpTZXRSb290TGF5ZXI6IHsKLSAgICAgICAgICAgIGNvbnN0IFNldFJv
b3RMYXllck1lc3NhZ2VEYXRhJiBkYXRhID0gc3RhdGljX2Nhc3Q8U2V0Um9vdExheWVyTWVzc2Fn
ZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgpOwotICAgICAgICAgICAgc2V0Um9vdExheWVy
SUQoZGF0YS5sYXllcklEKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAg
ICAgY2FzZSBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6RGVsZXRlTGF5ZXI6IHsKLSAgICAg
ICAgICAgIGNvbnN0IERlbGV0ZUxheWVyTWVzc2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxE
ZWxldGVMYXllck1lc3NhZ2UqPihuZXh0TWVzc2FnZS5nZXQoKSktPmRhdGEoKTsKLSAgICAgICAg
ICAgIGRlbGV0ZUxheWVyKGRhdGEubGF5ZXJJRCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotCi0gICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI6OlN5bmNMYXll
clBhcmFtZXRlcnM6IHsKLSAgICAgICAgICAgIGNvbnN0IFN5bmNMYXllclBhcmFtZXRlcnNNZXNz
YWdlRGF0YSYgZGF0YSA9IHN0YXRpY19jYXN0PFN5bmNMYXllclBhcmFtZXRlcnNNZXNzYWdlKj4o
bmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRhKCk7Ci0gICAgICAgICAgICBzeW5jTGF5ZXJQYXJhbWV0
ZXJzKGRhdGEubGF5ZXJJbmZvKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgY2FzZSBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6Q3JlYXRlVGlsZTogewotICAg
ICAgICAgICAgY29uc3QgQ3JlYXRlVGlsZU1lc3NhZ2VEYXRhJiBkYXRhID0gc3RhdGljX2Nhc3Q8
Q3JlYXRlVGlsZU1lc3NhZ2UqPihuZXh0TWVzc2FnZS5nZXQoKSktPmRhdGEoKTsKLSAgICAgICAg
ICAgIGNyZWF0ZVRpbGUoZGF0YS5sYXllcklELCBkYXRhLnJlbW90ZVRpbGVJRCwgZGF0YS5zY2Fs
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTGF5ZXJU
cmVlTWVzc2FnZVRvUmVuZGVyZXI6OlJlbW92ZVRpbGU6IHsKLSAgICAgICAgICAgIGNvbnN0IFJl
bW92ZVRpbGVNZXNzYWdlRGF0YSYgZGF0YSA9IHN0YXRpY19jYXN0PFJlbW92ZVRpbGVNZXNzYWdl
Kj4obmV4dE1lc3NhZ2UuZ2V0KCkpLT5kYXRhKCk7Ci0gICAgICAgICAgICByZW1vdmVUaWxlKGRh
dGEubGF5ZXJJRCwgZGF0YS5yZW1vdGVUaWxlSUQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLQotICAgICAgICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpVcGRhdGVU
aWxlOiB7Ci0gICAgICAgICAgICBjb25zdCBVcGRhdGVUaWxlTWVzc2FnZURhdGEmIGRhdGEgPSBz
dGF0aWNfY2FzdDxVcGRhdGVUaWxlTWVzc2FnZSo+KG5leHRNZXNzYWdlLmdldCgpKS0+ZGF0YSgp
OwotICAgICAgICAgICAgdXBkYXRlVGlsZShkYXRhLmxheWVySUQsIGRhdGEucmVtb3RlVGlsZUlE
LCBkYXRhLnNvdXJjZVJlY3QsIGRhdGEudGFyZ2V0UmVjdCwgZGF0YS5pbWFnZSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTGF5ZXJUcmVlTWVzc2FnZVRv
UmVuZGVyZXI6OkNyZWF0ZUltYWdlOiB7Ci0gICAgICAgICAgICBjb25zdCBDcmVhdGVJbWFnZU1l
c3NhZ2VEYXRhJiBkYXRhID0gc3RhdGljX2Nhc3Q8Q3JlYXRlSW1hZ2VNZXNzYWdlKj4obmV4dE1l
c3NhZ2UuZ2V0KCkpLT5kYXRhKCk7Ci0gICAgICAgICAgICBjcmVhdGVJbWFnZShkYXRhLmltYWdl
SUQsIGRhdGEuaW1hZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpEZXN0cm95SW1hZ2U6IHsKLSAgICAg
ICAgICAgIGNvbnN0IENyZWF0ZUltYWdlTWVzc2FnZURhdGEmIGRhdGEgPSBzdGF0aWNfY2FzdDxD
cmVhdGVJbWFnZU1lc3NhZ2UqPihuZXh0TWVzc2FnZS5nZXQoKSktPmRhdGEoKTsKLSAgICAgICAg
ICAgIGRlc3Ryb3lJbWFnZShkYXRhLmltYWdlSUQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLQotICAgICAgICBjYXNlIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpGbHVzaExh
eWVyQ2hhbmdlczoKLSAgICAgICAgICAgIGZsdXNoTGF5ZXJDaGFuZ2VzKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OnB1c2hVcGRhdGVUb1F1ZXVlKFBhc3NPd25QdHI8TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI+
IG1lc3NhZ2UpCi17Ci0gICAgbV9tZXNzYWdlc1RvUmVuZGVyZXIuYXBwZW5kKG1lc3NhZ2UpOwot
ICAgIHVwZGF0ZVZpZXdwb3J0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVh
dGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBk
YXRlSW5mbyYgdXBkYXRlSW5mbykKLXsKLSAgICBDcmVhdGVUaWxlTWVzc2FnZURhdGEgZGF0YTsK
LSAgICBkYXRhLmxheWVySUQgPSBsYXllcklEOwotICAgIGRhdGEucmVtb3RlVGlsZUlEID0gdGls
ZUlEOwotICAgIGRhdGEuc2NhbGUgPSB1cGRhdGVJbmZvLnVwZGF0ZVNjYWxlRmFjdG9yOwotICAg
IHB1c2hVcGRhdGVUb1F1ZXVlKENyZWF0ZVRpbGVNZXNzYWdlOjpjcmVhdGUoZGF0YSkpOwotICAg
IHVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8pOwotfQotCi12
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBp
bnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0gICAg
VXBkYXRlVGlsZU1lc3NhZ2VEYXRhIGRhdGE7Ci0gICAgZGF0YS5sYXllcklEID0gbGF5ZXJJRDsK
LSAgICBkYXRhLnJlbW90ZVRpbGVJRCA9IHRpbGVJRDsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZSh1cGRhdGVJbmZvLmJpdG1hcEhh
bmRsZSk7Ci0gICAgZGF0YS5pbWFnZSA9IGJpdG1hcC0+Y3JlYXRlUUltYWdlKCkuY29weSgpOwot
ICAgIGRhdGEuc291cmNlUmVjdCA9IEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgdXBkYXRlSW5m
by51cGRhdGVSZWN0Qm91bmRzLnNpemUoKSk7Ci0gICAgZGF0YS50YXJnZXRSZWN0ID0gdXBkYXRl
SW5mby51cGRhdGVSZWN0Qm91bmRzOwotICAgIHB1c2hVcGRhdGVUb1F1ZXVlKFVwZGF0ZVRpbGVN
ZXNzYWdlOjpjcmVhdGUoZGF0YSkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cmVt
b3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKQotewotICAgIFJlbW92ZVRp
bGVNZXNzYWdlRGF0YSBkYXRhOwotICAgIGRhdGEubGF5ZXJJRCA9IGxheWVySUQ7Ci0gICAgZGF0
YS5yZW1vdGVUaWxlSUQgPSB0aWxlSUQ7Ci0gICAgcHVzaFVwZGF0ZVRvUXVldWUoUmVtb3ZlVGls
ZU1lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7Ci19Ci0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKLXsKLSAgICBEZWxldGVMYXll
ck1lc3NhZ2VEYXRhIGRhdGE7Ci0gICAgZGF0YS5sYXllcklEID0gaWQ7Ci0gICAgcHVzaFVwZGF0
ZVRvUXVldWUoRGVsZXRlTGF5ZXJNZXNzYWdlOjpjcmVhdGUoZGF0YSkpOwotfQotCi12b2lkIExh
eWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkK
LXsKLSAgICBTZXRSb290TGF5ZXJNZXNzYWdlRGF0YSBkYXRhOwotICAgIGRhdGEubGF5ZXJJRCA9
IGlkOwotICAgIHB1c2hVcGRhdGVUb1F1ZXVlKFNldFJvb3RMYXllck1lc3NhZ2U6OmNyZWF0ZShk
YXRhKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jQ29tcG9zaXRpbmdMYXll
clN0YXRlKGNvbnN0IFdlYkxheWVySW5mbyYgaW5mbykKLXsKLSAgICBTeW5jTGF5ZXJQYXJhbWV0
ZXJzTWVzc2FnZURhdGEgZGF0YTsKLSAgICBkYXRhLmxheWVySW5mbyA9IGluZm87Ci0gICAgcHVz
aFVwZGF0ZVRvUXVldWUoU3luY0xheWVyUGFyYW1ldGVyc01lc3NhZ2U6OmNyZWF0ZShkYXRhKSk7
Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRSZW5kZXJGcmFtZSgpCi17Ci0gICAg
bV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5
ZXJUcmVlSG9zdDo6UmVuZGVyTmV4dEZyYW1lKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgp
LT5wYWdlSUQoKSk7Ci0gICAgcHVzaFVwZGF0ZVRvUXVldWUoRmx1c2hMYXllckNoYW5nZXNNZXNz
YWdlOjpjcmVhdGUoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVEaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSwgY29uc3QgV2ViS2l0OjpTaGFyZWFibGVC
aXRtYXA6OkhhbmRsZSYgaGFuZGxlKQotewotICAgIENyZWF0ZUltYWdlTWVzc2FnZURhdGEgZGF0
YTsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6
OmNyZWF0ZShoYW5kbGUpOwotICAgIGRhdGEuaW1hZ2VJRCA9IGtleTsKLSAgICBkYXRhLmltYWdl
ID0gYml0bWFwLT5jcmVhdGVRSW1hZ2UoKS5jb3B5KCk7Ci0gICAgcHVzaFVwZGF0ZVRvUXVldWUo
Q3JlYXRlSW1hZ2VNZXNzYWdlOjpjcmVhdGUoZGF0YSkpOwotfQotCi12b2lkIExheWVyVHJlZUhv
c3RQcm94eTo6ZGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQotewot
ICAgIERlc3Ryb3lJbWFnZU1lc3NhZ2VEYXRhIGRhdGE7Ci0gICAgZGF0YS5pbWFnZUlEID0ga2V5
OwotICAgIHB1c2hVcGRhdGVUb1F1ZXVlKERlc3Ryb3lJbWFnZU1lc3NhZ2U6OmNyZWF0ZShkYXRh
KSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudFJlY3RU
cmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCi17Ci0g
ICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6
TGF5ZXJUcmVlSG9zdDo6U2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFq
ZWN0b3J5VmVjdG9yKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKLX0K
LQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3RBbmRTY2Fs
ZShjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSkKLXsKLSAgICBtX3Zpc2libGVDb250
ZW50c1JlY3QgPSByZWN0OwotICAgIG1fY29udGVudHNTY2FsZSA9IHNjYWxlOwotICAgIG1fZHJh
d2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJl
ZUhvc3Q6OlNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKHJlY3QsIHNjYWxlKSwgbV9kcmF3
aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKLX0KLQotfQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
cHJvCmluZGV4IGU1OWVmOWY3MDFjNjlhYjBmNzllMDc3NjYwM2E4MTM2YzFhZTliNjIuLmNmZDI2
ZWYzMmZmYmUxYjY0ZTMxYTBjOTI1N2RhYWI4MTNlMTNkOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYktpdDIucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCkBAIC0y
OSw4ICsyOSw2IEBAIFdFQktJVDFfU09VUkNFU19TSEFSRURfV0lUSF9XRUJLSVQyID0gXAogV0VC
S0lUMl9HRU5FUkFURURfSEVBREVSUyA9IFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJD
RVNfRElSL0F1dGhlbnRpY2F0aW9uTWFuYWdlck1lc3NhZ2VzLmggXAogICAgICQkV0VCS0lUMl9H
RU5FUkFURURfU09VUkNFU19ESVIvRG93bmxvYWRQcm94eU1lc3NhZ2VzLmggXAotICAgICQkV0VC
S0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmggXAotICAg
ICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2Fn
ZXMuaCBcCiAgICAgJCRXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUi9OUE9iamVjdE1lc3Nh
Z2VSZWNlaXZlck1lc3NhZ2VzLmggXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19E
SVIvUGx1Z2luQ29udHJvbGxlclByb3h5TWVzc2FnZXMuaCBcCiAgICAgJCRXRUJLSVQyX0dFTkVS
QVRFRF9TT1VSQ0VTX0RJUi9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggXApAQCAt
NjksOCArNjcsNiBAQCBXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTID0gXAogICAgICQkV0VCS0lU
Ml9HRU5FUkFURURfU09VUkNFU19ESVIvRG93bmxvYWRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAg
XAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvRHJhd2luZ0FyZWFNZXNzYWdl
UmVjZWl2ZXIuY3BwIFwKICAgICAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0RyYXdp
bmdBcmVhUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKLSAgICAkJFdFQktJVDJfR0VORVJBVEVE
X1NPVVJDRVNfRElSL0xheWVyVHJlZUhvc3RNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKLSAgICAkJFdF
QktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSL0xheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHAgXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvTlBPYmplY3RN
ZXNzYWdlUmVjZWl2ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKICAgICAkJFdFQktJVDJfR0VORVJB
VEVEX1NPVVJDRVNfRElSL1BsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAg
XAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIvUGx1Z2luUHJvY2Vzc01lc3Nh
Z2VSZWNlaXZlci5jcHAgXApAQCAtMTY2LDcgKzE2Miw2IEBAIEhFQURFUlMgKz0gXAogICAgIFNo
YXJlZC9XZWJHcmFwaGljc0NvbnRleHQuaCBcCiAgICAgU2hhcmVkL1dlYkhpdFRlc3RSZXN1bHQu
aCBcCiAgICAgU2hhcmVkL1dlYkltYWdlLmggXAotICAgIFNoYXJlZC9XZWJMYXllclRyZWVJbmZv
LmggXAogICAgIFNoYXJlZC9XZWJOYXZpZ2F0aW9uRGF0YVN0b3JlLmggXAogICAgIFNoYXJlZC9X
ZWJOdW1iZXIuaCBcCiAgICAgU2hhcmVkL1dlYk9wZW5QYW5lbFBhcmFtZXRlcnMuaCBcCkBAIC0z
MjMsNyArMzE4LDYgQEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJFcnJvcnMuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0
aW9uQ2xpZW50LmggXAotICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NM
YXllci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVu
dC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckZyb250ZW5k
Q2xpZW50LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJh
dGVnaWVzLmggXApAQCAtNDA3LDcgKzQwMSw2IEBAIFNPVVJDRVMgKz0gXAogICAgIFNoYXJlZC9X
ZWJIaXRUZXN0UmVzdWx0LmNwcCBcCiAgICAgU2hhcmVkL1dlYktleWJvYXJkRXZlbnQuY3BwIFwK
ICAgICBTaGFyZWQvV2ViSW1hZ2UuY3BwIFwKLSAgICBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5j
cHAgXAogICAgIFNoYXJlZC9XZWJNb3VzZUV2ZW50LmNwcCBcCiAgICAgU2hhcmVkL1dlYk9wZW5Q
YW5lbFBhcmFtZXRlcnMuY3BwIFwKICAgICBTaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVy
cy5jcHAgXApAQCAtNDk1LDcgKzQ4OCw2IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvV2ViVUlDbGllbnQuY3Bw
IFwKICAgICBVSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5jcHAgXAotICAgIFVJUHJvY2Vzcy9xdC9M
YXllclRyZWVIb3N0UHJveHlRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9Ub3VjaFZpZXdJbnRl
cmZhY2UuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5jcHAgXAog
ICAgIFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcCBcCkBAIC01NzYsNyAr
NTY4LDYgQEAgU09VUkNFUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJF
ZGl0b3JDbGllbnQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9s
b2NhdGlvbkNsaWVudC5jcHAgXAotICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3Jh
cGhpY3NMYXllci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVj
dG9yQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0
b3JGcm9udGVuZENsaWVudC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAppbmRleCA0
MzY3ZmM4MTQyZjVlYzlhZTYxMzdmZjgyZjZiMTUyZTBlYWY4YTUyLi4yMThmMmZmZWJjZGYzOTMy
OTBkYWE1ZGRiNmQyYjhmNDkxNDQzOTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAKQEAg
LTI1LDEzICsyNSwxMyBAQAogCiAjaW5jbHVkZSAiQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiQmFj
a2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFNZXNzYWdlcy5oIgorI2luY2x1ZGUg
IkRyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGls
ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJ0ZXh0L0NTdHJpbmcuaCIKICNp
bmNsdWRlIDxIYXNoTWFwLmg+CkBAIC01OCw2ICs1OCwxMiBAQCBXZWJHcmFwaGljc0xheWVyKiBX
ZWJHcmFwaGljc0xheWVyOjpsYXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklEIGlkKQogICAgIHJl
dHVybiBpdC0+c2Vjb25kOwogfQogCitzdGF0aWMgVmVjdG9yPFdlYkxheWVySUQ+JiBkZWxldGVk
TGF5ZXJJRHMoKQoreworICAgIHN0YXRpYyBWZWN0b3I8V2ViTGF5ZXJJRD4gbGF5ZXJzOworICAg
IHJldHVybiBsYXllcnM7Cit9CisKIHN0YXRpYyBXZWJMYXllcklEIHRvV2ViTGF5ZXJJRChHcmFw
aGljc0xheWVyKiBsYXllcikKIHsKICAgICByZXR1cm4gbGF5ZXIgPyB0b1dlYkdyYXBoaWNzTGF5
ZXIobGF5ZXIpLT5pZCgpIDogMDsKQEAgLTczLDkxICs3OSw2NyBAQCB2b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6Om5vdGlmeUNoYW5nZSgpCiBXZWJHcmFwaGljc0xheWVyOjpXZWJHcmFwaGljc0xheWVy
KEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICA6IEdyYXBoaWNzTGF5ZXIoY2xpZW50
KQogICAgICwgbV9uZWVkc0Rpc3BsYXkoZmFsc2UpCi0gICAgLCBtX21vZGlmaWVkKHRydWUpCisg
ICAgLCBtX21vZGlmaWVkKGZhbHNlKQogICAgICwgbV9jb250ZW50TmVlZHNEaXNwbGF5KGZhbHNl
KQogICAgICwgbV9oYXNQZW5kaW5nQW5pbWF0aW9ucyhmYWxzZSkKLSAgICAsIG1faW5VcGRhdGVN
b2RlKGZhbHNlKQotI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgICwgbV9sYXll
clRyZWVUaWxlQ2xpZW50KDApCi0gICAgLCBtX21haW5CYWNraW5nU3RvcmUoYWRvcHRQdHIobmV3
IFRpbGVkQmFja2luZ1N0b3JlKHRoaXMsIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tl
bmQ6OmNyZWF0ZSh0aGlzKSkpKQotI2VuZGlmCisgICAgLCBtX2NvbnRlbnRTY2FsZSgxLmYpCiB7
Ci0gICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRDb250ZW50c1NjYWxlKDEuMCk7Ci0gICAgc3Rh
dGljIFdlYkxheWVySUQgbmV4dExheWVySUQgPSAxOwotICAgIG1fbGF5ZXJJbmZvLmlkID0gbmV4
dExheWVySUQrKzsKKyAgICAvLyBTdGFydGluZyBsYXllciBJRHMgZnJvbSAxMDAwLCB0byBoZWxw
IGRldGVjdCBmYXVsdHkgSURzIGVhc2lseS4KKyAgICBzdGF0aWMgV2ViTGF5ZXJJRCBzSUQgPSAx
MDAwOworICAgIG1fbGF5ZXJJbmZvLmlkID0gKytzSUQ7CiAgICAgbGF5ZXJCeUlETWFwKCkuYWRk
KGlkKCksIHRoaXMpOwogfQogCiBXZWJHcmFwaGljc0xheWVyOjp+V2ViR3JhcGhpY3NMYXllcigp
CiB7CiAgICAgbGF5ZXJCeUlETWFwKCkucmVtb3ZlKGlkKCkpOwotCi0gICAgLy8gVGhpcyB3b3Vs
ZCB0ZWxsIHRoZSBVSSBwcm9jZXNzIHRvIHJlbGVhc2UgdGhlIGJhY2tpbmcgc3RvcmUuCi0gICAg
c2V0Q29udGVudHNUb0ltYWdlKDApOwotCi0gICAgaWYgKG1fbGF5ZXJUcmVlVGlsZUNsaWVudCkK
LSAgICAgICAgbV9sYXllclRyZWVUaWxlQ2xpZW50LT5kaWREZWxldGVMYXllcihpZCgpKTsKKyAg
ICBkZWxldGVkTGF5ZXJJRHMoKS5hcHBlbmQoaWQoKSk7CiB9CiAKIGJvb2wgV2ViR3JhcGhpY3NM
YXllcjo6c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4p
CiB7CiAgICAgYm9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNoaWxkcmVuKTsK
LSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICBXZWJHcmFwaGljc0xheWVyKiBj
aGlsZCA9IHRvV2ViR3JhcGhpY3NMYXllcihjaGlsZHJlbltpXSk7Ci0gICAgICAgIGNoaWxkLT5z
ZXRDb250ZW50c1NjYWxlKG1fY29udGVudHNTY2FsZSk7Ci0gICAgICAgIGNoaWxkLT5ub3RpZnlD
aGFuZ2UoKTsKLSAgICB9Ci0gICAgbm90aWZ5Q2hhbmdlKCk7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgaWYgKG9rKQorICAgICAgICBub3RpZnlDaGFuZ2UoKTsKKyAgICByZXR1cm4gb2s7CiB9CiAK
IHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7
CiAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQobGF5ZXIpOwotICAgIHRvV2ViR3JhcGhpY3NM
YXllcihsYXllciktPm5vdGlmeUNoYW5nZSgpOwogICAgIG5vdGlmeUNoYW5nZSgpOwogfQogCiB2
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChHcmFwaGljc0xheWVyKiBsYXll
ciwgaW50IGluZGV4KQogewogICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChsYXll
ciwgaW5kZXgpOwotICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPm5vdGlmeUNoYW5nZSgp
OwogICAgIG5vdGlmeUNoYW5nZSgpOwogfQogCiB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmFkZENo
aWxkQWJvdmUoR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCiB7
CiAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShsYXllciwgc2libGluZyk7Ci0gICAg
dG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+bm90aWZ5Q2hhbmdlKCk7CiAgICAgbm90aWZ5Q2hh
bmdlKCk7CiB9CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGlj
c0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKIHsKICAgICBHcmFwaGljc0xh
eWVyOjphZGRDaGlsZEJlbG93KGxheWVyLCBzaWJsaW5nKTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5
ZXIobGF5ZXIpLT5ub3RpZnlDaGFuZ2UoKTsKICAgICBub3RpZnlDaGFuZ2UoKTsKIH0KIAogYm9v
bCBXZWJHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQs
IEdyYXBoaWNzTGF5ZXIqIG5ld0NoaWxkKQogewogICAgIGJvb2wgb2sgPSBHcmFwaGljc0xheWVy
OjpyZXBsYWNlQ2hpbGQob2xkQ2hpbGQsIG5ld0NoaWxkKTsKLSAgICBpZiAoIW9rKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgbm90aWZ5Q2hhbmdlKCk7Ci0gICAgdG9XZWJHcmFwaGljc0xh
eWVyKG9sZENoaWxkKS0+bm90aWZ5Q2hhbmdlKCk7Ci0gICAgdG9XZWJHcmFwaGljc0xheWVyKG5l
d0NoaWxkKS0+bm90aWZ5Q2hhbmdlKCk7Ci0gICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAob2sp
CisgICAgICAgIG5vdGlmeUNoYW5nZSgpOworICAgIHJldHVybiBvazsKIH0KIAogdm9pZCBXZWJH
cmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCkKIHsKLSAgICBpZiAoV2ViR3JhcGhpY3NM
YXllciogcGFyZW50TGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIocGFyZW50KCkpKQotICAgICAg
ICBwYXJlbnRMYXllci0+bm90aWZ5Q2hhbmdlKCk7CiAgICAgR3JhcGhpY3NMYXllcjo6cmVtb3Zl
RnJvbVBhcmVudCgpOwotCiAgICAgbm90aWZ5Q2hhbmdlKCk7CiB9CiAKQEAgLTI2NSw2ICsyNDcs
OCBAQCB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0
JiByKQogewogICAgIGlmIChjb250ZW50c1JlY3QoKSA9PSByKQogICAgICAgICByZXR1cm47Cisg
ICAgaWYgKG1faW1hZ2UpCisgICAgICAgIHNldE5lZWRzRGlzcGxheSgpOwogCiAgICAgR3JhcGhp
Y3NMYXllcjo6c2V0Q29udGVudHNSZWN0KHIpOwogICAgIG5vdGlmeUNoYW5nZSgpOwpAQCAtMjkw
LDMwICsyNzQsMTUgQEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpyZW1vdmVBbmltYXRpb24oY29u
c3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQogewogfQogCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6
OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkKLXsKLSAgICBzZXRDb250ZW50c1RvSW1hZ2UoMCk7
Ci0gICAgc2V0Q29udGVudHNUb0ltYWdlKG1faW1hZ2UuZ2V0KCkpOwotfQotCiB2b2lkIFdlYkdy
YXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiB7Ci0gICAgaWYg
KGltYWdlID09IG1faW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJMYXllclRyZWVUaWxl
Q2xpZW50KiBjbGllbnQgPSBsYXllclRyZWVUaWxlQ2xpZW50KCk7Ci0gICAgaWYgKCFjbGllbnQp
CisgICAgaWYgKGltYWdlID09IG1faW1hZ2UuZ2V0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IC8vIFdlIGFkb3B0IGZpcnN0LCBpbiBjYXNlIHRoaXMgaXMgdGhlIHNhbWUgZnJhbWUgLSB0aGF0
IHdheSB3ZSBhdm9pZCBkZXN0cm95aW5nIGFuZCByZWNyZWF0aW5nIHRoZSBpbWFnZS4KLSAgICBp
bnQ2NF90IG5ld0lEID0gY2xpZW50LT5hZG9wdEltYWdlQmFja2luZ1N0b3JlKGltYWdlKTsKLSAg
ICBjbGllbnQtPnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShtX2xheWVySW5mby5pbWFnZUJhY2tp
bmdTdG9yZUlEKTsKLSAgICBub3RpZnlDaGFuZ2UoKTsKLSAgICBpZiAobmV3SUQgPT0gbV9sYXll
ckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fbGF5ZXJJ
bmZvLmltYWdlQmFja2luZ1N0b3JlSUQgPSBuZXdJRDsKICAgICBtX2ltYWdlID0gaW1hZ2U7Ci0g
ICAgbV9sYXllckluZm8uaW1hZ2VJc1VwZGF0ZWQgPSB0cnVlOworICAgIHNldE5lZWRzRGlzcGxh
eSgpOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShpbWFnZSk7CisgICAg
bm90aWZ5Q2hhbmdlKCk7CiB9CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVy
KEdyYXBoaWNzTGF5ZXIqIGxheWVyKQpAQCAtMzMyLDI5ICszMDEsNTAgQEAgdm9pZCBXZWJHcmFw
aGljc0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKIAog
dm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXkoKQogewotICAgIHNldE5lZWRz
RGlzcGxheUluUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoc2l6ZSgpLndp
ZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpKTsKKyAgICBtX25lZWRzRGlzcGxheSA9IHRydWU7Cisg
ICAgbm90aWZ5Q2hhbmdlKCk7CiB9CiAKIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBtX21haW5CYWNraW5n
U3RvcmUtPmludmFsaWRhdGUoSW50UmVjdChyZWN0KSk7CisgICAgbV9uZWVkc0Rpc3BsYXlSZWN0
LnVuaXRlKHJlY3QpOwogICAgIG5vdGlmeUNoYW5nZSgpOwogfQogCit2b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkKK3sKKyAgICBzZXROZWVkc0Rpc3BsYXko
KTsKK30KKwogV2ViTGF5ZXJJRCBXZWJHcmFwaGljc0xheWVyOjppZCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fbGF5ZXJJbmZvLmlkOwogfQogCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmND
b21wb3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6ZGlkU3luY2hyb25pemUoKQogeworICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7Cisg
ICAgbV9tb2RpZmllZCA9IGZhbHNlOworICAgIG1fbmVlZHNEaXNwbGF5UmVjdCA9IEZsb2F0UmVj
dCgpOworICAgIGlmIChtX2hhc1BlbmRpbmdBbmltYXRpb25zKQorICAgICAgICBub3RpZnlBbmlt
YXRpb25TdGFydGVkKFdURjo6Y3VycmVudFRpbWUoKSk7CisgICAgbV9oYXNQZW5kaW5nQW5pbWF0
aW9ucyA9IGZhbHNlOworfQorCitjb25zdCBXZWJMYXllckluZm8mIFdlYkdyYXBoaWNzTGF5ZXI6
OmxheWVySW5mbygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJJbmZvOworfQorCit2b2lk
IFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlKCkKK3sKKyAgICBzeW5jQ29t
cG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNoaWxkcmVuKClbaV0tPnN5bmND
b21wb3NpdGluZ1N0YXRlKHJlY3QpOworICAgICAgICBjaGlsZHJlbigpW2ldLT5zeW5jQ29tcG9z
aXRpbmdTdGF0ZSgpOwogICAgIGlmIChyZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgcmVwbGljYUxh
eWVyKCktPnN5bmNDb21wb3NpdGluZ1N0YXRlKHJlY3QpOworICAgICAgICByZXBsaWNhTGF5ZXIo
KS0+c3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKICAgICBpZiAobWFza0xheWVyKCkpCi0gICAgICAg
IG1hc2tMYXllcigpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShyZWN0KTsKLSAgICBzeW5jQ29tcG9z
aXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICAgICAgbWFza0xheWVyKCktPnN5bmND
b21wb3NpdGluZ1N0YXRlKCk7CiB9CiAKIFdlYkdyYXBoaWNzTGF5ZXIqIHRvV2ViR3JhcGhpY3NM
YXllcihHcmFwaGljc0xheWVyKiBsYXllcikKQEAgLTM2MiwyNSArMzUyLDMwIEBAIFdlYkdyYXBo
aWNzTGF5ZXIqIHRvV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8V2ViR3JhcGhpY3NMYXllcio+KGxheWVyKTsKIH0KIAotdm9pZCBX
ZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKQor
RmxvYXRSZWN0IFdlYkdyYXBoaWNzTGF5ZXI6Om5lZWRzRGlzcGxheVJlY3QoKSBjb25zdAogewot
ICAgIGlmICghbV9sYXllclRyZWVUaWxlQ2xpZW50KQotICAgICAgICBtX2xheWVyVHJlZVRpbGVD
bGllbnQgPSBsYXllclRyZWVUaWxlQ2xpZW50KCk7Ci0gICAgdXBkYXRlQ29udGVudEJ1ZmZlcnMo
KTsKKyAgICBGbG9hdFJlY3QgcmVjdCA9IEZsb2F0UmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwg
c2l6ZSgpLmhlaWdodCgpKTsKKyAgICBpZiAoIW1fbmVlZHNEaXNwbGF5KQorICAgICAgICByZWN0
LmludGVyc2VjdChtX25lZWRzRGlzcGxheVJlY3QpOworICAgIHJldHVybiByZWN0OworfQogCi0g
ICAgaWYgKCFtX21vZGlmaWVkKQotICAgICAgICByZXR1cm47CitWZWN0b3I8V2ViS2l0OjpXZWJM
YXllcklEPiBXZWJHcmFwaGljc0xheWVyOjp0YWtlTGF5ZXJzVG9EZWxldGUoKQoreworICAgIFZl
Y3RvcjxXZWJLaXQ6OldlYkxheWVySUQ+IGxheWVycyA9IGRlbGV0ZWRMYXllcklEcygpOworICAg
IGRlbGV0ZWRMYXllcklEcygpLmNsZWFyKCk7CisgICAgcmV0dXJuIGxheWVyczsKK30KIAordm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHko
KQorewogICAgIG1fbGF5ZXJJbmZvLm5hbWUgPSBuYW1lKCk7CiAgICAgbV9sYXllckluZm8uYW5j
aG9yUG9pbnQgPSBhbmNob3JQb2ludCgpOwogICAgIG1fbGF5ZXJJbmZvLmJhY2tmYWNlVmlzaWJs
ZSA9IGJhY2tmYWNlVmlzaWJpbGl0eSgpOwogICAgIG1fbGF5ZXJJbmZvLmNoaWxkcmVuVHJhbnNm
b3JtID0gY2hpbGRyZW5UcmFuc2Zvcm0oKTsKICAgICBtX2xheWVySW5mby5jb250ZW50c09wYXF1
ZSA9IGNvbnRlbnRzT3BhcXVlKCk7CiAgICAgbV9sYXllckluZm8uY29udGVudHNSZWN0ID0gY29u
dGVudHNSZWN0KCk7Ci0KLSAgICAvLyBJbiB0aGUgc2hhZG93IGxheWVyIHRyZWUgd2UgY3JlYXRl
IGluIHRoZSBVSSBwcm9jZXNzLCBsYXllcnMgd2l0aCBkaXJlY3RseSBjb21wb3NpdGVkIGltYWdl
cyBhcmUgYWx3YXlzIGNvbnNpZGVyZWQgdG8gZHJhdyBjb250ZW50LgotICAgIC8vIE90aGVyd2lz
ZSwgd2UnZCBoYXZlIHRvIGNoZWNrIHdoZXRoZXIgYW4gbGF5ZXIgd2l0aCBkcmF3c0NvbnRlbnQ9
PWZhbHNlIGhhcyBhIGRpcmVjdGx5IGNvbXBvc2l0ZWQgaW1hZ2UgbXVsdGlwbGUgdGltZXMuCi0g
ICAgbV9sYXllckluZm8uZHJhd3NDb250ZW50ID0gZHJhd3NDb250ZW50KCkgfHwgbV9pbWFnZTsK
KyAgICBtX2xheWVySW5mby5kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQoKTsKICAgICBtX2xh
eWVySW5mby5tYXNrID0gdG9XZWJMYXllcklEKG1hc2tMYXllcigpKTsKICAgICBtX2xheWVySW5m
by5tYXNrc1RvQm91bmRzID0gbWFza3NUb0JvdW5kcygpOwogICAgIG1fbGF5ZXJJbmZvLm9wYWNp
dHkgPSBvcGFjaXR5KCk7CkBAIC0zODgsMTU5ICszODMsMTIyIEBAIHZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKICAgICBtX2xheWVy
SW5mby5wb3MgPSBwb3NpdGlvbigpOwogICAgIG1fbGF5ZXJJbmZvLnByZXNlcnZlczNEID0gcHJl
c2VydmVzM0QoKTsKICAgICBtX2xheWVySW5mby5yZXBsaWNhID0gdG9XZWJMYXllcklEKHJlcGxp
Y2FMYXllcigpKTsKLSAgICBtX2xheWVySW5mby5zaXplID0gc2l6ZSgpOworICAgIG1fbGF5ZXJJ
bmZvLnNpemUgPSBGbG9hdFNpemUoc2l6ZSgpLndpZHRoKCkgKiBtX2NvbnRlbnRTY2FsZSwgc2l6
ZSgpLmhlaWdodCgpICogbV9jb250ZW50U2NhbGUpOwogICAgIG1fbGF5ZXJJbmZvLnRyYW5zZm9y
bSA9IHRyYW5zZm9ybSgpOwogICAgIG1fY29udGVudE5lZWRzRGlzcGxheSA9IGZhbHNlOwogICAg
IG1fbGF5ZXJJbmZvLmNoaWxkcmVuLmNsZWFyKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fbGF5ZXJJbmZvLmNoaWxkcmVu
LmFwcGVuZCh0b1dlYkxheWVySUQoY2hpbGRyZW4oKVtpXSkpOwotCi0gICAgbV9sYXllclRyZWVU
aWxlQ2xpZW50LT5kaWRTeW5jQ29tcG9zaXRpbmdTdGF0ZUZvckxheWVyKG1fbGF5ZXJJbmZvKTsK
LSAgICBtX21vZGlmaWVkID0gZmFsc2U7Ci0gICAgbV9sYXllckluZm8uaW1hZ2VJc1VwZGF0ZWQg
PSBmYWxzZTsKLSAgICBpZiAobV9oYXNQZW5kaW5nQW5pbWF0aW9ucykKLSAgICAgICAgbm90aWZ5
QW5pbWF0aW9uU3RhcnRlZChXVEY6OmN1cnJlbnRUaW1lKCkpOwotICAgIG1faGFzUGVuZGluZ0Fu
aW1hdGlvbnMgPSBmYWxzZTsKLX0KLQotI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQot
dm9pZCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKQotewog
fQogCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgc2NhbGUp
CitzdGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4gZGl2aWRlSW50b1RpbGVzKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b1dlYkdyYXBoaWNz
TGF5ZXIodGhpcy0+Y2hpbGRyZW4oKVtpXSk7Ci0gICAgICAgIGxheWVyLT5zZXRDb250ZW50c1Nj
YWxlKHNjYWxlKTsKKyAgICBWZWN0b3I8RmxvYXRSZWN0PiB0aWxlczsKKyAgICBmb3IgKGZsb2F0
IHkgPSByZWN0LnkoKTsgeSA8IHJlY3QubWF4WSgpOyB5ICs9IGdUaWxlRGltZW5zaW9uKSB7Cisg
ICAgICAgIGZvciAoZmxvYXQgeCA9IHJlY3QueCgpOyB4IDwgcmVjdC5tYXhYKCk7IHggKz0gZ1Rp
bGVEaW1lbnNpb24pIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCB0aWxlKHgsIHksIGdUaWxlRGlt
ZW5zaW9uLCBnVGlsZURpbWVuc2lvbik7CisgICAgICAgICAgICB0aWxlLmludGVyc2VjdChyZWN0
KTsKKyAgICAgICAgICAgIHRpbGVzLmFwcGVuZCh0aWxlKTsKKyAgICAgICAgfQogICAgIH0KLQot
ICAgIG1fY29udGVudHNTY2FsZSA9IHNjYWxlOwotICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUg
JiYgbV9tYWluQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCkgPT0gc2NhbGUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG5vdGlmeUNoYW5nZSgpOwotCi0gICAgbV9wcmV2aW91c0JhY2tpbmdT
dG9yZSA9IG1fbWFpbkJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7Ci0gICAgbV9tYWluQmFja2luZ1N0
b3JlID0gYWRvcHRQdHIobmV3IFRpbGVkQmFja2luZ1N0b3JlKHRoaXMsIFRpbGVkQmFja2luZ1N0
b3JlUmVtb3RlVGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSkpOwotICAgIG1fbWFpbkJhY2tpbmdT
dG9yZS0+c2V0Q29udGVudHNTY2FsZShzY2FsZSk7CisgICAgcmV0dXJuIHRpbGVzOwogfQogCi12
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFJvb3RMYXllcihib29sIGlzUm9vdCkKK3N0YXRpYyB2
b2lkIGNvbGxlY3RDb21wb3NpdGluZ0luZm9Gb3JUaGlzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5
ZXIsIFdlYkxheWVyVHJlZUluZm8mIG91dEluZm8sIFZlY3RvcjxXZWJHcmFwaGljc0xheWVyKj4m
IG91dExheWVycykKIHsKLSAgICBtX2xheWVySW5mby5pc1Jvb3RMYXllciA9IGlzUm9vdDsKLSAg
ICBub3RpZnlDaGFuZ2UoKTsKLX0KKyAgICBXZWJHcmFwaGljc0xheWVyKiBsYXllciA9IHRvV2Vi
R3JhcGhpY3NMYXllcihsYXllcik7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghbGF5ZXItPmlzTW9kaWZpZWQoKSkKKyAgICAgICAgcmV0dXJuOwogCi12b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29u
c3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKLXsKLSAgICBtX21haW5CYWNraW5nU3Rv
cmUtPnNldFZpc2libGVSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsKLX0K
KyAgICBvdXRMYXllcnMuYXBwZW5kKGxheWVyKTsKKyAgICBvdXRJbmZvLmxheWVycy5hcHBlbmQo
bGF5ZXItPmxheWVySW5mbygpKTsKIAotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRWaXNpYmxl
Q29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBtX3Zpc2libGVDb250ZW50
UmVjdCA9IHJlY3Q7Ci0gICAgbm90aWZ5Q2hhbmdlKCk7Ci0gICAgbV9tYWluQmFja2luZ1N0b3Jl
LT5hZGp1c3RWaXNpYmxlUmVjdCgpOworICAgIFdlYkxheWVySW5mbyYgbGF5ZXJJbmZvID0gb3V0
SW5mby5sYXllcnNbb3V0SW5mby5sYXllcnMuc2l6ZSgpIC0gMV07CisgICAgaWYgKGxheWVyLT5p
bWFnZSgpKQorICAgICAgICBsYXllckluZm8uZHJhd3NDb250ZW50ID0gdHJ1ZTsKIH0KIAotdm9p
ZCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3N0YXRpYyB2b2lkIGNvbGxlY3RDb21w
b3NpdGluZ0luZm9SZWN1cnNpdmVseShHcmFwaGljc0xheWVyKiByb290TGF5ZXIsIFdlYkxheWVy
VHJlZUluZm8mIG91dEluZm8sIFZlY3RvcjxXZWJHcmFwaGljc0xheWVyKj4mIG91dExheWVycykK
IHsKLSAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgaWYgKCFyb290TGF5ZXIpCiAgICAgICAg
IHJldHVybjsKLSAgICBtX21vZGlmaWVkID0gdHJ1ZTsKLSAgICBwYWludEdyYXBoaWNzTGF5ZXJD
b250ZW50cygqY29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dGls
ZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHVwZGF0ZWRSZWN0
cykKLXsKLX0KLQotYm9vbCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVVwZGF0
ZXNBbGxvd2VkKCkgY29uc3QKLXsKLSAgICBpZiAoIW1faW5VcGRhdGVNb2RlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKFdlYkxheWVyVHJlZVRpbGVDbGllbnQqIGNsaWVudCA9IGxh
eWVyVHJlZVRpbGVDbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudC0+bGF5ZXJUcmVlVGls
ZVVwZGF0ZXNBbGxvd2VkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQogCi1JbnRSZWN0IFdlYkdy
YXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCkKLXsKLSAgICBpZiAo
bV9pbWFnZSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICByZXR1cm4gSW50UmVjdCgw
LCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKLX0KKyAgICBjb2xsZWN0Q29t
cG9zaXRpbmdJbmZvRm9yVGhpc0xheWVyKHJvb3RMYXllciwgb3V0SW5mbywgb3V0TGF5ZXJzKTsK
KyAgICBjb2xsZWN0Q29tcG9zaXRpbmdJbmZvRm9yVGhpc0xheWVyKHJvb3RMYXllci0+bWFza0xh
eWVyKCksIG91dEluZm8sIG91dExheWVycyk7CisgICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb1Jl
Y3Vyc2l2ZWx5KHJvb3RMYXllci0+cmVwbGljYUxheWVyKCksIG91dEluZm8sIG91dExheWVycyk7
CiAKLUludFJlY3QgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVj
dCgpCi17Ci0gICAgcmV0dXJuIG1fdmlzaWJsZUNvbnRlbnRSZWN0OworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcm9vdExheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBj
b2xsZWN0Q29tcG9zaXRpbmdJbmZvUmVjdXJzaXZlbHkocm9vdExheWVyLT5jaGlsZHJlbigpW2ld
LCBvdXRJbmZvLCBvdXRMYXllcnMpOwogfQogCi1Db2xvciBXZWJHcmFwaGljc0xheWVyOjp0aWxl
ZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit2b2lkIFdlYkdyYXBoaWNzTGF5
ZXI6OnNlbmRMYXllcnNUb1VJUHJvY2VzcyhXZWJDb3JlOjpHcmFwaGljc0xheWVyKiByb290TGF5
ZXIsIFdlYlBhZ2UqIHdlYlBhZ2UpCiB7Ci0gICAgcmV0dXJuIGNvbnRlbnRzT3BhcXVlKCkgPyBD
b2xvcjo6d2hpdGUgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7CisgICAgd2ViUGFnZS0+bGF5b3V0SWZO
ZWVkZWQoKTsKKyAgICB3ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5z
eW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworICAgIFdlYkxheWVyVHJl
ZUluZm8gY29tcG9zaXRpbmdJbmZvOworICAgIGNvbXBvc2l0aW5nSW5mby5yb290TGF5ZXJJRCA9
IHJvb3RMYXllciA/IHRvV2ViR3JhcGhpY3NMYXllcihyb290TGF5ZXIpLT5pZCgpIDogMDsKKyAg
ICBjb21wb3NpdGluZ0luZm8uY29udGVudFNjYWxlID0gMS4wOworICAgIGNvbXBvc2l0aW5nSW5m
by5kZWxldGVkTGF5ZXJJRHMgPSBXZWJHcmFwaGljc0xheWVyOjp0YWtlTGF5ZXJzVG9EZWxldGUo
KTsKKyAgICBWZWN0b3I8V2ViR3JhcGhpY3NMYXllcio+IGxheWVyczsKKyAgICBpZiAocm9vdExh
eWVyKQorICAgICAgICBjb2xsZWN0Q29tcG9zaXRpbmdJbmZvUmVjdXJzaXZlbHkocm9vdExheWVy
LCBjb21wb3NpdGluZ0luZm8sIGxheWVycyk7CiAKLX0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6
Y3JlYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQotewot
ICAgIG1fbW9kaWZpZWQgPSB0cnVlOwotICAgIGlmIChXZWJMYXllclRyZWVUaWxlQ2xpZW50KiBj
bGllbnQgPSBsYXllclRyZWVUaWxlQ2xpZW50KCkpCi0gICAgICAgIGNsaWVudC0+Y3JlYXRlVGls
ZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8pOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6
OnVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKLXsK
LSAgICBtX21vZGlmaWVkID0gdHJ1ZTsKLSAgICBpZiAoV2ViTGF5ZXJUcmVlVGlsZUNsaWVudCog
Y2xpZW50ID0gbGF5ZXJUcmVlVGlsZUNsaWVudCgpKQotICAgICAgICBjbGllbnQtPnVwZGF0ZVRp
bGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvKTsKLX0KKyAgICBpZiAoY29tcG9zaXRpbmdJbmZv
LmRlbGV0ZWRMYXllcklEcy5pc0VtcHR5KCkgJiYgY29tcG9zaXRpbmdJbmZvLmxheWVycy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKIAotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpyZW1vdmVU
aWxlKGludCB0aWxlSUQpCi17Ci0gICAgbV9tb2RpZmllZCA9IHRydWU7Ci0gICAgaWYgKFdlYkxh
eWVyVHJlZVRpbGVDbGllbnQqIGNsaWVudCA9IGxheWVyVHJlZVRpbGVDbGllbnQoKSkKLSAgICAg
ICAgY2xpZW50LT5yZW1vdmVUaWxlKGlkKCksIHRpbGVJRCk7Ci19CisgICAgd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6U3luY0NvbXBvc2l0aW5nTGF5ZXJzKGNvbXBv
c2l0aW5nSW5mbykpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllcnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllcnNbaV07Cisg
ICAgICAgIEZsb2F0UmVjdCB1cGRhdGVSZWN0ID0gbGF5ZXItPm5lZWRzRGlzcGxheVJlY3QoKTsK
KworICAgICAgICBsYXllci0+ZGlkU3luY2hyb25pemUoKTsKKworICAgICAgICBpZiAodXBkYXRl
UmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBSZWZQdHI8
SW1hZ2U+IGRpcmVjdEltYWdlID0gbGF5ZXItPmltYWdlKCk7CisgICAgICAgIGlmIChkaXJlY3RJ
bWFnZSkKKyAgICAgICAgICAgIHVwZGF0ZVJlY3QgPSBsYXllci0+Y29udGVudHNSZWN0KCk7Cisg
ICAgICAgIGVsc2UgaWYgKCFsYXllci0+ZHJhd3NDb250ZW50KCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBWZWN0b3I8RmxvYXRSZWN0PiB0aWxlUmVjdHMgPSBkaXZpZGVJbnRv
VGlsZXModXBkYXRlUmVjdCk7CisgICAgICAgIGZvciAoc2l6ZV90IHRpbGVJbmRleCA9IDA7IHRp
bGVJbmRleCA8IHRpbGVSZWN0cy5zaXplKCk7ICsrdGlsZUluZGV4KSB7CisgICAgICAgICAgICBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0ID0gdGlsZVJlY3RzW3RpbGVJbmRleF07CisgICAgICAg
ICAgICBJbnRSZWN0IGVuY2xvc2luZ1VwZGF0ZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRpbGVS
ZWN0KTsKKworICAgICAgICAgICAgV2ViTGF5ZXJVcGRhdGVJbmZvIGNodW5rKGVuY2xvc2luZ1Vw
ZGF0ZVJlY3QpOworICAgICAgICAgICAgY2h1bmsubGF5ZXJJRCA9IHVpbnQzMl90KGxheWVyLT5p
ZCgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJl
YWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGNodW5rLnJlY3Quc2l6ZSgpLCBTaGFyZWFibGVC
aXRtYXA6OlN1cHBvcnRzQWxwaGEpOworICAgICAgICAgICAgaWYgKCFiaXRtYXApCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoIWJpdG1hcC0+Y3JlYXRlSGFuZGxl
KGNodW5rLmJpdG1hcEhhbmRsZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisjaWYgUExB
VEZPUk0oUVQpCisgICAgICAgICAgICBRSW1hZ2UgdGlsZUltYWdlID0gYml0bWFwLT5jcmVhdGVR
SW1hZ2UoKTsKKyAgICAgICAgICAgIHRpbGVJbWFnZS5maWxsKDApOworICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnRpbGVJbWFnZSk7CisgICAgICAgICAg
ICAgICAgcGFpbnRlci50cmFuc2xhdGUoLXRpbGVSZWN0LngoKSwgLXRpbGVSZWN0LnkoKSk7Cisg
ICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoJnBhaW50ZXIpOworICAgICAg
ICAgICAgICAgIGlmIChkaXJlY3RJbWFnZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5k
cmF3SW1hZ2UoZGlyZWN0SW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGxheWVyLT5j
b250ZW50c1JlY3QoKSwgRmxvYXRSZWN0KDAsIDAsIGRpcmVjdEltYWdlLT53aWR0aCgpLCBkaXJl
Y3RJbWFnZS0+aGVpZ2h0KCkpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIGxheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBlbmNsb3Np
bmdVcGRhdGVSZWN0KTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgogCi12b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6OnVwZGF0ZVRpbGVCdWZmZXJzUmVjdXJzaXZlbHkoKQotewotICAgIG1fbWFpbkJhY2tp
bmdTdG9yZS0+dXBkYXRlVGlsZUJ1ZmZlcnMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgV2ViR3JhcGhpY3NMYXllciogbGF5
ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIodGhpcy0+Y2hpbGRyZW4oKVtpXSk7Ci0gICAgICAgIGxh
eWVyLT51cGRhdGVUaWxlQnVmZmVyc1JlY3Vyc2l2ZWx5KCk7CisgICAgICAgICAgICB3ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpVcGRhdGVDb21wb3NpdGluZ0xheWVy
Q29udGVudChjaHVuaykpOworICAgICAgICB9CiAgICAgfQogfQogCi1XZWJMYXllclRyZWVUaWxl
Q2xpZW50KiBXZWJHcmFwaGljc0xheWVyOjpsYXllclRyZWVUaWxlQ2xpZW50KCkgY29uc3QKLXsK
LSAgICBpZiAobV9sYXllclRyZWVUaWxlQ2xpZW50KQotICAgICAgICByZXR1cm4gbV9sYXllclRy
ZWVUaWxlQ2xpZW50OwotICAgIFdlYkdyYXBoaWNzTGF5ZXIqIHBhcmVudCA9IHRvV2ViR3JhcGhp
Y3NMYXllcih0aGlzLT5wYXJlbnQoKSk7Ci0gICAgaWYgKCFwYXJlbnQpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBwYXJlbnQtPmxheWVyVHJlZVRpbGVDbGllbnQoKTsKLX0KLQotdm9p
ZCBXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVDb250ZW50QnVmZmVycygpCi17Ci0gICAgLy8gQmFj
a2luZy1zdG9yZXMgZm9yIGRpcmVjdGx5IGNvbXBvc2l0ZWQgaW1hZ2VzIGlzIGhhbmRsZWQgaW4g
TGF5ZXJUcmVlSG9zdC4KLSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKCFkcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkxheWVyVHJlZVRp
bGVDbGllbnQqIGNsaWVudCA9IGxheWVyVHJlZVRpbGVDbGllbnQoKTsKLSAgICBpZiAoIWNsaWVu
dCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1faW5VcGRhdGVNb2RlID0gdHJ1ZTsKLSAgICBtX21h
aW5CYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGVCdWZmZXJzKCk7Ci0gICAgbV9pblVwZGF0ZU1vZGUg
PSBmYWxzZTsKLX0KLQotI2VuZGlmCi0KIHN0YXRpYyBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+
IGNyZWF0ZVdlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQogewog
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgV2ViR3JhcGhpY3NMYXllcihjbGllbnQpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhp
Y3NMYXllci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJH
cmFwaGljc0xheWVyLmgKaW5kZXggYzU4MWI1NmE0MzY3YjA0ZWMzN2VlYWZlOTVhMDE3YTdkNmU1
NTZhYy4uYWQ2MDIxZWUxNzBjYWRlZWJmZTAwMzRiY2M3ZGE4ODliYTJiNDM0YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xh
eWVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJH
cmFwaGljc0xheWVyLmgKQEAgLTI3LDQwICsyNywxOSBAQAogI2luY2x1ZGUgIkludFNpemUuaCIK
ICNpbmNsdWRlICJSdW5Mb29wLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW5j
bHVkZSAiVGlsZWRCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNs
aWVudC5oIgotI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIgogI2luY2x1
ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCi0jaW5jbHVkZSAiVXBkYXRlSW5mby5oIgogI2lu
Y2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCiAKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewotCi1j
bGFzcyBXZWJMYXllclRyZWVUaWxlQ2xpZW50IHsKLXB1YmxpYzoKLSAgICAvLyBUaWxlZEJhY2tp
bmdTdG9yZVJlbW90ZVRpbGVDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJM
YXllcklELCBpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8m
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJ
RCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQ2NF90IGFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoSW1h
Z2UqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2
NF90KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFN5bmNDb21wb3NpdGluZ1N0YXRlRm9yTGF5
ZXIoY29uc3QgV2ViTGF5ZXJJbmZvJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWREZWxldGVM
YXllcihXZWJMYXllcklEKSA9IDA7Ci19OworY2xhc3MgV2ViUGFnZTsKIH0KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBXZWJHcmFwaGljc0xheWVyIDogcHVibGljIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIKLSNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgLCBwdWJsaWMgVGlsZWRCYWNraW5nU3RvcmVDbGllbnQKLSAgICAgICAgICAg
ICAgICAgICAgICAgLCBwdWJsaWMgV2ViS2l0OjpUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVD
bGllbnQKLSNlbmRpZgoteworY2xhc3MgV2ViR3JhcGhpY3NMYXllciA6IHB1YmxpYyBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyIHsKIHB1YmxpYzoKICAgICBXZWJHcmFwaGljc0xheWVyKEdyYXBoaWNz
TGF5ZXJDbGllbnQqKTsKICAgICB2aXJ0dWFsIH5XZWJHcmFwaGljc0xheWVyKCk7CkBAIC05NCwx
MyArNzMsMTMgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgdm9p
ZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBzZXRD
b250ZW50c05lZWRzRGlzcGxheSgpOwotICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0KGNv
bnN0IEludFJlY3QmKTsKLSAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlW
ZWN0b3IoY29uc3QgRmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRp
bmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0
aW5nU3RhdGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlz
TGF5ZXJPbmx5KCk7Ci0gICAgdm9pZCBzZXRSb290TGF5ZXIoYm9vbCk7CiAKICAgICBXZWJLaXQ6
OldlYkxheWVySUQgaWQoKSBjb25zdDsKKyAgICBjb25zdCBXZWJLaXQ6OldlYkxheWVySW5mbyYg
bGF5ZXJJbmZvKCkgY29uc3Q7CisgICAgRmxvYXRSZWN0IG5lZWRzRGlzcGxheVJlY3QoKSBjb25z
dDsKKyAgICBzdGF0aWMgVmVjdG9yPFdlYktpdDo6V2ViTGF5ZXJJRD4gdGFrZUxheWVyc1RvRGVs
ZXRlKCk7CiAgICAgc3RhdGljIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChXZWJLaXQ6Oldl
YkxheWVySUQpOwogICAgIGJvb2wgaXNNb2RpZmllZCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kaWZp
ZWQ7IH0KICAgICB2b2lkIGRpZFN5bmNocm9uaXplKCk7CkBAIC0xMDgsNTEgKzg3LDIxIEBAIHB1
YmxpYzoKICAgICB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoZG91YmxlKTsKIAogICAgIHN0
YXRpYyB2b2lkIGluaXRGYWN0b3J5KCk7Ci0KLSNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9S
RSkKLSAgICAvLyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAotICAgIHZpcnR1YWwgdm9pZCB0aWxl
ZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKTsKLSAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5n
U3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVh
bCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBw
YWludGVkQXJlYSk7Ci0gICAgdmlydHVhbCBib29sIHRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0Fs
bG93ZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVDb250
ZW50c1JlY3QoKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxl
UmVjdCgpOwotICAgIHZpcnR1YWwgQ29sb3IgdGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29s
b3IoKSBjb25zdDsKLQotICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAot
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBk
YXRlSW5mbyYpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0
IFdlYktpdDo6VXBkYXRlSW5mbyYpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0
aWxlSUQpOwotCi0gICAgdm9pZCBzZXRMYXllclRyZWVUaWxlQ2xpZW50KFdlYktpdDo6V2ViTGF5
ZXJUcmVlVGlsZUNsaWVudCogY2xpZW50KSB7IG1fbGF5ZXJUcmVlVGlsZUNsaWVudCA9IGNsaWVu
dDsgfQotICAgIFdlYktpdDo6V2ViTGF5ZXJUcmVlVGlsZUNsaWVudCogbGF5ZXJUcmVlVGlsZUNs
aWVudCgpIGNvbnN0OwotCi0gICAgYm9vbCBpc1JlYWR5Rm9yVGlsZUJ1ZmZlclN3YXAoKSBjb25z
dDsKLSAgICB2b2lkIHVwZGF0ZVRpbGVCdWZmZXJzUmVjdXJzaXZlbHkoKTsKLSAgICB2b2lkIHNl
dENvbnRlbnRzU2NhbGUoZmxvYXQpOwotICAgIHZvaWQgdXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsK
LSNlbmRpZgorICAgIHN0YXRpYyB2b2lkIHNlbmRMYXllcnNUb1VJUHJvY2VzcyhXZWJDb3JlOjpH
cmFwaGljc0xheWVyKiwgV2ViS2l0OjpXZWJQYWdlKik7CiAKIHByaXZhdGU6CiAgICAgV2ViS2l0
OjpXZWJMYXllckluZm8gbV9sYXllckluZm87Ci0gICAgV2ViS2l0OjpXZWJMYXllclRyZWVUaWxl
Q2xpZW50KiBtX2xheWVyVGlsZUNsaWVudDsKKyAgICBSZWZQdHI8V2ViS2l0OjpTaGFyZWFibGVC
aXRtYXA+IG1fYmFja2luZ1N0b3JlOwogICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKICAgICBG
bG9hdFJlY3QgbV9uZWVkc0Rpc3BsYXlSZWN0OwotICAgIEludFJlY3QgbV92aXNpYmxlQ29udGVu
dFJlY3Q7Ci0gICAgYm9vbCBtX25lZWRzRGlzcGxheSA6IDE7Ci0gICAgYm9vbCBtX21vZGlmaWVk
IDogMTsKLSAgICBib29sIG1fY29udGVudE5lZWRzRGlzcGxheSA6IDE7Ci0gICAgYm9vbCBtX2hh
c1BlbmRpbmdBbmltYXRpb25zIDogMTsKLSAgICBib29sIG1faW5VcGRhdGVNb2RlIDogMjsKKyAg
ICBib29sIG1fbmVlZHNEaXNwbGF5OworICAgIGJvb2wgbV9tb2RpZmllZDsKKyAgICBib29sIG1f
Y29udGVudE5lZWRzRGlzcGxheTsKKyAgICBib29sIG1faGFzUGVuZGluZ0FuaW1hdGlvbnM7CiAK
LSAgICB2b2lkIG5vdGlmeUNoYW5nZSgpOworICAgIGZsb2F0IG1fY29udGVudFNjYWxlOwogCi0j
aWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgV2ViS2l0OjpXZWJMYXllclRyZWVU
aWxlQ2xpZW50KiBtX2xheWVyVHJlZVRpbGVDbGllbnQ7Ci0gICAgT3duUHRyPFdlYkNvcmU6OlRp
bGVkQmFja2luZ1N0b3JlPiBtX21haW5CYWNraW5nU3RvcmU7Ci0gICAgT3duUHRyPFdlYkNvcmU6
OlRpbGVkQmFja2luZ1N0b3JlPiBtX3ByZXZpb3VzQmFja2luZ1N0b3JlOwotICAgIGZsb2F0IG1f
Y29udGVudHNTY2FsZTsKLSNlbmRpZgorICAgIHZvaWQgbm90aWZ5Q2hhbmdlKCk7CiB9OwogCiBX
ZWJHcmFwaGljc0xheWVyKiB0b1dlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciopOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAppbmRleCAw
NmRlY2Q5MzhjY2RkMDE4NzMxM2MzMDU1MTE3ZTgyNjgwMzhmNWJmLi41MmZkZGRkM2I4ZmU3Y2I2
YTM1YWU1NTFiMDdiM2E2OTdhNzU0MDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaApAQCAtNzgsOSArNzgsNiBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMo
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ0xheWVycygpID0gMDsKLSNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRy
ZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBD
b3JlSVBDOjpBcmd1bWVudERlY29kZXIqKSA9IDA7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oV0lOKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0RyYXdpbmdBcmVhSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RHJhd2luZ0FyZWFJbXBsLmNwcAppbmRleCBhOWIxM2M3NGZhYzI0Yjk2YzczODdiNWUwZTc5ODIx
MDIxMmZjZWUwLi45N2ZmODI3YzdhOWNkYWJiN2Y4OWIyZTNjNzVlNGMwNzNiYjRhMzc3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJ
bXBsLmNwcApAQCAtNjczLDEzICs2NzMsNSBAQCB2b2lkIERyYXdpbmdBcmVhSW1wbDo6ZGlzcGxh
eShVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQogICAgIG1fbGFzdERpc3BsYXlUaW1lID0gY3VycmVu
dFRpbWUoKTsKIH0KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRF
WFRVUkVfTUFQUEVSKQotdm9pZCBEcmF3aW5nQXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVI
b3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBDOjpNZXNz
YWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykKLXsK
LSAgICBpZiAobV9sYXllclRyZWVIb3N0KQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRpZFJl
Y2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50
cyk7Ci19Ci0jZW5kaWYKLQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaAppbmRleCA1Y2E1
NTQ4OTE3MGM0MDY4ZDc4ZWM0NGY4OGE5MWEyYzk3MDc4ZjI5Li5jYzhhODA1NDA3YzJkZjU3MGEy
N2U5MTU4NmY0NGExNDgxZDlkZTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oCkBAIC03MSwxMCArNzEsNiBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNoaWxkV2luZG93R2VvbWV0cnlVcGRhdGUoY29u
c3QgV2luZG93R2VvbWV0cnkmKTsKICNlbmRpZgogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVz
c2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKLSNlbmRpZgotCiAgICAgLy8gQ29y
ZUlQQyBtZXNzYWdlIGhhbmRsZXJzLgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVCYWNraW5nU3Rv
cmVTdGF0ZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBib29sIHJlc3BvbmRJbW1lZGlh
dGVseSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOwogICAgIHZpcnR1YWwgdm9pZCBk
aWRVcGRhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9MYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9M
YXllclRyZWVIb3N0LmNwcAppbmRleCAwMzFjM2ZhNmFiMjcyOTM3MGYzNzQzNzUxMmEyMWM5NjRl
ZTFjNGNmLi5kYTQyYWU2Nzg0YjA3MmQwYzQ3OThmNDYxYThmNjVjYzNmODkzM2VjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3Bw
CkBAIC0zNCwxMCArMzQsNiBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFFUKSAm
JiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0jaW5jbHVkZSAicXQvTGF5ZXJUcmVlSG9zdFF0LmgiCi0j
ZW5kaWYKLQogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpA
QCAtNDgsOCArNDQsNiBAQCBQYXNzUmVmUHRyPExheWVyVHJlZUhvc3Q+IExheWVyVHJlZUhvc3Q6
OmNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQogICAgIHJldHVybiBMYXllclRyZWVIb3N0Q0FNYWM6
OmNyZWF0ZSh3ZWJQYWdlKTsKICNlbGlmIFBMQVRGT1JNKFdJTikgJiYgSEFWRShXS1FDQSkKICAg
ICByZXR1cm4gTGF5ZXJUcmVlSG9zdENBV2luOjpjcmVhdGUod2ViUGFnZSk7Ci0jZWxpZiBQTEFU
Rk9STShRVCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIHJldHVybiBMYXllclRyZWVIb3N0
UXQ6OmNyZWF0ZSh3ZWJQYWdlKTsKICNlbHNlCiAgICAgcmV0dXJuIDA7CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCmluZGV4
IDUxZjk5MjA4ZWFlNWFmZmNkY2NjZmM4OWNkMWZmMzlkNzUwYTJkYTguLjY3YzgwN2IwNTNiYTNl
NTI4NjM1Y2FlYjliMTJiY2Q2ZjRjMzAzNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaApAQCAtMjYsMjAgKzI2LDEzIEBACiAjaWZu
ZGVmIExheWVyVHJlZUhvc3RfaAogI2RlZmluZSBMYXllclRyZWVIb3N0X2gKIAotI2luY2x1ZGUg
PENvcmVJUEMvTWVzc2FnZUlELmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCi1uYW1lc3BhY2UgQ29yZUlQQyB7Ci1jbGFzcyBBcmd1
bWVudERlY29kZXI7Ci1jbGFzcyBDb25uZWN0aW9uOwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7
Ci1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgSW50UmVjdDsKLWNsYXNzIEludFNpemU7Ci1jbGFz
cyBHcmFwaGljc0xheWVyOworICAgIGNsYXNzIEludFJlY3Q7CisgICAgY2xhc3MgSW50U2l6ZTsK
KyAgICBjbGFzcyBHcmFwaGljc0xheWVyOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTc5
LDE0ICs3Miw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5kZXJpbmcoKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyB9CiAKLSNpZiBFTkFCTEUo
VElMRURfQkFDS0lOR19TVE9SRSkKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRS
ZWN0QW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGZsb2F0IHNjYWxlKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50JikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVD
b250ZW50UmVjdEZvckxheWVyKGludCBsYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbios
IENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7Ci0jZW5kaWYK
LQogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDaGlsZFdpbmRv
d0dlb21ldHJ5VXBkYXRlKGNvbnN0IFdpbmRvd0dlb21ldHJ5JikgPSAwOwogI2VuZGlmCkBAIC05
NSwxMSArODAsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgTGF5ZXJUcmVlSG9zdChXZWJQ
YWdlKik7CiAKICAgICBXZWJQYWdlKiBtX3dlYlBhZ2U7Ci0KLQotI2lmIEVOQUJMRShUSUxFRF9C
QUNLSU5HX1NUT1JFKQotICAgIGJvb2wgbV93YWl0aW5nRm9yVUlQcm9jZXNzOwotI2VuZGlmCiB9
OwogCiAjaWYgIVBMQVRGT1JNKFdJTikgJiYgIVBMQVRGT1JNKFFUKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW4g
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5tZXNzYWdl
cy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRlOTg3MDY2MzkzNjU1MzAyZWVh
MWZiMGEyNTlkZTJiYTI5YTlhNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9z
dC5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMKLSMgICAgQ29w
eXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQotIwotIyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0jICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0jICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0j
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotIyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotIyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotIyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0jICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0jCi0KLQotI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQot
bWVzc2FnZXMgLT4gTGF5ZXJUcmVlSG9zdCB7Ci0gICAgU2V0VmlzaWJsZUNvbnRlbnRSZWN0Rm9y
TGF5ZXIoaW50IGxheWVySUQsIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0KQot
ICAgIFNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoV2ViQ29yZTo6RmxvYXRQ
b2ludCB0cmFqZWN0b3J5VmVjdG9yeSkKLSAgICBTZXRWaXNpYmxlQ29udGVudFJlY3RBbmRTY2Fs
ZShXZWJDb3JlOjpJbnRSZWN0IGNvbnRlbnRSZWN0LCBmbG9hdCBzY2FsZSkKLSAgICBSZW5kZXJO
ZXh0RnJhbWUoKQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5jcHAKaW5kZXggZTcyMDhhOGI2ODAxNTQxMzI0
ZGZjMTAzYjJkNjg0ZTllM2QyN2ZmYy4uZmFhNmNkZDQ3MWIyOTk2OTkxYjRmMjJlNmMxZjUzNWVh
ODI4MWZmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Rp
bGVkRHJhd2luZ0FyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9UaWxlZERyYXdpbmdBcmVhLmNwcApAQCAtMTc3LDEwICsxNzcsNiBAQCB2b2lkIFRpbGVkRHJh
d2luZ0FyZWE6OnJlbW92ZVRpbGUoaW50IHRpbGVJRCkKICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OlJlbW92ZVRpbGUodGlsZUlEKSk7CiB9CiAKLSNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi12b2lkIFRpbGVkRHJhd2luZ0FyZWE6OmRpZFJl
Y2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9u
LCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRz
KSB7IH0KLSNlbmRpZgogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLQogI2VuZGlmIC8vIFRJTEVE
X0JBQ0tJTkdfU1RPUkUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9UaWxlZERyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvVGlsZWREcmF3aW5nQXJlYS5oCmluZGV4IDVlYjc5YWU5ZDQxZGY1MzU5ZTAwYWVhY2EzYTEy
Yjc2NzNkMmFhMTIuLmVkMTNkMmEyNzI5Nzg1OTkzODE5N2FkMTA3MWQyNTg3MDkxYTRiYWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdB
cmVhLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2lu
Z0FyZWEuaApAQCAtNDksNyArNDksNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFJv
b3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBzeW5jQ29tcG9zaXRpbmdMYXllcnMoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpN
ZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwogI2VuZGlmCiAKIHByaXZhdGU6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXgg
MDk4MDMyNGM1NTA5MWQ4ODhkODVkZjdlYWZhMWJkMWE1NzYyZDE5My4uMTVjMGQzNGI4ZjQwNDQ2
MDNjMDUzNzYzMWRhMjNkMWQ3ODVmNjk0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMjE2OCwxNCArMjE2OCw2IEBAIHZvaWQgV2ViUGFn
ZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29y
ZUlQQzo6TWVzc2FnCiAgICAgICAgICAgICBtX2RyYXdpbmdBcmVhLT5kaWRSZWNlaXZlRHJhd2lu
Z0FyZWFNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLQotI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKSAmJiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpN
ZXNzYWdlQ2xhc3NMYXllclRyZWVIb3N0PigpKSB7Ci0gICAgICAgIGlmIChtX2RyYXdpbmdBcmVh
KQotICAgICAgICAgICAgbV9kcmF3aW5nQXJlYS0+ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNz
YWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSNlbmRpZgogICAgIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKG1lc3Nh
Z2VJRC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NXZWJJbnNwZWN0b3I+KCkpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RR
dC5jcHAKaW5kZXggOGM0NDY4ZGQwMGNiNDc3NjBhM2E0NTEwNTFlNGFlZWNkZjNmYWVkOC4uNTc4
YWUwOGIyMzhmMTc1M2IwNjFlZjE0OGM3MTY2Y2FhZDgyYWUzNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAK
QEAgLTI1LDQxMyArMjUsOCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RRdC5o
IgotCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWFJbXBsLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRl
ICJNZXNzYWdlSUQuaCIKLSNpbmNsdWRlICJXZWJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSAi
V2ViUGFnZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvU2V0dGluZ3MuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1QYXNzUmVmUHRyPExheWVyVHJlZUhvc3RRdD4gTGF5ZXJUcmVlSG9zdFF0Ojpj
cmVhdGUoV2ViUGFnZSogd2ViUGFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVy
VHJlZUhvc3RRdCh3ZWJQYWdlKSk7Ci19Ci0KLUxheWVyVHJlZUhvc3RRdDo6fkxheWVyVHJlZUhv
c3RRdCgpCi17Ci19Ci0KLUxheWVyVHJlZUhvc3RRdDo6TGF5ZXJUcmVlSG9zdFF0KFdlYlBhZ2Uq
IHdlYlBhZ2UpCi0gICAgOiBMYXllclRyZWVIb3N0KHdlYlBhZ2UpCi0gICAgLCBtX25vdGlmeUFm
dGVyU2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSkKLSAgICAsIG1faXNWYWxpZCh0cnVlKQotI2lm
IEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgICwgbV93YWl0aW5nRm9yVUlQcm9jZXNz
KGZhbHNlKQotICAgICwgbV9pc1N1c3BlbmRlZChmYWxzZSkKLSNlbmRpZgotICAgICwgbV9zaG91
bGRTeW5jRnJhbWUoZmFsc2UpCi0gICAgLCBtX3Nob3VsZFN5bmNSb290TGF5ZXIodHJ1ZSkKLSAg
ICAsIG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZMYXllclRyZWVIb3N0UXQ6OmxheWVyRmx1c2hU
aW1lckZpcmVkKQotICAgICwgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQodHJ1ZSkKLXsK
LSAgICAvLyBDcmVhdGUgYSByb290IGxheWVyLgotICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NM
YXllcjo6Y3JlYXRlKHRoaXMpOwotICAgIFdlYkdyYXBoaWNzTGF5ZXIqIHdlYlJvb3RMYXllciA9
IHRvV2ViR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSk7Ci0gICAgd2ViUm9vdExheWVy
LT5zZXRSb290TGF5ZXIodHJ1ZSk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fcm9vdExheWVyLT5z
ZXROYW1lKCJMYXllclRyZWVIb3N0UXQgcm9vdCBsYXllciIpOwotI2VuZGlmCi0gICAgbV9yb290
TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7Ci0gICAgbV9yb290TGF5ZXItPnNldFNpemUo
bV93ZWJQYWdlLT5zaXplKCkpOwotICAgIG1fbGF5ZXJUcmVlQ29udGV4dC53ZWJMYXllcklEID0g
dG9XZWJHcmFwaGljc0xheWVyKHdlYlJvb3RMYXllciktPmlkKCk7Ci0KLSAgICBtX25vbkNvbXBv
c2l0ZWRDb250ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7Ci0jaWYgRU5B
QkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgdG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExh
eWVyLmdldCgpKS0+c2V0TGF5ZXJUcmVlVGlsZUNsaWVudCh0aGlzKTsKLSNlbmRpZgotI2lmbmRl
ZiBOREVCVUcKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5hbWUoIkxheWVy
VHJlZUhvc3RRdCBub24tY29tcG9zaXRlZCBjb250ZW50Iik7Ci0jZW5kaWYKLSAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKG1fd2ViUGFnZS0+ZHJhd3NC
YWNrZ3JvdW5kKCkgJiYgIW1fd2ViUGFnZS0+ZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoKSk7
Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6
ZSgpKTsKLQotICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXIuZ2V0KCkpOwotCi0gICAgaWYgKG1fd2ViUGFnZS0+aGFzUGFnZU92ZXJsYXkoKSkKLSAg
ICAgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOwotCi0gICAgc2NoZWR1bGVMYXllckZsdXNo
KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0Vu
YWJsZWQoYm9vbCBsYXllckZsdXNoaW5nRW5hYmxlZCkKLXsKLSAgICBpZiAobV9sYXllckZsdXNo
U2NoZWR1bGluZ0VuYWJsZWQgPT0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0Vu
YWJsZWQ7Ci0KLSAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5
ZXJUcmVlSG9zdFF0OjpzY2hlZHVsZUxheWVyRmx1c2goKQotewotICAgIGlmICghbV9sYXllckZs
dXNoU2NoZWR1bGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9sYXll
ckZsdXNoVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9sYXllckZsdXNoVGltZXIuc3RhcnRP
bmVTaG90KDApOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6Y2FuY2VsUGVuZGluZ0xheWVy
Rmx1c2goKQotewotICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBMYXll
clRyZWVIb3N0UXQ6OnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2go
Ym9vbCBub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpCi17Ci0gICAgbV9ub3RpZnlBZnRl
clNjaGVkdWxlZExheWVyRmx1c2ggPSBub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQotewotICAgIG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKLQotICAgIC8vIEFkZCB0aGUgYWNjZWxl
cmF0ZWQgbGF5ZXIgdHJlZSBoaWVyYXJjaHkuCi0gICAgaWYgKGdyYXBoaWNzTGF5ZXIpCi0gICAg
ICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+YWRkQ2hpbGQoZ3JhcGhpY3NMYXllcik7
Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjppbnZhbGlkYXRlKCkKLXsKLSAgICBjYW5jZWxQ
ZW5kaW5nTGF5ZXJGbHVzaCgpOwotCi0gICAgQVNTRVJUKG1faXNWYWxpZCk7Ci0gICAgbV9yb290
TGF5ZXIgPSBudWxscHRyOwotICAgIG1faXNWYWxpZCA9IGZhbHNlOwotfQotCi12b2lkIExheWVy
VHJlZUhvc3RRdDo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgcmVjdCkKLXsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIt
PnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVy
KQotICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0
KTsKLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RR
dDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNj
cm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCkKLXsKLSAgICBz
ZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShzY3JvbGxSZWN0KTsKLX0KLQotdm9p
ZCBMYXllclRyZWVIb3N0UXQ6OmZvcmNlUmVwYWludCgpCi17Ci0gICAgc2NoZWR1bGVMYXllckZs
dXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzaXplRGlkQ2hhbmdlKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIG5ld1NpemUpCi17Ci0gICAgbV9yb290TGF5ZXItPnNldFNpemUobmV3
U2l6ZSk7Ci0KLSAgICAvLyBJZiB0aGUgbmV3U2l6ZSBleHBvc2VzIG5ldyBhcmVhcyBvZiB0aGUg
bm9uLWNvbXBvc2l0ZWQgY29udGVudCBhIHNldE5lZWRzRGlzcGxheSBpcyBuZWVkZWQKLSAgICAv
LyBmb3IgdGhvc2UgbmV3bHkgZXhwb3NlZCBhcmVhcy4KLSAgICBGbG9hdFNpemUgb2xkU2l6ZSA9
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgpOwotICAgIG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKLQotICAgIGlmIChuZXdTaXplLndpZHRo
KCkgPiBvbGRTaXplLndpZHRoKCkpIHsKLSAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RkOjptaW4o
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG5ld1NpemUuaGVpZ2h0KCkpLCBvbGRTaXplLmhlaWdodCgpKTsK
LSAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJl
Y3QoRmxvYXRSZWN0KG9sZFNpemUud2lkdGgoKSwgMCwgbmV3U2l6ZS53aWR0aCgpIC0gb2xkU2l6
ZS53aWR0aCgpLCBoZWlnaHQpKTsKLSAgICB9Ci0KLSAgICBpZiAobmV3U2l6ZS5oZWlnaHQoKSA+
IG9sZFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdCgwLCBvbGRTaXplLmhlaWdodCgpLCBuZXdT
aXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7Ci0KLSAg
ICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQotICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNl
dFNpemUobmV3U2l6ZSk7Ci0KLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBM
YXllclRyZWVIb3N0UXQ6OmRpZEluc3RhbGxQYWdlT3ZlcmxheSgpCi17Ci0gICAgY3JlYXRlUGFn
ZU92ZXJsYXlMYXllcigpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotCi19Ci0KLXZvaWQg
TGF5ZXJUcmVlSG9zdFF0OjpkaWRVbmluc3RhbGxQYWdlT3ZlcmxheSgpCi17Ci0gICAgZGVzdHJv
eVBhZ2VPdmVybGF5TGF5ZXIoKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9p
ZCBMYXllclRyZWVIb3N0UXQ6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHJlY3QpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7Ci0g
ICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAg
c2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLWJvb2wgTGF5ZXJUcmVlSG9zdFF0OjpmbHVzaFBl
bmRpbmdMYXllckNoYW5nZXMoKQotewotICAgIGJvb2wgZGlkU3luYyA9IG1fd2ViUGFnZS0+Y29y
ZVBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNsdWRp
bmdTdWJmcmFtZXMoKTsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnN5bmNDb21w
b3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5
ZXIpCi0gICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCk7Ci0KLSAgICBtX3Jvb3RMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVG
b3JUaGlzTGF5ZXJPbmx5KCk7Ci0gICAgcmV0dXJuIGRpZFN5bmM7Ci19Ci0KLXZvaWQgTGF5ZXJU
cmVlSG9zdFF0OjpkaWRTeW5jQ29tcG9zaXRpbmdTdGF0ZUZvckxheWVyKGNvbnN0IFdlYkxheWVy
SW5mbyYgaW5mbykKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OlN5bmNDb21wb3NpdGluZ0xh
eWVyU3RhdGUoaW5mbykpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6ZGlkRGVsZXRlTGF5
ZXIoV2ViTGF5ZXJJRCBpZCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkRlbGV0ZUNvbXBv
c2l0aW5nTGF5ZXIoaWQpKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnBlcmZvcm1TY2hl
ZHVsZWRMYXllckZsdXNoKCkKLXsKLSAgICBtX3dlYlBhZ2UtPmxheW91dElmTmVlZGVkKCk7Ci0K
LSAgICBpZiAoIW1faXNWYWxpZCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxFKFRJTEVE
X0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKG1faXNTdXNwZW5kZWQgfHwgbV93YWl0aW5nRm9yVUlQ
cm9jZXNzKQotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLQotICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gZmFsc2U7Ci0gICAgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7Ci0gICAgaWYgKCFtX3No
b3VsZFN5bmNGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2hvdWxkU3luY1Jv
b3RMYXllcikgewotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhv
c3RQcm94eTo6U2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodG9XZWJHcmFwaGljc0xheWVyKG1fcm9v
dExheWVyLmdldCgpKS0+aWQoKSkpOwotICAgICAgICBtX3Nob3VsZFN5bmNSb290TGF5ZXIgPSBm
YWxzZTsKLSAgICB9Ci0KLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhv
c3RQcm94eTo6RGlkUmVuZGVyRnJhbWUoKSk7Ci0KLSAgICBpZiAoIW1fbm90aWZ5QWZ0ZXJTY2hl
ZHVsZWRMYXllckZsdXNoKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBMZXQgdGhlIGRyYXdp
bmcgYXJlYSBrbm93IHRoYXQgd2UndmUgZG9uZSBhIGZsdXNoIG9mIHRoZSBsYXllciBjaGFuZ2Vz
LgotICAgIHN0YXRpY19jYXN0PERyYXdpbmdBcmVhSW1wbCo+KG1fd2ViUGFnZS0+ZHJhd2luZ0Fy
ZWEoKSktPmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7Ci0gICAgbV9ub3RpZnlBZnRlclNjaGVk
dWxlZExheWVyRmx1c2ggPSBmYWxzZTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OmxheWVy
Rmx1c2hUaW1lckZpcmVkKFRpbWVyPExheWVyVHJlZUhvc3RRdD4qKQotewotICAgIHBlcmZvcm1T
Y2hlZHVsZWRMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpjcmVhdGVQ
YWdlT3ZlcmxheUxheWVyKCkKLXsKLSAgICBBU1NFUlQoIW1fcGFnZU92ZXJsYXlMYXllcik7Ci0K
LSAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7Ci0j
aWZuZGVmIE5ERUJVRwotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVl
SG9zdFF0IHBhZ2Ugb3ZlcmxheSBjb250ZW50Iik7Ci0jZW5kaWYKLQotICAgIG1fcGFnZU92ZXJs
YXlMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOwotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+
c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7Ci0KLSAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQo
bV9wYWdlT3ZlcmxheUxheWVyLmdldCgpKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OmRl
c3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkKLXsKLSAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVy
KTsKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICBtX3Bh
Z2VPdmVybGF5TGF5ZXIgPSBudWxscHRyOwotfQotCi1pbnQ2NF90IExheWVyVHJlZUhvc3RRdDo6
YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJbWFnZSogaW1hZ2UpCi17Ci0gICAgaWYgKCFpbWFnZSkK
LSAgICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXllcklEOwotICAgIFFQaXhtYXAqIHBpeG1hcCA9
IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotCi0gICAgaWYgKCFwaXhtYXAp
Ci0gICAgICAgIHJldHVybiBJbnZhbGlkV2ViTGF5ZXJJRDsKLQotICAgIGludDY0X3Qga2V5ID0g
cGl4bWFwLT5jYWNoZUtleSgpOwotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3Ig
aXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKLQotICAg
IGlmIChpdCAhPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKSB7Ci0g
ICAgICAgICsrKGl0LT5zZWNvbmQpOwotICAgICAgICByZXR1cm4ga2V5OwotICAgIH0KLQotICAg
IFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRl
U2hhcmVhYmxlKGltYWdlLT5zaXplKCksIGltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpID8g
U2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhIDogMCk7Ci0gICAgewotICAgICAgICBPd25Q
dHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBiaXRtYXAtPmNy
ZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwotICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFn
ZShpbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQ6Onplcm8oKSk7Ci0gICAgfQot
Ci0gICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOwotICAgIGJpdG1hcC0+Y3JlYXRl
SGFuZGxlKGhhbmRsZSk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVI
b3N0UHJveHk6OkNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGtleSwgaGFuZGxlKSk7Ci0g
ICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5hZGQoa2V5LCAxKTsKLSAgICBy
ZXR1cm4ga2V5OwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6cmVsZWFzZUltYWdlQmFja2lu
Z1N0b3JlKGludDY0X3Qga2V5KQotewotICAgIGlmICgha2V5KQotICAgICAgICByZXR1cm47Ci0g
ICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOwotICAgIGlmIChpdCA9PSBtX2RpcmVjdGx5Q29t
cG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpdC0+
c2Vjb25kLS07Ci0KLSAgICBpZiAoaXQtPnNlY29uZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5yZW1vdmUoaXQpOwotICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpEZXN0cm95RGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2Uoa2V5KSk7Ci19Ci0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6Om5vdGlm
eUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSB0
aW1lKQotewotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6bm90aWZ5U3luY1JlcXVpcmVkKGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQotewotfQotCi12b2lkIExheWVyVHJlZUhvc3RR
dDo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xh
eWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgV2ViQ29yZTo6
R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBS
ZWN0KQotewotICAgIGlmIChncmFwaGljc0xheWVyID09IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllcikgewotICAgICAgICBtX3dlYlBhZ2UtPmRyYXdSZWN0KGdyYXBoaWNzQ29udGV4dCwgY2xp
cFJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGdyYXBoaWNzTGF5ZXIg
PT0gbV9wYWdlT3ZlcmxheUxheWVyKSB7Ci0gICAgICAgIG1fd2ViUGFnZS0+ZHJhd1BhZ2VPdmVy
bGF5KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
fQotCi1ib29sIExheWVyVHJlZUhvc3RRdDo6c2hvd0RlYnVnQm9yZGVycygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd0RlYnVnQm9y
ZGVycygpOwotfQotCi1ib29sIExheWVyVHJlZUhvc3RRdDo6c2hvd1JlcGFpbnRDb3VudGVyKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5z
aG93UmVwYWludENvdW50ZXIoKTsKLX0KLQotYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmcoKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lmIEVO
QUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZVRp
bGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRh
dGVJbmZvKQotewotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFBy
b3h5OjpDcmVhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJbmZvKSk7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojp1cGRhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwg
aW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKLXsKLSAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6VXBkYXRlVGlsZUZvckxheWVy
KGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5mbykpOwotfQotdm9pZCBMYXllclRyZWVIb3N0UXQ6
OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQotewotICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1vdmVUaWxlRm9yTGF5
ZXIobGF5ZXJJRCwgdGlsZUlEKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRWaXNp
YmxlQ29udGVudFJlY3RGb3JMYXllcihpbnQgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgcmVjdCkKLXsKLSAgICBXZWJHcmFwaGljc0xheWVyKiBsYXllciA9IFdlYkdyYXBoaWNzTGF5
ZXI6OmxheWVyQnlJRChsYXllcklEKTsKLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47
Ci0gICAgRmxvYXRSZWN0IHZpc2libGVSZWN0KHJlY3QpOwotICAgIGxheWVyLT5zZXRWaXNpYmxl
Q29udGVudFJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRWaXNpYmxl
Q29udGVudFJlY3RBbmRTY2FsZShjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSkKLXsK
LSAgICBXZWJHcmFwaGljc0xheWVyKiBsYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcihtX3Jvb3RM
YXllci5nZXQoKSk7Ci0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuOwotICAgIGxheWVy
LT5zZXRDb250ZW50c1NjYWxlKHNjYWxlKTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KHJlY3Qp
OwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVj
dG9yeVZlY3Rvcihjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQotewotICAgIHRv
V2ViR3JhcGhpY3NMYXllcihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5zZXRW
aXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWplY3RvcnlWZWN0b3IpOwotfQot
Ci12b2lkIExheWVyVHJlZUhvc3RRdDo6cmVuZGVyTmV4dEZyYW1lKCkKLXsKLSAgICBtX3dhaXRp
bmdGb3JVSVByb2Nlc3MgPSBmYWxzZTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQot
Ym9vbCBMYXllclRyZWVIb3N0UXQ6OmxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuICFtX2lzU3VzcGVuZGVkICYmICFtX3dhaXRpbmdGb3JVSVByb2Nlc3M7
Ci19Ci0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLSNlbHNlCiAjaW5jbHVkZSAi
TGF5ZXJUcmVlSG9zdC5oIgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIGJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nKCkKQEAgLTQ0MCw0ICszNSwzIEBAIGJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXll
clRyZWVIb3N0UXQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXll
clRyZWVIb3N0UXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBhYzk2YTMxYjQ4
ZTA2MTJlNDM2MjdmMzc4YTNlMzdiZjFlNWJlMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQv
TGF5ZXJUcmVlSG9zdFF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAg
ICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotKi8KLQotI2lmbmRlZiBMYXllclRyZWVIb3N0UXRfaAotI2RlZmluZSBMYXllclRy
ZWVIb3N0UXRfaAotCi0jaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgotI2luY2x1ZGUgIkxh
eWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgIldlYkdyYXBoaWNz
TGF5ZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KLSNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBVcGRhdGVJ
bmZvOwotY2xhc3MgV2ViUGFnZTsKLQotY2xhc3MgTGF5ZXJUcmVlSG9zdFF0IDogcHVibGljIExh
eWVyVHJlZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQKLSNpZiBFTkFCTEUoVElM
RURfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJMYXll
clRyZWVUaWxlQ2xpZW50Ci0jZW5kaWYKLXsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxMYXllclRyZWVIb3N0UXQ+IGNyZWF0ZShXZWJQYWdlKik7Ci0gICAgdmlydHVhbCB+TGF5ZXJU
cmVlSG9zdFF0KCk7Ci0KLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmcoKTsKLQotICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVl
Q29udGV4dCgpIHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dDsgfQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lk
IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGROb3RpZnlB
ZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRS
b290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVh
bCB2b2lkIGludmFsaWRhdGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXROb25Db21wb3NpdGVk
Q29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVh
bCB2b2lkIHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOwotICAg
IHZpcnR1YWwgdm9pZCBmb3JjZVJlcGFpbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENo
YW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBkaWRJbnN0YWxsUGFnZU92ZXJsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkVW5pbnN0YWxs
UGFnZU92ZXJsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3Bs
YXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIHBhdXNlUmVu
ZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCByZXN1
bWVSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1bGVMYXllckZsdXNo
KCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKSB7IH0K
LSAgICB2aXJ0dWFsIGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJbWFnZSopOwotICAg
IHZpcnR1YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCk7Ci0KLSNpZiBF
TkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShX
ZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJik7Ci0gICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYp
OwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQpOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RGb3JMYXllcihpbnQgbGF5ZXJJ
RCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0
RnJhbWUoKTsKLSAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKGNv
bnN0IEludFJlY3QmLCBmbG9hdCBzY2FsZSk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVD
b250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYpOwotICAgIHZpcnR1
YWwgdm9pZCBkaWRTeW5jQ29tcG9zaXRpbmdTdGF0ZUZvckxheWVyKGNvbnN0IFdlYkxheWVySW5m
byYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWREZWxldGVMYXllcihXZWJMYXllcklEKTsKLSNlbmRp
ZgotCi1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgTGF5ZXJUcmVlSG9zdFF0KFdlYlBhZ2UqKTsK
LQotcHJpdmF0ZToKLSAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lk
IG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRv
dWJsZSB0aW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhj
b25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jiwg
V2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIGNsaXBSZWN0KTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoKSBjb25zdDsKLQotICAgIC8v
IExheWVyVHJlZUhvc3RRdAotICAgIHZvaWQgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOwotICAg
IHZvaWQgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKLSAgICBib29sIGZsdXNoUGVuZGluZ0xh
eWVyQ2hhbmdlcygpOwotICAgIHZvaWQgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKLSAgICB2
b2lkIHBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7Ci0gICAgdm9pZCBzZW5kTGF5ZXJzVG9V
SSgpOwotCi0gICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwot
Ci0gICAgLy8gVGhlIGxheWVyIHdoaWNoIGNvbnRhaW5zIGFsbCBub24tY29tcG9zaXRlZCBjb250
ZW50LgotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXI7Ci0KLSAgICAvLyBUaGUgcGFnZSBvdmVybGF5IGxheWVyLiBXaWxsIGJlIG51
bGwgaWYgdGhlcmUncyBubyBwYWdlIG92ZXJsYXkuCi0gICAgT3duUHRyPFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXI+IG1fcGFnZU92ZXJsYXlMYXllcjsKLQotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50
PiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzOwotCi0gICAgYm9vbCBtX25vdGlm
eUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaDsKLSAgICBib29sIG1faXNWYWxpZDsKLSNpZiBFTkFC
TEUoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICBib29sIG1fd2FpdGluZ0ZvclVJUHJvY2VzczsK
LSAgICBib29sIG1faXNTdXNwZW5kZWQ7Ci0jZW5kaWYKLSAgICBMYXllclRyZWVDb250ZXh0IG1f
bGF5ZXJUcmVlQ29udGV4dDsKLSAgICBib29sIG1fc2hvdWxkU3luY0ZyYW1lOwotICAgIGJvb2wg
bV9zaG91bGRTeW5jUm9vdExheWVyOwotICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2Vi
Q29yZTo6VGltZXI8TGF5ZXJUcmVlSG9zdFF0PiopOwotICAgIFdlYkNvcmU6OlRpbWVyPExheWVy
VHJlZUhvc3RRdD4gbV9sYXllckZsdXNoVGltZXI7Ci0gICAgYm9vbCBtX2xheWVyRmx1c2hTY2hl
ZHVsaW5nRW5hYmxlZDsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExheWVyVHJlZUhvc3RRdF9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>